Index: /EcnlProtoTool/trunk/asp3_dcre/arch/arm_gcc/common/Makefile.core
===================================================================
--- /EcnlProtoTool/trunk/asp3_dcre/arch/arm_gcc/common/Makefile.core	(revision 438)
+++ /EcnlProtoTool/trunk/asp3_dcre/arch/arm_gcc/common/Makefile.core	(revision 439)
@@ -2,5 +2,5 @@
 #		Makefileのコア依存部（ARM用）
 #
-#  $Id: Makefile.core 755 2016-06-12 10:08:22Z ertl-hiro $
+#  $Id$
 #
 
Index: /EcnlProtoTool/trunk/asp3_dcre/arch/arm_gcc/common/core_check.trb
===================================================================
--- /EcnlProtoTool/trunk/asp3_dcre/arch/arm_gcc/common/core_check.trb	(revision 438)
+++ /EcnlProtoTool/trunk/asp3_dcre/arch/arm_gcc/common/core_check.trb	(revision 439)
@@ -3,5 +3,5 @@
 #		パス3の生成スクリプトのコア依存部（ARM用）
 # 
-#  $Id: core_check.trb 730 2016-04-03 02:04:52Z ertl-hiro $
+#  $Id$
 #
 
Index: /EcnlProtoTool/trunk/asp3_dcre/arch/arm_gcc/common/core_kernel.trb
===================================================================
--- /EcnlProtoTool/trunk/asp3_dcre/arch/arm_gcc/common/core_kernel.trb	(revision 438)
+++ /EcnlProtoTool/trunk/asp3_dcre/arch/arm_gcc/common/core_kernel.trb	(revision 439)
@@ -38,5 +38,5 @@
 #   の責任を負わない．
 # 
-#   $Id: core_kernel.trb 662 2016-02-27 02:33:51Z ertl-hiro $
+#   $Id$
 # 
 
Index: /EcnlProtoTool/trunk/asp3_dcre/arch/arm_gcc/common/core_offset.trb
===================================================================
--- /EcnlProtoTool/trunk/asp3_dcre/arch/arm_gcc/common/core_offset.trb	(revision 438)
+++ /EcnlProtoTool/trunk/asp3_dcre/arch/arm_gcc/common/core_offset.trb	(revision 439)
@@ -3,5 +3,5 @@
 #		オフセットファイル生成用Rubyテンプレート（ARM用）
 #
-#  $Id: core_offset.trb 572 2016-02-01 14:40:09Z ertl-hiro $
+#  $Id$
 #
 
Index: /EcnlProtoTool/trunk/asp3_dcre/arch/arm_gcc/common/core_test.h
===================================================================
--- /EcnlProtoTool/trunk/asp3_dcre/arch/arm_gcc/common/core_test.h	(revision 438)
+++ /EcnlProtoTool/trunk/asp3_dcre/arch/arm_gcc/common/core_test.h	(revision 439)
@@ -36,5 +36,5 @@
  *  の責任を負わない．
  * 
- *  $Id: core_test.h 1244 2019-07-16 21:41:05Z ertl-hiro $
+ *  $Id$
  */
 
Index: /EcnlProtoTool/trunk/asp3_dcre/arch/arm_gcc/rza1/Makefile.chip
===================================================================
--- /EcnlProtoTool/trunk/asp3_dcre/arch/arm_gcc/rza1/Makefile.chip	(revision 438)
+++ /EcnlProtoTool/trunk/asp3_dcre/arch/arm_gcc/rza1/Makefile.chip	(revision 439)
@@ -2,5 +2,5 @@
 #		Makefile のチップ依存部（RZ/A1用）
 #
-#  $Id: Makefile.chip 720 2016-04-01 22:16:17Z ertl-hiro $
+#  $Id$
 # 
 
Index: /EcnlProtoTool/trunk/asp3_dcre/cfg/GenFile.rb
===================================================================
--- /EcnlProtoTool/trunk/asp3_dcre/cfg/GenFile.rb	(revision 438)
+++ /EcnlProtoTool/trunk/asp3_dcre/cfg/GenFile.rb	(revision 439)
@@ -37,5 +37,5 @@
 #  の責任を負わない．
 #
-#  $Id: GenFile.rb 111 2016-03-16 23:50:27Z ertl-hiro $
+#  $Id$
 #
 
Index: /EcnlProtoTool/trunk/asp3_dcre/cfg/SRecord.rb
===================================================================
--- /EcnlProtoTool/trunk/asp3_dcre/cfg/SRecord.rb	(revision 438)
+++ /EcnlProtoTool/trunk/asp3_dcre/cfg/SRecord.rb	(revision 439)
@@ -36,5 +36,5 @@
 #  の責任を負わない．
 #
-#  $Id: SRecord.rb 161 2018-12-12 00:45:04Z ertl-hiro $
+#  $Id$
 #
 
Index: /EcnlProtoTool/trunk/asp3_dcre/cfg/cfg.rb
===================================================================
--- /EcnlProtoTool/trunk/asp3_dcre/cfg/cfg.rb	(revision 438)
+++ /EcnlProtoTool/trunk/asp3_dcre/cfg/cfg.rb	(revision 439)
@@ -37,5 +37,5 @@
 #  の責任を負わない．
 #
-#  $Id: cfg.rb 175 2019-06-19 01:51:58Z ertl-hiro $
+#  $Id$
 #
 
Index: /EcnlProtoTool/trunk/asp3_dcre/cfg/pass1.rb
===================================================================
--- /EcnlProtoTool/trunk/asp3_dcre/cfg/pass1.rb	(revision 438)
+++ /EcnlProtoTool/trunk/asp3_dcre/cfg/pass1.rb	(revision 439)
@@ -36,5 +36,5 @@
 #  の責任を負わない．
 #
-#  $Id: pass1.rb 165 2019-01-11 01:29:47Z ertl-hiro $
+#  $Id$
 #
 
Index: /EcnlProtoTool/trunk/asp3_dcre/cfg/pass2.rb
===================================================================
--- /EcnlProtoTool/trunk/asp3_dcre/cfg/pass2.rb	(revision 438)
+++ /EcnlProtoTool/trunk/asp3_dcre/cfg/pass2.rb	(revision 439)
@@ -36,5 +36,5 @@
 #  の責任を負わない．
 #
-#  $Id: pass2.rb 175 2019-06-19 01:51:58Z ertl-hiro $
+#  $Id$
 #
 
Index: /EcnlProtoTool/trunk/asp3_dcre/kernel/genoffset.trb
===================================================================
--- /EcnlProtoTool/trunk/asp3_dcre/kernel/genoffset.trb	(revision 438)
+++ /EcnlProtoTool/trunk/asp3_dcre/kernel/genoffset.trb	(revision 439)
@@ -36,5 +36,5 @@
 #   の責任を負わない．
 # 
-#   $Id: genoffset.trb 936 2018-04-07 09:46:42Z ertl-hiro $
+#   $Id$
 # 
 
Index: /EcnlProtoTool/trunk/asp3_dcre/kernel/interrupt.trb
===================================================================
--- /EcnlProtoTool/trunk/asp3_dcre/kernel/interrupt.trb	(revision 438)
+++ /EcnlProtoTool/trunk/asp3_dcre/kernel/interrupt.trb	(revision 439)
@@ -38,5 +38,5 @@
 #   の責任を負わない．
 # 
-#   $Id: interrupt.trb 1167 2019-02-03 17:06:17Z ertl-hiro $
+#   $Id$
 # 
 
Index: /EcnlProtoTool/trunk/asp3_dcre/kernel/kernel.trb
===================================================================
--- /EcnlProtoTool/trunk/asp3_dcre/kernel/kernel.trb	(revision 438)
+++ /EcnlProtoTool/trunk/asp3_dcre/kernel/kernel.trb	(revision 439)
@@ -38,5 +38,5 @@
 #   の責任を負わない．
 # 
-#   $Id: kernel.trb 1167 2019-02-03 17:06:17Z ertl-hiro $
+#   $Id$
 # 
 
Index: /EcnlProtoTool/trunk/asp3_dcre/kernel/kernel_check.trb
===================================================================
--- /EcnlProtoTool/trunk/asp3_dcre/kernel/kernel_check.trb	(revision 438)
+++ /EcnlProtoTool/trunk/asp3_dcre/kernel/kernel_check.trb	(revision 439)
@@ -38,5 +38,5 @@
 #   の責任を負わない．
 # 
-#   $Id: kernel_check.trb 1167 2019-02-03 17:06:17Z ertl-hiro $
+#   $Id$
 #  
 
Index: /EcnlProtoTool/trunk/asp3_dcre/target/gr_peach_gcc/Makefile.target
===================================================================
--- /EcnlProtoTool/trunk/asp3_dcre/target/gr_peach_gcc/Makefile.target	(revision 438)
+++ /EcnlProtoTool/trunk/asp3_dcre/target/gr_peach_gcc/Makefile.target	(revision 439)
@@ -2,5 +2,5 @@
 #		Makefile のターゲット依存部（GR-PEACH用）
 #
-#  $Id: Makefile.target 732 2016-04-03 03:08:05Z ertl-hiro $
+#  $Id$
 # 
 
Index: /EcnlProtoTool/trunk/asp3_dcre/target/gr_peach_gcc/Makefile.tinet
===================================================================
--- /EcnlProtoTool/trunk/asp3_dcre/target/gr_peach_gcc/Makefile.tinet	(revision 438)
+++ /EcnlProtoTool/trunk/asp3_dcre/target/gr_peach_gcc/Makefile.tinet	(revision 439)
@@ -29,5 +29,5 @@
 #   接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
 #  
-#   @(#) $Id: Makefile.tinet,v 1.6 2012/07/18 04:17:01 abe Exp abe $
+#   @(#) $Id$
 #
 
Index: /EcnlProtoTool/trunk/asp3_dcre/target/gr_peach_gcc/gr_peach_ram.ld
===================================================================
--- /EcnlProtoTool/trunk/asp3_dcre/target/gr_peach_gcc/gr_peach_ram.ld	(revision 438)
+++ /EcnlProtoTool/trunk/asp3_dcre/target/gr_peach_gcc/gr_peach_ram.ld	(revision 439)
@@ -1,4 +1,4 @@
 /*
- *  $Id: gr_peach_ram.ld 720 2016-04-01 22:16:17Z ertl-hiro $
+ *  $Id$
  */
 
Index: /EcnlProtoTool/trunk/asp3_dcre/target/gr_peach_gcc/gr_peach_rom.ld
===================================================================
--- /EcnlProtoTool/trunk/asp3_dcre/target/gr_peach_gcc/gr_peach_rom.ld	(revision 438)
+++ /EcnlProtoTool/trunk/asp3_dcre/target/gr_peach_gcc/gr_peach_rom.ld	(revision 439)
@@ -1,4 +1,4 @@
 /*
- *  $Id: gr_peach_rom.ld 720 2016-04-01 22:16:17Z ertl-hiro $
+ *  $Id$
  */
 
Index: /EcnlProtoTool/trunk/asp3_dcre/target/gr_peach_gcc/target_check.trb
===================================================================
--- /EcnlProtoTool/trunk/asp3_dcre/target/gr_peach_gcc/target_check.trb	(revision 438)
+++ /EcnlProtoTool/trunk/asp3_dcre/target/gr_peach_gcc/target_check.trb	(revision 439)
@@ -3,5 +3,5 @@
 #		パス3の生成スクリプトのターゲット依存部
 #
-#  $Id: target_check.trb 1071 2018-11-25 01:27:37Z ertl-hiro $
+#  $Id$
 #
 
Index: /EcnlProtoTool/trunk/asp3_dcre/target/gr_peach_gcc/target_kernel.trb
===================================================================
--- /EcnlProtoTool/trunk/asp3_dcre/target/gr_peach_gcc/target_kernel.trb	(revision 438)
+++ /EcnlProtoTool/trunk/asp3_dcre/target/gr_peach_gcc/target_kernel.trb	(revision 439)
@@ -3,5 +3,5 @@
 #		パス2の生成スクリプトのターゲット依存部
 #
-#  $Id: target_kernel.trb 1071 2018-11-25 01:27:37Z ertl-hiro $
+#  $Id$
 #
 
Index: /EcnlProtoTool/trunk/asp3_dcre/target/gr_peach_gcc/target_user.txt
===================================================================
--- /EcnlProtoTool/trunk/asp3_dcre/target/gr_peach_gcc/target_user.txt	(revision 438)
+++ /EcnlProtoTool/trunk/asp3_dcre/target/gr_peach_gcc/target_user.txt	(revision 439)
@@ -46,5 +46,5 @@
  の責任を負わない．
  
- $Id: target_user.txt 1280 2019-10-06 01:47:52Z ertl-hiro $
+ $Id$
 ----------------------------------------------------------------------
 
Index: /EcnlProtoTool/trunk/asp3_dcre/tecsgen/Makefile
===================================================================
--- /EcnlProtoTool/trunk/asp3_dcre/tecsgen/Makefile	(revision 438)
+++ /EcnlProtoTool/trunk/asp3_dcre/tecsgen/Makefile	(revision 439)
@@ -34,5 +34,5 @@
 #   の責任を負わない．
 #  
-#   $Id: Makefile 2640 2017-06-03 11:27:12Z okuma-top $
+#   $Id$
 #++
 
Index: /EcnlProtoTool/trunk/asp3_dcre/tecsgen/in_exerb.rb
===================================================================
--- /EcnlProtoTool/trunk/asp3_dcre/tecsgen/in_exerb.rb	(revision 438)
+++ /EcnlProtoTool/trunk/asp3_dcre/tecsgen/in_exerb.rb	(revision 439)
@@ -35,5 +35,5 @@
 #   の責任を負わない．
 #  
-#   $Id: in_exerb.rb 1011 2016-07-11 02:20:01Z coas-nagasima $
+#   $Id$
 #++
 
Index: /EcnlProtoTool/trunk/asp3_dcre/tecsgen/tecs/mruby/nMruby_tMrubyVM.c
===================================================================
--- /EcnlProtoTool/trunk/asp3_dcre/tecsgen/tecs/mruby/nMruby_tMrubyVM.c	(revision 438)
+++ /EcnlProtoTool/trunk/asp3_dcre/tecsgen/tecs/mruby/nMruby_tMrubyVM.c	(revision 439)
@@ -216,5 +216,5 @@
 mrb_open_TECS( CELLCB *p_cellcb)
 {
-    return mrb_open_allocf(mrb_TECS_allocf, (void *)p_cellcb);
+    return mrb_open_allocf(mrb_TECS_allocf, (void *)p_cellcb, FALSE);
 };
 
Index: /EcnlProtoTool/trunk/asp3_dcre/tecsgen/tecslib/core/C_parser.y.rb
===================================================================
--- /EcnlProtoTool/trunk/asp3_dcre/tecsgen/tecslib/core/C_parser.y.rb	(revision 438)
+++ /EcnlProtoTool/trunk/asp3_dcre/tecsgen/tecslib/core/C_parser.y.rb	(revision 439)
@@ -35,5 +35,5 @@
 #   の責任を負わない．
 #  
-#   $Id: C_parser.y.rb 2810 2018-03-11 13:20:03Z okuma-top $
+#   $Id$
 #++
 
Index: /EcnlProtoTool/trunk/asp3_dcre/tecsgen/tecslib/plugin/CompositePlugin.rb
===================================================================
--- /EcnlProtoTool/trunk/asp3_dcre/tecsgen/tecslib/plugin/CompositePlugin.rb	(revision 438)
+++ /EcnlProtoTool/trunk/asp3_dcre/tecsgen/tecslib/plugin/CompositePlugin.rb	(revision 439)
@@ -35,5 +35,5 @@
 #   の責任を負わない．
 #  
-#   $Id: CelltypePlugin.rb 2635 2017-04-16 02:37:16Z okuma-top $
+#   $Id$
 #++
 
Index: /EcnlProtoTool/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRP2AlarmHandlerPlugin.rb
===================================================================
--- /EcnlProtoTool/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRP2AlarmHandlerPlugin.rb	(revision 438)
+++ /EcnlProtoTool/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRP2AlarmHandlerPlugin.rb	(revision 439)
@@ -35,5 +35,5 @@
 #   の責任を負わない．
 #
-#   $Id: HRP2AlarmHandlerPlugin.rb 2640 2017-06-03 11:27:12Z okuma-top $
+#   $Id$
 #  
 #++
Index: /EcnlProtoTool/trunk/asp3_dcre/tecsgen/tecsmerge.rb
===================================================================
--- /EcnlProtoTool/trunk/asp3_dcre/tecsgen/tecsmerge.rb	(revision 438)
+++ /EcnlProtoTool/trunk/asp3_dcre/tecsgen/tecsmerge.rb	(revision 439)
@@ -37,5 +37,5 @@
 #   の責任を負わない．
 #  
-#   $Id: tecsmerge.rb 2633 2017-04-02 06:02:05Z okuma-top $
+#   $Id$
 #++
 
Index: /EcnlProtoTool/trunk/asp3_dcre/utils/applyrename.rb
===================================================================
--- /EcnlProtoTool/trunk/asp3_dcre/utils/applyrename.rb	(revision 438)
+++ /EcnlProtoTool/trunk/asp3_dcre/utils/applyrename.rb	(revision 439)
@@ -39,5 +39,5 @@
 #  の責任を負わない．
 # 
-#  $Id: applyrename.rb 852 2017-11-04 16:19:49Z ertl-hiro $
+#  $Id$
 # 
 
Index: /EcnlProtoTool/trunk/asp3_dcre/utils/genrename.rb
===================================================================
--- /EcnlProtoTool/trunk/asp3_dcre/utils/genrename.rb	(revision 438)
+++ /EcnlProtoTool/trunk/asp3_dcre/utils/genrename.rb	(revision 439)
@@ -39,5 +39,5 @@
 #  の責任を負わない．
 # 
-#  $Id: genrename.rb 852 2017-11-04 16:19:49Z ertl-hiro $
+#  $Id$
 # 
 
Index: /EcnlProtoTool/trunk/mbed_api/src/mbed_api.c
===================================================================
--- /EcnlProtoTool/trunk/mbed_api/src/mbed_api.c	(revision 438)
+++ /EcnlProtoTool/trunk/mbed_api/src/mbed_api.c	(revision 439)
@@ -1,6 +1,6 @@
 /*
- *  TOPPERS ECHONET Lite Communication Middleware
+ *  TOPPERS PROJECT Home Network Working Group Software
  *
- *  Copyright (C) 2017 Cores Co., Ltd. Japan
+ *  Copyright (C) 2017-2019 Cores Co., Ltd. Japan
  *
  *  ä¸è¨èä½æ¨©è
Index: /EcnlProtoTool/trunk/mbed_api/src/mbed_api.h
===================================================================
--- /EcnlProtoTool/trunk/mbed_api/src/mbed_api.h	(revision 438)
+++ /EcnlProtoTool/trunk/mbed_api/src/mbed_api.h	(revision 439)
@@ -1,6 +1,6 @@
 /*
- *  TOPPERS ECHONET Lite Communication Middleware
+ *  TOPPERS PROJECT Home Network Working Group Software
  * 
- *  Copyright (C) 2014-2017 Cores Co., Ltd. Japan
+ *  Copyright (C) 2017-2019 Cores Co., Ltd. Japan
  * 
  *  ä¸è¨èä½æ¨©è
Index: /EcnlProtoTool/trunk/mrbgems/mruby-iijson/mrbgem.rake
===================================================================
--- /EcnlProtoTool/trunk/mrbgems/mruby-iijson/mrbgem.rake	(revision 438)
+++ /EcnlProtoTool/trunk/mrbgems/mruby-iijson/mrbgem.rake	(revision 439)
@@ -3,4 +3,6 @@
   spec.author  = 'Internet Initiative Japan Inc.'
 
-  spec.add_dependency "mruby-sprintf", :core => "mruby-sprintf"
+  add_dependency 'mruby-hash-ext', core: 'mruby-hash-ext'
+  add_dependency 'mruby-array-ext', core: 'mruby-array-ext'
+  add_dependency "mruby-sprintf", core: "mruby-sprintf"
 end
Index: /EcnlProtoTool/trunk/mrbgems/mruby-iijson/mrblib/json.rb
===================================================================
--- /EcnlProtoTool/trunk/mrbgems/mruby-iijson/mrblib/json.rb	(revision 438)
+++ /EcnlProtoTool/trunk/mrbgems/mruby-iijson/mrblib/json.rb	(revision 439)
@@ -17,8 +17,8 @@
 
   def self.generate(obj, options=nil, state=nil)
-    options = (options || {}).to_hash unless options.is_a? Hash
+    options = (options || {}).to_h unless options.is_a? Hash
     options[:pretty_print] ||= false
     options[:indent_with] ||= 2
-    state = (state || {}).to_hash unless state.is_a? Hash
+    state = (state || {}).to_h unless state.is_a? Hash
     state[:max_nesting] ||= 100
     state[:nesting] = 0
Index: /EcnlProtoTool/trunk/mrbgems/mruby-iijson/run_test.rb
===================================================================
--- /EcnlProtoTool/trunk/mrbgems/mruby-iijson/run_test.rb	(revision 438)
+++ /EcnlProtoTool/trunk/mrbgems/mruby-iijson/run_test.rb	(revision 439)
@@ -19,4 +19,5 @@
   toolchain :gcc
   conf.gembox 'default'
+  conf.enable_test
 
   conf.gem File.expand_path(File.dirname(__FILE__))
Index: /EcnlProtoTool/trunk/mrbgems/mruby-onig-regexp/.travis.yml
===================================================================
--- /EcnlProtoTool/trunk/mrbgems/mruby-onig-regexp/.travis.yml	(revision 438)
+++ /EcnlProtoTool/trunk/mrbgems/mruby-onig-regexp/.travis.yml	(revision 439)
@@ -4,5 +4,4 @@
     packages:
       - gperf
-      - libonig-dev
 script:
   - export MRUBY_CONFIG="$TRAVIS_BUILD_DIR/.travis_config.rb"
Index: /EcnlProtoTool/trunk/mrbgems/mruby-onig-regexp/mrblib/onig_regexp.rb
===================================================================
--- /EcnlProtoTool/trunk/mrbgems/mruby-onig-regexp/mrblib/onig_regexp.rb	(revision 438)
+++ /EcnlProtoTool/trunk/mrbgems/mruby-onig-regexp/mrblib/onig_regexp.rb	(revision 439)
@@ -16,4 +16,8 @@
   end
 
+  def self.last_match=(match)
+    @last_match = match
+  end
+
   # ISO 15.2.15.7.2
   def initialize_copy(other)
@@ -24,4 +28,6 @@
   def ===(str)
     not self.match(str).nil?
+  rescue TypeError
+    false
   end
 
@@ -46,12 +52,21 @@
   end
 
+  # ISO 15.2.10.5.27
+  def match(re, pos=0, &block)
+    re.match(self, pos, &block)
+  end
+
+
   # redefine methods with oniguruma regexp version
-  [:sub, :gsub, :split, :scan].each do |v|
-    alias_method "string_#{v}".to_sym, v
-    alias_method v, "onig_regexp_#{v}".to_sym
+  %i[sub gsub split scan].each do |v|
+    alias_method :"string_#{v}", v if method_defined?(v)
+    alias_method v, :"onig_regexp_#{v}"
   end
+
+  alias_method :match?, :onig_regexp_match?
 
   alias_method :old_slice, :slice
   alias_method :old_square_brancket, :[]
+  alias_method :old_square_brancket_equal, :[]=
 
   def [](*args)
@@ -78,4 +93,23 @@
 
   alias_method :slice, :[]
+
+  def []=(*args)
+    return old_square_brancket_equal(*args) unless args[0].class == Regexp
+
+    n_args = args.size
+    case n_args
+    when 2
+      match = args[0].match(self)
+      self[match.begin(0)...match.end(0)] = args[1]
+    when 3
+      match = args[0].match(self)
+      n = args[1]
+      self[match.begin(n)...match.end(n)] = args[2]
+    else
+      raise ArgumentError, "wrong number of arguments (#{n_args} for 2..3)"
+    end
+
+    self
+  end
 
   def slice!(*args)
Index: /EcnlProtoTool/trunk/mrbgems/mruby-onig-regexp/src/mruby_onig_regexp.c
===================================================================
--- /EcnlProtoTool/trunk/mrbgems/mruby-onig-regexp/src/mruby_onig_regexp.c	(revision 438)
+++ /EcnlProtoTool/trunk/mrbgems/mruby-onig-regexp/src/mruby_onig_regexp.c	(revision 439)
@@ -25,9 +25,10 @@
 #include <string.h>
 #include <ctype.h>
-#include <stdlib.h>
+#include <memory.h>
 #include <mruby.h>
 #include <mruby/class.h>
 #include <mruby/variable.h>
 #include <mruby/array.h>
+#include <mruby/hash.h>
 #include <mruby/string.h>
 #include <mruby/data.h>
@@ -36,5 +37,11 @@
 #define ONIG_EXTERN extern
 #endif
-#include "onigmo.h"
+#ifdef HAVE_ONIGMO_H
+#include <onigmo.h>
+#elif defined(HAVE_ONIGURUMA_H)
+#include <oniguruma.h>
+#else
+#include "oniguruma.h"
+#endif
 
 #ifdef MRUBY_VERSION
@@ -44,4 +51,30 @@
 #endif
 
+static const char utf8len_codepage[256] =
+{
+  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+  2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+  3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,1,1,1,1,1,1,1,1,1,1,1,
+};
+
+static mrb_int
+utf8len(const char* p, const char* e)
+{
+  mrb_int len;
+  mrb_int i;
+
+  len = utf8len_codepage[(unsigned char)*p];
+  if (p + len > e) return 1;
+  for (i = 1; i < len; ++i)
+    if ((p[i] & 0xc0) != 0x80)
+      return 1;
+  return len;
+}
+
 static void
 onig_regexp_free(mrb_state *mrb, void *p) {
@@ -52,4 +85,7 @@
   "PosixRegexp", onig_regexp_free
 };
+
+#define ONIG_REGEXP_P(obj) \
+  ((mrb_type(obj) == MRB_TT_DATA) && (DATA_TYPE(obj) == &mrb_onig_regexp_type))
 
 static void
@@ -64,4 +100,14 @@
 
 static mrb_value
+str_substr(mrb_state *mrb, mrb_value str, mrb_int beg, mrb_int len)
+{
+#ifdef MRB_UTF8_STRING
+  return mrb_str_new(mrb, RSTRING_PTR(str) + beg, len);
+#else
+  return mrb_str_substr(mrb, str, beg, len);
+#endif
+}
+
+static mrb_value
 onig_regexp_initialize(mrb_state *mrb, mrb_value self) {
   mrb_value str, flag = mrb_nil_value(), code = mrb_nil_value();
@@ -69,5 +115,4 @@
 
   int cflag = 0;
-  OnigSyntaxType* syntax = ONIG_SYNTAX_RUBY;
   OnigEncoding enc = ONIG_ENCODING_UTF8;
   if(mrb_string_p(code)) {
@@ -97,9 +142,9 @@
   OnigRegex reg;
   int result = onig_new(&reg, (OnigUChar*)RSTRING_PTR(str), (OnigUChar*) RSTRING_PTR(str) + RSTRING_LEN(str),
-                        cflag, enc, syntax, &einfo);
+                        cflag, enc, ONIG_SYNTAX_RUBY, &einfo);
   if (result != ONIG_NORMAL) {
     char err[ONIG_MAX_ERROR_MESSAGE_LEN] = "";
-    onig_error_code_to_str((OnigUChar*)err, result);
-    mrb_raisef(mrb, E_ARGUMENT_ERROR, "'%S' is an invalid regular expression because %S.",
+    onig_error_code_to_str((OnigUChar*)err, result, &einfo);
+    mrb_raisef(mrb, E_REGEXP_ERROR, "'%S' is an invalid regular expression because %S.",
                str, mrb_str_new_cstr(mrb, err));
   }
@@ -122,4 +167,6 @@
   return c;
 }
+
+#define MISMATCH_NIL_OR(v) (result == ONIG_MISMATCH ? mrb_nil_value() : (v))
 
 static int
@@ -138,17 +185,19 @@
 
   struct RObject* const cls = (struct RObject*)mrb_class_get(mrb, "OnigRegexp");
-  mrb_obj_iv_set(mrb, cls, mrb_intern_lit(mrb, "@last_match"), match_value);
-
-  if (result != ONIG_MISMATCH &&
-      mrb_class_get(mrb, "Regexp") == (struct RClass*)cls &&
-      mrb_bool(mrb_obj_iv_get(mrb, (struct RObject*)cls, mrb_intern_lit(mrb, "@set_global_variables"))))
+  mrb_obj_iv_set(mrb, cls, mrb_intern_lit(mrb, "@last_match"), MISMATCH_NIL_OR(match_value));
+
+  if (mrb_class_get(mrb, "Regexp") == (struct RClass*)cls &&
+    mrb_bool(mrb_obj_iv_get(mrb, (struct RObject*)cls, mrb_intern_lit(mrb, "@set_global_variables"))))
   {
-    mrb_gv_set(mrb, mrb_intern_lit(mrb, "$~"), match_value);
+    mrb_gv_set(mrb, mrb_intern_lit(mrb, "$~"),
+               MISMATCH_NIL_OR(match_value));
     mrb_gv_set(mrb, mrb_intern_lit(mrb, "$&"),
-               mrb_funcall(mrb, match_value, "[]", 1, mrb_fixnum_value(0)));
-    mrb_gv_set(mrb, mrb_intern_lit(mrb, "$`"), mrb_funcall(mrb, match_value, "pre_match", 0));
-    mrb_gv_set(mrb, mrb_intern_lit(mrb, "$'"), mrb_funcall(mrb, match_value, "post_match", 0));
+               MISMATCH_NIL_OR(mrb_funcall(mrb, match_value, "[]", 1, mrb_fixnum_value(0))));
+    mrb_gv_set(mrb, mrb_intern_lit(mrb, "$`"),
+               MISMATCH_NIL_OR(mrb_funcall(mrb, match_value, "pre_match", 0)));
+    mrb_gv_set(mrb, mrb_intern_lit(mrb, "$'"),
+               MISMATCH_NIL_OR(mrb_funcall(mrb, match_value, "post_match", 0)));
     mrb_gv_set(mrb, mrb_intern_lit(mrb, "$+"),
-               mrb_funcall(mrb, match_value, "[]", 1, mrb_fixnum_value(match->num_regs - 1)));
+               MISMATCH_NIL_OR(mrb_funcall(mrb, match_value, "[]", 1, mrb_fixnum_value(match->num_regs - 1))));
 
     // $1 to $9
@@ -171,24 +220,93 @@
 
 static mrb_value
+reg_operand(mrb_state *mrb, mrb_value obj) {
+  mrb_value ret;
+
+  if (mrb_symbol_p(obj)) {
+    ret = mrb_sym2str(mrb, mrb_symbol(obj));
+    if (mrb_undef_p(ret)) {
+      mrb_bug(mrb, "can not intern %S", obj);
+    }
+  }
+  else {
+    ret = mrb_string_type(mrb, obj);
+  }
+  return ret;
+}
+
+static mrb_value
 onig_regexp_match(mrb_state *mrb, mrb_value self) {
   mrb_value str = mrb_nil_value();
   OnigRegex reg;
   mrb_int pos = 0;
-
-  mrb_get_args(mrb, "o|i", &str, &pos);
+  mrb_value block = mrb_nil_value();
+
+  mrb_get_args(mrb, "o|i&", &str, &pos, &block);
+  if (mrb_nil_p(str)) {
+    return mrb_nil_value();
+  }
+  str = reg_operand(mrb, str);
   if (pos < 0 || (pos > 0 && pos >= RSTRING_LEN(str))) {
     return mrb_nil_value();
   }
 
+  Data_Get_Struct(mrb, self, &mrb_onig_regexp_type, reg);
+
+  mrb_value const ret = create_onig_region(mrb, str, self);
+  if (onig_match_common(mrb, reg, ret, str, pos) == ONIG_MISMATCH) {
+    return mrb_nil_value();
+  }
+
+  if (mrb_nil_p(block)) {
+    return ret;
+  } else {
+    return mrb_yield(mrb, block, ret);
+  }
+}
+
+static mrb_value
+onig_regexp_match_p(mrb_state *mrb, mrb_value self) {
+  mrb_value str = mrb_nil_value();
+  mrb_int pos = 0;
+  OnigRegex reg;
+  OnigUChar const* str_ptr;
+
+  mrb_get_args(mrb, "o|i", &str, &pos);
   if (mrb_nil_p(str)) {
     return mrb_nil_value();
   }
+  str = reg_operand(mrb, str);
+  if (pos < 0 || (pos > 0 && pos >= RSTRING_LEN(str))) {
+    return mrb_nil_value();
+  }
+
+  Data_Get_Struct(mrb, self, &mrb_onig_regexp_type, reg);
+  str_ptr = (OnigUChar const*)RSTRING_PTR(str);
+  return mrb_bool_value(onig_search(
+      reg, str_ptr, str_ptr + RSTRING_LEN(str),
+      str_ptr + pos, str_ptr + RSTRING_LEN(str), NULL, 0) != ONIG_MISMATCH);
+}
+
+static mrb_value
+string_match_p(mrb_state *mrb, mrb_value self) {
+  mrb_value str = self;
+  mrb_int pos = 0;
+  OnigRegex reg;
+  OnigUChar const* str_ptr;
+
+  mrb_get_args(mrb, "d|i", &reg, &mrb_onig_regexp_type, &pos);
+  if (pos < 0 || (pos > 0 && pos >= RSTRING_LEN(str))) {
+    return mrb_nil_value();
+  }
+
+  if (mrb_nil_p(str)) {
+    return mrb_nil_value();
+  }
   str = mrb_string_type(mrb, str);
 
-  Data_Get_Struct(mrb, self, &mrb_onig_regexp_type, reg);
-
-  mrb_value const ret = create_onig_region(mrb, str, self);
-  return (onig_match_common(mrb, reg, ret, str, pos) == ONIG_MISMATCH)
-      ? mrb_nil_value() : ret;
+  str_ptr = (OnigUChar const*)RSTRING_PTR(str);
+  return mrb_bool_value(onig_search(
+      reg, str_ptr, str_ptr + RSTRING_LEN(str),
+      str_ptr + pos, str_ptr + RSTRING_LEN(str), NULL, 0) != ONIG_MISMATCH);
 }
 
@@ -256,5 +374,5 @@
 
     c = *p;
-    if (c == '/'|| c == '\\') {
+    if (c == '/') {
       buf[0] = '\\'; buf[1] = c;
       mrb_str_cat(mrb, str, buf, 2);
@@ -326,15 +444,15 @@
  again:
   if (len >= 4 && ptr[0] == '(' && ptr[1] == '?') {
-	int err = 1;
-	ptr += 2;
-	if ((len -= 2) > 0) {
+    int err = 1;
+    ptr += 2;
+    if ((len -= 2) > 0) {
       do {
         if(strchr(ptr, 'i')) { options |= ONIG_OPTION_IGNORECASE; }
         if(strchr(ptr, 'x')) { options |= ONIG_OPTION_EXTEND; }
         if(strchr(ptr, 'm')) { options |= ONIG_OPTION_MULTILINE; }
-		++ptr;
+        ++ptr;
       } while (--len > 0);
-	}
-	if (len > 1 && *ptr == '-') {
+    }
+    if (len > 1 && *ptr == '-') {
       ++ptr;
       --len;
@@ -343,13 +461,13 @@
         if(strchr(ptr, 'x')) { options &= ~ONIG_OPTION_EXTEND; }
         if(strchr(ptr, 'm')) { options &= ~ONIG_OPTION_MULTILINE; }
-		++ptr;
+        ++ptr;
       } while (--len > 0);
-	}
-	if (*ptr == ')') {
+    }
+    if (*ptr == ')') {
       --len;
       ++ptr;
       goto again;
-	}
-	if (*ptr == ':' && ptr[len-1] == ')') {
+    }
+    if (*ptr == ':' && ptr[len-1] == ')') {
       OnigRegex rp;
       ++ptr;
@@ -358,10 +476,10 @@
                      ONIG_ENCODING_UTF8, OnigDefaultSyntax, NULL);
       onig_free(rp);
-	}
-	if (err) {
+    }
+    if (err) {
       options = onig_get_options(reg);
       ptr = RSTRING_PTR(src);
       len = RSTRING_LEN(src);
-	}
+    }
   }
 
@@ -369,7 +487,7 @@
 
   if ((options & embeddable) != embeddable) {
-	optbuf[0] = '-';
-	option_to_str(optbuf + 1, ~options);
-	mrb_str_cat_cstr(mrb, str, optbuf);
+    optbuf[0] = '-';
+    option_to_str(optbuf + 1, ~options);
+    mrb_str_cat_cstr(mrb, str, optbuf);
   }
 
@@ -526,5 +644,5 @@
   Data_Get_Struct(mrb, self, &mrb_onig_region_type, reg);
   mrb_value str = mrb_iv_get(mrb, self, mrb_intern_lit(mrb, "string"));
-  return mrb_str_substr(mrb, str, reg->end[0], RSTRING_LEN(str) - reg->end[0]);
+  return str_substr(mrb, str, reg->end[0], RSTRING_LEN(str) - reg->end[0]);
 }
 
@@ -535,5 +653,5 @@
   Data_Get_Struct(mrb, self, &mrb_onig_region_type, reg);
   mrb_value str = mrb_iv_get(mrb, self, mrb_intern_lit(mrb, "string"));
-  return mrb_str_substr(mrb, str, 0, reg->beg[0]);
+  return str_substr(mrb, str, 0, reg->beg[0]);
 }
 
@@ -567,5 +685,5 @@
       mrb_ary_push(mrb, ret, mrb_nil_value());
     } else {
-      mrb_ary_push(mrb, ret, mrb_str_substr(mrb, str, reg->beg[i], reg->end[i] - reg->beg[i]));
+      mrb_ary_push(mrb, ret, str_substr(mrb, str, reg->beg[i], reg->end[i] - reg->beg[i]));
     }
     mrb_gc_arena_restore(mrb, ai);
@@ -580,5 +698,5 @@
   OnigRegion* reg;
   Data_Get_Struct(mrb, self, &mrb_onig_region_type, reg);
-  return mrb_str_substr(mrb, str, reg->beg[0], reg->end[0] - reg->beg[0]);
+  return str_substr(mrb, str, reg->beg[0], reg->end[0] - reg->beg[0]);
 }
 
@@ -587,4 +705,11 @@
                    mrb_value src, OnigRegex reg, OnigRegion* match)
 {
+  if (mrb_hash_p(replace)) {
+    mrb_value v = mrb_hash_get(mrb, replace, mrb_str_substr(mrb, src, match->beg[0], match->end[0] - match->beg[0]));
+    v = mrb_str_to_str(mrb, v);
+    mrb_str_cat_str(mrb, result, v);
+    return;
+  }
+
   mrb_assert(mrb_string_p(replace));
   char const* ch;
@@ -607,5 +732,5 @@
         if (idx < 0) {
           mrb_raisef(mrb, E_INDEX_ERROR, "undefined group name reference: %S",
-                     mrb_str_substr(mrb, replace, name_beg - RSTRING_PTR(replace), ch - name_beg));
+                     str_substr(mrb, replace, name_beg - RSTRING_PTR(replace), ch - name_beg));
         }
         mrb_str_cat(mrb, result, RSTRING_PTR(src) + match->beg[idx], match->end[idx] - match->beg[idx]);
@@ -619,9 +744,7 @@
         if (isdigit(*ch)) { // group number 0-9
           int const idx = *ch - '0';
-          if (idx >= match->num_regs) {
-            mrb_raisef(mrb, E_INDEX_ERROR, "undefined group number reference: %S (max: %S)",
-                       mrb_fixnum_value(idx), mrb_fixnum_value(match->num_regs));
+          if (idx < match->num_regs) {
+            mrb_str_cat(mrb, result, RSTRING_PTR(src) + match->beg[idx], match->end[idx] - match->beg[idx]);
           }
-          mrb_str_cat(mrb, result, RSTRING_PTR(src) + match->beg[idx], match->end[idx] - match->beg[idx]);
         } else {
           char const str[] = { '\\', *ch };
@@ -642,13 +765,21 @@
 string_gsub(mrb_state* mrb, mrb_value self) {
   mrb_value blk, match_expr, replace_expr = mrb_nil_value();
-  int const argc = mrb_get_args(mrb, "&o|S", &blk, &match_expr, &replace_expr);
-
-  if(mrb_string_p(match_expr)) {
+  int const argc = mrb_get_args(mrb, "&o|o", &blk, &match_expr, &replace_expr);
+
+  if(!ONIG_REGEXP_P(match_expr)) {
     mrb_value argv[] = { match_expr, replace_expr };
     return mrb_funcall_with_block(mrb, self, mrb_intern_lit(mrb, "string_gsub"), argc, argv, blk);
   }
 
+  if(argc == 1 && mrb_nil_p(blk)) {
+    return mrb_funcall(mrb, self, "to_enum", 2, mrb_symbol_value(mrb_intern_lit(mrb, "onig_regexp_gsub")), match_expr);
+  }
+
   if(!mrb_nil_p(blk) && !mrb_nil_p(replace_expr)) {
-    mrb_raise(mrb, E_ARGUMENT_ERROR, "both block and replace expression must not be passed");
+    blk = mrb_nil_value();
+  }
+
+  if (mrb_nil_p(blk) && !mrb_hash_p(replace_expr)) {
+    replace_expr = mrb_string_type(mrb, replace_expr);
   }
 
@@ -668,5 +799,5 @@
       append_replace_str(mrb, result, replace_expr, self, reg, match);
     } else {
-      mrb_value const tmp_str = mrb_str_to_str(mrb, mrb_yield(mrb, blk, mrb_str_substr(
+      mrb_value const tmp_str = mrb_str_to_str(mrb, mrb_yield(mrb, blk, str_substr(
           mrb, self, match->beg[0], match->end[0] - match->beg[0])));
       mrb_assert(mrb_string_p(tmp_str));
@@ -675,6 +806,21 @@
 
     last_end_pos = match->end[0];
-  }
-
+    if (match->beg[0] == match->end[0]) {
+      /*
+       * Always consume at least one character of the input string
+       * in order to prevent infinite loops.
+       */
+      char* p = RSTRING_PTR(self) + last_end_pos;
+      char* e = p + RSTRING_LEN(self);
+      int len = utf8len(p, e);
+      if (RSTRING_LEN(self) < last_end_pos + len) break;
+      mrb_str_cat(mrb, result, p, len);
+      last_end_pos += len;
+    }
+  }
+
+  if (RSTRING_LEN(self) < last_end_pos) {
+    mrb_raise(mrb, E_ARGUMENT_ERROR, "invalid byte sequence in UTF-8");
+  }
   mrb_str_cat(mrb, result, RSTRING_PTR(self) + last_end_pos, RSTRING_LEN(self) - last_end_pos);
   return result;
@@ -687,5 +833,5 @@
   mrb_get_args(mrb, "&o", &blk, &match_expr);
 
-  if(mrb_string_p(match_expr)) {
+  if(!ONIG_REGEXP_P(match_expr)) {
     return mrb_funcall_with_block(mrb, self, mrb_intern_lit(mrb, "string_scan"),
                                   1, &match_expr, blk);
@@ -706,9 +852,9 @@
       mrb_assert(mrb_array_p(result));
       if(m->num_regs == 1) {
-        mrb_ary_push(mrb, result, mrb_str_substr(mrb, self, m->beg[0], m->end[0] - m->beg[0]));
+        mrb_ary_push(mrb, result, str_substr(mrb, self, m->beg[0], m->end[0] - m->beg[0]));
       } else {
         mrb_value const elem = mrb_ary_new_capa(mrb, m->num_regs - 1);
         for(i = 1; i < m->num_regs; ++i) {
-          mrb_ary_push(mrb, elem, mrb_str_substr(mrb, self, m->beg[i], m->end[i] - m->beg[i]));
+          mrb_ary_push(mrb, elem, str_substr(mrb, self, m->beg[i], m->end[i] - m->beg[i]));
         }
         mrb_ary_push(mrb, result, elem);
@@ -717,9 +863,9 @@
       mrb_assert(mrb_string_p(result));
       if(m->num_regs == 1) {
-        mrb_yield(mrb, blk, mrb_str_substr(mrb, self, m->beg[0], m->end[0] - m->beg[0]));
+        mrb_yield(mrb, blk, str_substr(mrb, self, m->beg[0], m->end[0] - m->beg[0]));
       } else {
         mrb_value argv = mrb_ary_new_capa(mrb, m->num_regs - 1);
         for(i = 1; i < m->num_regs; ++i) {
-          mrb_ary_push(mrb, argv, mrb_str_substr(mrb, self, m->beg[i], m->end[i] - m->beg[i]));
+          mrb_ary_push(mrb, argv, str_substr(mrb, self, m->beg[i], m->end[i] - m->beg[i]));
         }
         mrb_yield(mrb, blk, argv);
@@ -727,5 +873,19 @@
     }
 
-    last_end_pos = m->end[0];
+    if (m->beg[0] == m->end[0]) {
+      /*
+      * Always consume at least one character of the input string
+      */
+      if (RSTRING_LEN(self) > m->end[0]) {
+        char* p = RSTRING_PTR(self) + last_end_pos;
+        char* e = p + RSTRING_LEN(self);
+        int len = utf8len(p, e);
+        last_end_pos = m->end[0] + len;
+      } else {
+        last_end_pos = m->end[0] + 1;
+      }
+    } else {
+      last_end_pos = m->end[0];
+    }
   }
 
@@ -738,16 +898,31 @@
   mrb_value pattern = mrb_nil_value(); mrb_int limit = 0;
   int argc = mrb_get_args(mrb, "|oi", &pattern, &limit);
-
-  if(argc == 0) { // check $; global variable
+  mrb_value result, tmp;
+  mrb_bool lim_p = !(argc == 2 && 0 < limit);
+
+  if(mrb_nil_p(pattern)) { // check $; global variable
     pattern = mrb_gv_get(mrb, mrb_intern_lit(mrb, "$;"));
-    if(!mrb_nil_p(pattern)) { argc = 1; }
-  }
-
-  if(mrb_nil_p(pattern) || mrb_string_p(pattern)) {
-    return mrb_funcall(mrb, self, "string_split", argc, pattern, mrb_fixnum_value(limit));
-  }
-
-  mrb_value const result = mrb_ary_new(mrb);
-  if(RSTRING_LEN(self) == 0) { return result; }
+    if (mrb_nil_p(pattern)) {
+      pattern = mrb_str_new_lit(mrb, " ");
+    } else if (!mrb_string_p(pattern) && !ONIG_REGEXP_P(pattern)) {
+      mrb_raise(mrb, E_TYPE_ERROR, "value of $; must be String or Regexp");
+    }
+    if (argc == 0) { argc = 1; }
+  }
+
+  if (!ONIG_REGEXP_P(pattern)) {
+    if(!mrb_nil_p(pattern)) { pattern = mrb_string_type(mrb, pattern); }
+    if(mrb_string_p(pattern) && RSTRING_LEN(pattern) == 0) {
+      /* Special case - split into chars */
+      pattern = mrb_funcall(mrb, mrb_obj_value(mrb_class_get(mrb, "OnigRegexp")), "new", 1, pattern);
+    } else {
+      return mrb_funcall(mrb, self, "string_split", argc, pattern, mrb_fixnum_value(limit));
+    }
+  }
+
+  if(RSTRING_LEN(self) == 0) { return mrb_ary_new(mrb); }
+  if(limit == 1) { return mrb_ary_new_from_values(mrb, 1, &self); }
+
+  result = mrb_ary_new(mrb);
 
   OnigRegex reg;
@@ -755,45 +930,58 @@
   mrb_value const match_value = create_onig_region(mrb, self, pattern);
   OnigRegion* const match = (OnigRegion*)DATA_PTR(match_value);
-  int last_end_pos = 0, next_match_pos = 0;
-  mrb_int num_matches = 0;
-
-  while (limit <= 0 || (limit - 1) > num_matches) {
-    int i;
-    if(next_match_pos >= RSTRING_LEN(self) ||
-       onig_match_common(mrb, reg, match_value, self, next_match_pos) == ONIG_MISMATCH) { break; }
-
-    if (last_end_pos == match->end[0]) {
-      ++next_match_pos;
-      // Remove this loop if not using UTF-8
-      for (; next_match_pos < RSTRING_LEN(self) && (RSTRING_PTR(self)[next_match_pos] & 0xC0) == 0x80;
-          ++next_match_pos) {}
-    } else {
-      mrb_ary_push(mrb, result, mrb_str_substr(
-          mrb, self, last_end_pos, match->beg[0] - last_end_pos));
-      // If there are captures, add them to the array
-      for (i = 1; i < match->num_regs; ++i) {
-        mrb_ary_push(mrb, result, mrb_str_substr(
-            mrb, self, match->beg[i], match->end[i] - match->beg[i]));
+  char *ptr = mrb_str_to_cstr(mrb, self);
+  mrb_int len = RSTRING_LEN(self);
+  mrb_int start = 0, beg = 0, end = 0;
+  mrb_int idx = 0, i = 0;
+  mrb_int last_null = 0;
+
+  if (argc == 2) { i = 1; }
+  while ((end = onig_match_common(mrb, reg, match_value, self, start)) >= 0) {
+    if (start == end && match->beg[0] == match->end[0]) {
+      if (!ptr) {
+        mrb_ary_push(mrb, result, mrb_str_new_lit(mrb, ""));
+        break;
       }
-      last_end_pos = match->end[0];
-      next_match_pos = last_end_pos;
-      ++num_matches;
-    }
-  }
-  if (last_end_pos <= RSTRING_LEN(self)) {
-    mrb_ary_push(mrb, result, mrb_str_substr(
-        mrb, self, last_end_pos, RSTRING_LEN(self) - last_end_pos));
-  }
-
-  if (limit == 0) { // remove empty trailing elements
-    int count = 0, i;
-    for (i = RARRAY_LEN(result); i > 0; --i) {
-      mrb_assert(mrb_string_p(RARRAY_PTR(result)[i - 1]));
-      if (RSTRING_LEN(RARRAY_PTR(result)[i - 1]) != 0) { break; }
-      else { ++count; }
-    }
-    if(count > 0) {
-      return mrb_ary_new_from_values(mrb, RARRAY_LEN(result) - count, RARRAY_PTR(result));
-    }
+      else if (last_null == 1) {
+        mrb_ary_push(mrb, result, str_substr(mrb, self, beg, utf8len(ptr+beg, ptr+len)));
+        beg = start;
+      }
+      else {
+        if (start == len)
+          start++;
+        else
+          start += utf8len(ptr+start, ptr+len);
+        last_null = 1;
+        continue;
+      }
+    }
+    else {
+      mrb_ary_push(mrb, result, str_substr(mrb, self, beg, end-beg));
+      beg = start = match->end[0];
+    }
+    last_null = 0;
+
+    for (idx=1; idx < match->num_regs; idx++) {
+      if (match->beg[idx] == -1) continue;
+      if (match->beg[idx] == match->end[idx])
+        tmp = mrb_str_new_lit(mrb, "");
+      else
+        tmp = str_substr(mrb, self, match->beg[idx], match->end[idx]-match->beg[idx]);
+      mrb_ary_push(mrb, result, tmp);
+    }
+    if (!lim_p && limit <= ++i) break;
+  }
+
+  if (RSTRING_LEN(self) > 0 && (!lim_p || RSTRING_LEN(self) > beg || limit < 0)) {
+    if (RSTRING_LEN(self) == beg)
+      tmp = mrb_str_new_lit(mrb, "");
+    else
+      tmp = str_substr(mrb, self, beg, RSTRING_LEN(self)-beg);
+    mrb_ary_push(mrb, result, tmp);
+  }
+  if (lim_p && limit == 0) {
+    while ((len = RARRAY_LEN(result)) > 0 &&
+        (tmp = mrb_ary_ref(mrb, result, len-1), RSTRING_LEN(tmp) == 0))
+      mrb_ary_pop(mrb, result);
   }
 
@@ -805,13 +993,21 @@
 string_sub(mrb_state* mrb, mrb_value self) {
   mrb_value blk, match_expr, replace_expr = mrb_nil_value();
-  int const argc = mrb_get_args(mrb, "&o|S", &blk, &match_expr, &replace_expr);
-
-  if(mrb_string_p(match_expr)) {
+  int const argc = mrb_get_args(mrb, "&o|o", &blk, &match_expr, &replace_expr);
+
+  if(!ONIG_REGEXP_P(match_expr)) {
     mrb_value argv[] = { match_expr, replace_expr };
     return mrb_funcall_with_block(mrb, self, mrb_intern_lit(mrb, "string_sub"), argc, argv, blk);
   }
 
+  if(argc == 1 && mrb_nil_p(blk)) {
+    mrb_raise(mrb, E_ARGUMENT_ERROR, "wrong number of arguments (given 1, expected 2)");
+  }
+
   if(!mrb_nil_p(blk) && !mrb_nil_p(replace_expr)) {
-    mrb_raise(mrb, E_ARGUMENT_ERROR, "both block and replace expression must not be passed");
+    blk = mrb_nil_value();
+  }
+
+  if (mrb_nil_p(blk) && !mrb_hash_p(replace_expr)) {
+    replace_expr = mrb_string_type(mrb, replace_expr);
   }
 
@@ -830,5 +1026,5 @@
     append_replace_str(mrb, result, replace_expr, self, reg, match);
   } else {
-    mrb_value const tmp_str = mrb_str_to_str(mrb, mrb_yield(mrb, blk, mrb_str_substr(
+    mrb_value const tmp_str = mrb_str_to_str(mrb, mrb_yield(mrb, blk, str_substr(
         mrb, self, match->beg[0], match->end[0] - match->beg[0])));
     mrb_assert(mrb_string_p(tmp_str));
@@ -947,4 +1143,7 @@
   mrb_define_const(mrb, clazz, "NOTBOL", mrb_fixnum_value(ONIG_OPTION_NOTBOL));
   mrb_define_const(mrb, clazz, "NOTEOL", mrb_fixnum_value(ONIG_OPTION_NOTEOL));
+#ifdef ONIG_OPTION_POSIX_REGION
+  mrb_define_const(mrb, clazz, "POSIX_REGION", mrb_fixnum_value(ONIG_OPTION_POSIX_REGION));
+#endif
 #ifdef ONIG_OPTION_ASCII_RANGE
   mrb_define_const(mrb, clazz, "ASCII_RANGE", mrb_fixnum_value(ONIG_OPTION_ASCII_RANGE));
@@ -969,4 +1168,5 @@
   mrb_define_method(mrb, clazz, "==", onig_regexp_equal, MRB_ARGS_REQ(1));
   mrb_define_method(mrb, clazz, "match", onig_regexp_match, MRB_ARGS_REQ(1) | MRB_ARGS_OPT(1));
+  mrb_define_method(mrb, clazz, "match?", onig_regexp_match_p, MRB_ARGS_REQ(1) | MRB_ARGS_OPT(1));
   mrb_define_method(mrb, clazz, "casefold?", onig_regexp_casefold_p, MRB_ARGS_NONE());
 
@@ -1011,4 +1211,5 @@
   mrb_define_method(mrb, mrb->string_class, "onig_regexp_split", &string_split, MRB_ARGS_REQ(1));
   mrb_define_method(mrb, mrb->string_class, "onig_regexp_scan", &string_scan, MRB_ARGS_REQ(1) | MRB_ARGS_BLOCK());
+  mrb_define_method(mrb, mrb->string_class, "onig_regexp_match?", &string_match_p, MRB_ARGS_REQ(1) | MRB_ARGS_OPT(1));
 }
 
Index: /EcnlProtoTool/trunk/mrbgems/mruby-onig-regexp/test/mruby_onig_regexp.rb
===================================================================
--- /EcnlProtoTool/trunk/mrbgems/mruby-onig-regexp/test/mruby_onig_regexp.rb	(revision 438)
+++ /EcnlProtoTool/trunk/mrbgems/mruby-onig-regexp/test/mruby_onig_regexp.rb	(revision 439)
@@ -2,5 +2,7 @@
 # Constant
 assert("OnigRegexp::CONSTANT") do
-  OnigRegexp::IGNORECASE == 1 and OnigRegexp::EXTENDED == 2 and OnigRegexp::MULTILINE == 4
+  assert_equal 1, OnigRegexp::IGNORECASE
+  assert_equal 2, OnigRegexp::EXTENDED
+  assert_equal 4, OnigRegexp::MULTILINE
 end
 
@@ -20,4 +22,7 @@
   OnigRegexp.new('.*') =~ 'ginka'
   assert_equal 'ginka', OnigRegexp.last_match[0]
+
+  OnigRegexp.new('zzz') =~ 'ginka'
+  assert_nil OnigRegexp.last_match
 end
 
@@ -28,5 +33,6 @@
 # Instance method
 assert('OnigRegexp#initialize', '15.2.15.7.1') do
-  OnigRegexp.new(".*") and OnigRegexp.new(".*", OnigRegexp::MULTILINE)
+  assert_equal OnigRegexp, OnigRegexp.new(".*").class
+  assert_equal OnigRegexp, OnigRegexp.new(".*", OnigRegexp::MULTILINE).class
 end
 
@@ -52,4 +58,6 @@
   assert_true reg === "http://example.com"
   assert_false reg === "htt://example.com"
+
+  assert_false /a/ === Object.new
 end
 
@@ -71,4 +79,10 @@
   assert_false reg.match("http://masamitsu-murase.12345/hoge.html").nil?
   assert_nil reg.match("http:///masamitsu-murase.12345/hoge.html")
+
+  reg = OnigRegexp.new('def')
+  assert_equal "def", reg.match('abcdef', 3)[0]
+  assert_nil reg.match('abcdef', -1)
+  assert_nil reg.match('abcdef', 4)
+  assert_nil reg.match(nil, 3)
 end
 
@@ -77,5 +91,5 @@
   reg = OnigRegexp.new(str)
 
-  reg.source == str
+  assert_equal str, reg.source
 end
 
@@ -96,4 +110,5 @@
   assert_equal '/abc\nd\te/mi', OnigRegexp.new("abc\nd\te", OnigRegexp::MULTILINE | OnigRegexp::IGNORECASE).inspect
   assert_equal '/abc/min', OnigRegexp.new("abc", OnigRegexp::MULTILINE | OnigRegexp::IGNORECASE, "none").inspect
+  assert_equal "/\\\\\\+\\//", /\\\+\//.inspect
 end
 
@@ -104,4 +119,5 @@
   assert_equal '(?mi-x:ab+c)', /ab+c/im.to_s
   assert_equal '(?mi-x:ab+c)', /ab+c/imn.to_s
+  assert_equal "(?-mix:\\\\\\+)", /\\\+/.to_s
 end
 
@@ -114,4 +130,8 @@
   re4 = OnigRegexp.new("xy#{re3}z", OnigRegexp::IGNORECASE)
   assert_equal '(?i-mx:xy(?m-ix:ab.+c)z)', re4.to_s
+
+  re5 = /\\\+/
+  re6 = /xy#{re5}z/
+  assert_equal "(?-mix:xy(?-mix:\\\\\\+)z)", re6.to_s
 end
 
@@ -122,9 +142,13 @@
     [ "^a.", "abcd\naefg", "ab" ],
     [ "^a.", "bacd\naefg", "ae" ],
-    [ ".$", "bacd\naefg", "d" ]
+    [ ".$", "bacd\naefg", "d" ],
+    [ "bc", :abc, "bc"],
+    [ "bj", "obj", "bj"],
   ].each do |reg, str, result|
     m = OnigRegexp.new(reg).match(str)
     assert_equal result, m[0] if assert_false m.nil?
   end
+
+  assert_raise(TypeError) { /a/.match(Object.new) }
 end
 
@@ -134,5 +158,5 @@
   ]
 
-  patterns.all?{ |reg, str, result| reg.match(str)[0] == result }
+  patterns.each{ |reg, str, result| assert_equal result, reg.match(str)[0] }
 end
 
@@ -152,10 +176,22 @@
 end
 
+assert("OnigRegexp#match (with block)") do
+  reg = OnigRegexp.new("(https?://[^/]+)[-a-zA-Z0-9./]+")
+  reg.match("http://masamitsu-murase.12345/hoge.html") do |m|
+    assert_true m.is_a?(OnigMatchData)
+    assert_equal "http://masamitsu-murase.12345/hoge.html", m[0]
+  end
+end
+
 assert('OnigRegexp.version') do
-  OnigRegexp.version.kind_of? String
+  assert_kind_of String, OnigRegexp.version
 end
 
 def onig_match_data_example
   OnigRegexp.new('(\w+)(\w)').match('+aaabb-')
+end
+
+def onig_mismatch_data_example
+  OnigRegexp.new('abc').match('z')
 end
 
@@ -248,5 +284,11 @@
 
 assert('Invalid regexp') do
-  assert_raise(ArgumentError) { OnigRegexp.new '[aio' }
+  assert_raise(RegexpError) { OnigRegexp.new '[aio' }
+end
+
+assert('Invalid argument') do
+  assert_raise(ArgumentError) { "".sub(//) }
+  assert_raise(ArgumentError) { "".onig_regexp_sub(OnigRegexp.new('')) }
+  assert_raise(ArgumentError) { "\xf0".gsub(/[^a]/,"X") }
 end
 
@@ -257,5 +299,17 @@
   assert_equal 'h e l l o  m r u b y ', test_str.onig_regexp_gsub(OnigRegexp.new('\w')) { |v| v + ' ' }
   assert_equal 'h{e}ll{o} mr{u}by', test_str.onig_regexp_gsub(OnigRegexp.new('(?<hoge>[aeiou])'), '{\k<hoge>}')
-  assert_raise(IndexError) { test_str.onig_regexp_gsub(OnigRegexp.new('(mruby)'), '<\2>') }
+  assert_equal '.h.e.l.l.o. .m.r.u.b.y.', test_str.onig_regexp_gsub(OnigRegexp.new(''), '.')
+  assert_equal " hello\n mruby", "hello\nmruby".onig_regexp_gsub(OnigRegexp.new('^'), ' ')
+  assert_equal "he<l><><l><>o mruby", test_str.onig_regexp_gsub(OnigRegexp.new('(l)'), '<\1><\2>')
+end
+
+assert('String#onig_regexp_gsub with hash') do
+  assert_equal('azc', 'abc'.gsub(/b/, "b" => "z"))
+  assert_equal('ac', 'abc'.gsub(/b/, {}))
+  assert_equal('a1c', 'abc'.gsub(/b/, "b" => 1))
+  assert_equal('aBc', 'abc'.gsub(/b/, Hash.new {|h, k| k.upcase }))
+  assert_equal('a[\&]c', 'abc'.gsub(/b/, "b" => '[\&]'))
+  assert_equal('aBcaBc', 'abcabc'.gsub(/b/, Hash.new {|h, k| h[k] = k.upcase }))
+  assert_equal('aBcDEf', 'abcdef'.gsub(/de|b/, "b" => "B", "de" => "DE"))
 end
 
@@ -274,4 +328,7 @@
   assert_equal test_str, test_str.onig_regexp_scan(OnigRegexp.new('(.)(.)')) { |x, y| result += y; result += x }
   assert_equal 'rmbu yowlr', result
+
+  assert_equal [""] * (test_str.length + 1), test_str.onig_regexp_scan(OnigRegexp.new(''))
+  assert_equal [""], "".onig_regexp_scan(OnigRegexp.new(''))
 end
 
@@ -282,4 +339,15 @@
   assert_equal 'h ello mruby', test_str.onig_regexp_sub(OnigRegexp.new('\w')) { |v| v + ' ' }
   assert_equal 'h{e}llo mruby', test_str.onig_regexp_sub(OnigRegexp.new('(?<hoge>[aeiou])'), '{\k<hoge>}')
+  assert_equal "heOlo mruby", test_str.onig_regexp_sub(OnigRegexp.new("l"), "O") { "X" }
+end
+
+assert('String#onig_regexp_sub with hash') do
+  assert_equal('azc', 'abc'.sub(/b/, "b" => "z"))
+  assert_equal('ac', 'abc'.sub(/b/, {}))
+  assert_equal('a1c', 'abc'.sub(/b/, "b" => 1))
+  assert_equal('aBc', 'abc'.sub(/b/, Hash.new {|h, k| k.upcase }))
+  assert_equal('a[\&]c', 'abc'.sub(/b/, "b" => '[\&]'))
+  assert_equal('aBcabc', 'abcabc'.sub(/b/, Hash.new {|h, k| h[k] = k.upcase }))
+  assert_equal('aBcdef', 'abcdef'.sub(/de|b/, "b" => "B", "de" => "DE"))
 end
 
@@ -292,9 +360,35 @@
   $; = OnigRegexp.new ' \w'
   assert_equal ['cute', 'ruby', 'ute'], test_str.onig_regexp_split
+  assert_equal ['cute', 'ruby', 'ute'], test_str.onig_regexp_split(nil)
+  assert_equal ['cute', 'ruby cute'], test_str.onig_regexp_split(nil, 2)
   $; = 't'
   assert_equal ['cu', 'e mruby cu', 'e'], test_str.onig_regexp_split
+  assert_equal ['cu', 'e mruby cu', 'e'], test_str.onig_regexp_split(nil)
+  assert_equal ['cu', 'e mruby cute'], test_str.onig_regexp_split(nil, 2)
+  $; = nil
+  assert_equal ['cute', 'mruby', 'cute'], test_str.onig_regexp_split
+  assert_equal ['cute', 'mruby', 'cute'], test_str.onig_regexp_split(nil)
+  assert_equal ['cute', 'mruby cute'], test_str.onig_regexp_split(nil, 2)
+  $; = 1
+  assert_raise(TypeError) { "".onig_regexp_split }
   $; = prev_splitter
 
   assert_equal ['h', 'e', 'l', 'l', 'o'], 'hello'.onig_regexp_split(OnigRegexp.new(''))
+  assert_equal ["h", "e", "l", "l", "o", ""], 'hello'.onig_regexp_split(OnigRegexp.new(''), -1)
+  assert_equal ["h", "", "i", "", "!", "", ""], "hi!".onig_regexp_split(OnigRegexp.new('()'), -1)
+  assert_equal ["h", "el", "lo"], "hello".onig_regexp_split(OnigRegexp.new('(el)|(xx)'))
+
+  assert_equal ['あ', 'い', 'う', 'え', 'お'], 'あいうえお'.onig_regexp_split('')
+  assert_equal ['あ', 'い', 'う', 'え', 'お', ''], 'あいうえお'.onig_regexp_split('', -1)
+  assert_equal ['あいうえお'], 'あいうえお'.onig_regexp_split('', 1)
+  assert_equal ['あ', 'いうえお'], 'あいうえお'.onig_regexp_split('', 2)
+  assert_equal ['あ', 'い', 'うえお'], 'あいうえお'.onig_regexp_split('', 3)
+
+  assert_equal ['あ', 'い', 'う', 'え', 'お'], 'あいうえお'.onig_regexp_split(OnigRegexp.new(''))
+  assert_equal ['あ', 'い', 'う', 'え', 'お', ''], 'あいうえお'.onig_regexp_split(OnigRegexp.new(''), -1)
+  assert_equal ['あいうえお'], 'あいうえお'.onig_regexp_split(OnigRegexp.new(''), 1)
+  assert_equal ['あ', 'いうえお'], 'あいうえお'.onig_regexp_split(OnigRegexp.new(''), 2)
+  assert_equal ['あ', 'い', 'うえお'], 'あいうえお'.onig_regexp_split(OnigRegexp.new(''), 3)
+
   assert_equal ['h', 'e', 'llo'], 'hello'.onig_regexp_split(OnigRegexp.new(''), 3)
   assert_equal ['h', 'i', 'd', 'a', 'd'], 'hi dad'.onig_regexp_split(OnigRegexp.new('\s*'))
@@ -309,4 +403,18 @@
 
   assert_equal [], ''.onig_regexp_split(OnigRegexp.new(','), -1)
+
+  assert_equal ["こ", "に", "ち", "わ"], "こ,に,ち,わ".onig_regexp_split(",")
+  assert_raise(TypeError) { "".onig_regexp_split(1) }
+end
+
+assert('String#onig_regexp_match') do
+  reg = OnigRegexp.new('d(e)f')
+  assert_equal ['def', 'e'], 'abcdef'.match(reg).to_a
+  assert_nil 'abcdef'.match(reg, 4)
+  match_data = nil
+  'abcdef'.match(reg) do |m|
+    match_data = m
+  end
+  assert_equal ['def', 'e'], match_data.to_a
 end
 
@@ -332,4 +440,7 @@
   m = onig_match_data_example
   assert_equal m[0], $~[0]
+
+  onig_mismatch_data_example
+  assert_nil $~
 end
 
@@ -337,4 +448,7 @@
   m = onig_match_data_example
   assert_equal m[0], $&
+
+  onig_mismatch_data_example
+  assert_nil $&
 end
 
@@ -342,4 +456,7 @@
   m = onig_match_data_example
   assert_equal m.pre_match, $`
+
+  onig_mismatch_data_example
+  assert_nil $`
 end
 
@@ -347,4 +464,7 @@
   m = onig_match_data_example
   assert_equal m.post_match, $'
+
+  onig_mismatch_data_example
+  assert_nil $'
 end
 
@@ -352,4 +472,7 @@
   m = onig_match_data_example
   assert_equal m[-1], $+
+
+  onig_mismatch_data_example
+  assert_nil $+
 end
 
@@ -365,4 +488,15 @@
   assert_nil $8
   assert_nil $9
+
+  onig_mismatch_data_example
+  assert_nil $1
+  assert_nil $2
+  assert_nil $3
+  assert_nil $4
+  assert_nil $5
+  assert_nil $6
+  assert_nil $7
+  assert_nil $8
+  assert_nil $9
 end
 
@@ -387,7 +521,52 @@
 end
 
+assert('OnigRegexp#match?') do
+  assert_false OnigRegexp.new('^[123]+$').match?('abc')
+  assert_false OnigRegexp.new('^[123]+$').match?(:abc)
+  assert_true OnigRegexp.new('^[123]+$').match?('321')
+  assert_true OnigRegexp.new('webp').match?('text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8')
+  assert_true(/webp/.match?('text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8'))
+
+  reg = OnigRegexp.new('def')
+  assert_true reg.match?('abcdef', 3)
+  assert_false reg.match?('abcdef', -1)
+  assert_false reg.match?('abcdef', 4)
+  assert_false reg.match?(nil, 3)
+end
+
+assert('String#match?') do
+  assert_equal false, 'abc'.onig_regexp_match?(OnigRegexp.new('^[123]+$'))
+  assert_equal true, '321'.onig_regexp_match?(OnigRegexp.new('^[123]+$'))
+  assert_true 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8'.onig_regexp_match?(OnigRegexp.new('webp'))
+end
+
+assert('String#[]=') do
+  string = 'abc'
+  string[OnigRegexp.new('.')] = 'A'
+  assert_equal 'Abc', string
+  string[OnigRegexp.new('.(.)'), 1] = 'B'
+  assert_equal 'ABc', string
+  string[OnigRegexp.new('(?<a>.)(?<b>.)(?<c>.)'), 'c'] = 'C'
+  assert_equal 'ABC', string
+
+  assert_raise(ArgumentError) do
+    string[OnigRegexp.new('.'), 0, :extra] = 'x'
+  end
+end
+
+assert('String#slice!') do
+  string = 'abc'
+  assert_equal 'a', string.slice!(OnigRegexp.new('.'))
+  assert_equal 'bc', string
+end
+
+assert 'raises RegexpError' do
+  assert_raise(RegexpError) { OnigRegexp.new('*') }
+end
+
 Regexp = Object
 
 assert('OnigRegexp not default') do
+  $~ = nil
   onig_match_data_example
   assert_nil $~
Index: /EcnlProtoTool/trunk/mrbgems/mruby-others/mrbgem.rake
===================================================================
--- /EcnlProtoTool/trunk/mrbgems/mruby-others/mrbgem.rake	(revision 438)
+++ /EcnlProtoTool/trunk/mrbgems/mruby-others/mrbgem.rake	(revision 439)
@@ -1,5 +1,5 @@
 MRuby::Gem::Specification.new('mruby-others') do |spec|
-  spec.license = 'TOPPERS License'
-  spec.author  = 'Cores Co., Ltd.'
+  spec.license = 'public domain'
+  spec.author  = 'h7ga40'
   spec.summary = 'extra other mrbgem'
 end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/.cproject
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/.cproject	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/.cproject	(revision 439)
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<?fileVersion 4.0.0?><cproject storage_type_id="org.eclipse.cdt.core.XmlProjectDescriptionStorage">
+	<storageModule moduleId="org.eclipse.cdt.core.settings">
+		<cconfiguration id="com.renesas.cdt.rz.debug.win32.configuration.Id.1552447583">
+			<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="com.renesas.cdt.rz.debug.win32.configuration.Id.1552447583" moduleId="org.eclipse.cdt.core.settings" name="Debug">
+				<externalSettings/>
+				<extensions>
+					<extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
+					<extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+					<extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+					<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+					<extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
+				</extensions>
+			</storageModule>
+			<storageModule moduleId="cdtBuildSystem" version="4.0.0">
+				<configuration artifactName="mruby" buildProperties="org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.debug" cleanCommand="rm -rf *.lst *.lis *.lpp *.map libgcc.a" description="" id="com.renesas.cdt.rz.debug.win32.configuration.Id.1552447583" name="Debug" parent="com.renesas.cdt.rz.debug.win32.configuration.Id.1552447583">
+					<folderInfo id="com.renesas.cdt.rz.debug.win32.configuration.Id.1552447583." name="/" resourcePath="">
+						<toolChain id="com.renesas.cdt.managedbuild.gcc.rz.toolchain.base.1293524778" name="GCC for Renesas RZ" superClass="com.renesas.cdt.managedbuild.gcc.rz.toolchain.base">
+							<option id="com.renesas.cdt.managedbuild.gcc.rz.deviceName.1132450937" name="Device name" superClass="com.renesas.cdt.managedbuild.gcc.rz.deviceName"/>
+							<option id="com.renesas.cdt.managedbuild.gcc.rz.createlibgen.122319692" name="Create libgen" superClass="com.renesas.cdt.managedbuild.gcc.rz.createlibgen" value="false" valueType="boolean"/>
+							<option id="com.renesas.cdt.managedbuild.gcc.rz.option.warnStack.584176958" name="Warn if stack size exceeds the limit, in bytes (-Wstack-usage)" superClass="com.renesas.cdt.managedbuild.gcc.rz.option.warnStack"/>
+							<option id="com.renesas.cdt.managedbuild.gcc.rz.option.stackSizeInDecimal.2117033791" name="Decimal representation of '-Wstack-usage'" superClass="com.renesas.cdt.managedbuild.gcc.rz.option.stackSizeInDecimal"/>
+							<option id="com.renesas.cdt.managedbuild.gcc.rz.option.otherDebug.1643801869" name="Other debugging flags" superClass="com.renesas.cdt.managedbuild.gcc.rz.option.otherDebug"/>
+							<option id="com.renesas.cdt.managedbuild.gcc.rz.option.otherOptimization.1481647151" name="Other optimization flags" superClass="com.renesas.cdt.managedbuild.gcc.rz.option.otherOptimization"/>
+							<option id="com.renesas.cdt.managedbuild.gcc.rz.option.otherTarget.546455467" name="Other target flags" superClass="com.renesas.cdt.managedbuild.gcc.rz.option.otherTarget"/>
+							<option id="com.renesas.cdt.managedbuild.gcc.rz.option.otherWarnings.1615987444" name="Other warning flags" superClass="com.renesas.cdt.managedbuild.gcc.rz.option.otherWarnings"/>
+							<option id="com.renesas.cdt.managedbuild.gcc.rz.option.warnings.nulldereference.1424199987" name="Null pointer dereference [-Wnull-dereference]" superClass="com.renesas.cdt.managedbuild.gcc.rz.option.warnings.nulldereference"/>
+							<option id="com.renesas.cdt.managedbuild.gcc.rz.option.optimizationLevel.207902203" name="Optimization Level" superClass="com.renesas.cdt.managedbuild.gcc.rz.option.optimizationLevel"/>
+							<option id="com.renesas.cdt.managedbuild.gcc.rz.option.signedchar.957528705" name="'char' is signed (-fsigned-char)" superClass="com.renesas.cdt.managedbuild.gcc.rz.option.signedchar"/>
+							<option id="com.renesas.cdt.managedbuild.gcc.rz.option.functionsection.624322011" name="Function sections (-ffunction-sections)" superClass="com.renesas.cdt.managedbuild.gcc.rz.option.functionsection"/>
+							<option id="com.renesas.cdt.managedbuild.gcc.rz.option.datasections.869721791" name="Data sections (-fdata-sections)" superClass="com.renesas.cdt.managedbuild.gcc.rz.option.datasections"/>
+							<option id="com.renesas.cdt.managedbuild.gcc.rz.option.messagelenght.564993884" name="Message length (-fmessage-length=0)" superClass="com.renesas.cdt.managedbuild.gcc.rz.option.messagelenght"/>
+							<option id="com.renesas.cdt.managedbuild.gcc.rz.option.noinlinefunctions.930902268" name="Do not inline functions (-fno-inline-functions)" superClass="com.renesas.cdt.managedbuild.gcc.rz.option.noinlinefunctions"/>
+							<option id="com.renesas.cdt.managedbuild.gcc.rz.option.freestanding.1835552049" name="Assume freestanding environment (-ffreestanding)" superClass="com.renesas.cdt.managedbuild.gcc.rz.option.freestanding"/>
+							<option id="com.renesas.cdt.managedbuild.gcc.rz.option.nobuiltin.1844976266" name="Disable builtin (-fno-builtin)" superClass="com.renesas.cdt.managedbuild.gcc.rz.option.nobuiltin"/>
+							<option id="com.renesas.cdt.managedbuild.gcc.rz.option.nocommon.257711696" name="No common unitialized (-fno-common)" superClass="com.renesas.cdt.managedbuild.gcc.rz.option.nocommon"/>
+							<option id="com.renesas.cdt.managedbuild.gcc.rz.option.pic.1145554879" name="Position independent code (-fPIC)" superClass="com.renesas.cdt.managedbuild.gcc.rz.option.pic"/>
+							<option id="com.renesas.cdt.managedbuild.gcc.rz.option.family.545769181" name="ARM family" superClass="com.renesas.cdt.managedbuild.gcc.rz.option.family"/>
+							<option id="com.renesas.cdt.managedbuild.gcc.rz.option.architecture.341336431" name="Architecture" superClass="com.renesas.cdt.managedbuild.gcc.rz.option.architecture"/>
+							<option id="com.renesas.cdt.managedbuild.gcc.rz.option.instructionset.1361255787" name="Instruction set" superClass="com.renesas.cdt.managedbuild.gcc.rz.option.instructionset"/>
+							<option id="com.renesas.cdt.managedbuild.gcc.rz.option.spconstant.891621000" name="Single precision constants (-fsingle-precision-constant)" superClass="com.renesas.cdt.managedbuild.gcc.rz.option.spconstant"/>
+							<option id="com.renesas.cdt.managedbuild.gcc.rz.option.endian.1800094875" name="Endianness" superClass="com.renesas.cdt.managedbuild.gcc.rz.option.endian"/>
+							<option id="com.renesas.cdt.managedbuild.gcc.rz.option.floatabi.1857840177" name="Float ABI" superClass="com.renesas.cdt.managedbuild.gcc.rz.option.floatabi"/>
+							<option id="com.renesas.cdt.managedbuild.gcc.rz.option.floatunit.115322157" name="FPU Type" superClass="com.renesas.cdt.managedbuild.gcc.rz.option.floatunit"/>
+							<option id="com.renesas.cdt.managedbuild.gcc.rz.option.unaligned.990219082" name="Unaligned access" superClass="com.renesas.cdt.managedbuild.gcc.rz.option.unaligned"/>
+							<option id="com.renesas.cdt.managedbuild.gcc.rz.option.thumb.629023669" name="Thumb interwork (-mthumb-interwork)" superClass="com.renesas.cdt.managedbuild.gcc.rz.option.thumb"/>
+							<option id="ilg.gnuarmeclipse.managedbuild.cross.option.debugging.level.1472716966" name="Debug level" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.debugging.level"/>
+							<option id="ilg.gnuarmeclipse.managedbuild.cross.option.debugging.format.319338384" name="Debug format" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.debugging.format"/>
+							<option id="ilg.gnuarmeclipse.managedbuild.cross.option.addtools.createflash.1907336908" name="Create flash image" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.addtools.createflash" value="true" valueType="boolean"/>
+							<targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.ELF" id="ilg.gnuarmeclipse.managedbuild.cross.targetPlatform.194370869" isAbstract="false" osList="all" superClass="ilg.gnuarmeclipse.managedbuild.cross.targetPlatform"/>
+							<builder buildPath="${workspace_loc:/mruby-2.1.1}" id="com.renesas.cdt.managedbuild.gcc.rz.builder.1751464165" keepEnvironmentInBuildfile="false" managedBuildOn="false" name="GCC for Renesas Builder" superClass="com.renesas.cdt.managedbuild.gcc.rz.builder"/>
+							<tool id="com.renesas.cdt.managedbuild.gcc.rz.tool.assembler.322468629" name="Cross ARM GNU Assembler" superClass="com.renesas.cdt.managedbuild.gcc.rz.tool.assembler">
+								<option id="ilg.gnuarmeclipse.managedbuild.cross.option.assembler.usepreprocessor.1448772766" name="Use preprocessor" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.assembler.usepreprocessor" value="true" valueType="boolean"/>
+								<inputType id="ilg.gnuarmeclipse.managedbuild.cross.tool.assembler.input.811183051" superClass="ilg.gnuarmeclipse.managedbuild.cross.tool.assembler.input"/>
+							</tool>
+							<tool id="com.renesas.cdt.managedbuild.gcc.rz.tool.compiler.c.1483126921" name="Cross ARM C Compiler" superClass="com.renesas.cdt.managedbuild.gcc.rz.tool.compiler.c"/>
+							<tool id="com.renesas.cdt.managedbuild.gcc.rz.tool.compiler.cpp.935511993" name="Cross ARM C++ Compiler" superClass="com.renesas.cdt.managedbuild.gcc.rz.tool.compiler.cpp">
+								<inputType id="ilg.gnuarmeclipse.managedbuild.cross.tool.cpp.compiler.input.1782715602" superClass="ilg.gnuarmeclipse.managedbuild.cross.tool.cpp.compiler.input"/>
+								<inputType id="com.renesas.cdt.managedbuild.gcc.rz.inputType.compiler.c.1073709068" superClass="com.renesas.cdt.managedbuild.gcc.rz.inputType.compiler.c"/>
+							</tool>
+							<tool id="com.renesas.cdt.managedbuild.gcc.rz.tool.linker.c.1891149191" name="Cross ARM C Linker" superClass="com.renesas.cdt.managedbuild.gcc.rz.tool.linker.c">
+								<option id="ilg.gnuarmeclipse.managedbuild.cross.option.c.linker.gcsections.194050233" name="Remove unused sections (-Xlinker --gc-sections)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.c.linker.gcsections" value="true" valueType="boolean"/>
+							</tool>
+							<tool id="com.renesas.cdt.managedbuild.gcc.rz.tool.linker.cpp.1081730003" name="Cross ARM C++ Linker" superClass="com.renesas.cdt.managedbuild.gcc.rz.tool.linker.cpp">
+								<option id="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.linker.gcsections.287809380" name="Remove unused sections (-Xlinker --gc-sections)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.linker.gcsections" value="true" valueType="boolean"/>
+								<inputType id="com.renesas.cdt.managedbuild.gcc.rz.inputType.linker.cpp.560978425" superClass="com.renesas.cdt.managedbuild.gcc.rz.inputType.linker.cpp">
+									<additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
+									<additionalInput kind="additionalinputdependency" paths="$(LIBRARY_GENERATOR_OUTPUTTYPE_OUTPUTS)"/>
+									<additionalInput kind="additionaldependency" paths="$(LINKER_SCRIPT)"/>
+								</inputType>
+							</tool>
+							<tool id="com.renesas.cdt.managedbuild.gcc.rz.tool.archiver.470065479" name="Cross ARM GNU Archiver" superClass="com.renesas.cdt.managedbuild.gcc.rz.tool.archiver"/>
+							<tool id="com.renesas.cdt.managedbuild.gcc.rz.tool.flash.140052306" name="Cross ARM GNU Create Flash Image" superClass="com.renesas.cdt.managedbuild.gcc.rz.tool.flash"/>
+							<tool id="com.renesas.cdt.managedbuild.gcc.rz.tool.listing.704900212" name="Cross ARM GNU Create Listing" superClass="com.renesas.cdt.managedbuild.gcc.rz.tool.listing">
+								<option id="ilg.gnuarmeclipse.managedbuild.cross.option.createlisting.source.1868297379" name="Display source (--source|-S)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.createlisting.source" value="true" valueType="boolean"/>
+								<option id="ilg.gnuarmeclipse.managedbuild.cross.option.createlisting.allheaders.2058974757" name="Display all headers (--all-headers|-x)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.createlisting.allheaders" value="true" valueType="boolean"/>
+								<option id="ilg.gnuarmeclipse.managedbuild.cross.option.createlisting.demangle.640151966" name="Demangle names (--demangle|-C)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.createlisting.demangle" value="true" valueType="boolean"/>
+								<option id="ilg.gnuarmeclipse.managedbuild.cross.option.createlisting.linenumbers.68234501" name="Display line numbers (--line-numbers|-l)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.createlisting.linenumbers" value="true" valueType="boolean"/>
+								<option id="ilg.gnuarmeclipse.managedbuild.cross.option.createlisting.wide.1986410872" name="Wide lines (--wide|-w)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.createlisting.wide" value="true" valueType="boolean"/>
+							</tool>
+							<tool id="com.renesas.cdt.managedbuild.gcc.rz.tool.size.1320038869" name="Cross ARM GNU Print Size" superClass="com.renesas.cdt.managedbuild.gcc.rz.tool.size">
+								<option id="ilg.gnuarmeclipse.managedbuild.cross.option.printsize.format.231473645" name="Size format" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.printsize.format"/>
+							</tool>
+							<tool id="com.renesas.cdt.managedbuild.gcc.rz.tool.libgen.1477349549" name="Library Generator" superClass="com.renesas.cdt.managedbuild.gcc.rz.tool.libgen"/>
+						</toolChain>
+					</folderInfo>
+					<sourceEntries>
+						<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="src"/>
+					</sourceEntries>
+				</configuration>
+			</storageModule>
+			<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
+			<storageModule moduleId="com.renesas.cdt.managedbuild.core.toolchainInfo">
+				<option id="toolchain.id" value="gcc-arm-embedded"/>
+				<option id="toolchain.version" value="6.3.1.20170620"/>
+			</storageModule>
+		</cconfiguration>
+	</storageModule>
+	<storageModule moduleId="cdtBuildSystem" version="4.0.0">
+		<project id="mruby.com.renesas.cdt.rz.projectType.win32.Id.3696189" name="Executable (Renesas)"/>
+	</storageModule>
+	<storageModule moduleId="scannerConfiguration">
+		<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
+	</storageModule>
+	<storageModule moduleId="org.eclipse.cdt.core.LanguageSettingsProviders"/>
+	<storageModule moduleId="refreshScope" versionNumber="2">
+		<configuration configurationName="Debug">
+			<resource resourceType="PROJECT" workspacePath="/mruby"/>
+		</configuration>
+	</storageModule>
+</cproject>
Index: /EcnlProtoTool/trunk/mruby-2.1.1/.github/workflows/main.yml
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/.github/workflows/main.yml	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/.github/workflows/main.yml	(revision 439)
@@ -0,0 +1,24 @@
+name: CIFuzz
+on: [pull_request]
+jobs:
+  Fuzzing:
+    runs-on: ubuntu-latest
+    steps:
+    - name: Build Fuzzers
+      uses: google/oss-fuzz/infra/cifuzz/actions/build_fuzzers@master
+      with:
+        oss-fuzz-project-name: 'mruby'
+        dry-run: false
+    - name: Run Fuzzers
+      uses: google/oss-fuzz/infra/cifuzz/actions/run_fuzzers@master
+      with:
+        oss-fuzz-project-name: 'mruby'
+        fuzz-seconds: 600
+        dry-run: false
+    - name: Upload Crash
+      uses: actions/upload-artifact@v1
+      if: failure()
+      with:
+        name: artifacts
+        path: ./out/artifacts
+
Index: /EcnlProtoTool/trunk/mruby-2.1.1/.gitignore
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/.gitignore	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/.gitignore	(revision 439)
@@ -0,0 +1,34 @@
+*.lock
+*.bak
+*.bc
+*.d
+*.i
+*.o
+*.orig
+*.pdb
+*.rej
+*.s
+*.sav
+*.swp
+*.tmp
+*~
+.DS_Store
+.ccmalloc
+.svn
+.vscode
+.yardoc
+cscope.files
+cscope.out
+tags
+
+/.git
+/bin
+/build
+/mruby-source-*.gem
+
+/benchmark/**/*.dat
+/benchmark/*.pdf
+/benchmark/*.png
+
+/doc/api
+/doc/capi
Index: /EcnlProtoTool/trunk/mruby-2.1.1/.gitlab-ci.yml
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/.gitlab-ci.yml	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/.gitlab-ci.yml	(revision 439)
@@ -0,0 +1,4414 @@
+---
+stages:
+- pretest
+- test
+pretest:
+  stage: pretest
+  image: registry.gitlab.com/dabroz/mruby:gcc47_0.1
+  tags:
+  - linux
+  variables:
+    CC: gcc-4.7
+    CXX: g++-4.7
+    LD: gcc-4.7
+  script: rake --verbose all test
+Test gcc-4.7 32bit:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc47_0.7
+  variables:
+    CC: gcc-4.7
+    CXX: g++-4.7
+    LD: gcc-4.7
+    CFLAGS: "-m32 "
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test gcc-4.7 32bit_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc47_0.7
+  variables:
+    CC: gcc-4.7
+    CXX: g++-4.7
+    LD: gcc-4.7
+    CFLAGS: "-m32 -DMRB_UTF8_STRING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test gcc-4.7 32bit_nan:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc47_0.7
+  variables:
+    CC: gcc-4.7
+    CXX: g++-4.7
+    LD: gcc-4.7
+    CFLAGS: "-m32 -DMRB_NAN_BOXING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test gcc-4.7 32bit_nan_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc47_0.7
+  variables:
+    CC: gcc-4.7
+    CXX: g++-4.7
+    LD: gcc-4.7
+    CFLAGS: "-m32 -DMRB_NAN_BOXING=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test gcc-4.7 32bit_word:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc47_0.7
+  variables:
+    CC: gcc-4.7
+    CXX: g++-4.7
+    LD: gcc-4.7
+    CFLAGS: "-m32 -DMRB_WORD_BOXING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test gcc-4.7 32bit_word_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc47_0.7
+  variables:
+    CC: gcc-4.7
+    CXX: g++-4.7
+    LD: gcc-4.7
+    CFLAGS: "-m32 -DMRB_WORD_BOXING=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test gcc-4.7 32bit_int16:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc47_0.7
+  variables:
+    CC: gcc-4.7
+    CXX: g++-4.7
+    LD: gcc-4.7
+    CFLAGS: "-m32 -DMRB_INT16=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test gcc-4.7 32bit_int16_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc47_0.7
+  variables:
+    CC: gcc-4.7
+    CXX: g++-4.7
+    LD: gcc-4.7
+    CFLAGS: "-m32 -DMRB_INT16=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test gcc-4.7 32bit_int16_nan:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc47_0.7
+  variables:
+    CC: gcc-4.7
+    CXX: g++-4.7
+    LD: gcc-4.7
+    CFLAGS: "-m32 -DMRB_INT16=1 -DMRB_NAN_BOXING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test gcc-4.7 32bit_int16_nan_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc47_0.7
+  variables:
+    CC: gcc-4.7
+    CXX: g++-4.7
+    LD: gcc-4.7
+    CFLAGS: "-m32 -DMRB_INT16=1 -DMRB_NAN_BOXING=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test gcc-4.7 32bit_int64:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc47_0.7
+  variables:
+    CC: gcc-4.7
+    CXX: g++-4.7
+    LD: gcc-4.7
+    CFLAGS: "-m32 -DMRB_INT64=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test gcc-4.7 32bit_int64_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc47_0.7
+  variables:
+    CC: gcc-4.7
+    CXX: g++-4.7
+    LD: gcc-4.7
+    CFLAGS: "-m32 -DMRB_INT64=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test gcc-4.7 32bit_float:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc47_0.7
+  variables:
+    CC: gcc-4.7
+    CXX: g++-4.7
+    LD: gcc-4.7
+    CFLAGS: "-m32 -DMRB_USE_FLOAT=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test gcc-4.7 32bit_float_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc47_0.7
+  variables:
+    CC: gcc-4.7
+    CXX: g++-4.7
+    LD: gcc-4.7
+    CFLAGS: "-m32 -DMRB_USE_FLOAT=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test gcc-4.7 32bit_float_word:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc47_0.7
+  variables:
+    CC: gcc-4.7
+    CXX: g++-4.7
+    LD: gcc-4.7
+    CFLAGS: "-m32 -DMRB_USE_FLOAT=1 -DMRB_WORD_BOXING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test gcc-4.7 32bit_float_word_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc47_0.7
+  variables:
+    CC: gcc-4.7
+    CXX: g++-4.7
+    LD: gcc-4.7
+    CFLAGS: "-m32 -DMRB_USE_FLOAT=1 -DMRB_WORD_BOXING=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test gcc-4.7 32bit_float_int16:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc47_0.7
+  variables:
+    CC: gcc-4.7
+    CXX: g++-4.7
+    LD: gcc-4.7
+    CFLAGS: "-m32 -DMRB_USE_FLOAT=1 -DMRB_INT16=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test gcc-4.7 32bit_float_int16_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc47_0.7
+  variables:
+    CC: gcc-4.7
+    CXX: g++-4.7
+    LD: gcc-4.7
+    CFLAGS: "-m32 -DMRB_USE_FLOAT=1 -DMRB_INT16=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test gcc-4.7 32bit_float_int64:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc47_0.7
+  variables:
+    CC: gcc-4.7
+    CXX: g++-4.7
+    LD: gcc-4.7
+    CFLAGS: "-m32 -DMRB_USE_FLOAT=1 -DMRB_INT64=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test gcc-4.7 32bit_float_int64_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc47_0.7
+  variables:
+    CC: gcc-4.7
+    CXX: g++-4.7
+    LD: gcc-4.7
+    CFLAGS: "-m32 -DMRB_USE_FLOAT=1 -DMRB_INT64=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test gcc-4.7 64bit:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc47_0.7
+  variables:
+    CC: gcc-4.7
+    CXX: g++-4.7
+    LD: gcc-4.7
+    CFLAGS: ''
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test gcc-4.7 64bit_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc47_0.7
+  variables:
+    CC: gcc-4.7
+    CXX: g++-4.7
+    LD: gcc-4.7
+    CFLAGS: "-DMRB_UTF8_STRING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test gcc-4.7 64bit_nan:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc47_0.7
+  variables:
+    CC: gcc-4.7
+    CXX: g++-4.7
+    LD: gcc-4.7
+    CFLAGS: "-DMRB_NAN_BOXING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test gcc-4.7 64bit_nan_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc47_0.7
+  variables:
+    CC: gcc-4.7
+    CXX: g++-4.7
+    LD: gcc-4.7
+    CFLAGS: "-DMRB_NAN_BOXING=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test gcc-4.7 64bit_word:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc47_0.7
+  variables:
+    CC: gcc-4.7
+    CXX: g++-4.7
+    LD: gcc-4.7
+    CFLAGS: "-DMRB_WORD_BOXING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test gcc-4.7 64bit_word_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc47_0.7
+  variables:
+    CC: gcc-4.7
+    CXX: g++-4.7
+    LD: gcc-4.7
+    CFLAGS: "-DMRB_WORD_BOXING=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test gcc-4.7 64bit_int16:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc47_0.7
+  variables:
+    CC: gcc-4.7
+    CXX: g++-4.7
+    LD: gcc-4.7
+    CFLAGS: "-DMRB_INT16=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test gcc-4.7 64bit_int16_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc47_0.7
+  variables:
+    CC: gcc-4.7
+    CXX: g++-4.7
+    LD: gcc-4.7
+    CFLAGS: "-DMRB_INT16=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test gcc-4.7 64bit_int16_nan:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc47_0.7
+  variables:
+    CC: gcc-4.7
+    CXX: g++-4.7
+    LD: gcc-4.7
+    CFLAGS: "-DMRB_INT16=1 -DMRB_NAN_BOXING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test gcc-4.7 64bit_int16_nan_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc47_0.7
+  variables:
+    CC: gcc-4.7
+    CXX: g++-4.7
+    LD: gcc-4.7
+    CFLAGS: "-DMRB_INT16=1 -DMRB_NAN_BOXING=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test gcc-4.7 64bit_int64:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc47_0.7
+  variables:
+    CC: gcc-4.7
+    CXX: g++-4.7
+    LD: gcc-4.7
+    CFLAGS: "-DMRB_INT64=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test gcc-4.7 64bit_int64_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc47_0.7
+  variables:
+    CC: gcc-4.7
+    CXX: g++-4.7
+    LD: gcc-4.7
+    CFLAGS: "-DMRB_INT64=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test gcc-4.7 64bit_int64_word:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc47_0.7
+  variables:
+    CC: gcc-4.7
+    CXX: g++-4.7
+    LD: gcc-4.7
+    CFLAGS: "-DMRB_INT64=1 -DMRB_WORD_BOXING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test gcc-4.7 64bit_int64_word_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc47_0.7
+  variables:
+    CC: gcc-4.7
+    CXX: g++-4.7
+    LD: gcc-4.7
+    CFLAGS: "-DMRB_INT64=1 -DMRB_WORD_BOXING=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test gcc-4.7 64bit_float:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc47_0.7
+  variables:
+    CC: gcc-4.7
+    CXX: g++-4.7
+    LD: gcc-4.7
+    CFLAGS: "-DMRB_USE_FLOAT=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test gcc-4.7 64bit_float_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc47_0.7
+  variables:
+    CC: gcc-4.7
+    CXX: g++-4.7
+    LD: gcc-4.7
+    CFLAGS: "-DMRB_USE_FLOAT=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test gcc-4.7 64bit_float_word:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc47_0.7
+  variables:
+    CC: gcc-4.7
+    CXX: g++-4.7
+    LD: gcc-4.7
+    CFLAGS: "-DMRB_USE_FLOAT=1 -DMRB_WORD_BOXING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test gcc-4.7 64bit_float_word_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc47_0.7
+  variables:
+    CC: gcc-4.7
+    CXX: g++-4.7
+    LD: gcc-4.7
+    CFLAGS: "-DMRB_USE_FLOAT=1 -DMRB_WORD_BOXING=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test gcc-4.7 64bit_float_int16:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc47_0.7
+  variables:
+    CC: gcc-4.7
+    CXX: g++-4.7
+    LD: gcc-4.7
+    CFLAGS: "-DMRB_USE_FLOAT=1 -DMRB_INT16=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test gcc-4.7 64bit_float_int16_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc47_0.7
+  variables:
+    CC: gcc-4.7
+    CXX: g++-4.7
+    LD: gcc-4.7
+    CFLAGS: "-DMRB_USE_FLOAT=1 -DMRB_INT16=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test gcc-4.7 64bit_float_int64:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc47_0.7
+  variables:
+    CC: gcc-4.7
+    CXX: g++-4.7
+    LD: gcc-4.7
+    CFLAGS: "-DMRB_USE_FLOAT=1 -DMRB_INT64=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test gcc-4.7 64bit_float_int64_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc47_0.7
+  variables:
+    CC: gcc-4.7
+    CXX: g++-4.7
+    LD: gcc-4.7
+    CFLAGS: "-DMRB_USE_FLOAT=1 -DMRB_INT64=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test gcc-4.7 64bit_float_int64_word:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc47_0.7
+  variables:
+    CC: gcc-4.7
+    CXX: g++-4.7
+    LD: gcc-4.7
+    CFLAGS: "-DMRB_USE_FLOAT=1 -DMRB_INT64=1 -DMRB_WORD_BOXING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test gcc-4.7 64bit_float_int64_word_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc47_0.7
+  variables:
+    CC: gcc-4.7
+    CXX: g++-4.7
+    LD: gcc-4.7
+    CFLAGS: "-DMRB_USE_FLOAT=1 -DMRB_INT64=1 -DMRB_WORD_BOXING=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test gcc-4.8 32bit:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc48_0.7
+  variables:
+    CC: gcc-4.8
+    CXX: g++-4.8
+    LD: gcc-4.8
+    CFLAGS: "-m32 "
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test gcc-4.8 32bit_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc48_0.7
+  variables:
+    CC: gcc-4.8
+    CXX: g++-4.8
+    LD: gcc-4.8
+    CFLAGS: "-m32 -DMRB_UTF8_STRING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test gcc-4.8 32bit_nan:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc48_0.7
+  variables:
+    CC: gcc-4.8
+    CXX: g++-4.8
+    LD: gcc-4.8
+    CFLAGS: "-m32 -DMRB_NAN_BOXING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test gcc-4.8 32bit_nan_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc48_0.7
+  variables:
+    CC: gcc-4.8
+    CXX: g++-4.8
+    LD: gcc-4.8
+    CFLAGS: "-m32 -DMRB_NAN_BOXING=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test gcc-4.8 32bit_word:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc48_0.7
+  variables:
+    CC: gcc-4.8
+    CXX: g++-4.8
+    LD: gcc-4.8
+    CFLAGS: "-m32 -DMRB_WORD_BOXING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test gcc-4.8 32bit_word_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc48_0.7
+  variables:
+    CC: gcc-4.8
+    CXX: g++-4.8
+    LD: gcc-4.8
+    CFLAGS: "-m32 -DMRB_WORD_BOXING=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test gcc-4.8 32bit_int16:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc48_0.7
+  variables:
+    CC: gcc-4.8
+    CXX: g++-4.8
+    LD: gcc-4.8
+    CFLAGS: "-m32 -DMRB_INT16=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test gcc-4.8 32bit_int16_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc48_0.7
+  variables:
+    CC: gcc-4.8
+    CXX: g++-4.8
+    LD: gcc-4.8
+    CFLAGS: "-m32 -DMRB_INT16=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test gcc-4.8 32bit_int16_nan:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc48_0.7
+  variables:
+    CC: gcc-4.8
+    CXX: g++-4.8
+    LD: gcc-4.8
+    CFLAGS: "-m32 -DMRB_INT16=1 -DMRB_NAN_BOXING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test gcc-4.8 32bit_int16_nan_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc48_0.7
+  variables:
+    CC: gcc-4.8
+    CXX: g++-4.8
+    LD: gcc-4.8
+    CFLAGS: "-m32 -DMRB_INT16=1 -DMRB_NAN_BOXING=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test gcc-4.8 32bit_int64:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc48_0.7
+  variables:
+    CC: gcc-4.8
+    CXX: g++-4.8
+    LD: gcc-4.8
+    CFLAGS: "-m32 -DMRB_INT64=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test gcc-4.8 32bit_int64_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc48_0.7
+  variables:
+    CC: gcc-4.8
+    CXX: g++-4.8
+    LD: gcc-4.8
+    CFLAGS: "-m32 -DMRB_INT64=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test gcc-4.8 32bit_float:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc48_0.7
+  variables:
+    CC: gcc-4.8
+    CXX: g++-4.8
+    LD: gcc-4.8
+    CFLAGS: "-m32 -DMRB_USE_FLOAT=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test gcc-4.8 32bit_float_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc48_0.7
+  variables:
+    CC: gcc-4.8
+    CXX: g++-4.8
+    LD: gcc-4.8
+    CFLAGS: "-m32 -DMRB_USE_FLOAT=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test gcc-4.8 32bit_float_word:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc48_0.7
+  variables:
+    CC: gcc-4.8
+    CXX: g++-4.8
+    LD: gcc-4.8
+    CFLAGS: "-m32 -DMRB_USE_FLOAT=1 -DMRB_WORD_BOXING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test gcc-4.8 32bit_float_word_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc48_0.7
+  variables:
+    CC: gcc-4.8
+    CXX: g++-4.8
+    LD: gcc-4.8
+    CFLAGS: "-m32 -DMRB_USE_FLOAT=1 -DMRB_WORD_BOXING=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test gcc-4.8 32bit_float_int16:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc48_0.7
+  variables:
+    CC: gcc-4.8
+    CXX: g++-4.8
+    LD: gcc-4.8
+    CFLAGS: "-m32 -DMRB_USE_FLOAT=1 -DMRB_INT16=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test gcc-4.8 32bit_float_int16_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc48_0.7
+  variables:
+    CC: gcc-4.8
+    CXX: g++-4.8
+    LD: gcc-4.8
+    CFLAGS: "-m32 -DMRB_USE_FLOAT=1 -DMRB_INT16=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test gcc-4.8 32bit_float_int64:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc48_0.7
+  variables:
+    CC: gcc-4.8
+    CXX: g++-4.8
+    LD: gcc-4.8
+    CFLAGS: "-m32 -DMRB_USE_FLOAT=1 -DMRB_INT64=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test gcc-4.8 32bit_float_int64_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc48_0.7
+  variables:
+    CC: gcc-4.8
+    CXX: g++-4.8
+    LD: gcc-4.8
+    CFLAGS: "-m32 -DMRB_USE_FLOAT=1 -DMRB_INT64=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test gcc-4.8 64bit:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc48_0.7
+  variables:
+    CC: gcc-4.8
+    CXX: g++-4.8
+    LD: gcc-4.8
+    CFLAGS: ''
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test gcc-4.8 64bit_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc48_0.7
+  variables:
+    CC: gcc-4.8
+    CXX: g++-4.8
+    LD: gcc-4.8
+    CFLAGS: "-DMRB_UTF8_STRING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test gcc-4.8 64bit_nan:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc48_0.7
+  variables:
+    CC: gcc-4.8
+    CXX: g++-4.8
+    LD: gcc-4.8
+    CFLAGS: "-DMRB_NAN_BOXING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test gcc-4.8 64bit_nan_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc48_0.7
+  variables:
+    CC: gcc-4.8
+    CXX: g++-4.8
+    LD: gcc-4.8
+    CFLAGS: "-DMRB_NAN_BOXING=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test gcc-4.8 64bit_word:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc48_0.7
+  variables:
+    CC: gcc-4.8
+    CXX: g++-4.8
+    LD: gcc-4.8
+    CFLAGS: "-DMRB_WORD_BOXING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test gcc-4.8 64bit_word_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc48_0.7
+  variables:
+    CC: gcc-4.8
+    CXX: g++-4.8
+    LD: gcc-4.8
+    CFLAGS: "-DMRB_WORD_BOXING=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test gcc-4.8 64bit_int16:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc48_0.7
+  variables:
+    CC: gcc-4.8
+    CXX: g++-4.8
+    LD: gcc-4.8
+    CFLAGS: "-DMRB_INT16=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test gcc-4.8 64bit_int16_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc48_0.7
+  variables:
+    CC: gcc-4.8
+    CXX: g++-4.8
+    LD: gcc-4.8
+    CFLAGS: "-DMRB_INT16=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test gcc-4.8 64bit_int16_nan:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc48_0.7
+  variables:
+    CC: gcc-4.8
+    CXX: g++-4.8
+    LD: gcc-4.8
+    CFLAGS: "-DMRB_INT16=1 -DMRB_NAN_BOXING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test gcc-4.8 64bit_int16_nan_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc48_0.7
+  variables:
+    CC: gcc-4.8
+    CXX: g++-4.8
+    LD: gcc-4.8
+    CFLAGS: "-DMRB_INT16=1 -DMRB_NAN_BOXING=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test gcc-4.8 64bit_int64:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc48_0.7
+  variables:
+    CC: gcc-4.8
+    CXX: g++-4.8
+    LD: gcc-4.8
+    CFLAGS: "-DMRB_INT64=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test gcc-4.8 64bit_int64_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc48_0.7
+  variables:
+    CC: gcc-4.8
+    CXX: g++-4.8
+    LD: gcc-4.8
+    CFLAGS: "-DMRB_INT64=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test gcc-4.8 64bit_int64_word:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc48_0.7
+  variables:
+    CC: gcc-4.8
+    CXX: g++-4.8
+    LD: gcc-4.8
+    CFLAGS: "-DMRB_INT64=1 -DMRB_WORD_BOXING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test gcc-4.8 64bit_int64_word_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc48_0.7
+  variables:
+    CC: gcc-4.8
+    CXX: g++-4.8
+    LD: gcc-4.8
+    CFLAGS: "-DMRB_INT64=1 -DMRB_WORD_BOXING=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test gcc-4.8 64bit_float:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc48_0.7
+  variables:
+    CC: gcc-4.8
+    CXX: g++-4.8
+    LD: gcc-4.8
+    CFLAGS: "-DMRB_USE_FLOAT=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test gcc-4.8 64bit_float_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc48_0.7
+  variables:
+    CC: gcc-4.8
+    CXX: g++-4.8
+    LD: gcc-4.8
+    CFLAGS: "-DMRB_USE_FLOAT=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test gcc-4.8 64bit_float_word:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc48_0.7
+  variables:
+    CC: gcc-4.8
+    CXX: g++-4.8
+    LD: gcc-4.8
+    CFLAGS: "-DMRB_USE_FLOAT=1 -DMRB_WORD_BOXING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test gcc-4.8 64bit_float_word_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc48_0.7
+  variables:
+    CC: gcc-4.8
+    CXX: g++-4.8
+    LD: gcc-4.8
+    CFLAGS: "-DMRB_USE_FLOAT=1 -DMRB_WORD_BOXING=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test gcc-4.8 64bit_float_int16:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc48_0.7
+  variables:
+    CC: gcc-4.8
+    CXX: g++-4.8
+    LD: gcc-4.8
+    CFLAGS: "-DMRB_USE_FLOAT=1 -DMRB_INT16=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test gcc-4.8 64bit_float_int16_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc48_0.7
+  variables:
+    CC: gcc-4.8
+    CXX: g++-4.8
+    LD: gcc-4.8
+    CFLAGS: "-DMRB_USE_FLOAT=1 -DMRB_INT16=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test gcc-4.8 64bit_float_int64:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc48_0.7
+  variables:
+    CC: gcc-4.8
+    CXX: g++-4.8
+    LD: gcc-4.8
+    CFLAGS: "-DMRB_USE_FLOAT=1 -DMRB_INT64=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test gcc-4.8 64bit_float_int64_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc48_0.7
+  variables:
+    CC: gcc-4.8
+    CXX: g++-4.8
+    LD: gcc-4.8
+    CFLAGS: "-DMRB_USE_FLOAT=1 -DMRB_INT64=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test gcc-4.8 64bit_float_int64_word:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc48_0.7
+  variables:
+    CC: gcc-4.8
+    CXX: g++-4.8
+    LD: gcc-4.8
+    CFLAGS: "-DMRB_USE_FLOAT=1 -DMRB_INT64=1 -DMRB_WORD_BOXING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test gcc-4.8 64bit_float_int64_word_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc48_0.7
+  variables:
+    CC: gcc-4.8
+    CXX: g++-4.8
+    LD: gcc-4.8
+    CFLAGS: "-DMRB_USE_FLOAT=1 -DMRB_INT64=1 -DMRB_WORD_BOXING=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test gcc-4.9 32bit:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc49_0.7
+  variables:
+    CC: gcc-4.9
+    CXX: g++-4.9
+    LD: gcc-4.9
+    CFLAGS: "-m32 "
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test gcc-4.9 32bit_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc49_0.7
+  variables:
+    CC: gcc-4.9
+    CXX: g++-4.9
+    LD: gcc-4.9
+    CFLAGS: "-m32 -DMRB_UTF8_STRING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test gcc-4.9 32bit_nan:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc49_0.7
+  variables:
+    CC: gcc-4.9
+    CXX: g++-4.9
+    LD: gcc-4.9
+    CFLAGS: "-m32 -DMRB_NAN_BOXING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test gcc-4.9 32bit_nan_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc49_0.7
+  variables:
+    CC: gcc-4.9
+    CXX: g++-4.9
+    LD: gcc-4.9
+    CFLAGS: "-m32 -DMRB_NAN_BOXING=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test gcc-4.9 32bit_word:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc49_0.7
+  variables:
+    CC: gcc-4.9
+    CXX: g++-4.9
+    LD: gcc-4.9
+    CFLAGS: "-m32 -DMRB_WORD_BOXING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test gcc-4.9 32bit_word_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc49_0.7
+  variables:
+    CC: gcc-4.9
+    CXX: g++-4.9
+    LD: gcc-4.9
+    CFLAGS: "-m32 -DMRB_WORD_BOXING=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test gcc-4.9 32bit_int16:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc49_0.7
+  variables:
+    CC: gcc-4.9
+    CXX: g++-4.9
+    LD: gcc-4.9
+    CFLAGS: "-m32 -DMRB_INT16=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test gcc-4.9 32bit_int16_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc49_0.7
+  variables:
+    CC: gcc-4.9
+    CXX: g++-4.9
+    LD: gcc-4.9
+    CFLAGS: "-m32 -DMRB_INT16=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test gcc-4.9 32bit_int16_nan:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc49_0.7
+  variables:
+    CC: gcc-4.9
+    CXX: g++-4.9
+    LD: gcc-4.9
+    CFLAGS: "-m32 -DMRB_INT16=1 -DMRB_NAN_BOXING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test gcc-4.9 32bit_int16_nan_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc49_0.7
+  variables:
+    CC: gcc-4.9
+    CXX: g++-4.9
+    LD: gcc-4.9
+    CFLAGS: "-m32 -DMRB_INT16=1 -DMRB_NAN_BOXING=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test gcc-4.9 32bit_int64:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc49_0.7
+  variables:
+    CC: gcc-4.9
+    CXX: g++-4.9
+    LD: gcc-4.9
+    CFLAGS: "-m32 -DMRB_INT64=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test gcc-4.9 32bit_int64_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc49_0.7
+  variables:
+    CC: gcc-4.9
+    CXX: g++-4.9
+    LD: gcc-4.9
+    CFLAGS: "-m32 -DMRB_INT64=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test gcc-4.9 32bit_float:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc49_0.7
+  variables:
+    CC: gcc-4.9
+    CXX: g++-4.9
+    LD: gcc-4.9
+    CFLAGS: "-m32 -DMRB_USE_FLOAT=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test gcc-4.9 32bit_float_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc49_0.7
+  variables:
+    CC: gcc-4.9
+    CXX: g++-4.9
+    LD: gcc-4.9
+    CFLAGS: "-m32 -DMRB_USE_FLOAT=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test gcc-4.9 32bit_float_word:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc49_0.7
+  variables:
+    CC: gcc-4.9
+    CXX: g++-4.9
+    LD: gcc-4.9
+    CFLAGS: "-m32 -DMRB_USE_FLOAT=1 -DMRB_WORD_BOXING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test gcc-4.9 32bit_float_word_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc49_0.7
+  variables:
+    CC: gcc-4.9
+    CXX: g++-4.9
+    LD: gcc-4.9
+    CFLAGS: "-m32 -DMRB_USE_FLOAT=1 -DMRB_WORD_BOXING=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test gcc-4.9 32bit_float_int16:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc49_0.7
+  variables:
+    CC: gcc-4.9
+    CXX: g++-4.9
+    LD: gcc-4.9
+    CFLAGS: "-m32 -DMRB_USE_FLOAT=1 -DMRB_INT16=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test gcc-4.9 32bit_float_int16_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc49_0.7
+  variables:
+    CC: gcc-4.9
+    CXX: g++-4.9
+    LD: gcc-4.9
+    CFLAGS: "-m32 -DMRB_USE_FLOAT=1 -DMRB_INT16=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test gcc-4.9 32bit_float_int64:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc49_0.7
+  variables:
+    CC: gcc-4.9
+    CXX: g++-4.9
+    LD: gcc-4.9
+    CFLAGS: "-m32 -DMRB_USE_FLOAT=1 -DMRB_INT64=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test gcc-4.9 32bit_float_int64_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc49_0.7
+  variables:
+    CC: gcc-4.9
+    CXX: g++-4.9
+    LD: gcc-4.9
+    CFLAGS: "-m32 -DMRB_USE_FLOAT=1 -DMRB_INT64=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test gcc-4.9 64bit:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc49_0.7
+  variables:
+    CC: gcc-4.9
+    CXX: g++-4.9
+    LD: gcc-4.9
+    CFLAGS: ''
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test gcc-4.9 64bit_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc49_0.7
+  variables:
+    CC: gcc-4.9
+    CXX: g++-4.9
+    LD: gcc-4.9
+    CFLAGS: "-DMRB_UTF8_STRING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test gcc-4.9 64bit_nan:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc49_0.7
+  variables:
+    CC: gcc-4.9
+    CXX: g++-4.9
+    LD: gcc-4.9
+    CFLAGS: "-DMRB_NAN_BOXING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test gcc-4.9 64bit_nan_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc49_0.7
+  variables:
+    CC: gcc-4.9
+    CXX: g++-4.9
+    LD: gcc-4.9
+    CFLAGS: "-DMRB_NAN_BOXING=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test gcc-4.9 64bit_word:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc49_0.7
+  variables:
+    CC: gcc-4.9
+    CXX: g++-4.9
+    LD: gcc-4.9
+    CFLAGS: "-DMRB_WORD_BOXING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test gcc-4.9 64bit_word_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc49_0.7
+  variables:
+    CC: gcc-4.9
+    CXX: g++-4.9
+    LD: gcc-4.9
+    CFLAGS: "-DMRB_WORD_BOXING=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test gcc-4.9 64bit_int16:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc49_0.7
+  variables:
+    CC: gcc-4.9
+    CXX: g++-4.9
+    LD: gcc-4.9
+    CFLAGS: "-DMRB_INT16=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test gcc-4.9 64bit_int16_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc49_0.7
+  variables:
+    CC: gcc-4.9
+    CXX: g++-4.9
+    LD: gcc-4.9
+    CFLAGS: "-DMRB_INT16=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test gcc-4.9 64bit_int16_nan:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc49_0.7
+  variables:
+    CC: gcc-4.9
+    CXX: g++-4.9
+    LD: gcc-4.9
+    CFLAGS: "-DMRB_INT16=1 -DMRB_NAN_BOXING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test gcc-4.9 64bit_int16_nan_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc49_0.7
+  variables:
+    CC: gcc-4.9
+    CXX: g++-4.9
+    LD: gcc-4.9
+    CFLAGS: "-DMRB_INT16=1 -DMRB_NAN_BOXING=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test gcc-4.9 64bit_int64:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc49_0.7
+  variables:
+    CC: gcc-4.9
+    CXX: g++-4.9
+    LD: gcc-4.9
+    CFLAGS: "-DMRB_INT64=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test gcc-4.9 64bit_int64_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc49_0.7
+  variables:
+    CC: gcc-4.9
+    CXX: g++-4.9
+    LD: gcc-4.9
+    CFLAGS: "-DMRB_INT64=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test gcc-4.9 64bit_int64_word:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc49_0.7
+  variables:
+    CC: gcc-4.9
+    CXX: g++-4.9
+    LD: gcc-4.9
+    CFLAGS: "-DMRB_INT64=1 -DMRB_WORD_BOXING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test gcc-4.9 64bit_int64_word_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc49_0.7
+  variables:
+    CC: gcc-4.9
+    CXX: g++-4.9
+    LD: gcc-4.9
+    CFLAGS: "-DMRB_INT64=1 -DMRB_WORD_BOXING=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test gcc-4.9 64bit_float:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc49_0.7
+  variables:
+    CC: gcc-4.9
+    CXX: g++-4.9
+    LD: gcc-4.9
+    CFLAGS: "-DMRB_USE_FLOAT=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test gcc-4.9 64bit_float_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc49_0.7
+  variables:
+    CC: gcc-4.9
+    CXX: g++-4.9
+    LD: gcc-4.9
+    CFLAGS: "-DMRB_USE_FLOAT=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test gcc-4.9 64bit_float_word:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc49_0.7
+  variables:
+    CC: gcc-4.9
+    CXX: g++-4.9
+    LD: gcc-4.9
+    CFLAGS: "-DMRB_USE_FLOAT=1 -DMRB_WORD_BOXING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test gcc-4.9 64bit_float_word_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc49_0.7
+  variables:
+    CC: gcc-4.9
+    CXX: g++-4.9
+    LD: gcc-4.9
+    CFLAGS: "-DMRB_USE_FLOAT=1 -DMRB_WORD_BOXING=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test gcc-4.9 64bit_float_int16:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc49_0.7
+  variables:
+    CC: gcc-4.9
+    CXX: g++-4.9
+    LD: gcc-4.9
+    CFLAGS: "-DMRB_USE_FLOAT=1 -DMRB_INT16=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test gcc-4.9 64bit_float_int16_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc49_0.7
+  variables:
+    CC: gcc-4.9
+    CXX: g++-4.9
+    LD: gcc-4.9
+    CFLAGS: "-DMRB_USE_FLOAT=1 -DMRB_INT16=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test gcc-4.9 64bit_float_int64:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc49_0.7
+  variables:
+    CC: gcc-4.9
+    CXX: g++-4.9
+    LD: gcc-4.9
+    CFLAGS: "-DMRB_USE_FLOAT=1 -DMRB_INT64=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test gcc-4.9 64bit_float_int64_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc49_0.7
+  variables:
+    CC: gcc-4.9
+    CXX: g++-4.9
+    LD: gcc-4.9
+    CFLAGS: "-DMRB_USE_FLOAT=1 -DMRB_INT64=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test gcc-4.9 64bit_float_int64_word:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc49_0.7
+  variables:
+    CC: gcc-4.9
+    CXX: g++-4.9
+    LD: gcc-4.9
+    CFLAGS: "-DMRB_USE_FLOAT=1 -DMRB_INT64=1 -DMRB_WORD_BOXING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test gcc-4.9 64bit_float_int64_word_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc49_0.7
+  variables:
+    CC: gcc-4.9
+    CXX: g++-4.9
+    LD: gcc-4.9
+    CFLAGS: "-DMRB_USE_FLOAT=1 -DMRB_INT64=1 -DMRB_WORD_BOXING=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test gcc-5 32bit:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc5_0.7
+  variables:
+    CC: gcc-5
+    CXX: g++-5
+    LD: gcc-5
+    CFLAGS: "-m32 "
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test gcc-5 32bit_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc5_0.7
+  variables:
+    CC: gcc-5
+    CXX: g++-5
+    LD: gcc-5
+    CFLAGS: "-m32 -DMRB_UTF8_STRING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test gcc-5 32bit_nan:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc5_0.7
+  variables:
+    CC: gcc-5
+    CXX: g++-5
+    LD: gcc-5
+    CFLAGS: "-m32 -DMRB_NAN_BOXING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test gcc-5 32bit_nan_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc5_0.7
+  variables:
+    CC: gcc-5
+    CXX: g++-5
+    LD: gcc-5
+    CFLAGS: "-m32 -DMRB_NAN_BOXING=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test gcc-5 32bit_word:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc5_0.7
+  variables:
+    CC: gcc-5
+    CXX: g++-5
+    LD: gcc-5
+    CFLAGS: "-m32 -DMRB_WORD_BOXING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test gcc-5 32bit_word_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc5_0.7
+  variables:
+    CC: gcc-5
+    CXX: g++-5
+    LD: gcc-5
+    CFLAGS: "-m32 -DMRB_WORD_BOXING=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test gcc-5 32bit_int16:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc5_0.7
+  variables:
+    CC: gcc-5
+    CXX: g++-5
+    LD: gcc-5
+    CFLAGS: "-m32 -DMRB_INT16=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test gcc-5 32bit_int16_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc5_0.7
+  variables:
+    CC: gcc-5
+    CXX: g++-5
+    LD: gcc-5
+    CFLAGS: "-m32 -DMRB_INT16=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test gcc-5 32bit_int16_nan:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc5_0.7
+  variables:
+    CC: gcc-5
+    CXX: g++-5
+    LD: gcc-5
+    CFLAGS: "-m32 -DMRB_INT16=1 -DMRB_NAN_BOXING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test gcc-5 32bit_int16_nan_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc5_0.7
+  variables:
+    CC: gcc-5
+    CXX: g++-5
+    LD: gcc-5
+    CFLAGS: "-m32 -DMRB_INT16=1 -DMRB_NAN_BOXING=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test gcc-5 32bit_int64:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc5_0.7
+  variables:
+    CC: gcc-5
+    CXX: g++-5
+    LD: gcc-5
+    CFLAGS: "-m32 -DMRB_INT64=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test gcc-5 32bit_int64_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc5_0.7
+  variables:
+    CC: gcc-5
+    CXX: g++-5
+    LD: gcc-5
+    CFLAGS: "-m32 -DMRB_INT64=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test gcc-5 32bit_float:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc5_0.7
+  variables:
+    CC: gcc-5
+    CXX: g++-5
+    LD: gcc-5
+    CFLAGS: "-m32 -DMRB_USE_FLOAT=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test gcc-5 32bit_float_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc5_0.7
+  variables:
+    CC: gcc-5
+    CXX: g++-5
+    LD: gcc-5
+    CFLAGS: "-m32 -DMRB_USE_FLOAT=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test gcc-5 32bit_float_word:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc5_0.7
+  variables:
+    CC: gcc-5
+    CXX: g++-5
+    LD: gcc-5
+    CFLAGS: "-m32 -DMRB_USE_FLOAT=1 -DMRB_WORD_BOXING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test gcc-5 32bit_float_word_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc5_0.7
+  variables:
+    CC: gcc-5
+    CXX: g++-5
+    LD: gcc-5
+    CFLAGS: "-m32 -DMRB_USE_FLOAT=1 -DMRB_WORD_BOXING=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test gcc-5 32bit_float_int16:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc5_0.7
+  variables:
+    CC: gcc-5
+    CXX: g++-5
+    LD: gcc-5
+    CFLAGS: "-m32 -DMRB_USE_FLOAT=1 -DMRB_INT16=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test gcc-5 32bit_float_int16_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc5_0.7
+  variables:
+    CC: gcc-5
+    CXX: g++-5
+    LD: gcc-5
+    CFLAGS: "-m32 -DMRB_USE_FLOAT=1 -DMRB_INT16=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test gcc-5 32bit_float_int64:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc5_0.7
+  variables:
+    CC: gcc-5
+    CXX: g++-5
+    LD: gcc-5
+    CFLAGS: "-m32 -DMRB_USE_FLOAT=1 -DMRB_INT64=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test gcc-5 32bit_float_int64_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc5_0.7
+  variables:
+    CC: gcc-5
+    CXX: g++-5
+    LD: gcc-5
+    CFLAGS: "-m32 -DMRB_USE_FLOAT=1 -DMRB_INT64=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test gcc-5 64bit:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc5_0.7
+  variables:
+    CC: gcc-5
+    CXX: g++-5
+    LD: gcc-5
+    CFLAGS: ''
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test gcc-5 64bit_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc5_0.7
+  variables:
+    CC: gcc-5
+    CXX: g++-5
+    LD: gcc-5
+    CFLAGS: "-DMRB_UTF8_STRING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test gcc-5 64bit_nan:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc5_0.7
+  variables:
+    CC: gcc-5
+    CXX: g++-5
+    LD: gcc-5
+    CFLAGS: "-DMRB_NAN_BOXING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test gcc-5 64bit_nan_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc5_0.7
+  variables:
+    CC: gcc-5
+    CXX: g++-5
+    LD: gcc-5
+    CFLAGS: "-DMRB_NAN_BOXING=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test gcc-5 64bit_word:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc5_0.7
+  variables:
+    CC: gcc-5
+    CXX: g++-5
+    LD: gcc-5
+    CFLAGS: "-DMRB_WORD_BOXING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test gcc-5 64bit_word_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc5_0.7
+  variables:
+    CC: gcc-5
+    CXX: g++-5
+    LD: gcc-5
+    CFLAGS: "-DMRB_WORD_BOXING=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test gcc-5 64bit_int16:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc5_0.7
+  variables:
+    CC: gcc-5
+    CXX: g++-5
+    LD: gcc-5
+    CFLAGS: "-DMRB_INT16=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test gcc-5 64bit_int16_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc5_0.7
+  variables:
+    CC: gcc-5
+    CXX: g++-5
+    LD: gcc-5
+    CFLAGS: "-DMRB_INT16=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test gcc-5 64bit_int16_nan:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc5_0.7
+  variables:
+    CC: gcc-5
+    CXX: g++-5
+    LD: gcc-5
+    CFLAGS: "-DMRB_INT16=1 -DMRB_NAN_BOXING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test gcc-5 64bit_int16_nan_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc5_0.7
+  variables:
+    CC: gcc-5
+    CXX: g++-5
+    LD: gcc-5
+    CFLAGS: "-DMRB_INT16=1 -DMRB_NAN_BOXING=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test gcc-5 64bit_int64:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc5_0.7
+  variables:
+    CC: gcc-5
+    CXX: g++-5
+    LD: gcc-5
+    CFLAGS: "-DMRB_INT64=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test gcc-5 64bit_int64_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc5_0.7
+  variables:
+    CC: gcc-5
+    CXX: g++-5
+    LD: gcc-5
+    CFLAGS: "-DMRB_INT64=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test gcc-5 64bit_int64_word:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc5_0.7
+  variables:
+    CC: gcc-5
+    CXX: g++-5
+    LD: gcc-5
+    CFLAGS: "-DMRB_INT64=1 -DMRB_WORD_BOXING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test gcc-5 64bit_int64_word_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc5_0.7
+  variables:
+    CC: gcc-5
+    CXX: g++-5
+    LD: gcc-5
+    CFLAGS: "-DMRB_INT64=1 -DMRB_WORD_BOXING=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test gcc-5 64bit_float:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc5_0.7
+  variables:
+    CC: gcc-5
+    CXX: g++-5
+    LD: gcc-5
+    CFLAGS: "-DMRB_USE_FLOAT=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test gcc-5 64bit_float_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc5_0.7
+  variables:
+    CC: gcc-5
+    CXX: g++-5
+    LD: gcc-5
+    CFLAGS: "-DMRB_USE_FLOAT=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test gcc-5 64bit_float_word:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc5_0.7
+  variables:
+    CC: gcc-5
+    CXX: g++-5
+    LD: gcc-5
+    CFLAGS: "-DMRB_USE_FLOAT=1 -DMRB_WORD_BOXING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test gcc-5 64bit_float_word_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc5_0.7
+  variables:
+    CC: gcc-5
+    CXX: g++-5
+    LD: gcc-5
+    CFLAGS: "-DMRB_USE_FLOAT=1 -DMRB_WORD_BOXING=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test gcc-5 64bit_float_int16:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc5_0.7
+  variables:
+    CC: gcc-5
+    CXX: g++-5
+    LD: gcc-5
+    CFLAGS: "-DMRB_USE_FLOAT=1 -DMRB_INT16=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test gcc-5 64bit_float_int16_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc5_0.7
+  variables:
+    CC: gcc-5
+    CXX: g++-5
+    LD: gcc-5
+    CFLAGS: "-DMRB_USE_FLOAT=1 -DMRB_INT16=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test gcc-5 64bit_float_int64:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc5_0.7
+  variables:
+    CC: gcc-5
+    CXX: g++-5
+    LD: gcc-5
+    CFLAGS: "-DMRB_USE_FLOAT=1 -DMRB_INT64=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test gcc-5 64bit_float_int64_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc5_0.7
+  variables:
+    CC: gcc-5
+    CXX: g++-5
+    LD: gcc-5
+    CFLAGS: "-DMRB_USE_FLOAT=1 -DMRB_INT64=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test gcc-5 64bit_float_int64_word:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc5_0.7
+  variables:
+    CC: gcc-5
+    CXX: g++-5
+    LD: gcc-5
+    CFLAGS: "-DMRB_USE_FLOAT=1 -DMRB_INT64=1 -DMRB_WORD_BOXING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test gcc-5 64bit_float_int64_word_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc5_0.7
+  variables:
+    CC: gcc-5
+    CXX: g++-5
+    LD: gcc-5
+    CFLAGS: "-DMRB_USE_FLOAT=1 -DMRB_INT64=1 -DMRB_WORD_BOXING=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test gcc-6 32bit:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc6_0.7
+  variables:
+    CC: gcc-6
+    CXX: g++-6
+    LD: gcc-6
+    CFLAGS: "-m32 "
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test gcc-6 32bit_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc6_0.7
+  variables:
+    CC: gcc-6
+    CXX: g++-6
+    LD: gcc-6
+    CFLAGS: "-m32 -DMRB_UTF8_STRING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test gcc-6 32bit_nan:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc6_0.7
+  variables:
+    CC: gcc-6
+    CXX: g++-6
+    LD: gcc-6
+    CFLAGS: "-m32 -DMRB_NAN_BOXING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test gcc-6 32bit_nan_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc6_0.7
+  variables:
+    CC: gcc-6
+    CXX: g++-6
+    LD: gcc-6
+    CFLAGS: "-m32 -DMRB_NAN_BOXING=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test gcc-6 32bit_word:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc6_0.7
+  variables:
+    CC: gcc-6
+    CXX: g++-6
+    LD: gcc-6
+    CFLAGS: "-m32 -DMRB_WORD_BOXING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test gcc-6 32bit_word_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc6_0.7
+  variables:
+    CC: gcc-6
+    CXX: g++-6
+    LD: gcc-6
+    CFLAGS: "-m32 -DMRB_WORD_BOXING=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test gcc-6 32bit_int16:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc6_0.7
+  variables:
+    CC: gcc-6
+    CXX: g++-6
+    LD: gcc-6
+    CFLAGS: "-m32 -DMRB_INT16=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test gcc-6 32bit_int16_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc6_0.7
+  variables:
+    CC: gcc-6
+    CXX: g++-6
+    LD: gcc-6
+    CFLAGS: "-m32 -DMRB_INT16=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test gcc-6 32bit_int16_nan:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc6_0.7
+  variables:
+    CC: gcc-6
+    CXX: g++-6
+    LD: gcc-6
+    CFLAGS: "-m32 -DMRB_INT16=1 -DMRB_NAN_BOXING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test gcc-6 32bit_int16_nan_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc6_0.7
+  variables:
+    CC: gcc-6
+    CXX: g++-6
+    LD: gcc-6
+    CFLAGS: "-m32 -DMRB_INT16=1 -DMRB_NAN_BOXING=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test gcc-6 32bit_int64:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc6_0.7
+  variables:
+    CC: gcc-6
+    CXX: g++-6
+    LD: gcc-6
+    CFLAGS: "-m32 -DMRB_INT64=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test gcc-6 32bit_int64_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc6_0.7
+  variables:
+    CC: gcc-6
+    CXX: g++-6
+    LD: gcc-6
+    CFLAGS: "-m32 -DMRB_INT64=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test gcc-6 32bit_float:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc6_0.7
+  variables:
+    CC: gcc-6
+    CXX: g++-6
+    LD: gcc-6
+    CFLAGS: "-m32 -DMRB_USE_FLOAT=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test gcc-6 32bit_float_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc6_0.7
+  variables:
+    CC: gcc-6
+    CXX: g++-6
+    LD: gcc-6
+    CFLAGS: "-m32 -DMRB_USE_FLOAT=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test gcc-6 32bit_float_word:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc6_0.7
+  variables:
+    CC: gcc-6
+    CXX: g++-6
+    LD: gcc-6
+    CFLAGS: "-m32 -DMRB_USE_FLOAT=1 -DMRB_WORD_BOXING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test gcc-6 32bit_float_word_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc6_0.7
+  variables:
+    CC: gcc-6
+    CXX: g++-6
+    LD: gcc-6
+    CFLAGS: "-m32 -DMRB_USE_FLOAT=1 -DMRB_WORD_BOXING=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test gcc-6 32bit_float_int16:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc6_0.7
+  variables:
+    CC: gcc-6
+    CXX: g++-6
+    LD: gcc-6
+    CFLAGS: "-m32 -DMRB_USE_FLOAT=1 -DMRB_INT16=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test gcc-6 32bit_float_int16_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc6_0.7
+  variables:
+    CC: gcc-6
+    CXX: g++-6
+    LD: gcc-6
+    CFLAGS: "-m32 -DMRB_USE_FLOAT=1 -DMRB_INT16=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test gcc-6 32bit_float_int64:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc6_0.7
+  variables:
+    CC: gcc-6
+    CXX: g++-6
+    LD: gcc-6
+    CFLAGS: "-m32 -DMRB_USE_FLOAT=1 -DMRB_INT64=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test gcc-6 32bit_float_int64_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc6_0.7
+  variables:
+    CC: gcc-6
+    CXX: g++-6
+    LD: gcc-6
+    CFLAGS: "-m32 -DMRB_USE_FLOAT=1 -DMRB_INT64=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test gcc-6 64bit:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc6_0.7
+  variables:
+    CC: gcc-6
+    CXX: g++-6
+    LD: gcc-6
+    CFLAGS: ''
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test gcc-6 64bit_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc6_0.7
+  variables:
+    CC: gcc-6
+    CXX: g++-6
+    LD: gcc-6
+    CFLAGS: "-DMRB_UTF8_STRING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test gcc-6 64bit_nan:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc6_0.7
+  variables:
+    CC: gcc-6
+    CXX: g++-6
+    LD: gcc-6
+    CFLAGS: "-DMRB_NAN_BOXING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test gcc-6 64bit_nan_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc6_0.7
+  variables:
+    CC: gcc-6
+    CXX: g++-6
+    LD: gcc-6
+    CFLAGS: "-DMRB_NAN_BOXING=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test gcc-6 64bit_word:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc6_0.7
+  variables:
+    CC: gcc-6
+    CXX: g++-6
+    LD: gcc-6
+    CFLAGS: "-DMRB_WORD_BOXING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test gcc-6 64bit_word_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc6_0.7
+  variables:
+    CC: gcc-6
+    CXX: g++-6
+    LD: gcc-6
+    CFLAGS: "-DMRB_WORD_BOXING=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test gcc-6 64bit_int16:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc6_0.7
+  variables:
+    CC: gcc-6
+    CXX: g++-6
+    LD: gcc-6
+    CFLAGS: "-DMRB_INT16=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test gcc-6 64bit_int16_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc6_0.7
+  variables:
+    CC: gcc-6
+    CXX: g++-6
+    LD: gcc-6
+    CFLAGS: "-DMRB_INT16=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test gcc-6 64bit_int16_nan:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc6_0.7
+  variables:
+    CC: gcc-6
+    CXX: g++-6
+    LD: gcc-6
+    CFLAGS: "-DMRB_INT16=1 -DMRB_NAN_BOXING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test gcc-6 64bit_int16_nan_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc6_0.7
+  variables:
+    CC: gcc-6
+    CXX: g++-6
+    LD: gcc-6
+    CFLAGS: "-DMRB_INT16=1 -DMRB_NAN_BOXING=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test gcc-6 64bit_int64:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc6_0.7
+  variables:
+    CC: gcc-6
+    CXX: g++-6
+    LD: gcc-6
+    CFLAGS: "-DMRB_INT64=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test gcc-6 64bit_int64_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc6_0.7
+  variables:
+    CC: gcc-6
+    CXX: g++-6
+    LD: gcc-6
+    CFLAGS: "-DMRB_INT64=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test gcc-6 64bit_int64_word:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc6_0.7
+  variables:
+    CC: gcc-6
+    CXX: g++-6
+    LD: gcc-6
+    CFLAGS: "-DMRB_INT64=1 -DMRB_WORD_BOXING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test gcc-6 64bit_int64_word_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc6_0.7
+  variables:
+    CC: gcc-6
+    CXX: g++-6
+    LD: gcc-6
+    CFLAGS: "-DMRB_INT64=1 -DMRB_WORD_BOXING=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test gcc-6 64bit_float:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc6_0.7
+  variables:
+    CC: gcc-6
+    CXX: g++-6
+    LD: gcc-6
+    CFLAGS: "-DMRB_USE_FLOAT=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test gcc-6 64bit_float_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc6_0.7
+  variables:
+    CC: gcc-6
+    CXX: g++-6
+    LD: gcc-6
+    CFLAGS: "-DMRB_USE_FLOAT=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test gcc-6 64bit_float_word:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc6_0.7
+  variables:
+    CC: gcc-6
+    CXX: g++-6
+    LD: gcc-6
+    CFLAGS: "-DMRB_USE_FLOAT=1 -DMRB_WORD_BOXING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test gcc-6 64bit_float_word_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc6_0.7
+  variables:
+    CC: gcc-6
+    CXX: g++-6
+    LD: gcc-6
+    CFLAGS: "-DMRB_USE_FLOAT=1 -DMRB_WORD_BOXING=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test gcc-6 64bit_float_int16:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc6_0.7
+  variables:
+    CC: gcc-6
+    CXX: g++-6
+    LD: gcc-6
+    CFLAGS: "-DMRB_USE_FLOAT=1 -DMRB_INT16=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test gcc-6 64bit_float_int16_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc6_0.7
+  variables:
+    CC: gcc-6
+    CXX: g++-6
+    LD: gcc-6
+    CFLAGS: "-DMRB_USE_FLOAT=1 -DMRB_INT16=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test gcc-6 64bit_float_int64:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc6_0.7
+  variables:
+    CC: gcc-6
+    CXX: g++-6
+    LD: gcc-6
+    CFLAGS: "-DMRB_USE_FLOAT=1 -DMRB_INT64=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test gcc-6 64bit_float_int64_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc6_0.7
+  variables:
+    CC: gcc-6
+    CXX: g++-6
+    LD: gcc-6
+    CFLAGS: "-DMRB_USE_FLOAT=1 -DMRB_INT64=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test gcc-6 64bit_float_int64_word:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc6_0.7
+  variables:
+    CC: gcc-6
+    CXX: g++-6
+    LD: gcc-6
+    CFLAGS: "-DMRB_USE_FLOAT=1 -DMRB_INT64=1 -DMRB_WORD_BOXING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test gcc-6 64bit_float_int64_word_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:gcc6_0.7
+  variables:
+    CC: gcc-6
+    CXX: g++-6
+    LD: gcc-6
+    CFLAGS: "-DMRB_USE_FLOAT=1 -DMRB_INT64=1 -DMRB_WORD_BOXING=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test clang-3.5 32bit:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang35_0.7
+  variables:
+    CC: clang-3.5
+    CXX: clang++-3.5
+    LD: clang-3.5
+    CFLAGS: "-m32 "
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test clang-3.5 32bit_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang35_0.7
+  variables:
+    CC: clang-3.5
+    CXX: clang++-3.5
+    LD: clang-3.5
+    CFLAGS: "-m32 -DMRB_UTF8_STRING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test clang-3.5 32bit_nan:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang35_0.7
+  variables:
+    CC: clang-3.5
+    CXX: clang++-3.5
+    LD: clang-3.5
+    CFLAGS: "-m32 -DMRB_NAN_BOXING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test clang-3.5 32bit_nan_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang35_0.7
+  variables:
+    CC: clang-3.5
+    CXX: clang++-3.5
+    LD: clang-3.5
+    CFLAGS: "-m32 -DMRB_NAN_BOXING=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test clang-3.5 32bit_word:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang35_0.7
+  variables:
+    CC: clang-3.5
+    CXX: clang++-3.5
+    LD: clang-3.5
+    CFLAGS: "-m32 -DMRB_WORD_BOXING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test clang-3.5 32bit_word_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang35_0.7
+  variables:
+    CC: clang-3.5
+    CXX: clang++-3.5
+    LD: clang-3.5
+    CFLAGS: "-m32 -DMRB_WORD_BOXING=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test clang-3.5 32bit_int16:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang35_0.7
+  variables:
+    CC: clang-3.5
+    CXX: clang++-3.5
+    LD: clang-3.5
+    CFLAGS: "-m32 -DMRB_INT16=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test clang-3.5 32bit_int16_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang35_0.7
+  variables:
+    CC: clang-3.5
+    CXX: clang++-3.5
+    LD: clang-3.5
+    CFLAGS: "-m32 -DMRB_INT16=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test clang-3.5 32bit_int16_nan:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang35_0.7
+  variables:
+    CC: clang-3.5
+    CXX: clang++-3.5
+    LD: clang-3.5
+    CFLAGS: "-m32 -DMRB_INT16=1 -DMRB_NAN_BOXING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test clang-3.5 32bit_int16_nan_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang35_0.7
+  variables:
+    CC: clang-3.5
+    CXX: clang++-3.5
+    LD: clang-3.5
+    CFLAGS: "-m32 -DMRB_INT16=1 -DMRB_NAN_BOXING=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test clang-3.5 32bit_int64:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang35_0.7
+  variables:
+    CC: clang-3.5
+    CXX: clang++-3.5
+    LD: clang-3.5
+    CFLAGS: "-m32 -DMRB_INT64=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test clang-3.5 32bit_int64_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang35_0.7
+  variables:
+    CC: clang-3.5
+    CXX: clang++-3.5
+    LD: clang-3.5
+    CFLAGS: "-m32 -DMRB_INT64=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test clang-3.5 32bit_float:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang35_0.7
+  variables:
+    CC: clang-3.5
+    CXX: clang++-3.5
+    LD: clang-3.5
+    CFLAGS: "-m32 -DMRB_USE_FLOAT=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test clang-3.5 32bit_float_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang35_0.7
+  variables:
+    CC: clang-3.5
+    CXX: clang++-3.5
+    LD: clang-3.5
+    CFLAGS: "-m32 -DMRB_USE_FLOAT=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test clang-3.5 32bit_float_word:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang35_0.7
+  variables:
+    CC: clang-3.5
+    CXX: clang++-3.5
+    LD: clang-3.5
+    CFLAGS: "-m32 -DMRB_USE_FLOAT=1 -DMRB_WORD_BOXING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test clang-3.5 32bit_float_word_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang35_0.7
+  variables:
+    CC: clang-3.5
+    CXX: clang++-3.5
+    LD: clang-3.5
+    CFLAGS: "-m32 -DMRB_USE_FLOAT=1 -DMRB_WORD_BOXING=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test clang-3.5 32bit_float_int16:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang35_0.7
+  variables:
+    CC: clang-3.5
+    CXX: clang++-3.5
+    LD: clang-3.5
+    CFLAGS: "-m32 -DMRB_USE_FLOAT=1 -DMRB_INT16=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test clang-3.5 32bit_float_int16_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang35_0.7
+  variables:
+    CC: clang-3.5
+    CXX: clang++-3.5
+    LD: clang-3.5
+    CFLAGS: "-m32 -DMRB_USE_FLOAT=1 -DMRB_INT16=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test clang-3.5 32bit_float_int64:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang35_0.7
+  variables:
+    CC: clang-3.5
+    CXX: clang++-3.5
+    LD: clang-3.5
+    CFLAGS: "-m32 -DMRB_USE_FLOAT=1 -DMRB_INT64=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test clang-3.5 32bit_float_int64_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang35_0.7
+  variables:
+    CC: clang-3.5
+    CXX: clang++-3.5
+    LD: clang-3.5
+    CFLAGS: "-m32 -DMRB_USE_FLOAT=1 -DMRB_INT64=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test clang-3.5 64bit:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang35_0.7
+  variables:
+    CC: clang-3.5
+    CXX: clang++-3.5
+    LD: clang-3.5
+    CFLAGS: ''
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test clang-3.5 64bit_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang35_0.7
+  variables:
+    CC: clang-3.5
+    CXX: clang++-3.5
+    LD: clang-3.5
+    CFLAGS: "-DMRB_UTF8_STRING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test clang-3.5 64bit_nan:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang35_0.7
+  variables:
+    CC: clang-3.5
+    CXX: clang++-3.5
+    LD: clang-3.5
+    CFLAGS: "-DMRB_NAN_BOXING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test clang-3.5 64bit_nan_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang35_0.7
+  variables:
+    CC: clang-3.5
+    CXX: clang++-3.5
+    LD: clang-3.5
+    CFLAGS: "-DMRB_NAN_BOXING=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test clang-3.5 64bit_word:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang35_0.7
+  variables:
+    CC: clang-3.5
+    CXX: clang++-3.5
+    LD: clang-3.5
+    CFLAGS: "-DMRB_WORD_BOXING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test clang-3.5 64bit_word_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang35_0.7
+  variables:
+    CC: clang-3.5
+    CXX: clang++-3.5
+    LD: clang-3.5
+    CFLAGS: "-DMRB_WORD_BOXING=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test clang-3.5 64bit_int16:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang35_0.7
+  variables:
+    CC: clang-3.5
+    CXX: clang++-3.5
+    LD: clang-3.5
+    CFLAGS: "-DMRB_INT16=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test clang-3.5 64bit_int16_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang35_0.7
+  variables:
+    CC: clang-3.5
+    CXX: clang++-3.5
+    LD: clang-3.5
+    CFLAGS: "-DMRB_INT16=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test clang-3.5 64bit_int16_nan:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang35_0.7
+  variables:
+    CC: clang-3.5
+    CXX: clang++-3.5
+    LD: clang-3.5
+    CFLAGS: "-DMRB_INT16=1 -DMRB_NAN_BOXING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test clang-3.5 64bit_int16_nan_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang35_0.7
+  variables:
+    CC: clang-3.5
+    CXX: clang++-3.5
+    LD: clang-3.5
+    CFLAGS: "-DMRB_INT16=1 -DMRB_NAN_BOXING=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test clang-3.5 64bit_int64:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang35_0.7
+  variables:
+    CC: clang-3.5
+    CXX: clang++-3.5
+    LD: clang-3.5
+    CFLAGS: "-DMRB_INT64=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test clang-3.5 64bit_int64_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang35_0.7
+  variables:
+    CC: clang-3.5
+    CXX: clang++-3.5
+    LD: clang-3.5
+    CFLAGS: "-DMRB_INT64=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test clang-3.5 64bit_int64_word:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang35_0.7
+  variables:
+    CC: clang-3.5
+    CXX: clang++-3.5
+    LD: clang-3.5
+    CFLAGS: "-DMRB_INT64=1 -DMRB_WORD_BOXING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test clang-3.5 64bit_int64_word_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang35_0.7
+  variables:
+    CC: clang-3.5
+    CXX: clang++-3.5
+    LD: clang-3.5
+    CFLAGS: "-DMRB_INT64=1 -DMRB_WORD_BOXING=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test clang-3.5 64bit_float:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang35_0.7
+  variables:
+    CC: clang-3.5
+    CXX: clang++-3.5
+    LD: clang-3.5
+    CFLAGS: "-DMRB_USE_FLOAT=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test clang-3.5 64bit_float_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang35_0.7
+  variables:
+    CC: clang-3.5
+    CXX: clang++-3.5
+    LD: clang-3.5
+    CFLAGS: "-DMRB_USE_FLOAT=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test clang-3.5 64bit_float_word:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang35_0.7
+  variables:
+    CC: clang-3.5
+    CXX: clang++-3.5
+    LD: clang-3.5
+    CFLAGS: "-DMRB_USE_FLOAT=1 -DMRB_WORD_BOXING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test clang-3.5 64bit_float_word_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang35_0.7
+  variables:
+    CC: clang-3.5
+    CXX: clang++-3.5
+    LD: clang-3.5
+    CFLAGS: "-DMRB_USE_FLOAT=1 -DMRB_WORD_BOXING=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test clang-3.5 64bit_float_int16:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang35_0.7
+  variables:
+    CC: clang-3.5
+    CXX: clang++-3.5
+    LD: clang-3.5
+    CFLAGS: "-DMRB_USE_FLOAT=1 -DMRB_INT16=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test clang-3.5 64bit_float_int16_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang35_0.7
+  variables:
+    CC: clang-3.5
+    CXX: clang++-3.5
+    LD: clang-3.5
+    CFLAGS: "-DMRB_USE_FLOAT=1 -DMRB_INT16=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test clang-3.5 64bit_float_int64:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang35_0.7
+  variables:
+    CC: clang-3.5
+    CXX: clang++-3.5
+    LD: clang-3.5
+    CFLAGS: "-DMRB_USE_FLOAT=1 -DMRB_INT64=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test clang-3.5 64bit_float_int64_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang35_0.7
+  variables:
+    CC: clang-3.5
+    CXX: clang++-3.5
+    LD: clang-3.5
+    CFLAGS: "-DMRB_USE_FLOAT=1 -DMRB_INT64=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test clang-3.5 64bit_float_int64_word:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang35_0.7
+  variables:
+    CC: clang-3.5
+    CXX: clang++-3.5
+    LD: clang-3.5
+    CFLAGS: "-DMRB_USE_FLOAT=1 -DMRB_INT64=1 -DMRB_WORD_BOXING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test clang-3.5 64bit_float_int64_word_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang35_0.7
+  variables:
+    CC: clang-3.5
+    CXX: clang++-3.5
+    LD: clang-3.5
+    CFLAGS: "-DMRB_USE_FLOAT=1 -DMRB_INT64=1 -DMRB_WORD_BOXING=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test clang-3.6 32bit:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang36_0.7
+  variables:
+    CC: clang-3.6
+    CXX: clang++-3.6
+    LD: clang-3.6
+    CFLAGS: "-m32 "
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test clang-3.6 32bit_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang36_0.7
+  variables:
+    CC: clang-3.6
+    CXX: clang++-3.6
+    LD: clang-3.6
+    CFLAGS: "-m32 -DMRB_UTF8_STRING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test clang-3.6 32bit_nan:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang36_0.7
+  variables:
+    CC: clang-3.6
+    CXX: clang++-3.6
+    LD: clang-3.6
+    CFLAGS: "-m32 -DMRB_NAN_BOXING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test clang-3.6 32bit_nan_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang36_0.7
+  variables:
+    CC: clang-3.6
+    CXX: clang++-3.6
+    LD: clang-3.6
+    CFLAGS: "-m32 -DMRB_NAN_BOXING=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test clang-3.6 32bit_word:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang36_0.7
+  variables:
+    CC: clang-3.6
+    CXX: clang++-3.6
+    LD: clang-3.6
+    CFLAGS: "-m32 -DMRB_WORD_BOXING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test clang-3.6 32bit_word_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang36_0.7
+  variables:
+    CC: clang-3.6
+    CXX: clang++-3.6
+    LD: clang-3.6
+    CFLAGS: "-m32 -DMRB_WORD_BOXING=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test clang-3.6 32bit_int16:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang36_0.7
+  variables:
+    CC: clang-3.6
+    CXX: clang++-3.6
+    LD: clang-3.6
+    CFLAGS: "-m32 -DMRB_INT16=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test clang-3.6 32bit_int16_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang36_0.7
+  variables:
+    CC: clang-3.6
+    CXX: clang++-3.6
+    LD: clang-3.6
+    CFLAGS: "-m32 -DMRB_INT16=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test clang-3.6 32bit_int16_nan:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang36_0.7
+  variables:
+    CC: clang-3.6
+    CXX: clang++-3.6
+    LD: clang-3.6
+    CFLAGS: "-m32 -DMRB_INT16=1 -DMRB_NAN_BOXING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test clang-3.6 32bit_int16_nan_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang36_0.7
+  variables:
+    CC: clang-3.6
+    CXX: clang++-3.6
+    LD: clang-3.6
+    CFLAGS: "-m32 -DMRB_INT16=1 -DMRB_NAN_BOXING=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test clang-3.6 32bit_int64:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang36_0.7
+  variables:
+    CC: clang-3.6
+    CXX: clang++-3.6
+    LD: clang-3.6
+    CFLAGS: "-m32 -DMRB_INT64=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test clang-3.6 32bit_int64_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang36_0.7
+  variables:
+    CC: clang-3.6
+    CXX: clang++-3.6
+    LD: clang-3.6
+    CFLAGS: "-m32 -DMRB_INT64=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test clang-3.6 32bit_float:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang36_0.7
+  variables:
+    CC: clang-3.6
+    CXX: clang++-3.6
+    LD: clang-3.6
+    CFLAGS: "-m32 -DMRB_USE_FLOAT=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test clang-3.6 32bit_float_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang36_0.7
+  variables:
+    CC: clang-3.6
+    CXX: clang++-3.6
+    LD: clang-3.6
+    CFLAGS: "-m32 -DMRB_USE_FLOAT=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test clang-3.6 32bit_float_word:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang36_0.7
+  variables:
+    CC: clang-3.6
+    CXX: clang++-3.6
+    LD: clang-3.6
+    CFLAGS: "-m32 -DMRB_USE_FLOAT=1 -DMRB_WORD_BOXING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test clang-3.6 32bit_float_word_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang36_0.7
+  variables:
+    CC: clang-3.6
+    CXX: clang++-3.6
+    LD: clang-3.6
+    CFLAGS: "-m32 -DMRB_USE_FLOAT=1 -DMRB_WORD_BOXING=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test clang-3.6 32bit_float_int16:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang36_0.7
+  variables:
+    CC: clang-3.6
+    CXX: clang++-3.6
+    LD: clang-3.6
+    CFLAGS: "-m32 -DMRB_USE_FLOAT=1 -DMRB_INT16=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test clang-3.6 32bit_float_int16_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang36_0.7
+  variables:
+    CC: clang-3.6
+    CXX: clang++-3.6
+    LD: clang-3.6
+    CFLAGS: "-m32 -DMRB_USE_FLOAT=1 -DMRB_INT16=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test clang-3.6 32bit_float_int64:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang36_0.7
+  variables:
+    CC: clang-3.6
+    CXX: clang++-3.6
+    LD: clang-3.6
+    CFLAGS: "-m32 -DMRB_USE_FLOAT=1 -DMRB_INT64=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test clang-3.6 32bit_float_int64_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang36_0.7
+  variables:
+    CC: clang-3.6
+    CXX: clang++-3.6
+    LD: clang-3.6
+    CFLAGS: "-m32 -DMRB_USE_FLOAT=1 -DMRB_INT64=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test clang-3.6 64bit:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang36_0.7
+  variables:
+    CC: clang-3.6
+    CXX: clang++-3.6
+    LD: clang-3.6
+    CFLAGS: ''
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test clang-3.6 64bit_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang36_0.7
+  variables:
+    CC: clang-3.6
+    CXX: clang++-3.6
+    LD: clang-3.6
+    CFLAGS: "-DMRB_UTF8_STRING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test clang-3.6 64bit_nan:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang36_0.7
+  variables:
+    CC: clang-3.6
+    CXX: clang++-3.6
+    LD: clang-3.6
+    CFLAGS: "-DMRB_NAN_BOXING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test clang-3.6 64bit_nan_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang36_0.7
+  variables:
+    CC: clang-3.6
+    CXX: clang++-3.6
+    LD: clang-3.6
+    CFLAGS: "-DMRB_NAN_BOXING=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test clang-3.6 64bit_word:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang36_0.7
+  variables:
+    CC: clang-3.6
+    CXX: clang++-3.6
+    LD: clang-3.6
+    CFLAGS: "-DMRB_WORD_BOXING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test clang-3.6 64bit_word_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang36_0.7
+  variables:
+    CC: clang-3.6
+    CXX: clang++-3.6
+    LD: clang-3.6
+    CFLAGS: "-DMRB_WORD_BOXING=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test clang-3.6 64bit_int16:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang36_0.7
+  variables:
+    CC: clang-3.6
+    CXX: clang++-3.6
+    LD: clang-3.6
+    CFLAGS: "-DMRB_INT16=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test clang-3.6 64bit_int16_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang36_0.7
+  variables:
+    CC: clang-3.6
+    CXX: clang++-3.6
+    LD: clang-3.6
+    CFLAGS: "-DMRB_INT16=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test clang-3.6 64bit_int16_nan:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang36_0.7
+  variables:
+    CC: clang-3.6
+    CXX: clang++-3.6
+    LD: clang-3.6
+    CFLAGS: "-DMRB_INT16=1 -DMRB_NAN_BOXING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test clang-3.6 64bit_int16_nan_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang36_0.7
+  variables:
+    CC: clang-3.6
+    CXX: clang++-3.6
+    LD: clang-3.6
+    CFLAGS: "-DMRB_INT16=1 -DMRB_NAN_BOXING=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test clang-3.6 64bit_int64:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang36_0.7
+  variables:
+    CC: clang-3.6
+    CXX: clang++-3.6
+    LD: clang-3.6
+    CFLAGS: "-DMRB_INT64=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test clang-3.6 64bit_int64_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang36_0.7
+  variables:
+    CC: clang-3.6
+    CXX: clang++-3.6
+    LD: clang-3.6
+    CFLAGS: "-DMRB_INT64=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test clang-3.6 64bit_int64_word:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang36_0.7
+  variables:
+    CC: clang-3.6
+    CXX: clang++-3.6
+    LD: clang-3.6
+    CFLAGS: "-DMRB_INT64=1 -DMRB_WORD_BOXING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test clang-3.6 64bit_int64_word_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang36_0.7
+  variables:
+    CC: clang-3.6
+    CXX: clang++-3.6
+    LD: clang-3.6
+    CFLAGS: "-DMRB_INT64=1 -DMRB_WORD_BOXING=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test clang-3.6 64bit_float:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang36_0.7
+  variables:
+    CC: clang-3.6
+    CXX: clang++-3.6
+    LD: clang-3.6
+    CFLAGS: "-DMRB_USE_FLOAT=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test clang-3.6 64bit_float_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang36_0.7
+  variables:
+    CC: clang-3.6
+    CXX: clang++-3.6
+    LD: clang-3.6
+    CFLAGS: "-DMRB_USE_FLOAT=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test clang-3.6 64bit_float_word:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang36_0.7
+  variables:
+    CC: clang-3.6
+    CXX: clang++-3.6
+    LD: clang-3.6
+    CFLAGS: "-DMRB_USE_FLOAT=1 -DMRB_WORD_BOXING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test clang-3.6 64bit_float_word_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang36_0.7
+  variables:
+    CC: clang-3.6
+    CXX: clang++-3.6
+    LD: clang-3.6
+    CFLAGS: "-DMRB_USE_FLOAT=1 -DMRB_WORD_BOXING=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test clang-3.6 64bit_float_int16:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang36_0.7
+  variables:
+    CC: clang-3.6
+    CXX: clang++-3.6
+    LD: clang-3.6
+    CFLAGS: "-DMRB_USE_FLOAT=1 -DMRB_INT16=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test clang-3.6 64bit_float_int16_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang36_0.7
+  variables:
+    CC: clang-3.6
+    CXX: clang++-3.6
+    LD: clang-3.6
+    CFLAGS: "-DMRB_USE_FLOAT=1 -DMRB_INT16=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test clang-3.6 64bit_float_int64:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang36_0.7
+  variables:
+    CC: clang-3.6
+    CXX: clang++-3.6
+    LD: clang-3.6
+    CFLAGS: "-DMRB_USE_FLOAT=1 -DMRB_INT64=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test clang-3.6 64bit_float_int64_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang36_0.7
+  variables:
+    CC: clang-3.6
+    CXX: clang++-3.6
+    LD: clang-3.6
+    CFLAGS: "-DMRB_USE_FLOAT=1 -DMRB_INT64=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test clang-3.6 64bit_float_int64_word:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang36_0.7
+  variables:
+    CC: clang-3.6
+    CXX: clang++-3.6
+    LD: clang-3.6
+    CFLAGS: "-DMRB_USE_FLOAT=1 -DMRB_INT64=1 -DMRB_WORD_BOXING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test clang-3.6 64bit_float_int64_word_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang36_0.7
+  variables:
+    CC: clang-3.6
+    CXX: clang++-3.6
+    LD: clang-3.6
+    CFLAGS: "-DMRB_USE_FLOAT=1 -DMRB_INT64=1 -DMRB_WORD_BOXING=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test clang-3.7 32bit:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang37_0.7
+  variables:
+    CC: clang-3.7
+    CXX: clang++-3.7
+    LD: clang-3.7
+    CFLAGS: "-m32 "
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test clang-3.7 32bit_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang37_0.7
+  variables:
+    CC: clang-3.7
+    CXX: clang++-3.7
+    LD: clang-3.7
+    CFLAGS: "-m32 -DMRB_UTF8_STRING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test clang-3.7 32bit_nan:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang37_0.7
+  variables:
+    CC: clang-3.7
+    CXX: clang++-3.7
+    LD: clang-3.7
+    CFLAGS: "-m32 -DMRB_NAN_BOXING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test clang-3.7 32bit_nan_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang37_0.7
+  variables:
+    CC: clang-3.7
+    CXX: clang++-3.7
+    LD: clang-3.7
+    CFLAGS: "-m32 -DMRB_NAN_BOXING=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test clang-3.7 32bit_word:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang37_0.7
+  variables:
+    CC: clang-3.7
+    CXX: clang++-3.7
+    LD: clang-3.7
+    CFLAGS: "-m32 -DMRB_WORD_BOXING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test clang-3.7 32bit_word_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang37_0.7
+  variables:
+    CC: clang-3.7
+    CXX: clang++-3.7
+    LD: clang-3.7
+    CFLAGS: "-m32 -DMRB_WORD_BOXING=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test clang-3.7 32bit_int16:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang37_0.7
+  variables:
+    CC: clang-3.7
+    CXX: clang++-3.7
+    LD: clang-3.7
+    CFLAGS: "-m32 -DMRB_INT16=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test clang-3.7 32bit_int16_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang37_0.7
+  variables:
+    CC: clang-3.7
+    CXX: clang++-3.7
+    LD: clang-3.7
+    CFLAGS: "-m32 -DMRB_INT16=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test clang-3.7 32bit_int16_nan:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang37_0.7
+  variables:
+    CC: clang-3.7
+    CXX: clang++-3.7
+    LD: clang-3.7
+    CFLAGS: "-m32 -DMRB_INT16=1 -DMRB_NAN_BOXING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test clang-3.7 32bit_int16_nan_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang37_0.7
+  variables:
+    CC: clang-3.7
+    CXX: clang++-3.7
+    LD: clang-3.7
+    CFLAGS: "-m32 -DMRB_INT16=1 -DMRB_NAN_BOXING=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test clang-3.7 32bit_int64:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang37_0.7
+  variables:
+    CC: clang-3.7
+    CXX: clang++-3.7
+    LD: clang-3.7
+    CFLAGS: "-m32 -DMRB_INT64=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test clang-3.7 32bit_int64_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang37_0.7
+  variables:
+    CC: clang-3.7
+    CXX: clang++-3.7
+    LD: clang-3.7
+    CFLAGS: "-m32 -DMRB_INT64=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test clang-3.7 32bit_float:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang37_0.7
+  variables:
+    CC: clang-3.7
+    CXX: clang++-3.7
+    LD: clang-3.7
+    CFLAGS: "-m32 -DMRB_USE_FLOAT=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test clang-3.7 32bit_float_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang37_0.7
+  variables:
+    CC: clang-3.7
+    CXX: clang++-3.7
+    LD: clang-3.7
+    CFLAGS: "-m32 -DMRB_USE_FLOAT=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test clang-3.7 32bit_float_word:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang37_0.7
+  variables:
+    CC: clang-3.7
+    CXX: clang++-3.7
+    LD: clang-3.7
+    CFLAGS: "-m32 -DMRB_USE_FLOAT=1 -DMRB_WORD_BOXING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test clang-3.7 32bit_float_word_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang37_0.7
+  variables:
+    CC: clang-3.7
+    CXX: clang++-3.7
+    LD: clang-3.7
+    CFLAGS: "-m32 -DMRB_USE_FLOAT=1 -DMRB_WORD_BOXING=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test clang-3.7 32bit_float_int16:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang37_0.7
+  variables:
+    CC: clang-3.7
+    CXX: clang++-3.7
+    LD: clang-3.7
+    CFLAGS: "-m32 -DMRB_USE_FLOAT=1 -DMRB_INT16=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test clang-3.7 32bit_float_int16_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang37_0.7
+  variables:
+    CC: clang-3.7
+    CXX: clang++-3.7
+    LD: clang-3.7
+    CFLAGS: "-m32 -DMRB_USE_FLOAT=1 -DMRB_INT16=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test clang-3.7 32bit_float_int64:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang37_0.7
+  variables:
+    CC: clang-3.7
+    CXX: clang++-3.7
+    LD: clang-3.7
+    CFLAGS: "-m32 -DMRB_USE_FLOAT=1 -DMRB_INT64=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test clang-3.7 32bit_float_int64_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang37_0.7
+  variables:
+    CC: clang-3.7
+    CXX: clang++-3.7
+    LD: clang-3.7
+    CFLAGS: "-m32 -DMRB_USE_FLOAT=1 -DMRB_INT64=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test clang-3.7 64bit:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang37_0.7
+  variables:
+    CC: clang-3.7
+    CXX: clang++-3.7
+    LD: clang-3.7
+    CFLAGS: ''
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test clang-3.7 64bit_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang37_0.7
+  variables:
+    CC: clang-3.7
+    CXX: clang++-3.7
+    LD: clang-3.7
+    CFLAGS: "-DMRB_UTF8_STRING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test clang-3.7 64bit_nan:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang37_0.7
+  variables:
+    CC: clang-3.7
+    CXX: clang++-3.7
+    LD: clang-3.7
+    CFLAGS: "-DMRB_NAN_BOXING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test clang-3.7 64bit_nan_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang37_0.7
+  variables:
+    CC: clang-3.7
+    CXX: clang++-3.7
+    LD: clang-3.7
+    CFLAGS: "-DMRB_NAN_BOXING=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test clang-3.7 64bit_word:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang37_0.7
+  variables:
+    CC: clang-3.7
+    CXX: clang++-3.7
+    LD: clang-3.7
+    CFLAGS: "-DMRB_WORD_BOXING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test clang-3.7 64bit_word_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang37_0.7
+  variables:
+    CC: clang-3.7
+    CXX: clang++-3.7
+    LD: clang-3.7
+    CFLAGS: "-DMRB_WORD_BOXING=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test clang-3.7 64bit_int16:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang37_0.7
+  variables:
+    CC: clang-3.7
+    CXX: clang++-3.7
+    LD: clang-3.7
+    CFLAGS: "-DMRB_INT16=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test clang-3.7 64bit_int16_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang37_0.7
+  variables:
+    CC: clang-3.7
+    CXX: clang++-3.7
+    LD: clang-3.7
+    CFLAGS: "-DMRB_INT16=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test clang-3.7 64bit_int16_nan:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang37_0.7
+  variables:
+    CC: clang-3.7
+    CXX: clang++-3.7
+    LD: clang-3.7
+    CFLAGS: "-DMRB_INT16=1 -DMRB_NAN_BOXING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test clang-3.7 64bit_int16_nan_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang37_0.7
+  variables:
+    CC: clang-3.7
+    CXX: clang++-3.7
+    LD: clang-3.7
+    CFLAGS: "-DMRB_INT16=1 -DMRB_NAN_BOXING=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test clang-3.7 64bit_int64:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang37_0.7
+  variables:
+    CC: clang-3.7
+    CXX: clang++-3.7
+    LD: clang-3.7
+    CFLAGS: "-DMRB_INT64=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test clang-3.7 64bit_int64_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang37_0.7
+  variables:
+    CC: clang-3.7
+    CXX: clang++-3.7
+    LD: clang-3.7
+    CFLAGS: "-DMRB_INT64=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test clang-3.7 64bit_int64_word:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang37_0.7
+  variables:
+    CC: clang-3.7
+    CXX: clang++-3.7
+    LD: clang-3.7
+    CFLAGS: "-DMRB_INT64=1 -DMRB_WORD_BOXING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test clang-3.7 64bit_int64_word_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang37_0.7
+  variables:
+    CC: clang-3.7
+    CXX: clang++-3.7
+    LD: clang-3.7
+    CFLAGS: "-DMRB_INT64=1 -DMRB_WORD_BOXING=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test clang-3.7 64bit_float:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang37_0.7
+  variables:
+    CC: clang-3.7
+    CXX: clang++-3.7
+    LD: clang-3.7
+    CFLAGS: "-DMRB_USE_FLOAT=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test clang-3.7 64bit_float_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang37_0.7
+  variables:
+    CC: clang-3.7
+    CXX: clang++-3.7
+    LD: clang-3.7
+    CFLAGS: "-DMRB_USE_FLOAT=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test clang-3.7 64bit_float_word:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang37_0.7
+  variables:
+    CC: clang-3.7
+    CXX: clang++-3.7
+    LD: clang-3.7
+    CFLAGS: "-DMRB_USE_FLOAT=1 -DMRB_WORD_BOXING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test clang-3.7 64bit_float_word_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang37_0.7
+  variables:
+    CC: clang-3.7
+    CXX: clang++-3.7
+    LD: clang-3.7
+    CFLAGS: "-DMRB_USE_FLOAT=1 -DMRB_WORD_BOXING=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test clang-3.7 64bit_float_int16:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang37_0.7
+  variables:
+    CC: clang-3.7
+    CXX: clang++-3.7
+    LD: clang-3.7
+    CFLAGS: "-DMRB_USE_FLOAT=1 -DMRB_INT16=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test clang-3.7 64bit_float_int16_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang37_0.7
+  variables:
+    CC: clang-3.7
+    CXX: clang++-3.7
+    LD: clang-3.7
+    CFLAGS: "-DMRB_USE_FLOAT=1 -DMRB_INT16=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test clang-3.7 64bit_float_int64:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang37_0.7
+  variables:
+    CC: clang-3.7
+    CXX: clang++-3.7
+    LD: clang-3.7
+    CFLAGS: "-DMRB_USE_FLOAT=1 -DMRB_INT64=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test clang-3.7 64bit_float_int64_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang37_0.7
+  variables:
+    CC: clang-3.7
+    CXX: clang++-3.7
+    LD: clang-3.7
+    CFLAGS: "-DMRB_USE_FLOAT=1 -DMRB_INT64=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test clang-3.7 64bit_float_int64_word:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang37_0.7
+  variables:
+    CC: clang-3.7
+    CXX: clang++-3.7
+    LD: clang-3.7
+    CFLAGS: "-DMRB_USE_FLOAT=1 -DMRB_INT64=1 -DMRB_WORD_BOXING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test clang-3.7 64bit_float_int64_word_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang37_0.7
+  variables:
+    CC: clang-3.7
+    CXX: clang++-3.7
+    LD: clang-3.7
+    CFLAGS: "-DMRB_USE_FLOAT=1 -DMRB_INT64=1 -DMRB_WORD_BOXING=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test clang-3.8 32bit:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang38_0.7
+  variables:
+    CC: clang-3.8
+    CXX: clang++-3.8
+    LD: clang-3.8
+    CFLAGS: "-m32 "
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test clang-3.8 32bit_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang38_0.7
+  variables:
+    CC: clang-3.8
+    CXX: clang++-3.8
+    LD: clang-3.8
+    CFLAGS: "-m32 -DMRB_UTF8_STRING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test clang-3.8 32bit_nan:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang38_0.7
+  variables:
+    CC: clang-3.8
+    CXX: clang++-3.8
+    LD: clang-3.8
+    CFLAGS: "-m32 -DMRB_NAN_BOXING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test clang-3.8 32bit_nan_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang38_0.7
+  variables:
+    CC: clang-3.8
+    CXX: clang++-3.8
+    LD: clang-3.8
+    CFLAGS: "-m32 -DMRB_NAN_BOXING=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test clang-3.8 32bit_word:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang38_0.7
+  variables:
+    CC: clang-3.8
+    CXX: clang++-3.8
+    LD: clang-3.8
+    CFLAGS: "-m32 -DMRB_WORD_BOXING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test clang-3.8 32bit_word_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang38_0.7
+  variables:
+    CC: clang-3.8
+    CXX: clang++-3.8
+    LD: clang-3.8
+    CFLAGS: "-m32 -DMRB_WORD_BOXING=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test clang-3.8 32bit_int16:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang38_0.7
+  variables:
+    CC: clang-3.8
+    CXX: clang++-3.8
+    LD: clang-3.8
+    CFLAGS: "-m32 -DMRB_INT16=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test clang-3.8 32bit_int16_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang38_0.7
+  variables:
+    CC: clang-3.8
+    CXX: clang++-3.8
+    LD: clang-3.8
+    CFLAGS: "-m32 -DMRB_INT16=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test clang-3.8 32bit_int16_nan:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang38_0.7
+  variables:
+    CC: clang-3.8
+    CXX: clang++-3.8
+    LD: clang-3.8
+    CFLAGS: "-m32 -DMRB_INT16=1 -DMRB_NAN_BOXING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test clang-3.8 32bit_int16_nan_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang38_0.7
+  variables:
+    CC: clang-3.8
+    CXX: clang++-3.8
+    LD: clang-3.8
+    CFLAGS: "-m32 -DMRB_INT16=1 -DMRB_NAN_BOXING=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test clang-3.8 32bit_int64:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang38_0.7
+  variables:
+    CC: clang-3.8
+    CXX: clang++-3.8
+    LD: clang-3.8
+    CFLAGS: "-m32 -DMRB_INT64=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test clang-3.8 32bit_int64_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang38_0.7
+  variables:
+    CC: clang-3.8
+    CXX: clang++-3.8
+    LD: clang-3.8
+    CFLAGS: "-m32 -DMRB_INT64=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test clang-3.8 32bit_float:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang38_0.7
+  variables:
+    CC: clang-3.8
+    CXX: clang++-3.8
+    LD: clang-3.8
+    CFLAGS: "-m32 -DMRB_USE_FLOAT=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test clang-3.8 32bit_float_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang38_0.7
+  variables:
+    CC: clang-3.8
+    CXX: clang++-3.8
+    LD: clang-3.8
+    CFLAGS: "-m32 -DMRB_USE_FLOAT=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test clang-3.8 32bit_float_word:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang38_0.7
+  variables:
+    CC: clang-3.8
+    CXX: clang++-3.8
+    LD: clang-3.8
+    CFLAGS: "-m32 -DMRB_USE_FLOAT=1 -DMRB_WORD_BOXING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test clang-3.8 32bit_float_word_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang38_0.7
+  variables:
+    CC: clang-3.8
+    CXX: clang++-3.8
+    LD: clang-3.8
+    CFLAGS: "-m32 -DMRB_USE_FLOAT=1 -DMRB_WORD_BOXING=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test clang-3.8 32bit_float_int16:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang38_0.7
+  variables:
+    CC: clang-3.8
+    CXX: clang++-3.8
+    LD: clang-3.8
+    CFLAGS: "-m32 -DMRB_USE_FLOAT=1 -DMRB_INT16=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test clang-3.8 32bit_float_int16_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang38_0.7
+  variables:
+    CC: clang-3.8
+    CXX: clang++-3.8
+    LD: clang-3.8
+    CFLAGS: "-m32 -DMRB_USE_FLOAT=1 -DMRB_INT16=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test clang-3.8 32bit_float_int64:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang38_0.7
+  variables:
+    CC: clang-3.8
+    CXX: clang++-3.8
+    LD: clang-3.8
+    CFLAGS: "-m32 -DMRB_USE_FLOAT=1 -DMRB_INT64=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test clang-3.8 32bit_float_int64_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang38_0.7
+  variables:
+    CC: clang-3.8
+    CXX: clang++-3.8
+    LD: clang-3.8
+    CFLAGS: "-m32 -DMRB_USE_FLOAT=1 -DMRB_INT64=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test clang-3.8 64bit:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang38_0.7
+  variables:
+    CC: clang-3.8
+    CXX: clang++-3.8
+    LD: clang-3.8
+    CFLAGS: ''
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test clang-3.8 64bit_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang38_0.7
+  variables:
+    CC: clang-3.8
+    CXX: clang++-3.8
+    LD: clang-3.8
+    CFLAGS: "-DMRB_UTF8_STRING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test clang-3.8 64bit_nan:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang38_0.7
+  variables:
+    CC: clang-3.8
+    CXX: clang++-3.8
+    LD: clang-3.8
+    CFLAGS: "-DMRB_NAN_BOXING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test clang-3.8 64bit_nan_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang38_0.7
+  variables:
+    CC: clang-3.8
+    CXX: clang++-3.8
+    LD: clang-3.8
+    CFLAGS: "-DMRB_NAN_BOXING=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test clang-3.8 64bit_word:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang38_0.7
+  variables:
+    CC: clang-3.8
+    CXX: clang++-3.8
+    LD: clang-3.8
+    CFLAGS: "-DMRB_WORD_BOXING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test clang-3.8 64bit_word_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang38_0.7
+  variables:
+    CC: clang-3.8
+    CXX: clang++-3.8
+    LD: clang-3.8
+    CFLAGS: "-DMRB_WORD_BOXING=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test clang-3.8 64bit_int16:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang38_0.7
+  variables:
+    CC: clang-3.8
+    CXX: clang++-3.8
+    LD: clang-3.8
+    CFLAGS: "-DMRB_INT16=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test clang-3.8 64bit_int16_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang38_0.7
+  variables:
+    CC: clang-3.8
+    CXX: clang++-3.8
+    LD: clang-3.8
+    CFLAGS: "-DMRB_INT16=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test clang-3.8 64bit_int16_nan:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang38_0.7
+  variables:
+    CC: clang-3.8
+    CXX: clang++-3.8
+    LD: clang-3.8
+    CFLAGS: "-DMRB_INT16=1 -DMRB_NAN_BOXING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test clang-3.8 64bit_int16_nan_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang38_0.7
+  variables:
+    CC: clang-3.8
+    CXX: clang++-3.8
+    LD: clang-3.8
+    CFLAGS: "-DMRB_INT16=1 -DMRB_NAN_BOXING=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test clang-3.8 64bit_int64:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang38_0.7
+  variables:
+    CC: clang-3.8
+    CXX: clang++-3.8
+    LD: clang-3.8
+    CFLAGS: "-DMRB_INT64=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test clang-3.8 64bit_int64_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang38_0.7
+  variables:
+    CC: clang-3.8
+    CXX: clang++-3.8
+    LD: clang-3.8
+    CFLAGS: "-DMRB_INT64=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test clang-3.8 64bit_int64_word:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang38_0.7
+  variables:
+    CC: clang-3.8
+    CXX: clang++-3.8
+    LD: clang-3.8
+    CFLAGS: "-DMRB_INT64=1 -DMRB_WORD_BOXING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test clang-3.8 64bit_int64_word_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang38_0.7
+  variables:
+    CC: clang-3.8
+    CXX: clang++-3.8
+    LD: clang-3.8
+    CFLAGS: "-DMRB_INT64=1 -DMRB_WORD_BOXING=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test clang-3.8 64bit_float:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang38_0.7
+  variables:
+    CC: clang-3.8
+    CXX: clang++-3.8
+    LD: clang-3.8
+    CFLAGS: "-DMRB_USE_FLOAT=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test clang-3.8 64bit_float_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang38_0.7
+  variables:
+    CC: clang-3.8
+    CXX: clang++-3.8
+    LD: clang-3.8
+    CFLAGS: "-DMRB_USE_FLOAT=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test clang-3.8 64bit_float_word:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang38_0.7
+  variables:
+    CC: clang-3.8
+    CXX: clang++-3.8
+    LD: clang-3.8
+    CFLAGS: "-DMRB_USE_FLOAT=1 -DMRB_WORD_BOXING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test clang-3.8 64bit_float_word_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang38_0.7
+  variables:
+    CC: clang-3.8
+    CXX: clang++-3.8
+    LD: clang-3.8
+    CFLAGS: "-DMRB_USE_FLOAT=1 -DMRB_WORD_BOXING=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test clang-3.8 64bit_float_int16:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang38_0.7
+  variables:
+    CC: clang-3.8
+    CXX: clang++-3.8
+    LD: clang-3.8
+    CFLAGS: "-DMRB_USE_FLOAT=1 -DMRB_INT16=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test clang-3.8 64bit_float_int16_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang38_0.7
+  variables:
+    CC: clang-3.8
+    CXX: clang++-3.8
+    LD: clang-3.8
+    CFLAGS: "-DMRB_USE_FLOAT=1 -DMRB_INT16=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test clang-3.8 64bit_float_int64:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang38_0.7
+  variables:
+    CC: clang-3.8
+    CXX: clang++-3.8
+    LD: clang-3.8
+    CFLAGS: "-DMRB_USE_FLOAT=1 -DMRB_INT64=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test clang-3.8 64bit_float_int64_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang38_0.7
+  variables:
+    CC: clang-3.8
+    CXX: clang++-3.8
+    LD: clang-3.8
+    CFLAGS: "-DMRB_USE_FLOAT=1 -DMRB_INT64=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test clang-3.8 64bit_float_int64_word:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang38_0.7
+  variables:
+    CC: clang-3.8
+    CXX: clang++-3.8
+    LD: clang-3.8
+    CFLAGS: "-DMRB_USE_FLOAT=1 -DMRB_INT64=1 -DMRB_WORD_BOXING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test clang-3.8 64bit_float_int64_word_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang38_0.7
+  variables:
+    CC: clang-3.8
+    CXX: clang++-3.8
+    LD: clang-3.8
+    CFLAGS: "-DMRB_USE_FLOAT=1 -DMRB_INT64=1 -DMRB_WORD_BOXING=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test clang-3.9 32bit:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang39_0.7
+  variables:
+    CC: clang-3.9
+    CXX: clang++-3.9
+    LD: clang-3.9
+    CFLAGS: "-m32 "
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test clang-3.9 32bit_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang39_0.7
+  variables:
+    CC: clang-3.9
+    CXX: clang++-3.9
+    LD: clang-3.9
+    CFLAGS: "-m32 -DMRB_UTF8_STRING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test clang-3.9 32bit_nan:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang39_0.7
+  variables:
+    CC: clang-3.9
+    CXX: clang++-3.9
+    LD: clang-3.9
+    CFLAGS: "-m32 -DMRB_NAN_BOXING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test clang-3.9 32bit_nan_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang39_0.7
+  variables:
+    CC: clang-3.9
+    CXX: clang++-3.9
+    LD: clang-3.9
+    CFLAGS: "-m32 -DMRB_NAN_BOXING=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test clang-3.9 32bit_word:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang39_0.7
+  variables:
+    CC: clang-3.9
+    CXX: clang++-3.9
+    LD: clang-3.9
+    CFLAGS: "-m32 -DMRB_WORD_BOXING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test clang-3.9 32bit_word_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang39_0.7
+  variables:
+    CC: clang-3.9
+    CXX: clang++-3.9
+    LD: clang-3.9
+    CFLAGS: "-m32 -DMRB_WORD_BOXING=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test clang-3.9 32bit_int16:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang39_0.7
+  variables:
+    CC: clang-3.9
+    CXX: clang++-3.9
+    LD: clang-3.9
+    CFLAGS: "-m32 -DMRB_INT16=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test clang-3.9 32bit_int16_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang39_0.7
+  variables:
+    CC: clang-3.9
+    CXX: clang++-3.9
+    LD: clang-3.9
+    CFLAGS: "-m32 -DMRB_INT16=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test clang-3.9 32bit_int16_nan:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang39_0.7
+  variables:
+    CC: clang-3.9
+    CXX: clang++-3.9
+    LD: clang-3.9
+    CFLAGS: "-m32 -DMRB_INT16=1 -DMRB_NAN_BOXING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test clang-3.9 32bit_int16_nan_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang39_0.7
+  variables:
+    CC: clang-3.9
+    CXX: clang++-3.9
+    LD: clang-3.9
+    CFLAGS: "-m32 -DMRB_INT16=1 -DMRB_NAN_BOXING=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test clang-3.9 32bit_int64:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang39_0.7
+  variables:
+    CC: clang-3.9
+    CXX: clang++-3.9
+    LD: clang-3.9
+    CFLAGS: "-m32 -DMRB_INT64=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test clang-3.9 32bit_int64_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang39_0.7
+  variables:
+    CC: clang-3.9
+    CXX: clang++-3.9
+    LD: clang-3.9
+    CFLAGS: "-m32 -DMRB_INT64=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test clang-3.9 32bit_float:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang39_0.7
+  variables:
+    CC: clang-3.9
+    CXX: clang++-3.9
+    LD: clang-3.9
+    CFLAGS: "-m32 -DMRB_USE_FLOAT=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test clang-3.9 32bit_float_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang39_0.7
+  variables:
+    CC: clang-3.9
+    CXX: clang++-3.9
+    LD: clang-3.9
+    CFLAGS: "-m32 -DMRB_USE_FLOAT=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test clang-3.9 32bit_float_word:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang39_0.7
+  variables:
+    CC: clang-3.9
+    CXX: clang++-3.9
+    LD: clang-3.9
+    CFLAGS: "-m32 -DMRB_USE_FLOAT=1 -DMRB_WORD_BOXING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test clang-3.9 32bit_float_word_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang39_0.7
+  variables:
+    CC: clang-3.9
+    CXX: clang++-3.9
+    LD: clang-3.9
+    CFLAGS: "-m32 -DMRB_USE_FLOAT=1 -DMRB_WORD_BOXING=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test clang-3.9 32bit_float_int16:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang39_0.7
+  variables:
+    CC: clang-3.9
+    CXX: clang++-3.9
+    LD: clang-3.9
+    CFLAGS: "-m32 -DMRB_USE_FLOAT=1 -DMRB_INT16=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test clang-3.9 32bit_float_int16_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang39_0.7
+  variables:
+    CC: clang-3.9
+    CXX: clang++-3.9
+    LD: clang-3.9
+    CFLAGS: "-m32 -DMRB_USE_FLOAT=1 -DMRB_INT16=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test clang-3.9 32bit_float_int64:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang39_0.7
+  variables:
+    CC: clang-3.9
+    CXX: clang++-3.9
+    LD: clang-3.9
+    CFLAGS: "-m32 -DMRB_USE_FLOAT=1 -DMRB_INT64=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test clang-3.9 32bit_float_int64_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang39_0.7
+  variables:
+    CC: clang-3.9
+    CXX: clang++-3.9
+    LD: clang-3.9
+    CFLAGS: "-m32 -DMRB_USE_FLOAT=1 -DMRB_INT64=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: "-m32"
+  script: env; rake --verbose all test
+Test clang-3.9 64bit:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang39_0.7
+  variables:
+    CC: clang-3.9
+    CXX: clang++-3.9
+    LD: clang-3.9
+    CFLAGS: ''
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test clang-3.9 64bit_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang39_0.7
+  variables:
+    CC: clang-3.9
+    CXX: clang++-3.9
+    LD: clang-3.9
+    CFLAGS: "-DMRB_UTF8_STRING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test clang-3.9 64bit_nan:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang39_0.7
+  variables:
+    CC: clang-3.9
+    CXX: clang++-3.9
+    LD: clang-3.9
+    CFLAGS: "-DMRB_NAN_BOXING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test clang-3.9 64bit_nan_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang39_0.7
+  variables:
+    CC: clang-3.9
+    CXX: clang++-3.9
+    LD: clang-3.9
+    CFLAGS: "-DMRB_NAN_BOXING=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test clang-3.9 64bit_word:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang39_0.7
+  variables:
+    CC: clang-3.9
+    CXX: clang++-3.9
+    LD: clang-3.9
+    CFLAGS: "-DMRB_WORD_BOXING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test clang-3.9 64bit_word_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang39_0.7
+  variables:
+    CC: clang-3.9
+    CXX: clang++-3.9
+    LD: clang-3.9
+    CFLAGS: "-DMRB_WORD_BOXING=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test clang-3.9 64bit_int16:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang39_0.7
+  variables:
+    CC: clang-3.9
+    CXX: clang++-3.9
+    LD: clang-3.9
+    CFLAGS: "-DMRB_INT16=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test clang-3.9 64bit_int16_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang39_0.7
+  variables:
+    CC: clang-3.9
+    CXX: clang++-3.9
+    LD: clang-3.9
+    CFLAGS: "-DMRB_INT16=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test clang-3.9 64bit_int16_nan:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang39_0.7
+  variables:
+    CC: clang-3.9
+    CXX: clang++-3.9
+    LD: clang-3.9
+    CFLAGS: "-DMRB_INT16=1 -DMRB_NAN_BOXING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test clang-3.9 64bit_int16_nan_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang39_0.7
+  variables:
+    CC: clang-3.9
+    CXX: clang++-3.9
+    LD: clang-3.9
+    CFLAGS: "-DMRB_INT16=1 -DMRB_NAN_BOXING=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test clang-3.9 64bit_int64:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang39_0.7
+  variables:
+    CC: clang-3.9
+    CXX: clang++-3.9
+    LD: clang-3.9
+    CFLAGS: "-DMRB_INT64=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test clang-3.9 64bit_int64_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang39_0.7
+  variables:
+    CC: clang-3.9
+    CXX: clang++-3.9
+    LD: clang-3.9
+    CFLAGS: "-DMRB_INT64=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test clang-3.9 64bit_int64_word:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang39_0.7
+  variables:
+    CC: clang-3.9
+    CXX: clang++-3.9
+    LD: clang-3.9
+    CFLAGS: "-DMRB_INT64=1 -DMRB_WORD_BOXING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test clang-3.9 64bit_int64_word_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang39_0.7
+  variables:
+    CC: clang-3.9
+    CXX: clang++-3.9
+    LD: clang-3.9
+    CFLAGS: "-DMRB_INT64=1 -DMRB_WORD_BOXING=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test clang-3.9 64bit_float:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang39_0.7
+  variables:
+    CC: clang-3.9
+    CXX: clang++-3.9
+    LD: clang-3.9
+    CFLAGS: "-DMRB_USE_FLOAT=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test clang-3.9 64bit_float_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang39_0.7
+  variables:
+    CC: clang-3.9
+    CXX: clang++-3.9
+    LD: clang-3.9
+    CFLAGS: "-DMRB_USE_FLOAT=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test clang-3.9 64bit_float_word:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang39_0.7
+  variables:
+    CC: clang-3.9
+    CXX: clang++-3.9
+    LD: clang-3.9
+    CFLAGS: "-DMRB_USE_FLOAT=1 -DMRB_WORD_BOXING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test clang-3.9 64bit_float_word_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang39_0.7
+  variables:
+    CC: clang-3.9
+    CXX: clang++-3.9
+    LD: clang-3.9
+    CFLAGS: "-DMRB_USE_FLOAT=1 -DMRB_WORD_BOXING=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test clang-3.9 64bit_float_int16:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang39_0.7
+  variables:
+    CC: clang-3.9
+    CXX: clang++-3.9
+    LD: clang-3.9
+    CFLAGS: "-DMRB_USE_FLOAT=1 -DMRB_INT16=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test clang-3.9 64bit_float_int16_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang39_0.7
+  variables:
+    CC: clang-3.9
+    CXX: clang++-3.9
+    LD: clang-3.9
+    CFLAGS: "-DMRB_USE_FLOAT=1 -DMRB_INT16=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test clang-3.9 64bit_float_int64:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang39_0.7
+  variables:
+    CC: clang-3.9
+    CXX: clang++-3.9
+    LD: clang-3.9
+    CFLAGS: "-DMRB_USE_FLOAT=1 -DMRB_INT64=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test clang-3.9 64bit_float_int64_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang39_0.7
+  variables:
+    CC: clang-3.9
+    CXX: clang++-3.9
+    LD: clang-3.9
+    CFLAGS: "-DMRB_USE_FLOAT=1 -DMRB_INT64=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test clang-3.9 64bit_float_int64_word:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang39_0.7
+  variables:
+    CC: clang-3.9
+    CXX: clang++-3.9
+    LD: clang-3.9
+    CFLAGS: "-DMRB_USE_FLOAT=1 -DMRB_INT64=1 -DMRB_WORD_BOXING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
+Test clang-3.9 64bit_float_int64_word_utf8:
+  stage: test
+  image: registry.gitlab.com/dabroz/mruby:clang39_0.7
+  variables:
+    CC: clang-3.9
+    CXX: clang++-3.9
+    LD: clang-3.9
+    CFLAGS: "-DMRB_USE_FLOAT=1 -DMRB_INT64=1 -DMRB_WORD_BOXING=1 -DMRB_UTF8_STRING=1"
+    LDFLAGS: ''
+  script: env; rake --verbose all test
Index: /EcnlProtoTool/trunk/mruby-2.1.1/.project
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/.project	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/.project	(revision 439)
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>mruby-2.1.1</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name>
+			<triggers>clean,full,incremental,</triggers>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder</name>
+			<triggers>full,incremental,</triggers>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.cdt.core.cnature</nature>
+		<nature>org.eclipse.cdt.core.ccnature</nature>
+		<nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>
+		<nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
+	</natures>
+</projectDescription>
Index: /EcnlProtoTool/trunk/mruby-2.1.1/.travis.yml
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/.travis.yml	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/.travis.yml	(revision 439)
@@ -0,0 +1,14 @@
+language: c
+
+sudo: false
+
+matrix:
+  include:
+    - os: linux
+      sudo: false
+    - os: osx
+      osx_image: xcode7.1
+
+env:
+  - MRUBY_CONFIG=travis_config.rb
+script: "rake -m && rake test"
Index: /EcnlProtoTool/trunk/mruby-2.1.1/.yardopts
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/.yardopts	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/.yardopts	(revision 439)
@@ -0,0 +1,17 @@
+--markup markdown
+--plugin mruby
+--plugin coderay
+--output-dir doc/api
+
+src/**/*.c
+mrblib/**/*.rb
+include/**/*.h
+
+mrbgems/*/src/**/*.c
+mrbgems/*/mrblib/**/*.rb
+mrbgems/*/include/**/*.h
+-
+AUTHORS
+LICENSE
+CONTRIBUTING.md
+doc/guides/*.md
Index: /EcnlProtoTool/trunk/mruby-2.1.1/AUTHORS
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/AUTHORS	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/AUTHORS	(revision 439)
@@ -0,0 +1,46 @@
+This is the (likely incomplete) list of "mruby developers".
+If you submit a patch to mruby, please add your name to the end
+of this list.
+
+   Yukihiro Matsumoto (Matz)
+   SCSK KYUSHU CORPORATION
+   Kyushu Institute of Technology
+   Network Applied Communication Laboratory, Inc.
+   Daniel Bovensiepen
+   Jon Maken
+   Bjorn De Meyer
+   Yuichiro MASUI
+   Masamitsu MURASE
+   Masaki Muranaka
+   Internet Initiative Japan Inc.
+   Tadashi FUKUZAWA
+   MATSUMOTO Ryosuke
+   Yasuhiro Matsumoto
+   Koji Yoshioka
+   Jun Hiroe
+   Narihiro Nakamura
+   Yuichi Nishiwaki
+   Tatsuhiko Kubo
+   Takeshi Watanabe
+   Yuki Kurihara
+   specified non-profit corporation mruby Forum
+   Kazuaki Tanaka
+   Hiromasa Ishii
+   Hiroshi Mimaki
+   Satoshi Odawara
+   Mitsubishi Electric Micro-Computer Application Software Co.,Ltd.
+   Ralph Desir(Mav7)
+   Hiroyuki Matsuzaki
+   Yuhei Okazaki
+   Manycolors, Inc.
+   Shota Nakano
+   Yuichi Osawa
+   Terence Lee
+   Zachary Scott
+   Tomasz DÄ
+browski
+   Christopher Aue
+   Masahiro Wakame
+   YAMAMOTO Masaya
+   KOBAYASHI Shuji
+   RIZAL Reckordp
Index: /EcnlProtoTool/trunk/mruby-2.1.1/CONTRIBUTING.md
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/CONTRIBUTING.md	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/CONTRIBUTING.md	(revision 439)
@@ -0,0 +1,75 @@
+# How to contribute
+
+mruby is an open-source project which is looking forward to each contribution.
+
+## Your Pull Request
+
+To make it easy to review and understand your change please keep the following
+things in mind before submitting your pull request:
+
+* Work on the latest possible state of **mruby/master**
+* Create a branch which is dedicated to your change
+* Test your changes before creating a pull request (```rake test```)
+* If possible write a test case which confirms your change
+* Don't mix several features or bug-fixes in one pull request
+* Create a meaningful commit message
+* Explain your change (i.e. with a link to the issue you are fixing)
+* Use mrbgem to provide non ISO features (classes, modules and methods) unless
+  you have a special reason to implement them in the core
+
+## Coding conventions
+
+How to style your C and Ruby code which you want to submit.
+
+### C code
+
+The core part (parser, bytecode-interpreter, core-lib, etc.) of mruby is
+written in the C programming language. Please note the following hints for your
+C code:
+
+#### Comply with C99 (ISO/IEC 9899:1999)
+
+mruby should be highly portable to other systems and compilers. For this it is
+recommended to keep your code as close as possible to the C99 standard
+(http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf).
+
+Although we target C99, we've heard some compilers in the embedded environment
+still requires declarations of local variables to be at the beginning of a
+scope. Until we confirm the situation has changed, we use the old-style
+variable declaration.
+
+Visual C++ is also an important target for mruby (supported version is 2013 or
+later). For this reason features that are not supported by Visual C++ may not
+be used (e.g. `%z` of `strftime()`).
+
+NOTE: Old GCC requires `-std=gnu99` option to enable C99 support.
+
+#### Reduce library dependencies to a minimum
+
+The dependencies to libraries should be kept to an absolute minimum. This
+increases the portability but makes it also easier to cut away parts of mruby
+on-demand.
+
+#### Don't use C++ style comments
+
+    /* This is the preferred comment style */
+
+Use C++ style comments only for temporary comment e.g. commenting out some code lines.
+
+#### Insert a break after the method return value:
+
+    int
+    main(void)
+    {
+      ...
+    }
+
+### Ruby code
+
+Parts of the standard library of mruby are written in the Ruby programming
+language itself. Please note the following hints for your Ruby code:
+
+#### Comply with the Ruby standard (ISO/IEC 30170:2012)
+
+mruby is currently targeting to execute Ruby code which complies to ISO/IEC
+30170:2012 (http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=59579).
Index: /EcnlProtoTool/trunk/mruby-2.1.1/Doxyfile
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/Doxyfile	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/Doxyfile	(revision 439)
@@ -0,0 +1,2408 @@
+# Doxyfile 1.8.13
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+
+DOXYFILE_ENCODING      = UTF-8
+PROJECT_NAME           = "mruby"
+PROJECT_NUMBER         = 2.1.1
+
+PROJECT_BRIEF          = "mruby is the lightweight implementation of the Ruby language"
+
+PROJECT_LOGO           = doc/mruby_logo_red_icon.png
+
+OUTPUT_DIRECTORY       = doc/capi
+
+USE_MDFILE_AS_MAINPAGE = README.md
+
+INPUT                  = README.md \
+                         src \
+                         include \
+                         include/mruby \
+                         mrblib \
+                         doc \
+                         doc/guides
+
+# Red for Ruby
+HTML_COLORSTYLE_HUE    = 359
+
+# The following expansions 
+ENABLE_PREPROCESSING   = YES
+MACRO_EXPANSION        = YES
+EXPAND_ONLY_PREDEF     = NO
+PREDEFINED             = 
+EXPAND_AS_DEFINED      = 
+SKIP_FUNCTION_MACROS   = NO
+
+# This tells doxygen to search the places that make sense
+SEARCH_INCLUDES        = YES
+INCLUDE_PATH           = include include/mruby
+INCLUDE_FILE_PATTERNS  = *.h
+
+CLANG_ASSISTED_PARSING = NO
+CLANG_OPTIONS          = -I./include
+
+# This thing creates documentation elements for everything, even when its not documented. Its a little ugly to do it right now because huge swathes of code aren't documented.
+EXTRACT_ALL            = NO
+
+# Document MRB_INLINE functions
+EXTRACT_STATIC         = YES
+
+JAVADOC_AUTOBRIEF      = YES
+QT_AUTOBRIEF           = NO
+
+QUIET                  = YES
+WARN_IF_UNDOCUMENTED   = NO
+
+#===========================================================================
+# BELOW THIS LINE IS CRUFT GENERATED BY doxygen -g
+# If you edit anything below this, bring it up here so its easier to read.
+#===========================================================================
+
+# If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub-
+# directories (in 2 levels) under the output directory of each output format and
+# will distribute the generated files over these directories. Enabling this
+# option can be useful when feeding doxygen a huge amount of source files, where
+# putting all generated files in the same directory would otherwise causes
+# performance problems for the file system.
+# The default value is: NO.
+
+CREATE_SUBDIRS         = NO
+
+# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII
+# characters to appear in the names of generated files. If set to NO, non-ASCII
+# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode
+# U+3044.
+# The default value is: NO.
+
+ALLOW_UNICODE_NAMES    = NO
+
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all
+# documentation generated by doxygen is written. Doxygen will use this
+# information to generate all constant output in the proper language.
+# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese,
+# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States),
+# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian,
+# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages),
+# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian,
+# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian,
+# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish,
+# Ukrainian and Vietnamese.
+# The default value is: English.
+
+OUTPUT_LANGUAGE        = English
+
+# If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member
+# descriptions after the members that are listed in the file and class
+# documentation (similar to Javadoc). Set to NO to disable this.
+# The default value is: YES.
+
+BRIEF_MEMBER_DESC      = YES
+
+# If the REPEAT_BRIEF tag is set to YES, doxygen will prepend the brief
+# description of a member or function before the detailed description
+#
+# Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
+# brief descriptions will be completely suppressed.
+# The default value is: YES.
+
+REPEAT_BRIEF           = YES
+
+# This tag implements a quasi-intelligent brief description abbreviator that is
+# used to form the text in various listings. Each string in this list, if found
+# as the leading text of the brief description, will be stripped from the text
+# and the result, after processing the whole list, is used as the annotated
+# text. Otherwise, the brief description is used as-is. If left blank, the
+# following values are used ($name is automatically replaced with the name of
+# the entity):The $name class, The $name widget, The $name file, is, provides,
+# specifies, contains, represents, a, an and the.
+
+ABBREVIATE_BRIEF       = "The $name class" \
+                         "The $name widget" \
+                         "The $name file" \
+                         is \
+                         provides \
+                         specifies \
+                         contains \
+                         represents \
+                         a \
+                         an \
+                         the
+
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
+# doxygen will generate a detailed section even if there is only a brief
+# description.
+# The default value is: NO.
+
+ALWAYS_DETAILED_SEC    = NO
+
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
+# inherited members of a class in the documentation of that class as if those
+# members were ordinary class members. Constructors, destructors and assignment
+# operators of the base classes will not be shown.
+# The default value is: NO.
+
+INLINE_INHERITED_MEMB  = NO
+
+# If the FULL_PATH_NAMES tag is set to YES, doxygen will prepend the full path
+# before files name in the file list and in the header files. If set to NO the
+# shortest path that makes the file name unique will be used
+# The default value is: YES.
+
+FULL_PATH_NAMES        = YES
+
+# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path.
+# Stripping is only done if one of the specified strings matches the left-hand
+# part of the path. The tag can be used to show relative paths in the file list.
+# If left blank the directory from which doxygen is run is used as the path to
+# strip.
+#
+# Note that you can specify absolute paths here, but also relative paths, which
+# will be relative from the directory where doxygen is started.
+# This tag requires that the tag FULL_PATH_NAMES is set to YES.
+
+STRIP_FROM_PATH        =
+
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the
+# path mentioned in the documentation of a class, which tells the reader which
+# header file to include in order to use a class. If left blank only the name of
+# the header file containing the class definition is used. Otherwise one should
+# specify the list of include paths that are normally passed to the compiler
+# using the -I flag.
+
+STRIP_FROM_INC_PATH    =
+
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but
+# less readable) file names. This can be useful is your file systems doesn't
+# support long names like on DOS, Mac, or CD-ROM.
+# The default value is: NO.
+
+SHORT_NAMES            = NO
+
+
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a
+# multi-line C++ special comment block (i.e. a block of //! or /// comments) as
+# a brief description. This used to be the default behavior. The new default is
+# to treat a multi-line C++ comment block as a detailed description. Set this
+# tag to YES if you prefer the old behavior instead.
+#
+# Note that setting this tag to YES also means that rational rose comments are
+# not recognized any more.
+# The default value is: NO.
+
+MULTILINE_CPP_IS_BRIEF = NO
+
+# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the
+# documentation from any documented member that it re-implements.
+# The default value is: YES.
+
+INHERIT_DOCS           = YES
+
+# If the SEPARATE_MEMBER_PAGES tag is set to YES then doxygen will produce a new
+# page for each member. If set to NO, the documentation of a member will be part
+# of the file/class/namespace that contains it.
+# The default value is: NO.
+
+SEPARATE_MEMBER_PAGES  = NO
+
+# The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen
+# uses this value to replace tabs by spaces in code fragments.
+# Minimum value: 1, maximum value: 16, default value: 4.
+
+TAB_SIZE               = 4
+
+# This tag can be used to specify a number of aliases that act as commands in
+# the documentation. An alias has the form:
+# name=value
+# For example adding
+# "sideeffect=@par Side Effects:\n"
+# will allow you to put the command \sideeffect (or @sideeffect) in the
+# documentation, which will result in a user-defined paragraph with heading
+# "Side Effects:". You can put \n's in the value part of an alias to insert
+# newlines.
+
+ALIASES                =
+
+# This tag can be used to specify a number of word-keyword mappings (TCL only).
+# A mapping has the form "name=value". For example adding "class=itcl::class"
+# will allow you to use the command class in the itcl::class meaning.
+
+TCL_SUBST              =
+
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources
+# only. Doxygen will then generate output that is more tailored for C. For
+# instance, some of the names that are used will be different. The list of all
+# members will be omitted, etc.
+# The default value is: NO.
+
+OPTIMIZE_OUTPUT_FOR_C  = NO
+
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or
+# Python sources only. Doxygen will then generate output that is more tailored
+# for that language. For instance, namespaces will be presented as packages,
+# qualified scopes will look different, etc.
+# The default value is: NO.
+
+OPTIMIZE_OUTPUT_JAVA   = NO
+
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran
+# sources. Doxygen will then generate output that is tailored for Fortran.
+# The default value is: NO.
+
+OPTIMIZE_FOR_FORTRAN   = NO
+
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL
+# sources. Doxygen will then generate output that is tailored for VHDL.
+# The default value is: NO.
+
+OPTIMIZE_OUTPUT_VHDL   = NO
+
+# Doxygen selects the parser to use depending on the extension of the files it
+# parses. With this tag you can assign which parser to use for a given
+# extension. Doxygen has a built-in mapping, but you can override or extend it
+# using this tag. The format is ext=language, where ext is a file extension, and
+# language is one of the parsers supported by doxygen: IDL, Java, Javascript,
+# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran:
+# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran:
+# Fortran. In the later case the parser tries to guess whether the code is fixed
+# or free formatted code, this is the default for Fortran type files), VHDL. For
+# instance to make doxygen treat .inc files as Fortran files (default is PHP),
+# and .f files as C (default is Fortran), use: inc=Fortran f=C.
+#
+# Note: For files without extension you can use no_extension as a placeholder.
+#
+# Note that for custom extensions you also need to set FILE_PATTERNS otherwise
+# the files are not read by doxygen.
+
+EXTENSION_MAPPING      =
+
+# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments
+# according to the Markdown format, which allows for more readable
+# documentation. See http://daringfireball.net/projects/markdown/ for details.
+# The output of markdown processing is further processed by doxygen, so you can
+# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in
+# case of backward compatibilities issues.
+# The default value is: YES.
+
+MARKDOWN_SUPPORT       = YES
+
+# When the TOC_INCLUDE_HEADINGS tag is set to a non-zero value, all headings up
+# to that level are automatically included in the table of contents, even if
+# they do not have an id attribute.
+# Note: This feature currently applies only to Markdown headings.
+# Minimum value: 0, maximum value: 99, default value: 0.
+# This tag requires that the tag MARKDOWN_SUPPORT is set to YES.
+
+TOC_INCLUDE_HEADINGS   = 0
+
+# When enabled doxygen tries to link words that correspond to documented
+# classes, or namespaces to their corresponding documentation. Such a link can
+# be prevented in individual cases by putting a % sign in front of the word or
+# globally by setting AUTOLINK_SUPPORT to NO.
+# The default value is: YES.
+
+AUTOLINK_SUPPORT       = YES
+
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want
+# to include (a tag file for) the STL sources as input, then you should set this
+# tag to YES in order to let doxygen match functions declarations and
+# definitions whose arguments contain STL classes (e.g. func(std::string);
+# versus func(std::string) {}). This also make the inheritance and collaboration
+# diagrams that involve STL classes more complete and accurate.
+# The default value is: NO.
+
+BUILTIN_STL_SUPPORT    = NO
+
+# If you use Microsoft's C++/CLI language, you should set this option to YES to
+# enable parsing support.
+# The default value is: NO.
+
+CPP_CLI_SUPPORT        = NO
+
+# Set the SIP_SUPPORT tag to YES if your project consists of sip (see:
+# http://www.riverbankcomputing.co.uk/software/sip/intro) sources only. Doxygen
+# will parse them like normal C++ but will assume all classes use public instead
+# of private inheritance when no explicit protection keyword is present.
+# The default value is: NO.
+
+SIP_SUPPORT            = NO
+
+# For Microsoft's IDL there are propget and propput attributes to indicate
+# getter and setter methods for a property. Setting this option to YES will make
+# doxygen to replace the get and set methods by a property in the documentation.
+# This will only work if the methods are indeed getting or setting a simple
+# type. If this is not the case, or you want to show the methods anyway, you
+# should set this option to NO.
+# The default value is: YES.
+
+IDL_PROPERTY_SUPPORT   = YES
+
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
+# tag is set to YES then doxygen will reuse the documentation of the first
+# member in the group (if any) for the other members of the group. By default
+# all members of a group must be documented explicitly.
+# The default value is: NO.
+
+DISTRIBUTE_GROUP_DOC   = NO
+
+# If one adds a struct or class to a group and this option is enabled, then also
+# any nested class or struct is added to the same group. By default this option
+# is disabled and one has to add nested compounds explicitly via \ingroup.
+# The default value is: NO.
+
+GROUP_NESTED_COMPOUNDS = NO
+
+# Set the SUBGROUPING tag to YES to allow class member groups of the same type
+# (for instance a group of public functions) to be put as a subgroup of that
+# type (e.g. under the Public Functions section). Set it to NO to prevent
+# subgrouping. Alternatively, this can be done per class using the
+# \nosubgrouping command.
+# The default value is: YES.
+
+SUBGROUPING            = YES
+
+# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions
+# are shown inside the group in which they are included (e.g. using \ingroup)
+# instead of on a separate page (for HTML and Man pages) or section (for LaTeX
+# and RTF).
+#
+# Note that this feature does not work in combination with
+# SEPARATE_MEMBER_PAGES.
+# The default value is: NO.
+
+INLINE_GROUPED_CLASSES = NO
+
+# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions
+# with only public data fields or simple typedef fields will be shown inline in
+# the documentation of the scope in which they are defined (i.e. file,
+# namespace, or group documentation), provided this scope is documented. If set
+# to NO, structs, classes, and unions are shown on a separate page (for HTML and
+# Man pages) or section (for LaTeX and RTF).
+# The default value is: NO.
+
+INLINE_SIMPLE_STRUCTS  = NO
+
+# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or
+# enum is documented as struct, union, or enum with the name of the typedef. So
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct
+# with name TypeT. When disabled the typedef will appear as a member of a file,
+# namespace, or class. And the struct will be named TypeS. This can typically be
+# useful for C code in case the coding convention dictates that all compound
+# types are typedef'ed and only the typedef is referenced, never the tag name.
+# The default value is: NO.
+
+TYPEDEF_HIDES_STRUCT   = NO
+
+# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This
+# cache is used to resolve symbols given their name and scope. Since this can be
+# an expensive process and often the same symbol appears multiple times in the
+# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small
+# doxygen will become slower. If the cache is too large, memory is wasted. The
+# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range
+# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536
+# symbols. At the end of a run doxygen will report the cache usage and suggest
+# the optimal cache size from a speed point of view.
+# Minimum value: 0, maximum value: 9, default value: 0.
+
+LOOKUP_CACHE_SIZE      = 0
+
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+
+# If the EXTRACT_ALL tag is set to YES, doxygen will assume all entities in
+# documentation are documented, even if no documentation was available. Private
+# class members and static file members will be hidden unless the
+# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES.
+# Note: This will also disable the warnings about undocumented members that are
+# normally produced when WARNINGS is set to YES.
+# The default value is: NO.
+
+
+# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will
+# be included in the documentation.
+# The default value is: NO.
+
+EXTRACT_PRIVATE        = NO
+
+# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal
+# scope will be included in the documentation.
+# The default value is: NO.
+
+EXTRACT_PACKAGE        = NO
+
+# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be
+# included in the documentation.
+# The default value is: NO.
+
+
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined
+# locally in source files will be included in the documentation. If set to NO,
+# only classes defined in header files are included. Does not have any effect
+# for Java sources.
+# The default value is: YES.
+
+EXTRACT_LOCAL_CLASSES  = YES
+
+# This flag is only useful for Objective-C code. If set to YES, local methods,
+# which are defined in the implementation section but not in the interface are
+# included in the documentation. If set to NO, only methods in the interface are
+# included.
+# The default value is: NO.
+
+EXTRACT_LOCAL_METHODS  = NO
+
+# If this flag is set to YES, the members of anonymous namespaces will be
+# extracted and appear in the documentation as a namespace called
+# 'anonymous_namespace{file}', where file will be replaced with the base name of
+# the file that contains the anonymous namespace. By default anonymous namespace
+# are hidden.
+# The default value is: NO.
+
+EXTRACT_ANON_NSPACES   = NO
+
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all
+# undocumented members inside documented classes or files. If set to NO these
+# members will be included in the various overviews, but no documentation
+# section is generated. This option has no effect if EXTRACT_ALL is enabled.
+# The default value is: NO.
+
+HIDE_UNDOC_MEMBERS     = NO
+
+# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all
+# undocumented classes that are normally visible in the class hierarchy. If set
+# to NO, these classes will be included in the various overviews. This option
+# has no effect if EXTRACT_ALL is enabled.
+# The default value is: NO.
+
+HIDE_UNDOC_CLASSES     = NO
+
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend
+# (class|struct|union) declarations. If set to NO, these declarations will be
+# included in the documentation.
+# The default value is: NO.
+
+HIDE_FRIEND_COMPOUNDS  = NO
+
+# If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any
+# documentation blocks found inside the body of a function. If set to NO, these
+# blocks will be appended to the function's detailed documentation block.
+# The default value is: NO.
+
+HIDE_IN_BODY_DOCS      = NO
+
+# The INTERNAL_DOCS tag determines if documentation that is typed after a
+# \internal command is included. If the tag is set to NO then the documentation
+# will be excluded. Set it to YES to include the internal documentation.
+# The default value is: NO.
+
+INTERNAL_DOCS          = NO
+
+# If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file
+# names in lower-case letters. If set to YES, upper-case letters are also
+# allowed. This is useful if you have classes or files whose names only differ
+# in case and if your file system supports case sensitive file names. Windows
+# and Mac users are advised to set this option to NO.
+# The default value is: system dependent.
+
+CASE_SENSE_NAMES       = YES
+
+# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with
+# their full class and namespace scopes in the documentation. If set to YES, the
+# scope will be hidden.
+# The default value is: NO.
+
+HIDE_SCOPE_NAMES       = NO
+
+# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will
+# append additional text to a page's title, such as Class Reference. If set to
+# YES the compound reference will be hidden.
+# The default value is: NO.
+
+HIDE_COMPOUND_REFERENCE= NO
+
+# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of
+# the files that are included by a file in the documentation of that file.
+# The default value is: YES.
+
+SHOW_INCLUDE_FILES     = YES
+
+# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each
+# grouped member an include statement to the documentation, telling the reader
+# which file to include in order to use the member.
+# The default value is: NO.
+
+SHOW_GROUPED_MEMB_INC  = NO
+
+# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include
+# files with double quotes in the documentation rather than with sharp brackets.
+# The default value is: NO.
+
+FORCE_LOCAL_INCLUDES   = NO
+
+# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the
+# documentation for inline members.
+# The default value is: YES.
+
+INLINE_INFO            = YES
+
+# If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the
+# (detailed) documentation of file and class members alphabetically by member
+# name. If set to NO, the members will appear in declaration order.
+# The default value is: YES.
+
+SORT_MEMBER_DOCS       = YES
+
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief
+# descriptions of file, namespace and class members alphabetically by member
+# name. If set to NO, the members will appear in declaration order. Note that
+# this will also influence the order of the classes in the class list.
+# The default value is: NO.
+
+SORT_BRIEF_DOCS        = NO
+
+# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the
+# (brief and detailed) documentation of class members so that constructors and
+# destructors are listed first. If set to NO the constructors will appear in the
+# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS.
+# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief
+# member documentation.
+# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting
+# detailed member documentation.
+# The default value is: NO.
+
+SORT_MEMBERS_CTORS_1ST = NO
+
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy
+# of group names into alphabetical order. If set to NO the group names will
+# appear in their defined order.
+# The default value is: NO.
+
+SORT_GROUP_NAMES       = NO
+
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by
+# fully-qualified names, including namespaces. If set to NO, the class list will
+# be sorted only by class name, not including the namespace part.
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
+# Note: This option applies only to the class list, not to the alphabetical
+# list.
+# The default value is: NO.
+
+SORT_BY_SCOPE_NAME     = NO
+
+# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper
+# type resolution of all parameters of a function it will reject a match between
+# the prototype and the implementation of a member function even if there is
+# only one candidate or it is obvious which candidate to choose by doing a
+# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still
+# accept a match between prototype and implementation in such cases.
+# The default value is: NO.
+
+STRICT_PROTO_MATCHING  = NO
+
+# The GENERATE_TODOLIST tag can be used to enable (YES) or disable (NO) the todo
+# list. This list is created by putting \todo commands in the documentation.
+# The default value is: YES.
+
+GENERATE_TODOLIST      = YES
+
+# The GENERATE_TESTLIST tag can be used to enable (YES) or disable (NO) the test
+# list. This list is created by putting \test commands in the documentation.
+# The default value is: YES.
+
+GENERATE_TESTLIST      = YES
+
+# The GENERATE_BUGLIST tag can be used to enable (YES) or disable (NO) the bug
+# list. This list is created by putting \bug commands in the documentation.
+# The default value is: YES.
+
+GENERATE_BUGLIST       = YES
+
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or disable (NO)
+# the deprecated list. This list is created by putting \deprecated commands in
+# the documentation.
+# The default value is: YES.
+
+GENERATE_DEPRECATEDLIST= YES
+
+# The ENABLED_SECTIONS tag can be used to enable conditional documentation
+# sections, marked by \if <section_label> ... \endif and \cond <section_label>
+# ... \endcond blocks.
+
+ENABLED_SECTIONS       =
+
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the
+# initial value of a variable or macro / define can have for it to appear in the
+# documentation. If the initializer consists of more lines than specified here
+# it will be hidden. Use a value of 0 to hide initializers completely. The
+# appearance of the value of individual variables and macros / defines can be
+# controlled using \showinitializer or \hideinitializer command in the
+# documentation regardless of this setting.
+# Minimum value: 0, maximum value: 10000, default value: 30.
+
+MAX_INITIALIZER_LINES  = 30
+
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at
+# the bottom of the documentation of classes and structs. If set to YES, the
+# list will mention the files that were used to generate the documentation.
+# The default value is: YES.
+
+SHOW_USED_FILES        = YES
+
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This
+# will remove the Files entry from the Quick Index and from the Folder Tree View
+# (if specified).
+# The default value is: YES.
+
+SHOW_FILES             = YES
+
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces
+# page. This will remove the Namespaces entry from the Quick Index and from the
+# Folder Tree View (if specified).
+# The default value is: YES.
+
+SHOW_NAMESPACES        = YES
+
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that
+# doxygen should invoke to get the current version for each file (typically from
+# the version control system). Doxygen will invoke the program by executing (via
+# popen()) the command command input-file, where command is the value of the
+# FILE_VERSION_FILTER tag, and input-file is the name of an input file provided
+# by doxygen. Whatever the program writes to standard output is used as the file
+# version. For an example see the documentation.
+
+FILE_VERSION_FILTER    =
+
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed
+# by doxygen. The layout file controls the global structure of the generated
+# output files in an output format independent way. To create the layout file
+# that represents doxygen's defaults, run doxygen with the -l option. You can
+# optionally specify a file name after the option, if omitted DoxygenLayout.xml
+# will be used as the name of the layout file.
+#
+# Note that if you run doxygen from a directory containing a file called
+# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE
+# tag is left empty.
+
+LAYOUT_FILE            =
+
+# The CITE_BIB_FILES tag can be used to specify one or more bib files containing
+# the reference definitions. This must be a list of .bib files. The .bib
+# extension is automatically appended if omitted. This requires the bibtex tool
+# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info.
+# For LaTeX the style of the bibliography can be controlled using
+# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the
+# search path. See also \cite for info how to create references.
+
+CITE_BIB_FILES         =
+
+#---------------------------------------------------------------------------
+# Configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+
+
+# The WARNINGS tag can be used to turn on/off the warning messages that are
+# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES
+# this implies that the warnings are on.
+#
+# Tip: Turn warnings on while writing the documentation.
+# The default value is: YES.
+
+WARNINGS               = YES
+
+
+# If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for
+# potential errors in the documentation, such as not documenting some parameters
+# in a documented function, or documenting parameters that don't exist or using
+# markup commands wrongly.
+# The default value is: YES.
+
+WARN_IF_DOC_ERROR      = YES
+
+# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that
+# are documented, but have no documentation for their parameters or return
+# value. If set to NO, doxygen will only warn about wrong or incomplete
+# parameter documentation, but not about the absence of documentation.
+# The default value is: NO.
+
+WARN_NO_PARAMDOC       = NO
+
+# If the WARN_AS_ERROR tag is set to YES then doxygen will immediately stop when
+# a warning is encountered.
+# The default value is: NO.
+
+WARN_AS_ERROR          = NO
+
+# The WARN_FORMAT tag determines the format of the warning messages that doxygen
+# can produce. The string should contain the $file, $line, and $text tags, which
+# will be replaced by the file and line number from which the warning originated
+# and the warning text. Optionally the format may contain $version, which will
+# be replaced by the version of the file (if it could be obtained via
+# FILE_VERSION_FILTER)
+# The default value is: $file:$line: $text.
+
+WARN_FORMAT            = "$file:$line: $text"
+
+# The WARN_LOGFILE tag can be used to specify a file to which warning and error
+# messages should be written. If left blank the output is written to standard
+# error (stderr).
+
+WARN_LOGFILE           =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the input files
+#---------------------------------------------------------------------------
+
+# The INPUT tag is used to specify the files and/or directories that contain
+# documented source files. You may enter file names like myfile.cpp or
+# directories like /usr/src/myproject. Separate the files or directories with
+# spaces. See also FILE_PATTERNS and EXTENSION_MAPPING
+# Note: If this tag is empty the current directory is searched.
+
+
+# This tag can be used to specify the character encoding of the source files
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses
+# libiconv (or the iconv built into libc) for the transcoding. See the libiconv
+# documentation (see: http://www.gnu.org/software/libiconv) for the list of
+# possible encodings.
+# The default value is: UTF-8.
+
+INPUT_ENCODING         = UTF-8
+
+# If the value of the INPUT tag contains directories, you can use the
+# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and
+# *.h) to filter out the source-files in the directories.
+#
+# Note that for custom extensions or not directly supported extensions you also
+# need to set EXTENSION_MAPPING for the extension otherwise the files are not
+# read by doxygen.
+#
+# If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp,
+# *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h,
+# *.hh, *.hxx, *.hpp, *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc,
+# *.m, *.markdown, *.md, *.mm, *.dox, *.py, *.pyw, *.f90, *.f95, *.f03, *.f08,
+# *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf and *.qsf.
+
+FILE_PATTERNS          = *.c \
+                         *.cc \
+                         *.cxx \
+                         *.cpp \
+                         *.c++ \
+                         *.java \
+                         *.ii \
+                         *.ixx \
+                         *.ipp \
+                         *.i++ \
+                         *.inl \
+                         *.idl \
+                         *.ddl \
+                         *.odl \
+                         *.h \
+                         *.hh \
+                         *.hxx \
+                         *.hpp \
+                         *.h++ \
+                         *.cs \
+                         *.d \
+                         *.php \
+                         *.php4 \
+                         *.php5 \
+                         *.phtml \
+                         *.inc \
+                         *.m \
+                         *.markdown \
+                         *.md \
+                         *.mm \
+                         *.dox \
+                         *.py \
+                         *.pyw \
+                         *.f90 \
+                         *.f95 \
+                         *.f03 \
+                         *.f08 \
+                         *.f \
+                         *.for \
+                         *.tcl \
+                         *.vhd \
+                         *.vhdl \
+                         *.ucf \
+                         *.qsf
+
+# The RECURSIVE tag can be used to specify whether or not subdirectories should
+# be searched for input files as well.
+# The default value is: NO.
+
+RECURSIVE              = NO
+
+# The EXCLUDE tag can be used to specify files and/or directories that should be
+# excluded from the INPUT source files. This way you can easily exclude a
+# subdirectory from a directory tree whose root is specified with the INPUT tag.
+#
+# Note that relative paths are relative to the directory from which doxygen is
+# run.
+
+EXCLUDE                =
+
+# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or
+# directories that are symbolic links (a Unix file system feature) are excluded
+# from the input.
+# The default value is: NO.
+
+EXCLUDE_SYMLINKS       = NO
+
+# If the value of the INPUT tag contains directories, you can use the
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
+# certain files from those directories.
+#
+# Note that the wildcards are matched against the file with absolute path, so to
+# exclude all test directories for example use the pattern */test/*
+
+EXCLUDE_PATTERNS       =
+
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
+# (namespaces, classes, functions, etc.) that should be excluded from the
+# output. The symbol name can be a fully qualified name, a word, or if the
+# wildcard * is used, a substring. Examples: ANamespace, AClass,
+# AClass::ANamespace, ANamespace::*Test
+#
+# Note that the wildcards are matched against the file with absolute path, so to
+# exclude all test directories use the pattern */test/*
+
+EXCLUDE_SYMBOLS        =
+
+# The EXAMPLE_PATH tag can be used to specify one or more files or directories
+# that contain example code fragments that are included (see the \include
+# command).
+
+EXAMPLE_PATH           =
+
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and
+# *.h) to filter out the source-files in the directories. If left blank all
+# files are included.
+
+EXAMPLE_PATTERNS       = *
+
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
+# searched for input files to be used with the \include or \dontinclude commands
+# irrespective of the value of the RECURSIVE tag.
+# The default value is: NO.
+
+EXAMPLE_RECURSIVE      = NO
+
+# The IMAGE_PATH tag can be used to specify one or more files or directories
+# that contain images that are to be included in the documentation (see the
+# \image command).
+
+IMAGE_PATH             =
+
+# The INPUT_FILTER tag can be used to specify a program that doxygen should
+# invoke to filter for each input file. Doxygen will invoke the filter program
+# by executing (via popen()) the command:
+#
+# <filter> <input-file>
+#
+# where <filter> is the value of the INPUT_FILTER tag, and <input-file> is the
+# name of an input file. Doxygen will then use the output that the filter
+# program writes to standard output. If FILTER_PATTERNS is specified, this tag
+# will be ignored.
+#
+# Note that the filter must not add or remove lines; it is applied before the
+# code is scanned, but not when the output code is generated. If lines are added
+# or removed, the anchors will not be placed correctly.
+#
+# Note that for custom extensions or not directly supported extensions you also
+# need to set EXTENSION_MAPPING for the extension otherwise the files are not
+# properly processed by doxygen.
+
+INPUT_FILTER           =
+
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
+# basis. Doxygen will compare the file name with each pattern and apply the
+# filter if there is a match. The filters are a list of the form: pattern=filter
+# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how
+# filters are used. If the FILTER_PATTERNS tag is empty or if none of the
+# patterns match the file name, INPUT_FILTER is applied.
+#
+# Note that for custom extensions or not directly supported extensions you also
+# need to set EXTENSION_MAPPING for the extension otherwise the files are not
+# properly processed by doxygen.
+
+FILTER_PATTERNS        =
+
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
+# INPUT_FILTER) will also be used to filter the input files that are used for
+# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES).
+# The default value is: NO.
+
+FILTER_SOURCE_FILES    = NO
+
+# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file
+# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and
+# it is also possible to disable source filtering for a specific pattern using
+# *.ext= (so without naming a filter).
+# This tag requires that the tag FILTER_SOURCE_FILES is set to YES.
+
+FILTER_SOURCE_PATTERNS =
+
+#---------------------------------------------------------------------------
+# Configuration options related to source browsing
+#---------------------------------------------------------------------------
+
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will be
+# generated. Documented entities will be cross-referenced with these sources.
+#
+# Note: To get rid of all source code in the generated output, make sure that
+# also VERBATIM_HEADERS is set to NO.
+# The default value is: NO.
+
+SOURCE_BROWSER         = NO
+
+# Setting the INLINE_SOURCES tag to YES will include the body of functions,
+# classes and enums directly into the documentation.
+# The default value is: NO.
+
+INLINE_SOURCES         = NO
+
+# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any
+# special comment blocks from generated source code fragments. Normal C, C++ and
+# Fortran comments will always remain visible.
+# The default value is: YES.
+
+STRIP_CODE_COMMENTS    = YES
+
+# If the REFERENCED_BY_RELATION tag is set to YES then for each documented
+# function all documented functions referencing it will be listed.
+# The default value is: NO.
+
+REFERENCED_BY_RELATION = NO
+
+# If the REFERENCES_RELATION tag is set to YES then for each documented function
+# all documented entities called/used by that function will be listed.
+# The default value is: NO.
+
+REFERENCES_RELATION    = NO
+
+# If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set
+# to YES then the hyperlinks from functions in REFERENCES_RELATION and
+# REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will
+# link to the documentation.
+# The default value is: YES.
+
+REFERENCES_LINK_SOURCE = YES
+
+# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the
+# source code will show a tooltip with additional information such as prototype,
+# brief description and links to the definition and documentation. Since this
+# will make the HTML file larger and loading of large files a bit slower, you
+# can opt to disable this feature.
+# The default value is: YES.
+# This tag requires that the tag SOURCE_BROWSER is set to YES.
+
+SOURCE_TOOLTIPS        = YES
+
+# If the USE_HTAGS tag is set to YES then the references to source code will
+# point to the HTML generated by the htags(1) tool instead of doxygen built-in
+# source browser. The htags tool is part of GNU's global source tagging system
+# (see http://www.gnu.org/software/global/global.html). You will need version
+# 4.8.6 or higher.
+#
+# To use it do the following:
+# - Install the latest version of global
+# - Enable SOURCE_BROWSER and USE_HTAGS in the config file
+# - Make sure the INPUT points to the root of the source tree
+# - Run doxygen as normal
+#
+# Doxygen will invoke htags (and that will in turn invoke gtags), so these
+# tools must be available from the command line (i.e. in the search path).
+#
+# The result: instead of the source browser generated by doxygen, the links to
+# source code will now point to the output of htags.
+# The default value is: NO.
+# This tag requires that the tag SOURCE_BROWSER is set to YES.
+
+USE_HTAGS              = NO
+
+# If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a
+# verbatim copy of the header file for each class for which an include is
+# specified. Set to NO to disable this.
+# See also: Section \class.
+# The default value is: YES.
+
+VERBATIM_HEADERS       = YES
+
+# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the
+# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the
+# cost of reduced performance. This can be particularly helpful with template
+# rich C++ code for which doxygen's built-in parser lacks the necessary type
+# information.
+# Note: The availability of this option depends on whether or not doxygen was
+# generated with the -Duse-libclang=ON option for CMake.
+# The default value is: NO.
+
+
+# If clang assisted parsing is enabled you can provide the compiler with command
+# line options that you would normally use when invoking the compiler. Note that
+# the include paths will already be set by doxygen for the files and directories
+# specified with INPUT and INCLUDE_PATH.
+# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES.
+
+
+#---------------------------------------------------------------------------
+# Configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all
+# compounds will be generated. Enable this if the project contains a lot of
+# classes, structs, unions or interfaces.
+# The default value is: YES.
+
+ALPHABETICAL_INDEX     = YES
+
+# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in
+# which the alphabetical index list will be split.
+# Minimum value: 1, maximum value: 20, default value: 5.
+# This tag requires that the tag ALPHABETICAL_INDEX is set to YES.
+
+COLS_IN_ALPHA_INDEX    = 5
+
+# In case all classes in a project start with a common prefix, all classes will
+# be put under the same header in the alphabetical index. The IGNORE_PREFIX tag
+# can be used to specify a prefix (or a list of prefixes) that should be ignored
+# while generating the index headers.
+# This tag requires that the tag ALPHABETICAL_INDEX is set to YES.
+
+IGNORE_PREFIX          =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the HTML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output
+# The default value is: YES.
+
+GENERATE_HTML          = YES
+
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a
+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
+# it.
+# The default directory is: html.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_OUTPUT            = html
+
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each
+# generated HTML page (for example: .htm, .php, .asp).
+# The default value is: .html.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_FILE_EXTENSION    = .html
+
+# The HTML_HEADER tag can be used to specify a user-defined HTML header file for
+# each generated HTML page. If the tag is left blank doxygen will generate a
+# standard header.
+#
+# To get valid HTML the header file that includes any scripts and style sheets
+# that doxygen needs, which is dependent on the configuration options used (e.g.
+# the setting GENERATE_TREEVIEW). It is highly recommended to start with a
+# default header using
+# doxygen -w html new_header.html new_footer.html new_stylesheet.css
+# YourConfigFile
+# and then modify the file new_header.html. See also section "Doxygen usage"
+# for information on how to generate the default header that doxygen normally
+# uses.
+# Note: The header is subject to change so you typically have to regenerate the
+# default header when upgrading to a newer version of doxygen. For a description
+# of the possible markers and block names see the documentation.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_HEADER            =
+
+# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each
+# generated HTML page. If the tag is left blank doxygen will generate a standard
+# footer. See HTML_HEADER for more information on how to generate a default
+# footer and what special commands can be used inside the footer. See also
+# section "Doxygen usage" for information on how to generate the default footer
+# that doxygen normally uses.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_FOOTER            =
+
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading style
+# sheet that is used by each HTML page. It can be used to fine-tune the look of
+# the HTML output. If left blank doxygen will generate a default style sheet.
+# See also section "Doxygen usage" for information on how to generate the style
+# sheet that doxygen normally uses.
+# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as
+# it is more robust and this tag (HTML_STYLESHEET) will in the future become
+# obsolete.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_STYLESHEET        =
+
+# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined
+# cascading style sheets that are included after the standard style sheets
+# created by doxygen. Using this option one can overrule certain style aspects.
+# This is preferred over using HTML_STYLESHEET since it does not replace the
+# standard style sheet and is therefore more robust against future updates.
+# Doxygen will copy the style sheet files to the output directory.
+# Note: The order of the extra style sheet files is of importance (e.g. the last
+# style sheet in the list overrules the setting of the previous ones in the
+# list). For an example see the documentation.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_EXTRA_STYLESHEET  =
+
+# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or
+# other source files which should be copied to the HTML output directory. Note
+# that these files will be copied to the base HTML output directory. Use the
+# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these
+# files. In the HTML_STYLESHEET file, use the file name only. Also note that the
+# files will be copied as-is; there are no commands or markers available.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_EXTRA_FILES       =
+
+# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors
+# in the HTML output. For a value of 0 the output will use grayscales only. A
+# value of 255 will produce the most vivid colors.
+# Minimum value: 0, maximum value: 255, default value: 100.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_COLORSTYLE_SAT    = 100
+
+# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the
+# luminance component of the colors in the HTML output. Values below 100
+# gradually make the output lighter, whereas values above 100 make the output
+# darker. The value divided by 100 is the actual gamma applied, so 80 represents
+# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not
+# change the gamma.
+# Minimum value: 40, maximum value: 240, default value: 80.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_COLORSTYLE_GAMMA  = 80
+
+# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML
+# page will contain the date and time when the page was generated. Setting this
+# to YES can help to show when doxygen was last run and thus if the
+# documentation is up to date.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_TIMESTAMP         = NO
+
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
+# documentation will contain sections that can be hidden and shown after the
+# page has loaded.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_DYNAMIC_SECTIONS  = NO
+
+# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries
+# shown in the various tree structured indices initially; the user can expand
+# and collapse entries dynamically later on. Doxygen will expand the tree to
+# such a level that at most the specified number of entries are visible (unless
+# a fully collapsed tree already exceeds this amount). So setting the number of
+# entries 1 will produce a full collapsed tree by default. 0 is a special value
+# representing an infinite number of entries and will result in a full expanded
+# tree by default.
+# Minimum value: 0, maximum value: 9999, default value: 100.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_INDEX_NUM_ENTRIES = 100
+
+# If the GENERATE_DOCSET tag is set to YES, additional index files will be
+# generated that can be used as input for Apple's Xcode 3 integrated development
+# environment (see: http://developer.apple.com/tools/xcode/), introduced with
+# OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a
+# Makefile in the HTML output directory. Running make will produce the docset in
+# that directory and running make install will install the docset in
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at
+# startup. See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html
+# for more information.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+GENERATE_DOCSET        = NO
+
+# This tag determines the name of the docset feed. A documentation feed provides
+# an umbrella under which multiple documentation sets from a single provider
+# (such as a company or product suite) can be grouped.
+# The default value is: Doxygen generated docs.
+# This tag requires that the tag GENERATE_DOCSET is set to YES.
+
+DOCSET_FEEDNAME        = "Doxygen generated docs"
+
+# This tag specifies a string that should uniquely identify the documentation
+# set bundle. This should be a reverse domain-name style string, e.g.
+# com.mycompany.MyDocSet. Doxygen will append .docset to the name.
+# The default value is: org.doxygen.Project.
+# This tag requires that the tag GENERATE_DOCSET is set to YES.
+
+DOCSET_BUNDLE_ID       = org.doxygen.Project
+
+# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify
+# the documentation publisher. This should be a reverse domain-name style
+# string, e.g. com.mycompany.MyDocSet.documentation.
+# The default value is: org.doxygen.Publisher.
+# This tag requires that the tag GENERATE_DOCSET is set to YES.
+
+DOCSET_PUBLISHER_ID    = org.doxygen.Publisher
+
+# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher.
+# The default value is: Publisher.
+# This tag requires that the tag GENERATE_DOCSET is set to YES.
+
+DOCSET_PUBLISHER_NAME  = Publisher
+
+# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three
+# additional HTML index files: index.hhp, index.hhc, and index.hhk. The
+# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop
+# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on
+# Windows.
+#
+# The HTML Help Workshop contains a compiler that can convert all HTML output
+# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML
+# files are now used as the Windows 98 help format, and will replace the old
+# Windows help format (.hlp) on all Windows platforms in the future. Compressed
+# HTML files also contain an index, a table of contents, and you can search for
+# words in the documentation. The HTML workshop also contains a viewer for
+# compressed HTML files.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+GENERATE_HTMLHELP      = NO
+
+# The CHM_FILE tag can be used to specify the file name of the resulting .chm
+# file. You can add a path in front of the file if the result should not be
+# written to the html output directory.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
+CHM_FILE               =
+
+# The HHC_LOCATION tag can be used to specify the location (absolute path
+# including file name) of the HTML help compiler (hhc.exe). If non-empty,
+# doxygen will try to run the HTML help compiler on the generated index.hhp.
+# The file has to be specified with full path.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
+HHC_LOCATION           =
+
+# The GENERATE_CHI flag controls if a separate .chi index file is generated
+# (YES) or that it should be included in the master .chm file (NO).
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
+GENERATE_CHI           = NO
+
+# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc)
+# and project file content.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
+CHM_INDEX_ENCODING     =
+
+# The BINARY_TOC flag controls whether a binary table of contents is generated
+# (YES) or a normal table of contents (NO) in the .chm file. Furthermore it
+# enables the Previous and Next buttons.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
+BINARY_TOC             = NO
+
+# The TOC_EXPAND flag can be set to YES to add extra items for group members to
+# the table of contents of the HTML help documentation and to the tree view.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
+TOC_EXPAND             = NO
+
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and
+# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that
+# can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help
+# (.qch) of the generated HTML documentation.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+GENERATE_QHP           = NO
+
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify
+# the file name of the resulting .qch file. The path specified is relative to
+# the HTML output folder.
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QCH_FILE               =
+
+# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help
+# Project output. For more information please see Qt Help Project / Namespace
+# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace).
+# The default value is: org.doxygen.Project.
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHP_NAMESPACE          = org.doxygen.Project
+
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt
+# Help Project output. For more information please see Qt Help Project / Virtual
+# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual-
+# folders).
+# The default value is: doc.
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHP_VIRTUAL_FOLDER     = doc
+
+# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom
+# filter to add. For more information please see Qt Help Project / Custom
+# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom-
+# filters).
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHP_CUST_FILTER_NAME   =
+
+# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the
+# custom filter to add. For more information please see Qt Help Project / Custom
+# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom-
+# filters).
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHP_CUST_FILTER_ATTRS  =
+
+# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this
+# project's filter section matches. Qt Help Project / Filter Attributes (see:
+# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes).
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHP_SECT_FILTER_ATTRS  =
+
+# The QHG_LOCATION tag can be used to specify the location of Qt's
+# qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the
+# generated .qhp file.
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHG_LOCATION           =
+
+# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be
+# generated, together with the HTML files, they form an Eclipse help plugin. To
+# install this plugin and make it available under the help contents menu in
+# Eclipse, the contents of the directory containing the HTML and XML files needs
+# to be copied into the plugins directory of eclipse. The name of the directory
+# within the plugins directory should be the same as the ECLIPSE_DOC_ID value.
+# After copying Eclipse needs to be restarted before the help appears.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+GENERATE_ECLIPSEHELP   = NO
+
+# A unique identifier for the Eclipse help plugin. When installing the plugin
+# the directory name containing the HTML and XML files should also have this
+# name. Each documentation set should have its own identifier.
+# The default value is: org.doxygen.Project.
+# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES.
+
+ECLIPSE_DOC_ID         = org.doxygen.Project
+
+# If you want full control over the layout of the generated HTML pages it might
+# be necessary to disable the index and replace it with your own. The
+# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top
+# of each HTML page. A value of NO enables the index and the value YES disables
+# it. Since the tabs in the index contain the same information as the navigation
+# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+DISABLE_INDEX          = NO
+
+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index
+# structure should be generated to display hierarchical information. If the tag
+# value is set to YES, a side panel will be generated containing a tree-like
+# index structure (just like the one that is generated for HTML Help). For this
+# to work a browser that supports JavaScript, DHTML, CSS and frames is required
+# (i.e. any modern browser). Windows users are probably better off using the
+# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can
+# further fine-tune the look of the index. As an example, the default style
+# sheet generated by doxygen has an example that shows how to put an image at
+# the root of the tree instead of the PROJECT_NAME. Since the tree basically has
+# the same information as the tab index, you could consider setting
+# DISABLE_INDEX to YES when enabling this option.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+GENERATE_TREEVIEW      = NO
+
+# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that
+# doxygen will group on one line in the generated HTML documentation.
+#
+# Note that a value of 0 will completely suppress the enum values from appearing
+# in the overview section.
+# Minimum value: 0, maximum value: 20, default value: 4.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+ENUM_VALUES_PER_LINE   = 4
+
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used
+# to set the initial width (in pixels) of the frame in which the tree is shown.
+# Minimum value: 0, maximum value: 1500, default value: 250.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+TREEVIEW_WIDTH         = 250
+
+# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to
+# external symbols imported via tag files in a separate window.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+EXT_LINKS_IN_WINDOW    = NO
+
+# Use this tag to change the font size of LaTeX formulas included as images in
+# the HTML documentation. When you change the font size after a successful
+# doxygen run you need to manually remove any form_*.png images from the HTML
+# output directory to force them to be regenerated.
+# Minimum value: 8, maximum value: 50, default value: 10.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+FORMULA_FONTSIZE       = 10
+
+# Use the FORMULA_TRANPARENT tag to determine whether or not the images
+# generated for formulas are transparent PNGs. Transparent PNGs are not
+# supported properly for IE 6.0, but are supported on all modern browsers.
+#
+# Note that when changing this option you need to delete any form_*.png files in
+# the HTML output directory before the changes have effect.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+FORMULA_TRANSPARENT    = YES
+
+# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see
+# http://www.mathjax.org) which uses client side Javascript for the rendering
+# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX
+# installed or if you want to formulas look prettier in the HTML output. When
+# enabled you may also need to install MathJax separately and configure the path
+# to it using the MATHJAX_RELPATH option.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+USE_MATHJAX            = NO
+
+# When MathJax is enabled you can set the default output format to be used for
+# the MathJax output. See the MathJax site (see:
+# http://docs.mathjax.org/en/latest/output.html) for more details.
+# Possible values are: HTML-CSS (which is slower, but has the best
+# compatibility), NativeMML (i.e. MathML) and SVG.
+# The default value is: HTML-CSS.
+# This tag requires that the tag USE_MATHJAX is set to YES.
+
+MATHJAX_FORMAT         = HTML-CSS
+
+# When MathJax is enabled you need to specify the location relative to the HTML
+# output directory using the MATHJAX_RELPATH option. The destination directory
+# should contain the MathJax.js script. For instance, if the mathjax directory
+# is located at the same level as the HTML output directory, then
+# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax
+# Content Delivery Network so you can quickly see the result without installing
+# MathJax. However, it is strongly recommended to install a local copy of
+# MathJax from http://www.mathjax.org before deployment.
+# The default value is: http://cdn.mathjax.org/mathjax/latest.
+# This tag requires that the tag USE_MATHJAX is set to YES.
+
+MATHJAX_RELPATH        = http://cdn.mathjax.org/mathjax/latest
+
+# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax
+# extension names that should be enabled during MathJax rendering. For example
+# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols
+# This tag requires that the tag USE_MATHJAX is set to YES.
+
+MATHJAX_EXTENSIONS     =
+
+# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces
+# of code that will be used on startup of the MathJax code. See the MathJax site
+# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an
+# example see the documentation.
+# This tag requires that the tag USE_MATHJAX is set to YES.
+
+MATHJAX_CODEFILE       =
+
+# When the SEARCHENGINE tag is enabled doxygen will generate a search box for
+# the HTML output. The underlying search engine uses javascript and DHTML and
+# should work on any modern browser. Note that when using HTML help
+# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET)
+# there is already a search function so this one should typically be disabled.
+# For large projects the javascript based search engine can be slow, then
+# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to
+# search using the keyboard; to jump to the search box use <access key> + S
+# (what the <access key> is depends on the OS and browser, but it is typically
+# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down
+# key> to jump into the search results window, the results can be navigated
+# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel
+# the search. The filter options can be selected when the cursor is inside the
+# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys>
+# to select a filter and <Enter> or <escape> to activate or cancel the filter
+# option.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+SEARCHENGINE           = YES
+
+# When the SERVER_BASED_SEARCH tag is enabled the search engine will be
+# implemented using a web server instead of a web client using Javascript. There
+# are two flavors of web server based searching depending on the EXTERNAL_SEARCH
+# setting. When disabled, doxygen will generate a PHP script for searching and
+# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing
+# and searching needs to be provided by external tools. See the section
+# "External Indexing and Searching" for details.
+# The default value is: NO.
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+SERVER_BASED_SEARCH    = NO
+
+# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP
+# script for searching. Instead the search results are written to an XML file
+# which needs to be processed by an external indexer. Doxygen will invoke an
+# external search engine pointed to by the SEARCHENGINE_URL option to obtain the
+# search results.
+#
+# Doxygen ships with an example indexer (doxyindexer) and search engine
+# (doxysearch.cgi) which are based on the open source search engine library
+# Xapian (see: http://xapian.org/).
+#
+# See the section "External Indexing and Searching" for details.
+# The default value is: NO.
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+EXTERNAL_SEARCH        = NO
+
+# The SEARCHENGINE_URL should point to a search engine hosted by a web server
+# which will return the search results when EXTERNAL_SEARCH is enabled.
+#
+# Doxygen ships with an example indexer (doxyindexer) and search engine
+# (doxysearch.cgi) which are based on the open source search engine library
+# Xapian (see: http://xapian.org/). See the section "External Indexing and
+# Searching" for details.
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+SEARCHENGINE_URL       =
+
+# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed
+# search data is written to a file for indexing by an external tool. With the
+# SEARCHDATA_FILE tag the name of this file can be specified.
+# The default file is: searchdata.xml.
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+SEARCHDATA_FILE        = searchdata.xml
+
+# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the
+# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is
+# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple
+# projects and redirect the results back to the right project.
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+EXTERNAL_SEARCH_ID     =
+
+# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen
+# projects other than the one defined by this configuration file, but that are
+# all added to the same external search index. Each project needs to have a
+# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of
+# to a relative location where the documentation can be found. The format is:
+# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ...
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+EXTRA_SEARCH_MAPPINGS  =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output.
+# The default value is: YES.
+
+GENERATE_LATEX         = YES
+
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. If a
+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
+# it.
+# The default directory is: latex.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_OUTPUT           = latex
+
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
+# invoked.
+#
+# Note that when enabling USE_PDFLATEX this option is only used for generating
+# bitmaps for formulas in the HTML output, but not in the Makefile that is
+# written to the output directory.
+# The default file is: latex.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_CMD_NAME         = latex
+
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate
+# index for LaTeX.
+# The default file is: makeindex.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+MAKEINDEX_CMD_NAME     = makeindex
+
+# If the COMPACT_LATEX tag is set to YES, doxygen generates more compact LaTeX
+# documents. This may be useful for small projects and may help to save some
+# trees in general.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+COMPACT_LATEX          = NO
+
+# The PAPER_TYPE tag can be used to set the paper type that is used by the
+# printer.
+# Possible values are: a4 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x
+# 14 inches) and executive (7.25 x 10.5 inches).
+# The default value is: a4.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+PAPER_TYPE             = a4
+
+# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names
+# that should be included in the LaTeX output. The package can be specified just
+# by its name or with the correct syntax as to be used with the LaTeX
+# \usepackage command. To get the times font for instance you can specify :
+# EXTRA_PACKAGES=times or EXTRA_PACKAGES={times}
+# To use the option intlimits with the amsmath package you can specify:
+# EXTRA_PACKAGES=[intlimits]{amsmath}
+# If left blank no extra packages will be included.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+EXTRA_PACKAGES         =
+
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for the
+# generated LaTeX document. The header should contain everything until the first
+# chapter. If it is left blank doxygen will generate a standard header. See
+# section "Doxygen usage" for information on how to let doxygen write the
+# default header to a separate file.
+#
+# Note: Only use a user-defined header if you know what you are doing! The
+# following commands have a special meaning inside the header: $title,
+# $datetime, $date, $doxygenversion, $projectname, $projectnumber,
+# $projectbrief, $projectlogo. Doxygen will replace $title with the empty
+# string, for the replacement values of the other commands the user is referred
+# to HTML_HEADER.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_HEADER           =
+
+# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the
+# generated LaTeX document. The footer should contain everything after the last
+# chapter. If it is left blank doxygen will generate a standard footer. See
+# LATEX_HEADER for more information on how to generate a default footer and what
+# special commands can be used inside the footer.
+#
+# Note: Only use a user-defined footer if you know what you are doing!
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_FOOTER           =
+
+# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined
+# LaTeX style sheets that are included after the standard style sheets created
+# by doxygen. Using this option one can overrule certain style aspects. Doxygen
+# will copy the style sheet files to the output directory.
+# Note: The order of the extra style sheet files is of importance (e.g. the last
+# style sheet in the list overrules the setting of the previous ones in the
+# list).
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_EXTRA_STYLESHEET =
+
+# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or
+# other source files which should be copied to the LATEX_OUTPUT output
+# directory. Note that the files will be copied as-is; there are no commands or
+# markers available.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_EXTRA_FILES      =
+
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is
+# prepared for conversion to PDF (using ps2pdf or pdflatex). The PDF file will
+# contain links (just like the HTML output) instead of page references. This
+# makes the output suitable for online browsing using a PDF viewer.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+PDF_HYPERLINKS         = YES
+
+# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate
+# the PDF file directly from the LaTeX files. Set this option to YES, to get a
+# higher quality PDF documentation.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+USE_PDFLATEX           = YES
+
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \batchmode
+# command to the generated LaTeX files. This will instruct LaTeX to keep running
+# if errors occur, instead of asking the user for help. This option is also used
+# when generating formulas in HTML.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_BATCHMODE        = NO
+
+# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the
+# index chapters (such as File Index, Compound Index, etc.) in the output.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_HIDE_INDICES     = NO
+
+# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source
+# code with syntax highlighting in the LaTeX output.
+#
+# Note that which sources are shown also depends on other settings such as
+# SOURCE_BROWSER.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_SOURCE_CODE      = NO
+
+# The LATEX_BIB_STYLE tag can be used to specify the style to use for the
+# bibliography, e.g. plainnat, or ieeetr. See
+# http://en.wikipedia.org/wiki/BibTeX and \cite for more info.
+# The default value is: plain.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_BIB_STYLE        = plain
+
+# If the LATEX_TIMESTAMP tag is set to YES then the footer of each generated
+# page will contain the date and time when the page was generated. Setting this
+# to NO can help when comparing the output of multiple runs.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_TIMESTAMP        = NO
+
+#---------------------------------------------------------------------------
+# Configuration options related to the RTF output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_RTF tag is set to YES, doxygen will generate RTF output. The
+# RTF output is optimized for Word 97 and may not look too pretty with other RTF
+# readers/editors.
+# The default value is: NO.
+
+GENERATE_RTF           = NO
+
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. If a
+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
+# it.
+# The default directory is: rtf.
+# This tag requires that the tag GENERATE_RTF is set to YES.
+
+RTF_OUTPUT             = rtf
+
+# If the COMPACT_RTF tag is set to YES, doxygen generates more compact RTF
+# documents. This may be useful for small projects and may help to save some
+# trees in general.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_RTF is set to YES.
+
+COMPACT_RTF            = NO
+
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated will
+# contain hyperlink fields. The RTF file will contain links (just like the HTML
+# output) instead of page references. This makes the output suitable for online
+# browsing using Word or some other Word compatible readers that support those
+# fields.
+#
+# Note: WordPad (write) and others do not support links.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_RTF is set to YES.
+
+RTF_HYPERLINKS         = NO
+
+# Load stylesheet definitions from file. Syntax is similar to doxygen's config
+# file, i.e. a series of assignments. You only have to provide replacements,
+# missing definitions are set to their default value.
+#
+# See also section "Doxygen usage" for information on how to generate the
+# default style sheet that doxygen normally uses.
+# This tag requires that the tag GENERATE_RTF is set to YES.
+
+RTF_STYLESHEET_FILE    =
+
+# Set optional variables used in the generation of an RTF document. Syntax is
+# similar to doxygen's config file. A template extensions file can be generated
+# using doxygen -e rtf extensionFile.
+# This tag requires that the tag GENERATE_RTF is set to YES.
+
+RTF_EXTENSIONS_FILE    =
+
+# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code
+# with syntax highlighting in the RTF output.
+#
+# Note that which sources are shown also depends on other settings such as
+# SOURCE_BROWSER.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_RTF is set to YES.
+
+RTF_SOURCE_CODE        = NO
+
+#---------------------------------------------------------------------------
+# Configuration options related to the man page output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for
+# classes and files.
+# The default value is: NO.
+
+GENERATE_MAN           = NO
+
+# The MAN_OUTPUT tag is used to specify where the man pages will be put. If a
+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
+# it. A directory man3 will be created inside the directory specified by
+# MAN_OUTPUT.
+# The default directory is: man.
+# This tag requires that the tag GENERATE_MAN is set to YES.
+
+MAN_OUTPUT             = man
+
+# The MAN_EXTENSION tag determines the extension that is added to the generated
+# man pages. In case the manual section does not start with a number, the number
+# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is
+# optional.
+# The default value is: .3.
+# This tag requires that the tag GENERATE_MAN is set to YES.
+
+MAN_EXTENSION          = .3
+
+# The MAN_SUBDIR tag determines the name of the directory created within
+# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by
+# MAN_EXTENSION with the initial . removed.
+# This tag requires that the tag GENERATE_MAN is set to YES.
+
+MAN_SUBDIR             =
+
+# If the MAN_LINKS tag is set to YES and doxygen generates man output, then it
+# will generate one additional man file for each entity documented in the real
+# man page(s). These additional files only source the real man page, but without
+# them the man command would be unable to find the correct page.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_MAN is set to YES.
+
+MAN_LINKS              = NO
+
+#---------------------------------------------------------------------------
+# Configuration options related to the XML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_XML tag is set to YES, doxygen will generate an XML file that
+# captures the structure of the code including all documentation.
+# The default value is: NO.
+
+GENERATE_XML           = NO
+
+# The XML_OUTPUT tag is used to specify where the XML pages will be put. If a
+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
+# it.
+# The default directory is: xml.
+# This tag requires that the tag GENERATE_XML is set to YES.
+
+XML_OUTPUT             = xml
+
+# If the XML_PROGRAMLISTING tag is set to YES, doxygen will dump the program
+# listings (including syntax highlighting and cross-referencing information) to
+# the XML output. Note that enabling this will significantly increase the size
+# of the XML output.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_XML is set to YES.
+
+XML_PROGRAMLISTING     = YES
+
+#---------------------------------------------------------------------------
+# Configuration options related to the DOCBOOK output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files
+# that can be used to generate PDF.
+# The default value is: NO.
+
+GENERATE_DOCBOOK       = NO
+
+# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in
+# front of it.
+# The default directory is: docbook.
+# This tag requires that the tag GENERATE_DOCBOOK is set to YES.
+
+DOCBOOK_OUTPUT         = docbook
+
+# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the
+# program listings (including syntax highlighting and cross-referencing
+# information) to the DOCBOOK output. Note that enabling this will significantly
+# increase the size of the DOCBOOK output.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_DOCBOOK is set to YES.
+
+DOCBOOK_PROGRAMLISTING = NO
+
+#---------------------------------------------------------------------------
+# Configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an
+# AutoGen Definitions (see http://autogen.sf.net) file that captures the
+# structure of the code including all documentation. Note that this feature is
+# still experimental and incomplete at the moment.
+# The default value is: NO.
+
+GENERATE_AUTOGEN_DEF   = NO
+
+#---------------------------------------------------------------------------
+# Configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_PERLMOD tag is set to YES, doxygen will generate a Perl module
+# file that captures the structure of the code including all documentation.
+#
+# Note that this feature is still experimental and incomplete at the moment.
+# The default value is: NO.
+
+GENERATE_PERLMOD       = NO
+
+# If the PERLMOD_LATEX tag is set to YES, doxygen will generate the necessary
+# Makefile rules, Perl scripts and LaTeX code to be able to generate PDF and DVI
+# output from the Perl module output.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_PERLMOD is set to YES.
+
+PERLMOD_LATEX          = NO
+
+# If the PERLMOD_PRETTY tag is set to YES, the Perl module output will be nicely
+# formatted so it can be parsed by a human reader. This is useful if you want to
+# understand what is going on. On the other hand, if this tag is set to NO, the
+# size of the Perl module output will be much smaller and Perl will parse it
+# just the same.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_PERLMOD is set to YES.
+
+PERLMOD_PRETTY         = YES
+
+# The names of the make variables in the generated doxyrules.make file are
+# prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. This is useful
+# so different doxyrules.make files included by the same Makefile don't
+# overwrite each other's variables.
+# This tag requires that the tag GENERATE_PERLMOD is set to YES.
+
+PERLMOD_MAKEVAR_PREFIX =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor
+#---------------------------------------------------------------------------
+
+# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all
+# C-preprocessor directives found in the sources and include files.
+# The default value is: YES.
+
+
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES then
+# the macro expansion is limited to the macros specified with the PREDEFINED and
+# EXPAND_AS_DEFINED tags.
+# The default value is: NO.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
+
+
+# The PREDEFINED tag can be used to specify one or more macro names that are
+# defined before the preprocessor is started (similar to the -D option of e.g.
+# gcc). The argument of the tag is a list of macros of the form: name or
+# name=definition (no spaces). If the definition and the "=" are omitted, "=1"
+# is assumed. To prevent a macro definition from being undefined via #undef or
+# recursively expanded use the := operator instead of the = operator.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
+
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this
+# tag can be used to specify a list of macro names that should be expanded. The
+# macro definition that is found in the sources will be used. Use the PREDEFINED
+# tag if you want to use a different macro definition that overrules the
+# definition found in the source code.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
+
+# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will
+# remove all references to function-like macros that are alone on a line, have
+# an all uppercase name, and do not end with a semicolon. Such function macros
+# are typically used for boiler-plate code, and will confuse the parser if not
+# removed.
+# The default value is: YES.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
+
+#---------------------------------------------------------------------------
+# Configuration options related to external references
+#---------------------------------------------------------------------------
+
+# The TAGFILES tag can be used to specify one or more tag files. For each tag
+# file the location of the external documentation should be added. The format of
+# a tag file without this location is as follows:
+# TAGFILES = file1 file2 ...
+# Adding location for the tag files is done as follows:
+# TAGFILES = file1=loc1 "file2 = loc2" ...
+# where loc1 and loc2 can be relative or absolute paths or URLs. See the
+# section "Linking to external documentation" for more information about the use
+# of tag files.
+# Note: Each tag file must have a unique name (where the name does NOT include
+# the path). If a tag file is not located in the directory in which doxygen is
+# run, you must also specify the path to the tagfile here.
+
+TAGFILES               =
+
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create a
+# tag file that is based on the input files it reads. See section "Linking to
+# external documentation" for more information about the usage of tag files.
+
+GENERATE_TAGFILE       =
+
+# If the ALLEXTERNALS tag is set to YES, all external class will be listed in
+# the class index. If set to NO, only the inherited external classes will be
+# listed.
+# The default value is: NO.
+
+ALLEXTERNALS           = NO
+
+# If the EXTERNAL_GROUPS tag is set to YES, all external groups will be listed
+# in the modules index. If set to NO, only the current project's groups will be
+# listed.
+# The default value is: YES.
+
+EXTERNAL_GROUPS        = YES
+
+# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in
+# the related pages index. If set to NO, only the current project's pages will
+# be listed.
+# The default value is: YES.
+
+EXTERNAL_PAGES         = YES
+
+# The PERL_PATH should be the absolute path and name of the perl script
+# interpreter (i.e. the result of 'which perl').
+# The default file (with absolute path) is: /usr/bin/perl.
+
+PERL_PATH              = /usr/bin/perl
+
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool
+#---------------------------------------------------------------------------
+
+# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram
+# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to
+# NO turns the diagrams off. Note that this option also works with HAVE_DOT
+# disabled, but it is recommended to install and use dot, since it yields more
+# powerful graphs.
+# The default value is: YES.
+
+CLASS_DIAGRAMS         = YES
+
+# You can define message sequence charts within doxygen comments using the \msc
+# command. Doxygen will then run the mscgen tool (see:
+# http://www.mcternan.me.uk/mscgen/)) to produce the chart and insert it in the
+# documentation. The MSCGEN_PATH tag allows you to specify the directory where
+# the mscgen tool resides. If left empty the tool is assumed to be found in the
+# default search path.
+
+MSCGEN_PATH            =
+
+# You can include diagrams made with dia in doxygen documentation. Doxygen will
+# then run dia to produce the diagram and insert it in the documentation. The
+# DIA_PATH tag allows you to specify the directory where the dia binary resides.
+# If left empty dia is assumed to be found in the default search path.
+
+DIA_PATH               =
+
+# If set to YES the inheritance and collaboration graphs will hide inheritance
+# and usage relations if the target is undocumented or is not a class.
+# The default value is: YES.
+
+HIDE_UNDOC_RELATIONS   = YES
+
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
+# available from the path. This tool is part of Graphviz (see:
+# http://www.graphviz.org/), a graph visualization toolkit from AT&T and Lucent
+# Bell Labs. The other options in this section have no effect if this option is
+# set to NO
+# The default value is: YES.
+
+HAVE_DOT               = YES
+
+# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed
+# to run in parallel. When set to 0 doxygen will base this on the number of
+# processors available in the system. You can set it explicitly to a value
+# larger than 0 to get control over the balance between CPU load and processing
+# speed.
+# Minimum value: 0, maximum value: 32, default value: 0.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_NUM_THREADS        = 0
+
+# When you want a differently looking font in the dot files that doxygen
+# generates you can specify the font name using DOT_FONTNAME. You need to make
+# sure dot is able to find the font, which can be done by putting it in a
+# standard location or by setting the DOTFONTPATH environment variable or by
+# setting DOT_FONTPATH to the directory containing the font.
+# The default value is: Helvetica.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_FONTNAME           = Helvetica
+
+# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of
+# dot graphs.
+# Minimum value: 4, maximum value: 24, default value: 10.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_FONTSIZE           = 10
+
+# By default doxygen will tell dot to use the default font as specified with
+# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set
+# the path where dot can find it using this tag.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_FONTPATH           =
+
+# If the CLASS_GRAPH tag is set to YES then doxygen will generate a graph for
+# each documented class showing the direct and indirect inheritance relations.
+# Setting this tag to YES will force the CLASS_DIAGRAMS tag to NO.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+CLASS_GRAPH            = YES
+
+# If the COLLABORATION_GRAPH tag is set to YES then doxygen will generate a
+# graph for each documented class showing the direct and indirect implementation
+# dependencies (inheritance, containment, and class references variables) of the
+# class with other documented classes.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+COLLABORATION_GRAPH    = YES
+
+# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for
+# groups, showing the direct groups dependencies.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+GROUP_GRAPHS           = YES
+
+# If the UML_LOOK tag is set to YES, doxygen will generate inheritance and
+# collaboration diagrams in a style similar to the OMG's Unified Modeling
+# Language.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+UML_LOOK               = NO
+
+# If the UML_LOOK tag is enabled, the fields and methods are shown inside the
+# class node. If there are many fields or methods and many nodes the graph may
+# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the
+# number of items for each type to make the size more manageable. Set this to 0
+# for no limit. Note that the threshold may be exceeded by 50% before the limit
+# is enforced. So when you set the threshold to 10, up to 15 fields may appear,
+# but if the number exceeds 15, the total amount of fields shown is limited to
+# 10.
+# Minimum value: 0, maximum value: 100, default value: 10.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+UML_LIMIT_NUM_FIELDS   = 10
+
+# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and
+# collaboration graphs will show the relations between templates and their
+# instances.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+TEMPLATE_RELATIONS     = NO
+
+# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are set to
+# YES then doxygen will generate a graph for each documented file showing the
+# direct and indirect include dependencies of the file with other documented
+# files.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+INCLUDE_GRAPH          = YES
+
+# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are
+# set to YES then doxygen will generate a graph for each documented file showing
+# the direct and indirect include dependencies of the file with other documented
+# files.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+INCLUDED_BY_GRAPH      = YES
+
+# If the CALL_GRAPH tag is set to YES then doxygen will generate a call
+# dependency graph for every global function or class method.
+#
+# Note that enabling this option will significantly increase the time of a run.
+# So in most cases it will be better to enable call graphs for selected
+# functions only using the \callgraph command. Disabling a call graph can be
+# accomplished by means of the command \hidecallgraph.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+CALL_GRAPH             = NO
+
+# If the CALLER_GRAPH tag is set to YES then doxygen will generate a caller
+# dependency graph for every global function or class method.
+#
+# Note that enabling this option will significantly increase the time of a run.
+# So in most cases it will be better to enable caller graphs for selected
+# functions only using the \callergraph command. Disabling a caller graph can be
+# accomplished by means of the command \hidecallergraph.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+CALLER_GRAPH           = NO
+
+# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical
+# hierarchy of all classes instead of a textual one.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+GRAPHICAL_HIERARCHY    = YES
+
+# If the DIRECTORY_GRAPH tag is set to YES then doxygen will show the
+# dependencies a directory has on other directories in a graphical way. The
+# dependency relations are determined by the #include relations between the
+# files in the directories.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DIRECTORY_GRAPH        = YES
+
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
+# generated by dot. For an explanation of the image formats see the section
+# output formats in the documentation of the dot tool (Graphviz (see:
+# http://www.graphviz.org/)).
+# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order
+# to make the SVG files visible in IE 9+ (other browsers do not have this
+# requirement).
+# Possible values are: png, png:cairo, png:cairo:cairo, png:cairo:gd, png:gd,
+# png:gd:gd, jpg, jpg:cairo, jpg:cairo:gd, jpg:gd, jpg:gd:gd, gif, gif:cairo,
+# gif:cairo:gd, gif:gd, gif:gd:gd, svg, png:gd, png:gd:gd, png:cairo,
+# png:cairo:gd, png:cairo:cairo, png:cairo:gdiplus, png:gdiplus and
+# png:gdiplus:gdiplus.
+# The default value is: png.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_IMAGE_FORMAT       = png
+
+# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to
+# enable generation of interactive SVG images that allow zooming and panning.
+#
+# Note that this requires a modern browser other than Internet Explorer. Tested
+# and working are Firefox, Chrome, Safari, and Opera.
+# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make
+# the SVG files visible. Older versions of IE do not have SVG support.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+INTERACTIVE_SVG        = NO
+
+# The DOT_PATH tag can be used to specify the path where the dot tool can be
+# found. If left blank, it is assumed the dot tool can be found in the path.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_PATH               =
+
+# The DOTFILE_DIRS tag can be used to specify one or more directories that
+# contain dot files that are included in the documentation (see the \dotfile
+# command).
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOTFILE_DIRS           =
+
+# The MSCFILE_DIRS tag can be used to specify one or more directories that
+# contain msc files that are included in the documentation (see the \mscfile
+# command).
+
+MSCFILE_DIRS           =
+
+# The DIAFILE_DIRS tag can be used to specify one or more directories that
+# contain dia files that are included in the documentation (see the \diafile
+# command).
+
+DIAFILE_DIRS           =
+
+# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the
+# path where java can find the plantuml.jar file. If left blank, it is assumed
+# PlantUML is not used or called during a preprocessing step. Doxygen will
+# generate a warning when it encounters a \startuml command in this case and
+# will not generate output for the diagram.
+
+PLANTUML_JAR_PATH      =
+
+# When using plantuml, the PLANTUML_CFG_FILE tag can be used to specify a
+# configuration file for plantuml.
+
+PLANTUML_CFG_FILE      =
+
+# When using plantuml, the specified paths are searched for files specified by
+# the !include statement in a plantuml block.
+
+PLANTUML_INCLUDE_PATH  =
+
+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of nodes
+# that will be shown in the graph. If the number of nodes in a graph becomes
+# larger than this value, doxygen will truncate the graph, which is visualized
+# by representing a node as a red box. Note that doxygen if the number of direct
+# children of the root node in a graph is already larger than
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note that
+# the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
+# Minimum value: 0, maximum value: 10000, default value: 50.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_GRAPH_MAX_NODES    = 50
+
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the graphs
+# generated by dot. A depth value of 3 means that only nodes reachable from the
+# root by following a path via at most 3 edges will be shown. Nodes that lay
+# further from the root node will be omitted. Note that setting this option to 1
+# or 2 may greatly reduce the computation time needed for large code bases. Also
+# note that the size of a graph can be further restricted by
+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
+# Minimum value: 0, maximum value: 1000, default value: 0.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+MAX_DOT_GRAPH_DEPTH    = 0
+
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
+# background. This is disabled by default, because dot on Windows does not seem
+# to support this out of the box.
+#
+# Warning: Depending on the platform used, enabling this option may lead to
+# badly anti-aliased labels on the edges of a graph (i.e. they become hard to
+# read).
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_TRANSPARENT        = NO
+
+# Set the DOT_MULTI_TARGETS tag to YES to allow dot to generate multiple output
+# files in one run (i.e. multiple -o and -T options on the command line). This
+# makes dot run faster, but since only newer versions of dot (>1.8.10) support
+# this, this feature is disabled by default.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_MULTI_TARGETS      = NO
+
+# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page
+# explaining the meaning of the various boxes and arrows in the dot generated
+# graphs.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+GENERATE_LEGEND        = YES
+
+# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot
+# files that are used to generate the various graphs.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_CLEANUP            = YES
Index: /EcnlProtoTool/trunk/mruby-2.1.1/LEGAL
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/LEGAL	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/LEGAL	(revision 439)
@@ -0,0 +1,6 @@
+LEGAL NOTICE INFORMATION
+------------------------
+
+All the files in this distribution are covered under the MIT license
+(see the file LICENSE) except some files mentioned below:
+
Index: /EcnlProtoTool/trunk/mruby-2.1.1/LICENSE
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/LICENSE	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/LICENSE	(revision 439)
@@ -0,0 +1,20 @@
+Copyright (c) 2020 mruby developers
+
+Permission is hereby granted, free of charge, to any person obtaining a
+copy of this software and associated documentation files (the "Software"),
+to deal in the Software without restriction, including without limitation
+the rights to use, copy, modify, merge, publish, distribute, sublicense,
+and/or sell copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
+
Index: /EcnlProtoTool/trunk/mruby-2.1.1/Makefile
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/Makefile	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/Makefile	(revision 439)
@@ -0,0 +1,15 @@
+# mruby is using Rake (http://rake.rubyforge.org) as a build tool.
+
+RAKE = build.bat
+
+all :
+	$(RAKE)
+.PHONY : all
+
+test : all
+	$(RAKE) test
+.PHONY : test
+
+clean :
+	$(RAKE) clean
+.PHONY : clean
Index: /EcnlProtoTool/trunk/mruby-2.1.1/NEWS
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/NEWS	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/NEWS	(revision 439)
@@ -0,0 +1,13 @@
+* NEWS
+
+This document is a list of user visible feature changes made between
+releases except for bug fixes.
+
+Note that each entry is kept so brief that no reason behind or
+reference information is supplied with.  For a full list of changes
+with all sufficient information, see the ChangeLog file.
+
+
+** Information about first release v1.0.0
+
+
Index: /EcnlProtoTool/trunk/mruby-2.1.1/README.md
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/README.md	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/README.md	(revision 439)
@@ -0,0 +1,101 @@
+[![Build Status][build-status-img]][travis-ci]
+
+## What is mruby
+
+mruby is the lightweight implementation of the Ruby language complying to (part
+of) the [ISO standard][ISO-standard]. Its syntax is Ruby 2.x compatible.
+
+mruby can be linked and embedded within your application.  We provide the
+interpreter program "mruby" and the interactive mruby shell "mirb" as examples.
+You can also compile Ruby programs into compiled byte code using the mruby
+compiler "mrbc".  All those tools reside in the "bin" directory.  "mrbc" is
+also able to generate compiled byte code in a C source file, see the "mrbtest"
+program under the "test" directory for an example.
+
+This achievement was sponsored by the Regional Innovation Creation R&D Programs
+of the Ministry of Economy, Trade and Industry of Japan.
+
+## How to get mruby
+
+The stable version 2.1.1 of mruby can be downloaded via the following URL: [https://github.com/mruby/mruby/archive/2.1.1.zip](https://github.com/mruby/mruby/archive/2.1.1.zip)
+
+The latest development version of mruby can be downloaded via the following URL: [https://github.com/mruby/mruby/zipball/master](https://github.com/mruby/mruby/zipball/master)
+
+The trunk of the mruby source tree can be checked out with the
+following command:
+
+    $ git clone https://github.com/mruby/mruby.git
+
+You can also install and compile mruby using [ruby-install](https://github.com/postmodern/ruby-install), [ruby-build](https://github.com/rbenv/ruby-build) or [rvm](https://github.com/rvm/rvm).
+
+## mruby home-page
+
+The URL of the mruby home-page is: https://mruby.org.
+
+## Mailing list
+
+We don't have a mailing list, but you can use [GitHub issues](https://github.com/mruby/mruby/issues).
+
+## How to compile and install (mruby and gems)
+
+See the [compile.md](https://github.com/mruby/mruby/blob/master/doc/guides/compile.md) file.
+
+## Running Tests
+
+To run the tests, execute the following from the project's root directory.
+
+    $ rake test
+
+## Building documentation
+
+There are two sets of documentation in mruby: the mruby API (generated by yard) and C API (Doxygen)
+
+To build both of them, simply go
+
+    rake doc
+
+You can also view them in your browser
+
+    rake view_api
+    rake view_capi
+
+## How to customize mruby (mrbgems)
+
+mruby contains a package manager called *mrbgems*. To create extensions
+in C and/or Ruby you should create a *GEM*. For a documentation of how to
+use mrbgems consult the file [mrbgems.md](https://github.com/mruby/mruby/blob/master/doc/guides/mrbgems.md).
+For example code of how to use mrbgems look into the folder *examples/mrbgems/*.
+
+## License
+
+mruby is released under the [MIT License](https://github.com/mruby/mruby/blob/master/LICENSE).
+
+## Note for License
+
+mruby has chosen a MIT License due to its permissive license allowing
+developers to target various environments such as embedded systems.
+However, the license requires the display of the copyright notice and license
+information in manuals for instance. Doing so for big projects can be
+complicated or troublesome.  This is why mruby has decided to display "mruby
+developers" as the copyright name to make it simple conventionally.
+In the future, mruby might ask you to distribute your new code
+(that you will commit,) under the MIT License as a member of
+"mruby developers" but contributors will keep their copyright.
+(We did not intend for contributors to transfer or waive their copyrights,
+Actual copyright holder name (contributors) will be listed in the AUTHORS
+file.)
+
+Please ask us if you want to distribute your code under another license.
+
+## How to Contribute
+
+See the [contribution guidelines][contribution-guidelines], and then send a pull
+request to <http://github.com/mruby/mruby>.  We consider you have granted
+non-exclusive right to your contributed code under MIT license.  If you want to
+be named as one of mruby developers, please include an update to the AUTHORS
+file in your pull request.
+
+[ISO-standard]: http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=59579
+[build-status-img]: https://travis-ci.org/mruby/mruby.svg?branch=master
+[contribution-guidelines]: https://github.com/mruby/mruby/blob/master/CONTRIBUTING.md
+[travis-ci]: https://travis-ci.org/mruby/mruby
Index: /EcnlProtoTool/trunk/mruby-2.1.1/Rakefile
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/Rakefile	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/Rakefile	(revision 439)
@@ -0,0 +1,162 @@
+# encoding: utf-8
+# Build description.
+# basic build file for mruby
+MRUBY_ROOT = File.dirname(File.expand_path(__FILE__))
+MRUBY_BUILD_HOST_IS_CYGWIN = RUBY_PLATFORM.include?('cygwin')
+MRUBY_BUILD_HOST_IS_OPENBSD = RUBY_PLATFORM.include?('openbsd')
+
+Rake.verbose(false) if Rake.verbose == Rake::DSL::DEFAULT
+
+$LOAD_PATH << File.join(MRUBY_ROOT, "lib")
+
+# load build systems
+require "mruby-core-ext"
+require "mruby/build"
+
+# load configuration file
+MRUBY_CONFIG = (ENV['MRUBY_CONFIG'] && ENV['MRUBY_CONFIG'] != '') ? ENV['MRUBY_CONFIG'] : "#{MRUBY_ROOT}/build_config.rb"
+load MRUBY_CONFIG
+
+# load basic rules
+MRuby.each_target do |build|
+  build.define_rules
+end
+
+# load custom rules
+load "#{MRUBY_ROOT}/src/mruby_core.rake"
+load "#{MRUBY_ROOT}/mrblib/mrblib.rake"
+
+load "#{MRUBY_ROOT}/tasks/mrbgems.rake"
+load "#{MRUBY_ROOT}/tasks/libmruby.rake"
+
+load "#{MRUBY_ROOT}/tasks/benchmark.rake"
+
+load "#{MRUBY_ROOT}/tasks/gitlab.rake"
+load "#{MRUBY_ROOT}/tasks/doc.rake"
+
+def install_D(src, dst)
+  rm_f dst
+  mkdir_p File.dirname(dst)
+  cp src, dst
+end
+
+##############################
+# generic build targets, rules
+task :default => :all
+
+bin_path = ENV['INSTALL_DIR'] || "#{MRUBY_ROOT}/bin"
+
+depfiles = MRuby.targets['host'].bins.map do |bin|
+  install_path = MRuby.targets['host'].exefile("#{bin_path}/#{bin}")
+  source_path = MRuby.targets['host'].exefile("#{MRuby.targets['host'].build_dir}/bin/#{bin}")
+
+  file install_path => source_path do |t|
+    install_D t.prerequisites.first, t.name
+  end
+
+  install_path
+end
+
+MRuby.each_target do |target|
+  gems.map do |gem|
+    current_dir = gem.dir.relative_path_from(Dir.pwd)
+    relative_from_root = gem.dir.relative_path_from(MRUBY_ROOT)
+    current_build_dir = File.expand_path "#{build_dir}/#{relative_from_root}"
+
+    if current_build_dir !~ /^#{Regexp.escape(build_dir)}/
+      current_build_dir = "#{build_dir}/mrbgems/#{gem.name}"
+    end
+
+    gem.bins.each do |bin|
+      exec = exefile("#{build_dir}/bin/#{bin}")
+      objs = Dir.glob("#{current_dir}/tools/#{bin}/*.{c,cpp,cxx,cc}").map { |f| objfile(f.pathmap("#{current_build_dir}/tools/#{bin}/%n")) }
+
+      file exec => objs + target.libraries do |t|
+        gem_flags = gems.map { |g| g.linker.flags }
+        gem_flags_before_libraries = gems.map { |g| g.linker.flags_before_libraries }
+        gem_flags_after_libraries = gems.map { |g| g.linker.flags_after_libraries }
+        gem_libraries = gems.map { |g| g.linker.libraries }
+        gem_library_paths = gems.map { |g| g.linker.library_paths }
+        linker.run t.name, t.prerequisites, gem_libraries, gem_library_paths, gem_flags, gem_flags_before_libraries, gem_flags_after_libraries
+
+        gem.call_post_build_event target
+      end
+
+      if target == MRuby.targets['host']
+        install_path = MRuby.targets['host'].exefile("#{bin_path}/#{bin}")
+
+        file install_path => exec do |t|
+          install_D t.prerequisites.first, t.name
+        end
+        depfiles += [ install_path ]
+      elsif target == MRuby.targets['host-debug']
+        unless MRuby.targets['host'].gems.map {|g| g.bins}.include?([bin])
+          install_path = MRuby.targets['host-debug'].exefile("#{bin_path}/#{bin}")
+
+          file install_path => exec do |t|
+            install_D t.prerequisites.first, t.name
+          end
+          depfiles += [ install_path ]
+        end
+      else
+        depfiles += [ exec ]
+      end
+    end
+  end
+end
+
+depfiles += MRuby.targets.map { |n, t|
+  t.libraries
+}.flatten
+
+depfiles += MRuby.targets.reject { |n, t| n == 'host' }.map { |n, t|
+  t.bins.map { |bin| t.exefile("#{t.build_dir}/bin/#{bin}") }
+}.flatten
+
+desc "build all targets, install (locally) in-repo"
+task :all => depfiles do
+  puts
+  puts "Build summary:"
+  puts
+  MRuby.each_target do
+    print_build_summary
+  end
+  MRuby::Lockfile.write
+end
+
+desc "run all mruby tests"
+task :test
+MRuby.each_target do
+  if test_enabled?
+    t = :"test_#{self.name}"
+    task t => ["all"] do
+      run_test
+    end
+    task :test => t
+  end
+
+  if bintest_enabled?
+    t = :"bintest_#{self.name}"
+    task t => ["all"] do
+      run_bintest
+    end
+    task :test => t
+  end
+end
+
+desc "clean all built and in-repo installed artifacts"
+task :clean do
+  MRuby.each_target do |t|
+    rm_rf t.build_dir
+  end
+  rm_f depfiles
+  puts "Cleaned up target build folder"
+end
+
+desc "clean everything!"
+task :deep_clean => ["clean", "clean_doc"] do
+  MRuby.each_target do |t|
+    rm_rf t.gem_clone_dir
+  end
+  puts "Cleaned up mrbgems build folder"
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/TODO
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/TODO	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/TODO	(revision 439)
@@ -0,0 +1,8 @@
+Things to do (Things that are not done yet)
+
+* special variables ($1,$2..)
+* super in aliased methods
+
+Things to improve (Done but things to fix)
+
+* Make additions as they are noticed.
Index: /EcnlProtoTool/trunk/mruby-2.1.1/appveyor.yml
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/appveyor.yml	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/appveyor.yml	(revision 439)
@@ -0,0 +1,50 @@
+version: "{build}"
+
+os: Visual Studio 2017
+
+shallow_clone: true
+
+
+cache:
+  - win_flex_bison
+
+
+environment:
+  matrix:
+    # Visual Studio 2017 64bit
+    - visualcpp: C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars64.bat
+
+    # Visual Studio 2017 32bit
+    - visualcpp: C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvarsall.bat
+      machine: x86
+
+    # Visual Studio 2015 64bit
+    - visualcpp: C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat
+      machine: amd64
+
+    # Visual Studio 2015 32bit
+    - visualcpp: C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat
+      machine: x86
+
+    # Visual Studio 2013 64bit
+    - visualcpp: C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\vcvarsall.bat
+      machine: amd64
+
+
+init:
+  - call "%visualcpp%" %machine%
+  # For using Rubyinstaller's Ruby 2.4 64bit
+  - set PATH=C:\Ruby24-x64\bin;%PATH%
+  - ruby --version
+
+
+install:
+  - if not exist win_flex_bison (
+      appveyor DownloadFile "https://github.com/lexxmark/winflexbison/releases/download/v.2.5.10/win_flex_bison-2.5.10.zip" &
+      7z x -y -owin_flex_bison win_flex_bison-2.5.10.zip
+    )
+
+build_script:
+  - set YACC=.\win_flex_bison\win_bison.exe
+  - set MRUBY_CONFIG=appveyor_config.rb
+  - rake -E $stdout.sync=true test
Index: /EcnlProtoTool/trunk/mruby-2.1.1/appveyor_config.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/appveyor_config.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/appveyor_config.rb	(revision 439)
@@ -0,0 +1,37 @@
+MRuby::Build.new('full-debug') do |conf|
+  toolchain :visualcpp
+  enable_debug
+
+  # include all core GEMs
+  conf.gembox 'full-core'
+  conf.cc.defines += %w(MRB_GC_STRESS MRB_METHOD_CACHE MRB_ENABLE_DEBUG_HOOK)
+
+  conf.enable_test
+end
+
+MRuby::Build.new do |conf|
+  toolchain :visualcpp
+
+  # include all core GEMs
+  conf.gembox 'full-core'
+  conf.compilers.each do |c|
+    c.defines += %w(MRB_GC_FIXED_ARENA)
+  end
+  conf.enable_bintest
+  conf.enable_test
+end
+
+MRuby::Build.new('cxx_abi') do |conf|
+  toolchain :visualcpp
+
+  conf.gembox 'full-core'
+  conf.compilers.each do |c|
+    c.defines += %w(MRB_GC_FIXED_ARENA)
+  end
+  conf.enable_bintest
+  conf.enable_test
+
+  enable_cxx_abi
+
+  build_mrbc_exec
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/benchmark/bm_ao_render.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/benchmark/bm_ao_render.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/benchmark/bm_ao_render.rb	(revision 439)
@@ -0,0 +1,314 @@
+# AO render benchmark
+# Original program (C) Syoyo Fujita in Javascript (and other languages)
+#      https://code.google.com/p/aobench/
+# Ruby(yarv2llvm) version by Hideki Miura
+# mruby version by Hideki Miura
+#
+
+IMAGE_WIDTH = 64
+IMAGE_HEIGHT = 64
+NSUBSAMPLES = 2
+NAO_SAMPLES = 8
+
+module Rand
+  # Use xorshift
+  @@x = 123456789
+  @@y = 362436069
+  @@z = 521288629
+  @@w = 88675123
+  BNUM = 1 << 29
+  BNUMF = BNUM.to_f
+  def self.rand
+    x = @@x
+    t = x ^ ((x & 0xfffff) << 11)
+    w = @@w
+    @@x, @@y, @@z = @@y, @@z, w
+    w = @@w = (w ^ (w >> 19) ^ (t ^ (t >> 8)))
+    (w % BNUM) / BNUMF
+  end
+end
+
+class Vec
+  def initialize(x, y, z)
+    @x = x
+    @y = y
+    @z = z
+  end
+
+  def x=(v); @x = v; end
+  def y=(v); @y = v; end
+  def z=(v); @z = v; end
+  def x; @x; end
+  def y; @y; end
+  def z; @z; end
+
+  def vadd(b)
+    Vec.new(@x + b.x, @y + b.y, @z + b.z)
+  end
+
+  def vsub(b)
+    Vec.new(@x - b.x, @y - b.y, @z - b.z)
+  end
+
+  def vcross(b)
+    Vec.new(@y * b.z - @z * b.y,
+            @z * b.x - @x * b.z,
+            @x * b.y - @y * b.x)
+  end
+
+  def vdot(b)
+    r = @x * b.x + @y * b.y + @z * b.z
+    r
+  end
+
+  def vlength
+    Math.sqrt(@x * @x + @y * @y + @z * @z)
+  end
+
+  def vnormalize
+    len = vlength
+    v = Vec.new(@x, @y, @z)
+    if len > 1.0e-17
+      v.x = v.x / len
+      v.y = v.y / len
+      v.z = v.z / len
+    end
+    v
+  end
+end
+
+
+class Sphere
+  def initialize(center, radius)
+    @center = center
+    @radius = radius
+  end
+
+  def center; @center; end
+  def radius; @radius; end
+
+  def intersect(ray, isect)
+    rs = ray.org.vsub(@center)
+    b = rs.vdot(ray.dir)
+    c = rs.vdot(rs) - (@radius * @radius)
+    d = b * b - c
+    if d > 0.0
+      t = - b - Math.sqrt(d)
+
+      if t > 0.0 and t < isect.t
+        isect.t = t
+        isect.hit = true
+        isect.pl = Vec.new(ray.org.x + ray.dir.x * t,
+                          ray.org.y + ray.dir.y * t,
+                          ray.org.z + ray.dir.z * t)
+        n = isect.pl.vsub(@center)
+        isect.n = n.vnormalize
+      end
+    end
+  end
+end
+
+class Plane
+  def initialize(p, n)
+    @p = p
+    @n = n
+  end
+
+  def intersect(ray, isect)
+    d = -@p.vdot(@n)
+    v = ray.dir.vdot(@n)
+    v0 = v
+    if v < 0.0
+      v0 = -v
+    end
+    if v0 < 1.0e-17
+      return
+    end
+
+    t = -(ray.org.vdot(@n) + d) / v
+
+    if t > 0.0 and t < isect.t
+      isect.hit = true
+      isect.t = t
+      isect.n = @n
+      isect.pl = Vec.new(ray.org.x + t * ray.dir.x,
+                        ray.org.y + t * ray.dir.y,
+                        ray.org.z + t * ray.dir.z)
+    end
+  end
+end
+
+class Ray
+  def initialize(org, dir)
+    @org = org
+    @dir = dir
+  end
+
+  def org; @org; end
+  def org=(v); @org = v; end
+  def dir; @dir; end
+  def dir=(v); @dir = v; end
+end
+
+class Isect
+  def initialize
+    @t = 10000000.0
+    @hit = false
+    @pl = Vec.new(0.0, 0.0, 0.0)
+    @n = Vec.new(0.0, 0.0, 0.0)
+  end
+
+  def t; @t; end
+  def t=(v); @t = v; end
+  def hit; @hit; end
+  def hit=(v); @hit = v; end
+  def pl; @pl; end
+  def pl=(v); @pl = v; end
+  def n; @n; end
+  def n=(v); @n = v; end
+end
+
+def clamp(f)
+  i = f * 255.5
+  if i > 255.0
+    i = 255.0
+  end
+  if i < 0.0
+    i = 0.0
+  end
+  i.to_i
+end
+
+def otherBasis(basis, n)
+  basis[2] = Vec.new(n.x, n.y, n.z)
+  basis[1] = Vec.new(0.0, 0.0, 0.0)
+
+  if n.x < 0.6 and n.x > -0.6
+    basis[1].x = 1.0
+  elsif n.y < 0.6 and n.y > -0.6
+    basis[1].y = 1.0
+  elsif n.z < 0.6 and n.z > -0.6
+    basis[1].z = 1.0
+  else
+    basis[1].x = 1.0
+  end
+
+  basis[0] = basis[1].vcross(basis[2])
+  basis[0] = basis[0].vnormalize
+
+  basis[1] = basis[2].vcross(basis[0])
+  basis[1] = basis[1].vnormalize
+end
+
+class Scene
+  def initialize
+    @spheres = Array.new
+    @spheres[0] = Sphere.new(Vec.new(-2.0, 0.0, -3.5), 0.5)
+    @spheres[1] = Sphere.new(Vec.new(-0.5, 0.0, -3.0), 0.5)
+    @spheres[2] = Sphere.new(Vec.new(1.0, 0.0, -2.2), 0.5)
+    @plane = Plane.new(Vec.new(0.0, -0.5, 0.0), Vec.new(0.0, 1.0, 0.0))
+  end
+
+  def ambient_occlusion(isect)
+    basis = Array.new(3)
+    otherBasis(basis, isect.n)
+
+    ntheta    = NAO_SAMPLES
+    nphi      = NAO_SAMPLES
+    eps       = 0.0001
+    occlusion = 0.0
+
+    p0 = Vec.new(isect.pl.x + eps * isect.n.x,
+                isect.pl.y + eps * isect.n.y,
+                isect.pl.z + eps * isect.n.z)
+    nphi.times do
+      ntheta.times do
+        r = Rand::rand
+        phi = 2.0 * 3.14159265 * Rand::rand
+        x = Math.cos(phi) * Math.sqrt(1.0 - r)
+        y = Math.sin(phi) * Math.sqrt(1.0 - r)
+        z = Math.sqrt(r)
+
+        rx = x * basis[0].x + y * basis[1].x + z * basis[2].x
+        ry = x * basis[0].y + y * basis[1].y + z * basis[2].y
+        rz = x * basis[0].z + y * basis[1].z + z * basis[2].z
+
+        raydir = Vec.new(rx, ry, rz)
+        ray = Ray.new(p0, raydir)
+
+        occisect = Isect.new
+        @spheres[0].intersect(ray, occisect)
+        @spheres[1].intersect(ray, occisect)
+        @spheres[2].intersect(ray, occisect)
+        @plane.intersect(ray, occisect)
+        if occisect.hit
+          occlusion = occlusion + 1.0
+        else
+          0.0
+        end
+      end
+    end
+
+    occlusion = (ntheta.to_f * nphi.to_f - occlusion) / (ntheta.to_f * nphi.to_f)
+    Vec.new(occlusion, occlusion, occlusion)
+  end
+
+  def render(w, h, nsubsamples)
+    cnt = 0
+    nsf = nsubsamples.to_f
+    h.times do |y|
+      w.times do |x|
+        rad = Vec.new(0.0, 0.0, 0.0)
+
+        # Subsmpling
+        nsubsamples.times do |v|
+          nsubsamples.times do |u|
+            cnt = cnt + 1
+            wf = w.to_f
+            hf = h.to_f
+            xf = x.to_f
+            yf = y.to_f
+            uf = u.to_f
+            vf = v.to_f
+
+            px = (xf + (uf / nsf) - (wf / 2.0)) / (wf / 2.0)
+            py = -(yf + (vf / nsf) - (hf / 2.0)) / (hf / 2.0)
+
+            eye = Vec.new(px, py, -1.0).vnormalize
+
+            ray = Ray.new(Vec.new(0.0, 0.0, 0.0), eye)
+
+            isect = Isect.new
+            @spheres[0].intersect(ray, isect)
+            @spheres[1].intersect(ray, isect)
+            @spheres[2].intersect(ray, isect)
+            @plane.intersect(ray, isect)
+            if isect.hit
+              col = ambient_occlusion(isect)
+              rad.x = rad.x + col.x
+              rad.y = rad.y + col.y
+              rad.z = rad.z + col.z
+            else
+              0.0
+            end
+          end
+        end
+
+        r = rad.x / (nsf * nsf)
+        g = rad.y / (nsf * nsf)
+        b = rad.z / (nsf * nsf)
+        printf("%c", clamp(r))
+        printf("%c", clamp(g))
+        printf("%c", clamp(b))
+      end
+    end
+  end
+end
+
+# File.open("ao.ppm", "w") do |fp|
+  printf("P6\n")
+  printf("%d %d\n", IMAGE_WIDTH, IMAGE_HEIGHT)
+  printf("255\n", IMAGE_WIDTH, IMAGE_HEIGHT)
+  Scene.new.render(IMAGE_WIDTH, IMAGE_HEIGHT, NSUBSAMPLES)
+#  Scene.new.render(256, 256, 2)
+# end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/benchmark/bm_app_lc_fizzbuzz.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/benchmark/bm_app_lc_fizzbuzz.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/benchmark/bm_app_lc_fizzbuzz.rb	(revision 439)
@@ -0,0 +1,51 @@
+#
+# FizzBuzz program using only lambda calculus
+#
+# This program is quoted from
+#   "Understanding Computation" by Tom Stuart
+#   http://computationbook.com/
+#
+# You can understand why this program works fine by reading this book.
+#
+
+solution = -> k { -> f { -> f { -> x { f[-> y { x[x][y] }] }[-> x { f[-> y { x[x][y] }] }] }[-> f { -> l { -> x { -> g { -> b { b }[-> p { p[-> x { -> y { x } }] }[l]][x][-> y { g[f[-> l { -> p { p[-> x { -> y { y } }] }[-> p { p[-> x { -> y { y } }] }[l]] }[l]][x][g]][-> l { -> p { p[-> x { -> y { x } }] }[-> p { p[-> x { -> y { y } }] }[l]] }[l]][y] }] } } } }][k][-> x { -> y { -> f { f[x][y] } } }[-> x { -> y { x } }][-> x { -> y { x } }]][-> l { -> x { -> l { -> x { -> x { -> y { -> f { f[x][y] } } }[-> x { -> y { y } }][-> x { -> y { -> f { f[x][y] } } }[x][l]] } }[l][f[x]] } }] } }[-> f { -> x { f[-> y { x[x][y] }] }[-> x { f[-> y { x[x][y] }] }] }[-> f { -> m { -> n { -> b { b }[-> m { -> n { -> n { n[-> x { -> x { -> y { y } } }][-> x { -> y { x } }] }[-> m { -> n { n[-> n { -> p { p[-> x { -> y { x } }] }[n[-> p { -> x { -> y { -> f { f[x][y] } } }[-> p { p[-> x { -> y { y } }] }[p]][-> n { -> p { -> x { p[n[p][x]] } } }[-> p { p[-> x { -> y { y } }] }[p]]] }][-> x { -> y { -> f { f[x][y] } } }[-> p { -> x { x } }][-> p { -> x { x } }]]] }][m] } }[m][n]] } }[m][n]][-> x { -> l { -> x { -> x { -> y { -> f { f[x][y] } } }[-> x { -> y { y } }][-> x { -> y { -> f { f[x][y] } } }[x][l]] } }[f[-> n { -> p { -> x { p[n[p][x]] } } }[m]][n]][m][x] }][-> x { -> y { -> f { f[x][y] } } }[-> x { -> y { x } }][-> x { -> y { x } }]] } } }][-> p { -> x { p[x] } }][-> p { -> x { p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[x]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]] } }]][-> n { -> b { b }[-> n { n[-> x { -> x { -> y { y } } }][-> x { -> y { x } }] }[-> f { -> x { f[-> y { x[x][y] }] }[-> x { f[-> y { x[x][y] }] }] }[-> f { -> m { -> n { -> b { b }[-> m { -> n { -> n { n[-> x { -> x { -> y { y } } }][-> x { -> y { x } }] }[-> m { -> n { n[-> n { -> p { p[-> x { -> y { x } }] }[n[-> p { -> x { -> y { -> f { f[x][y] } } }[-> p { p[-> x { -> y { y } }] }[p]][-> n { -> p { -> x { p[n[p][x]] } } }[-> p { p[-> x { -> y { y } }] }[p]]] }][-> x { -> y { -> f { f[x][y] } } }[-> p { -> x { x } }][-> p { -> x { x } }]]] }][m] } }[m][n]] } }[n][m]][-> x { f[-> m { -> n { n[-> n { -> p { p[-> x { -> y { x } }] }[n[-> p { -> x { -> y { -> f { f[x][y] } } }[-> p { p[-> x { -> y { y } }] }[p]][-> n { -> p { -> x { p[n[p][x]] } } }[-> p { p[-> x { -> y { y } }] }[p]]] }][-> x { -> y { -> f { f[x][y] } } }[-> p { -> x { x } }][-> p { -> x { x } }]]] }][m] } }[m][n]][n][x] }][m] } } }][n][-> p { -> x { p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[x]]]]]]]]]]]]]]] } }]]][-> l { -> x { -> x { -> y { -> f { f[x][y] } } }[-> x { -> y { y } }][-> x { -> y { -> f { f[x][y] } } }[x][l]] } }[-> l { -> x { -> x { -> y { -> f { f[x][y] } } }[-> x { -> y { y } }][-> x { -> y { -> f { f[x][y] } } }[x][l]] } }[-> l { -> x { -> x { -> y { -> f { f[x][y] } } }[-> x { -> y { y } }][-> x { -> y { -> f { f[x][y] } } }[x][l]] } }[-> l { -> x { -> x { -> y { -> f { f[x][y] } } }[-> x { -> y { y } }][-> x { -> y { -> f { f[x][y] } } }[x][l]] } }[-> l { -> x { -> x { -> y { -> f { f[x][y] } } }[-> x { -> y { y } }][-> x { -> y { -> f { f[x][y] } } }[x][l]] } }[-> l { -> x { -> x { -> y { -> f { f[x][y] } } }[-> x { -> y { y } }][-> x { -> y { -> f { f[x][y] } } }[x][l]] } }[-> l { -> x { -> x { -> y { -> f { f[x][y] } } }[-> x { -> y { y } }][-> x { -> y { -> f { f[x][y] } } }[x][l]] } }[-> l { -> x { -> x { -> y { -> f { f[x][y] } } }[-> x { -> y { y } }][-> x { -> y { -> f { f[x][y] } } }[x][l]] } }[-> x { -> y { -> f { f[x][y] } } }[-> x { -> y { x } }][-> x { -> y { x } }]][-> n { -> p { -> x { p[n[p][x]] } } }[-> n { -> p { -> x { p[n[p][x]] } } }[-> n { -> p { -> x { p[n[p][x]] } } }[-> n { -> p { -> x { p[n[p][x]] } } }[-> m { -> n { n[-> m { -> n { n[-> n { -> p { -> x { p[n[p][x]] } } }][m] } }[m]][-> p { -> x { x } }] } }[-> p { -> x { p[p[x]] } }][-> p { -> x { p[p[p[p[p[x]]]]] } }]]]]]]][-> n { -> p { -> x { p[n[p][x]] } } }[-> n { -> p { -> x { p[n[p][x]] } } }[-> n { -> p { -> x { p[n[p][x]] } } }[-> n { -> p { -> x { p[n[p][x]] } } }[-> m { -> n { n[-> m { -> n { n[-> n { -> p { -> x { p[n[p][x]] } } }][m] } }[m]][-> p { -> x { x } }] } }[-> p { -> x { p[p[x]] } }][-> p { -> x { p[p[p[p[p[x]]]]] } }]]]]]]][-> n { -> p { -> x { p[n[p][x]] } } }[-> n { -> p { -> x { p[n[p][x]] } } }[-> n { -> p { -> x { p[n[p][x]] } } }[-> m { -> n { n[-> m { -> n { n[-> n { -> p { -> x { p[n[p][x]] } } }][m] } }[m]][-> p { -> x { x } }] } }[-> p { -> x { p[p[x]] } }][-> p { -> x { p[p[p[p[p[x]]]]] } }]]]]]][-> m { -> n { n[-> m { -> n { n[-> n { -> p { -> x { p[n[p][x]] } } }][m] } }[m]][-> p { -> x { x } }] } }[-> p { -> x { p[p[x]] } }][-> p { -> x { p[p[p[p[p[x]]]]] } }]]][-> n { -> p { -> x { p[n[p][x]] } } }[-> n { -> p { -> x { p[n[p][x]] } } }[-> n { -> p { -> x { p[n[p][x]] } } }[-> n { -> p { -> x { p[n[p][x]] } } }[-> m { -> n { n[-> m { -> n { n[-> n { -> p { -> x { p[n[p][x]] } } }][m] } }[m]][-> p { -> x { x } }] } }[-> p { -> x { p[p[x]] } }][-> p { -> x { p[p[p[p[p[x]]]]] } }]]]]]]][-> n { -> p { -> x { p[n[p][x]] } } }[-> n { -> p { -> x { p[n[p][x]] } } }[-> n { -> p { -> x { p[n[p][x]] } } }[-> n { -> p { -> x { p[n[p][x]] } } }[-> m { -> n { n[-> m { -> n { n[-> n { -> p { -> x { p[n[p][x]] } } }][m] } }[m]][-> p { -> x { x } }] } }[-> p { -> x { p[p[x]] } }][-> p { -> x { p[p[p[p[p[x]]]]] } }]]]]]]][-> n { -> p { -> x { p[n[p][x]] } } }[-> n { -> p { -> x { p[n[p][x]] } } }[-> m { -> n { n[-> m { -> n { n[-> n { -> p { -> x { p[n[p][x]] } } }][m] } }[m]][-> p { -> x { x } }] } }[-> p { -> x { p[p[x]] } }][-> p { -> x { p[p[p[p[p[x]]]]] } }]]]]][-> n { -> p { -> x { p[n[p][x]] } } }[-> m { -> n { n[-> m { -> n { n[-> n { -> p { -> x { p[n[p][x]] } } }][m] } }[m]][-> p { -> x { x } }] } }[-> p { -> x { p[p[x]] } }][-> p { -> x { p[p[p[p[p[x]]]]] } }]]]][-> b { b }[-> n { n[-> x { -> x { -> y { y } } }][-> x { -> y { x } }] }[-> f { -> x { f[-> y { x[x][y] }] }[-> x { f[-> y { x[x][y] }] }] }[-> f { -> m { -> n { -> b { b }[-> m { -> n { -> n { n[-> x { -> x { -> y { y } } }][-> x { -> y { x } }] }[-> m { -> n { n[-> n { -> p { p[-> x { -> y { x } }] }[n[-> p { -> x { -> y { -> f { f[x][y] } } }[-> p { p[-> x { -> y { y } }] }[p]][-> n { -> p { -> x { p[n[p][x]] } } }[-> p { p[-> x { -> y { y } }] }[p]]] }][-> x { -> y { -> f { f[x][y] } } }[-> p { -> x { x } }][-> p { -> x { x } }]]] }][m] } }[m][n]] } }[n][m]][-> x { f[-> m { -> n { n[-> n { -> p { p[-> x { -> y { x } }] }[n[-> p { -> x { -> y { -> f { f[x][y] } } }[-> p { p[-> x { -> y { y } }] }[p]][-> n { -> p { -> x { p[n[p][x]] } } }[-> p { p[-> x { -> y { y } }] }[p]]] }][-> x { -> y { -> f { f[x][y] } } }[-> p { -> x { x } }][-> p { -> x { x } }]]] }][m] } }[m][n]][n][x] }][m] } } }][n][-> p { -> x { p[p[p[x]]] } }]]][-> l { -> x { -> x { -> y { -> f { f[x][y] } } }[-> x { -> y { y } }][-> x { -> y { -> f { f[x][y] } } }[x][l]] } }[-> l { -> x { -> x { -> y { -> f { f[x][y] } } }[-> x { -> y { y } }][-> x { -> y { -> f { f[x][y] } } }[x][l]] } }[-> l { -> x { -> x { -> y { -> f { f[x][y] } } }[-> x { -> y { y } }][-> x { -> y { -> f { f[x][y] } } }[x][l]] } }[-> l { -> x { -> x { -> y { -> f { f[x][y] } } }[-> x { -> y { y } }][-> x { -> y { -> f { f[x][y] } } }[x][l]] } }[-> x { -> y { -> f { f[x][y] } } }[-> x { -> y { x } }][-> x { -> y { x } }]][-> n { -> p { -> x { p[n[p][x]] } } }[-> n { -> p { -> x { p[n[p][x]] } } }[-> n { -> p { -> x { p[n[p][x]] } } }[-> n { -> p { -> x { p[n[p][x]] } } }[-> m { -> n { n[-> m { -> n { n[-> n { -> p { -> x { p[n[p][x]] } } }][m] } }[m]][-> p { -> x { x } }] } }[-> p { -> x { p[p[x]] } }][-> p { -> x { p[p[p[p[p[x]]]]] } }]]]]]]][-> n { -> p { -> x { p[n[p][x]] } } }[-> n { -> p { -> x { p[n[p][x]] } } }[-> n { -> p { -> x { p[n[p][x]] } } }[-> n { -> p { -> x { p[n[p][x]] } } }[-> m { -> n { n[-> m { -> n { n[-> n { -> p { -> x { p[n[p][x]] } } }][m] } }[m]][-> p { -> x { x } }] } }[-> p { -> x { p[p[x]] } }][-> p { -> x { p[p[p[p[p[x]]]]] } }]]]]]]][-> n { -> p { -> x { p[n[p][x]] } } }[-> n { -> p { -> x { p[n[p][x]] } } }[-> m { -> n { n[-> m { -> n { n[-> n { -> p { -> x { p[n[p][x]] } } }][m] } }[m]][-> p { -> x { x } }] } }[-> p { -> x { p[p[x]] } }][-> p { -> x { p[p[p[p[p[x]]]]] } }]]]]][-> n { -> p { -> x { p[n[p][x]] } } }[-> m { -> n { n[-> m { -> n { n[-> n { -> p { -> x { p[n[p][x]] } } }][m] } }[m]][-> p { -> x { x } }] } }[-> p { -> x { p[p[x]] } }][-> p { -> x { p[p[p[p[p[x]]]]] } }]]]][-> b { b }[-> n { n[-> x { -> x { -> y { y } } }][-> x { -> y { x } }] }[-> f { -> x { f[-> y { x[x][y] }] }[-> x { f[-> y { x[x][y] }] }] }[-> f { -> m { -> n { -> b { b }[-> m { -> n { -> n { n[-> x { -> x { -> y { y } } }][-> x { -> y { x } }] }[-> m { -> n { n[-> n { -> p { p[-> x { -> y { x } }] }[n[-> p { -> x { -> y { -> f { f[x][y] } } }[-> p { p[-> x { -> y { y } }] }[p]][-> n { -> p { -> x { p[n[p][x]] } } }[-> p { p[-> x { -> y { y } }] }[p]]] }][-> x { -> y { -> f { f[x][y] } } }[-> p { -> x { x } }][-> p { -> x { x } }]]] }][m] } }[m][n]] } }[n][m]][-> x { f[-> m { -> n { n[-> n { -> p { p[-> x { -> y { x } }] }[n[-> p { -> x { -> y { -> f { f[x][y] } } }[-> p { p[-> x { -> y { y } }] }[p]][-> n { -> p { -> x { p[n[p][x]] } } }[-> p { p[-> x { -> y { y } }] }[p]]] }][-> x { -> y { -> f { f[x][y] } } }[-> p { -> x { x } }][-> p { -> x { x } }]]] }][m] } }[m][n]][n][x] }][m] } } }][n][-> p { -> x { p[p[p[p[p[x]]]]] } }]]][-> l { -> x { -> x { -> y { -> f { f[x][y] } } }[-> x { -> y { y } }][-> x { -> y { -> f { f[x][y] } } }[x][l]] } }[-> l { -> x { -> x { -> y { -> f { f[x][y] } } }[-> x { -> y { y } }][-> x { -> y { -> f { f[x][y] } } }[x][l]] } }[-> l { -> x { -> x { -> y { -> f { f[x][y] } } }[-> x { -> y { y } }][-> x { -> y { -> f { f[x][y] } } }[x][l]] } }[-> l { -> x { -> x { -> y { -> f { f[x][y] } } }[-> x { -> y { y } }][-> x { -> y { -> f { f[x][y] } } }[x][l]] } }[-> x { -> y { -> f { f[x][y] } } }[-> x { -> y { x } }][-> x { -> y { x } }]][-> n { -> p { -> x { p[n[p][x]] } } }[-> n { -> p { -> x { p[n[p][x]] } } }[-> n { -> p { -> x { p[n[p][x]] } } }[-> n { -> p { -> x { p[n[p][x]] } } }[-> m { -> n { n[-> m { -> n { n[-> n { -> p { -> x { p[n[p][x]] } } }][m] } }[m]][-> p { -> x { x } }] } }[-> p { -> x { p[p[x]] } }][-> p { -> x { p[p[p[p[p[x]]]]] } }]]]]]]][-> n { -> p { -> x { p[n[p][x]] } } }[-> n { -> p { -> x { p[n[p][x]] } } }[-> n { -> p { -> x { p[n[p][x]] } } }[-> n { -> p { -> x { p[n[p][x]] } } }[-> m { -> n { n[-> m { -> n { n[-> n { -> p { -> x { p[n[p][x]] } } }][m] } }[m]][-> p { -> x { x } }] } }[-> p { -> x { p[p[x]] } }][-> p { -> x { p[p[p[p[p[x]]]]] } }]]]]]]][-> n { -> p { -> x { p[n[p][x]] } } }[-> n { -> p { -> x { p[n[p][x]] } } }[-> n { -> p { -> x { p[n[p][x]] } } }[-> m { -> n { n[-> m { -> n { n[-> n { -> p { -> x { p[n[p][x]] } } }][m] } }[m]][-> p { -> x { x } }] } }[-> p { -> x { p[p[x]] } }][-> p { -> x { p[p[p[p[p[x]]]]] } }]]]]]][-> m { -> n { n[-> m { -> n { n[-> n { -> p { -> x { p[n[p][x]] } } }][m] } }[m]][-> p { -> x { x } }] } }[-> p { -> x { p[p[x]] } }][-> p { -> x { p[p[p[p[p[x]]]]] } }]]][-> f { -> x { f[-> y { x[x][y] }] }[-> x { f[-> y { x[x][y] }] }] }[-> f { -> n { -> l { -> x { -> f { -> x { f[-> y { x[x][y] }] }[-> x { f[-> y { x[x][y] }] }] }[-> f { -> l { -> x { -> g { -> b { b }[-> p { p[-> x { -> y { x } }] }[l]][x][-> y { g[f[-> l { -> p { p[-> x { -> y { y } }] }[-> p { p[-> x { -> y { y } }] }[l]] }[l]][x][g]][-> l { -> p { p[-> x { -> y { x } }] }[-> p { p[-> x { -> y { y } }] }[l]] }[l]][y] }] } } } }][l][-> l { -> x { -> x { -> y { -> f { f[x][y] } } }[-> x { -> y { y } }][-> x { -> y { -> f { f[x][y] } } }[x][l]] } }[-> x { -> y { -> f { f[x][y] } } }[-> x { -> y { x } }][-> x { -> y { x } }]][x]][-> l { -> x { -> x { -> y { -> f { f[x][y] } } }[-> x { -> y { y } }][-> x { -> y { -> f { f[x][y] } } }[x][l]] } }] } }[-> b { b }[-> m { -> n { -> n { n[-> x { -> x { -> y { y } } }][-> x { -> y { x } }] }[-> m { -> n { n[-> n { -> p { p[-> x { -> y { x } }] }[n[-> p { -> x { -> y { -> f { f[x][y] } } }[-> p { p[-> x { -> y { y } }] }[p]][-> n { -> p { -> x { p[n[p][x]] } } }[-> p { p[-> x { -> y { y } }] }[p]]] }][-> x { -> y { -> f { f[x][y] } } }[-> p { -> x { x } }][-> p { -> x { x } }]]] }][m] } }[m][n]] } }[n][-> n { -> p { p[-> x { -> y { x } }] }[n[-> p { -> x { -> y { -> f { f[x][y] } } }[-> p { p[-> x { -> y { y } }] }[p]][-> n { -> p { -> x { p[n[p][x]] } } }[-> p { p[-> x { -> y { y } }] }[p]]] }][-> x { -> y { -> f { f[x][y] } } }[-> p { -> x { x } }][-> p { -> x { x } }]]] }[-> m { -> n { n[-> m { -> n { n[-> n { -> p { -> x { p[n[p][x]] } } }][m] } }[m]][-> p { -> x { x } }] } }[-> p { -> x { p[p[x]] } }][-> p { -> x { p[p[p[p[p[x]]]]] } }]]]][-> x { -> y { -> f { f[x][y] } } }[-> x { -> y { x } }][-> x { -> y { x } }]][-> x { f[-> f { -> x { f[-> y { x[x][y] }] }[-> x { f[-> y { x[x][y] }] }] }[-> f { -> m { -> n { -> b { b }[-> m { -> n { -> n { n[-> x { -> x { -> y { y } } }][-> x { -> y { x } }] }[-> m { -> n { n[-> n { -> p { p[-> x { -> y { x } }] }[n[-> p { -> x { -> y { -> f { f[x][y] } } }[-> p { p[-> x { -> y { y } }] }[p]][-> n { -> p { -> x { p[n[p][x]] } } }[-> p { p[-> x { -> y { y } }] }[p]]] }][-> x { -> y { -> f { f[x][y] } } }[-> p { -> x { x } }][-> p { -> x { x } }]]] }][m] } }[m][n]] } }[n][m]][-> x { -> n { -> p { -> x { p[n[p][x]] } } }[f[-> m { -> n { n[-> n { -> p { p[-> x { -> y { x } }] }[n[-> p { -> x { -> y { -> f { f[x][y] } } }[-> p { p[-> x { -> y { y } }] }[p]][-> n { -> p { -> x { p[n[p][x]] } } }[-> p { p[-> x { -> y { y } }] }[p]]] }][-> x { -> y { -> f { f[x][y] } } }[-> p { -> x { x } }][-> p { -> x { x } }]]] }][m] } }[m][n]][n]][x] }][-> p { -> x { x } }] } } }][n][-> m { -> n { n[-> m { -> n { n[-> n { -> p { -> x { p[n[p][x]] } } }][m] } }[m]][-> p { -> x { x } }] } }[-> p { -> x { p[p[x]] } }][-> p { -> x { p[p[p[p[p[x]]]]] } }]]][x] }]][-> f { -> x { f[-> y { x[x][y] }] }[-> x { f[-> y { x[x][y] }] }] }[-> f { -> m { -> n { -> b { b }[-> m { -> n { -> n { n[-> x { -> x { -> y { y } } }][-> x { -> y { x } }] }[-> m { -> n { n[-> n { -> p { p[-> x { -> y { x } }] }[n[-> p { -> x { -> y { -> f { f[x][y] } } }[-> p { p[-> x { -> y { y } }] }[p]][-> n { -> p { -> x { p[n[p][x]] } } }[-> p { p[-> x { -> y { y } }] }[p]]] }][-> x { -> y { -> f { f[x][y] } } }[-> p { -> x { x } }][-> p { -> x { x } }]]] }][m] } }[m][n]] } }[n][m]][-> x { f[-> m { -> n { n[-> n { -> p { p[-> x { -> y { x } }] }[n[-> p { -> x { -> y { -> f { f[x][y] } } }[-> p { p[-> x { -> y { y } }] }[p]][-> n { -> p { -> x { p[n[p][x]] } } }[-> p { p[-> x { -> y { y } }] }[p]]] }][-> x { -> y { -> f { f[x][y] } } }[-> p { -> x { x } }][-> p { -> x { x } }]]] }][m] } }[m][n]][n][x] }][m] } } }][n][-> m { -> n { n[-> m { -> n { n[-> n { -> p { -> x { p[n[p][x]] } } }][m] } }[m]][-> p { -> x { x } }] } }[-> p { -> x { p[p[x]] } }][-> p { -> x { p[p[p[p[p[x]]]]] } }]]] } }][n]]]] }]
+
+FIRST     = -> l { LEFT[RIGHT[l]] }
+IF        = -> b { b }
+LEFT      = -> p { p[-> x { -> y { x } } ] }
+RIGHT     = -> p { p[-> x { -> y { y } } ] }
+IS_EMPTY  = LEFT
+REST      = -> l { RIGHT[RIGHT[l]] }
+
+def to_integer(proc)
+  proc[-> n { n + 1 }][0]
+end
+
+def to_boolean(proc)
+  IF[proc][true][false]
+end
+
+def to_array(proc)
+  array = []
+
+  until to_boolean(IS_EMPTY[proc])
+    array.push(FIRST[proc])
+    proc = REST[proc]
+  end
+
+  array
+end
+
+def to_char(c)
+  '0123456789BFiuz'.slice(to_integer(c))
+end
+
+def to_string(s)
+  to_array(s).map { |c| to_char(c) }.join
+end
+
+answer = to_array(solution).map do |p|
+  to_string(p)
+end
+
+# puts answer
Index: /EcnlProtoTool/trunk/mruby-2.1.1/benchmark/bm_fib.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/benchmark/bm_fib.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/benchmark/bm_fib.rb	(revision 439)
@@ -0,0 +1,7 @@
+
+def fib n
+  return n if n < 2
+  fib(n-2) + fib(n-1)
+end
+
+puts fib(37)
Index: /EcnlProtoTool/trunk/mruby-2.1.1/benchmark/bm_so_lists.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/benchmark/bm_so_lists.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/benchmark/bm_so_lists.rb	(revision 439)
@@ -0,0 +1,47 @@
+#from http://www.bagley.org/~doug/shootout/bench/lists/lists.ruby
+
+NUM = 300
+SIZE = 10000
+
+def test_lists()
+  # create a list of integers (Li1) from 1 to SIZE
+  li1 = (1..SIZE).to_a
+  # copy the list to li2 (not by individual items)
+  li2 = li1.dup
+  # remove each individual item from left side of li2 and
+  # append to right side of li3 (preserving order)
+  li3 = Array.new
+  while (not li2.empty?)
+    li3.push(li2.shift)
+  end
+  # li2 must now be empty
+  # remove each individual item from right side of li3 and
+  # append to right side of li2 (reversing list)
+  until li3.empty?
+    li2.push(li3.pop)
+  end
+  # li3 must now be empty
+  # reverse li1 in place
+  li1.reverse!
+  # check that first item is now SIZE
+  if li1[0] != SIZE
+    p "not SIZE"
+    0
+  else
+    # compare li1 and li2 for equality
+    if li1 != li2
+      return(0)
+    else
+      # return the length of the list
+      li1.length
+    end
+  end
+end
+
+i = 0
+while i<NUM
+  i += 1
+  result = test_lists()
+end
+
+result
Index: /EcnlProtoTool/trunk/mruby-2.1.1/benchmark/build_config_boxing.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/benchmark/build_config_boxing.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/benchmark/build_config_boxing.rb	(revision 439)
@@ -0,0 +1,28 @@
+MRuby::Build.new do |conf|
+  toolchain :gcc
+end
+
+MRuby::Build.new('no_boxing') do |conf|
+  toolchain :gcc
+
+  conf.gembox 'default'
+end
+
+MRuby::Build.new('word_boxing') do |conf|
+  toolchain :gcc
+
+  conf.gembox 'default'
+  conf.compilers.each do |c|
+    c.defines += %w(MRB_WORD_BOXING)
+  end
+end
+
+MRuby::Build.new('nan_boxing') do |conf|
+  toolchain :gcc
+
+  conf.gembox 'default'
+  conf.compilers.each do |c|
+    c.defines += %w(MRB_NAN_BOXING)
+  end
+end
+
Index: /EcnlProtoTool/trunk/mruby-2.1.1/benchmark/build_config_cc.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/benchmark/build_config_cc.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/benchmark/build_config_cc.rb	(revision 439)
@@ -0,0 +1,13 @@
+MRuby::Build.new do |conf|
+  toolchain :gcc
+end
+
+MRuby::Build.new('gcc') do |conf|
+  toolchain :gcc
+  conf.gembox 'default'
+end
+
+MRuby::Build.new('clang') do |conf|
+  toolchain :clang
+  conf.gembox 'default'
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/benchmark/plot.gpl
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/benchmark/plot.gpl	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/benchmark/plot.gpl	(revision 439)
@@ -0,0 +1,5 @@
+set yrange [0:]
+set terminal pngcairo font 'Sans, 8' lw 1 size 1400,1024
+set xtics rotate by -45
+set style histogram errorbars gap 2 lw 1
+set style fill solid border -1
Index: /EcnlProtoTool/trunk/mruby-2.1.1/build.bat
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/build.bat	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/build.bat	(revision 439)
@@ -0,0 +1,9 @@
+set DIR=%~dp0
+set PATH=%PATH%;%DIR%\..\tools\bin
+
+rem call "%VS140COMNTOOLS%..\..\VC\vcvarsall.bat" x86
+call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvars32.bat"
+
+cd /d %DIR%
+
+rake %1
Index: /EcnlProtoTool/trunk/mruby-2.1.1/build_config.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/build_config.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/build_config.rb	(revision 439)
@@ -0,0 +1,227 @@
+MRuby::Build.new do |conf|
+  # load specific toolchain settings
+
+  # Gets set by the VS command prompts.
+  if ENV['VisualStudioVersion'] || ENV['VSINSTALLDIR']
+    toolchain :visualcpp
+  else
+    toolchain :gcc
+  end
+
+  # Turn on `enable_debug` for better debugging
+  # enable_debug
+
+  # Use mrbgems
+  # conf.gem 'examples/mrbgems/ruby_extension_example'
+  # conf.gem 'examples/mrbgems/c_extension_example' do |g|
+  #   g.cc.flags << '-g' # append cflags in this gem
+  # end
+  # conf.gem 'examples/mrbgems/c_and_ruby_extension_example'
+  # conf.gem :core => 'mruby-eval'
+  # conf.gem :mgem => 'mruby-onig-regexp'
+  # conf.gem :github => 'mattn/mruby-onig-regexp'
+  # conf.gem :git => 'git@github.com:mattn/mruby-onig-regexp.git', :branch => 'master', :options => '-v'
+
+  # include the default GEMs
+  conf.gembox 'default'
+  # C compiler settings
+  # conf.cc do |cc|
+  #   cc.command = ENV['CC'] || 'gcc'
+  #   cc.flags = [ENV['CFLAGS'] || %w()]
+  #   cc.include_paths = ["#{root}/include"]
+  #   cc.defines = %w()
+  #   cc.option_include_path = %q[-I"%s"]
+  #   cc.option_define = '-D%s'
+  #   cc.compile_options = %Q[%{flags} -MMD -o "%{outfile}" -c "%{infile}"]
+  # end
+
+  # mrbc settings
+  # conf.mrbc do |mrbc|
+  #   mrbc.compile_options = "-g -B%{funcname} -o-" # The -g option is required for line numbers
+  # end
+
+  # Linker settings
+  # conf.linker do |linker|
+  #   linker.command = ENV['LD'] || 'gcc'
+  #   linker.flags = [ENV['LDFLAGS'] || []]
+  #   linker.flags_before_libraries = []
+  #   linker.libraries = %w()
+  #   linker.flags_after_libraries = []
+  #   linker.library_paths = []
+  #   linker.option_library = '-l%s'
+  #   linker.option_library_path = '-L%s'
+  #   linker.link_options = "%{flags} -o "%{outfile}" %{objs} %{libs}"
+  # end
+
+  # Archiver settings
+  # conf.archiver do |archiver|
+  #   archiver.command = ENV['AR'] || 'ar'
+  #   archiver.archive_options = 'rs "%{outfile}" %{objs}'
+  # end
+
+  # Parser generator settings
+  # conf.yacc do |yacc|
+  #   yacc.command = ENV['YACC'] || 'bison'
+  #   yacc.compile_options = %q[-o "%{outfile}" "%{infile}"]
+  # end
+
+  # gperf settings
+  # conf.gperf do |gperf|
+  #   gperf.command = 'gperf'
+  #   gperf.compile_options = %q[-L ANSI-C -C -p -j1 -i 1 -g -o -t -N mrb_reserved_word -k"1,3,$" "%{infile}" > "%{outfile}"]
+  # end
+
+  # file extensions
+  # conf.exts do |exts|
+  #   exts.object = '.o'
+  #   exts.executable = '' # '.exe' if Windows
+  #   exts.library = '.a'
+  # end
+
+  # file separetor
+  # conf.file_separator = '/'
+
+  # bintest
+  # conf.enable_bintest
+end
+=begin
+MRuby::Build.new('host-debug') do |conf|
+  # load specific toolchain settings
+
+  # Gets set by the VS command prompts.
+  if ENV['VisualStudioVersion'] || ENV['VSINSTALLDIR']
+    toolchain :visualcpp
+  else
+    toolchain :gcc
+  end
+
+  enable_debug
+
+  # include the default GEMs
+  conf.gembox 'default'
+
+  # C compiler settings
+  conf.cc.defines = %w(MRB_ENABLE_DEBUG_HOOK)
+
+  # Generate mruby debugger command (require mruby-eval)
+  conf.gem :core => "mruby-bin-debugger"
+
+  # bintest
+  # conf.enable_bintest
+end
+
+MRuby::Build.new('test') do |conf|
+  # Gets set by the VS command prompts.
+  if ENV['VisualStudioVersion'] || ENV['VSINSTALLDIR']
+    toolchain :visualcpp
+  else
+    toolchain :gcc
+  end
+
+  enable_debug
+  conf.enable_bintest
+  conf.enable_test
+
+  conf.gembox 'default'
+end
+=end
+#MRuby::Build.new('bench') do |conf|
+#  # Gets set by the VS command prompts.
+#  if ENV['VisualStudioVersion'] || ENV['VSINSTALLDIR']
+#    toolchain :visualcpp
+#  else
+#    toolchain :gcc
+#    conf.cc.flags << '-O3'
+#  end
+#
+#  conf.gembox 'default'
+#end
+
+# Define cross build settings
+# MRuby::CrossBuild.new('32bit') do |conf|
+#   toolchain :gcc
+#
+#   conf.cc.flags << "-m32"
+#   conf.linker.flags << "-m32"
+#
+#   conf.build_mrbtest_lib_only
+#
+#   conf.gem 'examples/mrbgems/c_and_ruby_extension_example'
+#
+#   conf.test_runner.command = 'env'
+# end
+
+# Cross build for arm-none-eabi
+MRuby::CrossBuild.new('arm-none-eabi') do |conf|
+  toolchain :gcc
+
+  conf.cc.command = "arm-none-eabi-gcc"
+  conf.cxx.command = "arm-none-eabi-g++"
+  conf.linker.command = "arm-none-eabi-gcc"
+  conf.archiver.command = "arm-none-eabi-ar"
+
+  conf.cc.flags << %w(-MD -MP -mlittle-endian -mcpu=cortex-a9 -mthumb -mthumb-interwork -marm -march=armv7-a -mfpu=vfpv3 -mfloat-abi=hard -mno-unaligned-access -fno-strict-aliasing -nostdinc -Wstack-usage=256 -ffunction-sections -fdata-sections)
+  conf.cc.include_paths  << "../musl-1.1.18/include"
+
+  conf.cc.defines << %w(MRB_USE_CUSTOM_RO_DATA_P MRB_ENABLE_DEBUG_HOOK MRB_CONSTRAINED_BASELINE_PROFILE)
+
+  #conf.build_mrbtest_lib_only
+
+  conf.gem "#{root}/mrbgems/mruby-compiler"
+  conf.gem "#{root}/mrbgems/mruby-eval"
+  conf.gem "#{root}/mrbgems/mruby-io"
+  conf.gem "#{root}/mrbgems/mruby-math"
+  conf.gem "#{root}/mrbgems/mruby-pack"
+  conf.gem "#{root}/mrbgems/mruby-print"
+  conf.gem "#{root}/mrbgems/mruby-random"
+  conf.gem "#{root}/mrbgems/mruby-socket"
+  conf.gem "#{root}/mrbgems/mruby-sprintf"
+  conf.gem "#{root}/mrbgems/mruby-struct"
+  conf.gem "#{root}/mrbgems/mruby-time"
+  conf.gem "#{root}/mrbgems/mruby-numeric-ext"
+  conf.gem "#{root}/mrbgems/mruby-string-ext"
+  conf.gem '../mrbgems/mruby-onig-regexp'  do |g|
+    g.cc.flags << %w(-DHAVE_ONIGMO_H)
+    g.cc.include_paths  << "../onigmo-6.1.3/src"
+  end
+  conf.gem "#{root}/../mrbgems/mruby-blockly"
+  conf.gem "#{root}/../mrbgems/mruby-digest" do |g|
+    g.cc.include_paths << "#{g.dir}/../../openssl-1.1.0e/include"
+  end
+  conf.gem "#{root}/../mrbgems/mruby-dir"
+  conf.gem "#{root}/../mrbgems/mruby-env"
+  conf.gem "#{root}/../mrbgems/mruby-errno"
+  conf.gem "#{root}/../mrbgems/mruby-iijson"
+  conf.gem "#{root}/../mrbgems/mruby-ipaddr"
+  conf.gem "#{root}/../mrbgems/mruby-mock"
+  #conf.gem "#{root}/../mrbgems/mruby-require"
+  conf.gem "#{root}/../mrbgems/mruby-tls-openssl" do |g|
+    g.cc.include_paths << "#{g.dir}/../../openssl-1.1.0e/include"
+  end
+  conf.gem "#{root}/../mrbgems/mruby-arduino" do |g|
+    g.cc.include_paths << "#{g.dir}/../../prototool/src"
+    g.cc.include_paths << "#{g.dir}/../../mbed_api/src"
+  end
+  conf.gem "#{root}/../mrbgems/mruby-ecnl"
+  conf.gem "#{root}/../mrbgems/mruby-others"
+
+  conf.bins = []
+
+  # conf.test_runner.command = 'env'
+end
+=begin
+MRuby::CrossBuild.new("emscripten") do |conf|
+  toolchain :emscripten
+
+  conf.archiver.command = "llvm-ar"
+  conf.cc.flags << '-ffunction-sections -fdata-sections'
+  conf.linker.flags << '-Wl,--gc-sections'
+  conf.linker.flags << '--save-bc %{outfile}.bc --pre-js ../webapp/webmrbc/pre.js --post-js ../webapp/webmrbc/post.js --use-preload-plugins'
+  #conf.linker.flags << '-s BINARYEN=1'
+  #conf.exts.executable = '.html'
+
+  # include the default GEMs
+  #conf.gembox 'default'
+  conf.gem :core => 'mruby-bin-mrbc'
+end
+=end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/doc/guides/compile.md
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/doc/guides/compile.md	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/doc/guides/compile.md	(revision 439)
@@ -0,0 +1,488 @@
+# Compile
+
+mruby uses Rake to compile and cross-compile all libraries and
+binaries.
+
+## Prerequisites
+
+To compile mruby out of the source code you need the following tools:
+* C Compiler (e.g. `gcc`)
+* Linker (e.g. `gcc`)
+* Archive utility (e.g. `ar`)
+* Parser generator (e.g. `bison`)
+* Ruby 2.0 or later (e.g. `ruby` or `jruby`)
+
+Optional:
+* GIT (to update mruby source and integrate mrbgems easier)
+* C++ compiler (to use GEMs which include \*.cpp, \*.cxx, \*.cc)
+* Assembler (to use GEMs which include \*.asm)
+
+## Usage
+
+Inside of the root directory of the mruby source a file exists
+called *build_config.rb*. This file contains the build configuration
+of mruby and looks like this for example:
+```ruby
+MRuby::Build.new do |conf|
+  toolchain :gcc
+end
+```
+
+All tools necessary to compile mruby can be set or modified here. In case
+you want to maintain an additional *build_config.rb* you can define a
+customized path using the *$MRUBY_CONFIG* environment variable.
+
+To compile just call `rake` inside of the mruby source root. To
+generate and execute the test tools call `rake test`. To clean
+all build files call `rake clean`. To see full command line on
+build, call `rake -v`.
+
+## Build Configuration
+
+Inside of the *build_config.rb* the following options can be configured
+based on your environment.
+
+### Toolchains
+
+The mruby build system already contains a set of toolchain templates which
+configure the build environment for specific compiler infrastructures.
+
+#### GCC
+
+Toolchain configuration for the GNU C Compiler.
+```ruby
+toolchain :gcc
+```
+
+#### clang
+
+Toolchain configuration for the LLVM C Compiler clang. Mainly equal to the
+GCC toolchain.
+```ruby
+toolchain :clang
+```
+
+#### Visual Studio 2010, 2012 and 2013
+
+Toolchain configuration for Visual Studio on Windows. If you use the
+[Visual Studio Command Prompt](http://msdn.microsoft.com/en-us/library/ms229859\(v=vs.110\).aspx),
+you normally do not have to specify this manually, since it gets automatically detected by our build process.
+```ruby
+toolchain :visualcpp
+```
+
+#### Android
+
+Toolchain configuration for Android.
+```ruby
+toolchain :android
+```
+
+Requires the custom standalone Android NDK and the toolchain path
+in `ANDROID_STANDALONE_TOOLCHAIN`.
+
+### Binaries
+
+It is possible to select which tools should be compiled during the compilation
+process. The following tools can be selected:
+* mruby (mruby interpreter)
+* mirb (mruby interactive shell)
+
+To select them declare conf.gem as follows:
+```ruby
+conf.gem "#{root}/mrbgems/mruby-bin-mruby"
+conf.gem "#{root}/mrbgems/mruby-bin-mirb"
+```
+
+### File Separator
+
+Some environments require a different file separator character. It is possible to
+set the character via `conf.file_separator`.
+```ruby
+conf.file_separator = '/'
+```
+
+### C Compiler
+
+Configuration of the C compiler binary, flags and include paths.
+```ruby
+conf.cc do |cc|
+  cc.command = ...
+  cc.flags = ...
+  cc.include_paths = ...
+  cc.defines = ...
+  cc.option_include_path = ...
+  cc.option_define = ...
+  cc.compile_options = ...
+end
+```
+
+C Compiler has header searcher to detect installed library.
+
+If you need a include path of header file use `search_header_path`:
+```ruby
+# Searches ```iconv.h```.
+# If found it will return include path of the header file.
+# Otherwise it will return nil .
+fail 'iconv.h not found' unless conf.cc.search_header_path 'iconv.h'
+```
+
+If you need a full file name of header file use `search_header`:
+```ruby
+# Searches ```iconv.h```.
+# If found it will return full path of the header file.
+# Otherwise it will return nil .
+iconv_h = conf.cc.search_header 'iconv.h'
+print "iconv.h found: #{iconv_h}\n"
+```
+
+Header searcher uses compiler's `include_paths` by default.
+When you are using GCC toolchain (including clang toolchain since its base is gcc toolchain)
+it will use compiler specific include paths too. (For example `/usr/local/include`, `/usr/include`)
+
+If you need a special header search paths define a singleton method `header_search_paths` to C compiler:
+```ruby
+def conf.cc.header_search_paths
+  ['/opt/local/include'] + include_paths
+end
+```
+
+### Linker
+
+Configuration of the Linker binary, flags and library paths.
+```ruby
+conf.linker do |linker|
+  linker.command = ...
+  linker.flags = ...
+  linker.flags_before_libraries = ...
+  linker.libraries = ...
+  linker.flags_after_libraries = ...
+  linker.library_paths = ....
+  linker.option_library = ...
+  linker.option_library_path = ...
+  linker.link_options = ...
+end
+```
+
+### Archiver
+
+Configuration of the Archiver binary and flags.
+```ruby
+conf.archiver do |archiver|
+  archiver.command = ...
+  archiver.archive_options = ...
+end
+```
+
+### Parser Generator
+
+Configuration of the Parser Generator binary and flags.
+```ruby
+conf.yacc do |yacc|
+  yacc.command = ...
+  yacc.compile_options = ...
+end
+```
+
+### GPerf
+
+Configuration of the GPerf binary and flags.
+```ruby
+conf.gperf do |gperf|
+  gperf.command = ...
+  gperf.compile_options = ...
+end
+```
+
+### File Extensions
+```ruby
+conf.exts do |exts|
+  exts.object = ...
+  exts.executable = ...
+  exts.library = ...
+end
+```
+
+### Mrbgems
+
+Integrate GEMs in the build process.
+```ruby
+# Integrate GEM with additional configuration
+conf.gem 'path/to/gem' do |g|
+  g.cc.flags << ...
+end
+
+# Integrate GEM without additional configuration
+conf.gem 'path/to/another/gem'
+```
+
+See doc/mrbgems/README.md for more option about mrbgems.
+
+### Mrbtest
+
+Configuration Mrbtest build process.
+
+If you want mrbtest.a only, You should set `conf.build_mrbtest_lib_only`
+```ruby
+conf.build_mrbtest_lib_only
+```
+
+### Bintest
+
+Tests for mrbgem tools using CRuby.
+To have bintests place \*.rb scripts to `bintest/` directory of mrbgems.
+See `mruby-bin-*/bintest/*.rb` if you need examples.
+If you want a temporary files use `tempfile` module of CRuby instead of `/tmp/`.
+
+You can enable it with following:
+```ruby
+conf.enable_bintest
+```
+
+### C++ ABI
+
+By default, mruby uses setjmp/longjmp to implement its
+exceptions. But it doesn't release C++ stack object
+correctly. To support mrbgems written in C++, mruby can be
+configured to use C++ exception.
+
+There are two levels of C++ exception handling. The one is
+`enable_cxx_exception` that enables C++ exception, but
+uses C ABI. The other is `enable_cxx_abi` where all
+files are compiled by C++ compiler.
+
+When you mix C++ code, C++ exception would be enabled automatically.
+If you need to enable C++ exception explicitly add the following:
+```ruby
+conf.enable_cxx_exception
+```
+
+#### C++ exception disabling.
+
+If your compiler does not support C++ and you want to ensure
+you don't use mrbgem written in C++, you can explicitly disable
+C++ exception, add following:
+```ruby
+conf.disable_cxx_exception
+```
+and you will get an error when you try to use C++ gem.
+Note that it must be called before `enable_cxx_exception` or `gem` method.
+
+### Debugging mode
+
+To enable debugging mode add the following:
+```ruby
+conf.enable_debug
+```
+
+When debugging mode is enabled
+* Macro `MRB_DEBUG` would be defined.
+	* Which means `mrb_assert()` macro is enabled.
+* Debug information of irep would be generated by `mrbc`.
+	* Because `-g` flag would be added to `mrbc` runner.
+    * You can have better backtrace of mruby scripts with this.
+
+## Cross-Compilation
+
+mruby can also be cross-compiled from one platform to another. To
+achieve this the *build_config.rb* needs to contain an instance of
+`MRuby::CrossBuild`. This instance defines the compilation
+tools and flags for the target platform. An example could look
+like this:
+```ruby
+MRuby::CrossBuild.new('32bit') do |conf|
+  toolchain :gcc
+
+  conf.cc.flags << "-m32"
+  conf.linker.flags << "-m32"
+end
+```
+
+All configuration options of `MRuby::Build` can also be used
+in `MRuby::CrossBuild`.
+
+### Mrbtest in Cross-Compilation
+
+In cross compilation, you can run `mrbtest` on emulator if
+you have it by changing configuration of test runner.
+```ruby
+conf.test_runner do |t|
+  t.command = ... # set emulator. this value must be non nil or false
+  t.flags = ... # set flags of emulator
+
+  def t.run(bin) # override `run` if you need to change the behavior of it
+    ... # `bin` is the full path of mrbtest
+  end
+end
+```
+
+## Build process
+
+During the build process the directory *build* will be created in the
+root directory. The structure of this directory will look like this:
+
+	+- build
+	   |
+	   +-  host
+	       |
+	       +- bin          <- Binaries (mirb, mrbc and mruby)
+	       |
+	       +- lib          <- Libraries (libmruby.a and libmruby_core.a)
+	       |
+	       +- mrblib
+	       |
+	       +- src
+	       |
+	       +- test         <- mrbtest tool
+	       |
+	       +- tools
+	          |
+	          +- mirb
+	          |
+	          +- mrbc
+	          |
+	          +- mruby
+
+The compilation workflow will look like this:
+* compile all files under *src* (object files will be stored
+in *build/host/src*)
+* generate parser grammar out of *src/parse.y* (generated
+result will be stored in *build/host/src/y.tab.c*)
+* compile  *build/host/src/y.tab.c* to  *build/host/src/y.tab.o*
+* create *build/host/lib/libmruby_core.a* out of all object files (C only)
+* create `build/host/bin/mrbc` by compiling *tools/mrbc/mrbc.c* and
+linking with *build/host/lib/libmruby_core.a*
+* create *build/host/mrblib/mrblib.c* by compiling all \*.rb files
+under *mrblib* with `build/host/bin/mrbc`
+* compile *build/host/mrblib/mrblib.c* to *build/host/mrblib/mrblib.o*
+* create *build/host/lib/libmruby.a* out of all object files (C and Ruby)
+* create `build/host/bin/mruby` by compiling *mrbgems/mruby-bin-mruby/tools/mruby/mruby.c* and
+linking with *build/host/lib/libmruby.a*
+* create `build/host/bin/mirb` by compiling *mrbgems/mruby-bin-mirb/tools/mirb/mirb.c* and
+linking with *build/host/lib/libmruby.a*
+
+```
+ _____    _____    ______    ____    ____    _____    _____    ____
+| CC  |->|GEN  |->|AR    |->|CC  |->|CC  |->|AR   |->|CC   |->|CC  |
+| *.c |  |y.tab|  |core.a|  |mrbc|  |*.rb|  |lib.a|  |mruby|  |mirb|
+ -----    -----    ------    ----    ----    -----    -----    ----
+```
+
+### Cross-Compilation
+
+In case of a cross-compilation to *i386* the *build* directory structure looks
+like this:
+
+	+- build
+	   |
+	   +-  host
+	   |   |
+	   |   +- bin           <- Native Binaries
+	   |   |
+	   |   +- lib           <- Native Libraries
+	   |   |
+	   |   +- mrblib
+	   |   |
+	   |   +- src
+	   |   |
+	   |   +- test          <- Native mrbtest tool
+	   |   |
+	   |   +- tools
+	   |      |
+	   |      +- mirb
+	   |      |
+	   |      +- mrbc
+	   |      |
+	   |      +- mruby
+	   +- i386
+	      |
+	      +- bin            <- Cross-compiled Binaries
+	      |
+	      +- lib            <- Cross-compiled Libraries
+	      |
+	      +- mrblib
+	      |
+	      +- src
+	      |
+	      +- test           <- Cross-compiled mrbtest tool
+	      |
+	      +- tools
+	         |
+	         +- mirb
+	         |
+	         +- mrbc
+	         |
+	         +- mruby
+
+An extra directory is created for the target platform. In case you
+compile for *i386* a directory called *i386* is created under the
+build directory.
+
+The cross compilation workflow starts in the same way as the normal
+compilation by compiling all *native* libraries and binaries.
+Afterwards the cross compilation process proceeds like this:
+* cross-compile all files under *src* (object files will be stored
+in *build/i386/src*)
+* generate parser grammar out of *src/parse.y* (generated
+result will be stored in *build/i386/src/y.tab.c*)
+* cross-compile *build/i386/src/y.tab.c* to *build/i386/src/y.tab.o*
+* create *build/i386/mrblib/mrblib.c* by compiling all \*.rb files
+under *mrblib* with the native `build/host/bin/mrbc`
+* cross-compile *build/host/mrblib/mrblib.c* to *build/host/mrblib/mrblib.o*
+* create *build/i386/lib/libmruby.a* out of all object files (C and Ruby)
+* create `build/i386/bin/mruby` by cross-compiling *mrbgems/mruby-bin-mruby/tools/mruby/mruby.c* and
+linking with *build/i386/lib/libmruby.a*
+* create `build/i386/bin/mirb` by cross-compiling *mrbgems/mruby-bin-mirb/tools/mirb/mirb.c* and
+linking with *build/i386/lib/libmruby.a*
+* create *build/i386/lib/libmruby_core.a* out of all object files (C only)
+* create `build/i386/bin/mrbc` by cross-compiling *tools/mrbc/mrbc.c* and
+linking with *build/i386/lib/libmruby_core.a*
+
+```
+ _______________________________________________________________
+|              Native Compilation for Host System               |
+|  _____      ______      _____      ____      ____      _____  |
+| | CC  | -> |AR    | -> |GEN  | -> |CC  | -> |CC  | -> |AR   | |
+| | *.c |    |core.a|    |y.tab|    |mrbc|    |*.rb|    |lib.a| |
+|  -----      ------      -----      ----      ----      -----  |
+ ---------------------------------------------------------------
+                                ||
+                               \||/
+                                \/
+ ________________________________________________________________
+|             Cross Compilation for Target System                |
+|  _____      _____      _____      ____      ______      _____  |
+| | CC  | -> |AR   | -> |CC   | -> |CC  | -> |AR    | -> |CC   | |
+| | *.c |    |lib.a|    |mruby|    |mirb|    |core.a|    |mrbc | |
+|  -----      -----      -----      ----      ------      -----  |
+ ----------------------------------------------------------------
+```
+
+## Build Configuration Examples
+
+### Minimal Library
+
+To build a minimal mruby library you need to use the Cross Compiling
+feature due to the reason that there are functions (e.g. stdio) which
+can't be disabled for the main build.
+
+```ruby
+MRuby::CrossBuild.new('Minimal') do |conf|
+  toolchain :gcc
+
+  conf.cc.defines = %w(MRB_DISABLE_STDIO)
+  conf.bins = []
+end
+```
+
+This configuration defines a cross compile build called 'Minimal' which
+is using the GCC and compiles for the host machine. It also disables
+all usages of stdio and doesn't compile any binaries (e.g. mrbc).
+
+## Test Environment
+
+mruby's build process includes a test environment. In case you start the testing
+of mruby, a native binary called `mrbtest` will be generated and executed.
+This binary contains all test cases which are defined under *test/t*. In case
+of a cross-compilation an additional cross-compiled *mrbtest* binary is
+generated. You can copy this binary and run on your target system.
Index: /EcnlProtoTool/trunk/mruby-2.1.1/doc/guides/debugger.md
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/doc/guides/debugger.md	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/doc/guides/debugger.md	(revision 439)
@@ -0,0 +1,370 @@
+# How to Use the mruby Debugger
+
+copyright (c) 2014 Specified Non-Profit Corporation mruby Forum
+
+## 1. Summary
+
+This file documents the mruby debugger ('mrdb') methods.
+
+## 2 Debugging with mrdb
+
+## 2.1 Building mrdb
+
+The trunk of the mruby source tree, with the most recent mrdb, can be checked out with the following command:
+
+```bash
+$ git clone https://github.com/mruby/mruby.git
+```
+
+To run the `make` command:
+
+```bash
+$ cd mruby
+$ make
+```
+
+By default, the `make` command will install the debugger files into mruby/bin.
+
+You can add the path for mrdb on your host environment with the following command:
+
+```bash
+$ echo "export PATH=\$PATH:MRUBY_ROOT/bin" >> ~/.bashrc
+$ source ~/.bashrc
+```
+
+`*MRUBY_ROOT` is the directory in which mruby source code will be installed.
+
+To confirm mrdb was installed properly, run mrdb with the `--version` option:
+
+```bash
+$ mrdb --version
+mruby 2.1.1 (2020-06-04)
+```
+
+## 2.2 Basic Operation
+
+### 2.2.1 Debugging mruby Script Files (rb file) with mrdb
+
+To invoke the mruby debugger, just type `mrdb`.
+
+To specify the script file:
+
+```bash
+$ mrdb [option] file name
+```
+
+For example: Debugging sample.rb
+
+```bash
+$ mrdb sample.rb
+```
+
+You can execute the shell commands listed below:
+
+|command|description|
+|:-:|:--|
+|run|execute programs|
+|step|execute stepping|
+|continue|execute continuing program|
+|break|configure the breaking point|
+|delete|deleting the breaking points|
+|disable|disabling the breaking points|
+|enable|enabling the breaking points|
+|info breakpoints|showing list of the breaking points|
+|print|evaluating and printing the values of the mruby expressions in the script|
+|list|displaying the source cords|
+|help|showing help|
+|quit|terminating the mruby debugger|
+
+### 2.2.2 Debugging mruby Binary Files (mrb file) with mrdb
+
+You can debug the mruby binary files.
+
+#### 2.2.2.1 Debugging the binary files
+
+* notice
+To debug mruby binary files, you need to compile mruby files with option `-g`.
+
+```bash
+$ mrbc -g sample.rb
+```
+
+You can debug the mruby binary files with following command and the option `-b`.
+
+```bash
+$ mrdb -b sample.mrb
+```
+
+Then you can execute all debugger shell commands.
+
+#### Break Command
+
+You can use any breakpoint to stop the program by specifying the line number and method name.
+The breakpoint list will be displayed after you have set the breakpoint successfully.
+
+Usage:
+
+```
+break [file:]linenum
+b [file:]linenum
+break [class:]method
+b [class:]method
+```
+
+The breakpoint will be ordered in serial from 1.
+The number, which was given to the deleted breakpoint, will never be given to another breakpoint again.
+
+You can give multiple breakpoints to specified the line number and method.
+Be ware that breakpoint command will not check the validity of the class name and method name.
+
+You can get the current breakpoint information by the following options.
+
+breakpoint breakpoint number : file name. line number
+
+breakpoint breakpoint number : [class name,] method name
+
+#### Continue Command
+
+Usage:
+
+```
+continue [N]
+c [N]
+```
+
+N: the next breakpoint number
+
+When resuming the program, it will stop at breakpoint N (N-1 breakpoint will be ignored).
+
+When you run the `continue` command without specifying N, the program will be stopped at the next breakpoint.
+
+Example:
+
+```
+(foo.rb:1) continue 3
+```
+
+This will resume the program and stop it at the third breakpoint.
+
+#### Delete Command
+
+This will delete the specified breakpoint.
+
+Usage:
+
+```
+delete [breakpoint-no]
+d [breakpoint-no]
+```
+
+breakpoint-no: breakpoint number
+
+Example:
+
+```
+(foo.rb:1) delete
+```
+
+This will delete all of the breakpoints.
+
+```
+(foo.rb:1) delete 1 3
+```
+
+This will delete the breakpoint at 1 and 3.
+
+#### Disable Command
+
+This will disable the specified breakpoint.
+
+Usage:
+
+```
+disable [breakpoint-no]
+dis [breakpoint-no]
+```
+
+reappointing: breakpoint number
+
+Example:
+
+```
+(foo.rb:1) disable
+```
+
+Use `disable` if you would like to disable all of the breakpoints.
+
+```
+(foo.rb:1) disable 1 3
+```
+
+This will disable the breakpoints at 1 and 3.
+
+#### Enable Command
+
+This will enable the specified breakpoints.
+
+Usage:
+
+```
+enable [breakpoint-no]
+e [breakpoint-no]
+```
+
+breakpoint-no: breakpoint number
+
+Example:
+
+```
+(foo.rb:1) enable
+```
+
+Enabling all breakpoints
+```
+(foo.rb:1) enable 1 3
+```
+
+Enabling the breakpoint 1 and 3
+
+#### eval command
+
+Evaluating the string as source code and printing the value.
+
+Same as print command, please see print command.
+
+#### help command
+
+Displaying the help message.
+
+Usage:
+
+```
+help [command]
+h [command]
+```
+
+Typing `help` without any options will display the command list.
+
+#### Info Breakpoints Command
+
+Displaying the specified breakpoint information.
+
+Usage:
+
+```
+info breakpoints [breakpoint-no]
+i b [breakpoint-no]
+```
+
+breakpoint-no: breakpoint number
+
+Typing "info breakpoints" without ant option will display all breakpoint information.
+Example:
+
+```
+(sample.rb:1) info breakpoints
+Num     Type           Enb What  
+1       breakpoint     y   at sample.rb:3                      -> file name,line number
+2       breakpoint     n   in Sample_class:sample_class_method -> [class:]method name
+3       breakpoint     y   in sample_global_method
+```
+
+Displaying the specified breakpoint number:
+
+```
+(foo.rb:1) info breakpoints 1 3
+Num     Type           Enb What  
+1       breakpoint     y   at sample.rb:3  
+3       breakpoint     y   in sample_global_method
+```
+
+#### List Command
+
+To display the code of the source file.
+
+Usage:
+
+```
+list [filename:]first[,last]
+l [filename]:first[,last]
+```
+
+first: the opening row number
+last : the closing row number
+
+When you specify the `first`, but not the `last` option, you will receive 10 rows.
+When you do not specify both the `first` and `last` options, you will receive the next 10 rows.
+
+Example:
+
+```
+Specifying file name and first row number
+sample.rb:1) list sample2.rb:5
+```
+
+Specifying the file name and the first and last row number:
+
+```
+(sample.rb:1) list sample2.rb:6,7
+```
+
+#### Print Command
+
+Evaluating the string as source code and printing the value.
+
+Usage:
+
+```
+print [expr]
+p [expr]
+```
+
+expr: expression
+
+The expression is mandatory.
+The displayed expressions will be serially ordered from 1.
+If an exception occurs, the exception information will be displayed and the debugging will be continued.
+
+Example:
+
+```
+(sample.rb:1) print 1+2
+$1 = 3
+(sample.rb:1) print self
+$2 = main
+```
+
+Below is the case of the exception:
+
+```
+(sample.rb:1) print (1+2
+$1 =  SyntaxError: line 1: syntax error, unexpected $end, expecting ')'
+```
+
+#### Quit Command
+
+Quitting the debugger.
+
+Usage:
+
+```
+quit
+q
+```
+
+#### Run Command
+
+Running the program and stopping at the first breakpoint.
+
+Usage:
+
+```
+run
+r
+```
+
+#### Step Command
+
+This will run the program step by step.
+When the method and the block are invoked, the program will be stop at the first row.
+The program, which is developed in C, will be ignored.
Index: /EcnlProtoTool/trunk/mruby-2.1.1/doc/guides/gc-arena-howto.md
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/doc/guides/gc-arena-howto.md	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/doc/guides/gc-arena-howto.md	(revision 439)
@@ -0,0 +1,177 @@
+# How to use `mrb_gc_arena_save()`/`mrb_gc_arena_restore()`/`mrb_gc_protect()`
+
+_This is an English translation of [Matz's blog post][matz blog post]
+written in Japanese._
+_Some parts are updated to reflect recent changes._
+[matz blog post]: http://www.rubyist.net/~matz/20130731.html
+
+When you are extending mruby using C language, you may encounter
+mysterious "arena overflow error" or memory leak or very slow
+execution speed.  This is an error indicating overflow of "GC arena"
+implementing "conservative GC".
+
+GC (garbage collector) must ensure that object is "alive", in other
+words, that it is referenced by somewhere from program.  This can be
+determined by checking if the object can be directly or indirectly
+referenced by root.  The local variables, global variables and
+constants etc are root.
+
+If program execution is performed inside mruby VM, there is nothing to
+worry about because GC can access all roots owned by VM.
+
+The problem arises when executing C functions.  The object referenced
+by C variable is also "alive", but mruby GC cannot aware of this, so
+it might mistakenly recognize the objects referenced by only C
+variables as dead.
+
+This can be a fatal bug if the GC tries to collect a live object.
+
+In CRuby, we scan C stack area, and use C variable as root to check
+whether object is alive or not.  Of course, because we are accessing C
+stack just as memory region, we never know it is an integer or a
+pointer.  We workaround this by assuming that if it looks like a
+pointer, then assume it as a pointer.  We call it "conservative".
+
+By the way, CRuby's "conservative GC" has some problems.
+
+The biggest problem is we have no way to access to the stack area in
+portable way.  Therefore, we cannot use this method if we'd like to
+implement highly portable runtime, like mruby.
+
+So we came up with an another plan to implement "conservative GC" in mruby.
+
+Again, the problem is when an object which was created in C function, becomes
+no longer referenced in the Ruby world, and cannot be treated as garbage.
+
+In mruby, we recognize all objects created in C function are alive.
+Then we have no problem such as confusing a live object as dead.
+
+This means that because we cannot collect truly dead object, we may
+lose efficiency, but as a trade-off the GC itself is highly portable.
+We can say goodbye to the problem that GC deletes live objects due to
+optimization which sometimes occurs in CRuby.
+
+According to this idea, we have a table, called "GC arena", which
+remembers objects created in C function.
+
+The arena is stack structure, when C function execution is returned to mruby
+VM, all objects registered in the arena are popped.
+
+This works very well, but can cause another problem: "arena overflow error" or
+memory leak.
+
+As of this writing, mruby automatically extend arena to remember
+objects (See `MRB_GC_FIXED_ARENA` and `MRB_GC_ARENA_SIZE` in
+doc/guides/mrbconf.md).
+
+If you create many objects in C functions, memory usage will increase, since
+GC never kick in.  This memory usage may look like memory leak, but will also
+make execution slower as more memory will need to be allocated.
+
+With the build time configuration, you can limit the maximum size of
+arena (e.g., 100).  Then if you create many objects, arena overflows,
+thus you will get an "arena overflow error".
+
+To workaround these problems, we have `mrb_gc_arena_save()` and
+`mrb_gc_arena_restore()` functions.
+
+`int mrb_gc_arena_save(mrb)` returns the current position of the stack
+top of GC arena, and `void mrb_gc_arena_restore(mrb, idx)` sets the
+stack top position to back to given `idx`.
+
+We can use them like this:
+
+```c
+int arena_idx = mrb_gc_arena_save(mrb);
+
+// ...create objects...
+mrb_gc_arena_restore(mrb, arena_idx);
+
+```
+
+In mruby, C function calls are surrounded by this save/restore, but we
+can further optimize memory usage by surrounding save/restore, and can
+avoid creating arena overflow bugs.
+
+Let's take a real example.  Here is the source code of `Array#inspect`:
+
+```c
+static mrb_value
+inspect_ary(mrb_state *mrb, mrb_value ary, mrb_value list)
+{
+  mrb_int i;
+  mrb_value s, arystr;
+  char head[] = { '[' };
+  char sep[] = { ',', ' ' };
+  char tail[] = { ']' };
+
+  /* check recursive */
+  for(i=0; i<RARRAY_LEN(list); i++) {
+    if (mrb_obj_equal(mrb, ary, RARRAY_PTR(list)[i])) {
+      return mrb_str_new(mrb, "[...]", 5);
+    }
+  }
+
+  mrb_ary_push(mrb, list, ary);
+
+  arystr = mrb_str_new_capa(mrb, 64);
+  mrb_str_cat(mrb, arystr, head, sizeof(head));
+
+  for(i=0; i<RARRAY_LEN(ary); i++) {
+    int ai = mrb_gc_arena_save(mrb);
+
+    if (i > 0) {
+      mrb_str_cat(mrb, arystr, sep, sizeof(sep));
+    }
+    if (mrb_array_p(RARRAY_PTR(ary)[i])) {
+      s = inspect_ary(mrb, RARRAY_PTR(ary)[i], list);
+    }
+    else {
+      s = mrb_inspect(mrb, RARRAY_PTR(ary)[i]);
+    }
+    mrb_str_cat(mrb, arystr, RSTRING_PTR(s), RSTRING_LEN(s));
+    mrb_gc_arena_restore(mrb, ai);
+  }
+
+  mrb_str_cat(mrb, arystr, tail, sizeof(tail));
+  mrb_ary_pop(mrb, list);
+
+  return arystr;
+}
+```
+
+This is a real example, so a little bit complicated, but bear with me.
+The essence of `Array#inspect` is that after stringifying each element
+of array using `inspect` method, we join them together so that we can
+get `inspect` representation of the entire array.
+
+After the `inspect` representation is created, we no longer require the
+individual string representation.  This means that we don't have to register
+these temporal objects into GC arena.
+
+Therefore, in order to keep the arena size small; the `ary_inspect()` function
+will do the following:
+
+* save the position of the stack top using `mrb_gc_arena_save()`.
+* get `inspect` representation of each element.
+* append it to the constructing entire `inspect` representation of array.
+* restore stack top position using `mrb_gc_arena_restore()`.
+
+Please note that the final `inspect` representation of entire array
+was created before the call of `mrb_gc_arena_restore()`.  Otherwise,
+required temporal object may be deleted by GC.
+
+We may have a usecase where after creating many temporal objects, we'd
+like to keep some of them.  In this case, we cannot use the same idea
+in `ary_inspect()` like appending objects to existing one.
+Instead, after `mrb_gc_arena_restore()`, we must re-register the objects we
+want to keep in the arena using `mrb_gc_protect(mrb, obj)`.
+Use `mrb_gc_protect()` with caution because it could also lead to an "arena
+overflow error".
+
+We must also mention that when `mrb_funcall` is called in top level, the return
+value is also registered to GC arena, so repeated use of `mrb_funcall` may
+eventually lead to an "arena overflow error".
+
+Use `mrb_gc_arena_save()` and `mrb_gc_arena_restore()` or possible use of
+`mrb_gc_protect()` to workaround this.
Index: /EcnlProtoTool/trunk/mruby-2.1.1/doc/guides/mrbconf.md
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/doc/guides/mrbconf.md	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/doc/guides/mrbconf.md	(revision 439)
@@ -0,0 +1,181 @@
+# mruby configuration macros.
+
+## How to use these macros.
+You can use mrbconfs with following ways:
+* Write them in `mrbconf.h`.
+ * Using compiler flags is preferred  when building a cross binaries or multiple mruby binaries
+ since it's easier to use different mrbconf per each `MRuby::Build`.
+ * Most flags can be enabled by just commenting in.
+* Pass them as compiler flags.
+ * Make sure you pass the same flags to all compilers since some mrbconf(e.g., `MRB_GC_FIXED_ARENA`)
+ changes `struct` layout and cause memory access error when C and other language(e.g., C++) is mixed.
+
+## stdio setting.
+`MRB_DISABLE_STDIO`
+* When defined `<stdio.h>` functions won't be used.
+* Some features will be disabled when this is enabled:
+  * `mrb_irep` load/dump from/to file.
+  * Compiling mruby script from file.
+  * Printing features in **src/print.c**.
+
+## Debug macros.
+`MRB_ENABLE_DEBUG_HOOK`
+* When defined code fetch hook and debug OP hook will be enabled.
+* When using any of the hook set function pointer `code_fetch_hook` and/or `debug_op_hook` of `mrb_state`.
+* Fetch hook will be called before any OP.
+* Debug OP hook will be called when dispatching `OP_DEBUG`.
+
+`MRB_DEBUG`
+* When defined `mrb_assert*` macro will be defined with macros from `<assert.h>`.
+* Could be enabled via `enable_debug` method of `MRuby::Build`.
+
+## Stack configuration
+
+`MRB_STACK_EXTEND_DOUBLING`
+* If defined doubles the stack size when extending it.
+* Else extends stack with `MRB_STACK_GROWTH`.
+
+`MRB_STACK_GROWTH`
+* Default value is `128`.
+* Used in stack extending.
+* Ignored when `MRB_STACK_EXTEND_DOUBLING` is defined.
+
+`MRB_STACK_MAX`
+* Default value is `0x40000 - MRB_STACK_GROWTH`.
+* Raises `RuntimeError` when stack size exceeds this value.
+
+## Primitive type configuration.
+
+`MRB_USE_FLOAT`
+* When defined single precision floating point type(C type `float`) is used as `mrb_float`.
+* Else double precision floating point type(C type `double`) is used as `mrb_float`.
+
+`MRB_WITHOUT_FLOAT`
+* When defined removes floating point numbers from mruby.
+* It makes mruby easier to handle in "Microcontroller without FPU" and "Kernel Space".
+
+`MRB_INT32`
+* When defined, or `MRB_INT64` are not defined on 32-bit CPU mode, `mrb_int` will be defined as `int32_t`.
+* Conflicts with `MRB_INT64`.
+
+`MRB_INT64`
+* When defined, or `MRB_INT32` are not defined on 64-bit CPU mode, `mrb_int` will be defined as `int64_t`.
+* Conflicts with `MRB_INT32`.
+
+## Garbage collector configuration.
+
+`MRB_GC_STRESS`
+* When defined full GC is emitted per each `RBasic` allocation.
+* Mainly used in memory manager debugging.
+
+`MRB_GC_TURN_OFF_GENERATIONAL`
+* When defined turns generational GC by default.
+
+`MRB_GC_FIXED_ARENA`
+* When defined used fixed size GC arena.
+* Raises `RuntimeError` when this is defined and GC arena size exceeds `MRB_GC_ARENA_SIZE`.
+* Useful tracking unnecessary mruby object allocation.
+
+`MRB_GC_ARENA_SIZE`
+* Default value is `100`.
+* Ignored when `MRB_GC_FIXED_ARENA` isn't defined.
+* Defines fixed GC arena size.
+
+`MRB_HEAP_PAGE_SIZE`
+* Defines value is `1024`.
+* Specifies number of `RBasic` per each heap page.
+
+## Memory pool configuration.
+
+`POOL_ALIGNMENT`
+* Default value is `4`.
+* If you're allocating data types that requires alignment more than default value define the
+largest value of required alignment.
+
+`POOL_PAGE_SIZE`
+* Default value is `16000`.
+* Specifies page size of pool page.
+* Smaller the value is increases memory overhead.
+
+## State atexit configuration.
+
+`MRB_FIXED_STATE_ATEXIT_STACK`
+* If defined enables fixed size `mrb_state` atexit stack.
+* Raises `RuntimeError` when `mrb_state_atexit` call count to same `mrb_state` exceeds
+`MRB_FIXED_STATE_ATEXIT_STACK_SIZE`'s value.
+
+`MRB_FIXED_STATE_ATEXIT_STACK_SIZE`
+* Default value is `5`.
+* If `MRB_FIXED_STATE_ATEXIT_STACK` isn't defined this macro is ignored.
+
+## `mrb_value` configuration.
+
+`MRB_ENDIAN_BIG`
+* If defined compiles mruby for big endian machines.
+* Used in `MRB_NAN_BOXING`.
+* Some mrbgem use this mrbconf.
+
+`MRB_NAN_BOXING`
+* If defined represent `mrb_value` in boxed `double`.
+* Conflicts with `MRB_USE_FLOAT` and `MRB_WITHOUT_FLOAT`.
+
+`MRB_WORD_BOXING`
+* If defined represent `mrb_value` as a word.
+* If defined `Float` will be a mruby object with `RBasic`.
+
+## Instance variable configuration.
+`MRB_IV_SEGMENT_SIZE`
+* Default value is `4`.
+* Specifies size of each segment in segment list.
+
+## Reduce heap memory configuration.
+
+`MRB_USE_LINK_TIME_RO_DATA_P`
+* Only available on ELF platforms.
+* If you specify the address of a read-only section when creating a symbol or string, that string will be used as it is.
+* Heap memory can be saved.
+* Uses `__ehdr_start` and `__init_array_start`.
+* It must be `__ehdr_start < data_addr < __init_array_start`.
+
+`MRB_USE_CUSTOM_RO_DATA_P`
+* Takes precedence over `MRB_USE_LINK_TIME_RO_DATA_P`.
+* Please try if `MRB_USE_LINK_TIME_RO_DATA_P` is not available.
+* The `mrb_ro_data_p()` function is implemented by the user in an arbitrary file.
+* The prototype declaration is `mrb_bool mrb_ro_data_p(const char *ptr)`.
+* Return `TRUE` if `ptr` is in read-only section, otherwise return `FALSE`.
+
+## Other configuration.
+`MRB_UTF8_STRING`
+* Adds UTF-8 encoding support to character-oriented String instance methods.
+* If it isn't defined, they only support the US-ASCII encoding.
+
+`MRB_FUNCALL_ARGC_MAX`
+* Default value is `16`.
+* Specifies 4th argument(`argc`) max value of `mrb_funcall`.
+* Raises `ArgumentError` when the `argc` argument is bigger then this value `mrb_funcall`.
+
+`KHASH_DEFAULT_SIZE`
+* Default value is `32`.
+* Specifies default size of khash table bucket.
+* Used in `kh_init_ ## name` function.
+
+`MRB_STR_BUF_MIN_SIZE`
+* Default value is `128`.
+* Specifies initial capacity of `RString` created by `mrb_str_buf_new` function..
+
+`MRB_METHOD_CACHE`
+* Improve performance for method dispatch.
+
+`MRB_METHOD_CACHE_SIZE`
+* Default value is `128`.
+* Ignored if `MRB_METHOD_CACHE` is not defined.
+* Need to be the power of 2.
+
+`MRB_METHOD_T_STRUCT`
+* Use C struct to represent `mrb_method_t`
+* No `MRB_METHOD_T_STRUCT` requires highest 2 bits of function pointers to be zero
+* Define this macro on machines that use higher bits of pointers
+
+`MRB_ENABLE_ALL_SYMBOLS`
+* Make it available `Symbols.all_symbols` in `mrbgems/mruby-symbol-ext`
+* Increase heap memory usage.
Index: /EcnlProtoTool/trunk/mruby-2.1.1/doc/guides/mrbgems.md
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/doc/guides/mrbgems.md	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/doc/guides/mrbgems.md	(revision 439)
@@ -0,0 +1,350 @@
+# mrbgems
+
+mrbgems is a library manager to integrate C and Ruby extension in an easy and
+standardised way into mruby.
+
+## Usage
+
+By default mrbgems is currently deactivated. As soon as you add a GEM to your
+build configuration (i.e. *build_config.rb*), mrbgems will be activated and the
+extension integrated.
+
+To add a GEM into the *build_config.rb* add the following line for example:
+```ruby
+conf.gem '/path/to/your/gem/dir'
+```
+
+You can also use a relative path which would be relative from the mruby root:
+```ruby
+conf.gem 'examples/mrbgems/ruby_extension_example'
+```
+
+A remote GIT repository location for a GEM is also supported:
+```ruby
+conf.gem :git => 'https://github.com/masuidrive/mrbgems-example.git', :branch => 'master'
+conf.gem :github => 'masuidrive/mrbgems-example', :branch => 'master'
+conf.gem :bitbucket => 'mruby/mrbgems-example', :branch => 'master'
+```
+
+You can specify the sub directory of the repository with `:path` option:
+```ruby
+conf.gem github: 'mruby/mruby', path: 'mrbgems/mruby-socket'
+```
+
+To use mrbgem from [mgem-list](https://github.com/mruby/mgem-list) use `:mgem` option:
+```ruby
+conf.gem :mgem => 'mruby-yaml'
+conf.gem :mgem => 'yaml' # 'mruby-' prefix could be omitted
+```
+
+For specifying commit hash to checkout use `:checksum_hash` option:
+```ruby
+conf.gem mgem: 'mruby-redis', checksum_hash: '3446d19fc4a3f9697b5ddbf2a904f301c42f2f4e'
+```
+
+If there is missing dependencies, mrbgem dependencies solver will reference
+mrbgem from core or mgem-list.
+
+To pull all gems from remote GIT repository on build, call ```rake -p```,
+or ```rake --pull-gems```.
+
+NOTE: `:bitbucket` option supports only git. Hg is unsupported in this version.
+
+## GemBox
+
+There are instances when you wish to add a collection of mrbgems into mruby at
+once, or be able to substitute mrbgems based on configuration, without having to
+add each gem to the *build_config.rb* file.  A packaged collection of mrbgems
+is called a GemBox.  A GemBox is a file that contains a list of mrbgems to load
+into mruby, in the same format as if you were adding them to *build_config.rb*
+via `config.gem`, but wrapped in an `MRuby::GemBox` object.  GemBoxes are
+loaded into mruby via `config.gembox 'boxname'`.
+
+Below we have created a GemBox containing *mruby-time* and *mrbgems-example*:
+```ruby
+MRuby::GemBox.new do |conf|
+  conf.gem "#{root}/mrbgems/mruby-time"
+  conf.gem :github => 'masuidrive/mrbgems-example'
+end
+```
+
+As mentioned, the GemBox uses the same conventions as `MRuby::Build`.  The GemBox
+must be saved with a *.gembox* extension inside the *mrbgems* directory to to be
+picked up by mruby.
+
+To use this example GemBox, we save it as `custom.gembox` inside the *mrbgems*
+directory in mruby, and add the following to our *build_config.rb* file inside
+the build block:
+```ruby
+conf.gembox 'custom'
+```
+This will cause the *custom* GemBox to be read in during the build process,
+adding *mruby-time* and *mrbgems-example* to the build.
+
+If you want, you can put GemBox outside of mruby directory. In that case you must
+specify an absolute path like below.
+```ruby
+conf.gembox "#{ENV["HOME"]}/mygemboxes/custom"
+```
+
+There are two GemBoxes that ship with mruby: [default](../../mrbgems/default.gembox)
+and [full-core](../../mrbgems/full-core.gembox). The [default](../../mrbgems/default.gembox) GemBox
+contains several core components of mruby, and [full-core](../../mrbgems/full-core.gembox)
+contains every gem found in the *mrbgems* directory.
+
+## GEM Structure
+
+The maximal GEM structure looks like this:
+
+	+- GEM_NAME         <- Name of GEM
+	   |
+	   +- include/      <- Header for Ruby extension (will exported)
+	   |
+	   +- mrblib/       <- Source for Ruby extension
+	   |
+	   +- src/          <- Source for C extension
+	   |
+	   +- test/         <- Test code (Ruby)
+	   |
+	   +- mrbgem.rake   <- GEM Specification
+	   |
+	   +- README.md     <- Readme for GEM
+
+The folder *mrblib* contains pure Ruby files to extend mruby. The folder *src*
+contains C/C++ files to extend mruby. The folder *include* contains C/C++ header
+files. The folder *test* contains C/C++ and pure Ruby files for testing purposes
+which will be used by `mrbtest`. *mrbgem.rake* contains the specification
+to compile C and Ruby files. *README.md* is a short description of your GEM.
+
+## Build process
+
+mrbgems expects a specification file called *mrbgem.rake* inside of your
+GEM directory. A typical GEM specification could look like this for example:
+```ruby
+MRuby::Gem::Specification.new('c_and_ruby_extension_example') do |spec|
+  spec.license = 'MIT'
+  spec.author  = 'mruby developers'
+  spec.summary = 'Example mrbgem using C and ruby'
+end
+```
+
+The mrbgems build process will use this specification to compile Object and Ruby
+files. The compilation results will be added to *lib/libmruby.a*. This file exposes
+the GEM functionality to tools like `mruby` and `mirb`.
+
+The following properties can be set inside of your `MRuby::Gem::Specification` for
+information purpose:
+
+* `spec.license` or `spec.licenses` (A single license or a list of them under which this GEM is licensed)
+* `spec.author` or `spec.authors` (Developer name or a list of them)
+* `spec.version` (Current version)
+* `spec.description` (Detailed description)
+* `spec.summary`
+  * One line short description of mrbgem.
+  * Printed in build summary of rake when set.
+* `spec.homepage` (Homepage)
+* `spec.requirements` (External requirements as information for user)
+
+The `license` and `author` properties are required in every GEM!
+
+In case your GEM is depending on other GEMs please use
+`spec.add_dependency(gem, *requirements[, default_get_info])` like:
+```ruby
+MRuby::Gem::Specification.new('c_and_ruby_extension_example') do |spec|
+  spec.license = 'MIT'
+  spec.author  = 'mruby developers'
+
+  # Add GEM dependency mruby-parser.
+  # The version must be between 1.0.0 and 1.5.2 .
+  spec.add_dependency('mruby-parser', '>= 1.0.0', '<= 1.5.2')
+
+  # Use any version of mruby-uv from github.
+  spec.add_dependency('mruby-uv', '>= 0.0.0', :github => 'mattn/mruby-uv')
+
+  # Use latest mruby-onig-regexp from github. (version requirements can be omitted)
+  spec.add_dependency('mruby-onig-regexp', :github => 'mattn/mruby-onig-regexp')
+
+  # You can add extra mgems active only on test
+  spec.add_test_dependency('mruby-process', :github => 'iij/mruby-process')
+end
+```
+
+The version requirements and default gem information are optional.
+
+Version requirement supports following operators:
+* '=': is equal
+* '!=': is not equal
+* '>': is greater
+* '<': is lesser
+* '>=': is equal or greater
+* '<=': is equal or lesser
+* '~>': is equal or greater and is lesser than the next major version
+    * example 1: '~> 2.2.2' means '>= 2.2.2' and '< 2.3.0'
+    * example 2: '~> 2.2'   means '>= 2.2.0' and '< 3.0.0'
+
+When more than one version requirements is passed, the dependency must satisfy all of it.
+
+You can have default gem to use as dependency when it's not defined in *build_config.rb*.
+When the last argument of `add_dependency` call is `Hash`, it will be treated as default gem information.
+Its format is same as argument of method `MRuby::Build#gem`, expect that it can't be treated as path gem location.
+
+When a special version of dependency is required,
+use `MRuby::Build#gem` in *build_config.rb* to override default gem.
+
+If you have conflicting GEMs use the following method:
+* `spec.add_conflict(gem, *requirements)`
+    * The `requirements` argument is same as in `add_dependency` method.
+
+like following code:
+```ruby
+MRuby::Gem::Specification.new 'some-regexp-binding' do |spec|
+  spec.license = 'BSD'
+  spec.author = 'John Doe'
+
+  spec.add_conflict 'mruby-onig-regexp', '> 0.0.0'
+  spec.add_conflict 'mruby-hs-regexp'
+  spec.add_conflict 'mruby-pcre-regexp'
+  spec.add_conflict 'mruby-regexp-pcre'
+end
+```
+
+In case your GEM has more complex build requirements you can use
+the following options additionally inside of your GEM specification:
+
+* `spec.cc.flags` (C compiler flags)
+* `spec.cc.defines` (C compiler defines)
+* `spec.cc.include_paths` (C compiler include paths)
+* `spec.linker.flags` (Linker flags)
+* `spec.linker.libraries` (Linker libraries)
+* `spec.linker.library_paths` (Linker additional library path)
+* `spec.bins` (Generate binary file)
+* `spec.rbfiles` (Ruby files to compile)
+* `spec.objs` (Object files to compile)
+* `spec.test_rbfiles` (Ruby test files for integration into mrbtest)
+* `spec.test_objs` (Object test files for integration into mrbtest)
+* `spec.test_preload` (Initialization files for mrbtest)
+
+You also can use `spec.mruby.cc` and `spec.mruby.linker` to add extra global parameters for compiler and linker.
+
+### include_paths and dependency
+
+Your GEM can export include paths to another GEMs that depends on your GEM.
+By default, `/...absolute path.../{GEM_NAME}/include` will be exported.
+So it is recommended not to put GEM's local header files on include/.
+
+These exports are retroactive.
+For example: when B depends to C and A depends to B, A will get include paths exported by C.
+
+Exported include_paths are automatically appended to GEM local include_paths by rake.
+You can use `spec.export_include_paths` accessor if you want more complex build.
+
+
+## C Extension
+
+mruby can be extended with C. This is possible by using the C API to
+integrate C libraries into mruby.
+
+### Preconditions
+
+mrbgems expects that you have implemented a C method called
+`mrb_YOURGEMNAME_gem_init(mrb_state)`. `YOURGEMNAME` will be replaced
+by the name of your GEM. If you call your GEM *c_extension_example*, your
+initialisation method could look like this:
+```C
+void
+mrb_c_extension_example_gem_init(mrb_state* mrb) {
+  struct RClass *class_cextension = mrb_define_module(mrb, "CExtension");
+  mrb_define_class_method(mrb, class_cextension, "c_method", mrb_c_method, MRB_ARGS_NONE());
+}
+```
+
+### Finalize
+
+mrbgems expects that you have implemented a C method called
+`mrb_YOURGEMNAME_gem_final(mrb_state)`. `YOURGEMNAME` will be replaced
+by the name of your GEM. If you call your GEM *c_extension_example*, your
+finalizer method could look like this:
+
+```C
+void
+mrb_c_extension_example_gem_final(mrb_state* mrb) {
+  free(someone);
+}
+```
+
+### Example
+
+	+- c_extension_example/
+	   |
+	   +- src/
+	   |  |
+	   |  +- example.c         <- C extension source
+	   |
+	   +- test/
+	   |  |
+	   |  +- example.rb        <- Test code for C extension
+	   |
+	   +- mrbgem.rake          <- GEM specification
+	   |
+	   +- README.md
+
+## Ruby Extension
+
+mruby can be extended with pure Ruby. It is possible to override existing
+classes or add new ones in this way. Put all Ruby files into the *mrblib*
+folder.
+
+
+### Pre-Conditions
+
+none
+
+### Example
+
+	+- ruby_extension_example/
+	   |
+	   +- mrblib/
+	   |  |
+	   |  +- example.rb        <- Ruby extension source
+	   |
+	   +- test/
+	   |  |
+	   |  +- example.rb        <- Test code for Ruby extension
+	   |
+	   +- mrbgem.rake          <- GEM specification
+	   |
+	   +- README.md
+
+## C and Ruby Extension
+
+mruby can be extended with C and Ruby at the same time. It is possible to
+override existing classes or add new ones in this way. Put all Ruby files
+into the *mrblib* folder and all C files into the *src* folder.
+
+mruby codes under *mrblib* directory would be executed after gem init C
+function is called. Make sure *mruby script* depends on *C code* and
+*C code* doesn't depend on *mruby script*.
+
+### Pre-Conditions
+
+See C and Ruby example.
+
+### Example
+
+	+- c_and_ruby_extension_example/
+	   |
+	   +- mrblib/
+	   |  |
+	   |  +- example.rb        <- Ruby extension source
+	   |
+	   +- src/
+	   |  |
+	   |  +- example.c         <- C extension source
+	   |
+	   +- test/
+	   |  |
+	   |  +- example.rb        <- Test code for C and Ruby extension
+	   |
+	   +- mrbgem.rake          <- GEM specification
+	   |
+	   +- README.md
Index: /EcnlProtoTool/trunk/mruby-2.1.1/doc/limitations.md
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/doc/limitations.md	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/doc/limitations.md	(revision 439)
@@ -0,0 +1,299 @@
+# Limitations and Differences
+
+The philosophy of mruby is to be a lightweight implementation of
+the Ruby ISO standard. These two objectives are partially contradicting.
+Ruby is an expressive language with complex implementation details which
+are difficult to implement in a lightweight manner. To cope with this,
+limitations to the "Ruby Compatibility" are defined.
+
+This document is collecting these limitations.
+
+## Integrity
+
+This document does not contain a complete list of limitations.
+Please help to improve it by submitting your findings.
+
+
+## `1/2` gives `0.5`
+
+Since mruby does not have `Bignum`, bigger integers are represented
+by `Float` numbers. To enhance interoperability between `Fixnum`
+and `Float`, mruby provides `Float#upto` and other iterating
+methods for the `Float` class.  As a side effect, `1/2` gives `0.5`
+not `0`.
+
+## `Array` passed to `puts`
+
+Passing an Array to `puts` results in different output.
+
+```ruby
+puts [1,2,3]
+```
+
+#### Ruby [ruby 2.0.0p645 (2015-04-13 revision 50299)]
+
+```
+1
+2
+3
+```
+
+#### mruby [2.1.1 (2020-06-04)]
+
+```
+[1, 2, 3]
+```
+
+## `Kernel.raise` in rescue clause
+
+`Kernel.raise` without arguments does not raise the current exception within
+a rescue clause.
+
+```ruby
+begin
+  1 / 0
+rescue
+  raise
+end
+```
+
+#### Ruby [ruby 2.0.0p645 (2015-04-13 revision 50299)]
+
+`ZeroDivisionError` is raised.
+
+#### mruby [2.1.1 (2020-06-04)]
+
+No exception is raised.
+
+## Fiber execution can't cross C function boundary
+
+mruby's `Fiber` is implemented in a similar way to Lua's co-routine. This
+results in the consequence that you can't switch context within C functions.
+Only exception is `mrb_fiber_yield` at return.
+
+## `Array` does not support instance variables
+
+To reduce memory consumption `Array` does not support instance variables.
+
+```ruby
+class Liste < Array
+  def initialize(str = nil)
+    @feld = str
+  end
+end
+
+p Liste.new "foobar"
+```
+
+#### Ruby [ruby 2.0.0p645 (2015-04-13 revision 50299)]
+
+` [] `
+
+#### mruby [2.1.1 (2020-06-04)]
+
+`ArgumentError` is raised.
+
+## Method visibility
+
+For simplicity reasons no method visibility (public/private/protected) is
+supported. Those methods are defined but they are dummy methods.
+
+```ruby
+class VisibleTest
+
+  def public_method; end
+
+  private
+  def private_method; end
+
+end
+
+p VisibleTest.new.respond_to?(:private_method, false)
+p VisibleTest.new.respond_to?(:private_method, true)
+```
+
+#### Ruby [ruby 2.0.0p645 (2015-04-13 revision 50299)]
+
+```
+false
+true
+```
+
+#### mruby [2.1.1 (2020-06-04)]
+
+```
+true
+true
+```
+
+### Visibility Declaration
+
+The declaration form of following visibility methods are not implemented.
+
+* `public`
+* `private`
+* `protected`
+* `module_function`
+
+Especially, `module_function` method is not dummy, but no declaration form.
+
+```
+module TestModule
+  module_function
+  def test_func
+    p 'test_func called'
+  end
+
+  test_func
+end
+
+p 'ok'
+```
+
+#### Ruby [ruby 2.5.5p157 (2019-03-15 revision 67260)]
+
+```
+ok
+```
+
+#### mruby [2.1.1 (2020-06-04)]
+
+```
+test.rb:8: undefined method 'test_func' (NoMethodError)
+```
+
+## `defined?`
+
+The `defined?` keyword is considered too complex to be fully
+implemented. It is recommended to use `const_defined?` and
+other reflection methods instead.
+
+```ruby
+defined?(Foo)
+```
+
+#### Ruby [ruby 2.0.0p645 (2015-04-13 revision 50299)]
+
+```
+nil
+```
+
+#### mruby [2.1.1 (2020-06-04)]
+
+`NameError` is raised.
+
+## `alias` on global variables
+
+Aliasing a global variable works in CRuby but is not part
+of the ISO standard.
+
+```ruby
+alias $a $__a__
+```
+
+#### Ruby [ruby 2.0.0p645 (2015-04-13 revision 50299)]
+
+` nil `
+
+#### mruby [2.1.1 (2020-06-04)]
+
+Syntax error
+
+## Operator modification
+
+An operator can't be overwritten by the user.
+
+```ruby
+class String
+  def +
+  end
+end
+
+'a' + 'b'
+```
+
+#### Ruby [ruby 2.0.0p645 (2015-04-13 revision 50299)]
+
+`ArgumentError` is raised.
+The re-defined `+` operator does not accept any arguments.
+
+#### mruby [2.1.1 (2020-06-04)]
+
+` 'ab' `
+Behavior of the operator wasn't changed.
+
+## `Kernel#binding` is not supported
+
+`Kernel#binding` method is not supported.
+
+#### Ruby [ruby 2.5.1p57 (2018-03-29 revision 63029)]
+
+```
+$ ruby -e 'puts Proc.new {}.binding'
+#<Binding:0x00000e9deabb9950>
+```
+
+#### mruby [2.1.1 (2020-06-04)]
+
+```
+$ ./bin/mruby -e 'puts Proc.new {}.binding'
+trace (most recent call last):
+        [0] -e:1
+-e:1: undefined method 'binding' (NoMethodError)
+```
+
+## Keyword arguments
+
+mruby keyword arguments behave slightly different from CRuby 2.5
+to make the behavior simpler and less confusing. Maybe in the
+future, the simpler behavior will be adopted to CRuby as well.
+
+#### Ruby [ruby 2.5.1p57 (2018-03-29 revision 63029)]
+
+```
+$ ruby -e 'def m(*r,**k) p [r,k] end; m("a"=>1,:b=>2)'
+[[{"a"=>1}], {:b=>2}]
+```
+
+#### mruby [mruby 2.1.1]
+
+```
+$ ./bin/mruby -e 'def m(*r,**k) p [r,k] end; m("a"=>1,:b=>2)'
+trace (most recent call last):
+	[0] -e:1
+-e:1: keyword argument hash with non symbol keys (ArgumentError)
+```
+
+## Argument Destructuring
+
+```ruby
+def m(a,(b,c),d); p [a,b,c,d]; end
+m(1,[2,3],4)  # => [1,2,3,4]
+```
+Destructured arguments (`b` and `c` in above example) cannot be accessed
+from the default expression of optional arguments and keyword arguments,
+since actual assignment is done after the evaluation of those default
+expressions. Thus:
+
+```ruby
+def f(a,(b,c),d=b)
+  p [a,b,c,d]
+end
+f(1,[2,3])
+```
+
+CRuby gives `[1,2,3,nil]`. mruby raises `NoMethodError` for `b`.
+
+## `nil?` redefinition in conditional expressions
+
+Redefinition of `nil?` is ignored in conditional expressions.
+
+```ruby
+a = "a"
+def a.nil?
+  true
+end
+puts(a.nil? ? "truthy" : "falsy")
+```
+
+Ruby outputs `falsy`. mruby outputs `truthy`.
Index: /EcnlProtoTool/trunk/mruby-2.1.1/doc/opcode.md
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/doc/opcode.md	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/doc/opcode.md	(revision 439)
@@ -0,0 +1,127 @@
+# The new bytecode
+
+We will reimplement VM to use 8bit instruction code. By
+bytecode, we mean real byte code. The whole purpose is
+reducing the memory consumption of mruby VM.
+
+# Instructions
+
+Instructions are bytes. There can be 256 instructions. Currently we
+have 94 instructions. Instructions can take 0 to 3 operands.
+
+## operands
+
+The size of operands can be either 8bits, 16bits or 24bits.
+In the table.1 below, the second field describes the size (and
+sign) of operands.
+
+* B: 8bit
+* sB: signed 8bit
+* S: 16bit
+* sS: signed 16bit
+* W: 24bit
+
+First two byte operands may be extended to 16bit. When those byte
+operands are bigger than 256, the instruction will be prefixed by
+`OP_EXT1` (means 1st operand is 16bit) or `OP_EXT2` (means 2nd operand
+is 16bit) or `OP_EXT3` (means 1st and 2nd operands are 16bit).
+
+For instructions marked by `'`, `OP_EXT1` can be prefixed. For those
+with `"`, either `OP_EXT1` or `OP_EXT2` or `OP_EXT2` can be prefixed.
+
+## table.1 Instruction Table
+
+| Instruction Name | Operand type | Semantics        	|
+|:-----------------|--------------|---------------------|
+| OP_NOP           | -            |                  	|
+| OP_MOVE"         | BB           | R(a) = R(b)      	
+| OP_LOADL"        | BB           | R(a) = Pool(b)   	
+| OP_LOADI"        | BsB          | R(a) = mrb_int(b)	
+| OP_LOADI_0'      | B            | R(a) = 0	
+| OP_LOADI_1'      | B            | R(a) = 1	
+| OP_LOADI_2'      | B            | R(a) = 2	
+| OP_LOADI_3'      | B            | R(a) = 3	
+| OP_LOADSYM"      | BB           | R(a) = Syms(b)	
+| OP_LOADNIL'      | B            | R(a) = nil	
+| OP_LOADSELF'     | B            | R(a) = self	
+| OP_LOADT'        | B            | R(a) = true	
+| OP_LOADF'        | B            | R(a) = false	
+| OP_GETGV"        | BB           | R(a) = getglobal(Syms(b))	
+| OP_SETGV"        | BB           | setglobal(Syms(b), R(a))	
+| OP_GETSV"        | BB           | R(a) = Special[b]	
+| OP_SETSV"        | BB           | Special[b] = R(a)	
+| OP_GETIV"        | BB           | R(a) = ivget(Syms(b))	
+| OP_SETIV"        | BB           | ivset(Syms(b),R(a))	
+| OP_GETCV"        | BB           | R(a) = cvget(Syms(b))	
+| OP_SETCV"        | BB           | cvset(Syms(b),R(a))	
+| OP_GETCONST"     | BB           | R(a) = constget(Syms(b))	
+| OP_SETCONST"     | BB           | constset(Syms(b),R(a))	
+| OP_GETMCNST"     | BB           | R(a) = R(a)::Syms(b)	
+| OP_SETMCNST"     | BB           | R(a+1)::Syms(b) = R(a)	
+| OP_GETUPVAR'     | BBB          | R(a) = uvget(b,c)	
+| OP_SETUPVAR'     | BBB          | uvset(b,c,R(a))	
+| OP_JMP           | S            | pc+=a	
+| OP_JMPIF'        | SB           | if R(b) pc+=a	
+| OP_JMPNOT'       | SB           | if !R(b) pc+=a	
+| OP_ONERR         | sS           | rescue_push(pc+a)	
+| OP_EXCEPT'       | B            | R(a) = exc	
+| OP_RESCUE"       | BB           | R(b) = R(a).isa?(R(b))	
+| OP_POPERR        | B            | a.times{rescue_pop()}	
+| OP_RAISE'        | B            | raise(R(a))	
+| OP_EPUSH'        | B            | ensure_push(SEQ[a])	
+| OP_EPOP          | B            | A.times{ensure_pop().call}	
+| OP_SENDV"        | BB           | R(a) = call(R(a),Syms(b),*R(a+1))	
+| OP_SENDVB"       | BB           | R(a) = call(R(a),Syms(b),*R(a+1),&R(a+2))	
+| OP_SEND"         | BBB          | R(a) = call(R(a),Syms(b),R(a+1),...,R(a+c))	
+| OP_SENDB"        | BBB          | R(a) = call(R(a),Syms(Bx),R(a+1),...,R(a+c),&R(a+c+1))	
+| OP_CALL'         | B            | R(a) = self.call(frame.argc, frame.argv)	
+| OP_SUPER'        | BB           | R(a) = super(R(a+1),... ,R(a+b+1))	
+| OP_ARGARY'       | BS           | R(a) = argument array (16=5:1:5:1:4)	
+| OP_ENTER         | W            | arg setup according to flags (23=5:5:1:5:5:1:1)	
+| OP_KARG"         | BB           | R(a) = kdict[Syms(Bx)]                          # todo	
+| OP_KARG2"        | BB           | R(a) = kdict[Syms(Bx)]; kdict.rm(Syms(b))       # todo	
+| OP_RETURN'       | B            | return R(a) (normal)	
+| OP_RETURN_BLK'   | B            | return R(a) (in-block return)	
+| OP_BREAK'        | B            | break R(a)	
+| OP_BLKPUSH'      | BS           | R(a) = block (16=5:1:5:1:4)	
+| OP_ADD"          | BB           | R(a) = R(a)+R(a+1)	
+| OP_ADDI"         | BBB          | R(a) = R(a)+mrb_int(c)	
+| OP_SUB"          | BB           | R(a) = R(a)-R(a+1)	
+| OP_SUBI"         | BB           | R(a) = R(a)-C	
+| OP_MUL"          | BB           | R(a) = R(a)*R(a+1)	
+| OP_DIV"          | BB           | R(a) = R(a)/R(a+1)	
+| OP_EQ"           | BB           | R(a) = R(a)==R(a+1)	
+| OP_LT"           | BB           | R(a) = R(a)<R(a+1)	
+| OP_LE"           | BB           | R(a) = R(a)<=R(a+1)	
+| OP_GT"           | BB           | R(a) = R(a)>R(a+1)	
+| OP_GE"           | BB           | R(a) = R(a)>=R(a+1)	
+| OP_ARRAY'        | BB           | R(a) = ary_new(R(a),R(a+1)..R(a+b))	
+| OP_ARRAY2"       | BB           | R(a) = ary_new(R(b),R(b+1)..R(b+c))	
+| OP_ARYCAT'       | B            | ary_cat(R(a),R(a+1))	
+| OP_ARYPUSH'      | B            | ary_push(R(a),R(a+1))	
+| OP_AREF'         | BB           | R(a) = R(a)[b]	
+| OP_ASET'         | BB           | R(a)[b] = R(a+1)	
+| OP_APOST'        | BB           | *R(a),R(A+1)..R(A+C) = R(a)[B..]	
+| OP_STRING"       | BB           | R(a) = str_dup(Lit(b))	
+| OP_STRCAT'       | B            | str_cat(R(a),R(a+1))	
+| OP_HASH'         | BB           | R(a) = hash_new(R(a),R(a+1)..R(a+b))	
+| OP_HASHADD'      | BB           | R(a) = hash_push(R(a),R(a+1)..R(a+b))	
+| OP_LAMBDA"       | BB           | R(a) = lambda(SEQ[b],OP_L_LAMBDA)	
+| OP_BLOCK"        | BB           | R(a) = lambda(SEQ[b],OP_L_BLOCK)	
+| OP_METHOD"       | BB           | R(a) = lambda(SEQ[b],OP_L_METHOD)	
+| OP_RANGE_INC'    | B            | R(a) = range_new(R(a),R(a+1),FALSE)	
+| OP_RANGE_EXC'    | B            | R(a) = range_new(R(a),R(a+1),TRUE)	
+| OP_OCLASS'       | B            | R(a) = ::Object	
+| OP_CLASS"        | BB           | R(a) = newclass(R(a),Syms(b),R(a+1))	
+| OP_MODULE"       | BB           | R(a) = newmodule(R(a),Syms(b))	
+| OP_EXEC"         | BB           | R(a) = blockexec(R(a),SEQ[b])	
+| OP_DEF"          | BB           | R(a).newmethod(Syms(b),R(a+1))	
+| OP_ALIAS'        | B            | alias_method(R(a),R(a+1),R(a+2))	
+| OP_UNDEF"        | BB           | undef_method(R(a),Syms(b))	
+| OP_SCLASS'       | B            | R(a) = R(a).singleton_class	
+| OP_TCLASS'       | B            | R(a) = target_class	
+| OP_ERR'          | B            | raise(RuntimeError, Lit(Bx))	
+| OP_EXT1          | -            | make 1st operand 16bit	
+| OP_EXT2          | -            | make 2nd operand 16bit	
+| OP_EXT3          | -            | make 1st and 2nd operands 16bit	
+| OP_STOP          | -            | stop VM	
Index: /EcnlProtoTool/trunk/mruby-2.1.1/examples/mrbgems/c_and_ruby_extension_example/README.md
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/examples/mrbgems/c_and_ruby_extension_example/README.md	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/examples/mrbgems/c_and_ruby_extension_example/README.md	(revision 439)
@@ -0,0 +1,4 @@
+C and Ruby Extension Example
+=========
+
+This is an example gem which implements a C and Ruby extension.
Index: /EcnlProtoTool/trunk/mruby-2.1.1/examples/mrbgems/c_and_ruby_extension_example/mrbgem.rake
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/examples/mrbgems/c_and_ruby_extension_example/mrbgem.rake	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/examples/mrbgems/c_and_ruby_extension_example/mrbgem.rake	(revision 439)
@@ -0,0 +1,23 @@
+MRuby::Gem::Specification.new('c_and_ruby_extension_example') do |spec|
+  spec.license = 'MIT'
+  spec.author  = 'mruby developers'
+
+  # Add compile flags
+  # spec.cc.flags << ''
+
+  # Add cflags to all
+  # spec.mruby.cc.flags << '-g'
+
+  # Add libraries
+  # spec.linker.libraries << 'external_lib'
+
+  # Default build files
+  # spec.rbfiles = Dir.glob("#{dir}/mrblib/*.rb")
+  # spec.objs = Dir.glob("#{dir}/src/*.{c,cpp,m,asm,S}").map { |f| objfile(f.relative_path_from(dir).pathmap("#{build_dir}/%X")) }
+  # spec.test_rbfiles = Dir.glob("#{dir}/test/*.rb")
+  # spec.test_objs = Dir.glob("#{dir}/test/*.{c,cpp,m,asm,S}").map { |f| objfile(f.relative_path_from(dir).pathmap("#{build_dir}/%X")) }
+  # spec.test_preload = 'test/assert.rb'
+
+  # Values accessible as TEST_ARGS inside test scripts
+  # spec.test_args = {'tmp_dir' => Dir::tmpdir}
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/examples/mrbgems/c_and_ruby_extension_example/mrblib/example.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/examples/mrbgems/c_and_ruby_extension_example/mrblib/example.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/examples/mrbgems/c_and_ruby_extension_example/mrblib/example.rb	(revision 439)
@@ -0,0 +1,5 @@
+module CRubyExtension
+  def CRubyExtension.ruby_method
+    puts "A Ruby Extension"
+  end
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/examples/mrbgems/c_and_ruby_extension_example/src/example.c
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/examples/mrbgems/c_and_ruby_extension_example/src/example.c	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/examples/mrbgems/c_and_ruby_extension_example/src/example.c	(revision 439)
@@ -0,0 +1,20 @@
+#include <mruby.h>
+#include <stdio.h>
+
+static mrb_value
+mrb_c_method(mrb_state *mrb, mrb_value self)
+{
+  puts("A C Extension");
+  return self;
+}
+
+void
+mrb_c_and_ruby_extension_example_gem_init(mrb_state* mrb) {
+  struct RClass *class_cextension = mrb_define_module(mrb, "CRubyExtension");
+  mrb_define_class_method(mrb, class_cextension, "c_method", mrb_c_method, MRB_ARGS_NONE());
+}
+
+void
+mrb_c_and_ruby_extension_example_gem_final(mrb_state* mrb) {
+  /* finalizer */
+}
Index: /EcnlProtoTool/trunk/mruby-2.1.1/examples/mrbgems/c_and_ruby_extension_example/test/example.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/examples/mrbgems/c_and_ruby_extension_example/test/example.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/examples/mrbgems/c_and_ruby_extension_example/test/example.rb	(revision 439)
@@ -0,0 +1,7 @@
+assert('C and Ruby Extension Example 1') do
+  CRubyExtension.respond_to? :c_method
+end
+
+assert('C and Ruby Extension Example 2') do
+  CRubyExtension.respond_to? :ruby_method
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/examples/mrbgems/c_extension_example/README.md
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/examples/mrbgems/c_extension_example/README.md	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/examples/mrbgems/c_extension_example/README.md	(revision 439)
@@ -0,0 +1,4 @@
+C Extension Example
+=========
+
+This is an example gem which implements a C extension.
Index: /EcnlProtoTool/trunk/mruby-2.1.1/examples/mrbgems/c_extension_example/mrbgem.rake
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/examples/mrbgems/c_extension_example/mrbgem.rake	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/examples/mrbgems/c_extension_example/mrbgem.rake	(revision 439)
@@ -0,0 +1,23 @@
+MRuby::Gem::Specification.new('c_extension_example') do |spec|
+  spec.license = 'MIT'
+  spec.author  = 'mruby developers'
+
+  # Add compile flags
+  # spec.cc.flags << '-g'
+
+  # Add cflags to all
+  # spec.mruby.cc.flags << '-g'
+
+  # Add libraries
+  # spec.linker.libraries << 'external_lib'
+
+  # Default build files
+  # spec.rbfiles = Dir.glob("#{dir}/mrblib/*.rb")
+  # spec.objs = Dir.glob("#{dir}/src/*.{c,cpp,m,asm,S}").map { |f| objfile(f.relative_path_from(dir).pathmap("#{build_dir}/%X")) }
+  # spec.test_rbfiles = Dir.glob("#{dir}/test/*.rb")
+  # spec.test_objs = Dir.glob("#{dir}/test/*.{c,cpp,m,asm,S}").map { |f| objfile(f.relative_path_from(dir).pathmap("#{build_dir}/%X")) }
+  # spec.test_preload = 'test/assert.rb'
+
+  # Values accessible as TEST_ARGS inside test scripts
+  # spec.test_args = {'tmp_dir' => Dir::tmpdir}
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/examples/mrbgems/c_extension_example/src/example.c
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/examples/mrbgems/c_extension_example/src/example.c	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/examples/mrbgems/c_extension_example/src/example.c	(revision 439)
@@ -0,0 +1,20 @@
+#include <mruby.h>
+#include <stdio.h>
+
+static mrb_value
+mrb_c_method(mrb_state *mrb, mrb_value self)
+{
+  puts("A C Extension");
+  return self;
+}
+
+void
+mrb_c_extension_example_gem_init(mrb_state* mrb) {
+  struct RClass *class_cextension = mrb_define_module(mrb, "CExtension");
+  mrb_define_class_method(mrb, class_cextension, "c_method", mrb_c_method, MRB_ARGS_NONE());
+}
+
+void
+mrb_c_extension_example_gem_final(mrb_state* mrb) {
+  /* finalizer */
+}
Index: /EcnlProtoTool/trunk/mruby-2.1.1/examples/mrbgems/c_extension_example/test/example.c
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/examples/mrbgems/c_extension_example/test/example.c	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/examples/mrbgems/c_extension_example/test/example.c	(revision 439)
@@ -0,0 +1,7 @@
+#include <mruby.h>
+
+void
+mrb_c_extension_example_gem_test(mrb_state *mrb)
+{
+  /* test initializer in C */
+}
Index: /EcnlProtoTool/trunk/mruby-2.1.1/examples/mrbgems/c_extension_example/test/example.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/examples/mrbgems/c_extension_example/test/example.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/examples/mrbgems/c_extension_example/test/example.rb	(revision 439)
@@ -0,0 +1,3 @@
+assert('C Extension Example') do
+  CExtension.respond_to? :c_method
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/examples/mrbgems/ruby_extension_example/README.md
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/examples/mrbgems/ruby_extension_example/README.md	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/examples/mrbgems/ruby_extension_example/README.md	(revision 439)
@@ -0,0 +1,4 @@
+Pure Ruby Extension Example
+=========
+
+This is an example gem which implements a pure Ruby extension.
Index: /EcnlProtoTool/trunk/mruby-2.1.1/examples/mrbgems/ruby_extension_example/mrbgem.rake
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/examples/mrbgems/ruby_extension_example/mrbgem.rake	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/examples/mrbgems/ruby_extension_example/mrbgem.rake	(revision 439)
@@ -0,0 +1,25 @@
+MRuby::Gem::Specification.new('ruby_extension_example') do |spec|
+  spec.license = 'MIT'
+  spec.author  = 'mruby developers'
+
+  # Add compile flags
+  # spec.cc.flags << ''
+
+  # Add cflags to all
+  # spec.mruby.cc.flags << '-g'
+
+  # Add libraries
+  # spec.linker.libraries << 'external_lib'
+
+  spec.add_dependency('mruby-print', :core => 'mruby-print')
+
+  # Default build files
+  # spec.rbfiles = Dir.glob("#{dir}/mrblib/*.rb")
+  # spec.objs = Dir.glob("#{dir}/src/*.{c,cpp,m,asm,S}").map { |f| objfile(f.relative_path_from(dir).pathmap("#{build_dir}/%X")) }
+  # spec.test_rbfiles = Dir.glob("#{dir}/test/*.rb")
+  # spec.test_objs = Dir.glob("#{dir}/test/*.{c,cpp,m,asm,S}").map { |f| objfile(f.relative_path_from(dir).pathmap("#{build_dir}/%X")) }
+  # spec.test_preload = 'test/assert.rb'
+
+  # Values accessible as TEST_ARGS inside test scripts
+  # spec.test_args = {'tmp_dir' => Dir::tmpdir}
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/examples/mrbgems/ruby_extension_example/mrblib/example.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/examples/mrbgems/ruby_extension_example/mrblib/example.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/examples/mrbgems/ruby_extension_example/mrblib/example.rb	(revision 439)
@@ -0,0 +1,5 @@
+class RubyExtension
+  def RubyExtension.ruby_method
+    puts "A Ruby Extension"
+  end
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/examples/mrbgems/ruby_extension_example/test/example.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/examples/mrbgems/ruby_extension_example/test/example.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/examples/mrbgems/ruby_extension_example/test/example.rb	(revision 439)
@@ -0,0 +1,3 @@
+assert('Ruby Extension Example') do
+  RubyExtension.respond_to? :ruby_method
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/examples/targets/build_config_ArduinoDue.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/examples/targets/build_config_ArduinoDue.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/examples/targets/build_config_ArduinoDue.rb	(revision 439)
@@ -0,0 +1,90 @@
+MRuby::Build.new do |conf|
+
+  # Gets set by the VS command prompts.
+  if ENV['VisualStudioVersion'] || ENV['VSINSTALLDIR']
+    toolchain :visualcpp
+  else
+    toolchain :gcc
+  end
+
+  enable_debug
+
+  # include the default GEMs
+  conf.gembox 'default'
+
+end
+
+# Cross Compiling configuration for Arduino Due
+# http://arduino.cc/en/Main/ArduinoBoardDue
+#
+# Requires Arduino IDE >= 1.5
+MRuby::CrossBuild.new("ArduinoDue") do |conf|
+  toolchain :gcc
+
+  # Mac OS X, Arduino IDE <= 1.5.6
+  # ARDUINO_PATH = '/Applications/Arduino.app/Contents/Resources/Java'
+  # Mac OS X, Arduino IDE >= 1.5.7
+  # ARDUINO_PATH = '/Applications/Arduino.app/Contents/Java'
+  # GNU Linux
+  ARDUINO_PATH = '/opt/arduino'
+   # Arduino IDE <= 1.5.6
+  BIN_PATH = "#{ARDUINO_PATH}/hardware/tools/g++_arm_none_eabi/bin"
+  # Arduino IDE >= 1.5.7
+  # BIN_PATH = "#{ARDUINO_PATH}/hardware/tools/gcc-arm-none-eabi-4.8.3-2014q1/bin"
+  SAM_PATH = "#{ARDUINO_PATH}/hardware/arduino/sam"
+  TARGET_PATH = "#{SAM_PATH}/variants/arduino_due_x"
+
+  conf.cc do |cc|
+    cc.command = "#{BIN_PATH}/arm-none-eabi-gcc"
+    cc.include_paths << ["#{SAM_PATH}/system/libsam", "#{SAM_PATH}/system/CMSIS/CMSIS/Include/",
+                        "#{SAM_PATH}/system/CMSIS/Device/ATMEL/",
+                        "#{SAM_PATH}/cores/arduino", "#{SAM_PATH}/libraries","#{TARGET_PATH}"]
+    cc.flags = %w(-g -Os -w -ffunction-sections -fdata-sections -nostdlib --param max-inline-insns-single=500
+                -Dprintf=iprintf -mcpu=cortex-m3 -DF_CPU=84000000L -DARDUINO=156 -DARDUINO_SAM_DUE -DARDUINO_ARCH_SAM
+                -D__SAM3X8E__ -mthumb -DUSB_PID=0x003e -DUSB_VID=0x2341 -DUSBCON -DUSB_MANUFACTURER="Unknown" -DUSB_PRODUCT="Arduino Due")
+    cc.compile_options = %Q[%{flags} -o "%{outfile}" -c "%{infile}"]
+
+    #configuration for low memory environment
+    cc.defines << %w(MRB_HEAP_PAGE_SIZE=64)
+    cc.defines << %w(KHASH_DEFAULT_SIZE=8)
+    cc.defines << %w(MRB_STR_BUF_MIN_SIZE=20)
+    cc.defines << %w(MRB_GC_STRESS)
+    #cc.defines << %w(MRB_DISABLE_STDIO) #if you dont need stdio.
+    #cc.defines << %w(POOL_PAGE_SIZE=1000) #effective only for use with mruby-eval
+  end
+
+  conf.cxx do |cxx|
+    cxx.command = conf.cc.command.dup
+    cxx.include_paths = conf.cc.include_paths.dup
+    cxx.flags = conf.cc.flags.dup
+    cxx.flags << %w(-fno-rtti -fno-exceptions)
+    cxx.defines = conf.cc.defines.dup
+    cxx.compile_options = conf.cc.compile_options.dup
+  end
+
+  conf.archiver do |archiver|
+    archiver.command = "#{BIN_PATH}/arm-none-eabi-ar"
+    archiver.archive_options = 'rcs "%{outfile}" %{objs}'
+  end
+
+  #no executables
+  conf.bins = []
+
+  #do not build executable test
+  conf.build_mrbtest_lib_only
+
+  #disable C++ exception
+  conf.disable_cxx_exception
+
+  #gems from core
+  conf.gem :core => "mruby-print"
+  conf.gem :core => "mruby-math"
+  conf.gem :core => "mruby-enum-ext"
+
+  #light-weight regular expression
+  conf.gem :github => "masamitsu-murase/mruby-hs-regexp", :branch => "master"
+
+  #Arduino API
+  #conf.gem :github =>"kyab/mruby-arduino", :branch => "master"
+
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/examples/targets/build_config_IntelEdison.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/examples/targets/build_config_IntelEdison.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/examples/targets/build_config_IntelEdison.rb	(revision 439)
@@ -0,0 +1,69 @@
+# Cross-compiling setup for Intel Edison (poky linux) platform
+# Get SDK from here: https://software.intel.com/en-us/iot/hardware/edison/downloads
+# REMEMBER to check and update the SDK root in the constant POKY_EDISON_PATH
+
+MRuby::Build.new do |conf|
+  toolchain :gcc
+  conf.gembox 'default'
+  conf.cc.defines = %w(ENABLE_READLINE)
+  conf.gembox 'default'
+
+  #lightweight regular expression
+  conf.gem :github => "pbosetti/mruby-hs-regexp", :branch => "master"
+
+end
+
+# Define cross build settings
+MRuby::CrossBuild.new('core2-32-poky-linux') do |conf|
+  toolchain :gcc
+
+  # Mac OS X
+  #
+  POKY_EDISON_PATH = '/opt/poky-edison/1.7.2'
+
+  POKY_EDISON_SYSROOT =  "#{POKY_EDISON_PATH}/sysroots/core2-32-poky-linux"
+  POKY_EDISON_X86_PATH = "#{POKY_EDISON_PATH}/sysroots/i386-pokysdk-darwin"
+  POKY_EDISON_BIN_PATH = "#{POKY_EDISON_X86_PATH}/usr/bin/i586-poky-linux"
+
+
+  conf.cc do |cc|
+    cc.command = "#{POKY_EDISON_BIN_PATH}/i586-poky-linux-gcc"
+    cc.include_paths << ["#{POKY_EDISON_SYSROOT}/usr/include", "#{POKY_EDISON_X86_PATH}/usr/include"]
+    cc.flags = %w(-m32 -march=core2 -mtune=core2 -msse3 -mfpmath=sse -mstackrealign -fno-omit-frame-pointer)
+    cc.flags << %w(-O2 -pipe -g -feliminate-unused-debug-types)
+    cc.flags << "--sysroot=#{POKY_EDISON_SYSROOT}"
+    cc.compile_options = %Q[%{flags} -o "%{outfile}" -c "%{infile}"]
+    cc.defines = %w(ENABLE_READLINE)
+  end
+
+  conf.cxx do |cxx|
+    cxx.command = "#{POKY_EDISON_BIN_PATH}/i586-poky-linux-g++"
+    cxx.include_paths = conf.cc.include_paths.dup
+    cxx.include_paths << ["#{POKY_EDISON_SYSROOT}/usr/include/c++/4.9.1"]
+    cxx.flags = conf.cc.flags.dup
+    cxx.defines = conf.cc.defines.dup
+    cxx.compile_options = conf.cc.compile_options.dup
+  end
+
+  conf.archiver do |archiver|
+    archiver.command = "#{POKY_EDISON_BIN_PATH}/i586-poky-linux-ar"
+    archiver.archive_options = 'rcs "%{outfile}" %{objs}'
+  end
+
+  conf.linker do |linker|
+    linker.command = "#{POKY_EDISON_BIN_PATH}/i586-poky-linux-g++"
+    linker.flags = %w(-m32 -march=i586)
+    linker.flags << "--sysroot=#{POKY_EDISON_SYSROOT}"
+    linker.flags << %w(-O1)
+    linker.libraries = %w(m pthread)
+  end
+
+  #do not build executable test
+  conf.build_mrbtest_lib_only
+
+  conf.gembox 'default'
+
+  #lightweight regular expression
+  conf.gem :github => "pbosetti/mruby-hs-regexp", :branch => "master"
+
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/examples/targets/build_config_IntelGalileo.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/examples/targets/build_config_IntelGalileo.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/examples/targets/build_config_IntelGalileo.rb	(revision 439)
@@ -0,0 +1,106 @@
+MRuby::Build.new do |conf|
+
+  # Gets set by the VS command prompts.
+  if ENV['VisualStudioVersion'] || ENV['VSINSTALLDIR']
+    toolchain :visualcpp
+  else
+    toolchain :gcc
+  end
+
+  enable_debug
+
+  # include the default GEMs
+  conf.gembox 'default'
+
+end
+
+
+# Cross Compiling configuration for Intel Galileo on Arduino environment
+# http://arduino.cc/en/ArduinoCertified/IntelGalileo
+#
+# Requires Arduino IDE for Intel Galileo
+MRuby::CrossBuild.new("Galileo") do |conf|
+  toolchain :gcc
+
+  # Mac OS X
+  # Assume you renamed Arduino.app to Arduino_Galileo.app
+  GALILEO_ARDUINO_PATH = '/Applications/Arduino_Galileo.app/Contents/Resources/Java'
+  # GNU Linux
+  #ARDUINO_GALILEO_PATH = '/opt/arduino'
+
+  GALILEO_BIN_PATH = "#{GALILEO_ARDUINO_PATH}/hardware/tools/x86/i386-pokysdk-darwin/usr/bin/i586-poky-linux-uclibc"
+  GALILEO_SYSROOT =  "#{GALILEO_ARDUINO_PATH}/hardware/tools/x86/i586-poky-linux-uclibc"
+  GALILEO_X86_PATH = "#{GALILEO_ARDUINO_PATH}/hardware/arduino/x86"
+
+
+  conf.cc do |cc|
+    cc.command = "#{GALILEO_BIN_PATH}/i586-poky-linux-uclibc-gcc"
+    cc.include_paths << ["#{GALILEO_X86_PATH}/cores/arduino", "#{GALILEO_X86_PATH}/variants/galileo_fab_d"]
+    cc.flags = %w(-m32 -march=i586 -c -g -Os -w
+              -ffunction-sections -fdata-sections -MMD -DARDUINO=153)
+    cc.flags << "--sysroot=#{GALILEO_SYSROOT}"
+    cc.compile_options = %Q[%{flags} -o "%{outfile}" -c "%{infile}"]
+  end
+
+  conf.cxx do |cxx|
+    cxx.command = "#{GALILEO_BIN_PATH}/i586-poky-linux-uclibc-g++"
+    cxx.include_paths = conf.cc.include_paths.dup
+    cxx.include_paths << "#{GALILEO_ARDUINO_PATH}/hardware/tools/x86/i586-poky-linux-uclibc/usr/include/c++"
+    cxx.include_paths << "#{GALILEO_ARDUINO_PATH}/hardware/tools/x86/i586-poky-linux-uclibc/usr/include/c++/i586-poky-linux-uclibc"
+    cxx.flags = conf.cc.flags.dup
+    cxx.defines = conf.cc.defines.dup
+    cxx.compile_options = conf.cc.compile_options.dup
+  end
+
+  conf.archiver do |archiver|
+    archiver.command = "#{GALILEO_BIN_PATH}/i586-poky-linux-uclibc-ar"
+    archiver.archive_options = 'rcs "%{outfile}" %{objs}'
+  end
+
+  conf.linker do |linker|
+    linker.command = "#{GALILEO_BIN_PATH}/i586-poky-linux-uclibc-g++"
+    linker.flags = %w(-m32 -march=i586)
+    linker.flags << "--sysroot=#{GALILEO_SYSROOT}"
+    linker.flags << %w(-Os -Wl,--gc-sections)
+    linker.libraries = %w(m pthread)
+  end
+
+  #no executables
+  conf.bins = []
+
+  #do not build executable test
+  conf.build_mrbtest_lib_only
+
+  #official mrbgems
+  conf.gem :core => "mruby-sprintf"
+  conf.gem :core => "mruby-print"
+  conf.gem :core => "mruby-math"
+  conf.gem :core => "mruby-time"
+  conf.gem :core => "mruby-struct"
+  conf.gem :core => "mruby-enum-ext"
+  conf.gem :core => "mruby-string-ext"
+  conf.gem :core => "mruby-numeric-ext"
+  conf.gem :core => "mruby-array-ext"
+  conf.gem :core => "mruby-hash-ext"
+  conf.gem :core => "mruby-range-ext"
+  conf.gem :core => "mruby-proc-ext"
+  conf.gem :core => "mruby-symbol-ext"
+  conf.gem :core => "mruby-random"
+  conf.gem :core => "mruby-object-ext"
+  conf.gem :core => "mruby-objectspace"
+  conf.gem :core => "mruby-fiber"
+  conf.gem :core => "mruby-toplevel-ext"
+
+  #lightweigh regular expression
+  conf.gem :github => "masamitsu-murase/mruby-hs-regexp", :branch => "master"
+
+  #Arduino API
+  #conf.gem :github =>"kyab/mruby-arduino", :branch => "master" do |g|
+  #  g.cxx.include_paths << "#{GALILEO_X86_PATH}/libraries/Wire"
+  #  g.cxx.include_paths << "#{GALILEO_X86_PATH}/libraries/Servo"
+
+    #enable unsupported Servo class
+  #  g.cxx.defines << "MRUBY_ARDUINO_GALILEO_ENABLE_SERVO"
+  #end
+
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/examples/targets/build_config_RX630.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/examples/targets/build_config_RX630.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/examples/targets/build_config_RX630.rb	(revision 439)
@@ -0,0 +1,81 @@
+MRuby::Build.new do |conf|
+
+  # Gets set by the VS command prompts.
+  if ENV['VisualStudioVersion'] || ENV['VSINSTALLDIR']
+    toolchain :visualcpp
+  else
+    toolchain :gcc
+  end
+
+  enable_debug
+
+  # include the default GEMs
+  conf.gembox 'default'
+
+end
+
+# Cross Compiling configuration for RX630
+# http://gadget.renesas.com/
+#
+# Requires gnurx_v14.03
+MRuby::CrossBuild.new("RX630") do |conf|
+  toolchain :gcc
+
+  # Linux
+  BIN_PATH = "/usr/share/gnurx_v14.03_elf-1/bin"
+
+  conf.cc do |cc|
+    cc.command = "#{BIN_PATH}/rx-elf-gcc"
+    cc.flags = "-Wall -g -O2 -flto -mcpu=rx600 -m64bit-doubles"
+    cc.compile_options = %Q[%{flags} -o "%{outfile}" -c "%{infile}"]
+
+    #configuration for low memory environment
+    cc.defines << %w(MRB_USE_FLOAT)
+    cc.defines << %w(MRB_HEAP_PAGE_SIZE=64)
+    cc.defines << %w(KHASH_DEFAULT_SIZE=8)
+    cc.defines << %w(MRB_STR_BUF_MIN_SIZE=20)
+    cc.defines << %w(MRB_GC_STRESS)
+    cc.defines << %w(MRB_DISABLE_STDIO) #if you dont need stdio.
+    #cc.defines << %w(POOL_PAGE_SIZE=1000) #effective only for use with mruby-eval
+  end
+
+  conf.cxx do |cxx|
+    cxx.command = conf.cc.command.dup
+    cxx.include_paths = conf.cc.include_paths.dup
+    cxx.flags = conf.cc.flags.dup
+    cxx.defines = conf.cc.defines.dup
+    cxx.compile_options = conf.cc.compile_options.dup
+  end
+
+  conf.linker do |linker|
+    linker.command="#{BIN_PATH}/rx-elf-ld"
+  end
+
+  conf.archiver do |archiver|
+    archiver.command = "#{BIN_PATH}/rx-elf-ar"
+    archiver.archive_options = 'rcs "%{outfile}" %{objs}'
+  end
+
+  #no executables
+  conf.bins = []
+
+  #do not build executable test
+  conf.build_mrbtest_lib_only
+
+  #disable C++ exception
+  conf.disable_cxx_exception
+
+  #gems from core
+  conf.gem :core => "mruby-sprintf"
+  conf.gem :core => "mruby-print"
+  conf.gem :core => "mruby-math"
+  conf.gem :core => "mruby-enum-ext"
+  conf.gem :core => "mruby-numeric-ext"
+
+  #light-weight regular expression
+  #conf.gem :github => "masamitsu-murase/mruby-hs-regexp", :branch => "master"
+
+  #Arduino API
+  #conf.gem :github =>"kyab/mruby-arduino", :branch => "master"
+
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/examples/targets/build_config_android_arm64-v8a.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/examples/targets/build_config_android_arm64-v8a.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/examples/targets/build_config_android_arm64-v8a.rb	(revision 439)
@@ -0,0 +1,26 @@
+MRuby::Build.new do |conf|
+
+  # Gets set by the VS command prompts.
+  if ENV['VisualStudioVersion'] || ENV['VSINSTALLDIR']
+    toolchain :visualcpp
+  else
+    toolchain :gcc
+  end
+
+  enable_debug
+
+  # include the default GEMs
+  conf.gembox 'default'
+end
+
+# Requires Android NDK r13 or later.
+MRuby::CrossBuild.new('android-arm64-v8a') do |conf|
+  params = {
+    :arch => 'arm64-v8a',
+    :platform => 'android-24',
+    :toolchain => :clang,
+  }
+  toolchain :android, params
+
+  conf.gembox 'default'
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/examples/targets/build_config_android_armeabi.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/examples/targets/build_config_android_armeabi.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/examples/targets/build_config_android_armeabi.rb	(revision 439)
@@ -0,0 +1,26 @@
+MRuby::Build.new do |conf|
+
+  # Gets set by the VS command prompts.
+  if ENV['VisualStudioVersion'] || ENV['VSINSTALLDIR']
+    toolchain :visualcpp
+  else
+    toolchain :gcc
+  end
+
+  enable_debug
+
+  # include the default GEMs
+  conf.gembox 'default'
+end
+
+# Requires Android NDK r13 or later.
+MRuby::CrossBuild.new('android-armeabi') do |conf|
+  params = {
+    :arch => 'armeabi',
+    :platform => 'android-24',
+    :toolchain => :clang,
+  }
+  toolchain :android, params
+
+  conf.gembox 'default'
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/examples/targets/build_config_android_armeabi_v7a_neon_hard.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/examples/targets/build_config_android_armeabi_v7a_neon_hard.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/examples/targets/build_config_android_armeabi_v7a_neon_hard.rb	(revision 439)
@@ -0,0 +1,28 @@
+MRuby::Build.new do |conf|
+
+  # Gets set by the VS command prompts.
+  if ENV['VisualStudioVersion'] || ENV['VSINSTALLDIR']
+    toolchain :visualcpp
+  else
+    toolchain :gcc
+  end
+
+  enable_debug
+
+  # include the default GEMs
+  conf.gembox 'default'
+end
+
+# Requires Android NDK r13 or later.
+MRuby::CrossBuild.new('android-armeabi-v7a-neon-hard') do |conf|
+  params = {
+    :arch => 'armeabi-v7a',
+    :mfpu => 'neon',
+    :mfloat_abi => 'hard',
+    :platform => 'android-24',
+    :toolchain => :clang,
+  }
+  toolchain :android, params
+
+  conf.gembox 'default'
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/examples/targets/build_config_chipKITMax32.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/examples/targets/build_config_chipKITMax32.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/examples/targets/build_config_chipKITMax32.rb	(revision 439)
@@ -0,0 +1,86 @@
+MRuby::Build.new do |conf|
+
+  # Gets set by the VS command prompts.
+  if ENV['VisualStudioVersion'] || ENV['VSINSTALLDIR']
+    toolchain :visualcpp
+  else
+    toolchain :gcc
+  end
+
+  enable_debug
+
+  # include the default GEMs
+  conf.gembox 'default'
+
+end
+
+# Cross Compiling configuration for Digilent chipKIT Max32
+# http://www.digilentinc.com/Products/Detail.cfm?Prod=CHIPKIT-MAX32
+#
+# Requires MPIDE (https://github.com/chipKIT32/chipKIT32-MAX)
+#
+# This configuration is based on @kyab's version
+# http://d.hatena.ne.jp/kyab/20130201
+MRuby::CrossBuild.new("chipKITMax32") do |conf|
+  toolchain :gcc
+
+  # Mac OS X
+  # MPIDE_PATH = '/Applications/Mpide.app/Contents/Resources/Java'
+  # GNU Linux
+  MPIDE_PATH = '/opt/mpide-0023-linux-20120903'
+
+  PIC32_PATH = "#{MPIDE_PATH}/hardware/pic32"
+
+  conf.cc do |cc|
+    cc.command = "#{PIC32_PATH}/compiler/pic32-tools/bin/pic32-gcc"
+    cc.include_paths << ["#{PIC32_PATH}/cores/pic32",
+                        "#{PIC32_PATH}/variants/Max32",
+                        "#{PIC32_PATH}/libraries"]
+    cc.flags = %w(-O2 -mno-smart-io -w -ffunction-sections -fdata-sections -g -mdebugger -Wcast-align
+                -fno-short-double -mprocessor=32MX795F512L -DF_CPU=80000000L -DARDUINO=23 -D_BOARD_MEGA_
+                -DMPIDEVER=0x01000202 -DMPIDE=23)
+    cc.compile_options = %Q[%{flags} -o "%{outfile}" -c "%{infile}"]
+
+    #configuration for low memory environment
+    cc.defines << %w(MRB_HEAP_PAGE_SIZE=64)
+    cc.defines << %w(KHASH_DEFAULT_SIZE=8)
+    cc.defines << %w(MRB_STR_BUF_MIN_SIZE=20)
+    cc.defines << %w(MRB_GC_STRESS)
+    #cc.defines << %w(MRB_DISABLE_STDIO) #if you dont need stdio.
+    #cc.defines << %w(POOL_PAGE_SIZE=1000) #effective only for use with mruby-eval
+  end
+
+  conf.cxx do |cxx|
+    cxx.command = conf.cc.command.dup
+    cxx.include_paths = conf.cc.include_paths.dup
+    cxx.flags = conf.cc.flags.dup
+    cxx.defines = conf.cc.defines.dup
+    cxx.compile_options = conf.cc.compile_options.dup
+  end
+
+  conf.archiver do |archiver|
+    archiver.command = "#{PIC32_PATH}/compiler/pic32-tools/bin/pic32-ar"
+    archiver.archive_options = 'rcs "%{outfile}" %{objs}'
+  end
+
+  #no executables
+  conf.bins = []
+
+  #do not build test executable
+  conf.build_mrbtest_lib_only
+
+  #disable C++ exception
+  conf.disable_cxx_exception
+
+  #gems from core
+  conf.gem :core => "mruby-print"
+  conf.gem :core => "mruby-math"
+  conf.gem :core => "mruby-enum-ext"
+
+  #light-weight regular expression
+  conf.gem :github => "masamitsu-murase/mruby-hs-regexp", :branch => "master"
+
+  #Arduino API
+  #conf.gem :github =>"kyab/mruby-arduino", :branch => "master"
+
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/examples/targets/build_config_dreamcast_shelf.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/examples/targets/build_config_dreamcast_shelf.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/examples/targets/build_config_dreamcast_shelf.rb	(revision 439)
@@ -0,0 +1,108 @@
+MRuby::Build.new do |conf|
+  # Gets set by the VS command prompts
+  if ENV['VisualStudioVersion'] || ENV['VSINSTALLDIR']
+    toolchain :visualcpp
+  else
+    toolchain :gcc
+  end
+
+  enable_debug
+
+  # Include the default GEMs
+  conf.gembox 'default'
+end
+
+# Cross Compiling configuration for the Sega Dreamcast
+# This configuration requires KallistiOS (KOS)
+# https://dreamcast.wiki
+#
+# Tested on GNU/Linux, MinGW-w64/MSYS2, Cygwin, macOS and MinGW/MSYS (see below)
+#
+MRuby::CrossBuild.new("dreamcast") do |conf|
+  toolchain :gcc
+
+  # Support for DreamSDK (based on MinGW/MSYS)
+  # To compile mruby with DreamSDK, RubyInstaller for Windows should be installed
+  DREAMSDK_HOME = ENV["DREAMSDK_HOME"]
+  MSYS_ROOT = !(DREAMSDK_HOME.nil? || DREAMSDK_HOME.empty?) ? "#{DREAMSDK_HOME}/msys/1.0" : ""
+ 
+  # Setting paths
+  DREAMCAST_PATH = "#{MSYS_ROOT}/opt/toolchains/dc"
+  KOS_PATH = "#{DREAMCAST_PATH}/kos"
+  BIN_PATH = "#{DREAMCAST_PATH}/sh-elf/bin"
+
+  # C compiler
+  # Flags were extracted from KallistiOS environment files
+  conf.cc do |cc|
+    cc.command = "#{BIN_PATH}/sh-elf-gcc"	
+    cc.include_paths << ["#{KOS_PATH}/include", "#{KOS_PATH}/kernel/arch/dreamcast/include", "#{KOS_PATH}/addons/include", "#{KOS_PATH}/../kos-ports/include"]
+    cc.flags << ["-O2", "-fomit-frame-pointer", "-ml", "-m4-single-only", "-ffunction-sections", "-fdata-sections", "-Wall", "-g", "-fno-builtin", "-ml", "-m4-single-only", "-Wl,-Ttext=0x8c010000", "-Wl,--gc-sections", "-T#{KOS_PATH}/utils/ldscripts/shlelf.xc", "-nodefaultlibs"]
+    cc.compile_options = %Q[%{flags} -o "%{outfile}" -c "%{infile}"]
+    cc.defines << %w(_arch_dreamcast)
+    cc.defines << %w(_arch_sub_pristine)
+  end
+
+  # C++ compiler
+  conf.cxx do |cxx|
+    cxx.command = conf.cc.command.dup
+    cxx.include_paths = conf.cc.include_paths.dup
+    cxx.flags = conf.cc.flags.dup
+    cxx.flags << %w(-fno-rtti -fno-exceptions)
+    cxx.defines = conf.cc.defines.dup
+    cxx.compile_options = conf.cc.compile_options.dup
+  end
+ 
+  # Linker
+  # There is an issue when making the mruby library with KallistiOS:
+  # 'newlib_kill.o' and 'newlib_getpid.o' aren't found so they are explicitly 
+  # specified here at least for now.
+  conf.linker do |linker|
+    linker.command="#{BIN_PATH}/sh-elf-gcc"
+    linker.flags << ["#{MSYS_ROOT}/opt/toolchains/dc/kos/kernel/build/newlib_kill.o", "#{MSYS_ROOT}/opt/toolchains/dc/kos/kernel/build/newlib_getpid.o", "-Wl,--start-group -lkallisti -lc -lgcc -Wl,--end-group"]
+    linker.library_paths << ["#{KOS_PATH}/lib/dreamcast", "#{KOS_PATH}/addons/lib/dreamcast", "#{KOS_PATH}/../kos-ports/lib"]
+  end  
+
+  # Archiver
+  conf.archiver do |archiver|
+    archiver.command = "#{BIN_PATH}/sh-elf-ar"
+    archiver.archive_options = 'rcs "%{outfile}" %{objs}'
+  end
+
+  # No executables
+  conf.bins = []
+
+  # Do not build executable test
+  conf.build_mrbtest_lib_only
+
+  # Disable C++ exception
+  conf.disable_cxx_exception
+  
+  # Gems from core
+  # removing mruby-io
+  conf.gem :core => "mruby-metaprog"
+  conf.gem :core => "mruby-pack"
+  conf.gem :core => "mruby-sprintf"
+  conf.gem :core => "mruby-print"
+  conf.gem :core => "mruby-math"
+  conf.gem :core => "mruby-time"
+  conf.gem :core => "mruby-struct"
+  conf.gem :core => "mruby-compar-ext"
+  conf.gem :core => "mruby-enum-ext"
+  conf.gem :core => "mruby-string-ext"
+  conf.gem :core => "mruby-numeric-ext"
+  conf.gem :core => "mruby-array-ext"
+  conf.gem :core => "mruby-hash-ext"
+  conf.gem :core => "mruby-range-ext"
+  conf.gem :core => "mruby-proc-ext"
+  conf.gem :core => "mruby-symbol-ext"
+  conf.gem :core => "mruby-random"
+  conf.gem :core => "mruby-object-ext"
+  conf.gem :core => "mruby-objectspace"
+  conf.gem :core => "mruby-fiber"
+  conf.gem :core => "mruby-enumerator"
+  conf.gem :core => "mruby-enum-lazy"
+  conf.gem :core => "mruby-toplevel-ext"
+  conf.gem :core => "mruby-kernel-ext"
+  conf.gem :core => "mruby-class-ext"
+  conf.gem :core => "mruby-compiler"
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/include/mrbconf.h
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/include/mrbconf.h	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/include/mrbconf.h	(revision 439)
@@ -0,0 +1,214 @@
+/*
+** mrbconf.h - mruby core configuration
+**
+** See Copyright Notice in mruby.h
+*/
+
+#ifndef MRUBYCONF_H
+#define MRUBYCONF_H
+
+#include <limits.h>
+#include <stdint.h>
+
+/* architecture selection: */
+/* specify -DMRB_32BIT or -DMRB_64BIT to override */
+#if !defined(MRB_32BIT) && !defined(MRB_64BIT)
+#if UINT64_MAX == SIZE_MAX
+#define MRB_64BIT
+#else
+#define MRB_32BIT
+#endif
+#endif
+
+#if defined(MRB_32BIT) && defined(MRB_64BIT)
+#error Cannot build for 32 and 64 bit architecture at the same time
+#endif
+
+/* configuration options: */
+/* add -DMRB_USE_FLOAT to use float instead of double for floating point numbers */
+//#define MRB_USE_FLOAT
+
+/* exclude floating point numbers */
+//#define MRB_WITHOUT_FLOAT
+
+/* add -DMRB_METHOD_CACHE to use method cache to improve performance */
+//#define MRB_METHOD_CACHE
+/* size of the method cache (need to be the power of 2) */
+//#define MRB_METHOD_CACHE_SIZE (1<<7)
+
+/* add -DMRB_METHOD_T_STRUCT on machines that use higher bits of pointers */
+/* no MRB_METHOD_T_STRUCT requires highest 2 bits of function pointers to be zero */
+#ifndef MRB_METHOD_T_STRUCT
+  // can't use highest 2 bits of function pointers on 32bit Windows.
+# if defined(_WIN32) && !defined(_WIN64)
+#   define MRB_METHOD_T_STRUCT
+# endif
+#endif
+
+/* add -DMRB_INT32 to use 32bit integer for mrb_int; conflict with MRB_INT64;
+   Default for 32-bit CPU mode. */
+//#define MRB_INT32
+
+/* add -DMRB_INT64 to use 64bit integer for mrb_int; conflict with MRB_INT32;
+   Default for 64-bit CPU mode. */
+//#define MRB_INT64
+
+/* if no specific integer type is chosen */
+#if !defined(MRB_INT32) && !defined(MRB_INT64)
+# if defined(MRB_64BIT) && !defined(MRB_NAN_BOXING)
+/* Use 64bit integers on 64bit architecture (without MRB_NAN_BOXING) */
+#  define MRB_INT64
+# else
+/* Otherwise use 32bit integers */
+#  define MRB_INT32
+# endif
+#endif
+
+/* define on big endian machines; used by MRB_NAN_BOXING, etc. */
+#ifndef MRB_ENDIAN_BIG
+# if (defined(BYTE_ORDER) && defined(BIG_ENDIAN) && BYTE_ORDER == BIG_ENDIAN) || \
+     (defined(__BYTE_ORDER__) && defined(__ORDER_BIG_ENDIAN__) && __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__)
+#  define MRB_ENDIAN_BIG
+# endif
+#endif
+
+/* represent mrb_value in boxed double; conflict with MRB_USE_FLOAT and MRB_WITHOUT_FLOAT */
+//#define MRB_NAN_BOXING
+
+/* represent mrb_value as a word (natural unit of data for the processor) */
+//#define MRB_WORD_BOXING
+
+/* string class to handle UTF-8 encoding */
+#define MRB_UTF8_STRING
+
+/* argv max size in mrb_funcall */
+//#define MRB_FUNCALL_ARGC_MAX 16
+
+/* number of object per heap page */
+//#define MRB_HEAP_PAGE_SIZE 1024
+
+/* if __ehdr_start is available, mruby can reduce memory used by symbols */
+//#define MRB_USE_LINK_TIME_RO_DATA_P
+
+/* if MRB_USE_LINK_TIME_RO_DATA_P does not work,
+   you can try mrb_ro_data_p() that you have implemented yourself in any file;
+   prototype is `mrb_bool mrb_ro_data_p(const char *ptr)` */
+//#define MRB_USE_CUSTOM_RO_DATA_P
+
+/* turn off generational GC by default */
+//#define MRB_GC_TURN_OFF_GENERATIONAL
+
+/* default size of khash table bucket */
+//#define KHASH_DEFAULT_SIZE 32
+
+/* allocated memory address alignment */
+//#define POOL_ALIGNMENT 4
+
+/* page size of memory pool */
+//#define POOL_PAGE_SIZE 16000
+
+/* initial minimum size for string buffer */
+//#define MRB_STR_BUF_MIN_SIZE 128
+
+/* arena size */
+//#define MRB_GC_ARENA_SIZE 100
+
+/* fixed size GC arena */
+//#define MRB_GC_FIXED_ARENA
+
+/* state atexit stack size */
+//#define MRB_FIXED_STATE_ATEXIT_STACK_SIZE 5
+
+/* fixed size state atexit stack */
+//#define MRB_FIXED_STATE_ATEXIT_STACK
+
+/* -DMRB_DISABLE_XXXX to drop following features */
+//#define MRB_DISABLE_STDIO /* use of stdio */
+
+/* -DMRB_ENABLE_XXXX to enable following features */
+//#define MRB_ENABLE_DEBUG_HOOK /* hooks for debugger */
+//#define MRB_ENABLE_ALL_SYMBOLS /* Symbols.all_symbols */
+
+/* end of configuration */
+
+/* define MRB_DISABLE_XXXX from DISABLE_XXX (for compatibility) */
+#ifdef DISABLE_STDIO
+#define MRB_DISABLE_STDIO
+#endif
+
+/* define MRB_ENABLE_XXXX from ENABLE_XXX (for compatibility) */
+#ifdef ENABLE_DEBUG
+#define MRB_ENABLE_DEBUG_HOOK
+#endif
+
+#ifndef MRB_DISABLE_STDIO
+# include <stdio.h>
+#endif
+
+#ifndef FALSE
+# define FALSE 0
+#endif
+
+#ifndef TRUE
+# define TRUE 1
+#endif
+
+/*
+** mruby tuning profiles
+**/
+
+/* A profile for micro controllers */
+#if defined(MRB_CONSTRAINED_BASELINE_PROFILE)
+# ifndef KHASH_DEFAULT_SIZE
+#  define KHASH_DEFAULT_SIZE 16
+# endif
+
+# ifndef MRB_STR_BUF_MIN_SIZE
+#  define MRB_STR_BUF_MIN_SIZE 32
+# endif
+
+# ifndef MRB_HEAP_PAGE_SIZE
+#  define MRB_HEAP_PAGE_SIZE 256
+# endif
+
+/* A profile for default mruby */
+#elif defined(MRB_BASELINE_PROFILE)
+
+/* A profile for desktop computers or workstations; rich memory! */
+#elif defined(MRB_MAIN_PROFILE)
+# ifndef MRB_METHOD_CACHE
+#  define MRB_METHOD_CACHE
+# endif
+
+# ifndef MRB_METHOD_CACHE_SIZE
+#  define MRB_METHOD_CACHE_SIZE (1<<10)
+# endif
+
+# ifndef MRB_IV_SEGMENT_SIZE
+#  define MRB_IV_SEGMENT_SIZE 32
+# endif
+
+# ifndef MRB_HEAP_PAGE_SIZE
+#  define MRB_HEAP_PAGE_SIZE 4096
+# endif
+
+/* A profile for server; mruby vm is long life */
+#elif defined(MRB_HIGH_PROFILE)
+# ifndef MRB_METHOD_CACHE
+#  define MRB_METHOD_CACHE
+# endif
+
+# ifndef MRB_METHOD_CACHE_SIZE
+#  define MRB_METHOD_CACHE_SIZE (1<<12)
+# endif
+
+# ifndef MRB_IV_SEGMENT_SIZE
+#  define MRB_IV_SEGMENT_SIZE 64
+# endif
+
+# ifndef MRB_HEAP_PAGE_SIZE
+#  define MRB_HEAP_PAGE_SIZE 4096
+# endif
+#endif
+
+#endif  /* MRUBYCONF_H */
Index: /EcnlProtoTool/trunk/mruby-2.1.1/include/mruby.h
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/include/mruby.h	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/include/mruby.h	(revision 439)
@@ -0,0 +1,1392 @@
+/*
+** mruby - An embeddable Ruby implementation
+**
+** Copyright (c) mruby developers 2010-2020
+**
+** Permission is hereby granted, free of charge, to any person obtaining
+** a copy of this software and associated documentation files (the
+** "Software"), to deal in the Software without restriction, including
+** without limitation the rights to use, copy, modify, merge, publish,
+** distribute, sublicense, and/or sell copies of the Software, and to
+** permit persons to whom the Software is furnished to do so, subject to
+** the following conditions:
+**
+** The above copyright notice and this permission notice shall be
+** included in all copies or substantial portions of the Software.
+**
+** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+** SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+**
+** [ MIT license: http://www.opensource.org/licenses/mit-license.php ]
+*/
+
+/**
+ * @file mruby.h
+ */
+
+#ifndef MRUBY_H
+#define MRUBY_H
+
+#ifdef __cplusplus
+#define __STDC_LIMIT_MACROS
+#define __STDC_CONSTANT_MACROS
+#define __STDC_FORMAT_MACROS
+#endif
+
+#include <stdarg.h>
+#include <stdint.h>
+#include <stddef.h>
+#include <limits.h>
+
+#ifdef __cplusplus
+#ifndef SIZE_MAX
+#ifdef __SIZE_MAX__
+#define SIZE_MAX __SIZE_MAX__
+#else
+#define SIZE_MAX std::numeric_limits<size_t>::max()
+#endif
+#endif
+#endif
+
+#ifdef MRB_DEBUG
+#include <assert.h>
+#define mrb_assert(p) assert(p)
+#define mrb_assert_int_fit(t1,n,t2,max) assert((n)>=0 && ((sizeof(n)<=sizeof(t2))||(n<=(t1)(max))))
+#else
+#define mrb_assert(p) ((void)0)
+#define mrb_assert_int_fit(t1,n,t2,max) ((void)0)
+#endif
+
+#if defined __STDC_VERSION__ && __STDC_VERSION__ >= 201112L
+#define mrb_static_assert(exp, str) _Static_assert(exp, str)
+#else
+#define mrb_static_assert(exp, str) mrb_assert(exp)
+#endif
+
+#include "mrbconf.h"
+
+#include <mruby/common.h>
+#include <mruby/value.h>
+#include <mruby/gc.h>
+#include <mruby/version.h>
+
+#ifdef _MSC_VER
+#include <float.h>
+#endif
+
+#ifndef MRB_WITHOUT_FLOAT
+#ifndef FLT_EPSILON
+#define FLT_EPSILON (1.19209290e-07f)
+#endif
+#ifndef DBL_EPSILON
+#define DBL_EPSILON ((double)2.22044604925031308085e-16L)
+#endif
+#ifndef LDBL_EPSILON
+#define LDBL_EPSILON (1.08420217248550443401e-19L)
+#endif
+
+#ifdef MRB_USE_FLOAT
+#define MRB_FLOAT_EPSILON FLT_EPSILON
+#else
+#define MRB_FLOAT_EPSILON DBL_EPSILON
+#endif
+#endif
+
+/**
+ * MRuby C API entry point
+ */
+MRB_BEGIN_DECL
+
+typedef uint8_t mrb_code;
+
+/**
+ * \class mrb_aspec
+ *
+ * Specifies the number of arguments a function takes
+ *
+ * Example: `MRB_ARGS_REQ(2) | MRB_ARGS_OPT(1)` for a method that expects 2..3 arguments
+ */
+typedef uint32_t mrb_aspec;
+
+struct mrb_irep;
+struct mrb_state;
+
+/**
+ * Function pointer type of custom allocator used in @see mrb_open_allocf.
+ *
+ * The function pointing it must behave similarly as realloc except:
+ * - If ptr is NULL it must allocate new space.
+ * - If s is NULL, ptr must be freed.
+ *
+ * See @see mrb_default_allocf for the default implementation.
+ */
+typedef void* (*mrb_allocf) (struct mrb_state *mrb, void*, size_t, void *ud);
+
+#ifndef MRB_FIXED_STATE_ATEXIT_STACK_SIZE
+#define MRB_FIXED_STATE_ATEXIT_STACK_SIZE 5
+#endif
+
+typedef struct {
+  mrb_sym mid;
+  struct RProc *proc;
+  mrb_value *stackent;
+  uint16_t ridx;
+  uint16_t epos;
+  struct REnv *env;
+  const mrb_code *pc;           /* return address */
+  const mrb_code *err;          /* error position */
+  int argc;
+  int acc;
+  struct RClass *target_class;
+} mrb_callinfo;
+
+enum mrb_fiber_state {
+  MRB_FIBER_CREATED = 0,
+  MRB_FIBER_RUNNING,
+  MRB_FIBER_RESUMED,
+  MRB_FIBER_SUSPENDED,
+  MRB_FIBER_TRANSFERRED,
+  MRB_FIBER_TERMINATED,
+};
+
+struct mrb_context {
+  struct mrb_context *prev;
+
+  mrb_value *stack;                       /* stack of virtual machine */
+  mrb_value *stbase, *stend;
+
+  mrb_callinfo *ci;
+  mrb_callinfo *cibase, *ciend;
+
+  uint16_t *rescue;                       /* exception handler stack */
+  uint16_t rsize;
+  struct RProc **ensure;                  /* ensure handler stack */
+  uint16_t esize, eidx;
+
+  enum mrb_fiber_state status;
+  mrb_bool vmexec;
+  struct RFiber *fib;
+};
+
+#ifdef MRB_METHOD_CACHE_SIZE
+# define MRB_METHOD_CACHE
+#else
+/* default method cache size: 128 */
+/* cache size needs to be power of 2 */
+# define MRB_METHOD_CACHE_SIZE (1<<7)
+#endif
+
+/**
+ * Function pointer type for a function callable by mruby.
+ *
+ * The arguments to the function are stored on the mrb_state. To get them see mrb_get_args
+ *
+ * @param mrb The mruby state
+ * @param self The self object
+ * @return [mrb_value] The function's return value
+ */
+typedef mrb_value (*mrb_func_t)(struct mrb_state *mrb, mrb_value self);
+
+#ifndef MRB_METHOD_T_STRUCT
+typedef uintptr_t mrb_method_t;
+#else
+typedef struct {
+  uint8_t flags;
+  union {
+    struct RProc *proc;
+    mrb_func_t func;
+  };
+} mrb_method_t;
+#endif
+
+#ifdef MRB_METHOD_CACHE
+struct mrb_cache_entry {
+  struct RClass *c, *c0;
+  mrb_sym mid;
+  mrb_method_t m;
+};
+#endif
+
+struct mrb_jmpbuf;
+
+typedef void (*mrb_atexit_func)(struct mrb_state*);
+
+typedef struct mrb_state {
+  struct mrb_jmpbuf *jmp;
+
+  mrb_allocf allocf;                      /* memory allocation function */
+  void *allocf_ud;                        /* auxiliary data of allocf */
+
+  struct mrb_context *c;
+  struct mrb_context *root_c;
+  struct iv_tbl *globals;                 /* global variable table */
+
+  struct RObject *exc;                    /* exception */
+
+  struct RObject *top_self;
+  struct RClass *object_class;            /* Object class */
+  struct RClass *class_class;
+  struct RClass *module_class;
+  struct RClass *proc_class;
+  struct RClass *string_class;
+  struct RClass *array_class;
+  struct RClass *hash_class;
+  struct RClass *range_class;
+
+#ifndef MRB_WITHOUT_FLOAT
+  struct RClass *float_class;
+#endif
+  struct RClass *fixnum_class;
+  struct RClass *true_class;
+  struct RClass *false_class;
+  struct RClass *nil_class;
+  struct RClass *symbol_class;
+  struct RClass *kernel_module;
+
+  mrb_gc gc;
+
+#ifdef MRB_METHOD_CACHE
+  struct mrb_cache_entry cache[MRB_METHOD_CACHE_SIZE];
+#endif
+
+  mrb_sym symidx;
+  struct symbol_name *symtbl;   /* symbol table */
+  mrb_sym symhash[256];
+  size_t symcapa;
+#ifndef MRB_ENABLE_SYMBOLL_ALL
+  char symbuf[8];               /* buffer for small symbol names */
+#endif
+
+#ifdef MRB_ENABLE_DEBUG_HOOK
+  void (*code_fetch_hook)(struct mrb_state* mrb, struct mrb_irep *irep, const mrb_code *pc, mrb_value *regs);
+  void (*debug_op_hook)(struct mrb_state* mrb, struct mrb_irep *irep, const mrb_code *pc, mrb_value *regs);
+#endif
+
+#ifdef MRB_BYTECODE_DECODE_OPTION
+  mrb_code (*bytecode_decoder)(struct mrb_state* mrb, mrb_code code);
+#endif
+
+  struct RClass *eException_class;
+  struct RClass *eStandardError_class;
+  struct RObject *nomem_err;              /* pre-allocated NoMemoryError */
+  struct RObject *stack_err;              /* pre-allocated SysStackError */
+#ifdef MRB_GC_FIXED_ARENA
+  struct RObject *arena_err;              /* pre-allocated arena overfow error */
+#endif
+
+  void *ud; /* auxiliary data */
+
+#ifdef MRB_FIXED_STATE_ATEXIT_STACK
+  mrb_atexit_func atexit_stack[MRB_FIXED_STATE_ATEXIT_STACK_SIZE];
+#else
+  mrb_atexit_func *atexit_stack;
+#endif
+  uint16_t atexit_stack_len;
+  uint16_t ecall_nest;                    /* prevent infinite recursive ecall() */
+} mrb_state;
+
+/**
+ * Defines a new class.
+ *
+ * If you're creating a gem it may look something like this:
+ *
+ *      !!!c
+ *      void mrb_example_gem_init(mrb_state* mrb) {
+ *          struct RClass *example_class;
+ *          example_class = mrb_define_class(mrb, "Example_Class", mrb->object_class);
+ *      }
+ *
+ *      void mrb_example_gem_final(mrb_state* mrb) {
+ *          //free(TheAnimals);
+ *      }
+ *
+ * @param mrb The current mruby state.
+ * @param name The name of the defined class.
+ * @param super The new class parent.
+ * @return [struct RClass *] Reference to the newly defined class.
+ * @see mrb_define_class_under
+ */
+MRB_API struct RClass *mrb_define_class(mrb_state *mrb, const char *name, struct RClass *super);
+
+/**
+ * Defines a new module.
+ *
+ * @param mrb The current mruby state.
+ * @param name The name of the module.
+ * @return [struct RClass *] Reference to the newly defined module.
+ */
+MRB_API struct RClass *mrb_define_module(mrb_state *mrb, const char *name);
+MRB_API mrb_value mrb_singleton_class(mrb_state *mrb, mrb_value val);
+
+/**
+ * Include a module in another class or module.
+ * Equivalent to:
+ *
+ *   module B
+ *     include A
+ *   end
+ * @param mrb The current mruby state.
+ * @param cla A reference to module or a class.
+ * @param included A reference to the module to be included.
+ */
+MRB_API void mrb_include_module(mrb_state *mrb, struct RClass *cla, struct RClass *included);
+
+/**
+ * Prepends a module in another class or module.
+ *
+ * Equivalent to:
+ *  module B
+ *    prepend A
+ *  end
+ * @param mrb The current mruby state.
+ * @param cla A reference to module or a class.
+ * @param prepended A reference to the module to be prepended.
+ */
+MRB_API void mrb_prepend_module(mrb_state *mrb, struct RClass *cla, struct RClass *prepended);
+
+/**
+ * Defines a global function in ruby.
+ *
+ * If you're creating a gem it may look something like this
+ *
+ * Example:
+ *
+ *     mrb_value example_method(mrb_state* mrb, mrb_value self)
+ *     {
+ *          puts("Executing example command!");
+ *          return self;
+ *     }
+ *
+ *     void mrb_example_gem_init(mrb_state* mrb)
+ *     {
+ *           mrb_define_method(mrb, mrb->kernel_module, "example_method", example_method, MRB_ARGS_NONE());
+ *     }
+ *
+ * @param mrb The MRuby state reference.
+ * @param cla The class pointer where the method will be defined.
+ * @param name The name of the method being defined.
+ * @param func The function pointer to the method definition.
+ * @param aspec The method parameters declaration.
+ */
+MRB_API void mrb_define_method(mrb_state *mrb, struct RClass *cla, const char *name, mrb_func_t func, mrb_aspec aspec);
+
+/**
+ * Defines a class method.
+ *
+ * Example:
+ *
+ *     # Ruby style
+ *     class Foo
+ *       def Foo.bar
+ *       end
+ *     end
+ *     // C style
+ *     mrb_value bar_method(mrb_state* mrb, mrb_value self){
+ *       return mrb_nil_value();
+ *     }
+ *     void mrb_example_gem_init(mrb_state* mrb){
+ *       struct RClass *foo;
+ *       foo = mrb_define_class(mrb, "Foo", mrb->object_class);
+ *       mrb_define_class_method(mrb, foo, "bar", bar_method, MRB_ARGS_NONE());
+ *     }
+ * @param mrb The MRuby state reference.
+ * @param cla The class where the class method will be defined.
+ * @param name The name of the class method being defined.
+ * @param fun The function pointer to the class method definition.
+ * @param aspec The method parameters declaration.
+ */
+MRB_API void mrb_define_class_method(mrb_state *mrb, struct RClass *cla, const char *name, mrb_func_t fun, mrb_aspec aspec);
+
+/**
+ * Defines a singleton method
+ *
+ * @see mrb_define_class_method
+ */
+MRB_API void mrb_define_singleton_method(mrb_state *mrb, struct RObject *cla, const char *name, mrb_func_t fun, mrb_aspec aspec);
+
+/**
+ *  Defines a module function.
+ *
+ * Example:
+ *
+ *        # Ruby style
+ *        module Foo
+ *          def Foo.bar
+ *          end
+ *        end
+ *        // C style
+ *        mrb_value bar_method(mrb_state* mrb, mrb_value self){
+ *          return mrb_nil_value();
+ *        }
+ *        void mrb_example_gem_init(mrb_state* mrb){
+ *          struct RClass *foo;
+ *          foo = mrb_define_module(mrb, "Foo");
+ *          mrb_define_module_function(mrb, foo, "bar", bar_method, MRB_ARGS_NONE());
+ *        }
+ *  @param mrb The MRuby state reference.
+ *  @param cla The module where the module function will be defined.
+ *  @param name The name of the module function being defined.
+ *  @param fun The function pointer to the module function definition.
+ *  @param aspec The method parameters declaration.
+ */
+MRB_API void mrb_define_module_function(mrb_state *mrb, struct RClass *cla, const char *name, mrb_func_t fun, mrb_aspec aspec);
+
+/**
+ *  Defines a constant.
+ *
+ * Example:
+ *
+ *          # Ruby style
+ *          class ExampleClass
+ *            AGE = 22
+ *          end
+ *          // C style
+ *          #include <stdio.h>
+ *          #include <mruby.h>
+ *
+ *          void
+ *          mrb_example_gem_init(mrb_state* mrb){
+ *            mrb_define_const(mrb, mrb->kernel_module, "AGE", mrb_fixnum_value(22));
+ *          }
+ *
+ *          mrb_value
+ *          mrb_example_gem_final(mrb_state* mrb){
+ *          }
+ *  @param mrb The MRuby state reference.
+ *  @param cla A class or module the constant is defined in.
+ *  @param name The name of the constant being defined.
+ *  @param val The value for the constant.
+ */
+MRB_API void mrb_define_const(mrb_state* mrb, struct RClass* cla, const char *name, mrb_value val);
+
+/**
+ * Undefines a method.
+ *
+ * Example:
+ *
+ *     # Ruby style
+ *
+ *     class ExampleClassA
+ *       def example_method
+ *         "example"
+ *       end
+ *     end
+ *     ExampleClassA.new.example_method # => example
+ *
+ *     class ExampleClassB < ExampleClassA
+ *       undef_method :example_method
+ *     end
+ *
+ *     ExampleClassB.new.example_method # => undefined method 'example_method' for ExampleClassB (NoMethodError)
+ *
+ *     // C style
+ *     #include <stdio.h>
+ *     #include <mruby.h>
+ *
+ *     mrb_value
+ *     mrb_example_method(mrb_state *mrb){
+ *       return mrb_str_new_lit(mrb, "example");
+ *     }
+ *
+ *     void
+ *     mrb_example_gem_init(mrb_state* mrb){
+ *       struct RClass *example_class_a;
+ *       struct RClass *example_class_b;
+ *       struct RClass *example_class_c;
+ *
+ *       example_class_a = mrb_define_class(mrb, "ExampleClassA", mrb->object_class);
+ *       mrb_define_method(mrb, example_class_a, "example_method", mrb_example_method, MRB_ARGS_NONE());
+ *       example_class_b = mrb_define_class(mrb, "ExampleClassB", example_class_a);
+ *       example_class_c = mrb_define_class(mrb, "ExampleClassC", example_class_b);
+ *       mrb_undef_method(mrb, example_class_c, "example_method");
+ *     }
+ *
+ *     mrb_example_gem_final(mrb_state* mrb){
+ *     }
+ * @param mrb The mruby state reference.
+ * @param cla The class the method will be undefined from.
+ * @param name The name of the method to be undefined.
+ */
+MRB_API void mrb_undef_method(mrb_state *mrb, struct RClass *cla, const char *name);
+MRB_API void mrb_undef_method_id(mrb_state*, struct RClass*, mrb_sym);
+
+/**
+ * Undefine a class method.
+ * Example:
+ *
+ *      # Ruby style
+ *      class ExampleClass
+ *        def self.example_method
+ *          "example"
+ *        end
+ *      end
+ *
+ *     ExampleClass.example_method
+ *
+ *     // C style
+ *     #include <stdio.h>
+ *     #include <mruby.h>
+ *
+ *     mrb_value
+ *     mrb_example_method(mrb_state *mrb){
+ *       return mrb_str_new_lit(mrb, "example");
+ *     }
+ *
+ *     void
+ *     mrb_example_gem_init(mrb_state* mrb){
+ *       struct RClass *example_class;
+ *       example_class = mrb_define_class(mrb, "ExampleClass", mrb->object_class);
+ *       mrb_define_class_method(mrb, example_class, "example_method", mrb_example_method, MRB_ARGS_NONE());
+ *       mrb_undef_class_method(mrb, example_class, "example_method");
+ *      }
+ *
+ *      void
+ *      mrb_example_gem_final(mrb_state* mrb){
+ *      }
+ * @param mrb The mruby state reference.
+ * @param cls A class the class method will be undefined from.
+ * @param name The name of the class method to be undefined.
+ */
+MRB_API void mrb_undef_class_method(mrb_state *mrb, struct RClass *cls, const char *name);
+
+/**
+ * Initialize a new object instance of c class.
+ *
+ * Example:
+ *
+ *     # Ruby style
+ *     class ExampleClass
+ *     end
+ *
+ *     p ExampleClass # => #<ExampleClass:0x9958588>
+ *     // C style
+ *     #include <stdio.h>
+ *     #include <mruby.h>
+ *
+ *     void
+ *     mrb_example_gem_init(mrb_state* mrb) {
+ *       struct RClass *example_class;
+ *       mrb_value obj;
+ *       example_class = mrb_define_class(mrb, "ExampleClass", mrb->object_class); # => class ExampleClass; end
+ *       obj = mrb_obj_new(mrb, example_class, 0, NULL); # => ExampleClass.new
+ *       mrb_p(mrb, obj); // => Kernel#p
+ *      }
+ * @param mrb The current mruby state.
+ * @param c Reference to the class of the new object.
+ * @param argc Number of arguments in argv
+ * @param argv Array of mrb_value to initialize the object
+ * @return [mrb_value] The newly initialized object
+ */
+MRB_API mrb_value mrb_obj_new(mrb_state *mrb, struct RClass *c, mrb_int argc, const mrb_value *argv);
+
+/** @see mrb_obj_new */
+MRB_INLINE mrb_value mrb_class_new_instance(mrb_state *mrb, mrb_int argc, const mrb_value *argv, struct RClass *c)
+{
+  return mrb_obj_new(mrb,c,argc,argv);
+}
+
+/**
+ * Creates a new instance of Class, Class.
+ *
+ * Example:
+ *
+ *      void
+ *      mrb_example_gem_init(mrb_state* mrb) {
+ *        struct RClass *example_class;
+ *
+ *        mrb_value obj;
+ *        example_class = mrb_class_new(mrb, mrb->object_class);
+ *        obj = mrb_obj_new(mrb, example_class, 0, NULL); // => #<#<Class:0x9a945b8>:0x9a94588>
+ *        mrb_p(mrb, obj); // => Kernel#p
+ *       }
+ *
+ * @param mrb The current mruby state.
+ * @param super The super class or parent.
+ * @return [struct RClass *] Reference to the new class.
+ */
+MRB_API struct RClass * mrb_class_new(mrb_state *mrb, struct RClass *super);
+
+/**
+ * Creates a new module, Module.
+ *
+ * Example:
+ *      void
+ *      mrb_example_gem_init(mrb_state* mrb) {
+ *        struct RClass *example_module;
+ *
+ *        example_module = mrb_module_new(mrb);
+ *      }
+ *
+ * @param mrb The current mruby state.
+ * @return [struct RClass *] Reference to the new module.
+ */
+MRB_API struct RClass * mrb_module_new(mrb_state *mrb);
+
+/**
+ * Returns an mrb_bool. True if class was defined, and false if the class was not defined.
+ *
+ * Example:
+ *     void
+ *     mrb_example_gem_init(mrb_state* mrb) {
+ *       struct RClass *example_class;
+ *       mrb_bool cd;
+ *
+ *       example_class = mrb_define_class(mrb, "ExampleClass", mrb->object_class);
+ *       cd = mrb_class_defined(mrb, "ExampleClass");
+ *
+ *       // If mrb_class_defined returns 1 then puts "True"
+ *       // If mrb_class_defined returns 0 then puts "False"
+ *       if (cd == 1){
+ *         puts("True");
+ *       }
+ *       else {
+ *         puts("False");
+ *       }
+ *      }
+ *
+ * @param mrb The current mruby state.
+ * @param name A string representing the name of the class.
+ * @return [mrb_bool] A boolean value.
+ */
+MRB_API mrb_bool mrb_class_defined(mrb_state *mrb, const char *name);
+
+/**
+ * Gets a class.
+ * @param mrb The current mruby state.
+ * @param name The name of the class.
+ * @return [struct RClass *] A reference to the class.
+*/
+MRB_API struct RClass * mrb_class_get(mrb_state *mrb, const char *name);
+
+/**
+ * Gets a exception class.
+ * @param mrb The current mruby state.
+ * @param name The name of the class.
+ * @return [struct RClass *] A reference to the class.
+*/
+MRB_API struct RClass * mrb_exc_get(mrb_state *mrb, const char *name);
+
+/**
+ * Returns an mrb_bool. True if inner class was defined, and false if the inner class was not defined.
+ *
+ * Example:
+ *     void
+ *     mrb_example_gem_init(mrb_state* mrb) {
+ *       struct RClass *example_outer, *example_inner;
+ *       mrb_bool cd;
+ *
+ *       example_outer = mrb_define_module(mrb, "ExampleOuter");
+ *
+ *       example_inner = mrb_define_class_under(mrb, example_outer, "ExampleInner", mrb->object_class);
+ *       cd = mrb_class_defined_under(mrb, example_outer, "ExampleInner");
+ *
+ *       // If mrb_class_defined_under returns 1 then puts "True"
+ *       // If mrb_class_defined_under returns 0 then puts "False"
+ *       if (cd == 1){
+ *         puts("True");
+ *       }
+ *       else {
+ *         puts("False");
+ *       }
+ *      }
+ *
+ * @param mrb The current mruby state.
+ * @param outer The name of the outer class.
+ * @param name A string representing the name of the inner class.
+ * @return [mrb_bool] A boolean value.
+ */
+MRB_API mrb_bool mrb_class_defined_under(mrb_state *mrb, struct RClass *outer, const char *name);
+
+/**
+ * Gets a child class.
+ * @param mrb The current mruby state.
+ * @param outer The name of the parent class.
+ * @param name The name of the class.
+ * @return [struct RClass *] A reference to the class.
+*/
+MRB_API struct RClass * mrb_class_get_under(mrb_state *mrb, struct RClass *outer, const char *name);
+
+/**
+ * Gets a module.
+ * @param mrb The current mruby state.
+ * @param name The name of the module.
+ * @return [struct RClass *] A reference to the module.
+*/
+MRB_API struct RClass * mrb_module_get(mrb_state *mrb, const char *name);
+
+/**
+ * Gets a module defined under another module.
+ * @param mrb The current mruby state.
+ * @param outer The name of the outer module.
+ * @param name The name of the module.
+ * @return [struct RClass *] A reference to the module.
+*/
+MRB_API struct RClass * mrb_module_get_under(mrb_state *mrb, struct RClass *outer, const char *name);
+/* a function to raise NotImplementedError with current method name */
+MRB_API void mrb_notimplement(mrb_state*);
+/* a function to be replacement of unimplemented method */
+MRB_API mrb_value mrb_notimplement_m(mrb_state*, mrb_value);
+
+/**
+ * Duplicate an object.
+ *
+ * Equivalent to:
+ *   Object#dup
+ * @param mrb The current mruby state.
+ * @param obj Object to be duplicate.
+ * @return [mrb_value] The newly duplicated object.
+ */
+MRB_API mrb_value mrb_obj_dup(mrb_state *mrb, mrb_value obj);
+
+/**
+ * Returns true if obj responds to the given method. If the method was defined for that
+ * class it returns true, it returns false otherwise.
+ *
+ *      Example:
+ *      # Ruby style
+ *      class ExampleClass
+ *        def example_method
+ *        end
+ *      end
+ *
+ *      ExampleClass.new.respond_to?(:example_method) # => true
+ *
+ *      // C style
+ *      void
+ *      mrb_example_gem_init(mrb_state* mrb) {
+ *        struct RClass *example_class;
+ *        mrb_sym mid;
+ *        mrb_bool obj_resp;
+ *
+ *        example_class = mrb_define_class(mrb, "ExampleClass", mrb->object_class);
+ *        mrb_define_method(mrb, example_class, "example_method", exampleMethod, MRB_ARGS_NONE());
+ *        mid = mrb_intern_str(mrb, mrb_str_new_lit(mrb, "example_method" ));
+ *        obj_resp = mrb_obj_respond_to(mrb, example_class, mid); // => 1(true in Ruby world)
+ *
+ *        // If mrb_obj_respond_to returns 1 then puts "True"
+ *        // If mrb_obj_respond_to returns 0 then puts "False"
+ *        if (obj_resp == 1) {
+ *          puts("True");
+ *        }
+ *        else if (obj_resp == 0) {
+ *          puts("False");
+ *        }
+ *      }
+ *
+ * @param mrb The current mruby state.
+ * @param c A reference to a class.
+ * @param mid A symbol referencing a method id.
+ * @return [mrb_bool] A boolean value.
+ */
+MRB_API mrb_bool mrb_obj_respond_to(mrb_state *mrb, struct RClass* c, mrb_sym mid);
+
+/**
+ * Defines a new class under a given module
+ *
+ * @param mrb The current mruby state.
+ * @param outer Reference to the module under which the new class will be defined
+ * @param name The name of the defined class
+ * @param super The new class parent
+ * @return [struct RClass *] Reference to the newly defined class
+ * @see mrb_define_class
+ */
+MRB_API struct RClass * mrb_define_class_under(mrb_state *mrb, struct RClass *outer, const char *name, struct RClass *super);
+
+MRB_API struct RClass * mrb_define_module_under(mrb_state *mrb, struct RClass *outer, const char *name);
+
+/**
+ * Function requires n arguments.
+ *
+ * @param n
+ *      The number of required arguments.
+ */
+#define MRB_ARGS_REQ(n)     ((mrb_aspec)((n)&0x1f) << 18)
+
+/**
+ * Function takes n optional arguments
+ *
+ * @param n
+ *      The number of optional arguments.
+ */
+#define MRB_ARGS_OPT(n)     ((mrb_aspec)((n)&0x1f) << 13)
+
+/**
+ * Function takes n1 mandatory arguments and n2 optional arguments
+ *
+ * @param n1
+ *      The number of required arguments.
+ * @param n2
+ *      The number of optional arguments.
+ */
+#define MRB_ARGS_ARG(n1,n2)   (MRB_ARGS_REQ(n1)|MRB_ARGS_OPT(n2))
+
+/** rest argument */
+#define MRB_ARGS_REST()     ((mrb_aspec)(1 << 12))
+
+/** required arguments after rest */
+#define MRB_ARGS_POST(n)    ((mrb_aspec)((n)&0x1f) << 7)
+
+/** keyword arguments (n of keys, kdict) */
+#define MRB_ARGS_KEY(n1,n2) ((mrb_aspec)((((n1)&0x1f) << 2) | ((n2)?(1<<1):0)))
+
+/**
+ * Function takes a block argument
+ */
+#define MRB_ARGS_BLOCK()    ((mrb_aspec)1)
+
+/**
+ * Function accepts any number of arguments
+ */
+#define MRB_ARGS_ANY()      MRB_ARGS_REST()
+
+/**
+ * Function accepts no arguments
+ */
+#define MRB_ARGS_NONE()     ((mrb_aspec)0)
+
+/**
+ * Format specifiers for {mrb_get_args} function
+ *
+ * Must be a C string composed of the following format specifiers:
+ *
+ * | char | Ruby type      | C types           | Notes                                              |
+ * |:----:|----------------|-------------------|----------------------------------------------------|
+ * | `o`  | {Object}       | {mrb_value}       | Could be used to retrieve any type of argument     |
+ * | `C`  | {Class}/{Module} | {mrb_value}     |                                                    |
+ * | `S`  | {String}       | {mrb_value}       | when `!` follows, the value may be `nil`           |
+ * | `A`  | {Array}        | {mrb_value}       | when `!` follows, the value may be `nil`           |
+ * | `H`  | {Hash}         | {mrb_value}       | when `!` follows, the value may be `nil`           |
+ * | `s`  | {String}       | char *, {mrb_int} | Receive two arguments; `s!` gives (`NULL`,`0`) for `nil`        |
+ * | `z`  | {String}       | char *            | `NULL` terminated string; `z!` gives `NULL` for `nil`           |
+ * | `a`  | {Array}        | {mrb_value} *, {mrb_int} | Receive two arguments; `a!` gives (`NULL`,`0`) for `nil` |
+ * | `f`  | {Fixnum}/{Float} | {mrb_float}       |                                                    |
+ * | `i`  | {Fixnum}/{Float} | {mrb_int}         |                                                    |
+ * | `b`  | boolean        | {mrb_bool}        |                                                    |
+ * | `n`  | {String}/{Symbol} | {mrb_sym}         |                                                    |
+ * | `d`  | data           | void *, {mrb_data_type} const | 2nd argument will be used to check data type so it won't be modified; when `!` follows, the value may be `nil` |
+ * | `I`  | inline struct  | void *          |                                                    |
+ * | `&`  | block          | {mrb_value}       | &! raises exception if no block given.             |
+ * | `*`  | rest arguments | {mrb_value} *, {mrb_int} | Receive the rest of arguments as an array; `*!` avoid copy of the stack.  |
+ * | <code>\|</code> | optional     |                   | After this spec following specs would be optional. |
+ * | `?`  | optional given | {mrb_bool}        | `TRUE` if preceding argument is given. Used to check optional argument is given. |
+ * | `:`  | keyword args   | {mrb_kwargs} const | Get keyword arguments. @see mrb_kwargs |
+ *
+ * @see mrb_get_args
+ */
+typedef const char *mrb_args_format;
+
+/**
+ * Get keyword arguments by `mrb_get_args()` with `:` specifier.
+ *
+ * `mrb_kwargs::num` indicates that the number of keyword values.
+ *
+ * `mrb_kwargs::values` is an object array, and the keyword argument corresponding to the string array is assigned.
+ * Note that `undef` is assigned if there is no keyword argument corresponding to `mrb_kwargs::optional`.
+ *
+ * `mrb_kwargs::table` accepts a string array.
+ *
+ * `mrb_kwargs::required` indicates that the specified number of keywords starting from the beginning of the string array are required.
+ *
+ * `mrb_kwargs::rest` is the remaining keyword argument that can be accepted as `**rest` in Ruby.
+ * If `NULL` is specified, `ArgumentError` is raised when there is an undefined keyword.
+ *
+ * Examples:
+ *
+ *      // def method(a: 1, b: 2)
+ *
+ *      uint32_t kw_num = 2;
+ *      const char *kw_names[kw_num] = { "a", "b" };
+ *      uint32_t kw_required = 0;
+ *      mrb_value kw_values[kw_num];
+ *      const mrb_kwargs kwargs = { kw_num, kw_values, kw_names, kw_required, NULL };
+ *
+ *      mrb_get_args(mrb, ":", &kwargs);
+ *      if (mrb_undef_p(kw_values[0])) { kw_values[0] = mrb_fixnum_value(1); }
+ *      if (mrb_undef_p(kw_values[1])) { kw_values[1] = mrb_fixnum_value(2); }
+ *
+ *
+ *      // def method(str, x:, y: 2, z: "default string", **opts)
+ *
+ *      mrb_value str, kw_rest;
+ *      uint32_t kw_num = 3;
+ *      const char *kw_names[kw_num] = { "x", "y", "z" };
+ *      uint32_t kw_required = 1;
+ *      mrb_value kw_values[kw_num];
+ *      const mrb_kwargs kwargs = { kw_num, kw_values, kw_names, kw_required, &kw_rest };
+ *
+ *      mrb_get_args(mrb, "S:", &str, &kwargs);
+ *      // or: mrb_get_args(mrb, ":S", &kwargs, &str);
+ *      if (mrb_undef_p(kw_values[1])) { kw_values[1] = mrb_fixnum_value(2); }
+ *      if (mrb_undef_p(kw_values[2])) { kw_values[2] = mrb_str_new_cstr(mrb, "default string"); }
+ */
+typedef struct mrb_kwargs mrb_kwargs;
+
+struct mrb_kwargs
+{
+  uint32_t num;
+  mrb_value *values;
+  const char *const *table;
+  uint32_t required;
+  mrb_value *rest;
+};
+
+/**
+ * Retrieve arguments from mrb_state.
+ *
+ * @param mrb The current MRuby state.
+ * @param format is a list of format specifiers
+ * @param ... The passing variadic arguments must be a pointer of retrieving type.
+ * @return the number of arguments retrieved.
+ * @see mrb_args_format
+ * @see mrb_kwargs
+ */
+MRB_API mrb_int mrb_get_args(mrb_state *mrb, mrb_args_format format, ...);
+
+MRB_INLINE mrb_sym
+mrb_get_mid(mrb_state *mrb) /* get method symbol */
+{
+  return mrb->c->ci->mid;
+}
+
+/**
+ * Retrieve number of arguments from mrb_state.
+ *
+ * Correctly handles *splat arguments.
+ */
+MRB_API mrb_int mrb_get_argc(mrb_state *mrb);
+
+MRB_API mrb_value* mrb_get_argv(mrb_state *mrb);
+
+/* `strlen` for character string literals (use with caution or `strlen` instead)
+    Adjacent string literals are concatenated in C/C++ in translation phase 6.
+    If `lit` is not one, the compiler will report a syntax error:
+     MSVC: "error C2143: syntax error : missing ')' before 'string'"
+     GCC:  "error: expected ')' before string constant"
+*/
+#define mrb_strlen_lit(lit) (sizeof(lit "") - 1)
+
+/**
+ * Call existing ruby functions.
+ *
+ * Example:
+ *
+ *      #include <stdio.h>
+ *      #include <mruby.h>
+ *      #include "mruby/compile.h"
+ *
+ *      int
+ *      main()
+ *      {
+ *        mrb_int i = 99;
+ *        mrb_state *mrb = mrb_open();
+ *
+ *        if (!mrb) { }
+ *        FILE *fp = fopen("test.rb","r");
+ *        mrb_value obj = mrb_load_file(mrb,fp);
+ *        mrb_funcall(mrb, obj, "method_name", 1, mrb_fixnum_value(i));
+ *        fclose(fp);
+ *        mrb_close(mrb);
+ *      }
+ *
+ * @param mrb The current mruby state.
+ * @param val A reference to an mruby value.
+ * @param name The name of the method.
+ * @param argc The number of arguments the method has.
+ * @param ... Variadic values(not type safe!).
+ * @return [mrb_value] mruby function value.
+ */
+MRB_API mrb_value mrb_funcall(mrb_state *mrb, mrb_value val, const char *name, mrb_int argc, ...);
+/**
+ * Call existing ruby functions. This is basically the type safe version of mrb_funcall.
+ *
+ *      #include <stdio.h>
+ *      #include <mruby.h>
+ *      #include "mruby/compile.h"
+ *      int
+ *      main()
+ *      {
+ *        mrb_int i = 99;
+ *        mrb_state *mrb = mrb_open();
+ *
+ *        if (!mrb) { }
+ *        mrb_sym m_sym = mrb_intern_lit(mrb, "method_name"); // Symbol for method.
+ *
+ *        FILE *fp = fopen("test.rb","r");
+ *        mrb_value obj = mrb_load_file(mrb,fp);
+ *        mrb_funcall_argv(mrb, obj, m_sym, 1, &obj); // Calling ruby function from test.rb.
+ *        fclose(fp);
+ *        mrb_close(mrb);
+ *       }
+ * @param mrb The current mruby state.
+ * @param val A reference to an mruby value.
+ * @param name_sym The symbol representing the method.
+ * @param argc The number of arguments the method has.
+ * @param obj Pointer to the object.
+ * @return [mrb_value] mrb_value mruby function value.
+ * @see mrb_funcall
+ */
+MRB_API mrb_value mrb_funcall_argv(mrb_state *mrb, mrb_value val, mrb_sym name, mrb_int argc, const mrb_value *argv);
+/**
+ * Call existing ruby functions with a block.
+ */
+MRB_API mrb_value mrb_funcall_with_block(mrb_state *mrb, mrb_value val, mrb_sym name, mrb_int argc, const mrb_value *argv, mrb_value block);
+/**
+ * Create a symbol
+ *
+ * Example:
+ *
+ *     # Ruby style:
+ *     :pizza # => :pizza
+ *
+ *     // C style:
+ *     mrb_sym m_sym = mrb_intern_lit(mrb, "pizza"); //  => :pizza
+ *
+ * @param mrb The current mruby state.
+ * @param str The string to be symbolized
+ * @return [mrb_sym] mrb_sym A symbol.
+ */
+MRB_API mrb_sym mrb_intern_cstr(mrb_state *mrb, const char* str);
+MRB_API mrb_sym mrb_intern(mrb_state*,const char*,size_t);
+MRB_API mrb_sym mrb_intern_static(mrb_state*,const char*,size_t);
+#define mrb_intern_lit(mrb, lit) mrb_intern_static(mrb, lit, mrb_strlen_lit(lit))
+MRB_API mrb_sym mrb_intern_str(mrb_state*,mrb_value);
+MRB_API mrb_value mrb_check_intern_cstr(mrb_state*,const char*);
+MRB_API mrb_value mrb_check_intern(mrb_state*,const char*,size_t);
+MRB_API mrb_value mrb_check_intern_str(mrb_state*,mrb_value);
+MRB_API const char *mrb_sym_name(mrb_state*,mrb_sym);
+MRB_API const char *mrb_sym_name_len(mrb_state*,mrb_sym,mrb_int*);
+MRB_API const char *mrb_sym_dump(mrb_state*,mrb_sym);
+MRB_API mrb_value mrb_sym_str(mrb_state*,mrb_sym);
+#define mrb_sym2name(mrb,sym) mrb_sym_name(mrb,sym)
+#define mrb_sym2name_len(mrb,sym,len) mrb_sym_name_len(mrb,sym,len)
+#define mrb_sym2str(mrb,sym) mrb_sym_str(mrb,sym)
+
+MRB_API void *mrb_malloc(mrb_state*, size_t);         /* raise RuntimeError if no mem */
+MRB_API void *mrb_calloc(mrb_state*, size_t, size_t); /* ditto */
+MRB_API void *mrb_realloc(mrb_state*, void*, size_t); /* ditto */
+MRB_API void *mrb_realloc_simple(mrb_state*, void*, size_t); /* return NULL if no memory available */
+MRB_API void *mrb_malloc_simple(mrb_state*, size_t);  /* return NULL if no memory available */
+MRB_API struct RBasic *mrb_obj_alloc(mrb_state*, enum mrb_vtype, struct RClass*);
+MRB_API void mrb_free(mrb_state*, void*);
+
+MRB_API mrb_value mrb_str_new(mrb_state *mrb, const char *p, size_t len);
+
+/**
+ * Turns a C string into a Ruby string value.
+ */
+MRB_API mrb_value mrb_str_new_cstr(mrb_state*, const char*);
+MRB_API mrb_value mrb_str_new_static(mrb_state *mrb, const char *p, size_t len);
+#define mrb_str_new_lit(mrb, lit) mrb_str_new_static(mrb, (lit), mrb_strlen_lit(lit))
+
+MRB_API mrb_value mrb_obj_freeze(mrb_state*, mrb_value);
+#define mrb_str_new_frozen(mrb,p,len) mrb_obj_freeze(mrb,mrb_str_new(mrb,p,len))
+#define mrb_str_new_cstr_frozen(mrb,p) mrb_obj_freeze(mrb,mrb_str_new_cstr(mrb,p))
+#define mrb_str_new_static_frozen(mrb,p,len) mrb_obj_freeze(mrb,mrb_str_new_static(mrb,p,len))
+#define mrb_str_new_lit_frozen(mrb,lit) mrb_obj_freeze(mrb,mrb_str_new_lit(mrb,lit))
+
+#ifdef _WIN32
+MRB_API char* mrb_utf8_from_locale(const char *p, int len);
+MRB_API char* mrb_locale_from_utf8(const char *p, int len);
+#define mrb_locale_free(p) free(p)
+#define mrb_utf8_free(p) free(p)
+#else
+#define mrb_utf8_from_locale(p, l) ((char*)(p))
+#define mrb_locale_from_utf8(p, l) ((char*)(p))
+#define mrb_locale_free(p)
+#define mrb_utf8_free(p)
+#endif
+
+/**
+ * Creates new mrb_state.
+ *
+ * @return
+ *      Pointer to the newly created mrb_state.
+ */
+MRB_API mrb_state* mrb_open(void);
+
+/**
+ * Create new mrb_state with custom allocators.
+ *
+ * @param f
+ *      Reference to the allocation function.
+ * @param ud
+ *      User data will be passed to custom allocator f.
+ *      If user data isn't required just pass NULL.
+ * @return
+ *      Pointer to the newly created mrb_state.
+ */
+MRB_API mrb_state* mrb_open_allocf(mrb_allocf f, void *ud, mrb_bool disable_gems);
+
+/**
+ * Create new mrb_state with just the MRuby core
+ *
+ * @param f
+ *      Reference to the allocation function.
+ *      Use mrb_default_allocf for the default
+ * @param ud
+ *      User data will be passed to custom allocator f.
+ *      If user data isn't required just pass NULL.
+ * @return
+ *      Pointer to the newly created mrb_state.
+ */
+MRB_API mrb_state* mrb_open_core(mrb_allocf f, void *ud);
+
+/**
+ * Closes and frees a mrb_state.
+ *
+ * @param mrb
+ *      Pointer to the mrb_state to be closed.
+ */
+MRB_API void mrb_close(mrb_state *mrb);
+
+/**
+ * The default allocation function.
+ *
+ * @see mrb_allocf
+ */
+MRB_API void* mrb_default_allocf(mrb_state*, void*, size_t, void*);
+
+MRB_API mrb_value mrb_top_self(mrb_state *mrb);
+MRB_API mrb_value mrb_run(mrb_state *mrb, struct RProc* proc, mrb_value self);
+MRB_API mrb_value mrb_top_run(mrb_state *mrb, struct RProc *proc, mrb_value self, unsigned int stack_keep);
+MRB_API mrb_value mrb_vm_run(mrb_state *mrb, struct RProc *proc, mrb_value self, unsigned int stack_keep);
+MRB_API mrb_value mrb_vm_exec(mrb_state *mrb, struct RProc *proc, const mrb_code *iseq);
+/* compatibility macros */
+#define mrb_toplevel_run_keep(m,p,k) mrb_top_run((m),(p),mrb_top_self(m),(k))
+#define mrb_toplevel_run(m,p) mrb_toplevel_run_keep((m),(p),0)
+#define mrb_context_run(m,p,s,k) mrb_vm_run((m),(p),(s),(k))
+
+MRB_API void mrb_p(mrb_state*, mrb_value);
+MRB_API mrb_int mrb_obj_id(mrb_value obj);
+MRB_API mrb_sym mrb_obj_to_sym(mrb_state *mrb, mrb_value name);
+
+MRB_API mrb_bool mrb_obj_eq(mrb_state *mrb, mrb_value a, mrb_value b);
+MRB_API mrb_bool mrb_obj_equal(mrb_state *mrb, mrb_value a, mrb_value b);
+MRB_API mrb_bool mrb_equal(mrb_state *mrb, mrb_value obj1, mrb_value obj2);
+MRB_API mrb_value mrb_convert_to_integer(mrb_state *mrb, mrb_value val, mrb_int base);
+MRB_API mrb_value mrb_Integer(mrb_state *mrb, mrb_value val);
+#ifndef MRB_WITHOUT_FLOAT
+MRB_API mrb_value mrb_Float(mrb_state *mrb, mrb_value val);
+#endif
+MRB_API mrb_value mrb_inspect(mrb_state *mrb, mrb_value obj);
+MRB_API mrb_bool mrb_eql(mrb_state *mrb, mrb_value obj1, mrb_value obj2);
+/* mrb_cmp(mrb, obj1, obj2): 1:0:-1; -2 for error */
+MRB_API mrb_int mrb_cmp(mrb_state *mrb, mrb_value obj1, mrb_value obj2);
+
+MRB_INLINE int
+mrb_gc_arena_save(mrb_state *mrb)
+{
+  return mrb->gc.arena_idx;
+}
+
+MRB_INLINE void
+mrb_gc_arena_restore(mrb_state *mrb, int idx)
+{
+  mrb->gc.arena_idx = idx;
+}
+
+MRB_API void mrb_garbage_collect(mrb_state*);
+MRB_API void mrb_full_gc(mrb_state*);
+MRB_API void mrb_incremental_gc(mrb_state *);
+MRB_API void mrb_gc_mark(mrb_state*,struct RBasic*);
+#define mrb_gc_mark_value(mrb,val) do {\
+  if (!mrb_immediate_p(val)) mrb_gc_mark((mrb), mrb_basic_ptr(val)); \
+} while (0)
+MRB_API void mrb_field_write_barrier(mrb_state *, struct RBasic*, struct RBasic*);
+#define mrb_field_write_barrier_value(mrb, obj, val) do{\
+  if (!mrb_immediate_p(val)) mrb_field_write_barrier((mrb), (obj), mrb_basic_ptr(val)); \
+} while (0)
+MRB_API void mrb_write_barrier(mrb_state *, struct RBasic*);
+
+MRB_API mrb_value mrb_check_convert_type(mrb_state *mrb, mrb_value val, enum mrb_vtype type, const char *tname, const char *method);
+MRB_API mrb_value mrb_any_to_s(mrb_state *mrb, mrb_value obj);
+MRB_API const char * mrb_obj_classname(mrb_state *mrb, mrb_value obj);
+MRB_API struct RClass* mrb_obj_class(mrb_state *mrb, mrb_value obj);
+MRB_API mrb_value mrb_class_path(mrb_state *mrb, struct RClass *c);
+MRB_API mrb_value mrb_convert_type(mrb_state *mrb, mrb_value val, enum mrb_vtype type, const char *tname, const char *method);
+MRB_API mrb_bool mrb_obj_is_kind_of(mrb_state *mrb, mrb_value obj, struct RClass *c);
+MRB_API mrb_value mrb_obj_inspect(mrb_state *mrb, mrb_value self);
+MRB_API mrb_value mrb_obj_clone(mrb_state *mrb, mrb_value self);
+
+#ifndef ISPRINT
+#define ISASCII(c) ((unsigned)(c) <= 0x7f)
+#define ISPRINT(c) (((unsigned)(c) - 0x20) < 0x5f)
+#define ISSPACE(c) ((c) == ' ' || (unsigned)(c) - '\t' < 5)
+#define ISUPPER(c) (((unsigned)(c) - 'A') < 26)
+#define ISLOWER(c) (((unsigned)(c) - 'a') < 26)
+#define ISALPHA(c) ((((unsigned)(c) | 0x20) - 'a') < 26)
+#define ISDIGIT(c) (((unsigned)(c) - '0') < 10)
+#define ISXDIGIT(c) (ISDIGIT(c) || ((unsigned)(c) | 0x20) - 'a' < 6)
+#define ISALNUM(c) (ISALPHA(c) || ISDIGIT(c))
+#define ISBLANK(c) ((c) == ' ' || (c) == '\t')
+#define ISCNTRL(c) ((unsigned)(c) < 0x20 || (c) == 0x7f)
+#define TOUPPER(c) (ISLOWER(c) ? ((c) & 0x5f) : (c))
+#define TOLOWER(c) (ISUPPER(c) ? ((c) | 0x20) : (c))
+#endif
+
+MRB_API mrb_value mrb_exc_new(mrb_state *mrb, struct RClass *c, const char *ptr, size_t len);
+MRB_API mrb_noreturn void mrb_exc_raise(mrb_state *mrb, mrb_value exc);
+
+MRB_API mrb_noreturn void mrb_raise(mrb_state *mrb, struct RClass *c, const char *msg);
+MRB_API mrb_noreturn void mrb_raisef(mrb_state *mrb, struct RClass *c, const char *fmt, ...);
+MRB_API mrb_noreturn void mrb_name_error(mrb_state *mrb, mrb_sym id, const char *fmt, ...);
+MRB_API mrb_noreturn void mrb_frozen_error(mrb_state *mrb, void *frozen_obj);
+MRB_API mrb_noreturn void mrb_argnum_error(mrb_state *mrb, mrb_int argc, int min, int max);
+MRB_API void mrb_warn(mrb_state *mrb, const char *fmt, ...);
+MRB_API mrb_noreturn void mrb_bug(mrb_state *mrb, const char *fmt, ...);
+MRB_API void mrb_print_backtrace(mrb_state *mrb);
+MRB_API void mrb_print_error(mrb_state *mrb);
+/* function for `raisef` formatting */
+MRB_API mrb_value mrb_vformat(mrb_state *mrb, const char *format, va_list ap);
+
+/* macros to get typical exception objects
+   note:
+   + those E_* macros requires mrb_state* variable named mrb.
+   + exception objects obtained from those macros are local to mrb
+*/
+#define E_RUNTIME_ERROR             (mrb_exc_get(mrb, "RuntimeError"))
+#define E_TYPE_ERROR                (mrb_exc_get(mrb, "TypeError"))
+#define E_ARGUMENT_ERROR            (mrb_exc_get(mrb, "ArgumentError"))
+#define E_INDEX_ERROR               (mrb_exc_get(mrb, "IndexError"))
+#define E_RANGE_ERROR               (mrb_exc_get(mrb, "RangeError"))
+#define E_NAME_ERROR                (mrb_exc_get(mrb, "NameError"))
+#define E_NOMETHOD_ERROR            (mrb_exc_get(mrb, "NoMethodError"))
+#define E_SCRIPT_ERROR              (mrb_exc_get(mrb, "ScriptError"))
+#define E_SYNTAX_ERROR              (mrb_exc_get(mrb, "SyntaxError"))
+#define E_LOCALJUMP_ERROR           (mrb_exc_get(mrb, "LocalJumpError"))
+#define E_REGEXP_ERROR              (mrb_exc_get(mrb, "RegexpError"))
+#define E_FROZEN_ERROR              (mrb_exc_get(mrb, "FrozenError"))
+
+#define E_NOTIMP_ERROR              (mrb_exc_get(mrb, "NotImplementedError"))
+#ifndef MRB_WITHOUT_FLOAT
+#define E_FLOATDOMAIN_ERROR         (mrb_exc_get(mrb, "FloatDomainError"))
+#endif
+
+#define E_KEY_ERROR                 (mrb_exc_get(mrb, "KeyError"))
+
+MRB_API mrb_value mrb_yield(mrb_state *mrb, mrb_value b, mrb_value arg);
+MRB_API mrb_value mrb_yield_argv(mrb_state *mrb, mrb_value b, mrb_int argc, const mrb_value *argv);
+MRB_API mrb_value mrb_yield_with_class(mrb_state *mrb, mrb_value b, mrb_int argc, const mrb_value *argv, mrb_value self, struct RClass *c);
+
+/* continue execution to the proc */
+/* this function should always be called as the last function of a method */
+/* e.g. return mrb_yield_cont(mrb, proc, self, argc, argv); */
+mrb_value mrb_yield_cont(mrb_state *mrb, mrb_value b, mrb_value self, mrb_int argc, const mrb_value *argv);
+
+/* mrb_gc_protect() leaves the object in the arena */
+MRB_API void mrb_gc_protect(mrb_state *mrb, mrb_value obj);
+/* mrb_gc_register() keeps the object from GC. */
+MRB_API void mrb_gc_register(mrb_state *mrb, mrb_value obj);
+/* mrb_gc_unregister() removes the object from GC root. */
+MRB_API void mrb_gc_unregister(mrb_state *mrb, mrb_value obj);
+
+MRB_API mrb_value mrb_to_int(mrb_state *mrb, mrb_value val);
+#define mrb_int(mrb, val) mrb_fixnum(mrb_to_int(mrb, val))
+/* string type checking (contrary to the name, it doesn't convert) */
+MRB_API mrb_value mrb_to_str(mrb_state *mrb, mrb_value val);
+MRB_API void mrb_check_type(mrb_state *mrb, mrb_value x, enum mrb_vtype t);
+
+MRB_INLINE void mrb_check_frozen(mrb_state *mrb, void *o)
+{
+  if (mrb_frozen_p((struct RBasic*)o)) mrb_frozen_error(mrb, o);
+}
+
+typedef enum call_type {
+  CALL_PUBLIC,
+  CALL_FCALL,
+  CALL_VCALL,
+  CALL_TYPE_MAX
+} call_type;
+
+MRB_API void mrb_define_alias(mrb_state *mrb, struct RClass *c, const char *a, const char *b);
+MRB_API const char *mrb_class_name(mrb_state *mrb, struct RClass* klass);
+MRB_API void mrb_define_global_const(mrb_state *mrb, const char *name, mrb_value val);
+
+MRB_API mrb_value mrb_attr_get(mrb_state *mrb, mrb_value obj, mrb_sym id);
+
+MRB_API mrb_bool mrb_respond_to(mrb_state *mrb, mrb_value obj, mrb_sym mid);
+MRB_API mrb_bool mrb_obj_is_instance_of(mrb_state *mrb, mrb_value obj, struct RClass* c);
+MRB_API mrb_bool mrb_func_basic_p(mrb_state *mrb, mrb_value obj, mrb_sym mid, mrb_func_t func);
+
+
+/**
+ * Resume a Fiber
+ *
+ * Implemented in mruby-fiber
+ */
+MRB_API mrb_value mrb_fiber_resume(mrb_state *mrb, mrb_value fib, mrb_int argc, const mrb_value *argv);
+
+/**
+ * Yield a Fiber
+ *
+ * Implemented in mruby-fiber
+ */
+MRB_API mrb_value mrb_fiber_yield(mrb_state *mrb, mrb_int argc, const mrb_value *argv);
+
+/**
+ * Check if a Fiber is alive
+ *
+ * Implemented in mruby-fiber
+ */
+MRB_API mrb_value mrb_fiber_alive_p(mrb_state *mrb, mrb_value fib);
+
+/**
+ * FiberError reference
+ *
+ * Implemented in mruby-fiber
+ */
+#define E_FIBER_ERROR (mrb_exc_get(mrb, "FiberError"))
+MRB_API void mrb_stack_extend(mrb_state*, mrb_int);
+
+/* memory pool implementation */
+typedef struct mrb_pool mrb_pool;
+MRB_API struct mrb_pool* mrb_pool_open(mrb_state*);
+MRB_API void mrb_pool_close(struct mrb_pool*);
+MRB_API void* mrb_pool_alloc(struct mrb_pool*, size_t);
+MRB_API void* mrb_pool_realloc(struct mrb_pool*, void*, size_t oldlen, size_t newlen);
+MRB_API mrb_bool mrb_pool_can_realloc(struct mrb_pool*, void*, size_t);
+/* temporary memory allocation, only effective while GC arena is kept */
+MRB_API void* mrb_alloca(mrb_state *mrb, size_t);
+
+MRB_API void mrb_state_atexit(mrb_state *mrb, mrb_atexit_func func);
+
+MRB_API void mrb_show_version(mrb_state *mrb);
+MRB_API void mrb_show_copyright(mrb_state *mrb);
+
+MRB_API mrb_value mrb_format(mrb_state *mrb, const char *format, ...);
+
+#if 0
+/* memcpy and memset does not work with gdb reverse-next on my box */
+/* use naive memcpy and memset instead */
+#undef memcpy
+#undef memset
+static void*
+mrbmemcpy(void *dst, const void *src, size_t n)
+{
+  char *d = (char*)dst;
+  const char *s = (const char*)src;
+  while (n--)
+    *d++ = *s++;
+  return d;
+}
+#define memcpy(a,b,c) mrbmemcpy(a,b,c)
+
+static void*
+mrbmemset(void *s, int c, size_t n)
+{
+  char *t = (char*)s;
+  while (n--)
+    *t++ = c;
+  return s;
+}
+#define memset(a,b,c) mrbmemset(a,b,c)
+#endif
+
+MRB_END_DECL
+
+#endif  /* MRUBY_H */
Index: /EcnlProtoTool/trunk/mruby-2.1.1/include/mruby/array.h
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/include/mruby/array.h	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/include/mruby/array.h	(revision 439)
@@ -0,0 +1,296 @@
+/**
+** @file mruby/array.h - Array class
+**
+** See Copyright Notice in mruby.h
+*/
+
+#ifndef MRUBY_ARRAY_H
+#define MRUBY_ARRAY_H
+
+#include "common.h"
+
+/*
+ * Array class
+ */
+MRB_BEGIN_DECL
+
+
+typedef struct mrb_shared_array {
+  int refcnt;
+  mrb_ssize len;
+  mrb_value *ptr;
+} mrb_shared_array;
+
+#define MRB_ARY_EMBED_LEN_MAX ((mrb_int)(sizeof(void*)*3/sizeof(mrb_value)))
+struct RArray {
+  MRB_OBJECT_HEADER;
+  union {
+    struct {
+      mrb_ssize len;
+      union {
+        mrb_ssize capa;
+        mrb_shared_array *shared;
+      } aux;
+      mrb_value *ptr;
+    } heap;
+    void *ary[3];
+  } as;
+};
+
+#define mrb_ary_ptr(v)    ((struct RArray*)(mrb_ptr(v)))
+#define mrb_ary_value(p)  mrb_obj_value((void*)(p))
+#define RARRAY(v)  ((struct RArray*)(mrb_ptr(v)))
+
+#define MRB_ARY_EMBED_MASK  7
+#define ARY_EMBED_P(a) ((a)->flags & MRB_ARY_EMBED_MASK)
+#define ARY_UNSET_EMBED_FLAG(a) ((a)->flags &= ~(MRB_ARY_EMBED_MASK))
+#define ARY_EMBED_LEN(a) ((mrb_int)(((a)->flags & MRB_ARY_EMBED_MASK) - 1))
+#define ARY_SET_EMBED_LEN(a,len) ((a)->flags = ((a)->flags&~MRB_ARY_EMBED_MASK) | ((uint32_t)(len) + 1))
+#define ARY_EMBED_PTR(a) ((mrb_value*)(&(a)->as.ary))
+
+#define ARY_LEN(a) (ARY_EMBED_P(a)?ARY_EMBED_LEN(a):(a)->as.heap.len)
+#define ARY_PTR(a) (ARY_EMBED_P(a)?ARY_EMBED_PTR(a):(a)->as.heap.ptr)
+#define RARRAY_LEN(a) ARY_LEN(RARRAY(a))
+#define RARRAY_PTR(a) ARY_PTR(RARRAY(a))
+#define ARY_SET_LEN(a,n) do {\
+  if (ARY_EMBED_P(a)) {\
+    mrb_assert((n) <= MRB_ARY_EMBED_LEN_MAX); \
+    ARY_SET_EMBED_LEN(a,n);\
+  }\
+  else\
+    (a)->as.heap.len = (n);\
+} while (0)
+#define ARY_CAPA(a) (ARY_EMBED_P(a)?MRB_ARY_EMBED_LEN_MAX:(a)->as.heap.aux.capa)
+#define MRB_ARY_SHARED      256
+#define ARY_SHARED_P(a) ((a)->flags & MRB_ARY_SHARED)
+#define ARY_SET_SHARED_FLAG(a) ((a)->flags |= MRB_ARY_SHARED)
+#define ARY_UNSET_SHARED_FLAG(a) ((a)->flags &= ~MRB_ARY_SHARED)
+
+void mrb_ary_decref(mrb_state*, mrb_shared_array*);
+MRB_API void mrb_ary_modify(mrb_state*, struct RArray*);
+MRB_API mrb_value mrb_ary_new_capa(mrb_state*, mrb_int);
+
+/*
+ * Initializes a new array.
+ *
+ * Equivalent to:
+ *
+ *      Array.new
+ *
+ * @param mrb The mruby state reference.
+ * @return The initialized array.
+ */
+MRB_API mrb_value mrb_ary_new(mrb_state *mrb);
+
+/*
+ * Initializes a new array with initial values
+ *
+ * Equivalent to:
+ *
+ *      Array[value1, value2, ...]
+ *
+ * @param mrb The mruby state reference.
+ * @param size The numer of values.
+ * @param vals The actual values.
+ * @return The initialized array.
+ */
+MRB_API mrb_value mrb_ary_new_from_values(mrb_state *mrb, mrb_int size, const mrb_value *vals);
+
+/*
+ * Initializes a new array with two initial values
+ *
+ * Equivalent to:
+ *
+ *      Array[car, cdr]
+ *
+ * @param mrb The mruby state reference.
+ * @param car The first value.
+ * @param cdr The second value.
+ * @return The initialized array.
+ */
+MRB_API mrb_value mrb_assoc_new(mrb_state *mrb, mrb_value car, mrb_value cdr);
+
+/*
+ * Concatenate two arrays. The target array will be modified
+ *
+ * Equivalent to:
+ *      ary.concat(other)
+ *
+ * @param mrb The mruby state reference.
+ * @param self The target array.
+ * @param other The array that will be concatenated to self.
+ */
+MRB_API void mrb_ary_concat(mrb_state *mrb, mrb_value self, mrb_value other);
+
+/*
+ * Create an array from the input. It tries calling to_a on the
+ * value. If value does not respond to that, it creates a new
+ * array with just this value.
+ *
+ * @param mrb The mruby state reference.
+ * @param value The value to change into an array.
+ * @return An array representation of value.
+ */
+MRB_API mrb_value mrb_ary_splat(mrb_state *mrb, mrb_value value);
+
+/*
+ * Pushes value into array.
+ *
+ * Equivalent to:
+ *
+ *      ary << value
+ *
+ * @param mrb The mruby state reference.
+ * @param ary The array in which the value will be pushed
+ * @param value The value to be pushed into array
+ */
+MRB_API void mrb_ary_push(mrb_state *mrb, mrb_value array, mrb_value value);
+
+/*
+ * Pops the last element from the array.
+ *
+ * Equivalent to:
+ *
+ *      ary.pop
+ *
+ * @param mrb The mruby state reference.
+ * @param ary The array from which the value will be popped.
+ * @return The popped value.
+ */
+MRB_API mrb_value mrb_ary_pop(mrb_state *mrb, mrb_value ary);
+
+/*
+ * Returns a reference to an element of the array on the given index.
+ *
+ * Equivalent to:
+ *
+ *      ary[n]
+ *
+ * @param mrb The mruby state reference.
+ * @param ary The target array.
+ * @param n The array index being referenced
+ * @return The referenced value.
+ */
+MRB_API mrb_value mrb_ary_ref(mrb_state *mrb, mrb_value ary, mrb_int n);
+
+/*
+ * Sets a value on an array at the given index
+ *
+ * Equivalent to:
+ *
+ *      ary[n] = val
+ *
+ * @param mrb The mruby state reference.
+ * @param ary The target array.
+ * @param n The array index being referenced.
+ * @param val The value being setted.
+ */
+MRB_API void mrb_ary_set(mrb_state *mrb, mrb_value ary, mrb_int n, mrb_value val);
+
+/*
+ * Replace the array with another array
+ *
+ * Equivalent to:
+ *
+ *      ary.replace(other)
+ *
+ * @param mrb The mruby state reference
+ * @param self The target array.
+ * @param other The array to replace it with.
+ */
+MRB_API void mrb_ary_replace(mrb_state *mrb, mrb_value self, mrb_value other);
+MRB_API mrb_value mrb_ensure_array_type(mrb_state *mrb, mrb_value self);
+MRB_API mrb_value mrb_check_array_type(mrb_state *mrb, mrb_value self);
+
+/*
+ * Unshift an element into the array
+ *
+ * Equivalent to:
+ *
+ *     ary.unshift(item)
+ *
+ * @param mrb The mruby state reference.
+ * @param self The target array.
+ * @param item The item to unshift.
+ */
+MRB_API mrb_value mrb_ary_unshift(mrb_state *mrb, mrb_value self, mrb_value item);
+
+/*
+ * Get nth element in the array
+ *
+ * Equivalent to:
+ *
+ *     ary[offset]
+ *
+ * @param ary The target array.
+ * @param offset The element position (negative counts from the tail).
+ */
+MRB_API mrb_value mrb_ary_entry(mrb_value ary, mrb_int offset);
+
+/*
+ * Replace subsequence of an array.
+ *
+ * Equivalent to:
+ *
+ *      ary.shift
+ *
+ * @param mrb The mruby state reference.
+ * @param self The array from which the value will be shifted.
+ * @param head Beginning position of a replacement subsequence.
+ * @param len Length of a replacement subsequence.
+ * @param rpl The array of replacement elements.
+ * @return The receiver array.
+ */
+MRB_API mrb_value mrb_ary_splice(mrb_state *mrb, mrb_value self, mrb_int head, mrb_int len, mrb_value rpl);
+
+/*
+ * Shifts the first element from the array.
+ *
+ * Equivalent to:
+ *
+ *      ary.shift
+ *
+ * @param mrb The mruby state reference.
+ * @param self The array from which the value will be shifted.
+ * @return The shifted value.
+ */
+MRB_API mrb_value mrb_ary_shift(mrb_state *mrb, mrb_value self);
+
+/*
+ * Removes all elements from the array
+ *
+ * Equivalent to:
+ *
+ *      ary.clear
+ *
+ * @param mrb The mruby state reference.
+ * @param self The target array.
+ * @return self
+ */
+MRB_API mrb_value mrb_ary_clear(mrb_state *mrb, mrb_value self);
+
+/*
+ * Join the array elements together in a string
+ *
+ * Equivalent to:
+ *
+ *      ary.join(sep="")
+ *
+ * @param mrb The mruby state reference.
+ * @param ary The target array
+ * @param sep The separater, can be NULL
+ */
+MRB_API mrb_value mrb_ary_join(mrb_state *mrb, mrb_value ary, mrb_value sep);
+
+/*
+ * Update the capacity of the array
+ *
+ * @param mrb The mruby state reference.
+ * @param ary The target array.
+ * @param new_len The new capacity of the array
+ */
+MRB_API mrb_value mrb_ary_resize(mrb_state *mrb, mrb_value ary, mrb_int new_len);
+
+MRB_END_DECL
+
+#endif  /* MRUBY_ARRAY_H */
Index: /EcnlProtoTool/trunk/mruby-2.1.1/include/mruby/boxing_nan.h
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/include/mruby/boxing_nan.h	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/include/mruby/boxing_nan.h	(revision 439)
@@ -0,0 +1,96 @@
+/**
+** @file mruby/boxing_nan.h - nan boxing mrb_value definition
+**
+** See Copyright Notice in mruby.h
+*/
+
+#ifndef MRUBY_BOXING_NAN_H
+#define MRUBY_BOXING_NAN_H
+
+#ifdef MRB_USE_FLOAT
+# error ---->> MRB_NAN_BOXING and MRB_USE_FLOAT conflict <<----
+#endif
+
+#ifdef MRB_WITHOUT_FLOAT
+# error ---->> MRB_NAN_BOXING and MRB_WITHOUT_FLOAT conflict <<----
+#endif
+
+#ifdef MRB_INT64
+# error ---->> MRB_NAN_BOXING and MRB_INT64 conflict <<----
+#endif
+
+#define MRB_FIXNUM_SHIFT 0
+#define MRB_SYMBOL_SHIFT 0
+
+/* value representation by nan-boxing:
+ *   float : FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF
+ *   object: 111111111111TTTT TTPPPPPPPPPPPPPP PPPPPPPPPPPPPPPP PPPPPPPPPPPPPPPP
+ *   int   : 1111111111110001 0000000000000000 IIIIIIIIIIIIIIII IIIIIIIIIIIIIIII
+ *   sym   : 1111111111110001 0100000000000000 SSSSSSSSSSSSSSSS SSSSSSSSSSSSSSSS
+ * In order to get enough bit size to save TT, all pointers are shifted 2 bits
+ * in the right direction. Also, TTTTTT is the mrb_vtype + 1;
+ */
+typedef struct mrb_value {
+  union {
+    mrb_float f;
+    union {
+      void *p;
+      struct {
+        MRB_ENDIAN_LOHI(
+          uint32_t ttt;
+          ,union {
+            mrb_int i;
+            mrb_sym sym;
+          };
+        )
+      };
+    } value;
+  };
+} mrb_value;
+
+#define mrb_float_pool(mrb,f) mrb_float_value(mrb,f)
+
+#define mrb_tt(o)       ((enum mrb_vtype)(((o).value.ttt & 0xfc000)>>14)-1)
+#define mrb_type(o)     (enum mrb_vtype)((uint32_t)0xfff00000 < (o).value.ttt ? mrb_tt(o) : MRB_TT_FLOAT)
+#define mrb_ptr(o)      ((void*)((((uintptr_t)0x3fffffffffff)&((uintptr_t)((o).value.p)))<<2))
+#define mrb_float(o)    (o).f
+#define mrb_cptr(o)     mrb_ptr(o)
+#define mrb_fixnum(o)   (o).value.i
+#define mrb_symbol(o)   (o).value.sym
+
+#ifdef MRB_64BIT
+#define BOXNAN_SHIFT_LONG_POINTER(v) (((uintptr_t)(v)>>34)&0x3fff)
+#else
+#define BOXNAN_SHIFT_LONG_POINTER(v) 0
+#endif
+
+#define BOXNAN_SET_VALUE(o, tt, attr, v) do {\
+  (o).attr = (v);\
+  (o).value.ttt = 0xfff00000 | (((tt)+1)<<14);\
+} while (0)
+
+#define BOXNAN_SET_OBJ_VALUE(o, tt, v) do {\
+  (o).value.p = (void*)((uintptr_t)(v)>>2);\
+  (o).value.ttt = (0xfff00000|(((tt)+1)<<14)|BOXNAN_SHIFT_LONG_POINTER(v));\
+} while (0)
+
+#define SET_FLOAT_VALUE(mrb,r,v) do { \
+  if ((v) != (v)) { \
+    (r).value.ttt = 0x7ff80000; \
+    (r).value.i = 0; \
+  } \
+  else { \
+    (r).f = v; \
+  }} while(0)
+
+#define SET_NIL_VALUE(r) BOXNAN_SET_VALUE(r, MRB_TT_FALSE, value.i, 0)
+#define SET_FALSE_VALUE(r) BOXNAN_SET_VALUE(r, MRB_TT_FALSE, value.i, 1)
+#define SET_TRUE_VALUE(r) BOXNAN_SET_VALUE(r, MRB_TT_TRUE, value.i, 1)
+#define SET_BOOL_VALUE(r,b) BOXNAN_SET_VALUE(r, b ? MRB_TT_TRUE : MRB_TT_FALSE, value.i, 1)
+#define SET_INT_VALUE(r,n) BOXNAN_SET_VALUE(r, MRB_TT_FIXNUM, value.i, (n))
+#define SET_SYM_VALUE(r,v) BOXNAN_SET_VALUE(r, MRB_TT_SYMBOL, value.sym, (v))
+#define SET_OBJ_VALUE(r,v) BOXNAN_SET_OBJ_VALUE(r, (((struct RObject*)(v))->tt), (v))
+#define SET_CPTR_VALUE(mrb,r,v) BOXNAN_SET_OBJ_VALUE(r, MRB_TT_CPTR, v)
+#define SET_UNDEF_VALUE(r) BOXNAN_SET_VALUE(r, MRB_TT_UNDEF, value.i, 0)
+
+#endif  /* MRUBY_BOXING_NAN_H */
Index: /EcnlProtoTool/trunk/mruby-2.1.1/include/mruby/boxing_no.h
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/include/mruby/boxing_no.h	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/include/mruby/boxing_no.h	(revision 439)
@@ -0,0 +1,58 @@
+/**
+** @file mruby/boxing_no.h - unboxed mrb_value definition
+**
+** See Copyright Notice in mruby.h
+*/
+
+#ifndef MRUBY_BOXING_NO_H
+#define MRUBY_BOXING_NO_H
+
+#define MRB_FIXNUM_SHIFT 0
+#define MRB_SYMBOL_SHIFT 0
+
+union mrb_value_union {
+#ifndef MRB_WITHOUT_FLOAT
+  mrb_float f;
+#endif
+  void *p;
+  mrb_int i;
+  mrb_sym sym;
+};
+
+typedef struct mrb_value {
+  union mrb_value_union value;
+  enum mrb_vtype tt;
+} mrb_value;
+
+#ifndef MRB_WITHOUT_FLOAT
+#define mrb_float_pool(mrb,f) mrb_float_value(mrb,f)
+#endif
+
+#define mrb_ptr(o)      (o).value.p
+#define mrb_cptr(o)     mrb_ptr(o)
+#ifndef MRB_WITHOUT_FLOAT
+#define mrb_float(o)    (o).value.f
+#endif
+#define mrb_fixnum(o)   (o).value.i
+#define mrb_symbol(o)   (o).value.sym
+#define mrb_type(o)     (o).tt
+
+#define BOXNIX_SET_VALUE(o, ttt, attr, v) do {\
+  (o).tt = ttt;\
+  (o).attr = v;\
+} while (0)
+
+#define SET_NIL_VALUE(r) BOXNIX_SET_VALUE(r, MRB_TT_FALSE, value.i, 0)
+#define SET_FALSE_VALUE(r) BOXNIX_SET_VALUE(r, MRB_TT_FALSE, value.i, 1)
+#define SET_TRUE_VALUE(r) BOXNIX_SET_VALUE(r, MRB_TT_TRUE, value.i, 1)
+#define SET_BOOL_VALUE(r,b) BOXNIX_SET_VALUE(r, b ? MRB_TT_TRUE : MRB_TT_FALSE, value.i, 1)
+#define SET_INT_VALUE(r,n) BOXNIX_SET_VALUE(r, MRB_TT_FIXNUM, value.i, (n))
+#ifndef MRB_WITHOUT_FLOAT
+#define SET_FLOAT_VALUE(mrb,r,v) BOXNIX_SET_VALUE(r, MRB_TT_FLOAT, value.f, (v))
+#endif
+#define SET_SYM_VALUE(r,v) BOXNIX_SET_VALUE(r, MRB_TT_SYMBOL, value.sym, (v))
+#define SET_OBJ_VALUE(r,v) BOXNIX_SET_VALUE(r, (((struct RObject*)(v))->tt), value.p, (v))
+#define SET_CPTR_VALUE(mrb,r,v) BOXNIX_SET_VALUE(r, MRB_TT_CPTR, value.p, v)
+#define SET_UNDEF_VALUE(r) BOXNIX_SET_VALUE(r, MRB_TT_UNDEF, value.i, 0)
+
+#endif  /* MRUBY_BOXING_NO_H */
Index: /EcnlProtoTool/trunk/mruby-2.1.1/include/mruby/boxing_word.h
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/include/mruby/boxing_word.h	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/include/mruby/boxing_word.h	(revision 439)
@@ -0,0 +1,180 @@
+/**
+** @file mruby/boxing_word.h - word boxing mrb_value definition
+**
+** See Copyright Notice in mruby.h
+*/
+
+#ifndef MRUBY_BOXING_WORD_H
+#define MRUBY_BOXING_WORD_H
+
+#if defined(MRB_INT64) && !defined(MRB_64BIT)
+#error MRB_INT64 cannot be used with MRB_WORD_BOXING in 32-bit mode.
+#endif
+
+#ifndef MRB_WITHOUT_FLOAT
+struct RFloat {
+  MRB_OBJECT_HEADER;
+  mrb_float f;
+};
+#endif
+
+struct RCptr {
+  MRB_OBJECT_HEADER;
+  void *p;
+};
+
+enum mrb_special_consts {
+  MRB_Qnil    =  0,
+  MRB_Qfalse  =  4,
+  MRB_Qtrue   = 12,
+  MRB_Qundef  = 20,
+};
+
+#if defined(MRB_64BIT) && defined(MRB_INT32)
+#define MRB_FIXNUM_SHIFT        0
+#else
+#define MRB_FIXNUM_SHIFT        BOXWORD_FIXNUM_SHIFT
+#endif
+#define MRB_SYMBOL_SHIFT        BOXWORD_SYMBOL_SHIFT
+
+#define BOXWORD_FIXNUM_BIT_POS  1
+#define BOXWORD_SYMBOL_BIT_POS  2
+#define BOXWORD_FIXNUM_SHIFT    BOXWORD_FIXNUM_BIT_POS
+#ifdef MRB_64BIT
+#define BOXWORD_SYMBOL_SHIFT    0
+#else
+#define BOXWORD_SYMBOL_SHIFT    BOXWORD_SYMBOL_BIT_POS
+#endif
+#define BOXWORD_FIXNUM_FLAG     (1 << (BOXWORD_FIXNUM_BIT_POS - 1))
+#define BOXWORD_SYMBOL_FLAG     (1 << (BOXWORD_SYMBOL_BIT_POS - 1))
+#define BOXWORD_FIXNUM_MASK     ((1 << BOXWORD_FIXNUM_BIT_POS) - 1)
+#define BOXWORD_SYMBOL_MASK     ((1 << BOXWORD_SYMBOL_BIT_POS) - 1)
+#define BOXWORD_IMMEDIATE_MASK  0x07
+
+#define BOXWORD_SHIFT_VALUE(o,n,t) \
+  (t)(((long)(o).w) >> BOXWORD_##n##_SHIFT)
+#define BOXWORD_SET_SHIFT_VALUE(o,n,v) \
+  ((o).w = (((unsigned long)(v)) << BOXWORD_##n##_SHIFT) | BOXWORD_##n##_FLAG)
+#define BOXWORD_SHIFT_VALUE_P(o,n) \
+  (((o).w & BOXWORD_##n##_MASK) == BOXWORD_##n##_FLAG)
+#define BOXWORD_OBJ_TYPE_P(o,n) \
+  (!mrb_immediate_p(o) && (o).value.bp->tt == MRB_TT_##n)
+
+/*
+ * mrb_value representation:
+ *
+ *   nil   : ...0000 0000 (all bits are 0)
+ *   false : ...0000 0100 (mrb_fixnum(v) != 0)
+ *   true  : ...0000 1100
+ *   undef : ...0001 0100
+ *   fixnum: ...IIII III1
+ *   symbol: ...SSSS SS10 (use only upper 32-bit as symbol value on 64-bit CPU)
+ *   object: ...PPPP P000 (any bits are 1)
+ */
+typedef union mrb_value {
+  union {
+    void *p;
+#ifdef MRB_64BIT
+    /* use struct to avoid bit shift. */
+    struct {
+      MRB_ENDIAN_LOHI(
+        mrb_sym sym;
+        ,uint32_t sym_flag;
+      )
+    };
+#endif
+    struct RBasic *bp;
+#ifndef MRB_WITHOUT_FLOAT
+    struct RFloat *fp;
+#endif
+    struct RCptr *vp;
+  } value;
+  unsigned long w;
+} mrb_value;
+
+MRB_API mrb_value mrb_word_boxing_cptr_value(struct mrb_state*, void*);
+#ifndef MRB_WITHOUT_FLOAT
+MRB_API mrb_value mrb_word_boxing_float_value(struct mrb_state*, mrb_float);
+MRB_API mrb_value mrb_word_boxing_float_pool(struct mrb_state*, mrb_float);
+#endif
+
+#ifndef MRB_WITHOUT_FLOAT
+#define mrb_float_pool(mrb,f) mrb_word_boxing_float_pool(mrb,f)
+#endif
+
+#define mrb_ptr(o)     (o).value.p
+#define mrb_cptr(o)    (o).value.vp->p
+#ifndef MRB_WITHOUT_FLOAT
+#define mrb_float(o)   (o).value.fp->f
+#endif
+#define mrb_fixnum(o)  BOXWORD_SHIFT_VALUE(o, FIXNUM, mrb_int)
+#ifdef MRB_64BIT
+#define mrb_symbol(o)  (o).value.sym
+#else
+#define mrb_symbol(o)  BOXWORD_SHIFT_VALUE(o, SYMBOL, mrb_sym)
+#endif
+#define mrb_bool(o)    (((o).w & ~(unsigned long)MRB_Qfalse) != 0)
+
+#define mrb_immediate_p(o) ((o).w & BOXWORD_IMMEDIATE_MASK || (o).w == MRB_Qnil)
+#define mrb_fixnum_p(o) BOXWORD_SHIFT_VALUE_P(o, FIXNUM)
+#ifdef MRB_64BIT
+#define mrb_symbol_p(o) ((o).value.sym_flag == BOXWORD_SYMBOL_FLAG)
+#else
+#define mrb_symbol_p(o) BOXWORD_SHIFT_VALUE_P(o, SYMBOL)
+#endif
+#define mrb_undef_p(o) ((o).w == MRB_Qundef)
+#define mrb_nil_p(o)  ((o).w == MRB_Qnil)
+#define mrb_false_p(o) ((o).w == MRB_Qfalse)
+#define mrb_true_p(o)  ((o).w == MRB_Qtrue)
+#ifndef MRB_WITHOUT_FLOAT
+#define mrb_float_p(o) BOXWORD_OBJ_TYPE_P(o, FLOAT)
+#endif
+#define mrb_array_p(o) BOXWORD_OBJ_TYPE_P(o, ARRAY)
+#define mrb_string_p(o) BOXWORD_OBJ_TYPE_P(o, STRING)
+#define mrb_hash_p(o) BOXWORD_OBJ_TYPE_P(o, HASH)
+#define mrb_cptr_p(o) BOXWORD_OBJ_TYPE_P(o, CPTR)
+#define mrb_exception_p(o) BOXWORD_OBJ_TYPE_P(o, EXCEPTION)
+#define mrb_free_p(o) BOXWORD_OBJ_TYPE_P(o, FREE)
+#define mrb_object_p(o) BOXWORD_OBJ_TYPE_P(o, OBJECT)
+#define mrb_class_p(o) BOXWORD_OBJ_TYPE_P(o, CLASS)
+#define mrb_module_p(o) BOXWORD_OBJ_TYPE_P(o, MODULE)
+#define mrb_iclass_p(o) BOXWORD_OBJ_TYPE_P(o, ICLASS)
+#define mrb_sclass_p(o) BOXWORD_OBJ_TYPE_P(o, SCLASS)
+#define mrb_proc_p(o) BOXWORD_OBJ_TYPE_P(o, PROC)
+#define mrb_range_p(o) BOXWORD_OBJ_TYPE_P(o, RANGE)
+#define mrb_file_p(o) BOXWORD_OBJ_TYPE_P(o, FILE)
+#define mrb_env_p(o) BOXWORD_OBJ_TYPE_P(o, ENV)
+#define mrb_data_p(o) BOXWORD_OBJ_TYPE_P(o, DATA)
+#define mrb_fiber_p(o) BOXWORD_OBJ_TYPE_P(o, FIBER)
+#define mrb_istruct_p(o) BOXWORD_OBJ_TYPE_P(o, ISTRUCT)
+#define mrb_break_p(o) BOXWORD_OBJ_TYPE_P(o, BREAK)
+
+#ifndef MRB_WITHOUT_FLOAT
+#define SET_FLOAT_VALUE(mrb,r,v) ((r) = mrb_word_boxing_float_value(mrb, v))
+#endif
+#define SET_CPTR_VALUE(mrb,r,v) ((r) = mrb_word_boxing_cptr_value(mrb, v))
+#define SET_UNDEF_VALUE(r) ((r).w = MRB_Qundef)
+#define SET_NIL_VALUE(r) ((r).w = MRB_Qnil)
+#define SET_FALSE_VALUE(r) ((r).w = MRB_Qfalse)
+#define SET_TRUE_VALUE(r) ((r).w = MRB_Qtrue)
+#define SET_BOOL_VALUE(r,b) ((b) ? SET_TRUE_VALUE(r) : SET_FALSE_VALUE(r))
+#define SET_INT_VALUE(r,n) BOXWORD_SET_SHIFT_VALUE(r, FIXNUM, n)
+#ifdef MRB_64BIT
+#define SET_SYM_VALUE(r,v) ((r).value.sym = v, (r).value.sym_flag = BOXWORD_SYMBOL_FLAG)
+#else
+#define SET_SYM_VALUE(r,n) BOXWORD_SET_SHIFT_VALUE(r, SYMBOL, n)
+#endif
+#define SET_OBJ_VALUE(r,v) ((r).value.p = v)
+
+MRB_INLINE enum mrb_vtype
+mrb_type(mrb_value o)
+{
+  return !mrb_bool(o)    ? MRB_TT_FALSE :
+         mrb_true_p(o)   ? MRB_TT_TRUE :
+         mrb_fixnum_p(o) ? MRB_TT_FIXNUM :
+         mrb_symbol_p(o) ? MRB_TT_SYMBOL :
+         mrb_undef_p(o)  ? MRB_TT_UNDEF :
+         o.value.bp->tt;
+}
+
+#endif  /* MRUBY_BOXING_WORD_H */
Index: /EcnlProtoTool/trunk/mruby-2.1.1/include/mruby/class.h
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/include/mruby/class.h	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/include/mruby/class.h	(revision 439)
@@ -0,0 +1,106 @@
+/**
+** @file mruby/class.h - Class class
+**
+** See Copyright Notice in mruby.h
+*/
+
+#ifndef MRUBY_CLASS_H
+#define MRUBY_CLASS_H
+
+#include "common.h"
+
+/**
+ * Class class
+ */
+MRB_BEGIN_DECL
+
+struct RClass {
+  MRB_OBJECT_HEADER;
+  struct iv_tbl *iv;
+  struct kh_mt *mt;
+  struct RClass *super;
+};
+
+#define mrb_class_ptr(v)    ((struct RClass*)(mrb_ptr(v)))
+
+MRB_INLINE struct RClass*
+mrb_class(mrb_state *mrb, mrb_value v)
+{
+  switch (mrb_type(v)) {
+  case MRB_TT_FALSE:
+    if (mrb_fixnum(v))
+      return mrb->false_class;
+    return mrb->nil_class;
+  case MRB_TT_TRUE:
+    return mrb->true_class;
+  case MRB_TT_SYMBOL:
+    return mrb->symbol_class;
+  case MRB_TT_FIXNUM:
+    return mrb->fixnum_class;
+#ifndef MRB_WITHOUT_FLOAT
+  case MRB_TT_FLOAT:
+    return mrb->float_class;
+#endif
+  case MRB_TT_CPTR:
+    return mrb->object_class;
+  case MRB_TT_ENV:
+    return NULL;
+  default:
+    return mrb_obj_ptr(v)->c;
+  }
+}
+
+/* flags:
+   20: frozen
+   19: is_prepended
+   18: is_origin
+   17: is_inherited (used by method cache)
+   16: unused
+   0-15: instance type
+*/
+#define MRB_FL_CLASS_IS_PREPENDED (1 << 19)
+#define MRB_FL_CLASS_IS_ORIGIN (1 << 18)
+#define MRB_CLASS_ORIGIN(c) do {\
+  if ((c)->flags & MRB_FL_CLASS_IS_PREPENDED) {\
+    (c) = (c)->super;\
+    while (!((c)->flags & MRB_FL_CLASS_IS_ORIGIN)) {\
+      (c) = (c)->super;\
+    }\
+  }\
+} while (0)
+#define MRB_FL_CLASS_IS_INHERITED (1 << 17)
+#define MRB_INSTANCE_TT_MASK (0xFF)
+#define MRB_SET_INSTANCE_TT(c, tt) ((c)->flags = (((c)->flags & ~MRB_INSTANCE_TT_MASK) | (char)(tt)))
+#define MRB_INSTANCE_TT(c) (enum mrb_vtype)((c)->flags & MRB_INSTANCE_TT_MASK)
+
+MRB_API struct RClass* mrb_define_class_id(mrb_state*, mrb_sym, struct RClass*);
+MRB_API struct RClass* mrb_define_module_id(mrb_state*, mrb_sym);
+struct RClass *mrb_vm_define_class(mrb_state*, mrb_value, mrb_value, mrb_sym);
+struct RClass *mrb_vm_define_module(mrb_state*, mrb_value, mrb_sym);
+MRB_API void mrb_define_method_raw(mrb_state*, struct RClass*, mrb_sym, mrb_method_t);
+MRB_API void mrb_define_method_id(mrb_state *mrb, struct RClass *c, mrb_sym mid, mrb_func_t func, mrb_aspec aspec);
+MRB_API void mrb_alias_method(mrb_state*, struct RClass *c, mrb_sym a, mrb_sym b);
+
+MRB_API mrb_method_t mrb_method_search_vm(mrb_state*, struct RClass**, mrb_sym);
+MRB_API mrb_method_t mrb_method_search(mrb_state*, struct RClass*, mrb_sym);
+
+MRB_API struct RClass* mrb_class_real(struct RClass* cl);
+mrb_value mrb_instance_new(mrb_state *mrb, mrb_value cv);
+
+void mrb_class_name_class(mrb_state*, struct RClass*, struct RClass*, mrb_sym);
+mrb_bool mrb_const_name_p(mrb_state*, const char*, mrb_int);
+mrb_value mrb_class_find_path(mrb_state*, struct RClass*);
+mrb_value mrb_mod_to_s(mrb_state*, mrb_value);
+void mrb_gc_mark_mt(mrb_state*, struct RClass*);
+size_t mrb_gc_mark_mt_size(mrb_state*, struct RClass*);
+void mrb_gc_free_mt(mrb_state*, struct RClass*);
+
+#ifdef MRB_METHOD_CACHE
+void mrb_mc_clear_by_class(mrb_state *mrb, struct RClass* c);
+#else
+#define mrb_mc_clear_by_class(mrb,c)
+#endif
+
+MRB_END_DECL
+
+#endif  /* MRUBY_CLASS_H */
Index: /EcnlProtoTool/trunk/mruby-2.1.1/include/mruby/common.h
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/include/mruby/common.h	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/include/mruby/common.h	(revision 439)
@@ -0,0 +1,89 @@
+/**
+** @file common.h - mruby common platform definition"
+**
+** See Copyright Notice in mruby.h
+*/
+
+#ifndef MRUBY_COMMON_H
+#define MRUBY_COMMON_H
+
+#ifdef __APPLE__
+  #ifndef __TARGETCONDITIONALS__
+  #include "TargetConditionals.h"
+  #endif
+#endif
+
+#ifdef __cplusplus
+#ifdef MRB_ENABLE_CXX_ABI
+#define MRB_BEGIN_DECL
+#define MRB_END_DECL
+#else
+# define MRB_BEGIN_DECL extern "C" {
+# define MRB_END_DECL }
+#endif
+#else
+/** Start declarations in C mode */
+# define MRB_BEGIN_DECL
+/** End declarations in C mode */
+# define MRB_END_DECL
+#endif
+
+/**
+ * Shared compiler macros
+ */
+MRB_BEGIN_DECL
+
+/** Declare a function that never returns. */
+#if defined __STDC_VERSION__ && __STDC_VERSION__ >= 201112L
+# define mrb_noreturn _Noreturn
+#elif defined __GNUC__ && !defined __STRICT_ANSI__
+# define mrb_noreturn __attribute__((noreturn))
+#elif defined _MSC_VER
+# define mrb_noreturn __declspec(noreturn)
+#else
+# define mrb_noreturn
+#endif
+
+/** Mark a function as deprecated. */
+#if defined __GNUC__ && !defined __STRICT_ANSI__
+# define mrb_deprecated __attribute__((deprecated))
+#elif defined _MSC_VER
+# define mrb_deprecated __declspec(deprecated)
+#else
+# define mrb_deprecated
+#endif
+
+/** Declare a function as always inlined. */
+#if defined _MSC_VER && _MSC_VER < 1900
+# ifndef __cplusplus
+#  define inline __inline
+# endif
+#endif
+#define MRB_INLINE static inline
+
+/** Declare a public MRuby API function. */
+#ifndef MRB_API
+#if defined(MRB_BUILD_AS_DLL)
+#if defined(MRB_CORE) || defined(MRB_LIB)
+# define MRB_API __declspec(dllexport)
+#else
+# define MRB_API __declspec(dllimport)
+#endif
+#else
+# define MRB_API extern
+#endif
+#endif
+
+/** Declare mingw versions */
+#if defined(__MINGW32__) || defined(__MINGW64__)
+# include <_mingw.h>
+# if defined(__MINGW64_VERSION_MAJOR)
+#  define MRB_MINGW64_VERSION  (__MINGW64_VERSION_MAJOR * 1000 + __MINGW64_VERSION_MINOR)
+# elif defined(__MINGW32_MAJOR_VERSION)
+#  define MRB_MINGW32_VERSION  (__MINGW32_MAJOR_VERSION * 1000 + __MINGW32_MINOR_VERSION)
+# endif
+#endif
+
+MRB_END_DECL
+
+#endif  /* MRUBY_COMMON_H */
Index: /EcnlProtoTool/trunk/mruby-2.1.1/include/mruby/compile.h
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/include/mruby/compile.h	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/include/mruby/compile.h	(revision 439)
@@ -0,0 +1,196 @@
+/**
+** @file mruby/compile.h - mruby parser
+**
+** See Copyright Notice in mruby.h
+*/
+
+#ifndef MRUBY_COMPILE_H
+#define MRUBY_COMPILE_H
+
+#include "common.h"
+
+/**
+ * MRuby Compiler
+ */
+MRB_BEGIN_DECL
+
+#include <mruby.h>
+
+struct mrb_jmpbuf;
+
+struct mrb_parser_state;
+/* load context */
+typedef struct mrbc_context {
+  mrb_sym *syms;
+  int slen;
+  char *filename;
+  uint16_t lineno;
+  int (*partial_hook)(struct mrb_parser_state*);
+  void *partial_data;
+  struct RClass *target_class;
+  mrb_bool capture_errors:1;
+  mrb_bool dump_result:1;
+  mrb_bool no_exec:1;
+  mrb_bool keep_lv:1;
+  mrb_bool no_optimize:1;
+  mrb_bool on_eval:1;
+
+  size_t parser_nerr;
+} mrbc_context;
+
+MRB_API mrbc_context* mrbc_context_new(mrb_state *mrb);
+MRB_API void mrbc_context_free(mrb_state *mrb, mrbc_context *cxt);
+MRB_API const char *mrbc_filename(mrb_state *mrb, mrbc_context *c, const char *s);
+MRB_API void mrbc_partial_hook(mrb_state *mrb, mrbc_context *c, int (*partial_hook)(struct mrb_parser_state*), void*data);
+
+/* AST node structure */
+typedef struct mrb_ast_node {
+  struct mrb_ast_node *car, *cdr;
+  uint16_t lineno, filename_index;
+} mrb_ast_node;
+
+/* lexer states */
+enum mrb_lex_state_enum {
+  EXPR_BEG,                   /* ignore newline, +/- is a sign. */
+  EXPR_END,                   /* newline significant, +/- is an operator. */
+  EXPR_ENDARG,                /* ditto, and unbound braces. */
+  EXPR_ENDFN,                 /* ditto, and unbound braces. */
+  EXPR_ARG,                   /* newline significant, +/- is an operator. */
+  EXPR_CMDARG,                /* newline significant, +/- is an operator. */
+  EXPR_MID,                   /* newline significant, +/- is an operator. */
+  EXPR_FNAME,                 /* ignore newline, no reserved words. */
+  EXPR_DOT,                   /* right after '.' or '::', no reserved words. */
+  EXPR_CLASS,                 /* immediate after 'class', no here document. */
+  EXPR_VALUE,                 /* alike EXPR_BEG but label is disallowed. */
+  EXPR_MAX_STATE
+};
+
+/* saved error message */
+struct mrb_parser_message {
+  uint16_t lineno;
+  int column;
+  char* message;
+};
+
+#define STR_FUNC_PARSING 0x01
+#define STR_FUNC_EXPAND  0x02
+#define STR_FUNC_REGEXP  0x04
+#define STR_FUNC_WORD    0x08
+#define STR_FUNC_SYMBOL  0x10
+#define STR_FUNC_ARRAY   0x20
+#define STR_FUNC_HEREDOC 0x40
+#define STR_FUNC_XQUOTE  0x80
+
+enum mrb_string_type {
+  str_not_parsing  = (0),
+  str_squote   = (STR_FUNC_PARSING),
+  str_dquote   = (STR_FUNC_PARSING|STR_FUNC_EXPAND),
+  str_regexp   = (STR_FUNC_PARSING|STR_FUNC_REGEXP|STR_FUNC_EXPAND),
+  str_sword    = (STR_FUNC_PARSING|STR_FUNC_WORD|STR_FUNC_ARRAY),
+  str_dword    = (STR_FUNC_PARSING|STR_FUNC_WORD|STR_FUNC_ARRAY|STR_FUNC_EXPAND),
+  str_ssym     = (STR_FUNC_PARSING|STR_FUNC_SYMBOL),
+  str_ssymbols = (STR_FUNC_PARSING|STR_FUNC_SYMBOL|STR_FUNC_ARRAY),
+  str_dsymbols = (STR_FUNC_PARSING|STR_FUNC_SYMBOL|STR_FUNC_ARRAY|STR_FUNC_EXPAND),
+  str_heredoc  = (STR_FUNC_PARSING|STR_FUNC_HEREDOC),
+  str_xquote   = (STR_FUNC_PARSING|STR_FUNC_XQUOTE|STR_FUNC_EXPAND),
+};
+
+/* heredoc structure */
+struct mrb_parser_heredoc_info {
+  mrb_bool allow_indent:1;
+  mrb_bool line_head:1;
+  enum mrb_string_type type;
+  const char *term;
+  int term_len;
+  mrb_ast_node *doc;
+};
+
+#define MRB_PARSER_TOKBUF_MAX (UINT16_MAX-1)
+#define MRB_PARSER_TOKBUF_SIZE 256
+
+/* parser structure */
+struct mrb_parser_state {
+  mrb_state *mrb;
+  struct mrb_pool *pool;
+  mrb_ast_node *cells;
+  const char *s, *send;
+#ifndef MRB_DISABLE_STDIO
+  FILE *f;
+#endif
+  mrbc_context *cxt;
+  mrb_sym filename_sym;
+  uint16_t lineno;
+  int column;
+
+  enum mrb_lex_state_enum lstate;
+  mrb_ast_node *lex_strterm; /* (type nest_level beg . end) */
+
+  unsigned int cond_stack;
+  unsigned int cmdarg_stack;
+  int paren_nest;
+  int lpar_beg;
+  int in_def, in_single;
+  mrb_bool cmd_start:1;
+  mrb_ast_node *locals;
+
+  mrb_ast_node *pb;
+  char *tokbuf;
+  char buf[MRB_PARSER_TOKBUF_SIZE];
+  int tidx;
+  int tsiz;
+
+  mrb_ast_node *all_heredocs; /* list of mrb_parser_heredoc_info* */
+  mrb_ast_node *heredocs_from_nextline;
+  mrb_ast_node *parsing_heredoc;
+  mrb_ast_node *lex_strterm_before_heredoc;
+
+  void *ylval;
+
+  size_t nerr;
+  size_t nwarn;
+  mrb_ast_node *tree;
+
+  mrb_bool no_optimize:1;
+  mrb_bool on_eval:1;
+  mrb_bool capture_errors:1;
+  struct mrb_parser_message error_buffer[10];
+  struct mrb_parser_message warn_buffer[10];
+
+  mrb_sym* filename_table;
+  uint16_t filename_table_length;
+  uint16_t current_filename_index;
+
+  struct mrb_jmpbuf* jmp;
+  mrb_ast_node *nvars;
+};
+
+MRB_API struct mrb_parser_state* mrb_parser_new(mrb_state*);
+MRB_API void mrb_parser_free(struct mrb_parser_state*);
+MRB_API void mrb_parser_parse(struct mrb_parser_state*,mrbc_context*);
+
+MRB_API void mrb_parser_set_filename(struct mrb_parser_state*, char const*);
+MRB_API mrb_sym mrb_parser_get_filename(struct mrb_parser_state*, uint16_t idx);
+
+/* utility functions */
+#ifndef MRB_DISABLE_STDIO
+MRB_API struct mrb_parser_state* mrb_parse_file(mrb_state*,FILE*,mrbc_context*);
+#endif
+MRB_API struct mrb_parser_state* mrb_parse_string(mrb_state*,const char*,mrbc_context*);
+MRB_API struct mrb_parser_state* mrb_parse_nstring(mrb_state*,const char*,size_t,mrbc_context*);
+MRB_API struct RProc* mrb_generate_code(mrb_state*, struct mrb_parser_state*);
+MRB_API mrb_value mrb_load_exec(mrb_state *mrb, struct mrb_parser_state *p, mrbc_context *c);
+
+/* program load functions */
+#ifndef MRB_DISABLE_STDIO
+MRB_API mrb_value mrb_load_file(mrb_state*,FILE*);
+MRB_API mrb_value mrb_load_file_cxt(mrb_state*,FILE*, mrbc_context *cxt);
+#endif
+MRB_API mrb_value mrb_load_string(mrb_state *mrb, const char *s);
+MRB_API mrb_value mrb_load_nstring(mrb_state *mrb, const char *s, size_t len);
+MRB_API mrb_value mrb_load_string_cxt(mrb_state *mrb, const char *s, mrbc_context *cxt);
+MRB_API mrb_value mrb_load_nstring_cxt(mrb_state *mrb, const char *s, size_t len, mrbc_context *cxt);
+
+/** @} */
+MRB_END_DECL
+
+#endif /* MRUBY_COMPILE_H */
Index: /EcnlProtoTool/trunk/mruby-2.1.1/include/mruby/data.h
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/include/mruby/data.h	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/include/mruby/data.h	(revision 439)
@@ -0,0 +1,76 @@
+/**
+** @file mruby/data.h - Data class
+**
+** See Copyright Notice in mruby.h
+*/
+
+#ifndef MRUBY_DATA_H
+#define MRUBY_DATA_H
+
+#include "common.h"
+
+/**
+ * Custom C wrapped data.
+ *
+ * Defining Ruby wrappers around native objects.
+ */
+MRB_BEGIN_DECL
+
+/**
+ * Custom data type description.
+ */
+typedef struct mrb_data_type {
+  /** data type name */
+  const char *struct_name;
+
+  /** data type release function pointer */
+  void (*dfree)(mrb_state *mrb, void*);
+} mrb_data_type;
+
+struct RData {
+  MRB_OBJECT_HEADER;
+  struct iv_tbl *iv;
+  const mrb_data_type *type;
+  void *data;
+};
+
+MRB_API struct RData *mrb_data_object_alloc(mrb_state *mrb, struct RClass* klass, void *datap, const mrb_data_type *type);
+
+#define Data_Wrap_Struct(mrb,klass,type,ptr)\
+  mrb_data_object_alloc(mrb,klass,ptr,type)
+
+#define Data_Make_Struct(mrb,klass,strct,type,sval,data_obj) do { \
+  (data_obj) = Data_Wrap_Struct(mrb,klass,type,NULL);\
+  (sval) = (strct *)mrb_malloc(mrb, sizeof(strct));                     \
+  { static const strct zero = { 0 }; *(sval) = zero; };\
+  (data_obj)->data = (sval);\
+} while (0)
+
+#define RDATA(obj)         ((struct RData *)(mrb_ptr(obj)))
+#define DATA_PTR(d)        (RDATA(d)->data)
+#define DATA_TYPE(d)       (RDATA(d)->type)
+MRB_API void mrb_data_check_type(mrb_state *mrb, mrb_value, const mrb_data_type*);
+MRB_API void *mrb_data_get_ptr(mrb_state *mrb, mrb_value, const mrb_data_type*);
+#define DATA_GET_PTR(mrb,obj,dtype,type) (type*)mrb_data_get_ptr(mrb,obj,dtype)
+MRB_API void *mrb_data_check_get_ptr(mrb_state *mrb, mrb_value, const mrb_data_type*);
+#define DATA_CHECK_GET_PTR(mrb,obj,dtype,type) (type*)mrb_data_check_get_ptr(mrb,obj,dtype)
+
+/* obsolete functions and macros */
+#define mrb_data_check_and_get(mrb,obj,dtype) mrb_data_get_ptr(mrb,obj,dtype)
+#define mrb_get_datatype(mrb,val,type) mrb_data_get_ptr(mrb, val, type)
+#define mrb_check_datatype(mrb,val,type) mrb_data_get_ptr(mrb, val, type)
+#define Data_Get_Struct(mrb,obj,type,sval) do {\
+  *(void**)&sval = mrb_data_get_ptr(mrb, obj, type); \
+} while (0)
+
+MRB_INLINE void
+mrb_data_init(mrb_value v, void *ptr, const mrb_data_type *type)
+{
+  mrb_assert(mrb_data_p(v));
+  DATA_PTR(v) = ptr;
+  DATA_TYPE(v) = type;
+}
+
+MRB_END_DECL
+
+#endif /* MRUBY_DATA_H */
Index: /EcnlProtoTool/trunk/mruby-2.1.1/include/mruby/debug.h
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/include/mruby/debug.h	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/include/mruby/debug.h	(revision 439)
@@ -0,0 +1,66 @@
+/**
+** @file mruby/debug.h - mruby debug info
+**
+** See Copyright Notice in mruby.h
+*/
+
+#ifndef MRUBY_DEBUG_H
+#define MRUBY_DEBUG_H
+
+#include "common.h"
+
+/**
+ * MRuby Debugging.
+ */
+MRB_BEGIN_DECL
+
+typedef enum mrb_debug_line_type {
+  mrb_debug_line_ary = 0,
+  mrb_debug_line_flat_map = 1
+} mrb_debug_line_type;
+
+typedef struct mrb_irep_debug_info_line {
+  uint32_t start_pos;
+  uint16_t line;
+} mrb_irep_debug_info_line;
+
+typedef struct mrb_irep_debug_info_file {
+  uint32_t start_pos;
+  mrb_sym filename_sym;
+  uint32_t line_entry_count;
+  mrb_debug_line_type line_type;
+  union {
+    void *ptr;
+    mrb_irep_debug_info_line *flat_map;
+    uint16_t *ary;
+  } lines;
+} mrb_irep_debug_info_file;
+
+typedef struct mrb_irep_debug_info {
+  uint32_t pc_count;
+  uint16_t flen;
+  mrb_irep_debug_info_file **files;
+} mrb_irep_debug_info;
+
+/*
+ * get line from irep's debug info and program counter
+ * @return returns NULL if not found
+ */
+MRB_API const char *mrb_debug_get_filename(mrb_state *mrb, mrb_irep *irep, ptrdiff_t pc);
+
+/*
+ * get line from irep's debug info and program counter
+ * @return returns -1 if not found
+ */
+MRB_API int32_t mrb_debug_get_line(mrb_state *mrb, mrb_irep *irep, ptrdiff_t pc);
+
+MRB_API mrb_irep_debug_info *mrb_debug_info_alloc(mrb_state *mrb, mrb_irep *irep);
+MRB_API mrb_irep_debug_info_file *mrb_debug_info_append_file(
+    mrb_state *mrb, mrb_irep_debug_info *info,
+    const char *filename, uint16_t *lines,
+    uint32_t start_pos, uint32_t end_pos);
+MRB_API void mrb_debug_info_free(mrb_state *mrb, mrb_irep_debug_info *d);
+
+MRB_END_DECL
+
+#endif /* MRUBY_DEBUG_H */
Index: /EcnlProtoTool/trunk/mruby-2.1.1/include/mruby/dump.h
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/include/mruby/dump.h	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/include/mruby/dump.h	(revision 439)
@@ -0,0 +1,192 @@
+/**
+** @file mruby/dump.h - mruby binary dumper (mrbc binary format)
+**
+** See Copyright Notice in mruby.h
+*/
+
+#ifndef MRUBY_DUMP_H
+#define MRUBY_DUMP_H
+
+#include <mruby.h>
+#include <mruby/irep.h>
+#include "common.h"
+
+/**
+ * Dumping compiled mruby script.
+ */
+MRB_BEGIN_DECL
+
+#define DUMP_DEBUG_INFO 1
+#define DUMP_ENDIAN_BIG 2
+#define DUMP_ENDIAN_LIL 4
+#define DUMP_ENDIAN_NAT 6
+#define DUMP_ENDIAN_MASK 6
+
+int mrb_dump_irep(mrb_state *mrb, mrb_irep *irep, uint8_t flags, uint8_t **bin, size_t *bin_size);
+#ifndef MRB_DISABLE_STDIO
+int mrb_dump_irep_binary(mrb_state*, mrb_irep*, uint8_t, FILE*);
+int mrb_dump_irep_cfunc(mrb_state *mrb, mrb_irep*, uint8_t flags, FILE *f, const char *initname);
+mrb_irep *mrb_read_irep_file(mrb_state*, FILE*);
+MRB_API mrb_value mrb_load_irep_file(mrb_state*,FILE*);
+MRB_API mrb_value mrb_load_irep_file_cxt(mrb_state*, FILE*, mrbc_context*);
+#endif
+MRB_API mrb_irep *mrb_read_irep(mrb_state*, const uint8_t*);
+MRB_API mrb_irep *mrb_read_irep_buf(mrb_state*, const void*, size_t);
+
+/* dump/load error code
+ *
+ * NOTE: MRB_DUMP_GENERAL_FAILURE is caused by
+ * unspecified issues like malloc failed.
+ */
+#define MRB_DUMP_OK                     0
+#define MRB_DUMP_GENERAL_FAILURE      (-1)
+#define MRB_DUMP_WRITE_FAULT          (-2)
+#define MRB_DUMP_READ_FAULT           (-3)
+#define MRB_DUMP_CRC_ERROR            (-4)
+#define MRB_DUMP_INVALID_FILE_HEADER  (-5)
+#define MRB_DUMP_INVALID_IREP         (-6)
+#define MRB_DUMP_INVALID_ARGUMENT     (-7)
+
+/* null symbol length */
+#define MRB_DUMP_NULL_SYM_LEN         0xFFFF
+
+/* Rite Binary File header */
+#define RITE_BINARY_IDENT              "RITE"
+#define RITE_BINARY_IDENT_LIL          "ETIR"
+#define RITE_BINARY_FORMAT_VER         "0006"
+#define RITE_COMPILER_NAME             "MATZ"
+#define RITE_COMPILER_VERSION          "0000"
+
+#define RITE_VM_VER                    "0002"
+
+#define RITE_BINARY_EOF                "END\0"
+#define RITE_SECTION_IREP_IDENT        "IREP"
+#define RITE_SECTION_DEBUG_IDENT       "DBG\0"
+#define RITE_SECTION_LV_IDENT          "LVAR"
+
+#define MRB_DUMP_DEFAULT_STR_LEN      128
+#define MRB_DUMP_ALIGNMENT            sizeof(uint32_t)
+
+/* binary header */
+struct rite_binary_header {
+  uint8_t binary_ident[4];    /* Binary Identifier */
+  uint8_t binary_version[4];  /* Binary Format Version */
+  uint8_t binary_crc[2];      /* Binary CRC */
+  uint8_t binary_size[4];     /* Binary Size */
+  uint8_t compiler_name[4];   /* Compiler name */
+  uint8_t compiler_version[4];
+};
+
+/* section header */
+#define RITE_SECTION_HEADER \
+  uint8_t section_ident[4]; \
+  uint8_t section_size[4]
+
+struct rite_section_header {
+  RITE_SECTION_HEADER;
+};
+
+struct rite_section_irep_header {
+  RITE_SECTION_HEADER;
+
+  uint8_t rite_version[4];    /* Rite Instruction Specification Version */
+};
+
+struct rite_section_debug_header {
+  RITE_SECTION_HEADER;
+};
+
+struct rite_section_lv_header {
+  RITE_SECTION_HEADER;
+};
+
+#define RITE_LV_NULL_MARK              UINT16_MAX
+
+struct rite_binary_footer {
+  RITE_SECTION_HEADER;
+};
+
+static inline int
+bigendian_p()
+{
+  int i;
+  char *p;
+
+  i = 1;
+  p = (char*)&i;
+  return p[0]?0:1;
+}
+
+static inline size_t
+uint8_to_bin(uint8_t s, uint8_t *bin)
+{
+  *bin = s;
+  return sizeof(uint8_t);
+}
+
+static inline size_t
+uint16_to_bin(uint16_t s, uint8_t *bin)
+{
+  *bin++ = (s >> 8) & 0xff;
+  *bin   = s & 0xff;
+  return sizeof(uint16_t);
+}
+
+static inline size_t
+uint32_to_bin(uint32_t l, uint8_t *bin)
+{
+  *bin++ = (l >> 24) & 0xff;
+  *bin++ = (l >> 16) & 0xff;
+  *bin++ = (l >> 8) & 0xff;
+  *bin   = l & 0xff;
+  return sizeof(uint32_t);
+}
+
+static inline size_t
+uint32l_to_bin(uint32_t l, uint8_t *bin)
+{
+  bin[3] = (l >> 24) & 0xff;
+  bin[2] = (l >> 16) & 0xff;
+  bin[1] = (l >> 8) & 0xff;
+  bin[0] = l & 0xff;
+  return sizeof(uint32_t);
+}
+
+static inline uint32_t
+bin_to_uint32(const uint8_t *bin)
+{
+  return (uint32_t)bin[0] << 24 |
+         (uint32_t)bin[1] << 16 |
+         (uint32_t)bin[2] << 8  |
+         (uint32_t)bin[3];
+}
+
+static inline uint32_t
+bin_to_uint32l(const uint8_t *bin)
+{
+  return (uint32_t)bin[3] << 24 |
+         (uint32_t)bin[2] << 16 |
+         (uint32_t)bin[1] << 8  |
+         (uint32_t)bin[0];
+}
+
+static inline uint16_t
+bin_to_uint16(const uint8_t *bin)
+{
+  return (uint16_t)bin[0] << 8 |
+         (uint16_t)bin[1];
+}
+
+static inline uint8_t
+bin_to_uint8(const uint8_t *bin)
+{
+  return (uint8_t)bin[0];
+}
+
+MRB_END_DECL
+
+/** @internal crc.c */
+uint16_t
+calc_crc_16_ccitt(const uint8_t *src, size_t nbytes, uint16_t crc);
+
+#endif  /* MRUBY_DUMP_H */
Index: /EcnlProtoTool/trunk/mruby-2.1.1/include/mruby/error.h
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/include/mruby/error.h	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/include/mruby/error.h	(revision 439)
@@ -0,0 +1,103 @@
+/**
+** @file mruby/error.h - Exception class
+**
+** See Copyright Notice in mruby.h
+*/
+
+#ifndef MRUBY_ERROR_H
+#define MRUBY_ERROR_H
+
+#include "common.h"
+
+/**
+ * MRuby error handling.
+ */
+MRB_BEGIN_DECL
+
+struct RException {
+  MRB_OBJECT_HEADER;
+  struct iv_tbl *iv;
+};
+
+#define mrb_exc_ptr(v) ((struct RException*)mrb_ptr(v))
+
+MRB_API void mrb_sys_fail(mrb_state *mrb, const char *mesg);
+MRB_API mrb_value mrb_exc_new_str(mrb_state *mrb, struct RClass* c, mrb_value str);
+#define mrb_exc_new_str_lit(mrb, c, lit) mrb_exc_new_str(mrb, c, mrb_str_new_lit(mrb, lit))
+MRB_API mrb_value mrb_make_exception(mrb_state *mrb, mrb_int argc, const mrb_value *argv);
+MRB_API mrb_value mrb_exc_backtrace(mrb_state *mrb, mrb_value exc);
+MRB_API mrb_value mrb_get_backtrace(mrb_state *mrb);
+MRB_API mrb_noreturn void mrb_no_method_error(mrb_state *mrb, mrb_sym id, mrb_value args, const char *fmt, ...);
+
+/* declaration for `fail` method */
+MRB_API mrb_value mrb_f_raise(mrb_state*, mrb_value);
+
+#if defined(MRB_64BIT) || defined(MRB_USE_FLOAT) || defined(MRB_NAN_BOXING) || defined(MRB_WORD_BOXING)
+struct RBreak {
+  MRB_OBJECT_HEADER;
+  struct RProc *proc;
+  mrb_value val;
+};
+#define mrb_break_value_get(brk) ((brk)->val)
+#define mrb_break_value_set(brk, v) ((brk)->val = v)
+#else
+struct RBreak {
+  MRB_OBJECT_HEADER;
+  struct RProc *proc;
+  union mrb_value_union value;
+};
+#define RBREAK_VALUE_TT_MASK ((1 << 8) - 1)
+static inline mrb_value
+mrb_break_value_get(struct RBreak *brk)
+{
+  mrb_value val;
+  val.value = brk->value;
+  val.tt = (enum mrb_vtype)(brk->flags & RBREAK_VALUE_TT_MASK);
+  return val;
+}
+static inline void
+mrb_break_value_set(struct RBreak *brk, mrb_value val)
+{
+  brk->value = val.value;
+  brk->flags &= ~RBREAK_VALUE_TT_MASK;
+  brk->flags |= val.tt;
+}
+#endif  /* MRB_64BIT || MRB_USE_FLOAT || MRB_NAN_BOXING || MRB_WORD_BOXING */
+#define mrb_break_proc_get(brk) ((brk)->proc)
+#define mrb_break_proc_set(brk, p) ((brk)->proc = p)
+
+/**
+ * Protect
+ *
+ * Implemented in the mruby-error mrbgem
+ */
+MRB_API mrb_value mrb_protect(mrb_state *mrb, mrb_func_t body, mrb_value data, mrb_bool *state);
+
+/**
+ * Ensure
+ *
+ * Implemented in the mruby-error mrbgem
+ */
+MRB_API mrb_value mrb_ensure(mrb_state *mrb, mrb_func_t body, mrb_value b_data,
+                             mrb_func_t ensure, mrb_value e_data);
+
+/**
+ * Rescue
+ *
+ * Implemented in the mruby-error mrbgem
+ */
+MRB_API mrb_value mrb_rescue(mrb_state *mrb, mrb_func_t body, mrb_value b_data,
+                             mrb_func_t rescue, mrb_value r_data);
+
+/**
+ * Rescue exception
+ *
+ * Implemented in the mruby-error mrbgem
+ */
+MRB_API mrb_value mrb_rescue_exceptions(mrb_state *mrb, mrb_func_t body, mrb_value b_data,
+                                        mrb_func_t rescue, mrb_value r_data,
+                                        mrb_int len, struct RClass **classes);
+
+MRB_END_DECL
+
+#endif  /* MRUBY_ERROR_H */
Index: /EcnlProtoTool/trunk/mruby-2.1.1/include/mruby/gc.h
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/include/mruby/gc.h	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/include/mruby/gc.h	(revision 439)
@@ -0,0 +1,91 @@
+/**
+** @file mruby/gc.h - garbage collector for mruby
+**
+** See Copyright Notice in mruby.h
+*/
+
+#ifndef MRUBY_GC_H
+#define MRUBY_GC_H
+
+#include "common.h"
+
+/**
+ * Uncommon memory management stuffs.
+ */
+MRB_BEGIN_DECL
+
+
+struct mrb_state;
+
+#define MRB_EACH_OBJ_OK 0
+#define MRB_EACH_OBJ_BREAK 1
+typedef int (mrb_each_object_callback)(struct mrb_state *mrb, struct RBasic *obj, void *data);
+void mrb_objspace_each_objects(struct mrb_state *mrb, mrb_each_object_callback *callback, void *data);
+MRB_API void mrb_free_context(struct mrb_state *mrb, struct mrb_context *c);
+
+#ifndef MRB_GC_ARENA_SIZE
+#define MRB_GC_ARENA_SIZE 100
+#endif
+
+typedef enum {
+  MRB_GC_STATE_ROOT = 0,
+  MRB_GC_STATE_MARK,
+  MRB_GC_STATE_SWEEP
+} mrb_gc_state;
+
+/* Disable MSVC warning "C4200: nonstandard extension used: zero-sized array
+ * in struct/union" when in C++ mode */
+#ifdef _MSC_VER
+#pragma warning(push)
+#pragma warning(disable : 4200)
+#endif
+
+typedef struct mrb_heap_page {
+  struct RBasic *freelist;
+  struct mrb_heap_page *prev;
+  struct mrb_heap_page *next;
+  struct mrb_heap_page *free_next;
+  struct mrb_heap_page *free_prev;
+  mrb_bool old:1;
+  void *objects[];
+} mrb_heap_page;
+
+#ifdef _MSC_VER
+#pragma warning(pop)
+#endif
+
+typedef struct mrb_gc {
+  mrb_heap_page *heaps;                /* heaps for GC */
+  mrb_heap_page *sweeps;
+  mrb_heap_page *free_heaps;
+  size_t live; /* count of live objects */
+#ifdef MRB_GC_FIXED_ARENA
+  struct RBasic *arena[MRB_GC_ARENA_SIZE]; /* GC protection array */
+#else
+  struct RBasic **arena;                   /* GC protection array */
+  int arena_capa;
+#endif
+  int arena_idx;
+
+  mrb_gc_state state; /* state of gc */
+  int current_white_part; /* make white object by white_part */
+  struct RBasic *gray_list; /* list of gray objects to be traversed incrementally */
+  struct RBasic *atomic_gray_list; /* list of objects to be traversed atomically */
+  size_t live_after_mark;
+  size_t threshold;
+  int interval_ratio;
+  int step_ratio;
+  mrb_bool iterating     :1;
+  mrb_bool disabled      :1;
+  mrb_bool full          :1;
+  mrb_bool generational  :1;
+  mrb_bool out_of_memory :1;
+  size_t majorgc_old_threshold;
+} mrb_gc;
+
+MRB_API mrb_bool
+mrb_object_dead_p(struct mrb_state *mrb, struct RBasic *object);
+
+MRB_END_DECL
+
+#endif  /* MRUBY_GC_H */
Index: /EcnlProtoTool/trunk/mruby-2.1.1/include/mruby/hash.h
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/include/mruby/hash.h	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/include/mruby/hash.h	(revision 439)
@@ -0,0 +1,222 @@
+/**
+** @file mruby/hash.h - Hash class
+**
+** See Copyright Notice in mruby.h
+*/
+
+#ifndef MRUBY_HASH_H
+#define MRUBY_HASH_H
+
+#include "common.h"
+
+/**
+ * Hash class
+ */
+MRB_BEGIN_DECL
+
+struct RHash {
+  MRB_OBJECT_HEADER;
+  struct iv_tbl *iv;
+  struct htable *ht;
+};
+
+#define mrb_hash_ptr(v)    ((struct RHash*)(mrb_ptr(v)))
+#define mrb_hash_value(p)  mrb_obj_value((void*)(p))
+
+MRB_API mrb_value mrb_hash_new_capa(mrb_state *mrb, mrb_int capa);
+MRB_API mrb_value mrb_ensure_hash_type(mrb_state *mrb, mrb_value hash);
+MRB_API mrb_value mrb_check_hash_type(mrb_state *mrb, mrb_value hash);
+
+/*
+ * Initializes a new hash.
+ *
+ * Equivalent to:
+ *
+ *      Hash.new
+ *
+ * @param mrb The mruby state reference.
+ * @return The initialized hash.
+ */
+MRB_API mrb_value mrb_hash_new(mrb_state *mrb);
+
+/*
+ * Sets a keys and values to hashes.
+ *
+ * Equivalent to:
+ *
+ *      hash[key] = val
+ *
+ * @param mrb The mruby state reference.
+ * @param hash The target hash.
+ * @param key The key to set.
+ * @param val The value to set.
+ * @return The value.
+ */
+MRB_API void mrb_hash_set(mrb_state *mrb, mrb_value hash, mrb_value key, mrb_value val);
+
+/*
+ * Gets a value from a key. If the key is not found, the default of the
+ * hash is used.
+ *
+ * Equivalent to:
+ *
+ *     hash[key]
+ *
+ * @param mrb The mruby state reference.
+ * @param hash The target hash.
+ * @param key The key to get.
+ * @return The found value.
+ */
+MRB_API mrb_value mrb_hash_get(mrb_state *mrb, mrb_value hash, mrb_value key);
+
+/*
+ * Gets a value from a key. If the key is not found, the default parameter is
+ * used.
+ *
+ * Equivalent to:
+ *
+ *     hash.key?(key) ? hash[key] : def
+ *
+ * @param mrb The mruby state reference.
+ * @param hash The target hash.
+ * @param key The key to get.
+ * @param def The default value.
+ * @return The found value.
+ */
+MRB_API mrb_value mrb_hash_fetch(mrb_state *mrb, mrb_value hash, mrb_value key, mrb_value def);
+
+/*
+ * Deletes hash key and value pair.
+ *
+ * Equivalent to:
+ *
+ *     hash.delete(key)
+ *
+ * @param mrb The mruby state reference.
+ * @param hash The target hash.
+ * @param key The key to delete.
+ * @return The deleted value. This value is not protected from GC. Use `mrb_gc_protect()` if necessary.
+ */
+MRB_API mrb_value mrb_hash_delete_key(mrb_state *mrb, mrb_value hash, mrb_value key);
+
+/*
+ * Gets an array of keys.
+ *
+ * Equivalent to:
+ *
+ *     hash.keys
+ *
+ * @param mrb The mruby state reference.
+ * @param hash The target hash.
+ * @return An array with the keys of the hash.
+ */
+MRB_API mrb_value mrb_hash_keys(mrb_state *mrb, mrb_value hash);
+/*
+ * Check if the hash has the key.
+ *
+ * Equivalent to:
+ *
+ *     hash.key?(key)
+ *
+ * @param mrb The mruby state reference.
+ * @param hash The target hash.
+ * @param key The key to check existence.
+ * @return True if the hash has the key
+ */
+MRB_API mrb_bool mrb_hash_key_p(mrb_state *mrb, mrb_value hash, mrb_value key);
+
+/*
+ * Check if the hash is empty
+ *
+ * Equivalent to:
+ *
+ *     hash.empty?
+ *
+ * @param mrb The mruby state reference.
+ * @param self The target hash.
+ * @return True if the hash is empty, false otherwise.
+ */
+MRB_API mrb_bool mrb_hash_empty_p(mrb_state *mrb, mrb_value self);
+
+/*
+ * Gets an array of values.
+ *
+ * Equivalent to:
+ *
+ *     hash.values
+ *
+ * @param mrb The mruby state reference.
+ * @param hash The target hash.
+ * @return An array with the values of the hash.
+ */
+MRB_API mrb_value mrb_hash_values(mrb_state *mrb, mrb_value hash);
+
+/*
+ * Clears the hash.
+ *
+ * Equivalent to:
+ *
+ *     hash.clear
+ *
+ * @param mrb The mruby state reference.
+ * @param hash The target hash.
+ * @return The hash
+ */
+MRB_API mrb_value mrb_hash_clear(mrb_state *mrb, mrb_value hash);
+
+/*
+ * Get hash size.
+ *
+ * Equivalent to:
+ *
+ *      hash.size
+ *
+ * @param mrb The mruby state reference.
+ * @param hash The target hash.
+ * @return The hash size.
+ */
+MRB_API mrb_int mrb_hash_size(mrb_state *mrb, mrb_value hash);
+
+/*
+ * Copies the hash.
+ *
+ *
+ * @param mrb The mruby state reference.
+ * @param hash The target hash.
+ * @return The copy of the hash
+ */
+MRB_API mrb_value mrb_hash_dup(mrb_state *mrb, mrb_value hash);
+
+/*
+ * Merges two hashes. The first hash will be modified by the
+ * second hash.
+ *
+ * @param mrb The mruby state reference.
+ * @param hash1 The target hash.
+ * @param hash2 Updating hash
+ */
+MRB_API void mrb_hash_merge(mrb_state *mrb, mrb_value hash1, mrb_value hash2);
+
+/* RHASH_TBL allocates st_table if not available. */
+#define RHASH(obj)   ((struct RHash*)(mrb_ptr(obj)))
+#define RHASH_TBL(h)          (RHASH(h)->ht)
+#define RHASH_IFNONE(h)       mrb_iv_get(mrb, (h), mrb_intern_lit(mrb, "ifnone"))
+#define RHASH_PROCDEFAULT(h)  RHASH_IFNONE(h)
+
+#define MRB_HASH_DEFAULT      1
+#define MRB_HASH_PROC_DEFAULT 2
+#define MRB_RHASH_DEFAULT_P(h) (RHASH(h)->flags & MRB_HASH_DEFAULT)
+#define MRB_RHASH_PROCDEFAULT_P(h) (RHASH(h)->flags & MRB_HASH_PROC_DEFAULT)
+
+/* GC functions */
+void mrb_gc_mark_hash(mrb_state*, struct RHash*);
+size_t mrb_gc_mark_hash_size(mrb_state*, struct RHash*);
+void mrb_gc_free_hash(mrb_state*, struct RHash*);
+
+/* return non zero to break the loop */
+typedef int (mrb_hash_foreach_func)(mrb_state *mrb, mrb_value key, mrb_value val, void *data);
+MRB_API void mrb_hash_foreach(mrb_state *mrb, struct RHash *hash, mrb_hash_foreach_func *func, void *p);
+
+MRB_END_DECL
+
+#endif  /* MRUBY_HASH_H */
Index: /EcnlProtoTool/trunk/mruby-2.1.1/include/mruby/irep.h
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/include/mruby/irep.h	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/include/mruby/irep.h	(revision 439)
@@ -0,0 +1,87 @@
+/**
+** @file mruby/irep.h - mrb_irep structure
+**
+** See Copyright Notice in mruby.h
+*/
+
+#ifndef MRUBY_IREP_H
+#define MRUBY_IREP_H
+
+#include "common.h"
+#include <mruby/compile.h>
+
+/**
+ * Compiled mruby scripts.
+ */
+MRB_BEGIN_DECL
+
+enum irep_pool_type {
+  IREP_TT_STRING,
+  IREP_TT_FIXNUM,
+  IREP_TT_FLOAT,
+};
+
+struct mrb_locals {
+  mrb_sym name;
+  uint16_t r;
+};
+
+/* Program data array struct */
+typedef struct mrb_irep {
+  uint16_t nlocals;        /* Number of local variables */
+  uint16_t nregs;          /* Number of register variables */
+  uint8_t flags;
+
+  const mrb_code *iseq;
+  mrb_value *pool;
+  mrb_sym *syms;
+  struct mrb_irep **reps;
+
+  struct mrb_locals *lv;
+  /* debug info */
+  struct mrb_irep_debug_info* debug_info;
+
+  uint16_t ilen, plen, slen, rlen;
+  uint32_t refcnt;
+} mrb_irep;
+
+#define MRB_ISEQ_NO_FREE 1
+
+MRB_API mrb_irep *mrb_add_irep(mrb_state *mrb);
+
+/* @param [const uint8_t*] irep code, expected as a literal */
+MRB_API mrb_value mrb_load_irep(mrb_state*, const uint8_t*);
+
+/*
+ * @param [const void*] irep code
+ * @param [size_t] size of irep buffer. If -1 is given, it is considered unrestricted.
+ */
+MRB_API mrb_value mrb_load_irep_buf(mrb_state*, const void*, size_t);
+
+/* @param [const uint8_t*] irep code, expected as a literal */
+MRB_API mrb_value mrb_load_irep_cxt(mrb_state*, const uint8_t*, mrbc_context*);
+
+/*
+ * @param [const void*] irep code
+ * @param [size_t] size of irep buffer. If -1 is given, it is considered unrestricted.
+ */
+MRB_API mrb_value mrb_load_irep_buf_cxt(mrb_state*, const void*, size_t, mrbc_context*);
+
+void mrb_irep_free(mrb_state*, struct mrb_irep*);
+void mrb_irep_incref(mrb_state*, struct mrb_irep*);
+void mrb_irep_decref(mrb_state*, struct mrb_irep*);
+void mrb_irep_cutref(mrb_state*, struct mrb_irep*);
+void mrb_irep_remove_lv(mrb_state *mrb, mrb_irep *irep);
+
+struct mrb_insn_data {
+  uint8_t insn;
+  uint16_t a;
+  uint16_t b;
+  uint8_t c;
+};
+
+struct mrb_insn_data mrb_decode_insn(const mrb_code *pc);
+
+MRB_END_DECL
+
+#endif  /* MRUBY_IREP_H */
Index: /EcnlProtoTool/trunk/mruby-2.1.1/include/mruby/istruct.h
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/include/mruby/istruct.h	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/include/mruby/istruct.h	(revision 439)
@@ -0,0 +1,47 @@
+/**
+** @file mruby/istruct.h - Inline structures
+**
+** See Copyright Notice in mruby.h
+*/
+
+#ifndef MRUBY_ISTRUCT_H
+#define MRUBY_ISTRUCT_H
+
+#include "common.h"
+#include <string.h>
+
+/**
+ * Inline structures that fit in RVALUE
+ *
+ * They cannot have finalizer, and cannot have instance variables.
+ */
+MRB_BEGIN_DECL
+
+#define ISTRUCT_DATA_SIZE (sizeof(void*) * 3)
+
+struct RIStruct {
+  MRB_OBJECT_HEADER;
+  char inline_data[ISTRUCT_DATA_SIZE];
+};
+
+#define RISTRUCT(obj)         ((struct RIStruct*)(mrb_ptr(obj)))
+#define ISTRUCT_PTR(obj)      (RISTRUCT(obj)->inline_data)
+
+MRB_INLINE mrb_int mrb_istruct_size()
+{
+  return ISTRUCT_DATA_SIZE;
+}
+
+MRB_INLINE void* mrb_istruct_ptr(mrb_value object)
+{
+  return ISTRUCT_PTR(object);
+}
+
+MRB_INLINE void mrb_istruct_copy(mrb_value dest, mrb_value src)
+{
+  memcpy(ISTRUCT_PTR(dest), ISTRUCT_PTR(src), ISTRUCT_DATA_SIZE);
+}
+
+MRB_END_DECL
+
+#endif /* MRUBY_ISTRUCT_H */
Index: /EcnlProtoTool/trunk/mruby-2.1.1/include/mruby/khash.h
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/include/mruby/khash.h	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/include/mruby/khash.h	(revision 439)
@@ -0,0 +1,274 @@
+/**
+** @file mruby/khash.h - Hash for mruby
+**
+** See Copyright Notice in mruby.h
+*/
+
+#ifndef MRUBY_KHASH_H
+#define MRUBY_KHASH_H
+
+#include <string.h>
+
+#include <mruby.h>
+#include "common.h"
+
+/**
+ * khash definitions used in mruby's hash table.
+ */
+MRB_BEGIN_DECL
+
+typedef uint32_t khint_t;
+typedef khint_t khiter_t;
+
+#ifndef KHASH_DEFAULT_SIZE
+# define KHASH_DEFAULT_SIZE 32
+#endif
+#define KHASH_MIN_SIZE 8
+
+#define UPPER_BOUND(x) ((x)>>2|(x)>>1)
+
+/* extern uint8_t __m[]; */
+
+/* mask for flags */
+static const uint8_t __m_empty[]  = {0x02, 0x08, 0x20, 0x80};
+static const uint8_t __m_del[]    = {0x01, 0x04, 0x10, 0x40};
+static const uint8_t __m_either[] = {0x03, 0x0c, 0x30, 0xc0};
+
+
+#define __ac_isempty(ed_flag, i) (ed_flag[(i)/4]&__m_empty[(i)%4])
+#define __ac_isdel(ed_flag, i) (ed_flag[(i)/4]&__m_del[(i)%4])
+#define __ac_iseither(ed_flag, i) (ed_flag[(i)/4]&__m_either[(i)%4])
+#define khash_power2(v) do { \
+  v--;\
+  v |= v >> 1;\
+  v |= v >> 2;\
+  v |= v >> 4;\
+  v |= v >> 8;\
+  v |= v >> 16;\
+  v++;\
+} while (0)
+#define khash_mask(h) ((h)->n_buckets-1)
+#define khash_upper_bound(h) (UPPER_BOUND((h)->n_buckets))
+
+/* declare struct kh_xxx and kh_xxx_funcs
+
+   name: hash name
+   khkey_t: key data type
+   khval_t: value data type
+   kh_is_map: (0: hash set / 1: hash map)
+*/
+#define KHASH_DECLARE(name, khkey_t, khval_t, kh_is_map)                \
+  typedef struct kh_##name {                                            \
+    khint_t n_buckets;                                                  \
+    khint_t size;                                                       \
+    khint_t n_occupied;                                                 \
+    uint8_t *ed_flags;                                                  \
+    khkey_t *keys;                                                      \
+    khval_t *vals;                                                      \
+  } kh_##name##_t;                                                      \
+  void kh_alloc_##name(mrb_state *mrb, kh_##name##_t *h);               \
+  kh_##name##_t *kh_init_##name##_size(mrb_state *mrb, khint_t size);   \
+  kh_##name##_t *kh_init_##name(mrb_state *mrb);                        \
+  void kh_destroy_##name(mrb_state *mrb, kh_##name##_t *h);             \
+  void kh_clear_##name(mrb_state *mrb, kh_##name##_t *h);               \
+  khint_t kh_get_##name(mrb_state *mrb, kh_##name##_t *h, khkey_t key);           \
+  khint_t kh_put_##name(mrb_state *mrb, kh_##name##_t *h, khkey_t key, int *ret); \
+  void kh_resize_##name(mrb_state *mrb, kh_##name##_t *h, khint_t new_n_buckets); \
+  void kh_del_##name(mrb_state *mrb, kh_##name##_t *h, khint_t x);                \
+  kh_##name##_t *kh_copy_##name(mrb_state *mrb, kh_##name##_t *h);
+
+static inline void
+kh_fill_flags(uint8_t *p, uint8_t c, size_t len)
+{
+  while (len-- > 0) {
+    *p++ = c;
+  }
+}
+
+/* define kh_xxx_funcs
+
+   name: hash name
+   khkey_t: key data type
+   khval_t: value data type
+   kh_is_map: (0: hash set / 1: hash map)
+   __hash_func: hash function
+   __hash_equal: hash comparation function
+*/
+#define KHASH_DEFINE(name, khkey_t, khval_t, kh_is_map, __hash_func, __hash_equal) \
+  void kh_alloc_##name(mrb_state *mrb, kh_##name##_t *h)                \
+  {                                                                     \
+    khint_t sz = h->n_buckets;                                          \
+    size_t len = sizeof(khkey_t) + (kh_is_map ? sizeof(khval_t) : 0);   \
+    uint8_t *p = (uint8_t*)mrb_malloc(mrb, sizeof(uint8_t)*sz/4+len*sz); \
+    h->size = h->n_occupied = 0;                                        \
+    h->keys = (khkey_t *)p;                                             \
+    h->vals = kh_is_map ? (khval_t *)(p+sizeof(khkey_t)*sz) : NULL;     \
+    h->ed_flags = p+len*sz;                                             \
+    kh_fill_flags(h->ed_flags, 0xaa, sz/4);                             \
+  }                                                                     \
+  kh_##name##_t *kh_init_##name##_size(mrb_state *mrb, khint_t size) {  \
+    kh_##name##_t *h = (kh_##name##_t*)mrb_calloc(mrb, 1, sizeof(kh_##name##_t)); \
+    if (size < KHASH_MIN_SIZE)                                          \
+      size = KHASH_MIN_SIZE;                                            \
+    khash_power2(size);                                                 \
+    h->n_buckets = size;                                                \
+    kh_alloc_##name(mrb, h);                                            \
+    return h;                                                           \
+  }                                                                     \
+  kh_##name##_t *kh_init_##name(mrb_state *mrb) {                       \
+    return kh_init_##name##_size(mrb, KHASH_DEFAULT_SIZE);              \
+  }                                                                     \
+  void kh_destroy_##name(mrb_state *mrb, kh_##name##_t *h)              \
+  {                                                                     \
+    if (h) {                                                            \
+      mrb_free(mrb, h->keys);                                           \
+      mrb_free(mrb, h);                                                 \
+    }                                                                   \
+  }                                                                     \
+  void kh_clear_##name(mrb_state *mrb, kh_##name##_t *h)                \
+  {                                                                     \
+    (void)mrb;                                                          \
+    if (h && h->ed_flags) {                                             \
+      kh_fill_flags(h->ed_flags, 0xaa, h->n_buckets/4);                 \
+      h->size = h->n_occupied = 0;                                      \
+    }                                                                   \
+  }                                                                     \
+  khint_t kh_get_##name(mrb_state *mrb, kh_##name##_t *h, khkey_t key)  \
+  {                                                                     \
+    khint_t k = __hash_func(mrb,key) & khash_mask(h), step = 0;         \
+    (void)mrb;                                                          \
+    while (!__ac_isempty(h->ed_flags, k)) {                             \
+      if (!__ac_isdel(h->ed_flags, k)) {                                \
+        if (__hash_equal(mrb,h->keys[k], key)) return k;                \
+      }                                                                 \
+      k = (k+(++step)) & khash_mask(h);                                 \
+    }                                                                   \
+    return kh_end(h);                                                   \
+  }                                                                     \
+  void kh_resize_##name(mrb_state *mrb, kh_##name##_t *h, khint_t new_n_buckets) \
+  {                                                                     \
+    if (new_n_buckets < KHASH_MIN_SIZE)                                 \
+      new_n_buckets = KHASH_MIN_SIZE;                                   \
+    khash_power2(new_n_buckets);                                        \
+    {                                                                   \
+      kh_##name##_t hh;                                                 \
+      uint8_t *old_ed_flags = h->ed_flags;                              \
+      khkey_t *old_keys = h->keys;                                      \
+      khval_t *old_vals = h->vals;                                      \
+      khint_t old_n_buckets = h->n_buckets;                             \
+      khint_t i;                                                        \
+      hh.n_buckets = new_n_buckets;                                     \
+      kh_alloc_##name(mrb, &hh);                                        \
+      /* relocate */                                                    \
+      for (i=0 ; i<old_n_buckets ; i++) {                               \
+        if (!__ac_iseither(old_ed_flags, i)) {                          \
+          khint_t k = kh_put_##name(mrb, &hh, old_keys[i], NULL);       \
+          if (kh_is_map) kh_value(&hh,k) = old_vals[i];                 \
+        }                                                               \
+      }                                                                 \
+      /* copy hh to h */                                                \
+      *h = hh;                                                          \
+      mrb_free(mrb, old_keys);                                          \
+    }                                                                   \
+  }                                                                     \
+  khint_t kh_put_##name(mrb_state *mrb, kh_##name##_t *h, khkey_t key, int *ret) \
+  {                                                                     \
+    khint_t k, del_k, step = 0;                                         \
+    if (h->n_occupied >= khash_upper_bound(h)) {                        \
+      kh_resize_##name(mrb, h, h->n_buckets*2);                         \
+    }                                                                   \
+    k = __hash_func(mrb,key) & khash_mask(h);                           \
+    del_k = kh_end(h);                                                  \
+    while (!__ac_isempty(h->ed_flags, k)) {                             \
+      if (!__ac_isdel(h->ed_flags, k)) {                                \
+        if (__hash_equal(mrb,h->keys[k], key)) {                        \
+          if (ret) *ret = 0;                                            \
+          return k;                                                     \
+        }                                                               \
+      }                                                                 \
+      else if (del_k == kh_end(h)) {                                    \
+        del_k = k;                                                      \
+      }                                                                 \
+      k = (k+(++step)) & khash_mask(h);                                 \
+    }                                                                   \
+    if (del_k != kh_end(h)) {                                           \
+      /* put at del */                                                  \
+      h->keys[del_k] = key;                                             \
+      h->ed_flags[del_k/4] &= ~__m_del[del_k%4];                        \
+      h->size++;                                                        \
+      if (ret) *ret = 2;                                                \
+      return del_k;                                                     \
+    }                                                                   \
+    else {                                                              \
+      /* put at empty */                                                \
+      h->keys[k] = key;                                                 \
+      h->ed_flags[k/4] &= ~__m_empty[k%4];                              \
+      h->size++;                                                        \
+      h->n_occupied++;                                                  \
+      if (ret) *ret = 1;                                                \
+      return k;                                                         \
+    }                                                                   \
+  }                                                                     \
+  void kh_del_##name(mrb_state *mrb, kh_##name##_t *h, khint_t x)       \
+  {                                                                     \
+    (void)mrb;                                                          \
+    mrb_assert(x != h->n_buckets && !__ac_iseither(h->ed_flags, x));    \
+    h->ed_flags[x/4] |= __m_del[x%4];                                   \
+    h->size--;                                                          \
+  }                                                                     \
+  kh_##name##_t *kh_copy_##name(mrb_state *mrb, kh_##name##_t *h)       \
+  {                                                                     \
+    kh_##name##_t *h2;                                                  \
+    khiter_t k, k2;                                                     \
+                                                                        \
+    h2 = kh_init_##name(mrb);                                           \
+    for (k = kh_begin(h); k != kh_end(h); k++) {                        \
+      if (kh_exist(h, k)) {                                             \
+        k2 = kh_put_##name(mrb, h2, kh_key(h, k), NULL);                \
+        if (kh_is_map) kh_value(h2, k2) = kh_value(h, k);               \
+      }                                                                 \
+    }                                                                   \
+    return h2;                                                          \
+  }
+
+
+#define khash_t(name) kh_##name##_t
+
+#define kh_init_size(name,mrb,size) kh_init_##name##_size(mrb,size)
+#define kh_init(name,mrb) kh_init_##name(mrb)
+#define kh_destroy(name, mrb, h) kh_destroy_##name(mrb, h)
+#define kh_clear(name, mrb, h) kh_clear_##name(mrb, h)
+#define kh_resize(name, mrb, h, s) kh_resize_##name(mrb, h, s)
+#define kh_put(name, mrb, h, k) kh_put_##name(mrb, h, k, NULL)
+#define kh_put2(name, mrb, h, k, r) kh_put_##name(mrb, h, k, r)
+#define kh_get(name, mrb, h, k) kh_get_##name(mrb, h, k)
+#define kh_del(name, mrb, h, k) kh_del_##name(mrb, h, k)
+#define kh_copy(name, mrb, h) kh_copy_##name(mrb, h)
+
+#define kh_exist(h, x) (!__ac_iseither((h)->ed_flags, (x)))
+#define kh_key(h, x) ((h)->keys[x])
+#define kh_val(h, x) ((h)->vals[x])
+#define kh_value(h, x) ((h)->vals[x])
+#define kh_begin(h) (khint_t)(0)
+#define kh_end(h) ((h)->n_buckets)
+#define kh_size(h) ((h)->size)
+#define kh_n_buckets(h) ((h)->n_buckets)
+
+#define kh_int_hash_func(mrb,key) (khint_t)((key)^((key)<<2)^((key)>>2))
+#define kh_int_hash_equal(mrb,a, b) (a == b)
+#define kh_int64_hash_func(mrb,key) (khint_t)((key)>>33^(key)^(key)<<11)
+#define kh_int64_hash_equal(mrb,a, b) (a == b)
+static inline khint_t __ac_X31_hash_string(const char *s)
+{
+    khint_t h = *s;
+    if (h) for (++s ; *s; ++s) h = (h << 5) - h + *s;
+    return h;
+}
+#define kh_str_hash_func(mrb,key) __ac_X31_hash_string(key)
+#define kh_str_hash_equal(mrb,a, b) (strcmp(a, b) == 0)
+
+typedef const char *kh_cstr_t;
+
+MRB_END_DECL
+
+#endif  /* MRUBY_KHASH_H */
Index: /EcnlProtoTool/trunk/mruby-2.1.1/include/mruby/numeric.h
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/include/mruby/numeric.h	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/include/mruby/numeric.h	(revision 439)
@@ -0,0 +1,195 @@
+/**
+** @file mruby/numeric.h - Numeric, Integer, Float, Fixnum class
+**
+** See Copyright Notice in mruby.h
+*/
+
+#ifndef MRUBY_NUMERIC_H
+#define MRUBY_NUMERIC_H
+
+#include "common.h"
+
+/**
+ * Numeric class and it's sub-classes.
+ *
+ * Integer, Float and Fixnum
+ */
+MRB_BEGIN_DECL
+
+#define TYPED_POSFIXABLE(f,t) ((f) <= (t)MRB_INT_MAX)
+#define TYPED_NEGFIXABLE(f,t) ((f) >= (t)MRB_INT_MIN)
+#define TYPED_FIXABLE(f,t) (TYPED_POSFIXABLE(f,t) && TYPED_NEGFIXABLE(f,t))
+#define POSFIXABLE(f) TYPED_POSFIXABLE(f,mrb_int)
+#define NEGFIXABLE(f) TYPED_NEGFIXABLE(f,mrb_int)
+#define FIXABLE(f) TYPED_FIXABLE(f,mrb_int)
+#ifndef MRB_WITHOUT_FLOAT
+#ifdef MRB_INT64
+#define FIXABLE_FLOAT(f) ((f)>=-9223372036854775808.0 && (f)<9223372036854775808.0)
+#else
+#define FIXABLE_FLOAT(f) TYPED_FIXABLE(f,mrb_float)
+#endif
+#endif
+
+#ifndef MRB_WITHOUT_FLOAT
+MRB_API mrb_value mrb_flo_to_fixnum(mrb_state *mrb, mrb_value val);
+#endif
+MRB_API mrb_value mrb_fixnum_to_str(mrb_state *mrb, mrb_value x, mrb_int base);
+/* ArgumentError if format string doesn't match /%(\.[0-9]+)?[aAeEfFgG]/ */
+#ifndef MRB_WITHOUT_FLOAT
+MRB_API mrb_value mrb_float_to_str(mrb_state *mrb, mrb_value x, const char *fmt);
+MRB_API mrb_float mrb_to_flo(mrb_state *mrb, mrb_value x);
+MRB_API mrb_value mrb_int_value(mrb_state *mrb, mrb_float f);
+#endif
+
+MRB_API mrb_value mrb_num_plus(mrb_state *mrb, mrb_value x, mrb_value y);
+MRB_API mrb_value mrb_num_minus(mrb_state *mrb, mrb_value x, mrb_value y);
+MRB_API mrb_value mrb_num_mul(mrb_state *mrb, mrb_value x, mrb_value y);
+
+#ifndef __has_builtin
+  #define __has_builtin(x) 0
+#endif
+
+#if (defined(__GNUC__) && __GNUC__ >= 5) ||   \
+    (__has_builtin(__builtin_add_overflow) && \
+     __has_builtin(__builtin_sub_overflow) && \
+     __has_builtin(__builtin_mul_overflow))
+# define MRB_HAVE_TYPE_GENERIC_CHECKED_ARITHMETIC_BUILTINS
+#endif
+
+/*
+// Clang 3.8 and 3.9 have problem compiling mruby in 32-bit mode, when MRB_INT64 is set
+// because of missing __mulodi4 and similar functions in its runtime. We need to use custom
+// implementation for them.
+*/
+#ifdef MRB_HAVE_TYPE_GENERIC_CHECKED_ARITHMETIC_BUILTINS
+#if defined(__clang__) && (__clang_major__ == 3) && (__clang_minor__ >= 8) && \
+    defined(MRB_32BIT) && defined(MRB_INT64)
+#undef MRB_HAVE_TYPE_GENERIC_CHECKED_ARITHMETIC_BUILTINS
+#endif
+#endif
+
+#ifdef MRB_HAVE_TYPE_GENERIC_CHECKED_ARITHMETIC_BUILTINS
+
+#ifndef MRB_WORD_BOXING
+# define WBCHK(x) 0
+#else
+# define WBCHK(x) !FIXABLE(x)
+#endif
+
+static inline mrb_bool
+mrb_int_add_overflow(mrb_int augend, mrb_int addend, mrb_int *sum)
+{
+  return __builtin_add_overflow(augend, addend, sum) || WBCHK(*sum);
+}
+
+static inline mrb_bool
+mrb_int_sub_overflow(mrb_int minuend, mrb_int subtrahend, mrb_int *difference)
+{
+  return __builtin_sub_overflow(minuend, subtrahend, difference) || WBCHK(*difference);
+}
+
+static inline mrb_bool
+mrb_int_mul_overflow(mrb_int multiplier, mrb_int multiplicand, mrb_int *product)
+{
+  return __builtin_mul_overflow(multiplier, multiplicand, product) || WBCHK(*product);
+}
+
+#undef WBCHK
+
+#else
+
+#define MRB_UINT_MAKE2(n) uint ## n ## _t
+#define MRB_UINT_MAKE(n) MRB_UINT_MAKE2(n)
+#define mrb_uint MRB_UINT_MAKE(MRB_INT_BIT)
+
+#define MRB_INT_OVERFLOW_MASK ((mrb_uint)1 << (MRB_INT_BIT - 1 - MRB_FIXNUM_SHIFT))
+
+static inline mrb_bool
+mrb_int_add_overflow(mrb_int augend, mrb_int addend, mrb_int *sum)
+{
+  mrb_uint x = (mrb_uint)augend;
+  mrb_uint y = (mrb_uint)addend;
+  mrb_uint z = (mrb_uint)(x + y);
+  *sum = (mrb_int)z;
+  return !!(((x ^ z) & (y ^ z)) & MRB_INT_OVERFLOW_MASK);
+}
+
+static inline mrb_bool
+mrb_int_sub_overflow(mrb_int minuend, mrb_int subtrahend, mrb_int *difference)
+{
+  mrb_uint x = (mrb_uint)minuend;
+  mrb_uint y = (mrb_uint)subtrahend;
+  mrb_uint z = (mrb_uint)(x - y);
+  *difference = (mrb_int)z;
+  return !!(((x ^ z) & (~y ^ z)) & MRB_INT_OVERFLOW_MASK);
+}
+
+static inline mrb_bool
+mrb_int_mul_overflow(mrb_int multiplier, mrb_int multiplicand, mrb_int *product)
+{
+#if MRB_INT_BIT == 32
+  int64_t n = (int64_t)multiplier * multiplicand;
+  *product = (mrb_int)n;
+  return !FIXABLE(n);
+#else
+  if (multiplier > 0) {
+    if (multiplicand > 0) {
+      if (multiplier > MRB_INT_MAX / multiplicand) return TRUE;
+    }
+    else {
+      if (multiplicand < MRB_INT_MAX / multiplier) return TRUE;
+    }
+  }
+  else {
+    if (multiplicand > 0) {
+      if (multiplier < MRB_INT_MAX / multiplicand) return TRUE;
+    }
+    else {
+      if (multiplier != 0 && multiplicand < MRB_INT_MAX / multiplier) return TRUE;
+    }
+  }
+  *product = multiplier * multiplicand;
+  return FALSE;
+#endif
+}
+
+#undef MRB_INT_OVERFLOW_MASK
+#undef mrb_uint
+#undef MRB_UINT_MAKE
+#undef MRB_UINT_MAKE2
+
+#endif
+
+#ifndef MRB_WITHOUT_FLOAT
+# include <stdint.h>
+# include <float.h>
+
+# define MRB_FLT_RADIX          FLT_RADIX
+
+# ifdef MRB_USE_FLOAT
+#  define MRB_FLT_MANT_DIG      FLT_MANT_DIG
+#  define MRB_FLT_EPSILON       FLT_EPSILON
+#  define MRB_FLT_DIG           FLT_DIG
+#  define MRB_FLT_MIN_EXP       FLT_MIN_EXP
+#  define MRB_FLT_MIN           FLT_MIN
+#  define MRB_FLT_MIN_10_EXP    FLT_MIN_10_EXP
+#  define MRB_FLT_MAX_EXP       FLT_MAX_EXP
+#  define MRB_FLT_MAX           FLT_MAX
+#  define MRB_FLT_MAX_10_EXP    FLT_MAX_10_EXP
+
+# else /* not MRB_USE_FLOAT */
+#  define MRB_FLT_MANT_DIG      DBL_MANT_DIG
+#  define MRB_FLT_EPSILON       DBL_EPSILON
+#  define MRB_FLT_DIG           DBL_DIG
+#  define MRB_FLT_MIN_EXP       DBL_MIN_EXP
+#  define MRB_FLT_MIN           DBL_MIN
+#  define MRB_FLT_MIN_10_EXP    DBL_MIN_10_EXP
+#  define MRB_FLT_MAX_EXP       DBL_MAX_EXP
+#  define MRB_FLT_MAX           DBL_MAX
+#  define MRB_FLT_MAX_10_EXP    DBL_MAX_10_EXP
+# endif /* MRB_USE_FLOAT */
+#endif /* MRB_WITHOUT_FLOAT */
+
+MRB_END_DECL
+
+#endif  /* MRUBY_NUMERIC_H */
Index: /EcnlProtoTool/trunk/mruby-2.1.1/include/mruby/object.h
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/include/mruby/object.h	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/include/mruby/object.h	(revision 439)
@@ -0,0 +1,43 @@
+/**
+** @file mruby/object.h - mruby object definition
+**
+** See Copyright Notice in mruby.h
+*/
+
+#ifndef MRUBY_OBJECT_H
+#define MRUBY_OBJECT_H
+
+#define MRB_OBJECT_HEADER \
+  struct RClass *c;       \
+  struct RBasic *gcnext;  \
+  enum mrb_vtype tt:8;    \
+  uint32_t color:3;       \
+  uint32_t flags:21
+
+#define MRB_FLAG_TEST(obj, flag) ((obj)->flags & (flag))
+
+struct RBasic {
+  MRB_OBJECT_HEADER;
+};
+#define mrb_basic_ptr(v) ((struct RBasic*)(mrb_ptr(v)))
+
+#define MRB_FL_OBJ_IS_FROZEN (1 << 20)
+#define MRB_FROZEN_P(o) ((o)->flags & MRB_FL_OBJ_IS_FROZEN)
+#define MRB_SET_FROZEN_FLAG(o) ((o)->flags |= MRB_FL_OBJ_IS_FROZEN)
+#define MRB_UNSET_FROZEN_FLAG(o) ((o)->flags &= ~MRB_FL_OBJ_IS_FROZEN)
+#define mrb_frozen_p(o) MRB_FROZEN_P(o)
+
+struct RObject {
+  MRB_OBJECT_HEADER;
+  struct iv_tbl *iv;
+};
+#define mrb_obj_ptr(v)   ((struct RObject*)(mrb_ptr(v)))
+
+#define mrb_special_const_p(x) mrb_immediate_p(x)
+
+struct RFiber {
+  MRB_OBJECT_HEADER;
+  struct mrb_context *cxt;
+};
+
+#endif  /* MRUBY_OBJECT_H */
Index: /EcnlProtoTool/trunk/mruby-2.1.1/include/mruby/opcode.h
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/include/mruby/opcode.h	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/include/mruby/opcode.h	(revision 439)
@@ -0,0 +1,69 @@
+/**
+** @file mruby/opcode.h - RiteVM operation codes
+**
+** See Copyright Notice in mruby.h
+*/
+
+#ifndef MRUBY_OPCODE_H
+#define MRUBY_OPCODE_H
+
+enum mrb_insn {
+#define OPCODE(x,_) OP_ ## x,
+#include "mruby/ops.h"
+#undef OPCODE
+};
+
+#define OP_L_STRICT  1
+#define OP_L_CAPTURE 2
+#define OP_L_METHOD  OP_L_STRICT
+#define OP_L_LAMBDA  (OP_L_STRICT|OP_L_CAPTURE)
+#define OP_L_BLOCK   OP_L_CAPTURE
+
+#define OP_R_NORMAL 0
+#define OP_R_BREAK  1
+#define OP_R_RETURN 2
+
+#define PEEK_B(pc) (*(pc))
+#define PEEK_S(pc) ((pc)[0]<<8|(pc)[1])
+#define PEEK_W(pc) ((pc)[0]<<16|(pc)[1]<<8|(pc)[2])
+
+#define READ_B() PEEK_B(pc++)
+#define READ_S() (pc+=2, PEEK_S(pc-2))
+#define READ_W() (pc+=3, PEEK_W(pc-3))
+
+#define FETCH_Z() /* nothing */
+#define FETCH_B() do {a=READ_B();} while (0)
+#define FETCH_BB() do {a=READ_B(); b=READ_B();} while (0)
+#define FETCH_BBB() do {a=READ_B(); b=READ_B(); c=READ_B();} while (0)
+#define FETCH_BS() do {a=READ_B(); b=READ_S();} while (0)
+#define FETCH_S() do {a=READ_S();} while (0)
+#define FETCH_W() do {a=READ_W();} while (0)
+
+/* with OP_EXT1 (1st 16bit) */
+#define FETCH_Z_1() FETCH_Z()
+#define FETCH_B_1() FETCH_S()
+#define FETCH_BB_1() do {a=READ_S(); b=READ_B();} while (0)
+#define FETCH_BBB_1() do {a=READ_S(); b=READ_B(); c=READ_B();} while (0)
+#define FETCH_BS_1() do {a=READ_S(); b=READ_S();} while (0)
+#define FETCH_S_1() FETCH_S()
+#define FETCH_W_1() FETCH_W()
+
+/* with OP_EXT2 (2nd 16bit) */
+#define FETCH_Z_2() FETCH_Z()
+#define FETCH_B_2() FETCH_B()
+#define FETCH_BB_2() do {a=READ_B(); b=READ_S();} while (0)
+#define FETCH_BBB_2() do {a=READ_B(); b=READ_S(); c=READ_B();} while (0)
+#define FETCH_BS_2() FETCH_BS()
+#define FETCH_S_2() FETCH_S()
+#define FETCH_W_2() FETCH_W()
+
+/* with OP_EXT3 (1st & 2nd 16bit) */
+#define FETCH_Z_3() FETCH_Z()
+#define FETCH_B_3() FETCH_B()
+#define FETCH_BB_3() do {a=READ_S(); b=READ_S();} while (0)
+#define FETCH_BBB_3() do {a=READ_S(); b=READ_S(); c=READ_B();} while (0)
+#define FETCH_BS_3() do {a=READ_S(); b=READ_S();} while (0)
+#define FETCH_S_3() FETCH_S()
+#define FETCH_W_3() FETCH_W()
+
+#endif  /* MRUBY_OPCODE_H */
Index: /EcnlProtoTool/trunk/mruby-2.1.1/include/mruby/ops.h
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/include/mruby/ops.h	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/include/mruby/ops.h	(revision 439)
@@ -0,0 +1,117 @@
+/* operand types:
+   + Z: no operand (Z,Z,Z,Z)
+   + B: 8bit (B,S,B,B)
+   + BB: 8+8bit (BB,SB,BS,SS)
+   + BBB: 8+8+8bit (BBB,SBB,BSB,SSB)
+   + BS: 8+16bit (BS,SS,BS,BS)
+   + S: 16bit (S,S,S,S)
+   + W: 24bit (W,W,W,W)
+*/
+
+/*-----------------------------------------------------------------------
+operation code    operands      semantics
+------------------------------------------------------------------------*/
+OPCODE(NOP,        Z)        /* no operation */
+OPCODE(MOVE,       BB)       /* R(a) = R(b) */
+OPCODE(LOADL,      BB)       /* R(a) = Pool(b) */
+OPCODE(LOADI,      BB)       /* R(a) = mrb_int(b) */
+OPCODE(LOADINEG,   BB)       /* R(a) = mrb_int(-b) */
+OPCODE(LOADI__1,   B)        /* R(a) = mrb_int(-1) */
+OPCODE(LOADI_0,    B)        /* R(a) = mrb_int(0) */
+OPCODE(LOADI_1,    B)        /* R(a) = mrb_int(1) */
+OPCODE(LOADI_2,    B)        /* R(a) = mrb_int(2) */
+OPCODE(LOADI_3,    B)        /* R(a) = mrb_int(3) */
+OPCODE(LOADI_4,    B)        /* R(a) = mrb_int(4) */
+OPCODE(LOADI_5,    B)        /* R(a) = mrb_int(5) */
+OPCODE(LOADI_6,    B)        /* R(a) = mrb_int(6) */
+OPCODE(LOADI_7,    B)        /* R(a) = mrb_int(7) */
+OPCODE(LOADSYM,    BB)       /* R(a) = Syms(b) */
+OPCODE(LOADNIL,    B)        /* R(a) = nil */
+OPCODE(LOADSELF,   B)        /* R(a) = self */
+OPCODE(LOADT,      B)        /* R(a) = true */
+OPCODE(LOADF,      B)        /* R(a) = false */
+OPCODE(GETGV,      BB)       /* R(a) = getglobal(Syms(b)) */
+OPCODE(SETGV,      BB)       /* setglobal(Syms(b), R(a)) */
+OPCODE(GETSV,      BB)       /* R(a) = Special[Syms(b)] */
+OPCODE(SETSV,      BB)       /* Special[Syms(b)] = R(a) */
+OPCODE(GETIV,      BB)       /* R(a) = ivget(Syms(b)) */
+OPCODE(SETIV,      BB)       /* ivset(Syms(b),R(a)) */
+OPCODE(GETCV,      BB)       /* R(a) = cvget(Syms(b)) */
+OPCODE(SETCV,      BB)       /* cvset(Syms(b),R(a)) */
+OPCODE(GETCONST,   BB)       /* R(a) = constget(Syms(b)) */
+OPCODE(SETCONST,   BB)       /* constset(Syms(b),R(a)) */
+OPCODE(GETMCNST,   BB)       /* R(a) = R(a)::Syms(b) */
+OPCODE(SETMCNST,   BB)       /* R(a+1)::Syms(b) = R(a) */
+OPCODE(GETUPVAR,   BBB)      /* R(a) = uvget(b,c) */
+OPCODE(SETUPVAR,   BBB)      /* uvset(b,c,R(a)) */
+OPCODE(JMP,        S)        /* pc=a */
+OPCODE(JMPIF,      BS)       /* if R(a) pc=b */
+OPCODE(JMPNOT,     BS)       /* if !R(a) pc=b */
+OPCODE(JMPNIL,     BS)       /* if R(a)==nil pc=b */
+OPCODE(ONERR,      S)        /* rescue_push(a) */
+OPCODE(EXCEPT,     B)        /* R(a) = exc */
+OPCODE(RESCUE,     BB)       /* R(b) = R(a).isa?(R(b)) */
+OPCODE(POPERR,     B)        /* a.times{rescue_pop()} */
+OPCODE(RAISE,      B)        /* raise(R(a)) */
+OPCODE(EPUSH,      B)        /* ensure_push(SEQ[a]) */
+OPCODE(EPOP,       B)        /* A.times{ensure_pop().call} */
+OPCODE(SENDV,      BB)       /* R(a) = call(R(a),Syms(b),*R(a+1)) */
+OPCODE(SENDVB,     BB)       /* R(a) = call(R(a),Syms(b),*R(a+1),&R(a+2)) */
+OPCODE(SEND,       BBB)      /* R(a) = call(R(a),Syms(b),R(a+1),...,R(a+c)) */
+OPCODE(SENDB,      BBB)      /* R(a) = call(R(a),Syms(b),R(a+1),...,R(a+c),&R(a+c+1)) */
+OPCODE(CALL,       Z)        /* R(0) = self.call(frame.argc, frame.argv) */
+OPCODE(SUPER,      BB)       /* R(a) = super(R(a+1),... ,R(a+b+1)) */
+OPCODE(ARGARY,     BS)       /* R(a) = argument array (16=m5:r1:m5:d1:lv4) */
+OPCODE(ENTER,      W)        /* arg setup according to flags (23=m5:o5:r1:m5:k5:d1:b1) */
+OPCODE(KEY_P,      BB)       /* R(a) = kdict.key?(Syms(b))                      # todo */
+OPCODE(KEYEND,     Z)        /* raise unless kdict.empty?                       # todo */
+OPCODE(KARG,       BB)       /* R(a) = kdict[Syms(b)]; kdict.delete(Syms(b))    # todo */
+OPCODE(RETURN,     B)        /* return R(a) (normal) */
+OPCODE(RETURN_BLK, B)        /* return R(a) (in-block return) */
+OPCODE(BREAK,      B)        /* break R(a) */
+OPCODE(BLKPUSH,    BS)       /* R(a) = block (16=m5:r1:m5:d1:lv4) */
+OPCODE(ADD,        B)        /* R(a) = R(a)+R(a+1) */
+OPCODE(ADDI,       BB)       /* R(a) = R(a)+mrb_int(b) */
+OPCODE(SUB,        B)        /* R(a) = R(a)-R(a+1) */
+OPCODE(SUBI,       BB)       /* R(a) = R(a)-mrb_int(b) */
+OPCODE(MUL,        B)        /* R(a) = R(a)*R(a+1) */
+OPCODE(DIV,        B)        /* R(a) = R(a)/R(a+1) */
+OPCODE(EQ,         B)        /* R(a) = R(a)==R(a+1) */
+OPCODE(LT,         B)        /* R(a) = R(a)<R(a+1) */
+OPCODE(LE,         B)        /* R(a) = R(a)<=R(a+1) */
+OPCODE(GT,         B)        /* R(a) = R(a)>R(a+1) */
+OPCODE(GE,         B)        /* R(a) = R(a)>=R(a+1) */
+OPCODE(ARRAY,      BB)       /* R(a) = ary_new(R(a),R(a+1)..R(a+b)) */
+OPCODE(ARRAY2,     BBB)      /* R(a) = ary_new(R(b),R(b+1)..R(b+c)) */
+OPCODE(ARYCAT,     B)        /* ary_cat(R(a),R(a+1)) */
+OPCODE(ARYPUSH,    B)        /* ary_push(R(a),R(a+1)) */
+OPCODE(ARYDUP,     B)        /* R(a) = ary_dup(R(a)) */
+OPCODE(AREF,       BBB)      /* R(a) = R(b)[c] */
+OPCODE(ASET,       BBB)      /* R(a)[c] = R(b) */
+OPCODE(APOST,      BBB)      /* *R(a),R(a+1)..R(a+c) = R(a)[b..] */
+OPCODE(INTERN,     B)        /* R(a) = intern(R(a)) */
+OPCODE(STRING,     BB)       /* R(a) = str_dup(Lit(b)) */
+OPCODE(STRCAT,     B)        /* str_cat(R(a),R(a+1)) */
+OPCODE(HASH,       BB)       /* R(a) = hash_new(R(a),R(a+1)..R(a+b)) */
+OPCODE(HASHADD,    BB)       /* R(a) = hash_push(R(a),R(a+1)..R(a+b)) */
+OPCODE(HASHCAT,    B)        /* R(a) = hash_cat(R(a),R(a+1)) */
+OPCODE(LAMBDA,     BB)       /* R(a) = lambda(SEQ[b],L_LAMBDA) */
+OPCODE(BLOCK,      BB)       /* R(a) = lambda(SEQ[b],L_BLOCK) */
+OPCODE(METHOD,     BB)       /* R(a) = lambda(SEQ[b],L_METHOD) */
+OPCODE(RANGE_INC,  B)        /* R(a) = range_new(R(a),R(a+1),FALSE) */
+OPCODE(RANGE_EXC,  B)        /* R(a) = range_new(R(a),R(a+1),TRUE) */
+OPCODE(OCLASS,     B)        /* R(a) = ::Object */
+OPCODE(CLASS,      BB)       /* R(a) = newclass(R(a),Syms(b),R(a+1)) */
+OPCODE(MODULE,     BB)       /* R(a) = newmodule(R(a),Syms(b)) */
+OPCODE(EXEC,       BB)       /* R(a) = blockexec(R(a),SEQ[b]) */
+OPCODE(DEF,        BB)       /* R(a).newmethod(Syms(b),R(a+1)) */
+OPCODE(ALIAS,      BB)       /* alias_method(target_class,Syms(a),Syms(b)) */
+OPCODE(UNDEF,      B)        /* undef_method(target_class,Syms(a)) */
+OPCODE(SCLASS,     B)        /* R(a) = R(a).singleton_class */
+OPCODE(TCLASS,     B)        /* R(a) = target_class */
+OPCODE(DEBUG,      BBB)      /* print a,b,c */
+OPCODE(ERR,        B)        /* raise(LocalJumpError, Lit(a)) */
+OPCODE(EXT1,       Z)        /* make 1st operand 16bit */
+OPCODE(EXT2,       Z)        /* make 2nd operand 16bit */
+OPCODE(EXT3,       Z)        /* make 1st and 2nd operands 16bit */
+OPCODE(STOP,       Z)        /* stop VM */
Index: /EcnlProtoTool/trunk/mruby-2.1.1/include/mruby/proc.h
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/include/mruby/proc.h	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/include/mruby/proc.h	(revision 439)
@@ -0,0 +1,137 @@
+/**
+** @file mruby/proc.h - Proc class
+**
+** See Copyright Notice in mruby.h
+*/
+
+#ifndef MRUBY_PROC_H
+#define MRUBY_PROC_H
+
+#include "common.h"
+#include <mruby/irep.h>
+
+/**
+ * Proc class
+ */
+MRB_BEGIN_DECL
+
+struct REnv {
+  MRB_OBJECT_HEADER;
+  mrb_value *stack;
+  struct mrb_context *cxt;
+  mrb_sym mid;
+};
+
+/* flags (21bits): 1(shared flag):10(cioff/bidx):10(stack_len) */
+#define MRB_ENV_SET_STACK_LEN(e,len) ((e)->flags = (((e)->flags & ~0x3ff)|((unsigned int)(len) & 0x3ff)))
+#define MRB_ENV_STACK_LEN(e) ((mrb_int)((e)->flags & 0x3ff))
+#define MRB_ENV_STACK_UNSHARED (1<<20)
+#define MRB_ENV_UNSHARE_STACK(e) ((e)->flags |= MRB_ENV_STACK_UNSHARED)
+#define MRB_ENV_STACK_SHARED_P(e) (((e)->flags & MRB_ENV_STACK_UNSHARED) == 0)
+#define MRB_ENV_BIDX(e) (((e)->flags >> 10) & 0x3ff)
+#define MRB_ENV_SET_BIDX(e,idx) ((e)->flags = (((e)->flags & ~(0x3ff<<10))|((unsigned int)(idx) & 0x3ff)<<10))
+
+void mrb_env_unshare(mrb_state*, struct REnv*);
+
+struct RProc {
+  MRB_OBJECT_HEADER;
+  union {
+    mrb_irep *irep;
+    mrb_func_t func;
+  } body;
+  struct RProc *upper;
+  union {
+    struct RClass *target_class;
+    struct REnv *env;
+  } e;
+};
+
+/* aspec access */
+#define MRB_ASPEC_REQ(a)          (((a) >> 18) & 0x1f)
+#define MRB_ASPEC_OPT(a)          (((a) >> 13) & 0x1f)
+#define MRB_ASPEC_REST(a)         (((a) >> 12) & 0x1)
+#define MRB_ASPEC_POST(a)         (((a) >> 7) & 0x1f)
+#define MRB_ASPEC_KEY(a)          (((a) >> 2) & 0x1f)
+#define MRB_ASPEC_KDICT(a)        ((a) & (1<<1))
+#define MRB_ASPEC_BLOCK(a)        ((a) & 1)
+
+#define MRB_PROC_CFUNC_FL 128
+#define MRB_PROC_CFUNC_P(p) (((p)->flags & MRB_PROC_CFUNC_FL) != 0)
+#define MRB_PROC_CFUNC(p) (p)->body.func
+#define MRB_PROC_STRICT 256
+#define MRB_PROC_STRICT_P(p) (((p)->flags & MRB_PROC_STRICT) != 0)
+#define MRB_PROC_ORPHAN 512
+#define MRB_PROC_ORPHAN_P(p) (((p)->flags & MRB_PROC_ORPHAN) != 0)
+#define MRB_PROC_ENVSET 1024
+#define MRB_PROC_ENV_P(p) (((p)->flags & MRB_PROC_ENVSET) != 0)
+#define MRB_PROC_ENV(p) (MRB_PROC_ENV_P(p) ? (p)->e.env : NULL)
+#define MRB_PROC_TARGET_CLASS(p) (MRB_PROC_ENV_P(p) ? (p)->e.env->c : (p)->e.target_class)
+#define MRB_PROC_SET_TARGET_CLASS(p,tc) do {\
+  if (MRB_PROC_ENV_P(p)) {\
+    (p)->e.env->c = (tc);\
+    mrb_field_write_barrier(mrb, (struct RBasic*)(p)->e.env, (struct RBasic*)(tc));\
+  }\
+  else {\
+    (p)->e.target_class = (tc);\
+    mrb_field_write_barrier(mrb, (struct RBasic*)p, (struct RBasic*)(tc));\
+  }\
+} while (0)
+#define MRB_PROC_SCOPE 2048
+#define MRB_PROC_SCOPE_P(p) (((p)->flags & MRB_PROC_SCOPE) != 0)
+
+#define mrb_proc_ptr(v)    ((struct RProc*)(mrb_ptr(v)))
+
+struct RProc *mrb_proc_new(mrb_state*, mrb_irep*);
+struct RProc *mrb_closure_new(mrb_state*, mrb_irep*);
+MRB_API struct RProc *mrb_proc_new_cfunc(mrb_state*, mrb_func_t);
+MRB_API struct RProc *mrb_closure_new_cfunc(mrb_state *mrb, mrb_func_t func, int nlocals);
+void mrb_proc_copy(struct RProc *a, struct RProc *b);
+mrb_int mrb_proc_arity(const struct RProc *p);
+
+/* implementation of #send method */
+mrb_value mrb_f_send(mrb_state *mrb, mrb_value self);
+
+/* following functions are defined in mruby-proc-ext so please include it when using */
+MRB_API struct RProc *mrb_proc_new_cfunc_with_env(mrb_state *mrb, mrb_func_t func, mrb_int argc, const mrb_value *argv);
+MRB_API mrb_value mrb_proc_cfunc_env_get(mrb_state *mrb, mrb_int idx);
+/* old name */
+#define mrb_cfunc_env_get(mrb, idx) mrb_proc_cfunc_env_get(mrb, idx)
+
+#define MRB_METHOD_FUNC_FL 1
+#define MRB_METHOD_NOARG_FL 2
+#ifndef MRB_METHOD_T_STRUCT
+
+#define MRB_METHOD_FUNC_P(m) (((uintptr_t)(m))&MRB_METHOD_FUNC_FL)
+#define MRB_METHOD_NOARG_P(m) (((uintptr_t)(m))&MRB_METHOD_NOARG_FL)
+#define MRB_METHOD_NOARG_SET(m) ((m)=(mrb_method_t)(((uintptr_t)(m))|MRB_METHOD_NOARG_FL))
+#define MRB_METHOD_FUNC(m) ((mrb_func_t)((uintptr_t)(m)&(~(MRB_METHOD_NOARG_FL|MRB_METHOD_FUNC_FL))))
+#define MRB_METHOD_FROM_FUNC(m,fn) ((m)=(mrb_method_t)((((uintptr_t)(fn))|MRB_METHOD_FUNC_FL)))
+#define MRB_METHOD_FROM_PROC(m,pr) ((m)=(mrb_method_t)(pr))
+#define MRB_METHOD_PROC_P(m) (!MRB_METHOD_FUNC_P(m))
+#define MRB_METHOD_PROC(m) ((struct RProc*)(m))
+#define MRB_METHOD_UNDEF_P(m) ((m)==0)
+
+#else
+
+#define MRB_METHOD_FUNC_P(m) ((m).flags&MRB_METHOD_FUNC_FL)
+#define MRB_METHOD_NOARG_P(m) ((m).flags&MRB_METHOD_NOARG_FL)
+#define MRB_METHOD_FUNC(m) ((m).func)
+#define MRB_METHOD_NOARG_SET(m) do{(m).flags|=MRB_METHOD_NOARG_FL;}while(0)
+#define MRB_METHOD_FROM_FUNC(m,fn) do{(m).flags=MRB_METHOD_FUNC_FL;(m).func=(fn);}while(0)
+#define MRB_METHOD_FROM_PROC(m,pr) do{(m).flags=0;(m).proc=(pr);}while(0)
+#define MRB_METHOD_PROC_P(m) (!MRB_METHOD_FUNC_P(m))
+#define MRB_METHOD_PROC(m) ((m).proc)
+#define MRB_METHOD_UNDEF_P(m) ((m).proc==NULL)
+
+#endif /* MRB_METHOD_T_STRUCT */
+
+#define MRB_METHOD_CFUNC_P(m) (MRB_METHOD_FUNC_P(m)?TRUE:(MRB_METHOD_PROC(m)?(MRB_PROC_CFUNC_P(MRB_METHOD_PROC(m))):FALSE))
+#define MRB_METHOD_CFUNC(m) (MRB_METHOD_FUNC_P(m)?MRB_METHOD_FUNC(m):((MRB_METHOD_PROC(m)&&MRB_PROC_CFUNC_P(MRB_METHOD_PROC(m)))?MRB_PROC_CFUNC(MRB_METHOD_PROC(m)):NULL))
+
+
+#include <mruby/khash.h>
+KHASH_DECLARE(mt, mrb_sym, mrb_method_t, TRUE)
+
+MRB_END_DECL
+
+#endif  /* MRUBY_PROC_H */
Index: /EcnlProtoTool/trunk/mruby-2.1.1/include/mruby/range.h
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/include/mruby/range.h	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/include/mruby/range.h	(revision 439)
@@ -0,0 +1,79 @@
+/**
+** @file mruby/range.h - Range class
+**
+** See Copyright Notice in mruby.h
+*/
+
+#ifndef MRUBY_RANGE_H
+#define MRUBY_RANGE_H
+
+#include "common.h"
+
+/**
+ * Range class
+ */
+MRB_BEGIN_DECL
+
+#if defined(MRB_NAN_BOXING) && defined(MRB_64BIT) || defined(MRB_WORD_BOXING)
+# define MRB_RANGE_EMBED
+#endif
+
+#ifdef MRB_RANGE_EMBED
+struct RRange {
+  MRB_OBJECT_HEADER;
+  mrb_value beg;
+  mrb_value end;
+  mrb_bool excl;
+};
+# define mrb_gc_free_range(mrb, p) ((void)0)
+# define RANGE_BEG(p) ((p)->beg)
+# define RANGE_END(p) ((p)->end)
+#else
+typedef struct mrb_range_edges {
+  mrb_value beg;
+  mrb_value end;
+} mrb_range_edges;
+struct RRange {
+  MRB_OBJECT_HEADER;
+  mrb_range_edges *edges;
+  mrb_bool excl;
+};
+# define mrb_gc_free_range(mrb, p) mrb_free(mrb, (p)->edges)
+# define RANGE_BEG(p) ((p)->edges->beg)
+# define RANGE_END(p) ((p)->edges->end)
+#endif
+
+#define mrb_range_beg(mrb, r) RANGE_BEG(mrb_range_ptr(mrb, r))
+#define mrb_range_end(mrb, r) RANGE_END(mrb_range_ptr(mrb, r))
+#define mrb_range_excl_p(mrb, r) RANGE_EXCL(mrb_range_ptr(mrb, r))
+#define mrb_range_raw_ptr(r) ((struct RRange*)mrb_ptr(r))
+#define mrb_range_value(p) mrb_obj_value((void*)(p))
+#define RANGE_EXCL(p) ((p)->excl)
+
+MRB_API struct RRange* mrb_range_ptr(mrb_state *mrb, mrb_value range);
+
+/*
+ * Initializes a Range.
+ *
+ * If the third parameter is FALSE then it includes the last value in the range.
+ * If the third parameter is TRUE then it excludes the last value in the range.
+ *
+ * @param start the beginning value.
+ * @param end the ending value.
+ * @param exclude represents the inclusion or exclusion of the last value.
+ */
+MRB_API mrb_value mrb_range_new(mrb_state *mrb, mrb_value start, mrb_value end, mrb_bool exclude);
+
+enum mrb_range_beg_len {
+  MRB_RANGE_TYPE_MISMATCH = 0,  /* (failure) not range */
+  MRB_RANGE_OK = 1,             /* (success) range */
+  MRB_RANGE_OUT = 2             /* (failure) out of range */
+};
+
+MRB_API enum mrb_range_beg_len mrb_range_beg_len(mrb_state *mrb, mrb_value range, mrb_int *begp, mrb_int *lenp, mrb_int len, mrb_bool trunc);
+mrb_value mrb_get_values_at(mrb_state *mrb, mrb_value obj, mrb_int olen, mrb_int argc, const mrb_value *argv, mrb_value (*func)(mrb_state*, mrb_value, mrb_int));
+void mrb_gc_mark_range(mrb_state *mrb, struct RRange *r);
+
+MRB_END_DECL
+
+#endif  /* MRUBY_RANGE_H */
Index: /EcnlProtoTool/trunk/mruby-2.1.1/include/mruby/re.h
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/include/mruby/re.h	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/include/mruby/re.h	(revision 439)
@@ -0,0 +1,16 @@
+/**
+** @file mruby/re.h - Regexp class
+**
+** See Copyright Notice in mruby.h
+*/
+
+#ifndef MRUBY_RE_H
+#define MRUBY_RE_H
+
+MRB_BEGIN_DECL
+
+#define REGEXP_CLASS          "Regexp"
+
+MRB_END_DECL
+
+#endif  /* RE_H */
Index: /EcnlProtoTool/trunk/mruby-2.1.1/include/mruby/string.h
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/include/mruby/string.h	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/include/mruby/string.h	(revision 439)
@@ -0,0 +1,474 @@
+/**
+** @file mruby/string.h - String class
+**
+** See Copyright Notice in mruby.h
+*/
+
+#ifndef MRUBY_STRING_H
+#define MRUBY_STRING_H
+
+#include "common.h"
+
+/**
+ * String class
+ */
+MRB_BEGIN_DECL
+
+extern const char mrb_digitmap[];
+
+#define RSTRING_EMBED_LEN_MAX \
+  ((mrb_int)(sizeof(void*) * 3 + sizeof(void*) - 32 / CHAR_BIT - 1))
+
+struct RString {
+  MRB_OBJECT_HEADER;
+  union {
+    struct {
+      mrb_ssize len;
+      union {
+        mrb_ssize capa;
+        struct mrb_shared_string *shared;
+        struct RString *fshared;
+      } aux;
+      char *ptr;
+    } heap;
+  } as;
+};
+struct RStringEmbed {
+  MRB_OBJECT_HEADER;
+  char ary[];
+};
+
+#define RSTR_SET_TYPE_FLAG(s, type) (RSTR_UNSET_TYPE_FLAG(s), (s)->flags |= MRB_STR_##type)
+#define RSTR_UNSET_TYPE_FLAG(s) ((s)->flags &= ~(MRB_STR_TYPE_MASK|MRB_STR_EMBED_LEN_MASK))
+
+#define RSTR_EMBED_P(s) ((s)->flags & MRB_STR_EMBED)
+#define RSTR_SET_EMBED_FLAG(s) ((s)->flags |= MRB_STR_EMBED)
+#define RSTR_UNSET_EMBED_FLAG(s) ((s)->flags &= ~(MRB_STR_EMBED|MRB_STR_EMBED_LEN_MASK))
+#define RSTR_SET_EMBED_LEN(s, n) do {\
+  size_t tmp_n = (n);\
+  (s)->flags &= ~MRB_STR_EMBED_LEN_MASK;\
+  (s)->flags |= (tmp_n) << MRB_STR_EMBED_LEN_SHIFT;\
+} while (0)
+#define RSTR_SET_LEN(s, n) do {\
+  if (RSTR_EMBED_P(s)) {\
+    RSTR_SET_EMBED_LEN((s),(n));\
+  }\
+  else {\
+    (s)->as.heap.len = (mrb_ssize)(n);\
+  }\
+} while (0)
+#define RSTR_EMBED_PTR(s) (((struct RStringEmbed*)(s))->ary)
+#define RSTR_EMBED_LEN(s)\
+  (mrb_int)(((s)->flags & MRB_STR_EMBED_LEN_MASK) >> MRB_STR_EMBED_LEN_SHIFT)
+#define RSTR_EMBEDDABLE_P(len) ((len) <= RSTRING_EMBED_LEN_MAX)
+
+#define RSTR_PTR(s) ((RSTR_EMBED_P(s)) ? RSTR_EMBED_PTR(s) : (s)->as.heap.ptr)
+#define RSTR_LEN(s) ((RSTR_EMBED_P(s)) ? RSTR_EMBED_LEN(s) : (s)->as.heap.len)
+#define RSTR_CAPA(s) (RSTR_EMBED_P(s) ? RSTRING_EMBED_LEN_MAX : (s)->as.heap.aux.capa)
+
+#define RSTR_SHARED_P(s) ((s)->flags & MRB_STR_SHARED)
+#define RSTR_SET_SHARED_FLAG(s) ((s)->flags |= MRB_STR_SHARED)
+#define RSTR_UNSET_SHARED_FLAG(s) ((s)->flags &= ~MRB_STR_SHARED)
+
+#define RSTR_FSHARED_P(s) ((s)->flags & MRB_STR_FSHARED)
+#define RSTR_SET_FSHARED_FLAG(s) ((s)->flags |= MRB_STR_FSHARED)
+#define RSTR_UNSET_FSHARED_FLAG(s) ((s)->flags &= ~MRB_STR_FSHARED)
+
+#define RSTR_NOFREE_P(s) ((s)->flags & MRB_STR_NOFREE)
+#define RSTR_SET_NOFREE_FLAG(s) ((s)->flags |= MRB_STR_NOFREE)
+#define RSTR_UNSET_NOFREE_FLAG(s) ((s)->flags &= ~MRB_STR_NOFREE)
+
+#ifdef MRB_UTF8_STRING
+# define RSTR_ASCII_P(s) ((s)->flags & MRB_STR_ASCII)
+# define RSTR_SET_ASCII_FLAG(s) ((s)->flags |= MRB_STR_ASCII)
+# define RSTR_UNSET_ASCII_FLAG(s) ((s)->flags &= ~MRB_STR_ASCII)
+# define RSTR_WRITE_ASCII_FLAG(s, v) (RSTR_UNSET_ASCII_FLAG(s), (s)->flags |= v)
+# define RSTR_COPY_ASCII_FLAG(dst, src) RSTR_WRITE_ASCII_FLAG(dst, RSTR_ASCII_P(src))
+#else
+# define RSTR_ASCII_P(s) (void)0
+# define RSTR_SET_ASCII_FLAG(s) (void)0
+# define RSTR_UNSET_ASCII_FLAG(s) (void)0
+# define RSTR_WRITE_ASCII_FLAG(s, v) (void)0
+# define RSTR_COPY_ASCII_FLAG(dst, src) (void)0
+#endif
+
+#define RSTR_POOL_P(s) ((s)->flags & MRB_STR_POOL)
+#define RSTR_SET_POOL_FLAG(s) ((s)->flags |= MRB_STR_POOL)
+
+/**
+ * Returns a pointer from a Ruby string
+ */
+#define mrb_str_ptr(s)       ((struct RString*)(mrb_ptr(s)))
+#define RSTRING(s)           mrb_str_ptr(s)
+#define RSTRING_PTR(s)       RSTR_PTR(RSTRING(s))
+#define RSTRING_EMBED_LEN(s) RSTR_EMBED_LEN(RSTRING(s))
+#define RSTRING_LEN(s)       RSTR_LEN(RSTRING(s))
+#define RSTRING_CAPA(s)      RSTR_CAPA(RSTRING(s))
+#define RSTRING_END(s)       (RSTRING_PTR(s) + RSTRING_LEN(s))
+MRB_API mrb_int mrb_str_strlen(mrb_state*, struct RString*);
+#define RSTRING_CSTR(mrb,s)  mrb_string_cstr(mrb, s)
+
+#define MRB_STR_SHARED    1
+#define MRB_STR_FSHARED   2
+#define MRB_STR_NOFREE    4
+#define MRB_STR_EMBED     8  /* type flags up to here */
+#define MRB_STR_POOL     16  /* status flags from here */
+#define MRB_STR_ASCII    32
+#define MRB_STR_EMBED_LEN_SHIFT 6
+#define MRB_STR_EMBED_LEN_BIT 5
+#define MRB_STR_EMBED_LEN_MASK (((1 << MRB_STR_EMBED_LEN_BIT) - 1) << MRB_STR_EMBED_LEN_SHIFT)
+#define MRB_STR_TYPE_MASK (MRB_STR_POOL - 1)
+
+
+void mrb_gc_free_str(mrb_state*, struct RString*);
+
+MRB_API void mrb_str_modify(mrb_state *mrb, struct RString *s);
+/* mrb_str_modify() with keeping ASCII flag if set */
+MRB_API void mrb_str_modify_keep_ascii(mrb_state *mrb, struct RString *s);
+
+/**
+ * Finds the index of a substring in a string
+ */
+MRB_API mrb_int mrb_str_index(mrb_state *mrb, mrb_value str, const char *p, mrb_int len, mrb_int offset);
+#define mrb_str_index_lit(mrb, str, lit, off) mrb_str_index(mrb, str, lit, mrb_strlen_lit(lit), off);
+
+/**
+ * Appends self to other. Returns self as a concatenated string.
+ *
+ *
+ * Example:
+ *
+ *     int
+ *     main(int argc,
+ *          char **argv)
+ *     {
+ *       // Variable declarations.
+ *       mrb_value str1;
+ *       mrb_value str2;
+ *
+ *       mrb_state *mrb = mrb_open();
+ *       if (!mrb)
+ *       {
+ *          // handle error
+ *       }
+ *
+ *       // Creates new Ruby strings.
+ *       str1 = mrb_str_new_lit(mrb, "abc");
+ *       str2 = mrb_str_new_lit(mrb, "def");
+ *
+ *       // Concatenates str2 to str1.
+ *       mrb_str_concat(mrb, str1, str2);
+ *
+ *       // Prints new Concatenated Ruby string.
+ *       mrb_p(mrb, str1);
+ *
+ *       mrb_close(mrb);
+ *       return 0;
+ *     } 
+ *
+ * Result:
+ *
+ *     => "abcdef"
+ *
+ * @param mrb The current mruby state.
+ * @param self String to concatenate.
+ * @param other String to append to self.
+ * @return [mrb_value] Returns a new String appending other to self.
+ */
+MRB_API void mrb_str_concat(mrb_state *mrb, mrb_value self, mrb_value other);
+
+/**
+ * Adds two strings together.
+ *
+ *
+ * Example:
+ *
+ *     int
+ *     main(int argc,
+ *          char **argv)
+ *     {
+ *       // Variable declarations.
+ *       mrb_value a;
+ *       mrb_value b;
+ *       mrb_value c;
+ *
+ *       mrb_state *mrb = mrb_open();
+ *       if (!mrb)
+ *       {
+ *          // handle error
+ *       }
+ *
+ *       // Creates two Ruby strings from the passed in C strings.
+ *       a = mrb_str_new_lit(mrb, "abc");
+ *       b = mrb_str_new_lit(mrb, "def");
+ *
+ *       // Prints both C strings.
+ *       mrb_p(mrb, a);
+ *       mrb_p(mrb, b);
+ *
+ *       // Concatenates both Ruby strings.
+ *       c = mrb_str_plus(mrb, a, b);
+ *
+ *       // Prints new Concatenated Ruby string.
+ *       mrb_p(mrb, c);
+ *
+ *       mrb_close(mrb);
+ *       return 0;
+ *     }
+ *
+ *
+ * Result:
+ *
+ *     => "abc"  # First string
+ *     => "def"  # Second string
+ *     => "abcdef" # First & Second concatenated.
+ *
+ * @param mrb The current mruby state.
+ * @param a First string to concatenate.
+ * @param b Second string to concatenate.
+ * @return [mrb_value] Returns a new String containing a concatenated to b.
+ */
+MRB_API mrb_value mrb_str_plus(mrb_state *mrb, mrb_value a, mrb_value b);
+
+/**
+ * Converts pointer into a Ruby string.
+ *
+ * @param mrb The current mruby state.
+ * @param p The pointer to convert to Ruby string.
+ * @return [mrb_value] Returns a new Ruby String.
+ */
+MRB_API mrb_value mrb_ptr_to_str(mrb_state *mrb, void *p);
+
+/**
+ * Returns an object as a Ruby string.
+ *
+ * @param mrb The current mruby state.
+ * @param obj An object to return as a Ruby string.
+ * @return [mrb_value] An object as a Ruby string.
+ */
+MRB_API mrb_value mrb_obj_as_string(mrb_state *mrb, mrb_value obj);
+
+/**
+ * Resizes the string's length. Returns the amount of characters
+ * in the specified by len.
+ *
+ * Example:
+ *
+ *     int
+ *     main(int argc,
+ *          char **argv)
+ *     {
+ *         // Variable declaration.
+ *         mrb_value str;
+ *
+ *         mrb_state *mrb = mrb_open();
+ *         if (!mrb)
+ *         {
+ *            // handle error
+ *         }
+ *         // Creates a new string.
+ *         str = mrb_str_new_lit(mrb, "Hello, world!");
+ *         // Returns 5 characters of
+ *         mrb_str_resize(mrb, str, 5);
+ *         mrb_p(mrb, str);
+ *
+ *         mrb_close(mrb);
+ *         return 0;
+ *      }
+ *
+ * Result:
+ *
+ *      => "Hello"
+ *
+ * @param mrb The current mruby state.
+ * @param str The Ruby string to resize.
+ * @param len The length.
+ * @return [mrb_value] An object as a Ruby string.
+ */
+MRB_API mrb_value mrb_str_resize(mrb_state *mrb, mrb_value str, mrb_int len);
+
+/**
+ * Returns a sub string.
+ *
+ * Example:
+ *
+ *     int
+ *     main(int argc,
+ *     char const **argv)
+ *     {
+ *       // Variable declarations.
+ *       mrb_value str1;
+ *       mrb_value str2;
+ *
+ *       mrb_state *mrb = mrb_open();
+ *       if (!mrb)
+ *       {
+ *         // handle error
+ *       }
+ *       // Creates new string.
+ *       str1 = mrb_str_new_lit(mrb, "Hello, world!");
+ *       // Returns a sub-string within the range of 0..2
+ *       str2 = mrb_str_substr(mrb, str1, 0, 2);
+ *
+ *       // Prints sub-string.
+ *       mrb_p(mrb, str2);
+ *
+ *       mrb_close(mrb);
+ *       return 0;
+ *     }
+ *
+ * Result:
+ *
+ *     => "He"
+ *
+ * @param mrb The current mruby state.
+ * @param str Ruby string.
+ * @param beg The beginning point of the sub-string.
+ * @param len The end point of the sub-string.
+ * @return [mrb_value] An object as a Ruby sub-string.
+ */
+MRB_API mrb_value mrb_str_substr(mrb_state *mrb, mrb_value str, mrb_int beg, mrb_int len);
+
+/**
+ * Returns a Ruby string type.
+ *
+ *
+ * @param mrb The current mruby state.
+ * @param str Ruby string.
+ * @return [mrb_value] A Ruby string.
+ */
+MRB_API mrb_value mrb_ensure_string_type(mrb_state *mrb, mrb_value str);
+MRB_API mrb_value mrb_check_string_type(mrb_state *mrb, mrb_value str);
+/* obsolete: use mrb_ensure_string_type() instead */
+MRB_API mrb_value mrb_string_type(mrb_state *mrb, mrb_value str);
+
+
+MRB_API mrb_value mrb_str_new_capa(mrb_state *mrb, size_t capa);
+MRB_API mrb_value mrb_str_buf_new(mrb_state *mrb, size_t capa);
+
+/* NULL terminated C string from mrb_value */
+MRB_API const char *mrb_string_cstr(mrb_state *mrb, mrb_value str);
+/* NULL terminated C string from mrb_value; `str` will be updated */
+MRB_API const char *mrb_string_value_cstr(mrb_state *mrb, mrb_value *str);
+/* obslete: use RSTRING_PTR() */
+MRB_API const char *mrb_string_value_ptr(mrb_state *mrb, mrb_value str);
+/* obslete: use RSTRING_LEN() */
+MRB_API mrb_int mrb_string_value_len(mrb_state *mrb, mrb_value str);
+
+/**
+ * Duplicates a string object.
+ *
+ *
+ * @param mrb The current mruby state.
+ * @param str Ruby string.
+ * @return [mrb_value] Duplicated Ruby string.
+ */
+MRB_API mrb_value mrb_str_dup(mrb_state *mrb, mrb_value str);
+
+/**
+ * Returns a symbol from a passed in Ruby string.
+ *
+ * @param mrb The current mruby state.
+ * @param self Ruby string.
+ * @return [mrb_value] A symbol.
+ */
+MRB_API mrb_value mrb_str_intern(mrb_state *mrb, mrb_value self);
+
+MRB_API mrb_value mrb_str_to_inum(mrb_state *mrb, mrb_value str, mrb_int base, mrb_bool badcheck);
+MRB_API mrb_value mrb_cstr_to_inum(mrb_state *mrb, const char *s, mrb_int base, mrb_bool badcheck);
+MRB_API double mrb_str_to_dbl(mrb_state *mrb, mrb_value str, mrb_bool badcheck);
+MRB_API double mrb_cstr_to_dbl(mrb_state *mrb, const char *s, mrb_bool badcheck);
+
+/**
+ * Returns a converted string type.
+ * For type checking, non converting `mrb_to_str` is recommended.
+ */
+MRB_API mrb_value mrb_str_to_str(mrb_state *mrb, mrb_value str);
+
+/**
+ * Returns true if the strings match and false if the strings don't match.
+ *
+ * @param mrb The current mruby state.
+ * @param str1 Ruby string to compare.
+ * @param str2 Ruby string to compare.
+ * @return [mrb_value] boolean value.
+ */
+MRB_API mrb_bool mrb_str_equal(mrb_state *mrb, mrb_value str1, mrb_value str2);
+
+/**
+ * Returns a concatenated string comprised of a Ruby string and a C string.
+ *
+ * @param mrb The current mruby state.
+ * @param str Ruby string.
+ * @param ptr A C string.
+ * @param len length of C string.
+ * @return [mrb_value] A Ruby string.
+ * @see mrb_str_cat_cstr
+ */
+MRB_API mrb_value mrb_str_cat(mrb_state *mrb, mrb_value str, const char *ptr, size_t len);
+
+/**
+ * Returns a concatenated string comprised of a Ruby string and a C string.
+ *
+ * @param mrb The current mruby state.
+ * @param str Ruby string.
+ * @param ptr A C string.
+ * @return [mrb_value] A Ruby string.
+ * @see mrb_str_cat
+ */
+MRB_API mrb_value mrb_str_cat_cstr(mrb_state *mrb, mrb_value str, const char *ptr);
+MRB_API mrb_value mrb_str_cat_str(mrb_state *mrb, mrb_value str, mrb_value str2);
+#define mrb_str_cat_lit(mrb, str, lit) mrb_str_cat(mrb, str, lit, mrb_strlen_lit(lit))
+
+/**
+ * Adds str2 to the end of str1.
+ */
+MRB_API mrb_value mrb_str_append(mrb_state *mrb, mrb_value str, mrb_value str2);
+
+/**
+ * Returns 0 if both Ruby strings are equal. Returns a value < 0 if Ruby str1 is less than Ruby str2. Returns a value > 0 if Ruby str2 is greater than Ruby str1.
+ */
+MRB_API int mrb_str_cmp(mrb_state *mrb, mrb_value str1, mrb_value str2);
+
+/**
+ * Returns a newly allocated C string from a Ruby string.
+ * This is an utility function to pass a Ruby string to C library functions.
+ *
+ * - Returned string does not contain any NUL characters (but terminator).
+ * - It raises an ArgumentError exception if Ruby string contains
+ *   NUL characters.
+ * - Retured string will be freed automatically on next GC.
+ * - Caller can modify returned string without affecting Ruby string
+ *   (e.g. it can be used for mkstemp(3)).
+ *
+ * @param mrb The current mruby state.
+ * @param str Ruby string. Must be an instance of String.
+ * @return [char *] A newly allocated C string.
+ */
+MRB_API char *mrb_str_to_cstr(mrb_state *mrb, mrb_value str);
+
+mrb_value mrb_str_pool(mrb_state *mrb, const char *s, mrb_int len, mrb_bool nofree);
+uint32_t mrb_str_hash(mrb_state *mrb, mrb_value str);
+mrb_value mrb_str_dump(mrb_state *mrb, mrb_value str);
+
+/**
+ * Returns a printable version of str, surrounded by quote marks, with special characters escaped.
+ */
+mrb_value mrb_str_inspect(mrb_state *mrb, mrb_value str);
+
+/* For backward compatibility */
+#define mrb_str_cat2(mrb, str, ptr) mrb_str_cat_cstr(mrb, str, ptr)
+#define mrb_str_buf_cat(mrb, str, ptr, len) mrb_str_cat(mrb, str, ptr, len)
+#define mrb_str_buf_append(mrb, str, str2) mrb_str_cat_str(mrb, str, str2)
+
+mrb_bool mrb_str_beg_len(mrb_int str_len, mrb_int *begp, mrb_int *lenp);
+mrb_value mrb_str_byte_subseq(mrb_state *mrb, mrb_value str, mrb_int beg, mrb_int len);
+
+#ifdef MRB_UTF8_STRING
+mrb_int mrb_utf8len(const char *str, const char *end);
+mrb_int mrb_utf8_strlen(const char *str, mrb_int byte_len);
+#endif
+
+MRB_END_DECL
+
+#endif  /* MRUBY_STRING_H */
Index: /EcnlProtoTool/trunk/mruby-2.1.1/include/mruby/throw.h
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/include/mruby/throw.h	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/include/mruby/throw.h	(revision 439)
@@ -0,0 +1,55 @@
+/**
+** @file mruby/throw.h - mruby exception throwing handler
+**
+** See Copyright Notice in mruby.h
+*/
+
+#ifndef MRB_THROW_H
+#define MRB_THROW_H
+
+#if defined(MRB_ENABLE_CXX_ABI)
+# if !defined(__cplusplus)
+#  error Trying to use C++ exception handling in C code
+# endif
+#endif
+
+#if defined(MRB_ENABLE_CXX_EXCEPTION) && defined(__cplusplus)
+
+#define MRB_TRY(buf) try {
+#define MRB_CATCH(buf) } catch(mrb_jmpbuf_impl e) { if (e != (buf)->impl) { throw e; }
+#define MRB_END_EXC(buf)  }
+
+#define MRB_THROW(buf) throw((buf)->impl)
+typedef mrb_int mrb_jmpbuf_impl;
+
+#else
+
+#include <setjmp.h>
+
+#if defined(__APPLE__) || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__)
+#define MRB_SETJMP _setjmp
+#define MRB_LONGJMP _longjmp
+#else
+#define MRB_SETJMP setjmp
+#define MRB_LONGJMP longjmp
+#endif
+
+#define MRB_TRY(buf) if (MRB_SETJMP((buf)->impl) == 0) {
+#define MRB_CATCH(buf) } else {
+#define MRB_END_EXC(buf) }
+
+#define MRB_THROW(buf) MRB_LONGJMP((buf)->impl, 1);
+#define mrb_jmpbuf_impl jmp_buf
+
+#endif
+
+struct mrb_jmpbuf {
+  mrb_jmpbuf_impl impl;
+
+#if defined(MRB_ENABLE_CXX_EXCEPTION) && defined(__cplusplus)
+  static mrb_int jmpbuf_id;
+  mrb_jmpbuf() : impl(jmpbuf_id++) {}
+#endif
+};
+
+#endif  /* MRB_THROW_H */
Index: /EcnlProtoTool/trunk/mruby-2.1.1/include/mruby/value.h
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/include/mruby/value.h	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/include/mruby/value.h	(revision 439)
@@ -0,0 +1,387 @@
+/**
+** @file mruby/value.h - mruby value definitions
+**
+** See Copyright Notice in mruby.h
+*/
+
+#ifndef MRUBY_VALUE_H
+#define MRUBY_VALUE_H
+
+#include "common.h"
+
+/*
+ * MRuby Value definition functions and macros.
+ */
+MRB_BEGIN_DECL
+
+/**
+ * mruby Symbol.
+ * @class mrb_sym
+ *
+ * You can create an mrb_sym by simply using mrb_str_intern() or mrb_intern_cstr()
+ */
+typedef uint32_t mrb_sym;
+
+/**
+ * mruby Boolean.
+ * @class mrb_bool
+ *
+ *
+ * Used internally to represent boolean. Can be TRUE or FALSE.
+ * Not to be confused with Ruby's boolean classes, which can be
+ * obtained using mrb_false_value() and mrb_true_value()
+ */
+typedef uint8_t mrb_bool;
+struct mrb_state;
+
+#if defined _MSC_VER && _MSC_VER < 1800
+# define PRIo64 "llo"
+# define PRId64 "lld"
+# define PRIu64 "llu"
+# define PRIx64 "llx"
+# define PRIo16 "ho"
+# define PRId16 "hd"
+# define PRIu16 "hu"
+# define PRIx16 "hx"
+# define PRIo32 "o"
+# define PRId32 "d"
+# define PRIu32 "u"
+# define PRIx32 "x"
+#else
+# include <inttypes.h>
+#endif
+
+#if defined(MRB_INT64)
+  typedef int64_t mrb_int;
+# define MRB_INT_BIT 64
+# define MRB_INT_MIN (INT64_MIN>>MRB_FIXNUM_SHIFT)
+# define MRB_INT_MAX (INT64_MAX>>MRB_FIXNUM_SHIFT)
+# define MRB_PRIo PRIo64
+# define MRB_PRId PRId64
+# define MRB_PRIx PRIx64
+#else
+  typedef int32_t mrb_int;
+# define MRB_INT_BIT 32
+# define MRB_INT_MIN (INT32_MIN>>MRB_FIXNUM_SHIFT)
+# define MRB_INT_MAX (INT32_MAX>>MRB_FIXNUM_SHIFT)
+# define MRB_PRIo PRIo32
+# define MRB_PRId PRId32
+# define MRB_PRIx PRIx32
+#endif
+
+#ifdef MRB_ENDIAN_BIG
+# define MRB_ENDIAN_LOHI(a,b) a b
+#else
+# define MRB_ENDIAN_LOHI(a,b) b a
+#endif
+
+#ifndef MRB_WITHOUT_FLOAT
+MRB_API double mrb_float_read(const char*, char**);
+#ifdef MRB_USE_FLOAT
+  typedef float mrb_float;
+#else
+  typedef double mrb_float;
+#endif
+#endif
+
+#if defined _MSC_VER && _MSC_VER < 1900
+# include <stdarg.h>
+MRB_API int mrb_msvc_vsnprintf(char *s, size_t n, const char *format, va_list arg);
+MRB_API int mrb_msvc_snprintf(char *s, size_t n, const char *format, ...);
+# define vsnprintf(s, n, format, arg) mrb_msvc_vsnprintf(s, n, format, arg)
+# define snprintf(s, n, format, ...) mrb_msvc_snprintf(s, n, format, __VA_ARGS__)
+# if _MSC_VER < 1800 && !defined MRB_WITHOUT_FLOAT
+#  include <float.h>
+#  define isfinite(n) _finite(n)
+#  define isnan _isnan
+#  define isinf(n) (!_finite(n) && !_isnan(n))
+#  define signbit(n) (_copysign(1.0, (n)) < 0.0)
+static const unsigned int IEEE754_INFINITY_BITS_SINGLE = 0x7F800000;
+#  define INFINITY (*(float *)&IEEE754_INFINITY_BITS_SINGLE)
+#  define NAN ((float)(INFINITY - INFINITY))
+# endif
+#endif
+
+enum mrb_vtype {
+  MRB_TT_FALSE = 0,   /*   0 */
+  MRB_TT_TRUE,        /*   1 */
+  MRB_TT_FLOAT,       /*   2 */
+  MRB_TT_FIXNUM,      /*   3 */
+  MRB_TT_SYMBOL,      /*   4 */
+  MRB_TT_UNDEF,       /*   5 */
+  MRB_TT_CPTR,        /*   6 */
+  MRB_TT_FREE,        /*   7 */
+  MRB_TT_OBJECT,      /*   8 */
+  MRB_TT_CLASS,       /*   9 */
+  MRB_TT_MODULE,      /*  10 */
+  MRB_TT_ICLASS,      /*  11 */
+  MRB_TT_SCLASS,      /*  12 */
+  MRB_TT_PROC,        /*  13 */
+  MRB_TT_ARRAY,       /*  14 */
+  MRB_TT_HASH,        /*  15 */
+  MRB_TT_STRING,      /*  16 */
+  MRB_TT_RANGE,       /*  17 */
+  MRB_TT_EXCEPTION,   /*  18 */
+  MRB_TT_FILE,        /*  19 */
+  MRB_TT_ENV,         /*  20 */
+  MRB_TT_DATA,        /*  21 */
+  MRB_TT_FIBER,       /*  22 */
+  MRB_TT_ISTRUCT,     /*  23 */
+  MRB_TT_BREAK,       /*  24 */
+  MRB_TT_MAXDEFINE    /*  25 */
+};
+
+#include <mruby/object.h>
+
+#ifdef MRB_DOCUMENTATION_BLOCK
+
+/**
+ * @abstract
+ * MRuby value boxing.
+ *
+ * Actual implementation depends on configured boxing type.
+ *
+ * @see mruby/boxing_no.h Default boxing representation
+ * @see mruby/boxing_word.h Word representation
+ * @see mruby/boxing_nan.h Boxed double representation
+ */
+typedef void mrb_value;
+
+#endif
+
+#if defined(MRB_NAN_BOXING)
+#include "boxing_nan.h"
+#elif defined(MRB_WORD_BOXING)
+#include "boxing_word.h"
+#else
+#include "boxing_no.h"
+#endif
+
+#define MRB_SYMBOL_BIT (sizeof(mrb_sym) * CHAR_BIT - MRB_SYMBOL_SHIFT)
+#define MRB_SYMBOL_MAX (UINT32_MAX >> MRB_SYMBOL_SHIFT)
+
+#if INTPTR_MAX < MRB_INT_MAX
+  typedef intptr_t mrb_ssize;
+# define MRB_SSIZE_MAX (INTPTR_MAX>>MRB_FIXNUM_SHIFT)
+#else
+  typedef mrb_int mrb_ssize;
+# define MRB_SSIZE_MAX MRB_INT_MAX
+#endif
+
+#ifndef mrb_immediate_p
+#define mrb_immediate_p(o) (mrb_type(o) < MRB_TT_FREE)
+#endif
+#ifndef mrb_fixnum_p
+#define mrb_fixnum_p(o) (mrb_type(o) == MRB_TT_FIXNUM)
+#endif
+#ifndef mrb_symbol_p
+#define mrb_symbol_p(o) (mrb_type(o) == MRB_TT_SYMBOL)
+#endif
+#ifndef mrb_undef_p
+#define mrb_undef_p(o) (mrb_type(o) == MRB_TT_UNDEF)
+#endif
+#ifndef mrb_nil_p
+#define mrb_nil_p(o)  (mrb_type(o) == MRB_TT_FALSE && !mrb_fixnum(o))
+#endif
+#ifndef mrb_false_p
+#define mrb_false_p(o) (mrb_type(o) == MRB_TT_FALSE && !!mrb_fixnum(o))
+#endif
+#ifndef mrb_true_p
+#define mrb_true_p(o)  (mrb_type(o) == MRB_TT_TRUE)
+#endif
+#ifndef MRB_WITHOUT_FLOAT
+#ifndef mrb_float_p
+#define mrb_float_p(o) (mrb_type(o) == MRB_TT_FLOAT)
+#endif
+#endif
+#ifndef mrb_array_p
+#define mrb_array_p(o) (mrb_type(o) == MRB_TT_ARRAY)
+#endif
+#ifndef mrb_string_p
+#define mrb_string_p(o) (mrb_type(o) == MRB_TT_STRING)
+#endif
+#ifndef mrb_hash_p
+#define mrb_hash_p(o) (mrb_type(o) == MRB_TT_HASH)
+#endif
+#ifndef mrb_cptr_p
+#define mrb_cptr_p(o) (mrb_type(o) == MRB_TT_CPTR)
+#endif
+#ifndef mrb_exception_p
+#define mrb_exception_p(o) (mrb_type(o) == MRB_TT_EXCEPTION)
+#endif
+#ifndef mrb_free_p
+#define mrb_free_p(o) (mrb_type(o) == MRB_TT_FREE)
+#endif
+#ifndef mrb_object_p
+#define mrb_object_p(o) (mrb_type(o) == MRB_TT_OBJECT)
+#endif
+#ifndef mrb_class_p
+#define mrb_class_p(o) (mrb_type(o) == MRB_TT_CLASS)
+#endif
+#ifndef mrb_module_p
+#define mrb_module_p(o) (mrb_type(o) == MRB_TT_MODULE)
+#endif
+#ifndef mrb_iclass_p
+#define mrb_iclass_p(o) (mrb_type(o) == MRB_TT_ICLASS)
+#endif
+#ifndef mrb_sclass_p
+#define mrb_sclass_p(o) (mrb_type(o) == MRB_TT_SCLASS)
+#endif
+#ifndef mrb_proc_p
+#define mrb_proc_p(o) (mrb_type(o) == MRB_TT_PROC)
+#endif
+#ifndef mrb_range_p
+#define mrb_range_p(o) (mrb_type(o) == MRB_TT_RANGE)
+#endif
+#ifndef mrb_file_p
+#define mrb_file_p(o) (mrb_type(o) == MRB_TT_FILE)
+#endif
+#ifndef mrb_env_p
+#define mrb_env_p(o) (mrb_type(o) == MRB_TT_ENV)
+#endif
+#ifndef mrb_data_p
+#define mrb_data_p(o) (mrb_type(o) == MRB_TT_DATA)
+#endif
+#ifndef mrb_fiber_p
+#define mrb_fiber_p(o) (mrb_type(o) == MRB_TT_FIBER)
+#endif
+#ifndef mrb_istruct_p
+#define mrb_istruct_p(o) (mrb_type(o) == MRB_TT_ISTRUCT)
+#endif
+#ifndef mrb_break_p
+#define mrb_break_p(o) (mrb_type(o) == MRB_TT_BREAK)
+#endif
+#ifndef mrb_bool
+#define mrb_bool(o)   (mrb_type(o) != MRB_TT_FALSE)
+#endif
+#define mrb_test(o)   mrb_bool(o)
+
+/**
+ * Returns a float in Ruby.
+ *
+ * Takes a float and boxes it into an mrb_value
+ */
+#ifndef MRB_WITHOUT_FLOAT
+MRB_INLINE mrb_value mrb_float_value(struct mrb_state *mrb, mrb_float f)
+{
+  mrb_value v;
+  (void) mrb;
+  SET_FLOAT_VALUE(mrb, v, f);
+  return v;
+}
+#endif
+
+MRB_INLINE mrb_value
+mrb_cptr_value(struct mrb_state *mrb, void *p)
+{
+  mrb_value v;
+  (void) mrb;
+  SET_CPTR_VALUE(mrb,v,p);
+  return v;
+}
+
+/**
+ * Returns a fixnum in Ruby.
+ *
+ * Takes an integer and boxes it into an mrb_value
+ */
+MRB_INLINE mrb_value mrb_fixnum_value(mrb_int i)
+{
+  mrb_value v;
+  SET_INT_VALUE(v, i);
+  return v;
+}
+
+MRB_INLINE mrb_value
+mrb_symbol_value(mrb_sym i)
+{
+  mrb_value v;
+  SET_SYM_VALUE(v, i);
+  return v;
+}
+
+MRB_INLINE mrb_value
+mrb_obj_value(void *p)
+{
+  mrb_value v;
+  SET_OBJ_VALUE(v, (struct RBasic*)p);
+  mrb_assert(p == mrb_ptr(v));
+  mrb_assert(((struct RBasic*)p)->tt == mrb_type(v));
+  return v;
+}
+
+/**
+ * Get a nil mrb_value object.
+ *
+ * @return
+ *      nil mrb_value object reference.
+ */
+MRB_INLINE mrb_value mrb_nil_value(void)
+{
+  mrb_value v;
+  SET_NIL_VALUE(v);
+  return v;
+}
+
+/**
+ * Returns false in Ruby.
+ */
+MRB_INLINE mrb_value mrb_false_value(void)
+{
+  mrb_value v;
+  SET_FALSE_VALUE(v);
+  return v;
+}
+
+/**
+ * Returns true in Ruby.
+ */
+MRB_INLINE mrb_value mrb_true_value(void)
+{
+  mrb_value v;
+  SET_TRUE_VALUE(v);
+  return v;
+}
+
+MRB_INLINE mrb_value
+mrb_bool_value(mrb_bool boolean)
+{
+  mrb_value v;
+  SET_BOOL_VALUE(v, boolean);
+  return v;
+}
+
+MRB_INLINE mrb_value
+mrb_undef_value(void)
+{
+  mrb_value v;
+  SET_UNDEF_VALUE(v);
+  return v;
+}
+
+#if defined(MRB_USE_ETEXT_EDATA) && !defined(MRB_USE_LINK_TIME_RO_DATA_P)
+# ifdef __GNUC__
+#  warning MRB_USE_ETEXT_EDATA is deprecated. Define MRB_USE_LINK_TIME_RO_DATA_P instead.
+# endif
+# define MRB_USE_LINK_TIME_RO_DATA_P
+#endif
+
+#if defined(MRB_USE_CUSTOM_RO_DATA_P)
+/* If you define `MRB_USE_CUSTOM_RO_DATA_P`, you must implement `mrb_ro_data_p()`. */
+mrb_bool mrb_ro_data_p(const char *p);
+#elif defined(MRB_USE_LINK_TIME_RO_DATA_P)
+extern char __ehdr_start[];
+extern char __init_array_start[];
+
+static inline mrb_bool
+mrb_ro_data_p(const char *p)
+{
+  return __ehdr_start < p && p < __init_array_start;
+}
+#else
+# define mrb_ro_data_p(p) FALSE
+#endif
+
+MRB_END_DECL
+
+#endif  /* MRUBY_VALUE_H */
Index: /EcnlProtoTool/trunk/mruby-2.1.1/include/mruby/variable.h
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/include/mruby/variable.h	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/include/mruby/variable.h	(revision 439)
@@ -0,0 +1,139 @@
+/**
+** @file mruby/variable.h - mruby variables
+**
+** See Copyright Notice in mruby.h
+*/
+
+#ifndef MRUBY_VARIABLE_H
+#define MRUBY_VARIABLE_H
+
+#include "common.h"
+
+/**
+ * Functions to access mruby variables.
+ */
+MRB_BEGIN_DECL
+
+typedef struct global_variable {
+  int   counter;
+  mrb_value *data;
+  mrb_value (*getter)(void);
+  void  (*setter)(void);
+  /* void  (*marker)(); */
+  /* int block_trace; */
+  /* struct trace_var *trace; */
+} global_variable;
+
+struct global_entry {
+  global_variable *var;
+  mrb_sym id;
+};
+
+mrb_value mrb_vm_special_get(mrb_state*, mrb_sym);
+void mrb_vm_special_set(mrb_state*, mrb_sym, mrb_value);
+mrb_value mrb_vm_cv_get(mrb_state*, mrb_sym);
+void mrb_vm_cv_set(mrb_state*, mrb_sym, mrb_value);
+mrb_value mrb_vm_const_get(mrb_state*, mrb_sym);
+void mrb_vm_const_set(mrb_state*, mrb_sym, mrb_value);
+MRB_API mrb_value mrb_const_get(mrb_state*, mrb_value, mrb_sym);
+MRB_API void mrb_const_set(mrb_state*, mrb_value, mrb_sym, mrb_value);
+MRB_API mrb_bool mrb_const_defined(mrb_state*, mrb_value, mrb_sym);
+MRB_API void mrb_const_remove(mrb_state*, mrb_value, mrb_sym);
+
+MRB_API mrb_bool mrb_iv_name_sym_p(mrb_state *mrb, mrb_sym sym);
+MRB_API void mrb_iv_name_sym_check(mrb_state *mrb, mrb_sym sym);
+MRB_API mrb_value mrb_obj_iv_get(mrb_state *mrb, struct RObject *obj, mrb_sym sym);
+MRB_API void mrb_obj_iv_set(mrb_state *mrb, struct RObject *obj, mrb_sym sym, mrb_value v);
+MRB_API mrb_bool mrb_obj_iv_defined(mrb_state *mrb, struct RObject *obj, mrb_sym sym);
+MRB_API mrb_value mrb_iv_get(mrb_state *mrb, mrb_value obj, mrb_sym sym);
+MRB_API void mrb_iv_set(mrb_state *mrb, mrb_value obj, mrb_sym sym, mrb_value v);
+MRB_API mrb_bool mrb_iv_defined(mrb_state*, mrb_value, mrb_sym);
+MRB_API mrb_value mrb_iv_remove(mrb_state *mrb, mrb_value obj, mrb_sym sym);
+MRB_API void mrb_iv_copy(mrb_state *mrb, mrb_value dst, mrb_value src);
+MRB_API mrb_bool mrb_const_defined_at(mrb_state *mrb, mrb_value mod, mrb_sym id);
+
+/**
+ * Get a global variable. Will return nil if the var does not exist
+ *
+ * Example:
+ *
+ *     !!!ruby
+ *     # Ruby style
+ *     var = $value
+ *
+ *     !!!c
+ *     // C style
+ *     mrb_sym sym = mrb_intern_lit(mrb, "$value");
+ *     mrb_value var = mrb_gv_get(mrb, sym);
+ *
+ * @param mrb The mruby state reference
+ * @param sym The name of the global variable
+ * @return The value of that global variable. May be nil
+ */
+MRB_API mrb_value mrb_gv_get(mrb_state *mrb, mrb_sym sym);
+
+/**
+ * Set a global variable
+ *
+ * Example:
+ *
+ *     !!!ruby
+ *     # Ruby style
+ *     $value = "foo"
+ *
+ *     !!!c
+ *     // C style
+ *     mrb_sym sym = mrb_intern_lit(mrb, "$value");
+ *     mrb_gv_set(mrb, sym, mrb_str_new_lit("foo"));
+ *
+ * @param mrb The mruby state reference
+ * @param sym The name of the global variable
+ * @param val The value of the global variable
+ */
+MRB_API void mrb_gv_set(mrb_state *mrb, mrb_sym sym, mrb_value val);
+
+/**
+ * Remove a global variable.
+ *
+ * Example:
+ *
+ *     # Ruby style
+ *     $value = nil
+ *
+ *     // C style
+ *     mrb_sym sym = mrb_intern_lit(mrb, "$value");
+ *     mrb_gv_remove(mrb, sym);
+ *
+ * @param mrb The mruby state reference
+ * @param sym The name of the global variable
+ */
+MRB_API void mrb_gv_remove(mrb_state *mrb, mrb_sym sym);
+
+MRB_API mrb_value mrb_cv_get(mrb_state *mrb, mrb_value mod, mrb_sym sym);
+MRB_API void mrb_mod_cv_set(mrb_state *mrb, struct RClass * c, mrb_sym sym, mrb_value v);
+MRB_API void mrb_cv_set(mrb_state *mrb, mrb_value mod, mrb_sym sym, mrb_value v);
+MRB_API mrb_bool mrb_cv_defined(mrb_state *mrb, mrb_value mod, mrb_sym sym);
+mrb_value mrb_obj_iv_inspect(mrb_state*, struct RObject*);
+void mrb_obj_iv_set_force(mrb_state *mrb, struct RObject *obj, mrb_sym sym, mrb_value v);
+mrb_value mrb_mod_constants(mrb_state *mrb, mrb_value mod);
+mrb_value mrb_f_global_variables(mrb_state *mrb, mrb_value self);
+mrb_value mrb_obj_instance_variables(mrb_state*, mrb_value);
+mrb_value mrb_mod_class_variables(mrb_state*, mrb_value);
+mrb_value mrb_mod_cv_get(mrb_state *mrb, struct RClass * c, mrb_sym sym);
+mrb_bool mrb_mod_cv_defined(mrb_state *mrb, struct RClass * c, mrb_sym sym);
+mrb_bool mrb_ident_p(const char *s, mrb_int len);
+
+/* GC functions */
+void mrb_gc_mark_gv(mrb_state*);
+void mrb_gc_free_gv(mrb_state*);
+void mrb_gc_mark_iv(mrb_state*, struct RObject*);
+size_t mrb_gc_mark_iv_size(mrb_state*, struct RObject*);
+void mrb_gc_free_iv(mrb_state*, struct RObject*);
+
+/* return non zero to break the loop */
+typedef int (mrb_iv_foreach_func)(mrb_state*,mrb_sym,mrb_value,void*);
+MRB_API void mrb_iv_foreach(mrb_state *mrb, mrb_value obj, mrb_iv_foreach_func *func, void *p);
+
+MRB_END_DECL
+
+#endif  /* MRUBY_VARIABLE_H */
Index: /EcnlProtoTool/trunk/mruby-2.1.1/include/mruby/version.h
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/include/mruby/version.h	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/include/mruby/version.h	(revision 439)
@@ -0,0 +1,124 @@
+/**
+** @file mruby/version.h - mruby version definition
+**
+** See Copyright Notice in mruby.h
+*/
+
+#ifndef MRUBY_VERSION_H
+#define MRUBY_VERSION_H
+
+#include "common.h"
+
+/**
+ * mruby version definition macros
+ */
+MRB_BEGIN_DECL
+
+/*
+ * A passed in expression.
+ */
+#define MRB_STRINGIZE0(expr) #expr
+
+/*
+ * Passes in an expression to MRB_STRINGIZE0.
+ */
+#define MRB_STRINGIZE(expr) MRB_STRINGIZE0(expr)
+
+/*
+ * The version of Ruby used by mruby.
+ */
+#define MRUBY_RUBY_VERSION "2.0"
+
+/*
+ * Ruby engine.
+ */
+#define MRUBY_RUBY_ENGINE  "mruby"
+
+/*
+ * Major release version number.
+ */
+#define MRUBY_RELEASE_MAJOR 2
+
+/*
+ * Minor release version number.
+ */
+#define MRUBY_RELEASE_MINOR 1
+
+/*
+ * Tiny release version number.
+ */
+#define MRUBY_RELEASE_TEENY 1
+
+/*
+ * The mruby version.
+ */
+#define MRUBY_VERSION MRB_STRINGIZE(MRUBY_RELEASE_MAJOR) "." MRB_STRINGIZE(MRUBY_RELEASE_MINOR) "." MRB_STRINGIZE(MRUBY_RELEASE_TEENY)
+
+/*
+ * Release number.
+ */
+#define MRUBY_RELEASE_NO (MRUBY_RELEASE_MAJOR * 100 * 100 + MRUBY_RELEASE_MINOR * 100 + MRUBY_RELEASE_TEENY)
+
+/*
+ * Release year.
+ */
+#define MRUBY_RELEASE_YEAR 2020
+
+/*
+ * Release month.
+ */
+#define MRUBY_RELEASE_MONTH 6
+
+/*
+ * Release day.
+ */
+#define MRUBY_RELEASE_DAY 4
+
+/*
+ * Release date as a string.
+ */
+#define MRUBY_RELEASE_DATE    \
+  MRUBY_RELEASE_YEAR_STR "-"  \
+  MRUBY_RELEASE_MONTH_STR "-" \
+  MRUBY_RELEASE_DAY_STR
+#define MRUBY_RELEASE_YEAR_STR MRB_STRINGIZE(MRUBY_RELEASE_YEAR)
+#if MRUBY_RELEASE_MONTH < 10
+#define MRUBY_RELEASE_MONTH_STR "0" MRB_STRINGIZE(MRUBY_RELEASE_MONTH)
+#else
+#define MRUBY_RELEASE_MONTH_STR MRB_STRINGIZE(MRUBY_RELEASE_MONTH)
+#endif
+#if MRUBY_RELEASE_DAY < 10
+#define MRUBY_RELEASE_DAY_STR "0" MRB_STRINGIZE(MRUBY_RELEASE_DAY)
+#else
+#define MRUBY_RELEASE_DAY_STR MRB_STRINGIZE(MRUBY_RELEASE_DAY)
+#endif
+
+/*
+ * The year mruby was first created.
+ */
+#define MRUBY_BIRTH_YEAR 2010
+
+/*
+ * MRuby's authors.
+ */
+#define MRUBY_AUTHOR "mruby developers"
+
+/*
+ * mruby's version, and release date.
+ */
+#define MRUBY_DESCRIPTION     \
+  "mruby " MRUBY_VERSION      \
+  " (" MRUBY_RELEASE_DATE ")" \
+
+/*
+ * mruby's copyright information.
+ */
+#define MRUBY_COPYRIGHT                \
+  "mruby - Copyright (c) "             \
+  MRB_STRINGIZE(MRUBY_BIRTH_YEAR)"-"   \
+  MRB_STRINGIZE(MRUBY_RELEASE_YEAR)" " \
+  MRUBY_AUTHOR                         \
+
+MRB_END_DECL
+
+#endif  /* MRUBY_VERSION_H */
Index: /EcnlProtoTool/trunk/mruby-2.1.1/lib/mruby-core-ext.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/lib/mruby-core-ext.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/lib/mruby-core-ext.rb	(revision 439)
@@ -0,0 +1,29 @@
+autoload :Pathname, 'pathname'
+
+class Object
+  class << self
+    def attr_block(*syms)
+      syms.flatten.each do |sym|
+        class_eval "def #{sym}(&block);block.call(@#{sym}) if block_given?;@#{sym};end"
+      end
+    end
+  end
+end
+
+class String
+  def relative_path_from(dir)
+    Pathname.new(File.expand_path(self)).relative_path_from(Pathname.new(File.expand_path(dir))).to_s
+  end
+
+  def relative_path
+    relative_path_from(Dir.pwd)
+  end
+end
+
+def _pp(cmd, src, tgt=nil, options={})
+  return if Rake.verbose
+
+  width = 5
+  template = options[:indent] ? "%#{width*options[:indent]}s %s %s" : "%-#{width}s %s %s"
+  puts template % [cmd, src, tgt ? "-> #{tgt}" : nil]
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/lib/mruby/build.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/lib/mruby/build.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/lib/mruby/build.rb	(revision 439)
@@ -0,0 +1,446 @@
+require "mruby-core-ext"
+require "mruby/build/load_gems"
+require "mruby/build/command"
+
+module MRuby
+  autoload :Gem, "mruby/gem"
+  autoload :Lockfile, "mruby/lockfile"
+
+  class << self
+    def targets
+      @targets ||= {}
+    end
+
+    def each_target(&block)
+      return to_enum(:each_target) if block.nil?
+      @targets.each do |key, target|
+        target.instance_eval(&block)
+      end
+    end
+  end
+
+  class Toolchain
+    class << self
+      attr_accessor :toolchains
+    end
+
+    def initialize(name, &block)
+      @name, @initializer = name.to_s, block
+      MRuby::Toolchain.toolchains[@name] = self
+    end
+
+    def setup(conf,params={})
+      conf.instance_exec(conf, params, &@initializer)
+    end
+
+    self.toolchains = {}
+  end
+
+  class Build
+    class << self
+      attr_accessor :current
+    end
+    include Rake::DSL
+    include LoadGems
+    attr_accessor :name, :bins, :exts, :file_separator, :build_dir, :gem_clone_dir
+    attr_reader :libmruby_objs, :gems, :toolchains, :gem_dir_to_repo_url
+    attr_writer :enable_bintest, :enable_test
+
+    alias libmruby libmruby_objs
+
+    COMPILERS = %w(cc cxx objc asm)
+    COMMANDS = COMPILERS + %w(linker archiver yacc gperf git exts mrbc)
+    attr_block MRuby::Build::COMMANDS
+
+    Exts = Struct.new(:object, :executable, :library)
+
+    def initialize(name='host', build_dir=nil, &block)
+      @name = name.to_s
+
+      unless MRuby.targets[@name]
+        if ENV['OS'] == 'Windows_NT'
+          @exts = Exts.new('.o', '.exe', '.a')
+        else
+          @exts = Exts.new('.o', '', '.a')
+        end
+
+        build_dir = build_dir || ENV['MRUBY_BUILD_DIR'] || "#{MRUBY_ROOT}/build"
+
+        @file_separator = '/'
+        @build_dir = "#{build_dir}/#{@name}"
+        @gem_clone_dir = "#{build_dir}/repos/#{@name}"
+        @cc = Command::Compiler.new(self, %w(.c))
+        @cxx = Command::Compiler.new(self, %w(.cc .cxx .cpp))
+        @objc = Command::Compiler.new(self, %w(.m))
+        @asm = Command::Compiler.new(self, %w(.S .asm))
+        @linker = Command::Linker.new(self)
+        @archiver = Command::Archiver.new(self)
+        @yacc = Command::Yacc.new(self)
+        @gperf = Command::Gperf.new(self)
+        @git = Command::Git.new(self)
+        @mrbc = Command::Mrbc.new(self)
+
+        @bins = []
+        @gems, @libmruby_objs = MRuby::Gem::List.new, []
+        @build_mrbtest_lib_only = false
+        @cxx_exception_enabled = false
+        @cxx_exception_disabled = false
+        @cxx_abi_enabled = false
+        @enable_bintest = false
+        @enable_test = false
+        @enable_lock = true
+        @toolchains = []
+        @gem_dir_to_repo_url = {}
+
+        MRuby.targets[@name] = self
+      end
+
+      MRuby::Build.current = MRuby.targets[@name]
+      MRuby.targets[@name].instance_eval(&block)
+
+      build_mrbc_exec if name == 'host'
+      build_mrbtest if test_enabled?
+    end
+
+    def debug_enabled?
+      @enable_debug
+    end
+
+    def enable_debug
+      compilers.each do |c|
+        c.defines += %w(MRB_DEBUG)
+        if toolchains.any? { |toolchain| toolchain == "gcc" }
+          c.flags += %w(-g3 -O0)
+        end
+        if toolchains.any? { |toolchain| toolchain == "visualcpp" }
+          c.flags = c.flags.collect{ |a| a.collect{ |f|
+            case f
+            when "/DNDEBUG"
+              "/D_DEBUG"
+            when "/MD"
+              "/MDd"
+            when "/O2"
+              "/Od"
+            when "/Zi"
+              "/ZI"
+            else
+               f
+            end
+          }.flatten }.flatten
+          c.flags += %w(/JMC /RTC1 /Gy)
+        end
+      end
+      if toolchains.any? { |toolchain| toolchain == "visualcpp" }
+        linker.flags = linker.flags.collect{ |a| a.collect{ |f|
+          case f
+          when "/OPT:REF"
+            ""
+          when "/OPT:ICF"
+            ""
+          when "/INCREMENTAL:NO"
+            "/INCREMENTAL"
+          when "/LTCG:incremental"
+            ""
+          else
+            f
+          end
+        }.flatten }.flatten
+      end
+      @mrbc.compile_options += ' -g'
+
+      @enable_debug = true
+    end
+
+    def disable_lock
+      @enable_lock = false
+    end
+
+    def lock_enabled?
+      Lockfile.enabled? && @enable_lock
+    end
+
+    def disable_cxx_exception
+      if @cxx_exception_enabled or @cxx_abi_enabled
+        raise "cxx_exception already enabled"
+      end
+      @cxx_exception_disabled = true
+    end
+
+    def enable_cxx_exception
+      return if @cxx_exception_enabled
+      return if @cxx_abi_enabled
+      if @cxx_exception_disabled
+        raise "cxx_exception disabled"
+      end
+      @cxx_exception_enabled = true
+      compilers.each { |c|
+        c.defines += %w(MRB_ENABLE_CXX_EXCEPTION)
+        c.flags << c.cxx_exception_flag
+      }
+      linker.command = cxx.command if toolchains.find { |v| v == 'gcc' }
+    end
+
+    def cxx_exception_enabled?
+      @cxx_exception_enabled
+    end
+
+    def cxx_abi_enabled?
+      @cxx_abi_enabled
+    end
+
+    def enable_cxx_abi
+      return if @cxx_abi_enabled
+      if @cxx_exception_enabled
+        raise "cxx_exception already enabled"
+      end
+      compilers.each { |c|
+        c.defines += %w(MRB_ENABLE_CXX_EXCEPTION MRB_ENABLE_CXX_ABI)
+        c.flags << c.cxx_compile_flag
+        c.flags = c.flags.flatten - c.cxx_invalid_flags.flatten
+      }
+      linker.command = cxx.command if toolchains.find { |v| v == 'gcc' }
+      @cxx_abi_enabled = true
+    end
+
+    def compile_as_cxx src, cxx_src, obj = nil, includes = []
+      obj = objfile(cxx_src) if obj.nil?
+
+      file cxx_src => [src, __FILE__] do |t|
+        mkdir_p File.dirname t.name
+        IO.write t.name, <<EOS
+#define __STDC_CONSTANT_MACROS
+#define __STDC_LIMIT_MACROS
+
+#ifndef MRB_ENABLE_CXX_ABI
+extern "C" {
+#endif
+#include "#{File.absolute_path src}"
+#ifndef MRB_ENABLE_CXX_ABI
+}
+#endif
+EOS
+      end
+
+      file obj => cxx_src do |t|
+        cxx.run t.name, t.prerequisites.first, [], ["#{MRUBY_ROOT}/src"] + includes
+      end
+
+      obj
+    end
+
+    def enable_bintest
+      @enable_bintest = true
+    end
+
+    def bintest_enabled?
+      @enable_bintest
+    end
+
+    def toolchain(name, params={})
+      name = name.to_s
+      tc = Toolchain.toolchains[name] || begin
+        path = "#{MRUBY_ROOT}/tasks/toolchains/#{name}.rake"
+        fail "Unknown #{name} toolchain" unless File.exist?(path)
+        load path
+        Toolchain.toolchains[name]
+      end
+      tc.setup(self, params)
+      @toolchains.unshift name
+    end
+
+    def primary_toolchain
+      @toolchains.first
+    end
+
+    def root
+      MRUBY_ROOT
+    end
+
+    def enable_test
+      @enable_test = true
+    end
+
+    def test_enabled?
+      @enable_test
+    end
+
+    def build_mrbtest
+      gem :core => 'mruby-test'
+    end
+
+    def build_mrbc_exec
+      gem :core => 'mruby-bin-mrbc'
+    end
+
+    def locks
+      Lockfile.build(@name)
+    end
+
+    def mrbcfile
+      return @mrbcfile if @mrbcfile
+
+      mrbc_build = MRuby.targets['host']
+      gems.each { |v| mrbc_build = self if v.name == 'mruby-bin-mrbc' }
+      @mrbcfile = mrbc_build.exefile("#{mrbc_build.build_dir}/bin/mrbc")
+    end
+
+    def compilers
+      COMPILERS.map do |c|
+        instance_variable_get("@#{c}")
+      end
+    end
+
+    def define_rules
+      compilers.each do |compiler|
+        if respond_to?(:enable_gems?) && enable_gems?
+          compiler.defines -= %w(DISABLE_GEMS)
+        else
+          compiler.defines += %w(DISABLE_GEMS)
+        end
+        compiler.define_rules build_dir, File.expand_path(File.join(File.dirname(__FILE__), '..', '..'))
+      end
+    end
+
+    def filename(name)
+      if name.is_a?(Array)
+        name.flatten.map { |n| filename(n) }
+      else
+        name.gsub('/', file_separator)
+      end
+    end
+
+    def exefile(name)
+      if name.is_a?(Array)
+        name.flatten.map { |n| exefile(n) }
+      elsif File.extname(name).empty?
+        "#{name}#{exts.executable}"
+      else
+        # `name` sometimes have (non-standard) extension (e.g. `.bat`).
+        name
+      end
+    end
+
+    def objfile(name)
+      if name.is_a?(Array)
+        name.flatten.map { |n| objfile(n) }
+      else
+        "#{name}#{exts.object}"
+      end
+    end
+
+    def libfile(name)
+      if name.is_a?(Array)
+        name.flatten.map { |n| libfile(n) }
+      else
+        "#{name}#{exts.library}"
+      end
+    end
+
+    def build_mrbtest_lib_only
+      @build_mrbtest_lib_only = true
+    end
+
+    def build_mrbtest_lib_only?
+      @build_mrbtest_lib_only
+    end
+
+    def verbose_flag
+      Rake.verbose ? ' -v' : ''
+    end
+
+    def run_test
+      puts ">>> Test #{name} <<<"
+      mrbtest = exefile("#{build_dir}/bin/mrbtest")
+      sh "#{filename mrbtest.relative_path}#{verbose_flag}"
+      puts
+    end
+
+    def run_bintest
+      puts ">>> Bintest #{name} <<<"
+      targets = @gems.select { |v| File.directory? "#{v.dir}/bintest" }.map { |v| filename v.dir }
+      targets << filename(".") if File.directory? "./bintest"
+      sh "ruby test/bintest.rb#{verbose_flag} #{targets.join ' '}"
+    end
+
+    def print_build_summary
+      puts "================================================"
+      puts "      Config Name: #{@name}"
+      puts " Output Directory: #{self.build_dir.relative_path}"
+      puts "         Binaries: #{@bins.join(', ')}" unless @bins.empty?
+      unless @gems.empty?
+        puts "    Included Gems:"
+        gems = @gems.sort_by { |gem| gem.name }
+        gems.each do |gem|
+          gem_version = " - #{gem.version}" if gem.version != '0.0.0'
+          gem_summary = " - #{gem.summary}" if gem.summary
+          puts "             #{gem.name}#{gem_version}#{gem_summary}"
+          puts "               - Binaries: #{gem.bins.join(', ')}" unless gem.bins.empty?
+        end
+      end
+      puts "================================================"
+      puts
+    end
+
+    def libmruby_static
+      libfile("#{build_dir}/lib/libmruby")
+    end
+
+    def libmruby_core_static
+      libfile("#{build_dir}/lib/libmruby_core")
+    end
+
+    def libraries
+      [libmruby_static]
+    end
+  end # Build
+
+  class CrossBuild < Build
+    attr_block %w(test_runner)
+    # cross compiling targets for building native extensions.
+    # host  - arch of where the built binary will run
+    # build - arch of the machine building the binary
+    attr_accessor :host_target, :build_target
+
+    def initialize(name, build_dir=nil, &block)
+      @endian = nil
+      @test_runner = Command::CrossTestRunner.new(self)
+      super
+    end
+
+    def mrbcfile
+      MRuby.targets['host'].exefile("#{MRuby.targets['host'].build_dir}/bin/mrbc")
+    end
+
+    def run_test
+      @test_runner.runner_options << verbose_flag
+      mrbtest = exefile("#{build_dir}/bin/mrbtest")
+      if (@test_runner.command == nil)
+        puts "You should run #{mrbtest} on target device."
+        puts
+      else
+        @test_runner.run(mrbtest)
+      end
+    end
+
+    def big_endian
+      if @endian
+        puts "Endian has already specified as #{@endian}."
+        return
+      end
+      @endian = :big
+      @mrbc.compile_options += ' -E'
+      compilers.each do |c|
+        c.defines += %w(MRB_ENDIAN_BIG)
+      end
+    end
+
+    def little_endian
+      if @endian
+        puts "Endian has already specified as #{@endian}."
+        return
+      end
+      @endian = :little
+      @mrbc.compile_options += ' -e'
+    end
+  end # CrossBuild
+end # MRuby
Index: /EcnlProtoTool/trunk/mruby-2.1.1/lib/mruby/build/command.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/lib/mruby/build/command.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/lib/mruby/build/command.rb	(revision 439)
@@ -0,0 +1,448 @@
+require 'forwardable'
+require 'digest/md5'
+
+module MRuby
+  class Command
+    include Rake::DSL
+    extend Forwardable
+    def_delegators :@build, :filename, :objfile, :libfile, :exefile
+    attr_accessor :build, :command
+
+    def initialize(build)
+      @build = build
+    end
+
+    # clone is deep clone without @build
+    def clone
+      target = super
+      excepts = %w(@build)
+      instance_variables.each do |attr|
+        unless excepts.include?(attr.to_s)
+          val = Marshal::load(Marshal.dump(instance_variable_get(attr))) # deep clone
+          target.instance_variable_set(attr, val)
+        end
+      end
+      target
+    end
+
+    def shellquote(s)
+      if ENV['OS'] == 'Windows_NT'
+        "\"#{s}\""
+      else
+        "#{s}"
+      end
+    end
+
+    NotFoundCommands = {}
+
+    private
+    def _run(options, params={})
+      return sh command + ' ' + ( options % params ) if NotFoundCommands.key? @command
+      begin
+        sh build.filename(command) + ' ' + ( options % params )
+      rescue RuntimeError
+        NotFoundCommands[@command] = true
+        _run options, params
+      end
+    end
+  end
+
+  class Command::Compiler < Command
+    attr_accessor :flags, :include_paths, :defines, :source_exts
+    attr_accessor :compile_options, :option_define, :option_include_path, :out_ext
+    attr_accessor :cxx_compile_flag, :cxx_exception_flag, :cxx_invalid_flags
+
+    def initialize(build, source_exts=[])
+      super(build)
+      @command = ENV['CC'] || 'cc'
+      @flags = [ENV['CFLAGS'] || []]
+      @source_exts = source_exts
+      @include_paths = ["#{MRUBY_ROOT}/include"]
+      @defines = %w()
+      @option_include_path = %q[-I"%s"]
+      @option_define = %q[-D"%s"]
+      @compile_options = %q[%{flags} -o "%{outfile}" -c "%{infile}"]
+      @cxx_invalid_flags = []
+    end
+
+    alias header_search_paths include_paths
+    def search_header_path(name)
+      header_search_paths.find do |v|
+        File.exist? build.filename("#{v}/#{name}").sub(/^"(.*)"$/, '\1')
+      end
+    end
+
+    def search_header(name)
+      path = search_header_path name
+      path && build.filename("#{path}/#{name}").sub(/^"(.*)"$/, '\1')
+    end
+
+    def all_flags(_defines=[], _include_paths=[], _flags=[], params={})
+      define_flags = [defines, _defines].flatten.map{ |d| option_define % d }
+      include_path_flags = [include_paths, _include_paths].flatten.map do |f|
+        option_include_path % filename(f)
+      end
+      if params.length > 0
+        __flags = flags.collect { |flag|
+          if flag.is_a?(Array)
+            flag.collect { |f|
+              if f.include?('%')
+                f % params
+              else
+                f
+              end
+              }.flatten
+          else
+            if flag.include?('%')
+              flag % params
+            else
+              flag
+            end
+          end
+        }.flatten
+      else
+        __flags = flags
+      end
+      [__flags, define_flags, include_path_flags, _flags].flatten.join(' ')
+    end
+
+    def run(outfile, infile, _defines=[], _include_paths=[], _flags=[])
+      mkdir_p File.dirname(outfile)
+      _pp "CC", infile.relative_path, outfile.relative_path
+      params = { :outdir => File.dirname(outfile).gsub('/', @build.file_separator), :outfilebase => File.basename(outfile, ".*") }
+      if MRUBY_BUILD_HOST_IS_CYGWIN
+        _run compile_options, { :flags => all_flags(_defines, _include_paths, _flags, params),
+                                :infile => cygwin_filename(infile), :outfile => cygwin_filename(outfile),
+                                :outdir => File.dirname(outfile).gsub('/', @build.file_separator), :outfilebase => File.basename(outfile, ".*") }
+      else
+        _run compile_options, { :flags => all_flags(_defines, _include_paths, _flags, params),
+                                :infile => filename(infile), :outfile => filename(outfile),
+                                :outdir => File.dirname(outfile).gsub('/', @build.file_separator), :outfilebase => File.basename(outfile, ".*") }
+      end
+    end
+
+    def define_rules(build_dir, source_dir='')
+      @out_ext = build.exts.object
+      gemrake = File.join(source_dir, "mrbgem.rake")
+      rakedep = File.exist?(gemrake) ? [ gemrake ] : []
+
+      if build_dir.include? "mrbgems/"
+        generated_file_matcher = Regexp.new("^#{Regexp.escape build_dir}/(.*)#{Regexp.escape out_ext}$")
+      else
+        generated_file_matcher = Regexp.new("^#{Regexp.escape build_dir}/(?!mrbgems/.+/)(.*)#{Regexp.escape out_ext}$")
+      end
+      source_exts.each do |ext, compile|
+        rule generated_file_matcher => [
+          proc { |file|
+            file.sub(generated_file_matcher, "#{source_dir}/\\1#{ext}")
+          },
+          proc { |file|
+            get_dependencies(file) + rakedep
+          }
+        ] do |t|
+          run t.name, t.prerequisites.first
+        end
+
+        rule generated_file_matcher => [
+          proc { |file|
+            file.sub(generated_file_matcher, "#{build_dir}/\\1#{ext}")
+          },
+          proc { |file|
+            get_dependencies(file) + rakedep
+          }
+        ] do |t|
+          run t.name, t.prerequisites.first
+        end
+      end
+    end
+
+    private
+
+    #
+    # === Example of +.d+ file
+    #
+    # ==== Without <tt>-MP</tt> compiler flag
+    #
+    #   /build/host/src/array.o: \
+    #     /src/array.c \
+    #     /include/mruby/common.h \
+    #     /include/mruby/value.h \
+    #     /src/value_array.h
+    #
+    # ==== With <tt>-MP</tt> compiler flag
+    #
+    #   /build/host/src/array.o: \
+    #     /src/array.c \
+    #     /include/mruby/common.h \
+    #     /include/mruby/value.h \
+    #     /src/value_array.h
+    #
+    #   /include/mruby/common.h:
+    #
+    #   /include/mruby/value.h:
+    #
+    #   /src/value_array.h:
+    #
+    def get_dependencies(file)
+      file = file.ext('d') unless File.extname(file) == '.d'
+      deps = []
+      if File.exist?(file)
+        File.foreach(file){|line| deps << $1 if /^ +(.*?)(?: *\\)?$/ =~ line}
+        deps.uniq!
+      end
+      deps << MRUBY_CONFIG
+    end
+  end
+
+  class Command::Linker < Command
+    attr_accessor :flags, :library_paths, :flags_before_libraries, :libraries, :flags_after_libraries
+    attr_accessor :link_options, :option_library, :option_library_path
+
+    def initialize(build)
+      super
+      @build = build
+      @command = ENV['LD'] || 'ld'
+      @flags = (ENV['LDFLAGS'] || [])
+      @flags_before_libraries, @flags_after_libraries = [], []
+      @libraries = []
+      @library_paths = []
+      @option_library = %q[-l"%s"]
+      @option_library_path = %q[-L"%s"]
+      @link_options = %Q[%{flags} -o "%{outfile}" %{objs} %{flags_before_libraries} %{libs} %{flags_after_libraries}]
+    end
+
+    def all_flags(_library_paths=[], _flags=[], params={})
+      library_path_flags = [library_paths, _library_paths].flatten.map do |f|
+        option_library_path % filename(f)
+      end
+      if params.length > 0
+        __flags = flags.collect { |flag|
+          if flag.is_a?(Array)
+            flag.collect { |f|
+              if f.include?('%')
+                f % params
+              else
+                f
+              end
+              }.flatten
+          else
+            if flag.include?('%')
+              flag % params
+            else
+              flag
+            end
+          end
+        }.flatten
+      else
+        __flags = flags
+      end
+      [__flags, library_path_flags, _flags].flatten.join(' ')
+    end
+
+    def library_flags(_libraries)
+      [libraries, _libraries].flatten.map{ |d| option_library % d }.join(' ')
+    end
+
+    def run(outfile, objfiles, _libraries=[], _library_paths=[], _flags=[], _flags_before_libraries=[], _flags_after_libraries=[])
+      mkdir_p File.dirname(outfile)
+      library_flags = [libraries, _libraries].flatten.map { |d| option_library % d }
+
+      _pp "LD", outfile.relative_path
+      if MRUBY_BUILD_HOST_IS_CYGWIN
+        params = { :outfile => cygwin_filename(outfile), :outdir => File.dirname(outfile).gsub('/', @build.file_separator), :outfilebase => File.basename(outfile, ".*") }
+        _run link_options, { :flags => all_flags(_library_paths, _flags, params),
+                             :outfile => cygwin_filename(outfile) , :objs => cygwin_filename(objfiles).join(' '),
+                             :flags_before_libraries => [flags_before_libraries, _flags_before_libraries].flatten.join(' '),
+                             :flags_after_libraries => [flags_after_libraries, _flags_after_libraries].flatten.join(' '),
+                             :libs => library_flags.join(' '),
+                             :outdir => File.dirname(outfile).gsub('/', @build.file_separator), :outfilebase => File.basename(outfile, ".*") }
+      else
+        params = { :outfile => filename(outfile), :outdir => File.dirname(outfile).gsub('/', @build.file_separator), :outfilebase => File.basename(outfile, ".*") }
+        _run link_options, { :flags => all_flags(_library_paths, _flags, params),
+                            :outfile => filename(outfile) , :objs => filename(objfiles).map{|f| %Q["#{f}"]}.join(' '),
+                            :flags_before_libraries => [flags_before_libraries, _flags_before_libraries].flatten.join(' '),
+                            :flags_after_libraries => [flags_after_libraries, _flags_after_libraries].flatten.join(' '),
+                             :libs => library_flags.join(' '),
+                             :outdir => File.dirname(outfile).gsub('/', @build.file_separator), :outfilebase => File.basename(outfile, ".*") }
+      end
+    end
+  end
+
+  class Command::Archiver < Command
+    attr_accessor :archive_options
+
+    def initialize(build)
+      super
+      @command = ENV['AR'] || 'ar'
+      @archive_options = 'rs "%{outfile}" %{objs}'
+    end
+
+    def run(outfile, objfiles)
+      mkdir_p File.dirname(outfile)
+      _pp "AR", outfile.relative_path
+
+      # reference from emar.py
+      outfilebase = File.dirname(outfile)
+      to_delete = []
+      newargs = []
+      objfiles.each do |orig_name|
+        dir_name = File.dirname(orig_name)
+        dir_name = dir_name.relative_path_from(Dir.pwd)
+        base_name = File.basename(orig_name)
+        parts = base_name.split('.')
+        # h = Digest::MD5.new.update(orig_name).to_s
+        h = Digest::MD5.new.update(orig_name).to_s.slice(0,4)
+        parts[0] += '_' + h
+        newname = parts.join('.')
+        full_newname = File.join(dir_name, newname)
+        if not File.exists?(full_newname)
+          begin # it is ok to fail here, we just don't get hashing
+            FileUtils.cp(orig_name, full_newname)
+            newargs << full_newname
+            to_delete << full_newname
+          rescue
+          end
+        end
+      end
+
+      if MRUBY_BUILD_HOST_IS_CYGWIN
+        _run archive_options, { :outfile => cygwin_filename(outfile), :objs => cygwin_filename(objfiles).map{|f| %Q["#{f}"]}.join(' '), :outdir => File.dirname(outfile).gsub('/', @build.file_separator), :outfilebase => File.basename(outfile, ".*") }
+      else
+        _run archive_options, { :outfile => filename(outfile), :objs => filename(objfiles).map{|f| %Q["#{f}"]}.join(' '), :outdir => File.dirname(outfile).gsub('/', @build.file_separator), :outfilebase => File.basename(outfile, ".*") }
+      end
+
+      to_delete.each do |d|
+        FileUtils.rm(d)
+      end
+    end
+  end
+
+  class Command::Yacc < Command
+    attr_accessor :compile_options
+
+    def initialize(build)
+      super
+      @command = 'bison'
+      @compile_options = %q[-o "%{outfile}" "%{infile}"]
+    end
+
+    def run(outfile, infile)
+      mkdir_p File.dirname(outfile)
+      _pp "YACC", infile.relative_path, outfile.relative_path
+      _run compile_options, { :outfile => filename(outfile) , :infile => filename(infile) }
+    end
+  end
+
+  class Command::Gperf < Command
+    attr_accessor :compile_options
+
+    def initialize(build)
+      super
+      @command = 'gperf'
+      @compile_options = %q[-L ANSI-C -C -p -j1 -i 1 -g -o -t -N mrb_reserved_word -k"1,3,$" "%{infile}" > "%{outfile}"]
+    end
+
+    def run(outfile, infile)
+      mkdir_p File.dirname(outfile)
+      _pp "GPERF", infile.relative_path, outfile.relative_path
+      _run compile_options, { :outfile => filename(outfile) , :infile => filename(infile) }
+    end
+  end
+
+  class Command::Git < Command
+    attr_accessor :flags
+    attr_accessor :clone_options, :pull_options, :checkout_options, :checkout_detach_options, :reset_options
+
+    def initialize(build)
+      super
+      @command = 'git'
+      @flags = %w[]
+      @clone_options = "clone %{flags} %{url} %{dir}"
+      @pull_options = "--git-dir %{repo_dir}/.git --work-tree %{repo_dir} pull"
+      @checkout_options = "--git-dir %{repo_dir}/.git --work-tree %{repo_dir} checkout %{checksum_hash}"
+      @checkout_detach_options = "--git-dir %{repo_dir}/.git --work-tree %{repo_dir} checkout --detach %{checksum_hash}"
+      @reset_options = "--git-dir %{repo_dir}/.git --work-tree %{repo_dir} reset %{checksum_hash}"
+    end
+
+    def run_clone(dir, url, _flags = [])
+      _pp "GIT", url, dir.relative_path
+      _run clone_options, { :flags => [flags, _flags].flatten.join(' '), :url => shellquote(url), :dir => shellquote(filename(dir)) }
+    end
+
+    def run_pull(dir, url)
+      _pp "GIT PULL", url, dir.relative_path
+      _run pull_options, { :repo_dir => shellquote(dir) }
+    end
+
+    def run_checkout(dir, checksum_hash)
+      _pp "GIT CHECKOUT", dir, checksum_hash
+      _run checkout_options, { :checksum_hash => checksum_hash, :repo_dir => shellquote(dir) }
+    end
+
+    def run_checkout_detach(dir, checksum_hash)
+      _pp "GIT CHECKOUT DETACH", dir, checksum_hash
+      _run checkout_detach_options, { :checksum_hash => checksum_hash, :repo_dir => shellquote(dir) }
+    end
+
+    def run_reset_hard(dir, checksum_hash)
+      _pp "GIT RESET", dir, checksum_hash
+      _run reset_options, { :checksum_hash => checksum_hash, :repo_dir => shellquote(dir) }
+    end
+
+    def commit_hash(dir)
+      `#{@command} --git-dir #{shellquote(dir +'/.git')} --work-tree #{shellquote(dir)} rev-parse --verify HEAD`.strip
+    end
+
+    def current_branch(dir)
+      `#{@command} --git-dir #{shellquote(dir + '/.git')} --work-tree #{shellquote(dir)} rev-parse --abbrev-ref HEAD`.strip
+    end
+  end
+
+  class Command::Mrbc < Command
+    attr_accessor :compile_options
+
+    def initialize(build)
+      super
+      @command = nil
+      @compile_options = "-B%{funcname} -o-"
+    end
+
+    def run(out, infiles, funcname)
+      @command ||= @build.mrbcfile
+      infiles = [infiles].flatten
+      infiles.each do |f|
+        _pp "MRBC", f.relative_path, nil, :indent => 2
+      end
+      cmd = %Q["#{filename @command}" #{@compile_options % {:funcname => funcname}} #{filename(infiles).map{|f| %Q["#{f}"]}.join(' ')}]
+      puts cmd if Rake.verbose
+      IO.popen(cmd, 'r+') do |io|
+        out.puts io.read
+      end
+      # if mrbc execution fail, drop the file
+      if $?.exitstatus != 0
+        File.delete(out.path)
+        exit(-1)
+      end
+    end
+  end
+
+  class Command::CrossTestRunner < Command
+    attr_accessor :runner_options
+    attr_accessor :verbose_flag
+    attr_accessor :flags
+
+    def initialize(build)
+      super
+      @command = nil
+      @runner_options = '%{flags} %{infile}'
+      @verbose_flag = ''
+      @flags = []
+    end
+
+    def run(testbinfile)
+      puts "TEST for " + @build.name
+      _run runner_options, { :flags => [flags, verbose_flag].flatten.join(' '), :infile => testbinfile }
+    end
+  end
+
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/lib/mruby/build/load_gems.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/lib/mruby/build/load_gems.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/lib/mruby/build/load_gems.rb	(revision 439)
@@ -0,0 +1,137 @@
+module MRuby
+  module LoadGems
+    def gembox(gemboxfile)
+      gembox = File.expand_path("#{gemboxfile}.gembox", "#{MRUBY_ROOT}/mrbgems")
+      fail "Can't find gembox '#{gembox}'" unless File.exist?(gembox)
+
+      GemBox.config = self
+      GemBox.path = gembox
+
+      instance_eval File.read(gembox)
+
+      GemBox.path = nil
+    end
+
+    def gem(gemdir, &block)
+      if gemdir.is_a?(Hash)
+        gemdir = load_special_path_gem(gemdir)
+      elsif GemBox.path && gemdir.is_a?(String)
+        gemdir = File.expand_path(gemdir, File.dirname(GemBox.path))
+      else
+        caller_dir = File.expand_path(File.dirname(caller(1,1)[0][/^(.*?):\d/,1]))
+        gemdir = File.expand_path(gemdir, caller_dir)
+      end
+
+      gemrake = File.join(gemdir, "mrbgem.rake")
+
+      fail "Can't find #{gemrake}" unless File.exist?(gemrake)
+      Gem.current = nil
+      load gemrake
+      return nil unless Gem.current
+
+      Gem.current.dir = gemdir
+      Gem.current.build = self.is_a?(MRuby::Build) ? self : MRuby::Build.current
+      Gem.current.build_config_initializer = block
+      gems << Gem.current
+
+      cxx_srcs = ['src', 'test', 'tools'].map do |subdir|
+        Dir.glob("#{Gem.current.dir}/#{subdir}/*.{cpp,cxx,cc}")
+      end.flatten
+      enable_cxx_exception unless cxx_srcs.empty?
+
+      Gem.current
+    end
+
+    def load_special_path_gem(params)
+      if params[:github]
+        params[:git] = "https://github.com/#{params[:github]}.git"
+      elsif params[:bitbucket]
+        if params[:method] == "ssh"
+          params[:git] = "git@bitbucket.org:#{params[:bitbucket]}.git"
+        else
+          params[:git] = "https://bitbucket.org/#{params[:bitbucket]}.git"
+        end
+      elsif params[:mgem]
+        mgem_list_dir = "#{gem_clone_dir}/mgem-list"
+        mgem_list_url = 'https://github.com/mruby/mgem-list.git'
+        if File.exist? mgem_list_dir
+          git.run_pull mgem_list_dir, mgem_list_url if $pull_gems
+        else
+          mkdir_p mgem_list_dir
+          git.run_clone mgem_list_dir, mgem_list_url, "--depth 1"
+        end
+
+        require 'yaml'
+
+        conf_path = "#{mgem_list_dir}/#{params[:mgem]}.gem"
+        conf_path = "#{mgem_list_dir}/mruby-#{params[:mgem]}.gem" unless File.exist? conf_path
+        fail "mgem not found: #{params[:mgem]}" unless File.exist? conf_path
+        conf = YAML.load File.read conf_path
+
+        fail "unknown mgem protocol: #{conf['protocol']}" if conf['protocol'] != 'git'
+        params[:git] = conf['repository']
+        params[:branch] = conf['branch'] if conf['branch']
+      end
+
+      if params[:core]
+        gemdir = "#{root}/mrbgems/#{params[:core]}"
+      elsif params[:git]
+        url = params[:git]
+        gemdir = "#{gem_clone_dir}/#{url.match(/([-\w]+)(\.[-\w]+|)$/).to_a[1]}"
+
+        # by default the 'master' branch is used
+        branch = params[:branch] ? params[:branch] : 'master'
+
+        lock = locks[url] if lock_enabled?
+
+        if File.exist?(gemdir)
+          if $pull_gems
+            # Jump to the top of the branch
+            git.run_checkout gemdir, branch
+            git.run_pull gemdir, url
+          elsif params[:checksum_hash]
+            git.run_checkout_detach gemdir, params[:checksum_hash]
+          elsif lock
+            git.run_checkout_detach gemdir, lock['commit']
+          end
+        else
+          options = [params[:options]] || []
+          options << "--recursive"
+          options << "--branch \"#{branch}\""
+          options << "--depth 1" unless params[:checksum_hash]
+          mkdir_p "#{gem_clone_dir}"
+          git.run_clone gemdir, url, options
+
+          # Jump to the specified commit
+          if params[:checksum_hash]
+            git.run_checkout_detach gemdir, params[:checksum_hash]
+          elsif lock
+            git.run_checkout_detach gemdir, lock['commit']
+          end
+        end
+
+        if lock_enabled?
+          @gem_dir_to_repo_url[gemdir] = url unless params[:path]
+          locks[url] = {
+            'url' => url,
+            'branch' => git.current_branch(gemdir),
+            'commit' => git.commit_hash(gemdir),
+          }
+        end
+
+        gemdir << "/#{params[:path]}" if params[:path]
+      elsif params[:path]
+        require 'pathname'
+        gemdir = Pathname.new(params[:path]).absolute? ? params[:path] : "#{root}/#{params[:path]}"
+      else
+        fail "unknown gem option #{params}"
+      end
+
+      gemdir
+    end
+
+    def enable_gems?
+      !@gems.empty?
+    end
+  end # LoadGems
+end # MRuby
Index: /EcnlProtoTool/trunk/mruby-2.1.1/lib/mruby/gem.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/lib/mruby/gem.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/lib/mruby/gem.rb	(revision 439)
@@ -0,0 +1,480 @@
+require 'forwardable'
+autoload :TSort, 'tsort'
+autoload :Shellwords, 'shellwords'
+
+module MRuby
+  module Gem
+    class << self
+      attr_accessor :current
+    end
+    LinkerConfig = Struct.new(:libraries, :library_paths, :flags, :flags_before_libraries, :flags_after_libraries)
+
+    class Specification
+      include Rake::DSL
+      extend Forwardable
+      def_delegators :@build, :filename, :objfile, :libfile, :exefile
+
+      attr_accessor :name, :dir, :build
+      alias mruby build
+      attr_accessor :build_config_initializer
+      attr_accessor :mrblib_dir, :objs_dir
+
+      attr_accessor :version
+      attr_accessor :description, :summary
+      attr_accessor :homepage
+      attr_accessor :licenses, :authors
+      alias :license= :licenses=
+      alias :author= :authors=
+
+      attr_accessor :rbfiles, :objs
+      attr_accessor :test_objs, :test_rbfiles, :test_args
+      attr_accessor :test_preload
+
+      attr_accessor :bins
+
+      attr_accessor :requirements
+      attr_reader :dependencies, :conflicts
+
+      attr_accessor :export_include_paths
+
+      attr_reader :generate_functions
+
+      attr_block MRuby::Build::COMMANDS
+
+      attr_accessor :post_build_event, :current_target
+
+      def initialize(name, &block)
+        @name = name
+        @initializer = block
+        @version = "0.0.0"
+        @mrblib_dir = "mrblib"
+        @objs_dir = "src"
+        MRuby::Gem.current = self
+        @post_build_event = nil
+      end
+
+      def setup
+        return if defined?(@linker)  # return if already set up
+
+        MRuby::Gem.current = self
+        MRuby::Build::COMMANDS.each do |command|
+          instance_variable_set("@#{command}", @build.send(command).clone)
+        end
+        @linker = LinkerConfig.new([], [], [], [], [])
+
+        @rbfiles = Dir.glob("#{@dir}/#{@mrblib_dir}/**/*.rb").sort
+        @objs = Dir.glob("#{@dir}/#{@objs_dir}/*.{c,cpp,cxx,cc,m,asm,s,S}").map do |f|
+          objfile(f.relative_path_from(@dir).to_s.pathmap("#{build_dir}/%X"))
+        end
+
+        @test_rbfiles = Dir.glob("#{dir}/test/**/*.rb").sort
+        @test_objs = Dir.glob("#{dir}/test/*.{c,cpp,cxx,cc,m,asm,s,S}").map do |f|
+          objfile(f.relative_path_from(dir).to_s.pathmap("#{build_dir}/%X"))
+        end
+        @custom_test_init = !@test_objs.empty?
+        @test_preload = nil # 'test/assert.rb'
+        @test_args = {}
+
+        @bins = []
+
+        @requirements = []
+        @dependencies, @conflicts = [], []
+        @export_include_paths = []
+        @export_include_paths << "#{dir}/include" if File.directory? "#{dir}/include"
+
+        instance_eval(&@initializer)
+
+        @generate_functions = !(@rbfiles.empty? && @objs.empty?)
+        @objs << objfile("#{build_dir}/gem_init") if @generate_functions
+
+        if !name || !licenses || !authors
+          fail "#{name || dir} required to set name, license(s) and author(s)"
+        end
+
+        build.libmruby_objs << @objs
+
+        instance_eval(&@build_config_initializer) if @build_config_initializer
+
+        repo_url = build.gem_dir_to_repo_url[dir]
+        build.locks[repo_url]['version'] = version if repo_url
+      end
+
+      def setup_compilers
+        compilers.each do |compiler|
+          compiler.define_rules build_dir, "#{dir}"
+          compiler.defines << %Q[MRBGEM_#{funcname.upcase}_VERSION=#{version}]
+          compiler.include_paths << "#{dir}/include" if File.directory? "#{dir}/include"
+        end
+
+        define_gem_init_builder if @generate_functions
+      end
+
+      def for_windows?
+        if build.kind_of?(MRuby::CrossBuild)
+          return %w(x86_64-w64-mingw32 i686-w64-mingw32).include?(build.host_target)
+        elsif build.kind_of?(MRuby::Build)
+          return ('A'..'Z').to_a.any? { |vol| Dir.exist?("#{vol}:") }
+        end
+        return false
+      end
+
+      def add_dependency(name, *requirements)
+        default_gem = requirements.last.kind_of?(Hash) ? requirements.pop : nil
+        requirements = ['>= 0.0.0'] if requirements.empty?
+        requirements.flatten!
+        @dependencies << {:gem => name, :requirements => requirements, :default => default_gem}
+      end
+
+      def add_test_dependency(*args)
+        add_dependency(*args) if build.test_enabled? || build.bintest_enabled?
+      end
+
+      def add_conflict(name, *req)
+        @conflicts << {:gem => name, :requirements => req.empty? ? nil : req}
+      end
+
+      def build_dir
+        "#{build.build_dir}/mrbgems/#{name}"
+      end
+
+      def test_rbireps
+        "#{build_dir}/gem_test.c"
+      end
+
+      def search_package(name, version_query=nil)
+        package_query = name
+        package_query += " #{version_query}" if version_query
+        _pp "PKG-CONFIG", package_query
+        escaped_package_query = Shellwords.escape(package_query)
+        if system("pkg-config --exists #{escaped_package_query}")
+          cc.flags += [`pkg-config --cflags #{escaped_package_query}`.strip]
+          cxx.flags += [`pkg-config --cflags #{escaped_package_query}`.strip]
+          linker.flags_before_libraries += [`pkg-config --libs #{escaped_package_query}`.strip]
+          true
+        else
+          false
+        end
+      end
+
+      def funcname
+        @funcname ||= @name.gsub('-', '_')
+      end
+
+      def compilers
+        MRuby::Build::COMPILERS.map do |c|
+          instance_variable_get("@#{c}")
+        end
+      end
+
+      def call_post_build_event(target)
+        @current_target = target
+        instance_eval(&@post_build_event) if @post_build_event
+        @current_target = nil
+      end
+
+      def define_gem_init_builder
+        file objfile("#{build_dir}/gem_init") => [ "#{build_dir}/gem_init.c", File.join(dir, "mrbgem.rake") ]
+        file "#{build_dir}/gem_init.c" => [build.mrbcfile, __FILE__] + [rbfiles].flatten do |t|
+          mkdir_p build_dir
+          generate_gem_init("#{build_dir}/gem_init.c")
+        end
+      end
+
+      def generate_gem_init(fname)
+        open(fname, 'w') do |f|
+          print_gem_init_header f
+          build.mrbc.run f, rbfiles, "gem_mrblib_irep_#{funcname}" unless rbfiles.empty?
+          f.puts %Q[void mrb_#{funcname}_gem_init(mrb_state *mrb);]
+          f.puts %Q[void mrb_#{funcname}_gem_final(mrb_state *mrb);]
+          f.puts %Q[]
+          f.puts %Q[void GENERATED_TMP_mrb_#{funcname}_gem_init(mrb_state *mrb) {]
+          f.puts %Q[  int ai = mrb_gc_arena_save(mrb);]
+          f.puts %Q[  mrb_#{funcname}_gem_init(mrb);] if objs != [objfile("#{build_dir}/gem_init")]
+          unless rbfiles.empty?
+            f.puts %Q[  mrb_load_irep(mrb, gem_mrblib_irep_#{funcname});]
+            f.puts %Q[  if (mrb->exc) {]
+            f.puts %Q[    mrb_print_error(mrb);]
+            f.puts %Q[    mrb_close(mrb);]
+            f.puts %Q[    exit(EXIT_FAILURE);]
+            f.puts %Q[  }]
+          end
+          f.puts %Q[  mrb_gc_arena_restore(mrb, ai);]
+          f.puts %Q[}]
+          f.puts %Q[]
+          f.puts %Q[void GENERATED_TMP_mrb_#{funcname}_gem_final(mrb_state *mrb) {]
+          f.puts %Q[  mrb_#{funcname}_gem_final(mrb);] if objs != [objfile("#{build_dir}/gem_init")]
+          f.puts %Q[}]
+        end
+      end # generate_gem_init
+
+      def print_gem_comment(f)
+        f.puts %Q[/*]
+        f.puts %Q[ * This file is loading the irep]
+        f.puts %Q[ * Ruby GEM code.]
+        f.puts %Q[ *]
+        f.puts %Q[ * IMPORTANT:]
+        f.puts %Q[ *   This file was generated!]
+        f.puts %Q[ *   All manual changes will get lost.]
+        f.puts %Q[ */]
+      end
+
+      def print_gem_init_header(f)
+        print_gem_comment(f)
+        f.puts %Q[#include <stdlib.h>] unless rbfiles.empty?
+        f.puts %Q[#include <mruby.h>]
+        f.puts %Q[#include <mruby/irep.h>] unless rbfiles.empty?
+      end
+
+      def print_gem_test_header(f)
+        print_gem_comment(f)
+        f.puts %Q[#include <stdio.h>]
+        f.puts %Q[#include <stdlib.h>]
+        f.puts %Q[#include <mruby.h>]
+        f.puts %Q[#include <mruby/irep.h>]
+        f.puts %Q[#include <mruby/variable.h>]
+        f.puts %Q[#include <mruby/hash.h>] unless test_args.empty?
+      end
+
+      def test_dependencies
+        [@name]
+      end
+
+      def custom_test_init?
+        @custom_test_init
+      end
+
+      def version_ok?(req_versions)
+        req_versions.map do |req|
+          cmp, ver = req.split
+          cmp_result = Version.new(version) <=> Version.new(ver)
+          case cmp
+          when '=' then cmp_result == 0
+          when '!=' then cmp_result != 0
+          when '>' then cmp_result == 1
+          when '<' then cmp_result == -1
+          when '>=' then cmp_result >= 0
+          when '<=' then cmp_result <= 0
+          when '~>'
+            Version.new(version).twiddle_wakka_ok?(Version.new(ver))
+          else
+            fail "Comparison not possible with '#{cmp}'"
+          end
+        end.all?
+      end
+    end # Specification
+
+    class Version
+      include Comparable
+      include Enumerable
+
+      def <=>(other)
+        ret = 0
+        own = to_enum
+
+        other.each do |oth|
+          begin
+            ret = own.next <=> oth
+          rescue StopIteration
+            ret = 0 <=> oth
+          end
+
+          break unless ret == 0
+        end
+
+        ret
+      end
+
+      # ~> compare algorithm
+      #
+      # Example:
+      #    ~> 2     means >= 2.0.0 and < 3.0.0
+      #    ~> 2.2   means >= 2.2.0 and < 3.0.0
+      #    ~> 2.2.2 means >= 2.2.2 and < 2.3.0
+      def twiddle_wakka_ok?(other)
+        gr_or_eql = (self <=> other) >= 0
+        still_major_or_minor = (self <=> other.skip_major_or_minor) < 0
+        gr_or_eql and still_major_or_minor
+      end
+
+      def skip_major_or_minor
+        a = @ary.dup
+        a << 0 if a.size == 1 # ~> 2 can also be represented as ~> 2.0
+        a.slice!(-1)
+        a[-1] = a[-1].succ
+        a
+      end
+
+      def initialize(str)
+        @str = str
+        @ary = @str.split('.').map(&:to_i)
+      end
+
+      def each(&block); @ary.each(&block); end
+      def [](index); @ary[index]; end
+      def []=(index, value)
+        @ary[index] = value
+        @str = @ary.join('.')
+      end
+      def slice!(index)
+        @ary.slice!(index)
+        @str = @ary.join('.')
+      end
+    end # Version
+
+    class List
+      include Enumerable
+
+      def initialize
+        @ary = []
+      end
+
+      def each(&b)
+        @ary.each(&b)
+      end
+
+      def <<(gem)
+        unless @ary.detect {|g| g.dir == gem.dir }
+          @ary << gem
+        else
+          # GEM was already added to this list
+        end
+      end
+
+      def empty?
+        @ary.empty?
+      end
+
+      def default_gem_params dep
+        if dep[:default]; dep
+        elsif File.exist? "#{MRUBY_ROOT}/mrbgems/#{dep[:gem]}" # check core
+          { :gem => dep[:gem], :default => { :core => dep[:gem] } }
+        else # fallback to mgem-list
+          { :gem => dep[:gem], :default => { :mgem => dep[:gem] } }
+        end
+      end
+
+      def generate_gem_table build
+        gem_table = each_with_object({}) { |spec, h| h[spec.name] = spec }
+
+        default_gems = {}
+        each do |g|
+          g.dependencies.each do |dep|
+            default_gems[dep[:gem]] ||= default_gem_params(dep)
+          end
+        end
+
+        until default_gems.empty?
+          def_name, def_gem = default_gems.shift
+          next if gem_table[def_name]
+
+          spec = gem_table[def_name] = build.gem(def_gem[:default])
+          fail "Invalid gem name: #{spec.name} (Expected: #{def_name})" if spec.name != def_name
+          spec.setup
+
+          spec.dependencies.each do |dep|
+            default_gems[dep[:gem]] ||= default_gem_params(dep)
+          end
+        end
+
+        each do |g|
+          g.dependencies.each do |dep|
+            name = dep[:gem]
+            req_versions = dep[:requirements]
+            dep_g = gem_table[name]
+
+            # check each GEM dependency against all available GEMs
+            if dep_g.nil?
+              fail "The GEM '#{g.name}' depends on the GEM '#{name}' but it could not be found"
+            end
+            unless dep_g.version_ok? req_versions
+              fail "#{name} version should be #{req_versions.join(' and ')} but was '#{dep_g.version}'"
+            end
+          end
+
+          cfls = g.conflicts.select { |c|
+            cfl_g = gem_table[c[:gem]]
+            cfl_g and cfl_g.version_ok?(c[:requirements] || ['>= 0.0.0'])
+          }.map { |c| "#{c[:gem]}(#{gem_table[c[:gem]].version})" }
+          fail "Conflicts of gem `#{g.name}` found: #{cfls.join ', '}" unless cfls.empty?
+        end
+
+        gem_table
+      end
+
+      def tsort_dependencies ary, table, all_dependency_listed = false
+        unless all_dependency_listed
+          left = ary.dup
+          until left.empty?
+            v = left.pop
+            table[v].dependencies.each do |dep|
+              left.push dep[:gem]
+              ary.push dep[:gem]
+            end
+          end
+        end
+
+        ary.uniq!
+        table.instance_variable_set :@root_gems, ary
+        class << table
+          include TSort
+          def tsort_each_node &b
+            @root_gems.each &b
+          end
+
+          def tsort_each_child(n, &b)
+            fetch(n).dependencies.each do |v|
+              b.call v[:gem]
+            end
+          end
+        end
+
+        begin
+          table.tsort.map { |v| table[v] }
+        rescue TSort::Cyclic => e
+          fail "Circular mrbgem dependency found: #{e.message}"
+        end
+      end
+
+      def check(build)
+        gem_table = generate_gem_table build
+
+        @ary = tsort_dependencies gem_table.keys, gem_table, true
+
+        each(&:setup_compilers)
+
+        each do |g|
+          import_include_paths(g)
+        end
+      end
+
+      def import_include_paths(g)
+        gem_table = each_with_object({}) { |spec, h| h[spec.name] = spec }
+
+        g.dependencies.each do |dep|
+          dep_g = gem_table[dep[:gem]]
+          # We can do recursive call safely
+          # as circular dependency has already detected in the caller.
+          import_include_paths(dep_g)
+
+          dep_g.export_include_paths.uniq!
+          g.compilers.each do |compiler|
+            compiler.include_paths += dep_g.export_include_paths
+            g.export_include_paths += dep_g.export_include_paths
+            compiler.include_paths.uniq!
+            g.export_include_paths.uniq!
+          end
+        end
+      end
+    end # List
+  end # Gem
+
+  GemBox = Object.new
+  class << GemBox
+    attr_accessor :path
+
+    def new(&block); block.call(self); end
+    def config=(obj); @config = obj; end
+    def gem(gemdir, &block); @config.gem(gemdir, &block); end
+    def gembox(gemfile); @config.gembox(gemfile); end
+  end # GemBox
+end # MRuby
Index: /EcnlProtoTool/trunk/mruby-2.1.1/lib/mruby/lockfile.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/lib/mruby/lockfile.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/lib/mruby/lockfile.rb	(revision 439)
@@ -0,0 +1,81 @@
+autoload :YAML, 'yaml'
+
+module MRuby
+  autoload :Source, 'mruby/source'
+
+  class Lockfile
+    class << self
+      def enable
+        @enabled = true
+      end
+
+      def disable
+        @enabled = false
+      end
+
+      def enabled?
+        @enabled
+      end
+
+      def build(target_name)
+        instance.build(target_name)
+      end
+
+      def write
+        instance.write if enabled?
+      end
+
+      def instance
+        @instance ||= new("#{MRUBY_CONFIG}.lock")
+      end
+    end
+
+    def initialize(filename)
+      @filename = filename
+    end
+
+    def build(target_name)
+      read[target_name] ||= {}
+    end
+
+    def write
+      locks = {"mruby_version" => mruby}
+      locks["builds"] = @builds if @builds
+      File.write(@filename, YAML.dump(locks))
+    end
+
+    private
+
+    def read
+      @builds ||= if File.exist?(@filename)
+                    YAML.load_file(@filename)["builds"] || {}
+                  else
+                    {}
+                  end
+    end
+
+    def shellquote(s)
+      if ENV['OS'] == 'Windows_NT'
+        "\"#{s}\""
+      else
+        "'#{s}'"
+      end
+    end
+
+    def mruby
+      mruby = {
+        'version' => MRuby::Source::MRUBY_VERSION,
+        'release_no' => MRuby::Source::MRUBY_RELEASE_NO,
+      }
+
+      git_dir = "#{MRUBY_ROOT}/.git"
+      if File.directory?(git_dir)
+        mruby['git_commit'] = `git --git-dir #{shellquote(git_dir)} --work-tree #{shellquote(MRUBY_ROOT)} rev-parse --verify HEAD`.strip
+      end
+
+      mruby
+    end
+
+    enable
+  end
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/lib/mruby/source.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/lib/mruby/source.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/lib/mruby/source.rb	(revision 439)
@@ -0,0 +1,32 @@
+require "pathname"
+
+module MRuby
+  module Source
+    # MRuby's source root directory
+    ROOT = Pathname.new(File.expand_path('../../../',__FILE__))
+
+    # Reads a constant defined at version.h
+    MRUBY_READ_VERSION_CONSTANT = Proc.new do |name|
+      ROOT.join('include','mruby','version.h').read.match(/^#define #{name} +"?([\w\. ]+)"?\r?$/)[1]
+    end
+
+    MRUBY_RUBY_VERSION = MRUBY_READ_VERSION_CONSTANT['MRUBY_RUBY_VERSION']
+    MRUBY_RUBY_ENGINE = MRUBY_READ_VERSION_CONSTANT['MRUBY_RUBY_ENGINE']
+
+    MRUBY_RELEASE_MAJOR = Integer(MRUBY_READ_VERSION_CONSTANT['MRUBY_RELEASE_MAJOR'])
+    MRUBY_RELEASE_MINOR = Integer(MRUBY_READ_VERSION_CONSTANT['MRUBY_RELEASE_MINOR'])
+    MRUBY_RELEASE_TEENY = Integer(MRUBY_READ_VERSION_CONSTANT['MRUBY_RELEASE_TEENY'])
+
+    MRUBY_VERSION = [MRUBY_RELEASE_MAJOR,MRUBY_RELEASE_MINOR,MRUBY_RELEASE_TEENY].join('.')
+    MRUBY_RELEASE_NO = (MRUBY_RELEASE_MAJOR * 100 * 100 + MRUBY_RELEASE_MINOR * 100 + MRUBY_RELEASE_TEENY)
+
+    MRUBY_RELEASE_YEAR = Integer(MRUBY_READ_VERSION_CONSTANT['MRUBY_RELEASE_YEAR'])
+    MRUBY_RELEASE_MONTH = Integer(MRUBY_READ_VERSION_CONSTANT['MRUBY_RELEASE_MONTH'])
+    MRUBY_RELEASE_DAY = Integer(MRUBY_READ_VERSION_CONSTANT['MRUBY_RELEASE_DAY'])
+    MRUBY_RELEASE_DATE = [MRUBY_RELEASE_YEAR,MRUBY_RELEASE_MONTH,MRUBY_RELEASE_DAY].join('.')
+
+    MRUBY_BIRTH_YEAR = Integer(MRUBY_READ_VERSION_CONSTANT['MRUBY_BIRTH_YEAR'])
+
+    MRUBY_AUTHOR = MRUBY_READ_VERSION_CONSTANT['MRUBY_AUTHOR']
+  end
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/minirake
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/minirake	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/minirake	(revision 439)
@@ -0,0 +1,2 @@
+#! /usr/bin/env ruby
+exec "rake", *ARGV
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/default.gembox
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/default.gembox	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/default.gembox	(revision 439)
@@ -0,0 +1,94 @@
+MRuby::GemBox.new do |conf|
+  # Meta-programming features
+  conf.gem :core => "mruby-metaprog"
+
+  # Use standard IO/File class
+  conf.gem :core => "mruby-io"
+
+  # Use standard Array#pack, String#unpack methods
+  conf.gem :core => "mruby-pack"
+
+  # Use standard Kernel#sprintf method
+  conf.gem :core => "mruby-sprintf"
+
+  # Use standard print/puts/p
+  conf.gem :core => "mruby-print"
+
+  # Use standard Math module
+  conf.gem :core => "mruby-math"
+
+  # Use standard Time class
+  conf.gem :core => "mruby-time"
+
+  # Use standard Struct class
+  conf.gem :core => "mruby-struct"
+
+  # Use Comparable module extension
+  conf.gem :core => "mruby-compar-ext"
+
+  # Use Enumerable module extension
+  conf.gem :core => "mruby-enum-ext"
+
+  # Use String class extension
+  conf.gem :core => "mruby-string-ext"
+
+  # Use Numeric class extension
+  conf.gem :core => "mruby-numeric-ext"
+
+  # Use Array class extension
+  conf.gem :core => "mruby-array-ext"
+
+  # Use Hash class extension
+  conf.gem :core => "mruby-hash-ext"
+
+  # Use Range class extension
+  conf.gem :core => "mruby-range-ext"
+
+  # Use Proc class extension
+  conf.gem :core => "mruby-proc-ext"
+
+  # Use Symbol class extension
+  conf.gem :core => "mruby-symbol-ext"
+
+  # Use Random class
+  conf.gem :core => "mruby-random"
+
+  # Use Object class extension
+  conf.gem :core => "mruby-object-ext"
+
+  # Use ObjectSpace class
+  conf.gem :core => "mruby-objectspace"
+
+  # Use Fiber class
+  conf.gem :core => "mruby-fiber"
+
+  # Use Enumerator class (require mruby-fiber)
+  conf.gem :core => "mruby-enumerator"
+
+  # Use Enumerator::Lazy class (require mruby-enumerator)
+  conf.gem :core => "mruby-enum-lazy"
+
+  # Use toplevel object (main) methods extension
+  conf.gem :core => "mruby-toplevel-ext"
+
+  # Generate mirb command
+  conf.gem :core => "mruby-bin-mirb"
+
+  # Generate mruby command
+  conf.gem :core => "mruby-bin-mruby"
+
+  # Generate mruby-strip command
+  conf.gem :core => "mruby-bin-strip"
+
+  # Use Kernel module extension
+  conf.gem :core => "mruby-kernel-ext"
+
+  # Use class/module extension
+  conf.gem :core => "mruby-class-ext"
+
+  # Use Method/UnboundMethod class
+  conf.gem :core => "mruby-method"
+
+  # Use mruby-compiler to build other mrbgems
+  conf.gem :core => "mruby-compiler"
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/full-core.gembox
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/full-core.gembox	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/full-core.gembox	(revision 439)
@@ -0,0 +1,9 @@
+MRuby::GemBox.new do |conf|
+  conf.gem :core => "mruby-sprintf"
+  conf.gem :core => "mruby-print"
+
+  Dir.glob("#{root}/mrbgems/mruby-*/mrbgem.rake") do |x|
+    g = File.basename File.dirname x
+    conf.gem :core => g unless g =~ /^mruby-(print|sprintf|bin-debugger|test)$/
+  end
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-array-ext/mrbgem.rake
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-array-ext/mrbgem.rake	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-array-ext/mrbgem.rake	(revision 439)
@@ -0,0 +1,5 @@
+MRuby::Gem::Specification.new('mruby-array-ext') do |spec|
+  spec.license = 'MIT'
+  spec.author  = 'mruby developers'
+  spec.summary = 'Array class extension'
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-array-ext/mrblib/array.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-array-ext/mrblib/array.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-array-ext/mrblib/array.rb	(revision 439)
@@ -0,0 +1,946 @@
+class Array
+  ##
+  # call-seq:
+  #    ary.uniq!                -> ary or nil
+  #    ary.uniq! { |item| ... } -> ary or nil
+  #
+  # Removes duplicate elements from +self+.
+  # Returns <code>nil</code> if no changes are made (that is, no
+  # duplicates are found).
+  #
+  #    a = [ "a", "a", "b", "b", "c" ]
+  #    a.uniq!   #=> ["a", "b", "c"]
+  #    b = [ "a", "b", "c" ]
+  #    b.uniq!   #=> nil
+  #    c = [["student","sam"], ["student","george"], ["teacher","matz"]]
+  #    c.uniq! { |s| s.first } # => [["student", "sam"], ["teacher", "matz"]]
+  #
+  def uniq!(&block)
+    hash = {}
+    if block
+      self.each do |val|
+        key = block.call(val)
+        hash[key] = val unless hash.key?(key)
+      end
+      result = hash.values
+    else
+      hash = {}
+      self.each do |val|
+        hash[val] = val
+      end
+      result = hash.keys
+    end
+    if result.size == self.size
+      nil
+    else
+      self.replace(result)
+    end
+  end
+
+  ##
+  # call-seq:
+  #    ary.uniq                -> new_ary
+  #    ary.uniq { |item| ... } -> new_ary
+  #
+  # Returns a new array by removing duplicate values in +self+.
+  #
+  #    a = [ "a", "a", "b", "b", "c" ]
+  #    a.uniq   #=> ["a", "b", "c"]
+  #
+  #    b = [["student","sam"], ["student","george"], ["teacher","matz"]]
+  #    b.uniq { |s| s.first } # => [["student", "sam"], ["teacher", "matz"]]
+  #
+  def uniq(&block)
+    ary = self.dup
+    ary.uniq!(&block)
+    ary
+  end
+
+  ##
+  # call-seq:
+  #    ary - other_ary    -> new_ary
+  #
+  # Array Difference---Returns a new array that is a copy of
+  # the original array, removing any items that also appear in
+  # <i>other_ary</i>. (If you need set-like behavior, see the
+  # library class Set.)
+  #
+  #    [ 1, 1, 2, 2, 3, 3, 4, 5 ] - [ 1, 2, 4 ]  #=>  [ 3, 3, 5 ]
+  #
+  def -(elem)
+    raise TypeError, "can't convert #{elem.class} into Array" unless elem.class == Array
+
+    hash = {}
+    array = []
+    idx = 0
+    len = elem.size
+    while idx < len
+      hash[elem[idx]] = true
+      idx += 1
+    end
+    idx = 0
+    len = size
+    while idx < len
+      v = self[idx]
+      array << v unless hash[v]
+      idx += 1
+    end
+    array
+  end
+
+  ##
+  # call-seq:
+  #    ary.difference(other_ary1, other_ary2, ...)   -> new_ary
+  #
+  # Returns a new array that is a copy of the original array, removing all
+  # occurrences of any item that also appear in +other_ary+. The order is
+  # preserved from the original array.
+  #
+  def difference(*args)
+    ary = self
+    args.each do |x|
+      ary = ary - x
+    end
+    ary
+  end
+
+  ##
+  # call-seq:
+  #    ary | other_ary     -> new_ary
+  #
+  # Set Union---Returns a new array by joining this array with
+  # <i>other_ary</i>, removing duplicates.
+  #
+  #    [ "a", "b", "c" ] | [ "c", "d", "a" ]
+  #           #=> [ "a", "b", "c", "d" ]
+  #
+  def |(elem)
+    raise TypeError, "can't convert #{elem.class} into Array" unless elem.class == Array
+
+    ary = self + elem
+    ary.uniq! or ary
+  end
+
+  ##
+  # call-seq:
+  #    ary.union(other_ary,...)  -> new_ary
+  #
+  # Set Union---Returns a new array by joining this array with
+  # <i>other_ary</i>, removing duplicates.
+  #
+  #    ["a", "b", "c"].union(["c", "d", "a"], ["a", "c", "e"])
+  #           #=> ["a", "b", "c", "d", "e"]
+  #
+  def union(*args)
+    ary = self.dup
+    args.each do |x|
+      ary.concat(x)
+      ary.uniq!
+    end
+    ary
+  end
+
+  ##
+  # call-seq:
+  #    ary & other_ary      -> new_ary
+  #
+  # Set Intersection---Returns a new array
+  # containing elements common to the two arrays, with no duplicates.
+  #
+  #    [ 1, 1, 3, 5 ] & [ 1, 2, 3 ]   #=> [ 1, 3 ]
+  #
+  def &(elem)
+    raise TypeError, "can't convert #{elem.class} into Array" unless elem.class == Array
+
+    hash = {}
+    array = []
+    idx = 0
+    len = elem.size
+    while idx < len
+      hash[elem[idx]] = true
+      idx += 1
+    end
+    idx = 0
+    len = size
+    while idx < len
+      v = self[idx]
+      if hash[v]
+        array << v
+        hash.delete v
+      end
+      idx += 1
+    end
+    array
+  end
+
+  ##
+  # call-seq:
+  #    ary.intersection(other_ary,...)  -> new_ary
+  #
+  # Set Intersection---Returns a new array containing elements common to
+  # this array and <i>other_ary</i>s, removing duplicates. The order is
+  # preserved from the original array.
+  #
+  #    [1, 2, 3].intersection([3, 4, 1], [1, 3, 5])  #=> [1, 3]
+  #
+  def intersection(*args)
+    ary = self
+    args.each do |x|
+      ary = ary & x
+    end
+    ary
+  end
+
+  ##
+  # call-seq:
+  #    ary.flatten -> new_ary
+  #    ary.flatten(level) -> new_ary
+  #
+  # Returns a new array that is a one-dimensional flattening of this
+  # array (recursively). That is, for every element that is an array,
+  # extract its elements into the new array.  If the optional
+  # <i>level</i> argument determines the level of recursion to flatten.
+  #
+  #    s = [ 1, 2, 3 ]           #=> [1, 2, 3]
+  #    t = [ 4, 5, 6, [7, 8] ]   #=> [4, 5, 6, [7, 8]]
+  #    a = [ s, t, 9, 10 ]       #=> [[1, 2, 3], [4, 5, 6, [7, 8]], 9, 10]
+  #    a.flatten                 #=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
+  #    a = [ 1, 2, [3, [4, 5] ] ]
+  #    a.flatten(1)              #=> [1, 2, 3, [4, 5]]
+  #
+  def flatten(depth=nil)
+    res = dup
+    res.flatten! depth
+    res
+  end
+
+  ##
+  # call-seq:
+  #    ary.flatten!        -> ary or nil
+  #    ary.flatten!(level) -> array or nil
+  #
+  # Flattens +self+ in place.
+  # Returns <code>nil</code> if no modifications were made (i.e.,
+  # <i>ary</i> contains no subarrays.)  If the optional <i>level</i>
+  # argument determines the level of recursion to flatten.
+  #
+  #    a = [ 1, 2, [3, [4, 5] ] ]
+  #    a.flatten!   #=> [1, 2, 3, 4, 5]
+  #    a.flatten!   #=> nil
+  #    a            #=> [1, 2, 3, 4, 5]
+  #    a = [ 1, 2, [3, [4, 5] ] ]
+  #    a.flatten!(1) #=> [1, 2, 3, [4, 5]]
+  #
+  def flatten!(depth=nil)
+    modified = false
+    ar = []
+    idx = 0
+    len = size
+    while idx < len
+      e = self[idx]
+      if e.is_a?(Array) && (depth.nil? || depth > 0)
+        ar += e.flatten(depth.nil? ? nil : depth - 1)
+        modified = true
+      else
+        ar << e
+      end
+      idx += 1
+    end
+    if modified
+      self.replace(ar)
+    else
+      nil
+    end
+  end
+
+  ##
+  # call-seq:
+  #    ary.compact     -> new_ary
+  #
+  # Returns a copy of +self+ with all +nil+ elements removed.
+  #
+  #    [ "a", nil, "b", nil, "c", nil ].compact
+  #                      #=> [ "a", "b", "c" ]
+  #
+  def compact
+    result = self.dup
+    result.compact!
+    result
+  end
+
+  ##
+  # call-seq:
+  #    ary.compact!    -> ary  or  nil
+  #
+  # Removes +nil+ elements from the array.
+  # Returns +nil+ if no changes were made, otherwise returns
+  # <i>ary</i>.
+  #
+  #    [ "a", nil, "b", nil, "c" ].compact! #=> [ "a", "b", "c" ]
+  #    [ "a", "b", "c" ].compact!           #=> nil
+  #
+  def compact!
+    result = self.select { |e| !e.nil? }
+    if result.size == self.size
+      nil
+    else
+      self.replace(result)
+    end
+  end
+
+  # for efficiency
+  def reverse_each(&block)
+    return to_enum :reverse_each unless block
+
+    i = self.size - 1
+    while i>=0
+      block.call(self[i])
+      i -= 1
+    end
+    self
+  end
+
+  ##
+  #  call-seq:
+  #     ary.fetch(index)                    -> obj
+  #     ary.fetch(index, default)           -> obj
+  #     ary.fetch(index) { |index| block }  -> obj
+  #
+  #  Tries to return the element at position +index+, but throws an IndexError
+  #  exception if the referenced +index+ lies outside of the array bounds.  This
+  #  error can be prevented by supplying a second argument, which will act as a
+  #  +default+ value.
+  #
+  #  Alternatively, if a block is given it will only be executed when an
+  #  invalid +index+ is referenced.
+  #
+  #  Negative values of +index+ count from the end of the array.
+  #
+  #     a = [ 11, 22, 33, 44 ]
+  #     a.fetch(1)               #=> 22
+  #     a.fetch(-1)              #=> 44
+  #     a.fetch(4, 'cat')        #=> "cat"
+  #     a.fetch(100) { |i| puts "#{i} is out of bounds" }
+  #                              #=> "100 is out of bounds"
+  #
+
+  def fetch(n, ifnone=NONE, &block)
+    warn "block supersedes default value argument" if !n.nil? && ifnone != NONE && block
+
+    idx = n
+    if idx < 0
+      idx += size
+    end
+    if idx < 0 || size <= idx
+      return block.call(n) if block
+      if ifnone == NONE
+        raise IndexError, "index #{n} outside of array bounds: #{-size}...#{size}"
+      end
+      return ifnone
+    end
+    self[idx]
+  end
+
+  ##
+  #  call-seq:
+  #     ary.fill(obj)                                 -> ary
+  #     ary.fill(obj, start [, length])               -> ary
+  #     ary.fill(obj, range )                         -> ary
+  #     ary.fill { |index| block }                    -> ary
+  #     ary.fill(start [, length] ) { |index| block } -> ary
+  #     ary.fill(range) { |index| block }             -> ary
+  #
+  #  The first three forms set the selected elements of +self+ (which
+  #  may be the entire array) to +obj+.
+  #
+  #  A +start+ of +nil+ is equivalent to zero.
+  #
+  #  A +length+ of +nil+ is equivalent to the length of the array.
+  #
+  #  The last three forms fill the array with the value of the given block,
+  #  which is passed the absolute index of each element to be filled.
+  #
+  #  Negative values of +start+ count from the end of the array, where +-1+ is
+  #  the last element.
+  #
+  #     a = [ "a", "b", "c", "d" ]
+  #     a.fill("x")              #=> ["x", "x", "x", "x"]
+  #     a.fill("w", -1)          #=> ["x", "x", "x", "w"]
+  #     a.fill("z", 2, 2)        #=> ["x", "x", "z", "z"]
+  #     a.fill("y", 0..1)        #=> ["y", "y", "z", "z"]
+  #     a.fill { |i| i*i }       #=> [0, 1, 4, 9]
+  #     a.fill(-2) { |i| i*i*i } #=> [0, 1, 8, 27]
+  #     a.fill(1, 2) { |i| i+1 } #=> [0, 2, 3, 27]
+  #     a.fill(0..1) { |i| i+1 } #=> [1, 2, 3, 27]
+  #
+
+  def fill(arg0=nil, arg1=nil, arg2=nil, &block)
+    if arg0.nil? && arg1.nil? && arg2.nil? && !block
+      raise ArgumentError, "wrong number of arguments (0 for 1..3)"
+    end
+
+    beg = len = 0
+    ary = []
+    if block
+      if arg0.nil? && arg1.nil? && arg2.nil?
+        # ary.fill { |index| block }                    -> ary
+        beg = 0
+        len = self.size
+      elsif !arg0.nil? && arg0.kind_of?(Range)
+        # ary.fill(range) { |index| block }             -> ary
+        beg = arg0.begin
+        beg += self.size if beg < 0
+        len = arg0.end
+        len += self.size if len < 0
+        len += 1 unless arg0.exclude_end?
+      elsif !arg0.nil?
+        # ary.fill(start [, length] ) { |index| block } -> ary
+        beg = arg0
+        beg += self.size if beg < 0
+        if arg1.nil?
+          len = self.size
+        else
+          len = arg0 + arg1
+        end
+      end
+    else
+      if !arg0.nil? && arg1.nil? && arg2.nil?
+        # ary.fill(obj)                                 -> ary
+        beg = 0
+        len = self.size
+      elsif !arg0.nil? && !arg1.nil? && arg1.kind_of?(Range)
+        # ary.fill(obj, range )                         -> ary
+        beg = arg1.begin
+        beg += self.size if beg < 0
+        len = arg1.end
+        len += self.size if len < 0
+        len += 1 unless arg1.exclude_end?
+      elsif !arg0.nil? && !arg1.nil?
+        # ary.fill(obj, start [, length])               -> ary
+        beg = arg1
+        beg += self.size if beg < 0
+        if arg2.nil?
+          len = self.size
+        else
+          len = beg + arg2
+        end
+      end
+    end
+
+    i = beg
+    if block
+      while i < len
+        self[i] = block.call(i)
+        i += 1
+      end
+    else
+      while i < len
+        self[i] = arg0
+        i += 1
+      end
+    end
+    self
+  end
+
+  ##
+  #  call-seq:
+  #     ary.rotate(count=1)    -> new_ary
+  #
+  #  Returns a new array by rotating +self+ so that the element at +count+ is
+  #  the first element of the new array.
+  #
+  #  If +count+ is negative then it rotates in the opposite direction, starting
+  #  from the end of +self+ where +-1+ is the last element.
+  #
+  #     a = [ "a", "b", "c", "d" ]
+  #     a.rotate         #=> ["b", "c", "d", "a"]
+  #     a                #=> ["a", "b", "c", "d"]
+  #     a.rotate(2)      #=> ["c", "d", "a", "b"]
+  #     a.rotate(-3)     #=> ["b", "c", "d", "a"]
+
+  def rotate(count=1)
+    ary = []
+    len = self.length
+
+    if len > 0
+      idx = (count < 0) ? (len - (~count % len) - 1) : (count % len) # rotate count
+      len.times do
+        ary << self[idx]
+        idx += 1
+        idx = 0 if idx > len-1
+      end
+    end
+    ary
+  end
+
+  ##
+  #  call-seq:
+  #     ary.rotate!(count=1)   -> ary
+  #
+  #  Rotates +self+ in place so that the element at +count+ comes first, and
+  #  returns +self+.
+  #
+  #  If +count+ is negative then it rotates in the opposite direction, starting
+  #  from the end of the array where +-1+ is the last element.
+  #
+  #     a = [ "a", "b", "c", "d" ]
+  #     a.rotate!        #=> ["b", "c", "d", "a"]
+  #     a                #=> ["b", "c", "d", "a"]
+  #     a.rotate!(2)     #=> ["d", "a", "b", "c"]
+  #     a.rotate!(-3)    #=> ["a", "b", "c", "d"]
+
+  def rotate!(count=1)
+    self.replace(self.rotate(count))
+  end
+
+  ##
+  #  call-seq:
+  #     ary.delete_if { |item| block }  -> ary
+  #     ary.delete_if                   -> Enumerator
+  #
+  #  Deletes every element of +self+ for which block evaluates to +true+.
+  #
+  #  The array is changed instantly every time the block is called, not after
+  #  the iteration is over.
+  #
+  #  See also Array#reject!
+  #
+  #  If no block is given, an Enumerator is returned instead.
+  #
+  #     scores = [ 97, 42, 75 ]
+  #     scores.delete_if {|score| score < 80 }   #=> [97]
+
+  def delete_if(&block)
+    return to_enum :delete_if unless block
+
+    idx = 0
+    while idx < self.size do
+      if block.call(self[idx])
+        self.delete_at(idx)
+      else
+        idx += 1
+      end
+    end
+    self
+  end
+
+  ##
+  #  call-seq:
+  #     ary.reject! { |item| block }  -> ary or nil
+  #     ary.reject!                   -> Enumerator
+  #
+  #  Equivalent to Array#delete_if, deleting elements from +self+ for which the
+  #  block evaluates to +true+, but returns +nil+ if no changes were made.
+  #
+  #  The array is changed instantly every time the block is called, not after
+  #  the iteration is over.
+  #
+  #  See also Enumerable#reject and Array#delete_if.
+  #
+  #  If no block is given, an Enumerator is returned instead.
+
+  def reject!(&block)
+    return to_enum :reject! unless block
+
+    len = self.size
+    idx = 0
+    while idx < self.size do
+      if block.call(self[idx])
+        self.delete_at(idx)
+      else
+        idx += 1
+      end
+    end
+    if self.size == len
+      nil
+    else
+      self
+    end
+  end
+
+  ##
+  #  call-seq:
+  #     ary.insert(index, obj...)  -> ary
+  #
+  #  Inserts the given values before the element with the given +index+.
+  #
+  #  Negative indices count backwards from the end of the array, where +-1+ is
+  #  the last element.
+  #
+  #     a = %w{ a b c d }
+  #     a.insert(2, 99)         #=> ["a", "b", 99, "c", "d"]
+  #     a.insert(-2, 1, 2, 3)   #=> ["a", "b", 99, "c", 1, 2, 3, "d"]
+
+  def insert(idx, *args)
+    idx += self.size + 1 if idx < 0
+    self[idx, 0] = args
+    self
+  end
+
+  ##
+  #  call-seq:
+  #     ary.bsearch {|x| block }  -> elem
+  #
+  #  By using binary search, finds a value from this array which meets
+  #  the given condition in O(log n) where n is the size of the array.
+  #
+  #  You can use this method in two use cases: a find-minimum mode and
+  #  a find-any mode.  In either case, the elements of the array must be
+  #  monotone (or sorted) with respect to the block.
+  #
+  #  In find-minimum mode (this is a good choice for typical use case),
+  #  the block must return true or false, and there must be an index i
+  #  (0 <= i <= ary.size) so that:
+  #
+  #  - the block returns false for any element whose index is less than
+  #    i, and
+  #  - the block returns true for any element whose index is greater
+  #    than or equal to i.
+  #
+  #  This method returns the i-th element.  If i is equal to ary.size,
+  #  it returns nil.
+  #
+  #     ary = [0, 4, 7, 10, 12]
+  #     ary.bsearch {|x| x >=   4 } #=> 4
+  #     ary.bsearch {|x| x >=   6 } #=> 7
+  #     ary.bsearch {|x| x >=  -1 } #=> 0
+  #     ary.bsearch {|x| x >= 100 } #=> nil
+  #
+  #  In find-any mode (this behaves like libc's bsearch(3)), the block
+  #  must return a number, and there must be two indices i and j
+  #  (0 <= i <= j <= ary.size) so that:
+  #
+  #  - the block returns a positive number for ary[k] if 0 <= k < i,
+  #  - the block returns zero for ary[k] if i <= k < j, and
+  #  - the block returns a negative number for ary[k] if
+  #    j <= k < ary.size.
+  #
+  #  Under this condition, this method returns any element whose index
+  #  is within i...j.  If i is equal to j (i.e., there is no element
+  #  that satisfies the block), this method returns nil.
+  #
+  #     ary = [0, 4, 7, 10, 12]
+  #     # try to find v such that 4 <= v < 8
+  #     ary.bsearch {|x| 1 - (x / 4).truncate } #=> 4 or 7
+  #     # try to find v such that 8 <= v < 10
+  #     ary.bsearch {|x| 4 - (x / 2).truncate } #=> nil
+  #
+  #  You must not mix the two modes at a time; the block must always
+  #  return either true/false, or always return a number.  It is
+  #  undefined which value is actually picked up at each iteration.
+
+  def bsearch(&block)
+    return to_enum :bsearch unless block
+
+    if idx = bsearch_index(&block)
+      self[idx]
+    else
+      nil
+    end
+  end
+
+  ##
+  #  call-seq:
+  #     ary.bsearch_index {|x| block }  -> int or nil
+  #
+  #  By using binary search, finds an index of a value from this array which
+  #  meets the given condition in O(log n) where n is the size of the array.
+  #
+  #  It supports two modes, depending on the nature of the block and they are
+  #  exactly the same as in the case of #bsearch method with the only difference
+  #  being that this method returns the index of the element instead of the
+  #  element itself. For more details consult the documentation for #bsearch.
+
+  def bsearch_index(&block)
+    return to_enum :bsearch_index unless block
+
+    low = 0
+    high = size
+    satisfied = false
+
+    while low < high
+      mid = ((low+high)/2).truncate
+      res = block.call self[mid]
+
+      case res
+      when 0 # find-any mode: Found!
+        return mid
+      when Numeric # find-any mode: Continue...
+        in_lower_half = res < 0
+      when true # find-min mode
+        in_lower_half = true
+        satisfied = true
+      when false, nil # find-min mode
+        in_lower_half = false
+      else
+        raise TypeError, 'invalid block result (must be numeric, true, false or nil)'
+      end
+
+      if in_lower_half
+        high = mid
+      else
+        low = mid + 1
+      end
+    end
+
+    satisfied ? low : nil
+  end
+
+  ##
+  #  call-seq:
+  #     ary.keep_if { |item| block } -> ary
+  #     ary.keep_if                  -> Enumerator
+  #
+  #  Deletes every element of +self+ for which the given block evaluates to
+  #  +false+.
+  #
+  #  See also Array#select!
+  #
+  #  If no block is given, an Enumerator is returned instead.
+  #
+  #     a = [1, 2, 3, 4, 5]
+  #     a.keep_if { |val| val > 3 } #=> [4, 5]
+
+  def keep_if(&block)
+    return to_enum :keep_if unless block
+
+    idx = 0
+    len = self.size
+    while idx < self.size do
+      if block.call(self[idx])
+        idx += 1
+      else
+        self.delete_at(idx)
+      end
+    end
+    self
+  end
+
+  ##
+  #  call-seq:
+  #     ary.select!  {|item| block } -> ary or nil
+  #     ary.select!                  -> Enumerator
+  #
+  #  Invokes the given block passing in successive elements from +self+,
+  #  deleting elements for which the block returns a +false+ value.
+  #
+  #  If changes were made, it will return +self+, otherwise it returns +nil+.
+  #
+  #  See also Array#keep_if
+  #
+  #  If no block is given, an Enumerator is returned instead.
+
+  def select!(&block)
+    return to_enum :select! unless block
+
+    result = []
+    idx = 0
+    len = size
+    while idx < len
+      elem = self[idx]
+      result << elem if block.call(elem)
+      idx += 1
+    end
+    return nil if len == result.size
+    self.replace(result)
+  end
+
+  ##
+  #  call-seq:
+  #     ary.index(val)            -> int or nil
+  #     ary.index {|item| block } ->  int or nil
+  #
+  #  Returns the _index_ of the first object in +ary+ such that the object is
+  #  <code>==</code> to +obj+.
+  #
+  #  If a block is given instead of an argument, returns the _index_ of the
+  #  first object for which the block returns +true+.  Returns +nil+ if no
+  #  match is found.
+  #
+  # ISO 15.2.12.5.14
+  def index(val=NONE, &block)
+    return to_enum(:find_index, val) if !block && val == NONE
+
+    if block
+      idx = 0
+      len = size
+      while idx < len
+        return idx if block.call self[idx]
+        idx += 1
+      end
+    else
+      return self.__ary_index(val)
+    end
+    nil
+  end
+
+  ##
+  # call-seq:
+  #   ary.dig(idx, ...)                 -> object
+  #
+  # Extracts the nested value specified by the sequence of <i>idx</i>
+  # objects by calling +dig+ at each step, returning +nil+ if any
+  # intermediate step is +nil+.
+  #
+  def dig(idx,*args)
+    n = self[idx]
+    if args.size > 0
+      n&.dig(*args)
+    else
+      n
+    end
+  end
+
+  ##
+  # call-seq:
+  #    ary.permutation { |p| block }          -> ary
+  #    ary.permutation                        -> Enumerator
+  #    ary.permutation(n) { |p| block }       -> ary
+  #    ary.permutation(n)                     -> Enumerator
+  #
+  # When invoked with a block, yield all permutations of length +n+ of the
+  # elements of the array, then return the array itself.
+  #
+  # If +n+ is not specified, yield all permutations of all elements.
+  #
+  # The implementation makes no guarantees about the order in which the
+  # permutations are yielded.
+  #
+  # If no block is given, an Enumerator is returned instead.
+  #
+  # Examples:
+  #
+  #  a = [1, 2, 3]
+  #  a.permutation.to_a    #=> [[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]
+  #  a.permutation(1).to_a #=> [[1],[2],[3]]
+  #  a.permutation(2).to_a #=> [[1,2],[1,3],[2,1],[2,3],[3,1],[3,2]]
+  #  a.permutation(3).to_a #=> [[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]
+  #  a.permutation(0).to_a #=> [[]] # one permutation of length 0
+  #  a.permutation(4).to_a #=> []   # no permutations of length 4
+  def permutation(n=self.size, &block)
+    return to_enum(:permutation, n) unless block
+    size = self.size
+    if n == 0
+      yield []
+    elsif 0 < n && n <= size
+      i = 0
+      while i<size
+        result = [self[i]]
+        if n-1 > 0
+          ary = self[0...i] + self[i+1..-1]
+          ary.permutation(n-1) do |c|
+            yield result + c
+          end
+        else
+          yield result
+        end
+        i += 1
+      end
+    end
+    self
+  end
+
+  ##
+  # call-seq:
+  #    ary.combination(n) { |c| block }    -> ary
+  #    ary.combination(n)                  -> Enumerator
+  #
+  # When invoked with a block, yields all combinations of length +n+ of elements
+  # from the array and then returns the array itself.
+  #
+  # The implementation makes no guarantees about the order in which the
+  # combinations are yielded.
+  #
+  # If no block is given, an Enumerator is returned instead.
+  #
+  # Examples:
+  #
+  #    a = [1, 2, 3, 4]
+  #    a.combination(1).to_a  #=> [[1],[2],[3],[4]]
+  #    a.combination(2).to_a  #=> [[1,2],[1,3],[1,4],[2,3],[2,4],[3,4]]
+  #    a.combination(3).to_a  #=> [[1,2,3],[1,2,4],[1,3,4],[2,3,4]]
+  #    a.combination(4).to_a  #=> [[1,2,3,4]]
+  #    a.combination(0).to_a  #=> [[]] # one combination of length 0
+  #    a.combination(5).to_a  #=> []   # no combinations of length 5
+
+  def combination(n, &block)
+    return to_enum(:combination, n) unless block
+    size = self.size
+    if n == 0
+       yield []
+    elsif n == 1
+      i = 0
+      while i<size
+        yield [self[i]]
+        i += 1
+      end
+    elsif n <= size
+      i = 0
+      while i<size
+        result = [self[i]]
+        self[i+1..-1].combination(n-1) do |c|
+          yield result + c
+        end
+        i += 1
+      end
+    end
+    self
+  end
+
+  ##
+  # call-seq:
+  #    ary.transpose -> new_ary
+  #
+  # Assumes that self is an array of arrays and transposes the rows and columns.
+  #
+  # If the length of the subarrays don't match, an IndexError is raised.
+  #
+  # Examples:
+  #
+  #    a = [[1,2], [3,4], [5,6]]
+  #    a.transpose   #=> [[1, 3, 5], [2, 4, 6]]
+
+  def transpose
+    return [] if empty?
+
+    column_count = nil
+    self.each do |row|
+      raise TypeError unless row.is_a?(Array)
+      column_count ||= row.size
+      raise IndexError, 'element size differs' unless column_count == row.size
+    end
+
+    Array.new(column_count) do |column_index|
+      self.map { |row| row[column_index] }
+    end
+  end
+
+  ##
+  #  call-seq:
+  #    ary.to_h                ->   Hash
+  #    ary.to_h{|item| ... }   ->   Hash
+  #
+  # Returns the result of interpreting <i>aray</i> as an array of
+  # <tt>[key, value]</tt> pairs. If a block is given, it should
+  # return <tt>[key, value]</tt> pairs to construct a hash.
+  #
+  #     [[:foo, :bar], [1, 2]].to_h
+  #       # => {:foo => :bar, 1 => 2}
+  #     [1, 2].to_h{|x| [x, x*2]}
+  #       # => {1 => 2, 2 => 4}
+  #
+  def to_h(&blk)
+    h = {}
+    self.each do |v|
+      v = blk.call(v) if blk
+      raise TypeError, "wrong element type #{v.class}" unless Array === v
+      raise ArgumentError, "wrong array length (expected 2, was #{v.length})" unless v.length == 2
+      h[v[0]] = v[1]
+    end
+    h
+  end
+
+  alias append push
+  alias prepend unshift
+  alias filter! select!
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-array-ext/src/array.c
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-array-ext/src/array.c	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-array-ext/src/array.c	(revision 439)
@@ -0,0 +1,203 @@
+#include <mruby.h>
+#include <mruby/value.h>
+#include <mruby/array.h>
+#include <mruby/range.h>
+#include <mruby/hash.h>
+
+/*
+ *  call-seq:
+ *     ary.assoc(obj)   -> new_ary  or  nil
+ *
+ *  Searches through an array whose elements are also arrays
+ *  comparing _obj_ with the first element of each contained array
+ *  using obj.==.
+ *  Returns the first contained array that matches (that
+ *  is, the first associated array),
+ *  or +nil+ if no match is found.
+ *  See also <code>Array#rassoc</code>.
+ *
+ *     s1 = [ "colors", "red", "blue", "green" ]
+ *     s2 = [ "letters", "a", "b", "c" ]
+ *     s3 = "foo"
+ *     a  = [ s1, s2, s3 ]
+ *     a.assoc("letters")  #=> [ "letters", "a", "b", "c" ]
+ *     a.assoc("foo")      #=> nil
+ */
+
+static mrb_value
+mrb_ary_assoc(mrb_state *mrb, mrb_value ary)
+{
+  mrb_int i;
+  mrb_value v, k;
+
+  mrb_get_args(mrb, "o", &k);
+
+  for (i = 0; i < RARRAY_LEN(ary); ++i) {
+    v = mrb_check_array_type(mrb, RARRAY_PTR(ary)[i]);
+    if (!mrb_nil_p(v) && RARRAY_LEN(v) > 0 &&
+        mrb_equal(mrb, RARRAY_PTR(v)[0], k))
+      return v;
+  }
+  return mrb_nil_value();
+}
+
+/*
+ *  call-seq:
+ *     ary.rassoc(obj) -> new_ary or nil
+ *
+ *  Searches through the array whose elements are also arrays. Compares
+ *  _obj_ with the second element of each contained array using
+ *  <code>==</code>. Returns the first contained array that matches. See
+ *  also <code>Array#assoc</code>.
+ *
+ *     a = [ [ 1, "one"], [2, "two"], [3, "three"], ["ii", "two"] ]
+ *     a.rassoc("two")    #=> [2, "two"]
+ *     a.rassoc("four")   #=> nil
+ */
+
+static mrb_value
+mrb_ary_rassoc(mrb_state *mrb, mrb_value ary)
+{
+  mrb_int i;
+  mrb_value v, value;
+
+  mrb_get_args(mrb, "o", &value);
+
+  for (i = 0; i < RARRAY_LEN(ary); ++i) {
+    v = RARRAY_PTR(ary)[i];
+    if (mrb_array_p(v) &&
+        RARRAY_LEN(v) > 1 &&
+        mrb_equal(mrb, RARRAY_PTR(v)[1], value))
+      return v;
+  }
+  return mrb_nil_value();
+}
+
+/*
+ *  call-seq:
+ *     ary.at(index)   ->   obj  or nil
+ *
+ *  Returns the element at _index_. A
+ *  negative index counts from the end of +self+.  Returns +nil+
+ *  if the index is out of range. See also <code>Array#[]</code>.
+ *
+ *     a = [ "a", "b", "c", "d", "e" ]
+ *     a.at(0)     #=> "a"
+ *     a.at(-1)    #=> "e"
+ */
+
+static mrb_value
+mrb_ary_at(mrb_state *mrb, mrb_value ary)
+{
+  mrb_int pos;
+  mrb_get_args(mrb, "i", &pos);
+
+  return mrb_ary_entry(ary, pos);
+}
+
+static mrb_value
+mrb_ary_values_at(mrb_state *mrb, mrb_value self)
+{
+  mrb_int argc;
+  mrb_value *argv;
+
+  mrb_get_args(mrb, "*", &argv, &argc);
+
+  return mrb_get_values_at(mrb, self, RARRAY_LEN(self), argc, argv, mrb_ary_ref);
+}
+
+
+/*
+ *  call-seq:
+ *     ary.slice!(index)         -> obj or nil
+ *     ary.slice!(start, length) -> new_ary or nil
+ *     ary.slice!(range)         -> new_ary or nil
+ *
+ *  Deletes the element(s) given by an +index+ (optionally up to +length+
+ *  elements) or by a +range+.
+ *
+ *  Returns the deleted object (or objects), or +nil+ if the +index+ is out of
+ *  range.
+ *
+ *     a = [ "a", "b", "c" ]
+ *     a.slice!(1)     #=> "b"
+ *     a               #=> ["a", "c"]
+ *     a.slice!(-1)    #=> "c"
+ *     a               #=> ["a"]
+ *     a.slice!(100)   #=> nil
+ *     a               #=> ["a"]
+ */
+
+static mrb_value
+mrb_ary_slice_bang(mrb_state *mrb, mrb_value self)
+{
+  struct RArray *a = mrb_ary_ptr(self);
+  mrb_int i, j, k, len, alen;
+  mrb_value val;
+  mrb_value *ptr;
+  mrb_value ary;
+
+  mrb_ary_modify(mrb, a);
+
+  if (mrb_get_argc(mrb) == 1) {
+    mrb_value index;
+
+    mrb_get_args(mrb, "o|i", &index, &len);
+    switch (mrb_type(index)) {
+    case MRB_TT_RANGE:
+      if (mrb_range_beg_len(mrb, index, &i, &len, ARY_LEN(a), TRUE) == MRB_RANGE_OK) {
+        goto delete_pos_len;
+      }
+      else {
+        return mrb_nil_value();
+      }
+    case MRB_TT_FIXNUM:
+      val = mrb_funcall(mrb, self, "delete_at", 1, index);
+      return val;
+    default:
+      val = mrb_funcall(mrb, self, "delete_at", 1, index);
+      return val;
+    }
+  }
+
+  mrb_get_args(mrb, "ii", &i, &len);
+ delete_pos_len:
+  alen = ARY_LEN(a);
+  if (i < 0) i += alen;
+  if (i < 0 || alen < i) return mrb_nil_value();
+  if (len < 0) return mrb_nil_value();
+  if (alen == i) return mrb_ary_new(mrb);
+  if (len > alen - i) len = alen - i;
+
+  ary = mrb_ary_new_capa(mrb, len);
+  ptr = ARY_PTR(a);
+  for (j = i, k = 0; k < len; ++j, ++k) {
+    mrb_ary_push(mrb, ary, ptr[j]);
+  }
+
+  ptr += i;
+  for (j = i; j < alen - len; ++j) {
+    *ptr = *(ptr+len);
+    ++ptr;
+  }
+
+  mrb_ary_resize(mrb, self, alen - len);
+  return ary;
+}
+
+void
+mrb_mruby_array_ext_gem_init(mrb_state* mrb)
+{
+  struct RClass * a = mrb->array_class;
+
+  mrb_define_method(mrb, a, "assoc",  mrb_ary_assoc,  MRB_ARGS_REQ(1));
+  mrb_define_method(mrb, a, "at",     mrb_ary_at,     MRB_ARGS_REQ(1));
+  mrb_define_method(mrb, a, "rassoc", mrb_ary_rassoc, MRB_ARGS_REQ(1));
+  mrb_define_method(mrb, a, "values_at", mrb_ary_values_at, MRB_ARGS_ANY());
+  mrb_define_method(mrb, a, "slice!", mrb_ary_slice_bang,   MRB_ARGS_ARG(1,1));
+}
+
+void
+mrb_mruby_array_ext_gem_final(mrb_state* mrb)
+{
+}
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-array-ext/test/array.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-array-ext/test/array.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-array-ext/test/array.rb	(revision 439)
@@ -0,0 +1,415 @@
+##
+# Array(Ext) Test
+
+def assert_permutation_combination(exp, receiver, meth, *args)
+  act = []
+  ret = receiver.__send__(meth, *args) { |v| act << v }
+  assert "assert_#{meth}" do
+    assert_equal(exp, act.sort)
+    assert_same(receiver, ret)
+  end
+end
+
+def assert_permutation(exp, receiver, *args)
+  assert_permutation_combination(exp, receiver, :permutation, *args)
+end
+
+def assert_combination(exp, receiver, *args)
+  assert_permutation_combination(exp, receiver, :combination, *args)
+end
+
+assert("Array#assoc") do
+  s1 = [ "colors", "red", "blue", "green" ]
+  s2 = [ "letters", "a", "b", "c" ]
+  s3 = "foo"
+  a  = [ s1, s2, s3 ]
+
+  assert_equal [ "letters", "a", "b", "c" ], a.assoc("letters")
+  assert_nil a.assoc("foo")
+end
+
+assert("Array#at") do
+  a = [ "a", "b", "c", "d", "e" ]
+  assert_equal "a", a.at(0)
+  assert_equal "e", a.at(-1)
+end
+
+assert("Array#rassoc") do
+  a = [ [ 1, "one"], [2, "two"], [3, "three"], ["ii", "two"] ]
+
+  assert_equal [2, "two"], a.rassoc("two")
+  assert_nil a.rassoc("four")
+end
+
+assert("Array#uniq!") do
+  a = [1, 2, 3, 1]
+  a.uniq!
+  assert_equal [1, 2, 3], a
+
+  b = [ "a", "b", "c" ]
+  assert_nil b.uniq!
+
+  c = [["student","sam"], ["student","george"], ["teacher","matz"]]
+  assert_equal [["student", "sam"], ["teacher", "matz"]], c.uniq! { |s| s.first }
+
+  d = [["student","sam"], ["teacher","matz"]]
+  assert_nil d.uniq! { |s| s.first }
+end
+
+assert("Array#uniq") do
+  a = [1, 2, 3, 1]
+  assert_equal [1, 2, 3], a.uniq
+  assert_equal [1, 2, 3, 1], a
+
+  b = [["student","sam"], ["student","george"], ["teacher","matz"]]
+  assert_equal [["student", "sam"], ["teacher", "matz"]], b.uniq { |s| s.first }
+end
+
+assert("Array#-") do
+  a = [1, 2, 3, 1]
+  b = [1]
+  c = 1
+
+  assert_raise(TypeError) { a - c }
+  assert_equal [2, 3], (a - b)
+  assert_equal [1, 2, 3, 1], a
+end
+
+assert("Array#|") do
+  a = [1, 2, 3, 1]
+  b = [1, 4]
+  c = 1
+
+  assert_raise(TypeError) { a | c }
+  assert_equal [1, 2, 3, 4], (a | b)
+  assert_equal [1, 2, 3, 1], a
+end
+
+assert("Array#union") do
+  a = [1, 2, 3, 1]
+  b = [1, 4]
+  c = [1, 5]
+
+  assert_equal [1, 2, 3, 4, 5], a.union(b,c)
+end
+
+assert("Array#difference") do
+  a = [1, 2, 3, 1, 6, 7]
+  b = [1, 4, 6]
+  c = [1, 5, 7]
+
+  assert_equal [2, 3], a.difference(b,c)
+end
+
+assert("Array#&") do
+  a = [1, 2, 3, 1]
+  b = [1, 4]
+  c = 1
+
+  assert_raise(TypeError) { a & c }
+  assert_equal [1], (a & b)
+  assert_equal [1, 2, 3, 1], a
+end
+
+assert("Array#intersection") do
+  a = [1, 2, 3, 1, 8, 6, 7, 8]
+  b = [1, 4, 6, 8]
+  c = [1, 5, 7, 8]
+
+  assert_equal [1, 8], a.intersection(b,c)
+end
+
+assert("Array#flatten") do
+  assert_equal [1, 2, "3", {4=>5}, :'6'],    [1, 2, "3", {4=>5}, :'6'].flatten
+  assert_equal [1, 2, 3, 4, 5, 6], [1, 2,    [3, 4, 5], 6].flatten
+  assert_equal [1, 2, 3, 4, 5, 6], [1, 2,    [3, [4, 5], 6]].flatten
+  assert_equal [1, [2, [3, [4, [5, [6]]]]]], [1, [2, [3, [4, [5, [6]]]]]].flatten(0)
+  assert_equal [1, 2, [3, [4, [5, [6]]]]],   [1, [2, [3, [4, [5, [6]]]]]].flatten(1)
+  assert_equal [1, 2, 3, [4, [5, [6]]]],     [1, [2, [3, [4, [5, [6]]]]]].flatten(2)
+  assert_equal [1, 2, 3, 4, [5, [6]]],       [1, [2, [3, [4, [5, [6]]]]]].flatten(3)
+  assert_equal [1, 2, 3, 4, 5, [6]],         [1, [2, [3, [4, [5, [6]]]]]].flatten(4)
+  assert_equal [1, 2, 3, 4, 5, 6],           [1, [2, [3, [4, [5, [6]]]]]].flatten(5)
+end
+
+assert("Array#flatten!") do
+  assert_equal [1, 2, 3, 4, 5, 6], [1, 2, [3, [4, 5], 6]].flatten!
+end
+
+assert("Array#compact") do
+  a = [1, nil, "2", nil, :t, false, nil]
+  assert_equal [1, "2", :t, false], a.compact
+  assert_equal [1, nil, "2", nil, :t, false, nil], a
+end
+
+assert("Array#compact!") do
+  a = [1, nil, "2", nil, :t, false, nil]
+  a.compact!
+  assert_equal [1, "2", :t, false], a
+end
+
+assert("Array#fetch") do
+  a = [ 11, 22, 33, 44 ]
+  assert_equal 22, a.fetch(1)
+  assert_equal 44, a.fetch(-1)
+  assert_equal 'cat', a.fetch(4, 'cat')
+  ret = 0
+  a.fetch(100) { |i| ret = i }
+  assert_equal 100, ret
+  assert_raise(IndexError) { a.fetch(100) }
+end
+
+assert("Array#fill") do
+  a = [ "a", "b", "c", "d" ]
+  assert_equal ["x", "x", "x", "x"], a.fill("x")
+  assert_equal ["x", "x", "x", "w"], a.fill("w", -1)
+  assert_equal ["x", "x", "z", "z"], a.fill("z", 2, 2)
+  assert_equal ["y", "y", "z", "z"], a.fill("y", 0..1)
+  assert_equal [0, 1, 4, 9], a.fill { |i| i*i }
+  assert_equal [0, 1, 8, 27], a.fill(-2) { |i| i*i*i }
+  assert_equal [0, 2, 3, 27], a.fill(1, 2) { |i| i+1 }
+  assert_equal [1, 2, 3, 27], a.fill(0..1) { |i| i+1 }
+  assert_raise(ArgumentError) { a.fill }
+
+  assert_equal([0, 1, 2, 3, -1, 5], [0, 1, 2, 3, 4, 5].fill(-1, -2, 1))
+  assert_equal([0, 1, 2, 3, -1, -1, -1], [0, 1, 2, 3, 4, 5].fill(-1, -2, 3))
+  assert_equal([0, 1, 2, -1, -1, 5], [0, 1, 2, 3, 4, 5].fill(-1, 3..4))
+  assert_equal([0, 1, 2, -1, 4, 5], [0, 1, 2, 3, 4, 5].fill(-1, 3...4))
+  assert_equal([0, 1, -1, -1, -1, 5], [0, 1, 2, 3, 4, 5].fill(-1, 2..-2))
+  assert_equal([0, 1, -1, -1, 4, 5], [0, 1, 2, 3, 4, 5].fill(-1, 2...-2))
+  assert_equal([0, 1, 2, 13, 14, 5], [0, 1, 2, 3, 4, 5].fill(3..4){|i| i+10})
+  assert_equal([0, 1, 2, 13, 4, 5], [0, 1, 2, 3, 4, 5].fill(3...4){|i| i+10})
+  assert_equal([0, 1, 12, 13, 14, 5], [0, 1, 2, 3, 4, 5].fill(2..-2){|i| i+10})
+  assert_equal([0, 1, 12, 13, 4, 5], [0, 1, 2, 3, 4, 5].fill(2...-2){|i| i+10})
+
+  assert_equal [1, 2, 3, 4, 'x', 'x'], [1, 2, 3, 4, 5, 6].fill('x', -2..-1)
+  assert_equal [1, 2, 3, 4, 'x', 6], [1, 2, 3, 4, 5, 6].fill('x', -2...-1)
+  assert_equal [1, 2, 3, 4, 5, 6], [1, 2, 3, 4, 5, 6].fill('x', -2...-2)
+  assert_equal [1, 2, 3, 4, 'x', 6], [1, 2, 3, 4, 5, 6].fill('x', -2..-2)
+  assert_equal [1, 2, 3, 4, 5, 6], [1, 2, 3, 4, 5, 6].fill('x', -2..0)
+end
+
+assert("Array#reverse_each") do
+  a = [ "a", "b", "c", "d" ]
+  b = []
+  a.reverse_each do |i|
+    b << i
+  end
+  assert_equal [ "d", "c", "b", "a" ], b
+end
+
+assert("Array#rotate") do
+  a = ["a", "b", "c", "d"]
+  assert_equal ["b", "c", "d", "a"], a.rotate
+  assert_equal ["a", "b", "c", "d"], a
+  assert_equal ["c", "d", "a", "b"], a.rotate(2)
+  assert_equal ["b", "c", "d", "a"], a.rotate(-3)
+  assert_equal ["c", "d", "a", "b"], a.rotate(10)
+  assert_equal [], [].rotate
+end
+
+assert("Array#rotate!") do
+  a = ["a", "b", "c", "d"]
+  assert_equal ["b", "c", "d", "a"], a.rotate!
+  assert_equal ["b", "c", "d", "a"], a
+  assert_equal ["d", "a", "b", "c"], a.rotate!(2)
+  assert_equal ["a", "b", "c", "d"], a.rotate!(-3)
+  assert_equal ["c", "d", "a", "b"], a.rotate(10)
+  assert_equal [], [].rotate!
+end
+
+assert("Array#delete_if") do
+  a = [1, 2, 3, 4, 5]
+  assert_equal [1, 2, 3, 4, 5], a.delete_if { false }
+  assert_equal [1, 2, 3, 4, 5], a
+
+  a = [1, 2, 3, 4, 5]
+  assert_equal [], a.delete_if { true }
+  assert_equal [], a
+
+  a = [1, 2, 3, 4, 5]
+  assert_equal [1, 2, 3], a.delete_if { |i| i > 3 }
+  assert_equal [1, 2, 3], a
+end
+
+assert("Array#reject!") do
+  a = [1, 2, 3, 4, 5]
+  assert_nil a.reject! { false }
+  assert_equal [1, 2, 3, 4, 5], a
+
+  a = [1, 2, 3, 4, 5]
+  assert_equal [], a.reject! { true }
+  assert_equal [], a
+
+  a = [1, 2, 3, 4, 5]
+  assert_equal [1, 2, 3], a.reject! { |val| val > 3 }
+  assert_equal [1, 2, 3], a
+end
+
+assert("Array#insert") do
+  a = ["a", "b", "c", "d"]
+  assert_equal ["a", "b", 99, "c", "d"], a.insert(2, 99)
+  assert_equal ["a", "b", 99, "c", 1, 2, 3, "d"], a.insert(-2, 1, 2, 3)
+
+  b = ["a", "b", "c", "d"]
+  assert_equal ["a", "b", "c", "d", nil, nil, 99], b.insert(6, 99)
+end
+
+assert("Array#bsearch") do
+  # Find minimum mode
+  a = [0, 2, 4]
+  assert_equal 0, a.bsearch{ |x| x >= -1 }
+  assert_equal 0, a.bsearch{ |x| x >= 0 }
+  assert_equal 2, a.bsearch{ |x| x >= 1 }
+  assert_equal 2, a.bsearch{ |x| x >= 2 }
+  assert_equal 4, a.bsearch{ |x| x >= 3 }
+  assert_equal 4, a.bsearch{ |x| x >= 4 }
+  assert_nil      a.bsearch{ |x| x >= 5 }
+
+  # Find any mode
+  a = [0, 4, 8]
+  def between(lo, x, hi)
+    if x < lo
+      1
+    elsif x > hi
+      -1
+    else
+      0
+    end
+  end
+  assert_nil      a.bsearch{ |x| between(-3, x, -1) }
+  assert_equal 0, a.bsearch{ |x| between(-1, x,  1) }
+  assert_nil      a.bsearch{ |x| between( 1, x,  3) }
+  assert_equal 4, a.bsearch{ |x| between( 3, x,  5) }
+  assert_nil      a.bsearch{ |x| between( 5, x,  7) }
+  assert_equal 8, a.bsearch{ |x| between( 7, x,  9) }
+  assert_nil      a.bsearch{ |x| between( 9, x, 11) }
+
+  assert_equal 0, a.bsearch{ |x| between( 0, x,  3) }
+  assert_equal 4, a.bsearch{ |x| between( 0, x,  4) }
+  assert_equal 4, a.bsearch{ |x| between( 4, x,  8) }
+  assert_equal 8, a.bsearch{ |x| between( 5, x,  8) }
+
+  # Invalid block result
+  assert_raise TypeError, 'invalid block result (must be numeric, true, false or nil)' do
+    a.bsearch{ 'I like to watch the world burn' }
+  end
+end
+
+# tested through Array#bsearch
+#assert("Array#bsearch_index") do
+#end
+
+assert("Array#keep_if") do
+  a = [1, 2, 3, 4, 5]
+  assert_equal [1, 2, 3, 4, 5], a.keep_if { true }
+  assert_equal [1, 2, 3, 4, 5], a
+
+  a = [1, 2, 3, 4, 5]
+  assert_equal [], a.keep_if { false }
+  assert_equal [], a
+
+  a = [1, 2, 3, 4, 5]
+  assert_equal [4, 5], a.keep_if { |val| val > 3 }
+  assert_equal [4, 5], a
+end
+
+assert("Array#select!") do
+  a = [1, 2, 3, 4, 5]
+  assert_nil a.select! { true }
+  assert_equal [1, 2, 3, 4, 5], a
+
+  a = [1, 2, 3, 4, 5]
+  assert_equal [], a.select! { false }
+  assert_equal [], a
+
+  a = [1, 2, 3, 4, 5]
+  assert_equal [4, 5], a.select! { |val| val > 3 }
+  assert_equal [4, 5], a
+end
+
+assert('Array#values_at') do
+  a = %w{red green purple white none}
+
+  assert_equal %w{red purple none}, a.values_at(0, 2, 4)
+  assert_equal ['green', 'white', nil, nil], a.values_at(1, 3, 5, 7)
+  assert_equal ['none', 'white', 'white', nil], a.values_at(-1, -2, -2, -7)
+  assert_equal ['none', nil, nil, 'red', 'green', 'purple'], a.values_at(4..6, 0...3)
+  assert_raise(TypeError) { a.values_at 'tt' }
+end
+
+assert('Array#to_h') do
+  assert_equal({}, [].to_h)
+  assert_equal({a: 1, b:2}, [[:a, 1], [:b, 2]].to_h)
+
+  assert_raise(TypeError)     { [1].to_h }
+  assert_raise(ArgumentError) { [[1]].to_h }
+end
+
+assert("Array#index (block)") do
+  assert_nil (1..10).to_a.index { |i| i % 5 == 0 and i % 7 == 0 }
+  assert_equal 34, (1..100).to_a.index { |i| i % 5 == 0 and i % 7 == 0 }
+end
+
+assert("Array#dig") do
+  h = [[[1]], 0]
+  assert_equal(1, h.dig(0, 0, 0))
+  assert_nil(h.dig(2, 0))
+  assert_raise(TypeError) {h.dig(:a)}
+end
+
+assert("Array#slice!") do
+  a = [1, 2, 3]
+  b = a.slice!(0)
+  c = [1, 2, 3, 4, 5]
+  d = c.slice!(0, 2)
+  e = [1, 2, 3, 4, 5]
+  f = e.slice!(1..3)
+  g = [1, 2, 3]
+  h = g.slice!(-1)
+  i = [1, 2, 3]
+  j = i.slice!(0, -1)
+
+  assert_equal(a, [2, 3])
+  assert_equal(b, 1)
+  assert_equal(c, [3, 4, 5])
+  assert_equal(d, [1, 2])
+  assert_equal(e, [1, 5])
+  assert_equal(f, [2, 3, 4])
+  assert_equal(g, [1, 2])
+  assert_equal(h, 3)
+  assert_equal(i, [1, 2, 3])
+  assert_equal(j, nil)
+end
+
+assert("Array#permutation") do
+  a = [1, 2, 3]
+  assert_permutation([[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]], a)
+  assert_permutation([[1],[2],[3]], a, 1)
+  assert_permutation([[1,2],[1,3],[2,1],[2,3],[3,1],[3,2]], a, 2)
+  assert_permutation([[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]], a, 3)
+  assert_permutation([[]], a, 0)
+  assert_permutation([], a, 4)
+  assert_permutation([], a, -1)
+end
+
+assert("Array#combination") do
+  a = [1, 2, 3, 4]
+  assert_combination([[1],[2],[3],[4]], a, 1)
+  assert_combination([[1,2],[1,3],[1,4],[2,3],[2,4],[3,4]], a, 2)
+  assert_combination([[1,2,3],[1,2,4],[1,3,4],[2,3,4]], a, 3)
+  assert_combination([[1,2,3,4]], a, 4)
+  assert_combination([[]], a, 0)
+  assert_combination([], a, 5)
+  assert_combination([], a, -1)
+end
+
+assert('Array#transpose') do
+  assert_equal([].transpose, [])
+  assert_equal([[]].transpose, [])
+  assert_equal([[1]].transpose, [[1]])
+  assert_equal([[1,2,3]].transpose, [[1], [2], [3]])
+  assert_equal([[1], [2], [3]].transpose, [[1,2,3]])
+  assert_equal([[1,2], [3,4], [5,6]].transpose, [[1,3,5], [2,4,6]])
+  assert_raise(TypeError) { [1].transpose }
+  assert_raise(IndexError) { [[1], [2,3,4]].transpose }
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-bin-config/mrbgem.rake
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-bin-config/mrbgem.rake	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-bin-config/mrbgem.rake	(revision 439)
@@ -0,0 +1,26 @@
+unless MRuby::Build.current.kind_of?(MRuby::CrossBuild)
+  MRuby::Gem::Specification.new('mruby-bin-config') do |spec|
+    name = 'mruby-config'
+    spec.license = 'MIT'
+    spec.author  = 'mruby developers'
+    spec.summary = "#{name} command"
+
+    mruby_config_dir = "#{build.build_dir}/bin"
+    mruby_config = name + (ENV['OS'] == 'Windows_NT' ? '.bat' : '')
+    mruby_config_path = "#{mruby_config_dir}/#{mruby_config}"
+    make_cfg = "#{build.build_dir}/lib/libmruby.flags.mak"
+    tmplt_path = "#{__dir__}/#{mruby_config}"
+    build.bins << mruby_config
+
+    directory mruby_config_dir
+
+    file mruby_config_path => [mruby_config_dir, make_cfg, tmplt_path] do |t|
+      config = Hash[File.readlines(make_cfg).map!(&:chomp).map! {|l|
+        l.gsub('\\"', '"').split(' = ', 2).map! {|s| s.sub(/^(?=.)/, 'echo ')}
+      }]
+      tmplt = File.read(tmplt_path)
+      File.write(t.name, tmplt.gsub(/(#{Regexp.union(*config.keys)})\b/, config))
+      chmod(0755, t.name)
+    end
+  end
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-bin-config/mruby-config
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-bin-config/mruby-config	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-bin-config/mruby-config	(revision 439)
@@ -0,0 +1,20 @@
+#!/bin/sh
+
+while [ $# -gt 0 ]; do
+  case $1 in
+    --cflags) echo MRUBY_CFLAGS;;
+    --ldflags) echo MRUBY_LDFLAGS;;
+    --ldflags-before-libs) echo MRUBY_LDFLAGS_BEFORE_LIBS;;
+    --libs) echo MRUBY_LIBS;;
+    --libmruby-path) echo MRUBY_LIBMRUBY_PATH;;
+    --help) echo "Usage: mruby-config [switches]"
+            echo "  switches:"
+            echo "  --cflags                    print flags passed to compiler"
+            echo "  --ldflags                   print flags passed to linker"
+            echo "  --ldflags-before-libs       print flags passed to linker before linked libraries"
+            echo "  --libs                      print linked libraries"
+            echo "  --libmruby-path             print libmruby path"
+            exit 0;;
+  esac
+  shift
+done
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-bin-config/mruby-config.bat
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-bin-config/mruby-config.bat	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-bin-config/mruby-config.bat	(revision 439)
@@ -0,0 +1,42 @@
+@echo off
+
+:top
+shift
+if "%0" equ "" goto :eof
+if "%0" equ "--cflags" goto cflags
+if "%0" equ "--ldflags" goto ldflags
+if "%0" equ "--ldflags-before-libs" goto ldflagsbeforelibs
+if "%0" equ "--libs" goto libs
+if "%0" equ "--libmruby-path" goto libmrubypath
+if "%0" equ "--help" goto showhelp
+echo Invalid Option
+goto :eof
+
+:cflags
+echo MRUBY_CFLAGS
+goto top
+
+:libs
+echo MRUBY_LIBS
+goto top
+
+:ldflags
+echo MRUBY_LDFLAGS
+goto top
+
+:ldflagsbeforelibs
+echo MRUBY_LDFLAGS_BEFORE_LIBS
+goto top
+
+:libmrubypath
+echo MRUBY_LIBMRUBY_PATH
+goto top
+
+:showhelp
+echo Usage: mruby-config [switches]
+echo   switches:
+echo   --cflags                   print flags passed to compiler
+echo   --ldflags                  print flags passed to linker
+echo   --ldflags-before-libs      print flags passed to linker before linked libraries
+echo   --libs                     print linked libraries
+echo   --libmruby-path            print libmruby path
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-bin-debugger/bintest/mrdb.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-bin-debugger/bintest/mrdb.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-bin-debugger/bintest/mrdb.rb	(revision 439)
@@ -0,0 +1,286 @@
+require 'open3'
+require 'tempfile'
+
+class BinTest_MrubyBinDebugger
+  @debug1=false
+  @debug2=true
+  @debug3=true
+  def self.test(rubysource, testcase)
+    script, bin = Tempfile.new(['test', '.rb']), Tempfile.new(['test', '.mrb'])
+
+    # .rb
+    script.write rubysource
+    script.flush
+
+    # compile
+    `./bin/mrbc -g -o "#{bin.path}" "#{script.path}"`
+
+    # add mrdb quit
+    testcase << {:cmd=>"quit"}
+
+    stdin_data = testcase.map{|t| t[:cmd]}.join("\n") << "\n"
+
+    ["bin/mrdb #{script.path}","bin/mrdb -b #{bin.path}"].each do |cmd|
+      o, s = Open3.capture2(cmd, :stdin_data => stdin_data)
+
+      exp_vals = testcase.map{|t| t.fetch(:exp, nil)}
+      unexp_vals = testcase.map{|t| t.fetch(:unexp, nil)}
+
+if @debug1
+  o.split("\n").each_with_index do |i,actual|
+    p [i,actual]
+  end
+end
+      # compare actual / expected
+      o.split("\n").each do |actual|
+        next if actual.empty?
+        exp = exp_vals.shift
+if @debug2
+  a = true
+  a = actual.include?(exp) unless exp.nil?
+  p [actual, exp] unless a
+end
+        assert_true actual.include?(exp) unless exp.nil?
+      end
+      # compare actual / unexpected
+      o.split("\n").each do |actual|
+        next if actual.empty?
+        unexp = unexp_vals.shift
+if @debug3
+  a = false
+  a = actual.include?(unexp) unless unexp.nil?
+  p [actual, unexp] if a
+end
+        assert_false actual.include?(unexp) unless unexp.nil?
+      end
+    end
+  end
+end
+
+INVCMD = "invalid command"
+
+assert('mruby-bin-debugger(mrdb) command line') do
+  # ruby source
+  src = "foo = 'foo'\n"
+
+  str = ""
+  103.times {
+    str += "1234567890"
+  }
+  cmd = "p a=#{str}"
+
+  # test case
+  BinTest_MrubyBinDebugger.test(src, [{:cmd=>cmd[0...1023], :unexp=>'command line too long.'}])
+  BinTest_MrubyBinDebugger.test(src, [{:cmd=>cmd[0...1024], :unexp=>'command line too long.'}])
+  BinTest_MrubyBinDebugger.test(src, [{:cmd=>cmd[0...1025], :exp=>'command line too long.'}])
+end
+
+assert('mruby-bin-debugger(mrdb) command: "break"') do
+  # ruby source
+  src = "foo = 'foo'\n"
+
+  # test case
+  tc = []
+  tc << {:cmd=>"b",     :unexp=>INVCMD}
+  tc << {:cmd=>"br",    :unexp=>INVCMD}
+  tc << {:cmd=>"brea",  :unexp=>INVCMD}
+  tc << {:cmd=>"break", :unexp=>INVCMD}
+  BinTest_MrubyBinDebugger.test(src, tc)
+
+  BinTest_MrubyBinDebugger.test(src, [{:cmd=>"bl",     :exp=>INVCMD}])
+  BinTest_MrubyBinDebugger.test(src, [{:cmd=>"breaka", :exp=>INVCMD}])
+end
+
+assert('mruby-bin-debugger(mrdb) command: "continue"') do
+  # ruby source
+  src = "foo = 'foo'\n"
+
+  # test case
+  BinTest_MrubyBinDebugger.test(src, [{:cmd=>"c",         :unexp=>INVCMD}])
+  BinTest_MrubyBinDebugger.test(src, [{:cmd=>"co",        :unexp=>INVCMD}])
+  BinTest_MrubyBinDebugger.test(src, [{:cmd=>"continu",   :unexp=>INVCMD}])
+  BinTest_MrubyBinDebugger.test(src, [{:cmd=>"continue",  :unexp=>INVCMD}])
+
+  BinTest_MrubyBinDebugger.test(src, [{:cmd=>"cn",        :exp=>INVCMD}])
+  BinTest_MrubyBinDebugger.test(src, [{:cmd=>"continuee", :exp=>INVCMD}])
+end
+
+assert('mruby-bin-debugger(mrdb) command: "delete"') do
+  # ruby source
+  src = "foo = 'foo'\n"
+
+  # test case
+  tc = []
+  tc << {:cmd=>"d 1",      :unexp=>INVCMD}
+  tc << {:cmd=>"de 1",     :unexp=>INVCMD}
+  tc << {:cmd=>"delet 1",  :unexp=>INVCMD}
+  tc << {:cmd=>"delete 1", :unexp=>INVCMD}
+  BinTest_MrubyBinDebugger.test(src, tc)
+
+  BinTest_MrubyBinDebugger.test(src, [{:cmd=>"dd 1",      :exp=>INVCMD}])
+  BinTest_MrubyBinDebugger.test(src, [{:cmd=>"deletee 1", :exp=>INVCMD}])
+end
+
+assert('mruby-bin-debugger(mrdb) command: "disable"') do
+  # ruby source
+  src = "foo = 'foo'\n"
+
+  # test case
+  tc = []
+  tc << {:cmd=>"dis",     :unexp=>INVCMD}
+  tc << {:cmd=>"disa",    :unexp=>INVCMD}
+  tc << {:cmd=>"disabl",  :unexp=>INVCMD}
+  tc << {:cmd=>"disable", :unexp=>INVCMD}
+  BinTest_MrubyBinDebugger.test(src, tc)
+
+  BinTest_MrubyBinDebugger.test(src, [{:cmd=>"di",       :exp=>INVCMD}])
+  BinTest_MrubyBinDebugger.test(src, [{:cmd=>"disb",     :exp=>INVCMD}])
+  BinTest_MrubyBinDebugger.test(src, [{:cmd=>"disablee", :exp=>INVCMD}])
+end
+
+assert('mruby-bin-debugger(mrdb) command: "enable"') do
+  # ruby source
+  src = "foo = 'foo'\n"
+
+  # test case
+  tc = []
+  tc << {:cmd=>"en",     :unexp=>INVCMD}
+  tc << {:cmd=>"ena",    :unexp=>INVCMD}
+  tc << {:cmd=>"enabl",  :unexp=>INVCMD}
+  tc << {:cmd=>"enable", :unexp=>INVCMD}
+  BinTest_MrubyBinDebugger.test(src, tc)
+
+  BinTest_MrubyBinDebugger.test(src, [{:cmd=>"e",       :exp=>INVCMD}])
+  BinTest_MrubyBinDebugger.test(src, [{:cmd=>"enb",     :exp=>INVCMD}])
+  BinTest_MrubyBinDebugger.test(src, [{:cmd=>"enablee", :exp=>INVCMD}])
+end
+
+assert('mruby-bin-debugger(mrdb) command: "eval"') do
+  # ruby source
+  src = "foo = 'foo'\n"
+
+  # test case
+  tc = []
+  tc << {:cmd=>"ev",   :unexp=>INVCMD}
+  tc << {:cmd=>"eva",  :unexp=>INVCMD}
+  tc << {:cmd=>"eval", :unexp=>INVCMD}
+  BinTest_MrubyBinDebugger.test(src, tc)
+
+  BinTest_MrubyBinDebugger.test(src, [{:cmd=>"e",     :exp=>INVCMD}])
+  BinTest_MrubyBinDebugger.test(src, [{:cmd=>"evl",   :exp=>INVCMD}])
+  BinTest_MrubyBinDebugger.test(src, [{:cmd=>"evall", :exp=>INVCMD}])
+end
+
+assert('mruby-bin-debugger(mrdb) command: "help"') do
+  # ruby source
+  src = "foo = 'foo'\n"
+
+  # test case
+  tc = []
+  tc << {:cmd=>"h",    :unexp=>INVCMD}
+  tc << {:cmd=>"he",   :unexp=>INVCMD}
+  tc << {:cmd=>"hel",  :unexp=>INVCMD}
+  tc << {:cmd=>"help", :unexp=>INVCMD}
+  BinTest_MrubyBinDebugger.test(src, tc)
+
+  BinTest_MrubyBinDebugger.test(src, [{:cmd=>"hl",    :exp=>INVCMD}])
+  BinTest_MrubyBinDebugger.test(src, [{:cmd=>"helpp", :exp=>INVCMD}])
+end
+
+assert('mruby-bin-debugger(mrdb) command: "info breakpoints"') do
+  # ruby source
+  src = "foo = 'foo'\n"
+
+  # test case
+  tc = []
+  tc << {:cmd=>"i b",              :unexp=>INVCMD}
+  tc << {:cmd=>"in  b",            :unexp=>INVCMD}
+  tc << {:cmd=>"i    br",          :unexp=>INVCMD}
+  tc << {:cmd=>"inf breakpoint",   :unexp=>INVCMD}
+  tc << {:cmd=>"info breakpoints", :unexp=>INVCMD}
+  BinTest_MrubyBinDebugger.test(src, tc)
+
+  BinTest_MrubyBinDebugger.test(src, [{:cmd=>"ii b",              :exp=>INVCMD}])
+  BinTest_MrubyBinDebugger.test(src, [{:cmd=>"i bb",              :exp=>INVCMD}])
+  BinTest_MrubyBinDebugger.test(src, [{:cmd=>"infoo breakpoints", :exp=>INVCMD}])
+  BinTest_MrubyBinDebugger.test(src, [{:cmd=>"info breakpointss", :exp=>INVCMD}])
+end
+
+assert('mruby-bin-debugger(mrdb) command: "list"') do
+  # ruby source
+  src = "foo = 'foo'\n"
+
+  # test case
+  tc = []
+  tc << {:cmd=>"l",    :unexp=>INVCMD}
+  tc << {:cmd=>"li",   :unexp=>INVCMD}
+  tc << {:cmd=>"lis",  :unexp=>INVCMD}
+  tc << {:cmd=>"list", :unexp=>INVCMD}
+  BinTest_MrubyBinDebugger.test(src, tc)
+
+  BinTest_MrubyBinDebugger.test(src, [{:cmd=>"ll",    :exp=>INVCMD}])
+  BinTest_MrubyBinDebugger.test(src, [{:cmd=>"listt", :exp=>INVCMD}])
+end
+
+assert('mruby-bin-debugger(mrdb) command: "print"') do
+  # ruby source
+  src = "foo = 'foo'\n"
+
+  # test case
+  tc = []
+  tc << {:cmd=>"p",     :unexp=>INVCMD}
+  tc << {:cmd=>"pr",    :unexp=>INVCMD}
+  tc << {:cmd=>"prin",  :unexp=>INVCMD}
+  tc << {:cmd=>"print", :unexp=>INVCMD}
+  BinTest_MrubyBinDebugger.test(src, tc)
+
+  BinTest_MrubyBinDebugger.test(src, [{:cmd=>"pp",     :exp=>INVCMD}])
+  BinTest_MrubyBinDebugger.test(src, [{:cmd=>"printt", :exp=>INVCMD}])
+end
+
+assert('mruby-bin-debugger(mrdb) command: "quit"') do
+  # ruby source
+  src = "foo = 'foo'\n"
+
+  # test case
+  BinTest_MrubyBinDebugger.test(src, [{:cmd=>"q",    :unexp=>INVCMD}])
+  BinTest_MrubyBinDebugger.test(src, [{:cmd=>"qu",   :unexp=>INVCMD}])
+  BinTest_MrubyBinDebugger.test(src, [{:cmd=>"qui",  :unexp=>INVCMD}])
+  BinTest_MrubyBinDebugger.test(src, [{:cmd=>"quit", :unexp=>INVCMD}])
+
+  BinTest_MrubyBinDebugger.test(src, [{:cmd=>"qq",    :exp=>INVCMD}])
+  BinTest_MrubyBinDebugger.test(src, [{:cmd=>"quitt", :exp=>INVCMD}])
+end
+
+assert('mruby-bin-debugger(mrdb) command: "run"') do
+  # ruby source
+  src = "foo = 'foo'\n"
+
+  # test case
+  BinTest_MrubyBinDebugger.test(src, [{:cmd=>"r",   :unexp=>INVCMD}])
+  BinTest_MrubyBinDebugger.test(src, [{:cmd=>"ru",  :unexp=>INVCMD}])
+  BinTest_MrubyBinDebugger.test(src, [{:cmd=>"run", :unexp=>INVCMD}])
+
+  BinTest_MrubyBinDebugger.test(src, [{:cmd=>"rr",   :exp=>INVCMD}])
+  BinTest_MrubyBinDebugger.test(src, [{:cmd=>"runn", :exp=>INVCMD}])
+end
+
+assert('mruby-bin-debugger(mrdb) command: "step"') do
+  # ruby source
+  src = <<"SRC"
+while true
+  foo = 'foo'
+end
+SRC
+
+  # test case
+  tc = []
+  tc << {:cmd=>"s",    :unexp=>INVCMD}
+  tc << {:cmd=>"st",   :unexp=>INVCMD}
+  tc << {:cmd=>"ste",  :unexp=>INVCMD}
+  tc << {:cmd=>"step", :unexp=>INVCMD}
+  BinTest_MrubyBinDebugger.test(src, tc)
+
+  BinTest_MrubyBinDebugger.test(src, [{:cmd=>"ss",    :exp=>INVCMD}])
+  BinTest_MrubyBinDebugger.test(src, [{:cmd=>"stepp", :exp=>INVCMD}])
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-bin-debugger/bintest/print.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-bin-debugger/bintest/print.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-bin-debugger/bintest/print.rb	(revision 439)
@@ -0,0 +1,703 @@
+require 'open3'
+require 'tempfile'
+require 'strscan'
+
+class BinTest_MrubyBinDebugger
+#  @debug1=false
+#  @debug2=true
+  def self.test(rubysource, testcase)
+    script, bin = Tempfile.new(['test', '.rb']), Tempfile.new(['test', '.mrb'])
+
+    # .rb
+    script.write rubysource
+    script.flush
+
+    # compile
+    `./bin/mrbc -g -o "#{bin.path}" "#{script.path}"`
+
+    # add mrdb quit
+    testcase << {:cmd=>"quit"}
+
+    stdin_data = testcase.map{|t| t[:cmd]}.join("\n") << "\n"
+
+    prompt = /^\(#{Regexp.escape(script.path)}:\d+\) /
+    ["bin/mrdb #{script.path}","bin/mrdb -b #{bin.path}"].each do |cmd|
+      o, s = Open3.capture2(cmd, :stdin_data => stdin_data)
+      scanner = StringScanner.new(o)
+      scanner.skip_until(prompt)
+      testcase.each do |tc|
+        exp = tc[:exp]
+        if exp
+          act = scanner.scan_until(/\n/)
+          break unless assert_operator act, :start_with?, exp
+        end
+        scanner.skip_until(prompt)
+      end
+
+=begin
+if @debug1
+  o.split("\n").each_with_index do |i,actual|
+    p [i,actual]
+  end
+end
+      # compare actual / expected
+      o.split("\n").each do |actual|
+        next if actual.empty?
+        exp = exp_vals.shift
+if @debug2
+  a = true
+  a = actual.include?(exp) unless exp.nil?
+  p [actual, exp] unless a
+end
+        assert_true actual.include?(exp) unless exp.nil?
+      end
+=end
+    end
+  end
+end
+
+assert('mruby-bin-debugger(print) invalid arguments') do
+  # ruby source
+  src =  "foo = 'foo'\n"
+
+  # test case
+  tc = []
+  tc << {:cmd=>"p",   :exp=>"Parameter not specified."}
+
+  BinTest_MrubyBinDebugger.test(src, tc)
+end
+
+assert('mruby-bin-debugger(print) nomal') do
+  # ruby source
+  src = <<"SRC"
+foo = 'foo'
+bar = foo
+baz = bar
+SRC
+
+  # test case
+  tc = []
+  tc << {:cmd=>"s"}
+  tc << {:cmd=>"p (1+2)",   :exp=>'$1 = 3'}
+  tc << {:cmd=>"p foo",     :exp=>'$2 = "foo"'}
+  tc << {:cmd=>"p foo*=2",  :exp=>'$3 = "foofoo"'}
+  tc << {:cmd=>"s"}
+  tc << {:cmd=>"p bar",     :exp=>'$4 = "foofoo"'}
+
+  BinTest_MrubyBinDebugger.test(src, tc)
+end
+
+assert('mruby-bin-debugger(print) error') do
+  # ruby source
+  src =  "foo = 'foo'\n"
+
+  # test case
+  tc = []
+  tc << {:cmd=>"p (1+2",  :exp=>'$1 = line 1: syntax error'}
+  tc << {:cmd=>"p bar",   :exp=>'$2 = undefined method'}
+
+  BinTest_MrubyBinDebugger.test(src, tc)
+end
+
+# Kernel#instance_eval(string) does't work multiple statements.
+=begin
+assert('mruby-bin-debugger(print) multiple statements') do
+  # ruby source
+  src = <<"SRC"
+x = 0
+y = 0
+z = 0
+SRC
+
+  # test case
+  tc = []
+  tc << {:cmd=>"s",}
+  tc << {:cmd=>"p x=1;x+=2",  :exp=>"3"}
+  tc << {:cmd=>"s",}
+  tc << {:cmd=>"p x",         :exp=>"3"}
+
+  BinTest_MrubyBinDebugger.test(src, tc)
+end
+=end
+
+assert('mruby-bin-debugger(print) scope:top') do
+  # ruby source (bp is break point)
+  src = "bp=nil\n"
+
+  # test case
+  tc = []
+  tc << {:cmd=>"p self",  :exp=>'$1 = main'}
+
+  BinTest_MrubyBinDebugger.test(src, tc)
+end
+
+assert('mruby-bin-debugger(print) scope:class') do
+  # ruby source (bp is break point)
+  src = <<"SRC"
+class TestClassScope
+  bp = nil
+end
+SRC
+
+  # test case
+  tc = []
+  tc << {:cmd=>"s"}
+  tc << {:cmd=>"p self",  :exp=>'$1 = TestClassScope'}
+
+  BinTest_MrubyBinDebugger.test(src, tc)
+end
+
+assert('mruby-bin-debugger(print) scope:module') do
+  # ruby source (bp is break point)
+  src = <<"SRC"
+class TestModuleScope
+  bp = nil
+end
+SRC
+
+  # test case
+  tc = []
+  tc << {:cmd=>"s"}
+  tc << {:cmd=>"p self",  :exp=>'$1 = TestModuleScope'}
+
+  BinTest_MrubyBinDebugger.test(src, tc)
+end
+
+assert('mruby-bin-debugger(print) scope:instance method') do
+  # ruby source (bp is break point)
+  src = <<"SRC"
+class TestMethodScope
+  def m
+    bp = nil
+  end
+end
+TestMethodScope.new.m
+SRC
+
+  tc = []
+  tc << {:cmd=>"b 3"}
+  tc << {:cmd=>"r"}
+  tc << {:cmd=>"p self",  :exp=>'$1 = #<TestMethodScope:'}
+
+  BinTest_MrubyBinDebugger.test(src, tc)
+end
+
+assert('mruby-bin-debugger(print) scope:class method') do
+  # ruby source (bp is break point)
+  src = <<"SRC"
+class TestClassMethodScope
+  def self.cm
+    bp = nil
+  end
+end
+TestClassMethodScope.cm
+SRC
+
+  tc = []
+  tc << {:cmd=>"b 3"}
+  tc << {:cmd=>"r"}
+  tc << {:cmd=>"p self",  :exp=>'$1 = TestClassMethodScope'}
+
+  BinTest_MrubyBinDebugger.test(src, tc)
+end
+
+assert('mruby-bin-debugger(print) scope:block') do
+  # ruby source (bp is break point)
+  src = <<"SRC"
+1.times do
+  bp = nil
+end
+class TestBlockScope
+  1.times do
+    bp = nil
+  end
+  def m
+    1.times do
+      bp = nil
+    end
+  end
+end
+TestBlockScope.new.m
+SRC
+
+  tc = []
+  tc << {:cmd=>"b 2"}
+  tc << {:cmd=>"b 6"}
+  tc << {:cmd=>"b 10"}
+  tc << {:cmd=>"c"}
+  tc << {:cmd=>"p self", :exp=>'$1 = main'}
+  tc << {:cmd=>"c"}
+  tc << {:cmd=>"p self", :exp=>'$2 = TestBlockScope'}
+  tc << {:cmd=>"c"}
+  tc << {:cmd=>"p self", :exp=>'$3 = #<TestBlockScope:'}
+
+  BinTest_MrubyBinDebugger.test(src, tc)
+end
+
+assert('mruby-bin-debugger(print) same name:local variabe') do
+  # ruby source (bp is break point)
+  src = <<"SRC"
+lv = 'top'
+class TestLocalVariableName
+  lv = 'class'
+  def m
+    lv = 'instance method'
+    bp = nil
+  end
+  bp = nil
+end
+TestLocalVariableName.new.m
+bp = nil
+SRC
+
+  tc = []
+  tc << {:cmd=>"b 6"}
+  tc << {:cmd=>"b 8"}
+  tc << {:cmd=>"b 11"}
+  tc << {:cmd=>"r"}
+  tc << {:cmd=>"p lv", :exp=>'$1 = "class"'}
+  tc << {:cmd=>"c"}
+  tc << {:cmd=>"p lv", :exp=>'$2 = "instance method"'}
+  tc << {:cmd=>"c"}
+  tc << {:cmd=>"p lv", :exp=>'$3 = "top"'}
+
+  BinTest_MrubyBinDebugger.test(src, tc)
+end
+
+assert('mruby-bin-debugger(print) same name:instance variabe') do
+  # ruby source (bp is break point)
+  src = <<"SRC"
+@iv = 'top'
+class TestInstanceVariableName
+  def initialize(v)
+    @iv = v
+  end
+  def m
+    bp = nil
+  end
+end
+i1 = TestInstanceVariableName.new('instance1')
+i2 = TestInstanceVariableName.new('instance2')
+i1.m
+i2.m
+bp = nil
+SRC
+
+  tc = []
+  tc << {:cmd=>"b 7"}
+  tc << {:cmd=>"b 14"}
+  tc << {:cmd=>"r"}
+  tc << {:cmd=>"p @iv", :exp=>'$1 = "instance1"'}
+  tc << {:cmd=>"c"}
+  tc << {:cmd=>"p @iv", :exp=>'$2 = "instance2"'}
+  tc << {:cmd=>"c"}
+  tc << {:cmd=>"p @iv", :exp=>'$3 = "top"'}
+
+  BinTest_MrubyBinDebugger.test(src, tc)
+end
+
+# Kernel#instance_eval(string) does't work const.
+=begin
+assert('mruby-bin-debugger(print) same name:const') do
+  # ruby source (bp is break point)
+  src = <<"SRC"
+CONST='top'
+class TestConstNameSuperClass
+  CONST='super class'
+  def m
+    bp = nil
+  end
+end
+class TestConstNameSubClass < TestConstNameSuperClass
+  CONST='sub class'
+  def m
+    bp = nil
+  end
+end
+
+TestConstNameSuperClass.new.m()
+TestConstNameSubClass.new.m()
+bp = nil
+SRC
+
+  # todo: wait for 'break' to be implemented
+  tc = []
+  9.times { tc << {:cmd=>"s"} }
+  tc << {:cmd=>"p CONST", :exp=>"super class"}
+  3.times { tc << {:cmd=>"s"} }
+  tc << {:cmd=>"p CONST", :exp=>"sub class"}
+  1.times { tc << {:cmd=>"s"} }
+  tc << {:cmd=>"p CONST", :exp=>"top"}
+
+  BinTest_MrubyBinDebugger.test(src, tc)
+end
+=end
+
+assert('mruby-bin-debugger(print) Literal:Numeric') do
+  # ruby source
+  src =  "foo = 'foo'\n"
+
+  # test case
+  tc = []
+  tc << {:cmd=>"p 100",     :exp=>'$1 = 100'}
+  tc << {:cmd=>"p -0b100",  :exp=>'$2 = -4'}
+  tc << {:cmd=>"p +0100",   :exp=>'$3 = 64'}
+  tc << {:cmd=>"p 0x100",   :exp=>'$4 = 256'}
+  tc << {:cmd=>"p 1_234",   :exp=>'$5 = 1234'}
+  tc << {:cmd=>"p 0b1000_0000", :exp=>"$6 = #{0b1000_0000}"}
+  tc << {:cmd=>"p 0x1000_0000", :exp=>"$7 = #{0x1000_0000}"}
+
+  tc << {:cmd=>"p 3.14",    :exp=>'$8 = 3.14'}
+  tc << {:cmd=>"p -12.3",   :exp=>'$9 = -12.3'}
+  tc << {:cmd=>"p +12.000", :exp=>'$10 = 12'}
+  tc << {:cmd=>"p 1e4",     :exp=>'$11 = 10000'}
+  tc << {:cmd=>"p -0.1e-2", :exp=>'$12 = -0.001'}
+
+  BinTest_MrubyBinDebugger.test(src, tc)
+end
+
+assert('mruby-bin-debugger(print) Literal:String') do
+  # ruby source
+  src = <<"SRC"
+foo = 'foo'
+bar = "bar"
+baz = "baz"
+SRC
+
+  # test case
+  tc = []
+  tc << {:cmd=>"s"}
+  tc << {:cmd=>"s"}
+
+  tc << {:cmd=>'p "str"',        :exp=>'$1 = "str"'}
+  tc << {:cmd=>'p "s\tt\rr\n"',  :exp=>'$2 = "s\\tt\\rr\\n"'}
+  tc << {:cmd=>'p "\C-a\C-z"',   :exp=>'$3 = "\\x01\\x1a"'}
+  tc << {:cmd=>'p "#{foo+bar}"', :exp=>'$4 = "foobar"'}
+
+  tc << {:cmd=>'p \'str\'',          :exp=>'$5 = "str"'}
+  tc << {:cmd=>'p \'s\\tt\\rr\\n\'', :exp=>'$6 = "s\\\\tt\\\\rr\\\\n"'}
+  tc << {:cmd=>'p \'\\C-a\\C-z\'',   :exp=>'$7 = "\\\\C-a\\\\C-z"'}
+  tc << {:cmd=>'p \'#{foo+bar}\'',   :exp=>'$8 = "\\#{foo+bar}"'}
+
+  tc << {:cmd=>'p %!str!',        :exp=>'$9 = "str"'}
+  tc << {:cmd=>'p %!s\tt\rr\n!',  :exp=>'$10 = "s\\tt\\rr\\n"'}
+  tc << {:cmd=>'p %!\C-a\C-z!',   :exp=>'$11 = "\\x01\\x1a"'}
+  tc << {:cmd=>'p %!#{foo+bar}!', :exp=>'$12 = "foobar"'}
+
+  tc << {:cmd=>'p %Q!str!',        :exp=>'$13 = "str"'}
+  tc << {:cmd=>'p %Q!s\tt\rr\n!',  :exp=>'$14 = "s\\tt\\rr\\n"'}
+  tc << {:cmd=>'p %Q!\C-a\C-z!',   :exp=>'$15 = "\\x01\\x1a"'}
+  tc << {:cmd=>'p %Q!#{foo+bar}!', :exp=>'$16 = "foobar"'}
+
+  tc << {:cmd=>'p %q!str!',          :exp=>'$17 = "str"'}
+  tc << {:cmd=>'p %q!s\\tt\\rr\\n!', :exp=>'$18 = "s\\\\tt\\\\rr\\\\n"'}
+  tc << {:cmd=>'p %q!\\C-a\\C-z!',   :exp=>'$19 = "\\\\C-a\\\\C-z"'}
+  tc << {:cmd=>'p %q!#{foo+bar}!',   :exp=>'$20 = "\\#{foo+bar}"'}
+
+  BinTest_MrubyBinDebugger.test(src, tc)
+end
+
+assert('mruby-bin-debugger(print) Literal:Array') do
+  # ruby source
+  src = <<"SRC"
+foo = 'foo'
+bar = "bar"
+baz = "baz"
+SRC
+
+  # test case
+  tc = []
+  tc << {:cmd=>"s"}
+  tc << {:cmd=>"s"}
+
+  tc << {:cmd=>'p []',                      :exp=>'$1 = []'}
+  tc << {:cmd=>'p [ 5,  12,   8,    10, ]', :exp=>'$2 = [5, 12, 8, 10]'}
+  tc << {:cmd=>'p [1,2.5,"#{foo+bar}"]',    :exp=>'$3 = [1, 2.5, "foobar"]'}
+  tc << {:cmd=>'p %w[3.14 A\ &\ B #{foo}]', :exp=>'$4 = ["3.14", "A & B", "\#{foo}"]'}
+  tc << {:cmd=>'p %W[3.14 A\ &\ B #{foo}]', :exp=>'$5 = ["3.14", "A & B", "foo"]'}
+
+  BinTest_MrubyBinDebugger.test(src, tc)
+end
+
+assert('mruby-bin-debugger(print) Literal:Hash') do
+  # ruby source
+  src = <<"SRC"
+foo = 'foo'
+bar = "bar"
+baz = "baz"
+SRC
+
+  # test case
+  tc = []
+  tc << {:cmd=>"s"}
+  tc << {:cmd=>"s"}
+
+  tc << {:cmd=>'p {}',                              :exp=>'$1 = {}'}
+  tc << {:cmd=>'p {"one"=>1,"two"=>2}',             :exp=>'$2 = {"one"=>1, "two"=>2}'}
+  tc << {:cmd=>'p {:eins=>"1",   :zwei=>"2", }',    :exp=>'$3 = {:eins=>"1", :zwei=>"2"}'}
+  tc << {:cmd=>'p {uno:"one", dos: 2}',             :exp=>'$4 = {:uno=>"one", :dos=>2}'}
+  tc << {:cmd=>'p {"one"=>1, :zwei=>2, tres:3}',    :exp=>'$5 = {"one"=>1, :zwei=>2, :tres=>3}'}
+  tc << {:cmd=>'p {:foo=>"#{foo}",:bar=>"#{bar}"}', :exp=>'$6 = {:foo=>"foo", :bar=>"bar"}'}
+
+  BinTest_MrubyBinDebugger.test(src, tc)
+end
+
+assert('mruby-bin-debugger(print) Literal:Range') do
+  # ruby source
+  src = "foo = 'foo'\n"
+
+  # test case
+  tc = []
+  tc << {:cmd=>'p 1..10',    :exp=>'$1 = 1..10'}
+  tc << {:cmd=>'p 1...10',   :exp=>'$2 = 1...10'}
+  tc << {:cmd=>'p 100..10',  :exp=>'$3 = 100..10'}
+  tc << {:cmd=>'p 1 ... 10', :exp=>'$4 = 1...10'}
+
+  tc << {:cmd=>'p "1" .. "9"',  :exp=>'$5 = "1".."9"'}
+  tc << {:cmd=>'p "A" ... "Z"', :exp=>'$6 = "A"..."Z"'}
+
+  BinTest_MrubyBinDebugger.test(src, tc)
+end
+
+assert('mruby-bin-debugger(print) Literal:Symbol') do
+  # ruby source
+  src = <<"SRC"
+foo = 'foo'
+bar = "bar"
+baz = "baz"
+SRC
+
+  # test case
+  tc = []
+  tc << {:cmd=>"s"}
+  tc << {:cmd=>"s"}
+
+  tc << {:cmd=>'p :sym',          :exp=>'$1 = :sym'}
+  tc << {:cmd=>'p :"sd"',         :exp=>'$2 = :sd'}
+  tc << {:cmd=>"p :'ss'",         :exp=>'$3 = :ss'}
+  tc << {:cmd=>'p :"123"',        :exp=>'$4 = :"123"'}
+  tc << {:cmd=>'p :"#{foo} baz"', :exp=>'$5 = :"foo baz"'}
+  tc << {:cmd=>'p %s!symsym!',    :exp=>'$6 = :symsym'}
+
+  BinTest_MrubyBinDebugger.test(src, tc)
+end
+
+assert('mruby-bin-debugger(print) Unary operation') do
+  # ruby source
+  src = "foo = 'foo'\n"
+
+  # test case
+  tc = []
+  tc << {:cmd=>'p +10',    :exp=>'$1 = 10'}
+  tc << {:cmd=>'p -100',   :exp=>'$2 = -100'}
+  tc << {:cmd=>'p !true',  :exp=>'$3 = false'}
+  tc << {:cmd=>'p !false', :exp=>'$4 = true'}
+  tc << {:cmd=>'p !nil',   :exp=>'$5 = true'}
+  tc << {:cmd=>'p !1',     :exp=>'$6 = false'}
+
+  BinTest_MrubyBinDebugger.test(src, tc)
+end
+
+assert('mruby-bin-debugger(print) Binary operation') do
+  # ruby source
+  src = <<"SRC"
+CONST = 100
+a,b,c = 1, 5, 8
+foo,bar,baz = 'foo','bar','baz'
+ary = []
+SRC
+
+  # test case
+  tc = []
+  tc << {:cmd=>'s'}
+  tc << {:cmd=>'s'}
+  tc << {:cmd=>'s'}
+
+  tc << {:cmd=>'p a+1',   :exp=>'$1 = 2'}
+  tc << {:cmd=>'p 2-b',   :exp=>'$2 = -3'}
+  tc << {:cmd=>'p c * 3', :exp=>'$3 = 24'}
+  tc << {:cmd=>'p a/b',   :exp=>'$4 = 0.2'}
+  tc << {:cmd=>'p c%b',   :exp=>'$5 = 3'}
+  tc << {:cmd=>'p 2**10', :exp=>'$6 = 1024'}
+  tc << {:cmd=>'p ~3',    :exp=>'$7 = -4'}
+
+  tc << {:cmd=>'p 1<<2',  :exp=>'$8 = 4'}
+  tc << {:cmd=>'p 64>>5', :exp=>'$9 = 2'}
+
+  tc << {:cmd=>'p a|c',   :exp=>'$10 = 9'}
+  tc << {:cmd=>'p a&b',   :exp=>'$11 = 1'}
+  tc << {:cmd=>'p a^b',   :exp=>'$12 = 4'}
+
+  tc << {:cmd=>'p a>b',   :exp=>'$13 = false'}
+  tc << {:cmd=>'p a<b',   :exp=>'$14 = true'}
+  tc << {:cmd=>'p b>=5',  :exp=>'$15 = true'}
+  tc << {:cmd=>'p b<=5',  :exp=>'$16 = true'}
+
+  tc << {:cmd=>'p "A"<=>"B"', :exp=>'$17 = -1'}
+  tc << {:cmd=>'p "A"=="B"',  :exp=>'$18 = false'}
+  tc << {:cmd=>'p "A"==="B"', :exp=>'$19 = false'}
+  tc << {:cmd=>'p "A"!="B"',  :exp=>'$20 = true'}
+
+  tc << {:cmd=>'p false || true', :exp=>'$21 = true'}
+  tc << {:cmd=>'p false && true', :exp=>'$22 = false'}
+
+  tc << {:cmd=>'p not nil',        :exp=>'$23 = true'}
+  tc << {:cmd=>'p false or true',  :exp=>'$24 = true'}
+  tc << {:cmd=>'p false and true', :exp=>'$25 = false'}
+
+  BinTest_MrubyBinDebugger.test(src, tc)
+end
+
+assert('mruby-bin-debugger(print) Ternary operation') do
+  # ruby source
+  src = <<"SRC"
+CONST = 100
+a,b,c = 1, 5, -10
+foo,bar,baz = 'foo','bar','baz'
+ary = []
+SRC
+
+  # test case
+  tc = []
+  tc << {:cmd=>'s'}
+  tc << {:cmd=>'s'}
+  tc << {:cmd=>'s'}
+
+  tc << {:cmd=>'p (a < b) ? a : b',          :exp=>'$1 = 1'}
+  tc << {:cmd=>'p (a > b) ? a : b',          :exp=>'$2 = 5'}
+  tc << {:cmd=>'p true ? "true" : "false"',  :exp=>'$3 = "true"'}
+  tc << {:cmd=>'p false ? "true" : "false"', :exp=>'$4 = "false"'}
+  tc << {:cmd=>'p nil ? "true" : "false"',   :exp=>'$5 = "false"'}
+
+  BinTest_MrubyBinDebugger.test(src, tc)
+end
+
+assert('mruby-bin-debugger(print) Substitution:simple') do
+  # ruby source
+  src = <<"SRC"
+CONST = 100
+a,b,c = 1, 5, -10
+foo,bar,baz = 'foo','bar','baz'
+ary = []
+SRC
+
+  # test case
+  tc = []
+  tc << {:cmd=>'s'}
+  tc << {:cmd=>'s'}
+  tc << {:cmd=>'s'}
+
+  tc << {:cmd=>'p a=2',               :exp=>'$1 = 2'}
+  tc << {:cmd=>'p foo=[foo,bar,baz]', :exp=>'$2 = ["foo", "bar", "baz"]'}
+
+  tc << {:cmd=>'p undefined=-1',      :exp=>'$3 = -1'}
+  tc << {:cmd=>'p "#{undefined}"',    :exp=>'$4 = undefined method'}
+
+  BinTest_MrubyBinDebugger.test(src, tc)
+end
+
+assert('mruby-bin-debugger(print) Substitution:self') do
+  # ruby source
+  src = <<"SRC"
+CONST = 100
+a,b,c = 1, 5, -10
+foo,bar,baz = 'foo','bar','baz'
+ary = []
+SRC
+
+  # test case
+  tc = []
+  tc << {:cmd=>'s'}
+  tc << {:cmd=>'s'}
+  tc << {:cmd=>'s'}
+
+  tc << {:cmd=>'p a+=9',   :exp=>'$1 = 10'}
+  tc << {:cmd=>'p b-=c',   :exp=>'$2 = 15'}
+  tc << {:cmd=>'p bar*=2', :exp=>'$3 = "barbar"'}
+  tc << {:cmd=>'p a/=4',   :exp=>'$4 = 2.5'}
+  tc << {:cmd=>'p c%=4',   :exp=>'$5 = 2'}
+
+  tc << {:cmd=>'p b&=0b0101', :exp=>'$6 = 5'}
+  tc << {:cmd=>'p c|=0x10',   :exp=>'$7 = 18'}
+
+  tc << {:cmd=>'p "#{a} #{b} #{c}"',     :exp=>'$8 = "2.5 5 18"'}
+  tc << {:cmd=>'p "#{foo}#{bar}#{baz}"', :exp=>'$9 = "foobarbarbaz"'}
+
+  tc << {:cmd=>'p a,b,c=[10,20,30]',:exp=>'$10 = [10, 20, 30]'}
+  tc << {:cmd=>'p [a,b,c]',         :exp=>'$11 = [10, 20, 30]'}
+  tc << {:cmd=>'p a,b=b,a',         :exp=>'$12 = [20, 10]'}
+  tc << {:cmd=>'p [a,b]',           :exp=>'$13 = [20, 10]'}
+
+  tc << {:cmd=>'p undefined=-1',    :exp=>'$14 = -1'}
+  tc << {:cmd=>'p "#{undefined}"',  :exp=>'$15 = undefined method'}
+
+  BinTest_MrubyBinDebugger.test(src, tc)
+end
+
+assert('mruby-bin-debugger(print) Substitution:multiple') do
+  # ruby source
+  src = <<"SRC"
+CONST = 100
+a,b,c = 1, 5, -10
+foo,bar,baz = 'foo','bar','baz'
+ary = []
+SRC
+
+  # test case
+  tc = []
+  tc << {:cmd=>'s'}
+  tc << {:cmd=>'s'}
+  tc << {:cmd=>'s'}
+
+  tc << {:cmd=>'p a,b=[10,20]',   :exp=>'$1 = [10, 20]'}
+  tc << {:cmd=>'p [a,b,c]',       :exp=>'$2 = [10, 20, -10]'}
+
+  tc << {:cmd=>'p foo,bar=["FOO","BAR","BAZ"]', :exp=>'$3 = ["FOO", "BAR", "BAZ"]'}
+  tc << {:cmd=>'p [foo,bar,baz]', :exp=>'$4 = ["FOO", "BAR", "baz"]'}
+
+  tc << {:cmd=>'p a,foo=foo,a',   :exp=>'$5 = ["FOO", 10]'}
+  tc << {:cmd=>'p [a,foo]',       :exp=>'$6 = ["FOO", 10]'}
+
+#  tc << {:cmd=>'p a,*b=[123, 456, 789]'}
+#  tc << {:cmd=>'p [a,b]',       :exp=>'[123, [456, 789]]'}
+
+  BinTest_MrubyBinDebugger.test(src, tc)
+end
+
+assert('mruby-bin-debugger(print) Substitution:self') do
+  # ruby source
+  src = <<"SRC"
+CONST = 100
+a,b,c = 1, 5, -10
+foo,bar,baz = 'foo','bar','baz'
+ary = []
+SRC
+
+  # test case
+  tc = []
+  tc << {:cmd=>'s'}
+  tc << {:cmd=>'s'}
+  tc << {:cmd=>'s'}
+
+  tc << {:cmd=>'p a+=9',   :exp=>'$1 = 10'}
+  tc << {:cmd=>'p b-=c',   :exp=>'$2 = 15'}
+  tc << {:cmd=>'p bar*=2', :exp=>'$3 = "barbar"'}
+  tc << {:cmd=>'p a/=4',   :exp=>'$4 = 2.5'}
+  tc << {:cmd=>'p c%=4',   :exp=>'$5 = 2'}
+
+  tc << {:cmd=>'p b&=0b0101', :exp=>'$6 = 5'}
+  tc << {:cmd=>'p c|=0x10',   :exp=>'$7 = 18'}
+
+  tc << {:cmd=>'p "#{a} #{b} #{c}"',     :exp=>'$8 = "2.5 5 18"'}
+  tc << {:cmd=>'p "#{foo}#{bar}#{baz}"', :exp=>'$9 = "foobarbarbaz"'}
+
+  tc << {:cmd=>'p a,b,c=[10,20,30]',:exp=>'$10 = [10, 20, 30]'}
+  tc << {:cmd=>'p [a,b,c]',         :exp=>'$11 = [10, 20, 30]'}
+  tc << {:cmd=>'p a,b=b,a',         :exp=>'$12 = [20, 10]'}
+  tc << {:cmd=>'p [a,b]',           :exp=>'$13 = [20, 10]'}
+
+  tc << {:cmd=>'p undefined=-1',    :exp=>'$14 = -1'}
+  tc << {:cmd=>'p "#{undefined}"',  :exp=>'$15 = undefined method'}
+
+  BinTest_MrubyBinDebugger.test(src, tc)
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-bin-debugger/mrbgem.rake
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-bin-debugger/mrbgem.rake	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-bin-debugger/mrbgem.rake	(revision 439)
@@ -0,0 +1,9 @@
+MRuby::Gem::Specification.new('mruby-bin-debugger') do |spec|
+  spec.license = 'MIT'
+  spec.author  = 'mruby developers'
+  spec.summary = 'mruby debugger command'
+
+  spec.add_dependency('mruby-eval', :core => 'mruby-eval')
+
+  spec.bins = %w(mrdb)
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-bin-debugger/tools/mrdb/apibreak.c
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-bin-debugger/tools/mrdb/apibreak.c	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-bin-debugger/tools/mrdb/apibreak.c	(revision 439)
@@ -0,0 +1,507 @@
+/*
+** apibreak.c
+**
+*/
+
+#include <string.h>
+#include <mruby.h>
+#include <mruby/irep.h>
+#include "mrdb.h"
+#include <mruby/debug.h>
+#include <mruby/opcode.h>
+#include <mruby/class.h>
+#include <mruby/proc.h>
+#include <mruby/variable.h>
+#include "mrdberror.h"
+#include "apibreak.h"
+
+#define MAX_BREAKPOINTNO (MAX_BREAKPOINT * 1024)
+#define MRB_DEBUG_BP_FILE_OK   (0x0001)
+#define MRB_DEBUG_BP_LINENO_OK (0x0002)
+
+static uint16_t
+check_lineno(mrb_irep_debug_info_file *info_file, uint16_t lineno)
+{
+  uint32_t count = info_file->line_entry_count;
+  uint16_t l_idx;
+
+  if (info_file->line_type == mrb_debug_line_ary) {
+    for (l_idx = 0; l_idx < count; ++l_idx) {
+      if (lineno == info_file->lines.ary[l_idx]) {
+        return lineno;
+      }
+    }
+  }
+  else {
+    for (l_idx = 0; l_idx < count; ++l_idx) {
+      if (lineno == info_file->lines.flat_map[l_idx].line) {
+        return lineno;
+      }
+    }
+  }
+
+  return 0;
+}
+
+static int32_t
+get_break_index(mrb_debug_context *dbg, uint32_t bpno)
+{
+  uint32_t i;
+  int32_t index;
+  char hit = FALSE;
+
+  for(i = 0 ; i < dbg->bpnum; i++) {
+    if (dbg->bp[i].bpno == bpno) {
+      hit = TRUE;
+      index = i;
+      break;
+    }
+  }
+
+  if (hit == FALSE) {
+    return MRB_DEBUG_BREAK_INVALID_NO;
+  }
+
+  return index;
+}
+
+static void
+free_breakpoint(mrb_state *mrb, mrb_debug_breakpoint *bp)
+{
+  switch(bp->type) {
+    case MRB_DEBUG_BPTYPE_LINE:
+      mrb_free(mrb, (void*)bp->point.linepoint.file);
+      break;
+    case MRB_DEBUG_BPTYPE_METHOD:
+      mrb_free(mrb, (void*)bp->point.methodpoint.method_name);
+      if (bp->point.methodpoint.class_name != NULL) {
+        mrb_free(mrb, (void*)bp->point.methodpoint.class_name);
+      }
+      break;
+    default:
+      break;
+  }
+}
+
+static uint16_t
+check_file_lineno(mrb_state *mrb, struct mrb_irep *irep, const char *file, uint16_t lineno)
+{
+  mrb_irep_debug_info_file *info_file;
+  uint16_t result = 0;
+  uint16_t f_idx;
+  uint16_t fix_lineno;
+  uint16_t i;
+
+  for (f_idx = 0; f_idx < irep->debug_info->flen; ++f_idx) {
+    const char *filename;
+    info_file = irep->debug_info->files[f_idx];
+    filename = mrb_sym_name_len(mrb, info_file->filename_sym, NULL);
+    if (!strcmp(filename, file)) {
+      result = MRB_DEBUG_BP_FILE_OK;
+
+      fix_lineno = check_lineno(info_file, lineno);
+      if (fix_lineno != 0) {
+        return result | MRB_DEBUG_BP_LINENO_OK;
+      }
+    }
+    for (i=0; i < irep->rlen; ++i) {
+      result  |= check_file_lineno(mrb, irep->reps[i], file, lineno);
+      if (result == (MRB_DEBUG_BP_FILE_OK | MRB_DEBUG_BP_LINENO_OK)) {
+        return result;
+      }
+    }
+  }
+  return result;
+}
+
+static int32_t
+compare_break_method(mrb_state *mrb, mrb_debug_breakpoint *bp, struct RClass *class_obj, mrb_sym method_sym, mrb_bool* isCfunc)
+{
+  const char* class_name;
+  const char* method_name;
+  mrb_method_t m;
+  struct RClass* sc;
+  const char* sn;
+  mrb_sym ssym;
+  mrb_debug_methodpoint *method_p;
+  mrb_bool is_defined;
+
+  method_name = mrb_sym_name(mrb, method_sym);
+
+  method_p = &bp->point.methodpoint;
+  if (strcmp(method_p->method_name, method_name) == 0) {
+    class_name = mrb_class_name(mrb, class_obj);
+    if (class_name == NULL) {
+      if (method_p->class_name == NULL) {
+        return bp->bpno;
+      }
+    }
+    else if (method_p->class_name != NULL) {
+      m = mrb_method_search_vm(mrb, &class_obj, method_sym);
+      if (MRB_METHOD_UNDEF_P(m)) {
+        return MRB_DEBUG_OK;
+      }
+      if (MRB_METHOD_CFUNC_P(m)) {
+        *isCfunc = TRUE;
+      }
+
+      is_defined = mrb_class_defined(mrb, method_p->class_name);
+      if (is_defined == FALSE) {
+        return MRB_DEBUG_OK;
+      }
+
+      sc = mrb_class_get(mrb, method_p->class_name);
+      ssym = mrb_symbol(mrb_check_intern_cstr(mrb, method_p->method_name));
+      m = mrb_method_search_vm(mrb, &sc, ssym);
+      if (MRB_METHOD_UNDEF_P(m)) {
+        return MRB_DEBUG_OK;
+      }
+
+      class_name = mrb_class_name(mrb, class_obj);
+      sn = mrb_class_name(mrb, sc);
+      if (strcmp(sn, class_name) == 0) {
+        return bp->bpno;
+      }
+    }
+  }
+  return MRB_DEBUG_OK;
+}
+
+int32_t
+mrb_debug_set_break_line(mrb_state *mrb, mrb_debug_context *dbg, const char *file, uint16_t lineno)
+{
+  int32_t index;
+  char* set_file;
+  uint16_t result;
+
+  if ((mrb == NULL)||(dbg == NULL)||(file == NULL)) {
+    return MRB_DEBUG_INVALID_ARGUMENT;
+  }
+
+  if (dbg->bpnum >= MAX_BREAKPOINT) {
+    return MRB_DEBUG_BREAK_NUM_OVER;
+  }
+
+  if (dbg->next_bpno > MAX_BREAKPOINTNO) {
+    return MRB_DEBUG_BREAK_NO_OVER;
+  }
+
+  /* file and lineno check (line type mrb_debug_line_ary only.) */
+  result = check_file_lineno(mrb, dbg->root_irep, file, lineno);
+  if (result == 0) {
+    return MRB_DEBUG_BREAK_INVALID_FILE;
+  }
+  else if (result == MRB_DEBUG_BP_FILE_OK) {
+    return MRB_DEBUG_BREAK_INVALID_LINENO;
+  }
+
+  set_file = (char*)mrb_malloc(mrb, strlen(file) + 1);
+
+  index = dbg->bpnum;
+  dbg->bp[index].bpno = dbg->next_bpno;
+  dbg->next_bpno++;
+  dbg->bp[index].enable = TRUE;
+  dbg->bp[index].type = MRB_DEBUG_BPTYPE_LINE;
+  dbg->bp[index].point.linepoint.lineno = lineno;
+  dbg->bpnum++;
+
+  strncpy(set_file, file, strlen(file) + 1);
+
+  dbg->bp[index].point.linepoint.file = set_file;
+
+  return dbg->bp[index].bpno;
+}
+
+int32_t
+mrb_debug_set_break_method(mrb_state *mrb, mrb_debug_context *dbg, const char *class_name, const char *method_name)
+{
+  int32_t index;
+  char* set_class;
+  char* set_method;
+
+  if ((mrb == NULL) || (dbg == NULL) || (method_name == NULL)) {
+    return MRB_DEBUG_INVALID_ARGUMENT;
+  }
+
+  if (dbg->bpnum >= MAX_BREAKPOINT) {
+    return MRB_DEBUG_BREAK_NUM_OVER;
+  }
+
+  if (dbg->next_bpno > MAX_BREAKPOINTNO) {
+    return MRB_DEBUG_BREAK_NO_OVER;
+  }
+
+  if (class_name != NULL) {
+    set_class = (char*)mrb_malloc(mrb, strlen(class_name) + 1);
+    strncpy(set_class, class_name, strlen(class_name) + 1);
+  }
+  else {
+    set_class = NULL;
+  }
+
+  set_method = (char*)mrb_malloc(mrb, strlen(method_name) + 1);
+
+  strncpy(set_method, method_name, strlen(method_name) + 1);
+
+  index = dbg->bpnum;
+  dbg->bp[index].bpno = dbg->next_bpno;
+  dbg->next_bpno++;
+  dbg->bp[index].enable = TRUE;
+  dbg->bp[index].type = MRB_DEBUG_BPTYPE_METHOD;
+  dbg->bp[index].point.methodpoint.method_name = set_method;
+  dbg->bp[index].point.methodpoint.class_name = set_class;
+  dbg->bpnum++;
+
+  return dbg->bp[index].bpno;
+}
+
+int32_t
+mrb_debug_get_breaknum(mrb_state *mrb, mrb_debug_context *dbg)
+{
+  if ((mrb == NULL) || (dbg == NULL)) {
+    return MRB_DEBUG_INVALID_ARGUMENT;
+  }
+
+  return dbg->bpnum;
+}
+
+int32_t
+mrb_debug_get_break_all(mrb_state *mrb, mrb_debug_context *dbg, uint32_t size, mrb_debug_breakpoint *bp)
+{
+  uint32_t get_size = 0;
+
+  if ((mrb == NULL) || (dbg == NULL) || (bp == NULL)) {
+    return MRB_DEBUG_INVALID_ARGUMENT;
+  }
+
+  if (dbg->bpnum >= size) {
+    get_size = size;
+  }
+  else {
+    get_size = dbg->bpnum;
+  }
+
+  memcpy(bp, dbg->bp, sizeof(mrb_debug_breakpoint) * get_size);
+
+  return get_size;
+}
+
+int32_t
+mrb_debug_get_break(mrb_state *mrb, mrb_debug_context *dbg, uint32_t bpno, mrb_debug_breakpoint *bp)
+{
+  int32_t index;
+
+  if ((mrb == NULL) || (dbg == NULL) || (bp == NULL)) {
+    return MRB_DEBUG_INVALID_ARGUMENT;
+  }
+
+  index = get_break_index(dbg, bpno);
+  if (index == MRB_DEBUG_BREAK_INVALID_NO) {
+    return MRB_DEBUG_BREAK_INVALID_NO;
+  }
+
+  bp->bpno = dbg->bp[index].bpno;
+  bp->enable = dbg->bp[index].enable;
+  bp->point = dbg->bp[index].point;
+  bp->type = dbg->bp[index].type;
+
+  return 0;
+}
+
+int32_t
+mrb_debug_delete_break(mrb_state *mrb, mrb_debug_context *dbg, uint32_t bpno)
+{
+  uint32_t i;
+  int32_t index;
+
+  if ((mrb == NULL) ||(dbg == NULL)) {
+    return MRB_DEBUG_INVALID_ARGUMENT;
+  }
+
+  index = get_break_index(dbg, bpno);
+  if (index == MRB_DEBUG_BREAK_INVALID_NO) {
+    return MRB_DEBUG_BREAK_INVALID_NO;
+  }
+
+  free_breakpoint(mrb, &dbg->bp[index]);
+
+  for(i = index ; i < dbg->bpnum; i++) {
+    if ((i + 1) == dbg->bpnum) {
+      memset(&dbg->bp[i], 0, sizeof(mrb_debug_breakpoint));
+    }
+    else {
+      memcpy(&dbg->bp[i], &dbg->bp[i + 1], sizeof(mrb_debug_breakpoint));
+    }
+  }
+
+  dbg->bpnum--;
+
+  return MRB_DEBUG_OK;
+}
+
+int32_t
+mrb_debug_delete_break_all(mrb_state *mrb, mrb_debug_context *dbg)
+{
+  uint32_t i;
+
+  if ((mrb == NULL) || (dbg == NULL)) {
+    return MRB_DEBUG_INVALID_ARGUMENT;
+  }
+
+  for(i = 0 ; i < dbg->bpnum ; i++) {
+    free_breakpoint(mrb, &dbg->bp[i]);
+  }
+
+  dbg->bpnum = 0;
+
+  return MRB_DEBUG_OK;
+}
+
+int32_t
+mrb_debug_enable_break(mrb_state *mrb, mrb_debug_context *dbg, uint32_t bpno)
+{
+  int32_t index = 0;
+
+  if ((mrb == NULL) || (dbg == NULL)) {
+    return MRB_DEBUG_INVALID_ARGUMENT;
+  }
+
+  index = get_break_index(dbg, bpno);
+  if (index == MRB_DEBUG_BREAK_INVALID_NO) {
+    return MRB_DEBUG_BREAK_INVALID_NO;
+  }
+
+  dbg->bp[index].enable = TRUE;
+
+  return MRB_DEBUG_OK;
+}
+
+int32_t
+mrb_debug_enable_break_all(mrb_state *mrb, mrb_debug_context *dbg)
+{
+  uint32_t i;
+
+  if ((mrb == NULL) || (dbg == NULL)) {
+    return MRB_DEBUG_INVALID_ARGUMENT;
+  }
+
+  for(i = 0 ; i < dbg->bpnum; i++) {
+    dbg->bp[i].enable = TRUE;
+  }
+
+  return MRB_DEBUG_OK;
+}
+
+int32_t
+mrb_debug_disable_break(mrb_state *mrb, mrb_debug_context *dbg, uint32_t bpno)
+{
+  int32_t index = 0;
+
+  if ((mrb == NULL) || (dbg == NULL)) {
+    return MRB_DEBUG_INVALID_ARGUMENT;
+  }
+
+  index = get_break_index(dbg, bpno);
+  if (index == MRB_DEBUG_BREAK_INVALID_NO) {
+    return MRB_DEBUG_BREAK_INVALID_NO;
+  }
+
+  dbg->bp[index].enable = FALSE;
+
+  return MRB_DEBUG_OK;
+}
+
+int32_t
+mrb_debug_disable_break_all(mrb_state *mrb, mrb_debug_context *dbg)
+{
+  uint32_t i;
+
+  if ((mrb == NULL) || (dbg == NULL)) {
+    return MRB_DEBUG_INVALID_ARGUMENT;
+  }
+
+  for(i = 0 ; i < dbg->bpnum; i++) {
+    dbg->bp[i].enable = FALSE;
+  }
+
+  return MRB_DEBUG_OK;
+}
+
+static mrb_bool
+check_start_pc_for_line(mrb_state *mrb, mrb_irep *irep, const mrb_code *pc, uint16_t line)
+{
+  if (pc > irep->iseq) {
+    if (line == mrb_debug_get_line(mrb, irep, pc - irep->iseq - 1)) {
+      return FALSE;
+    }
+  }
+  return TRUE;
+}
+
+int32_t
+mrb_debug_check_breakpoint_line(mrb_state *mrb, mrb_debug_context *dbg, const char *file, uint16_t line)
+{
+  mrb_debug_breakpoint *bp;
+  mrb_debug_linepoint *line_p;
+  uint32_t i;
+
+  if ((mrb == NULL) || (dbg == NULL) || (file == NULL) || (line <= 0)) {
+    return MRB_DEBUG_INVALID_ARGUMENT;
+  }
+
+  if (!check_start_pc_for_line(mrb, dbg->irep, dbg->pc, line)) {
+    return MRB_DEBUG_OK;
+  }
+
+  bp = dbg->bp;
+  for(i=0; i<dbg->bpnum; i++) {
+    switch (bp->type) {
+      case MRB_DEBUG_BPTYPE_LINE:
+        if (bp->enable == TRUE) {
+          line_p = &bp->point.linepoint;
+          if ((strcmp(line_p->file, file) == 0) && (line_p->lineno == line)) {
+            return bp->bpno;
+          }
+        }
+        break;
+      case MRB_DEBUG_BPTYPE_METHOD:
+        break;
+      case MRB_DEBUG_BPTYPE_NONE:
+      default:
+        return MRB_DEBUG_OK;
+    }
+    bp++;
+  }
+  return MRB_DEBUG_OK;
+}
+
+
+int32_t
+mrb_debug_check_breakpoint_method(mrb_state *mrb, mrb_debug_context *dbg, struct RClass *class_obj, mrb_sym method_sym, mrb_bool* isCfunc)
+{
+  mrb_debug_breakpoint *bp;
+  int32_t bpno;
+  uint32_t i;
+
+  if ((mrb == NULL) || (dbg == NULL) || (class_obj == NULL)) {
+    return MRB_DEBUG_INVALID_ARGUMENT;
+  }
+
+  bp = dbg->bp;
+  for(i=0; i<dbg->bpnum; i++) {
+    if (bp->type == MRB_DEBUG_BPTYPE_METHOD) {
+      if (bp->enable == TRUE) {
+        bpno = compare_break_method(mrb, bp, class_obj, method_sym, isCfunc);
+        if (bpno > 0) {
+          return bpno;
+        }
+      }
+    }
+    else if (bp->type == MRB_DEBUG_BPTYPE_NONE) {
+      break;
+    }
+    bp++;
+  }
+
+  return 0;
+}
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-bin-debugger/tools/mrdb/apibreak.h
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-bin-debugger/tools/mrdb/apibreak.h	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-bin-debugger/tools/mrdb/apibreak.h	(revision 439)
@@ -0,0 +1,26 @@
+/*
+** apibreak.h
+**
+*/
+
+#ifndef APIBREAK_H_
+#define APIBREAK_H_
+
+#include <mruby.h>
+#include "mrdb.h"
+
+int32_t mrb_debug_set_break_line(mrb_state *, mrb_debug_context *, const char *, uint16_t);
+int32_t mrb_debug_set_break_method(mrb_state *, mrb_debug_context *, const char *, const char *);
+int32_t mrb_debug_get_breaknum(mrb_state *, mrb_debug_context *);
+int32_t mrb_debug_get_break_all(mrb_state *, mrb_debug_context *, uint32_t, mrb_debug_breakpoint bp[]);
+int32_t mrb_debug_get_break(mrb_state *, mrb_debug_context *, uint32_t, mrb_debug_breakpoint *);
+int32_t mrb_debug_delete_break(mrb_state *, mrb_debug_context *, uint32_t);
+int32_t mrb_debug_delete_break_all(mrb_state *, mrb_debug_context *);
+int32_t mrb_debug_enable_break(mrb_state *, mrb_debug_context *, uint32_t);
+int32_t mrb_debug_enable_break_all(mrb_state *, mrb_debug_context *);
+int32_t mrb_debug_disable_break(mrb_state *, mrb_debug_context *, uint32_t);
+int32_t mrb_debug_disable_break_all(mrb_state *, mrb_debug_context *);
+int32_t mrb_debug_check_breakpoint_line(mrb_state *, mrb_debug_context *, const char *, uint16_t);
+int32_t mrb_debug_check_breakpoint_method(mrb_state *, mrb_debug_context *, struct RClass *, mrb_sym, mrb_bool*);
+
+#endif /* APIBREAK_H_ */
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-bin-debugger/tools/mrdb/apilist.c
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-bin-debugger/tools/mrdb/apilist.c	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-bin-debugger/tools/mrdb/apilist.c	(revision 439)
@@ -0,0 +1,240 @@
+/*
+ * apilist.c
+ */
+
+#include <ctype.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "mrdb.h"
+#include "mrdberror.h"
+#include "apilist.h"
+#include <mruby/compile.h>
+#include <mruby/irep.h>
+#include <mruby/debug.h>
+
+#define LINE_BUF_SIZE MAX_COMMAND_LINE
+
+typedef struct source_file {
+  char *path;
+  uint16_t lineno;
+  FILE *fp;
+} source_file;
+
+static void
+source_file_free(mrb_state *mrb, source_file *file)
+{
+  if (file != NULL) {
+    if (file->path != NULL) {
+      mrb_free(mrb, file->path);
+    }
+    if (file->fp != NULL) {
+      fclose(file->fp);
+      file->fp = NULL;
+    }
+    mrb_free(mrb, file);
+  }
+}
+
+static char*
+build_path(mrb_state *mrb, const char *dir, const char *base)
+{
+  int len;
+  char *path = NULL;
+
+  len = strlen(base) + 1;
+
+  if (strcmp(dir, ".")) {
+    len += strlen(dir) + sizeof("/") - 1;
+  }
+
+  path = (char*)mrb_malloc(mrb, len);
+  memset(path, 0, len);
+
+  if (strcmp(dir, ".")) {
+    strcat(path, dir);
+    strcat(path, "/");
+  }
+  strcat(path, base);
+
+  return path;
+}
+
+static char*
+dirname(mrb_state *mrb, const char *path)
+{
+  size_t len;
+  const char *p;
+  char *dir;
+
+  if (path == NULL) {
+    return NULL;
+  }
+
+  p = strrchr(path, '/');
+  len = p != NULL ? (size_t)(p - path) : strlen(path);
+
+  dir = (char*)mrb_malloc(mrb, len + 1);
+  strncpy(dir, path, len);
+  dir[len] = '\0';
+
+  return dir;
+}
+
+static source_file*
+source_file_new(mrb_state *mrb, mrb_debug_context *dbg, char *filename)
+{
+  source_file *file;
+
+  file = (source_file*)mrb_malloc(mrb, sizeof(source_file));
+
+  memset(file, '\0', sizeof(source_file));
+  file->fp = fopen(filename, "rb");
+
+  if (file->fp == NULL) {
+    source_file_free(mrb, file);
+    return NULL;
+  }
+
+  file->lineno = 1;
+  file->path = (char*)mrb_malloc(mrb, strlen(filename) + 1);
+  strcpy(file->path, filename);
+  return file;
+}
+
+static mrb_bool
+remove_newlines(char *s, FILE *fp)
+{
+  int c;
+  char *p;
+  size_t len;
+
+  if ((len = strlen(s)) == 0) {
+    return FALSE;
+  }
+
+  p = s + len - 1;
+
+  if (*p != '\r' && *p != '\n') {
+    return FALSE;
+  }
+
+  if (*p == '\r') {
+    /* peek the next character and skip '\n' */
+    if ((c = fgetc(fp)) != '\n') {
+      ungetc(c, fp);
+    }
+  }
+
+  /* remove trailing newline characters */
+  while (s <= p && (*p == '\r' || *p == '\n')) {
+    *p-- = '\0';
+  }
+
+  return TRUE;
+}
+
+static void
+show_lines(source_file *file, uint16_t line_min, uint16_t line_max)
+{
+  char buf[LINE_BUF_SIZE];
+  int show_lineno = 1, found_newline = 0, is_printed = 0;
+
+  if (file->fp == NULL) {
+    return;
+  }
+
+  while (fgets(buf, sizeof(buf), file->fp) != NULL) {
+    found_newline = remove_newlines(buf, file->fp);
+
+    if (line_min <= file->lineno) {
+      if (show_lineno) {
+        printf("%-8d", file->lineno);
+      }
+      show_lineno = found_newline;
+      printf(found_newline ? "%s\n" : "%s", buf);
+      is_printed = 1;
+    }
+
+    if (found_newline) {
+      if (line_max < ++file->lineno) {
+        break;
+      }
+    }
+  }
+
+  if (is_printed && !found_newline) {
+    printf("\n");
+  }
+}
+
+char*
+mrb_debug_get_source(mrb_state *mrb, mrdb_state *mrdb, const char *srcpath, const char *filename)
+{
+  int i;
+  FILE *fp;
+  const char *search_path[3];
+  char *path = NULL;
+  const char *srcname = strrchr(filename, '/');
+
+  if (srcname) srcname++;
+  else srcname = filename;
+
+  search_path[0] = srcpath;
+  search_path[1] = dirname(mrb, mrb_debug_get_filename(mrb, mrdb->dbg->irep, 0));
+  search_path[2] = ".";
+
+  for (i = 0; i < 3; i++) {
+    if (search_path[i] == NULL) {
+      continue;
+    }
+
+    if ((path = build_path(mrb, search_path[i], srcname)) == NULL) {
+      continue;
+    }
+
+    if ((fp = fopen(path, "rb")) == NULL) {
+      mrb_free(mrb, path);
+      path = NULL;
+      continue;
+    }
+    fclose(fp);
+    break;
+  }
+
+  mrb_free(mrb, (void *)search_path[1]);
+
+  return path;
+}
+
+int32_t
+mrb_debug_list(mrb_state *mrb, mrb_debug_context *dbg, char *filename, uint16_t line_min, uint16_t line_max)
+{
+  char *ext;
+  source_file *file;
+
+  if (mrb == NULL || dbg == NULL || filename == NULL) {
+    return MRB_DEBUG_INVALID_ARGUMENT;
+  }
+
+  ext = strrchr(filename, '.');
+
+  if (ext == NULL || strcmp(ext, ".rb")) {
+    printf("List command only supports .rb file.\n");
+    return MRB_DEBUG_INVALID_ARGUMENT;
+  }
+
+  if (line_min > line_max) {
+    return MRB_DEBUG_INVALID_ARGUMENT;
+  }
+
+  if ((file = source_file_new(mrb, dbg, filename)) != NULL) {
+    show_lines(file, line_min, line_max);
+    source_file_free(mrb, file);
+    return MRB_DEBUG_OK;
+  }
+  else {
+    printf("Invalid source file named %s.\n", filename);
+    return MRB_DEBUG_INVALID_ARGUMENT;
+  }
+}
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-bin-debugger/tools/mrdb/apilist.h
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-bin-debugger/tools/mrdb/apilist.h	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-bin-debugger/tools/mrdb/apilist.h	(revision 439)
@@ -0,0 +1,14 @@
+/*
+ * apilist.h
+ */
+
+#ifndef APILIST_H_
+#define APILIST_H_
+
+#include <mruby.h>
+#include "mrdb.h"
+
+int32_t mrb_debug_list(mrb_state *, mrb_debug_context *, char *, uint16_t, uint16_t);
+char* mrb_debug_get_source(mrb_state *, mrdb_state *, const char *, const char *);
+
+#endif /* APILIST_H_ */
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-bin-debugger/tools/mrdb/apiprint.c
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-bin-debugger/tools/mrdb/apiprint.c	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-bin-debugger/tools/mrdb/apiprint.c	(revision 439)
@@ -0,0 +1,83 @@
+/*
+** apiprint.c
+**
+*/
+
+#include <string.h>
+#include "mrdb.h"
+#include <mruby/value.h>
+#include <mruby/class.h>
+#include <mruby/compile.h>
+#include <mruby/error.h>
+#include <mruby/numeric.h>
+#include <mruby/string.h>
+#include "apiprint.h"
+
+static void
+mrdb_check_syntax(mrb_state *mrb, mrb_debug_context *dbg, const char *expr, size_t len)
+{
+  mrbc_context *c;
+
+  c = mrbc_context_new(mrb);
+  c->no_exec = TRUE;
+  c->capture_errors = TRUE;
+  mrbc_filename(mrb, c, (const char*)dbg->prvfile);
+  c->lineno = dbg->prvline;
+
+  /* Load program */
+  mrb_load_nstring_cxt(mrb, expr, len, c);
+
+  mrbc_context_free(mrb, c);
+}
+
+mrb_value
+mrb_debug_eval(mrb_state *mrb, mrb_debug_context *dbg, const char *expr, size_t len, mrb_bool *exc, int direct_eval)
+{
+  void (*tmp)(struct mrb_state *, struct mrb_irep *, const mrb_code *, mrb_value *);
+  mrb_value ruby_code;
+  mrb_value s;
+  mrb_value v;
+  mrb_value recv;
+
+  /* disable code_fetch_hook */
+  tmp = mrb->code_fetch_hook;
+  mrb->code_fetch_hook = NULL;
+
+  mrdb_check_syntax(mrb, dbg, expr, len);
+  if (mrb->exc) {
+    v = mrb_obj_value(mrb->exc);
+    mrb->exc = 0;
+  }
+  else if (direct_eval) {
+    recv = dbg->regs[0];
+
+    v = mrb_funcall(mrb, recv, expr, 0);
+  }
+  else {
+    /*
+     * begin
+     *   expr
+     * rescue => e
+     *   e
+     * end
+     */
+    ruby_code = mrb_str_new_lit(mrb, "begin\n");
+    ruby_code = mrb_str_cat(mrb, ruby_code, expr, len);
+    ruby_code = mrb_str_cat_lit(mrb, ruby_code, "\nrescue => e\ne\nend");
+
+    recv = dbg->regs[0];
+
+    v =  mrb_funcall(mrb, recv, "instance_eval", 1, ruby_code);
+  }
+
+  if (exc) {
+    *exc = mrb_obj_is_kind_of(mrb, v, mrb->eException_class);
+  }
+
+  s = mrb_inspect(mrb, v);
+
+  /* enable code_fetch_hook */
+  mrb->code_fetch_hook = tmp;
+
+  return s;
+}
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-bin-debugger/tools/mrdb/apiprint.h
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-bin-debugger/tools/mrdb/apiprint.h	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-bin-debugger/tools/mrdb/apiprint.h	(revision 439)
@@ -0,0 +1,13 @@
+/*
+ * apiprint.h
+ */
+
+#ifndef APIPRINT_H_
+#define APIPRINT_H_
+
+#include <mruby.h>
+#include "mrdb.h"
+
+mrb_value mrb_debug_eval(mrb_state*, mrb_debug_context*, const char*, size_t, mrb_bool*, int);
+
+#endif /* APIPRINT_H_ */
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-bin-debugger/tools/mrdb/cmdbreak.c
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-bin-debugger/tools/mrdb/cmdbreak.c	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-bin-debugger/tools/mrdb/cmdbreak.c	(revision 439)
@@ -0,0 +1,436 @@
+/*
+** cmdbreak.c
+**
+*/
+
+#include <ctype.h>
+#include <string.h>
+#include <mruby.h>
+#include <mruby/dump.h>
+#include <mruby/debug.h>
+#include <mruby/string.h>
+#include "mrdb.h"
+#include "mrdberror.h"
+#include "apibreak.h"
+
+#define BREAK_SET_MSG_LINE                  "Breakpoint %d: file %s, line %d.\n"
+#define BREAK_SET_MSG_METHOD                "Breakpoint %d: method %s.\n"
+#define BREAK_SET_MSG_CLASS_METHOD          "Breakpoint %d: class %s, method %s.\n"
+#define BREAK_INFO_MSG_HEADER               "Num     Type           Enb What"
+#define BREAK_INFO_MSG_LINEBREAK            "%-8ubreakpoint     %s   at %s:%u\n"
+#define BREAK_INFO_MSG_METHODBREAK          "%-8ubreakpoint     %s   in %s:%s\n"
+#define BREAK_INFO_MSG_METHODBREAK_NOCLASS  "%-8ubreakpoint     %s   in %s\n"
+#define BREAK_INFO_MSG_ENABLE               "y"
+#define BREAK_INFO_MSG_DISABLE              "n"
+
+#define BREAK_ERR_MSG_INVALIDARG            "Internal error."
+#define BREAK_ERR_MSG_BLANK                 "Try \'help break\' for more information."
+#define BREAK_ERR_MSG_RANGEOVER             "The line number range is from 1 to 65535."
+#define BREAK_ERR_MSG_NUMOVER               "Exceeded the setable number of breakpoint."
+#define BREAK_ERR_MSG_NOOVER                "Breakno is over the available number.Please 'quit' and restart mrdb."
+#define BREAK_ERR_MSG_INVALIDSTR            "String \'%s\' is invalid.\n"
+#define BREAK_ERR_MSG_INVALIDLINENO         "Line %d in file \"%s\" is unavailable.\n"
+#define BREAK_ERR_MSG_INVALIDCLASS          "Class name \'%s\' is invalid.\n"
+#define BREAK_ERR_MSG_INVALIDMETHOD         "Method name \'%s\' is invalid.\n"
+#define BREAK_ERR_MSG_INVALIDFILE           "Source file named \"%s\" is unavailable.\n"
+#define BREAK_ERR_MSG_INVALIDBPNO           "warning: bad breakpoint number at or near '%s'\n"
+#define BREAK_ERR_MSG_INVALIDBPNO_INFO      "Args must be numbers variables."
+#define BREAK_ERR_MSG_NOBPNO                "No breakpoint number %d.\n"
+#define BREAK_ERR_MSG_NOBPNO_INFO           "No breakpoint matching '%d'\n"
+#define BREAK_ERR_MSG_NOBPNO_INFOALL        "No breakpoints."
+
+#define LINENO_MAX_DIGIT 6
+#define BPNO_LETTER_NUM 9
+
+typedef int32_t (*all_command_func)(mrb_state *, mrb_debug_context *);
+typedef int32_t (*select_command_func)(mrb_state *, mrb_debug_context *, uint32_t);
+
+static void
+print_api_common_error(int32_t error)
+{
+  switch(error) {
+    case MRB_DEBUG_INVALID_ARGUMENT:
+      puts(BREAK_ERR_MSG_INVALIDARG);
+      break;
+    default:
+      break;
+  }
+}
+
+#undef STRTOUL
+#define STRTOUL(ul,s) { \
+    int i; \
+    ul = 0; \
+    for(i=0; ISDIGIT(s[i]); i++) ul = 10*ul + (s[i] -'0'); \
+}
+
+static int32_t
+parse_breakpoint_no(char* args)
+{
+  char* ps = args;
+  uint32_t l;
+
+  if ((*ps == '0')||(strlen(ps) >= BPNO_LETTER_NUM)) {
+    return 0;
+  }
+
+  while (!(ISBLANK(*ps)||ISCNTRL(*ps))) {
+    if (!ISDIGIT(*ps)) {
+      return 0;
+    }
+    ps++;
+  }
+
+  STRTOUL(l, args);
+  return l;
+}
+
+static mrb_bool
+exe_set_command_all(mrb_state *mrb, mrdb_state *mrdb, all_command_func func)
+{
+  int32_t ret = MRB_DEBUG_OK;
+
+  if (mrdb->wcnt == 1) {
+    ret = func(mrb, mrdb->dbg);
+    print_api_common_error(ret);
+    return TRUE;
+  }
+  return FALSE;
+}
+
+static void
+exe_set_command_select(mrb_state *mrb, mrdb_state *mrdb, select_command_func func)
+{
+  char* ps;
+  int32_t ret = MRB_DEBUG_OK;
+  int32_t bpno = 0;
+  int32_t i;
+
+  for(i=1; i<mrdb->wcnt; i++) {
+    ps = mrdb->words[i];
+    bpno = parse_breakpoint_no(ps);
+    if (bpno == 0) {
+      printf(BREAK_ERR_MSG_INVALIDBPNO, ps);
+      break;
+    }
+    ret = func(mrb, mrdb->dbg, (uint32_t)bpno);
+    if (ret == MRB_DEBUG_BREAK_INVALID_NO) {
+      printf(BREAK_ERR_MSG_NOBPNO, bpno);
+    }
+    else if (ret != MRB_DEBUG_OK) {
+      print_api_common_error(ret);
+    }
+  }
+}
+
+mrb_debug_bptype
+check_bptype(char* args)
+{
+  char* ps = args;
+
+  if (ISBLANK(*ps)||ISCNTRL(*ps)) {
+    puts(BREAK_ERR_MSG_BLANK);
+    return MRB_DEBUG_BPTYPE_NONE;
+  }
+
+  if (!ISDIGIT(*ps)) {
+    return MRB_DEBUG_BPTYPE_METHOD;
+  }
+
+  while (!(ISBLANK(*ps)||ISCNTRL(*ps))) {
+    if (!ISDIGIT(*ps)) {
+      printf(BREAK_ERR_MSG_INVALIDSTR, args);
+      return MRB_DEBUG_BPTYPE_NONE;
+    }
+    ps++;
+  }
+
+  if ((*args == '0')||(strlen(args) >= LINENO_MAX_DIGIT)) {
+    puts(BREAK_ERR_MSG_RANGEOVER);
+    return MRB_DEBUG_BPTYPE_NONE;
+  }
+
+  return MRB_DEBUG_BPTYPE_LINE;
+}
+
+static void
+print_breakpoint(mrb_debug_breakpoint *bp)
+{
+  const char* enable_letter[] = {BREAK_INFO_MSG_DISABLE, BREAK_INFO_MSG_ENABLE};
+
+  if (bp->type == MRB_DEBUG_BPTYPE_LINE) {
+    printf(BREAK_INFO_MSG_LINEBREAK,
+      bp->bpno, enable_letter[bp->enable], bp->point.linepoint.file, bp->point.linepoint.lineno);
+  }
+  else {
+    if (bp->point.methodpoint.class_name == NULL) {
+      printf(BREAK_INFO_MSG_METHODBREAK_NOCLASS,
+        bp->bpno, enable_letter[bp->enable], bp->point.methodpoint.method_name);
+    }
+    else {
+      printf(BREAK_INFO_MSG_METHODBREAK,
+        bp->bpno, enable_letter[bp->enable], bp->point.methodpoint.class_name, bp->point.methodpoint.method_name);
+    }
+  }
+}
+
+static void
+info_break_all(mrb_state *mrb, mrdb_state *mrdb)
+{
+  int32_t bpnum = 0;
+  int32_t i = 0;
+  int32_t ret = MRB_DEBUG_OK;
+  mrb_debug_breakpoint *bp_list;
+
+  bpnum = mrb_debug_get_breaknum(mrb, mrdb->dbg);
+  if (bpnum < 0) {
+    print_api_common_error(bpnum);
+    return;
+  }
+  else if (bpnum == 0) {
+    puts(BREAK_ERR_MSG_NOBPNO_INFOALL);
+    return;
+  }
+  bp_list = (mrb_debug_breakpoint*)mrb_malloc(mrb, bpnum * sizeof(mrb_debug_breakpoint));
+
+  ret = mrb_debug_get_break_all(mrb, mrdb->dbg, (uint32_t)bpnum, bp_list);
+  if (ret < 0) {
+    print_api_common_error(ret);
+    return;
+  }
+  puts(BREAK_INFO_MSG_HEADER);
+  for(i = 0 ; i < bpnum ; i++) {
+    print_breakpoint(&bp_list[i]);
+  }
+
+  mrb_free(mrb, bp_list);
+}
+
+static void
+info_break_select(mrb_state *mrb, mrdb_state *mrdb)
+{
+  int32_t ret = MRB_DEBUG_OK;
+  int32_t bpno = 0;
+  char* ps = mrdb->command;
+  mrb_debug_breakpoint bp;
+  mrb_bool isFirst = TRUE;
+  int32_t i;
+
+  for(i=2; i<mrdb->wcnt; i++) {
+    ps = mrdb->words[i];
+    bpno = parse_breakpoint_no(ps);
+    if (bpno == 0) {
+      puts(BREAK_ERR_MSG_INVALIDBPNO_INFO);
+      break;
+    }
+
+    ret = mrb_debug_get_break(mrb, mrdb->dbg, bpno, &bp);
+    if (ret == MRB_DEBUG_BREAK_INVALID_NO) {
+      printf(BREAK_ERR_MSG_NOBPNO_INFO, bpno);
+      break;
+    }
+    else if (ret != MRB_DEBUG_OK) {
+      print_api_common_error(ret);
+      break;
+    }
+    else if (isFirst == TRUE) {
+      isFirst = FALSE;
+      puts(BREAK_INFO_MSG_HEADER);
+    }
+    print_breakpoint(&bp);
+  }
+}
+
+mrb_debug_bptype
+parse_breakcommand(mrb_state *mrb, mrdb_state *mrdb, const char **file, uint32_t *line, char **cname, char **method)
+{
+  mrb_debug_context *dbg = mrdb->dbg;
+  char *args;
+  char *body;
+  mrb_debug_bptype type;
+  uint32_t l;
+
+  if (mrdb->wcnt <= 1) {
+    puts(BREAK_ERR_MSG_BLANK);
+    return MRB_DEBUG_BPTYPE_NONE;
+  }
+
+  args = mrdb->words[1];
+  if ((body = strrchr(args, ':')) == NULL) {
+    body = args;
+    type = check_bptype(body);
+  }
+  else {
+    if (body == args) {
+      printf(BREAK_ERR_MSG_INVALIDSTR, args);
+      return MRB_DEBUG_BPTYPE_NONE;
+    }
+    *body = '\0';
+    type = check_bptype(++body);
+  }
+
+  switch(type) {
+    case MRB_DEBUG_BPTYPE_LINE:
+      STRTOUL(l, body);
+      if (l <= 65535) {
+        *line = l;
+        *file = (body == args)? mrb_debug_get_filename(mrb, dbg->irep, dbg->pc - dbg->irep->iseq): args;
+      }
+      else {
+        puts(BREAK_ERR_MSG_RANGEOVER);
+        type = MRB_DEBUG_BPTYPE_NONE;
+      }
+      break;
+    case MRB_DEBUG_BPTYPE_METHOD:
+      if (body == args) {
+        /* method only */
+        if (ISUPPER(*body)||ISLOWER(*body)||(*body == '_')) {
+          *method = body;
+          *cname = NULL;
+        }
+        else {
+          printf(BREAK_ERR_MSG_INVALIDMETHOD, args);
+          type = MRB_DEBUG_BPTYPE_NONE;
+        }
+      }
+      else {
+        if (ISUPPER(*args)) {
+          switch(*body) {
+            case '@': case '$': case '?': case '.': case ',': case ':':
+            case ';': case '#': case '\\': case '\'': case '\"':
+            printf(BREAK_ERR_MSG_INVALIDMETHOD, body);
+            type = MRB_DEBUG_BPTYPE_NONE;
+            break;
+          default:
+            *method = body;
+            *cname = args;
+            break;
+          }
+        }
+        else {
+          printf(BREAK_ERR_MSG_INVALIDCLASS, args);
+          type = MRB_DEBUG_BPTYPE_NONE;
+        }
+      }
+      break;
+    case MRB_DEBUG_BPTYPE_NONE:
+    default:
+      break;
+  }
+
+  return type;
+}
+
+dbgcmd_state
+dbgcmd_break(mrb_state *mrb, mrdb_state *mrdb)
+{
+  mrb_debug_bptype type;
+  mrb_debug_context *dbg = mrdb->dbg;
+  const char *file = NULL;
+  uint32_t line = 0;
+  char *cname = NULL;
+  char *method = NULL;
+  int32_t ret;
+
+  type = parse_breakcommand(mrb, mrdb, &file, &line, &cname, &method);
+  switch (type) {
+    case MRB_DEBUG_BPTYPE_LINE:
+      ret = mrb_debug_set_break_line(mrb, dbg, file, line);
+      break;
+    case MRB_DEBUG_BPTYPE_METHOD:
+      ret = mrb_debug_set_break_method(mrb, dbg, cname, method);
+      break;
+    case MRB_DEBUG_BPTYPE_NONE:
+    default:
+      return DBGST_PROMPT;
+  }
+
+  if (ret >= 0) {
+    if (type == MRB_DEBUG_BPTYPE_LINE) {
+      printf(BREAK_SET_MSG_LINE, ret, file, line);
+    }
+    else if ((type == MRB_DEBUG_BPTYPE_METHOD)&&(cname == NULL)) {
+      printf(BREAK_SET_MSG_METHOD, ret, method);
+    }
+    else {
+      printf(BREAK_SET_MSG_CLASS_METHOD, ret, cname, method);
+    }
+  }
+  else {
+    switch (ret) {
+      case MRB_DEBUG_BREAK_INVALID_LINENO:
+        printf(BREAK_ERR_MSG_INVALIDLINENO, line, file);
+        break;
+      case MRB_DEBUG_BREAK_INVALID_FILE:
+        printf(BREAK_ERR_MSG_INVALIDFILE, file);
+        break;
+      case MRB_DEBUG_BREAK_NUM_OVER:
+        puts(BREAK_ERR_MSG_NUMOVER);
+        break;
+      case MRB_DEBUG_BREAK_NO_OVER:
+        puts(BREAK_ERR_MSG_NOOVER);
+        break;
+      case MRB_DEBUG_INVALID_ARGUMENT:
+        puts(BREAK_ERR_MSG_INVALIDARG);
+        break;
+      case MRB_DEBUG_NOBUF:
+        puts("T.B.D.");
+        break;
+      default:
+        break;
+    }
+  }
+
+  return DBGST_PROMPT;
+}
+
+dbgcmd_state
+dbgcmd_info_break(mrb_state *mrb, mrdb_state *mrdb)
+{
+  if (mrdb->wcnt == 2) {
+    info_break_all(mrb, mrdb);
+  }
+  else {
+    info_break_select(mrb, mrdb);
+  }
+
+  return DBGST_PROMPT;
+}
+
+dbgcmd_state
+dbgcmd_delete(mrb_state *mrb, mrdb_state *mrdb)
+{
+  mrb_bool ret = FALSE;
+
+  ret = exe_set_command_all(mrb, mrdb, mrb_debug_delete_break_all);
+  if (ret != TRUE) {
+    exe_set_command_select(mrb, mrdb, mrb_debug_delete_break);
+  }
+
+  return DBGST_PROMPT;
+}
+
+dbgcmd_state
+dbgcmd_enable(mrb_state *mrb, mrdb_state *mrdb)
+{
+  mrb_bool ret = FALSE;
+
+  ret = exe_set_command_all(mrb, mrdb, mrb_debug_enable_break_all);
+  if (ret != TRUE) {
+    exe_set_command_select(mrb, mrdb, mrb_debug_enable_break);
+  }
+
+  return DBGST_PROMPT;
+}
+
+dbgcmd_state
+dbgcmd_disable(mrb_state *mrb, mrdb_state *mrdb)
+{
+  mrb_bool ret = FALSE;
+
+  ret = exe_set_command_all(mrb, mrdb, mrb_debug_disable_break_all);
+  if (ret != TRUE) {
+    exe_set_command_select(mrb, mrdb, mrb_debug_disable_break);
+  }
+  return DBGST_PROMPT;
+}
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-bin-debugger/tools/mrdb/cmdmisc.c
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-bin-debugger/tools/mrdb/cmdmisc.c	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-bin-debugger/tools/mrdb/cmdmisc.c	(revision 439)
@@ -0,0 +1,508 @@
+/*
+** cmdmisc.c - mruby debugger miscellaneous command functions
+**
+*/
+
+#include <ctype.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "apilist.h"
+#include <mruby/compile.h>
+
+typedef struct help_msg {
+  const char *cmd1;
+  const char *cmd2;
+  const char *short_msg;
+  const char *long_msg;
+} help_msg;
+
+static help_msg help_msg_list[] = {
+  {
+    "b[reak]", NULL, "Set breakpoint",
+    "Usage: break [file:]line\n"
+    "       break [class:]method\n"
+    "\n"
+    "Set breakpoint at specified line or method.\n"
+    "If \'[file:]line\' is specified, break at start of code for that line (in a file).\n"
+    "If \'[class:]method\' is specified, break at start of code for that method (of the class).\n"
+  },
+  {
+    "c[ontinue]", NULL, "Continue program being debugged",
+    "Usage: continue [N]\n"
+    "\n"
+    "Continue program stopped by a breakpoint.\n"
+    "If N, which is non negative value, is passed,\n"
+    "proceed program until the N-th breakpoint is coming.\n"
+    "If N is not passed, N is assumed 1.\n"
+  },
+  {
+    "d[elete]", NULL, "Delete some breakpoints",
+    "Usage: delete [bpno1 [bpno2 [... [bpnoN]]]]\n"
+    "\n"
+    "Delete some breakpoints.\n"
+    "Arguments are breakpoint numbers with spaces in between.\n"
+    "To delete all breakpoints, give no argument.\n"
+  },
+  {
+    "dis[able]", NULL, "Disable some breakpoints",
+    "Usage: disable [bpno1 [bpno2 [... [bpnoN]]]]\n"
+    "\n"
+    "Disable some breakpoints.\n"
+    "Arguments are breakpoint numbers with spaces in between.\n"
+    "To disable all breakpoints, give no argument.\n"
+  },
+  {
+    "en[able]", NULL, "Enable some breakpoints",
+    "Usage: enable [bpno1 [bpno2 [... [bpnoN]]]]\n"
+    "\n"
+    "Enable some breakpoints.\n"
+    "Arguments are breakpoint numbers with spaces in between.\n"
+    "To enable all breakpoints, give no argument.\n"
+  },
+  {
+    "ev[al]", NULL, "Evaluate expression",
+    "Usage: eval expr\n"
+    "\n"
+    "It evaluates and prints the value of the mruby expression.\n"
+    "This is equivalent to the \'print\' command.\n"
+  },
+  {
+    "h[elp]", NULL, "Print this help",
+    "Usage: help [command]\n"
+    "\n"
+    "With no arguments, help displays a short list of commands.\n"
+    "With a command name as help argument, help displays how to use that command.\n"
+  },
+  {
+    "i[nfo]", "b[reakpoints]", "Status of breakpoints",
+    "Usage: info breakpoints [bpno1 [bpno2 [... [bpnoN]]]]\n"
+    "\n"
+    "Status of specified breakpoints (all user-settable breakpoints if no argument).\n"
+    "Arguments are breakpoint numbers with spaces in between.\n"
+  },
+  {
+    "i[nfo]", "l[ocals]", "Print name of local variables",
+    "Usage: info locals\n"
+    "\n"
+    "Print name of local variables.\n"
+  },
+  {
+    "l[ist]", NULL, "List specified line",
+    "Usage: list\n"
+    "       list first[,last]\n"
+    "       list filename:first[,last]\n"
+    "\n"
+    "Print lines from a source file.\n"
+    "\n"
+    "With first and last, list prints lines from first to last.\n"
+    "When last is empty, it stands for ten lines away from first.\n"
+    "With filename, list prints lines in the specified source file.\n"
+  },
+  {
+    "p[rint]", NULL, "Print value of expression",
+    "Usage: print expr\n"
+    "\n"
+    "It evaluates and prints the value of the mruby expression.\n"
+    "This is equivalent to the \'eval\' command.\n"
+  },
+  {
+    "q[uit]", NULL, "Exit mrdb",
+    "Usage: quit\n"
+    "\n"
+    "Exit mrdb.\n"
+  },
+  {
+    "r[un]", NULL, "Start debugged program",
+    "Usage: run\n"
+    "\n"
+    "Start debugged program.\n"
+  },
+  {
+    "s[tep]", NULL, "Step program until it reaches a different source line",
+    "Usage: step\n"
+    "\n"
+    "Step program until it reaches a different source line.\n"
+  },
+  { NULL, NULL, NULL, NULL }
+};
+
+typedef struct listcmd_parser_state {
+  mrb_bool parse_error;
+  mrb_bool has_line_min;
+  mrb_bool has_line_max;
+  char *filename;
+  uint16_t line_min;
+  uint16_t line_max;
+} listcmd_parser_state;
+
+static listcmd_parser_state*
+listcmd_parser_state_new(mrb_state *mrb)
+{
+  listcmd_parser_state *st = (listcmd_parser_state*)mrb_malloc(mrb, sizeof(listcmd_parser_state));
+  memset(st, 0, sizeof(listcmd_parser_state));
+  return st;
+}
+
+static void
+listcmd_parser_state_free(mrb_state *mrb, listcmd_parser_state *st)
+{
+  if (st != NULL) {
+    if (st->filename != NULL) {
+      mrb_free(mrb, st->filename);
+    }
+    mrb_free(mrb, st);
+  }
+}
+
+static mrb_bool
+parse_uint(char **sp, uint16_t *n)
+{
+  char *p;
+  int i;
+
+  if (*sp == NULL || **sp == '\0') {
+    return FALSE;
+  }
+
+  for (p = *sp; *p != '\0' && ISDIGIT(*p); p++) ;
+
+  if (p != *sp && (i = atoi(*sp)) >= 0) {
+    *n = (uint16_t)i;
+    *sp = p;
+    return TRUE;
+  }
+  return FALSE;
+}
+
+static mrb_bool
+skip_char(char **sp, char c)
+{
+  if (*sp != NULL && **sp == c) {
+    ++*sp;
+    return TRUE;
+  }
+  return FALSE;
+}
+
+static mrb_bool
+parse_lineno(mrb_state *mrb, char **sp, listcmd_parser_state *st)
+{
+  if (*sp == NULL || **sp == '\0') {
+    return FALSE;
+  }
+
+  st->has_line_min = FALSE;
+  st->has_line_max = FALSE;
+
+  if (parse_uint(sp, &st->line_min)) {
+    st->has_line_min = TRUE;
+  }
+  else {
+    return FALSE;
+  }
+
+  if (skip_char(sp, ',')) {
+    if (parse_uint(sp, &st->line_max)) {
+      st->has_line_max = TRUE;
+    }
+    else {
+      st->parse_error = TRUE;
+      return FALSE;
+    }
+  }
+  return TRUE;
+}
+
+static mrb_bool
+parse_filename(mrb_state *mrb, char **sp, listcmd_parser_state *st)
+{
+  char *p;
+  int len;
+
+  if (st->filename != NULL) {
+    mrb_free(mrb, st->filename);
+    st->filename = NULL;
+  }
+
+  if ((p = strchr(*sp, ':')) != NULL) {
+    len = p - *sp;
+  }
+  else {
+    len = strlen(*sp);
+  }
+
+  if (len > 0) {
+    st->filename = (char*)mrb_malloc(mrb, len + 1);
+    strncpy(st->filename, *sp, len);
+    st->filename[len] = '\0';
+    *sp += len;
+    return TRUE;
+  }
+  else {
+    return FALSE;
+  }
+}
+
+char*
+replace_ext(mrb_state *mrb, const char *filename, const char *ext)
+{
+  size_t len;
+  const char *p;
+  char *s;
+
+  if (filename == NULL) {
+    return NULL;
+  }
+
+  if ((p = strrchr(filename, '.')) != NULL && strchr(p, '/') == NULL) {
+    len = p - filename;
+  }
+  else {
+    len = strlen(filename);
+  }
+
+  s = (char*)mrb_malloc(mrb, len + strlen(ext) + 1);
+  memset(s, '\0', len + strlen(ext) + 1);
+  strncpy(s, filename, len);
+  strcat(s, ext);
+
+  return s;
+}
+
+static mrb_bool
+parse_listcmd_args(mrb_state *mrb, mrdb_state *mrdb, listcmd_parser_state *st)
+{
+  char *p;
+
+  switch (mrdb->wcnt) {
+  case 2:
+    p = mrdb->words[1];
+
+    /* mrdb->words[1] ::= <lineno> | <filename> ':' <lineno> | <filename> */
+    if (!parse_lineno(mrb, &p, st)) {
+      if (parse_filename(mrb, &p, st)) {
+        if (skip_char(&p, ':')) {
+          if (!parse_lineno(mrb, &p, st)) {
+            st->parse_error = TRUE;
+          }
+        }
+      }
+      else {
+        st->parse_error = TRUE;
+      }
+    }
+    if (*p != '\0') {
+      st->parse_error = TRUE;
+    }
+    break;
+  case 1:
+  case 0:
+    /* do nothing */
+    break;
+  default:
+    st->parse_error = TRUE;
+    printf("too many arguments\n");
+    break;
+  }
+
+  if (!st->parse_error) {
+    if (!st->has_line_min) {
+      st->line_min = (!st->filename && mrdb->dbg->prvline > 0) ? mrdb->dbg->prvline : 1;
+    }
+
+    if (!st->has_line_max) {
+      st->line_max = st->line_min + 9;
+    }
+
+    if (st->filename == NULL) {
+      if (mrdb->dbg->prvfile && strcmp(mrdb->dbg->prvfile, "-")) {
+        st->filename = replace_ext(mrb, mrdb->dbg->prvfile, ".rb");
+      }
+    }
+  }
+
+  if (st->parse_error || st->filename == NULL) {
+    return FALSE;
+  }
+
+  return TRUE;
+}
+
+static mrb_bool
+check_cmd_pattern(const char *pattern, const char *cmd)
+{
+  const char *lbracket, *rbracket, *p, *q;
+
+  if (pattern == NULL && cmd == NULL) {
+    return TRUE;
+  }
+  if (pattern == NULL || cmd == NULL) {
+    return FALSE;
+  }
+  if ((lbracket = strchr(pattern, '[')) == NULL) {
+    return !strcmp(pattern, cmd);
+  }
+  if ((rbracket = strchr(pattern, ']')) == NULL) {
+    return FALSE;
+  }
+  if (strncmp(pattern, cmd, lbracket - pattern)) {
+    return FALSE;
+  }
+
+  p = lbracket + 1;
+  q = (char *)cmd + (lbracket - pattern);
+
+  for ( ; p < rbracket && *q != '\0'; p++, q++) {
+    if (*p != *q) {
+      break;
+    }
+  }
+  return *q == '\0';
+}
+
+static help_msg*
+get_help_msg(char *cmd1, char *cmd2)
+{
+  help_msg *p;
+
+  if (cmd1 == NULL) {
+    return NULL;
+  }
+  for (p = help_msg_list; p->cmd1 != NULL; p++) {
+    if (check_cmd_pattern(p->cmd1, cmd1) && check_cmd_pattern(p->cmd2, cmd2)) {
+      return p;
+    }
+  }
+  return NULL;
+}
+
+static mrb_bool
+show_short_help(void)
+{
+  help_msg *p;
+
+  printf("Commands\n");
+
+  for (p = help_msg_list; p->cmd1 != NULL; p++) {
+    if (p->cmd2 == NULL) {
+      printf("  %s -- %s\n", p->cmd1, p->short_msg);
+    }
+    else {
+      printf("  %s %s -- %s\n", p->cmd1, p->cmd2, p->short_msg);
+    }
+  }
+  return TRUE;
+}
+
+static mrb_bool
+show_long_help(char *cmd1, char *cmd2)
+{
+  help_msg *help;
+
+  if ((help = get_help_msg(cmd1, cmd2)) == NULL) {
+    return FALSE;
+  }
+  printf("%s", help->long_msg);
+  return TRUE;
+}
+
+dbgcmd_state
+dbgcmd_list(mrb_state *mrb, mrdb_state *mrdb)
+{
+  char *filename;
+  listcmd_parser_state *st = listcmd_parser_state_new(mrb);
+
+  if (parse_listcmd_args(mrb, mrdb, st)) {
+    if ((filename = mrb_debug_get_source(mrb, mrdb, mrdb->srcpath, st->filename)) == NULL) {
+      filename = st->filename;
+    }
+    mrb_debug_list(mrb, mrdb->dbg, filename, st->line_min, st->line_max);
+
+    if (filename != NULL && filename != st->filename) {
+      mrb_free(mrb, filename);
+    }
+    listcmd_parser_state_free(mrb, st);
+  }
+
+  return DBGST_PROMPT;
+}
+
+dbgcmd_state
+dbgcmd_help(mrb_state *mrb, mrdb_state *mrdb)
+{
+  mrb_bool is_valid;
+  int i;
+
+  switch (mrdb->wcnt) {
+  case 0:
+  case 1:
+    is_valid = show_short_help();
+    break;
+  case 2:
+    is_valid = show_long_help(mrdb->words[1], NULL);
+    break;
+  case 3:
+    is_valid = show_long_help(mrdb->words[1], mrdb->words[2]);
+    break;
+  default:
+    is_valid = FALSE;
+    break;
+  }
+
+  if (!is_valid) {
+    printf("Invalid command \"");
+    for (i = 1; i < mrdb->wcnt; i++) {
+      printf("%s%s", i == 1 ? "" : " ", mrdb->words[i]);
+    }
+    printf("\". Try \"help\".\n");
+  }
+
+  return DBGST_PROMPT;
+}
+
+dbgcmd_state
+dbgcmd_quit(mrb_state *mrb, mrdb_state *mrdb)
+{
+  switch (mrdb->dbg->xm) {
+  case DBG_RUN:
+  case DBG_STEP:
+  case DBG_NEXT:
+    while (1) {
+      char c;
+      int buf;
+
+      printf("The program is running.  Exit anyway? (y or n) ");
+      fflush(stdout);
+
+      if ((buf = getchar()) == EOF) {
+        mrdb->dbg->xm = DBG_QUIT;
+        break;
+      }
+      c = buf;
+      while (buf != '\n' && (buf = getchar()) != EOF) ;
+
+      if (c == 'y' || c == 'Y') {
+        mrdb->dbg->xm = DBG_QUIT;
+        break;
+      }
+      else if (c == 'n' || c == 'N') {
+        break;
+      }
+      else {
+        printf("Please answer y or n.\n");
+      }
+    }
+    break;
+  default:
+    mrdb->dbg->xm = DBG_QUIT;
+    break;
+  }
+
+  if (mrdb->dbg->xm == DBG_QUIT) {
+    struct RClass *exc;
+    exc = mrb_define_class(mrb, "DebuggerExit", mrb->eException_class);
+    mrb_raise(mrb, exc, "Exit mrdb.");
+  }
+  return DBGST_PROMPT;
+}
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-bin-debugger/tools/mrdb/cmdprint.c
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-bin-debugger/tools/mrdb/cmdprint.c	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-bin-debugger/tools/mrdb/cmdprint.c	(revision 439)
@@ -0,0 +1,81 @@
+/*
+** cmdprint.c - mruby debugger print command functions
+**
+*/
+
+#include <string.h>
+#include "mrdb.h"
+#include <mruby/value.h>
+#include <mruby/class.h>
+#include <mruby/compile.h>
+#include <mruby/error.h>
+#include <mruby/numeric.h>
+#include <mruby/string.h>
+#include "apiprint.h"
+
+dbgcmd_state
+dbgcmd_print(mrb_state *mrb, mrdb_state *mrdb)
+{
+  mrb_value expr;
+  mrb_value result;
+  uint8_t wcnt;
+  int ai;
+
+  if (mrdb->wcnt <= 1) {
+    puts("Parameter not specified.");
+    return DBGST_PROMPT;
+  }
+
+  ai = mrb_gc_arena_save(mrb);
+
+  /* eval expr */
+  expr = mrb_str_new_cstr(mrb, NULL);
+  for (wcnt=1; wcnt<mrdb->wcnt; wcnt++) {
+    expr = mrb_str_cat_lit(mrb, expr, " ");
+    expr = mrb_str_cat_cstr(mrb, expr, mrdb->words[wcnt]);
+  }
+
+  result = mrb_debug_eval(mrb, mrdb->dbg, RSTRING_PTR(expr), RSTRING_LEN(expr), NULL, 0);
+
+  /* $print_no = result */
+  printf("$%lu = ", (unsigned long)mrdb->print_no++);
+  fwrite(RSTRING_PTR(result), RSTRING_LEN(result), 1, stdout);
+  putc('\n', stdout);
+
+  if (mrdb->print_no == 0) {
+    mrdb->print_no = 1;
+  }
+
+  mrb_gc_arena_restore(mrb, ai);
+
+  return DBGST_PROMPT;
+}
+
+dbgcmd_state
+dbgcmd_eval(mrb_state *mrb, mrdb_state *mrdb)
+{
+  return dbgcmd_print(mrb, mrdb);
+}
+
+dbgcmd_state
+dbgcmd_info_local(mrb_state *mrb, mrdb_state *mrdb)
+{
+  mrb_value result;
+  mrb_value s;
+  int ai;
+
+  ai = mrb_gc_arena_save(mrb);
+
+  result = mrb_debug_eval(mrb, mrdb->dbg, "local_variables", 0, NULL, 1);
+
+  s = mrb_str_cat_lit(mrb, result, "\0");
+  printf("$%lu = %s\n", (unsigned long)mrdb->print_no++, RSTRING_PTR(s));
+
+  if (mrdb->print_no == 0) {
+    mrdb->print_no = 1;
+  }
+
+  mrb_gc_arena_restore(mrb, ai);
+
+  return DBGST_PROMPT;
+}
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-bin-debugger/tools/mrdb/cmdrun.c
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-bin-debugger/tools/mrdb/cmdrun.c	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-bin-debugger/tools/mrdb/cmdrun.c	(revision 439)
@@ -0,0 +1,64 @@
+/*
+** cmdrun.c - mruby debugger run command functions
+**
+*/
+
+#include <mruby/opcode.h>
+#include "mrdb.h"
+
+dbgcmd_state
+dbgcmd_run(mrb_state *mrb, mrdb_state *mrdb)
+{
+  mrb_debug_context *dbg = mrdb->dbg;
+
+  if (dbg->xm == DBG_INIT){
+    dbg->xm = DBG_RUN;
+  }
+  else {
+    dbg->xm = DBG_QUIT;
+    if (dbg->xphase == DBG_PHASE_RUNNING){
+      struct RClass *exc;
+      puts("Start it from the beginning.");
+      exc = mrb_define_class(mrb, "DebuggerRestart", mrb->eException_class);
+      mrb_raise(mrb, exc, "Restart mrdb.");
+    }
+  }
+
+  return DBGST_RESTART;
+}
+
+dbgcmd_state
+dbgcmd_continue(mrb_state *mrb, mrdb_state *mrdb)
+{
+  mrb_debug_context *dbg = mrdb->dbg;
+  int ccnt = 1;
+
+  if (mrdb->wcnt > 1){
+    sscanf(mrdb->words[1], "%d", &ccnt);
+  }
+  dbg->ccnt = (uint16_t)(ccnt > 0 ? ccnt : 1);  /* count of continue */
+
+  if (dbg->xphase == DBG_PHASE_AFTER_RUN){
+    puts("The program is not running.");
+    dbg->xm = DBG_QUIT;
+  }
+  else {
+    dbg->xm = DBG_RUN;
+  }
+  return DBGST_CONTINUE;
+}
+
+dbgcmd_state
+dbgcmd_step(mrb_state *mrb, mrdb_state *mrdb)
+{
+  mrdb->dbg->xm = DBG_STEP;
+  return DBGST_CONTINUE;
+}
+
+dbgcmd_state
+dbgcmd_next(mrb_state *mrb, mrdb_state *mrdb)
+{
+  mrdb->dbg->xm = DBG_NEXT;
+  mrdb->dbg->prvci = mrb->c->ci;
+  return DBGST_CONTINUE;
+}
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-bin-debugger/tools/mrdb/mrdb.c
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-bin-debugger/tools/mrdb/mrdb.c	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-bin-debugger/tools/mrdb/mrdb.c	(revision 439)
@@ -0,0 +1,761 @@
+/*
+** mrdb.c - mruby debugger
+**
+*/
+
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+
+#include <mruby.h>
+#include <mruby/dump.h>
+#include <mruby/debug.h>
+#include <mruby/class.h>
+#include <mruby/opcode.h>
+#include <mruby/variable.h>
+
+#include "mrdb.h"
+#include "apibreak.h"
+#include "apilist.h"
+
+void mrdb_state_free(mrb_state *);
+
+static mrb_debug_context *_debug_context = NULL;
+static mrdb_state *_mrdb_state = NULL;
+
+struct _args {
+  FILE *rfp;
+  char* fname;
+  char* srcpath;
+  int argc;
+  char** argv;
+  mrb_bool mrbfile : 1;
+};
+
+typedef struct debug_command {
+  const char *cmd1;
+  const char *cmd2;
+  uint8_t len1;
+  uint8_t len2;
+  uint8_t div;
+  debug_command_id id;
+  debug_command_func func;
+} debug_command;
+
+static const debug_command debug_command_list[] = {
+  {"break",     NULL,           1, 0, 0, DBGCMD_BREAK,          dbgcmd_break},           /* b[reak] */
+  {"continue",  NULL,           1, 0, 0, DBGCMD_CONTINUE,       dbgcmd_continue},        /* c[ontinue] */
+  {"delete",    NULL,           1, 0, 1, DBGCMD_DELETE,         dbgcmd_delete},          /* d[elete] */
+  {"disable",   NULL,           3, 0, 1, DBGCMD_DISABLE,        dbgcmd_disable},         /* dis[able] */
+  {"enable",    NULL,           2, 0, 1, DBGCMD_ENABLE,         dbgcmd_enable},          /* en[able] */
+  {"eval",      NULL,           2, 0, 0, DBGCMD_EVAL,           dbgcmd_eval},            /* ev[al] */
+  {"help",      NULL,           1, 0, 1, DBGCMD_HELP,           dbgcmd_help},            /* h[elp] */
+  {"info",      "breakpoints",  1, 1, 1, DBGCMD_INFO_BREAK,     dbgcmd_info_break},      /* i[nfo] b[reakpoints] */
+  {"info",      "locals",       1, 1, 0, DBGCMD_INFO_LOCAL,     dbgcmd_info_local},      /* i[nfo] l[ocals] */
+  {"list",      NULL,           1, 0, 1, DBGCMD_LIST,           dbgcmd_list},            /* l[ist] */
+  {"print",     NULL,           1, 0, 0, DBGCMD_PRINT,          dbgcmd_print},           /* p[rint] */
+  {"quit",      NULL,           1, 0, 0, DBGCMD_QUIT,           dbgcmd_quit},            /* q[uit] */
+  {"run",       NULL,           1, 0, 0, DBGCMD_RUN,            dbgcmd_run},             /* r[un] */
+  {"step",      NULL,           1, 0, 1, DBGCMD_STEP,           dbgcmd_step},            /* s[tep] */
+  {"next",      NULL,           1, 0, 1, DBGCMD_NEXT,           dbgcmd_next},            /* n[ext] */
+  {NULL}
+};
+
+
+static void
+usage(const char *name)
+{
+  static const char *const usage_msg[] = {
+  "switches:",
+  "-b           load and execute RiteBinary (mrb) file",
+  "-d           specify source directory",
+  "--version    print the version",
+  "--copyright  print the copyright",
+  NULL
+  };
+  const char *const *p = usage_msg;
+
+  printf("Usage: %s [switches] programfile\n", name);
+  while (*p) {
+    printf("  %s\n", *p++);
+  }
+}
+
+static int
+parse_args(mrb_state *mrb, int argc, char **argv, struct _args *args)
+{
+  char **origargv = argv;
+  static const struct _args args_zero = { 0 };
+
+  *args = args_zero;
+
+  for (argc--,argv++; argc > 0; argc--,argv++) {
+    char *item;
+    if (argv[0][0] != '-') break;
+
+    item = argv[0] + 1;
+    switch (*item++) {
+    case 'b':
+      args->mrbfile = TRUE;
+      break;
+    case 'd':
+      if (item[0]) {
+        goto append_srcpath;
+      }
+      else if (argc > 1) {
+        argc--; argv++;
+        item = argv[0];
+append_srcpath:
+        if (!args->srcpath) {
+          size_t buflen;
+          char *buf;
+
+          buflen = strlen(item) + 1;
+          buf = (char *)mrb_malloc(mrb, buflen);
+          memcpy(buf, item, buflen);
+          args->srcpath = buf;
+        }
+        else {
+          size_t srcpathlen;
+          size_t itemlen;
+
+          srcpathlen = strlen(args->srcpath);
+          itemlen = strlen(item);
+          args->srcpath =
+            (char *)mrb_realloc(mrb, args->srcpath, srcpathlen + itemlen + 2);
+          args->srcpath[srcpathlen] = '\n';
+          memcpy(args->srcpath + srcpathlen + 1, item, itemlen + 1);
+        }
+      }
+      else {
+        printf("%s: No path specified for -d\n", *origargv);
+        return EXIT_SUCCESS;
+      }
+      break;
+    case '-':
+      if (strcmp((*argv) + 2, "version") == 0) {
+        mrb_show_version(mrb);
+        exit(EXIT_SUCCESS);
+      }
+      else if (strcmp((*argv) + 2, "copyright") == 0) {
+        mrb_show_copyright(mrb);
+        exit(EXIT_SUCCESS);
+      }
+    default:
+      return EXIT_FAILURE;
+    }
+  }
+
+  if (args->rfp == NULL) {
+    if (*argv == NULL) {
+      printf("%s: Program file not specified.\n", *origargv);
+      return EXIT_FAILURE;
+    }
+    else {
+      args->rfp = fopen(argv[0], args->mrbfile ? "rb" : "r");
+      if (args->rfp == NULL) {
+        printf("%s: Cannot open program file. (%s)\n", *origargv, *argv);
+        return EXIT_FAILURE;
+      }
+      args->fname = argv[0];
+      argc--; argv++;
+    }
+  }
+  args->argv = (char **)mrb_realloc(mrb, args->argv, sizeof(char*) * (argc + 1));
+  memcpy(args->argv, argv, (argc+1) * sizeof(char*));
+  args->argc = argc;
+
+  return EXIT_SUCCESS;
+}
+
+static void
+cleanup(mrb_state *mrb, struct _args *args)
+{
+  if (args->rfp)
+    fclose(args->rfp);
+  if (args->srcpath)
+    mrb_free(mrb, args->srcpath);
+  if (args->argv)
+    mrb_free(mrb, args->argv);
+  mrdb_state_free(mrb);
+  mrb_close(mrb);
+}
+
+static mrb_debug_context*
+mrb_debug_context_new(mrb_state *mrb)
+{
+  mrb_debug_context *dbg = (mrb_debug_context*)mrb_malloc(mrb, sizeof(mrb_debug_context));
+
+  memset(dbg, 0, sizeof(mrb_debug_context));
+
+  dbg->xm = DBG_INIT;
+  dbg->xphase = DBG_PHASE_BEFORE_RUN;
+  dbg->next_bpno = 1;
+
+  return dbg;
+}
+
+mrb_debug_context*
+mrb_debug_context_get(mrb_state *mrb)
+{
+  if (!_debug_context) {
+    _debug_context = mrb_debug_context_new(mrb);
+  }
+  return _debug_context;
+}
+
+void
+mrb_debug_context_set(mrb_debug_context *dbg)
+{
+  _debug_context = dbg;
+}
+
+void
+mrb_debug_context_free(mrb_state *mrb)
+{
+  if (_debug_context) {
+    mrb_debug_delete_break_all(mrb, _debug_context);
+    mrb_free(mrb, _debug_context);
+    _debug_context = NULL;
+  }
+}
+
+static mrdb_state*
+mrdb_state_new(mrb_state *mrb)
+{
+  mrdb_state *mrdb = (mrdb_state*)mrb_malloc(mrb, sizeof(mrdb_state));
+
+  memset(mrdb, 0, sizeof(mrdb_state));
+
+  mrdb->dbg = mrb_debug_context_get(mrb);
+  mrdb->command = (char*)mrb_malloc(mrb, MAX_COMMAND_LINE+1);
+  mrdb->print_no = 1;
+
+  return mrdb;
+}
+
+mrdb_state*
+mrdb_state_get(mrb_state *mrb)
+{
+  if (!_mrdb_state) {
+    _mrdb_state = mrdb_state_new(mrb);
+  }
+  return _mrdb_state;
+}
+
+void
+mrdb_state_set(mrdb_state *mrdb)
+{
+  _mrdb_state = mrdb;
+}
+
+void
+mrdb_state_free(mrb_state *mrb)
+{
+  mrb_debug_context_free(mrb);
+  if (_mrdb_state) {
+    mrb_free(mrb, _mrdb_state->command);
+    mrb_free(mrb, _mrdb_state);
+    _mrdb_state = NULL;
+  }
+}
+
+static char*
+get_command(mrb_state *mrb, mrdb_state *mrdb)
+{
+  int i;
+  int c;
+
+  for (i=0; i<MAX_COMMAND_LINE; i++) {
+    if ((c=getchar()) == EOF || c == '\n') break;
+    mrdb->command[i] = c;
+  }
+
+  if (i == 0 && feof(stdin)) {
+    clearerr(stdin);
+    strcpy(mrdb->command, "quit");
+    i += sizeof("quit") - 1;
+  }
+
+  if (i == MAX_COMMAND_LINE) {
+    for ( ; (c=getchar()) != EOF && c !='\n'; i++) ;
+  }
+
+  if (i > MAX_COMMAND_LINE) {
+    printf("command line too long.\n");
+    i = 0; /* discard command data */
+  }
+  mrdb->command[i] = '\0';
+
+  return mrdb->command;
+}
+
+static char*
+pick_out_word(mrb_state *mrb, char **pp)
+{
+  char *ps;
+
+  for (ps=*pp; ISBLANK(*ps); ps++) ;
+  if (*ps == '\0') {
+    return NULL;
+  }
+
+  if (*ps == '\"' || *ps == '\'') {
+    *pp = strchr(ps+1, *ps);
+    if (*pp) (*pp)++;
+  }
+  else {
+    *pp = strpbrk(ps, " \t");
+  }
+
+  if (!*pp) {
+    *pp = ps + strlen(ps);
+  }
+
+  if (**pp != '\0') {
+    **pp = '\0';
+    (*pp)++;
+  }
+
+  return ps;
+}
+
+static debug_command*
+parse_command(mrb_state *mrb, mrdb_state *mrdb, char *buf)
+{
+  debug_command *cmd = NULL;
+  char *p = buf;
+  size_t wlen;
+
+  /* get word #1 */
+  mrdb->words[0] = pick_out_word(mrb, &p);
+  if (!mrdb->words[0]) {
+    return NULL;
+  }
+  mrdb->wcnt = 1;
+  /* set remain parameter */
+  for ( ; *p && ISBLANK(*p); p++) ;
+  if (*p) {
+    mrdb->words[mrdb->wcnt++] = p;
+  }
+
+  /* check word #1 */
+  for (cmd=(debug_command*)debug_command_list; cmd->cmd1; cmd++) {
+    wlen = strlen(mrdb->words[0]);
+    if (wlen >= cmd->len1 &&
+        strncmp(mrdb->words[0], cmd->cmd1, wlen) == 0) {
+      break;
+    }
+  }
+
+  if (cmd->cmd2) {
+    if (mrdb->wcnt > 1) {
+      /* get word #2 */
+      mrdb->words[1] = pick_out_word(mrb, &p);
+      if (mrdb->words[1]) {
+        /* update remain parameter */
+        for ( ; *p && ISBLANK(*p); p++) ;
+        if (*p) {
+          mrdb->words[mrdb->wcnt++] = p;
+        }
+      }
+    }
+
+    /* check word #1,#2 */
+    for ( ; cmd->cmd1; cmd++) {
+      wlen = strlen(mrdb->words[0]);
+      if (wlen < cmd->len1 ||
+          strncmp(mrdb->words[0], cmd->cmd1, wlen)) {
+        continue;
+      }
+
+      if (!cmd->cmd2) break;          /* word #1 only */
+
+      if (mrdb->wcnt == 1) continue;  /* word #2 not specified */
+
+      wlen = strlen(mrdb->words[1]);
+      if (wlen >= cmd->len2 &&
+          strncmp(mrdb->words[1], cmd->cmd2, wlen) == 0) {
+        break;  /* word #1 and #2 */
+      }
+    }
+  }
+
+  /* divide remain parameters */
+  if (cmd->cmd1 && cmd->div) {
+    p = mrdb->words[--mrdb->wcnt];
+    for ( ; mrdb->wcnt<MAX_COMMAND_WORD; mrdb->wcnt++) {
+      mrdb->words[mrdb->wcnt] = pick_out_word(mrb, &p);
+      if (!mrdb->words[mrdb->wcnt]) {
+        break;
+      }
+    }
+  }
+
+  return cmd->cmd1 ? cmd : NULL;
+}
+
+static void
+print_info_stopped_break(mrb_state *mrb, mrdb_state *mrdb)
+{
+  mrb_debug_breakpoint bp;
+  int32_t ret;
+  uint16_t lineno;
+  const char *file;
+  const char *method_name;
+  const char *class_name;
+
+  ret = mrb_debug_get_break(mrb, mrdb->dbg, mrdb->dbg->stopped_bpno, &bp);
+  if (ret == 0) {
+    switch(bp.type) {
+      case MRB_DEBUG_BPTYPE_LINE:
+        file = bp.point.linepoint.file;
+        lineno = bp.point.linepoint.lineno;
+        printf("Breakpoint %d, at %s:%d\n", bp.bpno, file, lineno);
+        break;
+      case MRB_DEBUG_BPTYPE_METHOD:
+        method_name = bp.point.methodpoint.method_name;
+        class_name = bp.point.methodpoint.class_name;
+        if (class_name == NULL) {
+          printf("Breakpoint %d, %s\n", bp.bpno, method_name);
+        }
+        else {
+          printf("Breakpoint %d, %s:%s\n", bp.bpno, class_name, method_name);
+        }
+        if (mrdb->dbg->isCfunc) {
+          printf("Stopped before calling the C function.\n");
+        }
+        break;
+      default:
+        break;
+    }
+  }
+}
+
+static void
+print_info_stopped_step_next(mrb_state *mrb, mrdb_state *mrdb)
+{
+  const char* file = mrdb->dbg->prvfile;
+  uint16_t lineno = mrdb->dbg->prvline;
+  printf("%s:%d\n", file, lineno);
+}
+
+static void
+print_info_stopped_code(mrb_state *mrb, mrdb_state *mrdb)
+{
+  char* file = mrb_debug_get_source(mrb, mrdb, mrdb->srcpath, mrdb->dbg->prvfile);
+  uint16_t lineno = mrdb->dbg->prvline;
+  if (file != NULL) {
+    mrb_debug_list(mrb, mrdb->dbg, file, lineno, lineno);
+    mrb_free(mrb, file);
+  }
+}
+
+static void
+print_info_stopped(mrb_state *mrb, mrdb_state *mrdb)
+{
+  switch(mrdb->dbg->bm) {
+    case BRK_BREAK:
+      print_info_stopped_break(mrb, mrdb);
+      print_info_stopped_code(mrb, mrdb);
+      break;
+    case BRK_STEP:
+    case BRK_NEXT:
+      print_info_stopped_step_next(mrb, mrdb);
+      print_info_stopped_code(mrb, mrdb);
+      break;
+    default:
+      break;
+  }
+}
+
+static debug_command*
+get_and_parse_command(mrb_state *mrb, mrdb_state *mrdb)
+{
+  debug_command *cmd = NULL;
+  char *p;
+  int i;
+
+  while (!cmd) {
+    for (p=NULL; !p || *p=='\0'; ) {
+      printf("(%s:%d) ", mrdb->dbg->prvfile, mrdb->dbg->prvline);
+      fflush(stdout);
+      p = get_command(mrb, mrdb);
+    }
+
+    cmd = parse_command(mrb, mrdb, p);
+#ifdef _DBG_MRDB_PARSER_
+    for (i=0; i<mrdb->wcnt; i++) {
+      printf("%d: %s\n", i, mrdb->words[i]);
+    }
+#endif
+    if (!cmd) {
+      printf("invalid command (");
+      for (i=0; i<mrdb->wcnt; i++) {
+        if (i>0) {
+          printf(" ");
+        }
+        printf("%s", mrdb->words[i]);
+      }
+      puts(")");
+    }
+  }
+  return cmd;
+}
+
+static int32_t
+check_method_breakpoint(mrb_state *mrb, mrb_irep *irep, const mrb_code *pc, mrb_value *regs)
+{
+  struct RClass* c;
+  mrb_sym sym;
+  int32_t bpno;
+  mrb_bool isCfunc;
+  struct mrb_insn_data insn;
+
+  mrb_debug_context *dbg = mrb_debug_context_get(mrb);
+
+  isCfunc = FALSE;
+  bpno = dbg->method_bpno;
+  dbg->method_bpno = 0;
+
+  insn = mrb_decode_insn(pc);
+  switch(insn.insn) {
+    case OP_SEND:
+    case OP_SENDB:
+      c = mrb_class(mrb, regs[insn.a]);
+      sym = irep->syms[insn.b];
+      break;
+    case OP_SUPER:
+      c = mrb->c->ci->target_class->super;
+      sym = mrb->c->ci->mid;
+      break;
+    default:
+      sym = 0;
+      break;
+  }
+  if (sym != 0) {
+    dbg->method_bpno = mrb_debug_check_breakpoint_method(mrb, dbg, c, sym, &isCfunc);
+    if (isCfunc) {
+      bpno = dbg->method_bpno;
+      dbg->method_bpno = 0;
+    }
+  }
+  dbg->isCfunc = isCfunc;
+  return bpno;
+}
+
+static void
+mrb_code_fetch_hook(mrb_state *mrb, mrb_irep *irep, const mrb_code *pc, mrb_value *regs)
+{
+  const char *file;
+  int32_t line;
+  int32_t bpno;
+
+  mrb_debug_context *dbg = mrb_debug_context_get(mrb);
+
+  mrb_assert(dbg);
+
+  dbg->irep = irep;
+  dbg->pc   = pc;
+  dbg->regs = regs;
+
+  if (dbg->xphase == DBG_PHASE_RESTART) {
+    dbg->root_irep = irep;
+    dbg->prvfile = NULL;
+    dbg->prvline = 0;
+    dbg->prvci = NULL;
+    dbg->xm = DBG_RUN;
+    dbg->xphase = DBG_PHASE_RUNNING;
+  }
+
+  file = mrb_debug_get_filename(mrb, irep, pc - irep->iseq);
+  line = mrb_debug_get_line(mrb, irep, pc - irep->iseq);
+
+  switch (dbg->xm) {
+  case DBG_STEP:
+    if (!file || (dbg->prvfile == file && dbg->prvline == line)) {
+      return;
+    }
+    dbg->method_bpno = 0;
+    dbg->bm = BRK_STEP;
+    break;
+
+  case DBG_NEXT:
+    if (!file || (dbg->prvfile == file && dbg->prvline == line)) {
+      return;
+    }
+    if ((intptr_t)(dbg->prvci) < (intptr_t)(mrb->c->ci)) {
+      return;
+    }
+    dbg->prvci = NULL;
+    dbg->method_bpno = 0;
+    dbg->bm = BRK_NEXT;
+    break;
+
+  case DBG_RUN:
+    bpno = check_method_breakpoint(mrb, irep, pc, regs);
+    if (bpno > 0) {
+      dbg->stopped_bpno = bpno;
+      dbg->bm = BRK_BREAK;
+      break;
+    }
+    if (dbg->prvfile != file || dbg->prvline != line) {
+      bpno = mrb_debug_check_breakpoint_line(mrb, dbg, file, line);
+      if (bpno > 0) {
+        dbg->stopped_bpno = bpno;
+        dbg->bm = BRK_BREAK;
+        break;
+      }
+    }
+    dbg->prvfile = file;
+    dbg->prvline = line;
+    return;
+  case DBG_INIT:
+    dbg->root_irep = irep;
+    dbg->bm = BRK_INIT;
+    if (!file || line < 0) {
+      puts("Cannot get debugging information.");
+    }
+    break;
+
+  default:
+    return;
+  }
+
+  dbg->prvfile = file;
+  dbg->prvline = line;
+
+  if (dbg->bm == BRK_BREAK && --dbg->ccnt > 0) {
+    return;
+  }
+  dbg->break_hook(mrb, dbg);
+
+  dbg->xphase = DBG_PHASE_RUNNING;
+}
+
+static mrdb_exemode
+mrb_debug_break_hook(mrb_state *mrb, mrb_debug_context *dbg)
+{
+  debug_command *cmd;
+  dbgcmd_state st = DBGST_CONTINUE;
+  mrdb_state *mrdb = mrdb_state_get(mrb);
+
+  print_info_stopped(mrb, mrdb);
+
+  while (1) {
+    cmd = get_and_parse_command(mrb, mrdb);
+    mrb_assert(cmd);
+
+    st = cmd->func(mrb, mrdb);
+
+    if ((st == DBGST_CONTINUE) || (st == DBGST_RESTART)) break;
+  }
+  return dbg->xm;
+}
+
+int
+main(int argc, char **argv)
+{
+  mrb_state *mrb = mrb_open();
+  int n = -1;
+  struct _args args;
+  mrb_value v;
+  mrdb_state *mrdb;
+  mrdb_state *mrdb_backup;
+  mrb_debug_context* dbg_backup;
+  debug_command *cmd;
+
+ l_restart:
+
+  if (mrb == NULL) {
+    fputs("Invalid mrb_state, exiting mruby\n", stderr);
+    return EXIT_FAILURE;
+  }
+
+  /* parse command parameters */
+  n = parse_args(mrb, argc, argv, &args);
+  if (n == EXIT_FAILURE || args.rfp == NULL) {
+    cleanup(mrb, &args);
+    usage(argv[0]);
+    return n;
+  }
+
+  /* initialize debugger information */
+  mrdb = mrdb_state_get(mrb);
+  mrb_assert(mrdb && mrdb->dbg);
+  mrdb->srcpath = args.srcpath;
+
+  if (mrdb->dbg->xm == DBG_QUIT) {
+    mrdb->dbg->xphase = DBG_PHASE_RESTART;
+  }
+  else {
+    mrdb->dbg->xphase = DBG_PHASE_BEFORE_RUN;
+  }
+  mrdb->dbg->xm = DBG_INIT;
+  mrdb->dbg->ccnt = 1;
+
+  /* setup hook functions */
+  mrb->code_fetch_hook = mrb_code_fetch_hook;
+  mrdb->dbg->break_hook = mrb_debug_break_hook;
+
+  if (args.mrbfile) { /* .mrb */
+    v = mrb_load_irep_file(mrb, args.rfp);
+  }
+  else {              /* .rb */
+    mrbc_context *cc = mrbc_context_new(mrb);
+    mrbc_filename(mrb, cc, args.fname);
+    v = mrb_load_file_cxt(mrb, args.rfp, cc);
+    mrbc_context_free(mrb, cc);
+  }
+  if (mrdb->dbg->xm == DBG_QUIT && !mrb_undef_p(v) && mrb->exc) {
+    const char *classname = mrb_obj_classname(mrb, mrb_obj_value(mrb->exc));
+    if (!strcmp(classname, "DebuggerExit")) {
+      cleanup(mrb, &args);
+      return 0;
+    }
+    if (!strcmp(classname, "DebuggerRestart")) {
+      mrdb_backup = mrdb_state_get(mrb);
+      dbg_backup = mrb_debug_context_get(mrb);
+
+      mrdb_state_set(NULL);
+      mrb_debug_context_set(NULL);
+
+      cleanup(mrb, &args);
+      mrb = mrb_open();
+
+      mrdb_state_set(mrdb_backup);
+      mrb_debug_context_set(dbg_backup);
+
+      goto l_restart;
+    }
+  }
+  puts("mruby application exited.");
+  mrdb->dbg->xphase = DBG_PHASE_AFTER_RUN;
+  if (!mrb_undef_p(v)) {
+    if (mrb->exc) {
+      mrb_print_error(mrb);
+    }
+    else {
+      printf(" => ");
+      mrb_p(mrb, v);
+    }
+  }
+
+  mrdb->dbg->prvfile = "-";
+  mrdb->dbg->prvline = 0;
+
+  while (1) {
+    cmd = get_and_parse_command(mrb, mrdb);
+    mrb_assert(cmd);
+
+    if (cmd->id == DBGCMD_QUIT) {
+      break;
+    }
+
+    if ( cmd->func(mrb, mrdb) == DBGST_RESTART ) goto l_restart;
+  }
+
+  cleanup(mrb, &args);
+
+  return 0;
+}
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-bin-debugger/tools/mrdb/mrdb.h
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-bin-debugger/tools/mrdb/mrdb.h	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-bin-debugger/tools/mrdb/mrdb.h	(revision 439)
@@ -0,0 +1,167 @@
+/*
+** mrdb.h - mruby debugger
+**
+*/
+
+#ifndef MRDB_H
+#define MRDB_H
+
+#include <mruby.h>
+
+#include "mrdbconf.h"
+
+#ifdef _MSC_VER
+# define __func__ __FUNCTION__
+#endif
+
+#define MAX_COMMAND_WORD (16)
+
+typedef enum debug_command_id {
+  DBGCMD_RUN,
+  DBGCMD_CONTINUE,
+  DBGCMD_NEXT,
+  DBGCMD_STEP,
+  DBGCMD_BREAK,
+  DBGCMD_INFO_BREAK,
+  DBGCMD_INFO_LOCAL,
+  DBGCMD_WATCH,
+  DBGCMD_INFO_WATCH,
+  DBGCMD_ENABLE,
+  DBGCMD_DISABLE,
+  DBGCMD_DELETE,
+  DBGCMD_PRINT,
+  DBGCMD_DISPLAY,
+  DBGCMD_INFO_DISPLAY,
+  DBGCMD_DELETE_DISPLAY,
+  DBGCMD_EVAL,
+  DBGCMD_BACKTRACE,
+  DBGCMD_LIST,
+  DBGCMD_HELP,
+  DBGCMD_QUIT,
+  DBGCMD_UNKNOWN
+} debug_command_id;
+
+typedef enum dbgcmd_state {
+  DBGST_CONTINUE,
+  DBGST_PROMPT,
+  DBGST_COMMAND_ERROR,
+  DBGST_MAX,
+  DBGST_RESTART
+} dbgcmd_state;
+
+typedef enum mrdb_exemode {
+  DBG_INIT,
+  DBG_RUN,
+  DBG_STEP,
+  DBG_NEXT,
+  DBG_QUIT,
+} mrdb_exemode;
+
+typedef enum mrdb_exephase {
+  DBG_PHASE_BEFORE_RUN,
+  DBG_PHASE_RUNNING,
+  DBG_PHASE_AFTER_RUN,
+  DBG_PHASE_RESTART,
+} mrdb_exephase;
+
+typedef enum mrdb_brkmode {
+  BRK_INIT,
+  BRK_BREAK,
+  BRK_STEP,
+  BRK_NEXT,
+  BRK_QUIT,
+} mrdb_brkmode;
+
+typedef enum {
+  MRB_DEBUG_BPTYPE_NONE,
+  MRB_DEBUG_BPTYPE_LINE,
+  MRB_DEBUG_BPTYPE_METHOD,
+} mrb_debug_bptype;
+
+struct mrb_irep;
+struct mrbc_context;
+struct mrb_debug_context;
+
+typedef struct mrb_debug_linepoint {
+  const char *file;
+  uint16_t lineno;
+} mrb_debug_linepoint;
+
+typedef struct mrb_debug_methodpoint {
+  const char *class_name;
+  const char *method_name;
+} mrb_debug_methodpoint;
+
+typedef struct mrb_debug_breakpoint {
+  uint32_t bpno;
+  uint8_t enable;
+  mrb_debug_bptype type;
+  union point {
+    mrb_debug_linepoint linepoint;
+    mrb_debug_methodpoint methodpoint;
+  } point;
+} mrb_debug_breakpoint;
+
+typedef struct mrb_debug_context {
+  struct mrb_irep *root_irep;
+  struct mrb_irep *irep;
+  const mrb_code *pc;
+  mrb_value *regs;
+
+  const char *prvfile;
+  int32_t prvline;
+  mrb_callinfo *prvci;
+
+  mrdb_exemode xm;
+  mrdb_exephase xphase;
+  mrdb_brkmode bm;
+  int16_t bmi;
+
+  uint16_t ccnt;
+  uint16_t scnt;
+
+  mrb_debug_breakpoint bp[MAX_BREAKPOINT];
+  uint32_t bpnum;
+  int32_t next_bpno;
+  int32_t method_bpno;
+  int32_t stopped_bpno;
+  mrb_bool isCfunc;
+
+  mrdb_exemode (*break_hook)(mrb_state *mrb, struct mrb_debug_context *dbg);
+
+} mrb_debug_context;
+
+typedef struct mrdb_state {
+  char *command;
+  uint8_t wcnt;
+  uint8_t pi;
+  char *words[MAX_COMMAND_WORD];
+  const char *srcpath;
+  uint32_t print_no;
+
+  mrb_debug_context *dbg;
+} mrdb_state;
+
+typedef dbgcmd_state (*debug_command_func)(mrb_state*, mrdb_state*);
+
+/* cmdrun.c */
+dbgcmd_state dbgcmd_run(mrb_state*, mrdb_state*);
+dbgcmd_state dbgcmd_continue(mrb_state*, mrdb_state*);
+dbgcmd_state dbgcmd_step(mrb_state*, mrdb_state*);
+dbgcmd_state dbgcmd_next(mrb_state*, mrdb_state*);
+/* cmdbreak.c */
+dbgcmd_state dbgcmd_break(mrb_state*, mrdb_state*);
+dbgcmd_state dbgcmd_info_break(mrb_state*, mrdb_state*);
+dbgcmd_state dbgcmd_info_local(mrb_state*, mrdb_state*);
+dbgcmd_state dbgcmd_delete(mrb_state*, mrdb_state*);
+dbgcmd_state dbgcmd_enable(mrb_state*, mrdb_state*);
+dbgcmd_state dbgcmd_disable(mrb_state*, mrdb_state*);
+/* cmdprint.c */
+dbgcmd_state dbgcmd_print(mrb_state*, mrdb_state*);
+dbgcmd_state dbgcmd_eval(mrb_state*, mrdb_state*);
+/* cmdmisc.c */
+dbgcmd_state dbgcmd_list(mrb_state*, mrdb_state*);
+dbgcmd_state dbgcmd_help(mrb_state*, mrdb_state*);
+dbgcmd_state dbgcmd_quit(mrb_state*, mrdb_state*);
+
+#endif
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-bin-debugger/tools/mrdb/mrdbconf.h
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-bin-debugger/tools/mrdb/mrdbconf.h	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-bin-debugger/tools/mrdb/mrdbconf.h	(revision 439)
@@ -0,0 +1,24 @@
+/*
+** mrdbconf.h - mruby debugger configuration
+**
+*/
+
+#ifndef MRDBCONF_H
+#define MRDBCONF_H
+
+#ifndef MRB_ENABLE_DEBUG_HOOK
+# error mruby-bin-debugger need 'MRB_ENABLE_DEBUG_HOOK' configuration in your 'build_config.rb'
+#endif
+
+#ifdef MRB_DISABLE_STDIO
+# error mruby-bin-debugger conflicts 'MRB_DISABLE_STDIO' configuration in your 'build_config.rb'
+#endif
+
+/* configuration options: */
+/* maximum size for command buffer */
+#define MAX_COMMAND_LINE 1024
+
+/* maximum number of setable breakpoint */
+#define MAX_BREAKPOINT 5
+
+#endif
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-bin-debugger/tools/mrdb/mrdberror.h
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-bin-debugger/tools/mrdb/mrdberror.h	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-bin-debugger/tools/mrdb/mrdberror.h	(revision 439)
@@ -0,0 +1,20 @@
+/*
+** mrdberror.h - mruby debugger error code
+**
+*/
+
+#ifndef MRDBERROR_H
+#define MRDBERROR_H
+
+#define MRB_DEBUG_OK                   (0)
+#define MRB_DEBUG_NOBUF                (-1)
+#define MRB_DEBUG_INVALID_ARGUMENT     (-2)
+
+#define MRB_DEBUG_BREAK_INVALID_LINENO (-11)
+#define MRB_DEBUG_BREAK_INVALID_FILE   (-12)
+#define MRB_DEBUG_BREAK_INVALID_NO     (-13)
+#define MRB_DEBUG_BREAK_NUM_OVER       (-14)
+#define MRB_DEBUG_BREAK_NO_OVER        (-15)
+
+#endif
+
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-bin-mirb/bintest/mirb.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-bin-mirb/bintest/mirb.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-bin-mirb/bintest/mirb.rb	(revision 439)
@@ -0,0 +1,34 @@
+require 'open3'
+
+assert('mirb normal operations') do
+  o, s = Open3.capture2('bin/mirb', :stdin_data => "a=1\nb=2\na+b\n")
+  assert_true o.include?('=> 3')
+  assert_true o.include?('=> 2')
+end
+
+assert('regression for #1563') do
+  o, s = Open3.capture2('bin/mirb', :stdin_data => "a=1;b=2;c=3\nb\nc")
+  assert_true o.include?('=> 3')
+end
+
+assert('mirb -d option') do
+  o, _ = Open3.capture2('bin/mirb', :stdin_data => "$DEBUG\n")
+  assert_true o.include?('=> false')
+  o, _ = Open3.capture2('bin/mirb -d', :stdin_data => "$DEBUG\n")
+  assert_true o.include?('=> true')
+end
+
+assert('mirb -r option') do
+  lib = Tempfile.new('lib.rb')
+  lib.write <<EOS
+class Hoge
+  def hoge
+    :hoge
+  end
+end
+EOS
+  lib.flush
+
+  o, _ = Open3.capture2("bin/mirb -r #{lib.path}", :stdin_data => "Hoge.new.hoge\n")
+  assert_true o.include?('=> :hoge')
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-bin-mirb/mrbgem.rake
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-bin-mirb/mrbgem.rake	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-bin-mirb/mrbgem.rake	(revision 439)
@@ -0,0 +1,33 @@
+MRuby::Gem::Specification.new('mruby-bin-mirb') do |spec|
+  spec.license = 'MIT'
+  spec.author  = 'mruby developers'
+  spec.summary = 'mirb command'
+
+  if spec.build.cc.search_header_path 'readline/readline.h'
+    spec.cc.defines << "ENABLE_READLINE"
+    if spec.build.cc.search_header_path 'termcap.h'
+      if MRUBY_BUILD_HOST_IS_CYGWIN || MRUBY_BUILD_HOST_IS_OPENBSD
+        if spec.build.cc.search_header_path 'termcap.h'
+          if MRUBY_BUILD_HOST_IS_CYGWIN then
+            spec.linker.libraries << 'ncurses'
+          else
+            spec.linker.libraries << 'termcap'
+          end
+        end
+      end
+    end
+    if RUBY_PLATFORM.include?('netbsd')
+      spec.linker.libraries << 'edit'
+    else
+      spec.linker.libraries << 'readline'
+      if spec.build.cc.search_header_path 'curses.h'
+        spec.linker.libraries << 'ncurses'
+      end
+    end
+  elsif spec.build.cc.search_header_path 'linenoise.h'
+    spec.cc.defines << "ENABLE_LINENOISE"
+  end
+
+  spec.bins = %w(mirb)
+  spec.add_dependency('mruby-compiler', :core => 'mruby-compiler')
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-bin-mirb/tools/mirb/mirb.c
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-bin-mirb/tools/mirb/mirb.c	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-bin-mirb/tools/mirb/mirb.c	(revision 439)
@@ -0,0 +1,709 @@
+/*
+** mirb - Embeddable Interactive Ruby Shell
+**
+** This program takes code from the user in
+** an interactive way and executes it
+** immediately. It's a REPL...
+*/
+
+#include <mruby.h>
+
+#ifdef MRB_DISABLE_STDIO
+# error mruby-bin-mirb conflicts 'MRB_DISABLE_STDIO' configuration in your 'build_config.rb'
+#endif
+
+#include <mruby/array.h>
+#include <mruby/proc.h>
+#include <mruby/compile.h>
+#include <mruby/dump.h>
+#include <mruby/string.h>
+#include <mruby/variable.h>
+#include <mruby/throw.h>
+
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+
+#include <signal.h>
+#include <setjmp.h>
+
+#ifdef ENABLE_READLINE
+#include <readline/readline.h>
+#include <readline/history.h>
+#define MIRB_ADD_HISTORY(line) add_history(line)
+#define MIRB_READLINE(ch) readline(ch)
+#if !defined(RL_READLINE_VERSION) || RL_READLINE_VERSION < 0x600
+/* libedit & older readline do not have rl_free() */
+#define MIRB_LINE_FREE(line) free(line)
+#else
+#define MIRB_LINE_FREE(line) rl_free(line)
+#endif
+#define MIRB_WRITE_HISTORY(path) write_history(path)
+#define MIRB_READ_HISTORY(path) read_history(path)
+#define MIRB_USING_HISTORY() using_history()
+#elif defined(ENABLE_LINENOISE)
+#define ENABLE_READLINE
+#include <linenoise.h>
+#define MIRB_ADD_HISTORY(line) linenoiseHistoryAdd(line)
+#define MIRB_READLINE(ch) linenoise(ch)
+#define MIRB_LINE_FREE(line) linenoiseFree(line)
+#define MIRB_WRITE_HISTORY(path) linenoiseHistorySave(path)
+#define MIRB_READ_HISTORY(path) linenoiseHistoryLoad(history_path)
+#define MIRB_USING_HISTORY()
+#endif
+
+#ifndef _WIN32
+#define MIRB_SIGSETJMP(env) sigsetjmp(env, 1)
+#define MIRB_SIGLONGJMP(env, val) siglongjmp(env, val)
+#define SIGJMP_BUF sigjmp_buf
+#else
+#define MIRB_SIGSETJMP(env) setjmp(env)
+#define MIRB_SIGLONGJMP(env, val) longjmp(env, val)
+#define SIGJMP_BUF jmp_buf
+#endif
+
+#ifdef ENABLE_READLINE
+
+static const char history_file_name[] = ".mirb_history";
+
+static char *
+get_history_path(mrb_state *mrb)
+{
+  char *path = NULL;
+  const char *home = getenv("HOME");
+
+#ifdef _WIN32
+  if (home != NULL) {
+    home = getenv("USERPROFILE");
+  }
+#endif
+
+  if (home != NULL) {
+    int len = snprintf(NULL, 0, "%s/%s", home, history_file_name);
+    if (len >= 0) {
+      size_t size = len + 1;
+      path = (char *)mrb_malloc_simple(mrb, size);
+      if (path != NULL) {
+        int n = snprintf(path, size, "%s/%s", home, history_file_name);
+        if (n != len) {
+          mrb_free(mrb, path);
+          path = NULL;
+        }
+      }
+    }
+  }
+
+  return path;
+}
+
+#endif
+
+static void
+p(mrb_state *mrb, mrb_value obj, int prompt)
+{
+  mrb_value val;
+  char* msg;
+
+  val = mrb_funcall(mrb, obj, "inspect", 0);
+  if (prompt) {
+    if (!mrb->exc) {
+      fputs(" => ", stdout);
+    }
+    else {
+      val = mrb_funcall(mrb, mrb_obj_value(mrb->exc), "inspect", 0);
+    }
+  }
+  if (!mrb_string_p(val)) {
+    val = mrb_obj_as_string(mrb, obj);
+  }
+  msg = mrb_locale_from_utf8(RSTRING_PTR(val), (int)RSTRING_LEN(val));
+  fwrite(msg, strlen(msg), 1, stdout);
+  mrb_locale_free(msg);
+  putc('\n', stdout);
+}
+
+/* Guess if the user might want to enter more
+ * or if he wants an evaluation of his code now */
+static mrb_bool
+is_code_block_open(struct mrb_parser_state *parser)
+{
+  mrb_bool code_block_open = FALSE;
+
+  /* check for heredoc */
+  if (parser->parsing_heredoc != NULL) return TRUE;
+
+  /* check for unterminated string */
+  if (parser->lex_strterm) return TRUE;
+
+  /* check if parser error are available */
+  if (0 < parser->nerr) {
+    const char unexpected_end[] = "syntax error, unexpected $end";
+    const char *message = parser->error_buffer[0].message;
+
+    /* a parser error occur, we have to check if */
+    /* we need to read one more line or if there is */
+    /* a different issue which we have to show to */
+    /* the user */
+
+    if (strncmp(message, unexpected_end, sizeof(unexpected_end) - 1) == 0) {
+      code_block_open = TRUE;
+    }
+    else if (strcmp(message, "syntax error, unexpected keyword_end") == 0) {
+      code_block_open = FALSE;
+    }
+    else if (strcmp(message, "syntax error, unexpected tREGEXP_BEG") == 0) {
+      code_block_open = FALSE;
+    }
+    return code_block_open;
+  }
+
+  switch (parser->lstate) {
+
+  /* all states which need more code */
+
+  case EXPR_BEG:
+    /* beginning of a statement, */
+    /* that means previous line ended */
+    code_block_open = FALSE;
+    break;
+  case EXPR_DOT:
+    /* a message dot was the last token, */
+    /* there has to come more */
+    code_block_open = TRUE;
+    break;
+  case EXPR_CLASS:
+    /* a class keyword is not enough! */
+    /* we need also a name of the class */
+    code_block_open = TRUE;
+    break;
+  case EXPR_FNAME:
+    /* a method name is necessary */
+    code_block_open = TRUE;
+    break;
+  case EXPR_VALUE:
+    /* if, elsif, etc. without condition */
+    code_block_open = TRUE;
+    break;
+
+  /* now all the states which are closed */
+
+  case EXPR_ARG:
+    /* an argument is the last token */
+    code_block_open = FALSE;
+    break;
+
+  /* all states which are unsure */
+
+  case EXPR_CMDARG:
+    break;
+  case EXPR_END:
+    /* an expression was ended */
+    break;
+  case EXPR_ENDARG:
+    /* closing parenthese */
+    break;
+  case EXPR_ENDFN:
+    /* definition end */
+    break;
+  case EXPR_MID:
+    /* jump keyword like break, return, ... */
+    break;
+  case EXPR_MAX_STATE:
+    /* don't know what to do with this token */
+    break;
+  default:
+    /* this state is unexpected! */
+    break;
+  }
+
+  return code_block_open;
+}
+
+struct _args {
+  FILE *rfp;
+  mrb_bool verbose      : 1;
+  mrb_bool debug        : 1;
+  int argc;
+  char** argv;
+  int libc;
+  char **libv;
+};
+
+static void
+usage(const char *name)
+{
+  static const char *const usage_msg[] = {
+  "switches:",
+  "-d           set $DEBUG to true (same as `mruby -d`)",
+  "-r library   same as `mruby -r`",
+  "-v           print version number, then run in verbose mode",
+  "--verbose    run in verbose mode",
+  "--version    print the version",
+  "--copyright  print the copyright",
+  NULL
+  };
+  const char *const *p = usage_msg;
+
+  printf("Usage: %s [switches] [programfile] [arguments]\n", name);
+  while (*p)
+    printf("  %s\n", *p++);
+}
+
+static char *
+dup_arg_item(mrb_state *mrb, const char *item)
+{
+  size_t buflen = strlen(item) + 1;
+  char *buf = (char*)mrb_malloc(mrb, buflen);
+  memcpy(buf, item, buflen);
+  return buf;
+}
+
+static int
+parse_args(mrb_state *mrb, int argc, char **argv, struct _args *args)
+{
+  char **origargv = argv;
+  static const struct _args args_zero = { 0 };
+
+  *args = args_zero;
+
+  for (argc--,argv++; argc > 0; argc--,argv++) {
+    char *item;
+    if (argv[0][0] != '-') break;
+
+    item = argv[0] + 1;
+    switch (*item++) {
+    case 'd':
+      args->debug = TRUE;
+      break;
+    case 'r':
+      if (!item[0]) {
+        if (argc <= 1) {
+          printf("%s: No library specified for -r\n", *origargv);
+          return EXIT_FAILURE;
+        }
+        argc--; argv++;
+        item = argv[0];
+      }
+      if (args->libc == 0) {
+        args->libv = (char**)mrb_malloc(mrb, sizeof(char*));
+      }
+      else {
+        args->libv = (char**)mrb_realloc(mrb, args->libv, sizeof(char*) * (args->libc + 1));
+      }
+      args->libv[args->libc++] = dup_arg_item(mrb, item);
+      break;
+    case 'v':
+      if (!args->verbose) mrb_show_version(mrb);
+      args->verbose = TRUE;
+      break;
+    case '-':
+      if (strcmp((*argv) + 2, "version") == 0) {
+        mrb_show_version(mrb);
+        exit(EXIT_SUCCESS);
+      }
+      else if (strcmp((*argv) + 2, "verbose") == 0) {
+        args->verbose = TRUE;
+        break;
+      }
+      else if (strcmp((*argv) + 2, "copyright") == 0) {
+        mrb_show_copyright(mrb);
+        exit(EXIT_SUCCESS);
+      }
+    default:
+      return EXIT_FAILURE;
+    }
+  }
+
+  if (args->rfp == NULL) {
+    if (*argv != NULL) {
+      args->rfp = fopen(argv[0], "r");
+      if (args->rfp == NULL) {
+        printf("Cannot open program file. (%s)\n", *argv);
+        return EXIT_FAILURE;
+      }
+      argc--; argv++;
+    }
+  }
+  args->argv = (char **)mrb_realloc(mrb, args->argv, sizeof(char*) * (argc + 1));
+  memcpy(args->argv, argv, (argc+1) * sizeof(char*));
+  args->argc = argc;
+
+  return EXIT_SUCCESS;
+}
+
+static void
+cleanup(mrb_state *mrb, struct _args *args)
+{
+  if (args->rfp)
+    fclose(args->rfp);
+  mrb_free(mrb, args->argv);
+  if (args->libc) {
+    while (args->libc--) {
+      mrb_free(mrb, args->libv[args->libc]);
+    }
+    mrb_free(mrb, args->libv);
+  }
+  mrb_close(mrb);
+}
+
+/* Print a short remark for the user */
+static void
+print_hint(void)
+{
+  printf("mirb - Embeddable Interactive Ruby Shell\n\n");
+}
+
+#ifndef ENABLE_READLINE
+/* Print the command line prompt of the REPL */
+static void
+print_cmdline(int code_block_open)
+{
+  if (code_block_open) {
+    printf("* ");
+  }
+  else {
+    printf("> ");
+  }
+  fflush(stdout);
+}
+#endif
+
+void mrb_codedump_all(mrb_state*, struct RProc*);
+
+static int
+check_keyword(const char *buf, const char *word)
+{
+  const char *p = buf;
+  size_t len = strlen(word);
+
+  /* skip preceding spaces */
+  while (*p && ISSPACE(*p)) {
+    p++;
+  }
+  /* check keyword */
+  if (strncmp(p, word, len) != 0) {
+    return 0;
+  }
+  p += len;
+  /* skip trailing spaces */
+  while (*p) {
+    if (!ISSPACE(*p)) return 0;
+    p++;
+  }
+  return 1;
+}
+
+
+#ifndef ENABLE_READLINE
+volatile sig_atomic_t input_canceled = 0;
+void
+ctrl_c_handler(int signo)
+{
+  input_canceled = 1;
+}
+#else
+SIGJMP_BUF ctrl_c_buf;
+void
+ctrl_c_handler(int signo)
+{
+  MIRB_SIGLONGJMP(ctrl_c_buf, 1);
+}
+#endif
+
+#ifndef DISABLE_MIRB_UNDERSCORE
+void decl_lv_underscore(mrb_state *mrb, mrbc_context *cxt)
+{
+  struct RProc *proc;
+  struct mrb_parser_state *parser;
+
+  parser = mrb_parse_string(mrb, "_=nil", cxt);
+  if (parser == NULL) {
+    fputs("create parser state error\n", stderr);
+    mrb_close(mrb);
+    exit(EXIT_FAILURE);
+  }
+
+  proc = mrb_generate_code(mrb, parser);
+  mrb_vm_run(mrb, proc, mrb_top_self(mrb), 0);
+
+  mrb_parser_free(parser);
+}
+#endif
+
+int
+main(int argc, char **argv)
+{
+  char ruby_code[4096] = { 0 };
+  char last_code_line[1024] = { 0 };
+#ifndef ENABLE_READLINE
+  int last_char;
+  size_t char_index;
+#else
+  char *history_path;
+  char* line;
+#endif
+  mrbc_context *cxt;
+  struct mrb_parser_state *parser;
+  mrb_state *mrb;
+  mrb_value result;
+  struct _args args;
+  mrb_value ARGV;
+  int n;
+  int i;
+  mrb_bool code_block_open = FALSE;
+  int ai;
+  unsigned int stack_keep = 0;
+
+  /* new interpreter instance */
+  mrb = mrb_open();
+  if (mrb == NULL) {
+    fputs("Invalid mrb interpreter, exiting mirb\n", stderr);
+    return EXIT_FAILURE;
+  }
+
+  n = parse_args(mrb, argc, argv, &args);
+  if (n == EXIT_FAILURE) {
+    cleanup(mrb, &args);
+    usage(argv[0]);
+    return n;
+  }
+
+  ARGV = mrb_ary_new_capa(mrb, args.argc);
+  for (i = 0; i < args.argc; i++) {
+    char* utf8 = mrb_utf8_from_locale(args.argv[i], -1);
+    if (utf8) {
+      mrb_ary_push(mrb, ARGV, mrb_str_new_cstr(mrb, utf8));
+      mrb_utf8_free(utf8);
+    }
+  }
+  mrb_define_global_const(mrb, "ARGV", ARGV);
+  mrb_gv_set(mrb, mrb_intern_lit(mrb, "$DEBUG"), mrb_bool_value(args.debug));
+
+#ifdef ENABLE_READLINE
+  history_path = get_history_path(mrb);
+  if (history_path == NULL) {
+    fputs("failed to get history path\n", stderr);
+    mrb_close(mrb);
+    return EXIT_FAILURE;
+  }
+
+  MIRB_USING_HISTORY();
+  MIRB_READ_HISTORY(history_path);
+#endif
+
+  print_hint();
+
+  cxt = mrbc_context_new(mrb);
+
+#ifndef DISABLE_MIRB_UNDERSCORE
+  decl_lv_underscore(mrb, cxt);
+#endif
+
+  /* Load libraries */
+  for (i = 0; i < args.libc; i++) {
+    FILE *lfp = fopen(args.libv[i], "r");
+    if (lfp == NULL) {
+      printf("Cannot open library file. (%s)\n", args.libv[i]);
+      cleanup(mrb, &args);
+      return EXIT_FAILURE;
+    }
+    mrb_load_file_cxt(mrb, lfp, cxt);
+    fclose(lfp);
+  }
+
+  cxt->capture_errors = TRUE;
+  cxt->lineno = 1;
+  mrbc_filename(mrb, cxt, "(mirb)");
+  if (args.verbose) cxt->dump_result = TRUE;
+
+  ai = mrb_gc_arena_save(mrb);
+
+  while (TRUE) {
+    char *utf8;
+    struct mrb_jmpbuf c_jmp;
+
+    MRB_TRY(&c_jmp);
+    mrb->jmp = &c_jmp;
+    if (args.rfp) {
+      if (fgets(last_code_line, sizeof(last_code_line)-1, args.rfp) != NULL)
+        goto done;
+      break;
+    }
+
+#ifndef ENABLE_READLINE
+    print_cmdline(code_block_open);
+
+    signal(SIGINT, ctrl_c_handler);
+    char_index = 0;
+    while ((last_char = getchar()) != '\n') {
+      if (last_char == EOF) break;
+      if (char_index >= sizeof(last_code_line)-2) {
+        fputs("input string too long\n", stderr);
+        continue;
+      }
+      last_code_line[char_index++] = last_char;
+    }
+    signal(SIGINT, SIG_DFL);
+    if (input_canceled) {
+      ruby_code[0] = '\0';
+      last_code_line[0] = '\0';
+      code_block_open = FALSE;
+      puts("^C");
+      input_canceled = 0;
+      continue;
+    }
+    if (last_char == EOF) {
+      fputs("\n", stdout);
+      break;
+    }
+
+    last_code_line[char_index++] = '\n';
+    last_code_line[char_index] = '\0';
+#else
+    if (MIRB_SIGSETJMP(ctrl_c_buf) == 0) {
+      ;
+    }
+    else {
+      ruby_code[0] = '\0';
+      last_code_line[0] = '\0';
+      code_block_open = FALSE;
+      puts("^C");
+    }
+    signal(SIGINT, ctrl_c_handler);
+    line = MIRB_READLINE(code_block_open ? "* " : "> ");
+    signal(SIGINT, SIG_DFL);
+
+    if (line == NULL) {
+      printf("\n");
+      break;
+    }
+    if (strlen(line) > sizeof(last_code_line)-2) {
+      fputs("input string too long\n", stderr);
+      continue;
+    }
+    strcpy(last_code_line, line);
+    strcat(last_code_line, "\n");
+    MIRB_ADD_HISTORY(line);
+    MIRB_LINE_FREE(line);
+#endif
+
+  done:
+    if (code_block_open) {
+      if (strlen(ruby_code)+strlen(last_code_line) > sizeof(ruby_code)-1) {
+        fputs("concatenated input string too long\n", stderr);
+        continue;
+      }
+      strcat(ruby_code, last_code_line);
+    }
+    else {
+      if (check_keyword(last_code_line, "quit") || check_keyword(last_code_line, "exit")) {
+        break;
+      }
+      strcpy(ruby_code, last_code_line);
+    }
+
+    utf8 = mrb_utf8_from_locale(ruby_code, -1);
+    if (!utf8) abort();
+
+    /* parse code */
+    parser = mrb_parser_new(mrb);
+    if (parser == NULL) {
+      fputs("create parser state error\n", stderr);
+      break;
+    }
+    parser->s = utf8;
+    parser->send = utf8 + strlen(utf8);
+    parser->lineno = cxt->lineno;
+    mrb_parser_parse(parser, cxt);
+    code_block_open = is_code_block_open(parser);
+    mrb_utf8_free(utf8);
+
+    if (code_block_open) {
+      /* no evaluation of code */
+    }
+    else {
+      if (0 < parser->nwarn) {
+        /* warning */
+        char* msg = mrb_locale_from_utf8(parser->warn_buffer[0].message, -1);
+        printf("line %d: %s\n", parser->warn_buffer[0].lineno, msg);
+        mrb_locale_free(msg);
+      }
+      if (0 < parser->nerr) {
+        /* syntax error */
+        char* msg = mrb_locale_from_utf8(parser->error_buffer[0].message, -1);
+        printf("line %d: %s\n", parser->error_buffer[0].lineno, msg);
+        mrb_locale_free(msg);
+      }
+      else {
+        /* generate bytecode */
+        struct RProc *proc = mrb_generate_code(mrb, parser);
+        if (proc == NULL) {
+          fputs("codegen error\n", stderr);
+          mrb_parser_free(parser);
+          break;
+        }
+
+        if (args.verbose) {
+          mrb_codedump_all(mrb, proc);
+        }
+        /* adjust stack length of toplevel environment */
+        if (mrb->c->cibase->env) {
+          struct REnv *e = mrb->c->cibase->env;
+          if (e && MRB_ENV_STACK_LEN(e) < proc->body.irep->nlocals) {
+            MRB_ENV_SET_STACK_LEN(e, proc->body.irep->nlocals);
+          }
+        }
+        /* pass a proc for evaluation */
+        /* evaluate the bytecode */
+        result = mrb_vm_run(mrb,
+            proc,
+            mrb_top_self(mrb),
+            stack_keep);
+        stack_keep = proc->body.irep->nlocals;
+        /* did an exception occur? */
+        if (mrb->exc) {
+          p(mrb, mrb_obj_value(mrb->exc), 0);
+          mrb->exc = 0;
+        }
+        else {
+          /* no */
+          if (!mrb_respond_to(mrb, result, mrb_intern_lit(mrb, "inspect"))){
+            result = mrb_any_to_s(mrb, result);
+          }
+          p(mrb, result, 1);
+#ifndef DISABLE_MIRB_UNDERSCORE
+          *(mrb->c->stack + 1) = result;
+#endif
+        }
+      }
+      ruby_code[0] = '\0';
+      last_code_line[0] = '\0';
+      mrb_gc_arena_restore(mrb, ai);
+    }
+    mrb_parser_free(parser);
+    cxt->lineno++;
+    MRB_CATCH(&c_jmp) {
+      p(mrb, mrb_obj_value(mrb->exc), 0);
+      mrb->exc = 0;
+    }
+    MRB_END_EXC(&c_jmp);
+  }
+
+#ifdef ENABLE_READLINE
+  MIRB_WRITE_HISTORY(history_path);
+  mrb_free(mrb, history_path);
+#endif
+
+  if (args.rfp) fclose(args.rfp);
+  mrb_free(mrb, args.argv);
+  if (args.libv) {
+    for (i = 0; i < args.libc; ++i) {
+      mrb_free(mrb, args.libv[i]);
+    }
+    mrb_free(mrb, args.libv);
+  }
+  mrbc_context_free(mrb, cxt);
+  mrb_close(mrb);
+
+  return 0;
+}
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-bin-mrbc/mrbgem.rake
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-bin-mrbc/mrbgem.rake	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-bin-mrbc/mrbgem.rake	(revision 439)
@@ -0,0 +1,16 @@
+MRuby::Gem::Specification.new 'mruby-bin-mrbc' do |spec|
+  spec.license = 'MIT'
+  spec.author  = 'mruby developers'
+  spec.summary = 'mruby compiler executable'
+
+  spec.add_dependency 'mruby-compiler', :core => 'mruby-compiler'
+
+  exec = exefile("#{build.build_dir}/bin/mrbc")
+  mrbc_objs = Dir.glob("#{spec.dir}/tools/mrbc/*.c").map { |f| objfile(f.pathmap("#{spec.build_dir}/tools/mrbc/%n")) }.flatten
+
+  file exec => mrbc_objs + [build.libmruby_core_static] do |t|
+    build.linker.run t.name, t.prerequisites
+  end
+
+  build.bins << 'mrbc' unless build.bins.find { |v| v == 'mrbc' }
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-bin-mrbc/tools/mrbc/mrbc.c
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-bin-mrbc/tools/mrbc/mrbc.c	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-bin-mrbc/tools/mrbc/mrbc.c	(revision 439)
@@ -0,0 +1,348 @@
+#include <mruby.h>
+
+#ifdef MRB_DISABLE_STDIO
+# error mruby-bin-mrbc conflicts 'MRB_DISABLE_STDIO' configuration in your 'build_config.rb'
+#endif
+
+#include <stdlib.h>
+#include <string.h>
+#include <mruby/compile.h>
+#include <mruby/dump.h>
+#include <mruby/proc.h>
+
+#define RITEBIN_EXT ".mrb"
+#define C_EXT       ".c"
+
+struct mrbc_args {
+  int argc;
+  char **argv;
+  int idx;
+  const char *prog;
+  const char *outfile;
+  const char *initname;
+  mrb_bool check_syntax : 1;
+  mrb_bool verbose      : 1;
+  mrb_bool remove_lv    : 1;
+  unsigned int flags    : 4;
+};
+
+static void
+usage(const char *name)
+{
+  static const char *const usage_msg[] = {
+  "switches:",
+  "-c           check syntax only",
+  "-o<outfile>  place the output into <outfile>",
+  "-v           print version number, then turn on verbose mode",
+  "-g           produce debugging information",
+  "-B<symbol>   binary <symbol> output in C language format",
+  "-e           generate little endian iseq data",
+  "-E           generate big endian iseq data",
+  "--remove-lv  remove local variables",
+  "--verbose    run at verbose mode",
+  "--version    print the version",
+  "--copyright  print the copyright",
+  NULL
+  };
+  const char *const *p = usage_msg;
+
+  printf("Usage: %s [switches] programfile\n", name);
+  while (*p)
+    printf("  %s\n", *p++);
+}
+
+static char *
+get_outfilename(mrb_state *mrb, char *infile, const char *ext)
+{
+  size_t infilelen;
+  size_t extlen;
+  char *outfile;
+  char *p;
+
+  infilelen = strlen(infile);
+  extlen = strlen(ext);
+  outfile = (char*)mrb_malloc(mrb, infilelen + extlen + 1);
+  memcpy(outfile, infile, infilelen + 1);
+  if (*ext) {
+    if ((p = strrchr(outfile, '.')) == NULL)
+      p = outfile + infilelen;
+    memcpy(p, ext, extlen + 1);
+  }
+
+  return outfile;
+}
+
+static int
+parse_args(mrb_state *mrb, int argc, char **argv, struct mrbc_args *args)
+{
+  static const struct mrbc_args args_zero = { 0 };
+  int i;
+
+  *args = args_zero;
+  args->argc = argc;
+  args->argv = argv;
+  args->prog = argv[0];
+
+  for (i=1; i<argc; i++) {
+    if (argv[i][0] == '-') {
+      switch ((argv[i])[1]) {
+      case 'o':
+        if (args->outfile) {
+          fprintf(stderr, "%s: an output file is already specified. (%s)\n",
+                  args->prog, args->outfile);
+          return -1;
+        }
+        if (argv[i][2] == '\0' && argv[i+1]) {
+          i++;
+          args->outfile = get_outfilename(mrb, argv[i], "");
+        }
+        else {
+          args->outfile = get_outfilename(mrb, argv[i] + 2, "");
+        }
+        break;
+      case 'B':
+        if (argv[i][2] == '\0' && argv[i+1]) {
+          i++;
+          args->initname = argv[i];
+        }
+        else {
+          args->initname = argv[i]+2;
+        }
+        if (*args->initname == '\0') {
+          fprintf(stderr, "%s: function name is not specified.\n", args->prog);
+          return -1;
+        }
+        break;
+      case 'c':
+        args->check_syntax = TRUE;
+        break;
+      case 'v':
+        if (!args->verbose) mrb_show_version(mrb);
+        args->verbose = TRUE;
+        break;
+      case 'g':
+        args->flags |= DUMP_DEBUG_INFO;
+        break;
+      case 'E':
+        args->flags = DUMP_ENDIAN_BIG | (args->flags & ~DUMP_ENDIAN_MASK);
+        break;
+      case 'e':
+        args->flags = DUMP_ENDIAN_LIL | (args->flags & ~DUMP_ENDIAN_MASK);
+        break;
+      case 'h':
+        return -1;
+      case '-':
+        if (argv[i][1] == '\n') {
+          return i;
+        }
+        if (strcmp(argv[i] + 2, "version") == 0) {
+          mrb_show_version(mrb);
+          exit(EXIT_SUCCESS);
+        }
+        else if (strcmp(argv[i] + 2, "verbose") == 0) {
+          args->verbose = TRUE;
+          break;
+        }
+        else if (strcmp(argv[i] + 2, "copyright") == 0) {
+          mrb_show_copyright(mrb);
+          exit(EXIT_SUCCESS);
+        }
+        else if (strcmp(argv[i] + 2, "remove-lv") == 0) {
+          args->remove_lv = TRUE;
+          break;
+        }
+        return -1;
+      default:
+        return i;
+      }
+    }
+    else {
+      break;
+    }
+  }
+  if (args->verbose && args->initname && (args->flags & DUMP_ENDIAN_MASK) == 0) {
+    fprintf(stderr, "%s: generating %s endian C file. specify -e/-E for cross compiling.\n",
+            args->prog, bigendian_p() ? "big" : "little");
+  }
+  return i;
+}
+
+static void
+cleanup(mrb_state *mrb, struct mrbc_args *args)
+{
+  mrb_free(mrb, (void*)args->outfile);
+  mrb_close(mrb);
+}
+
+static int
+partial_hook(struct mrb_parser_state *p)
+{
+  mrbc_context *c = p->cxt;
+  struct mrbc_args *args = (struct mrbc_args *)c->partial_data;
+  const char *fn;
+
+  if (p->f) fclose(p->f);
+  if (args->idx >= args->argc) {
+    p->f = NULL;
+    return -1;
+  }
+  fn = args->argv[args->idx++];
+  p->f = fopen(fn, "rb");
+  if (p->f == NULL) {
+    fprintf(stderr, "%s: cannot open program file. (%s)\n", args->prog, fn);
+    return -1;
+  }
+  mrb_parser_set_filename(p, fn);
+  return 0;
+}
+
+static mrb_value
+load_file(mrb_state *mrb, struct mrbc_args *args)
+{
+  mrbc_context *c;
+  mrb_value result;
+  char *input = args->argv[args->idx];
+  FILE *infile;
+  mrb_bool need_close = FALSE;
+
+  c = mrbc_context_new(mrb);
+  if (args->verbose)
+    c->dump_result = TRUE;
+  c->no_exec = TRUE;
+  if (input[0] == '-' && input[1] == '\0') {
+    infile = stdin;
+  }
+  else {
+    need_close = TRUE;
+    if ((infile = fopen(input, "rb")) == NULL) {
+      fprintf(stderr, "%s: cannot open program file. (%s)\n", args->prog, input);
+      return mrb_nil_value();
+    }
+  }
+  mrbc_filename(mrb, c, input);
+  args->idx++;
+  if (args->idx < args->argc) {
+    need_close = FALSE;
+    mrbc_partial_hook(mrb, c, partial_hook, (void*)args);
+  }
+
+  result = mrb_load_file_cxt(mrb, infile, c);
+  if (need_close) fclose(infile);
+  mrbc_context_free(mrb, c);
+  if (mrb_undef_p(result)) {
+    return mrb_nil_value();
+  }
+  return result;
+}
+
+static int
+dump_file(mrb_state *mrb, FILE *wfp, const char *outfile, struct RProc *proc, struct mrbc_args *args)
+{
+  int n = MRB_DUMP_OK;
+  mrb_irep *irep = proc->body.irep;
+
+  if (args->remove_lv) {
+    mrb_irep_remove_lv(mrb, irep);
+  }
+  if (args->initname) {
+    n = mrb_dump_irep_cfunc(mrb, irep, args->flags, wfp, args->initname);
+    if (n == MRB_DUMP_INVALID_ARGUMENT) {
+      fprintf(stderr, "%s: invalid C language symbol name\n", args->initname);
+    }
+  }
+  else {
+    n = mrb_dump_irep_binary(mrb, irep, args->flags, wfp);
+  }
+  if (n != MRB_DUMP_OK) {
+    fprintf(stderr, "%s: error in mrb dump (%s) %d\n", args->prog, outfile, n);
+  }
+  return n;
+}
+
+int
+main(int argc, char **argv)
+{
+  mrb_state *mrb = mrb_open();
+  int n, result;
+  struct mrbc_args args;
+  FILE *wfp;
+  mrb_value load;
+
+  if (mrb == NULL) {
+    fputs("Invalid mrb_state, exiting mrbc\n", stderr);
+    return EXIT_FAILURE;
+  }
+
+  n = parse_args(mrb, argc, argv, &args);
+  if (n < 0) {
+    cleanup(mrb, &args);
+    usage(argv[0]);
+    return EXIT_FAILURE;
+  }
+  if (n == argc) {
+    fprintf(stderr, "%s: no program file given\n", args.prog);
+    return EXIT_FAILURE;
+  }
+  if (args.outfile == NULL && !args.check_syntax) {
+    if (n + 1 == argc) {
+      args.outfile = get_outfilename(mrb, argv[n], args.initname ? C_EXT : RITEBIN_EXT);
+    }
+    else {
+      fprintf(stderr, "%s: output file should be specified to compile multiple files\n", args.prog);
+      return EXIT_FAILURE;
+    }
+  }
+
+  args.idx = n;
+  load = load_file(mrb, &args);
+  if (mrb_nil_p(load)) {
+    cleanup(mrb, &args);
+    return EXIT_FAILURE;
+  }
+  if (args.check_syntax) {
+    printf("%s:%s:Syntax OK\n", args.prog, argv[n]);
+  }
+
+  if (args.check_syntax) {
+    cleanup(mrb, &args);
+    return EXIT_SUCCESS;
+  }
+
+  if (args.outfile) {
+    if (strcmp("-", args.outfile) == 0) {
+      wfp = stdout;
+    }
+    else if ((wfp = fopen(args.outfile, "wb")) == NULL) {
+      fprintf(stderr, "%s: cannot open output file:(%s)\n", args.prog, args.outfile);
+      return EXIT_FAILURE;
+    }
+  }
+  else {
+    fprintf(stderr, "Output file is required\n");
+    return EXIT_FAILURE;
+  }
+  result = dump_file(mrb, wfp, args.outfile, mrb_proc_ptr(load), &args);
+  fclose(wfp);
+  cleanup(mrb, &args);
+  if (result != MRB_DUMP_OK) {
+    return EXIT_FAILURE;
+  }
+  return EXIT_SUCCESS;
+}
+
+void
+mrb_init_mrblib(mrb_state *mrb)
+{
+}
+
+#ifndef DISABLE_GEMS
+void
+mrb_init_mrbgems(mrb_state *mrb)
+{
+}
+
+void
+mrb_final_mrbgems(mrb_state *mrb)
+{
+}
+#endif
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-bin-mruby/bintest/mruby.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-bin-mruby/bintest/mruby.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-bin-mruby/bintest/mruby.rb	(revision 439)
@@ -0,0 +1,164 @@
+require 'tempfile'
+require 'open3'
+
+def assert_mruby(exp_out, exp_err, exp_success, args)
+  out, err, stat = Open3.capture3(cmd("mruby"), *args)
+  assert "assert_mruby" do
+    assert_operator(exp_out, :===, out, "standard output")
+    assert_operator(exp_err, :===, err, "standard error")
+    assert_equal(exp_success, stat.success?, "exit success?")
+  end
+end
+
+assert('regression for #1564') do
+  assert_mruby("", /\A-e:1:2: syntax error, .*\n\z/, false, %w[-e <<])
+  assert_mruby("", /\A-e:1:3: syntax error, .*\n\z/, false, %w[-e <<-])
+end
+
+assert('regression for #1572') do
+  script, bin = Tempfile.new('test.rb'), Tempfile.new('test.mrb')
+  File.write script.path, 'p "ok"'
+  system "#{cmd('mrbc')} -g -o #{bin.path} #{script.path}"
+  o = `#{cmd('mruby')} -b #{bin.path}`.strip
+  assert_equal '"ok"', o
+end
+
+assert '$0 value' do
+  script, bin = Tempfile.new('test.rb'), Tempfile.new('test.mrb')
+
+  # .rb script
+  script.write "p $0\n"
+  script.flush
+  assert_equal "\"#{script.path}\"", `#{cmd('mruby')} "#{script.path}"`.chomp
+
+  # .mrb file
+  `#{cmd('mrbc')} -o "#{bin.path}" "#{script.path}"`
+  assert_equal "\"#{bin.path}\"", `#{cmd('mruby')} -b "#{bin.path}"`.chomp
+
+  # one liner
+  assert_equal '"-e"', `#{cmd('mruby')} -e #{shellquote('p $0')}`.chomp
+end
+
+assert 'ARGV value' do
+  assert_mruby(%{["ab", "cde"]\n}, "", true, %w[-e p(ARGV) ab cde])
+  assert_mruby("[]\n", "", true, %w[-e p(ARGV)])
+end
+
+assert('float literal') do
+  script, bin = Tempfile.new('test.rb'), Tempfile.new('test.mrb')
+  File.write script.path, 'p [3.21, 2e308.infinite?, -2e308.infinite?]'
+  system "#{cmd('mrbc')} -g -o #{bin.path} #{script.path}"
+  assert_equal "[3.21, 1, -1]", `#{cmd('mruby')} -b #{bin.path}`.chomp!
+end
+
+assert '__END__', '8.6' do
+  script = Tempfile.new('test.rb')
+
+  script.write <<EOS
+p 'test'
+  __END__ = 'fin'
+p __END__
+__END__
+p 'legend'
+EOS
+  script.flush
+  assert_equal "\"test\"\n\"fin\"\n", `#{cmd('mruby')} #{script.path}`
+end
+
+assert('garbage collecting built-in classes') do
+  script = Tempfile.new('test.rb')
+
+  script.write <<RUBY
+NilClass = nil
+GC.start
+Array.dup
+print nil.class.to_s
+RUBY
+  script.flush
+  assert_equal "NilClass", `#{cmd('mruby')} #{script.path}`
+  assert_equal 0, $?.exitstatus
+end
+
+assert('mruby -c option') do
+  assert_mruby("Syntax OK\n", "", true, ["-c", "-e", "p 1"])
+  assert_mruby("", /\A-e:1:7: syntax error, .*\n\z/, false, ["-c", "-e", "p 1; 1."])
+end
+
+assert('mruby -d option') do
+  assert_mruby("false\n", "", true, ["-e", "p $DEBUG"])
+  assert_mruby("true\n", "", true, ["-dep $DEBUG"])
+end
+
+assert('mruby -e option (no code specified)') do
+  assert_mruby("", /\A.*: No code specified for -e\n\z/, false, %w[-e])
+end
+
+assert('mruby -h option') do
+  assert_mruby(/\AUsage: #{Regexp.escape cmd("mruby")} .*/m, "", true, %w[-h])
+end
+
+assert('mruby -r option') do
+  lib = Tempfile.new('lib.rb')
+  lib.write <<EOS
+class Hoge
+  def hoge
+    :hoge
+  end
+end
+EOS
+  lib.flush
+
+  script = Tempfile.new('test.rb')
+  script.write <<EOS
+print Hoge.new.hoge
+EOS
+  script.flush
+  assert_equal 'hoge', `#{cmd('mruby')} -r #{lib.path} #{script.path}`
+  assert_equal 0, $?.exitstatus
+
+  assert_equal 'hogeClass', `#{cmd('mruby')} -r #{lib.path} -r #{script.path} -e #{shellquote('print Hoge.class')}`
+  assert_equal 0, $?.exitstatus
+end
+
+assert('mruby -r option (no library specified)') do
+  assert_mruby("", /\A.*: No library specified for -r\n\z/, false, %w[-r])
+end
+
+assert('mruby -r option (file not found)') do
+  assert_mruby("", /\A.*: Cannot open library file: .*\n\z/, false, %w[-r _no_exists_])
+end
+
+assert('mruby -v option') do
+  ver_re = '\Amruby \d+\.\d+\.\d+ \(\d+-\d+-\d+\)\n'
+  assert_mruby(/#{ver_re}\z/, "", true, %w[-v])
+  assert_mruby(/#{ver_re}^[^\n]*NODE.*\n:end\n\z/m, "", true, %w[-v -e p(:end)])
+end
+
+assert('mruby --verbose option') do
+  assert_mruby(/\A[^\n]*NODE.*\n:end\n\z/m, "", true, %w[--verbose -e p(:end)])
+end
+
+assert('mruby --') do
+  assert_mruby(%{["-x", "1"]\n}, "", true, %w[-e p(ARGV) -- -x 1])
+end
+
+assert('mruby invalid short option') do
+  assert_mruby("", /\A.*: invalid option -1 .*\n\z/, false, %w[-1])
+end
+
+assert('mruby invalid long option') do
+  assert_mruby("", /\A.*: invalid option --longopt .*\n\z/, false, %w[--longopt])
+end
+
+assert('unhandled exception') do
+  assert_mruby("", /\bEXCEPTION\b.*\n\z/, false, %w[-e raise("EXCEPTION")])
+end
+
+assert('program file not found') do
+  assert_mruby("", /\A.*: Cannot open program file: .*\n\z/, false, %w[_no_exists_])
+end
+
+assert('codegen error') do
+  code = "def f(#{(1..100).map{|n| "a#{n}"} * ","}); end"
+  assert_mruby("", /\Acodegen error:.*\n\z/, false, ["-e", code])
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-bin-mruby/mrbgem.rake
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-bin-mruby/mrbgem.rake	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-bin-mruby/mrbgem.rake	(revision 439)
@@ -0,0 +1,13 @@
+MRuby::Gem::Specification.new('mruby-bin-mruby') do |spec|
+  spec.license = 'MIT'
+  spec.author  = 'mruby developers'
+  spec.summary = 'mruby command'
+  spec.bins = %w(mruby)
+  spec.add_dependency('mruby-compiler', :core => 'mruby-compiler')
+  spec.add_dependency('mruby-error', :core => 'mruby-error')
+  spec.add_test_dependency('mruby-print', :core => 'mruby-print')
+
+  if build.cxx_exception_enabled?
+    build.compile_as_cxx("#{spec.dir}/tools/mruby/mruby.c", "#{spec.build_dir}/tools/mruby/mruby.cxx")
+  end
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-bin-mruby/tools/mruby/mruby.c
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-bin-mruby/tools/mruby/mruby.c	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-bin-mruby/tools/mruby/mruby.c	(revision 439)
@@ -0,0 +1,355 @@
+#include <mruby.h>
+
+#ifdef MRB_DISABLE_STDIO
+# error mruby-bin-mruby conflicts 'MRB_DISABLE_STDIO' configuration in your 'build_config.rb'
+#endif
+
+#include <stdlib.h>
+#include <string.h>
+#include <mruby/array.h>
+#include <mruby/compile.h>
+#include <mruby/dump.h>
+#include <mruby/variable.h>
+
+struct _args {
+  FILE *rfp;
+  char *cmdline;
+  mrb_bool fname        : 1;
+  mrb_bool mrbfile      : 1;
+  mrb_bool check_syntax : 1;
+  mrb_bool verbose      : 1;
+  mrb_bool version      : 1;
+  mrb_bool debug        : 1;
+  int argc;
+  char **argv;
+  int libc;
+  char **libv;
+};
+
+struct options {
+  int argc;
+  char **argv;
+  char *program;
+  char *opt;
+  char short_opt[2];
+};
+
+static void
+usage(const char *name)
+{
+  static const char *const usage_msg[] = {
+  "switches:",
+  "-b           load and execute RiteBinary (mrb) file",
+  "-c           check syntax only",
+  "-d           set debugging flags (set $DEBUG to true)",
+  "-e 'command' one line of script",
+  "-r library   load the library before executing your script",
+  "-v           print version number, then run in verbose mode",
+  "--verbose    run in verbose mode",
+  "--version    print the version",
+  "--copyright  print the copyright",
+  NULL
+  };
+  const char *const *p = usage_msg;
+
+  printf("Usage: %s [switches] [programfile] [arguments]\n", name);
+  while (*p)
+    printf("  %s\n", *p++);
+}
+
+static void
+options_init(struct options *opts, int argc, char **argv)
+{
+  opts->argc = argc;
+  opts->argv = argv;
+  opts->program = *argv;
+  *opts->short_opt = 0;
+}
+
+static const char *
+options_opt(struct options *opts)
+{
+  /* concatenated short options (e.g. `-cv`) */
+  if (*opts->short_opt && *++opts->opt) {
+   short_opt:
+    opts->short_opt[0] = *opts->opt;
+    opts->short_opt[1] = 0;
+    return opts->short_opt;
+  }
+
+  while (++opts->argv, --opts->argc) {
+    opts->opt = *opts->argv;
+
+    /*  empty         || not start with `-`  || `-` */
+    if (!opts->opt[0] || opts->opt[0] != '-' || !opts->opt[1]) return NULL;
+
+    if (opts->opt[1] == '-') {
+      /* `--` */
+      if (!opts->opt[2]) {
+        ++opts->argv, --opts->argc;
+        return NULL;
+      }
+      /* long option */
+      opts->opt += 2;
+      *opts->short_opt = 0;
+      return opts->opt;
+    }
+    else {
+      /* short option */
+      ++opts->opt;
+      goto short_opt;
+    }
+  }
+  return NULL;
+}
+
+static const char *
+options_arg(struct options *opts)
+{
+  if (*opts->short_opt && opts->opt[1]) {
+    /* concatenated short option and option argument (e.g. `-rLIBRARY`) */
+    *opts->short_opt = 0;
+    return opts->opt + 1;
+  }
+  --opts->argc, ++opts->argv;
+  return opts->argc ? *opts->argv : NULL;
+}
+
+static char *
+dup_arg_item(mrb_state *mrb, const char *item)
+{
+  size_t buflen = strlen(item) + 1;
+  char *buf = (char*)mrb_malloc(mrb, buflen);
+  memcpy(buf, item, buflen);
+  return buf;
+}
+
+static int
+parse_args(mrb_state *mrb, int argc, char **argv, struct _args *args)
+{
+  static const struct _args args_zero = { 0 };
+  struct options opts[1];
+  const char *opt, *item;
+
+  *args = args_zero;
+  options_init(opts, argc, argv);
+  while ((opt = options_opt(opts))) {
+    if (strcmp(opt, "b") == 0) {
+      args->mrbfile = TRUE;
+    }
+    else if (strcmp(opt, "c") == 0) {
+      args->check_syntax = TRUE;
+    }
+    else if (strcmp(opt, "d") == 0) {
+      args->debug = TRUE;
+    }
+    else if (strcmp(opt, "e") == 0) {
+      if ((item = options_arg(opts))) {
+        if (!args->cmdline) {
+          args->cmdline = dup_arg_item(mrb, item);
+        }
+        else {
+          size_t cmdlinelen;
+          size_t itemlen;
+
+          cmdlinelen = strlen(args->cmdline);
+          itemlen = strlen(item);
+          args->cmdline =
+            (char *)mrb_realloc(mrb, args->cmdline, cmdlinelen + itemlen + 2);
+          args->cmdline[cmdlinelen] = '\n';
+          memcpy(args->cmdline + cmdlinelen + 1, item, itemlen + 1);
+        }
+      }
+      else {
+        fprintf(stderr, "%s: No code specified for -e\n", opts->program);
+        return EXIT_FAILURE;
+      }
+    }
+    else if (strcmp(opt, "h") == 0) {
+      usage(opts->program);
+      exit(EXIT_SUCCESS);
+    }
+    else if (strcmp(opt, "r") == 0) {
+      if ((item = options_arg(opts))) {
+        if (args->libc == 0) {
+          args->libv = (char**)mrb_malloc(mrb, sizeof(char*));
+        }
+        else {
+          args->libv = (char**)mrb_realloc(mrb, args->libv, sizeof(char*) * (args->libc + 1));
+        }
+        args->libv[args->libc++] = dup_arg_item(mrb, item);
+      }
+      else {
+        fprintf(stderr, "%s: No library specified for -r\n", opts->program);
+        return EXIT_FAILURE;
+      }
+    }
+    else if (strcmp(opt, "v") == 0) {
+      if (!args->verbose) {
+        mrb_show_version(mrb);
+        args->version = TRUE;
+      }
+      args->verbose = TRUE;
+    }
+    else if (strcmp(opt, "version") == 0) {
+      mrb_show_version(mrb);
+      exit(EXIT_SUCCESS);
+    }
+    else if (strcmp(opt, "verbose") == 0) {
+      args->verbose = TRUE;
+    }
+    else if (strcmp(opt, "copyright") == 0) {
+      mrb_show_copyright(mrb);
+      exit(EXIT_SUCCESS);
+    }
+    else {
+      fprintf(stderr, "%s: invalid option %s%s (-h will show valid options)\n",
+              opts->program, opt[1] ? "--" : "-", opt);
+      return EXIT_FAILURE;
+    }
+  }
+
+  argc = opts->argc; argv = opts->argv;
+  if (args->cmdline == NULL) {
+    if (*argv == NULL) {
+      if (args->version) exit(EXIT_SUCCESS);
+      args->rfp = stdin;
+    }
+    else {
+      args->rfp = strcmp(argv[0], "-") == 0 ?
+        stdin : fopen(argv[0], args->mrbfile ? "rb" : "r");
+      if (args->rfp == NULL) {
+        fprintf(stderr, "%s: Cannot open program file: %s\n", opts->program, argv[0]);
+        return EXIT_FAILURE;
+      }
+      args->fname = TRUE;
+      args->cmdline = argv[0];
+      argc--; argv++;
+    }
+  }
+  args->argv = (char **)mrb_realloc(mrb, args->argv, sizeof(char*) * (argc + 1));
+  memcpy(args->argv, argv, (argc+1) * sizeof(char*));
+  args->argc = argc;
+
+  return EXIT_SUCCESS;
+}
+
+static void
+cleanup(mrb_state *mrb, struct _args *args)
+{
+  if (args->rfp && args->rfp != stdin)
+    fclose(args->rfp);
+  if (!args->fname)
+    mrb_free(mrb, args->cmdline);
+  mrb_free(mrb, args->argv);
+  if (args->libc) {
+    while (args->libc--) {
+      mrb_free(mrb, args->libv[args->libc]);
+    }
+    mrb_free(mrb, args->libv);
+  }
+  mrb_close(mrb);
+}
+
+int
+main(int argc, char **argv)
+{
+  mrb_state *mrb = mrb_open();
+  int n = -1;
+  int i;
+  struct _args args;
+  mrb_value ARGV;
+  mrbc_context *c;
+  mrb_value v;
+  mrb_sym zero_sym;
+
+  if (mrb == NULL) {
+    fprintf(stderr, "%s: Invalid mrb_state, exiting mruby\n", *argv);
+    return EXIT_FAILURE;
+  }
+
+  n = parse_args(mrb, argc, argv, &args);
+  if (n == EXIT_FAILURE || (args.cmdline == NULL && args.rfp == NULL)) {
+    cleanup(mrb, &args);
+    return n;
+  }
+  else {
+    int ai = mrb_gc_arena_save(mrb);
+    ARGV = mrb_ary_new_capa(mrb, args.argc);
+    for (i = 0; i < args.argc; i++) {
+      char* utf8 = mrb_utf8_from_locale(args.argv[i], -1);
+      if (utf8) {
+        mrb_ary_push(mrb, ARGV, mrb_str_new_cstr(mrb, utf8));
+        mrb_utf8_free(utf8);
+      }
+    }
+    mrb_define_global_const(mrb, "ARGV", ARGV);
+    mrb_gv_set(mrb, mrb_intern_lit(mrb, "$DEBUG"), mrb_bool_value(args.debug));
+
+    c = mrbc_context_new(mrb);
+    if (args.verbose)
+      c->dump_result = TRUE;
+    if (args.check_syntax)
+      c->no_exec = TRUE;
+
+    /* Set $0 */
+    zero_sym = mrb_intern_lit(mrb, "$0");
+    if (args.rfp) {
+      const char *cmdline;
+      cmdline = args.cmdline ? args.cmdline : "-";
+      mrbc_filename(mrb, c, cmdline);
+      mrb_gv_set(mrb, zero_sym, mrb_str_new_cstr(mrb, cmdline));
+    }
+    else {
+      mrbc_filename(mrb, c, "-e");
+      mrb_gv_set(mrb, zero_sym, mrb_str_new_lit(mrb, "-e"));
+    }
+
+    /* Load libraries */
+    for (i = 0; i < args.libc; i++) {
+      FILE *lfp = fopen(args.libv[i], args.mrbfile ? "rb" : "r");
+      if (lfp == NULL) {
+        fprintf(stderr, "%s: Cannot open library file: %s\n", *argv, args.libv[i]);
+        mrbc_context_free(mrb, c);
+        cleanup(mrb, &args);
+        return EXIT_FAILURE;
+      }
+      if (args.mrbfile) {
+        v = mrb_load_irep_file_cxt(mrb, lfp, c);
+      }
+      else {
+        v = mrb_load_file_cxt(mrb, lfp, c);
+      }
+      fclose(lfp);
+    }
+
+    /* Load program */
+    if (args.mrbfile) {
+      v = mrb_load_irep_file_cxt(mrb, args.rfp, c);
+    }
+    else if (args.rfp) {
+      v = mrb_load_file_cxt(mrb, args.rfp, c);
+    }
+    else {
+      char* utf8 = mrb_utf8_from_locale(args.cmdline, -1);
+      if (!utf8) abort();
+      v = mrb_load_string_cxt(mrb, utf8, c);
+      mrb_utf8_free(utf8);
+    }
+
+    mrb_gc_arena_restore(mrb, ai);
+    mrbc_context_free(mrb, c);
+    if (mrb->exc) {
+      if (!mrb_undef_p(v)) {
+        mrb_print_error(mrb);
+      }
+      n = EXIT_FAILURE;
+    }
+    else if (args.check_syntax) {
+      puts("Syntax OK");
+    }
+  }
+  cleanup(mrb, &args);
+
+  return n;
+}
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-bin-strip/bintest/mruby-strip.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-bin-strip/bintest/mruby-strip.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-bin-strip/bintest/mruby-strip.rb	(revision 439)
@@ -0,0 +1,73 @@
+require 'tempfile'
+
+assert('no files') do
+  o = `#{cmd('mruby-strip')} 2>&1`
+  assert_equal 1, $?.exitstatus
+  assert_equal "no files to strip", o.split("\n")[0]
+end
+
+assert('file not found') do
+  o = `#{cmd('mruby-strip')} not_found.mrb 2>&1`
+  assert_equal 1, $?.exitstatus
+  assert_equal "can't open file for reading not_found.mrb\n", o
+end
+
+assert('not irep file') do
+  t = Tempfile.new('script.rb')
+  t.write 'p test\n'
+  t.flush
+  o = `#{cmd('mruby-strip')} #{t.path} 2>&1`
+  assert_equal 1, $?.exitstatus
+  assert_equal "can't read irep file #{t.path}\n", o
+end
+
+assert('success') do
+  script_file, compiled1, compiled2 =
+    Tempfile.new('script.rb'), Tempfile.new('c1.mrb'), Tempfile.new('c2.mrb')
+  script_file.write "p 'test'\n"
+  script_file.flush
+  `#{cmd('mrbc')} -g -o #{compiled1.path} #{script_file.path}`
+  `#{cmd('mrbc')} -g -o #{compiled2.path} #{script_file.path}`
+
+  o = `#{cmd('mruby-strip')} #{compiled1.path}`
+  assert_equal 0, $?.exitstatus
+  assert_equal "", o
+  assert_equal `#{cmd('mruby')} #{script_file.path}`, `#{cmd('mruby')} -b #{compiled1.path}`
+
+  o = `#{cmd('mruby-strip')} #{compiled1.path} #{compiled2.path}`
+  assert_equal 0, $?.exitstatus
+  assert_equal "", o
+end
+
+assert('check debug section') do
+  script_file, with_debug, without_debug =
+    Tempfile.new('script.rb'), Tempfile.new('c1.mrb'), Tempfile.new('c2.mrb')
+  script_file.write "p 'test'\n"
+  script_file.flush
+  `#{cmd('mrbc')} -o #{without_debug.path} #{script_file.path}`
+  `#{cmd('mrbc')} -g -o #{with_debug.path} #{script_file.path}`
+
+  assert_true with_debug.size >= without_debug.size
+
+  `#{cmd('mruby-strip')} #{with_debug.path}`
+  assert_equal without_debug.size, with_debug.size
+end
+
+assert('check lv section') do
+  script_file, with_lv, without_lv =
+    Tempfile.new('script.rb'), Tempfile.new('c1.mrb'), Tempfile.new('c2.mrb')
+  script_file.write <<EOS
+a, b = 0, 1
+a += b
+p Kernel.local_variables
+EOS
+  script_file.flush
+  `#{cmd('mrbc')} -o #{with_lv.path} #{script_file.path}`
+  `#{cmd('mrbc')} -o #{without_lv.path} #{script_file.path}`
+
+  `#{cmd('mruby-strip')} -l #{without_lv.path}`
+  assert_true without_lv.size < with_lv.size
+#
+#  assert_equal '[:a, :b]', `#{cmd('mruby')} -b #{with_lv.path}`.chomp
+#  assert_equal '[]', `#{cmd('mruby')} -b #{without_lv.path}`.chomp
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-bin-strip/mrbgem.rake
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-bin-strip/mrbgem.rake	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-bin-strip/mrbgem.rake	(revision 439)
@@ -0,0 +1,6 @@
+MRuby::Gem::Specification.new('mruby-bin-strip') do |spec|
+  spec.license = 'MIT'
+  spec.author  = 'mruby developers'
+  spec.summary = 'irep dump debug section remover command'
+  spec.bins = %w(mruby-strip)
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-bin-strip/tools/mruby-strip/mruby-strip.c
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-bin-strip/tools/mruby-strip/mruby-strip.c	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-bin-strip/tools/mruby-strip/mruby-strip.c	(revision 439)
@@ -0,0 +1,143 @@
+#include <mruby.h>
+
+#ifdef MRB_DISABLE_STDIO
+# error mruby-bin-strip conflicts 'MRB_DISABLE_STDIO' configuration in your 'build_config.rb'
+#endif
+
+#include <stdlib.h>
+#include <string.h>
+#include <mruby/irep.h>
+#include <mruby/dump.h>
+
+struct strip_args {
+  int argc_start;
+  int argc;
+  char **argv;
+  mrb_bool lvar;
+};
+
+static void
+print_usage(const char *f)
+{
+  printf("Usage: %s [switches] irepfiles\n", f);
+  printf("switches:\n");
+  printf("  -l, --lvar   remove LVAR section too.\n");
+}
+
+static int
+parse_args(int argc, char **argv, struct strip_args *args)
+{
+  int i;
+
+  args->argc_start = 0;
+  args->argc = argc;
+  args->argv = argv;
+  args->lvar = FALSE;
+
+  for (i = 1; i < argc; ++i) {
+    const size_t len = strlen(argv[i]);
+    if (len >= 2 && argv[i][0] == '-') {
+      switch (argv[i][1]) {
+      case 'l':
+        args->lvar = TRUE;
+        break;
+      case '-':
+        if (strncmp((*argv) + 2, "lvar", len) == 0) {
+          args->lvar = TRUE;
+          break;
+        }
+      default:
+        return -1;
+      }
+    }
+    else {
+      break;
+    }
+  }
+
+  args->argc_start = i;
+  return i;
+}
+
+static int
+strip(mrb_state *mrb, struct strip_args *args)
+{
+  int i;
+
+  for (i = args->argc_start; i < args->argc; ++i) {
+    char *filename;
+    FILE *rfile;
+    mrb_irep *irep;
+    FILE *wfile;
+    int dump_result;
+
+    filename = args->argv[i];
+    rfile = fopen(filename, "rb");
+    if (rfile == NULL) {
+      fprintf(stderr, "can't open file for reading %s\n", filename);
+      return EXIT_FAILURE;
+    }
+
+    irep = mrb_read_irep_file(mrb, rfile);
+    fclose(rfile);
+    if (irep == NULL) {
+      fprintf(stderr, "can't read irep file %s\n", filename);
+      return EXIT_FAILURE;
+    }
+
+    /* clear lv if --lvar is enabled */
+    if (args->lvar) {
+      mrb_irep_remove_lv(mrb, irep);
+    }
+
+    wfile = fopen(filename, "wb");
+    if (wfile == NULL) {
+      fprintf(stderr, "can't open file for writing %s\n", filename);
+      mrb_irep_decref(mrb, irep);
+      return EXIT_FAILURE;
+    }
+
+    /* debug flag must always be false */
+    dump_result = mrb_dump_irep_binary(mrb, irep, FALSE, wfile);
+
+    fclose(wfile);
+    mrb_irep_decref(mrb, irep);
+
+    if (dump_result != MRB_DUMP_OK) {
+      fprintf(stderr, "error occurred during dumping %s\n", filename);
+      return EXIT_FAILURE;
+    }
+  }
+  return EXIT_SUCCESS;
+}
+
+int
+main(int argc, char **argv)
+{
+  struct strip_args args;
+  int args_result;
+  mrb_state *mrb;
+  int ret;
+
+  if (argc <= 1) {
+    printf("no files to strip\n");
+    print_usage(argv[0]);
+    return EXIT_FAILURE;
+  }
+
+  args_result = parse_args(argc, argv, &args);
+  if (args_result < 0) {
+    print_usage(argv[0]);
+    return EXIT_FAILURE;
+  }
+  mrb = mrb_open_core(mrb_default_allocf, NULL);
+  if (mrb == NULL) {
+    fputs("Invalid mrb_state, exiting mruby-strip\n", stderr);
+    return EXIT_FAILURE;
+  }
+
+  ret = strip(mrb, &args);
+
+  mrb_close(mrb);
+  return ret;
+}
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-class-ext/mrbgem.rake
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-class-ext/mrbgem.rake	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-class-ext/mrbgem.rake	(revision 439)
@@ -0,0 +1,5 @@
+MRuby::Gem::Specification.new('mruby-class-ext') do |spec|
+  spec.license = 'MIT'
+  spec.author  = 'mruby developers'
+  spec.summary = 'class/module extension'
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-class-ext/mrblib/module.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-class-ext/mrblib/module.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-class-ext/mrblib/module.rb	(revision 439)
@@ -0,0 +1,89 @@
+class Module
+
+  ##
+  # call-seq:
+  #   mod < other   ->  true, false, or nil
+  #
+  # Returns true if `mod` is a subclass of `other`. Returns
+  # <code>nil</code> if there's no relationship between the two.
+  # (Think of the relationship in terms of the class definition:
+  # "class A < B" implies "A < B".)
+  #
+  def <(other)
+    if self.equal?(other)
+      false
+    else
+      self <= other
+    end
+  end
+
+  ##
+  # call-seq:
+  #   mod <= other   ->  true, false, or nil
+  #
+  # Returns true if `mod` is a subclass of `other` or
+  # is the same as `other`. Returns
+  # <code>nil</code> if there's no relationship between the two.
+  # (Think of the relationship in terms of the class definition:
+  # "class A < B" implies "A < B".)
+  def <=(other)
+    raise TypeError, 'compared with non class/module' unless other.is_a?(Module)
+    if self.ancestors.include?(other)
+      return true
+    elsif other.ancestors.include?(self)
+      return false
+    end
+  end
+
+  ##
+  # call-seq:
+  #  mod > other   ->  true, false, or nil
+  #
+  # Returns true if `mod` is an ancestor of `other`. Returns
+  # <code>nil</code> if there's no relationship between the two.
+  # (Think of the relationship in terms of the class definition:
+  # "class A < B" implies "B > A".)
+  #
+  def >(other)
+    if self.equal?(other)
+      false
+    else
+      self >= other
+    end
+  end
+
+  ##
+  # call-seq:
+  #   mod >= other   ->  true, false, or nil
+  #
+  # Returns true if `mod` is an ancestor of `other`, or the
+  # two modules are the same. Returns
+  # <code>nil</code> if there's no relationship between the two.
+  # (Think of the relationship in terms of the class definition:
+  # "class A < B" implies "B > A".)
+  #
+  def >=(other)
+    raise TypeError, 'compared with non class/module' unless other.is_a?(Module)
+    return other < self
+  end
+
+  ##
+  # call-seq:
+  #    module <=> other_module   -> -1, 0, +1, or nil
+  #
+  # Comparison---Returns -1, 0, +1 or nil depending on whether `module`
+  # includes `other_module`, they are the same, or if `module` is included by
+  # `other_module`.
+  #
+  # Returns `nil` if `module` has no relationship with `other_module`, if
+  # `other_module` is not a module, or if the two values are incomparable.
+  #
+  def <=>(other)
+    return 0 if self.equal?(other)
+    return nil unless other.is_a?(Module)
+    cmp = self < other
+    return -1 if cmp
+    return 1 unless cmp.nil?
+    return nil
+  end
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-class-ext/src/class.c
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-class-ext/src/class.c	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-class-ext/src/class.c	(revision 439)
@@ -0,0 +1,67 @@
+#include "mruby.h"
+#include "mruby/class.h"
+#include "mruby/string.h"
+
+static mrb_value
+mrb_mod_name(mrb_state *mrb, mrb_value self)
+{
+  mrb_value name =  mrb_class_path(mrb, mrb_class_ptr(self));
+  if (mrb_string_p(name)) {
+    MRB_SET_FROZEN_FLAG(mrb_basic_ptr(name));
+  }
+  return name;
+}
+
+static mrb_value
+mrb_mod_singleton_class_p(mrb_state *mrb, mrb_value self)
+{
+  return mrb_bool_value(mrb_sclass_p(self));
+}
+
+/*
+ *  call-seq:
+ *     module_exec(arg...) {|var...| block } -> obj
+ *     class_exec(arg...) {|var...| block } -> obj
+ *
+ * Evaluates the given block in the context of the
+ * class/module. The method defined in the block will belong
+ * to the receiver. Any arguments passed to the method will be
+ * passed to the block. This can be used if the block needs to
+ * access instance variables.
+ *
+ *     class Thing
+ *     end
+ *     Thing.class_exec{
+ *       def hello() "Hello there!" end
+ *     }
+ *     puts Thing.new.hello()
+ */
+
+static mrb_value
+mrb_mod_module_exec(mrb_state *mrb, mrb_value self)
+{
+  const mrb_value *argv;
+  mrb_int argc;
+  mrb_value blk;
+
+  mrb_get_args(mrb, "*&!", &argv, &argc, &blk);
+
+  mrb->c->ci->target_class = mrb_class_ptr(self);
+  return mrb_yield_cont(mrb, blk, self, argc, argv);
+}
+
+void
+mrb_mruby_class_ext_gem_init(mrb_state *mrb)
+{
+  struct RClass *mod = mrb->module_class;
+
+  mrb_define_method(mrb, mod, "name", mrb_mod_name, MRB_ARGS_NONE());
+  mrb_define_method(mrb, mod, "singleton_class?", mrb_mod_singleton_class_p, MRB_ARGS_NONE());
+  mrb_define_method(mrb, mod, "module_exec", mrb_mod_module_exec, MRB_ARGS_ANY()|MRB_ARGS_BLOCK());
+  mrb_define_method(mrb, mod, "class_exec", mrb_mod_module_exec, MRB_ARGS_ANY()|MRB_ARGS_BLOCK());
+}
+
+void
+mrb_mruby_class_ext_gem_final(mrb_state *mrb)
+{
+}
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-class-ext/test/module.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-class-ext/test/module.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-class-ext/test/module.rb	(revision 439)
@@ -0,0 +1,109 @@
+assert 'Module#<' do
+  a = Class.new
+  b = Class.new(a)
+  c = Class.new(a)
+  d = Module.new
+  e = Class.new { include d }
+  f = Module.new { include d }
+
+  # compare class to class
+  assert_true b < a
+  assert_false b < b
+  assert_false a < b
+  assert_nil c < b
+
+  # compare class to module
+  assert_true e < d
+  assert_false d < e
+  assert_nil a < d
+
+  # compare module to module
+  assert_true f < d
+  assert_false f < f
+  assert_false d < f
+
+  assert_raise(TypeError) { a < Object.new }
+end
+
+assert 'Module#<=' do
+  a = Class.new
+  b = Class.new(a)
+  c = Class.new(a)
+  d = Module.new
+  e = Class.new { include d }
+  f = Module.new { include d }
+
+  # compare class to class
+  assert_true b <= a
+  assert_true b <= b
+  assert_false a <= b
+  assert_nil c <= b
+
+  # compare class to module
+  assert_true e <= d
+  assert_false d <= e
+  assert_nil a <= d
+
+  # compare module to module
+  assert_true f <= d
+  assert_true f <= f
+  assert_false d <= f
+
+  assert_raise(TypeError) { a <= Object.new }
+end
+
+assert 'Module#name' do
+  module Outer
+    class Inner; end
+    const_set :SetInner, Class.new
+  end
+
+  assert_equal 'Outer', Outer.name
+  assert_equal 'Outer::Inner', Outer::Inner.name
+  assert_equal 'Outer::SetInner', Outer::SetInner.name
+
+  outer = Module.new do
+    const_set :SetInner, Class.new
+  end
+  Object.const_set :SetOuter, outer
+
+  assert_equal 'SetOuter', SetOuter.name
+  assert_equal 'SetOuter::SetInner', SetOuter::SetInner.name
+
+  mod = Module.new
+  cls = Class.new
+
+  assert_nil mod.name
+  assert_nil cls.name
+end
+
+assert 'Module#singleton_class?' do
+  mod = Module.new
+  cls = Class.new
+  scl = (class <<cls; self; end)
+
+  assert_false mod.singleton_class?
+  assert_false cls.singleton_class?
+  assert_true scl.singleton_class?
+end
+
+assert 'Module#module_eval' do
+  mod = Module.new
+  mod.class_exec(1,2,3) do |a,b,c|
+    assert_equal([1,2,3], [a,b,c])
+    def hi
+      "hi"
+    end
+  end
+  cls = Class.new
+  cls.class_exec(42) do |x|
+    assert_equal(42, x)
+    include mod
+    def hello
+      "hello"
+    end
+  end
+  obj = cls.new
+  assert_equal("hi", obj.hi)
+  assert_equal("hello", obj.hello)
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-compar-ext/mrbgem.rake
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-compar-ext/mrbgem.rake	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-compar-ext/mrbgem.rake	(revision 439)
@@ -0,0 +1,5 @@
+MRuby::Gem::Specification.new('mruby-compar-ext') do |spec|
+  spec.license = 'MIT'
+  spec.author  = 'mruby developers'
+  spec.summary = 'Enumerable module extension'
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-compar-ext/mrblib/compar.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-compar-ext/mrblib/compar.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-compar-ext/mrblib/compar.rb	(revision 439)
@@ -0,0 +1,31 @@
+module Comparable
+  ##
+  # Returns <i>min</i> if <i>obj</i> <code><=></code> <i>min</i> is less
+  # than zero, <i>max</i> if <i>obj</i> <code><=></code> <i>max</i> is
+  # greater than zero and <i>obj</i> otherwise.
+  #
+  #     12.clamp(0, 100)         #=> 12
+  #     523.clamp(0, 100)        #=> 100
+  #     -3.123.clamp(0, 100)     #=> 0
+  #
+  #     'd'.clamp('a', 'f')      #=> 'd'
+  #     'z'.clamp('a', 'f')      #=> 'f'
+  #
+  def clamp(min, max)
+    if (min <=> max) > 0
+      raise ArgumentError, "min argument must be smaller than max argument"
+    end
+    c = self <=> min
+    if c == 0
+      return self
+    elsif c < 0
+      return min
+    end
+    c = self <=> max
+    if c > 0
+      return max
+    else
+      return self
+    end
+  end
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-compiler/bintest/mrbc.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-compiler/bintest/mrbc.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-compiler/bintest/mrbc.rb	(revision 439)
@@ -0,0 +1,30 @@
+require 'tempfile'
+
+assert('Compiling multiple files without new line in last line. #2361') do
+  a, b, out = Tempfile.new('a.rb'), Tempfile.new('b.rb'), Tempfile.new('out.mrb')
+  a.write('module A; end')
+  a.flush
+  b.write('module B; end')
+  b.flush
+  result = `#{cmd('mrbc')} -c -o #{out.path} #{a.path} #{b.path} 2>&1`
+  assert_equal "#{cmd('mrbc')}:#{a.path}:Syntax OK", result.chomp
+  assert_equal 0, $?.exitstatus
+end
+
+assert('parsing function with void argument') do
+  a, out = Tempfile.new('a.rb'), Tempfile.new('out.mrb')
+  a.write('f ()')
+  a.flush
+  result = `#{cmd('mrbc')} -c -o #{out.path} #{a.path} 2>&1`
+  assert_equal "#{cmd('mrbc')}:#{a.path}:Syntax OK", result.chomp
+  assert_equal 0, $?.exitstatus
+end
+
+assert('embedded document with invalid terminator') do
+  a, out = Tempfile.new('a.rb'), Tempfile.new('out.mrb')
+  a.write("=begin\n=endx\n")
+  a.flush
+  result = `#{cmd('mrbc')} -c -o #{out.path} #{a.path} 2>&1`
+  assert_equal "#{a.path}:3:0: embedded document meets end of file", result.chomp
+  assert_equal 1, $?.exitstatus
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-compiler/core/codegen.c
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-compiler/core/codegen.c	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-compiler/core/codegen.c	(revision 439)
@@ -0,0 +1,3278 @@
+/*
+** codegen.c - mruby code generator
+**
+** See Copyright Notice in mruby.h
+*/
+
+#include <ctype.h>
+#include <limits.h>
+#include <stdlib.h>
+#include <string.h>
+#include <math.h>
+#include <mruby.h>
+#include <mruby/compile.h>
+#include <mruby/proc.h>
+#include <mruby/numeric.h>
+#include <mruby/string.h>
+#include <mruby/debug.h>
+#include "node.h"
+#include <mruby/opcode.h>
+#include <mruby/re.h>
+#include <mruby/throw.h>
+
+#ifndef MRB_CODEGEN_LEVEL_MAX
+#define MRB_CODEGEN_LEVEL_MAX 1024
+#endif
+
+#define MAXARG_S (1<<16)
+
+typedef mrb_ast_node node;
+typedef struct mrb_parser_state parser_state;
+
+enum looptype {
+  LOOP_NORMAL,
+  LOOP_BLOCK,
+  LOOP_FOR,
+  LOOP_BEGIN,
+  LOOP_RESCUE,
+};
+
+struct loopinfo {
+  enum looptype type;
+  int pc0, pc1, pc2, pc3, acc;
+  int ensure_level;
+  struct loopinfo *prev;
+};
+
+typedef struct scope {
+  mrb_state *mrb;
+  mrb_pool *mpool;
+  struct mrb_jmpbuf jmp;
+
+  struct scope *prev;
+
+  node *lv;
+
+  uint16_t sp;
+  uint16_t pc;
+  uint16_t lastpc;
+  uint16_t lastlabel;
+  int ainfo:15;
+  mrb_bool mscope:1;
+
+  struct loopinfo *loop;
+  int ensure_level;
+  mrb_sym filename_sym;
+  uint16_t lineno;
+
+  mrb_code *iseq;
+  uint16_t *lines;
+  uint32_t icapa;
+
+  mrb_irep *irep;
+  uint32_t pcapa, scapa, rcapa;
+
+  uint16_t nlocals;
+  uint16_t nregs;
+  int ai;
+
+  int debug_start_pos;
+  uint16_t filename_index;
+  parser_state* parser;
+
+  int rlev;                     /* recursion levels */
+} codegen_scope;
+
+static codegen_scope* scope_new(mrb_state *mrb, codegen_scope *prev, node *lv);
+static void scope_finish(codegen_scope *s);
+static struct loopinfo *loop_push(codegen_scope *s, enum looptype t);
+static void loop_break(codegen_scope *s, node *tree);
+static void loop_pop(codegen_scope *s, int val);
+
+static void gen_assignment(codegen_scope *s, node *tree, int sp, int val);
+static void gen_vmassignment(codegen_scope *s, node *tree, int rhs, int val);
+
+static void codegen(codegen_scope *s, node *tree, int val);
+static void raise_error(codegen_scope *s, const char *msg);
+
+static void
+codegen_error(codegen_scope *s, const char *message)
+{
+  if (!s) return;
+  while (s->prev) {
+    codegen_scope *tmp = s->prev;
+    mrb_free(s->mrb, s->iseq);
+    mrb_free(s->mrb, s->lines);
+    mrb_pool_close(s->mpool);
+    s = tmp;
+  }
+#ifndef MRB_DISABLE_STDIO
+  if (s->filename_sym && s->lineno) {
+    const char *filename = mrb_sym_name_len(s->mrb, s->filename_sym, NULL);
+    fprintf(stderr, "codegen error:%s:%d: %s\n", filename, s->lineno, message);
+  }
+  else {
+    fprintf(stderr, "codegen error: %s\n", message);
+  }
+#endif
+  MRB_THROW(&s->jmp);
+}
+
+static void*
+codegen_palloc(codegen_scope *s, size_t len)
+{
+  void *p = mrb_pool_alloc(s->mpool, len);
+
+  if (!p) codegen_error(s, "pool memory allocation");
+  return p;
+}
+
+static void*
+codegen_realloc(codegen_scope *s, void *p, size_t len)
+{
+  p = mrb_realloc_simple(s->mrb, p, len);
+
+  if (!p && len > 0) codegen_error(s, "mrb_realloc");
+  return p;
+}
+
+static int
+new_label(codegen_scope *s)
+{
+  return s->lastlabel = s->pc;
+}
+
+static void
+emit_B(codegen_scope *s, uint32_t pc, uint8_t i)
+{
+  if (pc >= MAXARG_S || s->icapa >= MAXARG_S) {
+    codegen_error(s, "too big code block");
+  }
+  if (pc >= s->icapa) {
+    s->icapa *= 2;
+    if (s->icapa > MAXARG_S) {
+      s->icapa = MAXARG_S;
+    }
+    s->iseq = (mrb_code *)codegen_realloc(s, s->iseq, sizeof(mrb_code)*s->icapa);
+    if (s->lines) {
+      s->lines = (uint16_t*)codegen_realloc(s, s->lines, sizeof(uint16_t)*s->icapa);
+    }
+  }
+  if (s->lines) {
+    if (s->lineno > 0 || pc == 0)
+      s->lines[pc] = s->lineno;
+    else
+      s->lines[pc] = s->lines[pc-1];
+  }
+  s->iseq[pc] = i;
+}
+
+static void
+emit_S(codegen_scope *s, int pc, uint16_t i)
+{
+  uint8_t hi = i>>8;
+  uint8_t lo = i&0xff;
+
+  emit_B(s, pc,   hi);
+  emit_B(s, pc+1, lo);
+}
+
+static void
+gen_B(codegen_scope *s, uint8_t i)
+{
+  emit_B(s, s->pc, i);
+  s->pc++;
+}
+
+static void
+gen_S(codegen_scope *s, uint16_t i)
+{
+  emit_S(s, s->pc, i);
+  s->pc += 2;
+}
+
+static void
+genop_0(codegen_scope *s, mrb_code i)
+{
+  s->lastpc = s->pc;
+  gen_B(s, i);
+}
+
+static void
+genop_1(codegen_scope *s, mrb_code i, uint16_t a)
+{
+  s->lastpc = s->pc;
+  if (a > 0xff) {
+    gen_B(s, OP_EXT1);
+    gen_B(s, i);
+    gen_S(s, a);
+  }
+  else {
+    gen_B(s, i);
+    gen_B(s, (uint8_t)a);
+  }
+}
+
+static void
+genop_2(codegen_scope *s, mrb_code i, uint16_t a, uint16_t b)
+{
+  s->lastpc = s->pc;
+  if (a > 0xff && b > 0xff) {
+    gen_B(s, OP_EXT3);
+    gen_B(s, i);
+    gen_S(s, a);
+    gen_S(s, b);
+  }
+  else if (b > 0xff) {
+    gen_B(s, OP_EXT2);
+    gen_B(s, i);
+    gen_B(s, (uint8_t)a);
+    gen_S(s, b);
+  }
+  else if (a > 0xff) {
+    gen_B(s, OP_EXT1);
+    gen_B(s, i);
+    gen_S(s, a);
+    gen_B(s, (uint8_t)b);
+  }
+  else {
+    gen_B(s, i);
+    gen_B(s, (uint8_t)a);
+    gen_B(s, (uint8_t)b);
+  }
+}
+
+static void
+genop_3(codegen_scope *s, mrb_code i, uint16_t a, uint16_t b, uint8_t c)
+{
+  genop_2(s, i, a, b);
+  gen_B(s, c);
+}
+
+static void
+genop_2S(codegen_scope *s, mrb_code i, uint16_t a, uint16_t b)
+{
+  genop_1(s, i, a);
+  gen_S(s, b);
+}
+
+static void
+genop_W(codegen_scope *s, mrb_code i, uint32_t a)
+{
+  uint8_t a1 = (a>>16) & 0xff;
+  uint8_t a2 = (a>>8) & 0xff;
+  uint8_t a3 = a & 0xff;
+
+  s->lastpc = s->pc;
+  gen_B(s, i);
+  gen_B(s, a1);
+  gen_B(s, a2);
+  gen_B(s, a3);
+}
+
+#define NOVAL  0
+#define VAL    1
+
+static mrb_bool
+no_optimize(codegen_scope *s)
+{
+  if (s && s->parser && s->parser->no_optimize)
+    return TRUE;
+  return FALSE;
+}
+
+static
+mrb_bool
+on_eval(codegen_scope *s)
+{
+  if (s && s->parser && s->parser->on_eval)
+    return TRUE;
+  return FALSE;
+}
+
+struct mrb_insn_data
+mrb_decode_insn(const mrb_code *pc)
+{
+  struct mrb_insn_data data = { 0 };
+  mrb_code insn = READ_B();
+  uint16_t a = 0;
+  uint16_t b = 0;
+  uint8_t  c = 0;
+
+  switch (insn) {
+#define FETCH_Z() /* empty */
+#define OPCODE(i,x) case OP_ ## i: FETCH_ ## x (); break;
+#include "mruby/ops.h"
+#undef OPCODE
+  }
+  switch (insn) {
+  case OP_EXT1:
+    insn = READ_B();
+    switch (insn) {
+#define OPCODE(i,x) case OP_ ## i: FETCH_ ## x ## _1 (); break;
+#include "mruby/ops.h"
+#undef OPCODE
+    }
+    break;
+  case OP_EXT2:
+    insn = READ_B();
+    switch (insn) {
+#define OPCODE(i,x) case OP_ ## i: FETCH_ ## x ## _2 (); break;
+#include "mruby/ops.h"
+#undef OPCODE
+    }
+    break;
+  case OP_EXT3:
+    insn = READ_B();
+    switch (insn) {
+#define OPCODE(i,x) case OP_ ## i: FETCH_ ## x ## _3 (); break;
+#include "mruby/ops.h"
+#undef OPCODE
+    }
+    break;
+  default:
+    break;
+  }
+  data.insn = insn;
+  data.a = a;
+  data.b = b;
+  data.c = c;
+  return data;
+}
+
+static struct mrb_insn_data
+mrb_last_insn(codegen_scope *s)
+{
+  if (s->pc == s->lastpc) {
+    struct mrb_insn_data data;
+
+    data.insn = OP_NOP;
+    return data;
+  }
+  return mrb_decode_insn(&s->iseq[s->lastpc]);
+}
+
+static mrb_bool
+no_peephole(codegen_scope *s)
+{
+  return no_optimize(s) || s->lastlabel == s->pc || s->pc == 0 || s->pc == s->lastpc;
+}
+
+static uint16_t
+genjmp(codegen_scope *s, mrb_code i, uint16_t pc)
+{
+  uint16_t pos;
+
+  s->lastpc = s->pc;
+  gen_B(s, i);
+  pos = s->pc;
+  gen_S(s, pc);
+  return pos;
+}
+
+static uint16_t
+genjmp2(codegen_scope *s, mrb_code i, uint16_t a, int pc, int val)
+{
+  uint16_t pos;
+
+  if (!no_peephole(s) && !val) {
+    struct mrb_insn_data data = mrb_last_insn(s);
+
+    if (data.insn == OP_MOVE && data.a == a) {
+      s->pc = s->lastpc;
+      a = data.b;
+    }
+  }
+
+  s->lastpc = s->pc;
+  if (a > 0xff) {
+    gen_B(s, OP_EXT1);
+    gen_B(s, i);
+    gen_S(s, a);
+    pos = s->pc;
+    gen_S(s, pc);
+  }
+  else {
+    gen_B(s, i);
+    gen_B(s, (uint8_t)a);
+    pos = s->pc;
+    gen_S(s, pc);
+  }
+  return pos;
+}
+
+static void
+gen_move(codegen_scope *s, uint16_t dst, uint16_t src, int nopeep)
+{
+  if (no_peephole(s)) {
+  normal:
+    genop_2(s, OP_MOVE, dst, src);
+    if (on_eval(s)) {
+      genop_0(s, OP_NOP);
+    }
+    return;
+  }
+  else {
+    struct mrb_insn_data data = mrb_last_insn(s);
+
+    switch (data.insn) {
+    case OP_MOVE:
+      if (dst == src) return;             /* remove useless MOVE */
+      if (data.b == dst && data.a == src) /* skip swapping MOVE */
+        return;
+      goto normal;
+    case OP_LOADNIL: case OP_LOADSELF: case OP_LOADT: case OP_LOADF:
+    case OP_LOADI__1:
+    case OP_LOADI_0: case OP_LOADI_1: case OP_LOADI_2: case OP_LOADI_3:
+    case OP_LOADI_4: case OP_LOADI_5: case OP_LOADI_6: case OP_LOADI_7:
+      if (nopeep || data.a != src || data.a < s->nlocals) goto normal;
+      s->pc = s->lastpc;
+      genop_1(s, data.insn, dst);
+      break;
+    case OP_LOADI: case OP_LOADINEG: case OP_LOADL: case OP_LOADSYM:
+    case OP_GETGV: case OP_GETSV: case OP_GETIV: case OP_GETCV:
+    case OP_GETCONST: case OP_STRING:
+    case OP_LAMBDA: case OP_BLOCK: case OP_METHOD: case OP_BLKPUSH:
+      if (nopeep || data.a != src || data.a < s->nlocals) goto normal;
+      s->pc = s->lastpc;
+      genop_2(s, data.insn, dst, data.b);
+      break;
+    default:
+      goto normal;
+    }
+  }
+}
+
+static void
+gen_return(codegen_scope *s, uint8_t op, uint16_t src)
+{
+  if (no_peephole(s)) {
+    genop_1(s, op, src);
+  }
+  else {
+    struct mrb_insn_data data = mrb_last_insn(s);
+
+    if (data.insn == OP_MOVE && src == data.a) {
+      s->pc = s->lastpc;
+      genop_1(s, op, data.b);
+    }
+    else if (data.insn != OP_RETURN) {
+      genop_1(s, op, src);
+    }
+  }
+}
+
+static void
+gen_addsub(codegen_scope *s, uint8_t op, uint16_t dst)
+{
+  if (no_peephole(s)) {
+  normal:
+    genop_1(s, op, dst);
+    return;
+  }
+  else {
+    struct mrb_insn_data data = mrb_last_insn(s);
+
+    switch (data.insn) {
+    case OP_LOADI__1:
+      if (op == OP_ADD) op = OP_SUB;
+      else op = OP_ADD;
+      data.b = 1;
+      goto replace;
+    case OP_LOADI_0: case OP_LOADI_1: case OP_LOADI_2: case OP_LOADI_3:
+    case OP_LOADI_4: case OP_LOADI_5: case OP_LOADI_6: case OP_LOADI_7:
+      data.b = data.insn - OP_LOADI_0;
+      /* fall through */
+    case OP_LOADI:
+    replace:
+      if (data.b >= 128) goto normal;
+      s->pc = s->lastpc;
+      if (op == OP_ADD) {
+        genop_2(s, OP_ADDI, dst, (uint8_t)data.b);
+      }
+      else {
+        genop_2(s, OP_SUBI, dst, (uint8_t)data.b);
+      }
+      break;
+    default:
+      goto normal;
+    }
+  }
+}
+
+static int
+dispatch(codegen_scope *s, uint16_t pos0)
+{
+  uint16_t newpos;
+
+  s->lastlabel = s->pc;
+  newpos = PEEK_S(s->iseq+pos0);
+  emit_S(s, pos0, s->pc);
+  return newpos;
+}
+
+static void
+dispatch_linked(codegen_scope *s, uint16_t pos)
+{
+  if (pos==0) return;
+  for (;;) {
+    pos = dispatch(s, pos);
+    if (pos==0) break;
+  }
+}
+
+#define nregs_update do {if (s->sp > s->nregs) s->nregs = s->sp;} while (0)
+static void
+push_n_(codegen_scope *s, int n)
+{
+  if (s->sp+n >= 0xffff) {
+    codegen_error(s, "too complex expression");
+  }
+  s->sp+=n;
+  nregs_update;
+}
+
+static void
+pop_n_(codegen_scope *s, int n)
+{
+  if ((int)s->sp-n < 0) {
+    codegen_error(s, "stack pointer underflow");
+  }
+  s->sp-=n;
+}
+
+#define push() push_n_(s,1)
+#define push_n(n) push_n_(s,n)
+#define pop() pop_n_(s,1)
+#define pop_n(n) pop_n_(s,n)
+#define cursp() (s->sp)
+
+static inline int
+new_lit(codegen_scope *s, mrb_value val)
+{
+  int i;
+  mrb_value *pv;
+
+  switch (mrb_type(val)) {
+  case MRB_TT_STRING:
+    for (i=0; i<s->irep->plen; i++) {
+      mrb_int len;
+      pv = &s->irep->pool[i];
+
+      if (!mrb_string_p(*pv)) continue;
+      if ((len = RSTRING_LEN(*pv)) != RSTRING_LEN(val)) continue;
+      if (memcmp(RSTRING_PTR(*pv), RSTRING_PTR(val), len) == 0)
+        return i;
+    }
+    break;
+#ifndef MRB_WITHOUT_FLOAT
+  case MRB_TT_FLOAT:
+    for (i=0; i<s->irep->plen; i++) {
+      mrb_float f1, f2;
+      pv = &s->irep->pool[i];
+      if (!mrb_float_p(*pv)) continue;
+      f1 = mrb_float(*pv);
+      f2 = mrb_float(val);
+      if (f1 == f2 && !signbit(f1) == !signbit(f2)) return i;
+    }
+    break;
+#endif
+  case MRB_TT_FIXNUM:
+    for (i=0; i<s->irep->plen; i++) {
+      pv = &s->irep->pool[i];
+      if (!mrb_fixnum_p(*pv)) continue;
+      if (mrb_fixnum(*pv) == mrb_fixnum(val)) return i;
+    }
+    break;
+  default:
+    /* should not happen */
+    return 0;
+  }
+
+  if (s->irep->plen == s->pcapa) {
+    s->pcapa *= 2;
+    s->irep->pool = (mrb_value *)codegen_realloc(s, s->irep->pool, sizeof(mrb_value)*s->pcapa);
+  }
+
+  pv = &s->irep->pool[s->irep->plen];
+  i = s->irep->plen++;
+
+  switch (mrb_type(val)) {
+  case MRB_TT_STRING:
+    *pv = mrb_str_pool(s->mrb, RSTRING_PTR(val), RSTRING_LEN(val), RSTR_NOFREE_P(RSTRING(val)));
+    break;
+
+#ifndef MRB_WITHOUT_FLOAT
+  case MRB_TT_FLOAT:
+#ifdef MRB_WORD_BOXING
+    *pv = mrb_float_pool(s->mrb, mrb_float(val));
+    break;
+#endif
+#endif
+  case MRB_TT_FIXNUM:
+    *pv = val;
+    break;
+
+  default:
+    /* should not happen */
+    break;
+  }
+  return i;
+}
+
+/* maximum symbol numbers */
+#define MAXSYMLEN 0x10000
+
+static int
+new_sym(codegen_scope *s, mrb_sym sym)
+{
+  int i, len;
+
+  mrb_assert(s->irep);
+
+  len = s->irep->slen;
+  for (i=0; i<len; i++) {
+    if (s->irep->syms[i] == sym) return i;
+  }
+  if (s->irep->slen >= s->scapa) {
+    s->scapa *= 2;
+    s->irep->syms = (mrb_sym*)codegen_realloc(s, s->irep->syms, sizeof(mrb_sym)*s->scapa);
+  }
+  s->irep->syms[s->irep->slen] = sym;
+  return s->irep->slen++;
+}
+
+static int
+node_len(node *tree)
+{
+  int n = 0;
+
+  while (tree) {
+    n++;
+    tree = tree->cdr;
+  }
+  return n;
+}
+
+#define nint(x) ((int)(intptr_t)(x))
+#define nchar(x) ((char)(intptr_t)(x))
+#define nsym(x) ((mrb_sym)(intptr_t)(x))
+
+#define lv_name(lv) nsym((lv)->car)
+
+static int
+lv_idx(codegen_scope *s, mrb_sym id)
+{
+  node *lv = s->lv;
+  int n = 1;
+
+  while (lv) {
+    if (lv_name(lv) == id) return n;
+    n++;
+    lv = lv->cdr;
+  }
+  return 0;
+}
+
+static void
+for_body(codegen_scope *s, node *tree)
+{
+  codegen_scope *prev = s;
+  int idx;
+  struct loopinfo *lp;
+  node *n2;
+
+  /* generate receiver */
+  codegen(s, tree->cdr->car, VAL);
+  /* generate loop-block */
+  s = scope_new(s->mrb, s, NULL);
+
+  push();                       /* push for a block parameter */
+
+  /* generate loop variable */
+  n2 = tree->car;
+  genop_W(s, OP_ENTER, 0x40000);
+  if (n2->car && !n2->car->cdr && !n2->cdr) {
+    gen_assignment(s, n2->car->car, 1, NOVAL);
+  }
+  else {
+    gen_vmassignment(s, n2, 1, VAL);
+  }
+  /* construct loop */
+  lp = loop_push(s, LOOP_FOR);
+  lp->pc2 = new_label(s);
+
+  /* loop body */
+  codegen(s, tree->cdr->cdr->car, VAL);
+  pop();
+  gen_return(s, OP_RETURN, cursp());
+  loop_pop(s, NOVAL);
+  scope_finish(s);
+  s = prev;
+  genop_2(s, OP_BLOCK, cursp(), s->irep->rlen-1);
+  push();pop(); /* space for a block */
+  pop();
+  idx = new_sym(s, mrb_intern_lit(s->mrb, "each"));
+  genop_3(s, OP_SENDB, cursp(), idx, 0);
+}
+
+static int
+lambda_body(codegen_scope *s, node *tree, int blk)
+{
+  codegen_scope *parent = s;
+  s = scope_new(s->mrb, s, tree->car);
+
+  s->mscope = !blk;
+
+  if (blk) {
+    struct loopinfo *lp = loop_push(s, LOOP_BLOCK);
+    lp->pc0 = new_label(s);
+  }
+  tree = tree->cdr;
+  if (tree->car == NULL) {
+    genop_W(s, OP_ENTER, 0);
+  }
+  else {
+    mrb_aspec a;
+    int ma, oa, ra, pa, ka, kd, ba;
+    int pos, i;
+    node *opt;
+    node *margs, *pargs;
+    node *tail;
+
+    /* mandatory arguments */
+    ma = node_len(tree->car->car);
+    margs = tree->car->car;
+    tail = tree->car->cdr->cdr->cdr->cdr;
+
+    /* optional arguments */
+    oa = node_len(tree->car->cdr->car);
+    /* rest argument? */
+    ra = tree->car->cdr->cdr->car ? 1 : 0;
+    /* mandatory arugments after rest argument */
+    pa = node_len(tree->car->cdr->cdr->cdr->car);
+    pargs = tree->car->cdr->cdr->cdr->car;
+    /* keyword arguments */
+    ka = tail? node_len(tail->cdr->car) : 0;
+    /* keyword dictionary? */
+    kd = tail && tail->cdr->cdr->car? 1 : 0;
+    /* block argument? */
+    ba = tail && tail->cdr->cdr->cdr->car ? 1 : 0;
+
+    if (ma > 0x1f || oa > 0x1f || pa > 0x1f || ka > 0x1f) {
+      codegen_error(s, "too many formal arguments");
+    }
+    a = MRB_ARGS_REQ(ma)
+      | MRB_ARGS_OPT(oa)
+      | (ra? MRB_ARGS_REST() : 0)
+      | MRB_ARGS_POST(pa)
+      | MRB_ARGS_KEY(ka, kd)
+      | (ba? MRB_ARGS_BLOCK() : 0);
+    s->ainfo = (((ma+oa) & 0x3f) << 7) /* (12bits = 5:1:5:1) */
+      | ((ra & 0x1) << 6)
+      | ((pa & 0x1f) << 1)
+      | ((ka | kd) != 0 ? 0x01 : 0x00);
+    genop_W(s, OP_ENTER, a);
+    /* generate jump table for optional arguments initializer */
+    pos = new_label(s);
+    for (i=0; i<oa; i++) {
+      new_label(s);
+      genjmp(s, OP_JMP, 0);
+    }
+    if (oa > 0) {
+      genjmp(s, OP_JMP, 0);
+    }
+    opt = tree->car->cdr->car;
+    i = 0;
+    while (opt) {
+      int idx;
+
+      dispatch(s, pos+i*3+1);
+      codegen(s, opt->car->cdr, VAL);
+      pop();
+      idx = lv_idx(s, nsym(opt->car->car));
+      gen_move(s, idx, cursp(), 0);
+      i++;
+      opt = opt->cdr;
+    }
+    if (oa > 0) {
+      dispatch(s, pos+i*3+1);
+    }
+
+    /* keyword arguments */
+    if (tail) {
+      node *kwds = tail->cdr->car;
+      int kwrest = 0;
+
+      if (tail->cdr->cdr->car) {
+        kwrest = 1;
+      }
+      mrb_assert(nint(tail->car) == NODE_ARGS_TAIL);
+      mrb_assert(node_len(tail) == 4);
+
+      while (kwds) {
+        int jmpif_key_p, jmp_def_set = -1;
+        node *kwd = kwds->car, *def_arg = kwd->cdr->cdr->car;
+        mrb_sym kwd_sym = nsym(kwd->cdr->car);
+
+        mrb_assert(nint(kwd->car) == NODE_KW_ARG);
+
+        if (def_arg) {
+          genop_2(s, OP_KEY_P, lv_idx(s, kwd_sym), new_sym(s, kwd_sym));
+          jmpif_key_p = genjmp2(s, OP_JMPIF, lv_idx(s, kwd_sym), 0, 0);
+          codegen(s, def_arg, VAL);
+          pop();
+          gen_move(s, lv_idx(s, kwd_sym), cursp(), 0);
+          jmp_def_set = genjmp(s, OP_JMP, 0);
+          dispatch(s, jmpif_key_p);
+        }
+        genop_2(s, OP_KARG, lv_idx(s, kwd_sym), new_sym(s, kwd_sym));
+        if (jmp_def_set != -1) {
+          dispatch(s, jmp_def_set);
+        }
+        i++;
+
+        kwds = kwds->cdr;
+      }
+      if (tail->cdr->car && !kwrest) {
+        genop_0(s, OP_KEYEND);
+      }
+    }
+
+    /* argument destructuring */
+    if (margs) {
+      node *n = margs;
+
+      pos = 1;
+      while (n) {
+        if (nint(n->car->car) == NODE_MASGN) {
+          gen_vmassignment(s, n->car->cdr->car, pos, NOVAL);
+        }
+        pos++;
+        n = n->cdr;
+      }
+    }
+    if (pargs) {
+      node *n = margs;
+
+      pos = ma+oa+ra+1;
+      while (n) {
+        if (nint(n->car->car) == NODE_MASGN) {
+          gen_vmassignment(s, n->car->cdr->car, pos, NOVAL);
+        }
+        pos++;
+        n = n->cdr;
+      }
+    }
+  }
+
+  codegen(s, tree->cdr->car, VAL);
+  pop();
+  if (s->pc > 0) {
+    gen_return(s, OP_RETURN, cursp());
+  }
+  if (blk) {
+    loop_pop(s, NOVAL);
+  }
+  scope_finish(s);
+  return parent->irep->rlen - 1;
+}
+
+static int
+scope_body(codegen_scope *s, node *tree, int val)
+{
+  codegen_scope *scope = scope_new(s->mrb, s, tree->car);
+
+  codegen(scope, tree->cdr, VAL);
+  gen_return(scope, OP_RETURN, scope->sp-1);
+  if (!s->iseq) {
+    genop_0(scope, OP_STOP);
+  }
+  scope_finish(scope);
+  if (!s->irep) {
+    /* should not happen */
+    return 0;
+  }
+  return s->irep->rlen - 1;
+}
+
+static mrb_bool
+nosplat(node *t)
+{
+  while (t) {
+    if (nint(t->car->car) == NODE_SPLAT) return FALSE;
+    t = t->cdr;
+  }
+  return TRUE;
+}
+
+static mrb_sym
+attrsym(codegen_scope *s, mrb_sym a)
+{
+  const char *name;
+  mrb_int len;
+  char *name2;
+
+  name = mrb_sym_name_len(s->mrb, a, &len);
+  name2 = (char *)codegen_palloc(s,
+                                 (size_t)len
+                                 + 1 /* '=' */
+                                 + 1 /* '\0' */
+                                 );
+  mrb_assert_int_fit(mrb_int, len, size_t, SIZE_MAX);
+  memcpy(name2, name, (size_t)len);
+  name2[len] = '=';
+  name2[len+1] = '\0';
+
+  return mrb_intern(s->mrb, name2, len+1);
+}
+
+#define CALL_MAXARGS 127
+
+static int
+gen_values(codegen_scope *s, node *t, int val, int extra)
+{
+  int n = 0;
+  int is_splat;
+
+  while (t) {
+    is_splat = nint(t->car->car) == NODE_SPLAT; /* splat mode */
+    if (
+      n+extra >= CALL_MAXARGS - 1 /* need to subtract one because vm.c expects an array if n == CALL_MAXARGS */
+      || is_splat) {
+      if (val) {
+        if (is_splat && n == 0 && nint(t->car->cdr->car) == NODE_ARRAY) {
+          codegen(s, t->car->cdr, VAL);
+          pop();
+        }
+        else {
+          pop_n(n);
+          if (n == 0 && is_splat) {
+            genop_1(s, OP_LOADNIL, cursp());
+          }
+          else {
+            genop_2(s, OP_ARRAY, cursp(), n);
+          }
+          push();
+          codegen(s, t->car, VAL);
+          pop(); pop();
+          if (is_splat) {
+            genop_1(s, OP_ARYCAT, cursp());
+          }
+          else {
+            genop_1(s, OP_ARYPUSH, cursp());
+          }
+        }
+        t = t->cdr;
+        while (t) {
+          push();
+          codegen(s, t->car, VAL);
+          pop(); pop();
+          if (nint(t->car->car) == NODE_SPLAT) {
+            genop_1(s, OP_ARYCAT, cursp());
+          }
+          else {
+            genop_1(s, OP_ARYPUSH, cursp());
+          }
+          t = t->cdr;
+        }
+      }
+      else {
+        while (t) {
+          codegen(s, t->car, NOVAL);
+          t = t->cdr;
+        }
+      }
+      return -1;
+    }
+    /* normal (no splat) mode */
+    codegen(s, t->car, val);
+    n++;
+    t = t->cdr;
+  }
+  return n;
+}
+
+static void
+gen_call(codegen_scope *s, node *tree, mrb_sym name, int sp, int val, int safe)
+{
+  mrb_sym sym = name ? name : nsym(tree->cdr->car);
+  int skip = 0;
+  int n = 0, noop = 0, sendv = 0, blk = 0;
+
+  codegen(s, tree->car, VAL); /* receiver */
+  if (safe) {
+    int recv = cursp()-1;
+    gen_move(s, cursp(), recv, 1);
+    skip = genjmp2(s, OP_JMPNIL, cursp(), 0, val);
+  }
+  tree = tree->cdr->cdr->car;
+  if (tree) {
+    n = gen_values(s, tree->car, VAL, sp?1:0);
+    if (n < 0) {
+      n = noop = sendv = 1;
+      push();
+    }
+  }
+  if (sp) {                     /* last argument pushed (attr=) */
+    if (sendv) {
+      gen_move(s, cursp(), sp, 0);
+      pop();
+      genop_1(s, OP_ARYPUSH, cursp());
+      push();
+    }
+    else {
+      gen_move(s, cursp(), sp, 0);
+      push();
+      n++;
+    }
+  }
+  if (tree && tree->cdr) {
+    noop = 1;
+    codegen(s, tree->cdr, VAL);
+    pop();
+    blk = 1;
+  }
+  push();pop();
+  pop_n(n+1);
+  {
+    mrb_int symlen;
+    const char *symname = mrb_sym_name_len(s->mrb, sym, &symlen);
+
+    if (!noop && symlen == 1 && symname[0] == '+' && n == 1)  {
+      gen_addsub(s, OP_ADD, cursp());
+    }
+    else if (!noop && symlen == 1 && symname[0] == '-' && n == 1)  {
+      gen_addsub(s, OP_SUB, cursp());
+    }
+    else if (!noop && symlen == 1 && symname[0] == '*' && n == 1)  {
+      genop_1(s, OP_MUL, cursp());
+    }
+    else if (!noop && symlen == 1 && symname[0] == '/' && n == 1)  {
+      genop_1(s, OP_DIV, cursp());
+    }
+    else if (!noop && symlen == 1 && symname[0] == '<' && n == 1)  {
+      genop_1(s, OP_LT, cursp());
+    }
+    else if (!noop && symlen == 2 && symname[0] == '<' && symname[1] == '=' && n == 1)  {
+      genop_1(s, OP_LE, cursp());
+    }
+    else if (!noop && symlen == 1 && symname[0] == '>' && n == 1)  {
+      genop_1(s, OP_GT, cursp());
+    }
+    else if (!noop && symlen == 2 && symname[0] == '>' && symname[1] == '=' && n == 1)  {
+      genop_1(s, OP_GE, cursp());
+    }
+    else if (!noop && symlen == 2 && symname[0] == '=' && symname[1] == '=' && n == 1)  {
+      genop_1(s, OP_EQ, cursp());
+    }
+    else {
+      int idx = new_sym(s, sym);
+
+      if (sendv) {
+        genop_2(s, blk ? OP_SENDVB : OP_SENDV, cursp(), idx);
+      }
+      else {
+        genop_3(s, blk ? OP_SENDB : OP_SEND, cursp(), idx, n);
+      }
+    }
+  }
+  if (safe) {
+    dispatch(s, skip);
+  }
+  if (val) {
+    push();
+  }
+}
+
+static void
+gen_assignment(codegen_scope *s, node *tree, int sp, int val)
+{
+  int idx;
+  int type = nint(tree->car);
+
+  tree = tree->cdr;
+  switch (type) {
+  case NODE_GVAR:
+    idx = new_sym(s, nsym(tree));
+    genop_2(s, OP_SETGV, sp, idx);
+    break;
+  case NODE_ARG:
+  case NODE_LVAR:
+    idx = lv_idx(s, nsym(tree));
+    if (idx > 0) {
+      if (idx != sp) {
+        gen_move(s, idx, sp, val);
+        if (val && on_eval(s)) genop_0(s, OP_NOP);
+      }
+      break;
+    }
+    else {                      /* upvar */
+      int lv = 0;
+      codegen_scope *up = s->prev;
+
+      while (up) {
+        idx = lv_idx(up, nsym(tree));
+        if (idx > 0) {
+          genop_3(s, OP_SETUPVAR, sp, idx, lv);
+          break;
+        }
+        lv++;
+        up = up->prev;
+      }
+    }
+    break;
+  case NODE_NVAR:
+    idx = nint(tree);
+    codegen_error(s, "Can't assign to numbered parameter");
+    break;
+  case NODE_IVAR:
+    idx = new_sym(s, nsym(tree));
+    genop_2(s, OP_SETIV, sp, idx);
+    break;
+  case NODE_CVAR:
+    idx = new_sym(s, nsym(tree));
+    genop_2(s, OP_SETCV, sp, idx);
+    break;
+  case NODE_CONST:
+    idx = new_sym(s, nsym(tree));
+    genop_2(s, OP_SETCONST, sp, idx);
+    break;
+  case NODE_COLON2:
+    gen_move(s, cursp(), sp, 0);
+    push();
+    codegen(s, tree->car, VAL);
+    pop_n(2);
+    idx = new_sym(s, nsym(tree->cdr));
+    genop_2(s, OP_SETMCNST, sp, idx);
+    break;
+
+  case NODE_CALL:
+  case NODE_SCALL:
+    push();
+    gen_call(s, tree, attrsym(s, nsym(tree->cdr->car)), sp, NOVAL,
+             type == NODE_SCALL);
+    pop();
+    if (val) {
+      gen_move(s, cursp(), sp, 0);
+    }
+    break;
+
+  case NODE_MASGN:
+    gen_vmassignment(s, tree->car, sp, val);
+    break;
+
+  /* splat without assignment */
+  case NODE_NIL:
+    break;
+
+  default:
+#ifndef MRB_DISABLE_STDIO
+    fprintf(stderr, "unknown lhs %d\n", type);
+#endif
+    break;
+  }
+  if (val) push();
+}
+
+static void
+gen_vmassignment(codegen_scope *s, node *tree, int rhs, int val)
+{
+  int n = 0, post = 0;
+  node *t, *p;
+
+  if (tree->car) {              /* pre */
+    t = tree->car;
+    n = 0;
+    while (t) {
+      int sp = cursp();
+
+      genop_3(s, OP_AREF, sp, rhs, n);
+      push();
+      gen_assignment(s, t->car, sp, NOVAL);
+      pop();
+      n++;
+      t = t->cdr;
+    }
+  }
+  t = tree->cdr;
+  if (t) {
+    if (t->cdr) {               /* post count */
+      p = t->cdr->car;
+      while (p) {
+        post++;
+        p = p->cdr;
+      }
+    }
+    gen_move(s, cursp(), rhs, val);
+    push_n(post+1);
+    pop_n(post+1);
+    genop_3(s, OP_APOST, cursp(), n, post);
+    n = 1;
+    if (t->car && t->car != (node*)-1) { /* rest */
+      gen_assignment(s, t->car, cursp(), NOVAL);
+    }
+    if (t->cdr && t->cdr->car) {
+      t = t->cdr->car;
+      while (t) {
+        gen_assignment(s, t->car, cursp()+n, NOVAL);
+        t = t->cdr;
+        n++;
+      }
+    }
+    if (val) {
+      gen_move(s, cursp(), rhs, 0);
+    }
+  }
+}
+
+static void
+gen_intern(codegen_scope *s)
+{
+  pop();
+  genop_1(s, OP_INTERN, cursp());
+  push();
+}
+
+static void
+gen_literal_array(codegen_scope *s, node *tree, mrb_bool sym, int val)
+{
+  if (val) {
+    int i = 0, j = 0;
+
+    while (tree) {
+      switch (nint(tree->car->car)) {
+      case NODE_STR:
+        if ((tree->cdr == NULL) && (nint(tree->car->cdr->cdr) == 0))
+          break;
+        /* fall through */
+      case NODE_BEGIN:
+        codegen(s, tree->car, VAL);
+        ++j;
+        break;
+
+      case NODE_LITERAL_DELIM:
+        if (j > 0) {
+          j = 0;
+          ++i;
+          if (sym)
+            gen_intern(s);
+        }
+        break;
+      }
+      while (j >= 2) {
+        pop(); pop();
+        genop_1(s, OP_STRCAT, cursp());
+        push();
+        j--;
+      }
+      tree = tree->cdr;
+    }
+    if (j > 0) {
+      ++i;
+      if (sym)
+        gen_intern(s);
+    }
+    pop_n(i);
+    genop_2(s, OP_ARRAY, cursp(), i);
+    push();
+  }
+  else {
+    while (tree) {
+      switch (nint(tree->car->car)) {
+      case NODE_BEGIN: case NODE_BLOCK:
+        codegen(s, tree->car, NOVAL);
+      }
+      tree = tree->cdr;
+    }
+  }
+}
+
+static void
+raise_error(codegen_scope *s, const char *msg)
+{
+  int idx = new_lit(s, mrb_str_new_cstr(s->mrb, msg));
+
+  genop_1(s, OP_ERR, idx);
+}
+
+#ifndef MRB_WITHOUT_FLOAT
+static double
+readint_float(codegen_scope *s, const char *p, int base)
+{
+  const char *e = p + strlen(p);
+  double f = 0;
+  int n;
+
+  if (*p == '+') p++;
+  while (p < e) {
+    char c = *p;
+    c = tolower((unsigned char)c);
+    for (n=0; n<base; n++) {
+      if (mrb_digitmap[n] == c) {
+        f *= base;
+        f += n;
+        break;
+      }
+    }
+    if (n == base) {
+      codegen_error(s, "malformed readint input");
+    }
+    p++;
+  }
+  return f;
+}
+#endif
+
+static mrb_int
+readint_mrb_int(codegen_scope *s, const char *p, int base, mrb_bool neg, mrb_bool *overflow)
+{
+  const char *e = p + strlen(p);
+  mrb_int result = 0;
+  int n;
+
+  mrb_assert(base >= 2 && base <= 36);
+  if (*p == '+') p++;
+  while (p < e) {
+    char c = *p;
+    c = tolower((unsigned char)c);
+    for (n=0; n<base; n++) {
+      if (mrb_digitmap[n] == c) {
+        break;
+      }
+    }
+    if (n == base) {
+      codegen_error(s, "malformed readint input");
+    }
+
+    if (neg) {
+      if ((MRB_INT_MIN + n)/base > result) {
+        *overflow = TRUE;
+        return 0;
+      }
+      result *= base;
+      result -= n;
+    }
+    else {
+      if ((MRB_INT_MAX - n)/base < result) {
+        *overflow = TRUE;
+        return 0;
+      }
+      result *= base;
+      result += n;
+    }
+    p++;
+  }
+  *overflow = FALSE;
+  return result;
+}
+
+static void
+gen_retval(codegen_scope *s, node *tree)
+{
+  if (nint(tree->car) == NODE_SPLAT) {
+    codegen(s, tree, VAL);
+    pop();
+    genop_1(s, OP_ARYDUP, cursp());
+  }
+  else {
+    codegen(s, tree, VAL);
+    pop();
+  }
+}
+
+static void
+codegen(codegen_scope *s, node *tree, int val)
+{
+  int nt;
+  int rlev = s->rlev;
+
+  if (!tree) {
+    if (val) {
+      genop_1(s, OP_LOADNIL, cursp());
+      push();
+    }
+    return;
+  }
+
+  s->rlev++;
+  if (s->rlev > MRB_CODEGEN_LEVEL_MAX) {
+    codegen_error(s, "too complex expression");
+  }
+  if (s->irep && s->filename_index != tree->filename_index) {
+    mrb_sym fname = mrb_parser_get_filename(s->parser, s->filename_index);
+    const char *filename = mrb_sym_name_len(s->mrb, fname, NULL);
+
+    mrb_debug_info_append_file(s->mrb, s->irep->debug_info,
+                               filename, s->lines, s->debug_start_pos, s->pc);
+    s->debug_start_pos = s->pc;
+    s->filename_index = tree->filename_index;
+    s->filename_sym = mrb_parser_get_filename(s->parser, tree->filename_index);
+  }
+
+  nt = nint(tree->car);
+  s->lineno = tree->lineno;
+  tree = tree->cdr;
+  switch (nt) {
+  case NODE_BEGIN:
+    if (val && !tree) {
+      genop_1(s, OP_LOADNIL, cursp());
+      push();
+    }
+    while (tree) {
+      codegen(s, tree->car, tree->cdr ? NOVAL : val);
+      tree = tree->cdr;
+    }
+    break;
+
+  case NODE_RESCUE:
+    {
+      int noexc, exend, pos1, pos2, tmp;
+      struct loopinfo *lp;
+
+      if (tree->car == NULL) goto exit;
+      lp = loop_push(s, LOOP_BEGIN);
+      lp->pc0 = new_label(s);
+      lp->pc1 = genjmp(s, OP_ONERR, 0);
+      codegen(s, tree->car, VAL);
+      pop();
+      lp->type = LOOP_RESCUE;
+      noexc = genjmp(s, OP_JMP, 0);
+      dispatch(s, lp->pc1);
+      tree = tree->cdr;
+      exend = 0;
+      pos1 = 0;
+      if (tree->car) {
+        node *n2 = tree->car;
+        int exc = cursp();
+
+        genop_1(s, OP_EXCEPT, exc);
+        push();
+        while (n2) {
+          node *n3 = n2->car;
+          node *n4 = n3->car;
+
+          if (pos1) dispatch(s, pos1);
+          pos2 = 0;
+          do {
+            if (n4 && n4->car && nint(n4->car->car) == NODE_SPLAT) {
+              codegen(s, n4->car, VAL);
+              gen_move(s, cursp(), exc, 0);
+              push_n(2); pop_n(2); /* space for one arg and a block */
+              pop();
+              genop_3(s, OP_SEND, cursp(), new_sym(s, mrb_intern_lit(s->mrb, "__case_eqq")), 1);
+            }
+            else {
+              if (n4) {
+                codegen(s, n4->car, VAL);
+              }
+              else {
+                genop_2(s, OP_GETCONST, cursp(), new_sym(s, mrb_intern_lit(s->mrb, "StandardError")));
+                push();
+              }
+              pop();
+              genop_2(s, OP_RESCUE, exc, cursp());
+            }
+            tmp = genjmp2(s, OP_JMPIF, cursp(), pos2, val);
+            pos2 = tmp;
+            if (n4) {
+              n4 = n4->cdr;
+            }
+          } while (n4);
+          pos1 = genjmp(s, OP_JMP, 0);
+          dispatch_linked(s, pos2);
+
+          pop();
+          if (n3->cdr->car) {
+            gen_assignment(s, n3->cdr->car, exc, NOVAL);
+          }
+          if (n3->cdr->cdr->car) {
+            codegen(s, n3->cdr->cdr->car, val);
+            if (val) pop();
+          }
+          tmp = genjmp(s, OP_JMP, exend);
+          exend = tmp;
+          n2 = n2->cdr;
+          push();
+        }
+        if (pos1) {
+          dispatch(s, pos1);
+          genop_1(s, OP_RAISE, exc);
+        }
+      }
+      pop();
+      tree = tree->cdr;
+      dispatch(s, noexc);
+      genop_1(s, OP_POPERR, 1);
+      if (tree->car) {
+        codegen(s, tree->car, val);
+      }
+      else if (val) {
+        push();
+      }
+      dispatch_linked(s, exend);
+      loop_pop(s, NOVAL);
+    }
+    break;
+
+  case NODE_ENSURE:
+    if (!tree->cdr || !tree->cdr->cdr ||
+        (nint(tree->cdr->cdr->car) == NODE_BEGIN &&
+         tree->cdr->cdr->cdr)) {
+      int idx;
+
+      s->ensure_level++;
+      idx = scope_body(s, tree->cdr, NOVAL);
+      genop_1(s, OP_EPUSH, idx);
+      codegen(s, tree->car, val);
+      s->ensure_level--;
+      genop_1(s, OP_EPOP, 1);
+    }
+    else {                      /* empty ensure ignored */
+      codegen(s, tree->car, val);
+    }
+    break;
+
+  case NODE_LAMBDA:
+    if (val) {
+      int idx = lambda_body(s, tree, 1);
+
+      genop_2(s, OP_LAMBDA, cursp(), idx);
+      push();
+    }
+    break;
+
+  case NODE_BLOCK:
+    if (val) {
+      int idx = lambda_body(s, tree, 1);
+
+      genop_2(s, OP_BLOCK, cursp(), idx);
+      push();
+    }
+    break;
+
+  case NODE_IF:
+    {
+      int pos1, pos2, nil_p = FALSE;
+      node *elsepart = tree->cdr->cdr->car;
+
+      if (!tree->car) {
+        codegen(s, elsepart, val);
+        goto exit;
+      }
+      switch (nint(tree->car->car)) {
+      case NODE_TRUE:
+      case NODE_INT:
+      case NODE_STR:
+        codegen(s, tree->cdr->car, val);
+        goto exit;
+      case NODE_FALSE:
+      case NODE_NIL:
+        codegen(s, elsepart, val);
+        goto exit;
+      case NODE_CALL:
+        {
+          node *n = tree->car->cdr;
+          mrb_sym mid = nsym(n->cdr->car);
+          mrb_sym mnil = mrb_intern_lit(s->mrb, "nil?");
+          if (mid == mnil && n->cdr->cdr->car == NULL) {
+            nil_p = TRUE;
+            codegen(s, n->car, VAL);
+          }
+        }
+        break;
+      }
+      if (!nil_p) {
+        codegen(s, tree->car, VAL);
+      }
+      pop();
+      if (val || tree->cdr->car) {
+        if (nil_p) {
+          pos2 = genjmp2(s, OP_JMPNIL, cursp(), 0, val);
+          pos1 = genjmp(s, OP_JMP, 0);
+          dispatch(s, pos2);
+        }
+        else {
+          pos1 = genjmp2(s, OP_JMPNOT, cursp(), 0, val);
+        }
+        codegen(s, tree->cdr->car, val);
+        if (val) pop();
+        if (elsepart || val) {
+          pos2 = genjmp(s, OP_JMP, 0);
+          dispatch(s, pos1);
+          codegen(s, elsepart, val);
+          dispatch(s, pos2);
+        }
+        else {
+          dispatch(s, pos1);
+        }
+      }
+      else {                    /* empty then-part */
+        if (elsepart) {
+          if (nil_p) {
+            pos1 = genjmp2(s, OP_JMPNIL, cursp(), 0, val);
+          }
+          else {
+            pos1 = genjmp2(s, OP_JMPIF, cursp(), 0, val);
+          }
+          codegen(s, elsepart, val);
+          dispatch(s, pos1);
+        }
+        else if (val && !nil_p) {
+          genop_1(s, OP_LOADNIL, cursp());
+          push();
+        }
+      }
+    }
+    break;
+
+  case NODE_AND:
+    {
+      int pos;
+
+      codegen(s, tree->car, VAL);
+      pop();
+      pos = genjmp2(s, OP_JMPNOT, cursp(), 0, val);
+      codegen(s, tree->cdr, val);
+      dispatch(s, pos);
+    }
+    break;
+
+  case NODE_OR:
+    {
+      int pos;
+
+      codegen(s, tree->car, VAL);
+      pop();
+      pos = genjmp2(s, OP_JMPIF, cursp(), 0, val);
+      codegen(s, tree->cdr, val);
+      dispatch(s, pos);
+    }
+    break;
+
+  case NODE_WHILE:
+    {
+      struct loopinfo *lp = loop_push(s, LOOP_NORMAL);
+
+      lp->pc0 = new_label(s);
+      lp->pc1 = genjmp(s, OP_JMP, 0);
+      lp->pc2 = new_label(s);
+      codegen(s, tree->cdr, NOVAL);
+      dispatch(s, lp->pc1);
+      codegen(s, tree->car, VAL);
+      pop();
+      genjmp2(s, OP_JMPIF, cursp(), lp->pc2, NOVAL);
+
+      loop_pop(s, val);
+    }
+    break;
+
+  case NODE_UNTIL:
+    {
+      struct loopinfo *lp = loop_push(s, LOOP_NORMAL);
+
+      lp->pc0 = new_label(s);
+      lp->pc1 = genjmp(s, OP_JMP, 0);
+      lp->pc2 = new_label(s);
+      codegen(s, tree->cdr, NOVAL);
+      dispatch(s, lp->pc1);
+      codegen(s, tree->car, VAL);
+      pop();
+      genjmp2(s, OP_JMPNOT, cursp(), lp->pc2, NOVAL);
+
+      loop_pop(s, val);
+    }
+    break;
+
+  case NODE_FOR:
+    for_body(s, tree);
+    if (val) push();
+    break;
+
+  case NODE_CASE:
+    {
+      int head = 0;
+      int pos1, pos2, pos3, tmp;
+      node *n;
+
+      pos3 = 0;
+      if (tree->car) {
+        head = cursp();
+        codegen(s, tree->car, VAL);
+      }
+      tree = tree->cdr;
+      while (tree) {
+        n = tree->car->car;
+        pos1 = pos2 = 0;
+        while (n) {
+          codegen(s, n->car, VAL);
+          if (head) {
+            gen_move(s, cursp(), head, 0);
+            push(); push(); pop(); pop(); pop();
+            if (nint(n->car->car) == NODE_SPLAT) {
+              genop_3(s, OP_SEND, cursp(), new_sym(s, mrb_intern_lit(s->mrb, "__case_eqq")), 1);
+            }
+            else {
+              genop_3(s, OP_SEND, cursp(), new_sym(s, mrb_intern_lit(s->mrb, "===")), 1);
+            }
+          }
+          else {
+            pop();
+          }
+          tmp = genjmp2(s, OP_JMPIF, cursp(), pos2, NOVAL);
+          pos2 = tmp;
+          n = n->cdr;
+        }
+        if (tree->car->car) {
+          pos1 = genjmp(s, OP_JMP, 0);
+          dispatch_linked(s, pos2);
+        }
+        codegen(s, tree->car->cdr, val);
+        if (val) pop();
+        tmp = genjmp(s, OP_JMP, pos3);
+        pos3 = tmp;
+        if (pos1) dispatch(s, pos1);
+        tree = tree->cdr;
+      }
+      if (val) {
+        int pos = cursp();
+        genop_1(s, OP_LOADNIL, cursp());
+        if (pos3) dispatch_linked(s, pos3);
+        if (head) pop();
+        if (cursp() != pos) {
+          gen_move(s, cursp(), pos, 0);
+        }
+        push();
+      }
+      else {
+        if (pos3) {
+          dispatch_linked(s, pos3);
+        }
+        if (head) {
+          pop();
+        }
+      }
+    }
+    break;
+
+  case NODE_SCOPE:
+    scope_body(s, tree, NOVAL);
+    break;
+
+  case NODE_FCALL:
+  case NODE_CALL:
+    gen_call(s, tree, 0, 0, val, 0);
+    break;
+  case NODE_SCALL:
+    gen_call(s, tree, 0, 0, val, 1);
+    break;
+
+  case NODE_DOT2:
+    codegen(s, tree->car, val);
+    codegen(s, tree->cdr, val);
+    if (val) {
+      pop(); pop();
+      genop_1(s, OP_RANGE_INC, cursp());
+      push();
+    }
+    break;
+
+  case NODE_DOT3:
+    codegen(s, tree->car, val);
+    codegen(s, tree->cdr, val);
+    if (val) {
+      pop(); pop();
+      genop_1(s, OP_RANGE_EXC, cursp());
+      push();
+    }
+    break;
+
+  case NODE_COLON2:
+    {
+      int sym = new_sym(s, nsym(tree->cdr));
+
+      codegen(s, tree->car, VAL);
+      pop();
+      genop_2(s, OP_GETMCNST, cursp(), sym);
+      if (val) push();
+    }
+    break;
+
+  case NODE_COLON3:
+    {
+      int sym = new_sym(s, nsym(tree));
+
+      genop_1(s, OP_OCLASS, cursp());
+      genop_2(s, OP_GETMCNST, cursp(), sym);
+      if (val) push();
+    }
+    break;
+
+  case NODE_ARRAY:
+    {
+      int n;
+
+      n = gen_values(s, tree, val, 0);
+      if (n >= 0) {
+        if (val) {
+          pop_n(n);
+          genop_2(s, OP_ARRAY, cursp(), n);
+          push();
+        }
+      }
+      else if (val) {
+        push();
+      }
+    }
+    break;
+
+  case NODE_HASH:
+  case NODE_KW_HASH:
+    {
+      int len = 0;
+      mrb_bool update = FALSE;
+
+      while (tree) {
+        if (nint(tree->car->car->car) == NODE_KW_REST_ARGS) {
+          if (len > 0) {
+            pop_n(len*2);
+            if (!update) {
+              genop_2(s, OP_HASH, cursp(), len);
+            }
+            else {
+              pop();
+              genop_2(s, OP_HASHADD, cursp(), len);
+            }
+            push();
+          }
+          codegen(s, tree->car->cdr, VAL);
+          if (len > 0 || update) {
+            pop(); pop();
+            genop_1(s, OP_HASHCAT, cursp());
+            push();
+          }
+          update = TRUE;
+          len = 0;
+        }
+        else {
+          codegen(s, tree->car->car, val);
+          codegen(s, tree->car->cdr, val);
+          len++;
+        }
+        tree = tree->cdr;
+        if (val && len == 255) {
+          pop_n(len*2);
+          if (!update) {
+            genop_2(s, OP_HASH, cursp(), len);
+          }
+          else {
+            pop();
+            genop_2(s, OP_HASHADD, cursp(), len);
+          }
+          push();
+          update = TRUE;
+          len = 0;
+        }
+      }
+      if (val) {
+        pop_n(len*2);
+        if (!update) {
+          genop_2(s, OP_HASH, cursp(), len);
+        }
+        else {
+          pop();
+          if (len > 0) {
+            genop_2(s, OP_HASHADD, cursp(), len);
+          }
+        }
+        push();
+      }
+    }
+    break;
+
+  case NODE_SPLAT:
+    codegen(s, tree, val);
+    break;
+
+  case NODE_ASGN:
+    codegen(s, tree->cdr, VAL);
+    pop();
+    gen_assignment(s, tree->car, cursp(), val);
+    break;
+
+  case NODE_MASGN:
+    {
+      int len = 0, n = 0, post = 0;
+      node *t = tree->cdr, *p;
+      int rhs = cursp();
+
+      if (nint(t->car) == NODE_ARRAY && t->cdr && nosplat(t->cdr)) {
+        /* fixed rhs */
+        t = t->cdr;
+        while (t) {
+          codegen(s, t->car, VAL);
+          len++;
+          t = t->cdr;
+        }
+        tree = tree->car;
+        if (tree->car) {                /* pre */
+          t = tree->car;
+          n = 0;
+          while (t) {
+            if (n < len) {
+              gen_assignment(s, t->car, rhs+n, NOVAL);
+              n++;
+            }
+            else {
+              genop_1(s, OP_LOADNIL, rhs+n);
+              gen_assignment(s, t->car, rhs+n, NOVAL);
+            }
+            t = t->cdr;
+          }
+        }
+        t = tree->cdr;
+        if (t) {
+          if (t->cdr) {         /* post count */
+            p = t->cdr->car;
+            while (p) {
+              post++;
+              p = p->cdr;
+            }
+          }
+          if (t->car) {         /* rest (len - pre - post) */
+            int rn;
+
+            if (len < post + n) {
+              rn = 0;
+            }
+            else {
+              rn = len - post - n;
+            }
+            genop_3(s, OP_ARRAY2, cursp(), rhs+n, rn);
+            gen_assignment(s, t->car, cursp(), NOVAL);
+            n += rn;
+          }
+          if (t->cdr && t->cdr->car) {
+            t = t->cdr->car;
+            while (n<len) {
+              gen_assignment(s, t->car, rhs+n, NOVAL);
+              t = t->cdr;
+              n++;
+            }
+          }
+        }
+        pop_n(len);
+        if (val) {
+          genop_2(s, OP_ARRAY, rhs, len);
+          push();
+        }
+      }
+      else {
+        /* variable rhs */
+        codegen(s, t, VAL);
+        gen_vmassignment(s, tree->car, rhs, val);
+        if (!val) {
+          pop();
+        }
+      }
+    }
+    break;
+
+  case NODE_OP_ASGN:
+    {
+      mrb_sym sym = nsym(tree->cdr->car);
+      mrb_int len;
+      const char *name = mrb_sym_name_len(s->mrb, sym, &len);
+      int idx, callargs = -1, vsp = -1;
+
+      if ((len == 2 && name[0] == '|' && name[1] == '|') &&
+          (nint(tree->car->car) == NODE_CONST ||
+           nint(tree->car->car) == NODE_CVAR)) {
+        int onerr, noexc, exc;
+        struct loopinfo *lp;
+
+        onerr = genjmp(s, OP_ONERR, 0);
+        lp = loop_push(s, LOOP_BEGIN);
+        lp->pc1 = onerr;
+        exc = cursp();
+        codegen(s, tree->car, VAL);
+        lp->type = LOOP_RESCUE;
+        genop_1(s, OP_POPERR, 1);
+        noexc = genjmp(s, OP_JMP, 0);
+        dispatch(s, onerr);
+        genop_1(s, OP_EXCEPT, exc);
+        genop_1(s, OP_LOADF, exc);
+        dispatch(s, noexc);
+        loop_pop(s, NOVAL);
+      }
+      else if (nint(tree->car->car) == NODE_CALL) {
+        node *n = tree->car->cdr;
+        int base, i, nargs = 0;
+        callargs = 0;
+
+        if (val) {
+          vsp = cursp();
+          push();
+        }
+        codegen(s, n->car, VAL);   /* receiver */
+        idx = new_sym(s, nsym(n->cdr->car));
+        base = cursp()-1;
+        if (n->cdr->cdr->car) {
+          nargs = gen_values(s, n->cdr->cdr->car->car, VAL, 1);
+          if (nargs >= 0) {
+            callargs = nargs;
+          }
+          else { /* varargs */
+            push();
+            nargs = 1;
+            callargs = CALL_MAXARGS;
+          }
+        }
+        /* copy receiver and arguments */
+        gen_move(s, cursp(), base, 1);
+        for (i=0; i<nargs; i++) {
+          gen_move(s, cursp()+i+1, base+i+1, 1);
+        }
+        push_n(nargs+2);pop_n(nargs+2); /* space for receiver, arguments and a block */
+        genop_3(s, OP_SEND, cursp(), idx, callargs);
+        push();
+      }
+      else {
+        codegen(s, tree->car, VAL);
+      }
+      if (len == 2 &&
+          ((name[0] == '|' && name[1] == '|') ||
+           (name[0] == '&' && name[1] == '&'))) {
+        int pos;
+
+        pop();
+        if (val) {
+          if (vsp >= 0) {
+            gen_move(s, vsp, cursp(), 1);
+          }
+          pos = genjmp2(s, name[0]=='|'?OP_JMPIF:OP_JMPNOT, cursp(), 0, val);
+        }
+        else {
+          pos = genjmp2(s, name[0]=='|'?OP_JMPIF:OP_JMPNOT, cursp(), 0, val);
+        }
+        codegen(s, tree->cdr->cdr->car, VAL);
+        pop();
+        if (val && vsp >= 0) {
+          gen_move(s, vsp, cursp(), 1);
+        }
+        if (nint(tree->car->car) == NODE_CALL) {
+          if (callargs == CALL_MAXARGS) {
+            pop();
+            genop_1(s, OP_ARYPUSH, cursp());
+          }
+          else {
+            pop_n(callargs);
+            callargs++;
+          }
+          pop();
+          idx = new_sym(s, attrsym(s, nsym(tree->car->cdr->cdr->car)));
+          genop_3(s, OP_SEND, cursp(), idx, callargs);
+        }
+        else {
+          gen_assignment(s, tree->car, cursp(), val);
+        }
+        dispatch(s, pos);
+        goto exit;
+      }
+      codegen(s, tree->cdr->cdr->car, VAL);
+      push(); pop();
+      pop(); pop();
+
+      if (len == 1 && name[0] == '+')  {
+        gen_addsub(s, OP_ADD, cursp());
+      }
+      else if (len == 1 && name[0] == '-')  {
+        gen_addsub(s, OP_SUB, cursp());
+      }
+      else if (len == 1 && name[0] == '*')  {
+        genop_1(s, OP_MUL, cursp());
+      }
+      else if (len == 1 && name[0] == '/')  {
+        genop_1(s, OP_DIV, cursp());
+      }
+      else if (len == 1 && name[0] == '<')  {
+        genop_1(s, OP_LT, cursp());
+      }
+      else if (len == 2 && name[0] == '<' && name[1] == '=')  {
+        genop_1(s, OP_LE, cursp());
+      }
+      else if (len == 1 && name[0] == '>')  {
+        genop_1(s, OP_GT, cursp());
+      }
+      else if (len == 2 && name[0] == '>' && name[1] == '=')  {
+        genop_1(s, OP_GE, cursp());
+      }
+      else {
+        idx = new_sym(s, sym);
+        genop_3(s, OP_SEND, cursp(), idx, 1);
+      }
+      if (callargs < 0) {
+        gen_assignment(s, tree->car, cursp(), val);
+      }
+      else {
+        if (val && vsp >= 0) {
+          gen_move(s, vsp, cursp(), 0);
+        }
+        if (callargs == CALL_MAXARGS) {
+          pop();
+          genop_1(s, OP_ARYPUSH, cursp());
+        }
+        else {
+          pop_n(callargs);
+          callargs++;
+        }
+        pop();
+        idx = new_sym(s, attrsym(s,nsym(tree->car->cdr->cdr->car)));
+        genop_3(s, OP_SEND, cursp(), idx, callargs);
+      }
+    }
+    break;
+
+  case NODE_SUPER:
+    {
+      codegen_scope *s2 = s;
+      int lv = 0;
+      int n = 0, noop = 0, sendv = 0;
+
+      push();        /* room for receiver */
+      while (!s2->mscope) {
+        lv++;
+        s2 = s2->prev;
+        if (!s2) break;
+      }
+      genop_2S(s, OP_ARGARY, cursp(), (lv & 0xf));
+      push(); push();         /* ARGARY pushes two values */
+      pop(); pop();
+      if (tree) {
+        node *args = tree->car;
+        if (args) {
+          n = gen_values(s, args, VAL, 0);
+          if (n < 0) {
+            n = noop = sendv = 1;
+            push();
+          }
+        }
+      }
+      if (tree && tree->cdr) {
+        codegen(s, tree->cdr, VAL);
+        pop();
+      }
+      else {
+        genop_1(s, OP_LOADNIL, cursp());
+        push(); pop();
+      }
+      pop_n(n+1);
+      if (sendv) n = CALL_MAXARGS;
+      genop_2(s, OP_SUPER, cursp(), n);
+      if (val) push();
+    }
+    break;
+
+  case NODE_ZSUPER:
+    {
+      codegen_scope *s2 = s;
+      int lv = 0, ainfo = 0;
+
+      push();        /* room for receiver */
+      while (!s2->mscope) {
+        lv++;
+        s2 = s2->prev;
+        if (!s2) break;
+      }
+      if (s2) ainfo = s2->ainfo;
+      genop_2S(s, OP_ARGARY, cursp(), (ainfo<<4)|(lv & 0xf));
+      push(); push(); pop();    /* ARGARY pushes two values */
+      if (tree && tree->cdr) {
+        codegen(s, tree->cdr, VAL);
+        pop();
+      }
+      pop(); pop();
+      genop_2(s, OP_SUPER, cursp(), CALL_MAXARGS);
+      if (val) push();
+    }
+    break;
+
+  case NODE_RETURN:
+    if (tree) {
+      gen_retval(s, tree);
+    }
+    else {
+      genop_1(s, OP_LOADNIL, cursp());
+    }
+    if (s->loop) {
+      gen_return(s, OP_RETURN_BLK, cursp());
+    }
+    else {
+      gen_return(s, OP_RETURN, cursp());
+    }
+    if (val) push();
+    break;
+
+  case NODE_YIELD:
+    {
+      codegen_scope *s2 = s;
+      int lv = 0, ainfo = 0;
+      int n = 0, sendv = 0;
+
+      while (!s2->mscope) {
+        lv++;
+        s2 = s2->prev;
+        if (!s2) break;
+      }
+      if (s2) ainfo = s2->ainfo;
+      push();
+      if (tree) {
+        n = gen_values(s, tree, VAL, 0);
+        if (n < 0) {
+          n = sendv = 1;
+          push();
+        }
+      }
+      push();pop(); /* space for a block */
+      pop_n(n+1);
+      genop_2S(s, OP_BLKPUSH, cursp(), (ainfo<<4)|(lv & 0xf));
+      if (sendv) n = CALL_MAXARGS;
+      genop_3(s, OP_SEND, cursp(), new_sym(s, mrb_intern_lit(s->mrb, "call")), n);
+      if (val) push();
+    }
+    break;
+
+  case NODE_BREAK:
+    loop_break(s, tree);
+    if (val) push();
+    break;
+
+  case NODE_NEXT:
+    if (!s->loop) {
+      raise_error(s, "unexpected next");
+    }
+    else if (s->loop->type == LOOP_NORMAL) {
+      if (s->ensure_level > s->loop->ensure_level) {
+        genop_1(s, OP_EPOP, s->ensure_level - s->loop->ensure_level);
+      }
+      codegen(s, tree, NOVAL);
+      genjmp(s, OP_JMP, s->loop->pc0);
+    }
+    else {
+      if (tree) {
+        codegen(s, tree, VAL);
+        pop();
+      }
+      else {
+        genop_1(s, OP_LOADNIL, cursp());
+      }
+      gen_return(s, OP_RETURN, cursp());
+    }
+    if (val) push();
+    break;
+
+  case NODE_REDO:
+    if (!s->loop || s->loop->type == LOOP_BEGIN || s->loop->type == LOOP_RESCUE) {
+      raise_error(s, "unexpected redo");
+    }
+    else {
+      if (s->ensure_level > s->loop->ensure_level) {
+        genop_1(s, OP_EPOP, s->ensure_level - s->loop->ensure_level);
+      }
+      genjmp(s, OP_JMP, s->loop->pc2);
+    }
+    if (val) push();
+    break;
+
+  case NODE_RETRY:
+    {
+      const char *msg = "unexpected retry";
+
+      if (!s->loop) {
+        raise_error(s, msg);
+      }
+      else {
+        struct loopinfo *lp = s->loop;
+        int n = 0;
+
+        while (lp && lp->type != LOOP_RESCUE) {
+          if (lp->type == LOOP_BEGIN) {
+            n++;
+          }
+          lp = lp->prev;
+        }
+        if (!lp) {
+          raise_error(s, msg);
+        }
+        else {
+          if (n > 0) {
+            genop_1(s, OP_POPERR, n);
+          }
+          if (s->ensure_level > lp->ensure_level) {
+            genop_1(s, OP_EPOP, s->ensure_level - lp->ensure_level);
+          }
+          genjmp(s, OP_JMP, lp->pc0);
+        }
+      }
+      if (val) push();
+    }
+    break;
+
+  case NODE_LVAR:
+    if (val) {
+      int idx = lv_idx(s, nsym(tree));
+
+      if (idx > 0) {
+        gen_move(s, cursp(), idx, val);
+        if (val && on_eval(s)) genop_0(s, OP_NOP);
+      }
+      else {
+        int lv = 0;
+        codegen_scope *up = s->prev;
+
+        while (up) {
+          idx = lv_idx(up, nsym(tree));
+          if (idx > 0) {
+            genop_3(s, OP_GETUPVAR, cursp(), idx, lv);
+            break;
+          }
+          lv++;
+          up = up->prev;
+        }
+      }
+      push();
+    }
+    break;
+
+  case NODE_NVAR:
+    if (val) {
+      int idx = nint(tree);
+
+      gen_move(s, cursp(), idx, val);
+      if (val && on_eval(s)) genop_0(s, OP_NOP);
+
+      push();
+    }
+    break;
+
+  case NODE_GVAR:
+    {
+      int sym = new_sym(s, nsym(tree));
+
+      genop_2(s, OP_GETGV, cursp(), sym);
+      if (val) push();
+    }
+    break;
+
+  case NODE_IVAR:
+    {
+      int sym = new_sym(s, nsym(tree));
+
+      genop_2(s, OP_GETIV, cursp(), sym);
+      if (val) push();
+    }
+    break;
+
+  case NODE_CVAR:
+    {
+      int sym = new_sym(s, nsym(tree));
+
+      genop_2(s, OP_GETCV, cursp(), sym);
+      if (val) push();
+    }
+    break;
+
+  case NODE_CONST:
+    {
+      int sym = new_sym(s, nsym(tree));
+
+      genop_2(s, OP_GETCONST, cursp(), sym);
+      if (val) push();
+    }
+    break;
+
+  case NODE_BACK_REF:
+    if (val) {
+      char buf[] = {'$', nchar(tree)};
+      int sym = new_sym(s, mrb_intern(s->mrb, buf, sizeof(buf)));
+
+      genop_2(s, OP_GETGV, cursp(), sym);
+      push();
+    }
+    break;
+
+  case NODE_NTH_REF:
+    if (val) {
+      mrb_state *mrb = s->mrb;
+      mrb_value str;
+      int sym;
+
+      str = mrb_format(mrb, "$%d", nint(tree));
+      sym = new_sym(s, mrb_intern_str(mrb, str));
+      genop_2(s, OP_GETGV, cursp(), sym);
+      push();
+    }
+    break;
+
+  case NODE_ARG:
+    /* should not happen */
+    break;
+
+  case NODE_BLOCK_ARG:
+    codegen(s, tree, val);
+    break;
+
+  case NODE_INT:
+    if (val) {
+      char *p = (char*)tree->car;
+      int base = nint(tree->cdr->car);
+      mrb_int i;
+      mrb_bool overflow;
+
+      i = readint_mrb_int(s, p, base, FALSE, &overflow);
+#ifndef MRB_WITHOUT_FLOAT
+      if (overflow) {
+        double f = readint_float(s, p, base);
+        int off = new_lit(s, mrb_float_value(s->mrb, f));
+
+        genop_2(s, OP_LOADL, cursp(), off);
+      }
+      else
+#endif
+      {
+        if (i == -1) genop_1(s, OP_LOADI__1, cursp());
+        else if (i < 0) genop_2(s, OP_LOADINEG, cursp(), (uint16_t)-i);
+        else if (i < 8) genop_1(s, OP_LOADI_0 + (uint8_t)i, cursp());
+        else if (i <= 0xffff) genop_2(s, OP_LOADI, cursp(), (uint16_t)i);
+        else {
+          int off = new_lit(s, mrb_fixnum_value(i));
+          genop_2(s, OP_LOADL, cursp(), off);
+        }
+      }
+      push();
+    }
+    break;
+
+#ifndef MRB_WITHOUT_FLOAT
+  case NODE_FLOAT:
+    if (val) {
+      char *p = (char*)tree;
+      mrb_float f = mrb_float_read(p, NULL);
+      int off = new_lit(s, mrb_float_value(s->mrb, f));
+
+      genop_2(s, OP_LOADL, cursp(), off);
+      push();
+    }
+    break;
+#endif
+
+  case NODE_NEGATE:
+    {
+      nt = nint(tree->car);
+      switch (nt) {
+#ifndef MRB_WITHOUT_FLOAT
+      case NODE_FLOAT:
+        if (val) {
+          char *p = (char*)tree->cdr;
+          mrb_float f = mrb_float_read(p, NULL);
+          int off = new_lit(s, mrb_float_value(s->mrb, -f));
+
+          genop_2(s, OP_LOADL, cursp(), off);
+          push();
+        }
+        break;
+#endif
+
+      case NODE_INT:
+        if (val) {
+          char *p = (char*)tree->cdr->car;
+          int base = nint(tree->cdr->cdr->car);
+          mrb_int i;
+          mrb_bool overflow;
+
+          i = readint_mrb_int(s, p, base, TRUE, &overflow);
+#ifndef MRB_WITHOUT_FLOAT
+          if (overflow) {
+            double f = readint_float(s, p, base);
+            int off = new_lit(s, mrb_float_value(s->mrb, -f));
+
+            genop_2(s, OP_LOADL, cursp(), off);
+          }
+          else {
+#endif
+            if (i == -1) genop_1(s, OP_LOADI__1, cursp());
+            else if (i >= -0xffff) {
+              genop_2(s, OP_LOADINEG, cursp(), (uint16_t)-i);
+            }
+            else {
+              int off = new_lit(s, mrb_fixnum_value(i));
+              genop_2(s, OP_LOADL, cursp(), off);
+            }
+#ifndef MRB_WITHOUT_FLOAT
+          }
+#endif
+          push();
+        }
+        break;
+
+      default:
+        if (val) {
+          int sym = new_sym(s, mrb_intern_lit(s->mrb, "-@"));
+          codegen(s, tree, VAL);
+          pop();
+          genop_3(s, OP_SEND, cursp(), sym, 0);
+          push();
+        }
+        else {
+          codegen(s, tree, NOVAL);
+        }
+        break;
+      }
+    }
+    break;
+
+  case NODE_STR:
+    if (val) {
+      char *p = (char*)tree->car;
+      size_t len = (intptr_t)tree->cdr;
+      int ai = mrb_gc_arena_save(s->mrb);
+      int off = new_lit(s, mrb_str_new(s->mrb, p, len));
+
+      mrb_gc_arena_restore(s->mrb, ai);
+      genop_2(s, OP_STRING, cursp(), off);
+      push();
+    }
+    break;
+
+  case NODE_HEREDOC:
+    tree = ((struct mrb_parser_heredoc_info *)tree)->doc;
+    /* fall through */
+  case NODE_DSTR:
+    if (val) {
+      node *n = tree;
+
+      if (!n) {
+        genop_1(s, OP_LOADNIL, cursp());
+        push();
+        break;
+      }
+      codegen(s, n->car, VAL);
+      n = n->cdr;
+      while (n) {
+        codegen(s, n->car, VAL);
+        pop(); pop();
+        genop_1(s, OP_STRCAT, cursp());
+        push();
+        n = n->cdr;
+      }
+    }
+    else {
+      node *n = tree;
+
+      while (n) {
+        if (nint(n->car->car) != NODE_STR) {
+          codegen(s, n->car, NOVAL);
+        }
+        n = n->cdr;
+      }
+    }
+    break;
+
+  case NODE_WORDS:
+    gen_literal_array(s, tree, FALSE, val);
+    break;
+
+  case NODE_SYMBOLS:
+    gen_literal_array(s, tree, TRUE, val);
+    break;
+
+  case NODE_DXSTR:
+    {
+      node *n;
+      int ai = mrb_gc_arena_save(s->mrb);
+      int sym = new_sym(s, mrb_intern_lit(s->mrb, "Kernel"));
+
+      genop_1(s, OP_LOADSELF, cursp());
+      push();
+      codegen(s, tree->car, VAL);
+      n = tree->cdr;
+      while (n) {
+        if (nint(n->car->car) == NODE_XSTR) {
+          n->car->car = (struct mrb_ast_node*)(intptr_t)NODE_STR;
+          mrb_assert(!n->cdr); /* must be the end */
+        }
+        codegen(s, n->car, VAL);
+        pop(); pop();
+        genop_1(s, OP_STRCAT, cursp());
+        push();
+        n = n->cdr;
+      }
+      push();                   /* for block */
+      pop_n(3);
+      sym = new_sym(s, mrb_intern_lit(s->mrb, "`"));
+      genop_3(s, OP_SEND, cursp(), sym, 1);
+      if (val) push();
+      mrb_gc_arena_restore(s->mrb, ai);
+    }
+    break;
+
+  case NODE_XSTR:
+    {
+      char *p = (char*)tree->car;
+      size_t len = (intptr_t)tree->cdr;
+      int ai = mrb_gc_arena_save(s->mrb);
+      int off = new_lit(s, mrb_str_new(s->mrb, p, len));
+      int sym;
+
+      genop_1(s, OP_LOADSELF, cursp());
+      push();
+      genop_2(s, OP_STRING, cursp(), off);
+      push(); push();
+      pop_n(3);
+      sym = new_sym(s, mrb_intern_lit(s->mrb, "`"));
+      genop_3(s, OP_SEND, cursp(), sym, 1);
+      if (val) push();
+      mrb_gc_arena_restore(s->mrb, ai);
+    }
+    break;
+
+  case NODE_REGX:
+    if (val) {
+      char *p1 = (char*)tree->car;
+      char *p2 = (char*)tree->cdr->car;
+      char *p3 = (char*)tree->cdr->cdr;
+      int ai = mrb_gc_arena_save(s->mrb);
+      int sym = new_sym(s, mrb_intern_lit(s->mrb, REGEXP_CLASS));
+      int off = new_lit(s, mrb_str_new_cstr(s->mrb, p1));
+      int argc = 1;
+
+      genop_1(s, OP_OCLASS, cursp());
+      genop_2(s, OP_GETMCNST, cursp(), sym);
+      push();
+      genop_2(s, OP_STRING, cursp(), off);
+      push();
+      if (p2 || p3) {
+        if (p2) { /* opt */
+          off = new_lit(s, mrb_str_new_cstr(s->mrb, p2));
+          genop_2(s, OP_STRING, cursp(), off);
+        }
+        else {
+          genop_1(s, OP_LOADNIL, cursp());
+        }
+        push();
+        argc++;
+        if (p3) { /* enc */
+          off = new_lit(s, mrb_str_new(s->mrb, p3, 1));
+          genop_2(s, OP_STRING, cursp(), off);
+          push();
+          argc++;
+        }
+      }
+      push(); /* space for a block */
+      pop_n(argc+2);
+      sym = new_sym(s, mrb_intern_lit(s->mrb, "compile"));
+      genop_3(s, OP_SEND, cursp(), sym, argc);
+      mrb_gc_arena_restore(s->mrb, ai);
+      push();
+    }
+    break;
+
+  case NODE_DREGX:
+    if (val) {
+      node *n = tree->car;
+      int ai = mrb_gc_arena_save(s->mrb);
+      int sym = new_sym(s, mrb_intern_lit(s->mrb, REGEXP_CLASS));
+      int argc = 1;
+      int off;
+      char *p;
+
+      genop_1(s, OP_OCLASS, cursp());
+      genop_2(s, OP_GETMCNST, cursp(), sym);
+      push();
+      codegen(s, n->car, VAL);
+      n = n->cdr;
+      while (n) {
+        codegen(s, n->car, VAL);
+        pop(); pop();
+        genop_1(s, OP_STRCAT, cursp());
+        push();
+        n = n->cdr;
+      }
+      n = tree->cdr->cdr;
+      if (n->car) { /* tail */
+        p = (char*)n->car;
+        off = new_lit(s, mrb_str_new_cstr(s->mrb, p));
+        codegen(s, tree->car, VAL);
+        genop_2(s, OP_STRING, cursp(), off);
+        pop();
+        genop_1(s, OP_STRCAT, cursp());
+        push();
+      }
+      if (n->cdr->car) { /* opt */
+        char *p2 = (char*)n->cdr->car;
+        off = new_lit(s, mrb_str_new_cstr(s->mrb, p2));
+        genop_2(s, OP_STRING, cursp(), off);
+        push();
+        argc++;
+      }
+      if (n->cdr->cdr) { /* enc */
+        char *p2 = (char*)n->cdr->cdr;
+        off = new_lit(s, mrb_str_new_cstr(s->mrb, p2));
+        genop_2(s, OP_STRING, cursp(), off);
+        push();
+        argc++;
+      }
+      push(); /* space for a block */
+      pop_n(argc+2);
+      sym = new_sym(s, mrb_intern_lit(s->mrb, "compile"));
+      genop_3(s, OP_SEND, cursp(), sym, argc);
+      mrb_gc_arena_restore(s->mrb, ai);
+      push();
+    }
+    else {
+      node *n = tree->car;
+
+      while (n) {
+        if (nint(n->car->car) != NODE_STR) {
+          codegen(s, n->car, NOVAL);
+        }
+        n = n->cdr;
+      }
+    }
+    break;
+
+  case NODE_SYM:
+    if (val) {
+      int sym = new_sym(s, nsym(tree));
+
+      genop_2(s, OP_LOADSYM, cursp(), sym);
+      push();
+    }
+    break;
+
+  case NODE_DSYM:
+    codegen(s, tree, val);
+    if (val) {
+      gen_intern(s);
+    }
+    break;
+
+  case NODE_SELF:
+    if (val) {
+      genop_1(s, OP_LOADSELF, cursp());
+      push();
+    }
+    break;
+
+  case NODE_NIL:
+    if (val) {
+      genop_1(s, OP_LOADNIL, cursp());
+      push();
+    }
+    break;
+
+  case NODE_TRUE:
+    if (val) {
+      genop_1(s, OP_LOADT, cursp());
+      push();
+    }
+    break;
+
+  case NODE_FALSE:
+    if (val) {
+      genop_1(s, OP_LOADF, cursp());
+      push();
+    }
+    break;
+
+  case NODE_ALIAS:
+    {
+      int a = new_sym(s, nsym(tree->car));
+      int b = new_sym(s, nsym(tree->cdr));
+
+      genop_2(s, OP_ALIAS, a, b);
+      if (val) {
+        genop_1(s, OP_LOADNIL, cursp());
+        push();
+      }
+    }
+   break;
+
+  case NODE_UNDEF:
+    {
+      node *t = tree;
+
+      while (t) {
+        int symbol = new_sym(s, nsym(t->car));
+        genop_1(s, OP_UNDEF, symbol);
+        t = t->cdr;
+      }
+      if (val) {
+        genop_1(s, OP_LOADNIL, cursp());
+        push();
+      }
+    }
+    break;
+
+  case NODE_CLASS:
+    {
+      int idx;
+      node *body;
+
+      if (tree->car->car == (node*)0) {
+        genop_1(s, OP_LOADNIL, cursp());
+        push();
+      }
+      else if (tree->car->car == (node*)1) {
+        genop_1(s, OP_OCLASS, cursp());
+        push();
+      }
+      else {
+        codegen(s, tree->car->car, VAL);
+      }
+      if (tree->cdr->car) {
+        codegen(s, tree->cdr->car, VAL);
+      }
+      else {
+        genop_1(s, OP_LOADNIL, cursp());
+        push();
+      }
+      pop(); pop();
+      idx = new_sym(s, nsym(tree->car->cdr));
+      genop_2(s, OP_CLASS, cursp(), idx);
+      body = tree->cdr->cdr->car;
+      if (nint(body->cdr->car) == NODE_BEGIN && body->cdr->cdr == NULL) {
+        genop_1(s, OP_LOADNIL, cursp());
+      }
+      else {
+        idx = scope_body(s, body, val);
+        genop_2(s, OP_EXEC, cursp(), idx);
+      }
+      if (val) {
+        push();
+      }
+    }
+    break;
+
+  case NODE_MODULE:
+    {
+      int idx;
+
+      if (tree->car->car == (node*)0) {
+        genop_1(s, OP_LOADNIL, cursp());
+        push();
+      }
+      else if (tree->car->car == (node*)1) {
+        genop_1(s, OP_OCLASS, cursp());
+        push();
+      }
+      else {
+        codegen(s, tree->car->car, VAL);
+      }
+      pop();
+      idx = new_sym(s, nsym(tree->car->cdr));
+      genop_2(s, OP_MODULE, cursp(), idx);
+      if (nint(tree->cdr->car->cdr->car) == NODE_BEGIN &&
+          tree->cdr->car->cdr->cdr == NULL) {
+        genop_1(s, OP_LOADNIL, cursp());
+      }
+      else {
+        idx = scope_body(s, tree->cdr->car, val);
+        genop_2(s, OP_EXEC, cursp(), idx);
+      }
+      if (val) {
+        push();
+      }
+    }
+    break;
+
+  case NODE_SCLASS:
+    {
+      int idx;
+
+      codegen(s, tree->car, VAL);
+      pop();
+      genop_1(s, OP_SCLASS, cursp());
+      if (nint(tree->cdr->car->cdr->car) == NODE_BEGIN &&
+          tree->cdr->car->cdr->cdr == NULL) {
+        genop_1(s, OP_LOADNIL, cursp());
+      }
+      else {
+        idx = scope_body(s, tree->cdr->car, val);
+        genop_2(s, OP_EXEC, cursp(), idx);
+      }
+      if (val) {
+        push();
+      }
+    }
+    break;
+
+  case NODE_DEF:
+    {
+      int sym = new_sym(s, nsym(tree->car));
+      int idx = lambda_body(s, tree->cdr, 0);
+
+      genop_1(s, OP_TCLASS, cursp());
+      push();
+      genop_2(s, OP_METHOD, cursp(), idx);
+      push(); pop();
+      pop();
+      genop_2(s, OP_DEF, cursp(), sym);
+      if (val) {
+        genop_2(s, OP_LOADSYM, cursp(), sym);
+        push();
+      }
+    }
+    break;
+
+  case NODE_SDEF:
+    {
+      node *recv = tree->car;
+      int sym = new_sym(s, nsym(tree->cdr->car));
+      int idx = lambda_body(s, tree->cdr->cdr, 0);
+
+      codegen(s, recv, VAL);
+      pop();
+      genop_1(s, OP_SCLASS, cursp());
+      push();
+      genop_2(s, OP_METHOD, cursp(), idx);
+      pop();
+      genop_2(s, OP_DEF, cursp(), sym);
+      if (val) {
+        genop_2(s, OP_LOADSYM, cursp(), sym);
+        push();
+      }
+    }
+    break;
+
+  case NODE_POSTEXE:
+    codegen(s, tree, NOVAL);
+    break;
+
+  default:
+    break;
+  }
+ exit:
+  s->rlev = rlev;
+}
+
+static void
+scope_add_irep(codegen_scope *s, mrb_irep *irep)
+{
+  if (s->irep == NULL) {
+    s->irep = irep;
+    return;
+  }
+  if (s->irep->rlen == s->rcapa) {
+    s->rcapa *= 2;
+    s->irep->reps = (mrb_irep**)codegen_realloc(s, s->irep->reps, sizeof(mrb_irep*)*s->rcapa);
+  }
+  s->irep->reps[s->irep->rlen] = irep;
+  s->irep->rlen++;
+}
+
+static codegen_scope*
+scope_new(mrb_state *mrb, codegen_scope *prev, node *lv)
+{
+  static const codegen_scope codegen_scope_zero = { 0 };
+  mrb_pool *pool = mrb_pool_open(mrb);
+  codegen_scope *p = (codegen_scope *)mrb_pool_alloc(pool, sizeof(codegen_scope));
+
+  if (!p) {
+    if (prev)
+      codegen_error(prev, "unexpected scope");
+    return NULL;
+  }
+  *p = codegen_scope_zero;
+  p->mrb = mrb;
+  p->mpool = pool;
+  if (!prev) return p;
+  p->prev = prev;
+  p->ainfo = -1;
+  p->mscope = 0;
+
+  p->irep = mrb_add_irep(mrb);
+  scope_add_irep(prev, p->irep);
+
+  p->rcapa = 8;
+  p->irep->reps = (mrb_irep**)mrb_malloc(mrb, sizeof(mrb_irep*)*p->rcapa);
+
+  p->icapa = 1024;
+  p->iseq = (mrb_code*)mrb_malloc(mrb, sizeof(mrb_code)*p->icapa);
+  p->irep->iseq = NULL;
+
+  p->pcapa = 32;
+  p->irep->pool = (mrb_value*)mrb_malloc(mrb, sizeof(mrb_value)*p->pcapa);
+  p->irep->plen = 0;
+
+  p->scapa = 256;
+  p->irep->syms = (mrb_sym*)mrb_malloc(mrb, sizeof(mrb_sym)*p->scapa);
+  p->irep->slen = 0;
+
+  p->lv = lv;
+  p->sp += node_len(lv)+1;        /* add self */
+  p->nlocals = p->sp;
+  if (lv) {
+    node *n = lv;
+    size_t i = 0;
+
+    p->irep->lv = (struct mrb_locals*)mrb_malloc(mrb, sizeof(struct mrb_locals) * (p->nlocals - 1));
+    for (i=0, n=lv; n; i++,n=n->cdr) {
+      p->irep->lv[i].name = lv_name(n);
+      if (lv_name(n)) {
+        p->irep->lv[i].r = lv_idx(p, lv_name(n));
+      }
+      else {
+        p->irep->lv[i].r = 0;
+      }
+    }
+    mrb_assert(i + 1 == p->nlocals);
+  }
+  p->ai = mrb_gc_arena_save(mrb);
+
+  p->filename_sym = prev->filename_sym;
+  if (p->filename_sym) {
+    p->lines = (uint16_t*)mrb_malloc(mrb, sizeof(short)*p->icapa);
+  }
+  p->lineno = prev->lineno;
+
+  /* debug setting */
+  p->debug_start_pos = 0;
+  if (p->filename_sym) {
+    mrb_debug_info_alloc(mrb, p->irep);
+  }
+  else {
+    p->irep->debug_info = NULL;
+  }
+  p->parser = prev->parser;
+  p->filename_index = prev->filename_index;
+
+  p->rlev = prev->rlev+1;
+
+  return p;
+}
+
+static void
+scope_finish(codegen_scope *s)
+{
+  mrb_state *mrb = s->mrb;
+  mrb_irep *irep = s->irep;
+
+  if (s->nlocals >= 0x3ff) {
+    codegen_error(s, "too many local variables");
+  }
+  irep->flags = 0;
+  if (s->iseq) {
+    irep->iseq = (mrb_code *)codegen_realloc(s, s->iseq, sizeof(mrb_code)*s->pc);
+    irep->ilen = s->pc;
+  }
+  irep->pool = (mrb_value*)codegen_realloc(s, irep->pool, sizeof(mrb_value)*irep->plen);
+  irep->syms = (mrb_sym*)codegen_realloc(s, irep->syms, sizeof(mrb_sym)*irep->slen);
+  irep->reps = (mrb_irep**)codegen_realloc(s, irep->reps, sizeof(mrb_irep*)*irep->rlen);
+  if (s->filename_sym) {
+    mrb_sym fname = mrb_parser_get_filename(s->parser, s->filename_index);
+    const char *filename = mrb_sym_name_len(s->mrb, fname, NULL);
+
+    mrb_debug_info_append_file(s->mrb, s->irep->debug_info,
+                               filename, s->lines, s->debug_start_pos, s->pc);
+  }
+  mrb_free(s->mrb, s->lines);
+
+  irep->nlocals = s->nlocals;
+  irep->nregs = s->nregs;
+
+  mrb_gc_arena_restore(mrb, s->ai);
+  mrb_pool_close(s->mpool);
+}
+
+static struct loopinfo*
+loop_push(codegen_scope *s, enum looptype t)
+{
+  struct loopinfo *p = (struct loopinfo *)codegen_palloc(s, sizeof(struct loopinfo));
+
+  p->type = t;
+  p->pc0 = p->pc1 = p->pc2 = p->pc3 = 0;
+  p->prev = s->loop;
+  p->ensure_level = s->ensure_level;
+  p->acc = cursp();
+  s->loop = p;
+
+  return p;
+}
+
+static void
+loop_break(codegen_scope *s, node *tree)
+{
+  if (!s->loop) {
+    codegen(s, tree, NOVAL);
+    raise_error(s, "unexpected break");
+  }
+  else {
+    struct loopinfo *loop;
+    int n = 0;
+
+    if (tree) {
+      gen_retval(s, tree);
+    }
+
+    loop = s->loop;
+    while (loop) {
+      if (loop->type == LOOP_BEGIN) {
+        n++;
+        loop = loop->prev;
+      }
+      else if (loop->type == LOOP_RESCUE) {
+        loop = loop->prev;
+      }
+      else{
+        break;
+      }
+    }
+    if (!loop) {
+      raise_error(s, "unexpected break");
+      return;
+    }
+    if (n > 0) {
+      genop_1(s, OP_POPERR, n);
+    }
+
+    if (loop->type == LOOP_NORMAL) {
+      int tmp;
+
+      if (s->ensure_level > s->loop->ensure_level) {
+        genop_1(s, OP_EPOP, s->ensure_level - s->loop->ensure_level);
+      }
+      if (tree) {
+        gen_move(s, loop->acc, cursp(), 0);
+      }
+      tmp = genjmp(s, OP_JMP, loop->pc3);
+      loop->pc3 = tmp;
+    }
+    else {
+      if (!tree) {
+        genop_1(s, OP_LOADNIL, cursp());
+      }
+      gen_return(s, OP_BREAK, cursp());
+    }
+  }
+}
+
+static void
+loop_pop(codegen_scope *s, int val)
+{
+  if (val) {
+    genop_1(s, OP_LOADNIL, cursp());
+  }
+  dispatch_linked(s, s->loop->pc3);
+  s->loop = s->loop->prev;
+  if (val) push();
+}
+
+static struct RProc*
+generate_code(mrb_state *mrb, parser_state *p, int val)
+{
+  codegen_scope *scope = scope_new(mrb, 0, 0);
+  struct RProc *proc;
+  struct mrb_jmpbuf *prev_jmp = mrb->jmp;
+
+  scope->mrb = mrb;
+  scope->parser = p;
+  scope->filename_sym = p->filename_sym;
+  scope->filename_index = p->current_filename_index;
+
+  MRB_TRY(&scope->jmp) {
+    mrb->jmp = &scope->jmp;
+    /* prepare irep */
+    codegen(scope, p->tree, val);
+    proc = mrb_proc_new(mrb, scope->irep);
+    mrb_irep_decref(mrb, scope->irep);
+    mrb_pool_close(scope->mpool);
+    proc->c = NULL;
+    if (mrb->c->cibase && mrb->c->cibase->proc == proc->upper) {
+      proc->upper = NULL;
+    }
+    mrb->jmp = prev_jmp;
+    return proc;
+  }
+  MRB_CATCH(&scope->jmp) {
+    mrb_irep_decref(mrb, scope->irep);
+    mrb_pool_close(scope->mpool);
+    mrb->jmp = prev_jmp;
+    return NULL;
+  }
+  MRB_END_EXC(&scope->jmp);
+}
+
+MRB_API struct RProc*
+mrb_generate_code(mrb_state *mrb, parser_state *p)
+{
+  return generate_code(mrb, p, VAL);
+}
+
+void
+mrb_irep_remove_lv(mrb_state *mrb, mrb_irep *irep)
+{
+  int i;
+
+  if (irep->lv) {
+    mrb_free(mrb, irep->lv);
+    irep->lv = NULL;
+  }
+
+  for (i = 0; i < irep->rlen; ++i) {
+    mrb_irep_remove_lv(mrb, irep->reps[i]);
+  }
+}
+
+#undef OPCODE
+#define Z 1
+#define S 3
+#define W 4
+/* instruction sizes */
+uint8_t mrb_insn_size[] = {
+#define B 2
+#define BB 3
+#define BBB 4
+#define BS 4
+#define SB 4
+#define OPCODE(_,x) x,
+#include "mruby/ops.h"
+#undef OPCODE
+#undef B
+#undef BB
+#undef BS
+#undef SB
+#undef BBB
+};
+/* EXT1 instruction sizes */
+uint8_t mrb_insn_size1[] = {
+#define B 3
+#define BB 4
+#define BBB 5
+#define BS 5
+#define SB 5
+#define OPCODE(_,x) x,
+#include "mruby/ops.h"
+#undef OPCODE
+#undef B
+};
+/* EXT2 instruction sizes */
+uint8_t mrb_insn_size2[] = {
+#define B 2
+#define OPCODE(_,x) x,
+#include "mruby/ops.h"
+#undef OPCODE
+#undef BB
+#undef BBB
+#undef BS
+#undef SB
+};
+/* EXT3 instruction sizes */
+#define BB 5
+#define BBB 6
+#define BS 4
+#define SB 5
+uint8_t mrb_insn_size3[] = {
+#define OPCODE(_,x) x,
+#include "mruby/ops.h"
+};
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-compiler/core/keywords
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-compiler/core/keywords	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-compiler/core/keywords	(revision 439)
@@ -0,0 +1,47 @@
+%{
+struct kwtable {const char *name; int id[2]; enum mrb_lex_state_enum state;};
+%}
+
+struct kwtable;
+%%
+__ENCODING__, {keyword__ENCODING__, keyword__ENCODING__}, EXPR_END
+__FILE__,     {keyword__FILE__,     keyword__FILE__},     EXPR_END
+__LINE__,     {keyword__LINE__,     keyword__LINE__},     EXPR_END
+BEGIN,        {keyword_BEGIN,       keyword_BEGIN},       EXPR_END
+END,          {keyword_END,         keyword_END},         EXPR_END
+alias,        {keyword_alias,       keyword_alias},       EXPR_FNAME
+and,          {keyword_and,         keyword_and},         EXPR_VALUE
+begin,        {keyword_begin,       keyword_begin},       EXPR_BEG
+break,        {keyword_break,       keyword_break},       EXPR_MID
+case,         {keyword_case,        keyword_case},        EXPR_VALUE
+class,        {keyword_class,       keyword_class},       EXPR_CLASS
+def,          {keyword_def,         keyword_def},         EXPR_FNAME
+do,           {keyword_do,          keyword_do},          EXPR_BEG
+else,         {keyword_else,        keyword_else},        EXPR_BEG
+elsif,        {keyword_elsif,       keyword_elsif},       EXPR_VALUE
+end,          {keyword_end,         keyword_end},         EXPR_END
+ensure,       {keyword_ensure,      keyword_ensure},      EXPR_BEG
+false,        {keyword_false,       keyword_false},       EXPR_END
+for,          {keyword_for,         keyword_for},         EXPR_VALUE
+if,           {keyword_if,          modifier_if},         EXPR_VALUE
+in,           {keyword_in,          keyword_in},          EXPR_VALUE
+module,       {keyword_module,      keyword_module},      EXPR_VALUE
+next,         {keyword_next,        keyword_next},        EXPR_MID
+nil,          {keyword_nil,         keyword_nil},         EXPR_END
+not,          {keyword_not,         keyword_not},         EXPR_ARG
+or,           {keyword_or,          keyword_or},          EXPR_VALUE
+redo,         {keyword_redo,        keyword_redo},        EXPR_END
+rescue,       {keyword_rescue,      modifier_rescue},     EXPR_MID
+retry,        {keyword_retry,       keyword_retry},       EXPR_END
+return,       {keyword_return,      keyword_return},      EXPR_MID
+self,         {keyword_self,        keyword_self},        EXPR_END
+super,        {keyword_super,       keyword_super},       EXPR_ARG
+then,         {keyword_then,        keyword_then},        EXPR_BEG
+true,         {keyword_true,        keyword_true},        EXPR_END
+undef,        {keyword_undef,       keyword_undef},       EXPR_FNAME
+unless,       {keyword_unless,      modifier_unless},     EXPR_VALUE
+until,        {keyword_until,       modifier_until},      EXPR_VALUE
+when,         {keyword_when,        keyword_when},        EXPR_VALUE
+while,        {keyword_while,       modifier_while},      EXPR_VALUE
+yield,        {keyword_yield,       keyword_yield},       EXPR_ARG
+%%
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-compiler/core/lex.def
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-compiler/core/lex.def	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-compiler/core/lex.def	(revision 439)
@@ -0,0 +1,203 @@
+/* ANSI-C code produced by gperf version 3.1 */
+/* Command-line: gperf -L ANSI-C -C -p -j1 -i 1 -g -o -t -N mrb_reserved_word -k'1,3,$' /home/matz/work/mruby/mrbgems/mruby-compiler/core/keywords  */
+
+#if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \
+      && ('%' == 37) && ('&' == 38) && ('\'' == 39) && ('(' == 40) \
+      && (')' == 41) && ('*' == 42) && ('+' == 43) && (',' == 44) \
+      && ('-' == 45) && ('.' == 46) && ('/' == 47) && ('0' == 48) \
+      && ('1' == 49) && ('2' == 50) && ('3' == 51) && ('4' == 52) \
+      && ('5' == 53) && ('6' == 54) && ('7' == 55) && ('8' == 56) \
+      && ('9' == 57) && (':' == 58) && (';' == 59) && ('<' == 60) \
+      && ('=' == 61) && ('>' == 62) && ('?' == 63) && ('A' == 65) \
+      && ('B' == 66) && ('C' == 67) && ('D' == 68) && ('E' == 69) \
+      && ('F' == 70) && ('G' == 71) && ('H' == 72) && ('I' == 73) \
+      && ('J' == 74) && ('K' == 75) && ('L' == 76) && ('M' == 77) \
+      && ('N' == 78) && ('O' == 79) && ('P' == 80) && ('Q' == 81) \
+      && ('R' == 82) && ('S' == 83) && ('T' == 84) && ('U' == 85) \
+      && ('V' == 86) && ('W' == 87) && ('X' == 88) && ('Y' == 89) \
+      && ('Z' == 90) && ('[' == 91) && ('\\' == 92) && (']' == 93) \
+      && ('^' == 94) && ('_' == 95) && ('a' == 97) && ('b' == 98) \
+      && ('c' == 99) && ('d' == 100) && ('e' == 101) && ('f' == 102) \
+      && ('g' == 103) && ('h' == 104) && ('i' == 105) && ('j' == 106) \
+      && ('k' == 107) && ('l' == 108) && ('m' == 109) && ('n' == 110) \
+      && ('o' == 111) && ('p' == 112) && ('q' == 113) && ('r' == 114) \
+      && ('s' == 115) && ('t' == 116) && ('u' == 117) && ('v' == 118) \
+      && ('w' == 119) && ('x' == 120) && ('y' == 121) && ('z' == 122) \
+      && ('{' == 123) && ('|' == 124) && ('}' == 125) && ('~' == 126))
+/* The character set is not based on ISO-646.  */
+#error "gperf generated tables don't work with this execution character set. Please report a bug to <bug-gperf@gnu.org>."
+#endif
+
+#line 1 "/home/matz/work/mruby/mrbgems/mruby-compiler/core/keywords"
+
+struct kwtable {const char *name; int id[2]; enum mrb_lex_state_enum state;};
+#line 5 "/home/matz/work/mruby/mrbgems/mruby-compiler/core/keywords"
+struct kwtable;
+
+#define TOTAL_KEYWORDS 40
+#define MIN_WORD_LENGTH 2
+#define MAX_WORD_LENGTH 12
+#define MIN_HASH_VALUE 8
+#define MAX_HASH_VALUE 50
+/* maximum key range = 43, duplicates = 0 */
+
+#ifdef __GNUC__
+__inline
+#else
+#ifdef __cplusplus
+inline
+#endif
+#endif
+static unsigned int
+hash (register const char *str, register size_t len)
+{
+  static const unsigned char asso_values[] =
+    {
+      51, 51, 51, 51, 51, 51, 51, 51, 51, 51,
+      51, 51, 51, 51, 51, 51, 51, 51, 51, 51,
+      51, 51, 51, 51, 51, 51, 51, 51, 51, 51,
+      51, 51, 51, 51, 51, 51, 51, 51, 51, 51,
+      51, 51, 51, 51, 51, 51, 51, 51, 51, 51,
+      51, 51, 51, 51, 51, 51, 51, 51, 51, 51,
+      51, 51, 51, 51, 51, 51, 14, 51, 16,  8,
+      11, 13, 51, 51, 51, 51, 10, 51, 13, 51,
+      51, 51, 51, 51, 51, 51, 51, 51, 51, 51,
+      51, 51, 51, 51, 51, 11, 51, 13,  1, 26,
+       4,  1,  8, 28, 51, 23, 51,  1,  1, 27,
+       5, 19, 21, 51,  8,  3,  3, 11, 51, 21,
+      24, 16, 51, 51, 51, 51, 51, 51, 51, 51,
+      51, 51, 51, 51, 51, 51, 51, 51, 51, 51,
+      51, 51, 51, 51, 51, 51, 51, 51, 51, 51,
+      51, 51, 51, 51, 51, 51, 51, 51, 51, 51,
+      51, 51, 51, 51, 51, 51, 51, 51, 51, 51,
+      51, 51, 51, 51, 51, 51, 51, 51, 51, 51,
+      51, 51, 51, 51, 51, 51, 51, 51, 51, 51,
+      51, 51, 51, 51, 51, 51, 51, 51, 51, 51,
+      51, 51, 51, 51, 51, 51, 51, 51, 51, 51,
+      51, 51, 51, 51, 51, 51, 51, 51, 51, 51,
+      51, 51, 51, 51, 51, 51, 51, 51, 51, 51,
+      51, 51, 51, 51, 51, 51, 51, 51, 51, 51,
+      51, 51, 51, 51, 51, 51, 51, 51, 51, 51,
+      51, 51, 51, 51, 51, 51
+    };
+  register unsigned int hval = len;
+
+  switch (hval)
+    {
+      default:
+        hval += asso_values[(unsigned char)str[2]];
+      /*FALLTHROUGH*/
+      case 2:
+      case 1:
+        hval += asso_values[(unsigned char)str[0]];
+        break;
+    }
+  return hval + asso_values[(unsigned char)str[len - 1]];
+}
+
+const struct kwtable *
+mrb_reserved_word (register const char *str, register size_t len)
+{
+  static const struct kwtable wordlist[] =
+    {
+      {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+#line 15 "/home/matz/work/mruby/mrbgems/mruby-compiler/core/keywords"
+      {"break",        {keyword_break,       keyword_break},       EXPR_MID},
+#line 20 "/home/matz/work/mruby/mrbgems/mruby-compiler/core/keywords"
+      {"else",         {keyword_else,        keyword_else},        EXPR_BEG},
+#line 30 "/home/matz/work/mruby/mrbgems/mruby-compiler/core/keywords"
+      {"nil",          {keyword_nil,         keyword_nil},         EXPR_END},
+#line 23 "/home/matz/work/mruby/mrbgems/mruby-compiler/core/keywords"
+      {"ensure",       {keyword_ensure,      keyword_ensure},      EXPR_BEG},
+#line 22 "/home/matz/work/mruby/mrbgems/mruby-compiler/core/keywords"
+      {"end",          {keyword_end,         keyword_end},         EXPR_END},
+#line 39 "/home/matz/work/mruby/mrbgems/mruby-compiler/core/keywords"
+      {"then",         {keyword_then,        keyword_then},        EXPR_BEG},
+#line 31 "/home/matz/work/mruby/mrbgems/mruby-compiler/core/keywords"
+      {"not",          {keyword_not,         keyword_not},         EXPR_ARG},
+#line 24 "/home/matz/work/mruby/mrbgems/mruby-compiler/core/keywords"
+      {"false",        {keyword_false,       keyword_false},       EXPR_END},
+#line 37 "/home/matz/work/mruby/mrbgems/mruby-compiler/core/keywords"
+      {"self",         {keyword_self,        keyword_self},        EXPR_END},
+#line 21 "/home/matz/work/mruby/mrbgems/mruby-compiler/core/keywords"
+      {"elsif",        {keyword_elsif,       keyword_elsif},       EXPR_VALUE},
+#line 34 "/home/matz/work/mruby/mrbgems/mruby-compiler/core/keywords"
+      {"rescue",       {keyword_rescue,      modifier_rescue},     EXPR_MID},
+#line 40 "/home/matz/work/mruby/mrbgems/mruby-compiler/core/keywords"
+      {"true",         {keyword_true,        keyword_true},        EXPR_END},
+#line 43 "/home/matz/work/mruby/mrbgems/mruby-compiler/core/keywords"
+      {"until",        {keyword_until,       modifier_until},      EXPR_VALUE},
+#line 42 "/home/matz/work/mruby/mrbgems/mruby-compiler/core/keywords"
+      {"unless",       {keyword_unless,      modifier_unless},     EXPR_VALUE},
+#line 36 "/home/matz/work/mruby/mrbgems/mruby-compiler/core/keywords"
+      {"return",       {keyword_return,      keyword_return},      EXPR_MID},
+#line 18 "/home/matz/work/mruby/mrbgems/mruby-compiler/core/keywords"
+      {"def",          {keyword_def,         keyword_def},         EXPR_FNAME},
+#line 13 "/home/matz/work/mruby/mrbgems/mruby-compiler/core/keywords"
+      {"and",          {keyword_and,         keyword_and},         EXPR_VALUE},
+#line 19 "/home/matz/work/mruby/mrbgems/mruby-compiler/core/keywords"
+      {"do",           {keyword_do,          keyword_do},          EXPR_BEG},
+#line 46 "/home/matz/work/mruby/mrbgems/mruby-compiler/core/keywords"
+      {"yield",        {keyword_yield,       keyword_yield},       EXPR_ARG},
+#line 25 "/home/matz/work/mruby/mrbgems/mruby-compiler/core/keywords"
+      {"for",          {keyword_for,         keyword_for},         EXPR_VALUE},
+#line 41 "/home/matz/work/mruby/mrbgems/mruby-compiler/core/keywords"
+      {"undef",        {keyword_undef,       keyword_undef},       EXPR_FNAME},
+#line 32 "/home/matz/work/mruby/mrbgems/mruby-compiler/core/keywords"
+      {"or",           {keyword_or,          keyword_or},          EXPR_VALUE},
+#line 27 "/home/matz/work/mruby/mrbgems/mruby-compiler/core/keywords"
+      {"in",           {keyword_in,          keyword_in},          EXPR_VALUE},
+#line 44 "/home/matz/work/mruby/mrbgems/mruby-compiler/core/keywords"
+      {"when",         {keyword_when,        keyword_when},        EXPR_VALUE},
+#line 35 "/home/matz/work/mruby/mrbgems/mruby-compiler/core/keywords"
+      {"retry",        {keyword_retry,       keyword_retry},       EXPR_END},
+#line 26 "/home/matz/work/mruby/mrbgems/mruby-compiler/core/keywords"
+      {"if",           {keyword_if,          modifier_if},         EXPR_VALUE},
+#line 16 "/home/matz/work/mruby/mrbgems/mruby-compiler/core/keywords"
+      {"case",         {keyword_case,        keyword_case},        EXPR_VALUE},
+#line 33 "/home/matz/work/mruby/mrbgems/mruby-compiler/core/keywords"
+      {"redo",         {keyword_redo,        keyword_redo},        EXPR_END},
+#line 29 "/home/matz/work/mruby/mrbgems/mruby-compiler/core/keywords"
+      {"next",         {keyword_next,        keyword_next},        EXPR_MID},
+#line 38 "/home/matz/work/mruby/mrbgems/mruby-compiler/core/keywords"
+      {"super",        {keyword_super,       keyword_super},       EXPR_ARG},
+#line 28 "/home/matz/work/mruby/mrbgems/mruby-compiler/core/keywords"
+      {"module",       {keyword_module,      keyword_module},      EXPR_VALUE},
+#line 14 "/home/matz/work/mruby/mrbgems/mruby-compiler/core/keywords"
+      {"begin",        {keyword_begin,       keyword_begin},       EXPR_BEG},
+#line 9 "/home/matz/work/mruby/mrbgems/mruby-compiler/core/keywords"
+      {"__LINE__",     {keyword__LINE__,     keyword__LINE__},     EXPR_END},
+#line 8 "/home/matz/work/mruby/mrbgems/mruby-compiler/core/keywords"
+      {"__FILE__",     {keyword__FILE__,     keyword__FILE__},     EXPR_END},
+#line 7 "/home/matz/work/mruby/mrbgems/mruby-compiler/core/keywords"
+      {"__ENCODING__", {keyword__ENCODING__, keyword__ENCODING__}, EXPR_END},
+#line 11 "/home/matz/work/mruby/mrbgems/mruby-compiler/core/keywords"
+      {"END",          {keyword_END,         keyword_END},         EXPR_END},
+#line 12 "/home/matz/work/mruby/mrbgems/mruby-compiler/core/keywords"
+      {"alias",        {keyword_alias,       keyword_alias},       EXPR_FNAME},
+#line 10 "/home/matz/work/mruby/mrbgems/mruby-compiler/core/keywords"
+      {"BEGIN",        {keyword_BEGIN,       keyword_BEGIN},       EXPR_END},
+      {""},
+#line 17 "/home/matz/work/mruby/mrbgems/mruby-compiler/core/keywords"
+      {"class",        {keyword_class,       keyword_class},       EXPR_CLASS},
+      {""}, {""},
+#line 45 "/home/matz/work/mruby/mrbgems/mruby-compiler/core/keywords"
+      {"while",        {keyword_while,       modifier_while},      EXPR_VALUE}
+    };
+
+  if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)
+    {
+      register unsigned int key = hash (str, len);
+
+      if (key <= MAX_HASH_VALUE)
+        {
+          register const char *s = wordlist[key].name;
+
+          if (*str == *s && !strcmp (str + 1, s + 1))
+            return &wordlist[key];
+        }
+    }
+  return 0;
+}
+#line 47 "/home/matz/work/mruby/mrbgems/mruby-compiler/core/keywords"
+
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-compiler/core/node.h
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-compiler/core/node.h	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-compiler/core/node.h	(revision 439)
@@ -0,0 +1,103 @@
+/*
+** node.h - nodes of abstract syntax tree
+**
+** See Copyright Notice in mruby.h
+*/
+
+#ifndef MRUBY_COMPILER_NODE_H
+#define MRUBY_COMPILER_NODE_H
+
+enum node_type {
+  NODE_METHOD,
+  NODE_SCOPE,
+  NODE_BLOCK,
+  NODE_IF,
+  NODE_CASE,
+  NODE_WHEN,
+  NODE_WHILE,
+  NODE_UNTIL,
+  NODE_ITER,
+  NODE_FOR,
+  NODE_BREAK,
+  NODE_NEXT,
+  NODE_REDO,
+  NODE_RETRY,
+  NODE_BEGIN,
+  NODE_RESCUE,
+  NODE_ENSURE,
+  NODE_AND,
+  NODE_OR,
+  NODE_NOT,
+  NODE_MASGN,
+  NODE_ASGN,
+  NODE_CDECL,
+  NODE_CVASGN,
+  NODE_CVDECL,
+  NODE_OP_ASGN,
+  NODE_CALL,
+  NODE_SCALL,
+  NODE_FCALL,
+  NODE_SUPER,
+  NODE_ZSUPER,
+  NODE_ARRAY,
+  NODE_ZARRAY,
+  NODE_HASH,
+  NODE_KW_HASH,
+  NODE_RETURN,
+  NODE_YIELD,
+  NODE_LVAR,
+  NODE_DVAR,
+  NODE_GVAR,
+  NODE_IVAR,
+  NODE_CONST,
+  NODE_CVAR,
+  NODE_NVAR,
+  NODE_NTH_REF,
+  NODE_BACK_REF,
+  NODE_MATCH,
+  NODE_INT,
+  NODE_FLOAT,
+  NODE_NEGATE,
+  NODE_LAMBDA,
+  NODE_SYM,
+  NODE_STR,
+  NODE_DSTR,
+  NODE_XSTR,
+  NODE_DXSTR,
+  NODE_REGX,
+  NODE_DREGX,
+  NODE_DREGX_ONCE,
+  NODE_ARG,
+  NODE_ARGS_TAIL,
+  NODE_KW_ARG,
+  NODE_KW_REST_ARGS,
+  NODE_SPLAT,
+  NODE_TO_ARY,
+  NODE_SVALUE,
+  NODE_BLOCK_ARG,
+  NODE_DEF,
+  NODE_SDEF,
+  NODE_ALIAS,
+  NODE_UNDEF,
+  NODE_CLASS,
+  NODE_MODULE,
+  NODE_SCLASS,
+  NODE_COLON2,
+  NODE_COLON3,
+  NODE_DOT2,
+  NODE_DOT3,
+  NODE_SELF,
+  NODE_NIL,
+  NODE_TRUE,
+  NODE_FALSE,
+  NODE_DEFINED,
+  NODE_POSTEXE,
+  NODE_DSYM,
+  NODE_HEREDOC,
+  NODE_LITERAL_DELIM,
+  NODE_WORDS,
+  NODE_SYMBOLS,
+  NODE_LAST
+};
+
+#endif  /* MRUBY_COMPILER_NODE_H */
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-compiler/core/parse.y
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-compiler/core/parse.y	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-compiler/core/parse.y	(revision 439)
@@ -0,0 +1,7291 @@
+/*
+** parse.y - mruby parser
+**
+** See Copyright Notice in mruby.h
+*/
+
+%{
+#undef PARSER_DEBUG
+#ifdef PARSER_DEBUG
+# define YYDEBUG 1
+#endif
+#define YYERROR_VERBOSE 1
+#define YYSTACK_USE_ALLOCA 1
+
+#include <ctype.h>
+#include <errno.h>
+#include <stdlib.h>
+#include <string.h>
+#include <mruby.h>
+#include <mruby/compile.h>
+#include <mruby/proc.h>
+#include <mruby/error.h>
+#include <mruby/throw.h>
+#include <mruby/string.h>
+#include "node.h"
+
+#define YYLEX_PARAM p
+
+typedef mrb_ast_node node;
+typedef struct mrb_parser_state parser_state;
+typedef struct mrb_parser_heredoc_info parser_heredoc_info;
+
+static int yyparse(parser_state *p);
+static int yylex(void *lval, parser_state *p);
+static void yyerror(parser_state *p, const char *s);
+static void yywarn(parser_state *p, const char *s);
+static void yywarning(parser_state *p, const char *s);
+static void backref_error(parser_state *p, node *n);
+static void void_expr_error(parser_state *p, node *n);
+static void tokadd(parser_state *p, int32_t c);
+
+#define identchar(c) (ISALNUM(c) || (c) == '_' || !ISASCII(c))
+
+typedef unsigned int stack_type;
+
+#define BITSTACK_PUSH(stack, n) ((stack) = ((stack)<<1)|((n)&1))
+#define BITSTACK_POP(stack)     ((stack) = (stack) >> 1)
+#define BITSTACK_LEXPOP(stack)  ((stack) = ((stack) >> 1) | ((stack) & 1))
+#define BITSTACK_SET_P(stack)   ((stack)&1)
+
+#define COND_PUSH(n)    BITSTACK_PUSH(p->cond_stack, (n))
+#define COND_POP()      BITSTACK_POP(p->cond_stack)
+#define COND_LEXPOP()   BITSTACK_LEXPOP(p->cond_stack)
+#define COND_P()        BITSTACK_SET_P(p->cond_stack)
+
+#define CMDARG_PUSH(n)  BITSTACK_PUSH(p->cmdarg_stack, (n))
+#define CMDARG_POP()    BITSTACK_POP(p->cmdarg_stack)
+#define CMDARG_LEXPOP() BITSTACK_LEXPOP(p->cmdarg_stack)
+#define CMDARG_P()      BITSTACK_SET_P(p->cmdarg_stack)
+
+#define SET_LINENO(c,n) ((c)->lineno = (n))
+#define NODE_LINENO(c,n) do {\
+  if (n) {\
+     (c)->filename_index = (n)->filename_index;\
+     (c)->lineno = (n)->lineno;\
+  }\
+} while (0)
+
+#define sym(x) ((mrb_sym)(intptr_t)(x))
+#define nsym(x) ((node*)(intptr_t)(x))
+#define nint(x) ((node*)(intptr_t)(x))
+#define intn(x) ((int)(intptr_t)(x))
+
+#define NUM_SUFFIX_R   (1<<0)
+#define NUM_SUFFIX_I   (1<<1)
+
+static inline mrb_sym
+intern_cstr_gen(parser_state *p, const char *s)
+{
+  return mrb_intern_cstr(p->mrb, s);
+}
+#define intern_cstr(s) intern_cstr_gen(p,(s))
+
+static inline mrb_sym
+intern_gen(parser_state *p, const char *s, size_t len)
+{
+  return mrb_intern(p->mrb, s, len);
+}
+#define intern(s,len) intern_gen(p,(s),(len))
+
+#define intern_lit(s) mrb_intern_lit(p->mrb, s)
+
+static void
+cons_free_gen(parser_state *p, node *cons)
+{
+  cons->cdr = p->cells;
+  p->cells = cons;
+}
+#define cons_free(c) cons_free_gen(p, (c))
+
+static void*
+parser_palloc(parser_state *p, size_t size)
+{
+  void *m = mrb_pool_alloc(p->pool, size);
+
+  if (!m) {
+    MRB_THROW(p->jmp);
+  }
+  return m;
+}
+
+static node*
+cons_gen(parser_state *p, node *car, node *cdr)
+{
+  node *c;
+
+  if (p->cells) {
+    c = p->cells;
+    p->cells = p->cells->cdr;
+  }
+  else {
+    c = (node *)parser_palloc(p, sizeof(mrb_ast_node));
+  }
+
+  c->car = car;
+  c->cdr = cdr;
+  c->lineno = p->lineno;
+  c->filename_index = p->current_filename_index;
+  /* beginning of next partial file; need to point the previous file */
+  if (p->lineno == 0 && p->current_filename_index > 0) {
+    c->filename_index-- ;
+  }
+  return c;
+}
+#define cons(a,b) cons_gen(p,(a),(b))
+
+static node*
+list1_gen(parser_state *p, node *a)
+{
+  return cons(a, 0);
+}
+#define list1(a) list1_gen(p, (a))
+
+static node*
+list2_gen(parser_state *p, node *a, node *b)
+{
+  return cons(a, cons(b,0));
+}
+#define list2(a,b) list2_gen(p, (a),(b))
+
+static node*
+list3_gen(parser_state *p, node *a, node *b, node *c)
+{
+  return cons(a, cons(b, cons(c,0)));
+}
+#define list3(a,b,c) list3_gen(p, (a),(b),(c))
+
+static node*
+list4_gen(parser_state *p, node *a, node *b, node *c, node *d)
+{
+  return cons(a, cons(b, cons(c, cons(d, 0))));
+}
+#define list4(a,b,c,d) list4_gen(p, (a),(b),(c),(d))
+
+static node*
+list5_gen(parser_state *p, node *a, node *b, node *c, node *d, node *e)
+{
+  return cons(a, cons(b, cons(c, cons(d, cons(e, 0)))));
+}
+#define list5(a,b,c,d,e) list5_gen(p, (a),(b),(c),(d),(e))
+
+static node*
+list6_gen(parser_state *p, node *a, node *b, node *c, node *d, node *e, node *f)
+{
+  return cons(a, cons(b, cons(c, cons(d, cons(e, cons(f, 0))))));
+}
+#define list6(a,b,c,d,e,f) list6_gen(p, (a),(b),(c),(d),(e),(f))
+
+static node*
+append_gen(parser_state *p, node *a, node *b)
+{
+  node *c = a;
+
+  if (!a) return b;
+  if (!b) return a;
+  while (c->cdr) {
+    c = c->cdr;
+  }
+  c->cdr = b;
+  return a;
+}
+#define append(a,b) append_gen(p,(a),(b))
+#define push(a,b) append_gen(p,(a),list1(b))
+
+static char*
+parser_strndup(parser_state *p, const char *s, size_t len)
+{
+  char *b = (char *)parser_palloc(p, len+1);
+
+  memcpy(b, s, len);
+  b[len] = '\0';
+  return b;
+}
+#undef strndup
+#define strndup(s,len) parser_strndup(p, s, len)
+
+static char*
+parser_strdup(parser_state *p, const char *s)
+{
+  return parser_strndup(p, s, strlen(s));
+}
+#undef strdup
+#define strdup(s) parser_strdup(p, s)
+
+static void
+dump_int(uint16_t i, char *s)
+{
+  char *p = s;
+  char *t = s;
+
+  while (i > 0) {
+    *p++ = (i % 10)+'0';
+    i /= 10;
+  }
+  if (p == s) *p++ = '0';
+  *p = 0;
+  p--;  /* point the last char */
+  while (t < p) {
+    char c = *t;
+    *t++ = *p;
+    *p-- = c;
+  }
+}
+
+/* xxx ----------------------------- */
+
+static node*
+local_switch(parser_state *p)
+{
+  node *prev = p->locals;
+
+  p->locals = cons(0, 0);
+  return prev;
+}
+
+static void
+local_resume(parser_state *p, node *prev)
+{
+  p->locals = prev;
+}
+
+static void
+local_nest(parser_state *p)
+{
+  p->locals = cons(0, p->locals);
+}
+
+static void
+local_unnest(parser_state *p)
+{
+  if (p->locals) {
+    p->locals = p->locals->cdr;
+  }
+}
+
+static mrb_bool
+local_var_p(parser_state *p, mrb_sym sym)
+{
+  node *l = p->locals;
+
+  while (l) {
+    node *n = l->car;
+    while (n) {
+      if (sym(n->car) == sym) return TRUE;
+      n = n->cdr;
+    }
+    l = l->cdr;
+  }
+  return FALSE;
+}
+
+static void
+local_add_f(parser_state *p, mrb_sym sym)
+{
+  if (p->locals) {
+    p->locals->car = push(p->locals->car, nsym(sym));
+  }
+}
+
+static void
+local_add(parser_state *p, mrb_sym sym)
+{
+  if (!local_var_p(p, sym)) {
+    local_add_f(p, sym);
+  }
+}
+
+static void
+local_add_blk(parser_state *p, mrb_sym blk)
+{
+  /* allocate register for block */
+  local_add_f(p, blk ? blk : mrb_intern_lit(p->mrb, "&"));
+}
+
+static void
+local_add_kw(parser_state *p, mrb_sym kwd)
+{
+  /* allocate register for keywords hash */
+  local_add_f(p, kwd ? kwd : mrb_intern_lit(p->mrb, "**"));
+}
+
+static node*
+locals_node(parser_state *p)
+{
+  return p->locals ? p->locals->car : NULL;
+}
+
+static void
+nvars_nest(parser_state *p)
+{
+  p->nvars = cons(nint(0), p->nvars);
+}
+
+static void
+nvars_block(parser_state *p)
+{
+  p->nvars = cons(nint(-2), p->nvars);
+}
+
+static void
+nvars_unnest(parser_state *p)
+{
+  p->nvars = p->nvars->cdr;
+}
+
+/* (:scope (vars..) (prog...)) */
+static node*
+new_scope(parser_state *p, node *body)
+{
+  return cons((node*)NODE_SCOPE, cons(locals_node(p), body));
+}
+
+/* (:begin prog...) */
+static node*
+new_begin(parser_state *p, node *body)
+{
+  if (body) {
+    return list2((node*)NODE_BEGIN, body);
+  }
+  return cons((node*)NODE_BEGIN, 0);
+}
+
+#define newline_node(n) (n)
+
+/* (:rescue body rescue else) */
+static node*
+new_rescue(parser_state *p, node *body, node *resq, node *els)
+{
+  return list4((node*)NODE_RESCUE, body, resq, els);
+}
+
+static node*
+new_mod_rescue(parser_state *p, node *body, node *resq)
+{
+  return new_rescue(p, body, list1(list3(0, 0, resq)), 0);
+}
+
+/* (:ensure body ensure) */
+static node*
+new_ensure(parser_state *p, node *a, node *b)
+{
+  return cons((node*)NODE_ENSURE, cons(a, cons(0, b)));
+}
+
+/* (:nil) */
+static node*
+new_nil(parser_state *p)
+{
+  return list1((node*)NODE_NIL);
+}
+
+/* (:true) */
+static node*
+new_true(parser_state *p)
+{
+  return list1((node*)NODE_TRUE);
+}
+
+/* (:false) */
+static node*
+new_false(parser_state *p)
+{
+  return list1((node*)NODE_FALSE);
+}
+
+/* (:alias new old) */
+static node*
+new_alias(parser_state *p, mrb_sym a, mrb_sym b)
+{
+  return cons((node*)NODE_ALIAS, cons(nsym(a), nsym(b)));
+}
+
+/* (:if cond then else) */
+static node*
+new_if(parser_state *p, node *a, node *b, node *c)
+{
+  void_expr_error(p, a);
+  return list4((node*)NODE_IF, a, b, c);
+}
+
+/* (:unless cond then else) */
+static node*
+new_unless(parser_state *p, node *a, node *b, node *c)
+{
+  void_expr_error(p, a);
+  return list4((node*)NODE_IF, a, c, b);
+}
+
+/* (:while cond body) */
+static node*
+new_while(parser_state *p, node *a, node *b)
+{
+  void_expr_error(p, a);
+  return cons((node*)NODE_WHILE, cons(a, b));
+}
+
+/* (:until cond body) */
+static node*
+new_until(parser_state *p, node *a, node *b)
+{
+  void_expr_error(p, a);
+  return cons((node*)NODE_UNTIL, cons(a, b));
+}
+
+/* (:for var obj body) */
+static node*
+new_for(parser_state *p, node *v, node *o, node *b)
+{
+  void_expr_error(p, o);
+  return list4((node*)NODE_FOR, v, o, b);
+}
+
+/* (:case a ((when ...) body) ((when...) body)) */
+static node*
+new_case(parser_state *p, node *a, node *b)
+{
+  node *n = list2((node*)NODE_CASE, a);
+  node *n2 = n;
+
+  void_expr_error(p, a);
+  while (n2->cdr) {
+    n2 = n2->cdr;
+  }
+  n2->cdr = b;
+  return n;
+}
+
+/* (:postexe a) */
+static node*
+new_postexe(parser_state *p, node *a)
+{
+  return cons((node*)NODE_POSTEXE, a);
+}
+
+/* (:self) */
+static node*
+new_self(parser_state *p)
+{
+  return list1((node*)NODE_SELF);
+}
+
+/* (:call a b c) */
+static node*
+new_call(parser_state *p, node *a, mrb_sym b, node *c, int pass)
+{
+  node *n = list4(nint(pass?NODE_CALL:NODE_SCALL), a, nsym(b), c);
+  void_expr_error(p, a);
+  NODE_LINENO(n, a);
+  return n;
+}
+
+/* (:fcall self mid args) */
+static node*
+new_fcall(parser_state *p, mrb_sym b, node *c)
+{
+  node *n = new_self(p);
+  NODE_LINENO(n, c);
+  n = list4((node*)NODE_FCALL, n, nsym(b), c);
+  NODE_LINENO(n, c);
+  return n;
+}
+
+/* (:super . c) */
+static node*
+new_super(parser_state *p, node *c)
+{
+  return cons((node*)NODE_SUPER, c);
+}
+
+/* (:zsuper) */
+static node*
+new_zsuper(parser_state *p)
+{
+  return list1((node*)NODE_ZSUPER);
+}
+
+/* (:yield . c) */
+static node*
+new_yield(parser_state *p, node *c)
+{
+  if (c) {
+    if (c->cdr) {
+      yyerror(p, "both block arg and actual block given");
+    }
+    return cons((node*)NODE_YIELD, c->car);
+  }
+  return cons((node*)NODE_YIELD, 0);
+}
+
+/* (:return . c) */
+static node*
+new_return(parser_state *p, node *c)
+{
+  return cons((node*)NODE_RETURN, c);
+}
+
+/* (:break . c) */
+static node*
+new_break(parser_state *p, node *c)
+{
+  return cons((node*)NODE_BREAK, c);
+}
+
+/* (:next . c) */
+static node*
+new_next(parser_state *p, node *c)
+{
+  return cons((node*)NODE_NEXT, c);
+}
+
+/* (:redo) */
+static node*
+new_redo(parser_state *p)
+{
+  return list1((node*)NODE_REDO);
+}
+
+/* (:retry) */
+static node*
+new_retry(parser_state *p)
+{
+  return list1((node*)NODE_RETRY);
+}
+
+/* (:dot2 a b) */
+static node*
+new_dot2(parser_state *p, node *a, node *b)
+{
+  return cons((node*)NODE_DOT2, cons(a, b));
+}
+
+/* (:dot3 a b) */
+static node*
+new_dot3(parser_state *p, node *a, node *b)
+{
+  return cons((node*)NODE_DOT3, cons(a, b));
+}
+
+/* (:colon2 b c) */
+static node*
+new_colon2(parser_state *p, node *b, mrb_sym c)
+{
+  void_expr_error(p, b);
+  return cons((node*)NODE_COLON2, cons(b, nsym(c)));
+}
+
+/* (:colon3 . c) */
+static node*
+new_colon3(parser_state *p, mrb_sym c)
+{
+  return cons((node*)NODE_COLON3, nsym(c));
+}
+
+/* (:and a b) */
+static node*
+new_and(parser_state *p, node *a, node *b)
+{
+  return cons((node*)NODE_AND, cons(a, b));
+}
+
+/* (:or a b) */
+static node*
+new_or(parser_state *p, node *a, node *b)
+{
+  return cons((node*)NODE_OR, cons(a, b));
+}
+
+/* (:array a...) */
+static node*
+new_array(parser_state *p, node *a)
+{
+  return cons((node*)NODE_ARRAY, a);
+}
+
+/* (:splat . a) */
+static node*
+new_splat(parser_state *p, node *a)
+{
+  return cons((node*)NODE_SPLAT, a);
+}
+
+/* (:hash (k . v) (k . v)...) */
+static node*
+new_hash(parser_state *p, node *a)
+{
+  return cons((node*)NODE_HASH, a);
+}
+
+/* (:kw_hash (k . v) (k . v)...) */
+static node*
+new_kw_hash(parser_state *p, node *a)
+{
+  return cons((node*)NODE_KW_HASH, a);
+}
+
+/* (:sym . a) */
+static node*
+new_sym(parser_state *p, mrb_sym sym)
+{
+  return cons((node*)NODE_SYM, nsym(sym));
+}
+
+static mrb_sym
+new_strsym(parser_state *p, node* str)
+{
+  const char *s = (const char*)str->cdr->car;
+  size_t len = (size_t)str->cdr->cdr;
+
+  return mrb_intern(p->mrb, s, len);
+}
+
+/* (:lvar . a) */
+static node*
+new_lvar(parser_state *p, mrb_sym sym)
+{
+  return cons((node*)NODE_LVAR, nsym(sym));
+}
+
+/* (:gvar . a) */
+static node*
+new_gvar(parser_state *p, mrb_sym sym)
+{
+  return cons((node*)NODE_GVAR, nsym(sym));
+}
+
+/* (:ivar . a) */
+static node*
+new_ivar(parser_state *p, mrb_sym sym)
+{
+  return cons((node*)NODE_IVAR, nsym(sym));
+}
+
+/* (:cvar . a) */
+static node*
+new_cvar(parser_state *p, mrb_sym sym)
+{
+  return cons((node*)NODE_CVAR, nsym(sym));
+}
+
+/* (:nvar . a) */
+static node*
+new_nvar(parser_state *p, int num)
+{
+  int nvars = intn(p->nvars->car);
+
+  p->nvars->car = nint(nvars > num ? nvars : num);
+  return cons((node*)NODE_NVAR, nint(num));
+}
+
+/* (:const . a) */
+static node*
+new_const(parser_state *p, mrb_sym sym)
+{
+  return cons((node*)NODE_CONST, nsym(sym));
+}
+
+/* (:undef a...) */
+static node*
+new_undef(parser_state *p, mrb_sym sym)
+{
+  return list2((node*)NODE_UNDEF, nsym(sym));
+}
+
+/* (:class class super body) */
+static node*
+new_class(parser_state *p, node *c, node *s, node *b)
+{
+  void_expr_error(p, s);
+  return list4((node*)NODE_CLASS, c, s, cons(locals_node(p), b));
+}
+
+/* (:sclass obj body) */
+static node*
+new_sclass(parser_state *p, node *o, node *b)
+{
+  void_expr_error(p, o);
+  return list3((node*)NODE_SCLASS, o, cons(locals_node(p), b));
+}
+
+/* (:module module body) */
+static node*
+new_module(parser_state *p, node *m, node *b)
+{
+  return list3((node*)NODE_MODULE, m, cons(locals_node(p), b));
+}
+
+/* (:def m lv (arg . body)) */
+static node*
+new_def(parser_state *p, mrb_sym m, node *a, node *b)
+{
+  return list5((node*)NODE_DEF, nsym(m), locals_node(p), a, b);
+}
+
+/* (:sdef obj m lv (arg . body)) */
+static node*
+new_sdef(parser_state *p, node *o, mrb_sym m, node *a, node *b)
+{
+  void_expr_error(p, o);
+  return list6((node*)NODE_SDEF, o, nsym(m), locals_node(p), a, b);
+}
+
+/* (:arg . sym) */
+static node*
+new_arg(parser_state *p, mrb_sym sym)
+{
+  return cons((node*)NODE_ARG, nsym(sym));
+}
+
+static void
+local_add_margs(parser_state *p, node *n)
+{
+  while (n) {
+    if (n->car->car == (node*)NODE_MASGN) {
+      node *t = n->car->cdr->cdr;
+
+      n->car->cdr->cdr = NULL;
+      while (t) {
+        local_add_f(p, sym(t->car));
+        t = t->cdr;
+      }
+      local_add_margs(p, n->car->cdr->car->car);
+      local_add_margs(p, n->car->cdr->car->cdr->cdr->car);
+    }
+    n = n->cdr;
+  }
+}
+
+static void
+local_add_lv(parser_state *p, node *lv)
+{
+  while (lv) {
+    local_add_f(p, sym(lv->car));
+    lv = lv->cdr;
+  }
+}
+
+/* (m o r m2 tail) */
+/* m: (a b c) */
+/* o: ((a . e1) (b . e2)) */
+/* r: a */
+/* m2: (a b c) */
+/* b: a */
+static node*
+new_args(parser_state *p, node *m, node *opt, mrb_sym rest, node *m2, node *tail)
+{
+  node *n;
+
+  local_add_margs(p, m);
+  local_add_margs(p, m2);
+  n = cons(m2, tail);
+  n = cons(nsym(rest), n);
+  n = cons(opt, n);
+  while (opt) {
+    /* opt: (sym . (opt . lv)) -> (sym . opt) */
+    local_add_lv(p, opt->car->cdr->cdr);
+    opt->car->cdr = opt->car->cdr->car;
+    opt = opt->cdr;
+  }
+  return cons(m, n);
+}
+
+/* (:args_tail keywords rest_keywords_sym block_sym) */
+static node*
+new_args_tail(parser_state *p, node *kws, node *kwrest, mrb_sym blk)
+{
+  node *k;
+
+  if (kws || kwrest) {
+    local_add_kw(p, (kwrest && kwrest->cdr)? sym(kwrest->cdr) : 0);
+  }
+
+  local_add_blk(p, blk);
+
+  /* allocate register for keywords arguments */
+  /* order is for Proc#parameters */
+  for (k = kws; k; k = k->cdr) {
+    if (!k->car->cdr->cdr->car) { /* allocate required keywords */
+      local_add_f(p, sym(k->car->cdr->car));
+    }
+  }
+  for (k = kws; k; k = k->cdr) {
+    if (k->car->cdr->cdr->car) { /* allocate keywords with default */
+      local_add_lv(p, k->car->cdr->cdr->car->cdr);
+      k->car->cdr->cdr->car = k->car->cdr->cdr->car->car;
+      local_add_f(p, sym(k->car->cdr->car));
+    }
+  }
+
+  return list4((node*)NODE_ARGS_TAIL, kws, kwrest, nsym(blk));
+}
+
+/* (:kw_arg kw_sym def_arg) */
+static node*
+new_kw_arg(parser_state *p, mrb_sym kw, node *def_arg)
+{
+  mrb_assert(kw);
+  return list3((node*)NODE_KW_ARG, nsym(kw), def_arg);
+}
+
+/* (:block_arg . a) */
+static node*
+new_block_arg(parser_state *p, node *a)
+{
+  return cons((node*)NODE_BLOCK_ARG, a);
+}
+
+static node*
+setup_numparams(parser_state *p, node *a)
+{
+  int nvars = intn(p->nvars->car);
+  if (nvars > 0) {
+    int i;
+    mrb_sym sym;
+    // m || opt || rest || tail
+    if (a && (a->car || (a->cdr && a->cdr->car) || (a->cdr->cdr && a->cdr->cdr->car) || (a->cdr->cdr->cdr->cdr && a->cdr->cdr->cdr->cdr->car))) {
+      yyerror(p, "ordinary parameter is defined");
+    }
+    else if (p->locals) {
+      /* p->locals should not be NULL unless error happens before the point */
+      node* args = 0;
+      for (i = nvars; i > 0; i--) {
+        char buf[3];
+
+        buf[0] = '_';
+        buf[1] = i+'0';
+        buf[2] = '\0';
+        sym = intern_cstr(buf);
+        args = cons(new_arg(p, sym), args);
+        p->locals->car = cons(nsym(sym), p->locals->car);
+      }
+      a = new_args(p, args, 0, 0, 0, 0);
+    }
+  }
+  return a;
+}
+
+/* (:block arg body) */
+static node*
+new_block(parser_state *p, node *a, node *b)
+{
+  a = setup_numparams(p, a);
+  return list4((node*)NODE_BLOCK, locals_node(p), a, b);
+}
+
+/* (:lambda arg body) */
+static node*
+new_lambda(parser_state *p, node *a, node *b)
+{
+  return list4((node*)NODE_LAMBDA, locals_node(p), a, b);
+}
+
+/* (:asgn lhs rhs) */
+static node*
+new_asgn(parser_state *p, node *a, node *b)
+{
+  void_expr_error(p, b);
+  return cons((node*)NODE_ASGN, cons(a, b));
+}
+
+/* (:masgn mlhs=(pre rest post)  mrhs) */
+static node*
+new_masgn(parser_state *p, node *a, node *b)
+{
+  void_expr_error(p, b);
+  return cons((node*)NODE_MASGN, cons(a, b));
+}
+
+/* (:masgn mlhs mrhs) no check */
+static node*
+new_masgn_param(parser_state *p, node *a, node *b)
+{
+  return cons((node*)NODE_MASGN, cons(a, b));
+}
+
+/* (:asgn lhs rhs) */
+static node*
+new_op_asgn(parser_state *p, node *a, mrb_sym op, node *b)
+{
+  void_expr_error(p, b);
+  return list4((node*)NODE_OP_ASGN, a, nsym(op), b);
+}
+
+static node*
+new_imaginary(parser_state *p, node *imaginary)
+{
+  return new_call(p, new_const(p, intern_lit("Kernel")), intern_lit("Complex"), list1(list2(list3((node*)NODE_INT, (node*)strdup("0"), nint(10)), imaginary)), 1);
+}
+
+static node*
+new_rational(parser_state *p, node *rational)
+{
+  return new_call(p, new_const(p, intern_lit("Kernel")), intern_lit("Rational"), list1(list1(rational)), 1);
+}
+
+/* (:int . i) */
+static node*
+new_int(parser_state *p, const char *s, int base, int suffix)
+{
+  node* result = list3((node*)NODE_INT, (node*)strdup(s), nint(base));
+  if (suffix & NUM_SUFFIX_R) {
+    result = new_rational(p, result);
+  }
+  if (suffix & NUM_SUFFIX_I) {
+    result = new_imaginary(p, result);
+  }
+  return result;
+}
+
+#ifndef MRB_WITHOUT_FLOAT
+/* (:float . i) */
+static node*
+new_float(parser_state *p, const char *s, int suffix)
+{
+  node* result = cons((node*)NODE_FLOAT, (node*)strdup(s));
+  if (suffix & NUM_SUFFIX_R) {
+    result = new_rational(p, result);
+  }
+  if (suffix & NUM_SUFFIX_I) {
+    result = new_imaginary(p, result);
+  }
+  return result;
+}
+#endif
+
+/* (:str . (s . len)) */
+static node*
+new_str(parser_state *p, const char *s, size_t len)
+{
+  return cons((node*)NODE_STR, cons((node*)strndup(s, len), nint(len)));
+}
+
+/* (:dstr . a) */
+static node*
+new_dstr(parser_state *p, node *a)
+{
+  return cons((node*)NODE_DSTR, a);
+}
+
+static int
+string_node_p(node *n)
+{
+  return (int)((enum node_type)(intptr_t)n->car == NODE_STR);
+}
+
+static node*
+composite_string_node(parser_state *p, node *a, node *b)
+{
+  size_t newlen = (size_t)a->cdr + (size_t)b->cdr;
+  char *str = (char*)mrb_pool_realloc(p->pool, a->car, (size_t)a->cdr + 1, newlen + 1);
+  memcpy(str + (size_t)a->cdr, b->car, (size_t)b->cdr);
+  str[newlen] = '\0';
+  a->car = (node*)str;
+  a->cdr = (node*)newlen;
+  cons_free(b);
+  return a;
+}
+
+static node*
+concat_string(parser_state *p, node *a, node *b)
+{
+  if (string_node_p(a)) {
+    if (string_node_p(b)) {
+      /* a == NODE_STR && b == NODE_STR */
+      composite_string_node(p, a->cdr, b->cdr);
+      cons_free(b);
+      return a;
+    }
+    else {
+      /* a == NODE_STR && b == NODE_DSTR */
+
+      if (string_node_p(b->cdr->car)) {
+        /* a == NODE_STR && b->[NODE_STR, ...] */
+        composite_string_node(p, a->cdr, b->cdr->car->cdr);
+        cons_free(b->cdr->car);
+        b->cdr->car = a;
+        return b;
+      }
+    }
+  }
+  else {
+    node *c; /* last node of a */
+    for (c = a; c->cdr != NULL; c = c->cdr) ;
+
+    if (string_node_p(b)) {
+      /* a == NODE_DSTR && b == NODE_STR */
+      if (string_node_p(c->car)) {
+        /* a->[..., NODE_STR] && b == NODE_STR */
+        composite_string_node(p, c->car->cdr, b->cdr);
+        cons_free(b);
+        return a;
+      }
+
+      push(a, b);
+      return a;
+    }
+    else {
+      /* a == NODE_DSTR && b == NODE_DSTR */
+      if (string_node_p(c->car) && string_node_p(b->cdr->car)) {
+        /* a->[..., NODE_STR] && b->[NODE_STR, ...] */
+        node *d = b->cdr;
+        cons_free(b);
+        composite_string_node(p, c->car->cdr, d->car->cdr);
+        cons_free(d->car);
+        c->cdr = d->cdr;
+        cons_free(d);
+        return a;
+      }
+      else {
+        c->cdr = b->cdr;
+        cons_free(b);
+        return a;
+      }
+    }
+  }
+
+  return new_dstr(p, list2(a, b));
+}
+
+/* (:str . (s . len)) */
+static node*
+new_xstr(parser_state *p, const char *s, int len)
+{
+  return cons((node*)NODE_XSTR, cons((node*)strndup(s, len), nint(len)));
+}
+
+/* (:xstr . a) */
+static node*
+new_dxstr(parser_state *p, node *a)
+{
+  return cons((node*)NODE_DXSTR, a);
+}
+
+/* (:dsym . a) */
+static node*
+new_dsym(parser_state *p, node *a)
+{
+  return cons((node*)NODE_DSYM, a);
+}
+
+/* (:regx . (s . (opt . enc))) */
+static node*
+new_regx(parser_state *p, const char *p1, const char* p2, const char* p3)
+{
+  return cons((node*)NODE_REGX, cons((node*)p1, cons((node*)p2, (node*)p3)));
+}
+
+/* (:dregx . (a . b)) */
+static node*
+new_dregx(parser_state *p, node *a, node *b)
+{
+  return cons((node*)NODE_DREGX, cons(a, b));
+}
+
+/* (:backref . n) */
+static node*
+new_back_ref(parser_state *p, int n)
+{
+  return cons((node*)NODE_BACK_REF, nint(n));
+}
+
+/* (:nthref . n) */
+static node*
+new_nth_ref(parser_state *p, int n)
+{
+  return cons((node*)NODE_NTH_REF, nint(n));
+}
+
+/* (:heredoc . a) */
+static node*
+new_heredoc(parser_state *p)
+{
+  parser_heredoc_info *inf = (parser_heredoc_info *)parser_palloc(p, sizeof(parser_heredoc_info));
+  return cons((node*)NODE_HEREDOC, (node*)inf);
+}
+
+static void
+new_bv(parser_state *p, mrb_sym id)
+{
+}
+
+static node*
+new_literal_delim(parser_state *p)
+{
+  return cons((node*)NODE_LITERAL_DELIM, 0);
+}
+
+/* (:words . a) */
+static node*
+new_words(parser_state *p, node *a)
+{
+  return cons((node*)NODE_WORDS, a);
+}
+
+/* (:symbols . a) */
+static node*
+new_symbols(parser_state *p, node *a)
+{
+  return cons((node*)NODE_SYMBOLS, a);
+}
+
+/* xxx ----------------------------- */
+
+/* (:call a op) */
+static node*
+call_uni_op(parser_state *p, node *recv, const char *m)
+{
+  void_expr_error(p, recv);
+  return new_call(p, recv, intern_cstr(m), 0, 1);
+}
+
+/* (:call a op b) */
+static node*
+call_bin_op(parser_state *p, node *recv, const char *m, node *arg1)
+{
+  return new_call(p, recv, intern_cstr(m), list1(list1(arg1)), 1);
+}
+
+static void
+args_with_block(parser_state *p, node *a, node *b)
+{
+  if (b) {
+    if (a->cdr) {
+      yyerror(p, "both block arg and actual block given");
+    }
+    a->cdr = b;
+  }
+}
+
+static void
+call_with_block(parser_state *p, node *a, node *b)
+{
+  node *n;
+
+  switch ((enum node_type)intn(a->car)) {
+  case NODE_SUPER:
+  case NODE_ZSUPER:
+    if (!a->cdr) a->cdr = cons(0, b);
+    else {
+      args_with_block(p, a->cdr, b);
+    }
+    break;
+  case NODE_CALL:
+  case NODE_FCALL:
+  case NODE_SCALL:
+    n = a->cdr->cdr->cdr;
+    if (!n->car) n->car = cons(0, b);
+    else {
+      args_with_block(p, n->car, b);
+    }
+    break;
+  default:
+    break;
+  }
+}
+
+static node*
+negate_lit(parser_state *p, node *n)
+{
+  return cons((node*)NODE_NEGATE, n);
+}
+
+static node*
+cond(node *n)
+{
+  return n;
+}
+
+static node*
+ret_args(parser_state *p, node *n)
+{
+  if (n->cdr) {
+    yyerror(p, "block argument should not be given");
+    return NULL;
+  }
+  if (!n->car->cdr) return n->car->car;
+  return new_array(p, n->car);
+}
+
+static void
+assignable(parser_state *p, node *lhs)
+{
+  if (intn(lhs->car) == NODE_LVAR) {
+    local_add(p, sym(lhs->cdr));
+  }
+}
+
+static node*
+var_reference(parser_state *p, node *lhs)
+{
+  node *n;
+
+  if (intn(lhs->car) == NODE_LVAR) {
+    if (!local_var_p(p, sym(lhs->cdr))) {
+      n = new_fcall(p, sym(lhs->cdr), 0);
+      cons_free(lhs);
+      return n;
+    }
+  }
+
+  return lhs;
+}
+
+typedef enum mrb_string_type  string_type;
+
+static node*
+new_strterm(parser_state *p, string_type type, int term, int paren)
+{
+  return cons(nint(type), cons((node*)0, cons(nint(paren), nint(term))));
+}
+
+static void
+end_strterm(parser_state *p)
+{
+  cons_free(p->lex_strterm->cdr->cdr);
+  cons_free(p->lex_strterm->cdr);
+  cons_free(p->lex_strterm);
+  p->lex_strterm = NULL;
+}
+
+static parser_heredoc_info *
+parsing_heredoc_inf(parser_state *p)
+{
+  node *nd = p->parsing_heredoc;
+  if (nd == NULL)
+    return NULL;
+  /* mrb_assert(nd->car->car == NODE_HEREDOC); */
+  return (parser_heredoc_info*)nd->car->cdr;
+}
+
+static void
+heredoc_treat_nextline(parser_state *p)
+{
+  if (p->heredocs_from_nextline == NULL)
+    return;
+  if (p->parsing_heredoc == NULL) {
+    node *n;
+    p->parsing_heredoc = p->heredocs_from_nextline;
+    p->lex_strterm_before_heredoc = p->lex_strterm;
+    p->lex_strterm = new_strterm(p, parsing_heredoc_inf(p)->type, 0, 0);
+    n = p->all_heredocs;
+    if (n) {
+      while (n->cdr)
+        n = n->cdr;
+      n->cdr = p->parsing_heredoc;
+    }
+    else {
+      p->all_heredocs = p->parsing_heredoc;
+    }
+  }
+  else {
+    node *n, *m;
+    m = p->heredocs_from_nextline;
+    while (m->cdr)
+      m = m->cdr;
+    n = p->all_heredocs;
+    mrb_assert(n != NULL);
+    if (n == p->parsing_heredoc) {
+      m->cdr = n;
+      p->all_heredocs = p->heredocs_from_nextline;
+      p->parsing_heredoc = p->heredocs_from_nextline;
+    }
+    else {
+      while (n->cdr != p->parsing_heredoc) {
+        n = n->cdr;
+        mrb_assert(n != NULL);
+      }
+      m->cdr = n->cdr;
+      n->cdr = p->heredocs_from_nextline;
+      p->parsing_heredoc = p->heredocs_from_nextline;
+    }
+  }
+  p->heredocs_from_nextline = NULL;
+}
+
+static void
+heredoc_end(parser_state *p)
+{
+  p->parsing_heredoc = p->parsing_heredoc->cdr;
+  if (p->parsing_heredoc == NULL) {
+    p->lstate = EXPR_BEG;
+    end_strterm(p);
+    p->lex_strterm = p->lex_strterm_before_heredoc;
+    p->lex_strterm_before_heredoc = NULL;
+  }
+  else {
+    /* next heredoc */
+    p->lex_strterm->car = nint(parsing_heredoc_inf(p)->type);
+  }
+}
+#define is_strterm_type(p,str_func) (intn((p)->lex_strterm->car) & (str_func))
+
+/* xxx ----------------------------- */
+
+%}
+
+%pure-parser
+%parse-param {parser_state *p}
+%lex-param {parser_state *p}
+
+%union {
+    node *nd;
+    mrb_sym id;
+    int num;
+    stack_type stack;
+    const struct vtable *vars;
+}
+
+%token <num>
+        keyword_class
+        keyword_module
+        keyword_def
+        keyword_begin
+        keyword_if
+        keyword_unless
+        keyword_while
+        keyword_until
+        keyword_for
+
+%token
+        keyword_undef
+        keyword_rescue
+        keyword_ensure
+        keyword_end
+        keyword_then
+        keyword_elsif
+        keyword_else
+        keyword_case
+        keyword_when
+        keyword_break
+        keyword_next
+        keyword_redo
+        keyword_retry
+        keyword_in
+        keyword_do
+        keyword_do_cond
+        keyword_do_block
+        keyword_do_LAMBDA
+        keyword_return
+        keyword_yield
+        keyword_super
+        keyword_self
+        keyword_nil
+        keyword_true
+        keyword_false
+        keyword_and
+        keyword_or
+        keyword_not
+        modifier_if
+        modifier_unless
+        modifier_while
+        modifier_until
+        modifier_rescue
+        keyword_alias
+        keyword_BEGIN
+        keyword_END
+        keyword__LINE__
+        keyword__FILE__
+        keyword__ENCODING__
+
+%token <id>  tIDENTIFIER tFID tGVAR tIVAR tCONSTANT tCVAR tLABEL_TAG
+%token <nd>  tINTEGER tFLOAT tCHAR tXSTRING tREGEXP
+%token <nd>  tSTRING tSTRING_PART tSTRING_MID
+%token <nd>  tNTH_REF tBACK_REF
+%token <num> tREGEXP_END
+%token <num> tNUMPARAM
+
+%type <nd> singleton string string_fragment string_rep string_interp xstring regexp
+%type <nd> literal numeric cpath symbol
+%type <nd> top_compstmt top_stmts top_stmt
+%type <nd> bodystmt compstmt stmts stmt expr arg primary command command_call method_call
+%type <nd> expr_value arg_rhs primary_value
+%type <nd> if_tail opt_else case_body cases opt_rescue exc_list exc_var opt_ensure
+%type <nd> args call_args opt_call_args
+%type <nd> paren_args opt_paren_args variable
+%type <nd> command_args aref_args opt_block_arg block_arg var_ref var_lhs
+%type <nd> command_asgn command_rhs mrhs superclass block_call block_command
+%type <nd> f_block_optarg f_block_opt
+%type <nd> f_arglist f_args f_arg f_arg_item f_optarg f_margs
+%type <nd> assoc_list assocs assoc undef_list backref for_var
+%type <nd> block_param opt_block_param block_param_def f_opt
+%type <nd> bv_decls opt_bv_decl bvar f_larglist lambda_body
+%type <nd> brace_block cmd_brace_block do_block lhs none f_bad_arg
+%type <nd> mlhs mlhs_list mlhs_post mlhs_basic mlhs_item mlhs_node mlhs_inner
+%type <id> fsym sym basic_symbol operation operation2 operation3
+%type <id> cname fname op f_rest_arg f_block_arg opt_f_block_arg f_norm_arg f_opt_asgn
+%type <nd> heredoc words symbols
+%type <num> call_op call_op2     /* 0:'&.', 1:'.', 2:'::' */
+
+%type <nd> args_tail opt_args_tail f_kwarg f_kw f_kwrest
+%type <nd> f_block_kwarg f_block_kw block_args_tail opt_block_args_tail
+%type <id> f_label
+
+%token tUPLUS             /* unary+ */
+%token tUMINUS            /* unary- */
+%token tPOW               /* ** */
+%token tCMP               /* <=> */
+%token tEQ                /* == */
+%token tEQQ               /* === */
+%token tNEQ               /* != */
+%token tGEQ               /* >= */
+%token tLEQ               /* <= */
+%token tANDOP tOROP       /* && and || */
+%token tMATCH tNMATCH     /* =~ and !~ */
+%token tDOT2 tDOT3        /* .. and ... */
+%token tAREF tASET        /* [] and []= */
+%token tLSHFT tRSHFT      /* << and >> */
+%token tCOLON2            /* :: */
+%token tCOLON3            /* :: at EXPR_BEG */
+%token <id> tOP_ASGN      /* +=, -=  etc. */
+%token tASSOC             /* => */
+%token tLPAREN            /* ( */
+%token tLPAREN_ARG        /* ( */
+%token tRPAREN            /* ) */
+%token tLBRACK            /* [ */
+%token tLBRACE            /* { */
+%token tLBRACE_ARG        /* { */
+%token tSTAR              /* * */
+%token tDSTAR             /* ** */
+%token tAMPER             /* & */
+%token tLAMBDA            /* -> */
+%token tANDDOT            /* &. */
+%token tSYMBEG tREGEXP_BEG tWORDS_BEG tSYMBOLS_BEG
+%token tSTRING_BEG tXSTRING_BEG tSTRING_DVAR tLAMBEG
+%token <nd> tHEREDOC_BEG  /* <<, <<- */
+%token tHEREDOC_END tLITERAL_DELIM tHD_LITERAL_DELIM
+%token <nd> tHD_STRING_PART tHD_STRING_MID
+
+/*
+ * precedence table
+ */
+
+%nonassoc tLOWEST
+%nonassoc tLBRACE_ARG
+
+%nonassoc  modifier_if modifier_unless modifier_while modifier_until
+%left  keyword_or keyword_and
+%right keyword_not
+%right '=' tOP_ASGN
+%left modifier_rescue
+%right '?' ':' tLABEL_TAG
+%nonassoc tDOT2 tDOT3
+%left  tOROP
+%left  tANDOP
+%nonassoc  tCMP tEQ tEQQ tNEQ tMATCH tNMATCH
+%left  '>' tGEQ '<' tLEQ
+%left  '|' '^'
+%left  '&'
+%left  tLSHFT tRSHFT
+%left  '+' '-'
+%left  '*' '/' '%'
+%right tUMINUS_NUM tUMINUS
+%right tPOW
+%right '!' '~' tUPLUS
+
+%token tLAST_TOKEN
+
+%%
+program         :   {
+                      p->lstate = EXPR_BEG;
+                      if (!p->locals) p->locals = cons(0,0);
+                    }
+                  top_compstmt
+                    {
+                      p->tree = new_scope(p, $2);
+                      NODE_LINENO(p->tree, $2);
+                    }
+                ;
+
+top_compstmt    : top_stmts opt_terms
+                    {
+                      $$ = $1;
+                    }
+                ;
+
+top_stmts       : none
+                    {
+                      $$ = new_begin(p, 0);
+                    }
+                | top_stmt
+                    {
+                      $$ = new_begin(p, $1);
+                      NODE_LINENO($$, $1);
+                    }
+                | top_stmts terms top_stmt
+                    {
+                      $$ = push($1, newline_node($3));
+                    }
+                | error top_stmt
+                    {
+                      $$ = new_begin(p, 0);
+                    }
+                ;
+
+top_stmt        : stmt
+                | keyword_BEGIN
+                    {
+                      $<nd>$ = local_switch(p);
+                      nvars_block(p);
+                    }
+                  '{' top_compstmt '}'
+                    {
+                      yyerror(p, "BEGIN not supported");
+                      local_resume(p, $<nd>2);
+                      nvars_unnest(p);
+                      $$ = 0;
+                    }
+                ;
+
+bodystmt        : compstmt
+                  opt_rescue
+                  opt_else
+                  opt_ensure
+                    {
+                      if ($2) {
+                        $$ = new_rescue(p, $1, $2, $3);
+                        NODE_LINENO($$, $1);
+                      }
+                      else if ($3) {
+                        yywarn(p, "else without rescue is useless");
+                        $$ = push($1, $3);
+                      }
+                      else {
+                        $$ = $1;
+                      }
+                      if ($4) {
+                        if ($$) {
+                          $$ = new_ensure(p, $$, $4);
+                        }
+                        else {
+                          $$ = push($4, new_nil(p));
+                        }
+                      }
+                    }
+                ;
+
+compstmt        : stmts opt_terms
+                    {
+                      $$ = $1;
+                    }
+                ;
+
+stmts           : none
+                    {
+                      $$ = new_begin(p, 0);
+                    }
+                | stmt
+                    {
+                      $$ = new_begin(p, $1);
+                      NODE_LINENO($$, $1);
+                    }
+                | stmts terms stmt
+                    {
+                      $$ = push($1, newline_node($3));
+                    }
+                | error stmt
+                    {
+                      $$ = new_begin(p, $2);
+                    }
+                ;
+
+stmt            : keyword_alias fsym {p->lstate = EXPR_FNAME;} fsym
+                    {
+                      $$ = new_alias(p, $2, $4);
+                    }
+                | keyword_undef undef_list
+                    {
+                      $$ = $2;
+                    }
+                | stmt modifier_if expr_value
+                    {
+                      $$ = new_if(p, cond($3), $1, 0);
+                    }
+                | stmt modifier_unless expr_value
+                    {
+                      $$ = new_unless(p, cond($3), $1, 0);
+                    }
+                | stmt modifier_while expr_value
+                    {
+                      $$ = new_while(p, cond($3), $1);
+                    }
+                | stmt modifier_until expr_value
+                    {
+                      $$ = new_until(p, cond($3), $1);
+                    }
+                | stmt modifier_rescue stmt
+                    {
+                      $$ = new_mod_rescue(p, $1, $3);
+                    }
+                | keyword_END '{' compstmt '}'
+                    {
+                      yyerror(p, "END not supported");
+                      $$ = new_postexe(p, $3);
+                    }
+                | command_asgn
+                | mlhs '=' command_call
+                    {
+                      $$ = new_masgn(p, $1, $3);
+                    }
+                | lhs '=' mrhs
+                    {
+                      $$ = new_asgn(p, $1, new_array(p, $3));
+                    }
+                | mlhs '=' arg
+                    {
+                      $$ = new_masgn(p, $1, $3);
+                    }
+                | mlhs '=' mrhs
+                    {
+                      $$ = new_masgn(p, $1, new_array(p, $3));
+                    }
+                | expr
+                ;
+
+command_asgn    : lhs '=' command_rhs
+                    {
+                      $$ = new_asgn(p, $1, $3);
+                    }
+                | var_lhs tOP_ASGN command_rhs
+                    {
+                      $$ = new_op_asgn(p, $1, $2, $3);
+                    }
+                | primary_value '[' opt_call_args ']' tOP_ASGN command_rhs
+                    {
+                      $$ = new_op_asgn(p, new_call(p, $1, intern_lit("[]"), $3, '.'), $5, $6);
+                    }
+                | primary_value call_op tIDENTIFIER tOP_ASGN command_rhs
+                    {
+                      $$ = new_op_asgn(p, new_call(p, $1, $3, 0, $2), $4, $5);
+                    }
+                | primary_value call_op tCONSTANT tOP_ASGN command_rhs
+                    {
+                      $$ = new_op_asgn(p, new_call(p, $1, $3, 0, $2), $4, $5);
+                    }
+                | primary_value tCOLON2 tCONSTANT tOP_ASGN command_call
+                    {
+                      yyerror(p, "constant re-assignment");
+                      $$ = 0;
+                    }
+                | primary_value tCOLON2 tIDENTIFIER tOP_ASGN command_rhs
+                    {
+                      $$ = new_op_asgn(p, new_call(p, $1, $3, 0, tCOLON2), $4, $5);
+                    }
+                | backref tOP_ASGN command_rhs
+                    {
+                      backref_error(p, $1);
+                      $$ = new_begin(p, 0);
+                    }
+                ;
+
+command_rhs     : command_call   %prec tOP_ASGN
+                | command_call modifier_rescue stmt
+                    {
+                      $$ = new_mod_rescue(p, $1, $3);
+                    }
+                | command_asgn
+                ;
+
+
+expr            : command_call
+                | expr keyword_and expr
+                    {
+                      $$ = new_and(p, $1, $3);
+                    }
+                | expr keyword_or expr
+                    {
+                      $$ = new_or(p, $1, $3);
+                    }
+                | keyword_not opt_nl expr
+                    {
+                      $$ = call_uni_op(p, cond($3), "!");
+                    }
+                | '!' command_call
+                    {
+                      $$ = call_uni_op(p, cond($2), "!");
+                    }
+                | arg
+                ;
+
+expr_value      : expr
+                    {
+                      if (!$1) $$ = new_nil(p);
+                      else {
+                        $$ = $1;
+                      }
+                    }
+                ;
+
+command_call    : command
+                | block_command
+                ;
+
+block_command   : block_call
+                | block_call call_op2 operation2 command_args
+                    {
+                      $$ = new_call(p, $1, $3, $4, $2);
+                    }
+                ;
+
+cmd_brace_block : tLBRACE_ARG
+                    {
+                      local_nest(p);
+                      nvars_nest(p);
+                    }
+                  opt_block_param
+                  compstmt
+                  '}'
+                    {
+                      $$ = new_block(p, $3, $4);
+                      local_unnest(p);
+                      nvars_unnest(p);
+                    }
+                ;
+
+command         : operation command_args       %prec tLOWEST
+                    {
+                      $$ = new_fcall(p, $1, $2);
+                    }
+                | operation command_args cmd_brace_block
+                    {
+                      args_with_block(p, $2, $3);
+                      $$ = new_fcall(p, $1, $2);
+                    }
+                | primary_value call_op operation2 command_args     %prec tLOWEST
+                    {
+                      $$ = new_call(p, $1, $3, $4, $2);
+                    }
+                | primary_value call_op operation2 command_args cmd_brace_block
+                    {
+                      args_with_block(p, $4, $5);
+                      $$ = new_call(p, $1, $3, $4, $2);
+                   }
+                | primary_value tCOLON2 operation2 command_args %prec tLOWEST
+                    {
+                      $$ = new_call(p, $1, $3, $4, tCOLON2);
+                    }
+                | primary_value tCOLON2 operation2 command_args cmd_brace_block
+                    {
+                      args_with_block(p, $4, $5);
+                      $$ = new_call(p, $1, $3, $4, tCOLON2);
+                    }
+                | keyword_super command_args
+                    {
+                      $$ = new_super(p, $2);
+                    }
+                | keyword_yield command_args
+                    {
+                      $$ = new_yield(p, $2);
+                    }
+                | keyword_return call_args
+                    {
+                      $$ = new_return(p, ret_args(p, $2));
+                    }
+                | keyword_break call_args
+                    {
+                      $$ = new_break(p, ret_args(p, $2));
+                    }
+                | keyword_next call_args
+                    {
+                      $$ = new_next(p, ret_args(p, $2));
+                    }
+                ;
+
+mlhs            : mlhs_basic
+                    {
+                      $$ = $1;
+                    }
+                | tLPAREN mlhs_inner rparen
+                    {
+                      $$ = $2;
+                    }
+                ;
+
+mlhs_inner      : mlhs_basic
+                | tLPAREN mlhs_inner rparen
+                    {
+                      $$ = $2;
+                    }
+                ;
+
+mlhs_basic      : mlhs_list
+                    {
+                      $$ = list1($1);
+                    }
+                | mlhs_list mlhs_item
+                    {
+                      $$ = list1(push($1,$2));
+                    }
+                | mlhs_list tSTAR mlhs_node
+                    {
+                      $$ = list2($1, $3);
+                    }
+                | mlhs_list tSTAR mlhs_node ',' mlhs_post
+                    {
+                      $$ = list3($1, $3, $5);
+                    }
+                | mlhs_list tSTAR
+                    {
+                      $$ = list2($1, new_nil(p));
+                    }
+                | mlhs_list tSTAR ',' mlhs_post
+                    {
+                      $$ = list3($1, new_nil(p), $4);
+                    }
+                | tSTAR mlhs_node
+                    {
+                      $$ = list2(0, $2);
+                    }
+                | tSTAR mlhs_node ',' mlhs_post
+                    {
+                      $$ = list3(0, $2, $4);
+                    }
+                | tSTAR
+                    {
+                      $$ = list2(0, new_nil(p));
+                    }
+                | tSTAR ',' mlhs_post
+                    {
+                      $$ = list3(0, new_nil(p), $3);
+                    }
+                ;
+
+mlhs_item       : mlhs_node
+                | tLPAREN mlhs_inner rparen
+                    {
+                      $$ = new_masgn(p, $2, NULL);
+                    }
+                ;
+
+mlhs_list       : mlhs_item ','
+                    {
+                      $$ = list1($1);
+                    }
+                | mlhs_list mlhs_item ','
+                    {
+                      $$ = push($1, $2);
+                    }
+                ;
+
+mlhs_post       : mlhs_item
+                    {
+                      $$ = list1($1);
+                    }
+                | mlhs_list mlhs_item
+                    {
+                      $$ = push($1, $2);
+                    }
+                ;
+
+mlhs_node       : variable
+                    {
+                      assignable(p, $1);
+                    }
+                | primary_value '[' opt_call_args ']'
+                    {
+                      $$ = new_call(p, $1, intern_lit("[]"), $3, '.');
+                    }
+                | primary_value call_op tIDENTIFIER
+                    {
+                      $$ = new_call(p, $1, $3, 0, $2);
+                    }
+                | primary_value tCOLON2 tIDENTIFIER
+                    {
+                      $$ = new_call(p, $1, $3, 0, tCOLON2);
+                    }
+                | primary_value call_op tCONSTANT
+                    {
+                      $$ = new_call(p, $1, $3, 0, $2);
+                    }
+                | primary_value tCOLON2 tCONSTANT
+                    {
+                      if (p->in_def || p->in_single)
+                        yyerror(p, "dynamic constant assignment");
+                      $$ = new_colon2(p, $1, $3);
+                    }
+                | tCOLON3 tCONSTANT
+                    {
+                      if (p->in_def || p->in_single)
+                        yyerror(p, "dynamic constant assignment");
+                      $$ = new_colon3(p, $2);
+                    }
+                | backref
+                    {
+                      backref_error(p, $1);
+                      $$ = 0;
+                    }
+                ;
+
+lhs             : variable
+                    {
+                      assignable(p, $1);
+                    }
+                | primary_value '[' opt_call_args ']'
+                    {
+                      $$ = new_call(p, $1, intern_lit("[]"), $3, '.');
+                    }
+                | primary_value call_op tIDENTIFIER
+                    {
+                      $$ = new_call(p, $1, $3, 0, $2);
+                    }
+                | primary_value tCOLON2 tIDENTIFIER
+                    {
+                      $$ = new_call(p, $1, $3, 0, tCOLON2);
+                    }
+                | primary_value call_op tCONSTANT
+                    {
+                      $$ = new_call(p, $1, $3, 0, $2);
+                    }
+                | primary_value tCOLON2 tCONSTANT
+                    {
+                      if (p->in_def || p->in_single)
+                        yyerror(p, "dynamic constant assignment");
+                      $$ = new_colon2(p, $1, $3);
+                    }
+                | tCOLON3 tCONSTANT
+                    {
+                      if (p->in_def || p->in_single)
+                        yyerror(p, "dynamic constant assignment");
+                      $$ = new_colon3(p, $2);
+                    }
+                | backref
+                    {
+                      backref_error(p, $1);
+                      $$ = 0;
+                    }
+                | tNUMPARAM
+                    {
+                      yyerror(p, "can't assign to numbered parameter");
+                    }
+                ;
+
+cname           : tIDENTIFIER
+                    {
+                      yyerror(p, "class/module name must be CONSTANT");
+                    }
+                | tCONSTANT
+                ;
+
+cpath           : tCOLON3 cname
+                    {
+                      $$ = cons((node*)1, nsym($2));
+                    }
+                | cname
+                    {
+                      $$ = cons((node*)0, nsym($1));
+                    }
+                | primary_value tCOLON2 cname
+                    {
+                      void_expr_error(p, $1);
+                      $$ = cons($1, nsym($3));
+                    }
+                ;
+
+fname           : tIDENTIFIER
+                | tCONSTANT
+                | tFID
+                | op
+                    {
+                      p->lstate = EXPR_ENDFN;
+                      $$ = $1;
+                    }
+                | reswords
+                    {
+                      p->lstate = EXPR_ENDFN;
+                      $$ = $<id>1;
+                    }
+                ;
+
+fsym            : fname
+                | basic_symbol
+                ;
+
+undef_list      : fsym
+                    {
+                      $$ = new_undef(p, $1);
+                    }
+                | undef_list ',' {p->lstate = EXPR_FNAME;} fsym
+                    {
+                      $$ = push($1, nsym($4));
+                    }
+                ;
+
+op              : '|'           { $$ = intern_lit("|");   }
+                | '^'           { $$ = intern_lit("^");   }
+                | '&'           { $$ = intern_lit("&");   }
+                | tCMP          { $$ = intern_lit("<=>"); }
+                | tEQ           { $$ = intern_lit("==");  }
+                | tEQQ          { $$ = intern_lit("==="); }
+                | tMATCH        { $$ = intern_lit("=~");  }
+                | tNMATCH       { $$ = intern_lit("!~");  }
+                | '>'           { $$ = intern_lit(">");   }
+                | tGEQ          { $$ = intern_lit(">=");  }
+                | '<'           { $$ = intern_lit("<");   }
+                | tLEQ          { $$ = intern_lit("<=");  }
+                | tNEQ          { $$ = intern_lit("!=");  }
+                | tLSHFT        { $$ = intern_lit("<<");  }
+                | tRSHFT        { $$ = intern_lit(">>");  }
+                | '+'           { $$ = intern_lit("+");   }
+                | '-'           { $$ = intern_lit("-");   }
+                | '*'           { $$ = intern_lit("*");   }
+                | tSTAR         { $$ = intern_lit("*");   }
+                | '/'           { $$ = intern_lit("/");   }
+                | '%'           { $$ = intern_lit("%");   }
+                | tPOW          { $$ = intern_lit("**");  }
+                | tDSTAR        { $$ = intern_lit("**");  }
+                | '!'           { $$ = intern_lit("!");   }
+                | '~'           { $$ = intern_lit("~");   }
+                | tUPLUS        { $$ = intern_lit("+@");  }
+                | tUMINUS       { $$ = intern_lit("-@");  }
+                | tAREF         { $$ = intern_lit("[]");  }
+                | tASET         { $$ = intern_lit("[]="); }
+                | '`'           { $$ = intern_lit("`");   }
+                ;
+
+reswords        : keyword__LINE__ | keyword__FILE__ | keyword__ENCODING__
+                | keyword_BEGIN | keyword_END
+                | keyword_alias | keyword_and | keyword_begin
+                | keyword_break | keyword_case | keyword_class | keyword_def
+                | keyword_do | keyword_else | keyword_elsif
+                | keyword_end | keyword_ensure | keyword_false
+                | keyword_for | keyword_in | keyword_module | keyword_next
+                | keyword_nil | keyword_not | keyword_or | keyword_redo
+                | keyword_rescue | keyword_retry | keyword_return | keyword_self
+                | keyword_super | keyword_then | keyword_true | keyword_undef
+                | keyword_when | keyword_yield | keyword_if | keyword_unless
+                | keyword_while | keyword_until
+                ;
+
+arg             : lhs '=' arg_rhs
+                    {
+                      $$ = new_asgn(p, $1, $3);
+                    }
+                | var_lhs tOP_ASGN arg_rhs
+                    {
+                      $$ = new_op_asgn(p, $1, $2, $3);
+                    }
+                | primary_value '[' opt_call_args ']' tOP_ASGN arg_rhs
+                    {
+                      $$ = new_op_asgn(p, new_call(p, $1, intern_lit("[]"), $3, '.'), $5, $6);
+                    }
+                | primary_value call_op tIDENTIFIER tOP_ASGN arg_rhs
+                    {
+                      $$ = new_op_asgn(p, new_call(p, $1, $3, 0, $2), $4, $5);
+                    }
+                | primary_value call_op tCONSTANT tOP_ASGN arg_rhs
+                    {
+                      $$ = new_op_asgn(p, new_call(p, $1, $3, 0, $2), $4, $5);
+                    }
+                | primary_value tCOLON2 tIDENTIFIER tOP_ASGN arg_rhs
+                    {
+                      $$ = new_op_asgn(p, new_call(p, $1, $3, 0, tCOLON2), $4, $5);
+                    }
+                | primary_value tCOLON2 tCONSTANT tOP_ASGN arg_rhs
+                    {
+                      yyerror(p, "constant re-assignment");
+                      $$ = new_begin(p, 0);
+                    }
+                | tCOLON3 tCONSTANT tOP_ASGN arg_rhs
+                    {
+                      yyerror(p, "constant re-assignment");
+                      $$ = new_begin(p, 0);
+                    }
+                | backref tOP_ASGN arg_rhs
+                    {
+                      backref_error(p, $1);
+                      $$ = new_begin(p, 0);
+                    }
+                | arg tDOT2 arg
+                    {
+                      $$ = new_dot2(p, $1, $3);
+                    }
+                | arg tDOT3 arg
+                    {
+                      $$ = new_dot3(p, $1, $3);
+                    }
+                | arg '+' arg
+                    {
+                      $$ = call_bin_op(p, $1, "+", $3);
+                    }
+                | arg '-' arg
+                    {
+                      $$ = call_bin_op(p, $1, "-", $3);
+                    }
+                | arg '*' arg
+                    {
+                      $$ = call_bin_op(p, $1, "*", $3);
+                    }
+                | arg '/' arg
+                    {
+                      $$ = call_bin_op(p, $1, "/", $3);
+                    }
+                | arg '%' arg
+                    {
+                      $$ = call_bin_op(p, $1, "%", $3);
+                    }
+                | arg tPOW arg
+                    {
+                      $$ = call_bin_op(p, $1, "**", $3);
+                    }
+                | tUMINUS_NUM tINTEGER tPOW arg
+                    {
+                      $$ = call_uni_op(p, call_bin_op(p, $2, "**", $4), "-@");
+                    }
+                | tUMINUS_NUM tFLOAT tPOW arg
+                    {
+                      $$ = call_uni_op(p, call_bin_op(p, $2, "**", $4), "-@");
+                    }
+                | tUPLUS arg
+                    {
+                      $$ = call_uni_op(p, $2, "+@");
+                    }
+                | tUMINUS arg
+                    {
+                      $$ = call_uni_op(p, $2, "-@");
+                    }
+                | arg '|' arg
+                    {
+                      $$ = call_bin_op(p, $1, "|", $3);
+                    }
+                | arg '^' arg
+                    {
+                      $$ = call_bin_op(p, $1, "^", $3);
+                    }
+                | arg '&' arg
+                    {
+                      $$ = call_bin_op(p, $1, "&", $3);
+                    }
+                | arg tCMP arg
+                    {
+                      $$ = call_bin_op(p, $1, "<=>", $3);
+                    }
+                | arg '>' arg
+                    {
+                      $$ = call_bin_op(p, $1, ">", $3);
+                    }
+                | arg tGEQ arg
+                    {
+                      $$ = call_bin_op(p, $1, ">=", $3);
+                    }
+                | arg '<' arg
+                    {
+                      $$ = call_bin_op(p, $1, "<", $3);
+                    }
+                | arg tLEQ arg
+                    {
+                      $$ = call_bin_op(p, $1, "<=", $3);
+                    }
+                | arg tEQ arg
+                    {
+                      $$ = call_bin_op(p, $1, "==", $3);
+                    }
+                | arg tEQQ arg
+                    {
+                      $$ = call_bin_op(p, $1, "===", $3);
+                    }
+                | arg tNEQ arg
+                    {
+                      $$ = call_bin_op(p, $1, "!=", $3);
+                    }
+                | arg tMATCH arg
+                    {
+                      $$ = call_bin_op(p, $1, "=~", $3);
+                    }
+                | arg tNMATCH arg
+                    {
+                      $$ = call_bin_op(p, $1, "!~", $3);
+                    }
+                | '!' arg
+                    {
+                      $$ = call_uni_op(p, cond($2), "!");
+                    }
+                | '~' arg
+                    {
+                      $$ = call_uni_op(p, cond($2), "~");
+                    }
+                | arg tLSHFT arg
+                    {
+                      $$ = call_bin_op(p, $1, "<<", $3);
+                    }
+                | arg tRSHFT arg
+                    {
+                      $$ = call_bin_op(p, $1, ">>", $3);
+                    }
+                | arg tANDOP arg
+                    {
+                      $$ = new_and(p, $1, $3);
+                    }
+                | arg tOROP arg
+                    {
+                      $$ = new_or(p, $1, $3);
+                    }
+                | arg '?' arg opt_nl ':' arg
+                    {
+                      $$ = new_if(p, cond($1), $3, $6);
+                    }
+                | arg '?' arg opt_nl tLABEL_TAG arg
+                    {
+                      $$ = new_if(p, cond($1), $3, $6);
+                    }
+                | primary
+                    {
+                      $$ = $1;
+                    }
+                ;
+
+aref_args       : none
+                | args trailer
+                    {
+                      $$ = $1;
+                      NODE_LINENO($$, $1);
+                    }
+                | args comma assocs trailer
+                    {
+                      $$ = push($1, new_kw_hash(p, $3));
+                    }
+                | assocs trailer
+                    {
+                      $$ = cons(new_kw_hash(p, $1), 0);
+                      NODE_LINENO($$, $1);
+                    }
+                ;
+
+arg_rhs         : arg %prec tOP_ASGN
+                    {
+                      $$ = $1;
+                    }
+                | arg modifier_rescue arg
+                    {
+                      void_expr_error(p, $1);
+                      void_expr_error(p, $3);
+                      $$ = new_mod_rescue(p, $1, $3);
+                    }
+                ;
+
+paren_args      : '(' opt_call_args ')'
+                    {
+                      $$ = $2;
+                    }
+                ;
+
+opt_paren_args  : none
+                | paren_args
+                ;
+
+opt_call_args   : none
+                | call_args opt_terms
+                | args comma
+                    {
+                      $$ = cons($1,0);
+                      NODE_LINENO($$, $1);
+                    }
+                | args comma assocs comma
+                    {
+                      $$ = cons(push($1, new_kw_hash(p, $3)), 0);
+                      NODE_LINENO($$, $1);
+                    }
+                | assocs comma
+                    {
+                      $$ = cons(list1(new_kw_hash(p, $1)), 0);
+                      NODE_LINENO($$, $1);
+                    }
+                ;
+
+call_args       : command
+                    {
+                      void_expr_error(p, $1);
+                      $$ = cons(list1($1), 0);
+                      NODE_LINENO($$, $1);
+                    }
+                | args opt_block_arg
+                    {
+                      $$ = cons($1, $2);
+                      NODE_LINENO($$, $1);
+                    }
+                | assocs opt_block_arg
+                    {
+                      $$ = cons(list1(new_kw_hash(p, $1)), $2);
+                      NODE_LINENO($$, $1);
+                    }
+                | args comma assocs opt_block_arg
+                    {
+                      $$ = cons(push($1, new_kw_hash(p, $3)), $4);
+                      NODE_LINENO($$, $1);
+                    }
+                | block_arg
+                    {
+                      $$ = cons(0, $1);
+                      NODE_LINENO($$, $1);
+                    }
+                ;
+
+command_args    :  {
+                      $<stack>$ = p->cmdarg_stack;
+                      CMDARG_PUSH(1);
+                    }
+                  call_args
+                    {
+                      p->cmdarg_stack = $<stack>1;
+                      $$ = $2;
+                    }
+                ;
+
+block_arg       : tAMPER arg
+                    {
+                      $$ = new_block_arg(p, $2);
+                    }
+                ;
+
+opt_block_arg   : comma block_arg
+                    {
+                      $$ = $2;
+                    }
+                | none
+                    {
+                      $$ = 0;
+                    }
+                ;
+
+comma           : ','
+                | ','  opt_nl heredoc_bodies
+                ;
+
+args            : arg
+                    {
+                      void_expr_error(p, $1);
+                      $$ = cons($1, 0);
+                      NODE_LINENO($$, $1);
+                    }
+                | tSTAR arg
+                    {
+                      void_expr_error(p, $2);
+                      $$ = cons(new_splat(p, $2), 0);
+                      NODE_LINENO($$, $2);
+                    }
+                | args comma arg
+                    {
+                      void_expr_error(p, $3);
+                      $$ = push($1, $3);
+                    }
+                | args comma tSTAR arg
+                    {
+                      void_expr_error(p, $4);
+                      $$ = push($1, new_splat(p, $4));
+                    }
+                ;
+
+mrhs            : args comma arg
+                    {
+                      void_expr_error(p, $3);
+                      $$ = push($1, $3);
+                    }
+                | args comma tSTAR arg
+                    {
+                      void_expr_error(p, $4);
+                      $$ = push($1, new_splat(p, $4));
+                    }
+                | tSTAR arg
+                    {
+                      void_expr_error(p, $2);
+                      $$ = list1(new_splat(p, $2));
+                    }
+                ;
+
+primary         : literal
+                | string
+                | xstring
+                | regexp
+                | heredoc
+                | var_ref
+                | backref
+                | tNUMPARAM
+                    {
+                      $$ = new_nvar(p, $1);
+                    }
+                | tFID
+                    {
+                      $$ = new_fcall(p, $1, 0);
+                    }
+                | keyword_begin
+                    {
+                      $<stack>$ = p->cmdarg_stack;
+                      p->cmdarg_stack = 0;
+                    }
+                  bodystmt
+                  keyword_end
+                    {
+                      p->cmdarg_stack = $<stack>2;
+                      $$ = $3;
+                    }
+                | tLPAREN_ARG
+                    {
+                      $<stack>$ = p->cmdarg_stack;
+                      p->cmdarg_stack = 0;
+                    }
+                  stmt {p->lstate = EXPR_ENDARG;} rparen
+                    {
+                      p->cmdarg_stack = $<stack>2;
+                      $$ = $3;
+                    }
+                | tLPAREN_ARG {p->lstate = EXPR_ENDARG;} rparen
+                    {
+                      $$ = new_nil(p);
+                    }
+                | tLPAREN compstmt ')'
+                    {
+                      $$ = $2;
+                    }
+                | primary_value tCOLON2 tCONSTANT
+                    {
+                      $$ = new_colon2(p, $1, $3);
+                    }
+                | tCOLON3 tCONSTANT
+                    {
+                      $$ = new_colon3(p, $2);
+                    }
+                | tLBRACK aref_args ']'
+                    {
+                      $$ = new_array(p, $2);
+                      NODE_LINENO($$, $2);
+                    }
+                | tLBRACE assoc_list '}'
+                    {
+                      $$ = new_hash(p, $2);
+                      NODE_LINENO($$, $2);
+                    }
+                | keyword_return
+                    {
+                      $$ = new_return(p, 0);
+                    }
+                | keyword_yield opt_paren_args
+                    {
+                      $$ = new_yield(p, $2);
+                    }
+                | keyword_not '(' expr rparen
+                    {
+                      $$ = call_uni_op(p, cond($3), "!");
+                    }
+                | keyword_not '(' rparen
+                    {
+                      $$ = call_uni_op(p, new_nil(p), "!");
+                    }
+                | operation brace_block
+                    {
+                      $$ = new_fcall(p, $1, cons(0, $2));
+                    }
+                | method_call
+                | method_call brace_block
+                    {
+                      call_with_block(p, $1, $2);
+                      $$ = $1;
+                    }
+                | tLAMBDA
+                    {
+                      local_nest(p);
+                      $<num>$ = p->lpar_beg;
+                      p->lpar_beg = ++p->paren_nest;
+                    }
+                  f_larglist
+                    {
+                      $<stack>$ = p->cmdarg_stack;
+                      p->cmdarg_stack = 0;
+                    }
+                  lambda_body
+                    {
+                      p->lpar_beg = $<num>2;
+                      $$ = new_lambda(p, $3, $5);
+                      local_unnest(p);
+                      p->cmdarg_stack = $<stack>4;
+                      CMDARG_LEXPOP();
+                    }
+                | keyword_if expr_value then
+                  compstmt
+                  if_tail
+                  keyword_end
+                    {
+                      $$ = new_if(p, cond($2), $4, $5);
+                      SET_LINENO($$, $1);
+                    }
+                | keyword_unless expr_value then
+                  compstmt
+                  opt_else
+                  keyword_end
+                    {
+                      $$ = new_unless(p, cond($2), $4, $5);
+                      SET_LINENO($$, $1);
+                    }
+                | keyword_while {COND_PUSH(1);} expr_value do {COND_POP();}
+                  compstmt
+                  keyword_end
+                    {
+                      $$ = new_while(p, cond($3), $6);
+                      SET_LINENO($$, $1);
+                    }
+                | keyword_until {COND_PUSH(1);} expr_value do {COND_POP();}
+                  compstmt
+                  keyword_end
+                    {
+                      $$ = new_until(p, cond($3), $6);
+                      SET_LINENO($$, $1);
+                    }
+                | keyword_case expr_value opt_terms
+                  case_body
+                  keyword_end
+                    {
+                      $$ = new_case(p, $2, $4);
+                    }
+                | keyword_case opt_terms case_body keyword_end
+                    {
+                      $$ = new_case(p, 0, $3);
+                    }
+                | keyword_for for_var keyword_in
+                  {COND_PUSH(1);}
+                  expr_value do
+                  {COND_POP();}
+                  compstmt
+                  keyword_end
+                    {
+                      $$ = new_for(p, $2, $5, $8);
+                      SET_LINENO($$, $1);
+                    }
+                | keyword_class
+                  cpath superclass
+                    {
+                      if (p->in_def || p->in_single)
+                        yyerror(p, "class definition in method body");
+                      $<nd>$ = local_switch(p);
+                      nvars_block(p);
+                    }
+                  bodystmt
+                  keyword_end
+                    {
+                      $$ = new_class(p, $2, $3, $5);
+                      SET_LINENO($$, $1);
+                      local_resume(p, $<nd>4);
+                      nvars_unnest(p);
+                    }
+                | keyword_class
+                  tLSHFT expr
+                    {
+                      $<num>$ = p->in_def;
+                      p->in_def = 0;
+                    }
+                  term
+                    {
+                      $<nd>$ = cons(local_switch(p), nint(p->in_single));
+                      nvars_block(p);
+                      p->in_single = 0;
+                    }
+                  bodystmt
+                  keyword_end
+                    {
+                      $$ = new_sclass(p, $3, $7);
+                      SET_LINENO($$, $1);
+                      local_resume(p, $<nd>6->car);
+                      nvars_unnest(p);
+                      p->in_def = $<num>4;
+                      p->in_single = intn($<nd>6->cdr);
+                    }
+                | keyword_module
+                  cpath
+                    {
+                      if (p->in_def || p->in_single)
+                        yyerror(p, "module definition in method body");
+                      $<nd>$ = local_switch(p);
+                      nvars_block(p);
+                    }
+                  bodystmt
+                  keyword_end
+                    {
+                      $$ = new_module(p, $2, $4);
+                      SET_LINENO($$, $1);
+                      local_resume(p, $<nd>3);
+                      nvars_unnest(p);
+                    }
+                | keyword_def fname
+                    {
+                      $<stack>$ = p->cmdarg_stack;
+                      p->cmdarg_stack = 0;
+                    }
+                    {
+                      p->in_def++;
+                      $<nd>$ = local_switch(p);
+                      nvars_block(p);
+                    }
+                  f_arglist
+                  bodystmt
+                  keyword_end
+                    {
+                      $$ = new_def(p, $2, $5, $6);
+                      SET_LINENO($$, $1);
+                      local_resume(p, $<nd>4);
+                      nvars_unnest(p);
+                      p->in_def--;
+                      p->cmdarg_stack = $<stack>3;
+                    }
+                | keyword_def singleton dot_or_colon
+                    {
+                      p->lstate = EXPR_FNAME;
+                      $<stack>$ = p->cmdarg_stack;
+                      p->cmdarg_stack = 0;
+                    }
+                    fname
+                    {
+                      p->in_single++;
+                      p->lstate = EXPR_ENDFN; /* force for args */
+                      $<nd>$ = local_switch(p);
+                      nvars_block(p);
+                    }
+                  f_arglist
+                  bodystmt
+                  keyword_end
+                    {
+                      $$ = new_sdef(p, $2, $5, $7, $8);
+                      SET_LINENO($$, $1);
+                      local_resume(p, $<nd>6);
+                      nvars_unnest(p);
+                      p->in_single--;
+                      p->cmdarg_stack = $<stack>4;
+                    }
+                | keyword_break
+                    {
+                      $$ = new_break(p, 0);
+                    }
+                | keyword_next
+                    {
+                      $$ = new_next(p, 0);
+                    }
+                | keyword_redo
+                    {
+                      $$ = new_redo(p);
+                    }
+                | keyword_retry
+                    {
+                      $$ = new_retry(p);
+                    }
+                ;
+
+primary_value   : primary
+                    {
+                      $$ = $1;
+                      if (!$$) $$ = new_nil(p);
+                    }
+                ;
+
+then            : term
+                | keyword_then
+                | term keyword_then
+                ;
+
+do              : term
+                | keyword_do_cond
+                ;
+
+if_tail         : opt_else
+                | keyword_elsif expr_value then
+                  compstmt
+                  if_tail
+                    {
+                      $$ = new_if(p, cond($2), $4, $5);
+                    }
+                ;
+
+opt_else        : none
+                | keyword_else compstmt
+                    {
+                      $$ = $2;
+                    }
+                ;
+
+for_var         : lhs
+                    {
+                      $$ = list1(list1($1));
+                    }
+                | mlhs
+                ;
+
+f_margs         : f_arg
+                    {
+                      $$ = list3($1,0,0);
+                    }
+                | f_arg ',' tSTAR f_norm_arg
+                    {
+                      $$ = list3($1, new_arg(p, $4), 0);
+                    }
+                | f_arg ',' tSTAR f_norm_arg ',' f_arg
+                    {
+                      $$ = list3($1, new_arg(p, $4), $6);
+                    }
+                | f_arg ',' tSTAR
+                    {
+                      local_add_f(p, 0);
+                      $$ = list3($1, (node*)-1, 0);
+                    }
+                | f_arg ',' tSTAR ',' f_arg
+                    {
+                      $$ = list3($1, (node*)-1, $5);
+                    }
+                | tSTAR f_norm_arg
+                    {
+                      $$ = list3(0, new_arg(p, $2), 0);
+                    }
+                | tSTAR f_norm_arg ',' f_arg
+                    {
+                      $$ = list3(0, new_arg(p, $2), $4);
+                    }
+                | tSTAR
+                    {
+                      local_add_f(p, 0);
+                      $$ = list3(0, (node*)-1, 0);
+                    }
+                | tSTAR ','
+                    {
+                      local_add_f(p, 0);
+                    }
+                  f_arg
+                    {
+                      $$ = list3(0, (node*)-1, $4);
+                    }
+                ;
+
+block_args_tail : f_block_kwarg ',' f_kwrest opt_f_block_arg
+                    {
+                      $$ = new_args_tail(p, $1, $3, $4);
+                    }
+                | f_block_kwarg opt_f_block_arg
+                    {
+                      $$ = new_args_tail(p, $1, 0, $2);
+                    }
+                | f_kwrest opt_f_block_arg
+                    {
+                      $$ = new_args_tail(p, 0, $1, $2);
+                    }
+                | f_block_arg
+                    {
+                      $$ = new_args_tail(p, 0, 0, $1);
+                    }
+                ;
+
+opt_block_args_tail : ',' block_args_tail
+                    {
+                      $$ = $2;
+                    }
+                | /* none */
+                    {
+                      $$ = new_args_tail(p, 0, 0, 0);
+                    }
+                ;
+
+block_param     : f_arg ',' f_block_optarg ',' f_rest_arg opt_block_args_tail
+                    {
+                      $$ = new_args(p, $1, $3, $5, 0, $6);
+                    }
+                | f_arg ',' f_block_optarg ',' f_rest_arg ',' f_arg opt_block_args_tail
+                    {
+                      $$ = new_args(p, $1, $3, $5, $7, $8);
+                    }
+                | f_arg ',' f_block_optarg opt_block_args_tail
+                    {
+                      $$ = new_args(p, $1, $3, 0, 0, $4);
+                    }
+                | f_arg ',' f_block_optarg ',' f_arg opt_block_args_tail
+                    {
+                      $$ = new_args(p, $1, $3, 0, $5, $6);
+                    }
+                | f_arg ',' f_rest_arg opt_block_args_tail
+                    {
+                      $$ = new_args(p, $1, 0, $3, 0, $4);
+                    }
+                | f_arg ',' opt_block_args_tail
+                    {
+                      $$ = new_args(p, $1, 0, 0, 0, $3);
+                    }
+                | f_arg ',' f_rest_arg ',' f_arg opt_block_args_tail
+                    {
+                      $$ = new_args(p, $1, 0, $3, $5, $6);
+                    }
+                | f_arg opt_block_args_tail
+                    {
+                      $$ = new_args(p, $1, 0, 0, 0, $2);
+                    }
+                | f_block_optarg ',' f_rest_arg opt_block_args_tail
+                    {
+                      $$ = new_args(p, 0, $1, $3, 0, $4);
+                    }
+                | f_block_optarg ',' f_rest_arg ',' f_arg opt_block_args_tail
+                    {
+                      $$ = new_args(p, 0, $1, $3, $5, $6);
+                    }
+                | f_block_optarg opt_block_args_tail
+                    {
+                      $$ = new_args(p, 0, $1, 0, 0, $2);
+                    }
+                | f_block_optarg ',' f_arg opt_block_args_tail
+                    {
+                      $$ = new_args(p, 0, $1, 0, $3, $4);
+                    }
+                | f_rest_arg opt_block_args_tail
+                    {
+                      $$ = new_args(p, 0, 0, $1, 0, $2);
+                    }
+                | f_rest_arg ',' f_arg opt_block_args_tail
+                    {
+                      $$ = new_args(p, 0, 0, $1, $3, $4);
+                    }
+                | block_args_tail
+                    {
+                      $$ = new_args(p, 0, 0, 0, 0, $1);
+                    }
+                ;
+
+opt_block_param : none
+                    {
+                      local_add_blk(p, 0);
+                      $$ = 0;
+                    }
+                | block_param_def
+                   {
+                      p->cmd_start = TRUE;
+                      $$ = $1;
+                    }
+                ;
+
+block_param_def : '|' {local_add_blk(p, 0);} opt_bv_decl '|'
+                    {
+                      $$ = 0;
+                    }
+                | tOROP
+                    {
+                      local_add_blk(p, 0);
+                      $$ = 0;
+                    }
+                | '|' block_param opt_bv_decl '|'
+                    {
+                      $$ = $2;
+                    }
+                ;
+
+
+opt_bv_decl     : opt_nl
+                    {
+                      $$ = 0;
+                    }
+                | opt_nl ';' bv_decls opt_nl
+                    {
+                      $$ = 0;
+                    }
+                ;
+
+bv_decls        : bvar
+                | bv_decls ',' bvar
+                ;
+
+bvar            : tIDENTIFIER
+                    {
+                      local_add_f(p, $1);
+                      new_bv(p, $1);
+                    }
+                | f_bad_arg
+                ;
+
+f_larglist      : '(' f_args opt_bv_decl ')'
+                    {
+                      $$ = $2;
+                    }
+                | f_args
+                    {
+                      $$ = $1;
+                    }
+                ;
+
+lambda_body     : tLAMBEG compstmt '}'
+                    {
+                      $$ = $2;
+                    }
+                | keyword_do_LAMBDA bodystmt keyword_end
+                    {
+                      $$ = $2;
+                    }
+                ;
+
+do_block        : keyword_do_block
+                    {
+                      local_nest(p);
+                      nvars_nest(p);
+                    }
+                  opt_block_param
+                  bodystmt
+                  keyword_end
+                    {
+                      $$ = new_block(p,$3,$4);
+                      local_unnest(p);
+                      nvars_unnest(p);
+                    }
+                ;
+
+block_call      : command do_block
+                    {
+                      if ($1->car == (node*)NODE_YIELD) {
+                        yyerror(p, "block given to yield");
+                      }
+                      else {
+                        call_with_block(p, $1, $2);
+                      }
+                      $$ = $1;
+                    }
+                | block_call call_op2 operation2 opt_paren_args
+                    {
+                      $$ = new_call(p, $1, $3, $4, $2);
+                    }
+                | block_call call_op2 operation2 opt_paren_args brace_block
+                    {
+                      $$ = new_call(p, $1, $3, $4, $2);
+                      call_with_block(p, $$, $5);
+                    }
+                | block_call call_op2 operation2 command_args do_block
+                    {
+                      $$ = new_call(p, $1, $3, $4, $2);
+                      call_with_block(p, $$, $5);
+                    }
+                ;
+
+method_call     : operation paren_args
+                    {
+                      $$ = new_fcall(p, $1, $2);
+                    }
+                | primary_value call_op operation2 opt_paren_args
+                    {
+                      $$ = new_call(p, $1, $3, $4, $2);
+                    }
+                | primary_value tCOLON2 operation2 paren_args
+                    {
+                      $$ = new_call(p, $1, $3, $4, tCOLON2);
+                    }
+                | primary_value tCOLON2 operation3
+                    {
+                      $$ = new_call(p, $1, $3, 0, tCOLON2);
+                    }
+                | primary_value call_op paren_args
+                    {
+                      $$ = new_call(p, $1, intern_lit("call"), $3, $2);
+                    }
+                | primary_value tCOLON2 paren_args
+                    {
+                      $$ = new_call(p, $1, intern_lit("call"), $3, tCOLON2);
+                    }
+                | keyword_super paren_args
+                    {
+                      $$ = new_super(p, $2);
+                    }
+                | keyword_super
+                    {
+                      $$ = new_zsuper(p);
+                    }
+                | primary_value '[' opt_call_args ']'
+                    {
+                      $$ = new_call(p, $1, intern_lit("[]"), $3, '.');
+                    }
+                ;
+
+brace_block     : '{'
+                    {
+                      local_nest(p);
+                      nvars_nest(p);
+                      $<num>$ = p->lineno;
+                    }
+                  opt_block_param
+                  compstmt '}'
+                    {
+                      $$ = new_block(p,$3,$4);
+                      SET_LINENO($$, $<num>2);
+                      local_unnest(p);
+                      nvars_unnest(p);
+                    }
+                | keyword_do
+                    {
+                      local_nest(p);
+                      nvars_nest(p);
+                      $<num>$ = p->lineno;
+                    }
+                  opt_block_param
+                  bodystmt keyword_end
+                    {
+                      $$ = new_block(p,$3,$4);
+                      SET_LINENO($$, $<num>2);
+                      local_unnest(p);
+                      nvars_unnest(p);
+                    }
+                ;
+
+case_body       : keyword_when args then
+                  compstmt
+                  cases
+                    {
+                      $$ = cons(cons($2, $4), $5);
+                    }
+                ;
+
+cases           : opt_else
+                    {
+                      if ($1) {
+                        $$ = cons(cons(0, $1), 0);
+                      }
+                      else {
+                        $$ = 0;
+                      }
+                    }
+                | case_body
+                ;
+
+opt_rescue      : keyword_rescue exc_list exc_var then
+                  compstmt
+                  opt_rescue
+                    {
+                      $$ = list1(list3($2, $3, $5));
+                      if ($6) $$ = append($$, $6);
+                    }
+                | none
+                ;
+
+exc_list        : arg
+                    {
+                        $$ = list1($1);
+                    }
+                | mrhs
+                | none
+                ;
+
+exc_var         : tASSOC lhs
+                    {
+                      $$ = $2;
+                    }
+                | none
+                ;
+
+opt_ensure      : keyword_ensure compstmt
+                    {
+                      $$ = $2;
+                    }
+                | none
+                ;
+
+literal         : numeric
+                | symbol
+                | words
+                | symbols
+                ;
+
+string          : string_fragment
+                | string string_fragment
+                    {
+                      $$ = concat_string(p, $1, $2);
+                    }
+                ;
+
+string_fragment : tCHAR
+                | tSTRING
+                | tSTRING_BEG tSTRING
+                    {
+                      $$ = $2;
+                    }
+                | tSTRING_BEG string_rep tSTRING
+                    {
+                      $$ = new_dstr(p, push($2, $3));
+                    }
+                ;
+
+string_rep      : string_interp
+                | string_rep string_interp
+                    {
+                      $$ = append($1, $2);
+                    }
+                ;
+
+string_interp   : tSTRING_MID
+                    {
+                      $$ = list1($1);
+                    }
+                | tSTRING_PART
+                    {
+                      $<nd>$ = p->lex_strterm;
+                      p->lex_strterm = NULL;
+                    }
+                  compstmt
+                  '}'
+                    {
+                      p->lex_strterm = $<nd>2;
+                      $$ = list2($1, $3);
+                    }
+                | tLITERAL_DELIM
+                    {
+                      $$ = list1(new_literal_delim(p));
+                    }
+                | tHD_LITERAL_DELIM heredoc_bodies
+                    {
+                      $$ = list1(new_literal_delim(p));
+                    }
+                ;
+
+xstring         : tXSTRING_BEG tXSTRING
+                    {
+                        $$ = $2;
+                    }
+                | tXSTRING_BEG string_rep tXSTRING
+                    {
+                      $$ = new_dxstr(p, push($2, $3));
+                    }
+                ;
+
+regexp          : tREGEXP_BEG tREGEXP
+                    {
+                        $$ = $2;
+                    }
+                | tREGEXP_BEG string_rep tREGEXP
+                    {
+                      $$ = new_dregx(p, $2, $3);
+                    }
+                ;
+
+heredoc         : tHEREDOC_BEG
+                ;
+
+heredoc_bodies  : heredoc_body
+                | heredoc_bodies heredoc_body
+                ;
+
+heredoc_body    : tHEREDOC_END
+                    {
+                      parser_heredoc_info * inf = parsing_heredoc_inf(p);
+                      inf->doc = push(inf->doc, new_str(p, "", 0));
+                      heredoc_end(p);
+                    }
+                | heredoc_string_rep tHEREDOC_END
+                    {
+                      heredoc_end(p);
+                    }
+                ;
+
+heredoc_string_rep : heredoc_string_interp
+                   | heredoc_string_rep heredoc_string_interp
+                   ;
+
+heredoc_string_interp : tHD_STRING_MID
+                    {
+                      parser_heredoc_info * inf = parsing_heredoc_inf(p);
+                      inf->doc = push(inf->doc, $1);
+                      heredoc_treat_nextline(p);
+                    }
+                | tHD_STRING_PART
+                    {
+                      $<nd>$ = p->lex_strterm;
+                      p->lex_strterm = NULL;
+                    }
+                  compstmt
+                  '}'
+                    {
+                      parser_heredoc_info * inf = parsing_heredoc_inf(p);
+                      p->lex_strterm = $<nd>2;
+                      inf->doc = push(push(inf->doc, $1), $3);
+                    }
+                ;
+
+words           : tWORDS_BEG tSTRING
+                    {
+                      $$ = new_words(p, list1($2));
+                    }
+                | tWORDS_BEG string_rep tSTRING
+                    {
+                      $$ = new_words(p, push($2, $3));
+                    }
+                ;
+
+
+symbol          : basic_symbol
+                    {
+                      p->lstate = EXPR_ENDARG;
+                      $$ = new_sym(p, $1);
+                    }
+                | tSYMBEG tSTRING_BEG string_rep tSTRING
+                    {
+                      p->lstate = EXPR_ENDARG;
+                      $$ = new_dsym(p, new_dstr(p, push($3, $4)));
+                    }
+                ;
+
+basic_symbol    : tSYMBEG sym
+                    {
+                      $$ = $2;
+                    }
+                ;
+
+sym             : fname
+                | tIVAR
+                | tGVAR
+                | tCVAR
+                | tSTRING
+                    {
+                      $$ = new_strsym(p, $1);
+                    }
+                | tSTRING_BEG tSTRING
+                    {
+                      $$ = new_strsym(p, $2);
+                    }
+                ;
+
+symbols         : tSYMBOLS_BEG tSTRING
+                    {
+                      $$ = new_symbols(p, list1($2));
+                    }
+                | tSYMBOLS_BEG string_rep tSTRING
+                    {
+                      $$ = new_symbols(p, push($2, $3));
+                    }
+                ;
+
+numeric         : tINTEGER
+                | tFLOAT
+                | tUMINUS_NUM tINTEGER          %prec tLOWEST
+                    {
+                      $$ = negate_lit(p, $2);
+                    }
+                | tUMINUS_NUM tFLOAT            %prec tLOWEST
+                    {
+                      $$ = negate_lit(p, $2);
+                    }
+                ;
+
+variable        : tIDENTIFIER
+                    {
+                      $$ = new_lvar(p, $1);
+                    }
+                | tIVAR
+                    {
+                      $$ = new_ivar(p, $1);
+                    }
+                | tGVAR
+                    {
+                      $$ = new_gvar(p, $1);
+                    }
+                | tCVAR
+                    {
+                      $$ = new_cvar(p, $1);
+                    }
+                | tCONSTANT
+                    {
+                      $$ = new_const(p, $1);
+                    }
+                ;
+
+var_lhs         : variable
+                    {
+                      assignable(p, $1);
+                    }
+                | tNUMPARAM
+                    {
+                      yyerror(p, "can't assign to numbered parameter");
+                    }
+                ;
+
+var_ref         : variable
+                    {
+                      $$ = var_reference(p, $1);
+                    }
+                | keyword_nil
+                    {
+                      $$ = new_nil(p);
+                    }
+                | keyword_self
+                    {
+                      $$ = new_self(p);
+                    }
+                | keyword_true
+                    {
+                      $$ = new_true(p);
+                    }
+                | keyword_false
+                    {
+                      $$ = new_false(p);
+                    }
+                | keyword__FILE__
+                    {
+                      const char *fn = mrb_sym_name_len(p->mrb, p->filename_sym, NULL);
+                      if (!fn) {
+                        fn = "(null)";
+                      }
+                      $$ = new_str(p, fn, strlen(fn));
+                    }
+                | keyword__LINE__
+                    {
+                      char buf[16];
+
+                      dump_int(p->lineno, buf);
+                      $$ = new_int(p, buf, 10, 0);
+                    }
+                | keyword__ENCODING__
+                    {
+#ifdef MRB_UTF8_STRING
+                      const char *enc = "UTF-8";
+#else
+                      const char *enc = "ASCII-8BIT";
+#endif
+                      $$ = new_str(p, enc, strlen(enc));
+                    }
+                ;
+
+backref         : tNTH_REF
+                | tBACK_REF
+                ;
+
+superclass      : /* term */
+                    {
+                      $$ = 0;
+                    }
+                | '<'
+                    {
+                      p->lstate = EXPR_BEG;
+                      p->cmd_start = TRUE;
+                    }
+                  expr_value term
+                    {
+                      $$ = $3;
+                    } /*
+                | error term
+                    {
+                      yyerrok;
+                      $$ = 0;
+                    } */
+                ;
+
+f_arglist       : '(' f_args rparen
+                    {
+                      $$ = $2;
+                      p->lstate = EXPR_BEG;
+                      p->cmd_start = TRUE;
+                    }
+                | f_args term
+                    {
+                      $$ = $1;
+                    }
+                ;
+
+f_label         : tIDENTIFIER tLABEL_TAG
+                    {
+                      local_nest(p);
+                    }
+                ;
+
+f_kw            : f_label arg
+                    {
+                      void_expr_error(p, $2);
+                      $$ = new_kw_arg(p, $1, cons($2, locals_node(p)));
+                      local_unnest(p);
+                    }
+                | f_label
+                    {
+                      $$ = new_kw_arg(p, $1, 0);
+                      local_unnest(p);
+                    }
+                ;
+
+f_block_kw      : f_label primary_value
+                    {
+                      $$ = new_kw_arg(p, $1, cons($2, locals_node(p)));
+                      local_unnest(p);
+                    }
+                | f_label
+                    {
+                      $$ = new_kw_arg(p, $1, 0);
+                      local_unnest(p);
+                    }
+                ;
+
+f_block_kwarg   : f_block_kw
+                    {
+                      $$ = list1($1);
+                    }
+                | f_block_kwarg ',' f_block_kw
+                    {
+                      $$ = push($1, $3);
+                    }
+                ;
+
+f_kwarg         : f_kw
+                    {
+                      $$ = list1($1);
+                    }
+                | f_kwarg ',' f_kw
+                    {
+                      $$ = push($1, $3);
+                    }
+                ;
+
+kwrest_mark     : tPOW
+                | tDSTAR
+                ;
+
+f_kwrest        : kwrest_mark tIDENTIFIER
+                    {
+                      $$ = cons((node*)NODE_KW_REST_ARGS, nsym($2));
+                    }
+                | kwrest_mark
+                    {
+                      $$ = cons((node*)NODE_KW_REST_ARGS, 0);
+                    }
+                ;
+
+args_tail       : f_kwarg ',' f_kwrest opt_f_block_arg
+                    {
+                      $$ = new_args_tail(p, $1, $3, $4);
+                    }
+                | f_kwarg opt_f_block_arg
+                    {
+                      $$ = new_args_tail(p, $1, 0, $2);
+                    }
+                | f_kwrest opt_f_block_arg
+                    {
+                      $$ = new_args_tail(p, 0, $1, $2);
+                    }
+                | f_block_arg
+                    {
+                      $$ = new_args_tail(p, 0, 0, $1);
+                    }
+                ;
+
+opt_args_tail   : ',' args_tail
+                    {
+                      $$ = $2;
+                    }
+                | /* none */
+                    {
+                      $$ = new_args_tail(p, 0, 0, 0);
+                    }
+                ;
+
+f_args          : f_arg ',' f_optarg ',' f_rest_arg opt_args_tail
+                    {
+                      $$ = new_args(p, $1, $3, $5, 0, $6);
+                    }
+                | f_arg ',' f_optarg ',' f_rest_arg ',' f_arg opt_args_tail
+                    {
+                      $$ = new_args(p, $1, $3, $5, $7, $8);
+                    }
+                | f_arg ',' f_optarg opt_args_tail
+                    {
+                      $$ = new_args(p, $1, $3, 0, 0, $4);
+                    }
+                | f_arg ',' f_optarg ',' f_arg opt_args_tail
+                    {
+                      $$ = new_args(p, $1, $3, 0, $5, $6);
+                    }
+                | f_arg ',' f_rest_arg opt_args_tail
+                    {
+                      $$ = new_args(p, $1, 0, $3, 0, $4);
+                    }
+                | f_arg ',' f_rest_arg ',' f_arg opt_args_tail
+                    {
+                      $$ = new_args(p, $1, 0, $3, $5, $6);
+                    }
+                | f_arg opt_args_tail
+                    {
+                      $$ = new_args(p, $1, 0, 0, 0, $2);
+                    }
+                | f_optarg ',' f_rest_arg opt_args_tail
+                    {
+                      $$ = new_args(p, 0, $1, $3, 0, $4);
+                    }
+                | f_optarg ',' f_rest_arg ',' f_arg opt_args_tail
+                    {
+                      $$ = new_args(p, 0, $1, $3, $5, $6);
+                    }
+                | f_optarg opt_args_tail
+                    {
+                      $$ = new_args(p, 0, $1, 0, 0, $2);
+                    }
+                | f_optarg ',' f_arg opt_args_tail
+                    {
+                      $$ = new_args(p, 0, $1, 0, $3, $4);
+                    }
+                | f_rest_arg opt_args_tail
+                    {
+                      $$ = new_args(p, 0, 0, $1, 0, $2);
+                    }
+                | f_rest_arg ',' f_arg opt_args_tail
+                    {
+                      $$ = new_args(p, 0, 0, $1, $3, $4);
+                    }
+                | args_tail
+                    {
+                      $$ = new_args(p, 0, 0, 0, 0, $1);
+                    }
+                | /* none */
+                    {
+                      local_add_f(p, mrb_intern_lit(p->mrb, "&"));
+                      $$ = new_args(p, 0, 0, 0, 0, 0);
+                    }
+                ;
+
+f_bad_arg       : tCONSTANT
+                    {
+                      yyerror(p, "formal argument cannot be a constant");
+                      $$ = 0;
+                    }
+                | tIVAR
+                    {
+                      yyerror(p, "formal argument cannot be an instance variable");
+                      $$ = 0;
+                    }
+                | tGVAR
+                    {
+                      yyerror(p, "formal argument cannot be a global variable");
+                      $$ = 0;
+                    }
+                | tCVAR
+                    {
+                      yyerror(p, "formal argument cannot be a class variable");
+                      $$ = 0;
+                    }
+                | tNUMPARAM
+                    {
+                      yyerror(p, "formal argument cannot be a numbered parameter");
+                      $$ = 0;
+                    }
+                ;
+
+f_norm_arg      : f_bad_arg
+                    {
+                      $$ = 0;
+                    }
+                | tIDENTIFIER
+                    {
+                      local_add_f(p, $1);
+                      $$ = $1;
+                    }
+                ;
+
+f_arg_item      : f_norm_arg
+                    {
+                      $$ = new_arg(p, $1);
+                    }
+                | tLPAREN
+                    {
+                      $<nd>$ = local_switch(p);
+                    }
+                  f_margs rparen
+                    {
+                      $$ = new_masgn_param(p, $3, p->locals->car);
+                      local_resume(p, $<nd>2);
+                      local_add_f(p, 0);
+                    }
+                ;
+
+f_arg           : f_arg_item
+                    {
+                      $$ = list1($1);
+                    }
+                | f_arg ',' f_arg_item
+                    {
+                      $$ = push($1, $3);
+                    }
+                ;
+
+f_opt_asgn      : tIDENTIFIER '='
+                    {
+                      local_add_f(p, $1);
+                      local_nest(p);
+                      $$ = $1;
+                    }
+                ;
+
+f_opt           : f_opt_asgn arg
+                    {
+                      void_expr_error(p, $2);
+                      $$ = cons(nsym($1), cons($2, locals_node(p)));
+                      local_unnest(p);
+                    }
+                ;
+
+f_block_opt     : f_opt_asgn primary_value
+                    {
+                      void_expr_error(p, $2);
+                      $$ = cons(nsym($1), cons($2, locals_node(p)));
+                      local_unnest(p);
+                    }
+                ;
+
+f_block_optarg  : f_block_opt
+                    {
+                      $$ = list1($1);
+                    }
+                | f_block_optarg ',' f_block_opt
+                    {
+                      $$ = push($1, $3);
+                    }
+                ;
+
+f_optarg        : f_opt
+                    {
+                      $$ = list1($1);
+                    }
+                | f_optarg ',' f_opt
+                    {
+                      $$ = push($1, $3);
+                    }
+                ;
+
+restarg_mark    : '*'
+                | tSTAR
+                ;
+
+f_rest_arg      : restarg_mark tIDENTIFIER
+                    {
+                      local_add_f(p, $2);
+                      $$ = $2;
+                    }
+                | restarg_mark
+                    {
+                      local_add_f(p, mrb_intern_lit(p->mrb, "*"));
+                      $$ = -1;
+                    }
+                ;
+
+blkarg_mark     : '&'
+                | tAMPER
+                ;
+
+f_block_arg     : blkarg_mark tIDENTIFIER
+                    {
+                      $$ = $2;
+                    }
+                ;
+
+opt_f_block_arg : ',' f_block_arg
+                    {
+                      $$ = $2;
+                    }
+                | none
+                    {
+                      $$ = 0;
+                    }
+                ;
+
+singleton       : var_ref
+                    {
+                      $$ = $1;
+                      if (!$$) $$ = new_nil(p);
+                    }
+                | '(' {p->lstate = EXPR_BEG;} expr rparen
+                    {
+                      if ($3 == 0) {
+                        yyerror(p, "can't define singleton method for ().");
+                      }
+                      else {
+                        switch ((enum node_type)intn($3->car)) {
+                        case NODE_STR:
+                        case NODE_DSTR:
+                        case NODE_XSTR:
+                        case NODE_DXSTR:
+                        case NODE_DREGX:
+                        case NODE_MATCH:
+                        case NODE_FLOAT:
+                        case NODE_ARRAY:
+                        case NODE_HEREDOC:
+                          yyerror(p, "can't define singleton method for literals");
+                        default:
+                          break;
+                        }
+                      }
+                      $$ = $3;
+                    }
+                ;
+
+assoc_list      : none
+                | assocs trailer
+                    {
+                      $$ = $1;
+                    }
+                ;
+
+assocs          : assoc
+                    {
+                      $$ = list1($1);
+                      NODE_LINENO($$, $1);
+                    }
+                | assocs comma assoc
+                    {
+                      $$ = push($1, $3);
+                    }
+                ;
+
+label_tag       : tLABEL_TAG
+                | tLABEL_TAG heredoc_bodies
+                ;
+
+assoc           : arg tASSOC arg
+                    {
+                      void_expr_error(p, $1);
+                      void_expr_error(p, $3);
+                      $$ = cons($1, $3);
+                    }
+                | tIDENTIFIER label_tag arg
+                    {
+                      void_expr_error(p, $3);
+                      $$ = cons(new_sym(p, $1), $3);
+                    }
+                | string_fragment label_tag arg
+                    {
+                      void_expr_error(p, $3);
+                      if ($1->car == (node*)NODE_DSTR) {
+                        $$ = cons(new_dsym(p, $1), $3);
+                      }
+                      else {
+                        $$ = cons(new_sym(p, new_strsym(p, $1)), $3);
+                      }
+                    }
+                | tDSTAR arg
+                    {
+                      void_expr_error(p, $2);
+                      $$ = cons(cons((node*)NODE_KW_REST_ARGS, 0), $2);
+                    }
+                ;
+
+operation       : tIDENTIFIER
+                | tCONSTANT
+                | tFID
+                ;
+
+operation2      : tIDENTIFIER
+                | tCONSTANT
+                | tFID
+                | op
+                ;
+
+operation3      : tIDENTIFIER
+                | tFID
+                | op
+                ;
+
+dot_or_colon    : '.'
+                | tCOLON2
+                ;
+
+call_op         : '.'
+                    {
+                      $$ = '.';
+                    }
+                | tANDDOT
+                    {
+                      $$ = 0;
+                    }
+                ;
+
+call_op2        : call_op
+                | tCOLON2
+                    {
+                      $$ = tCOLON2;
+                    }
+                ;
+
+opt_terms       : /* none */
+                | terms
+                ;
+
+opt_nl          : /* none */
+                | nl
+                ;
+
+rparen          : opt_terms ')'
+                ;
+
+trailer         : /* none */
+                | terms
+                | comma
+                ;
+
+term            : ';' {yyerrok;}
+                | nl
+                | heredoc_body
+                ;
+
+nl              : '\n'
+                    {
+                      p->lineno++;
+                      p->column = 0;
+                    }
+                ;
+
+terms           : term
+                | terms term
+                ;
+
+none            : /* none */
+                    {
+                      $$ = 0;
+                    }
+                ;
+%%
+#define pylval  (*((YYSTYPE*)(p->ylval)))
+
+static void
+yyerror(parser_state *p, const char *s)
+{
+  char* c;
+  size_t n;
+
+  if (! p->capture_errors) {
+#ifndef MRB_DISABLE_STDIO
+    if (p->filename_sym) {
+      const char *filename = mrb_sym_name_len(p->mrb, p->filename_sym, NULL);
+      fprintf(stderr, "%s:%d:%d: %s\n", filename, p->lineno, p->column, s);
+    }
+    else {
+      fprintf(stderr, "line %d:%d: %s\n", p->lineno, p->column, s);
+    }
+#endif
+  }
+  else if (p->nerr < sizeof(p->error_buffer) / sizeof(p->error_buffer[0])) {
+    n = strlen(s);
+    c = (char *)parser_palloc(p, n + 1);
+    memcpy(c, s, n + 1);
+    p->error_buffer[p->nerr].message = c;
+    p->error_buffer[p->nerr].lineno = p->lineno;
+    p->error_buffer[p->nerr].column = p->column;
+  }
+  p->nerr++;
+}
+
+static void
+yyerror_c(parser_state *p, const char *msg, char c)
+{
+  char buf[256];
+
+  strncpy(buf, msg, sizeof(buf) - 2);
+  buf[sizeof(buf) - 2] = '\0';
+  strncat(buf, &c, 1);
+  yyerror(p, buf);
+}
+
+static void
+yywarn(parser_state *p, const char *s)
+{
+  char* c;
+  size_t n;
+
+  if (! p->capture_errors) {
+#ifndef MRB_DISABLE_STDIO
+    if (p->filename_sym) {
+      const char *filename = mrb_sym_name_len(p->mrb, p->filename_sym, NULL);
+      fprintf(stderr, "%s:%d:%d: warning: %s\n", filename, p->lineno, p->column, s);
+    }
+    else {
+      fprintf(stderr, "line %d:%d: warning: %s\n", p->lineno, p->column, s);
+    }
+#endif
+  }
+  else if (p->nwarn < sizeof(p->warn_buffer) / sizeof(p->warn_buffer[0])) {
+    n = strlen(s);
+    c = (char *)parser_palloc(p, n + 1);
+    memcpy(c, s, n + 1);
+    p->warn_buffer[p->nwarn].message = c;
+    p->warn_buffer[p->nwarn].lineno = p->lineno;
+    p->warn_buffer[p->nwarn].column = p->column;
+  }
+  p->nwarn++;
+}
+
+static void
+yywarning(parser_state *p, const char *s)
+{
+  yywarn(p, s);
+}
+
+static void
+yywarning_s(parser_state *p, const char *msg, const char *s)
+{
+  char buf[256];
+
+  strncpy(buf, msg, sizeof(buf) - 1);
+  buf[sizeof(buf) - 1] = '\0';
+  strncat(buf, ": ", sizeof(buf) - strlen(buf) - 1);
+  strncat(buf, s, sizeof(buf) - strlen(buf) - 1);
+  yywarning(p, buf);
+}
+
+static void
+backref_error(parser_state *p, node *n)
+{
+  int c;
+
+  c = intn(n->car);
+
+  if (c == NODE_NTH_REF) {
+    yyerror_c(p, "can't set variable $", (char)intn(n->cdr)+'0');
+  }
+  else if (c == NODE_BACK_REF) {
+    yyerror_c(p, "can't set variable $", (char)intn(n->cdr));
+  }
+  else {
+    mrb_bug(p->mrb, "Internal error in backref_error() : n=>car == %d", c);
+  }
+}
+
+static void
+void_expr_error(parser_state *p, node *n)
+{
+  int c;
+
+  if (n == NULL) return;
+  c = intn(n->car);
+  switch (c) {
+  case NODE_BREAK:
+  case NODE_RETURN:
+  case NODE_NEXT:
+  case NODE_REDO:
+  case NODE_RETRY:
+    yyerror(p, "void value expression");
+    break;
+  case NODE_AND:
+  case NODE_OR:
+    if (n->cdr) {
+      void_expr_error(p, n->cdr->car);
+      void_expr_error(p, n->cdr->cdr);
+    }
+    break;
+  case NODE_BEGIN:
+    if (n->cdr) {
+      while (n->cdr) {
+        n = n->cdr;
+      }
+      void_expr_error(p, n->car);
+    }
+    break;
+  default:
+    break;
+  }
+}
+
+static void pushback(parser_state *p, int c);
+static mrb_bool peeks(parser_state *p, const char *s);
+static mrb_bool skips(parser_state *p, const char *s);
+
+static inline int
+nextc0(parser_state *p)
+{
+  int c;
+#ifndef MRB_DISABLE_STDIO
+  if (p->f) {
+    if (feof(p->f)) return -1;
+    c = fgetc(p->f);
+    if (c == EOF) return -1;
+  }
+  else
+#endif
+    if (!p->s || p->s >= p->send) {
+      return -1;
+    }
+    else {
+      c = (unsigned char)*p->s++;
+    }
+  return c;
+}
+
+static inline int
+nextc(parser_state *p)
+{
+  int c;
+
+  if (p->pb) {
+    node *tmp;
+
+    c = intn(p->pb->car);
+    tmp = p->pb;
+    p->pb = p->pb->cdr;
+    cons_free(tmp);
+  }
+  else {
+    c = nextc0(p);
+    if (c < 0) goto eof;
+  }
+  if (c >= 0) {
+    p->column++;
+  }
+  if (c == '\r') {
+    const int lf = nextc0(p);
+    if (lf == '\n') {
+      return '\n';
+    }
+    if (lf > 0) pushback(p, lf);
+  }
+  return c;
+
+  eof:
+  if (!p->cxt) return -1;
+  else {
+    if (p->cxt->partial_hook(p) < 0)
+      return -1;                /* end of program(s) */
+    return -2;                  /* end of a file in the program files */
+  }
+}
+
+static void
+pushback(parser_state *p, int c)
+{
+  if (c >= 0) {
+    p->column--;
+  }
+  p->pb = cons(nint(c), p->pb);
+}
+
+static void
+skip(parser_state *p, char term)
+{
+  int c;
+
+  for (;;) {
+    c = nextc(p);
+    if (c < 0) break;
+    if (c == term) break;
+  }
+}
+
+static int
+peekc_n(parser_state *p, int n)
+{
+  node *list = 0;
+  int c0;
+
+  do {
+    c0 = nextc(p);
+    if (c0 == -1) return c0;    /* do not skip partial EOF */
+    if (c0 >= 0) --p->column;
+    list = push(list, nint(c0));
+  } while(n--);
+  if (p->pb) {
+    p->pb = append((node*)list, p->pb);
+  }
+  else {
+    p->pb = list;
+  }
+  return c0;
+}
+
+static mrb_bool
+peek_n(parser_state *p, int c, int n)
+{
+  return peekc_n(p, n) == c && c >= 0;
+}
+#define peek(p,c) peek_n((p), (c), 0)
+
+static mrb_bool
+peeks(parser_state *p, const char *s)
+{
+  size_t len = strlen(s);
+
+#ifndef MRB_DISABLE_STDIO
+  if (p->f) {
+    int n = 0;
+    while (*s) {
+      if (!peek_n(p, *s++, n++)) return FALSE;
+    }
+    return TRUE;
+  }
+  else
+#endif
+    if (p->s && p->s + len <= p->send) {
+      if (memcmp(p->s, s, len) == 0) return TRUE;
+    }
+  return FALSE;
+}
+
+static mrb_bool
+skips(parser_state *p, const char *s)
+{
+  int c;
+
+  for (;;) {
+    /* skip until first char */
+    for (;;) {
+      c = nextc(p);
+      if (c < 0) return FALSE;
+      if (c == '\n') {
+        p->lineno++;
+        p->column = 0;
+      }
+      if (c == *s) break;
+    }
+    s++;
+    if (peeks(p, s)) {
+      size_t len = strlen(s);
+
+      while (len--) {
+        if (nextc(p) == '\n') {
+          p->lineno++;
+          p->column = 0;
+        }
+      }
+      return TRUE;
+    }
+    else{
+      s--;
+    }
+  }
+  return FALSE;
+}
+
+
+static int
+newtok(parser_state *p)
+{
+  if (p->tokbuf != p->buf) {
+    mrb_free(p->mrb, p->tokbuf);
+    p->tokbuf = p->buf;
+    p->tsiz = MRB_PARSER_TOKBUF_SIZE;
+  }
+  p->tidx = 0;
+  return p->column - 1;
+}
+
+static void
+tokadd(parser_state *p, int32_t c)
+{
+  char utf8[4];
+  int i, len;
+
+  /* mrb_assert(-0x10FFFF <= c && c <= 0xFF); */
+  if (c >= 0) {
+    /* Single byte from source or non-Unicode escape */
+    utf8[0] = (char)c;
+    len = 1;
+  }
+  else {
+    /* Unicode character */
+    c = -c;
+    if (c < 0x80) {
+      utf8[0] = (char)c;
+      len = 1;
+    }
+    else if (c < 0x800) {
+      utf8[0] = (char)(0xC0 | (c >> 6));
+      utf8[1] = (char)(0x80 | (c & 0x3F));
+      len = 2;
+    }
+    else if (c < 0x10000) {
+      utf8[0] = (char)(0xE0 |  (c >> 12)        );
+      utf8[1] = (char)(0x80 | ((c >>  6) & 0x3F));
+      utf8[2] = (char)(0x80 | ( c        & 0x3F));
+      len = 3;
+    }
+    else {
+      utf8[0] = (char)(0xF0 |  (c >> 18)        );
+      utf8[1] = (char)(0x80 | ((c >> 12) & 0x3F));
+      utf8[2] = (char)(0x80 | ((c >>  6) & 0x3F));
+      utf8[3] = (char)(0x80 | ( c        & 0x3F));
+      len = 4;
+    }
+  }
+  if (p->tidx+len >= p->tsiz) {
+    if (p->tsiz >= MRB_PARSER_TOKBUF_MAX) {
+      p->tidx += len;
+      return;
+    }
+    p->tsiz *= 2;
+    if (p->tokbuf == p->buf) {
+      p->tokbuf = (char*)mrb_malloc(p->mrb, p->tsiz);
+      memcpy(p->tokbuf, p->buf, MRB_PARSER_TOKBUF_SIZE);
+    }
+    else {
+      p->tokbuf = (char*)mrb_realloc(p->mrb, p->tokbuf, p->tsiz);
+    }
+  }
+  for (i = 0; i < len; i++) {
+    p->tokbuf[p->tidx++] = utf8[i];
+  }
+}
+
+static int
+toklast(parser_state *p)
+{
+  return p->tokbuf[p->tidx-1];
+}
+
+static void
+tokfix(parser_state *p)
+{
+  if (p->tidx >= MRB_PARSER_TOKBUF_MAX) {
+    p->tidx = MRB_PARSER_TOKBUF_MAX-1;
+    yyerror(p, "string too long (truncated)");
+  }
+  p->tokbuf[p->tidx] = '\0';
+}
+
+static const char*
+tok(parser_state *p)
+{
+  return p->tokbuf;
+}
+
+static int
+toklen(parser_state *p)
+{
+  return p->tidx;
+}
+
+#define IS_ARG() (p->lstate == EXPR_ARG || p->lstate == EXPR_CMDARG)
+#define IS_END() (p->lstate == EXPR_END || p->lstate == EXPR_ENDARG || p->lstate == EXPR_ENDFN)
+#define IS_BEG() (p->lstate == EXPR_BEG || p->lstate == EXPR_MID || p->lstate == EXPR_VALUE || p->lstate == EXPR_CLASS)
+#define IS_SPCARG(c) (IS_ARG() && space_seen && !ISSPACE(c))
+#define IS_LABEL_POSSIBLE() ((p->lstate == EXPR_BEG && !cmd_state) || IS_ARG())
+#define IS_LABEL_SUFFIX(n) (peek_n(p, ':',(n)) && !peek_n(p, ':', (n)+1))
+
+static int32_t
+scan_oct(const int *start, int len, int *retlen)
+{
+  const int *s = start;
+  int32_t retval = 0;
+
+  /* mrb_assert(len <= 3) */
+  while (len-- && *s >= '0' && *s <= '7') {
+    retval <<= 3;
+    retval |= *s++ - '0';
+  }
+  *retlen = (int)(s - start);
+
+  return retval;
+}
+
+static int32_t
+scan_hex(parser_state *p, const int *start, int len, int *retlen)
+{
+  static const char hexdigit[] = "0123456789abcdef0123456789ABCDEF";
+  const int *s = start;
+  uint32_t retval = 0;
+  char *tmp;
+
+  /* mrb_assert(len <= 8) */
+  while (len-- && *s && (tmp = (char*)strchr(hexdigit, *s))) {
+    retval <<= 4;
+    retval |= (tmp - hexdigit) & 15;
+    s++;
+  }
+  *retlen = (int)(s - start);
+
+  return (int32_t)retval;
+}
+
+static int32_t
+read_escape_unicode(parser_state *p, int limit)
+{
+  int buf[9];
+  int i;
+  int32_t hex;
+
+  /* Look for opening brace */
+  i = 0;
+  buf[0] = nextc(p);
+  if (buf[0] < 0) {
+  eof:
+    yyerror(p, "invalid escape character syntax");
+    return -1;
+  }
+  if (ISXDIGIT(buf[0])) {
+    /* \uxxxx form */
+    for (i=1; i<limit; i++) {
+      buf[i] = nextc(p);
+      if (buf[i] < 0) goto eof;
+      if (!ISXDIGIT(buf[i])) {
+        pushback(p, buf[i]);
+        break;
+      }
+    }
+  }
+  else {
+    pushback(p, buf[0]);
+  }
+  hex = scan_hex(p, buf, i, &i);
+  if (i == 0 || hex > 0x10FFFF || (hex & 0xFFFFF800) == 0xD800) {
+    yyerror(p, "invalid Unicode code point");
+    return -1;
+  }
+  return hex;
+}
+
+/* Return negative to indicate Unicode code point */
+static int32_t
+read_escape(parser_state *p)
+{
+  int32_t c;
+
+  switch (c = nextc(p)) {
+  case '\\':/* Backslash */
+    return c;
+
+  case 'n':/* newline */
+    return '\n';
+
+  case 't':/* horizontal tab */
+    return '\t';
+
+  case 'r':/* carriage-return */
+    return '\r';
+
+  case 'f':/* form-feed */
+    return '\f';
+
+  case 'v':/* vertical tab */
+    return '\13';
+
+  case 'a':/* alarm(bell) */
+    return '\007';
+
+  case 'e':/* escape */
+    return 033;
+
+  case '0': case '1': case '2': case '3': /* octal constant */
+  case '4': case '5': case '6': case '7':
+  {
+    int buf[3];
+    int i;
+
+    buf[0] = c;
+    for (i=1; i<3; i++) {
+      buf[i] = nextc(p);
+      if (buf[i] < 0) goto eof;
+      if (buf[i] < '0' || '7' < buf[i]) {
+        pushback(p, buf[i]);
+        break;
+      }
+    }
+    c = scan_oct(buf, i, &i);
+  }
+  return c;
+
+  case 'x':     /* hex constant */
+  {
+    int buf[2];
+    int i;
+
+    for (i=0; i<2; i++) {
+      buf[i] = nextc(p);
+      if (buf[i] < 0) goto eof;
+      if (!ISXDIGIT(buf[i])) {
+        pushback(p, buf[i]);
+        break;
+      }
+    }
+    if (i == 0) {
+      yyerror(p, "invalid hex escape");
+      return -1;
+    }
+    return scan_hex(p, buf, i, &i);
+  }
+
+  case 'u':     /* Unicode */
+    if (peek(p, '{')) {
+      /* \u{xxxxxxxx} form */
+      nextc(p);
+      c = read_escape_unicode(p, 8);
+      if (c < 0) return 0;
+      if (nextc(p) != '}') goto eof;
+    }
+    else {
+      c = read_escape_unicode(p, 4);
+      if (c < 0) return 0;
+    }
+  return -c;
+
+  case 'b':/* backspace */
+    return '\010';
+
+  case 's':/* space */
+    return ' ';
+
+  case 'M':
+    if ((c = nextc(p)) != '-') {
+      yyerror(p, "Invalid escape character syntax");
+      pushback(p, c);
+      return '\0';
+    }
+    if ((c = nextc(p)) == '\\') {
+      return read_escape(p) | 0x80;
+    }
+    else if (c < 0) goto eof;
+    else {
+      return ((c & 0xff) | 0x80);
+    }
+
+  case 'C':
+    if ((c = nextc(p)) != '-') {
+      yyerror(p, "Invalid escape character syntax");
+      pushback(p, c);
+      return '\0';
+    }
+  case 'c':
+    if ((c = nextc(p))== '\\') {
+      c = read_escape(p);
+    }
+    else if (c == '?')
+      return 0177;
+    else if (c < 0) goto eof;
+    return c & 0x9f;
+
+    eof:
+  case -1:
+  case -2:                      /* end of a file */
+    yyerror(p, "Invalid escape character syntax");
+    return '\0';
+
+  default:
+    return c;
+  }
+}
+
+static int
+parse_string(parser_state *p)
+{
+  int c;
+  string_type type = (string_type)(intptr_t)p->lex_strterm->car;
+  int nest_level = intn(p->lex_strterm->cdr->car);
+  int beg = intn(p->lex_strterm->cdr->cdr->car);
+  int end = intn(p->lex_strterm->cdr->cdr->cdr);
+  parser_heredoc_info *hinf = (type & STR_FUNC_HEREDOC) ? parsing_heredoc_inf(p) : NULL;
+
+  if (beg == 0) beg = -3;       /* should never happen */
+  if (end == 0) end = -3;
+  newtok(p);
+  while ((c = nextc(p)) != end || nest_level != 0) {
+    if (hinf && (c == '\n' || c < 0)) {
+      mrb_bool line_head;
+      tokadd(p, '\n');
+      tokfix(p);
+      p->lineno++;
+      p->column = 0;
+      line_head = hinf->line_head;
+      hinf->line_head = TRUE;
+      if (line_head) {
+        /* check whether end of heredoc */
+        const char *s = tok(p);
+        int len = toklen(p);
+        if (hinf->allow_indent) {
+          while (ISSPACE(*s) && len > 0) {
+            ++s;
+            --len;
+          }
+        }
+        if ((len-1 == hinf->term_len) && (strncmp(s, hinf->term, len-1) == 0)) {
+          return tHEREDOC_END;
+        }
+      }
+      if (c < 0) {
+        char buf[256];
+        const char s1[] = "can't find heredoc delimiter \"";
+        const char s2[] = "\" anywhere before EOF";
+
+        if (sizeof(s1)+sizeof(s2)+strlen(hinf->term)+1 >= sizeof(buf)) {
+          yyerror(p, "can't find heredoc delimiter anywhere before EOF");
+        } else {
+          strcpy(buf, s1);
+          strcat(buf, hinf->term);
+          strcat(buf, s2);
+          yyerror(p, buf);
+        }
+        return 0;
+      }
+      pylval.nd = new_str(p, tok(p), toklen(p));
+      return tHD_STRING_MID;
+    }
+    if (c < 0) {
+      yyerror(p, "unterminated string meets end of file");
+      return 0;
+    }
+    else if (c == beg) {
+      nest_level++;
+      p->lex_strterm->cdr->car = nint(nest_level);
+    }
+    else if (c == end) {
+      nest_level--;
+      p->lex_strterm->cdr->car = nint(nest_level);
+    }
+    else if (c == '\\') {
+      c = nextc(p);
+      if (type & STR_FUNC_EXPAND) {
+        if (c == end || c == beg) {
+          tokadd(p, c);
+        }
+        else if (c == '\n') {
+          p->lineno++;
+          p->column = 0;
+          if (type & STR_FUNC_ARRAY) {
+            tokadd(p, '\n');
+          }
+        }
+        else if (type & STR_FUNC_REGEXP) {
+          tokadd(p, '\\');
+          tokadd(p, c);
+        }
+        else if (c == 'u' && peek(p, '{')) {
+          /* \u{xxxx xxxx xxxx} form */
+          nextc(p);
+          while (1) {
+            do c = nextc(p); while (ISSPACE(c));
+            if (c == '}') break;
+            pushback(p, c);
+            c = read_escape_unicode(p, 8);
+            if (c < 0) break;
+            tokadd(p, -c);
+          }
+          if (hinf)
+            hinf->line_head = FALSE;
+        }
+        else {
+          pushback(p, c);
+          tokadd(p, read_escape(p));
+          if (hinf)
+            hinf->line_head = FALSE;
+        }
+      }
+      else {
+        if (c != beg && c != end) {
+          if (c == '\n') {
+            p->lineno++;
+            p->column = 0;
+          }
+          if (!(c == '\\' || ((type & STR_FUNC_ARRAY) && ISSPACE(c)))) {
+            tokadd(p, '\\');
+          }
+        }
+        tokadd(p, c);
+      }
+      continue;
+    }
+    else if ((c == '#') && (type & STR_FUNC_EXPAND)) {
+      c = nextc(p);
+      if (c == '{') {
+        tokfix(p);
+        p->lstate = EXPR_BEG;
+        p->cmd_start = TRUE;
+        pylval.nd = new_str(p, tok(p), toklen(p));
+        if (hinf) {
+          hinf->line_head = FALSE;
+          return tHD_STRING_PART;
+        }
+        return tSTRING_PART;
+      }
+      tokadd(p, '#');
+      pushback(p, c);
+      continue;
+    }
+    if ((type & STR_FUNC_ARRAY) && ISSPACE(c)) {
+      if (toklen(p) == 0) {
+        do {
+          if (c == '\n') {
+            p->lineno++;
+            p->column = 0;
+            heredoc_treat_nextline(p);
+            if (p->parsing_heredoc != NULL) {
+              return tHD_LITERAL_DELIM;
+            }
+          }
+          c = nextc(p);
+        } while (ISSPACE(c));
+        pushback(p, c);
+        return tLITERAL_DELIM;
+      }
+      else {
+        pushback(p, c);
+        tokfix(p);
+        pylval.nd = new_str(p, tok(p), toklen(p));
+        return tSTRING_MID;
+      }
+    }
+    if (c == '\n') {
+      p->lineno++;
+      p->column = 0;
+    }
+    tokadd(p, c);
+  }
+
+  tokfix(p);
+  p->lstate = EXPR_ENDARG;
+  end_strterm(p);
+
+  if (type & STR_FUNC_XQUOTE) {
+    pylval.nd = new_xstr(p, tok(p), toklen(p));
+    return tXSTRING;
+  }
+
+  if (type & STR_FUNC_REGEXP) {
+    int f = 0;
+    int re_opt;
+    char *s = strndup(tok(p), toklen(p));
+    char flags[3];
+    char *flag = flags;
+    char enc = '\0';
+    char *encp;
+    char *dup;
+
+    newtok(p);
+    while (re_opt = nextc(p), re_opt >= 0 && ISALPHA(re_opt)) {
+      switch (re_opt) {
+      case 'i': f |= 1; break;
+      case 'x': f |= 2; break;
+      case 'm': f |= 4; break;
+      case 'u': f |= 16; break;
+      case 'n': f |= 32; break;
+      case 'o': break;
+      default: tokadd(p, re_opt); break;
+      }
+    }
+    pushback(p, re_opt);
+    if (toklen(p)) {
+      char msg[128];
+
+      strcpy(msg, "unknown regexp option");
+      tokfix(p);
+      if (toklen(p) > 1) {
+        strcat(msg, "s");
+      }
+      strcat(msg, " - ");
+      strncat(msg, tok(p), sizeof(msg) - strlen(msg) - 1);
+      yyerror(p, msg);
+    }
+    if (f != 0) {
+      if (f & 1) *flag++ = 'i';
+      if (f & 2) *flag++ = 'x';
+      if (f & 4) *flag++ = 'm';
+      if (f & 16) enc = 'u';
+      if (f & 32) enc = 'n';
+    }
+    if (flag > flags) {
+      dup = strndup(flags, (size_t)(flag - flags));
+    }
+    else {
+      dup = NULL;
+    }
+    if (enc) {
+      encp = strndup(&enc, 1);
+    }
+    else {
+      encp = NULL;
+    }
+    pylval.nd = new_regx(p, s, dup, encp);
+
+    return tREGEXP;
+  }
+  pylval.nd = new_str(p, tok(p), toklen(p));
+
+  return tSTRING;
+}
+
+static int
+number_literal_suffix(parser_state *p)
+{
+  int c, result = 0;
+  node *list = 0;
+  int column = p->column;
+  int mask = NUM_SUFFIX_R|NUM_SUFFIX_I;
+
+  while ((c = nextc(p)) != -1) {
+    list = push(list, (node*)(intptr_t)c);
+
+    if ((mask & NUM_SUFFIX_I) && c == 'i') {
+      result |= (mask & NUM_SUFFIX_I);
+      mask &= ~NUM_SUFFIX_I;
+      /* r after i, rational of complex is disallowed */
+      mask &= ~NUM_SUFFIX_R;
+      continue;
+    }
+    if ((mask & NUM_SUFFIX_R) && c == 'r') {
+      result |= (mask & NUM_SUFFIX_R);
+      mask &= ~NUM_SUFFIX_R;
+      continue;
+    }
+    if (!ISASCII(c) || ISALPHA(c) || c == '_') {
+      p->column = column;
+      if (p->pb) {
+        p->pb = append((node*)list, p->pb);
+      }
+      else {
+        p->pb = list;
+      }
+      return 0;
+    }
+    pushback(p, c);
+    break;
+  }
+  return result;
+}
+
+static int
+heredoc_identifier(parser_state *p)
+{
+  int c;
+  int type = str_heredoc;
+  mrb_bool indent = FALSE;
+  mrb_bool quote = FALSE;
+  node *newnode;
+  parser_heredoc_info *info;
+
+  c = nextc(p);
+  if (ISSPACE(c) || c == '=') {
+    pushback(p, c);
+    return 0;
+  }
+  if (c == '-') {
+    indent = TRUE;
+    c = nextc(p);
+  }
+  if (c == '\'' || c == '"') {
+    int term = c;
+    if (c == '\'')
+      quote = TRUE;
+    newtok(p);
+    while ((c = nextc(p)) >= 0 && c != term) {
+      if (c == '\n') {
+        c = -1;
+        break;
+      }
+      tokadd(p, c);
+    }
+    if (c < 0) {
+      yyerror(p, "unterminated here document identifier");
+      return 0;
+    }
+  }
+  else {
+    if (c < 0) {
+      return 0;                 /* missing here document identifier */
+    }
+    if (! identchar(c)) {
+      pushback(p, c);
+      if (indent) pushback(p, '-');
+      return 0;
+    }
+    newtok(p);
+    do {
+      tokadd(p, c);
+    } while ((c = nextc(p)) >= 0 && identchar(c));
+    pushback(p, c);
+  }
+  tokfix(p);
+  newnode = new_heredoc(p);
+  info = (parser_heredoc_info*)newnode->cdr;
+  info->term = strndup(tok(p), toklen(p));
+  info->term_len = toklen(p);
+  if (! quote)
+    type |= STR_FUNC_EXPAND;
+  info->type = (string_type)type;
+  info->allow_indent = indent;
+  info->line_head = TRUE;
+  info->doc = NULL;
+  p->heredocs_from_nextline = push(p->heredocs_from_nextline, newnode);
+  p->lstate = EXPR_END;
+
+  pylval.nd = newnode;
+  return tHEREDOC_BEG;
+}
+
+static int
+arg_ambiguous(parser_state *p)
+{
+  yywarning(p, "ambiguous first argument; put parentheses or even spaces");
+  return 1;
+}
+
+#include "lex.def"
+
+static int
+parser_yylex(parser_state *p)
+{
+  int32_t c;
+  int space_seen = 0;
+  int cmd_state;
+  enum mrb_lex_state_enum last_state;
+  int token_column;
+
+  if (p->lex_strterm) {
+    if (is_strterm_type(p, STR_FUNC_HEREDOC)) {
+      if (p->parsing_heredoc != NULL)
+        return parse_string(p);
+    }
+    else
+      return parse_string(p);
+  }
+  cmd_state = p->cmd_start;
+  p->cmd_start = FALSE;
+  retry:
+  last_state = p->lstate;
+  switch (c = nextc(p)) {
+  case '\004':  /* ^D */
+  case '\032':  /* ^Z */
+  case '\0':    /* NUL */
+  case -1:      /* end of script. */
+    if (p->heredocs_from_nextline)
+      goto maybe_heredoc;
+    return 0;
+
+  /* white spaces */
+  case ' ': case '\t': case '\f': case '\r':
+  case '\13':   /* '\v' */
+    space_seen = 1;
+    goto retry;
+
+  case '#':     /* it's a comment */
+    skip(p, '\n');
+    /* fall through */
+  case -2:      /* end of a file */
+  case '\n':
+  maybe_heredoc:
+    heredoc_treat_nextline(p);
+    p->column = 0;
+    switch (p->lstate) {
+    case EXPR_BEG:
+    case EXPR_FNAME:
+    case EXPR_DOT:
+    case EXPR_CLASS:
+    case EXPR_VALUE:
+      p->lineno++;
+      if (p->parsing_heredoc != NULL) {
+        if (p->lex_strterm) {
+          return parse_string(p);
+        }
+      }
+      goto retry;
+    default:
+      break;
+    }
+    if (p->parsing_heredoc != NULL) {
+      return '\n';
+    }
+    while ((c = nextc(p))) {
+      switch (c) {
+      case ' ': case '\t': case '\f': case '\r':
+      case '\13': /* '\v' */
+        space_seen = 1;
+        break;
+      case '#': /* comment as a whitespace */
+        pushback(p, '#');
+        p->lineno++;
+        goto retry;
+      case '.':
+        if (!peek(p, '.')) {
+          pushback(p, '.');
+          p->lineno++;
+          goto retry;
+        }
+        pushback(p, c);
+        goto normal_newline;
+      case '&':
+        if (peek(p, '.')) {
+          pushback(p, '&');
+          p->lineno++;
+          goto retry;
+        }
+        pushback(p, c);
+        goto normal_newline;
+      case -1:                  /* EOF */
+      case -2:                  /* end of a file */
+        goto normal_newline;
+      default:
+        pushback(p, c);
+        goto normal_newline;
+      }
+    }
+  normal_newline:
+    p->cmd_start = TRUE;
+    p->lstate = EXPR_BEG;
+    return '\n';
+
+  case '*':
+    if ((c = nextc(p)) == '*') {
+      if ((c = nextc(p)) == '=') {
+        pylval.id = intern_lit("**");
+        p->lstate = EXPR_BEG;
+        return tOP_ASGN;
+      }
+      pushback(p, c);
+      if (IS_SPCARG(c)) {
+        yywarning(p, "'**' interpreted as argument prefix");
+        c = tDSTAR;
+      }
+      else if (IS_BEG()) {
+        c = tDSTAR;
+      }
+      else {
+        c = tPOW; /* "**", "argument prefix" */
+      }
+    }
+    else {
+      if (c == '=') {
+        pylval.id = intern_lit("*");
+        p->lstate = EXPR_BEG;
+        return tOP_ASGN;
+      }
+      pushback(p, c);
+      if (IS_SPCARG(c)) {
+        yywarning(p, "'*' interpreted as argument prefix");
+        c = tSTAR;
+      }
+      else if (IS_BEG()) {
+        c = tSTAR;
+      }
+      else {
+        c = '*';
+      }
+    }
+    if (p->lstate == EXPR_FNAME || p->lstate == EXPR_DOT) {
+      p->lstate = EXPR_ARG;
+    }
+    else {
+      p->lstate = EXPR_BEG;
+    }
+    return c;
+
+  case '!':
+    c = nextc(p);
+    if (p->lstate == EXPR_FNAME || p->lstate == EXPR_DOT) {
+      p->lstate = EXPR_ARG;
+      if (c == '@') {
+        return '!';
+      }
+    }
+    else {
+      p->lstate = EXPR_BEG;
+    }
+    if (c == '=') {
+      return tNEQ;
+    }
+    if (c == '~') {
+      return tNMATCH;
+    }
+    pushback(p, c);
+    return '!';
+
+  case '=':
+    if (p->column == 1) {
+      static const char begin[] = "begin";
+      static const char end[] = "\n=end";
+      if (peeks(p, begin)) {
+        c = peekc_n(p, sizeof(begin)-1);
+        if (c < 0 || ISSPACE(c)) {
+          do {
+            if (!skips(p, end)) {
+              yyerror(p, "embedded document meets end of file");
+              return 0;
+            }
+            c = nextc(p);
+          } while (!(c < 0 || ISSPACE(c)));
+          if (c != '\n') skip(p, '\n');
+          p->lineno++;
+          p->column = 0;
+          goto retry;
+        }
+      }
+    }
+    if (p->lstate == EXPR_FNAME || p->lstate == EXPR_DOT) {
+      p->lstate = EXPR_ARG;
+    }
+    else {
+      p->lstate = EXPR_BEG;
+    }
+    if ((c = nextc(p)) == '=') {
+      if ((c = nextc(p)) == '=') {
+        return tEQQ;
+      }
+      pushback(p, c);
+      return tEQ;
+    }
+    if (c == '~') {
+      return tMATCH;
+    }
+    else if (c == '>') {
+      return tASSOC;
+    }
+    pushback(p, c);
+    return '=';
+
+  case '<':
+    c = nextc(p);
+    if (c == '<' &&
+        p->lstate != EXPR_DOT &&
+        p->lstate != EXPR_CLASS &&
+        !IS_END() &&
+        (!IS_ARG() || space_seen)) {
+      int token = heredoc_identifier(p);
+      if (token)
+        return token;
+    }
+    if (p->lstate == EXPR_FNAME || p->lstate == EXPR_DOT) {
+      p->lstate = EXPR_ARG;
+    }
+    else {
+      p->lstate = EXPR_BEG;
+      if (p->lstate == EXPR_CLASS) {
+        p->cmd_start = TRUE;
+      }
+    }
+    if (c == '=') {
+      if ((c = nextc(p)) == '>') {
+        return tCMP;
+      }
+      pushback(p, c);
+      return tLEQ;
+    }
+    if (c == '<') {
+      if ((c = nextc(p)) == '=') {
+        pylval.id = intern_lit("<<");
+        p->lstate = EXPR_BEG;
+        return tOP_ASGN;
+      }
+      pushback(p, c);
+      return tLSHFT;
+    }
+    pushback(p, c);
+    return '<';
+
+  case '>':
+    if (p->lstate == EXPR_FNAME || p->lstate == EXPR_DOT) {
+      p->lstate = EXPR_ARG;
+    }
+    else {
+      p->lstate = EXPR_BEG;
+    }
+    if ((c = nextc(p)) == '=') {
+      return tGEQ;
+    }
+    if (c == '>') {
+      if ((c = nextc(p)) == '=') {
+        pylval.id = intern_lit(">>");
+        p->lstate = EXPR_BEG;
+        return tOP_ASGN;
+      }
+      pushback(p, c);
+      return tRSHFT;
+    }
+    pushback(p, c);
+    return '>';
+
+  case '"':
+    p->lex_strterm = new_strterm(p, str_dquote, '"', 0);
+    return tSTRING_BEG;
+
+  case '\'':
+    p->lex_strterm = new_strterm(p, str_squote, '\'', 0);
+    return parse_string(p);
+
+  case '`':
+    if (p->lstate == EXPR_FNAME) {
+      p->lstate = EXPR_ENDFN;
+      return '`';
+    }
+    if (p->lstate == EXPR_DOT) {
+      if (cmd_state)
+        p->lstate = EXPR_CMDARG;
+      else
+        p->lstate = EXPR_ARG;
+      return '`';
+    }
+    p->lex_strterm = new_strterm(p, str_xquote, '`', 0);
+    return tXSTRING_BEG;
+
+  case '?':
+    if (IS_END()) {
+      p->lstate = EXPR_VALUE;
+      return '?';
+    }
+    c = nextc(p);
+    if (c < 0) {
+      yyerror(p, "incomplete character syntax");
+      return 0;
+    }
+    if (ISSPACE(c)) {
+      if (!IS_ARG()) {
+        int c2;
+        switch (c) {
+        case ' ':
+          c2 = 's';
+          break;
+        case '\n':
+          c2 = 'n';
+          break;
+        case '\t':
+          c2 = 't';
+          break;
+        case '\v':
+          c2 = 'v';
+          break;
+        case '\r':
+          c2 = 'r';
+          break;
+        case '\f':
+          c2 = 'f';
+          break;
+        default:
+          c2 = 0;
+          break;
+        }
+        if (c2) {
+          char buf[256];
+          char cc[] = { (char)c2, '\0' };
+
+          strcpy(buf, "invalid character syntax; use ?\\");
+          strncat(buf, cc, 2);
+          yyerror(p, buf);
+        }
+      }
+      ternary:
+      pushback(p, c);
+      p->lstate = EXPR_VALUE;
+      return '?';
+    }
+    newtok(p);
+    /* need support UTF-8 if configured */
+    if ((ISALNUM(c) || c == '_')) {
+      int c2 = nextc(p);
+      pushback(p, c2);
+      if ((ISALNUM(c2) || c2 == '_')) {
+        goto ternary;
+      }
+    }
+    if (c == '\\') {
+      c = read_escape(p);
+      tokadd(p, c);
+    }
+    else {
+      tokadd(p, c);
+    }
+    tokfix(p);
+    pylval.nd = new_str(p, tok(p), toklen(p));
+    p->lstate = EXPR_ENDARG;
+    return tCHAR;
+
+  case '&':
+    if ((c = nextc(p)) == '&') {
+      p->lstate = EXPR_BEG;
+      if ((c = nextc(p)) == '=') {
+        pylval.id = intern_lit("&&");
+        p->lstate = EXPR_BEG;
+        return tOP_ASGN;
+      }
+      pushback(p, c);
+      return tANDOP;
+    }
+    else if (c == '.') {
+      p->lstate = EXPR_DOT;
+      return tANDDOT;
+    }
+    else if (c == '=') {
+      pylval.id = intern_lit("&");
+      p->lstate = EXPR_BEG;
+      return tOP_ASGN;
+    }
+    pushback(p, c);
+    if (IS_SPCARG(c)) {
+      yywarning(p, "'&' interpreted as argument prefix");
+      c = tAMPER;
+    }
+    else if (IS_BEG()) {
+      c = tAMPER;
+    }
+    else {
+      c = '&';
+    }
+    if (p->lstate == EXPR_FNAME || p->lstate == EXPR_DOT) {
+      p->lstate = EXPR_ARG;
+    }
+    else {
+      p->lstate = EXPR_BEG;
+    }
+    return c;
+
+  case '|':
+    if ((c = nextc(p)) == '|') {
+      p->lstate = EXPR_BEG;
+      if ((c = nextc(p)) == '=') {
+        pylval.id = intern_lit("||");
+        p->lstate = EXPR_BEG;
+        return tOP_ASGN;
+      }
+      pushback(p, c);
+      return tOROP;
+    }
+    if (c == '=') {
+      pylval.id = intern_lit("|");
+      p->lstate = EXPR_BEG;
+      return tOP_ASGN;
+    }
+    if (p->lstate == EXPR_FNAME || p->lstate == EXPR_DOT) {
+      p->lstate = EXPR_ARG;
+    }
+    else {
+      p->lstate = EXPR_BEG;
+    }
+    pushback(p, c);
+    return '|';
+
+  case '+':
+    c = nextc(p);
+    if (p->lstate == EXPR_FNAME || p->lstate == EXPR_DOT) {
+      p->lstate = EXPR_ARG;
+      if (c == '@') {
+        return tUPLUS;
+      }
+      pushback(p, c);
+      return '+';
+    }
+    if (c == '=') {
+      pylval.id = intern_lit("+");
+      p->lstate = EXPR_BEG;
+      return tOP_ASGN;
+    }
+    if (IS_BEG() || (IS_SPCARG(c) && arg_ambiguous(p))) {
+      p->lstate = EXPR_BEG;
+      pushback(p, c);
+      if (c >= 0 && ISDIGIT(c)) {
+        c = '+';
+        goto start_num;
+      }
+      return tUPLUS;
+    }
+    p->lstate = EXPR_BEG;
+    pushback(p, c);
+    return '+';
+
+  case '-':
+    c = nextc(p);
+    if (p->lstate == EXPR_FNAME || p->lstate == EXPR_DOT) {
+      p->lstate = EXPR_ARG;
+      if (c == '@') {
+        return tUMINUS;
+      }
+      pushback(p, c);
+      return '-';
+    }
+    if (c == '=') {
+      pylval.id = intern_lit("-");
+      p->lstate = EXPR_BEG;
+      return tOP_ASGN;
+    }
+    if (c == '>') {
+      p->lstate = EXPR_ENDFN;
+      return tLAMBDA;
+    }
+    if (IS_BEG() || (IS_SPCARG(c) && arg_ambiguous(p))) {
+      p->lstate = EXPR_BEG;
+      pushback(p, c);
+      if (c >= 0 && ISDIGIT(c)) {
+        return tUMINUS_NUM;
+      }
+      return tUMINUS;
+    }
+    p->lstate = EXPR_BEG;
+    pushback(p, c);
+    return '-';
+
+  case '.':
+    p->lstate = EXPR_BEG;
+    if ((c = nextc(p)) == '.') {
+      if ((c = nextc(p)) == '.') {
+        return tDOT3;
+      }
+      pushback(p, c);
+      return tDOT2;
+    }
+    pushback(p, c);
+    if (c >= 0 && ISDIGIT(c)) {
+      yyerror(p, "no .<digit> floating literal anymore; put 0 before dot");
+    }
+    p->lstate = EXPR_DOT;
+    return '.';
+
+    start_num:
+  case '0': case '1': case '2': case '3': case '4':
+  case '5': case '6': case '7': case '8': case '9':
+  {
+    int is_float, seen_point, seen_e, nondigit;
+    int suffix = 0;
+
+    is_float = seen_point = seen_e = nondigit = 0;
+    p->lstate = EXPR_ENDARG;
+    newtok(p);
+    if (c == '-' || c == '+') {
+      tokadd(p, c);
+      c = nextc(p);
+    }
+    if (c == '0') {
+#define no_digits() do {yyerror(p,"numeric literal without digits"); return 0;} while (0)
+      int start = toklen(p);
+      c = nextc(p);
+      if (c == 'x' || c == 'X') {
+        /* hexadecimal */
+        c = nextc(p);
+        if (c >= 0 && ISXDIGIT(c)) {
+          do {
+            if (c == '_') {
+              if (nondigit) break;
+              nondigit = c;
+              continue;
+            }
+            if (!ISXDIGIT(c)) break;
+            nondigit = 0;
+            tokadd(p, tolower(c));
+          } while ((c = nextc(p)) >= 0);
+        }
+        pushback(p, c);
+        tokfix(p);
+        if (toklen(p) == start) {
+          no_digits();
+        }
+        else if (nondigit) goto trailing_uc;
+        suffix = number_literal_suffix(p);
+        pylval.nd = new_int(p, tok(p), 16, suffix);
+        return tINTEGER;
+      }
+      if (c == 'b' || c == 'B') {
+        /* binary */
+        c = nextc(p);
+        if (c == '0' || c == '1') {
+          do {
+            if (c == '_') {
+              if (nondigit) break;
+              nondigit = c;
+              continue;
+            }
+            if (c != '0' && c != '1') break;
+            nondigit = 0;
+            tokadd(p, c);
+          } while ((c = nextc(p)) >= 0);
+        }
+        pushback(p, c);
+        tokfix(p);
+        if (toklen(p) == start) {
+          no_digits();
+        }
+        else if (nondigit) goto trailing_uc;
+        suffix = number_literal_suffix(p);
+        pylval.nd = new_int(p, tok(p), 2, suffix);
+        return tINTEGER;
+      }
+      if (c == 'd' || c == 'D') {
+        /* decimal */
+        c = nextc(p);
+        if (c >= 0 && ISDIGIT(c)) {
+          do {
+            if (c == '_') {
+              if (nondigit) break;
+              nondigit = c;
+              continue;
+            }
+            if (!ISDIGIT(c)) break;
+            nondigit = 0;
+            tokadd(p, c);
+          } while ((c = nextc(p)) >= 0);
+        }
+        pushback(p, c);
+        tokfix(p);
+        if (toklen(p) == start) {
+          no_digits();
+        }
+        else if (nondigit) goto trailing_uc;
+        suffix = number_literal_suffix(p);
+        pylval.nd = new_int(p, tok(p), 10, suffix);
+        return tINTEGER;
+      }
+      if (c == '_') {
+        /* 0_0 */
+        goto octal_number;
+      }
+      if (c == 'o' || c == 'O') {
+        /* prefixed octal */
+        c = nextc(p);
+        if (c < 0 || c == '_' || !ISDIGIT(c)) {
+          no_digits();
+        }
+      }
+      if (c >= '0' && c <= '7') {
+        /* octal */
+        octal_number:
+        do {
+          if (c == '_') {
+            if (nondigit) break;
+            nondigit = c;
+            continue;
+          }
+          if (c < '0' || c > '9') break;
+          if (c > '7') goto invalid_octal;
+          nondigit = 0;
+          tokadd(p, c);
+        } while ((c = nextc(p)) >= 0);
+
+        if (toklen(p) > start) {
+          pushback(p, c);
+          tokfix(p);
+          if (nondigit) goto trailing_uc;
+          suffix = number_literal_suffix(p);
+          pylval.nd = new_int(p, tok(p), 8, suffix);
+          return tINTEGER;
+        }
+        if (nondigit) {
+          pushback(p, c);
+          goto trailing_uc;
+        }
+      }
+      if (c > '7' && c <= '9') {
+        invalid_octal:
+        yyerror(p, "Invalid octal digit");
+      }
+      else if (c == '.' || c == 'e' || c == 'E') {
+        tokadd(p, '0');
+      }
+      else {
+        pushback(p, c);
+        suffix = number_literal_suffix(p);
+        pylval.nd = new_int(p, "0", 10, suffix);
+        return tINTEGER;
+      }
+    }
+
+    for (;;) {
+      switch (c) {
+      case '0': case '1': case '2': case '3': case '4':
+      case '5': case '6': case '7': case '8': case '9':
+        nondigit = 0;
+        tokadd(p, c);
+        break;
+
+      case '.':
+        if (nondigit) goto trailing_uc;
+        if (seen_point || seen_e) {
+          goto decode_num;
+        }
+        else {
+          int c0 = nextc(p);
+          if (c0 < 0 || !ISDIGIT(c0)) {
+            pushback(p, c0);
+            goto decode_num;
+          }
+          c = c0;
+        }
+        tokadd(p, '.');
+        tokadd(p, c);
+        is_float++;
+        seen_point++;
+        nondigit = 0;
+        break;
+
+      case 'e':
+      case 'E':
+        if (nondigit) {
+          pushback(p, c);
+          c = nondigit;
+          goto decode_num;
+        }
+        if (seen_e) {
+          goto decode_num;
+        }
+        tokadd(p, c);
+        seen_e++;
+        is_float++;
+        nondigit = c;
+        c = nextc(p);
+        if (c != '-' && c != '+') continue;
+        tokadd(p, c);
+        nondigit = c;
+        break;
+
+      case '_':       /* '_' in number just ignored */
+        if (nondigit) goto decode_num;
+        nondigit = c;
+        break;
+
+      default:
+        goto decode_num;
+      }
+      c = nextc(p);
+    }
+
+    decode_num:
+    pushback(p, c);
+    if (nondigit) {
+      trailing_uc:
+      yyerror_c(p, "trailing non digit in number: ", (char)nondigit);
+    }
+    tokfix(p);
+    if (is_float) {
+#ifdef MRB_WITHOUT_FLOAT
+      yywarning_s(p, "floating point numbers are not supported", tok(p));
+      pylval.nd = new_int(p, "0", 10, 0);
+      return tINTEGER;
+#else
+      double d;
+      char *endp;
+
+      errno = 0;
+      d = mrb_float_read(tok(p), &endp);
+      if (d == 0 && endp == tok(p)) {
+        yywarning_s(p, "corrupted float value", tok(p));
+      }
+      else if (errno == ERANGE) {
+        yywarning_s(p, "float out of range", tok(p));
+        errno = 0;
+      }
+      suffix = number_literal_suffix(p);
+      pylval.nd = new_float(p, tok(p), suffix);
+      return tFLOAT;
+#endif
+    }
+    suffix = number_literal_suffix(p);
+    pylval.nd = new_int(p, tok(p), 10, suffix);
+    return tINTEGER;
+  }
+
+  case ')':
+  case ']':
+    p->paren_nest--;
+    /* fall through */
+  case '}':
+    COND_LEXPOP();
+    CMDARG_LEXPOP();
+    if (c == ')')
+      p->lstate = EXPR_ENDFN;
+    else
+      p->lstate = EXPR_END;
+    return c;
+
+  case ':':
+    c = nextc(p);
+    if (c == ':') {
+      if (IS_BEG() || p->lstate == EXPR_CLASS || IS_SPCARG(-1)) {
+        p->lstate = EXPR_BEG;
+        return tCOLON3;
+      }
+      p->lstate = EXPR_DOT;
+      return tCOLON2;
+    }
+    if (!space_seen && IS_END()) {
+      pushback(p, c);
+      p->lstate = EXPR_BEG;
+      return tLABEL_TAG;
+    }
+    if (!ISSPACE(c) || IS_BEG()) {
+      pushback(p, c);
+      p->lstate = EXPR_FNAME;
+      return tSYMBEG;
+    }
+    pushback(p, c);
+    p->lstate = EXPR_BEG;
+    return ':';
+
+  case '/':
+    if (IS_BEG()) {
+      p->lex_strterm = new_strterm(p, str_regexp, '/', 0);
+      return tREGEXP_BEG;
+    }
+    if ((c = nextc(p)) == '=') {
+      pylval.id = intern_lit("/");
+      p->lstate = EXPR_BEG;
+      return tOP_ASGN;
+    }
+    pushback(p, c);
+    if (IS_SPCARG(c)) {
+      p->lex_strterm = new_strterm(p, str_regexp, '/', 0);
+      return tREGEXP_BEG;
+    }
+    if (p->lstate == EXPR_FNAME || p->lstate == EXPR_DOT) {
+      p->lstate = EXPR_ARG;
+    }
+    else {
+      p->lstate = EXPR_BEG;
+    }
+    return '/';
+
+  case '^':
+    if ((c = nextc(p)) == '=') {
+      pylval.id = intern_lit("^");
+      p->lstate = EXPR_BEG;
+      return tOP_ASGN;
+    }
+    if (p->lstate == EXPR_FNAME || p->lstate == EXPR_DOT) {
+      p->lstate = EXPR_ARG;
+    }
+    else {
+      p->lstate = EXPR_BEG;
+    }
+    pushback(p, c);
+    return '^';
+
+  case ';':
+    p->lstate = EXPR_BEG;
+    return ';';
+
+  case ',':
+    p->lstate = EXPR_BEG;
+    return ',';
+
+  case '~':
+    if (p->lstate == EXPR_FNAME || p->lstate == EXPR_DOT) {
+      if ((c = nextc(p)) != '@') {
+        pushback(p, c);
+      }
+      p->lstate = EXPR_ARG;
+    }
+    else {
+      p->lstate = EXPR_BEG;
+    }
+    return '~';
+
+  case '(':
+    if (IS_BEG()) {
+      c = tLPAREN;
+    }
+    else if (IS_SPCARG(-1)) {
+      c = tLPAREN_ARG;
+    }
+    else if (p->lstate == EXPR_END && space_seen) {
+      c = tLPAREN_ARG;
+    }
+    p->paren_nest++;
+    COND_PUSH(0);
+    CMDARG_PUSH(0);
+    p->lstate = EXPR_BEG;
+    return c;
+
+  case '[':
+    p->paren_nest++;
+    if (p->lstate == EXPR_FNAME || p->lstate == EXPR_DOT) {
+      p->lstate = EXPR_ARG;
+      if ((c = nextc(p)) == ']') {
+        if ((c = nextc(p)) == '=') {
+          return tASET;
+        }
+        pushback(p, c);
+        return tAREF;
+      }
+      pushback(p, c);
+      return '[';
+    }
+    else if (IS_BEG()) {
+      c = tLBRACK;
+    }
+    else if (IS_ARG() && space_seen) {
+      c = tLBRACK;
+    }
+    p->lstate = EXPR_BEG;
+    COND_PUSH(0);
+    CMDARG_PUSH(0);
+    return c;
+
+  case '{':
+    if (p->lpar_beg && p->lpar_beg == p->paren_nest) {
+      p->lstate = EXPR_BEG;
+      p->lpar_beg = 0;
+      p->paren_nest--;
+      COND_PUSH(0);
+      CMDARG_PUSH(0);
+      return tLAMBEG;
+    }
+    if (IS_ARG() || p->lstate == EXPR_END || p->lstate == EXPR_ENDFN)
+      c = '{';          /* block (primary) */
+    else if (p->lstate == EXPR_ENDARG)
+      c = tLBRACE_ARG;  /* block (expr) */
+    else
+      c = tLBRACE;      /* hash */
+    COND_PUSH(0);
+    CMDARG_PUSH(0);
+    p->lstate = EXPR_BEG;
+    return c;
+
+  case '\\':
+    c = nextc(p);
+    if (c == '\n') {
+      p->lineno++;
+      p->column = 0;
+      space_seen = 1;
+      goto retry; /* skip \\n */
+    }
+    pushback(p, c);
+    return '\\';
+
+  case '%':
+    if (IS_BEG()) {
+      int term;
+      int paren;
+
+      c = nextc(p);
+      quotation:
+      if (c < 0 || !ISALNUM(c)) {
+        term = c;
+        c = 'Q';
+      }
+      else {
+        term = nextc(p);
+        if (ISALNUM(term)) {
+          yyerror(p, "unknown type of %string");
+          return 0;
+        }
+      }
+      if (c < 0 || term < 0) {
+        yyerror(p, "unterminated quoted string meets end of file");
+        return 0;
+      }
+      paren = term;
+      if (term == '(') term = ')';
+      else if (term == '[') term = ']';
+      else if (term == '{') term = '}';
+      else if (term == '<') term = '>';
+      else paren = 0;
+
+      switch (c) {
+      case 'Q':
+        p->lex_strterm = new_strterm(p, str_dquote, term, paren);
+        return tSTRING_BEG;
+
+      case 'q':
+        p->lex_strterm = new_strterm(p, str_squote, term, paren);
+        return parse_string(p);
+
+      case 'W':
+        p->lex_strterm = new_strterm(p, str_dword, term, paren);
+        return tWORDS_BEG;
+
+      case 'w':
+        p->lex_strterm = new_strterm(p, str_sword, term, paren);
+        return tWORDS_BEG;
+
+      case 'x':
+        p->lex_strterm = new_strterm(p, str_xquote, term, paren);
+        return tXSTRING_BEG;
+
+      case 'r':
+        p->lex_strterm = new_strterm(p, str_regexp, term, paren);
+        return tREGEXP_BEG;
+
+      case 's':
+        p->lex_strterm = new_strterm(p, str_ssym, term, paren);
+        return tSYMBEG;
+
+      case 'I':
+        p->lex_strterm = new_strterm(p, str_dsymbols, term, paren);
+        return tSYMBOLS_BEG;
+
+      case 'i':
+        p->lex_strterm = new_strterm(p, str_ssymbols, term, paren);
+        return tSYMBOLS_BEG;
+
+      default:
+        yyerror(p, "unknown type of %string");
+        return 0;
+      }
+    }
+    if ((c = nextc(p)) == '=') {
+      pylval.id = intern_lit("%");
+      p->lstate = EXPR_BEG;
+      return tOP_ASGN;
+    }
+    if (IS_SPCARG(c)) {
+      goto quotation;
+    }
+    if (p->lstate == EXPR_FNAME || p->lstate == EXPR_DOT) {
+      p->lstate = EXPR_ARG;
+    }
+    else {
+      p->lstate = EXPR_BEG;
+    }
+    pushback(p, c);
+    return '%';
+
+  case '$':
+    p->lstate = EXPR_END;
+    token_column = newtok(p);
+    c = nextc(p);
+    if (c < 0) {
+      yyerror(p, "incomplete global variable syntax");
+      return 0;
+    }
+    switch (c) {
+    case '_':     /* $_: last read line string */
+      c = nextc(p);
+      if (c >= 0 && identchar(c)) { /* if there is more after _ it is a variable */
+        tokadd(p, '$');
+        tokadd(p, c);
+        break;
+      }
+      pushback(p, c);
+      c = '_';
+      /* fall through */
+    case '~':     /* $~: match-data */
+    case '*':     /* $*: argv */
+    case '$':     /* $$: pid */
+    case '?':     /* $?: last status */
+    case '!':     /* $!: error string */
+    case '@':     /* $@: error position */
+    case '/':     /* $/: input record separator */
+    case '\\':    /* $\: output record separator */
+    case ';':     /* $;: field separator */
+    case ',':     /* $,: output field separator */
+    case '.':     /* $.: last read line number */
+    case '=':     /* $=: ignorecase */
+    case ':':     /* $:: load path */
+    case '<':     /* $<: reading filename */
+    case '>':     /* $>: default output handle */
+    case '\"':    /* $": already loaded files */
+      tokadd(p, '$');
+      tokadd(p, c);
+      tokfix(p);
+      pylval.id = intern(tok(p), toklen(p));
+      return tGVAR;
+
+    case '-':
+      tokadd(p, '$');
+      tokadd(p, c);
+      c = nextc(p);
+      pushback(p, c);
+      gvar:
+      tokfix(p);
+      pylval.id = intern(tok(p), toklen(p));
+      return tGVAR;
+
+    case '&':     /* $&: last match */
+    case '`':     /* $`: string before last match */
+    case '\'':    /* $': string after last match */
+    case '+':     /* $+: string matches last pattern */
+      if (last_state == EXPR_FNAME) {
+        tokadd(p, '$');
+        tokadd(p, c);
+        goto gvar;
+      }
+      pylval.nd = new_back_ref(p, c);
+      return tBACK_REF;
+
+    case '1': case '2': case '3':
+    case '4': case '5': case '6':
+    case '7': case '8': case '9':
+      do {
+        tokadd(p, c);
+        c = nextc(p);
+      } while (c >= 0 && ISDIGIT(c));
+      pushback(p, c);
+      if (last_state == EXPR_FNAME) goto gvar;
+      tokfix(p);
+      {
+        unsigned long n = strtoul(tok(p), NULL, 10);
+        if (n > INT_MAX) {
+          yyerror(p, "capture group index must be <= " MRB_STRINGIZE(INT_MAX));
+          return 0;
+        }
+        pylval.nd = new_nth_ref(p, (int)n);
+      }
+      return tNTH_REF;
+
+    default:
+      if (!identchar(c)) {
+        pushback(p,  c);
+        return '$';
+      }
+      /* fall through */
+    case '0':
+      tokadd(p, '$');
+    }
+    break;
+
+    case '@':
+      c = nextc(p);
+      token_column = newtok(p);
+      tokadd(p, '@');
+      if (c == '@') {
+        tokadd(p, '@');
+        c = nextc(p);
+      }
+      if (c < 0) {
+        if (p->tidx == 1) {
+          yyerror(p, "incomplete instance variable syntax");
+        }
+        else {
+          yyerror(p, "incomplete class variable syntax");
+        }
+        return 0;
+      }
+      else if (ISDIGIT(c)) {
+        if (p->tidx == 1) {
+          yyerror_c(p, "wrong instance variable name: @", c);
+        }
+        else {
+          yyerror_c(p, "wrong class variable name: @@", c);
+        }
+        return 0;
+      }
+      if (!identchar(c)) {
+        pushback(p, c);
+        return '@';
+      }
+      break;
+
+    case '_':
+      token_column = newtok(p);
+      break;
+
+    default:
+      if (!identchar(c)) {
+        char buf[36];
+        const char s[] = "Invalid char in expression: 0x";
+        const char hexdigits[] = "0123456789ABCDEF";
+
+        strcpy(buf, s);
+        buf[sizeof(s)-1] = hexdigits[(c & 0xf0) >> 4];
+        buf[sizeof(s)]   = hexdigits[(c & 0x0f)];
+        buf[sizeof(s)+1] = 0;
+        yyerror(p, buf);
+        goto retry;
+      }
+
+      token_column = newtok(p);
+      break;
+  }
+
+  do {
+    tokadd(p, c);
+    c = nextc(p);
+    if (c < 0) break;
+  } while (identchar(c));
+  if (token_column == 0 && toklen(p) == 7 && (c < 0 || c == '\n') &&
+      strncmp(tok(p), "__END__", toklen(p)) == 0)
+    return -1;
+
+  switch (tok(p)[0]) {
+  case '@': case '$':
+    pushback(p, c);
+    break;
+  default:
+    if ((c == '!' || c == '?') && !peek(p, '=')) {
+      tokadd(p, c);
+    }
+    else {
+      pushback(p, c);
+    }
+  }
+  tokfix(p);
+  {
+    int result = 0;
+
+    switch (tok(p)[0]) {
+    case '$':
+      p->lstate = EXPR_END;
+      result = tGVAR;
+      break;
+    case '@':
+      p->lstate = EXPR_END;
+      if (tok(p)[1] == '@')
+        result = tCVAR;
+      else
+        result = tIVAR;
+      break;
+
+    case '_':
+      if (toklen(p) == 2 && ISDIGIT(tok(p)[1]) && p->nvars) {
+        int n = tok(p)[1] - '0';
+        int nvar;
+
+        if (n > 0) {
+          node *nvars = p->nvars->cdr;
+
+          while (nvars) {
+            nvar = intn(nvars->car);
+            if (nvar == -2) break; /* top of the scope */
+            if (nvar > 0) {
+              yywarning(p, "numbered parameter used in outer block");
+              break;
+            }
+            nvars->car = nint(-1);
+            nvars = nvars->cdr;
+          }
+          nvar = intn(p->nvars->car);
+          if (nvar == -1) {
+            yywarning(p, "numbered parameter used in inner block");
+          }
+          if (nvar >= -1) {
+            pylval.num = n;
+            p->lstate = EXPR_END;
+            return tNUMPARAM;
+          }
+          else {
+            yywarning(p, "identifier for numbered parameter; consider another name");
+          }
+        }
+      }
+      /* fall through */
+    default:
+      if (toklast(p) == '!' || toklast(p) == '?') {
+        result = tFID;
+      }
+      else {
+        if (p->lstate == EXPR_FNAME) {
+          if ((c = nextc(p)) == '=' && !peek(p, '~') && !peek(p, '>') &&
+              (!peek(p, '=') || (peek_n(p, '>', 1)))) {
+            result = tIDENTIFIER;
+            tokadd(p, c);
+            tokfix(p);
+          }
+          else {
+            pushback(p, c);
+          }
+          if ((c = nextc(p)) == '=' && !peek(p, '~') && !peek(p, '>') &&
+              (!peek(p, '=') || (peek_n(p, '>', 1)))) {
+            result = tIDENTIFIER;
+            tokadd(p, c);
+            tokfix(p);
+          }
+          else {
+            pushback(p, c);
+          }
+        }
+        if (result == 0 && ISUPPER(tok(p)[0])) {
+          result = tCONSTANT;
+        }
+        else {
+          result = tIDENTIFIER;
+        }
+      }
+
+      if (IS_LABEL_POSSIBLE()) {
+        if (IS_LABEL_SUFFIX(0)) {
+          p->lstate = EXPR_END;
+          tokfix(p);
+          pylval.id = intern(tok(p), toklen(p));
+          return tIDENTIFIER;
+        }
+      }
+      if (p->lstate != EXPR_DOT) {
+        const struct kwtable *kw;
+
+        /* See if it is a reserved word.  */
+        kw = mrb_reserved_word(tok(p), toklen(p));
+        if (kw) {
+          enum mrb_lex_state_enum state = p->lstate;
+          pylval.num = p->lineno;
+          p->lstate = kw->state;
+          if (state == EXPR_FNAME) {
+            pylval.id = intern_cstr(kw->name);
+            return kw->id[0];
+          }
+          if (p->lstate == EXPR_BEG) {
+            p->cmd_start = TRUE;
+          }
+          if (kw->id[0] == keyword_do) {
+            if (p->lpar_beg && p->lpar_beg == p->paren_nest) {
+              p->lpar_beg = 0;
+              p->paren_nest--;
+              return keyword_do_LAMBDA;
+            }
+            if (COND_P()) return keyword_do_cond;
+            if (CMDARG_P() && state != EXPR_CMDARG)
+              return keyword_do_block;
+            if (state == EXPR_ENDARG || state == EXPR_BEG)
+              return keyword_do_block;
+            return keyword_do;
+          }
+          if (state == EXPR_BEG || state == EXPR_VALUE)
+            return kw->id[0];
+          else {
+            if (kw->id[0] != kw->id[1])
+              p->lstate = EXPR_BEG;
+            return kw->id[1];
+          }
+        }
+      }
+
+      if (IS_BEG() || p->lstate == EXPR_DOT || IS_ARG()) {
+        if (cmd_state) {
+          p->lstate = EXPR_CMDARG;
+        }
+        else {
+          p->lstate = EXPR_ARG;
+        }
+      }
+      else if (p->lstate == EXPR_FNAME) {
+        p->lstate = EXPR_ENDFN;
+      }
+      else {
+        p->lstate = EXPR_END;
+      }
+    }
+    {
+      mrb_sym ident = intern(tok(p), toklen(p));
+
+      pylval.id = ident;
+      if (last_state != EXPR_DOT && ISLOWER(tok(p)[0]) && local_var_p(p, ident)) {
+        p->lstate = EXPR_END;
+      }
+    }
+    return result;
+  }
+}
+
+static int
+yylex(void *lval, parser_state *p)
+{
+  p->ylval = lval;
+  return parser_yylex(p);
+}
+
+static void
+parser_init_cxt(parser_state *p, mrbc_context *cxt)
+{
+  if (!cxt) return;
+  if (cxt->filename) mrb_parser_set_filename(p, cxt->filename);
+  if (cxt->lineno) p->lineno = cxt->lineno;
+  if (cxt->syms) {
+    int i;
+
+    p->locals = cons(0,0);
+    for (i=0; i<cxt->slen; i++) {
+      local_add_f(p, cxt->syms[i]);
+    }
+  }
+  p->capture_errors = cxt->capture_errors;
+  p->no_optimize = cxt->no_optimize;
+  p->on_eval = cxt->on_eval;
+  if (cxt->partial_hook) {
+    p->cxt = cxt;
+  }
+}
+
+static void
+parser_update_cxt(parser_state *p, mrbc_context *cxt)
+{
+  node *n, *n0;
+  int i = 0;
+
+  if (!cxt) return;
+  if (intn(p->tree->car) != NODE_SCOPE) return;
+  n0 = n = p->tree->cdr->car;
+  while (n) {
+    i++;
+    n = n->cdr;
+  }
+  cxt->syms = (mrb_sym *)mrb_realloc(p->mrb, cxt->syms, i*sizeof(mrb_sym));
+  cxt->slen = i;
+  for (i=0, n=n0; n; i++,n=n->cdr) {
+    cxt->syms[i] = sym(n->car);
+  }
+}
+
+void mrb_codedump_all(mrb_state*, struct RProc*);
+void mrb_parser_dump(mrb_state *mrb, node *tree, int offset);
+
+MRB_API void
+mrb_parser_parse(parser_state *p, mrbc_context *c)
+{
+  struct mrb_jmpbuf buf1;
+  p->jmp = &buf1;
+
+  MRB_TRY(p->jmp) {
+    int n = 1;
+
+    p->cmd_start = TRUE;
+    p->in_def = p->in_single = 0;
+    p->nerr = p->nwarn = 0;
+    p->lex_strterm = NULL;
+
+    parser_init_cxt(p, c);
+
+    if (p->mrb->jmp) {
+      n = yyparse(p);
+    }
+    else {
+      struct mrb_jmpbuf buf2;
+
+      p->mrb->jmp = &buf2;
+      MRB_TRY(p->mrb->jmp) {
+        n = yyparse(p);
+      }
+      MRB_CATCH(p->mrb->jmp) {
+        p->nerr++;
+      }
+      MRB_END_EXC(p->mrb->jmp);
+      p->mrb->jmp = 0;
+    }
+    if (n != 0 || p->nerr > 0) {
+      p->tree = 0;
+      return;
+    }
+    if (!p->tree) {
+      p->tree = new_nil(p);
+    }
+    parser_update_cxt(p, c);
+    if (c && c->dump_result) {
+      mrb_parser_dump(p->mrb, p->tree, 0);
+    }
+  }
+  MRB_CATCH(p->jmp) {
+    yyerror(p, "memory allocation error");
+    p->nerr++;
+    p->tree = 0;
+    return;
+  }
+  MRB_END_EXC(p->jmp);
+}
+
+MRB_API parser_state*
+mrb_parser_new(mrb_state *mrb)
+{
+  mrb_pool *pool;
+  parser_state *p;
+  static const parser_state parser_state_zero = { 0 };
+
+  pool = mrb_pool_open(mrb);
+  if (!pool) return NULL;
+  p = (parser_state *)mrb_pool_alloc(pool, sizeof(parser_state));
+  if (!p) return NULL;
+
+  *p = parser_state_zero;
+  p->mrb = mrb;
+  p->pool = pool;
+
+  p->s = p->send = NULL;
+#ifndef MRB_DISABLE_STDIO
+  p->f = NULL;
+#endif
+
+  p->cmd_start = TRUE;
+  p->in_def = p->in_single = 0;
+
+  p->capture_errors = FALSE;
+  p->lineno = 1;
+  p->column = 0;
+#if defined(PARSER_TEST) || defined(PARSER_DEBUG)
+  yydebug = 1;
+#endif
+  p->tsiz = MRB_PARSER_TOKBUF_SIZE;
+  p->tokbuf = p->buf;
+
+  p->lex_strterm = NULL;
+  p->all_heredocs = p->parsing_heredoc = NULL;
+  p->lex_strterm_before_heredoc = NULL;
+
+  p->current_filename_index = -1;
+  p->filename_table = NULL;
+  p->filename_table_length = 0;
+
+  return p;
+}
+
+MRB_API void
+mrb_parser_free(parser_state *p) {
+  if (p->tokbuf != p->buf) {
+    mrb_free(p->mrb, p->tokbuf);
+  }
+  mrb_pool_close(p->pool);
+}
+
+MRB_API mrbc_context*
+mrbc_context_new(mrb_state *mrb)
+{
+  return (mrbc_context *)mrb_calloc(mrb, 1, sizeof(mrbc_context));
+}
+
+MRB_API void
+mrbc_context_free(mrb_state *mrb, mrbc_context *cxt)
+{
+  mrb_free(mrb, cxt->filename);
+  mrb_free(mrb, cxt->syms);
+  mrb_free(mrb, cxt);
+}
+
+MRB_API const char*
+mrbc_filename(mrb_state *mrb, mrbc_context *c, const char *s)
+{
+  if (s) {
+    size_t len = strlen(s);
+    char *p = (char *)mrb_malloc(mrb, len + 1);
+
+    memcpy(p, s, len + 1);
+    if (c->filename) {
+      mrb_free(mrb, c->filename);
+    }
+    c->filename = p;
+  }
+  return c->filename;
+}
+
+MRB_API void
+mrbc_partial_hook(mrb_state *mrb, mrbc_context *c, int (*func)(struct mrb_parser_state*), void *data)
+{
+  c->partial_hook = func;
+  c->partial_data = data;
+}
+
+MRB_API void
+mrb_parser_set_filename(struct mrb_parser_state *p, const char *f)
+{
+  mrb_sym sym;
+  size_t i;
+  mrb_sym* new_table;
+
+  sym = mrb_intern_cstr(p->mrb, f);
+  p->filename_sym = sym;
+  p->lineno = (p->filename_table_length > 0)? 0 : 1;
+
+  for (i = 0; i < p->filename_table_length; ++i) {
+    if (p->filename_table[i] == sym) {
+      p->current_filename_index = (int)i;
+      return;
+    }
+  }
+
+  if (p->filename_table_length == UINT16_MAX) {
+    yyerror(p, "too many files to compile");
+    return;
+  }
+  p->current_filename_index = p->filename_table_length++;
+
+  new_table = (mrb_sym*)parser_palloc(p, sizeof(mrb_sym) * p->filename_table_length);
+  if (p->filename_table) {
+    memmove(new_table, p->filename_table, sizeof(mrb_sym) * p->current_filename_index);
+  }
+  p->filename_table = new_table;
+  p->filename_table[p->filename_table_length - 1] = sym;
+}
+
+MRB_API mrb_sym
+mrb_parser_get_filename(struct mrb_parser_state* p, uint16_t idx) {
+  if (idx >= p->filename_table_length) return 0;
+  else {
+    return p->filename_table[idx];
+  }
+}
+
+#ifndef MRB_DISABLE_STDIO
+MRB_API parser_state*
+mrb_parse_file(mrb_state *mrb, FILE *f, mrbc_context *c)
+{
+  parser_state *p;
+
+  p = mrb_parser_new(mrb);
+  if (!p) return NULL;
+  p->s = p->send = NULL;
+  p->f = f;
+
+  mrb_parser_parse(p, c);
+  return p;
+}
+#endif
+
+MRB_API parser_state*
+mrb_parse_nstring(mrb_state *mrb, const char *s, size_t len, mrbc_context *c)
+{
+  parser_state *p;
+
+  p = mrb_parser_new(mrb);
+  if (!p) return NULL;
+  p->s = s;
+  p->send = s + len;
+
+  mrb_parser_parse(p, c);
+  return p;
+}
+
+MRB_API parser_state*
+mrb_parse_string(mrb_state *mrb, const char *s, mrbc_context *c)
+{
+  return mrb_parse_nstring(mrb, s, strlen(s), c);
+}
+
+MRB_API mrb_value
+mrb_load_exec(mrb_state *mrb, struct mrb_parser_state *p, mrbc_context *c)
+{
+  struct RClass *target = mrb->object_class;
+  struct RProc *proc;
+  mrb_value v;
+  unsigned int keep = 0;
+
+  if (!p) {
+    return mrb_undef_value();
+  }
+  if (!p->tree || p->nerr) {
+    if (c) c->parser_nerr = p->nerr;
+    if (p->capture_errors) {
+      char buf[256];
+
+      strcpy(buf, "line ");
+      dump_int(p->error_buffer[0].lineno, buf+5);
+      strcat(buf, ": ");
+      strncat(buf, p->error_buffer[0].message, sizeof(buf) - strlen(buf) - 1);
+      mrb->exc = mrb_obj_ptr(mrb_exc_new(mrb, E_SYNTAX_ERROR, buf, strlen(buf)));
+      mrb_parser_free(p);
+      return mrb_undef_value();
+    }
+    else {
+      if (mrb->exc == NULL) {
+        mrb->exc = mrb_obj_ptr(mrb_exc_new_str_lit(mrb, E_SYNTAX_ERROR, "syntax error"));
+      }
+      mrb_parser_free(p);
+      return mrb_undef_value();
+    }
+  }
+  proc = mrb_generate_code(mrb, p);
+  mrb_parser_free(p);
+  if (proc == NULL) {
+    if (mrb->exc == NULL) {
+      mrb->exc = mrb_obj_ptr(mrb_exc_new_str_lit(mrb, E_SCRIPT_ERROR, "codegen error"));
+    }
+    return mrb_undef_value();
+  }
+  if (c) {
+    if (c->dump_result) mrb_codedump_all(mrb, proc);
+    if (c->no_exec) return mrb_obj_value(proc);
+    if (c->target_class) {
+      target = c->target_class;
+    }
+    if (c->keep_lv) {
+      keep = c->slen + 1;
+    }
+    else {
+      c->keep_lv = TRUE;
+    }
+  }
+  MRB_PROC_SET_TARGET_CLASS(proc, target);
+  if (mrb->c->ci) {
+    mrb->c->ci->target_class = target;
+  }
+  v = mrb_top_run(mrb, proc, mrb_top_self(mrb), keep);
+  if (mrb->exc) return mrb_nil_value();
+  return v;
+}
+
+#ifndef MRB_DISABLE_STDIO
+MRB_API mrb_value
+mrb_load_file_cxt(mrb_state *mrb, FILE *f, mrbc_context *c)
+{
+  return mrb_load_exec(mrb, mrb_parse_file(mrb, f, c), c);
+}
+
+MRB_API mrb_value
+mrb_load_file(mrb_state *mrb, FILE *f)
+{
+  return mrb_load_file_cxt(mrb, f, NULL);
+}
+#endif
+
+MRB_API mrb_value
+mrb_load_nstring_cxt(mrb_state *mrb, const char *s, size_t len, mrbc_context *c)
+{
+  return mrb_load_exec(mrb, mrb_parse_nstring(mrb, s, len, c), c);
+}
+
+MRB_API mrb_value
+mrb_load_nstring(mrb_state *mrb, const char *s, size_t len)
+{
+  return mrb_load_nstring_cxt(mrb, s, len, NULL);
+}
+
+MRB_API mrb_value
+mrb_load_string_cxt(mrb_state *mrb, const char *s, mrbc_context *c)
+{
+  return mrb_load_nstring_cxt(mrb, s, strlen(s), c);
+}
+
+MRB_API mrb_value
+mrb_load_string(mrb_state *mrb, const char *s)
+{
+  return mrb_load_string_cxt(mrb, s, NULL);
+}
+
+#ifndef MRB_DISABLE_STDIO
+
+static void
+dump_prefix(node *tree, int offset)
+{
+  printf("%05d ", tree->lineno);
+  while (offset--) {
+    putc(' ', stdout);
+    putc(' ', stdout);
+  }
+}
+
+static void
+dump_recur(mrb_state *mrb, node *tree, int offset)
+{
+  while (tree) {
+    mrb_parser_dump(mrb, tree->car, offset);
+    tree = tree->cdr;
+  }
+}
+
+static void
+dump_args(mrb_state *mrb, node *n, int offset)
+{
+  if (n->car) {
+    dump_prefix(n, offset+1);
+    printf("mandatory args:\n");
+    dump_recur(mrb, n->car, offset+2);
+  }
+  n = n->cdr;
+  if (n->car) {
+    dump_prefix(n, offset+1);
+    printf("optional args:\n");
+    {
+      node *n2 = n->car;
+
+      while (n2) {
+        dump_prefix(n2, offset+2);
+        printf("%s=\n", mrb_sym_name(mrb, sym(n2->car->car)));
+        mrb_parser_dump(mrb, n2->car->cdr, offset+3);
+        n2 = n2->cdr;
+      }
+    }
+  }
+  n = n->cdr;
+  if (n->car) {
+    dump_prefix(n, offset+1);
+    printf("rest=*%s\n", mrb_sym_name(mrb, sym(n->car)));
+  }
+  n = n->cdr;
+  if (n->car) {
+    dump_prefix(n, offset+1);
+    printf("post mandatory args:\n");
+    dump_recur(mrb, n->car, offset+2);
+  }
+
+  n = n->cdr;
+  if (n) {
+    mrb_assert(intn(n->car) == NODE_ARGS_TAIL);
+    mrb_parser_dump(mrb, n, offset);
+  }
+}
+
+/*
+ * This function restores the GC arena on return.
+ * For this reason, if a process that further generates an object is
+ * performed at the caller, the string pointer returned as the return
+ * value may become invalid.
+ */
+static const char*
+str_dump(mrb_state *mrb, const char *str, int len)
+{
+  mrb_int ai = mrb_gc_arena_save(mrb);
+  mrb_value s;
+# if INT_MAX > MRB_INT_MAX / 4
+  /* check maximum length with "\xNN" charactor */
+  if (len > MRB_INT_MAX / 4) {
+    len = MRB_INT_MAX / 4;
+  }
+# endif
+  s = mrb_str_new(mrb, str, (mrb_int)len);
+  s = mrb_str_dump(mrb, s);
+  mrb_gc_arena_restore(mrb, ai);
+  return RSTRING_PTR(s);
+}
+#endif
+
+void
+mrb_parser_dump(mrb_state *mrb, node *tree, int offset)
+{
+#ifndef MRB_DISABLE_STDIO
+  int nodetype;
+
+  if (!tree) return;
+  again:
+  dump_prefix(tree, offset);
+  nodetype = intn(tree->car);
+  tree = tree->cdr;
+  switch (nodetype) {
+  case NODE_BEGIN:
+    printf("NODE_BEGIN:\n");
+    dump_recur(mrb, tree, offset+1);
+    break;
+
+  case NODE_RESCUE:
+    printf("NODE_RESCUE:\n");
+    if (tree->car) {
+      dump_prefix(tree, offset+1);
+      printf("body:\n");
+      mrb_parser_dump(mrb, tree->car, offset+2);
+    }
+    tree = tree->cdr;
+    if (tree->car) {
+      node *n2 = tree->car;
+
+      dump_prefix(n2, offset+1);
+      printf("rescue:\n");
+      while (n2) {
+        node *n3 = n2->car;
+        if (n3->car) {
+          dump_prefix(n2, offset+2);
+          printf("handle classes:\n");
+          dump_recur(mrb, n3->car, offset+3);
+        }
+        if (n3->cdr->car) {
+          dump_prefix(n3, offset+2);
+          printf("exc_var:\n");
+          mrb_parser_dump(mrb, n3->cdr->car, offset+3);
+        }
+        if (n3->cdr->cdr->car) {
+          dump_prefix(n3, offset+2);
+          printf("rescue body:\n");
+          mrb_parser_dump(mrb, n3->cdr->cdr->car, offset+3);
+        }
+        n2 = n2->cdr;
+      }
+    }
+    tree = tree->cdr;
+    if (tree->car) {
+      dump_prefix(tree, offset+1);
+      printf("else:\n");
+      mrb_parser_dump(mrb, tree->car, offset+2);
+    }
+    break;
+
+  case NODE_ENSURE:
+    printf("NODE_ENSURE:\n");
+    dump_prefix(tree, offset+1);
+    printf("body:\n");
+    mrb_parser_dump(mrb, tree->car, offset+2);
+    dump_prefix(tree, offset+1);
+    printf("ensure:\n");
+    mrb_parser_dump(mrb, tree->cdr->cdr, offset+2);
+    break;
+
+  case NODE_LAMBDA:
+    printf("NODE_LAMBDA:\n");
+    dump_prefix(tree, offset);
+    goto block;
+
+  case NODE_BLOCK:
+    block:
+    printf("NODE_BLOCK:\n");
+    tree = tree->cdr;
+    if (tree->car) {
+      dump_args(mrb, tree->car, offset+1);
+    }
+    dump_prefix(tree, offset+1);
+    printf("body:\n");
+    mrb_parser_dump(mrb, tree->cdr->car, offset+2);
+    break;
+
+  case NODE_IF:
+    printf("NODE_IF:\n");
+    dump_prefix(tree, offset+1);
+    printf("cond:\n");
+    mrb_parser_dump(mrb, tree->car, offset+2);
+    dump_prefix(tree, offset+1);
+    printf("then:\n");
+    mrb_parser_dump(mrb, tree->cdr->car, offset+2);
+    if (tree->cdr->cdr->car) {
+      dump_prefix(tree, offset+1);
+      printf("else:\n");
+      mrb_parser_dump(mrb, tree->cdr->cdr->car, offset+2);
+    }
+    break;
+
+  case NODE_AND:
+    printf("NODE_AND:\n");
+    mrb_parser_dump(mrb, tree->car, offset+1);
+    mrb_parser_dump(mrb, tree->cdr, offset+1);
+    break;
+
+  case NODE_OR:
+    printf("NODE_OR:\n");
+    mrb_parser_dump(mrb, tree->car, offset+1);
+    mrb_parser_dump(mrb, tree->cdr, offset+1);
+    break;
+
+  case NODE_CASE:
+    printf("NODE_CASE:\n");
+    if (tree->car) {
+      mrb_parser_dump(mrb, tree->car, offset+1);
+    }
+    tree = tree->cdr;
+    while (tree) {
+      dump_prefix(tree, offset+1);
+      printf("case:\n");
+      dump_recur(mrb, tree->car->car, offset+2);
+      dump_prefix(tree, offset+1);
+      printf("body:\n");
+      mrb_parser_dump(mrb, tree->car->cdr, offset+2);
+      tree = tree->cdr;
+    }
+    break;
+
+  case NODE_WHILE:
+    printf("NODE_WHILE:\n");
+    dump_prefix(tree, offset+1);
+    printf("cond:\n");
+    mrb_parser_dump(mrb, tree->car, offset+2);
+    dump_prefix(tree, offset+1);
+    printf("body:\n");
+    mrb_parser_dump(mrb, tree->cdr, offset+2);
+    break;
+
+  case NODE_UNTIL:
+    printf("NODE_UNTIL:\n");
+    dump_prefix(tree, offset+1);
+    printf("cond:\n");
+    mrb_parser_dump(mrb, tree->car, offset+2);
+    dump_prefix(tree, offset+1);
+    printf("body:\n");
+    mrb_parser_dump(mrb, tree->cdr, offset+2);
+    break;
+
+  case NODE_FOR:
+    printf("NODE_FOR:\n");
+    dump_prefix(tree, offset+1);
+    printf("var:\n");
+    {
+      node *n2 = tree->car;
+
+      if (n2->car) {
+        dump_prefix(n2, offset+2);
+        printf("pre:\n");
+        dump_recur(mrb, n2->car, offset+3);
+      }
+      n2 = n2->cdr;
+      if (n2) {
+        if (n2->car) {
+          dump_prefix(n2, offset+2);
+          printf("rest:\n");
+          mrb_parser_dump(mrb, n2->car, offset+3);
+        }
+        n2 = n2->cdr;
+        if (n2) {
+          if (n2->car) {
+            dump_prefix(n2, offset+2);
+            printf("post:\n");
+            dump_recur(mrb, n2->car, offset+3);
+          }
+        }
+      }
+    }
+    tree = tree->cdr;
+    dump_prefix(tree, offset+1);
+    printf("in:\n");
+    mrb_parser_dump(mrb, tree->car, offset+2);
+    tree = tree->cdr;
+    dump_prefix(tree, offset+1);
+    printf("do:\n");
+    mrb_parser_dump(mrb, tree->car, offset+2);
+    break;
+
+  case NODE_SCOPE:
+    printf("NODE_SCOPE:\n");
+    {
+      node *n2 = tree->car;
+      mrb_bool first_lval = TRUE;
+
+      if (n2 && (n2->car || n2->cdr)) {
+        dump_prefix(n2, offset+1);
+        printf("local variables:\n");
+        dump_prefix(n2, offset+2);
+        while (n2) {
+          if (n2->car) {
+            if (!first_lval) printf(", ");
+            printf("%s", mrb_sym_name(mrb, sym(n2->car)));
+            first_lval = FALSE;
+          }
+          n2 = n2->cdr;
+        }
+        printf("\n");
+      }
+    }
+    tree = tree->cdr;
+    offset++;
+    goto again;
+
+  case NODE_FCALL:
+  case NODE_CALL:
+  case NODE_SCALL:
+    switch (nodetype) {
+    case NODE_FCALL:
+      printf("NODE_FCALL:\n"); break;
+    case NODE_CALL:
+      printf("NODE_CALL(.):\n"); break;
+    case NODE_SCALL:
+      printf("NODE_SCALL(&.):\n"); break;
+    default:
+      break;
+    }
+    mrb_parser_dump(mrb, tree->car, offset+1);
+    dump_prefix(tree, offset+1);
+    printf("method='%s' (%d)\n",
+        mrb_sym_dump(mrb, sym(tree->cdr->car)),
+        intn(tree->cdr->car));
+    tree = tree->cdr->cdr->car;
+    if (tree) {
+      dump_prefix(tree, offset+1);
+      printf("args:\n");
+      dump_recur(mrb, tree->car, offset+2);
+      if (tree->cdr) {
+        dump_prefix(tree, offset+1);
+        printf("block:\n");
+        mrb_parser_dump(mrb, tree->cdr, offset+2);
+      }
+    }
+    break;
+
+  case NODE_DOT2:
+    printf("NODE_DOT2:\n");
+    mrb_parser_dump(mrb, tree->car, offset+1);
+    mrb_parser_dump(mrb, tree->cdr, offset+1);
+    break;
+
+  case NODE_DOT3:
+    printf("NODE_DOT3:\n");
+    mrb_parser_dump(mrb, tree->car, offset+1);
+    mrb_parser_dump(mrb, tree->cdr, offset+1);
+    break;
+
+  case NODE_COLON2:
+    printf("NODE_COLON2:\n");
+    mrb_parser_dump(mrb, tree->car, offset+1);
+    dump_prefix(tree, offset+1);
+    printf("::%s\n", mrb_sym_name(mrb, sym(tree->cdr)));
+    break;
+
+  case NODE_COLON3:
+    printf("NODE_COLON3: ::%s\n", mrb_sym_name(mrb, sym(tree)));
+    break;
+
+  case NODE_ARRAY:
+    printf("NODE_ARRAY:\n");
+    dump_recur(mrb, tree, offset+1);
+    break;
+
+  case NODE_HASH:
+    printf("NODE_HASH:\n");
+    while (tree) {
+      dump_prefix(tree, offset+1);
+      printf("key:\n");
+      mrb_parser_dump(mrb, tree->car->car, offset+2);
+      dump_prefix(tree, offset+1);
+      printf("value:\n");
+      mrb_parser_dump(mrb, tree->car->cdr, offset+2);
+      tree = tree->cdr;
+    }
+    break;
+
+  case NODE_KW_HASH:
+    printf("NODE_KW_HASH:\n");
+    while (tree) {
+      dump_prefix(tree, offset+1);
+      printf("key:\n");
+      mrb_parser_dump(mrb, tree->car->car, offset+2);
+      dump_prefix(tree, offset+1);
+      printf("value:\n");
+      mrb_parser_dump(mrb, tree->car->cdr, offset+2);
+      tree = tree->cdr;
+    }
+    break;
+
+  case NODE_SPLAT:
+    printf("NODE_SPLAT:\n");
+    mrb_parser_dump(mrb, tree, offset+1);
+    break;
+
+  case NODE_ASGN:
+    printf("NODE_ASGN:\n");
+    dump_prefix(tree, offset+1);
+    printf("lhs:\n");
+    mrb_parser_dump(mrb, tree->car, offset+2);
+    dump_prefix(tree, offset+1);
+    printf("rhs:\n");
+    mrb_parser_dump(mrb, tree->cdr, offset+2);
+    break;
+
+  case NODE_MASGN:
+    printf("NODE_MASGN:\n");
+    dump_prefix(tree, offset+1);
+    printf("mlhs:\n");
+    {
+      node *n2 = tree->car;
+
+      if (n2->car) {
+        dump_prefix(tree, offset+2);
+        printf("pre:\n");
+        dump_recur(mrb, n2->car, offset+3);
+      }
+      n2 = n2->cdr;
+      if (n2) {
+        if (n2->car) {
+          dump_prefix(n2, offset+2);
+          printf("rest:\n");
+          if (n2->car == (node*)-1) {
+            dump_prefix(n2, offset+2);
+            printf("(empty)\n");
+          }
+          else {
+            mrb_parser_dump(mrb, n2->car, offset+3);
+          }
+        }
+        n2 = n2->cdr;
+        if (n2) {
+          if (n2->car) {
+            dump_prefix(n2, offset+2);
+            printf("post:\n");
+            dump_recur(mrb, n2->car, offset+3);
+          }
+        }
+      }
+    }
+    dump_prefix(tree, offset+1);
+    printf("rhs:\n");
+    mrb_parser_dump(mrb, tree->cdr, offset+2);
+    break;
+
+  case NODE_OP_ASGN:
+    printf("NODE_OP_ASGN:\n");
+    dump_prefix(tree, offset+1);
+    printf("lhs:\n");
+    mrb_parser_dump(mrb, tree->car, offset+2);
+    tree = tree->cdr;
+    dump_prefix(tree, offset+1);
+    printf("op='%s' (%d)\n", mrb_sym_name(mrb, sym(tree->car)), intn(tree->car));
+    tree = tree->cdr;
+    mrb_parser_dump(mrb, tree->car, offset+1);
+    break;
+
+  case NODE_SUPER:
+    printf("NODE_SUPER:\n");
+    if (tree) {
+      dump_prefix(tree, offset+1);
+      printf("args:\n");
+      dump_recur(mrb, tree->car, offset+2);
+      if (tree->cdr) {
+        dump_prefix(tree, offset+1);
+        printf("block:\n");
+        mrb_parser_dump(mrb, tree->cdr, offset+2);
+      }
+    }
+    break;
+
+  case NODE_ZSUPER:
+    printf("NODE_ZSUPER\n");
+    break;
+
+  case NODE_RETURN:
+    printf("NODE_RETURN:\n");
+    mrb_parser_dump(mrb, tree, offset+1);
+    break;
+
+  case NODE_YIELD:
+    printf("NODE_YIELD:\n");
+    dump_recur(mrb, tree, offset+1);
+    break;
+
+  case NODE_BREAK:
+    printf("NODE_BREAK:\n");
+    mrb_parser_dump(mrb, tree, offset+1);
+    break;
+
+  case NODE_NEXT:
+    printf("NODE_NEXT:\n");
+    mrb_parser_dump(mrb, tree, offset+1);
+    break;
+
+  case NODE_REDO:
+    printf("NODE_REDO\n");
+    break;
+
+  case NODE_RETRY:
+    printf("NODE_RETRY\n");
+    break;
+
+  case NODE_LVAR:
+    printf("NODE_LVAR %s\n", mrb_sym_name(mrb, sym(tree)));
+    break;
+
+  case NODE_GVAR:
+    printf("NODE_GVAR %s\n", mrb_sym_name(mrb, sym(tree)));
+    break;
+
+  case NODE_IVAR:
+    printf("NODE_IVAR %s\n", mrb_sym_name(mrb, sym(tree)));
+    break;
+
+  case NODE_CVAR:
+    printf("NODE_CVAR %s\n", mrb_sym_name(mrb, sym(tree)));
+    break;
+
+  case NODE_NVAR:
+    printf("NODE_NVAR %d\n", intn(tree));
+    break;
+
+  case NODE_CONST:
+    printf("NODE_CONST %s\n", mrb_sym_name(mrb, sym(tree)));
+    break;
+
+  case NODE_MATCH:
+    printf("NODE_MATCH:\n");
+    dump_prefix(tree, offset + 1);
+    printf("lhs:\n");
+    mrb_parser_dump(mrb, tree->car, offset + 2);
+    dump_prefix(tree, offset + 1);
+    printf("rhs:\n");
+    mrb_parser_dump(mrb, tree->cdr, offset + 2);
+    break;
+
+  case NODE_BACK_REF:
+    printf("NODE_BACK_REF: $%c\n", intn(tree));
+    break;
+
+  case NODE_NTH_REF:
+    printf("NODE_NTH_REF: $%d\n", intn(tree));
+    break;
+
+  case NODE_ARG:
+    printf("NODE_ARG %s\n", mrb_sym_name(mrb, sym(tree)));
+    break;
+
+  case NODE_BLOCK_ARG:
+    printf("NODE_BLOCK_ARG:\n");
+    mrb_parser_dump(mrb, tree, offset+1);
+    break;
+
+  case NODE_INT:
+    printf("NODE_INT %s base %d\n", (char*)tree->car, intn(tree->cdr->car));
+    break;
+
+  case NODE_FLOAT:
+    printf("NODE_FLOAT %s\n", (char*)tree);
+    break;
+
+  case NODE_NEGATE:
+    printf("NODE_NEGATE:\n");
+    mrb_parser_dump(mrb, tree, offset+1);
+    break;
+
+  case NODE_STR:
+    printf("NODE_STR %s len %d\n", str_dump(mrb, (char*)tree->car, intn(tree->cdr)), intn(tree->cdr));
+    break;
+
+  case NODE_DSTR:
+    printf("NODE_DSTR:\n");
+    dump_recur(mrb, tree, offset+1);
+    break;
+
+  case NODE_XSTR:
+    printf("NODE_XSTR %s len %d\n", str_dump(mrb, (char*)tree->car, intn(tree->cdr)), intn(tree->cdr));
+    break;
+
+  case NODE_DXSTR:
+    printf("NODE_DXSTR:\n");
+    dump_recur(mrb, tree, offset+1);
+    break;
+
+  case NODE_REGX:
+    printf("NODE_REGX /%s/%s\n", (char*)tree->car, (char*)tree->cdr);
+    break;
+
+  case NODE_DREGX:
+    printf("NODE_DREGX:\n");
+    dump_recur(mrb, tree->car, offset+1);
+    dump_prefix(tree, offset);
+    printf("tail: %s\n", (char*)tree->cdr->cdr->car);
+    if (tree->cdr->cdr->cdr->car) {
+      dump_prefix(tree, offset);
+      printf("opt: %s\n", (char*)tree->cdr->cdr->cdr->car);
+    }
+    if (tree->cdr->cdr->cdr->cdr) {
+      dump_prefix(tree, offset);
+      printf("enc: %s\n", (char*)tree->cdr->cdr->cdr->cdr);
+    }
+    break;
+
+  case NODE_SYM:
+    printf("NODE_SYM :%s (%d)\n", mrb_sym_dump(mrb, sym(tree)),
+           intn(tree));
+    break;
+
+  case NODE_DSYM:
+    printf("NODE_DSYM:\n");
+    mrb_parser_dump(mrb, tree, offset+1);
+    break;
+
+  case NODE_WORDS:
+    printf("NODE_WORDS:\n");
+    dump_recur(mrb, tree, offset+1);
+    break;
+
+  case NODE_SYMBOLS:
+    printf("NODE_SYMBOLS:\n");
+    dump_recur(mrb, tree, offset+1);
+    break;
+
+  case NODE_LITERAL_DELIM:
+    printf("NODE_LITERAL_DELIM\n");
+    break;
+
+  case NODE_SELF:
+    printf("NODE_SELF\n");
+    break;
+
+  case NODE_NIL:
+    printf("NODE_NIL\n");
+    break;
+
+  case NODE_TRUE:
+    printf("NODE_TRUE\n");
+    break;
+
+  case NODE_FALSE:
+    printf("NODE_FALSE\n");
+    break;
+
+  case NODE_ALIAS:
+    printf("NODE_ALIAS %s %s:\n",
+        mrb_sym_dump(mrb, sym(tree->car)),
+        mrb_sym_dump(mrb, sym(tree->cdr)));
+    break;
+
+  case NODE_UNDEF:
+    printf("NODE_UNDEF");
+    {
+      node *t = tree;
+      while (t) {
+        printf(" %s", mrb_sym_dump(mrb, sym(t->car)));
+        t = t->cdr;
+      }
+    }
+    printf(":\n");
+    break;
+
+  case NODE_CLASS:
+    printf("NODE_CLASS:\n");
+    if (tree->car->car == (node*)0) {
+      dump_prefix(tree, offset+1);
+      printf(":%s\n", mrb_sym_name(mrb, sym(tree->car->cdr)));
+    }
+    else if (tree->car->car == (node*)1) {
+      dump_prefix(tree, offset+1);
+      printf("::%s\n", mrb_sym_name(mrb, sym(tree->car->cdr)));
+    }
+    else {
+      mrb_parser_dump(mrb, tree->car->car, offset+1);
+      dump_prefix(tree, offset+1);
+      printf("::%s\n", mrb_sym_name(mrb, sym(tree->car->cdr)));
+    }
+    if (tree->cdr->car) {
+      dump_prefix(tree, offset+1);
+      printf("super:\n");
+      mrb_parser_dump(mrb, tree->cdr->car, offset+2);
+    }
+    dump_prefix(tree, offset+1);
+    printf("body:\n");
+    mrb_parser_dump(mrb, tree->cdr->cdr->car->cdr, offset+2);
+    break;
+
+  case NODE_MODULE:
+    printf("NODE_MODULE:\n");
+    if (tree->car->car == (node*)0) {
+      dump_prefix(tree, offset+1);
+      printf(":%s\n", mrb_sym_name(mrb, sym(tree->car->cdr)));
+    }
+    else if (tree->car->car == (node*)1) {
+      dump_prefix(tree, offset+1);
+      printf("::%s\n", mrb_sym_name(mrb, sym(tree->car->cdr)));
+    }
+    else {
+      mrb_parser_dump(mrb, tree->car->car, offset+1);
+      dump_prefix(tree, offset+1);
+      printf("::%s\n", mrb_sym_name(mrb, sym(tree->car->cdr)));
+    }
+    dump_prefix(tree, offset+1);
+    printf("body:\n");
+    mrb_parser_dump(mrb, tree->cdr->car->cdr, offset+2);
+    break;
+
+  case NODE_SCLASS:
+    printf("NODE_SCLASS:\n");
+    mrb_parser_dump(mrb, tree->car, offset+1);
+    dump_prefix(tree, offset+1);
+    printf("body:\n");
+    mrb_parser_dump(mrb, tree->cdr->car->cdr, offset+2);
+    break;
+
+  case NODE_DEF:
+    printf("NODE_DEF:\n");
+    dump_prefix(tree, offset+1);
+    printf("%s\n", mrb_sym_dump(mrb, sym(tree->car)));
+    tree = tree->cdr;
+    {
+      node *n2 = tree->car;
+      mrb_bool first_lval = TRUE;
+
+      if (n2 && (n2->car || n2->cdr)) {
+        dump_prefix(n2, offset+1);
+        printf("local variables:\n");
+        dump_prefix(n2, offset+2);
+        while (n2) {
+          if (n2->car) {
+            if (!first_lval) printf(", ");
+            printf("%s", mrb_sym_name(mrb, sym(n2->car)));
+            first_lval = FALSE;
+          }
+          n2 = n2->cdr;
+        }
+        printf("\n");
+      }
+    }
+    tree = tree->cdr;
+    if (tree->car) {
+      dump_args(mrb, tree->car, offset);
+    }
+    mrb_parser_dump(mrb, tree->cdr->car, offset+1);
+    break;
+
+  case NODE_SDEF:
+    printf("NODE_SDEF:\n");
+    mrb_parser_dump(mrb, tree->car, offset+1);
+    tree = tree->cdr;
+    dump_prefix(tree, offset+1);
+    printf(":%s\n", mrb_sym_dump(mrb, sym(tree->car)));
+    tree = tree->cdr->cdr;
+    if (tree->car) {
+      dump_args(mrb, tree->car, offset+1);
+    }
+    tree = tree->cdr;
+    mrb_parser_dump(mrb, tree->car, offset+1);
+    break;
+
+  case NODE_POSTEXE:
+    printf("NODE_POSTEXE:\n");
+    mrb_parser_dump(mrb, tree, offset+1);
+    break;
+
+  case NODE_HEREDOC:
+    printf("NODE_HEREDOC (<<%s):\n", ((parser_heredoc_info*)tree)->term);
+    dump_recur(mrb, ((parser_heredoc_info*)tree)->doc, offset+1);
+    break;
+
+  case NODE_ARGS_TAIL:
+    printf("NODE_ARGS_TAIL:\n");
+    {
+      node *kws = tree->car;
+
+      while (kws) {
+        mrb_parser_dump(mrb, kws->car, offset+1);
+        kws = kws->cdr;
+      }
+    }
+    tree = tree->cdr;
+    if (tree->car) {
+      mrb_assert(intn(tree->car->car) == NODE_KW_REST_ARGS);
+      mrb_parser_dump(mrb, tree->car, offset+1);
+    }
+    tree = tree->cdr;
+    if (tree->car) {
+      dump_prefix(tree, offset+1);
+      printf("block='%s'\n", mrb_sym_name(mrb, sym(tree->car)));
+    }
+    break;
+
+  case NODE_KW_ARG:
+    printf("NODE_KW_ARG %s:\n", mrb_sym_name(mrb, sym(tree->car)));
+    mrb_parser_dump(mrb, tree->cdr->car, offset + 1);
+    break;
+
+  case NODE_KW_REST_ARGS:
+    printf("NODE_KW_REST_ARGS %s\n", mrb_sym_name(mrb, sym(tree)));
+    break;
+
+  default:
+    printf("node type: %d (0x%x)\n", nodetype, (unsigned)nodetype);
+    break;
+  }
+#endif
+}
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-compiler/mrbgem.rake
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-compiler/mrbgem.rake	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-compiler/mrbgem.rake	(revision 439)
@@ -0,0 +1,40 @@
+MRuby::Gem::Specification.new 'mruby-compiler' do |spec|
+  spec.license = 'MIT'
+  spec.author  = 'mruby developers'
+  spec.summary = 'mruby compiler library'
+
+  current_dir = spec.dir
+  current_build_dir = spec.build_dir
+
+  lex_def = "#{current_dir}/core/lex.def"
+  core_objs = Dir.glob("#{current_dir}/core/*.c").map { |f|
+    next nil if build.cxx_exception_enabled? and f =~ /(codegen).c$/
+    objfile(f.pathmap("#{current_build_dir}/core/%n"))
+  }.compact
+
+  if build.cxx_exception_enabled?
+    core_objs <<
+      build.compile_as_cxx("#{current_build_dir}/core/y.tab.c", "#{current_build_dir}/core/y.tab.cxx",
+                           objfile("#{current_build_dir}/y.tab"), ["#{current_dir}/core"]) <<
+      build.compile_as_cxx("#{current_dir}/core/codegen.c", "#{current_build_dir}/core/codegen.cxx")
+  else
+    core_objs << objfile("#{current_build_dir}/core/y.tab")
+    file objfile("#{current_build_dir}/core/y.tab") => "#{current_build_dir}/core/y.tab.c" do |t|
+      cc.run t.name, t.prerequisites.first, [], ["#{current_dir}/core"]
+    end
+  end
+
+  # Parser
+  file "#{current_build_dir}/core/y.tab.c" => ["#{current_dir}/core/parse.y", lex_def] do |t|
+    mkdir_p File.dirname t.name
+    yacc.run t.name, t.prerequisites.first
+  end
+
+  # Lexical analyzer
+  file lex_def => "#{current_dir}/core/keywords" do |t|
+    gperf.run t.name, t.prerequisites.first
+  end
+
+  file build.libmruby_core_static => core_objs
+  build.libmruby << core_objs
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-complex/mrbgem.rake
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-complex/mrbgem.rake	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-complex/mrbgem.rake	(revision 439)
@@ -0,0 +1,7 @@
+MRuby::Gem::Specification.new('mruby-complex') do |spec|
+  spec.license = 'MIT'
+  spec.author  = 'mruby developers'
+  spec.summary = 'Complex class'
+
+  spec.add_dependency 'mruby-math', core: 'mruby-math'
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-complex/mrblib/complex.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-complex/mrblib/complex.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-complex/mrblib/complex.rb	(revision 439)
@@ -0,0 +1,122 @@
+class Complex < Numeric
+  def self.polar(abs, arg = 0)
+    Complex(abs * Math.cos(arg), abs * Math.sin(arg))
+  end
+
+  def inspect
+    "(#{to_s})"
+  end
+
+  def to_s
+    "#{real}#{'+' unless imaginary < 0}#{imaginary}i"
+  end
+
+  def +@
+    Complex(real, imaginary)
+  end
+
+  def -@
+    Complex(-real, -imaginary)
+  end
+
+  def +(rhs)
+    if rhs.is_a? Complex
+      Complex(real + rhs.real, imaginary + rhs.imaginary)
+    elsif rhs.is_a? Numeric
+      Complex(real + rhs, imaginary)
+    end
+  end
+
+  def -(rhs)
+    if rhs.is_a? Complex
+      Complex(real - rhs.real, imaginary - rhs.imaginary)
+    elsif rhs.is_a? Numeric
+      Complex(real - rhs, imaginary)
+    end
+  end
+
+  def *(rhs)
+    if rhs.is_a? Complex
+      Complex(real * rhs.real - imaginary * rhs.imaginary, real * rhs.imaginary + rhs.real * imaginary)
+    elsif rhs.is_a? Numeric
+      Complex(real * rhs, imaginary * rhs)
+    end
+  end
+
+  def /(rhs)
+    if rhs.is_a? Complex
+      __div__(rhs)
+    elsif rhs.is_a? Numeric
+      Complex(real / rhs, imaginary / rhs)
+    end
+  end
+  alias_method :quo, :/
+
+  def ==(rhs)
+    if rhs.is_a? Complex
+      real == rhs.real && imaginary == rhs.imaginary
+    elsif rhs.is_a? Numeric
+      imaginary == 0 && real == rhs
+    end
+  end
+
+  def abs
+    Math.hypot imaginary, real
+  end
+  alias_method :magnitude, :abs
+
+  def abs2
+    real * real + imaginary * imaginary
+  end
+
+  def arg
+    Math.atan2 imaginary, real
+  end
+  alias_method :angle, :arg
+  alias_method :phase, :arg
+
+  def conjugate
+    Complex(real, -imaginary)
+  end
+  alias_method :conj, :conjugate
+
+  def fdiv(numeric)
+    Complex(real.to_f / numeric, imaginary.to_f / numeric)
+  end
+
+  def polar
+    [abs, arg]
+  end
+
+  def real?
+    false
+  end
+
+  def rectangular
+    [real, imaginary]
+  end
+  alias_method :rect, :rectangular
+
+  def to_r
+    raise RangeError.new "can't convert #{to_s} into Rational" unless imaginary.zero?
+    Rational(real, 1)
+  end
+
+  alias_method :imag, :imaginary
+
+  [Fixnum, Float].each do |cls|
+    [:+, :-, :*, :/, :==].each do |op|
+      cls.instance_eval do
+        original_operator_name = "__original_operator_#{op}_complex"
+        alias_method original_operator_name, op
+        define_method op do |rhs|
+          if rhs.is_a? Complex
+            Complex(self).__send__(op, rhs)
+          else
+            __send__(original_operator_name, rhs)
+          end
+        end
+      end
+    end
+  end
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-complex/src/complex.c
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-complex/src/complex.c	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-complex/src/complex.c	(revision 439)
@@ -0,0 +1,249 @@
+#include <mruby.h>
+#include <mruby/class.h>
+#include <mruby/numeric.h>
+#include <math.h>
+
+#ifdef MRB_WITHOUT_FLOAT
+# error Complex conflicts 'MRB_WITHOUT_FLOAT' configuration in your 'build_config.rb'
+#endif
+
+struct mrb_complex {
+  mrb_float real;
+  mrb_float imaginary;
+};
+
+#ifdef MRB_USE_FLOAT
+#define F(x) x##f
+#else
+#define F(x) x
+#endif
+
+#if defined(MRB_64BIT) || defined(MRB_USE_FLOAT)
+
+#define COMPLEX_USE_ISTRUCT
+/* use TT_ISTRUCT */
+#include <mruby/istruct.h>
+
+#define complex_ptr(mrb, v) (struct mrb_complex*)mrb_istruct_ptr(v)
+
+static struct RBasic*
+complex_alloc(mrb_state *mrb, struct RClass *c, struct mrb_complex **p)
+{
+  struct RIStruct *s;
+
+  s = (struct RIStruct*)mrb_obj_alloc(mrb, MRB_TT_ISTRUCT, c);
+  *p = (struct mrb_complex*)s->inline_data;
+
+  return (struct RBasic*)s;
+}
+
+#else
+/* use TT_DATA */
+#include <mruby/data.h>
+
+static const struct mrb_data_type mrb_complex_type = {"Complex", mrb_free};
+
+static struct RBasic*
+complex_alloc(mrb_state *mrb, struct RClass *c, struct mrb_complex **p)
+{
+  struct RData *d;
+
+  Data_Make_Struct(mrb, c, struct mrb_complex, &mrb_complex_type, *p, d);
+
+  return (struct RBasic*)d;
+}
+
+static struct mrb_complex*
+complex_ptr(mrb_state *mrb, mrb_value v)
+{
+  struct mrb_complex *p;
+
+  p = DATA_GET_PTR(mrb, v, &mrb_complex_type, struct mrb_complex);
+  if (!p) {
+    mrb_raise(mrb, E_ARGUMENT_ERROR, "uninitialized complex");
+  }
+  return p;
+}
+#endif
+
+static mrb_value
+complex_new(mrb_state *mrb, mrb_float real, mrb_float imaginary)
+{
+  struct RClass *c = mrb_class_get(mrb, "Complex");
+  struct mrb_complex *p;
+  struct RBasic *comp = complex_alloc(mrb, c, &p);
+  p->real = real;
+  p->imaginary = imaginary;
+  MRB_SET_FROZEN_FLAG(comp);
+
+  return mrb_obj_value(comp);
+}
+
+static mrb_value
+complex_real(mrb_state *mrb, mrb_value self)
+{
+  struct mrb_complex *p = complex_ptr(mrb, self);
+  return mrb_float_value(mrb, p->real);
+}
+
+static mrb_value
+complex_imaginary(mrb_state *mrb, mrb_value self)
+{
+  struct mrb_complex *p = complex_ptr(mrb, self);
+  return mrb_float_value(mrb, p->imaginary);
+}
+
+static mrb_value
+complex_s_rect(mrb_state *mrb, mrb_value self)
+{
+  mrb_float real, imaginary = 0.0;
+
+  mrb_get_args(mrb, "f|f", &real, &imaginary);
+  return complex_new(mrb, real, imaginary);
+}
+
+static mrb_value
+complex_to_f(mrb_state *mrb, mrb_value self)
+{
+  struct mrb_complex *p = complex_ptr(mrb, self);
+
+  if (p->imaginary != 0) {
+    mrb_raisef(mrb, E_RANGE_ERROR, "can't convert %v into Float", self);
+  }
+
+  return mrb_float_value(mrb, p->real);
+}
+
+static mrb_value
+complex_to_i(mrb_state *mrb, mrb_value self)
+{
+  struct mrb_complex *p = complex_ptr(mrb, self);
+
+  if (p->imaginary != 0) {
+    mrb_raisef(mrb, E_RANGE_ERROR, "can't convert %v into Float", self);
+  }
+  return mrb_int_value(mrb, p->real);
+}
+
+static mrb_value
+complex_to_c(mrb_state *mrb, mrb_value self)
+{
+  return self;
+}
+
+/* Arithmetic on (significand, exponent) pairs avoids premature overflow in
+   complex division */
+struct float_pair {
+  mrb_float s;
+  int x;
+};
+
+static void
+add_pair(struct float_pair *s, struct float_pair const *a,
+         struct float_pair const *b)
+{
+  if (b->s == 0.0F) {
+    *s = *a;
+  } else if (a->s == 0.0F) {
+    *s = *b;
+  } else if (a->x >= b->x) {
+    s->s = a->s + F(ldexp)(b->s, b->x - a->x);
+    s->x = a->x;
+  } else {
+    s->s = F(ldexp)(a->s, a->x - b->x) + b->s;
+    s->x = b->x;
+  }
+}
+
+static void
+mul_pair(struct float_pair *p, struct float_pair const *a,
+         struct float_pair const *b)
+{
+  p->s = a->s * b->s;
+  p->x = a->x + b->x;
+}
+
+static void
+div_pair(struct float_pair *q, struct float_pair const *a,
+         struct float_pair const *b)
+{
+  q->s = a->s / b->s;
+  q->x = a->x - b->x;
+}
+
+static mrb_value
+complex_div(mrb_state *mrb, mrb_value self)
+{
+  mrb_value rhs;
+  struct mrb_complex *a, *b;
+  struct float_pair ar, ai, br, bi;
+  struct float_pair br2, bi2;
+  struct float_pair div;
+  struct float_pair ar_br, ai_bi;
+  struct float_pair ai_br, ar_bi;
+  struct float_pair zr, zi;
+
+  mrb_get_args(mrb, "o", &rhs);
+  a = complex_ptr(mrb, self);
+  b = complex_ptr(mrb, rhs);
+
+  /* Split floating point components into significand and exponent */
+  ar.s = F(frexp)(a->real, &ar.x);
+  ai.s = F(frexp)(a->imaginary, &ai.x);
+  br.s = F(frexp)(b->real, &br.x);
+  bi.s = F(frexp)(b->imaginary, &bi.x);
+
+  /* Perform arithmetic on (significand, exponent) pairs to produce
+     the result: */
+
+  /* the divisor */
+  mul_pair(&br2, &br, &br);
+  mul_pair(&bi2, &bi, &bi);
+  add_pair(&div, &br2, &bi2);
+
+  /* real component */
+  mul_pair(&ar_br, &ar, &br);
+  mul_pair(&ai_bi, &ai, &bi);
+  add_pair(&zr, &ar_br, &ai_bi);
+  div_pair(&zr, &zr, &div);
+
+  /* imaginary component */
+  mul_pair(&ai_br, &ai, &br);
+  mul_pair(&ar_bi, &ar, &bi);
+  ar_bi.s = -ar_bi.s;
+  add_pair(&zi, &ai_br, &ar_bi);
+  div_pair(&zi, &zi, &div);
+
+  /* assemble the result */
+  return complex_new(mrb, F(ldexp)(zr.s, zr.x), F(ldexp)(zi.s, zi.x));
+}
+
+void mrb_mruby_complex_gem_init(mrb_state *mrb)
+{
+  struct RClass *comp;
+
+#ifdef COMPLEX_USE_ISTRUCT
+  mrb_assert(sizeof(struct mrb_complex) < ISTRUCT_DATA_SIZE);
+#endif
+  comp = mrb_define_class(mrb, "Complex", mrb_class_get(mrb, "Numeric"));
+#ifdef COMPLEX_USE_ISTRUCT
+  MRB_SET_INSTANCE_TT(comp, MRB_TT_ISTRUCT);
+#else
+  MRB_SET_INSTANCE_TT(comp, MRB_TT_DATA);
+#endif
+  mrb_undef_class_method(mrb, comp, "new");
+  mrb_define_class_method(mrb, comp, "rectangular", complex_s_rect, MRB_ARGS_REQ(1)|MRB_ARGS_OPT(1));
+  mrb_define_class_method(mrb, comp, "rect", complex_s_rect, MRB_ARGS_REQ(1)|MRB_ARGS_OPT(1));
+  mrb_define_method(mrb, mrb->kernel_module, "Complex", complex_s_rect, MRB_ARGS_REQ(1)|MRB_ARGS_OPT(1));
+  mrb_define_method(mrb, comp, "real", complex_real, MRB_ARGS_NONE());
+  mrb_define_method(mrb, comp, "imaginary", complex_imaginary, MRB_ARGS_NONE());
+  mrb_define_method(mrb, comp, "to_f", complex_to_f, MRB_ARGS_NONE());
+  mrb_define_method(mrb, comp, "to_i", complex_to_i, MRB_ARGS_NONE());
+  mrb_define_method(mrb, comp, "to_c", complex_to_c, MRB_ARGS_NONE());
+  mrb_define_method(mrb, comp, "__div__", complex_div, MRB_ARGS_REQ(1));
+}
+
+void
+mrb_mruby_complex_gem_final(mrb_state* mrb)
+{
+}
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-complex/test/complex.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-complex/test/complex.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-complex/test/complex.rb	(revision 439)
@@ -0,0 +1,153 @@
+def assert_complex(real, exp)
+  assert "assert_complex" do
+    assert_float real.real,      exp.real
+    assert_float real.imaginary, exp.imaginary
+  end
+end
+
+assert 'Complex' do
+  c = 123i
+  assert_equal Complex, c.class
+  assert_equal [c.real, c.imaginary], [0, 123]
+  c = 123 + -1.23i
+  assert_equal Complex, c.class
+  assert_equal [c.real, c.imaginary], [123, -1.23]
+end
+
+assert 'Complex::polar' do
+  assert_complex Complex.polar(3, 0),           (3  +  0i)
+  assert_complex Complex.polar(3, Math::PI/2),  (0  +  3i)
+  assert_complex Complex.polar(3, Math::PI),    (-3 +  0i)
+  assert_complex Complex.polar(3, -Math::PI/2), (0  + -3i)
+end
+
+assert 'Complex::rectangular' do
+  assert_complex Complex.rectangular(1, 2), (1 + 2i)
+end
+
+assert 'Complex#*' do
+  assert_complex Complex(2, 3)  * Complex(2, 3),  (-5    + 12i)
+  assert_complex Complex(900)   * Complex(1),     (900   + 0i)
+  assert_complex Complex(-2, 9) * Complex(-9, 2), (0     - 85i)
+  assert_complex Complex(9, 8)  * 4,              (36    + 32i)
+  assert_complex Complex(20, 9) * 9.8,            (196.0 + 88.2i)
+end
+
+assert 'Complex#+' do
+  assert_complex Complex(2, 3)  + Complex(2, 3) , (4    + 6i)
+  assert_complex Complex(900)   + Complex(1)    , (901  + 0i)
+  assert_complex Complex(-2, 9) + Complex(-9, 2), (-11  + 11i)
+  assert_complex Complex(9, 8)  + 4             , (13   + 8i)
+  assert_complex Complex(20, 9) + 9.8           , (29.8 + 9i)
+end
+
+assert 'Complex#-' do
+  assert_complex Complex(2, 3)  - Complex(2, 3) , (0    + 0i)
+  assert_complex Complex(900)   - Complex(1)    , (899  + 0i)
+  assert_complex Complex(-2, 9) - Complex(-9, 2), (7    + 7i)
+  assert_complex Complex(9, 8)  - 4             , (5    + 8i)
+  assert_complex Complex(20, 9) - 9.8           , (10.2 + 9i)
+end
+
+assert 'Complex#-@' do
+  assert_complex(-Complex(1, 2), (-1 - 2i))
+end
+
+assert 'Complex#/' do
+  assert_complex Complex(2, 3)  / Complex(2, 3) , (1                  + 0i)
+  assert_complex Complex(900)   / Complex(1)    , (900                + 0i)
+  assert_complex Complex(-2, 9) / Complex(-9, 2), ((36 / 85)          - (77i / 85))
+  assert_complex Complex(9, 8)  / 4             , ((9 / 4)            + 2i)
+  assert_complex Complex(20, 9) / 9.8           , (2.0408163265306123 + 0.9183673469387754i)
+  if 1e39.infinite? then
+    # MRB_USE_FLOAT in effect
+    ten = 1e21
+    one = 1e20
+  else
+    ten = 1e201
+    one = 1e200
+  end
+  assert_complex Complex(ten, ten) / Complex(one, one), Complex(10.0, 0.0)
+end
+
+assert 'Complex#==' do
+  assert_true  Complex(2, 3)  == Complex(2, 3)
+  assert_true  Complex(5)     == 5
+  assert_true  Complex(0)     == 0.0
+end
+
+assert 'Complex#abs' do
+  assert_float Complex(-1).abs,        1
+  assert_float Complex(3.0, -4.0).abs, 5.0
+  if 1e39.infinite? then
+    # MRB_USE_FLOAT in effect
+    exp = 125
+  else
+    exp = 1021
+  end
+  assert_true Complex(3.0*2.0**exp, 4.0*2.0**exp).abs.finite?
+  assert_float Complex(3.0*2.0**exp, 4.0*2.0**exp).abs, 5.0*2.0**exp
+end
+
+assert 'Complex#abs2' do
+  assert_float Complex(-1).abs2,        1
+  assert_float Complex(3.0, -4.0).abs2, 25.0
+end
+
+assert 'Complex#arg' do
+  assert_float Complex.polar(3, Math::PI/2).arg, 1.5707963267948966
+end
+
+assert 'Complex#conjugate' do
+  assert_complex Complex(1, 2).conjugate, (1 - 2i)
+end
+
+assert 'Complex#fdiv' do
+  assert_complex Complex(11, 22).fdiv(3), (3.6666666666666665 + 7.333333333333333i)
+end
+
+assert 'Complex#imaginary' do
+  assert_float Complex(7).imaginary    , 0
+  assert_float Complex(9, -4).imaginary, -4
+end
+
+assert 'Complex#polar' do
+  assert_equal Complex(1, 2).polar, [2.23606797749979, 1.1071487177940904]
+end
+
+assert 'Complex#real' do
+  assert_float Complex(7).real,     7
+  assert_float Complex(9, -4).real, 9
+end
+
+assert 'Complex#real?' do
+  assert_false Complex(1).real?
+end
+
+assert 'Complex::rectangular' do
+  assert_equal Complex(1, 2).rectangular, [1, 2]
+end
+
+assert 'Complex::to_c' do
+  assert_equal Complex(1, 2).to_c, Complex(1, 2)
+end
+
+assert 'Complex::to_f' do
+  assert_float Complex(1, 0).to_f, 1.0
+  assert_raise(RangeError) do
+    Complex(1, 2).to_f
+  end
+end
+
+assert 'Complex::to_i' do
+  assert_equal Complex(1, 0).to_i, 1
+  assert_raise(RangeError) do
+    Complex(1, 2).to_i
+  end
+end
+
+assert 'Complex#frozen?' do
+  assert_predicate(1i, :frozen?)
+  assert_predicate(Complex(2,3), :frozen?)
+  assert_predicate(4+5i, :frozen?)
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-enum-chain/mrbgem.rake
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-enum-chain/mrbgem.rake	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-enum-chain/mrbgem.rake	(revision 439)
@@ -0,0 +1,6 @@
+MRuby::Gem::Specification.new('mruby-enum-chain') do |spec|
+  spec.license = 'MIT'
+  spec.author  = 'mruby developers'
+  spec.summary = 'Enumerator::Chain class'
+  spec.add_dependency('mruby-enumerator', :core => 'mruby-enumerator')
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-enum-chain/mrblib/chain.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-enum-chain/mrblib/chain.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-enum-chain/mrblib/chain.rb	(revision 439)
@@ -0,0 +1,62 @@
+##
+# chain.rb Enumerator::Chain class
+# See Copyright Notice in mruby.h
+
+module Enumerable
+  def chain(*args)
+    Enumerator::Chain.new(self, *args)
+  end
+end
+
+class Enumerator
+  def +(other)
+    Chain.new(self, other)
+  end
+
+  class Chain
+    include Enumerable
+
+    def initialize(*args)
+      @enums = args.freeze
+      @pos = -1
+    end
+
+    def each(&block)
+      return to_enum unless block
+
+      i = 0
+      while i < @enums.size
+        @pos = i
+        @enums[i].each(&block)
+        i += 1
+      end
+
+      self
+    end
+
+    def size
+      @enums.reduce(0) do |a, e|
+        return nil unless e.respond_to?(:size)
+        a + e.size
+      end
+    end
+
+    def rewind
+      while 0 <= @pos && @pos < @enums.size
+        e = @enums[@pos]
+        e.rewind if e.respond_to?(:rewind)
+        @pos -= 1
+      end
+
+      self
+    end
+
+    def +(other)
+      self.class.new(self, other)
+    end
+
+    def inspect
+      "#<#{self.class}: #{@enums.inspect}>"
+    end
+  end
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-enum-chain/test/enum_chain.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-enum-chain/test/enum_chain.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-enum-chain/test/enum_chain.rb	(revision 439)
@@ -0,0 +1,108 @@
+##
+# Enumerator::Chain test
+
+assert("Enumerable#chain") do
+  a = []
+  b = {}
+  c = Object.new # not has #each method
+
+  assert_kind_of Enumerator::Chain, a.chain
+  assert_kind_of Enumerator::Chain, a.chain(b)
+  assert_kind_of Enumerator::Chain, a.chain(b, c)
+  assert_raise(NoMethodError) { c.chain }
+end
+
+assert("Enumerator#+") do
+  a = [].each
+  b = {}.each
+  c = Object.new # not has #each method
+
+  assert_kind_of Enumerator::Chain, a + b
+  assert_kind_of Enumerator::Chain, a + c
+  assert_kind_of Enumerator::Chain, b + a
+  assert_kind_of Enumerator::Chain, b + c
+  assert_raise(NoMethodError) { c + a }
+end
+
+assert("Enumerator::Chain.new") do
+  a = []
+  b = {}
+  c = Object.new # not has #each method
+
+  assert_kind_of Enumerator::Chain, Enumerator::Chain.new
+  assert_kind_of Enumerator::Chain, Enumerator::Chain.new(a, a)
+  assert_kind_of Enumerator::Chain, Enumerator::Chain.new(a, b)
+  assert_kind_of Enumerator::Chain, Enumerator::Chain.new(a, c)
+  assert_kind_of Enumerator::Chain, Enumerator::Chain.new(b, a)
+  assert_kind_of Enumerator::Chain, Enumerator::Chain.new(b, b)
+  assert_kind_of Enumerator::Chain, Enumerator::Chain.new(b, c)
+  assert_kind_of Enumerator::Chain, Enumerator::Chain.new(c, a)
+end
+
+assert("Enumerator::Chain#each") do
+  a = [1, 2, 3]
+
+  aa = a.chain(a)
+  assert_kind_of Enumerator, aa.each
+  assert_equal [1, 2, 3, 1, 2, 3], aa.each.to_a
+
+  aa = a.chain(6..9)
+  assert_kind_of Enumerator, aa.each
+  assert_equal [1, 2, 3, 6, 7, 8, 9], aa.each.to_a
+
+  aa = a.chain((-3..-2).each_with_index, a)
+  assert_kind_of Enumerator, aa.each
+  assert_equal [1, 2, 3, [-3, 0], [-2, 1], 1, 2, 3], aa.each.to_a
+
+  aa = a.chain(Object.new)
+  assert_kind_of Enumerator, aa.each
+  assert_raise(NoMethodError) {  aa.each.to_a }
+end
+
+assert("Enumerator::Chain#size") do
+  a = [1, 2, 3]
+
+  aa = a.chain(a)
+  assert_equal 6, aa.size
+
+  aa = a.chain(3..4)
+  assert_nil aa.size
+
+  aa = a.chain(3..4, a)
+  assert_nil aa.size
+
+  aa = a.chain(Object.new)
+  assert_nil aa.size
+end
+
+assert("Enumerator::Chain#rewind") do
+  rewound = nil
+  e1 = [1, 2]
+  e2 = (4..6)
+  (class << e1; self end).define_method(:rewind) { rewound << self }
+  (class << e2; self end).define_method(:rewind) { rewound << self }
+  c = e1.chain(e2)
+
+  rewound = []
+  c.rewind
+  assert_equal [], rewound
+
+  rewound = []
+  c.each{break c}.rewind
+  assert_equal [e1], rewound
+
+  rewound = []
+  c.each{}.rewind
+  assert_equal [e2, e1], rewound
+end
+
+assert("Enumerator::Chain#+") do
+  a = [].chain
+  b = {}.chain
+  c = Object.new # not has #each method
+
+  assert_kind_of Enumerator::Chain, a + b
+  assert_kind_of Enumerator::Chain, a + c
+  assert_kind_of Enumerator::Chain, b + a
+  assert_kind_of Enumerator::Chain, b + c
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-enum-ext/mrbgem.rake
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-enum-ext/mrbgem.rake	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-enum-ext/mrbgem.rake	(revision 439)
@@ -0,0 +1,5 @@
+MRuby::Gem::Specification.new('mruby-enum-ext') do |spec|
+  spec.license = 'MIT'
+  spec.author  = 'mruby developers'
+  spec.summary = 'Enumerable module extension'
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-enum-ext/mrblib/enum.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-enum-ext/mrblib/enum.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-enum-ext/mrblib/enum.rb	(revision 439)
@@ -0,0 +1,859 @@
+##
+# Enumerable
+#
+module Enumerable
+  ##
+  # call-seq:
+  #    enum.drop(n)               -> array
+  #
+  # Drops first n elements from <i>enum</i>, and returns rest elements
+  # in an array.
+  #
+  #    a = [1, 2, 3, 4, 5, 0]
+  #    a.drop(3)             #=> [4, 5, 0]
+
+  def drop(n)
+    n = n.__to_int
+    raise ArgumentError, "attempt to drop negative size" if n < 0
+
+    ary = []
+    self.each {|*val| n == 0 ? ary << val.__svalue : n -= 1 }
+    ary
+  end
+
+  ##
+  # call-seq:
+  #    enum.drop_while {|arr| block }   -> array
+  #    enum.drop_while                  -> an_enumerator
+  #
+  # Drops elements up to, but not including, the first element for
+  # which the block returns +nil+ or +false+ and returns an array
+  # containing the remaining elements.
+  #
+  # If no block is given, an enumerator is returned instead.
+  #
+  #    a = [1, 2, 3, 4, 5, 0]
+  #    a.drop_while {|i| i < 3 }   #=> [3, 4, 5, 0]
+
+  def drop_while(&block)
+    return to_enum :drop_while unless block
+
+    ary, state = [], false
+    self.each do |*val|
+      state = true if !state and !block.call(*val)
+      ary << val.__svalue if state
+    end
+    ary
+  end
+
+  ##
+  # call-seq:
+  #    enum.take(n)               -> array
+  #
+  # Returns first n elements from <i>enum</i>.
+  #
+  #    a = [1, 2, 3, 4, 5, 0]
+  #    a.take(3)             #=> [1, 2, 3]
+
+  def take(n)
+    n = n.__to_int
+    i = n.to_i
+    raise ArgumentError, "attempt to take negative size" if i < 0
+    ary = []
+    return ary if i == 0
+    self.each do |*val|
+      ary << val.__svalue
+      i -= 1
+      break if i == 0
+    end
+    ary
+  end
+
+  ##
+  # call-seq:
+  #    enum.take_while {|arr| block }   -> array
+  #    enum.take_while                  -> an_enumerator
+  #
+  # Passes elements to the block until the block returns +nil+ or +false+,
+  # then stops iterating and returns an array of all prior elements.
+  #
+  # If no block is given, an enumerator is returned instead.
+  #
+  #     a = [1, 2, 3, 4, 5, 0]
+  #     a.take_while {|i| i < 3 }   #=> [1, 2]
+  #
+  def take_while(&block)
+    return to_enum :take_while unless block
+
+    ary = []
+    self.each do |*val|
+      return ary unless block.call(*val)
+      ary << val.__svalue
+    end
+    ary
+  end
+
+  ##
+  # Iterates the given block for each array of consecutive <n>
+  # elements.
+  #
+  # @return [nil]
+  #
+  # @example
+  #     (1..10).each_cons(3) {|a| p a}
+  #     # outputs below
+  #     [1, 2, 3]
+  #     [2, 3, 4]
+  #     [3, 4, 5]
+  #     [4, 5, 6]
+  #     [5, 6, 7]
+  #     [6, 7, 8]
+  #     [7, 8, 9]
+  #     [8, 9, 10]
+
+  def each_cons(n, &block)
+    n = n.__to_int
+    raise ArgumentError, "invalid size" if n <= 0
+
+    return to_enum(:each_cons,n) unless block
+    ary = []
+    n = n.to_i
+    self.each do |*val|
+      ary.shift if ary.size == n
+      ary << val.__svalue
+      block.call(ary.dup) if ary.size == n
+    end
+    nil
+  end
+
+  ##
+  # Iterates the given block for each slice of <n> elements.
+  #
+  # @return [nil]
+  #
+  # @example
+  #     (1..10).each_slice(3) {|a| p a}
+  #     # outputs below
+  #     [1, 2, 3]
+  #     [4, 5, 6]
+  #     [7, 8, 9]
+  #     [10]
+
+  def each_slice(n, &block)
+    n = n.__to_int
+    raise ArgumentError, "invalid slice size" if n <= 0
+
+    return to_enum(:each_slice,n) unless block
+    ary = []
+    n = n.to_i
+    self.each do |*val|
+      ary << val.__svalue
+      if ary.size == n
+        block.call(ary)
+        ary = []
+      end
+    end
+    block.call(ary) unless ary.empty?
+    nil
+  end
+
+  ##
+  # call-seq:
+  #    enum.group_by {| obj | block }  -> a_hash
+  #    enum.group_by                   -> an_enumerator
+  #
+  # Returns a hash, which keys are evaluated result from the
+  # block, and values are arrays of elements in <i>enum</i>
+  # corresponding to the key.
+  #
+  #     (1..6).group_by {|i| i%3}   #=> {0=>[3, 6], 1=>[1, 4], 2=>[2, 5]}
+  #
+  def group_by(&block)
+    return to_enum :group_by unless block
+
+    h = {}
+    self.each do |*val|
+      key = block.call(*val)
+      sv = val.__svalue
+      h.key?(key) ? (h[key] << sv) : (h[key] = [sv])
+    end
+    h
+  end
+
+  ##
+  # call-seq:
+  #    enum.sort_by { |obj| block }   -> array
+  #    enum.sort_by                   -> an_enumerator
+  #
+  # Sorts <i>enum</i> using a set of keys generated by mapping the
+  # values in <i>enum</i> through the given block.
+  #
+  # If no block is given, an enumerator is returned instead.
+
+  def sort_by(&block)
+    return to_enum :sort_by unless block
+
+    ary = []
+    orig = []
+    self.each_with_index{|e, i|
+      orig.push(e)
+      ary.push([block.call(e), i])
+    }
+    if ary.size > 1
+      ary.sort!
+    end
+    ary.collect{|e,i| orig[i]}
+  end
+
+  ##
+  # call-seq:
+  #    enum.first       ->  obj or nil
+  #    enum.first(n)    ->  an_array
+  #
+  # Returns the first element, or the first +n+ elements, of the enumerable.
+  # If the enumerable is empty, the first form returns <code>nil</code>, and the
+  # second form returns an empty array.
+  def first(*args)
+    case args.length
+    when 0
+      self.each do |*val|
+        return val.__svalue
+      end
+      return nil
+    when 1
+      i = args[0].__to_int
+      raise ArgumentError, "attempt to take negative size" if i < 0
+      ary = []
+      return ary if i == 0
+      self.each do |*val|
+        ary << val.__svalue
+        i -= 1
+        break if i == 0
+      end
+      ary
+    else
+      raise ArgumentError, "wrong number of arguments (given #{args.length}, expected 0..1)"
+    end
+  end
+
+  ##
+  # call-seq:
+  #    enum.count                 -> int
+  #    enum.count(item)           -> int
+  #    enum.count { |obj| block } -> int
+  #
+  # Returns the number of items in +enum+ through enumeration.
+  # If an argument is given, the number of items in +enum+ that
+  # are equal to +item+ are counted.  If a block is given, it
+  # counts the number of elements yielding a true value.
+  def count(v=NONE, &block)
+    count = 0
+    if block
+      self.each do |*val|
+        count += 1 if block.call(*val)
+      end
+    else
+      if v == NONE
+        self.each { count += 1 }
+      else
+        self.each do |*val|
+          count += 1 if val.__svalue == v
+        end
+      end
+    end
+    count
+  end
+
+  ##
+  # call-seq:
+  #    enum.flat_map       { |obj| block } -> array
+  #    enum.collect_concat { |obj| block } -> array
+  #    enum.flat_map                       -> an_enumerator
+  #    enum.collect_concat                 -> an_enumerator
+  #
+  # Returns a new array with the concatenated results of running
+  # <em>block</em> once for every element in <i>enum</i>.
+  #
+  # If no block is given, an enumerator is returned instead.
+  #
+  #    [1, 2, 3, 4].flat_map { |e| [e, -e] } #=> [1, -1, 2, -2, 3, -3, 4, -4]
+  #    [[1, 2], [3, 4]].flat_map { |e| e + [100] } #=> [1, 2, 100, 3, 4, 100]
+  def flat_map(&block)
+    return to_enum :flat_map unless block
+
+    ary = []
+    self.each do |*e|
+      e2 = block.call(*e)
+      if e2.respond_to? :each
+        e2.each {|e3| ary.push(e3) }
+      else
+        ary.push(e2)
+      end
+    end
+    ary
+  end
+  alias collect_concat flat_map
+
+  ##
+  # call-seq:
+  #    enum.max_by {|obj| block }      -> obj
+  #    enum.max_by                     -> an_enumerator
+  #
+  # Returns the object in <i>enum</i> that gives the maximum
+  # value from the given block.
+  #
+  # If no block is given, an enumerator is returned instead.
+  #
+  #    %w[albatross dog horse].max_by {|x| x.length }   #=> "albatross"
+
+  def max_by(&block)
+    return to_enum :max_by unless block
+
+    first = true
+    max = nil
+    max_cmp = nil
+
+    self.each do |*val|
+      if first
+        max = val.__svalue
+        max_cmp = block.call(*val)
+        first = false
+      else
+        if (cmp = block.call(*val)) > max_cmp
+          max = val.__svalue
+          max_cmp = cmp
+        end
+      end
+    end
+    max
+  end
+
+  ##
+  # call-seq:
+  #    enum.min_by {|obj| block }      -> obj
+  #    enum.min_by                     -> an_enumerator
+  #
+  # Returns the object in <i>enum</i> that gives the minimum
+  # value from the given block.
+  #
+  # If no block is given, an enumerator is returned instead.
+  #
+  #    %w[albatross dog horse].min_by {|x| x.length }   #=> "dog"
+
+  def min_by(&block)
+    return to_enum :min_by unless block
+
+    first = true
+    min = nil
+    min_cmp = nil
+
+    self.each do |*val|
+      if first
+        min = val.__svalue
+        min_cmp = block.call(*val)
+        first = false
+      else
+        if (cmp = block.call(*val)) < min_cmp
+          min = val.__svalue
+          min_cmp = cmp
+        end
+      end
+    end
+    min
+  end
+
+  ##
+  #  call-seq:
+  #     enum.minmax                  -> [min, max]
+  #     enum.minmax { |a, b| block } -> [min, max]
+  #
+  #  Returns two elements array which contains the minimum and the
+  #  maximum value in the enumerable.  The first form assumes all
+  #  objects implement <code>Comparable</code>; the second uses the
+  #  block to return <em>a <=> b</em>.
+  #
+  #     a = %w(albatross dog horse)
+  #     a.minmax                                  #=> ["albatross", "horse"]
+  #     a.minmax { |a, b| a.length <=> b.length } #=> ["dog", "albatross"]
+
+  def minmax(&block)
+    max = nil
+    min = nil
+    first = true
+
+    self.each do |*val|
+      if first
+        val = val.__svalue
+        max = val
+        min = val
+        first = false
+      else
+        val = val.__svalue
+        if block
+          max = val if block.call(val, max) > 0
+          min = val if block.call(val, min) < 0
+        else
+          max = val if (val <=> max) > 0
+          min = val if (val <=> min) < 0
+        end
+      end
+    end
+    [min, max]
+  end
+
+  ##
+  #  call-seq:
+  #     enum.minmax_by { |obj| block } -> [min, max]
+  #     enum.minmax_by                 -> an_enumerator
+  #
+  #  Returns a two element array containing the objects in
+  #  <i>enum</i> that correspond to the minimum and maximum values respectively
+  #  from the given block.
+  #
+  #  If no block is given, an enumerator is returned instead.
+  #
+  #     %w(albatross dog horse).minmax_by { |x| x.length }   #=> ["dog", "albatross"]
+
+  def minmax_by(&block)
+    return to_enum :minmax_by unless block
+
+    max = nil
+    max_cmp = nil
+    min = nil
+    min_cmp = nil
+    first = true
+
+    self.each do |*val|
+      if first
+        max = min = val.__svalue
+        max_cmp = min_cmp = block.call(*val)
+        first = false
+     else
+        if (cmp = block.call(*val)) > max_cmp
+          max = val.__svalue
+          max_cmp = cmp
+        end
+        if (cmp = block.call(*val)) < min_cmp
+          min = val.__svalue
+          min_cmp = cmp
+        end
+      end
+    end
+    [min, max]
+  end
+
+  ##
+  #  call-seq:
+  #     enum.none? [{ |obj| block }]   -> true or false
+  #     enum.none?(pattern)            -> true or false
+  #
+  #  Passes each element of the collection to the given block. The method
+  #  returns <code>true</code> if the block never returns <code>true</code>
+  #  for all elements. If the block is not given, <code>none?</code> will return
+  #  <code>true</code> only if none of the collection members is true.
+  #
+  #  If a pattern is supplied instead, the method returns whether
+  #  <code>pattern === element</code> for none of the collection members.
+  #
+  #     %w(ant bear cat).none? { |word| word.length == 5 } #=> true
+  #     %w(ant bear cat).none? { |word| word.length >= 4 } #=> false
+  #     %w{ant bear cat}.none?(/d/)                        #=> true
+  #     [1, 3.14, 42].none?(Float)                         #=> false
+  #     [].none?                                           #=> true
+  #     [nil, false].none?                                 #=> true
+  #     [nil, true].none?                                  #=> false
+
+  def none?(pat=NONE, &block)
+    if pat != NONE
+      self.each do |*val|
+        return false if pat === val.__svalue
+      end
+    elsif block
+      self.each do |*val|
+        return false if block.call(*val)
+      end
+    else
+      self.each do |*val|
+        return false if val.__svalue
+      end
+    end
+    true
+  end
+
+  ##
+  #  call-seq:
+  #    enum.one? [{ |obj| block }]   -> true or false
+  #    enum.one?(pattern)            -> true or false
+  #
+  # Passes each element of the collection to the given block. The method
+  # returns <code>true</code> if the block returns <code>true</code>
+  # exactly once. If the block is not given, <code>one?</code> will return
+  # <code>true</code> only if exactly one of the collection members is
+  # true.
+  #
+  # If a pattern is supplied instead, the method returns whether
+  # <code>pattern === element</code> for exactly one collection member.
+  #
+  #    %w(ant bear cat).one? { |word| word.length == 4 }  #=> true
+  #    %w(ant bear cat).one? { |word| word.length > 4 }   #=> false
+  #    %w(ant bear cat).one? { |word| word.length < 4 }   #=> false
+  #    %w{ant bear cat}.one?(/t/)                         #=> false
+  #    [nil, true, 99].one?                               #=> false
+  #    [nil, true, false].one?                            #=> true
+  #    [ nil, true, 99 ].one?(Integer)                    #=> true
+  #    [].one?                                            #=> false
+
+  def one?(pat=NONE, &block)
+    count = 0
+    if pat!=NONE
+      self.each do |*val|
+        count += 1 if pat === val.__svalue
+        return false if count > 1
+      end
+    elsif block
+      self.each do |*val|
+        count += 1 if block.call(*val)
+        return false if count > 1
+      end
+    else
+      self.each do |*val|
+        count += 1 if val.__svalue
+        return false if count > 1
+      end
+    end
+
+    count == 1 ? true : false
+  end
+
+  # ISO 15.3.2.2.1
+  #  call-seq:
+  #     enum.all? [{ |obj| block } ]   -> true or false
+  #     enum.all?(pattern)             -> true or false
+  #
+  #  Passes each element of the collection to the given block. The method
+  #  returns <code>true</code> if the block never returns
+  #  <code>false</code> or <code>nil</code>. If the block is not given,
+  #  Ruby adds an implicit block of <code>{ |obj| obj }</code> which will
+  #  cause #all? to return +true+ when none of the collection members are
+  #  +false+ or +nil+.
+  #
+  #  If a pattern is supplied instead, the method returns whether
+  #  <code>pattern === element</code> for every collection member.
+  #
+  #     %w[ant bear cat].all? { |word| word.length >= 3 } #=> true
+  #     %w[ant bear cat].all? { |word| word.length >= 4 } #=> false
+  #     %w[ant bear cat].all?(/t/)                        #=> false
+  #     [1, 2i, 3.14].all?(Numeric)                       #=> true
+  #     [nil, true, 99].all?                              #=> false
+  #
+  def all?(pat=NONE, &block)
+    if pat != NONE
+      self.each{|*val| return false unless pat === val.__svalue}
+    elsif block
+      self.each{|*val| return false unless block.call(*val)}
+    else
+      self.each{|*val| return false unless val.__svalue}
+    end
+    true
+  end
+
+  # ISO 15.3.2.2.2
+  #  call-seq:
+  #     enum.any? [{ |obj| block }]   -> true or false
+  #     enum.any?(pattern)            -> true or false
+  #
+  #  Passes each element of the collection to the given block. The method
+  #  returns <code>true</code> if the block ever returns a value other
+  #  than <code>false</code> or <code>nil</code>. If the block is not
+  #  given, Ruby adds an implicit block of <code>{ |obj| obj }</code> that
+  #  will cause #any? to return +true+ if at least one of the collection
+  #  members is not +false+ or +nil+.
+  #
+  #  If a pattern is supplied instead, the method returns whether
+  #  <code>pattern === element</code> for any collection member.
+  #
+  #     %w[ant bear cat].any? { |word| word.length >= 3 } #=> true
+  #     %w[ant bear cat].any? { |word| word.length >= 4 } #=> true
+  #     %w[ant bear cat].any?(/d/)                        #=> false
+  #     [nil, true, 99].any?(Integer)                     #=> true
+  #     [nil, true, 99].any?                              #=> true
+  #     [].any?                                           #=> false
+  #
+  def any?(pat=NONE, &block)
+    if pat != NONE
+      self.each{|*val| return true if pat === val.__svalue}
+    elsif block
+      self.each{|*val| return true if block.call(*val)}
+    else
+      self.each{|*val| return true if val.__svalue}
+    end
+    false
+  end
+
+  ##
+  #  call-seq:
+  #    enum.each_with_object(obj) { |(*args), memo_obj| ... }  ->  obj
+  #    enum.each_with_object(obj)                              ->  an_enumerator
+  #
+  #  Iterates the given block for each element with an arbitrary
+  #  object given, and returns the initially given object.
+  #
+  #  If no block is given, returns an enumerator.
+  #
+  #     (1..10).each_with_object([]) { |i, a| a << i*2 }
+  #     #=> [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
+  #
+
+  def each_with_object(obj, &block)
+    return to_enum(:each_with_object, obj) unless block
+
+    self.each {|*val| block.call(val.__svalue, obj) }
+    obj
+  end
+
+  ##
+  #  call-seq:
+  #     enum.reverse_each { |item| block } ->  enum
+  #     enum.reverse_each                  ->  an_enumerator
+  #
+  #  Builds a temporary array and traverses that array in reverse order.
+  #
+  #  If no block is given, an enumerator is returned instead.
+  #
+  #      (1..3).reverse_each { |v| p v }
+  #
+  #    produces:
+  #
+  #      3
+  #      2
+  #      1
+  #
+
+  def reverse_each(&block)
+    return to_enum :reverse_each unless block
+
+    ary = self.to_a
+    i = ary.size - 1
+    while i>=0
+      block.call(ary[i])
+      i -= 1
+    end
+    self
+  end
+
+  ##
+  #  call-seq:
+  #     enum.cycle(n=nil) { |obj| block }  ->  nil
+  #     enum.cycle(n=nil)                  ->  an_enumerator
+  #
+  #  Calls <i>block</i> for each element of <i>enum</i> repeatedly _n_
+  #  times or forever if none or +nil+ is given.  If a non-positive
+  #  number is given or the collection is empty, does nothing.  Returns
+  #  +nil+ if the loop has finished without getting interrupted.
+  #
+  #  Enumerable#cycle saves elements in an internal array so changes
+  #  to <i>enum</i> after the first pass have no effect.
+  #
+  #  If no block is given, an enumerator is returned instead.
+  #
+  #     a = ["a", "b", "c"]
+  #     a.cycle { |x| puts x }  # print, a, b, c, a, b, c,.. forever.
+  #     a.cycle(2) { |x| puts x }  # print, a, b, c, a, b, c.
+  #
+
+  def cycle(nv = nil, &block)
+    return to_enum(:cycle, nv) unless block
+
+    n = nil
+
+    if nv.nil?
+      n = -1
+    else
+      n = nv.__to_int
+      return nil if n <= 0
+    end
+
+    ary = []
+    each do |*i|
+      ary.push(i)
+      yield(*i)
+    end
+    return nil if ary.empty?
+
+    while n < 0 || 0 < (n -= 1)
+      ary.each do |i|
+        yield(*i)
+      end
+    end
+
+    nil
+  end
+
+  ##
+  #  call-seq:
+  #     enum.find_index(value)          -> int or nil
+  #     enum.find_index { |obj| block } -> int or nil
+  #     enum.find_index                 -> an_enumerator
+  #
+  #  Compares each entry in <i>enum</i> with <em>value</em> or passes
+  #  to <em>block</em>.  Returns the index for the first for which the
+  #  evaluated value is non-false.  If no object matches, returns
+  #  <code>nil</code>
+  #
+  #  If neither block nor argument is given, an enumerator is returned instead.
+  #
+  #     (1..10).find_index  { |i| i % 5 == 0 and i % 7 == 0 }  #=> nil
+  #     (1..100).find_index { |i| i % 5 == 0 and i % 7 == 0 }  #=> 34
+  #     (1..100).find_index(50)                                #=> 49
+  #
+
+  def find_index(val=NONE, &block)
+    return to_enum(:find_index, val) if !block && val == NONE
+
+    idx = 0
+    if block
+      self.each do |*e|
+        return idx if block.call(*e)
+        idx += 1
+      end
+    else
+      self.each do |*e|
+        return idx if e.__svalue == val
+        idx += 1
+      end
+    end
+    nil
+  end
+
+  ##
+  #  call-seq:
+  #     enum.zip(arg, ...)                  -> an_array_of_array
+  #     enum.zip(arg, ...) { |arr| block }  -> nil
+  #
+  #  Takes one element from <i>enum</i> and merges corresponding
+  #  elements from each <i>args</i>.  This generates a sequence of
+  #  <em>n</em>-element arrays, where <em>n</em> is one more than the
+  #  count of arguments.  The length of the resulting sequence will be
+  #  <code>enum#size</code>.  If the size of any argument is less than
+  #  <code>enum#size</code>, <code>nil</code> values are supplied. If
+  #  a block is given, it is invoked for each output array, otherwise
+  #  an array of arrays is returned.
+  #
+  #     a = [ 4, 5, 6 ]
+  #     b = [ 7, 8, 9 ]
+  #
+  #     a.zip(b)                 #=> [[4, 7], [5, 8], [6, 9]]
+  #     [1, 2, 3].zip(a, b)      #=> [[1, 4, 7], [2, 5, 8], [3, 6, 9]]
+  #     [1, 2].zip(a, b)         #=> [[1, 4, 7], [2, 5, 8]]
+  #     a.zip([1, 2], [8])       #=> [[4, 1, 8], [5, 2, nil], [6, nil, nil]]
+  #
+  #     c = []
+  #     a.zip(b) { |x, y| c << x + y }  #=> nil
+  #     c                               #=> [11, 13, 15]
+  #
+
+  def zip(*arg, &block)
+    result = block ? nil : []
+    arg = arg.map do |a|
+      unless a.respond_to?(:to_a)
+        raise TypeError, "wrong argument type #{a.class} (must respond to :to_a)"
+      end
+      a.to_a
+    end
+
+    i = 0
+    self.each do |*val|
+      a = []
+      a.push(val.__svalue)
+      idx = 0
+      while idx < arg.size
+        a.push(arg[idx][i])
+        idx += 1
+      end
+      i += 1
+      if result.nil?
+        block.call(a)
+      else
+        result.push(a)
+      end
+    end
+    result
+  end
+
+  ##
+  #  call-seq:
+  #     enum.to_h  -> hash
+  #
+  #  Returns the result of interpreting <i>enum</i> as a list of
+  #  <tt>[key, value]</tt> pairs.
+  #
+  #     %i[hello world].each_with_index.to_h
+  #       # => {:hello => 0, :world => 1}
+  #
+
+  def to_h(&blk)
+    h = {}
+    if blk
+      self.each do |v|
+        v = blk.call(v)
+        raise TypeError, "wrong element type #{v.class} (expected Array)" unless v.is_a? Array
+        raise ArgumentError, "element has wrong array length (expected 2, was #{v.size})" if v.size != 2
+        h[v[0]] = v[1]
+      end
+    else
+      self.each do |*v|
+        v = v.__svalue
+        raise TypeError, "wrong element type #{v.class} (expected Array)" unless v.is_a? Array
+        raise ArgumentError, "element has wrong array length (expected 2, was #{v.size})" if v.size != 2
+        h[v[0]] = v[1]
+      end
+    end
+    h
+  end
+
+  def uniq(&block)
+    hash = {}
+    if block
+      self.each do|*v|
+        v = v.__svalue
+        hash[block.call(v)] ||= v
+      end
+    else
+      self.each do|*v|
+        v = v.__svalue
+        hash[v] ||= v
+      end
+    end
+    hash.values
+  end
+
+  def filter_map(&blk)
+    return to_enum(:filter_map) unless blk
+
+    ary = []
+    self.each do |x|
+      x = blk.call(x)
+      ary.push x if x
+    end
+    ary
+  end
+
+  alias filter select
+
+  ##
+  # call-seq:
+  #   enum.tally -> a_hash
+  #
+  # Tallys the collection.  Returns a hash where the keys are the
+  # elements and the values are numbers of elements in the collection
+  # that correspond to the key.
+  #
+  #    ["a", "b", "c", "b"].tally #=> {"a"=>1, "b"=>2, "c"=>1}
+  def tally
+    hash = {}
+    self.each do |x|
+      hash[x] = (hash[x]||0)+1
+    end
+    hash
+  end
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-enum-ext/test/enum.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-enum-ext/test/enum.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-enum-ext/test/enum.rb	(revision 439)
@@ -0,0 +1,198 @@
+##
+# Enumerable(Ext) Test
+
+assert("Enumerable#drop") do
+  a = [1, 2, 3, 4, 5, 0]
+
+  assert_equal [4, 5, 0], a.drop(3)
+  assert_equal [], a.drop(6)
+end
+
+assert("Enumerable#drop_while") do
+  a = [1, 2, 3, 4, 5, 0]
+  assert_equal [3, 4, 5, 0], a.drop_while {|i| i < 3 }
+end
+
+assert("Enumerable#take") do
+  a = [1, 2, 3, 4, 5, 0]
+  assert_equal [1, 2, 3], a.take(3)
+end
+
+assert("Enumerable#take_while") do
+  a = [1, 2, 3, 4, 5, 0]
+  assert_equal [1, 2], a.take_while {|i| i < 3}
+end
+
+assert("Enumerable#each_cons") do
+  a = []
+  b = (1..5).each_cons(3){|e| a << e}
+  assert_equal [[1, 2, 3], [2, 3, 4], [3, 4, 5]], a
+  assert_equal nil, b
+end
+
+assert("Enumerable#each_slice") do
+  a = []
+  b = (1..10).each_slice(3){|e| a << e}
+  assert_equal [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10]], a
+  assert_equal nil, b
+end
+
+assert("Enumerable#group_by") do
+  r = (1..6).group_by {|i| i % 3 }
+  assert_equal [3, 6], r[0]
+  assert_equal [1, 4], r[1]
+  assert_equal [2, 5], r[2]
+end
+
+assert("Enumerable#sort_by") do
+  assert_equal ["car", "train", "bicycle"], %w{car bicycle train}.sort_by {|e| e.length}
+end
+
+assert("Enumerable#first") do
+  a = Object.new
+  a.extend Enumerable
+  def a.each
+    yield 1
+    yield 2
+    yield 3
+  end
+  assert_equal 1, a.first
+  assert_equal [1, 2], a.first(2)
+  assert_equal [1, 2, 3], a.first(10)
+  a = Object.new
+  a.extend Enumerable
+  def a.each
+  end
+  assert_nil a.first
+end
+
+assert("Enumerable#count") do
+  a = [1, 2, 4, 2]
+  assert_equal 4, a.count
+  assert_equal 2, a.count(2)
+  assert_equal 3, a.count{|x| x % 2 == 0}
+end
+
+assert("Enumerable#flat_map") do
+  assert_equal [1, 2, 3, 4], [1, 2, 3, 4].flat_map { |e| e }
+  assert_equal [1, -1, 2, -2, 3, -3, 4, -4], [1, 2, 3, 4].flat_map { |e| [e, -e] }
+  assert_equal [1, 2, 100, 3, 4, 100], [[1, 2], [3, 4]].flat_map { |e| e + [100] }
+end
+
+assert("Enumerable#max_by") do
+  assert_equal "albatross", %w[albatross dog horse].max_by { |x| x.length }
+end
+
+assert("Enumerable#min_by") do
+  assert_equal "dog", %w[albatross dog horse].min_by { |x| x.length }
+end
+
+assert("Enumerable#minmax") do
+  a = %w(albatross dog horse)
+  assert_equal ["albatross", "horse"], a.minmax
+  assert_equal ["dog", "albatross"], a.minmax { |a, b| a.length <=> b.length }
+end
+
+assert("Enumerable#minmax_by") do
+  assert_equal ["dog", "albatross"], %w(albatross dog horse).minmax_by { |x| x.length }
+end
+
+assert("Enumerable#none?") do
+  assert_true %w(ant bear cat).none? { |word| word.length == 5 }
+  assert_false %w(ant bear cat).none? { |word| word.length >= 4 }
+  assert_false [1, 3.14, 42].none?(Float)
+  assert_true [].none?
+  assert_true [nil, false].none?
+  assert_false [nil, true].none?
+end
+
+assert("Enumerable#one?") do
+  assert_true %w(ant bear cat).one? { |word| word.length == 4 }
+  assert_false %w(ant bear cat).one? { |word| word.length > 4 }
+  assert_false %w(ant bear cat).one? { |word| word.length < 4 }
+  assert_true [1, 3.14, 42].one?(Float)
+  assert_false [nil, true, 99].one?
+  assert_true [nil, true, false].one?
+  assert_true [ nil, true, 99 ].one?(Integer)
+  assert_false [].one?
+end
+
+assert("Enumerable#all? (enhancement)") do
+  assert_false [1, 2, 3.14].all?(Integer)
+  assert_true [1, 2, 3.14].all?(Numeric)
+end
+
+assert("Enumerable#any? (enhancement)") do
+  assert_false [1, 2, 3].all?(Float)
+  assert_true [nil, true, 99].any?(Integer)
+end
+
+assert("Enumerable#each_with_object") do
+  assert_equal [2, 4, 6, 8, 10, 12, 14, 16, 18, 20], (1..10).each_with_object([]) { |i, a| a << i*2 }
+  assert_raise(ArgumentError) { (1..10).each_with_object() { |i, a| a << i*2 } }
+end
+
+assert("Enumerable#reverse_each") do
+  r = (1..3)
+  a = []
+  assert_same r, r.reverse_each { |v| a << v }
+  assert_equal [3, 2, 1], a
+end
+
+assert("Enumerable#cycle") do
+  a = []
+  ["a", "b", "c"].cycle(2) { |v| a << v }
+  assert_equal ["a", "b", "c", "a", "b", "c"], a
+  assert_raise(TypeError) { ["a", "b", "c"].cycle("a") { |v| a << v } }
+
+  empty = Class.new do
+    include Enumerable
+    def each
+    end
+  end
+  assert_nil empty.new.cycle { break :nope }
+end
+
+assert("Enumerable#find_index") do
+  assert_nil (1..10).find_index { |i| i % 5 == 0 and i % 7 == 0 }
+  assert_equal 34, (1..100).find_index { |i| i % 5 == 0 and i % 7 == 0 }
+  assert_equal 49 ,(1..100).find_index(50)
+end
+
+assert("Enumerable#zip") do
+  a = [ 4, 5, 6 ]
+  b = [ 7, 8, 9 ]
+  assert_equal [[4, 7], [5, 8], [6, 9]], a.zip(b)
+  assert_equal [[1, 4, 7], [2, 5, 8], [3, 6, 9]], [1, 2, 3].zip(a, b)
+  assert_equal [[1, 4, 7], [2, 5, 8]], [1, 2].zip(a, b)
+  assert_equal [[4, 1, 8], [5, 2, nil], [6, nil, nil]], a.zip([1, 2], [8])
+
+  ret = []
+  assert_equal nil, a.zip([1, 2], [8]) { |i| ret << i }
+  assert_equal [[4, 1, 8], [5, 2, nil], [6, nil, nil]], ret
+
+  assert_raise(TypeError) { [1].zip(1) }
+end
+
+assert("Enumerable#to_h") do
+  c = Class.new {
+    include Enumerable
+    def each
+      yield [1,2]
+      yield [3,4]
+    end
+  }
+  h0 = {1=>2, 3=>4}
+  h = c.new.to_h
+  assert_equal Hash, h.class
+  assert_equal h0, h
+  assert_equal({1=>4,3=>8}, c.new.to_h{|k,v|[k,v*2]})
+end
+
+assert("Enumerable#filter_map") do
+  assert_equal [4, 8, 12, 16, 20], (1..10).filter_map{|i| i * 2 if i%2==0}
+end
+
+assert("Enumerable#tally") do
+  assert_equal({"a"=>1, "b"=>2, "c"=>1}, ["a", "b", "c", "b"].tally)
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-enum-lazy/mrbgem.rake
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-enum-lazy/mrbgem.rake	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-enum-lazy/mrbgem.rake	(revision 439)
@@ -0,0 +1,7 @@
+MRuby::Gem::Specification.new('mruby-enum-lazy') do |spec|
+  spec.license = 'MIT'
+  spec.author  = 'mruby developers'
+  spec.summary = 'Enumerator::Lazy class'
+  spec.add_dependency('mruby-enumerator', :core => 'mruby-enumerator')
+  spec.add_dependency('mruby-enum-ext', :core => 'mruby-enum-ext')
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-enum-lazy/mrblib/lazy.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-enum-lazy/mrblib/lazy.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-enum-lazy/mrblib/lazy.rb	(revision 439)
@@ -0,0 +1,178 @@
+module Enumerable
+
+  # = Enumerable#lazy implementation
+  #
+  # Enumerable#lazy returns an instance of Enumerator::Lazy.
+  # You can use it just like as normal Enumerable object,
+  # except these methods act as 'lazy':
+  #
+  #   - map       collect
+  #   - select    find_all
+  #   - reject
+  #   - grep
+  #   - drop
+  #   - drop_while
+  #   - take_while
+  #   - flat_map  collect_concat
+  #   - zip
+  def lazy
+    Enumerator::Lazy.new(self)
+  end
+end
+
+class Enumerator
+  # == Acknowledgements
+  #
+  #   Based on https://github.com/yhara/enumerable-lazy
+  #   Inspired by https://github.com/antimon2/enumerable_lz
+  #   http://jp.rubyist.net/magazine/?0034-Enumerable_lz (ja)
+  class Lazy < Enumerator
+    def initialize(obj, &block)
+      super(){|yielder|
+        begin
+          obj.each{|x|
+            if block
+              block.call(yielder, x)
+            else
+              yielder << x
+            end
+          }
+        rescue StopIteration
+        end
+      }
+    end
+
+    def to_enum(meth=:each, *args, &block)
+      unless self.respond_to?(meth)
+        raise ArgumentError, "undefined method #{meth}"
+      end
+      lz = Lazy.new(self, &block)
+      lz.obj = self
+      lz.meth = meth
+      lz.args = args
+      lz
+    end
+    alias enum_for to_enum
+
+    def map(&block)
+      Lazy.new(self){|yielder, val|
+        yielder << block.call(val)
+      }
+    end
+    alias collect map
+
+    def select(&block)
+      Lazy.new(self){|yielder, val|
+        if block.call(val)
+          yielder << val
+        end
+      }
+    end
+    alias find_all select
+
+    def reject(&block)
+      Lazy.new(self){|yielder, val|
+        unless block.call(val)
+          yielder << val
+        end
+      }
+    end
+
+    def grep(pattern)
+      Lazy.new(self){|yielder, val|
+        if pattern === val
+          yielder << val
+        end
+      }
+    end
+
+    def drop(n)
+      dropped = 0
+      Lazy.new(self){|yielder, val|
+        if dropped < n
+          dropped += 1
+        else
+          yielder << val
+        end
+      }
+    end
+
+    def drop_while(&block)
+      dropping = true
+      Lazy.new(self){|yielder, val|
+        if dropping
+          if not block.call(val)
+            yielder << val
+            dropping = false
+          end
+        else
+          yielder << val
+        end
+      }
+    end
+
+    def take(n)
+      if n == 0
+        return Lazy.new(self){raise StopIteration}
+      end
+      taken = 0
+      Lazy.new(self){|yielder, val|
+        yielder << val
+        taken += 1
+        if taken >= n
+          raise StopIteration
+        end
+      }
+    end
+
+    def take_while(&block)
+      Lazy.new(self){|yielder, val|
+        if block.call(val)
+          yielder << val
+        else
+          raise StopIteration
+        end
+      }
+    end
+
+    def flat_map(&block)
+      Lazy.new(self){|yielder, val|
+        ary = block.call(val)
+        # TODO: check ary is an Array
+        ary.each{|x|
+          yielder << x
+        }
+      }
+    end
+    alias collect_concat flat_map
+
+    def zip(*args, &block)
+      enums = [self] + args
+      Lazy.new(self){|yielder, val|
+        ary = enums.map{|e| e.next}
+        if block
+          yielder << block.call(ary)
+        else
+          yielder << ary
+        end
+      }
+    end
+
+    def uniq(&block)
+      hash = {}
+      Lazy.new(self){|yielder, val|
+        if block
+          v = block.call(val)
+        else
+          v = val
+        end
+        unless hash.include?(v)
+          yielder << val
+          hash[v] = val
+        end
+      }
+    end
+
+    alias force to_a
+  end
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-enum-lazy/test/lazy.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-enum-lazy/test/lazy.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-enum-lazy/test/lazy.rb	(revision 439)
@@ -0,0 +1,53 @@
+assert("Enumerator::Lazy") do
+  a = [1, 2]
+  assert_equal Enumerator::Lazy, a.lazy.class
+end
+
+assert("Enumerator::Lazy laziness") do
+  a = Object.new
+  def a.each
+    return to_enum :each unless block_given?
+    self.b << 10
+    yield 1
+    self.b << 20
+    yield 2
+    self.b << 30
+    yield 3
+    self.b << 40
+    yield 4
+    self.b << 50
+    yield 5
+  end
+  def a.b(b=nil)
+    @b = b if b
+    @b
+  end
+
+  a.b([])
+  assert_equal [1,2], a.each.lazy.take(2).force
+  assert_equal [10,20], a.b
+
+  a.b([])
+  assert_equal [2,4], a.each.lazy.select{|x|x%2==0}.take(2).force
+  assert_equal [10,20,30,40], a.b
+
+  a.b([])
+  assert_equal [1], a.each.lazy.take_while{|x|x<2}.take(1).force
+  assert_equal [10], a.b
+
+  a.b([])
+  assert_equal [1], a.each.lazy.take_while{|x|x<2}.take(4).force
+  assert_equal [10,20], a.b
+end
+
+assert("Enumerator::Lazy#to_enum") do
+  lazy_enum = (0..Float::INFINITY).lazy.to_enum(:each_slice, 2)
+  assert_kind_of Enumerator::Lazy, lazy_enum
+  assert_equal [0*1, 2*3, 4*5, 6*7], lazy_enum.map { |a| a.first * a.last }.first(4)
+end
+
+assert("Enumerator::Lazy#zip with cycle") do
+  e1 = [1, 2, 3].cycle
+  e2 = [:a, :b].cycle
+  assert_equal [[1,:a],[2,:b],[3,:a]], e1.lazy.zip(e2).first(3)
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-enumerator/mrbgem.rake
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-enumerator/mrbgem.rake	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-enumerator/mrbgem.rake	(revision 439)
@@ -0,0 +1,6 @@
+MRuby::Gem::Specification.new('mruby-enumerator') do |spec|
+  spec.license = 'MIT'
+  spec.author  = 'mruby developers'
+  spec.add_dependency('mruby-fiber', :core => 'mruby-fiber')
+  spec.summary = 'Enumerator class'
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-enumerator/mrblib/enumerator.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-enumerator/mrblib/enumerator.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-enumerator/mrblib/enumerator.rb	(revision 439)
@@ -0,0 +1,689 @@
+##
+# enumerator.rb Enumerator class
+# See Copyright Notice in mruby.h
+
+##
+# A class which allows both internal and external iteration.
+#
+# An Enumerator can be created by the following methods.
+# - {Kernel#to_enum}
+# - {Kernel#enum_for}
+# - {Enumerator#initialize Enumerator.new}
+#
+# Most methods have two forms: a block form where the contents
+# are evaluated for each item in the enumeration, and a non-block form
+# which returns a new Enumerator wrapping the iteration.
+#
+#       enumerator = %w(one two three).each
+#       puts enumerator.class # => Enumerator
+#
+#       enumerator.each_with_object("foo") do |item, obj|
+#         puts "#{obj}: #{item}"
+#       end
+#
+#       # foo: one
+#       # foo: two
+#       # foo: three
+#
+#       enum_with_obj = enumerator.each_with_object("foo")
+#       puts enum_with_obj.class # => Enumerator
+#
+#       enum_with_obj.each do |item, obj|
+#         puts "#{obj}: #{item}"
+#       end
+#
+#       # foo: one
+#       # foo: two
+#       # foo: three
+#
+# This allows you to chain Enumerators together.  For example, you
+# can map a list's elements to strings containing the index
+# and the element as a string via:
+#
+#       puts %w[foo bar baz].map.with_index { |w, i| "#{i}:#{w}" }
+#       # => ["0:foo", "1:bar", "2:baz"]
+#
+# An Enumerator can also be used as an external iterator.
+# For example, Enumerator#next returns the next value of the iterator
+# or raises StopIteration if the Enumerator is at the end.
+#
+#       e = [1,2,3].each   # returns an enumerator object.
+#       puts e.next   # => 1
+#       puts e.next   # => 2
+#       puts e.next   # => 3
+#       puts e.next   # raises StopIteration
+#
+# You can use this to implement an internal iterator as follows:
+#
+#       def ext_each(e)
+#         while true
+#           begin
+#             vs = e.next_values
+#           rescue StopIteration
+#             return $!.result
+#           end
+#           y = yield(*vs)
+#           e.feed y
+#         end
+#       end
+#
+#       o = Object.new
+#
+#       def o.each
+#         puts yield
+#         puts yield(1)
+#         puts yield(1, 2)
+#         3
+#       end
+#
+#       # use o.each as an internal iterator directly.
+#       puts o.each {|*x| puts x; [:b, *x] }
+#       # => [], [:b], [1], [:b, 1], [1, 2], [:b, 1, 2], 3
+#
+#       # convert o.each to an external iterator for
+#       # implementing an internal iterator.
+#       puts ext_each(o.to_enum) {|*x| puts x; [:b, *x] }
+#       # => [], [:b], [1], [:b, 1], [1, 2], [:b, 1, 2], 3
+#
+class Enumerator
+  include Enumerable
+
+  ##
+  # @overload initialize(obj, method = :each, *args)
+  #
+  # Creates a new Enumerator object, which can be used as an
+  # Enumerable.
+  #
+  # In the first form, iteration is defined by the given block, in
+  # which a "yielder" object, given as block parameter, can be used to
+  # yield a value by calling the +yield+ method (aliased as +<<+):
+  #
+  #     fib = Enumerator.new do |y|
+  #       a = b = 1
+  #       loop do
+  #         y << a
+  #         a, b = b, a + b
+  #       end
+  #     end
+  #
+  #     p fib.take(10) # => [1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
+  #
+  # In the second, deprecated, form, a generated Enumerator iterates over the
+  # given object using the given method with the given arguments passed. This
+  # form is left only for internal use.
+  #
+  # Use of this form is discouraged.  Use Kernel#enum_for or Kernel#to_enum
+  # instead.
+  def initialize(obj=NONE, meth=:each, *args, &block)
+    if block
+      obj = Generator.new(&block)
+    elsif obj == NONE
+      raise ArgumentError, "wrong number of arguments (given 0, expected 1+)"
+    end
+
+    @obj = obj
+    @meth = meth
+    @args = args
+    @fib = nil
+    @dst = nil
+    @lookahead = nil
+    @feedvalue = nil
+    @stop_exc = false
+  end
+  attr_accessor :obj, :meth, :args
+  attr_reader :fib
+
+  def initialize_copy(obj)
+    raise TypeError, "can't copy type #{obj.class}" unless obj.kind_of? Enumerator
+    raise TypeError, "can't copy execution context" if obj.fib
+    @obj = obj.obj
+    @meth = obj.meth
+    @args = obj.args
+    @fib = nil
+    @lookahead = nil
+    @feedvalue = nil
+    self
+  end
+
+  ##
+  # call-seq:
+  #   e.with_index(offset = 0) {|(*args), idx| ... }
+  #   e.with_index(offset = 0)
+  #
+  # Iterates the given block for each element with an index, which
+  # starts from +offset+.  If no block is given, returns a new Enumerator
+  # that includes the index, starting from +offset+
+  #
+  # +offset+:: the starting index to use
+  #
+  def with_index(offset=0, &block)
+    return to_enum :with_index, offset unless block
+
+    if offset.nil?
+      offset = 0
+    else
+      offset = offset.__to_int
+    end
+
+    n = offset - 1
+    enumerator_block_call do |*i|
+      n += 1
+      block.call i.__svalue, n
+    end
+  end
+
+  ##
+  # call-seq:
+  #   e.each_with_index {|(*args), idx| ... }
+  #   e.each_with_index
+  #
+  # Same as Enumerator#with_index(0), i.e. there is no starting offset.
+  #
+  # If no block is given, a new Enumerator is returned that includes the index.
+  #
+  def each_with_index(&block)
+    with_index(0, &block)
+  end
+
+  ##
+  # call-seq:
+  #   e.each_with_object(obj) {|(*args), obj| ... }
+  #   e.each_with_object(obj)
+  #   e.with_object(obj) {|(*args), obj| ... }
+  #   e.with_object(obj)
+  #
+  # Iterates the given block for each element with an arbitrary object, +obj+,
+  # and returns +obj+
+  #
+  # If no block is given, returns a new Enumerator.
+  #
+  # @example
+  #   to_three = Enumerator.new do |y|
+  #     3.times do |x|
+  #       y << x
+  #     end
+  #   end
+  #
+  #   to_three_with_string = to_three.with_object("foo")
+  #   to_three_with_string.each do |x,string|
+  #     puts "#{string}: #{x}"
+  #   end
+  #
+  #   # => foo:0
+  #   # => foo:1
+  #   # => foo:2
+  #
+  def with_object(object, &block)
+    return to_enum(:with_object, object) unless block
+
+    enumerator_block_call do |i|
+      block.call [i,object]
+    end
+    object
+  end
+
+  def inspect
+    if @args && @args.size > 0
+      args = @args.join(", ")
+      "#<#{self.class}: #{@obj.inspect}:#{@meth}(#{args})>"
+    else
+      "#<#{self.class}: #{@obj.inspect}:#{@meth}>"
+    end
+  end
+
+  ##
+  # call-seq:
+  #   enum.each { |elm| block }                    -> obj
+  #   enum.each                                    -> enum
+  #   enum.each(*appending_args) { |elm| block }   -> obj
+  #   enum.each(*appending_args)                   -> an_enumerator
+  #
+  # Iterates over the block according to how this Enumerator was constructed.
+  # If no block and no arguments are given, returns self.
+  #
+  # === Examples
+  #
+  #   Array.new(3)                     #=> [nil, nil, nil]
+  #   Array.new(3) { |i| i }           #=> [0, 1, 2]
+  #   Array.to_enum(:new, 3).to_a      #=> [0, 1, 2]
+  #   Array.to_enum(:new).each(3).to_a #=> [0, 1, 2]
+  #
+  #   obj = Object.new
+  #
+  #   def obj.each_arg(a, b=:b, *rest)
+  #     yield a
+  #     yield b
+  #     yield rest
+  #     :method_returned
+  #   end
+  #
+  #   enum = obj.to_enum :each_arg, :a, :x
+  #
+  #   enum.each.to_a                  #=> [:a, :x, []]
+  #   enum.each.equal?(enum)          #=> true
+  #   enum.each { |elm| elm }         #=> :method_returned
+  #
+  #   enum.each(:y, :z).to_a          #=> [:a, :x, [:y, :z]]
+  #   enum.each(:y, :z).equal?(enum)  #=> false
+  #   enum.each(:y, :z) { |elm| elm } #=> :method_returned
+  #
+  def each(*argv, &block)
+    obj = self
+    if 0 < argv.length
+      obj = self.dup
+      args = obj.args
+      if !args.empty?
+        args = args.dup
+        args.concat argv
+      else
+        args = argv.dup
+      end
+      obj.args = args
+    end
+    return obj unless block
+    enumerator_block_call(&block)
+  end
+
+  def enumerator_block_call(&block)
+    @obj.__send__ @meth, *@args, &block
+  end
+  private :enumerator_block_call
+
+  ##
+  # call-seq:
+  #   e.next   -> object
+  #
+  # Returns the next object in the enumerator, and move the internal position
+  # forward.  When the position reached at the end, StopIteration is raised.
+  #
+  # === Example
+  #
+  #   a = [1,2,3]
+  #   e = a.to_enum
+  #   p e.next   #=> 1
+  #   p e.next   #=> 2
+  #   p e.next   #=> 3
+  #   p e.next   #raises StopIteration
+  #
+  # Note that enumeration sequence by +next+ does not affect other non-external
+  # enumeration methods, unless the underlying iteration methods itself has
+  # side-effect
+  #
+  def next
+    next_values.__svalue
+  end
+
+  ##
+  # call-seq:
+  #   e.next_values   -> array
+  #
+  # Returns the next object as an array in the enumerator, and move the
+  # internal position forward.  When the position reached at the end,
+  # StopIteration is raised.
+  #
+  # This method can be used to distinguish <code>yield</code> and <code>yield
+  # nil</code>.
+  #
+  # === Example
+  #
+  #   o = Object.new
+  #   def o.each
+  #     yield
+  #     yield 1
+  #     yield 1, 2
+  #     yield nil
+  #     yield [1, 2]
+  #   end
+  #   e = o.to_enum
+  #   p e.next_values
+  #   p e.next_values
+  #   p e.next_values
+  #   p e.next_values
+  #   p e.next_values
+  #   e = o.to_enum
+  #   p e.next
+  #   p e.next
+  #   p e.next
+  #   p e.next
+  #   p e.next
+  #
+  #   ## yield args       next_values      next
+  #   #  yield            []               nil
+  #   #  yield 1          [1]              1
+  #   #  yield 1, 2       [1, 2]           [1, 2]
+  #   #  yield nil        [nil]            nil
+  #   #  yield [1, 2]     [[1, 2]]         [1, 2]
+  #
+  # Note that +next_values+ does not affect other non-external enumeration
+  # methods unless underlying iteration method itself has side-effect
+  #
+  def next_values
+    if @lookahead
+      vs = @lookahead
+      @lookahead = nil
+      return vs
+    end
+    raise @stop_exc if @stop_exc
+
+    curr = Fiber.current
+
+    if !@fib || !@fib.alive?
+      @dst = curr
+      @fib = Fiber.new do
+        result = each do |*args|
+          feedvalue = nil
+          Fiber.yield args
+          if @feedvalue
+            feedvalue = @feedvalue
+            @feedvalue = nil
+          end
+          feedvalue
+        end
+        @stop_exc = StopIteration.new "iteration reached an end"
+        @stop_exc.result = result
+        Fiber.yield nil
+      end
+      @lookahead = nil
+    end
+
+    vs = @fib.resume curr
+    if @stop_exc
+      @fib = nil
+      @dst = nil
+      @lookahead = nil
+      @feedvalue = nil
+      raise @stop_exc
+    end
+    vs
+  end
+
+  ##
+  # call-seq:
+  #   e.peek   -> object
+  #
+  # Returns the next object in the enumerator, but doesn't move the internal
+  # position forward.  If the position is already at the end, StopIteration
+  # is raised.
+  #
+  # === Example
+  #
+  #   a = [1,2,3]
+  #   e = a.to_enum
+  #   p e.next   #=> 1
+  #   p e.peek   #=> 2
+  #   p e.peek   #=> 2
+  #   p e.peek   #=> 2
+  #   p e.next   #=> 2
+  #   p e.next   #=> 3
+  #   p e.next   #raises StopIteration
+  #
+  def peek
+    peek_values.__svalue
+  end
+
+  ##
+  # call-seq:
+  #   e.peek_values   -> array
+  #
+  # Returns the next object as an array, similar to Enumerator#next_values, but
+  # doesn't move the internal position forward.  If the position is already at
+  # the end, StopIteration is raised.
+  #
+  # === Example
+  #
+  #   o = Object.new
+  #   def o.each
+  #     yield
+  #     yield 1
+  #     yield 1, 2
+  #   end
+  #   e = o.to_enum
+  #   p e.peek_values    #=> []
+  #   e.next
+  #   p e.peek_values    #=> [1]
+  #   p e.peek_values    #=> [1]
+  #   e.next
+  #   p e.peek_values    #=> [1, 2]
+  #   e.next
+  #   p e.peek_values    # raises StopIteration
+  #
+  def peek_values
+    if @lookahead.nil?
+      @lookahead = next_values
+    end
+    @lookahead.dup
+  end
+
+  ##
+  # call-seq:
+  #   e.rewind   -> e
+  #
+  # Rewinds the enumeration sequence to the beginning.
+  #
+  # If the enclosed object responds to a "rewind" method, it is called.
+  #
+  def rewind
+    @obj.rewind if @obj.respond_to? :rewind
+    @fib = nil
+    @dst = nil
+    @lookahead = nil
+    @feedvalue = nil
+    @stop_exc = false
+    self
+  end
+
+  ##
+  # call-seq:
+  #   e.feed obj   -> nil
+  #
+  # Sets the value to be returned by the next yield inside +e+.
+  #
+  # If the value is not set, the yield returns nil.
+  #
+  # This value is cleared after being yielded.
+  #
+  #   # Array#map passes the array's elements to "yield" and collects the
+  #   # results of "yield" as an array.
+  #   # Following example shows that "next" returns the passed elements and
+  #   # values passed to "feed" are collected as an array which can be
+  #   # obtained by StopIteration#result.
+  #   e = [1,2,3].map
+  #   p e.next           #=> 1
+  #   e.feed "a"
+  #   p e.next           #=> 2
+  #   e.feed "b"
+  #   p e.next           #=> 3
+  #   e.feed "c"
+  #   begin
+  #     e.next
+  #   rescue StopIteration
+  #     p $!.result      #=> ["a", "b", "c"]
+  #   end
+  #
+  #   o = Object.new
+  #   def o.each
+  #     x = yield         # (2) blocks
+  #     p x               # (5) => "foo"
+  #     x = yield         # (6) blocks
+  #     p x               # (8) => nil
+  #     x = yield         # (9) blocks
+  #     p x               # not reached w/o another e.next
+  #   end
+  #
+  #   e = o.to_enum
+  #   e.next              # (1)
+  #   e.feed "foo"        # (3)
+  #   e.next              # (4)
+  #   e.next              # (7)
+  #                       # (10)
+  #
+  def feed(value)
+    raise TypeError, "feed value already set" if @feedvalue
+    @feedvalue = value
+    nil
+  end
+
+  # just for internal
+  class Generator
+    include Enumerable
+    def initialize(&block)
+      raise TypeError, "wrong argument type #{self.class} (expected Proc)" unless block.kind_of? Proc
+
+      @proc = block
+    end
+
+    def each(*args, &block)
+      args.unshift Yielder.new(&block)
+      @proc.call(*args)
+    end
+  end
+
+  # just for internal
+  class Yielder
+    def initialize(&block)
+      raise LocalJumpError, "no block given" unless block
+
+      @proc = block
+    end
+
+    def yield(*args)
+      @proc.call(*args)
+    end
+
+    def << *args
+      self.yield(*args)
+      self
+    end
+  end
+
+  ##
+  # call-seq:
+  #    Enumerator.produce(initial = nil) { |val| } -> enumerator
+  #
+  # Creates an infinite enumerator from any block, just called over and
+  # over.  Result of the previous iteration is passed to the next one.
+  # If +initial+ is provided, it is passed to the first iteration, and
+  # becomes the first element of the enumerator; if it is not provided,
+  # first iteration receives +nil+, and its result becomes first
+  # element of the iterator.
+  #
+  # Raising StopIteration from the block stops an iteration.
+  #
+  # Examples of usage:
+  #
+  #   Enumerator.produce(1, &:succ)   # => enumerator of 1, 2, 3, 4, ....
+  #
+  #   Enumerator.produce { rand(10) } # => infinite random number sequence
+  #
+  #   ancestors = Enumerator.produce(node) { |prev| node = prev.parent or raise StopIteration }
+  #   enclosing_section = ancestors.find { |n| n.type == :section }
+  def Enumerator.produce(init=NONE, &block)
+    raise ArgumentError, "no block given" if block.nil?
+    Enumerator.new do |y|
+      if init == NONE
+        val = nil
+      else
+        val = init
+        y.yield(val)
+      end
+      begin
+        while true
+          y.yield(val = block.call(val))
+        end
+      rescue StopIteration
+        # do nothing
+      end
+    end
+  end
+end
+
+module Kernel
+  ##
+  # call-seq:
+  #   obj.to_enum(method = :each, *args)                 -> enum
+  #   obj.enum_for(method = :each, *args)                -> enum
+  #
+  # Creates a new Enumerator which will enumerate by calling +method+ on
+  # +obj+, passing +args+ if any.
+  #
+  # === Examples
+  #
+  #   str = "xyz"
+  #
+  #   enum = str.enum_for(:each_byte)
+  #   enum.each { |b| puts b }
+  #   # => 120
+  #   # => 121
+  #   # => 122
+  #
+  #   # protect an array from being modified by some_method
+  #   a = [1, 2, 3]
+  #   some_method(a.to_enum)
+  #
+  # It is typical to call to_enum when defining methods for
+  # a generic Enumerable, in case no block is passed.
+  #
+  # Here is such an example with parameter passing:
+  #
+  #     module Enumerable
+  #       # a generic method to repeat the values of any enumerable
+  #       def repeat(n)
+  #         raise ArgumentError, "#{n} is negative!" if n < 0
+  #         unless block_given?
+  #           return to_enum(__method__, n) # __method__ is :repeat here
+  #         end
+  #         each do |*val|
+  #           n.times { yield *val }
+  #         end
+  #       end
+  #     end
+  #
+  #     %i[hello world].repeat(2) { |w| puts w }
+  #       # => Prints 'hello', 'hello', 'world', 'world'
+  #     enum = (1..14).repeat(3)
+  #       # => returns an Enumerator when called without a block
+  #     enum.first(4) # => [1, 1, 1, 2]
+  #
+  def to_enum(meth=:each, *args)
+    Enumerator.new self, meth, *args
+  end
+  alias enum_for to_enum
+end
+
+module Enumerable
+  # use Enumerator to use infinite sequence
+  def zip(*args, &block)
+    args = args.map do |a|
+      if a.respond_to?(:each)
+        a.to_enum(:each)
+      else
+        raise TypeError, "wrong argument type #{a.class} (must respond to :each)"
+      end
+    end
+
+    result = block ? nil : []
+
+    each do |*val|
+      tmp = [val.__svalue]
+      args.each do |arg|
+        v = if arg.nil?
+          nil
+        else
+          begin
+            arg.next
+          rescue StopIteration
+            nil
+          end
+        end
+        tmp.push(v)
+      end
+      if result.nil?
+        block.call(tmp)
+      else
+        result.push(tmp)
+      end
+    end
+
+    result
+  end
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-enumerator/test/enumerator.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-enumerator/test/enumerator.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-enumerator/test/enumerator.rb	(revision 439)
@@ -0,0 +1,600 @@
+@obj = Object.new
+class << @obj
+  include Enumerable
+  def foo *a
+    a.each { |x| yield x }
+  end
+end
+
+def assert_take(exp, enumerator)
+  result = []
+  n = exp.size
+  enumerator.each do |v|
+    result << v
+    n -= 1
+    break if n == 0
+  end if n > 0
+  assert_equal exp, result
+end
+
+assert 'Enumerator.class' do
+  assert_equal Class, Enumerator.class
+end
+
+assert 'Enumerator.superclass' do
+  assert_equal Object, Enumerator.superclass
+end
+
+assert 'Enumerator.new' do
+  assert_equal [0,1,2], 3.times.map{|i| i}.sort
+  assert_equal [:x,:y,:z], [:x,:y,:z].each.map{|i| i}.sort
+  assert_equal [[:x,1],[:y,2]], {x:1, y:2}.each.map{|i| i}.sort
+  assert_equal [1,2,3], @obj.to_enum(:foo, 1,2,3).to_a
+  assert_take [1,2,3], Enumerator.new { |y| i = 0; loop { y << (i += 1) } }
+  assert_raise(ArgumentError) { Enumerator.new }
+
+  # examples
+  fib = Enumerator.new do |y|
+    a = b = 1
+    loop do
+      y << a
+      a, b = b, a + b
+    end
+  end
+  assert_take [1,1,2,3,5,8,13,21,34,55], fib
+end
+
+assert 'Enumerator#initialize_copy' do
+  assert_equal [1, 2, 3], @obj.to_enum(:foo, 1, 2, 3).dup.to_a
+  e = @obj.to_enum :foo, 1, 2, 3
+  assert_nothing_raised { assert_equal(1, e.next) }
+  assert_raise(TypeError) { e.dup }
+
+  e = Enumerator.new { |y| i = 0; loop { y << (i += 1) } }.dup
+  assert_nothing_raised { assert_equal(1, e.next) }
+  assert_raise(TypeError) { e.dup }
+end
+
+assert 'Enumerator#with_index' do
+  assert_equal([[1,0],[2,1],[3,2]], @obj.to_enum(:foo, 1, 2, 3).with_index.to_a)
+  assert_equal([[1,5],[2,6],[3,7]], @obj.to_enum(:foo, 1, 2, 3).with_index(5).to_a)
+  a = []
+  @obj.to_enum(:foo, 1, 2, 3).with_index(10).with_index(20) { |*i| a << i }
+  assert_equal [[[1, 10], 20], [[2, 11], 21], [[3, 12], 22]], a
+end
+
+assert 'Enumerator#with_index string offset' do
+  assert_raise(TypeError){ @obj.to_enum(:foo, 1, 2, 3).with_index('1').to_a }
+end
+
+assert 'Enumerator#each_with_index' do
+  assert_equal([[1,0],[2,1],[3,2]], @obj.to_enum(:foo, 1, 2, 3).each_with_index.to_a)
+  a = []
+  @obj.to_enum(:foo, 1, 2, 3).each_with_index {|*i| a << i}
+  assert_equal([[1, 0], [2, 1], [3, 2]], a)
+end
+
+assert 'Enumerator#with_object' do
+  obj = [0, 1]
+  ret = (1..10).each.with_object(obj) {|i, memo|
+    memo[0] += i
+    memo[1] *= i
+  }
+  assert_true(obj.equal?(ret))
+  assert_equal([55, 3628800], ret)
+end
+
+assert 'Enumerator#with_object arguments' do
+  to_three = Enumerator.new do |y|
+    3.times do |x|
+      y << x
+    end
+  end
+
+  a = []
+  to_three_with_string = to_three.with_object("foo")
+  to_three_with_string.each do |x,string|
+    a << "#{string}:#{x}"
+  end
+  assert_equal ["foo:0","foo:1","foo:2"], a
+end
+
+assert 'Enumerator#inspect' do
+  e = (0..10).each
+  assert_equal('#<Enumerator: 0..10:each>', e.inspect)
+  e = 'FooObject'.enum_for(:foo, 1)
+  assert_equal('#<Enumerator: "FooObject":foo(1)>', e.inspect)
+  e = 'FooObject'.enum_for(:foo, 1, 2, 3)
+  assert_equal('#<Enumerator: "FooObject":foo(1, 2, 3)>', e.inspect)
+  e = nil.enum_for(:to_s)
+  assert_equal('#<Enumerator: nil:to_s>', e.inspect)
+end
+
+assert 'Enumerator#each' do
+  o = Object.new
+  def o.each(ary)
+    ary << 1
+    yield
+  end
+  ary = []
+  e = o.to_enum.each(ary)
+  e.next
+  assert_equal([1], ary)
+end
+
+assert 'Enumerator#each arguments' do
+  obj = Object.new
+
+  def obj.each_arg(a, b=:b, *rest)
+    yield a
+    yield b
+    yield rest
+    :method_returned
+  end
+
+  enum = obj.to_enum :each_arg, :a, :x
+
+  assert_equal [:a, :x, []], enum.each.to_a
+  assert_true enum.each.equal?(enum)
+  assert_equal :method_returned, enum.each { |elm| elm }
+
+  assert_equal [:a, :x, [:y, :z]], enum.each(:y, :z).to_a
+  assert_false enum.each(:y, :z).equal?(enum)
+  assert_equal :method_returned, enum.each(:y, :z) { |elm| elm }
+end
+
+assert 'Enumerator#next' do
+  e = 3.times
+  3.times { |i|
+    assert_equal i, e.next
+  }
+  assert_raise(StopIteration) { e.next }
+end
+
+assert 'Enumerator#next_values' do
+  o = Object.new
+  def o.each
+    yield
+    yield 1
+    yield 1, 2
+  end
+  e = o.to_enum
+  assert_equal nil, e.next
+  assert_equal 1, e.next
+  assert_equal [1,2], e.next
+  e = o.to_enum
+  assert_equal [], e.next_values
+  assert_equal [1], e.next_values
+  assert_equal [1,2], e.next_values
+end
+
+assert 'Enumerator#peek' do
+  a = [1]
+  e = a.each
+  assert_equal 1, e.peek
+  assert_equal 1, e.peek
+  assert_equal 1, e.next
+  assert_raise(StopIteration) { e.peek }
+  assert_raise(StopIteration) { e.peek }
+end
+
+assert 'Enumerator#peek modify' do
+  o = Object.new
+  def o.each
+    yield 1,2
+  end
+  e = o.to_enum
+  a = e.peek
+  a << 3
+  assert_equal([1,2], e.peek)
+end
+
+assert 'Enumerator#peek_values' do
+  o = Object.new
+  def o.each
+    yield
+    yield 1
+    yield 1, 2
+  end
+  e = o.to_enum
+  assert_equal nil, e.peek
+  assert_equal nil, e.next
+  assert_equal 1, e.peek
+  assert_equal 1, e.next
+  assert_equal [1,2], e.peek
+  assert_equal [1,2], e.next
+  e = o.to_enum
+  assert_equal [], e.peek_values
+  assert_equal [], e.next_values
+  assert_equal [1], e.peek_values
+  assert_equal [1], e.next_values
+  assert_equal [1,2], e.peek_values
+  assert_equal [1,2], e.next_values
+  e = o.to_enum
+  assert_equal [], e.peek_values
+  assert_equal nil, e.next
+  assert_equal [1], e.peek_values
+  assert_equal 1, e.next
+  assert_equal [1,2], e.peek_values
+  assert_equal [1,2], e.next
+  e = o.to_enum
+  assert_equal nil, e.peek
+  assert_equal [], e.next_values
+  assert_equal 1, e.peek
+  assert_equal [1], e.next_values
+  assert_equal [1,2], e.peek
+  assert_equal [1,2], e.next_values
+end
+
+assert 'Enumerator#peek_values modify' do
+  o = Object.new
+  def o.each
+    yield 1,2
+  end
+  e = o.to_enum
+  a = e.peek_values
+  a << 3
+  assert_equal [1,2], e.peek
+end
+
+assert 'Enumerator#feed' do
+  o = Object.new
+  def o.each(ary)
+    ary << yield
+    ary << yield
+    ary << yield
+  end
+  ary = []
+  e = o.to_enum :each, ary
+  e.next
+  e.feed 1
+  e.next
+  e.feed 2
+  e.next
+  e.feed 3
+  assert_raise(StopIteration) { e.next }
+  assert_equal [1,2,3], ary
+end
+
+assert 'Enumerator#feed mixed' do
+  o = Object.new
+  def o.each(ary)
+    ary << yield
+    ary << yield
+    ary << yield
+  end
+  ary = []
+  e = o.to_enum :each, ary
+  e.next
+  e.feed 1
+  e.next
+  e.next
+  e.feed 3
+  assert_raise(StopIteration) { e.next }
+  assert_equal [1,nil,3], ary
+end
+
+assert 'Enumerator#feed twice' do
+  o = Object.new
+  def o.each(ary)
+    ary << yield
+    ary << yield
+    ary << yield
+  end
+  ary = []
+  e = o.to_enum :each, ary
+  e.feed 1
+  assert_raise(TypeError) { e.feed 2 }
+end
+
+assert 'Enumerator#feed before first next' do
+  o = Object.new
+  def o.each(ary)
+    ary << yield
+    ary << yield
+    ary << yield
+  end
+  ary = []
+  e = o.to_enum :each, ary
+  e.feed 1
+  e.next
+  e.next
+  assert_equal [1], ary
+end
+
+assert 'Enumerator#feed yielder' do
+  x = nil
+  e = Enumerator.new {|y| x = y.yield; 10 }
+  e.next
+  e.feed 100
+  assert_raise(StopIteration) { e.next }
+  assert_equal 100, x
+end
+
+assert 'Enumerator#rewind' do
+  e = @obj.to_enum(:foo, 1, 2, 3)
+  assert_equal 1, e.next
+  assert_equal 2, e.next
+  e.rewind
+  assert_equal 1, e.next
+  assert_equal 2, e.next
+  assert_equal 3, e.next
+  assert_raise(StopIteration) { e.next }
+end
+
+assert 'Enumerator#rewind clear feed' do
+  o = Object.new
+  def o.each(ary)
+    ary << yield
+    ary << yield
+    ary << yield
+  end
+  ary = []
+  e = o.to_enum(:each, ary)
+  e.next
+  e.feed 1
+  e.next
+  e.feed 2
+  e.rewind
+  e.next
+  e.next
+  assert_equal([1,nil], ary)
+end
+
+assert 'Enumerator#rewind clear' do
+  o = Object.new
+  def o.each(ary)
+    ary << yield
+    ary << yield
+    ary << yield
+  end
+  ary = []
+  e = o.to_enum :each, ary
+  e.next
+  e.feed 1
+  e.next
+  e.feed 2
+  e.rewind
+  e.next
+  e.next
+  assert_equal [1,nil], ary
+end
+
+assert 'Enumerator::Generator' do
+  # note: Enumerator::Generator is a class just for internal
+  g = Enumerator::Generator.new {|y| y << 1 << 2 << 3; :foo }
+  g2 = g.dup
+  a = []
+  assert_equal(:foo, g.each {|x| a << x })
+  assert_equal([1, 2, 3], a)
+  a = []
+  assert_equal(:foo, g2.each {|x| a << x })
+  assert_equal([1, 2, 3], a)
+end
+
+assert 'Enumerator::Generator args' do
+  g = Enumerator::Generator.new {|y, x| y << 1 << 2 << 3; x }
+  a = []
+  assert_equal(:bar, g.each(:bar) {|x| a << x })
+  assert_equal([1, 2, 3], a)
+end
+
+assert 'Enumerator::Yielder' do
+  # note: Enumerator::Yielder is a class just for internal
+  a = []
+  y = Enumerator::Yielder.new {|x| a << x }
+  assert_equal(y, y << 1 << 2 << 3)
+  assert_equal([1, 2, 3], a)
+
+  a = []
+  y = Enumerator::Yielder.new {|x| a << x }
+  assert_equal([1], y.yield(1))
+  assert_equal([1, 2], y.yield(2))
+  assert_equal([1, 2, 3], y.yield(3))
+
+  assert_raise(LocalJumpError) { Enumerator::Yielder.new }
+end
+
+assert 'next after StopIteration' do
+  a = [1]
+  e = a.each
+  assert_equal(1, e.next)
+  assert_raise(StopIteration) { e.next }
+  assert_raise(StopIteration) { e.next }
+  e.rewind
+  assert_equal(1, e.next)
+  assert_raise(StopIteration) { e.next }
+  assert_raise(StopIteration) { e.next }
+end
+
+assert 'gc' do
+  assert_nothing_raised do
+    1.times do
+      foo = [1,2,3].to_enum
+      GC.start
+    end
+    GC.start
+  end
+end
+
+assert 'nested iteration' do
+  def (o = Object.new).each
+    yield :ok1
+    yield [:ok2, :x].each.next
+  end
+  e = o.to_enum
+  assert_equal :ok1, e.next
+  assert_equal :ok2, e.next
+  assert_raise(StopIteration) { e.next }
+end
+
+assert 'Kernel#to_enum' do
+  e = nil
+  assert_equal Enumerator, [].to_enum.class
+  assert_nothing_raised { e = [].to_enum(:_not_implemented_) }
+  assert_raise(NoMethodError) { e.first }
+end
+
+assert 'modifying existing methods' do
+  assert_equal Enumerator, loop.class
+  e = 3.times
+  i = 0
+  loop_ret = loop {
+    assert_equal i, e.next
+    i += 1
+  }
+end
+
+assert 'Integral#times' do
+  a = 3
+  b = a.times
+  c = []
+  b.with_object(c) do |i, obj|
+    obj << i
+  end
+  assert_equal 3, a
+  assert_equal Enumerator, b.class
+  assert_equal [0,1,2], c
+end
+
+assert 'Enumerable#each_with_index' do
+  assert_equal [['a',0],['b',1],['c',2]], ['a','b','c'].each_with_index.to_a
+end
+
+assert 'Enumerable#map' do
+  a = [1,2,3]
+  b = a.map
+  c = b.with_index do |i, index|
+    [i*i, index*index]
+  end
+  assert_equal [1,2,3], a
+  assert_equal [[1,0],[4,1],[9,4]], c
+end
+
+assert 'Enumerable#find_all' do
+  assert_equal [[3,4]], [[1,2],[3,4],[5,6]].find_all.each{ |i| i[1] == 4 }
+end
+
+assert 'Array#each_index' do
+  a = [1,2,3]
+  b = a.each_index
+  c = []
+  b.with_index do |index1,index2|
+    c << [index1+2,index2+5]
+  end
+  assert_equal [1,2,3], a
+  assert_equal [[2,5],[3,6],[4,7]], c
+end
+
+assert 'Array#map!' do
+  a = [1,2,3]
+  b = a.map!
+  b.with_index do |i, index|
+    [i*i, index*index]
+  end
+  assert_equal [[1,0],[4,1],[9,4]], a
+end
+
+assert 'Hash#each' do
+  a = {a:1,b:2}
+  b = a.each
+  c = []
+  b.each do |k,v|
+    c << [k,v]
+  end
+  assert_equal [[:a,1], [:b,2]], c.sort
+end
+
+assert 'Hash#each_key' do
+  assert_equal [:a,:b], {a:1,b:2}.each_key.to_a.sort
+end
+
+assert 'Hash#each_value' do
+  assert_equal [1,2], {a:1,b:2}.each_value.to_a.sort
+end
+
+assert 'Hash#select' do
+  h = {1=>2,3=>4,5=>6}
+  hret = h.select.with_index {|a,_b| a[1] == 4}
+  assert_equal({3=>4}, hret)
+  assert_equal({1=>2,3=>4,5=>6}, h)
+end
+
+assert 'Hash#select!' do
+  h = {1=>2,3=>4,5=>6}
+  hret = h.select!.with_index {|a,_b| a[1] == 4}
+  assert_equal h, hret
+  assert_equal({3=>4}, h)
+end
+
+assert 'Hash#reject' do
+  h = {1=>2,3=>4,5=>6}
+  hret = h.reject.with_index {|a,_b| a[1] == 4}
+  assert_equal({1=>2,5=>6}, hret)
+  assert_equal({1=>2,3=>4,5=>6}, h)
+end
+
+assert 'Hash#reject!' do
+  h = {1=>2,3=>4,5=>6}
+  hret = h.reject!.with_index {|a,_b| a[1] == 4}
+  assert_equal h, hret
+  assert_equal({1=>2,5=>6}, h)
+end
+
+assert 'Range#each' do
+  a = (1..5)
+  b = a.each
+  c = []
+  b.each do |i|
+    c << i
+  end
+  assert_equal [1,2,3,4,5], c
+end
+
+assert 'Enumerable#zip' do
+  assert_equal [[1, 10], [2, 11], [3, 12]], [1,2,3].zip(10..Float::INFINITY)
+
+  ret = []
+  assert_equal nil, [1,2,3].zip(10..Float::INFINITY) { |i| ret << i }
+  assert_equal [[1, 10], [2, 11], [3, 12]], ret
+
+  assert_raise(TypeError) { [1].zip(1) }
+end
+
+assert 'Enumerator.produce' do
+  assert_raise(ArgumentError) { Enumerator.produce }
+
+  # Without initial object
+  passed_args = []
+  enum = Enumerator.produce {|obj| passed_args << obj; (obj || 0).succ }
+  assert_equal Enumerator, enum.class 
+  assert_take [1, 2, 3], enum
+  assert_equal [nil, 1, 2], passed_args
+
+  # With initial object
+  passed_args = []
+  enum = Enumerator.produce(1) {|obj| passed_args << obj; obj.succ }
+  assert_take [1, 2, 3], enum
+  assert_equal [1, 2], passed_args
+
+  # Raising StopIteration
+  words = %w[The quick brown fox jumps over the lazy dog]
+  enum = Enumerator.produce { words.shift or raise StopIteration }
+  assert_equal %w[The quick brown fox jumps over the lazy dog], enum.to_a
+
+  # Raising StopIteration
+  object = [[[["abc", "def"], "ghi", "jkl"], "mno", "pqr"], "stuv", "wxyz"]
+  enum = Enumerator.produce(object) {|obj|
+    obj.respond_to?(:first) or raise StopIteration
+    obj.first
+  }
+  assert_nothing_raised {
+    assert_equal [
+      [[[["abc", "def"], "ghi", "jkl"], "mno", "pqr"], "stuv", "wxyz"],
+      [[["abc", "def"], "ghi", "jkl"], "mno", "pqr"],
+      [["abc", "def"], "ghi", "jkl"],
+      ["abc", "def"],
+      "abc",
+    ], enum.to_a
+  }
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-error/mrbgem.rake
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-error/mrbgem.rake	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-error/mrbgem.rake	(revision 439)
@@ -0,0 +1,10 @@
+MRuby::Gem::Specification.new('mruby-error') do |spec|
+  spec.license = 'MIT'
+  spec.author  = 'mruby developers'
+  spec.summary = 'extensional error handling'
+
+  if build.cxx_exception_enabled?
+    @objs << build.compile_as_cxx("#{spec.dir}/src/exception.c", "#{spec.build_dir}/src/exception.cxx")
+    @objs.delete_if { |v| v == objfile("#{spec.build_dir}/src/exception") }
+  end
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-error/src/exception.c
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-error/src/exception.c	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-error/src/exception.c	(revision 439)
@@ -0,0 +1,110 @@
+#include <mruby.h>
+#include <mruby/throw.h>
+#include <mruby/error.h>
+
+MRB_API mrb_value
+mrb_protect(mrb_state *mrb, mrb_func_t body, mrb_value data, mrb_bool *state)
+{
+  struct mrb_jmpbuf *prev_jmp = mrb->jmp;
+  struct mrb_jmpbuf c_jmp;
+  mrb_value result = mrb_nil_value();
+  int ai = mrb_gc_arena_save(mrb);
+
+  if (state) { *state = FALSE; }
+
+  MRB_TRY(&c_jmp) {
+    mrb->jmp = &c_jmp;
+    result = body(mrb, data);
+    mrb->jmp = prev_jmp;
+  } MRB_CATCH(&c_jmp) {
+    mrb->jmp = prev_jmp;
+    result = mrb_obj_value(mrb->exc);
+    mrb->exc = NULL;
+    if (state) { *state = TRUE; }
+  } MRB_END_EXC(&c_jmp);
+
+  mrb_gc_arena_restore(mrb, ai);
+  mrb_gc_protect(mrb, result);
+  return result;
+}
+
+MRB_API mrb_value
+mrb_ensure(mrb_state *mrb, mrb_func_t body, mrb_value b_data, mrb_func_t ensure, mrb_value e_data)
+{
+  struct mrb_jmpbuf *prev_jmp = mrb->jmp;
+  struct mrb_jmpbuf c_jmp;
+  mrb_value result;
+  int ai = mrb_gc_arena_save(mrb);
+
+  MRB_TRY(&c_jmp) {
+    mrb->jmp = &c_jmp;
+    result = body(mrb, b_data);
+    mrb->jmp = prev_jmp;
+  } MRB_CATCH(&c_jmp) {
+    mrb->jmp = prev_jmp;
+    mrb_gc_arena_restore(mrb, ai);
+    ensure(mrb, e_data);
+    MRB_THROW(mrb->jmp); /* rethrow catched exceptions */
+  } MRB_END_EXC(&c_jmp);
+
+  mrb_gc_arena_restore(mrb, ai);
+  mrb_gc_protect(mrb, result);
+  ensure(mrb, e_data);
+  mrb_gc_arena_restore(mrb, ai);
+  mrb_gc_protect(mrb, result);
+  return result;
+}
+
+MRB_API mrb_value
+mrb_rescue(mrb_state *mrb, mrb_func_t body, mrb_value b_data,
+           mrb_func_t rescue, mrb_value r_data)
+{
+  return mrb_rescue_exceptions(mrb, body, b_data, rescue, r_data, 1, &mrb->eStandardError_class);
+}
+
+MRB_API mrb_value
+mrb_rescue_exceptions(mrb_state *mrb, mrb_func_t body, mrb_value b_data, mrb_func_t rescue, mrb_value r_data,
+                      mrb_int len, struct RClass **classes)
+{
+  struct mrb_jmpbuf *prev_jmp = mrb->jmp;
+  struct mrb_jmpbuf c_jmp;
+  mrb_value result;
+  mrb_bool error_matched = FALSE;
+  mrb_int i;
+  int ai = mrb_gc_arena_save(mrb);
+
+  MRB_TRY(&c_jmp) {
+    mrb->jmp = &c_jmp;
+    result = body(mrb, b_data);
+    mrb->jmp = prev_jmp;
+  } MRB_CATCH(&c_jmp) {
+    mrb->jmp = prev_jmp;
+
+    for (i = 0; i < len; ++i) {
+      if (mrb_obj_is_kind_of(mrb, mrb_obj_value(mrb->exc), classes[i])) {
+        error_matched = TRUE;
+        break;
+      }
+    }
+
+    if (!error_matched) { MRB_THROW(mrb->jmp); }
+
+    mrb->exc = NULL;
+    mrb_gc_arena_restore(mrb, ai);
+    result = rescue(mrb, r_data);
+  } MRB_END_EXC(&c_jmp);
+
+  mrb_gc_arena_restore(mrb, ai);
+  mrb_gc_protect(mrb, result);
+  return result;
+}
+
+void
+mrb_mruby_error_gem_init(mrb_state *mrb)
+{
+}
+
+void
+mrb_mruby_error_gem_final(mrb_state *mrb)
+{
+}
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-error/test/exception.c
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-error/test/exception.c	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-error/test/exception.c	(revision 439)
@@ -0,0 +1,59 @@
+#include <mruby.h>
+#include <mruby/error.h>
+#include <mruby/array.h>
+
+static mrb_value
+protect_cb(mrb_state *mrb, mrb_value b)
+{
+  return mrb_yield_argv(mrb, b, 0, NULL);
+}
+
+static mrb_value
+run_protect(mrb_state *mrb, mrb_value self)
+{
+  mrb_value b;
+  mrb_value ret[2];
+  mrb_bool state;
+  mrb_get_args(mrb, "&", &b);
+  ret[0] = mrb_protect(mrb, protect_cb, b, &state);
+  ret[1] = mrb_bool_value(state);
+  return mrb_ary_new_from_values(mrb, 2, ret);
+}
+
+static mrb_value
+run_ensure(mrb_state *mrb, mrb_value self)
+{
+  mrb_value b, e;
+  mrb_get_args(mrb, "oo", &b, &e);
+  return mrb_ensure(mrb, protect_cb, b, protect_cb, e);
+}
+
+static mrb_value
+run_rescue(mrb_state *mrb, mrb_value self)
+{
+  mrb_value b, r;
+  mrb_get_args(mrb, "oo", &b, &r);
+  return mrb_rescue(mrb, protect_cb, b, protect_cb, r);
+}
+
+static mrb_value
+run_rescue_exceptions(mrb_state *mrb, mrb_value self)
+{
+  mrb_value b, r;
+  struct RClass *cls[1];
+  mrb_get_args(mrb, "oo", &b, &r);
+  cls[0] = E_TYPE_ERROR;
+  return mrb_rescue_exceptions(mrb, protect_cb, b, protect_cb, r, 1, cls);
+}
+
+void
+mrb_mruby_error_gem_test(mrb_state *mrb)
+{
+  struct RClass *cls;
+
+  cls = mrb_define_class(mrb, "ExceptionTest", mrb->object_class);
+  mrb_define_module_function(mrb, cls, "mrb_protect", run_protect, MRB_ARGS_NONE() | MRB_ARGS_BLOCK());
+  mrb_define_module_function(mrb, cls, "mrb_ensure", run_ensure, MRB_ARGS_REQ(2));
+  mrb_define_module_function(mrb, cls, "mrb_rescue", run_rescue, MRB_ARGS_REQ(2));
+  mrb_define_module_function(mrb, cls, "mrb_rescue_exceptions", run_rescue_exceptions, MRB_ARGS_REQ(2));
+}
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-error/test/exception.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-error/test/exception.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-error/test/exception.rb	(revision 439)
@@ -0,0 +1,55 @@
+assert 'mrb_protect' do
+  # no failure in protect returns [result, false]
+  assert_equal ['test', false] do
+    ExceptionTest.mrb_protect { 'test' }
+  end
+  # failure in protect returns [exception, true]
+  result = ExceptionTest.mrb_protect { raise 'test' }
+  assert_kind_of RuntimeError, result[0]
+  assert_true result[1]
+end
+
+assert 'mrb_ensure' do
+  a = false
+  assert_equal 'test' do
+    ExceptionTest.mrb_ensure Proc.new { 'test' }, Proc.new { a = true }
+  end
+  assert_true a
+
+  a = false
+  assert_raise RuntimeError do
+    ExceptionTest.mrb_ensure Proc.new { raise 'test' }, Proc.new { a = true }
+  end
+  assert_true a
+end
+
+assert 'mrb_rescue' do
+  assert_equal 'test' do
+    ExceptionTest.mrb_rescue Proc.new { 'test' }, Proc.new {}
+  end
+
+  class CustomExp < Exception
+  end
+
+  assert_raise CustomExp do
+    ExceptionTest.mrb_rescue Proc.new { raise CustomExp.new 'test' }, Proc.new { 'rescue' }
+  end
+
+  assert_equal 'rescue' do
+    ExceptionTest.mrb_rescue Proc.new { raise 'test' }, Proc.new { 'rescue' }
+  end
+end
+
+assert 'mrb_rescue_exceptions' do
+  assert_equal 'test' do
+    ExceptionTest.mrb_rescue_exceptions Proc.new { 'test' }, Proc.new {}
+  end
+
+  assert_raise RangeError do
+    ExceptionTest.mrb_rescue_exceptions Proc.new { raise RangeError.new 'test' }, Proc.new { 'rescue' }
+  end
+
+  assert_equal 'rescue' do
+    ExceptionTest.mrb_rescue_exceptions Proc.new { raise TypeError.new 'test' }, Proc.new { 'rescue' }
+  end
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-eval/mrbgem.rake
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-eval/mrbgem.rake	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-eval/mrbgem.rake	(revision 439)
@@ -0,0 +1,7 @@
+MRuby::Gem::Specification.new('mruby-eval') do |spec|
+  spec.license = 'MIT'
+  spec.author  = 'mruby developers'
+  spec.summary = 'standard Kernel#eval method'
+
+  add_dependency 'mruby-compiler', :core => 'mruby-compiler'
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-eval/src/eval.c
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-eval/src/eval.c	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-eval/src/eval.c	(revision 439)
@@ -0,0 +1,399 @@
+#include <mruby.h>
+#include <mruby/class.h>
+#include <mruby/compile.h>
+#include <mruby/irep.h>
+#include <mruby/proc.h>
+#include <mruby/opcode.h>
+#include <mruby/error.h>
+
+mrb_value mrb_exec_irep(mrb_state *mrb, mrb_value self, struct RProc *p);
+mrb_value mrb_obj_instance_eval(mrb_state *mrb, mrb_value self);
+
+static struct mrb_irep *
+get_closure_irep(mrb_state *mrb, int level)
+{
+  struct RProc *proc = mrb->c->ci[-1].proc;
+
+  while (level--) {
+    if (!proc) return NULL;
+    proc = proc->upper;
+  }
+  if (!proc) return NULL;
+  if (MRB_PROC_CFUNC_P(proc)) {
+    return NULL;
+  }
+  return proc->body.irep;
+}
+
+/* search for irep lev above the bottom */
+static mrb_irep*
+search_irep(mrb_irep *top, int bnest, int lev, mrb_irep *bottom)
+{
+  int i;
+
+  for (i=0; i<top->rlen; i++) {
+    mrb_irep* tmp = top->reps[i];
+
+    if (tmp == bottom) return top;
+    tmp = search_irep(tmp, bnest-1, lev, bottom);
+    if (tmp) {
+      if (bnest == lev) return top;
+      return tmp;
+    }
+  }
+  return NULL;
+}
+
+static uint16_t
+search_variable(mrb_state *mrb, mrb_sym vsym, int bnest)
+{
+  mrb_irep *virep;
+  int level;
+  int pos;
+
+  for (level = 0; (virep = get_closure_irep(mrb, level)); level++) {
+    if (virep->lv == NULL) {
+      continue;
+    }
+    for (pos = 0; pos < virep->nlocals - 1; pos++) {
+      if (vsym == virep->lv[pos].name) {
+        return (pos+1)<<8 | (level+bnest);
+      }
+    }
+  }
+
+  return 0;
+}
+
+static int
+irep_argc(mrb_irep *irep)
+{
+  mrb_code c;
+
+  c = irep->iseq[0];
+  if (c == OP_ENTER) {
+    mrb_aspec ax = PEEK_W(irep->iseq+1);
+    /* extra 1 means a slot for block */
+    return MRB_ASPEC_REQ(ax)+MRB_ASPEC_OPT(ax)+MRB_ASPEC_REST(ax)+MRB_ASPEC_POST(ax)+1;
+  }
+  return 0;
+}
+
+static mrb_bool
+potential_upvar_p(struct mrb_locals *lv, uint16_t v, int argc, uint16_t nlocals)
+{
+  if (v >= nlocals) return FALSE;
+  /* skip arguments  */
+  if (v < argc+1) return FALSE;
+  return TRUE;
+}
+
+extern uint8_t mrb_insn_size[];
+extern uint8_t mrb_insn_size1[];
+extern uint8_t mrb_insn_size2[];
+extern uint8_t mrb_insn_size3[];
+
+static void
+patch_irep(mrb_state *mrb, mrb_irep *irep, int bnest, mrb_irep *top)
+{
+  int i;
+  uint32_t a;
+  uint16_t b;
+  uint8_t c;
+  mrb_code insn;
+  int argc = irep_argc(irep);
+  mrb_code *iseq = (mrb_code *)irep->iseq;
+
+  mrb_assert((irep->flags & MRB_ISEQ_NO_FREE) == 0);
+
+  for (i = 0; i < irep->ilen; ) {
+    insn = iseq[i];
+    switch(insn){
+    case OP_EPUSH:
+      a = PEEK_B(iseq+i+1);
+      patch_irep(mrb, irep->reps[a], bnest + 1, top);
+      break;
+
+    case OP_LAMBDA:
+    case OP_BLOCK:
+      a = PEEK_B(iseq+i+1);
+      b = PEEK_B(iseq+i+2);
+      patch_irep(mrb, irep->reps[b], bnest + 1, top);
+      break;
+
+    case OP_SEND:
+      b = PEEK_B(iseq+i+2);
+      c = PEEK_B(iseq+i+3);
+      if (c != 0) {
+        break;
+      }
+      else {
+        uint16_t arg = search_variable(mrb, irep->syms[b], bnest);
+        if (arg != 0) {
+          /* must replace */
+          iseq[i] = OP_GETUPVAR;
+          iseq[i+2] = arg >> 8;
+          iseq[i+3] = arg & 0xff;
+        }
+      }
+      break;
+
+    case OP_MOVE:
+      a = PEEK_B(iseq+i+1);
+      b = PEEK_B(iseq+i+2);
+      /* src part */
+      if (potential_upvar_p(irep->lv, b, argc, irep->nlocals)) {
+        uint16_t arg = search_variable(mrb, irep->lv[b - 1].name, bnest);
+        if (arg != 0) {
+          /* must replace */
+          iseq[i] = insn = OP_GETUPVAR;
+          iseq[i+2] = arg >> 8;
+          iseq[i+3] = arg & 0xff;
+        }
+      }
+      /* dst part */
+      if (potential_upvar_p(irep->lv, a, argc, irep->nlocals)) {
+        uint16_t arg = search_variable(mrb, irep->lv[a - 1].name, bnest);
+        if (arg != 0) {
+          /* must replace */
+          iseq[i] = insn = OP_SETUPVAR;
+          iseq[i+1] = (mrb_code)b;
+          iseq[i+2] = arg >> 8;
+          iseq[i+3] = arg & 0xff;
+        }
+      }
+      break;
+
+    case OP_GETUPVAR:
+      a = PEEK_B(iseq+i+1);
+      b = PEEK_B(iseq+i+2);
+      c = PEEK_B(iseq+i+3);
+      {
+        int lev = c+1;
+        mrb_irep *tmp = search_irep(top, bnest, lev, irep);
+        if (potential_upvar_p(tmp->lv, b, irep_argc(tmp), tmp->nlocals)) {
+          uint16_t arg = search_variable(mrb, tmp->lv[b-1].name, bnest);
+          if (arg != 0) {
+            /* must replace */
+            iseq[i] = OP_GETUPVAR;
+            iseq[i+2] = arg >> 8;
+            iseq[i+3] = arg & 0xff;
+          }
+        }
+      }
+      break;
+
+    case OP_SETUPVAR:
+      a = PEEK_B(iseq+i+1);
+      b = PEEK_B(iseq+i+2);
+      c = PEEK_B(iseq+i+3);
+      {
+        int lev = c+1;
+        mrb_irep *tmp = search_irep(top, bnest, lev, irep);
+        if (potential_upvar_p(tmp->lv, b, irep_argc(tmp), tmp->nlocals)) {
+          uint16_t arg = search_variable(mrb, tmp->lv[b-1].name, bnest);
+          if (arg != 0) {
+            /* must replace */
+            iseq[i] = OP_SETUPVAR;
+            iseq[i+1] = a;
+            iseq[i+2] = arg >> 8;
+            iseq[i+3] = arg & 0xff;
+          }
+        }
+      }
+      break;
+
+    case OP_EXT1:
+      insn = PEEK_B(iseq+i+1);
+      i += mrb_insn_size1[insn]+1;
+      continue;
+    case OP_EXT2:
+      insn = PEEK_B(iseq+i+1);
+      i += mrb_insn_size2[insn]+1;
+      continue;
+    case OP_EXT3:
+      insn = PEEK_B(iseq+i+1);
+      i += mrb_insn_size3[insn]+1;
+      continue;
+    }
+    i+=mrb_insn_size[insn];
+  }
+}
+
+void mrb_codedump_all(mrb_state*, struct RProc*);
+
+static struct RProc*
+create_proc_from_string(mrb_state *mrb, char *s, mrb_int len, mrb_value binding, const char *file, mrb_int line)
+{
+  mrbc_context *cxt;
+  struct mrb_parser_state *p;
+  struct RProc *proc;
+  struct REnv *e;
+  mrb_callinfo *ci; /* callinfo of eval caller */
+  struct RClass *target_class = NULL;
+  int bidx;
+
+  if (!mrb_nil_p(binding)) {
+    mrb_raise(mrb, E_ARGUMENT_ERROR, "Binding of eval must be nil.");
+  }
+
+  cxt = mrbc_context_new(mrb);
+  cxt->lineno = (uint16_t)line;
+
+  mrbc_filename(mrb, cxt, file ? file : "(eval)");
+  cxt->capture_errors = TRUE;
+  cxt->no_optimize = TRUE;
+  cxt->on_eval = TRUE;
+
+  p = mrb_parse_nstring(mrb, s, len, cxt);
+
+  /* only occur when memory ran out */
+  if (!p) {
+    mrb_raise(mrb, E_RUNTIME_ERROR, "Failed to create parser state.");
+  }
+
+  if (0 < p->nerr) {
+    /* parse error */
+    mrb_value str;
+
+    if (file) {
+      str = mrb_format(mrb, "file %s line %d: %s",
+                       file,
+                       p->error_buffer[0].lineno,
+                       p->error_buffer[0].message);
+    }
+    else {
+      str = mrb_format(mrb, "line %d: %s",
+                       p->error_buffer[0].lineno,
+                       p->error_buffer[0].message);
+    }
+    mrb_parser_free(p);
+    mrbc_context_free(mrb, cxt);
+    mrb_exc_raise(mrb, mrb_exc_new_str(mrb, E_SYNTAX_ERROR, str));
+  }
+
+  proc = mrb_generate_code(mrb, p);
+  if (proc == NULL) {
+    /* codegen error */
+    mrb_parser_free(p);
+    mrbc_context_free(mrb, cxt);
+    mrb_raise(mrb, E_SCRIPT_ERROR, "codegen error");
+  }
+  if (mrb->c->ci > mrb->c->cibase) {
+    ci = &mrb->c->ci[-1];
+  }
+  else {
+    ci = mrb->c->cibase;
+  }
+  if (ci->proc) {
+    target_class = MRB_PROC_TARGET_CLASS(ci->proc);
+  }
+  if (ci->proc && !MRB_PROC_CFUNC_P(ci->proc)) {
+    if (ci->env) {
+      e = ci->env;
+    }
+    else {
+      e = (struct REnv*)mrb_obj_alloc(mrb, MRB_TT_ENV,
+                                      (struct RClass*)target_class);
+      e->mid = ci->mid;
+      e->stack = ci[1].stackent;
+      e->cxt = mrb->c;
+      MRB_ENV_SET_STACK_LEN(e, ci->proc->body.irep->nlocals);
+      bidx = ci->argc;
+      if (ci->argc < 0) bidx = 2;
+      else bidx += 1;
+      MRB_ENV_SET_BIDX(e, bidx);
+      ci->env = e;
+    }
+    proc->e.env = e;
+    proc->flags |= MRB_PROC_ENVSET;
+    mrb_field_write_barrier(mrb, (struct RBasic*)proc, (struct RBasic*)e);
+  }
+  proc->upper = ci->proc;
+  mrb->c->ci->target_class = target_class;
+  patch_irep(mrb, proc->body.irep, 0, proc->body.irep);
+  /* mrb_codedump_all(mrb, proc); */
+
+  mrb_parser_free(p);
+  mrbc_context_free(mrb, cxt);
+
+  return proc;
+}
+
+static mrb_value
+exec_irep(mrb_state *mrb, mrb_value self, struct RProc *proc)
+{
+  /* no argument passed from eval() */
+  mrb->c->ci->argc = 0;
+  if (mrb->c->ci->acc < 0) {
+    ptrdiff_t cioff = mrb->c->ci - mrb->c->cibase;
+    mrb_value ret = mrb_top_run(mrb, proc, self, 0);
+    if (mrb->exc) {
+      mrb_exc_raise(mrb, mrb_obj_value(mrb->exc));
+    }
+    mrb->c->ci = mrb->c->cibase + cioff;
+    return ret;
+  }
+  /* clear block */
+  mrb->c->stack[1] = mrb_nil_value();
+  return mrb_exec_irep(mrb, self, proc);
+}
+
+static mrb_value
+f_eval(mrb_state *mrb, mrb_value self)
+{
+  char *s;
+  mrb_int len;
+  mrb_value binding = mrb_nil_value();
+  char *file = NULL;
+  mrb_int line = 1;
+  struct RProc *proc;
+
+  mrb_get_args(mrb, "s|ozi", &s, &len, &binding, &file, &line);
+
+  proc = create_proc_from_string(mrb, s, len, binding, file, line);
+  mrb_assert(!MRB_PROC_CFUNC_P(proc));
+  return exec_irep(mrb, self, proc);
+}
+
+static mrb_value
+f_instance_eval(mrb_state *mrb, mrb_value self)
+{
+  mrb_value b;
+  mrb_int argc; mrb_value *argv;
+
+  mrb_get_args(mrb, "*!&", &argv, &argc, &b);
+
+  if (mrb_nil_p(b)) {
+    char *s;
+    mrb_int len;
+    char *file = NULL;
+    mrb_int line = 1;
+    mrb_value cv;
+    struct RProc *proc;
+
+    mrb_get_args(mrb, "s|zi", &s, &len, &file, &line);
+    cv = mrb_singleton_class(mrb, self);
+    proc = create_proc_from_string(mrb, s, len, mrb_nil_value(), file, line);
+    MRB_PROC_SET_TARGET_CLASS(proc, mrb_class_ptr(cv));
+    mrb_assert(!MRB_PROC_CFUNC_P(proc));
+    mrb->c->ci->target_class = mrb_class_ptr(cv);
+    return exec_irep(mrb, self, proc);
+  }
+  else {
+    mrb_get_args(mrb, "&", &b);
+    return mrb_obj_instance_eval(mrb, self);
+  }
+}
+
+void
+mrb_mruby_eval_gem_init(mrb_state* mrb)
+{
+  mrb_define_module_function(mrb, mrb->kernel_module, "eval", f_eval, MRB_ARGS_ARG(1, 3));
+  mrb_define_method(mrb, mrb_class_get(mrb, "BasicObject"), "instance_eval", f_instance_eval, MRB_ARGS_OPT(3)|MRB_ARGS_BLOCK());
+}
+
+void
+mrb_mruby_eval_gem_final(mrb_state* mrb)
+{
+}
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-eval/test/eval.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-eval/test/eval.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-eval/test/eval.rb	(revision 439)
@@ -0,0 +1,132 @@
+assert('Kernel.eval', '15.3.1.2.3') do
+  assert_equal(10) { Kernel.eval '1 * 10' }
+  assert_equal('aaa') { Kernel.eval "'a' * 3" }
+  assert_equal(10) {
+    a = 10
+    Kernel.eval "a"
+  }
+  assert_equal(20) {
+    a = 10
+    Kernel.eval "a = 20"
+    a
+  }
+  assert_equal(15) {
+    c = 5
+    lambda {
+      a = 10
+      Kernel.eval "c = a + c"
+    }.call
+    c
+  }
+  assert_equal(5) {
+    c = 5
+    lambda {
+      Kernel.eval 'lambda { c }.call'
+    }.call
+  }
+  assert_equal(15) {
+    c = 5
+    lambda {
+      a = 10
+      Kernel.eval 'lambda { c = a + c }.call'
+    }.call
+    c
+  }
+  assert_equal(2) {
+    a = 10
+    Kernel.eval 'def f(a); b=a+1; end'
+    f(1)
+  }
+end
+
+assert('Kernel#eval', '15.3.1.3.12') do
+  assert_equal(10) { eval '1 * 10' }
+end
+
+assert('rest arguments of eval') do
+  assert_raise(ArgumentError) { Kernel.eval('0', 0, 'test', 0) }
+  assert_equal ['test', 'test.rb', 10] do
+    Kernel.eval('[\'test\', __FILE__, __LINE__]', nil, 'test.rb', 10)
+  end
+end
+
+assert 'eval syntax error' do
+  assert_raise(SyntaxError) do
+    eval 'p "test'
+  end
+end
+
+assert('String instance_eval') do
+  obj = Object.new
+  obj.instance_eval{ @test = 'test' }
+  assert_raise(ArgumentError) { obj.instance_eval(0) { } }
+  assert_raise(ArgumentError) { obj.instance_eval('0', 'test', 0, 'test') }
+  assert_equal(['test.rb', 10]) { obj.instance_eval('[__FILE__, __LINE__]', 'test.rb', 10)}
+  assert_equal('test') { obj.instance_eval('@test') }
+  assert_equal('test') { obj.instance_eval { @test } }
+  o = Object.new
+  assert_equal ['', o, o], o.instance_eval("[''].each { |s| break [s, o, self] }")
+end
+
+assert('Kernel.#eval(string) context') do
+  class TestEvalConstScope
+    EVAL_CONST_CLASS = 'class'
+    def const_string
+      eval 'EVAL_CONST_CLASS'
+    end
+  end
+  obj = TestEvalConstScope.new
+  assert_raise(NameError) { eval 'EVAL_CONST_CLASS' }
+  assert_equal('class') { obj.const_string }
+end
+
+assert('BasicObject#instance_eval with begin-rescue-ensure execution order') do
+  class HellRaiser
+    def raise_hell
+      order = [:enter_raise_hell]
+      begin
+        order.push :begin
+        self.instance_eval("raise 'error'")
+      rescue
+        order.push :rescue
+      ensure
+        order.push :ensure
+      end
+      order
+    end
+  end
+
+  hell_raiser = HellRaiser.new
+  assert_equal([:enter_raise_hell, :begin, :rescue, :ensure], hell_raiser.raise_hell)
+end
+
+assert('BasicObject#instance_eval to define singleton methods Issue #3141') do
+  foo_class = Class.new do
+    def bar(x)
+      instance_eval "def baz; #{x}; end"
+    end
+  end
+
+  f1 = foo_class.new
+  f2 = foo_class.new
+  f1.bar 1
+  f2.bar 2
+  assert_equal(1){f1.baz}
+  assert_equal(2){f2.baz}
+end
+
+assert('Kernel.#eval(string) Issue #4021') do
+  assert_equal('FOO') { (eval <<'EOS').call }
+foo = "FOO"
+Proc.new { foo }
+EOS
+  assert_equal('FOO') {
+    def do_eval(code)
+      eval(code)
+    end
+    do_eval(<<'EOS').call
+foo = "FOO"
+Proc.new { foo }
+EOS
+  }
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-exit/mrbgem.rake
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-exit/mrbgem.rake	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-exit/mrbgem.rake	(revision 439)
@@ -0,0 +1,5 @@
+MRuby::Gem::Specification.new('mruby-exit') do |spec|
+  spec.license = 'MIT'
+  spec.author  = 'mruby developers'
+  spec.summary = 'Kernel#exit method'
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-exit/src/mruby-exit.c
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-exit/src/mruby-exit.c	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-exit/src/mruby-exit.c	(revision 439)
@@ -0,0 +1,29 @@
+#include <stdlib.h>
+#include <mruby.h>
+
+static mrb_value
+f_exit(mrb_state *mrb, mrb_value self)
+{
+  mrb_value status = mrb_true_value();
+  int istatus;
+
+  mrb_get_args(mrb, "|o", &status);
+  istatus = mrb_true_p(status) ? EXIT_SUCCESS :
+            mrb_false_p(status) ? EXIT_FAILURE :
+            (int)mrb_int(mrb, status);
+  exit(istatus);
+
+  /* not reached */
+  return status;
+}
+
+void
+mrb_mruby_exit_gem_init(mrb_state* mrb)
+{
+  mrb_define_method(mrb, mrb->kernel_module, "exit", f_exit, MRB_ARGS_OPT(1));
+}
+
+void
+mrb_mruby_exit_gem_final(mrb_state* mrb)
+{
+}
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-fiber/mrbgem.rake
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-fiber/mrbgem.rake	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-fiber/mrbgem.rake	(revision 439)
@@ -0,0 +1,5 @@
+MRuby::Gem::Specification.new('mruby-fiber') do |spec|
+  spec.license = 'MIT'
+  spec.author  = 'mruby developers'
+  spec.summary = 'Fiber class'
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-fiber/src/fiber.c
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-fiber/src/fiber.c	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-fiber/src/fiber.c	(revision 439)
@@ -0,0 +1,427 @@
+#include <mruby.h>
+#include <mruby/array.h>
+#include <mruby/class.h>
+#include <mruby/proc.h>
+
+#define fiber_ptr(o) ((struct RFiber*)mrb_ptr(o))
+
+#define FIBER_STACK_INIT_SIZE 64
+#define FIBER_CI_INIT_SIZE 8
+#define CI_ACC_RESUMED -3
+
+/*
+ *  call-seq:
+ *     Fiber.new{...} -> obj
+ *
+ *  Creates a fiber, whose execution is suspend until it is explicitly
+ *  resumed using <code>Fiber#resume</code> method.
+ *  The code running inside the fiber can give up control by calling
+ *  <code>Fiber.yield</code> in which case it yields control back to caller
+ *  (the caller of the <code>Fiber#resume</code>).
+ *
+ *  Upon yielding or termination the Fiber returns the value of the last
+ *  executed expression
+ *
+ *  For instance:
+ *
+ *    fiber = Fiber.new do
+ *      Fiber.yield 1
+ *      2
+ *    end
+ *
+ *    puts fiber.resume
+ *    puts fiber.resume
+ *    puts fiber.resume
+ *
+ *  <em>produces</em>
+ *
+ *    1
+ *    2
+ *    resuming dead fiber (FiberError)
+ *
+ *  The <code>Fiber#resume</code> method accepts an arbitrary number of
+ *  parameters, if it is the first call to <code>resume</code> then they
+ *  will be passed as block arguments. Otherwise they will be the return
+ *  value of the call to <code>Fiber.yield</code>
+ *
+ *  Example:
+ *
+ *    fiber = Fiber.new do |first|
+ *      second = Fiber.yield first + 2
+ *    end
+ *
+ *    puts fiber.resume 10
+ *    puts fiber.resume 14
+ *    puts fiber.resume 18
+ *
+ *  <em>produces</em>
+ *
+ *    12
+ *    14
+ *    resuming dead fiber (FiberError)
+ *
+ */
+static mrb_value
+fiber_init(mrb_state *mrb, mrb_value self)
+{
+  static const struct mrb_context mrb_context_zero = { 0 };
+  struct RFiber *f = fiber_ptr(self);
+  struct mrb_context *c;
+  struct RProc *p;
+  mrb_callinfo *ci;
+  mrb_value blk;
+  size_t slen;
+
+  mrb_get_args(mrb, "&!", &blk);
+
+  if (f->cxt) {
+    mrb_raise(mrb, E_RUNTIME_ERROR, "cannot initialize twice");
+  }
+  p = mrb_proc_ptr(blk);
+  if (MRB_PROC_CFUNC_P(p)) {
+    mrb_raise(mrb, E_FIBER_ERROR, "tried to create Fiber from C defined method");
+  }
+
+  c = (struct mrb_context*)mrb_malloc(mrb, sizeof(struct mrb_context));
+  *c = mrb_context_zero;
+  f->cxt = c;
+
+  /* initialize VM stack */
+  slen = FIBER_STACK_INIT_SIZE;
+  if (p->body.irep->nregs > slen) {
+    slen += p->body.irep->nregs;
+  }
+  c->stbase = (mrb_value *)mrb_malloc(mrb, slen*sizeof(mrb_value));
+  c->stend = c->stbase + slen;
+  c->stack = c->stbase;
+
+#ifdef MRB_NAN_BOXING
+  {
+    mrb_value *p = c->stbase;
+    mrb_value *pend = c->stend;
+
+    while (p < pend) {
+      SET_NIL_VALUE(*p);
+      p++;
+    }
+  }
+#else
+  memset(c->stbase, 0, slen * sizeof(mrb_value));
+#endif
+
+  /* copy receiver from a block */
+  c->stack[0] = mrb->c->stack[0];
+
+  /* initialize callinfo stack */
+  c->cibase = (mrb_callinfo *)mrb_calloc(mrb, FIBER_CI_INIT_SIZE, sizeof(mrb_callinfo));
+  c->ciend = c->cibase + FIBER_CI_INIT_SIZE;
+  c->ci = c->cibase;
+  c->ci->stackent = c->stack;
+
+  /* adjust return callinfo */
+  ci = c->ci;
+  ci->target_class = MRB_PROC_TARGET_CLASS(p);
+  ci->proc = p;
+  mrb_field_write_barrier(mrb, (struct RBasic*)mrb_obj_ptr(self), (struct RBasic*)p);
+  ci->pc = p->body.irep->iseq;
+  ci[1] = ci[0];
+  c->ci++;                      /* push dummy callinfo */
+
+  c->fib = f;
+  c->status = MRB_FIBER_CREATED;
+
+  return self;
+}
+
+static struct mrb_context*
+fiber_check(mrb_state *mrb, mrb_value fib)
+{
+  struct RFiber *f = fiber_ptr(fib);
+
+  mrb_assert(f->tt == MRB_TT_FIBER);
+  if (!f->cxt) {
+    mrb_raise(mrb, E_FIBER_ERROR, "uninitialized Fiber");
+  }
+  return f->cxt;
+}
+
+static mrb_value
+fiber_result(mrb_state *mrb, const mrb_value *a, mrb_int len)
+{
+  if (len == 0) return mrb_nil_value();
+  if (len == 1) return a[0];
+  return mrb_ary_new_from_values(mrb, len, a);
+}
+
+/* mark return from context modifying method */
+#define MARK_CONTEXT_MODIFY(c) (c)->ci->target_class = NULL
+
+static void
+fiber_check_cfunc(mrb_state *mrb, struct mrb_context *c)
+{
+  mrb_callinfo *ci;
+
+  for (ci = c->ci; ci >= c->cibase; ci--) {
+    if (ci->acc < 0) {
+      mrb_raise(mrb, E_FIBER_ERROR, "can't cross C function boundary");
+    }
+  }
+}
+
+static void
+fiber_switch_context(mrb_state *mrb, struct mrb_context *c)
+{
+  if (mrb->c->fib) {
+    mrb_write_barrier(mrb, (struct RBasic*)mrb->c->fib);
+  }
+  c->status = MRB_FIBER_RUNNING;
+  mrb->c = c;
+}
+
+static mrb_value
+fiber_switch(mrb_state *mrb, mrb_value self, mrb_int len, const mrb_value *a, mrb_bool resume, mrb_bool vmexec)
+{
+  struct mrb_context *c = fiber_check(mrb, self);
+  struct mrb_context *old_c = mrb->c;
+  enum mrb_fiber_state status;
+  mrb_value value;
+
+  fiber_check_cfunc(mrb, c);
+  status = c->status;
+  switch (status) {
+  case MRB_FIBER_TRANSFERRED:
+    if (resume) {
+      mrb_raise(mrb, E_FIBER_ERROR, "resuming transferred fiber");
+    }
+    break;
+  case MRB_FIBER_RUNNING:
+  case MRB_FIBER_RESUMED:
+    mrb_raise(mrb, E_FIBER_ERROR, "double resume");
+    break;
+  case MRB_FIBER_TERMINATED:
+    mrb_raise(mrb, E_FIBER_ERROR, "resuming dead fiber");
+    break;
+  default:
+    break;
+  }
+  old_c->status = resume ? MRB_FIBER_RESUMED : MRB_FIBER_TRANSFERRED;
+  c->prev = resume ? mrb->c : (c->prev ? c->prev : mrb->root_c);
+  fiber_switch_context(mrb, c);
+  if (status == MRB_FIBER_CREATED) {
+    mrb_value *b, *e;
+
+    if (!c->ci->proc) {
+      mrb_raise(mrb, E_FIBER_ERROR, "double resume (current)");
+    }
+    mrb_stack_extend(mrb, len+2); /* for receiver and (optional) block */
+    b = c->stack+1;
+    e = b + len;
+    while (b<e) {
+      *b++ = *a++;
+    }
+    c->cibase->argc = (int)len;
+    value = c->stack[0] = MRB_PROC_ENV(c->ci->proc)->stack[0];
+  }
+  else {
+    value = fiber_result(mrb, a, len);
+  }
+
+  if (vmexec) {
+    c->vmexec = TRUE;
+    value = mrb_vm_exec(mrb, c->ci[-1].proc, c->ci->pc);
+    mrb->c = old_c;
+  }
+  else {
+    MARK_CONTEXT_MODIFY(c);
+  }
+  return value;
+}
+
+/*
+ *  call-seq:
+ *     fiber.resume(args, ...) -> obj
+ *
+ *  Resumes the fiber from the point at which the last <code>Fiber.yield</code>
+ *  was called, or starts running it if it is the first call to
+ *  <code>resume</code>. Arguments passed to resume will be the value of
+ *  the <code>Fiber.yield</code> expression or will be passed as block
+ *  parameters to the fiber's block if this is the first <code>resume</code>.
+ *
+ *  Alternatively, when resume is called it evaluates to the arguments passed
+ *  to the next <code>Fiber.yield</code> statement inside the fiber's block
+ *  or to the block value if it runs to completion without any
+ *  <code>Fiber.yield</code>
+ */
+static mrb_value
+fiber_resume(mrb_state *mrb, mrb_value self)
+{
+  mrb_value *a;
+  mrb_int len;
+  mrb_bool vmexec = FALSE;
+
+  mrb_get_args(mrb, "*!", &a, &len);
+  if (mrb->c->ci->acc < 0) {
+    vmexec = TRUE;
+  }
+  return fiber_switch(mrb, self, len, a, TRUE, vmexec);
+}
+
+/* resume thread with given arguments */
+MRB_API mrb_value
+mrb_fiber_resume(mrb_state *mrb, mrb_value fib, mrb_int len, const mrb_value *a)
+{
+  return fiber_switch(mrb, fib, len, a, TRUE, TRUE);
+}
+
+/*
+ *  call-seq:
+ *     fiber.alive? -> true or false
+ *
+ *  Returns true if the fiber can still be resumed. After finishing
+ *  execution of the fiber block this method will always return false.
+ */
+MRB_API mrb_value
+mrb_fiber_alive_p(mrb_state *mrb, mrb_value self)
+{
+  struct mrb_context *c = fiber_check(mrb, self);
+  return mrb_bool_value(c->status != MRB_FIBER_TERMINATED);
+}
+#define fiber_alive_p mrb_fiber_alive_p
+
+static mrb_value
+fiber_eq(mrb_state *mrb, mrb_value self)
+{
+  mrb_value other;
+  mrb_get_args(mrb, "o", &other);
+
+  if (!mrb_fiber_p(other)) {
+    return mrb_false_value();
+  }
+  return mrb_bool_value(fiber_ptr(self) == fiber_ptr(other));
+}
+
+/*
+ *  call-seq:
+ *     fiber.transfer(args, ...) -> obj
+ *
+ *  Transfers control to receiver fiber of the method call.
+ *  Unlike <code>resume</code> the receiver wouldn't be pushed to call
+ * stack of fibers. Instead it will switch to the call stack of
+ * transferring fiber.
+ *  When resuming a fiber that was transferred to another fiber it would
+ * cause double resume error. Though when the fiber is re-transferred
+ * and <code>Fiber.yield</code> is called, the fiber would be resumable.
+ */
+static mrb_value
+fiber_transfer(mrb_state *mrb, mrb_value self)
+{
+  struct mrb_context *c = fiber_check(mrb, self);
+  mrb_value* a;
+  mrb_int len;
+
+  fiber_check_cfunc(mrb, mrb->c);
+  mrb_get_args(mrb, "*!", &a, &len);
+
+  if (c == mrb->root_c) {
+    mrb->c->status = MRB_FIBER_TRANSFERRED;
+    fiber_switch_context(mrb, c);
+    MARK_CONTEXT_MODIFY(c);
+    return fiber_result(mrb, a, len);
+  }
+
+  if (c == mrb->c) {
+    return fiber_result(mrb, a, len);
+  }
+
+  return fiber_switch(mrb, self, len, a, FALSE, FALSE);
+}
+
+/* yield values to the caller fiber */
+/* mrb_fiber_yield() must be called as `return mrb_fiber_yield(...)` */
+MRB_API mrb_value
+mrb_fiber_yield(mrb_state *mrb, mrb_int len, const mrb_value *a)
+{
+  struct mrb_context *c = mrb->c;
+
+  if (!c->prev) {
+    mrb_raise(mrb, E_FIBER_ERROR, "can't yield from root fiber");
+  }
+
+  fiber_check_cfunc(mrb, c);
+  c->prev->status = MRB_FIBER_RUNNING;
+  c->status = MRB_FIBER_SUSPENDED;
+  fiber_switch_context(mrb, c->prev);
+  c->prev = NULL;
+  if (c->vmexec) {
+    c->vmexec = FALSE;
+    mrb->c->ci->acc = CI_ACC_RESUMED;
+  }
+  MARK_CONTEXT_MODIFY(mrb->c);
+  return fiber_result(mrb, a, len);
+}
+
+/*
+ *  call-seq:
+ *     Fiber.yield(args, ...) -> obj
+ *
+ *  Yields control back to the context that resumed the fiber, passing
+ *  along any arguments that were passed to it. The fiber will resume
+ *  processing at this point when <code>resume</code> is called next.
+ *  Any arguments passed to the next <code>resume</code> will be the
+ *
+ *  mruby limitation: Fiber resume/yield cannot cross C function boundary.
+ *  thus you cannot yield from #initialize which is called by mrb_funcall().
+ */
+static mrb_value
+fiber_yield(mrb_state *mrb, mrb_value self)
+{
+  mrb_value *a;
+  mrb_int len;
+
+  mrb_get_args(mrb, "*!", &a, &len);
+  return mrb_fiber_yield(mrb, len, a);
+}
+
+/*
+ *  call-seq:
+ *     Fiber.current() -> fiber
+ *
+ *  Returns the current fiber. If you are not running in the context of
+ *  a fiber this method will return the root fiber.
+ */
+static mrb_value
+fiber_current(mrb_state *mrb, mrb_value self)
+{
+  if (!mrb->c->fib) {
+    struct RFiber *f = (struct RFiber*)mrb_obj_alloc(mrb, MRB_TT_FIBER, mrb_class_ptr(self));
+
+    f->cxt = mrb->c;
+    mrb->c->fib = f;
+  }
+  return mrb_obj_value(mrb->c->fib);
+}
+
+void
+mrb_mruby_fiber_gem_init(mrb_state* mrb)
+{
+  struct RClass *c;
+
+  c = mrb_define_class(mrb, "Fiber", mrb->object_class);
+  MRB_SET_INSTANCE_TT(c, MRB_TT_FIBER);
+
+  mrb_define_method(mrb, c, "initialize", fiber_init,    MRB_ARGS_NONE()|MRB_ARGS_BLOCK());
+  mrb_define_method(mrb, c, "resume",     fiber_resume,  MRB_ARGS_ANY());
+  mrb_define_method(mrb, c, "transfer",   fiber_transfer, MRB_ARGS_ANY());
+  mrb_define_method(mrb, c, "alive?",     fiber_alive_p, MRB_ARGS_NONE());
+  mrb_define_method(mrb, c, "==",         fiber_eq,      MRB_ARGS_REQ(1));
+
+  mrb_define_class_method(mrb, c, "yield", fiber_yield, MRB_ARGS_ANY());
+  mrb_define_class_method(mrb, c, "current", fiber_current, MRB_ARGS_NONE());
+
+  mrb_define_class(mrb, "FiberError", mrb->eStandardError_class);
+}
+
+void
+mrb_mruby_fiber_gem_final(mrb_state* mrb)
+{
+}
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-fiber/test/fiber.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-fiber/test/fiber.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-fiber/test/fiber.rb	(revision 439)
@@ -0,0 +1,208 @@
+assert('Fiber.new') do
+  f = Fiber.new{}
+  assert_kind_of Fiber, f
+end
+
+assert('Fiber#resume') do
+  f = Fiber.new{|x| x }
+  assert_equal 2, f.resume(2)
+end
+
+assert('Fiber#transfer') do
+  f2 = nil
+  f1 = Fiber.new do |v|
+    Fiber.yield v
+    f2.transfer
+  end
+  f2 = Fiber.new do
+    f1.transfer(1)
+    f1.transfer(1)
+    Fiber.yield 2
+  end
+  assert_equal 1, f2.resume
+  assert_raise(FiberError) { f2.resume }
+  assert_equal 2, f2.transfer
+  assert_raise(FiberError) { f1.resume }
+  f1.transfer
+  f2.resume
+  assert_false f1.alive?
+  assert_false f2.alive?
+end
+
+assert('Fiber#alive?') do
+  f = Fiber.new{ Fiber.yield }
+  f.resume
+  assert_true f.alive?
+  f.resume
+  assert_false f.alive?
+end
+
+assert('Fiber#==') do
+  root = Fiber.current
+  assert_equal root, root
+  assert_equal root, Fiber.current
+  assert_false root != Fiber.current
+  f = Fiber.new {
+    assert_false root == Fiber.current
+  }
+  f.resume
+  assert_false f == root
+  assert_true f != root
+end
+
+assert('Fiber.yield') do
+  f = Fiber.new{|x| Fiber.yield x }
+  assert_equal 3, f.resume(3)
+  assert_true f.alive?
+end
+
+assert('FiberError') do
+  assert_equal StandardError, FiberError.superclass
+end
+
+assert('Fiber iteration') do
+  f1 = Fiber.new{
+    [1,2,3].each{|x| Fiber.yield(x)}
+  }
+  f2 = Fiber.new{
+    [9,8,7].each{|x| Fiber.yield(x)}
+  }
+  a = []
+  3.times {
+    a << f1.resume
+    a << f2.resume
+  }
+  assert_equal [1,9,2,8,3,7], a
+end
+
+assert('Fiber with splat in the block argument list') {
+  assert_equal([1], Fiber.new{|*x|x}.resume(1))
+}
+
+assert('Fiber raises on resume when dead') do
+  assert_raise(FiberError) do
+    f = Fiber.new{}
+    f.resume
+    assert_false f.alive?
+    f.resume
+  end
+end
+
+assert('Yield raises when called on root fiber') do
+  assert_raise(FiberError) { Fiber.yield }
+end
+
+assert('Double resume of Fiber') do
+  f1 = Fiber.new {}
+  f2 = Fiber.new {
+    f1.resume
+    assert_raise(FiberError) { f2.resume }
+    Fiber.yield 0
+  }
+  assert_equal 0, f2.resume
+  f2.resume
+  assert_false f1.alive?
+  assert_false f2.alive?
+end
+
+assert('Recursive resume of Fiber') do
+  f1, f2 = nil, nil
+  f1 = Fiber.new { assert_raise(FiberError) { f2.resume } }
+  f2 = Fiber.new {
+    f1.resume
+    Fiber.yield 0
+  }
+  f3 = Fiber.new {
+    f2.resume
+  }
+  assert_equal 0, f3.resume
+  f2.resume
+  assert_false f1.alive?
+  assert_false f2.alive?
+  assert_false f3.alive?
+end
+
+assert('Root fiber resume') do
+  root = Fiber.current
+  assert_raise(FiberError) { root.resume }
+  f = Fiber.new {
+    assert_raise(FiberError) { root.resume }
+  }
+  f.resume
+  assert_false f.alive?
+end
+
+assert('Fiber without block') do
+  assert_raise(ArgumentError) { Fiber.new }
+end
+
+
+assert('Transfer to self.') do
+  result = []
+  f = Fiber.new { result << :start; f.transfer; result << :end  }
+  f.transfer
+  assert_equal [:start, :end], result
+
+  result = []
+  f = Fiber.new { result << :start; f.transfer; result << :end  }
+  f.resume
+  assert_equal [:start, :end], result
+end
+
+assert('Resume transferred fiber') do
+  f = Fiber.new {
+    assert_raise(FiberError) { f.resume }
+  }
+  f.transfer
+end
+
+assert('Root fiber transfer.') do
+  result = nil
+  root = Fiber.current
+  f = Fiber.new {
+    result = :ok
+    root.transfer
+  }
+  f.resume
+  assert_true f.alive?
+  assert_equal :ok, result
+end
+
+assert('Break nested fiber with root fiber transfer') do
+  root = Fiber.current
+
+  result = nil
+  f2 = nil
+  f1 = Fiber.new {
+    Fiber.yield f2.resume
+    result = :f1
+  }
+  f2 = Fiber.new {
+    result = :to_root
+    root.transfer :from_f2
+    result = :f2
+  }
+  assert_equal :from_f2, f1.resume
+  assert_equal :to_root, result
+  assert_equal :f2, f2.transfer
+  assert_equal :f2, result
+  assert_false f2.alive?
+  assert_equal :f1, f1.resume
+  assert_equal :f1, result
+  assert_false f1.alive?
+end
+
+assert('CRuby Fiber#transfer test.') do
+  ary = []
+  f2 = nil
+  f1 = Fiber.new{
+    ary << f2.transfer(:foo)
+    :ok
+  }
+  f2 = Fiber.new{
+    ary << f1.transfer(:baz)
+    :ng
+  }
+  assert_equal :ok, f1.transfer
+  assert_equal [:baz], ary
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-hash-ext/mrbgem.rake
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-hash-ext/mrbgem.rake	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-hash-ext/mrbgem.rake	(revision 439)
@@ -0,0 +1,6 @@
+MRuby::Gem::Specification.new('mruby-hash-ext') do |spec|
+  spec.license = 'MIT'
+  spec.author  = 'mruby developers'
+  spec.summary = 'Hash class extension'
+  spec.add_dependency 'mruby-array-ext', core: 'mruby-array-ext'
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-hash-ext/mrblib/hash.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-hash-ext/mrblib/hash.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-hash-ext/mrblib/hash.rb	(revision 439)
@@ -0,0 +1,500 @@
+class Hash
+
+  #  ISO does not define Hash#each_pair, so each_pair is defined in gem.
+  alias each_pair each
+
+  ##
+  # call-seq:
+  #     Hash[ key, value, ... ] -> new_hash
+  #     Hash[ [ [key, value], ... ] ] -> new_hash
+  #     Hash[ object ] -> new_hash
+  #
+  # Creates a new hash populated with the given objects.
+  #
+  # Similar to the literal `{ _key_ => _value_, ... }`. In the first
+  # form, keys and values occur in pairs, so there must be an even number of
+  # arguments.
+  #
+  # The second and third form take a single argument which is either an array
+  # of key-value pairs or an object convertible to a hash.
+  #
+  #     Hash["a", 100, "b", 200] #=> {"a"=>100, "b"=>200}
+  #     Hash[ [ ["a", 100], ["b", 200] ] ] #=> {"a"=>100, "b"=>200}
+  #     Hash["a" => 100, "b" => 200] #=> {"a"=>100, "b"=>200}
+  #
+
+  def self.[](*object)
+    length = object.length
+    if length == 1
+      o = object[0]
+      if Hash === o
+        h = self.new
+        o.each { |k, v| h[k] = v }
+        return h
+      elsif o.respond_to?(:to_a)
+        h = self.new
+        o.to_a.each do |i|
+          raise ArgumentError, "wrong element type #{i.class} (expected array)" unless i.respond_to?(:to_a)
+          k, v = nil
+          case i.size
+          when 2
+            k = i[0]
+            v = i[1]
+          when 1
+            k = i[0]
+          else
+            raise ArgumentError, "invalid number of elements (#{i.size} for 1..2)"
+          end
+          h[k] = v
+        end
+        return h
+      end
+    end
+    unless length % 2 == 0
+      raise ArgumentError, 'odd number of arguments for Hash'
+    end
+    h = self.new
+    0.step(length - 2, 2) do |i|
+      h[object[i]] = object[i + 1]
+    end
+    h
+  end
+
+  ##
+  # call-seq:
+  #     hsh.merge!(other_hash)                                 -> hsh
+  #     hsh.merge!(other_hash){|key, oldval, newval| block}    -> hsh
+  #
+  #  Adds the contents of _other_hash_ to _hsh_.  If no block is specified,
+  #  entries with duplicate keys are overwritten with the values from
+  #  _other_hash_, otherwise the value of each duplicate key is determined by
+  #  calling the block with the key, its value in _hsh_ and its value in
+  #  _other_hash_.
+  #
+  #     h1 = { "a" => 100, "b" => 200 }
+  #     h2 = { "b" => 254, "c" => 300 }
+  #     h1.merge!(h2)   #=> {"a"=>100, "b"=>254, "c"=>300}
+  #
+  #     h1 = { "a" => 100, "b" => 200 }
+  #     h2 = { "b" => 254, "c" => 300 }
+  #     h1.merge!(h2) { |key, v1, v2| v1 }
+  #                     #=> {"a"=>100, "b"=>200, "c"=>300}
+  #
+
+  def merge!(other, &block)
+    raise TypeError, "Hash required (#{other.class} given)" unless Hash === other
+    if block
+      other.each_key{|k|
+        self[k] = (self.has_key?(k))? block.call(k, self[k], other[k]): other[k]
+      }
+    else
+      other.each_key{|k| self[k] = other[k]}
+    end
+    self
+  end
+
+  alias update merge!
+
+  ##
+  # call-seq:
+  #   hsh.compact!    -> hsh
+  #
+  # Removes all nil values from the hash. Returns the hash.
+  # Returns nil if the hash does not contain nil values.
+  #
+  #   h = { a: 1, b: false, c: nil }
+  #   h.compact!     #=> { a: 1, b: false }
+  #
+
+  def compact!
+    keys = self.keys
+    nk = keys.select{|k|
+      self[k] != nil
+    }
+    return nil if (keys.size == nk.size)
+    h = {}
+    nk.each {|k|
+      h[k] = self[k]
+    }
+    h
+    self.replace(h)
+  end
+
+  ##
+  # call-seq:
+  #    hsh.compact     -> new_hsh
+  #
+  # Returns a new hash with the nil values/key pairs removed
+  #
+  #    h = { a: 1, b: false, c: nil }
+  #    h.compact     #=> { a: 1, b: false }
+  #    h             #=> { a: 1, b: false, c: nil }
+  #
+  def compact
+    h = {}
+    self.keys.select{|k|
+      self[k] != nil
+    }.each {|k|
+      h[k] = self[k]
+    }
+    h
+  end
+
+  ##
+  #  call-seq:
+  #     hsh.fetch(key [, default] )       -> obj
+  #     hsh.fetch(key) {| key | block }   -> obj
+  #
+  #  Returns a value from the hash for the given key. If the key can't be
+  #  found, there are several options: With no other arguments, it will
+  #  raise an <code>KeyError</code> exception; if <i>default</i> is
+  #  given, then that will be returned; if the optional code block is
+  #  specified, then that will be run and its result returned.
+  #
+  #     h = { "a" => 100, "b" => 200 }
+  #     h.fetch("a")                            #=> 100
+  #     h.fetch("z", "go fish")                 #=> "go fish"
+  #     h.fetch("z") { |el| "go fish, #{el}"}   #=> "go fish, z"
+  #
+  #  The following example shows that an exception is raised if the key
+  #  is not found and a default value is not supplied.
+  #
+  #     h = { "a" => 100, "b" => 200 }
+  #     h.fetch("z")
+  #
+  #  <em>produces:</em>
+  #
+  #     prog.rb:2:in 'fetch': key not found (KeyError)
+  #      from prog.rb:2
+  #
+
+  def fetch(key, none=NONE, &block)
+    unless self.key?(key)
+      if block
+        block.call(key)
+      elsif none != NONE
+        none
+      else
+        raise KeyError, "Key not found: #{key.inspect}"
+      end
+    else
+      self[key]
+    end
+  end
+
+  ##
+  #  call-seq:
+  #     hsh.delete_if {| key, value | block }  -> hsh
+  #     hsh.delete_if                          -> an_enumerator
+  #
+  #  Deletes every key-value pair from <i>hsh</i> for which <i>block</i>
+  #  evaluates to <code>true</code>.
+  #
+  #  If no block is given, an enumerator is returned instead.
+  #
+  #     h = { "a" => 100, "b" => 200, "c" => 300 }
+  #     h.delete_if {|key, value| key >= "b" }   #=> {"a"=>100}
+  #
+
+  def delete_if(&block)
+    return to_enum :delete_if unless block
+
+    self.each do |k, v|
+      self.delete(k) if block.call(k, v)
+    end
+    self
+  end
+
+  ##
+  #  call-seq:
+  #     hash.flatten -> an_array
+  #     hash.flatten(level) -> an_array
+  #
+  #  Returns a new array that is a one-dimensional flattening of this
+  #  hash. That is, for every key or value that is an array, extract
+  #  its elements into the new array.  Unlike Array#flatten, this
+  #  method does not flatten recursively by default.  The optional
+  #  <i>level</i> argument determines the level of recursion to flatten.
+  #
+  #     a =  {1=> "one", 2 => [2,"two"], 3 => "three"}
+  #     a.flatten    # => [1, "one", 2, [2, "two"], 3, "three"]
+  #     a.flatten(2) # => [1, "one", 2, 2, "two", 3, "three"]
+  #
+
+  def flatten(level=1)
+    self.to_a.flatten(level)
+  end
+
+  ##
+  #  call-seq:
+  #     hsh.invert -> new_hash
+  #
+  #  Returns a new hash created by using <i>hsh</i>'s values as keys, and
+  #  the keys as values.
+  #
+  #     h = { "n" => 100, "m" => 100, "y" => 300, "d" => 200, "a" => 0 }
+  #     h.invert   #=> {0=>"a", 100=>"m", 200=>"d", 300=>"y"}
+  #
+
+  def invert
+    h = self.class.new
+    self.each {|k, v| h[v] = k }
+    h
+  end
+
+  ##
+  #  call-seq:
+  #     hsh.keep_if {| key, value | block }  -> hsh
+  #     hsh.keep_if                          -> an_enumerator
+  #
+  #  Deletes every key-value pair from <i>hsh</i> for which <i>block</i>
+  #  evaluates to false.
+  #
+  #  If no block is given, an enumerator is returned instead.
+  #
+
+  def keep_if(&block)
+    return to_enum :keep_if unless block
+
+    keys = []
+    self.each do |k, v|
+      unless block.call([k, v])
+        self.delete(k)
+      end
+    end
+    self
+  end
+
+  ##
+  #  call-seq:
+  #     hsh.key(value)    -> key
+  #
+  #  Returns the key of an occurrence of a given value. If the value is
+  #  not found, returns <code>nil</code>.
+  #
+  #     h = { "a" => 100, "b" => 200, "c" => 300, "d" => 300 }
+  #     h.key(200)   #=> "b"
+  #     h.key(300)   #=> "c"
+  #     h.key(999)   #=> nil
+  #
+
+  def key(val)
+    self.each do |k, v|
+      return k if v == val
+    end
+    nil
+  end
+
+  ##
+  #  call-seq:
+  #     hsh.to_h     -> hsh or new_hash
+  #
+  #  Returns +self+. If called on a subclass of Hash, converts
+  #  the receiver to a Hash object.
+  #
+  def to_h
+    self
+  end
+
+  ##
+  #  call-seq:
+  #    hash < other -> true or false
+  #
+  #  Returns <code>true</code> if <i>hash</i> is subset of
+  #  <i>other</i>.
+  #
+  #     h1 = {a:1, b:2}
+  #     h2 = {a:1, b:2, c:3}
+  #     h1 < h2    #=> true
+  #     h2 < h1    #=> false
+  #     h1 < h1    #=> false
+  #
+  def <(hash)
+    raise TypeError, "can't convert #{hash.class} to Hash" unless Hash === hash
+    size < hash.size and all? {|key, val|
+      hash.key?(key) and hash[key] == val
+    }
+  end
+
+  ##
+  #  call-seq:
+  #    hash <= other -> true or false
+  #
+  #  Returns <code>true</code> if <i>hash</i> is subset of
+  #  <i>other</i> or equals to <i>other</i>.
+  #
+  #     h1 = {a:1, b:2}
+  #     h2 = {a:1, b:2, c:3}
+  #     h1 <= h2   #=> true
+  #     h2 <= h1   #=> false
+  #     h1 <= h1   #=> true
+  #
+  def <=(hash)
+    raise TypeError, "can't convert #{hash.class} to Hash" unless Hash === hash
+    size <= hash.size and all? {|key, val|
+      hash.key?(key) and hash[key] == val
+    }
+  end
+
+  ##
+  #  call-seq:
+  #    hash > other -> true or false
+  #
+  #  Returns <code>true</code> if <i>other</i> is subset of
+  #  <i>hash</i>.
+  #
+  #     h1 = {a:1, b:2}
+  #     h2 = {a:1, b:2, c:3}
+  #     h1 > h2    #=> false
+  #     h2 > h1    #=> true
+  #     h1 > h1    #=> false
+  #
+  def >(hash)
+    raise TypeError, "can't convert #{hash.class} to Hash" unless Hash === hash
+    size > hash.size and hash.all? {|key, val|
+      key?(key) and self[key] == val
+    }
+  end
+
+  ##
+  #  call-seq:
+  #    hash >= other -> true or false
+  #
+  #  Returns <code>true</code> if <i>other</i> is subset of
+  #  <i>hash</i> or equals to <i>hash</i>.
+  #
+  #     h1 = {a:1, b:2}
+  #     h2 = {a:1, b:2, c:3}
+  #     h1 >= h2   #=> false
+  #     h2 >= h1   #=> true
+  #     h1 >= h1   #=> true
+  #
+  def >=(hash)
+    raise TypeError, "can't convert #{hash.class} to Hash" unless Hash === hash
+    size >= hash.size and hash.all? {|key, val|
+      key?(key) and self[key] == val
+    }
+  end
+
+  ##
+  # call-seq:
+  #   hsh.dig(key,...)                 -> object
+  #
+  # Extracts the nested value specified by the sequence of <i>key</i>
+  # objects by calling +dig+ at each step, returning +nil+ if any
+  # intermediate step is +nil+.
+  #
+  def dig(idx,*args)
+    n = self[idx]
+    if args.size > 0
+      n&.dig(*args)
+    else
+      n
+    end
+  end
+
+  ##
+  # call-seq:
+  #    hsh.transform_keys {|key| block } -> new_hash
+  #    hsh.transform_keys                -> an_enumerator
+  #
+  # Returns a new hash, with the keys computed from running the block
+  # once for each key in the hash, and the values unchanged.
+  #
+  # If no block is given, an enumerator is returned instead.
+  #
+  def transform_keys(&block)
+    return to_enum :transform_keys unless block
+    hash = {}
+    self.keys.each do |k|
+      new_key = block.call(k)
+      hash[new_key] = self[k]
+    end
+    hash
+  end
+  ##
+  # call-seq:
+  #    hsh.transform_keys! {|key| block } -> hsh
+  #    hsh.transform_keys!                -> an_enumerator
+  #
+  # Invokes the given block once for each key in <i>hsh</i>, replacing it
+  # with the new key returned by the block, and then returns <i>hsh</i>.
+  #
+  # If no block is given, an enumerator is returned instead.
+  #
+  def transform_keys!(&block)
+    return to_enum :transform_keys! unless block
+    self.keys.each do |k|
+      value = self[k]
+      self.__delete(k)
+      k = block.call(k) if block
+      self[k] = value
+    end
+    self
+  end
+  ##
+  # call-seq:
+  #    hsh.transform_values {|value| block } -> new_hash
+  #    hsh.transform_values                  -> an_enumerator
+  #
+  # Returns a new hash with the results of running the block once for
+  # every value.
+  # This method does not change the keys.
+  #
+  # If no block is given, an enumerator is returned instead.
+  #
+  def transform_values(&b)
+    return to_enum :transform_values unless block_given?
+    hash = {}
+    self.keys.each do |k|
+      hash[k] = yield(self[k])
+    end
+    hash
+  end
+
+  ##
+  # call-seq:
+  #    hsh.transform_values! {|key| block } -> hsh
+  #    hsh.transform_values!                -> an_enumerator
+  #
+  # Invokes the given block once for each value in the hash, replacing
+  # with the new value returned by the block, and then returns <i>hsh</i>.
+  #
+  # If no block is given, an enumerator is returned instead.
+  #
+  def transform_values!(&b)
+    return to_enum :transform_values! unless block_given?
+    self.keys.each do |k|
+      self[k] = yield(self[k])
+    end
+    self
+  end
+
+  def to_proc
+    ->x{self[x]}
+  end
+
+  ##
+  # call-seq:
+  #   hsh.fetch_values(key, ...)                 -> array
+  #   hsh.fetch_values(key, ...) { |key| block } -> array
+  #
+  # Returns an array containing the values associated with the given keys
+  # but also raises <code>KeyError</code> when one of keys can't be found.
+  # Also see <code>Hash#values_at</code> and <code>Hash#fetch</code>.
+  #
+  #   h = { "cat" => "feline", "dog" => "canine", "cow" => "bovine" }
+  #
+  #   h.fetch_values("cow", "cat")                   #=> ["bovine", "feline"]
+  #   h.fetch_values("cow", "bird")                  # raises KeyError
+  #   h.fetch_values("cow", "bird") { |k| k.upcase } #=> ["bovine", "BIRD"]
+  #
+  def fetch_values(*keys, &block)
+    keys.map do |k|
+      self.fetch(k, &block)
+    end
+  end
+
+  alias filter select
+  alias filter! select!
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-hash-ext/src/hash-ext.c
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-hash-ext/src/hash-ext.c	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-hash-ext/src/hash-ext.c	(revision 439)
@@ -0,0 +1,83 @@
+/*
+** hash.c - Hash class
+**
+** See Copyright Notice in mruby.h
+*/
+
+#include <mruby.h>
+#include <mruby/array.h>
+#include <mruby/hash.h>
+
+/*
+ * call-seq:
+ *   hsh.values_at(key, ...)   -> array
+ *
+ * Return an array containing the values associated with the given keys.
+ * Also see <code>Hash.select</code>.
+ *
+ *   h = { "cat" => "feline", "dog" => "canine", "cow" => "bovine" }
+ *   h.values_at("cow", "cat")  #=> ["bovine", "feline"]
+ */
+
+static mrb_value
+hash_values_at(mrb_state *mrb, mrb_value hash)
+{
+  mrb_value *argv, result;
+  mrb_int argc, i;
+  int ai;
+
+  mrb_get_args(mrb, "*", &argv, &argc);
+  result = mrb_ary_new_capa(mrb, argc);
+  ai = mrb_gc_arena_save(mrb);
+  for (i = 0; i < argc; i++) {
+    mrb_ary_push(mrb, result, mrb_hash_get(mrb, hash, argv[i]));
+    mrb_gc_arena_restore(mrb, ai);
+  }
+  return result;
+}
+
+/*
+ *  call-seq:
+ *     hsh.slice(*keys) -> a_hash
+ *
+ *  Returns a hash containing only the given keys and their values.
+ *
+ *     h = { a: 100, b: 200, c: 300 }
+ *     h.slice(:a)           #=> {:a=>100}
+ *     h.slice(:b, :c, :d)   #=> {:b=>200, :c=>300}
+ */
+static mrb_value
+hash_slice(mrb_state *mrb, mrb_value hash)
+{
+  mrb_value *argv, result;
+  mrb_int argc, i;
+
+  mrb_get_args(mrb, "*", &argv, &argc);
+  result = mrb_hash_new_capa(mrb, argc);
+  if (argc == 0) return result; /* empty hash */
+  for (i = 0; i < argc; i++) {
+    mrb_value key = argv[i];
+    mrb_value val;
+
+    val = mrb_hash_fetch(mrb, hash, key, mrb_undef_value());
+    if (!mrb_undef_p(val)) {
+      mrb_hash_set(mrb, result, key, val);
+    }
+  }
+  return result;
+}
+
+void
+mrb_mruby_hash_ext_gem_init(mrb_state *mrb)
+{
+  struct RClass *h;
+
+  h = mrb->hash_class;
+  mrb_define_method(mrb, h, "values_at", hash_values_at, MRB_ARGS_ANY());
+  mrb_define_method(mrb, h, "slice",     hash_slice, MRB_ARGS_ANY());
+}
+
+void
+mrb_mruby_hash_ext_gem_final(mrb_state *mrb)
+{
+}
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-hash-ext/test/hash.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-hash-ext/test/hash.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-hash-ext/test/hash.rb	(revision 439)
@@ -0,0 +1,290 @@
+##
+# Hash(Ext) Test
+
+assert('Hash.[] Hash') do
+  a = Hash['a_key' => 'a_value']
+
+  assert_equal({'a_key' => 'a_value'}, a)
+end
+
+assert('Hash.[] [ [ ["b_key", "b_value" ] ] ]') do
+  a = Hash[ [ ['b_key', 'b_value'] ] ]
+
+  assert_equal({'b_key' => 'b_value'}, a)
+
+  a = Hash[ [ ] ]
+
+  assert_equal({}, a)
+
+  assert_raise(ArgumentError) do
+    Hash[ [ ['b_key', 'b_value', 'b_over'] ] ]
+  end
+
+  assert_raise(ArgumentError) do
+    Hash[ [ [] ] ]
+  end
+end
+
+assert('Hash.[] "c_key", "c_value"') do
+  a = Hash['c_key', 'c_value', 'd_key', 1]
+
+  assert_equal({'c_key' => 'c_value', 'd_key' => 1}, a)
+
+  a = Hash[]
+
+  assert_equal({}, a)
+
+  assert_raise(ArgumentError) do
+    Hash['d_key']
+  end
+end
+
+assert('Hash.[] for sub class') do
+  sub_hash_class = Class.new(Hash)
+  sub_hash = sub_hash_class[]
+  assert_equal(sub_hash_class, sub_hash.class)
+end
+
+assert('Hash#merge!') do
+  a = { 'abc_key' => 'abc_value', 'cba_key' => 'cba_value' }
+  b = { 'cba_key' => 'XXX',  'xyz_key' => 'xyz_value' }
+
+  result_1 = a.merge! b
+
+  a = { 'abc_key' => 'abc_value', 'cba_key' => 'cba_value' }
+  result_2 = a.merge!(b) do |key, original, new|
+    original
+  end
+
+  assert_equal({'abc_key' => 'abc_value', 'cba_key' => 'XXX',
+               'xyz_key' => 'xyz_value' }, result_1)
+  assert_equal({'abc_key' => 'abc_value', 'cba_key' => 'cba_value',
+               'xyz_key' => 'xyz_value' }, result_2)
+
+  assert_raise(TypeError) do
+    { 'abc_key' => 'abc_value' }.merge! "a"
+  end
+end
+
+assert('Hash#values_at') do
+  h = { "cat" => "feline", "dog" => "canine", "cow" => "bovine" }
+  assert_equal ["bovine", "feline"], h.values_at("cow", "cat")
+
+  keys = []
+  (0...1000).each { |v| keys.push "#{v}" }
+  h = Hash.new { |hash,k| hash[k] = k }
+  assert_equal keys, h.values_at(*keys)
+end
+
+assert('Hash#compact') do
+  h = { "cat" => "feline", "dog" => nil, "cow" => false }
+
+  assert_equal({ "cat" => "feline", "cow" => false }, h.compact)
+  assert_equal({ "cat" => "feline", "dog" => nil, "cow" => false }, h)
+end
+
+assert('Hash#compact!') do
+  h = { "cat" => "feline", "dog" => nil, "cow" => false }
+
+  h.compact!
+  assert_equal({ "cat" => "feline", "cow" => false }, h)
+end
+
+assert('Hash#fetch') do
+  h = { "cat" => "feline", "dog" => "canine", "cow" => "bovine" }
+  assert_equal "feline", h.fetch("cat")
+  assert_equal "mickey", h.fetch("mouse", "mickey")
+  assert_equal "minny", h.fetch("mouse"){"minny"}
+  assert_equal "mouse", h.fetch("mouse"){|k| k}
+  assert_raise(KeyError) do
+    h.fetch("gnu")
+  end
+end
+
+assert("Hash#delete_if") do
+  base = { 1 => 'one', 2 => false, true => 'true', 'cat' => 99 }
+  h1   = { 1 => 'one', 2 => false, true => 'true' }
+  h2   = { 2 => false, 'cat' => 99 }
+  h3   = { 2 => false }
+
+  h = base.dup
+  assert_equal(h, h.delete_if { false })
+  assert_equal({}, h.delete_if { true })
+
+  h = base.dup
+  assert_equal(h1, h.delete_if {|k,v| k.instance_of?(String) })
+  assert_equal(h1, h)
+
+  h = base.dup
+  assert_equal(h2, h.delete_if {|k,v| v.instance_of?(String) })
+  assert_equal(h2, h)
+
+  h = base.dup
+  assert_equal(h3, h.delete_if {|k,v| v })
+  assert_equal(h3, h)
+
+  h = base.dup
+  n = 0
+  h.delete_if {|*a|
+    n += 1
+    assert_equal(2, a.size)
+    assert_equal(base[a[0]], a[1])
+    h.shift
+    true
+  }
+  assert_equal(base.size, n)
+end
+
+assert("Hash#flatten") do
+  a =  {1=> "one", 2 => [2,"two"], 3 => [3, ["three"]]}
+  assert_equal [1, "one", 2, [2, "two"], 3, [3, ["three"]]], a.flatten
+  assert_equal [[1, "one"], [2, [2, "two"]], [3, [3, ["three"]]]], a.flatten(0)
+  assert_equal [1, "one", 2, [2, "two"], 3, [3, ["three"]]], a.flatten(1)
+  assert_equal [1, "one", 2, 2, "two", 3, 3, ["three"]], a.flatten(2)
+  assert_equal [1, "one", 2, 2, "two", 3, 3, "three"], a.flatten(3)
+end
+
+assert("Hash#invert") do
+  h = { 1 => 'one', 2 => 'two', 3 => 'three',
+        true => 'true', nil => 'nil' }.invert
+  assert_equal 1, h['one']
+  assert_equal true, h['true']
+  assert_equal nil, h['nil']
+
+  h = { 'a' => 1, 'b' => 2, 'c' => 1 }.invert
+  assert_equal(2, h.length)
+  assert_include(%w[a c], h[1])
+  assert_equal('b', h[2])
+end
+
+assert("Hash#invert with sub class") do
+  sub_hash_class = Class.new(Hash)
+  sub_hash = sub_hash_class.new
+  assert_equal(sub_hash_class, sub_hash.invert.class)
+end
+
+assert("Hash#keep_if") do
+  h = { 1 => 2, 3 => 4, 5 => 6 }
+  assert_equal({3=>4,5=>6}, h.keep_if {|k, v| k + v >= 7 })
+  h = { 1 => 2, 3 => 4, 5 => 6 }
+  assert_equal({ 1 => 2, 3=> 4, 5 =>6} , h.keep_if { true })
+end
+
+assert("Hash#key") do
+  h = { "a" => 100, "b" => 200, "c" => 300, "d" => 300, nil => 'nil', 'nil' => nil }
+  assert_equal "b", h.key(200)
+  assert_equal "c", h.key(300)
+  assert_nil h.key(999)
+  assert_nil h.key('nil')
+  assert_equal 'nil', h.key(nil)
+end
+
+assert("Hash#to_h") do
+  h = { "a" => 100, "b" => 200 }
+  assert_equal Hash, h.to_h.class
+  assert_equal h, h.to_h
+end
+
+assert('Hash#<') do
+  h1 = {a:1, b:2}
+  h2 = {a:1, b:2, c:3}
+
+  assert_false(h1 < h1)
+  assert_true(h1 < h2)
+  assert_false(h2 < h1)
+  assert_false(h2 < h2)
+
+  h1 = {a:1}
+  h2 = {a:2}
+
+  assert_false(h1 < h1)
+  assert_false(h1 < h2)
+  assert_false(h2 < h1)
+  assert_false(h2 < h2)
+end
+
+assert('Hash#<=') do
+  h1 = {a:1, b:2}
+  h2 = {a:1, b:2, c:3}
+
+  assert_true(h1 <= h1)
+  assert_true(h1 <= h2)
+  assert_false(h2 <= h1)
+  assert_true(h2 <= h2)
+
+  h1 = {a:1}
+  h2 = {a:2}
+
+  assert_true(h1 <= h1)
+  assert_false(h1 <= h2)
+  assert_false(h2 <= h1)
+  assert_true(h2 <= h2)
+end
+
+assert('Hash#>=') do
+  h1 = {a:1, b:2}
+  h2 = {a:1, b:2, c:3}
+
+  assert_true(h1 >= h1)
+  assert_false(h1 >= h2)
+  assert_true(h2 >= h1)
+  assert_true(h2 >= h2)
+
+  h1 = {a:1}
+  h2 = {a:2}
+
+  assert_true(h1 >= h1)
+  assert_false(h1 >= h2)
+  assert_false(h2 >= h1)
+  assert_true(h2 >= h2)
+end
+
+assert('Hash#>') do
+  h1 = {a:1, b:2}
+  h2 = {a:1, b:2, c:3}
+
+  assert_false(h1 > h1)
+  assert_false(h1 > h2)
+  assert_true(h2 > h1)
+  assert_false(h2 > h2)
+
+  h1 = {a:1}
+  h2 = {a:2}
+
+  assert_false(h1 > h1)
+  assert_false(h1 > h2)
+  assert_false(h2 > h1)
+  assert_false(h2 > h2)
+end
+
+assert("Hash#dig") do
+  h = {a:{b:{c:1}}}
+  assert_equal(1, h.dig(:a, :b, :c))
+  assert_nil(h.dig(:d))
+end
+
+assert("Hash#transform_keys") do
+  h = {"1" => 100, "2" => 200}
+  assert_equal({"1!" => 100, "2!" => 200},
+               h.transform_keys{|k| k+"!"})
+  assert_equal({1 => 100, 2 => 200},
+               h.transform_keys{|k|k.to_i})
+  assert_same(h, h.transform_keys!{|k|k.to_i})
+  assert_equal({1 => 100, 2 => 200}, h)
+end
+
+assert("Hash#transform_values") do
+  h = {a: 1, b: 2, c: 3}
+  assert_equal({a: 2, b: 5, c: 10},
+               h.transform_values{|v| v * v + 1})
+  assert_equal({a: "1", b: "2", c: "3"},
+               h.transform_values{|v|v.to_s})
+  assert_same(h, h.transform_values!{|v|v.to_s})
+  assert_equal({a: "1", b: "2", c: "3"}, h)
+end
+
+assert("Hash#slice") do
+  h = { a: 100, b: 200, c: 300 }
+  assert_equal({:a=>100}, h.slice(:a))
+  assert_equal({:b=>200, :c=>300}, h.slice(:b, :c, :d))
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-inline-struct/mrbgem.rake
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-inline-struct/mrbgem.rake	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-inline-struct/mrbgem.rake	(revision 439)
@@ -0,0 +1,5 @@
+MRuby::Gem::Specification.new('mruby-inline-struct') do |spec|
+  spec.license = 'MIT'
+  spec.author  = 'mruby developers'
+  spec.summary = 'inline structure'
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-inline-struct/test/inline.c
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-inline-struct/test/inline.c	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-inline-struct/test/inline.c	(revision 439)
@@ -0,0 +1,85 @@
+#include <mruby.h>
+#include <mruby/class.h>
+#include <mruby/string.h>
+#include <mruby/istruct.h>
+
+static mrb_value
+istruct_test_initialize(mrb_state *mrb, mrb_value self)
+{
+  char *string = (char*)mrb_istruct_ptr(self);
+  mrb_int size = mrb_istruct_size();
+  mrb_value object;
+  mrb_get_args(mrb, "o", &object);
+
+  if (mrb_fixnum_p(object)) {
+    strncpy(string, "fixnum", size-1);
+  }
+#ifndef MRB_WITHOUT_FLOAT
+  else if (mrb_float_p(object)) {
+    strncpy(string, "float", size-1);
+  }
+#endif
+  else if (mrb_string_p(object)) {
+    strncpy(string, "string", size-1);
+  }
+  else {
+    strncpy(string, "anything", size-1);
+  }
+
+  string[size - 1] = 0; // force NULL at the end
+  return self;
+}
+
+static mrb_value
+istruct_test_to_s(mrb_state *mrb, mrb_value self)
+{
+  return mrb_str_new_cstr(mrb, (const char*)mrb_istruct_ptr(self));
+}
+
+static mrb_value
+istruct_test_length(mrb_state *mrb, mrb_value self)
+{
+  return mrb_fixnum_value(mrb_istruct_size());
+}
+
+static mrb_value
+istruct_test_test_receive(mrb_state *mrb, mrb_value self)
+{
+  mrb_value object;
+  mrb_get_args(mrb, "o", &object);
+  if (mrb_obj_class(mrb, object) != mrb_class_get(mrb, "InlineStructTest"))
+  {
+    mrb_raise(mrb, E_TYPE_ERROR, "Expected InlineStructTest");
+  }
+  return mrb_bool_value(((char*)mrb_istruct_ptr(object))[0] == 's');
+}
+
+static mrb_value
+istruct_test_test_receive_direct(mrb_state *mrb, mrb_value self)
+{
+  char *ptr;
+  mrb_get_args(mrb, "I", &ptr);
+  return mrb_bool_value(ptr[0] == 's');
+}
+
+static mrb_value
+istruct_test_mutate(mrb_state *mrb, mrb_value self)
+{
+  char *ptr = (char*)mrb_istruct_ptr(self);
+  memcpy(ptr, "mutate", 6);
+  return mrb_nil_value();
+}
+
+void mrb_mruby_inline_struct_gem_test(mrb_state *mrb)
+{
+  struct RClass *cls;
+
+  cls = mrb_define_class(mrb, "InlineStructTest", mrb->object_class);
+  MRB_SET_INSTANCE_TT(cls, MRB_TT_ISTRUCT);
+  mrb_define_method(mrb, cls, "initialize", istruct_test_initialize, MRB_ARGS_REQ(1));
+  mrb_define_method(mrb, cls, "to_s", istruct_test_to_s, MRB_ARGS_NONE());
+  mrb_define_method(mrb, cls, "mutate", istruct_test_mutate, MRB_ARGS_NONE());
+  mrb_define_class_method(mrb, cls, "length", istruct_test_length, MRB_ARGS_NONE());
+  mrb_define_class_method(mrb, cls, "test_receive", istruct_test_test_receive, MRB_ARGS_REQ(1));
+  mrb_define_class_method(mrb, cls, "test_receive_direct", istruct_test_test_receive_direct, MRB_ARGS_REQ(1));
+}
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-inline-struct/test/inline.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-inline-struct/test/inline.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-inline-struct/test/inline.rb	(revision 439)
@@ -0,0 +1,118 @@
+##
+# InlineStruct Test
+
+class InlineStructTest
+  def extra_method
+    :ok
+  end
+
+  def test_ivar_set
+    @var = :ivar
+  end
+
+  def test_ivar_get
+    @vat
+  end
+end
+
+assert('InlineStructTest#dup') do
+  obj = InlineStructTest.new(1)
+  assert_equal obj.to_s, 'fixnum'
+  assert_equal obj.dup.to_s, 'fixnum'
+end
+
+assert('InlineStructTest#clone') do
+  obj = InlineStructTest.new(1)
+  assert_equal obj.to_s, 'fixnum'
+  assert_equal obj.clone.to_s, 'fixnum'
+end
+
+assert('InlineStruct#object_id') do
+  obj1 = InlineStructTest.new(1)
+  obj2 = InlineStructTest.new(1)
+  assert_not_equal obj1, obj2
+  assert_not_equal obj1.object_id, obj2.object_id
+  assert_not_equal obj1.object_id, obj1.dup.object_id
+  assert_not_equal obj1.object_id, obj1.clone.object_id
+end
+
+assert('InlineStructTest#mutate (dup)') do
+  obj1 = InlineStructTest.new("foo")
+  assert_equal obj1.to_s, "string"
+  obj2 = obj1.dup
+  assert_equal obj2.to_s, "string"
+  obj1.mutate
+  assert_equal obj1.to_s, "mutate"
+  assert_equal obj2.to_s, "string"
+end
+
+assert('InlineStructTest#mutate (clone)') do
+  obj1 = InlineStructTest.new("foo")
+  assert_equal obj1.to_s, "string"
+  obj2 = obj1.clone
+  assert_equal obj2.to_s, "string"
+  obj1.mutate
+  assert_equal obj1.to_s, "mutate"
+  assert_equal obj2.to_s, "string"
+end
+
+assert('InlineStructTest#test_receive(string)') do
+  assert_equal InlineStructTest.test_receive(InlineStructTest.new('a')), true
+end
+
+assert('InlineStructTest#test_receive(float)') do
+  assert_equal InlineStructTest.test_receive(InlineStructTest.new(1.25)), false
+end
+
+assert('InlineStructTest#test_receive(invalid object)') do
+  assert_raise(TypeError) do
+    InlineStructTest.test_receive([])
+  end
+end
+
+assert('InlineStructTest#test_receive(string)') do
+  assert_equal InlineStructTest.test_receive_direct(InlineStructTest.new('a')), true
+end
+
+assert('InlineStructTest#test_receive(float)') do
+  assert_equal InlineStructTest.test_receive_direct(InlineStructTest.new(1.25)), false
+end
+
+assert('InlineStructTest#test_receive(invalid object)') do
+  assert_raise(TypeError) do
+    InlineStructTest.test_receive_direct([])
+  end
+end
+
+assert('InlineStructTest#extra_method') do
+  assert_equal InlineStructTest.new(1).extra_method, :ok
+end
+
+assert('InlineStructTest instance variable') do
+  obj = InlineStructTest.new(1)
+  assert_raise(ArgumentError) do
+    obj.test_ivar_set
+  end
+  assert_equal obj.test_ivar_get, nil
+end
+
+# 64-bit mode
+if InlineStructTest.length == 24
+  assert('InlineStructTest length [64 bit]') do
+    assert_equal InlineStructTest.length, 3 * 8
+  end
+end
+
+# 32-bit mode
+if InlineStructTest.length == 12
+  assert('InlineStructTest length [32 bit]') do
+    assert_equal InlineStructTest.length, 3 * 4
+  end
+end
+
+# 16-bit mode
+if InlineStructTest.length == 6
+  assert('InlineStructTest length [16 bit]') do
+    assert_equal InlineStructTest.length, 3 * 2
+  end
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-io/README.md
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-io/README.md	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-io/README.md	(revision 439)
@@ -0,0 +1,192 @@
+mruby-io
+========
+
+`IO` and `File` classes for mruby
+
+## Installation
+Add the line below to your `build_config.rb`:
+
+```
+  conf.gem core: 'mruby-io'
+```
+
+## Implemented methods
+
+### IO
+ - http://doc.ruby-lang.org/ja/1.9.3/class/IO.html
+
+| method                     | mruby-io | memo |
+| -------------------------  | -------- | ---- |
+| IO.binread                 |          |      |
+| IO.binwrite                |          |      |
+| IO.copy_stream             |          |      |
+| IO.new, IO.for_fd, IO.open |  o  |     |
+| IO.foreach                 |          |      |
+| IO.pipe                    |    o     |      |
+| IO.popen                   |    o     |      |
+| IO.read                    |    o     |      |
+| IO.readlines               |          |      |
+| IO.select                  |    o     |      |
+| IO.sysopen                 |    o     |      |
+| IO.try_convert             |          |      |
+| IO.write                   |          |      |
+| IO#<<                      |          |      |
+| IO#advise                  |          |      |
+| IO#autoclose=              |          |      |
+| IO#autoclose?              |          |      |
+| IO#binmode                 |          |      |
+| IO#binmode?                |          |      |
+| IO#bytes                   |          | obsolete |
+| IO#chars                   |          | obsolete |
+| IO#clone, IO#dup           |    o     |      |
+| IO#close                   |    o     |      |
+| IO#close_on_exec=          |    o     |      |
+| IO#close_on_exec?          |    o     |      |
+| IO#close_read              |          |      |
+| IO#close_write             |          |      |
+| IO#closed?                 |    o     |      |
+| IO#codepoints              |          | obsolete |
+| IO#each_byte               |    o     |      |
+| IO#each_char               |    o     |      |
+| IO#each_codepoint          |          |      |
+| IO#each_line               |    o     |      |
+| IO#eof, IO#eof?            |    o     |      |
+| IO#external_encoding       |          |      |
+| IO#fcntl                   |          |      |
+| IO#fdatasync               |          |      |
+| IO#fileno, IO#to_i         |    o     |      |
+| IO#flush                   |    o     |      |
+| IO#fsync                   |          |      |
+| IO#getbyte                 |          |      |
+| IO#getc                    |    o     |      |
+| IO#gets                    |    o     |      |
+| IO#internal_encoding       |          |      |
+| IO#ioctl                   |          |      |
+| IO#isatty, IO#tty?         |    o     |      |
+| IO#lineno                  |          |      |
+| IO#lineno=                 |          |      |
+| IO#lines                   |          | obsolete |
+| IO#pid                     |    o     |      |
+| IO#pos, IO#tell            |    o     |      |
+| IO#pos=                    |    o     |      |
+| IO#print                   |    o     |      |
+| IO#printf                  |    o     |      |
+| IO#putc                    |          |      |
+| IO#puts                    |    o     |      |
+| IO#read                    |    o     |      |
+| IO#read_nonblock           |          |      |
+| IO#readbyte                |          |      |
+| IO#readchar                |    o     |      |
+| IO#readline                |    o     |      |
+| IO#readlines               |    o     |      |
+| IO#readpartial             |          |      |
+| IO#reopen                  |          |      |
+| IO#rewind                  |          |      |
+| IO#seek                    |    o     |      |
+| IO#set_encoding            |          |      |
+| IO#stat                    |          |      |
+| IO#sync                    |    o     |      |
+| IO#sync=                   |    o     |      |
+| IO#sysread                 |    o     |      |
+| IO#sysseek                 |    o     |      |
+| IO#syswrite                |    o     |      |
+| IO#to_io                   |          |      |
+| IO#ungetbyte               |          |      |
+| IO#ungetc                  |    o     |      |
+| IO#write                   |    o     |      |
+| IO#write_nonblock          |          |      |
+
+### File
+ - http://doc.ruby-lang.org/ja/1.9.3/class/File.html
+
+| method                      | mruby-io | memo |
+| --------------------------- | -------- | ---- |
+| File.absolute_path          |          |      |
+| File.atime                  |          |      |
+| File.basename               |   o      |      |
+| File.blockdev?              |          | FileTest |
+| File.chardev?               |          | FileTest |
+| File.chmod                  |   o      |      |
+| File.chown                  |          |      |
+| File.ctime                  |          |      |
+| File.delete, File.unlink    |   o      |      |
+| File.directory?             |   o      | FileTest |
+| File.dirname                |   o      |      |
+| File.executable?            |          | FileTest |
+| File.executable_real?       |          | FileTest |
+| File.exist?, exists?        |   o      | FileTest |
+| File.expand_path            |   o      |      |
+| File.extname                |   o      |      |
+| File.file?                  |   o      | FileTest |
+| File.fnmatch, File.fnmatch? |          |      |
+| File.ftype                  |          |      |
+| File.grpowned?              |          | FileTest |
+| File.identical?             |          | FileTest |
+| File.join                   |   o      |      |
+| File.lchmod                 |          |      |
+| File.lchown                 |          |      |
+| File.link                   |          |      |
+| File.lstat                  |          |      |
+| File.mtime                  |          |      |
+| File.new, File.open         |   o      |      |
+| File.owned?                 |          | FileTest |
+| File.path                   |          |      |
+| File.pipe?                  |   o      | FileTest |
+| File.readable?              |          | FileTest |
+| File.readable_real?         |          | FileTest |
+| File.readlink               |   o      |      |
+| File.realdirpath            |          |      |
+| File.realpath               |   o      |      |
+| File.rename                 |   o      |      |
+| File.setgid?                |          | FileTest |
+| File.setuid?                |          | FileTest |
+| File.size                   |   o      |      |
+| File.size?                  |   o      | FileTest |
+| File.socket?                |   o      | FileTest |
+| File.split                  |          |      |
+| File.stat                   |          |      |
+| File.sticky?                |          | FileTest |
+| File.symlink                |          |      |
+| File.symlink?               |   o      | FileTest |
+| File.truncate               |          |      |
+| File.umask                  |   o      |      |
+| File.utime                  |          |      |
+| File.world_readable?        |          |      |
+| File.world_writable?        |          |      |
+| File.writable?              |          | FileTest |
+| File.writable_real?         |          | FileTest |
+| File.zero?                  |   o      | FileTest |
+| File#atime                  |          |      |
+| File#chmod                  |          |      |
+| File#chown                  |          |      |
+| File#ctime                  |          |      |
+| File#flock                  |   o      |      |
+| File#lstat                  |          |      |
+| File#mtime                  |          |      |
+| File#path, File#to_path     |   o      |      |
+| File#size                   |          |      |
+| File#truncate               |          |      |
+
+
+## License
+
+Copyright (c) 2013 Internet Initiative Japan Inc.
+Copyright (c) 2017 mruby developers
+
+Permission is hereby granted, free of charge, to any person obtaining a 
+copy of this software and associated documentation files (the "Software"), 
+to deal in the Software without restriction, including without limitation 
+the rights to use, copy, modify, merge, publish, distribute, sublicense, 
+and/or sell copies of the Software, and to permit persons to whom the 
+Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in 
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+DEALINGS IN THE SOFTWARE.
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-io/include/mruby/ext/io.h
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-io/include/mruby/ext/io.h	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-io/include/mruby/ext/io.h	(revision 439)
@@ -0,0 +1,70 @@
+/*
+** io.h - IO class
+*/
+
+#ifndef MRUBY_IO_H
+#define MRUBY_IO_H
+
+#include <mruby.h>
+
+#ifdef MRB_DISABLE_STDIO
+# error IO and File conflicts 'MRB_DISABLE_STDIO' configuration in your 'build_config.rb'
+#endif
+
+#if defined(__cplusplus)
+extern "C" {
+#endif
+
+#if defined(MRB_WITHOUT_IO_PREAD_PWRITE)
+# undef MRB_WITH_IO_PREAD_PWRITE
+#elif !defined(MRB_WITH_IO_PREAD_PWRITE)
+# if defined(__unix__)
+#  define MRB_WITH_IO_PREAD_PWRITE
+# endif
+#endif
+
+struct mrb_io {
+  int fd;   /* file descriptor, or -1 */
+  int fd2;  /* file descriptor to write if it's different from fd, or -1 */
+  int pid;  /* child's pid (for pipes)  */
+  unsigned int readable:1,
+               writable:1,
+               sync:1,
+               is_socket:1;
+};
+
+#define MRB_O_RDONLY            0x0000
+#define MRB_O_WRONLY            0x0001
+#define MRB_O_RDWR              0x0002
+#define MRB_O_ACCMODE           (MRB_O_RDONLY | MRB_O_WRONLY | MRB_O_RDWR)
+#define MRB_O_NONBLOCK          0x0004
+#define MRB_O_APPEND            0x0008
+#define MRB_O_SYNC              0x0010
+#define MRB_O_NOFOLLOW          0x0020
+#define MRB_O_CREAT             0x0040
+#define MRB_O_TRUNC             0x0080
+#define MRB_O_EXCL              0x0100
+#define MRB_O_NOCTTY            0x0200
+#define MRB_O_DIRECT            0x0400
+#define MRB_O_BINARY            0x0800
+#define MRB_O_SHARE_DELETE      0x1000
+#define MRB_O_TMPFILE           0x2000
+#define MRB_O_NOATIME           0x4000
+#define MRB_O_DSYNC             0x00008000 /* Ignored with MRB_INT16 and MRB_WITHOUT_FLOAT */
+#define MRB_O_RSYNC             0x00010000 /* Ignored with MRB_INT16 and MRB_WITHOUT_FLOAT */
+
+#define MRB_O_RDONLY_P(f)       ((mrb_bool)(((f) & MRB_O_ACCMODE) == MRB_O_RDONLY))
+#define MRB_O_WRONLY_P(f)       ((mrb_bool)(((f) & MRB_O_ACCMODE) == MRB_O_WRONLY))
+#define MRB_O_RDWR_P(f)         ((mrb_bool)(((f) & MRB_O_ACCMODE) == MRB_O_RDWR))
+#define MRB_O_READABLE_P(f)     ((mrb_bool)((((f) & MRB_O_ACCMODE) | 2) == 2))
+#define MRB_O_WRITABLE_P(f)     ((mrb_bool)(((((f) & MRB_O_ACCMODE) + 1) & 2) == 2))
+
+#define E_IO_ERROR                 (mrb_class_get(mrb, "IOError"))
+#define E_EOF_ERROR                (mrb_class_get(mrb, "EOFError"))
+
+int mrb_io_fileno(mrb_state *mrb, mrb_value io);
+
+#if defined(__cplusplus)
+} /* extern "C" { */
+#endif
+#endif /* MRUBY_IO_H */
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-io/mrbgem.rake
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-io/mrbgem.rake	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-io/mrbgem.rake	(revision 439)
@@ -0,0 +1,12 @@
+MRuby::Gem::Specification.new('mruby-io') do |spec|
+  spec.license = 'MIT'
+  spec.authors = ['Internet Initiative Japan Inc.', 'mruby developers']
+  spec.summary = 'IO and File class'
+
+  spec.cc.include_paths << "#{build.root}/src"
+
+  if for_windows?
+    spec.linker.libraries << "ws2_32"
+  end
+  spec.add_test_dependency 'mruby-time', core: 'mruby-time'
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-io/mrblib/file.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-io/mrblib/file.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-io/mrblib/file.rb	(revision 439)
@@ -0,0 +1,203 @@
+class File < IO
+  attr_accessor :path
+
+  def initialize(fd_or_path, mode = "r", perm = 0666)
+    if fd_or_path.kind_of? Fixnum
+      super(fd_or_path, mode)
+    else
+      @path = fd_or_path
+      fd = IO.sysopen(@path, mode, perm)
+      super(fd, mode)
+    end
+  end
+
+  def self.join(*names)
+    return "" if names.empty?
+
+    names.map! do |name|
+      case name
+      when String
+        name
+      when Array
+        if names == name
+          raise ArgumentError, "recursive array"
+        end
+        join(*name)
+      else
+        raise TypeError, "no implicit conversion of #{name.class} into String"
+      end
+    end
+
+    return names[0] if names.size == 1
+
+    if names[0][-1] == File::SEPARATOR
+      s = names[0][0..-2]
+    else
+      s = names[0].dup
+    end
+
+    (1..names.size-2).each { |i|
+      t = names[i]
+      if t[0] == File::SEPARATOR and t[-1] == File::SEPARATOR
+        t = t[1..-2]
+      elsif t[0] == File::SEPARATOR
+        t = t[1..-1]
+      elsif t[-1] == File::SEPARATOR
+        t = t[0..-2]
+      end
+      s += File::SEPARATOR + t if t != ""
+    }
+    if names[-1][0] == File::SEPARATOR
+      s += File::SEPARATOR + names[-1][1..-1]
+    else
+      s += File::SEPARATOR + names[-1]
+    end
+    s
+  end
+
+  def self._concat_path(path, base_path)
+    if path[0] == "/" || path[1] == ':' # Windows root!
+      expanded_path = path
+    elsif path[0] == "~"
+      if (path[1] == "/" || path[1] == nil)
+        dir = path[1, path.size]
+        home_dir = _gethome
+
+        unless home_dir
+          raise ArgumentError, "couldn't find HOME environment -- expanding '~'"
+        end
+
+        expanded_path = home_dir
+        expanded_path += dir if dir
+        expanded_path += "/"
+      else
+        splitted_path = path.split("/")
+        user = splitted_path[0][1, splitted_path[0].size]
+        dir = "/" + splitted_path[1, splitted_path.size].join("/")
+
+        home_dir = _gethome(user)
+
+        unless home_dir
+          raise ArgumentError, "user #{user} doesn't exist"
+        end
+
+        expanded_path = home_dir
+        expanded_path += dir if dir
+        expanded_path += "/"
+      end
+    else
+      expanded_path = _concat_path(base_path, _getwd)
+      expanded_path += "/" + path
+    end
+
+    expanded_path
+  end
+
+  def self.expand_path(path, default_dir = '.')
+    expanded_path = _concat_path(path, default_dir)
+    drive_prefix = ""
+    if File::ALT_SEPARATOR && expanded_path.size > 2 &&
+        ("A".."Z").include?(expanded_path[0].upcase) && expanded_path[1] == ":"
+      drive_prefix = expanded_path[0, 2]
+      expanded_path = expanded_path[2, expanded_path.size]
+    end
+    expand_path_array = []
+    if File::ALT_SEPARATOR && expanded_path.include?(File::ALT_SEPARATOR)
+      expanded_path.gsub!(File::ALT_SEPARATOR, '/')
+    end
+    while expanded_path.include?('//')
+      expanded_path = expanded_path.gsub('//', '/')
+    end
+
+    if expanded_path != "/"
+      expanded_path.split('/').each do |path_token|
+        if path_token == '..'
+          if expand_path_array.size > 1
+            expand_path_array.pop
+          end
+        elsif path_token == '.'
+          # nothing to do.
+        else
+          expand_path_array << path_token
+        end
+      end
+
+      expanded_path = expand_path_array.join("/")
+      if expanded_path.empty?
+        expanded_path = '/'
+      end
+    end
+    if drive_prefix.empty?
+      expanded_path
+    else
+      drive_prefix + expanded_path.gsub("/", File::ALT_SEPARATOR)
+    end
+  end
+
+  def self.foreach(file)
+    if block_given?
+      self.open(file) do |f|
+        f.each {|l| yield l}
+      end
+    else
+      return self.new(file)
+    end
+  end
+
+  def self.directory?(file)
+    FileTest.directory?(file)
+  end
+
+  def self.exist?(file)
+    FileTest.exist?(file)
+  end
+
+  def self.exists?(file)
+    FileTest.exists?(file)
+  end
+
+  def self.file?(file)
+    FileTest.file?(file)
+  end
+
+  def self.pipe?(file)
+    FileTest.pipe?(file)
+  end
+
+  def self.size(file)
+    FileTest.size(file)
+  end
+
+  def self.size?(file)
+    FileTest.size?(file)
+  end
+
+  def self.socket?(file)
+    FileTest.socket?(file)
+  end
+
+  def self.symlink?(file)
+    FileTest.symlink?(file)
+  end
+
+  def self.zero?(file)
+    FileTest.zero?(file)
+  end
+
+  def self.extname(filename)
+    fname = self.basename(filename)
+    return '' if fname[0] == '.' || fname.index('.').nil?
+    ext = fname.split('.').last
+    ext.empty? ? '' : ".#{ext}"
+  end
+
+  def self.path(filename)
+    if filename.kind_of?(String)
+      filename
+    elsif filename.respond_to?(:to_path)
+      filename.to_path
+    else
+      raise TypeError, "no implicit conversion of #{filename.class} into String"
+    end
+  end
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-io/mrblib/file_constants.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-io/mrblib/file_constants.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-io/mrblib/file_constants.rb	(revision 439)
@@ -0,0 +1,13 @@
+class File
+  module Constants
+    FNM_SYSCASE  = 0
+    FNM_NOESCAPE = 1
+    FNM_PATHNAME = 2
+    FNM_DOTMATCH = 4
+    FNM_CASEFOLD = 8
+  end
+end
+
+class File
+  include File::Constants
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-io/mrblib/io.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-io/mrblib/io.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-io/mrblib/io.rb	(revision 439)
@@ -0,0 +1,369 @@
+##
+# IO
+
+class IOError < StandardError; end
+class EOFError < IOError; end
+
+class IO
+  SEEK_SET = 0
+  SEEK_CUR = 1
+  SEEK_END = 2
+
+  BUF_SIZE = 4096
+
+  def self.open(*args, &block)
+    io = self.new(*args)
+
+    return io unless block
+
+    begin
+      yield io
+    ensure
+      begin
+        io.close unless io.closed?
+      rescue StandardError
+      end
+    end
+  end
+
+  def self.popen(command, mode = 'r', opts={}, &block)
+    if !self.respond_to?(:_popen)
+      raise NotImplementedError, "popen is not supported on this platform"
+    end
+    io = self._popen(command, mode, opts)
+    return io unless block
+
+    begin
+      yield io
+    ensure
+      begin
+        io.close unless io.closed?
+      rescue IOError
+        # nothing
+      end
+    end
+  end
+
+  def self.pipe(&block)
+    if !self.respond_to?(:_pipe)
+      raise NotImplementedError, "pipe is not supported on this platform"
+    end
+    if block
+      begin
+        r, w = IO._pipe
+        yield r, w
+      ensure
+        r.close unless r.closed?
+        w.close unless w.closed?
+      end
+    else
+      IO._pipe
+    end
+  end
+
+  def self.read(path, length=nil, offset=nil, opt=nil)
+    if not opt.nil?        # 4 arguments
+      offset ||= 0
+    elsif not offset.nil?  # 3 arguments
+      if offset.is_a? Hash
+        opt = offset
+        offset = 0
+      else
+        opt = {}
+      end
+    elsif not length.nil?  # 2 arguments
+      if length.is_a? Hash
+        opt = length
+        offset = 0
+        length = nil
+      else
+        offset = 0
+        opt = {}
+      end
+    else                   # only 1 argument
+      opt = {}
+      offset = 0
+      length = nil
+    end
+
+    str = ""
+    fd = -1
+    io = nil
+    begin
+      if path[0] == "|"
+        io = IO.popen(path[1..-1], (opt[:mode] || "r"))
+      else
+        mode = opt[:mode] || "r"
+        fd = IO.sysopen(path, mode)
+        io = IO.open(fd, mode)
+      end
+      io.seek(offset) if offset > 0
+      str = io.read(length)
+    ensure
+      if io
+        io.close
+      elsif fd != -1
+        IO._sysclose(fd)
+      end
+    end
+    str
+  end
+
+  def flush
+    # mruby-io always writes immediately (no output buffer).
+    raise IOError, "closed stream" if self.closed?
+    self
+  end
+
+  def hash
+    # We must define IO#hash here because IO includes Enumerable and
+    # Enumerable#hash will call IO#read...
+    self.__id__
+  end
+
+  def write(string)
+    str = string.is_a?(String) ? string : string.to_s
+    return 0 if str.empty?
+    unless @buf.empty?
+      # reset real pos ignore buf
+      seek(pos, SEEK_SET)
+    end
+    len = syswrite(str)
+    len
+  end
+
+  def <<(str)
+    write(str)
+    self
+  end
+
+  def eof?
+    _check_readable
+    begin
+      _read_buf
+      return @buf.empty?
+    rescue EOFError
+      return true
+    end
+  end
+  alias_method :eof, :eof?
+
+  def pos
+    raise IOError if closed?
+    sysseek(0, SEEK_CUR) - @buf.bytesize
+  end
+  alias_method :tell, :pos
+
+  def pos=(i)
+    seek(i, SEEK_SET)
+  end
+
+  def rewind
+    seek(0, SEEK_SET)
+  end
+
+  def seek(i, whence = SEEK_SET)
+    raise IOError if closed?
+    sysseek(i, whence)
+    @buf = ''
+    0
+  end
+
+  def _read_buf
+    return @buf if @buf && @buf.bytesize > 0
+    sysread(BUF_SIZE, @buf)
+  end
+
+  def ungetc(substr)
+    raise TypeError.new "expect String, got #{substr.class}" unless substr.is_a?(String)
+    if @buf.empty?
+      @buf.replace(substr)
+    else
+      @buf[0,0] = substr
+    end
+    nil
+  end
+
+  def read(length = nil, outbuf = "")
+    unless length.nil?
+      unless length.is_a? Fixnum
+        raise TypeError.new "can't convert #{length.class} into Integer"
+      end
+      if length < 0
+        raise ArgumentError.new "negative length: #{length} given"
+      end
+      if length == 0
+        return ""   # easy case
+      end
+    end
+
+    array = []
+    while 1
+      begin
+        _read_buf
+      rescue EOFError
+        array = nil if array.empty? and (not length.nil?) and length != 0
+        break
+      end
+
+      if length
+        consume = (length <= @buf.bytesize) ? length : @buf.bytesize
+        array.push IO._bufread(@buf, consume)
+        length -= consume
+        break if length == 0
+      else
+        array.push @buf
+        @buf = ''
+      end
+    end
+
+    if array.nil?
+      outbuf.replace("")
+      nil
+    else
+      outbuf.replace(array.join)
+    end
+  end
+
+  def readline(arg = "\n", limit = nil)
+    case arg
+    when String
+      rs = arg
+    when Fixnum
+      rs = "\n"
+      limit = arg
+    else
+      raise ArgumentError
+    end
+
+    if rs.nil?
+      return read
+    end
+
+    if rs == ""
+      rs = "\n\n"
+    end
+
+    array = []
+    while 1
+      begin
+        _read_buf
+      rescue EOFError
+        array = nil if array.empty?
+        break
+      end
+
+      if limit && limit <= @buf.size
+        array.push @buf[0, limit]
+        @buf[0, limit] = ""
+        break
+      elsif idx = @buf.index(rs)
+        len = idx + rs.size
+        array.push @buf[0, len]
+        @buf[0, len] = ""
+        break
+      else
+        array.push @buf
+        @buf = ''
+      end
+    end
+
+    raise EOFError.new "end of file reached" if array.nil?
+
+    array.join
+  end
+
+  def gets(*args)
+    begin
+      readline(*args)
+    rescue EOFError
+      nil
+    end
+  end
+
+  def readchar
+    _read_buf
+    _readchar(@buf)
+  end
+
+  def getc
+    begin
+      readchar
+    rescue EOFError
+      c = @buf[0]
+      @buf[0,1]="" if c
+      nil
+    end
+  end
+
+  # 15.2.20.5.3
+  def each(&block)
+    return to_enum unless block
+
+    while line = self.gets
+      block.call(line)
+    end
+    self
+  end
+
+  # 15.2.20.5.4
+  def each_byte(&block)
+    return to_enum(:each_byte) unless block
+
+    while char = self.getc
+      block.call(char)
+    end
+    self
+  end
+
+  # 15.2.20.5.5
+  alias each_line each
+
+  alias each_char each_byte
+
+  def readlines
+    ary = []
+    while (line = gets)
+      ary << line
+    end
+    ary
+  end
+
+  def puts(*args)
+    i = 0
+    len = args.size
+    while i < len
+      s = args[i].to_s
+      write s
+      write "\n" if (s[-1] != "\n")
+      i += 1
+    end
+    write "\n" if len == 0
+    nil
+  end
+
+  def print(*args)
+    i = 0
+    len = args.size
+    while i < len
+      write args[i].to_s
+      i += 1
+    end
+  end
+
+  def printf(*args)
+    write sprintf(*args)
+    nil
+  end
+
+  alias_method :to_i, :fileno
+  alias_method :tty?, :isatty
+end
+
+STDIN  = IO.open(0, "r")
+STDOUT = IO.open(1, "w")
+STDERR = IO.open(2, "w")
+
+$stdin  = STDIN
+$stdout = STDOUT
+$stderr = STDERR
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-io/mrblib/kernel.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-io/mrblib/kernel.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-io/mrblib/kernel.rb	(revision 439)
@@ -0,0 +1,31 @@
+module Kernel
+  def `(cmd)
+    IO.popen(cmd) { |io| io.read }
+  end
+
+  def open(file, *rest, &block)
+    raise ArgumentError unless file.is_a?(String)
+
+    if file[0] == "|"
+      IO.popen(file[1..-1], *rest, &block)
+    else
+      File.open(file, *rest, &block)
+    end
+  end
+
+  def print(*args)
+    $stdout.print(*args)
+  end
+
+  def puts(*args)
+    $stdout.puts(*args)
+  end
+
+  def printf(*args)
+    $stdout.printf(*args)
+  end
+
+  def gets(*args)
+    $stdin.gets(*args)
+  end
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-io/src/file.c
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-io/src/file.c	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-io/src/file.c	(revision 439)
@@ -0,0 +1,703 @@
+/*
+** file.c - File class
+*/
+
+#include "mruby.h"
+#include "mruby/class.h"
+#include "mruby/data.h"
+#include "mruby/string.h"
+#include "mruby/ext/io.h"
+#include "mruby/error.h"
+
+#include <sys/types.h>
+#if !defined(AZURE_SPHERE)
+#include <sys/stat.h>
+#else
+mode_t umask(mode_t);
+int chmod(const char *, mode_t);
+#endif
+
+#include <fcntl.h>
+#include <limits.h>
+
+#include <errno.h>
+#include <stdlib.h>
+#include <string.h>
+#if defined(_WIN32) || defined(_WIN64)
+  #include <windows.h>
+  #include <io.h>
+  #define NULL_FILE "NUL"
+  #define UNLINK _unlink
+  #define GETCWD _getcwd
+  #define CHMOD(a, b) 0
+  #define MAXPATHLEN 1024
+ #if !defined(PATH_MAX)
+  #define PATH_MAX _MAX_PATH
+ #endif
+  #define realpath(N,R) _fullpath((R),(N),_MAX_PATH)
+  #include <direct.h>
+#else
+  #define NULL_FILE "/dev/null"
+  #include <unistd.h>
+  #define UNLINK unlink
+  #define GETCWD getcwd
+  #define CHMOD(a, b) chmod(a,b)
+#if !defined(AZURE_SPHERE)
+  #include <sys/file.h>
+  #include <libgen.h>
+#else
+char *basename(char *);
+#endif
+  #include <sys/param.h>
+#if !defined(AZURE_SPHERE)
+  #include <pwd.h>
+#endif
+#endif
+
+#if defined(AZURE_SPHERE)
+  #include <time.h>
+int unlink(const char *);
+ssize_t readlink(const char *__restrict, char *__restrict, size_t);
+int symlink(const char *, const char *);
+int rename(const char *, const char *);
+int ftruncate(int, off_t);
+char *realpath (const char *__restrict, char *__restrict);
+char *getcwd(char *, size_t);
+struct passwd {
+  char *pw_dir;
+};
+struct passwd *getpwnam (const char *);
+struct stat {
+  mode_t st_mode;
+  struct timespec st_mtim;
+  off_t st_size;
+};
+#define st_mtime st_mtim.tv_sec
+int fstat(int, struct stat *);
+int flock(int, int);
+char *dirname(char *);
+#endif
+
+#define FILE_SEPARATOR "/"
+
+#if defined(_WIN32) || defined(_WIN64)
+  #define PATH_SEPARATOR ";"
+  #define FILE_ALT_SEPARATOR "\\"
+  #define VOLUME_SEPARATOR ":"
+#else
+  #define PATH_SEPARATOR ":"
+#endif
+
+#ifndef LOCK_SH
+#define LOCK_SH 1
+#endif
+#ifndef LOCK_EX
+#define LOCK_EX 2
+#endif
+#ifndef LOCK_NB
+#define LOCK_NB 4
+#endif
+#ifndef LOCK_UN
+#define LOCK_UN 8
+#endif
+
+#ifndef _WIN32
+typedef struct stat         mrb_stat;
+# define mrb_stat(path, sb) stat(path, sb)
+# define mrb_fstat(fd, sb)  fstat(fd, sb)
+#else
+typedef struct __stat64     mrb_stat;
+# define mrb_stat(path, sb) _stat64(path, sb)
+# define mrb_fstat(fd, sb)  _fstat64(fd, sb)
+#endif
+
+#ifdef _WIN32
+static int
+flock(int fd, int operation) {
+  OVERLAPPED ov;
+  HANDLE h = (HANDLE)_get_osfhandle(fd);
+  DWORD flags;
+  flags = ((operation & LOCK_NB) ? LOCKFILE_FAIL_IMMEDIATELY : 0)
+          | ((operation & LOCK_SH) ? LOCKFILE_EXCLUSIVE_LOCK : 0);
+  memset(&ov, 0, sizeof(ov));
+  return LockFileEx(h, flags, 0, 0xffffffff, 0xffffffff, &ov) ? 0 : -1;
+}
+#endif
+
+mrb_value
+mrb_file_s_umask(mrb_state *mrb, mrb_value klass)
+{
+#if defined(_WIN32) || defined(_WIN64)
+  /* nothing to do on windows */
+  return mrb_fixnum_value(0);
+
+#else
+  mrb_int mask, omask;
+  if (mrb_get_args(mrb, "|i", &mask) == 0) {
+    omask = umask(0);
+    umask(omask);
+  } else {
+    omask = umask(mask);
+  }
+  return mrb_fixnum_value(omask);
+#endif
+}
+
+static mrb_value
+mrb_file_s_unlink(mrb_state *mrb, mrb_value obj)
+{
+  mrb_value *argv;
+  mrb_value pathv;
+  mrb_int argc, i;
+  char *path;
+
+  mrb_get_args(mrb, "*", &argv, &argc);
+  for (i = 0; i < argc; i++) {
+    const char *utf8_path;
+    pathv = mrb_ensure_string_type(mrb, argv[i]);
+    utf8_path = RSTRING_CSTR(mrb, pathv);
+    path = mrb_locale_from_utf8(utf8_path, -1);
+    if (UNLINK(path) < 0) {
+      mrb_locale_free(path);
+      mrb_sys_fail(mrb, utf8_path);
+    }
+    mrb_locale_free(path);
+  }
+  return mrb_fixnum_value(argc);
+}
+
+static mrb_value
+mrb_file_s_rename(mrb_state *mrb, mrb_value obj)
+{
+  mrb_value from, to;
+  char *src, *dst;
+
+  mrb_get_args(mrb, "SS", &from, &to);
+  src = mrb_locale_from_utf8(RSTRING_CSTR(mrb, from), -1);
+  dst = mrb_locale_from_utf8(RSTRING_CSTR(mrb, to), -1);
+  if (rename(src, dst) < 0) {
+#if defined(_WIN32) || defined(_WIN64)
+    if (CHMOD(dst, 0666) == 0 && UNLINK(dst) == 0 && rename(src, dst) == 0) {
+      mrb_locale_free(src);
+      mrb_locale_free(dst);
+      return mrb_fixnum_value(0);
+    }
+#endif
+    mrb_locale_free(src);
+    mrb_locale_free(dst);
+    mrb_sys_fail(mrb, RSTRING_CSTR(mrb, mrb_format(mrb, "(%v, %v)", from, to)));
+    return mrb_fixnum_value(-1); /* not reached */
+  }
+  mrb_locale_free(src);
+  mrb_locale_free(dst);
+  return mrb_fixnum_value(0);
+}
+
+static mrb_value
+mrb_file_dirname(mrb_state *mrb, mrb_value klass)
+{
+#if defined(_WIN32) || defined(_WIN64)
+  char dname[_MAX_DIR], vname[_MAX_DRIVE];
+  char buffer[_MAX_DRIVE + _MAX_DIR];
+  const char *utf8_path;
+  char *path;
+  size_t ridx;
+  mrb_get_args(mrb, "z", &utf8_path);
+  path = mrb_locale_from_utf8(utf8_path, -1);
+  _splitpath(path, vname, dname, NULL, NULL);
+  snprintf(buffer, _MAX_DRIVE + _MAX_DIR, "%s%s", vname, dname);
+  mrb_locale_free(path);
+  ridx = strlen(buffer);
+  if (ridx == 0) {
+    strncpy(buffer, ".", 2);  /* null terminated */
+  } else if (ridx > 1) {
+    ridx--;
+    while (ridx > 0 && (buffer[ridx] == '/' || buffer[ridx] == '\\')) {
+      buffer[ridx] = '\0';  /* remove last char */
+      ridx--;
+    }
+  }
+  return mrb_str_new_cstr(mrb, buffer);
+#else
+  char *dname, *path;
+  mrb_value s;
+  mrb_get_args(mrb, "S", &s);
+  path = mrb_locale_from_utf8(mrb_str_to_cstr(mrb, s), -1);
+
+  if ((dname = dirname(path)) == NULL) {
+    mrb_locale_free(path);
+    mrb_sys_fail(mrb, "dirname");
+  }
+  mrb_locale_free(path);
+  return mrb_str_new_cstr(mrb, dname);
+#endif
+}
+
+static mrb_value
+mrb_file_basename(mrb_state *mrb, mrb_value klass)
+{
+  // NOTE: Do not use mrb_locale_from_utf8 here
+#if defined(_WIN32) || defined(_WIN64)
+  char bname[_MAX_DIR];
+  char extname[_MAX_EXT];
+  char *path;
+  size_t ridx;
+  char buffer[_MAX_DIR + _MAX_EXT];
+  mrb_value s;
+
+  mrb_get_args(mrb, "S", &s);
+  path = mrb_str_to_cstr(mrb, s);
+  ridx = strlen(path);
+  if (ridx > 0) {
+    ridx--;
+    while (ridx > 0 && (path[ridx] == '/' || path[ridx] == '\\')) {
+      path[ridx] = '\0';
+      ridx--;
+    }
+    if (strncmp(path, "/", 2) == 0) {
+      return mrb_str_new_cstr(mrb, path);
+    }
+  }
+  _splitpath((const char*)path, NULL, NULL, bname, extname);
+  snprintf(buffer, _MAX_DIR + _MAX_EXT, "%s%s", bname, extname);
+  return mrb_str_new_cstr(mrb, buffer);
+#else
+  char *bname, *path;
+  mrb_value s;
+  mrb_get_args(mrb, "S", &s);
+  path = mrb_str_to_cstr(mrb, s);
+  if ((bname = basename(path)) == NULL) {
+    mrb_sys_fail(mrb, "basename");
+  }
+  if (strncmp(bname, "//", 3) == 0) bname[1] = '\0';  /* patch for Cygwin */
+  return mrb_str_new_cstr(mrb, bname);
+#endif
+}
+
+static mrb_value
+mrb_file_realpath(mrb_state *mrb, mrb_value klass)
+{
+  mrb_value pathname, dir_string, s, result;
+  mrb_int argc;
+  char *cpath;
+
+  argc = mrb_get_args(mrb, "S|S", &pathname, &dir_string);
+  if (argc == 2) {
+    s = mrb_str_dup(mrb, dir_string);
+    s = mrb_str_append(mrb, s, mrb_str_new_cstr(mrb, FILE_SEPARATOR));
+    s = mrb_str_append(mrb, s, pathname);
+    pathname = s;
+  }
+  cpath = mrb_locale_from_utf8(RSTRING_CSTR(mrb, pathname), -1);
+  result = mrb_str_buf_new(mrb, PATH_MAX);
+  if (realpath(cpath, RSTRING_PTR(result)) == NULL) {
+    mrb_locale_free(cpath);
+    mrb_sys_fail(mrb, cpath);
+    return result;              /* not reached */
+  }
+  mrb_locale_free(cpath);
+  mrb_str_resize(mrb, result, strlen(RSTRING_PTR(result)));
+  return result;
+}
+
+mrb_value
+mrb_file__getwd(mrb_state *mrb, mrb_value klass)
+{
+  mrb_value path;
+  char buf[MAXPATHLEN], *utf8;
+
+  if (GETCWD(buf, MAXPATHLEN) == NULL) {
+    mrb_sys_fail(mrb, "getcwd(2)");
+  }
+  utf8 = mrb_utf8_from_locale(buf, -1);
+  path = mrb_str_new_cstr(mrb, utf8);
+  mrb_utf8_free(utf8);
+  return path;
+}
+
+#ifdef _WIN32
+#define IS_FILESEP(x) (x == (*(char*)(FILE_SEPARATOR)) || x == (*(char*)(FILE_ALT_SEPARATOR)))
+#define IS_VOLSEP(x) (x == (*(char*)(VOLUME_SEPARATOR)))
+#define IS_DEVICEID(x) (x == '.' || x == '?')
+#define CHECK_UNCDEV_PATH (IS_FILESEP(path[0]) && IS_FILESEP(path[1]))
+
+static int 
+is_absolute_traditional_path(const char *path, size_t len)
+{
+  if (len < 3) return 0;
+  return (ISALPHA(path[0]) && IS_VOLSEP(path[1]) && IS_FILESEP(path[2]));
+}
+
+static int 
+is_aboslute_unc_path(const char *path, size_t len) {
+  if (len < 2) return 0;
+  return (CHECK_UNCDEV_PATH && !IS_DEVICEID(path[2]));
+}
+
+static int 
+is_absolute_device_path(const char *path, size_t len) {
+  if (len < 4) return 0;
+  return (CHECK_UNCDEV_PATH && IS_DEVICEID(path[2]) && IS_FILESEP(path[3]));
+}
+
+static int
+mrb_file_is_absolute_path(const char *path)
+{
+  size_t len = strlen(path);
+  if (IS_FILESEP(path[0])) return 1;
+  if (len > 0)
+    return (
+      is_absolute_traditional_path(path, len) || 
+      is_aboslute_unc_path(path, len) || 
+      is_absolute_device_path(path, len)
+      );
+  else
+    return 0;
+}
+
+#undef IS_FILESEP
+#undef IS_VOLSEP
+#undef IS_DEVICEID
+#undef CHECK_UNCDEV_PATH
+
+#else
+static int
+mrb_file_is_absolute_path(const char *path)
+{
+  return (path[0] == *(char*)(FILE_SEPARATOR));
+}
+#endif
+
+static mrb_value
+mrb_file__gethome(mrb_state *mrb, mrb_value klass)
+{
+  mrb_int argc;
+  char *home;
+  mrb_value path;
+
+#ifndef _WIN32
+  mrb_value username;
+
+  argc = mrb_get_args(mrb, "|S", &username);
+  if (argc == 0) {
+    home = getenv("HOME");
+    if (home == NULL) {
+      return mrb_nil_value();
+    }
+    if (!mrb_file_is_absolute_path(home)) {
+      mrb_raise(mrb, E_ARGUMENT_ERROR, "non-absolute home");
+    }
+  } else {
+    const char *cuser = RSTRING_CSTR(mrb, username);
+    struct passwd *pwd = getpwnam(cuser);
+    if (pwd == NULL) {
+      return mrb_nil_value();
+    }
+    home = pwd->pw_dir;
+    if (!mrb_file_is_absolute_path(home)) {
+      mrb_raisef(mrb, E_ARGUMENT_ERROR, "non-absolute home of ~%v", username);
+    }
+  }
+  home = mrb_locale_from_utf8(home, -1);
+  path = mrb_str_new_cstr(mrb, home);
+  mrb_locale_free(home);
+  return path;
+#else  /* _WIN32 */
+  argc = mrb_get_argc(mrb);
+  if (argc == 0) {
+    home = getenv("USERPROFILE");
+    if (home == NULL) {
+      return mrb_nil_value();
+    }
+    if (!mrb_file_is_absolute_path(home)) {
+      mrb_raise(mrb, E_ARGUMENT_ERROR, "non-absolute home");
+    }
+  } else {
+    return mrb_nil_value();
+  }
+  home = mrb_locale_from_utf8(home, -1);
+  path = mrb_str_new_cstr(mrb, home);
+  mrb_locale_free(home);
+  return path;
+#endif
+}
+
+static mrb_value
+mrb_file_mtime(mrb_state *mrb, mrb_value self)
+{
+  mrb_value obj;
+  struct stat st;
+  int fd;
+
+  obj = mrb_obj_value(mrb_class_get(mrb, "Time"));
+  fd = mrb_io_fileno(mrb, self);
+  if (fstat(fd, &st) == -1)
+    return mrb_false_value();
+  return mrb_funcall(mrb, obj, "at", 1, mrb_fixnum_value(st.st_mtime));
+}
+
+mrb_value
+mrb_file_flock(mrb_state *mrb, mrb_value self)
+{
+#if defined(sun)
+  mrb_raise(mrb, E_NOTIMP_ERROR, "flock is not supported on Illumos/Solaris/Windows");
+#else
+  mrb_int operation;
+  int fd;
+
+  mrb_get_args(mrb, "i", &operation);
+  fd = mrb_io_fileno(mrb, self);
+
+  while (flock(fd, (int)operation) == -1) {
+    switch (errno) {
+      case EINTR:
+        /* retry */
+        break;
+      case EAGAIN:      /* NetBSD */
+#if defined(EWOULDBLOCK) && EWOULDBLOCK != EAGAIN
+      case EWOULDBLOCK: /* FreeBSD OpenBSD Linux */
+#endif
+        if (operation & LOCK_NB) {
+          return mrb_false_value();
+        }
+        /* FALLTHRU - should not happen */
+      default:
+        mrb_sys_fail(mrb, "flock failed");
+        break;
+    }
+  }
+#endif
+  return mrb_fixnum_value(0);
+}
+
+static mrb_value
+mrb_file_size(mrb_state *mrb, mrb_value self)
+{
+  mrb_stat st;
+  int fd;
+
+  fd = mrb_io_fileno(mrb, self);
+  if (mrb_fstat(fd, &st) == -1) {
+    mrb_raise(mrb, E_RUNTIME_ERROR, "fstat failed");
+  }
+
+  if (st.st_size > MRB_INT_MAX) {
+#ifdef MRB_WITHOUT_FLOAT
+    mrb_raise(mrb, E_RUNTIME_ERROR, "File#size too large for MRB_WITHOUT_FLOAT");
+#else
+    return mrb_float_value(mrb, (mrb_float)st.st_size);
+#endif
+  }
+
+  return mrb_fixnum_value((mrb_int)st.st_size);
+}
+
+static int
+mrb_ftruncate(int fd, int64_t length)
+{
+#ifndef _WIN32
+  return ftruncate(fd, (off_t)length);
+#else
+  HANDLE file;
+  __int64 cur;
+
+  file = (HANDLE)_get_osfhandle(fd);
+  if (file == INVALID_HANDLE_VALUE) {
+    return -1;
+  }
+
+  cur = _lseeki64(fd, 0, SEEK_CUR);
+  if (cur == -1) return -1;
+
+  if (_lseeki64(fd, (__int64)length, SEEK_SET) == -1) return -1;
+
+  if (!SetEndOfFile(file)) {
+    errno = EINVAL; /* TODO: GetLastError to errno */
+    return -1;
+  }
+
+  if (_lseeki64(fd, cur, SEEK_SET) == -1) return -1;
+
+  return 0;
+#endif /* _WIN32 */
+}
+
+static mrb_value
+mrb_file_truncate(mrb_state *mrb, mrb_value self)
+{
+  int fd;
+  int64_t length;
+  mrb_value lenv;
+
+  fd = mrb_io_fileno(mrb, self);
+  mrb_get_args(mrb, "o", &lenv);
+  switch (mrb_type(lenv)) {
+#ifndef MRB_WITHOUT_FLOAT
+    case MRB_TT_FLOAT:
+      {
+        mrb_float lenf = mrb_float(lenv);
+        if (lenf > INT64_MAX) {
+          mrb_raise(mrb, E_ARGUMENT_ERROR, "length too large");
+        }
+        length = (int64_t)lenf;
+      }
+      break;
+#endif
+    case MRB_TT_FIXNUM:
+    default:
+      {
+        mrb_int leni = mrb_int(mrb, lenv);
+        length = (int64_t)leni;
+      }
+      break;
+  }
+
+  if (mrb_ftruncate(fd, length) != 0) {
+    mrb_raise(mrb, E_IO_ERROR, "ftruncate failed");
+  }
+
+  return mrb_fixnum_value(0);
+}
+
+static mrb_value
+mrb_file_s_symlink(mrb_state *mrb, mrb_value klass)
+{
+#if defined(_WIN32) || defined(_WIN64)
+  mrb_raise(mrb, E_NOTIMP_ERROR, "symlink is not supported on this platform");
+#else
+  mrb_value from, to;
+  const char *src, *dst;
+  int ai = mrb_gc_arena_save(mrb);
+
+  mrb_get_args(mrb, "SS", &from, &to);
+  src = mrb_locale_from_utf8(RSTRING_CSTR(mrb, from), -1);
+  dst = mrb_locale_from_utf8(RSTRING_CSTR(mrb, to), -1);
+  if (symlink(src, dst) == -1) {
+    mrb_locale_free(src);
+    mrb_locale_free(dst);
+    mrb_sys_fail(mrb, RSTRING_CSTR(mrb, mrb_format(mrb, "(%v, %v)", from, to)));
+  }
+  mrb_locale_free(src);
+  mrb_locale_free(dst);
+  mrb_gc_arena_restore(mrb, ai);
+#endif
+  return mrb_fixnum_value(0);
+}
+
+static mrb_value
+mrb_file_s_chmod(mrb_state *mrb, mrb_value klass) {
+  mrb_int mode;
+  mrb_int argc, i;
+  mrb_value *filenames;
+  int ai = mrb_gc_arena_save(mrb);
+
+  mrb_get_args(mrb, "i*", &mode, &filenames, &argc);
+  for (i = 0; i < argc; i++) {
+    const char *utf8_path = RSTRING_CSTR(mrb, filenames[i]);
+    char *path = mrb_locale_from_utf8(utf8_path, -1);
+    if (CHMOD(path, mode) == -1) {
+      mrb_locale_free(path);
+      mrb_sys_fail(mrb, utf8_path);
+    }
+    mrb_locale_free(path);
+    mrb_gc_arena_restore(mrb, ai);
+  }
+
+  return mrb_fixnum_value(argc);
+}
+
+static mrb_value
+mrb_file_s_readlink(mrb_state *mrb, mrb_value klass) {
+#if defined(_WIN32) || defined(_WIN64)
+  mrb_raise(mrb, E_NOTIMP_ERROR, "readlink is not supported on this platform");
+  return mrb_nil_value(); // unreachable
+#else
+  char *path, *buf, *tmp;
+  size_t bufsize = 100;
+  ssize_t rc;
+  mrb_value ret;
+  int ai = mrb_gc_arena_save(mrb);
+
+  mrb_get_args(mrb, "z", &path);
+  tmp = mrb_locale_from_utf8(path, -1);
+
+  buf = (char *)mrb_malloc(mrb, bufsize);
+  while ((rc = readlink(tmp, buf, bufsize)) == (ssize_t)bufsize && rc != -1) {
+    bufsize *= 2;
+    buf = (char *)mrb_realloc(mrb, buf, bufsize);
+  }
+  mrb_locale_free(tmp);
+  if (rc == -1) {
+    mrb_free(mrb, buf);
+    mrb_sys_fail(mrb, path);
+  }
+  tmp = mrb_utf8_from_locale(buf, -1);
+  ret = mrb_str_new(mrb, tmp, rc);
+  mrb_locale_free(tmp);
+  mrb_free(mrb, buf);
+
+  mrb_gc_arena_restore(mrb, ai);
+  return ret;
+#endif
+}
+
+void
+mrb_init_file(mrb_state *mrb)
+{
+  struct RClass *io, *file, *cnst;
+
+  io   = mrb_class_get(mrb, "IO");
+  file = mrb_define_class(mrb, "File", io);
+  MRB_SET_INSTANCE_TT(file, MRB_TT_DATA);
+  mrb_define_class_method(mrb, file, "umask",  mrb_file_s_umask, MRB_ARGS_OPT(1));
+  mrb_define_class_method(mrb, file, "delete", mrb_file_s_unlink, MRB_ARGS_ANY());
+  mrb_define_class_method(mrb, file, "unlink", mrb_file_s_unlink, MRB_ARGS_ANY());
+  mrb_define_class_method(mrb, file, "rename", mrb_file_s_rename, MRB_ARGS_REQ(2));
+  mrb_define_class_method(mrb, file, "symlink", mrb_file_s_symlink, MRB_ARGS_REQ(2));
+  mrb_define_class_method(mrb, file, "chmod", mrb_file_s_chmod, MRB_ARGS_REQ(1) | MRB_ARGS_REST());
+  mrb_define_class_method(mrb, file, "readlink", mrb_file_s_readlink, MRB_ARGS_REQ(1));
+
+  mrb_define_class_method(mrb, file, "dirname",   mrb_file_dirname,    MRB_ARGS_REQ(1));
+  mrb_define_class_method(mrb, file, "basename",  mrb_file_basename,   MRB_ARGS_REQ(1));
+  mrb_define_class_method(mrb, file, "realpath",  mrb_file_realpath,   MRB_ARGS_REQ(1)|MRB_ARGS_OPT(1));
+  mrb_define_class_method(mrb, file, "_getwd",    mrb_file__getwd,     MRB_ARGS_NONE());
+  mrb_define_class_method(mrb, file, "_gethome",  mrb_file__gethome,   MRB_ARGS_OPT(1));
+
+  mrb_define_method(mrb, file, "flock", mrb_file_flock, MRB_ARGS_REQ(1));
+  mrb_define_method(mrb, file, "mtime", mrb_file_mtime, MRB_ARGS_NONE());
+  mrb_define_method(mrb, file, "size", mrb_file_size, MRB_ARGS_NONE());
+  mrb_define_method(mrb, file, "truncate", mrb_file_truncate, MRB_ARGS_REQ(1));
+
+  cnst = mrb_define_module_under(mrb, file, "Constants");
+  mrb_define_const(mrb, cnst, "LOCK_SH", mrb_fixnum_value(LOCK_SH));
+  mrb_define_const(mrb, cnst, "LOCK_EX", mrb_fixnum_value(LOCK_EX));
+  mrb_define_const(mrb, cnst, "LOCK_UN", mrb_fixnum_value(LOCK_UN));
+  mrb_define_const(mrb, cnst, "LOCK_NB", mrb_fixnum_value(LOCK_NB));
+  mrb_define_const(mrb, cnst, "SEPARATOR", mrb_str_new_cstr(mrb, FILE_SEPARATOR));
+  mrb_define_const(mrb, cnst, "PATH_SEPARATOR", mrb_str_new_cstr(mrb, PATH_SEPARATOR));
+#if defined(_WIN32) || defined(_WIN64)
+  mrb_define_const(mrb, cnst, "ALT_SEPARATOR", mrb_str_new_cstr(mrb, FILE_ALT_SEPARATOR));
+#else
+  mrb_define_const(mrb, cnst, "ALT_SEPARATOR", mrb_nil_value());
+#endif
+  mrb_define_const(mrb, cnst, "NULL", mrb_str_new_cstr(mrb, NULL_FILE));
+
+  mrb_define_const(mrb, cnst, "RDONLY", mrb_fixnum_value(MRB_O_RDONLY));
+  mrb_define_const(mrb, cnst, "WRONLY", mrb_fixnum_value(MRB_O_WRONLY));
+  mrb_define_const(mrb, cnst, "RDWR", mrb_fixnum_value(MRB_O_RDWR));
+  mrb_define_const(mrb, cnst, "APPEND", mrb_fixnum_value(MRB_O_APPEND));
+  mrb_define_const(mrb, cnst, "CREAT", mrb_fixnum_value(MRB_O_CREAT));
+  mrb_define_const(mrb, cnst, "EXCL", mrb_fixnum_value(MRB_O_EXCL));
+  mrb_define_const(mrb, cnst, "TRUNC", mrb_fixnum_value(MRB_O_TRUNC));
+  mrb_define_const(mrb, cnst, "NONBLOCK", mrb_fixnum_value(MRB_O_NONBLOCK));
+  mrb_define_const(mrb, cnst, "NOCTTY", mrb_fixnum_value(MRB_O_NOCTTY));
+  mrb_define_const(mrb, cnst, "BINARY", mrb_fixnum_value(MRB_O_BINARY));
+  mrb_define_const(mrb, cnst, "SHARE_DELETE", mrb_fixnum_value(MRB_O_SHARE_DELETE));
+  mrb_define_const(mrb, cnst, "SYNC", mrb_fixnum_value(MRB_O_SYNC));
+  mrb_define_const(mrb, cnst, "DSYNC", mrb_fixnum_value(MRB_O_DSYNC));
+  mrb_define_const(mrb, cnst, "RSYNC", mrb_fixnum_value(MRB_O_RSYNC));
+  mrb_define_const(mrb, cnst, "NOFOLLOW", mrb_fixnum_value(MRB_O_NOFOLLOW));
+  mrb_define_const(mrb, cnst, "NOATIME", mrb_fixnum_value(MRB_O_NOATIME));
+  mrb_define_const(mrb, cnst, "DIRECT", mrb_fixnum_value(MRB_O_DIRECT));
+  mrb_define_const(mrb, cnst, "TMPFILE", mrb_fixnum_value(MRB_O_TMPFILE));
+}
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-io/src/file_test.c
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-io/src/file_test.c	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-io/src/file_test.c	(revision 439)
@@ -0,0 +1,383 @@
+/*
+** file_test.c - FileTest class
+*/
+
+#include "mruby.h"
+#include "mruby/class.h"
+#include "mruby/data.h"
+#include "mruby/string.h"
+#include "mruby/ext/io.h"
+#include "mruby/error.h"
+
+#include <sys/types.h>
+#if !defined(AZURE_SPHERE)
+#include <sys/stat.h>
+#endif
+
+#if defined(_WIN32) || defined(_WIN64)
+  #define LSTAT stat
+  #include <winsock.h>
+#elif defined(AZURE_SPHERE)
+  #define LSTAT lstat
+  #include <sys/param.h>
+  #include <unistd.h>
+  #include <time.h>
+
+struct stat {
+  mode_t st_mode;
+  struct timespec st_mtim;
+  off_t st_size;
+};
+#define S_IFMT  0170000
+#define S_IFDIR 0040000
+#define S_IFREG 0100000
+int stat(const char *__restrict, struct stat *__restrict);
+int fstat(int, struct stat *);
+int lstat(const char *__restrict, struct stat *__restrict);
+#else
+  #define LSTAT lstat
+  #include <sys/file.h>
+  #include <sys/param.h>
+  #include <sys/wait.h>
+  #include <libgen.h>
+  #include <pwd.h>
+  #include <unistd.h>
+#endif
+
+#include <fcntl.h>
+
+#include <errno.h>
+#include <stdlib.h>
+#include <string.h>
+
+extern struct mrb_data_type mrb_io_type;
+
+static int
+mrb_stat0(mrb_state *mrb, mrb_value obj, struct stat *st, int do_lstat)
+{
+  if (mrb_obj_is_kind_of(mrb, obj, mrb_class_get(mrb, "IO"))) {
+    struct mrb_io *fptr;
+    fptr = (struct mrb_io *)mrb_data_get_ptr(mrb, obj, &mrb_io_type);
+
+    if (fptr && fptr->fd >= 0) {
+      return fstat(fptr->fd, st);
+    }
+
+    mrb_raise(mrb, E_IO_ERROR, "closed stream");
+    return -1;
+  }
+  else {
+    char *path = mrb_locale_from_utf8(RSTRING_CSTR(mrb, obj), -1);
+    int ret;
+    if (do_lstat) {
+      ret = LSTAT(path, st);
+    } else {
+      ret = stat(path, st);
+    }
+    mrb_locale_free(path);
+    return ret;
+  }
+}
+
+static int
+mrb_stat(mrb_state *mrb, mrb_value obj, struct stat *st)
+{
+  return mrb_stat0(mrb, obj, st, 0);
+}
+
+static int
+mrb_lstat(mrb_state *mrb, mrb_value obj, struct stat *st)
+{
+  return mrb_stat0(mrb, obj, st, 1);
+}
+
+/*
+ * Document-method: directory?
+ *
+ * call-seq:
+ *   File.directory?(file_name)   ->  true or false
+ *
+ * Returns <code>true</code> if the named file is a directory,
+ * or a symlink that points at a directory, and <code>false</code>
+ * otherwise.
+ *
+ *    File.directory?(".")
+ */
+
+mrb_value
+mrb_filetest_s_directory_p(mrb_state *mrb, mrb_value klass)
+{
+#ifndef S_ISDIR
+#   define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
+#endif
+
+  struct stat st;
+  mrb_value obj;
+
+  mrb_get_args(mrb, "o", &obj);
+
+  if (mrb_stat(mrb, obj, &st) < 0)
+    return mrb_false_value();
+  if (S_ISDIR(st.st_mode))
+    return mrb_true_value();
+
+  return mrb_false_value();
+}
+
+/*
+ * call-seq:
+ *   File.pipe?(file_name)   ->  true or false
+ *
+ * Returns <code>true</code> if the named file is a pipe.
+ */
+
+mrb_value
+mrb_filetest_s_pipe_p(mrb_state *mrb, mrb_value klass)
+{
+#if defined(_WIN32) || defined(_WIN64)
+  mrb_raise(mrb, E_NOTIMP_ERROR, "pipe is not supported on this platform");
+#else
+#ifdef S_IFIFO
+#  ifndef S_ISFIFO
+#    define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO)
+#  endif
+
+  struct stat st;
+  mrb_value obj;
+
+  mrb_get_args(mrb, "o", &obj);
+
+  if (mrb_stat(mrb, obj, &st) < 0)
+    return mrb_false_value();
+  if (S_ISFIFO(st.st_mode))
+    return mrb_true_value();
+
+#endif
+  return mrb_false_value();
+#endif
+}
+
+/*
+ * call-seq:
+ *   File.symlink?(file_name)   ->  true or false
+ *
+ * Returns <code>true</code> if the named file is a symbolic link.
+ */
+
+mrb_value
+mrb_filetest_s_symlink_p(mrb_state *mrb, mrb_value klass)
+{
+#if defined(_WIN32) || defined(_WIN64)
+  mrb_raise(mrb, E_NOTIMP_ERROR, "symlink is not supported on this platform");
+#else
+#ifndef S_ISLNK
+#  ifdef _S_ISLNK
+#    define S_ISLNK(m) _S_ISLNK(m)
+#  else
+#    ifdef _S_IFLNK
+#      define S_ISLNK(m) (((m) & S_IFMT) == _S_IFLNK)
+#    else
+#      ifdef S_IFLNK
+#        define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK)
+#      endif
+#    endif
+#  endif
+#endif
+
+#ifdef S_ISLNK
+  struct stat st;
+  mrb_value obj;
+
+  mrb_get_args(mrb, "o", &obj);
+
+  if (mrb_lstat(mrb, obj, &st) == -1)
+    return mrb_false_value();
+  if (S_ISLNK(st.st_mode))
+    return mrb_true_value();
+#endif
+
+  return mrb_false_value();
+#endif
+}
+
+/*
+ * call-seq:
+ *   File.socket?(file_name)   ->  true or false
+ *
+ * Returns <code>true</code> if the named file is a socket.
+ */
+
+mrb_value
+mrb_filetest_s_socket_p(mrb_state *mrb, mrb_value klass)
+{
+#if defined(_WIN32) || defined(_WIN64)
+  mrb_raise(mrb, E_NOTIMP_ERROR, "socket is not supported on this platform");
+#else
+#ifndef S_ISSOCK
+#  ifdef _S_ISSOCK
+#    define S_ISSOCK(m) _S_ISSOCK(m)
+#  else
+#    ifdef _S_IFSOCK
+#      define S_ISSOCK(m) (((m) & S_IFMT) == _S_IFSOCK)
+#    else
+#      ifdef S_IFSOCK
+#        define S_ISSOCK(m) (((m) & S_IFMT) == S_IFSOCK)
+#      endif
+#    endif
+#  endif
+#endif
+
+#ifdef S_ISSOCK
+  struct stat st;
+  mrb_value obj;
+
+  mrb_get_args(mrb, "o", &obj);
+
+  if (mrb_stat(mrb, obj, &st) < 0)
+    return mrb_false_value();
+  if (S_ISSOCK(st.st_mode))
+    return mrb_true_value();
+#endif
+
+  return mrb_false_value();
+#endif
+}
+
+/*
+ * call-seq:
+ *    File.exist?(file_name)    ->  true or false
+ *    File.exists?(file_name)   ->  true or false
+ *
+ * Return <code>true</code> if the named file exists.
+ */
+
+mrb_value
+mrb_filetest_s_exist_p(mrb_state *mrb, mrb_value klass)
+{
+  struct stat st;
+  mrb_value obj;
+
+  mrb_get_args(mrb, "o", &obj);
+  if (mrb_stat(mrb, obj, &st) < 0)
+    return mrb_false_value();
+
+  return mrb_true_value();
+}
+
+/*
+ * call-seq:
+ *    File.file?(file_name)   -> true or false
+ *
+ * Returns <code>true</code> if the named file exists and is a
+ * regular file.
+ */
+
+mrb_value
+mrb_filetest_s_file_p(mrb_state *mrb, mrb_value klass)
+{
+#ifndef S_ISREG
+#   define S_ISREG(m) (((m) & S_IFMT) == S_IFREG)
+#endif
+
+  struct stat st;
+  mrb_value obj;
+
+  mrb_get_args(mrb, "o", &obj);
+
+  if (mrb_stat(mrb, obj, &st) < 0)
+    return mrb_false_value();
+  if (S_ISREG(st.st_mode))
+    return mrb_true_value();
+
+  return mrb_false_value();
+}
+
+/*
+ * call-seq:
+ *    File.zero?(file_name)   -> true or false
+ *
+ * Returns <code>true</code> if the named file exists and has
+ * a zero size.
+ */
+
+mrb_value
+mrb_filetest_s_zero_p(mrb_state *mrb, mrb_value klass)
+{
+  struct stat st;
+  mrb_value obj;
+
+  mrb_get_args(mrb, "o", &obj);
+
+  if (mrb_stat(mrb, obj, &st) < 0)
+    return mrb_false_value();
+  if (st.st_size == 0)
+    return mrb_true_value();
+
+  return mrb_false_value();
+}
+
+/*
+ * call-seq:
+ *    File.size(file_name)   -> integer
+ *
+ * Returns the size of <code>file_name</code>.
+ *
+ * _file_name_ can be an IO object.
+ */
+
+mrb_value
+mrb_filetest_s_size(mrb_state *mrb, mrb_value klass)
+{
+  struct stat st;
+  mrb_value obj;
+
+  mrb_get_args(mrb, "o", &obj);
+
+  if (mrb_stat(mrb, obj, &st) < 0)
+    mrb_sys_fail(mrb, "mrb_stat");
+
+  return mrb_fixnum_value(st.st_size);
+}
+
+/*
+ * call-seq:
+ *    File.size?(file_name)   -> Integer or nil
+ *
+ * Returns +nil+ if +file_name+ doesn't exist or has zero size, the size of the
+ * file otherwise.
+ */
+
+mrb_value
+mrb_filetest_s_size_p(mrb_state *mrb, mrb_value klass)
+{
+  struct stat st;
+  mrb_value obj;
+
+  mrb_get_args(mrb, "o", &obj);
+
+  if (mrb_stat(mrb, obj, &st) < 0)
+    return mrb_nil_value();
+  if (st.st_size == 0)
+    return mrb_nil_value();
+
+  return mrb_fixnum_value(st.st_size);
+}
+
+void
+mrb_init_file_test(mrb_state *mrb)
+{
+  struct RClass *f;
+
+  f = mrb_define_class(mrb, "FileTest", mrb->object_class);
+
+  mrb_define_class_method(mrb, f, "directory?", mrb_filetest_s_directory_p, MRB_ARGS_REQ(1));
+  mrb_define_class_method(mrb, f, "exist?",     mrb_filetest_s_exist_p,     MRB_ARGS_REQ(1));
+  mrb_define_class_method(mrb, f, "exists?",    mrb_filetest_s_exist_p,     MRB_ARGS_REQ(1));
+  mrb_define_class_method(mrb, f, "file?",      mrb_filetest_s_file_p,      MRB_ARGS_REQ(1));
+  mrb_define_class_method(mrb, f, "pipe?",      mrb_filetest_s_pipe_p,      MRB_ARGS_REQ(1));
+  mrb_define_class_method(mrb, f, "size",       mrb_filetest_s_size,        MRB_ARGS_REQ(1));
+  mrb_define_class_method(mrb, f, "size?",      mrb_filetest_s_size_p,      MRB_ARGS_REQ(1));
+  mrb_define_class_method(mrb, f, "socket?",    mrb_filetest_s_socket_p,    MRB_ARGS_REQ(1));
+  mrb_define_class_method(mrb, f, "symlink?",   mrb_filetest_s_symlink_p,   MRB_ARGS_REQ(1));
+  mrb_define_class_method(mrb, f, "zero?",      mrb_filetest_s_zero_p,      MRB_ARGS_REQ(1));
+}
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-io/src/io.c
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-io/src/io.c	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-io/src/io.c	(revision 439)
@@ -0,0 +1,1550 @@
+/*
+** io.c - IO class
+*/
+
+#include "mruby.h"
+#include "mruby/array.h"
+#include "mruby/class.h"
+#include "mruby/data.h"
+#include "mruby/hash.h"
+#include "mruby/string.h"
+#include "mruby/variable.h"
+#include "mruby/ext/io.h"
+#include "mruby/error.h"
+
+#if defined(AZURE_SPHERE)
+#define _GNU_SOURCE
+#include <stdlib.h>
+#endif
+#include <sys/types.h>
+#if !defined(AZURE_SPHERE)
+#include <sys/stat.h>
+#endif
+
+#if defined(_WIN32) || defined(_WIN64)
+  #include <winsock.h>
+  #include <io.h>
+  #define open  _open
+  #define close _close
+  #define dup _dup
+  #define dup2 _dup2
+  #define read  _read
+  #define write _write
+  #define lseek _lseek
+  #define isatty _isatty
+  #define WEXITSTATUS(x) (x)
+  typedef int fsize_t;
+#ifdef _WIN64
+  typedef signed __int64    ssize_t;
+#else  /* _WIN64 */
+  typedef signed int        ssize_t;
+#endif  /* _WIN64 */
+  typedef long ftime_t;
+  typedef long fsuseconds_t;
+  typedef int fmode_t;
+  typedef int mrb_io_read_write_size;
+
+  #ifndef O_TMPFILE
+    #define O_TMPFILE O_TEMPORARY
+  #endif
+
+#else
+#if !defined(AZURE_SPHERE)
+  #include <sys/wait.h>
+#endif
+  #include <unistd.h>
+  typedef size_t fsize_t;
+  typedef time_t ftime_t;
+  typedef suseconds_t fsuseconds_t;
+  typedef mode_t fmode_t;
+  typedef ssize_t mrb_io_read_write_size;
+#endif
+
+#ifdef _MSC_VER
+typedef mrb_int pid_t;
+#endif
+
+#include <fcntl.h>
+
+#include <errno.h>
+#include <string.h>
+
+#if defined(AZURE_SPHERE)
+pid_t fork(void);
+int execl(const char *, const char *, ...);
+_Noreturn void _exit(int);
+int isatty(int);
+int open(const char *, int, ...);
+#define O_RDONLY  00
+#define O_WRONLY  01
+#define O_RDWR    02
+#define O_CREAT        0100
+#define O_EXCL         0200
+#define O_TRUNC       01000
+#define O_APPEND      02000
+
+pid_t waitpid(pid_t pid, int *status, int options);
+#endif
+
+#define OPEN_ACCESS_MODE_FLAGS (O_RDONLY | O_WRONLY | O_RDWR)
+#define OPEN_RDONLY_P(f)       ((mrb_bool)(((f) & OPEN_ACCESS_MODE_FLAGS) == O_RDONLY))
+#define OPEN_WRONLY_P(f)       ((mrb_bool)(((f) & OPEN_ACCESS_MODE_FLAGS) == O_WRONLY))
+#define OPEN_RDWR_P(f)         ((mrb_bool)(((f) & OPEN_ACCESS_MODE_FLAGS) == O_RDWR))
+#define OPEN_READABLE_P(f)     ((mrb_bool)(OPEN_RDONLY_P(f) || OPEN_RDWR_P(f)))
+#define OPEN_WRITABLE_P(f)     ((mrb_bool)(OPEN_WRONLY_P(f) || OPEN_RDWR_P(f)))
+
+static void mrb_io_free(mrb_state *mrb, void *ptr);
+struct mrb_data_type mrb_io_type = { "IO", mrb_io_free };
+
+
+static struct mrb_io *io_get_open_fptr(mrb_state *mrb, mrb_value self);
+static int mrb_io_modestr_to_flags(mrb_state *mrb, const char *modestr);
+static int mrb_io_mode_to_flags(mrb_state *mrb, mrb_value mode);
+static void fptr_finalize(mrb_state *mrb, struct mrb_io *fptr, int quiet);
+
+static struct mrb_io *
+io_get_open_fptr(mrb_state *mrb, mrb_value self)
+{
+  struct mrb_io *fptr;
+
+  fptr = (struct mrb_io *)mrb_data_get_ptr(mrb, self, &mrb_io_type);
+  if (fptr == NULL) {
+    mrb_raise(mrb, E_IO_ERROR, "uninitialized stream.");
+  }
+  if (fptr->fd < 0) {
+    mrb_raise(mrb, E_IO_ERROR, "closed stream.");
+  }
+  return fptr;
+}
+
+static void
+io_set_process_status(mrb_state *mrb, pid_t pid, int status)
+{
+  struct RClass *c_process, *c_status;
+  mrb_value v;
+
+  c_status = NULL;
+  if (mrb_class_defined(mrb, "Process")) {
+    c_process = mrb_module_get(mrb, "Process");
+    if (mrb_const_defined(mrb, mrb_obj_value(c_process), mrb_intern_cstr(mrb, "Status"))) {
+      c_status = mrb_class_get_under(mrb, c_process, "Status");
+    }
+  }
+  if (c_status != NULL) {
+    v = mrb_funcall(mrb, mrb_obj_value(c_status), "new", 2, mrb_fixnum_value(pid), mrb_fixnum_value(status));
+  } else {
+    v = mrb_fixnum_value(WEXITSTATUS(status));
+  }
+  mrb_gv_set(mrb, mrb_intern_cstr(mrb, "$?"), v);
+}
+
+static int
+mrb_io_modestr_to_flags(mrb_state *mrb, const char *mode)
+{
+  int flags;
+  const char *m = mode;
+
+  switch (*m++) {
+    case 'r':
+      flags = O_RDONLY;
+      break;
+    case 'w':
+      flags = O_WRONLY | O_CREAT | O_TRUNC;
+      break;
+    case 'a':
+      flags = O_WRONLY | O_CREAT | O_APPEND;
+      break;
+    default:
+      mrb_raisef(mrb, E_ARGUMENT_ERROR, "illegal access mode %s", mode);
+      flags = 0; /* not reached */
+  }
+
+  while (*m) {
+    switch (*m++) {
+      case 'b':
+#ifdef O_BINARY
+        flags |= O_BINARY;
+#endif
+        break;
+      case '+':
+        flags = (flags & ~OPEN_ACCESS_MODE_FLAGS) | O_RDWR;
+        break;
+      case ':':
+        /* XXX: PASSTHROUGH*/
+      default:
+        mrb_raisef(mrb, E_ARGUMENT_ERROR, "illegal access mode %s", mode);
+    }
+  }
+
+  return flags;
+}
+
+static int
+mrb_io_mode_to_flags(mrb_state *mrb, mrb_value mode)
+{
+  if (mrb_nil_p(mode)) {
+    return mrb_io_modestr_to_flags(mrb, "r");
+  }
+  else if (mrb_string_p(mode)) {
+    return mrb_io_modestr_to_flags(mrb, RSTRING_CSTR(mrb, mode));
+  }
+  else {
+    int flags = 0;
+    mrb_int flags0 = mrb_int(mrb, mode);
+
+    switch (flags0 & MRB_O_ACCMODE) {
+      case MRB_O_RDONLY:
+        flags |= O_RDONLY;
+        break;
+      case MRB_O_WRONLY:
+        flags |= O_WRONLY;
+        break;
+      case MRB_O_RDWR:
+        flags |= O_RDWR;
+        break;
+      default:
+        mrb_raisef(mrb, E_ARGUMENT_ERROR, "illegal access mode %v", mode);
+    }
+
+    if (flags0 & MRB_O_APPEND)        flags |= O_APPEND;
+    if (flags0 & MRB_O_CREAT)         flags |= O_CREAT;
+    if (flags0 & MRB_O_EXCL)          flags |= O_EXCL;
+    if (flags0 & MRB_O_TRUNC)         flags |= O_TRUNC;
+#ifdef O_NONBLOCK
+    if (flags0 & MRB_O_NONBLOCK)      flags |= O_NONBLOCK;
+#endif
+#ifdef O_NOCTTY
+    if (flags0 & MRB_O_NOCTTY)        flags |= O_NOCTTY;
+#endif
+#ifdef O_BINARY
+    if (flags0 & MRB_O_BINARY)        flags |= O_BINARY;
+#endif
+#ifdef O_SHARE_DELETE
+    if (flags0 & MRB_O_SHARE_DELETE)  flags |= O_SHARE_DELETE;
+#endif
+#ifdef O_SYNC
+    if (flags0 & MRB_O_SYNC)          flags |= O_SYNC;
+#endif
+#ifdef O_DSYNC
+    if (flags0 & MRB_O_DSYNC)         flags |= O_DSYNC;
+#endif
+#ifdef O_RSYNC
+    if (flags0 & MRB_O_RSYNC)         flags |= O_RSYNC;
+#endif
+#ifdef O_NOFOLLOW
+    if (flags0 & MRB_O_NOFOLLOW)      flags |= O_NOFOLLOW;
+#endif
+#ifdef O_NOATIME
+    if (flags0 & MRB_O_NOATIME)       flags |= O_NOATIME;
+#endif
+#ifdef O_DIRECT
+    if (flags0 & MRB_O_DIRECT)        flags |= O_DIRECT;
+#endif
+#ifdef O_TMPFILE
+    if (flags0 & MRB_O_TMPFILE)       flags |= O_TMPFILE;
+#endif
+
+    return flags;
+  }
+}
+
+static void
+mrb_fd_cloexec(mrb_state *mrb, int fd)
+{
+#if defined(F_GETFD) && defined(F_SETFD) && defined(FD_CLOEXEC)
+  int flags, flags2;
+
+  flags = fcntl(fd, F_GETFD);
+  if (flags == -1) {
+    mrb_bug(mrb, "mrb_fd_cloexec: fcntl(%d, F_GETFD) failed: %d", fd, errno);
+  }
+  if (fd <= 2) {
+    flags2 = flags & ~FD_CLOEXEC; /* Clear CLOEXEC for standard file descriptors: 0, 1, 2. */
+  }
+  else {
+    flags2 = flags | FD_CLOEXEC; /* Set CLOEXEC for non-standard file descriptors: 3, 4, 5, ... */
+  }
+  if (flags != flags2) {
+    if (fcntl(fd, F_SETFD, flags2) == -1) {
+      mrb_bug(mrb, "mrb_fd_cloexec: fcntl(%d, F_SETFD, %d) failed: %d", fd, flags2, errno);
+    }
+  }
+#endif
+}
+
+#if !defined(_WIN32) && !(defined(TARGET_OS_IPHONE) && TARGET_OS_IPHONE)
+static int
+mrb_cloexec_pipe(mrb_state *mrb, int fildes[2])
+{
+  int ret;
+  ret = pipe(fildes);
+  if (ret == -1)
+    return -1;
+  mrb_fd_cloexec(mrb, fildes[0]);
+  mrb_fd_cloexec(mrb, fildes[1]);
+  return ret;
+}
+
+static int
+mrb_pipe(mrb_state *mrb, int pipes[2])
+{
+  int ret;
+  ret = mrb_cloexec_pipe(mrb, pipes);
+  if (ret == -1) {
+    if (errno == EMFILE || errno == ENFILE) {
+      mrb_garbage_collect(mrb);
+      ret = mrb_cloexec_pipe(mrb, pipes);
+    }
+  }
+  return ret;
+}
+
+static int
+mrb_proc_exec(const char *pname)
+{
+  const char *s;
+  s = pname;
+
+  while (*s == ' ' || *s == '\t' || *s == '\n')
+    s++;
+
+  if (!*s) {
+    errno = ENOENT;
+    return -1;
+  }
+
+  execl("/bin/sh", "sh", "-c", pname, (char *)NULL);
+  return -1;
+}
+#endif
+
+static void
+mrb_io_free(mrb_state *mrb, void *ptr)
+{
+  struct mrb_io *io = (struct mrb_io *)ptr;
+  if (io != NULL) {
+    fptr_finalize(mrb, io, TRUE);
+    mrb_free(mrb, io);
+  }
+}
+
+static struct mrb_io *
+mrb_io_alloc(mrb_state *mrb)
+{
+  struct mrb_io *fptr;
+
+  fptr = (struct mrb_io *)mrb_malloc(mrb, sizeof(struct mrb_io));
+  fptr->fd = -1;
+  fptr->fd2 = -1;
+  fptr->pid = 0;
+  fptr->readable = 0;
+  fptr->writable = 0;
+  fptr->sync = 0;
+  fptr->is_socket = 0;
+  return fptr;
+}
+
+#ifndef NOFILE
+#define NOFILE 64
+#endif
+
+static int
+option_to_fd(mrb_state *mrb, mrb_value hash, const char *key)
+{
+  mrb_value opt;
+
+  if (!mrb_hash_p(hash)) return -1;
+  opt = mrb_hash_fetch(mrb, hash, mrb_symbol_value(mrb_intern_static(mrb, key, strlen(key))), mrb_nil_value());
+  if (mrb_nil_p(opt)) return -1;
+
+  switch (mrb_type(opt)) {
+    case MRB_TT_DATA: /* IO */
+      return mrb_io_fileno(mrb, opt);
+    case MRB_TT_FIXNUM:
+      return (int)mrb_fixnum(opt);
+    default:
+      mrb_raise(mrb, E_ARGUMENT_ERROR, "wrong exec redirect action");
+      break;
+  }
+  return -1; /* never reached */
+}
+
+#ifdef _WIN32
+mrb_value
+mrb_io_s_popen(mrb_state *mrb, mrb_value klass)
+{
+  mrb_value cmd, io;
+  mrb_value mode = mrb_str_new_cstr(mrb, "r");
+  mrb_value opt  = mrb_hash_new(mrb);
+
+  struct mrb_io *fptr;
+  const char *pname;
+  int pid = 0, flags;
+  STARTUPINFO si;
+  PROCESS_INFORMATION pi;
+  SECURITY_ATTRIBUTES saAttr;
+
+  HANDLE ifd[2];
+  HANDLE ofd[2];
+
+  int doexec;
+  int opt_in, opt_out, opt_err;
+
+  ifd[0] = INVALID_HANDLE_VALUE;
+  ifd[1] = INVALID_HANDLE_VALUE;
+  ofd[0] = INVALID_HANDLE_VALUE;
+  ofd[1] = INVALID_HANDLE_VALUE;
+
+  mrb_get_args(mrb, "S|oH", &cmd, &mode, &opt);
+  io = mrb_obj_value(mrb_data_object_alloc(mrb, mrb_class_ptr(klass), NULL, &mrb_io_type));
+
+  pname = RSTRING_CSTR(mrb, cmd);
+  flags = mrb_io_mode_to_flags(mrb, mode);
+
+  doexec = (strcmp("-", pname) != 0);
+  opt_in = option_to_fd(mrb, opt, "in");
+  opt_out = option_to_fd(mrb, opt, "out");
+  opt_err = option_to_fd(mrb, opt, "err");
+
+  saAttr.nLength = sizeof(SECURITY_ATTRIBUTES);
+  saAttr.bInheritHandle = TRUE;
+  saAttr.lpSecurityDescriptor = NULL;
+
+  if (OPEN_READABLE_P(flags)) {
+    if (!CreatePipe(&ofd[0], &ofd[1], &saAttr, 0)
+        || !SetHandleInformation(ofd[0], HANDLE_FLAG_INHERIT, 0)) {
+      mrb_sys_fail(mrb, "pipe");
+    }
+  }
+
+  if (OPEN_WRITABLE_P(flags)) {
+    if (!CreatePipe(&ifd[0], &ifd[1], &saAttr, 0)
+        || !SetHandleInformation(ifd[1], HANDLE_FLAG_INHERIT, 0)) {
+      mrb_sys_fail(mrb, "pipe");
+    }
+  }
+
+  if (doexec) {
+    ZeroMemory(&pi, sizeof(pi));
+    ZeroMemory(&si, sizeof(si));
+    si.cb = sizeof(si);
+    si.dwFlags |= STARTF_USESHOWWINDOW;
+    si.wShowWindow = SW_HIDE;
+    si.dwFlags |= STARTF_USESTDHANDLES;
+    if (OPEN_READABLE_P(flags)) {
+      si.hStdOutput = ofd[1];
+      si.hStdError = ofd[1];
+    }
+    if (OPEN_WRITABLE_P(flags)) {
+      si.hStdInput = ifd[0];
+    }
+    if (!CreateProcess(
+        NULL, (char*)pname, NULL, NULL,
+        TRUE, CREATE_NEW_PROCESS_GROUP, NULL, NULL, &si, &pi)) {
+      CloseHandle(ifd[0]);
+      CloseHandle(ifd[1]);
+      CloseHandle(ofd[0]);
+      CloseHandle(ofd[1]);
+      mrb_raisef(mrb, E_IO_ERROR, "command not found: %v", cmd);
+    }
+    CloseHandle(pi.hThread);
+    CloseHandle(ifd[0]);
+    CloseHandle(ofd[1]);
+    pid = pi.dwProcessId;
+  }
+
+  mrb_iv_set(mrb, io, mrb_intern_cstr(mrb, "@buf"), mrb_str_new_cstr(mrb, ""));
+
+  fptr = mrb_io_alloc(mrb);
+  fptr->fd = _open_osfhandle((intptr_t)ofd[0], 0);
+  fptr->fd2 = _open_osfhandle((intptr_t)ifd[1], 0);
+  fptr->pid = pid;
+  fptr->readable = OPEN_READABLE_P(flags);
+  fptr->writable = OPEN_WRITABLE_P(flags);
+  fptr->sync = 0;
+
+  DATA_TYPE(io) = &mrb_io_type;
+  DATA_PTR(io)  = fptr;
+  return io;
+}
+#elif defined(TARGET_OS_IPHONE) && TARGET_OS_IPHONE
+mrb_value
+mrb_io_s_popen(mrb_state *mrb, mrb_value klass)
+{
+  mrb_raise(mrb, E_NOTIMP_ERROR, "IO#popen is not supported on the platform");
+  return mrb_false_value();
+}
+#else
+mrb_value
+mrb_io_s_popen(mrb_state *mrb, mrb_value klass)
+{
+  mrb_value cmd, io, result;
+  mrb_value mode = mrb_str_new_cstr(mrb, "r");
+  mrb_value opt  = mrb_hash_new(mrb);
+
+  struct mrb_io *fptr;
+  const char *pname;
+  int pid, flags, fd, write_fd = -1;
+  int pr[2] = { -1, -1 };
+  int pw[2] = { -1, -1 };
+  int doexec;
+  int saved_errno;
+  int opt_in, opt_out, opt_err;
+
+  mrb_get_args(mrb, "S|oH", &cmd, &mode, &opt);
+  io = mrb_obj_value(mrb_data_object_alloc(mrb, mrb_class_ptr(klass), NULL, &mrb_io_type));
+
+  pname = RSTRING_CSTR(mrb, cmd);
+  flags = mrb_io_mode_to_flags(mrb, mode);
+
+  doexec = (strcmp("-", pname) != 0);
+  opt_in = option_to_fd(mrb, opt, "in");
+  opt_out = option_to_fd(mrb, opt, "out");
+  opt_err = option_to_fd(mrb, opt, "err");
+
+  if (OPEN_READABLE_P(flags)) {
+    if (pipe(pr) == -1) {
+      mrb_sys_fail(mrb, "pipe");
+    }
+    mrb_fd_cloexec(mrb, pr[0]);
+    mrb_fd_cloexec(mrb, pr[1]);
+  }
+
+  if (OPEN_WRITABLE_P(flags)) {
+    if (pipe(pw) == -1) {
+      if (pr[0] != -1) close(pr[0]);
+      if (pr[1] != -1) close(pr[1]);
+      mrb_sys_fail(mrb, "pipe");
+    }
+    mrb_fd_cloexec(mrb, pw[0]);
+    mrb_fd_cloexec(mrb, pw[1]);
+  }
+
+  if (!doexec) {
+    // XXX
+    fflush(stdin);
+    fflush(stdout);
+    fflush(stderr);
+  }
+
+  result = mrb_nil_value();
+  switch (pid = fork()) {
+    case 0: /* child */
+      if (opt_in != -1) {
+        dup2(opt_in, 0);
+      }
+      if (opt_out != -1) {
+        dup2(opt_out, 1);
+      }
+      if (opt_err != -1) {
+        dup2(opt_err, 2);
+      }
+      if (OPEN_READABLE_P(flags)) {
+        close(pr[0]);
+        if (pr[1] != 1) {
+          dup2(pr[1], 1);
+          close(pr[1]);
+        }
+      }
+      if (OPEN_WRITABLE_P(flags)) {
+        close(pw[1]);
+        if (pw[0] != 0) {
+          dup2(pw[0], 0);
+          close(pw[0]);
+        }
+      }
+      if (doexec) {
+        for (fd = 3; fd < NOFILE; fd++) {
+          close(fd);
+        }
+        mrb_proc_exec(pname);
+        mrb_raisef(mrb, E_IO_ERROR, "command not found: %v", cmd);
+        _exit(127);
+      }
+      result = mrb_nil_value();
+      break;
+
+    default: /* parent */
+      if (OPEN_RDWR_P(flags)) {
+        close(pr[1]);
+        fd = pr[0];
+        close(pw[0]);
+        write_fd = pw[1];
+      } else if (OPEN_RDONLY_P(flags)) {
+        close(pr[1]);
+        fd = pr[0];
+      } else {
+        close(pw[0]);
+        fd = pw[1];
+      }
+
+      mrb_iv_set(mrb, io, mrb_intern_cstr(mrb, "@buf"), mrb_str_new_cstr(mrb, ""));
+
+      fptr = mrb_io_alloc(mrb);
+      fptr->fd = fd;
+      fptr->fd2 = write_fd;
+      fptr->pid = pid;
+      fptr->readable = OPEN_READABLE_P(flags);
+      fptr->writable = OPEN_WRITABLE_P(flags);
+      fptr->sync = 0;
+
+      DATA_TYPE(io) = &mrb_io_type;
+      DATA_PTR(io)  = fptr;
+      result = io;
+      break;
+
+    case -1: /* error */
+      saved_errno = errno;
+      if (OPEN_READABLE_P(flags)) {
+        close(pr[0]);
+        close(pr[1]);
+      }
+      if (OPEN_WRITABLE_P(flags)) {
+        close(pw[0]);
+        close(pw[1]);
+      }
+      errno = saved_errno;
+      mrb_sys_fail(mrb, "pipe_open failed.");
+      break;
+  }
+  return result;
+}
+#endif
+
+static int
+mrb_dup(mrb_state *mrb, int fd, mrb_bool *failed)
+{
+  int new_fd;
+
+  *failed = TRUE;
+  if (fd < 0)
+    return fd;
+
+  new_fd = dup(fd);
+  if (new_fd > 0) *failed = FALSE;
+  return new_fd;
+}
+
+mrb_value
+mrb_io_initialize_copy(mrb_state *mrb, mrb_value copy)
+{
+  mrb_value orig;
+  mrb_value buf;
+  struct mrb_io *fptr_copy;
+  struct mrb_io *fptr_orig;
+  mrb_bool failed = TRUE;
+
+  mrb_get_args(mrb, "o", &orig);
+  fptr_orig = io_get_open_fptr(mrb, orig);
+  fptr_copy = (struct mrb_io *)DATA_PTR(copy);
+  if (fptr_orig == fptr_copy) return copy;
+  if (fptr_copy != NULL) {
+    fptr_finalize(mrb, fptr_copy, FALSE);
+    mrb_free(mrb, fptr_copy);
+  }
+  fptr_copy = (struct mrb_io *)mrb_io_alloc(mrb);
+
+  DATA_TYPE(copy) = &mrb_io_type;
+  DATA_PTR(copy) = fptr_copy;
+
+  buf = mrb_iv_get(mrb, orig, mrb_intern_cstr(mrb, "@buf"));
+  mrb_iv_set(mrb, copy, mrb_intern_cstr(mrb, "@buf"), buf);
+
+  fptr_copy->fd = mrb_dup(mrb, fptr_orig->fd, &failed);
+  if (failed) {
+    mrb_sys_fail(mrb, 0);
+  }
+  mrb_fd_cloexec(mrb, fptr_copy->fd);
+
+  if (fptr_orig->fd2 != -1) {
+    fptr_copy->fd2 = mrb_dup(mrb, fptr_orig->fd2, &failed);
+    if (failed) {
+      close(fptr_copy->fd);
+      mrb_sys_fail(mrb, 0);
+    }
+    mrb_fd_cloexec(mrb, fptr_copy->fd2);
+  }
+
+  fptr_copy->pid = fptr_orig->pid;
+  fptr_copy->readable = fptr_orig->readable;
+  fptr_copy->writable = fptr_orig->writable;
+  fptr_copy->sync = fptr_orig->sync;
+  fptr_copy->is_socket = fptr_orig->is_socket;
+
+  return copy;
+}
+
+mrb_value
+mrb_io_initialize(mrb_state *mrb, mrb_value io)
+{
+  struct mrb_io *fptr;
+  mrb_int fd;
+  mrb_value mode, opt;
+  int flags;
+
+  mode = opt = mrb_nil_value();
+
+  mrb_get_args(mrb, "i|oo", &fd, &mode, &opt);
+  if (mrb_nil_p(mode)) {
+    mode = mrb_str_new_cstr(mrb, "r");
+  }
+  if (mrb_nil_p(opt)) {
+    opt = mrb_hash_new(mrb);
+  }
+
+  flags = mrb_io_mode_to_flags(mrb, mode);
+
+  mrb_iv_set(mrb, io, mrb_intern_cstr(mrb, "@buf"), mrb_str_new_cstr(mrb, ""));
+
+  fptr = (struct mrb_io *)DATA_PTR(io);
+  if (fptr != NULL) {
+    fptr_finalize(mrb, fptr, TRUE);
+    mrb_free(mrb, fptr);
+  }
+  fptr = mrb_io_alloc(mrb);
+
+  DATA_TYPE(io) = &mrb_io_type;
+  DATA_PTR(io) = fptr;
+
+  fptr->fd = (int)fd;
+  fptr->readable = OPEN_READABLE_P(flags);
+  fptr->writable = OPEN_WRITABLE_P(flags);
+  fptr->sync = 0;
+  return io;
+}
+
+static void
+fptr_finalize(mrb_state *mrb, struct mrb_io *fptr, int quiet)
+{
+  int saved_errno = 0;
+
+  if (fptr == NULL) {
+    return;
+  }
+
+  if (fptr->fd > 2) {
+#ifdef _WIN32
+    if (fptr->is_socket) {
+      if (closesocket(fptr->fd) != 0) {
+        saved_errno = WSAGetLastError();
+      }
+      fptr->fd = -1;
+    }
+#endif
+    if (fptr->fd != -1) {
+      if (close(fptr->fd) == -1) {
+        saved_errno = errno;
+      }
+    }
+    fptr->fd = -1;
+  }
+
+  if (fptr->fd2 > 2) {
+    if (close(fptr->fd2) == -1) {
+      if (saved_errno == 0) {
+        saved_errno = errno;
+      }
+    }
+    fptr->fd2 = -1;
+  }
+
+  if (fptr->pid != 0) {
+#if !defined(_WIN32) && !defined(_WIN64)
+    pid_t pid;
+    int status;
+    do {
+      pid = waitpid(fptr->pid, &status, 0);
+    } while (pid == -1 && errno == EINTR);
+    if (!quiet && pid == fptr->pid) {
+      io_set_process_status(mrb, pid, status);
+    }
+#else
+    HANDLE h = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, fptr->pid);
+    DWORD status;
+    if (WaitForSingleObject(h, INFINITE) && GetExitCodeProcess(h, &status))
+      if (!quiet)
+        io_set_process_status(mrb, fptr->pid, (int)status);
+    CloseHandle(h);
+#endif
+    fptr->pid = 0;
+    /* Note: we don't raise an exception when waitpid(3) fails */
+  }
+
+  if (!quiet && saved_errno != 0) {
+    errno = saved_errno;
+    mrb_sys_fail(mrb, "fptr_finalize failed.");
+  }
+}
+
+mrb_value
+mrb_io_check_readable(mrb_state *mrb, mrb_value self)
+{
+  struct mrb_io *fptr = io_get_open_fptr(mrb, self);
+  if (! fptr->readable) {
+    mrb_raise(mrb, E_IO_ERROR, "not opened for reading");
+  }
+  return mrb_nil_value();
+}
+
+mrb_value
+mrb_io_isatty(mrb_state *mrb, mrb_value self)
+{
+  struct mrb_io *fptr;
+
+  fptr = io_get_open_fptr(mrb, self);
+  if (isatty(fptr->fd) == 0)
+    return mrb_false_value();
+  return mrb_true_value();
+}
+
+mrb_value
+mrb_io_s_for_fd(mrb_state *mrb, mrb_value klass)
+{
+  struct RClass *c = mrb_class_ptr(klass);
+  enum mrb_vtype ttype = MRB_INSTANCE_TT(c);
+  mrb_value obj;
+
+  /* copied from mrb_instance_alloc() */
+  if (ttype == 0) ttype = MRB_TT_OBJECT;
+  obj = mrb_obj_value((struct RObject*)mrb_obj_alloc(mrb, ttype, c));
+  return mrb_io_initialize(mrb, obj);
+}
+
+mrb_value
+mrb_io_s_sysclose(mrb_state *mrb, mrb_value klass)
+{
+  mrb_int fd;
+  mrb_get_args(mrb, "i", &fd);
+  if (close((int)fd) == -1) {
+    mrb_sys_fail(mrb, "close");
+  }
+  return mrb_fixnum_value(0);
+}
+
+int
+mrb_cloexec_open(mrb_state *mrb, const char *pathname, mrb_int flags, mrb_int mode)
+{
+  int fd, retry = FALSE;
+  char* fname = mrb_locale_from_utf8(pathname, -1);
+
+#ifdef O_CLOEXEC
+  /* O_CLOEXEC is available since Linux 2.6.23.  Linux 2.6.18 silently ignore it. */
+  flags |= O_CLOEXEC;
+#elif defined O_NOINHERIT
+  flags |= O_NOINHERIT;
+#endif
+reopen:
+  fd = open(fname, (int)flags, (fmode_t)mode);
+  if (fd == -1) {
+    if (!retry) {
+      switch (errno) {
+        case ENFILE:
+        case EMFILE:
+        mrb_garbage_collect(mrb);
+        retry = TRUE;
+        goto reopen;
+      }
+    }
+
+    mrb_sys_fail(mrb, RSTRING_CSTR(mrb, mrb_format(mrb, "open %s", pathname)));
+  }
+  mrb_locale_free(fname);
+
+  if (fd <= 2) {
+    mrb_fd_cloexec(mrb, fd);
+  }
+  return fd;
+}
+
+mrb_value
+mrb_io_s_sysopen(mrb_state *mrb, mrb_value klass)
+{
+  mrb_value path = mrb_nil_value();
+  mrb_value mode = mrb_nil_value();
+  mrb_int fd, perm = -1;
+  const char *pat;
+  int flags;
+
+  mrb_get_args(mrb, "S|oi", &path, &mode, &perm);
+  if (perm < 0) {
+    perm = 0666;
+  }
+
+  pat = RSTRING_CSTR(mrb, path);
+  flags = mrb_io_mode_to_flags(mrb, mode);
+  fd = mrb_cloexec_open(mrb, pat, flags, perm);
+  return mrb_fixnum_value(fd);
+}
+
+static mrb_value mrb_io_sysread_common(mrb_state *mrb,
+    mrb_io_read_write_size (*readfunc)(int, void *, fsize_t, off_t),
+    mrb_value io, mrb_value buf, mrb_int maxlen, off_t offset);
+
+static mrb_io_read_write_size
+mrb_sysread_dummy(int fd, void *buf, fsize_t nbytes, off_t offset)
+{
+  return (mrb_io_read_write_size)read(fd, buf, nbytes);
+}
+
+mrb_value
+mrb_io_sysread(mrb_state *mrb, mrb_value io)
+{
+  mrb_value buf = mrb_nil_value();
+  mrb_int maxlen;
+
+  mrb_get_args(mrb, "i|S", &maxlen, &buf);
+
+  return mrb_io_sysread_common(mrb, mrb_sysread_dummy, io, buf, maxlen, 0);
+}
+
+static mrb_value
+mrb_io_sysread_common(mrb_state *mrb,
+    mrb_io_read_write_size (*readfunc)(int, void *, fsize_t, off_t),
+    mrb_value io, mrb_value buf, mrb_int maxlen, off_t offset)
+{
+  struct mrb_io *fptr;
+  int ret;
+
+  if (maxlen < 0) {
+    mrb_raise(mrb, E_ARGUMENT_ERROR, "negative expanding string size");
+  }
+  else if (maxlen == 0) {
+    return mrb_str_new(mrb, NULL, maxlen);
+  }
+
+  if (mrb_nil_p(buf)) {
+    buf = mrb_str_new(mrb, NULL, maxlen);
+  }
+
+  if (RSTRING_LEN(buf) != maxlen) {
+    buf = mrb_str_resize(mrb, buf, maxlen);
+  }
+  else {
+    mrb_str_modify(mrb, RSTRING(buf));
+  }
+
+  fptr = (struct mrb_io *)io_get_open_fptr(mrb, io);
+  if (!fptr->readable) {
+    mrb_raise(mrb, E_IO_ERROR, "not opened for reading");
+  }
+  ret = readfunc(fptr->fd, RSTRING_PTR(buf), (fsize_t)maxlen, offset);
+  if (ret < 0) {
+    mrb_sys_fail(mrb, "sysread failed");
+  }
+  if (RSTRING_LEN(buf) != ret) {
+    buf = mrb_str_resize(mrb, buf, ret);
+  }
+  if (ret == 0 && maxlen > 0) {
+    mrb_raise(mrb, E_EOF_ERROR, "sysread failed: End of File");
+  }
+  return buf;
+}
+
+mrb_value
+mrb_io_sysseek(mrb_state *mrb, mrb_value io)
+{
+  struct mrb_io *fptr;
+  off_t pos;
+  mrb_int offset, whence = -1;
+
+  mrb_get_args(mrb, "i|i", &offset, &whence);
+  if (whence < 0) {
+    whence = 0;
+  }
+
+  fptr = io_get_open_fptr(mrb, io);
+  pos = lseek(fptr->fd, (off_t)offset, (int)whence);
+  if (pos == -1) {
+    mrb_sys_fail(mrb, "sysseek");
+  }
+  if (pos > MRB_INT_MAX) {
+#ifndef MRB_WITHOUT_FLOAT
+    return mrb_float_value(mrb, (mrb_float)pos);
+#else
+    mrb_raise(mrb, E_IO_ERROR, "sysseek reached too far for MRB_WITHOUT_FLOAT");
+#endif
+  } else {
+    return mrb_fixnum_value(pos);
+  }
+}
+
+static mrb_value
+mrb_io_syswrite_common(mrb_state *mrb,
+    mrb_io_read_write_size (*writefunc)(int, const void *, fsize_t, off_t),
+    mrb_value io, mrb_value buf, off_t offset)
+{
+  struct mrb_io *fptr;
+  int fd, length;
+
+  fptr = io_get_open_fptr(mrb, io);
+  if (! fptr->writable) {
+    mrb_raise(mrb, E_IO_ERROR, "not opened for writing");
+  }
+
+  if (fptr->fd2 == -1) {
+    fd = fptr->fd;
+  } else {
+    fd = fptr->fd2;
+  }
+  length = writefunc(fd, RSTRING_PTR(buf), (fsize_t)RSTRING_LEN(buf), offset);
+  if (length == -1) {
+    mrb_sys_fail(mrb, 0);
+  }
+
+  return mrb_fixnum_value(length);
+}
+
+static mrb_io_read_write_size
+mrb_syswrite_dummy(int fd, const void *buf, fsize_t nbytes, off_t offset)
+{
+  return (mrb_io_read_write_size)write(fd, buf, nbytes);
+}
+
+mrb_value
+mrb_io_syswrite(mrb_state *mrb, mrb_value io)
+{
+  mrb_value buf;
+
+  mrb_get_args(mrb, "S", &buf);
+
+  return mrb_io_syswrite_common(mrb, mrb_syswrite_dummy, io, buf, 0);
+}
+
+mrb_value
+mrb_io_close(mrb_state *mrb, mrb_value self)
+{
+  struct mrb_io *fptr;
+  fptr = io_get_open_fptr(mrb, self);
+  fptr_finalize(mrb, fptr, FALSE);
+  return mrb_nil_value();
+}
+
+mrb_value
+mrb_io_close_write(mrb_state *mrb, mrb_value self)
+{
+  struct mrb_io *fptr;
+  fptr = io_get_open_fptr(mrb, self);
+  if (close((int)fptr->fd2) == -1) {
+    mrb_sys_fail(mrb, "close");
+  }
+  return mrb_nil_value();
+}
+
+mrb_value
+mrb_io_closed(mrb_state *mrb, mrb_value io)
+{
+  struct mrb_io *fptr;
+  fptr = (struct mrb_io *)mrb_data_get_ptr(mrb, io, &mrb_io_type);
+  if (fptr == NULL || fptr->fd >= 0) {
+    return mrb_false_value();
+  }
+
+  return mrb_true_value();
+}
+
+mrb_value
+mrb_io_pid(mrb_state *mrb, mrb_value io)
+{
+  struct mrb_io *fptr;
+  fptr = io_get_open_fptr(mrb, io);
+
+  if (fptr->pid > 0) {
+    return mrb_fixnum_value(fptr->pid);
+  }
+
+  return mrb_nil_value();
+}
+
+static struct timeval
+time2timeval(mrb_state *mrb, mrb_value time)
+{
+  struct timeval t = { 0, 0 };
+
+  switch (mrb_type(time)) {
+    case MRB_TT_FIXNUM:
+      t.tv_sec = (ftime_t)mrb_fixnum(time);
+      t.tv_usec = 0;
+      break;
+
+#ifndef MRB_WITHOUT_FLOAT
+    case MRB_TT_FLOAT:
+      t.tv_sec = (ftime_t)mrb_float(time);
+      t.tv_usec = (fsuseconds_t)((mrb_float(time) - t.tv_sec) * 1000000.0);
+      break;
+#endif
+
+    default:
+      mrb_raise(mrb, E_TYPE_ERROR, "wrong argument class");
+  }
+
+  return t;
+}
+
+static int
+mrb_io_read_data_pending(mrb_state *mrb, mrb_value io)
+{
+  mrb_value buf = mrb_iv_get(mrb, io, mrb_intern_cstr(mrb, "@buf"));
+  if (mrb_string_p(buf) && RSTRING_LEN(buf) > 0) {
+    return 1;
+  }
+  return 0;
+}
+
+#if !defined(_WIN32) && !(defined(TARGET_OS_IPHONE) && TARGET_OS_IPHONE)
+static mrb_value
+mrb_io_s_pipe(mrb_state *mrb, mrb_value klass)
+{
+  mrb_value r = mrb_nil_value();
+  mrb_value w = mrb_nil_value();
+  struct mrb_io *fptr_r;
+  struct mrb_io *fptr_w;
+  int pipes[2];
+
+  if (mrb_pipe(mrb, pipes) == -1) {
+    mrb_sys_fail(mrb, "pipe");
+  }
+
+  r = mrb_obj_value(mrb_data_object_alloc(mrb, mrb_class_ptr(klass), NULL, &mrb_io_type));
+  mrb_iv_set(mrb, r, mrb_intern_cstr(mrb, "@buf"), mrb_str_new_cstr(mrb, ""));
+  fptr_r = mrb_io_alloc(mrb);
+  fptr_r->fd = pipes[0];
+  fptr_r->readable = 1;
+  fptr_r->writable = 0;
+  fptr_r->sync = 0;
+  DATA_TYPE(r) = &mrb_io_type;
+  DATA_PTR(r)  = fptr_r;
+
+  w = mrb_obj_value(mrb_data_object_alloc(mrb, mrb_class_ptr(klass), NULL, &mrb_io_type));
+  mrb_iv_set(mrb, w, mrb_intern_cstr(mrb, "@buf"), mrb_str_new_cstr(mrb, ""));
+  fptr_w = mrb_io_alloc(mrb);
+  fptr_w->fd = pipes[1];
+  fptr_w->readable = 0;
+  fptr_w->writable = 1;
+  fptr_w->sync = 1;
+  DATA_TYPE(w) = &mrb_io_type;
+  DATA_PTR(w)  = fptr_w;
+
+  return mrb_assoc_new(mrb, r, w);
+}
+#endif
+
+static mrb_value
+mrb_io_s_select(mrb_state *mrb, mrb_value klass)
+{
+  mrb_value *argv;
+  mrb_int argc;
+  mrb_value read, read_io, write, except, timeout, list;
+  struct timeval *tp, timerec;
+  fd_set pset, rset, wset, eset;
+  fd_set *rp, *wp, *ep;
+  struct mrb_io *fptr;
+  int pending = 0;
+  mrb_value result;
+  int max = 0;
+  int interrupt_flag = 0;
+  int i, n;
+
+  mrb_get_args(mrb, "*", &argv, &argc);
+
+  if (argc < 1 || argc > 4) {
+    mrb_argnum_error(mrb, argc, 1, 4);
+  }
+
+  timeout = mrb_nil_value();
+  except = mrb_nil_value();
+  write = mrb_nil_value();
+  if (argc > 3)
+    timeout = argv[3];
+  if (argc > 2)
+    except = argv[2];
+  if (argc > 1)
+    write = argv[1];
+  read = argv[0];
+
+  if (mrb_nil_p(timeout)) {
+    tp = NULL;
+  } else {
+    timerec = time2timeval(mrb, timeout);
+    tp = &timerec;
+  }
+
+  FD_ZERO(&pset);
+  if (!mrb_nil_p(read)) {
+    mrb_check_type(mrb, read, MRB_TT_ARRAY);
+    rp = &rset;
+    FD_ZERO(rp);
+    for (i = 0; i < RARRAY_LEN(read); i++) {
+      read_io = RARRAY_PTR(read)[i];
+      fptr = io_get_open_fptr(mrb, read_io);
+      FD_SET(fptr->fd, rp);
+      if (mrb_io_read_data_pending(mrb, read_io)) {
+        pending++;
+        FD_SET(fptr->fd, &pset);
+      }
+      if (max < fptr->fd)
+        max = fptr->fd;
+    }
+    if (pending) {
+      timerec.tv_sec = timerec.tv_usec = 0;
+      tp = &timerec;
+    }
+  } else {
+    rp = NULL;
+  }
+
+  if (!mrb_nil_p(write)) {
+    mrb_check_type(mrb, write, MRB_TT_ARRAY);
+    wp = &wset;
+    FD_ZERO(wp);
+    for (i = 0; i < RARRAY_LEN(write); i++) {
+      fptr = io_get_open_fptr(mrb, RARRAY_PTR(write)[i]);
+      FD_SET(fptr->fd, wp);
+      if (max < fptr->fd)
+        max = fptr->fd;
+      if (fptr->fd2 >= 0) {
+        FD_SET(fptr->fd2, wp);
+        if (max < fptr->fd2)
+          max = fptr->fd2;
+      }
+    }
+  } else {
+    wp = NULL;
+  }
+
+  if (!mrb_nil_p(except)) {
+    mrb_check_type(mrb, except, MRB_TT_ARRAY);
+    ep = &eset;
+    FD_ZERO(ep);
+    for (i = 0; i < RARRAY_LEN(except); i++) {
+      fptr = io_get_open_fptr(mrb, RARRAY_PTR(except)[i]);
+      FD_SET(fptr->fd, ep);
+      if (max < fptr->fd)
+        max = fptr->fd;
+      if (fptr->fd2 >= 0) {
+        FD_SET(fptr->fd2, ep);
+        if (max < fptr->fd2)
+          max = fptr->fd2;
+      }
+    }
+  } else {
+    ep = NULL;
+  }
+
+  max++;
+
+retry:
+  n = select(max, rp, wp, ep, tp);
+  if (n < 0) {
+    if (errno != EINTR)
+      mrb_sys_fail(mrb, "select failed");
+    if (tp == NULL)
+      goto retry;
+    interrupt_flag = 1;
+  }
+
+  if (!pending && n == 0)
+    return mrb_nil_value();
+
+  result = mrb_ary_new_capa(mrb, 3);
+  mrb_ary_push(mrb, result, rp? mrb_ary_new(mrb) : mrb_ary_new_capa(mrb, 0));
+  mrb_ary_push(mrb, result, wp? mrb_ary_new(mrb) : mrb_ary_new_capa(mrb, 0));
+  mrb_ary_push(mrb, result, ep? mrb_ary_new(mrb) : mrb_ary_new_capa(mrb, 0));
+
+  if (interrupt_flag == 0) {
+    if (rp) {
+      list = RARRAY_PTR(result)[0];
+      for (i = 0; i < RARRAY_LEN(read); i++) {
+        fptr = io_get_open_fptr(mrb, RARRAY_PTR(read)[i]);
+        if (FD_ISSET(fptr->fd, rp) ||
+            FD_ISSET(fptr->fd, &pset)) {
+          mrb_ary_push(mrb, list, RARRAY_PTR(read)[i]);
+        }
+      }
+    }
+
+    if (wp) {
+      list = RARRAY_PTR(result)[1];
+      for (i = 0; i < RARRAY_LEN(write); i++) {
+        fptr = io_get_open_fptr(mrb, RARRAY_PTR(write)[i]);
+        if (FD_ISSET(fptr->fd, wp)) {
+          mrb_ary_push(mrb, list, RARRAY_PTR(write)[i]);
+        } else if (fptr->fd2 >= 0 && FD_ISSET(fptr->fd2, wp)) {
+          mrb_ary_push(mrb, list, RARRAY_PTR(write)[i]);
+        }
+      }
+    }
+
+    if (ep) {
+      list = RARRAY_PTR(result)[2];
+      for (i = 0; i < RARRAY_LEN(except); i++) {
+        fptr = io_get_open_fptr(mrb, RARRAY_PTR(except)[i]);
+        if (FD_ISSET(fptr->fd, ep)) {
+          mrb_ary_push(mrb, list, RARRAY_PTR(except)[i]);
+        } else if (fptr->fd2 >= 0 && FD_ISSET(fptr->fd2, ep)) {
+          mrb_ary_push(mrb, list, RARRAY_PTR(except)[i]);
+        }
+      }
+    }
+  }
+
+  return result;
+}
+
+int
+mrb_io_fileno(mrb_state *mrb, mrb_value io)
+{
+  struct mrb_io *fptr;
+  fptr = io_get_open_fptr(mrb, io);
+  return fptr->fd;
+}
+
+static mrb_value
+mrb_io_fileno_m(mrb_state *mrb, mrb_value io)
+{
+  int fd = mrb_io_fileno(mrb, io);
+  return mrb_fixnum_value(fd);
+}
+
+mrb_value
+mrb_io_close_on_exec_p(mrb_state *mrb, mrb_value self)
+{
+#if defined(F_GETFD) && defined(F_SETFD) && defined(FD_CLOEXEC)
+  struct mrb_io *fptr;
+  int ret;
+
+  fptr = io_get_open_fptr(mrb, self);
+
+  if (fptr->fd2 >= 0) {
+    if ((ret = fcntl(fptr->fd2, F_GETFD)) == -1) mrb_sys_fail(mrb, "F_GETFD failed");
+    if (!(ret & FD_CLOEXEC)) return mrb_false_value();
+  }
+
+  if ((ret = fcntl(fptr->fd, F_GETFD)) == -1) mrb_sys_fail(mrb, "F_GETFD failed");
+  if (!(ret & FD_CLOEXEC)) return mrb_false_value();
+  return mrb_true_value();
+
+#else
+  mrb_raise(mrb, E_NOTIMP_ERROR, "IO#close_on_exec? is not supported on the platform");
+  return mrb_false_value();
+#endif
+}
+
+mrb_value
+mrb_io_set_close_on_exec(mrb_state *mrb, mrb_value self)
+{
+#if defined(F_GETFD) && defined(F_SETFD) && defined(FD_CLOEXEC)
+  struct mrb_io *fptr;
+  int flag, ret;
+  mrb_bool b;
+
+  fptr = io_get_open_fptr(mrb, self);
+  mrb_get_args(mrb, "b", &b);
+  flag = b ? FD_CLOEXEC : 0;
+
+  if (fptr->fd2 >= 0) {
+    if ((ret = fcntl(fptr->fd2, F_GETFD)) == -1) mrb_sys_fail(mrb, "F_GETFD failed");
+    if ((ret & FD_CLOEXEC) != flag) {
+      ret = (ret & ~FD_CLOEXEC) | flag;
+      ret = fcntl(fptr->fd2, F_SETFD, ret);
+
+      if (ret == -1) mrb_sys_fail(mrb, "F_SETFD failed");
+    }
+  }
+
+  if ((ret = fcntl(fptr->fd, F_GETFD)) == -1) mrb_sys_fail(mrb, "F_GETFD failed");
+  if ((ret & FD_CLOEXEC) != flag) {
+    ret = (ret & ~FD_CLOEXEC) | flag;
+    ret = fcntl(fptr->fd, F_SETFD, ret);
+    if (ret == -1) mrb_sys_fail(mrb, "F_SETFD failed");
+  }
+
+  return mrb_bool_value(b);
+#else
+  mrb_raise(mrb, E_NOTIMP_ERROR, "IO#close_on_exec= is not supported on the platform");
+  return mrb_nil_value();
+#endif
+}
+
+mrb_value
+mrb_io_set_sync(mrb_state *mrb, mrb_value self)
+{
+  struct mrb_io *fptr;
+  mrb_bool b;
+
+  fptr = io_get_open_fptr(mrb, self);
+  mrb_get_args(mrb, "b", &b);
+  fptr->sync = b;
+  return mrb_bool_value(b);
+}
+
+mrb_value
+mrb_io_sync(mrb_state *mrb, mrb_value self)
+{
+  struct mrb_io *fptr;
+  fptr = io_get_open_fptr(mrb, self);
+  return mrb_bool_value(fptr->sync);
+}
+
+#ifndef MRB_WITH_IO_PREAD_PWRITE
+# define mrb_io_pread   mrb_notimplement_m
+# define mrb_io_pwrite  mrb_notimplement_m
+#else
+static off_t
+value2off(mrb_state *mrb, mrb_value offv)
+{
+  switch (mrb_type(offv)) {
+#ifndef MRB_WITHOUT_FLOAT
+    case MRB_TT_FLOAT:
+      {
+        mrb_float tmp = mrb_float(offv);
+        if (tmp < INT64_MIN || tmp > INT64_MAX) {
+          /* fall through to use convert by `mrb_int()` (and raise error if out of range) */
+        } else {
+          return (off_t)tmp;
+        }
+      }
+      /* fall through */
+#endif /* MRB_WITHOUT_FLOAT */
+    default:
+      return (off_t)mrb_int(mrb, offv);
+  }
+}
+
+/*
+ * call-seq:
+ *  pread(maxlen, offset, outbuf = "") -> outbuf
+ */
+static mrb_value
+mrb_io_pread(mrb_state *mrb, mrb_value io)
+{
+  mrb_value buf = mrb_nil_value();
+  mrb_value off;
+  mrb_int maxlen;
+
+  mrb_get_args(mrb, "io|S!", &maxlen, &off, &buf);
+
+  return mrb_io_sysread_common(mrb, pread, io, buf, maxlen, value2off(mrb, off));
+}
+
+/*
+ * call-seq:
+ *  pwrite(buffer, offset) -> wrote_bytes
+ */
+static mrb_value
+mrb_io_pwrite(mrb_state *mrb, mrb_value io)
+{
+  mrb_value buf, off;
+
+  mrb_get_args(mrb, "So", &buf, &off);
+
+  return mrb_io_syswrite_common(mrb, pwrite, io, buf, value2off(mrb, off));
+}
+#endif /* MRB_WITH_IO_PREAD_PWRITE */
+
+static mrb_value
+io_bufread(mrb_state *mrb, mrb_value str, mrb_int len)
+{
+  mrb_value str2;
+  mrb_int newlen;
+  struct RString *s;
+  char *p;
+
+  s = RSTRING(str);
+  mrb_str_modify(mrb, s);
+  p = RSTR_PTR(s);
+  str2 = mrb_str_new(mrb, p, len);
+  newlen = RSTR_LEN(s)-len;
+  memmove(p, p+len, newlen);
+  p[newlen] = '\0';
+  RSTR_SET_LEN(s, newlen);
+
+  return str2;
+}
+
+static mrb_value
+mrb_io_bufread(mrb_state *mrb, mrb_value self)
+{
+  mrb_value str;
+  mrb_int len;
+
+  mrb_get_args(mrb, "Si", &str, &len);
+  return io_bufread(mrb, str, len);
+}
+
+static mrb_value
+mrb_io_readchar(mrb_state *mrb, mrb_value self)
+{
+  mrb_value buf;
+  mrb_int len = 1;
+#ifdef MRB_UTF8_STRING
+  unsigned char c;
+#endif
+
+  mrb_get_args(mrb, "S", &buf);
+  mrb_assert(RSTRING_PTR(buf) > 0);
+  mrb_str_modify(mrb, RSTRING(buf));
+#ifdef MRB_UTF8_STRING
+  c = RSTRING_PTR(buf)[0];
+  if (c & 0x80) {
+    len = mrb_utf8len(RSTRING_PTR(buf), RSTRING_END(buf));
+    if (len == 1 && RSTRING_LEN(buf) < 4) { /* partial UTF-8 */
+      mrb_int blen = RSTRING_LEN(buf);
+      ssize_t n;
+
+      struct mrb_io *fptr = (struct mrb_io*)io_get_open_fptr(mrb, self);
+
+      if (!fptr->readable) {
+        mrb_raise(mrb, E_IO_ERROR, "not opened for reading");
+      }
+      /* refill the buffer */
+      mrb_str_resize(mrb, buf, 4096);
+      n = read(fptr->fd, RSTRING_PTR(buf)+blen, 4096-blen);
+      if (n < 0) mrb_sys_fail(mrb, "sysread failed");
+      mrb_str_resize(mrb, buf, blen+n);
+    }
+    len = mrb_utf8len(RSTRING_PTR(buf), RSTRING_END(buf));
+  }
+#endif
+  return io_bufread(mrb, buf, len);
+}
+
+void
+mrb_init_io(mrb_state *mrb)
+{
+  struct RClass *io;
+
+  io      = mrb_define_class(mrb, "IO", mrb->object_class);
+  MRB_SET_INSTANCE_TT(io, MRB_TT_DATA);
+
+  mrb_include_module(mrb, io, mrb_module_get(mrb, "Enumerable")); /* 15.2.20.3 */
+  mrb_define_class_method(mrb, io, "_popen",  mrb_io_s_popen,   MRB_ARGS_ARG(1,2));
+  mrb_define_class_method(mrb, io, "_sysclose",  mrb_io_s_sysclose, MRB_ARGS_REQ(1));
+  mrb_define_class_method(mrb, io, "for_fd",  mrb_io_s_for_fd,   MRB_ARGS_ARG(1,2));
+  mrb_define_class_method(mrb, io, "select",  mrb_io_s_select,  MRB_ARGS_ARG(1,3));
+  mrb_define_class_method(mrb, io, "sysopen", mrb_io_s_sysopen, MRB_ARGS_ARG(1,2));
+#if !defined(_WIN32) && !(defined(TARGET_OS_IPHONE) && TARGET_OS_IPHONE)
+  mrb_define_class_method(mrb, io, "_pipe", mrb_io_s_pipe, MRB_ARGS_NONE());
+#endif
+
+  mrb_define_method(mrb, io, "initialize", mrb_io_initialize, MRB_ARGS_ARG(1,2));    /* 15.2.20.5.21 (x)*/
+  mrb_define_method(mrb, io, "initialize_copy", mrb_io_initialize_copy, MRB_ARGS_REQ(1));
+  mrb_define_method(mrb, io, "_check_readable", mrb_io_check_readable, MRB_ARGS_NONE());
+  mrb_define_method(mrb, io, "isatty",     mrb_io_isatty,     MRB_ARGS_NONE());
+  mrb_define_method(mrb, io, "sync",       mrb_io_sync,       MRB_ARGS_NONE());
+  mrb_define_method(mrb, io, "sync=",      mrb_io_set_sync,   MRB_ARGS_REQ(1));
+  mrb_define_method(mrb, io, "sysread",    mrb_io_sysread,    MRB_ARGS_ARG(1,1));
+  mrb_define_method(mrb, io, "sysseek",    mrb_io_sysseek,    MRB_ARGS_ARG(1,1));
+  mrb_define_method(mrb, io, "syswrite",   mrb_io_syswrite,   MRB_ARGS_REQ(1));
+  mrb_define_method(mrb, io, "close",      mrb_io_close,      MRB_ARGS_NONE());   /* 15.2.20.5.1 */
+  mrb_define_method(mrb, io, "close_write",    mrb_io_close_write,       MRB_ARGS_NONE());
+  mrb_define_method(mrb, io, "close_on_exec=", mrb_io_set_close_on_exec, MRB_ARGS_REQ(1));
+  mrb_define_method(mrb, io, "close_on_exec?", mrb_io_close_on_exec_p,   MRB_ARGS_NONE());
+  mrb_define_method(mrb, io, "closed?",    mrb_io_closed,     MRB_ARGS_NONE());   /* 15.2.20.5.2 */
+  mrb_define_method(mrb, io, "pid",        mrb_io_pid,        MRB_ARGS_NONE());   /* 15.2.20.5.2 */
+  mrb_define_method(mrb, io, "fileno",     mrb_io_fileno_m,   MRB_ARGS_NONE());
+  mrb_define_method(mrb, io, "pread",      mrb_io_pread,      MRB_ARGS_ANY());    /* ruby 2.5 feature */
+  mrb_define_method(mrb, io, "pwrite",     mrb_io_pwrite,     MRB_ARGS_ANY());    /* ruby 2.5 feature */
+
+  mrb_define_method(mrb, io, "_readchar",  mrb_io_readchar,   MRB_ARGS_REQ(1));
+  mrb_define_class_method(mrb, io, "_bufread",   mrb_io_bufread,    MRB_ARGS_REQ(2));
+}
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-io/src/mruby_io_gem.c
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-io/src/mruby_io_gem.c	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-io/src/mruby_io_gem.c	(revision 439)
@@ -0,0 +1,20 @@
+#include "mruby.h"
+
+void mrb_init_io(mrb_state *mrb);
+void mrb_init_file(mrb_state *mrb);
+void mrb_init_file_test(mrb_state *mrb);
+
+#define DONE mrb_gc_arena_restore(mrb, 0)
+
+void
+mrb_mruby_io_gem_init(mrb_state* mrb)
+{
+  mrb_init_io(mrb); DONE;
+  mrb_init_file(mrb); DONE;
+  mrb_init_file_test(mrb); DONE;
+}
+
+void
+mrb_mruby_io_gem_final(mrb_state* mrb)
+{
+}
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-io/test/file.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-io/test/file.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-io/test/file.rb	(revision 439)
@@ -0,0 +1,229 @@
+##
+# File Test
+
+MRubyIOTestUtil.io_test_setup
+
+assert('File.class', '15.2.21') do
+  assert_equal Class, File.class
+end
+
+assert('File.superclass', '15.2.21.2') do
+  assert_equal IO, File.superclass
+end
+
+assert('File#initialize', '15.2.21.4.1') do
+  io = File.open($mrbtest_io_rfname, "r")
+  assert_nil io.close
+  assert_raise IOError do
+    io.close
+  end
+end
+
+assert('File#path', '15.2.21.4.2') do
+  io = File.open($mrbtest_io_rfname, "r")
+  assert_equal $mrbtest_io_msg, io.read
+  assert_equal $mrbtest_io_rfname, io.path
+  io.close
+  assert_equal $mrbtest_io_rfname, io.path
+  assert_true io.closed?
+end
+
+assert('File.basename') do
+  assert_equal '/', File.basename('//')
+  assert_equal 'a', File.basename('/a/')
+  assert_equal 'b', File.basename('/a/b')
+  assert_equal 'b', File.basename('../a/b')
+  assert_raise(ArgumentError) { File.basename("/a/b\0") }
+end
+
+assert('File.dirname') do
+  assert_equal '.',    File.dirname('')
+  assert_equal '.',    File.dirname('a')
+  assert_equal '/',    File.dirname('/a')
+  assert_equal 'a',    File.dirname('a/b')
+  assert_equal '/a',   File.dirname('/a/b')
+end
+
+assert('File.extname') do
+  assert_equal '.txt', File.extname('foo/foo.txt')
+  assert_equal '.gz',  File.extname('foo/foo.tar.gz')
+  assert_equal '', File.extname('foo/bar')
+  assert_equal '', File.extname('foo/.bar')
+  assert_equal '', File.extname('foo.txt/bar')
+  assert_equal '', File.extname('.foo')
+end
+
+assert('File#flock') do
+  f = File.open $mrbtest_io_rfname
+  begin
+    assert_equal(f.flock(File::LOCK_SH), 0)
+    assert_equal(f.flock(File::LOCK_UN), 0)
+    assert_equal(f.flock(File::LOCK_EX | File::LOCK_NB), 0)
+    assert_equal(f.flock(File::LOCK_UN), 0)
+  rescue NotImplementedError => e
+    skip e.message
+  ensure
+    f.close
+  end
+end
+
+assert('File#mtime') do
+  begin
+    File.open("#{$mrbtest_io_wfname}.mtime", 'w') do |f|
+      assert_equal Time, f.mtime.class
+      File.open("#{$mrbtest_io_wfname}.mtime", 'r') do |f2|
+        assert_equal true, f.mtime == f2.mtime
+      end
+    end
+  ensure
+    File.delete("#{$mrbtest_io_wfname}.mtime")
+  end
+end
+
+assert('File#size and File#truncate') do
+  fname = "#{$mrbtest_io_wfname}.resize"
+  begin
+    File.open(fname, 'w') do |f|
+      assert_equal 0, f.size
+      assert_equal 0, f.truncate(100)
+      assert_equal 100, f.size
+      assert_equal 0, f.pos
+      assert_equal 0, f.truncate(5)
+      assert_equal 5, f.size
+    end
+  ensure
+    File.delete(fname)
+  end
+end
+
+assert('File.join') do
+  assert_equal "", File.join()
+  assert_equal "a", File.join("a")
+  assert_equal "/a", File.join("/a")
+  assert_equal "a/", File.join("a/")
+  assert_equal "a/b/c", File.join("a", "b", "c")
+  assert_equal "/a/b/c", File.join("/a", "b", "c")
+  assert_equal "a/b/c/", File.join("a", "b", "c/")
+  assert_equal "a/b/c", File.join("a/", "/b/", "/c")
+  assert_equal "a/b/c", File.join(["a", "b", "c"])
+  assert_equal "a/b/c", File.join("a", ["b", ["c"]])
+end
+
+assert('File.realpath') do
+  if File::ALT_SEPARATOR
+    readme_path = File._getwd + File::ALT_SEPARATOR + "README.md"
+    assert_equal readme_path, File.realpath("README.md")
+  else
+    dir = MRubyIOTestUtil.mkdtemp("mruby-io-test.XXXXXX")
+    begin
+      dir1 = File.realpath($mrbtest_io_rfname)
+      dir2 = File.realpath("./#{dir}//./../#{$mrbtest_io_symlinkname}")
+      assert_equal dir1, dir2
+    ensure
+      MRubyIOTestUtil.rmdir dir
+    end
+  end
+
+  assert_raise(ArgumentError) { File.realpath("TO\0DO") }
+end
+
+assert("File.readlink") do
+  begin
+    assert_equal $mrbtest_io_rfname, File.readlink($mrbtest_io_symlinkname)
+  rescue NotImplementedError => e
+    skip e.message
+  end
+end
+
+assert("File.readlink fails with non-symlink") do
+  skip "readlink is not supported on this platform" if MRubyIOTestUtil.win?
+  begin
+    e2 = nil
+    assert_raise(RuntimeError) {
+      begin
+        File.readlink($mrbtest_io_rfname)
+      rescue => e
+        if Object.const_defined?(:SystemCallError) and e.kind_of?(SystemCallError)
+          raise RuntimeError, "SystemCallError converted to RuntimeError"
+        end
+        raise e
+      rescue NotImplementedError => e
+        e2 = e
+      end
+    }
+    raise e2 if e2
+  rescue NotImplementedError => e
+    skip e.message
+  end
+end
+
+assert('File.expand_path') do
+  assert_equal "/",    File.expand_path("..", "/tmp"),       "parent path with base_dir (1)"
+  assert_equal "/tmp", File.expand_path("..", "/tmp/mruby"), "parent path with base_dir (2)"
+
+  assert_equal "/home", File.expand_path("/home"),      "absolute"
+  assert_equal "/home", File.expand_path("/home", "."), "absolute with base_dir"
+
+  assert_equal "/hoge", File.expand_path("/tmp/..//hoge")
+  assert_equal "/hoge", File.expand_path("////tmp/..///////hoge")
+
+  assert_equal "/", File.expand_path("../../../..", "/")
+  if File._getwd[1] == ":"
+    drive_letter = File._getwd[0]
+    assert_equal drive_letter + ":\\", File.expand_path(([".."] * 100).join("/"))
+  else
+    assert_equal "/", File.expand_path(([".."] * 100).join("/"))
+  end
+end
+
+assert('File.expand_path (with ENV)') do
+  skip unless Object.const_defined?(:ENV) && ENV['HOME']
+
+  assert_equal ENV['HOME'], File.expand_path("~/"),      "home"
+  assert_equal ENV['HOME'], File.expand_path("~/", "/"), "home with base_dir"
+
+  assert_equal "#{ENV['HOME']}/user", File.expand_path("user", ENV['HOME']), "relative with base_dir"
+end
+
+assert('File.path') do
+  assert_equal "", File.path("")
+  assert_equal "a/b/c", File.path("a/b/c")
+  assert_equal "a/../b/./c", File.path("a/../b/./c")
+  assert_raise(TypeError) { File.path(nil) }
+  assert_raise(TypeError) { File.path(123) }
+end
+
+assert('File.symlink') do
+  target_name = "/usr/bin"
+  if !File.exist?(target_name)
+    skip("target directory of File.symlink is not found")
+  end
+
+  begin
+    tmpdir = MRubyIOTestUtil.mkdtemp("mruby-io-test.XXXXXX")
+  rescue => e
+    skip e.message
+  end
+
+  symlink_name = "#{tmpdir}/test-bin-dummy"
+  begin
+    assert_equal 0, File.symlink(target_name, symlink_name)
+    assert_equal true, File.symlink?(symlink_name)
+  rescue NotImplementedError => e
+    skip e.message
+  ensure
+    File.delete symlink_name rescue nil
+    MRubyIOTestUtil.rmdir tmpdir rescue nil
+  end
+end
+
+assert('File.chmod') do
+  File.open("#{$mrbtest_io_wfname}.chmod-test", 'w') {}
+  begin
+    assert_equal 1, File.chmod(0400, "#{$mrbtest_io_wfname}.chmod-test")
+  ensure
+    File.delete("#{$mrbtest_io_wfname}.chmod-test")
+  end
+end
+
+MRubyIOTestUtil.io_test_cleanup
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-io/test/file_test.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-io/test/file_test.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-io/test/file_test.rb	(revision 439)
@@ -0,0 +1,112 @@
+##
+# FileTest
+
+MRubyIOTestUtil.io_test_setup
+
+assert("FileTest.directory?") do
+  dir = MRubyIOTestUtil.mkdtemp("mruby-io-test.XXXXXX")
+  begin
+    assert_true  FileTest.directory?(dir)
+    assert_false FileTest.directory?($mrbtest_io_rfname)
+  ensure
+    MRubyIOTestUtil.rmdir dir
+  end
+end
+
+assert("FileTest.exist?") do
+  assert_equal true,  FileTest.exist?($mrbtest_io_rfname), "filename - exist"
+  assert_equal false, FileTest.exist?($mrbtest_io_rfname + "-"), "filename - not exist"
+  io = IO.new(IO.sysopen($mrbtest_io_rfname))
+  assert_equal true,  FileTest.exist?(io), "io obj - exist"
+  io.close
+  assert_equal true, io.closed?
+  assert_raise(IOError) { FileTest.exist?(io) }
+  assert_raise(TypeError) { File.exist?($mrbtest_io_rfname.to_sym) }
+end
+
+assert("FileTest.file?") do
+  dir = MRubyIOTestUtil.mkdtemp("mruby-io-test.XXXXXX")
+  begin
+    assert_true  FileTest.file?($mrbtest_io_rfname)
+    assert_false FileTest.file?(dir)
+  ensure
+    MRubyIOTestUtil.rmdir dir
+  end
+end
+
+assert("FileTest.pipe?") do
+  begin
+    assert_equal false, FileTest.pipe?("/tmp")
+    io = IO.popen("ls")
+    assert_equal true,  FileTest.pipe?(io)
+  rescue NotImplementedError => e
+    skip e.message
+  end
+end
+
+assert('FileTest.size') do
+  assert_equal FileTest.size($mrbtest_io_rfname), $mrbtest_io_msg.size
+  assert_equal FileTest.size($mrbtest_io_wfname), 0
+end
+
+assert("FileTest.size?") do
+  assert_equal $mrbtest_io_msg.size, FileTest.size?($mrbtest_io_rfname)
+  assert_equal nil, FileTest.size?($mrbtest_io_wfname)
+  assert_equal nil, FileTest.size?("not-exist-test-target-file")
+
+  fp1 = File.open($mrbtest_io_rfname)
+  fp2 = File.open($mrbtest_io_wfname)
+  assert_equal $mrbtest_io_msg.size,  FileTest.size?(fp1)
+  assert_equal nil, FileTest.size?(fp2)
+  fp1.close
+  fp2.close
+
+  assert_raise IOError do
+    FileTest.size?(fp1)
+  end
+  assert_true fp1.closed?
+  assert_raise IOError do
+    FileTest.size?(fp2)
+  end
+  assert_true fp2.closed?
+end
+
+assert("FileTest.socket?") do
+  begin
+    assert_true FileTest.socket?($mrbtest_io_socketname)
+  rescue NotImplementedError => e
+    skip e.message
+  end
+end
+
+assert("FileTest.symlink?") do
+  begin
+    assert_true FileTest.symlink?($mrbtest_io_symlinkname)
+  rescue NotImplementedError => e
+    skip e.message
+  end
+end
+
+assert("FileTest.zero?") do
+  assert_equal false, FileTest.zero?($mrbtest_io_rfname)
+  assert_equal true,  FileTest.zero?($mrbtest_io_wfname)
+  assert_equal false, FileTest.zero?("not-exist-test-target-file")
+
+  fp1 = File.open($mrbtest_io_rfname)
+  fp2 = File.open($mrbtest_io_wfname)
+  assert_equal false, FileTest.zero?(fp1)
+  assert_equal true,  FileTest.zero?(fp2)
+  fp1.close
+  fp2.close
+
+  assert_raise IOError do
+    FileTest.zero?(fp1)
+  end
+  assert_true fp1.closed?
+  assert_raise IOError do
+    FileTest.zero?(fp2)
+  end
+  assert_true fp2.closed?
+end
+
+MRubyIOTestUtil.io_test_cleanup
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-io/test/io.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-io/test/io.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-io/test/io.rb	(revision 439)
@@ -0,0 +1,643 @@
+##
+# IO Test
+
+MRubyIOTestUtil.io_test_setup
+$cr, $crlf, $cmd = MRubyIOTestUtil.win? ? [1, "\r\n", "cmd /c "] : [0, "\n", ""]
+
+def assert_io_open(meth)
+  assert "assert_io_open" do
+    fd = IO.sysopen($mrbtest_io_rfname)
+    assert_equal Fixnum, fd.class
+    io1 = IO.__send__(meth, fd)
+    begin
+      assert_equal IO, io1.class
+      assert_equal $mrbtest_io_msg, io1.read
+    ensure
+      io1.close
+    end
+
+    io2 = IO.__send__(meth, IO.sysopen($mrbtest_io_rfname))do |io|
+      if meth == :open
+        assert_equal $mrbtest_io_msg, io.read
+      else
+        flunk "IO.#{meth} does not take block"
+      end
+    end
+    io2.close unless meth == :open
+  end
+end
+
+assert('IO.class', '15.2.20') do
+  assert_equal(Class, IO.class)
+end
+
+assert('IO.superclass', '15.2.20.2') do
+  assert_equal(Object, IO.superclass)
+end
+
+assert('IO.ancestors', '15.2.20.3') do
+  assert_include(IO.ancestors, Enumerable)
+end
+
+assert('IO.open', '15.2.20.4.1') do
+  assert_io_open(:open)
+end
+
+assert('IO#close', '15.2.20.5.1') do
+  io = IO.new(IO.sysopen($mrbtest_io_rfname))
+  assert_nil io.close
+end
+
+assert('IO#closed?', '15.2.20.5.2') do
+  io = IO.new(IO.sysopen($mrbtest_io_rfname))
+  assert_false io.closed?
+  io.close
+  assert_true io.closed?
+end
+
+#assert('IO#each', '15.2.20.5.3') do
+#assert('IO#each_byte', '15.2.20.5.4') do
+#assert('IO#each_line', '15.2.20.5.5') do
+
+assert('IO#eof?', '15.2.20.5.6') do
+  io = IO.new(IO.sysopen($mrbtest_io_wfname, 'w'), 'w')
+  assert_raise(IOError) do
+    io.eof?
+  end
+  io.close
+
+  # empty file
+  io = IO.open(IO.sysopen($mrbtest_io_wfname, 'w'), 'w')
+  io.close
+  io = IO.open(IO.sysopen($mrbtest_io_wfname, 'r'), 'r')
+  assert_true io.eof?
+  io.close
+
+  # nonempty file
+  io = IO.new(IO.sysopen($mrbtest_io_rfname))
+  assert_false io.eof?
+  io.readchar
+  assert_false io.eof?
+  io.read
+  assert_true io.eof?
+  io.close
+end
+
+assert('IO#flush', '15.2.20.5.7') do
+  # Note: mruby-io does not have any buffer to be flushed now.
+  io = IO.new(IO.sysopen($mrbtest_io_wfname))
+  assert_equal io, io.flush
+  io.close
+  assert_raise(IOError) do
+    io.flush
+  end
+end
+
+assert('IO#getc', '15.2.20.5.8') do
+  io = IO.new(IO.sysopen($mrbtest_io_rfname))
+  $mrbtest_io_msg.split("").each { |ch|
+    assert_equal ch, io.getc
+  }
+  assert_equal nil, io.getc
+  io.close
+end
+
+#assert('IO#gets', '15.2.20.5.9') do
+#assert('IO#initialize_copy', '15.2.20.5.10') do
+#assert('IO#print', '15.2.20.5.11') do
+#assert('IO#putc', '15.2.20.5.12') do
+#assert('IO#puts', '15.2.20.5.13') do
+
+assert('IO#read', '15.2.20.5.14') do
+  IO.open(IO.sysopen($mrbtest_io_rfname)) do |io|
+    assert_raise(ArgumentError) { io.read(-5) }
+    assert_raise(TypeError) { io.read("str") }
+
+    len = $mrbtest_io_msg.length
+    assert_equal '', io.read(0)
+    assert_equal 'mruby', io.read(5)
+    assert_equal $mrbtest_io_msg[5,len], io.read(len)
+
+    assert_equal "", io.read
+    assert_nil io.read(1)
+  end
+
+  IO.open(IO.sysopen($mrbtest_io_rfname)) do |io|
+    assert_equal $mrbtest_io_msg, io.read
+  end
+end
+
+assert "IO#read(n) with n > IO::BUF_SIZE" do
+  skip "pipe is not supported on this platform" if MRubyIOTestUtil.win?
+  IO.pipe do |r,w|
+    n = IO::BUF_SIZE+1
+    w.write 'a'*n
+    assert_equal 'a'*n, r.read(n)
+  end
+end
+
+assert('IO#readchar', '15.2.20.5.15') do
+  # almost same as IO#getc
+  IO.open(IO.sysopen($mrbtest_io_rfname)) do |io|
+    $mrbtest_io_msg.split("").each { |ch|
+      assert_equal ch, io.readchar
+    }
+    assert_raise(EOFError) do
+      io.readchar
+    end
+  end
+end
+
+#assert('IO#readline', '15.2.20.5.16') do
+#assert('IO#readlines', '15.2.20.5.17') do
+
+assert('IO#sync', '15.2.20.5.18') do
+  io = IO.new(IO.sysopen($mrbtest_io_rfname))
+  s = io.sync
+  assert_true(s == true || s == false)
+  io.close
+  assert_raise(IOError) do
+    io.sync
+  end
+end
+
+assert('IO#sync=', '15.2.20.5.19') do
+  io = IO.new(IO.sysopen($mrbtest_io_rfname))
+  io.sync = true
+  assert_true io.sync
+  io.sync = false
+  assert_false io.sync
+  io.close
+  assert_raise(IOError) do
+    io.sync = true
+  end
+end
+
+assert('IO#write', '15.2.20.5.20') do
+  io = IO.open(IO.sysopen($mrbtest_io_wfname))
+  assert_equal 0, io.write("")
+  io.close
+
+  io = IO.open(IO.sysopen($mrbtest_io_wfname, "r+"), "r+")
+  assert_equal 7, io.write("abcdefg")
+  io.rewind
+  assert_equal "ab", io.read(2)
+  assert_equal 3, io.write("123")
+  io.rewind
+  assert_equal "ab123fg", io.read
+  io.close
+end
+
+assert('IO#<<') do
+  io = IO.open(IO.sysopen($mrbtest_io_wfname))
+  io << "" << ""
+  assert_equal 0, io.pos
+  io.close
+end
+
+assert('IO#dup for readable') do
+  io = IO.new(IO.sysopen($mrbtest_io_rfname))
+  dup = io.dup
+  assert_true io != dup
+  assert_true io.fileno != dup.fileno
+  begin
+    assert_true dup.close_on_exec?
+  rescue NotImplementedError
+  end
+  assert_equal 'm', dup.sysread(1)
+  assert_equal 'r', io.sysread(1)
+  assert_equal 'u', dup.sysread(1)
+  assert_equal 'b', io.sysread(1)
+  assert_equal 'y', dup.sysread(1)
+  dup.close
+  assert_false io.closed?
+  io.close
+end
+
+assert('IO#dup for writable') do
+  io = IO.open(IO.sysopen($mrbtest_io_wfname, 'w+'), 'w+')
+  dup = io.dup
+  io.syswrite "mruby"
+  assert_equal 5, dup.sysseek(0, IO::SEEK_CUR)
+  io.sysseek 0, IO::SEEK_SET
+  assert_equal 0, dup.sysseek(0, IO::SEEK_CUR)
+  assert_equal "mruby", dup.sysread(5)
+  dup.close
+  io.close
+end
+
+assert('IO.for_fd') do
+  assert_io_open(:for_fd)
+end
+
+assert('IO.new') do
+  assert_io_open(:new)
+end
+
+assert('IO gc check') do
+  assert_nothing_raised { 100.times { IO.new(0) } }
+end
+
+assert('IO.sysopen("./nonexistent")') do
+  if Object.const_defined? :Errno
+    eclass = Errno::ENOENT
+  else
+    eclass = RuntimeError
+  end
+  assert_raise eclass do
+    fd = IO.sysopen "./nonexistent"
+    IO._sysclose fd
+  end
+end
+
+assert('IO.sysopen, IO#sysread') do
+  fd = IO.sysopen $mrbtest_io_rfname
+  io = IO.new fd
+  str1 = "     "
+  str2 = io.sysread(5, str1)
+  assert_equal $mrbtest_io_msg[0,5], str1
+  assert_equal $mrbtest_io_msg[0,5], str2
+  assert_raise EOFError do
+    io.sysread(10000)
+    io.sysread(10000)
+  end
+
+  assert_raise RuntimeError do
+    io.sysread(5, "abcde".freeze)
+  end
+
+  io.close
+  assert_equal "", io.sysread(0)
+  assert_raise(IOError) { io.sysread(1) }
+  assert_raise(ArgumentError) { io.sysread(-1) }
+  io.closed?
+
+  fd = IO.sysopen $mrbtest_io_wfname, "w"
+  io = IO.new fd, "w"
+  assert_raise(IOError) { io.sysread(1) }
+  io.close
+end
+
+assert('IO.sysopen, IO#syswrite') do
+  fd = IO.sysopen $mrbtest_io_wfname, "w"
+  io = IO.new fd, "w"
+  str = "abcdefg"
+  len = io.syswrite(str)
+  assert_equal str.size, len
+  io.close
+
+  io = IO.new(IO.sysopen($mrbtest_io_rfname), "r")
+  assert_raise(IOError) { io.syswrite("a") }
+  io.close
+end
+
+assert('IO#_read_buf') do
+  fd = IO.sysopen $mrbtest_io_rfname
+  io = IO.new fd
+  def io._buf
+    @buf
+  end
+  msg_len = $mrbtest_io_msg.size
+  assert_equal '', io._buf
+  assert_equal $mrbtest_io_msg, io._read_buf
+  assert_equal $mrbtest_io_msg, io._buf
+  assert_equal 'mruby', io.read(5)
+  assert_equal 5, io.pos
+  assert_equal msg_len - 5, io._buf.size
+  assert_equal $mrbtest_io_msg[5,100], io.read
+  assert_equal 0, io._buf.size
+  assert_raise EOFError do
+    io._read_buf
+  end
+  assert_equal true, io.eof
+  assert_equal true, io.eof?
+  io.close
+end
+
+assert('IO#isatty') do
+  skip "isatty is not supported on this platform" if MRubyIOTestUtil.win?
+  begin
+    f = File.open("/dev/tty")
+  rescue RuntimeError => e
+    skip e.message
+  else
+    assert_true f.isatty
+  ensure
+    f&.close
+  end
+  begin
+    f = File.open($mrbtest_io_rfname)
+    assert_false f.isatty
+  ensure
+    f&.close
+  end
+end
+
+assert('IO#pos=, IO#seek') do
+  fd = IO.sysopen $mrbtest_io_rfname
+  io = IO.new fd
+  def io._buf
+    @buf
+  end
+  assert_equal 'm', io.getc
+  assert_equal 1, io.pos
+  assert_equal 0, io.seek(0)
+  assert_equal 0, io.pos
+  io.close
+end
+
+assert('IO#rewind') do
+  fd = IO.sysopen $mrbtest_io_rfname
+  io = IO.new fd
+  assert_equal 'm', io.getc
+  assert_equal 1, io.pos
+  assert_equal 0, io.rewind
+  assert_equal 0, io.pos
+  io.close
+end
+
+assert('IO#gets') do
+  fd = IO.sysopen $mrbtest_io_rfname
+  io = IO.new fd
+
+  # gets without arguments
+  assert_equal $mrbtest_io_msg, io.gets, "gets without arguments"
+  assert_equal nil, io.gets, "gets returns nil, when EOF"
+
+  # gets with limit
+  io.pos = 0
+  assert_equal $mrbtest_io_msg[0, 5], io.gets(5), "gets with limit"
+
+  # gets with rs
+  io.pos = 0
+  assert_equal $mrbtest_io_msg[0, 6], io.gets(' '), "gets with rs"
+
+  # gets with rs, limit
+  io.pos = 0
+  assert_equal $mrbtest_io_msg[0, 5], io.gets(' ', 5), "gets with rs, limit"
+  io.close
+  assert_equal true, io.closed?, "close success"
+
+  # reading many-lines file.
+  fd = IO.sysopen $mrbtest_io_wfname, "w"
+  io = IO.new fd, "w"
+  io.write "0123456789" * 2 + "\na"
+  assert_equal 22 + $cr, io.pos
+  io.close
+  assert_equal true, io.closed?
+
+  fd = IO.sysopen $mrbtest_io_wfname
+  io = IO.new fd
+  line = io.gets
+
+  # gets first line
+  assert_equal "0123456789" * 2 + "\n", line, "gets first line"
+  assert_equal 21, line.size
+  assert_equal 21 + $cr, io.pos
+
+  # gets second line
+  assert_equal "a", io.gets, "gets second line"
+
+  # gets third line
+  assert_equal nil, io.gets, "gets third line; returns nil"
+
+  io.close
+end
+
+assert('IO#gets - paragraph mode') do
+  fd = IO.sysopen $mrbtest_io_wfname, "w"
+  io = IO.new fd, "w"
+  io.write "0" * 10 + "\n"
+  io.write "1" * 10 + "\n\n"
+  io.write "2" * 10 + "\n"
+  assert_equal 34 + $cr * 4, io.pos
+  io.close
+
+  fd = IO.sysopen $mrbtest_io_wfname
+  io = IO.new fd
+  para1 = "#{'0' * 10}\n#{'1' * 10}\n\n"
+  text1 = io.gets("")
+  assert_equal para1, text1
+  para2 = "#{'2' * 10}\n"
+  text2 = io.gets("")
+  assert_equal para2, text2
+  io.close
+end
+
+assert('IO.popen') do
+  begin
+    $? = nil
+    io = IO.popen("#{$cmd}echo mruby-io")
+    assert_true io.close_on_exec?
+    assert_equal Fixnum, io.pid.class
+
+    out = io.read
+    assert_equal out.class, String
+    assert_include out, 'mruby-io'
+
+    io.close
+    if Object.const_defined? :Process
+      assert_true $?.success?
+    else
+      assert_equal 0, $?
+    end
+
+    assert_true io.closed?
+  rescue NotImplementedError => e
+    skip e.message
+  end
+end
+
+assert('IO.popen with in option') do
+  begin
+    IO.pipe do |r, w|
+      w.write 'hello'
+      w.close
+      assert_equal "hello", IO.popen("cat", "r", in: r) { |i| i.read }
+      assert_equal "", r.read
+    end
+    assert_raise(ArgumentError) { IO.popen("hello", "r", in: Object.new) }
+  rescue NotImplementedError => e
+    skip e.message
+  end
+end
+
+assert('IO.popen with out option') do
+  begin
+    IO.pipe do |r, w|
+      IO.popen("echo 'hello'", "w", out: w) {}
+      w.close
+      assert_equal "hello\n", r.read
+    end
+  rescue NotImplementedError => e
+    skip e.message
+  end
+end
+
+assert('IO.popen with err option') do
+  begin
+    IO.pipe do |r, w|
+      assert_equal "", IO.popen("echo 'hello' 1>&2", "r", err: w) { |i| i.read }
+      w.close
+      assert_equal "hello\n", r.read
+    end
+  rescue NotImplementedError => e
+    skip e.message
+  end
+end
+
+assert('IO.read') do
+  # empty file
+  fd = IO.sysopen $mrbtest_io_wfname, "w"
+  io = IO.new fd, "w"
+  io.close
+  assert_equal "",  IO.read($mrbtest_io_wfname)
+  assert_equal nil, IO.read($mrbtest_io_wfname, 1)
+
+  # one byte file
+  fd = IO.sysopen $mrbtest_io_wfname, "w"
+  io = IO.new fd, "w"
+  io.write "123"
+  io.close
+  assert_equal "123", IO.read($mrbtest_io_wfname)
+  assert_equal "",    IO.read($mrbtest_io_wfname, 0)
+  assert_equal "1",   IO.read($mrbtest_io_wfname, 1)
+  assert_equal "",    IO.read($mrbtest_io_wfname, 0, 10)
+  assert_equal "23",  IO.read($mrbtest_io_wfname, 2, 1)
+  assert_equal "23",  IO.read($mrbtest_io_wfname, 10, 1)
+  assert_equal "",    IO.read($mrbtest_io_wfname, nil, 10)
+  assert_equal nil,   IO.read($mrbtest_io_wfname, 1, 10)
+end
+
+assert('IO#fileno') do
+  fd = IO.sysopen $mrbtest_io_rfname
+  io = IO.new fd
+  assert_equal io.fileno, fd
+  assert_equal io.to_i, fd
+  io.close
+end
+
+assert('IO#close_on_exec') do
+  fd = IO.sysopen $mrbtest_io_wfname, "w"
+  io = IO.new fd, "w"
+  begin
+    # IO.sysopen opens a file descripter with O_CLOEXEC flag.
+    assert_true io.close_on_exec?
+  rescue ScriptError
+    io.close
+    skip "IO\#close_on_exec is not implemented."
+  end
+
+  io.close_on_exec = false
+  assert_equal(false, io.close_on_exec?)
+  io.close_on_exec = true
+  assert_equal(true, io.close_on_exec?)
+  io.close_on_exec = false
+  assert_equal(false, io.close_on_exec?)
+
+  io.close
+
+  begin
+    r, w = IO.pipe
+    assert_equal(true, r.close_on_exec?)
+    r.close_on_exec = false
+    assert_equal(false, r.close_on_exec?)
+    r.close_on_exec = true
+    assert_equal(true, r.close_on_exec?)
+
+    assert_equal(true, w.close_on_exec?)
+    w.close_on_exec = false
+    assert_equal(false, w.close_on_exec?)
+    w.close_on_exec = true
+    assert_equal(true, w.close_on_exec?)
+  ensure
+    r.close unless r.closed?
+    w.close unless w.closed?
+  end
+end
+
+assert('IO#sysseek') do
+  IO.open(IO.sysopen($mrbtest_io_rfname)) do |io|
+    assert_equal 2, io.sysseek(2)
+    assert_equal 5, io.sysseek(3, IO::SEEK_CUR) # 2 + 3 => 5
+    assert_equal $mrbtest_io_msg.size - 4, io.sysseek(-4, IO::SEEK_END)
+  end
+end
+
+assert('IO#pread') do
+  skip "IO#pread is not implemented on this configuration" unless MRubyIOTestUtil::MRB_WITH_IO_PREAD_PWRITE
+
+  IO.open(IO.sysopen($mrbtest_io_rfname, 'r'), 'r') do |io|
+    assert_equal $mrbtest_io_msg.byteslice(5, 8), io.pread(8, 5)
+    assert_equal 0, io.pos
+    assert_equal $mrbtest_io_msg.byteslice(1, 5), io.pread(5, 1)
+    assert_equal 0, io.pos
+    assert_raise(RuntimeError) { io.pread(20, -9) }
+  end
+end
+
+assert('IO#pwrite') do
+  skip "IO#pwrite is not implemented on this configuration" unless MRubyIOTestUtil::MRB_WITH_IO_PREAD_PWRITE
+
+  IO.open(IO.sysopen($mrbtest_io_wfname, 'w+'), 'w+') do |io|
+    assert_equal 6, io.pwrite("Warld!", 7)
+    assert_equal 0, io.pos
+    assert_equal 7, io.pwrite("Hello, ", 0)
+    assert_equal 0, io.pos
+    assert_equal "Hello, Warld!", io.read
+    assert_equal 6, io.pwrite("world!", 7)
+    assert_equal 13, io.pos
+    io.pos = 0
+    assert_equal "Hello, world!", io.read
+  end
+end
+
+assert('IO.pipe') do
+  begin
+    called = false
+    IO.pipe do |r, w|
+      assert_true r.kind_of?(IO)
+      assert_true w.kind_of?(IO)
+      assert_false r.closed?
+      assert_false w.closed?
+      assert_true FileTest.pipe?(r)
+      assert_true FileTest.pipe?(w)
+      assert_nil r.pid
+      assert_nil w.pid
+      assert_true 2 < r.fileno
+      assert_true 2 < w.fileno
+      assert_true r.fileno != w.fileno
+      assert_false r.sync
+      assert_true w.sync
+      assert_equal 8, w.write('test for')
+      assert_equal 'test', r.read(4)
+      assert_equal ' for', r.read(4)
+      assert_equal 5, w.write(' pipe')
+      assert_equal nil, w.close
+      assert_equal ' pipe', r.read
+      called = true
+      assert_raise(IOError) { r.write 'test' }
+      # TODO:
+      # This assert expect raise IOError but got RuntimeError
+      # Because mruby-io not have flag for I/O readable
+      # assert_raise(IOError) { w.read }
+    end
+    assert_true called
+
+    assert_nothing_raised do
+      IO.pipe { |r, w| r.close; w.close }
+    end
+  rescue NotImplementedError => e
+    skip e.message
+  end
+end
+
+assert('`cmd`') do
+  begin
+    assert_equal `#{$cmd}echo foo`, "foo#{$crlf}"
+  rescue NotImplementedError => e
+    skip e.message
+  end
+end
+
+MRubyIOTestUtil.io_test_cleanup
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-io/test/mruby_io_test.c
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-io/test/mruby_io_test.c	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-io/test/mruby_io_test.c	(revision 439)
@@ -0,0 +1,286 @@
+#include <mruby/common.h>
+#include <sys/types.h>
+#include <errno.h>
+#include <string.h>
+
+#if defined(_WIN32) || defined(_WIN64)
+
+#include <winsock.h>
+#include <io.h>
+#include <fcntl.h>
+#include <direct.h>
+#include <stdlib.h>
+#include <malloc.h>
+
+#if (!defined __MINGW64__) && (!defined __MINGW32__)
+typedef int mode_t;
+#endif
+
+#define open _open
+#define close _close
+
+#if defined(_MSC_VER) || \
+    (defined(MRB_MINGW32_VERSION) && MRB_MINGW32_VERSION < 3021) || \
+    (defined(MRB_MINGW64_VERSION) && MRB_MINGW64_VERSION < 4000)
+#include <sys/stat.h>
+
+static int
+mkstemp(char *p)
+{
+  int fd;
+  char* fname = _mktemp(p);
+  if (fname == NULL)
+    return -1;
+  fd = open(fname, O_RDWR | O_CREAT | O_EXCL, _S_IREAD | _S_IWRITE);
+  if (fd >= 0)
+    return fd;
+  return -1;
+}
+#endif
+
+static char*
+mkdtemp(char *temp)
+{
+  char *path = _mktemp(temp);
+  if (path[0] == 0) return NULL;
+  if (_mkdir(path) < 0) return NULL;
+  return path;
+}
+
+#define umask(mode) _umask(mode)
+#define rmdir(path) _rmdir(path)
+#else
+  #include <sys/socket.h>
+  #include <unistd.h>
+  #include <sys/un.h>
+  #include <fcntl.h>
+#endif
+
+#include <sys/stat.h>
+#include <stdlib.h>
+
+#include "mruby.h"
+#include "mruby/array.h"
+#include "mruby/error.h"
+#include "mruby/string.h"
+#include "mruby/variable.h"
+#include <mruby/ext/io.h>
+
+int wd_save;
+int socket_available_p;
+
+#if !defined(_WIN32) && !defined(_WIN64)
+static int mrb_io_socket_available()
+{
+  int fd, retval = 0;
+  struct sockaddr_un sun0;
+  char socketname[] = "tmp.mruby-io-socket-ok.XXXXXXXX";
+  if (!(fd = mkstemp(socketname))) {
+    goto sock_test_out;
+  }
+  unlink(socketname);
+  close(fd);
+  fd = socket(AF_UNIX, SOCK_STREAM, 0);
+  if (fd == -1) {
+    goto sock_test_out;
+  }
+  sun0.sun_family = AF_UNIX;
+  strncpy(sun0.sun_path, socketname, sizeof(sun0.sun_path));
+  if (bind(fd, (struct sockaddr *)&sun0, sizeof(sun0)) == 0) {
+    retval = 1;
+  }
+sock_test_out:
+  unlink(socketname);
+  close(fd);
+  return retval;
+}
+#endif
+
+static mrb_value
+mrb_io_test_io_setup(mrb_state *mrb, mrb_value self)
+{
+  char rfname[]      = "tmp.mruby-io-test-r.XXXXXXXX";
+  char wfname[]      = "tmp.mruby-io-test-w.XXXXXXXX";
+  char symlinkname[] = "tmp.mruby-io-test-l.XXXXXXXX";
+  char socketname[]  = "tmp.mruby-io-test-s.XXXXXXXX";
+  char msg[] = "mruby io test\n";
+  mode_t mask;
+  int fd0, fd1;
+  FILE *fp;
+
+#if !defined(_WIN32) && !defined(_WIN64)
+  int fd2, fd3;
+  struct sockaddr_un sun0;
+
+  if(!(socket_available_p = mrb_io_socket_available())) {
+    char *tmpdir;
+    wd_save = open(".", O_DIRECTORY);
+    tmpdir = getenv("TMPDIR");
+    if (tmpdir) chdir(tmpdir);
+    else chdir("/tmp");
+  }
+#endif
+
+  mask = umask(077);
+  fd0 = mkstemp(rfname);
+  fd1 = mkstemp(wfname);
+  if (fd0 == -1 || fd1 == -1) {
+    mrb_raise(mrb, E_RUNTIME_ERROR, "can't create temporary file");
+    return mrb_nil_value();
+  }
+  close(fd0);
+  close(fd1);
+
+#if !defined(_WIN32) && !defined(_WIN64)
+  fd2 = mkstemp(symlinkname);
+  fd3 = mkstemp(socketname);
+  if (fd2 == -1 || fd3 == -1) {
+    mrb_raise(mrb, E_RUNTIME_ERROR, "can't create temporary file");
+    return mrb_nil_value();
+  }
+#endif
+  umask(mask);
+
+  mrb_gv_set(mrb, mrb_intern_cstr(mrb, "$mrbtest_io_rfname"), mrb_str_new_cstr(mrb, rfname));
+  mrb_gv_set(mrb, mrb_intern_cstr(mrb, "$mrbtest_io_wfname"), mrb_str_new_cstr(mrb, wfname));
+  mrb_gv_set(mrb, mrb_intern_cstr(mrb, "$mrbtest_io_symlinkname"), mrb_str_new_cstr(mrb, symlinkname));
+  mrb_gv_set(mrb, mrb_intern_cstr(mrb, "$mrbtest_io_socketname"), mrb_str_new_cstr(mrb, socketname));
+  mrb_gv_set(mrb, mrb_intern_cstr(mrb, "$mrbtest_io_msg"), mrb_str_new_cstr(mrb, msg));
+
+  fp = fopen(rfname, "wb");
+  if (fp == NULL) {
+    mrb_raise(mrb, E_RUNTIME_ERROR, "can't open temporary file");
+    return mrb_nil_value();
+  }
+  fputs(msg, fp);
+  fclose(fp);
+
+  fp = fopen(wfname, "wb");
+  if (fp == NULL) {
+    mrb_raise(mrb, E_RUNTIME_ERROR, "can't open temporary file");
+    return mrb_nil_value();
+  }
+  fclose(fp);
+
+#if !defined(_WIN32) && !defined(_WIN64)
+  unlink(symlinkname);
+  close(fd2);
+  if (symlink(rfname, symlinkname) == -1) {
+    mrb_raise(mrb, E_RUNTIME_ERROR, "can't make a symbolic link");
+  }
+
+  unlink(socketname);
+  close(fd3);
+  fd3 = socket(AF_UNIX, SOCK_STREAM, 0);
+  if (fd3 == -1) {
+    mrb_raise(mrb, E_RUNTIME_ERROR, "can't make a socket");
+  }
+  sun0.sun_family = AF_UNIX;
+  strncpy(sun0.sun_path, socketname, sizeof(sun0.sun_path));
+  if (bind(fd3, (struct sockaddr *)&sun0, sizeof(sun0)) == -1) {
+    mrb_raisef(mrb, E_RUNTIME_ERROR, "can't bind AF_UNIX socket to %s: %d",
+               sun0.sun_path,
+               errno);
+  }
+  close(fd3);
+#endif
+
+  return mrb_true_value();
+}
+
+static mrb_value
+mrb_io_test_io_cleanup(mrb_state *mrb, mrb_value self)
+{
+  mrb_value rfname = mrb_gv_get(mrb, mrb_intern_cstr(mrb, "$mrbtest_io_rfname"));
+  mrb_value wfname = mrb_gv_get(mrb, mrb_intern_cstr(mrb, "$mrbtest_io_wfname"));
+  mrb_value symlinkname = mrb_gv_get(mrb, mrb_intern_cstr(mrb, "$mrbtest_io_symlinkname"));
+  mrb_value socketname = mrb_gv_get(mrb, mrb_intern_cstr(mrb, "$mrbtest_io_socketname"));
+
+  if (mrb_string_p(rfname)) {
+    remove(RSTRING_PTR(rfname));
+  }
+  if (mrb_string_p(wfname)) {
+    remove(RSTRING_PTR(wfname));
+  }
+  if (mrb_string_p(symlinkname)) {
+    remove(RSTRING_PTR(symlinkname));
+  }
+  if (mrb_string_p(socketname)) {
+    remove(RSTRING_PTR(socketname));
+  }
+
+  mrb_gv_set(mrb, mrb_intern_cstr(mrb, "$mrbtest_io_rfname"), mrb_nil_value());
+  mrb_gv_set(mrb, mrb_intern_cstr(mrb, "$mrbtest_io_wfname"), mrb_nil_value());
+  mrb_gv_set(mrb, mrb_intern_cstr(mrb, "$mrbtest_io_symlinkname"), mrb_nil_value());
+  mrb_gv_set(mrb, mrb_intern_cstr(mrb, "$mrbtest_io_socketname"), mrb_nil_value());
+  mrb_gv_set(mrb, mrb_intern_cstr(mrb, "$mrbtest_io_msg"), mrb_nil_value());
+
+#if !defined(_WIN32) && !defined(_WIN64)
+  if(!socket_available_p) {
+    fchdir(wd_save);
+    close(wd_save);
+  }
+#endif
+
+  return mrb_nil_value();
+}
+
+static mrb_value
+mrb_io_test_mkdtemp(mrb_state *mrb, mrb_value klass)
+{
+  mrb_value str;
+  char *cp;
+
+  mrb_get_args(mrb, "S", &str);
+  cp = mrb_str_to_cstr(mrb, str);
+  if (mkdtemp(cp) == NULL) {
+    mrb_sys_fail(mrb, "mkdtemp");
+  }
+  return mrb_str_new_cstr(mrb, cp);
+}
+
+static mrb_value
+mrb_io_test_rmdir(mrb_state *mrb, mrb_value klass)
+{
+  const char *cp;
+
+  mrb_get_args(mrb, "z", &cp);
+  if (rmdir(cp) == -1) {
+    mrb_sys_fail(mrb, "rmdir");
+  }
+  return mrb_true_value();
+}
+
+mrb_value
+mrb_io_win_p(mrb_state *mrb, mrb_value klass)
+{
+#if defined(_WIN32) || defined(_WIN64)
+# if defined(__CYGWIN__) || defined(__CYGWIN32__)
+  return mrb_false_value();
+# else
+  return mrb_true_value();
+# endif
+#else
+  return mrb_false_value();
+#endif
+}
+
+#ifdef MRB_WITH_IO_PREAD_PWRITE
+# define MRB_WITH_IO_PREAD_PWRITE_ENABLED TRUE
+#else
+# define MRB_WITH_IO_PREAD_PWRITE_ENABLED FALSE
+#endif
+
+void
+mrb_mruby_io_gem_test(mrb_state* mrb)
+{
+  struct RClass *io_test = mrb_define_module(mrb, "MRubyIOTestUtil");
+  mrb_define_class_method(mrb, io_test, "io_test_setup", mrb_io_test_io_setup, MRB_ARGS_NONE());
+  mrb_define_class_method(mrb, io_test, "io_test_cleanup", mrb_io_test_io_cleanup, MRB_ARGS_NONE());
+
+  mrb_define_class_method(mrb, io_test, "mkdtemp", mrb_io_test_mkdtemp, MRB_ARGS_REQ(1));
+  mrb_define_class_method(mrb, io_test, "rmdir", mrb_io_test_rmdir, MRB_ARGS_REQ(1));
+  mrb_define_class_method(mrb, io_test, "win?", mrb_io_win_p, MRB_ARGS_NONE());
+
+  mrb_define_const(mrb, io_test, "MRB_WITH_IO_PREAD_PWRITE", mrb_bool_value(MRB_WITH_IO_PREAD_PWRITE_ENABLED));
+}
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-kernel-ext/mrbgem.rake
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-kernel-ext/mrbgem.rake	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-kernel-ext/mrbgem.rake	(revision 439)
@@ -0,0 +1,5 @@
+MRuby::Gem::Specification.new('mruby-kernel-ext') do |spec|
+  spec.license = 'MIT'
+  spec.author  = 'mruby developers'
+  spec.summary = 'extensional function-like methods'
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-kernel-ext/src/kernel.c
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-kernel-ext/src/kernel.c	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-kernel-ext/src/kernel.c	(revision 439)
@@ -0,0 +1,228 @@
+#include <mruby.h>
+#include <mruby/error.h>
+#include <mruby/array.h>
+#include <mruby/hash.h>
+#include <mruby/range.h>
+
+static mrb_value
+mrb_f_caller(mrb_state *mrb, mrb_value self)
+{
+  mrb_value bt, v, length;
+  mrb_int bt_len, argc, lev, n;
+
+  bt = mrb_get_backtrace(mrb);
+  bt_len = RARRAY_LEN(bt);
+  argc = mrb_get_args(mrb, "|oo", &v, &length);
+
+  switch (argc) {
+    case 0:
+      lev = 1;
+      n = bt_len - lev;
+      break;
+    case 1:
+      if (mrb_range_p(v)) {
+        mrb_int beg, len;
+        if (mrb_range_beg_len(mrb, v, &beg, &len, bt_len, TRUE) == MRB_RANGE_OK) {
+          lev = beg;
+          n = len;
+        }
+        else {
+          return mrb_nil_value();
+        }
+      }
+      else {
+        lev = mrb_int(mrb, v);
+        if (lev < 0) {
+          mrb_raisef(mrb, E_ARGUMENT_ERROR, "negative level (%v)", v);
+        }
+        n = bt_len - lev;
+      }
+      break;
+    case 2:
+      lev = mrb_int(mrb, v);
+      n = mrb_int(mrb, length);
+      if (lev < 0) {
+        mrb_raisef(mrb, E_ARGUMENT_ERROR, "negative level (%v)", v);
+      }
+      if (n < 0) {
+        mrb_raisef(mrb, E_ARGUMENT_ERROR, "negative size (%v)", length);
+      }
+      break;
+    default:
+      lev = n = 0;
+      break;
+  }
+
+  if (n == 0) {
+    return mrb_ary_new(mrb);
+  }
+
+  return mrb_funcall(mrb, bt, "[]", 2, mrb_fixnum_value(lev), mrb_fixnum_value(n));
+}
+
+/*
+ *  call-seq:
+ *     __method__         -> symbol
+ *
+ *  Returns the name at the definition of the current method as a
+ *  Symbol.
+ *  If called outside of a method, it returns <code>nil</code>.
+ *
+ */
+static mrb_value
+mrb_f_method(mrb_state *mrb, mrb_value self)
+{
+  mrb_callinfo *ci = mrb->c->ci;
+  ci--;
+  if (ci->mid)
+    return mrb_symbol_value(ci->mid);
+  else
+    return mrb_nil_value();
+}
+
+/*
+ *  call-seq:
+ *     Integer(arg,base=0)    -> integer
+ *
+ *  Converts <i>arg</i> to a <code>Fixnum</code>.
+ *  Numeric types are converted directly (with floating point numbers
+ *  being truncated).    <i>base</i> (0, or between 2 and 36) is a base for
+ *  integer string representation.  If <i>arg</i> is a <code>String</code>,
+ *  when <i>base</i> is omitted or equals to zero, radix indicators
+ *  (<code>0</code>, <code>0b</code>, and <code>0x</code>) are honored.
+ *  In any case, strings should be strictly conformed to numeric
+ *  representation. This behavior is different from that of
+ *  <code>String#to_i</code>.  Non string values will be treated as integers.
+ *  Passing <code>nil</code> raises a TypeError.
+ *
+ *     Integer(123.999)    #=> 123
+ *     Integer("0x1a")     #=> 26
+ *     Integer(Time.new)   #=> 1204973019
+ *     Integer("0930", 10) #=> 930
+ *     Integer("111", 2)   #=> 7
+ *     Integer(nil)        #=> TypeError
+ */
+static mrb_value
+mrb_f_integer(mrb_state *mrb, mrb_value self)
+{
+  mrb_value arg;
+  mrb_int base = 0;
+
+  mrb_get_args(mrb, "o|i", &arg, &base);
+  return mrb_convert_to_integer(mrb, arg, base);
+}
+
+#ifndef MRB_WITHOUT_FLOAT
+/*
+ *  call-seq:
+ *     Float(arg)    -> float
+ *
+ *  Returns <i>arg</i> converted to a float. Numeric types are converted
+ *  directly, the rest are converted using <i>arg</i>.to_f.
+ *
+ *     Float(1)           #=> 1.0
+ *     Float(123.456)     #=> 123.456
+ *     Float("123.456")   #=> 123.456
+ *     Float(nil)         #=> TypeError
+ */
+static mrb_value
+mrb_f_float(mrb_state *mrb, mrb_value self)
+{
+  mrb_value arg;
+
+  mrb_get_args(mrb, "o", &arg);
+  return mrb_Float(mrb, arg);
+}
+#endif
+
+/*
+ *  call-seq:
+ *     String(arg)   -> string
+ *
+ *  Returns <i>arg</i> as an <code>String</code>.
+ *  converted using <code>to_s</code> method.
+ *
+ *     String(self)        #=> "main"
+ *     String(self.class)  #=> "Object"
+ *     String(123456)      #=> "123456"
+ */
+static mrb_value
+mrb_f_string(mrb_state *mrb, mrb_value self)
+{
+  mrb_value arg, tmp;
+
+  mrb_get_args(mrb, "o", &arg);
+  tmp = mrb_convert_type(mrb, arg, MRB_TT_STRING, "String", "to_s");
+  return tmp;
+}
+
+/*
+ *  call-seq:
+ *     Array(arg)    -> array
+ *
+ *  Returns +arg+ as an Array using to_a method.
+ *
+ *     Array(1..5)   #=> [1, 2, 3, 4, 5]
+ *
+ */
+static mrb_value
+mrb_f_array(mrb_state *mrb, mrb_value self)
+{
+  mrb_value arg, tmp;
+
+  mrb_get_args(mrb, "o", &arg);
+  tmp = mrb_check_convert_type(mrb, arg, MRB_TT_ARRAY, "Array", "to_a");
+  if (mrb_nil_p(tmp)) {
+    return mrb_ary_new_from_values(mrb, 1, &arg);
+  }
+
+  return tmp;
+}
+
+/*
+ *  call-seq:
+ *     Hash(arg)    -> hash
+ *
+ *  Returns a <code>Hash</code> if <i>arg</i> is a <code>Hash</code>.
+ *  Returns an empty <code>Hash</code> when <i>arg</i> is <tt>nil</tt>
+ *  or <tt>[]</tt>.
+ *
+ *      Hash([])          #=> {}
+ *      Hash(nil)         #=> {}
+ *      Hash(key: :value) #=> {:key => :value}
+ *      Hash([1, 2, 3])   #=> TypeError
+ *
+ */
+static mrb_value
+mrb_f_hash(mrb_state *mrb, mrb_value self)
+{
+  mrb_value arg;
+
+  mrb_get_args(mrb, "o", &arg);
+  if (mrb_nil_p(arg) || (mrb_array_p(arg) && RARRAY_LEN(arg) == 0)) {
+    return mrb_hash_new(mrb);
+  }
+  return mrb_ensure_hash_type(mrb, arg);
+}
+
+void
+mrb_mruby_kernel_ext_gem_init(mrb_state *mrb)
+{
+  struct RClass *krn = mrb->kernel_module;
+
+  mrb_define_module_function(mrb, krn, "fail", mrb_f_raise, MRB_ARGS_OPT(2));
+  mrb_define_module_function(mrb, krn, "caller", mrb_f_caller, MRB_ARGS_OPT(2));
+  mrb_define_method(mrb, krn, "__method__", mrb_f_method, MRB_ARGS_NONE());
+  mrb_define_module_function(mrb, krn, "Integer", mrb_f_integer, MRB_ARGS_ARG(1,1));
+#ifndef MRB_WITHOUT_FLOAT
+  mrb_define_module_function(mrb, krn, "Float", mrb_f_float, MRB_ARGS_REQ(1));
+#endif
+  mrb_define_module_function(mrb, krn, "String", mrb_f_string, MRB_ARGS_REQ(1));
+  mrb_define_module_function(mrb, krn, "Array", mrb_f_array, MRB_ARGS_REQ(1));
+  mrb_define_module_function(mrb, krn, "Hash", mrb_f_hash, MRB_ARGS_REQ(1));
+}
+
+void
+mrb_mruby_kernel_ext_gem_final(mrb_state *mrb)
+{
+}
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-kernel-ext/test/kernel.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-kernel-ext/test/kernel.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-kernel-ext/test/kernel.rb	(revision 439)
@@ -0,0 +1,118 @@
+assert('Kernel.fail, Kernel#fail') do
+  assert_raise(RuntimeError) { fail }
+  assert_raise(RuntimeError) { Kernel.fail }
+end
+
+assert('Kernel.caller, Kernel#caller') do
+  skip "backtrace isn't available" if caller(0).empty?
+
+  caller_lineno = __LINE__ + 3
+  c = Class.new do
+    def foo(*args)
+      caller(*args)
+    end
+
+    def bar(*args)
+      foo(*args)
+    end
+
+    def baz(*args)
+      bar(*args)
+    end
+  end
+  assert_equal "kernel.rb:#{caller_lineno}:in foo", c.new.baz(0)[0][-19..-1]
+  assert_equal "bar", c.new.baz[0][-3..-1]
+  assert_equal "foo", c.new.baz(0)[0][-3..-1]
+  assert_equal "bar", c.new.baz(1)[0][-3..-1]
+  assert_equal "baz", c.new.baz(2)[0][-3..-1]
+  assert_equal ["foo", "bar"], c.new.baz(0, 2).map { |i| i[-3..-1] }
+  assert_equal ["bar", "baz"], c.new.baz(1..2).map { |i| i[-3..-1] }
+  assert_nil c.new.baz(10..20)
+  assert_raise(ArgumentError) { c.new.baz(-1) }
+  assert_raise(ArgumentError) { c.new.baz(-1, 1) }
+  assert_raise(ArgumentError) { c.new.baz(1, -1) }
+  assert_raise(TypeError) { c.new.baz(nil) }
+end
+
+assert('Kernel#__method__') do
+  assert_equal(:m, Class.new {def m; __method__; end}.new.m)
+  assert_equal(:m, Class.new {define_method(:m) {__method__}}.new.m)
+  c = Class.new do
+    [:m1, :m2].each do |m|
+      define_method(m) do
+        __method__
+      end
+    end
+  end
+  assert_equal(:m1, c.new.m1)
+  assert_equal(:m2, c.new.m2)
+end
+
+assert('Kernel#Integer') do
+  assert_operator(26, :eql?, Integer("0x1a"))
+  assert_operator(930, :eql?, Integer("0930", 10))
+  assert_operator(7, :eql?, Integer("111", 2))
+  assert_operator(0, :eql?, Integer("0"))
+  assert_operator(0, :eql?, Integer("00000"))
+  assert_operator(123, :eql?, Integer('1_2_3'))
+  assert_operator(123, :eql?, Integer("\t\r\n\f\v 123 \t\r\n\f\v"))
+  assert_raise(TypeError) { Integer(nil) }
+  assert_raise(ArgumentError) { Integer('a') }
+  assert_raise(ArgumentError) { Integer('4a5') }
+  assert_raise(ArgumentError) { Integer('1_2__3') }
+  assert_raise(ArgumentError) { Integer('68_') }
+  assert_raise(ArgumentError) { Integer('68_ ') }
+  assert_raise(ArgumentError) { Integer('_68') }
+  assert_raise(ArgumentError) { Integer(' _68') }
+  assert_raise(ArgumentError) { Integer('6 8') }
+  assert_raise(ArgumentError) { Integer("15\0") }
+  assert_raise(ArgumentError) { Integer("15.0") }
+  skip unless Object.const_defined?(:Float)
+  assert_operator(123, :eql?, Integer(123.999))
+end
+
+assert('Kernel#Float') do
+  skip unless Object.const_defined?(:Float)
+  assert_operator(1.0, :eql?, Float(1))
+  assert_operator(123.456, :eql?, Float(123.456))
+  assert_operator(123.456, :eql?, Float("123.456"))
+  assert_operator(123.0, :eql?, Float('1_2_3'))
+  assert_operator(12.34, :eql?, Float('1_2.3_4'))
+  assert_operator(0.9, :eql?, Float('.9'))
+  assert_operator(0.9, :eql?, Float(" \t\r\n\f\v.9 \t\r\n\f\v"))
+  assert_operator(16.0, :eql?, Float("0x10"))
+  assert_raise(TypeError) { Float(nil) }
+  assert_raise(ArgumentError) { Float("1. 5") }
+  assert_raise(ArgumentError) { Float("1.5a") }
+  assert_raise(ArgumentError) { Float("1.5\0") }
+  assert_raise(ArgumentError) { Float('a') }
+  assert_raise(ArgumentError) { Float('4a5') }
+  assert_raise(ArgumentError) { Float('1_2__3') }
+  assert_raise(ArgumentError) { Float('68_') }
+  assert_raise(ArgumentError) { Float('68._7') }
+  assert_raise(ArgumentError) { Float('68.7_') }
+  assert_raise(ArgumentError) { Float('68.7_ ') }
+  assert_raise(ArgumentError) { Float('_68') }
+  assert_raise(ArgumentError) { Float(' _68') }
+  assert_raise(ArgumentError) { Float('1_2.3__4') }
+end
+
+assert('Kernel#String') do
+  assert_equal("main", String(self))
+  assert_equal("Object", String(self.class))
+  assert_equal("123456", String(123456))
+end
+
+assert('Kernel#Array') do
+  assert_equal([1], Kernel.Array(1))
+  assert_equal([1, 2, 3, 4, 5], Kernel.Array([1, 2, 3, 4, 5]))
+  assert_equal([1, 2, 3, 4, 5], Kernel.Array(1..5))
+  assert_equal([[:a, 1], [:b, 2], [:c, 3]], Kernel.Array({a:1, b:2, c:3}))
+end
+
+assert('Kernel#Hash') do
+  assert_equal({}, Hash([]))
+  assert_equal({}, Hash(nil))
+  assert_equal({:key => :value}, Hash(key: :value))
+  assert_raise(TypeError) { Hash([1, 2, 3]) }
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-math/mrbgem.rake
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-math/mrbgem.rake	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-math/mrbgem.rake	(revision 439)
@@ -0,0 +1,5 @@
+MRuby::Gem::Specification.new('mruby-math') do |spec|
+  spec.license = 'MIT'
+  spec.author  = 'mruby developers'
+  spec.summary = 'standard Math module'
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-math/src/math.c
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-math/src/math.c	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-math/src/math.c	(revision 439)
@@ -0,0 +1,783 @@
+/*
+** math.c - Math module
+**
+** See Copyright Notice in mruby.h
+*/
+
+#ifdef MRB_WITHOUT_FLOAT
+# error Math conflicts 'MRB_WITHOUT_FLOAT' configuration in your 'build_config.rb'
+#endif
+
+#include <mruby.h>
+#include <mruby/array.h>
+
+#include <math.h>
+
+static void
+domain_error(mrb_state *mrb, const char *func)
+{
+  struct RClass *math = mrb_module_get(mrb, "Math");
+  struct RClass *domainerror = mrb_class_get_under(mrb, math, "DomainError");
+  mrb_raisef(mrb, domainerror, "Numerical argument is out of domain - %s", func);
+}
+
+/* math functions not provided by Microsoft Visual C++ 2012 or older */
+#if defined _MSC_VER && _MSC_VER <= 1700
+
+#include <float.h>
+
+double
+asinh(double x)
+{
+  double xa, ya, y;
+
+  /* Basic formula loses precision for x < 0, but asinh is an odd function */
+  xa = fabs(x);
+  if (xa > 3.16227E+18) {
+    /* Prevent x*x from overflowing; basic formula reduces to log(2*x) */
+    ya = log(xa) + 0.69314718055994530942;
+  }
+  else {
+    /* Basic formula for asinh */
+    ya = log(xa + sqrt(xa*xa + 1.0));
+  }
+
+  y = _copysign(ya, x);
+  return y;
+}
+
+double
+acosh(double x)
+{
+  double y;
+
+  if (x > 3.16227E+18) {
+    /* Prevent x*x from overflowing; basic formula reduces to log(2*x) */
+    y = log(x) + 0.69314718055994530942;
+  }
+  else {
+    /* Basic formula for acosh */
+    y = log(x + sqrt(x*x - 1.0));
+  }
+
+  return y;
+}
+
+double
+atanh(double x)
+{
+  double y;
+
+  if (fabs(x) < 1E-2) {
+    /* The sums 1+x and 1-x lose precision for small x.  Use the polynomial
+       instead. */
+    double x2 = x * x;
+    y = x*(1.0 + x2*(1.0/3.0 + x2*(1.0/5.0 + x2*(1.0/7.0))));
+  }
+  else {
+    /* Basic formula for atanh */
+    y = 0.5 * (log(1.0+x) - log(1.0-x));
+  }
+
+  return y;
+}
+
+double
+cbrt(double x)
+{
+  double xa, ya, y;
+
+  /* pow(x, y) is undefined for x < 0 and y not an integer, but cbrt is an
+     odd function */
+  xa = fabs(x);
+  ya = pow(xa, 1.0/3.0);
+  y = _copysign(ya, x);
+  return y;
+}
+
+/* Declaration of complementary Error function */
+double
+erfc(double x);
+
+/*
+** Implementations of error functions
+** credits to http://www.digitalmars.com/archives/cplusplus/3634.html
+*/
+
+/* Implementation of Error function */
+double
+erf(double x)
+{
+  static const double two_sqrtpi =  1.128379167095512574;
+  double sum  = x;
+  double term = x;
+  double xsqr = x*x;
+  int j= 1;
+  if (fabs(x) > 2.2) {
+    return 1.0 - erfc(x);
+  }
+  do {
+    term *= xsqr/j;
+    sum  -= term/(2*j+1);
+    ++j;
+    term *= xsqr/j;
+    sum  += term/(2*j+1);
+    ++j;
+    if (sum == 0) break;
+  } while (fabs(term/sum) > DBL_EPSILON);
+  return two_sqrtpi*sum;
+}
+
+/* Implementation of complementary Error function */
+double
+erfc(double x)
+{
+  static const double one_sqrtpi=  0.564189583547756287;
+  double a = 1;
+  double b = x;
+  double c = x;
+  double d = x*x+0.5;
+  double q1;
+  double q2 = b/d;
+  double n = 1.0;
+  double t;
+  if (fabs(x) < 2.2) {
+    return 1.0 - erf(x);
+  }
+  if (x < 0.0) { /*signbit(x)*/
+    return 2.0 - erfc(-x);
+  }
+  do {
+    t  = a*n+b*x;
+    a  = b;
+    b  = t;
+    t  = c*n+d*x;
+    c  = d;
+    d  = t;
+    n += 0.5;
+    q1 = q2;
+    q2 = b/d;
+  } while (fabs(q1-q2)/q2 > DBL_EPSILON);
+  return one_sqrtpi*exp(-x*x)*q2;
+}
+
+#endif
+
+#if defined __FreeBSD__ && !defined __FreeBSD_version
+#include <osreldate.h> /* for __FreeBSD_version */
+#endif
+
+#if (defined _MSC_VER && _MSC_VER < 1800) || defined __ANDROID__ || (defined __FreeBSD__  &&  __FreeBSD_version < 803000)
+
+double
+log2(double x)
+{
+    return log10(x)/log10(2.0);
+}
+
+#endif
+
+/*
+  TRIGONOMETRIC FUNCTIONS
+*/
+
+/*
+ *  call-seq:
+ *     Math.sin(x)    -> float
+ *
+ *  Computes the sine of <i>x</i> (expressed in radians). Returns
+ *  -1..1.
+ */
+static mrb_value
+math_sin(mrb_state *mrb, mrb_value obj)
+{
+  mrb_float x;
+
+  mrb_get_args(mrb, "f", &x);
+  x = sin(x);
+
+  return mrb_float_value(mrb, x);
+}
+
+/*
+ *  call-seq:
+ *     Math.cos(x)    -> float
+ *
+ *  Computes the cosine of <i>x</i> (expressed in radians). Returns
+ *  -1..1.
+ */
+static mrb_value
+math_cos(mrb_state *mrb, mrb_value obj)
+{
+  mrb_float x;
+
+  mrb_get_args(mrb, "f", &x);
+  x = cos(x);
+
+  return mrb_float_value(mrb, x);
+}
+
+/*
+ *  call-seq:
+ *     Math.tan(x)    -> float
+ *
+ *  Returns the tangent of <i>x</i> (expressed in radians).
+ */
+static mrb_value
+math_tan(mrb_state *mrb, mrb_value obj)
+{
+  mrb_float x;
+
+  mrb_get_args(mrb, "f", &x);
+  x = tan(x);
+
+  return mrb_float_value(mrb, x);
+}
+
+/*
+  INVERSE TRIGONOMETRIC FUNCTIONS
+*/
+
+/*
+ *  call-seq:
+ *     Math.asin(x)    -> float
+ *
+ *  Computes the arc sine of <i>x</i>.
+ *  @return computed value between `-(PI/2)` and `(PI/2)`.
+ */
+static mrb_value
+math_asin(mrb_state *mrb, mrb_value obj)
+{
+  mrb_float x;
+
+  mrb_get_args(mrb, "f", &x);
+  if (x < -1.0 || x > 1.0) {
+    domain_error(mrb, "asin");
+  }
+  x = asin(x);
+
+  return mrb_float_value(mrb, x);
+}
+
+/*
+ *  call-seq:
+ *     Math.acos(x)    -> float
+ *
+ *  Computes the arc cosine of <i>x</i>. Returns 0..PI.
+ */
+static mrb_value
+math_acos(mrb_state *mrb, mrb_value obj)
+{
+  mrb_float x;
+
+  mrb_get_args(mrb, "f", &x);
+  if (x < -1.0 || x > 1.0) {
+    domain_error(mrb, "acos");
+  }
+  x = acos(x);
+
+  return mrb_float_value(mrb, x);
+}
+
+/*
+ *  call-seq:
+ *     Math.atan(x)    -> float
+ *
+ *  Computes the arc tangent of <i>x</i>. Returns `-(PI/2) .. (PI/2)`.
+ */
+static mrb_value
+math_atan(mrb_state *mrb, mrb_value obj)
+{
+  mrb_float x;
+
+  mrb_get_args(mrb, "f", &x);
+  x = atan(x);
+
+  return mrb_float_value(mrb, x);
+}
+
+/*
+ *  call-seq:
+ *     Math.atan2(y, x)  -> float
+ *
+ *  Computes the arc tangent given <i>y</i> and <i>x</i>. Returns
+ *  -PI..PI.
+ *
+ *    Math.atan2(-0.0, -1.0) #=> -3.141592653589793
+ *    Math.atan2(-1.0, -1.0) #=> -2.356194490192345
+ *    Math.atan2(-1.0, 0.0)  #=> -1.5707963267948966
+ *    Math.atan2(-1.0, 1.0)  #=> -0.7853981633974483
+ *    Math.atan2(-0.0, 1.0)  #=> -0.0
+ *    Math.atan2(0.0, 1.0)   #=> 0.0
+ *    Math.atan2(1.0, 1.0)   #=> 0.7853981633974483
+ *    Math.atan2(1.0, 0.0)   #=> 1.5707963267948966
+ *    Math.atan2(1.0, -1.0)  #=> 2.356194490192345
+ *    Math.atan2(0.0, -1.0)  #=> 3.141592653589793
+ *
+ */
+static mrb_value
+math_atan2(mrb_state *mrb, mrb_value obj)
+{
+  mrb_float x, y;
+
+  mrb_get_args(mrb, "ff", &x, &y);
+  x = atan2(x, y);
+
+  return mrb_float_value(mrb, x);
+}
+
+
+
+/*
+  HYPERBOLIC TRIG FUNCTIONS
+*/
+/*
+ *  call-seq:
+ *     Math.sinh(x)    -> float
+ *
+ *  Computes the hyperbolic sine of <i>x</i> (expressed in
+ *  radians).
+ */
+static mrb_value
+math_sinh(mrb_state *mrb, mrb_value obj)
+{
+  mrb_float x;
+
+  mrb_get_args(mrb, "f", &x);
+  x = sinh(x);
+
+  return mrb_float_value(mrb, x);
+}
+
+/*
+ *  call-seq:
+ *     Math.cosh(x)    -> float
+ *
+ *  Computes the hyperbolic cosine of <i>x</i> (expressed in radians).
+ */
+static mrb_value
+math_cosh(mrb_state *mrb, mrb_value obj)
+{
+  mrb_float x;
+
+  mrb_get_args(mrb, "f", &x);
+  x = cosh(x);
+
+  return mrb_float_value(mrb, x);
+}
+
+/*
+ *  call-seq:
+ *     Math.tanh()    -> float
+ *
+ *  Computes the hyperbolic tangent of <i>x</i> (expressed in
+ *  radians).
+ */
+static mrb_value
+math_tanh(mrb_state *mrb, mrb_value obj)
+{
+  mrb_float x;
+
+  mrb_get_args(mrb, "f", &x);
+  x = tanh(x);
+
+  return mrb_float_value(mrb, x);
+}
+
+
+/*
+  INVERSE HYPERBOLIC TRIG FUNCTIONS
+*/
+
+/*
+ *  call-seq:
+ *     Math.asinh(x)    -> float
+ *
+ *  Computes the inverse hyperbolic sine of <i>x</i>.
+ */
+static mrb_value
+math_asinh(mrb_state *mrb, mrb_value obj)
+{
+  mrb_float x;
+
+  mrb_get_args(mrb, "f", &x);
+
+  x = asinh(x);
+
+  return mrb_float_value(mrb, x);
+}
+
+/*
+ *  call-seq:
+ *     Math.acosh(x)    -> float
+ *
+ *  Computes the inverse hyperbolic cosine of <i>x</i>.
+ */
+static mrb_value
+math_acosh(mrb_state *mrb, mrb_value obj)
+{
+  mrb_float x;
+
+  mrb_get_args(mrb, "f", &x);
+  if (x < 1.0) {
+    domain_error(mrb, "acosh");
+  }
+  x = acosh(x);
+
+  return mrb_float_value(mrb, x);
+}
+
+/*
+ *  call-seq:
+ *     Math.atanh(x)    -> float
+ *
+ *  Computes the inverse hyperbolic tangent of <i>x</i>.
+ */
+static mrb_value
+math_atanh(mrb_state *mrb, mrb_value obj)
+{
+  mrb_float x;
+
+  mrb_get_args(mrb, "f", &x);
+  if (x < -1.0 || x > 1.0) {
+    domain_error(mrb, "atanh");
+  }
+  x = atanh(x);
+
+  return mrb_float_value(mrb, x);
+}
+
+/*
+  EXPONENTIALS AND LOGARITHMS
+*/
+
+/*
+ *  call-seq:
+ *     Math.exp(x)    -> float
+ *
+ *  Returns e**x.
+ *
+ *    Math.exp(0)       #=> 1.0
+ *    Math.exp(1)       #=> 2.718281828459045
+ *    Math.exp(1.5)     #=> 4.4816890703380645
+ *
+ */
+static mrb_value
+math_exp(mrb_state *mrb, mrb_value obj)
+{
+  mrb_float x;
+
+  mrb_get_args(mrb, "f", &x);
+  x = exp(x);
+
+  return mrb_float_value(mrb, x);
+}
+
+/*
+ *  call-seq:
+ *     Math.log(numeric)    -> float
+ *     Math.log(num,base)   -> float
+ *
+ *  Returns the natural logarithm of <i>numeric</i>.
+ *  If additional second argument is given, it will be the base
+ *  of logarithm.
+ *
+ *    Math.log(1)          #=> 0.0
+ *    Math.log(Math::E)    #=> 1.0
+ *    Math.log(Math::E**3) #=> 3.0
+ *    Math.log(12,3)       #=> 2.2618595071429146
+ *
+ */
+static mrb_value
+math_log(mrb_state *mrb, mrb_value obj)
+{
+  mrb_float x, base;
+  mrb_int argc;
+
+  argc = mrb_get_args(mrb, "f|f", &x, &base);
+  if (x < 0.0) {
+    domain_error(mrb, "log");
+  }
+  x = log(x);
+  if (argc == 2) {
+    if (base < 0.0) {
+      domain_error(mrb, "log");
+    }
+    x /= log(base);
+  }
+  return mrb_float_value(mrb, x);
+}
+
+/*
+ *  call-seq:
+ *     Math.log2(numeric)    -> float
+ *
+ *  Returns the base 2 logarithm of <i>numeric</i>.
+ *
+ *    Math.log2(1)      #=> 0.0
+ *    Math.log2(2)      #=> 1.0
+ *    Math.log2(32768)  #=> 15.0
+ *    Math.log2(65536)  #=> 16.0
+ *
+ */
+static mrb_value
+math_log2(mrb_state *mrb, mrb_value obj)
+{
+  mrb_float x;
+
+  mrb_get_args(mrb, "f", &x);
+  if (x < 0.0) {
+    domain_error(mrb, "log2");
+  }
+  x = log2(x);
+
+  return mrb_float_value(mrb, x);
+}
+
+/*
+ *  call-seq:
+ *     Math.log10(numeric)    -> float
+ *
+ *  Returns the base 10 logarithm of <i>numeric</i>.
+ *
+ *    Math.log10(1)       #=> 0.0
+ *    Math.log10(10)      #=> 1.0
+ *    Math.log10(10**100) #=> 100.0
+ *
+ */
+static mrb_value
+math_log10(mrb_state *mrb, mrb_value obj)
+{
+  mrb_float x;
+
+  mrb_get_args(mrb, "f", &x);
+  if (x < 0.0) {
+    domain_error(mrb, "log10");
+  }
+  x = log10(x);
+
+  return mrb_float_value(mrb, x);
+}
+
+/*
+ *  call-seq:
+ *     Math.sqrt(numeric)    -> float
+ *
+ *  Returns the square root of <i>numeric</i>.
+ *
+ */
+static mrb_value
+math_sqrt(mrb_state *mrb, mrb_value obj)
+{
+  mrb_float x;
+
+  mrb_get_args(mrb, "f", &x);
+  if (x < 0.0) {
+    domain_error(mrb, "sqrt");
+  }
+  x = sqrt(x);
+
+  return mrb_float_value(mrb, x);
+}
+
+
+/*
+ *  call-seq:
+ *     Math.cbrt(numeric)    -> float
+ *
+ *  Returns the cube root of <i>numeric</i>.
+ *
+ *    -9.upto(9) {|x|
+ *      p [x, Math.cbrt(x), Math.cbrt(x)**3]
+ *    }
+ *    #=>
+ *    [-9, -2.0800838230519, -9.0]
+ *    [-8, -2.0, -8.0]
+ *    [-7, -1.91293118277239, -7.0]
+ *    [-6, -1.81712059283214, -6.0]
+ *    [-5, -1.7099759466767, -5.0]
+ *    [-4, -1.5874010519682, -4.0]
+ *    [-3, -1.44224957030741, -3.0]
+ *    [-2, -1.25992104989487, -2.0]
+ *    [-1, -1.0, -1.0]
+ *    [0, 0.0, 0.0]
+ *    [1, 1.0, 1.0]
+ *    [2, 1.25992104989487, 2.0]
+ *    [3, 1.44224957030741, 3.0]
+ *    [4, 1.5874010519682, 4.0]
+ *    [5, 1.7099759466767, 5.0]
+ *    [6, 1.81712059283214, 6.0]
+ *    [7, 1.91293118277239, 7.0]
+ *    [8, 2.0, 8.0]
+ *    [9, 2.0800838230519, 9.0]
+ *
+ */
+static mrb_value
+math_cbrt(mrb_state *mrb, mrb_value obj)
+{
+  mrb_float x;
+
+  mrb_get_args(mrb, "f", &x);
+  x = cbrt(x);
+
+  return mrb_float_value(mrb, x);
+}
+
+
+/*
+ *  call-seq:
+ *     Math.frexp(numeric)    -> [ fraction, exponent ]
+ *
+ *  Returns a two-element array containing the normalized fraction (a
+ *  <code>Float</code>) and exponent (a <code>Fixnum</code>) of
+ *  <i>numeric</i>.
+ *
+ *     fraction, exponent = Math.frexp(1234)   #=> [0.6025390625, 11]
+ *     fraction * 2**exponent                  #=> 1234.0
+ */
+static mrb_value
+math_frexp(mrb_state *mrb, mrb_value obj)
+{
+  mrb_float x;
+  int exp;
+
+  mrb_get_args(mrb, "f", &x);
+  x = frexp(x, &exp);
+
+  return mrb_assoc_new(mrb, mrb_float_value(mrb, x), mrb_fixnum_value(exp));
+}
+
+/*
+ *  call-seq:
+ *     Math.ldexp(flt, int) -> float
+ *
+ *  Returns the value of <i>flt</i>*(2**<i>int</i>).
+ *
+ *     fraction, exponent = Math.frexp(1234)
+ *     Math.ldexp(fraction, exponent)   #=> 1234.0
+ */
+static mrb_value
+math_ldexp(mrb_state *mrb, mrb_value obj)
+{
+  mrb_float x;
+  mrb_int   i;
+
+  mrb_get_args(mrb, "fi", &x, &i);
+  x = ldexp(x, (int)i);
+
+  return mrb_float_value(mrb, x);
+}
+
+/*
+ *  call-seq:
+ *     Math.hypot(x, y)    -> float
+ *
+ *  Returns sqrt(x**2 + y**2), the hypotenuse of a right-angled triangle
+ *  with sides <i>x</i> and <i>y</i>.
+ *
+ *     Math.hypot(3, 4)   #=> 5.0
+ */
+static mrb_value
+math_hypot(mrb_state *mrb, mrb_value obj)
+{
+  mrb_float x, y;
+
+  mrb_get_args(mrb, "ff", &x, &y);
+  x = hypot(x, y);
+
+  return mrb_float_value(mrb, x);
+}
+
+/*
+ * call-seq:
+ *    Math.erf(x)  -> float
+ *
+ *  Calculates the error function of x.
+ */
+static mrb_value
+math_erf(mrb_state *mrb, mrb_value obj)
+{
+  mrb_float x;
+
+  mrb_get_args(mrb, "f", &x);
+  x = erf(x);
+
+  return mrb_float_value(mrb, x);
+}
+
+
+/*
+ * call-seq:
+ *    Math.erfc(x)  -> float
+ *
+ *  Calculates the complementary error function of x.
+ */
+static mrb_value
+math_erfc(mrb_state *mrb, mrb_value obj)
+{
+  mrb_float x;
+
+  mrb_get_args(mrb, "f", &x);
+  x = erfc(x);
+
+  return mrb_float_value(mrb, x);
+}
+
+/* ------------------------------------------------------------------------*/
+void
+mrb_mruby_math_gem_init(mrb_state* mrb)
+{
+  struct RClass *mrb_math;
+  mrb_math = mrb_define_module(mrb, "Math");
+
+  mrb_define_class_under(mrb, mrb_math, "DomainError", mrb->eStandardError_class);
+
+#ifdef M_PI
+  mrb_define_const(mrb, mrb_math, "PI", mrb_float_value(mrb, M_PI));
+#else
+  mrb_define_const(mrb, mrb_math, "PI", mrb_float_value(mrb, atan(1.0)*4.0));
+#endif
+
+#ifdef M_E
+  mrb_define_const(mrb, mrb_math, "E", mrb_float_value(mrb, M_E));
+#else
+  mrb_define_const(mrb, mrb_math, "E", mrb_float_value(mrb, exp(1.0)));
+#endif
+
+  mrb_define_module_function(mrb, mrb_math, "sin", math_sin, MRB_ARGS_REQ(1));
+  mrb_define_module_function(mrb, mrb_math, "cos", math_cos, MRB_ARGS_REQ(1));
+  mrb_define_module_function(mrb, mrb_math, "tan", math_tan, MRB_ARGS_REQ(1));
+
+  mrb_define_module_function(mrb, mrb_math, "asin", math_asin, MRB_ARGS_REQ(1));
+  mrb_define_module_function(mrb, mrb_math, "acos", math_acos, MRB_ARGS_REQ(1));
+  mrb_define_module_function(mrb, mrb_math, "atan", math_atan, MRB_ARGS_REQ(1));
+  mrb_define_module_function(mrb, mrb_math, "atan2", math_atan2, MRB_ARGS_REQ(2));
+
+  mrb_define_module_function(mrb, mrb_math, "sinh", math_sinh, MRB_ARGS_REQ(1));
+  mrb_define_module_function(mrb, mrb_math, "cosh", math_cosh, MRB_ARGS_REQ(1));
+  mrb_define_module_function(mrb, mrb_math, "tanh", math_tanh, MRB_ARGS_REQ(1));
+
+  mrb_define_module_function(mrb, mrb_math, "asinh", math_asinh, MRB_ARGS_REQ(1));
+  mrb_define_module_function(mrb, mrb_math, "acosh", math_acosh, MRB_ARGS_REQ(1));
+  mrb_define_module_function(mrb, mrb_math, "atanh", math_atanh, MRB_ARGS_REQ(1));
+
+  mrb_define_module_function(mrb, mrb_math, "exp", math_exp, MRB_ARGS_REQ(1));
+  mrb_define_module_function(mrb, mrb_math, "log", math_log, MRB_ARGS_REQ(1)|MRB_ARGS_OPT(1));
+  mrb_define_module_function(mrb, mrb_math, "log2", math_log2, MRB_ARGS_REQ(1));
+  mrb_define_module_function(mrb, mrb_math, "log10", math_log10, MRB_ARGS_REQ(1));
+  mrb_define_module_function(mrb, mrb_math, "sqrt", math_sqrt, MRB_ARGS_REQ(1));
+  mrb_define_module_function(mrb, mrb_math, "cbrt", math_cbrt, MRB_ARGS_REQ(1));
+
+  mrb_define_module_function(mrb, mrb_math, "frexp", math_frexp, MRB_ARGS_REQ(1));
+  mrb_define_module_function(mrb, mrb_math, "ldexp", math_ldexp, MRB_ARGS_REQ(2));
+
+  mrb_define_module_function(mrb, mrb_math, "hypot", math_hypot, MRB_ARGS_REQ(2));
+
+  mrb_define_module_function(mrb, mrb_math, "erf",  math_erf,  MRB_ARGS_REQ(1));
+  mrb_define_module_function(mrb, mrb_math, "erfc", math_erfc, MRB_ARGS_REQ(1));
+}
+
+void
+mrb_mruby_math_gem_final(mrb_state* mrb)
+{
+}
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-math/test/math.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-math/test/math.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-math/test/math.rb	(revision 439)
@@ -0,0 +1,239 @@
+##
+# Math Test
+
+def assert_float_and_int(exp_ary, act_ary)
+  assert('assert_float_and_int') do
+    flo_exp, int_exp, flo_act, int_act = *exp_ary, *act_ary
+    assert_float(flo_exp, flo_act)
+    assert_operator(int_exp, :eql?, int_act)
+  end
+end
+
+assert('Math.sin 0') do
+  assert_float(0, Math.sin(0))
+end
+
+assert('Math.sin PI/2') do
+  assert_float(1, Math.sin(Math::PI / 2))
+end
+
+assert('Math.cos 0') do
+  assert_float(1, Math.cos(0))
+end
+
+assert('Math.cos PI/2') do
+  assert_float(0, Math.cos(Math::PI / 2))
+end
+
+assert('Math.tan 0') do
+  assert_float(0, Math.tan(0))
+end
+
+assert('Math.tan PI/4') do
+  assert_float(1, Math.tan(Math::PI / 4))
+end
+
+assert('Fundamental trig identities') do
+  N = 13
+  N.times do |i|
+    a  = Math::PI / N * i
+    ca = Math::PI / 2 - a
+    s  = Math.sin(a)
+    c  = Math.cos(a)
+    t  = Math.tan(a)
+    assert_float(Math.cos(ca), s)
+    assert_float(1 / Math.tan(ca), t)
+    assert_float(1, s ** 2 + c ** 2)
+    assert_float((1/c) ** 2, t ** 2 + 1)
+    assert_float((1/s) ** 2, (1/t) ** 2 + 1)
+  end
+end
+
+assert('Math.erf 0') do
+  assert_float(0, Math.erf(0))
+end
+
+assert('Math.exp 0') do
+  assert_float(1.0, Math.exp(0))
+end
+
+assert('Math.exp 1') do
+  assert_float(2.718281828459045, Math.exp(1))
+end
+
+assert('Math.exp 1.5') do
+  assert_float(4.4816890703380645, Math.exp(1.5))
+end
+
+assert('Math.log 1') do
+  assert_float(0, Math.log(1))
+end
+
+assert('Math.log E') do
+  assert_float(1.0, Math.log(Math::E))
+end
+
+assert('Math.log E**3') do
+  assert_float(3.0, Math.log(Math::E**3))
+end
+
+assert('Math.log2 1') do
+  assert_float(0.0, Math.log2(1))
+end
+
+assert('Math.log2 2') do
+  assert_float(1.0, Math.log2(2))
+end
+
+assert('Math.log10 1') do
+  assert_float(0.0, Math.log10(1))
+end
+
+assert('Math.log10 10') do
+  assert_float(1.0, Math.log10(10))
+end
+
+assert('Math.log10 10**100') do
+  assert_float(100.0, Math.log10(10**100))
+end
+
+assert('Math.sqrt') do
+  num = [0.0, 1.0, 2.0, 3.0, 4.0]
+  sqr = [0, 1, 4, 9, 16]
+  sqr.each_with_index do |v,i|
+    assert_float(num[i], Math.sqrt(v))
+  end
+end
+
+assert('Math.cbrt') do
+  num = [-2.0, -1.0, 0.0, 1.0, 2.0]
+  cub = [-8, -1, 0, 1, 8]
+  cub.each_with_index do |v,i|
+    assert_float(num[i], Math.cbrt(v))
+  end
+end
+
+assert('Math.hypot') do
+  assert_float(5.0, Math.hypot(3, 4))
+end
+
+assert('Math.erf 1') do
+  assert_float(0.842700792949715, Math.erf(1))
+end
+
+assert('Math.erfc 1') do
+  assert_float(0.157299207050285, Math.erfc(1))
+end
+
+assert('Math.erf -1') do
+  assert_float(-0.8427007929497148, Math.erf(-1))
+end
+
+assert('Math.erfc -1') do
+  assert_float(1.8427007929497148, Math.erfc(-1))
+end
+
+assert('Math.acos') do
+  assert_float(0 * Math::PI / 4, Math.acos( 1.0))
+  assert_float(1 * Math::PI / 4, Math.acos( 1.0 / Math.sqrt(2)))
+  assert_float(2 * Math::PI / 4, Math.acos( 0.0))
+  assert_float(4 * Math::PI / 4, Math.acos(-1.0))
+  assert_raise(Math::DomainError) { Math.acos(+1.1) }
+  assert_raise(Math::DomainError) { Math.acos(-1.1) }
+end
+
+assert('Math.asin') do
+  assert_float( 0 * Math::PI / 4, Math.asin( 0.0))
+  assert_float( 1 * Math::PI / 4, Math.asin( 1.0 / Math.sqrt(2)))
+  assert_float( 2 * Math::PI / 4, Math.asin( 1.0))
+  assert_float(-2 * Math::PI / 4, Math.asin(-1.0))
+  assert_raise(Math::DomainError) { Math.asin(+1.1) }
+  assert_raise(Math::DomainError) { Math.asin(-1.1) }
+  assert_raise(Math::DomainError) { Math.asin(2.0) }
+end
+
+assert('Math.atan') do
+  assert_float( 0 * Math::PI / 4, Math.atan( 0.0))
+  assert_float( 1 * Math::PI / 4, Math.atan( 1.0))
+  assert_float( 2 * Math::PI / 4, Math.atan(1.0 / 0.0))
+  assert_float(-1 * Math::PI / 4, Math.atan(-1.0))
+end
+
+assert('Math.cosh') do
+  assert_float(1, Math.cosh(0))
+  assert_float((Math::E ** 1 + Math::E ** -1) / 2, Math.cosh(1))
+  assert_float((Math::E ** 2 + Math::E ** -2) / 2, Math.cosh(2))
+end
+
+assert('Math.sinh') do
+  assert_float(0, Math.sinh(0))
+  assert_float((Math::E ** 1 - Math::E ** -1) / 2, Math.sinh(1))
+  assert_float((Math::E ** 2 - Math::E ** -2) / 2, Math.sinh(2))
+end
+
+assert('Math.tanh') do
+  assert_float(Math.sinh(0) / Math.cosh(0), Math.tanh(0))
+  assert_float(Math.sinh(1) / Math.cosh(1), Math.tanh(1))
+  assert_float(Math.sinh(2) / Math.cosh(2), Math.tanh(2))
+  assert_float(+1.0, Math.tanh(+1000.0))
+  assert_float(-1.0, Math.tanh(-1000.0))
+end
+
+assert('Math.acosh') do
+  assert_float(0, Math.acosh(1))
+  assert_float(1, Math.acosh((Math::E ** 1 + Math::E ** -1) / 2))
+  assert_float(2, Math.acosh((Math::E ** 2 + Math::E ** -2) / 2))
+  assert_raise(Math::DomainError) { Math.acosh(0.9) }
+  assert_raise(Math::DomainError) { Math.acosh(0) }
+end
+
+assert('Math.asinh') do
+  assert_float(0, Math.asinh(0))
+  assert_float(1, Math.asinh((Math::E ** 1 - Math::E ** -1) / 2))
+  assert_float(2, Math.asinh((Math::E ** 2 - Math::E ** -2) / 2))
+end
+
+assert('Math.atanh') do
+  assert_float(0, Math.atanh(Math.sinh(0) / Math.cosh(0)))
+  assert_float(1, Math.atanh(Math.sinh(1) / Math.cosh(1)))
+  assert_float(2, Math.atanh(Math.sinh(2) / Math.cosh(2)))
+  assert_float(Float::INFINITY, Math.atanh(1))
+  assert_float(-Float::INFINITY, Math.atanh(-1))
+  assert_raise(Math::DomainError) { Math.atanh(+1.1) }
+  assert_raise(Math::DomainError) { Math.atanh(-1.1) }
+end
+
+assert('Math.atan2') do
+  assert_float(+0.0, Math.atan2(+0.0, +0.0))
+  assert_float(-0.0, Math.atan2(-0.0, +0.0))
+  assert_float(+Math::PI, Math.atan2(+0.0, -0.0))
+  assert_float(-Math::PI, Math.atan2(-0.0, -0.0))
+
+  inf = Float::INFINITY
+  expected = 3.0 * Math::PI / 4.0
+  assert_float(+expected, Math.atan2(+inf, -inf))
+  assert_float(-expected, Math.atan2(-inf, -inf))
+  expected = Math::PI / 4.0
+  assert_float(+expected, Math.atan2(+inf, +inf))
+  assert_float(-expected, Math.atan2(-inf, +inf))
+
+  assert_float(0, Math.atan2(0, 1))
+  assert_float(Math::PI / 4, Math.atan2(1, 1))
+  assert_float(Math::PI / 2, Math.atan2(1, 0))
+end
+
+assert('Math.ldexp') do
+  assert_float(0.0, Math.ldexp(0.0, 0.0))
+  assert_float(0.5, Math.ldexp(0.5, 0.0))
+  assert_float(1.0, Math.ldexp(0.5, 1.0))
+  assert_float(2.0, Math.ldexp(0.5, 2.0))
+  assert_float(3.0, Math.ldexp(0.75, 2.0))
+end
+
+assert('Math.frexp') do
+  assert_float_and_int([0.0,  0], Math.frexp(0.0))
+  assert_float_and_int([0.5,  0], Math.frexp(0.5))
+  assert_float_and_int([0.5,  1], Math.frexp(1.0))
+  assert_float_and_int([0.5,  2], Math.frexp(2.0))
+  assert_float_and_int([0.75, 2], Math.frexp(3.0))
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-metaprog/mrbgem.rake
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-metaprog/mrbgem.rake	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-metaprog/mrbgem.rake	(revision 439)
@@ -0,0 +1,5 @@
+MRuby::Gem::Specification.new('mruby-metaprog') do |spec|
+  spec.license = 'MIT'
+  spec.author  = 'mruby developers'
+  spec.summary = 'Meta-programming features for mruby'
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-metaprog/src/metaprog.c
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-metaprog/src/metaprog.c	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-metaprog/src/metaprog.c	(revision 439)
@@ -0,0 +1,728 @@
+#include "mruby.h"
+#include "mruby/array.h"
+#include "mruby/hash.h"
+#include "mruby/variable.h"
+#include "mruby/proc.h"
+#include "mruby/class.h"
+#include "mruby/string.h"
+
+typedef enum {
+  NOEX_PUBLIC    = 0x00,
+  NOEX_NOSUPER   = 0x01,
+  NOEX_PRIVATE   = 0x02,
+  NOEX_PROTECTED = 0x04,
+  NOEX_MASK      = 0x06,
+  NOEX_BASIC     = 0x08,
+  NOEX_UNDEF     = NOEX_NOSUPER,
+  NOEX_MODFUNC   = 0x12,
+  NOEX_SUPER     = 0x20,
+  NOEX_VCALL     = 0x40,
+  NOEX_RESPONDS  = 0x80
+} mrb_method_flag_t;
+
+static mrb_value
+mrb_f_nil(mrb_state *mrb, mrb_value cv)
+{
+  return mrb_nil_value();
+}
+
+/* 15.3.1.3.20 */
+/*
+ *  call-seq:
+ *     obj.instance_variable_defined?(symbol)    -> true or false
+ *
+ *  Returns <code>true</code> if the given instance variable is
+ *  defined in <i>obj</i>.
+ *
+ *     class Fred
+ *       def initialize(p1, p2)
+ *         @a, @b = p1, p2
+ *       end
+ *     end
+ *     fred = Fred.new('cat', 99)
+ *     fred.instance_variable_defined?(:@a)    #=> true
+ *     fred.instance_variable_defined?("@b")   #=> true
+ *     fred.instance_variable_defined?("@c")   #=> false
+ */
+static mrb_value
+mrb_obj_ivar_defined(mrb_state *mrb, mrb_value self)
+{
+  mrb_sym sym;
+
+  mrb_get_args(mrb, "n", &sym);
+  mrb_iv_name_sym_check(mrb, sym);
+  return mrb_bool_value(mrb_iv_defined(mrb, self, sym));
+}
+
+/* 15.3.1.3.21 */
+/*
+ *  call-seq:
+ *     obj.instance_variable_get(symbol)    -> obj
+ *
+ *  Returns the value of the given instance variable, or nil if the
+ *  instance variable is not set. The <code>@</code> part of the
+ *  variable name should be included for regular instance
+ *  variables. Throws a <code>NameError</code> exception if the
+ *  supplied symbol is not valid as an instance variable name.
+ *
+ *     class Fred
+ *       def initialize(p1, p2)
+ *         @a, @b = p1, p2
+ *       end
+ *     end
+ *     fred = Fred.new('cat', 99)
+ *     fred.instance_variable_get(:@a)    #=> "cat"
+ *     fred.instance_variable_get("@b")   #=> 99
+ */
+static mrb_value
+mrb_obj_ivar_get(mrb_state *mrb, mrb_value self)
+{
+  mrb_sym iv_name;
+
+  mrb_get_args(mrb, "n", &iv_name);
+  mrb_iv_name_sym_check(mrb, iv_name);
+  return mrb_iv_get(mrb, self, iv_name);
+}
+
+/* 15.3.1.3.22 */
+/*
+ *  call-seq:
+ *     obj.instance_variable_set(symbol, obj)    -> obj
+ *
+ *  Sets the instance variable names by <i>symbol</i> to
+ *  <i>object</i>, thereby frustrating the efforts of the class's
+ *  author to attempt to provide proper encapsulation. The variable
+ *  did not have to exist prior to this call.
+ *
+ *     class Fred
+ *       def initialize(p1, p2)
+ *         @a, @b = p1, p2
+ *       end
+ *     end
+ *     fred = Fred.new('cat', 99)
+ *     fred.instance_variable_set(:@a, 'dog')   #=> "dog"
+ *     fred.instance_variable_set(:@c, 'cat')   #=> "cat"
+ *     fred.inspect                             #=> "#<Fred:0x401b3da8 @a=\"dog\", @b=99, @c=\"cat\">"
+ */
+static mrb_value
+mrb_obj_ivar_set(mrb_state *mrb, mrb_value self)
+{
+  mrb_sym iv_name;
+  mrb_value val;
+
+  mrb_get_args(mrb, "no", &iv_name, &val);
+  mrb_iv_name_sym_check(mrb, iv_name);
+  mrb_iv_set(mrb, self, iv_name, val);
+  return val;
+}
+
+/* 15.3.1.2.7 */
+/* 15.3.1.3.28 */
+/*
+ *  call-seq:
+ *     local_variables   -> array
+ *
+ *  Returns the names of local variables in the current scope.
+ *
+ *  [mruby limitation]
+ *  If variable symbol information was stripped out from
+ *  compiled binary files using `mruby-strip -l`, this
+ *  method always returns an empty array.
+ */
+static mrb_value
+mrb_local_variables(mrb_state *mrb, mrb_value self)
+{
+  struct RProc *proc;
+  mrb_irep *irep;
+  mrb_value vars;
+  size_t i;
+
+  proc = mrb->c->ci[-1].proc;
+
+  if (proc == NULL || MRB_PROC_CFUNC_P(proc)) {
+    return mrb_ary_new(mrb);
+  }
+  vars = mrb_hash_new(mrb);
+  while (proc) {
+    if (MRB_PROC_CFUNC_P(proc)) break;
+    irep = proc->body.irep;
+    if (!irep->lv) break;
+    for (i = 0; i + 1 < irep->nlocals; ++i) {
+      if (irep->lv[i].name) {
+        mrb_sym sym = irep->lv[i].name;
+        const char *name = mrb_sym_name(mrb, sym);
+        switch (name[0]) {
+        case '*': case '&':
+          break;
+        default:
+          mrb_hash_set(mrb, vars, mrb_symbol_value(sym), mrb_true_value());
+          break;
+        }
+      }
+    }
+    if (!MRB_PROC_ENV_P(proc)) break;
+    proc = proc->upper;
+    //if (MRB_PROC_SCOPE_P(proc)) break;
+    if (!proc->c) break;
+  }
+
+  return mrb_hash_keys(mrb, vars);
+}
+
+KHASH_DECLARE(st, mrb_sym, char, FALSE)
+
+static void
+method_entry_loop(mrb_state *mrb, struct RClass *klass, khash_t(st) *set, khash_t(st) *undef)
+{
+  khint_t i;
+
+  khash_t(mt) *h = klass->mt;
+  if (!h || kh_size(h) == 0) return;
+  for (i=0;i<kh_end(h);i++) {
+    if (kh_exist(h, i)) {
+      mrb_method_t m = kh_value(h, i);
+      if (MRB_METHOD_UNDEF_P(m)) {
+        if (undef) {
+          kh_put(st, mrb, undef, kh_key(h, i));
+        }
+      }
+      else if (undef == NULL ||
+               kh_get(st, mrb, undef, kh_key(h, i)) == kh_end(undef)) {
+        kh_put(st, mrb, set, kh_key(h, i));
+      }
+    }
+  }
+}
+
+static mrb_value
+mrb_class_instance_method_list(mrb_state *mrb, mrb_bool recur, struct RClass *klass, int obj)
+{
+  khint_t i;
+  mrb_value ary;
+  mrb_bool prepended = FALSE;
+  struct RClass *oldklass;
+  khash_t(st) *set = kh_init(st, mrb);
+  khash_t(st) *undef = (recur ? kh_init(st, mrb) : NULL);
+
+  if (!recur && (klass->flags & MRB_FL_CLASS_IS_PREPENDED)) {
+    MRB_CLASS_ORIGIN(klass);
+    prepended = TRUE;
+  }
+
+  oldklass = 0;
+  while (klass && (klass != oldklass)) {
+    method_entry_loop(mrb, klass, set, undef);
+    if ((klass->tt == MRB_TT_ICLASS && !prepended) ||
+        (klass->tt == MRB_TT_SCLASS)) {
+    }
+    else {
+      if (!recur) break;
+    }
+    oldklass = klass;
+    klass = klass->super;
+  }
+
+  ary = mrb_ary_new_capa(mrb, kh_size(set));
+  for (i=0;i<kh_end(set);i++) {
+    if (kh_exist(set, i)) {
+      mrb_ary_push(mrb, ary, mrb_symbol_value(kh_key(set, i)));
+    }
+  }
+  kh_destroy(st, mrb, set);
+  if (undef) kh_destroy(st, mrb, undef);
+
+  return ary;
+}
+
+static mrb_value
+mrb_obj_methods(mrb_state *mrb, mrb_bool recur, mrb_value obj, mrb_method_flag_t flag)
+{
+  return mrb_class_instance_method_list(mrb, recur, mrb_class(mrb, obj), 0);
+}
+/* 15.3.1.3.31 */
+/*
+ *  call-seq:
+ *     obj.methods    -> array
+ *
+ *  Returns a list of the names of methods publicly accessible in
+ *  <i>obj</i>. This will include all the methods accessible in
+ *  <i>obj</i>'s ancestors.
+ *
+ *     class Klass
+ *       def kMethod()
+ *       end
+ *     end
+ *     k = Klass.new
+ *     k.methods[0..9]    #=> [:kMethod, :respond_to?, :nil?, :is_a?,
+ *                        #    :class, :instance_variable_set,
+ *                        #    :methods, :extend, :__send__, :instance_eval]
+ *     k.methods.length   #=> 42
+ */
+static mrb_value
+mrb_obj_methods_m(mrb_state *mrb, mrb_value self)
+{
+  mrb_bool recur = TRUE;
+  mrb_get_args(mrb, "|b", &recur);
+  return mrb_obj_methods(mrb, recur, self, (mrb_method_flag_t)0); /* everything but private */
+}
+
+/* 15.3.1.3.36 */
+/*
+ *  call-seq:
+ *     obj.private_methods(all=true)   -> array
+ *
+ *  Returns the list of private methods accessible to <i>obj</i>. If
+ *  the <i>all</i> parameter is set to <code>false</code>, only those methods
+ *  in the receiver will be listed.
+ */
+static mrb_value
+mrb_obj_private_methods(mrb_state *mrb, mrb_value self)
+{
+  mrb_bool recur = TRUE;
+  mrb_get_args(mrb, "|b", &recur);
+  return mrb_obj_methods(mrb, recur, self, NOEX_PRIVATE); /* private attribute not define */
+}
+
+/* 15.3.1.3.37 */
+/*
+ *  call-seq:
+ *     obj.protected_methods(all=true)   -> array
+ *
+ *  Returns the list of protected methods accessible to <i>obj</i>. If
+ *  the <i>all</i> parameter is set to <code>false</code>, only those methods
+ *  in the receiver will be listed.
+ */
+static mrb_value
+mrb_obj_protected_methods(mrb_state *mrb, mrb_value self)
+{
+  mrb_bool recur = TRUE;
+  mrb_get_args(mrb, "|b", &recur);
+  return mrb_obj_methods(mrb, recur, self, NOEX_PROTECTED); /* protected attribute not define */
+}
+
+/* 15.3.1.3.38 */
+/*
+ *  call-seq:
+ *     obj.public_methods(all=true)   -> array
+ *
+ *  Returns the list of public methods accessible to <i>obj</i>. If
+ *  the <i>all</i> parameter is set to <code>false</code>, only those methods
+ *  in the receiver will be listed.
+ */
+static mrb_value
+mrb_obj_public_methods(mrb_state *mrb, mrb_value self)
+{
+  mrb_bool recur = TRUE;
+  mrb_get_args(mrb, "|b", &recur);
+  return mrb_obj_methods(mrb, recur, self, NOEX_PUBLIC); /* public attribute not define */
+}
+
+static mrb_value
+mrb_obj_singleton_methods(mrb_state *mrb, mrb_bool recur, mrb_value obj)
+{
+  khint_t i;
+  mrb_value ary;
+  struct RClass *klass;
+  khash_t(st) *set = kh_init(st, mrb);
+  khash_t(st) *undef = (recur ? kh_init(st, mrb) : NULL);
+
+  klass = mrb_class(mrb, obj);
+
+  if (klass && (klass->tt == MRB_TT_SCLASS)) {
+      method_entry_loop(mrb, klass, set, undef);
+      klass = klass->super;
+  }
+  if (recur) {
+      while (klass && ((klass->tt == MRB_TT_SCLASS) || (klass->tt == MRB_TT_ICLASS))) {
+        method_entry_loop(mrb, klass, set, undef);
+        klass = klass->super;
+      }
+  }
+
+  ary = mrb_ary_new(mrb);
+  for (i=0;i<kh_end(set);i++) {
+    if (kh_exist(set, i)) {
+      mrb_ary_push(mrb, ary, mrb_symbol_value(kh_key(set, i)));
+    }
+  }
+  kh_destroy(st, mrb, set);
+  if (undef) kh_destroy(st, mrb, undef);
+
+  return ary;
+}
+
+/* 15.3.1.3.45 */
+/*
+ *  call-seq:
+ *     obj.singleton_methods(all=true)    -> array
+ *
+ *  Returns an array of the names of singleton methods for <i>obj</i>.
+ *  If the optional <i>all</i> parameter is true, the list will include
+ *  methods in modules included in <i>obj</i>.
+ *  Only public and protected singleton methods are returned.
+ *
+ *     module Other
+ *       def three() end
+ *     end
+ *
+ *     class Single
+ *       def Single.four() end
+ *     end
+ *
+ *     a = Single.new
+ *
+ *     def a.one()
+ *     end
+ *
+ *     class << a
+ *       include Other
+ *       def two()
+ *       end
+ *     end
+ *
+ *     Single.singleton_methods    #=> [:four]
+ *     a.singleton_methods(false)  #=> [:two, :one]
+ *     a.singleton_methods         #=> [:two, :one, :three]
+ */
+static mrb_value
+mrb_obj_singleton_methods_m(mrb_state *mrb, mrb_value self)
+{
+  mrb_bool recur = TRUE;
+  mrb_get_args(mrb, "|b", &recur);
+  return mrb_obj_singleton_methods(mrb, recur, self);
+}
+
+static mrb_value
+mod_define_singleton_method(mrb_state *mrb, mrb_value self)
+{
+  struct RProc *p;
+  mrb_method_t m;
+  mrb_sym mid;
+  mrb_value blk = mrb_nil_value();
+
+  mrb_get_args(mrb, "n&!", &mid, &blk);
+  p = (struct RProc*)mrb_obj_alloc(mrb, MRB_TT_PROC, mrb->proc_class);
+  mrb_proc_copy(p, mrb_proc_ptr(blk));
+  p->flags |= MRB_PROC_STRICT;
+  MRB_METHOD_FROM_PROC(m, p);
+  mrb_define_method_raw(mrb, mrb_class_ptr(mrb_singleton_class(mrb, self)), mid, m);
+  return mrb_symbol_value(mid);
+}
+
+static mrb_bool
+cv_name_p(mrb_state *mrb, const char *name, mrb_int len)
+{
+  return len > 2 && name[0] == '@' && name[1] == '@' &&
+         !ISDIGIT(name[2]) && mrb_ident_p(name+2, len-2);
+}
+
+static void
+check_cv_name_sym(mrb_state *mrb, mrb_sym id)
+{
+  mrb_int len;
+  const char *name = mrb_sym_name_len(mrb, id, &len);
+  if (!cv_name_p(mrb, name, len)) {
+    mrb_name_error(mrb, id, "'%n' is not allowed as a class variable name", id);
+  }
+}
+
+/* 15.2.2.4.39 */
+/*
+ *  call-seq:
+ *     remove_class_variable(sym)    -> obj
+ *
+ *  Removes the definition of the <i>sym</i>, returning that
+ *  constant's value.
+ *
+ *     class Dummy
+ *       @@var = 99
+ *       puts @@var
+ *       p class_variables
+ *       remove_class_variable(:@@var)
+ *       p class_variables
+ *     end
+ *
+ *  <em>produces:</em>
+ *
+ *     99
+ *     [:@@var]
+ *     []
+ */
+
+static mrb_value
+mrb_mod_remove_cvar(mrb_state *mrb, mrb_value mod)
+{
+  mrb_value val;
+  mrb_sym id;
+
+  mrb_get_args(mrb, "n", &id);
+  check_cv_name_sym(mrb, id);
+
+  val = mrb_iv_remove(mrb, mod, id);
+  if (!mrb_undef_p(val)) return val;
+
+  if (mrb_cv_defined(mrb, mod, id)) {
+    mrb_name_error(mrb, id, "cannot remove %n for %v", id, mod);
+  }
+
+  mrb_name_error(mrb, id, "class variable %n not defined for %v", id, mod);
+
+ /* not reached */
+ return mrb_nil_value();
+}
+
+/* 15.2.2.4.16 */
+/*
+ *  call-seq:
+ *     obj.class_variable_defined?(symbol)    -> true or false
+ *
+ *  Returns <code>true</code> if the given class variable is defined
+ *  in <i>obj</i>.
+ *
+ *     class Fred
+ *       @@foo = 99
+ *     end
+ *     Fred.class_variable_defined?(:@@foo)    #=> true
+ *     Fred.class_variable_defined?(:@@bar)    #=> false
+ */
+
+static mrb_value
+mrb_mod_cvar_defined(mrb_state *mrb, mrb_value mod)
+{
+  mrb_sym id;
+
+  mrb_get_args(mrb, "n", &id);
+  check_cv_name_sym(mrb, id);
+  return mrb_bool_value(mrb_cv_defined(mrb, mod, id));
+}
+
+/* 15.2.2.4.17 */
+/*
+ *  call-seq:
+ *     mod.class_variable_get(symbol)    -> obj
+ *
+ *  Returns the value of the given class variable (or throws a
+ *  <code>NameError</code> exception). The <code>@@</code> part of the
+ *  variable name should be included for regular class variables
+ *
+ *     class Fred
+ *       @@foo = 99
+ *     end
+ *     Fred.class_variable_get(:@@foo)     #=> 99
+ */
+
+static mrb_value
+mrb_mod_cvar_get(mrb_state *mrb, mrb_value mod)
+{
+  mrb_sym id;
+
+  mrb_get_args(mrb, "n", &id);
+  check_cv_name_sym(mrb, id);
+  return mrb_cv_get(mrb, mod, id);
+}
+
+/* 15.2.2.4.18 */
+/*
+ *  call-seq:
+ *     obj.class_variable_set(symbol, obj)    -> obj
+ *
+ *  Sets the class variable names by <i>symbol</i> to
+ *  <i>object</i>.
+ *
+ *     class Fred
+ *       @@foo = 99
+ *       def foo
+ *         @@foo
+ *       end
+ *     end
+ *     Fred.class_variable_set(:@@foo, 101)     #=> 101
+ *     Fred.new.foo                             #=> 101
+ */
+
+static mrb_value
+mrb_mod_cvar_set(mrb_state *mrb, mrb_value mod)
+{
+  mrb_value value;
+  mrb_sym id;
+
+  mrb_get_args(mrb, "no", &id, &value);
+  check_cv_name_sym(mrb, id);
+  mrb_cv_set(mrb, mod, id, value);
+  return value;
+}
+
+static mrb_value
+mrb_mod_included_modules(mrb_state *mrb, mrb_value self)
+{
+  mrb_value result;
+  struct RClass *c = mrb_class_ptr(self);
+  struct RClass *origin = c;
+
+  MRB_CLASS_ORIGIN(origin);
+  result = mrb_ary_new(mrb);
+  while (c) {
+    if (c != origin && c->tt == MRB_TT_ICLASS) {
+      if (c->c->tt == MRB_TT_MODULE) {
+        mrb_ary_push(mrb, result, mrb_obj_value(c->c));
+      }
+    }
+    c = c->super;
+  }
+
+  return result;
+}
+
+/* 15.2.2.4.33 */
+/*
+ *  call-seq:
+ *     mod.instance_methods(include_super=true)   -> array
+ *
+ *  Returns an array containing the names of the public and protected instance
+ *  methods in the receiver. For a module, these are the public and protected methods;
+ *  for a class, they are the instance (not singleton) methods. With no
+ *  argument, or with an argument that is <code>false</code>, the
+ *  instance methods in <i>mod</i> are returned, otherwise the methods
+ *  in <i>mod</i> and <i>mod</i>'s superclasses are returned.
+ *
+ *     module A
+ *       def method1()  end
+ *     end
+ *     class B
+ *       def method2()  end
+ *     end
+ *     class C < B
+ *       def method3()  end
+ *     end
+ *
+ *     A.instance_methods                #=> [:method1]
+ *     B.instance_methods(false)         #=> [:method2]
+ *     C.instance_methods(false)         #=> [:method3]
+ *     C.instance_methods(true).length   #=> 43
+ */
+
+static mrb_value
+mrb_mod_instance_methods(mrb_state *mrb, mrb_value mod)
+{
+  struct RClass *c = mrb_class_ptr(mod);
+  mrb_bool recur = TRUE;
+  mrb_get_args(mrb, "|b", &recur);
+  return mrb_class_instance_method_list(mrb, recur, c, 0);
+}
+
+static void
+remove_method(mrb_state *mrb, mrb_value mod, mrb_sym mid)
+{
+  struct RClass *c = mrb_class_ptr(mod);
+  khash_t(mt) *h;
+  khiter_t k;
+
+  MRB_CLASS_ORIGIN(c);
+  h = c->mt;
+
+  if (h) {
+    k = kh_get(mt, mrb, h, mid);
+    if (k != kh_end(h)) {
+      kh_del(mt, mrb, h, k);
+      mrb_funcall(mrb, mod, "method_removed", 1, mrb_symbol_value(mid));
+      return;
+    }
+  }
+
+  mrb_name_error(mrb, mid, "method '%n' not defined in %v", mid, mod);
+}
+
+/* 15.2.2.4.41 */
+/*
+ *  call-seq:
+ *     remove_method(symbol)   -> self
+ *
+ *  Removes the method identified by _symbol_ from the current
+ *  class. For an example, see <code>Module.undef_method</code>.
+ */
+
+static mrb_value
+mrb_mod_remove_method(mrb_state *mrb, mrb_value mod)
+{
+  mrb_int argc;
+  mrb_value *argv;
+
+  mrb_get_args(mrb, "*", &argv, &argc);
+  mrb_check_frozen(mrb, mrb_obj_ptr(mod));
+  while (argc--) {
+    remove_method(mrb, mod, mrb_obj_to_sym(mrb, *argv));
+    argv++;
+  }
+  return mod;
+}
+
+static mrb_value
+mrb_mod_s_constants(mrb_state *mrb, mrb_value mod)
+{
+  mrb_raise(mrb, E_NOTIMP_ERROR, "Module.constants not implemented");
+  return mrb_nil_value();       /* not reached */
+}
+
+static mrb_value
+mrb_mod_s_nesting(mrb_state *mrb, mrb_value mod)
+{
+  struct RProc *proc;
+  mrb_value ary;
+  struct RClass *c = NULL;
+
+  ary = mrb_ary_new(mrb);
+  proc = mrb->c->ci[-1].proc;   /* callee proc */
+  mrb_assert(!MRB_PROC_CFUNC_P(proc));
+  while (proc) {
+    if (MRB_PROC_SCOPE_P(proc)) {
+      struct RClass *c2 = MRB_PROC_TARGET_CLASS(proc);
+
+      if (c2 != c) {
+        c = c2;
+        mrb_ary_push(mrb, ary, mrb_obj_value(c));
+      }
+    }
+    proc = proc->upper;
+  }
+  return ary;
+}
+
+void
+mrb_mruby_metaprog_gem_init(mrb_state* mrb)
+{
+  struct RClass *krn = mrb->kernel_module;
+  struct RClass *mod = mrb->module_class;
+
+  mrb_define_method(mrb, krn, "global_variables", mrb_f_global_variables, MRB_ARGS_NONE()); /* 15.3.1.3.14 (15.3.1.2.4) */
+  mrb_define_method(mrb, krn, "local_variables", mrb_local_variables, MRB_ARGS_NONE()); /* 15.3.1.3.28 (15.3.1.2.7) */
+
+  mrb_define_method(mrb, krn, "singleton_class", mrb_singleton_class, MRB_ARGS_NONE());
+  mrb_define_method(mrb, krn, "instance_variable_defined?", mrb_obj_ivar_defined, MRB_ARGS_REQ(1)); /* 15.3.1.3.20 */
+  mrb_define_method(mrb, krn, "instance_variable_get", mrb_obj_ivar_get, MRB_ARGS_REQ(1)); /* 15.3.1.3.21 */
+  mrb_define_method(mrb, krn, "instance_variable_set", mrb_obj_ivar_set, MRB_ARGS_REQ(2)); /* 15.3.1.3.22 */
+  mrb_define_method(mrb, krn, "instance_variables", mrb_obj_instance_variables, MRB_ARGS_NONE()); /* 15.3.1.3.23 */
+  mrb_define_method(mrb, krn, "methods", mrb_obj_methods_m, MRB_ARGS_OPT(1)); /* 15.3.1.3.31 */
+  mrb_define_method(mrb, krn, "private_methods", mrb_obj_private_methods, MRB_ARGS_OPT(1)); /* 15.3.1.3.36 */
+  mrb_define_method(mrb, krn, "protected_methods", mrb_obj_protected_methods, MRB_ARGS_OPT(1)); /* 15.3.1.3.37 */
+  mrb_define_method(mrb, krn, "public_methods", mrb_obj_public_methods, MRB_ARGS_OPT(1)); /* 15.3.1.3.38 */
+  mrb_define_method(mrb, krn, "singleton_methods", mrb_obj_singleton_methods_m, MRB_ARGS_OPT(1)); /* 15.3.1.3.45 */
+  mrb_define_method(mrb, krn, "define_singleton_method", mod_define_singleton_method, MRB_ARGS_REQ(1)|MRB_ARGS_BLOCK());
+  mrb_define_method(mrb, krn, "send", mrb_f_send, MRB_ARGS_REQ(1)|MRB_ARGS_REST()|MRB_ARGS_BLOCK()); /* 15.3.1.3.44 */
+
+  mrb_define_method(mrb, mod, "class_variables", mrb_mod_class_variables, MRB_ARGS_OPT(1)); /* 15.2.2.4.19 */
+  mrb_define_method(mrb, mod, "remove_class_variable", mrb_mod_remove_cvar, MRB_ARGS_REQ(1)); /* 15.2.2.4.39 */
+  mrb_define_method(mrb, mod, "class_variable_defined?", mrb_mod_cvar_defined, MRB_ARGS_REQ(1)); /* 15.2.2.4.16 */
+  mrb_define_method(mrb, mod, "class_variable_get", mrb_mod_cvar_get, MRB_ARGS_REQ(1)); /* 15.2.2.4.17 */
+  mrb_define_method(mrb, mod, "class_variable_set", mrb_mod_cvar_set, MRB_ARGS_REQ(2)); /* 15.2.2.4.18 */
+  mrb_define_method(mrb, mod, "included_modules", mrb_mod_included_modules, MRB_ARGS_NONE()); /* 15.2.2.4.30 */
+  mrb_define_method(mrb, mod, "instance_methods", mrb_mod_instance_methods, MRB_ARGS_ANY()); /* 15.2.2.4.33 */
+  mrb_define_method(mrb, mod, "remove_method", mrb_mod_remove_method, MRB_ARGS_ANY()); /* 15.2.2.4.41 */
+  mrb_define_method(mrb, mod, "method_removed", mrb_f_nil, MRB_ARGS_REQ(1));
+  mrb_define_method(mrb, mod, "constants", mrb_mod_constants, MRB_ARGS_OPT(1)); /* 15.2.2.4.24 */
+  mrb_define_class_method(mrb, mod, "constants", mrb_mod_s_constants, MRB_ARGS_ANY()); /* 15.2.2.3.1 */
+  mrb_define_class_method(mrb, mod, "nesting", mrb_mod_s_nesting, MRB_ARGS_NONE()); /* 15.2.2.3.2 */
+}
+
+void
+mrb_mruby_metaprog_gem_final(mrb_state* mrb)
+{
+}
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-metaprog/test/metaprog.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-metaprog/test/metaprog.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-metaprog/test/metaprog.rb	(revision 439)
@@ -0,0 +1,400 @@
+assert('Kernel#send', '15.3.1.3.44') do
+  # test with block
+  l = send(:lambda) do
+    true
+  end
+
+  assert_true l.call
+  assert_equal l.class, Proc
+  # test with argument
+  assert_true send(:respond_to?, :nil?)
+  # test without argument and without block
+  assert_equal send(:to_s).class, String
+end
+
+assert('Kernel#instance_variable_defined?', '15.3.1.3.20') do
+  o = Object.new
+  o.instance_variable_set(:@a, 1)
+
+  assert_true o.instance_variable_defined?("@a")
+  assert_false o.instance_variable_defined?("@b")
+  assert_true o.instance_variable_defined?("@a"[0,2])
+  assert_true o.instance_variable_defined?("@abc"[0,2])
+  assert_raise(NameError) { o.instance_variable_defined?("@0") }
+end
+
+assert('Kernel#instance_variable_get', '15.3.1.3.21') do
+  o = Class.new { attr_accessor :foo, :bar }.new
+  o.foo = "one"
+  o.bar = 2
+  assert_equal("one", o.instance_variable_get(:@foo))
+  assert_equal(2, o.instance_variable_get("@bar"))
+  assert_equal(nil, o.instance_variable_get(:@baz))
+  %w[foo @1].each do |n|
+    assert_raise(NameError) { o.instance_variable_get(n) }
+  end
+end
+
+assert('Kernel#instance_variable_set', '15.3.1.3.22') do
+  o = Class.new { attr_reader :foo, :_bar }.new
+  assert_equal("one", o.instance_variable_set(:@foo, "one"))
+  assert_equal("one", o.foo)
+  assert_equal(2, o.instance_variable_set("@_bar", 2))
+  assert_equal(2, o._bar)
+  %w[@6 @% @@a @ a].each do |n|
+    assert_raise(NameError) { o.instance_variable_set(n, 1) }
+  end
+  assert_raise(FrozenError) { o.freeze.instance_variable_set(:@a, 2) }
+  assert_raise(FrozenError, ArgumentError) { nil.instance_variable_set(:@a, 2) }
+end
+
+assert('Kernel#instance_variables', '15.3.1.3.23') do
+  o = Object.new
+  o.instance_eval do
+    @a = 11
+    @b = 12
+  end
+  ivars = o.instance_variables
+
+  assert_equal Array, ivars.class,
+  assert_equal(2, ivars.size)
+  assert_true ivars.include?(:@a)
+  assert_true ivars.include?(:@b)
+end
+
+assert('Kernel#methods', '15.3.1.3.31') do
+  assert_equal Array, methods.class
+end
+
+assert('Kernel#private_methods', '15.3.1.3.36') do
+  assert_equal Array, private_methods.class
+end
+
+assert('Kernel#protected_methods', '15.3.1.3.37') do
+  assert_equal Array, protected_methods.class
+end
+
+assert('Kernel#public_methods', '15.3.1.3.38') do
+  assert_equal Array, public_methods.class
+  class Foo
+    def foo
+    end
+  end
+  assert_equal [:foo], Foo.new.public_methods(false)
+end
+
+assert('Kernel#singleton_methods', '15.3.1.3.45') do
+  assert_equal singleton_methods.class, Array
+end
+
+assert('Kernel.global_variables', '15.3.1.2.4') do
+  assert_equal Array, Kernel.global_variables.class
+end
+
+assert('Kernel#global_variables', '15.3.1.3.14') do
+  variables1 = global_variables
+  assert_equal Array, variables1.class
+  assert_not_include(variables1, :$kernel_global_variables_test)
+
+  $kernel_global_variables_test = nil
+  variables2 = global_variables
+  assert_include(variables2, :$kernel_global_variables_test)
+  assert_equal(1, variables2.size - variables1.size)
+end
+
+assert('Kernel.local_variables', '15.3.1.2.7') do
+  a, b = 0, 1
+  a += b
+
+  vars = Kernel.local_variables.sort
+  assert_equal [:a, :b, :vars], vars
+
+  assert_equal [:a, :b, :c, :vars], Proc.new { |a, b|
+    c = 2
+    # Kernel#local_variables: 15.3.1.3.28
+    local_variables.sort
+  }.call(-1, -2)
+end
+
+assert('Kernel#define_singleton_method') do
+  o = Object.new
+  ret = o.define_singleton_method(:test_method) do
+    :singleton_method_ok
+  end
+  assert_equal :test_method, ret
+  assert_equal :singleton_method_ok, o.test_method
+  assert_raise(TypeError) { 2.define_singleton_method(:f){} }
+  assert_raise(FrozenError) { [].freeze.define_singleton_method(:f){} }
+end
+
+assert('Kernel#singleton_class') do
+  o1 = Object.new
+  assert_same(o1.singleton_class, class << o1; self end)
+
+  o2 = Object.new
+  sc2 = class << o2; self end
+  assert_same(o2.singleton_class, sc2)
+
+  o3 = Object.new
+  sc3 = o3.singleton_class
+  o3.freeze
+  assert_predicate(sc3, :frozen?)
+
+  assert_predicate(Object.new.freeze.singleton_class, :frozen?)
+end
+
+def labeled_module(name, &block)
+  Module.new do
+    (class <<self; self end).class_eval do
+      define_method(:to_s) { name }
+      alias_method :inspect, :to_s
+    end
+    class_eval(&block) if block
+  end
+end
+
+def labeled_class(name, supklass = Object, &block)
+  Class.new(supklass) do
+    (class <<self; self end).class_eval do
+      define_method(:to_s) { name }
+      alias_method :inspect, :to_s
+    end
+    class_eval(&block) if block
+  end
+end
+
+assert('Module#class_variable_defined?', '15.2.2.4.16') do
+  class Test4ClassVariableDefined
+    @@cv = 99
+  end
+
+  assert_true Test4ClassVariableDefined.class_variable_defined?(:@@cv)
+  assert_false Test4ClassVariableDefined.class_variable_defined?(:@@noexisting)
+  assert_raise(NameError) { Test4ClassVariableDefined.class_variable_defined?("@@2") }
+end
+
+assert('Module#class_variable_get', '15.2.2.4.17') do
+  class Test4ClassVariableGet
+    @@cv = 99
+  end
+
+  assert_equal 99, Test4ClassVariableGet.class_variable_get(:@@cv)
+  assert_raise(NameError) { Test4ClassVariableGet.class_variable_get(:@@a) }
+  %w[@@a? @@! @a a].each do |n|
+    assert_raise(NameError) { Test4ClassVariableGet.class_variable_get(n) }
+  end
+end
+
+assert('Module#class_variable_set', '15.2.2.4.18') do
+  class Test4ClassVariableSet
+    @@foo = 100
+    def foo
+      @@foo
+    end
+  end
+  assert_equal 99, Test4ClassVariableSet.class_variable_set(:@@cv, 99)
+  assert_equal 101, Test4ClassVariableSet.class_variable_set(:@@foo, 101)
+  assert_true Test4ClassVariableSet.class_variables.include? :@@cv
+  assert_equal 99, Test4ClassVariableSet.class_variable_get(:@@cv)
+  assert_equal 101, Test4ClassVariableSet.new.foo
+  %w[@@ @@1 @@x= @x @ x 1].each do |n|
+    assert_raise(NameError) { Test4ClassVariableSet.class_variable_set(n, 1) }
+  end
+
+  m = Module.new.freeze
+  assert_raise(FrozenError) { m.class_variable_set(:@@cv, 1) }
+
+  parent = Class.new{ class_variable_set(:@@a, nil) }.freeze
+  child = Class.new(parent)
+  assert_raise(FrozenError) { child.class_variable_set(:@@a, 1) }
+end
+
+assert('Module#class_variables', '15.2.2.4.19') do
+  class Test4ClassVariables1
+    @@var1 = 1
+  end
+  class Test4ClassVariables2 < Test4ClassVariables1
+    @@var2 = 2
+  end
+
+  assert_equal [:@@var1], Test4ClassVariables1.class_variables
+  assert_equal [:@@var2, :@@var1], Test4ClassVariables2.class_variables
+end
+
+assert('Module#constants', '15.2.2.4.24') do
+  $n = []
+  module TestA
+    C = 1
+  end
+  class TestB
+    include TestA
+    C2 = 1
+    $n = constants.sort
+  end
+
+  assert_equal [ :C ], TestA.constants
+  assert_equal [ :C, :C2 ], $n
+end
+
+assert('Module#included_modules', '15.2.2.4.30') do
+  module Test4includedModules
+  end
+  module Test4includedModules2
+    include Test4includedModules
+  end
+  r = Test4includedModules2.included_modules
+
+  assert_equal Array, r.class
+  assert_true r.include?(Test4includedModules)
+end
+
+assert('Module#instance_methods', '15.2.2.4.33') do
+  module Test4InstanceMethodsA
+    def method1()  end
+  end
+  class Test4InstanceMethodsB
+    def method2()  end
+  end
+  class Test4InstanceMethodsC < Test4InstanceMethodsB
+    def method3()  end
+  end
+
+  r = Test4InstanceMethodsC.instance_methods(true)
+
+  assert_equal [:method1], Test4InstanceMethodsA.instance_methods
+  assert_equal [:method2], Test4InstanceMethodsB.instance_methods(false)
+  assert_equal [:method3], Test4InstanceMethodsC.instance_methods(false)
+  assert_equal Array, r.class
+  assert_true r.include?(:method3)
+  assert_true r.include?(:method2)
+end
+
+assert 'Module#prepend #instance_methods(false)' do
+  bug6660 = '[ruby-dev:45863]'
+  assert_equal([:m1], Class.new{ prepend Module.new; def m1; end }.instance_methods(false), bug6660)
+  assert_equal([:m1], Class.new(Class.new{def m2;end}){ prepend Module.new; def m1; end }.instance_methods(false), bug6660)
+end
+
+assert('Module#remove_class_variable', '15.2.2.4.39') do
+  class Test4RemoveClassVariable
+    @@cv = 99
+  end
+
+  assert_equal 99, Test4RemoveClassVariable.remove_class_variable(:@@cv)
+  assert_false Test4RemoveClassVariable.class_variables.include? :@@cv
+  assert_raise(NameError) do
+    Test4RemoveClassVariable.remove_class_variable(:@@cv)
+  end
+  assert_raise(NameError) do
+    Test4RemoveClassVariable.remove_class_variable(:@v)
+  end
+  assert_raise(FrozenError) do
+    Test4RemoveClassVariable.freeze.remove_class_variable(:@@cv)
+  end
+end
+
+assert('Module#remove_method', '15.2.2.4.41') do
+  module Test4RemoveMethod
+    class Parent
+      def hello
+      end
+    end
+
+    class Child < Parent
+      def hello
+      end
+    end
+  end
+
+  klass = Test4RemoveMethod::Child
+  assert_same klass, klass.class_eval{ remove_method :hello }
+  assert_true klass.instance_methods.include? :hello
+  assert_false klass.instance_methods(false).include? :hello
+  assert_raise(FrozenError) { klass.freeze.remove_method :m }
+end
+
+assert('Module.nesting', '15.2.2.2.2') do
+  module Test4ModuleNesting
+    module Test4ModuleNesting2
+      assert_equal [Test4ModuleNesting2, Test4ModuleNesting],
+                   Module.nesting
+    end
+  end
+  module Test4ModuleNesting::Test4ModuleNesting2
+    assert_equal [Test4ModuleNesting::Test4ModuleNesting2], Module.nesting
+  end
+end
+
+assert('Moduler#prepend + #instance_methods') do
+  bug6655 = '[ruby-core:45915]'
+  assert_equal(Object.instance_methods, Class.new {prepend Module.new}.instance_methods, bug6655)
+end
+
+assert 'Module#prepend + #singleton_methods' do
+  o = Object.new
+  o.singleton_class.class_eval {prepend Module.new}
+  assert_equal([], o.singleton_methods)
+end
+
+assert 'Module#prepend + #remove_method' do
+  c = Class.new do
+    prepend Module.new { def foo; end }
+  end
+  assert_raise(NameError) do
+    c.class_eval do
+      remove_method(:foo)
+    end
+  end
+  c.class_eval do
+    def foo; end
+  end
+  removed = nil
+  c.singleton_class.class_eval do
+    define_method(:method_removed) {|id| removed = id}
+  end
+  assert_nothing_raised('[Bug #7843]') do
+    c.class_eval do
+      remove_method(:foo)
+    end
+  end
+  assert_equal(:foo, removed)
+end
+
+assert 'Module#prepend + #included_modules' do
+  bug8025 = '[ruby-core:53158] [Bug #8025]'
+  mixin = labeled_module("mixin")
+  c = labeled_module("c") {prepend mixin}
+  im = c.included_modules
+  assert_not_include(im, c, bug8025)
+  assert_include(im, mixin, bug8025)
+  c1 = labeled_class("c1") {prepend mixin}
+  c2 = labeled_class("c2", c1)
+  im = c2.included_modules
+  assert_not_include(im, c1, bug8025)
+  assert_not_include(im, c2, bug8025)
+  assert_include(im, mixin, bug8025)
+end
+
+assert("remove_method doesn't segfault if the passed in argument isn't a symbol") do
+  klass = Class.new
+  assert_raise(TypeError) { klass.remove_method nil }
+  assert_raise(TypeError) { klass.remove_method 123 }
+  assert_raise(TypeError) { klass.remove_method 1.23 }
+  assert_raise(NameError) { klass.remove_method "hello" }
+  assert_raise(TypeError) { klass.remove_method Class.new }
+end
+
+assert('alias_method and remove_method') do
+  begin
+    Fixnum.alias_method :to_s_, :to_s
+    Fixnum.remove_method :to_s
+
+    assert_nothing_raised do
+      # segfaults if mrb_cptr is used
+      1.to_s
+    end
+  ensure
+    Fixnum.alias_method :to_s, :to_s_
+    Fixnum.remove_method :to_s_
+  end
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-method/README.md
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-method/README.md	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-method/README.md	(revision 439)
@@ -0,0 +1,59 @@
+mruby-method
+===
+
+A implementetion of class **Method** and **UnboundMethod** for mruby
+
+```ruby
+p Enumerable.instance_method(:find_all).source_location
+#=> ["mruby/mruby/mrblib/enum.rb", 148]
+```
+
+# Note
+
+`source_location` method need this configuration in build_config.rb
+
+```ruby
+MRuby::Build.new do |conf|
+  enable_debug
+end
+```
+
+# Supported Methods
+
+## Kernel
+
+- `Kernel#method`
+- `Kernel#singleton_method`
+
+## Module
+
+- `Module#instance_method`
+
+## Method class
+
+- `Method#name`
+- `Method#call`
+- `Method#super_method`
+- `Method#arity`
+- `Method#unbind`
+- `Method#[]`
+- `Method#owner`
+- `Method#receiver`
+- `Method#parameters`
+- `Method#source_location`
+- `Method#to_proc`
+
+## UnboundMethod class
+
+- `UnboundMethod#name`
+- `UnboundMethod#bind`
+- `UnboundMethod#super_method`
+- `UnboundMethod#arity`
+- `UnboundMethod#owner`
+- `UnboundMethod#parameters`
+- `UnboundMethod#source_location`
+
+# See also
+
+- https://ruby-doc.org/core-2.3.3/Method.html
+- https://ruby-doc.org/core-2.3.3/UnboundMethod.html
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-method/mrbgem.rake
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-method/mrbgem.rake	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-method/mrbgem.rake	(revision 439)
@@ -0,0 +1,7 @@
+MRuby::Gem::Specification.new('mruby-method') do |spec|
+  spec.license = 'MIT'
+  spec.author  = 'mruby developers'
+  spec.summary = 'Method and UnboundMethod class'
+
+  spec.add_dependency('mruby-proc-ext', :core => 'mruby-proc-ext')
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-method/mrblib/kernel.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-method/mrblib/kernel.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-method/mrblib/kernel.rb	(revision 439)
@@ -0,0 +1,10 @@
+module Kernel
+  def singleton_method(name)
+    m = method(name)
+    sc = (class <<self; self; end)
+    if m.owner != sc
+      raise NameError, "undefined method '#{name}' for class '#{sc}'"
+    end
+    m
+  end
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-method/mrblib/method.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-method/mrblib/method.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-method/mrblib/method.rb	(revision 439)
@@ -0,0 +1,16 @@
+class Method
+  def to_proc
+    m = self
+    lambda { |*args, &b|
+      m.call(*args, &b)
+    }
+  end
+
+  def <<(other)
+    ->(*args, &block) { call(other.call(*args, &block)) }
+  end
+
+  def >>(other)
+    ->(*args, &block) { other.call(call(*args, &block)) }
+  end
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-method/src/method.c
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-method/src/method.c	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-method/src/method.c	(revision 439)
@@ -0,0 +1,451 @@
+#include "mruby.h"
+#include "mruby/array.h"
+#include "mruby/class.h"
+#include "mruby/variable.h"
+#include "mruby/proc.h"
+#include "mruby/string.h"
+
+static struct RObject *
+method_object_alloc(mrb_state *mrb, struct RClass *mclass)
+{
+  return (struct RObject*)mrb_obj_alloc(mrb, MRB_TT_OBJECT, mclass);
+}
+
+static void
+bind_check(mrb_state *mrb, mrb_value recv, mrb_value owner)
+{
+  if (!mrb_module_p(owner) &&
+      mrb_class_ptr(owner) != mrb_obj_class(mrb, recv) &&
+      !mrb_obj_is_kind_of(mrb, recv, mrb_class_ptr(owner))) {
+    if (mrb_sclass_p(owner)) {
+      mrb_raise(mrb, E_TYPE_ERROR, "singleton method called for a different object");
+    } else {
+      mrb_raisef(mrb, E_TYPE_ERROR, "bind argument must be an instance of %v", owner);
+    }
+  }
+}
+
+static mrb_value
+unbound_method_bind(mrb_state *mrb, mrb_value self)
+{
+  struct RObject *me;
+  mrb_value owner = mrb_iv_get(mrb, self, mrb_intern_lit(mrb, "_owner"));
+  mrb_value name = mrb_iv_get(mrb, self, mrb_intern_lit(mrb, "_name"));
+  mrb_value proc = mrb_iv_get(mrb, self, mrb_intern_lit(mrb, "_proc"));
+  mrb_value klass = mrb_iv_get(mrb, self, mrb_intern_lit(mrb, "_klass"));
+  mrb_value recv;
+
+  mrb_get_args(mrb, "o", &recv);
+  bind_check(mrb, recv, owner);
+  me = method_object_alloc(mrb, mrb_class_get(mrb, "Method"));
+  mrb_obj_iv_set(mrb, me, mrb_intern_lit(mrb, "_owner"), owner);
+  mrb_obj_iv_set(mrb, me, mrb_intern_lit(mrb, "_recv"), recv);
+  mrb_obj_iv_set(mrb, me, mrb_intern_lit(mrb, "_name"), name);
+  mrb_obj_iv_set(mrb, me, mrb_intern_lit(mrb, "_proc"), proc);
+  mrb_obj_iv_set(mrb, me, mrb_intern_lit(mrb, "_klass"), klass);
+
+  return mrb_obj_value(me);
+}
+
+#define IV_GET(value, name) mrb_iv_get(mrb, value, mrb_intern_lit(mrb, name))
+static mrb_value
+method_eql(mrb_state *mrb, mrb_value self)
+{
+  mrb_value other, receiver, orig_proc, other_proc;
+  struct RClass *owner, *klass;
+  struct RProc *orig_rproc, *other_rproc;
+
+  mrb_get_args(mrb, "o", &other);
+  if (!mrb_obj_is_instance_of(mrb, other, mrb_class(mrb, self)))
+    return mrb_false_value();
+
+  if (mrb_class(mrb, self) != mrb_class(mrb, other))
+    return mrb_false_value();
+
+  klass = mrb_class_ptr(IV_GET(self, "_klass"));
+  if (klass != mrb_class_ptr(IV_GET(other, "_klass")))
+    return mrb_false_value();
+
+  owner = mrb_class_ptr(IV_GET(self, "_owner"));
+  if (owner != mrb_class_ptr(IV_GET(other, "_owner")))
+    return mrb_false_value();
+
+  receiver = IV_GET(self, "_recv");
+  if (!mrb_obj_equal(mrb, receiver, IV_GET(other, "_recv")))
+    return mrb_false_value();
+
+  orig_proc = IV_GET(self, "_proc");
+  other_proc = IV_GET(other, "_proc");
+  if (mrb_nil_p(orig_proc) && mrb_nil_p(other_proc)) {
+    if (mrb_symbol(IV_GET(self, "_name")) == mrb_symbol(IV_GET(other, "_name")))
+      return mrb_true_value();
+    else
+      return mrb_false_value();
+  }
+
+  if (mrb_nil_p(orig_proc))
+    return mrb_false_value();
+  if (mrb_nil_p(other_proc))
+    return mrb_false_value();
+
+  orig_rproc = mrb_proc_ptr(orig_proc);
+  other_rproc = mrb_proc_ptr(other_proc);
+  if (MRB_PROC_CFUNC_P(orig_rproc)) {
+    if (!MRB_PROC_CFUNC_P(other_rproc))
+      return mrb_false_value();
+    if (orig_rproc->body.func != other_rproc->body.func)
+      return mrb_false_value();
+  }
+  else {
+    if (MRB_PROC_CFUNC_P(other_rproc))
+      return mrb_false_value();
+    if (orig_rproc->body.irep != other_rproc->body.irep)
+      return mrb_false_value();
+  }
+
+  return mrb_true_value();
+}
+
+#undef IV_GET
+
+static mrb_value
+mcall(mrb_state *mrb, mrb_value recv, mrb_value proc, mrb_value name, struct RClass *owner,
+      int argc, mrb_value *argv, mrb_value block)
+{
+  mrb_value ret;
+  mrb_sym orig_mid = mrb->c->ci->mid;
+
+  mrb->c->ci->mid = mrb_symbol(name);
+  if (mrb_nil_p(proc)) {
+    mrb_value missing_argv = mrb_ary_new_from_values(mrb, argc, argv);
+    mrb_ary_unshift(mrb, missing_argv, name);
+    ret = mrb_funcall_argv(mrb, recv, mrb_intern_lit(mrb, "method_missing"), argc + 1, RARRAY_PTR(missing_argv));
+  }
+  else if (!mrb_nil_p(block)) {
+    /*
+      workaround since `mrb_yield_with_class` does not support passing block as parameter
+      need new API that initializes `mrb->c->stack[argc+1]` with block passed by argument
+    */
+    ret = mrb_funcall_with_block(mrb, recv, mrb_symbol(name), argc, argv, block);
+  }
+  else {
+    ret = mrb_yield_with_class(mrb, proc, argc, argv, recv, owner);
+  }
+  mrb->c->ci->mid = orig_mid;
+  return ret;
+}
+
+static mrb_value
+method_call(mrb_state *mrb, mrb_value self)
+{
+  mrb_value proc = mrb_iv_get(mrb, self, mrb_intern_lit(mrb, "_proc"));
+  mrb_value name = mrb_iv_get(mrb, self, mrb_intern_lit(mrb, "_name"));
+  mrb_value recv = mrb_iv_get(mrb, self, mrb_intern_lit(mrb, "_recv"));
+  struct RClass *owner = mrb_class_ptr(mrb_iv_get(mrb, self, mrb_intern_lit(mrb, "_owner")));
+  mrb_int argc;
+  mrb_value *argv, block;
+
+  mrb_get_args(mrb, "*&", &argv, &argc, &block);
+  return mcall(mrb, recv, proc, name, owner, argc, argv, block);
+}
+
+static mrb_value
+method_bcall(mrb_state *mrb, mrb_value self)
+{
+  mrb_value proc = mrb_iv_get(mrb, self, mrb_intern_lit(mrb, "_proc"));
+  mrb_value name = mrb_iv_get(mrb, self, mrb_intern_lit(mrb, "_name"));
+  mrb_value recv = mrb_iv_get(mrb, self, mrb_intern_lit(mrb, "_recv"));
+  mrb_value owner = mrb_iv_get(mrb, self, mrb_intern_lit(mrb, "_owner"));
+  mrb_int argc;
+  mrb_value *argv, block;
+
+  mrb_get_args(mrb, "o*&", &recv, &argv, &argc, &block);
+  bind_check(mrb, recv, owner);
+  return mcall(mrb, recv, proc, name, mrb_class_ptr(owner), argc, argv, block);
+}
+
+static mrb_value
+method_unbind(mrb_state *mrb, mrb_value self)
+{
+  struct RObject *ume;
+  mrb_value owner = mrb_iv_get(mrb, self, mrb_intern_lit(mrb, "_owner"));
+  mrb_value name = mrb_iv_get(mrb, self, mrb_intern_lit(mrb, "_name"));
+  mrb_value proc = mrb_iv_get(mrb, self, mrb_intern_lit(mrb, "_proc"));
+  mrb_value klass = mrb_iv_get(mrb, self, mrb_intern_lit(mrb, "_klass"));
+
+  ume = method_object_alloc(mrb, mrb_class_get(mrb, "UnboundMethod"));
+  mrb_obj_iv_set(mrb, ume, mrb_intern_lit(mrb, "_owner"), owner);
+  mrb_obj_iv_set(mrb, ume, mrb_intern_lit(mrb, "_recv"), mrb_nil_value());
+  mrb_obj_iv_set(mrb, ume, mrb_intern_lit(mrb, "_name"), name);
+  mrb_obj_iv_set(mrb, ume, mrb_intern_lit(mrb, "_proc"), proc);
+  mrb_obj_iv_set(mrb, ume, mrb_intern_lit(mrb, "_klass"), klass);
+
+  return mrb_obj_value(ume);
+}
+
+static struct RProc *
+method_search_vm(mrb_state *mrb, struct RClass **cp, mrb_sym mid)
+{
+  mrb_method_t m = mrb_method_search_vm(mrb, cp, mid);
+  if (MRB_METHOD_UNDEF_P(m))
+    return NULL;
+  if (MRB_METHOD_PROC_P(m))
+    return MRB_METHOD_PROC(m);
+  return mrb_proc_new_cfunc(mrb, MRB_METHOD_FUNC(m));
+}
+
+static mrb_value
+method_super_method(mrb_state *mrb, mrb_value self)
+{
+  mrb_value recv = mrb_iv_get(mrb, self, mrb_intern_lit(mrb, "_recv"));
+  mrb_value klass = mrb_iv_get(mrb, self, mrb_intern_lit(mrb, "_klass"));
+  mrb_value owner = mrb_iv_get(mrb, self, mrb_intern_lit(mrb, "_owner"));
+  mrb_value name = mrb_iv_get(mrb, self, mrb_intern_lit(mrb, "_name"));
+  struct RClass *super, *rklass;
+  struct RProc *proc;
+  struct RObject *me;
+
+  switch (mrb_type(klass)) {
+    case MRB_TT_SCLASS:
+      super = mrb_class_ptr(klass)->super->super;
+      break;
+    case MRB_TT_ICLASS:
+      super = mrb_class_ptr(klass)->super;
+      break;
+    default:
+      super = mrb_class_ptr(owner)->super;
+      break;
+  }
+
+  proc = method_search_vm(mrb, &super, mrb_symbol(name));
+  if (!proc)
+    return mrb_nil_value();
+
+  rklass = super;
+  while (super->tt == MRB_TT_ICLASS)
+    super = super->c;
+
+  me = method_object_alloc(mrb, mrb_obj_class(mrb, self));
+  mrb_obj_iv_set(mrb, me, mrb_intern_lit(mrb, "_owner"), mrb_obj_value(super));
+  mrb_obj_iv_set(mrb, me, mrb_intern_lit(mrb, "_recv"), recv);
+  mrb_obj_iv_set(mrb, me, mrb_intern_lit(mrb, "_name"), name);
+  mrb_obj_iv_set(mrb, me, mrb_intern_lit(mrb, "_proc"), mrb_obj_value(proc));
+  mrb_obj_iv_set(mrb, me, mrb_intern_lit(mrb, "_klass"), mrb_obj_value(rklass));
+
+  return mrb_obj_value(me);
+}
+
+static mrb_value
+method_arity(mrb_state *mrb, mrb_value self)
+{
+  mrb_value proc = mrb_iv_get(mrb, self, mrb_intern_lit(mrb, "_proc"));
+  mrb_int arity = mrb_nil_p(proc) ? -1 : mrb_proc_arity(mrb_proc_ptr(proc));
+  return mrb_fixnum_value(arity);
+}
+
+static mrb_value
+method_source_location(mrb_state *mrb, mrb_value self)
+{
+  mrb_value proc = mrb_iv_get(mrb, self, mrb_intern_lit(mrb, "_proc"));
+  struct RProc *rproc;
+  struct RClass *orig;
+  mrb_value ret;
+
+  if (mrb_nil_p(proc))
+    return mrb_nil_value();
+
+  rproc = mrb_proc_ptr(proc);
+  orig = rproc->c;
+  rproc->c = mrb->proc_class;
+  ret = mrb_funcall(mrb, proc, "source_location", 0);
+  rproc->c = orig;
+  return ret;
+}
+
+static mrb_value
+method_parameters(mrb_state *mrb, mrb_value self)
+{
+  mrb_value proc = mrb_iv_get(mrb, self, mrb_intern_lit(mrb, "_proc"));
+  struct RProc *rproc;
+  struct RClass *orig;
+  mrb_value ret;
+
+  if (mrb_nil_p(proc)) {
+    mrb_value rest = mrb_symbol_value(mrb_intern_lit(mrb, "rest"));
+    mrb_value arest = mrb_ary_new_from_values(mrb, 1, &rest);
+    return mrb_ary_new_from_values(mrb, 1, &arest);
+  }
+
+  rproc = mrb_proc_ptr(proc);
+  orig = rproc->c;
+  rproc->c = mrb->proc_class;
+  ret = mrb_funcall(mrb, proc, "parameters", 0);
+  rproc->c = orig;
+  return ret;
+}
+
+static mrb_value
+method_to_s(mrb_state *mrb, mrb_value self)
+{
+  mrb_value owner = mrb_iv_get(mrb, self, mrb_intern_lit(mrb, "_owner"));
+  mrb_value klass = mrb_iv_get(mrb, self, mrb_intern_lit(mrb, "_klass"));
+  mrb_value name = mrb_iv_get(mrb, self, mrb_intern_lit(mrb, "_name"));
+  mrb_value str = mrb_str_new_lit(mrb, "#<");
+  struct RClass *rklass;
+
+  mrb_str_cat_cstr(mrb, str, mrb_obj_classname(mrb, self));
+  mrb_str_cat_lit(mrb, str, ": ");
+  rklass = mrb_class_ptr(klass);
+  if (mrb_class_ptr(owner) == rklass) {
+    mrb_str_concat(mrb, str, owner);
+    mrb_str_cat_lit(mrb, str, "#");
+    mrb_str_concat(mrb, str, name);
+  }
+  else {
+    mrb_str_cat_cstr(mrb, str, mrb_class_name(mrb, rklass));
+    mrb_str_cat_lit(mrb, str, "(");
+    mrb_str_concat(mrb, str, owner);
+    mrb_str_cat_lit(mrb, str, ")#");
+    mrb_str_concat(mrb, str, name);
+  }
+  mrb_str_cat_lit(mrb, str, ">");
+  return str;
+}
+
+static void
+mrb_search_method_owner(mrb_state *mrb, struct RClass *c, mrb_value obj, mrb_sym name, struct RClass **owner, struct RProc **proc, mrb_bool unbound)
+{
+  mrb_value ret;
+
+  *owner = c;
+  *proc = method_search_vm(mrb, owner, name);
+  if (!*proc) {
+    if (unbound) {
+      goto name_error;
+    }
+    if (!mrb_respond_to(mrb, obj, mrb_intern_lit(mrb, "respond_to_missing?"))) {
+      goto name_error;
+    }
+    ret = mrb_funcall(mrb, obj, "respond_to_missing?", 2, mrb_symbol_value(name), mrb_true_value());
+    if (!mrb_test(ret)) {
+      goto name_error;
+    }
+    *owner = c;
+  }
+
+  while ((*owner)->tt == MRB_TT_ICLASS)
+    *owner = (*owner)->c;
+
+  return;
+
+name_error:
+  mrb_raisef(mrb, E_NAME_ERROR, "undefined method '%n' for class '%C'", name, c);
+}
+
+static mrb_value
+mrb_kernel_method(mrb_state *mrb, mrb_value self)
+{
+  struct RClass *owner;
+  struct RProc *proc;
+  struct RObject *me;
+  mrb_sym name;
+
+  mrb_get_args(mrb, "n", &name);
+
+  mrb_search_method_owner(mrb, mrb_class(mrb, self), self, name, &owner, &proc, FALSE);
+
+  me = method_object_alloc(mrb, mrb_class_get(mrb, "Method"));
+  mrb_obj_iv_set(mrb, me, mrb_intern_lit(mrb, "_owner"), mrb_obj_value(owner));
+  mrb_obj_iv_set(mrb, me, mrb_intern_lit(mrb, "_recv"), self);
+  mrb_obj_iv_set(mrb, me, mrb_intern_lit(mrb, "_name"), mrb_symbol_value(name));
+  mrb_obj_iv_set(mrb, me, mrb_intern_lit(mrb, "_proc"), proc ? mrb_obj_value(proc) : mrb_nil_value());
+  mrb_obj_iv_set(mrb, me, mrb_intern_lit(mrb, "_klass"), mrb_obj_value(mrb_class(mrb, self)));
+
+  return mrb_obj_value(me);
+}
+
+static mrb_value
+mrb_module_instance_method(mrb_state *mrb, mrb_value self)
+{
+  struct RClass *owner;
+  struct RProc *proc;
+  struct RObject *ume;
+  mrb_sym name;
+
+  mrb_get_args(mrb, "n", &name);
+
+  mrb_search_method_owner(mrb, mrb_class_ptr(self), self, name, &owner, &proc, TRUE);
+
+  ume = method_object_alloc(mrb, mrb_class_get(mrb, "UnboundMethod"));
+  mrb_obj_iv_set(mrb, ume, mrb_intern_lit(mrb, "_owner"), mrb_obj_value(owner));
+  mrb_obj_iv_set(mrb, ume, mrb_intern_lit(mrb, "_recv"), mrb_nil_value());
+  mrb_obj_iv_set(mrb, ume, mrb_intern_lit(mrb, "_name"), mrb_symbol_value(name));
+  mrb_obj_iv_set(mrb, ume, mrb_intern_lit(mrb, "_proc"), proc ? mrb_obj_value(proc) : mrb_nil_value());
+  mrb_obj_iv_set(mrb, ume, mrb_intern_lit(mrb, "_klass"), self);
+
+  return mrb_obj_value(ume);
+}
+
+static mrb_value
+method_owner(mrb_state *mrb, mrb_value self)
+{
+  return mrb_iv_get(mrb, self, mrb_intern_lit(mrb, "_owner"));
+}
+
+static mrb_value
+method_receiver(mrb_state *mrb, mrb_value self)
+{
+  return mrb_iv_get(mrb, self, mrb_intern_lit(mrb, "_recv"));
+}
+
+static mrb_value
+method_name(mrb_state *mrb, mrb_value self)
+{
+  return mrb_iv_get(mrb, self, mrb_intern_lit(mrb, "_name"));
+}
+
+void
+mrb_mruby_method_gem_init(mrb_state* mrb)
+{
+  struct RClass *unbound_method = mrb_define_class(mrb, "UnboundMethod", mrb->object_class);
+  struct RClass *method = mrb_define_class(mrb, "Method", mrb->object_class);
+
+  mrb_undef_class_method(mrb, unbound_method, "new");
+  mrb_define_method(mrb, unbound_method, "bind", unbound_method_bind, MRB_ARGS_REQ(1));
+  mrb_define_method(mrb, unbound_method, "super_method", method_super_method, MRB_ARGS_NONE());
+  mrb_define_method(mrb, unbound_method, "==", method_eql, MRB_ARGS_REQ(1));
+  mrb_define_method(mrb, unbound_method, "eql?", method_eql, MRB_ARGS_REQ(1));
+  mrb_define_method(mrb, unbound_method, "to_s", method_to_s, MRB_ARGS_NONE());
+  mrb_define_method(mrb, unbound_method, "inspect", method_to_s, MRB_ARGS_NONE());
+  mrb_define_method(mrb, unbound_method, "arity", method_arity, MRB_ARGS_NONE());
+  mrb_define_method(mrb, unbound_method, "source_location", method_source_location, MRB_ARGS_NONE());
+  mrb_define_method(mrb, unbound_method, "parameters", method_parameters, MRB_ARGS_NONE());
+  mrb_define_method(mrb, unbound_method, "bind_call", method_bcall, MRB_ARGS_REQ(1)|MRB_ARGS_ANY());
+  mrb_define_method(mrb, unbound_method, "owner", method_owner, MRB_ARGS_NONE());
+  mrb_define_method(mrb, unbound_method, "name", method_name, MRB_ARGS_NONE());
+
+  mrb_undef_class_method(mrb, method, "new");
+  mrb_define_method(mrb, method, "==", method_eql, MRB_ARGS_REQ(1));
+  mrb_define_method(mrb, method, "eql?", method_eql, MRB_ARGS_REQ(1));
+  mrb_define_method(mrb, method, "to_s", method_to_s, MRB_ARGS_NONE());
+  mrb_define_method(mrb, method, "inspect", method_to_s, MRB_ARGS_NONE());
+  mrb_define_method(mrb, method, "call", method_call, MRB_ARGS_ANY());
+  mrb_define_method(mrb, method, "[]", method_call, MRB_ARGS_ANY());
+  mrb_define_method(mrb, method, "unbind", method_unbind, MRB_ARGS_NONE());
+  mrb_define_method(mrb, method, "super_method", method_super_method, MRB_ARGS_NONE());
+  mrb_define_method(mrb, method, "arity", method_arity, MRB_ARGS_NONE());
+  mrb_define_method(mrb, method, "source_location", method_source_location, MRB_ARGS_NONE());
+  mrb_define_method(mrb, method, "parameters", method_parameters, MRB_ARGS_NONE());
+  mrb_define_method(mrb, method, "owner", method_owner, MRB_ARGS_NONE());
+  mrb_define_method(mrb, method, "receiver", method_receiver, MRB_ARGS_NONE());
+  mrb_define_method(mrb, method, "name", method_name, MRB_ARGS_NONE());
+
+  mrb_define_method(mrb, mrb->kernel_module, "method", mrb_kernel_method, MRB_ARGS_REQ(1));
+
+  mrb_define_method(mrb, mrb->module_class, "instance_method", mrb_module_instance_method, MRB_ARGS_REQ(1));
+}
+
+void
+mrb_mruby_method_gem_final(mrb_state* mrb)
+{
+}
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-method/test/method.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-method/test/method.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-method/test/method.rb	(revision 439)
@@ -0,0 +1,451 @@
+class Base
+  def foo() :base end
+end
+
+class Derived < Base
+  def foo() :derived end
+end
+
+class Interpreter
+  attr_accessor :ret
+
+  def do_a() @ret += "there, "; end
+  def do_d() @ret += "Hello ";  end
+  def do_e() @ret += "!\n";     end
+  def do_v() @ret += "Dave";    end
+  Dispatcher = {
+    "a" => instance_method(:do_a),
+    "d" => instance_method(:do_d),
+    "e" => instance_method(:do_e),
+    "v" => instance_method(:do_v)
+  }
+  def interpret(string)
+    @ret = ""
+    string.split("").each {|b| Dispatcher[b].bind(self).call }
+  end
+end
+
+assert 'demo' do
+  interpreter = Interpreter.new
+  interpreter.interpret('dave')
+  assert_equal "Hello there, Dave!\n", interpreter.ret
+end
+
+assert 'Method#arity' do
+  Class.new {
+    attr_accessor :done
+    def initialize; @done = false; end
+    def m0() end
+    def m1(a) end
+    def m2(a, b) end
+    def mo1(a = nil, &b) end
+    def mo2(a, b = nil) end
+    def mo3(*a) end
+    def mo4(a, *b, &c) end
+    def mo5(a, *b, c) end
+    def mo6(a, *b, c, &d) end
+    def mo7(a, b = nil, *c, d, &e) end
+    def ma1((a), &b) nil && a end
+
+    def run
+      assert_equal(0, method(:m0).arity)
+      assert_equal(1, method(:m1).arity)
+      assert_equal(2, method(:m2).arity)
+      assert_equal(-1, method(:mo1).arity)
+      assert_equal(-2, method(:mo2).arity)
+      assert_equal(-1, method(:mo3).arity)
+      assert_equal(-2, method(:mo4).arity)
+      assert_equal(-3, method(:mo5).arity)
+      assert_equal(-3, method(:mo6).arity)
+      assert_equal(-3, method(:mo7).arity)
+      assert_equal(1, method(:ma1).arity)
+
+      assert_equal(-1, method(:__send__).arity)
+      assert_equal(-1, method(:nothing).arity)
+    end
+
+    def respond_to_missing?(m, b)
+      m == :nothing
+    end
+  }.new.run
+end
+
+assert 'Method and UnboundMethod should not be have a `new` method' do
+  assert_raise(NoMethodError){ Method.new }
+  assert_raise(NoMethodError){ UnboundMethod.new }
+end
+
+assert 'instance' do
+  assert_kind_of Method, 1.method(:+)
+  assert_kind_of UnboundMethod, Fixnum.instance_method(:+)
+end
+
+assert 'Method#call' do
+  assert_equal 3, 1.method(:+).call(2)
+  assert_equal "ab", "a".method(:+)["b"]
+  klass = Class.new {
+    def foo; 42; end
+  }
+  klass2 = Class.new(klass) {
+    def foo; super; end
+  }
+  assert_equal 42, klass2.new.method(:foo).call
+
+  i = Class.new {
+   def bar
+     yield 3
+   end
+  }.new
+  assert_raise(LocalJumpError) { i.method(:bar).call }
+  assert_equal 3, i.method(:bar).call { |i| i }
+end
+
+assert 'Method#call for regression' do
+  obj = BasicObject.new
+  assert_equal String, Kernel.instance_method(:inspect).bind(obj).call().class, "https://github.com/ksss/mruby-method/issues/4"
+end
+
+assert 'Method#call with undefined method' do
+  c = Class.new {
+    attr_accessor :m, :argv
+    def respond_to_missing?(m, b)
+      m == :foo
+    end
+
+    def method_missing(m, *argv)
+      @m = m
+      @argv = argv
+      super
+    end
+  }
+  cc = c.new
+  assert_raise(NameError) { cc.method(:nothing) }
+  assert_kind_of Method, cc.method(:foo)
+  assert_raise(NoMethodError) { cc.method(:foo).call(:arg1, :arg2) }
+  assert_equal :foo, cc.m
+  assert_equal [:arg1, :arg2], cc.argv
+
+  cc = c.new
+  m = cc.method(:foo)
+  c.class_eval do
+    def foo
+      :ng
+    end
+  end
+  assert_raise(NoMethodError) { m.call(:arg1, :arg2) }
+end
+
+assert 'Method#source_location' do
+  skip if proc{}.source_location.nil?
+
+  filename = __FILE__
+  klass = Class.new
+
+  lineno = __LINE__ + 1
+  klass.define_method(:find_me_if_you_can) {}
+  assert_equal [filename, lineno], klass.new.method(:find_me_if_you_can).source_location
+
+  lineno = __LINE__ + 1
+  class <<klass; define_method(:s_find_me_if_you_can) {}; end
+  assert_equal [filename, lineno], klass.method(:s_find_me_if_you_can).source_location
+
+  klass = Class.new { def respond_to_missing?(m, b); m == :nothing; end }
+  assert_nil klass.new.method(:nothing).source_location
+end
+
+assert 'UnboundMethod#source_location' do
+  skip if proc{}.source_location.nil?
+
+  filename = __FILE__
+  klass = Class.new {
+    def respond_to_missing?(m, b)
+      m == :nothing
+    end
+  }
+
+  lineno = __LINE__ + 1
+  klass.define_method(:find_me_if_you_can) {}
+  assert_equal [filename, lineno], klass.instance_method(:find_me_if_you_can).source_location
+  assert_nil klass.new.method(:nothing).unbind.source_location
+end
+
+assert 'Method#parameters' do
+  klass = Class.new {
+    def foo(a, b=nil, *c) end
+    def respond_to_missing?(m, b)
+      m == :missing
+    end
+  }
+  assert_equal [[:req, :a], [:opt, :b], [:rest, :c]], klass.new.method(:foo).parameters
+  assert_equal [[:rest]], klass.new.method(:missing).parameters
+end
+
+assert 'UnboundMethod#parameters' do
+  klass = Class.new {
+    def foo(a, b=nil, *c) end
+    def respond_to_missing?(m, b)
+      m == :nothing
+    end
+  }
+  assert_equal [[:req, :a], [:opt, :b], [:rest, :c]], klass.instance_method(:foo).parameters
+  assert_equal [[:rest]], klass.new.method(:nothing).unbind.parameters
+end
+
+assert 'Method#to_proc' do
+  m = 3.method(:+)
+  assert_kind_of Proc, m.to_proc
+  assert_equal 7, m.call(4)
+
+  o = Object.new
+  def o.foo(a, b=nil, *c)
+    [a, b, c]
+  end
+  assert_equal [:bar, nil, []], o.method(:foo).to_proc.call(:bar)
+#  We can fix this issue but leave until the problem
+#  assert_equal o.method(:foo).arity, o.method(:foo).to_proc.arity
+
+  def o.bar
+    yield 39
+  end
+  assert_equal 42, o.bar(&3.method(:+))
+end
+
+assert 'to_s' do
+  o = Object.new
+  def o.foo; end
+  m = o.method(:foo)
+  assert_equal("#<UnboundMethod: #{ class << o; self; end.inspect }#foo>", m.unbind.inspect)
+
+  c = Class.new
+  c.class_eval { def foo; end; }
+  m = c.new.method(:foo)
+  assert_equal("#<Method: #{ c.inspect }#foo>", m.inspect)
+  m = c.instance_method(:foo)
+  assert_equal("#<UnboundMethod: #{ c.inspect }#foo>", m.inspect)
+end
+
+assert 'owner' do
+  c = Class.new do
+    def foo; end
+    def self.bar; end
+  end
+  m = Module.new do
+    def baz; end
+  end
+  c.include(m)
+  c2 = Class.new(c)
+
+  assert_equal(c, c.instance_method(:foo).owner)
+  assert_equal(c, c2.instance_method(:foo).owner)
+
+  assert_equal(c, c.new.method(:foo).owner)
+  assert_equal(c, c2.new.method(:foo).owner)
+  assert_equal((class <<c; self; end), c2.method(:bar).owner)
+end
+
+assert 'owner missing' do
+  c = Class.new do
+    def respond_to_missing?(name, bool)
+      name == :foo
+    end
+  end
+  c2 = Class.new(c)
+  assert_equal(c, c.new.method(:foo).owner)
+  assert_equal(c2, c2.new.method(:foo).owner)
+end
+
+assert 'receiver name owner' do
+  o = Object.new
+  def o.foo; end
+  m = o.method(:foo)
+  assert_equal(o, m.receiver)
+  assert_equal(:foo, m.name)
+  assert_equal(class << o; self; end, m.owner)
+  assert_equal(:foo, m.unbind.name)
+  assert_equal(class << o; self; end, m.unbind.owner)
+end
+
+assert 'Method#unbind' do
+  assert_equal(:derived, Derived.new.foo)
+  um = Derived.new.method(:foo).unbind
+  assert_kind_of(UnboundMethod, um)
+  Derived.class_eval do
+    def foo() :changed end
+  end
+  assert_equal(:changed, Derived.new.foo)
+  assert_equal(:changed, Derived.new.foo{})
+  assert_equal(:derived, um.bind(Derived.new).call)
+  assert_raise(TypeError) do
+    um.bind(Base.new)
+  end
+
+  # TODO:
+  #  Block passed method not handled correctly with workaround.
+  #  See comment near `mrb_funcall_with_block` for detail.
+  # assert_equal(:derived, um.bind(Derived.new).call{})
+end
+
+assert 'Kernel#method' do
+  c1 = Class.new {
+    def foo; :foo; end
+  }
+  o = c1.new
+  assert_kind_of Method, o.method(:foo)
+  assert_kind_of Method, o.method('foo')
+  assert_raise(TypeError) { o.method(nil) }
+  assert_raise(NameError) { o.method('bar') }
+  assert_raise(NameError) { o.method(:bar) }
+end
+
+assert "Module#instance_method" do
+  assert_kind_of UnboundMethod, Object.instance_method(:object_id)
+  assert_raise(NameError) { Object.instance_method(:nothing) }
+  c = Class.new {
+    def respond_to_missing?(m, b)
+      false
+    end
+  }
+  assert_raise(NameError) { c.instance_method(:nothing) }
+end
+
+assert 'Kernel#singleton_method' do
+  c1 = Class.new {
+    def foo; :foo; end
+  }
+  o = c1.new
+  def o.bar; :bar; end
+  assert_kind_of Method, o.method(:foo)
+  assert_raise(NameError) { o.singleton_method(:foo) }
+  assert_kind_of Method, o.singleton_method(:bar)
+  assert_raise(TypeError) { o.singleton_method(nil) }
+  m = assert_nothing_raised(NameError) { break o.singleton_method(:bar) }
+  assert_equal(:bar, m.call)
+end
+
+assert 'Method#super_method' do
+  o = Derived.new
+  m = o.method(:foo).super_method
+  assert_equal(Base, m.owner)
+  assert_true(o.equal? m.receiver)
+  assert_equal(:foo, m.name)
+  assert_nil(m.super_method)
+
+  c = Class.new {
+    def foo; end
+  }
+  o = c.new
+  o.extend Module.new {
+    def foo; end
+  }
+  assert_equal c, o.method(:foo).super_method.owner
+  assert_equal :foo, o.method(:foo).super_method.name
+  assert_equal o, o.method(:foo).super_method.receiver
+end
+
+assert 'Method#==' do
+  o = Object.new
+  class << o
+    def foo; end
+  end
+  assert_not_equal(o.method(:foo), nil)
+  m = o.method(:foo)
+  def m.foo; end
+  # TODO: assert_not_equal(o.method(:foo), m)
+  assert_equal(o.method(:foo), o.method(:foo))
+  # TODO: assert_false(o.method(:foo).eql? m)
+  assert_true(o.method(:foo).eql? o.method(:foo))
+
+  assert_false(0.method(:+) == 1.method(:+))
+  assert_false(0.method(:+) == 0.method(:-))
+  a = 0.method(:+)
+  assert_true(a.method(:==) == a.method(:eql?))
+end
+
+assert "Method#initialize_copy" do
+  c = Class.new {
+    def foo
+    end
+  }.new
+  m1 = c.method(:foo)
+  m2 = m1.clone
+  assert_equal(m1, m2)
+end
+
+assert "Method#<< and Method#>>" do
+  obj = Object.new
+  class << obj
+    def mul2(n); n * 2; end
+    def add3(n); n + 3; end
+  end
+
+  f = obj.method(:mul2)
+  g = obj.method(:add3)
+
+  m1 = f << g
+  assert_kind_of Proc, m1
+  assert_equal 16, m1.call(5)
+
+  m2 = f >> g
+  assert_kind_of Proc, m2
+  assert_equal 13, m2.call(5)
+end
+
+assert 'UnboundMethod#arity' do
+  c = Class.new {
+    def foo(a, b)
+    end
+
+    def respond_to_missing?(m, b)
+      m == :nothing
+    end
+  }
+  assert_equal 2, c.instance_method(:foo).arity
+  assert_equal(-1, c.new.method(:nothing).unbind.arity)
+end
+
+assert 'UnboundMethod#==' do
+  assert_false(Fixnum.instance_method(:+) == Fixnum.instance_method(:-))
+  assert_true(Fixnum.instance_method(:+) == Fixnum.instance_method(:+))
+  assert_false(Fixnum.instance_method(:+) == Float.instance_method(:+))
+  assert_true(UnboundMethod.instance_method(:==) == UnboundMethod.instance_method(:eql?))
+end
+
+assert 'UnboundMethod#super_method' do
+  m = Derived.instance_method(:foo)
+  m = m.super_method
+  assert_equal(Base.instance_method(:foo), m)
+  assert_nil(m.super_method)
+
+  m = Object.instance_method(:object_id)
+  assert_nil(m.super_method)
+end
+
+assert 'UnboundMethod#bind' do
+  m = Module.new{ def meth() :meth end }.instance_method(:meth)
+  assert_raise(ArgumentError) { m.bind }
+  assert_kind_of Method, m.bind(1)
+  assert_kind_of Method, m.bind(:sym)
+  assert_kind_of Method, m.bind(Object.new)
+  assert_equal(:meth, m.bind(1).call)
+  assert_equal(:meth, m.bind(:sym).call)
+  assert_equal(:meth, m.bind(Object.new).call)
+  sc = nil
+  Class.new {
+    sc = class << self
+      def foo
+      end
+      self
+    end
+  }
+  assert_raise(TypeError) { sc.instance_method(:foo).bind([]) }
+  assert_raise(TypeError) { Array.instance_method(:each).bind(1) }
+  assert_kind_of Method, Object.instance_method(:object_id).bind(Object.new)
+end
+
+assert 'UnboundMethod#bind_call' do
+  m = Array.instance_method(:size)
+  assert_equal(:size, m.name)
+  assert_equal(0, m.bind_call([]))
+  assert_equal(1, m.bind_call([1]))
+  assert_equal(2, m.bind_call([1,2]))
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-numeric-ext/mrbgem.rake
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-numeric-ext/mrbgem.rake	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-numeric-ext/mrbgem.rake	(revision 439)
@@ -0,0 +1,5 @@
+MRuby::Gem::Specification.new('mruby-numeric-ext') do |spec|
+  spec.license = 'MIT'
+  spec.author  = 'mruby developers'
+  spec.summary = 'Numeric class extension'
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-numeric-ext/mrblib/numeric_ext.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-numeric-ext/mrblib/numeric_ext.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-numeric-ext/mrblib/numeric_ext.rb	(revision 439)
@@ -0,0 +1,21 @@
+class Numeric
+  def zero?
+    self == 0
+  end
+
+  def nonzero?
+    if self == 0
+      nil
+    else
+      self
+    end
+  end
+
+  def positive?
+    self > 0
+  end
+
+  def negative?
+    self < 0
+  end
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-numeric-ext/src/numeric_ext.c
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-numeric-ext/src/numeric_ext.c	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-numeric-ext/src/numeric_ext.c	(revision 439)
@@ -0,0 +1,79 @@
+#include <limits.h>
+#include <mruby.h>
+#include <mruby/numeric.h>
+
+/*
+ *  call-seq:
+ *     int.allbits?(mask)  ->  true or false
+ *
+ *  Returns +true+ if all bits of <code>+int+ & +mask+</code> are 1.
+ */
+static mrb_value
+mrb_int_allbits(mrb_state *mrb, mrb_value self)
+{
+  mrb_int n, m;
+
+  mrb_get_args(mrb, "i", &m);
+  n = mrb_int(mrb, self);
+  return mrb_bool_value((n & m) == m);
+}
+
+/*
+ *  call-seq:
+ *     int.anybits?(mask)  ->  true or false
+ *
+ *  Returns +true+ if any bits of <code>+int+ & +mask+</code> are 1.
+ */
+static mrb_value
+mrb_int_anybits(mrb_state *mrb, mrb_value self)
+{
+  mrb_int n, m;
+
+  mrb_get_args(mrb, "i", &m);
+  n = mrb_int(mrb, self);
+  return mrb_bool_value((n & m) != 0);
+}
+
+/*
+ *  call-seq:
+ *     int.nobits?(mask)  ->  true or false
+ *
+ *  Returns +true+ if no bits of <code>+int+ & +mask+</code> are 1.
+ */
+static mrb_value
+mrb_int_nobits(mrb_state *mrb, mrb_value self)
+{
+  mrb_int n, m;
+
+  mrb_get_args(mrb, "i", &m);
+  n = mrb_int(mrb, self);
+  return mrb_bool_value((n & m) == 0);
+}
+
+void
+mrb_mruby_numeric_ext_gem_init(mrb_state* mrb)
+{
+  struct RClass *i = mrb_module_get(mrb, "Integral");
+
+  mrb_define_method(mrb, i, "allbits?", mrb_int_allbits, MRB_ARGS_REQ(1));
+  mrb_define_method(mrb, i, "anybits?", mrb_int_anybits, MRB_ARGS_REQ(1));
+  mrb_define_method(mrb, i, "nobits?", mrb_int_nobits, MRB_ARGS_REQ(1));
+
+#ifndef MRB_WITHOUT_FLOAT
+  mrb_define_const(mrb, mrb->float_class, "RADIX",        mrb_fixnum_value(MRB_FLT_RADIX));
+  mrb_define_const(mrb, mrb->float_class, "MANT_DIG",     mrb_fixnum_value(MRB_FLT_MANT_DIG));
+  mrb_define_const(mrb, mrb->float_class, "EPSILON",      mrb_float_value(mrb, MRB_FLT_EPSILON));
+  mrb_define_const(mrb, mrb->float_class, "DIG",          mrb_fixnum_value(MRB_FLT_DIG));
+  mrb_define_const(mrb, mrb->float_class, "MIN_EXP",      mrb_fixnum_value(MRB_FLT_MIN_EXP));
+  mrb_define_const(mrb, mrb->float_class, "MIN",          mrb_float_value(mrb, MRB_FLT_MIN));
+  mrb_define_const(mrb, mrb->float_class, "MIN_10_EXP",   mrb_fixnum_value(MRB_FLT_MIN_10_EXP));
+  mrb_define_const(mrb, mrb->float_class, "MAX_EXP",      mrb_fixnum_value(MRB_FLT_MAX_EXP));
+  mrb_define_const(mrb, mrb->float_class, "MAX",          mrb_float_value(mrb, MRB_FLT_MAX));
+  mrb_define_const(mrb, mrb->float_class, "MAX_10_EXP",   mrb_fixnum_value(MRB_FLT_MAX_10_EXP));
+#endif /* MRB_WITHOUT_FLOAT */
+}
+
+void
+mrb_mruby_numeric_ext_gem_final(mrb_state* mrb)
+{
+}
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-numeric-ext/test/numeric.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-numeric-ext/test/numeric.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-numeric-ext/test/numeric.rb	(revision 439)
@@ -0,0 +1,21 @@
+##
+# Numeric(Ext) Test
+
+assert('Integer#div') do
+  assert_equal 52, 365.div(7)
+end
+
+assert('Float#div') do
+  skip unless Object.const_defined?(:Float)
+  assert_float 52, 365.2425.div(7)
+end
+
+assert('Integer#zero?') do
+  assert_equal true, 0.zero?
+  assert_equal false, 1.zero?
+end
+
+assert('Integer#nonzero?') do
+  assert_equal nil, 0.nonzero?
+  assert_equal 1000, 1000.nonzero?
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-object-ext/mrbgem.rake
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-object-ext/mrbgem.rake	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-object-ext/mrbgem.rake	(revision 439)
@@ -0,0 +1,5 @@
+MRuby::Gem::Specification.new('mruby-object-ext') do |spec|
+  spec.license = 'MIT'
+  spec.author  = 'mruby developers'
+  spec.summary = 'extensional methods shared by all objects'
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-object-ext/mrblib/object.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-object-ext/mrblib/object.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-object-ext/mrblib/object.rb	(revision 439)
@@ -0,0 +1,33 @@
+module Kernel
+  # call-seq:
+  #   obj.yield_self {|_obj|...} -> an_object
+  #   obj.then {|_obj|...}       -> an_object
+  #
+  # Yields <i>obj</i> and returns the result.
+  #
+  #   'my string'.yield_self {|s|s.upcase} #=> "MY STRING"
+  #
+  def yield_self(&block)
+    return to_enum :yield_self unless block
+    block.call(self)
+  end
+  alias then yield_self
+
+  ##
+  #  call-seq:
+  #     obj.tap{|x|...}    -> obj
+  #
+  #  Yields <code>x</code> to the block, and then returns <code>x</code>.
+  #  The primary purpose of this method is to "tap into" a method chain,
+  #  in order to perform operations on intermediate results within the chain.
+  #
+  #  (1..10)                .tap {|x| puts "original: #{x.inspect}"}
+  #    .to_a                .tap {|x| puts "array: #{x.inspect}"}
+  #    .select {|x| x%2==0} .tap {|x| puts "evens: #{x.inspect}"}
+  #    .map { |x| x*x }     .tap {|x| puts "squares: #{x.inspect}"}
+  #
+  def tap
+    yield self
+    self
+  end
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-object-ext/src/object.c
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-object-ext/src/object.c	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-object-ext/src/object.c	(revision 439)
@@ -0,0 +1,141 @@
+#include <mruby.h>
+#include <mruby/array.h>
+#include <mruby/class.h>
+#include <mruby/hash.h>
+#include <mruby/proc.h>
+
+/*
+ *  call-seq:
+ *     nil.to_a    -> []
+ *
+ *  Always returns an empty array.
+ */
+
+static mrb_value
+nil_to_a(mrb_state *mrb, mrb_value obj)
+{
+  return mrb_ary_new(mrb);
+}
+
+#ifndef MRB_WITHOUT_FLOAT
+/*
+ *  call-seq:
+ *     nil.to_f    -> 0.0
+ *
+ *  Always returns zero.
+ */
+
+static mrb_value
+nil_to_f(mrb_state *mrb, mrb_value obj)
+{
+  return mrb_float_value(mrb, 0.0);
+}
+#endif
+
+/*
+ *  call-seq:
+ *     nil.to_h    -> {}
+ *
+ *  Always returns an empty hash.
+ */
+
+static mrb_value
+nil_to_h(mrb_state *mrb, mrb_value obj)
+{
+  return mrb_hash_new(mrb);
+}
+
+/*
+ *  call-seq:
+ *     nil.to_i    -> 0
+ *
+ *  Always returns zero.
+ */
+
+static mrb_value
+nil_to_i(mrb_state *mrb, mrb_value obj)
+{
+  return mrb_fixnum_value(0);
+}
+
+/*
+ *  call-seq:
+ *     obj.itself -> an_object
+ *
+ *  Returns <i>obj</i>.
+ *
+ *      string = 'my string' #=> "my string"
+ *      string.itself.object_id == string.object_id #=> true
+ *
+ */
+static mrb_value
+mrb_f_itself(mrb_state *mrb, mrb_value self)
+{
+  return self;
+}
+
+/*
+ *  call-seq:
+ *     obj.instance_exec(arg...) {|var...| block }                       -> obj
+ *
+ *  Executes the given block within the context of the receiver
+ *  (_obj_). In order to set the context, the variable +self+ is set
+ *  to _obj_ while the code is executing, giving the code access to
+ *  _obj_'s instance variables.  Arguments are passed as block parameters.
+ *
+ *     class KlassWithSecret
+ *       def initialize
+ *         @secret = 99
+ *       end
+ *     end
+ *     k = KlassWithSecret.new
+ *     k.instance_exec(5) {|x| @secret+x }   #=> 104
+ */
+
+static mrb_value
+mrb_obj_instance_exec(mrb_state *mrb, mrb_value self)
+{
+  const mrb_value *argv;
+  mrb_int argc;
+  mrb_value blk;
+  struct RClass *c;
+
+  mrb_get_args(mrb, "*&!", &argv, &argc, &blk);
+
+  switch (mrb_type(self)) {
+  case MRB_TT_SYMBOL:
+  case MRB_TT_FIXNUM:
+#ifndef MRB_WITHOUT_FLOAT
+  case MRB_TT_FLOAT:
+#endif
+    c = NULL;
+    break;
+  default:
+    c = mrb_class_ptr(mrb_singleton_class(mrb, self));
+    break;
+  }
+  mrb->c->ci->target_class = c;
+  return mrb_yield_cont(mrb, blk, self, argc, argv);
+}
+
+void
+mrb_mruby_object_ext_gem_init(mrb_state* mrb)
+{
+  struct RClass * n = mrb->nil_class;
+
+  mrb_define_method(mrb, n, "to_a", nil_to_a,       MRB_ARGS_NONE());
+#ifndef MRB_WITHOUT_FLOAT
+  mrb_define_method(mrb, n, "to_f", nil_to_f,       MRB_ARGS_NONE());
+#endif
+  mrb_define_method(mrb, n, "to_h", nil_to_h,       MRB_ARGS_NONE());
+  mrb_define_method(mrb, n, "to_i", nil_to_i,       MRB_ARGS_NONE());
+
+  mrb_define_method(mrb, mrb->kernel_module, "itself", mrb_f_itself, MRB_ARGS_NONE());
+
+  mrb_define_method(mrb, mrb_class_get(mrb, "BasicObject"), "instance_exec", mrb_obj_instance_exec, MRB_ARGS_ANY() | MRB_ARGS_BLOCK());
+}
+
+void
+mrb_mruby_object_ext_gem_final(mrb_state* mrb)
+{
+}
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-object-ext/test/nil.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-object-ext/test/nil.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-object-ext/test/nil.rb	(revision 439)
@@ -0,0 +1,16 @@
+assert('NilClass#to_a') do
+  assert_equal [], nil.to_a
+end
+
+assert('NilClass#to_f') do
+  skip unless Object.const_defined?(:Float)
+  assert_equal 0.0, nil.to_f
+end
+
+assert('NilClass#to_h') do
+  assert_equal Hash.new, nil.to_h
+end
+
+assert('NilClass#to_i') do
+  assert_equal 0, nil.to_i
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-object-ext/test/object.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-object-ext/test/object.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-object-ext/test/object.rb	(revision 439)
@@ -0,0 +1,53 @@
+assert('Object#instance_exec') do
+  class KlassWithSecret
+    def initialize
+      @secret = 99
+    end
+  end
+  k = KlassWithSecret.new
+  assert_equal 104, k.instance_exec(5) {|x| @secret+x }
+end
+
+assert('Object#tap') do
+  ret = []
+  (1..10)                 .tap {|x| ret << "original: #{x.inspect}"}
+     .to_a                .tap {|x| ret << "array: #{x.inspect}"}
+     .select {|x| x%2==0} .tap {|x| ret << "evens: #{x.inspect}"}
+     .map { |x| x*x }     .tap {|x| ret << "squares: #{x.inspect}"}
+
+  assert_equal [
+    "original: 1..10",
+    "array: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]",
+    "evens: [2, 4, 6, 8, 10]",
+    "squares: [4, 16, 36, 64, 100]"
+  ], ret
+  assert_equal(:tap_ok, Class.new {def m; tap{return :tap_ok}; end}.new.m)
+end
+
+assert('instance_exec on primitives with class and module definition') do
+  begin
+    class A
+      1.instance_exec do
+        class B
+        end
+      end
+    end
+
+    assert_kind_of Class, A::B
+  ensure
+    Object.remove_const :A
+  end
+
+  begin
+    class A
+      1.instance_exec do
+        module B
+        end
+      end
+    end
+
+    assert_kind_of Module, A::B
+  ensure
+    Object.remove_const :A
+  end
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-objectspace/mrbgem.rake
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-objectspace/mrbgem.rake	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-objectspace/mrbgem.rake	(revision 439)
@@ -0,0 +1,5 @@
+MRuby::Gem::Specification.new('mruby-objectspace') do |spec|
+  spec.license = 'MIT'
+  spec.author  = 'mruby developers'
+  spec.summary = 'ObjectSpace class'
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-objectspace/src/mruby_objectspace.c
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-objectspace/src/mruby_objectspace.c	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-objectspace/src/mruby_objectspace.c	(revision 439)
@@ -0,0 +1,183 @@
+#include <mruby.h>
+#include <mruby/gc.h>
+#include <mruby/hash.h>
+#include <mruby/class.h>
+
+struct os_count_struct {
+  mrb_int total;
+  mrb_int freed;
+  mrb_int counts[MRB_TT_MAXDEFINE+1];
+};
+
+static int
+os_count_object_type(mrb_state *mrb, struct RBasic *obj, void *data)
+{
+  struct os_count_struct *obj_count;
+  obj_count = (struct os_count_struct*)data;
+
+  obj_count->total++;
+
+  if (mrb_object_dead_p(mrb, obj)) {
+    obj_count->freed++;
+  }
+  else {
+    obj_count->counts[obj->tt]++;
+  }
+  return MRB_EACH_OBJ_OK;
+}
+
+/*
+ *  call-seq:
+ *     ObjectSpace.count_objects([result_hash]) -> hash
+ *
+ *  Counts objects for each type.
+ *
+ *  It returns a hash, such as:
+ *  {
+ *    :TOTAL=>10000,
+ *    :FREE=>3011,
+ *    :T_OBJECT=>6,
+ *    :T_CLASS=>404,
+ *    # ...
+ *  }
+ *
+ *  If the optional argument +result_hash+ is given,
+ *  it is overwritten and returned. This is intended to avoid probe effect.
+ *
+ */
+
+static mrb_value
+os_count_objects(mrb_state *mrb, mrb_value self)
+{
+  struct os_count_struct obj_count = { 0 };
+  mrb_int i;
+  mrb_value hash;
+
+  if (mrb_get_args(mrb, "|H", &hash) == 0) {
+    hash = mrb_hash_new(mrb);
+  }
+
+  if (!mrb_hash_empty_p(mrb, hash)) {
+    mrb_hash_clear(mrb, hash);
+  }
+
+  mrb_objspace_each_objects(mrb, os_count_object_type, &obj_count);
+
+  mrb_hash_set(mrb, hash, mrb_symbol_value(mrb_intern_lit(mrb, "TOTAL")), mrb_fixnum_value(obj_count.total));
+  mrb_hash_set(mrb, hash, mrb_symbol_value(mrb_intern_lit(mrb, "FREE")), mrb_fixnum_value(obj_count.freed));
+
+  for (i = MRB_TT_FALSE; i < MRB_TT_MAXDEFINE; i++) {
+    mrb_value type;
+    switch (i) {
+#define COUNT_TYPE(t) case (MRB_T ## t): type = mrb_symbol_value(mrb_intern_lit(mrb, #t)); break;
+      COUNT_TYPE(T_FALSE);
+      COUNT_TYPE(T_FREE);
+      COUNT_TYPE(T_TRUE);
+      COUNT_TYPE(T_FIXNUM);
+      COUNT_TYPE(T_SYMBOL);
+      COUNT_TYPE(T_UNDEF);
+      COUNT_TYPE(T_FLOAT);
+      COUNT_TYPE(T_CPTR);
+      COUNT_TYPE(T_OBJECT);
+      COUNT_TYPE(T_CLASS);
+      COUNT_TYPE(T_MODULE);
+      COUNT_TYPE(T_ICLASS);
+      COUNT_TYPE(T_SCLASS);
+      COUNT_TYPE(T_PROC);
+      COUNT_TYPE(T_ARRAY);
+      COUNT_TYPE(T_HASH);
+      COUNT_TYPE(T_STRING);
+      COUNT_TYPE(T_RANGE);
+      COUNT_TYPE(T_EXCEPTION);
+      COUNT_TYPE(T_FILE);
+      COUNT_TYPE(T_ENV);
+      COUNT_TYPE(T_DATA);
+      COUNT_TYPE(T_FIBER);
+#undef COUNT_TYPE
+    default:
+      type = mrb_fixnum_value(i); break;
+    }
+    if (obj_count.counts[i])
+      mrb_hash_set(mrb, hash, type, mrb_fixnum_value(obj_count.counts[i]));
+  }
+
+  return hash;
+}
+
+struct os_each_object_data {
+  mrb_value block;
+  struct RClass *target_module;
+  mrb_int count;
+};
+
+static int
+os_each_object_cb(mrb_state *mrb, struct RBasic *obj, void *ud)
+{
+  struct os_each_object_data *d = (struct os_each_object_data*)ud;
+
+  /* filter dead objects */
+  if (mrb_object_dead_p(mrb, obj)) {
+    return MRB_EACH_OBJ_OK;
+  }
+
+  /* filter internal objects */
+  switch (obj->tt) {
+  case MRB_TT_ENV:
+  case MRB_TT_ICLASS:
+    return MRB_EACH_OBJ_OK;
+  default:
+    break;
+  }
+
+  /* filter half baked (or internal) objects */
+  if (!obj->c) return MRB_EACH_OBJ_OK;
+
+  /* filter class kind if target module defined */
+  if (d->target_module && !mrb_obj_is_kind_of(mrb, mrb_obj_value(obj), d->target_module)) {
+    return MRB_EACH_OBJ_OK;
+  }
+
+  mrb_yield(mrb, d->block, mrb_obj_value(obj));
+  ++d->count;
+  return MRB_EACH_OBJ_OK;
+}
+
+/*
+ *  call-seq:
+ *     ObjectSpace.each_object([module]) {|obj| ... } -> fixnum
+ *
+ *  Calls the block once for each object in this Ruby process.
+ *  Returns the number of objects found.
+ *  If the optional argument +module+ is given,
+ *  calls the block for only those classes or modules
+ *  that match (or are a subclass of) +module+.
+ *
+ *  If no block is given, ArgumentError is raised.
+ *
+ */
+
+static mrb_value
+os_each_object(mrb_state *mrb, mrb_value self)
+{
+  mrb_value cls = mrb_nil_value();
+  struct os_each_object_data d;
+  mrb_get_args(mrb, "&!|C", &d.block, &cls);
+
+  d.target_module = mrb_nil_p(cls) ? NULL : mrb_class_ptr(cls);
+  d.count = 0;
+  mrb_objspace_each_objects(mrb, os_each_object_cb, &d);
+  return mrb_fixnum_value(d.count);
+}
+
+void
+mrb_mruby_objectspace_gem_init(mrb_state *mrb)
+{
+  struct RClass *os = mrb_define_module(mrb, "ObjectSpace");
+  mrb_define_class_method(mrb, os, "count_objects", os_count_objects, MRB_ARGS_OPT(1));
+  mrb_define_class_method(mrb, os, "each_object", os_each_object, MRB_ARGS_OPT(1));
+}
+
+void
+mrb_mruby_objectspace_gem_final(mrb_state *mrb)
+{
+}
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-objectspace/test/objectspace.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-objectspace/test/objectspace.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-objectspace/test/objectspace.rb	(revision 439)
@@ -0,0 +1,60 @@
+assert('ObjectSpace.count_objects') do
+  h = {}
+  f = Fiber.new {} if Object.const_defined?(:Fiber)
+  ObjectSpace.count_objects(h)
+  assert_kind_of(Hash, h)
+  assert_true(h.keys.all? {|x| x.is_a?(Symbol) || x.is_a?(Integer) })
+  assert_true(h.values.all? {|x| x.is_a?(Integer) })
+
+  assert_true(h.has_key?(:TOTAL))
+  assert_true(h.has_key?(:FREE))
+  assert_true(h.has_key?(:T_FIBER)) if Object.const_defined? :Fiber
+
+  assert_equal(h[:TOTAL] * 2, h.values.reduce(:+))
+
+  h = ObjectSpace.count_objects
+  assert_kind_of(Hash, h)
+  assert_true(h.keys.all? {|x| x.is_a?(Symbol) || x.is_a?(Integer) })
+  assert_true(h.values.all? {|x| x.is_a?(Integer) })
+
+  assert_raise(TypeError) { ObjectSpace.count_objects(1) }
+
+  h0 = {:T_FOO=>1000}
+  h = ObjectSpace.count_objects(h0)
+  assert_false(h0.has_key?(:T_FOO))
+
+  GC.start
+  h_after = {}
+  h_before = ObjectSpace.count_objects
+
+  objs = []
+  1000.times do
+    objs << {}
+  end
+  ObjectSpace.count_objects(h)
+  objs = nil
+  GC.start
+  ObjectSpace.count_objects(h_after)
+
+  assert_equal(h[:T_HASH], h_before[:T_HASH] + 1000)
+  assert_equal(h_after[:T_HASH], h_before[:T_HASH])
+end
+
+assert('ObjectSpace.each_object') do
+  objs = []
+  objs_count = ObjectSpace.each_object { |obj|
+    objs << obj
+  }
+  assert_equal objs.length, objs_count
+
+  arys = []
+  arys_count = ObjectSpace.each_object(Array) { |obj|
+    arys << obj
+  }
+  assert_equal arys.length, arys_count
+  assert_true arys.length < objs.length
+end
+
+assert 'Check class pointer of ObjectSpace.each_object.' do
+  assert_nothing_raised { ObjectSpace.each_object { |obj| !obj } }
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-pack/README.md
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-pack/README.md	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-pack/README.md	(revision 439)
@@ -0,0 +1,71 @@
+mruby-pack (pack / unpack)
+=========
+
+mruby-pack provides `Array#pack` and `String#unpack` for mruby.
+
+
+## Installation
+Add the line below into your `build_config.rb`:
+
+```
+  conf.gem :github => 'iij/mruby-pack'
+```
+
+There is no dependency on other mrbgems.
+
+
+## Supported template string
+ - A : arbitrary binary string (space padded, count is width)
+ - a : arbitrary binary string (null padded, count is width)
+ - C : 8-bit unsigned (unsigned char)
+ - c : 8-bit signed (signed char)
+ - D, d: 64-bit float, native format
+ - E : 64-bit float, little endian byte order
+ - e : 32-bit float, little endian byte order
+ - F, f: 32-bit float, native format
+ - G : 64-bit float, network (big-endian) byte order
+ - g : 32-bit float, network (big-endian) byte order
+ - H : hex string (high nibble first)
+ - h : hex string (low nibble first)
+ - I : unsigned integer, native endian (`unsigned int` in C)
+ - i : signed integer, native endian (`int` in C)
+ - L : 32-bit unsigned, native endian (`uint32_t`)
+ - l : 32-bit signed, native endian (`int32_t`)
+ - m : base64 encoded string (see RFC 2045, count is width)
+ - N : 32-bit unsigned, network (big-endian) byte order
+ - n : 16-bit unsigned, network (big-endian) byte order
+ - Q : 64-bit unsigned, native endian (`uint64_t`)
+ - q : 64-bit signed, native endian (`int64_t`)
+ - S : 16-bit unsigned, native endian (`uint16_t`)
+ - s : 16-bit signed, native endian (`int16_t`)
+ - U : UTF-8 character
+ - V : 32-bit unsigned, VAX (little-endian) byte order
+ - v : 16-bit unsigned, VAX (little-endian) byte order
+ - x : null byte
+ - Z : same as "a", except that null is added with *
+
+
+
+## License
+
+Copyright (c) 2012 Internet Initiative Japan Inc.
+Copyright (c) 2017 mruby developers
+
+Permission is hereby granted, free of charge, to any person obtaining a 
+copy of this software and associated documentation files (the "Software"), 
+to deal in the Software without restriction, including without limitation 
+the rights to use, copy, modify, merge, publish, distribute, sublicense, 
+and/or sell copies of the Software, and to permit persons to whom the 
+Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in 
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+DEALINGS IN THE SOFTWARE.
+
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-pack/mrbgem.rake
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-pack/mrbgem.rake	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-pack/mrbgem.rake	(revision 439)
@@ -0,0 +1,7 @@
+MRuby::Gem::Specification.new('mruby-pack') do |spec|
+  spec.license = 'MIT'
+  spec.authors = ['Internet Initiative Japan Inc.', 'mruby developers']
+  spec.summary = 'Array#pack and String#unpack method'
+
+  spec.cc.include_paths << "#{build.root}/src"
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-pack/src/pack.c
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-pack/src/pack.c	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-pack/src/pack.c	(revision 439)
@@ -0,0 +1,1340 @@
+/*
+ ** pack.c - Array#pack, String#unpack
+ */
+
+#include <mruby.h>
+
+#ifdef MRB_DISABLE_STDIO
+# error pack/unpack conflicts 'MRB_DISABLE_STDIO' configuration in your 'build_config.rb'
+#endif
+
+#include "mruby/error.h"
+#include "mruby/array.h"
+#include "mruby/class.h"
+#include "mruby/numeric.h"
+#include "mruby/string.h"
+#include "mruby/variable.h"
+
+#include <ctype.h>
+#include <errno.h>
+#include <limits.h>
+#include <string.h>
+
+struct tmpl {
+  mrb_value str;
+  int idx;
+};
+
+enum {
+  PACK_DIR_CHAR,      /* C */
+  PACK_DIR_SHORT,     /* S */
+  PACK_DIR_LONG,      /* L */
+  PACK_DIR_QUAD,      /* Q */
+  //PACK_DIR_INT,     /* i */
+  //PACK_DIR_VAX,
+  PACK_DIR_UTF8,      /* U */
+  //PACK_DIR_BER,
+  PACK_DIR_DOUBLE,    /* E */
+  PACK_DIR_FLOAT,     /* f */
+  PACK_DIR_STR,       /* A */
+  PACK_DIR_HEX,       /* h */
+  PACK_DIR_BASE64,    /* m */
+  PACK_DIR_NUL,       /* x */
+  PACK_DIR_INVALID
+};
+
+enum {
+  PACK_TYPE_INTEGER,
+  PACK_TYPE_FLOAT,
+  PACK_TYPE_STRING,
+  PACK_TYPE_NONE
+};
+
+#define PACK_FLAG_s             0x00000001	/* native size ("_" "!") */
+#define PACK_FLAG_a             0x00000002	/* null padding ("a") */
+#define PACK_FLAG_Z             0x00000004	/* append nul char ("z") */
+#define PACK_FLAG_SIGNED        0x00000008	/* native size ("_" "!") */
+#define PACK_FLAG_GT            0x00000010	/* big endian (">") */
+#define PACK_FLAG_LT            0x00000020	/* little endian ("<") */
+#define PACK_FLAG_WIDTH         0x00000040	/* "count" is "width" */
+#define PACK_FLAG_LSB           0x00000080	/* LSB / low nibble first */
+#define PACK_FLAG_COUNT2        0x00000100	/* "count" is special... */
+#define PACK_FLAG_LITTLEENDIAN  0x00000200	/* little endian actually */
+
+#define PACK_BASE64_IGNORE	0xff
+#define PACK_BASE64_PADDING	0xfe
+
+const static unsigned char base64chars[] =
+    "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
+static unsigned char base64_dec_tab[128];
+
+#if !defined(BYTE_ORDER) && defined(__BYTE_ORDER__)
+# define BYTE_ORDER __BYTE_ORDER__
+#endif
+#if !defined(BIG_ENDIAN) && defined(__ORDER_BIG_ENDIAN__)
+# define BIG_ENDIAN __ORDER_BIG_ENDIAN__
+#endif
+#if !defined(LITTLE_ENDIAN) && defined(__ORDER_LITTLE_ENDIAN__)
+# define LITTLE_ENDIAN __ORDER_LITTLE_ENDIAN__
+#endif
+
+#ifdef BYTE_ORDER
+# if BYTE_ORDER == BIG_ENDIAN
+#  define littleendian 0
+#  define check_little_endian() (void)0
+# elif BYTE_ORDER == LITTLE_ENDIAN
+#  define littleendian 1
+#  define check_little_endian() (void)0
+# endif
+#endif
+#ifndef littleendian
+/* can't distinguish endian in compile time */
+static int littleendian = 0;
+static void
+check_little_endian(void)
+{
+  unsigned int n = 1;
+  littleendian = (*(unsigned char *)&n == 1);
+}
+#endif
+
+static unsigned int
+hex2int(unsigned char ch)
+{
+  if (ch >= '0' && ch <= '9')
+    return ch - '0';
+  else if (ch >= 'A' && ch <= 'F')
+    return 10 + (ch - 'A');
+  else if (ch >= 'a' && ch <= 'f')
+    return 10 + (ch - 'a');
+  else
+    return 0;
+}
+
+static void
+make_base64_dec_tab(void)
+{
+  int i;
+  memset(base64_dec_tab, PACK_BASE64_IGNORE, sizeof(base64_dec_tab));
+  for (i = 0; i < 26; i++)
+    base64_dec_tab['A' + i] = i;
+  for (i = 0; i < 26; i++)
+    base64_dec_tab['a' + i] = i + 26;
+  for (i = 0; i < 10; i++)
+    base64_dec_tab['0' + i] = i + 52;
+  base64_dec_tab['+'+0] = 62;
+  base64_dec_tab['/'+0] = 63;
+  base64_dec_tab['='+0] = PACK_BASE64_PADDING;
+}
+
+static mrb_value
+str_len_ensure(mrb_state *mrb, mrb_value str, mrb_int len)
+{
+  mrb_int n = RSTRING_LEN(str);
+  if (len < 0) {
+    mrb_raise(mrb, E_RANGE_ERROR, "negative (or overflowed) integer");
+  }
+  if (len > n) {
+    do {
+      n *= 2;
+    } while (len > n);
+    str = mrb_str_resize(mrb, str, n);
+  }
+  return str;
+}
+
+
+static int
+pack_c(mrb_state *mrb, mrb_value o, mrb_value str, mrb_int sidx, unsigned int flags)
+{
+  str = str_len_ensure(mrb, str, sidx + 1);
+  RSTRING_PTR(str)[sidx] = (char)mrb_fixnum(o);
+  return 1;
+}
+
+static int
+unpack_c(mrb_state *mrb, const void *src, int srclen, mrb_value ary, unsigned int flags)
+{
+  if (flags & PACK_FLAG_SIGNED)
+    mrb_ary_push(mrb, ary, mrb_fixnum_value(*(signed char *)src));
+  else
+    mrb_ary_push(mrb, ary, mrb_fixnum_value(*(unsigned char *)src));
+  return 1;
+}
+
+static int
+pack_s(mrb_state *mrb, mrb_value o, mrb_value str, mrb_int sidx, unsigned int flags)
+{
+  uint16_t n;
+
+  str = str_len_ensure(mrb, str, sidx + 2);
+  n = (uint16_t)mrb_fixnum(o);
+  if (flags & PACK_FLAG_LITTLEENDIAN) {
+    RSTRING_PTR(str)[sidx+0] = n % 256;
+    RSTRING_PTR(str)[sidx+1] = n / 256;
+  } else {
+    RSTRING_PTR(str)[sidx+0] = n / 256;
+    RSTRING_PTR(str)[sidx+1] = n % 256;
+  }
+  return 2;
+}
+
+static int
+unpack_s(mrb_state *mrb, const unsigned char *src, int srclen, mrb_value ary, unsigned int flags)
+{
+  int n;
+
+  if (flags & PACK_FLAG_LITTLEENDIAN) {
+    n = src[1] * 256 + src[0];
+  } else {
+    n = src[0] * 256 + src[1];
+  }
+  if ((flags & PACK_FLAG_SIGNED) && (n >= 0x8000)) {
+    n -= 0x10000;
+  }
+  mrb_ary_push(mrb, ary, mrb_fixnum_value(n));
+  return 2;
+}
+
+static int
+pack_l(mrb_state *mrb, mrb_value o, mrb_value str, mrb_int sidx, unsigned int flags)
+{
+  uint32_t n;
+
+  str = str_len_ensure(mrb, str, sidx + 4);
+  n = (uint32_t)mrb_fixnum(o);
+  if (flags & PACK_FLAG_LITTLEENDIAN) {
+    RSTRING_PTR(str)[sidx+0] = (char)(n & 0xff);
+    RSTRING_PTR(str)[sidx+1] = (char)(n >> 8);
+    RSTRING_PTR(str)[sidx+2] = (char)(n >> 16);
+    RSTRING_PTR(str)[sidx+3] = (char)(n >> 24);
+  } else {
+    RSTRING_PTR(str)[sidx+0] = (char)(n >> 24);
+    RSTRING_PTR(str)[sidx+1] = (char)(n >> 16);
+    RSTRING_PTR(str)[sidx+2] = (char)(n >> 8);
+    RSTRING_PTR(str)[sidx+3] = (char)(n & 0xff);
+  }
+  return 4;
+}
+
+static int
+unpack_l(mrb_state *mrb, const unsigned char *src, int srclen, mrb_value ary, unsigned int flags)
+{
+#ifndef MRB_INT64
+  char msg[60];
+#endif
+  uint32_t ul;
+  mrb_int n;
+
+  if (flags & PACK_FLAG_LITTLEENDIAN) {
+    ul = (uint32_t)src[3] * 256*256*256;
+    ul += (uint32_t)src[2] *256*256;
+    ul += (uint32_t)src[1] *256;
+    ul += (uint32_t)src[0];
+  } else {
+    ul = (uint32_t)src[0] * 256*256*256;
+    ul += (uint32_t)src[1] *256*256;
+    ul += (uint32_t)src[2] *256;
+    ul += (uint32_t)src[3];
+  }
+  if (flags & PACK_FLAG_SIGNED) {
+    int32_t sl = ul;
+#ifndef MRB_INT64
+    if (!FIXABLE(sl)) {
+      snprintf(msg, sizeof(msg), "cannot unpack to Fixnum: %" PRId32, sl);
+      mrb_raise(mrb, E_RANGE_ERROR, msg);
+    }
+#endif
+    n = sl;
+  } else {
+#ifndef MRB_INT64
+    if (!POSFIXABLE(ul)) {
+      snprintf(msg, sizeof(msg), "cannot unpack to Fixnum: %" PRIu32, ul);
+      mrb_raise(mrb, E_RANGE_ERROR, msg);
+    }
+#endif
+    n = ul;
+  }
+  mrb_ary_push(mrb, ary, mrb_fixnum_value(n));
+  return 4;
+}
+
+static int
+pack_q(mrb_state *mrb, mrb_value o, mrb_value str, mrb_int sidx, unsigned int flags)
+{
+  uint64_t n;
+
+  str = str_len_ensure(mrb, str, sidx + 8);
+  n = (uint64_t)mrb_fixnum(o);
+  if (flags & PACK_FLAG_LITTLEENDIAN) {
+    RSTRING_PTR(str)[sidx+0] = (char)(n & 0xff);
+    RSTRING_PTR(str)[sidx+1] = (char)(n >> 8);
+    RSTRING_PTR(str)[sidx+2] = (char)(n >> 16);
+    RSTRING_PTR(str)[sidx+3] = (char)(n >> 24);
+    RSTRING_PTR(str)[sidx+4] = (char)(n >> 32);
+    RSTRING_PTR(str)[sidx+5] = (char)(n >> 40);
+    RSTRING_PTR(str)[sidx+6] = (char)(n >> 48);
+    RSTRING_PTR(str)[sidx+7] = (char)(n >> 56);
+  } else {
+    RSTRING_PTR(str)[sidx+0] = (char)(n >> 56);
+    RSTRING_PTR(str)[sidx+1] = (char)(n >> 48);
+    RSTRING_PTR(str)[sidx+2] = (char)(n >> 40);
+    RSTRING_PTR(str)[sidx+3] = (char)(n >> 32);
+    RSTRING_PTR(str)[sidx+4] = (char)(n >> 24);
+    RSTRING_PTR(str)[sidx+5] = (char)(n >> 16);
+    RSTRING_PTR(str)[sidx+6] = (char)(n >> 8);
+    RSTRING_PTR(str)[sidx+7] = (char)(n & 0xff);
+  }
+  return 8;
+}
+
+static int
+unpack_q(mrb_state *mrb, const unsigned char *src, int srclen, mrb_value ary, unsigned int flags)
+{
+  char msg[60];
+  uint64_t ull;
+  int i, pos, step;
+  mrb_int n;
+
+  if (flags & PACK_FLAG_LITTLEENDIAN) {
+    pos  = 7;
+    step = -1;
+  } else {
+    pos  = 0;
+    step = 1;
+  }
+  ull = 0;
+  for (i = 0; i < 8; i++) {
+    ull = ull * 256 + (uint64_t)src[pos];
+    pos += step;
+  }
+  if (flags & PACK_FLAG_SIGNED) {
+    int64_t sll = ull;
+    if (!FIXABLE(sll)) {
+      snprintf(msg, sizeof(msg), "cannot unpack to Fixnum: %" PRId64, sll);
+      mrb_raise(mrb, E_RANGE_ERROR, msg);
+    }
+    n = sll;
+  } else {
+    if (!POSFIXABLE(ull)) {
+      snprintf(msg, sizeof(msg), "cannot unpack to Fixnum: %" PRIu64, ull);
+      mrb_raise(mrb, E_RANGE_ERROR, msg);
+    }
+    n = ull;
+  }
+  mrb_ary_push(mrb, ary, mrb_fixnum_value(n));
+  return 8;
+}
+
+#ifndef MRB_WITHOUT_FLOAT
+static int
+pack_double(mrb_state *mrb, mrb_value o, mrb_value str, mrb_int sidx, unsigned int flags)
+{
+  int i;
+  double d;
+  uint8_t *buffer = (uint8_t *)&d;
+  str = str_len_ensure(mrb, str, sidx + 8);
+  d = mrb_float(o);
+
+  if (flags & PACK_FLAG_LITTLEENDIAN) {
+    if (littleendian) {
+      memcpy(RSTRING_PTR(str) + sidx, buffer, 8);
+    }
+    else {
+      for (i = 0; i < 8; ++i) {
+        RSTRING_PTR(str)[sidx + i] = buffer[8 - i - 1];
+      }
+    }
+  } else {
+    if (littleendian) {
+      for (i = 0; i < 8; ++i) {
+        RSTRING_PTR(str)[sidx + i] = buffer[8 - i - 1];
+      }
+    }
+    else {
+      memcpy(RSTRING_PTR(str) + sidx, buffer, 8);
+    }
+  }
+
+  return 8;
+}
+
+static int
+unpack_double(mrb_state *mrb, const unsigned char * src, int srclen, mrb_value ary, unsigned int flags)
+{
+  int i;
+  double d;
+  uint8_t *buffer = (uint8_t *)&d;
+
+  if (flags & PACK_FLAG_LITTLEENDIAN) {
+    if (littleendian) {
+      memcpy(buffer, src, 8);
+    }
+    else {
+      for (i = 0; i < 8; ++i) {
+        buffer[8 - i - 1] = src[i];
+      }
+    }
+  } else {
+    if (littleendian) {
+      for (i = 0; i < 8; ++i) {
+        buffer[8 - i - 1] = src[i];
+      }
+    }
+    else {
+      memcpy(buffer, src, 8);
+    }
+  }
+  mrb_ary_push(mrb, ary, mrb_float_value(mrb, d));
+
+  return 8;
+}
+
+static int
+pack_float(mrb_state *mrb, mrb_value o, mrb_value str, mrb_int sidx, unsigned int flags)
+{
+  int i;
+  float f;
+  uint8_t *buffer = (uint8_t *)&f;
+  str = str_len_ensure(mrb, str, sidx + 4);
+  f = (float)mrb_float(o);
+
+  if (flags & PACK_FLAG_LITTLEENDIAN) {
+    if (littleendian) {
+      memcpy(RSTRING_PTR(str) + sidx, buffer, 4);
+    }
+    else {
+      for (i = 0; i < 4; ++i) {
+        RSTRING_PTR(str)[sidx + i] = buffer[4 - i - 1];
+      }
+    }
+  } else {
+    if (littleendian) {
+      for (i = 0; i < 4; ++i) {
+        RSTRING_PTR(str)[sidx + i] = buffer[4 - i - 1];
+      }
+    }
+    else {
+      memcpy(RSTRING_PTR(str) + sidx, buffer, 4);
+    }
+  }
+
+  return 4;
+}
+
+static int
+unpack_float(mrb_state *mrb, const unsigned char * src, int srclen, mrb_value ary, unsigned int flags)
+{
+  int i;
+  float f;
+  uint8_t *buffer = (uint8_t *)&f;
+
+  if (flags & PACK_FLAG_LITTLEENDIAN) {
+    if (littleendian) {
+      memcpy(buffer, src, 4);
+    }
+    else {
+      for (i = 0; i < 4; ++i) {
+        buffer[4 - i - 1] = src[i];
+      }
+    }
+  } else {
+    if (littleendian) {
+      for (i = 0; i < 4; ++i) {
+        buffer[4 - i - 1] = src[i];
+      }
+    }
+    else {
+      memcpy(buffer, src, 4);
+    }
+  }
+  mrb_ary_push(mrb, ary, mrb_float_value(mrb, f));
+
+  return 4;
+}
+#endif
+
+static int
+pack_utf8(mrb_state *mrb, mrb_value o, mrb_value str, mrb_int sidx, long count, unsigned int flags)
+{
+  char utf8[4];
+  int len = 0;
+  uint32_t c = 0;
+
+  c = (uint32_t)mrb_fixnum(o);
+
+  /* Unicode character */
+  /* from mruby-compiler gem */
+  if (c < 0x80) {
+    utf8[0] = (char)c;
+    len = 1;
+  }
+  else if (c < 0x800) {
+    utf8[0] = (char)(0xC0 | (c >> 6));
+    utf8[1] = (char)(0x80 | (c & 0x3F));
+    len = 2;
+  }
+  else if (c < 0x10000) {
+    utf8[0] = (char)(0xE0 |  (c >> 12)        );
+    utf8[1] = (char)(0x80 | ((c >>  6) & 0x3F));
+    utf8[2] = (char)(0x80 | ( c        & 0x3F));
+    len = 3;
+  }
+  else if (c < 0x200000) {
+    utf8[0] = (char)(0xF0 |  (c >> 18)        );
+    utf8[1] = (char)(0x80 | ((c >> 12) & 0x3F));
+    utf8[2] = (char)(0x80 | ((c >>  6) & 0x3F));
+    utf8[3] = (char)(0x80 | ( c        & 0x3F));
+    len = 4;
+  }
+  else {
+    mrb_raise(mrb, E_RANGE_ERROR, "pack(U): value out of range");
+  }
+
+  str = str_len_ensure(mrb, str, sidx + len);
+  memcpy(RSTRING_PTR(str) + sidx, utf8, len);
+
+  return len;
+}
+
+static const unsigned long utf8_limits[] = {
+  0x0,        /* 1 */
+  0x80,       /* 2 */
+  0x800,      /* 3 */
+  0x10000,    /* 4 */
+  0x200000,   /* 5 */
+  0x4000000,  /* 6 */
+  0x80000000, /* 7 */
+};
+
+static unsigned long
+utf8_to_uv(mrb_state *mrb, const char *p, long *lenp)
+{
+  int c = *p++ & 0xff;
+  unsigned long uv = c;
+  long n = 1;
+
+  if (!(uv & 0x80)) {
+    *lenp = 1;
+    return uv;
+  }
+  if (!(uv & 0x40)) {
+    *lenp = 1;
+    mrb_raise(mrb, E_ARGUMENT_ERROR, "malformed UTF-8 character");
+  }
+
+  if      (!(uv & 0x20)) { n = 2; uv &= 0x1f; }
+  else if (!(uv & 0x10)) { n = 3; uv &= 0x0f; }
+  else if (!(uv & 0x08)) { n = 4; uv &= 0x07; }
+  else if (!(uv & 0x04)) { n = 5; uv &= 0x03; }
+  else if (!(uv & 0x02)) { n = 6; uv &= 0x01; }
+  else {
+    *lenp = 1;
+    mrb_raise(mrb, E_ARGUMENT_ERROR, "malformed UTF-8 character");
+  }
+  if (n > *lenp) {
+    mrb_raisef(mrb, E_ARGUMENT_ERROR, "malformed UTF-8 character (expected %d bytes, given %d bytes)",
+               n, *lenp);
+  }
+  *lenp = n--;
+  if (n != 0) {
+    while (n--) {
+      c = *p++ & 0xff;
+      if ((c & 0xc0) != 0x80) {
+        *lenp -= n + 1;
+        mrb_raise(mrb, E_ARGUMENT_ERROR, "malformed UTF-8 character");
+      }
+      else {
+        c &= 0x3f;
+        uv = uv << 6 | c;
+      }
+    }
+  }
+  n = *lenp - 1;
+  if (uv < utf8_limits[n]) {
+    mrb_raise(mrb, E_ARGUMENT_ERROR, "redundant UTF-8 sequence");
+  }
+  return uv;
+}
+
+static int
+unpack_utf8(mrb_state *mrb, const unsigned char * src, int srclen, mrb_value ary, unsigned int flags)
+{
+  unsigned long uv;
+  long lenp = srclen;
+
+  if (srclen == 0) {
+    return 1;
+  }
+  uv = utf8_to_uv(mrb, (const char *)src, &lenp);
+  mrb_ary_push(mrb, ary, mrb_fixnum_value((mrb_int)uv));
+  return (int)lenp;
+}
+
+static int
+pack_a(mrb_state *mrb, mrb_value src, mrb_value dst, mrb_int didx, long count, unsigned int flags)
+{
+  mrb_int copylen, slen, padlen;
+  char *dptr, *dptr0, pad, *sptr;
+
+  sptr = RSTRING_PTR(src);
+  slen = RSTRING_LEN(src);
+
+  if ((flags & PACK_FLAG_a) || (flags & PACK_FLAG_Z))
+    pad = '\0';
+  else
+    pad = ' ';
+
+  if (count == 0) {
+    return 0;
+  } else if (count == -1) {
+    copylen = slen;
+    padlen = (flags & PACK_FLAG_Z) ? 1 : 0;
+  } else if (count < slen) {
+    copylen = count;
+    padlen = 0;
+  } else {
+    copylen = slen;
+    padlen = count - slen;
+  }
+
+  dst = str_len_ensure(mrb, dst, didx + copylen + padlen);
+  dptr0 = dptr = RSTRING_PTR(dst) + didx;
+  memcpy(dptr, sptr, copylen);
+  dptr += copylen;
+  while (padlen-- > 0) {
+    *dptr++ = pad;
+  }
+
+  return (int)(dptr - dptr0);
+}
+
+static int
+unpack_a(mrb_state *mrb, const void *src, int slen, mrb_value ary, long count, unsigned int flags)
+{
+  mrb_value dst;
+  const char *cp, *sptr;
+  int copylen;
+
+  sptr = (const char *)src;
+  if (count != -1 && count < slen)  {
+    slen = count;
+  }
+  copylen = slen;
+
+  if (slen >= 0 && flags & PACK_FLAG_Z) {  /* "Z" */
+    if ((cp = (const char *)memchr(sptr, '\0', slen)) != NULL) {
+      copylen = (int)(cp - sptr);
+      if (count == -1) {
+        slen = copylen + 1;
+      }
+    }
+  }
+  else if (!(flags & PACK_FLAG_a)) {  /* "A" */
+    while (copylen > 0 && (sptr[copylen - 1] == '\0' || ISSPACE(sptr[copylen - 1]))) {
+      copylen--;
+    }
+  }
+
+  if (copylen < 0) copylen = 0;
+  dst = mrb_str_new(mrb, sptr, (mrb_int)copylen);
+  mrb_ary_push(mrb, ary, dst);
+  return slen;
+}
+
+
+static int
+pack_h(mrb_state *mrb, mrb_value src, mrb_value dst, mrb_int didx, long count, unsigned int flags)
+{
+  unsigned int a, ashift, b, bshift;
+  long slen;
+  char *dptr, *dptr0, *sptr;
+
+  sptr = RSTRING_PTR(src);
+  slen = (long)RSTRING_LEN(src);
+
+  if (flags & PACK_FLAG_LSB) {
+    ashift = 0;
+    bshift = 4;
+  } else {
+    ashift = 4;
+    bshift = 0;
+  }
+
+  if (count == -1) {
+    count = slen;
+  } else if (slen > count) {
+    slen = count;
+  }
+
+  dst = str_len_ensure(mrb, dst, didx + count);
+  dptr = RSTRING_PTR(dst) + didx;
+
+  dptr0 = dptr;
+  for (; count > 0; count -= 2) {
+    a = b = 0;
+    if (slen > 0) {
+      a = hex2int(*sptr++);
+      slen--;
+    }
+    if (slen > 0) {
+      b = hex2int(*sptr++);
+      slen--;
+    }
+    *dptr++ = (a << ashift) + (b << bshift);
+  }
+
+  return (int)(dptr - dptr0);
+}
+
+static int
+unpack_h(mrb_state *mrb, const void *src, int slen, mrb_value ary, int count, unsigned int flags)
+{
+  mrb_value dst;
+  int a, ashift, b, bshift;
+  const char *sptr, *sptr0;
+  char *dptr, *dptr0;
+  const char hexadecimal[] = "0123456789abcdef";
+
+  if (flags & PACK_FLAG_LSB) {
+    ashift = 0;
+    bshift = 4;
+  } else {
+    ashift = 4;
+    bshift = 0;
+  }
+
+  sptr = (const char *)src;
+
+  if (count == -1)
+    count = slen * 2;
+
+  dst = mrb_str_new(mrb, NULL, count);
+  dptr = RSTRING_PTR(dst);
+
+  sptr0 = sptr;
+  dptr0 = dptr;
+  while (slen > 0 && count > 0) {
+    a = (*sptr >> ashift) & 0x0f;
+    b = (*sptr >> bshift) & 0x0f;
+    sptr++;
+    slen--;
+
+    *dptr++ = hexadecimal[a];
+    count--;
+
+    if (count > 0) {
+      *dptr++ = hexadecimal[b];
+      count--;
+    }
+  }
+
+  dst = mrb_str_resize(mrb, dst, dptr - dptr0);
+  mrb_ary_push(mrb, ary, dst);
+  return (int)(sptr - sptr0);
+}
+
+
+static int
+pack_m(mrb_state *mrb, mrb_value src, mrb_value dst, mrb_int didx, long count, unsigned int flags)
+{
+  mrb_int dstlen;
+  unsigned long l;
+  mrb_int column, srclen;
+  char *srcptr, *dstptr, *dstptr0;
+
+  srcptr = RSTRING_PTR(src);
+  srclen = RSTRING_LEN(src);
+
+  if (srclen == 0)  /* easy case */
+    return 0;
+
+  if (count != 0 && count < 3) {  /* -1, 1 or 2 */
+    count = 45;
+  } else if (count >= 3) {
+    count -= count % 3;
+  }
+
+  dstlen = (srclen+2) / 3 * 4;
+  if (count > 0) {
+    dstlen += (srclen / count) + ((srclen % count) == 0 ? 0 : 1);
+  }
+  dst = str_len_ensure(mrb, dst, didx + dstlen);
+  dstptr = RSTRING_PTR(dst) + didx;
+
+  dstptr0 = dstptr;
+  for (column = 3; srclen >= 3; srclen -= 3, column += 3) {
+    l = (unsigned char)*srcptr++ << 16;
+    l += (unsigned char)*srcptr++ << 8;
+    l += (unsigned char)*srcptr++;
+
+    *dstptr++ = base64chars[(l >> 18) & 0x3f];
+    *dstptr++ = base64chars[(l >> 12) & 0x3f];
+    *dstptr++ = base64chars[(l >>  6) & 0x3f];
+    *dstptr++ = base64chars[ l        & 0x3f];
+
+    if (column == count) {
+      *dstptr++ = '\n';
+      column = 0;
+    }
+  }
+  if (srclen == 1) {
+    l = (unsigned char)*srcptr++ << 16;
+    *dstptr++ = base64chars[(l >> 18) & 0x3f];
+    *dstptr++ = base64chars[(l >> 12) & 0x3f];
+    *dstptr++ = '=';
+    *dstptr++ = '=';
+    column += 3;
+  } else if (srclen == 2) {
+    l = (unsigned char)*srcptr++ << 16;
+    l += (unsigned char)*srcptr++ << 8;
+    *dstptr++ = base64chars[(l >> 18) & 0x3f];
+    *dstptr++ = base64chars[(l >> 12) & 0x3f];
+    *dstptr++ = base64chars[(l >>  6) & 0x3f];
+    *dstptr++ = '=';
+    column += 3;
+  }
+  if (column > 0 && count > 0) {
+    *dstptr++ = '\n';
+  }
+
+  return (int)(dstptr - dstptr0);
+}
+
+static int
+unpack_m(mrb_state *mrb, const void *src, int slen, mrb_value ary, unsigned int flags)
+{
+  mrb_value dst;
+  int dlen;
+  unsigned long l;
+  int i, padding;
+  unsigned char c, ch[4];
+  const char *sptr, *sptr0;
+  char *dptr, *dptr0;
+
+  sptr0 = sptr = (const char *)src;
+
+  dlen = slen / 4 * 3;  /* an estimated value - may be shorter */
+  dst = mrb_str_new(mrb, NULL, dlen);
+  dptr0 = dptr = RSTRING_PTR(dst);
+
+  padding = 0;
+  while (slen >= 4) {
+    for (i = 0; i < 4; i++) {
+      do {
+        if (slen-- == 0)
+          goto done;
+        c = *sptr++;
+	if (c >= sizeof(base64_dec_tab))
+	  continue;
+	ch[i] = base64_dec_tab[c];
+	if (ch[i] == PACK_BASE64_PADDING) {
+	  ch[i] = 0;
+	  padding++;
+	}
+      } while (c >= sizeof(base64_dec_tab) || ch[i] == PACK_BASE64_IGNORE);
+    }
+
+    l = (ch[0] << 18) + (ch[1] << 12) + (ch[2] << 6) + ch[3];
+
+    if (padding == 0) {
+      *dptr++ = (l >> 16) & 0xff;
+      *dptr++ = (l >> 8) & 0xff;
+      *dptr++ = l & 0xff;
+    } else if (padding == 1) {
+      *dptr++ = (l >> 16) & 0xff;
+      *dptr++ = (l >> 8) & 0xff;
+      break;
+    } else {
+      *dptr++ = (l >> 16) & 0xff;
+      break;
+    }
+  }
+
+done:
+  dst = mrb_str_resize(mrb, dst, dptr - dptr0);
+  mrb_ary_push(mrb, ary, dst);
+  return (int)(sptr - sptr0);
+}
+
+static int
+pack_x(mrb_state *mrb, mrb_value src, mrb_value dst, mrb_int didx, long count, unsigned int flags)
+{
+  long i;
+
+  if (count < 0) return 0;
+  dst = str_len_ensure(mrb, dst, didx + count);
+  for (i = 0; i < count; i++) {
+    RSTRING_PTR(dst)[didx + i] = '\0';
+  }
+  return count;
+}
+static int
+unpack_x(mrb_state *mrb, const void *src, int slen, mrb_value ary, int count, unsigned int flags)
+{
+  if (count < 0) return slen;
+  if (slen < count) {
+    mrb_raise(mrb, E_ARGUMENT_ERROR, "x outside of string");
+  }
+  return count;
+}
+
+static void
+prepare_tmpl(mrb_state *mrb, struct tmpl *tmpl)
+{
+  mrb_get_args(mrb, "S", &tmpl->str);
+  tmpl->idx = 0;
+}
+
+static int
+has_tmpl(const struct tmpl *tmpl)
+{
+  return (tmpl->idx < RSTRING_LEN(tmpl->str));
+}
+
+static void
+read_tmpl(mrb_state *mrb, struct tmpl *tmpl, int *dirp, int *typep, int *sizep, int *countp, unsigned int *flagsp)
+{
+  mrb_int t, tlen;
+  int ch, dir, type, size = 0;
+  int count = 1;
+  unsigned int flags = 0;
+  const char *tptr;
+
+  tptr = RSTRING_PTR(tmpl->str);
+  tlen = RSTRING_LEN(tmpl->str);
+
+  t = tptr[tmpl->idx++];
+alias:
+  switch (t) {
+  case 'A':
+    dir = PACK_DIR_STR;
+    type = PACK_TYPE_STRING;
+    flags |= PACK_FLAG_WIDTH | PACK_FLAG_COUNT2;
+    break;
+  case 'a':
+    dir = PACK_DIR_STR;
+    type = PACK_TYPE_STRING;
+    flags |= PACK_FLAG_WIDTH | PACK_FLAG_COUNT2 | PACK_FLAG_a;
+    break;
+  case 'C':
+    dir = PACK_DIR_CHAR;
+    type = PACK_TYPE_INTEGER;
+    size = 1;
+    break;
+  case 'c':
+    dir = PACK_DIR_CHAR;
+    type = PACK_TYPE_INTEGER;
+    size = 1;
+    flags |= PACK_FLAG_SIGNED;
+    break;
+  case 'D': case 'd':
+    dir = PACK_DIR_DOUBLE;
+    type = PACK_TYPE_FLOAT;
+    size = 8;
+    flags |= PACK_FLAG_SIGNED;
+    break;
+  case 'F': case 'f':
+    dir = PACK_DIR_FLOAT;
+    type = PACK_TYPE_FLOAT;
+    size = 4;
+    flags |= PACK_FLAG_SIGNED;
+    break;
+  case 'E':
+    dir = PACK_DIR_DOUBLE;
+    type = PACK_TYPE_FLOAT;
+    size = 8;
+    flags |= PACK_FLAG_SIGNED | PACK_FLAG_LT;
+    break;
+  case 'e':
+    dir = PACK_DIR_FLOAT;
+    type = PACK_TYPE_FLOAT;
+    size = 4;
+    flags |= PACK_FLAG_SIGNED | PACK_FLAG_LT;
+    break;
+  case 'G':
+    dir = PACK_DIR_DOUBLE;
+    type = PACK_TYPE_FLOAT;
+    size = 8;
+    flags |= PACK_FLAG_SIGNED | PACK_FLAG_GT;
+    break;
+  case 'g':
+    dir = PACK_DIR_FLOAT;
+    type = PACK_TYPE_FLOAT;
+    size = 4;
+    flags |= PACK_FLAG_SIGNED | PACK_FLAG_GT;
+    break;
+  case 'H':
+    dir = PACK_DIR_HEX;
+    type = PACK_TYPE_STRING;
+    flags |= PACK_FLAG_COUNT2;
+    break;
+  case 'h':
+    dir = PACK_DIR_HEX;
+    type = PACK_TYPE_STRING;
+    flags |= PACK_FLAG_COUNT2 | PACK_FLAG_LSB;
+    break;
+  case 'I':
+    switch (sizeof(int)) {
+      case 2: t = 'S'; goto alias;
+      case 4: t = 'L'; goto alias;
+      case 8: t = 'Q'; goto alias;
+      default:
+        mrb_raisef(mrb, E_RUNTIME_ERROR, "mruby-pack does not support sizeof(int) == %d", (int)sizeof(int));
+    }
+    break;
+  case 'i':
+    switch (sizeof(int)) {
+      case 2: t = 's'; goto alias;
+      case 4: t = 'l'; goto alias;
+      case 8: t = 'q'; goto alias;
+      default:
+        mrb_raisef(mrb, E_RUNTIME_ERROR, "mruby-pack does not support sizeof(int) == %d", (int)sizeof(int));
+    }
+    break;
+  case 'L':
+    dir = PACK_DIR_LONG;
+    type = PACK_TYPE_INTEGER;
+    size = 4;
+    break;
+  case 'l':
+    dir = PACK_DIR_LONG;
+    type = PACK_TYPE_INTEGER;
+    size = 4;
+    flags |= PACK_FLAG_SIGNED;
+    break;
+  case 'm':
+    dir = PACK_DIR_BASE64;
+    type = PACK_TYPE_STRING;
+    flags |= PACK_FLAG_WIDTH | PACK_FLAG_COUNT2;
+    break;
+  case 'N':  /* = "L>" */
+    dir = PACK_DIR_LONG;
+    type = PACK_TYPE_INTEGER;
+    size = 4;
+    flags |= PACK_FLAG_GT;
+    break;
+  case 'n':  /* = "S>" */
+    dir = PACK_DIR_SHORT;
+    type = PACK_TYPE_INTEGER;
+    size = 2;
+    flags |= PACK_FLAG_GT;
+    break;
+  case 'Q':
+    dir = PACK_DIR_QUAD;
+    type = PACK_TYPE_INTEGER;
+    size = 8;
+    break;
+  case 'q':
+    dir = PACK_DIR_QUAD;
+    type = PACK_TYPE_INTEGER;
+    size = 8;
+    flags |= PACK_FLAG_SIGNED;
+    break;
+  case 'S':
+    dir = PACK_DIR_SHORT;
+    type = PACK_TYPE_INTEGER;
+    size = 2;
+    break;
+  case 's':
+    dir = PACK_DIR_SHORT;
+    type = PACK_TYPE_INTEGER;
+    size = 2;
+    flags |= PACK_FLAG_SIGNED;
+    break;
+  case 'U':
+    dir = PACK_DIR_UTF8;
+    type = PACK_TYPE_INTEGER;
+    break;
+  case 'V':  /* = "L<" */
+    dir = PACK_DIR_LONG;
+    type = PACK_TYPE_INTEGER;
+    size = 4;
+    flags |= PACK_FLAG_LT;
+    break;
+  case 'v':  /* = "S<" */
+    dir = PACK_DIR_SHORT;
+    type = PACK_TYPE_INTEGER;
+    size = 2;
+    flags |= PACK_FLAG_LT;
+    break;
+  case 'x':
+    dir = PACK_DIR_NUL;
+    type = PACK_TYPE_NONE;
+    break;
+  case 'Z':
+    dir = PACK_DIR_STR;
+    type = PACK_TYPE_STRING;
+    flags |= PACK_FLAG_WIDTH | PACK_FLAG_COUNT2 | PACK_FLAG_Z;
+    break;
+  default:
+    dir = PACK_DIR_INVALID;
+    type = PACK_TYPE_NONE;
+    break;
+  }
+
+  /* read suffix [0-9*_!<>] */
+  while (tmpl->idx < tlen) {
+    ch = tptr[tmpl->idx++];
+    if (ISDIGIT(ch)) {
+      count = ch - '0';
+      while (tmpl->idx < tlen && ISDIGIT(tptr[tmpl->idx])) {
+        int ch = tptr[tmpl->idx++] - '0';
+        if (count+ch > INT_MAX/10) {
+          mrb_raise(mrb, E_RUNTIME_ERROR, "too big template length");
+        }
+        count = count * 10 + ch;
+      }
+      continue;  /* special case */
+    } else if (ch == '*')  {
+      count = -1;
+    } else if (ch == '_' || ch == '!' || ch == '<' || ch == '>') {
+      if (strchr("sSiIlLqQ", (int)t) == NULL) {
+        mrb_raisef(mrb, E_ARGUMENT_ERROR, "'%c' allowed only after types sSiIlLqQ", ch);
+      }
+      if (ch == '_' || ch == '!') {
+        flags |= PACK_FLAG_s;
+      } else if (ch == '<') {
+        flags |= PACK_FLAG_LT;
+      } else if (ch == '>') {
+        flags |= PACK_FLAG_GT;
+      }
+    } else {
+      tmpl->idx--;
+      break;
+    }
+  }
+
+  if ((flags & PACK_FLAG_LT) || (!(flags & PACK_FLAG_GT) && littleendian)) {
+    flags |= PACK_FLAG_LITTLEENDIAN;
+  }
+
+  *dirp = dir;
+  *typep = type;
+  *sizep = size;
+  *countp = count;
+  *flagsp = flags;
+}
+
+static mrb_value
+mrb_pack_pack(mrb_state *mrb, mrb_value ary)
+{
+  mrb_value o, result;
+  mrb_int aidx;
+  struct tmpl tmpl;
+  int count;
+  unsigned int flags;
+  int dir, ridx, size, type;
+
+  prepare_tmpl(mrb, &tmpl);
+
+  result = mrb_str_new(mrb, NULL, 128);  /* allocate initial buffer */
+  aidx = 0;
+  ridx = 0;
+  while (has_tmpl(&tmpl)) {
+    read_tmpl(mrb, &tmpl, &dir, &type, &size, &count, &flags);
+
+    if (dir == PACK_DIR_INVALID)
+      continue;
+    else if (dir == PACK_DIR_NUL) {
+        ridx += pack_x(mrb, mrb_nil_value(), result, ridx, count, flags);
+        continue;
+    }
+
+    for (; aidx < RARRAY_LEN(ary); aidx++) {
+      if (count == 0 && !(flags & PACK_FLAG_WIDTH))
+        break;
+
+      o = mrb_ary_ref(mrb, ary, aidx);
+      if (type == PACK_TYPE_INTEGER) {
+        o = mrb_to_int(mrb, o);
+      }
+#ifndef MRB_WITHOUT_FLOAT
+      else if (type == PACK_TYPE_FLOAT) {
+        if (!mrb_float_p(o)) {
+          mrb_float f = mrb_to_flo(mrb, o);
+          o = mrb_float_value(mrb, f);
+        }
+      }
+#endif
+      else if (type == PACK_TYPE_STRING) {
+        if (!mrb_string_p(o)) {
+          mrb_raisef(mrb, E_TYPE_ERROR, "can't convert %T into String", o);
+        }
+      }
+
+      switch (dir) {
+      case PACK_DIR_CHAR:
+        ridx += pack_c(mrb, o, result, ridx, flags);
+        break;
+      case PACK_DIR_SHORT:
+        ridx += pack_s(mrb, o, result, ridx, flags);
+        break;
+      case PACK_DIR_LONG:
+        ridx += pack_l(mrb, o, result, ridx, flags);
+        break;
+      case PACK_DIR_QUAD:
+        ridx += pack_q(mrb, o, result, ridx, flags);
+        break;
+      case PACK_DIR_BASE64:
+        ridx += pack_m(mrb, o, result, ridx, count, flags);
+        break;
+      case PACK_DIR_HEX:
+        ridx += pack_h(mrb, o, result, ridx, count, flags);
+        break;
+      case PACK_DIR_STR:
+        ridx += pack_a(mrb, o, result, ridx, count, flags);
+        break;
+#ifndef MRB_WITHOUT_FLOAT
+      case PACK_DIR_DOUBLE:
+        ridx += pack_double(mrb, o, result, ridx, flags);
+        break;
+      case PACK_DIR_FLOAT:
+        ridx += pack_float(mrb, o, result, ridx, flags);
+        break;
+#endif
+      case PACK_DIR_UTF8:
+        ridx += pack_utf8(mrb, o, result, ridx, count, flags);
+        break;
+      default:
+        break;
+      }
+      if (dir == PACK_DIR_STR || dir == PACK_DIR_BASE64) { /* always consumes 1 entry */
+        aidx++;
+        break;
+      }
+      if (count > 0) {
+        count--;
+      }
+    }
+    if (ridx < 0) {
+      mrb_raise(mrb, E_RANGE_ERROR, "negative (or overflowed) template size");
+    }
+  }
+
+  mrb_str_resize(mrb, result, ridx);
+  return result;
+}
+
+static mrb_value
+pack_unpack(mrb_state *mrb, mrb_value str, int single)
+{
+  mrb_value result;
+  struct tmpl tmpl;
+  int count;
+  unsigned int flags;
+  int dir, size, type;
+  int srcidx, srclen;
+  const unsigned char *sptr;
+
+  prepare_tmpl(mrb, &tmpl);
+
+  srcidx = 0;
+  srclen = (int)RSTRING_LEN(str);
+
+  result = mrb_ary_new(mrb);
+  while (has_tmpl(&tmpl)) {
+    read_tmpl(mrb, &tmpl, &dir, &type, &size, &count, &flags);
+
+    if (dir == PACK_DIR_INVALID)
+      continue;
+    else if (dir == PACK_DIR_NUL) {
+      srcidx += unpack_x(mrb, sptr, srclen - srcidx, result, count, flags);
+      continue;
+    }
+
+    if (flags & PACK_FLAG_COUNT2) {
+      sptr = (const unsigned char *)RSTRING_PTR(str) + srcidx;
+      switch (dir) {
+      case PACK_DIR_HEX:
+        srcidx += unpack_h(mrb, sptr, srclen - srcidx, result, count, flags);
+        break;
+      case PACK_DIR_STR:
+        srcidx += unpack_a(mrb, sptr, srclen - srcidx, result, count, flags);
+        break;
+      case PACK_DIR_BASE64:
+        srcidx += unpack_m(mrb, sptr, srclen - srcidx, result, flags);
+        break;
+      }
+      continue;
+    }
+
+    while (count != 0) {
+      if (srclen - srcidx < size) {
+        while (count-- > 0) {
+          mrb_ary_push(mrb, result, mrb_nil_value());
+        }
+        break;
+      }
+
+      sptr = (const unsigned char*)RSTRING_PTR(str) + srcidx;
+      switch (dir) {
+      case PACK_DIR_CHAR:
+        srcidx += unpack_c(mrb, sptr, srclen - srcidx, result, flags);
+        break;
+      case PACK_DIR_SHORT:
+        srcidx += unpack_s(mrb, sptr, srclen - srcidx, result, flags);
+        break;
+      case PACK_DIR_LONG:
+        srcidx += unpack_l(mrb, sptr, srclen - srcidx, result, flags);
+        break;
+      case PACK_DIR_QUAD:
+        srcidx += unpack_q(mrb, sptr, srclen - srcidx, result, flags);
+        break;
+#ifndef MRB_WITHOUT_FLOAT
+      case PACK_DIR_FLOAT:
+        srcidx += unpack_float(mrb, sptr, srclen - srcidx, result, flags);
+        break;
+      case PACK_DIR_DOUBLE:
+        srcidx += unpack_double(mrb, sptr, srclen - srcidx, result, flags);
+        break;
+#endif
+      case PACK_DIR_UTF8:
+        srcidx += unpack_utf8(mrb, sptr, srclen - srcidx, result, flags);
+        break;
+      default:
+        mrb_raise(mrb, E_RUNTIME_ERROR, "mruby-pack's bug");
+      }
+      if (count > 0) {
+        count--;
+      }
+    }
+    if (single) break;
+  }
+
+  if (single) {
+    if (RARRAY_LEN(result) > 0) {
+      return RARRAY_PTR(result)[0];
+    }
+    return mrb_nil_value();
+  }
+  return result;
+}
+
+static mrb_value
+mrb_pack_unpack(mrb_state *mrb, mrb_value str)
+{
+  return pack_unpack(mrb, str, 0);
+}
+
+static mrb_value
+mrb_pack_unpack1(mrb_state *mrb, mrb_value str)
+{
+  return pack_unpack(mrb, str, 1);
+}
+
+void
+mrb_mruby_pack_gem_init(mrb_state *mrb)
+{
+  check_little_endian();
+  make_base64_dec_tab();
+
+  mrb_define_method(mrb, mrb->array_class, "pack", mrb_pack_pack, MRB_ARGS_REQ(1));
+  mrb_define_method(mrb, mrb->string_class, "unpack", mrb_pack_unpack, MRB_ARGS_REQ(1));
+  mrb_define_method(mrb, mrb->string_class, "unpack1", mrb_pack_unpack1, MRB_ARGS_REQ(1));
+}
+
+void
+mrb_mruby_pack_gem_final(mrb_state *mrb)
+{
+}
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-pack/test/pack.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-pack/test/pack.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-pack/test/pack.rb	(revision 439)
@@ -0,0 +1,159 @@
+PACK_IS_LITTLE_ENDIAN = "\x01\00".unpack('S')[0] == 0x01
+
+def assert_pack tmpl, packed, unpacked
+  t = tmpl.inspect
+  assert "assert_pack" do
+    assert_equal packed, unpacked.pack(tmpl), "#{unpacked.inspect}.pack(#{t})"
+    assert_equal unpacked, packed.unpack(tmpl), "#{packed.inspect}.unpack(#{t})"
+  end
+end
+
+# pack & unpack 'm' (base64)
+assert('[""].pack("m")') do
+  assert_pack "m", "", [""]
+end
+
+assert('["\0"].pack("m")') do
+  assert_pack "m", "AA==\n", ["\0"]
+end
+
+assert('["\0\0"].pack("m")') do
+  assert_pack "m", "AAA=\n", ["\0\0"]
+end
+
+assert('["\0\0\0"].pack("m")') do
+  assert_pack "m", "AAAA\n", ["\0\0\0"]
+end
+
+assert('["abc..xyzABC..XYZ"].pack("m")') do
+  assert_pack "m", "YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJT\nVFVWV1hZWg==\n", ["abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"]
+end
+
+assert('"YWJ...".unpack("m") should "abc..xyzABC..XYZ"') do
+  ary = ["abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"]
+  assert_equal ary, "YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJT\nVFVWV1hZWg==\n".unpack("m")
+  assert_equal ary, "YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWg==\n".unpack("m")
+end
+
+assert('["A", "B"].pack') do
+  assert_equal "QQ==\n", ["A", "B"].pack("m50")
+  assert_equal ["A"], "QQ==\n".unpack("m50")
+  assert_equal "QQ==Qg==", ["A", "B"].pack("m0 m0")
+  assert_equal ["A", "B"], "QQ==Qg==".unpack("m10 m10")
+end
+
+assert('["abc..xyzABC..XYZ"].pack("m0")') do
+  assert_pack "m0", "YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWg==", ["abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"]
+end
+
+# pack & unpack 'H'
+assert('["3031"].pack("H*")') do
+  assert_pack "H*", "01", ["3031"]
+end
+
+assert('["10"].pack("H*")') do
+  assert_pack "H*", "\020", ["10"]
+end
+
+assert('[0,1,127,128,255].pack("C*")') do
+  assert_pack "C*", "\x00\x01\x7F\x80\xFF", [0, 1, 127, 128, 255]
+end
+
+# pack "a"
+assert('["abc"].pack("a")') do
+  assert_equal "a", ["abc"].pack("a")
+  assert_equal "abc", ["abc"].pack("a*")
+  assert_equal "abc\0", ["abc"].pack("a4")
+end
+
+# upack "a"
+assert('["abc"].pack("a")') do
+  assert_equal ["abc\0"], "abc\0".unpack("a4")
+  assert_equal ["abc "], "abc ".unpack("a4")
+end
+
+# pack "A"
+assert('["abc"].pack("A")') do
+  assert_equal "a", ["abc"].pack("A")
+  assert_equal "abc", ["abc"].pack("A*")
+  assert_equal "abc ", ["abc"].pack("A4")
+end
+
+# upack "A"
+assert('["abc"].pack("A")') do
+  assert_equal ["abc"], "abc\0".unpack("A4")
+  assert_equal ["abc"], "abc ".unpack("A4")
+end
+
+# regression tests
+assert('issue #1') do
+  assert_equal "\000\001\000\002", [1, 2].pack("nn")
+end
+
+assert 'pack float' do
+  assert_pack 'e', "\x00\x00@@", [3.0]
+  assert_pack 'g', "@@\x00\x00", [3.0]
+
+  if PACK_IS_LITTLE_ENDIAN
+    assert_pack 'f', "\x00\x00@@", [3.0]
+    assert_pack 'F', "\x00\x00@@", [3.0]
+  else
+    assert_pack 'f', "@@\x00\x00", [3.0]
+    assert_pack 'F', "@@\x00\x00", [3.0]
+  end
+end
+
+assert 'pack double' do
+  assert_pack 'E', "\x00\x00\x00\x00\x00\x00\b@", [3.0]
+  assert_pack 'G', "@\b\x00\x00\x00\x00\x00\x00", [3.0]
+
+  if PACK_IS_LITTLE_ENDIAN
+    assert_pack 'd', "\x00\x00\x00\x00\x00\x00\b@", [3.0]
+    assert_pack 'D', "\x00\x00\x00\x00\x00\x00\b@", [3.0]
+  else
+    assert_pack 'd', "@\b\x00\x00\x00\x00\x00\x00", [3.0]
+    assert_pack 'D', "@\b\x00\x00\x00\x00\x00\x00", [3.0]
+  end
+end
+
+assert 'pack/unpack "i"' do
+  int_size = [0].pack('i').size
+  raise "pack('i').size is too small (#{int_size})" if int_size < 2
+
+  if PACK_IS_LITTLE_ENDIAN
+    str = "\xC7\xCF" + "\xFF" * (int_size-2)
+  else
+    str = "\xFF" * (int_size-2) + "\xCF\xC7"
+  end
+  assert_pack 'i', str, [-12345]
+end
+
+assert 'pack/unpack "I"' do
+  uint_size = [0].pack('I').size
+  raise "pack('I').size is too small (#{uint_size})" if uint_size < 2
+
+  if PACK_IS_LITTLE_ENDIAN
+    str = "\x39\x30" + "\0" * (uint_size-2)
+  else
+    str = "\0" * (uint_size-2) + "\x30\x39"
+  end
+  assert_pack 'I', str, [12345]
+end
+
+assert 'pack/unpack "U"' do
+  assert_equal [], "".unpack("U")
+  assert_equal [], "".unpack("U*")
+  assert_equal [65, 66], "ABC".unpack("U2")
+  assert_equal [12371, 12435, 12395, 12385, 12399, 19990, 30028], "こんにちは世界".unpack("U*")
+
+  assert_equal "", [].pack("U")
+  assert_equal "", [].pack("U*")
+  assert_equal "AB", [65, 66, 67].pack("U2")
+  assert_equal "こんにちは世界", [12371, 12435, 12395, 12385, 12399, 19990, 30028].pack("U*")
+
+  assert_equal "\000", [0].pack("U")
+
+  assert_raise(RangeError) { [-0x40000000].pack("U") }
+  assert_raise(RangeError) { [-1].pack("U") }
+  assert_raise(RangeError) { [0x40000000].pack("U") }
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-print/mrbgem.rake
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-print/mrbgem.rake	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-print/mrbgem.rake	(revision 439)
@@ -0,0 +1,5 @@
+MRuby::Gem::Specification.new('mruby-print') do |spec|
+  spec.license = 'MIT'
+  spec.author  = 'mruby developers'
+  spec.summary = 'standard print/puts/p'
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-print/mrblib/print.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-print/mrblib/print.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-print/mrblib/print.rb	(revision 439)
@@ -0,0 +1,55 @@
+##
+# Kernel
+#
+# ISO 15.3.1
+module Kernel
+  ##
+  # Invoke method +print+ on STDOUT and passing +*args+
+  #
+  # ISO 15.3.1.2.10
+  def print(*args)
+    i = 0
+    len = args.size
+    while i < len
+      __printstr__ args[i].to_s
+      i += 1
+    end
+  end
+
+  ##
+  # Invoke method +puts+ on STDOUT and passing +*args*+
+  #
+  # ISO 15.3.1.2.11
+  def puts(*args)
+    i = 0
+    len = args.size
+    while i < len
+      s = args[i].to_s
+      __printstr__ s
+      __printstr__ "\n" if (s[-1] != "\n")
+      i += 1
+    end
+    __printstr__ "\n" if len == 0
+    nil
+  end
+
+  ##
+  # Print human readable object description
+  #
+  # ISO 15.3.1.3.34
+  def p(*args)
+    i = 0
+    len = args.size
+    while i < len
+      __printstr__ args[i].inspect
+      __printstr__ "\n"
+      i += 1
+    end
+    args.__svalue
+  end
+
+  def printf(*args)
+    __printstr__(sprintf(*args))
+    nil
+  end
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-print/src/print.c
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-print/src/print.c	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-print/src/print.c	(revision 439)
@@ -0,0 +1,67 @@
+#include <mruby.h>
+
+#ifdef MRB_DISABLE_STDIO
+# error print conflicts 'MRB_DISABLE_STDIO' configuration in your 'build_config.rb'
+#endif
+
+#include <mruby/string.h>
+#include <string.h>
+#include <stdlib.h>
+#if defined(_WIN32)
+# include <windows.h>
+# include <io.h>
+#ifdef _MSC_VER
+# define isatty(x) _isatty(x)
+# define fileno(x) _fileno(x)
+#endif
+#endif
+
+static void
+printstr(mrb_state *mrb, mrb_value obj)
+{
+  if (mrb_string_p(obj)) {
+#if defined(_WIN32)
+    if (isatty(fileno(stdout))) {
+      DWORD written;
+      int mlen = (int)RSTRING_LEN(obj);
+      char* utf8 = RSTRING_PTR(obj);
+      int wlen = MultiByteToWideChar(CP_UTF8, 0, utf8, mlen, NULL, 0);
+      wchar_t* utf16 = (wchar_t*)mrb_malloc(mrb, (wlen+1) * sizeof(wchar_t));
+      if (MultiByteToWideChar(CP_UTF8, 0, utf8, mlen, utf16, wlen) > 0) {
+        utf16[wlen] = 0;
+        WriteConsoleW(GetStdHandle(STD_OUTPUT_HANDLE),
+          utf16, wlen, &written, NULL);
+      }
+      mrb_free(mrb, utf16);
+    } else
+#endif
+      fwrite(RSTRING_PTR(obj), RSTRING_LEN(obj), 1, stdout);
+    fflush(stdout);
+  }
+}
+
+/* 15.3.1.2.9  */
+/* 15.3.1.3.34 */
+mrb_value
+mrb_printstr(mrb_state *mrb, mrb_value self)
+{
+  mrb_value argv;
+
+  mrb_get_args(mrb, "o", &argv);
+  printstr(mrb, argv);
+
+  return argv;
+}
+
+void
+mrb_mruby_print_gem_init(mrb_state* mrb)
+{
+  struct RClass *krn;
+  krn = mrb->kernel_module;
+  mrb_define_method(mrb, krn, "__printstr__", mrb_printstr, MRB_ARGS_REQ(1));
+}
+
+void
+mrb_mruby_print_gem_final(mrb_state* mrb)
+{
+}
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-proc-ext/mrbgem.rake
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-proc-ext/mrbgem.rake	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-proc-ext/mrbgem.rake	(revision 439)
@@ -0,0 +1,5 @@
+MRuby::Gem::Specification.new('mruby-proc-ext') do |spec|
+  spec.license = 'MIT'
+  spec.author  = 'mruby developers'
+  spec.summary = 'Proc class extension'
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-proc-ext/mrblib/proc.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-proc-ext/mrblib/proc.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-proc-ext/mrblib/proc.rb	(revision 439)
@@ -0,0 +1,50 @@
+class Proc
+
+  def ===(*args)
+    call(*args)
+  end
+
+  def yield(*args)
+    call(*args)
+  end
+
+  def to_proc
+    self
+  end
+
+  def curry(arity=self.arity)
+    type = :proc
+    abs = lambda {|a| a < 0 ? -a - 1 : a}
+    arity = abs[arity]
+    if lambda?
+      type = :lambda
+      self_arity = self.arity
+      if (self_arity >= 0 && arity != self_arity) ||
+         (self_arity < 0 && abs[self_arity] > arity)
+        raise ArgumentError, "wrong number of arguments (#{arity} for #{abs[self_arity]})"
+      end
+    end
+
+    pproc = self
+    make_curry = proc do |given_args=[]|
+      __send__(type) do |*args|
+        new_args = given_args + args
+        if new_args.size >= arity
+          pproc[*new_args]
+        else
+          make_curry[new_args]
+        end
+      end
+    end
+    make_curry.call
+  end
+
+  def <<(other)
+    ->(*args, &block) { call(other.call(*args, &block)) }
+  end
+
+  def >>(other)
+    ->(*args, &block) { other.call(call(*args, &block)) }
+  end
+
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-proc-ext/src/proc.c
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-proc-ext/src/proc.c	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-proc-ext/src/proc.c	(revision 439)
@@ -0,0 +1,185 @@
+#include <mruby.h>
+#include <mruby/proc.h>
+#include <mruby/opcode.h>
+#include <mruby/array.h>
+#include <mruby/string.h>
+#include <mruby/debug.h>
+
+static mrb_value
+mrb_proc_lambda(mrb_state *mrb, mrb_value self)
+{
+  struct RProc *p = mrb_proc_ptr(self);
+  return mrb_bool_value(MRB_PROC_STRICT_P(p));
+}
+
+static mrb_value
+mrb_proc_source_location(mrb_state *mrb, mrb_value self)
+{
+  struct RProc *p = mrb_proc_ptr(self);
+
+  if (MRB_PROC_CFUNC_P(p)) {
+    return mrb_nil_value();
+  }
+  else {
+    mrb_irep *irep = p->body.irep;
+    int32_t line;
+    const char *filename;
+
+    filename = mrb_debug_get_filename(mrb, irep, 0);
+    line = mrb_debug_get_line(mrb, irep, 0);
+
+    return (!filename && line == -1)? mrb_nil_value()
+        : mrb_assoc_new(mrb, mrb_str_new_cstr(mrb, filename), mrb_fixnum_value(line));
+  }
+}
+
+static mrb_value
+mrb_proc_inspect(mrb_state *mrb, mrb_value self)
+{
+  struct RProc *p = mrb_proc_ptr(self);
+  mrb_value str = mrb_str_new_lit(mrb, "#<Proc:");
+  mrb_str_cat_str(mrb, str, mrb_ptr_to_str(mrb, mrb_cptr(self)));
+
+  if (!MRB_PROC_CFUNC_P(p)) {
+    mrb_irep *irep = p->body.irep;
+    const char *filename;
+    int32_t line;
+    mrb_str_cat_lit(mrb, str, "@");
+
+    filename = mrb_debug_get_filename(mrb, irep, 0);
+    mrb_str_cat_cstr(mrb, str, filename ? filename : "-");
+    mrb_str_cat_lit(mrb, str, ":");
+
+    line = mrb_debug_get_line(mrb, irep, 0);
+    if (line != -1) {
+      mrb_str_concat(mrb, str, mrb_fixnum_value(line));
+    }
+    else {
+      mrb_str_cat_lit(mrb, str, "-");
+    }
+  }
+
+  if (MRB_PROC_STRICT_P(p)) {
+    mrb_str_cat_lit(mrb, str, " (lambda)");
+  }
+
+  mrb_str_cat_lit(mrb, str, ">");
+  return str;
+}
+
+static mrb_value
+mrb_kernel_proc(mrb_state *mrb, mrb_value self)
+{
+  mrb_value blk;
+
+  mrb_get_args(mrb, "&!", &blk);
+
+  return blk;
+}
+
+/*
+ * call-seq:
+ *    prc.parameters  -> array
+ *
+ * Returns the parameter information of this proc.
+ *
+ *    prc = lambda{|x, y=42, *other|}
+ *    prc.parameters  #=> [[:req, :x], [:opt, :y], [:rest, :other]]
+ */
+
+static mrb_value
+mrb_proc_parameters(mrb_state *mrb, mrb_value self)
+{
+  struct parameters_type {
+    size_t len;
+    const char *name;
+    int size;
+  } *p, parameters_list [] = {
+    {sizeof("req")   - 1, "req",   0},
+    {sizeof("opt")   - 1, "opt",   0},
+    {sizeof("rest")  - 1, "rest",  0},
+    {sizeof("req")   - 1, "req",   0},
+    {sizeof("block") - 1, "block", 0},
+    {0, NULL, 0}
+  };
+  const struct RProc *proc = mrb_proc_ptr(self);
+  const struct mrb_irep *irep = proc->body.irep;
+  mrb_aspec aspec;
+  mrb_value parameters;
+  int i, j;
+  int max = -1;
+
+  if (MRB_PROC_CFUNC_P(proc)) {
+    // TODO cfunc aspec is not implemented yet
+    return mrb_ary_new(mrb);
+  }
+  if (!irep) {
+    return mrb_ary_new(mrb);
+  }
+  if (!irep->lv) {
+    return mrb_ary_new(mrb);
+  }
+  if (*irep->iseq != OP_ENTER) {
+    return mrb_ary_new(mrb);
+  }
+
+  if (!MRB_PROC_STRICT_P(proc)) {
+    parameters_list[0].len = sizeof("opt") - 1;
+    parameters_list[0].name = "opt";
+    parameters_list[3].len = sizeof("opt") - 1;
+    parameters_list[3].name = "opt";
+  }
+
+  aspec = PEEK_W(irep->iseq+1);
+  parameters_list[0].size = MRB_ASPEC_REQ(aspec);
+  parameters_list[1].size = MRB_ASPEC_OPT(aspec);
+  parameters_list[2].size = MRB_ASPEC_REST(aspec);
+  parameters_list[3].size = MRB_ASPEC_POST(aspec);
+  parameters_list[4].size = MRB_ASPEC_BLOCK(aspec);
+
+  parameters = mrb_ary_new_capa(mrb, irep->nlocals-1);
+
+  max = irep->nlocals-1;
+  for (i = 0, p = parameters_list; p->name; p++) {
+    mrb_value sname = mrb_symbol_value(mrb_intern_static(mrb, p->name, p->len));
+
+    for (j = 0; j < p->size; i++, j++) {
+      mrb_value a;
+
+      a = mrb_ary_new(mrb);
+      mrb_ary_push(mrb, a, sname);
+      if (i < max && irep->lv[i].name) {
+        mrb_sym sym = irep->lv[i].name;
+        const char *name = mrb_sym_name(mrb, sym);
+        switch (name[0]) {
+        case '*': case '&':
+          break;
+        default:
+          mrb_ary_push(mrb, a, mrb_symbol_value(sym));
+          break;
+        }
+      }
+      mrb_ary_push(mrb, parameters, a);
+    }
+  }
+  return parameters;
+}
+
+void
+mrb_mruby_proc_ext_gem_init(mrb_state* mrb)
+{
+  struct RClass *p = mrb->proc_class;
+  mrb_define_method(mrb, p, "lambda?",         mrb_proc_lambda,          MRB_ARGS_NONE());
+  mrb_define_method(mrb, p, "source_location", mrb_proc_source_location, MRB_ARGS_NONE());
+  mrb_define_method(mrb, p, "to_s",            mrb_proc_inspect,         MRB_ARGS_NONE());
+  mrb_define_method(mrb, p, "inspect",         mrb_proc_inspect,         MRB_ARGS_NONE());
+  mrb_define_method(mrb, p, "parameters",      mrb_proc_parameters,      MRB_ARGS_NONE());
+
+  mrb_define_class_method(mrb, mrb->kernel_module, "proc", mrb_kernel_proc, MRB_ARGS_NONE()|MRB_ARGS_BLOCK());
+  mrb_define_method(mrb, mrb->kernel_module,       "proc", mrb_kernel_proc, MRB_ARGS_NONE()|MRB_ARGS_BLOCK());
+}
+
+void
+mrb_mruby_proc_ext_gem_final(mrb_state* mrb)
+{
+}
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-proc-ext/test/proc.c
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-proc-ext/test/proc.c	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-proc-ext/test/proc.c	(revision 439)
@@ -0,0 +1,62 @@
+#include <mruby.h>
+#include <mruby/proc.h>
+#include <mruby/class.h>
+
+static mrb_value
+return_func_name(mrb_state *mrb, mrb_value self)
+{
+  return mrb_cfunc_env_get(mrb, 0);
+}
+
+static mrb_value
+proc_new_cfunc_with_env(mrb_state *mrb, mrb_value self)
+{
+  mrb_sym n;
+  mrb_value n_val;
+  mrb_method_t m;
+  struct RProc *p;
+  mrb_get_args(mrb, "n", &n);
+  n_val = mrb_symbol_value(n);
+  p = mrb_proc_new_cfunc_with_env(mrb, return_func_name, 1, &n_val);
+  MRB_METHOD_FROM_PROC(m, p);
+  mrb_define_method_raw(mrb, mrb_class_ptr(self), n, m);
+  return self;
+}
+
+static mrb_value
+return_env(mrb_state *mrb, mrb_value self)
+{
+  mrb_int idx;
+  mrb_get_args(mrb, "i", &idx);
+  return mrb_cfunc_env_get(mrb, idx);
+}
+
+static mrb_value
+cfunc_env_get(mrb_state *mrb, mrb_value self)
+{
+  mrb_sym n;
+  mrb_value *argv; mrb_int argc;
+  mrb_method_t m;
+  struct RProc *p;
+  mrb_get_args(mrb, "na", &n, &argv, &argc);
+  p = mrb_proc_new_cfunc_with_env(mrb, return_env, argc, argv);
+  MRB_METHOD_FROM_PROC(m, p);
+  mrb_define_method_raw(mrb, mrb_class_ptr(self), n, m);
+  return self;
+}
+
+static mrb_value
+cfunc_without_env(mrb_state *mrb, mrb_value self)
+{
+  return mrb_cfunc_env_get(mrb, 0);
+}
+
+void mrb_mruby_proc_ext_gem_test(mrb_state *mrb)
+{
+  struct RClass *cls;
+
+  cls = mrb_define_class(mrb, "ProcExtTest", mrb->object_class);
+  mrb_define_module_function(mrb, cls, "mrb_proc_new_cfunc_with_env", proc_new_cfunc_with_env, MRB_ARGS_REQ(1));
+  mrb_define_module_function(mrb, cls, "mrb_cfunc_env_get", cfunc_env_get, MRB_ARGS_REQ(2));
+  mrb_define_module_function(mrb, cls, "cfunc_without_env", cfunc_without_env, MRB_ARGS_NONE());
+}
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-proc-ext/test/proc.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-proc-ext/test/proc.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-proc-ext/test/proc.rb	(revision 439)
@@ -0,0 +1,130 @@
+##
+# Proc(Ext) Test
+
+def enable_debug_info?
+  return @enable_debug_info unless @enable_debug_info == nil
+  begin
+    raise
+  rescue => e
+    @enable_debug_info = !e.backtrace.empty?
+  end
+end
+
+assert('Proc#source_location') do
+  skip unless enable_debug_info?
+  file, line = Proc.new{}.source_location
+  assert_equal __FILE__, file
+  assert_equal __LINE__ - 2, line
+end
+
+assert('Proc#inspect') do
+  ins = Proc.new{}.inspect
+  if enable_debug_info?
+    metas = %w(\\ * ? [ ] { })
+    file = __FILE__.split("").map{|c| metas.include?(c) ? "\\#{c}" : c}.join
+    line = __LINE__ - 4
+  else
+    file = line = "-"
+  end
+  assert_match "#<Proc:0x*@#{file}:#{line}>", ins
+end
+
+assert('Proc#parameters') do
+  parameters = Proc.new{|x,y=42,*other|}.parameters
+  assert_equal [[:opt, :x], [:opt, :y], [:rest, :other]], parameters
+end
+
+assert('Proc#lambda?') do
+  assert_true lambda{}.lambda?
+  assert_true !Proc.new{}.lambda?
+end
+
+assert('Proc#===') do
+  proc = Proc.new {|a| a * 2}
+  assert_equal 20, (proc === 10)
+end
+
+assert('Proc#yield') do
+  proc = Proc.new {|a| a * 2}
+  assert_equal 20, proc.yield(10)
+end
+
+assert('Proc#curry') do
+  b = proc {|x, y, z| (x||0) + (y||0) + (z||0) }
+  assert_equal 6, b.curry[1][2][3]
+  assert_equal 6, b.curry[1, 2][3, 4]
+  assert_equal 6, b.curry(5)[1][2][3][4][5]
+  assert_equal 6, b.curry(5)[1, 2][3, 4][5]
+  assert_equal 1, b.curry(1)[1]
+
+  b = lambda {|x, y, z| (x||0) + (y||0) + (z||0) }
+  assert_equal 6, b.curry[1][2][3]
+  assert_raise(ArgumentError) { b.curry[1, 2][3, 4] }
+  assert_raise(ArgumentError) { b.curry(5) }
+  assert_raise(ArgumentError) { b.curry(1) }
+
+  assert_false(proc{}.curry.lambda?)
+  assert_true(lambda{}.curry.lambda?)
+end
+
+assert('Proc#parameters') do
+  assert_equal([], Proc.new {}.parameters)
+  assert_equal([], Proc.new {||}.parameters)
+  assert_equal([[:opt, :a]], Proc.new {|a|}.parameters)
+  assert_equal([[:req, :a]], lambda {|a|}.parameters)
+  assert_equal([[:opt, :a]], lambda {|a=nil|}.parameters)
+  assert_equal([[:req, :a]], ->(a){}.parameters)
+  assert_equal([[:rest]], lambda { |*| }.parameters)
+  assert_equal([[:rest, :a]], Proc.new {|*a|}.parameters)
+  assert_equal([[:opt, :a], [:opt, :b], [:opt, :c], [:opt, :d], [:rest, :e], [:opt, :f], [:opt, :g], [:block, :h]], Proc.new {|a,b,c=:c,d=:d,*e,f,g,&h|}.parameters)
+  assert_equal([[:req, :a], [:req, :b], [:opt, :c], [:opt, :d], [:rest, :e], [:req, :f], [:req, :g], [:block, :h]], lambda {|a,b,c=:c,d=:d,*e,f,g,&h|}.parameters)
+end
+
+assert('Proc#to_proc') do
+  proc = Proc.new {}
+  assert_equal proc, proc.to_proc
+end
+
+assert('Kernel#proc') do
+  assert_true !proc{|a|}.lambda?
+
+  assert_raise LocalJumpError do
+    proc{ break }.call
+  end
+end
+
+assert "Proc#<< and Proc#>>" do
+  add3 = ->(n) { n + 3 }
+  mul2 = ->(n) { n * 2 }
+
+  f1 = mul2 << add3
+  assert_kind_of Proc, f1
+  assert_equal 16, f1.call(5)
+
+  f2 = mul2 >> add3
+  assert_kind_of Proc, f2
+  assert_equal 13, f2.call(5)
+end
+
+assert('mrb_proc_new_cfunc_with_env') do
+  ProcExtTest.mrb_proc_new_cfunc_with_env(:test)
+  ProcExtTest.mrb_proc_new_cfunc_with_env(:mruby)
+
+  t = ProcExtTest.new
+
+  assert_equal :test, t.test
+  assert_equal :mruby, t.mruby
+end
+
+assert('mrb_cfunc_env_get') do
+  ProcExtTest.mrb_cfunc_env_get :get_int, [0, 1, 2]
+
+  t = ProcExtTest.new
+
+  assert_raise(TypeError) { t.cfunc_without_env }
+
+  assert_raise(IndexError) { t.get_int(-1) }
+  assert_raise(IndexError) { t.get_int(3) }
+
+  assert_equal 1, t.get_int(1)
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-random/mrbgem.rake
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-random/mrbgem.rake	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-random/mrbgem.rake	(revision 439)
@@ -0,0 +1,5 @@
+MRuby::Gem::Specification.new('mruby-random') do |spec|
+  spec.license = 'MIT'
+  spec.author  = 'mruby developers'
+  spec.summary = 'Random class'
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-random/src/random.c
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-random/src/random.c	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-random/src/random.c	(revision 439)
@@ -0,0 +1,382 @@
+/*
+** random.c - Random module
+**
+** See Copyright Notice in mruby.h
+*/
+
+#include <mruby.h>
+#include <mruby/variable.h>
+#include <mruby/class.h>
+#include <mruby/data.h>
+#include <mruby/array.h>
+#include <mruby/istruct.h>
+#if INT32_MAX <= INTPTR_MAX
+# define XORSHIFT96
+# define NSEEDS 3
+#else
+# define NSEEDS 4
+#endif
+#define LASTSEED (NSEEDS-1)
+
+#include <time.h>
+
+typedef struct rand_state {
+  uint32_t seed[NSEEDS];
+} rand_state;
+
+static void
+rand_init(rand_state *t)
+{
+  t->seed[0] = 123456789;
+  t->seed[1] = 362436069;
+  t->seed[2] = 521288629;
+#ifndef XORSHIFT96
+  t->seed[3] = 88675123;
+#endif
+}
+
+static uint32_t
+rand_seed(rand_state *t, uint32_t seed)
+{
+  uint32_t old_seed = t->seed[LASTSEED];
+  rand_init(t);
+  t->seed[LASTSEED] = seed;
+  return old_seed;
+}
+
+#ifdef XORSHIFT96
+static uint32_t
+rand_uint32(rand_state *state)
+{
+  uint32_t *seed = state->seed;
+  uint32_t x = seed[0];
+  uint32_t y = seed[1];
+  uint32_t z = seed[2];
+  uint32_t t;
+
+  t = (x ^ (x << 3)) ^ (y ^ (y >> 19)) ^ (z ^ (z << 6));
+  x = y; y = z; z = t;
+  seed[0] = x;
+  seed[1] = y;
+  seed[2] = z;
+
+  return z;
+}
+#else  /* XORSHIFT96 */
+static uint32_t
+rand_uint32(rand_state *state)
+{
+  uint32_t *seed = state->seed;
+  uint32_t x = seed[0];
+  uint32_t y = seed[1];
+  uint32_t z = seed[2];
+  uint32_t w = seed[3];
+  uint32_t t;
+
+  t = x ^ (x << 11);
+  x = y; y = z; z = w;
+  w = (w ^ (w >> 19)) ^ (t ^ (t >> 8));
+  seed[0] = x;
+  seed[1] = y;
+  seed[2] = z;
+  seed[3] = w;
+
+  return w;
+}
+#endif  /* XORSHIFT96 */
+
+#ifndef MRB_WITHOUT_FLOAT
+static double
+rand_real(rand_state *t)
+{
+  uint32_t x = rand_uint32(t);
+  return x*(1.0/4294967295.0);
+}
+#endif
+
+static mrb_value
+random_rand(mrb_state *mrb, rand_state *t, mrb_value max)
+{
+  mrb_value value;
+
+  if (mrb_fixnum(max) == 0) {
+#ifndef MRB_WITHOUT_FLOAT
+    value = mrb_float_value(mrb, rand_real(t));
+#else
+    mrb_raise(mrb, E_ARGUMENT_ERROR, "Float not supported");
+#endif
+  }
+  else {
+    value = mrb_fixnum_value(rand_uint32(t) % mrb_fixnum(max));
+  }
+
+  return value;
+}
+
+static mrb_value
+get_opt(mrb_state* mrb)
+{
+  mrb_value arg;
+
+  arg = mrb_nil_value();
+  mrb_get_args(mrb, "|o", &arg);
+
+  if (!mrb_nil_p(arg)) {
+    mrb_int i;
+
+    arg = mrb_to_int(mrb, arg);
+    i = mrb_fixnum(arg);
+    if (i < 0) {
+      arg = mrb_fixnum_value(0 - i);
+    }
+  }
+  return arg;
+}
+
+static void
+random_check(mrb_state *mrb, mrb_value random) {
+  struct RClass *c = mrb_class_get(mrb, "Random");
+  if (!mrb_obj_is_kind_of(mrb, random, c) || !mrb_istruct_p(random)) {
+    mrb_raise(mrb, E_TYPE_ERROR, "Random instance required");
+  }
+}
+
+static mrb_value
+random_default(mrb_state *mrb) {
+  struct RClass *c = mrb_class_get(mrb, "Random");
+  mrb_value d = mrb_const_get(mrb, mrb_obj_value(c), mrb_intern_lit(mrb, "DEFAULT"));
+  if (!mrb_obj_is_kind_of(mrb, d, c)) {
+    mrb_raise(mrb, E_TYPE_ERROR, "Random::DEFAULT replaced");
+  }
+  return d;
+}
+
+#define random_ptr(v) (rand_state*)mrb_istruct_ptr(v)
+#define random_default_state(mrb) random_ptr(random_default(mrb))
+
+static mrb_value
+random_m_init(mrb_state *mrb, mrb_value self)
+{
+  mrb_value seed;
+  rand_state *t;
+
+  seed = get_opt(mrb);
+  /* avoid memory leaks */
+  t = random_ptr(self);
+  if (mrb_nil_p(seed)) {
+    rand_init(t);
+  }
+  else {
+    rand_seed(t, (uint32_t)mrb_fixnum(seed));
+  }
+
+  return self;
+}
+
+static mrb_value
+random_m_rand(mrb_state *mrb, mrb_value self)
+{
+  mrb_value max;
+  rand_state *t = random_ptr(self);
+
+  max = get_opt(mrb);
+  return random_rand(mrb, t, max);
+}
+
+static mrb_value
+random_m_srand(mrb_state *mrb, mrb_value self)
+{
+  uint32_t seed;
+  uint32_t old_seed;
+  mrb_value sv;
+  rand_state *t = random_ptr(self);
+
+  sv = get_opt(mrb);
+  if (mrb_nil_p(sv)) {
+    seed = (uint32_t)time(NULL) + rand_uint32(t);
+  }
+  else {
+    seed = (uint32_t)mrb_fixnum(sv);
+  }
+  old_seed = rand_seed(t, seed);
+
+  return mrb_fixnum_value((mrb_int)old_seed);
+}
+
+/*
+ *  call-seq:
+ *     ary.shuffle!   ->   ary
+ *
+ *  Shuffles elements in self in place.
+ */
+
+static mrb_value
+mrb_ary_shuffle_bang(mrb_state *mrb, mrb_value ary)
+{
+  mrb_int i;
+  mrb_value max;
+  mrb_value r = mrb_nil_value();
+  rand_state *random;
+
+  if (RARRAY_LEN(ary) > 1) {
+    mrb_get_args(mrb, "|o", &r);
+
+    if (mrb_nil_p(r)) {
+      random = random_default_state(mrb);
+    }
+    else {
+      random_check(mrb, r);
+      random = random_ptr(r);
+    }
+    mrb_ary_modify(mrb, mrb_ary_ptr(ary));
+    max = mrb_fixnum_value(RARRAY_LEN(ary));
+    for (i = RARRAY_LEN(ary) - 1; i > 0; i--)  {
+      mrb_int j;
+      mrb_value *ptr = RARRAY_PTR(ary);
+      mrb_value tmp;
+
+      j = mrb_fixnum(random_rand(mrb, random, max));
+
+      tmp = ptr[i];
+      ptr[i] = ptr[j];
+      ptr[j] = tmp;
+    }
+  }
+
+  return ary;
+}
+
+/*
+ *  call-seq:
+ *     ary.shuffle   ->   new_ary
+ *
+ *  Returns a new array with elements of self shuffled.
+ */
+
+static mrb_value
+mrb_ary_shuffle(mrb_state *mrb, mrb_value ary)
+{
+  mrb_value new_ary = mrb_ary_new_from_values(mrb, RARRAY_LEN(ary), RARRAY_PTR(ary));
+  mrb_ary_shuffle_bang(mrb, new_ary);
+
+  return new_ary;
+}
+
+/*
+ *  call-seq:
+ *     ary.sample      ->   obj
+ *     ary.sample(n)   ->   new_ary
+ *
+ *  Choose a random element or +n+ random elements from the array.
+ *
+ *  The elements are chosen by using random and unique indices into the array
+ *  in order to ensure that an element doesn't repeat itself unless the array
+ *  already contained duplicate elements.
+ *
+ *  If the array is empty the first form returns +nil+ and the second form
+ *  returns an empty array.
+ */
+
+static mrb_value
+mrb_ary_sample(mrb_state *mrb, mrb_value ary)
+{
+  mrb_int n = 0;
+  mrb_bool given;
+  mrb_value r = mrb_nil_value();
+  rand_state *random;
+  mrb_int len;
+
+  mrb_get_args(mrb, "|i?o", &n, &given, &r);
+  if (mrb_nil_p(r)) {
+    random = random_default_state(mrb);
+  }
+  else {
+    random_check(mrb, r);
+    random = random_ptr(r);
+  }
+  len = RARRAY_LEN(ary);
+  if (!given) {                 /* pick one element */
+    switch (len) {
+    case 0:
+      return mrb_nil_value();
+    case 1:
+      return RARRAY_PTR(ary)[0];
+    default:
+      return RARRAY_PTR(ary)[rand_uint32(random) % len];
+    }
+  }
+  else {
+    mrb_value result;
+    mrb_int i, j;
+
+    if (n < 0) mrb_raise(mrb, E_ARGUMENT_ERROR, "negative sample number");
+    if (n > len) n = len;
+    result = mrb_ary_new_capa(mrb, n);
+    for (i=0; i<n; i++) {
+      mrb_int r;
+
+      for (;;) {
+      retry:
+        r = (mrb_int)(rand_uint32(random) % len);
+
+        for (j=0; j<i; j++) {
+          if (mrb_fixnum(RARRAY_PTR(result)[j]) == r) {
+            goto retry;         /* retry if duplicate */
+          }
+        }
+        break;
+      }
+      mrb_ary_push(mrb, result, mrb_fixnum_value(r));
+    }
+    for (i=0; i<n; i++) {
+      mrb_ary_set(mrb, result, i, RARRAY_PTR(ary)[mrb_fixnum(RARRAY_PTR(result)[i])]);
+    }
+    return result;
+  }
+}
+
+static mrb_value
+random_f_rand(mrb_state *mrb, mrb_value self)
+{
+  rand_state *t = random_default_state(mrb);
+  return random_rand(mrb, t, get_opt(mrb));
+}
+
+static mrb_value
+random_f_srand(mrb_state *mrb, mrb_value self)
+{
+  mrb_value random = random_default(mrb);
+  return random_m_srand(mrb, random);
+}
+
+
+void mrb_mruby_random_gem_init(mrb_state *mrb)
+{
+  struct RClass *random;
+  struct RClass *array = mrb->array_class;
+
+  mrb_assert(sizeof(rand_state) <= ISTRUCT_DATA_SIZE);
+
+  mrb_define_method(mrb, mrb->kernel_module, "rand", random_f_rand, MRB_ARGS_OPT(1));
+  mrb_define_method(mrb, mrb->kernel_module, "srand", random_f_srand, MRB_ARGS_OPT(1));
+
+  random = mrb_define_class(mrb, "Random", mrb->object_class);
+  MRB_SET_INSTANCE_TT(random, MRB_TT_ISTRUCT);
+  mrb_define_class_method(mrb, random, "rand", random_f_rand, MRB_ARGS_OPT(1));
+  mrb_define_class_method(mrb, random, "srand", random_f_srand, MRB_ARGS_OPT(1));
+
+  mrb_define_method(mrb, random, "initialize", random_m_init, MRB_ARGS_OPT(1));
+  mrb_define_method(mrb, random, "rand", random_m_rand, MRB_ARGS_OPT(1));
+  mrb_define_method(mrb, random, "srand", random_m_srand, MRB_ARGS_OPT(1));
+
+  mrb_define_method(mrb, array, "shuffle", mrb_ary_shuffle, MRB_ARGS_OPT(1));
+  mrb_define_method(mrb, array, "shuffle!", mrb_ary_shuffle_bang, MRB_ARGS_OPT(1));
+  mrb_define_method(mrb, array, "sample", mrb_ary_sample, MRB_ARGS_OPT(2));
+
+  mrb_const_set(mrb, mrb_obj_value(random), mrb_intern_lit(mrb, "DEFAULT"),
+          mrb_obj_new(mrb, random, 0, NULL));
+}
+
+void mrb_mruby_random_gem_final(mrb_state *mrb)
+{
+}
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-random/test/random.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-random/test/random.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-random/test/random.rb	(revision 439)
@@ -0,0 +1,122 @@
+##
+# Random Test
+
+assert("Random.new") do
+  r1 = Random.new(123)
+  r2 = Random.new(123)
+  r3 = Random.new(124)
+  assert_equal(r1.rand, r2.rand)
+  assert_not_equal(r1.rand, r3.rand)
+end
+
+assert("Kernel.srand") do
+  srand(234)
+  r1 = rand
+  srand(234)
+  r2 = rand
+  srand(235)
+  r3 = rand
+  assert_equal(r1, r2)
+  assert_not_equal(r1, r3)
+end
+
+assert("Random.srand") do
+  Random.srand(345)
+  r1 = rand
+  srand(345)
+  r2 = Random.rand
+  Random.srand(346)
+  r3 = rand
+  assert_equal(r1, r2)
+  assert_not_equal(r1, r3)
+end
+
+assert("return class of Kernel.rand") do
+  assert_kind_of(Fixnum, rand(3))
+  assert_kind_of(Fixnum, rand(1.5))
+  assert_kind_of(Float, rand)
+  assert_kind_of(Float, rand(0.5))
+end
+
+assert("Array#shuffle") do
+  orig = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
+  ary = orig.dup
+  shuffled = ary.shuffle
+  assert_equal(orig, ary)
+  assert_not_equal(ary, shuffled)
+  assert_equal(orig, shuffled.sort)
+end
+
+assert('Array#shuffle!') do
+  orig = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
+  ary = orig.dup
+  assert_same(ary, ary.shuffle!)
+  assert_not_equal(orig, ary)
+  assert_equal(orig, ary.sort)
+end
+
+assert("Array#shuffle(random)") do
+  assert_raise(TypeError) do
+    # this will cause an exception due to the wrong argument
+    [1, 2].shuffle "Not a Random instance"
+  end
+
+  # verify that the same seed causes the same results
+  ary = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
+  shuffled1 = ary.shuffle Random.new 345
+  shuffled2 = ary.shuffle Random.new 345
+  shuffled3 = ary.shuffle Random.new 346
+  assert_equal(shuffled1, shuffled2)
+  assert_not_equal(shuffled1, shuffled3)
+end
+
+assert('Array#shuffle!(random)') do
+  assert_raise(TypeError) do
+    # this will cause an exception due to the wrong argument
+    [1, 2].shuffle! "Not a Random instance"
+  end
+
+  # verify that the same seed causes the same results
+  ary1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
+  ary1.shuffle! Random.new 345
+  ary2 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
+  ary2.shuffle! Random.new 345
+  ary3 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
+  ary3.shuffle! Random.new 346
+  assert_equal(ary1, ary2)
+  assert_not_equal(ary1, ary3)
+end
+
+assert('Array#sample') do
+  100.times do
+    assert_include([0, 1, 2], [2, 1, 0].sample)
+    [2, 1, 0].sample(2).each { |sample| assert_include([0, 1, 2], sample) }
+    h = {}
+    (1..10).to_a.sample(7).each do |sample|
+      assert_not_include(h, sample)
+      h[sample] = true
+    end
+  end
+
+  assert_nil([].sample)
+  assert_equal([], [].sample(1))
+  assert_equal([], [2, 1].sample(0))
+  assert_raise(TypeError) { [2, 1].sample(true) }
+  assert_raise(ArgumentError) { [2, 1].sample(-1) }
+end
+
+assert('Array#sample(random)') do
+  assert_raise(TypeError) do
+    # this will cause an exception due to the wrong argument
+    [1, 2].sample(2, "Not a Random instance")
+  end
+
+  # verify that the same seed causes the same results
+  ary = (1..10).to_a
+  srand(15)
+  samples1 = ary.sample(4)
+  samples2 = ary.sample(4, Random.new(15))
+  samples3 = ary.sample(4, Random.new(16))
+  assert_equal(samples1, samples2)
+  assert_not_equal(samples1, samples3)
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-range-ext/mrbgem.rake
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-range-ext/mrbgem.rake	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-range-ext/mrbgem.rake	(revision 439)
@@ -0,0 +1,5 @@
+MRuby::Gem::Specification.new('mruby-range-ext') do |spec|
+  spec.license = 'MIT'
+  spec.author  = 'mruby developers'
+  spec.summary = 'Range class extension'
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-range-ext/mrblib/range.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-range-ext/mrblib/range.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-range-ext/mrblib/range.rb	(revision 439)
@@ -0,0 +1,66 @@
+class Range
+  ##
+  # call-seq:
+  #    rng.first    -> obj
+  #    rng.first(n) -> an_array
+  #
+  # Returns the first object in the range, or an array of the first +n+
+  # elements.
+  #
+  #   (10..20).first     #=> 10
+  #   (10..20).first(3)  #=> [10, 11, 12]
+  #
+  def first(*args)
+    return self.begin if args.empty?
+
+    raise ArgumentError, "wrong number of arguments (given #{args.length}, expected 1)" unless args.length == 1
+    nv = args[0]
+    n = nv.__to_int
+    raise ArgumentError, "negative array size (or size too big)" unless 0 <= n
+    ary = []
+    each do |i|
+      break if n <= 0
+      ary.push(i)
+      n -= 1
+    end
+    ary
+  end
+
+  def max(&block)
+    val = self.first
+    last = self.last
+    return super if block
+
+    # fast path for numerics
+    if val.kind_of?(Numeric) && last.kind_of?(Numeric)
+      raise TypeError if exclude_end? && !last.kind_of?(Fixnum)
+      return nil if val > last
+      return nil if val == last && exclude_end?
+
+      max = last
+      max -= 1 if exclude_end?
+      return max
+    end
+
+    # delegate to Enumerable
+    super
+  end
+
+  def min(&block)
+    val = self.first
+    last = self.last
+    return super if block
+
+    # fast path for numerics
+    if val.kind_of?(Numeric) && last.kind_of?(Numeric)
+      return nil if val > last
+      return nil if val == last && exclude_end?
+
+      min = val
+      return min
+    end
+
+    # delegate to Enumerable
+    super
+  end
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-range-ext/src/range.c
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-range-ext/src/range.c	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-range-ext/src/range.c	(revision 439)
@@ -0,0 +1,190 @@
+#include <mruby.h>
+#include <mruby/range.h>
+#include <math.h>
+
+static mrb_bool
+r_le(mrb_state *mrb, mrb_value a, mrb_value b)
+{
+  mrb_int n = mrb_cmp(mrb, a, b);
+
+  if (n == 0 || n == -1) return TRUE;
+  return FALSE;
+}
+
+static mrb_bool
+r_lt(mrb_state *mrb, mrb_value a, mrb_value b)
+{
+  return mrb_cmp(mrb, a, b) == -1;
+}
+
+/*
+ *  call-seq:
+ *     rng.cover?(obj)  ->  true or false
+ *
+ *  Returns <code>true</code> if +obj+ is between the begin and end of
+ *  the range.
+ *
+ *  This tests <code>begin <= obj <= end</code> when #exclude_end? is +false+
+ *  and <code>begin <= obj < end</code> when #exclude_end? is +true+.
+ *
+ *     ("a".."z").cover?("c")    #=> true
+ *     ("a".."z").cover?("5")    #=> false
+ *     ("a".."z").cover?("cc")   #=> true
+ */
+static mrb_value
+range_cover(mrb_state *mrb, mrb_value range)
+{
+  mrb_value val;
+  struct RRange *r = mrb_range_ptr(mrb, range);
+  mrb_value beg, end;
+
+  mrb_get_args(mrb, "o", &val);
+
+  beg = RANGE_BEG(r);
+  end = RANGE_END(r);
+
+  if (r_le(mrb, beg, val)) {
+    if (RANGE_EXCL(r)) {
+      if (r_lt(mrb, val, end))
+        return mrb_true_value();
+    }
+    else {
+      if (r_le(mrb, val, end))
+        return mrb_true_value();
+    }
+  }
+
+  return mrb_false_value();
+}
+
+/*
+ *  call-seq:
+ *     rng.last    -> obj
+ *     rng.last(n) -> an_array
+ *
+ *  Returns the last object in the range,
+ *  or an array of the last +n+ elements.
+ *
+ *  Note that with no arguments +last+ will return the object that defines
+ *  the end of the range even if #exclude_end? is +true+.
+ *
+ *    (10..20).last      #=> 20
+ *    (10...20).last     #=> 20
+ *    (10..20).last(3)   #=> [18, 19, 20]
+ *    (10...20).last(3)  #=> [17, 18, 19]
+ */
+static mrb_value
+range_last(mrb_state *mrb, mrb_value range)
+{
+  mrb_value num;
+  mrb_value array;
+
+  if (mrb_get_args(mrb, "|o", &num) == 0) {
+    return mrb_range_end(mrb, range);
+  }
+
+  array = mrb_funcall(mrb, range, "to_a", 0);
+  return mrb_funcall(mrb, array, "last", 1, mrb_to_int(mrb, num));
+}
+
+/*
+ *  call-seq:
+ *     rng.size                   -> num
+ *
+ *  Returns the number of elements in the range. Both the begin and the end of
+ *  the Range must be Numeric, otherwise nil is returned.
+ *
+ *    (10..20).size    #=> 11
+ *    ('a'..'z').size  #=> nil
+ */
+
+#ifndef MRB_WITHOUT_FLOAT
+static mrb_value
+range_size(mrb_state *mrb, mrb_value range)
+{
+  struct RRange *r = mrb_range_ptr(mrb, range);
+  mrb_value beg, end;
+  mrb_float beg_f, end_f;
+  mrb_bool num_p = TRUE;
+  mrb_bool excl;
+
+  beg = RANGE_BEG(r);
+  end = RANGE_END(r);
+  excl = RANGE_EXCL(r);
+  if (mrb_fixnum_p(beg)) {
+    beg_f = (mrb_float)mrb_fixnum(beg);
+  }
+  else if (mrb_float_p(beg)) {
+    beg_f = mrb_float(beg);
+  }
+  else {
+    num_p = FALSE;
+  }
+  if (mrb_fixnum_p(end)) {
+    end_f = (mrb_float)mrb_fixnum(end);
+  }
+  else if (mrb_float_p(end)) {
+    end_f = mrb_float(end);
+  }
+  else {
+    num_p = FALSE;
+  }
+  if (num_p) {
+    mrb_float n = end_f - beg_f;
+    mrb_float err = (fabs(beg_f) + fabs(end_f) + fabs(end_f-beg_f)) * MRB_FLOAT_EPSILON;
+
+    if (err>0.5) err=0.5;
+    if (excl) {
+      if (n<=0) return mrb_fixnum_value(0);
+      if (n<1)
+        n = 0;
+      else
+        n = floor(n - err);
+    }
+    else {
+      if (n<0) return mrb_fixnum_value(0);
+      n = floor(n + err);
+    }
+    if (isinf(n+1))
+      return mrb_float_value(mrb, INFINITY);
+    return mrb_fixnum_value((mrb_int)n+1);
+  }
+  return mrb_nil_value();
+}
+#else
+static mrb_value
+range_size(mrb_state *mrb, mrb_value range)
+{
+  struct RRange *r = mrb_range_ptr(mrb, range);
+  mrb_value beg, end;
+  mrb_int excl;
+
+  beg = RANGE_BEG(r);
+  end = RANGE_END(r);
+  excl = RANGE_EXCL(r) ? 0 : 1;
+
+  if (mrb_fixnum_p(beg) && mrb_fixnum_p(end)) {
+    mrb_int a = mrb_fixnum(beg);
+    mrb_int b = mrb_fixnum(end);
+    mrb_int c = b - a + excl;
+
+    return mrb_fixnum_value(c);
+  }
+  return mrb_nil_value();
+}
+#endif /* MRB_WITHOUT_FLOAT */
+
+void
+mrb_mruby_range_ext_gem_init(mrb_state* mrb)
+{
+  struct RClass * s = mrb_class_get(mrb, "Range");
+
+  mrb_define_method(mrb, s, "cover?", range_cover, MRB_ARGS_REQ(1));
+  mrb_define_method(mrb, s, "last",   range_last,  MRB_ARGS_OPT(1));
+  mrb_define_method(mrb, s, "size",   range_size,  MRB_ARGS_NONE());
+}
+
+void
+mrb_mruby_range_ext_gem_final(mrb_state* mrb)
+{
+}
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-range-ext/test/range.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-range-ext/test/range.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-range-ext/test/range.rb	(revision 439)
@@ -0,0 +1,142 @@
+##
+# Range(Ext) Test
+
+assert('Range#cover?') do
+  assert_true ("a".."z").cover?("c")
+  assert_true !("a".."z").cover?("5")
+  assert_true ("a".."z").cover?("cc")
+end
+
+assert('Range#first') do
+  assert_equal 10, (10..20).first
+  assert_equal [10, 11, 12], (10..20).first(3)
+
+  skip unless Object.const_defined?(:Float)
+  assert_equal [0, 1, 2], (0..Float::INFINITY).first(3)
+end
+
+assert('Range#last') do
+  assert_equal 20, (10..20).last
+  assert_equal 20, (10...20).last
+  assert_equal [18, 19, 20], (10..20).last(3)
+  assert_equal [17, 18, 19], (10...20).last(3)
+end
+
+assert('Range#size') do
+  assert_equal 42, (1..42).size
+  assert_equal 41, (1...42).size
+  assert_nil ('a'..'z').size
+
+  skip unless Object.const_defined?(:Float)
+  assert_equal 6, (1...6.3).size
+  assert_equal 5, (1...6.0).size
+  assert_equal 5, (1.1...6).size
+  assert_equal 15, (1.0..15.9).size
+  assert_equal Float::INFINITY, (0..Float::INFINITY).size
+end
+
+assert('Range#max') do
+  # returns the maximum value in the range when called with no arguments
+  assert_equal 10, (1..10).max
+  assert_equal 9, (1...10).max
+  assert_equal 536870911, (0...2**29).max
+
+  # returns nil when the endpoint is less than the start point
+  assert_equal nil, (100..10).max
+
+  # returns nil when the endpoint equals the start point and the range is exclusive
+  assert_equal nil, (5...5).max
+
+  # returns the endpoint when the endpoint equals the start point and the range is inclusive
+  assert_equal 5, (5..5).max
+
+  skip unless Object.const_defined?(:Float)
+
+  # returns the maximum value in the Float range when called with no arguments
+  assert_equal 908.1111, (303.20..908.1111).max
+
+  # raises TypeError when called on an exclusive range and a non Integer value
+  assert_raise(TypeError) { (303.20...908.1111).max }
+
+  # returns nil when the endpoint is less than the start point in a Float range
+  assert_equal nil, (3003.20..908.1111).max
+end
+
+assert('Range#max given a block') do
+  # passes each pair of values in the range to the block
+  acc = []
+  (1..10).max do |a, b|
+    acc << a
+    acc << b
+    a
+  end
+  (1..10).each do |value|
+    assert_true acc.include?(value)
+  end
+
+  # passes each pair of elements to the block in reversed order
+  acc = []
+  (1..5).max do |a, b|
+    acc << [a, b]
+    a
+  end
+  assert_equal [[2, 1], [3, 2], [4, 3], [5, 4]], acc
+
+  # returns the element the block determines to be the maximum
+  assert_equal 1, ((1..3).max { |_a, _b| -3 })
+
+  # returns nil when the endpoint is less than the start point
+  assert_equal nil, ((100..10).max { |x, y| x <=> y })
+  assert_equal nil, ((5...5).max { |x, y| x <=> y })
+end
+
+assert('Range#min') do
+  # returns the minimum value in the range when called with no arguments
+  assert_equal 1, (1..10).min
+  assert_equal 1, (1...10).min
+
+  # returns nil when the start point is greater than the endpoint
+  assert_equal nil, (100..10).min
+
+  # returns nil when the endpoint equals the start point and the range is exclusive
+  assert_equal nil, (5...5).max
+
+  # returns the endpoint when the endpoint equals the start point and the range is inclusive
+  assert_equal 5, (5..5).max
+
+  skip unless Object.const_defined?(:Float)
+
+  # returns the minimum value in the Float range when called with no arguments
+  assert_equal 303.20, (303.20..908.1111).min
+
+  # returns nil when the start point is greater than the endpoint in a Float range
+  assert_equal nil, (3003.20..908.1111).max
+end
+
+assert('Range#min given a block') do
+  # passes each pair of values in the range to the block
+  acc = []
+  (1..10).min do |a, b|
+    acc << a
+    acc << b
+    a
+  end
+  (1..10).each do |value|
+    assert_true acc.include?(value)
+  end
+
+  # passes each pair of elements to the block in reversed order
+  acc = []
+  (1..5).min do |a, b|
+    acc << [a, b]
+    a
+  end
+  assert_equal [[2, 1], [3, 1], [4, 1], [5, 1]], acc
+
+  # returns the element the block determines to be the minimum
+  assert_equal 3, ((1..3).min { |_a, _b| -3 })
+
+  # returns nil when the start point is greater than the endpoint
+  assert_equal nil, ((100..10).min { |x, y| x <=> y })
+  assert_equal nil, ((5...5).min { |x, y| x <=> y })
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-rational/mrbgem.rake
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-rational/mrbgem.rake	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-rational/mrbgem.rake	(revision 439)
@@ -0,0 +1,5 @@
+MRuby::Gem::Specification.new('mruby-rational') do |spec|
+  spec.license = 'MIT'
+  spec.author  = 'mruby developers'
+  spec.summary = 'Rational class'
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-rational/mrblib/rational.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-rational/mrblib/rational.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-rational/mrblib/rational.rb	(revision 439)
@@ -0,0 +1,117 @@
+class Rational < Numeric
+  def inspect
+    "(#{to_s})"
+  end
+
+  def to_s
+    "#{numerator}/#{denominator}"
+  end
+
+  def *(rhs)
+    if rhs.is_a? Rational
+      Rational(numerator * rhs.numerator, denominator * rhs.denominator)
+    elsif rhs.is_a? Integer
+      Rational(numerator * rhs, denominator)
+    elsif rhs.is_a? Numeric
+      numerator * rhs / denominator
+    end
+  end
+
+  def +(rhs)
+    if rhs.is_a? Rational
+      Rational(numerator * rhs.denominator + rhs.numerator * denominator, denominator * rhs.denominator)
+    elsif rhs.is_a? Integer
+      Rational(numerator + rhs * denominator, denominator)
+    elsif rhs.is_a? Numeric
+      (numerator + rhs * denominator) / denominator
+    end
+  end
+
+  def -(rhs)
+    if rhs.is_a? Rational
+      Rational(numerator * rhs.denominator - rhs.numerator * denominator, denominator * rhs.denominator)
+    elsif rhs.is_a? Integer
+      Rational(numerator - rhs * denominator, denominator)
+    elsif rhs.is_a? Numeric
+      (numerator - rhs * denominator) / denominator
+    end
+  end
+
+  def /(rhs)
+    if rhs.is_a? Rational
+      Rational(numerator * rhs.denominator, denominator * rhs.numerator)
+    elsif rhs.is_a? Integer
+      Rational(numerator, denominator * rhs)
+    elsif rhs.is_a? Numeric
+      numerator / rhs / denominator
+    end
+  end
+
+  def <=>(rhs)
+    if rhs.is_a?(Integral)
+      return numerator <=> rhs if denominator == 1
+      rhs = Rational(rhs)
+    end
+
+    case rhs
+    when Rational
+      (numerator * rhs.denominator - denominator * rhs.numerator) <=> 0
+    when Numeric
+      (rhs <=> self)&.-@
+    else
+      nil
+    end
+  end
+
+  def ==(rhs)
+    return true if self.equal?(rhs)
+    if rhs.is_a?(Integral) && denominator == 1
+      return numerator == rhs
+    end
+    if rhs.is_a?(Rational)
+      numerator * rhs.denominator == denominator * rhs.numerator
+    else
+      rhs == self
+    end
+  end
+end
+
+class Numeric
+  def to_r
+    Rational(self, 1)
+  end
+end
+
+module Kernel
+  def Rational(numerator, denominator = 1)
+    a = numerator
+    b = denominator
+    a, b = b, a % b until b == 0
+    Rational._new(numerator.div(a), denominator.div(a))
+  end
+
+  [:+, :-, :*, :/, :<=>, :==, :<, :<=, :>, :>=].each do |op|
+    Fixnum.instance_eval do
+      original_operator_name = "__original_operator_#{op}_rational"
+      alias_method original_operator_name, op
+      define_method op do |rhs|
+        if rhs.is_a? Rational
+          Rational(self).__send__(op, rhs)
+        else
+          __send__(original_operator_name, rhs)
+        end
+      end
+    end
+    Float.instance_eval do
+      original_operator_name = "__original_operator_#{op}_rational"
+      alias_method original_operator_name, op
+      define_method op do |rhs|
+        if rhs.is_a? Rational
+          rhs = rhs.to_f
+        end
+        __send__(original_operator_name, rhs)
+      end
+    end if Object.const_defined?(:Float)
+  end
+end
+
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-rational/src/rational.c
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-rational/src/rational.c	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-rational/src/rational.c	(revision 439)
@@ -0,0 +1,209 @@
+#include <mruby.h>
+#include <mruby/class.h>
+#include <mruby/string.h>
+#include <mruby/numeric.h>
+
+struct mrb_rational {
+  mrb_int numerator;
+  mrb_int denominator;
+};
+
+#if MRB_INT_MAX <= INTPTR_MAX
+
+#define RATIONAL_USE_ISTRUCT
+/* use TT_ISTRUCT */
+#include <mruby/istruct.h>
+
+#define rational_ptr(mrb, v) (struct mrb_rational*)mrb_istruct_ptr(v)
+
+static struct RBasic*
+rational_alloc(mrb_state *mrb, struct RClass *c, struct mrb_rational **p)
+{
+  struct RIStruct *s;
+
+  s = (struct RIStruct*)mrb_obj_alloc(mrb, MRB_TT_ISTRUCT, c);
+  *p = (struct mrb_rational*)s->inline_data;
+
+  return (struct RBasic*)s;
+}
+
+#else
+/* use TT_DATA */
+#include <mruby/data.h>
+
+static const struct mrb_data_type mrb_rational_type = {"Rational", mrb_free};
+
+static struct RBasic*
+rational_alloc(mrb_state *mrb, struct RClass *c, struct mrb_rational **p)
+{
+  struct RData *d;
+
+  Data_Make_Struct(mrb, c, struct mrb_rational, &mrb_rational_type, *p, d);
+
+  return (struct RBasic*)d;
+}
+
+static struct mrb_rational*
+rational_ptr(mrb_state *mrb, mrb_value v)
+{
+  struct mrb_rational *p;
+
+  p = DATA_GET_PTR(mrb, v, &mrb_rational_type, struct mrb_rational);
+  if (!p) {
+    mrb_raise(mrb, E_ARGUMENT_ERROR, "uninitialized rational");
+  }
+  return p;
+}
+#endif
+
+static mrb_value
+rational_numerator(mrb_state *mrb, mrb_value self)
+{
+  struct mrb_rational *p = rational_ptr(mrb, self);
+  return mrb_fixnum_value(p->numerator);
+}
+
+static mrb_value
+rational_denominator(mrb_state *mrb, mrb_value self)
+{
+  struct mrb_rational *p = rational_ptr(mrb, self);
+  return mrb_fixnum_value(p->denominator);
+}
+
+static mrb_value
+rational_new(mrb_state *mrb, mrb_int numerator, mrb_int denominator)
+{
+  struct RClass *c = mrb_class_get(mrb, "Rational");
+  struct mrb_rational *p;
+  struct RBasic *rat = rational_alloc(mrb, c, &p);
+  p->numerator = numerator;
+  p->denominator = denominator;
+  MRB_SET_FROZEN_FLAG(rat);
+  return mrb_obj_value(rat);
+}
+
+static mrb_value
+rational_s_new(mrb_state *mrb, mrb_value self)
+{
+  mrb_int numerator, denominator;
+
+#ifdef MRB_WITHOUT_FLOAT
+  mrb_get_args(mrb, "ii", &numerator, &denominator);
+#else
+
+#define DROP_PRECISION(cond, num, denom) \
+  do { \
+      while (cond) { \
+        num /= 2; \
+        denom /= 2; \
+      } \
+  } while (0)
+
+  mrb_value numv, denomv;
+
+  mrb_get_args(mrb, "oo", &numv, &denomv);
+  if (mrb_fixnum_p(numv)) {
+    numerator = mrb_fixnum(numv);
+
+    if (mrb_fixnum_p(denomv)) {
+      denominator = mrb_fixnum(denomv);
+    }
+    else {
+      mrb_float denomf = mrb_to_flo(mrb, denomv);
+
+      DROP_PRECISION(denomf < MRB_INT_MIN || denomf > MRB_INT_MAX, numerator, denomf);
+      denominator = denomf;
+    }
+  }
+  else {
+    mrb_float numf = mrb_to_flo(mrb, numv);
+
+    if (mrb_fixnum_p(denomv)) {
+      denominator = mrb_fixnum(denomv);
+    }
+    else {
+      mrb_float denomf = mrb_to_flo(mrb, denomv);
+
+      DROP_PRECISION(denomf < MRB_INT_MIN || denomf > MRB_INT_MAX, numf, denomf);
+      denominator = denomf;
+    }
+
+    DROP_PRECISION(numf < MRB_INT_MIN || numf > MRB_INT_MAX, numf, denominator);
+    numerator = numf;
+  }
+#endif
+
+  return rational_new(mrb, numerator, denominator);
+}
+
+#ifndef MRB_WITHOUT_FLOAT
+static mrb_value
+rational_to_f(mrb_state *mrb, mrb_value self)
+{
+  struct mrb_rational *p = rational_ptr(mrb, self);
+  mrb_float f = (mrb_float)p->numerator / (mrb_float)p->denominator;
+
+  return mrb_float_value(mrb, f);
+}
+#endif
+
+static mrb_value
+rational_to_i(mrb_state *mrb, mrb_value self)
+{
+  struct mrb_rational *p = rational_ptr(mrb, self);
+  if (p->denominator == 0) {
+    mrb_raise(mrb, mrb_exc_get(mrb, "StandardError"), "divided by 0");
+  }
+  return mrb_fixnum_value(p->numerator / p->denominator);
+}
+
+static mrb_value
+rational_to_r(mrb_state *mrb, mrb_value self)
+{
+  return self;
+}
+
+static mrb_value
+rational_negative_p(mrb_state *mrb, mrb_value self)
+{
+  struct mrb_rational *p = rational_ptr(mrb, self);
+  if (p->numerator < 0) {
+    return mrb_true_value();
+  }
+  return mrb_false_value();
+}
+
+static mrb_value
+fix_to_r(mrb_state *mrb, mrb_value self)
+{
+  return rational_new(mrb, mrb_fixnum(self), 1);
+}
+
+void mrb_mruby_rational_gem_init(mrb_state *mrb)
+{
+  struct RClass *rat;
+
+  rat = mrb_define_class(mrb, "Rational", mrb_class_get(mrb, "Numeric"));
+#ifdef RATIONAL_USE_ISTRUCT
+  MRB_SET_INSTANCE_TT(rat, MRB_TT_ISTRUCT);
+  mrb_assert(sizeof(struct mrb_rational) < ISTRUCT_DATA_SIZE);
+#else
+  MRB_SET_INSTANCE_TT(rat, MRB_TT_DATA);
+#endif
+  mrb_undef_class_method(mrb, rat, "new");
+  mrb_define_class_method(mrb, rat, "_new", rational_s_new, MRB_ARGS_REQ(2));
+  mrb_define_method(mrb, rat, "numerator", rational_numerator, MRB_ARGS_NONE());
+  mrb_define_method(mrb, rat, "denominator", rational_denominator, MRB_ARGS_NONE());
+#ifndef MRB_WITHOUT_FLOAT
+  mrb_define_method(mrb, rat, "to_f", rational_to_f, MRB_ARGS_NONE());
+#endif
+  mrb_define_method(mrb, rat, "to_i", rational_to_i, MRB_ARGS_NONE());
+  mrb_define_method(mrb, rat, "to_r", rational_to_r, MRB_ARGS_NONE());
+  mrb_define_method(mrb, rat, "negative?", rational_negative_p, MRB_ARGS_NONE());
+  mrb_define_method(mrb, mrb->fixnum_class, "to_r", fix_to_r, MRB_ARGS_NONE());
+}
+
+void
+mrb_mruby_rational_gem_final(mrb_state* mrb)
+{
+}
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-rational/test/rational.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-rational/test/rational.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-rational/test/rational.rb	(revision 439)
@@ -0,0 +1,308 @@
+class UserDefinedNumeric < Numeric
+  def initialize(n)
+    @n = n
+  end
+
+  def <=>(rhs)
+    return nil unless rhs.respond_to?(:to_i)
+    rhs = rhs.to_i
+    rhs < 0 ? nil : @n <=> rhs
+  end
+
+  def inspect
+    "#{self.class}(#{@n})"
+  end
+end
+
+class ComplexLikeNumeric < UserDefinedNumeric
+  def ==(rhs)
+    @n == 0 && rhs == 0
+  end
+
+  undef <=>
+end
+
+def assert_rational(exp, real)
+  assert "assert_rational" do
+    assert_float exp.numerator,   real.numerator
+    assert_float exp.denominator, real.denominator
+  end
+end
+
+def assert_equal_rational(exp, o1, o2)
+  assert "assert_equal_rational" do
+    if exp
+      assert_operator(o1, :==, o2)
+      assert_not_operator(o1, :!=, o2)
+    else
+      assert_not_operator(o1, :==, o2)
+      assert_operator(o1, :!=, o2)
+    end
+  end
+end
+
+def assert_cmp(exp, o1, o2)
+  if exp == (o1 <=> o2)
+    pass
+  else
+    flunk "", "    Expected #{o1.inspect} <=> #{o2.inspect} to be #{exp}."
+  end
+end
+
+assert 'Rational' do
+  r = 5r
+  assert_equal(Rational, r.class)
+  assert_equal([5, 1], [r.numerator, r.denominator])
+end
+
+assert 'Kernel#Rational' do
+  r = Rational(4,10)
+  assert_equal(2, r.numerator)
+  assert_equal(5, r.denominator)
+
+  r = Rational(3)
+  assert_equal(3, r.numerator)
+  assert_equal(1, r.denominator)
+
+  assert_raise(ArgumentError) { Rational() }
+  assert_raise(ArgumentError) { Rational(1,2,3) }
+end
+
+assert 'Rational#to_f' do
+  assert_float(2.0, Rational(2).to_f)
+  assert_float(2.25, Rational(9, 4).to_f)
+  assert_float(-0.75, Rational(-3, 4).to_f)
+  assert_float(6.666666666666667, Rational(20, 3).to_f)
+end
+
+assert 'Rational#to_i' do
+  assert_equal(0, Rational(2, 3).to_i)
+  assert_equal(3, Rational(3).to_i)
+  assert_equal(300, Rational(300.6).to_i)
+  assert_equal(1, Rational(98, 71).to_i)
+  assert_equal(-15, Rational(-30, 2).to_i)
+end
+
+assert 'Rational#*' do
+  assert_rational(Rational(4, 9),    Rational(2, 3)  * Rational(2, 3))
+  assert_rational(Rational(900, 1),  Rational(900)   * Rational(1))
+  assert_rational(Rational(1, 1),    Rational(-2, 9) * Rational(-9, 2))
+  assert_rational(Rational(9, 2),    Rational(9, 8)  * 4)
+  assert_float(   21.77777777777778, Rational(20, 9) * 9.8)
+end
+
+assert 'Rational#+' do
+  assert_rational(Rational(4, 3),     Rational(2, 3)  + Rational(2, 3))
+  assert_rational(Rational(901, 1),   Rational(900)   + Rational(1))
+  assert_rational(Rational(-85, 18),  Rational(-2, 9) + Rational(-9, 2))
+  assert_rational(Rational(41, 8),    Rational(9, 8)  + 4)
+  assert_float(   12.022222222222222, Rational(20, 9) + 9.8)
+end
+
+assert 'Rational#-' do
+  assert_rational(Rational(0, 1),     Rational(2, 3)  - Rational(2, 3))
+  assert_rational(Rational(899, 1),   Rational(900)   - Rational(1))
+  assert_rational(Rational(77, 18),   Rational(-2, 9) - Rational(-9, 2))
+  assert_rational(Rational(-23, 8),   Rational(9, 8)  - 4)
+  assert_float(   -7.577777777777778, Rational(20, 9) - 9.8)
+end
+
+assert 'Rational#/' do
+  assert_rational(Rational(1, 1),      Rational(2, 3)  / Rational(2, 3))
+  assert_rational(Rational(900, 1),    Rational(900)   / Rational(1))
+  assert_rational(Rational(4, 81),     Rational(-2, 9) / Rational(-9, 2))
+  assert_rational(Rational(9, 32),     Rational(9, 8)  / 4)
+  assert_float(   0.22675736961451246, Rational(20, 9) / 9.8)
+end
+
+assert 'Rational#==, Rational#!=' do
+  assert_equal_rational(true, Rational(1,1), Rational(1))
+  assert_equal_rational(true, Rational(-1,1), -1r)
+  assert_equal_rational(true, Rational(13,4), 3.25)
+  assert_equal_rational(true, Rational(13,3.25), Rational(4,1))
+  assert_equal_rational(true, Rational(-3,-4), Rational(3,4))
+  assert_equal_rational(true, Rational(-4,5), Rational(4,-5))
+  assert_equal_rational(true, Rational(4,2), 2)
+  assert_equal_rational(true, Rational(-4,2), -2)
+  assert_equal_rational(true, Rational(4,-2), -2)
+  assert_equal_rational(true, Rational(4,2), 2.0)
+  assert_equal_rational(true, Rational(-4,2), -2.0)
+  assert_equal_rational(true, Rational(4,-2), -2.0)
+  assert_equal_rational(true, Rational(8,6), Rational(4,3))
+  assert_equal_rational(false, Rational(13,4), 3)
+  assert_equal_rational(false, Rational(13,4), 3.3)
+  assert_equal_rational(false, Rational(2,1), 1r)
+  assert_equal_rational(false, Rational(1), nil)
+  assert_equal_rational(false, Rational(1), '')
+  assert_equal_rational(true, 0r, UserDefinedNumeric.new(0))
+  assert_equal_rational(true, 1r, UserDefinedNumeric.new(1))
+  assert_equal_rational(false, 1r, UserDefinedNumeric.new(2))
+  assert_equal_rational(false, -1r, UserDefinedNumeric.new(-1))
+  assert_equal_rational(true, 0r, ComplexLikeNumeric.new(0))
+  assert_equal_rational(false, 1r, ComplexLikeNumeric.new(1))
+  assert_equal_rational(false, 1r, ComplexLikeNumeric.new(2))
+end
+
+assert 'Fixnum#==(Rational), Fixnum#!=(Rational)' do
+  assert_equal_rational(true, 2, Rational(4,2))
+  assert_equal_rational(true, -2, Rational(-4,2))
+  assert_equal_rational(true, -2, Rational(4,-2))
+  assert_equal_rational(false, 3, Rational(13,4))
+end
+
+assert 'Float#==(Rational), Float#!=(Rational)' do
+  assert_equal_rational(true, 2.0, Rational(4,2))
+  assert_equal_rational(true, -2.0, Rational(-4,2))
+  assert_equal_rational(true, -2.0, Rational(4,-2))
+  assert_equal_rational(false, 3.3, Rational(13,4))
+end
+
+assert 'Rational#<=>' do
+  assert_cmp(-1, Rational(-1), Rational(0))
+  assert_cmp(0, Rational(0), Rational(0))
+  assert_cmp(1, Rational(1), Rational(0))
+  assert_cmp(-1, Rational(-1), 0)
+  assert_cmp(0, Rational(0), 0)
+  assert_cmp(1, Rational(1), 0)
+  assert_cmp(-1, Rational(-1), 0.0)
+  assert_cmp(0, Rational(0), 0.0)
+  assert_cmp(1, Rational(1), 0.0)
+  assert_cmp(-1, Rational(1,2), Rational(2,3))
+  assert_cmp(0, Rational(2,3), Rational(2,3))
+  assert_cmp(1, Rational(2,3), Rational(1,2))
+  assert_cmp(1, Rational(2,3), Rational(1,2))
+  assert_cmp(1, Rational(0), Rational(-1))
+  assert_cmp(-1, Rational(0), Rational(1))
+  assert_cmp(1, Rational(2,3), Rational(1,2))
+  assert_cmp(0, Rational(2,3), Rational(2,3))
+  assert_cmp(-1, Rational(1,2), Rational(2,3))
+  assert_cmp(-1, Rational(1,2), Rational(2,3))
+  assert_cmp(nil, 3r, "3")
+  assert_cmp(1, 3r, UserDefinedNumeric.new(2))
+  assert_cmp(0, 3r, UserDefinedNumeric.new(3))
+  assert_cmp(-1, 3r, UserDefinedNumeric.new(4))
+  assert_cmp(nil, Rational(-3), UserDefinedNumeric.new(5))
+  assert_raise(NoMethodError) { 0r <=> ComplexLikeNumeric.new(0) }
+  assert_raise(NoMethodError) { 1r <=> ComplexLikeNumeric.new(2) }
+end
+
+assert 'Fixnum#<=>(Rational)' do
+  assert_cmp(-1, -2, Rational(-9,5))
+  assert_cmp(0, 5, 5r)
+  assert_cmp(1, 3, Rational(8,3))
+end
+
+assert 'Float#<=>(Rational)' do
+  assert_cmp(-1, -2.1, Rational(-9,5))
+  assert_cmp(0, 5.0, 5r)
+  assert_cmp(1, 2.7, Rational(8,3))
+end
+
+assert 'Rational#<' do
+  assert_operator(Rational(1,2), :<, Rational(2,3))
+  assert_not_operator(Rational(2,3), :<, Rational(2,3))
+  assert_operator(Rational(2,3), :<, 1)
+  assert_not_operator(2r, :<, 2)
+  assert_not_operator(Rational(2,3), :<, -3)
+  assert_operator(Rational(-4,3), :<, -0.3)
+  assert_not_operator(Rational(13,4), :<, 3.25)
+  assert_not_operator(Rational(2,3), :<, 0.6)
+  assert_raise(ArgumentError) { 1r < "2" }
+end
+
+assert 'Fixnum#<(Rational)' do
+  assert_not_operator(1, :<, Rational(2,3))
+  assert_not_operator(2, :<, 2r)
+  assert_operator(-3, :<, Rational(2,3))
+end
+
+assert 'Float#<(Rational)' do
+  assert_not_operator(-0.3, :<, Rational(-4,3))
+  assert_not_operator(3.25, :<, Rational(13,4))
+  assert_operator(0.6, :<, Rational(2,3))
+end
+
+assert 'Rational#<=' do
+  assert_operator(Rational(1,2), :<=, Rational(2,3))
+  assert_operator(Rational(2,3), :<=, Rational(2,3))
+  assert_operator(Rational(2,3), :<=, 1)
+  assert_operator(2r, :<=, 2)
+  assert_not_operator(Rational(2,3), :<=, -3)
+  assert_operator(Rational(-4,3), :<=, -0.3)
+  assert_operator(Rational(13,4), :<=, 3.25)
+  assert_not_operator(Rational(2,3), :<=, 0.6)
+  assert_raise(ArgumentError) { 1r <= "2" }
+end
+
+assert 'Fixnum#<=(Rational)' do
+  assert_not_operator(1, :<=, Rational(2,3))
+  assert_operator(2, :<=, 2r)
+  assert_operator(-3, :<=, Rational(2,3))
+end
+
+assert 'Float#<=(Rational)' do
+  assert_not_operator(-0.3, :<=, Rational(-4,3))
+  assert_operator(3.25, :<=, Rational(13,4))
+  assert_operator(0.6, :<=, Rational(2,3))
+end
+
+assert 'Rational#>' do
+  assert_not_operator(Rational(1,2), :>, Rational(2,3))
+  assert_not_operator(Rational(2,3), :>, Rational(2,3))
+  assert_not_operator(Rational(2,3), :>, 1)
+  assert_not_operator(2r, :>, 2)
+  assert_operator(Rational(2,3), :>, -3)
+  assert_not_operator(Rational(-4,3), :>, -0.3)
+  assert_not_operator(Rational(13,4), :>, 3.25)
+  assert_operator(Rational(2,3), :>, 0.6)
+  assert_raise(ArgumentError) { 1r > "2" }
+end
+
+assert 'Fixnum#>(Rational)' do
+  assert_operator(1, :>, Rational(2,3))
+  assert_not_operator(2, :>, 2r)
+  assert_not_operator(-3, :>, Rational(2,3))
+end
+
+assert 'Float#>(Rational)' do
+  assert_operator(-0.3, :>, Rational(-4,3))
+  assert_not_operator(3.25, :>, Rational(13,4))
+  assert_not_operator(0.6, :>, Rational(2,3))
+end
+
+assert 'Rational#>=' do
+  assert_not_operator(Rational(1,2), :>=, Rational(2,3))
+  assert_operator(Rational(2,3), :>=, Rational(2,3))
+  assert_not_operator(Rational(2,3), :>=, 1)
+  assert_operator(2r, :>=, 2)
+  assert_operator(Rational(2,3), :>=, -3)
+  assert_not_operator(Rational(-4,3), :>=, -0.3)
+  assert_operator(Rational(13,4), :>=, 3.25)
+  assert_operator(Rational(2,3), :>=, 0.6)
+  assert_raise(ArgumentError) { 1r >= "2" }
+end
+
+assert 'Fixnum#>=(Rational)' do
+  assert_operator(1, :>=, Rational(2,3))
+  assert_operator(2, :>=, 2r)
+  assert_not_operator(-3, :>=, Rational(2,3))
+end
+
+assert 'Float#>=(Rational)' do
+  assert_operator(-0.3, :>=, Rational(-4,3))
+  assert_operator(3.25, :>=, Rational(13,4))
+  assert_not_operator(0.6, :>=, Rational(2,3))
+end
+
+assert 'Rational#negative?' do
+  assert_predicate(Rational(-2,3), :negative?)
+  assert_predicate(Rational(2,-3), :negative?)
+  assert_not_predicate(Rational(2,3), :negative?)
+  assert_not_predicate(Rational(0), :negative?)
+end
+
+assert 'Rational#frozen?' do
+  assert_predicate(1r, :frozen?)
+  assert_predicate(Rational(2,3), :frozen?)
+  assert_predicate(4/5r, :frozen?)
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-sleep/README.md
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-sleep/README.md	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-sleep/README.md	(revision 439)
@@ -0,0 +1,27 @@
+# Sleep Module for mruby
+mruby sleep module
+
+## install by mrbgems
+ - add conf.gem line to `build_config.rb`
+```ruby
+MRuby::Build.new do |conf|
+
+    # ... (snip) ...
+
+    conf.gem :core => 'mruby-sleep'
+end
+```
+
+## example
+
+```ruby
+sleep(10)
+usleep(10000)
+```
+
+# License
+under the MIT License:
+
+* http://www.opensource.org/licenses/mit-license.php
+
+
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-sleep/example/sleep.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-sleep/example/sleep.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-sleep/example/sleep.rb	(revision 439)
@@ -0,0 +1,3 @@
+sleep(10)
+usleep(10000)
+
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-sleep/mrbgem.rake
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-sleep/mrbgem.rake	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-sleep/mrbgem.rake	(revision 439)
@@ -0,0 +1,5 @@
+MRuby::Gem::Specification.new('mruby-sleep') do |spec|
+  spec.license = 'MIT'
+  spec.authors = ['MATSUMOTO Ryosuke', 'mruby developers']
+  spec.version = '0.0.1'
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-sleep/src/mrb_sleep.c
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-sleep/src/mrb_sleep.c	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-sleep/src/mrb_sleep.c	(revision 439)
@@ -0,0 +1,136 @@
+/*
+** mrb_sleep - sleep methods for mruby
+**
+** Copyright (c) mod_mruby developers 2012-
+** Copyright (c) mruby developers 2018
+**
+** Permission is hereby granted, free of charge, to any person obtaining
+** a copy of this software and associated documentation files (the
+** "Software"), to deal in the Software without restriction, including
+** without limitation the rights to use, copy, modify, merge, publish,
+** distribute, sublicense, and/or sell copies of the Software, and to
+** permit persons to whom the Software is furnished to do so, subject to
+** the following conditions:
+**
+** The above copyright notice and this permission notice shall be
+** included in all copies or substantial portions of the Software.
+**
+** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+** SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+**
+** [ MIT license: http://www.opensource.org/licenses/mit-license.php ]
+*/
+
+#include <time.h>
+#ifdef _WIN32
+    #include <windows.h>
+    #define sleep(x) Sleep(x * 1000)
+    #define usleep(x) Sleep((DWORD)((x)<1000) ? 1 : ((x)/1000))
+#else
+    #include <unistd.h>
+    #include <sys/time.h>
+#endif
+
+#include "mruby.h"
+
+/* not implemented forever sleep (called without an argument)*/
+static mrb_value
+mrb_f_sleep(mrb_state *mrb, mrb_value self)
+{
+    time_t beg = time(0);
+    time_t end;
+#ifndef MRB_WITHOUT_FLOAT
+    mrb_float sec;
+
+    mrb_get_args(mrb, "f", &sec);
+    if (sec >= 0) {
+        usleep(sec * 1000000);
+    }
+    else {
+        mrb_raise(mrb, E_ARGUMENT_ERROR, "time interval must not be negative");
+    }
+#else
+    mrb_int sec;
+
+    mrb_get_args(mrb, "i", &sec);
+    if (sec >= 0) {
+        sleep(sec);
+    } else {
+        mrb_raise(mrb, E_ARGUMENT_ERROR, "time interval must not be negative");
+    }
+#endif
+    end = time(0) - beg;
+
+    return mrb_fixnum_value(end);
+}
+
+/* mruby special; needed for mruby without float numbers */
+static mrb_value
+mrb_f_usleep(mrb_state *mrb, mrb_value self)
+{
+    mrb_int usec;
+#ifdef _WIN32
+    FILETIME st_ft,ed_ft;
+    unsigned __int64 st_time = 0;
+    unsigned __int64 ed_time = 0;
+#else
+    struct timeval st_tm,ed_tm;
+#endif
+    time_t slp_tm;
+
+#ifdef _WIN32
+    GetSystemTimeAsFileTime(&st_ft);
+#else
+    gettimeofday(&st_tm, NULL);
+#endif
+
+    /* not implemented forever sleep (called without an argument)*/
+    mrb_get_args(mrb, "i", &usec);
+
+    if (usec >= 0) {
+        usleep(usec);
+    } else {
+        mrb_raise(mrb, E_ARGUMENT_ERROR, "time interval must not be negative integer");
+    }
+
+#ifdef _WIN32
+    GetSystemTimeAsFileTime(&ed_ft);
+
+    st_time |= st_ft.dwHighDateTime;
+    st_time <<=32;
+    st_time |= st_ft.dwLowDateTime;
+    ed_time |= ed_ft.dwHighDateTime;
+    ed_time <<=32;
+    ed_time |= ed_ft.dwLowDateTime;
+
+    slp_tm = (ed_time - st_time) / 10;
+#else
+    gettimeofday(&ed_tm, NULL);
+
+    if (st_tm.tv_usec > ed_tm.tv_usec) {
+        slp_tm = 1000000 + ed_tm.tv_usec - st_tm.tv_usec;
+    }
+    else {
+        slp_tm = ed_tm.tv_usec - st_tm.tv_usec;
+    }
+#endif
+
+    return mrb_fixnum_value(slp_tm);
+}
+
+void
+mrb_mruby_sleep_gem_init(mrb_state *mrb)
+{
+    mrb_define_method(mrb, mrb->kernel_module, "sleep",   mrb_f_sleep,   MRB_ARGS_REQ(1));
+    mrb_define_method(mrb, mrb->kernel_module, "usleep",  mrb_f_usleep,  MRB_ARGS_REQ(1));
+}
+
+void
+mrb_mruby_sleep_gem_final(mrb_state *mrb)
+{
+}
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-sleep/test/sleep_test.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-sleep/test/sleep_test.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-sleep/test/sleep_test.rb	(revision 439)
@@ -0,0 +1,29 @@
+assert("sleep works") do
+  assert_nothing_raised { sleep(1) }
+  assert_nothing_raised { sleep(0) }
+end
+
+assert("sleep would accept non-negative float value") do
+  skip unless Object.const_defined?(:Float)
+  assert_nothing_raised { sleep(0.01) }
+  assert_nothing_raised { sleep(0.0) }
+  assert_nothing_raised { sleep(-0.0) }
+end
+
+assert("sleep would not accept negative integer value") do
+  assert_raise(ArgumentError) { sleep(-1) }
+end
+
+assert("sleep would not accept negative float value") do
+  skip unless Object.const_defined?(:Float)
+  assert_raise(ArgumentError) { sleep(-0.1) }
+end
+
+assert("usleep works") do
+  assert_nothing_raised { usleep(100) }
+  assert_nothing_raised { usleep(0) }
+end
+
+assert("usleep would not accept negative value") do
+  assert_raise(ArgumentError) { usleep(-100) }
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-socket/README.md
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-socket/README.md	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-socket/README.md	(revision 439)
@@ -0,0 +1,56 @@
+mruby-socket
+============
+
+"mruby-socket" mrbgem provides BSD socket interface for mruby.
+API is compatible with CRuby's "socket" library.
+
+
+## Example
+```sh
+% vi kame.rb
+s = TCPSocket.open("www.kame.net", 80)
+s.write("GET / HTTP/1.0\r\n\r\n")
+puts s.read
+s.close
+
+% mruby kame.rb
+HTTP/1.1 200 OK
+Date: Tue, 21 May 2013 04:31:30 GMT
+...
+```
+
+## Requirement
+- [mruby-io](https://github.com/mruby/mruby/tree/master/mrbgems/mruby-io) mrbgem
+- [iij/mruby-mtest](https://github.com/iij/mruby-mtest) mrgbem to run tests
+- system must have RFC3493 basic socket interface
+- and some POSIX API...
+
+## TODO
+- add missing methods
+- write more tests
+- fix possible descriptor leakage (see XXX comments)
+- `UNIXSocket#recv_io` `UNIXSocket#send_io`
+
+
+## License
+
+Copyright (c) 2013 Internet Initiative Japan Inc.
+Copyright (c) 2017 mruby developers
+
+Permission is hereby granted, free of charge, to any person obtaining a
+copy of this software and associated documentation files (the "Software"),
+to deal in the Software without restriction, including without limitation
+the rights to use, copy, modify, merge, publish, distribute, sublicense,
+and/or sell copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-socket/mrbgem.rake
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-socket/mrbgem.rake	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-socket/mrbgem.rake	(revision 439)
@@ -0,0 +1,18 @@
+MRuby::Gem::Specification.new('mruby-socket') do |spec|
+  spec.license = 'MIT'
+  spec.authors = ['Internet Initiative Japan', 'mruby developers']
+  spec.summary = 'standard socket class'
+
+  spec.cc.include_paths << "#{build.root}/src"
+  #spec.cc.defines << "HAVE_SA_LEN=0"
+
+  # If Windows, use winsock
+  if for_windows?
+    spec.linker.libraries << "wsock32"
+    spec.linker.libraries << "ws2_32"
+  end
+
+  spec.add_dependency('mruby-io', :core => 'mruby-io')
+  spec.add_dependency('mruby-pack', :core => 'mruby-pack')
+  # spec.add_dependency('mruby-mtest')
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-socket/mrblib/socket.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-socket/mrblib/socket.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-socket/mrblib/socket.rb	(revision 439)
@@ -0,0 +1,621 @@
+class Addrinfo
+  def initialize(sockaddr, family=Socket::PF_UNSPEC, socktype=0, protocol=0)
+    @hostname = nil
+    if sockaddr.is_a? Array
+      sary = sockaddr
+      if sary[0] == 'AF_INET' || sary[0] == 'AF_INET6'
+        @sockaddr = Socket.sockaddr_in(sary[1], sary[3])
+        @hostname = sary[2]
+      elsif sary[0] == 'AF_UNIX'
+        @sockaddr = Socket.sockaddr_un(sary[1])
+      end
+    else
+      @sockaddr = sockaddr.dup
+    end
+    if family == Socket::PF_UNSPEC or family == nil
+      @family = Socket._sockaddr_family(@sockaddr)
+    else
+      @family = family
+    end
+    @socktype = socktype
+    @protocol = protocol
+    @canonname = nil
+  end
+
+  def self.foreach(nodename, service, family=nil, socktype=nil, protocol=nil, flags=0, &block)
+    a = self.getaddrinfo(nodename, service, family, socktype, protocol, flags)
+    a.each { |ai| block.call(ai) }
+    a
+  end
+
+  def self.ip(host)
+    Addrinfo.new(Socket.sockaddr_in(0, host))
+  end
+
+  def self.tcp(host, port)
+    Addrinfo.getaddrinfo(host, port, nil, Socket::SOCK_STREAM, Socket::IPPROTO_TCP)[0]
+  end
+
+  def self.udp(host, port)
+    Addrinfo.getaddrinfo(host, port, nil, Socket::SOCK_DGRAM, Socket::IPPROTO_UDP)[0]
+  end
+
+  def self.unix(path, socktype=Socket::SOCK_STREAM)
+    Addrinfo.new(Socket.sockaddr_un(path), Socket::AF_UNIX, socktype)
+  end
+
+  def afamily
+    @family
+  end
+
+  #def bind
+
+  attr_reader :canonname
+
+  #def connect
+  #def connect_from
+  #def connect_to
+
+  #def family_addrinfo(host, port=nil)
+  #def getnameinfo(flags=0)
+  #  Socket.getnameinfo
+  #end
+
+  def inspect
+    if ipv4? or ipv6?
+      if @protocol == Socket::IPPROTO_TCP or (@socktype == Socket::SOCK_STREAM and @protocol == 0)
+        proto = 'TCP'
+      elsif @protocol == Socket::IPPROTO_UDP or (@socktype == Socket::SOCK_DGRAM and @protocol == 0)
+        proto = 'UDP'
+      else
+        proto = '???'
+      end
+      "#<Addrinfo: #{inspect_sockaddr} #{proto}>"
+    else
+      "#<Addrinfo: #{self.unix_path} SOCK_STREAM>"
+    end
+  end
+
+  def inspect_sockaddr
+    if ipv4?
+      a, p = ip_unpack
+      "#{a}:#{p}"
+    elsif ipv6?
+      a, p = ip_unpack
+      "[#{a}]:#{p}"
+    elsif unix?
+      unix_path
+    else
+      '???'
+    end
+  end
+
+  def ip?
+    ipv4? or ipv6?
+  end
+
+  def ip_address
+    ip_unpack[0]
+  end
+
+  def ip_port
+    ip_unpack[1]
+  end
+
+  def ip_unpack
+    h, p = getnameinfo(Socket::NI_NUMERICHOST|Socket::NI_NUMERICSERV)
+    [ h, p.to_i ]
+  end
+
+  def ipv4?
+    @family == Socket::AF_INET
+  end
+
+  #def ipv4_loopback?
+  #def ipv4_multicast?
+  #def ipv4_private?
+
+  def ipv6?
+    @family == Socket::AF_INET6
+  end
+
+  #def ipv6_loopback?
+  #def ipv6_mc_global?
+  #def ipv6_mc_linklocal?
+  #def ipv6_mc_nodelocal?
+  #def ipv6_mc_orilocal?
+  #def ipv6_mc_sitelocal?
+  #def ipv6_multicast?
+  #def ipv6_to_ipv4
+  #def ipv6_unspecified
+  #def ipv6_v4compat?
+  #def ipv6_v4mapped?
+  #def listen(backlog=5)
+
+  def pfamily
+    @family
+  end
+
+  attr_reader :protocol
+  attr_reader :socktype
+
+  def _to_array
+    case @family
+    when Socket::AF_INET
+      s = "AF_INET"
+    when Socket::AF_INET6
+      s = "AF_INET6"
+    when Socket::AF_UNIX
+      s = "AF_UNIX"
+    else
+      s = "(unknown AF)"
+    end
+    addr, port = self.getnameinfo(Socket::NI_NUMERICHOST|Socket::NI_NUMERICSERV)
+    [ s, port.to_i, addr, addr ]
+  end
+
+  def to_sockaddr
+    @sockaddr
+  end
+
+  alias to_s to_sockaddr
+
+  def unix?
+    @family == Socket::AF_UNIX
+  end
+end
+
+class BasicSocket < IO
+  @@do_not_reverse_lookup = true
+
+  def self.do_not_reverse_lookup
+    @@do_not_reverse_lookup
+  end
+
+  def self.do_not_reverse_lookup=(val)
+    @@do_not_reverse_lookup = val ? true : false
+  end
+
+  def initialize(*args)
+    super(*args)
+    self._is_socket = true
+    @do_not_reverse_lookup = @@do_not_reverse_lookup
+  end
+
+  def self.for_fd(fd)
+    super(fd, "r+")
+  end
+
+  #def connect_address
+
+  def local_address
+    Addrinfo.new self.getsockname
+  end
+
+  def recv_nonblock(maxlen, flags=0)
+    begin
+      _setnonblock(true)
+      recv(maxlen, flags)
+    ensure
+      _setnonblock(false)
+    end
+  end
+
+  def remote_address
+    Addrinfo.new self.getpeername
+  end
+
+  attr_accessor :do_not_reverse_lookup
+end
+
+class IPSocket < BasicSocket
+  def self.getaddress(host)
+    Addrinfo.ip(host).ip_address
+  end
+
+  def addr
+    Addrinfo.new(self.getsockname)._to_array
+  end
+
+  def peeraddr
+    Addrinfo.new(self.getpeername)._to_array
+  end
+
+  def recvfrom(maxlen, flags=0)
+    msg, sa = _recvfrom(maxlen, flags)
+    [ msg, Addrinfo.new(sa)._to_array ]
+  end
+end
+
+class TCPSocket < IPSocket
+  def initialize(host, service, local_host=nil, local_service=nil)
+    if @init_with_fd
+      super(host, service)
+    else
+      s = nil
+      e = SocketError
+      Addrinfo.foreach(host, service) { |ai|
+        begin
+          s = Socket._socket(ai.afamily, Socket::SOCK_STREAM, 0)
+          if local_host or local_service
+            local_host ||= (ai.afamily == Socket::AF_INET) ? "0.0.0.0" : "::"
+            local_service ||= "0"
+            bi = Addrinfo.getaddrinfo(local_host, local_service, ai.afamily, ai.socktype)[0]
+            Socket._bind(s, bi.to_sockaddr)
+          end
+          Socket._connect(s, ai.to_sockaddr)
+          super(s, "r+")
+          return
+        rescue => e0
+          e = e0
+        end
+      }
+      raise e
+    end
+  end
+
+  def self.new_with_prelude pre, *args
+    o = self._allocate
+    o.instance_eval(&pre)
+    o.initialize(*args)
+    o
+  end
+
+  #def self.gethostbyname(host)
+end
+
+class TCPServer < TCPSocket
+  def initialize(host=nil, service)
+    ai = Addrinfo.getaddrinfo(host, service, nil, nil, nil, Socket::AI_PASSIVE)[0]
+    @init_with_fd = true
+    super(Socket._socket(ai.afamily, Socket::SOCK_STREAM, 0), "r+")
+    if Socket.const_defined?(:SO_REUSEADDR)
+      self.setsockopt(Socket::SOL_SOCKET, Socket::SO_REUSEADDR, true)
+    end
+    Socket._bind(self.fileno, ai.to_sockaddr)
+    listen(5)
+    self
+  end
+
+  def accept
+    fd = self.sysaccept
+    begin
+      TCPSocket.new_with_prelude(proc { @init_with_fd = true }, fd, "r+")
+    rescue
+      IO._sysclose(fd) rescue nil
+      raise
+    end
+  end
+
+  def accept_nonblock
+    begin
+      self._setnonblock(true)
+      self.accept
+    ensure
+      self._setnonblock(false)
+    end
+  end
+
+  def listen(backlog)
+    Socket._listen(self.fileno, backlog)
+    0
+  end
+
+  def sysaccept
+    Socket._accept(self.fileno)
+  end
+end
+
+class UDPSocket < IPSocket
+  def initialize(af=Socket::AF_INET)
+    super(Socket._socket(af, Socket::SOCK_DGRAM, 0), "r+")
+    @af = af
+    self
+  end
+
+  def bind(host, port)
+    Socket._bind(self.fileno, _sockaddr_in(port, host))
+    0
+  end
+
+  def connect(host, port)
+    Socket._connect(self.fileno, _sockaddr_in(port, host))
+    0
+  end
+
+  def recvfrom_nonblock(*args)
+    s = self
+    begin
+      self._setnonblock(true)
+      self.recvfrom(*args)
+    ensure
+      # XXX: self is a SystemcallException here! (should be bug)
+      s._setnonblock(false)
+    end
+  end
+
+  def send(mesg, flags, host=nil, port=nil)
+    if port
+      super(mesg, flags, _sockaddr_in(port, host))
+    elsif host
+      super(mesg, flags, host)
+    else
+      super(mesg, flags)
+    end
+  end
+
+  def _sockaddr_in(port, host)
+    ai = Addrinfo.getaddrinfo(host, port, @af, Socket::SOCK_DGRAM)[0]
+    ai.to_sockaddr
+  end
+end
+
+class Socket < BasicSocket
+  def initialize(domain, type, protocol=0)
+    super(Socket._socket(domain, type, protocol), "r+")
+  end
+
+  #def self.accept_loop
+
+  def self.getaddrinfo(nodename, servname, family=nil, socktype=nil, protocol=nil, flags=0)
+    Addrinfo.getaddrinfo(nodename, servname, family, socktype, protocol, flags).map { |ai|
+      ary = ai._to_array
+      ary[2] = nodename
+      ary[4] = ai.afamily
+      ary[5] = ai.socktype
+      ary[6] = ai.protocol
+      ary
+    }
+  end
+
+  #def self.getnameinfo
+  #def self.ip_address_list
+
+  def self.open(*args)
+    new(args)
+  end
+
+  def self.sockaddr_in(port, host)
+    ai = Addrinfo.getaddrinfo(host, port, nil, Socket::SOCK_DGRAM)[0]
+    ai.to_sockaddr
+  end
+
+  #def self.tcp
+  #def self.tcp_server_loop
+  #def self.tcp_server_sockets
+  #def self.udp_server_loop
+  #def self.udp_server_loop_on
+  #def self.udp_server_recv
+  #def self.udp_server_sockets
+  #def self.unix(path)
+  #def self.unix_server_loop
+  #def self.unix_server_socket
+
+  def self.unpack_sockaddr_in(sa)
+    Addrinfo.new(sa).ip_unpack.reverse
+  end
+
+  def self.unpack_sockaddr_un(sa)
+    Addrinfo.new(sa).unix_path
+  end
+
+  class << self
+    alias pack_sockaddr_in sockaddr_in
+    alias pack_sockaddr_un sockaddr_un
+    alias pair socketpair
+  end
+
+  def accept
+    fd, addr = self.sysaccept
+    [ Socket.for_fd(fd), addr ]
+  end
+
+  def accept_nonblock
+    begin
+      self._setnonblock(true)
+      self.accept
+    ensure
+      self._setnonblock(false)
+    end
+  end
+
+  def bind(sockaddr)
+    sockaddr = sockaddr.to_sockaddr if sockaddr.is_a? Addrinfo
+    Socket._bind(self.fileno, sockaddr)
+    0
+  end
+
+  def connect(sockaddr)
+    sockaddr = sockaddr.to_sockaddr if sockaddr.is_a? Addrinfo
+    Socket._connect(self.fileno, sockaddr)
+    0
+  end
+
+  def connect_nonblock(sockaddr)
+    begin
+      self._setnonblock(true)
+      self.connect(sockaddr)
+    ensure
+      self._setnonblock(false)
+    end
+  end
+
+  #def ipv6only!
+
+  def listen(backlog)
+    Socket._listen(self.fileno, backlog)
+    0
+  end
+
+  def recvfrom(maxlen, flags=0)
+    msg, sa = _recvfrom(maxlen, flags)
+    socktype = self.getsockopt(Socket::SOL_SOCKET, Socket::SO_TYPE).int
+    [ msg, Addrinfo.new(sa, Socket::PF_UNSPEC, socktype) ]
+  end
+
+  def recvfrom_nonblock(*args)
+    begin
+      self._setnonblock(true)
+      self._recvfrom(*args)
+    ensure
+      self._setnonblock(false)
+    end
+  end
+
+  def sysaccept
+    Socket._accept2(self.fileno)
+  end
+end
+
+class UNIXSocket < BasicSocket
+  def initialize(path, &block)
+    if self.is_a? UNIXServer
+      super(path, "r")
+    else
+      super(Socket._socket(Socket::AF_UNIX, Socket::SOCK_STREAM, 0), "r+")
+      Socket._connect(self.fileno, Socket.sockaddr_un(path))
+
+      if block_given?
+        begin
+          yield self
+        ensure
+          begin
+            self.close unless self.closed?
+          rescue StandardError
+          end
+        end
+      end
+    end
+  end
+
+  def self.socketpair(type=Socket::SOCK_STREAM, protocol=0)
+    a = Socket.socketpair(Socket::AF_UNIX, type, protocol)
+    [ UNIXSocket.for_fd(a[0]), UNIXSocket.for_fd(a[1]) ]
+  end
+
+  class << self
+    alias pair socketpair
+  end
+
+  def addr
+    [ "AF_UNIX", path ]
+  end
+
+  def path
+    Addrinfo.new(self.getsockname).unix_path
+  end
+
+  def peeraddr
+    [ "AF_UNIX", Addrinfo.new(self.getpeername).unix_path ]
+  end
+
+  #def recv_io
+
+  def recvfrom(maxlen, flags=0)
+    msg, sa = _recvfrom(maxlen, flags)
+    path = (sa.size > 0) ? Addrinfo.new(sa).unix_path : ""
+    [ msg, [ "AF_UNIX", path ] ]
+  end
+
+  #def send_io
+end
+
+class UNIXServer < UNIXSocket
+  def initialize(path)
+    fd = Socket._socket(Socket::AF_UNIX, Socket::SOCK_STREAM, 0)
+    begin
+      super(fd)
+      Socket._bind(fd, Socket.pack_sockaddr_un(path))
+      self.listen(5)
+    rescue => e
+      IO._sysclose(fd) rescue nil
+      raise e
+    end
+
+    if block_given?
+      begin
+        yield self
+      ensure
+        self.close rescue nil unless self.closed?
+      end
+    end
+  end
+
+  def accept
+    fd = self.sysaccept
+    begin
+      sock = UNIXSocket.for_fd(fd)
+    rescue
+      IO._sysclose(fd) rescue nil
+    end
+    sock
+  end
+
+  def accept_nonblock
+    begin
+      self._setnonblock(true)
+      self.accept
+    ensure
+      self._setnonblock(false)
+    end
+  end
+
+  def listen(backlog)
+    Socket._listen(self.fileno, backlog)
+    0
+  end
+
+  def sysaccept
+    Socket._accept(self.fileno)
+  end
+end
+
+class Socket
+  include Constants
+end
+
+class Socket
+  class Option
+    def initialize(family, level, optname, data)
+      @family  = family
+      @level   = level
+      @optname = optname
+      @data    = data
+    end
+
+    def self.bool(family, level, optname, bool)
+      self.new(family, level, optname, [(bool ? 1 : 0)].pack('i'))
+    end
+
+    def self.int(family, level, optname, integer)
+      self.new(family, level, optname, [integer].pack('i'))
+    end
+
+    #def self.linger(family, level, optname, integer)
+    #end
+
+    attr_reader :data, :family, :level, :optname
+
+    def bool
+      @data.unpack('i')[0] != 0
+    end
+
+    def inspect
+      "#<Socket::Option: family:#{@family} level:#{@level} optname:#{@optname} #{@data.inspect}>"
+    end
+
+    def int
+      @data.unpack('i')[0]
+    end
+
+    def linger
+      raise NotImplementedError.new
+    end
+
+    def unpack(template)
+      raise NotImplementedError.new
+    end
+  end
+end
+
+class SocketError < StandardError; end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-socket/src/const.cstub
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-socket/src/const.cstub	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-socket/src/const.cstub	(revision 439)
@@ -0,0 +1,459 @@
+#if defined(AF_INET)
+  define_const(AF_INET);
+#endif
+#if defined(PF_INET)
+  define_const(PF_INET);
+#endif
+#if defined(AF_INET6)
+  define_const(AF_INET6);
+#endif
+#if defined(PF_INET6)
+  define_const(PF_INET6);
+#endif
+#if defined(AF_LINK)
+  define_const(AF_LINK);
+#endif
+#if defined(PF_LINK)
+  define_const(PF_LINK);
+#endif
+#if defined(AF_LOCAL)
+  define_const(AF_LOCAL);
+#endif
+#if defined(PF_LOCAL)
+  define_const(PF_LOCAL);
+#endif
+#if defined(AF_UNIX)
+  define_const(AF_UNIX);
+#endif
+#if defined(PF_UNIX)
+  define_const(PF_UNIX);
+#endif
+#if defined(AF_MAX)
+  define_const(AF_MAX);
+#endif
+#if defined(AF_UNSPEC)
+  define_const(AF_UNSPEC);
+#endif
+#if defined(PF_UNSPEC)
+  define_const(PF_UNSPEC);
+#endif
+#if defined(AF_ROUTE)
+  define_const(AF_ROUTE);
+#endif
+#if defined(PF_ROUTE)
+  define_const(PF_ROUTE);
+#endif
+#if defined(AI_CANONNAME)
+  define_const(AI_CANONNAME);
+#endif
+#if defined(AI_FQDN)
+  define_const(AI_FQDN);
+#endif
+#if defined(AI_NUMERICHOST)
+  define_const(AI_NUMERICHOST);
+#endif
+#if defined(AI_NUMERICSERV)
+  define_const(AI_NUMERICSERV);
+#endif
+#if defined(AI_PASSIVE)
+  define_const(AI_PASSIVE);
+#endif
+#if defined(IP_ADD_MEMBERSHIP)
+  define_const(IP_ADD_MEMBERSHIP);
+#endif
+#if defined(IP_ADD_SOURCE_MEMBERSHIP)
+  define_const(IP_ADD_SOURCE_MEMBERSHIP);
+#endif
+#if defined(IP_BLOCK_SOURCE)
+  define_const(IP_BLOCK_SOURCE);
+#endif
+#if defined(IP_DROP_MEMBERSHIP)
+  define_const(IP_DROP_MEMBERSHIP);
+#endif
+#if defined(IP_DROP_SOURCE_MEMBERSHIP)
+  define_const(IP_DROP_SOURCE_MEMBERSHIP);
+#endif
+#if defined(IP_FREEBIND)
+  define_const(IP_FREEBIND);
+#endif
+#if defined(IP_HDRINCL)
+  define_const(IP_HDRINCL);
+#endif
+#if defined(IP_IPSEC_POLICY)
+  define_const(IP_IPSEC_POLICY);
+#endif
+#if defined(IP_MINTTL)
+  define_const(IP_MINTTL);
+#endif
+#if defined(IP_MSFILTER)
+  define_const(IP_MSFILTER);
+#endif
+#if defined(IP_MTU)
+  define_const(IP_MTU);
+#endif
+#if defined(IP_MTU_DISCOVER)
+  define_const(IP_MTU_DISCOVER);
+#endif
+#if defined(IP_MULTICAST_ALL)
+  define_const(IP_MULTICAST_ALL);
+#endif
+#if defined(IP_MULTICAST_IF)
+  define_const(IP_MULTICAST_IF);
+#endif
+#if defined(IP_MULTICAST_LOOP)
+  define_const(IP_MULTICAST_LOOP);
+#endif
+#if defined(IP_MULTICAST_TTL)
+  define_const(IP_MULTICAST_TTL);
+#endif
+#if defined(IP_OPTIONS)
+  define_const(IP_OPTIONS);
+#endif
+#if defined(IP_ORIGDSTADDR)
+  define_const(IP_ORIGDSTADDR);
+#endif
+#if defined(IP_PASSSEC)
+  define_const(IP_PASSSEC);
+#endif
+#if defined(IP_PKTINFO)
+  define_const(IP_PKTINFO);
+#endif
+#if defined(IP_PKTOPTIONS)
+  define_const(IP_PKTOPTIONS);
+#endif
+#if defined(IP_PMTUDISC_DO)
+  define_const(IP_PMTUDISC_DO);
+#endif
+#if defined(IP_PMTUDISC_DONT)
+  define_const(IP_PMTUDISC_DONT);
+#endif
+#if defined(IP_PMTUDISC_PROBE)
+  define_const(IP_PMTUDISC_PROBE);
+#endif
+#if defined(IP_PMTUDISC_WANT)
+  define_const(IP_PMTUDISC_WANT);
+#endif
+#if defined(IP_RECVDSTADDR)
+  define_const(IP_RECVDSTADDR);
+#endif
+#if defined(IP_RECVERR)
+  define_const(IP_RECVERR);
+#endif
+#if defined(IP_RECVOPTS)
+  define_const(IP_RECVOPTS);
+#endif
+#if defined(IP_RECVORIGDSTADDR)
+  define_const(IP_RECVORIGDSTADDR);
+#endif
+#if defined(IP_RECVRETOPTS)
+  define_const(IP_RECVRETOPTS);
+#endif
+#if defined(IP_RECVTOS)
+  define_const(IP_RECVTOS);
+#endif
+#if defined(IP_RECVTTL)
+  define_const(IP_RECVTTL);
+#endif
+#if defined(IP_RETOPTS)
+  define_const(IP_RETOPTS);
+#endif
+#if defined(IP_ROUTER_ALERT)
+  define_const(IP_ROUTER_ALERT);
+#endif
+#if defined(IP_TOS)
+  define_const(IP_TOS);
+#endif
+#if defined(IP_TRANSPARENT)
+  define_const(IP_TRANSPARENT);
+#endif
+#if defined(IP_TTL)
+  define_const(IP_TTL);
+#endif
+#if defined(IP_UNBLOCK_SOURCE)
+  define_const(IP_UNBLOCK_SOURCE);
+#endif
+#if defined(IP_XFRM_POLICY)
+  define_const(IP_XFRM_POLICY);
+#endif
+#if defined(IPV6_JOIN_GROUP)
+  define_const(IPV6_JOIN_GROUP);
+#endif
+#if defined(IPV6_LEAVE_GROUP)
+  define_const(IPV6_LEAVE_GROUP);
+#endif
+#if defined(IPV6_MULTICAST_HOPS)
+  define_const(IPV6_MULTICAST_HOPS);
+#endif
+#if defined(IPV6_MULTICAST_IF)
+  define_const(IPV6_MULTICAST_IF);
+#endif
+#if defined(IPV6_MULTICAST_LOOP)
+  define_const(IPV6_MULTICAST_LOOP);
+#endif
+#if defined(IPV6_UNICAST_HOPS)
+  define_const(IPV6_UNICAST_HOPS);
+#endif
+#if defined(IPV6_V6ONLY)
+  define_const(IPV6_V6ONLY);
+#endif
+#if defined(IPPROTO_AH) || defined(_WINSOCKAPI_)
+  define_const(IPPROTO_AH);
+#endif
+#if defined(IPPROTO_DSTOPTS) || defined(_WINSOCKAPI_)
+  define_const(IPPROTO_DSTOPTS);
+#endif
+#if defined(IPPROTO_ESP) || defined(_WINSOCKAPI_)
+  define_const(IPPROTO_ESP);
+#endif
+#if defined(IPPROTO_FRAGMENT) || defined(_WINSOCKAPI_)
+  define_const(IPPROTO_FRAGMENT);
+#endif
+#if defined(IPPROTO_ICMP) || defined(_WINSOCKAPI_)
+  define_const(IPPROTO_ICMP);
+#endif
+#if defined(IPPROTO_ICMPV6) || defined(_WINSOCKAPI_)
+  define_const(IPPROTO_ICMPV6);
+#endif
+#if defined(IPPROTO_IP) || defined(_WINSOCKAPI_)
+  define_const(IPPROTO_IP);
+#endif
+#if defined(IPPROTO_IPV6) || defined(_WINSOCKAPI_)
+  define_const(IPPROTO_IPV6);
+#endif
+#if defined(IPPROTO_NONE) || defined(_WINSOCKAPI_)
+  define_const(IPPROTO_NONE);
+#endif
+#if defined(IPPROTO_RAW) || defined(_WINSOCKAPI_)
+  define_const(IPPROTO_RAW);
+#endif
+#if defined(IPPROTO_ROUTING) || defined(_WINSOCKAPI_)
+  define_const(IPPROTO_ROUTING);
+#endif
+#if defined(IPPROTO_TCP) || defined(_WINSOCKAPI_)
+  define_const(IPPROTO_TCP);
+#endif
+#if defined(IPPROTO_UDP) || defined(_WINSOCKAPI_)
+  define_const(IPPROTO_UDP);
+#endif
+#if defined(MCAST_BLOCK_SOURCE)
+  define_const(MCAST_BLOCK_SOURCE);
+#endif
+#if defined(MCAST_JOIN_GROUP)
+  define_const(MCAST_JOIN_GROUP);
+#endif
+#if defined(MCAST_JOIN_SOURCE_GROUP)
+  define_const(MCAST_JOIN_SOURCE_GROUP);
+#endif
+#if defined(MCAST_LEAVE_GROUP)
+  define_const(MCAST_LEAVE_GROUP);
+#endif
+#if defined(MCAST_LEAVE_SOURCE_GROUP)
+  define_const(MCAST_LEAVE_SOURCE_GROUP);
+#endif
+#if defined(MCAST_MSFILTER)
+  define_const(MCAST_MSFILTER);
+#endif
+#if defined(MCAST_UNBLOCK_SOURCE)
+  define_const(MCAST_UNBLOCK_SOURCE);
+#endif
+#if defined(MSG_BCAST)
+  define_const(MSG_BCAST);
+#endif
+#if defined(MSG_CTRUNC)
+  define_const(MSG_CTRUNC);
+#endif
+#if defined(MSG_DONTROUTE)
+  define_const(MSG_DONTROUTE);
+#endif
+#if defined(MSG_DONTWAIT)
+  define_const(MSG_DONTWAIT);
+#endif
+#if defined(MSG_EOR)
+  define_const(MSG_EOR);
+#endif
+#if defined(MSG_MCAST)
+  define_const(MSG_MCAST);
+#endif
+#if defined(MSG_NOSIGNAL)
+  define_const(MSG_NOSIGNAL);
+#endif
+#if defined(MSG_OOB)
+  define_const(MSG_OOB);
+#endif
+#if defined(MSG_PEEK)
+  define_const(MSG_PEEK);
+#endif
+#if defined(MSG_TRUNC)
+  define_const(MSG_TRUNC);
+#endif
+#if defined(MSG_WAITALL)
+  define_const(MSG_WAITALL);
+#endif
+#if defined(NI_DGRAM)
+  define_const(NI_DGRAM);
+#endif
+#if defined(NI_MAXHOST)
+  define_const(NI_MAXHOST);
+#endif
+#if defined(NI_MAXSERV)
+  define_const(NI_MAXSERV);
+#endif
+#if defined(NI_NAMEREQD)
+  define_const(NI_NAMEREQD);
+#endif
+#if defined(NI_NOFQDN)
+  define_const(NI_NOFQDN);
+#endif
+#if defined(NI_NUMERICHOST)
+  define_const(NI_NUMERICHOST);
+#endif
+#if defined(NI_NUMERICSERV)
+  define_const(NI_NUMERICSERV);
+#endif
+#if defined(SHUT_RD)
+  define_const(SHUT_RD);
+#endif
+#if defined(SHUT_WR)
+  define_const(SHUT_WR);
+#endif
+#if defined(SHUT_RDWR)
+  define_const(SHUT_RDWR);
+#endif
+#if defined(SO_BINDANY)
+  define_const(SO_BINDANY);
+#endif
+#if defined(SO_BROADCAST)
+  define_const(SO_BROADCAST);
+#endif
+#if defined(SO_DEBUG)
+  define_const(SO_DEBUG);
+#endif
+#if defined(SO_DONTROUTE)
+  define_const(SO_DONTROUTE);
+#endif
+#if defined(SO_ERROR)
+  define_const(SO_ERROR);
+#endif
+#if defined(SO_KEEPALIVE)
+  define_const(SO_KEEPALIVE);
+#endif
+#if defined(SO_LINGER)
+  define_const(SO_LINGER);
+#endif
+#if defined(SO_NOSIGPIPE)
+  define_const(SO_NOSIGPIPE);
+#endif
+#if defined(SO_OOBINLINE)
+  define_const(SO_OOBINLINE);
+#endif
+#if defined(SO_PEERCRED)
+  define_const(SO_PEERCRED);
+#endif
+#if defined(SO_RCVBUF)
+  define_const(SO_RCVBUF);
+#endif
+#if defined(SO_RCVLOWAT)
+  define_const(SO_RCVLOWAT);
+#endif
+#if defined(SO_RCVTIMEO)
+  define_const(SO_RCVTIMEO);
+#endif
+#if defined(SO_REUSEADDR)
+  define_const(SO_REUSEADDR);
+#endif
+#if defined(SO_REUSEPORT)
+  define_const(SO_REUSEPORT);
+#endif
+#if defined(SO_RTABLE)
+  define_const(SO_RTABLE);
+#endif
+#if defined(SO_SNDBUF)
+  define_const(SO_SNDBUF);
+#endif
+#if defined(SO_SNDLOWAT)
+  define_const(SO_SNDLOWAT);
+#endif
+#if defined(SO_SNDTIMEO)
+  define_const(SO_SNDTIMEO);
+#endif
+#if defined(SO_SPLICE)
+  define_const(SO_SPLICE);
+#endif
+#if defined(SO_TIMESTAMP)
+  define_const(SO_TIMESTAMP);
+#endif
+#if defined(SO_TYPE)
+  define_const(SO_TYPE);
+#endif
+#if defined(SOCK_DGRAM)
+  define_const(SOCK_DGRAM);
+#endif
+#if defined(SOCK_RAW)
+  define_const(SOCK_RAW);
+#endif
+#if defined(SOCK_SEQPACKET)
+  define_const(SOCK_SEQPACKET);
+#endif
+#if defined(SOCK_STREAM)
+  define_const(SOCK_STREAM);
+#endif
+#if defined(SOL_SOCKET)
+  define_const(SOL_SOCKET);
+#endif
+#if defined(SOL_IP)
+  define_const(SOL_IP);
+#endif
+#if defined(SOL_TCP)
+  define_const(SOL_TCP);
+#endif
+#if defined(TCP_CONGCTL)
+  define_const(TCP_CONGCTL);
+#endif
+#if defined(TCP_CONGESTION)
+  define_const(TCP_CONGESTION);
+#endif
+#if defined(TCP_CORK)
+  define_const(TCP_CORK);
+#endif
+#if defined(TCP_DEFER_ACCEPT)
+  define_const(TCP_DEFER_ACCEPT);
+#endif
+#if defined(TCP_INFO)
+  define_const(TCP_INFO);
+#endif
+#if defined(TCP_KEEPCNT)
+  define_const(TCP_KEEPCNT);
+#endif
+#if defined(TCP_KEEPIDLE)
+  define_const(TCP_KEEPIDLE);
+#endif
+#if defined(TCP_KEEPINIT)
+  define_const(TCP_KEEPINIT);
+#endif
+#if defined(TCP_KEEPINTVL)
+  define_const(TCP_KEEPINTVL);
+#endif
+#if defined(TCP_LINGER2)
+  define_const(TCP_LINGER2);
+#endif
+#if defined(TCP_MAXSEG)
+  define_const(TCP_MAXSEG);
+#endif
+#if defined(TCP_MD5SIG)
+  define_const(TCP_MD5SIG);
+#endif
+#if defined(TCP_NODELAY)
+  define_const(TCP_NODELAY);
+#endif
+#if defined(TCP_QUICKACK)
+  define_const(TCP_QUICKACK);
+#endif
+#if defined(TCP_SACK_ENABLE)
+  define_const(TCP_SACK_ENABLE);
+#endif
+#if defined(TCP_SYNCNT)
+  define_const(TCP_SYNCNT);
+#endif
+#if defined(TCP_WINDOW_CLAMP)
+  define_const(TCP_WINDOW_CLAMP);
+#endif
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-socket/src/const.def
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-socket/src/const.def	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-socket/src/const.def	(revision 439)
@@ -0,0 +1,165 @@
+AF_INET
+PF_INET
+AF_INET6
+PF_INET6
+AF_LINK
+PF_LINK
+AF_LOCAL
+PF_LOCAL
+AF_UNIX
+PF_UNIX
+AF_MAX
+AF_UNSPEC
+PF_UNSPEC
+AF_ROUTE
+PF_ROUTE
+
+AI_CANONNAME
+AI_FQDN
+AI_NUMERICHOST
+AI_NUMERICSERV
+AI_PASSIVE
+
+IP_ADD_MEMBERSHIP
+IP_ADD_SOURCE_MEMBERSHIP
+IP_BLOCK_SOURCE
+IP_DROP_MEMBERSHIP
+IP_DROP_SOURCE_MEMBERSHIP
+IP_FREEBIND
+IP_HDRINCL
+IP_IPSEC_POLICY
+IP_MINTTL
+IP_MSFILTER
+IP_MTU
+IP_MTU_DISCOVER
+IP_MULTICAST_ALL
+IP_MULTICAST_IF
+IP_MULTICAST_LOOP
+IP_MULTICAST_TTL
+IP_OPTIONS
+IP_ORIGDSTADDR
+IP_PASSSEC
+IP_PKTINFO
+IP_PKTOPTIONS
+IP_PMTUDISC_DO
+IP_PMTUDISC_DONT
+IP_PMTUDISC_PROBE
+IP_PMTUDISC_WANT
+IP_RECVDSTADDR
+IP_RECVERR
+IP_RECVOPTS
+IP_RECVORIGDSTADDR
+IP_RECVRETOPTS
+IP_RECVTOS
+IP_RECVTTL
+IP_RETOPTS
+IP_ROUTER_ALERT
+IP_TOS
+IP_TRANSPARENT
+IP_TTL
+IP_UNBLOCK_SOURCE
+IP_XFRM_POLICY
+
+IPV6_JOIN_GROUP
+IPV6_LEAVE_GROUP
+IPV6_MULTICAST_HOPS
+IPV6_MULTICAST_IF
+IPV6_MULTICAST_LOOP
+IPV6_UNICAST_HOPS
+IPV6_V6ONLY
+
+IPPROTO_AH
+IPPROTO_DSTOPTS
+IPPROTO_ESP
+IPPROTO_FRAGMENT
+IPPROTO_ICMP
+IPPROTO_ICMPV6
+IPPROTO_IP
+IPPROTO_IPV6
+IPPROTO_NONE
+IPPROTO_RAW
+IPPROTO_ROUTING
+IPPROTO_TCP
+IPPROTO_UDP
+
+MCAST_BLOCK_SOURCE
+MCAST_JOIN_GROUP
+MCAST_JOIN_SOURCE_GROUP
+MCAST_LEAVE_GROUP
+MCAST_LEAVE_SOURCE_GROUP
+MCAST_MSFILTER
+MCAST_UNBLOCK_SOURCE
+
+MSG_BCAST
+MSG_CTRUNC
+MSG_DONTROUTE
+MSG_DONTWAIT
+MSG_EOR
+MSG_MCAST
+MSG_NOSIGNAL
+MSG_OOB
+MSG_PEEK
+MSG_TRUNC
+MSG_WAITALL
+
+NI_DGRAM
+NI_MAXHOST
+NI_MAXSERV
+NI_NAMEREQD
+NI_NOFQDN
+NI_NUMERICHOST
+NI_NUMERICSERV
+
+SHUT_RD
+SHUT_WR
+SHUT_RDWR
+
+SO_BINDANY
+SO_BROADCAST
+SO_DEBUG
+SO_DONTROUTE
+SO_ERROR
+SO_KEEPALIVE
+SO_LINGER
+SO_NOSIGPIPE
+SO_OOBINLINE
+SO_PEERCRED
+SO_RCVBUF
+SO_RCVLOWAT
+SO_RCVTIMEO
+SO_REUSEADDR
+SO_REUSEPORT
+SO_RTABLE
+SO_SNDBUF
+SO_SNDLOWAT
+SO_SNDTIMEO
+SO_SPLICE
+SO_TIMESTAMP
+SO_TYPE
+
+SOCK_DGRAM
+SOCK_RAW
+SOCK_SEQPACKET
+SOCK_STREAM
+
+SOL_SOCKET
+SOL_IP
+SOL_TCP
+
+TCP_CONGCTL
+TCP_CONGESTION
+TCP_CORK
+TCP_DEFER_ACCEPT
+TCP_INFO
+TCP_KEEPCNT
+TCP_KEEPIDLE
+TCP_KEEPINIT
+TCP_KEEPINTVL
+TCP_LINGER2
+TCP_MAXSEG
+TCP_MD5SIG
+TCP_NODELAY
+TCP_QUICKACK
+TCP_SACK_ENABLE
+TCP_SYNCNT
+TCP_WINDOW_CLAMP
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-socket/src/gen.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-socket/src/gen.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-socket/src/gen.rb	(revision 439)
@@ -0,0 +1,17 @@
+#!/usr/bin/env ruby
+
+Dir.chdir(File.dirname($0))
+
+f = File.open("const.cstub", "w")
+
+IO.readlines("const.def").each { |name|
+  name.sub(/^#.*/, "")
+  name.strip!
+  next if name.empty?
+
+  f.write <<CODE
+#if defined(#{name})#{name.start_with?('IPPROTO_') ? ' || defined(_WINSOCKAPI_)' : ''}
+  define_const(#{name});
+#endif
+CODE
+}
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-socket/src/socket.c
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-socket/src/socket.c	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-socket/src/socket.c	(revision 439)
@@ -0,0 +1,966 @@
+/*
+** socket.c - Socket module
+**
+** See Copyright Notice in mruby.h
+*/
+
+#ifdef _WIN32
+  #define _WIN32_WINNT 0x0501
+
+  #include <winsock2.h>
+  #include <ws2tcpip.h>
+  #include <windows.h>
+  #include <winerror.h>
+
+  #define SHUT_RDWR SD_BOTH
+  #ifndef _SSIZE_T_DEFINED
+  typedef int ssize_t;
+  #endif
+  typedef int fsize_t;
+#else
+#if defined(AZURE_SPHERE)
+  #define _GNU_SOURCE
+#endif
+  #include <sys/types.h>
+  #include <sys/socket.h>
+  #include <sys/param.h>
+  #include <sys/un.h>
+  #include <netinet/in.h>
+  #include <netinet/tcp.h>
+  #include <arpa/inet.h>
+  #include <fcntl.h>
+  #include <netdb.h>
+  #include <unistd.h>
+  typedef size_t fsize_t;
+#if defined(AZURE_SPHERE)
+#define F_GETFL  3
+#define F_SETFL  4
+  int gethostname(char *, size_t);
+  int fcntl(int, int, ...);
+#endif
+#endif
+
+#include <stddef.h>
+#include <string.h>
+
+#include "mruby.h"
+#include "mruby/array.h"
+#include "mruby/class.h"
+#include "mruby/data.h"
+#include "mruby/numeric.h"
+#include "mruby/string.h"
+#include "mruby/variable.h"
+#include "mruby/error.h"
+
+#include "mruby/ext/io.h"
+
+#if !defined(HAVE_SA_LEN)
+#if (defined(BSD) && (BSD >= 199006))
+#define HAVE_SA_LEN  1
+#else
+#define HAVE_SA_LEN  0
+#endif
+#endif
+
+#define E_SOCKET_ERROR             (mrb_class_get(mrb, "SocketError"))
+
+#if !defined(mrb_cptr)
+#define mrb_cptr_value(m,p) mrb_voidp_value((m),(p))
+#define mrb_cptr(o) mrb_voidp(o)
+#define mrb_cptr_p(o) mrb_voidp_p(o)
+#endif
+
+#ifdef _WIN32
+static const char *inet_ntop(int af, const void *src, char *dst, socklen_t cnt)
+{
+    if (af == AF_INET)
+    {
+	struct sockaddr_in in;
+	memset(&in, 0, sizeof(in));
+	in.sin_family = AF_INET;
+	memcpy(&in.sin_addr, src, sizeof(struct in_addr));
+	getnameinfo((struct sockaddr *)&in, sizeof(struct
+		    sockaddr_in), dst, cnt, NULL, 0, NI_NUMERICHOST);
+	return dst;
+    }
+    else if (af == AF_INET6)
+    {
+	struct sockaddr_in6 in;
+	memset(&in, 0, sizeof(in));
+	in.sin6_family = AF_INET6;
+	memcpy(&in.sin6_addr, src, sizeof(struct in_addr6));
+	getnameinfo((struct sockaddr *)&in, sizeof(struct
+		    sockaddr_in6), dst, cnt, NULL, 0, NI_NUMERICHOST);
+	return dst;
+    }
+    return NULL;
+}
+
+static int inet_pton(int af, const char *src, void *dst)
+{
+    struct addrinfo hints, *res, *ressave;
+
+    memset(&hints, 0, sizeof(struct addrinfo));
+    hints.ai_family = af;
+
+    if (getaddrinfo(src, NULL, &hints, &res) != 0)
+    {
+	printf("Couldn't resolve host %s\n", src);
+	return -1;
+    }
+
+    ressave = res;
+
+    while (res)
+    {
+	memcpy(dst, res->ai_addr, res->ai_addrlen);
+	res = res->ai_next;
+    }
+
+    freeaddrinfo(ressave);
+    return 0;
+}
+
+#endif
+
+static mrb_value
+mrb_addrinfo_getaddrinfo(mrb_state *mrb, mrb_value klass)
+{
+  struct addrinfo hints, *res0, *res;
+  mrb_value ai, ary, family, lastai, nodename, protocol, sa, service, socktype;
+  mrb_int flags;
+  int arena_idx, error;
+  const char *hostname = NULL, *servname = NULL;
+
+  ary = mrb_ary_new(mrb);
+  arena_idx = mrb_gc_arena_save(mrb);  /* ary must be on arena! */
+
+  family = socktype = protocol = mrb_nil_value();
+  flags = 0;
+  mrb_get_args(mrb, "oo|oooi", &nodename, &service, &family, &socktype, &protocol, &flags);
+
+  if (mrb_string_p(nodename)) {
+    hostname = RSTRING_CSTR(mrb, nodename);
+  } else if (mrb_nil_p(nodename)) {
+    hostname = NULL;
+  } else {
+    mrb_raise(mrb, E_TYPE_ERROR, "nodename must be String or nil");
+  }
+
+  if (mrb_string_p(service)) {
+    servname = RSTRING_CSTR(mrb, service);
+  } else if (mrb_fixnum_p(service)) {
+    servname = RSTRING_PTR(mrb_fixnum_to_str(mrb, service, 10));
+  } else if (mrb_nil_p(service)) {
+    servname = NULL;
+  } else {
+    mrb_raise(mrb, E_TYPE_ERROR, "service must be String, Fixnum, or nil");
+  }
+
+  memset(&hints, 0, sizeof(hints));
+  hints.ai_flags = (int)flags;
+
+  if (mrb_fixnum_p(family)) {
+    hints.ai_family = (int)mrb_fixnum(family);
+  }
+
+  if (mrb_fixnum_p(socktype)) {
+    hints.ai_socktype = (int)mrb_fixnum(socktype);
+  }
+
+  if (mrb_fixnum_p(protocol)) {
+    hints.ai_protocol = (int)mrb_fixnum(protocol);
+  }
+
+  lastai = mrb_cv_get(mrb, klass, mrb_intern_lit(mrb, "_lastai"));
+  if (mrb_cptr_p(lastai)) {
+    freeaddrinfo((struct addrinfo*)mrb_cptr(lastai));
+    mrb_cv_set(mrb, klass, mrb_intern_lit(mrb, "_lastai"), mrb_nil_value());
+  }
+
+  error = getaddrinfo(hostname, servname, &hints, &res0);
+  if (error) {
+    mrb_raisef(mrb, E_SOCKET_ERROR, "getaddrinfo: %s", gai_strerror(error));
+  }
+  mrb_cv_set(mrb, klass, mrb_intern_lit(mrb, "_lastai"), mrb_cptr_value(mrb, res0));
+
+  for (res = res0; res != NULL; res = res->ai_next) {
+    sa = mrb_str_new(mrb, (char*)res->ai_addr, res->ai_addrlen);
+    ai = mrb_funcall(mrb, klass, "new", 4, sa, mrb_fixnum_value(res->ai_family), mrb_fixnum_value(res->ai_socktype), mrb_fixnum_value(res->ai_protocol));
+    mrb_ary_push(mrb, ary, ai);
+    mrb_gc_arena_restore(mrb, arena_idx);
+  }
+
+  freeaddrinfo(res0);
+  mrb_cv_set(mrb, klass, mrb_intern_lit(mrb, "_lastai"), mrb_nil_value());
+
+  return ary;
+}
+
+static mrb_value
+mrb_addrinfo_getnameinfo(mrb_state *mrb, mrb_value self)
+{
+  mrb_int flags;
+  mrb_value ary, host, sastr, serv;
+  int error;
+
+  flags = 0;
+  mrb_get_args(mrb, "|i", &flags);
+  host = mrb_str_buf_new(mrb, NI_MAXHOST);
+  serv = mrb_str_buf_new(mrb, NI_MAXSERV);
+
+  sastr = mrb_iv_get(mrb, self, mrb_intern_lit(mrb, "@sockaddr"));
+  if (!mrb_string_p(sastr)) {
+    mrb_raise(mrb, E_SOCKET_ERROR, "invalid sockaddr");
+  }
+  error = getnameinfo((struct sockaddr *)RSTRING_PTR(sastr), (socklen_t)RSTRING_LEN(sastr), RSTRING_PTR(host), NI_MAXHOST, RSTRING_PTR(serv), NI_MAXSERV, (int)flags);
+  if (error) {
+    mrb_raisef(mrb, E_SOCKET_ERROR, "getnameinfo: %s", gai_strerror(error));
+  }
+  ary = mrb_ary_new_capa(mrb, 2);
+  mrb_str_resize(mrb, host, strlen(RSTRING_PTR(host)));
+  mrb_ary_push(mrb, ary, host);
+  mrb_str_resize(mrb, serv, strlen(RSTRING_PTR(serv)));
+  mrb_ary_push(mrb, ary, serv);
+  return ary;
+}
+
+#ifndef _WIN32
+static mrb_value
+mrb_addrinfo_unix_path(mrb_state *mrb, mrb_value self)
+{
+  mrb_value sastr;
+
+  sastr = mrb_iv_get(mrb, self, mrb_intern_lit(mrb, "@sockaddr"));
+  if (((struct sockaddr *)RSTRING_PTR(sastr))->sa_family != AF_UNIX)
+    mrb_raise(mrb, E_SOCKET_ERROR, "need AF_UNIX address");
+  if (RSTRING_LEN(sastr) < (mrb_int)offsetof(struct sockaddr_un, sun_path) + 1) {
+    return mrb_str_new(mrb, "", 0);
+  } else {
+    return mrb_str_new_cstr(mrb, ((struct sockaddr_un *)RSTRING_PTR(sastr))->sun_path);
+  }
+}
+#endif
+
+static mrb_value
+sa2addrlist(mrb_state *mrb, const struct sockaddr *sa, socklen_t salen)
+{
+  mrb_value ary, host;
+  unsigned short port;
+  const char *afstr;
+
+  switch (sa->sa_family) {
+  case AF_INET:
+    afstr = "AF_INET";
+    port = ((struct sockaddr_in *)sa)->sin_port;
+    break;
+  case AF_INET6:
+    afstr = "AF_INET6";
+    port = ((struct sockaddr_in6 *)sa)->sin6_port;
+    break;
+  default:
+    mrb_raise(mrb, E_ARGUMENT_ERROR, "bad af");
+    return mrb_nil_value();
+  }
+  port = ntohs(port);
+  host = mrb_str_buf_new(mrb, NI_MAXHOST);
+  if (getnameinfo(sa, salen, RSTRING_PTR(host), NI_MAXHOST, NULL, 0, NI_NUMERICHOST) == -1)
+    mrb_sys_fail(mrb, "getnameinfo");
+  mrb_str_resize(mrb, host, strlen(RSTRING_PTR(host)));
+  ary = mrb_ary_new_capa(mrb, 4);
+  mrb_ary_push(mrb, ary, mrb_str_new_cstr(mrb, afstr));
+  mrb_ary_push(mrb, ary, mrb_fixnum_value(port));
+  mrb_ary_push(mrb, ary, host);
+  mrb_ary_push(mrb, ary, host);
+  return ary;
+}
+
+static int
+socket_fd(mrb_state *mrb, mrb_value sock)
+{
+  return (int)mrb_fixnum(mrb_funcall(mrb, sock, "fileno", 0));
+}
+
+static int
+socket_family(int s)
+{
+  struct sockaddr_storage ss;
+  socklen_t salen;
+
+  salen = sizeof(ss);
+  if (getsockname(s, (struct sockaddr *)&ss, &salen) == -1)
+    return AF_UNSPEC;
+  return ss.ss_family;
+}
+
+static mrb_value
+mrb_basicsocket_getpeereid(mrb_state *mrb, mrb_value self)
+{
+#ifdef HAVE_GETPEEREID
+  mrb_value ary;
+  gid_t egid;
+  uid_t euid;
+  int s;
+
+  s = socket_fd(mrb, self);
+  if (getpeereid(s, &euid, &egid) != 0)
+    mrb_sys_fail(mrb, "getpeereid");
+
+  ary = mrb_ary_new_capa(mrb, 2);
+  mrb_ary_push(mrb, ary, mrb_fixnum_value((mrb_int)euid));
+  mrb_ary_push(mrb, ary, mrb_fixnum_value((mrb_int)egid));
+  return ary;
+#else
+  mrb_raise(mrb, E_RUNTIME_ERROR, "getpeereid is not available on this system");
+  return mrb_nil_value();
+#endif
+}
+
+static mrb_value
+mrb_basicsocket_getpeername(mrb_state *mrb, mrb_value self)
+{
+  struct sockaddr_storage ss;
+  socklen_t salen;
+
+  salen = sizeof(ss);
+  if (getpeername(socket_fd(mrb, self), (struct sockaddr *)&ss, &salen) != 0)
+    mrb_sys_fail(mrb, "getpeername");
+
+  return mrb_str_new(mrb, (char*)&ss, salen);
+}
+
+static mrb_value
+mrb_basicsocket_getsockname(mrb_state *mrb, mrb_value self)
+{
+  struct sockaddr_storage ss;
+  socklen_t salen;
+
+  salen = sizeof(ss);
+  if (getsockname(socket_fd(mrb, self), (struct sockaddr *)&ss, &salen) != 0)
+    mrb_sys_fail(mrb, "getsockname");
+
+  return mrb_str_new(mrb, (char*)&ss, salen);
+}
+
+static mrb_value
+mrb_basicsocket_getsockopt(mrb_state *mrb, mrb_value self)
+{
+  char opt[8];
+  int s;
+  mrb_int family, level, optname;
+  mrb_value c, data;
+  socklen_t optlen;
+
+  mrb_get_args(mrb, "ii", &level, &optname);
+  s = socket_fd(mrb, self);
+  optlen = sizeof(opt);
+  if (getsockopt(s, (int)level, (int)optname, opt, &optlen) == -1)
+    mrb_sys_fail(mrb, "getsockopt");
+  c = mrb_const_get(mrb, mrb_obj_value(mrb_class_get(mrb, "Socket")), mrb_intern_lit(mrb, "Option"));
+  family = socket_family(s);
+  data = mrb_str_new(mrb, opt, optlen);
+  return mrb_funcall(mrb, c, "new", 4, mrb_fixnum_value(family), mrb_fixnum_value(level), mrb_fixnum_value(optname), data);
+}
+
+static mrb_value
+mrb_basicsocket_recv(mrb_state *mrb, mrb_value self)
+{
+  ssize_t n;
+  mrb_int maxlen, flags = 0;
+  mrb_value buf;
+
+  mrb_get_args(mrb, "i|i", &maxlen, &flags);
+  buf = mrb_str_buf_new(mrb, maxlen);
+  n = recv(socket_fd(mrb, self), RSTRING_PTR(buf), (fsize_t)maxlen, (int)flags);
+  if (n == -1)
+    mrb_sys_fail(mrb, "recv");
+  mrb_str_resize(mrb, buf, (mrb_int)n);
+  return buf;
+}
+
+static mrb_value
+mrb_basicsocket_recvfrom(mrb_state *mrb, mrb_value self)
+{
+  ssize_t n;
+  mrb_int maxlen, flags = 0;
+  mrb_value ary, buf, sa;
+  socklen_t socklen;
+
+  mrb_get_args(mrb, "i|i", &maxlen, &flags);
+  buf = mrb_str_buf_new(mrb, maxlen);
+  socklen = sizeof(struct sockaddr_storage);
+  sa = mrb_str_buf_new(mrb, socklen);
+  n = recvfrom(socket_fd(mrb, self), RSTRING_PTR(buf), (fsize_t)maxlen, (int)flags, (struct sockaddr *)RSTRING_PTR(sa), &socklen);
+  if (n == -1)
+    mrb_sys_fail(mrb, "recvfrom");
+  mrb_str_resize(mrb, buf, (mrb_int)n);
+  mrb_str_resize(mrb, sa, (mrb_int)socklen);
+  ary = mrb_ary_new_capa(mrb, 2);
+  mrb_ary_push(mrb, ary, buf);
+  mrb_ary_push(mrb, ary, sa);
+  return ary;
+}
+
+static mrb_value
+mrb_basicsocket_send(mrb_state *mrb, mrb_value self)
+{
+  ssize_t n;
+  mrb_int flags;
+  mrb_value dest, mesg;
+
+  dest = mrb_nil_value();
+  mrb_get_args(mrb, "Si|S", &mesg, &flags, &dest);
+  if (mrb_nil_p(dest)) {
+    n = send(socket_fd(mrb, self), RSTRING_PTR(mesg), (fsize_t)RSTRING_LEN(mesg), (int)flags);
+  } else {
+    n = sendto(socket_fd(mrb, self), RSTRING_PTR(mesg), (fsize_t)RSTRING_LEN(mesg), (int)flags, (const struct sockaddr*)RSTRING_PTR(dest), (fsize_t)RSTRING_LEN(dest));
+  }
+  if (n == -1)
+    mrb_sys_fail(mrb, "send");
+  return mrb_fixnum_value((mrb_int)n);
+}
+
+static mrb_value
+mrb_basicsocket_setnonblock(mrb_state *mrb, mrb_value self)
+{
+  int fd, flags;
+  mrb_bool nonblocking;
+#ifdef _WIN32
+  u_long mode = 1;
+#endif
+
+  mrb_get_args(mrb, "b", &nonblocking);
+  fd = socket_fd(mrb, self);
+#ifdef _WIN32
+  flags = ioctlsocket(fd, FIONBIO, &mode);
+  if (flags != NO_ERROR)
+    mrb_sys_fail(mrb, "ioctlsocket");
+#else
+  flags = fcntl(fd, F_GETFL, 0);
+  if (flags == 1)
+    mrb_sys_fail(mrb, "fcntl");
+  if (nonblocking)
+    flags |= O_NONBLOCK;
+  else
+    flags &= ~O_NONBLOCK;
+  if (fcntl(fd, F_SETFL, flags) == -1)
+    mrb_sys_fail(mrb, "fcntl");
+#endif
+  return mrb_nil_value();
+}
+
+static mrb_value
+mrb_basicsocket_setsockopt(mrb_state *mrb, mrb_value self)
+{
+  int s;
+  mrb_int argc, level = 0, optname;
+  mrb_value optval, so;
+
+  argc = mrb_get_args(mrb, "o|io", &so, &optname, &optval);
+  if (argc == 3) {
+    if (!mrb_fixnum_p(so)) {
+      mrb_raise(mrb, E_ARGUMENT_ERROR, "level is not an integer");
+    }
+    level = mrb_fixnum(so);
+    if (mrb_string_p(optval)) {
+      /* that's good */
+    } else if (mrb_true_p(optval) || mrb_false_p(optval)) {
+      mrb_int i = mrb_test(optval) ? 1 : 0;
+      optval = mrb_str_new(mrb, (char*)&i, sizeof(i));
+    } else if (mrb_fixnum_p(optval)) {
+      if (optname == IP_MULTICAST_TTL || optname == IP_MULTICAST_LOOP) {
+        char uc = (char)mrb_fixnum(optval);
+        optval = mrb_str_new(mrb, &uc, sizeof(uc));
+      } else {
+        mrb_int i = mrb_fixnum(optval);
+        optval = mrb_str_new(mrb, (char*)&i, sizeof(i));
+      }
+    } else {
+      mrb_raise(mrb, E_ARGUMENT_ERROR, "optval should be true, false, an integer, or a string");
+    }
+  } else if (argc == 1) {
+    if (strcmp(mrb_obj_classname(mrb, so), "Socket::Option") != 0)
+      mrb_raise(mrb, E_ARGUMENT_ERROR, "not an instance of Socket::Option");
+    level = mrb_fixnum(mrb_funcall(mrb, so, "level", 0));
+    optname = mrb_fixnum(mrb_funcall(mrb, so, "optname", 0));
+    optval = mrb_funcall(mrb, so, "data", 0);
+  } else {
+    mrb_argnum_error(mrb, argc, 3, 3);
+  }
+
+  s = socket_fd(mrb, self);
+  if (setsockopt(s, (int)level, (int)optname, RSTRING_PTR(optval), (socklen_t)RSTRING_LEN(optval)) == -1)
+    mrb_sys_fail(mrb, "setsockopt");
+  return mrb_fixnum_value(0);
+}
+
+static mrb_value
+mrb_basicsocket_shutdown(mrb_state *mrb, mrb_value self)
+{
+  mrb_int how = SHUT_RDWR;
+
+  mrb_get_args(mrb, "|i", &how);
+  if (shutdown(socket_fd(mrb, self), (int)how) != 0)
+    mrb_sys_fail(mrb, "shutdown");
+  return mrb_fixnum_value(0);
+}
+
+static mrb_value
+mrb_basicsocket_set_is_socket(mrb_state *mrb, mrb_value self)
+{
+  mrb_bool b;
+  struct mrb_io *io_p;
+  mrb_get_args(mrb, "b", &b);
+
+  io_p = (struct mrb_io*)DATA_PTR(self);
+  if (io_p) {
+    io_p->is_socket = b;
+  }
+
+  return mrb_bool_value(b);
+}
+
+static mrb_value
+mrb_ipsocket_ntop(mrb_state *mrb, mrb_value klass)
+{
+  mrb_int af, n;
+  char *addr, buf[50];
+
+  mrb_get_args(mrb, "is", &af, &addr, &n);
+  if ((af == AF_INET && n != 4) || (af == AF_INET6 && n != 16))
+    mrb_raise(mrb, E_ARGUMENT_ERROR, "invalid address");
+  if (inet_ntop((int)af, addr, buf, sizeof(buf)) == NULL)
+    mrb_raise(mrb, E_ARGUMENT_ERROR, "invalid address");
+  return mrb_str_new_cstr(mrb, buf);
+}
+
+static mrb_value
+mrb_ipsocket_pton(mrb_state *mrb, mrb_value klass)
+{
+  mrb_int af, n;
+  char *bp, buf[50];
+
+  mrb_get_args(mrb, "is", &af, &bp, &n);
+  if ((size_t)n > sizeof(buf) - 1)
+    mrb_raise(mrb, E_ARGUMENT_ERROR, "invalid address");
+  memcpy(buf, bp, n);
+  buf[n] = '\0';
+
+  if (af == AF_INET) {
+    struct in_addr in;
+    if (inet_pton(AF_INET, buf, (void *)&in.s_addr) != 1)
+      goto invalid;
+    return mrb_str_new(mrb, (char*)&in.s_addr, 4);
+  } else if (af == AF_INET6) {
+    struct in6_addr in6;
+    if (inet_pton(AF_INET6, buf, (void *)&in6.s6_addr) != 1)
+      goto invalid;
+    return mrb_str_new(mrb, (char*)&in6.s6_addr, 16);
+  } else
+    mrb_raise(mrb, E_ARGUMENT_ERROR, "unsupported address family");
+
+invalid:
+  mrb_raise(mrb, E_ARGUMENT_ERROR, "invalid address");
+  return mrb_nil_value(); /* dummy */
+}
+
+static mrb_value
+mrb_ipsocket_recvfrom(mrb_state *mrb, mrb_value self)
+{
+  struct sockaddr_storage ss;
+  socklen_t socklen;
+  mrb_value a, buf, pair;
+  mrb_int flags, maxlen;
+  ssize_t n;
+  int fd;
+
+  fd = socket_fd(mrb, self);
+  flags = 0;
+  mrb_get_args(mrb, "i|i", &maxlen, &flags);
+  buf = mrb_str_buf_new(mrb, maxlen);
+  socklen = sizeof(ss);
+  n = recvfrom(fd, RSTRING_PTR(buf), (fsize_t)maxlen, (int)flags,
+  	       (struct sockaddr *)&ss, &socklen);
+  if (n == -1) {
+    mrb_sys_fail(mrb, "recvfrom");
+  }
+  mrb_str_resize(mrb, buf, (mrb_int)n);
+  a = sa2addrlist(mrb, (struct sockaddr *)&ss, socklen);
+  pair = mrb_ary_new_capa(mrb, 2);
+  mrb_ary_push(mrb, pair, buf);
+  mrb_ary_push(mrb, pair, a);
+  return pair;
+}
+
+static mrb_value
+mrb_socket_gethostname(mrb_state *mrb, mrb_value cls)
+{
+  mrb_value buf;
+  size_t bufsize;
+
+#ifdef HOST_NAME_MAX
+  bufsize = HOST_NAME_MAX + 1;
+#else
+  bufsize = 256;
+#endif
+  buf = mrb_str_buf_new(mrb, (mrb_int)bufsize);
+  if (gethostname(RSTRING_PTR(buf), (fsize_t)bufsize) != 0)
+    mrb_sys_fail(mrb, "gethostname");
+  mrb_str_resize(mrb, buf, (mrb_int)strlen(RSTRING_PTR(buf)));
+  return buf;
+}
+
+static mrb_value
+mrb_socket_accept(mrb_state *mrb, mrb_value klass)
+{
+  int s1;
+  mrb_int s0;
+
+  mrb_get_args(mrb, "i", &s0);
+  s1 = (int)accept(s0, NULL, NULL);
+  if (s1 == -1) {
+    mrb_sys_fail(mrb, "accept");
+  }
+  return mrb_fixnum_value(s1);
+}
+
+static mrb_value
+mrb_socket_accept2(mrb_state *mrb, mrb_value klass)
+{
+  mrb_value ary, sastr;
+  int s1;
+  mrb_int s0;
+  socklen_t socklen;
+
+  mrb_get_args(mrb, "i", &s0);
+  socklen = sizeof(struct sockaddr_storage);
+  sastr = mrb_str_buf_new(mrb, socklen);
+  s1 = (int)accept(s0, (struct sockaddr *)RSTRING_PTR(sastr), &socklen);
+  if (s1 == -1) {
+    mrb_sys_fail(mrb, "accept");
+  }
+  // XXX: possible descriptor leakage here!
+  mrb_str_resize(mrb, sastr, socklen);
+  ary = mrb_ary_new_capa(mrb, 2);
+  mrb_ary_push(mrb, ary, mrb_fixnum_value(s1));
+  mrb_ary_push(mrb, ary, sastr);
+  return ary;
+}
+
+static mrb_value
+mrb_socket_bind(mrb_state *mrb, mrb_value klass)
+{
+  mrb_value sastr;
+  mrb_int s;
+
+  mrb_get_args(mrb, "iS", &s, &sastr);
+  if (bind((int)s, (struct sockaddr *)RSTRING_PTR(sastr), (socklen_t)RSTRING_LEN(sastr)) == -1) {
+    mrb_sys_fail(mrb, "bind");
+  }
+  return mrb_nil_value();
+}
+
+static mrb_value
+mrb_socket_connect(mrb_state *mrb, mrb_value klass)
+{
+  mrb_value sastr;
+  mrb_int s;
+
+  mrb_get_args(mrb, "iS", &s, &sastr);
+  if (connect((int)s, (struct sockaddr *)RSTRING_PTR(sastr), (socklen_t)RSTRING_LEN(sastr)) == -1) {
+    mrb_sys_fail(mrb, "connect");
+  }
+  return mrb_nil_value();
+}
+
+static mrb_value
+mrb_socket_listen(mrb_state *mrb, mrb_value klass)
+{
+  mrb_int backlog, s;
+
+  mrb_get_args(mrb, "ii", &s, &backlog);
+  if (listen((int)s, (int)backlog) == -1) {
+    mrb_sys_fail(mrb, "listen");
+  }
+  return mrb_nil_value();
+}
+
+static mrb_value
+mrb_socket_sockaddr_family(mrb_state *mrb, mrb_value klass)
+{
+  const struct sockaddr *sa;
+  mrb_value str;
+
+  mrb_get_args(mrb, "S", &str);
+  if ((size_t)RSTRING_LEN(str) < offsetof(struct sockaddr, sa_family) + sizeof(sa->sa_family)) {
+    mrb_raise(mrb, E_SOCKET_ERROR, "invalid sockaddr (too short)");
+  }
+  sa = (const struct sockaddr *)RSTRING_PTR(str);
+  return mrb_fixnum_value(sa->sa_family);
+}
+
+static mrb_value
+mrb_socket_sockaddr_un(mrb_state *mrb, mrb_value klass)
+{
+#ifdef _WIN32
+  mrb_raise(mrb, E_NOTIMP_ERROR, "sockaddr_un unsupported on Windows");
+  return mrb_nil_value();
+#else
+  struct sockaddr_un *sunp;
+  mrb_value path, s;
+
+  mrb_get_args(mrb, "S", &path);
+  if ((size_t)RSTRING_LEN(path) > sizeof(sunp->sun_path) - 1) {
+    mrb_raisef(mrb, E_ARGUMENT_ERROR, "too long unix socket path (max: %d bytes)", (int)sizeof(sunp->sun_path) - 1);
+  }
+  s = mrb_str_buf_new(mrb, sizeof(struct sockaddr_un));
+  sunp = (struct sockaddr_un *)RSTRING_PTR(s);
+#if HAVE_SA_LEN
+  sunp->sun_len = sizeof(struct sockaddr_un);
+#endif
+  sunp->sun_family = AF_UNIX;
+  memcpy(sunp->sun_path, RSTRING_PTR(path), RSTRING_LEN(path));
+  sunp->sun_path[RSTRING_LEN(path)] = '\0';
+  mrb_str_resize(mrb, s, sizeof(struct sockaddr_un));
+  return s;
+#endif
+}
+
+static mrb_value
+mrb_socket_socketpair(mrb_state *mrb, mrb_value klass)
+{
+#ifdef _WIN32
+  mrb_raise(mrb, E_NOTIMP_ERROR, "socketpair unsupported on Windows");
+  return mrb_nil_value();
+#else
+  mrb_value ary;
+  mrb_int domain, type, protocol;
+  int sv[2];
+
+  mrb_get_args(mrb, "iii", &domain, &type, &protocol);
+  if (socketpair(domain, type, protocol, sv) == -1) {
+    mrb_sys_fail(mrb, "socketpair");
+  }
+  // XXX: possible descriptor leakage here!
+  ary = mrb_ary_new_capa(mrb, 2);
+  mrb_ary_push(mrb, ary, mrb_fixnum_value(sv[0]));
+  mrb_ary_push(mrb, ary, mrb_fixnum_value(sv[1]));
+  return ary;
+#endif
+}
+
+static mrb_value
+mrb_socket_socket(mrb_state *mrb, mrb_value klass)
+{
+  mrb_int domain, type, protocol;
+  int s;
+
+  mrb_get_args(mrb, "iii", &domain, &type, &protocol);
+  s = (int)socket((int)domain, (int)type, (int)protocol);
+  if (s == -1)
+    mrb_sys_fail(mrb, "socket");
+  return mrb_fixnum_value(s);
+}
+
+static mrb_value
+mrb_tcpsocket_allocate(mrb_state *mrb, mrb_value klass)
+{
+  struct RClass *c = mrb_class_ptr(klass);
+  enum mrb_vtype ttype = MRB_INSTANCE_TT(c);
+
+  /* copied from mrb_instance_alloc() */
+  if (ttype == 0) ttype = MRB_TT_OBJECT;
+  return mrb_obj_value((struct RObject*)mrb_obj_alloc(mrb, ttype, c));
+}
+
+/* Windows overrides for IO methods on BasicSocket objects.
+ * This is because sockets on Windows are not the same as file
+ * descriptors, and thus functions which operate on file descriptors
+ * will break on socket descriptors.
+ */
+#ifdef _WIN32
+static mrb_value
+mrb_win32_basicsocket_close(mrb_state *mrb, mrb_value self)
+{
+  if (closesocket(socket_fd(mrb, self)) != NO_ERROR)
+    mrb_raise(mrb, E_SOCKET_ERROR, "closesocket unsuccessful");
+  return mrb_nil_value();
+}
+
+#define E_EOF_ERROR                (mrb_class_get(mrb, "EOFError"))
+static mrb_value
+mrb_win32_basicsocket_sysread(mrb_state *mrb, mrb_value self)
+{
+  int sd, ret;
+  mrb_value buf = mrb_nil_value();
+  mrb_int maxlen;
+
+  mrb_get_args(mrb, "i|S", &maxlen, &buf);
+  if (maxlen < 0) {
+    return mrb_nil_value();
+  }
+
+  if (mrb_nil_p(buf)) {
+    buf = mrb_str_new(mrb, NULL, maxlen);
+  }
+  if (RSTRING_LEN(buf) != maxlen) {
+    buf = mrb_str_resize(mrb, buf, maxlen);
+  }
+
+  sd = socket_fd(mrb, self);
+  ret = recv(sd, RSTRING_PTR(buf), (int)maxlen, 0);
+
+  switch (ret) {
+    case 0: /* EOF */
+      if (maxlen == 0) {
+        buf = mrb_str_new_cstr(mrb, "");
+      } else {
+        mrb_raise(mrb, E_EOF_ERROR, "sysread failed: End of File");
+      }
+      break;
+    case SOCKET_ERROR: /* Error */
+      mrb_sys_fail(mrb, "recv");
+      break;
+    default:
+      if (RSTRING_LEN(buf) != ret) {
+        buf = mrb_str_resize(mrb, buf, ret);
+      }
+      break;
+  }
+
+  return buf;
+}
+
+static mrb_value
+mrb_win32_basicsocket_sysseek(mrb_state *mrb, mrb_value self)
+{
+  mrb_raise(mrb, E_NOTIMP_ERROR, "sysseek not implemented for windows sockets");
+  return mrb_nil_value();
+}
+
+static mrb_value
+mrb_win32_basicsocket_syswrite(mrb_state *mrb, mrb_value self)
+{
+  int n;
+  SOCKET sd;
+  mrb_value str;
+
+  sd = socket_fd(mrb, self);
+  mrb_get_args(mrb, "S", &str);
+  n = send(sd, RSTRING_PTR(str), (int)RSTRING_LEN(str), 0);
+  if (n == SOCKET_ERROR)
+    mrb_sys_fail(mrb, "send");
+  return mrb_fixnum_value(n);
+}
+
+#endif
+
+void
+mrb_mruby_socket_gem_init(mrb_state* mrb)
+{
+  struct RClass *io, *ai, *sock, *bsock, *ipsock, *tcpsock;
+  struct RClass *constants;
+
+#ifdef _WIN32
+  WSADATA wsaData;
+  int result;
+  result = WSAStartup(MAKEWORD(2,2), &wsaData);
+  if (result != NO_ERROR)
+    mrb_raise(mrb, E_RUNTIME_ERROR, "WSAStartup failed");
+#endif
+
+  ai = mrb_define_class(mrb, "Addrinfo", mrb->object_class);
+  mrb_mod_cv_set(mrb, ai, mrb_intern_lit(mrb, "_lastai"), mrb_nil_value());
+  mrb_define_class_method(mrb, ai, "getaddrinfo", mrb_addrinfo_getaddrinfo, MRB_ARGS_REQ(2)|MRB_ARGS_OPT(4));
+  mrb_define_method(mrb, ai, "getnameinfo", mrb_addrinfo_getnameinfo, MRB_ARGS_OPT(1));
+#ifndef _WIN32
+  mrb_define_method(mrb, ai, "unix_path", mrb_addrinfo_unix_path, MRB_ARGS_NONE());
+#endif
+
+  io = mrb_class_get(mrb, "IO");
+
+  bsock = mrb_define_class(mrb, "BasicSocket", io);
+  mrb_define_method(mrb, bsock, "_recvfrom", mrb_basicsocket_recvfrom, MRB_ARGS_REQ(1)|MRB_ARGS_OPT(1));
+  mrb_define_method(mrb, bsock, "_setnonblock", mrb_basicsocket_setnonblock, MRB_ARGS_REQ(1));
+  mrb_define_method(mrb, bsock, "getpeereid", mrb_basicsocket_getpeereid, MRB_ARGS_NONE());
+  mrb_define_method(mrb, bsock, "getpeername", mrb_basicsocket_getpeername, MRB_ARGS_NONE());
+  mrb_define_method(mrb, bsock, "getsockname", mrb_basicsocket_getsockname, MRB_ARGS_NONE());
+  mrb_define_method(mrb, bsock, "getsockopt", mrb_basicsocket_getsockopt, MRB_ARGS_REQ(2));
+  mrb_define_method(mrb, bsock, "recv", mrb_basicsocket_recv, MRB_ARGS_REQ(1)|MRB_ARGS_OPT(1));
+  // #recvmsg(maxlen, flags=0)
+  mrb_define_method(mrb, bsock, "send", mrb_basicsocket_send, MRB_ARGS_REQ(2)|MRB_ARGS_OPT(1));
+  // #sendmsg
+  // #sendmsg_nonblock
+  mrb_define_method(mrb, bsock, "setsockopt", mrb_basicsocket_setsockopt, MRB_ARGS_REQ(1)|MRB_ARGS_OPT(2));
+  mrb_define_method(mrb, bsock, "shutdown", mrb_basicsocket_shutdown, MRB_ARGS_OPT(1));
+  mrb_define_method(mrb, bsock, "_is_socket=", mrb_basicsocket_set_is_socket, MRB_ARGS_REQ(1));
+
+  ipsock = mrb_define_class(mrb, "IPSocket", bsock);
+  mrb_define_class_method(mrb, ipsock, "ntop", mrb_ipsocket_ntop, MRB_ARGS_REQ(1));
+  mrb_define_class_method(mrb, ipsock, "pton", mrb_ipsocket_pton, MRB_ARGS_REQ(2));
+  mrb_define_method(mrb, ipsock, "recvfrom", mrb_ipsocket_recvfrom, MRB_ARGS_REQ(1)|MRB_ARGS_OPT(1));
+
+  tcpsock = mrb_define_class(mrb, "TCPSocket", ipsock);
+  mrb_define_class_method(mrb, tcpsock, "_allocate", mrb_tcpsocket_allocate, MRB_ARGS_NONE());
+  mrb_define_class(mrb, "TCPServer", tcpsock);
+
+  mrb_define_class(mrb, "UDPSocket", ipsock);
+  //#recvfrom_nonblock
+
+  sock = mrb_define_class(mrb, "Socket", bsock);
+  mrb_define_class_method(mrb, sock, "_accept", mrb_socket_accept, MRB_ARGS_REQ(1));
+  mrb_define_class_method(mrb, sock, "_accept2", mrb_socket_accept2, MRB_ARGS_REQ(1));
+  mrb_define_class_method(mrb, sock, "_bind", mrb_socket_bind, MRB_ARGS_REQ(3));
+  mrb_define_class_method(mrb, sock, "_connect", mrb_socket_connect, MRB_ARGS_REQ(3));
+  mrb_define_class_method(mrb, sock, "_listen", mrb_socket_listen, MRB_ARGS_REQ(2));
+  mrb_define_class_method(mrb, sock, "_sockaddr_family", mrb_socket_sockaddr_family, MRB_ARGS_REQ(1));
+  mrb_define_class_method(mrb, sock, "_socket", mrb_socket_socket, MRB_ARGS_REQ(3));
+  //mrb_define_class_method(mrb, sock, "gethostbyaddr", mrb_socket_gethostbyaddr, MRB_ARGS_REQ(1)|MRB_ARGS_OPT(1));
+  //mrb_define_class_method(mrb, sock, "gethostbyname", mrb_socket_gethostbyname, MRB_ARGS_REQ(1)|MRB_ARGS_OPT(1));
+  mrb_define_class_method(mrb, sock, "gethostname", mrb_socket_gethostname, MRB_ARGS_NONE());
+  //mrb_define_class_method(mrb, sock, "getservbyname", mrb_socket_getservbyname, MRB_ARGS_REQ(1)|MRB_ARGS_OPT(1));
+  //mrb_define_class_method(mrb, sock, "getservbyport", mrb_socket_getservbyport, MRB_ARGS_REQ(1)|MRB_ARGS_OPT(1));
+  mrb_define_class_method(mrb, sock, "sockaddr_un", mrb_socket_sockaddr_un, MRB_ARGS_REQ(1));
+  mrb_define_class_method(mrb, sock, "socketpair", mrb_socket_socketpair, MRB_ARGS_REQ(3));
+  //mrb_define_method(mrb, sock, "sysaccept", mrb_socket_accept, MRB_ARGS_NONE());
+
+#ifndef _WIN32
+  mrb_define_class(mrb, "UNIXSocket", bsock);
+  //mrb_define_class_method(mrb, usock, "pair", mrb_unixsocket_open, MRB_ARGS_OPT(2));
+  //mrb_define_class_method(mrb, usock, "socketpair", mrb_unixsocket_open, MRB_ARGS_OPT(2));
+
+  //mrb_define_method(mrb, usock, "recv_io", mrb_unixsocket_peeraddr, MRB_ARGS_NONE());
+  //mrb_define_method(mrb, usock, "recvfrom", mrb_unixsocket_peeraddr, MRB_ARGS_NONE());
+  //mrb_define_method(mrb, usock, "send_io", mrb_unixsocket_peeraddr, MRB_ARGS_NONE());
+#endif
+
+  /* Windows IO Method Overrides on BasicSocket */
+#ifdef _WIN32
+  mrb_define_method(mrb, bsock, "close", mrb_win32_basicsocket_close, MRB_ARGS_NONE());
+  mrb_define_method(mrb, bsock, "sysread", mrb_win32_basicsocket_sysread, MRB_ARGS_REQ(1)|MRB_ARGS_OPT(1));
+  mrb_define_method(mrb, bsock, "sysseek", mrb_win32_basicsocket_sysseek, MRB_ARGS_REQ(1));
+  mrb_define_method(mrb, bsock, "syswrite", mrb_win32_basicsocket_syswrite, MRB_ARGS_REQ(1));
+#endif
+
+  constants = mrb_define_module_under(mrb, sock, "Constants");
+
+#define define_const(SYM) \
+  do {								\
+    mrb_define_const(mrb, constants, #SYM, mrb_fixnum_value(SYM));	\
+  } while (0)
+
+#include "const.cstub"
+}
+
+void
+mrb_mruby_socket_gem_final(mrb_state* mrb)
+{
+  mrb_value ai;
+  ai = mrb_mod_cv_get(mrb, mrb_class_get(mrb, "Addrinfo"), mrb_intern_lit(mrb, "_lastai"));
+  if (mrb_cptr_p(ai)) {
+    freeaddrinfo((struct addrinfo*)mrb_cptr(ai));
+  }
+#ifdef _WIN32
+  WSACleanup();
+#endif
+}
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-socket/test/addrinfo.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-socket/test/addrinfo.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-socket/test/addrinfo.rb	(revision 439)
@@ -0,0 +1,91 @@
+assert('Addrinfo') do
+  assert_equal(Class, Addrinfo.class)
+end
+
+assert('super class of Addrinfo') do
+  assert_equal(Object, Addrinfo.superclass)
+end
+
+assert('Addrinfo.getaddrinfo') do
+  ary = Addrinfo.getaddrinfo("localhost", 53, Socket::AF_INET, Socket::SOCK_STREAM)
+  assert_true(ary.size >= 1)
+  ai = ary[0]
+  assert_equal(ai.afamily, Socket::AF_INET)
+  assert_equal(ai.pfamily, Socket::PF_INET)
+  assert_equal(ai.socktype, Socket::SOCK_STREAM)
+  assert_equal(ai.ip_address, '127.0.0.1')
+  assert_equal(ai.ip_port, 53)
+end
+
+assert('Addrinfo.foreach') do
+  # assume Addrinfo.getaddrinfo works well
+  a = Addrinfo.getaddrinfo("localhost", 80)
+  b = []
+  Addrinfo.foreach("localhost", 80) { |ai| b << ai }
+  assert_equal(a.size, b.size)
+end
+
+assert('Addrinfo.ip') do
+  ai = Addrinfo.ip('127.0.0.1')
+  assert_equal('127.0.0.1', ai.ip_address)
+  assert_equal(Socket::AF_INET, ai.afamily)
+  assert_equal(0, ai.ip_port)
+  assert_equal(0, ai.socktype)
+  assert_equal(0, ai.protocol)
+end
+
+assert('Addrinfo.tcp') do
+  ai = Addrinfo.tcp('127.0.0.1', 25)
+  assert_equal('127.0.0.1', ai.ip_address)
+  assert_equal(Socket::AF_INET, ai.afamily)
+  assert_equal(25, ai.ip_port)
+  assert_equal(Socket::SOCK_STREAM, ai.socktype)
+  assert_equal(Socket::IPPROTO_TCP, ai.protocol)
+end
+
+assert('Addrinfo.udp') do
+  ai = Addrinfo.udp('127.0.0.1', 53)
+  assert_equal('127.0.0.1', ai.ip_address)
+  assert_equal(Socket::AF_INET, ai.afamily)
+  assert_equal(53, ai.ip_port)
+  assert_equal(Socket::SOCK_DGRAM, ai.socktype)
+  assert_equal(Socket::IPPROTO_UDP, ai.protocol)
+end
+
+assert('Addrinfo.unix') do
+  skip "unix is not supported on Windows" if SocketTest.win?
+  a1 = Addrinfo.unix('/tmp/sock')
+  assert_true(a1.unix?)
+  assert_equal('/tmp/sock', a1.unix_path)
+  assert_equal(Socket::SOCK_STREAM, a1.socktype)
+  a2 = Addrinfo.unix('/tmp/sock', Socket::SOCK_DGRAM)
+  assert_equal(Socket::SOCK_DGRAM, a2.socktype)
+end
+
+assert('Addrinfo#afamily') do
+  skip "afamily is not supported on Windows" if SocketTest.win?
+  ai4 = Addrinfo.new(Socket.sockaddr_in(1, '127.0.0.1'))
+  ai6 = Addrinfo.new(Socket.sockaddr_in(1, '::1'))
+  aiu = Addrinfo.new(Socket.sockaddr_un('/tmp/sock'))
+  assert_equal(Socket::AF_INET, ai4.afamily)
+  assert_equal(Socket::AF_INET6, ai6.afamily)
+  assert_equal(Socket::AF_UNIX, aiu.afamily)
+end
+
+# assert('Addrinfo#canonname') do
+
+# #getnameinfo
+# assert('Addrinfo#inspect') do
+# assert('Addrinfo#inspect_socket') do
+# assert('Addrinfo#ip?') do
+# assert('Addrinfo#ip_address') do
+# assert('Addrinfo#ip_port') do
+# assert('Addrinfo#ip_unpack') do
+# assert('Addrinfo#ipv4?') do
+# assert('Addrinfo#ipv6?') do
+# assert('Addrinfo#pfamily') do
+# assert('Addrinfo#protocol') do
+# assert('Addrinfo#socktype') do
+# assert('Addrinfo#to_sockaddr') do
+# assert('Addrinfo#unix?') do
+# #unix_path
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-socket/test/basicsocket.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-socket/test/basicsocket.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-socket/test/basicsocket.rb	(revision 439)
@@ -0,0 +1,17 @@
+assert('BasicSocket') do
+  assert_equal(Class, BasicSocket.class)
+end
+
+assert('super class of BasicSocket') do
+  assert_equal(IO, BasicSocket.superclass)
+end
+
+assert('BasicSocket.do_not_reverse_lookup') do
+  assert_equal(BasicSocket.do_not_reverse_lookup, true)
+end
+
+assert('BasicSocket.do_not_reverse_lookup=') do
+  BasicSocket.do_not_reverse_lookup = false
+  assert_equal(BasicSocket.do_not_reverse_lookup, false)
+  BasicSocket.do_not_reverse_lookup = true
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-socket/test/ipsocket.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-socket/test/ipsocket.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-socket/test/ipsocket.rb	(revision 439)
@@ -0,0 +1,44 @@
+unless SocketTest.win?
+
+# Note: most of tests below will fail if UDPSocket is broken.
+
+assert('IPSocket.getaddress') do
+  l = IPSocket.getaddress("localhost")
+  assert_true (l == "127.0.0.1" or l == "::1")
+end
+
+assert('IPSocket.addr') do
+  localhost = "127.0.0.1"
+  s = UDPSocket.new
+  s.bind(localhost, 0)
+  port = Addrinfo.new(s.getsockname).ip_port
+
+  a = s.addr
+  assert_equal "AF_INET", a[0]
+  assert_equal port,      a[1]
+  assert_equal localhost, a[2]
+  assert_equal localhost, a[3]
+  s.close
+  true
+end
+
+assert('IPSocket.peeraddr') do
+  localhost = "127.0.0.1"
+  server = UDPSocket.new
+  server.bind(localhost, 0)
+  port = server.local_address.ip_port
+
+  client = UDPSocket.new
+  client.connect(localhost, port)
+
+  a = client.peeraddr
+  assert_equal "AF_INET", a[0]
+  assert_equal port,      a[1]
+  assert_equal localhost, a[2]
+  assert_equal localhost, a[3]
+  client.close
+  server.close
+  true
+end
+
+end # win?
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-socket/test/socket.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-socket/test/socket.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-socket/test/socket.rb	(revision 439)
@@ -0,0 +1,38 @@
+unless SocketTest.win?
+
+assert('Socket.gethostname') do
+  assert_true(Socket.gethostname.is_a? String)
+end
+
+assert('Socket::getaddrinfo') do
+  ret = Socket.getaddrinfo("localhost", 53, Socket::AF_INET, Socket::SOCK_DGRAM)
+  assert_true ret.size >= 1
+  a = ret[0]
+  assert_equal "AF_INET",           a[0]
+  assert_equal 53,                  a[1]
+  # documents says it's a hostname but CRuby returns an address
+  #assert_equal "127.0.0.1",         a[2]
+  assert_equal "127.0.0.1",         a[3]
+  assert_equal Socket::AF_INET,     a[4]
+  assert_equal Socket::SOCK_DGRAM,  a[5]
+  assert_equal Socket::IPPROTO_UDP, a[6] unless SocketTest.cygwin?
+end
+
+assert('Socket#recvfrom') do
+  begin
+    sstr = "abcdefg"
+    s = Socket.new(Socket::AF_INET, Socket::SOCK_DGRAM, 0)
+    c = Socket.new(Socket::AF_INET, Socket::SOCK_DGRAM, 0)
+    s.bind(Socket.sockaddr_in(0, "127.0.0.1"))
+    c.send sstr, 0, s.getsockname
+    rstr, ai = s.recvfrom sstr.size
+
+    assert_equal sstr, rstr
+    assert_equal "127.0.0.1", ai.ip_address
+  ensure
+    s.close rescue nil
+    c.close rescue nil
+  end
+end
+
+end   # win?
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-socket/test/sockettest.c
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-socket/test/sockettest.c	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-socket/test/sockettest.c	(revision 439)
@@ -0,0 +1,84 @@
+#include <stdlib.h>
+
+#include "mruby.h"
+#include "mruby/error.h"
+
+#if defined(_WIN32) || defined(_WIN64)
+
+#include <io.h>
+
+#if defined(_MSC_VER) || \
+    (defined(MRB_MINGW32_VERSION) && MRB_MINGW32_VERSION < 3021) || \
+    (defined(MRB_MINGW64_VERSION) && MRB_MINGW64_VERSION < 4000)
+
+#include <fcntl.h>
+#include <sys/stat.h>
+#define open  _open
+#define close _close
+#define unlink _unlink
+
+static int
+mkstemp(char *p)
+{
+  int fd;
+  char* fname = _mktemp(p);
+  if (fname == NULL)
+    return -1;
+  fd = open(fname, O_RDWR | O_CREAT | O_EXCL, _S_IREAD | _S_IWRITE);
+  if (fd >= 0)
+    return fd;
+  return -1;
+}
+#endif
+
+#else
+
+#include <unistd.h>
+
+#endif
+
+mrb_value
+mrb_sockettest_tmppath(mrb_state *mrb, mrb_value klass)
+{
+  char name[] = "mruby-socket.XXXXXXXX";
+  int fd = mkstemp(name);
+  if (fd == -1) {
+    mrb_sys_fail(mrb, 0);
+  }
+  if (close(fd) == -1) {
+    mrb_sys_fail(mrb, 0);
+  }
+  if (unlink(name) == -1) {
+    mrb_sys_fail(mrb, 0);
+  }
+  return mrb_str_new_cstr(mrb, name);
+}
+
+mrb_value
+mrb_sockettest_win_p(mrb_state *mrb, mrb_value klass)
+{
+#ifdef _WIN32
+  return mrb_true_value();
+#else
+  return mrb_false_value();
+#endif
+}
+
+mrb_value
+mrb_sockettest_cygwin_p(mrb_state *mrb, mrb_value klass)
+{
+#if defined(__CYGWIN__) || defined(__CYGWIN32__)
+  return mrb_true_value();
+#else
+  return mrb_false_value();
+#endif
+}
+
+void
+mrb_mruby_socket_gem_test(mrb_state* mrb)
+{
+  struct RClass *c = mrb_define_module(mrb, "SocketTest");
+  mrb_define_class_method(mrb, c, "tmppath", mrb_sockettest_tmppath, MRB_ARGS_NONE());
+  mrb_define_class_method(mrb, c, "win?", mrb_sockettest_win_p, MRB_ARGS_NONE());
+  mrb_define_class_method(mrb, c, "cygwin?", mrb_sockettest_cygwin_p, MRB_ARGS_NONE());
+}
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-socket/test/tcpsocket.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-socket/test/tcpsocket.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-socket/test/tcpsocket.rb	(revision 439)
@@ -0,0 +1,4 @@
+#assert('TCPSocket.gethostbyname') do
+#assert('TCPSocket.new') do
+#assert('TCPSocket#close') do
+#assert('TCPSocket#write') do
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-socket/test/udpsocket.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-socket/test/udpsocket.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-socket/test/udpsocket.rb	(revision 439)
@@ -0,0 +1,16 @@
+assert('UDPSocket.new') do
+  s = UDPSocket.new
+  assert_true(s.is_a? UDPSocket)
+  s.close
+  s = UDPSocket.new(Socket::AF_INET6)
+  assert_true(s.is_a? UDPSocket)
+  s.close
+  true
+end
+
+#assert('UDPSocket#connect') do
+#assert('UDPSocket#send') do
+#assert('UDPSocket#recv') do
+
+#assert('UDPSocket#bind') do
+#assert('UDPSocket#recvfrom_nonblock') do
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-socket/test/unix.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-socket/test/unix.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-socket/test/unix.rb	(revision 439)
@@ -0,0 +1,130 @@
+unless SocketTest.win? || SocketTest.cygwin?
+
+def unixserver_test_block
+  path = SocketTest.tmppath
+  File.unlink path rescue nil
+  begin
+    result = yield path
+  ensure
+    File.unlink path rescue nil
+  end
+  result
+end
+
+def with_unix_server
+  unixserver_test_block do |path|
+    UNIXServer.open(path) { |server|
+      yield path, server
+    }
+  end
+end
+
+def with_unix_client
+  with_unix_server do |path, server|
+    UNIXSocket.open(path) do |csock|
+      ssock = server.accept
+      begin
+        yield path, server, ssock, csock
+      ensure
+        ssock.close unless ssock.closed? rescue nil
+      end
+    end
+  end
+end
+
+assert('UNIXServer.new') do
+  unixserver_test_block do |path|
+    server = UNIXServer.new(path)
+    assert_true server.is_a? UNIXServer
+    server.close
+    File.unlink path
+
+    s2 = nil
+    result = UNIXServer.open(path) { |s1|
+      assert_true s1.is_a? UNIXServer
+      s2 = s1
+      1234
+    }
+    assert_equal 1234, result
+    assert_true s2.is_a? UNIXServer
+    assert_true s2.closed?
+  end
+end
+
+# assert('UNIXServer#accept_nonblock') - would block if fails
+
+assert('UNIXServer#addr') do
+  with_unix_server do |path, server|
+    assert_equal [ "AF_UNIX", path], server.addr
+  end
+end
+
+assert('UNIXServer#path') do
+  with_unix_server do |path, server|
+    assert_equal path, server.path
+  end
+end
+
+# assert('UNIXServer#peeraddr') - will raise a runtime exception
+
+assert('UNIXServer#listen') do
+  with_unix_server do |path, server|
+    assert_equal 0, server.listen(1)
+  end
+end
+
+assert('UNIXServer#sysaccept') do
+  with_unix_server do |path, server|
+    UNIXSocket.open(path) do |csock|
+      begin
+        fd = server.sysaccept
+        assert_true fd.kind_of? Integer
+      ensure
+        IO._sysclose(fd) rescue nil
+      end
+    end
+  end
+end
+
+assert('UNIXSocket.new') do
+  with_unix_server do |path, server|
+    c = UNIXSocket.new(path)
+    assert_true c.is_a? UNIXSocket
+    c.close
+    true
+  end
+end
+
+assert('UNIXSocket#addr') do
+  with_unix_client do |path, server, ssock, csock|
+    assert_equal [ "AF_UNIX", path ], ssock.addr
+    assert_equal [ "AF_UNIX", "" ],   csock.addr
+  end
+end
+
+assert('UNIXSocket#path') do
+  with_unix_client do |path, server, ssock, csock|
+    assert_equal path, ssock.path
+    assert_equal "",   csock.path
+  end
+end
+
+assert('UNIXSocket#peeraddr') do
+  with_unix_client do |path, server, ssock, csock|
+    assert_equal [ "AF_UNIX", ""   ], ssock.peeraddr
+    assert_equal [ "AF_UNIX", path ], csock.peeraddr
+  end
+end
+
+assert('UNIXSocket#recvfrom') do
+  with_unix_client do |path, server, ssock, csock|
+    str = "0123456789"
+    ssock.send str, 0
+    a = csock.recvfrom(8)
+    assert_equal str[0, 8], a[0]
+    assert_equal "AF_UNIX", a[1][0]
+    # a[1][1] would be "" or something
+  end
+end
+
+end # SocketTest.win?
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-sprintf/mrbgem.rake
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-sprintf/mrbgem.rake	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-sprintf/mrbgem.rake	(revision 439)
@@ -0,0 +1,5 @@
+MRuby::Gem::Specification.new('mruby-sprintf') do |spec|
+  spec.license = 'MIT'
+  spec.author  = 'mruby developers'
+  spec.summary = 'standard Kernel#sprintf method'
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-sprintf/mrblib/string.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-sprintf/mrblib/string.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-sprintf/mrblib/string.rb	(revision 439)
@@ -0,0 +1,9 @@
+class String
+  def %(args)
+    if args.is_a? Array
+      sprintf(self, *args)
+    else
+      sprintf(self, args)
+    end
+  end
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-sprintf/src/kernel.c
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-sprintf/src/kernel.c	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-sprintf/src/kernel.c	(revision 439)
@@ -0,0 +1,30 @@
+/*
+** kernel.c - Kernel module suppliment
+**
+** See Copyright Notice in mruby.h
+*/
+
+#include <mruby.h>
+
+mrb_value mrb_f_sprintf(mrb_state *mrb, mrb_value obj); /* in sprintf.c */
+
+void
+mrb_mruby_sprintf_gem_init(mrb_state* mrb)
+{
+  struct RClass *krn;
+
+  if (mrb->kernel_module == NULL) {
+    mrb->kernel_module = mrb_define_module(mrb, "Kernel"); /* Might be PARANOID. */
+  }
+  krn = mrb->kernel_module;
+
+  mrb_define_method(mrb, krn, "sprintf", mrb_f_sprintf, MRB_ARGS_REQ(1)|MRB_ARGS_REST());
+  mrb_define_method(mrb, krn, "format",  mrb_f_sprintf, MRB_ARGS_REQ(1)|MRB_ARGS_REST());
+}
+
+void
+mrb_mruby_sprintf_gem_final(mrb_state* mrb)
+{
+  /* nothing to do. */
+}
+
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-sprintf/src/sprintf.c
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-sprintf/src/sprintf.c	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-sprintf/src/sprintf.c	(revision 439)
@@ -0,0 +1,1128 @@
+/*
+** sprintf.c - Kernel.#sprintf
+**
+** See Copyright Notice in mruby.h
+*/
+
+#include <mruby.h>
+
+#ifdef MRB_DISABLE_STDIO
+# error sprintf conflicts 'MRB_DISABLE_STDIO' configuration in your 'build_config.rb'
+#endif
+
+#include <limits.h>
+#include <string.h>
+#include <mruby/string.h>
+#include <mruby/hash.h>
+#include <mruby/numeric.h>
+#ifndef MRB_WITHOUT_FLOAT
+#include <math.h>
+#endif
+#include <ctype.h>
+
+#define BIT_DIGITS(N)   (((N)*146)/485 + 1)  /* log2(10) =~ 146/485 */
+#define BITSPERDIG MRB_INT_BIT
+#define EXTENDSIGN(n, l) (((~0U << (n)) >> (((n)*(l)) % BITSPERDIG)) & ~(~0U << (n)))
+
+mrb_value mrb_str_format(mrb_state *, mrb_int, const mrb_value *, mrb_value);
+#ifndef MRB_WITHOUT_FLOAT
+static void fmt_setup(char*,size_t,int,int,mrb_int,mrb_int);
+#endif
+
+static char*
+remove_sign_bits(char *str, int base)
+{
+  char *t;
+
+  t = str;
+  if (base == 16) {
+    while (*t == 'f') {
+      t++;
+    }
+  }
+  else if (base == 8) {
+    *t |= EXTENDSIGN(3, strlen(t));
+    while (*t == '7') {
+      t++;
+    }
+  }
+  else if (base == 2) {
+    while (*t == '1') {
+      t++;
+    }
+  }
+
+  return t;
+}
+
+static char
+sign_bits(int base, const char *p)
+{
+  char c;
+
+  switch (base) {
+  case 16:
+    if (*p == 'X') c = 'F';
+    else c = 'f';
+    break;
+  case 8:
+    c = '7'; break;
+  case 2:
+    c = '1'; break;
+  default:
+    c = '.'; break;
+  }
+  return c;
+}
+
+static mrb_value
+mrb_fix2binstr(mrb_state *mrb, mrb_value x, int base)
+{
+  char buf[66], *b = buf + sizeof buf;
+  mrb_int num = mrb_fixnum(x);
+  uint64_t val = (uint64_t)num;
+  char d;
+
+  if (base != 2) {
+    mrb_raisef(mrb, E_ARGUMENT_ERROR, "invalid radix %d", base);
+  }
+  if (val == 0) {
+    return mrb_str_new_lit(mrb, "0");
+  }
+  *--b = '\0';
+  do {
+    *--b = mrb_digitmap[(int)(val % base)];
+  } while (val /= base);
+
+  if (num < 0) {
+    b = remove_sign_bits(b, base);
+    switch (base) {
+    case 16: d = 'f'; break;
+    case 8:  d = '7'; break;
+    case 2:  d = '1'; break;
+    default: d = 0;   break;
+    }
+
+    if (d && *b != d) {
+      *--b = d;
+    }
+  }
+
+  return mrb_str_new_cstr(mrb, b);
+}
+
+#define FNONE  0
+#define FSHARP 1
+#define FMINUS 2
+#define FPLUS  4
+#define FZERO  8
+#define FSPACE 16
+#define FWIDTH 32
+#define FPREC  64
+#define FPREC0 128
+
+#define CHECK(l) do {\
+  while ((l) >= bsiz - blen) {\
+    if (bsiz > MRB_INT_MAX/2) mrb_raise(mrb, E_ARGUMENT_ERROR, "too big specifier"); \
+    bsiz*=2;\
+  }\
+  mrb_str_resize(mrb, result, bsiz);\
+  buf = RSTRING_PTR(result);\
+} while (0)
+
+#define PUSH(s, l) do { \
+  CHECK(l);\
+  memcpy(&buf[blen], s, l);\
+  blen += (mrb_int)(l);\
+} while (0)
+
+#define FILL(c, l) do { \
+  CHECK(l);\
+  memset(&buf[blen], c, l);\
+  blen += (l);\
+} while (0)
+
+static void
+check_next_arg(mrb_state *mrb, int posarg, int nextarg)
+{
+  switch (posarg) {
+  case -1:
+    mrb_raisef(mrb, E_ARGUMENT_ERROR, "unnumbered(%d) mixed with numbered", nextarg);
+    break;
+  case -2:
+    mrb_raisef(mrb, E_ARGUMENT_ERROR, "unnumbered(%d) mixed with named", nextarg);
+    break;
+  default:
+    break;
+  }
+}
+
+static void
+check_pos_arg(mrb_state *mrb, int posarg, mrb_int n)
+{
+  if (posarg > 0) {
+    mrb_raisef(mrb, E_ARGUMENT_ERROR, "numbered(%i) after unnumbered(%d)",
+               n, posarg);
+  }
+  if (posarg == -2) {
+    mrb_raisef(mrb, E_ARGUMENT_ERROR, "numbered(%i) after named", n);
+  }
+  if (n < 1) {
+    mrb_raisef(mrb, E_ARGUMENT_ERROR, "invalid index - %i$", n);
+  }
+}
+
+static void
+check_name_arg(mrb_state *mrb, int posarg, const char *name, size_t len)
+{
+  if (posarg > 0) {
+    mrb_raisef(mrb, E_ARGUMENT_ERROR, "named%l after unnumbered(%d)",
+               name, len, posarg);
+  }
+  if (posarg == -1) {
+    mrb_raisef(mrb, E_ARGUMENT_ERROR, "named%l after numbered", name, len);
+  }
+}
+
+#define GETNEXTARG() (\
+  check_next_arg(mrb, posarg, nextarg),\
+  (posarg = nextarg++, GETNTHARG(posarg)))
+
+#define GETARG() (!mrb_undef_p(nextvalue) ? nextvalue : GETNEXTARG())
+
+#define GETPOSARG(n) (\
+  check_pos_arg(mrb, posarg, n),\
+  (posarg = -1, GETNTHARG(n)))
+
+#define GETNTHARG(nth) \
+  ((nth >= argc) ? (mrb_raise(mrb, E_ARGUMENT_ERROR, "too few arguments"), mrb_undef_value()) : argv[nth])
+
+#define GETNAMEARG(id, name, len) (\
+  check_name_arg(mrb, posarg, name, len),\
+  (posarg = -2, mrb_hash_fetch(mrb, get_hash(mrb, &hash, argc, argv), id, mrb_undef_value())))
+
+#define GETNUM(n, val) \
+  for (; p < end && ISDIGIT(*p); p++) {\
+    if (n > (MRB_INT_MAX - (*p - '0'))/10) {\
+      mrb_raise(mrb, E_ARGUMENT_ERROR, #val " too big"); \
+    } \
+    n = 10 * n + (*p - '0'); \
+  } \
+  if (p >= end) { \
+    mrb_raise(mrb, E_ARGUMENT_ERROR, "malformed format string - %*[0-9]"); \
+  }
+
+#define GETASTER(num) do { \
+  mrb_value tmp_v; \
+  t = p++; \
+  n = 0; \
+  GETNUM(n, val); \
+  if (*p == '$') { \
+    tmp_v = GETPOSARG(n); \
+  } \
+  else { \
+    tmp_v = GETNEXTARG(); \
+    p = t; \
+  } \
+  num = mrb_int(mrb, tmp_v); \
+} while (0)
+
+static mrb_value
+get_hash(mrb_state *mrb, mrb_value *hash, mrb_int argc, const mrb_value *argv)
+{
+  mrb_value tmp;
+
+  if (!mrb_undef_p(*hash)) return *hash;
+  if (argc != 2) {
+    mrb_raise(mrb, E_ARGUMENT_ERROR, "one hash required");
+  }
+  tmp = mrb_check_hash_type(mrb, argv[1]);
+  if (mrb_nil_p(tmp)) {
+    mrb_raise(mrb, E_ARGUMENT_ERROR, "one hash required");
+  }
+  return (*hash = tmp);
+}
+
+/*
+ *  call-seq:
+ *     format(format_string [, arguments...] )   -> string
+ *     sprintf(format_string [, arguments...] )  -> string
+ *
+ *  Returns the string resulting from applying <i>format_string</i> to
+ *  any additional arguments.  Within the format string, any characters
+ *  other than format sequences are copied to the result.
+ *
+ *  The syntax of a format sequence is follows.
+ *
+ *    %[flags][width][.precision]type
+ *
+ *  A format
+ *  sequence consists of a percent sign, followed by optional flags,
+ *  width, and precision indicators, then terminated with a field type
+ *  character.  The field type controls how the corresponding
+ *  <code>sprintf</code> argument is to be interpreted, while the flags
+ *  modify that interpretation.
+ *
+ *  The field type characters are:
+ *
+ *      Field |  Integer Format
+ *      ------+--------------------------------------------------------------
+ *        b   | Convert argument as a binary number.
+ *            | Negative numbers will be displayed as a two's complement
+ *            | prefixed with '..1'.
+ *        B   | Equivalent to 'b', but uses an uppercase 0B for prefix
+ *            | in the alternative format by #.
+ *        d   | Convert argument as a decimal number.
+ *        i   | Identical to 'd'.
+ *        o   | Convert argument as an octal number.
+ *            | Negative numbers will be displayed as a two's complement
+ *            | prefixed with '..7'.
+ *        u   | Identical to 'd'.
+ *        x   | Convert argument as a hexadecimal number.
+ *            | Negative numbers will be displayed as a two's complement
+ *            | prefixed with '..f' (representing an infinite string of
+ *            | leading 'ff's).
+ *        X   | Equivalent to 'x', but uses uppercase letters.
+ *
+ *      Field |  Float Format
+ *      ------+--------------------------------------------------------------
+ *        e   | Convert floating point argument into exponential notation
+ *            | with one digit before the decimal point as [-]d.dddddde[+-]dd.
+ *            | The precision specifies the number of digits after the decimal
+ *            | point (defaulting to six).
+ *        E   | Equivalent to 'e', but uses an uppercase E to indicate
+ *            | the exponent.
+ *        f   | Convert floating point argument as [-]ddd.dddddd,
+ *            | where the precision specifies the number of digits after
+ *            | the decimal point.
+ *        g   | Convert a floating point number using exponential form
+ *            | if the exponent is less than -4 or greater than or
+ *            | equal to the precision, or in dd.dddd form otherwise.
+ *            | The precision specifies the number of significant digits.
+ *        G   | Equivalent to 'g', but use an uppercase 'E' in exponent form.
+ *        a   | Convert floating point argument as [-]0xh.hhhhp[+-]dd,
+ *            | which is consisted from optional sign, "0x", fraction part
+ *            | as hexadecimal, "p", and exponential part as decimal.
+ *        A   | Equivalent to 'a', but use uppercase 'X' and 'P'.
+ *
+ *      Field |  Other Format
+ *      ------+--------------------------------------------------------------
+ *        c   | Argument is the numeric code for a single character or
+ *            | a single character string itself.
+ *        p   | The valuing of argument.inspect.
+ *        s   | Argument is a string to be substituted.  If the format
+ *            | sequence contains a precision, at most that many characters
+ *            | will be copied.
+ *        %   | A percent sign itself will be displayed.  No argument taken.
+ *
+ *  The flags modifies the behavior of the formats.
+ *  The flag characters are:
+ *
+ *    Flag     | Applies to    | Meaning
+ *    ---------+---------------+-----------------------------------------
+ *    space    | bBdiouxX      | Leave a space at the start of
+ *             | aAeEfgG       | non-negative numbers.
+ *             | (numeric fmt) | For 'o', 'x', 'X', 'b' and 'B', use
+ *             |               | a minus sign with absolute value for
+ *             |               | negative values.
+ *    ---------+---------------+-----------------------------------------
+ *    (digit)$ | all           | Specifies the absolute argument number
+ *             |               | for this field.  Absolute and relative
+ *             |               | argument numbers cannot be mixed in a
+ *             |               | sprintf string.
+ *    ---------+---------------+-----------------------------------------
+ *     #       | bBoxX         | Use an alternative format.
+ *             | aAeEfgG       | For the conversions 'o', increase the precision
+ *             |               | until the first digit will be '0' if
+ *             |               | it is not formatted as complements.
+ *             |               | For the conversions 'x', 'X', 'b' and 'B'
+ *             |               | on non-zero, prefix the result with "0x",
+ *             |               | "0X", "0b" and "0B", respectively.
+ *             |               | For 'a', 'A', 'e', 'E', 'f', 'g', and 'G',
+ *             |               | force a decimal point to be added,
+ *             |               | even if no digits follow.
+ *             |               | For 'g' and 'G', do not remove trailing zeros.
+ *    ---------+---------------+-----------------------------------------
+ *    +        | bBdiouxX      | Add a leading plus sign to non-negative
+ *             | aAeEfgG       | numbers.
+ *             | (numeric fmt) | For 'o', 'x', 'X', 'b' and 'B', use
+ *             |               | a minus sign with absolute value for
+ *             |               | negative values.
+ *    ---------+---------------+-----------------------------------------
+ *    -        | all           | Left-justify the result of this conversion.
+ *    ---------+---------------+-----------------------------------------
+ *    0 (zero) | bBdiouxX      | Pad with zeros, not spaces.
+ *             | aAeEfgG       | For 'o', 'x', 'X', 'b' and 'B', radix-1
+ *             | (numeric fmt) | is used for negative numbers formatted as
+ *             |               | complements.
+ *    ---------+---------------+-----------------------------------------
+ *    *        | all           | Use the next argument as the field width.
+ *             |               | If negative, left-justify the result. If the
+ *             |               | asterisk is followed by a number and a dollar
+ *             |               | sign, use the indicated argument as the width.
+ *
+ *  Examples of flags:
+ *
+ *   # '+' and space flag specifies the sign of non-negative numbers.
+ *   sprintf("%d", 123)  #=> "123"
+ *   sprintf("%+d", 123) #=> "+123"
+ *   sprintf("% d", 123) #=> " 123"
+ *
+ *   # '#' flag for 'o' increases number of digits to show '0'.
+ *   # '+' and space flag changes format of negative numbers.
+ *   sprintf("%o", 123)   #=> "173"
+ *   sprintf("%#o", 123)  #=> "0173"
+ *   sprintf("%+o", -123) #=> "-173"
+ *   sprintf("%o", -123)  #=> "..7605"
+ *   sprintf("%#o", -123) #=> "..7605"
+ *
+ *   # '#' flag for 'x' add a prefix '0x' for non-zero numbers.
+ *   # '+' and space flag disables complements for negative numbers.
+ *   sprintf("%x", 123)   #=> "7b"
+ *   sprintf("%#x", 123)  #=> "0x7b"
+ *   sprintf("%+x", -123) #=> "-7b"
+ *   sprintf("%x", -123)  #=> "..f85"
+ *   sprintf("%#x", -123) #=> "0x..f85"
+ *   sprintf("%#x", 0)    #=> "0"
+ *
+ *   # '#' for 'X' uses the prefix '0X'.
+ *   sprintf("%X", 123)  #=> "7B"
+ *   sprintf("%#X", 123) #=> "0X7B"
+ *
+ *   # '#' flag for 'b' add a prefix '0b' for non-zero numbers.
+ *   # '+' and space flag disables complements for negative numbers.
+ *   sprintf("%b", 123)   #=> "1111011"
+ *   sprintf("%#b", 123)  #=> "0b1111011"
+ *   sprintf("%+b", -123) #=> "-1111011"
+ *   sprintf("%b", -123)  #=> "..10000101"
+ *   sprintf("%#b", -123) #=> "0b..10000101"
+ *   sprintf("%#b", 0)    #=> "0"
+ *
+ *   # '#' for 'B' uses the prefix '0B'.
+ *   sprintf("%B", 123)  #=> "1111011"
+ *   sprintf("%#B", 123) #=> "0B1111011"
+ *
+ *   # '#' for 'e' forces to show the decimal point.
+ *   sprintf("%.0e", 1)  #=> "1e+00"
+ *   sprintf("%#.0e", 1) #=> "1.e+00"
+ *
+ *   # '#' for 'f' forces to show the decimal point.
+ *   sprintf("%.0f", 1234)  #=> "1234"
+ *   sprintf("%#.0f", 1234) #=> "1234."
+ *
+ *   # '#' for 'g' forces to show the decimal point.
+ *   # It also disables stripping lowest zeros.
+ *   sprintf("%g", 123.4)   #=> "123.4"
+ *   sprintf("%#g", 123.4)  #=> "123.400"
+ *   sprintf("%g", 123456)  #=> "123456"
+ *   sprintf("%#g", 123456) #=> "123456."
+ *
+ *  The field width is an optional integer, followed optionally by a
+ *  period and a precision.  The width specifies the minimum number of
+ *  characters that will be written to the result for this field.
+ *
+ *  Examples of width:
+ *
+ *   # padding is done by spaces,       width=20
+ *   # 0 or radix-1.             <------------------>
+ *   sprintf("%20d", 123)   #=> "                 123"
+ *   sprintf("%+20d", 123)  #=> "                +123"
+ *   sprintf("%020d", 123)  #=> "00000000000000000123"
+ *   sprintf("%+020d", 123) #=> "+0000000000000000123"
+ *   sprintf("% 020d", 123) #=> " 0000000000000000123"
+ *   sprintf("%-20d", 123)  #=> "123                 "
+ *   sprintf("%-+20d", 123) #=> "+123                "
+ *   sprintf("%- 20d", 123) #=> " 123                "
+ *   sprintf("%020x", -123) #=> "..ffffffffffffffff85"
+ *
+ *  For
+ *  numeric fields, the precision controls the number of decimal places
+ *  displayed.  For string fields, the precision determines the maximum
+ *  number of characters to be copied from the string.  (Thus, the format
+ *  sequence <code>%10.10s</code> will always contribute exactly ten
+ *  characters to the result.)
+ *
+ *  Examples of precisions:
+ *
+ *   # precision for 'd', 'o', 'x' and 'b' is
+ *   # minimum number of digits               <------>
+ *   sprintf("%20.8d", 123)  #=> "            00000123"
+ *   sprintf("%20.8o", 123)  #=> "            00000173"
+ *   sprintf("%20.8x", 123)  #=> "            0000007b"
+ *   sprintf("%20.8b", 123)  #=> "            01111011"
+ *   sprintf("%20.8d", -123) #=> "           -00000123"
+ *   sprintf("%20.8o", -123) #=> "            ..777605"
+ *   sprintf("%20.8x", -123) #=> "            ..ffff85"
+ *   sprintf("%20.8b", -11)  #=> "            ..110101"
+ *
+ *   # "0x" and "0b" for '#x' and '#b' is not counted for
+ *   # precision but "0" for '#o' is counted.  <------>
+ *   sprintf("%#20.8d", 123)  #=> "            00000123"
+ *   sprintf("%#20.8o", 123)  #=> "            00000173"
+ *   sprintf("%#20.8x", 123)  #=> "          0x0000007b"
+ *   sprintf("%#20.8b", 123)  #=> "          0b01111011"
+ *   sprintf("%#20.8d", -123) #=> "           -00000123"
+ *   sprintf("%#20.8o", -123) #=> "            ..777605"
+ *   sprintf("%#20.8x", -123) #=> "          0x..ffff85"
+ *   sprintf("%#20.8b", -11)  #=> "          0b..110101"
+ *
+ *   # precision for 'e' is number of
+ *   # digits after the decimal point           <------>
+ *   sprintf("%20.8e", 1234.56789) #=> "      1.23456789e+03"
+ *
+ *   # precision for 'f' is number of
+ *   # digits after the decimal point               <------>
+ *   sprintf("%20.8f", 1234.56789) #=> "       1234.56789000"
+ *
+ *   # precision for 'g' is number of
+ *   # significant digits                          <------->
+ *   sprintf("%20.8g", 1234.56789) #=> "           1234.5679"
+ *
+ *   #                                         <------->
+ *   sprintf("%20.8g", 123456789)  #=> "       1.2345679e+08"
+ *
+ *   # precision for 's' is
+ *   # maximum number of characters                    <------>
+ *   sprintf("%20.8s", "string test") #=> "            string t"
+ *
+ *  Examples:
+ *
+ *     sprintf("%d %04x", 123, 123)               #=> "123 007b"
+ *     sprintf("%08b '%4s'", 123, 123)            #=> "01111011 ' 123'"
+ *     sprintf("%1$*2$s %2$d %1$s", "hello", 8)   #=> "   hello 8 hello"
+ *     sprintf("%1$*2$s %2$d", "hello", -8)       #=> "hello    -8"
+ *     sprintf("%+g:% g:%-g", 1.23, 1.23, 1.23)   #=> "+1.23: 1.23:1.23"
+ *     sprintf("%u", -123)                        #=> "-123"
+ *
+ *  For more complex formatting, Ruby supports a reference by name.
+ *  %<name>s style uses format style, but %{name} style doesn't.
+ *
+ *  Exapmles:
+ *    sprintf("%<foo>d : %<bar>f", { :foo => 1, :bar => 2 })
+ *      #=> 1 : 2.000000
+ *    sprintf("%{foo}f", { :foo => 1 })
+ *      # => "1f"
+ */
+
+mrb_value
+mrb_f_sprintf(mrb_state *mrb, mrb_value obj)
+{
+  mrb_int argc;
+  mrb_value *argv;
+
+  mrb_get_args(mrb, "*", &argv, &argc);
+
+  if (argc <= 0) {
+    mrb_raise(mrb, E_ARGUMENT_ERROR, "too few arguments");
+    return mrb_nil_value();
+  }
+  else {
+    return mrb_str_format(mrb, argc - 1, argv + 1, argv[0]);
+  }
+}
+
+mrb_value
+mrb_str_format(mrb_state *mrb, mrb_int argc, const mrb_value *argv, mrb_value fmt)
+{
+  const char *p, *end;
+  char *buf;
+  mrb_int blen;
+  mrb_int bsiz;
+  mrb_value result;
+  mrb_int n;
+  mrb_int width;
+  mrb_int prec;
+  int nextarg = 1;
+  int posarg = 0;
+  mrb_value nextvalue;
+  mrb_value str;
+  mrb_value hash = mrb_undef_value();
+
+#define CHECK_FOR_WIDTH(f)                                                  \
+  if ((f) & FWIDTH) {                                                       \
+    mrb_raise(mrb, E_ARGUMENT_ERROR, "width given twice");         \
+  }                                                                         \
+  if ((f) & FPREC0) {                                                       \
+    mrb_raise(mrb, E_ARGUMENT_ERROR, "width after precision");     \
+  }
+#define CHECK_FOR_FLAGS(f)                                                  \
+  if ((f) & FWIDTH) {                                                       \
+    mrb_raise(mrb, E_ARGUMENT_ERROR, "flag after width");          \
+  }                                                                         \
+  if ((f) & FPREC0) {                                                       \
+    mrb_raise(mrb, E_ARGUMENT_ERROR, "flag after precision");      \
+  }
+
+  ++argc;
+  --argv;
+  mrb_to_str(mrb, fmt);
+  p = RSTRING_PTR(fmt);
+  end = p + RSTRING_LEN(fmt);
+  blen = 0;
+  bsiz = 120;
+  result = mrb_str_new_capa(mrb, bsiz);
+  buf = RSTRING_PTR(result);
+  memset(buf, 0, bsiz);
+
+  for (; p < end; p++) {
+    const char *t;
+    mrb_sym id = 0;
+    int flags = FNONE;
+
+    for (t = p; t < end && *t != '%'; t++) ;
+    if (t + 1 == end) ++t;
+    PUSH(p, t - p);
+    if (t >= end)
+      goto sprint_exit; /* end of fmt string */
+
+    p = t + 1;    /* skip '%' */
+
+    width = prec = -1;
+    nextvalue = mrb_undef_value();
+
+retry:
+    switch (*p) {
+      default:
+        mrb_raisef(mrb, E_ARGUMENT_ERROR, "malformed format string - %%%c", *p);
+        break;
+
+      case ' ':
+        CHECK_FOR_FLAGS(flags);
+        flags |= FSPACE;
+        p++;
+        goto retry;
+
+      case '#':
+        CHECK_FOR_FLAGS(flags);
+        flags |= FSHARP;
+        p++;
+        goto retry;
+
+      case '+':
+        CHECK_FOR_FLAGS(flags);
+        flags |= FPLUS;
+        p++;
+        goto retry;
+
+      case '-':
+        CHECK_FOR_FLAGS(flags);
+        flags |= FMINUS;
+        p++;
+        goto retry;
+
+      case '0':
+        CHECK_FOR_FLAGS(flags);
+        flags |= FZERO;
+        p++;
+        goto retry;
+
+      case '1': case '2': case '3': case '4':
+      case '5': case '6': case '7': case '8': case '9':
+        n = 0;
+        GETNUM(n, width);
+        if (*p == '$') {
+          if (!mrb_undef_p(nextvalue)) {
+            mrb_raisef(mrb, E_ARGUMENT_ERROR, "value given twice - %i$", n);
+          }
+          nextvalue = GETPOSARG(n);
+          p++;
+          goto retry;
+        }
+        CHECK_FOR_WIDTH(flags);
+        width = n;
+        flags |= FWIDTH;
+        goto retry;
+
+      case '<':
+      case '{': {
+        const char *start = p;
+        char term = (*p == '<') ? '>' : '}';
+        mrb_value symname;
+
+        for (; p < end && *p != term; )
+          p++;
+        if (id) {
+          mrb_raisef(mrb, E_ARGUMENT_ERROR, "name%l after <%n>",
+                     start, p - start + 1, id);
+        }
+        symname = mrb_str_new(mrb, start + 1, p - start - 1);
+        id = mrb_intern_str(mrb, symname);
+        nextvalue = GETNAMEARG(mrb_symbol_value(id), start, p - start + 1);
+        if (mrb_undef_p(nextvalue)) {
+          mrb_raisef(mrb, E_KEY_ERROR, "key%l not found", start, p - start + 1);
+        }
+        if (term == '}') goto format_s;
+        p++;
+        goto retry;
+      }
+
+      case '*':
+        CHECK_FOR_WIDTH(flags);
+        flags |= FWIDTH;
+        GETASTER(width);
+        if (width < 0) {
+          flags |= FMINUS;
+          width = -width;
+        }
+        p++;
+        goto retry;
+
+      case '.':
+        if (flags & FPREC0) {
+          mrb_raise(mrb, E_ARGUMENT_ERROR, "precision given twice");
+        }
+        flags |= FPREC|FPREC0;
+
+        prec = 0;
+        p++;
+        if (*p == '*') {
+          GETASTER(prec);
+          if (prec < 0) {  /* ignore negative precision */
+            flags &= ~FPREC;
+          }
+          p++;
+          goto retry;
+        }
+
+        GETNUM(prec, precision);
+        goto retry;
+
+      case '\n':
+      case '\0':
+        p--;
+        /* fallthrough */
+      case '%':
+        if (flags != FNONE) {
+          mrb_raise(mrb, E_ARGUMENT_ERROR, "invalid format character - %");
+        }
+        PUSH("%", 1);
+        break;
+
+      case 'c': {
+        mrb_value val = GETARG();
+        mrb_value tmp;
+        char *c;
+
+        tmp = mrb_check_string_type(mrb, val);
+        if (!mrb_nil_p(tmp)) {
+          if (RSTRING_LEN(tmp) != 1) {
+            mrb_raise(mrb, E_ARGUMENT_ERROR, "%c requires a character");
+          }
+        }
+        else if (mrb_fixnum_p(val)) {
+          mrb_int n = mrb_fixnum(val);
+
+          if (n < 0x80) {
+            char buf[1];
+
+            buf[0] = (char)n;
+            tmp = mrb_str_new(mrb, buf, 1);
+          }
+          else {
+            tmp = mrb_funcall(mrb, val, "chr", 0);
+            mrb_check_type(mrb, tmp, MRB_TT_STRING);
+          }
+        }
+        else {
+          mrb_raise(mrb, E_ARGUMENT_ERROR, "invalid character");
+        }
+        c = RSTRING_PTR(tmp);
+        n = RSTRING_LEN(tmp);
+        if (!(flags & FWIDTH)) {
+          PUSH(c, n);
+        }
+        else if ((flags & FMINUS)) {
+          PUSH(c, n);
+          if (width>0) FILL(' ', width-1);
+        }
+        else {
+          if (width>0) FILL(' ', width-1);
+          PUSH(c, n);
+        }
+      }
+      break;
+
+      case 's':
+      case 'p':
+  format_s:
+      {
+        mrb_value arg = GETARG();
+        mrb_int len;
+        mrb_int slen;
+
+        if (*p == 'p') arg = mrb_inspect(mrb, arg);
+        str = mrb_obj_as_string(mrb, arg);
+        len = RSTRING_LEN(str);
+        if (RSTRING(result)->flags & MRB_STR_EMBED) {
+          mrb_int tmp_n = len;
+          RSTRING(result)->flags &= ~MRB_STR_EMBED_LEN_MASK;
+          RSTRING(result)->flags |= tmp_n << MRB_STR_EMBED_LEN_SHIFT;
+        }
+        else {
+          RSTRING(result)->as.heap.len = blen;
+        }
+        if (flags&(FPREC|FWIDTH)) {
+          slen = RSTRING_LEN(str);
+          if (slen < 0) {
+            mrb_raise(mrb, E_ARGUMENT_ERROR, "invalid mbstring sequence");
+          }
+          if ((flags&FPREC) && (prec < slen)) {
+            char *p = RSTRING_PTR(str) + prec;
+            slen = prec;
+            len = (mrb_int)(p - RSTRING_PTR(str));
+          }
+          /* need to adjust multi-byte string pos */
+          if ((flags&FWIDTH) && (width > slen)) {
+            width -= (int)slen;
+            if (!(flags&FMINUS)) {
+              FILL(' ', width);
+            }
+            PUSH(RSTRING_PTR(str), len);
+            if (flags&FMINUS) {
+              FILL(' ', width);
+            }
+            break;
+          }
+        }
+        PUSH(RSTRING_PTR(str), len);
+      }
+      break;
+
+      case 'd':
+      case 'i':
+      case 'o':
+      case 'x':
+      case 'X':
+      case 'b':
+      case 'B':
+      case 'u': {
+        mrb_value val = GETARG();
+        char nbuf[68], *s;
+        const char *prefix = NULL;
+        int sign = 0, dots = 0;
+        char sc = 0;
+        mrb_int v = 0;
+        int base;
+        mrb_int len;
+
+        if (flags & FSHARP) {
+          switch (*p) {
+            case 'o': prefix = "0"; break;
+            case 'x': prefix = "0x"; break;
+            case 'X': prefix = "0X"; break;
+            case 'b': prefix = "0b"; break;
+            case 'B': prefix = "0B"; break;
+            default: break;
+          }
+        }
+
+  bin_retry:
+        switch (mrb_type(val)) {
+#ifndef MRB_WITHOUT_FLOAT
+          case MRB_TT_FLOAT:
+            val = mrb_flo_to_fixnum(mrb, val);
+            if (mrb_fixnum_p(val)) goto bin_retry;
+            break;
+#endif
+          case MRB_TT_STRING:
+            val = mrb_str_to_inum(mrb, val, 0, TRUE);
+            goto bin_retry;
+          case MRB_TT_FIXNUM:
+            v = mrb_fixnum(val);
+            break;
+          default:
+            val = mrb_Integer(mrb, val);
+            goto bin_retry;
+        }
+
+        switch (*p) {
+          case 'o':
+            base = 8; break;
+          case 'x':
+          case 'X':
+            base = 16; break;
+          case 'b':
+          case 'B':
+            base = 2; break;
+          case 'u':
+          case 'd':
+          case 'i':
+            sign = 1;
+            /* fall through */
+          default:
+            base = 10; break;
+        }
+
+        if (sign) {
+          if (v >= 0) {
+            if (flags & FPLUS) {
+              sc = '+';
+              width--;
+            }
+            else if (flags & FSPACE) {
+              sc = ' ';
+              width--;
+            }
+          }
+          else {
+            sc = '-';
+            width--;
+          }
+          mrb_assert(base == 10);
+          snprintf(nbuf, sizeof(nbuf), "%" MRB_PRId, v);
+          s = nbuf;
+          if (v < 0) s++;       /* skip minus sign */
+        }
+        else {
+          s = nbuf;
+          if (v < 0) {
+            dots = 1;
+          }
+          switch (base) {
+          case 2:
+            if (v < 0) {
+              val = mrb_fix2binstr(mrb, mrb_fixnum_value(v), base);
+            }
+            else {
+              val = mrb_fixnum_to_str(mrb, mrb_fixnum_value(v), base);
+            }
+            strncpy(++s, RSTRING_PTR(val), sizeof(nbuf)-1);
+            break;
+          case 8:
+            snprintf(++s, sizeof(nbuf)-1, "%" MRB_PRIo, v);
+            break;
+          case 16:
+            snprintf(++s, sizeof(nbuf)-1, "%" MRB_PRIx, v);
+            break;
+          }
+          if (v < 0) {
+            char d;
+
+            s = remove_sign_bits(s, base);
+            switch (base) {
+              case 16: d = 'f'; break;
+              case 8:  d = '7'; break;
+              case 2:  d = '1'; break;
+              default: d = 0; break;
+            }
+
+            if (d && *s != d) {
+              *--s = d;
+            }
+          }
+        }
+        {
+          size_t size;
+          size = strlen(s);
+          /* PARANOID: assert(size <= MRB_INT_MAX) */
+          len = (mrb_int)size;
+        }
+
+        if (*p == 'X') {
+          char *pp = s;
+          int c;
+          while ((c = (int)(unsigned char)*pp) != 0) {
+            *pp = toupper(c);
+            pp++;
+          }
+        }
+
+        if (prefix && !prefix[1]) { /* octal */
+          if (dots) {
+            prefix = NULL;
+          }
+          else if (len == 1 && *s == '0') {
+            len = 0;
+            if (flags & FPREC) prec--;
+          }
+          else if ((flags & FPREC) && (prec > len)) {
+            prefix = NULL;
+          }
+        }
+        else if (len == 1 && *s == '0') {
+          prefix = NULL;
+        }
+
+        if (prefix) {
+          size_t size;
+          size = strlen(prefix);
+          /* PARANOID: assert(size <= MRB_INT_MAX).
+           *  this check is absolutely paranoid. */
+          width -= (mrb_int)size;
+        }
+
+        if ((flags & (FZERO|FMINUS|FPREC)) == FZERO) {
+          prec = width;
+          width = 0;
+        }
+        else {
+          if (prec < len) {
+            if (!prefix && prec == 0 && len == 1 && *s == '0') len = 0;
+            prec = len;
+          }
+          width -= prec;
+        }
+
+        if (!(flags&FMINUS) && width > 0) {
+          FILL(' ', width);
+          width = 0;
+        }
+
+        if (sc) PUSH(&sc, 1);
+
+        if (prefix) {
+          int plen = (int)strlen(prefix);
+          PUSH(prefix, plen);
+        }
+        if (dots) {
+          prec -= 2;
+          width -= 2;
+          PUSH("..", 2);
+        }
+
+        if (prec > len) {
+          CHECK(prec - len);
+          if ((flags & (FMINUS|FPREC)) != FMINUS) {
+            char c = '0';
+            FILL(c, prec - len);
+          } else if (v < 0) {
+            char c = sign_bits(base, p);
+            FILL(c, prec - len);
+          }
+        }
+        PUSH(s, len);
+        if (width > 0) {
+          FILL(' ', width);
+        }
+      }
+      break;
+
+#ifndef MRB_WITHOUT_FLOAT
+      case 'f':
+      case 'g':
+      case 'G':
+      case 'e':
+      case 'E':
+      case 'a':
+      case 'A': {
+        mrb_value val = GETARG();
+        double fval;
+        mrb_int need = 6;
+        char fbuf[32];
+
+        fval = mrb_float(mrb_Float(mrb, val));
+        if (!isfinite(fval)) {
+          const char *expr;
+          const mrb_int elen = 3;
+          char sign = '\0';
+
+          if (isnan(fval)) {
+            expr = "NaN";
+          }
+          else {
+            expr = "Inf";
+          }
+          need = elen;
+          if (!isnan(fval) && fval < 0.0)
+            sign = '-';
+          else if (flags & (FPLUS|FSPACE))
+            sign = (flags & FPLUS) ? '+' : ' ';
+          if (sign)
+            ++need;
+          if ((flags & FWIDTH) && need < width)
+            need = width;
+
+          if (need < 0) {
+            mrb_raise(mrb, E_ARGUMENT_ERROR, "width too big");
+          }
+          FILL(' ', need);
+          if (flags & FMINUS) {
+            if (sign)
+              buf[blen - need--] = sign;
+            memcpy(&buf[blen - need], expr, elen);
+          }
+          else {
+            if (sign)
+              buf[blen - elen - 1] = sign;
+            memcpy(&buf[blen - elen], expr, elen);
+          }
+          break;
+        }
+
+        fmt_setup(fbuf, sizeof(fbuf), *p, flags, width, prec);
+        need = 0;
+        if (*p != 'e' && *p != 'E') {
+          int i;
+          frexp(fval, &i);
+          if (i > 0)
+            need = BIT_DIGITS(i);
+        }
+        if (need > MRB_INT_MAX - ((flags&FPREC) ? prec : 6)) {
+        too_big_width:
+          mrb_raise(mrb, E_ARGUMENT_ERROR,
+                    (width > prec ? "width too big" : "prec too big"));
+        }
+        need += (flags&FPREC) ? prec : 6;
+        if ((flags&FWIDTH) && need < width)
+          need = width;
+        if (need > MRB_INT_MAX - 20) {
+          goto too_big_width;
+        }
+        need += 20;
+
+        CHECK(need);
+        n = snprintf(&buf[blen], need, fbuf, fval);
+        if (n < 0 || n >= need) {
+          mrb_raise(mrb, E_RUNTIME_ERROR, "formatting error");
+        }
+        blen += n;
+      }
+      break;
+#endif
+    }
+    flags = FNONE;
+  }
+
+  sprint_exit:
+#if 0
+  /* XXX - We cannot validate the number of arguments if (digit)$ style used.
+   */
+  if (posarg >= 0 && nextarg < argc) {
+    const char *mesg = "too many arguments for format string";
+    if (mrb_test(ruby_debug)) mrb_raise(mrb, E_ARGUMENT_ERROR, mesg);
+    if (mrb_test(ruby_verbose)) mrb_warn(mrb, "%s", mesg);
+  }
+#endif
+  mrb_str_resize(mrb, result, blen);
+
+  return result;
+}
+
+#ifndef MRB_WITHOUT_FLOAT
+static void
+fmt_setup(char *buf, size_t size, int c, int flags, mrb_int width, mrb_int prec)
+{
+  char *end = buf + size;
+  int n;
+
+  *buf++ = '%';
+  if (flags & FSHARP) *buf++ = '#';
+  if (flags & FPLUS)  *buf++ = '+';
+  if (flags & FMINUS) *buf++ = '-';
+  if (flags & FZERO)  *buf++ = '0';
+  if (flags & FSPACE) *buf++ = ' ';
+
+  if (flags & FWIDTH) {
+    n = snprintf(buf, end - buf, "%d", (int)width);
+    buf += n;
+  }
+
+  if (flags & FPREC) {
+    n = snprintf(buf, end - buf, ".%d", (int)prec);
+    buf += n;
+  }
+
+  *buf++ = c;
+  *buf = '\0';
+}
+#endif
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-sprintf/test/sprintf.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-sprintf/test/sprintf.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-sprintf/test/sprintf.rb	(revision 439)
@@ -0,0 +1,113 @@
+#assert('Kernel.sprintf') do
+#end
+
+assert('String#%') do
+  assert_equal "one=1", "one=%d" % 1
+  assert_equal "1 one", "%d %s" % [ 1, "one" ]
+  assert_equal "123 < 456", "%{num} < %<str>s" % { num: 123, str: "456" }
+  assert_equal 15, ("%b" % (1<<14)).size
+  skip unless Object.const_defined?(:Float)
+  assert_equal "1.0", "%3.1f" % 1.01
+end
+
+assert('String#% with inf') do
+  skip unless Object.const_defined?(:Float)
+  inf = Float::INFINITY
+
+  assert_equal "Inf", "%f" % inf
+  assert_equal "Inf", "%2f" % inf
+  assert_equal "Inf", "%3f" % inf
+  assert_equal " Inf", "%4f" % inf
+  assert_equal "  Inf", "%5f" % inf
+
+  assert_equal "+Inf", "%+f" % inf
+  assert_equal "+Inf", "%+2f" % inf
+  assert_equal "+Inf", "%+3f" % inf
+  assert_equal "+Inf", "%+4f" % inf
+  assert_equal " +Inf", "%+5f" % inf
+
+  assert_equal "Inf", "%-f" % inf
+  assert_equal "Inf", "%-2f" % inf
+  assert_equal "Inf", "%-3f" % inf
+  assert_equal "Inf ", "%-4f" % inf
+  assert_equal "Inf  ", "%-5f" % inf
+
+  assert_equal " Inf", "% f" % inf
+  assert_equal " Inf", "% 2f" % inf
+  assert_equal " Inf", "% 3f" % inf
+  assert_equal " Inf", "% 4f" % inf
+  assert_equal "  Inf", "% 5f" % inf
+end
+
+assert('String#% with nan') do
+  skip unless Object.const_defined?(:Float)
+  nan = Float::NAN
+
+  assert_equal "NaN", "%f" % nan
+  assert_equal "NaN", "%2f" % nan
+  assert_equal "NaN", "%3f" % nan
+  assert_equal " NaN", "%4f" % nan
+  assert_equal "  NaN", "%5f" % nan
+
+  assert_equal "+NaN", "%+f" % nan
+  assert_equal "+NaN", "%+2f" % nan
+  assert_equal "+NaN", "%+3f" % nan
+  assert_equal "+NaN", "%+4f" % nan
+  assert_equal " +NaN", "%+5f" % nan
+
+  assert_equal "NaN", "%-f" % nan
+  assert_equal "NaN", "%-2f" % nan
+  assert_equal "NaN", "%-3f" % nan
+  assert_equal "NaN ", "%-4f" % nan
+  assert_equal "NaN  ", "%-5f" % nan
+
+  assert_equal " NaN", "% f" % nan
+  assert_equal " NaN", "% 2f" % nan
+  assert_equal " NaN", "% 3f" % nan
+  assert_equal " NaN", "% 4f" % nan
+  assert_equal "  NaN", "% 5f" % nan
+end
+
+assert("String#% with invalid chr") do
+  begin
+    class Fixnum
+      alias_method :chr_, :chr if method_defined?(:chr)
+
+      def chr
+        nil
+      end
+    end
+
+    assert_raise TypeError do
+      "%c" % 0x80
+    end
+  ensure
+    class Fixnum
+      if method_defined?(:chr_)
+        alias_method :chr, :chr_
+        remove_method :chr_
+      end
+    end
+  end
+end
+
+assert("String#% %b") do
+  assert_equal("..10115", "%0b5" % -5)
+end
+
+assert("String#% %d") do
+  assert_equal("  10",   "%4d" % 10)
+  assert_equal("1000",   "%4d" % 1000)
+  assert_equal("10000",  "%4d" % 10000)
+end
+
+assert("String#% invalid format") do
+  assert_raise ArgumentError do
+    "%?" % ""
+  end
+end
+
+assert("String#% invalid format shared substring") do
+  fmt = ("x"*30+"%!")[0...-1]
+  assert_equal fmt, sprintf(fmt, "")
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-string-ext/mrbgem.rake
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-string-ext/mrbgem.rake	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-string-ext/mrbgem.rake	(revision 439)
@@ -0,0 +1,5 @@
+MRuby::Gem::Specification.new('mruby-string-ext') do |spec|
+  spec.license = 'MIT'
+  spec.author  = 'mruby developers'
+  spec.summary = 'String class extension'
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-string-ext/mrblib/string.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-string-ext/mrblib/string.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-string-ext/mrblib/string.rb	(revision 439)
@@ -0,0 +1,447 @@
+class String
+
+  ##
+  # call-seq:
+  #    string.clear    ->  string
+  #
+  # Makes string empty.
+  #
+  #    a = "abcde"
+  #    a.clear    #=> ""
+  #
+  def clear
+    self.replace("")
+  end
+
+  ##
+  # call-seq:
+  #    str.lstrip   -> new_str
+  #
+  # Returns a copy of <i>str</i> with leading whitespace removed. See also
+  # <code>String#rstrip</code> and <code>String#strip</code>.
+  #
+  #    "  hello  ".lstrip   #=> "hello  "
+  #    "hello".lstrip       #=> "hello"
+  #
+  def lstrip
+    a = 0
+    z = self.size - 1
+    a += 1 while a <= z and " \f\n\r\t\v".include?(self[a])
+    (z >= 0) ? self[a..z] : ""
+  end
+
+  ##
+  # call-seq:
+  #    str.rstrip   -> new_str
+  #
+  # Returns a copy of <i>str</i> with trailing whitespace removed. See also
+  # <code>String#lstrip</code> and <code>String#strip</code>.
+  #
+  #    "  hello  ".rstrip   #=> "  hello"
+  #    "hello".rstrip       #=> "hello"
+  #
+  def rstrip
+    a = 0
+    z = self.size - 1
+    z -= 1 while a <= z and " \f\n\r\t\v\0".include?(self[z])
+    (z >= 0) ? self[a..z] : ""
+  end
+
+  ##
+  # call-seq:
+  #    str.strip   -> new_str
+  #
+  # Returns a copy of <i>str</i> with leading and trailing whitespace removed.
+  #
+  #    "    hello    ".strip   #=> "hello"
+  #    "\tgoodbye\r\n".strip   #=> "goodbye"
+  #
+  def strip
+    a = 0
+    z = self.size - 1
+    a += 1 while a <= z and " \f\n\r\t\v".include?(self[a])
+    z -= 1 while a <= z and " \f\n\r\t\v\0".include?(self[z])
+    (z >= 0) ? self[a..z] : ""
+  end
+
+  ##
+  # call-seq:
+  #    str.lstrip!   -> self or nil
+  #
+  # Removes leading whitespace from <i>str</i>, returning <code>nil</code> if no
+  # change was made. See also <code>String#rstrip!</code> and
+  # <code>String#strip!</code>.
+  #
+  #    "  hello  ".lstrip   #=> "hello  "
+  #    "hello".lstrip!      #=> nil
+  #
+  def lstrip!
+    raise FrozenError, "can't modify frozen String" if frozen?
+    s = self.lstrip
+    (s == self) ? nil : self.replace(s)
+  end
+
+  ##
+  # call-seq:
+  #    str.rstrip!   -> self or nil
+  #
+  # Removes trailing whitespace from <i>str</i>, returning <code>nil</code> if
+  # no change was made. See also <code>String#lstrip!</code> and
+  # <code>String#strip!</code>.
+  #
+  #    "  hello  ".rstrip   #=> "  hello"
+  #    "hello".rstrip!      #=> nil
+  #
+  def rstrip!
+    raise FrozenError, "can't modify frozen String" if frozen?
+    s = self.rstrip
+    (s == self) ? nil : self.replace(s)
+  end
+
+  ##
+  #  call-seq:
+  #     str.strip!   -> str or nil
+  #
+  #  Removes leading and trailing whitespace from <i>str</i>. Returns
+  #  <code>nil</code> if <i>str</i> was not altered.
+  #
+  def strip!
+    raise FrozenError, "can't modify frozen String" if frozen?
+    s = self.strip
+    (s == self) ? nil : self.replace(s)
+  end
+
+  ##
+  # call-seq:
+  #    str.casecmp(other_str)   -> -1, 0, +1 or nil
+  #
+  # Case-insensitive version of <code>String#<=></code>.
+  #
+  #    "abcdef".casecmp("abcde")     #=> 1
+  #    "aBcDeF".casecmp("abcdef")    #=> 0
+  #    "abcdef".casecmp("abcdefg")   #=> -1
+  #    "abcdef".casecmp("ABCDEF")    #=> 0
+  #
+  def casecmp(str)
+    self.downcase <=> str.__to_str.downcase
+  rescue NoMethodError
+    nil
+  end
+
+  ##
+  # call-seq:
+  #   str.casecmp?(other)  -> true, false, or nil
+  #
+  # Returns true if str and other_str are equal after case folding,
+  # false if they are not equal, and nil if other_str is not a string.
+
+  def casecmp?(str)
+    c = self.casecmp(str)
+    return nil if c.nil?
+    return c == 0
+  end
+
+  def partition(sep)
+    raise TypeError, "type mismatch: #{sep.class} given" unless sep.is_a? String
+    n = index(sep)
+    unless n.nil?
+      m = n + sep.size
+      [ slice(0, n), sep, slice(m, size - m) ]
+    else
+      [ self, "", "" ]
+    end
+  end
+
+  def rpartition(sep)
+    raise TypeError, "type mismatch: #{sep.class} given" unless sep.is_a? String
+    n = rindex(sep)
+    unless n.nil?
+      m = n + sep.size
+      [ slice(0, n), sep, slice(m, size - m) ]
+    else
+      [ "", "", self ]
+    end
+  end
+
+  ##
+  # call-seq:
+  #    str.slice!(fixnum)           -> new_str or nil
+  #    str.slice!(fixnum, fixnum)   -> new_str or nil
+  #    str.slice!(range)            -> new_str or nil
+  #    str.slice!(other_str)        -> new_str or nil
+  #
+  # Deletes the specified portion from <i>str</i>, and returns the portion
+  # deleted.
+  #
+  #    string = "this is a string"
+  #    string.slice!(2)        #=> "i"
+  #    string.slice!(3..6)     #=> " is "
+  #    string.slice!("r")      #=> "r"
+  #    string                  #=> "thsa sting"
+  #
+  def slice!(arg1, arg2=nil)
+    raise FrozenError, "can't modify frozen String" if frozen?
+    raise "wrong number of arguments (for 1..2)" if arg1.nil? && arg2.nil?
+
+    if !arg1.nil? && !arg2.nil?
+      idx = arg1
+      idx += self.size if arg1 < 0
+      if idx >= 0 && idx <= self.size && arg2 > 0
+        str = self[idx, arg2]
+      else
+        return nil
+      end
+    else
+      validated = false
+      if arg1.kind_of?(Range)
+        beg = arg1.begin
+        ed = arg1.end
+        beg += self.size if beg < 0
+        ed += self.size if ed < 0
+        ed -= 1 if arg1.exclude_end?
+        validated = true
+      elsif arg1.kind_of?(String)
+        validated = true
+      else
+        idx = arg1
+        idx += self.size if arg1 < 0
+        validated = true if idx >=0 && arg1 < self.size
+      end
+      if validated
+        str = self[arg1]
+      else
+        return nil
+      end
+    end
+    unless str.nil? || str == ""
+      if !arg1.nil? && !arg2.nil?
+        idx = arg1 >= 0 ? arg1 : self.size+arg1
+        str2 = self[0...idx] + self[idx+arg2..-1].to_s
+      else
+        if arg1.kind_of?(Range)
+          idx = beg >= 0 ? beg : self.size+beg
+          idx2 = ed>= 0 ? ed : self.size+ed
+          str2 = self[0...idx] + self[idx2+1..-1].to_s
+        elsif arg1.kind_of?(String)
+          idx = self.index(arg1)
+          str2 = self[0...idx] + self[idx+arg1.size..-1] unless idx.nil?
+        else
+          idx = arg1 >= 0 ? arg1 : self.size+arg1
+          str2 = self[0...idx] + self[idx+1..-1].to_s
+        end
+      end
+      self.replace(str2) unless str2.nil?
+    end
+    str
+  end
+
+  ##
+  #  call-seq:
+  #     str.insert(index, other_str)   -> str
+  #
+  #  Inserts <i>other_str</i> before the character at the given
+  #  <i>index</i>, modifying <i>str</i>. Negative indices count from the
+  #  end of the string, and insert <em>after</em> the given character.
+  #  The intent is insert <i>aString</i> so that it starts at the given
+  #  <i>index</i>.
+  #
+  #     "abcd".insert(0, 'X')    #=> "Xabcd"
+  #     "abcd".insert(3, 'X')    #=> "abcXd"
+  #     "abcd".insert(4, 'X')    #=> "abcdX"
+  #     "abcd".insert(-3, 'X')   #=> "abXcd"
+  #     "abcd".insert(-1, 'X')   #=> "abcdX"
+  #
+  def insert(idx, str)
+    if idx == -1
+      return self << str
+    elsif idx < 0
+      idx += 1
+    end
+    self[idx, 0] = str
+    self
+  end
+
+  ##
+  #  call-seq:
+  #     str.ljust(integer, padstr=' ')   -> new_str
+  #
+  #  If <i>integer</i> is greater than the length of <i>str</i>, returns a new
+  #  <code>String</code> of length <i>integer</i> with <i>str</i> left justified
+  #  and padded with <i>padstr</i>; otherwise, returns <i>str</i>.
+  #
+  #     "hello".ljust(4)            #=> "hello"
+  #     "hello".ljust(20)           #=> "hello               "
+  #     "hello".ljust(20, '1234')   #=> "hello123412341234123"
+  def ljust(idx, padstr = ' ')
+    raise ArgumentError, 'zero width padding' if padstr == ''
+    return self if idx <= self.size
+    pad_repetitions = (idx / padstr.length).ceil
+    padding = (padstr * pad_repetitions)[0...(idx - self.length)]
+    self + padding
+  end
+
+  ##
+  #  call-seq:
+  #     str.rjust(integer, padstr=' ')   -> new_str
+  #
+  #  If <i>integer</i> is greater than the length of <i>str</i>, returns a new
+  #  <code>String</code> of length <i>integer</i> with <i>str</i> right justified
+  #  and padded with <i>padstr</i>; otherwise, returns <i>str</i>.
+  #
+  #     "hello".rjust(4)            #=> "hello"
+  #     "hello".rjust(20)           #=> "               hello"
+  #     "hello".rjust(20, '1234')   #=> "123412341234123hello"
+  def rjust(idx, padstr = ' ')
+    raise ArgumentError, 'zero width padding' if padstr == ''
+    return self if idx <= self.size
+    pad_repetitions = (idx / padstr.length).ceil
+    padding = (padstr * pad_repetitions)[0...(idx - self.length)]
+    padding + self
+  end
+
+  def chars(&block)
+    if block_given?
+      self.split('').each do |i|
+        block.call(i)
+      end
+      self
+    else
+      self.split('')
+    end
+  end
+
+  ##
+  # Call the given block for each character of
+  # +self+.
+  def each_char(&block)
+    return to_enum :each_char unless block
+    pos = 0
+    while pos < self.size
+      block.call(self[pos])
+      pos += 1
+    end
+    self
+  end
+
+  def codepoints(&block)
+    len = self.size
+
+    if block_given?
+      self.split('').each do|x|
+        block.call(x.ord)
+      end
+      self
+    else
+      self.split('').map{|x| x.ord}
+    end
+  end
+  alias each_codepoint codepoints
+
+  ##
+  # call-seq:
+  #    str.prepend(other_str)  -> str
+  #
+  # Prepend---Prepend the given string to <i>str</i>.
+  #
+  #    a = "world"
+  #    a.prepend("hello ") #=> "hello world"
+  #    a                   #=> "hello world"
+  def prepend(arg)
+    self[0, 0] = arg
+    self
+  end
+
+  ##
+  #  call-seq:
+  #    string.lines                ->  array of string
+  #    string.lines {|s| block}    ->  array of string
+  #
+  #  Returns strings per line;
+  #
+  #    a = "abc\ndef"
+  #    a.lines    #=> ["abc\n", "def"]
+  #
+  #  If a block is given, it works the same as <code>each_line</code>.
+  def lines(&blk)
+    lines = self.__lines
+    if blk
+      lines.each do |line|
+        blk.call(line)
+      end
+    end
+    lines
+  end
+
+  ##
+  #  call-seq:
+  #     str.upto(other_str, exclusive=false) {|s| block }   -> str
+  #     str.upto(other_str, exclusive=false)                -> an_enumerator
+  #
+  #  Iterates through successive values, starting at <i>str</i> and
+  #  ending at <i>other_str</i> inclusive, passing each value in turn to
+  #  the block. The <code>String#succ</code> method is used to generate
+  #  each value.  If optional second argument exclusive is omitted or is false,
+  #  the last value will be included; otherwise it will be excluded.
+  #
+  #  If no block is given, an enumerator is returned instead.
+  #
+  #     "a8".upto("b6") {|s| print s, ' ' }
+  #     for s in "a8".."b6"
+  #       print s, ' '
+  #     end
+  #
+  #  <em>produces:</em>
+  #
+  #     a8 a9 b0 b1 b2 b3 b4 b5 b6
+  #     a8 a9 b0 b1 b2 b3 b4 b5 b6
+  #
+  #  If <i>str</i> and <i>other_str</i> contains only ascii numeric characters,
+  #  both are recognized as decimal numbers. In addition, the width of
+  #  string (e.g. leading zeros) is handled appropriately.
+  #
+  #     "9".upto("11").to_a   #=> ["9", "10", "11"]
+  #     "25".upto("5").to_a   #=> []
+  #     "07".upto("11").to_a  #=> ["07", "08", "09", "10", "11"]
+  def upto(max, exclusive=false, &block)
+    return to_enum(:upto, max, exclusive) unless block
+    raise TypeError, "no implicit conversion of #{max.class} into String" unless max.kind_of? String
+
+    len = self.length
+    maxlen = max.length
+    # single character
+    if len == 1 and maxlen == 1
+      c = self.ord
+      e = max.ord
+      while c <= e
+        break if exclusive and c == e
+        yield c.chr(__ENCODING__)
+        c += 1
+      end
+      return self
+    end
+    # both edges are all digits
+    bi = self.to_i(10)
+    ei = max.to_i(10)
+    len = self.length
+    if (bi > 0 or bi == "0"*len) and (ei > 0 or ei == "0"*maxlen)
+      while bi <= ei
+        break if exclusive and bi == ei
+        s = bi.to_s
+        s = s.rjust(len, "0") if s.length < len
+        yield s
+        bi += 1
+      end
+      return self
+    end
+    bs = self
+    while true
+      n = (bs <=> max)
+      break if n > 0
+      break if exclusive and n == 0
+      yield bs
+      break if n == 0
+      bs = bs.succ
+    end
+    self
+  end
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-string-ext/src/string.c
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-string-ext/src/string.c	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-string-ext/src/string.c	(revision 439)
@@ -0,0 +1,1239 @@
+#include <string.h>
+#include <mruby.h>
+#include <mruby/array.h>
+#include <mruby/class.h>
+#include <mruby/string.h>
+#include <mruby/range.h>
+
+#define ENC_ASCII_8BIT "ASCII-8BIT"
+#define ENC_BINARY     "BINARY"
+#define ENC_UTF8       "UTF-8"
+
+#define ENC_COMP_P(enc, enc_lit) \
+  str_casecmp_p(RSTRING_PTR(enc), RSTRING_LEN(enc), enc_lit, sizeof(enc_lit"")-1)
+
+#ifdef MRB_WITHOUT_FLOAT
+# define mrb_float_p(o) FALSE
+#endif
+
+static mrb_bool
+str_casecmp_p(const char *s1, mrb_int len1, const char *s2, mrb_int len2)
+{
+  const char *e1, *e2;
+
+  if (len1 != len2) return FALSE;
+  e1 = s1 + len1;
+  e2 = s2 + len2;
+  while (s1 < e1 && s2 < e2) {
+    if (*s1 != *s2 && TOUPPER(*s1) != TOUPPER(*s2)) return FALSE;
+    ++s1;
+    ++s2;
+  }
+  return TRUE;
+}
+
+static mrb_value
+int_chr_binary(mrb_state *mrb, mrb_value num)
+{
+  mrb_int cp = mrb_int(mrb, num);
+  char c;
+  mrb_value str;
+
+  if (cp < 0 || 0xff < cp) {
+    mrb_raisef(mrb, E_RANGE_ERROR, "%v out of char range", num);
+  }
+  c = (char)cp;
+  str = mrb_str_new(mrb, &c, 1);
+  RSTR_SET_ASCII_FLAG(mrb_str_ptr(str));
+  return str;
+}
+
+#ifdef MRB_UTF8_STRING
+static mrb_value
+int_chr_utf8(mrb_state *mrb, mrb_value num)
+{
+  mrb_int cp = mrb_int(mrb, num);
+  char utf8[4];
+  mrb_int len;
+  mrb_value str;
+  uint32_t ascii_flag = 0;
+
+  if (cp < 0 || 0x10FFFF < cp) {
+    mrb_raisef(mrb, E_RANGE_ERROR, "%v out of char range", num);
+  }
+  if (cp < 0x80) {
+    utf8[0] = (char)cp;
+    len = 1;
+    ascii_flag = MRB_STR_ASCII;
+  }
+  else if (cp < 0x800) {
+    utf8[0] = (char)(0xC0 | (cp >> 6));
+    utf8[1] = (char)(0x80 | (cp & 0x3F));
+    len = 2;
+  }
+  else if (cp < 0x10000) {
+    utf8[0] = (char)(0xE0 |  (cp >> 12));
+    utf8[1] = (char)(0x80 | ((cp >>  6) & 0x3F));
+    utf8[2] = (char)(0x80 | ( cp        & 0x3F));
+    len = 3;
+  }
+  else {
+    utf8[0] = (char)(0xF0 |  (cp >> 18));
+    utf8[1] = (char)(0x80 | ((cp >> 12) & 0x3F));
+    utf8[2] = (char)(0x80 | ((cp >>  6) & 0x3F));
+    utf8[3] = (char)(0x80 | ( cp        & 0x3F));
+    len = 4;
+  }
+  str = mrb_str_new(mrb, utf8, len);
+  mrb_str_ptr(str)->flags |= ascii_flag;
+  return str;
+}
+#endif
+
+/*
+ *  call-seq:
+ *     str.swapcase!   -> str or nil
+ *
+ *  Equivalent to <code>String#swapcase</code>, but modifies the receiver in
+ *  place, returning <i>str</i>, or <code>nil</code> if no changes were made.
+ *  Note: case conversion is effective only in ASCII region.
+ */
+static mrb_value
+mrb_str_swapcase_bang(mrb_state *mrb, mrb_value str)
+{
+  char *p, *pend;
+  int modify = 0;
+  struct RString *s = mrb_str_ptr(str);
+
+  mrb_str_modify(mrb, s);
+  p = RSTRING_PTR(str);
+  pend = p + RSTRING_LEN(str);
+  while (p < pend) {
+    if (ISUPPER(*p)) {
+      *p = TOLOWER(*p);
+      modify = 1;
+    }
+    else if (ISLOWER(*p)) {
+      *p = TOUPPER(*p);
+      modify = 1;
+    }
+    p++;
+  }
+
+  if (modify) return str;
+  return mrb_nil_value();
+}
+
+/*
+ *  call-seq:
+ *     str.swapcase   -> new_str
+ *
+ *  Returns a copy of <i>str</i> with uppercase alphabetic characters converted
+ *  to lowercase and lowercase characters converted to uppercase.
+ *  Note: case conversion is effective only in ASCII region.
+ *
+ *     "Hello".swapcase          #=> "hELLO"
+ *     "cYbEr_PuNk11".swapcase   #=> "CyBeR_pUnK11"
+ */
+static mrb_value
+mrb_str_swapcase(mrb_state *mrb, mrb_value self)
+{
+  mrb_value str;
+
+  str = mrb_str_dup(mrb, self);
+  mrb_str_swapcase_bang(mrb, str);
+  return str;
+}
+
+/*
+ *  call-seq:
+ *     str << integer       -> str
+ *     str.concat(integer)  -> str
+ *     str << obj           -> str
+ *     str.concat(obj)      -> str
+ *
+ *  Append---Concatenates the given object to <i>str</i>. If the object is a
+ *  <code>Integer</code>, it is considered as a codepoint, and is converted
+ *  to a character before concatenation
+ *  (equivalent to <code>str.concat(integer.chr(__ENCODING__))</code>).
+ *
+ *     a = "hello "
+ *     a << "world"   #=> "hello world"
+ *     a.concat(33)   #=> "hello world!"
+ */
+static mrb_value
+mrb_str_concat_m(mrb_state *mrb, mrb_value self)
+{
+  mrb_value str;
+
+  mrb_get_args(mrb, "o", &str);
+  if (mrb_fixnum_p(str) || mrb_float_p(str))
+#ifdef MRB_UTF8_STRING
+    str = int_chr_utf8(mrb, str);
+#else
+    str = int_chr_binary(mrb, str);
+#endif
+  else
+    mrb_ensure_string_type(mrb, str);
+  mrb_str_cat_str(mrb, self, str);
+  return self;
+}
+
+/*
+ *  call-seq:
+ *     str.start_with?([prefixes]+)   -> true or false
+ *
+ *  Returns true if +str+ starts with one of the +prefixes+ given.
+ *
+ *    "hello".start_with?("hell")               #=> true
+ *
+ *    # returns true if one of the prefixes matches.
+ *    "hello".start_with?("heaven", "hell")     #=> true
+ *    "hello".start_with?("heaven", "paradise") #=> false
+ *    "h".start_with?("heaven", "hell")         #=> false
+ */
+static mrb_value
+mrb_str_start_with(mrb_state *mrb, mrb_value self)
+{
+  mrb_value *argv, sub;
+  mrb_int argc, i;
+  mrb_get_args(mrb, "*", &argv, &argc);
+
+  for (i = 0; i < argc; i++) {
+    size_t len_l, len_r;
+    int ai = mrb_gc_arena_save(mrb);
+    sub = mrb_ensure_string_type(mrb, argv[i]);
+    mrb_gc_arena_restore(mrb, ai);
+    len_l = RSTRING_LEN(self);
+    len_r = RSTRING_LEN(sub);
+    if (len_l >= len_r) {
+      if (memcmp(RSTRING_PTR(self), RSTRING_PTR(sub), len_r) == 0) {
+        return mrb_true_value();
+      }
+    }
+  }
+  return mrb_false_value();
+}
+
+/*
+ *  call-seq:
+ *     str.end_with?([suffixes]+)   -> true or false
+ *
+ *  Returns true if +str+ ends with one of the +suffixes+ given.
+ */
+static mrb_value
+mrb_str_end_with(mrb_state *mrb, mrb_value self)
+{
+  mrb_value *argv, sub;
+  mrb_int argc, i;
+  mrb_get_args(mrb, "*", &argv, &argc);
+
+  for (i = 0; i < argc; i++) {
+    size_t len_l, len_r;
+    int ai = mrb_gc_arena_save(mrb);
+    sub = mrb_ensure_string_type(mrb, argv[i]);
+    mrb_gc_arena_restore(mrb, ai);
+    len_l = RSTRING_LEN(self);
+    len_r = RSTRING_LEN(sub);
+    if (len_l >= len_r) {
+      if (memcmp(RSTRING_PTR(self) + (len_l - len_r),
+                 RSTRING_PTR(sub),
+                 len_r) == 0) {
+        return mrb_true_value();
+      }
+    }
+  }
+  return mrb_false_value();
+}
+
+enum tr_pattern_type {
+  TR_UNINITIALIZED = 0,
+  TR_IN_ORDER  = 1,
+  TR_RANGE = 2,
+};
+
+/*
+  #tr Pattern syntax
+
+  <syntax> ::= (<pattern>)* | '^' (<pattern>)*
+  <pattern> ::= <in order> | <range>
+  <in order> ::= (<ch>)+
+  <range> ::= <ch> '-' <ch>
+*/
+struct tr_pattern {
+  uint8_t type;		// 1:in-order, 2:range
+  mrb_bool flag_reverse : 1;
+  mrb_bool flag_on_heap : 1;
+  uint16_t n;
+  union {
+    uint16_t start_pos;
+    char ch[2];
+  } val;
+  struct tr_pattern *next;
+};
+
+#define STATIC_TR_PATTERN { 0 }
+
+static inline void
+tr_free_pattern(mrb_state *mrb, struct tr_pattern *pat)
+{
+  while (pat) {
+    struct tr_pattern *p = pat->next;
+    if (pat->flag_on_heap) {
+      mrb_free(mrb, pat);
+    }
+    pat = p;
+  }
+}
+
+static struct tr_pattern*
+tr_parse_pattern(mrb_state *mrb, struct tr_pattern *ret, const mrb_value v_pattern, mrb_bool flag_reverse_enable)
+{
+  const char *pattern = RSTRING_PTR(v_pattern);
+  mrb_int pattern_length = RSTRING_LEN(v_pattern);
+  mrb_bool flag_reverse = FALSE;
+  struct tr_pattern *pat1;
+  mrb_int i = 0;
+
+  if(flag_reverse_enable && pattern_length >= 2 && pattern[0] == '^') {
+    flag_reverse = TRUE;
+    i++;
+  }
+
+  while (i < pattern_length) {
+    /* is range pattern ? */
+    mrb_bool const ret_uninit = (ret->type == TR_UNINITIALIZED);
+    pat1 = ret_uninit
+           ? ret
+           : (struct tr_pattern*)mrb_malloc_simple(mrb, sizeof(struct tr_pattern));
+    if ((i+2) < pattern_length && pattern[i] != '\\' && pattern[i+1] == '-') {
+      if (pat1 == NULL && ret) {
+      nomem:
+        tr_free_pattern(mrb, ret);
+        mrb_exc_raise(mrb, mrb_obj_value(mrb->nomem_err));
+        return NULL;            /* not reached */
+      }
+      pat1->type = TR_RANGE;
+      pat1->flag_reverse = flag_reverse;
+      pat1->flag_on_heap = !ret_uninit;
+      pat1->n = pattern[i+2] - pattern[i] + 1;
+      pat1->next = NULL;
+      pat1->val.ch[0] = pattern[i];
+      pat1->val.ch[1] = pattern[i+2];
+      i += 3;
+    }
+    else {
+      /* in order pattern. */
+      mrb_int start_pos = i++;
+      mrb_int len;
+
+      while (i < pattern_length) {
+	if ((i+2) < pattern_length && pattern[i] != '\\' && pattern[i+1] == '-')
+          break;
+	i++;
+      }
+
+      len = i - start_pos;
+      if (len > UINT16_MAX) {
+        mrb_raise(mrb, E_ARGUMENT_ERROR, "tr pattern too long (max 65536)");
+      }
+      if (pat1 == NULL && ret) {
+        goto nomem;
+      }
+      pat1->type = TR_IN_ORDER;
+      pat1->flag_reverse = flag_reverse;
+      pat1->flag_on_heap = !ret_uninit;
+      pat1->n = len;
+      pat1->next = NULL;
+      pat1->val.start_pos = start_pos;
+    }
+
+    if (ret == NULL || ret_uninit) {
+      ret = pat1;
+    }
+    else {
+      struct tr_pattern *p = ret;
+      while (p->next != NULL) {
+        p = p->next;
+      }
+      p->next = pat1;
+    }
+  }
+
+  return ret;
+}
+
+static inline mrb_int
+tr_find_character(const struct tr_pattern *pat, const char *pat_str, int ch)
+{
+  mrb_int ret = -1;
+  mrb_int n_sum = 0;
+  mrb_int flag_reverse = pat ? pat->flag_reverse : 0;
+
+  while (pat != NULL) {
+    if (pat->type == TR_IN_ORDER) {
+      int i;
+      for (i = 0; i < pat->n; i++) {
+	if (pat_str[pat->val.start_pos + i] == ch) ret = n_sum + i;
+      }
+    }
+    else if (pat->type == TR_RANGE) {
+      if (pat->val.ch[0] <= ch && ch <= pat->val.ch[1])
+        ret = n_sum + ch - pat->val.ch[0];
+    }
+    else {
+      mrb_assert(pat->type == TR_UNINITIALIZED);
+    }
+    n_sum += pat->n;
+    pat = pat->next;
+  }
+
+  if (flag_reverse) {
+    return (ret < 0) ? MRB_INT_MAX : -1;
+  }
+  return ret;
+}
+
+static inline mrb_int
+tr_get_character(const struct tr_pattern *pat, const char *pat_str, mrb_int n_th)
+{
+  mrb_int n_sum = 0;
+
+  while (pat != NULL) {
+    if (n_th < (n_sum + pat->n)) {
+      mrb_int i = (n_th - n_sum);
+
+      switch (pat->type) {
+      case TR_IN_ORDER:
+        return pat_str[pat->val.start_pos + i];
+      case TR_RANGE:
+        return pat->val.ch[0]+i;
+      case TR_UNINITIALIZED:
+        return -1;
+      }
+    }
+    if (pat->next == NULL) {
+      switch (pat->type) {
+      case TR_IN_ORDER:
+        return pat_str[pat->val.start_pos + pat->n - 1];
+      case TR_RANGE:
+        return pat->val.ch[1];
+      case TR_UNINITIALIZED:
+        return -1;
+      }
+    }
+    n_sum += pat->n;
+    pat = pat->next;
+  }
+
+  return -1;
+}
+
+static inline void
+tr_bitmap_set(uint8_t bitmap[32], uint8_t ch)
+{
+  uint8_t idx1 = ch / 8;
+  uint8_t idx2 = ch % 8;
+  bitmap[idx1] |= (1<<idx2);
+}
+
+static inline mrb_bool
+tr_bitmap_detect(uint8_t bitmap[32], uint8_t ch)
+{
+  uint8_t idx1 = ch / 8;
+  uint8_t idx2 = ch % 8;
+  if (bitmap[idx1] & (1<<idx2))
+    return TRUE;
+  return FALSE;
+}
+
+/* compile patter to bitmap */
+static void
+tr_compile_pattern(const struct tr_pattern *pat, mrb_value pstr, uint8_t bitmap[32])
+{
+  const char *pattern = RSTRING_PTR(pstr);
+  mrb_int flag_reverse = pat ? pat->flag_reverse : 0;
+  int i;
+
+  for (i=0; i<32; i++) {
+    bitmap[i] = 0;
+  }
+  while (pat != NULL) {
+    if (pat->type == TR_IN_ORDER) {
+      for (i = 0; i < pat->n; i++) {
+        tr_bitmap_set(bitmap, pattern[pat->val.start_pos + i]);
+      }
+    }
+    else if (pat->type == TR_RANGE) {
+      for (i = pat->val.ch[0]; i < pat->val.ch[1]; i++) {
+        tr_bitmap_set(bitmap, i);
+      }
+    }
+    else {
+      mrb_assert(pat->type == TR_UNINITIALIZED);
+    }
+    pat = pat->next;
+  }
+
+  if (flag_reverse) {
+    for (i=0; i<32; i++) {
+      bitmap[i] ^= 0xff;
+    }
+  }
+}
+
+static mrb_bool
+str_tr(mrb_state *mrb, mrb_value str, mrb_value p1, mrb_value p2, mrb_bool squeeze)
+{
+  struct tr_pattern pat = STATIC_TR_PATTERN;
+  struct tr_pattern rep_storage = STATIC_TR_PATTERN;
+  char *s;
+  mrb_int len;
+  mrb_int i;
+  mrb_int j;
+  mrb_bool flag_changed = FALSE;
+  mrb_int lastch = -1;
+  struct tr_pattern *rep;
+
+  mrb_str_modify(mrb, mrb_str_ptr(str));
+  tr_parse_pattern(mrb, &pat, p1, TRUE);
+  rep = tr_parse_pattern(mrb, &rep_storage, p2, FALSE);
+  s = RSTRING_PTR(str);
+  len = RSTRING_LEN(str);
+
+  for (i=j=0; i<len; i++,j++) {
+    mrb_int n = tr_find_character(&pat, RSTRING_PTR(p1), s[i]);
+
+    if (i>j) s[j] = s[i];
+    if (n >= 0) {
+      flag_changed = TRUE;
+      if (rep == NULL) {
+	j--;
+      }
+      else {
+        mrb_int c = tr_get_character(rep, RSTRING_PTR(p2), n);
+
+        if (c < 0 || (squeeze && c == lastch)) {
+          j--;
+          continue;
+        }
+        if (c > 0x80) {
+          mrb_raisef(mrb, E_ARGUMENT_ERROR, "character (%i) out of range", c);
+        }
+	lastch = c;
+	s[i] = (char)c;
+      }
+    }
+  }
+
+  tr_free_pattern(mrb, &pat);
+  tr_free_pattern(mrb, rep);
+
+  if (flag_changed) {
+    RSTR_SET_LEN(RSTRING(str), j);
+    RSTRING_PTR(str)[j] = 0;
+  }
+  return flag_changed;
+}
+
+/*
+ * call-seq:
+ *   str.tr(from_str, to_str)   => new_str
+ *
+ * Returns a copy of str with the characters in from_str replaced by the
+ * corresponding characters in to_str.  If to_str is shorter than from_str,
+ * it is padded with its last character in order to maintain the
+ * correspondence.
+ *
+ *  "hello".tr('el', 'ip')      #=> "hippo"
+ *  "hello".tr('aeiou', '*')    #=> "h*ll*"
+ *  "hello".tr('aeiou', 'AA*')  #=> "hAll*"
+ *
+ * Both strings may use the c1-c2 notation to denote ranges of characters,
+ * and from_str may start with a ^, which denotes all characters except
+ * those listed.
+ *
+ *  "hello".tr('a-y', 'b-z')    #=> "ifmmp"
+ *  "hello".tr('^aeiou', '*')   #=> "*e**o"
+ *
+ * The backslash character \ can be used to escape ^ or - and is otherwise
+ * ignored unless it appears at the end of a range or the end of the
+ * from_str or to_str:
+ *
+ *
+ *  "hello^world".tr("\\^aeiou", "*") #=> "h*ll**w*rld"
+ *  "hello-world".tr("a\\-eo", "*")   #=> "h*ll**w*rld"
+ *
+ *  "hello\r\nworld".tr("\r", "")   #=> "hello\nworld"
+ *  "hello\r\nworld".tr("\\r", "")  #=> "hello\r\nwold"
+ *  "hello\r\nworld".tr("\\\r", "") #=> "hello\nworld"
+ *
+ *  "X['\\b']".tr("X\\", "")   #=> "['b']"
+ *  "X['\\b']".tr("X-\\]", "") #=> "'b'"
+ *
+ *  Note: conversion is effective only in ASCII region.
+ */
+static mrb_value
+mrb_str_tr(mrb_state *mrb, mrb_value str)
+{
+  mrb_value dup;
+  mrb_value p1, p2;
+
+  mrb_get_args(mrb, "SS", &p1, &p2);
+  dup = mrb_str_dup(mrb, str);
+  str_tr(mrb, dup, p1, p2, FALSE);
+  return dup;
+}
+
+/*
+ * call-seq:
+ *   str.tr!(from_str, to_str)   -> str or nil
+ *
+ * Translates str in place, using the same rules as String#tr.
+ * Returns str, or nil if no changes were made.
+ */
+static mrb_value
+mrb_str_tr_bang(mrb_state *mrb, mrb_value str)
+{
+  mrb_value p1, p2;
+
+  mrb_get_args(mrb, "SS", &p1, &p2);
+  if (str_tr(mrb, str, p1, p2, FALSE)) {
+    return str;
+  }
+  return mrb_nil_value();
+}
+
+/*
+ * call-seq:
+ *   str.tr_s(from_str, to_str)   -> new_str
+ *
+ * Processes a copy of str as described under String#tr, then removes
+ * duplicate characters in regions that were affected by the translation.
+ *
+ *  "hello".tr_s('l', 'r')     #=> "hero"
+ *  "hello".tr_s('el', '*')    #=> "h*o"
+ *  "hello".tr_s('el', 'hx')   #=> "hhxo"
+ */
+static mrb_value
+mrb_str_tr_s(mrb_state *mrb, mrb_value str)
+{
+  mrb_value dup;
+  mrb_value p1, p2;
+
+  mrb_get_args(mrb, "SS", &p1, &p2);
+  dup = mrb_str_dup(mrb, str);
+  str_tr(mrb, dup, p1, p2, TRUE);
+  return dup;
+}
+
+/*
+ * call-seq:
+ *   str.tr_s!(from_str, to_str)   -> str or nil
+ *
+ * Performs String#tr_s processing on str in place, returning
+ * str, or nil if no changes were made.
+ */
+static mrb_value
+mrb_str_tr_s_bang(mrb_state *mrb, mrb_value str)
+{
+  mrb_value p1, p2;
+
+  mrb_get_args(mrb, "SS", &p1, &p2);
+  if (str_tr(mrb, str, p1, p2, TRUE)) {
+    return str;
+  }
+  return mrb_nil_value();
+}
+
+static mrb_bool
+str_squeeze(mrb_state *mrb, mrb_value str, mrb_value v_pat)
+{
+  struct tr_pattern pat_storage = STATIC_TR_PATTERN;
+  struct tr_pattern *pat = NULL;
+  mrb_int i, j;
+  char *s;
+  mrb_int len;
+  mrb_bool flag_changed = FALSE;
+  mrb_int lastch = -1;
+  uint8_t bitmap[32];
+
+  mrb_str_modify(mrb, mrb_str_ptr(str));
+  if (!mrb_nil_p(v_pat)) {
+    pat = tr_parse_pattern(mrb, &pat_storage, v_pat, TRUE);
+    tr_compile_pattern(pat, v_pat, bitmap);
+    tr_free_pattern(mrb, pat);
+  }
+  s = RSTRING_PTR(str);
+  len = RSTRING_LEN(str);
+
+  if (pat) {
+    for (i=j=0; i<len; i++,j++) {
+      if (i>j) s[j] = s[i];
+      if (tr_bitmap_detect(bitmap, s[i]) && s[i] == lastch) {
+        flag_changed = TRUE;
+        j--;
+      }
+      lastch = s[i];
+    }
+  }
+  else {
+    for (i=j=0; i<len; i++,j++) {
+      if (i>j) s[j] = s[i];
+      if (s[i] >= 0 && s[i] == lastch) {
+        flag_changed = TRUE;
+        j--;
+      }
+      lastch = s[i];
+    }
+  }
+
+  if (flag_changed) {
+    RSTR_SET_LEN(RSTRING(str), j);
+    RSTRING_PTR(str)[j] = 0;
+  }
+  return flag_changed;
+}
+
+/*
+ * call-seq:
+ *   str.squeeze([other_str])    -> new_str
+ *
+ * Builds a set of characters from the other_str
+ * parameter(s) using the procedure described for String#count. Returns a
+ * new string where runs of the same character that occur in this set are
+ * replaced by a single character. If no arguments are given, all runs of
+ * identical characters are replaced by a single character.
+ *
+ *  "yellow moon".squeeze                  #=> "yelow mon"
+ *  "  now   is  the".squeeze(" ")         #=> " now is the"
+ *  "putters shoot balls".squeeze("m-z")   #=> "puters shot balls"
+ */
+static mrb_value
+mrb_str_squeeze(mrb_state *mrb, mrb_value str)
+{
+  mrb_value pat = mrb_nil_value();
+  mrb_value dup;
+
+  mrb_get_args(mrb, "|S", &pat);
+  dup = mrb_str_dup(mrb, str);
+  str_squeeze(mrb, dup, pat);
+  return dup;
+}
+
+/*
+ * call-seq:
+ *   str.squeeze!([other_str])   -> str or nil
+ *
+ * Squeezes str in place, returning either str, or nil if no
+ * changes were made.
+ */
+static mrb_value
+mrb_str_squeeze_bang(mrb_state *mrb, mrb_value str)
+{
+  mrb_value pat = mrb_nil_value();
+
+  mrb_get_args(mrb, "|S", &pat);
+  if (str_squeeze(mrb, str, pat)) {
+    return str;
+  }
+  return mrb_nil_value();
+}
+
+static mrb_bool
+str_delete(mrb_state *mrb, mrb_value str, mrb_value v_pat)
+{
+  struct tr_pattern pat = STATIC_TR_PATTERN;
+  mrb_int i, j;
+  char *s;
+  mrb_int len;
+  mrb_bool flag_changed = FALSE;
+  uint8_t bitmap[32];
+
+  mrb_str_modify(mrb, mrb_str_ptr(str));
+  tr_parse_pattern(mrb, &pat, v_pat, TRUE);
+  tr_compile_pattern(&pat, v_pat, bitmap);
+  tr_free_pattern(mrb, &pat);
+
+  s = RSTRING_PTR(str);
+  len = RSTRING_LEN(str);
+
+  for (i=j=0; i<len; i++,j++) {
+    if (i>j) s[j] = s[i];
+    if (tr_bitmap_detect(bitmap, s[i])) {
+      flag_changed = TRUE;
+      j--;
+    }
+  }
+  if (flag_changed) {
+    RSTR_SET_LEN(RSTRING(str), j);
+    RSTRING_PTR(str)[j] = 0;
+  }
+  return flag_changed;
+}
+
+static mrb_value
+mrb_str_delete(mrb_state *mrb, mrb_value str)
+{
+  mrb_value pat;
+  mrb_value dup;
+
+  mrb_get_args(mrb, "S", &pat);
+  dup = mrb_str_dup(mrb, str);
+  str_delete(mrb, dup, pat);
+  return dup;
+}
+
+static mrb_value
+mrb_str_delete_bang(mrb_state *mrb, mrb_value str)
+{
+  mrb_value pat;
+
+  mrb_get_args(mrb, "S", &pat);
+  if (str_delete(mrb, str, pat)) {
+    return str;
+  }
+  return mrb_nil_value();
+}
+
+/*
+ * call_seq:
+ *   str.count([other_str])   -> integer
+ *
+ * Each other_str parameter defines a set of characters to count.  The
+ * intersection of these sets defines the characters to count in str.  Any
+ * other_str that starts with a caret ^ is negated.  The sequence c1-c2
+ * means all characters between c1 and c2.  The backslash character \ can
+ * be used to escape ^ or - and is otherwise ignored unless it appears at
+ * the end of a sequence or the end of a other_str.
+ */
+static mrb_value
+mrb_str_count(mrb_state *mrb, mrb_value str)
+{
+  mrb_value v_pat = mrb_nil_value();
+  mrb_int i;
+  char *s;
+  mrb_int len;
+  mrb_int count = 0;
+  struct tr_pattern pat = STATIC_TR_PATTERN;
+  uint8_t bitmap[32];
+
+  mrb_get_args(mrb, "S", &v_pat);
+  tr_parse_pattern(mrb, &pat, v_pat, TRUE);
+  tr_compile_pattern(&pat, v_pat, bitmap);
+  tr_free_pattern(mrb, &pat);
+
+  s = RSTRING_PTR(str);
+  len = RSTRING_LEN(str);
+  for (i = 0; i < len; i++) {
+    if (tr_bitmap_detect(bitmap, s[i])) count++;
+  }
+  return mrb_fixnum_value(count);
+}
+
+static mrb_value
+mrb_str_hex(mrb_state *mrb, mrb_value self)
+{
+  return mrb_str_to_inum(mrb, self, 16, FALSE);
+}
+
+static mrb_value
+mrb_str_oct(mrb_state *mrb, mrb_value self)
+{
+  return mrb_str_to_inum(mrb, self, 8, FALSE);
+}
+
+/*
+ *  call-seq:
+ *     string.chr    ->  string
+ *
+ *  Returns a one-character string at the beginning of the string.
+ *
+ *     a = "abcde"
+ *     a.chr    #=> "a"
+ */
+static mrb_value
+mrb_str_chr(mrb_state *mrb, mrb_value self)
+{
+  return mrb_str_substr(mrb, self, 0, 1);
+}
+
+/*
+ *  call-seq:
+ *     int.chr([encoding])  ->  string
+ *
+ *  Returns a string containing the character represented by the +int+'s value
+ *  according to +encoding+. +"ASCII-8BIT"+ (+"BINARY"+) and +"UTF-8"+ (only
+ *  with +MRB_UTF8_STRING+) can be specified as +encoding+ (default is
+ *  +"ASCII-8BIT"+).
+ *
+ *     65.chr                  #=> "A"
+ *     230.chr                 #=> "\xE6"
+ *     230.chr("ASCII-8BIT")   #=> "\xE6"
+ *     230.chr("UTF-8")        #=> "\u00E6"
+ */
+static mrb_value
+mrb_int_chr(mrb_state *mrb, mrb_value num)
+{
+  mrb_value enc;
+  mrb_bool enc_given;
+
+  mrb_get_args(mrb, "|S?", &enc, &enc_given);
+  if (!enc_given ||
+      ENC_COMP_P(enc, ENC_ASCII_8BIT) ||
+      ENC_COMP_P(enc, ENC_BINARY)) {
+    return int_chr_binary(mrb, num);
+  }
+#ifdef MRB_UTF8_STRING
+  else if (ENC_COMP_P(enc, ENC_UTF8)) {
+    return int_chr_utf8(mrb, num);
+  }
+#endif
+  else {
+    mrb_raisef(mrb, E_ARGUMENT_ERROR, "unknown encoding name - %v", enc);
+  }
+  /* not reached */
+  return mrb_nil_value();
+}
+
+/*
+ *  call-seq:
+ *     string.succ    ->  string
+ *
+ *  Returns next sequence of the string;
+ *
+ *     a = "abc"
+ *     a.succ    #=> "abd"
+ */
+static mrb_value
+mrb_str_succ_bang(mrb_state *mrb, mrb_value self)
+{
+  mrb_value result;
+  unsigned char *p, *e, *b, *t;
+  const char *prepend;
+  struct RString *s = mrb_str_ptr(self);
+  mrb_int l;
+
+  if (RSTRING_LEN(self) == 0)
+    return self;
+
+  mrb_str_modify(mrb, s);
+  l = RSTRING_LEN(self);
+  b = p = (unsigned char*) RSTRING_PTR(self);
+  t = e = p + l;
+  *(e--) = 0;
+
+  // find trailing ascii/number
+  while (e >= b) {
+    if (ISALNUM(*e))
+      break;
+    e--;
+  }
+  if (e < b) {
+    e = p + l - 1;
+    result = mrb_str_new_lit(mrb, "");
+  }
+  else {
+    // find leading letter of the ascii/number
+    b = e;
+    while (b > p) {
+      if (!ISALNUM(*b) || (ISALNUM(*b) && *b != '9' && *b != 'z' && *b != 'Z'))
+        break;
+      b--;
+    }
+    if (!ISALNUM(*b))
+      b++;
+    result = mrb_str_new(mrb, (char*) p, b - p);
+  }
+
+  while (e >= b) {
+    if (!ISALNUM(*e)) {
+      if (*e == 0xff) {
+        mrb_str_cat_lit(mrb, result, "\x01");
+        (*e) = 0;
+      }
+      else
+        (*e)++;
+      break;
+    }
+    prepend = NULL;
+    if (*e == '9') {
+      if (e == b) prepend = "1";
+      *e = '0';
+    }
+    else if (*e == 'z') {
+      if (e == b) prepend = "a";
+      *e = 'a';
+    }
+    else if (*e == 'Z') {
+      if (e == b) prepend = "A";
+      *e = 'A';
+    }
+    else {
+      (*e)++;
+      break;
+    }
+    if (prepend) mrb_str_cat_cstr(mrb, result, prepend);
+    e--;
+  }
+  result = mrb_str_cat(mrb, result, (char*) b, t - b);
+  l = RSTRING_LEN(result);
+  mrb_str_resize(mrb, self, l);
+  memcpy(RSTRING_PTR(self), RSTRING_PTR(result), l);
+  return self;
+}
+
+static mrb_value
+mrb_str_succ(mrb_state *mrb, mrb_value self)
+{
+  mrb_value str;
+
+  str = mrb_str_dup(mrb, self);
+  mrb_str_succ_bang(mrb, str);
+  return str;
+}
+
+#ifdef MRB_UTF8_STRING
+static const char utf8len_codepage_zero[256] =
+{
+  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+  2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+  3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,0,0,0,0,0,0,0,0,0,0,0,
+};
+
+static mrb_int
+utf8code(unsigned char* p)
+{
+  mrb_int len;
+
+  if (p[0] < 0x80)
+    return p[0];
+
+  len = utf8len_codepage_zero[p[0]];
+  if (len > 1 && (p[1] & 0xc0) == 0x80) {
+    if (len == 2)
+      return ((p[0] & 0x1f) << 6) + (p[1] & 0x3f);
+    if ((p[2] & 0xc0) == 0x80) {
+      if (len == 3)
+        return ((p[0] & 0x0f) << 12) + ((p[1] & 0x3f) << 6)
+          + (p[2] & 0x3f);
+      if ((p[3] & 0xc0) == 0x80) {
+        if (len == 4)
+          return ((p[0] & 0x07) << 18) + ((p[1] & 0x3f) << 12)
+            + ((p[2] & 0x3f) << 6) + (p[3] & 0x3f);
+        if ((p[4] & 0xc0) == 0x80) {
+          if (len == 5)
+            return ((p[0] & 0x03) << 24) + ((p[1] & 0x3f) << 18)
+              + ((p[2] & 0x3f) << 12) + ((p[3] & 0x3f) << 6)
+              + (p[4] & 0x3f);
+          if ((p[5] & 0xc0) == 0x80 && len == 6)
+            return ((p[0] & 0x01) << 30) + ((p[1] & 0x3f) << 24)
+              + ((p[2] & 0x3f) << 18) + ((p[3] & 0x3f) << 12)
+              + ((p[4] & 0x3f) << 6) + (p[5] & 0x3f);
+        }
+      }
+    }
+  }
+  return p[0];
+}
+
+static mrb_value
+mrb_str_ord(mrb_state* mrb, mrb_value str)
+{
+  if (RSTRING_LEN(str) == 0)
+    mrb_raise(mrb, E_ARGUMENT_ERROR, "empty string");
+  return mrb_fixnum_value(utf8code((unsigned char*) RSTRING_PTR(str)));
+}
+#else
+static mrb_value
+mrb_str_ord(mrb_state* mrb, mrb_value str)
+{
+  if (RSTRING_LEN(str) == 0)
+    mrb_raise(mrb, E_ARGUMENT_ERROR, "empty string");
+  return mrb_fixnum_value((unsigned char)RSTRING_PTR(str)[0]);
+}
+#endif
+
+/*
+ *  call-seq:
+ *     str.delete_prefix!(prefix) -> self or nil
+ *
+ *  Deletes leading <code>prefix</code> from <i>str</i>, returning
+ *  <code>nil</code> if no change was made.
+ *
+ *     "hello".delete_prefix!("hel") #=> "lo"
+ *     "hello".delete_prefix!("llo") #=> nil
+ */
+static mrb_value
+mrb_str_del_prefix_bang(mrb_state *mrb, mrb_value self)
+{
+  mrb_int plen, slen;
+  char *ptr, *s;
+  struct RString *str = RSTRING(self);
+
+  mrb_get_args(mrb, "s", &ptr, &plen);
+  slen = RSTR_LEN(str);
+  if (plen > slen) return mrb_nil_value();
+  s = RSTR_PTR(str);
+  if (memcmp(s, ptr, plen) != 0) return mrb_nil_value();
+  if (!mrb_frozen_p(str) && (RSTR_SHARED_P(str) || RSTR_FSHARED_P(str))) {
+    str->as.heap.ptr += plen;
+  }
+  else {
+    mrb_str_modify(mrb, str);
+    s = RSTR_PTR(str);
+    memmove(s, s+plen, slen-plen);
+  }
+  RSTR_SET_LEN(str, slen-plen);
+  return self;
+}
+
+/*
+ *  call-seq:
+ *     str.delete_prefix(prefix) -> new_str
+ *
+ *  Returns a copy of <i>str</i> with leading <code>prefix</code> deleted.
+ *
+ *     "hello".delete_prefix("hel") #=> "lo"
+ *     "hello".delete_prefix("llo") #=> "hello"
+ */
+static mrb_value
+mrb_str_del_prefix(mrb_state *mrb, mrb_value self)
+{
+  mrb_int plen, slen;
+  char *ptr;
+
+  mrb_get_args(mrb, "s", &ptr, &plen);
+  slen = RSTRING_LEN(self);
+  if (plen > slen) return mrb_str_dup(mrb, self);
+  if (memcmp(RSTRING_PTR(self), ptr, plen) != 0)
+    return mrb_str_dup(mrb, self);
+  return mrb_str_substr(mrb, self, plen, slen-plen);
+}
+
+/*
+ *  call-seq:
+ *     str.delete_suffix!(suffix) -> self or nil
+ *
+ *  Deletes trailing <code>suffix</code> from <i>str</i>, returning
+ *  <code>nil</code> if no change was made.
+ *
+ *     "hello".delete_suffix!("llo") #=> "he"
+ *     "hello".delete_suffix!("hel") #=> nil
+ */
+static mrb_value
+mrb_str_del_suffix_bang(mrb_state *mrb, mrb_value self)
+{
+  mrb_int plen, slen;
+  char *ptr, *s;
+  struct RString *str = RSTRING(self);
+
+  mrb_get_args(mrb, "s", &ptr, &plen);
+  slen = RSTR_LEN(str);
+  if (plen > slen) return mrb_nil_value();
+  s = RSTR_PTR(str);
+  if (memcmp(s+slen-plen, ptr, plen) != 0) return mrb_nil_value();
+  if (!mrb_frozen_p(str) && (RSTR_SHARED_P(str) || RSTR_FSHARED_P(str))) {
+    /* no need to modify string */
+  }
+  else {
+    mrb_str_modify(mrb, str);
+  }
+  RSTR_SET_LEN(str, slen-plen);
+  return self;
+}
+
+/*
+ *  call-seq:
+ *     str.delete_suffix(suffix) -> new_str
+ *
+ *  Returns a copy of <i>str</i> with leading <code>suffix</code> deleted.
+ *
+ *     "hello".delete_suffix("hel") #=> "lo"
+ *     "hello".delete_suffix("llo") #=> "hello"
+ */
+static mrb_value
+mrb_str_del_suffix(mrb_state *mrb, mrb_value self)
+{
+  mrb_int plen, slen;
+  char *ptr;
+
+  mrb_get_args(mrb, "s", &ptr, &plen);
+  slen = RSTRING_LEN(self);
+  if (plen > slen) return mrb_str_dup(mrb, self);
+  if (memcmp(RSTRING_PTR(self)+slen-plen, ptr, plen) != 0)
+    return mrb_str_dup(mrb, self);
+  return mrb_str_substr(mrb, self, 0, slen-plen);
+}
+
+static mrb_value
+mrb_str_lines(mrb_state *mrb, mrb_value self)
+{
+  mrb_value result;
+  int ai;
+  mrb_int len;
+  char *b = RSTRING_PTR(self);
+  char *p = b, *t;
+  char *e = b + RSTRING_LEN(self);
+
+  result = mrb_ary_new(mrb);
+  ai = mrb_gc_arena_save(mrb);
+  while (p < e) {
+    t = p;
+    while (p < e && *p != '\n') p++;
+    if (*p == '\n') p++;
+    len = (mrb_int) (p - t);
+    mrb_ary_push(mrb, result, mrb_str_new(mrb, t, len));
+    mrb_gc_arena_restore(mrb, ai);
+  }
+  return result;
+}
+
+void
+mrb_mruby_string_ext_gem_init(mrb_state* mrb)
+{
+  struct RClass * s = mrb->string_class;
+
+  mrb_define_method(mrb, s, "dump",            mrb_str_dump,            MRB_ARGS_NONE());
+  mrb_define_method(mrb, s, "swapcase!",       mrb_str_swapcase_bang,   MRB_ARGS_NONE());
+  mrb_define_method(mrb, s, "swapcase",        mrb_str_swapcase,        MRB_ARGS_NONE());
+  mrb_define_method(mrb, s, "concat",          mrb_str_concat_m,        MRB_ARGS_REQ(1));
+  mrb_define_method(mrb, s, "<<",              mrb_str_concat_m,        MRB_ARGS_REQ(1));
+  mrb_define_method(mrb, s, "count",           mrb_str_count,           MRB_ARGS_REQ(1));
+  mrb_define_method(mrb, s, "tr",              mrb_str_tr,              MRB_ARGS_REQ(2));
+  mrb_define_method(mrb, s, "tr!",             mrb_str_tr_bang,         MRB_ARGS_REQ(2));
+  mrb_define_method(mrb, s, "tr_s",            mrb_str_tr_s,            MRB_ARGS_REQ(2));
+  mrb_define_method(mrb, s, "tr_s!",           mrb_str_tr_s_bang,       MRB_ARGS_REQ(2));
+  mrb_define_method(mrb, s, "squeeze",         mrb_str_squeeze,         MRB_ARGS_OPT(1));
+  mrb_define_method(mrb, s, "squeeze!",        mrb_str_squeeze_bang,    MRB_ARGS_OPT(1));
+  mrb_define_method(mrb, s, "delete",          mrb_str_delete,          MRB_ARGS_REQ(1));
+  mrb_define_method(mrb, s, "delete!",         mrb_str_delete_bang,     MRB_ARGS_REQ(1));
+  mrb_define_method(mrb, s, "start_with?",     mrb_str_start_with,      MRB_ARGS_REST());
+  mrb_define_method(mrb, s, "end_with?",       mrb_str_end_with,        MRB_ARGS_REST());
+  mrb_define_method(mrb, s, "hex",             mrb_str_hex,             MRB_ARGS_NONE());
+  mrb_define_method(mrb, s, "oct",             mrb_str_oct,             MRB_ARGS_NONE());
+  mrb_define_method(mrb, s, "chr",             mrb_str_chr,             MRB_ARGS_NONE());
+  mrb_define_method(mrb, s, "succ",            mrb_str_succ,            MRB_ARGS_NONE());
+  mrb_define_method(mrb, s, "succ!",           mrb_str_succ_bang,       MRB_ARGS_NONE());
+  mrb_define_method(mrb, s, "next",            mrb_str_succ,            MRB_ARGS_NONE());
+  mrb_define_method(mrb, s, "next!",           mrb_str_succ_bang,       MRB_ARGS_NONE());
+  mrb_define_method(mrb, s, "ord",             mrb_str_ord,             MRB_ARGS_NONE());
+  mrb_define_method(mrb, s, "delete_prefix!",  mrb_str_del_prefix_bang, MRB_ARGS_REQ(1));
+  mrb_define_method(mrb, s, "delete_prefix",   mrb_str_del_prefix,      MRB_ARGS_REQ(1));
+  mrb_define_method(mrb, s, "delete_suffix!",  mrb_str_del_suffix_bang, MRB_ARGS_REQ(1));
+  mrb_define_method(mrb, s, "delete_suffix",   mrb_str_del_suffix,      MRB_ARGS_REQ(1));
+
+  mrb_define_method(mrb, s, "__lines",         mrb_str_lines,           MRB_ARGS_NONE());
+
+  mrb_define_method(mrb, mrb_module_get(mrb, "Integral"), "chr", mrb_int_chr, MRB_ARGS_OPT(1));
+}
+
+void
+mrb_mruby_string_ext_gem_final(mrb_state* mrb)
+{
+}
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-string-ext/test/numeric.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-string-ext/test/numeric.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-string-ext/test/numeric.rb	(revision 439)
@@ -0,0 +1,29 @@
+# coding: utf-8
+
+assert('Integer#chr') do
+  assert_equal("A", 65.chr)
+  assert_equal("B", 0x42.chr)
+  assert_equal("\xab", 171.chr)
+  assert_raise(RangeError) { -1.chr }
+  assert_raise(RangeError) { 256.chr }
+
+  assert_equal("A", 65.chr("ASCII-8BIT"))
+  assert_equal("B", 0x42.chr("BINARY"))
+  assert_equal("\xab", 171.chr("ascii-8bit"))
+  assert_raise(RangeError) { -1.chr("binary") }
+  assert_raise(RangeError) { 256.chr("Ascii-8bit") }
+  assert_raise(ArgumentError) { 65.chr("ASCII") }
+  assert_raise(ArgumentError) { 65.chr("ASCII-8BIT", 2) }
+  assert_raise(TypeError) { 65.chr(:BINARY) }
+
+  if __ENCODING__ == "ASCII-8BIT"
+    assert_raise(ArgumentError) { 65.chr("UTF-8") }
+  else
+    assert_equal("A", 65.chr("UTF-8"))
+    assert_equal("B", 0x42.chr("UTF-8"))
+    assert_equal("«", 171.chr("utf-8"))
+    assert_equal("あ", 12354.chr("Utf-8"))
+    assert_raise(RangeError) { -1.chr("utf-8") }
+    assert_raise(RangeError) { 0x110000.chr.chr("UTF-8") }
+  end
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-string-ext/test/range.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-string-ext/test/range.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-string-ext/test/range.rb	(revision 439)
@@ -0,0 +1,26 @@
+assert('Range#max') do
+  # returns the maximum value in the range when called with no arguments
+  assert_equal 'l', ('f'..'l').max
+  assert_equal 'e', ('a'...'f').max
+
+  # returns nil when the endpoint is less than the start point
+  assert_equal nil, ('z'..'l').max
+end
+
+assert('Range#max given a block') do
+  # returns nil when the endpoint is less than the start point
+  assert_equal nil, (('z'..'l').max { |x, y| x <=> y })
+end
+
+assert('Range#min') do
+  # returns the minimum value in the range when called with no arguments
+  assert_equal 'f', ('f'..'l').min
+
+  # returns nil when the start point is greater than the endpoint
+  assert_equal nil, ('z'..'l').min
+end
+
+assert('Range#min given a block') do
+  # returns nil when the start point is greater than the endpoint
+  assert_equal nil, (('z'..'l').min { |x, y| x <=> y })
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-string-ext/test/string.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-string-ext/test/string.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-string-ext/test/string.rb	(revision 439)
@@ -0,0 +1,707 @@
+# coding: utf-8
+##
+# String(Ext) Test
+
+UTF8STRING = __ENCODING__ == "UTF-8"
+
+def assert_upto(exp, receiver, *args)
+  act = []
+  receiver.upto(*args) { |v| act << v }
+  assert_equal exp, act
+end
+
+assert('String#dump') do
+  assert_equal("\"\\x00\"", "\0".dump)
+  assert_equal("\"foo\"", "foo".dump)
+  assert_equal('"\xe3\x82\x8b"', "る".dump)
+  assert_nothing_raised { ("\1" * 100).dump }   # regress #1210
+end
+
+assert('String#strip') do
+  s = "  abc  "
+  assert_equal("abc", s.strip)
+  assert_equal("  abc  ", s)
+  assert_equal("", "".strip)
+  assert_equal("", " \t\r\n\f\v".strip)
+  assert_equal("\0a", "\0a\0".strip)
+  assert_equal("abc", "abc".strip)
+  assert_equal("abc", "  abc".strip)
+  assert_equal("abc", "abc  ".strip)
+end
+
+assert('String#lstrip') do
+  s = "  abc  "
+  assert_equal("abc  ", s.lstrip)
+  assert_equal("  abc  ", s)
+  assert_equal("", "".lstrip)
+  assert_equal("", " \t\r\n\f\v".lstrip)
+  assert_equal("\0a\0", "\0a\0".lstrip)
+  assert_equal("abc", "abc".lstrip)
+  assert_equal("abc", "  abc".lstrip)
+  assert_equal("abc  ", "abc  ".lstrip)
+end
+
+assert('String#rstrip') do
+  s = "  abc  "
+  assert_equal("  abc", s.rstrip)
+  assert_equal("  abc  ", s)
+  assert_equal("", "".rstrip)
+  assert_equal("", " \t\r\n\f\v".rstrip)
+  assert_equal("\0a", "\0a\0".rstrip)
+  assert_equal("abc", "abc".rstrip)
+  assert_equal("  abc", "  abc".rstrip)
+  assert_equal("abc", "abc  ".rstrip)
+end
+
+assert('String#strip!') do
+  s = "  abc  "
+  t = "abc"
+  assert_equal("abc", s.strip!)
+  assert_equal("abc", s)
+  assert_nil(t.strip!)
+  assert_equal("abc", t)
+end
+
+assert('String#lstrip!') do
+  s = "  abc  "
+  t = "abc  "
+  assert_equal("abc  ", s.lstrip!)
+  assert_equal("abc  ", s)
+  assert_nil(t.lstrip!)
+  assert_equal("abc  ", t)
+end
+
+assert('String#rstrip!') do
+  s = "  abc  "
+  t = "  abc"
+  assert_equal("  abc", s.rstrip!)
+  assert_equal("  abc", s)
+  assert_nil(t.rstrip!)
+  assert_equal("  abc", t)
+end
+
+assert('String#swapcase') do
+  assert_equal "hELLO", "Hello".swapcase
+  assert_equal "CyBeR_pUnK11", "cYbEr_PuNk11".swapcase
+end
+
+assert('String#swapcase!') do
+  s = "Hello"
+  t = s.clone
+  t.swapcase!
+  assert_equal s.swapcase, t
+end
+
+assert('String#concat') do
+  assert_equal "Hello World!", "Hello " << "World" << 33
+  assert_equal "Hello World!", "Hello ".concat("World").concat(33)
+  assert_raise(TypeError) { "".concat(Object.new) }
+
+  if UTF8STRING
+    assert_equal "H«", "H" << 0xab
+    assert_equal "Hは", "H" << 12399
+  else
+    assert_equal "H\xab", "H" << 0xab
+    assert_raise(RangeError) { "H" << 12399 }
+  end
+end
+
+assert('String#casecmp') do
+  assert_equal 1, "abcdef".casecmp("abcde")
+  assert_equal 0, "aBcDeF".casecmp("abcdef")
+  assert_equal(-1, "abcdef".casecmp("abcdefg"))
+  assert_equal 0, "abcdef".casecmp("ABCDEF")
+end
+
+assert('String#count') do
+  s = "abccdeff123"
+  assert_equal 0, s.count("")
+  assert_equal 1, s.count("a")
+  assert_equal 2, s.count("ab")
+  assert_equal 9, s.count("^c")
+  assert_equal 8, s.count("a-z")
+  assert_equal 4, s.count("a0-9")
+end
+
+assert('String#tr') do
+  assert_equal "ABC", "abc".tr('a-z', 'A-Z')
+  assert_equal "hippo", "hello".tr('el', 'ip')
+  assert_equal "Ruby", "Lisp".tr("Lisp", "Ruby")
+  assert_equal "*e**o", "hello".tr('^aeiou', '*')
+  assert_equal "heo", "hello".tr('l', '')
+end
+
+assert('String#tr!') do
+  s = "abcdefghijklmnopqR"
+  assert_equal "ab12222hijklmnopqR", s.tr!("cdefg", "12")
+  assert_equal "ab12222hijklmnopqR", s
+end
+
+assert('String#tr_s') do
+  assert_equal "hero", "hello".tr_s('l', 'r')
+  assert_equal "h*o", "hello".tr_s('el', '*')
+  assert_equal "hhxo", "hello".tr_s('el', 'hx')
+end
+
+assert('String#tr_s!') do
+  s = "hello"
+  assert_equal "hero", s.tr_s!('l', 'r')
+  assert_equal "hero", s
+  assert_nil s.tr_s!('l', 'r')
+end
+
+assert('String#squeeze') do
+  assert_equal "yelow mon", "yellow moon".squeeze
+  assert_equal " now is the", "  now   is  the".squeeze(" ")
+  assert_equal "puters shot balls", "putters shoot balls".squeeze("m-z")
+end
+
+assert('String#squeeze!') do
+  s = "  now   is  the"
+  assert_equal " now is the", s.squeeze!(" ")
+  assert_equal " now is the", s
+end
+
+assert('String#delete') do
+  assert_equal "he", "hello".delete("lo")
+  assert_equal "hll", "hello".delete("aeiou")
+  assert_equal "ll", "hello".delete("^l")
+  assert_equal "ho", "hello".delete("ej-m")
+end
+
+assert('String#delete!') do
+  s = "hello"
+  assert_equal "he", s.delete!("lo")
+  assert_equal "he", s
+  assert_nil s.delete!("lz")
+end
+
+assert('String#start_with?') do
+  assert_true "hello".start_with?("heaven", "hell")
+  assert_true !"hello".start_with?("heaven", "paradise")
+  assert_true !"h".start_with?("heaven", "hell")
+  assert_raise TypeError do "hello".start_with?(true) end
+end
+
+assert('String#end_with?') do
+  assert_true "string".end_with?("ing", "mng")
+  assert_true !"string".end_with?("str", "tri")
+  assert_true !"ng".end_with?("ing", "mng")
+  assert_raise TypeError do "hello".end_with?(true) end
+end
+
+assert('String#partition') do
+  assert_equal ["a", "x", "axa"], "axaxa".partition("x")
+  assert_equal ["aaaaa", "", ""], "aaaaa".partition("x")
+  assert_equal ["", "", "aaaaa"], "aaaaa".partition("")
+  assert_equal ["", "a", "aaaa"], "aaaaa".partition("a")
+  assert_equal ["aaaa", "b", ""], "aaaab".partition("b")
+  assert_equal ["", "b", "aaaa"], "baaaa".partition("b")
+  assert_equal ["", "", ""],      "".partition("a")
+end
+
+assert('String#rpartition') do
+  assert_equal ["axa", "x", "a"], "axaxa".rpartition("x")
+  assert_equal ["", "", "aaaaa"], "aaaaa".rpartition("x")
+  assert_equal ["aaaaa", "", ""], "aaaaa".rpartition("")
+  assert_equal ["aaaa", "a", ""], "aaaaa".rpartition("a")
+  assert_equal ["aaaa", "b", ""], "aaaab".rpartition("b")
+  assert_equal ["", "b", "aaaa"], "baaaa".rpartition("b")
+  assert_equal ["", "", ""],      "".rpartition("a")
+end
+
+assert('String#hex') do
+  assert_equal 16, "10".hex
+  assert_equal 255, "ff".hex
+  assert_equal 16, "0x10".hex
+  assert_equal (-16), "-0x10".hex
+  assert_equal 0, "xyz".hex
+  assert_equal 16, "10z".hex
+  assert_equal 16, "1_0".hex
+  assert_equal 0, "".hex
+end
+
+assert('String#oct') do
+  assert_equal 8, "10".oct
+  assert_equal 7, "7".oct
+  assert_equal 0, "8".oct
+  assert_equal 0, "9".oct
+  assert_equal 0, "xyz".oct
+  assert_equal 8, "10z".oct
+  assert_equal 8, "1_0".oct
+  assert_equal 8, "010".oct
+  assert_equal (-8), "-10".oct
+end
+
+assert('String#lines') do
+  assert_equal ["Hel\n", "lo\n", "World!"], "Hel\nlo\nWorld!".lines
+  assert_equal ["Hel\n", "lo\n", "World!\n"], "Hel\nlo\nWorld!\n".lines
+  assert_equal ["\n", "\n", "\n"], "\n\n\n".lines
+  assert_equal [], "".lines
+end
+
+assert('String#clear') do
+  # embed string
+  s = "foo"
+  assert_equal("", s.clear)
+  assert_equal("", s)
+
+  # not embed string and not shared string
+  s = "foo" * 100
+  a = s
+  assert_equal("", s.clear)
+  assert_equal("", s)
+  assert_equal("", a)
+
+  # shared string
+  s = "foo" * 100
+  a = s[10, 90]                # create shared string
+  assert_equal("", s.clear)    # clear
+  assert_equal("", s)          # s is cleared
+  assert_not_equal("", a)      # a should not be affected
+end
+
+assert('String#slice!') do
+  a = "AooBar"
+  b = a.dup
+  assert_equal "A", a.slice!(0)
+  assert_equal "AooBar", b
+
+  a = "FooBar"
+  assert_equal "r", a.slice!(-1)
+  assert_equal "FooBa", a
+
+  a = "FooBar"
+  assert_nil a.slice!(6)
+  assert_nil a.slice!(-7)
+  assert_equal "FooBar", a
+
+  a = "FooBar"
+  assert_equal "Foo", a.slice!(0, 3)
+  assert_equal "Bar", a
+
+  a = "FooBar"
+  assert_equal "Bar", a.slice!(-3, 3)
+  assert_equal "Foo", a
+
+  a = "FooBar"
+  assert_equal "", a.slice!(6, 2)
+  assert_equal "FooBar", a
+
+  a = "FooBar"
+  assert_nil a.slice!(-7,10)
+  assert_equal "FooBar", a
+
+  a = "FooBar"
+  assert_equal "Foo", a.slice!(0..2)
+  assert_equal "Bar", a
+
+  a = "FooBar"
+  assert_equal "Bar", a.slice!(-3..-1)
+  assert_equal "Foo", a
+
+  a = "FooBar"
+  assert_equal "", a.slice!(6..2)
+  assert_equal "FooBar", a
+
+  a = "FooBar"
+  assert_nil a.slice!(-10..-7)
+  assert_equal "FooBar", a
+
+  a = "FooBar"
+  assert_equal "Foo", a.slice!("Foo")
+  assert_equal "Bar", a
+
+  a = "FooBar"
+  assert_nil a.slice!("xyzzy")
+  assert_equal "FooBar", a
+
+  assert_raise(ArgumentError) { "foo".slice! }
+end
+
+assert('String#succ') do
+  assert_equal "", "".succ
+  assert_equal "1", "0".succ
+  assert_equal "10", "9".succ
+  assert_equal "01", "00".succ
+  assert_equal "a1", "a0".succ
+  assert_equal "A1", "A0".succ
+  assert_equal "10", "09".succ
+  assert_equal "b0", "a9".succ
+  assert_equal "B0", "A9".succ
+
+  assert_equal "b", "a".succ
+  assert_equal "aa", "z".succ
+  assert_equal "ab", "aa".succ
+  assert_equal "Ab", "Aa".succ
+  assert_equal "0b", "0a".succ
+  assert_equal "ba", "az".succ
+  assert_equal "Ba", "Az".succ
+  assert_equal "1a", "0z".succ
+
+  assert_equal "B", "A".succ
+  assert_equal "AA", "Z".succ
+  assert_equal "AB", "AA".succ
+  assert_equal "aB", "aA".succ
+  assert_equal "0B", "0A".succ
+  assert_equal "BA", "AZ".succ
+  assert_equal "bA", "aZ".succ
+  assert_equal "1A", "0Z".succ
+
+  assert_equal ".", "-".succ
+  assert_equal "\x01\x00", "\xff".succ
+  assert_equal "-b", "-a".succ
+  assert_equal "-aa", "-z".succ
+  assert_equal "-a-b-", "-a-a-".succ
+  assert_equal "-b-", "-a-".succ
+  assert_equal "-aa-", "-z-".succ
+  assert_equal "あb", "あa".succ
+  assert_equal "あba", "あaz".succ
+
+  a = ""; a.succ!
+  assert_equal "", a
+  a = "0"; a.succ!
+  assert_equal "1", a
+  a = "9"; a.succ!
+  assert_equal "10", a
+  a = "00"; a.succ!
+  assert_equal "01", a
+  a = "a0"; a.succ!
+  assert_equal "a1", a
+  a = "A0"; a.succ!
+  assert_equal "A1", a
+  a = "09"; a.succ!
+  assert_equal "10", a
+  a = "a9"; a.succ!
+  assert_equal "b0", a
+  a = "A9"; a.succ!
+  assert_equal "B0", a
+
+  a = "a"; a.succ!
+  assert_equal "b", a
+  a = "z"; a.succ!
+  assert_equal "aa", a
+  a = "aa"; a.succ!
+  assert_equal "ab", a
+  a = "Aa"; a.succ!
+  assert_equal "Ab", a
+  a = "0a"; a.succ!
+  assert_equal "0b", a
+  a = "az"; a.succ!
+  assert_equal "ba", a
+  a = "Az"; a.succ!
+  assert_equal "Ba", a
+  a = "0z"; a.succ!
+  assert_equal "1a", a
+
+  a = "A"; a.succ!
+  assert_equal "B", a
+  a = "Z"; a.succ!
+  assert_equal "AA", a
+  a = "AA"; a.succ!
+  assert_equal "AB", a
+  a = "aA"; a.succ!
+  assert_equal "aB", a
+  a = "0A"; a.succ!
+  assert_equal "0B", a
+  a = "AZ"; a.succ!
+  assert_equal "BA", a
+  a = "aZ"; a.succ!
+  assert_equal "bA", a
+  a = "0Z"; a.succ!
+  assert_equal "1A", a
+
+  a = "-"; a.succ!
+  assert_equal ".", a
+  a = "\xff"; a.succ!
+  assert_equal "\x01\x00", a
+  a = "-a"; a.succ!
+  assert_equal "-b", a
+  a = "-z"; a.succ!
+  assert_equal "-aa", a
+  a = "-a-a-"; a.succ!
+  assert_equal "-a-b-", a
+  a = "-a-"; a.succ!
+  assert_equal "-b-", a
+  a = "-z-"; a.succ!
+  assert_equal "-aa-", a
+  a = "あb"; a.succ!
+  assert_equal "あc", a
+  a = "あaz"; a.succ!
+  assert_equal "あba", a
+end
+
+assert('String#next') do
+  assert_equal "01", "00".next
+
+  a = "00"; a.next!
+  assert_equal "01", a
+end
+
+assert('String#insert') do
+  assert_equal "Xabcd", "abcd".insert(0, 'X')
+  assert_equal "abcXd", "abcd".insert(3, 'X')
+  assert_equal "abcdX", "abcd".insert(4, 'X')
+  assert_equal "abXcd", "abcd".insert(-3, 'X')
+  assert_equal "abcdX", "abcd".insert(-1, 'X')
+  assert_raise(IndexError) { "abcd".insert(5, 'X') }
+  assert_raise(IndexError) { "abcd".insert(-6, 'X') }
+
+  a = "abcd"
+  a.insert(0, 'X')
+  assert_equal "Xabcd", a
+end
+
+assert('String#prepend') do
+  a = "world"
+  assert_equal "hello world", a.prepend("hello ")
+  assert_equal "hello world", a
+end
+
+assert('String#ljust') do
+  assert_equal "hello", "hello".ljust(4)
+  assert_equal "hello               ", "hello".ljust(20)
+  assert_equal 20, "hello".ljust(20).length
+  assert_equal "hello123412341234123", "hello".ljust(20, '1234')
+  assert_equal "hello", "hello".ljust(-3)
+end
+
+assert('String#rjust') do
+  assert_equal "hello", "hello".rjust(4)
+  assert_equal "               hello", "hello".rjust(20)
+  assert_equal 20, "hello".rjust(20).length
+  assert_equal "123412341234123hello", "hello".rjust(20, '1234')
+  assert_equal "hello", "hello".rjust(-3)
+end
+
+if UTF8STRING
+  assert('String#ljust with UTF8') do
+    assert_equal "helloん              ", "helloん".ljust(20)
+    assert_equal "helloó                            ", "helloó".ljust(34)
+    assert_equal 34, "helloó".ljust(34).length
+    assert_equal "helloんんんんんんんんんんんんんん", "hello".ljust(19, 'ん')
+    assert_equal "helloんんんんんんんんんんんんんんん", "hello".ljust(20, 'ん')
+  end
+
+  assert('String#rjust with UTF8') do
+    assert_equal "              helloん", "helloん".rjust(20)
+    assert_equal "                            helloó", "helloó".rjust(34)
+    # assert_equal 34, "helloó".rjust(34).length
+    assert_equal "んんんんんんんんんんんんんんhello", "hello".rjust(19, 'ん')
+    assert_equal "んんんんんんんんんんんんんんんhello", "hello".rjust(20, 'ん')
+  end
+
+  assert('UTF8 byte counting') do
+    ret = '                                  '
+    ret[-6..-1] = "helloó"
+    assert_equal 34, ret.length
+  end
+end
+
+assert('String#ljust should not change string') do
+  a = "hello"
+  a.ljust(20)
+  assert_equal "hello", a
+end
+
+assert('String#rjust should not change string') do
+  a = "hello"
+  a.rjust(20)
+  assert_equal "hello", a
+end
+
+assert('String#ljust should raise on zero width padding') do
+  assert_raise(ArgumentError) { "foo".ljust(10, '') }
+end
+
+assert('String#rjust should raise on zero width padding') do
+  assert_raise(ArgumentError) { "foo".rjust(10, '') }
+end
+
+assert('String#upto') do
+  assert_upto %w(a8 a9 b0 b1 b2 b3 b4 b5 b6), "a8", "b6"
+  assert_upto ["9", "10", "11"], "9", "11"
+  assert_upto [], "25", "5"
+  assert_upto ["07", "08", "09", "10", "11"], "07", "11"
+  assert_upto ["9", ":", ";", "<", "=", ">", "?", "@", "A"], "9", "A"
+
+  if UTF8STRING
+    assert_upto %w(あ ぃ い ぅ う ぇ え ぉ お), "あ", "お"
+  end
+
+  a     = "aa"
+  start = "aa"
+  count = 0
+  assert_equal("aa", a.upto("zz") {|s|
+    assert_equal(start, s)
+    start.succ!
+    count += 1
+  })
+  assert_equal(676, count)
+
+  a     = "a"
+  start = "a"
+  count = 0
+  assert_equal("a", a.upto("a") {|s|
+    assert_equal(start, s)
+    start.succ!
+    count += 1
+  })
+  assert_equal(1, count)
+
+  a     = "a"
+  start = "a"
+  count = 0
+  assert_equal("a", a.upto("b", true) {|s|
+    assert_equal(start, s)
+    start.succ!
+    count += 1
+  })
+  assert_equal(1, count)
+
+  a     = "0"
+  start = "0"
+  count = 0
+  assert_equal("0", a.upto("0") {|s|
+    assert_equal(start, s)
+    start.succ!
+    count += 1
+  })
+  assert_equal(1, count)
+
+  a     = "0"
+  start = "0"
+  count = 0
+  assert_equal("0", a.upto("-1") {|s|
+    assert_equal(start, s)
+    start.succ!
+    count += 1
+  })
+  assert_equal(0, count)
+
+  a     = "-1"
+  start = "-1"
+  count = 0
+  assert_equal("-1", a.upto("-2") {|s|
+    assert_equal(start, s)
+    start.succ!
+    count += 1
+  })
+  assert_equal(2, count)
+
+  assert_raise(TypeError) { "a".upto(:c) {} }
+end
+
+assert('String#ord') do
+  got = "hello!".split('').map {|x| x.ord}
+  expect = [104, 101, 108, 108, 111, 33]
+  unless UTF8STRING
+    got << "\xff".ord
+    expect << 0xff
+  end
+  assert_equal expect, got
+end
+
+assert('String#ord(UTF-8)') do
+  got = "こんにちは世界!".split('').map {|x| x.ord}
+  expect = [0x3053,0x3093,0x306b,0x3061,0x306f,0x4e16,0x754c,0x21]
+  assert_equal expect, got
+end if UTF8STRING
+
+assert('String#chr') do
+  assert_equal "a", "abcde".chr
+  assert_equal "h", "hello!".chr
+  assert_equal "", "".chr
+end
+
+assert('String#chr(UTF-8)') do
+  assert_equal "こ", "こんにちは世界!".chr
+end if UTF8STRING
+
+assert('String#chars') do
+  expect = ["h", "e", "l", "l", "o", "!"]
+  assert_equal expect, "hello!".chars
+  s = ""
+  "hello!".chars do |x|
+    s += x
+  end
+  assert_equal "hello!", s
+end
+
+assert('String#chars(UTF-8)') do
+  expect = ['こ', 'ん', 'に', 'ち', 'は', '世', '界', '!']
+  assert_equal expect, "こんにちは世界!".chars
+  s = ""
+  "こんにちは世界!".chars do |x|
+    s += x
+  end
+  assert_equal "こんにちは世界!", s
+end if UTF8STRING
+
+assert('String#each_char') do
+  chars = []
+  "hello!".each_char do |x|
+    chars << x
+  end
+  assert_equal ["h", "e", "l", "l", "o", "!"], chars
+end
+
+assert('String#each_char(UTF-8)') do
+  chars = []
+  "こんにちは世界!".each_char do |x|
+    chars << x
+  end
+  assert_equal ["こ", "ん", "に", "ち", "は", "世", "界", "!"], chars
+end if UTF8STRING
+
+assert('String#codepoints') do
+  expect = [104, 101, 108, 108, 111, 33]
+  assert_equal expect, "hello!".codepoints
+  cp = []
+  "hello!".codepoints do |x|
+    cp << x
+  end
+  assert_equal expect, cp
+end
+
+assert('String#codepoints(UTF-8)') do
+  expect = [12371, 12435, 12395, 12385, 12399, 19990, 30028, 33]
+  assert_equal expect, "こんにちは世界!".codepoints
+  cp = []
+  "こんにちは世界!".codepoints do |x|
+    cp << x
+  end
+  assert_equal expect, cp
+end if UTF8STRING
+
+assert('String#each_codepoint') do
+  expect = [104, 101, 108, 108, 111, 33]
+  cp = []
+  "hello!".each_codepoint do |x|
+    cp << x
+  end
+  assert_equal expect, cp
+end
+
+assert('String#each_codepoint(UTF-8)') do
+  expect = [12371, 12435, 12395, 12385, 12399, 19990, 30028, 33]
+  cp = []
+  "こんにちは世界!".each_codepoint do |x|
+    cp << x
+  end
+  assert_equal expect, cp
+end if UTF8STRING
+
+assert('String#delete_prefix') do
+  assert_equal "llo", "hello".delete_prefix("he")
+  assert_equal "hello", "hello".delete_prefix("llo")
+  assert_equal "llo", "hello".delete_prefix!("he")
+  assert_nil "hello".delete_prefix!("llo")
+end
+
+assert('String#delete_suffix') do
+  assert_equal "he", "hello".delete_suffix("llo")
+  assert_equal "hello", "hello".delete_suffix("he")
+  assert_equal "he", "hello".delete_suffix!("llo")
+  assert_nil "hello".delete_suffix!("he")
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-struct/mrbgem.rake
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-struct/mrbgem.rake	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-struct/mrbgem.rake	(revision 439)
@@ -0,0 +1,5 @@
+MRuby::Gem::Specification.new('mruby-struct') do |spec|
+  spec.license = 'MIT'
+  spec.author  = 'mruby developers'
+  spec.summary = 'standard Struct class'
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-struct/mrblib/struct.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-struct/mrblib/struct.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-struct/mrblib/struct.rb	(revision 439)
@@ -0,0 +1,100 @@
+##
+# Struct
+#
+# ISO 15.2.18
+
+if Object.const_defined?(:Struct)
+  class Struct
+
+    ##
+    # Calls the given block for each element of +self+
+    # and pass the respective element.
+    #
+    # ISO 15.2.18.4.4
+    def each(&block)
+      self.class.members.each{|field|
+        block.call(self[field])
+      }
+      self
+    end
+
+    ##
+    # Calls the given block for each element of +self+
+    # and pass the name and value of the respectiev
+    # element.
+    #
+    # ISO 15.2.18.4.5
+    def each_pair(&block)
+      self.class.members.each{|field|
+        block.call(field.to_sym, self[field])
+      }
+      self
+    end
+
+    ##
+    # Calls the given block for each element of +self+
+    # and returns an array with all elements of which
+    # block is not false.
+    #
+    # ISO 15.2.18.4.7
+    def select(&block)
+      ary = []
+      self.class.members.each{|field|
+        val = self[field]
+        ary.push(val) if block.call(val)
+      }
+      ary
+    end
+
+    def _inspect(recur_list)
+      return "#<struct #{self.class}:...>" if recur_list[self.object_id]
+      recur_list[self.object_id] = true
+      name = self.class.to_s
+      if name[0] == "#"
+        str = "#<struct "
+      else
+        str = "#<struct #{name} "
+      end
+      buf = []
+      self.each_pair do |k,v|
+        buf.push k.to_s + "=" + v._inspect(recur_list)
+      end
+      str + buf.join(", ") + ">"
+    end
+
+    ##
+    # call-seq:
+    #   struct.to_s      -> string
+    #   struct.inspect   -> string
+    #
+    # Describe the contents of this struct in a string.
+    #
+    # 15.2.18.4.10(x)
+    #
+    def inspect
+      self._inspect({})
+    end
+
+    ##
+    # 15.2.18.4.11(x)
+    #
+    alias to_s inspect
+
+    ##
+    # call-seq:
+    #   hsh.dig(key,...)                 -> object
+    #
+    # Extracts the nested value specified by the sequence of <i>key</i>
+    # objects by calling +dig+ at each step, returning +nil+ if any
+    # intermediate step is +nil+.
+    #
+    def dig(idx,*args)
+      n = self[idx]
+      if args.size > 0
+        n&.dig(*args)
+      else
+        n
+      end
+    end
+  end
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-struct/src/struct.c
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-struct/src/struct.c	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-struct/src/struct.c	(revision 439)
@@ -0,0 +1,713 @@
+/*
+** struct.c - Struct class
+**
+** See Copyright Notice in mruby.h
+*/
+
+#include <string.h>
+#include <mruby.h>
+#include <mruby/array.h>
+#include <mruby/string.h>
+#include <mruby/class.h>
+#include <mruby/variable.h>
+#include <mruby/hash.h>
+#include <mruby/range.h>
+#include <mruby/proc.h>
+
+#define RSTRUCT_LEN(st) RARRAY_LEN(st)
+#define RSTRUCT_PTR(st) RARRAY_PTR(st)
+
+static struct RClass *
+struct_class(mrb_state *mrb)
+{
+  return mrb_class_get(mrb, "Struct");
+}
+
+static inline mrb_value
+struct_ivar_get(mrb_state *mrb, mrb_value cls, mrb_sym id)
+{
+  struct RClass* c = mrb_class_ptr(cls);
+  struct RClass* sclass = struct_class(mrb);
+  mrb_value ans;
+
+  for (;;) {
+    ans = mrb_iv_get(mrb, mrb_obj_value(c), id);
+    if (!mrb_nil_p(ans)) return ans;
+    c = c->super;
+    if (c == sclass || c == 0)
+      return mrb_nil_value();
+  }
+}
+
+static mrb_value
+struct_s_members(mrb_state *mrb, struct RClass *klass)
+{
+  mrb_value members = struct_ivar_get(mrb, mrb_obj_value(klass), mrb_intern_lit(mrb, "__members__"));
+
+  if (mrb_nil_p(members)) {
+    mrb_raise(mrb, E_TYPE_ERROR, "uninitialized struct");
+  }
+  if (!mrb_array_p(members)) {
+    mrb_raise(mrb, E_TYPE_ERROR, "corrupted struct");
+  }
+  return members;
+}
+
+static mrb_value
+struct_members(mrb_state *mrb, mrb_value s)
+{
+  mrb_value members = struct_s_members(mrb, mrb_obj_class(mrb, s));
+  if (!mrb_array_p(s)) {
+    mrb_raise(mrb, E_TYPE_ERROR, "corrupted struct");
+  }
+  if (RSTRUCT_LEN(s) != RARRAY_LEN(members)) {
+    if (RSTRUCT_LEN(s) == 0) {  /* probably uninitialized */
+      mrb_ary_resize(mrb, s, RARRAY_LEN(members));
+    }
+    else {
+      mrb_raisef(mrb, E_TYPE_ERROR,
+                 "struct size differs (%i required %i given)",
+                 RARRAY_LEN(members), RSTRUCT_LEN(s));
+    }
+  }
+  return members;
+}
+
+static mrb_value
+mrb_struct_s_members_m(mrb_state *mrb, mrb_value klass)
+{
+  mrb_value members, ary;
+
+  members = struct_s_members(mrb, mrb_class_ptr(klass));
+  ary = mrb_ary_new_capa(mrb, RARRAY_LEN(members));
+  mrb_ary_replace(mrb, ary, members);
+  return ary;
+}
+
+static void
+mrb_struct_modify(mrb_state *mrb, mrb_value strct)
+{
+  mrb_check_frozen(mrb, mrb_basic_ptr(strct));
+  mrb_write_barrier(mrb, mrb_basic_ptr(strct));
+}
+
+/* 15.2.18.4.6  */
+/*
+ *  call-seq:
+ *     struct.members    -> array
+ *
+ *  Returns an array of strings representing the names of the instance
+ *  variables.
+ *
+ *     Customer = Struct.new(:name, :address, :zip)
+ *     joe = Customer.new("Joe Smith", "123 Maple, Anytown NC", 12345)
+ *     joe.members   #=> [:name, :address, :zip]
+ */
+
+static mrb_value
+mrb_struct_members(mrb_state *mrb, mrb_value obj)
+{
+  return mrb_struct_s_members_m(mrb, mrb_obj_value(mrb_obj_class(mrb, obj)));
+}
+
+static mrb_value
+mrb_struct_ref(mrb_state *mrb, mrb_value obj)
+{
+  mrb_int i = mrb_fixnum(mrb_proc_cfunc_env_get(mrb, 0));
+  mrb_value *ptr = RSTRUCT_PTR(obj);
+
+  if (!ptr) return mrb_nil_value();
+  return ptr[i];
+}
+
+static mrb_sym
+mrb_id_attrset(mrb_state *mrb, mrb_sym id)
+{
+#define ONSTACK_ALLOC_MAX 32
+#define ONSTACK_STRLEN_MAX (ONSTACK_ALLOC_MAX - 1) /* '=' character */
+
+  const char *name;
+  char *buf;
+  mrb_int len;
+  mrb_sym mid;
+  char onstack[ONSTACK_ALLOC_MAX];
+
+  name = mrb_sym_name_len(mrb, id, &len);
+  if (len > ONSTACK_STRLEN_MAX) {
+    buf = (char *)mrb_malloc(mrb, (size_t)len+1);
+  }
+  else {
+    buf = onstack;
+  }
+  memcpy(buf, name, (size_t)len);
+  buf[len] = '=';
+
+  mid = mrb_intern(mrb, buf, len+1);
+  if (buf != onstack) {
+    mrb_free(mrb, buf);
+  }
+  return mid;
+}
+
+static mrb_value
+mrb_struct_set_m(mrb_state *mrb, mrb_value obj)
+{
+  mrb_int i = mrb_fixnum(mrb_proc_cfunc_env_get(mrb, 0));
+  mrb_value *ptr;
+  mrb_value val;
+
+  mrb_get_args(mrb, "o", &val);
+  mrb_struct_modify(mrb, obj);
+  ptr = RSTRUCT_PTR(obj);
+  if (ptr == NULL || i >= RSTRUCT_LEN(obj)) {
+    mrb_ary_set(mrb, obj, i, val);
+  }
+  else {
+    ptr[i] = val;
+  }
+  return val;
+}
+
+static void
+make_struct_define_accessors(mrb_state *mrb, mrb_value members, struct RClass *c)
+{
+  const mrb_value *ptr_members = RARRAY_PTR(members);
+  mrb_int i;
+  mrb_int len = RARRAY_LEN(members);
+  int ai = mrb_gc_arena_save(mrb);
+
+  for (i=0; i<len; i++) {
+    mrb_sym id = mrb_symbol(ptr_members[i]);
+    mrb_method_t m;
+    mrb_value at = mrb_fixnum_value(i);
+    struct RProc *aref = mrb_proc_new_cfunc_with_env(mrb, mrb_struct_ref, 1, &at);
+    struct RProc *aset = mrb_proc_new_cfunc_with_env(mrb, mrb_struct_set_m, 1, &at);
+    MRB_METHOD_FROM_PROC(m, aref);
+    mrb_define_method_raw(mrb, c, id, m);
+    MRB_METHOD_FROM_PROC(m, aset);
+    mrb_define_method_raw(mrb, c, mrb_id_attrset(mrb, id), m);
+    mrb_gc_arena_restore(mrb, ai);
+  }
+}
+
+static mrb_value
+make_struct(mrb_state *mrb, mrb_value name, mrb_value members, struct RClass *klass)
+{
+  mrb_value nstr;
+  mrb_sym id;
+  struct RClass *c;
+
+  if (mrb_nil_p(name)) {
+    c = mrb_class_new(mrb, klass);
+  }
+  else {
+    /* old style: should we warn? */
+    mrb_to_str(mrb, name);
+    id = mrb_obj_to_sym(mrb, name);
+    if (!mrb_const_name_p(mrb, RSTRING_PTR(name), RSTRING_LEN(name))) {
+      mrb_name_error(mrb, id, "identifier %v needs to be constant", name);
+    }
+    if (mrb_const_defined_at(mrb, mrb_obj_value(klass), id)) {
+      mrb_warn(mrb, "redefining constant Struct::%v", name);
+      mrb_const_remove(mrb, mrb_obj_value(klass), id);
+    }
+    c = mrb_define_class_under(mrb, klass, RSTRING_PTR(name), klass);
+  }
+  MRB_SET_INSTANCE_TT(c, MRB_TT_ARRAY);
+  nstr = mrb_obj_value(c);
+  mrb_iv_set(mrb, nstr, mrb_intern_lit(mrb, "__members__"), members);
+
+  mrb_define_class_method(mrb, c, "new", mrb_instance_new, MRB_ARGS_ANY());
+  mrb_define_class_method(mrb, c, "[]", mrb_instance_new, MRB_ARGS_ANY());
+  mrb_define_class_method(mrb, c, "members", mrb_struct_s_members_m, MRB_ARGS_NONE());
+  /* RSTRUCT(nstr)->basic.c->super = c->c; */
+  make_struct_define_accessors(mrb, members, c);
+  return nstr;
+}
+
+/* 15.2.18.3.1  */
+/*
+ *  call-seq:
+ *     Struct.new( [aString] [, aSym]+> )    -> StructClass
+ *     StructClass.new(arg, ...)             -> obj
+ *     StructClass[arg, ...]                 -> obj
+ *
+ *  Creates a new class, named by <i>aString</i>, containing accessor
+ *  methods for the given symbols. If the name <i>aString</i> is
+ *  omitted, an anonymous structure class will be created. Otherwise,
+ *  the name of this struct will appear as a constant in class
+ *  <code>Struct</code>, so it must be unique for all
+ *  <code>Struct</code>s in the system and should start with a capital
+ *  letter. Assigning a structure class to a constant effectively gives
+ *  the class the name of the constant.
+ *
+ *  <code>Struct::new</code> returns a new <code>Class</code> object,
+ *  which can then be used to create specific instances of the new
+ *  structure. The number of actual parameters must be
+ *  less than or equal to the number of attributes defined for this
+ *  class; unset parameters default to <code>nil</code>.  Passing too many
+ *  parameters will raise an <code>ArgumentError</code>.
+ *
+ *  The remaining methods listed in this section (class and instance)
+ *  are defined for this generated class.
+ *
+ *     # Create a structure with a name in Struct
+ *     Struct.new("Customer", :name, :address)    #=> Struct::Customer
+ *     Struct::Customer.new("Dave", "123 Main")   #=> #<struct Struct::Customer name="Dave", address="123 Main">
+ *
+ *     # Create a structure named by its constant
+ *     Customer = Struct.new(:name, :address)     #=> Customer
+ *     Customer.new("Dave", "123 Main")           #=> #<struct Customer name="Dave", address="123 Main">
+ */
+static mrb_value
+mrb_struct_s_def(mrb_state *mrb, mrb_value klass)
+{
+  mrb_value name, rest;
+  mrb_value *pargv;
+  mrb_int argcnt;
+  mrb_int i;
+  mrb_value b, st;
+  mrb_sym id;
+  mrb_value *argv;
+  mrb_int argc;
+
+  name = mrb_nil_value();
+  mrb_get_args(mrb, "*&", &argv, &argc, &b);
+  if (argc == 0) { /* special case to avoid crash */
+    mrb_argnum_error(mrb, argc, 1, -1);
+  }
+  else {
+    pargv = argv;
+    argcnt = argc;
+    if (argc > 0) {
+      name = argv[0];
+      if (mrb_symbol_p(name)) {
+        /* 1stArgument:symbol -> name=nil rest=argv[0..n] */
+        name = mrb_nil_value();
+      }
+      else {
+        pargv++;
+        argcnt--;
+      }
+    }
+    rest = mrb_ary_new_from_values(mrb, argcnt, pargv);
+    for (i=0; i<argcnt; i++) {
+      id = mrb_obj_to_sym(mrb, RARRAY_PTR(rest)[i]);
+      mrb_ary_set(mrb, rest, i, mrb_symbol_value(id));
+    }
+    st = make_struct(mrb, name, rest, mrb_class_ptr(klass));
+    if (!mrb_nil_p(b)) {
+      mrb_yield_with_class(mrb, b, 1, &st, st, mrb_class_ptr(st));
+    }
+
+    return st;
+  }
+  /* not reached */
+  return mrb_nil_value();
+}
+
+static mrb_int
+num_members(mrb_state *mrb, struct RClass *klass)
+{
+  mrb_value members;
+
+  members = struct_ivar_get(mrb, mrb_obj_value(klass), mrb_intern_lit(mrb, "__members__"));
+  if (!mrb_array_p(members)) {
+    mrb_raise(mrb, E_TYPE_ERROR, "broken members");
+  }
+  return RARRAY_LEN(members);
+}
+
+/* 15.2.18.4.8  */
+/*
+ */
+static mrb_value
+mrb_struct_initialize_withArg(mrb_state *mrb, mrb_int argc, mrb_value *argv, mrb_value self)
+{
+  struct RClass *klass = mrb_obj_class(mrb, self);
+  mrb_int i, n;
+
+  n = num_members(mrb, klass);
+  if (n < argc) {
+    mrb_raise(mrb, E_ARGUMENT_ERROR, "struct size differs");
+  }
+
+  for (i = 0; i < argc; i++) {
+    mrb_ary_set(mrb, self, i, argv[i]);
+  }
+  for (i = argc; i < n; i++) {
+    mrb_ary_set(mrb, self, i, mrb_nil_value());
+  }
+  return self;
+}
+
+static mrb_value
+mrb_struct_initialize(mrb_state *mrb, mrb_value self)
+{
+  mrb_value *argv;
+  mrb_int argc;
+
+  mrb_get_args(mrb, "*!", &argv, &argc);
+  return mrb_struct_initialize_withArg(mrb, argc, argv, self);
+}
+
+/* 15.2.18.4.9  */
+/* :nodoc: */
+static mrb_value
+mrb_struct_init_copy(mrb_state *mrb, mrb_value copy)
+{
+  mrb_value s;
+
+  mrb_get_args(mrb, "o", &s);
+
+  if (mrb_obj_equal(mrb, copy, s)) return copy;
+  if (!mrb_obj_is_instance_of(mrb, s, mrb_obj_class(mrb, copy))) {
+    mrb_raise(mrb, E_TYPE_ERROR, "wrong argument class");
+  }
+  if (!mrb_array_p(s)) {
+    mrb_raise(mrb, E_TYPE_ERROR, "corrupted struct");
+  }
+  mrb_ary_replace(mrb, copy, s);
+  return copy;
+}
+
+static mrb_value
+struct_aref_sym(mrb_state *mrb, mrb_value obj, mrb_sym id)
+{
+  mrb_value members, *ptr;
+  const mrb_value *ptr_members;
+  mrb_int i, len;
+
+  members = struct_members(mrb, obj);
+  ptr_members = RARRAY_PTR(members);
+  len = RARRAY_LEN(members);
+  ptr = RSTRUCT_PTR(obj);
+  for (i=0; i<len; i++) {
+    mrb_value slot = ptr_members[i];
+    if (mrb_symbol_p(slot) && mrb_symbol(slot) == id) {
+      return ptr[i];
+    }
+  }
+  mrb_name_error(mrb, id, "no member '%n' in struct", id);
+  return mrb_nil_value();       /* not reached */
+}
+
+static mrb_value
+struct_aref_int(mrb_state *mrb, mrb_value s, mrb_int i)
+{
+  mrb_int idx = i < 0 ? RSTRUCT_LEN(s) + i : i;
+
+  if (idx < 0)
+    mrb_raisef(mrb, E_INDEX_ERROR,
+               "offset %i too small for struct(size:%i)", i, RSTRUCT_LEN(s));
+  if (RSTRUCT_LEN(s) <= idx)
+    mrb_raisef(mrb, E_INDEX_ERROR,
+               "offset %i too large for struct(size:%i)", i, RSTRUCT_LEN(s));
+  return RSTRUCT_PTR(s)[idx];
+}
+
+/* 15.2.18.4.2  */
+/*
+ *  call-seq:
+ *     struct[symbol]    -> anObject
+ *     struct[fixnum]    -> anObject
+ *
+ *  Attribute Reference---Returns the value of the instance variable
+ *  named by <i>symbol</i>, or indexed (0..length-1) by
+ *  <i>fixnum</i>. Will raise <code>NameError</code> if the named
+ *  variable does not exist, or <code>IndexError</code> if the index is
+ *  out of range.
+ *
+ *     Customer = Struct.new(:name, :address, :zip)
+ *     joe = Customer.new("Joe Smith", "123 Maple, Anytown NC", 12345)
+ *
+ *     joe["name"]   #=> "Joe Smith"
+ *     joe[:name]    #=> "Joe Smith"
+ *     joe[0]        #=> "Joe Smith"
+ */
+static mrb_value
+mrb_struct_aref(mrb_state *mrb, mrb_value s)
+{
+  mrb_value idx;
+
+  mrb_get_args(mrb, "o", &idx);
+  if (mrb_string_p(idx)) {
+    mrb_value sym = mrb_check_intern_str(mrb, idx);
+
+    if (mrb_nil_p(sym)) {
+      mrb_name_error(mrb, mrb_intern_str(mrb, idx), "no member '%v' in struct", idx);
+    }
+    idx = sym;
+  }
+  if (mrb_symbol_p(idx)) {
+    return struct_aref_sym(mrb, s, mrb_symbol(idx));
+  }
+  return struct_aref_int(mrb, s, mrb_int(mrb, idx));
+}
+
+static mrb_value
+mrb_struct_aset_sym(mrb_state *mrb, mrb_value s, mrb_sym id, mrb_value val)
+{
+  mrb_value members, *ptr;
+  const mrb_value *ptr_members;
+  mrb_int i, len;
+
+  members = struct_members(mrb, s);
+  len = RARRAY_LEN(members);
+  ptr = RSTRUCT_PTR(s);
+  ptr_members = RARRAY_PTR(members);
+  for (i=0; i<len; i++) {
+    if (mrb_symbol(ptr_members[i]) == id) {
+      mrb_struct_modify(mrb, s);
+      ptr[i] = val;
+      return val;
+    }
+  }
+  mrb_name_error(mrb, id, "no member '%n' in struct", id);
+  return val;                   /* not reach */
+}
+
+/* 15.2.18.4.3  */
+/*
+ *  call-seq:
+ *     struct[symbol] = obj    -> obj
+ *     struct[fixnum] = obj    -> obj
+ *
+ *  Attribute Assignment---Assigns to the instance variable named by
+ *  <i>symbol</i> or <i>fixnum</i> the value <i>obj</i> and
+ *  returns it. Will raise a <code>NameError</code> if the named
+ *  variable does not exist, or an <code>IndexError</code> if the index
+ *  is out of range.
+ *
+ *     Customer = Struct.new(:name, :address, :zip)
+ *     joe = Customer.new("Joe Smith", "123 Maple, Anytown NC", 12345)
+ *
+ *     joe["name"] = "Luke"
+ *     joe[:zip]   = "90210"
+ *
+ *     joe.name   #=> "Luke"
+ *     joe.zip    #=> "90210"
+ */
+
+static mrb_value
+mrb_struct_aset(mrb_state *mrb, mrb_value s)
+{
+  mrb_int i;
+  mrb_value idx;
+  mrb_value val;
+
+  mrb_get_args(mrb, "oo", &idx, &val);
+
+  if (mrb_string_p(idx)) {
+    mrb_value sym = mrb_check_intern_str(mrb, idx);
+
+    if (mrb_nil_p(sym)) {
+      mrb_name_error(mrb, mrb_intern_str(mrb, idx), "no member '%v' in struct", idx);
+    }
+    idx = sym;
+  }
+  if (mrb_symbol_p(idx)) {
+    return mrb_struct_aset_sym(mrb, s, mrb_symbol(idx), val);
+  }
+
+  i = mrb_int(mrb, idx);
+  if (i < 0) i = RSTRUCT_LEN(s) + i;
+  if (i < 0) {
+    mrb_raisef(mrb, E_INDEX_ERROR,
+               "offset %i too small for struct(size:%i)", i, RSTRUCT_LEN(s));
+  }
+  if (RSTRUCT_LEN(s) <= i) {
+    mrb_raisef(mrb, E_INDEX_ERROR,
+               "offset %i too large for struct(size:%i)", i, RSTRUCT_LEN(s));
+  }
+  mrb_struct_modify(mrb, s);
+  return RSTRUCT_PTR(s)[i] = val;
+}
+
+/* 15.2.18.4.1  */
+/*
+ *  call-seq:
+ *     struct == other_struct     -> true or false
+ *
+ *  Equality---Returns <code>true</code> if <i>other_struct</i> is
+ *  equal to this one: they must be of the same class as generated by
+ *  <code>Struct::new</code>, and the values of all instance variables
+ *  must be equal (according to <code>Object#==</code>).
+ *
+ *     Customer = Struct.new(:name, :address, :zip)
+ *     joe   = Customer.new("Joe Smith", "123 Maple, Anytown NC", 12345)
+ *     joejr = Customer.new("Joe Smith", "123 Maple, Anytown NC", 12345)
+ *     jane  = Customer.new("Jane Doe", "456 Elm, Anytown NC", 12345)
+ *     joe == joejr   #=> true
+ *     joe == jane    #=> false
+ */
+
+static mrb_value
+mrb_struct_equal(mrb_state *mrb, mrb_value s)
+{
+  mrb_value s2;
+  mrb_value *ptr, *ptr2;
+  mrb_int i, len;
+
+  mrb_get_args(mrb, "o", &s2);
+  if (mrb_obj_equal(mrb, s, s2)) {
+    return mrb_true_value();
+  }
+  if (mrb_obj_class(mrb, s) != mrb_obj_class(mrb, s2)) {
+    return mrb_false_value();
+  }
+  if (RSTRUCT_LEN(s) != RSTRUCT_LEN(s2)) {
+    mrb_bug(mrb, "inconsistent struct"); /* should never happen */
+  }
+  ptr = RSTRUCT_PTR(s);
+  ptr2 = RSTRUCT_PTR(s2);
+  len = RSTRUCT_LEN(s);
+  for (i=0; i<len; i++) {
+    if (!mrb_equal(mrb, ptr[i], ptr2[i])) {
+      return mrb_false_value();
+    }
+  }
+
+  return mrb_true_value();
+}
+
+/* 15.2.18.4.12(x)  */
+/*
+ * code-seq:
+ *   struct.eql?(other)   -> true or false
+ *
+ * Two structures are equal if they are the same object, or if all their
+ * fields are equal (using <code>eql?</code>).
+ */
+static mrb_value
+mrb_struct_eql(mrb_state *mrb, mrb_value s)
+{
+  mrb_value s2;
+  mrb_value *ptr, *ptr2;
+  mrb_int i, len;
+
+  mrb_get_args(mrb, "o", &s2);
+  if (mrb_obj_equal(mrb, s, s2)) {
+    return mrb_true_value();
+  }
+  if (mrb_obj_class(mrb, s) != mrb_obj_class(mrb, s2)) {
+    return mrb_false_value();
+  }
+  if (RSTRUCT_LEN(s) != RSTRUCT_LEN(s2)) {
+    mrb_bug(mrb, "inconsistent struct"); /* should never happen */
+  }
+  ptr = RSTRUCT_PTR(s);
+  ptr2 = RSTRUCT_PTR(s2);
+  len = RSTRUCT_LEN(s);
+  for (i=0; i<len; i++) {
+    if (!mrb_eql(mrb, ptr[i], ptr2[i])) {
+      return mrb_false_value();
+    }
+  }
+
+  return mrb_true_value();
+}
+
+/*
+ * call-seq:
+ *    struct.length   -> Fixnum
+ *    struct.size     -> Fixnum
+ *
+ * Returns number of struct members.
+ */
+static mrb_value
+mrb_struct_len(mrb_state *mrb, mrb_value self)
+{
+  return mrb_fixnum_value(RSTRUCT_LEN(self));
+}
+
+/*
+ * call-seq:
+ *    struct.to_a    -> array
+ *    struct.values  -> array
+ *
+ * Create an array from struct values.
+ */
+static mrb_value
+mrb_struct_to_a(mrb_state *mrb, mrb_value self)
+{
+  return mrb_ary_new_from_values(mrb, RSTRUCT_LEN(self), RSTRUCT_PTR(self));
+}
+
+/*
+ * call-seq:
+ *    struct.to_h -> hash
+ *
+ * Create a hash from member names and struct values.
+ */
+static mrb_value
+mrb_struct_to_h(mrb_state *mrb, mrb_value self)
+{
+  mrb_value members, ret;
+  mrb_int i;
+
+  members = struct_members(mrb, self);
+  ret = mrb_hash_new_capa(mrb, RARRAY_LEN(members));
+
+  for (i = 0; i < RARRAY_LEN(members); ++i) {
+    mrb_hash_set(mrb, ret, RARRAY_PTR(members)[i], RSTRUCT_PTR(self)[i]);
+  }
+
+  return ret;
+}
+
+static mrb_value
+mrb_struct_values_at(mrb_state *mrb, mrb_value self)
+{
+  mrb_int argc;
+  mrb_value *argv;
+
+  mrb_get_args(mrb, "*", &argv, &argc);
+
+  return mrb_get_values_at(mrb, self, RSTRUCT_LEN(self), argc, argv, struct_aref_int);
+}
+
+/*
+ *  A <code>Struct</code> is a convenient way to bundle a number of
+ *  attributes together, using accessor methods, without having to write
+ *  an explicit class.
+ *
+ *  The <code>Struct</code> class is a generator of specific classes,
+ *  each one of which is defined to hold a set of variables and their
+ *  accessors. In these examples, we'll call the generated class
+ *  "<i>Customer</i>Class," and we'll show an example instance of that
+ *  class as "<i>Customer</i>Inst."
+ *
+ *  In the descriptions that follow, the parameter <i>symbol</i> refers
+ *  to a symbol, which is either a quoted string or a
+ *  <code>Symbol</code> (such as <code>:name</code>).
+ */
+void
+mrb_mruby_struct_gem_init(mrb_state* mrb)
+{
+  struct RClass *st;
+  st = mrb_define_class(mrb, "Struct",  mrb->object_class);
+  MRB_SET_INSTANCE_TT(st, MRB_TT_ARRAY);
+
+  mrb_define_class_method(mrb, st, "new",             mrb_struct_s_def,       MRB_ARGS_ANY());  /* 15.2.18.3.1  */
+
+  mrb_define_method(mrb, st,       "==",              mrb_struct_equal,       MRB_ARGS_REQ(1)); /* 15.2.18.4.1  */
+  mrb_define_method(mrb, st,       "[]",              mrb_struct_aref,        MRB_ARGS_REQ(1)); /* 15.2.18.4.2  */
+  mrb_define_method(mrb, st,       "[]=",             mrb_struct_aset,        MRB_ARGS_REQ(2)); /* 15.2.18.4.3  */
+  mrb_define_method(mrb, st,       "members",         mrb_struct_members,     MRB_ARGS_NONE()); /* 15.2.18.4.6  */
+  mrb_define_method(mrb, st,       "initialize",      mrb_struct_initialize,  MRB_ARGS_ANY());  /* 15.2.18.4.8  */
+  mrb_define_method(mrb, st,       "initialize_copy", mrb_struct_init_copy,   MRB_ARGS_REQ(1)); /* 15.2.18.4.9  */
+  mrb_define_method(mrb, st,       "eql?",            mrb_struct_eql,         MRB_ARGS_REQ(1)); /* 15.2.18.4.12(x)  */
+
+  mrb_define_method(mrb, st,        "size",           mrb_struct_len,         MRB_ARGS_NONE());
+  mrb_define_method(mrb, st,        "length",         mrb_struct_len,         MRB_ARGS_NONE());
+  mrb_define_method(mrb, st,        "to_a",           mrb_struct_to_a,        MRB_ARGS_NONE());
+  mrb_define_method(mrb, st,        "values",         mrb_struct_to_a,        MRB_ARGS_NONE());
+  mrb_define_method(mrb, st,        "to_h",           mrb_struct_to_h,        MRB_ARGS_NONE());
+  mrb_define_method(mrb, st,        "values_at",      mrb_struct_values_at,   MRB_ARGS_ANY());
+}
+
+void
+mrb_mruby_struct_gem_final(mrb_state* mrb)
+{
+}
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-struct/test/struct.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-struct/test/struct.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-struct/test/struct.rb	(revision 439)
@@ -0,0 +1,210 @@
+##
+# Struct ISO Test
+
+assert('Struct', '15.2.18') do
+  assert_equal Class, Struct.class
+end
+
+assert('Struct.new', '15.2.18.3.1') do
+  c = Struct.new(:m1, :m2)
+  assert_equal Struct, c.superclass
+  assert_equal [:m1, :m2], c.members
+end
+
+assert('Struct#==', '15.2.18.4.1') do
+  c = Struct.new(:m1, :m2)
+  cc1 = c.new(1,2)
+  cc2 = c.new(1,2)
+  assert_true cc1 == cc2
+
+  Struct.new(:m1, :m2) { def foo; end }
+  assert_raise(NoMethodError) { Struct.new(:m1).new.foo }
+end
+
+assert('Struct#[]', '15.2.18.4.2') do
+  c = Struct.new(:m1, :m2)
+  cc = c.new(1,2)
+  assert_equal 1, cc[:m1]
+  assert_equal 2, cc["m2"]
+  assert_equal 1, cc[0]
+  assert_equal 2, cc[-1]
+  assert_raise(TypeError) { cc[[]] }
+  assert_raise(IndexError) { cc[2] }
+  assert_raise(NameError) { cc['tama'] }
+end
+
+assert('Struct#[]=', '15.2.18.4.3') do
+  c = Struct.new(:m1, :m2)
+  cc = c.new(1,2)
+  cc[:m1] = 3
+  assert_equal 3, cc[:m1]
+  cc["m2"] = 3
+  assert_equal 3, cc["m2"]
+  cc[0] = 4
+  assert_equal 4, cc[0]
+  cc[-1] = 5
+  assert_equal 5, cc[-1]
+  assert_raise(TypeError) { cc[[]] = 3 }
+  assert_raise(IndexError) { cc[2] = 7 }
+  assert_raise(NameError) { cc['pochi'] = 8 }
+end
+
+assert('Struct#each', '15.2.18.4.4') do
+  c = Struct.new(:m1, :m2)
+  cc = c.new(1,2)
+  a = []
+  cc.each{|x|
+    a << x
+  }
+  assert_equal [1, 2], a
+end
+
+assert('Struct#each_pair', '15.2.18.4.5') do
+  c = Struct.new(:m1, :m2)
+  cc = c.new(1,2)
+  a = []
+  cc.each_pair{|k,v|
+    a << [k,v]
+  }
+  assert_equal [[:m1, 1], [:m2, 2]], a
+end
+
+assert('Struct#members', '15.2.18.4.6') do
+  c = Struct.new(:m1, :m2)
+  assert_equal [:m1, :m2], c.new(1,2).members
+end
+
+assert('Struct#select', '15.2.18.4.7') do
+  c = Struct.new(:m1, :m2)
+  assert_equal([2]) { c.new(1,2).select{|v| v % 2 == 0} }
+end
+
+assert('large struct') do
+  c = Struct.new(:m1, :m2, :m3, :m4, :m5, :m6, :m7, :m8, :m9, :m10, :m11, :m12, :m13)
+  cc = c.new(1,2,3,4,5,6,7,8,9,10,11,12,13)
+  assert_equal 1, cc.m1
+  assert_equal 2, cc.m2
+  assert_equal 3, cc.m3
+  assert_equal 4, cc.m4
+  assert_equal 5, cc.m5
+  assert_equal 6, cc.m6
+  assert_equal 7, cc.m7
+  assert_equal 8, cc.m8
+  assert_equal 9, cc.m9
+  assert_equal 10, cc.m10
+  assert_equal 13, cc.m13
+
+  cc.m13 = 'test'
+  assert_equal 'test', cc.m13
+
+  assert_raise(NoMethodError) { cc.m14 }
+end
+
+assert('wrong struct arg count') do
+  c = Struct.new(:m1)
+  assert_raise ArgumentError do
+    cc = c.new(1,2,3)
+  end
+end
+
+assert('struct dup') do
+  c = Struct.new(:m1, :m2, :m3, :m4, :m5)
+  cc = c.new(1,2,3,4,5)
+  assert_nothing_raised {
+    assert_equal(cc, cc.dup)
+  }
+end
+
+assert('struct inspect') do
+  c = Struct.new(:m1, :m2, :m3, :m4, :m5, :recur)
+  cc = c.new(1,2,3,4,5,nil)
+  cc.recur = cc
+  assert_equal "#<struct m1=1, m2=2, m3=3, m4=4, m5=5, recur=#<struct #{cc.class}:...>>", cc.inspect
+end
+
+assert('Struct#length, Struct#size') do
+  s = Struct.new(:f1, :f2).new(0, 1)
+  assert_equal 2, s.size
+  assert_equal 2, s.length
+end
+
+assert('Struct#to_a, Struct#values') do
+  s = Struct.new(:mem1, :mem2).new('a', 'b')
+  assert_equal ['a', 'b'], s.to_a
+  assert_equal ['a', 'b'], s.values
+end
+
+assert('Struct#to_h') do
+  s = Struct.new(:white, :red, :green).new('ruuko', 'yuzuki', 'hitoe')
+  assert_equal(:white => 'ruuko', :red => 'yuzuki', :green => 'hitoe') { s.to_h }
+end
+
+assert('Struct#values_at') do
+  a = Struct.new(:blue, :purple).new('aki', 'io')
+  assert_equal ['aki'], a.values_at(0)
+  assert_equal ['io', 'aki'], a.values_at(1, 0)
+  assert_raise(IndexError) { a.values_at 2 }
+end
+
+assert("Struct#dig") do
+  a = Struct.new(:blue, :purple).new('aki', Struct.new(:red).new(1))
+  assert_equal 'aki', a.dig(:blue)
+  assert_equal 1, a.dig(:purple, :red)
+  assert_equal 1, a.dig(1, 0)
+end
+
+# TODO: suppress redefining Struct warning during test
+# assert("Struct.new removes existing constant") do
+#   begin
+#     assert_not_equal Struct.new("Test", :a), Struct.new("Test", :a, :b)
+#   ensure
+#     Struct.remove_const :Test
+#   end
+# end
+
+assert("Struct#initialize_copy requires struct to be the same type") do
+  begin
+    Struct.new("Test", :a)
+    a = Struct::Test.new("a")
+    Struct.remove_const :Test
+    Struct.new("Test", :a, :b)
+    assert_raise(TypeError) do
+      a.initialize_copy(Struct::Test.new("a", "b"))
+    end
+  ensure
+    Struct.remove_const :Test
+  end
+end
+
+assert("Struct.new does not allow array") do
+  assert_raise(TypeError) do
+    Struct.new("Test", [:a])
+  end
+end
+
+assert("Struct.new does not allow invalid class name") do
+  assert_raise(NameError) { Struct.new("Test-", :a) }
+end
+
+assert("Struct.new generates subclass of Struct") do
+  begin
+    original_struct = Struct
+    Struct = String
+    assert_equal original_struct, original_struct.new(:foo).superclass
+  ensure
+    Struct = original_struct
+  end
+end
+
+assert 'Struct#freeze' do
+  c = Struct.new :m
+
+  o = c.new
+  o.m = :test
+  assert_equal :test, o.m
+
+  o.freeze
+  assert_raise(FrozenError) { o.m = :modify }
+  assert_raise(FrozenError) { o[:m] = :modify }
+  assert_equal :test, o.m
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-symbol-ext/mrbgem.rake
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-symbol-ext/mrbgem.rake	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-symbol-ext/mrbgem.rake	(revision 439)
@@ -0,0 +1,5 @@
+MRuby::Gem::Specification.new('mruby-symbol-ext') do |spec|
+  spec.license = 'MIT'
+  spec.author  = 'mruby developers'
+  spec.summary = 'Symbol class extension'
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-symbol-ext/mrblib/symbol.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-symbol-ext/mrblib/symbol.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-symbol-ext/mrblib/symbol.rb	(revision 439)
@@ -0,0 +1,72 @@
+class Symbol
+  include Comparable
+
+  alias intern to_sym
+
+  ##
+  # call-seq:
+  #   sym.capitalize  -> symbol
+  #
+  # Same as <code>sym.to_s.capitalize.intern</code>.
+
+  def capitalize
+    (self.to_s.capitalize! || self).to_sym
+  end
+
+  ##
+  # call-seq:
+  #   sym.downcase  -> symbol
+  #
+  # Same as <code>sym.to_s.downcase.intern</code>.
+
+  def downcase
+    (self.to_s.downcase! || self).to_sym
+  end
+
+  ##
+  # call-seq:
+  #   sym.upcase    -> symbol
+  #
+  # Same as <code>sym.to_s.upcase.intern</code>.
+
+  def upcase
+    (self.to_s.upcase! || self).to_sym
+  end
+
+  ##
+  # call-seq:
+  #   sym.casecmp(other)  -> -1, 0, +1 or nil
+  #
+  # Case-insensitive version of <code>Symbol#<=></code>.
+
+  def casecmp(other)
+    return nil unless other.kind_of?(Symbol)
+    lhs =  self.to_s; lhs.upcase!
+    rhs = other.to_s.upcase
+    lhs <=> rhs
+  end
+
+  ##
+  # call-seq:
+  #   sym.casecmp?(other)  -> true, false, or nil
+  #
+  # Returns true if sym and other_sym are equal after case folding,
+  # false if they are not equal, and nil if other_sym is not a string.
+
+  def casecmp?(sym)
+    c = self.casecmp(sym)
+    return nil if c.nil?
+    return c == 0
+  end
+
+  #
+  # call-seq:
+  #   sym.empty?   -> true or false
+  #
+  # Returns that _sym_ is :"" or not.
+
+  def empty?
+    self.length == 0
+  end
+
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-symbol-ext/src/symbol.c
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-symbol-ext/src/symbol.c	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-symbol-ext/src/symbol.c	(revision 439)
@@ -0,0 +1,71 @@
+#include <mruby.h>
+#include <mruby/khash.h>
+#include <mruby/array.h>
+#include <mruby/string.h>
+
+/*
+ *  call-seq:
+ *     Symbol.all_symbols    => array
+ *
+ *  Returns an array of all the symbols currently in Ruby's symbol
+ *  table.
+ *
+ *     Symbol.all_symbols.size    #=> 903
+ *     Symbol.all_symbols[1,20]   #=> [:floor, :ARGV, :Binding, :symlink,
+ *                                     :chown, :EOFError, :$;, :String,
+ *                                     :LOCK_SH, :"setuid?", :$<,
+ *                                     :default_proc, :compact, :extend,
+ *                                     :Tms, :getwd, :$=, :ThreadGroup,
+ *                                     :wait2, :$>]
+ */
+#ifdef MRB_ENABLE_ALL_SYMBOLS
+static mrb_value
+mrb_sym_all_symbols(mrb_state *mrb, mrb_value self)
+{
+  mrb_sym i, lim;
+  mrb_value ary = mrb_ary_new_capa(mrb, mrb->symidx);
+
+  for (i=1, lim=mrb->symidx+1; i<lim; i++) {
+    mrb_sym sym = i<<1;
+    mrb_ary_push(mrb, ary, mrb_symbol_value(sym));
+  }
+
+  return ary;
+}
+#endif
+
+/*
+ * call-seq:
+ *   sym.length    -> integer
+ *
+ * Same as <code>sym.to_s.length</code>.
+ */
+static mrb_value
+mrb_sym_length(mrb_state *mrb, mrb_value self)
+{
+  mrb_int len;
+#ifdef MRB_UTF8_STRING
+  mrb_int byte_len;
+  const char *name = mrb_sym_name_len(mrb, mrb_symbol(self), &byte_len);
+  len = mrb_utf8_strlen(name, byte_len);
+#else
+  mrb_sym_name_len(mrb, mrb_symbol(self), &len);
+#endif
+  return mrb_fixnum_value(len);
+}
+
+void
+mrb_mruby_symbol_ext_gem_init(mrb_state* mrb)
+{
+  struct RClass *s = mrb->symbol_class;
+#ifdef MRB_ENABLE_ALL_SYMBOLS
+  mrb_define_class_method(mrb, s, "all_symbols", mrb_sym_all_symbols, MRB_ARGS_NONE());
+#endif
+  mrb_define_method(mrb, s, "length", mrb_sym_length, MRB_ARGS_NONE());
+  mrb_define_method(mrb, s, "size", mrb_sym_length, MRB_ARGS_NONE());
+}
+
+void
+mrb_mruby_symbol_ext_gem_final(mrb_state* mrb)
+{
+}
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-symbol-ext/test/symbol.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-symbol-ext/test/symbol.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-symbol-ext/test/symbol.rb	(revision 439)
@@ -0,0 +1,56 @@
+# coding: utf-8
+##
+# Symbol(Ext) Test
+
+if Symbol.respond_to?(:all_symbols)
+  assert('Symbol.all_symbols') do
+    foo = [:__symbol_test_1, :__symbol_test_2, :__symbol_test_3].sort
+    symbols = Symbol.all_symbols.select{|sym|sym.to_s.include? '__symbol_test'}.sort
+    assert_equal foo, symbols
+  end
+end
+
+%w[size length].each do |n|
+  assert("Symbol##{n}") do
+    assert_equal 5, :hello.__send__(n)
+    assert_equal 4, :"aA\0b".__send__(n)
+    if __ENCODING__ == "UTF-8"
+      assert_equal 8, :"こんにちは世界!".__send__(n)
+      assert_equal 4, :"aあ\0b".__send__(n)
+    else
+      assert_equal 22, :"こんにちは世界!".__send__(n)
+      assert_equal 6, :"aあ\0b".__send__(n)
+    end
+  end
+end
+
+assert("Symbol#capitalize") do
+  assert_equal :Hello, :hello.capitalize
+  assert_equal :Hello, :HELLO.capitalize
+  assert_equal :Hello, :Hello.capitalize
+end
+
+assert("Symbol#downcase") do
+  assert_equal :hello, :hEllO.downcase
+  assert_equal :hello, :hello.downcase
+end
+
+assert("Symbol#upcase") do
+  assert_equal :HELLO, :hEllO.upcase
+  assert_equal :HELLO, :HELLO.upcase
+end
+
+assert("Symbol#casecmp") do
+  assert_equal 0, :HELLO.casecmp(:hEllO)
+  assert_equal 1, :HELLO.casecmp(:hEllN)
+  assert_equal(-1, :HELLO.casecmp(:hEllP))
+  assert_nil :HELLO.casecmp("hEllO")
+end
+
+assert("Symbol#empty?") do
+  assert_true :''.empty?
+end
+
+assert('Symbol#intern') do
+  assert_equal :test, :test.intern
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-test/README.md
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-test/README.md	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-test/README.md	(revision 439)
@@ -0,0 +1,7 @@
+Running Tests
+=============
+
+To run the tests, execute the following from the project's root directory.
+
+    $ make test
+
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-test/driver.c
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-test/driver.c	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-test/driver.c	(revision 439)
@@ -0,0 +1,309 @@
+/*
+** mrbtest - Test for Embeddable Ruby
+**
+** This program runs Ruby test programs in test/t directory
+** against the current mruby implementation.
+*/
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <mruby.h>
+#include <mruby/proc.h>
+#include <mruby/data.h>
+#include <mruby/compile.h>
+#include <mruby/string.h>
+#include <mruby/variable.h>
+#include <mruby/array.h>
+
+extern const uint8_t mrbtest_assert_irep[];
+
+void mrbgemtest_init(mrb_state* mrb);
+void mrb_init_test_vformat(mrb_state* mrb);
+
+/* Print a short remark for the user */
+static void
+print_hint(void)
+{
+  printf("mrbtest - Embeddable Ruby Test\n\n");
+}
+
+static int
+eval_test(mrb_state *mrb)
+{
+  /* evaluate the test */
+  mrb_value result = mrb_funcall(mrb, mrb_top_self(mrb), "report", 0);
+  /* did an exception occur? */
+  if (mrb->exc) {
+    mrb_print_error(mrb);
+    mrb->exc = 0;
+    return EXIT_FAILURE;
+  }
+  else {
+    return mrb_bool(result) ? EXIT_SUCCESS : EXIT_FAILURE;
+  }
+}
+
+/* Implementation of print due to the reason that there might be no print */
+static mrb_value
+t_print(mrb_state *mrb, mrb_value self)
+{
+  mrb_value *argv;
+  mrb_int argc;
+  mrb_int i;
+
+  mrb_get_args(mrb, "*!", &argv, &argc);
+  for (i = 0; i < argc; ++i) {
+    mrb_value s = mrb_obj_as_string(mrb, argv[i]);
+    fwrite(RSTRING_PTR(s), RSTRING_LEN(s), 1, stdout);
+  }
+  fflush(stdout);
+
+  return mrb_nil_value();
+}
+
+#define UNESCAPE(p, endp) ((p) != (endp) && *(p) == '\\' ? (p)+1 : (p))
+#define CHAR_CMP(c1, c2) ((unsigned char)(c1) - (unsigned char)(c2))
+
+static const char *
+str_match_bracket(const char *p, const char *pat_end,
+                  const char *s, const char *str_end)
+{
+  mrb_bool ok = FALSE, negated = FALSE;
+
+  if (p == pat_end) return NULL;
+  if (*p == '!' || *p == '^') {
+    negated = TRUE;
+    ++p;
+  }
+
+  while (*p != ']') {
+    const char *t1 = p;
+    if ((t1 = UNESCAPE(t1, pat_end)) == pat_end) return NULL;
+    if ((p = t1 + 1) == pat_end) return NULL;
+    if (p[0] == '-' && p[1] != ']') {
+      const char *t2 = p + 1;
+      if ((t2 = UNESCAPE(t2, pat_end)) == pat_end) return NULL;
+      p = t2 + 1;
+      if (!ok && CHAR_CMP(*t1, *s) <= 0 && CHAR_CMP(*s, *t2) <= 0) ok = TRUE;
+    }
+    else {
+      if (!ok && CHAR_CMP(*t1, *s) == 0) ok = TRUE;
+    }
+  }
+
+  return ok == negated ? NULL : p + 1;
+}
+
+static mrb_bool
+str_match_no_brace_p(const char *pat, mrb_int pat_len,
+                     const char *str, mrb_int str_len)
+{
+  const char *p = pat, *s = str;
+  const char *pat_end = pat + pat_len, *str_end = str + str_len;
+  const char *p_tmp = NULL, *s_tmp = NULL;
+
+  for (;;) {
+    if (p == pat_end) return s == str_end;
+    switch (*p) {
+      case '*':
+        do { ++p; } while (p != pat_end && *p == '*');
+        if (UNESCAPE(p, pat_end) == pat_end) return TRUE;
+        if (s == str_end) return FALSE;
+        p_tmp = p;
+        s_tmp = s;
+        continue;
+      case '?':
+        if (s == str_end) return FALSE;
+        ++p;
+        ++s;
+        continue;
+      case '[': {
+        const char *t;
+        if (s == str_end) return FALSE;
+        if ((t = str_match_bracket(p+1, pat_end, s, str_end))) {
+          p = t;
+          ++s;
+          continue;
+        }
+        goto L_failed;
+      }
+    }
+
+    /* ordinary */
+    p = UNESCAPE(p, pat_end);
+    if (s == str_end) return p == pat_end;
+    if (p == pat_end) goto L_failed;
+    if (*p++ != *s++) goto L_failed;
+    continue;
+
+    L_failed:
+    if (p_tmp && s_tmp) {
+      /* try next '*' position */
+      p = p_tmp;
+      s = ++s_tmp;
+      continue;
+    }
+
+    return FALSE;
+  }
+}
+
+#define COPY_AND_INC(dst, src, len) \
+  do { memcpy(dst, src, len); dst += len; } while (0)
+
+static mrb_bool
+str_match_p(mrb_state *mrb,
+            const char *pat, mrb_int pat_len,
+            const char *str, mrb_int str_len)
+{
+  const char *p = pat, *pat_end = pat + pat_len;
+  const char *lbrace = NULL, *rbrace = NULL;
+  int nest = 0;
+  mrb_bool ret = FALSE;
+
+  for (; p != pat_end; ++p) {
+    if (*p == '{' && nest++ == 0) lbrace = p;
+    else if (*p == '}' && lbrace && --nest == 0) { rbrace = p; break; }
+    else if (*p == '\\' && ++p == pat_end) break;
+  }
+
+  if (lbrace && rbrace) {
+    /* expand brace */
+    char *ex_pat = (char *)mrb_malloc(mrb, pat_len-2);  /* expanded pattern */
+    char *ex_p = ex_pat;
+
+    COPY_AND_INC(ex_p, pat, lbrace-pat);
+    p = lbrace;
+    while (p < rbrace) {
+      char *orig_ex_p = ex_p;
+      const char *t = ++p;
+      for (nest = 0; p < rbrace && !(*p == ',' && nest == 0); ++p) {
+        if (*p == '{') ++nest;
+        else if (*p == '}') --nest;
+        else if (*p == '\\' && ++p == rbrace) break;
+      }
+      COPY_AND_INC(ex_p, t, p-t);
+      COPY_AND_INC(ex_p, rbrace+1, pat_end-rbrace-1);
+      if ((ret = str_match_p(mrb, ex_pat, ex_p-ex_pat, str, str_len))) break;
+      ex_p = orig_ex_p;
+    }
+    mrb_free(mrb, ex_pat);
+  }
+  else if (!lbrace && !rbrace) {
+    ret = str_match_no_brace_p(pat, pat_len, str, str_len);
+  }
+
+  return ret;
+}
+
+static mrb_value
+m_str_match_p(mrb_state *mrb, mrb_value self)
+{
+  const char *pat, *str;
+  mrb_int pat_len, str_len;
+
+  mrb_get_args(mrb, "ss", &pat, &pat_len, &str, &str_len);
+  return mrb_bool_value(str_match_p(mrb, pat, pat_len, str, str_len));
+}
+
+void
+mrb_init_test_driver(mrb_state *mrb, mrb_bool verbose)
+{
+  struct RClass *krn, *mrbtest;
+
+  krn = mrb->kernel_module;
+  mrb_define_method(mrb, krn, "t_print", t_print, MRB_ARGS_ANY());
+  mrb_define_method(mrb, krn, "_str_match?", m_str_match_p, MRB_ARGS_REQ(2));
+
+  mrbtest = mrb_define_module(mrb, "Mrbtest");
+
+  mrb_define_const(mrb, mrbtest, "FIXNUM_MAX", mrb_fixnum_value(MRB_INT_MAX));
+  mrb_define_const(mrb, mrbtest, "FIXNUM_MIN", mrb_fixnum_value(MRB_INT_MIN));
+  mrb_define_const(mrb, mrbtest, "FIXNUM_BIT", mrb_fixnum_value(MRB_INT_BIT));
+
+#ifndef MRB_WITHOUT_FLOAT
+#ifdef MRB_USE_FLOAT
+  mrb_define_const(mrb, mrbtest, "FLOAT_TOLERANCE", mrb_float_value(mrb, 1e-6));
+#else
+  mrb_define_const(mrb, mrbtest, "FLOAT_TOLERANCE", mrb_float_value(mrb, 1e-12));
+#endif
+#endif
+
+  mrb_init_test_vformat(mrb);
+
+  if (verbose) {
+    mrb_gv_set(mrb, mrb_intern_lit(mrb, "$mrbtest_verbose"), mrb_true_value());
+  }
+}
+
+void
+mrb_t_pass_result(mrb_state *mrb_dst, mrb_state *mrb_src)
+{
+  mrb_value res_src;
+
+  if (mrb_src->exc) {
+    mrb_print_error(mrb_src);
+    exit(EXIT_FAILURE);
+  }
+
+#define TEST_COUNT_PASS(name)                                           \
+  do {                                                                  \
+    res_src = mrb_gv_get(mrb_src, mrb_intern_lit(mrb_src, "$" #name));  \
+    if (mrb_fixnum_p(res_src)) {                                        \
+      mrb_value res_dst = mrb_gv_get(mrb_dst, mrb_intern_lit(mrb_dst, "$" #name)); \
+      mrb_gv_set(mrb_dst, mrb_intern_lit(mrb_dst, "$" #name), mrb_fixnum_value(mrb_fixnum(res_dst) + mrb_fixnum(res_src))); \
+    }                                                                   \
+  } while (FALSE)                                                       \
+
+  TEST_COUNT_PASS(ok_test);
+  TEST_COUNT_PASS(ko_test);
+  TEST_COUNT_PASS(kill_test);
+  TEST_COUNT_PASS(warning_test);
+  TEST_COUNT_PASS(skip_test);
+
+#undef TEST_COUNT_PASS
+
+  res_src = mrb_gv_get(mrb_src, mrb_intern_lit(mrb_src, "$asserts"));
+
+  if (mrb_array_p(res_src)) {
+    mrb_int i;
+    mrb_value res_dst = mrb_gv_get(mrb_dst, mrb_intern_lit(mrb_dst, "$asserts"));
+    for (i = 0; i < RARRAY_LEN(res_src); ++i) {
+      mrb_value val_src = RARRAY_PTR(res_src)[i];
+      mrb_ary_push(mrb_dst, res_dst, mrb_str_new(mrb_dst, RSTRING_PTR(val_src), RSTRING_LEN(val_src)));
+    }
+  }
+}
+
+int
+main(int argc, char **argv)
+{
+  mrb_state *mrb;
+  int ret;
+  mrb_bool verbose = FALSE;
+
+  print_hint();
+
+  /* new interpreter instance */
+  mrb = mrb_open();
+  if (mrb == NULL) {
+    fprintf(stderr, "Invalid mrb_state, exiting test driver");
+    return EXIT_FAILURE;
+  }
+
+  if (argc == 2 && argv[1][0] == '-' && argv[1][1] == 'v') {
+    printf("verbose mode: enable\n\n");
+    verbose = TRUE;
+  }
+
+  mrb_init_test_driver(mrb, verbose);
+  mrb_load_irep(mrb, mrbtest_assert_irep);
+  mrbgemtest_init(mrb);
+  ret = eval_test(mrb);
+  mrb_close(mrb);
+
+  return ret;
+}
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-test/mrbgem.rake
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-test/mrbgem.rake	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-test/mrbgem.rake	(revision 439)
@@ -0,0 +1,186 @@
+MRuby::Gem::Specification.new('mruby-test') do |spec|
+  spec.license = 'MIT'
+  spec.author  = 'mruby developers'
+  spec.summary = 'mruby test'
+
+  build.bins << 'mrbtest'
+  spec.add_dependency('mruby-compiler', :core => 'mruby-compiler')
+
+  spec.test_rbfiles = Dir.glob("#{MRUBY_ROOT}/test/t/*.rb")
+
+  clib = "#{build_dir}/mrbtest.c"
+  mlib = clib.ext(exts.object)
+  exec = exefile("#{build.build_dir}/bin/mrbtest")
+
+  mrbtest_lib = libfile("#{build_dir}/mrbtest")
+  mrbtest_objs = []
+
+  driver_objs = Dir.glob("#{dir}/*.{c,cpp,cxx,cc,m,asm,s,S}").map do |f|
+    objfile(f.relative_path_from(dir).to_s.pathmap("#{build_dir}/%X"))
+  end
+
+  assert_c = "#{build_dir}/assert.c"
+  assert_rb = "#{MRUBY_ROOT}/test/assert.rb"
+  assert_lib = assert_c.ext(exts.object)
+  mrbtest_objs << assert_lib
+
+  file assert_lib => assert_c
+  file assert_c => [assert_rb, build.mrbcfile] do |t|
+    open(t.name, 'w') do |f|
+      mrbc.run f, assert_rb, 'mrbtest_assert_irep'
+    end
+  end
+
+  gem_table = build.gems.generate_gem_table build
+
+  build.gems.each do |g|
+    test_rbobj = g.test_rbireps.ext(exts.object)
+    g.test_objs << test_rbobj
+    dep_list = build.gems.tsort_dependencies(g.test_dependencies, gem_table).select(&:generate_functions)
+
+    file test_rbobj => g.test_rbireps
+    file g.test_rbireps => [g.test_rbfiles, build.mrbcfile].flatten do |t|
+      mkdir_p File.dirname(t.name)
+      open(t.name, 'w') do |f|
+        g.print_gem_test_header(f)
+        test_preload = g.test_preload and [g.dir, MRUBY_ROOT].map {|dir|
+          File.expand_path(g.test_preload, dir)
+        }.find {|file| File.exist?(file) }
+
+        f.puts %Q[/*]
+        f.puts %Q[ * This file contains a test code for #{g.name} gem.]
+        f.puts %Q[ *]
+        f.puts %Q[ * IMPORTANT:]
+        f.puts %Q[ *   This file was generated!]
+        f.puts %Q[ *   All manual changes will get lost.]
+        f.puts %Q[ */]
+        if test_preload.nil?
+          f.puts %Q[extern const uint8_t mrbtest_assert_irep[];]
+        else
+          g.build.mrbc.run f, test_preload, "gem_test_irep_#{g.funcname}_preload"
+        end
+        g.test_rbfiles.flatten.each_with_index do |rbfile, i|
+          g.build.mrbc.run f, rbfile, "gem_test_irep_#{g.funcname}_#{i}"
+        end
+        f.puts %Q[void mrb_#{g.funcname}_gem_test(mrb_state *mrb);] unless g.test_objs.empty?
+        dep_list.each do |d|
+          f.puts %Q[void GENERATED_TMP_mrb_#{d.funcname}_gem_init(mrb_state *mrb);]
+          f.puts %Q[void GENERATED_TMP_mrb_#{d.funcname}_gem_final(mrb_state *mrb);]
+        end
+        f.puts %Q[void mrb_init_test_driver(mrb_state *mrb, mrb_bool verbose);]
+        f.puts %Q[void mrb_t_pass_result(mrb_state *dst, mrb_state *src);]
+        f.puts %Q[void GENERATED_TMP_mrb_#{g.funcname}_gem_test(mrb_state *mrb) {]
+        unless g.test_rbfiles.empty?
+          f.puts %Q[  mrb_state *mrb2;]
+          unless g.test_args.empty?
+            f.puts %Q[  mrb_value test_args_hash;]
+          end
+          f.puts %Q[  int ai;]
+          g.test_rbfiles.count.times do |i|
+            f.puts %Q[  ai = mrb_gc_arena_save(mrb);]
+            f.puts %Q[  mrb2 = mrb_open_core(mrb_default_allocf, NULL);]
+            f.puts %Q[  if (mrb2 == NULL) {]
+            f.puts %Q[    fprintf(stderr, "Invalid mrb_state, exiting \%s", __FUNCTION__);]
+            f.puts %Q[    exit(EXIT_FAILURE);]
+            f.puts %Q[  }]
+            dep_list.each do |d|
+              f.puts %Q[  GENERATED_TMP_mrb_#{d.funcname}_gem_init(mrb2);]
+              f.puts %Q[  mrb_state_atexit(mrb2, GENERATED_TMP_mrb_#{d.funcname}_gem_final);]
+            end
+            f.puts %Q[  mrb_init_test_driver(mrb2, mrb_test(mrb_gv_get(mrb, mrb_intern_lit(mrb, "$mrbtest_verbose"))));]
+            if test_preload.nil?
+              f.puts %Q[  mrb_load_irep(mrb2, mrbtest_assert_irep);]
+            else
+              f.puts %Q[  mrb_load_irep(mrb2, gem_test_irep_#{g.funcname}_preload);]
+            end
+            f.puts %Q[  if (mrb2->exc) {]
+            f.puts %Q[    mrb_print_error(mrb2);]
+            f.puts %Q[    mrb_close(mrb2);]
+            f.puts %Q[    exit(EXIT_FAILURE);]
+            f.puts %Q[  }]
+            f.puts %Q[  mrb_const_set(mrb2, mrb_obj_value(mrb2->object_class), mrb_intern_lit(mrb2, "GEMNAME"), mrb_str_new(mrb2, "#{g.name}", #{g.name.length}));]
+
+            unless g.test_args.empty?
+              f.puts %Q[  test_args_hash = mrb_hash_new_capa(mrb, #{g.test_args.length}); ]
+              g.test_args.each do |arg_name, arg_value|
+                escaped_arg_name = arg_name.gsub('\\', '\\\\\\\\').gsub('"', '\"')
+                escaped_arg_value = arg_value.gsub('\\', '\\\\\\\\').gsub('"', '\"')
+                f.puts %Q[  mrb_hash_set(mrb2, test_args_hash, mrb_str_new(mrb2, "#{escaped_arg_name.to_s}", #{escaped_arg_name.to_s.length}), mrb_str_new(mrb2, "#{escaped_arg_value.to_s}", #{escaped_arg_value.to_s.length})); ]
+              end
+              f.puts %Q[  mrb_const_set(mrb2, mrb_obj_value(mrb2->object_class), mrb_intern_lit(mrb2, "TEST_ARGS"), test_args_hash); ]
+            end
+
+            f.puts %Q[  mrb_#{g.funcname}_gem_test(mrb2);] if g.custom_test_init?
+
+            f.puts %Q[  mrb_load_irep(mrb2, gem_test_irep_#{g.funcname}_#{i});]
+            f.puts %Q[  ]
+
+            f.puts %Q[  mrb_t_pass_result(mrb, mrb2);]
+            f.puts %Q[  mrb_close(mrb2);]
+            f.puts %Q[  mrb_gc_arena_restore(mrb, ai);]
+          end
+        end
+        f.puts %Q[}]
+      end
+    end
+  end
+
+  build.gems.each do |v|
+    mrbtest_objs.concat v.test_objs
+  end
+
+  file mrbtest_lib => mrbtest_objs do |t|
+    build.archiver.run t.name, t.prerequisites
+  end
+
+  unless build.build_mrbtest_lib_only?
+    file exec => [*driver_objs, mlib, mrbtest_lib, build.libmruby_static] do |t|
+      gem_flags = build.gems.map { |g| g.linker.flags }
+      gem_flags_before_libraries = build.gems.map { |g| g.linker.flags_before_libraries }
+      gem_flags_after_libraries = build.gems.map { |g| g.linker.flags_after_libraries }
+      gem_libraries = build.gems.map { |g| g.linker.libraries }
+      gem_library_paths = build.gems.map { |g| g.linker.library_paths }
+      build.linker.run t.name, t.prerequisites, gem_libraries, gem_library_paths, gem_flags,
+                       gem_flags_before_libraries, gem_flags_after_libraries
+    end
+  end
+
+  # store the last gem selection and make the re-build
+  # of the test gem depending on a change to the gem
+  # selection
+  active_gems_path = "#{build_dir}/active_gems_path.lst"
+  active_gem_list = File.read active_gems_path if File.exist? active_gems_path
+  current_gem_list = build.gems.map(&:name).join("\n")
+  task active_gems_path do |_t|
+    mkdir_p File.dirname(active_gems_path)
+    File.write active_gems_path, current_gem_list
+  end
+  file clib => active_gems_path if active_gem_list != current_gem_list
+
+  file mlib => clib
+  file clib => [build.mrbcfile, __FILE__] do |_t|
+    _pp "GEN", "*.rb", "#{clib.relative_path}"
+    mkdir_p File.dirname(clib)
+    open(clib, 'w') do |f|
+      f.puts %Q[/*]
+      f.puts %Q[ * This file contains a list of all]
+      f.puts %Q[ * test functions.]
+      f.puts %Q[ *]
+      f.puts %Q[ * IMPORTANT:]
+      f.puts %Q[ *   This file was generated!]
+      f.puts %Q[ *   All manual changes will get lost.]
+      f.puts %Q[ */]
+      f.puts %Q[]
+      f.puts %Q[struct mrb_state;]
+      f.puts %Q[typedef struct mrb_state mrb_state;]
+      build.gems.each do |g|
+        f.puts %Q[void GENERATED_TMP_mrb_#{g.funcname}_gem_test(mrb_state *mrb);]
+      end
+      f.puts %Q[void mrbgemtest_init(mrb_state* mrb) {]
+      build.gems.each do |g|
+        f.puts %Q[    GENERATED_TMP_mrb_#{g.funcname}_gem_test(mrb);]
+      end
+      f.puts %Q[}]
+    end
+  end
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-test/vformat.c
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-test/vformat.c	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-test/vformat.c	(revision 439)
@@ -0,0 +1,179 @@
+#include <string.h>
+#include <mruby.h>
+#include <mruby/class.h>
+#include <mruby/data.h>
+#include <mruby/string.h>
+
+/* no argument */
+static mrb_value
+vf_s_format_0(mrb_state *mrb, mrb_value klass)
+{
+  mrb_value fmt_str;
+  const char *fmt;
+
+  mrb_get_args(mrb, "S", &fmt_str);
+  fmt = RSTRING_CSTR(mrb, fmt_str);
+
+  return mrb_format(mrb, fmt);
+}
+
+/* c char */
+static mrb_value
+vf_s_format_c(mrb_state *mrb, mrb_value klass)
+{
+  mrb_value fmt_str, arg_str;
+  const char *fmt;
+  char c;
+  
+  mrb_get_args(mrb, "SS", &fmt_str, &arg_str);
+  fmt = RSTRING_CSTR(mrb, fmt_str);
+  c = RSTRING_CSTR(mrb, arg_str)[0];
+
+  return mrb_format(mrb, fmt, c);
+}
+
+/* d int */
+static mrb_value
+vf_s_format_d(mrb_state *mrb, mrb_value klass)
+{
+  mrb_value fmt_str;
+  const char *fmt;
+  mrb_int i;
+  int d;
+
+  mrb_get_args(mrb, "Si", &fmt_str, &i);
+  fmt = RSTRING_CSTR(mrb, fmt_str);
+  d = (int)i;
+
+  return mrb_format(mrb, fmt, d);
+}
+
+#ifndef MRB_WITHOUT_FLOAT
+/* f float */
+static mrb_value
+vf_s_format_f(mrb_state *mrb, mrb_value klass)
+{
+  mrb_value fmt_str;
+  const char *fmt;
+  mrb_float f;
+
+  mrb_get_args(mrb, "Sf", &fmt_str, &f);
+  fmt = RSTRING_CSTR(mrb, fmt_str);
+
+  return mrb_format(mrb, fmt, f);
+}
+#endif
+
+/* i fixnum */
+static mrb_value
+vf_s_format_i(mrb_state *mrb, mrb_value klass)
+{
+  mrb_value fmt_str;
+  const char *fmt;
+  mrb_int i;
+
+  mrb_get_args(mrb, "Si", &fmt_str, &i);
+  fmt = RSTRING_CSTR(mrb, fmt_str);
+
+  return mrb_format(mrb, fmt, i);
+}
+
+/* l char*, size_t */
+static mrb_value
+vf_s_format_l(mrb_state *mrb, mrb_value klass)
+{
+  mrb_value fmt_str, arg_str;
+  const char *fmt;
+  const char *s;
+  mrb_int i;
+  size_t len;
+
+  mrb_get_args(mrb, "SSi", &fmt_str, &arg_str, &i);
+  fmt = RSTRING_CSTR(mrb, fmt_str);
+  s = RSTRING_PTR(arg_str);
+  len = (size_t)i;
+  if (len > (size_t)RSTRING_LEN(arg_str)) len = (size_t)RSTRING_LEN(arg_str);
+
+  return mrb_format(mrb, fmt, s, len);
+}
+
+/* n symbol */
+static mrb_value
+vf_s_format_n(mrb_state *mrb, mrb_value klass)
+{
+  mrb_value fmt_str;
+  const char *fmt;
+  mrb_sym sym;
+
+  mrb_get_args(mrb, "Sn", &fmt_str, &sym);
+  fmt = RSTRING_CSTR(mrb, fmt_str);
+
+  return mrb_format(mrb, fmt, sym);
+}
+
+/* s char* */
+static mrb_value
+vf_s_format_s(mrb_state *mrb, mrb_value klass)
+{
+  mrb_value fmt_str, arg_str;
+  const char *fmt;
+  const char *s;
+
+  mrb_get_args(mrb, "SS", &fmt_str, &arg_str);
+  fmt = RSTRING_CSTR(mrb, fmt_str);
+  s = RSTRING_CSTR(mrb, arg_str);
+
+  return mrb_format(mrb, fmt, s);
+}
+
+/* C RClass */
+static mrb_value
+vf_s_format_C(mrb_state *mrb, mrb_value klass)
+{
+  mrb_value fmt_str, arg_cls;
+  const char *fmt;
+  struct RClass *c;
+
+  mrb_get_args(mrb, "SC", &fmt_str, &arg_cls);
+  fmt = RSTRING_CSTR(mrb, fmt_str);
+  c = mrb_class_ptr(arg_cls);
+
+  return mrb_format(mrb, fmt, c);
+}
+
+/* v value */
+static mrb_value
+vf_s_format_v(mrb_state *mrb, mrb_value klass)
+{
+  mrb_value fmt_str, arg_v;
+  const char *fmt;
+
+  mrb_get_args(mrb, "So", &fmt_str, &arg_v);
+  fmt = RSTRING_CSTR(mrb, fmt_str);
+
+  return mrb_format(mrb, fmt, arg_v);
+}
+
+void
+mrb_init_test_vformat(mrb_state *mrb)
+{
+  struct RClass *vf;
+
+  vf = mrb_define_module(mrb, "TestVFormat");
+  mrb_define_class_method(mrb, vf, "z", vf_s_format_0, MRB_ARGS_REQ(1));
+
+#define VF_DEFINE_FORMAT_METHOD(t) VF_DEFINE_FORMAT_METHOD_n(t,2)
+#define VF_DEFINE_FORMAT_METHOD_n(t,n) mrb_define_class_method(mrb, vf, #t, vf_s_format_##t, MRB_ARGS_REQ(n));
+  
+  VF_DEFINE_FORMAT_METHOD(c);
+  VF_DEFINE_FORMAT_METHOD(d);
+#ifndef MRB_WITHOUT_FLOAT
+  VF_DEFINE_FORMAT_METHOD(f);
+#endif
+  VF_DEFINE_FORMAT_METHOD(i);
+  VF_DEFINE_FORMAT_METHOD_n(l,3);
+  VF_DEFINE_FORMAT_METHOD(n);
+  VF_DEFINE_FORMAT_METHOD(s);
+  VF_DEFINE_FORMAT_METHOD(C);
+  VF_DEFINE_FORMAT_METHOD(v);
+}
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-time/include/mruby/time.h
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-time/include/mruby/time.h	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-time/include/mruby/time.h	(revision 439)
@@ -0,0 +1,26 @@
+/*
+** mruby/time.h - Time class
+**
+** See Copyright Notice in mruby.h
+*/
+
+#ifndef MRUBY_TIME_H
+#define MRUBY_TIME_H
+
+#include "mruby/common.h"
+#include <time.h>
+
+MRB_BEGIN_DECL
+
+typedef enum mrb_timezone {
+  MRB_TIMEZONE_NONE   = 0,
+  MRB_TIMEZONE_UTC    = 1,
+  MRB_TIMEZONE_LOCAL  = 2,
+  MRB_TIMEZONE_LAST   = 3
+} mrb_timezone;
+
+MRB_API mrb_value mrb_time_at(mrb_state *mrb, time_t sec, time_t usec, mrb_timezone timezone);
+
+MRB_END_DECL
+
+#endif /* MRUBY_TIME_H */
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-time/mrbgem.rake
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-time/mrbgem.rake	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-time/mrbgem.rake	(revision 439)
@@ -0,0 +1,5 @@
+MRuby::Gem::Specification.new('mruby-time') do |spec|
+  spec.license = 'MIT'
+  spec.author  = 'mruby developers'
+  spec.summary = 'standard Time class'
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-time/mrblib/time.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-time/mrblib/time.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-time/mrblib/time.rb	(revision 439)
@@ -0,0 +1,9 @@
+class Time
+  def sunday?;  wday == 0 end
+  def monday?;  wday == 1 end
+  def tuesday?;  wday == 2 end
+  def wednesday?;  wday == 3 end
+  def thursday?;  wday == 4 end
+  def friday?;  wday == 5 end
+  def saturday?;  wday == 6 end
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-time/src/time.c
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-time/src/time.c	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-time/src/time.c	(revision 439)
@@ -0,0 +1,1025 @@
+/*
+** time.c - Time class
+**
+** See Copyright Notice in mruby.h
+*/
+
+#ifndef MRB_WITHOUT_FLOAT
+#include <math.h>
+#endif
+
+#include <mruby.h>
+#include <mruby/class.h>
+#include <mruby/data.h>
+#include <mruby/numeric.h>
+#include <mruby/time.h>
+
+#ifdef MRB_DISABLE_STDIO
+#include <string.h>
+#endif
+
+#include <stdlib.h>
+
+#define NDIV(x,y) (-(-((x)+1)/(y))-1)
+#define TO_S_FMT "%Y-%m-%d %H:%M:%S "
+
+#if defined(_MSC_VER) && _MSC_VER < 1800
+double round(double x) {
+  return floor(x + 0.5);
+}
+#endif
+
+#ifndef MRB_WITHOUT_FLOAT
+# if !defined(__MINGW64__) && defined(_WIN32)
+#  define llround(x) round(x)
+# endif
+#endif
+
+#if defined(__MINGW64__) || defined(__MINGW32__)
+# include <sys/time.h>
+#endif
+
+/** Time class configuration */
+
+/* gettimeofday(2) */
+/* C99 does not have gettimeofday that is required to retrieve microseconds */
+/* uncomment following macro on platforms without gettimeofday(2) */
+/* #define NO_GETTIMEOFDAY */
+
+/* gmtime(3) */
+/* C99 does not have reentrant gmtime_r() so it might cause troubles under */
+/* multi-threading environment.  undef following macro on platforms that */
+/* does not have gmtime_r() and localtime_r(). */
+/* #define NO_GMTIME_R */
+
+#ifdef _WIN32
+#ifdef _MSC_VER
+/* Win32 platform do not provide gmtime_r/localtime_r; emulate them using gmtime_s/localtime_s */
+#define gmtime_r(tp, tm)    ((gmtime_s((tm), (tp)) == 0) ? (tm) : NULL)
+#define localtime_r(tp, tm)    ((localtime_s((tm), (tp)) == 0) ? (tm) : NULL)
+#else
+#define NO_GMTIME_R
+#endif
+#endif
+
+/* asctime(3) */
+/* mruby usually use its own implementation of struct tm to string conversion */
+/* except when DISABLE_STDIO is set. In that case, it uses asctime() or asctime_r(). */
+/* By default mruby tries to use asctime_r() which is reentrant. */
+/* Undef following macro on platforms that does not have asctime_r(). */
+/* #define NO_ASCTIME_R */
+
+/* timegm(3) */
+/* mktime() creates tm structure for localtime; timegm() is for UTC time */
+/* define following macro to use probably faster timegm() on the platform */
+/* #define USE_SYSTEM_TIMEGM */
+
+/** end of Time class configuration */
+
+#ifndef NO_GETTIMEOFDAY
+# ifdef _WIN32
+#  define WIN32_LEAN_AND_MEAN  /* don't include winsock.h */
+#  include <windows.h>
+#  define gettimeofday my_gettimeofday
+
+#  ifdef _MSC_VER
+#    define UI64(x) x##ui64
+#  else
+#    define UI64(x) x##ull
+#  endif
+
+typedef long suseconds_t;
+
+# if (!defined __MINGW64__) && (!defined __MINGW32__)
+struct timeval {
+  time_t tv_sec;
+  suseconds_t tv_usec;
+};
+# endif
+
+static int
+gettimeofday(struct timeval *tv, void *tz)
+{
+  if (tz) {
+    mrb_assert(0);  /* timezone is not supported */
+  }
+  if (tv) {
+    union {
+      FILETIME ft;
+      unsigned __int64 u64;
+    } t;
+    GetSystemTimeAsFileTime(&t.ft);   /* 100 ns intervals since Windows epoch */
+    t.u64 -= UI64(116444736000000000);  /* Unix epoch bias */
+    t.u64 /= 10;                      /* to microseconds */
+    tv->tv_sec = (time_t)(t.u64 / (1000 * 1000));
+    tv->tv_usec = t.u64 % (1000 * 1000);
+  }
+  return 0;
+}
+# else
+#  include <sys/time.h>
+# endif
+#endif
+#ifdef NO_GMTIME_R
+#define gmtime_r(t,r) gmtime(t)
+#define localtime_r(t,r) localtime(t)
+#endif
+
+#ifndef USE_SYSTEM_TIMEGM
+#define timegm my_timgm
+
+static unsigned int
+is_leapyear(unsigned int y)
+{
+  return (y % 4) == 0 && ((y % 100) != 0 || (y % 400) == 0);
+}
+
+static time_t
+timegm(struct tm *tm)
+{
+  static const unsigned int ndays[2][12] = {
+    {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
+    {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}
+  };
+  time_t r = 0;
+  int i;
+  unsigned int *nday = (unsigned int*) ndays[is_leapyear(tm->tm_year+1900)];
+
+  static const int epoch_year = 70;
+  if(tm->tm_year >= epoch_year) {
+    for (i = epoch_year; i < tm->tm_year; ++i)
+      r += is_leapyear(i+1900) ? 366*24*60*60 : 365*24*60*60;
+  } else {
+    for (i = tm->tm_year; i < epoch_year; ++i)
+      r -= is_leapyear(i+1900) ? 366*24*60*60 : 365*24*60*60;
+  }
+  for (i = 0; i < tm->tm_mon; ++i)
+    r += nday[i] * 24 * 60 * 60;
+  r += (tm->tm_mday - 1) * 24 * 60 * 60;
+  r += tm->tm_hour * 60 * 60;
+  r += tm->tm_min * 60;
+  r += tm->tm_sec;
+  return r;
+}
+#endif
+
+/* Since we are limited to using ISO C99, this implementation is based
+* on time_t. That means the resolution of time is only precise to the
+* second level. Also, there are only 2 timezones, namely UTC and LOCAL.
+*/
+
+typedef struct mrb_timezone_name {
+  const char name[8];
+  size_t len;
+} mrb_timezone_name;
+
+static const mrb_timezone_name timezone_names[] = {
+  { "none", sizeof("none") - 1 },
+  { "UTC", sizeof("UTC") - 1 },
+  { "LOCAL", sizeof("LOCAL") - 1 },
+};
+
+#ifndef MRB_DISABLE_STDIO
+static const char mon_names[12][4] = {
+  "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec",
+};
+
+static const char wday_names[7][4] = {
+  "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat",
+};
+#endif
+
+struct mrb_time {
+  time_t              sec;
+  time_t              usec;
+  enum mrb_timezone   timezone;
+  struct tm           datetime;
+};
+
+static const struct mrb_data_type mrb_time_type = { "Time", mrb_free };
+
+#ifndef MRB_WITHOUT_FLOAT
+void mrb_check_num_exact(mrb_state *mrb, mrb_float num);
+typedef mrb_float mrb_sec;
+#define mrb_sec_value(mrb, sec) mrb_float_value(mrb, sec)
+#else
+typedef mrb_int mrb_sec;
+#define mrb_sec_value(mrb, sec) mrb_fixnum_value(sec)
+#endif
+
+#define MRB_TIME_T_UINT (~(time_t)0 > 0)
+#define MRB_TIME_MIN (                                                      \
+  MRB_TIME_T_UINT ? 0 :                                                     \
+                    (sizeof(time_t) <= 4 ? INT32_MIN : INT64_MIN)           \
+)
+#define MRB_TIME_MAX (                                                      \
+  MRB_TIME_T_UINT ? (sizeof(time_t) <= 4 ? UINT32_MAX : UINT64_MAX) :       \
+                    (sizeof(time_t) <= 4 ? INT32_MAX : INT64_MAX)           \
+)
+
+static mrb_bool
+fixable_time_t_p(time_t v)
+{
+  if (MRB_INT_MIN <= MRB_TIME_MIN && MRB_TIME_MAX <= MRB_INT_MAX) return TRUE;
+  return FIXABLE(v);
+}
+
+static time_t
+mrb_to_time_t(mrb_state *mrb, mrb_value obj, time_t *usec)
+{
+  time_t t;
+
+  switch (mrb_type(obj)) {
+#ifndef MRB_WITHOUT_FLOAT
+    case MRB_TT_FLOAT:
+      {
+        mrb_float f = mrb_float(obj);
+
+        mrb_check_num_exact(mrb, f);
+        if (f >= ((mrb_float)MRB_TIME_MAX-1.0) || f < ((mrb_float)MRB_TIME_MIN+1.0)) {
+          goto out_of_range;
+        }
+
+        if (usec) {
+          t = (time_t)f;
+          *usec = (time_t)llround((f - t) * 1.0e+6);
+        }
+        else {
+          t = (time_t)llround(f);
+        }
+      }
+      break;
+#endif /* MRB_WITHOUT_FLOAT */
+    default:
+    case MRB_TT_FIXNUM:
+      {
+        mrb_int i = mrb_int(mrb, obj);
+
+        if ((MRB_INT_MAX > MRB_TIME_MAX && i > 0 && i > (mrb_int)MRB_TIME_MAX) ||
+            (MRB_TIME_MIN > MRB_INT_MIN && MRB_TIME_MIN > i)) {
+          goto out_of_range;
+        }
+
+        t = (time_t)i;
+        if (usec) { *usec = 0; }
+      }
+      break;
+  }
+
+  return t;
+
+out_of_range:
+  mrb_raisef(mrb, E_ARGUMENT_ERROR, "%v out of Time range", obj);
+
+  /* not reached */
+  if (usec) { *usec = 0; }
+  return 0;
+}
+
+/** Updates the datetime of a mrb_time based on it's timezone and
+    seconds setting. Returns self on success, NULL of failure.
+    if `dealloc` is set `true`, it frees `self` on error. */
+static struct mrb_time*
+time_update_datetime(mrb_state *mrb, struct mrb_time *self, int dealloc)
+{
+  struct tm *aid;
+  time_t t = self->sec;
+
+  if (self->timezone == MRB_TIMEZONE_UTC) {
+    aid = gmtime_r(&t, &self->datetime);
+  }
+  else {
+    aid = localtime_r(&t, &self->datetime);
+  }
+  if (!aid) {
+    mrb_sec sec = (mrb_sec)t;
+
+    if (dealloc) mrb_free(mrb, self);
+    mrb_raisef(mrb, E_ARGUMENT_ERROR, "%v out of Time range", mrb_sec_value(mrb, sec));
+    /* not reached */
+    return NULL;
+  }
+#ifdef NO_GMTIME_R
+  self->datetime = *aid; /* copy data */
+#endif
+
+  return self;
+}
+
+static mrb_value
+mrb_time_wrap(mrb_state *mrb, struct RClass *tc, struct mrb_time *tm)
+{
+  return mrb_obj_value(Data_Wrap_Struct(mrb, tc, &mrb_time_type, tm));
+}
+
+/* Allocates a mrb_time object and initializes it. */
+static struct mrb_time*
+time_alloc_time(mrb_state *mrb, time_t sec, time_t usec, enum mrb_timezone timezone)
+{
+  struct mrb_time *tm;
+
+  tm = (struct mrb_time *)mrb_malloc(mrb, sizeof(struct mrb_time));
+  tm->sec  = sec;
+  tm->usec = usec;
+  if (tm->usec < 0) {
+    long sec2 = (long)NDIV(tm->usec,1000000); /* negative div */
+    tm->usec -= sec2 * 1000000;
+    tm->sec += sec2;
+  }
+  else if (tm->usec >= 1000000) {
+    long sec2 = (long)(tm->usec / 1000000);
+    tm->usec -= sec2 * 1000000;
+    tm->sec += sec2;
+  }
+  tm->timezone = timezone;
+  time_update_datetime(mrb, tm, TRUE);
+
+  return tm;
+}
+
+static struct mrb_time*
+time_alloc(mrb_state *mrb, mrb_value sec, mrb_value usec, enum mrb_timezone timezone)
+{
+  time_t tsec, tusec;
+
+  tsec = mrb_to_time_t(mrb, sec, &tusec);
+  tusec += mrb_to_time_t(mrb, usec, NULL);
+
+  return time_alloc_time(mrb, tsec, tusec, timezone);
+}
+
+static mrb_value
+mrb_time_make_time(mrb_state *mrb, struct RClass *c, time_t sec, time_t usec, enum mrb_timezone timezone)
+{
+  return mrb_time_wrap(mrb, c, time_alloc_time(mrb, sec, usec, timezone));
+}
+
+static mrb_value
+mrb_time_make(mrb_state *mrb, struct RClass *c, mrb_value sec, mrb_value usec, enum mrb_timezone timezone)
+{
+  return mrb_time_wrap(mrb, c, time_alloc(mrb, sec, usec, timezone));
+}
+
+static struct mrb_time*
+current_mrb_time(mrb_state *mrb)
+{
+  struct mrb_time tmzero = {0};
+  struct mrb_time *tm;
+  time_t sec, usec;
+
+#if defined(TIME_UTC) && !defined(__ANDROID__)
+  {
+    struct timespec ts;
+    if (timespec_get(&ts, TIME_UTC) == 0) {
+      mrb_raise(mrb, E_RUNTIME_ERROR, "timespec_get() failed for unknown reasons");
+    }
+    sec = ts.tv_sec;
+    usec = ts.tv_nsec / 1000;
+  }
+#elif defined(NO_GETTIMEOFDAY)
+  {
+    static time_t last_sec = 0, last_usec = 0;
+
+    sec = time(NULL);
+    if (sec != last_sec) {
+      last_sec = sec;
+      last_usec = 0;
+    }
+    else {
+      /* add 1 usec to differentiate two times */
+      last_usec += 1;
+    }
+    usec = last_usec;
+  }
+#else
+  {
+    struct timeval tv;
+
+    gettimeofday(&tv, NULL);
+    sec = tv.tv_sec;
+    usec = tv.tv_usec;
+  }
+#endif
+  tm = (struct mrb_time *)mrb_malloc(mrb, sizeof(*tm));
+  *tm = tmzero;
+  tm->sec = sec; tm->usec = usec;
+  tm->timezone = MRB_TIMEZONE_LOCAL;
+  time_update_datetime(mrb, tm, TRUE);
+
+  return tm;
+}
+
+/* Allocates a new Time object with given millis value. */
+static mrb_value
+mrb_time_now(mrb_state *mrb, mrb_value self)
+{
+  return mrb_time_wrap(mrb, mrb_class_ptr(self), current_mrb_time(mrb));
+}
+
+MRB_API mrb_value
+mrb_time_at(mrb_state *mrb, time_t sec, time_t usec, enum mrb_timezone zone)
+{
+  return mrb_time_make_time(mrb, mrb_class_get(mrb, "Time"), sec, usec, zone);
+}
+
+/* 15.2.19.6.1 */
+/* Creates an instance of time at the given time in seconds, etc. */
+static mrb_value
+mrb_time_at_m(mrb_state *mrb, mrb_value self)
+{
+  mrb_value sec;
+  mrb_value usec = mrb_fixnum_value(0);
+
+  mrb_get_args(mrb, "o|o", &sec, &usec);
+
+  return mrb_time_make(mrb, mrb_class_ptr(self), sec, usec, MRB_TIMEZONE_LOCAL);
+}
+
+static struct mrb_time*
+time_mktime(mrb_state *mrb, mrb_int ayear, mrb_int amonth, mrb_int aday,
+  mrb_int ahour, mrb_int amin, mrb_int asec, mrb_int ausec,
+  enum mrb_timezone timezone)
+{
+  time_t nowsecs;
+  struct tm nowtime = { 0 };
+
+  nowtime.tm_year  = (int)ayear  - 1900;
+  nowtime.tm_mon   = (int)amonth - 1;
+  nowtime.tm_mday  = (int)aday;
+  nowtime.tm_hour  = (int)ahour;
+  nowtime.tm_min   = (int)amin;
+  nowtime.tm_sec   = (int)asec;
+  nowtime.tm_isdst = -1;
+
+  if (nowtime.tm_mon  < 0 || nowtime.tm_mon  > 11
+      || nowtime.tm_mday < 1 || nowtime.tm_mday > 31
+      || nowtime.tm_hour < 0 || nowtime.tm_hour > 24
+      || (nowtime.tm_hour == 24 && (nowtime.tm_min > 0 || nowtime.tm_sec > 0))
+      || nowtime.tm_min  < 0 || nowtime.tm_min  > 59
+      || nowtime.tm_sec  < 0 || nowtime.tm_sec  > 60)
+    mrb_raise(mrb, E_RUNTIME_ERROR, "argument out of range");
+
+  if (timezone == MRB_TIMEZONE_UTC) {
+    nowsecs = timegm(&nowtime);
+  }
+  else {
+    nowsecs = mktime(&nowtime);
+  }
+  if (nowsecs == (time_t)-1) {
+    mrb_raise(mrb, E_ARGUMENT_ERROR, "Not a valid time.");
+  }
+
+  return time_alloc_time(mrb, nowsecs, ausec, timezone);
+}
+
+/* 15.2.19.6.2 */
+/* Creates an instance of time at the given time in UTC. */
+static mrb_value
+mrb_time_gm(mrb_state *mrb, mrb_value self)
+{
+  mrb_int ayear = 0, amonth = 1, aday = 1, ahour = 0, amin = 0, asec = 0, ausec = 0;
+
+  mrb_get_args(mrb, "i|iiiiii",
+                &ayear, &amonth, &aday, &ahour, &amin, &asec, &ausec);
+  return mrb_time_wrap(mrb, mrb_class_ptr(self),
+          time_mktime(mrb, ayear, amonth, aday, ahour, amin, asec, ausec, MRB_TIMEZONE_UTC));
+}
+
+
+/* 15.2.19.6.3 */
+/* Creates an instance of time at the given time in local time zone. */
+static mrb_value
+mrb_time_local(mrb_state *mrb, mrb_value self)
+{
+  mrb_int ayear = 0, amonth = 1, aday = 1, ahour = 0, amin = 0, asec = 0, ausec = 0;
+
+  mrb_get_args(mrb, "i|iiiiii",
+                &ayear, &amonth, &aday, &ahour, &amin, &asec, &ausec);
+  return mrb_time_wrap(mrb, mrb_class_ptr(self),
+          time_mktime(mrb, ayear, amonth, aday, ahour, amin, asec, ausec, MRB_TIMEZONE_LOCAL));
+}
+
+static struct mrb_time*
+time_get_ptr(mrb_state *mrb, mrb_value time)
+{
+  struct mrb_time *tm;
+
+  tm = DATA_GET_PTR(mrb, time, &mrb_time_type, struct mrb_time);
+  if (!tm) {
+    mrb_raise(mrb, E_ARGUMENT_ERROR, "uninitialized time");
+  }
+  return tm;
+}
+
+static mrb_value
+mrb_time_eq(mrb_state *mrb, mrb_value self)
+{
+  mrb_value other;
+  struct mrb_time *tm1, *tm2;
+  mrb_bool eq_p;
+
+  mrb_get_args(mrb, "o", &other);
+  tm1 = DATA_GET_PTR(mrb, self, &mrb_time_type, struct mrb_time);
+  tm2 = DATA_CHECK_GET_PTR(mrb, other, &mrb_time_type, struct mrb_time);
+  eq_p = tm1 && tm2 && tm1->sec == tm2->sec && tm1->usec == tm2->usec;
+
+  return mrb_bool_value(eq_p);
+}
+
+static mrb_value
+mrb_time_cmp(mrb_state *mrb, mrb_value self)
+{
+  mrb_value other;
+  struct mrb_time *tm1, *tm2;
+
+  mrb_get_args(mrb, "o", &other);
+  tm1 = DATA_GET_PTR(mrb, self, &mrb_time_type, struct mrb_time);
+  tm2 = DATA_CHECK_GET_PTR(mrb, other, &mrb_time_type, struct mrb_time);
+  if (!tm1 || !tm2) return mrb_nil_value();
+  if (tm1->sec > tm2->sec) {
+    return mrb_fixnum_value(1);
+  }
+  else if (tm1->sec < tm2->sec) {
+    return mrb_fixnum_value(-1);
+  }
+  /* tm1->sec == tm2->sec */
+  if (tm1->usec > tm2->usec) {
+    return mrb_fixnum_value(1);
+  }
+  else if (tm1->usec < tm2->usec) {
+    return mrb_fixnum_value(-1);
+  }
+  return mrb_fixnum_value(0);
+}
+
+static mrb_value
+mrb_time_plus(mrb_state *mrb, mrb_value self)
+{
+  mrb_value o;
+  struct mrb_time *tm;
+  time_t sec, usec;
+
+  mrb_get_args(mrb, "o", &o);
+  tm = time_get_ptr(mrb, self);
+  sec = mrb_to_time_t(mrb, o, &usec);
+  return mrb_time_make_time(mrb, mrb_obj_class(mrb, self), tm->sec+sec, tm->usec+usec, tm->timezone);
+}
+
+static mrb_value
+mrb_time_minus(mrb_state *mrb, mrb_value self)
+{
+  mrb_value other;
+  struct mrb_time *tm, *tm2;
+
+  mrb_get_args(mrb, "o", &other);
+  tm = time_get_ptr(mrb, self);
+  tm2 = DATA_CHECK_GET_PTR(mrb, other, &mrb_time_type, struct mrb_time);
+  if (tm2) {
+#ifndef MRB_WITHOUT_FLOAT
+    mrb_float f;
+    f = (mrb_sec)(tm->sec - tm2->sec)
+      + (mrb_sec)(tm->usec - tm2->usec) / 1.0e6;
+    return mrb_float_value(mrb, f);
+#else
+    mrb_int f;
+    f = tm->sec - tm2->sec;
+    if (tm->usec < tm2->usec) f--;
+    return mrb_fixnum_value(f);
+#endif
+  }
+  else {
+    time_t sec, usec;
+    sec = mrb_to_time_t(mrb, other, &usec);
+    return mrb_time_make_time(mrb, mrb_obj_class(mrb, self), tm->sec-sec, tm->usec-usec, tm->timezone);
+  }
+}
+
+/* 15.2.19.7.30 */
+/* Returns week day number of time. */
+static mrb_value
+mrb_time_wday(mrb_state *mrb, mrb_value self)
+{
+  struct mrb_time *tm;
+
+  tm = time_get_ptr(mrb, self);
+  return mrb_fixnum_value(tm->datetime.tm_wday);
+}
+
+/* 15.2.19.7.31 */
+/* Returns year day number of time. */
+static mrb_value
+mrb_time_yday(mrb_state *mrb, mrb_value self)
+{
+  struct mrb_time *tm;
+
+  tm = time_get_ptr(mrb, self);
+  return mrb_fixnum_value(tm->datetime.tm_yday + 1);
+}
+
+/* 15.2.19.7.32 */
+/* Returns year of time. */
+static mrb_value
+mrb_time_year(mrb_state *mrb, mrb_value self)
+{
+  struct mrb_time *tm;
+
+  tm = time_get_ptr(mrb, self);
+  return mrb_fixnum_value(tm->datetime.tm_year + 1900);
+}
+
+/* 15.2.19.7.33 */
+/* Returns name of time's timezone. */
+static mrb_value
+mrb_time_zone(mrb_state *mrb, mrb_value self)
+{
+  struct mrb_time *tm;
+
+  tm = time_get_ptr(mrb, self);
+  if (tm->timezone <= MRB_TIMEZONE_NONE) return mrb_nil_value();
+  if (tm->timezone >= MRB_TIMEZONE_LAST) return mrb_nil_value();
+  return mrb_str_new_static(mrb,
+                            timezone_names[tm->timezone].name,
+                            timezone_names[tm->timezone].len);
+}
+
+/* 15.2.19.7.4 */
+/* Returns a string that describes the time. */
+static mrb_value
+mrb_time_asctime(mrb_state *mrb, mrb_value self)
+{
+  struct mrb_time *tm = time_get_ptr(mrb, self);
+  struct tm *d = &tm->datetime;
+  int len;
+
+#if defined(MRB_DISABLE_STDIO)
+  char *s;
+# ifdef NO_ASCTIME_R
+  s = asctime(d);
+# else
+  char buf[32];
+  s = asctime_r(d, buf);
+# endif
+  len = strlen(s)-1;            /* truncate the last newline */
+#else
+  char buf[256];
+
+  len = snprintf(buf, sizeof(buf), "%s %s %2d %02d:%02d:%02d %.4d",
+    wday_names[d->tm_wday], mon_names[d->tm_mon], d->tm_mday,
+    d->tm_hour, d->tm_min, d->tm_sec,
+    d->tm_year + 1900);
+#endif
+  return mrb_str_new(mrb, buf, len);
+}
+
+/* 15.2.19.7.6 */
+/* Returns the day in the month of the time. */
+static mrb_value
+mrb_time_day(mrb_state *mrb, mrb_value self)
+{
+  struct mrb_time *tm;
+
+  tm = time_get_ptr(mrb, self);
+  return mrb_fixnum_value(tm->datetime.tm_mday);
+}
+
+
+/* 15.2.19.7.7 */
+/* Returns true if daylight saving was applied for this time. */
+static mrb_value
+mrb_time_dst_p(mrb_state *mrb, mrb_value self)
+{
+  struct mrb_time *tm;
+
+  tm = time_get_ptr(mrb, self);
+  return mrb_bool_value(tm->datetime.tm_isdst);
+}
+
+/* 15.2.19.7.8 */
+/* 15.2.19.7.10 */
+/* Returns the Time object of the UTC(GMT) timezone. */
+static mrb_value
+mrb_time_getutc(mrb_state *mrb, mrb_value self)
+{
+  struct mrb_time *tm, *tm2;
+
+  tm = time_get_ptr(mrb, self);
+  tm2 = (struct mrb_time *)mrb_malloc(mrb, sizeof(*tm));
+  *tm2 = *tm;
+  tm2->timezone = MRB_TIMEZONE_UTC;
+  time_update_datetime(mrb, tm2, TRUE);
+  return mrb_time_wrap(mrb, mrb_obj_class(mrb, self), tm2);
+}
+
+/* 15.2.19.7.9 */
+/* Returns the Time object of the LOCAL timezone. */
+static mrb_value
+mrb_time_getlocal(mrb_state *mrb, mrb_value self)
+{
+  struct mrb_time *tm, *tm2;
+
+  tm = time_get_ptr(mrb, self);
+  tm2 = (struct mrb_time *)mrb_malloc(mrb, sizeof(*tm));
+  *tm2 = *tm;
+  tm2->timezone = MRB_TIMEZONE_LOCAL;
+  time_update_datetime(mrb, tm2, TRUE);
+  return mrb_time_wrap(mrb, mrb_obj_class(mrb, self), tm2);
+}
+
+/* 15.2.19.7.15 */
+/* Returns hour of time. */
+static mrb_value
+mrb_time_hour(mrb_state *mrb, mrb_value self)
+{
+  struct mrb_time *tm;
+
+  tm = time_get_ptr(mrb, self);
+  return mrb_fixnum_value(tm->datetime.tm_hour);
+}
+
+/* 15.2.19.7.16 */
+/* Initializes a time by setting the amount of milliseconds since the epoch.*/
+static mrb_value
+mrb_time_initialize(mrb_state *mrb, mrb_value self)
+{
+  mrb_int ayear = 0, amonth = 1, aday = 1, ahour = 0,
+  amin = 0, asec = 0, ausec = 0;
+  mrb_int n;
+  struct mrb_time *tm;
+
+  n = mrb_get_args(mrb, "|iiiiiii",
+       &ayear, &amonth, &aday, &ahour, &amin, &asec, &ausec);
+  tm = (struct mrb_time*)DATA_PTR(self);
+  if (tm) {
+    mrb_free(mrb, tm);
+  }
+  mrb_data_init(self, NULL, &mrb_time_type);
+
+  if (n == 0) {
+    tm = current_mrb_time(mrb);
+  }
+  else {
+    tm = time_mktime(mrb, ayear, amonth, aday, ahour, amin, asec, ausec, MRB_TIMEZONE_LOCAL);
+  }
+  mrb_data_init(self, tm, &mrb_time_type);
+  return self;
+}
+
+/* 15.2.19.7.17(x) */
+/* Initializes a copy of this time object. */
+static mrb_value
+mrb_time_initialize_copy(mrb_state *mrb, mrb_value copy)
+{
+  mrb_value src;
+  struct mrb_time *t1, *t2;
+
+  mrb_get_args(mrb, "o", &src);
+  if (mrb_obj_equal(mrb, copy, src)) return copy;
+  if (!mrb_obj_is_instance_of(mrb, src, mrb_obj_class(mrb, copy))) {
+    mrb_raise(mrb, E_TYPE_ERROR, "wrong argument class");
+  }
+  t1 = (struct mrb_time *)DATA_PTR(copy);
+  t2 = (struct mrb_time *)DATA_PTR(src);
+  if (!t2) {
+    mrb_raise(mrb, E_ARGUMENT_ERROR, "uninitialized time");
+  }
+  if (!t1) {
+    t1 = (struct mrb_time *)mrb_malloc(mrb, sizeof(struct mrb_time));
+    mrb_data_init(copy, t1, &mrb_time_type);
+  }
+  *t1 = *t2;
+  return copy;
+}
+
+/* 15.2.19.7.18 */
+/* Sets the timezone attribute of the Time object to LOCAL. */
+static mrb_value
+mrb_time_localtime(mrb_state *mrb, mrb_value self)
+{
+  struct mrb_time *tm;
+
+  tm = time_get_ptr(mrb, self);
+  tm->timezone = MRB_TIMEZONE_LOCAL;
+  time_update_datetime(mrb, tm, FALSE);
+  return self;
+}
+
+/* 15.2.19.7.19 */
+/* Returns day of month of time. */
+static mrb_value
+mrb_time_mday(mrb_state *mrb, mrb_value self)
+{
+  struct mrb_time *tm;
+
+  tm = time_get_ptr(mrb, self);
+  return mrb_fixnum_value(tm->datetime.tm_mday);
+}
+
+/* 15.2.19.7.20 */
+/* Returns minutes of time. */
+static mrb_value
+mrb_time_min(mrb_state *mrb, mrb_value self)
+{
+  struct mrb_time *tm;
+
+  tm = time_get_ptr(mrb, self);
+  return mrb_fixnum_value(tm->datetime.tm_min);
+}
+
+/* 15.2.19.7.21 and 15.2.19.7.22 */
+/* Returns month of time. */
+static mrb_value
+mrb_time_mon(mrb_state *mrb, mrb_value self)
+{
+  struct mrb_time *tm;
+
+  tm = time_get_ptr(mrb, self);
+  return mrb_fixnum_value(tm->datetime.tm_mon + 1);
+}
+
+/* 15.2.19.7.23 */
+/* Returns seconds in minute of time. */
+static mrb_value
+mrb_time_sec(mrb_state *mrb, mrb_value self)
+{
+  struct mrb_time *tm;
+
+  tm = time_get_ptr(mrb, self);
+  return mrb_fixnum_value(tm->datetime.tm_sec);
+}
+
+#ifndef MRB_WITHOUT_FLOAT
+/* 15.2.19.7.24 */
+/* Returns a Float with the time since the epoch in seconds. */
+static mrb_value
+mrb_time_to_f(mrb_state *mrb, mrb_value self)
+{
+  struct mrb_time *tm;
+
+  tm = time_get_ptr(mrb, self);
+  return mrb_float_value(mrb, (mrb_float)tm->sec + (mrb_float)tm->usec/1.0e6);
+}
+#endif
+
+/* 15.2.19.7.25 */
+/* Returns an Integer with the time since the epoch in seconds. */
+static mrb_value
+mrb_time_to_i(mrb_state *mrb, mrb_value self)
+{
+  struct mrb_time *tm;
+
+  tm = time_get_ptr(mrb, self);
+#ifndef MRB_WITHOUT_FLOAT
+  if (!fixable_time_t_p(tm->sec)) {
+    return mrb_float_value(mrb, (mrb_float)tm->sec);
+  }
+#endif
+  return mrb_fixnum_value((mrb_int)tm->sec);
+}
+
+/* 15.2.19.7.26 */
+/* Returns an Integer with the time since the epoch in microseconds. */
+static mrb_value
+mrb_time_usec(mrb_state *mrb, mrb_value self)
+{
+  struct mrb_time *tm;
+
+  tm = time_get_ptr(mrb, self);
+#ifndef MRB_WITHOUT_FLOAT
+  if (!fixable_time_t_p(tm->usec)) {
+    return mrb_float_value(mrb, (mrb_float)tm->usec);
+  }
+#endif
+  return mrb_fixnum_value((mrb_int)tm->usec);
+}
+
+/* 15.2.19.7.27 */
+/* Sets the timezone attribute of the Time object to UTC. */
+static mrb_value
+mrb_time_utc(mrb_state *mrb, mrb_value self)
+{
+  struct mrb_time *tm;
+
+  tm = time_get_ptr(mrb, self);
+  tm->timezone = MRB_TIMEZONE_UTC;
+  time_update_datetime(mrb, tm, FALSE);
+  return self;
+}
+
+/* 15.2.19.7.28 */
+/* Returns true if this time is in the UTC timezone false if not. */
+static mrb_value
+mrb_time_utc_p(mrb_state *mrb, mrb_value self)
+{
+  struct mrb_time *tm;
+
+  tm = time_get_ptr(mrb, self);
+  return mrb_bool_value(tm->timezone == MRB_TIMEZONE_UTC);
+}
+
+static size_t
+time_to_s_utc(mrb_state *mrb, struct mrb_time *tm, char *buf, size_t buf_len)
+{
+  return strftime(buf, buf_len, TO_S_FMT "UTC", &tm->datetime);
+}
+
+static size_t
+time_to_s_local(mrb_state *mrb, struct mrb_time *tm, char *buf, size_t buf_len)
+{
+#if defined(_MSC_VER) && _MSC_VER < 1900 || defined(__MINGW64__) || defined(__MINGW32__)
+  struct tm datetime = {0};
+  time_t utc_sec = timegm(&tm->datetime);
+  size_t len;
+  int offset;
+
+  if (utc_sec == (time_t)-1) {
+    mrb_raise(mrb, E_ARGUMENT_ERROR, "Not a valid time.");
+  }
+  offset = abs((int)(utc_sec - tm->sec) / 60);
+  datetime.tm_year = 100;
+  datetime.tm_hour = offset / 60;
+  datetime.tm_min = offset % 60;
+  len = strftime(buf, buf_len, TO_S_FMT, &tm->datetime);
+  buf[len++] = utc_sec < tm->sec ? '-' : '+';
+
+  return len + strftime(buf + len, buf_len - len, "%H%M", &datetime);
+#else
+  return strftime(buf, buf_len, TO_S_FMT "%z", &tm->datetime);
+#endif
+}
+
+static mrb_value
+mrb_time_to_s(mrb_state *mrb, mrb_value self)
+{
+  char buf[64];
+  struct mrb_time *tm = time_get_ptr(mrb, self);
+  mrb_bool utc = tm->timezone == MRB_TIMEZONE_UTC;
+  size_t len = (utc ? time_to_s_utc : time_to_s_local)(mrb, tm, buf, sizeof(buf));
+  return mrb_str_new(mrb, buf, len);
+}
+
+void
+mrb_mruby_time_gem_init(mrb_state* mrb)
+{
+  struct RClass *tc;
+  /* ISO 15.2.19.2 */
+  tc = mrb_define_class(mrb, "Time", mrb->object_class);
+  MRB_SET_INSTANCE_TT(tc, MRB_TT_DATA);
+  mrb_include_module(mrb, tc, mrb_module_get(mrb, "Comparable"));
+  mrb_define_class_method(mrb, tc, "at", mrb_time_at_m, MRB_ARGS_ARG(1, 1));      /* 15.2.19.6.1 */
+  mrb_define_class_method(mrb, tc, "gm", mrb_time_gm, MRB_ARGS_ARG(1,6));       /* 15.2.19.6.2 */
+  mrb_define_class_method(mrb, tc, "local", mrb_time_local, MRB_ARGS_ARG(1,6)); /* 15.2.19.6.3 */
+  mrb_define_class_method(mrb, tc, "mktime", mrb_time_local, MRB_ARGS_ARG(1,6));/* 15.2.19.6.4 */
+  mrb_define_class_method(mrb, tc, "now", mrb_time_now, MRB_ARGS_NONE());       /* 15.2.19.6.5 */
+  mrb_define_class_method(mrb, tc, "utc", mrb_time_gm, MRB_ARGS_ARG(1,6));      /* 15.2.19.6.6 */
+
+  mrb_define_method(mrb, tc, "=="     , mrb_time_eq     , MRB_ARGS_REQ(1));
+  mrb_define_method(mrb, tc, "<=>"    , mrb_time_cmp    , MRB_ARGS_REQ(1)); /* 15.2.19.7.1 */
+  mrb_define_method(mrb, tc, "+"      , mrb_time_plus   , MRB_ARGS_REQ(1)); /* 15.2.19.7.2 */
+  mrb_define_method(mrb, tc, "-"      , mrb_time_minus  , MRB_ARGS_REQ(1)); /* 15.2.19.7.3 */
+  mrb_define_method(mrb, tc, "to_s"   , mrb_time_to_s   , MRB_ARGS_NONE());
+  mrb_define_method(mrb, tc, "inspect", mrb_time_to_s   , MRB_ARGS_NONE());
+  mrb_define_method(mrb, tc, "asctime", mrb_time_asctime, MRB_ARGS_NONE()); /* 15.2.19.7.4 */
+  mrb_define_method(mrb, tc, "ctime"  , mrb_time_asctime, MRB_ARGS_NONE()); /* 15.2.19.7.5 */
+  mrb_define_method(mrb, tc, "day"    , mrb_time_day    , MRB_ARGS_NONE()); /* 15.2.19.7.6 */
+  mrb_define_method(mrb, tc, "dst?"   , mrb_time_dst_p  , MRB_ARGS_NONE()); /* 15.2.19.7.7 */
+  mrb_define_method(mrb, tc, "getgm"  , mrb_time_getutc , MRB_ARGS_NONE()); /* 15.2.19.7.8 */
+  mrb_define_method(mrb, tc, "getlocal",mrb_time_getlocal,MRB_ARGS_NONE()); /* 15.2.19.7.9 */
+  mrb_define_method(mrb, tc, "getutc" , mrb_time_getutc , MRB_ARGS_NONE()); /* 15.2.19.7.10 */
+  mrb_define_method(mrb, tc, "gmt?"   , mrb_time_utc_p  , MRB_ARGS_NONE()); /* 15.2.19.7.11 */
+  mrb_define_method(mrb, tc, "gmtime" , mrb_time_utc    , MRB_ARGS_NONE()); /* 15.2.19.7.13 */
+  mrb_define_method(mrb, tc, "hour"   , mrb_time_hour, MRB_ARGS_NONE());    /* 15.2.19.7.15 */
+  mrb_define_method(mrb, tc, "localtime", mrb_time_localtime, MRB_ARGS_NONE()); /* 15.2.19.7.18 */
+  mrb_define_method(mrb, tc, "mday"   , mrb_time_mday, MRB_ARGS_NONE());    /* 15.2.19.7.19 */
+  mrb_define_method(mrb, tc, "min"    , mrb_time_min, MRB_ARGS_NONE());     /* 15.2.19.7.20 */
+
+  mrb_define_method(mrb, tc, "mon"  , mrb_time_mon, MRB_ARGS_NONE());       /* 15.2.19.7.21 */
+  mrb_define_method(mrb, tc, "month", mrb_time_mon, MRB_ARGS_NONE());       /* 15.2.19.7.22 */
+
+  mrb_define_method(mrb, tc, "sec" , mrb_time_sec, MRB_ARGS_NONE());        /* 15.2.19.7.23 */
+  mrb_define_method(mrb, tc, "to_i", mrb_time_to_i, MRB_ARGS_NONE());       /* 15.2.19.7.25 */
+#ifndef MRB_WITHOUT_FLOAT
+  mrb_define_method(mrb, tc, "to_f", mrb_time_to_f, MRB_ARGS_NONE());       /* 15.2.19.7.24 */
+#endif
+  mrb_define_method(mrb, tc, "usec", mrb_time_usec, MRB_ARGS_NONE());       /* 15.2.19.7.26 */
+  mrb_define_method(mrb, tc, "utc" , mrb_time_utc, MRB_ARGS_NONE());        /* 15.2.19.7.27 */
+  mrb_define_method(mrb, tc, "utc?", mrb_time_utc_p,MRB_ARGS_NONE());       /* 15.2.19.7.28 */
+  mrb_define_method(mrb, tc, "wday", mrb_time_wday, MRB_ARGS_NONE());       /* 15.2.19.7.30 */
+  mrb_define_method(mrb, tc, "yday", mrb_time_yday, MRB_ARGS_NONE());       /* 15.2.19.7.31 */
+  mrb_define_method(mrb, tc, "year", mrb_time_year, MRB_ARGS_NONE());       /* 15.2.19.7.32 */
+  mrb_define_method(mrb, tc, "zone", mrb_time_zone, MRB_ARGS_NONE());       /* 15.2.19.7.33 */
+
+  mrb_define_method(mrb, tc, "initialize", mrb_time_initialize, MRB_ARGS_REQ(1)); /* 15.2.19.7.16 */
+  mrb_define_method(mrb, tc, "initialize_copy", mrb_time_initialize_copy, MRB_ARGS_REQ(1)); /* 15.2.19.7.17 */
+
+  /*
+    methods not available:
+      gmt_offset(15.2.19.7.12)
+      gmtoff(15.2.19.7.14)
+      utc_offset(15.2.19.7.29)
+  */
+}
+
+void
+mrb_mruby_time_gem_final(mrb_state* mrb)
+{
+}
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-time/test/time.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-time/test/time.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-time/test/time.rb	(revision 439)
@@ -0,0 +1,267 @@
+##
+# Time ISO Test
+
+assert('Time.new', '15.2.3.3.3') do
+  assert_equal(Time, Time.new.class)
+end
+
+assert('Time', '15.2.19') do
+  assert_equal(Class, Time.class)
+end
+
+assert('Time.at', '15.2.19.6.1') do
+  assert_kind_of(Time, Time.at(1300000000.0))
+
+  assert_raise(FloatDomainError) { Time.at(Float::NAN) }
+  assert_raise(FloatDomainError) { Time.at(Float::INFINITY) }
+  assert_raise(FloatDomainError) { Time.at(-Float::INFINITY) }
+  assert_raise(FloatDomainError) { Time.at(0, Float::NAN) }
+  assert_raise(FloatDomainError) { Time.at(0, Float::INFINITY) }
+  assert_raise(FloatDomainError) { Time.at(0, -Float::INFINITY) }
+end
+
+assert('Time.gm', '15.2.19.6.2') do
+  t = Time.gm(2012, 9, 23)
+  assert_operator(2012, :eql?, t.year)
+  assert_operator(   9, :eql?, t.month)
+  assert_operator(  23, :eql?, t.day)
+  assert_operator(   0, :eql?, t.hour)
+  assert_operator(   0, :eql?, t.min)
+  assert_operator(   0, :eql?, t.sec)
+  assert_operator(   0, :eql?, t.usec)
+end
+
+assert('Time.local', '15.2.19.6.3') do
+  t = Time.local(2014, 12, 27, 18)
+  assert_operator(2014, :eql?, t.year)
+  assert_operator(  12, :eql?, t.month)
+  assert_operator(  27, :eql?, t.day)
+  assert_operator(  18, :eql?, t.hour)
+  assert_operator(   0, :eql?, t.min)
+  assert_operator(   0, :eql?, t.sec)
+  assert_operator(   0, :eql?, t.usec)
+end
+
+assert('Time.mktime', '15.2.19.6.4') do
+  t = Time.mktime(2013, 10, 4, 6, 15, 58, 3485)
+  assert_operator(2013, :eql?, t.year)
+  assert_operator(  10, :eql?, t.month)
+  assert_operator(   4, :eql?, t.day)
+  assert_operator(   6, :eql?, t.hour)
+  assert_operator(  15, :eql?, t.min)
+  assert_operator(  58, :eql?, t.sec)
+  assert_operator(3485, :eql?, t.usec)
+end
+
+assert('Time.now', '15.2.19.6.5') do
+  assert_equal(Time, Time.now.class)
+end
+
+assert('Time.utc', '15.2.19.6.6') do
+  t = Time.utc(2034)
+  assert_operator(2034, :eql?, t.year)
+  assert_operator(   1, :eql?, t.month)
+  assert_operator(   1, :eql?, t.day)
+  assert_operator(   0, :eql?, t.hour)
+  assert_operator(   0, :eql?, t.min)
+  assert_operator(   0, :eql?, t.sec)
+  assert_operator(   0, :eql?, t.usec)
+end
+
+assert('Time#+', '15.2.19.7.1') do
+  t1 = Time.at(1300000000.0)
+  t2 = t1.+(60)
+
+  assert_equal("Sun Mar 13 07:07:40 2011", t2.utc.asctime)
+
+  assert_raise(FloatDomainError) { Time.at(0) + Float::NAN }
+  assert_raise(FloatDomainError) { Time.at(0) + Float::INFINITY }
+  assert_raise(FloatDomainError) { Time.at(0) + -Float::INFINITY }
+end
+
+assert('Time#-', '15.2.19.7.2') do
+  t1 = Time.at(1300000000.0)
+  t2 = t1.-(60)
+
+  assert_equal("Sun Mar 13 07:05:40 2011", t2.utc.asctime)
+
+  assert_raise(FloatDomainError) { Time.at(0) - Float::NAN }
+  assert_raise(FloatDomainError) { Time.at(0) - Float::INFINITY }
+  assert_raise(FloatDomainError) { Time.at(0) - -Float::INFINITY }
+end
+
+assert('Time#<=>', '15.2.19.7.3') do
+  t1 = Time.at(1300000000.0)
+  t2 = Time.at(1400000000.0)
+  t3 = Time.at(1500000000.0)
+
+  assert_equal(1, t2 <=> t1)
+  assert_equal(0, t2 <=> t2)
+  assert_equal(-1, t2 <=> t3)
+  assert_nil(t2 <=> nil)
+end
+
+assert('Time#asctime', '15.2.19.7.4') do
+  assert_equal("Thu Mar  4 05:06:07 1982", Time.gm(1982,3,4,5,6,7).asctime)
+end
+
+assert('Time#ctime', '15.2.19.7.5') do
+  assert_equal("Thu Oct 24 15:26:47 2013", Time.gm(2013,10,24,15,26,47).ctime)
+end
+
+assert('Time#day', '15.2.19.7.6') do
+  assert_equal(23, Time.gm(2012, 12, 23).day)
+end
+
+assert('Time#dst?', '15.2.19.7.7') do
+  assert_not_predicate(Time.gm(2012, 12, 23).utc, :dst?)
+end
+
+assert('Time#getgm', '15.2.19.7.8') do
+  assert_equal("Sun Mar 13 07:06:40 2011", Time.at(1300000000.0).getgm.asctime)
+end
+
+assert('Time#getlocal', '15.2.19.7.9') do
+  t1 = Time.at(1300000000.0)
+  t2 = Time.at(1300000000.0)
+  t3 = t1.getlocal
+
+  assert_equal(t1, t3)
+  assert_equal(t3, t2.getlocal)
+end
+
+assert('Time#getutc', '15.2.19.7.10') do
+  assert_equal("Sun Mar 13 07:06:40 2011", Time.at(1300000000.0).getutc.asctime)
+end
+
+assert('Time#gmt?', '15.2.19.7.11') do
+  assert_predicate(Time.at(1300000000.0).utc, :gmt?)
+end
+
+# ATM not implemented
+# assert('Time#gmt_offset', '15.2.19.7.12') do
+
+assert('Time#gmtime', '15.2.19.7.13') do
+  t = Time.now
+  assert_predicate(t.gmtime, :gmt?)
+  assert_predicate(t, :gmt?)
+end
+
+# ATM not implemented
+# assert('Time#gmtoff', '15.2.19.7.14') do
+
+assert('Time#hour', '15.2.19.7.15') do
+  assert_equal(7, Time.gm(2012, 12, 23, 7, 6).hour)
+end
+
+# ATM doesn't really work
+# assert('Time#initialize', '15.2.19.7.16') do
+
+assert('Time#initialize_copy', '15.2.19.7.17') do
+  t = Time.at(7.0e6)
+  assert_equal(t, t.clone)
+end
+
+assert('Time#localtime', '15.2.19.7.18') do
+  t1 = Time.utc(2014, 5 ,6)
+  t2 = Time.utc(2014, 5 ,6)
+  t3 = t2.getlocal
+
+  assert_equal(t3, t1.localtime)
+  assert_equal(t3, t1)
+end
+
+assert('Time#mday', '15.2.19.7.19') do
+  assert_equal(23, Time.gm(2012, 12, 23).mday)
+end
+
+assert('Time#min', '15.2.19.7.20') do
+  assert_equal(6, Time.gm(2012, 12, 23, 7, 6).min)
+end
+
+assert('Time#mon', '15.2.19.7.21') do
+  assert_equal(12, Time.gm(2012, 12, 23).mon)
+end
+
+assert('Time#month', '15.2.19.7.22') do
+  assert_equal(12, Time.gm(2012, 12, 23).month)
+end
+
+assert('Times#sec', '15.2.19.7.23') do
+  assert_equal(40, Time.gm(2012, 12, 23, 7, 6, 40).sec)
+end
+
+assert('Time#to_f', '15.2.19.7.24') do
+  assert_operator(2.0, :eql?, Time.at(2).to_f)
+end
+
+assert('Time#to_i', '15.2.19.7.25') do
+  assert_operator(2, :eql?, Time.at(2.0).to_i)
+end
+
+assert('Time#usec', '15.2.19.7.26') do
+  assert_equal(0, Time.at(1300000000.0).usec)
+end
+
+assert('Time#utc', '15.2.19.7.27') do
+  t = Time.now
+  assert_predicate(t.utc, :gmt?)
+  assert_predicate(t, :gmt?)
+end
+
+assert('Time#utc?', '15.2.19.7.28') do
+  assert_predicate(Time.at(1300000000.0).utc, :utc?)
+end
+
+# ATM not implemented
+# assert('Time#utc_offset', '15.2.19.7.29') do
+
+assert('Time#wday', '15.2.19.7.30') do
+  assert_equal(0, Time.gm(2012, 12, 23).wday)
+end
+
+assert('Time#yday', '15.2.19.7.31') do
+  assert_equal(358, Time.gm(2012, 12, 23).yday)
+end
+
+assert('Time#year', '15.2.19.7.32') do
+  assert_equal(2012, Time.gm(2012, 12, 23).year)
+end
+
+assert('Time#zone', '15.2.19.7.33') do
+  assert_equal('UTC', Time.at(1300000000.0).utc.zone)
+end
+
+# Not ISO specified
+
+assert('Time#to_s') do
+  assert_equal("2003-04-05 06:07:08 UTC", Time.gm(2003,4,5,6,7,8,9).to_s)
+end
+
+assert('Time#inspect') do
+  assert_match("2013-10-28 16:27:48 [+-][0-9][0-9][0-9][0-9]",
+               Time.local(2013,10,28,16,27,48).inspect)
+end
+
+assert('day of week methods') do
+  t = Time.gm(2012, 12, 24)
+  assert_false t.sunday?
+  assert_true t.monday?
+  assert_false t.tuesday?
+  assert_false t.wednesday?
+  assert_false t.thursday?
+  assert_false t.friday?
+  assert_false t.saturday?
+end
+
+assert('2000 times 500us make a second') do
+  t = Time.utc 2015
+  2000.times do
+    t += 0.0005
+  end
+  assert_equal(0, t.usec)
+end
+
+assert('Time.gm with Dec 31 23:59:59 1969 raise ArgumentError') do
+  assert_raise(ArgumentError) {Time.gm(1969, 12, 31, 23, 59, 59)}
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-toplevel-ext/mrbgem.rake
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-toplevel-ext/mrbgem.rake	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-toplevel-ext/mrbgem.rake	(revision 439)
@@ -0,0 +1,5 @@
+MRuby::Gem::Specification.new('mruby-toplevel-ext') do |spec|
+  spec.license = 'MIT'
+  spec.author  = 'mruby developers'
+  spec.summary = 'toplevel object (main) methods extension'
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-toplevel-ext/mrblib/toplevel.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-toplevel-ext/mrblib/toplevel.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-toplevel-ext/mrblib/toplevel.rb	(revision 439)
@@ -0,0 +1,11 @@
+
+def self.include (*modules)
+  self.class.include(*modules)
+end
+
+def self.private(*methods)
+end
+def self.protected(*methods)
+end
+def self.public(*methods)
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-toplevel-ext/test/toplevel.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-toplevel-ext/test/toplevel.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-toplevel-ext/test/toplevel.rb	(revision 439)
@@ -0,0 +1,24 @@
+##
+# Toplevel Self(Ext) Test
+
+assert('Toplevel#include') do
+  module ToplevelTestModule1
+    def method_foo
+      :foo
+    end
+
+    CONST_BAR = :bar
+  end
+
+  module ToplevelTestModule2
+    CONST_BAR = :bar2
+  end
+
+  self.include ToplevelTestModule2, ToplevelTestModule1
+
+  assert_true self.class.ancestors.include?( ToplevelTestModule1 )
+  assert_true self.class.ancestors.include?( ToplevelTestModule2 )
+  assert_equal :foo, method_foo
+  assert_equal :bar2, CONST_BAR
+end
+
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrblib/00class.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrblib/00class.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrblib/00class.rb	(revision 439)
@@ -0,0 +1,29 @@
+class Module
+   # 15.2.2.4.12
+  def attr_accessor(*names)
+    attr_reader(*names)
+    attr_writer(*names)
+  end
+  # 15.2.2.4.11
+  alias attr attr_reader
+  #def attr(name)
+  #  attr_reader(name)
+  #end
+
+  # 15.2.2.4.27
+  def include(*args)
+    args.reverse.each do |m|
+      m.append_features(self)
+      m.included(self)
+    end
+    self
+  end
+
+  def prepend(*args)
+    args.reverse.each do |m|
+      m.prepend_features(self)
+      m.prepended(self)
+    end
+    self
+  end
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrblib/10error.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrblib/10error.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrblib/10error.rb	(revision 439)
@@ -0,0 +1,59 @@
+# ISO 15.2.24
+class ArgumentError < StandardError
+end
+
+# ISO 15.2.25 says "LocalJumpError < StandardError"
+class LocalJumpError < ScriptError
+end
+
+# ISO 15.2.26
+class RangeError < StandardError
+end
+
+class FloatDomainError < RangeError
+end
+
+# ISO 15.2.26
+class RegexpError < StandardError
+end
+
+# ISO 15.2.29
+class TypeError < StandardError
+end
+
+# ISO 15.2.31
+class NameError < StandardError
+  attr_accessor :name
+
+  def initialize(message=nil, name=nil)
+    @name = name
+    super(message)
+  end
+end
+
+# ISO 15.2.32
+class NoMethodError < NameError
+  attr_reader :args
+
+  def initialize(message=nil, name=nil, args=nil)
+    @args = args
+    super message, name
+  end
+end
+
+# ISO 15.2.33
+class IndexError < StandardError
+end
+
+class KeyError < IndexError
+end
+
+class NotImplementedError < ScriptError
+end
+
+class FrozenError < RuntimeError
+end
+
+class StopIteration < IndexError
+  attr_accessor :result
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrblib/array.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrblib/array.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrblib/array.rb	(revision 439)
@@ -0,0 +1,271 @@
+# coding: utf-8
+##
+# Array
+#
+# ISO 15.2.12
+class Array
+
+  ##
+  # Calls the given block for each element of +self+
+  # and pass the respective element.
+  #
+  # ISO 15.2.12.5.10
+  # def each(&block)
+  #   return to_enum :each unless block
+
+  #   idx = 0
+  #   while idx < length
+  #     block.call(self[idx])
+  #     idx += 1
+  #   end
+  #   self
+  # end
+
+  ##
+  # Calls the given block for each element of +self+
+  # and pass the index of the respective element.
+  #
+  # ISO 15.2.12.5.11
+  def each_index(&block)
+    return to_enum :each_index unless block
+
+    idx = 0
+    while idx < length
+      block.call(idx)
+      idx += 1
+    end
+    self
+  end
+
+  ##
+  # Calls the given block for each element of +self+
+  # and pass the respective element. Each element will
+  # be replaced by the resulting values.
+  #
+  # ISO 15.2.12.5.7
+  def collect!(&block)
+    return to_enum :collect! unless block
+
+    idx = 0
+    len = size
+    while idx < len
+      self[idx] = block.call self[idx]
+      idx += 1
+    end
+    self
+  end
+
+  ##
+  # Alias for collect!
+  #
+  # ISO 15.2.12.5.20
+  alias map! collect!
+
+  ##
+  # Private method for Array creation.
+  #
+  # ISO 15.2.12.5.15
+  def initialize(size=0, obj=nil, &block)
+    size = size.__to_int
+    raise ArgumentError, "negative array size" if size < 0
+
+    self.clear
+    if size > 0
+      self[size - 1] = nil # allocate
+
+      idx = 0
+      while idx < size
+        self[idx] = (block)? block.call(idx): obj
+        idx += 1
+      end
+    end
+
+    self
+  end
+
+  def _inspect(recur_list)
+    size = self.size
+    return "[]" if size == 0
+    return "[...]" if recur_list[self.object_id]
+    recur_list[self.object_id] = true
+    ary=[]
+    i=0
+    while i<size
+      ary<<self[i]._inspect(recur_list)
+      i+=1
+    end
+    "["+ary.join(", ")+"]"
+  end
+  ##
+  # Return the contents of this array as a string.
+  #
+  # ISO 15.2.12.5.31 (x)
+  def inspect
+    self._inspect({})
+  end
+  # ISO 15.2.12.5.32 (x)
+  alias to_s inspect
+
+  ##
+  #  Equality---Two arrays are equal if they contain the same number
+  #  of elements and if each element is equal to (according to
+  #  Object.==) the corresponding element in the other array.
+  #
+  # ISO 15.2.12.5.33 (x)
+  def ==(other)
+    other = self.__ary_eq(other)
+    return false if other == false
+    return true  if other == true
+    len = self.size
+    i = 0
+    while i < len
+      return false if self[i] != other[i]
+      i += 1
+    end
+    return true
+  end
+
+  ##
+  #  Returns <code>true</code> if +self+ and _other_ are the same object,
+  #  or are both arrays with the same content.
+  #
+  # ISO 15.2.12.5.34 (x)
+  def eql?(other)
+    other = self.__ary_eq(other)
+    return false if other == false
+    return true  if other == true
+    len = self.size
+    i = 0
+    while i < len
+      return false unless self[i].eql?(other[i])
+      i += 1
+    end
+    return true
+  end
+
+  ##
+  #  Comparison---Returns an integer (-1, 0, or +1)
+  #  if this array is less than, equal to, or greater than <i>other_ary</i>.
+  #  Each object in each array is compared (using <=>). If any value isn't
+  #  equal, then that inequality is the return value. If all the
+  #  values found are equal, then the return is based on a
+  #  comparison of the array lengths.  Thus, two arrays are
+  #  "equal" according to <code>Array#<=></code> if and only if they have
+  #  the same length and the value of each element is equal to the
+  #  value of the corresponding element in the other array.
+  #
+  # ISO 15.2.12.5.36 (x)
+  def <=>(other)
+    other = self.__ary_cmp(other)
+    return 0 if 0 == other
+    return nil if nil == other
+
+    len = self.size
+    n = other.size
+    len = n if len > n
+    i = 0
+    while i < len
+      n = (self[i] <=> other[i])
+      return n if n.nil? || n != 0
+      i += 1
+    end
+    len = self.size - other.size
+    if len == 0
+      0
+    elsif len > 0
+      1
+    else
+      -1
+    end
+  end
+
+  ##
+  # Delete element with index +key+
+  def delete(key, &block)
+    while i = self.index(key)
+      self.delete_at(i)
+      ret = key
+    end
+    return block.call if ret.nil? && block
+    ret
+  end
+end
+
+##
+# Array is enumerable
+class Array
+  # ISO 15.2.12.3
+  include Enumerable
+
+  ##
+  # Sort all elements and replace +self+ with these
+  # elements.
+  def sort!(&block)
+    stack = [ [ 0, self.size - 1 ] ]
+    until stack.empty?
+      left, mid, right = stack.pop
+      if right == nil
+        right = mid
+        # sort self[left..right]
+        if left < right
+          if left + 1 == right
+            lval = self[left]
+            rval = self[right]
+            cmp = if block then block.call(lval,rval) else lval <=> rval end
+            if cmp.nil?
+              raise ArgumentError, "comparison of #{lval.inspect} and #{rval.inspect} failed"
+            end
+            if cmp > 0
+              self[left]  = rval
+              self[right] = lval
+            end
+          else
+            mid = ((left + right + 1) / 2).floor
+            stack.push [ left, mid, right ]
+            stack.push [ mid, right ]
+            stack.push [ left, (mid - 1) ] if left < mid - 1
+          end
+        end
+      else
+        lary = self[left, mid - left]
+        lsize = lary.size
+
+        # The entity sharing between lary and self may cause a large memory
+        # copy operation in the merge loop below.  This harmless operation
+        # cancels the sharing and provides a huge performance gain.
+        lary[0] = lary[0]
+
+        # merge
+        lidx = 0
+        ridx = mid
+        (left..right).each { |i|
+          if lidx >= lsize
+            break
+          elsif ridx > right
+            self[i, lsize - lidx] = lary[lidx, lsize - lidx]
+            break
+          else
+            lval = lary[lidx]
+            rval = self[ridx]
+            cmp = if block then block.call(lval,rval) else lval <=> rval end
+            if cmp.nil?
+              raise ArgumentError, "comparison of #{lval.inspect} and #{rval.inspect} failed"
+            end
+            if cmp <= 0
+              self[i] = lval
+              lidx += 1
+            else
+              self[i] = rval
+              ridx += 1
+            end
+          end
+        }
+      end
+    end
+    self
+  end
+
+  def sort(&block)
+    self.dup.sort!(&block)
+  end
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrblib/compar.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrblib/compar.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrblib/compar.rb	(revision 439)
@@ -0,0 +1,84 @@
+##
+# Comparable
+#
+# ISO 15.3.3
+module Comparable
+
+  ##
+  # Return true if +self+ is less
+  # than +other+. Otherwise return
+  # false.
+  #
+  # ISO 15.3.3.2.1
+  def < other
+    cmp = self <=> other
+    if cmp.nil?
+      raise ArgumentError, "comparison of #{self.class} with #{other.class} failed"
+    end
+    cmp < 0
+  end
+
+  ##
+  # Return true if +self+ is less
+  # than or equal to +other+.
+  # Otherwise return false.
+  #
+  # ISO 15.3.3.2.2
+  def <= other
+    cmp = self <=> other
+    if cmp.nil?
+      raise ArgumentError, "comparison of #{self.class} with #{other.class} failed"
+    end
+    cmp <= 0
+  end
+
+  ##
+  # Return true if +self+ is equal
+  # to +other+. Otherwise return
+  # false.
+  #
+  # ISO 15.3.3.2.3
+  def == other
+    cmp = self <=> other
+    cmp == 0
+  end
+
+  ##
+  # Return true if +self+ is greater
+  # than +other+. Otherwise return
+  # false.
+  #
+  # ISO 15.3.3.2.4
+  def > other
+    cmp = self <=> other
+    if cmp.nil?
+      raise ArgumentError, "comparison of #{self.class} with #{other.class} failed"
+    end
+    cmp > 0
+  end
+
+  ##
+  # Return true if +self+ is greater
+  # than or equal to +other+.
+  # Otherwise return false.
+  #
+  # ISO 15.3.3.2.5
+  def >= other
+    cmp = self <=> other
+    if cmp.nil?
+      raise ArgumentError, "comparison of #{self.class} with #{other.class} failed"
+    end
+    cmp >= 0
+  end
+
+  ##
+  # Return true if +self+ is greater
+  # than or equal to +min+ and
+  # less than or equal to +max+.
+  # Otherwise return false.
+  #
+  # ISO 15.3.3.2.6
+  def between?(min, max)
+    self >= min and self <= max
+  end
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrblib/enum.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrblib/enum.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrblib/enum.rb	(revision 439)
@@ -0,0 +1,353 @@
+##
+# Enumerable
+#
+# The <code>Enumerable</code> mixin provides collection classes with
+# several traversal and searching methods, and with the ability to
+# sort. The class must provide a method `each`, which
+# yields successive members of the collection. If
+# {Enumerable#max}, {#min}, or
+# {#sort} is used, the objects in the collection must also
+# implement a meaningful `<=>` operator, as these methods
+# rely on an ordering between members of the collection.
+#
+# @ISO 15.3.2
+module Enumerable
+
+  NONE = Object.new
+
+  ##
+  # Call the given block for each element
+  # which is yield by +each+. Return false
+  # if one block value is false. Otherwise
+  # return true. If no block is given and
+  # +self+ is false return false.
+  #
+  # ISO 15.3.2.2.1
+  def all?(&block)
+    if block
+      self.each{|*val| return false unless block.call(*val)}
+    else
+      self.each{|*val| return false unless val.__svalue}
+    end
+    true
+  end
+
+  ##
+  # Call the given block for each element
+  # which is yield by +each+. Return true
+  # if one block value is true. Otherwise
+  # return false. If no block is given and
+  # +self+ is true object return true.
+  #
+  # ISO 15.3.2.2.2
+  def any?(&block)
+    if block
+      self.each{|*val| return true if block.call(*val)}
+    else
+      self.each{|*val| return true if val.__svalue}
+    end
+    false
+  end
+
+  ##
+  # Call the given block for each element
+  # which is yield by +each+. Append all
+  # values of each block together and
+  # return this value.
+  #
+  # ISO 15.3.2.2.3
+  def collect(&block)
+    return to_enum :collect unless block
+
+    ary = []
+    self.each{|*val| ary.push(block.call(*val))}
+    ary
+  end
+
+  ##
+  # Return the first element for which
+  # value from the block is true. If no
+  # object matches, calls +ifnone+ and
+  # returns its result. Otherwise returns
+  # +nil+.
+  #
+  # ISO 15.3.2.2.4
+  def detect(ifnone=nil, &block)
+    return to_enum :detect, ifnone unless block
+
+    self.each{|*val|
+      if block.call(*val)
+        return val.__svalue
+      end
+    }
+    ifnone.call unless ifnone.nil?
+  end
+
+  ##
+  # Call the given block for each element
+  # which is yield by +each+. Pass an
+  # index to the block which starts at 0
+  # and increase by 1 for each element.
+  #
+  # ISO 15.3.2.2.5
+  def each_with_index(&block)
+    return to_enum :each_with_index unless block
+
+    i = 0
+    self.each{|*val|
+      block.call(val.__svalue, i)
+      i += 1
+    }
+    self
+  end
+
+  ##
+  # Return an array of all elements which
+  # are yield by +each+.
+  #
+  # ISO 15.3.2.2.6
+  def entries
+    ary = []
+    self.each{|*val|
+      # __svalue is an internal method
+      ary.push val.__svalue
+    }
+    ary
+  end
+
+  ##
+  # Alias for find
+  #
+  # ISO 15.3.2.2.7
+  alias find detect
+
+  ##
+  # Call the given block for each element
+  # which is yield by +each+. Return an array
+  # which contains all elements whose block
+  # value was true.
+  #
+  # ISO 15.3.2.2.8
+  def find_all(&block)
+    return to_enum :find_all unless block
+
+    ary = []
+    self.each{|*val|
+      ary.push(val.__svalue) if block.call(*val)
+    }
+    ary
+  end
+
+  ##
+  # Call the given block for each element
+  # which is yield by +each+ and which return
+  # value was true when invoking === with
+  # +pattern+. Return an array with all
+  # elements or the respective block values.
+  #
+  # ISO 15.3.2.2.9
+  def grep(pattern, &block)
+    ary = []
+    self.each{|*val|
+      sv = val.__svalue
+      if pattern === sv
+        ary.push((block)? block.call(*val): sv)
+      end
+    }
+    ary
+  end
+
+  ##
+  # Return true if at least one element which
+  # is yield by +each+ returns a true value
+  # by invoking == with +obj+. Otherwise return
+  # false.
+  #
+  # ISO 15.3.2.2.10
+  def include?(obj)
+    self.each{|*val|
+      return true if val.__svalue == obj
+    }
+    false
+  end
+
+  ##
+  # Call the given block for each element
+  # which is yield by +each+. Return value
+  # is the sum of all block values. Pass
+  # to each block the current sum and the
+  # current element.
+  #
+  # ISO 15.3.2.2.11
+  def inject(*args, &block)
+    raise ArgumentError, "too many arguments" if args.size > 2
+    if Symbol === args[-1]
+      sym = args[-1]
+      block = ->(x,y){x.__send__(sym,y)}
+      args.pop
+    end
+    if args.empty?
+      flag = true  # no initial argument
+      result = nil
+    else
+      flag = false
+      result = args[0]
+    end
+    self.each{|*val|
+      val = val.__svalue
+      if flag
+        # push first element as initial
+        flag = false
+        result = val
+      else
+        result = block.call(result, val)
+      end
+    }
+    result
+  end
+  alias reduce inject
+
+  ##
+  # Alias for collect
+  #
+  # ISO 15.3.2.2.12
+  alias map collect
+
+  ##
+  # Return the maximum value of all elements
+  # yield by +each+. If no block is given <=>
+  # will be invoked to define this value. If
+  # a block is given it will be used instead.
+  #
+  # ISO 15.3.2.2.13
+  def max(&block)
+    flag = true  # 1st element?
+    result = nil
+    self.each{|*val|
+      val = val.__svalue
+      if flag
+        # 1st element
+        result = val
+        flag = false
+      else
+        if block
+          result = val if block.call(val, result) > 0
+        else
+          result = val if (val <=> result) > 0
+        end
+      end
+    }
+    result
+  end
+
+  ##
+  # Return the minimum value of all elements
+  # yield by +each+. If no block is given <=>
+  # will be invoked to define this value. If
+  # a block is given it will be used instead.
+  #
+  # ISO 15.3.2.2.14
+  def min(&block)
+    flag = true  # 1st element?
+    result = nil
+    self.each{|*val|
+      val = val.__svalue
+      if flag
+        # 1st element
+        result = val
+        flag = false
+      else
+        if block
+          result = val if block.call(val, result) < 0
+        else
+          result = val if (val <=> result) < 0
+        end
+      end
+    }
+    result
+  end
+
+  ##
+  # Alias for include?
+  #
+  # ISO 15.3.2.2.15
+  alias member? include?
+
+  ##
+  # Call the given block for each element
+  # which is yield by +each+. Return an
+  # array which contains two arrays. The
+  # first array contains all elements
+  # whose block value was true. The second
+  # array contains all elements whose
+  # block value was false.
+  #
+  # ISO 15.3.2.2.16
+  def partition(&block)
+    return to_enum :partition unless block
+
+    ary_T = []
+    ary_F = []
+    self.each{|*val|
+      if block.call(*val)
+        ary_T.push(val.__svalue)
+      else
+        ary_F.push(val.__svalue)
+      end
+    }
+    [ary_T, ary_F]
+  end
+
+  ##
+  # Call the given block for each element
+  # which is yield by +each+. Return an
+  # array which contains only the elements
+  # whose block value was false.
+  #
+  # ISO 15.3.2.2.17
+  def reject(&block)
+    return to_enum :reject unless block
+
+    ary = []
+    self.each{|*val|
+      ary.push(val.__svalue) unless block.call(*val)
+    }
+    ary
+  end
+
+  ##
+  # Alias for find_all.
+  #
+  # ISO 15.3.2.2.18
+  alias select find_all
+
+  ##
+  # Return a sorted array of all elements
+  # which are yield by +each+. If no block
+  # is given <=> will be invoked on each
+  # element to define the order. Otherwise
+  # the given block will be used for
+  # sorting.
+  #
+  # ISO 15.3.2.2.19
+  def sort(&block)
+    self.map{|*val| val.__svalue}.sort(&block)
+  end
+
+  ##
+  # Alias for entries.
+  #
+  # ISO 15.3.2.2.20
+  alias to_a entries
+
+  # redefine #hash 15.3.1.3.15
+  def hash
+    h = 12347
+    i = 0
+    self.each do |e|
+      h = __update_hash(h, i, e.hash)
+      i += 1
+    end
+    h
+  end
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrblib/hash.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrblib/hash.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrblib/hash.rb	(revision 439)
@@ -0,0 +1,327 @@
+##
+# Hash
+#
+# ISO 15.2.13
+class Hash
+  ##
+  #  Equality---Two hashes are equal if they each contain the same number
+  #  of keys and if each key-value pair is equal to (according to
+  #  <code>Object#==</code>) the corresponding elements in the other
+  #  hash.
+  #
+  # ISO 15.2.13.4.1
+  def ==(hash)
+    return true if self.equal?(hash)
+    unless Hash === hash
+      return false
+    end
+    return false if self.size != hash.size
+    self.each do |k,v|
+      return false unless hash.key?(k)
+      return false unless self[k] == hash[k]
+    end
+    return true
+  end
+
+  ##
+  # Returns <code>true</code> if <i>hash</i> and <i>other</i> are
+  # both hashes with the same content compared by eql?.
+  #
+  # ISO 15.2.13.4.32 (x)
+  def eql?(hash)
+    return true if self.equal?(hash)
+    unless Hash === hash
+      return false
+    end
+    return false if self.size != hash.size
+    self.each do |k,v|
+      return false unless hash.key?(k)
+      return false unless self[k].eql?(hash[k])
+    end
+    return true
+  end
+
+  ##
+  # Delete the element with the key +key+.
+  # Return the value of the element if +key+
+  # was found. Return nil if nothing was
+  # found. If a block is given, call the
+  # block with the value of the element.
+  #
+  # ISO 15.2.13.4.8
+  def delete(key, &block)
+    if block && !self.has_key?(key)
+      return block.call(key)
+    end
+    self.__delete(key)
+  end
+
+  ##
+  # Calls the given block for each element of +self+
+  # and pass the key and value of each element.
+  #
+  # call-seq:
+  #   hsh.each      {| key, value | block } -> hsh
+  #   hsh.each_pair {| key, value | block } -> hsh
+  #   hsh.each                              -> an_enumerator
+  #   hsh.each_pair                         -> an_enumerator
+  #
+  #
+  # If no block is given, an enumerator is returned instead.
+  #
+  #     h = { "a" => 100, "b" => 200 }
+  #     h.each {|key, value| puts "#{key} is #{value}" }
+  #
+  # <em>produces:</em>
+  #
+  # a is 100
+  # b is 200
+  #
+  # ISO 15.2.13.4.9
+  def each(&block)
+    return to_enum :each unless block
+
+    keys = self.keys
+    vals = self.values
+    len = self.size
+    i = 0
+    while i < len
+      block.call [keys[i], vals[i]]
+      i += 1
+    end
+    self
+  end
+
+  ##
+  # Calls the given block for each element of +self+
+  # and pass the key of each element.
+  #
+  # call-seq:
+  #   hsh.each_key {| key | block } -> hsh
+  #   hsh.each_key                  -> an_enumerator
+  #
+  # If no block is given, an enumerator is returned instead.
+  #
+  #   h = { "a" => 100, "b" => 200 }
+  #   h.each_key {|key| puts key }
+  #
+  # <em>produces:</em>
+  #
+  #  a
+  #  b
+  #
+  # ISO 15.2.13.4.10
+  def each_key(&block)
+    return to_enum :each_key unless block
+
+    self.keys.each{|k| block.call(k)}
+    self
+  end
+
+  ##
+  # Calls the given block for each element of +self+
+  # and pass the value of each element.
+  #
+  # call-seq:
+  #   hsh.each_value {| value | block } -> hsh
+  #   hsh.each_value                    -> an_enumerator
+  #
+  # If no block is given, an enumerator is returned instead.
+  #
+  #  h = { "a" => 100, "b" => 200 }
+  #  h.each_value {|value| puts value }
+  #
+  # <em>produces:</em>
+  #
+  #  100
+  #  200
+  #
+  # ISO 15.2.13.4.11
+  def each_value(&block)
+    return to_enum :each_value unless block
+
+    self.keys.each{|k| block.call(self[k])}
+    self
+  end
+
+  ##
+  # Replaces the contents of <i>hsh</i> with the contents of other hash
+  #
+  # ISO 15.2.13.4.23
+  def replace(hash)
+    raise TypeError, "Hash required (#{hash.class} given)" unless Hash === hash
+    self.clear
+    hash.each_key{|k|
+      self[k] = hash[k]
+    }
+    if hash.default_proc
+      self.default_proc = hash.default_proc
+    else
+      self.default = hash.default
+    end
+    self
+  end
+  # ISO 15.2.13.4.17
+  alias initialize_copy replace
+
+  ##
+  # Return a hash which contains the content of
+  # +self+ and +other+. If a block is given
+  # it will be called for each element with
+  # a duplicate key. The value of the block
+  # will be the final value of this element.
+  #
+  # ISO 15.2.13.4.22
+  def merge(other, &block)
+    raise TypeError, "Hash required (#{other.class} given)" unless Hash === other
+    h = self.dup
+    if block
+      other.each_key{|k|
+        h[k] = (self.has_key?(k))? block.call(k, self[k], other[k]): other[k]
+      }
+    else
+      other.each_key{|k| h[k] = other[k]}
+    end
+    h
+  end
+
+  # internal method for Hash inspection
+  def _inspect(recur_list)
+    return "{}" if self.size == 0
+    return "{...}" if recur_list[self.object_id]
+    recur_list[self.object_id] = true
+    ary=[]
+    keys=self.keys
+    size=keys.size
+    i=0
+    while i<size
+      k=keys[i]
+      ary<<(k._inspect(recur_list) + "=>" + self[k]._inspect(recur_list))
+      i+=1
+    end
+    "{"+ary.join(", ")+"}"
+  end
+  ##
+  # Return the contents of this hash as a string.
+ #
+  # ISO 15.2.13.4.30 (x)
+  def inspect
+    self._inspect({})
+  end
+  # ISO 15.2.13.4.31 (x)
+  alias to_s inspect
+
+  ##
+  #  call-seq:
+  #     hsh.reject! {| key, value | block }  -> hsh or nil
+  #     hsh.reject!                          -> an_enumerator
+  #
+  #  Equivalent to <code>Hash#delete_if</code>, but returns
+  #  <code>nil</code> if no changes were made.
+  #
+  #  1.8/1.9 Hash#reject! returns Hash; ISO says nothing.
+  #
+  def reject!(&block)
+    return to_enum :reject! unless block
+
+    keys = []
+    self.each{|k,v|
+      if block.call([k, v])
+        keys.push(k)
+      end
+    }
+    return nil if keys.size == 0
+    keys.each{|k|
+      self.delete(k)
+    }
+    self
+  end
+
+  ##
+  #  call-seq:
+  #     hsh.reject {|key, value| block}   -> a_hash
+  #     hsh.reject                        -> an_enumerator
+  #
+  #  Returns a new hash consisting of entries for which the block returns false.
+  #
+  #  If no block is given, an enumerator is returned instead.
+  #
+  #     h = { "a" => 100, "b" => 200, "c" => 300 }
+  #     h.reject {|k,v| k < "b"}  #=> {"b" => 200, "c" => 300}
+  #     h.reject {|k,v| v > 100}  #=> {"a" => 100}
+  #
+  #  1.8/1.9 Hash#reject returns Hash; ISO says nothing.
+  #
+  def reject(&block)
+    return to_enum :reject unless block
+
+    h = {}
+    self.each{|k,v|
+      unless block.call([k, v])
+        h[k] = v
+      end
+    }
+    h
+  end
+
+  ##
+  #  call-seq:
+  #     hsh.select! {| key, value | block }  -> hsh or nil
+  #     hsh.select!                          -> an_enumerator
+  #
+  #  Equivalent to <code>Hash#keep_if</code>, but returns
+  #  <code>nil</code> if no changes were made.
+  #
+  #  1.9 Hash#select! returns Hash; ISO says nothing.
+  #
+  def select!(&block)
+    return to_enum :select! unless block
+
+    keys = []
+    self.each{|k,v|
+      unless block.call([k, v])
+        keys.push(k)
+      end
+    }
+    return nil if keys.size == 0
+    keys.each{|k|
+      self.delete(k)
+    }
+    self
+  end
+
+  ##
+  #  call-seq:
+  #     hsh.select {|key, value| block}   -> a_hash
+  #     hsh.select                        -> an_enumerator
+  #
+  #  Returns a new hash consisting of entries for which the block returns true.
+  #
+  #  If no block is given, an enumerator is returned instead.
+  #
+  #     h = { "a" => 100, "b" => 200, "c" => 300 }
+  #     h.select {|k,v| k > "a"}  #=> {"b" => 200, "c" => 300}
+  #     h.select {|k,v| v < 200}  #=> {"a" => 100}
+  #
+  #  1.9 Hash#select returns Hash; ISO says nothing
+  #
+  def select(&block)
+    return to_enum :select unless block
+
+    h = {}
+    self.each{|k,v|
+      if block.call([k, v])
+        h[k] = v
+      end
+    }
+    h
+  end
+end
+
+##
+# Hash is enumerable
+#
+# ISO 15.2.13.3
+class Hash
+  include Enumerable
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrblib/init_mrblib.c
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrblib/init_mrblib.c	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrblib/init_mrblib.c	(revision 439)
@@ -0,0 +1,11 @@
+#include <mruby.h>
+#include <mruby/irep.h>
+
+extern const uint8_t mrblib_irep[];
+
+void
+mrb_init_mrblib(mrb_state *mrb)
+{
+  mrb_load_irep(mrb, mrblib_irep);
+}
+
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrblib/kernel.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrblib/kernel.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrblib/kernel.rb	(revision 439)
@@ -0,0 +1,50 @@
+##
+# Kernel
+#
+# ISO 15.3.1
+module Kernel
+
+  # 15.3.1.2.1 Kernel.`
+  # provided by Kernel#`
+  # 15.3.1.3.3
+  def `(s)
+    raise NotImplementedError.new("backquotes not implemented")
+  end
+
+  ##
+  # 15.3.1.2.3  Kernel.eval
+  # 15.3.1.3.12 Kernel#eval
+  # NotImplemented by mruby core; use mruby-eval gem
+
+  ##
+  # ISO 15.3.1.2.8 Kernel.loop
+  # provided by Kernel#loop
+
+  ##
+  # Calls the given block repetitively.
+  #
+  # ISO 15.3.1.3.29
+  def loop(&block)
+    return to_enum :loop unless block
+
+    while true
+      yield
+    end
+  rescue StopIteration => e
+    e.result
+  end
+
+  # 11.4.4 Step c)
+  def !~(y)
+    !(self =~ y)
+  end
+
+  # internal method for inspect
+  def _inspect(_recur_list)
+    self.inspect
+  end
+
+  def to_enum(*a)
+    raise NotImplementedError.new("fiber required for enumerator")
+  end
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrblib/mrblib.rake
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrblib/mrblib.rake	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrblib/mrblib.rake	(revision 439)
@@ -0,0 +1,18 @@
+MRuby.each_target do
+  current_dir = File.dirname(__FILE__)
+  relative_from_root = File.dirname(__FILE__).relative_path_from(MRUBY_ROOT)
+  current_build_dir = "#{build_dir}/#{relative_from_root}"
+
+  self.libmruby_objs << objfile("#{current_build_dir}/mrblib")
+
+  file objfile("#{current_build_dir}/mrblib") => "#{current_build_dir}/mrblib.c"
+  file "#{current_build_dir}/mrblib.c" => [mrbcfile, __FILE__] + Dir.glob("#{current_dir}/*.rb").sort do |t|
+    _, _, *rbfiles = t.prerequisites
+    mkdir_p File.dirname(t.name)
+    open(t.name, 'w') do |f|
+      _pp "GEN", "*.rb", "#{t.name.relative_path}"
+      f.puts File.read("#{current_dir}/init_mrblib.c")
+      mrbc.run f, rbfiles, 'mrblib_irep'
+    end
+  end
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrblib/numeric.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrblib/numeric.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrblib/numeric.rb	(revision 439)
@@ -0,0 +1,163 @@
+##
+# Numeric
+#
+# ISO 15.2.7
+class Numeric
+  include Comparable
+  ##
+  # Returns the receiver simply.
+  #
+  # ISO 15.2.7.4.1
+  def +@
+    self
+  end
+
+  ##
+  # Returns the receiver's value, negated.
+  #
+  # ISO 15.2.7.4.2
+  def -@
+    0 - self
+  end
+
+  ##
+  # Returns the absolute value of the receiver.
+  #
+  # ISO 15.2.7.4.3
+  def abs
+    if self < 0
+      -self
+    else
+      self
+    end
+  end
+end
+
+##
+# Integral
+#
+# mruby special - module to share methods between Floats and Integers
+#                 to make them compatible
+module Integral
+  ##
+  # Calls the given block once for each Integer
+  # from +self+ downto +num+.
+  #
+  # ISO 15.2.8.3.15
+  def downto(num, &block)
+    return to_enum(:downto, num) unless block
+
+    i = self.to_i
+    while i >= num
+      block.call(i)
+      i -= 1
+    end
+    self
+  end
+
+  ##
+  # Returns self + 1
+  #
+  # ISO 15.2.8.3.19
+  def next
+    self + 1
+  end
+  # ISO 15.2.8.3.21
+  alias succ next
+
+  ##
+  # Calls the given block +self+ times.
+  #
+  # ISO 15.2.8.3.22
+  def times &block
+    return to_enum :times unless block
+
+    i = 0
+    while i < self
+      block.call i
+      i += 1
+    end
+    self
+  end
+
+  ##
+  # Calls the given block once for each Integer
+  # from +self+ upto +num+.
+  #
+  # ISO 15.2.8.3.27
+  def upto(num, &block)
+    return to_enum(:upto, num) unless block
+
+    i = self.to_i
+    while i <= num
+      block.call(i)
+      i += 1
+    end
+    self
+  end
+
+  ##
+  # Calls the given block from +self+ to +num+
+  # incremented by +step+ (default 1).
+  #
+  def step(num=nil, step=1, &block)
+    raise ArgumentError, "step can't be 0" if step == 0
+    return to_enum(:step, num, step) unless block
+
+    i = __coerce_step_counter(num, step)
+    if num == self || step.infinite?
+      block.call(i) if step > 0 && i <= (num||i) || step < 0 && i >= (num||-i)
+    elsif num == nil
+      while true
+        block.call(i)
+        i += step
+      end
+    elsif step > 0
+      while i <= num
+        block.call(i)
+        i += step
+      end
+    else
+      while i >= num
+        block.call(i)
+        i += step
+      end
+    end
+    self
+  end
+end
+
+##
+# Integer
+#
+# ISO 15.2.8
+class Integer
+  include Integral
+  ##
+  # Returns the receiver simply.
+  #
+  # ISO 15.2.8.3.14
+  def ceil
+    self
+  end
+
+  ##
+  # Returns the receiver simply.
+  #
+  # ISO 15.2.8.3.17
+  def floor
+    self
+  end
+
+  ##
+  # Returns the receiver simply.
+  #
+  # ISO 15.2.8.3.24
+  alias round floor
+
+  ##
+  # Returns the receiver simply.
+  #
+  # ISO 15.2.8.3.26
+  alias truncate floor
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrblib/range.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrblib/range.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrblib/range.rb	(revision 439)
@@ -0,0 +1,67 @@
+##
+# Range
+#
+# ISO 15.2.14
+class Range
+
+  ##
+  # Calls the given block for each element of +self+
+  # and pass the respective element.
+  #
+  # ISO 15.2.14.4.4
+  def each(&block)
+    return to_enum :each unless block
+
+    val = self.first
+    last = self.last
+
+    if val.kind_of?(Fixnum) && last.kind_of?(Fixnum) # fixnums are special
+      lim = last
+      lim += 1 unless exclude_end?
+      i = val
+      while i < lim
+        block.call(i)
+        i += 1
+      end
+      return self
+    end
+
+    if val.kind_of?(String) && last.kind_of?(String) # strings are special
+      if val.respond_to? :upto
+        return val.upto(last, exclude_end?, &block)
+      else
+        str_each = true
+      end
+    end
+
+    raise TypeError, "can't iterate" unless val.respond_to? :succ
+
+    return self if (val <=> last) > 0
+
+    while (val <=> last) < 0
+      block.call(val)
+      val = val.succ
+      if str_each
+        break if val.size > last.size
+      end
+    end
+
+    block.call(val) if !exclude_end? && (val <=> last) == 0
+    self
+  end
+
+  # redefine #hash 15.3.1.3.15
+  def hash
+    h = first.hash ^ last.hash
+    h += 1 if self.exclude_end?
+    h
+  end
+end
+
+##
+# Range is enumerable
+#
+# ISO 15.2.14.3
+class Range
+  include Enumerable
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrblib/string.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrblib/string.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrblib/string.rb	(revision 439)
@@ -0,0 +1,217 @@
+##
+# String
+#
+# ISO 15.2.10
+class String
+  # ISO 15.2.10.3
+  include Comparable
+
+  ##
+  # Calls the given block for each line
+  # and pass the respective line.
+  #
+  # ISO 15.2.10.5.15
+  def each_line(separator = "\n", &block)
+    return to_enum(:each_line, separator) unless block
+
+    if separator.nil?
+      block.call(self)
+      return self
+    end
+    raise TypeError unless separator.is_a?(String)
+
+    paragraph_mode = false
+    if separator.empty?
+      paragraph_mode = true
+      separator = "\n\n"
+    end
+    start = 0
+    string = dup
+    self_len = length
+    sep_len = separator.length
+    should_yield_subclass_instances = self.class != String
+
+    while (pointer = string.index(separator, start))
+      pointer += sep_len
+      pointer += 1 while paragraph_mode && string[pointer] == "\n"
+      if should_yield_subclass_instances
+        block.call(self.class.new(string[start, pointer - start]))
+      else
+        block.call(string[start, pointer - start])
+      end
+      start = pointer
+    end
+    return self if start == self_len
+
+    if should_yield_subclass_instances
+      block.call(self.class.new(string[start, self_len - start]))
+    else
+      block.call(string[start, self_len - start])
+    end
+    self
+  end
+
+  # private method for gsub/sub
+  def __sub_replace(pre, m, post)
+    s = ""
+    i = 0
+    while j = index("\\", i)
+      break if j == length-1
+      t = case self[j+1]
+          when "\\"
+            "\\"
+          when "`"
+            pre
+          when "&", "0"
+            m
+          when "'"
+            post
+          when "1", "2", "3", "4", "5", "6", "7", "8", "9"
+            ""
+          else
+            self[j, 2]
+          end
+      s += self[i, j-i] + t
+      i = j + 2
+    end
+    s + self[i, length-i]
+  end
+
+  ##
+  # Replace all matches of +pattern+ with +replacement+.
+  # Call block (if given) for each match and replace
+  # +pattern+ with the value of the block. Return the
+  # final value.
+  #
+  # ISO 15.2.10.5.18
+  def gsub(*args, &block)
+    return to_enum(:gsub, *args) if args.length == 1 && !block
+    raise ArgumentError, "wrong number of arguments" unless (1..2).include?(args.length)
+
+    pattern, replace = *args
+    plen = pattern.length
+    if args.length == 2 && block
+      block = nil
+    end
+    if !replace.nil? || !block
+      replace.__to_str
+    end
+    offset = 0
+    result = []
+    while found = index(pattern, offset)
+      result << self[offset, found - offset]
+      offset = found + plen
+      result << if block
+        block.call(pattern).to_s
+      else
+        replace.__sub_replace(self[0, found], pattern, self[offset..-1] || "")
+      end
+      if plen == 0
+        result << self[offset, 1]
+        offset += 1
+      end
+    end
+    result << self[offset..-1] if offset < length
+    result.join
+  end
+
+  ##
+  # Replace all matches of +pattern+ with +replacement+.
+  # Call block (if given) for each match and replace
+  # +pattern+ with the value of the block. Modify
+  # +self+ with the final value.
+  #
+  # ISO 15.2.10.5.19
+  def gsub!(*args, &block)
+    raise FrozenError, "can't modify frozen String" if frozen?
+    return to_enum(:gsub!, *args) if args.length == 1 && !block
+    str = self.gsub(*args, &block)
+    return nil unless self.index(args[0])
+    self.replace(str)
+  end
+
+#  ##
+#  # Calls the given block for each match of +pattern+
+#  # If no block is given return an array with all
+#  # matches of +pattern+.
+  ##
+#  # ISO 15.2.10.5.32
+#  def scan(pattern, &block)
+#    # TODO: String#scan is not implemented yet
+#  end
+
+  ##
+  # Replace only the first match of +pattern+ with
+  # +replacement+. Call block (if given) for each
+  # match and replace +pattern+ with the value of the
+  # block. Return the final value.
+  #
+  # ISO 15.2.10.5.36
+  def sub(*args, &block)
+    unless (1..2).include?(args.length)
+      raise ArgumentError, "wrong number of arguments (given #{args.length}, expected 2)"
+    end
+
+    pattern, replace = *args
+    pattern.__to_str
+    if args.length == 2 && block
+      block = nil
+    end
+    unless block
+      replace.__to_str
+    end
+    result = []
+    this = dup
+    found = index(pattern)
+    return this unless found
+    result << this[0, found]
+    offset = found + pattern.length
+    result << if block
+      block.call(pattern).to_s
+    else
+      replace.__sub_replace(this[0, found], pattern, this[offset..-1] || "")
+    end
+    result << this[offset..-1] if offset < length
+    result.join
+  end
+
+  ##
+  # Replace only the first match of +pattern+ with
+  # +replacement+. Call block (if given) for each
+  # match and replace +pattern+ with the value of the
+  # block. Modify +self+ with the final value.
+  #
+  # ISO 15.2.10.5.37
+  def sub!(*args, &block)
+    raise FrozenError, "can't modify frozen String" if frozen?
+    str = self.sub(*args, &block)
+    return nil unless self.index(args[0])
+    self.replace(str)
+  end
+
+  ##
+  # Call the given block for each byte of +self+.
+  def each_byte(&block)
+    return to_enum(:each_byte, &block) unless block
+    bytes = self.bytes
+    pos = 0
+    while pos < bytes.size
+      block.call(bytes[pos])
+      pos += 1
+    end
+    self
+  end
+
+  # those two methods requires Regexp that is optional in mruby
+  ##
+  # ISO 15.2.10.5.3
+  #def =~(re)
+  # re =~ self
+  #end
+
+  ##
+  # ISO 15.2.10.5.27
+  #def match(re, &block)
+  #  re.match(self, &block)
+  #end
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mrblib/symbol.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mrblib/symbol.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mrblib/symbol.rb	(revision 439)
@@ -0,0 +1,7 @@
+class Symbol
+  def to_proc
+    ->(obj,*args,&block) do
+      obj.__send__(self, *args, &block)
+    end
+  end
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/mruby-source.gemspec
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/mruby-source.gemspec	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/mruby-source.gemspec	(revision 439)
@@ -0,0 +1,18 @@
+# coding: utf-8
+lib = File.expand_path('../lib', __FILE__)
+$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
+require 'mruby/source'
+
+Gem::Specification.new do |spec|
+  spec.name          = "mruby-source"
+  spec.version       = MRuby::Source::MRUBY_VERSION
+  spec.authors       = [ MRuby::Source::MRUBY_AUTHOR ]
+
+  spec.summary       = %q{MRuby source code wrapper.}
+  spec.description   = %q{MRuby source code wrapper for use with Ruby libs.}
+  spec.homepage      = "https://mruby.org"
+  spec.license       = "MIT"
+
+  spec.files         = `git ls-files -z`.split("\x0")
+  spec.require_paths = ["lib"]
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/oss-fuzz/config/mruby.dict
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/oss-fuzz/config/mruby.dict	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/oss-fuzz/config/mruby.dict	(revision 439)
@@ -0,0 +1,105 @@
+keyword___ENCODING__="__ENCODING__"
+keyword___FILE__="__FILE__"
+keyword___LINE__="__LINE__"
+keyword_BEGIN="BEGIN"
+keyword_END="END"
+keyword_alias="alias"
+keyword_and="and"
+keyword_begin="begin"
+keyword_break="break"
+keyword_case="case"
+keyword_class="class"
+keyword_def="def"
+keyword_do="do"
+keyword_else="else"
+keyword_elsif="elsif"
+keyword_end="end"
+keyword_ensure="ensure"
+keyword_false="false"
+keyword_for="for"
+keyword_if="if"
+keyword_in="in"
+keyword_module="module"
+keyword_next="next"
+keyword_nil="nil"
+keyword_not="not"
+keyword_or="or"
+keyword_redo="redo"
+keyword_rescue="rescue"
+keyword_retry="retry"
+keyword_return="return"
+keyword_self="self"
+keyword_super="super"
+keyword_then="then"
+keyword_true="true"
+keyword_undef="undef"
+keyword_unless="unless"
+keyword_until="until"
+keyword_when="when"
+keyword_while="while"
+keyword_yield="yield"
+
+operator_a=" !"
+operator_b=" ~"
+operator_c=" +"
+operator_d=" -"
+operator_e=" []"
+operator_f=" []="
+operator_g=" *"
+operator_h=" /"
+operator_i=" %"
+operator_j=" +-"
+operator_k=" >>"
+operator_l=" <<"
+operator_m=" &"
+operator_n=" ^"
+operator_o=" |"
+operator_p=" <="
+operator_q=" <>"
+operator_r=" >="
+operator_s=" <=>"
+operator_t=" =="
+operator_u=" ==="
+operator_v=" !="
+operator_w=" =~"
+operator_x=" !~"
+operator_y=" &&"
+operator_z=" ||"
+operator_aa=" .."
+operator_ab=" ..."
+operator_ac=" ?"
+operator_ad=" :"
+operator_ae=" ="
+operator_af=" %="
+operator_ag=" /="
+operator_ah=" -="
+operator_ai=" +="
+operator_aj=" |="
+operator_ak=" &="
+operator_al=" >>="
+operator_am=" <<="
+operator_an=" *="
+operator_ao=" &&="
+operator_ap=" ||="
+operator_aq=" **="
+operator_ar=" ^="
+operator_as=" not"
+operator_at=" or"
+operator_au=" and"
+operator_av=" if"
+operator_aw=" unless"
+operator_ax=" while"
+operator_ay=" until"
+operator_az=" begin"
+operator_ba=" end"
+
+snippet_1eq1=" 1=1"
+snippet_dollar=" $1"
+snippet_at=" @a"
+snippet_symbol=" :a"
+snippet_array=" [1,2]"
+snippet_block=" 1.times{|x| x}"
+snippet_multi=" 1*1"
+
+string_single_q=" 'a'"
+string_dbl_q=" \"a\""
Index: /EcnlProtoTool/trunk/mruby-2.1.1/oss-fuzz/config/mruby_fuzzer.options
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/oss-fuzz/config/mruby_fuzzer.options	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/oss-fuzz/config/mruby_fuzzer.options	(revision 439)
@@ -0,0 +1,5 @@
+[libfuzzer]
+close_fd_mask = 3
+dict = mruby.dict
+fork = 1
+only_ascii = 1
Index: /EcnlProtoTool/trunk/mruby-2.1.1/oss-fuzz/config/mruby_proto_fuzzer.options
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/oss-fuzz/config/mruby_proto_fuzzer.options	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/oss-fuzz/config/mruby_proto_fuzzer.options	(revision 439)
@@ -0,0 +1,4 @@
+[libfuzzer]
+close_fd_mask = 3
+dict = mruby.dict
+fork = 1
Index: /EcnlProtoTool/trunk/mruby-2.1.1/oss-fuzz/mruby_fuzzer.c
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/oss-fuzz/mruby_fuzzer.c	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/oss-fuzz/mruby_fuzzer.c	(revision 439)
@@ -0,0 +1,18 @@
+#include <stdlib.h>
+#include <string.h>
+#include <mruby.h>
+#include <mruby/compile.h>
+
+int LLVMFuzzerTestOneInput(uint8_t *Data, size_t size) {
+    if (size < 1) {
+        return 0;
+    }
+    char *code = malloc(size+1);
+    memcpy(code, Data, size);
+    code[size] = '\0';
+    mrb_state *mrb = mrb_open();
+    mrb_load_string(mrb, code);
+    mrb_close(mrb);
+    free(code);
+    return 0;
+}
Index: /EcnlProtoTool/trunk/mruby-2.1.1/oss-fuzz/mruby_proto_fuzzer.cpp
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/oss-fuzz/mruby_proto_fuzzer.cpp	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/oss-fuzz/mruby_proto_fuzzer.cpp	(revision 439)
@@ -0,0 +1,44 @@
+#include <string>
+#include <iostream>
+#include <fstream>
+
+#include <mruby.h>
+#include <mruby/compile.h>
+
+#include "libprotobuf-mutator/src/libfuzzer/libfuzzer_macro.h"
+#include "ruby.pb.h"
+#include "proto_to_ruby.h"
+
+using namespace ruby_fuzzer;
+using namespace std;
+
+int FuzzRB(const uint8_t *Data, size_t size) {
+	mrb_value v;
+	mrb_state *mrb = mrb_open();
+	if (!mrb)
+		return 0;
+
+	char *code = (char *)malloc(size+1);
+	if (!code)
+		return 0;
+	memcpy(code, Data, size);
+	code[size] = '\0';
+
+	if (const char *dump_path = getenv("PROTO_FUZZER_DUMP_PATH")) {
+		// With libFuzzer binary run this to generate an RB file x.rb:
+		// PROTO_FUZZER_DUMP_PATH=x.rb ./a.out proto-input
+		std::ofstream of(dump_path);
+		of.write(code, size);
+	}
+	v = mrb_load_string(mrb, code);
+	mrb_close(mrb);
+
+	free(code);
+	return 0;
+}
+
+DEFINE_PROTO_FUZZER(const Function &function) {
+	protoConverter converter;
+	auto s = converter.FunctionToString(function);
+	(void)FuzzRB((const uint8_t*)s.data(), s.size());
+}
Index: /EcnlProtoTool/trunk/mruby-2.1.1/oss-fuzz/proto_to_ruby.cpp
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/oss-fuzz/proto_to_ruby.cpp	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/oss-fuzz/proto_to_ruby.cpp	(revision 439)
@@ -0,0 +1,455 @@
+#include "proto_to_ruby.h"
+
+using namespace ruby_fuzzer;
+
+std::string protoConverter::removeSpecial(const std::string &x)
+{
+	std::string tmp(x);
+	if (!tmp.empty())
+		tmp.erase(std::remove_if(tmp.begin(), tmp.end(),
+		                         [](char c) { return !(std::isalpha(c) || std::isdigit(c)); } ), tmp.end());
+	return tmp;
+}
+
+void protoConverter::visit(ArrType const& x)
+{
+	if (x.elements_size() > 0) {
+		int i = x.elements_size();
+		m_output << "[";
+		for (auto &e : x.elements()) {
+			i--;
+			if (i == 0) {
+				visit(e);
+			} else {
+				visit(e);
+				m_output << ", ";
+			}
+		}
+		m_output << "]";
+	} else {
+		m_output << "[1]";
+	}
+}
+
+void protoConverter::visit(Array const& x)
+{
+	switch (x.arr_func()) {
+		case Array::FLATTEN:
+			visit(x.arr_arg());
+			m_output << ".flatten";
+			break;
+		case Array::COMPACT:
+			visit(x.arr_arg());
+			m_output << ".compact";
+			break;
+		case Array::FETCH:
+			visit(x.arr_arg());
+			m_output << ".fetch";
+			break;
+		case Array::FILL:
+			visit(x.arr_arg());
+			m_output << ".fill";
+			break;
+		case Array::ROTATE:
+			visit(x.arr_arg());
+			m_output << ".rotate";
+			break;
+		case Array::ROTATE_E:
+			visit(x.arr_arg());
+			m_output << ".rotate!";
+			break;
+		case Array::DELETEIF:
+			visit(x.arr_arg());
+			m_output << ".delete_if";
+			break;
+		case Array::INSERT:
+			visit(x.arr_arg());
+			m_output << ".insert";
+			break;
+		case Array::BSEARCH:
+			visit(x.arr_arg());
+			m_output << ".bsearch";
+			break;
+		case Array::KEEPIF:
+			visit(x.arr_arg());
+			m_output << ".keep_if";
+			break;
+		case Array::SELECT:
+			visit(x.arr_arg());
+			m_output << ".select";
+			break;
+		case Array::VALUES_AT:
+			visit(x.arr_arg());
+			m_output << ".values_at";
+			break;
+		case Array::BLOCK:
+			visit(x.arr_arg());
+			m_output << ".index";
+			break;
+		case Array::DIG:
+			visit(x.arr_arg());
+			m_output << ".dig";
+			break;
+		case Array::SLICE:
+			visit(x.arr_arg());
+			m_output << ".slice";
+			break;
+		case Array::PERM:
+			visit(x.arr_arg());
+			m_output << ".permutation";
+			break;
+		case Array::COMB:
+			visit(x.arr_arg());
+			m_output << ".combination";
+			break;
+		case Array::ASSOC:
+			visit(x.arr_arg());
+			m_output << ".assoc";
+			break;
+		case Array::RASSOC:
+			visit(x.arr_arg());
+			m_output << ".rassoc";
+			break;
+	}
+	m_output << "(";
+	visit(x.val_arg());
+	m_output << ")";
+}
+
+void protoConverter::visit(AssignmentStatement const& x)
+{
+	m_output << "var_" << m_numLiveVars << " = ";
+	visit(x.rvalue());
+	m_numVarsPerScope.top()++;
+	m_numLiveVars++;
+	m_output << "\n";
+}
+
+void protoConverter::visit(BinaryOp const& x)
+{
+	m_output << "(";
+	visit(x.left());
+	switch (x.op()) {
+		case BinaryOp::ADD: m_output << " + "; break;
+		case BinaryOp::SUB: m_output << " - "; break;
+		case BinaryOp::MUL: m_output << " * "; break;
+		case BinaryOp::DIV: m_output << " / "; break;
+		case BinaryOp::MOD: m_output << " % "; break;
+		case BinaryOp::XOR: m_output << " ^ "; break;
+		case BinaryOp::AND: m_output << " and "; break;
+		case BinaryOp::OR: m_output << " or "; break;
+		case BinaryOp::EQ: m_output << " == "; break;
+		case BinaryOp::NE: m_output << " != "; break;
+		case BinaryOp::LE: m_output << " <= "; break;
+		case BinaryOp::GE: m_output << " >= "; break;
+		case BinaryOp::LT: m_output << " < "; break;
+		case BinaryOp::GT: m_output << " > "; break;
+		case BinaryOp::RS: m_output << " >> "; break;
+	}
+	visit(x.right());
+	m_output << ")";
+}
+
+void protoConverter::visit(BuiltinFuncs const& x)
+{
+	switch (x.bifunc_oneof_case()) {
+		case BuiltinFuncs::kOs:
+			visit(x.os());
+			break;
+		case BuiltinFuncs::kTime:
+			visit(x.time());
+			break;
+		case BuiltinFuncs::kArr:
+			visit(x.arr());
+			break;
+		case BuiltinFuncs::kMops:
+			visit(x.mops());
+			break;
+		case BuiltinFuncs::BIFUNC_ONEOF_NOT_SET:
+			m_output << "1";
+			break;
+	}
+	m_output << "\n";
+}
+
+void protoConverter::visit(Const const& x)
+{
+	switch (x.const_oneof_case()) {
+		case Const::kIntLit:
+			m_output << "(" << (x.int_lit() % 13) << ")";
+			break;
+		case Const::kBoolVal:
+			m_output << "(" << x.bool_val() << ")";
+			break;
+		case Const::CONST_ONEOF_NOT_SET:
+			m_output << "1";
+			break;
+	}
+}
+
+void protoConverter::visit(Function const& x)
+{
+	m_output << "def foo()\nvar_0 = 1\n";
+	visit(x.statements());
+	m_output << "end\n";
+	m_output << "foo\n";
+}
+
+void protoConverter::visit(HashType const& x)
+{
+	if (x.keyval_size() > 0) {
+		int i = x.keyval_size();
+		m_output << "{";
+		for (auto &e : x.keyval()) {
+			i--;
+			if (i == 0) {
+				visit(e);
+			}
+			else {
+				visit(e);
+				m_output << ", ";
+			}
+		}
+		m_output << "}";
+	}
+}
+
+void protoConverter::visit(IfElse const& x)
+{
+	m_output << "if ";
+	visit(x.cond());
+	m_output << "\n";
+	visit(x.if_body());
+	m_output << "\nelse\n";
+	visit(x.else_body());
+	m_output << "\nend\n";
+}
+
+void protoConverter::visit(KVPair const& x)
+{
+	m_output << "\"" << removeSpecial(x.key()) << "\"";
+	m_output << " => ";
+	m_output << "\"" << removeSpecial(x.val()) << "\"";
+}
+
+void protoConverter::visit(MathConst const& x)
+{
+	switch (x.math_const()) {
+		case MathConst::PI:
+			m_output << "Math::PI";
+			break;
+		case MathConst::E:
+			m_output << "Math::E";
+			break;
+	}
+}
+
+void protoConverter::visit(MathOps const& x)
+{
+	switch (x.math_op()) {
+		case MathOps::CBRT:
+			m_output << "Math.cbrt(";
+			visit(x.math_arg());
+			m_output << ")";
+			break;
+		case MathOps::COS:
+			m_output << "Math.cos(";
+			visit(x.math_arg());
+			m_output << ")";
+			break;
+		case MathOps::ERF:
+			m_output << "Math.erf(";
+			visit(x.math_arg());
+			m_output << ")";
+			break;
+		case MathOps::ERFC:
+			m_output << "Math.erfc(";
+			visit(x.math_arg());
+			m_output << ")";
+			break;
+		case MathOps::LOG:
+			m_output << "Math.log(";
+			visit(x.math_arg());
+			m_output << ")";
+			break;
+		case MathOps::LOG10:
+			m_output << "Math.log10(";
+			visit(x.math_arg());
+			m_output << ")";
+			break;
+		case MathOps::LOG2:
+			m_output << "Math.log2(";
+			visit(x.math_arg());
+			m_output << ")";
+			break;
+		case MathOps::SIN:
+			m_output << "Math.sin(";
+			visit(x.math_arg());
+			m_output << ")";
+			break;
+		case MathOps::SQRT:
+			m_output << "Math.sqrt(";
+			visit(x.math_arg());
+			m_output << ")";
+			break;
+		case MathOps::TAN:
+			m_output << "Math.tan(";
+			visit(x.math_arg());
+			m_output << ")";
+			break;
+	}
+}
+
+void protoConverter::visit(MathType const& x)
+{
+	switch (x.math_arg_oneof_case()) {
+		case MathType::kMathRval:
+			visit(x.math_rval());
+			break;
+		case MathType::kMathConst:
+			visit(x.math_const());
+			break;
+		case MathType::MATH_ARG_ONEOF_NOT_SET:
+			m_output << "1";
+			break;
+	}
+}
+
+void protoConverter::visit(ObjectSpace const& x)
+{
+	switch (x.os_func()) {
+		case ObjectSpace::COUNT:
+			m_output << "ObjectSpace.count_objects";
+			break;
+	}
+	m_output << "(";
+	visit(x.os_arg());
+	m_output << ")" << "\n";
+}
+
+void protoConverter::visit(Rvalue const& x)
+{
+	switch (x.rvalue_oneof_case()) {
+		case Rvalue::kVarref:
+			visit(x.varref());
+			break;
+		case Rvalue::kCons:
+			visit(x.cons());
+			break;
+		case Rvalue::kBinop:
+			visit(x.binop());
+			break;
+		case Rvalue::RVALUE_ONEOF_NOT_SET:
+			m_output << "1";
+			break;
+	}
+}
+
+void protoConverter::visit(Statement const& x)
+{
+	switch (x.stmt_oneof_case()) {
+		case Statement::kAssignment:
+			visit(x.assignment());
+			break;
+		case Statement::kIfelse:
+			visit(x.ifelse());
+			break;
+		case Statement::kTernaryStmt:
+			visit(x.ternary_stmt());
+			break;
+		case Statement::kBuiltins:
+			visit(x.builtins());
+			break;
+		case Statement::kBlockstmt:
+			visit(x.blockstmt());
+			break;
+		case Statement::STMT_ONEOF_NOT_SET:
+			break;
+	}
+	m_output << "\n";
+}
+
+void protoConverter::visit(StatementSeq const& x)
+{
+	if (x.statements_size() > 0) {
+		m_numVarsPerScope.push(0);
+		m_output << "@scope ||= begin\n";
+		for (auto &st : x.statements())
+			visit(st);
+		m_output << "end\n";
+		m_numLiveVars -= m_numVarsPerScope.top();
+		m_numVarsPerScope.pop();
+	}
+}
+
+void protoConverter::visit(StringExtNoArg const& x)
+{
+	m_output << "\"" << removeSpecial(x.str_arg()) << "\"";
+	switch (x.str_op()) {
+		case StringExtNoArg::DUMP:
+			m_output << ".dump";
+			break;
+		case StringExtNoArg::STRIP:
+			m_output << ".strip";
+			break;
+		case StringExtNoArg::LSTRIP:
+			m_output << ".lstrip";
+			break;
+		case StringExtNoArg::RSTRIP:
+			m_output << ".rstrip";
+			break;
+		case StringExtNoArg::STRIPE:
+			m_output << ".strip!";
+			break;
+		case StringExtNoArg::LSTRIPE:
+			m_output << ".lstrip!";
+			break;
+		case StringExtNoArg::RSTRIPE:
+			m_output << ".rstrip!";
+			break;
+		case StringExtNoArg::SWAPCASE:
+			m_output << ".swapcase";
+			break;
+		case StringExtNoArg::SWAPCASEE:
+			m_output << ".swapcase!";
+			break;
+		case StringExtNoArg::SQUEEZE:
+			m_output << ".squeeze";
+			break;
+	}
+}
+
+void protoConverter::visit(Ternary const& x)
+{
+	m_output << "(";
+	visit(x.tern_cond());
+	m_output << " ? ";
+	visit(x.t_branch());
+	m_output << " : ";
+	visit(x.f_branch());
+	m_output << ")\n";
+}
+
+void protoConverter::visit(Time const& x)
+{
+	switch (x.t_func()) {
+		case Time::AT:
+			m_output << "Time.at";
+			break;
+		case Time::GM:
+			m_output << "Time.gm";
+			break;
+	}
+	m_output << "(" << (x.t_arg()% 13) << ")" << "\n";
+}
+
+void protoConverter::visit(VarRef const& x)
+{
+	m_output << "var_" << (static_cast<uint32_t>(x.varnum()) % m_numLiveVars);
+}
+
+std::string protoConverter::FunctionToString(Function const& input)
+{
+	visit(input);
+	return m_output.str();
+}
Index: /EcnlProtoTool/trunk/mruby-2.1.1/oss-fuzz/proto_to_ruby.h
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/oss-fuzz/proto_to_ruby.h	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/oss-fuzz/proto_to_ruby.h	(revision 439)
@@ -0,0 +1,55 @@
+#include <cstdint>
+#include <cstddef>
+#include <string>
+#include <ostream>
+#include <sstream>
+#include <stack>
+#include "ruby.pb.h"
+
+namespace ruby_fuzzer {
+	class protoConverter
+	{
+	public:
+		protoConverter() {
+			m_numLiveVars = 1;
+			m_numVarsPerScope.push(m_numLiveVars);
+		}
+		protoConverter(protoConverter const& x) {
+			m_numLiveVars = x.m_numLiveVars;
+			m_numVarsPerScope = x.m_numVarsPerScope;
+		}
+		~protoConverter() {}
+		std::string FunctionToString(Function const& _input);
+
+	private:
+		void visit(ArrType const&);
+		void visit(Array const&);
+		void visit(AssignmentStatement const&);
+		void visit(BinaryOp const&);
+		void visit(BuiltinFuncs const&);
+		void visit(Const const&);
+		void visit(Function const&);
+		void visit(HashType const&);
+		void visit(IfElse const&);
+		void visit(KVPair const&);
+		void visit(MathConst const&);
+		void visit(MathOps const&);
+		void visit(MathType const&);
+		void visit(ObjectSpace const&);
+		void visit(Rvalue const&);
+		void visit(Statement const&);
+		void visit(StatementSeq const&);
+		void visit(StringExtNoArg const&);
+		void visit(Ternary const&);
+		void visit(Time const&);
+		void visit(VarRef const&);
+		template <class T>
+		void visit(google::protobuf::RepeatedPtrField<T> const& _repeated_field);
+
+		std::string removeSpecial(const std::string &x);
+
+		std::ostringstream m_output;
+		std::stack<uint8_t> m_numVarsPerScope;
+		int32_t m_numLiveVars;
+	};
+}
Index: /EcnlProtoTool/trunk/mruby-2.1.1/oss-fuzz/ruby.proto
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/oss-fuzz/ruby.proto	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/oss-fuzz/ruby.proto	(revision 439)
@@ -0,0 +1,201 @@
+syntax = "proto2";
+
+message VarRef {
+  required int32 varnum = 1;
+}
+
+message ArrType {
+    repeated Const elements = 1;
+}
+
+message KVPair {
+    required string key = 1;
+    required string val = 2;
+}
+
+message HashType {
+    repeated KVPair keyval = 1;
+}
+
+message StringExtNoArg {
+  enum StrExtOp {
+    DUMP = 0;
+    STRIP = 1;
+    LSTRIP = 2;
+    RSTRIP = 3;
+    STRIPE = 4;
+    LSTRIPE = 5;
+    RSTRIPE = 6;
+    SWAPCASE = 7;
+    SWAPCASEE = 8;
+    SQUEEZE = 9;
+  }
+  required StrExtOp str_op = 1;
+  required string str_arg = 2;
+}
+
+message MathConst {
+    enum MathConstLit {
+        PI = 0;
+        E = 1;
+    }
+    required MathConstLit math_const = 1;
+}
+
+message Const {
+    oneof const_oneof {
+        uint32 int_lit = 1;
+        bool bool_val = 4;
+    }
+}
+
+message BinaryOp {
+  enum Op {
+    ADD = 0;
+    SUB = 1;
+    MUL = 2;
+    DIV = 3;
+    MOD = 4;
+    XOR = 5;
+    AND = 6;
+    OR = 7;
+    EQ = 8;
+    NE = 9;
+    LE = 10;
+    GE = 11;
+    LT = 12;
+    GT = 13;
+    RS = 14;
+  };
+  required Op op = 1;
+  required Rvalue left = 2;
+  required Rvalue right = 3;
+}
+
+message Rvalue {
+  oneof rvalue_oneof {
+    VarRef varref = 1;
+    Const cons = 2;
+    BinaryOp binop = 3;
+  }
+}
+
+message AssignmentStatement {
+  required Rvalue rvalue = 2;
+}
+
+
+message IfElse {
+  required Rvalue cond = 1;
+  required StatementSeq if_body = 2;
+  required StatementSeq else_body = 3;
+}
+
+//TODO: Add Switch statement
+//message Switch {
+//    required Rvalue switch_var = 1;
+//    repeated Rvalue cond = 2;
+//}
+
+message Ternary {
+    required Rvalue tern_cond = 1;
+    required Rvalue t_branch = 2;
+    required Rvalue f_branch = 3;
+}
+
+message ObjectSpace {
+    enum OS_methods {
+        COUNT = 1;
+    }
+    required OS_methods os_func = 1;
+    required HashType os_arg = 2;
+}
+
+message Time {
+    enum T_methods {
+        AT = 1;
+        GM = 2;
+    }
+    required T_methods t_func = 1;
+    required uint32 t_arg = 2;
+}
+
+message Array {
+    enum Arr_methods {
+        FLATTEN = 1;
+        COMPACT = 2;
+        FETCH = 3;
+        FILL = 4;
+        ROTATE = 5;
+        ROTATE_E = 6;
+        DELETEIF = 7;
+        INSERT = 8;
+        BSEARCH = 9;
+        KEEPIF = 10;
+        SELECT = 11;
+        VALUES_AT = 12;
+        BLOCK = 13;
+        DIG = 14;
+        SLICE = 15;
+        PERM = 16;
+        COMB = 17;
+        ASSOC = 18;
+        RASSOC = 19;
+    }
+    required Arr_methods arr_func = 1;
+    required ArrType  arr_arg = 2;
+    required Rvalue   val_arg = 3;
+}
+
+message MathType {
+    oneof math_arg_oneof {
+        Rvalue math_rval = 2;
+        MathConst math_const = 3;
+    }
+}
+
+message MathOps {
+    enum Mops {
+      CBRT = 1;
+      COS = 2;
+      ERF = 3;
+      ERFC = 4;
+      LOG = 5;
+      LOG10 = 6;
+      LOG2 = 7;
+      SIN = 8;
+      SQRT = 9;
+      TAN = 10;
+    }
+    required Mops math_op = 1;
+    required MathType math_arg = 2;
+}
+
+message BuiltinFuncs {
+    oneof bifunc_oneof {
+        ObjectSpace os = 1;
+        Time time = 2;
+        Array arr = 3;
+        MathOps mops = 4;
+    }
+}
+
+message Statement {
+  oneof stmt_oneof {
+    AssignmentStatement assignment = 1;
+    IfElse              ifelse     = 2;
+    Ternary             ternary_stmt = 3;
+    BuiltinFuncs        builtins = 4;
+    StatementSeq        blockstmt = 5;
+  }
+}
+
+message StatementSeq {
+  repeated Statement statements = 1;
+}
+
+message Function {
+  required StatementSeq statements = 1;
+}
+
+package ruby_fuzzer;
Index: /EcnlProtoTool/trunk/mruby-2.1.1/src/array.c
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/src/array.c	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/src/array.c	(revision 439)
@@ -0,0 +1,1354 @@
+/*
+** array.c - Array class
+**
+** See Copyright Notice in mruby.h
+*/
+
+#include <mruby.h>
+#include <mruby/array.h>
+#include <mruby/class.h>
+#include <mruby/string.h>
+#include <mruby/range.h>
+#include <mruby/proc.h>
+#include <mruby/opcode.h>
+#include "value_array.h"
+
+#define ARY_DEFAULT_LEN   4
+#define ARY_SHRINK_RATIO  5 /* must be larger than 2 */
+#define ARY_C_MAX_SIZE (SIZE_MAX / sizeof(mrb_value))
+#define ARY_MAX_SIZE ((mrb_int)((ARY_C_MAX_SIZE < (size_t)MRB_INT_MAX) ? ARY_C_MAX_SIZE : MRB_INT_MAX-1))
+
+static struct RArray*
+ary_new_capa(mrb_state *mrb, mrb_int capa)
+{
+  struct RArray *a;
+  size_t blen;
+
+  if (capa > ARY_MAX_SIZE) {
+    mrb_raise(mrb, E_ARGUMENT_ERROR, "array size too big");
+  }
+  blen = capa * sizeof(mrb_value);
+
+  a = (struct RArray*)mrb_obj_alloc(mrb, MRB_TT_ARRAY, mrb->array_class);
+  if (capa <= MRB_ARY_EMBED_LEN_MAX) {
+    ARY_SET_EMBED_LEN(a, 0);
+  }
+  else {
+    a->as.heap.ptr = (mrb_value *)mrb_malloc(mrb, blen);
+    a->as.heap.aux.capa = capa;
+    a->as.heap.len = 0;
+  }
+
+  return a;
+}
+
+MRB_API mrb_value
+mrb_ary_new_capa(mrb_state *mrb, mrb_int capa)
+{
+  struct RArray *a = ary_new_capa(mrb, capa);
+  return mrb_obj_value(a);
+}
+
+MRB_API mrb_value
+mrb_ary_new(mrb_state *mrb)
+{
+  return mrb_ary_new_capa(mrb, 0);
+}
+
+/*
+ * to copy array, use this instead of memcpy because of portability
+ * * gcc on ARM may fail optimization of memcpy
+ *   http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.faqs/ka3934.html
+ * * gcc on MIPS also fail
+ *   http://gcc.gnu.org/bugzilla/show_bug.cgi?id=39755
+ * * memcpy doesn't exist on freestanding environment
+ *
+ * If you optimize for binary size, use memcpy instead of this at your own risk
+ * of above portability issue.
+ *
+ * see also http://togetter.com/li/462898
+ *
+ */
+static inline void
+array_copy(mrb_value *dst, const mrb_value *src, mrb_int size)
+{
+  mrb_int i;
+
+  for (i = 0; i < size; i++) {
+    dst[i] = src[i];
+  }
+}
+
+static struct RArray*
+ary_new_from_values(mrb_state *mrb, mrb_int size, const mrb_value *vals)
+{
+  struct RArray *a = ary_new_capa(mrb, size);
+
+  array_copy(ARY_PTR(a), vals, size);
+  ARY_SET_LEN(a, size);
+
+  return a;
+}
+
+MRB_API mrb_value
+mrb_ary_new_from_values(mrb_state *mrb, mrb_int size, const mrb_value *vals)
+{
+  struct RArray *a = ary_new_from_values(mrb, size, vals);
+  return mrb_obj_value(a);
+}
+
+MRB_API mrb_value
+mrb_assoc_new(mrb_state *mrb, mrb_value car, mrb_value cdr)
+{
+  struct RArray *a;
+
+  a = ary_new_capa(mrb, 2);
+  ARY_PTR(a)[0] = car;
+  ARY_PTR(a)[1] = cdr;
+  ARY_SET_LEN(a, 2);
+  return mrb_obj_value(a);
+}
+
+static void
+ary_fill_with_nil(mrb_value *ptr, mrb_int size)
+{
+  mrb_value nil = mrb_nil_value();
+
+  while (size--) {
+    *ptr++ = nil;
+  }
+}
+
+static void
+ary_modify_check(mrb_state *mrb, struct RArray *a)
+{
+  mrb_check_frozen(mrb, a);
+}
+
+static void
+ary_modify(mrb_state *mrb, struct RArray *a)
+{
+  ary_modify_check(mrb, a);
+
+  if (ARY_SHARED_P(a)) {
+    mrb_shared_array *shared = a->as.heap.aux.shared;
+
+    if (shared->refcnt == 1 && a->as.heap.ptr == shared->ptr) {
+      a->as.heap.ptr = shared->ptr;
+      a->as.heap.aux.capa = a->as.heap.len;
+      mrb_free(mrb, shared);
+    }
+    else {
+      mrb_value *ptr, *p;
+      mrb_int len;
+
+      p = a->as.heap.ptr;
+      len = a->as.heap.len * sizeof(mrb_value);
+      ptr = (mrb_value *)mrb_malloc(mrb, len);
+      if (p) {
+        array_copy(ptr, p, a->as.heap.len);
+      }
+      a->as.heap.ptr = ptr;
+      a->as.heap.aux.capa = a->as.heap.len;
+      mrb_ary_decref(mrb, shared);
+    }
+    ARY_UNSET_SHARED_FLAG(a);
+  }
+}
+
+MRB_API void
+mrb_ary_modify(mrb_state *mrb, struct RArray* a)
+{
+  mrb_write_barrier(mrb, (struct RBasic*)a);
+  ary_modify(mrb, a);
+}
+
+static void
+ary_make_shared(mrb_state *mrb, struct RArray *a)
+{
+  if (!ARY_SHARED_P(a) && !ARY_EMBED_P(a)) {
+    mrb_shared_array *shared = (mrb_shared_array *)mrb_malloc(mrb, sizeof(mrb_shared_array));
+    mrb_value *ptr = a->as.heap.ptr;
+    mrb_int len = a->as.heap.len;
+
+    shared->refcnt = 1;
+    if (a->as.heap.aux.capa > len) {
+      a->as.heap.ptr = shared->ptr = (mrb_value *)mrb_realloc(mrb, ptr, sizeof(mrb_value)*len+1);
+    }
+    else {
+      shared->ptr = ptr;
+    }
+    shared->len = len;
+    a->as.heap.aux.shared = shared;
+    ARY_SET_SHARED_FLAG(a);
+  }
+}
+
+static void
+ary_expand_capa(mrb_state *mrb, struct RArray *a, mrb_int len)
+{
+  mrb_int capa = ARY_CAPA(a);
+
+  if (len > ARY_MAX_SIZE || len < 0) {
+  size_error:
+    mrb_raise(mrb, E_ARGUMENT_ERROR, "array size too big");
+  }
+
+  if (capa < ARY_DEFAULT_LEN) {
+    capa = ARY_DEFAULT_LEN;
+  }
+  while (capa < len) {
+    if (capa <= ARY_MAX_SIZE / 2) {
+      capa *= 2;
+    }
+    else {
+      capa = len;
+    }
+  }
+  if (capa < len || capa > ARY_MAX_SIZE) {
+    goto size_error;
+  }
+
+  if (ARY_EMBED_P(a)) {
+    mrb_value *ptr = ARY_EMBED_PTR(a);
+    mrb_int len = ARY_EMBED_LEN(a);
+    mrb_value *expanded_ptr = (mrb_value *)mrb_malloc(mrb, sizeof(mrb_value)*capa);
+
+    ARY_UNSET_EMBED_FLAG(a);
+    array_copy(expanded_ptr, ptr, len);
+    a->as.heap.len = len;
+    a->as.heap.aux.capa = capa;
+    a->as.heap.ptr = expanded_ptr;
+  }
+  else if (capa > a->as.heap.aux.capa) {
+    mrb_value *expanded_ptr = (mrb_value *)mrb_realloc(mrb, a->as.heap.ptr, sizeof(mrb_value)*capa);
+
+    a->as.heap.aux.capa = capa;
+    a->as.heap.ptr = expanded_ptr;
+  }
+}
+
+static void
+ary_shrink_capa(mrb_state *mrb, struct RArray *a)
+{
+
+  mrb_int capa;
+
+  if (ARY_EMBED_P(a)) return;
+
+  capa = a->as.heap.aux.capa;
+  if (capa < ARY_DEFAULT_LEN * 2) return;
+  if (capa <= a->as.heap.len * ARY_SHRINK_RATIO) return;
+
+  do {
+    capa /= 2;
+    if (capa < ARY_DEFAULT_LEN) {
+      capa = ARY_DEFAULT_LEN;
+      break;
+    }
+  } while (capa > a->as.heap.len * ARY_SHRINK_RATIO);
+
+  if (capa > a->as.heap.len && capa < a->as.heap.aux.capa) {
+    a->as.heap.aux.capa = capa;
+    a->as.heap.ptr = (mrb_value *)mrb_realloc(mrb, a->as.heap.ptr, sizeof(mrb_value)*capa);
+  }
+}
+
+MRB_API mrb_value
+mrb_ary_resize(mrb_state *mrb, mrb_value ary, mrb_int new_len)
+{
+  mrb_int old_len;
+  struct RArray *a = mrb_ary_ptr(ary);
+
+  ary_modify(mrb, a);
+  old_len = RARRAY_LEN(ary);
+  if (old_len != new_len) {
+    if (new_len < old_len) {
+      ary_shrink_capa(mrb, a);
+    }
+    else {
+      ary_expand_capa(mrb, a, new_len);
+      ary_fill_with_nil(ARY_PTR(a) + old_len, new_len - old_len);
+    }
+    ARY_SET_LEN(a, new_len);
+  }
+
+  return ary;
+}
+
+static mrb_value
+mrb_ary_s_create(mrb_state *mrb, mrb_value klass)
+{
+  mrb_value ary;
+  mrb_value *vals;
+  mrb_int len;
+  struct RArray *a;
+
+  mrb_get_args(mrb, "*!", &vals, &len);
+  ary = mrb_ary_new_from_values(mrb, len, vals);
+  a = mrb_ary_ptr(ary);
+  a->c = mrb_class_ptr(klass);
+
+  return ary;
+}
+
+static void ary_replace(mrb_state*, struct RArray*, struct RArray*);
+
+static void
+ary_concat(mrb_state *mrb, struct RArray *a, struct RArray *a2)
+{
+  mrb_int len;
+
+  if (ARY_LEN(a) == 0) {
+    ary_replace(mrb, a, a2);
+    return;
+  }
+  if (ARY_LEN(a2) > ARY_MAX_SIZE - ARY_LEN(a)) {
+    mrb_raise(mrb, E_ARGUMENT_ERROR, "array size too big");
+  }
+  len = ARY_LEN(a) + ARY_LEN(a2);
+
+  ary_modify(mrb, a);
+  if (ARY_CAPA(a) < len) {
+    ary_expand_capa(mrb, a, len);
+  }
+  array_copy(ARY_PTR(a)+ARY_LEN(a), ARY_PTR(a2), ARY_LEN(a2));
+  mrb_write_barrier(mrb, (struct RBasic*)a);
+  ARY_SET_LEN(a, len);
+}
+
+MRB_API void
+mrb_ary_concat(mrb_state *mrb, mrb_value self, mrb_value other)
+{
+  struct RArray *a2 = mrb_ary_ptr(other);
+
+  ary_concat(mrb, mrb_ary_ptr(self), a2);
+}
+
+static mrb_value
+mrb_ary_concat_m(mrb_state *mrb, mrb_value self)
+{
+  mrb_value ary;
+
+  mrb_get_args(mrb, "A", &ary);
+  mrb_ary_concat(mrb, self, ary);
+  return self;
+}
+
+static mrb_value
+mrb_ary_plus(mrb_state *mrb, mrb_value self)
+{
+  struct RArray *a1 = mrb_ary_ptr(self);
+  struct RArray *a2;
+  mrb_value *ptr;
+  mrb_int blen, len1;
+
+  mrb_get_args(mrb, "a", &ptr, &blen);
+  if (ARY_MAX_SIZE - blen < ARY_LEN(a1)) {
+    mrb_raise(mrb, E_ARGUMENT_ERROR, "array size too big");
+  }
+  len1 = ARY_LEN(a1);
+  a2 = ary_new_capa(mrb, len1 + blen);
+  array_copy(ARY_PTR(a2), ARY_PTR(a1), len1);
+  array_copy(ARY_PTR(a2) + len1, ptr, blen);
+  ARY_SET_LEN(a2, len1+blen);
+
+  return mrb_obj_value(a2);
+}
+
+#define ARY_REPLACE_SHARED_MIN 20
+
+static void
+ary_replace(mrb_state *mrb, struct RArray *a, struct RArray *b)
+{
+  mrb_int len = ARY_LEN(b);
+
+  ary_modify_check(mrb, a);
+  if (a == b) return;
+  if (ARY_SHARED_P(a)) {
+    mrb_ary_decref(mrb, a->as.heap.aux.shared);
+    a->as.heap.aux.capa = 0;
+    a->as.heap.len = 0;
+    a->as.heap.ptr = NULL;
+    ARY_UNSET_SHARED_FLAG(a);
+  }
+  if (ARY_SHARED_P(b)) {
+  shared_b:
+    if (ARY_EMBED_P(a)) {
+      ARY_UNSET_EMBED_FLAG(a);
+    }
+    else {
+      mrb_free(mrb, a->as.heap.ptr);
+    }
+    a->as.heap.ptr = b->as.heap.ptr;
+    a->as.heap.len = len;
+    a->as.heap.aux.shared = b->as.heap.aux.shared;
+    a->as.heap.aux.shared->refcnt++;
+    ARY_SET_SHARED_FLAG(a);
+    mrb_write_barrier(mrb, (struct RBasic*)a);
+    return;
+  }
+  if (!mrb_frozen_p(b) && len > ARY_REPLACE_SHARED_MIN) {
+    ary_make_shared(mrb, b);
+    goto shared_b;
+  }
+  if (ARY_CAPA(a) < len)
+    ary_expand_capa(mrb, a, len);
+  array_copy(ARY_PTR(a), ARY_PTR(b), len);
+  mrb_write_barrier(mrb, (struct RBasic*)a);
+  ARY_SET_LEN(a, len);
+}
+
+MRB_API void
+mrb_ary_replace(mrb_state *mrb, mrb_value self, mrb_value other)
+{
+  struct RArray *a1 = mrb_ary_ptr(self);
+  struct RArray *a2 = mrb_ary_ptr(other);
+
+  if (a1 != a2) {
+    ary_replace(mrb, a1, a2);
+  }
+}
+
+static mrb_value
+mrb_ary_replace_m(mrb_state *mrb, mrb_value self)
+{
+  mrb_value other;
+
+  mrb_get_args(mrb, "A", &other);
+  mrb_ary_replace(mrb, self, other);
+
+  return self;
+}
+
+static mrb_value
+mrb_ary_times(mrb_state *mrb, mrb_value self)
+{
+  struct RArray *a1 = mrb_ary_ptr(self);
+  struct RArray *a2;
+  mrb_value *ptr;
+  mrb_int times, len1;
+
+  mrb_get_args(mrb, "i", &times);
+  if (times < 0) {
+    mrb_raise(mrb, E_ARGUMENT_ERROR, "negative argument");
+  }
+  if (times == 0) return mrb_ary_new(mrb);
+  if (ARY_MAX_SIZE / times < ARY_LEN(a1)) {
+    mrb_raise(mrb, E_ARGUMENT_ERROR, "array size too big");
+  }
+  len1 = ARY_LEN(a1);
+  a2 = ary_new_capa(mrb, len1 * times);
+  ARY_SET_LEN(a2, len1 * times);
+  ptr = ARY_PTR(a2);
+  while (times--) {
+    array_copy(ptr, ARY_PTR(a1), len1);
+    ptr += len1;
+  }
+
+  return mrb_obj_value(a2);
+}
+
+static mrb_value
+mrb_ary_reverse_bang(mrb_state *mrb, mrb_value self)
+{
+  struct RArray *a = mrb_ary_ptr(self);
+  mrb_int len = ARY_LEN(a);
+
+  if (len > 1) {
+    mrb_value *p1, *p2;
+
+    ary_modify(mrb, a);
+    p1 = ARY_PTR(a);
+    p2 = p1 + len - 1;
+
+    while (p1 < p2) {
+      mrb_value tmp = *p1;
+      *p1++ = *p2;
+      *p2-- = tmp;
+    }
+  }
+  return self;
+}
+
+static mrb_value
+mrb_ary_reverse(mrb_state *mrb, mrb_value self)
+{
+  struct RArray *a = mrb_ary_ptr(self), *b = ary_new_capa(mrb, ARY_LEN(a));
+  mrb_int len = ARY_LEN(a);
+
+  if (len > 0) {
+    mrb_value *p1, *p2, *e;
+
+    p1 = ARY_PTR(a);
+    e  = p1 + len;
+    p2 = ARY_PTR(b) + len - 1;
+    while (p1 < e) {
+      *p2-- = *p1++;
+    }
+    ARY_SET_LEN(b, len);
+  }
+  return mrb_obj_value(b);
+}
+
+MRB_API void
+mrb_ary_push(mrb_state *mrb, mrb_value ary, mrb_value elem)
+{
+  struct RArray *a = mrb_ary_ptr(ary);
+  mrb_int len = ARY_LEN(a);
+
+  ary_modify(mrb, a);
+  if (len == ARY_CAPA(a))
+    ary_expand_capa(mrb, a, len + 1);
+  ARY_PTR(a)[len] = elem;
+  ARY_SET_LEN(a, len+1);
+  mrb_field_write_barrier_value(mrb, (struct RBasic*)a, elem);
+}
+
+static mrb_value
+mrb_ary_push_m(mrb_state *mrb, mrb_value self)
+{
+  mrb_value *argv;
+  mrb_int len, len2, alen;
+  struct RArray *a;
+
+  mrb_get_args(mrb, "*!", &argv, &alen);
+  a = mrb_ary_ptr(self);
+  ary_modify(mrb, a);
+  len = ARY_LEN(a);
+  len2 = len + alen;
+  if (ARY_CAPA(a) < len2) {
+    ary_expand_capa(mrb, a, len2);
+  }
+  array_copy(ARY_PTR(a)+len, argv, alen);
+  ARY_SET_LEN(a, len2);
+  mrb_write_barrier(mrb, (struct RBasic*)a);
+
+  return self;
+}
+
+MRB_API mrb_value
+mrb_ary_pop(mrb_state *mrb, mrb_value ary)
+{
+  struct RArray *a = mrb_ary_ptr(ary);
+  mrb_int len = ARY_LEN(a);
+
+  ary_modify_check(mrb, a);
+  if (len == 0) return mrb_nil_value();
+  ARY_SET_LEN(a, len-1);
+  return ARY_PTR(a)[len-1];
+}
+
+#define ARY_SHIFT_SHARED_MIN 10
+
+MRB_API mrb_value
+mrb_ary_shift(mrb_state *mrb, mrb_value self)
+{
+  struct RArray *a = mrb_ary_ptr(self);
+  mrb_int len = ARY_LEN(a);
+  mrb_value val;
+
+  ary_modify_check(mrb, a);
+  if (len == 0) return mrb_nil_value();
+  if (ARY_SHARED_P(a)) {
+  L_SHIFT:
+    val = a->as.heap.ptr[0];
+    a->as.heap.ptr++;
+    a->as.heap.len--;
+    return val;
+  }
+  if (len > ARY_SHIFT_SHARED_MIN) {
+    ary_make_shared(mrb, a);
+    goto L_SHIFT;
+  }
+  else {
+    mrb_value *ptr = ARY_PTR(a);
+    mrb_int size = len;
+
+    val = *ptr;
+    while (--size) {
+      *ptr = *(ptr+1);
+      ++ptr;
+    }
+    ARY_SET_LEN(a, len-1);
+  }
+  return val;
+}
+
+/* self = [1,2,3]
+   item = 0
+   self.unshift item
+   p self #=> [0, 1, 2, 3] */
+MRB_API mrb_value
+mrb_ary_unshift(mrb_state *mrb, mrb_value self, mrb_value item)
+{
+  struct RArray *a = mrb_ary_ptr(self);
+  mrb_int len = ARY_LEN(a);
+
+  if (ARY_SHARED_P(a)
+      && a->as.heap.aux.shared->refcnt == 1 /* shared only referenced from this array */
+      && a->as.heap.ptr - a->as.heap.aux.shared->ptr >= 1) /* there's room for unshifted item */ {
+    a->as.heap.ptr--;
+    a->as.heap.ptr[0] = item;
+  }
+  else {
+    mrb_value *ptr;
+
+    ary_modify(mrb, a);
+    if (ARY_CAPA(a) < len + 1)
+      ary_expand_capa(mrb, a, len + 1);
+    ptr = ARY_PTR(a);
+    value_move(ptr + 1, ptr, len);
+    ptr[0] = item;
+  }
+  ARY_SET_LEN(a, len+1);
+  mrb_field_write_barrier_value(mrb, (struct RBasic*)a, item);
+
+  return self;
+}
+
+static mrb_value
+mrb_ary_unshift_m(mrb_state *mrb, mrb_value self)
+{
+  struct RArray *a = mrb_ary_ptr(self);
+  mrb_value *vals, *ptr;
+  mrb_int alen, len;
+
+  mrb_get_args(mrb, "*!", &vals, &alen);
+  if (alen == 0) {
+    ary_modify_check(mrb, a);
+    return self;
+  }
+  len = ARY_LEN(a);
+  if (alen > ARY_MAX_SIZE - len) {
+    mrb_raise(mrb, E_ARGUMENT_ERROR, "array size too big");
+  }
+  if (ARY_SHARED_P(a)
+      && a->as.heap.aux.shared->refcnt == 1 /* shared only referenced from this array */
+      && a->as.heap.ptr - a->as.heap.aux.shared->ptr >= alen) /* there's room for unshifted item */ {
+    ary_modify_check(mrb, a);
+    a->as.heap.ptr -= alen;
+    ptr = a->as.heap.ptr;
+  }
+  else {
+    mrb_bool same = vals == ARY_PTR(a);
+    ary_modify(mrb, a);
+    if (ARY_CAPA(a) < len + alen)
+      ary_expand_capa(mrb, a, len + alen);
+    ptr = ARY_PTR(a);
+    value_move(ptr + alen, ptr, len);
+    if (same) vals = ptr;
+  }
+  array_copy(ptr, vals, alen);
+  ARY_SET_LEN(a, len+alen);
+  while (alen--) {
+    mrb_field_write_barrier_value(mrb, (struct RBasic*)a, vals[alen]);
+  }
+
+  return self;
+}
+
+MRB_API mrb_value
+mrb_ary_ref(mrb_state *mrb, mrb_value ary, mrb_int n)
+{
+  struct RArray *a = mrb_ary_ptr(ary);
+  mrb_int len = ARY_LEN(a);
+
+  /* range check */
+  if (n < 0) n += len;
+  if (n < 0 || len <= n) return mrb_nil_value();
+
+  return ARY_PTR(a)[n];
+}
+
+MRB_API void
+mrb_ary_set(mrb_state *mrb, mrb_value ary, mrb_int n, mrb_value val)
+{
+  struct RArray *a = mrb_ary_ptr(ary);
+  mrb_int len = ARY_LEN(a);
+
+  ary_modify(mrb, a);
+  /* range check */
+  if (n < 0) {
+    n += len;
+    if (n < 0) {
+      mrb_raisef(mrb, E_INDEX_ERROR, "index %i out of array", n - len);
+    }
+  }
+  if (len <= n) {
+    if (ARY_CAPA(a) <= n)
+      ary_expand_capa(mrb, a, n + 1);
+    ary_fill_with_nil(ARY_PTR(a) + len, n + 1 - len);
+    ARY_SET_LEN(a, n+1);
+  }
+
+  ARY_PTR(a)[n] = val;
+  mrb_field_write_barrier_value(mrb, (struct RBasic*)a, val);
+}
+
+static struct RArray*
+ary_dup(mrb_state *mrb, struct RArray *a)
+{
+  return ary_new_from_values(mrb, ARY_LEN(a), ARY_PTR(a));
+}
+
+MRB_API mrb_value
+mrb_ary_splice(mrb_state *mrb, mrb_value ary, mrb_int head, mrb_int len, mrb_value rpl)
+{
+  struct RArray *a = mrb_ary_ptr(ary);
+  mrb_int alen = ARY_LEN(a);
+  const mrb_value *argv;
+  mrb_int argc;
+  mrb_int tail;
+
+  ary_modify(mrb, a);
+
+  /* len check */
+  if (len < 0) mrb_raisef(mrb, E_INDEX_ERROR, "negative length (%i)", len);
+
+  /* range check */
+  if (head < 0) {
+    head += alen;
+    if (head < 0) {
+      mrb_raise(mrb, E_INDEX_ERROR, "index is out of array");
+    }
+  }
+  tail = head + len;
+  if (alen < len || alen < tail) {
+    len = alen - head;
+  }
+
+  /* size check */
+  if (mrb_array_p(rpl)) {
+    argc = RARRAY_LEN(rpl);
+    argv = RARRAY_PTR(rpl);
+    if (argv == ARY_PTR(a)) {
+      struct RArray *r;
+
+      if (argc > 32767) {
+        mrb_raise(mrb, E_ARGUMENT_ERROR, "too big recursive splice");
+      }
+      r = ary_dup(mrb, a);
+      argv = ARY_PTR(r);
+    }
+  }
+  else {
+    argc = 1;
+    argv = &rpl;
+  }
+  if (head >= alen) {
+    if (head > ARY_MAX_SIZE - argc) {
+      mrb_raisef(mrb, E_INDEX_ERROR, "index %i too big", head);
+    }
+    len = head + argc;
+    if (len > ARY_CAPA(a)) {
+      ary_expand_capa(mrb, a, head + argc);
+    }
+    ary_fill_with_nil(ARY_PTR(a) + alen, head - alen);
+    if (argc > 0) {
+      array_copy(ARY_PTR(a) + head, argv, argc);
+    }
+    ARY_SET_LEN(a, len);
+  }
+  else {
+    mrb_int newlen;
+
+    if (alen - len > ARY_MAX_SIZE - argc) {
+      mrb_raisef(mrb, E_INDEX_ERROR, "index %i too big", alen + argc - len);
+    }
+    newlen = alen + argc - len;
+    if (newlen > ARY_CAPA(a)) {
+      ary_expand_capa(mrb, a, newlen);
+    }
+
+    if (len != argc) {
+      mrb_value *ptr = ARY_PTR(a);
+      tail = head + len;
+      value_move(ptr + head + argc, ptr + tail, alen - tail);
+      ARY_SET_LEN(a, newlen);
+    }
+    if (argc > 0) {
+      value_move(ARY_PTR(a) + head, argv, argc);
+    }
+  }
+  mrb_write_barrier(mrb, (struct RBasic*)a);
+  return ary;
+}
+
+void
+mrb_ary_decref(mrb_state *mrb, mrb_shared_array *shared)
+{
+  shared->refcnt--;
+  if (shared->refcnt == 0) {
+    mrb_free(mrb, shared->ptr);
+    mrb_free(mrb, shared);
+  }
+}
+
+static mrb_value
+ary_subseq(mrb_state *mrb, struct RArray *a, mrb_int beg, mrb_int len)
+{
+  struct RArray *b;
+
+  if (!ARY_SHARED_P(a) && len <= ARY_SHIFT_SHARED_MIN) {
+    return mrb_ary_new_from_values(mrb, len, ARY_PTR(a)+beg);
+  }
+  ary_make_shared(mrb, a);
+  b  = (struct RArray*)mrb_obj_alloc(mrb, MRB_TT_ARRAY, mrb->array_class);
+  b->as.heap.ptr = a->as.heap.ptr + beg;
+  b->as.heap.len = len;
+  b->as.heap.aux.shared = a->as.heap.aux.shared;
+  b->as.heap.aux.shared->refcnt++;
+  ARY_SET_SHARED_FLAG(b);
+
+  return mrb_obj_value(b);
+}
+
+static mrb_int
+aget_index(mrb_state *mrb, mrb_value index)
+{
+  if (mrb_fixnum_p(index)) {
+    return mrb_fixnum(index);
+  }
+#ifndef MRB_WITHOUT_FLOAT
+  else if (mrb_float_p(index)) {
+    return (mrb_int)mrb_float(index);
+  }
+#endif
+  else {
+    mrb_int i, argc;
+    mrb_value *argv;
+
+    mrb_get_args(mrb, "i*!", &i, &argv, &argc);
+    return i;
+  }
+}
+
+/*
+ *  call-seq:
+ *     ary[index]                -> obj     or nil
+ *     ary[start, length]        -> new_ary or nil
+ *     ary[range]                -> new_ary or nil
+ *     ary.slice(index)          -> obj     or nil
+ *     ary.slice(start, length)  -> new_ary or nil
+ *     ary.slice(range)          -> new_ary or nil
+ *
+ *  Element Reference --- Returns the element at +index+, or returns a
+ *  subarray starting at the +start+ index and continuing for +length+
+ *  elements, or returns a subarray specified by +range+ of indices.
+ *
+ *  Negative indices count backward from the end of the array (-1 is the last
+ *  element).  For +start+ and +range+ cases the starting index is just before
+ *  an element.  Additionally, an empty array is returned when the starting
+ *  index for an element range is at the end of the array.
+ *
+ *  Returns +nil+ if the index (or starting index) are out of range.
+ *
+ *  a = [ "a", "b", "c", "d", "e" ]
+ *  a[1]     => "b"
+ *  a[1,2]   => ["b", "c"]
+ *  a[1..-2] => ["b", "c", "d"]
+ *
+ */
+
+static mrb_value
+mrb_ary_aget(mrb_state *mrb, mrb_value self)
+{
+  struct RArray *a = mrb_ary_ptr(self);
+  mrb_int i, len, alen;
+  mrb_value index;
+
+  if (mrb_get_args(mrb, "o|i", &index, &len) == 1) {
+    switch (mrb_type(index)) {
+      /* a[n..m] */
+    case MRB_TT_RANGE:
+      if (mrb_range_beg_len(mrb, index, &i, &len, ARY_LEN(a), TRUE) == MRB_RANGE_OK) {
+        return ary_subseq(mrb, a, i, len);
+      }
+      else {
+        return mrb_nil_value();
+      }
+    case MRB_TT_FIXNUM:
+      return mrb_ary_ref(mrb, self, mrb_fixnum(index));
+    default:
+      return mrb_ary_ref(mrb, self, aget_index(mrb, index));
+    }
+  }
+
+  i = aget_index(mrb, index);
+  alen = ARY_LEN(a);
+  if (i < 0) i += alen;
+  if (i < 0 || alen < i) return mrb_nil_value();
+  if (len < 0) return mrb_nil_value();
+  if (alen == i) return mrb_ary_new(mrb);
+  if (len > alen - i) len = alen - i;
+
+  return ary_subseq(mrb, a, i, len);
+}
+
+/*
+ *  call-seq:
+ *     ary[index]         = obj                      ->  obj
+ *     ary[start, length] = obj or other_ary or nil  ->  obj or other_ary or nil
+ *     ary[range]         = obj or other_ary or nil  ->  obj or other_ary or nil
+ *
+ *  Element Assignment --- Sets the element at +index+, or replaces a subarray
+ *  from the +start+ index for +length+ elements, or replaces a subarray
+ *  specified by the +range+ of indices.
+ *
+ *  If indices are greater than the current capacity of the array, the array
+ *  grows automatically.  Elements are inserted into the array at +start+ if
+ *  +length+ is zero.
+ *
+ *  Negative indices will count backward from the end of the array.  For
+ *  +start+ and +range+ cases the starting index is just before an element.
+ *
+ *  An IndexError is raised if a negative index points past the beginning of
+ *  the array.
+ *
+ *  See also Array#push, and Array#unshift.
+ *
+ *     a = Array.new
+ *     a[4] = "4";                 #=> [nil, nil, nil, nil, "4"]
+ *     a[0, 3] = [ 'a', 'b', 'c' ] #=> ["a", "b", "c", nil, "4"]
+ *     a[1..2] = [ 1, 2 ]          #=> ["a", 1, 2, nil, "4"]
+ *     a[0, 2] = "?"               #=> ["?", 2, nil, "4"]
+ *     a[0..2] = "A"               #=> ["A", "4"]
+ *     a[-1]   = "Z"               #=> ["A", "Z"]
+ *     a[1..-1] = nil              #=> ["A", nil]
+ *     a[1..-1] = []               #=> ["A"]
+ *     a[0, 0] = [ 1, 2 ]          #=> [1, 2, "A"]
+ *     a[3, 0] = "B"               #=> [1, 2, "A", "B"]
+ */
+
+static mrb_value
+mrb_ary_aset(mrb_state *mrb, mrb_value self)
+{
+  mrb_value v1, v2, v3;
+  mrb_int i, len;
+
+  mrb_ary_modify(mrb, mrb_ary_ptr(self));
+  if (mrb_get_args(mrb, "oo|o", &v1, &v2, &v3) == 2) {
+    /* a[n..m] = v */
+    switch (mrb_range_beg_len(mrb, v1, &i, &len, RARRAY_LEN(self), FALSE)) {
+    case MRB_RANGE_TYPE_MISMATCH:
+      mrb_ary_set(mrb, self, aget_index(mrb, v1), v2);
+      break;
+    case MRB_RANGE_OK:
+      mrb_ary_splice(mrb, self, i, len, v2);
+      break;
+    case MRB_RANGE_OUT:
+      mrb_raisef(mrb, E_RANGE_ERROR, "%v out of range", v1);
+      break;
+    }
+    return v2;
+  }
+
+  /* a[n,m] = v */
+  mrb_ary_splice(mrb, self, aget_index(mrb, v1), aget_index(mrb, v2), v3);
+  return v3;
+}
+
+static mrb_value
+mrb_ary_delete_at(mrb_state *mrb, mrb_value self)
+{
+  struct RArray *a = mrb_ary_ptr(self);
+  mrb_int   index;
+  mrb_value val;
+  mrb_value *ptr;
+  mrb_int len, alen;
+
+  mrb_get_args(mrb, "i", &index);
+  alen = ARY_LEN(a);
+  if (index < 0) index += alen;
+  if (index < 0 || alen <= index) return mrb_nil_value();
+
+  ary_modify(mrb, a);
+  ptr = ARY_PTR(a);
+  val = ptr[index];
+
+  ptr += index;
+  len = alen - index;
+  while (--len) {
+    *ptr = *(ptr+1);
+    ++ptr;
+  }
+  ARY_SET_LEN(a, alen-1);
+
+  ary_shrink_capa(mrb, a);
+
+  return val;
+}
+
+static mrb_value
+mrb_ary_first(mrb_state *mrb, mrb_value self)
+{
+  struct RArray *a = mrb_ary_ptr(self);
+  mrb_int size, alen;
+
+  if (mrb_get_argc(mrb) == 0) {
+    return (ARY_LEN(a) > 0)? ARY_PTR(a)[0]: mrb_nil_value();
+  }
+  mrb_get_args(mrb, "|i", &size);
+  if (size < 0) {
+    mrb_raise(mrb, E_ARGUMENT_ERROR, "negative array size");
+  }
+
+  alen = ARY_LEN(a);
+  if (size > alen) size = alen;
+  if (ARY_SHARED_P(a)) {
+    return ary_subseq(mrb, a, 0, size);
+  }
+  return mrb_ary_new_from_values(mrb, size, ARY_PTR(a));
+}
+
+static mrb_value
+mrb_ary_last(mrb_state *mrb, mrb_value self)
+{
+  struct RArray *a = mrb_ary_ptr(self);
+  mrb_int n, size, alen;
+
+  n = mrb_get_args(mrb, "|i", &size);
+  alen = ARY_LEN(a);
+  if (n == 0) {
+    return (alen > 0) ? ARY_PTR(a)[alen - 1]: mrb_nil_value();
+  }
+
+  if (size < 0) {
+    mrb_raise(mrb, E_ARGUMENT_ERROR, "negative array size");
+  }
+  if (size > alen) size = alen;
+  if (ARY_SHARED_P(a) || size > ARY_DEFAULT_LEN) {
+    return ary_subseq(mrb, a, alen - size, size);
+  }
+  return mrb_ary_new_from_values(mrb, size, ARY_PTR(a) + alen - size);
+}
+
+static mrb_value
+mrb_ary_index_m(mrb_state *mrb, mrb_value self)
+{
+  mrb_value obj;
+  mrb_int i;
+
+  mrb_get_args(mrb, "o", &obj);
+  for (i = 0; i < RARRAY_LEN(self); i++) {
+    if (mrb_equal(mrb, RARRAY_PTR(self)[i], obj)) {
+      return mrb_fixnum_value(i);
+    }
+  }
+  return mrb_nil_value();
+}
+
+static mrb_value
+mrb_ary_rindex_m(mrb_state *mrb, mrb_value self)
+{
+  mrb_value obj;
+  mrb_int i, len;
+
+  mrb_get_args(mrb, "o", &obj);
+  for (i = RARRAY_LEN(self) - 1; i >= 0; i--) {
+    if (mrb_equal(mrb, RARRAY_PTR(self)[i], obj)) {
+      return mrb_fixnum_value(i);
+    }
+    if (i > (len = RARRAY_LEN(self))) {
+      i = len;
+    }
+  }
+  return mrb_nil_value();
+}
+
+MRB_API mrb_value
+mrb_ary_splat(mrb_state *mrb, mrb_value v)
+{
+  mrb_value a;
+
+  if (mrb_array_p(v)) {
+    return v;
+  }
+
+  if (!mrb_respond_to(mrb, v, mrb_intern_lit(mrb, "to_a"))) {
+    return mrb_ary_new_from_values(mrb, 1, &v);
+  }
+
+  a = mrb_funcall(mrb, v, "to_a", 0);
+  if (mrb_nil_p(a)) {
+    return mrb_ary_new_from_values(mrb, 1, &v);
+  }
+  mrb_ensure_array_type(mrb, a);
+  return a;
+}
+
+static mrb_value
+mrb_ary_size(mrb_state *mrb, mrb_value self)
+{
+  struct RArray *a = mrb_ary_ptr(self);
+
+  return mrb_fixnum_value(ARY_LEN(a));
+}
+
+MRB_API mrb_value
+mrb_ary_clear(mrb_state *mrb, mrb_value self)
+{
+  struct RArray *a = mrb_ary_ptr(self);
+
+  ary_modify(mrb, a);
+  if (ARY_SHARED_P(a)) {
+    mrb_ary_decref(mrb, a->as.heap.aux.shared);
+    ARY_UNSET_SHARED_FLAG(a);
+  }
+  else if (!ARY_EMBED_P(a)){
+    mrb_free(mrb, a->as.heap.ptr);
+  }
+  ARY_SET_EMBED_LEN(a, 0);
+
+  return self;
+}
+
+static mrb_value
+mrb_ary_clear_m(mrb_state *mrb, mrb_value self)
+{
+  return mrb_ary_clear(mrb, self);
+}
+
+static mrb_value
+mrb_ary_empty_p(mrb_state *mrb, mrb_value self)
+{
+  struct RArray *a = mrb_ary_ptr(self);
+
+  return mrb_bool_value(ARY_LEN(a) == 0);
+}
+
+MRB_API mrb_value
+mrb_ary_entry(mrb_value ary, mrb_int offset)
+{
+  if (offset < 0) {
+    offset += RARRAY_LEN(ary);
+  }
+  if (offset < 0 || RARRAY_LEN(ary) <= offset) {
+    return mrb_nil_value();
+  }
+  return RARRAY_PTR(ary)[offset];
+}
+
+static mrb_value
+join_ary(mrb_state *mrb, mrb_value ary, mrb_value sep, mrb_value list)
+{
+  mrb_int i;
+  mrb_value result, val, tmp;
+
+  /* check recursive */
+  for (i=0; i<RARRAY_LEN(list); i++) {
+    if (mrb_obj_equal(mrb, ary, RARRAY_PTR(list)[i])) {
+      mrb_raise(mrb, E_ARGUMENT_ERROR, "recursive array join");
+    }
+  }
+
+  mrb_ary_push(mrb, list, ary);
+
+  result = mrb_str_new_capa(mrb, 64);
+
+  for (i=0; i<RARRAY_LEN(ary); i++) {
+    if (i > 0 && !mrb_nil_p(sep)) {
+      mrb_str_cat_str(mrb, result, sep);
+    }
+
+    val = RARRAY_PTR(ary)[i];
+    switch (mrb_type(val)) {
+    case MRB_TT_ARRAY:
+    ary_join:
+      val = join_ary(mrb, val, sep, list);
+      /* fall through */
+
+    case MRB_TT_STRING:
+    str_join:
+      mrb_str_cat_str(mrb, result, val);
+      break;
+
+    default:
+      if (!mrb_immediate_p(val)) {
+        tmp = mrb_check_string_type(mrb, val);
+        if (!mrb_nil_p(tmp)) {
+          val = tmp;
+          goto str_join;
+        }
+        tmp = mrb_check_array_type(mrb, val);
+        if (!mrb_nil_p(tmp)) {
+          val = tmp;
+          goto ary_join;
+        }
+      }
+      val = mrb_obj_as_string(mrb, val);
+      goto str_join;
+    }
+  }
+
+  mrb_ary_pop(mrb, list);
+
+  return result;
+}
+
+MRB_API mrb_value
+mrb_ary_join(mrb_state *mrb, mrb_value ary, mrb_value sep)
+{
+  if (!mrb_nil_p(sep)) {
+    sep = mrb_obj_as_string(mrb, sep);
+  }
+  return join_ary(mrb, ary, sep, mrb_ary_new(mrb));
+}
+
+/*
+ *  call-seq:
+ *     ary.join(sep="")    -> str
+ *
+ *  Returns a string created by converting each element of the array to
+ *  a string, separated by <i>sep</i>.
+ *
+ *     [ "a", "b", "c" ].join        #=> "abc"
+ *     [ "a", "b", "c" ].join("-")   #=> "a-b-c"
+ */
+
+static mrb_value
+mrb_ary_join_m(mrb_state *mrb, mrb_value ary)
+{
+  mrb_value sep = mrb_nil_value();
+
+  mrb_get_args(mrb, "|S!", &sep);
+  return mrb_ary_join(mrb, ary, sep);
+}
+
+static mrb_value
+mrb_ary_eq(mrb_state *mrb, mrb_value ary1)
+{
+  mrb_value ary2;
+
+  mrb_get_args(mrb, "o", &ary2);
+  if (mrb_obj_equal(mrb, ary1, ary2)) return mrb_true_value();
+  if (!mrb_array_p(ary2)) {
+    return mrb_false_value();
+  }
+  if (RARRAY_LEN(ary1) != RARRAY_LEN(ary2)) return mrb_false_value();
+
+  return ary2;
+}
+
+static mrb_value
+mrb_ary_cmp(mrb_state *mrb, mrb_value ary1)
+{
+  mrb_value ary2;
+
+  mrb_get_args(mrb, "o", &ary2);
+  if (mrb_obj_equal(mrb, ary1, ary2)) return mrb_fixnum_value(0);
+  if (!mrb_array_p(ary2)) {
+    return mrb_nil_value();
+  }
+
+  return ary2;
+}
+
+/* internal method to convert multi-value to single value */
+static mrb_value
+mrb_ary_svalue(mrb_state *mrb, mrb_value ary)
+{
+  switch (RARRAY_LEN(ary)) {
+  case 0:
+    return mrb_nil_value();
+  case 1:
+    return RARRAY_PTR(ary)[0];
+  default:
+    return ary;
+  }
+}
+
+static const mrb_code each_iseq[] = {
+  OP_ENTER, 0x0, 0x00, 0x1,  /* OP_ENTER     0:0:0:0:0:0:1 */
+  OP_JMPIF, 0x1, 0x0, 19,    /* OP_JMPIF     R1  19 */
+  OP_LOADSELF, 0x3,          /* OP_LOADSELF  R3 */
+  OP_LOADSYM, 0x4, 0x0,      /* OP_LOADSYM   R4  :each*/
+  OP_SEND, 0x3, 0x1, 0x1,    /* OP_SEND      R3  :to_enum   1 */
+  OP_RETURN, 0x3,            /* OP_RETURN    R3 */
+  OP_LOADI_0, 0x2,           /* OP_LOADI_0   R2 */
+  OP_JMP, 0x0, 43,           /* OP_JMP       49 */
+  OP_MOVE, 0x3, 0x1,         /* OP_MOVE      R3  R1 */
+  OP_LOADSELF, 0x4,          /* OP_LOADSELF  R4 */
+  OP_MOVE, 0x5, 0x2,         /* OP_MOVE      R5  R2 */
+  OP_SEND, 0x4, 0x2, 0x1,    /* OP_SEND      R4  :[]        1 */
+  OP_SEND, 0x3, 0x3, 0x1,    /* OP_SEND      R3  :call      1 */
+  OP_ADDI, 0x2, 1,           /* OP_ADDI      R3  1 */
+  OP_MOVE, 0x3, 0x2,         /* OP_MOVE      R3  R2 */
+  OP_LOADSELF, 0x4,          /* OP_LOADSELF  R4 */
+  OP_SEND, 0x4, 0x4, 0x0,    /* OP_SEND      R4  :length    0 */
+  OP_LT, 0x3,                /* OP_LT        R3 */
+  OP_JMPIF, 0x3, 0x0, 24,    /* OP_JMPIF     R3  24 */
+  OP_RETURN, 0x0             /* OP_RETURN    R3 */
+};
+
+static void
+init_ary_each(mrb_state *mrb, struct RClass *ary)
+{
+  struct RProc *p;
+  mrb_method_t m;
+  mrb_irep *each_irep = (mrb_irep*)mrb_malloc(mrb, sizeof(mrb_irep));
+  static const mrb_irep mrb_irep_zero = { 0 };
+
+  *each_irep = mrb_irep_zero;
+  each_irep->syms = (mrb_sym*)mrb_malloc(mrb, sizeof(mrb_sym)*5);
+  each_irep->syms[0] = mrb_intern_lit(mrb, "each");
+  each_irep->syms[1] = mrb_intern_lit(mrb, "to_enum");
+  each_irep->syms[2] = mrb_intern_lit(mrb, "[]");
+  each_irep->syms[3] = mrb_intern_lit(mrb, "call");
+  each_irep->syms[4] = mrb_intern_lit(mrb, "length");
+  each_irep->slen = 5;
+  each_irep->flags = MRB_ISEQ_NO_FREE;
+  each_irep->iseq = each_iseq;
+  each_irep->ilen = sizeof(each_iseq);
+  each_irep->nregs = 7;
+  each_irep->nlocals = 3;
+  p = mrb_proc_new(mrb, each_irep);
+  p->flags |= MRB_PROC_SCOPE | MRB_PROC_STRICT;
+  MRB_METHOD_FROM_PROC(m, p);
+  mrb_define_method_raw(mrb, ary, mrb_intern_lit(mrb, "each"), m);
+}
+
+void
+mrb_init_array(mrb_state *mrb)
+{
+  struct RClass *a;
+
+  mrb->array_class = a = mrb_define_class(mrb, "Array", mrb->object_class);              /* 15.2.12 */
+  MRB_SET_INSTANCE_TT(a, MRB_TT_ARRAY);
+
+  mrb_define_class_method(mrb, a, "[]",        mrb_ary_s_create,     MRB_ARGS_ANY());    /* 15.2.12.4.1 */
+
+  mrb_define_method(mrb, a, "+",               mrb_ary_plus,         MRB_ARGS_REQ(1));   /* 15.2.12.5.1  */
+  mrb_define_method(mrb, a, "*",               mrb_ary_times,        MRB_ARGS_REQ(1));   /* 15.2.12.5.2  */
+  mrb_define_method(mrb, a, "<<",              mrb_ary_push_m,       MRB_ARGS_REQ(1));   /* 15.2.12.5.3  */
+  mrb_define_method(mrb, a, "[]",              mrb_ary_aget,         MRB_ARGS_ARG(1,1)); /* 15.2.12.5.4  */
+  mrb_define_method(mrb, a, "[]=",             mrb_ary_aset,         MRB_ARGS_ARG(2,1)); /* 15.2.12.5.5  */
+  mrb_define_method(mrb, a, "clear",           mrb_ary_clear_m,      MRB_ARGS_NONE());   /* 15.2.12.5.6  */
+  mrb_define_method(mrb, a, "concat",          mrb_ary_concat_m,     MRB_ARGS_REQ(1));   /* 15.2.12.5.8  */
+  mrb_define_method(mrb, a, "delete_at",       mrb_ary_delete_at,    MRB_ARGS_REQ(1));   /* 15.2.12.5.9  */
+  mrb_define_method(mrb, a, "empty?",          mrb_ary_empty_p,      MRB_ARGS_NONE());   /* 15.2.12.5.12 */
+  mrb_define_method(mrb, a, "first",           mrb_ary_first,        MRB_ARGS_OPT(1));   /* 15.2.12.5.13 */
+  mrb_define_method(mrb, a, "index",           mrb_ary_index_m,      MRB_ARGS_REQ(1));   /* 15.2.12.5.14 */
+  mrb_define_method(mrb, a, "initialize_copy", mrb_ary_replace_m,    MRB_ARGS_REQ(1));   /* 15.2.12.5.16 */
+  mrb_define_method(mrb, a, "join",            mrb_ary_join_m,       MRB_ARGS_OPT(1));   /* 15.2.12.5.17 */
+  mrb_define_method(mrb, a, "last",            mrb_ary_last,         MRB_ARGS_OPT(1));   /* 15.2.12.5.18 */
+  mrb_define_method(mrb, a, "length",          mrb_ary_size,         MRB_ARGS_NONE());   /* 15.2.12.5.19 */
+  mrb_define_method(mrb, a, "pop",             mrb_ary_pop,          MRB_ARGS_NONE());   /* 15.2.12.5.21 */
+  mrb_define_method(mrb, a, "push",            mrb_ary_push_m,       MRB_ARGS_ANY());    /* 15.2.12.5.22 */
+  mrb_define_method(mrb, a, "replace",         mrb_ary_replace_m,    MRB_ARGS_REQ(1));   /* 15.2.12.5.23 */
+  mrb_define_method(mrb, a, "reverse",         mrb_ary_reverse,      MRB_ARGS_NONE());   /* 15.2.12.5.24 */
+  mrb_define_method(mrb, a, "reverse!",        mrb_ary_reverse_bang, MRB_ARGS_NONE());   /* 15.2.12.5.25 */
+  mrb_define_method(mrb, a, "rindex",          mrb_ary_rindex_m,     MRB_ARGS_REQ(1));   /* 15.2.12.5.26 */
+  mrb_define_method(mrb, a, "shift",           mrb_ary_shift,        MRB_ARGS_NONE());   /* 15.2.12.5.27 */
+  mrb_define_method(mrb, a, "size",            mrb_ary_size,         MRB_ARGS_NONE());   /* 15.2.12.5.28 */
+  mrb_define_method(mrb, a, "slice",           mrb_ary_aget,         MRB_ARGS_ARG(1,1)); /* 15.2.12.5.29 */
+  mrb_define_method(mrb, a, "unshift",         mrb_ary_unshift_m,    MRB_ARGS_ANY());    /* 15.2.12.5.30 */
+
+  mrb_define_method(mrb, a, "__ary_eq",        mrb_ary_eq,           MRB_ARGS_REQ(1));
+  mrb_define_method(mrb, a, "__ary_cmp",       mrb_ary_cmp,          MRB_ARGS_REQ(1));
+  mrb_define_method(mrb, a, "__ary_index",     mrb_ary_index_m,      MRB_ARGS_REQ(1));   /* kept for mruby-array-ext */
+  mrb_define_method(mrb, a, "__svalue",        mrb_ary_svalue,       MRB_ARGS_NONE());
+
+  init_ary_each(mrb, a);
+}
Index: /EcnlProtoTool/trunk/mruby-2.1.1/src/backtrace.c
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/src/backtrace.c	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/src/backtrace.c	(revision 439)
@@ -0,0 +1,238 @@
+/*
+** backtrace.c -
+**
+** See Copyright Notice in mruby.h
+*/
+
+#include <mruby.h>
+#include <mruby/variable.h>
+#include <mruby/proc.h>
+#include <mruby/array.h>
+#include <mruby/string.h>
+#include <mruby/class.h>
+#include <mruby/debug.h>
+#include <mruby/error.h>
+#include <mruby/numeric.h>
+#include <mruby/data.h>
+
+struct backtrace_location {
+  int32_t lineno;
+  mrb_sym method_id;
+  const char *filename;
+};
+
+typedef void (*each_backtrace_func)(mrb_state*, const struct backtrace_location*, void*);
+
+static const mrb_data_type bt_type = { "Backtrace", mrb_free };
+
+mrb_value mrb_exc_inspect(mrb_state *mrb, mrb_value exc);
+mrb_value mrb_unpack_backtrace(mrb_state *mrb, mrb_value backtrace);
+
+static void
+each_backtrace(mrb_state *mrb, ptrdiff_t ciidx, const mrb_code *pc0, each_backtrace_func func, void *data)
+{
+  ptrdiff_t i;
+
+  if (ciidx >= mrb->c->ciend - mrb->c->cibase)
+    ciidx = 10; /* ciidx is broken... */
+
+  for (i=ciidx; i >= 0; i--) {
+    struct backtrace_location loc;
+    mrb_callinfo *ci;
+    mrb_irep *irep;
+    const mrb_code *pc;
+
+    ci = &mrb->c->cibase[i];
+
+    if (!ci->proc) continue;
+    if (MRB_PROC_CFUNC_P(ci->proc)) continue;
+
+    irep = ci->proc->body.irep;
+    if (!irep) continue;
+
+    if (mrb->c->cibase[i].err) {
+      pc = mrb->c->cibase[i].err;
+    }
+    else if (i+1 <= ciidx) {
+      if (!mrb->c->cibase[i + 1].pc) continue;
+      pc = &mrb->c->cibase[i+1].pc[-1];
+    }
+    else {
+      pc = pc0;
+    }
+
+    loc.lineno = mrb_debug_get_line(mrb, irep, pc - irep->iseq);
+    if (loc.lineno == -1) continue;
+
+    loc.filename = mrb_debug_get_filename(mrb, irep, pc - irep->iseq);
+    if (!loc.filename) {
+      loc.filename = "(unknown)";
+    }
+
+    loc.method_id = ci->mid;
+    func(mrb, &loc, data);
+  }
+}
+
+#ifndef MRB_DISABLE_STDIO
+
+static void
+print_backtrace(mrb_state *mrb, struct RObject *exc, mrb_value backtrace)
+{
+  mrb_int i;
+  mrb_int n = RARRAY_LEN(backtrace);
+  mrb_value *loc, mesg;
+  FILE *stream = stderr;
+
+  if (n != 0) {
+    fprintf(stream, "trace (most recent call last):\n");
+    for (i=n-1,loc=&RARRAY_PTR(backtrace)[i]; i>0; i--,loc--) {
+      if (mrb_string_p(*loc)) {
+        fprintf(stream, "\t[%d] %.*s\n",
+                (int)i, (int)RSTRING_LEN(*loc), RSTRING_PTR(*loc));
+      }
+    }
+    if (mrb_string_p(*loc)) {
+      fprintf(stream, "%.*s: ", (int)RSTRING_LEN(*loc), RSTRING_PTR(*loc));
+    }
+  }
+  mesg = mrb_exc_inspect(mrb, mrb_obj_value(exc));
+  fprintf(stream, "%.*s\n", (int)RSTRING_LEN(mesg), RSTRING_PTR(mesg));
+}
+
+/* mrb_print_backtrace
+
+   function to retrieve backtrace information from the last exception.
+*/
+
+MRB_API void
+mrb_print_backtrace(mrb_state *mrb)
+{
+  mrb_value backtrace;
+
+  if (!mrb->exc) {
+    return;
+  }
+
+  backtrace = mrb_obj_iv_get(mrb, mrb->exc, mrb_intern_lit(mrb, "backtrace"));
+  if (mrb_nil_p(backtrace)) return;
+  if (!mrb_array_p(backtrace)) backtrace = mrb_unpack_backtrace(mrb, backtrace);
+  print_backtrace(mrb, mrb->exc, backtrace);
+}
+#else
+
+MRB_API void
+mrb_print_backtrace(mrb_state *mrb)
+{
+}
+
+#endif
+
+static void
+count_backtrace_i(mrb_state *mrb,
+                 const struct backtrace_location *loc,
+                 void *data)
+{
+  int *lenp = (int*)data;
+
+  (*lenp)++;
+}
+
+static void
+pack_backtrace_i(mrb_state *mrb,
+                 const struct backtrace_location *loc,
+                 void *data)
+{
+  struct backtrace_location **pptr = (struct backtrace_location**)data;
+  struct backtrace_location *ptr = *pptr;
+
+  *ptr = *loc;
+  *pptr = ptr+1;
+}
+
+static mrb_value
+packed_backtrace(mrb_state *mrb)
+{
+  struct RData *backtrace;
+  ptrdiff_t ciidx = mrb->c->ci - mrb->c->cibase;
+  int len = 0;
+  int size;
+  void *ptr;
+
+  each_backtrace(mrb, ciidx, mrb->c->ci->pc, count_backtrace_i, &len);
+  size = len * sizeof(struct backtrace_location);
+  ptr = mrb_malloc(mrb, size);
+  backtrace = mrb_data_object_alloc(mrb, NULL, ptr, &bt_type);
+  backtrace->flags = (uint32_t)len;
+  each_backtrace(mrb, ciidx, mrb->c->ci->pc, pack_backtrace_i, &ptr);
+  return mrb_obj_value(backtrace);
+}
+
+void
+mrb_keep_backtrace(mrb_state *mrb, mrb_value exc)
+{
+  mrb_sym sym = mrb_intern_lit(mrb, "backtrace");
+  mrb_value backtrace;
+  int ai;
+
+  if (mrb_iv_defined(mrb, exc, sym)) return;
+  ai = mrb_gc_arena_save(mrb);
+  backtrace = packed_backtrace(mrb);
+  mrb_iv_set(mrb, exc, sym, backtrace);
+  mrb_gc_arena_restore(mrb, ai);
+}
+
+mrb_value
+mrb_unpack_backtrace(mrb_state *mrb, mrb_value backtrace)
+{
+  const struct backtrace_location *bt;
+  mrb_int n, i;
+  int ai;
+
+  if (mrb_nil_p(backtrace)) {
+  empty_backtrace:
+    return mrb_ary_new_capa(mrb, 0);
+  }
+  if (mrb_array_p(backtrace)) return backtrace;
+  bt = (struct backtrace_location*)mrb_data_check_get_ptr(mrb, backtrace, &bt_type);
+  if (bt == NULL) goto empty_backtrace;
+  n = (mrb_int)RDATA(backtrace)->flags;
+  backtrace = mrb_ary_new_capa(mrb, n);
+  ai = mrb_gc_arena_save(mrb);
+  for (i = 0; i < n; i++) {
+    const struct backtrace_location *entry = &bt[i];
+    mrb_value btline;
+
+    btline = mrb_format(mrb, "%s:%d", entry->filename, (int)entry->lineno);
+    if (entry->method_id != 0) {
+      mrb_str_cat_lit(mrb, btline, ":in ");
+      mrb_str_cat_cstr(mrb, btline, mrb_sym_name(mrb, entry->method_id));
+    }
+    mrb_ary_push(mrb, backtrace, btline);
+    mrb_gc_arena_restore(mrb, ai);
+  }
+
+  return backtrace;
+}
+
+MRB_API mrb_value
+mrb_exc_backtrace(mrb_state *mrb, mrb_value exc)
+{
+  mrb_sym attr_name;
+  mrb_value backtrace;
+
+  attr_name = mrb_intern_lit(mrb, "backtrace");
+  backtrace = mrb_iv_get(mrb, exc, attr_name);
+  if (mrb_nil_p(backtrace) || mrb_array_p(backtrace)) {
+    return backtrace;
+  }
+  backtrace = mrb_unpack_backtrace(mrb, backtrace);
+  mrb_iv_set(mrb, exc, attr_name, backtrace);
+  return backtrace;
+}
+
+MRB_API mrb_value
+mrb_get_backtrace(mrb_state *mrb)
+{
+  return mrb_unpack_backtrace(mrb, packed_backtrace(mrb));
+}
Index: /EcnlProtoTool/trunk/mruby-2.1.1/src/class.c
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/src/class.c	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/src/class.c	(revision 439)
@@ -0,0 +1,2315 @@
+/*
+** class.c - Class class
+**
+** See Copyright Notice in mruby.h
+*/
+
+#include <stdarg.h>
+#include <mruby.h>
+#include <mruby/array.h>
+#include <mruby/hash.h>
+#include <mruby/class.h>
+#include <mruby/numeric.h>
+#include <mruby/proc.h>
+#include <mruby/string.h>
+#include <mruby/variable.h>
+#include <mruby/error.h>
+#include <mruby/data.h>
+#include <mruby/istruct.h>
+#include <mruby/opcode.h>
+
+KHASH_DEFINE(mt, mrb_sym, mrb_method_t, TRUE, kh_int_hash_func, kh_int_hash_equal)
+
+void
+mrb_gc_mark_mt(mrb_state *mrb, struct RClass *c)
+{
+  khiter_t k;
+  khash_t(mt) *h = c->mt;
+
+  if (!h) return;
+  for (k = kh_begin(h); k != kh_end(h); k++) {
+    if (kh_exist(h, k)) {
+      mrb_method_t m = kh_value(h, k);
+
+      if (MRB_METHOD_PROC_P(m)) {
+        struct RProc *p = MRB_METHOD_PROC(m);
+        mrb_gc_mark(mrb, (struct RBasic*)p);
+      }
+    }
+  }
+}
+
+size_t
+mrb_gc_mark_mt_size(mrb_state *mrb, struct RClass *c)
+{
+  khash_t(mt) *h = c->mt;
+
+  if (!h) return 0;
+  return kh_size(h);
+}
+
+void
+mrb_gc_free_mt(mrb_state *mrb, struct RClass *c)
+{
+  kh_destroy(mt, mrb, c->mt);
+}
+
+void
+mrb_class_name_class(mrb_state *mrb, struct RClass *outer, struct RClass *c, mrb_sym id)
+{
+  mrb_value name;
+  mrb_sym nsym = mrb_intern_lit(mrb, "__classname__");
+
+  if (mrb_obj_iv_defined(mrb, (struct RObject*)c, nsym)) return;
+  if (outer == NULL || outer == mrb->object_class) {
+    name = mrb_symbol_value(id);
+  }
+  else {
+    name = mrb_class_path(mrb, outer);
+    if (mrb_nil_p(name)) {      /* unnamed outer class */
+      if (outer != mrb->object_class && outer != c) {
+        mrb_obj_iv_set_force(mrb, (struct RObject*)c, mrb_intern_lit(mrb, "__outer__"),
+                             mrb_obj_value(outer));
+      }
+      return;
+    }
+    else {
+      mrb_int len;
+      const char *n = mrb_sym_name_len(mrb, id, &len);
+
+      mrb_str_cat_lit(mrb, name, "::");
+      mrb_str_cat(mrb, name, n, len);
+    }
+  }
+  mrb_obj_iv_set_force(mrb, (struct RObject*)c, nsym, name);
+}
+
+mrb_bool
+mrb_const_name_p(mrb_state *mrb, const char *name, mrb_int len)
+{
+  return len > 0 && ISUPPER(name[0]) && mrb_ident_p(name+1, len-1);
+}
+
+static void
+setup_class(mrb_state *mrb, struct RClass *outer, struct RClass *c, mrb_sym id)
+{
+  mrb_class_name_class(mrb, outer, c, id);
+  mrb_obj_iv_set(mrb, (struct RObject*)outer, id, mrb_obj_value(c));
+}
+
+#define make_metaclass(mrb, c) prepare_singleton_class((mrb), (struct RBasic*)(c))
+
+static void
+prepare_singleton_class(mrb_state *mrb, struct RBasic *o)
+{
+  struct RClass *sc, *c;
+
+  if (o->c->tt == MRB_TT_SCLASS) return;
+  sc = (struct RClass*)mrb_obj_alloc(mrb, MRB_TT_SCLASS, mrb->class_class);
+  sc->flags |= MRB_FL_CLASS_IS_INHERITED;
+  sc->mt = kh_init(mt, mrb);
+  sc->iv = 0;
+  if (o->tt == MRB_TT_CLASS) {
+    c = (struct RClass*)o;
+    if (!c->super) {
+      sc->super = mrb->class_class;
+    }
+    else {
+      sc->super = c->super->c;
+    }
+  }
+  else if (o->tt == MRB_TT_SCLASS) {
+    c = (struct RClass*)o;
+    while (c->super->tt == MRB_TT_ICLASS)
+      c = c->super;
+    make_metaclass(mrb, c->super);
+    sc->super = c->super->c;
+  }
+  else {
+    sc->super = o->c;
+    prepare_singleton_class(mrb, (struct RBasic*)sc);
+  }
+  o->c = sc;
+  mrb_field_write_barrier(mrb, (struct RBasic*)o, (struct RBasic*)sc);
+  mrb_field_write_barrier(mrb, (struct RBasic*)sc, (struct RBasic*)o);
+  mrb_obj_iv_set(mrb, (struct RObject*)sc, mrb_intern_lit(mrb, "__attached__"), mrb_obj_value(o));
+  sc->flags |= o->flags & MRB_FL_OBJ_IS_FROZEN;
+}
+
+static mrb_value
+class_name_str(mrb_state *mrb, struct RClass* c)
+{
+  mrb_value path = mrb_class_path(mrb, c);
+  if (mrb_nil_p(path)) {
+    path = c->tt == MRB_TT_MODULE ? mrb_str_new_lit(mrb, "#<Module:") :
+                                    mrb_str_new_lit(mrb, "#<Class:");
+    mrb_str_cat_str(mrb, path, mrb_ptr_to_str(mrb, c));
+    mrb_str_cat_lit(mrb, path, ">");
+  }
+  return path;
+}
+
+static struct RClass*
+class_from_sym(mrb_state *mrb, struct RClass *klass, mrb_sym id)
+{
+  mrb_value c = mrb_const_get(mrb, mrb_obj_value(klass), id);
+
+  mrb_check_type(mrb, c, MRB_TT_CLASS);
+  return mrb_class_ptr(c);
+}
+
+static struct RClass*
+module_from_sym(mrb_state *mrb, struct RClass *klass, mrb_sym id)
+{
+  mrb_value c = mrb_const_get(mrb, mrb_obj_value(klass), id);
+
+  mrb_check_type(mrb, c, MRB_TT_MODULE);
+  return mrb_class_ptr(c);
+}
+
+static mrb_bool
+class_ptr_p(mrb_value obj)
+{
+  switch (mrb_type(obj)) {
+  case MRB_TT_CLASS:
+  case MRB_TT_SCLASS:
+  case MRB_TT_MODULE:
+    return TRUE;
+  default:
+    return FALSE;
+  }
+}
+
+static void
+check_if_class_or_module(mrb_state *mrb, mrb_value obj)
+{
+  if (!class_ptr_p(obj)) {
+    mrb_raisef(mrb, E_TYPE_ERROR, "%!v is not a class/module", obj);
+  }
+}
+
+static struct RClass*
+define_module(mrb_state *mrb, mrb_sym name, struct RClass *outer)
+{
+  struct RClass *m;
+
+  if (mrb_const_defined_at(mrb, mrb_obj_value(outer), name)) {
+    return module_from_sym(mrb, outer, name);
+  }
+  m = mrb_module_new(mrb);
+  setup_class(mrb, outer, m, name);
+
+  return m;
+}
+
+MRB_API struct RClass*
+mrb_define_module_id(mrb_state *mrb, mrb_sym name)
+{
+  return define_module(mrb, name, mrb->object_class);
+}
+
+MRB_API struct RClass*
+mrb_define_module(mrb_state *mrb, const char *name)
+{
+  return define_module(mrb, mrb_intern_cstr(mrb, name), mrb->object_class);
+}
+
+struct RClass*
+mrb_vm_define_module(mrb_state *mrb, mrb_value outer, mrb_sym id)
+{
+  check_if_class_or_module(mrb, outer);
+  if (mrb_const_defined_at(mrb, outer, id)) {
+    mrb_value old = mrb_const_get(mrb, outer, id);
+
+    if (!mrb_module_p(old)) {
+      mrb_raisef(mrb, E_TYPE_ERROR, "%!v is not a module", old);
+    }
+    return mrb_class_ptr(old);
+  }
+  return define_module(mrb, id, mrb_class_ptr(outer));
+}
+
+MRB_API struct RClass*
+mrb_define_module_under(mrb_state *mrb, struct RClass *outer, const char *name)
+{
+  mrb_sym id = mrb_intern_cstr(mrb, name);
+  struct RClass * c = define_module(mrb, id, outer);
+
+  setup_class(mrb, outer, c, id);
+  return c;
+}
+
+static struct RClass*
+find_origin(struct RClass *c)
+{
+  MRB_CLASS_ORIGIN(c);
+  return c;
+}
+
+static struct RClass*
+define_class(mrb_state *mrb, mrb_sym name, struct RClass *super, struct RClass *outer)
+{
+  struct RClass * c;
+
+  if (mrb_const_defined_at(mrb, mrb_obj_value(outer), name)) {
+    c = class_from_sym(mrb, outer, name);
+    MRB_CLASS_ORIGIN(c);
+    if (super && mrb_class_real(c->super) != super) {
+      mrb_raisef(mrb, E_TYPE_ERROR, "superclass mismatch for Class %n (%C not %C)",
+                 name, c->super, super);
+    }
+    return c;
+  }
+
+  c = mrb_class_new(mrb, super);
+  setup_class(mrb, outer, c, name);
+
+  return c;
+}
+
+MRB_API struct RClass*
+mrb_define_class_id(mrb_state *mrb, mrb_sym name, struct RClass *super)
+{
+  if (!super) {
+    mrb_warn(mrb, "no super class for '%n', Object assumed", name);
+  }
+  return define_class(mrb, name, super, mrb->object_class);
+}
+
+MRB_API struct RClass*
+mrb_define_class(mrb_state *mrb, const char *name, struct RClass *super)
+{
+  return mrb_define_class_id(mrb, mrb_intern_cstr(mrb, name), super);
+}
+
+static mrb_value mrb_bob_init(mrb_state *mrb, mrb_value);
+#ifdef MRB_METHOD_CACHE
+static void mc_clear_all(mrb_state *mrb);
+static void mc_clear_by_id(mrb_state *mrb, struct RClass*, mrb_sym);
+#else
+#define mc_clear_all(mrb)
+#define mc_clear_by_id(mrb,c,s)
+#endif
+
+static void
+mrb_class_inherited(mrb_state *mrb, struct RClass *super, struct RClass *klass)
+{
+  mrb_value s;
+  mrb_sym mid;
+
+  if (!super)
+    super = mrb->object_class;
+  super->flags |= MRB_FL_CLASS_IS_INHERITED;
+  s = mrb_obj_value(super);
+  mrb_mc_clear_by_class(mrb, klass);
+  mid = mrb_intern_lit(mrb, "inherited");
+  if (!mrb_func_basic_p(mrb, s, mid, mrb_bob_init)) {
+    mrb_value c = mrb_obj_value(klass);
+    mrb_funcall_argv(mrb, s, mid, 1, &c);
+  }
+}
+
+struct RClass*
+mrb_vm_define_class(mrb_state *mrb, mrb_value outer, mrb_value super, mrb_sym id)
+{
+  struct RClass *s;
+  struct RClass *c;
+
+  if (!mrb_nil_p(super)) {
+    if (!mrb_class_p(super)) {
+      mrb_raisef(mrb, E_TYPE_ERROR, "superclass must be a Class (%!v given)", super);
+    }
+    s = mrb_class_ptr(super);
+  }
+  else {
+    s = 0;
+  }
+  check_if_class_or_module(mrb, outer);
+  if (mrb_const_defined_at(mrb, outer, id)) {
+    mrb_value old = mrb_const_get(mrb, outer, id);
+
+    if (!mrb_class_p(old)) {
+      mrb_raisef(mrb, E_TYPE_ERROR, "%!v is not a class", old);
+    }
+    c = mrb_class_ptr(old);
+    if (s) {
+      /* check super class */
+      if (mrb_class_real(c->super) != s) {
+        mrb_raisef(mrb, E_TYPE_ERROR, "superclass mismatch for class %v", old);
+      }
+    }
+    return c;
+  }
+  c = define_class(mrb, id, s, mrb_class_ptr(outer));
+  mrb_class_inherited(mrb, mrb_class_real(c->super), c);
+
+  return c;
+}
+
+MRB_API mrb_bool
+mrb_class_defined(mrb_state *mrb, const char *name)
+{
+  mrb_value sym = mrb_check_intern_cstr(mrb, name);
+  if (mrb_nil_p(sym)) {
+    return FALSE;
+  }
+  return mrb_const_defined(mrb, mrb_obj_value(mrb->object_class), mrb_symbol(sym));
+}
+
+MRB_API mrb_bool
+mrb_class_defined_under(mrb_state *mrb, struct RClass *outer, const char *name)
+{
+  mrb_value sym = mrb_check_intern_cstr(mrb, name);
+  if (mrb_nil_p(sym)) {
+    return FALSE;
+  }
+  return mrb_const_defined_at(mrb, mrb_obj_value(outer), mrb_symbol(sym));
+}
+
+MRB_API struct RClass*
+mrb_class_get_under(mrb_state *mrb, struct RClass *outer, const char *name)
+{
+  return class_from_sym(mrb, outer, mrb_intern_cstr(mrb, name));
+}
+
+MRB_API struct RClass*
+mrb_class_get(mrb_state *mrb, const char *name)
+{
+  return mrb_class_get_under(mrb, mrb->object_class, name);
+}
+
+MRB_API struct RClass*
+mrb_exc_get(mrb_state *mrb, const char *name)
+{
+  struct RClass *exc, *e;
+  mrb_value c = mrb_const_get(mrb, mrb_obj_value(mrb->object_class),
+                              mrb_intern_cstr(mrb, name));
+
+  if (!mrb_class_p(c)) {
+    mrb_raise(mrb, mrb->eException_class, "exception corrupted");
+  }
+  exc = e = mrb_class_ptr(c);
+
+  while (e) {
+    if (e == mrb->eException_class)
+      return exc;
+    e = e->super;
+  }
+  return mrb->eException_class;
+}
+
+MRB_API struct RClass*
+mrb_module_get_under(mrb_state *mrb, struct RClass *outer, const char *name)
+{
+  return module_from_sym(mrb, outer, mrb_intern_cstr(mrb, name));
+}
+
+MRB_API struct RClass*
+mrb_module_get(mrb_state *mrb, const char *name)
+{
+  return mrb_module_get_under(mrb, mrb->object_class, name);
+}
+
+/*!
+ * Defines a class under the namespace of \a outer.
+ * \param outer  a class which contains the new class.
+ * \param name     name of the new class
+ * \param super  a class from which the new class will derive.
+ *               NULL means \c Object class.
+ * \return the created class
+ * \throw TypeError if the constant name \a name is already taken but
+ *                  the constant is not a \c Class.
+ * \throw NameError if the class is already defined but the class can not
+ *                  be reopened because its superclass is not \a super.
+ * \post top-level constant named \a name refers the returned class.
+ *
+ * \note if a class named \a name is already defined and its superclass is
+ *       \a super, the function just returns the defined class.
+ */
+MRB_API struct RClass*
+mrb_define_class_under(mrb_state *mrb, struct RClass *outer, const char *name, struct RClass *super)
+{
+  mrb_sym id = mrb_intern_cstr(mrb, name);
+  struct RClass * c;
+
+#if 0
+  if (!super) {
+    mrb_warn(mrb, "no super class for '%C::%n', Object assumed", outer, id);
+  }
+#endif
+  c = define_class(mrb, id, super, outer);
+  setup_class(mrb, outer, c, id);
+  return c;
+}
+
+MRB_API void
+mrb_define_method_raw(mrb_state *mrb, struct RClass *c, mrb_sym mid, mrb_method_t m)
+{
+  khash_t(mt) *h;
+  khiter_t k;
+  MRB_CLASS_ORIGIN(c);
+  h = c->mt;
+
+  mrb_check_frozen(mrb, c);
+  if (!h) h = c->mt = kh_init(mt, mrb);
+  k = kh_put(mt, mrb, h, mid);
+  kh_value(h, k) = m;
+  if (MRB_METHOD_PROC_P(m) && !MRB_METHOD_UNDEF_P(m)) {
+    struct RProc *p = MRB_METHOD_PROC(m);
+
+    p->flags |= MRB_PROC_SCOPE;
+    p->c = NULL;
+    mrb_field_write_barrier(mrb, (struct RBasic*)c, (struct RBasic*)p);
+    if (!MRB_PROC_ENV_P(p)) {
+      MRB_PROC_SET_TARGET_CLASS(p, c);
+    }
+  }
+  mc_clear_by_id(mrb, c, mid);
+}
+
+MRB_API void
+mrb_define_method_id(mrb_state *mrb, struct RClass *c, mrb_sym mid, mrb_func_t func, mrb_aspec aspec)
+{
+  mrb_method_t m;
+  int ai = mrb_gc_arena_save(mrb);
+
+  MRB_METHOD_FROM_FUNC(m, func);
+  if (aspec == MRB_ARGS_NONE()) {
+    MRB_METHOD_NOARG_SET(m);
+  }
+  mrb_define_method_raw(mrb, c, mid, m);
+  mrb_gc_arena_restore(mrb, ai);
+}
+
+MRB_API void
+mrb_define_method(mrb_state *mrb, struct RClass *c, const char *name, mrb_func_t func, mrb_aspec aspec)
+{
+  mrb_define_method_id(mrb, c, mrb_intern_cstr(mrb, name), func, aspec);
+}
+
+/* a function to raise NotImplementedError with current method name */
+MRB_API void
+mrb_notimplement(mrb_state *mrb)
+{
+  mrb_callinfo *ci = mrb->c->ci;
+
+  if (ci->mid) {
+    mrb_raisef(mrb, E_NOTIMP_ERROR, "%n() function is unimplemented on this machine", ci->mid);
+  }
+}
+
+/* a function to be replacement of unimplemented method */
+MRB_API mrb_value
+mrb_notimplement_m(mrb_state *mrb, mrb_value self)
+{
+  mrb_notimplement(mrb);
+  /* not reached */
+  return mrb_nil_value();
+}
+
+static mrb_value
+to_ary(mrb_state *mrb, mrb_value val)
+{
+  mrb_check_type(mrb, val, MRB_TT_ARRAY);
+  return val;
+}
+
+static mrb_value
+to_hash(mrb_state *mrb, mrb_value val)
+{
+  mrb_check_type(mrb, val, MRB_TT_HASH);
+  return val;
+}
+
+#define to_sym(mrb, ss) mrb_obj_to_sym(mrb, ss)
+
+MRB_API mrb_int
+mrb_get_argc(mrb_state *mrb)
+{
+  mrb_int argc = mrb->c->ci->argc;
+
+  if (argc < 0) {
+    struct RArray *a = mrb_ary_ptr(mrb->c->stack[1]);
+
+    argc = ARY_LEN(a);
+  }
+  return argc;
+}
+
+MRB_API mrb_value*
+mrb_get_argv(mrb_state *mrb)
+{
+  mrb_int argc = mrb->c->ci->argc;
+  mrb_value *array_argv = mrb->c->stack + 1;
+  if (argc < 0) {
+    struct RArray *a = mrb_ary_ptr(*array_argv);
+
+    array_argv = ARY_PTR(a);
+  }
+  return array_argv;
+}
+
+void mrb_hash_check_kdict(mrb_state *mrb, mrb_value self);
+
+/*
+  retrieve arguments from mrb_state.
+
+  mrb_get_args(mrb, format, ...)
+
+  returns number of arguments parsed.
+
+  format specifiers:
+
+    string  mruby type     C type                 note
+    ----------------------------------------------------------------------------------------------
+    o:      Object         [mrb_value]
+    C:      Class/Module   [mrb_value]
+    S:      String         [mrb_value]            when ! follows, the value may be nil
+    A:      Array          [mrb_value]            when ! follows, the value may be nil
+    H:      Hash           [mrb_value]            when ! follows, the value may be nil
+    s:      String         [char*,mrb_int]        Receive two arguments; s! gives (NULL,0) for nil
+    z:      String         [char*]                NUL terminated string; z! gives NULL for nil
+    a:      Array          [mrb_value*,mrb_int]   Receive two arguments; a! gives (NULL,0) for nil
+    f:      Fixnum/Float   [mrb_float]
+    i:      Fixnum/Float   [mrb_int]
+    b:      boolean        [mrb_bool]
+    n:      String/Symbol  [mrb_sym]
+    d:      data           [void*,mrb_data_type const] 2nd argument will be used to check data type so it won't be modified; when ! follows, the value may be nil
+    I:      inline struct  [void*]
+    &:      block          [mrb_value]            &! raises exception if no block given
+    *:      rest argument  [mrb_value*,mrb_int]   The rest of the arguments as an array; *! avoid copy of the stack
+    |:      optional                              Following arguments are optional
+    ?:      optional given [mrb_bool]             true if preceding argument (optional) is given
+    ':':    keyword args   [mrb_kwargs const]     Get keyword arguments
+ */
+MRB_API mrb_int
+mrb_get_args(mrb_state *mrb, const char *format, ...)
+{
+  const char *fmt = format;
+  char c;
+  mrb_int i = 0;
+  va_list ap;
+  mrb_int argc = mrb->c->ci->argc;
+  mrb_value *array_argv = mrb->c->stack+1;
+  mrb_bool argv_on_stack = argc >= 0;
+  mrb_bool opt = FALSE;
+  mrb_bool opt_skip = TRUE;
+  mrb_bool given = TRUE;
+  mrb_value kdict;
+  mrb_bool reqkarg = FALSE;
+  mrb_int needargc = 0;
+
+  if (!argv_on_stack) {
+    struct RArray *a = mrb_ary_ptr(*array_argv);
+    array_argv = ARY_PTR(a);
+    argc = ARY_LEN(a);
+  }
+  va_start(ap, format);
+
+#define ARGV array_argv
+
+  while ((c = *fmt++)) {
+    switch (c) {
+    case '|':
+      opt = TRUE;
+      break;
+    case '*':
+      opt_skip = FALSE;
+      if (!reqkarg) reqkarg = strchr(fmt, ':') ? TRUE : FALSE;
+      goto check_exit;
+    case '!':
+      break;
+    case ':':
+      reqkarg = TRUE;
+      /* fall through */
+    case '&': case '?':
+      if (opt) opt_skip = FALSE;
+      break;
+    default:
+      if (!opt) needargc ++;
+      break;
+    }
+  }
+
+ check_exit:
+  if (reqkarg && argc > needargc && mrb_hash_p(kdict = ARGV[argc - 1])) {
+    mrb_hash_check_kdict(mrb, kdict);
+    argc --;
+  }
+  else {
+    kdict = mrb_nil_value();
+  }
+
+  opt = FALSE;
+  i = 0;
+  while ((c = *format++)) {
+    mrb_value *argv = ARGV;
+    mrb_bool altmode;
+
+    switch (c) {
+    case '|': case '*': case '&': case '?': case ':':
+      break;
+    default:
+      if (argc <= i) {
+        if (opt) {
+          given = FALSE;
+        }
+        else {
+          mrb_raise(mrb, E_ARGUMENT_ERROR, "wrong number of arguments");
+        }
+      }
+      break;
+    }
+
+    if (*format == '!') {
+      format ++;
+      altmode = TRUE;
+    }
+    else {
+      altmode = FALSE;
+    }
+
+    switch (c) {
+    case 'o':
+      {
+        mrb_value *p;
+
+        p = va_arg(ap, mrb_value*);
+        if (i < argc) {
+          *p = argv[i++];
+        }
+      }
+      break;
+    case 'C':
+      {
+        mrb_value *p;
+
+        p = va_arg(ap, mrb_value*);
+        if (i < argc) {
+          mrb_value ss;
+
+          ss = argv[i++];
+          if (!class_ptr_p(ss)) {
+            mrb_raisef(mrb, E_TYPE_ERROR, "%v is not class/module", ss);
+          }
+          *p = ss;
+        }
+      }
+      break;
+    case 'S':
+      {
+        mrb_value *p;
+
+        p = va_arg(ap, mrb_value*);
+        if (i < argc) {
+          *p = argv[i++];
+          if (!(altmode && mrb_nil_p(*p))) {
+            mrb_to_str(mrb, *p);
+          }
+        }
+      }
+      break;
+    case 'A':
+      {
+        mrb_value *p;
+
+        p = va_arg(ap, mrb_value*);
+        if (i < argc) {
+          *p = argv[i++];
+          if (!(altmode && mrb_nil_p(*p))) {
+            *p = to_ary(mrb, *p);
+          }
+        }
+      }
+      break;
+    case 'H':
+      {
+        mrb_value *p;
+
+        p = va_arg(ap, mrb_value*);
+        if (i < argc) {
+          *p = argv[i++];
+          if (!(altmode && mrb_nil_p(*p))) {
+            *p = to_hash(mrb, *p);
+          }
+        }
+      }
+      break;
+    case 's':
+      {
+        mrb_value ss;
+        char **ps = 0;
+        mrb_int *pl = 0;
+
+        ps = va_arg(ap, char**);
+        pl = va_arg(ap, mrb_int*);
+        if (i < argc) {
+          ss = argv[i++];
+          if (altmode && mrb_nil_p(ss)) {
+            *ps = NULL;
+            *pl = 0;
+          }
+          else {
+            mrb_to_str(mrb, ss);
+            *ps = RSTRING_PTR(ss);
+            *pl = RSTRING_LEN(ss);
+          }
+        }
+      }
+      break;
+    case 'z':
+      {
+        mrb_value ss;
+        const char **ps;
+
+        ps = va_arg(ap, const char**);
+        if (i < argc) {
+          ss = argv[i++];
+          if (altmode && mrb_nil_p(ss)) {
+            *ps = NULL;
+          }
+          else {
+            mrb_to_str(mrb, ss);
+            *ps = RSTRING_CSTR(mrb, ss);
+          }
+        }
+      }
+      break;
+    case 'a':
+      {
+        mrb_value aa;
+        struct RArray *a;
+        mrb_value **pb;
+        mrb_int *pl;
+
+        pb = va_arg(ap, mrb_value**);
+        pl = va_arg(ap, mrb_int*);
+        if (i < argc) {
+          aa = argv[i++];
+          if (altmode && mrb_nil_p(aa)) {
+            *pb = 0;
+            *pl = 0;
+          }
+          else {
+            aa = to_ary(mrb, aa);
+            a = mrb_ary_ptr(aa);
+            *pb = ARY_PTR(a);
+            *pl = ARY_LEN(a);
+          }
+        }
+      }
+      break;
+    case 'I':
+      {
+        void* *p;
+        mrb_value ss;
+
+        p = va_arg(ap, void**);
+        if (i < argc) {
+          ss = argv[i++];
+          if (!mrb_istruct_p(ss))
+          {
+            mrb_raisef(mrb, E_TYPE_ERROR, "%v is not inline struct", ss);
+          }
+          *p = mrb_istruct_ptr(ss);
+        }
+      }
+      break;
+#ifndef MRB_WITHOUT_FLOAT
+    case 'f':
+      {
+        mrb_float *p;
+
+        p = va_arg(ap, mrb_float*);
+        if (i < argc) {
+          *p = mrb_to_flo(mrb, argv[i++]);
+        }
+      }
+      break;
+#endif
+    case 'i':
+      {
+        mrb_int *p;
+
+        p = va_arg(ap, mrb_int*);
+        if (i < argc) {
+          *p = mrb_fixnum(mrb_to_int(mrb, argv[i++]));
+        }
+      }
+      break;
+    case 'b':
+      {
+        mrb_bool *boolp = va_arg(ap, mrb_bool*);
+
+        if (i < argc) {
+          mrb_value b = argv[i++];
+          *boolp = mrb_test(b);
+        }
+      }
+      break;
+    case 'n':
+      {
+        mrb_sym *symp;
+
+        symp = va_arg(ap, mrb_sym*);
+        if (i < argc) {
+          mrb_value ss;
+
+          ss = argv[i++];
+          *symp = to_sym(mrb, ss);
+        }
+      }
+      break;
+    case 'd':
+      {
+        void** datap;
+        struct mrb_data_type const* type;
+
+        datap = va_arg(ap, void**);
+        type = va_arg(ap, struct mrb_data_type const*);
+        if (i < argc) {
+          mrb_value dd = argv[i++];
+          if (altmode && mrb_nil_p(dd)) {
+            *datap = 0;
+          }
+          else {
+            *datap = mrb_data_get_ptr(mrb, dd, type);
+          }
+        }
+      }
+      break;
+
+    case '&':
+      {
+        mrb_value *p, *bp;
+
+        p = va_arg(ap, mrb_value*);
+        if (mrb->c->ci->argc < 0) {
+          bp = mrb->c->stack + 2;
+        }
+        else {
+          bp = mrb->c->stack + mrb->c->ci->argc + 1;
+        }
+        if (altmode && mrb_nil_p(*bp)) {
+          mrb_raise(mrb, E_ARGUMENT_ERROR, "no block given");
+        }
+        *p = *bp;
+      }
+      break;
+    case '|':
+      if (opt_skip && i == argc) goto finish;
+      opt = TRUE;
+      break;
+    case '?':
+      {
+        mrb_bool *p;
+
+        p = va_arg(ap, mrb_bool*);
+        *p = given;
+      }
+      break;
+
+    case '*':
+      {
+        mrb_value **var;
+        mrb_int *pl;
+        mrb_bool nocopy = (altmode || !argv_on_stack) ? TRUE : FALSE;
+
+        var = va_arg(ap, mrb_value**);
+        pl = va_arg(ap, mrb_int*);
+        if (argc > i) {
+          *pl = argc-i;
+          if (*pl > 0) {
+            if (nocopy) {
+              *var = argv+i;
+            }
+            else {
+              mrb_value args = mrb_ary_new_from_values(mrb, *pl, argv+i);
+              RARRAY(args)->c = NULL;
+              *var = RARRAY_PTR(args);
+            }
+          }
+          i = argc;
+        }
+        else {
+          *pl = 0;
+          *var = NULL;
+        }
+      }
+      break;
+
+    case ':':
+      {
+        mrb_value ksrc = mrb_hash_p(kdict) ? mrb_hash_dup(mrb, kdict) : mrb_hash_new(mrb);
+        const mrb_kwargs *kwargs = va_arg(ap, const mrb_kwargs*);
+        mrb_value *rest;
+
+        if (kwargs == NULL) {
+          rest = NULL;
+        }
+        else {
+          uint32_t kwnum = kwargs->num;
+          uint32_t required = kwargs->required;
+          const char *const *kname = kwargs->table;
+          mrb_value *values = kwargs->values;
+          uint32_t j;
+          const uint32_t keyword_max = 40;
+
+          if (kwnum > keyword_max || required > kwnum) {
+            mrb_raise(mrb, E_ARGUMENT_ERROR, "keyword number is too large");
+          }
+
+          for (j = required; j > 0; j --, kname ++, values ++) {
+            mrb_value k = mrb_symbol_value(mrb_intern_cstr(mrb, *kname));
+            if (!mrb_hash_key_p(mrb, ksrc, k)) {
+              mrb_raisef(mrb, E_ARGUMENT_ERROR, "missing keyword: %s", *kname);
+            }
+            *values = mrb_hash_delete_key(mrb, ksrc, k);
+            mrb_gc_protect(mrb, *values);
+          }
+
+          for (j = kwnum - required; j > 0; j --, kname ++, values ++) {
+            mrb_value k = mrb_symbol_value(mrb_intern_cstr(mrb, *kname));
+            if (mrb_hash_key_p(mrb, ksrc, k)) {
+              *values = mrb_hash_delete_key(mrb, ksrc, k);
+              mrb_gc_protect(mrb, *values);
+            }
+            else {
+              *values = mrb_undef_value();
+            }
+          }
+
+          rest = kwargs->rest;
+        }
+
+        if (rest) {
+          *rest = ksrc;
+        }
+        else if (!mrb_hash_empty_p(mrb, ksrc)) {
+          ksrc = mrb_hash_keys(mrb, ksrc);
+          ksrc = RARRAY_PTR(ksrc)[0];
+          mrb_raisef(mrb, E_ARGUMENT_ERROR, "unknown keyword: %v", ksrc);
+        }
+      }
+      break;
+
+    default:
+      mrb_raisef(mrb, E_ARGUMENT_ERROR, "invalid argument specifier %c", c);
+      break;
+    }
+  }
+
+#undef ARGV
+
+  if (!c && argc > i) {
+    mrb_raise(mrb, E_ARGUMENT_ERROR, "wrong number of arguments");
+  }
+
+finish:
+  va_end(ap);
+  return i;
+}
+
+static struct RClass*
+boot_defclass(mrb_state *mrb, struct RClass *super)
+{
+  struct RClass *c;
+
+  c = (struct RClass*)mrb_obj_alloc(mrb, MRB_TT_CLASS, mrb->class_class);
+  if (super) {
+    c->super = super;
+    mrb_field_write_barrier(mrb, (struct RBasic*)c, (struct RBasic*)super);
+  }
+  else {
+    c->super = mrb->object_class;
+  }
+  c->mt = kh_init(mt, mrb);
+  return c;
+}
+
+static void
+boot_initmod(mrb_state *mrb, struct RClass *mod)
+{
+  if (!mod->mt) {
+    mod->mt = kh_init(mt, mrb);
+  }
+}
+
+static struct RClass*
+include_class_new(mrb_state *mrb, struct RClass *m, struct RClass *super)
+{
+  struct RClass *ic = (struct RClass*)mrb_obj_alloc(mrb, MRB_TT_ICLASS, mrb->class_class);
+  if (m->tt == MRB_TT_ICLASS) {
+    m = m->c;
+  }
+  MRB_CLASS_ORIGIN(m);
+  ic->iv = m->iv;
+  ic->mt = m->mt;
+  ic->super = super;
+  if (m->tt == MRB_TT_ICLASS) {
+    ic->c = m->c;
+  }
+  else {
+    ic->c = m;
+  }
+  return ic;
+}
+
+static int
+include_module_at(mrb_state *mrb, struct RClass *c, struct RClass *ins_pos, struct RClass *m, int search_super)
+{
+  struct RClass *p, *ic;
+  void *klass_mt = find_origin(c)->mt;
+
+  while (m) {
+    int superclass_seen = 0;
+
+    if (m->flags & MRB_FL_CLASS_IS_PREPENDED)
+      goto skip;
+
+    if (klass_mt && klass_mt == m->mt)
+      return -1;
+
+    p = c->super;
+    while (p) {
+      if (p->tt == MRB_TT_ICLASS) {
+        if (p->mt == m->mt) {
+          if (!superclass_seen) {
+            ins_pos = p; /* move insert point */
+          }
+          goto skip;
+        }
+      } else if (p->tt == MRB_TT_CLASS) {
+        if (!search_super) break;
+        superclass_seen = 1;
+      }
+      p = p->super;
+    }
+
+    ic = include_class_new(mrb, m, ins_pos->super);
+    m->flags |= MRB_FL_CLASS_IS_INHERITED;
+    ins_pos->super = ic;
+    mrb_field_write_barrier(mrb, (struct RBasic*)ins_pos, (struct RBasic*)ic);
+    mrb_mc_clear_by_class(mrb, ins_pos);
+    ins_pos = ic;
+  skip:
+    m = m->super;
+  }
+  mc_clear_all(mrb);
+  return 0;
+}
+
+MRB_API void
+mrb_include_module(mrb_state *mrb, struct RClass *c, struct RClass *m)
+{
+  mrb_check_frozen(mrb, c);
+  if (include_module_at(mrb, c, find_origin(c), m, 1) < 0) {
+    mrb_raise(mrb, E_ARGUMENT_ERROR, "cyclic include detected");
+  }
+}
+
+MRB_API void
+mrb_prepend_module(mrb_state *mrb, struct RClass *c, struct RClass *m)
+{
+  struct RClass *origin;
+  int changed = 0;
+
+  mrb_check_frozen(mrb, c);
+  if (!(c->flags & MRB_FL_CLASS_IS_PREPENDED)) {
+    origin = (struct RClass*)mrb_obj_alloc(mrb, MRB_TT_ICLASS, c);
+    origin->flags |= MRB_FL_CLASS_IS_ORIGIN | MRB_FL_CLASS_IS_INHERITED;
+    origin->super = c->super;
+    c->super = origin;
+    origin->mt = c->mt;
+    c->mt = kh_init(mt, mrb);
+    mrb_field_write_barrier(mrb, (struct RBasic*)c, (struct RBasic*)origin);
+    c->flags |= MRB_FL_CLASS_IS_PREPENDED;
+  }
+  changed = include_module_at(mrb, c, c, m, 0);
+  if (changed < 0) {
+    mrb_raise(mrb, E_ARGUMENT_ERROR, "cyclic prepend detected");
+  }
+}
+
+static mrb_value
+mrb_mod_prepend_features(mrb_state *mrb, mrb_value mod)
+{
+  mrb_value klass;
+
+  mrb_check_type(mrb, mod, MRB_TT_MODULE);
+  mrb_get_args(mrb, "C", &klass);
+  mrb_prepend_module(mrb, mrb_class_ptr(klass), mrb_class_ptr(mod));
+  return mod;
+}
+
+static mrb_value
+mrb_mod_append_features(mrb_state *mrb, mrb_value mod)
+{
+  mrb_value klass;
+
+  mrb_check_type(mrb, mod, MRB_TT_MODULE);
+  mrb_get_args(mrb, "C", &klass);
+  mrb_include_module(mrb, mrb_class_ptr(klass), mrb_class_ptr(mod));
+  return mod;
+}
+
+/* 15.2.2.4.28 */
+/*
+ *  call-seq:
+ *     mod.include?(module)    -> true or false
+ *
+ *  Returns <code>true</code> if <i>module</i> is included in
+ *  <i>mod</i> or one of <i>mod</i>'s ancestors.
+ *
+ *     module A
+ *     end
+ *     class B
+ *       include A
+ *     end
+ *     class C < B
+ *     end
+ *     B.include?(A)   #=> true
+ *     C.include?(A)   #=> true
+ *     A.include?(A)   #=> false
+ */
+static mrb_value
+mrb_mod_include_p(mrb_state *mrb, mrb_value mod)
+{
+  mrb_value mod2;
+  struct RClass *c = mrb_class_ptr(mod);
+
+  mrb_get_args(mrb, "C", &mod2);
+  mrb_check_type(mrb, mod2, MRB_TT_MODULE);
+
+  while (c) {
+    if (c->tt == MRB_TT_ICLASS) {
+      if (c->c == mrb_class_ptr(mod2)) return mrb_true_value();
+    }
+    c = c->super;
+  }
+  return mrb_false_value();
+}
+
+static mrb_value
+mrb_mod_ancestors(mrb_state *mrb, mrb_value self)
+{
+  mrb_value result;
+  struct RClass *c = mrb_class_ptr(self);
+  result = mrb_ary_new(mrb);
+  while (c) {
+    if (c->tt == MRB_TT_ICLASS) {
+      mrb_ary_push(mrb, result, mrb_obj_value(c->c));
+    }
+    else if (!(c->flags & MRB_FL_CLASS_IS_PREPENDED)) {
+      mrb_ary_push(mrb, result, mrb_obj_value(c));
+    }
+    c = c->super;
+  }
+
+  return result;
+}
+
+static mrb_value
+mrb_mod_extend_object(mrb_state *mrb, mrb_value mod)
+{
+  mrb_value obj;
+
+  mrb_check_type(mrb, mod, MRB_TT_MODULE);
+  mrb_get_args(mrb, "o", &obj);
+  mrb_include_module(mrb, mrb_class_ptr(mrb_singleton_class(mrb, obj)), mrb_class_ptr(mod));
+  return mod;
+}
+
+static mrb_value
+mrb_mod_initialize(mrb_state *mrb, mrb_value mod)
+{
+  mrb_value b;
+  struct RClass *m = mrb_class_ptr(mod);
+  boot_initmod(mrb, m); /* bootstrap a newly initialized module */
+  mrb_get_args(mrb, "|&", &b);
+  if (!mrb_nil_p(b)) {
+    mrb_yield_with_class(mrb, b, 1, &mod, mod, m);
+  }
+  return mod;
+}
+
+/* implementation of module_eval/class_eval */
+mrb_value mrb_mod_module_eval(mrb_state*, mrb_value);
+
+static mrb_value
+mrb_mod_dummy_visibility(mrb_state *mrb, mrb_value mod)
+{
+  return mod;
+}
+
+MRB_API mrb_value
+mrb_singleton_class(mrb_state *mrb, mrb_value v)
+{
+  struct RBasic *obj;
+
+  switch (mrb_type(v)) {
+  case MRB_TT_FALSE:
+    if (mrb_nil_p(v))
+      return mrb_obj_value(mrb->nil_class);
+    return mrb_obj_value(mrb->false_class);
+  case MRB_TT_TRUE:
+    return mrb_obj_value(mrb->true_class);
+  case MRB_TT_CPTR:
+    return mrb_obj_value(mrb->object_class);
+  case MRB_TT_SYMBOL:
+  case MRB_TT_FIXNUM:
+#ifndef MRB_WITHOUT_FLOAT
+  case MRB_TT_FLOAT:
+#endif
+    mrb_raise(mrb, E_TYPE_ERROR, "can't define singleton");
+    return mrb_nil_value();    /* not reached */
+  default:
+    break;
+  }
+  obj = mrb_basic_ptr(v);
+  prepare_singleton_class(mrb, obj);
+  return mrb_obj_value(obj->c);
+}
+
+MRB_API void
+mrb_define_singleton_method(mrb_state *mrb, struct RObject *o, const char *name, mrb_func_t func, mrb_aspec aspec)
+{
+  prepare_singleton_class(mrb, (struct RBasic*)o);
+  mrb_define_method_id(mrb, o->c, mrb_intern_cstr(mrb, name), func, aspec);
+}
+
+MRB_API void
+mrb_define_class_method(mrb_state *mrb, struct RClass *c, const char *name, mrb_func_t func, mrb_aspec aspec)
+{
+  mrb_define_singleton_method(mrb, (struct RObject*)c, name, func, aspec);
+}
+
+MRB_API void
+mrb_define_module_function(mrb_state *mrb, struct RClass *c, const char *name, mrb_func_t func, mrb_aspec aspec)
+{
+  mrb_define_class_method(mrb, c, name, func, aspec);
+  mrb_define_method(mrb, c, name, func, aspec);
+}
+
+#ifdef MRB_METHOD_CACHE
+static void
+mc_clear_all(mrb_state *mrb)
+{
+  struct mrb_cache_entry *mc = mrb->cache;
+  int i;
+
+  for (i=0; i<MRB_METHOD_CACHE_SIZE; i++) {
+    mc[i].c = 0;
+  }
+}
+
+void
+mrb_mc_clear_by_class(mrb_state *mrb, struct RClass *c)
+{
+  struct mrb_cache_entry *mc = mrb->cache;
+  int i;
+
+  if (c->flags & MRB_FL_CLASS_IS_INHERITED) {
+    mc_clear_all(mrb);
+    c->flags &= ~MRB_FL_CLASS_IS_INHERITED;
+    return;
+  }
+  for (i=0; i<MRB_METHOD_CACHE_SIZE; i++) {
+    if (mc[i].c == c) mc[i].c = 0;
+  }
+}
+
+static void
+mc_clear_by_id(mrb_state *mrb, struct RClass *c, mrb_sym mid)
+{
+  struct mrb_cache_entry *mc = mrb->cache;
+  int i;
+
+  if (c->flags & MRB_FL_CLASS_IS_INHERITED) {
+    mc_clear_all(mrb);
+    c->flags &= ~MRB_FL_CLASS_IS_INHERITED;
+    return;
+  }
+  for (i=0; i<MRB_METHOD_CACHE_SIZE; i++) {
+    if (mc[i].c == c || mc[i].mid == mid)
+      mc[i].c = 0;
+  }
+}
+#endif
+
+MRB_API mrb_method_t
+mrb_method_search_vm(mrb_state *mrb, struct RClass **cp, mrb_sym mid)
+{
+  khiter_t k;
+  mrb_method_t m;
+  struct RClass *c = *cp;
+#ifdef MRB_METHOD_CACHE
+  struct RClass *oc = c;
+  int h = kh_int_hash_func(mrb, ((intptr_t)oc) ^ mid) & (MRB_METHOD_CACHE_SIZE-1);
+  struct mrb_cache_entry *mc = &mrb->cache[h];
+
+  if (mc->c == c && mc->mid == mid) {
+    *cp = mc->c0;
+    return mc->m;
+  }
+#endif
+
+  while (c) {
+    khash_t(mt) *h = c->mt;
+
+    if (h) {
+      k = kh_get(mt, mrb, h, mid);
+      if (k != kh_end(h)) {
+        m = kh_value(h, k);
+        if (MRB_METHOD_UNDEF_P(m)) break;
+        *cp = c;
+#ifdef MRB_METHOD_CACHE
+        mc->c = oc;
+        mc->c0 = c;
+        mc->mid = mid;
+        mc->m = m;
+#endif
+        return m;
+      }
+    }
+    c = c->super;
+  }
+  MRB_METHOD_FROM_PROC(m, NULL);
+  return m;                  /* no method */
+}
+
+MRB_API mrb_method_t
+mrb_method_search(mrb_state *mrb, struct RClass* c, mrb_sym mid)
+{
+  mrb_method_t m;
+
+  m = mrb_method_search_vm(mrb, &c, mid);
+  if (MRB_METHOD_UNDEF_P(m)) {
+    mrb_name_error(mrb, mid, "undefined method '%n' for class %C", mid, c);
+  }
+  return m;
+}
+
+#define ONSTACK_ALLOC_MAX 32
+
+static mrb_sym
+prepare_name_common(mrb_state *mrb, mrb_sym sym, const char *prefix, const char *suffix)
+{
+  char onstack[ONSTACK_ALLOC_MAX];
+  mrb_int sym_len;
+  const char *sym_str = mrb_sym_name_len(mrb, sym, &sym_len);
+  size_t prefix_len = prefix ? strlen(prefix) : 0;
+  size_t suffix_len = suffix ? strlen(suffix) : 0;
+  size_t name_len = sym_len + prefix_len + suffix_len;
+  char *buf = name_len > sizeof(onstack) ? (char *)mrb_alloca(mrb, name_len) : onstack;
+  char *p = buf;
+
+  if (prefix_len > 0) {
+    memcpy(p, prefix, prefix_len);
+    p += prefix_len;
+  }
+
+  memcpy(p, sym_str, sym_len);
+  p += sym_len;
+
+  if (suffix_len > 0) {
+    memcpy(p, suffix, suffix_len);
+    p += suffix_len;
+  }
+
+  return mrb_intern(mrb, buf, name_len);
+}
+
+static mrb_value
+prepare_ivar_name(mrb_state *mrb, mrb_sym sym)
+{
+  sym = prepare_name_common(mrb, sym, "@", NULL);
+  mrb_iv_name_sym_check(mrb, sym);
+  return mrb_symbol_value(sym);
+}
+
+static mrb_sym
+prepare_writer_name(mrb_state *mrb, mrb_sym sym)
+{
+  return prepare_name_common(mrb, sym, NULL, "=");
+}
+
+static mrb_value
+mod_attr_define(mrb_state *mrb, mrb_value mod, mrb_value (*accessor)(mrb_state *, mrb_value), mrb_sym (*access_name)(mrb_state *, mrb_sym))
+{
+  struct RClass *c = mrb_class_ptr(mod);
+  mrb_value *argv;
+  mrb_int argc, i;
+  int ai;
+
+  mrb_get_args(mrb, "*", &argv, &argc);
+  ai = mrb_gc_arena_save(mrb);
+  for (i=0; i<argc; i++) {
+    mrb_value name;
+    mrb_sym method;
+    struct RProc *p;
+    mrb_method_t m;
+
+    method = to_sym(mrb, argv[i]);
+    name = prepare_ivar_name(mrb, method);
+    if (access_name) {
+      method = access_name(mrb, method);
+    }
+
+    p = mrb_proc_new_cfunc_with_env(mrb, accessor, 1, &name);
+    MRB_METHOD_FROM_PROC(m, p);
+    mrb_define_method_raw(mrb, c, method, m);
+    mrb_gc_arena_restore(mrb, ai);
+  }
+  return mrb_nil_value();
+}
+
+static mrb_value
+attr_reader(mrb_state *mrb, mrb_value obj)
+{
+  mrb_value name = mrb_proc_cfunc_env_get(mrb, 0);
+  return mrb_iv_get(mrb, obj, to_sym(mrb, name));
+}
+
+static mrb_value
+mrb_mod_attr_reader(mrb_state *mrb, mrb_value mod)
+{
+  return mod_attr_define(mrb, mod, attr_reader, NULL);
+}
+
+static mrb_value
+attr_writer(mrb_state *mrb, mrb_value obj)
+{
+  mrb_value name = mrb_proc_cfunc_env_get(mrb, 0);
+  mrb_value val;
+
+  mrb_get_args(mrb, "o", &val);
+  mrb_iv_set(mrb, obj, to_sym(mrb, name), val);
+  return val;
+}
+
+static mrb_value
+mrb_mod_attr_writer(mrb_state *mrb, mrb_value mod)
+{
+  return mod_attr_define(mrb, mod, attr_writer, prepare_writer_name);
+}
+
+static mrb_value
+mrb_instance_alloc(mrb_state *mrb, mrb_value cv)
+{
+  struct RClass *c = mrb_class_ptr(cv);
+  struct RObject *o;
+  enum mrb_vtype ttype = MRB_INSTANCE_TT(c);
+
+  if (c->tt == MRB_TT_SCLASS)
+    mrb_raise(mrb, E_TYPE_ERROR, "can't create instance of singleton class");
+
+  if (ttype == 0) ttype = MRB_TT_OBJECT;
+  if (ttype <= MRB_TT_CPTR) {
+    mrb_raisef(mrb, E_TYPE_ERROR, "can't create instance of %v", cv);
+  }
+  o = (struct RObject*)mrb_obj_alloc(mrb, ttype, c);
+  return mrb_obj_value(o);
+}
+
+/*
+ *  call-seq:
+ *     class.new(args, ...)    ->  obj
+ *
+ *  Creates a new object of <i>class</i>'s class, then
+ *  invokes that object's <code>initialize</code> method,
+ *  passing it <i>args</i>. This is the method that ends
+ *  up getting called whenever an object is constructed using
+ *  `.new`.
+ *
+ */
+
+mrb_value
+mrb_instance_new(mrb_state *mrb, mrb_value cv)
+{
+  mrb_value obj, blk;
+  mrb_value *argv;
+  mrb_int argc;
+  mrb_sym init;
+
+  mrb_get_args(mrb, "*!&", &argv, &argc, &blk);
+  obj = mrb_instance_alloc(mrb, cv);
+  init = mrb_intern_lit(mrb, "initialize");
+  if (!mrb_func_basic_p(mrb, obj, init, mrb_bob_init)) {
+    mrb_funcall_with_block(mrb, obj, init, argc, argv, blk);
+  }
+  return obj;
+}
+
+MRB_API mrb_value
+mrb_obj_new(mrb_state *mrb, struct RClass *c, mrb_int argc, const mrb_value *argv)
+{
+  mrb_value obj;
+  mrb_sym mid;
+
+  obj = mrb_instance_alloc(mrb, mrb_obj_value(c));
+  mid = mrb_intern_lit(mrb, "initialize");
+  if (!mrb_func_basic_p(mrb, obj, mid, mrb_bob_init)) {
+    mrb_funcall_argv(mrb, obj, mid, argc, argv);
+  }
+  return obj;
+}
+
+static mrb_value
+mrb_class_initialize(mrb_state *mrb, mrb_value c)
+{
+  mrb_value a, b;
+
+  mrb_get_args(mrb, "|C&", &a, &b);
+  if (!mrb_nil_p(b)) {
+    mrb_yield_with_class(mrb, b, 1, &c, c, mrb_class_ptr(c));
+  }
+  return c;
+}
+
+static mrb_value
+mrb_class_new_class(mrb_state *mrb, mrb_value cv)
+{
+  mrb_int n;
+  mrb_value super, blk;
+  mrb_value new_class;
+  mrb_sym mid;
+
+  n = mrb_get_args(mrb, "|C&", &super, &blk);
+  if (n == 0) {
+    super = mrb_obj_value(mrb->object_class);
+  }
+  new_class = mrb_obj_value(mrb_class_new(mrb, mrb_class_ptr(super)));
+  mid = mrb_intern_lit(mrb, "initialize");
+  if (mrb_func_basic_p(mrb, new_class, mid, mrb_class_initialize)) {
+    mrb_class_initialize(mrb, new_class);
+  }
+  else {
+    mrb_funcall_with_block(mrb, new_class, mid, n, &super, blk);
+  }
+  mrb_class_inherited(mrb, mrb_class_ptr(super), mrb_class_ptr(new_class));
+  return new_class;
+}
+
+static mrb_value
+mrb_class_superclass(mrb_state *mrb, mrb_value klass)
+{
+  struct RClass *c;
+
+  c = mrb_class_ptr(klass);
+  c = find_origin(c)->super;
+  while (c && c->tt == MRB_TT_ICLASS) {
+    c = find_origin(c)->super;
+  }
+  if (!c) return mrb_nil_value();
+  return mrb_obj_value(c);
+}
+
+static mrb_value
+mrb_bob_init(mrb_state *mrb, mrb_value cv)
+{
+  return mrb_nil_value();
+}
+
+static mrb_value
+mrb_bob_not(mrb_state *mrb, mrb_value cv)
+{
+  return mrb_bool_value(!mrb_test(cv));
+}
+
+/* 15.3.1.3.1  */
+/* 15.3.1.3.10 */
+/* 15.3.1.3.11 */
+/*
+ *  call-seq:
+ *     obj == other        -> true or false
+ *     obj.equal?(other)   -> true or false
+ *     obj.eql?(other)     -> true or false
+ *
+ *  Equality---At the <code>Object</code> level, <code>==</code> returns
+ *  <code>true</code> only if <i>obj</i> and <i>other</i> are the
+ *  same object. Typically, this method is overridden in descendant
+ *  classes to provide class-specific meaning.
+ *
+ *  Unlike <code>==</code>, the <code>equal?</code> method should never be
+ *  overridden by subclasses: it is used to determine object identity
+ *  (that is, <code>a.equal?(b)</code> iff <code>a</code> is the same
+ *  object as <code>b</code>).
+ *
+ *  The <code>eql?</code> method returns <code>true</code> if
+ *  <i>obj</i> and <i>anObject</i> have the same value. Used by
+ *  <code>Hash</code> to test members for equality.  For objects of
+ *  class <code>Object</code>, <code>eql?</code> is synonymous with
+ *  <code>==</code>. Subclasses normally continue this tradition, but
+ *  there are exceptions. <code>Numeric</code> types, for example,
+ *  perform type conversion across <code>==</code>, but not across
+ *  <code>eql?</code>, so:
+ *
+ *     1 == 1.0     #=> true
+ *     1.eql? 1.0   #=> false
+ */
+mrb_value
+mrb_obj_equal_m(mrb_state *mrb, mrb_value self)
+{
+  mrb_value arg;
+
+  mrb_get_args(mrb, "o", &arg);
+  return mrb_bool_value(mrb_obj_equal(mrb, self, arg));
+}
+
+static mrb_value
+mrb_obj_not_equal_m(mrb_state *mrb, mrb_value self)
+{
+  mrb_value arg;
+
+  mrb_get_args(mrb, "o", &arg);
+  return mrb_bool_value(!mrb_equal(mrb, self, arg));
+}
+
+MRB_API mrb_bool
+mrb_obj_respond_to(mrb_state *mrb, struct RClass* c, mrb_sym mid)
+{
+  mrb_method_t m;
+
+  m = mrb_method_search_vm(mrb, &c, mid);
+  if (MRB_METHOD_UNDEF_P(m)) {
+    return FALSE;
+  }
+  return TRUE;
+}
+
+MRB_API mrb_bool
+mrb_respond_to(mrb_state *mrb, mrb_value obj, mrb_sym mid)
+{
+  return mrb_obj_respond_to(mrb, mrb_class(mrb, obj), mid);
+}
+
+MRB_API mrb_value
+mrb_class_path(mrb_state *mrb, struct RClass *c)
+{
+  mrb_value path;
+  mrb_sym nsym = mrb_intern_lit(mrb, "__classname__");
+
+  path = mrb_obj_iv_get(mrb, (struct RObject*)c, nsym);
+  if (mrb_nil_p(path)) {
+    /* no name (yet) */
+    return mrb_class_find_path(mrb, c);
+  }
+  else if (mrb_symbol_p(path)) {
+    /* toplevel class/module */
+    return mrb_sym_str(mrb, mrb_symbol(path));
+  }
+  return mrb_str_dup(mrb, path);
+}
+
+MRB_API struct RClass*
+mrb_class_real(struct RClass* cl)
+{
+  if (cl == 0) return NULL;
+  while ((cl->tt == MRB_TT_SCLASS) || (cl->tt == MRB_TT_ICLASS)) {
+    cl = cl->super;
+    if (cl == 0) return NULL;
+  }
+  return cl;
+}
+
+MRB_API const char*
+mrb_class_name(mrb_state *mrb, struct RClass* c)
+{
+  mrb_value name = class_name_str(mrb, c);
+  return RSTRING_PTR(name);
+}
+
+MRB_API const char*
+mrb_obj_classname(mrb_state *mrb, mrb_value obj)
+{
+  return mrb_class_name(mrb, mrb_obj_class(mrb, obj));
+}
+
+/*!
+ * Ensures a class can be derived from super.
+ *
+ * \param super a reference to an object.
+ * \exception TypeError if \a super is not a Class or \a super is a singleton class.
+ */
+static void
+mrb_check_inheritable(mrb_state *mrb, struct RClass *super)
+{
+  if (super->tt != MRB_TT_CLASS) {
+    mrb_raisef(mrb, E_TYPE_ERROR, "superclass must be a Class (%C given)", super);
+  }
+  if (super->tt == MRB_TT_SCLASS) {
+    mrb_raise(mrb, E_TYPE_ERROR, "can't make subclass of singleton class");
+  }
+  if (super == mrb->class_class) {
+    mrb_raise(mrb, E_TYPE_ERROR, "can't make subclass of Class");
+  }
+}
+
+/*!
+ * Creates a new class.
+ * \param super     a class from which the new class derives.
+ * \exception TypeError \a super is not inheritable.
+ * \exception TypeError \a super is the Class class.
+ */
+MRB_API struct RClass*
+mrb_class_new(mrb_state *mrb, struct RClass *super)
+{
+  struct RClass *c;
+
+  if (super) {
+    mrb_check_inheritable(mrb, super);
+  }
+  c = boot_defclass(mrb, super);
+  if (super) {
+    MRB_SET_INSTANCE_TT(c, MRB_INSTANCE_TT(super));
+  }
+  make_metaclass(mrb, c);
+
+  return c;
+}
+
+/*!
+ * Creates a new module.
+ */
+MRB_API struct RClass*
+mrb_module_new(mrb_state *mrb)
+{
+  struct RClass *m = (struct RClass*)mrb_obj_alloc(mrb, MRB_TT_MODULE, mrb->module_class);
+  boot_initmod(mrb, m);
+  return m;
+}
+
+/*
+ *  call-seq:
+ *     obj.class    => class
+ *
+ *  Returns the class of <i>obj</i>, now preferred over
+ *  <code>Object#type</code>, as an object's type in Ruby is only
+ *  loosely tied to that object's class. This method must always be
+ *  called with an explicit receiver, as <code>class</code> is also a
+ *  reserved word in Ruby.
+ *
+ *     1.class      #=> Fixnum
+ *     self.class   #=> Object
+ */
+
+MRB_API struct RClass*
+mrb_obj_class(mrb_state *mrb, mrb_value obj)
+{
+  return mrb_class_real(mrb_class(mrb, obj));
+}
+
+MRB_API void
+mrb_alias_method(mrb_state *mrb, struct RClass *c, mrb_sym a, mrb_sym b)
+{
+  mrb_method_t m = mrb_method_search(mrb, c, b);
+
+  if (!MRB_METHOD_CFUNC_P(m)) {
+    struct RProc *p = MRB_METHOD_PROC(m);
+
+    if (MRB_PROC_ENV_P(p)) {
+      MRB_PROC_ENV(p)->mid = b;
+    }
+    else {
+      struct RClass *tc = MRB_PROC_TARGET_CLASS(p);
+      struct REnv *e = (struct REnv*)mrb_obj_alloc(mrb, MRB_TT_ENV, NULL);
+
+      e->mid = b;
+      if (tc) {
+        e->c = tc;
+        mrb_field_write_barrier(mrb, (struct RBasic*)e, (struct RBasic*)tc);
+      }
+      p->e.env = e;
+      p->flags |= MRB_PROC_ENVSET;
+    }
+  }
+  mrb_define_method_raw(mrb, c, a, m);
+}
+
+/*!
+ * Defines an alias of a method.
+ * \param mrb    the mruby state
+ * \param klass  the class which the original method belongs to
+ * \param name1  a new name for the method
+ * \param name2  the original name of the method
+ */
+MRB_API void
+mrb_define_alias(mrb_state *mrb, struct RClass *klass, const char *name1, const char *name2)
+{
+  mrb_alias_method(mrb, klass, mrb_intern_cstr(mrb, name1), mrb_intern_cstr(mrb, name2));
+}
+
+/*
+ * call-seq:
+ *   mod.to_s   -> string
+ *
+ * Return a string representing this module or class. For basic
+ * classes and modules, this is the name. For singletons, we
+ * show information on the thing we're attached to as well.
+ */
+
+mrb_value
+mrb_mod_to_s(mrb_state *mrb, mrb_value klass)
+{
+
+  if (mrb_sclass_p(klass)) {
+    mrb_value v = mrb_iv_get(mrb, klass, mrb_intern_lit(mrb, "__attached__"));
+    mrb_value str = mrb_str_new_lit(mrb, "#<Class:");
+
+    if (class_ptr_p(v)) {
+      mrb_str_cat_str(mrb, str, mrb_inspect(mrb, v));
+    }
+    else {
+      mrb_str_cat_str(mrb, str, mrb_any_to_s(mrb, v));
+    }
+    return mrb_str_cat_lit(mrb, str, ">");
+  }
+  else {
+    return class_name_str(mrb, mrb_class_ptr(klass));
+  }
+}
+
+static mrb_value
+mrb_mod_alias(mrb_state *mrb, mrb_value mod)
+{
+  struct RClass *c = mrb_class_ptr(mod);
+  mrb_sym new_name, old_name;
+
+  mrb_get_args(mrb, "nn", &new_name, &old_name);
+  mrb_alias_method(mrb, c, new_name, old_name);
+  return mod;
+}
+
+static void
+undef_method(mrb_state *mrb, struct RClass *c, mrb_sym a)
+{
+  mrb_method_t m;
+
+  MRB_METHOD_FROM_PROC(m, NULL);
+  mrb_define_method_raw(mrb, c, a, m);
+}
+
+void
+mrb_undef_method_id(mrb_state *mrb, struct RClass *c, mrb_sym a)
+{
+  if (!mrb_obj_respond_to(mrb, c, a)) {
+    mrb_name_error(mrb, a, "undefined method '%n' for class '%C'", a, c);
+  }
+  undef_method(mrb, c, a);
+}
+
+MRB_API void
+mrb_undef_method(mrb_state *mrb, struct RClass *c, const char *name)
+{
+  undef_method(mrb, c, mrb_intern_cstr(mrb, name));
+}
+
+MRB_API void
+mrb_undef_class_method(mrb_state *mrb, struct RClass *c, const char *name)
+{
+  mrb_undef_method(mrb,  mrb_class_ptr(mrb_singleton_class(mrb, mrb_obj_value(c))), name);
+}
+
+static mrb_value
+mrb_mod_undef(mrb_state *mrb, mrb_value mod)
+{
+  struct RClass *c = mrb_class_ptr(mod);
+  mrb_int argc;
+  mrb_value *argv;
+
+  mrb_get_args(mrb, "*", &argv, &argc);
+  while (argc--) {
+    mrb_undef_method_id(mrb, c, to_sym(mrb, *argv));
+    argv++;
+  }
+  return mrb_nil_value();
+}
+
+static void
+check_const_name_sym(mrb_state *mrb, mrb_sym id)
+{
+  mrb_int len;
+  const char *name = mrb_sym_name_len(mrb, id, &len);
+  if (!mrb_const_name_p(mrb, name, len)) {
+    mrb_name_error(mrb, id, "wrong constant name %n", id);
+  }
+}
+
+static mrb_value
+mrb_mod_const_defined(mrb_state *mrb, mrb_value mod)
+{
+  mrb_sym id;
+  mrb_bool inherit = TRUE;
+
+  mrb_get_args(mrb, "n|b", &id, &inherit);
+  check_const_name_sym(mrb, id);
+  if (inherit) {
+    return mrb_bool_value(mrb_const_defined(mrb, mod, id));
+  }
+  return mrb_bool_value(mrb_const_defined_at(mrb, mod, id));
+}
+
+static mrb_value
+mrb_const_get_sym(mrb_state *mrb, mrb_value mod, mrb_sym id)
+{
+  check_const_name_sym(mrb, id);
+  return mrb_const_get(mrb, mod, id);
+}
+
+static mrb_value
+mrb_mod_const_get(mrb_state *mrb, mrb_value mod)
+{
+  mrb_value path;
+  mrb_sym id;
+  char *ptr;
+  mrb_int off, end, len;
+
+  mrb_get_args(mrb, "o", &path);
+
+  if (mrb_symbol_p(path)) {
+    /* const get with symbol */
+    id = mrb_symbol(path);
+    return mrb_const_get_sym(mrb, mod, id);
+  }
+
+  /* const get with class path string */
+  path = mrb_ensure_string_type(mrb, path);
+  ptr = RSTRING_PTR(path);
+  len = RSTRING_LEN(path);
+  off = 0;
+
+  while (off < len) {
+    end = mrb_str_index_lit(mrb, path, "::", off);
+    end = (end == -1) ? len : end;
+    id = mrb_intern(mrb, ptr+off, end-off);
+    mod = mrb_const_get_sym(mrb, mod, id);
+    if (end == len)
+      off = end;
+    else {
+      off = end + 2;
+      if (off == len) {         /* trailing "::" */
+        mrb_name_error(mrb, id, "wrong constant name '%v'", path);
+      }
+    }
+  }
+
+  return mod;
+}
+
+static mrb_value
+mrb_mod_const_set(mrb_state *mrb, mrb_value mod)
+{
+  mrb_sym id;
+  mrb_value value;
+
+  mrb_get_args(mrb, "no", &id, &value);
+  check_const_name_sym(mrb, id);
+  mrb_const_set(mrb, mod, id, value);
+  return value;
+}
+
+static mrb_value
+mrb_mod_remove_const(mrb_state *mrb, mrb_value mod)
+{
+  mrb_sym id;
+  mrb_value val;
+
+  mrb_get_args(mrb, "n", &id);
+  check_const_name_sym(mrb, id);
+  val = mrb_iv_remove(mrb, mod, id);
+  if (mrb_undef_p(val)) {
+    mrb_name_error(mrb, id, "constant %n not defined", id);
+  }
+  return val;
+}
+
+static mrb_value
+mrb_mod_const_missing(mrb_state *mrb, mrb_value mod)
+{
+  mrb_sym sym;
+
+  mrb_get_args(mrb, "n", &sym);
+
+  if (mrb_class_real(mrb_class_ptr(mod)) != mrb->object_class) {
+    mrb_name_error(mrb, sym, "uninitialized constant %v::%n", mod, sym);
+  }
+  else {
+    mrb_name_error(mrb, sym, "uninitialized constant %n", sym);
+  }
+  /* not reached */
+  return mrb_nil_value();
+}
+
+/* 15.2.2.4.34 */
+/*
+ *  call-seq:
+ *     mod.method_defined?(symbol)    -> true or false
+ *
+ *  Returns +true+ if the named method is defined by
+ *  _mod_ (or its included modules and, if _mod_ is a class,
+ *  its ancestors). Public and protected methods are matched.
+ *
+ *     module A
+ *       def method1()  end
+ *     end
+ *     class B
+ *       def method2()  end
+ *     end
+ *     class C < B
+ *       include A
+ *       def method3()  end
+ *     end
+ *
+ *     A.method_defined? :method1    #=> true
+ *     C.method_defined? "method1"   #=> true
+ *     C.method_defined? "method2"   #=> true
+ *     C.method_defined? "method3"   #=> true
+ *     C.method_defined? "method4"   #=> false
+ */
+
+static mrb_value
+mrb_mod_method_defined(mrb_state *mrb, mrb_value mod)
+{
+  mrb_sym id;
+
+  mrb_get_args(mrb, "n", &id);
+  return mrb_bool_value(mrb_obj_respond_to(mrb, mrb_class_ptr(mod), id));
+}
+
+static mrb_value
+mod_define_method(mrb_state *mrb, mrb_value self)
+{
+  struct RClass *c = mrb_class_ptr(self);
+  struct RProc *p;
+  mrb_method_t m;
+  mrb_sym mid;
+  mrb_value proc = mrb_undef_value();
+  mrb_value blk;
+
+  mrb_get_args(mrb, "n|o&", &mid, &proc, &blk);
+  switch (mrb_type(proc)) {
+    case MRB_TT_PROC:
+      blk = proc;
+      break;
+    case MRB_TT_UNDEF:
+      /* ignored */
+      break;
+    default:
+      mrb_raisef(mrb, E_TYPE_ERROR, "wrong argument type %T (expected Proc)", proc);
+      break;
+  }
+  if (mrb_nil_p(blk)) {
+    mrb_raise(mrb, E_ARGUMENT_ERROR, "no block given");
+  }
+  p = (struct RProc*)mrb_obj_alloc(mrb, MRB_TT_PROC, mrb->proc_class);
+  mrb_proc_copy(p, mrb_proc_ptr(blk));
+  p->flags |= MRB_PROC_STRICT;
+  MRB_METHOD_FROM_PROC(m, p);
+  mrb_define_method_raw(mrb, c, mid, m);
+  return mrb_symbol_value(mid);
+}
+
+static mrb_value
+top_define_method(mrb_state *mrb, mrb_value self)
+{
+  return mod_define_method(mrb, mrb_obj_value(mrb->object_class));
+}
+
+static mrb_value
+mrb_mod_eqq(mrb_state *mrb, mrb_value mod)
+{
+  mrb_value obj;
+  mrb_bool eqq;
+
+  mrb_get_args(mrb, "o", &obj);
+  eqq = mrb_obj_is_kind_of(mrb, obj, mrb_class_ptr(mod));
+
+  return mrb_bool_value(eqq);
+}
+
+static mrb_value
+mrb_mod_dup(mrb_state *mrb, mrb_value self)
+{
+  mrb_value mod = mrb_obj_clone(mrb, self);
+  MRB_UNSET_FROZEN_FLAG(mrb_obj_ptr(mod));
+  return mod;
+}
+
+static mrb_value
+mrb_mod_module_function(mrb_state *mrb, mrb_value mod)
+{
+  mrb_value *argv;
+  mrb_int argc, i;
+  mrb_sym mid;
+  mrb_method_t m;
+  struct RClass *rclass;
+  int ai;
+
+  mrb_check_type(mrb, mod, MRB_TT_MODULE);
+
+  mrb_get_args(mrb, "*", &argv, &argc);
+  if (argc == 0) {
+    /* set MODFUNC SCOPE if implemented */
+    return mod;
+  }
+
+  /* set PRIVATE method visibility if implemented */
+  /* mrb_mod_dummy_visibility(mrb, mod); */
+
+  for (i=0; i<argc; i++) {
+    mrb_check_type(mrb, argv[i], MRB_TT_SYMBOL);
+
+    mid = mrb_symbol(argv[i]);
+    rclass = mrb_class_ptr(mod);
+    m = mrb_method_search(mrb, rclass, mid);
+
+    prepare_singleton_class(mrb, (struct RBasic*)rclass);
+    ai = mrb_gc_arena_save(mrb);
+    mrb_define_method_raw(mrb, rclass->c, mid, m);
+    mrb_gc_arena_restore(mrb, ai);
+  }
+
+  return mod;
+}
+
+/* implementation of __id__ */
+mrb_value mrb_obj_id_m(mrb_state *mrb, mrb_value self);
+/* implementation of instance_eval */
+mrb_value mrb_obj_instance_eval(mrb_state*, mrb_value);
+
+static mrb_value
+inspect_main(mrb_state *mrb, mrb_value mod)
+{
+  return mrb_str_new_lit(mrb, "main");
+}
+
+static const mrb_code new_iseq[] = {
+  OP_ENTER, 0x0, 0x10, 0x1,  /* OP_ENTER     0:0:1:0:0:0:1 */
+  OP_LOADSELF, 0x3,          /* OP_LOADSELF  R3 */
+  OP_SEND, 0x3, 0x0, 0x0,    /* OP_SEND      R3  :allocate  0 */
+  OP_MOVE, 0x0, 0x3,         /* OP_MOVE      R0  R3 */
+  OP_MOVE, 0x4, 0x1,         /* OP_MOVE      R4  R1 */
+  OP_MOVE, 0x5, 0x2,         /* OP_MOVE      R5  R2 */
+  OP_SENDVB, 0x3, 0x1,       /* OP_SENDVB    R4  :initialize */
+  OP_RETURN, 0x0             /* OP_RETURN    R0 */
+};
+
+static void
+init_class_new(mrb_state *mrb, struct RClass *cls)
+{
+  struct RProc *p;
+  mrb_method_t m;
+  mrb_irep *new_irep = (mrb_irep*)mrb_malloc(mrb, sizeof(mrb_irep));
+  static const mrb_irep mrb_irep_zero = { 0 };
+
+  *new_irep = mrb_irep_zero;
+  new_irep->syms = (mrb_sym*)mrb_malloc(mrb, sizeof(mrb_sym)*2);
+  new_irep->syms[0] = mrb_intern_lit(mrb, "allocate");
+  new_irep->syms[1] = mrb_intern_lit(mrb, "initialize");
+  new_irep->slen = 2;
+  new_irep->flags = MRB_ISEQ_NO_FREE;
+  new_irep->iseq = new_iseq;
+  new_irep->ilen = sizeof(new_iseq);
+  new_irep->nregs = 6;
+  new_irep->nlocals = 3;
+  p = mrb_proc_new(mrb, new_irep);
+  MRB_METHOD_FROM_PROC(m, p);
+  mrb_define_method_raw(mrb, cls, mrb_intern_lit(mrb, "new"), m);
+}
+
+void
+mrb_init_class(mrb_state *mrb)
+{
+  struct RClass *bob;           /* BasicObject */
+  struct RClass *obj;           /* Object */
+  struct RClass *mod;           /* Module */
+  struct RClass *cls;           /* Class */
+
+  /* boot class hierarchy */
+  bob = boot_defclass(mrb, 0);
+  obj = boot_defclass(mrb, bob); mrb->object_class = obj;
+  mod = boot_defclass(mrb, obj); mrb->module_class = mod;/* obj -> mod */
+  cls = boot_defclass(mrb, mod); mrb->class_class = cls; /* obj -> cls */
+  /* fix-up loose ends */
+  bob->c = obj->c = mod->c = cls->c = cls;
+  make_metaclass(mrb, bob);
+  make_metaclass(mrb, obj);
+  make_metaclass(mrb, mod);
+  make_metaclass(mrb, cls);
+
+  /* name basic classes */
+  mrb_define_const(mrb, bob, "BasicObject", mrb_obj_value(bob));
+  mrb_define_const(mrb, obj, "Object",      mrb_obj_value(obj));
+  mrb_define_const(mrb, obj, "Module",      mrb_obj_value(mod));
+  mrb_define_const(mrb, obj, "Class",       mrb_obj_value(cls));
+
+  /* name each classes */
+  mrb_class_name_class(mrb, NULL, bob, mrb_intern_lit(mrb, "BasicObject"));
+  mrb_class_name_class(mrb, NULL, obj, mrb_intern_lit(mrb, "Object")); /* 15.2.1 */
+  mrb_class_name_class(mrb, NULL, mod, mrb_intern_lit(mrb, "Module")); /* 15.2.2 */
+  mrb_class_name_class(mrb, NULL, cls, mrb_intern_lit(mrb, "Class"));  /* 15.2.3 */
+
+  mrb->proc_class = mrb_define_class(mrb, "Proc", mrb->object_class);  /* 15.2.17 */
+  MRB_SET_INSTANCE_TT(mrb->proc_class, MRB_TT_PROC);
+
+  MRB_SET_INSTANCE_TT(cls, MRB_TT_CLASS);
+  mrb_define_method(mrb, bob, "initialize",              mrb_bob_init,             MRB_ARGS_NONE());
+  mrb_define_method(mrb, bob, "!",                       mrb_bob_not,              MRB_ARGS_NONE());
+  mrb_define_method(mrb, bob, "==",                      mrb_obj_equal_m,          MRB_ARGS_REQ(1)); /* 15.3.1.3.1  */
+  mrb_define_method(mrb, bob, "!=",                      mrb_obj_not_equal_m,      MRB_ARGS_REQ(1));
+  mrb_define_method(mrb, bob, "__id__",                  mrb_obj_id_m,             MRB_ARGS_NONE()); /* 15.3.1.3.4  */
+  mrb_define_method(mrb, bob, "__send__",                mrb_f_send,               MRB_ARGS_REQ(1)|MRB_ARGS_REST()|MRB_ARGS_BLOCK());  /* 15.3.1.3.5  */
+  mrb_define_method(mrb, bob, "equal?",                  mrb_obj_equal_m,          MRB_ARGS_REQ(1)); /* 15.3.1.3.11 */
+  mrb_define_method(mrb, bob, "instance_eval",           mrb_obj_instance_eval,    MRB_ARGS_OPT(1)|MRB_ARGS_BLOCK());  /* 15.3.1.3.18 */
+
+  mrb_define_class_method(mrb, cls, "new",               mrb_class_new_class,      MRB_ARGS_OPT(1)|MRB_ARGS_BLOCK());
+  mrb_define_method(mrb, cls, "allocate",                mrb_instance_alloc,       MRB_ARGS_NONE());
+  mrb_define_method(mrb, cls, "superclass",              mrb_class_superclass,     MRB_ARGS_NONE()); /* 15.2.3.3.4 */
+  mrb_define_method(mrb, cls, "initialize",              mrb_class_initialize,     MRB_ARGS_OPT(1)); /* 15.2.3.3.1 */
+  mrb_define_method(mrb, cls, "inherited",               mrb_bob_init,             MRB_ARGS_REQ(1));
+
+  init_class_new(mrb, cls);
+
+  MRB_SET_INSTANCE_TT(mod, MRB_TT_MODULE);
+  mrb_define_method(mrb, mod, "extend_object",           mrb_mod_extend_object,    MRB_ARGS_REQ(1)); /* 15.2.2.4.25 */
+  mrb_define_method(mrb, mod, "extended",                mrb_bob_init,             MRB_ARGS_REQ(1)); /* 15.2.2.4.26 */
+  mrb_define_method(mrb, mod, "prepended",               mrb_bob_init,             MRB_ARGS_REQ(1));
+  mrb_define_method(mrb, mod, "prepend_features",        mrb_mod_prepend_features, MRB_ARGS_REQ(1));
+  mrb_define_method(mrb, mod, "include?",                mrb_mod_include_p,        MRB_ARGS_REQ(1)); /* 15.2.2.4.28 */
+  mrb_define_method(mrb, mod, "append_features",         mrb_mod_append_features,  MRB_ARGS_REQ(1)); /* 15.2.2.4.10 */
+  mrb_define_method(mrb, mod, "class_eval",              mrb_mod_module_eval,      MRB_ARGS_ANY());  /* 15.2.2.4.15 */
+  mrb_define_method(mrb, mod, "included",                mrb_bob_init,             MRB_ARGS_REQ(1)); /* 15.2.2.4.29 */
+  mrb_define_method(mrb, mod, "initialize",              mrb_mod_initialize,       MRB_ARGS_NONE()); /* 15.2.2.4.31 */
+  mrb_define_method(mrb, mod, "module_eval",             mrb_mod_module_eval,      MRB_ARGS_ANY());  /* 15.2.2.4.35 */
+  mrb_define_method(mrb, mod, "module_function",         mrb_mod_module_function,  MRB_ARGS_ANY());
+  mrb_define_method(mrb, mod, "private",                 mrb_mod_dummy_visibility, MRB_ARGS_ANY());  /* 15.2.2.4.36 */
+  mrb_define_method(mrb, mod, "protected",               mrb_mod_dummy_visibility, MRB_ARGS_ANY());  /* 15.2.2.4.37 */
+  mrb_define_method(mrb, mod, "public",                  mrb_mod_dummy_visibility, MRB_ARGS_ANY());  /* 15.2.2.4.38 */
+  mrb_define_method(mrb, mod, "attr_reader",             mrb_mod_attr_reader,      MRB_ARGS_ANY());  /* 15.2.2.4.13 */
+  mrb_define_method(mrb, mod, "attr_writer",             mrb_mod_attr_writer,      MRB_ARGS_ANY());  /* 15.2.2.4.14 */
+  mrb_define_method(mrb, mod, "to_s",                    mrb_mod_to_s,             MRB_ARGS_NONE());
+  mrb_define_method(mrb, mod, "inspect",                 mrb_mod_to_s,             MRB_ARGS_NONE());
+  mrb_define_method(mrb, mod, "alias_method",            mrb_mod_alias,            MRB_ARGS_ANY());  /* 15.2.2.4.8 */
+  mrb_define_method(mrb, mod, "ancestors",               mrb_mod_ancestors,        MRB_ARGS_NONE()); /* 15.2.2.4.9 */
+  mrb_define_method(mrb, mod, "undef_method",            mrb_mod_undef,            MRB_ARGS_ANY());  /* 15.2.2.4.41 */
+  mrb_define_method(mrb, mod, "const_defined?",          mrb_mod_const_defined,    MRB_ARGS_ARG(1,1)); /* 15.2.2.4.20 */
+  mrb_define_method(mrb, mod, "const_get",               mrb_mod_const_get,        MRB_ARGS_REQ(1)); /* 15.2.2.4.21 */
+  mrb_define_method(mrb, mod, "const_set",               mrb_mod_const_set,        MRB_ARGS_REQ(2)); /* 15.2.2.4.23 */
+  mrb_define_method(mrb, mod, "remove_const",            mrb_mod_remove_const,     MRB_ARGS_REQ(1)); /* 15.2.2.4.40 */
+  mrb_define_method(mrb, mod, "const_missing",           mrb_mod_const_missing,    MRB_ARGS_REQ(1));
+  mrb_define_method(mrb, mod, "method_defined?",         mrb_mod_method_defined,   MRB_ARGS_REQ(1)); /* 15.2.2.4.34 */
+  mrb_define_method(mrb, mod, "define_method",           mod_define_method,        MRB_ARGS_ARG(1,1));
+  mrb_define_method(mrb, mod, "===",                     mrb_mod_eqq,              MRB_ARGS_REQ(1)); /* 15.2.2.4.7 */
+  mrb_define_method(mrb, mod, "dup",                     mrb_mod_dup,              MRB_ARGS_NONE());
+
+  mrb_undef_method(mrb, cls, "append_features");
+  mrb_undef_method(mrb, cls, "prepend_features");
+  mrb_undef_method(mrb, cls, "extend_object");
+  mrb_undef_method(mrb, cls, "module_function");
+
+  mrb->top_self = (struct RObject*)mrb_obj_alloc(mrb, MRB_TT_OBJECT, mrb->object_class);
+  mrb_define_singleton_method(mrb, mrb->top_self, "inspect", inspect_main, MRB_ARGS_NONE());
+  mrb_define_singleton_method(mrb, mrb->top_self, "to_s", inspect_main, MRB_ARGS_NONE());
+  mrb_define_singleton_method(mrb, mrb->top_self, "define_method", top_define_method, MRB_ARGS_ARG(1,1));
+}
Index: /EcnlProtoTool/trunk/mruby-2.1.1/src/codedump.c
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/src/codedump.c	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/src/codedump.c	(revision 439)
@@ -0,0 +1,549 @@
+#include <mruby.h>
+#include <mruby/irep.h>
+#include <mruby/debug.h>
+#include <mruby/opcode.h>
+#include <mruby/string.h>
+#include <mruby/proc.h>
+
+#ifndef MRB_DISABLE_STDIO
+static void
+print_r(mrb_state *mrb, mrb_irep *irep, size_t n)
+{
+  size_t i;
+
+  if (n == 0) return;
+
+  for (i=0; i+1<irep->nlocals; i++) {
+    if (irep->lv[i].r == n) {
+      mrb_sym sym = irep->lv[i].name;
+      printf(" R%d:%s", (int)n, mrb_sym_dump(mrb, sym));
+      break;
+    }
+  }
+}
+
+static void
+print_lv_a(mrb_state *mrb, mrb_irep *irep, uint16_t a)
+{
+  if (!irep->lv || a >= irep->nlocals || a == 0) {
+    printf("\n");
+    return;
+  }
+  printf("\t;");
+  print_r(mrb, irep, a);
+  printf("\n");
+}
+
+static void
+print_lv_ab(mrb_state *mrb, mrb_irep *irep, uint16_t a, uint16_t b)
+{
+  if (!irep->lv || (a >= irep->nlocals && b >= irep->nlocals) || a+b == 0) {
+    printf("\n");
+    return;
+  }
+  printf("\t;");
+  if (a > 0) print_r(mrb, irep, a);
+  if (b > 0) print_r(mrb, irep, b);
+  printf("\n");
+}
+
+static void
+print_header(mrb_state *mrb, mrb_irep *irep, ptrdiff_t i)
+{
+  int32_t line;
+
+  line = mrb_debug_get_line(mrb, irep, i);
+  if (line < 0) {
+    printf("      ");
+  }
+  else {
+    printf("%5d ", line);
+  }
+
+  printf("%03d ", (int)i);
+}
+
+#define CASE(insn,ops) case insn: FETCH_ ## ops (); L_ ## insn
+
+static void
+codedump(mrb_state *mrb, mrb_irep *irep)
+{
+  int ai;
+  const mrb_code *pc, *pcend;
+  mrb_code ins;
+  const char *file = NULL, *next_file;
+
+  if (!irep) return;
+  printf("irep %p nregs=%d nlocals=%d pools=%d syms=%d reps=%d iseq=%d\n", (void*)irep,
+         irep->nregs, irep->nlocals, (int)irep->plen, (int)irep->slen, (int)irep->rlen, (int)irep->ilen);
+
+  if (irep->lv) {
+    int i;
+
+    printf("local variable names:\n");
+    for (i = 1; i < irep->nlocals; ++i) {
+      char const *s = mrb_sym_dump(mrb, irep->lv[i - 1].name);
+      int n = irep->lv[i - 1].r ? irep->lv[i - 1].r : i;
+      printf("  R%d:%s\n", n, s ? s : "");
+    }
+  }
+
+  pc = irep->iseq;
+  pcend = pc + irep->ilen;
+  while (pc < pcend) {
+    ptrdiff_t i;
+    uint32_t a;
+    uint16_t b;
+    uint8_t c;
+
+    ai = mrb_gc_arena_save(mrb);
+
+    i = pc - irep->iseq;
+    next_file = mrb_debug_get_filename(mrb, irep, i);
+    if (next_file && file != next_file) {
+      printf("file: %s\n", next_file);
+      file = next_file;
+    }
+    print_header(mrb, irep, i);
+    ins = READ_B();
+    switch (ins) {
+    CASE(OP_NOP, Z):
+      printf("OP_NOP\n");
+      break;
+    CASE(OP_MOVE, BB):
+      printf("OP_MOVE\tR%d\tR%d\t", a, b);
+      print_lv_ab(mrb, irep, a, b);
+      break;
+    CASE(OP_LOADL, BB):
+      {
+        mrb_value v = irep->pool[b];
+        mrb_value s = mrb_inspect(mrb, v);
+        printf("OP_LOADL\tR%d\tL(%d)\t; %s", a, b, RSTRING_PTR(s));
+      }
+      print_lv_a(mrb, irep, a);
+      break;
+    CASE(OP_LOADI, BB):
+      printf("OP_LOADI\tR%d\t%d\t", a, b);
+      print_lv_a(mrb, irep, a);
+      break;
+    CASE(OP_LOADINEG, BB):
+      printf("OP_LOADI\tR%d\t-%d\t", a, b);
+      print_lv_a(mrb, irep, a);
+      break;
+    CASE(OP_LOADI__1, B):
+      printf("OP_LOADI__1\tR%d\t\t", a);
+      print_lv_a(mrb, irep, a);
+      break;
+    CASE(OP_LOADI_0, B): goto L_LOADI;
+    CASE(OP_LOADI_1, B): goto L_LOADI;
+    CASE(OP_LOADI_2, B): goto L_LOADI;
+    CASE(OP_LOADI_3, B): goto L_LOADI;
+    CASE(OP_LOADI_4, B): goto L_LOADI;
+    CASE(OP_LOADI_5, B): goto L_LOADI;
+    CASE(OP_LOADI_6, B): goto L_LOADI;
+    CASE(OP_LOADI_7, B):
+    L_LOADI:
+      printf("OP_LOADI_%d\tR%d\t\t", ins-(int)OP_LOADI_0, a);
+      print_lv_a(mrb, irep, a);
+      break;
+    CASE(OP_LOADSYM, BB):
+      printf("OP_LOADSYM\tR%d\t:%s\t", a, mrb_sym_dump(mrb, irep->syms[b]));
+      print_lv_a(mrb, irep, a);
+      break;
+    CASE(OP_LOADNIL, B):
+      printf("OP_LOADNIL\tR%d\t\t", a);
+      print_lv_a(mrb, irep, a);
+      break;
+    CASE(OP_LOADSELF, B):
+      printf("OP_LOADSELF\tR%d\t\t", a);
+      print_lv_a(mrb, irep, a);
+      break;
+    CASE(OP_LOADT, B):
+      printf("OP_LOADT\tR%d\t\t", a);
+      print_lv_a(mrb, irep, a);
+      break;
+    CASE(OP_LOADF, B):
+      printf("OP_LOADF\tR%d\t\t", a);
+      print_lv_a(mrb, irep, a);
+      break;
+    CASE(OP_GETGV, BB):
+      printf("OP_GETGV\tR%d\t:%s", a, mrb_sym_dump(mrb, irep->syms[b]));
+      print_lv_a(mrb, irep, a);
+      break;
+    CASE(OP_SETGV, BB):
+      printf("OP_SETGV\t:%s\tR%d", mrb_sym_dump(mrb, irep->syms[b]), a);
+      print_lv_a(mrb, irep, a);
+      break;
+    CASE(OP_GETSV, BB):
+      printf("OP_GETSV\tR%d\t:%s", a, mrb_sym_dump(mrb, irep->syms[b]));
+      print_lv_a(mrb, irep, a);
+      break;
+    CASE(OP_SETSV, BB):
+      printf("OP_SETSV\t:%s\tR%d", mrb_sym_dump(mrb, irep->syms[b]), a);
+      print_lv_a(mrb, irep, a);
+      break;
+    CASE(OP_GETCONST, BB):
+      printf("OP_GETCONST\tR%d\t:%s", a, mrb_sym_dump(mrb, irep->syms[b]));
+      print_lv_a(mrb, irep, a);
+      break;
+    CASE(OP_SETCONST, BB):
+      printf("OP_SETCONST\t:%s\tR%d", mrb_sym_dump(mrb, irep->syms[b]), a);
+      print_lv_a(mrb, irep, a);
+      break;
+    CASE(OP_GETMCNST, BB):
+      printf("OP_GETMCNST\tR%d\tR%d::%s", a, a, mrb_sym_dump(mrb, irep->syms[b]));
+      print_lv_a(mrb, irep, a);
+      break;
+    CASE(OP_SETMCNST, BB):
+      printf("OP_SETMCNST\tR%d::%s\tR%d", a+1, mrb_sym_dump(mrb, irep->syms[b]), a);
+      print_lv_a(mrb, irep, a);
+      break;
+    CASE(OP_GETIV, BB):
+      printf("OP_GETIV\tR%d\t%s", a, mrb_sym_dump(mrb, irep->syms[b]));
+      print_lv_a(mrb, irep, a);
+      break;
+    CASE(OP_SETIV, BB):
+      printf("OP_SETIV\t%s\tR%d", mrb_sym_dump(mrb, irep->syms[b]), a);
+      print_lv_a(mrb, irep, a);
+      break;
+    CASE(OP_GETUPVAR, BBB):
+      printf("OP_GETUPVAR\tR%d\t%d\t%d", a, b, c);
+      print_lv_a(mrb, irep, a);
+      break;
+    CASE(OP_SETUPVAR, BBB):
+      printf("OP_SETUPVAR\tR%d\t%d\t%d", a, b, c);
+      print_lv_a(mrb, irep, a);
+      break;
+    CASE(OP_GETCV, BB):
+      printf("OP_GETCV\tR%d\t%s", a, mrb_sym_dump(mrb, irep->syms[b]));
+      print_lv_a(mrb, irep, a);
+      break;
+    CASE(OP_SETCV, BB):
+      printf("OP_SETCV\t%s\tR%d", mrb_sym_dump(mrb, irep->syms[b]), a);
+      print_lv_a(mrb, irep, a);
+      break;
+    CASE(OP_JMP, S):
+      printf("OP_JMP\t\t%03d\n", a);
+      break;
+    CASE(OP_JMPIF, BS):
+      printf("OP_JMPIF\tR%d\t%03d\t", a, b);
+      print_lv_a(mrb, irep, a);
+      break;
+    CASE(OP_JMPNOT, BS):
+      printf("OP_JMPNOT\tR%d\t%03d\t", a, b);
+      print_lv_a(mrb, irep, a);
+      break;
+    CASE(OP_JMPNIL, BS):
+      printf("OP_JMPNIL\tR%d\t%03d\t", a, b);
+      print_lv_a(mrb, irep, a);
+      break;
+    CASE(OP_SENDV, BB):
+      printf("OP_SENDV\tR%d\t:%s\n", a, mrb_sym_dump(mrb, irep->syms[b]));
+      break;
+    CASE(OP_SENDVB, BB):
+      printf("OP_SENDVB\tR%d\t:%s\n", a, mrb_sym_dump(mrb, irep->syms[b]));
+      break;
+    CASE(OP_SEND, BBB):
+      printf("OP_SEND\tR%d\t:%s\t%d\n", a, mrb_sym_dump(mrb, irep->syms[b]), c);
+      break;
+    CASE(OP_SENDB, BBB):
+      printf("OP_SENDB\tR%d\t:%s\t%d\n", a, mrb_sym_dump(mrb, irep->syms[b]), c);
+      break;
+    CASE(OP_CALL, Z):
+      printf("OP_CALL\n");
+      break;
+    CASE(OP_SUPER, BB):
+      printf("OP_SUPER\tR%d\t%d\n", a, b);
+      break;
+    CASE(OP_ARGARY, BS):
+      printf("OP_ARGARY\tR%d\t%d:%d:%d:%d (%d)", a,
+             (b>>11)&0x3f,
+             (b>>10)&0x1,
+             (b>>5)&0x1f,
+             (b>>4)&0x1,
+             (b>>0)&0xf);
+      print_lv_a(mrb, irep, a);
+      break;
+    CASE(OP_ENTER, W):
+      printf("OP_ENTER\t%d:%d:%d:%d:%d:%d:%d\n",
+             MRB_ASPEC_REQ(a),
+             MRB_ASPEC_OPT(a),
+             MRB_ASPEC_REST(a),
+             MRB_ASPEC_POST(a),
+             MRB_ASPEC_KEY(a),
+             MRB_ASPEC_KDICT(a),
+             MRB_ASPEC_BLOCK(a));
+      break;
+    CASE(OP_KEY_P, BB):
+      printf("OP_KEY_P\tR%d\t:%s\t", a, mrb_sym_dump(mrb, irep->syms[b]));
+      print_lv_a(mrb, irep, a);
+      break;
+    CASE(OP_KEYEND, Z):
+      printf("OP_KEYEND\n");
+      break;
+    CASE(OP_KARG, BB):
+      printf("OP_KARG\tR%d\t:%s\t", a, mrb_sym_dump(mrb, irep->syms[b]));
+      print_lv_a(mrb, irep, a);
+      break;
+    CASE(OP_RETURN, B):
+      printf("OP_RETURN\tR%d\t\t", a);
+      print_lv_a(mrb, irep, a);
+      break;
+    CASE(OP_RETURN_BLK, B):
+      printf("OP_RETURN_BLK\tR%d\t\t", a);
+      print_lv_a(mrb, irep, a);
+      break;
+    CASE(OP_BREAK, B):
+      printf("OP_BREAK\tR%d\t\t", a);
+      print_lv_a(mrb, irep, a);
+      break;
+    CASE(OP_BLKPUSH, BS):
+      printf("OP_BLKPUSH\tR%d\t%d:%d:%d:%d (%d)", a,
+             (b>>11)&0x3f,
+             (b>>10)&0x1,
+             (b>>5)&0x1f,
+             (b>>4)&0x1,
+             (b>>0)&0xf);
+      print_lv_a(mrb, irep, a);
+      break;
+    CASE(OP_LAMBDA, BB):
+      printf("OP_LAMBDA\tR%d\tI(%d:%p)\n", a, b, irep->reps[b]);
+      break;
+    CASE(OP_BLOCK, BB):
+      printf("OP_BLOCK\tR%d\tI(%d:%p)\n", a, b, irep->reps[b]);
+      break;
+    CASE(OP_METHOD, BB):
+      printf("OP_METHOD\tR%d\tI(%d:%p)\n", a, b, irep->reps[b]);
+      break;
+    CASE(OP_RANGE_INC, B):
+      printf("OP_RANGE_INC\tR%d\n", a);
+      break;
+    CASE(OP_RANGE_EXC, B):
+      printf("OP_RANGE_EXC\tR%d\n", a);
+      break;
+    CASE(OP_DEF, BB):
+      printf("OP_DEF\tR%d\t:%s\n", a, mrb_sym_dump(mrb, irep->syms[b]));
+      break;
+    CASE(OP_UNDEF, B):
+      printf("OP_UNDEF\t:%s\n", mrb_sym_dump(mrb, irep->syms[a]));
+      break;
+    CASE(OP_ALIAS, BB):
+      printf("OP_ALIAS\t:%s\t%s\n", mrb_sym_dump(mrb, irep->syms[a]), mrb_sym_dump(mrb, irep->syms[b]));
+      break;
+    CASE(OP_ADD, B):
+      printf("OP_ADD\tR%d\t\n", a);
+      break;
+    CASE(OP_ADDI, BB):
+      printf("OP_ADDI\tR%d\t%d\n", a, b);
+      break;
+    CASE(OP_SUB, B):
+      printf("OP_SUB\tR%d\t\n", a);
+      break;
+    CASE(OP_SUBI, BB):
+      printf("OP_SUBI\tR%d\t%d\n", a, b);
+      break;
+    CASE(OP_MUL, B):
+      printf("OP_MUL\tR%d\t\n", a);
+      break;
+    CASE(OP_DIV, B):
+      printf("OP_DIV\tR%d\t\n", a);
+      break;
+    CASE(OP_LT, B):
+      printf("OP_LT\t\tR%d\t\n", a);
+      break;
+    CASE(OP_LE, B):
+      printf("OP_LE\t\tR%d\t\n", a);
+      break;
+    CASE(OP_GT, B):
+      printf("OP_GT\t\tR%d\t\n", a);
+      break;
+    CASE(OP_GE, B):
+      printf("OP_GE\t\tR%d\t\n", a);
+      break;
+    CASE(OP_EQ, B):
+      printf("OP_EQ\t\tR%d\t\n", a);
+      break;
+    CASE(OP_ARRAY, BB):
+      printf("OP_ARRAY\tR%d\t%d\t", a, b);
+      print_lv_a(mrb, irep, a);
+      break;
+    CASE(OP_ARRAY2, BBB):
+      printf("OP_ARRAY\tR%d\tR%d\t%d\t", a, b, c);
+      print_lv_ab(mrb, irep, a, b);
+      break;
+    CASE(OP_ARYCAT, B):
+      printf("OP_ARYCAT\tR%d\t", a);
+      print_lv_a(mrb, irep, a);
+      break;
+    CASE(OP_ARYPUSH, B):
+      printf("OP_ARYPUSH\tR%d\t", a);
+      print_lv_a(mrb, irep, a);
+      break;
+    CASE(OP_ARYDUP, B):
+      printf("OP_ARYDUP\tR%d\t", a);
+      print_lv_a(mrb, irep, a);
+      break;
+    CASE(OP_AREF, BBB):
+      printf("OP_AREF\tR%d\tR%d\t%d", a, b, c);
+      print_lv_ab(mrb, irep, a, b);
+      break;
+    CASE(OP_ASET, BBB):
+      printf("OP_ASET\tR%d\tR%d\t%d", a, b, c);
+      print_lv_ab(mrb, irep, a, b);
+      break;
+    CASE(OP_APOST, BBB):
+      printf("OP_APOST\tR%d\t%d\t%d", a, b, c);
+      print_lv_a(mrb, irep, a);
+      break;
+    CASE(OP_INTERN, B):
+      printf("OP_INTERN\tR%d", a);
+      print_lv_a(mrb, irep, a);
+      break;
+    CASE(OP_STRING, BB):
+      {
+        mrb_value v = irep->pool[b];
+        mrb_value s = mrb_str_dump(mrb, mrb_str_new(mrb, RSTRING_PTR(v), RSTRING_LEN(v)));
+        printf("OP_STRING\tR%d\tL(%d)\t; %s", a, b, RSTRING_PTR(s));
+      }
+      print_lv_a(mrb, irep, a);
+      break;
+    CASE(OP_STRCAT, B):
+      printf("OP_STRCAT\tR%d\t", a);
+      print_lv_a(mrb, irep, a);
+      break;
+    CASE(OP_HASH, BB):
+      printf("OP_HASH\tR%d\t%d\t", a, b);
+      print_lv_a(mrb, irep, a);
+      break;
+    CASE(OP_HASHADD, BB):
+      printf("OP_HASHADD\tR%d\t%d\t", a, b);
+      print_lv_a(mrb, irep, a);
+      break;
+    CASE(OP_HASHCAT, B):
+      printf("OP_HASHCAT\tR%d\t", a);
+      print_lv_a(mrb, irep, a);
+      break;
+
+    CASE(OP_OCLASS, B):
+      printf("OP_OCLASS\tR%d\t\t", a);
+      print_lv_a(mrb, irep, a);
+      break;
+    CASE(OP_CLASS, BB):
+      printf("OP_CLASS\tR%d\t:%s", a, mrb_sym_dump(mrb, irep->syms[b]));
+      print_lv_a(mrb, irep, a);
+      break;
+    CASE(OP_MODULE, BB):
+      printf("OP_MODULE\tR%d\t:%s", a, mrb_sym_dump(mrb, irep->syms[b]));
+      print_lv_a(mrb, irep, a);
+      break;
+    CASE(OP_EXEC, BB):
+      printf("OP_EXEC\tR%d\tI(%d:%p)", a, b, irep->reps[b]);
+      print_lv_a(mrb, irep, a);
+      break;
+    CASE(OP_SCLASS, B):
+      printf("OP_SCLASS\tR%d\t", a);
+      print_lv_a(mrb, irep, a);
+      break;
+    CASE(OP_TCLASS, B):
+      printf("OP_TCLASS\tR%d\t\t", a);
+      print_lv_a(mrb, irep, a);
+      break;
+    CASE(OP_ERR, B):
+      {
+        mrb_value v = irep->pool[a];
+        mrb_value s = mrb_str_dump(mrb, mrb_str_new(mrb, RSTRING_PTR(v), RSTRING_LEN(v)));
+        printf("OP_ERR\t%s\n", RSTRING_PTR(s));
+      }
+      break;
+    CASE(OP_EPUSH, B):
+      printf("OP_EPUSH\t\t:I(%d:%p)\n", a, irep->reps[a]);
+      break;
+    CASE(OP_ONERR, S):
+      printf("OP_ONERR\t%03d\n", a);
+      break;
+    CASE(OP_EXCEPT, B):
+      printf("OP_EXCEPT\tR%d\t\t", a);
+      print_lv_a(mrb, irep, a);
+      break;
+    CASE(OP_RESCUE, BB):
+      printf("OP_RESCUE\tR%d\tR%d", a, b);
+      print_lv_ab(mrb, irep, a, b);
+      break;
+    CASE(OP_RAISE, B):
+      printf("OP_RAISE\tR%d\t\t", a);
+      print_lv_a(mrb, irep, a);
+      break;
+    CASE(OP_POPERR, B):
+      printf("OP_POPERR\t%d\t\t\n", a);
+      break;
+    CASE(OP_EPOP, B):
+      printf("OP_EPOP\t%d\n", a);
+      break;
+
+    CASE(OP_DEBUG, BBB):
+      printf("OP_DEBUG\t%d\t%d\t%d\n", a, b, c);
+      break;
+
+    CASE(OP_STOP, Z):
+      printf("OP_STOP\n");
+      break;
+
+    CASE(OP_EXT1, Z):
+      ins = READ_B();
+      printf("OP_EXT1\n");
+      print_header(mrb, irep, pc-irep->iseq-2);
+      switch (ins) {
+#define OPCODE(i,x) case OP_ ## i: FETCH_ ## x ## _1 (); goto L_OP_ ## i;
+#include "mruby/ops.h"
+#undef OPCODE
+      }
+      break;
+    CASE(OP_EXT2, Z):
+      ins = READ_B();
+      printf("OP_EXT2\n");
+      print_header(mrb, irep, pc-irep->iseq-2);
+      switch (ins) {
+#define OPCODE(i,x) case OP_ ## i: FETCH_ ## x ## _2 (); goto L_OP_ ## i;
+#include "mruby/ops.h"
+#undef OPCODE
+      }
+      break;
+    CASE(OP_EXT3, Z):
+      ins = READ_B();
+      printf("OP_EXT3\n");
+      print_header(mrb, irep, pc-irep->iseq-2);
+      switch (ins) {
+#define OPCODE(i,x) case OP_ ## i: FETCH_ ## x ## _3 (); goto L_OP_ ## i;
+#include "mruby/ops.h"
+#undef OPCODE
+      }
+      break;
+
+    default:
+      printf("OP_unknown (0x%x)\n", ins);
+      break;
+    }
+    mrb_gc_arena_restore(mrb, ai);
+  }
+  printf("\n");
+}
+
+static void
+codedump_recur(mrb_state *mrb, mrb_irep *irep)
+{
+  int i;
+
+  codedump(mrb, irep);
+  for (i=0; i<irep->rlen; i++) {
+    codedump_recur(mrb, irep->reps[i]);
+  }
+}
+#endif
+
+void
+mrb_codedump_all(mrb_state *mrb, struct RProc *proc)
+{
+#ifndef MRB_DISABLE_STDIO
+  codedump_recur(mrb, proc->body.irep);
+#endif
+}
Index: /EcnlProtoTool/trunk/mruby-2.1.1/src/compar.c
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/src/compar.c	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/src/compar.c	(revision 439)
@@ -0,0 +1,13 @@
+/*
+** compar.c - Comparable module
+**
+** See Copyright Notice in mruby.h
+*/
+
+#include <mruby.h>
+
+void
+mrb_init_comparable(mrb_state *mrb)
+{
+  mrb_define_module(mrb, "Comparable");  /* 15.3.3 */
+}
Index: /EcnlProtoTool/trunk/mruby-2.1.1/src/crc.c
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/src/crc.c	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/src/crc.c	(revision 439)
@@ -0,0 +1,39 @@
+/*
+** crc.c - calculate CRC
+**
+** See Copyright Notice in mruby.h
+*/
+
+#include <limits.h>
+#include <stdint.h>
+#include <stddef.h>
+
+/* Calculate CRC (CRC-16-CCITT)
+**
+**  0000_0000_0000_0000_0000_0000_0000_0000
+**          ^|------- CRC -------|- work --|
+**        carry
+*/
+#define  CRC_16_CCITT       0x11021ul        /* x^16+x^12+x^5+1 */
+#define  CRC_XOR_PATTERN    (CRC_16_CCITT << 8)
+#define  CRC_CARRY_BIT      (0x01000000)
+
+uint16_t
+calc_crc_16_ccitt(const uint8_t *src, size_t nbytes, uint16_t crc)
+{
+  size_t ibyte;
+  uint32_t ibit;
+  uint32_t crcwk = crc << 8;
+
+  for (ibyte = 0; ibyte < nbytes; ibyte++) {
+    crcwk |= *src++;
+    for (ibit = 0; ibit < CHAR_BIT; ibit++) {
+      crcwk <<= 1;
+      if (crcwk & CRC_CARRY_BIT) {
+        crcwk ^= CRC_XOR_PATTERN;
+      }
+    }
+  }
+  return (uint16_t)(crcwk >> 8);
+}
+
Index: /EcnlProtoTool/trunk/mruby-2.1.1/src/debug.c
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/src/debug.c	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/src/debug.c	(revision 439)
@@ -0,0 +1,214 @@
+#include <string.h>
+#include <mruby.h>
+#include <mruby/irep.h>
+#include <mruby/debug.h>
+
+static mrb_irep_debug_info_file*
+get_file(mrb_irep_debug_info *info, uint32_t pc)
+{
+  mrb_irep_debug_info_file **ret;
+  int32_t count;
+
+  if (pc >= info->pc_count) { return NULL; }
+  /* get upper bound */
+  ret = info->files;
+  count =  info->flen;
+  while (count > 0) {
+    int32_t step = count / 2;
+    mrb_irep_debug_info_file **it = ret + step;
+    if (!(pc < (*it)->start_pos)) {
+      ret = it + 1;
+      count -= step + 1;
+    }
+    else { count = step; }
+  }
+
+  --ret;
+
+  /* check returning file exists inside debug info */
+  mrb_assert(info->files <= ret && ret < (info->files + info->flen));
+  /* check pc is within the range of returning file */
+  mrb_assert((*ret)->start_pos <= pc &&
+             pc < (((ret + 1 - info->files) < info->flen)
+                   ? (*(ret+1))->start_pos : info->pc_count));
+
+  return *ret;
+}
+
+static mrb_debug_line_type
+select_line_type(const uint16_t *lines, size_t lines_len)
+{
+  size_t line_count = 0;
+  int prev_line = -1;
+  size_t i;
+  for (i = 0; i < lines_len; ++i) {
+    if (lines[i] != prev_line) {
+      ++line_count;
+    }
+  }
+  return (sizeof(uint16_t) * lines_len) <= (sizeof(mrb_irep_debug_info_line) * line_count)
+      ? mrb_debug_line_ary : mrb_debug_line_flat_map;
+}
+
+MRB_API char const*
+mrb_debug_get_filename(mrb_state *mrb, mrb_irep *irep, ptrdiff_t pc)
+{
+  if (irep && pc >= 0 && pc < irep->ilen) {
+    mrb_irep_debug_info_file* f = NULL;
+    if (!irep->debug_info) return NULL;
+    else if ((f = get_file(irep->debug_info, (uint32_t)pc))) {
+      return mrb_sym_name_len(mrb, f->filename_sym, NULL);
+    }
+  }
+  return NULL;
+}
+
+MRB_API int32_t
+mrb_debug_get_line(mrb_state *mrb, mrb_irep *irep, ptrdiff_t pc)
+{
+  if (irep && pc >= 0 && pc < irep->ilen) {
+    mrb_irep_debug_info_file* f = NULL;
+    if (!irep->debug_info) {
+      return -1;
+    }
+    else if ((f = get_file(irep->debug_info, (uint32_t)pc))) {
+      switch (f->line_type) {
+        case mrb_debug_line_ary:
+          mrb_assert(f->start_pos <= pc && pc < (f->start_pos + f->line_entry_count));
+          return f->lines.ary[pc - f->start_pos];
+
+        case mrb_debug_line_flat_map: {
+          /* get upper bound */
+          mrb_irep_debug_info_line *ret = f->lines.flat_map;
+          uint32_t count = f->line_entry_count;
+          while (count > 0) {
+            int32_t step = count / 2;
+            mrb_irep_debug_info_line *it = ret + step;
+            if (!(pc < it->start_pos)) {
+              ret = it + 1;
+              count -= step + 1;
+            }
+            else { count = step; }
+          }
+
+          --ret;
+
+          /* check line entry pointer range */
+          mrb_assert(f->lines.flat_map <= ret && ret < (f->lines.flat_map + f->line_entry_count));
+          /* check pc range */
+          mrb_assert(ret->start_pos <= pc &&
+                     pc < (((uint32_t)(ret + 1 - f->lines.flat_map) < f->line_entry_count)
+                           ? (ret+1)->start_pos : irep->debug_info->pc_count));
+
+          return ret->line;
+        }
+      }
+    }
+  }
+  return -1;
+}
+
+MRB_API mrb_irep_debug_info*
+mrb_debug_info_alloc(mrb_state *mrb, mrb_irep *irep)
+{
+  static const mrb_irep_debug_info initial = { 0, 0, NULL };
+  mrb_irep_debug_info *ret;
+
+  mrb_assert(!irep->debug_info);
+  ret = (mrb_irep_debug_info *)mrb_malloc(mrb, sizeof(*ret));
+  *ret = initial;
+  irep->debug_info = ret;
+  return ret;
+}
+
+MRB_API mrb_irep_debug_info_file*
+mrb_debug_info_append_file(mrb_state *mrb, mrb_irep_debug_info *d,
+                           const char *filename, uint16_t *lines,
+                           uint32_t start_pos, uint32_t end_pos)
+{
+  mrb_irep_debug_info_file *f;
+  uint32_t file_pc_count;
+  size_t fn_len;
+  uint32_t i;
+
+  if (!d) return NULL;
+  if (start_pos == end_pos) return NULL;
+
+  mrb_assert(filename);
+  mrb_assert(lines);
+
+  if (d->flen > 0) {
+    const char *fn = mrb_sym_name_len(mrb, d->files[d->flen - 1]->filename_sym, NULL);
+    if (strcmp(filename, fn) == 0)
+      return NULL;
+  }
+
+  f = (mrb_irep_debug_info_file*)mrb_malloc(mrb, sizeof(*f));
+  d->files = (mrb_irep_debug_info_file**)(
+          d->files
+          ? mrb_realloc(mrb, d->files, sizeof(mrb_irep_debug_info_file*) * (d->flen + 1))
+          : mrb_malloc(mrb, sizeof(mrb_irep_debug_info_file*)));
+  d->files[d->flen++] = f;
+
+  file_pc_count = end_pos - start_pos;
+
+  f->start_pos = start_pos;
+  d->pc_count = end_pos;
+
+  fn_len = strlen(filename);
+  f->filename_sym = mrb_intern(mrb, filename, fn_len);
+
+  f->line_type = select_line_type(lines + start_pos, end_pos - start_pos);
+  f->lines.ptr = NULL;
+
+  switch (f->line_type) {
+    case mrb_debug_line_ary:
+      f->line_entry_count = file_pc_count;
+      f->lines.ary = (uint16_t*)mrb_malloc(mrb, sizeof(uint16_t) * file_pc_count);
+      for (i = 0; i < file_pc_count; ++i) {
+        f->lines.ary[i] = lines[start_pos + i];
+      }
+      break;
+
+    case mrb_debug_line_flat_map: {
+      uint16_t prev_line = 0;
+      mrb_irep_debug_info_line m;
+      f->lines.flat_map = (mrb_irep_debug_info_line*)mrb_malloc(mrb, sizeof(mrb_irep_debug_info_line) * 1);
+      f->line_entry_count = 0;
+      for (i = 0; i < file_pc_count; ++i) {
+        if (lines[start_pos + i] == prev_line) { continue; }
+
+        f->lines.flat_map = (mrb_irep_debug_info_line*)mrb_realloc(
+            mrb, f->lines.flat_map,
+            sizeof(mrb_irep_debug_info_line) * (f->line_entry_count + 1));
+        m.start_pos = start_pos + i;
+        m.line = lines[start_pos + i];
+        f->lines.flat_map[f->line_entry_count] = m;
+
+        /* update */
+        ++f->line_entry_count;
+        prev_line = lines[start_pos + i];
+      }
+    } break;
+
+    default: mrb_assert(0); break;
+  }
+
+  return f;
+}
+
+MRB_API void
+mrb_debug_info_free(mrb_state *mrb, mrb_irep_debug_info *d)
+{
+  uint32_t i;
+
+  if (!d) { return; }
+
+  for (i = 0; i < d->flen; ++i) {
+    mrb_assert(d->files[i]);
+    mrb_free(mrb, d->files[i]->lines.ptr);
+    mrb_free(mrb, d->files[i]);
+  }
+  mrb_free(mrb, d->files);
+  mrb_free(mrb, d);
+}
Index: /EcnlProtoTool/trunk/mruby-2.1.1/src/dump.c
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/src/dump.c	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/src/dump.c	(revision 439)
@@ -0,0 +1,983 @@
+/*
+** dump.c - mruby binary dumper (mrbc binary format)
+**
+** See Copyright Notice in mruby.h
+*/
+
+#include <string.h>
+#include <limits.h>
+#include <math.h>
+#include <mruby/dump.h>
+#include <mruby/string.h>
+#include <mruby/irep.h>
+#include <mruby/numeric.h>
+#include <mruby/debug.h>
+
+#define FLAG_BYTEORDER_NATIVE 2
+#define FLAG_BYTEORDER_NONATIVE 0
+
+#ifndef MRB_WITHOUT_FLOAT
+#ifdef MRB_USE_FLOAT
+#define MRB_FLOAT_FMT "%.9g"
+#else
+#define MRB_FLOAT_FMT "%.17g"
+#endif
+#endif
+
+static size_t get_irep_record_size_1(mrb_state *mrb, mrb_irep *irep);
+
+#if UINT32_MAX > SIZE_MAX
+# error This code cannot be built on your environment.
+#endif
+
+static size_t
+write_padding(uint8_t *buf)
+{
+  const size_t align = MRB_DUMP_ALIGNMENT;
+  size_t pad_len = -(intptr_t)buf & (align-1);
+  if (pad_len > 0) {
+    memset(buf, 0, pad_len);
+  }
+  return pad_len;
+}
+
+static size_t
+get_irep_header_size(mrb_state *mrb)
+{
+  size_t size = 0;
+
+  size += sizeof(uint32_t) * 1;
+  size += sizeof(uint16_t) * 3;
+
+  return size;
+}
+
+static ptrdiff_t
+write_irep_header(mrb_state *mrb, mrb_irep *irep, uint8_t *buf)
+{
+  uint8_t *cur = buf;
+
+  cur += uint32_to_bin((uint32_t)get_irep_record_size_1(mrb, irep), cur);  /* record size */
+  cur += uint16_to_bin((uint16_t)irep->nlocals, cur);  /* number of local variable */
+  cur += uint16_to_bin((uint16_t)irep->nregs, cur);  /* number of register variable */
+  cur += uint16_to_bin((uint16_t)irep->rlen, cur);  /* number of child irep */
+
+  return cur - buf;
+}
+
+
+static size_t
+get_iseq_block_size(mrb_state *mrb, mrb_irep *irep)
+{
+  size_t size = 0;
+
+  size += sizeof(uint32_t); /* ilen */
+  size += sizeof(uint32_t); /* max padding */
+  size += sizeof(uint32_t) * irep->ilen; /* iseq(n) */
+
+  return size;
+}
+
+static ptrdiff_t
+write_iseq_block(mrb_state *mrb, mrb_irep *irep, uint8_t *buf, uint8_t flags)
+{
+  uint8_t *cur = buf;
+
+  cur += uint32_to_bin(irep->ilen, cur); /* number of opcode */
+  cur += write_padding(cur);
+  memcpy(cur, irep->iseq, irep->ilen * sizeof(mrb_code));
+  cur += irep->ilen * sizeof(mrb_code);
+
+  return cur - buf;
+}
+
+#ifndef MRB_WITHOUT_FLOAT
+static mrb_value
+float_to_str(mrb_state *mrb, mrb_value flt)
+{
+  mrb_float f = mrb_float(flt);
+
+  if (isinf(f)) {
+    return f < 0 ? mrb_str_new_lit(mrb, "I") : mrb_str_new_lit(mrb, "i");
+  }
+  return  mrb_float_to_str(mrb, flt, MRB_FLOAT_FMT);
+}
+#endif
+
+static size_t
+get_pool_block_size(mrb_state *mrb, mrb_irep *irep)
+{
+  int pool_no;
+  size_t size = 0;
+  mrb_value str;
+
+  size += sizeof(uint32_t); /* plen */
+  size += irep->plen * (sizeof(uint8_t) + sizeof(uint16_t)); /* len(n) */
+
+  for (pool_no = 0; pool_no < irep->plen; pool_no++) {
+    int ai = mrb_gc_arena_save(mrb);
+
+    switch (mrb_type(irep->pool[pool_no])) {
+    case MRB_TT_FIXNUM:
+      str = mrb_fixnum_to_str(mrb, irep->pool[pool_no], 10);
+      {
+        mrb_int len = RSTRING_LEN(str);
+        mrb_assert_int_fit(mrb_int, len, size_t, SIZE_MAX);
+        size += (size_t)len;
+      }
+      break;
+
+#ifndef MRB_WITHOUT_FLOAT
+    case MRB_TT_FLOAT:
+      str = float_to_str(mrb, irep->pool[pool_no]);
+      {
+        mrb_int len = RSTRING_LEN(str);
+        mrb_assert_int_fit(mrb_int, len, size_t, SIZE_MAX);
+        size += (size_t)len;
+      }
+      break;
+#endif
+
+    case MRB_TT_STRING:
+      {
+        mrb_int len = RSTRING_LEN(irep->pool[pool_no]);
+        mrb_assert_int_fit(mrb_int, len, size_t, SIZE_MAX);
+        size += (size_t)len;
+      }
+      break;
+
+    default:
+      break;
+    }
+    mrb_gc_arena_restore(mrb, ai);
+  }
+
+  return size;
+}
+
+static ptrdiff_t
+write_pool_block(mrb_state *mrb, mrb_irep *irep, uint8_t *buf)
+{
+  int pool_no;
+  uint8_t *cur = buf;
+  uint16_t len;
+  mrb_value str;
+  const char *char_ptr;
+
+  cur += uint32_to_bin(irep->plen, cur); /* number of pool */
+
+  for (pool_no = 0; pool_no < irep->plen; pool_no++) {
+    int ai = mrb_gc_arena_save(mrb);
+
+    switch (mrb_type(irep->pool[pool_no])) {
+    case MRB_TT_FIXNUM:
+      cur += uint8_to_bin(IREP_TT_FIXNUM, cur); /* data type */
+      str = mrb_fixnum_to_str(mrb, irep->pool[pool_no], 10);
+      break;
+
+#ifndef MRB_WITHOUT_FLOAT
+    case MRB_TT_FLOAT:
+      cur += uint8_to_bin(IREP_TT_FLOAT, cur); /* data type */
+      str = float_to_str(mrb, irep->pool[pool_no]);
+      break;
+#endif
+
+    case MRB_TT_STRING:
+      cur += uint8_to_bin(IREP_TT_STRING, cur); /* data type */
+      str = irep->pool[pool_no];
+      break;
+
+    default:
+      continue;
+    }
+
+    char_ptr = RSTRING_PTR(str);
+    {
+      mrb_int tlen = RSTRING_LEN(str);
+      mrb_assert_int_fit(mrb_int, tlen, uint16_t, UINT16_MAX);
+      len = (uint16_t)tlen;
+    }
+
+    cur += uint16_to_bin(len, cur); /* data length */
+    memcpy(cur, char_ptr, (size_t)len);
+    cur += len;
+
+    mrb_gc_arena_restore(mrb, ai);
+  }
+
+  return cur - buf;
+}
+
+
+static size_t
+get_syms_block_size(mrb_state *mrb, mrb_irep *irep)
+{
+  size_t size = 0;
+  int sym_no;
+  mrb_int len;
+
+  size += sizeof(uint32_t); /* slen */
+  for (sym_no = 0; sym_no < irep->slen; sym_no++) {
+    size += sizeof(uint16_t); /* snl(n) */
+    if (irep->syms[sym_no] != 0) {
+      mrb_sym_name_len(mrb, irep->syms[sym_no], &len);
+      size += len + 1; /* sn(n) + null char */
+    }
+  }
+
+  return size;
+}
+
+static ptrdiff_t
+write_syms_block(mrb_state *mrb, mrb_irep *irep, uint8_t *buf)
+{
+  int sym_no;
+  uint8_t *cur = buf;
+  const char *name;
+
+  cur += uint32_to_bin(irep->slen, cur); /* number of symbol */
+
+  for (sym_no = 0; sym_no < irep->slen; sym_no++) {
+    if (irep->syms[sym_no] != 0) {
+      mrb_int len;
+
+      name = mrb_sym_name_len(mrb, irep->syms[sym_no], &len);
+
+      mrb_assert_int_fit(mrb_int, len, uint16_t, UINT16_MAX);
+      cur += uint16_to_bin((uint16_t)len, cur); /* length of symbol name */
+      memcpy(cur, name, len); /* symbol name */
+      cur += (uint16_t)len;
+      *cur++ = '\0';
+    }
+    else {
+      cur += uint16_to_bin(MRB_DUMP_NULL_SYM_LEN, cur); /* length of symbol name */
+    }
+  }
+
+  return cur - buf;
+}
+
+static size_t
+get_irep_record_size_1(mrb_state *mrb, mrb_irep *irep)
+{
+  size_t size = 0;
+
+  size += get_irep_header_size(mrb);
+  size += get_iseq_block_size(mrb, irep);
+  size += get_pool_block_size(mrb, irep);
+  size += get_syms_block_size(mrb, irep);
+  return size;
+}
+
+static size_t
+get_irep_record_size(mrb_state *mrb, mrb_irep *irep)
+{
+  size_t size = 0;
+  int irep_no;
+
+  size = get_irep_record_size_1(mrb, irep);
+  for (irep_no = 0; irep_no < irep->rlen; irep_no++) {
+    size += get_irep_record_size(mrb, irep->reps[irep_no]);
+  }
+  return size;
+}
+
+static int
+write_irep_record(mrb_state *mrb, mrb_irep *irep, uint8_t *bin, size_t *irep_record_size, uint8_t flags)
+{
+  int i;
+  uint8_t *src = bin;
+
+  if (irep == NULL) {
+    return MRB_DUMP_INVALID_IREP;
+  }
+
+  *irep_record_size = get_irep_record_size_1(mrb, irep);
+  if (*irep_record_size == 0) {
+    return MRB_DUMP_GENERAL_FAILURE;
+  }
+
+  bin += write_irep_header(mrb, irep, bin);
+  bin += write_iseq_block(mrb, irep, bin, flags);
+  bin += write_pool_block(mrb, irep, bin);
+  bin += write_syms_block(mrb, irep, bin);
+
+  for (i = 0; i < irep->rlen; i++) {
+    int result;
+    size_t rsize;
+
+    result = write_irep_record(mrb, irep->reps[i], bin, &rsize, flags);
+    if (result != MRB_DUMP_OK) {
+      return result;
+    }
+    bin += rsize;
+  }
+  *irep_record_size = bin - src;
+  return MRB_DUMP_OK;
+}
+
+static uint32_t
+write_footer(mrb_state *mrb, uint8_t *bin)
+{
+  struct rite_binary_footer footer;
+
+  memcpy(footer.section_ident, RITE_BINARY_EOF, sizeof(footer.section_ident));
+  uint32_to_bin(sizeof(struct rite_binary_footer), footer.section_size);
+  memcpy(bin, &footer, sizeof(struct rite_binary_footer));
+
+  return sizeof(struct rite_binary_footer);
+}
+
+
+static int
+write_section_irep_header(mrb_state *mrb, size_t section_size, uint8_t *bin)
+{
+  struct rite_section_irep_header *header = (struct rite_section_irep_header*)bin;
+
+  memcpy(header->section_ident, RITE_SECTION_IREP_IDENT, sizeof(header->section_ident));
+
+  mrb_assert_int_fit(size_t, section_size, uint32_t, UINT32_MAX);
+  uint32_to_bin((uint32_t)section_size, header->section_size);
+  memcpy(header->rite_version, RITE_VM_VER, sizeof(header->rite_version));
+
+  return MRB_DUMP_OK;
+}
+
+static int
+write_section_irep(mrb_state *mrb, mrb_irep *irep, uint8_t *bin, size_t *len_p, uint8_t flags)
+{
+  int result;
+  size_t rsize = 0;
+  uint8_t *cur = bin;
+
+  if (mrb == NULL || bin == NULL) {
+    return MRB_DUMP_INVALID_ARGUMENT;
+  }
+
+  cur += sizeof(struct rite_section_irep_header);
+
+  result = write_irep_record(mrb, irep, cur, &rsize, flags);
+  if (result != MRB_DUMP_OK) {
+    return result;
+  }
+  *len_p = cur - bin + rsize;
+  write_section_irep_header(mrb, *len_p, bin);
+
+  return MRB_DUMP_OK;
+}
+
+static size_t
+get_debug_record_size(mrb_state *mrb, mrb_irep *irep)
+{
+  size_t ret = 0;
+  uint16_t f_idx;
+  int i;
+
+  ret += sizeof(uint32_t); /* record size */
+  ret += sizeof(uint16_t); /* file count */
+
+  for (f_idx = 0; f_idx < irep->debug_info->flen; ++f_idx) {
+    mrb_irep_debug_info_file const* file = irep->debug_info->files[f_idx];
+
+    ret += sizeof(uint32_t); /* position */
+    ret += sizeof(uint16_t); /* filename index */
+
+    /* lines */
+    ret += sizeof(uint32_t); /* entry count */
+    ret += sizeof(uint8_t); /* line type */
+    switch (file->line_type) {
+      case mrb_debug_line_ary:
+        ret += sizeof(uint16_t) * (size_t)(file->line_entry_count);
+        break;
+
+      case mrb_debug_line_flat_map:
+        ret += (sizeof(uint32_t) + sizeof(uint16_t)) * (size_t)(file->line_entry_count);
+        break;
+
+      default: mrb_assert(0); break;
+    }
+  }
+  for (i=0; i<irep->rlen; i++) {
+    ret += get_debug_record_size(mrb, irep->reps[i]);
+  }
+
+  return ret;
+}
+
+static int
+find_filename_index(const mrb_sym *ary, int ary_len, mrb_sym s)
+{
+  int i;
+
+  for (i = 0; i < ary_len; ++i) {
+    if (ary[i] == s) { return i; }
+  }
+  return -1;
+}
+
+static size_t
+get_filename_table_size(mrb_state *mrb, mrb_irep *irep, mrb_sym **fp, uint16_t *lp)
+{
+  mrb_sym *filenames = *fp;
+  size_t size = 0;
+  mrb_irep_debug_info *di = irep->debug_info;
+  int i;
+
+  mrb_assert(lp);
+  for (i = 0; i < di->flen; ++i) {
+    mrb_irep_debug_info_file *file;
+    mrb_int filename_len;
+
+    file = di->files[i];
+    if (find_filename_index(filenames, *lp, file->filename_sym) == -1) {
+      /* register filename */
+      *lp += 1;
+      *fp = filenames = (mrb_sym *)mrb_realloc(mrb, filenames, sizeof(mrb_sym) * (*lp));
+      filenames[*lp - 1] = file->filename_sym;
+
+      /* filename */
+      mrb_sym_name_len(mrb, file->filename_sym, &filename_len);
+      size += sizeof(uint16_t) + (size_t)filename_len;
+    }
+  }
+  for (i=0; i<irep->rlen; i++) {
+    size += get_filename_table_size(mrb, irep->reps[i], fp, lp);
+  }
+  return size;
+}
+
+static size_t
+write_debug_record_1(mrb_state *mrb, mrb_irep *irep, uint8_t *bin, mrb_sym const* filenames, uint16_t filenames_len)
+{
+  uint8_t *cur;
+  uint16_t f_idx;
+  ptrdiff_t ret;
+
+  cur = bin + sizeof(uint32_t); /* skip record size */
+  cur += uint16_to_bin(irep->debug_info->flen, cur); /* file count */
+
+  for (f_idx = 0; f_idx < irep->debug_info->flen; ++f_idx) {
+    int filename_idx;
+    const mrb_irep_debug_info_file *file = irep->debug_info->files[f_idx];
+
+    /* position */
+    cur += uint32_to_bin(file->start_pos, cur);
+
+    /* filename index */
+    filename_idx = find_filename_index(filenames, filenames_len,
+                                                  file->filename_sym);
+    mrb_assert_int_fit(int, filename_idx, uint16_t, UINT16_MAX);
+    cur += uint16_to_bin((uint16_t)filename_idx, cur);
+
+    /* lines */
+    cur += uint32_to_bin(file->line_entry_count, cur);
+    cur += uint8_to_bin(file->line_type, cur);
+    switch (file->line_type) {
+      case mrb_debug_line_ary: {
+        uint32_t l;
+        for (l = 0; l < file->line_entry_count; ++l) {
+          cur += uint16_to_bin(file->lines.ary[l], cur);
+        }
+      } break;
+
+      case mrb_debug_line_flat_map: {
+        uint32_t line;
+        for (line = 0; line < file->line_entry_count; ++line) {
+          cur += uint32_to_bin(file->lines.flat_map[line].start_pos, cur);
+          cur += uint16_to_bin(file->lines.flat_map[line].line, cur);
+        }
+      } break;
+
+      default: mrb_assert(0); break;
+    }
+  }
+
+  ret = cur - bin;
+  mrb_assert_int_fit(ptrdiff_t, ret, uint32_t, UINT32_MAX);
+  uint32_to_bin((uint32_t)ret, bin);
+
+  mrb_assert_int_fit(ptrdiff_t, ret, size_t, SIZE_MAX);
+  return (size_t)ret;
+}
+
+static size_t
+write_debug_record(mrb_state *mrb, mrb_irep *irep, uint8_t *bin, mrb_sym const* filenames, uint16_t filenames_len)
+{
+  size_t size, len;
+  int irep_no;
+
+  size = len = write_debug_record_1(mrb, irep, bin, filenames, filenames_len);
+  bin += len;
+  for (irep_no = 0; irep_no < irep->rlen; irep_no++) {
+    len = write_debug_record(mrb, irep->reps[irep_no], bin, filenames, filenames_len);
+    bin += len;
+    size += len;
+  }
+
+  mrb_assert(size == get_debug_record_size(mrb, irep));
+  return size;
+}
+
+static int
+write_section_debug(mrb_state *mrb, mrb_irep *irep, uint8_t *cur, mrb_sym const *filenames, uint16_t filenames_len)
+{
+  size_t section_size = 0;
+  const uint8_t *bin = cur;
+  struct rite_section_debug_header *header;
+  size_t dlen;
+  uint16_t i;
+  char const *sym; mrb_int sym_len;
+
+  if (mrb == NULL || cur == NULL) {
+    return MRB_DUMP_INVALID_ARGUMENT;
+  }
+
+  header = (struct rite_section_debug_header *)bin;
+  cur += sizeof(struct rite_section_debug_header);
+  section_size += sizeof(struct rite_section_debug_header);
+
+  /* filename table */
+  cur += uint16_to_bin(filenames_len, cur);
+  section_size += sizeof(uint16_t);
+  for (i = 0; i < filenames_len; ++i) {
+    sym = mrb_sym_name_len(mrb, filenames[i], &sym_len);
+    mrb_assert(sym);
+    cur += uint16_to_bin((uint16_t)sym_len, cur);
+    memcpy(cur, sym, sym_len);
+    cur += sym_len;
+    section_size += sizeof(uint16_t) + sym_len;
+  }
+
+  /* debug records */
+  dlen = write_debug_record(mrb, irep, cur, filenames, filenames_len);
+  section_size += dlen;
+
+  memcpy(header->section_ident, RITE_SECTION_DEBUG_IDENT, sizeof(header->section_ident));
+  mrb_assert(section_size <= INT32_MAX);
+  uint32_to_bin((uint32_t)section_size, header->section_size);
+
+  return MRB_DUMP_OK;
+}
+
+static void
+create_lv_sym_table(mrb_state *mrb, const mrb_irep *irep, mrb_sym **syms, uint32_t *syms_len)
+{
+  int i;
+
+  if (*syms == NULL) {
+    *syms = (mrb_sym*)mrb_malloc(mrb, sizeof(mrb_sym) * 1);
+  }
+
+  for (i = 0; i + 1 < irep->nlocals; ++i) {
+    mrb_sym const name = irep->lv[i].name;
+    if (name == 0) continue;
+    if (find_filename_index(*syms, *syms_len, name) != -1) continue;
+
+    ++(*syms_len);
+    *syms = (mrb_sym*)mrb_realloc(mrb, *syms, sizeof(mrb_sym) * (*syms_len));
+    (*syms)[*syms_len - 1] = name;
+  }
+
+  for (i = 0; i < irep->rlen; ++i) {
+    create_lv_sym_table(mrb, irep->reps[i], syms, syms_len);
+  }
+}
+
+static int
+write_lv_sym_table(mrb_state *mrb, uint8_t **start, mrb_sym const *syms, uint32_t syms_len)
+{
+  uint8_t *cur = *start;
+  uint32_t i;
+  const char *str;
+  mrb_int str_len;
+
+  cur += uint32_to_bin(syms_len, cur);
+
+  for (i = 0; i < syms_len; ++i) {
+    str = mrb_sym_name_len(mrb, syms[i], &str_len);
+    cur += uint16_to_bin((uint16_t)str_len, cur);
+    memcpy(cur, str, str_len);
+    cur += str_len;
+  }
+
+  *start = cur;
+
+  return MRB_DUMP_OK;
+}
+
+static int
+write_lv_record(mrb_state *mrb, const mrb_irep *irep, uint8_t **start, mrb_sym const *syms, uint32_t syms_len)
+{
+  uint8_t *cur = *start;
+  int i;
+
+  for (i = 0; i + 1 < irep->nlocals; ++i) {
+    if (irep->lv[i].name == 0) {
+      cur += uint16_to_bin(RITE_LV_NULL_MARK, cur);
+      cur += uint16_to_bin(0, cur);
+    }
+    else {
+      int const sym_idx = find_filename_index(syms, syms_len, irep->lv[i].name);
+      mrb_assert(sym_idx != -1); /* local variable name must be in syms */
+
+      cur += uint16_to_bin(sym_idx, cur);
+      cur += uint16_to_bin(irep->lv[i].r, cur);
+    }
+  }
+
+  for (i = 0; i < irep->rlen; ++i) {
+    write_lv_record(mrb, irep->reps[i], &cur, syms, syms_len);
+  }
+
+  *start = cur;
+
+  return MRB_DUMP_OK;
+}
+
+static size_t
+get_lv_record_size(mrb_state *mrb, mrb_irep *irep)
+{
+  size_t ret = 0;
+  int i;
+
+  ret += (sizeof(uint16_t) + sizeof(uint16_t)) * (irep->nlocals - 1);
+
+  for (i = 0; i < irep->rlen; ++i) {
+    ret += get_lv_record_size(mrb, irep->reps[i]);
+  }
+
+  return ret;
+}
+
+static size_t
+get_lv_section_size(mrb_state *mrb, mrb_irep *irep, mrb_sym const *syms, uint32_t syms_len)
+{
+  size_t ret = 0, i;
+
+  ret += sizeof(uint32_t); /* syms_len */
+  ret += sizeof(uint16_t) * syms_len; /* symbol name lengths */
+  for (i = 0; i < syms_len; ++i) {
+    mrb_int str_len;
+    mrb_sym_name_len(mrb, syms[i], &str_len);
+    ret += str_len;
+  }
+
+  ret += get_lv_record_size(mrb, irep);
+
+  return ret;
+}
+
+static int
+write_section_lv(mrb_state *mrb, mrb_irep *irep, uint8_t *start, mrb_sym const *syms, uint32_t const syms_len)
+{
+  uint8_t *cur = start;
+  struct rite_section_lv_header *header;
+  ptrdiff_t diff;
+  int result = MRB_DUMP_OK;
+
+  if (mrb == NULL || cur == NULL) {
+    return MRB_DUMP_INVALID_ARGUMENT;
+  }
+
+  header = (struct rite_section_lv_header*)cur;
+  cur += sizeof(struct rite_section_lv_header);
+
+  result = write_lv_sym_table(mrb, &cur, syms, syms_len);
+  if (result != MRB_DUMP_OK) {
+    goto lv_section_exit;
+  }
+
+  result = write_lv_record(mrb, irep, &cur, syms, syms_len);
+  if (result != MRB_DUMP_OK) {
+    goto lv_section_exit;
+  }
+
+  memcpy(header->section_ident, RITE_SECTION_LV_IDENT, sizeof(header->section_ident));
+
+  diff = cur - start;
+  mrb_assert_int_fit(ptrdiff_t, diff, size_t, SIZE_MAX);
+  uint32_to_bin((uint32_t)diff, header->section_size);
+
+lv_section_exit:
+  return result;
+}
+
+static int
+write_rite_binary_header(mrb_state *mrb, size_t binary_size, uint8_t *bin, uint8_t flags)
+{
+  struct rite_binary_header *header = (struct rite_binary_header *)bin;
+  uint16_t crc;
+  uint32_t offset;
+
+  switch (flags & DUMP_ENDIAN_NAT) {
+  endian_big:
+  case DUMP_ENDIAN_BIG:
+    memcpy(header->binary_ident, RITE_BINARY_IDENT, sizeof(header->binary_ident));
+    break;
+  endian_little:
+  case DUMP_ENDIAN_LIL:
+    memcpy(header->binary_ident, RITE_BINARY_IDENT_LIL, sizeof(header->binary_ident));
+    break;
+
+  case DUMP_ENDIAN_NAT:
+    if (bigendian_p()) goto endian_big;
+    goto endian_little;
+    break;
+  }
+
+  memcpy(header->binary_version, RITE_BINARY_FORMAT_VER, sizeof(header->binary_version));
+  memcpy(header->compiler_name, RITE_COMPILER_NAME, sizeof(header->compiler_name));
+  memcpy(header->compiler_version, RITE_COMPILER_VERSION, sizeof(header->compiler_version));
+  mrb_assert(binary_size <= UINT32_MAX);
+  uint32_to_bin((uint32_t)binary_size, header->binary_size);
+
+  offset = (uint32_t)((&(header->binary_crc[0]) - bin) + sizeof(uint16_t));
+  crc = calc_crc_16_ccitt(bin + offset, binary_size - offset, 0);
+  uint16_to_bin(crc, header->binary_crc);
+
+  return MRB_DUMP_OK;
+}
+
+static mrb_bool
+debug_info_defined_p(mrb_irep *irep)
+{
+  int i;
+
+  if (!irep->debug_info) return FALSE;
+  for (i=0; i<irep->rlen; i++) {
+    if (!debug_info_defined_p(irep->reps[i])) return FALSE;
+  }
+  return TRUE;
+}
+
+static mrb_bool
+lv_defined_p(mrb_irep *irep)
+{
+  int i;
+
+  if (irep->lv) { return TRUE; }
+
+  for (i = 0; i < irep->rlen; ++i) {
+    if (lv_defined_p(irep->reps[i])) { return TRUE; }
+  }
+
+  return FALSE;
+}
+
+static uint8_t
+dump_flags(uint8_t flags, uint8_t native)
+{
+  if (native == FLAG_BYTEORDER_NATIVE) {
+    if ((flags & DUMP_ENDIAN_NAT) == 0) {
+      return (flags & DUMP_DEBUG_INFO) | DUMP_ENDIAN_NAT;
+    }
+    return flags;
+  }
+  if ((flags & DUMP_ENDIAN_NAT) == 0) {
+    return (flags & DUMP_DEBUG_INFO) | DUMP_ENDIAN_BIG;
+  }
+  return flags;
+}
+
+static int
+dump_irep(mrb_state *mrb, mrb_irep *irep, uint8_t flags, uint8_t **bin, size_t *bin_size)
+{
+  int result = MRB_DUMP_GENERAL_FAILURE;
+  size_t malloc_size;
+  size_t section_irep_size;
+  size_t section_lineno_size = 0, section_lv_size = 0;
+  uint8_t *cur = NULL;
+  mrb_bool const debug_info_defined = debug_info_defined_p(irep), lv_defined = lv_defined_p(irep);
+  mrb_sym *lv_syms = NULL; uint32_t lv_syms_len = 0;
+  mrb_sym *filenames = NULL; uint16_t filenames_len = 0;
+
+  if (mrb == NULL) {
+    *bin = NULL;
+    return MRB_DUMP_GENERAL_FAILURE;
+  }
+
+  section_irep_size = sizeof(struct rite_section_irep_header);
+  section_irep_size += get_irep_record_size(mrb, irep);
+
+  /* DEBUG section size */
+  if (flags & DUMP_DEBUG_INFO) {
+    if (debug_info_defined) {
+      section_lineno_size += sizeof(struct rite_section_debug_header);
+      /* filename table */
+      filenames = (mrb_sym*)mrb_malloc(mrb, sizeof(mrb_sym) + 1);
+
+      /* filename table size */
+      section_lineno_size += sizeof(uint16_t);
+      section_lineno_size += get_filename_table_size(mrb, irep, &filenames, &filenames_len);
+
+      section_lineno_size += get_debug_record_size(mrb, irep);
+    }
+  }
+
+  if (lv_defined) {
+    section_lv_size += sizeof(struct rite_section_lv_header);
+    create_lv_sym_table(mrb, irep, &lv_syms, &lv_syms_len);
+    section_lv_size += get_lv_section_size(mrb, irep, lv_syms, lv_syms_len);
+  }
+
+  malloc_size = sizeof(struct rite_binary_header) +
+                section_irep_size + section_lineno_size + section_lv_size +
+                sizeof(struct rite_binary_footer);
+  cur = *bin = (uint8_t*)mrb_malloc(mrb, malloc_size);
+  cur += sizeof(struct rite_binary_header);
+
+  result = write_section_irep(mrb, irep, cur, &section_irep_size, flags);
+  if (result != MRB_DUMP_OK) {
+    goto error_exit;
+  }
+  cur += section_irep_size;
+  *bin_size = sizeof(struct rite_binary_header) +
+              section_irep_size + section_lineno_size + section_lv_size +
+              sizeof(struct rite_binary_footer);
+
+  /* write DEBUG section */
+  if (flags & DUMP_DEBUG_INFO) {
+    if (debug_info_defined) {
+      result = write_section_debug(mrb, irep, cur, filenames, filenames_len);
+      if (result != MRB_DUMP_OK) {
+        goto error_exit;
+      }
+    }
+    cur += section_lineno_size;
+  }
+
+  if (lv_defined) {
+    result = write_section_lv(mrb, irep, cur, lv_syms, lv_syms_len);
+    if (result != MRB_DUMP_OK) {
+      goto error_exit;
+    }
+    cur += section_lv_size;
+  }
+
+  write_footer(mrb, cur);
+  write_rite_binary_header(mrb, *bin_size, *bin, flags);
+
+error_exit:
+  if (result != MRB_DUMP_OK) {
+    mrb_free(mrb, *bin);
+    *bin = NULL;
+  }
+  mrb_free(mrb, lv_syms);
+  mrb_free(mrb, filenames);
+  return result;
+}
+
+int
+mrb_dump_irep(mrb_state *mrb, mrb_irep *irep, uint8_t flags, uint8_t **bin, size_t *bin_size)
+{
+  return dump_irep(mrb, irep, dump_flags(flags, FLAG_BYTEORDER_NONATIVE), bin, bin_size);
+}
+
+#ifndef MRB_DISABLE_STDIO
+
+int
+mrb_dump_irep_binary(mrb_state *mrb, mrb_irep *irep, uint8_t flags, FILE* fp)
+{
+  uint8_t *bin = NULL;
+  size_t bin_size = 0;
+  int result;
+
+  if (fp == NULL) {
+    return MRB_DUMP_INVALID_ARGUMENT;
+  }
+
+  result = dump_irep(mrb, irep, dump_flags(flags, FLAG_BYTEORDER_NONATIVE), &bin, &bin_size);
+  if (result == MRB_DUMP_OK) {
+    if (fwrite(bin, sizeof(bin[0]), bin_size, fp) != bin_size) {
+      result = MRB_DUMP_WRITE_FAULT;
+    }
+  }
+
+  mrb_free(mrb, bin);
+  return result;
+}
+
+static mrb_bool
+dump_bigendian_p(uint8_t flags)
+{
+  switch (flags & DUMP_ENDIAN_NAT) {
+  case DUMP_ENDIAN_BIG:
+    return TRUE;
+  case DUMP_ENDIAN_LIL:
+    return FALSE;
+  default:
+  case DUMP_ENDIAN_NAT:
+    return bigendian_p();
+  }
+}
+
+int
+mrb_dump_irep_cfunc(mrb_state *mrb, mrb_irep *irep, uint8_t flags, FILE *fp, const char *initname)
+{
+  uint8_t *bin = NULL;
+  size_t bin_size = 0, bin_idx = 0;
+  int result;
+
+  if (fp == NULL || initname == NULL || initname[0] == '\0') {
+    return MRB_DUMP_INVALID_ARGUMENT;
+  }
+  flags = dump_flags(flags, FLAG_BYTEORDER_NATIVE);
+  result = dump_irep(mrb, irep, flags, &bin, &bin_size);
+  if (result == MRB_DUMP_OK) {
+    if (!dump_bigendian_p(flags)) {
+      if (fprintf(fp, "/* dumped in little endian order.\n"
+                  "   use `mrbc -E` option for big endian CPU. */\n") < 0) {
+        mrb_free(mrb, bin);
+        return MRB_DUMP_WRITE_FAULT;
+      }
+    }
+    else {
+      if (fprintf(fp, "/* dumped in big endian order.\n"
+                  "   use `mrbc -e` option for better performance on little endian CPU. */\n") < 0) {
+        mrb_free(mrb, bin);
+        return MRB_DUMP_WRITE_FAULT;
+      }
+    }
+    if (fprintf(fp, "#include <stdint.h>\n") < 0) { /* for uint8_t under at least Darwin */
+      mrb_free(mrb, bin);
+      return MRB_DUMP_WRITE_FAULT;
+    }
+    if (fprintf(fp,
+          "#ifdef __cplusplus\n"
+          "extern const uint8_t %s[];\n"
+          "#endif\n"
+          "const uint8_t\n"
+          "#if defined __GNUC__\n"
+          "__attribute__((aligned(%u)))\n"
+          "#elif defined _MSC_VER\n"
+          "__declspec(align(%u))\n"
+          "#endif\n"
+          "%s[] = {",
+          initname,
+          (uint16_t)MRB_DUMP_ALIGNMENT, (uint16_t)MRB_DUMP_ALIGNMENT, initname) < 0) {
+      mrb_free(mrb, bin);
+      return MRB_DUMP_WRITE_FAULT;
+    }
+    while (bin_idx < bin_size) {
+      if (bin_idx % 16 == 0) {
+        if (fputs("\n", fp) == EOF) {
+          mrb_free(mrb, bin);
+          return MRB_DUMP_WRITE_FAULT;
+        }
+      }
+      if (fprintf(fp, "0x%02x,", bin[bin_idx++]) < 0) {
+        mrb_free(mrb, bin);
+        return MRB_DUMP_WRITE_FAULT;
+      }
+    }
+    if (fputs("\n};\n", fp) == EOF) {
+      mrb_free(mrb, bin);
+      return MRB_DUMP_WRITE_FAULT;
+    }
+  }
+
+  mrb_free(mrb, bin);
+  return result;
+}
+
+#endif /* MRB_DISABLE_STDIO */
Index: /EcnlProtoTool/trunk/mruby-2.1.1/src/enum.c
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/src/enum.c	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/src/enum.c	(revision 439)
@@ -0,0 +1,30 @@
+/*
+** enum.c - Enumerable module
+**
+** See Copyright Notice in mruby.h
+*/
+
+#include <mruby.h>
+#include <mruby/proc.h>
+
+/* internal method `__update_hash(oldhash, index, itemhash)` */
+static mrb_value
+enum_update_hash(mrb_state *mrb, mrb_value self)
+{
+  mrb_int hash;
+  mrb_int index;
+  mrb_int hv;
+
+  mrb_get_args(mrb, "iii", &hash, &index, &hv);
+  hash ^= ((uint32_t)hv << (index % 16));
+
+  return mrb_fixnum_value(hash);
+}
+
+void
+mrb_init_enumerable(mrb_state *mrb)
+{
+  struct RClass *enumerable;
+  enumerable = mrb_define_module(mrb, "Enumerable");  /* 15.3.2 */
+  mrb_define_module_function(mrb, enumerable, "__update_hash", enum_update_hash, MRB_ARGS_REQ(3));
+}
Index: /EcnlProtoTool/trunk/mruby-2.1.1/src/error.c
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/src/error.c	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/src/error.c	(revision 439)
@@ -0,0 +1,585 @@
+/*
+** error.c - Exception class
+**
+** See Copyright Notice in mruby.h
+*/
+
+#include <errno.h>
+#include <stdarg.h>
+#include <stdlib.h>
+#include <mruby.h>
+#include <mruby/array.h>
+#include <mruby/irep.h>
+#include <mruby/proc.h>
+#include <mruby/string.h>
+#include <mruby/variable.h>
+#include <mruby/error.h>
+#include <mruby/class.h>
+#include <mruby/throw.h>
+
+MRB_API mrb_value
+mrb_exc_new(mrb_state *mrb, struct RClass *c, const char *ptr, size_t len)
+{
+  mrb_value arg = mrb_str_new(mrb, ptr, len);
+  return mrb_obj_new(mrb, c, 1, &arg);
+}
+
+MRB_API mrb_value
+mrb_exc_new_str(mrb_state *mrb, struct RClass* c, mrb_value str)
+{
+  mrb_to_str(mrb, str);
+  return mrb_obj_new(mrb, c, 1, &str);
+}
+
+/*
+ * call-seq:
+ *    Exception.new(msg = nil)   ->  exception
+ *
+ *  Construct a new Exception object, optionally passing in
+ *  a message.
+ */
+
+static mrb_value
+exc_initialize(mrb_state *mrb, mrb_value exc)
+{
+  mrb_value mesg;
+
+  if (mrb_get_args(mrb, "|o", &mesg) == 1) {
+    mrb_iv_set(mrb, exc, mrb_intern_lit(mrb, "mesg"), mesg);
+  }
+  return exc;
+}
+
+/*
+ *  Document-method: exception
+ *
+ *  call-seq:
+ *     exc.exception(string)  ->  an_exception or exc
+ *
+ *  With no argument, or if the argument is the same as the receiver,
+ *  return the receiver. Otherwise, create a new
+ *  exception object of the same class as the receiver, but with a
+ *  message equal to <code>string</code>.
+ *
+ */
+
+static mrb_value
+exc_exception(mrb_state *mrb, mrb_value self)
+{
+  mrb_value exc;
+  mrb_value a;
+  mrb_int argc;
+
+  argc = mrb_get_args(mrb, "|o", &a);
+  if (argc == 0) return self;
+  if (mrb_obj_equal(mrb, self, a)) return self;
+  exc = mrb_obj_clone(mrb, self);
+  mrb_iv_set(mrb, exc, mrb_intern_lit(mrb, "mesg"), a);
+
+  return exc;
+}
+
+/*
+ * call-seq:
+ *   exception.to_s   ->  string
+ *
+ * Returns exception's message (or the name of the exception if
+ * no message is set).
+ */
+
+mrb_value
+exc_to_s(mrb_state *mrb, mrb_value exc)
+{
+  mrb_value mesg = mrb_attr_get(mrb, exc, mrb_intern_lit(mrb, "mesg"));
+  struct RObject *p;
+
+  if (!mrb_string_p(mesg)) {
+    return mrb_str_new_cstr(mrb, mrb_obj_classname(mrb, exc));
+  }
+  p = mrb_obj_ptr(mesg);
+  if (!p->c) {
+    p->c = mrb->string_class;
+  }
+  return mesg;
+}
+
+/*
+ * call-seq:
+ *   exception.message   ->  string
+ *
+ * Returns the result of invoking <code>exception.to_s</code>.
+ * Normally this returns the exception's message or name.
+ */
+
+static mrb_value
+exc_message(mrb_state *mrb, mrb_value exc)
+{
+  return mrb_funcall(mrb, exc, "to_s", 0);
+}
+
+/*
+ * call-seq:
+ *   exception.inspect   -> string
+ *
+ * Returns this exception's file name, line number,
+ * message and class name.
+ * If file name or line number is not set,
+ * returns message and class name.
+ */
+
+mrb_value
+mrb_exc_inspect(mrb_state *mrb, mrb_value exc)
+{
+  mrb_value mesg = mrb_attr_get(mrb, exc, mrb_intern_lit(mrb, "mesg"));
+  mrb_value cname = mrb_mod_to_s(mrb, mrb_obj_value(mrb_obj_class(mrb, exc)));
+  mesg = mrb_obj_as_string(mrb, mesg);
+  return RSTRING_LEN(mesg) == 0 ? cname : mrb_format(mrb, "%v (%v)", mesg, cname);
+}
+
+void mrb_keep_backtrace(mrb_state *mrb, mrb_value exc);
+
+static void
+set_backtrace(mrb_state *mrb, mrb_value exc, mrb_value backtrace)
+{
+  if (!mrb_array_p(backtrace)) {
+  type_err:
+    mrb_raise(mrb, E_TYPE_ERROR, "backtrace must be Array of String");
+  }
+  else {
+    const mrb_value *p = RARRAY_PTR(backtrace);
+    const mrb_value *pend = p + RARRAY_LEN(backtrace);
+
+    while (p < pend) {
+      if (!mrb_string_p(*p)) goto type_err;
+      p++;
+    }
+  }
+  mrb_iv_set(mrb, exc, mrb_intern_lit(mrb, "backtrace"), backtrace);
+}
+
+static mrb_value
+exc_set_backtrace(mrb_state *mrb, mrb_value exc)
+{
+  mrb_value backtrace;
+
+  mrb_get_args(mrb, "o", &backtrace);
+  set_backtrace(mrb, exc, backtrace);
+  return backtrace;
+}
+
+void
+mrb_exc_set(mrb_state *mrb, mrb_value exc)
+{
+  if (mrb_nil_p(exc)) {
+    mrb->exc = 0;
+  }
+  else {
+    mrb->exc = mrb_obj_ptr(exc);
+    if (mrb->gc.arena_idx > 0 &&
+        (struct RBasic*)mrb->exc == mrb->gc.arena[mrb->gc.arena_idx-1]) {
+      mrb->gc.arena_idx--;
+    }
+    if (!mrb->gc.out_of_memory && !mrb_frozen_p(mrb->exc)) {
+      mrb_keep_backtrace(mrb, exc);
+    }
+  }
+}
+
+MRB_API mrb_noreturn void
+mrb_exc_raise(mrb_state *mrb, mrb_value exc)
+{
+  if (mrb_break_p(exc)) {
+    mrb->exc = mrb_obj_ptr(exc);
+  }
+  else {
+    if (!mrb_obj_is_kind_of(mrb, exc, mrb->eException_class)) {
+      mrb_raise(mrb, E_TYPE_ERROR, "exception object expected");
+    }
+    mrb_exc_set(mrb, exc);
+  }
+  if (!mrb->jmp) {
+    mrb_p(mrb, exc);
+    abort();
+  }
+  MRB_THROW(mrb->jmp);
+}
+
+MRB_API mrb_noreturn void
+mrb_raise(mrb_state *mrb, struct RClass *c, const char *msg)
+{
+  mrb_exc_raise(mrb, mrb_exc_new_str(mrb, c, mrb_str_new_cstr(mrb, msg)));
+}
+
+/*
+ * <code>vsprintf</code> like formatting.
+ *
+ * The syntax of a format sequence is as follows.
+ *
+ *   %[modifier]specifier
+ *
+ * The modifiers are:
+ *
+ *   ----------+------------------------------------------------------------
+ *   Modifier  | Meaning
+ *   ----------+------------------------------------------------------------
+ *       !     | Convert to string by corresponding `inspect` instead of
+ *             | corresponding `to_s`.
+ *   ----------+------------------------------------------------------------
+ *
+ * The specifiers are:
+ *
+ *   ----------+----------------+--------------------------------------------
+ *   Specifier | Argument Type  | Note
+ *   ----------+----------------+--------------------------------------------
+ *       c     | char           |
+ *       d     | int            |
+ *       f     | mrb_float      |
+ *       i     | mrb_int        |
+ *       l     | char*, size_t  | Arguments are string and length.
+ *       n     | mrb_sym        |
+ *       s     | char*          | Argument is NUL terminated string.
+ *       t     | mrb_value      | Convert to type (class) of object.
+ *      v,S    | mrb_value      |
+ *       C     | struct RClass* |
+ *       T     | mrb_value      | Convert to real type (class) of object.
+ *       Y     | mrb_value      | Same as `!v` if argument is `true`, `false`
+ *             |                | or `nil`, otherwise same as `T`.
+ *       %     | -              | Convert to percent sign itself (no argument
+ *             |                | taken).
+ *   ----------+----------------+--------------------------------------------
+ */
+MRB_API mrb_value
+mrb_vformat(mrb_state *mrb, const char *format, va_list ap)
+{
+  const char *chars, *p = format, *b = format, *e;
+  char ch;
+  size_t len;
+  mrb_int i;
+  struct RClass *cls;
+  mrb_bool inspect = FALSE;
+  mrb_value result = mrb_str_new_capa(mrb, 128), obj, str;
+  int ai = mrb_gc_arena_save(mrb);
+
+  while (*p) {
+    const char c = *p++;
+    e = p;
+    if (c == '%') {
+      if (*p == '!') {
+        inspect = TRUE;
+        ++p;
+      }
+      if (!*p) break;
+      switch (*p) {
+        case 'c':
+          ch = (char)va_arg(ap, int);
+          chars = &ch;
+          len = 1;
+          goto L_cat;
+        case 'd': case 'i':
+#if MRB_INT_MAX < INT_MAX
+          i = (mrb_int)va_arg(ap, int);
+#else
+          i = *p == 'd' ? (mrb_int)va_arg(ap, int) : va_arg(ap, mrb_int);
+#endif
+          obj = mrb_fixnum_value(i);
+          goto L_cat_obj;
+#ifndef MRB_WITHOUT_FLOAT
+        case 'f':
+          obj = mrb_float_value(mrb, (mrb_float)va_arg(ap, double));
+          goto L_cat_obj;
+#endif
+        case 'l':
+          chars = va_arg(ap, char*);
+          len = va_arg(ap, size_t);
+        L_cat:
+          if (inspect) {
+            obj = mrb_str_new(mrb, chars, len);
+            goto L_cat_obj;
+          }
+          mrb_str_cat(mrb, result, b,  e - b - 1);
+          mrb_str_cat(mrb, result, chars, len);
+          b = ++p;
+          mrb_gc_arena_restore(mrb, ai);
+          break;
+        case 'n':
+#if UINT32_MAX < INT_MAX
+          obj = mrb_symbol_value((mrb_sym)va_arg(ap, int));
+#else
+          obj = mrb_symbol_value(va_arg(ap, mrb_sym));
+#endif
+          goto L_cat_obj;
+        case 's':
+          chars = va_arg(ap, char*);
+          len = strlen(chars);
+          goto L_cat;
+        case 't':
+          cls = mrb_class(mrb, va_arg(ap, mrb_value));
+          goto L_cat_class;
+        case 'v': case 'S':
+          obj = va_arg(ap, mrb_value);
+        L_cat_obj:
+          str = (inspect ? mrb_inspect : mrb_obj_as_string)(mrb, obj);
+          chars = RSTRING_PTR(str);
+          len = RSTRING_LEN(str);
+          inspect = FALSE;
+          goto L_cat;
+        case 'C':
+          cls = va_arg(ap, struct RClass*);
+        L_cat_class:
+          obj = mrb_obj_value(cls);
+          goto L_cat_obj;
+        case 'T':
+          obj = va_arg(ap, mrb_value);
+        L_cat_real_class_of:
+          cls = mrb_obj_class(mrb, obj);
+          goto L_cat_class;
+        case 'Y':
+          obj = va_arg(ap, mrb_value);
+          if (!mrb_test(obj) || mrb_true_p(obj)) {
+            inspect = TRUE;
+            goto L_cat_obj;
+          }
+          else {
+            goto L_cat_real_class_of;
+          }
+        case '%':
+        L_cat_current:
+          chars = p;
+          len = 1;
+          goto L_cat;
+        default:
+          mrb_raisef(mrb, E_ARGUMENT_ERROR, "malformed format string - %%%c", *p);
+      }
+    }
+    else if (c == '\\') {
+      if (!*p) break;
+      goto L_cat_current;
+
+    }
+  }
+
+  mrb_str_cat(mrb, result, b, p - b);
+  return result;
+}
+
+MRB_API mrb_value
+mrb_format(mrb_state *mrb, const char *format, ...)
+{
+  va_list ap;
+  mrb_value str;
+
+  va_start(ap, format);
+  str = mrb_vformat(mrb, format, ap);
+  va_end(ap);
+
+  return str;
+}
+
+static mrb_noreturn void
+raise_va(mrb_state *mrb, struct RClass *c, const char *fmt, va_list ap, int argc, mrb_value *argv)
+{
+  mrb_value mesg;
+  static int called = 0;
+
+  mesg = mrb_vformat(mrb, fmt, ap);
+  if (argv == NULL) {
+    argv = &mesg;
+  }
+  else {
+    argv[0] = mesg;
+  }
+  if (called)
+    mrb_exc_raise(mrb, mrb_obj_value(mrb->stack_err));
+  called = 1;
+  mrb_exc_raise(mrb, mrb_obj_new(mrb, c, argc+1, argv));
+}
+
+MRB_API mrb_noreturn void
+mrb_raisef(mrb_state *mrb, struct RClass *c, const char *fmt, ...)
+{
+  va_list args;
+
+  va_start(args, fmt);
+  raise_va(mrb, c, fmt, args, 0, NULL);
+  va_end(args);
+}
+
+MRB_API mrb_noreturn void
+mrb_name_error(mrb_state *mrb, mrb_sym id, const char *fmt, ...)
+{
+  mrb_value argv[2];
+  va_list args;
+
+  va_start(args, fmt);
+  argv[1] = mrb_symbol_value(id);
+  raise_va(mrb, E_NAME_ERROR, fmt, args, 1, argv);
+  va_end(args);
+}
+
+MRB_API void
+mrb_warn(mrb_state *mrb, const char *fmt, ...)
+{
+#ifndef MRB_DISABLE_STDIO
+  va_list ap;
+  mrb_value str;
+
+  va_start(ap, fmt);
+  str = mrb_vformat(mrb, fmt, ap);
+  fputs("warning: ", stderr);
+  fwrite(RSTRING_PTR(str), RSTRING_LEN(str), 1, stderr);
+  putc('\n', stderr);
+  va_end(ap);
+#endif
+}
+
+MRB_API mrb_noreturn void
+mrb_bug(mrb_state *mrb, const char *fmt, ...)
+{
+#ifndef MRB_DISABLE_STDIO
+  va_list ap;
+  mrb_value str;
+
+  va_start(ap, fmt);
+  str = mrb_vformat(mrb, fmt, ap);
+  fputs("bug: ", stderr);
+  fwrite(RSTRING_PTR(str), RSTRING_LEN(str), 1, stderr);
+  va_end(ap);
+#endif
+  exit(EXIT_FAILURE);
+}
+
+MRB_API mrb_value
+mrb_make_exception(mrb_state *mrb, mrb_int argc, const mrb_value *argv)
+{
+  mrb_value mesg;
+  int n;
+
+  mesg = mrb_nil_value();
+  switch (argc) {
+    case 0:
+    break;
+    case 1:
+      if (mrb_nil_p(argv[0]))
+        break;
+      if (mrb_string_p(argv[0])) {
+        mesg = mrb_exc_new_str(mrb, E_RUNTIME_ERROR, argv[0]);
+        break;
+      }
+      n = 0;
+      goto exception_call;
+
+    case 2:
+    case 3:
+      n = 1;
+exception_call:
+      {
+        mrb_sym exc = mrb_intern_lit(mrb, "exception");
+        if (mrb_respond_to(mrb, argv[0], exc)) {
+          mesg = mrb_funcall_argv(mrb, argv[0], exc, n, argv+1);
+        }
+        else {
+          /* undef */
+          mrb_raise(mrb, E_TYPE_ERROR, "exception class/object expected");
+        }
+      }
+
+      break;
+    default:
+      mrb_argnum_error(mrb, argc, 0, 3);
+      break;
+  }
+  if (argc > 0) {
+    if (!mrb_obj_is_kind_of(mrb, mesg, mrb->eException_class))
+      mrb_raise(mrb, mrb->eException_class, "exception object expected");
+    if (argc > 2)
+      set_backtrace(mrb, mesg, argv[2]);
+  }
+
+  return mesg;
+}
+
+MRB_API void
+mrb_sys_fail(mrb_state *mrb, const char *mesg)
+{
+  struct RClass *sce;
+  mrb_int no;
+
+  no = (mrb_int)errno;
+  if (mrb_class_defined(mrb, "SystemCallError")) {
+    sce = mrb_class_get(mrb, "SystemCallError");
+    if (mesg != NULL) {
+      mrb_funcall(mrb, mrb_obj_value(sce), "_sys_fail", 2, mrb_fixnum_value(no), mrb_str_new_cstr(mrb, mesg));
+    }
+    else {
+      mrb_funcall(mrb, mrb_obj_value(sce), "_sys_fail", 1, mrb_fixnum_value(no));
+    }
+  }
+  else {
+    mrb_raise(mrb, E_RUNTIME_ERROR, mesg);
+  }
+}
+
+MRB_API mrb_noreturn void
+mrb_no_method_error(mrb_state *mrb, mrb_sym id, mrb_value args, char const* fmt, ...)
+{
+  mrb_value exc;
+  mrb_value argv[3];
+  va_list ap;
+
+  va_start(ap, fmt);
+  argv[0] = mrb_vformat(mrb, fmt, ap);
+  argv[1] = mrb_symbol_value(id);
+  argv[2] = args;
+  va_end(ap);
+  exc = mrb_obj_new(mrb, E_NOMETHOD_ERROR, 3, argv);
+  mrb_exc_raise(mrb, exc);
+}
+
+MRB_API mrb_noreturn void
+mrb_frozen_error(mrb_state *mrb, void *frozen_obj)
+{
+  mrb_raisef(mrb, E_FROZEN_ERROR, "can't modify frozen %t", mrb_obj_value(frozen_obj));
+}
+
+MRB_API mrb_noreturn void
+mrb_argnum_error(mrb_state *mrb, mrb_int argc, int min, int max)
+{
+#define FMT(exp) "wrong number of arguments (given %i, expected " exp ")"
+  if (min == max)
+    mrb_raisef(mrb, E_ARGUMENT_ERROR, FMT("%d"), argc, min);
+  else if (max < 0)
+    mrb_raisef(mrb, E_ARGUMENT_ERROR, FMT("%d+"), argc, min);
+  else
+    mrb_raisef(mrb, E_ARGUMENT_ERROR, FMT("%d..%d"), argc, min, max);
+#undef FMT
+}
+
+void
+mrb_init_exception(mrb_state *mrb)
+{
+  struct RClass *exception, *script_error, *stack_error, *nomem_error;
+
+  mrb->eException_class = exception = mrb_define_class(mrb, "Exception", mrb->object_class); /* 15.2.22 */
+  MRB_SET_INSTANCE_TT(exception, MRB_TT_EXCEPTION);
+  mrb_define_class_method(mrb, exception, "exception", mrb_instance_new,  MRB_ARGS_OPT(1));
+  mrb_define_method(mrb, exception, "exception",       exc_exception,     MRB_ARGS_OPT(1));
+  mrb_define_method(mrb, exception, "initialize",      exc_initialize,    MRB_ARGS_OPT(1));
+  mrb_define_method(mrb, exception, "to_s",            exc_to_s,          MRB_ARGS_NONE());
+  mrb_define_method(mrb, exception, "message",         exc_message,       MRB_ARGS_NONE());
+  mrb_define_method(mrb, exception, "inspect",         mrb_exc_inspect,   MRB_ARGS_NONE());
+  mrb_define_method(mrb, exception, "backtrace",       mrb_exc_backtrace, MRB_ARGS_NONE());
+  mrb_define_method(mrb, exception, "set_backtrace",   exc_set_backtrace, MRB_ARGS_REQ(1));
+
+  mrb->eStandardError_class = mrb_define_class(mrb, "StandardError", mrb->eException_class); /* 15.2.23 */
+  mrb_define_class(mrb, "RuntimeError", mrb->eStandardError_class);          /* 15.2.28 */
+  script_error = mrb_define_class(mrb, "ScriptError", mrb->eException_class);                /* 15.2.37 */
+  mrb_define_class(mrb, "SyntaxError", script_error);                                        /* 15.2.38 */
+  stack_error = mrb_define_class(mrb, "SystemStackError", exception);
+  mrb->stack_err = mrb_obj_ptr(mrb_exc_new_str_lit(mrb, stack_error, "stack level too deep"));
+
+  nomem_error = mrb_define_class(mrb, "NoMemoryError", exception);
+  mrb->nomem_err = mrb_obj_ptr(mrb_exc_new_str_lit(mrb, nomem_error, "Out of memory"));
+#ifdef MRB_GC_FIXED_ARENA
+  mrb->arena_err = mrb_obj_ptr(mrb_exc_new_str_lit(mrb, nomem_error, "arena overflow error"));
+#endif
+}
Index: /EcnlProtoTool/trunk/mruby-2.1.1/src/error.h
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/src/error.h	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/src/error.h	(revision 439)
@@ -0,0 +1,3 @@
+/* this header file is to be removed soon.
+   added for compatibility purpose (1.0.0) */
+#include <mruby/error.h>
Index: /EcnlProtoTool/trunk/mruby-2.1.1/src/etc.c
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/src/etc.c	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/src/etc.c	(revision 439)
@@ -0,0 +1,214 @@
+/*
+** etc.c
+**
+** See Copyright Notice in mruby.h
+*/
+
+#include <mruby.h>
+#include <mruby/string.h>
+#include <mruby/data.h>
+#include <mruby/class.h>
+
+MRB_API struct RData*
+mrb_data_object_alloc(mrb_state *mrb, struct RClass *klass, void *ptr, const mrb_data_type *type)
+{
+  struct RData *data;
+
+  data = (struct RData*)mrb_obj_alloc(mrb, MRB_TT_DATA, klass);
+  data->data = ptr;
+  data->type = type;
+
+  return data;
+}
+
+MRB_API void
+mrb_data_check_type(mrb_state *mrb, mrb_value obj, const mrb_data_type *type)
+{
+  if (!mrb_data_p(obj)) {
+    mrb_check_type(mrb, obj, MRB_TT_DATA);
+  }
+  if (DATA_TYPE(obj) != type) {
+    const mrb_data_type *t2 = DATA_TYPE(obj);
+
+    if (t2) {
+      mrb_raisef(mrb, E_TYPE_ERROR, "wrong argument type %s (expected %s)",
+                 t2->struct_name, type->struct_name);
+    }
+    else {
+      mrb_raisef(mrb, E_TYPE_ERROR, "uninitialized %t (expected %s)",
+                 obj, type->struct_name);
+    }
+  }
+}
+
+MRB_API void*
+mrb_data_check_get_ptr(mrb_state *mrb, mrb_value obj, const mrb_data_type *type)
+{
+  if (!mrb_data_p(obj)) {
+    return NULL;
+  }
+  if (DATA_TYPE(obj) != type) {
+    return NULL;
+  }
+  return DATA_PTR(obj);
+}
+
+MRB_API void*
+mrb_data_get_ptr(mrb_state *mrb, mrb_value obj, const mrb_data_type *type)
+{
+  mrb_data_check_type(mrb, obj, type);
+  return DATA_PTR(obj);
+}
+
+MRB_API mrb_sym
+mrb_obj_to_sym(mrb_state *mrb, mrb_value name)
+{
+  if (mrb_symbol_p(name)) return mrb_symbol(name);
+  if (mrb_string_p(name)) return mrb_intern_str(mrb, name);
+  mrb_raisef(mrb, E_TYPE_ERROR, "%!v is not a symbol nor a string", name);
+  return 0;  /* not reached */
+}
+
+MRB_API mrb_int
+#ifdef MRB_WITHOUT_FLOAT
+mrb_fixnum_id(mrb_int f)
+#else
+mrb_float_id(mrb_float f)
+#endif
+{
+  const char *p = (const char*)&f;
+  int len = sizeof(f);
+  uint32_t id = 0;
+
+#ifndef MRB_WITHOUT_FLOAT
+  /* normalize -0.0 to 0.0 */
+  if (f == 0) f = 0.0;
+#endif
+  while (len--) {
+    id = id*65599 + *p;
+    p++;
+  }
+  id = id + (id>>5);
+
+  return (mrb_int)id;
+}
+
+MRB_API mrb_int
+mrb_obj_id(mrb_value obj)
+{
+  mrb_int tt = mrb_type(obj);
+
+#define MakeID2(p,t) (mrb_int)(((intptr_t)(p))^(t))
+#define MakeID(p)    MakeID2(p,tt)
+
+  switch (tt) {
+  case MRB_TT_FREE:
+  case MRB_TT_UNDEF:
+    return MakeID(0); /* not define */
+  case MRB_TT_FALSE:
+    if (mrb_nil_p(obj))
+      return MakeID(1);
+    return MakeID(0);
+  case MRB_TT_TRUE:
+    return MakeID(1);
+  case MRB_TT_SYMBOL:
+    return MakeID(mrb_symbol(obj));
+  case MRB_TT_FIXNUM:
+#ifdef MRB_WITHOUT_FLOAT
+    return MakeID(mrb_fixnum_id(mrb_fixnum(obj)));
+#else
+    return MakeID2(mrb_float_id((mrb_float)mrb_fixnum(obj)), MRB_TT_FLOAT);
+  case MRB_TT_FLOAT:
+    return MakeID(mrb_float_id(mrb_float(obj)));
+#endif
+  case MRB_TT_STRING:
+  case MRB_TT_OBJECT:
+  case MRB_TT_CLASS:
+  case MRB_TT_MODULE:
+  case MRB_TT_ICLASS:
+  case MRB_TT_SCLASS:
+  case MRB_TT_PROC:
+  case MRB_TT_ARRAY:
+  case MRB_TT_HASH:
+  case MRB_TT_RANGE:
+  case MRB_TT_EXCEPTION:
+  case MRB_TT_FILE:
+  case MRB_TT_DATA:
+  case MRB_TT_ISTRUCT:
+  default:
+    return MakeID(mrb_ptr(obj));
+  }
+}
+
+#ifdef MRB_WORD_BOXING
+#ifndef MRB_WITHOUT_FLOAT
+MRB_API mrb_value
+mrb_word_boxing_float_value(mrb_state *mrb, mrb_float f)
+{
+  mrb_value v;
+
+  v.value.p = mrb_obj_alloc(mrb, MRB_TT_FLOAT, mrb->float_class);
+  v.value.fp->f = f;
+  MRB_SET_FROZEN_FLAG(v.value.bp);
+  return v;
+}
+
+MRB_API mrb_value
+mrb_word_boxing_float_pool(mrb_state *mrb, mrb_float f)
+{
+  struct RFloat *nf = (struct RFloat *)mrb_malloc(mrb, sizeof(struct RFloat));
+  nf->tt = MRB_TT_FLOAT;
+  nf->c = mrb->float_class;
+  nf->f = f;
+  MRB_SET_FROZEN_FLAG(nf);
+  return mrb_obj_value(nf);
+}
+#endif  /* MRB_WITHOUT_FLOAT */
+
+MRB_API mrb_value
+mrb_word_boxing_cptr_value(mrb_state *mrb, void *p)
+{
+  mrb_value v;
+
+  v.value.p = mrb_obj_alloc(mrb, MRB_TT_CPTR, mrb->object_class);
+  v.value.vp->p = p;
+  return v;
+}
+#endif  /* MRB_WORD_BOXING */
+
+#if defined _MSC_VER && _MSC_VER < 1900
+
+#ifndef va_copy
+static void
+mrb_msvc_va_copy(va_list *dest, va_list src)
+{
+  *dest = src;
+}
+#define va_copy(dest, src) mrb_msvc_va_copy(&(dest), src)
+#endif
+
+MRB_API int
+mrb_msvc_vsnprintf(char *s, size_t n, const char *format, va_list arg)
+{
+  int cnt;
+  va_list argcp;
+  va_copy(argcp, arg);
+  if (n == 0 || (cnt = _vsnprintf_s(s, n, _TRUNCATE, format, argcp)) < 0) {
+    cnt = _vscprintf(format, arg);
+  }
+  va_end(argcp);
+  return cnt;
+}
+
+MRB_API int
+mrb_msvc_snprintf(char *s, size_t n, const char *format, ...)
+{
+  va_list arg;
+  int ret;
+  va_start(arg, format);
+  ret = mrb_msvc_vsnprintf(s, n, format, arg);
+  va_end(arg);
+  return ret;
+}
+
+#endif  /* defined _MSC_VER && _MSC_VER < 1900 */
Index: /EcnlProtoTool/trunk/mruby-2.1.1/src/fmt_fp.c
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/src/fmt_fp.c	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/src/fmt_fp.c	(revision 439)
@@ -0,0 +1,387 @@
+#ifndef MRB_WITHOUT_FLOAT
+#if defined(MRB_DISABLE_STDIO) || defined(_WIN32) || defined(_WIN64)
+/*
+
+Most code in this file originates from musl (src/stdio/vfprintf.c)
+which, just like mruby itself, is licensed under the MIT license.
+
+Copyright (c) 2005-2014 Rich Felker, et al.
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+*/
+
+#include <limits.h>
+#include <string.h>
+#include <math.h>
+#include <float.h>
+#include <ctype.h>
+
+#include <mruby.h>
+#include <mruby/string.h>
+
+struct fmt_args {
+  mrb_state *mrb;
+  mrb_value str;
+};
+
+#define MAX(a,b) ((a)>(b) ? (a) : (b))
+#define MIN(a,b) ((a)<(b) ? (a) : (b))
+
+/* Convenient bit representation for modifier flags, which all fall
+ * within 31 codepoints of the space character. */
+
+#define ALT_FORM   (1U<<('#'-' '))
+#define ZERO_PAD   (1U<<('0'-' '))
+#define LEFT_ADJ   (1U<<('-'-' '))
+#define PAD_POS    (1U<<(' '-' '))
+#define MARK_POS   (1U<<('+'-' '))
+
+static void
+out(struct fmt_args *f, const char *s, size_t l)
+{
+  mrb_str_cat(f->mrb, f->str, s, l);
+}
+
+#define PAD_SIZE 256
+static void
+pad(struct fmt_args *f, char c, ptrdiff_t w, ptrdiff_t l, uint8_t fl)
+{
+  char pad[PAD_SIZE];
+  if (fl & (LEFT_ADJ | ZERO_PAD) || l >= w) return;
+  l = w - l;
+  memset(pad, c, l>PAD_SIZE ? PAD_SIZE : l);
+  for (; l >= PAD_SIZE; l -= PAD_SIZE)
+    out(f, pad, PAD_SIZE);
+  out(f, pad, l);
+}
+
+static const char xdigits[16] = {
+  '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'
+};
+
+static char*
+fmt_u(uint32_t x, char *s)
+{
+  for (; x; x /= 10) *--s = '0' + x % 10;
+  return s;
+}
+
+/* Do not override this check. The floating point printing code below
+ * depends on the float.h constants being right. If they are wrong, it
+ * may overflow the stack. */
+#if LDBL_MANT_DIG == 53
+typedef char compiler_defines_long_double_incorrectly[9-(int)sizeof(long double)];
+#endif
+
+static int
+fmt_fp(struct fmt_args *f, long double y, ptrdiff_t p, uint8_t fl, int t)
+{
+  uint32_t big[(LDBL_MANT_DIG+28)/29 + 1          // mantissa expansion
+    + (LDBL_MAX_EXP+LDBL_MANT_DIG+28+8)/9]; // exponent expansion
+  uint32_t *a, *d, *r, *z;
+  uint32_t i;
+  int e2=0, e, j;
+  ptrdiff_t l;
+  char buf[9+LDBL_MANT_DIG/4], *s;
+  const char *prefix="-0X+0X 0X-0x+0x 0x";
+  ptrdiff_t pl;
+  char ebuf0[3*sizeof(int)], *ebuf=&ebuf0[3*sizeof(int)], *estr;
+
+  pl=1;
+  if (signbit(y)) {
+    y=-y;
+  } else if (fl & MARK_POS) {
+    prefix+=3;
+  } else if (fl & PAD_POS) {
+    prefix+=6;
+  } else prefix++, pl=0;
+
+  if (!isfinite(y)) {
+    const char *ss = (t&32)?"inf":"INF";
+    if (y!=y) ss=(t&32)?"nan":"NAN";
+    pad(f, ' ', 0, 3+pl, fl&~ZERO_PAD);
+    out(f, prefix, pl);
+    out(f, ss, 3);
+    pad(f, ' ', 0, 3+pl, fl^LEFT_ADJ);
+    return 3+(int)pl;
+  }
+
+  y = frexp((double)y, &e2) * 2;
+  if (y) e2--;
+
+  if ((t|32)=='a') {
+    long double round = 8.0;
+    ptrdiff_t re;
+
+    if (t&32) prefix += 9;
+    pl += 2;
+
+    if (p<0 || p>=LDBL_MANT_DIG/4-1) re=0;
+    else re=LDBL_MANT_DIG/4-1-p;
+
+    if (re) {
+      while (re--) round*=16;
+      if (*prefix=='-') {
+        y=-y;
+        y-=round;
+        y+=round;
+        y=-y;
+      }
+      else {
+        y+=round;
+        y-=round;
+      }
+    }
+
+    estr=fmt_u(e2<0 ? -e2 : e2, ebuf);
+    if (estr==ebuf) *--estr='0';
+    *--estr = (e2<0 ? '-' : '+');
+    *--estr = t+('p'-'a');
+
+    s=buf;
+    do {
+      int x=(int)y;
+      *s++=xdigits[x]|(t&32);
+      y=16*(y-x);
+      if (s-buf==1 && (y||p>0||(fl&ALT_FORM))) *s++='.';
+    } while (y);
+
+    if (p && s-buf-2 < p)
+      l = (p+2) + (ebuf-estr);
+    else
+      l = (s-buf) + (ebuf-estr);
+
+    pad(f, ' ', 0, pl+l, fl);
+    out(f, prefix, pl);
+    pad(f, '0', 0, pl+l, fl^ZERO_PAD);
+    out(f, buf, s-buf);
+    pad(f, '0', l-(ebuf-estr)-(s-buf), 0, 0);
+    out(f, estr, ebuf-estr);
+    pad(f, ' ', 0, pl+l, fl^LEFT_ADJ);
+    return (int)pl+(int)l;
+  }
+  if (p<0) p=6;
+
+  if (y) y *= 268435456.0, e2-=28;
+
+  if (e2<0) a=r=z=big;
+  else a=r=z=big+sizeof(big)/sizeof(*big) - LDBL_MANT_DIG - 1;
+
+  do {
+    *z = (uint32_t)y;
+    y = 1000000000*(y-*z++);
+  } while (y);
+
+  while (e2>0) {
+    uint32_t carry=0;
+    int sh=MIN(29,e2);
+    for (d=z-1; d>=a; d--) {
+      uint64_t x = ((uint64_t)*d<<sh)+carry;
+      *d = x % 1000000000;
+      carry = (uint32_t)(x / 1000000000);
+    }
+    if (carry) *--a = carry;
+    while (z>a && !z[-1]) z--;
+    e2-=sh;
+  }
+  while (e2<0) {
+    uint32_t carry=0, *b;
+    int sh=MIN(9,-e2), need=1+((int)p+LDBL_MANT_DIG/3+8)/9;
+    for (d=a; d<z; d++) {
+      uint32_t rm = *d & ((1<<sh)-1);
+      *d = (*d>>sh) + carry;
+      carry = (1000000000>>sh) * rm;
+    }
+    if (!*a) a++;
+    if (carry) *z++ = carry;
+    /* Avoid (slow!) computation past requested precision */
+    b = (t|32)=='f' ? r : a;
+    if (z-b > need) z = b+need;
+    e2+=sh;
+  }
+
+  if (a<z) for (i=10, e=9*(int)(r-a); *a>=i; i*=10, e++);
+  else e=0;
+
+  /* Perform rounding: j is precision after the radix (possibly neg) */
+  j = (int)p - ((t|32)!='f')*e - ((t|32)=='g' && p);
+  if (j < 9*(z-r-1)) {
+    uint32_t x;
+    /* We avoid C's broken division of negative numbers */
+    d = r + 1 + ((j+9*LDBL_MAX_EXP)/9 - LDBL_MAX_EXP);
+    j += 9*LDBL_MAX_EXP;
+    j %= 9;
+    for (i=10, j++; j<9; i*=10, j++);
+    x = *d % i;
+    /* Are there any significant digits past j? */
+    if (x || d+1!=z) {
+      long double round = 2/LDBL_EPSILON;
+      long double small;
+      if (*d/i & 1) round += 2;
+      if (x<i/2) small=0.5;
+      else if (x==i/2 && d+1==z) small=1.0;
+      else small=1.5;
+      if (pl && *prefix=='-') round*=-1, small*=-1;
+      *d -= x;
+      /* Decide whether to round by probing round+small */
+      if (round+small != round) {
+        *d = *d + i;
+        while (*d > 999999999) {
+          *d--=0;
+          if (d<a) *--a=0;
+          (*d)++;
+        }
+        for (i=10, e=9*(int)(r-a); *a>=i; i*=10, e++);
+      }
+    }
+    if (z>d+1) z=d+1;
+  }
+  for (; z>a && !z[-1]; z--);
+
+  if ((t|32)=='g') {
+    if (!p) p++;
+    if (p>e && e>=-4) {
+      t--;
+      p-=e+1;
+    }
+    else {
+      t-=2;
+      p--;
+    }
+    if (!(fl&ALT_FORM)) {
+      /* Count trailing zeros in last place */
+      if (z>a && z[-1]) for (i=10, j=0; z[-1]%i==0; i*=10, j++);
+      else j=9;
+      if ((t|32)=='f')
+        p = MIN(p,MAX(0,9*(z-r-1)-j));
+      else
+        p = MIN(p,MAX(0,9*(z-r-1)+e-j));
+    }
+  }
+  l = 1 + p + (p || (fl&ALT_FORM));
+  if ((t|32)=='f') {
+    if (e>0) l+=e;
+  }
+  else {
+    estr=fmt_u(e<0 ? -e : e, ebuf);
+    while(ebuf-estr<2) *--estr='0';
+    *--estr = (e<0 ? '-' : '+');
+    *--estr = t;
+    l += ebuf-estr;
+  }
+
+  pad(f, ' ', 0, pl+l, fl);
+  out(f, prefix, pl);
+  pad(f, '0', 0, pl+l, fl^ZERO_PAD);
+
+  if ((t|32)=='f') {
+    if (a>r) a=r;
+    for (d=a; d<=r; d++) {
+      char *ss = fmt_u(*d, buf+9);
+      if (d!=a) while (ss>buf) *--ss='0';
+      else if (ss==buf+9) *--ss='0';
+      out(f, ss, buf+9-ss);
+    }
+    if (p || (fl&ALT_FORM)) out(f, ".", 1);
+    for (; d<z && p>0; d++, p-=9) {
+      char *ss = fmt_u(*d, buf+9);
+      while (ss>buf) *--ss='0';
+      out(f, ss, MIN(9,p));
+    }
+    pad(f, '0', p+9, 9, 0);
+  }
+  else {
+    if (z<=a) z=a+1;
+    for (d=a; d<z && p>=0; d++) {
+      char *ss = fmt_u(*d, buf+9);
+      if (ss==buf+9) *--ss='0';
+      if (d!=a) while (ss>buf) *--ss='0';
+      else {
+        out(f, ss++, 1);
+        if (p>0||(fl&ALT_FORM)) out(f, ".", 1);
+      }
+      out(f, ss, MIN(buf+9-ss, p));
+      p -= (int)(buf+9-ss);
+    }
+    pad(f, '0', p+18, 18, 0);
+    out(f, estr, ebuf-estr);
+  }
+
+  pad(f, ' ', 0, pl+l, fl^LEFT_ADJ);
+
+  return (int)pl+(int)l;
+}
+
+static int
+fmt_core(struct fmt_args *f, const char *fmt, mrb_float flo)
+{
+  ptrdiff_t p;
+
+  if (*fmt != '%') {
+    return -1;
+  }
+  ++fmt;
+
+  if (*fmt == '.') {
+    ++fmt;
+    for (p = 0; ISDIGIT(*fmt); ++fmt) {
+      p = 10 * p + (*fmt - '0');
+    }
+  }
+  else {
+    p = -1;
+  }
+
+  switch (*fmt) {
+  case 'e': case 'f': case 'g': case 'a':
+  case 'E': case 'F': case 'G': case 'A':
+    return fmt_fp(f, flo, p, 0, *fmt);
+  default:
+    return -1;
+  }
+}
+
+mrb_value
+mrb_float_to_str(mrb_state *mrb, mrb_value flo, const char *fmt)
+{
+  struct fmt_args f;
+
+  f.mrb = mrb;
+  f.str = mrb_str_new_capa(mrb, 24);
+  if (fmt_core(&f, fmt, mrb_float(flo)) < 0) {
+    mrb_raise(mrb, E_ARGUMENT_ERROR, "invalid format string");
+  }
+  return f.str;
+}
+#else   /* MRB_DISABLE_STDIO || _WIN32 || _WIN64 */
+#include <mruby.h>
+#include <stdio.h>
+
+mrb_value
+mrb_float_to_str(mrb_state *mrb, mrb_value flo, const char *fmt)
+{
+  char buf[25];
+
+  snprintf(buf, sizeof(buf), fmt, mrb_float(flo));
+  return mrb_str_new_cstr(mrb, buf);
+}
+#endif  /* MRB_DISABLE_STDIO || _WIN32 || _WIN64 */
+#endif
Index: /EcnlProtoTool/trunk/mruby-2.1.1/src/gc.c
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/src/gc.c	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/src/gc.c	(revision 439)
@@ -0,0 +1,1903 @@
+/*
+** gc.c - garbage collector for mruby
+**
+** See Copyright Notice in mruby.h
+*/
+
+#include <string.h>
+#include <stdlib.h>
+#include <mruby.h>
+#include <mruby/array.h>
+#include <mruby/class.h>
+#include <mruby/data.h>
+#include <mruby/istruct.h>
+#include <mruby/hash.h>
+#include <mruby/proc.h>
+#include <mruby/range.h>
+#include <mruby/string.h>
+#include <mruby/variable.h>
+#include <mruby/gc.h>
+#include <mruby/error.h>
+#include <mruby/throw.h>
+
+/*
+  = Tri-color Incremental Garbage Collection
+
+  mruby's GC is Tri-color Incremental GC with Mark & Sweep.
+  Algorithm details are omitted.
+  Instead, the implementation part is described below.
+
+  == Object's Color
+
+  Each object can be painted in three colors:
+
+    * White - Unmarked.
+    * Gray - Marked, But the child objects are unmarked.
+    * Black - Marked, the child objects are also marked.
+
+  == Two White Types
+
+  There're two white color types in a flip-flop fashion: White-A and White-B,
+  which respectively represent the Current White color (the newly allocated
+  objects in the current GC cycle) and the Sweep Target White color (the
+  dead objects to be swept).
+
+  A and B will be switched just at the beginning of the next GC cycle. At
+  that time, all the dead objects have been swept, while the newly created
+  objects in the current GC cycle which finally remains White are now
+  regarded as dead objects. Instead of traversing all the White-A objects and
+  painting them as White-B, just switch the meaning of White-A and White-B as
+  this will be much cheaper.
+
+  As a result, the objects we sweep in the current GC cycle are always
+  left from the previous GC cycle. This allows us to sweep objects
+  incrementally, without the disturbance of the newly created objects.
+
+  == Execution Timing
+
+  GC Execution Time and Each step interval are decided by live objects count.
+  List of Adjustment API:
+
+    * gc_interval_ratio_set
+    * gc_step_ratio_set
+
+  For details, see the comments for each function.
+
+  == Write Barrier
+
+  mruby implementer and C extension library writer must insert a write
+  barrier when updating a reference from a field of an object.
+  When updating a reference from a field of object A to object B,
+  two different types of write barrier are available:
+
+    * mrb_field_write_barrier - target B object for a mark.
+    * mrb_write_barrier       - target A object for a mark.
+
+  == Generational Mode
+
+  mruby's GC offers an Generational Mode while re-using the tri-color GC
+  infrastructure. It will treat the Black objects as Old objects after each
+  sweep phase, instead of painting them White. The key ideas are still the same
+  as traditional generational GC:
+
+    * Minor GC - just traverse the Young objects (Gray objects) in the mark
+                 phase, then only sweep the newly created objects, and leave
+                 the Old objects live.
+
+    * Major GC - same as a full regular GC cycle.
+
+  The difference from "traditional" generational GC is, that the major GC
+  in mruby is triggered incrementally in a tri-color manner.
+
+
+  For details, see the comments for each function.
+
+*/
+
+struct free_obj {
+  MRB_OBJECT_HEADER;
+  struct RBasic *next;
+};
+
+typedef struct {
+  union {
+    struct free_obj free;
+    struct RBasic basic;
+    struct RObject object;
+    struct RClass klass;
+    struct RString string;
+    struct RArray array;
+    struct RHash hash;
+    struct RRange range;
+    struct RData data;
+    struct RIStruct istruct;
+    struct RProc proc;
+    struct REnv env;
+    struct RFiber fiber;
+    struct RException exc;
+    struct RBreak brk;
+#ifdef MRB_WORD_BOXING
+#ifndef MRB_WITHOUT_FLOAT
+    struct RFloat floatv;
+#endif
+    struct RCptr cptr;
+#endif
+  } as;
+} RVALUE;
+
+#ifdef GC_PROFILE
+#include <stdio.h>
+#include <sys/time.h>
+
+static double program_invoke_time = 0;
+static double gc_time = 0;
+static double gc_total_time = 0;
+
+static double
+gettimeofday_time(void)
+{
+  struct timeval tv;
+  gettimeofday(&tv, NULL);
+  return tv.tv_sec + tv.tv_usec * 1e-6;
+}
+
+#define GC_INVOKE_TIME_REPORT(with) do {\
+  fprintf(stderr, "%s\n", with);\
+  fprintf(stderr, "gc_invoke: %19.3f\n", gettimeofday_time() - program_invoke_time);\
+  fprintf(stderr, "is_generational: %d\n", is_generational(gc));\
+  fprintf(stderr, "is_major_gc: %d\n", is_major_gc(gc));\
+} while(0)
+
+#define GC_TIME_START do {\
+  gc_time = gettimeofday_time();\
+} while(0)
+
+#define GC_TIME_STOP_AND_REPORT do {\
+  gc_time = gettimeofday_time() - gc_time;\
+  gc_total_time += gc_time;\
+  fprintf(stderr, "gc_state: %d\n", gc->state);\
+  fprintf(stderr, "live: %zu\n", gc->live);\
+  fprintf(stderr, "majorgc_old_threshold: %zu\n", gc->majorgc_old_threshold);\
+  fprintf(stderr, "gc_threshold: %zu\n", gc->threshold);\
+  fprintf(stderr, "gc_time: %30.20f\n", gc_time);\
+  fprintf(stderr, "gc_total_time: %30.20f\n\n", gc_total_time);\
+} while(0)
+#else
+#define GC_INVOKE_TIME_REPORT(s)
+#define GC_TIME_START
+#define GC_TIME_STOP_AND_REPORT
+#endif
+
+#ifdef GC_DEBUG
+#define DEBUG(x) (x)
+#else
+#define DEBUG(x)
+#endif
+
+#ifndef MRB_HEAP_PAGE_SIZE
+#define MRB_HEAP_PAGE_SIZE 1024
+#endif
+
+#define GC_STEP_SIZE 1024
+
+/* white: 001 or 010, black: 100, gray: 000 */
+#define GC_GRAY 0
+#define GC_WHITE_A 1
+#define GC_WHITE_B (1 << 1)
+#define GC_BLACK (1 << 2)
+#define GC_WHITES (GC_WHITE_A | GC_WHITE_B)
+#define GC_COLOR_MASK 7
+
+#define paint_gray(o) ((o)->color = GC_GRAY)
+#define paint_black(o) ((o)->color = GC_BLACK)
+#define paint_white(o) ((o)->color = GC_WHITES)
+#define paint_partial_white(s, o) ((o)->color = (s)->current_white_part)
+#define is_gray(o) ((o)->color == GC_GRAY)
+#define is_white(o) ((o)->color & GC_WHITES)
+#define is_black(o) ((o)->color & GC_BLACK)
+#define flip_white_part(s) ((s)->current_white_part = other_white_part(s))
+#define other_white_part(s) ((s)->current_white_part ^ GC_WHITES)
+#define is_dead(s, o) (((o)->color & other_white_part(s) & GC_WHITES) || (o)->tt == MRB_TT_FREE)
+
+#define objects(p) ((RVALUE *)p->objects)
+
+MRB_API void*
+mrb_realloc_simple(mrb_state *mrb, void *p,  size_t len)
+{
+  void *p2;
+
+  p2 = (mrb->allocf)(mrb, p, len, mrb->allocf_ud);
+  if (!p2 && len > 0 && mrb->gc.heaps) {
+    mrb_full_gc(mrb);
+    p2 = (mrb->allocf)(mrb, p, len, mrb->allocf_ud);
+  }
+
+  return p2;
+}
+
+MRB_API void*
+mrb_realloc(mrb_state *mrb, void *p, size_t len)
+{
+  void *p2;
+
+  p2 = mrb_realloc_simple(mrb, p, len);
+  if (len == 0) return p2;
+  if (p2 == NULL) {
+    if (mrb->gc.out_of_memory) {
+      mrb_exc_raise(mrb, mrb_obj_value(mrb->nomem_err));
+      /* mrb_panic(mrb); */
+    }
+    else {
+      mrb->gc.out_of_memory = TRUE;
+      mrb_exc_raise(mrb, mrb_obj_value(mrb->nomem_err));
+    }
+  }
+  else {
+    mrb->gc.out_of_memory = FALSE;
+  }
+
+  return p2;
+}
+
+MRB_API void*
+mrb_malloc(mrb_state *mrb, size_t len)
+{
+  return mrb_realloc(mrb, 0, len);
+}
+
+MRB_API void*
+mrb_malloc_simple(mrb_state *mrb, size_t len)
+{
+  return mrb_realloc_simple(mrb, 0, len);
+}
+
+MRB_API void*
+mrb_calloc(mrb_state *mrb, size_t nelem, size_t len)
+{
+  void *p;
+
+  if (nelem > 0 && len > 0 &&
+      nelem <= SIZE_MAX / len) {
+    size_t size;
+    size = nelem * len;
+    p = mrb_malloc(mrb, size);
+
+    memset(p, 0, size);
+  }
+  else {
+    p = NULL;
+  }
+
+  return p;
+}
+
+MRB_API void
+mrb_free(mrb_state *mrb, void *p)
+{
+  (mrb->allocf)(mrb, p, 0, mrb->allocf_ud);
+}
+
+MRB_API void*
+mrb_alloca(mrb_state *mrb, size_t size)
+{
+  struct RString *s;
+  s = (struct RString*)mrb_obj_alloc(mrb, MRB_TT_STRING, mrb->string_class);
+  return s->as.heap.ptr = (char*)mrb_malloc(mrb, size);
+}
+
+static mrb_bool
+heap_p(mrb_gc *gc, struct RBasic *object)
+{
+  mrb_heap_page* page;
+
+  page = gc->heaps;
+  while (page) {
+    RVALUE *p;
+
+    p = objects(page);
+    if (&p[0].as.basic <= object && object <= &p[MRB_HEAP_PAGE_SIZE].as.basic) {
+      return TRUE;
+    }
+    page = page->next;
+  }
+  return FALSE;
+}
+
+MRB_API mrb_bool
+mrb_object_dead_p(mrb_state *mrb, struct RBasic *object) {
+  mrb_gc *gc = &mrb->gc;
+  if (!heap_p(gc, object)) return TRUE;
+  return is_dead(gc, object);
+}
+
+static void
+link_heap_page(mrb_gc *gc, mrb_heap_page *page)
+{
+  page->next = gc->heaps;
+  if (gc->heaps)
+    gc->heaps->prev = page;
+  gc->heaps = page;
+}
+
+static void
+unlink_heap_page(mrb_gc *gc, mrb_heap_page *page)
+{
+  if (page->prev)
+    page->prev->next = page->next;
+  if (page->next)
+    page->next->prev = page->prev;
+  if (gc->heaps == page)
+    gc->heaps = page->next;
+  page->prev = NULL;
+  page->next = NULL;
+}
+
+static void
+link_free_heap_page(mrb_gc *gc, mrb_heap_page *page)
+{
+  page->free_next = gc->free_heaps;
+  if (gc->free_heaps) {
+    gc->free_heaps->free_prev = page;
+  }
+  gc->free_heaps = page;
+}
+
+static void
+unlink_free_heap_page(mrb_gc *gc, mrb_heap_page *page)
+{
+  if (page->free_prev)
+    page->free_prev->free_next = page->free_next;
+  if (page->free_next)
+    page->free_next->free_prev = page->free_prev;
+  if (gc->free_heaps == page)
+    gc->free_heaps = page->free_next;
+  page->free_prev = NULL;
+  page->free_next = NULL;
+}
+
+static void
+add_heap(mrb_state *mrb, mrb_gc *gc)
+{
+  mrb_heap_page *page = (mrb_heap_page *)mrb_calloc(mrb, 1, sizeof(mrb_heap_page) + MRB_HEAP_PAGE_SIZE * sizeof(RVALUE));
+  RVALUE *p, *e;
+  struct RBasic *prev = NULL;
+
+  for (p = objects(page), e=p+MRB_HEAP_PAGE_SIZE; p<e; p++) {
+    p->as.free.tt = MRB_TT_FREE;
+    p->as.free.next = prev;
+    prev = &p->as.basic;
+  }
+  page->freelist = prev;
+
+  link_heap_page(gc, page);
+  link_free_heap_page(gc, page);
+}
+
+#define DEFAULT_GC_INTERVAL_RATIO 200
+#define DEFAULT_GC_STEP_RATIO 200
+#define MAJOR_GC_INC_RATIO 120
+#define MAJOR_GC_TOOMANY 10000
+#define is_generational(gc) ((gc)->generational)
+#define is_major_gc(gc) (is_generational(gc) && (gc)->full)
+#define is_minor_gc(gc) (is_generational(gc) && !(gc)->full)
+
+void
+mrb_gc_init(mrb_state *mrb, mrb_gc *gc)
+{
+#ifndef MRB_GC_FIXED_ARENA
+  gc->arena = (struct RBasic**)mrb_malloc(mrb, sizeof(struct RBasic*)*MRB_GC_ARENA_SIZE);
+  gc->arena_capa = MRB_GC_ARENA_SIZE;
+#endif
+
+  gc->current_white_part = GC_WHITE_A;
+  gc->heaps = NULL;
+  gc->free_heaps = NULL;
+  add_heap(mrb, gc);
+  gc->interval_ratio = DEFAULT_GC_INTERVAL_RATIO;
+  gc->step_ratio = DEFAULT_GC_STEP_RATIO;
+#ifndef MRB_GC_TURN_OFF_GENERATIONAL
+  gc->generational = TRUE;
+  gc->full = TRUE;
+#endif
+
+#ifdef GC_PROFILE
+  program_invoke_time = gettimeofday_time();
+#endif
+}
+
+static void obj_free(mrb_state *mrb, struct RBasic *obj, int end);
+
+static void
+free_heap(mrb_state *mrb, mrb_gc *gc)
+{
+  mrb_heap_page *page = gc->heaps;
+  mrb_heap_page *tmp;
+  RVALUE *p, *e;
+
+  while (page) {
+    tmp = page;
+    page = page->next;
+    for (p = objects(tmp), e=p+MRB_HEAP_PAGE_SIZE; p<e; p++) {
+      if (p->as.free.tt != MRB_TT_FREE)
+        obj_free(mrb, &p->as.basic, TRUE);
+    }
+    mrb_free(mrb, tmp);
+  }
+}
+
+void
+mrb_gc_destroy(mrb_state *mrb, mrb_gc *gc)
+{
+  free_heap(mrb, gc);
+#ifndef MRB_GC_FIXED_ARENA
+  mrb_free(mrb, gc->arena);
+#endif
+}
+
+static void
+gc_protect(mrb_state *mrb, mrb_gc *gc, struct RBasic *p)
+{
+#ifdef MRB_GC_FIXED_ARENA
+  if (gc->arena_idx >= MRB_GC_ARENA_SIZE) {
+    /* arena overflow error */
+    gc->arena_idx = MRB_GC_ARENA_SIZE - 4; /* force room in arena */
+    mrb_exc_raise(mrb, mrb_obj_value(mrb->arena_err));
+  }
+#else
+  if (gc->arena_idx >= gc->arena_capa) {
+    /* extend arena */
+    gc->arena_capa = (int)(gc->arena_capa * 3 / 2);
+    gc->arena = (struct RBasic**)mrb_realloc(mrb, gc->arena, sizeof(struct RBasic*)*gc->arena_capa);
+  }
+#endif
+  gc->arena[gc->arena_idx++] = p;
+}
+
+/* mrb_gc_protect() leaves the object in the arena */
+MRB_API void
+mrb_gc_protect(mrb_state *mrb, mrb_value obj)
+{
+  if (mrb_immediate_p(obj)) return;
+  gc_protect(mrb, &mrb->gc, mrb_basic_ptr(obj));
+}
+
+#define GC_ROOT_NAME "_gc_root_"
+
+/* mrb_gc_register() keeps the object from GC.
+
+   Register your object when it's exported to C world,
+   without reference from Ruby world, e.g. callback
+   arguments.  Don't forget to remove the object using
+   mrb_gc_unregister, otherwise your object will leak.
+*/
+
+MRB_API void
+mrb_gc_register(mrb_state *mrb, mrb_value obj)
+{
+  mrb_sym root;
+  mrb_value table;
+
+  if (mrb_immediate_p(obj)) return;
+  root = mrb_intern_lit(mrb, GC_ROOT_NAME);
+  table = mrb_gv_get(mrb, root);
+  if (mrb_nil_p(table) || !mrb_array_p(table)) {
+    table = mrb_ary_new(mrb);
+    mrb_gv_set(mrb, root, table);
+  }
+  mrb_ary_push(mrb, table, obj);
+}
+
+/* mrb_gc_unregister() removes the object from GC root. */
+MRB_API void
+mrb_gc_unregister(mrb_state *mrb, mrb_value obj)
+{
+  mrb_sym root;
+  mrb_value table;
+  struct RArray *a;
+  mrb_int i;
+
+  if (mrb_immediate_p(obj)) return;
+  root = mrb_intern_lit(mrb, GC_ROOT_NAME);
+  table = mrb_gv_get(mrb, root);
+  if (mrb_nil_p(table)) return;
+  if (!mrb_array_p(table)) {
+    mrb_gv_set(mrb, root, mrb_nil_value());
+    return;
+  }
+  a = mrb_ary_ptr(table);
+  mrb_ary_modify(mrb, a);
+  for (i = 0; i < ARY_LEN(a); i++) {
+    if (mrb_ptr(ARY_PTR(a)[i]) == mrb_ptr(obj)) {
+      mrb_int len = ARY_LEN(a)-1;
+      mrb_value *ptr = ARY_PTR(a);
+
+      ARY_SET_LEN(a, len);
+      memmove(&ptr[i], &ptr[i + 1], (len - i) * sizeof(mrb_value));
+      break;
+    }
+  }
+}
+
+MRB_API struct RBasic*
+mrb_obj_alloc(mrb_state *mrb, enum mrb_vtype ttype, struct RClass *cls)
+{
+  struct RBasic *p;
+  static const RVALUE RVALUE_zero = { { { NULL, NULL, MRB_TT_FALSE } } };
+  mrb_gc *gc = &mrb->gc;
+
+  if (cls) {
+    enum mrb_vtype tt;
+
+    switch (cls->tt) {
+    case MRB_TT_CLASS:
+    case MRB_TT_SCLASS:
+    case MRB_TT_MODULE:
+    case MRB_TT_ENV:
+      break;
+    default:
+      mrb_raise(mrb, E_TYPE_ERROR, "allocation failure");
+    }
+    tt = MRB_INSTANCE_TT(cls);
+    if (tt != MRB_TT_FALSE &&
+        ttype != MRB_TT_SCLASS &&
+        ttype != MRB_TT_ICLASS &&
+        ttype != MRB_TT_ENV &&
+        ttype != tt) {
+      mrb_raisef(mrb, E_TYPE_ERROR, "allocation failure of %C", cls);
+    }
+  }
+
+#ifdef MRB_GC_STRESS
+  mrb_full_gc(mrb);
+#endif
+  if (gc->threshold < gc->live) {
+    mrb_incremental_gc(mrb);
+  }
+  if (gc->free_heaps == NULL) {
+    add_heap(mrb, gc);
+  }
+
+  p = gc->free_heaps->freelist;
+  gc->free_heaps->freelist = ((struct free_obj*)p)->next;
+  if (gc->free_heaps->freelist == NULL) {
+    unlink_free_heap_page(gc, gc->free_heaps);
+  }
+
+  gc->live++;
+  gc_protect(mrb, gc, p);
+  *(RVALUE *)p = RVALUE_zero;
+  p->tt = ttype;
+  p->c = cls;
+  paint_partial_white(gc, p);
+  return p;
+}
+
+static inline void
+add_gray_list(mrb_state *mrb, mrb_gc *gc, struct RBasic *obj)
+{
+#ifdef MRB_GC_STRESS
+  if (obj->tt > MRB_TT_MAXDEFINE) {
+    abort();
+  }
+#endif
+  paint_gray(obj);
+  obj->gcnext = gc->gray_list;
+  gc->gray_list = obj;
+}
+
+static int
+ci_nregs(mrb_callinfo *ci)
+{
+  struct RProc *p = ci->proc;
+  int n = 0;
+
+  if (!p) {
+    if (ci->argc < 0) return 3;
+    return ci->argc+2;
+  }
+  if (!MRB_PROC_CFUNC_P(p) && p->body.irep) {
+    n = p->body.irep->nregs;
+  }
+  if (ci->argc < 0) {
+    if (n < 3) n = 3; /* self + args + blk */
+  }
+  if (ci->argc > n) {
+    n = ci->argc + 2; /* self + blk */
+  }
+  return n;
+}
+
+static void
+mark_context_stack(mrb_state *mrb, struct mrb_context *c)
+{
+  size_t i;
+  size_t e;
+  mrb_value nil;
+
+  if (c->stack == NULL) return;
+  e = c->stack - c->stbase;
+  if (c->ci) {
+    e += ci_nregs(c->ci);
+  }
+  if (c->stbase + e > c->stend) e = c->stend - c->stbase;
+  for (i=0; i<e; i++) {
+    mrb_value v = c->stbase[i];
+
+    if (!mrb_immediate_p(v)) {
+      mrb_gc_mark(mrb, mrb_basic_ptr(v));
+    }
+  }
+  e = c->stend - c->stbase;
+  nil = mrb_nil_value();
+  for (; i<e; i++) {
+    c->stbase[i] = nil;
+  }
+}
+
+static void
+mark_context(mrb_state *mrb, struct mrb_context *c)
+{
+  int i;
+  mrb_callinfo *ci;
+
+ start:
+  if (c->status == MRB_FIBER_TERMINATED) return;
+
+  /* mark VM stack */
+  mark_context_stack(mrb, c);
+
+  /* mark call stack */
+  if (c->cibase) {
+    for (ci = c->cibase; ci <= c->ci; ci++) {
+      mrb_gc_mark(mrb, (struct RBasic*)ci->env);
+      mrb_gc_mark(mrb, (struct RBasic*)ci->proc);
+      mrb_gc_mark(mrb, (struct RBasic*)ci->target_class);
+    }
+  }
+  /* mark ensure stack */
+  for (i=0; i<c->eidx; i++) {
+    mrb_gc_mark(mrb, (struct RBasic*)c->ensure[i]);
+  }
+  /* mark fibers */
+  mrb_gc_mark(mrb, (struct RBasic*)c->fib);
+  if (c->prev) {
+    c = c->prev;
+    goto start;
+  }
+}
+
+static void
+gc_mark_children(mrb_state *mrb, mrb_gc *gc, struct RBasic *obj)
+{
+  mrb_assert(is_gray(obj));
+  paint_black(obj);
+  gc->gray_list = obj->gcnext;
+  mrb_gc_mark(mrb, (struct RBasic*)obj->c);
+  switch (obj->tt) {
+  case MRB_TT_ICLASS:
+    {
+      struct RClass *c = (struct RClass*)obj;
+      if (MRB_FLAG_TEST(c, MRB_FL_CLASS_IS_ORIGIN))
+        mrb_gc_mark_mt(mrb, c);
+      mrb_gc_mark(mrb, (struct RBasic*)((struct RClass*)obj)->super);
+    }
+    break;
+
+  case MRB_TT_CLASS:
+  case MRB_TT_MODULE:
+  case MRB_TT_SCLASS:
+    {
+      struct RClass *c = (struct RClass*)obj;
+
+      mrb_gc_mark_mt(mrb, c);
+      mrb_gc_mark(mrb, (struct RBasic*)c->super);
+    }
+    /* fall through */
+
+  case MRB_TT_OBJECT:
+  case MRB_TT_DATA:
+  case MRB_TT_EXCEPTION:
+    mrb_gc_mark_iv(mrb, (struct RObject*)obj);
+    break;
+
+  case MRB_TT_PROC:
+    {
+      struct RProc *p = (struct RProc*)obj;
+
+      mrb_gc_mark(mrb, (struct RBasic*)p->upper);
+      mrb_gc_mark(mrb, (struct RBasic*)p->e.env);
+    }
+    break;
+
+  case MRB_TT_ENV:
+    {
+      struct REnv *e = (struct REnv*)obj;
+      mrb_int i, len;
+
+      if (MRB_ENV_STACK_SHARED_P(e) && e->cxt && e->cxt->fib) {
+        mrb_gc_mark(mrb, (struct RBasic*)e->cxt->fib);
+      }
+      len = MRB_ENV_STACK_LEN(e);
+      for (i=0; i<len; i++) {
+        mrb_gc_mark_value(mrb, e->stack[i]);
+      }
+    }
+    break;
+
+  case MRB_TT_FIBER:
+    {
+      struct mrb_context *c = ((struct RFiber*)obj)->cxt;
+
+      if (c) mark_context(mrb, c);
+    }
+    break;
+
+  case MRB_TT_ARRAY:
+    {
+      struct RArray *a = (struct RArray*)obj;
+      size_t i, e;
+
+      for (i=0,e=ARY_LEN(a); i<e; i++) {
+        mrb_gc_mark_value(mrb, ARY_PTR(a)[i]);
+      }
+    }
+    break;
+
+  case MRB_TT_HASH:
+    mrb_gc_mark_iv(mrb, (struct RObject*)obj);
+    mrb_gc_mark_hash(mrb, (struct RHash*)obj);
+    break;
+
+  case MRB_TT_STRING:
+    if (RSTR_FSHARED_P(obj)) {
+      struct RString *s = (struct RString*)obj;
+      mrb_gc_mark(mrb, (struct RBasic*)s->as.heap.aux.fshared);
+    }
+    break;
+
+  case MRB_TT_RANGE:
+    mrb_gc_mark_range(mrb, (struct RRange*)obj);
+    break;
+
+  default:
+    break;
+  }
+}
+
+MRB_API void
+mrb_gc_mark(mrb_state *mrb, struct RBasic *obj)
+{
+  if (obj == 0) return;
+  if (!is_white(obj)) return;
+  mrb_assert((obj)->tt != MRB_TT_FREE);
+  add_gray_list(mrb, &mrb->gc, obj);
+}
+
+static void
+obj_free(mrb_state *mrb, struct RBasic *obj, int end)
+{
+  DEBUG(fprintf(stderr, "obj_free(%p,tt=%d)\n",obj,obj->tt));
+  switch (obj->tt) {
+    /* immediate - no mark */
+  case MRB_TT_TRUE:
+  case MRB_TT_FIXNUM:
+  case MRB_TT_SYMBOL:
+    /* cannot happen */
+    return;
+
+#ifndef MRB_WITHOUT_FLOAT
+  case MRB_TT_FLOAT:
+#ifdef MRB_WORD_BOXING
+    break;
+#else
+    return;
+#endif
+#endif
+
+  case MRB_TT_OBJECT:
+    mrb_gc_free_iv(mrb, (struct RObject*)obj);
+    break;
+
+  case MRB_TT_EXCEPTION:
+    mrb_gc_free_iv(mrb, (struct RObject*)obj);
+    break;
+
+  case MRB_TT_CLASS:
+  case MRB_TT_MODULE:
+  case MRB_TT_SCLASS:
+    mrb_gc_free_mt(mrb, (struct RClass*)obj);
+    mrb_gc_free_iv(mrb, (struct RObject*)obj);
+    mrb_mc_clear_by_class(mrb, (struct RClass*)obj);
+    break;
+  case MRB_TT_ICLASS:
+    if (MRB_FLAG_TEST(obj, MRB_FL_CLASS_IS_ORIGIN))
+      mrb_gc_free_mt(mrb, (struct RClass*)obj);
+    mrb_mc_clear_by_class(mrb, (struct RClass*)obj);
+    break;
+  case MRB_TT_ENV:
+    {
+      struct REnv *e = (struct REnv*)obj;
+
+      if (MRB_ENV_STACK_SHARED_P(e)) {
+        /* cannot be freed */
+        e->stack = NULL;
+        break;
+      }
+      mrb_free(mrb, e->stack);
+      e->stack = NULL;
+    }
+    break;
+
+  case MRB_TT_FIBER:
+    {
+      struct mrb_context *c = ((struct RFiber*)obj)->cxt;
+
+      if (c && c != mrb->root_c) {
+        if (!end && c->status != MRB_FIBER_TERMINATED) {
+          mrb_callinfo *ci = c->ci;
+          mrb_callinfo *ce = c->cibase;
+
+          while (ce <= ci) {
+            struct REnv *e = ci->env;
+            if (e && !mrb_object_dead_p(mrb, (struct RBasic*)e) &&
+                e->tt == MRB_TT_ENV && MRB_ENV_STACK_SHARED_P(e)) {
+              mrb_env_unshare(mrb, e);
+            }
+            ci--;
+          }
+        }
+        mrb_free_context(mrb, c);
+      }
+    }
+    break;
+
+  case MRB_TT_ARRAY:
+    if (ARY_SHARED_P(obj))
+      mrb_ary_decref(mrb, ((struct RArray*)obj)->as.heap.aux.shared);
+    else if (!ARY_EMBED_P(obj))
+      mrb_free(mrb, ((struct RArray*)obj)->as.heap.ptr);
+    break;
+
+  case MRB_TT_HASH:
+    mrb_gc_free_iv(mrb, (struct RObject*)obj);
+    mrb_gc_free_hash(mrb, (struct RHash*)obj);
+    break;
+
+  case MRB_TT_STRING:
+    mrb_gc_free_str(mrb, (struct RString*)obj);
+    break;
+
+  case MRB_TT_PROC:
+    {
+      struct RProc *p = (struct RProc*)obj;
+
+      if (!MRB_PROC_CFUNC_P(p) && p->body.irep) {
+        mrb_irep *irep = p->body.irep;
+        if (end) {
+          mrb_irep_cutref(mrb, irep);
+        }
+        mrb_irep_decref(mrb, irep);
+      }
+    }
+    break;
+
+  case MRB_TT_RANGE:
+    mrb_gc_free_range(mrb, ((struct RRange*)obj));
+    break;
+
+  case MRB_TT_DATA:
+    {
+      struct RData *d = (struct RData*)obj;
+      if (d->type && d->type->dfree) {
+        d->type->dfree(mrb, d->data);
+      }
+      mrb_gc_free_iv(mrb, (struct RObject*)obj);
+    }
+    break;
+
+  default:
+    break;
+  }
+  obj->tt = MRB_TT_FREE;
+}
+
+static void
+root_scan_phase(mrb_state *mrb, mrb_gc *gc)
+{
+  int i, e;
+
+  if (!is_minor_gc(gc)) {
+    gc->gray_list = NULL;
+    gc->atomic_gray_list = NULL;
+  }
+
+  mrb_gc_mark_gv(mrb);
+  /* mark arena */
+  for (i=0,e=gc->arena_idx; i<e; i++) {
+    mrb_gc_mark(mrb, gc->arena[i]);
+  }
+  /* mark class hierarchy */
+  mrb_gc_mark(mrb, (struct RBasic*)mrb->object_class);
+
+  /* mark built-in classes */
+  mrb_gc_mark(mrb, (struct RBasic*)mrb->class_class);
+  mrb_gc_mark(mrb, (struct RBasic*)mrb->module_class);
+  mrb_gc_mark(mrb, (struct RBasic*)mrb->proc_class);
+  mrb_gc_mark(mrb, (struct RBasic*)mrb->string_class);
+  mrb_gc_mark(mrb, (struct RBasic*)mrb->array_class);
+  mrb_gc_mark(mrb, (struct RBasic*)mrb->hash_class);
+  mrb_gc_mark(mrb, (struct RBasic*)mrb->range_class);
+
+#ifndef MRB_WITHOUT_FLOAT
+  mrb_gc_mark(mrb, (struct RBasic*)mrb->float_class);
+#endif
+  mrb_gc_mark(mrb, (struct RBasic*)mrb->fixnum_class);
+  mrb_gc_mark(mrb, (struct RBasic*)mrb->true_class);
+  mrb_gc_mark(mrb, (struct RBasic*)mrb->false_class);
+  mrb_gc_mark(mrb, (struct RBasic*)mrb->nil_class);
+  mrb_gc_mark(mrb, (struct RBasic*)mrb->symbol_class);
+  mrb_gc_mark(mrb, (struct RBasic*)mrb->kernel_module);
+
+  mrb_gc_mark(mrb, (struct RBasic*)mrb->eException_class);
+  mrb_gc_mark(mrb, (struct RBasic*)mrb->eStandardError_class);
+
+  /* mark top_self */
+  mrb_gc_mark(mrb, (struct RBasic*)mrb->top_self);
+  /* mark exception */
+  mrb_gc_mark(mrb, (struct RBasic*)mrb->exc);
+  /* mark pre-allocated exception */
+  mrb_gc_mark(mrb, (struct RBasic*)mrb->nomem_err);
+  mrb_gc_mark(mrb, (struct RBasic*)mrb->stack_err);
+#ifdef MRB_GC_FIXED_ARENA
+  mrb_gc_mark(mrb, (struct RBasic*)mrb->arena_err);
+#endif
+
+  mark_context(mrb, mrb->c);
+  if (mrb->root_c != mrb->c) {
+    mark_context(mrb, mrb->root_c);
+  }
+}
+
+static size_t
+gc_gray_mark(mrb_state *mrb, mrb_gc *gc, struct RBasic *obj)
+{
+  size_t children = 0;
+
+  gc_mark_children(mrb, gc, obj);
+
+  switch (obj->tt) {
+  case MRB_TT_ICLASS:
+    children++;
+    break;
+
+  case MRB_TT_CLASS:
+  case MRB_TT_SCLASS:
+  case MRB_TT_MODULE:
+    {
+      struct RClass *c = (struct RClass*)obj;
+
+      children += mrb_gc_mark_iv_size(mrb, (struct RObject*)obj);
+      children += mrb_gc_mark_mt_size(mrb, c);
+      children++;
+    }
+    break;
+
+  case MRB_TT_OBJECT:
+  case MRB_TT_DATA:
+  case MRB_TT_EXCEPTION:
+    children += mrb_gc_mark_iv_size(mrb, (struct RObject*)obj);
+    break;
+
+  case MRB_TT_ENV:
+    children += MRB_ENV_STACK_LEN(obj);
+    break;
+
+  case MRB_TT_FIBER:
+    {
+      struct mrb_context *c = ((struct RFiber*)obj)->cxt;
+      size_t i;
+      mrb_callinfo *ci;
+
+      if (!c || c->status == MRB_FIBER_TERMINATED) break;
+
+      /* mark stack */
+      i = c->stack - c->stbase;
+
+      if (c->ci) {
+        i += ci_nregs(c->ci);
+      }
+      if (c->stbase + i > c->stend) i = c->stend - c->stbase;
+      children += i;
+
+      /* mark ensure stack */
+      children += c->eidx;
+
+      /* mark closure */
+      if (c->cibase) {
+        for (i=0, ci = c->cibase; ci <= c->ci; i++, ci++)
+          ;
+      }
+      children += i;
+    }
+    break;
+
+  case MRB_TT_ARRAY:
+    {
+      struct RArray *a = (struct RArray*)obj;
+      children += ARY_LEN(a);
+    }
+    break;
+
+  case MRB_TT_HASH:
+    children += mrb_gc_mark_iv_size(mrb, (struct RObject*)obj);
+    children += mrb_gc_mark_hash_size(mrb, (struct RHash*)obj);
+    break;
+
+  case MRB_TT_PROC:
+  case MRB_TT_RANGE:
+    children+=2;
+    break;
+
+  default:
+    break;
+  }
+  return children;
+}
+
+
+static void
+gc_mark_gray_list(mrb_state *mrb, mrb_gc *gc) {
+  while (gc->gray_list) {
+    if (is_gray(gc->gray_list))
+      gc_mark_children(mrb, gc, gc->gray_list);
+    else
+      gc->gray_list = gc->gray_list->gcnext;
+  }
+}
+
+
+static size_t
+incremental_marking_phase(mrb_state *mrb, mrb_gc *gc, size_t limit)
+{
+  size_t tried_marks = 0;
+
+  while (gc->gray_list && tried_marks < limit) {
+    tried_marks += gc_gray_mark(mrb, gc, gc->gray_list);
+  }
+
+  return tried_marks;
+}
+
+static void
+final_marking_phase(mrb_state *mrb, mrb_gc *gc)
+{
+  int i, e;
+
+  /* mark arena */
+  for (i=0,e=gc->arena_idx; i<e; i++) {
+    mrb_gc_mark(mrb, gc->arena[i]);
+  }
+  mrb_gc_mark_gv(mrb);
+  mark_context(mrb, mrb->c);
+  mark_context(mrb, mrb->root_c);
+  mrb_gc_mark(mrb, (struct RBasic*)mrb->exc);
+  gc_mark_gray_list(mrb, gc);
+  mrb_assert(gc->gray_list == NULL);
+  gc->gray_list = gc->atomic_gray_list;
+  gc->atomic_gray_list = NULL;
+  gc_mark_gray_list(mrb, gc);
+  mrb_assert(gc->gray_list == NULL);
+}
+
+static void
+prepare_incremental_sweep(mrb_state *mrb, mrb_gc *gc)
+{
+  gc->state = MRB_GC_STATE_SWEEP;
+  gc->sweeps = gc->heaps;
+  gc->live_after_mark = gc->live;
+}
+
+static size_t
+incremental_sweep_phase(mrb_state *mrb, mrb_gc *gc, size_t limit)
+{
+  mrb_heap_page *page = gc->sweeps;
+  size_t tried_sweep = 0;
+
+  while (page && (tried_sweep < limit)) {
+    RVALUE *p = objects(page);
+    RVALUE *e = p + MRB_HEAP_PAGE_SIZE;
+    size_t freed = 0;
+    mrb_bool dead_slot = TRUE;
+    mrb_bool full = (page->freelist == NULL);
+
+    if (is_minor_gc(gc) && page->old) {
+      /* skip a slot which doesn't contain any young object */
+      p = e;
+      dead_slot = FALSE;
+    }
+    while (p<e) {
+      if (is_dead(gc, &p->as.basic)) {
+        if (p->as.basic.tt != MRB_TT_FREE) {
+          obj_free(mrb, &p->as.basic, FALSE);
+          if (p->as.basic.tt == MRB_TT_FREE) {
+            p->as.free.next = page->freelist;
+            page->freelist = (struct RBasic*)p;
+            freed++;
+          }
+          else {
+            dead_slot = FALSE;
+          }
+        }
+      }
+      else {
+        if (!is_generational(gc))
+          paint_partial_white(gc, &p->as.basic); /* next gc target */
+        dead_slot = FALSE;
+      }
+      p++;
+    }
+
+    /* free dead slot */
+    if (dead_slot && freed < MRB_HEAP_PAGE_SIZE) {
+      mrb_heap_page *next = page->next;
+
+      unlink_heap_page(gc, page);
+      unlink_free_heap_page(gc, page);
+      mrb_free(mrb, page);
+      page = next;
+    }
+    else {
+      if (full && freed > 0) {
+        link_free_heap_page(gc, page);
+      }
+      if (page->freelist == NULL && is_minor_gc(gc))
+        page->old = TRUE;
+      else
+        page->old = FALSE;
+      page = page->next;
+    }
+    tried_sweep += MRB_HEAP_PAGE_SIZE;
+    gc->live -= freed;
+    gc->live_after_mark -= freed;
+  }
+  gc->sweeps = page;
+  return tried_sweep;
+}
+
+static size_t
+incremental_gc(mrb_state *mrb, mrb_gc *gc, size_t limit)
+{
+  switch (gc->state) {
+  case MRB_GC_STATE_ROOT:
+    root_scan_phase(mrb, gc);
+    gc->state = MRB_GC_STATE_MARK;
+    flip_white_part(gc);
+    return 0;
+  case MRB_GC_STATE_MARK:
+    if (gc->gray_list) {
+      return incremental_marking_phase(mrb, gc, limit);
+    }
+    else {
+      final_marking_phase(mrb, gc);
+      prepare_incremental_sweep(mrb, gc);
+      return 0;
+    }
+  case MRB_GC_STATE_SWEEP: {
+     size_t tried_sweep = 0;
+     tried_sweep = incremental_sweep_phase(mrb, gc, limit);
+     if (tried_sweep == 0)
+       gc->state = MRB_GC_STATE_ROOT;
+     return tried_sweep;
+  }
+  default:
+    /* unknown state */
+    mrb_assert(0);
+    return 0;
+  }
+}
+
+static void
+incremental_gc_until(mrb_state *mrb, mrb_gc *gc, mrb_gc_state to_state)
+{
+  do {
+    incremental_gc(mrb, gc, SIZE_MAX);
+  } while (gc->state != to_state);
+}
+
+static void
+incremental_gc_step(mrb_state *mrb, mrb_gc *gc)
+{
+  size_t limit = 0, result = 0;
+  limit = (GC_STEP_SIZE/100) * gc->step_ratio;
+  while (result < limit) {
+    result += incremental_gc(mrb, gc, limit);
+    if (gc->state == MRB_GC_STATE_ROOT)
+      break;
+  }
+
+  gc->threshold = gc->live + GC_STEP_SIZE;
+}
+
+static void
+clear_all_old(mrb_state *mrb, mrb_gc *gc)
+{
+  mrb_bool origin_mode = gc->generational;
+
+  mrb_assert(is_generational(gc));
+  if (is_major_gc(gc)) {
+    /* finish the half baked GC */
+    incremental_gc_until(mrb, gc, MRB_GC_STATE_ROOT);
+  }
+
+  /* Sweep the dead objects, then reset all the live objects
+   * (including all the old objects, of course) to white. */
+  gc->generational = FALSE;
+  prepare_incremental_sweep(mrb, gc);
+  incremental_gc_until(mrb, gc, MRB_GC_STATE_ROOT);
+  gc->generational = origin_mode;
+
+  /* The gray objects have already been painted as white */
+  gc->atomic_gray_list = gc->gray_list = NULL;
+}
+
+MRB_API void
+mrb_incremental_gc(mrb_state *mrb)
+{
+  mrb_gc *gc = &mrb->gc;
+
+  if (gc->disabled || gc->iterating) return;
+
+  GC_INVOKE_TIME_REPORT("mrb_incremental_gc()");
+  GC_TIME_START;
+
+  if (is_minor_gc(gc)) {
+    incremental_gc_until(mrb, gc, MRB_GC_STATE_ROOT);
+  }
+  else {
+    incremental_gc_step(mrb, gc);
+  }
+
+  if (gc->state == MRB_GC_STATE_ROOT) {
+    mrb_assert(gc->live >= gc->live_after_mark);
+    gc->threshold = (gc->live_after_mark/100) * gc->interval_ratio;
+    if (gc->threshold < GC_STEP_SIZE) {
+      gc->threshold = GC_STEP_SIZE;
+    }
+
+    if (is_major_gc(gc)) {
+      size_t threshold = gc->live_after_mark/100 * MAJOR_GC_INC_RATIO;
+
+      gc->full = FALSE;
+      if (threshold < MAJOR_GC_TOOMANY) {
+        gc->majorgc_old_threshold = threshold;
+      }
+      else {
+        /* too many objects allocated during incremental GC, */
+        /* instead of increasing threshold, invoke full GC. */
+        mrb_full_gc(mrb);
+      }
+    }
+    else if (is_minor_gc(gc)) {
+      if (gc->live > gc->majorgc_old_threshold) {
+        clear_all_old(mrb, gc);
+        gc->full = TRUE;
+      }
+    }
+  }
+
+  GC_TIME_STOP_AND_REPORT;
+}
+
+/* Perform a full gc cycle */
+MRB_API void
+mrb_full_gc(mrb_state *mrb)
+{
+  mrb_gc *gc = &mrb->gc;
+
+  if (gc->disabled || gc->iterating) return;
+
+  GC_INVOKE_TIME_REPORT("mrb_full_gc()");
+  GC_TIME_START;
+
+  if (is_generational(gc)) {
+    /* clear all the old objects back to young */
+    clear_all_old(mrb, gc);
+    gc->full = TRUE;
+  }
+  else if (gc->state != MRB_GC_STATE_ROOT) {
+    /* finish half baked GC cycle */
+    incremental_gc_until(mrb, gc, MRB_GC_STATE_ROOT);
+  }
+
+  incremental_gc_until(mrb, gc, MRB_GC_STATE_ROOT);
+  gc->threshold = (gc->live_after_mark/100) * gc->interval_ratio;
+
+  if (is_generational(gc)) {
+    gc->majorgc_old_threshold = gc->live_after_mark/100 * MAJOR_GC_INC_RATIO;
+    gc->full = FALSE;
+  }
+
+  GC_TIME_STOP_AND_REPORT;
+}
+
+MRB_API void
+mrb_garbage_collect(mrb_state *mrb)
+{
+  mrb_full_gc(mrb);
+}
+
+/*
+ * Field write barrier
+ *   Paint obj(Black) -> value(White) to obj(Black) -> value(Gray).
+ */
+
+MRB_API void
+mrb_field_write_barrier(mrb_state *mrb, struct RBasic *obj, struct RBasic *value)
+{
+  mrb_gc *gc = &mrb->gc;
+
+  if (!is_black(obj)) return;
+  if (!is_white(value)) return;
+
+  mrb_assert(gc->state == MRB_GC_STATE_MARK || (!is_dead(gc, value) && !is_dead(gc, obj)));
+  mrb_assert(is_generational(gc) || gc->state != MRB_GC_STATE_ROOT);
+
+  if (is_generational(gc) || gc->state == MRB_GC_STATE_MARK) {
+    add_gray_list(mrb, gc, value);
+  }
+  else {
+    mrb_assert(gc->state == MRB_GC_STATE_SWEEP);
+    paint_partial_white(gc, obj); /* for never write barriers */
+  }
+}
+
+/*
+ * Write barrier
+ *   Paint obj(Black) to obj(Gray).
+ *
+ *   The object that is painted gray will be traversed atomically in final
+ *   mark phase. So you use this write barrier if it's frequency written spot.
+ *   e.g. Set element on Array.
+ */
+
+MRB_API void
+mrb_write_barrier(mrb_state *mrb, struct RBasic *obj)
+{
+  mrb_gc *gc = &mrb->gc;
+
+  if (!is_black(obj)) return;
+
+  mrb_assert(!is_dead(gc, obj));
+  mrb_assert(is_generational(gc) || gc->state != MRB_GC_STATE_ROOT);
+  paint_gray(obj);
+  obj->gcnext = gc->atomic_gray_list;
+  gc->atomic_gray_list = obj;
+}
+
+/*
+ *  call-seq:
+ *     GC.start                     -> nil
+ *
+ *  Initiates full garbage collection.
+ *
+ */
+
+static mrb_value
+gc_start(mrb_state *mrb, mrb_value obj)
+{
+  mrb_full_gc(mrb);
+  return mrb_nil_value();
+}
+
+/*
+ *  call-seq:
+ *     GC.enable    -> true or false
+ *
+ *  Enables garbage collection, returning <code>true</code> if garbage
+ *  collection was previously disabled.
+ *
+ *     GC.disable   #=> false
+ *     GC.enable    #=> true
+ *     GC.enable    #=> false
+ *
+ */
+
+static mrb_value
+gc_enable(mrb_state *mrb, mrb_value obj)
+{
+  mrb_bool old = mrb->gc.disabled;
+
+  mrb->gc.disabled = FALSE;
+
+  return mrb_bool_value(old);
+}
+
+/*
+ *  call-seq:
+ *     GC.disable    -> true or false
+ *
+ *  Disables garbage collection, returning <code>true</code> if garbage
+ *  collection was already disabled.
+ *
+ *     GC.disable   #=> false
+ *     GC.disable   #=> true
+ *
+ */
+
+static mrb_value
+gc_disable(mrb_state *mrb, mrb_value obj)
+{
+  mrb_bool old = mrb->gc.disabled;
+
+  mrb->gc.disabled = TRUE;
+
+  return mrb_bool_value(old);
+}
+
+/*
+ *  call-seq:
+ *     GC.interval_ratio      -> fixnum
+ *
+ *  Returns ratio of GC interval. Default value is 200(%).
+ *
+ */
+
+static mrb_value
+gc_interval_ratio_get(mrb_state *mrb, mrb_value obj)
+{
+  return mrb_fixnum_value(mrb->gc.interval_ratio);
+}
+
+/*
+ *  call-seq:
+ *     GC.interval_ratio = fixnum    -> nil
+ *
+ *  Updates ratio of GC interval. Default value is 200(%).
+ *  GC start as soon as after end all step of GC if you set 100(%).
+ *
+ */
+
+static mrb_value
+gc_interval_ratio_set(mrb_state *mrb, mrb_value obj)
+{
+  mrb_int ratio;
+
+  mrb_get_args(mrb, "i", &ratio);
+  mrb->gc.interval_ratio = (int)ratio;
+  return mrb_nil_value();
+}
+
+/*
+ *  call-seq:
+ *     GC.step_ratio    -> fixnum
+ *
+ *  Returns step span ratio of Incremental GC. Default value is 200(%).
+ *
+ */
+
+static mrb_value
+gc_step_ratio_get(mrb_state *mrb, mrb_value obj)
+{
+  return mrb_fixnum_value(mrb->gc.step_ratio);
+}
+
+/*
+ *  call-seq:
+ *     GC.step_ratio = fixnum   -> nil
+ *
+ *  Updates step span ratio of Incremental GC. Default value is 200(%).
+ *  1 step of incrementalGC becomes long if a rate is big.
+ *
+ */
+
+static mrb_value
+gc_step_ratio_set(mrb_state *mrb, mrb_value obj)
+{
+  mrb_int ratio;
+
+  mrb_get_args(mrb, "i", &ratio);
+  mrb->gc.step_ratio = (int)ratio;
+  return mrb_nil_value();
+}
+
+static void
+change_gen_gc_mode(mrb_state *mrb, mrb_gc *gc, mrb_bool enable)
+{
+  if (gc->disabled || gc->iterating) {
+    mrb_raise(mrb, E_RUNTIME_ERROR, "generational mode changed when GC disabled");
+    return;
+  }
+  if (is_generational(gc) && !enable) {
+    clear_all_old(mrb, gc);
+    mrb_assert(gc->state == MRB_GC_STATE_ROOT);
+    gc->full = FALSE;
+  }
+  else if (!is_generational(gc) && enable) {
+    incremental_gc_until(mrb, gc, MRB_GC_STATE_ROOT);
+    gc->majorgc_old_threshold = gc->live_after_mark/100 * MAJOR_GC_INC_RATIO;
+    gc->full = FALSE;
+  }
+  gc->generational = enable;
+}
+
+/*
+ *  call-seq:
+ *     GC.generational_mode -> true or false
+ *
+ *  Returns generational or normal gc mode.
+ *
+ */
+
+static mrb_value
+gc_generational_mode_get(mrb_state *mrb, mrb_value self)
+{
+  return mrb_bool_value(mrb->gc.generational);
+}
+
+/*
+ *  call-seq:
+ *     GC.generational_mode = true or false -> true or false
+ *
+ *  Changes to generational or normal gc mode.
+ *
+ */
+
+static mrb_value
+gc_generational_mode_set(mrb_state *mrb, mrb_value self)
+{
+  mrb_bool enable;
+
+  mrb_get_args(mrb, "b", &enable);
+  if (mrb->gc.generational != enable)
+    change_gen_gc_mode(mrb, &mrb->gc, enable);
+
+  return mrb_bool_value(enable);
+}
+
+
+static void
+gc_each_objects(mrb_state *mrb, mrb_gc *gc, mrb_each_object_callback *callback, void *data)
+{
+  mrb_heap_page* page;
+
+  page = gc->heaps;
+  while (page != NULL) {
+    RVALUE *p;
+    int i;
+
+    p = objects(page);
+    for (i=0; i < MRB_HEAP_PAGE_SIZE; i++) {
+      if ((*callback)(mrb, &p[i].as.basic, data) == MRB_EACH_OBJ_BREAK)
+        return;
+    }
+    page = page->next;
+  }
+}
+
+void
+mrb_objspace_each_objects(mrb_state *mrb, mrb_each_object_callback *callback, void *data)
+{
+  mrb_bool iterating = mrb->gc.iterating;
+
+  mrb_full_gc(mrb);
+  mrb->gc.iterating = TRUE;
+  if (iterating) {
+    gc_each_objects(mrb, &mrb->gc, callback, data);
+  }
+  else {
+    struct mrb_jmpbuf *prev_jmp = mrb->jmp;
+    struct mrb_jmpbuf c_jmp;
+
+    MRB_TRY(&c_jmp) {
+      mrb->jmp = &c_jmp;
+      gc_each_objects(mrb, &mrb->gc, callback, data);
+      mrb->jmp = prev_jmp;
+      mrb->gc.iterating = iterating;
+   } MRB_CATCH(&c_jmp) {
+      mrb->gc.iterating = iterating;
+      mrb->jmp = prev_jmp;
+      MRB_THROW(prev_jmp);
+    } MRB_END_EXC(&c_jmp);
+  }
+}
+
+#ifdef GC_TEST
+#ifdef GC_DEBUG
+static mrb_value gc_test(mrb_state *, mrb_value);
+#endif
+#endif
+
+void
+mrb_init_gc(mrb_state *mrb)
+{
+  struct RClass *gc;
+
+  mrb_static_assert(sizeof(RVALUE) <= sizeof(void*) * 6,
+                    "RVALUE size must be within 6 words");
+
+  gc = mrb_define_module(mrb, "GC");
+
+  mrb_define_class_method(mrb, gc, "start", gc_start, MRB_ARGS_NONE());
+  mrb_define_class_method(mrb, gc, "enable", gc_enable, MRB_ARGS_NONE());
+  mrb_define_class_method(mrb, gc, "disable", gc_disable, MRB_ARGS_NONE());
+  mrb_define_class_method(mrb, gc, "interval_ratio", gc_interval_ratio_get, MRB_ARGS_NONE());
+  mrb_define_class_method(mrb, gc, "interval_ratio=", gc_interval_ratio_set, MRB_ARGS_REQ(1));
+  mrb_define_class_method(mrb, gc, "step_ratio", gc_step_ratio_get, MRB_ARGS_NONE());
+  mrb_define_class_method(mrb, gc, "step_ratio=", gc_step_ratio_set, MRB_ARGS_REQ(1));
+  mrb_define_class_method(mrb, gc, "generational_mode=", gc_generational_mode_set, MRB_ARGS_REQ(1));
+  mrb_define_class_method(mrb, gc, "generational_mode", gc_generational_mode_get, MRB_ARGS_NONE());
+#ifdef GC_TEST
+#ifdef GC_DEBUG
+  mrb_define_class_method(mrb, gc, "test", gc_test, MRB_ARGS_NONE());
+#endif
+#endif
+}
+
+#ifdef GC_TEST
+#ifdef GC_DEBUG
+void
+test_mrb_field_write_barrier(void)
+{
+  mrb_state *mrb = mrb_open();
+  struct RBasic *obj, *value;
+  mrb_gc *gc = &mrb->gc;
+
+  puts("test_mrb_field_write_barrier");
+  gc->generational = FALSE;
+  obj = mrb_basic_ptr(mrb_ary_new(mrb));
+  value = mrb_basic_ptr(mrb_str_new_lit(mrb, "value"));
+  paint_black(obj);
+  paint_partial_white(gc, value);
+
+
+  puts("  in MRB_GC_STATE_MARK");
+  gc->state = MRB_GC_STATE_MARK;
+  mrb_field_write_barrier(mrb, obj, value);
+
+  mrb_assert(is_gray(value));
+
+
+  puts("  in MRB_GC_STATE_SWEEP");
+  paint_partial_white(gc, value);
+  gc->state = MRB_GC_STATE_SWEEP;
+  mrb_field_write_barrier(mrb, obj, value);
+
+  mrb_assert(obj->color & gc->current_white_part);
+  mrb_assert(value->color & gc->current_white_part);
+
+
+  puts("  fail with black");
+  gc->state = MRB_GC_STATE_MARK;
+  paint_white(obj);
+  paint_partial_white(gc, value);
+  mrb_field_write_barrier(mrb, obj, value);
+
+  mrb_assert(obj->color & gc->current_white_part);
+
+
+  puts("  fail with gray");
+  gc->state = MRB_GC_STATE_MARK;
+  paint_black(obj);
+  paint_gray(value);
+  mrb_field_write_barrier(mrb, obj, value);
+
+  mrb_assert(is_gray(value));
+
+
+  {
+    puts("test_mrb_field_write_barrier_value");
+    obj = mrb_basic_ptr(mrb_ary_new(mrb));
+    mrb_value value = mrb_str_new_lit(mrb, "value");
+    paint_black(obj);
+    paint_partial_white(gc, mrb_basic_ptr(value));
+
+    gc->state = MRB_GC_STATE_MARK;
+    mrb_field_write_barrier_value(mrb, obj, value);
+
+    mrb_assert(is_gray(mrb_basic_ptr(value)));
+  }
+
+  mrb_close(mrb);
+}
+
+void
+test_mrb_write_barrier(void)
+{
+  mrb_state *mrb = mrb_open();
+  struct RBasic *obj;
+  mrb_gc *gc = &mrb->gc;
+
+  puts("test_mrb_write_barrier");
+  obj = mrb_basic_ptr(mrb_ary_new(mrb));
+  paint_black(obj);
+
+  puts("  in MRB_GC_STATE_MARK");
+  gc->state = MRB_GC_STATE_MARK;
+  mrb_write_barrier(mrb, obj);
+
+  mrb_assert(is_gray(obj));
+  mrb_assert(gc->atomic_gray_list == obj);
+
+
+  puts("  fail with gray");
+  paint_gray(obj);
+  mrb_write_barrier(mrb, obj);
+
+  mrb_assert(is_gray(obj));
+
+  mrb_close(mrb);
+}
+
+void
+test_add_gray_list(void)
+{
+  mrb_state *mrb = mrb_open();
+  struct RBasic *obj1, *obj2;
+  mrb_gc *gc = &mrb->gc;
+
+  puts("test_add_gray_list");
+  change_gen_gc_mode(mrb, gc, FALSE);
+  mrb_assert(gc->gray_list == NULL);
+  obj1 = mrb_basic_ptr(mrb_str_new_lit(mrb, "test"));
+  add_gray_list(mrb, gc, obj1);
+  mrb_assert(gc->gray_list == obj1);
+  mrb_assert(is_gray(obj1));
+
+  obj2 = mrb_basic_ptr(mrb_str_new_lit(mrb, "test"));
+  add_gray_list(mrb, gc, obj2);
+  mrb_assert(gc->gray_list == obj2);
+  mrb_assert(gc->gray_list->gcnext == obj1);
+  mrb_assert(is_gray(obj2));
+
+  mrb_close(mrb);
+}
+
+void
+test_gc_gray_mark(void)
+{
+  mrb_state *mrb = mrb_open();
+  mrb_value obj_v, value_v;
+  struct RBasic *obj;
+  size_t gray_num = 0;
+  mrb_gc *gc = &mrb->gc;
+
+  puts("test_gc_gray_mark");
+
+  puts("  in MRB_TT_CLASS");
+  obj = (struct RBasic*)mrb->object_class;
+  paint_gray(obj);
+  gray_num = gc_gray_mark(mrb, gc, obj);
+  mrb_assert(is_black(obj));
+  mrb_assert(gray_num > 1);
+
+  puts("  in MRB_TT_ARRAY");
+  obj_v = mrb_ary_new(mrb);
+  value_v = mrb_str_new_lit(mrb, "test");
+  paint_gray(mrb_basic_ptr(obj_v));
+  paint_partial_white(gc, mrb_basic_ptr(value_v));
+  mrb_ary_push(mrb, obj_v, value_v);
+  gray_num = gc_gray_mark(mrb, gc, mrb_basic_ptr(obj_v));
+  mrb_assert(is_black(mrb_basic_ptr(obj_v)));
+  mrb_assert(is_gray(mrb_basic_ptr(value_v)));
+  mrb_assert(gray_num == 1);
+
+  mrb_close(mrb);
+}
+
+void
+test_incremental_gc(void)
+{
+  mrb_state *mrb = mrb_open();
+  size_t max = ~0, live = 0, total = 0, freed = 0;
+  RVALUE *free;
+  mrb_heap_page *page;
+  mrb_gc *gc = &mrb->gc;
+
+  puts("test_incremental_gc");
+  change_gen_gc_mode(mrb, gc, FALSE);
+
+  puts("  in mrb_full_gc");
+  mrb_full_gc(mrb);
+
+  mrb_assert(gc->state == MRB_GC_STATE_ROOT);
+  puts("  in MRB_GC_STATE_ROOT");
+  incremental_gc(mrb, gc, max);
+  mrb_assert(gc->state == MRB_GC_STATE_MARK);
+  puts("  in MRB_GC_STATE_MARK");
+  incremental_gc_until(mrb, gc, MRB_GC_STATE_SWEEP);
+  mrb_assert(gc->state == MRB_GC_STATE_SWEEP);
+
+  puts("  in MRB_GC_STATE_SWEEP");
+  page = gc->heaps;
+  while (page) {
+    RVALUE *p = objects(page);
+    RVALUE *e = p + MRB_HEAP_PAGE_SIZE;
+    while (p<e) {
+      if (is_black(&p->as.basic)) {
+        live++;
+      }
+      if (is_gray(&p->as.basic) && !is_dead(gc, &p->as.basic)) {
+        printf("%p\n", &p->as.basic);
+      }
+      p++;
+    }
+    page = page->next;
+    total += MRB_HEAP_PAGE_SIZE;
+  }
+
+  mrb_assert(gc->gray_list == NULL);
+
+  incremental_gc(mrb, gc, max);
+  mrb_assert(gc->state == MRB_GC_STATE_SWEEP);
+
+  incremental_gc(mrb, gc, max);
+  mrb_assert(gc->state == MRB_GC_STATE_ROOT);
+
+  free = (RVALUE*)gc->heaps->freelist;
+  while (free) {
+   freed++;
+   free = (RVALUE*)free->as.free.next;
+  }
+
+  mrb_assert(gc->live == live);
+  mrb_assert(gc->live == total-freed);
+
+  puts("test_incremental_gc(gen)");
+  incremental_gc_until(mrb, gc, MRB_GC_STATE_SWEEP);
+  change_gen_gc_mode(mrb, gc, TRUE);
+
+  mrb_assert(gc->full == FALSE);
+  mrb_assert(gc->state == MRB_GC_STATE_ROOT);
+
+  puts("  in minor");
+  mrb_assert(is_minor_gc(gc));
+  mrb_assert(gc->majorgc_old_threshold > 0);
+  gc->majorgc_old_threshold = 0;
+  mrb_incremental_gc(mrb);
+  mrb_assert(gc->full == TRUE);
+  mrb_assert(gc->state == MRB_GC_STATE_ROOT);
+
+  puts("  in major");
+  mrb_assert(is_major_gc(gc));
+  do {
+    mrb_incremental_gc(mrb);
+  } while (gc->state != MRB_GC_STATE_ROOT);
+  mrb_assert(gc->full == FALSE);
+
+  mrb_close(mrb);
+}
+
+void
+test_incremental_sweep_phase(void)
+{
+  mrb_state *mrb = mrb_open();
+  mrb_gc *gc = &mrb->gc;
+
+  puts("test_incremental_sweep_phase");
+
+  add_heap(mrb, gc);
+  gc->sweeps = gc->heaps;
+
+  mrb_assert(gc->heaps->next->next == NULL);
+  mrb_assert(gc->free_heaps->next->next == NULL);
+  incremental_sweep_phase(mrb, gc, MRB_HEAP_PAGE_SIZE * 3);
+
+  mrb_assert(gc->heaps->next == NULL);
+  mrb_assert(gc->heaps == gc->free_heaps);
+
+  mrb_close(mrb);
+}
+
+static mrb_value
+gc_test(mrb_state *mrb, mrb_value self)
+{
+  test_mrb_field_write_barrier();
+  test_mrb_write_barrier();
+  test_add_gray_list();
+  test_gc_gray_mark();
+  test_incremental_gc();
+  test_incremental_sweep_phase();
+  return mrb_nil_value();
+}
+#endif  /* GC_DEBUG */
+#endif  /* GC_TEST */
Index: /EcnlProtoTool/trunk/mruby-2.1.1/src/hash.c
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/src/hash.c	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/src/hash.c	(revision 439)
@@ -0,0 +1,1436 @@
+/*
+** hash.c - Hash class
+**
+** See Copyright Notice in mruby.h
+*/
+
+#include <mruby.h>
+#include <mruby/array.h>
+#include <mruby/class.h>
+#include <mruby/hash.h>
+#include <mruby/string.h>
+#include <mruby/variable.h>
+
+#ifndef MRB_WITHOUT_FLOAT
+/* a function to get hash value of a float number */
+mrb_int mrb_float_id(mrb_float f);
+#endif
+
+#ifndef MRB_HT_INIT_SIZE
+#define MRB_HT_INIT_SIZE 4
+#endif
+#define HT_SEG_INCREASE_RATIO 6 / 5
+
+struct segkv {
+  mrb_value key;
+  mrb_value val;
+};
+
+typedef struct segment {
+  uint16_t size;
+  struct segment *next;
+  struct segkv e[];
+} segment;
+
+typedef struct segindex {
+  size_t size;
+  size_t capa;
+  struct segkv *table[];
+} segindex;
+
+/* hash table structure */
+typedef struct htable {
+  segment *rootseg;
+  segment *lastseg;
+  mrb_int size;
+  uint16_t last_len;
+  segindex *index;
+} htable;
+
+static /* inline */ size_t
+ht_hash_func(mrb_state *mrb, htable *t, mrb_value key)
+{
+  enum mrb_vtype tt = mrb_type(key);
+  mrb_value hv;
+  size_t h;
+  segindex *index = t->index;
+  size_t capa = index ? index->capa : 0;
+
+  switch (tt) {
+  case MRB_TT_STRING:
+    h = mrb_str_hash(mrb, key);
+    break;
+
+  case MRB_TT_TRUE:
+  case MRB_TT_FALSE:
+  case MRB_TT_SYMBOL:
+  case MRB_TT_FIXNUM:
+#ifndef MRB_WITHOUT_FLOAT
+  case MRB_TT_FLOAT:
+#endif
+    h = (size_t)mrb_obj_id(key);
+    break;
+
+  default:
+    hv = mrb_funcall(mrb, key, "hash", 0);
+    h = (size_t)t ^ (size_t)mrb_fixnum(hv);
+    break;
+  }
+  if (index && (index != t->index || capa != index->capa)) {
+    mrb_raise(mrb, E_RUNTIME_ERROR, "hash modified");
+  }
+  return ((h)^((h)<<2)^((h)>>2));
+}
+
+static inline mrb_bool
+ht_hash_equal(mrb_state *mrb, htable *t, mrb_value a, mrb_value b)
+{
+  enum mrb_vtype tt = mrb_type(a);
+
+  switch (tt) {
+  case MRB_TT_STRING:
+    return mrb_str_equal(mrb, a, b);
+
+  case MRB_TT_SYMBOL:
+    if (!mrb_symbol_p(b)) return FALSE;
+    return mrb_symbol(a) == mrb_symbol(b);
+
+  case MRB_TT_FIXNUM:
+    switch (mrb_type(b)) {
+    case MRB_TT_FIXNUM:
+      return mrb_fixnum(a) == mrb_fixnum(b);
+#ifndef MRB_WITHOUT_FLOAT
+    case MRB_TT_FLOAT:
+      return (mrb_float)mrb_fixnum(a) == mrb_float(b);
+#endif
+    default:
+      return FALSE;
+    }
+
+#ifndef MRB_WITHOUT_FLOAT
+  case MRB_TT_FLOAT:
+    switch (mrb_type(b)) {
+    case MRB_TT_FIXNUM:
+      return mrb_float(a) == (mrb_float)mrb_fixnum(b);
+    case MRB_TT_FLOAT:
+      return mrb_float(a) == mrb_float(b);
+    default:
+      return FALSE;
+    }
+#endif
+
+  default:
+    {
+      segindex *index = t->index;
+      size_t capa = index ? index->capa : 0;
+      mrb_bool eql = mrb_eql(mrb, a, b);
+      if (index && (index != t->index || capa != index->capa)) {
+        mrb_raise(mrb, E_RUNTIME_ERROR, "hash modified");
+      }
+      return eql;
+    }
+  } 
+}
+
+/* Creates the hash table. */
+static htable*
+ht_new(mrb_state *mrb)
+{
+  htable *t;
+
+  t = (htable*)mrb_malloc(mrb, sizeof(htable));
+  t->size = 0;
+  t->rootseg =  NULL;
+  t->lastseg =  NULL;
+  t->last_len = 0;
+  t->index = NULL;
+
+  return t;
+}
+
+#define power2(v) do { \
+  v--;\
+  v |= v >> 1;\
+  v |= v >> 2;\
+  v |= v >> 4;\
+  v |= v >> 8;\
+  v |= v >> 16;\
+  v++;\
+} while (0)
+
+#ifndef UPPER_BOUND
+#define UPPER_BOUND(x) ((x)>>2|(x)>>1)
+#endif
+
+#define HT_MASK(index) ((index->capa)-1)
+
+/* Build index for the hash table */
+static void
+ht_index(mrb_state *mrb, htable *t)
+{
+  size_t size = (size_t)t->size;
+  size_t mask;
+  segindex *index = t->index;
+  segment *seg;
+  size_t i;
+
+  /* allocate index table */
+  if (index && index->size >= UPPER_BOUND(index->capa)) {
+    size = index->capa+1;
+  }
+  power2(size);
+  if (!index || index->capa < size) {
+    index = (segindex*)mrb_realloc_simple(mrb, index, sizeof(segindex)+sizeof(struct segkv*)*size);
+    if (index == NULL) {
+      mrb_free(mrb, t->index);
+      t->index = NULL;
+      return;
+    }
+    t->index = index;
+  }
+  index->size = t->size;
+  index->capa = size;
+  for (i=0; i<size; i++) {
+    index->table[i] = NULL;
+  }
+
+  /* rebuld index */
+  mask = HT_MASK(index);
+  seg = t->rootseg;
+  while (seg) {
+    for (i=0; i<seg->size; i++) {
+      mrb_value key;
+      size_t k, step = 0;
+
+      if (!seg->next && i >= (size_t)t->last_len) {
+        return;
+      }
+      key = seg->e[i].key;
+      if (mrb_undef_p(key)) continue;
+      k = ht_hash_func(mrb, t, key) & mask;
+      while (index->table[k]) {
+        k = (k+(++step)) & mask;
+      }
+      index->table[k] = &seg->e[i];
+    }
+    seg = seg->next;
+  }
+}
+
+/* Compacts the hash table removing deleted entries. */
+static void
+ht_compact(mrb_state *mrb, htable *t)
+{
+  segment *seg;
+  uint16_t i, i2;
+  segment *seg2 = NULL;
+  mrb_int size = 0;
+
+  if (t == NULL) return;
+  seg = t->rootseg;
+  if (t->index && (size_t)t->size == t->index->size) {
+    ht_index(mrb, t);
+    return;
+  }
+  while (seg) {
+    for (i=0; i<seg->size; i++) {
+      mrb_value k = seg->e[i].key;
+
+      if (!seg->next && i >= t->last_len) {
+        goto exit;
+      }
+      if (mrb_undef_p(k)) {     /* found deleted key */
+        if (seg2 == NULL) {
+          seg2 = seg;
+          i2 = i;
+        }
+      }
+      else {
+        size++;
+        if (seg2 != NULL) {
+          seg2->e[i2++] = seg->e[i];
+          if (i2 >= seg2->size) {
+            seg2 = seg2->next;
+            i2 = 0;
+          }
+        }
+      }
+    }
+    seg = seg->next;
+  }
+ exit:
+  /* reached at end */
+  t->size = size;
+  if (seg2) {
+    seg = seg2->next;
+    seg2->next = NULL;
+    t->last_len = i2;
+    t->lastseg = seg2;
+    while (seg) {
+      seg2 = seg->next;
+      mrb_free(mrb, seg);
+      seg = seg2;
+    }
+  }
+  if (t->index) {
+    ht_index(mrb, t);
+  }
+}
+
+static segment*
+segment_alloc(mrb_state *mrb, segment *seg)
+{
+  uint32_t size;
+
+  if (!seg) size = MRB_HT_INIT_SIZE;
+  else {
+    size = seg->size*HT_SEG_INCREASE_RATIO + 1;
+    if (size > UINT16_MAX) size = UINT16_MAX;
+  }
+
+  seg = (segment*)mrb_malloc(mrb, sizeof(segment)+sizeof(struct segkv)*size);
+  seg->size = size;
+  seg->next = NULL;
+
+  return seg;
+}
+
+/* Set the value for the key in the indexed table. */
+static void
+ht_index_put(mrb_state *mrb, htable *t, mrb_value key, mrb_value val)
+{
+  segindex *index = t->index;
+  size_t k, sp, step = 0, mask;
+  segment *seg;
+
+  if (index->size >= UPPER_BOUND(index->capa)) {
+    /* need to expand table */
+    ht_compact(mrb, t);
+    index = t->index;
+  }
+  mask = HT_MASK(index);
+  sp = index->capa;
+  k = ht_hash_func(mrb, t, key) & mask;
+  while (index->table[k]) {
+    mrb_value key2 = index->table[k]->key;
+    if (mrb_undef_p(key2)) {
+      if (sp == index->capa) sp = k;
+    }
+    else if (ht_hash_equal(mrb, t, key, key2)) {
+      index->table[k]->val = val;
+      return;
+    }
+    k = (k+(++step)) & mask;
+  }
+  if (sp < index->capa) {
+    k = sp;
+  }
+
+  /* put the value at the last */
+  seg = t->lastseg;
+  if (t->last_len < seg->size) {
+    index->table[k] = &seg->e[t->last_len++];
+  }
+  else {                        /* append a new segment */
+    seg->next = segment_alloc(mrb, seg);
+    seg = seg->next;
+    seg->next = NULL;
+    t->lastseg = seg;
+    t->last_len = 1;
+    index->table[k] = &seg->e[0];
+  }
+  index->table[k]->key = key;
+  index->table[k]->val = val;
+  index->size++;
+  t->size++;
+}
+
+/* Set the value for the key in the hash table. */
+static void
+ht_put(mrb_state *mrb, htable *t, mrb_value key, mrb_value val)
+{
+  segment *seg;
+  mrb_int i, deleted = 0;
+
+  if (t == NULL) return;
+  if (t->index) {
+    ht_index_put(mrb, t, key, val);
+    return;
+  }
+  seg = t->rootseg;
+  while (seg) {
+    for (i=0; i<seg->size; i++) {
+      mrb_value k = seg->e[i].key;
+      /* Found room in last segment after last_len */
+      if (!seg->next && i >= t->last_len) {
+        seg->e[i].key = key;
+        seg->e[i].val = val;
+        t->last_len = i+1;
+        t->size++;
+        return;
+      }
+      if (mrb_undef_p(k)) {
+        deleted++;
+        continue;
+      }
+      if (ht_hash_equal(mrb, t, k, key)) {
+        seg->e[i].val = val;
+        return;
+      }
+    }
+    seg = seg->next;
+  }
+  /* Not found */
+
+  /* Compact if last segment has room */
+  if (deleted > 0 && deleted > MRB_HT_INIT_SIZE) {
+    ht_compact(mrb, t);
+  }
+  t->size++;
+
+  /* check if thre's room after compaction */
+  if (t->lastseg && t->last_len < t->lastseg->size) {
+    seg = t->lastseg;
+    i = t->last_len;
+  }
+  else {
+    /* append new segment */
+    seg = segment_alloc(mrb, t->lastseg);
+    i = 0;
+    if (t->rootseg == NULL) {
+      t->rootseg = seg;
+    }
+    else {
+      t->lastseg->next = seg;
+    }
+    t->lastseg = seg;
+  }
+  seg->e[i].key = key;
+  seg->e[i].val = val;
+  t->last_len = i+1;
+  if (t->index == NULL && t->size > MRB_HT_INIT_SIZE*4) {
+    ht_index(mrb, t);
+  }
+}
+
+/* Get a value for a key from the indexed table. */
+static mrb_bool
+ht_index_get(mrb_state *mrb, htable *t, mrb_value key, mrb_value *vp)
+{
+  segindex *index = t->index;
+  size_t mask = HT_MASK(index);
+  size_t k = ht_hash_func(mrb, t, key) & mask;
+  size_t step = 0;
+
+  while (index->table[k]) {
+    mrb_value key2 = index->table[k]->key;
+    if (!mrb_undef_p(key2) && ht_hash_equal(mrb, t, key, key2)) {
+      if (vp) *vp = index->table[k]->val;
+      return TRUE;
+    }
+    k = (k+(++step)) & mask;
+  }
+  return FALSE;
+}
+
+/* Get a value for a key from the hash table. */
+static mrb_bool
+ht_get(mrb_state *mrb, htable *t, mrb_value key, mrb_value *vp)
+{
+  segment *seg;
+  mrb_int i;
+
+  if (t == NULL) return FALSE;
+  if (t->index) {
+    return ht_index_get(mrb, t, key, vp);
+  }
+
+  seg = t->rootseg;
+  while (seg) {
+    for (i=0; i<seg->size; i++) {
+      mrb_value k = seg->e[i].key;
+
+      if (!seg->next && i >= t->last_len) {
+        return FALSE;
+      }
+      if (mrb_undef_p(k)) continue;
+      if (ht_hash_equal(mrb, t, k, key)) {
+        if (vp) *vp = seg->e[i].val;
+        return TRUE;
+      }
+    }
+    seg = seg->next;
+  }
+  return FALSE;
+}
+
+/* Deletes the value for the symbol from the hash table. */
+/* Deletion is done by overwriting keys by `undef`. */
+static mrb_bool
+ht_del(mrb_state *mrb, htable *t, mrb_value key, mrb_value *vp)
+{
+  segment *seg;
+  mrb_int i;
+
+  if (t == NULL) return FALSE;
+  seg = t->rootseg;
+  while (seg) {
+    for (i=0; i<seg->size; i++) {
+      mrb_value key2;
+
+      if (!seg->next && i >= t->last_len) {
+        /* not found */
+        return FALSE;
+      }
+      key2 = seg->e[i].key;
+      if (!mrb_undef_p(key2) && ht_hash_equal(mrb, t, key, key2)) {
+        if (vp) *vp = seg->e[i].val;
+        seg->e[i].key = mrb_undef_value();
+        t->size--;
+        return TRUE;
+      }
+    }
+    seg = seg->next;
+  }
+  return FALSE;
+}
+
+/* Iterates over the hash table. */
+static void
+ht_foreach(mrb_state *mrb, htable *t, mrb_hash_foreach_func *func, void *p)
+{
+  segment *seg;
+  mrb_int i;
+
+  if (t == NULL) return;
+  seg = t->rootseg;
+  while (seg) {
+    for (i=0; i<seg->size; i++) {
+      /* no value in last segment after last_len */
+      if (!seg->next && i >= t->last_len) {
+        return;
+      }
+      if (mrb_undef_p(seg->e[i].key)) continue;
+      if ((*func)(mrb, seg->e[i].key, seg->e[i].val, p) != 0)
+        return;
+    }
+    seg = seg->next;
+  }
+}
+
+/* Iterates over the hash table. */
+MRB_API void
+mrb_hash_foreach(mrb_state *mrb, struct RHash *hash, mrb_hash_foreach_func *func, void *p)
+{
+  ht_foreach(mrb, hash->ht, func, p);
+}
+
+/* Copy the hash table. */
+static htable*
+ht_copy(mrb_state *mrb, htable *t)
+{
+  segment *seg;
+  htable *t2;
+  mrb_int i;
+
+  seg = t->rootseg;
+  t2 = ht_new(mrb);
+  if (t->size == 0) return t2;
+
+  while (seg) {
+    for (i=0; i<seg->size; i++) {
+      mrb_value key = seg->e[i].key;
+      mrb_value val = seg->e[i].val;
+
+      if ((seg->next == NULL) && (i >= t->last_len)) {
+        return t2;
+      }
+      if (mrb_undef_p(key)) continue; /* skip deleted key */
+      ht_put(mrb, t2, key, val);
+    }
+    seg = seg->next;
+  }
+  return t2;
+}
+
+/* Free memory of the hash table. */
+static void
+ht_free(mrb_state *mrb, htable *t)
+{
+  segment *seg;
+
+  if (!t) return;
+  seg = t->rootseg;
+  while (seg) {
+    segment *p = seg;
+    seg = seg->next;
+    mrb_free(mrb, p);
+  }
+  if (t->index) mrb_free(mrb, t->index);
+  mrb_free(mrb, t);
+}
+
+static void mrb_hash_modify(mrb_state *mrb, mrb_value hash);
+
+static inline mrb_value
+ht_key(mrb_state *mrb, mrb_value key)
+{
+  if (mrb_string_p(key) && !mrb_frozen_p(mrb_str_ptr(key))) {
+    key = mrb_str_dup(mrb, key);
+    MRB_SET_FROZEN_FLAG(mrb_str_ptr(key));
+  }
+  return key;
+}
+
+#define KEY(key) ht_key(mrb, key)
+
+static int
+hash_mark_i(mrb_state *mrb, mrb_value key, mrb_value val, void *p)
+{
+  mrb_gc_mark_value(mrb, key);
+  mrb_gc_mark_value(mrb, val);
+  return 0;
+}
+
+void
+mrb_gc_mark_hash(mrb_state *mrb, struct RHash *hash)
+{
+  ht_foreach(mrb, hash->ht, hash_mark_i, NULL);
+}
+
+size_t
+mrb_gc_mark_hash_size(mrb_state *mrb, struct RHash *hash)
+{
+  if (!hash->ht) return 0;
+  return hash->ht->size*2;
+}
+
+void
+mrb_gc_free_hash(mrb_state *mrb, struct RHash *hash)
+{
+  ht_free(mrb, hash->ht);
+}
+
+MRB_API mrb_value
+mrb_hash_new(mrb_state *mrb)
+{
+  struct RHash *h;
+
+  h = (struct RHash*)mrb_obj_alloc(mrb, MRB_TT_HASH, mrb->hash_class);
+  h->ht = 0;
+  h->iv = 0;
+  return mrb_obj_value(h);
+}
+
+MRB_API mrb_value
+mrb_hash_new_capa(mrb_state *mrb, mrb_int capa)
+{
+  struct RHash *h;
+
+  h = (struct RHash*)mrb_obj_alloc(mrb, MRB_TT_HASH, mrb->hash_class);
+  /* preallocate hash table */
+  h->ht = ht_new(mrb);
+  /* capacity ignored */
+  h->iv = 0;
+  return mrb_obj_value(h);
+}
+
+static mrb_value mrb_hash_default(mrb_state *mrb, mrb_value hash);
+static mrb_value hash_default(mrb_state *mrb, mrb_value hash, mrb_value key);
+
+static mrb_value
+mrb_hash_init_copy(mrb_state *mrb, mrb_value self)
+{
+  mrb_value orig;
+  struct RHash* copy;
+  htable *orig_h;
+  mrb_value ifnone, vret;
+
+  mrb_get_args(mrb, "o", &orig);
+  if (mrb_obj_equal(mrb, self, orig)) return self;
+  if ((mrb_type(self) != mrb_type(orig)) || (mrb_obj_class(mrb, self) != mrb_obj_class(mrb, orig))) {
+      mrb_raise(mrb, E_TYPE_ERROR, "initialize_copy should take same class object");
+  }
+
+  orig_h = RHASH_TBL(self);
+  copy = (struct RHash*)mrb_obj_alloc(mrb, MRB_TT_HASH, mrb->hash_class);
+  copy->ht = ht_copy(mrb, orig_h);
+
+  if (MRB_RHASH_DEFAULT_P(self)) {
+    copy->flags |= MRB_HASH_DEFAULT;
+  }
+  if (MRB_RHASH_PROCDEFAULT_P(self)) {
+    copy->flags |= MRB_HASH_PROC_DEFAULT;
+  }
+  vret = mrb_obj_value(copy);
+  ifnone = RHASH_IFNONE(self);
+  if (!mrb_nil_p(ifnone)) {
+      mrb_iv_set(mrb, vret, mrb_intern_lit(mrb, "ifnone"), ifnone);
+  }
+  return vret;
+}
+
+static int
+check_kdict_i(mrb_state *mrb, mrb_value key, mrb_value val, void *data)
+{
+  if (!mrb_symbol_p(key)) {
+    mrb_raise(mrb, E_ARGUMENT_ERROR, "keyword argument hash with non symbol keys");
+  }
+  return 0;
+}
+
+void
+mrb_hash_check_kdict(mrb_state *mrb, mrb_value self)
+{
+  htable *t;
+
+  t = RHASH_TBL(self);
+  if (!t || t->size == 0) return;
+  ht_foreach(mrb, t, check_kdict_i, NULL);
+}
+
+MRB_API mrb_value
+mrb_hash_dup(mrb_state *mrb, mrb_value self)
+{
+  struct RHash* copy;
+  htable *orig_h;
+
+  orig_h = RHASH_TBL(self);
+  copy = (struct RHash*)mrb_obj_alloc(mrb, MRB_TT_HASH, mrb->hash_class);
+  copy->ht = orig_h ? ht_copy(mrb, orig_h) : NULL;
+  return mrb_obj_value(copy);
+}
+
+MRB_API mrb_value
+mrb_hash_get(mrb_state *mrb, mrb_value hash, mrb_value key)
+{
+  mrb_value val;
+  mrb_sym mid;
+
+  if (ht_get(mrb, RHASH_TBL(hash), key, &val)) {
+    return val;
+  }
+
+  mid = mrb_intern_lit(mrb, "default");
+  if (mrb_func_basic_p(mrb, hash, mid, mrb_hash_default)) {
+    return hash_default(mrb, hash, key);
+  }
+  /* xxx mrb_funcall_tailcall(mrb, hash, "default", 1, key); */
+  return mrb_funcall_argv(mrb, hash, mid, 1, &key);
+}
+
+MRB_API mrb_value
+mrb_hash_fetch(mrb_state *mrb, mrb_value hash, mrb_value key, mrb_value def)
+{
+  mrb_value val;
+
+  if (ht_get(mrb, RHASH_TBL(hash), key, &val)) {
+    return val;
+  }
+  /* not found */
+  return def;
+}
+
+MRB_API void
+mrb_hash_set(mrb_state *mrb, mrb_value hash, mrb_value key, mrb_value val)
+{
+  mrb_hash_modify(mrb, hash);
+
+  key = KEY(key);
+  ht_put(mrb, RHASH_TBL(hash), key, val);
+  mrb_field_write_barrier_value(mrb, (struct RBasic*)RHASH(hash), key);
+  mrb_field_write_barrier_value(mrb, (struct RBasic*)RHASH(hash), val);
+  return;
+}
+
+static void
+mrb_hash_modify(mrb_state *mrb, mrb_value hash)
+{
+  mrb_check_frozen(mrb, mrb_hash_ptr(hash));
+  if (!RHASH_TBL(hash)) {
+    RHASH_TBL(hash) = ht_new(mrb);
+  }
+}
+
+/* 15.2.13.4.16 */
+/*
+ *  call-seq:
+ *     Hash.new                          -> new_hash
+ *     Hash.new(obj)                     -> new_hash
+ *     Hash.new {|hash, key| block }     -> new_hash
+ *
+ *  Returns a new, empty hash. If this hash is subsequently accessed by
+ *  a key that doesn't correspond to a hash entry, the value returned
+ *  depends on the style of <code>new</code> used to create the hash. In
+ *  the first form, the access returns <code>nil</code>. If
+ *  <i>obj</i> is specified, this single object will be used for
+ *  all <em>default values</em>. If a block is specified, it will be
+ *  called with the hash object and the key, and should return the
+ *  default value. It is the block's responsibility to store the value
+ *  in the hash if required.
+ *
+ *      h = Hash.new("Go Fish")
+ *      h["a"] = 100
+ *      h["b"] = 200
+ *      h["a"]           #=> 100
+ *      h["c"]           #=> "Go Fish"
+ *      # The following alters the single default object
+ *      h["c"].upcase!   #=> "GO FISH"
+ *      h["d"]           #=> "GO FISH"
+ *      h.keys           #=> ["a", "b"]
+ *
+ *      # While this creates a new default object each time
+ *      h = Hash.new { |hash, key| hash[key] = "Go Fish: #{key}" }
+ *      h["c"]           #=> "Go Fish: c"
+ *      h["c"].upcase!   #=> "GO FISH: C"
+ *      h["d"]           #=> "Go Fish: d"
+ *      h.keys           #=> ["c", "d"]
+ *
+ */
+
+static mrb_value
+mrb_hash_init(mrb_state *mrb, mrb_value hash)
+{
+  mrb_value block, ifnone;
+  mrb_bool ifnone_p;
+
+  ifnone = mrb_nil_value();
+  mrb_get_args(mrb, "&|o?", &block, &ifnone, &ifnone_p);
+  mrb_hash_modify(mrb, hash);
+  if (!mrb_nil_p(block)) {
+    if (ifnone_p) {
+      mrb_argnum_error(mrb, 1, 0, 0);
+    }
+    RHASH(hash)->flags |= MRB_HASH_PROC_DEFAULT;
+    ifnone = block;
+  }
+  if (!mrb_nil_p(ifnone)) {
+    RHASH(hash)->flags |= MRB_HASH_DEFAULT;
+    mrb_iv_set(mrb, hash, mrb_intern_lit(mrb, "ifnone"), ifnone);
+  }
+  return hash;
+}
+
+/* 15.2.13.4.2  */
+/*
+ *  call-seq:
+ *     hsh[key]    ->  value
+ *
+ *  Element Reference---Retrieves the <i>value</i> object corresponding
+ *  to the <i>key</i> object. If not found, returns the default value (see
+ *  <code>Hash::new</code> for details).
+ *
+ *     h = { "a" => 100, "b" => 200 }
+ *     h["a"]   #=> 100
+ *     h["c"]   #=> nil
+ *
+ */
+static mrb_value
+mrb_hash_aget(mrb_state *mrb, mrb_value self)
+{
+  mrb_value key;
+
+  mrb_get_args(mrb, "o", &key);
+  return mrb_hash_get(mrb, self, key);
+}
+
+static mrb_value
+hash_default(mrb_state *mrb, mrb_value hash, mrb_value key)
+{
+  if (MRB_RHASH_DEFAULT_P(hash)) {
+    if (MRB_RHASH_PROCDEFAULT_P(hash)) {
+      return mrb_funcall(mrb, RHASH_PROCDEFAULT(hash), "call", 2, hash, key);
+    }
+    else {
+      return RHASH_IFNONE(hash);
+    }
+  }
+  return mrb_nil_value();
+}
+
+/* 15.2.13.4.5  */
+/*
+ *  call-seq:
+ *     hsh.default(key=nil)   -> obj
+ *
+ *  Returns the default value, the value that would be returned by
+ *  <i>hsh</i>[<i>key</i>] if <i>key</i> did not exist in <i>hsh</i>.
+ *  See also <code>Hash::new</code> and <code>Hash#default=</code>.
+ *
+ *     h = Hash.new                            #=> {}
+ *     h.default                               #=> nil
+ *     h.default(2)                            #=> nil
+ *
+ *     h = Hash.new("cat")                     #=> {}
+ *     h.default                               #=> "cat"
+ *     h.default(2)                            #=> "cat"
+ *
+ *     h = Hash.new {|h,k| h[k] = k.to_i*10}   #=> {}
+ *     h.default                               #=> nil
+ *     h.default(2)                            #=> 20
+ */
+
+static mrb_value
+mrb_hash_default(mrb_state *mrb, mrb_value hash)
+{
+  mrb_value key;
+  mrb_bool given;
+
+  mrb_get_args(mrb, "|o?", &key, &given);
+  if (MRB_RHASH_DEFAULT_P(hash)) {
+    if (MRB_RHASH_PROCDEFAULT_P(hash)) {
+      if (!given) return mrb_nil_value();
+      return mrb_funcall(mrb, RHASH_PROCDEFAULT(hash), "call", 2, hash, key);
+    }
+    else {
+      return RHASH_IFNONE(hash);
+    }
+  }
+  return mrb_nil_value();
+}
+
+/* 15.2.13.4.6  */
+/*
+ *  call-seq:
+ *     hsh.default = obj     -> obj
+ *
+ *  Sets the default value, the value returned for a key that does not
+ *  exist in the hash. It is not possible to set the default to a
+ *  <code>Proc</code> that will be executed on each key lookup.
+ *
+ *     h = { "a" => 100, "b" => 200 }
+ *     h.default = "Go fish"
+ *     h["a"]     #=> 100
+ *     h["z"]     #=> "Go fish"
+ *     # This doesn't do what you might hope...
+ *     h.default = proc do |hash, key|
+ *       hash[key] = key + key
+ *     end
+ *     h[2]       #=> #<Proc:0x401b3948@-:6>
+ *     h["cat"]   #=> #<Proc:0x401b3948@-:6>
+ */
+
+static mrb_value
+mrb_hash_set_default(mrb_state *mrb, mrb_value hash)
+{
+  mrb_value ifnone;
+
+  mrb_get_args(mrb, "o", &ifnone);
+  mrb_hash_modify(mrb, hash);
+  mrb_iv_set(mrb, hash, mrb_intern_lit(mrb, "ifnone"), ifnone);
+  RHASH(hash)->flags &= ~MRB_HASH_PROC_DEFAULT;
+  if (!mrb_nil_p(ifnone)) {
+    RHASH(hash)->flags |= MRB_HASH_DEFAULT;
+  }
+  else {
+    RHASH(hash)->flags &= ~MRB_HASH_DEFAULT;
+  }
+  return ifnone;
+}
+
+/* 15.2.13.4.7  */
+/*
+ *  call-seq:
+ *     hsh.default_proc -> anObject
+ *
+ *  If <code>Hash::new</code> was invoked with a block, return that
+ *  block, otherwise return <code>nil</code>.
+ *
+ *     h = Hash.new {|h,k| h[k] = k*k }   #=> {}
+ *     p = h.default_proc                 #=> #<Proc:0x401b3d08@-:1>
+ *     a = []                             #=> []
+ *     p.call(a, 2)
+ *     a                                  #=> [nil, nil, 4]
+ */
+
+
+static mrb_value
+mrb_hash_default_proc(mrb_state *mrb, mrb_value hash)
+{
+  if (MRB_RHASH_PROCDEFAULT_P(hash)) {
+    return RHASH_PROCDEFAULT(hash);
+  }
+  return mrb_nil_value();
+}
+
+/*
+ *  call-seq:
+ *     hsh.default_proc = proc_obj     -> proc_obj
+ *
+ *  Sets the default proc to be executed on each key lookup.
+ *
+ *     h.default_proc = proc do |hash, key|
+ *       hash[key] = key + key
+ *     end
+ *     h[2]       #=> 4
+ *     h["cat"]   #=> "catcat"
+ */
+
+static mrb_value
+mrb_hash_set_default_proc(mrb_state *mrb, mrb_value hash)
+{
+  mrb_value ifnone;
+
+  mrb_get_args(mrb, "o", &ifnone);
+  mrb_hash_modify(mrb, hash);
+  mrb_iv_set(mrb, hash, mrb_intern_lit(mrb, "ifnone"), ifnone);
+  if (!mrb_nil_p(ifnone)) {
+    RHASH(hash)->flags |= MRB_HASH_PROC_DEFAULT;
+    RHASH(hash)->flags |= MRB_HASH_DEFAULT;
+  }
+  else {
+    RHASH(hash)->flags &= ~MRB_HASH_DEFAULT;
+    RHASH(hash)->flags &= ~MRB_HASH_PROC_DEFAULT;
+  }
+
+  return ifnone;
+}
+
+MRB_API mrb_value
+mrb_hash_delete_key(mrb_state *mrb, mrb_value hash, mrb_value key)
+{
+  htable *t = RHASH_TBL(hash);
+  mrb_value del_val;
+
+  if (ht_del(mrb, t, key, &del_val)) {
+    return del_val;
+  }
+
+  /* not found */
+  return mrb_nil_value();
+}
+
+static mrb_value
+mrb_hash_delete(mrb_state *mrb, mrb_value self)
+{
+  mrb_value key;
+
+  mrb_get_args(mrb, "o", &key);
+  mrb_hash_modify(mrb, self);
+  return mrb_hash_delete_key(mrb, self, key);
+}
+
+/* find first element in the hash table, and remove it. */
+static void
+ht_shift(mrb_state *mrb, htable *t, mrb_value *kp, mrb_value *vp)
+{
+  segment *seg = t->rootseg;
+  mrb_int i;
+
+  while (seg) {
+    for (i=0; i<seg->size; i++) {
+      mrb_value key;
+
+      if (!seg->next && i >= t->last_len) {
+        return;
+      }
+      key = seg->e[i].key;
+      if (mrb_undef_p(key)) continue;
+      *kp = key;
+      *vp = seg->e[i].val;
+      /* delete element */
+      seg->e[i].key = mrb_undef_value();
+      t->size--;
+      return;
+    }
+    seg = seg->next;
+  }
+}
+
+/* 15.2.13.4.24 */
+/*
+ *  call-seq:
+ *     hsh.shift -> anArray or obj
+ *
+ *  Removes a key-value pair from <i>hsh</i> and returns it as the
+ *  two-item array <code>[</code> <i>key, value</i> <code>]</code>, or
+ *  the hash's default value if the hash is empty.
+ *
+ *      h = { 1 => "a", 2 => "b", 3 => "c" }
+ *      h.shift   #=> [1, "a"]
+ *      h         #=> {2=>"b", 3=>"c"}
+ */
+
+static mrb_value
+mrb_hash_shift(mrb_state *mrb, mrb_value hash)
+{
+  htable *t = RHASH_TBL(hash);
+
+  mrb_hash_modify(mrb, hash);
+  if (t && t->size > 0) {
+    mrb_value del_key, del_val;
+
+    ht_shift(mrb, t, &del_key, &del_val);
+    mrb_gc_protect(mrb, del_key);
+    mrb_gc_protect(mrb, del_val);
+    return mrb_assoc_new(mrb, del_key, del_val);
+  }
+
+  if (MRB_RHASH_DEFAULT_P(hash)) {
+    if (MRB_RHASH_PROCDEFAULT_P(hash)) {
+      return mrb_funcall(mrb, RHASH_PROCDEFAULT(hash), "call", 2, hash, mrb_nil_value());
+    }
+    else {
+      return RHASH_IFNONE(hash);
+    }
+  }
+  return mrb_nil_value();
+}
+
+/* 15.2.13.4.4  */
+/*
+ *  call-seq:
+ *     hsh.clear -> hsh
+ *
+ *  Removes all key-value pairs from `hsh`.
+ *
+ *      h = { "a" => 100, "b" => 200 }   #=> {"a"=>100, "b"=>200}
+ *      h.clear                          #=> {}
+ *
+ */
+
+MRB_API mrb_value
+mrb_hash_clear(mrb_state *mrb, mrb_value hash)
+{
+  htable *t = RHASH_TBL(hash);
+
+  mrb_hash_modify(mrb, hash);
+  if (t) {
+    ht_free(mrb, t);
+    RHASH_TBL(hash) = NULL;
+  }
+  return hash;
+}
+
+/* 15.2.13.4.3  */
+/* 15.2.13.4.26 */
+/*
+ *  call-seq:
+ *     hsh[key] = value        -> value
+ *     hsh.store(key, value)   -> value
+ *
+ *  Element Assignment---Associates the value given by
+ *  <i>value</i> with the key given by <i>key</i>.
+ *  <i>key</i> should not have its value changed while it is in
+ *  use as a key (a <code>String</code> passed as a key will be
+ *  duplicated and frozen).
+ *
+ *      h = { "a" => 100, "b" => 200 }
+ *      h["a"] = 9
+ *      h["c"] = 4
+ *      h   #=> {"a"=>9, "b"=>200, "c"=>4}
+ *
+ */
+static mrb_value
+mrb_hash_aset(mrb_state *mrb, mrb_value self)
+{
+  mrb_value key, val;
+
+  mrb_get_args(mrb, "oo", &key, &val);
+  mrb_hash_set(mrb, self, key, val);
+  return val;
+}
+
+MRB_API mrb_int
+mrb_hash_size(mrb_state *mrb, mrb_value hash)
+{
+  htable *t = RHASH_TBL(hash);
+
+  if (!t) return 0;
+  return t->size;
+}
+
+/* 15.2.13.4.20 */
+/* 15.2.13.4.25 */
+/*
+ *  call-seq:
+ *     hsh.length    ->  fixnum
+ *     hsh.size      ->  fixnum
+ *
+ *  Returns the number of key-value pairs in the hash.
+ *
+ *     h = { "d" => 100, "a" => 200, "v" => 300, "e" => 400 }
+ *     h.length        #=> 4
+ *     h.delete("a")   #=> 200
+ *     h.length        #=> 3
+ */
+static mrb_value
+mrb_hash_size_m(mrb_state *mrb, mrb_value self)
+{
+  mrb_int size = mrb_hash_size(mrb, self);
+  return mrb_fixnum_value(size);
+}
+
+MRB_API mrb_bool
+mrb_hash_empty_p(mrb_state *mrb, mrb_value self)
+{
+  htable *t = RHASH_TBL(self);
+
+  if (!t) return TRUE;
+  return t->size == 0;
+}
+
+/* 15.2.13.4.12 */
+/*
+ *  call-seq:
+ *     hsh.empty?    -> true or false
+ *
+ *  Returns <code>true</code> if <i>hsh</i> contains no key-value pairs.
+ *
+ *     {}.empty?   #=> true
+ *
+ */
+static mrb_value
+mrb_hash_empty_m(mrb_state *mrb, mrb_value self)
+{
+  return mrb_bool_value(mrb_hash_empty_p(mrb, self));
+}
+
+static int
+hash_keys_i(mrb_state *mrb, mrb_value key, mrb_value val, void *p)
+{
+  mrb_ary_push(mrb, *(mrb_value*)p, key);
+  return 0;
+}
+
+/* 15.2.13.4.19 */
+/*
+ *  call-seq:
+ *     hsh.keys    -> array
+ *
+ *  Returns a new array populated with the keys from this hash. See also
+ *  <code>Hash#values</code>.
+ *
+ *     h = { "a" => 100, "b" => 200, "c" => 300, "d" => 400 }
+ *     h.keys   #=> ["a", "b", "c", "d"]
+ *
+ */
+
+MRB_API mrb_value
+mrb_hash_keys(mrb_state *mrb, mrb_value hash)
+{
+  htable *t = RHASH_TBL(hash);
+  mrb_int size;
+  mrb_value ary;
+
+  if (!t || (size = t->size) == 0)
+    return mrb_ary_new(mrb);
+  ary = mrb_ary_new_capa(mrb, size);
+  ht_foreach(mrb, t, hash_keys_i, (void*)&ary);
+  return ary;
+}
+
+static int
+hash_vals_i(mrb_state *mrb, mrb_value key, mrb_value val, void *p)
+{
+  mrb_ary_push(mrb, *(mrb_value*)p, val);
+  return 0;
+}
+
+/* 15.2.13.4.28 */
+/*
+ *  call-seq:
+ *     hsh.values    -> array
+ *
+ *  Returns a new array populated with the values from <i>hsh</i>. See
+ *  also <code>Hash#keys</code>.
+ *
+ *     h = { "a" => 100, "b" => 200, "c" => 300 }
+ *     h.values   #=> [100, 200, 300]
+ *
+ */
+
+MRB_API mrb_value
+mrb_hash_values(mrb_state *mrb, mrb_value hash)
+{
+  htable *t = RHASH_TBL(hash);
+  mrb_int size;
+  mrb_value ary;
+
+  if (!t || (size = t->size) == 0)
+    return mrb_ary_new(mrb);
+  ary = mrb_ary_new_capa(mrb, size);
+  ht_foreach(mrb, t, hash_vals_i, (void*)&ary);
+  return ary;
+}
+
+/* 15.2.13.4.13 */
+/* 15.2.13.4.15 */
+/* 15.2.13.4.18 */
+/* 15.2.13.4.21 */
+/*
+ *  call-seq:
+ *     hsh.has_key?(key)    -> true or false
+ *     hsh.include?(key)    -> true or false
+ *     hsh.key?(key)        -> true or false
+ *     hsh.member?(key)     -> true or false
+ *
+ *  Returns <code>true</code> if the given key is present in <i>hsh</i>.
+ *
+ *     h = { "a" => 100, "b" => 200 }
+ *     h.has_key?("a")   #=> true
+ *     h.has_key?("z")   #=> false
+ *
+ */
+
+MRB_API mrb_bool
+mrb_hash_key_p(mrb_state *mrb, mrb_value hash, mrb_value key)
+{
+  htable *t;
+
+  t = RHASH_TBL(hash);
+  if (ht_get(mrb, t, key, NULL)) {
+    return TRUE;
+  }
+  return FALSE;
+}
+
+static mrb_value
+mrb_hash_has_key(mrb_state *mrb, mrb_value hash)
+{
+  mrb_value key;
+  mrb_bool key_p;
+
+  mrb_get_args(mrb, "o", &key);
+  key_p = mrb_hash_key_p(mrb, hash, key);
+  return mrb_bool_value(key_p);
+}
+
+struct has_v_arg {
+  mrb_bool found;
+  mrb_value val;
+};
+
+static int
+hash_has_value_i(mrb_state *mrb, mrb_value key, mrb_value val, void *p)
+{
+  struct has_v_arg *arg = (struct has_v_arg*)p;
+  
+  if (mrb_equal(mrb, arg->val, val)) {
+    arg->found = TRUE;
+    return 1;
+  }
+  return 0;
+}
+
+/* 15.2.13.4.14 */
+/* 15.2.13.4.27 */
+/*
+ *  call-seq:
+ *     hsh.has_value?(value)    -> true or false
+ *     hsh.value?(value)        -> true or false
+ *
+ *  Returns <code>true</code> if the given value is present for some key
+ *  in <i>hsh</i>.
+ *
+ *     h = { "a" => 100, "b" => 200 }
+ *     h.has_value?(100)   #=> true
+ *     h.has_value?(999)   #=> false
+ */
+
+static mrb_value
+mrb_hash_has_value(mrb_state *mrb, mrb_value hash)
+{
+  mrb_value val;
+  struct has_v_arg arg;
+  
+  mrb_get_args(mrb, "o", &val);
+  arg.found = FALSE;
+  arg.val = val;
+  ht_foreach(mrb, RHASH_TBL(hash), hash_has_value_i, &arg);
+  return mrb_bool_value(arg.found);
+}
+
+static int
+merge_i(mrb_state *mrb, mrb_value key, mrb_value val, void *data)
+{
+  htable *h1 = (htable*)data;
+
+  ht_put(mrb, h1, key, val);
+  return 0;
+}
+
+MRB_API void
+mrb_hash_merge(mrb_state *mrb, mrb_value hash1, mrb_value hash2)
+{
+  htable *h1, *h2;
+
+  mrb_hash_modify(mrb, hash1);
+  hash2 = mrb_ensure_hash_type(mrb, hash2);
+  h1 = RHASH_TBL(hash1);
+  h2 = RHASH_TBL(hash2);
+
+  if (!h2) return;
+  if (!h1) {
+    RHASH_TBL(hash1) = ht_copy(mrb, h2);
+    return;
+  }
+  ht_foreach(mrb, h2, merge_i, h1);
+  mrb_write_barrier(mrb, (struct RBasic*)RHASH(hash1));
+  return;
+}
+
+/*
+ *  call-seq:
+ *    hsh.rehash -> hsh
+ *
+ *  Rebuilds the hash based on the current hash values for each key. If
+ *  values of key objects have changed since they were inserted, this
+ *  method will reindex <i>hsh</i>.
+ *
+ *     keys = (1..17).map{|n| [n]}
+ *     k = keys[0]
+ *     h = {}
+ *     keys.each{|key| h[key] = key[0]}
+ *     h     #=> { [1]=> 1, [2]=> 2, [3]=> 3, [4]=> 4, [5]=> 5, [6]=> 6, [7]=> 7,
+ *                 [8]=> 8, [9]=> 9,[10]=>10,[11]=>11,[12]=>12,[13]=>13,[14]=>14,
+ *                [15]=>15,[16]=>16,[17]=>17}
+ *     h[k]  #=> 1
+ *     k[0] = keys.size + 1
+ *     h     #=> {[18]=> 1, [2]=> 2, [3]=> 3, [4]=> 4, [5]=> 5, [6]=> 6, [7]=> 7,
+ *                 [8]=> 8, [9]=> 9,[10]=>10,[11]=>11,[12]=>12,[13]=>13,[14]=>14,
+ *                [15]=>15,[16]=>16,[17]=>17}
+ *     h[k]  #=> nil
+ *     h.rehash
+ *     h[k]  #=> 1
+ */
+static mrb_value
+mrb_hash_rehash(mrb_state *mrb, mrb_value self)
+{
+  ht_compact(mrb, RHASH_TBL(self));
+  return self;
+}
+
+void
+mrb_init_hash(mrb_state *mrb)
+{
+  struct RClass *h;
+
+  mrb->hash_class = h = mrb_define_class(mrb, "Hash", mrb->object_class);              /* 15.2.13 */
+  MRB_SET_INSTANCE_TT(h, MRB_TT_HASH);
+
+  mrb_define_method(mrb, h, "initialize_copy", mrb_hash_init_copy,   MRB_ARGS_REQ(1));
+  mrb_define_method(mrb, h, "[]",              mrb_hash_aget,        MRB_ARGS_REQ(1)); /* 15.2.13.4.2  */
+  mrb_define_method(mrb, h, "[]=",             mrb_hash_aset,        MRB_ARGS_REQ(2)); /* 15.2.13.4.3  */
+  mrb_define_method(mrb, h, "clear",           mrb_hash_clear,       MRB_ARGS_NONE()); /* 15.2.13.4.4  */
+  mrb_define_method(mrb, h, "default",         mrb_hash_default,     MRB_ARGS_OPT(1));  /* 15.2.13.4.5  */
+  mrb_define_method(mrb, h, "default=",        mrb_hash_set_default, MRB_ARGS_REQ(1)); /* 15.2.13.4.6  */
+  mrb_define_method(mrb, h, "default_proc",    mrb_hash_default_proc,MRB_ARGS_NONE()); /* 15.2.13.4.7  */
+  mrb_define_method(mrb, h, "default_proc=",   mrb_hash_set_default_proc,MRB_ARGS_REQ(1)); /* 15.2.13.4.7  */
+  mrb_define_method(mrb, h, "__delete",        mrb_hash_delete,      MRB_ARGS_REQ(1)); /* core of 15.2.13.4.8  */
+  mrb_define_method(mrb, h, "empty?",          mrb_hash_empty_m,     MRB_ARGS_NONE()); /* 15.2.13.4.12 */
+  mrb_define_method(mrb, h, "has_key?",        mrb_hash_has_key,     MRB_ARGS_REQ(1)); /* 15.2.13.4.13 */
+  mrb_define_method(mrb, h, "has_value?",      mrb_hash_has_value,   MRB_ARGS_REQ(1)); /* 15.2.13.4.14 */
+  mrb_define_method(mrb, h, "include?",        mrb_hash_has_key,     MRB_ARGS_REQ(1)); /* 15.2.13.4.15 */
+  mrb_define_method(mrb, h, "initialize",      mrb_hash_init,        MRB_ARGS_OPT(1)|MRB_ARGS_BLOCK()); /* 15.2.13.4.16 */
+  mrb_define_method(mrb, h, "key?",            mrb_hash_has_key,     MRB_ARGS_REQ(1)); /* 15.2.13.4.18 */
+  mrb_define_method(mrb, h, "keys",            mrb_hash_keys,        MRB_ARGS_NONE()); /* 15.2.13.4.19 */
+  mrb_define_method(mrb, h, "length",          mrb_hash_size_m,      MRB_ARGS_NONE()); /* 15.2.13.4.20 */
+  mrb_define_method(mrb, h, "member?",         mrb_hash_has_key,     MRB_ARGS_REQ(1)); /* 15.2.13.4.21 */
+  mrb_define_method(mrb, h, "shift",           mrb_hash_shift,       MRB_ARGS_NONE()); /* 15.2.13.4.24 */
+  mrb_define_method(mrb, h, "size",            mrb_hash_size_m,      MRB_ARGS_NONE()); /* 15.2.13.4.25 */
+  mrb_define_method(mrb, h, "store",           mrb_hash_aset,        MRB_ARGS_REQ(2)); /* 15.2.13.4.26 */
+  mrb_define_method(mrb, h, "value?",          mrb_hash_has_value,   MRB_ARGS_REQ(1)); /* 15.2.13.4.27 */
+  mrb_define_method(mrb, h, "values",          mrb_hash_values,      MRB_ARGS_NONE()); /* 15.2.13.4.28 */
+  mrb_define_method(mrb, h, "rehash",          mrb_hash_rehash,      MRB_ARGS_NONE());
+}
Index: /EcnlProtoTool/trunk/mruby-2.1.1/src/init.c
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/src/init.c	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/src/init.c	(revision 439)
@@ -0,0 +1,51 @@
+/*
+** init.c - initialize mruby core
+**
+** See Copyright Notice in mruby.h
+*/
+
+#include <mruby.h>
+
+void mrb_init_symtbl(mrb_state*);
+void mrb_init_class(mrb_state*);
+void mrb_init_object(mrb_state*);
+void mrb_init_kernel(mrb_state*);
+void mrb_init_comparable(mrb_state*);
+void mrb_init_enumerable(mrb_state*);
+void mrb_init_symbol(mrb_state*);
+void mrb_init_string(mrb_state*);
+void mrb_init_exception(mrb_state*);
+void mrb_init_proc(mrb_state*);
+void mrb_init_array(mrb_state*);
+void mrb_init_hash(mrb_state*);
+void mrb_init_numeric(mrb_state*);
+void mrb_init_range(mrb_state*);
+void mrb_init_gc(mrb_state*);
+void mrb_init_math(mrb_state*);
+void mrb_init_version(mrb_state*);
+void mrb_init_mrblib(mrb_state*);
+
+#define DONE mrb_gc_arena_restore(mrb, 0);
+void
+mrb_init_core(mrb_state *mrb)
+{
+  mrb_init_symtbl(mrb); DONE;
+
+  mrb_init_class(mrb); DONE;
+  mrb_init_object(mrb); DONE;
+  mrb_init_kernel(mrb); DONE;
+  mrb_init_comparable(mrb); DONE;
+  mrb_init_enumerable(mrb); DONE;
+
+  mrb_init_symbol(mrb); DONE;
+  mrb_init_string(mrb); DONE;
+  mrb_init_exception(mrb); DONE;
+  mrb_init_proc(mrb); DONE;
+  mrb_init_array(mrb); DONE;
+  mrb_init_hash(mrb); DONE;
+  mrb_init_numeric(mrb); DONE;
+  mrb_init_range(mrb); DONE;
+  mrb_init_gc(mrb); DONE;
+  mrb_init_version(mrb); DONE;
+  mrb_init_mrblib(mrb); DONE;
+}
Index: /EcnlProtoTool/trunk/mruby-2.1.1/src/kernel.c
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/src/kernel.c	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/src/kernel.c	(revision 439)
@@ -0,0 +1,804 @@
+/*
+** kernel.c - Kernel module
+**
+** See Copyright Notice in mruby.h
+*/
+
+#include <mruby.h>
+#include <mruby/array.h>
+#include <mruby/hash.h>
+#include <mruby/class.h>
+#include <mruby/proc.h>
+#include <mruby/string.h>
+#include <mruby/variable.h>
+#include <mruby/error.h>
+#include <mruby/istruct.h>
+
+MRB_API mrb_bool
+mrb_func_basic_p(mrb_state *mrb, mrb_value obj, mrb_sym mid, mrb_func_t func)
+{
+  struct RClass *c = mrb_class(mrb, obj);
+  mrb_method_t m = mrb_method_search_vm(mrb, &c, mid);
+  struct RProc *p;
+
+  if (MRB_METHOD_UNDEF_P(m)) return FALSE;
+  if (MRB_METHOD_FUNC_P(m))
+    return MRB_METHOD_FUNC(m) == func;
+  p = MRB_METHOD_PROC(m);
+  if (MRB_PROC_CFUNC_P(p) && (MRB_PROC_CFUNC(p) == func))
+    return TRUE;
+  return FALSE;
+}
+
+static mrb_bool
+mrb_obj_basic_to_s_p(mrb_state *mrb, mrb_value obj)
+{
+  return mrb_func_basic_p(mrb, obj, mrb_intern_lit(mrb, "to_s"), mrb_any_to_s);
+}
+
+/* 15.3.1.3.17 */
+/*
+ *  call-seq:
+ *     obj.inspect   -> string
+ *
+ *  Returns a string containing a human-readable representation of
+ *  <i>obj</i>. If not overridden and no instance variables, uses the
+ *  <code>to_s</code> method to generate the string.
+ *  <i>obj</i>.  If not overridden, uses the <code>to_s</code> method to
+ *  generate the string.
+ *
+ *     [ 1, 2, 3..4, 'five' ].inspect   #=> "[1, 2, 3..4, \"five\"]"
+ *     Time.new.inspect                 #=> "2008-03-08 19:43:39 +0900"
+ */
+MRB_API mrb_value
+mrb_obj_inspect(mrb_state *mrb, mrb_value obj)
+{
+  if (mrb_object_p(obj) && mrb_obj_basic_to_s_p(mrb, obj)) {
+    return mrb_obj_iv_inspect(mrb, mrb_obj_ptr(obj));
+  }
+  return mrb_any_to_s(mrb, obj);
+}
+
+/* 15.3.1.3.2  */
+/*
+ *  call-seq:
+ *     obj === other   -> true or false
+ *
+ *  Case Equality---For class <code>Object</code>, effectively the same
+ *  as calling  <code>#==</code>, but typically overridden by descendants
+ *  to provide meaningful semantics in <code>case</code> statements.
+ */
+static mrb_value
+mrb_equal_m(mrb_state *mrb, mrb_value self)
+{
+  mrb_value arg;
+
+  mrb_get_args(mrb, "o", &arg);
+  return mrb_bool_value(mrb_equal(mrb, self, arg));
+}
+
+/* 15.3.1.3.3  */
+/* 15.3.1.3.33 */
+/*
+ *  Document-method: __id__
+ *  Document-method: object_id
+ *
+ *  call-seq:
+ *     obj.__id__       -> fixnum
+ *     obj.object_id    -> fixnum
+ *
+ *  Returns an integer identifier for <i>obj</i>. The same number will
+ *  be returned on all calls to <code>id</code> for a given object, and
+ *  no two active objects will share an id.
+ *  <code>Object#object_id</code> is a different concept from the
+ *  <code>:name</code> notation, which returns the symbol id of
+ *  <code>name</code>. Replaces the deprecated <code>Object#id</code>.
+ */
+mrb_value
+mrb_obj_id_m(mrb_state *mrb, mrb_value self)
+{
+  return mrb_fixnum_value(mrb_obj_id(self));
+}
+
+/* 15.3.1.2.2  */
+/* 15.3.1.2.5  */
+/* 15.3.1.3.6  */
+/* 15.3.1.3.25 */
+/*
+ *  call-seq:
+ *     block_given?   -> true or false
+ *     iterator?      -> true or false
+ *
+ *  Returns <code>true</code> if <code>yield</code> would execute a
+ *  block in the current context. The <code>iterator?</code> form
+ *  is mildly deprecated.
+ *
+ *     def try
+ *       if block_given?
+ *         yield
+ *       else
+ *         "no block"
+ *       end
+ *     end
+ *     try                  #=> "no block"
+ *     try { "hello" }      #=> "hello"
+ *     try do "hello" end   #=> "hello"
+ */
+static mrb_value
+mrb_f_block_given_p_m(mrb_state *mrb, mrb_value self)
+{
+  mrb_callinfo *ci = &mrb->c->ci[-1];
+  mrb_callinfo *cibase = mrb->c->cibase;
+  mrb_value *bp;
+  struct RProc *p;
+
+  if (ci <= cibase) {
+    /* toplevel does not have block */
+    return mrb_false_value();
+  }
+  p = ci->proc;
+  /* search method/class/module proc */
+  while (p) {
+    if (MRB_PROC_SCOPE_P(p)) break;
+    p = p->upper;
+  }
+  if (p == NULL) return mrb_false_value();
+  /* search ci corresponding to proc */
+  while (cibase < ci) {
+    if (ci->proc == p) break;
+    ci--;
+  }
+  if (ci == cibase) {
+    return mrb_false_value();
+  }
+  else if (ci->env) {
+    struct REnv *e = ci->env;
+    int bidx;
+
+    /* top-level does not have block slot (always false) */
+    if (e->stack == mrb->c->stbase)
+      return mrb_false_value();
+    /* use saved block arg position */
+    bidx = MRB_ENV_BIDX(e);
+    /* bidx may be useless (e.g. define_method) */
+    if (bidx >= MRB_ENV_STACK_LEN(e))
+      return mrb_false_value();
+    bp = &e->stack[bidx];
+  }
+  else {
+    bp = ci[1].stackent+1;
+    if (ci->argc >= 0) {
+      bp += ci->argc;
+    }
+    else {
+      bp++;
+    }
+  }
+  if (mrb_nil_p(*bp))
+    return mrb_false_value();
+  return mrb_true_value();
+}
+
+/* 15.3.1.3.7  */
+/*
+ *  call-seq:
+ *     obj.class    -> class
+ *
+ *  Returns the class of <i>obj</i>. This method must always be
+ *  called with an explicit receiver, as <code>class</code> is also a
+ *  reserved word in Ruby.
+ *
+ *     1.class      #=> Fixnum
+ *     self.class   #=> Object
+ */
+static mrb_value
+mrb_obj_class_m(mrb_state *mrb, mrb_value self)
+{
+  return mrb_obj_value(mrb_obj_class(mrb, self));
+}
+
+static struct RClass*
+mrb_singleton_class_clone(mrb_state *mrb, mrb_value obj)
+{
+  struct RClass *klass = mrb_basic_ptr(obj)->c;
+
+  if (klass->tt != MRB_TT_SCLASS)
+    return klass;
+  else {
+    /* copy singleton(unnamed) class */
+    struct RClass *clone = (struct RClass*)mrb_obj_alloc(mrb, klass->tt, mrb->class_class);
+
+    switch (mrb_type(obj)) {
+    case MRB_TT_CLASS:
+    case MRB_TT_SCLASS:
+      break;
+    default:
+      clone->c = mrb_singleton_class_clone(mrb, mrb_obj_value(klass));
+      break;
+    }
+    clone->super = klass->super;
+    if (klass->iv) {
+      mrb_iv_copy(mrb, mrb_obj_value(clone), mrb_obj_value(klass));
+      mrb_obj_iv_set(mrb, (struct RObject*)clone, mrb_intern_lit(mrb, "__attached__"), obj);
+    }
+    if (klass->mt) {
+      clone->mt = kh_copy(mt, mrb, klass->mt);
+    }
+    else {
+      clone->mt = kh_init(mt, mrb);
+    }
+    clone->tt = MRB_TT_SCLASS;
+    return clone;
+  }
+}
+
+static void
+copy_class(mrb_state *mrb, mrb_value dst, mrb_value src)
+{
+  struct RClass *dc = mrb_class_ptr(dst);
+  struct RClass *sc = mrb_class_ptr(src);
+  /* if the origin is not the same as the class, then the origin and
+     the current class need to be copied */
+  if (sc->flags & MRB_FL_CLASS_IS_PREPENDED) {
+    struct RClass *c0 = sc->super;
+    struct RClass *c1 = dc;
+
+    /* copy prepended iclasses */
+    while (!(c0->flags & MRB_FL_CLASS_IS_ORIGIN)) {
+      c1->super = mrb_class_ptr(mrb_obj_dup(mrb, mrb_obj_value(c0)));
+      c1 = c1->super;
+      c0 = c0->super;
+    }
+    c1->super = mrb_class_ptr(mrb_obj_dup(mrb, mrb_obj_value(c0)));
+    c1->super->flags |= MRB_FL_CLASS_IS_ORIGIN;
+  }
+  if (sc->mt) {
+    dc->mt = kh_copy(mt, mrb, sc->mt);
+  }
+  else {
+    dc->mt = kh_init(mt, mrb);
+  }
+  dc->super = sc->super;
+  MRB_SET_INSTANCE_TT(dc, MRB_INSTANCE_TT(sc));
+}
+
+static void
+init_copy(mrb_state *mrb, mrb_value dest, mrb_value obj)
+{
+  switch (mrb_type(obj)) {
+    case MRB_TT_ICLASS:
+      copy_class(mrb, dest, obj);
+      return;
+    case MRB_TT_CLASS:
+    case MRB_TT_MODULE:
+      copy_class(mrb, dest, obj);
+      mrb_iv_copy(mrb, dest, obj);
+      mrb_iv_remove(mrb, dest, mrb_intern_lit(mrb, "__classname__"));
+      break;
+    case MRB_TT_OBJECT:
+    case MRB_TT_SCLASS:
+    case MRB_TT_HASH:
+    case MRB_TT_DATA:
+    case MRB_TT_EXCEPTION:
+      mrb_iv_copy(mrb, dest, obj);
+      break;
+    case MRB_TT_ISTRUCT:
+      mrb_istruct_copy(dest, obj);
+      break;
+
+    default:
+      break;
+  }
+  mrb_funcall(mrb, dest, "initialize_copy", 1, obj);
+}
+
+/* 15.3.1.3.8  */
+/*
+ *  call-seq:
+ *     obj.clone -> an_object
+ *
+ *  Produces a shallow copy of <i>obj</i>---the instance variables of
+ *  <i>obj</i> are copied, but not the objects they reference. Copies
+ *  the frozen state of <i>obj</i>. See also the discussion
+ *  under <code>Object#dup</code>.
+ *
+ *     class Klass
+ *        attr_accessor :str
+ *     end
+ *     s1 = Klass.new      #=> #<Klass:0x401b3a38>
+ *     s1.str = "Hello"    #=> "Hello"
+ *     s2 = s1.clone       #=> #<Klass:0x401b3998 @str="Hello">
+ *     s2.str[1,4] = "i"   #=> "i"
+ *     s1.inspect          #=> "#<Klass:0x401b3a38 @str=\"Hi\">"
+ *     s2.inspect          #=> "#<Klass:0x401b3998 @str=\"Hi\">"
+ *
+ *  This method may have class-specific behavior.  If so, that
+ *  behavior will be documented under the #+initialize_copy+ method of
+ *  the class.
+ *
+ *  Some Class(True False Nil Symbol Fixnum Float) Object  cannot clone.
+ */
+MRB_API mrb_value
+mrb_obj_clone(mrb_state *mrb, mrb_value self)
+{
+  struct RObject *p;
+  mrb_value clone;
+
+  if (mrb_immediate_p(self)) {
+    mrb_raisef(mrb, E_TYPE_ERROR, "can't clone %v", self);
+  }
+  if (mrb_sclass_p(self)) {
+    mrb_raise(mrb, E_TYPE_ERROR, "can't clone singleton class");
+  }
+  p = (struct RObject*)mrb_obj_alloc(mrb, mrb_type(self), mrb_obj_class(mrb, self));
+  p->c = mrb_singleton_class_clone(mrb, self);
+  mrb_field_write_barrier(mrb, (struct RBasic*)p, (struct RBasic*)p->c);
+  clone = mrb_obj_value(p);
+  init_copy(mrb, clone, self);
+  p->flags |= mrb_obj_ptr(self)->flags & MRB_FL_OBJ_IS_FROZEN;
+
+  return clone;
+}
+
+/* 15.3.1.3.9  */
+/*
+ *  call-seq:
+ *     obj.dup -> an_object
+ *
+ *  Produces a shallow copy of <i>obj</i>---the instance variables of
+ *  <i>obj</i> are copied, but not the objects they reference.
+ *  <code>dup</code> copies the frozen state of <i>obj</i>. See also
+ *  the discussion under <code>Object#clone</code>. In general,
+ *  <code>clone</code> and <code>dup</code> may have different semantics
+ *  in descendant classes. While <code>clone</code> is used to duplicate
+ *  an object, including its internal state, <code>dup</code> typically
+ *  uses the class of the descendant object to create the new instance.
+ *
+ *  This method may have class-specific behavior.  If so, that
+ *  behavior will be documented under the #+initialize_copy+ method of
+ *  the class.
+ */
+
+MRB_API mrb_value
+mrb_obj_dup(mrb_state *mrb, mrb_value obj)
+{
+  struct RBasic *p;
+  mrb_value dup;
+
+  if (mrb_immediate_p(obj)) {
+    mrb_raisef(mrb, E_TYPE_ERROR, "can't dup %v", obj);
+  }
+  if (mrb_sclass_p(obj)) {
+    mrb_raise(mrb, E_TYPE_ERROR, "can't dup singleton class");
+  }
+  p = mrb_obj_alloc(mrb, mrb_type(obj), mrb_obj_class(mrb, obj));
+  dup = mrb_obj_value(p);
+  init_copy(mrb, dup, obj);
+
+  return dup;
+}
+
+static mrb_value
+mrb_obj_extend(mrb_state *mrb, mrb_int argc, mrb_value *argv, mrb_value obj)
+{
+  mrb_int i;
+
+  if (argc == 0) {
+    mrb_argnum_error(mrb, argc, 1, -1);
+  }
+  for (i = 0; i < argc; i++) {
+    mrb_check_type(mrb, argv[i], MRB_TT_MODULE);
+  }
+  while (argc--) {
+    mrb_funcall(mrb, argv[argc], "extend_object", 1, obj);
+    mrb_funcall(mrb, argv[argc], "extended", 1, obj);
+  }
+  return obj;
+}
+
+/* 15.3.1.3.13 */
+/*
+ *  call-seq:
+ *     obj.extend(module, ...)    -> obj
+ *
+ *  Adds to _obj_ the instance methods from each module given as a
+ *  parameter.
+ *
+ *     module Mod
+ *       def hello
+ *         "Hello from Mod.\n"
+ *       end
+ *     end
+ *
+ *     class Klass
+ *       def hello
+ *         "Hello from Klass.\n"
+ *       end
+ *     end
+ *
+ *     k = Klass.new
+ *     k.hello         #=> "Hello from Klass.\n"
+ *     k.extend(Mod)   #=> #<Klass:0x401b3bc8>
+ *     k.hello         #=> "Hello from Mod.\n"
+ */
+static mrb_value
+mrb_obj_extend_m(mrb_state *mrb, mrb_value self)
+{
+  mrb_value *argv;
+  mrb_int argc;
+
+  mrb_get_args(mrb, "*", &argv, &argc);
+  return mrb_obj_extend(mrb, argc, argv, self);
+}
+
+MRB_API mrb_value
+mrb_obj_freeze(mrb_state *mrb, mrb_value self)
+{
+  if (!mrb_immediate_p(self)) {
+    struct RBasic *b = mrb_basic_ptr(self);
+    if (!mrb_frozen_p(b)) {
+      MRB_SET_FROZEN_FLAG(b);
+      if (b->c->tt == MRB_TT_SCLASS) MRB_SET_FROZEN_FLAG(b->c);
+    }
+  }
+  return self;
+}
+
+static mrb_value
+mrb_obj_frozen(mrb_state *mrb, mrb_value self)
+{
+  return mrb_bool_value(mrb_immediate_p(self) || mrb_frozen_p(mrb_basic_ptr(self)));
+}
+
+/* 15.3.1.3.15 */
+/*
+ *  call-seq:
+ *     obj.hash    -> fixnum
+ *
+ *  Generates a <code>Fixnum</code> hash value for this object. This
+ *  function must have the property that <code>a.eql?(b)</code> implies
+ *  <code>a.hash == b.hash</code>. The hash value is used by class
+ *  <code>Hash</code>. Any hash value that exceeds the capacity of a
+ *  <code>Fixnum</code> will be truncated before being used.
+ */
+static mrb_value
+mrb_obj_hash(mrb_state *mrb, mrb_value self)
+{
+  return mrb_fixnum_value(mrb_obj_id(self));
+}
+
+/* 15.3.1.3.16 */
+static mrb_value
+mrb_obj_init_copy(mrb_state *mrb, mrb_value self)
+{
+  mrb_value orig;
+
+  mrb_get_args(mrb, "o", &orig);
+  if (mrb_obj_equal(mrb, self, orig)) return self;
+  if ((mrb_type(self) != mrb_type(orig)) || (mrb_obj_class(mrb, self) != mrb_obj_class(mrb, orig))) {
+      mrb_raise(mrb, E_TYPE_ERROR, "initialize_copy should take same class object");
+  }
+  return self;
+}
+
+
+MRB_API mrb_bool
+mrb_obj_is_instance_of(mrb_state *mrb, mrb_value obj, struct RClass* c)
+{
+  if (mrb_obj_class(mrb, obj) == c) return TRUE;
+  return FALSE;
+}
+
+/* 15.3.1.3.19 */
+/*
+ *  call-seq:
+ *     obj.instance_of?(class)    -> true or false
+ *
+ *  Returns <code>true</code> if <i>obj</i> is an instance of the given
+ *  class. See also <code>Object#kind_of?</code>.
+ */
+static mrb_value
+obj_is_instance_of(mrb_state *mrb, mrb_value self)
+{
+  mrb_value arg;
+
+  mrb_get_args(mrb, "C", &arg);
+
+  return mrb_bool_value(mrb_obj_is_instance_of(mrb, self, mrb_class_ptr(arg)));
+}
+
+/* 15.3.1.3.24 */
+/* 15.3.1.3.26 */
+/*
+ *  call-seq:
+ *     obj.is_a?(class)       -> true or false
+ *     obj.kind_of?(class)    -> true or false
+ *
+ *  Returns <code>true</code> if <i>class</i> is the class of
+ *  <i>obj</i>, or if <i>class</i> is one of the superclasses of
+ *  <i>obj</i> or modules included in <i>obj</i>.
+ *
+ *     module M;    end
+ *     class A
+ *       include M
+ *     end
+ *     class B < A; end
+ *     class C < B; end
+ *     b = B.new
+ *     b.instance_of? A   #=> false
+ *     b.instance_of? B   #=> true
+ *     b.instance_of? C   #=> false
+ *     b.instance_of? M   #=> false
+ *     b.kind_of? A       #=> true
+ *     b.kind_of? B       #=> true
+ *     b.kind_of? C       #=> false
+ *     b.kind_of? M       #=> true
+ */
+static mrb_value
+mrb_obj_is_kind_of_m(mrb_state *mrb, mrb_value self)
+{
+  mrb_value arg;
+
+  mrb_get_args(mrb, "C", &arg);
+
+  return mrb_bool_value(mrb_obj_is_kind_of(mrb, self, mrb_class_ptr(arg)));
+}
+
+KHASH_DECLARE(st, mrb_sym, char, FALSE)
+KHASH_DEFINE(st, mrb_sym, char, FALSE, kh_int_hash_func, kh_int_hash_equal)
+
+/* 15.3.1.3.32 */
+/*
+ * call_seq:
+ *   nil.nil?               -> true
+ *   <anything_else>.nil?   -> false
+ *
+ * Only the object <i>nil</i> responds <code>true</code> to <code>nil?</code>.
+ */
+static mrb_value
+mrb_false(mrb_state *mrb, mrb_value self)
+{
+  return mrb_false_value();
+}
+
+/* 15.3.1.2.12  */
+/* 15.3.1.3.40 */
+/*
+ *  call-seq:
+ *     raise
+ *     raise(string)
+ *     raise(exception [, string])
+ *
+ *  With no arguments, raises a <code>RuntimeError</code>
+ *  With a single +String+ argument, raises a
+ *  +RuntimeError+ with the string as a message. Otherwise,
+ *  the first parameter should be the name of an +Exception+
+ *  class (or an object that returns an +Exception+ object when sent
+ *  an +exception+ message). The optional second parameter sets the
+ *  message associated with the exception, and the third parameter is an
+ *  array of callback information. Exceptions are caught by the
+ *  +rescue+ clause of <code>begin...end</code> blocks.
+ *
+ *     raise "Failed to create socket"
+ *     raise ArgumentError, "No parameters", caller
+ */
+MRB_API mrb_value
+mrb_f_raise(mrb_state *mrb, mrb_value self)
+{
+  mrb_value a[2], exc;
+  mrb_int argc;
+
+
+  argc = mrb_get_args(mrb, "|oo", &a[0], &a[1]);
+  switch (argc) {
+  case 0:
+    mrb_raise(mrb, E_RUNTIME_ERROR, "");
+    break;
+  case 1:
+    if (mrb_string_p(a[0])) {
+      a[1] = a[0];
+      argc = 2;
+      a[0] = mrb_obj_value(E_RUNTIME_ERROR);
+    }
+    /* fall through */
+  default:
+    exc = mrb_make_exception(mrb, argc, a);
+    mrb_exc_raise(mrb, exc);
+    break;
+  }
+  return mrb_nil_value();            /* not reached */
+}
+
+/* 15.3.1.3.41 */
+/*
+ *  call-seq:
+ *     obj.remove_instance_variable(symbol)    -> obj
+ *
+ *  Removes the named instance variable from <i>obj</i>, returning that
+ *  variable's value.
+ *
+ *     class Dummy
+ *       attr_reader :var
+ *       def initialize
+ *         @var = 99
+ *       end
+ *       def remove
+ *         remove_instance_variable(:@var)
+ *       end
+ *     end
+ *     d = Dummy.new
+ *     d.var      #=> 99
+ *     d.remove   #=> 99
+ *     d.var      #=> nil
+ */
+static mrb_value
+mrb_obj_remove_instance_variable(mrb_state *mrb, mrb_value self)
+{
+  mrb_sym sym;
+  mrb_value val;
+
+  mrb_get_args(mrb, "n", &sym);
+  mrb_iv_name_sym_check(mrb, sym);
+  val = mrb_iv_remove(mrb, self, sym);
+  if (mrb_undef_p(val)) {
+    mrb_name_error(mrb, sym, "instance variable %n not defined", sym);
+  }
+  return val;
+}
+
+void
+mrb_method_missing(mrb_state *mrb, mrb_sym name, mrb_value self, mrb_value args)
+{
+  mrb_no_method_error(mrb, name, args, "undefined method '%n'", name);
+}
+
+/* 15.3.1.3.30 */
+/*
+ *  call-seq:
+ *     obj.method_missing(symbol [, *args] )   -> result
+ *
+ *  Invoked by Ruby when <i>obj</i> is sent a message it cannot handle.
+ *  <i>symbol</i> is the symbol for the method called, and <i>args</i>
+ *  are any arguments that were passed to it. By default, the interpreter
+ *  raises an error when this method is called. However, it is possible
+ *  to override the method to provide more dynamic behavior.
+ *  If it is decided that a particular method should not be handled, then
+ *  <i>super</i> should be called, so that ancestors can pick up the
+ *  missing method.
+ *  The example below creates
+ *  a class <code>Roman</code>, which responds to methods with names
+ *  consisting of roman numerals, returning the corresponding integer
+ *  values.
+ *
+ *     class Roman
+ *       def romanToInt(str)
+ *         # ...
+ *       end
+ *       def method_missing(methId)
+ *         str = methId.id2name
+ *         romanToInt(str)
+ *       end
+ *     end
+ *
+ *     r = Roman.new
+ *     r.iv      #=> 4
+ *     r.xxiii   #=> 23
+ *     r.mm      #=> 2000
+ */
+static mrb_value
+mrb_obj_missing(mrb_state *mrb, mrb_value mod)
+{
+  mrb_sym name;
+  mrb_value *a;
+  mrb_int alen;
+
+  mrb_get_args(mrb, "n*!", &name, &a, &alen);
+  mrb_method_missing(mrb, name, mod, mrb_ary_new_from_values(mrb, alen, a));
+  /* not reached */
+  return mrb_nil_value();
+}
+
+static inline mrb_bool
+basic_obj_respond_to(mrb_state *mrb, mrb_value obj, mrb_sym id, int pub)
+{
+  return mrb_respond_to(mrb, obj, id);
+}
+
+/* 15.3.1.3.43 */
+/*
+ *  call-seq:
+ *     obj.respond_to?(symbol, include_private=false) -> true or false
+ *
+ *  Returns +true+ if _obj_ responds to the given
+ *  method. Private methods are included in the search only if the
+ *  optional second parameter evaluates to +true+.
+ *
+ *  If the method is not implemented,
+ *  as Process.fork on Windows, File.lchmod on GNU/Linux, etc.,
+ *  false is returned.
+ *
+ *  If the method is not defined, <code>respond_to_missing?</code>
+ *  method is called and the result is returned.
+ */
+static mrb_value
+obj_respond_to(mrb_state *mrb, mrb_value self)
+{
+  mrb_sym id, rtm_id;
+  mrb_bool priv = FALSE, respond_to_p;
+
+  mrb_get_args(mrb, "n|b", &id, &priv);
+  respond_to_p = basic_obj_respond_to(mrb, self, id, !priv);
+  if (!respond_to_p) {
+    rtm_id = mrb_intern_lit(mrb, "respond_to_missing?");
+    if (basic_obj_respond_to(mrb, self, rtm_id, !priv)) {
+      mrb_value args[2], v;
+      args[0] = mrb_symbol_value(id);
+      args[1] = mrb_bool_value(priv);
+      v = mrb_funcall_argv(mrb, self, rtm_id, 2, args);
+      return mrb_bool_value(mrb_bool(v));
+    }
+  }
+  return mrb_bool_value(respond_to_p);
+}
+
+static mrb_value
+mrb_obj_ceqq(mrb_state *mrb, mrb_value self)
+{
+  mrb_value v;
+  mrb_int i, len;
+  mrb_sym eqq = mrb_intern_lit(mrb, "===");
+  mrb_value ary = mrb_ary_splat(mrb, self);
+
+  mrb_get_args(mrb, "o", &v);
+  len = RARRAY_LEN(ary);
+  for (i=0; i<len; i++) {
+    mrb_value c = mrb_funcall_argv(mrb, mrb_ary_entry(ary, i), eqq, 1, &v);
+    if (mrb_test(c)) return mrb_true_value();
+  }
+  return mrb_false_value();
+}
+
+mrb_value mrb_obj_equal_m(mrb_state *mrb, mrb_value);
+
+void
+mrb_init_kernel(mrb_state *mrb)
+{
+  struct RClass *krn;
+
+  mrb->kernel_module = krn = mrb_define_module(mrb, "Kernel");                                                    /* 15.3.1 */
+  mrb_define_class_method(mrb, krn, "block_given?",         mrb_f_block_given_p_m,           MRB_ARGS_NONE());    /* 15.3.1.2.2  */
+  mrb_define_class_method(mrb, krn, "iterator?",            mrb_f_block_given_p_m,           MRB_ARGS_NONE());    /* 15.3.1.2.5  */
+;     /* 15.3.1.2.11 */
+  mrb_define_class_method(mrb, krn, "raise",                mrb_f_raise,                     MRB_ARGS_OPT(2));    /* 15.3.1.2.12 */
+
+
+  mrb_define_method(mrb, krn, "===",                        mrb_equal_m,                     MRB_ARGS_REQ(1));    /* 15.3.1.3.2  */
+  mrb_define_method(mrb, krn, "block_given?",               mrb_f_block_given_p_m,           MRB_ARGS_NONE());    /* 15.3.1.3.6  */
+  mrb_define_method(mrb, krn, "class",                      mrb_obj_class_m,                 MRB_ARGS_NONE());    /* 15.3.1.3.7  */
+  mrb_define_method(mrb, krn, "clone",                      mrb_obj_clone,                   MRB_ARGS_NONE());    /* 15.3.1.3.8  */
+  mrb_define_method(mrb, krn, "dup",                        mrb_obj_dup,                     MRB_ARGS_NONE());    /* 15.3.1.3.9  */
+  mrb_define_method(mrb, krn, "eql?",                       mrb_obj_equal_m,                 MRB_ARGS_REQ(1));    /* 15.3.1.3.10 */
+  mrb_define_method(mrb, krn, "extend",                     mrb_obj_extend_m,                MRB_ARGS_ANY());     /* 15.3.1.3.13 */
+  mrb_define_method(mrb, krn, "freeze",                     mrb_obj_freeze,                  MRB_ARGS_NONE());
+  mrb_define_method(mrb, krn, "frozen?",                    mrb_obj_frozen,                  MRB_ARGS_NONE());
+  mrb_define_method(mrb, krn, "hash",                       mrb_obj_hash,                    MRB_ARGS_NONE());    /* 15.3.1.3.15 */
+  mrb_define_method(mrb, krn, "initialize_copy",            mrb_obj_init_copy,               MRB_ARGS_REQ(1));    /* 15.3.1.3.16 */
+  mrb_define_method(mrb, krn, "inspect",                    mrb_obj_inspect,                 MRB_ARGS_NONE());    /* 15.3.1.3.17 */
+  mrb_define_method(mrb, krn, "instance_of?",               obj_is_instance_of,              MRB_ARGS_REQ(1));    /* 15.3.1.3.19 */
+
+  mrb_define_method(mrb, krn, "is_a?",                      mrb_obj_is_kind_of_m,            MRB_ARGS_REQ(1));    /* 15.3.1.3.24 */
+  mrb_define_method(mrb, krn, "iterator?",                  mrb_f_block_given_p_m,           MRB_ARGS_NONE());    /* 15.3.1.3.25 */
+  mrb_define_method(mrb, krn, "kind_of?",                   mrb_obj_is_kind_of_m,            MRB_ARGS_REQ(1));    /* 15.3.1.3.26 */
+  mrb_define_method(mrb, krn, "method_missing",             mrb_obj_missing,                 MRB_ARGS_ANY());     /* 15.3.1.3.30 */
+  mrb_define_method(mrb, krn, "nil?",                       mrb_false,                       MRB_ARGS_NONE());    /* 15.3.1.3.32 */
+  mrb_define_method(mrb, krn, "object_id",                  mrb_obj_id_m,                    MRB_ARGS_NONE());    /* 15.3.1.3.33 */
+  mrb_define_method(mrb, krn, "raise",                      mrb_f_raise,                     MRB_ARGS_ANY());     /* 15.3.1.3.40 */
+  mrb_define_method(mrb, krn, "remove_instance_variable",   mrb_obj_remove_instance_variable,MRB_ARGS_REQ(1));    /* 15.3.1.3.41 */
+  mrb_define_method(mrb, krn, "respond_to?",                obj_respond_to,                  MRB_ARGS_ARG(1,1));     /* 15.3.1.3.43 */
+  mrb_define_method(mrb, krn, "to_s",                       mrb_any_to_s,                    MRB_ARGS_NONE());    /* 15.3.1.3.46 */
+  mrb_define_method(mrb, krn, "__case_eqq",                 mrb_obj_ceqq,                    MRB_ARGS_REQ(1));    /* internal */
+  mrb_define_method(mrb, krn, "__to_int",                   mrb_to_int,                      MRB_ARGS_NONE()); /* internal */
+  mrb_define_method(mrb, krn, "__to_str",                   mrb_to_str,                      MRB_ARGS_NONE()); /* internal */
+
+  mrb_include_module(mrb, mrb->object_class, mrb->kernel_module);
+}
Index: /EcnlProtoTool/trunk/mruby-2.1.1/src/load.c
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/src/load.c	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/src/load.c	(revision 439)
@@ -0,0 +1,666 @@
+/*
+** load.c - mruby binary loader
+**
+** See Copyright Notice in mruby.h
+*/
+
+#include <limits.h>
+#include <stdlib.h>
+#include <string.h>
+#include <math.h>
+#include <mruby/dump.h>
+#include <mruby/irep.h>
+#include <mruby/proc.h>
+#include <mruby/string.h>
+#include <mruby/debug.h>
+#include <mruby/error.h>
+
+#if SIZE_MAX < UINT32_MAX
+# error size_t must be at least 32 bits wide
+#endif
+
+#define FLAG_BYTEORDER_BIG 2
+#define FLAG_BYTEORDER_LIL 4
+#define FLAG_BYTEORDER_NATIVE 8
+#define FLAG_SRC_MALLOC 1
+#define FLAG_SRC_STATIC 0
+
+#define SIZE_ERROR_MUL(nmemb, size) ((size_t)(nmemb) > SIZE_MAX / (size))
+
+static size_t
+skip_padding(const uint8_t *buf)
+{
+  const size_t align = MRB_DUMP_ALIGNMENT;
+  return -(intptr_t)buf & (align-1);
+}
+
+static size_t
+offset_crc_body(void)
+{
+  struct rite_binary_header header;
+  return ((uint8_t *)header.binary_crc - (uint8_t *)&header) + sizeof(header.binary_crc);
+}
+
+#ifndef MRB_WITHOUT_FLOAT
+double mrb_str_len_to_dbl(mrb_state *mrb, const char *s, size_t len, mrb_bool badcheck);
+
+static double
+str_to_double(mrb_state *mrb, const char *p, size_t len)
+{
+  /* `i`, `inf`, `infinity` */
+  if (len > 0 && p[0] == 'i') return INFINITY;
+
+  /* `I`, `-inf`, `-infinity` */
+  if (p[0] == 'I' || (len > 1 && p[0] == '-' && p[1] == 'i')) return -INFINITY;
+  return mrb_str_len_to_dbl(mrb, p, len, TRUE);
+}
+#endif
+
+mrb_value mrb_str_len_to_inum(mrb_state *mrb, const char *str, mrb_int len, mrb_int base, int badcheck);
+
+static mrb_irep*
+read_irep_record_1(mrb_state *mrb, const uint8_t *bin, size_t *len, uint8_t flags)
+{
+  int i;
+  const uint8_t *src = bin;
+  ptrdiff_t diff;
+  uint16_t tt, pool_data_len, snl;
+  int plen;
+  int ai = mrb_gc_arena_save(mrb);
+  mrb_irep *irep = mrb_add_irep(mrb);
+
+  /* skip record size */
+  src += sizeof(uint32_t);
+
+  /* number of local variable */
+  irep->nlocals = bin_to_uint16(src);
+  src += sizeof(uint16_t);
+
+  /* number of register variable */
+  irep->nregs = bin_to_uint16(src);
+  src += sizeof(uint16_t);
+
+  /* number of child irep */
+  irep->rlen = (size_t)bin_to_uint16(src);
+  src += sizeof(uint16_t);
+
+  /* Binary Data Section */
+  /* ISEQ BLOCK */
+  irep->ilen = (uint16_t)bin_to_uint32(src);
+  src += sizeof(uint32_t);
+  src += skip_padding(src);
+
+  if (irep->ilen > 0) {
+    if (SIZE_ERROR_MUL(irep->ilen, sizeof(mrb_code))) {
+      return NULL;
+    }
+    if ((flags & FLAG_SRC_MALLOC) == 0 &&
+        (flags & FLAG_BYTEORDER_NATIVE)) {
+      irep->iseq = (mrb_code*)src;
+      src += sizeof(mrb_code) * irep->ilen;
+      irep->flags |= MRB_ISEQ_NO_FREE;
+    }
+    else {
+      size_t data_len = sizeof(mrb_code) * irep->ilen;
+      void *buf = mrb_malloc(mrb, data_len);
+      irep->iseq = (mrb_code *)buf;
+      memcpy(buf, src, data_len);
+      src += data_len;
+    }
+  }
+
+  /* POOL BLOCK */
+  plen = bin_to_uint32(src); /* number of pool */
+  src += sizeof(uint32_t);
+  if (plen > 0) {
+    if (SIZE_ERROR_MUL(plen, sizeof(mrb_value))) {
+      return NULL;
+    }
+    irep->pool = (mrb_value*)mrb_malloc(mrb, sizeof(mrb_value) * plen);
+
+    for (i = 0; i < plen; i++) {
+      const char *s;
+      mrb_bool st = (flags & FLAG_SRC_MALLOC)==0;
+
+      tt = *src++; /* pool TT */
+      pool_data_len = bin_to_uint16(src); /* pool data length */
+      src += sizeof(uint16_t);
+      s = (const char*)src;
+      src += pool_data_len;
+      switch (tt) { /* pool data */
+      case IREP_TT_FIXNUM: {
+        mrb_value num = mrb_str_len_to_inum(mrb, s, pool_data_len, 10, FALSE);
+#ifdef MRB_WITHOUT_FLOAT
+        irep->pool[i] = num;
+#else
+        irep->pool[i] = mrb_float_p(num)? mrb_float_pool(mrb, mrb_float(num)) : num;
+#endif
+        }
+        break;
+
+#ifndef MRB_WITHOUT_FLOAT
+      case IREP_TT_FLOAT:
+        irep->pool[i] = mrb_float_pool(mrb, str_to_double(mrb, s, pool_data_len));
+        break;
+#endif
+
+      case IREP_TT_STRING:
+        irep->pool[i] = mrb_str_pool(mrb, s, pool_data_len, st);
+        break;
+
+      default:
+        /* should not happen */
+        irep->pool[i] = mrb_nil_value();
+        break;
+      }
+      irep->plen++;
+      mrb_gc_arena_restore(mrb, ai);
+    }
+  }
+
+  /* SYMS BLOCK */
+  irep->slen = (uint16_t)bin_to_uint32(src);  /* syms length */
+  src += sizeof(uint32_t);
+  if (irep->slen > 0) {
+    if (SIZE_ERROR_MUL(irep->slen, sizeof(mrb_sym))) {
+      return NULL;
+    }
+    irep->syms = (mrb_sym *)mrb_malloc(mrb, sizeof(mrb_sym) * irep->slen);
+
+    for (i = 0; i < irep->slen; i++) {
+      snl = bin_to_uint16(src);               /* symbol name length */
+      src += sizeof(uint16_t);
+
+      if (snl == MRB_DUMP_NULL_SYM_LEN) {
+        irep->syms[i] = 0;
+        continue;
+      }
+
+      if (flags & FLAG_SRC_MALLOC) {
+        irep->syms[i] = mrb_intern(mrb, (char *)src, snl);
+      }
+      else {
+        irep->syms[i] = mrb_intern_static(mrb, (char *)src, snl);
+      }
+      src += snl + 1;
+
+      mrb_gc_arena_restore(mrb, ai);
+    }
+  }
+
+  irep->reps = (mrb_irep**)mrb_malloc(mrb, sizeof(mrb_irep*)*irep->rlen);
+
+  diff = src - bin;
+  mrb_assert_int_fit(ptrdiff_t, diff, size_t, SIZE_MAX);
+  *len = (size_t)diff;
+
+  return irep;
+}
+
+static mrb_irep*
+read_irep_record(mrb_state *mrb, const uint8_t *bin, size_t *len, uint8_t flags)
+{
+  mrb_irep *irep = read_irep_record_1(mrb, bin, len, flags);
+  int i;
+
+  if (irep == NULL) {
+    return NULL;
+  }
+
+  bin += *len;
+  for (i=0; i<irep->rlen; i++) {
+    size_t rlen;
+
+    irep->reps[i] = read_irep_record(mrb, bin, &rlen, flags);
+    if (irep->reps[i] == NULL) {
+      return NULL;
+    }
+    bin += rlen;
+    *len += rlen;
+  }
+  return irep;
+}
+
+static mrb_irep*
+read_section_irep(mrb_state *mrb, const uint8_t *bin, uint8_t flags)
+{
+  size_t len;
+
+  bin += sizeof(struct rite_section_irep_header);
+  return read_irep_record(mrb, bin, &len, flags);
+}
+
+static int
+read_debug_record(mrb_state *mrb, const uint8_t *start, mrb_irep* irep, size_t *record_len, const mrb_sym *filenames, size_t filenames_len)
+{
+  const uint8_t *bin = start;
+  ptrdiff_t diff;
+  size_t record_size;
+  uint16_t f_idx;
+  int i;
+
+  if (irep->debug_info) { return MRB_DUMP_INVALID_IREP; }
+
+  irep->debug_info = (mrb_irep_debug_info*)mrb_malloc(mrb, sizeof(mrb_irep_debug_info));
+  irep->debug_info->pc_count = (uint32_t)irep->ilen;
+
+  record_size = (size_t)bin_to_uint32(bin);
+  bin += sizeof(uint32_t);
+
+  irep->debug_info->flen = bin_to_uint16(bin);
+  irep->debug_info->files = (mrb_irep_debug_info_file**)mrb_malloc(mrb, sizeof(mrb_irep_debug_info*) * irep->debug_info->flen);
+  bin += sizeof(uint16_t);
+
+  for (f_idx = 0; f_idx < irep->debug_info->flen; ++f_idx) {
+    mrb_irep_debug_info_file *file;
+    uint16_t filename_idx;
+
+    file = (mrb_irep_debug_info_file *)mrb_malloc(mrb, sizeof(*file));
+    irep->debug_info->files[f_idx] = file;
+
+    file->start_pos = bin_to_uint32(bin);
+    bin += sizeof(uint32_t);
+
+    /* filename */
+    filename_idx = bin_to_uint16(bin);
+    bin += sizeof(uint16_t);
+    mrb_assert(filename_idx < filenames_len);
+    file->filename_sym = filenames[filename_idx];
+
+    file->line_entry_count = bin_to_uint32(bin);
+    bin += sizeof(uint32_t);
+    file->line_type = (mrb_debug_line_type)bin_to_uint8(bin);
+    bin += sizeof(uint8_t);
+    switch (file->line_type) {
+      case mrb_debug_line_ary: {
+        uint32_t l;
+
+        file->lines.ary = (uint16_t *)mrb_malloc(mrb, sizeof(uint16_t) * (size_t)(file->line_entry_count));
+        for (l = 0; l < file->line_entry_count; ++l) {
+          file->lines.ary[l] = bin_to_uint16(bin);
+          bin += sizeof(uint16_t);
+        }
+      } break;
+
+      case mrb_debug_line_flat_map: {
+        uint32_t l;
+
+        file->lines.flat_map = (mrb_irep_debug_info_line*)mrb_malloc(
+            mrb, sizeof(mrb_irep_debug_info_line) * (size_t)(file->line_entry_count));
+        for (l = 0; l < file->line_entry_count; ++l) {
+          file->lines.flat_map[l].start_pos = bin_to_uint32(bin);
+          bin += sizeof(uint32_t);
+          file->lines.flat_map[l].line = bin_to_uint16(bin);
+          bin += sizeof(uint16_t);
+        }
+      } break;
+
+      default: return MRB_DUMP_GENERAL_FAILURE;
+    }
+  }
+
+  diff = bin - start;
+  mrb_assert_int_fit(ptrdiff_t, diff, size_t, SIZE_MAX);
+
+  if (record_size != (size_t)diff) {
+    return MRB_DUMP_GENERAL_FAILURE;
+  }
+
+  for (i = 0; i < irep->rlen; i++) {
+    size_t len;
+    int ret;
+
+    ret = read_debug_record(mrb, bin, irep->reps[i], &len, filenames, filenames_len);
+    if (ret != MRB_DUMP_OK) return ret;
+    bin += len;
+  }
+
+  diff = bin - start;
+  mrb_assert_int_fit(ptrdiff_t, diff, size_t, SIZE_MAX);
+  *record_len = (size_t)diff;
+
+  return MRB_DUMP_OK;
+}
+
+static int
+read_section_debug(mrb_state *mrb, const uint8_t *start, mrb_irep *irep, uint8_t flags)
+{
+  const uint8_t *bin;
+  ptrdiff_t diff;
+  struct rite_section_debug_header *header;
+  uint16_t i;
+  size_t len = 0;
+  int result;
+  uint16_t filenames_len;
+  mrb_sym *filenames;
+
+  bin = start;
+  header = (struct rite_section_debug_header *)bin;
+  bin += sizeof(struct rite_section_debug_header);
+
+  filenames_len = bin_to_uint16(bin);
+  bin += sizeof(uint16_t);
+  filenames = (mrb_sym*)mrb_malloc(mrb, sizeof(mrb_sym) * (size_t)filenames_len);
+  for (i = 0; i < filenames_len; ++i) {
+    uint16_t f_len = bin_to_uint16(bin);
+    bin += sizeof(uint16_t);
+    if (flags & FLAG_SRC_MALLOC) {
+      filenames[i] = mrb_intern(mrb, (const char *)bin, (size_t)f_len);
+    }
+    else {
+      filenames[i] = mrb_intern_static(mrb, (const char *)bin, (size_t)f_len);
+    }
+    bin += f_len;
+  }
+
+  result = read_debug_record(mrb, bin, irep, &len, filenames, filenames_len);
+  if (result != MRB_DUMP_OK) goto debug_exit;
+
+  bin += len;
+  diff = bin - start;
+  mrb_assert_int_fit(ptrdiff_t, diff, size_t, SIZE_MAX);
+  if ((uint32_t)diff != bin_to_uint32(header->section_size)) {
+    result = MRB_DUMP_GENERAL_FAILURE;
+  }
+
+debug_exit:
+  mrb_free(mrb, filenames);
+  return result;
+}
+
+static int
+read_lv_record(mrb_state *mrb, const uint8_t *start, mrb_irep *irep, size_t *record_len, mrb_sym const *syms, uint32_t syms_len)
+{
+  const uint8_t *bin = start;
+  ptrdiff_t diff;
+  int i;
+
+  irep->lv = (struct mrb_locals*)mrb_malloc(mrb, sizeof(struct mrb_locals) * (irep->nlocals - 1));
+
+  for (i = 0; i + 1< irep->nlocals; ++i) {
+    uint16_t const sym_idx = bin_to_uint16(bin);
+    bin += sizeof(uint16_t);
+    if (sym_idx == RITE_LV_NULL_MARK) {
+      irep->lv[i].name = 0;
+      irep->lv[i].r = 0;
+    }
+    else {
+      if (sym_idx >= syms_len) {
+        return MRB_DUMP_GENERAL_FAILURE;
+      }
+      irep->lv[i].name = syms[sym_idx];
+
+      irep->lv[i].r = bin_to_uint16(bin);
+    }
+    bin += sizeof(uint16_t);
+  }
+
+  for (i = 0; i < irep->rlen; ++i) {
+    size_t len;
+    int ret;
+
+    ret = read_lv_record(mrb, bin, irep->reps[i], &len, syms, syms_len);
+    if (ret != MRB_DUMP_OK) return ret;
+    bin += len;
+  }
+
+  diff = bin - start;
+  mrb_assert_int_fit(ptrdiff_t, diff, size_t, SIZE_MAX);
+  *record_len = (size_t)diff;
+
+  return MRB_DUMP_OK;
+}
+
+static int
+read_section_lv(mrb_state *mrb, const uint8_t *start, mrb_irep *irep, uint8_t flags)
+{
+  const uint8_t *bin;
+  ptrdiff_t diff;
+  struct rite_section_lv_header const *header;
+  uint32_t i;
+  size_t len = 0;
+  int result;
+  uint32_t syms_len;
+  mrb_sym *syms;
+  mrb_sym (*intern_func)(mrb_state*, const char*, size_t) =
+    (flags & FLAG_SRC_MALLOC)? mrb_intern : mrb_intern_static;
+
+  bin = start;
+  header = (struct rite_section_lv_header const*)bin;
+  bin += sizeof(struct rite_section_lv_header);
+
+  syms_len = bin_to_uint32(bin);
+  bin += sizeof(uint32_t);
+  syms = (mrb_sym*)mrb_malloc(mrb, sizeof(mrb_sym) * (size_t)syms_len);
+  for (i = 0; i < syms_len; ++i) {
+    uint16_t const str_len = bin_to_uint16(bin);
+    bin += sizeof(uint16_t);
+
+    syms[i] = intern_func(mrb, (const char*)bin, str_len);
+    bin += str_len;
+  }
+
+  result = read_lv_record(mrb, bin, irep, &len, syms, syms_len);
+  if (result != MRB_DUMP_OK) goto lv_exit;
+
+  bin += len;
+  diff = bin - start;
+  mrb_assert_int_fit(ptrdiff_t, diff, size_t, SIZE_MAX);
+  if ((uint32_t)diff != bin_to_uint32(header->section_size)) {
+    result = MRB_DUMP_GENERAL_FAILURE;
+  }
+
+lv_exit:
+  mrb_free(mrb, syms);
+  return result;
+}
+
+static int
+read_binary_header(const uint8_t *bin, size_t bufsize, size_t *bin_size, uint16_t *crc, uint8_t *flags)
+{
+  const struct rite_binary_header *header = (const struct rite_binary_header *)bin;
+
+  if (bufsize < sizeof(struct rite_binary_header)) {
+    return MRB_DUMP_READ_FAULT;
+  }
+
+  if (memcmp(header->binary_ident, RITE_BINARY_IDENT, sizeof(header->binary_ident)) == 0) {
+    if (bigendian_p())
+      *flags |= FLAG_BYTEORDER_NATIVE;
+    else
+      *flags |= FLAG_BYTEORDER_BIG;
+  }
+  else if (memcmp(header->binary_ident, RITE_BINARY_IDENT_LIL, sizeof(header->binary_ident)) == 0) {
+    if (bigendian_p())
+      *flags |= FLAG_BYTEORDER_LIL;
+    else
+      *flags |= FLAG_BYTEORDER_NATIVE;
+  }
+  else {
+    return MRB_DUMP_INVALID_FILE_HEADER;
+  }
+
+  if (memcmp(header->binary_version, RITE_BINARY_FORMAT_VER, sizeof(header->binary_version)) != 0) {
+    return MRB_DUMP_INVALID_FILE_HEADER;
+  }
+
+  if (crc) {
+    *crc = bin_to_uint16(header->binary_crc);
+  }
+  *bin_size = (size_t)bin_to_uint32(header->binary_size);
+
+  if (bufsize < *bin_size) {
+    return MRB_DUMP_READ_FAULT;
+  }
+
+  return MRB_DUMP_OK;
+}
+
+static mrb_irep*
+read_irep(mrb_state *mrb, const uint8_t *bin, size_t bufsize, uint8_t flags)
+{
+  int result;
+  mrb_irep *irep = NULL;
+  const struct rite_section_header *section_header;
+  uint16_t crc;
+  size_t bin_size = 0;
+  size_t n;
+
+  if ((mrb == NULL) || (bin == NULL)) {
+    return NULL;
+  }
+
+  result = read_binary_header(bin, bufsize, &bin_size, &crc, &flags);
+  if (result != MRB_DUMP_OK) {
+    return NULL;
+  }
+
+  n = offset_crc_body();
+  if (crc != calc_crc_16_ccitt(bin + n, bin_size - n, 0)) {
+    return NULL;
+  }
+
+  bin += sizeof(struct rite_binary_header);
+  do {
+    section_header = (const struct rite_section_header *)bin;
+    if (memcmp(section_header->section_ident, RITE_SECTION_IREP_IDENT, sizeof(section_header->section_ident)) == 0) {
+      irep = read_section_irep(mrb, bin, flags);
+      if (!irep) return NULL;
+    }
+    else if (memcmp(section_header->section_ident, RITE_SECTION_DEBUG_IDENT, sizeof(section_header->section_ident)) == 0) {
+      if (!irep) return NULL;   /* corrupted data */
+      result = read_section_debug(mrb, bin, irep, flags);
+      if (result < MRB_DUMP_OK) {
+        return NULL;
+      }
+    }
+    else if (memcmp(section_header->section_ident, RITE_SECTION_LV_IDENT, sizeof(section_header->section_ident)) == 0) {
+      if (!irep) return NULL;
+      result = read_section_lv(mrb, bin, irep, flags);
+      if (result < MRB_DUMP_OK) {
+        return NULL;
+      }
+    }
+    bin += bin_to_uint32(section_header->section_size);
+  } while (memcmp(section_header->section_ident, RITE_BINARY_EOF, sizeof(section_header->section_ident)) != 0);
+
+  return irep;
+}
+
+mrb_irep*
+mrb_read_irep(mrb_state *mrb, const uint8_t *bin)
+{
+#if defined(MRB_USE_LINK_TIME_RO_DATA_P) || defined(MRB_USE_CUSTOM_RO_DATA_P)
+  uint8_t flags = mrb_ro_data_p((char*)bin) ? FLAG_SRC_STATIC : FLAG_SRC_MALLOC;
+#else
+  uint8_t flags = FLAG_SRC_STATIC;
+#endif
+
+  return read_irep(mrb, bin, (size_t)-1, flags);
+}
+
+MRB_API mrb_irep*
+mrb_read_irep_buf(mrb_state *mrb, const void *buf, size_t bufsize)
+{
+  return read_irep(mrb, (const uint8_t *)buf, bufsize, FLAG_SRC_MALLOC);
+}
+
+void mrb_exc_set(mrb_state *mrb, mrb_value exc);
+
+static void
+irep_error(mrb_state *mrb)
+{
+  mrb_exc_set(mrb, mrb_exc_new_str_lit(mrb, E_SCRIPT_ERROR, "irep load error"));
+}
+
+void mrb_codedump_all(mrb_state*, struct RProc*);
+
+static mrb_value
+load_irep(mrb_state *mrb, mrb_irep *irep, mrbc_context *c)
+{
+  struct RProc *proc;
+
+  if (!irep) {
+    irep_error(mrb);
+    return mrb_nil_value();
+  }
+  proc = mrb_proc_new(mrb, irep);
+  proc->c = NULL;
+  mrb_irep_decref(mrb, irep);
+  if (c && c->dump_result) mrb_codedump_all(mrb, proc);
+  if (c && c->no_exec) return mrb_obj_value(proc);
+  return mrb_top_run(mrb, proc, mrb_top_self(mrb), 0);
+}
+
+MRB_API mrb_value
+mrb_load_irep_cxt(mrb_state *mrb, const uint8_t *bin, mrbc_context *c)
+{
+  return load_irep(mrb, mrb_read_irep(mrb, bin), c);
+}
+
+MRB_API mrb_value
+mrb_load_irep_buf_cxt(mrb_state *mrb, const void *buf, size_t bufsize, mrbc_context *c)
+{
+  return load_irep(mrb, mrb_read_irep_buf(mrb, buf, bufsize), c);
+}
+
+MRB_API mrb_value
+mrb_load_irep(mrb_state *mrb, const uint8_t *bin)
+{
+  return mrb_load_irep_cxt(mrb, bin, NULL);
+}
+
+MRB_API mrb_value
+mrb_load_irep_buf(mrb_state *mrb, const void *buf, size_t bufsize)
+{
+  return mrb_load_irep_buf_cxt(mrb, buf, bufsize, NULL);
+}
+
+#ifndef MRB_DISABLE_STDIO
+
+mrb_irep*
+mrb_read_irep_file(mrb_state *mrb, FILE* fp)
+{
+  mrb_irep *irep = NULL;
+  uint8_t *buf;
+  const size_t header_size = sizeof(struct rite_binary_header);
+  size_t buf_size = 0;
+  uint8_t flags = 0;
+  int result;
+
+  if ((mrb == NULL) || (fp == NULL)) {
+    return NULL;
+  }
+
+  buf = (uint8_t*)mrb_malloc(mrb, header_size);
+  if (fread(buf, header_size, 1, fp) == 0) {
+    goto irep_exit;
+  }
+  result = read_binary_header(buf, (size_t)-1, &buf_size, NULL, &flags);
+  if (result != MRB_DUMP_OK || buf_size <= header_size) {
+    goto irep_exit;
+  }
+
+  buf = (uint8_t*)mrb_realloc(mrb, buf, buf_size);
+  if (fread(buf+header_size, buf_size-header_size, 1, fp) == 0) {
+    goto irep_exit;
+  }
+  irep = read_irep(mrb, buf, (size_t)-1, FLAG_SRC_MALLOC);
+
+irep_exit:
+  mrb_free(mrb, buf);
+  return irep;
+}
+
+MRB_API mrb_value
+mrb_load_irep_file_cxt(mrb_state *mrb, FILE* fp, mrbc_context *c)
+{
+  return load_irep(mrb, mrb_read_irep_file(mrb, fp), c);
+}
+
+MRB_API mrb_value
+mrb_load_irep_file(mrb_state *mrb, FILE* fp)
+{
+  return mrb_load_irep_file_cxt(mrb, fp, NULL);
+}
+#endif /* MRB_DISABLE_STDIO */
Index: /EcnlProtoTool/trunk/mruby-2.1.1/src/mruby_core.rake
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/src/mruby_core.rake	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/src/mruby_core.rake	(revision 439)
@@ -0,0 +1,19 @@
+MRuby.each_target do
+  current_dir = File.dirname(__FILE__).relative_path_from(Dir.pwd)
+  relative_from_root = File.dirname(__FILE__).relative_path_from(MRUBY_ROOT)
+  current_build_dir = "#{build_dir}/#{relative_from_root}"
+
+  objs = Dir.glob("#{current_dir}/*.c").map { |f|
+    next nil if cxx_exception_enabled? and f =~ /(error|vm).c$/
+    objfile(f.pathmap("#{current_build_dir}/%n"))
+  }.compact
+
+  if cxx_exception_enabled?
+    objs += %w(vm error).map { |v| compile_as_cxx "#{current_dir}/#{v}.c", "#{current_build_dir}/#{v}.cxx" }
+  end
+  self.libmruby_objs << objs
+
+  file libmruby_core_static => objs do |t|
+    archiver.run t.name, t.prerequisites
+  end
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/src/numeric.c
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/src/numeric.c	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/src/numeric.c	(revision 439)
@@ -0,0 +1,1708 @@
+/*
+** numeric.c - Numeric, Integer, Float, Fixnum class
+**
+** See Copyright Notice in mruby.h
+*/
+
+#ifndef MRB_WITHOUT_FLOAT
+#include <float.h>
+#include <math.h>
+#endif
+#include <limits.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <mruby.h>
+#include <mruby/array.h>
+#include <mruby/numeric.h>
+#include <mruby/string.h>
+#include <mruby/class.h>
+
+#ifndef MRB_WITHOUT_FLOAT
+#ifdef MRB_USE_FLOAT
+#define trunc(f) truncf(f)
+#define floor(f) floorf(f)
+#define ceil(f) ceilf(f)
+#define fmod(x,y) fmodf(x,y)
+#define FLO_TO_STR_PREC 8
+#else
+#define FLO_TO_STR_PREC 16
+#endif
+#endif
+
+#ifndef MRB_WITHOUT_FLOAT
+MRB_API mrb_float
+mrb_to_flo(mrb_state *mrb, mrb_value val)
+{
+  switch (mrb_type(val)) {
+  case MRB_TT_FIXNUM:
+    return (mrb_float)mrb_fixnum(val);
+  case MRB_TT_FLOAT:
+    break;
+  default:
+    mrb_raise(mrb, E_TYPE_ERROR, "non float value");
+  }
+  return mrb_float(val);
+}
+
+MRB_API mrb_value
+mrb_int_value(mrb_state *mrb, mrb_float f)
+{
+  if (FIXABLE_FLOAT(f)) {
+    return mrb_fixnum_value((mrb_int)f);
+  }
+  return mrb_float_value(mrb, f);
+}
+#endif
+
+/*
+ * call-seq:
+ *
+ *  num ** other  ->  num
+ *
+ * Raises <code>num</code> the <code>other</code> power.
+ *
+ *    2.0**3      #=> 8.0
+ */
+static mrb_value
+integral_pow(mrb_state *mrb, mrb_value x)
+{
+  mrb_value y;
+#ifndef MRB_WITHOUT_FLOAT
+  mrb_float d;
+#endif
+
+  mrb_get_args(mrb, "o", &y);
+  if (mrb_fixnum_p(x) && mrb_fixnum_p(y)) {
+    /* try ipow() */
+    mrb_int base = mrb_fixnum(x);
+    mrb_int exp = mrb_fixnum(y);
+    mrb_int result = 1;
+
+    if (exp < 0)
+#ifdef MRB_WITHOUT_FLOAT
+      return mrb_fixnum_value(0);
+#else
+      goto float_pow;
+#endif
+    for (;;) {
+      if (exp & 1) {
+        if (mrb_int_mul_overflow(result, base, &result)) {
+#ifndef MRB_WITHOUT_FLOAT
+          goto float_pow;
+#endif
+        }
+      }
+      exp >>= 1;
+      if (exp == 0) break;
+      if (mrb_int_mul_overflow(base, base, &base)) {
+#ifndef MRB_WITHOUT_FLOAT
+        goto float_pow;
+#endif
+      }
+    }
+    return mrb_fixnum_value(result);
+  }
+#ifdef MRB_WITHOUT_FLOAT
+  mrb_raise(mrb, E_TYPE_ERROR, "non fixnum value");
+#else
+ float_pow:
+  d = pow(mrb_to_flo(mrb, x), mrb_to_flo(mrb, y));
+  return mrb_float_value(mrb, d);
+#endif
+}
+
+static mrb_value
+integral_idiv(mrb_state *mrb, mrb_value x)
+{
+#ifdef MRB_WITHOUT_FLOAT
+  mrb_value y;
+
+  mrb_get_args(mrb, "o", &y);
+  if (!mrb_fixnum_p(y)) {
+    mrb_raise(mrb, E_TYPE_ERROR, "non fixnum value");
+  }
+  return mrb_fixnum_value(mrb_fixnum(x) / mrb_fixnum(y));
+#else
+  mrb_float y;
+
+  mrb_get_args(mrb, "f", &y);
+  return mrb_int_value(mrb, mrb_to_flo(mrb, x) / y);
+#endif
+}
+
+/* 15.2.8.3.4  */
+/* 15.2.9.3.4  */
+/*
+ * call-seq:
+ *   num / other  ->  num
+ *
+ * Performs division: the class of the resulting object depends on
+ * the class of <code>num</code> and on the magnitude of the
+ * result.
+ */
+
+/* 15.2.9.3.19(x) */
+/*
+ *  call-seq:
+ *     num.quo(numeric)  ->  real
+ *
+ *  Returns most exact division.
+ */
+
+static mrb_value
+integral_div(mrb_state *mrb, mrb_value x)
+{
+#ifdef MRB_WITHOUT_FLOAT
+  mrb_value y;
+
+  mrb_get_args(mrb, "o", &y);
+  if (!mrb_fixnum_p(y)) {
+    mrb_raise(mrb, E_TYPE_ERROR, "non fixnum value");
+  }
+  return mrb_fixnum_value(mrb_fixnum(x) / mrb_fixnum(y));
+#else
+  mrb_float y;
+
+  mrb_get_args(mrb, "f", &y);
+  return mrb_float_value(mrb, mrb_to_flo(mrb, x) / y);
+#endif
+}
+
+static mrb_value
+integral_coerce_step_counter(mrb_state *mrb, mrb_value self)
+{
+  mrb_value num, step;
+
+  mrb_get_args(mrb, "oo", &num, &step);
+
+#ifndef MRB_WITHOUT_FLOAT
+  if (mrb_float_p(self) || mrb_float_p(num) || mrb_float_p(step)) {
+    return mrb_Float(mrb, self);
+  }
+#endif
+
+  return self;
+}
+
+#ifndef MRB_WITHOUT_FLOAT
+/********************************************************************
+ *
+ * Document-class: Float
+ *
+ *  <code>Float</code> objects represent inexact real numbers using
+ *  the native architecture's double-precision floating point
+ *  representation.
+ */
+
+/* 15.2.9.3.16(x) */
+/*
+ *  call-seq:
+ *     flt.to_s  ->  string
+ *
+ *  Returns a string containing a representation of self. As well as a
+ *  fixed or exponential form of the number, the call may return
+ *  "<code>NaN</code>", "<code>Infinity</code>", and
+ *  "<code>-Infinity</code>".
+ */
+
+static mrb_value
+flo_to_s(mrb_state *mrb, mrb_value flt)
+{
+  mrb_float f = mrb_float(flt);
+
+  if (isinf(f)) {
+    return f < 0 ? mrb_str_new_lit(mrb, "-Infinity")
+                 : mrb_str_new_lit(mrb, "Infinity");
+  }
+  else if (isnan(f)) {
+    return mrb_str_new_lit(mrb, "NaN");
+  }
+  else {
+    char fmt[] = "%." MRB_STRINGIZE(FLO_TO_STR_PREC) "g";
+    mrb_value str = mrb_float_to_str(mrb, flt, fmt);
+    mrb_int len;
+    char *begp, *p, *endp;
+
+    insert_dot_zero:
+    begp = RSTRING_PTR(str);
+    len = RSTRING_LEN(str);
+    for (p = begp, endp = p + len; p < endp; ++p) {
+      if (*p == '.') {
+        return str;
+      }
+      else if (*p == 'e') {
+        ptrdiff_t e_pos = p - begp;
+        mrb_str_cat(mrb, str, ".0", 2);
+        p = RSTRING_PTR(str) + e_pos;
+        memmove(p + 2, p, len - e_pos);
+        memcpy(p, ".0", 2);
+        return str;
+      }
+    }
+
+    if (FLO_TO_STR_PREC + (begp[0] == '-') <= len) {
+      --fmt[sizeof(fmt) - 3];  /* %.16g(%.8g) -> %.15g(%.7g) */
+      str = mrb_float_to_str(mrb, flt, fmt);
+      goto insert_dot_zero;
+    }
+
+    return str;
+  }
+}
+
+/* 15.2.9.3.2  */
+/*
+ * call-seq:
+ *   float - other  ->  float
+ *
+ * Returns a new float which is the difference of <code>float</code>
+ * and <code>other</code>.
+ */
+
+static mrb_value
+flo_minus(mrb_state *mrb, mrb_value x)
+{
+  mrb_value y;
+
+  mrb_get_args(mrb, "o", &y);
+  return mrb_float_value(mrb, mrb_float(x) - mrb_to_flo(mrb, y));
+}
+
+/* 15.2.9.3.3  */
+/*
+ * call-seq:
+ *   float * other  ->  float
+ *
+ * Returns a new float which is the product of <code>float</code>
+ * and <code>other</code>.
+ */
+
+static mrb_value
+flo_mul(mrb_state *mrb, mrb_value x)
+{
+  mrb_value y;
+
+  mrb_get_args(mrb, "o", &y);
+  return mrb_float_value(mrb, mrb_float(x) * mrb_to_flo(mrb, y));
+}
+
+static void
+flodivmod(mrb_state *mrb, double x, double y, mrb_float *divp, mrb_float *modp)
+{
+  double div, mod;
+
+  if (isnan(y)) {
+    /* y is NaN so all results are NaN */
+    div = mod = y;
+    goto exit;
+  }
+  if (y == 0.0) {
+    if (x == 0) div = NAN;
+    else if (x > 0.0) div = INFINITY;
+    else div = -INFINITY;       /* x < 0.0 */
+    mod = NAN;
+    goto exit;
+  }
+  if ((x == 0.0) || (isinf(y) && !isinf(x))) {
+    mod = x;
+  }
+  else {
+    mod = fmod(x, y);
+  }
+  if (isinf(x) && !isinf(y)) {
+    div = x;
+  }
+  else {
+    div = (x - mod) / y;
+    if (modp && divp) div = round(div);
+  }
+  if (div == 0) div = 0.0;
+  if (mod == 0) mod = 0.0;
+  if (y*mod < 0) {
+    mod += y;
+    div -= 1.0;
+  }
+ exit:
+  if (modp) *modp = mod;
+  if (divp) *divp = div;
+}
+
+/* 15.2.9.3.5  */
+/*
+ *  call-seq:
+ *     flt % other        ->  float
+ *     flt.modulo(other)  ->  float
+ *
+ *  Return the modulo after division of <code>flt</code> by <code>other</code>.
+ *
+ *     6543.21.modulo(137)      #=> 104.21
+ *     6543.21.modulo(137.24)   #=> 92.9299999999996
+ */
+
+static mrb_value
+flo_mod(mrb_state *mrb, mrb_value x)
+{
+  mrb_value y;
+  mrb_float mod;
+
+  mrb_get_args(mrb, "o", &y);
+
+  flodivmod(mrb, mrb_float(x), mrb_to_flo(mrb, y), 0, &mod);
+  return mrb_float_value(mrb, mod);
+}
+#endif
+
+/* 15.2.8.3.16 */
+/*
+ *  call-seq:
+ *     num.eql?(numeric)  ->  true or false
+ *
+ *  Returns <code>true</code> if <i>num</i> and <i>numeric</i> are the
+ *  same type and have equal values.
+ *
+ *     1 == 1.0          #=> true
+ *     1.eql?(1.0)       #=> false
+ *     (1.0).eql?(1.0)   #=> true
+ */
+static mrb_value
+fix_eql(mrb_state *mrb, mrb_value x)
+{
+  mrb_value y;
+
+  mrb_get_args(mrb, "o", &y);
+  if (!mrb_fixnum_p(y)) return mrb_false_value();
+  return mrb_bool_value(mrb_fixnum(x) == mrb_fixnum(y));
+}
+
+#ifndef MRB_WITHOUT_FLOAT
+static mrb_value
+flo_eql(mrb_state *mrb, mrb_value x)
+{
+  mrb_value y;
+
+  mrb_get_args(mrb, "o", &y);
+  if (!mrb_float_p(y)) return mrb_false_value();
+  return mrb_bool_value(mrb_float(x) == mrb_float(y));
+}
+
+/* 15.2.9.3.7  */
+/*
+ *  call-seq:
+ *     flt == obj  ->  true or false
+ *
+ *  Returns <code>true</code> only if <i>obj</i> has the same value
+ *  as <i>flt</i>. Contrast this with <code>Float#eql?</code>, which
+ *  requires <i>obj</i> to be a <code>Float</code>.
+ *
+ *     1.0 == 1   #=> true
+ *
+ */
+
+static mrb_value
+flo_eq(mrb_state *mrb, mrb_value x)
+{
+  mrb_value y;
+  mrb_get_args(mrb, "o", &y);
+
+  switch (mrb_type(y)) {
+  case MRB_TT_FIXNUM:
+    return mrb_bool_value(mrb_float(x) == (mrb_float)mrb_fixnum(y));
+  case MRB_TT_FLOAT:
+    return mrb_bool_value(mrb_float(x) == mrb_float(y));
+  default:
+    return mrb_false_value();
+  }
+}
+
+static int64_t
+value_int64(mrb_state *mrb, mrb_value x)
+{
+  switch (mrb_type(x)) {
+  case MRB_TT_FIXNUM:
+    return (int64_t)mrb_fixnum(x);
+    break;
+  case MRB_TT_FLOAT:
+    return (int64_t)mrb_float(x);
+  default:
+    mrb_raise(mrb, E_TYPE_ERROR, "cannot convert to Integer");
+    break;
+  }
+  /* not reached */
+  return 0;
+}
+
+static mrb_value
+int64_value(mrb_state *mrb, int64_t v)
+{
+  if (TYPED_FIXABLE(v,int64_t)) {
+    return mrb_fixnum_value((mrb_int)v);
+  }
+  return mrb_float_value(mrb, (mrb_float)v);
+}
+
+static mrb_value
+flo_rev(mrb_state *mrb, mrb_value x)
+{
+  int64_t v1;
+  v1 = (int64_t)mrb_float(x);
+  return int64_value(mrb, ~v1);
+}
+
+static mrb_value
+flo_and(mrb_state *mrb, mrb_value x)
+{
+  mrb_value y;
+  int64_t v1, v2;
+  mrb_get_args(mrb, "o", &y);
+
+  v1 = (int64_t)mrb_float(x);
+  v2 = value_int64(mrb, y);
+  return int64_value(mrb, v1 & v2);
+}
+
+static mrb_value
+flo_or(mrb_state *mrb, mrb_value x)
+{
+  mrb_value y;
+  int64_t v1, v2;
+  mrb_get_args(mrb, "o", &y);
+
+  v1 = (int64_t)mrb_float(x);
+  v2 = value_int64(mrb, y);
+  return int64_value(mrb, v1 | v2);
+}
+
+static mrb_value
+flo_xor(mrb_state *mrb, mrb_value x)
+{
+  mrb_value y;
+  int64_t v1, v2;
+  mrb_get_args(mrb, "o", &y);
+
+  v1 = (int64_t)mrb_float(x);
+  v2 = value_int64(mrb, y);
+  return int64_value(mrb, v1 ^ v2);
+}
+
+static mrb_value
+flo_shift(mrb_state *mrb, mrb_value x, mrb_int width)
+{
+  mrb_float val;
+
+  if (width == 0) {
+    return x;
+  }
+  val = mrb_float(x);
+  if (width < 0) {
+    while (width++) {
+      val /= 2;
+      if (val < 1.0) {
+        val = 0;
+        break;
+      }
+    }
+#if defined(_ISOC99_SOURCE)
+    val = trunc(val);
+#else
+    if (val > 0){
+        val = floor(val);
+    } else {
+        val = ceil(val);
+    }
+#endif
+    if (val == 0 && mrb_float(x) < 0) {
+      return mrb_fixnum_value(-1);
+    }
+  }
+  else {
+    while (width--) {
+      val *= 2;
+    }
+  }
+  return mrb_int_value(mrb, val);
+}
+
+static mrb_value
+flo_rshift(mrb_state *mrb, mrb_value x)
+{
+  mrb_int width;
+
+  mrb_get_args(mrb, "i", &width);
+  return flo_shift(mrb, x, -width);
+}
+
+static mrb_value
+flo_lshift(mrb_state *mrb, mrb_value x)
+{
+  mrb_int width;
+
+  mrb_get_args(mrb, "i", &width);
+  return flo_shift(mrb, x, width);
+}
+
+/* 15.2.9.3.13 */
+/*
+ * call-seq:
+ *   flt.to_f  ->  self
+ *
+ * As <code>flt</code> is already a float, returns +self+.
+ */
+
+static mrb_value
+flo_to_f(mrb_state *mrb, mrb_value num)
+{
+  return num;
+}
+
+/* 15.2.9.3.11 */
+/*
+ *  call-seq:
+ *     flt.infinite?  ->  nil, -1, +1
+ *
+ *  Returns <code>nil</code>, -1, or +1 depending on whether <i>flt</i>
+ *  is finite, -infinity, or +infinity.
+ *
+ *     (0.0).infinite?        #=> nil
+ *     (-1.0/0.0).infinite?   #=> -1
+ *     (+1.0/0.0).infinite?   #=> 1
+ */
+
+static mrb_value
+flo_infinite_p(mrb_state *mrb, mrb_value num)
+{
+  mrb_float value = mrb_float(num);
+
+  if (isinf(value)) {
+    return mrb_fixnum_value(value < 0 ? -1 : 1);
+  }
+  return mrb_nil_value();
+}
+
+/* 15.2.9.3.9  */
+/*
+ *  call-seq:
+ *     flt.finite?  ->  true or false
+ *
+ *  Returns <code>true</code> if <i>flt</i> is a valid IEEE floating
+ *  point number (it is not infinite, and <code>nan?</code> is
+ *  <code>false</code>).
+ *
+ */
+
+static mrb_value
+flo_finite_p(mrb_state *mrb, mrb_value num)
+{
+  return mrb_bool_value(isfinite(mrb_float(num)));
+}
+
+void
+mrb_check_num_exact(mrb_state *mrb, mrb_float num)
+{
+  if (isinf(num)) {
+    mrb_raise(mrb, E_FLOATDOMAIN_ERROR, num < 0 ? "-Infinity" : "Infinity");
+  }
+  if (isnan(num)) {
+    mrb_raise(mrb, E_FLOATDOMAIN_ERROR, "NaN");
+  }
+}
+
+/* 15.2.9.3.10 */
+/*
+ *  call-seq:
+ *     flt.floor  ->  integer
+ *
+ *  Returns the largest integer less than or equal to <i>flt</i>.
+ *
+ *     1.2.floor      #=> 1
+ *     2.0.floor      #=> 2
+ *     (-1.2).floor   #=> -2
+ *     (-2.0).floor   #=> -2
+ */
+
+static mrb_value
+flo_floor(mrb_state *mrb, mrb_value num)
+{
+  mrb_float f = floor(mrb_float(num));
+
+  mrb_check_num_exact(mrb, f);
+  return mrb_int_value(mrb, f);
+}
+
+/* 15.2.9.3.8  */
+/*
+ *  call-seq:
+ *     flt.ceil  ->  integer
+ *
+ *  Returns the smallest <code>Integer</code> greater than or equal to
+ *  <i>flt</i>.
+ *
+ *     1.2.ceil      #=> 2
+ *     2.0.ceil      #=> 2
+ *     (-1.2).ceil   #=> -1
+ *     (-2.0).ceil   #=> -2
+ */
+
+static mrb_value
+flo_ceil(mrb_state *mrb, mrb_value num)
+{
+  mrb_float f = ceil(mrb_float(num));
+
+  mrb_check_num_exact(mrb, f);
+  return mrb_int_value(mrb, f);
+}
+
+/* 15.2.9.3.12 */
+/*
+ *  call-seq:
+ *     flt.round([ndigits])  ->  integer or float
+ *
+ *  Rounds <i>flt</i> to a given precision in decimal digits (default 0 digits).
+ *  Precision may be negative.  Returns a floating point number when ndigits
+ *  is more than zero.
+ *
+ *     1.4.round      #=> 1
+ *     1.5.round      #=> 2
+ *     1.6.round      #=> 2
+ *     (-1.5).round   #=> -2
+ *
+ *     1.234567.round(2)  #=> 1.23
+ *     1.234567.round(3)  #=> 1.235
+ *     1.234567.round(4)  #=> 1.2346
+ *     1.234567.round(5)  #=> 1.23457
+ *
+ *     34567.89.round(-5) #=> 0
+ *     34567.89.round(-4) #=> 30000
+ *     34567.89.round(-3) #=> 35000
+ *     34567.89.round(-2) #=> 34600
+ *     34567.89.round(-1) #=> 34570
+ *     34567.89.round(0)  #=> 34568
+ *     34567.89.round(1)  #=> 34567.9
+ *     34567.89.round(2)  #=> 34567.89
+ *     34567.89.round(3)  #=> 34567.89
+ *
+ */
+
+static mrb_value
+flo_round(mrb_state *mrb, mrb_value num)
+{
+  double number, f;
+  mrb_int ndigits = 0;
+  mrb_int i;
+
+  mrb_get_args(mrb, "|i", &ndigits);
+  number = mrb_float(num);
+
+  if (0 < ndigits && (isinf(number) || isnan(number))) {
+    return num;
+  }
+  mrb_check_num_exact(mrb, number);
+
+  f = 1.0;
+  i = ndigits >= 0 ? ndigits : -ndigits;
+  if (ndigits > DBL_DIG+2) return num;
+  while  (--i >= 0)
+    f = f*10.0;
+
+  if (isinf(f)) {
+    if (ndigits < 0) number = 0;
+  }
+  else {
+    double d;
+
+    if (ndigits < 0) number /= f;
+    else number *= f;
+
+    /* home-made inline implementation of round(3) */
+    if (number > 0.0) {
+      d = floor(number);
+      number = d + (number - d >= 0.5);
+    }
+    else if (number < 0.0) {
+      d = ceil(number);
+      number = d - (d - number >= 0.5);
+    }
+
+    if (ndigits < 0) number *= f;
+    else number /= f;
+  }
+
+  if (ndigits > 0) {
+    if (!isfinite(number)) return num;
+    return mrb_float_value(mrb, number);
+  }
+  return mrb_int_value(mrb, number);
+}
+
+/* 15.2.9.3.14 */
+/* 15.2.9.3.15 */
+/*
+ *  call-seq:
+ *     flt.to_i      ->  integer
+ *     flt.truncate  ->  integer
+ *
+ *  Returns <i>flt</i> truncated to an <code>Integer</code>.
+ */
+
+static mrb_value
+flo_truncate(mrb_state *mrb, mrb_value num)
+{
+  mrb_float f = mrb_float(num);
+
+  if (f > 0.0) f = floor(f);
+  if (f < 0.0) f = ceil(f);
+
+  mrb_check_num_exact(mrb, f);
+  return mrb_int_value(mrb, f);
+}
+
+static mrb_value
+flo_nan_p(mrb_state *mrb, mrb_value num)
+{
+  return mrb_bool_value(isnan(mrb_float(num)));
+}
+#endif
+
+/*
+ * Document-class: Integer
+ *
+ *  <code>Integer</code> is the basis for the two concrete classes that
+ *  hold whole numbers, <code>Bignum</code> and <code>Fixnum</code>.
+ *
+ */
+
+
+/*
+ *  call-seq:
+ *     int.to_i      ->  integer
+ *
+ *  As <i>int</i> is already an <code>Integer</code>, all these
+ *  methods simply return the receiver.
+ */
+
+static mrb_value
+int_to_i(mrb_state *mrb, mrb_value num)
+{
+  return num;
+}
+
+static mrb_value
+fixnum_mul(mrb_state *mrb, mrb_value x, mrb_value y)
+{
+  mrb_int a;
+
+  a = mrb_fixnum(x);
+  if (mrb_fixnum_p(y)) {
+    mrb_int b, c;
+
+    if (a == 0) return x;
+    b = mrb_fixnum(y);
+    if (mrb_int_mul_overflow(a, b, &c)) {
+#ifndef MRB_WITHOUT_FLOAT
+      return mrb_float_value(mrb, (mrb_float)a * (mrb_float)b);
+#endif
+    }
+    return mrb_fixnum_value(c);
+  }
+#ifdef MRB_WITHOUT_FLOAT
+  mrb_raise(mrb, E_TYPE_ERROR, "non fixnum value");
+#else
+  return mrb_float_value(mrb, (mrb_float)a * mrb_to_flo(mrb, y));
+#endif
+}
+
+MRB_API mrb_value
+mrb_num_mul(mrb_state *mrb, mrb_value x, mrb_value y)
+{
+  if (mrb_fixnum_p(x)) {
+    return fixnum_mul(mrb, x, y);
+  }
+#ifndef MRB_WITHOUT_FLOAT
+  if (mrb_float_p(x)) {
+    return mrb_float_value(mrb, mrb_float(x) * mrb_to_flo(mrb, y));
+  }
+#endif
+  mrb_raise(mrb, E_TYPE_ERROR, "no number multiply");
+  return mrb_nil_value();       /* not reached */
+}
+
+/* 15.2.8.3.3  */
+/*
+ * call-seq:
+ *   fix * numeric  ->  numeric_result
+ *
+ * Performs multiplication: the class of the resulting object depends on
+ * the class of <code>numeric</code> and on the magnitude of the
+ * result.
+ */
+
+static mrb_value
+fix_mul(mrb_state *mrb, mrb_value x)
+{
+  mrb_value y;
+
+  mrb_get_args(mrb, "o", &y);
+  return fixnum_mul(mrb, x, y);
+}
+
+static void
+fixdivmod(mrb_state *mrb, mrb_int x, mrb_int y, mrb_int *divp, mrb_int *modp)
+{
+  mrb_int div, mod;
+
+  /* TODO: add mrb_assert(y != 0) to make sure */
+
+  if (y < 0) {
+    if (x < 0)
+      div = -x / -y;
+    else
+      div = - (x / -y);
+  }
+  else {
+    if (x < 0)
+      div = - (-x / y);
+    else
+      div = x / y;
+  }
+  mod = x - div*y;
+  if ((mod < 0 && y > 0) || (mod > 0 && y < 0)) {
+    mod += y;
+    div -= 1;
+  }
+  if (divp) *divp = div;
+  if (modp) *modp = mod;
+}
+
+/* 15.2.8.3.5  */
+/*
+ *  call-seq:
+ *    fix % other        ->  real
+ *    fix.modulo(other)  ->  real
+ *
+ *  Returns <code>fix</code> modulo <code>other</code>.
+ *  See <code>numeric.divmod</code> for more information.
+ */
+
+static mrb_value
+fix_mod(mrb_state *mrb, mrb_value x)
+{
+  mrb_value y;
+  mrb_int a, b;
+
+  mrb_get_args(mrb, "o", &y);
+  a = mrb_fixnum(x);
+   if (mrb_fixnum_p(y) && a != MRB_INT_MIN && (b=mrb_fixnum(y)) != MRB_INT_MIN) {
+    mrb_int mod;
+
+    if (b == 0) {
+#ifdef MRB_WITHOUT_FLOAT
+      /* ZeroDivisionError */
+      return mrb_fixnum_value(0);
+#else
+      if (a > 0) return mrb_float_value(mrb, INFINITY);
+      if (a < 0) return mrb_float_value(mrb, INFINITY);
+      return mrb_float_value(mrb, NAN);
+#endif
+    }
+    fixdivmod(mrb, a, b, NULL, &mod);
+    return mrb_fixnum_value(mod);
+  }
+#ifdef MRB_WITHOUT_FLOAT
+  mrb_raise(mrb, E_TYPE_ERROR, "non fixnum value");
+#else
+  else {
+    mrb_float mod;
+
+    flodivmod(mrb, (mrb_float)a, mrb_to_flo(mrb, y), NULL, &mod);
+    return mrb_float_value(mrb, mod);
+  }
+#endif
+}
+
+/*
+ *  call-seq:
+ *     fix.divmod(numeric)  ->  array
+ *
+ *  See <code>Numeric#divmod</code>.
+ */
+static mrb_value
+fix_divmod(mrb_state *mrb, mrb_value x)
+{
+  mrb_value y;
+
+  mrb_get_args(mrb, "o", &y);
+
+  if (mrb_fixnum_p(y)) {
+    mrb_int div, mod;
+
+    if (mrb_fixnum(y) == 0) {
+#ifdef MRB_WITHOUT_FLOAT
+      return mrb_assoc_new(mrb, mrb_fixnum_value(0), mrb_fixnum_value(0));
+#else
+      return mrb_assoc_new(mrb, ((mrb_fixnum(x) == 0) ?
+                                 mrb_float_value(mrb, NAN):
+                                 mrb_float_value(mrb, INFINITY)),
+                           mrb_float_value(mrb, NAN));
+#endif
+    }
+    fixdivmod(mrb, mrb_fixnum(x), mrb_fixnum(y), &div, &mod);
+    return mrb_assoc_new(mrb, mrb_fixnum_value(div), mrb_fixnum_value(mod));
+  }
+#ifdef MRB_WITHOUT_FLOAT
+  mrb_raise(mrb, E_TYPE_ERROR, "non fixnum value");
+#else
+  else {
+    mrb_float div, mod;
+    mrb_value a, b;
+
+    flodivmod(mrb, (mrb_float)mrb_fixnum(x), mrb_to_flo(mrb, y), &div, &mod);
+    a = mrb_int_value(mrb, div);
+    b = mrb_float_value(mrb, mod);
+    return mrb_assoc_new(mrb, a, b);
+  }
+#endif
+}
+
+#ifndef MRB_WITHOUT_FLOAT
+static mrb_value
+flo_divmod(mrb_state *mrb, mrb_value x)
+{
+  mrb_value y;
+  mrb_float div, mod;
+  mrb_value a, b;
+
+  mrb_get_args(mrb, "o", &y);
+
+  flodivmod(mrb, mrb_float(x), mrb_to_flo(mrb, y), &div, &mod);
+  a = mrb_int_value(mrb, div);
+  b = mrb_float_value(mrb, mod);
+  return mrb_assoc_new(mrb, a, b);
+}
+#endif
+
+/* 15.2.8.3.7  */
+/*
+ * call-seq:
+ *   fix == other  ->  true or false
+ *
+ * Return <code>true</code> if <code>fix</code> equals <code>other</code>
+ * numerically.
+ *
+ *   1 == 2      #=> false
+ *   1 == 1.0    #=> true
+ */
+
+static mrb_value
+fix_equal(mrb_state *mrb, mrb_value x)
+{
+  mrb_value y;
+
+  mrb_get_args(mrb, "o", &y);
+  switch (mrb_type(y)) {
+  case MRB_TT_FIXNUM:
+    return mrb_bool_value(mrb_fixnum(x) == mrb_fixnum(y));
+#ifndef MRB_WITHOUT_FLOAT
+  case MRB_TT_FLOAT:
+    return mrb_bool_value((mrb_float)mrb_fixnum(x) == mrb_float(y));
+#endif
+  default:
+    return mrb_false_value();
+  }
+}
+
+/* 15.2.8.3.8  */
+/*
+ * call-seq:
+ *   ~fix  ->  integer
+ *
+ * One's complement: returns a number where each bit is flipped.
+ *   ex.0---00001 (1)-> 1---11110 (-2)
+ *   ex.0---00010 (2)-> 1---11101 (-3)
+ *   ex.0---00100 (4)-> 1---11011 (-5)
+ */
+
+static mrb_value
+fix_rev(mrb_state *mrb, mrb_value num)
+{
+  mrb_int val = mrb_fixnum(num);
+
+  return mrb_fixnum_value(~val);
+}
+
+#ifdef MRB_WITHOUT_FLOAT
+#define bit_op(x,y,op1,op2) do {\
+  return mrb_fixnum_value(mrb_fixnum(x) op2 mrb_fixnum(y));\
+} while(0)
+#else
+static mrb_value flo_and(mrb_state *mrb, mrb_value x);
+static mrb_value flo_or(mrb_state *mrb, mrb_value x);
+static mrb_value flo_xor(mrb_state *mrb, mrb_value x);
+#define bit_op(x,y,op1,op2) do {\
+  if (mrb_fixnum_p(y)) return mrb_fixnum_value(mrb_fixnum(x) op2 mrb_fixnum(y));\
+  return flo_ ## op1(mrb, mrb_float_value(mrb, (mrb_float)mrb_fixnum(x)));\
+} while(0)
+#endif
+
+/* 15.2.8.3.9  */
+/*
+ * call-seq:
+ *   fix & integer  ->  integer_result
+ *
+ * Bitwise AND.
+ */
+
+static mrb_value
+fix_and(mrb_state *mrb, mrb_value x)
+{
+  mrb_value y;
+
+  mrb_get_args(mrb, "o", &y);
+  bit_op(x, y, and, &);
+}
+
+/* 15.2.8.3.10 */
+/*
+ * call-seq:
+ *   fix | integer  ->  integer_result
+ *
+ * Bitwise OR.
+ */
+
+static mrb_value
+fix_or(mrb_state *mrb, mrb_value x)
+{
+  mrb_value y;
+
+  mrb_get_args(mrb, "o", &y);
+  bit_op(x, y, or, |);
+}
+
+/* 15.2.8.3.11 */
+/*
+ * call-seq:
+ *   fix ^ integer  ->  integer_result
+ *
+ * Bitwise EXCLUSIVE OR.
+ */
+
+static mrb_value
+fix_xor(mrb_state *mrb, mrb_value x)
+{
+  mrb_value y;
+
+  mrb_get_args(mrb, "o", &y);
+  bit_op(x, y, or, ^);
+}
+
+#define NUMERIC_SHIFT_WIDTH_MAX (MRB_INT_BIT-1)
+
+static mrb_value
+lshift(mrb_state *mrb, mrb_int val, mrb_int width)
+{
+  if (width < 0) {              /* mrb_int overflow */
+#ifdef MRB_WITHOUT_FLOAT
+    return mrb_fixnum_value(0);
+#else
+    return mrb_float_value(mrb, INFINITY);
+#endif
+  }
+  if (val > 0) {
+    if ((width > NUMERIC_SHIFT_WIDTH_MAX) ||
+        (val   > (MRB_INT_MAX >> width))) {
+#ifdef MRB_WITHOUT_FLOAT
+      return mrb_fixnum_value(-1);
+#else
+      goto bit_overflow;
+#endif
+    }
+    return mrb_fixnum_value(val << width);
+  }
+  else {
+    if ((width > NUMERIC_SHIFT_WIDTH_MAX) ||
+        (val   <= (MRB_INT_MIN >> width))) {
+#ifdef MRB_WITHOUT_FLOAT
+      return mrb_fixnum_value(0);
+#else
+      goto bit_overflow;
+#endif
+    }
+    return mrb_fixnum_value(val * ((mrb_int)1 << width));
+  }
+
+#ifndef MRB_WITHOUT_FLOAT
+bit_overflow:
+  {
+    mrb_float f = (mrb_float)val;
+    while (width--) {
+      f *= 2;
+    }
+    return mrb_float_value(mrb, f);
+  }
+#endif
+}
+
+static mrb_value
+rshift(mrb_int val, mrb_int width)
+{
+  if (width < 0) {              /* mrb_int overflow */
+    return mrb_fixnum_value(0);
+  }
+  if (width >= NUMERIC_SHIFT_WIDTH_MAX) {
+    if (val < 0) {
+      return mrb_fixnum_value(-1);
+    }
+    return mrb_fixnum_value(0);
+  }
+  return mrb_fixnum_value(val >> width);
+}
+
+/* 15.2.8.3.12 */
+/*
+ * call-seq:
+ *   fix << count  ->  integer or float
+ *
+ * Shifts _fix_ left _count_ positions (right if _count_ is negative).
+ */
+
+static mrb_value
+fix_lshift(mrb_state *mrb, mrb_value x)
+{
+  mrb_int width, val;
+
+  mrb_get_args(mrb, "i", &width);
+  if (width == 0) {
+    return x;
+  }
+  val = mrb_fixnum(x);
+  if (val == 0) return x;
+  if (width < 0) {
+    return rshift(val, -width);
+  }
+  return lshift(mrb, val, width);
+}
+
+/* 15.2.8.3.13 */
+/*
+ * call-seq:
+ *   fix >> count  ->  integer or float
+ *
+ * Shifts _fix_ right _count_ positions (left if _count_ is negative).
+ */
+
+static mrb_value
+fix_rshift(mrb_state *mrb, mrb_value x)
+{
+  mrb_int width, val;
+
+  mrb_get_args(mrb, "i", &width);
+  if (width == 0) {
+    return x;
+  }
+  val = mrb_fixnum(x);
+  if (val == 0) return x;
+  if (width < 0) {
+    return lshift(mrb, val, -width);
+  }
+  return rshift(val, width);
+}
+
+/* 15.2.8.3.23 */
+/*
+ *  call-seq:
+ *     fix.to_f  ->  float
+ *
+ *  Converts <i>fix</i> to a <code>Float</code>.
+ *
+ */
+
+#ifndef MRB_WITHOUT_FLOAT
+static mrb_value
+fix_to_f(mrb_state *mrb, mrb_value num)
+{
+  return mrb_float_value(mrb, (mrb_float)mrb_fixnum(num));
+}
+
+/*
+ *  Document-class: FloatDomainError
+ *
+ *  Raised when attempting to convert special float values
+ *  (in particular infinite or NaN)
+ *  to numerical classes which don't support them.
+ *
+ *     Float::INFINITY.to_i
+ *
+ *  <em>raises the exception:</em>
+ *
+ *     FloatDomainError: Infinity
+ */
+/* ------------------------------------------------------------------------*/
+MRB_API mrb_value
+mrb_flo_to_fixnum(mrb_state *mrb, mrb_value x)
+{
+  mrb_int z = 0;
+
+  if (!mrb_float_p(x)) {
+    mrb_raise(mrb, E_TYPE_ERROR, "non float value");
+    z = 0; /* not reached. just suppress warnings. */
+  }
+  else {
+    mrb_float d = mrb_float(x);
+
+    mrb_check_num_exact(mrb, d);
+    if (FIXABLE_FLOAT(d)) {
+      z = (mrb_int)d;
+    }
+    else {
+      mrb_raisef(mrb, E_RANGE_ERROR, "number (%v) too big for integer", x);
+    }
+  }
+  return mrb_fixnum_value(z);
+}
+#endif
+
+static mrb_value
+fixnum_plus(mrb_state *mrb, mrb_value x, mrb_value y)
+{
+  mrb_int a;
+
+  a = mrb_fixnum(x);
+  if (mrb_fixnum_p(y)) {
+    mrb_int b, c;
+
+    if (a == 0) return y;
+    b = mrb_fixnum(y);
+    if (mrb_int_add_overflow(a, b, &c)) {
+#ifndef MRB_WITHOUT_FLOAT
+      return mrb_float_value(mrb, (mrb_float)a + (mrb_float)b);
+#endif
+    }
+    return mrb_fixnum_value(c);
+  }
+#ifdef MRB_WITHOUT_FLOAT
+  mrb_raise(mrb, E_TYPE_ERROR, "non fixnum value");
+#else
+  return mrb_float_value(mrb, (mrb_float)a + mrb_to_flo(mrb, y));
+#endif
+}
+
+MRB_API mrb_value
+mrb_num_plus(mrb_state *mrb, mrb_value x, mrb_value y)
+{
+  if (mrb_fixnum_p(x)) {
+    return fixnum_plus(mrb, x, y);
+  }
+#ifndef MRB_WITHOUT_FLOAT
+  if (mrb_float_p(x)) {
+    return mrb_float_value(mrb, mrb_float(x) + mrb_to_flo(mrb, y));
+  }
+#endif
+  mrb_raise(mrb, E_TYPE_ERROR, "no number addition");
+  return mrb_nil_value();       /* not reached */
+}
+
+/* 15.2.8.3.1  */
+/*
+ * call-seq:
+ *   fix + numeric  ->  numeric_result
+ *
+ * Performs addition: the class of the resulting object depends on
+ * the class of <code>numeric</code> and on the magnitude of the
+ * result.
+ */
+static mrb_value
+fix_plus(mrb_state *mrb, mrb_value self)
+{
+  mrb_value other;
+
+  mrb_get_args(mrb, "o", &other);
+  return fixnum_plus(mrb, self, other);
+}
+
+static mrb_value
+fixnum_minus(mrb_state *mrb, mrb_value x, mrb_value y)
+{
+  mrb_int a;
+
+  a = mrb_fixnum(x);
+  if (mrb_fixnum_p(y)) {
+    mrb_int b, c;
+
+    b = mrb_fixnum(y);
+    if (mrb_int_sub_overflow(a, b, &c)) {
+#ifndef MRB_WITHOUT_FLOAT
+      return mrb_float_value(mrb, (mrb_float)a - (mrb_float)b);
+#endif
+    }
+    return mrb_fixnum_value(c);
+  }
+#ifdef MRB_WITHOUT_FLOAT
+  mrb_raise(mrb, E_TYPE_ERROR, "non fixnum value");
+#else
+  return mrb_float_value(mrb, (mrb_float)a - mrb_to_flo(mrb, y));
+#endif
+}
+
+MRB_API mrb_value
+mrb_num_minus(mrb_state *mrb, mrb_value x, mrb_value y)
+{
+  if (mrb_fixnum_p(x)) {
+    return fixnum_minus(mrb, x, y);
+  }
+#ifndef MRB_WITHOUT_FLOAT
+  if (mrb_float_p(x)) {
+    return mrb_float_value(mrb, mrb_float(x) - mrb_to_flo(mrb, y));
+  }
+#endif
+  mrb_raise(mrb, E_TYPE_ERROR, "no number subtraction");
+  return mrb_nil_value();       /* not reached */
+}
+
+/* 15.2.8.3.2  */
+/* 15.2.8.3.16 */
+/*
+ * call-seq:
+ *   fix - numeric  ->  numeric_result
+ *
+ * Performs subtraction: the class of the resulting object depends on
+ * the class of <code>numeric</code> and on the magnitude of the
+ * result.
+ */
+static mrb_value
+fix_minus(mrb_state *mrb, mrb_value self)
+{
+  mrb_value other;
+
+  mrb_get_args(mrb, "o", &other);
+  return fixnum_minus(mrb, self, other);
+}
+
+
+MRB_API mrb_value
+mrb_fixnum_to_str(mrb_state *mrb, mrb_value x, mrb_int base)
+{
+  char buf[MRB_INT_BIT+1];
+  char *b = buf + sizeof buf;
+  mrb_int val = mrb_fixnum(x);
+
+  if (base < 2 || 36 < base) {
+    mrb_raisef(mrb, E_ARGUMENT_ERROR, "invalid radix %i", base);
+  }
+
+  if (val == 0) {
+    *--b = '0';
+  }
+  else if (val < 0) {
+    do {
+      *--b = mrb_digitmap[-(val % base)];
+    } while (val /= base);
+    *--b = '-';
+  }
+  else {
+    do {
+      *--b = mrb_digitmap[(int)(val % base)];
+    } while (val /= base);
+  }
+
+  return mrb_str_new(mrb, b, buf + sizeof(buf) - b);
+}
+
+/* 15.2.8.3.25 */
+/*
+ *  call-seq:
+ *     fix.to_s(base=10)  ->  string
+ *
+ *  Returns a string containing the representation of <i>fix</i> radix
+ *  <i>base</i> (between 2 and 36).
+ *
+ *     12345.to_s       #=> "12345"
+ *     12345.to_s(2)    #=> "11000000111001"
+ *     12345.to_s(8)    #=> "30071"
+ *     12345.to_s(10)   #=> "12345"
+ *     12345.to_s(16)   #=> "3039"
+ *     12345.to_s(36)   #=> "9ix"
+ *
+ */
+static mrb_value
+fix_to_s(mrb_state *mrb, mrb_value self)
+{
+  mrb_int base = 10;
+
+  mrb_get_args(mrb, "|i", &base);
+  return mrb_fixnum_to_str(mrb, self, base);
+}
+
+/* compare two numbers: (1:0:-1; -2 for error) */
+static mrb_int
+cmpnum(mrb_state *mrb, mrb_value v1, mrb_value v2)
+{
+#ifdef MRB_WITHOUT_FLOAT
+  mrb_int x, y;
+#else
+  mrb_float x, y;
+#endif
+
+#ifdef MRB_WITHOUT_FLOAT
+  x = mrb_fixnum(v1);
+#else
+  x = mrb_to_flo(mrb, v1);
+#endif
+  switch (mrb_type(v2)) {
+  case MRB_TT_FIXNUM:
+#ifdef MRB_WITHOUT_FLOAT
+    y = mrb_fixnum(v2);
+#else
+    y = (mrb_float)mrb_fixnum(v2);
+#endif
+    break;
+#ifndef MRB_WITHOUT_FLOAT
+  case MRB_TT_FLOAT:
+    y = mrb_float(v2);
+    break;
+#endif
+  default:
+    return -2;
+  }
+  if (x > y)
+    return 1;
+  else {
+    if (x < y)
+      return -1;
+    return 0;
+  }
+}
+
+/* 15.2.9.3.6  */
+/*
+ * call-seq:
+ *     self.f <=> other.f    => -1, 0, +1
+ *             <  => -1
+ *             =  =>  0
+ *             >  => +1
+ *  Comparison---Returns -1, 0, or +1 depending on whether <i>fix</i> is
+ *  less than, equal to, or greater than <i>numeric</i>. This is the
+ *  basis for the tests in <code>Comparable</code>.
+ */
+static mrb_value
+integral_cmp(mrb_state *mrb, mrb_value self)
+{
+  mrb_value other;
+  mrb_int n;
+
+  mrb_get_args(mrb, "o", &other);
+  n = cmpnum(mrb, self, other);
+  if (n == -2) return mrb_nil_value();
+  return mrb_fixnum_value(n);
+}
+
+static mrb_noreturn void
+cmperr(mrb_state *mrb, mrb_value v1, mrb_value v2)
+{
+  mrb_raisef(mrb, E_ARGUMENT_ERROR, "comparison of %t with %t failed", v1, v2);
+}
+
+static mrb_value
+integral_lt(mrb_state *mrb, mrb_value self)
+{
+  mrb_value other;
+  mrb_int n;
+
+  mrb_get_args(mrb, "o", &other);
+  n = cmpnum(mrb, self, other);
+  if (n == -2) cmperr(mrb, self, other);
+  if (n < 0) return mrb_true_value();
+  return mrb_false_value();
+}
+
+static mrb_value
+integral_le(mrb_state *mrb, mrb_value self)
+{
+  mrb_value other;
+  mrb_int n;
+
+  mrb_get_args(mrb, "o", &other);
+  n = cmpnum(mrb, self, other);
+  if (n == -2) cmperr(mrb, self, other);
+  if (n <= 0) return mrb_true_value();
+  return mrb_false_value();
+}
+
+static mrb_value
+integral_gt(mrb_state *mrb, mrb_value self)
+{
+  mrb_value other;
+  mrb_int n;
+
+  mrb_get_args(mrb, "o", &other);
+  n = cmpnum(mrb, self, other);
+  if (n == -2) cmperr(mrb, self, other);
+  if (n > 0) return mrb_true_value();
+  return mrb_false_value();
+}
+
+static mrb_value
+integral_ge(mrb_state *mrb, mrb_value self)
+{
+  mrb_value other;
+  mrb_int n;
+
+  mrb_get_args(mrb, "o", &other);
+  n = cmpnum(mrb, self, other);
+  if (n == -2) cmperr(mrb, self, other);
+  if (n >= 0) return mrb_true_value();
+  return mrb_false_value();
+}
+
+MRB_API mrb_int
+mrb_cmp(mrb_state *mrb, mrb_value obj1, mrb_value obj2)
+{
+  mrb_value v;
+
+  switch (mrb_type(obj1)) {
+  case MRB_TT_FIXNUM:
+  case MRB_TT_FLOAT:
+    return cmpnum(mrb, obj1, obj2);
+  case MRB_TT_STRING:
+    if (!mrb_string_p(obj2))
+      return -2;
+    return mrb_str_cmp(mrb, obj1, obj2);
+  default:
+    v = mrb_funcall(mrb, obj1, "<=>", 1, obj2);
+    if (mrb_nil_p(v) || !mrb_fixnum_p(v))
+      return -2;
+    return mrb_fixnum(v);
+  }
+}
+
+static mrb_value
+num_finite_p(mrb_state *mrb, mrb_value self)
+{
+  return mrb_true_value();
+}
+
+static mrb_value
+num_infinite_p(mrb_state *mrb, mrb_value self)
+{
+  return mrb_false_value();
+}
+
+/* 15.2.9.3.1  */
+/*
+ * call-seq:
+ *   float + other  ->  float
+ *
+ * Returns a new float which is the sum of <code>float</code>
+ * and <code>other</code>.
+ */
+#ifndef MRB_WITHOUT_FLOAT
+static mrb_value
+flo_plus(mrb_state *mrb, mrb_value x)
+{
+  mrb_value y;
+
+  mrb_get_args(mrb, "o", &y);
+  return mrb_float_value(mrb, mrb_float(x) + mrb_to_flo(mrb, y));
+}
+#endif
+
+/* ------------------------------------------------------------------------*/
+void
+mrb_init_numeric(mrb_state *mrb)
+{
+  struct RClass *numeric, *integer, *fixnum, *integral;
+#ifndef MRB_WITHOUT_FLOAT
+  struct RClass *fl;
+#endif
+
+  integral = mrb_define_module(mrb, "Integral");
+  mrb_define_method(mrb, integral,"**",       integral_pow,    MRB_ARGS_REQ(1));
+  mrb_define_method(mrb, integral,"/",        integral_div,    MRB_ARGS_REQ(1)); /* 15.2.{8,9}.3.6  */
+  mrb_define_method(mrb, integral,"quo",      integral_div,    MRB_ARGS_REQ(1)); /* 15.2.7.4.5 (x) */
+  mrb_define_method(mrb, integral,"div",      integral_idiv,   MRB_ARGS_REQ(1));
+  mrb_define_method(mrb, integral,"<=>",      integral_cmp,    MRB_ARGS_REQ(1)); /* 15.2.{8,9}.3.1  */
+  mrb_define_method(mrb, integral,"<",        integral_lt,     MRB_ARGS_REQ(1));
+  mrb_define_method(mrb, integral,"<=",       integral_le,     MRB_ARGS_REQ(1));
+  mrb_define_method(mrb, integral,">",        integral_gt,     MRB_ARGS_REQ(1));
+  mrb_define_method(mrb, integral,">=",       integral_ge,     MRB_ARGS_REQ(1));
+  mrb_define_method(mrb, integral,"__coerce_step_counter", integral_coerce_step_counter, MRB_ARGS_REQ(2));
+
+  /* Numeric Class */
+  numeric = mrb_define_class(mrb, "Numeric",  mrb->object_class);                /* 15.2.7 */
+  mrb_define_method(mrb, numeric, "finite?",  num_finite_p,    MRB_ARGS_NONE());
+  mrb_define_method(mrb, numeric, "infinite?",num_infinite_p,  MRB_ARGS_NONE());
+
+  /* Integer Class */
+  integer = mrb_define_class(mrb, "Integer",  numeric);                          /* 15.2.8 */
+  MRB_SET_INSTANCE_TT(integer, MRB_TT_FIXNUM);
+  mrb_undef_class_method(mrb, integer, "new");
+  mrb_define_method(mrb, integer, "to_i",     int_to_i,        MRB_ARGS_NONE()); /* 15.2.8.3.24 */
+  mrb_define_method(mrb, integer, "to_int",   int_to_i,        MRB_ARGS_NONE());
+#ifndef MRB_WITHOUT_FLOAT
+  mrb_define_method(mrb, integer, "ceil",     int_to_i,        MRB_ARGS_NONE()); /* 15.2.8.3.8 (x) */
+  mrb_define_method(mrb, integer, "floor",    int_to_i,        MRB_ARGS_NONE()); /* 15.2.8.3.10 (x) */
+  mrb_define_method(mrb, integer, "round",    int_to_i,        MRB_ARGS_NONE()); /* 15.2.8.3.12 (x) */
+  mrb_define_method(mrb, integer, "truncate", int_to_i,        MRB_ARGS_NONE()); /* 15.2.8.3.15 (x) */
+#endif
+
+  /* Fixnum Class */
+  mrb->fixnum_class = fixnum = mrb_define_class(mrb, "Fixnum", integer);
+  mrb_define_method(mrb, fixnum,  "+",        fix_plus,        MRB_ARGS_REQ(1)); /* 15.2.8.3.1  */
+  mrb_define_method(mrb, fixnum,  "-",        fix_minus,       MRB_ARGS_REQ(1)); /* 15.2.8.3.2  */
+  mrb_define_method(mrb, fixnum,  "*",        fix_mul,         MRB_ARGS_REQ(1)); /* 15.2.8.3.3  */
+  mrb_define_method(mrb, fixnum,  "%",        fix_mod,         MRB_ARGS_REQ(1)); /* 15.2.8.3.5  */
+  mrb_define_method(mrb, fixnum,  "==",       fix_equal,       MRB_ARGS_REQ(1)); /* 15.2.8.3.7  */
+  mrb_define_method(mrb, fixnum,  "~",        fix_rev,         MRB_ARGS_NONE()); /* 15.2.8.3.8  */
+  mrb_define_method(mrb, fixnum,  "&",        fix_and,         MRB_ARGS_REQ(1)); /* 15.2.8.3.9  */
+  mrb_define_method(mrb, fixnum,  "|",        fix_or,          MRB_ARGS_REQ(1)); /* 15.2.8.3.10 */
+  mrb_define_method(mrb, fixnum,  "^",        fix_xor,         MRB_ARGS_REQ(1)); /* 15.2.8.3.11 */
+  mrb_define_method(mrb, fixnum,  "<<",       fix_lshift,      MRB_ARGS_REQ(1)); /* 15.2.8.3.12 */
+  mrb_define_method(mrb, fixnum,  ">>",       fix_rshift,      MRB_ARGS_REQ(1)); /* 15.2.8.3.13 */
+  mrb_define_method(mrb, fixnum,  "eql?",     fix_eql,         MRB_ARGS_REQ(1)); /* 15.2.8.3.16 */
+#ifndef MRB_WITHOUT_FLOAT
+  mrb_define_method(mrb, fixnum,  "to_f",     fix_to_f,        MRB_ARGS_NONE()); /* 15.2.8.3.23 */
+#endif
+  mrb_define_method(mrb, fixnum,  "to_s",     fix_to_s,        MRB_ARGS_OPT(1)); /* 15.2.8.3.25 */
+  mrb_define_method(mrb, fixnum,  "inspect",  fix_to_s,        MRB_ARGS_OPT(1));
+  mrb_define_method(mrb, fixnum,  "divmod",   fix_divmod,      MRB_ARGS_REQ(1)); /* 15.2.8.3.30 (x) */
+
+#ifndef MRB_WITHOUT_FLOAT
+  /* Float Class */
+  mrb->float_class = fl = mrb_define_class(mrb, "Float", numeric);                 /* 15.2.9 */
+  MRB_SET_INSTANCE_TT(fl, MRB_TT_FLOAT);
+  mrb_undef_class_method(mrb,  fl, "new");
+  mrb_define_method(mrb, fl,      "+",         flo_plus,       MRB_ARGS_REQ(1)); /* 15.2.9.3.1  */
+  mrb_define_method(mrb, fl,      "-",         flo_minus,      MRB_ARGS_REQ(1)); /* 15.2.9.3.2  */
+  mrb_define_method(mrb, fl,      "*",         flo_mul,        MRB_ARGS_REQ(1)); /* 15.2.9.3.3  */
+  mrb_define_method(mrb, fl,      "%",         flo_mod,        MRB_ARGS_REQ(1)); /* 15.2.9.3.5  */
+  mrb_define_method(mrb, fl,      "==",        flo_eq,         MRB_ARGS_REQ(1)); /* 15.2.9.3.7  */
+  mrb_define_method(mrb, fl,      "~",         flo_rev,        MRB_ARGS_NONE());
+  mrb_define_method(mrb, fl,      "&",         flo_and,        MRB_ARGS_REQ(1));
+  mrb_define_method(mrb, fl,      "|",         flo_or,         MRB_ARGS_REQ(1));
+  mrb_define_method(mrb, fl,      "^",         flo_xor,        MRB_ARGS_REQ(1));
+  mrb_define_method(mrb, fl,      ">>",        flo_rshift,     MRB_ARGS_REQ(1));
+  mrb_define_method(mrb, fl,      "<<",        flo_lshift,     MRB_ARGS_REQ(1));
+  mrb_define_method(mrb, fl,      "ceil",      flo_ceil,       MRB_ARGS_NONE()); /* 15.2.9.3.8  */
+  mrb_define_method(mrb, fl,      "finite?",   flo_finite_p,   MRB_ARGS_NONE()); /* 15.2.9.3.9  */
+  mrb_define_method(mrb, fl,      "floor",     flo_floor,      MRB_ARGS_NONE()); /* 15.2.9.3.10 */
+  mrb_define_method(mrb, fl,      "infinite?", flo_infinite_p, MRB_ARGS_NONE()); /* 15.2.9.3.11 */
+  mrb_define_method(mrb, fl,      "round",     flo_round,      MRB_ARGS_OPT(1)); /* 15.2.9.3.12 */
+  mrb_define_method(mrb, fl,      "to_f",      flo_to_f,       MRB_ARGS_NONE()); /* 15.2.9.3.13 */
+  mrb_define_method(mrb, fl,      "to_i",      flo_truncate,   MRB_ARGS_NONE()); /* 15.2.9.3.14 */
+  mrb_define_method(mrb, fl,      "to_int",    flo_truncate,   MRB_ARGS_NONE());
+  mrb_define_method(mrb, fl,      "truncate",  flo_truncate,   MRB_ARGS_NONE()); /* 15.2.9.3.15 */
+  mrb_define_method(mrb, fl,      "divmod",    flo_divmod,     MRB_ARGS_REQ(1));
+  mrb_define_method(mrb, fl,      "eql?",      flo_eql,        MRB_ARGS_REQ(1)); /* 15.2.8.3.16 */
+
+  mrb_define_method(mrb, fl,      "to_s",      flo_to_s,       MRB_ARGS_NONE()); /* 15.2.9.3.16(x) */
+  mrb_define_method(mrb, fl,      "inspect",   flo_to_s,       MRB_ARGS_NONE());
+  mrb_define_method(mrb, fl,      "nan?",      flo_nan_p,      MRB_ARGS_NONE());
+
+#ifdef INFINITY
+  mrb_define_const(mrb, fl, "INFINITY", mrb_float_value(mrb, INFINITY));
+#endif
+#ifdef NAN
+  mrb_define_const(mrb, fl, "NAN", mrb_float_value(mrb, NAN));
+#endif
+
+  mrb_include_module(mrb, fl, integral);
+#endif
+}
Index: /EcnlProtoTool/trunk/mruby-2.1.1/src/object.c
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/src/object.c	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/src/object.c	(revision 439)
@@ -0,0 +1,640 @@
+/*
+** object.c - Object, NilClass, TrueClass, FalseClass class
+**
+** See Copyright Notice in mruby.h
+*/
+
+#include <mruby.h>
+#include <mruby/class.h>
+#include <mruby/numeric.h>
+#include <mruby/string.h>
+#include <mruby/class.h>
+
+MRB_API mrb_bool
+mrb_obj_eq(mrb_state *mrb, mrb_value v1, mrb_value v2)
+{
+  if (mrb_type(v1) != mrb_type(v2)) return FALSE;
+  switch (mrb_type(v1)) {
+  case MRB_TT_TRUE:
+    return TRUE;
+
+  case MRB_TT_FALSE:
+  case MRB_TT_FIXNUM:
+    return (mrb_fixnum(v1) == mrb_fixnum(v2));
+  case MRB_TT_SYMBOL:
+    return (mrb_symbol(v1) == mrb_symbol(v2));
+
+#ifndef MRB_WITHOUT_FLOAT
+  case MRB_TT_FLOAT:
+    return (mrb_float(v1) == mrb_float(v2));
+#endif
+
+  default:
+    return (mrb_ptr(v1) == mrb_ptr(v2));
+  }
+}
+
+MRB_API mrb_bool
+mrb_obj_equal(mrb_state *mrb, mrb_value v1, mrb_value v2)
+{
+  /* temporary definition */
+  return mrb_obj_eq(mrb, v1, v2);
+}
+
+MRB_API mrb_bool
+mrb_equal(mrb_state *mrb, mrb_value obj1, mrb_value obj2)
+{
+  mrb_value result;
+
+  if (mrb_obj_eq(mrb, obj1, obj2)) return TRUE;
+  result = mrb_funcall(mrb, obj1, "==", 1, obj2);
+  if (mrb_test(result)) return TRUE;
+  return FALSE;
+}
+
+/*
+ * Document-class: NilClass
+ *
+ *  The class of the singleton object <code>nil</code>.
+ */
+
+/* 15.2.4.3.4  */
+/*
+ * call_seq:
+ *   nil.nil?               -> true
+ *
+ * Only the object <i>nil</i> responds <code>true</code> to <code>nil?</code>.
+ */
+
+static mrb_value
+mrb_true(mrb_state *mrb, mrb_value obj)
+{
+  return mrb_true_value();
+}
+
+/* 15.2.4.3.5  */
+/*
+ *  call-seq:
+ *     nil.to_s    -> ""
+ *
+ *  Always returns the empty string.
+ */
+
+static mrb_value
+nil_to_s(mrb_state *mrb, mrb_value obj)
+{
+  return mrb_str_new_frozen(mrb, 0, 0);
+}
+
+static mrb_value
+nil_inspect(mrb_state *mrb, mrb_value obj)
+{
+  return mrb_str_new_lit_frozen(mrb, "nil");
+}
+
+/***********************************************************************
+ *  Document-class: TrueClass
+ *
+ *  The global value <code>true</code> is the only instance of class
+ *  <code>TrueClass</code> and represents a logically true value in
+ *  boolean expressions. The class provides operators allowing
+ *  <code>true</code> to be used in logical expressions.
+ */
+
+/* 15.2.5.3.1  */
+/*
+ *  call-seq:
+ *     true & obj    -> true or false
+ *
+ *  And---Returns <code>false</code> if <i>obj</i> is
+ *  <code>nil</code> or <code>false</code>, <code>true</code> otherwise.
+ */
+
+static mrb_value
+true_and(mrb_state *mrb, mrb_value obj)
+{
+  mrb_bool obj2;
+
+  mrb_get_args(mrb, "b", &obj2);
+
+  return mrb_bool_value(obj2);
+}
+
+/* 15.2.5.3.2  */
+/*
+ *  call-seq:
+ *     true ^ obj   -> !obj
+ *
+ *  Exclusive Or---Returns <code>true</code> if <i>obj</i> is
+ *  <code>nil</code> or <code>false</code>, <code>false</code>
+ *  otherwise.
+ */
+
+static mrb_value
+true_xor(mrb_state *mrb, mrb_value obj)
+{
+  mrb_bool obj2;
+
+  mrb_get_args(mrb, "b", &obj2);
+  return mrb_bool_value(!obj2);
+}
+
+/* 15.2.5.3.3  */
+/*
+ * call-seq:
+ *   true.to_s   ->  "true"
+ *
+ * The string representation of <code>true</code> is "true".
+ */
+
+static mrb_value
+true_to_s(mrb_state *mrb, mrb_value obj)
+{
+  return mrb_str_new_lit_frozen(mrb, "true");
+}
+
+/* 15.2.5.3.4  */
+/*
+ *  call-seq:
+ *     true | obj   -> true
+ *
+ *  Or---Returns <code>true</code>. As <i>anObject</i> is an argument to
+ *  a method call, it is always evaluated; there is no short-circuit
+ *  evaluation in this case.
+ *
+ *     true |  puts("or")
+ *     true || puts("logical or")
+ *
+ *  <em>produces:</em>
+ *
+ *     or
+ */
+
+static mrb_value
+true_or(mrb_state *mrb, mrb_value obj)
+{
+  return mrb_true_value();
+}
+
+/*
+ *  Document-class: FalseClass
+ *
+ *  The global value <code>false</code> is the only instance of class
+ *  <code>FalseClass</code> and represents a logically false value in
+ *  boolean expressions. The class provides operators allowing
+ *  <code>false</code> to participate correctly in logical expressions.
+ *
+ */
+
+/* 15.2.4.3.1  */
+/* 15.2.6.3.1  */
+/*
+ *  call-seq:
+ *     false & obj   -> false
+ *     nil & obj     -> false
+ *
+ *  And---Returns <code>false</code>. <i>obj</i> is always
+ *  evaluated as it is the argument to a method call---there is no
+ *  short-circuit evaluation in this case.
+ */
+
+static mrb_value
+false_and(mrb_state *mrb, mrb_value obj)
+{
+  return mrb_false_value();
+}
+
+/* 15.2.4.3.2  */
+/* 15.2.6.3.2  */
+/*
+ *  call-seq:
+ *     false ^ obj    -> true or false
+ *     nil   ^ obj    -> true or false
+ *
+ *  Exclusive Or---If <i>obj</i> is <code>nil</code> or
+ *  <code>false</code>, returns <code>false</code>; otherwise, returns
+ *  <code>true</code>.
+ *
+ */
+
+static mrb_value
+false_xor(mrb_state *mrb, mrb_value obj)
+{
+  mrb_bool obj2;
+
+  mrb_get_args(mrb, "b", &obj2);
+  return mrb_bool_value(obj2);
+}
+
+/* 15.2.4.3.3  */
+/* 15.2.6.3.4  */
+/*
+ *  call-seq:
+ *     false | obj   ->   true or false
+ *     nil   | obj   ->   true or false
+ *
+ *  Or---Returns <code>false</code> if <i>obj</i> is
+ *  <code>nil</code> or <code>false</code>; <code>true</code> otherwise.
+ */
+
+static mrb_value
+false_or(mrb_state *mrb, mrb_value obj)
+{
+  mrb_bool obj2;
+
+  mrb_get_args(mrb, "b", &obj2);
+  return mrb_bool_value(obj2);
+}
+
+/* 15.2.6.3.3  */
+/*
+ * call-seq:
+ *   false.to_s   ->  "false"
+ *
+ * 'nuf said...
+ */
+
+static mrb_value
+false_to_s(mrb_state *mrb, mrb_value obj)
+{
+  return mrb_str_new_lit_frozen(mrb, "false");
+}
+
+void
+mrb_init_object(mrb_state *mrb)
+{
+  struct RClass *n;
+  struct RClass *t;
+  struct RClass *f;
+
+  mrb->nil_class   = n = mrb_define_class(mrb, "NilClass",   mrb->object_class);
+  MRB_SET_INSTANCE_TT(n, MRB_TT_TRUE);
+  mrb_undef_class_method(mrb, n, "new");
+  mrb_define_method(mrb, n, "&",    false_and,      MRB_ARGS_REQ(1));  /* 15.2.4.3.1  */
+  mrb_define_method(mrb, n, "^",    false_xor,      MRB_ARGS_REQ(1));  /* 15.2.4.3.2  */
+  mrb_define_method(mrb, n, "|",    false_or,       MRB_ARGS_REQ(1));  /* 15.2.4.3.3  */
+  mrb_define_method(mrb, n, "nil?", mrb_true,       MRB_ARGS_NONE());  /* 15.2.4.3.4  */
+  mrb_define_method(mrb, n, "to_s", nil_to_s,       MRB_ARGS_NONE());  /* 15.2.4.3.5  */
+  mrb_define_method(mrb, n, "inspect", nil_inspect, MRB_ARGS_NONE());
+
+  mrb->true_class  = t = mrb_define_class(mrb, "TrueClass",  mrb->object_class);
+  MRB_SET_INSTANCE_TT(t, MRB_TT_TRUE);
+  mrb_undef_class_method(mrb, t, "new");
+  mrb_define_method(mrb, t, "&",    true_and,       MRB_ARGS_REQ(1));  /* 15.2.5.3.1  */
+  mrb_define_method(mrb, t, "^",    true_xor,       MRB_ARGS_REQ(1));  /* 15.2.5.3.2  */
+  mrb_define_method(mrb, t, "to_s", true_to_s,      MRB_ARGS_NONE());  /* 15.2.5.3.3  */
+  mrb_define_method(mrb, t, "|",    true_or,        MRB_ARGS_REQ(1));  /* 15.2.5.3.4  */
+  mrb_define_method(mrb, t, "inspect", true_to_s,   MRB_ARGS_NONE());
+
+  mrb->false_class = f = mrb_define_class(mrb, "FalseClass", mrb->object_class);
+  MRB_SET_INSTANCE_TT(f, MRB_TT_TRUE);
+  mrb_undef_class_method(mrb, f, "new");
+  mrb_define_method(mrb, f, "&",    false_and,      MRB_ARGS_REQ(1));  /* 15.2.6.3.1  */
+  mrb_define_method(mrb, f, "^",    false_xor,      MRB_ARGS_REQ(1));  /* 15.2.6.3.2  */
+  mrb_define_method(mrb, f, "to_s", false_to_s,     MRB_ARGS_NONE());  /* 15.2.6.3.3  */
+  mrb_define_method(mrb, f, "|",    false_or,       MRB_ARGS_REQ(1));  /* 15.2.6.3.4  */
+  mrb_define_method(mrb, f, "inspect", false_to_s,  MRB_ARGS_NONE());
+}
+
+static mrb_value
+convert_type(mrb_state *mrb, mrb_value val, const char *tname, const char *method, mrb_bool raise)
+{
+  mrb_sym m = 0;
+
+  m = mrb_intern_cstr(mrb, method);
+  if (!mrb_respond_to(mrb, val, m)) {
+    if (raise) {
+      mrb_raisef(mrb, E_TYPE_ERROR, "can't convert %Y into %s", val, tname);
+    }
+    return mrb_nil_value();
+  }
+  return mrb_funcall_argv(mrb, val, m, 0, 0);
+}
+
+MRB_API mrb_value
+mrb_convert_type(mrb_state *mrb, mrb_value val, enum mrb_vtype type, const char *tname, const char *method)
+{
+  mrb_value v;
+
+  if (mrb_type(val) == type) return val;
+  v = convert_type(mrb, val, tname, method, TRUE);
+  if (mrb_type(v) != type) {
+    mrb_raisef(mrb, E_TYPE_ERROR, "%v cannot be converted to %s by #%s", val, tname, method);
+  }
+  return v;
+}
+
+MRB_API mrb_value
+mrb_check_convert_type(mrb_state *mrb, mrb_value val, enum mrb_vtype type, const char *tname, const char *method)
+{
+  mrb_value v;
+
+  if (mrb_type(val) == type && type != MRB_TT_DATA && type != MRB_TT_ISTRUCT) return val;
+  v = convert_type(mrb, val, tname, method, FALSE);
+  if (mrb_nil_p(v) || mrb_type(v) != type) return mrb_nil_value();
+  return v;
+}
+
+static const struct types {
+  unsigned char type;
+  const char *name;
+} builtin_types[] = {
+/*    {MRB_TT_NIL,  "nil"}, */
+  {MRB_TT_FALSE,  "false"},
+  {MRB_TT_TRUE,   "true"},
+  {MRB_TT_FIXNUM, "Fixnum"},
+  {MRB_TT_SYMBOL, "Symbol"},  /* :symbol */
+  {MRB_TT_MODULE, "Module"},
+  {MRB_TT_OBJECT, "Object"},
+  {MRB_TT_CLASS,  "Class"},
+  {MRB_TT_ICLASS, "iClass"},  /* internal use: mixed-in module holder */
+  {MRB_TT_SCLASS, "SClass"},
+  {MRB_TT_PROC,   "Proc"},
+#ifndef MRB_WITHOUT_FLOAT
+  {MRB_TT_FLOAT,  "Float"},
+#endif
+  {MRB_TT_ARRAY,  "Array"},
+  {MRB_TT_HASH,   "Hash"},
+  {MRB_TT_STRING, "String"},
+  {MRB_TT_RANGE,  "Range"},
+/*    {MRB_TT_BIGNUM,  "Bignum"}, */
+  {MRB_TT_FILE,   "File"},
+  {MRB_TT_DATA,   "Data"},  /* internal use: wrapped C pointers */
+/*    {MRB_TT_VARMAP,  "Varmap"}, */ /* internal use: dynamic variables */
+/*    {MRB_TT_NODE,  "Node"}, */ /* internal use: syntax tree node */
+/*    {MRB_TT_UNDEF,  "undef"}, */ /* internal use: #undef; should not happen */
+  {MRB_TT_MAXDEFINE,  0}
+};
+
+MRB_API void
+mrb_check_type(mrb_state *mrb, mrb_value x, enum mrb_vtype t)
+{
+  const struct types *type = builtin_types;
+  enum mrb_vtype xt;
+
+  xt = mrb_type(x);
+  if ((xt != t) || (xt == MRB_TT_DATA) || (xt == MRB_TT_ISTRUCT)) {
+    while (type->type < MRB_TT_MAXDEFINE) {
+      if (type->type == t) {
+        const char *etype;
+
+        if (mrb_nil_p(x)) {
+          etype = "nil";
+        }
+        else if (mrb_fixnum_p(x)) {
+          etype = "Fixnum";
+        }
+        else if (mrb_symbol_p(x)) {
+          etype = "Symbol";
+        }
+        else if (mrb_immediate_p(x)) {
+          etype = RSTRING_PTR(mrb_obj_as_string(mrb, x));
+        }
+        else {
+          etype = mrb_obj_classname(mrb, x);
+        }
+        mrb_raisef(mrb, E_TYPE_ERROR, "wrong argument type %s (expected %s)",
+                   etype, type->name);
+      }
+      type++;
+    }
+    mrb_raisef(mrb, E_TYPE_ERROR, "unknown type %d (%d given)", t, mrb_type(x));
+  }
+}
+
+/* 15.3.1.3.46 */
+/*
+ *  call-seq:
+ *     obj.to_s    => string
+ *
+ *  Returns a string representing <i>obj</i>. The default
+ *  <code>to_s</code> prints the object's class and an encoding of the
+ *  object id. As a special case, the top-level object that is the
+ *  initial execution context of Ruby programs returns "main."
+ */
+
+MRB_API mrb_value
+mrb_any_to_s(mrb_state *mrb, mrb_value obj)
+{
+  mrb_value str = mrb_str_new_capa(mrb, 20);
+  const char *cname = mrb_obj_classname(mrb, obj);
+
+  mrb_str_cat_lit(mrb, str, "#<");
+  mrb_str_cat_cstr(mrb, str, cname);
+  if (!mrb_immediate_p(obj)) {
+    mrb_str_cat_lit(mrb, str, ":");
+    mrb_str_cat_str(mrb, str, mrb_ptr_to_str(mrb, mrb_ptr(obj)));
+  }
+  mrb_str_cat_lit(mrb, str, ">");
+
+  return str;
+}
+
+/*
+ *  call-seq:
+ *     obj.is_a?(class)       => true or false
+ *     obj.kind_of?(class)    => true or false
+ *
+ *  Returns <code>true</code> if <i>class</i> is the class of
+ *  <i>obj</i>, or if <i>class</i> is one of the superclasses of
+ *  <i>obj</i> or modules included in <i>obj</i>.
+ *
+ *     module M;    end
+ *     class A
+ *       include M
+ *     end
+ *     class B < A; end
+ *     class C < B; end
+ *     b = B.new
+ *     b.instance_of? A   #=> false
+ *     b.instance_of? B   #=> true
+ *     b.instance_of? C   #=> false
+ *     b.instance_of? M   #=> false
+ *     b.kind_of? A       #=> true
+ *     b.kind_of? B       #=> true
+ *     b.kind_of? C       #=> false
+ *     b.kind_of? M       #=> true
+ */
+
+MRB_API mrb_bool
+mrb_obj_is_kind_of(mrb_state *mrb, mrb_value obj, struct RClass *c)
+{
+  struct RClass *cl = mrb_class(mrb, obj);
+
+  switch (c->tt) {
+    case MRB_TT_MODULE:
+    case MRB_TT_CLASS:
+    case MRB_TT_ICLASS:
+    case MRB_TT_SCLASS:
+      break;
+
+    default:
+      mrb_raise(mrb, E_TYPE_ERROR, "class or module required");
+  }
+
+  MRB_CLASS_ORIGIN(c);
+  while (cl) {
+    if (cl == c || cl->mt == c->mt)
+      return TRUE;
+    cl = cl->super;
+  }
+  return FALSE;
+}
+
+MRB_API mrb_value
+mrb_to_int(mrb_state *mrb, mrb_value val)
+{
+
+  if (!mrb_fixnum_p(val)) {
+#ifndef MRB_WITHOUT_FLOAT
+    if (mrb_float_p(val)) {
+      return mrb_flo_to_fixnum(mrb, val);
+    }
+#endif
+    mrb_raisef(mrb, E_TYPE_ERROR, "can't convert %Y to Integer", val);
+  }
+  return val;
+}
+
+MRB_API mrb_value
+mrb_convert_to_integer(mrb_state *mrb, mrb_value val, mrb_int base)
+{
+  mrb_value tmp;
+
+  if (mrb_nil_p(val)) {
+    if (base != 0) goto arg_error;
+    mrb_raise(mrb, E_TYPE_ERROR, "can't convert nil into Integer");
+  }
+  switch (mrb_type(val)) {
+#ifndef MRB_WITHOUT_FLOAT
+    case MRB_TT_FLOAT:
+      if (base != 0) goto arg_error;
+      return mrb_flo_to_fixnum(mrb, val);
+#endif
+
+    case MRB_TT_FIXNUM:
+      if (base != 0) goto arg_error;
+      return val;
+
+    case MRB_TT_STRING:
+    string_conv:
+      return mrb_str_to_inum(mrb, val, base, TRUE);
+
+    default:
+      break;
+  }
+  if (base != 0) {
+    tmp = mrb_check_string_type(mrb, val);
+    if (!mrb_nil_p(tmp)) {
+      val = tmp;
+      goto string_conv;
+    }
+arg_error:
+    mrb_raise(mrb, E_ARGUMENT_ERROR, "base specified for non string value");
+  }
+  /* to raise TypeError */
+  return mrb_to_int(mrb, val);
+}
+
+MRB_API mrb_value
+mrb_Integer(mrb_state *mrb, mrb_value val)
+{
+  return mrb_convert_to_integer(mrb, val, 0);
+}
+
+#ifndef MRB_WITHOUT_FLOAT
+MRB_API mrb_value
+mrb_Float(mrb_state *mrb, mrb_value val)
+{
+  if (mrb_nil_p(val)) {
+    mrb_raise(mrb, E_TYPE_ERROR, "can't convert nil into Float");
+  }
+  switch (mrb_type(val)) {
+    case MRB_TT_FIXNUM:
+      return mrb_float_value(mrb, (mrb_float)mrb_fixnum(val));
+
+    case MRB_TT_FLOAT:
+      return val;
+
+    case MRB_TT_STRING:
+      return mrb_float_value(mrb, mrb_str_to_dbl(mrb, val, TRUE));
+
+    default:
+      return mrb_convert_type(mrb, val, MRB_TT_FLOAT, "Float", "to_f");
+  }
+}
+#endif
+
+MRB_API mrb_value
+mrb_to_str(mrb_state *mrb, mrb_value val)
+{
+  return mrb_ensure_string_type(mrb, val);
+}
+
+/* obsolete: use mrb_ensure_string_type() instead */
+MRB_API mrb_value
+mrb_string_type(mrb_state *mrb, mrb_value str)
+{
+  return mrb_ensure_string_type(mrb, str);
+}
+
+MRB_API mrb_value
+mrb_ensure_string_type(mrb_state *mrb, mrb_value str)
+{
+  if (!mrb_string_p(str)) {
+    mrb_raisef(mrb, E_TYPE_ERROR, "%Y cannot be converted to String", str);
+  }
+  return str;
+}
+
+MRB_API mrb_value
+mrb_check_string_type(mrb_state *mrb, mrb_value str)
+{
+  if (!mrb_string_p(str)) return mrb_nil_value();
+  return str;
+}
+
+MRB_API mrb_value
+mrb_ensure_array_type(mrb_state *mrb, mrb_value ary)
+{
+  if (!mrb_array_p(ary)) {
+    mrb_raisef(mrb, E_TYPE_ERROR, "%Y cannot be converted to Array", ary);
+  }
+  return ary;
+}
+
+MRB_API mrb_value
+mrb_check_array_type(mrb_state *mrb, mrb_value ary)
+{
+  if (!mrb_array_p(ary)) return mrb_nil_value();
+  return ary;
+}
+
+MRB_API mrb_value
+mrb_ensure_hash_type(mrb_state *mrb, mrb_value hash)
+{
+  if (!mrb_hash_p(hash)) {
+    mrb_raisef(mrb, E_TYPE_ERROR, "%Y cannot be converted to Hash", hash);
+  }
+  return hash;
+}
+
+MRB_API mrb_value
+mrb_check_hash_type(mrb_state *mrb, mrb_value hash)
+{
+  if (!mrb_hash_p(hash)) return mrb_nil_value();
+  return hash;
+}
+
+MRB_API mrb_value
+mrb_inspect(mrb_state *mrb, mrb_value obj)
+{
+  return mrb_obj_as_string(mrb, mrb_funcall(mrb, obj, "inspect", 0));
+}
+
+MRB_API mrb_bool
+mrb_eql(mrb_state *mrb, mrb_value obj1, mrb_value obj2)
+{
+  if (mrb_obj_eq(mrb, obj1, obj2)) return TRUE;
+  return mrb_test(mrb_funcall(mrb, obj1, "eql?", 1, obj2));
+}
Index: /EcnlProtoTool/trunk/mruby-2.1.1/src/opcode.h
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/src/opcode.h	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/src/opcode.h	(revision 439)
@@ -0,0 +1,2 @@
+/* this header file is to be removed soon. */
+#include <mruby/opcode.h>
Index: /EcnlProtoTool/trunk/mruby-2.1.1/src/pool.c
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/src/pool.c	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/src/pool.c	(revision 439)
@@ -0,0 +1,207 @@
+/*
+** pool.c - memory pool
+**
+** See Copyright Notice in mruby.h
+*/
+
+#include <string.h>
+#include <mruby.h>
+
+/* configuration section */
+/* allocated memory address should be multiple of POOL_ALIGNMENT */
+/* or undef it if alignment does not matter */
+#ifndef POOL_ALIGNMENT
+#if INTPTR_MAX == INT64_MAX
+#define POOL_ALIGNMENT 8
+#else
+#define POOL_ALIGNMENT 4
+#endif
+#endif
+/* page size of memory pool */
+#ifndef POOL_PAGE_SIZE
+#define POOL_PAGE_SIZE 16000
+#endif
+/* end of configuration section */
+
+/* Disable MSVC warning "C4200: nonstandard extension used: zero-sized array
+ * in struct/union" when in C++ mode */
+#ifdef _MSC_VER
+#pragma warning(push)
+#pragma warning(disable : 4200)
+#endif
+
+struct mrb_pool_page {
+  struct mrb_pool_page *next;
+  size_t offset;
+  size_t len;
+  void *last;
+  char page[];
+};
+
+#ifdef _MSC_VER
+#pragma warning(pop)
+#endif
+
+struct mrb_pool {
+  mrb_state *mrb;
+  struct mrb_pool_page *pages;
+};
+
+#undef TEST_POOL
+#ifdef TEST_POOL
+
+#define mrb_malloc_simple(m,s) malloc(s)
+#define mrb_free(m,p) free(p)
+#endif
+
+#ifdef POOL_ALIGNMENT
+#  define ALIGN_PADDING(x) ((SIZE_MAX - (x) + 1) & (POOL_ALIGNMENT - 1))
+#else
+#  define ALIGN_PADDING(x) (0)
+#endif
+
+MRB_API mrb_pool*
+mrb_pool_open(mrb_state *mrb)
+{
+  mrb_pool *pool = (mrb_pool *)mrb_malloc_simple(mrb, sizeof(mrb_pool));
+
+  if (pool) {
+    pool->mrb = mrb;
+    pool->pages = NULL;
+  }
+
+  return pool;
+}
+
+MRB_API void
+mrb_pool_close(mrb_pool *pool)
+{
+  struct mrb_pool_page *page, *tmp;
+
+  if (!pool) return;
+  page = pool->pages;
+  while (page) {
+    tmp = page;
+    page = page->next;
+    mrb_free(pool->mrb, tmp);
+  }
+  mrb_free(pool->mrb, pool);
+}
+
+static struct mrb_pool_page*
+page_alloc(mrb_pool *pool, size_t len)
+{
+  struct mrb_pool_page *page;
+
+  if (len < POOL_PAGE_SIZE)
+    len = POOL_PAGE_SIZE;
+  page = (struct mrb_pool_page *)mrb_malloc_simple(pool->mrb, sizeof(struct mrb_pool_page)+len);
+  if (page) {
+    page->offset = 0;
+    page->len = len;
+  }
+
+  return page;
+}
+
+MRB_API void*
+mrb_pool_alloc(mrb_pool *pool, size_t len)
+{
+  struct mrb_pool_page *page;
+  size_t n;
+
+  if (!pool) return NULL;
+  len += ALIGN_PADDING(len);
+  page = pool->pages;
+  while (page) {
+    if (page->offset + len <= page->len) {
+      n = page->offset;
+      page->offset += len;
+      page->last = (char*)page->page+n;
+      return page->last;
+    }
+    page = page->next;
+  }
+  page = page_alloc(pool, len);
+  if (!page) return NULL;
+  page->offset = len;
+  page->next = pool->pages;
+  pool->pages = page;
+
+  page->last = (void*)page->page;
+  return page->last;
+}
+
+MRB_API mrb_bool
+mrb_pool_can_realloc(mrb_pool *pool, void *p, size_t len)
+{
+  struct mrb_pool_page *page;
+
+  if (!pool) return FALSE;
+  len += ALIGN_PADDING(len);
+  page = pool->pages;
+  while (page) {
+    if (page->last == p) {
+      size_t beg;
+
+      beg = (char*)p - page->page;
+      if (beg + len > page->len) return FALSE;
+      return TRUE;
+    }
+    page = page->next;
+  }
+  return FALSE;
+}
+
+MRB_API void*
+mrb_pool_realloc(mrb_pool *pool, void *p, size_t oldlen, size_t newlen)
+{
+  struct mrb_pool_page *page;
+  void *np;
+
+  if (!pool) return NULL;
+  oldlen += ALIGN_PADDING(oldlen);
+  newlen += ALIGN_PADDING(newlen);
+  page = pool->pages;
+  while (page) {
+    if (page->last == p) {
+      size_t beg;
+
+      beg = (char*)p - page->page;
+      if (beg + oldlen != page->offset) break;
+      if (beg + newlen > page->len) {
+        page->offset = beg;
+        break;
+      }
+      page->offset = beg + newlen;
+      return p;
+    }
+    page = page->next;
+  }
+  np = mrb_pool_alloc(pool, newlen);
+  if (np == NULL) {
+    return NULL;
+  }
+  memcpy(np, p, oldlen);
+  return np;
+}
+
+#ifdef TEST_POOL
+int
+main(void)
+{
+  int i, len = 250;
+  mrb_pool *pool;
+  void *p;
+
+  pool = mrb_pool_open(NULL);
+  p = mrb_pool_alloc(pool, len);
+  for (i=1; i<20; i++) {
+    printf("%p (len=%d) %ud\n", p, len, mrb_pool_can_realloc(pool, p, len*2));
+    p = mrb_pool_realloc(pool, p, len, len*2);
+    len *= 2;
+  }
+  mrb_pool_close(pool);
+  return 0;
+}
+#endif
Index: /EcnlProtoTool/trunk/mruby-2.1.1/src/print.c
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/src/print.c	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/src/print.c	(revision 439)
@@ -0,0 +1,46 @@
+/*
+** print.c - Kernel.#p
+**
+** See Copyright Notice in mruby.h
+*/
+
+#include <mruby.h>
+#include <mruby/string.h>
+#include <mruby/variable.h>
+
+#ifndef MRB_DISABLE_STDIO
+static void
+printstr(mrb_value obj, FILE *stream)
+{
+  if (mrb_string_p(obj)) {
+    fwrite(RSTRING_PTR(obj), RSTRING_LEN(obj), 1, stream);
+    putc('\n', stream);
+  }
+}
+#else
+# define printstr(obj, stream) (void)0
+#endif
+
+MRB_API void
+mrb_p(mrb_state *mrb, mrb_value obj)
+{
+  printstr(mrb_inspect(mrb, obj), stdout);
+}
+
+MRB_API void
+mrb_print_error(mrb_state *mrb)
+{
+  mrb_print_backtrace(mrb);
+}
+
+MRB_API void
+mrb_show_version(mrb_state *mrb)
+{
+  printstr(mrb_const_get(mrb, mrb_obj_value(mrb->object_class), mrb_intern_lit(mrb, "MRUBY_DESCRIPTION")), stdout);
+}
+
+MRB_API void
+mrb_show_copyright(mrb_state *mrb)
+{
+  printstr(mrb_const_get(mrb, mrb_obj_value(mrb->object_class), mrb_intern_lit(mrb, "MRUBY_COPYRIGHT")), stdout);
+}
Index: /EcnlProtoTool/trunk/mruby-2.1.1/src/proc.c
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/src/proc.c	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/src/proc.c	(revision 439)
@@ -0,0 +1,314 @@
+/*
+** proc.c - Proc class
+**
+** See Copyright Notice in mruby.h
+*/
+
+#include <mruby.h>
+#include <mruby/class.h>
+#include <mruby/proc.h>
+#include <mruby/opcode.h>
+
+static const mrb_code call_iseq[] = {
+  OP_CALL,
+};
+
+struct RProc*
+mrb_proc_new(mrb_state *mrb, mrb_irep *irep)
+{
+  struct RProc *p;
+  mrb_callinfo *ci = mrb->c->ci;
+
+  p = (struct RProc*)mrb_obj_alloc(mrb, MRB_TT_PROC, mrb->proc_class);
+  if (ci) {
+    struct RClass *tc = NULL;
+
+    if (ci->proc) {
+      tc = MRB_PROC_TARGET_CLASS(ci->proc);
+    }
+    if (tc == NULL) {
+      tc = ci->target_class;
+    }
+    p->upper = ci->proc;
+    p->e.target_class = tc;
+  }
+  p->body.irep = irep;
+  mrb_irep_incref(mrb, irep);
+
+  return p;
+}
+
+static struct REnv*
+env_new(mrb_state *mrb, mrb_int nlocals)
+{
+  struct REnv *e;
+  mrb_callinfo *ci = mrb->c->ci;
+  int bidx;
+
+  e = (struct REnv*)mrb_obj_alloc(mrb, MRB_TT_ENV, NULL);
+  MRB_ENV_SET_STACK_LEN(e, nlocals);
+  bidx = ci->argc;
+  if (ci->argc < 0) bidx = 2;
+  else bidx += 1;
+  MRB_ENV_SET_BIDX(e, bidx);
+  e->mid = ci->mid;
+  e->stack = mrb->c->stack;
+  e->cxt = mrb->c;
+
+  return e;
+}
+
+static void
+closure_setup(mrb_state *mrb, struct RProc *p)
+{
+  mrb_callinfo *ci = mrb->c->ci;
+  struct RProc *up = p->upper;
+  struct REnv *e = NULL;
+
+  if (ci && ci->env) {
+    e = ci->env;
+  }
+  else if (up) {
+    struct RClass *tc = MRB_PROC_TARGET_CLASS(p);
+
+    e = env_new(mrb, up->body.irep->nlocals);
+    ci->env = e;
+    if (tc) {
+      e->c = tc;
+      mrb_field_write_barrier(mrb, (struct RBasic*)e, (struct RBasic*)tc);
+    }
+    if (MRB_PROC_ENV_P(up) && MRB_PROC_ENV(up)->cxt == NULL) {
+      e->mid = MRB_PROC_ENV(up)->mid;
+    }
+  }
+  if (e) {
+    p->e.env = e;
+    p->flags |= MRB_PROC_ENVSET;
+    mrb_field_write_barrier(mrb, (struct RBasic*)p, (struct RBasic*)e);
+  }
+}
+
+struct RProc*
+mrb_closure_new(mrb_state *mrb, mrb_irep *irep)
+{
+  struct RProc *p = mrb_proc_new(mrb, irep);
+
+  closure_setup(mrb, p);
+  return p;
+}
+
+MRB_API struct RProc*
+mrb_proc_new_cfunc(mrb_state *mrb, mrb_func_t func)
+{
+  struct RProc *p;
+
+  p = (struct RProc*)mrb_obj_alloc(mrb, MRB_TT_PROC, mrb->proc_class);
+  p->body.func = func;
+  p->flags |= MRB_PROC_CFUNC_FL;
+  p->upper = 0;
+  p->e.target_class = 0;
+
+  return p;
+}
+
+MRB_API struct RProc*
+mrb_proc_new_cfunc_with_env(mrb_state *mrb, mrb_func_t func, mrb_int argc, const mrb_value *argv)
+{
+  struct RProc *p = mrb_proc_new_cfunc(mrb, func);
+  struct REnv *e;
+  int i;
+
+  p->e.env = e = env_new(mrb, argc);
+  p->flags |= MRB_PROC_ENVSET;
+  mrb_field_write_barrier(mrb, (struct RBasic*)p, (struct RBasic*)e);
+  MRB_ENV_UNSHARE_STACK(e);
+  e->stack = (mrb_value*)mrb_malloc(mrb, sizeof(mrb_value) * argc);
+  if (argv) {
+    for (i = 0; i < argc; ++i) {
+      e->stack[i] = argv[i];
+    }
+  }
+  else {
+    for (i = 0; i < argc; ++i) {
+      SET_NIL_VALUE(e->stack[i]);
+    }
+  }
+  return p;
+}
+
+MRB_API struct RProc*
+mrb_closure_new_cfunc(mrb_state *mrb, mrb_func_t func, int nlocals)
+{
+  return mrb_proc_new_cfunc_with_env(mrb, func, nlocals, NULL);
+}
+
+MRB_API mrb_value
+mrb_proc_cfunc_env_get(mrb_state *mrb, mrb_int idx)
+{
+  struct RProc *p = mrb->c->ci->proc;
+  struct REnv *e;
+
+  if (!p || !MRB_PROC_CFUNC_P(p)) {
+    mrb_raise(mrb, E_TYPE_ERROR, "Can't get cfunc env from non-cfunc proc.");
+  }
+  e = MRB_PROC_ENV(p);
+  if (!e) {
+    mrb_raise(mrb, E_TYPE_ERROR, "Can't get cfunc env from cfunc Proc without REnv.");
+  }
+  if (idx < 0 || MRB_ENV_STACK_LEN(e) <= idx) {
+    mrb_raisef(mrb, E_INDEX_ERROR, "Env index out of range: %i (expected: 0 <= index < %i)",
+               idx, MRB_ENV_STACK_LEN(e));
+  }
+
+  return e->stack[idx];
+}
+
+void
+mrb_proc_copy(struct RProc *a, struct RProc *b)
+{
+  if (a->body.irep) {
+    /* already initialized proc */
+    return;
+  }
+  a->flags = b->flags;
+  a->body = b->body;
+  if (!MRB_PROC_CFUNC_P(a) && a->body.irep) {
+    a->body.irep->refcnt++;
+  }
+  a->upper = b->upper;
+  a->e.env = b->e.env;
+  /* a->e.target_class = a->e.target_class; */
+}
+
+static mrb_value
+mrb_proc_s_new(mrb_state *mrb, mrb_value proc_class)
+{
+  mrb_value blk;
+  mrb_value proc;
+  struct RProc *p;
+
+  /* Calling Proc.new without a block is not implemented yet */
+  mrb_get_args(mrb, "&!", &blk);
+  p = (struct RProc *)mrb_obj_alloc(mrb, MRB_TT_PROC, mrb_class_ptr(proc_class));
+  mrb_proc_copy(p, mrb_proc_ptr(blk));
+  proc = mrb_obj_value(p);
+  mrb_funcall_with_block(mrb, proc, mrb_intern_lit(mrb, "initialize"), 0, NULL, proc);
+  if (!MRB_PROC_STRICT_P(p) &&
+      mrb->c->ci > mrb->c->cibase && MRB_PROC_ENV(p) == mrb->c->ci[-1].env) {
+    p->flags |= MRB_PROC_ORPHAN;
+  }
+  return proc;
+}
+
+static mrb_value
+mrb_proc_init_copy(mrb_state *mrb, mrb_value self)
+{
+  mrb_value proc;
+
+  mrb_get_args(mrb, "o", &proc);
+  if (!mrb_proc_p(proc)) {
+    mrb_raise(mrb, E_ARGUMENT_ERROR, "not a proc");
+  }
+  mrb_proc_copy(mrb_proc_ptr(self), mrb_proc_ptr(proc));
+  return self;
+}
+
+/* 15.2.17.4.2 */
+static mrb_value
+proc_arity(mrb_state *mrb, mrb_value self)
+{
+  return mrb_fixnum_value(mrb_proc_arity(mrb_proc_ptr(self)));
+}
+
+/* 15.3.1.2.6  */
+/* 15.3.1.3.27 */
+/*
+ * call-seq:
+ *   lambda { |...| block }  -> a_proc
+ *
+ * Equivalent to <code>Proc.new</code>, except the resulting Proc objects
+ * check the number of parameters passed when called.
+ */
+static mrb_value
+proc_lambda(mrb_state *mrb, mrb_value self)
+{
+  mrb_value blk;
+  struct RProc *p;
+
+  mrb_get_args(mrb, "&", &blk);
+  if (mrb_nil_p(blk)) {
+    mrb_raise(mrb, E_ARGUMENT_ERROR, "tried to create Proc object without a block");
+  }
+  if (!mrb_proc_p(blk)) {
+    mrb_raise(mrb, E_ARGUMENT_ERROR, "not a proc");
+  }
+  p = mrb_proc_ptr(blk);
+  if (!MRB_PROC_STRICT_P(p)) {
+    struct RProc *p2 = (struct RProc*)mrb_obj_alloc(mrb, MRB_TT_PROC, p->c);
+    mrb_proc_copy(p2, p);
+    p2->flags |= MRB_PROC_STRICT;
+    return mrb_obj_value(p2);
+  }
+  return blk;
+}
+
+mrb_int
+mrb_proc_arity(const struct RProc *p)
+{
+  struct mrb_irep *irep;
+  const mrb_code *pc;
+  mrb_aspec aspec;
+  int ma, op, ra, pa, arity;
+
+  if (MRB_PROC_CFUNC_P(p)) {
+    /* TODO cfunc aspec not implemented yet */
+    return -1;
+  }
+
+  irep = p->body.irep;
+  if (!irep) {
+    return 0;
+  }
+
+  pc = irep->iseq;
+  /* arity is depend on OP_ENTER */
+  if (*pc != OP_ENTER) {
+    return 0;
+  }
+
+  aspec = PEEK_W(pc+1);
+  ma = MRB_ASPEC_REQ(aspec);
+  op = MRB_ASPEC_OPT(aspec);
+  ra = MRB_ASPEC_REST(aspec);
+  pa = MRB_ASPEC_POST(aspec);
+  arity = ra || (MRB_PROC_STRICT_P(p) && op) ? -(ma + pa + 1) : ma + pa;
+
+  return arity;
+}
+
+void
+mrb_init_proc(mrb_state *mrb)
+{
+  struct RProc *p;
+  mrb_method_t m;
+  mrb_irep *call_irep = (mrb_irep *)mrb_malloc(mrb, sizeof(mrb_irep));
+  static const mrb_irep mrb_irep_zero = { 0 };
+
+  *call_irep = mrb_irep_zero;
+  call_irep->flags = MRB_ISEQ_NO_FREE;
+  call_irep->iseq = call_iseq;
+  call_irep->ilen = 1;
+  call_irep->nregs = 2;         /* receiver and block */
+
+  mrb_define_class_method(mrb, mrb->proc_class, "new", mrb_proc_s_new, MRB_ARGS_NONE()|MRB_ARGS_BLOCK());
+  mrb_define_method(mrb, mrb->proc_class, "initialize_copy", mrb_proc_init_copy, MRB_ARGS_REQ(1));
+  mrb_define_method(mrb, mrb->proc_class, "arity", proc_arity, MRB_ARGS_NONE());
+
+  p = mrb_proc_new(mrb, call_irep);
+  MRB_METHOD_FROM_PROC(m, p);
+  mrb_define_method_raw(mrb, mrb->proc_class, mrb_intern_lit(mrb, "call"), m);
+  mrb_define_method_raw(mrb, mrb->proc_class, mrb_intern_lit(mrb, "[]"), m);
+
+  mrb_define_class_method(mrb, mrb->kernel_module, "lambda", proc_lambda, MRB_ARGS_NONE()|MRB_ARGS_BLOCK()); /* 15.3.1.2.6  */
+  mrb_define_method(mrb, mrb->kernel_module,       "lambda", proc_lambda, MRB_ARGS_NONE()|MRB_ARGS_BLOCK()); /* 15.3.1.3.27 */
+}
Index: /EcnlProtoTool/trunk/mruby-2.1.1/src/range.c
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/src/range.c	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/src/range.c	(revision 439)
@@ -0,0 +1,443 @@
+/*
+** range.c - Range class
+**
+** See Copyright Notice in mruby.h
+*/
+
+#include <mruby.h>
+#include <mruby/class.h>
+#include <mruby/range.h>
+#include <mruby/string.h>
+#include <mruby/array.h>
+
+#define RANGE_INITIALIZED_MASK 1
+#define RANGE_INITIALIZED(p) ((p)->flags |= RANGE_INITIALIZED_MASK)
+#define RANGE_INITIALIZED_P(p) ((p)->flags & RANGE_INITIALIZED_MASK)
+
+static void
+r_check(mrb_state *mrb, mrb_value a, mrb_value b)
+{
+  enum mrb_vtype ta;
+  enum mrb_vtype tb;
+  mrb_int n;
+
+  ta = mrb_type(a);
+  tb = mrb_type(b);
+#ifdef MRB_WITHOUT_FLOAT
+  if (ta == MRB_TT_FIXNUM && tb == MRB_TT_FIXNUM ) {
+#else
+  if ((ta == MRB_TT_FIXNUM || ta == MRB_TT_FLOAT) &&
+      (tb == MRB_TT_FIXNUM || tb == MRB_TT_FLOAT)) {
+#endif
+    return;
+  }
+
+  n = mrb_cmp(mrb, a, b);
+  if (n == -2) {                /* can not be compared */
+    mrb_raise(mrb, E_ARGUMENT_ERROR, "bad value for range");
+  }
+}
+
+static mrb_bool
+r_le(mrb_state *mrb, mrb_value a, mrb_value b)
+{
+  mrb_int n = mrb_cmp(mrb, a, b);
+
+  if (n == 0 || n == -1) return TRUE;
+  return FALSE;
+}
+
+static mrb_bool
+r_gt(mrb_state *mrb, mrb_value a, mrb_value b)
+{
+  return mrb_cmp(mrb, a, b) == 1;
+}
+
+static mrb_bool
+r_ge(mrb_state *mrb, mrb_value a, mrb_value b)
+{
+  mrb_int n = mrb_cmp(mrb, a, b);
+
+  if (n == 0 || n == 1) return TRUE;
+  return FALSE;
+}
+
+static void
+range_ptr_alloc_edges(mrb_state *mrb, struct RRange *r)
+{
+#ifndef MRB_RANGE_EMBED
+  r->edges = (mrb_range_edges *)mrb_malloc(mrb, sizeof(mrb_range_edges));
+#endif
+}
+
+static struct RRange *
+range_ptr_init(mrb_state *mrb, struct RRange *r, mrb_value beg, mrb_value end, mrb_bool excl)
+{
+  r_check(mrb, beg, end);
+
+  if (r) {
+    if (RANGE_INITIALIZED_P(r)) {
+      /* Ranges are immutable, so that they should be initialized only once. */
+      mrb_name_error(mrb, mrb_intern_lit(mrb, "initialize"), "'initialize' called twice");
+    }
+    else {
+      range_ptr_alloc_edges(mrb, r);
+    }
+  }
+  else {
+    r = (struct RRange*)mrb_obj_alloc(mrb, MRB_TT_RANGE, mrb->range_class);
+    range_ptr_alloc_edges(mrb, r);
+  }
+
+  RANGE_BEG(r) = beg;
+  RANGE_END(r) = end;
+  RANGE_EXCL(r) = excl;
+  RANGE_INITIALIZED(r);
+
+  return r;
+}
+
+static void
+range_ptr_replace(mrb_state *mrb, struct RRange *r, mrb_value beg, mrb_value end, mrb_bool excl)
+{
+  range_ptr_init(mrb, r, beg, end, excl);
+  mrb_write_barrier(mrb, (struct RBasic*)r);
+}
+
+/*
+ *  call-seq:
+ *     rng.first    => obj
+ *     rng.begin    => obj
+ *
+ *  Returns the first object in <i>rng</i>.
+ */
+static mrb_value
+range_beg(mrb_state *mrb, mrb_value range)
+{
+  return mrb_range_beg(mrb, range);
+}
+
+/*
+ *  call-seq:
+ *     rng.end    => obj
+ *     rng.last   => obj
+ *
+ *  Returns the object that defines the end of <i>rng</i>.
+ *
+ *     (1..10).end    #=> 10
+ *     (1...10).end   #=> 10
+ */
+static mrb_value
+range_end(mrb_state *mrb, mrb_value range)
+{
+  return mrb_range_end(mrb, range);
+}
+
+/*
+ *  call-seq:
+ *     range.exclude_end?    => true or false
+ *
+ *  Returns <code>true</code> if <i>range</i> excludes its end value.
+ */
+static mrb_value
+range_excl(mrb_state *mrb, mrb_value range)
+{
+  return mrb_bool_value(mrb_range_excl_p(mrb, range));
+}
+
+/*
+ *  call-seq:
+ *     Range.new(start, end, exclusive=false)    => range
+ *
+ *  Constructs a range using the given <i>start</i> and <i>end</i>. If the third
+ *  parameter is omitted or is <code>false</code>, the <i>range</i> will include
+ *  the end object; otherwise, it will be excluded.
+ */
+static mrb_value
+range_initialize(mrb_state *mrb, mrb_value range)
+{
+  mrb_value beg, end;
+  mrb_bool exclusive = FALSE;
+
+  mrb_get_args(mrb, "oo|b", &beg, &end, &exclusive);
+  range_ptr_replace(mrb, mrb_range_raw_ptr(range), beg, end, exclusive);
+  return range;
+}
+
+/*
+ *  call-seq:
+ *     range == obj    => true or false
+ *
+ *  Returns <code>true</code> only if
+ *  1) <i>obj</i> is a Range,
+ *  2) <i>obj</i> has equivalent beginning and end items (by comparing them with <code>==</code>),
+ *  3) <i>obj</i> has the same #exclude_end? setting as <i>rng</t>.
+ *
+ *    (0..2) == (0..2)            #=> true
+ *    (0..2) == Range.new(0,2)    #=> true
+ *    (0..2) == (0...2)           #=> false
+ */
+static mrb_value
+range_eq(mrb_state *mrb, mrb_value range)
+{
+  struct RRange *rr;
+  struct RRange *ro;
+  mrb_value obj;
+  mrb_bool v1, v2;
+
+  mrb_get_args(mrb, "o", &obj);
+
+  if (mrb_obj_equal(mrb, range, obj)) return mrb_true_value();
+  if (!mrb_obj_is_instance_of(mrb, obj, mrb_obj_class(mrb, range))) { /* same class? */
+    return mrb_false_value();
+  }
+
+  rr = mrb_range_ptr(mrb, range);
+  ro = mrb_range_ptr(mrb, obj);
+  v1 = mrb_equal(mrb, RANGE_BEG(rr), RANGE_BEG(ro));
+  v2 = mrb_equal(mrb, RANGE_END(rr), RANGE_END(ro));
+  if (!v1 || !v2 || RANGE_EXCL(rr) != RANGE_EXCL(ro)) {
+    return mrb_false_value();
+  }
+  return mrb_true_value();
+}
+
+/*
+ *  call-seq:
+ *     range === obj       =>  true or false
+ *     range.member?(val)  =>  true or false
+ *     range.include?(val) =>  true or false
+ */
+static mrb_value
+range_include(mrb_state *mrb, mrb_value range)
+{
+  mrb_value val;
+  struct RRange *r = mrb_range_ptr(mrb, range);
+  mrb_value beg, end;
+  mrb_bool include_p;
+
+  mrb_get_args(mrb, "o", &val);
+
+  beg = RANGE_BEG(r);
+  end = RANGE_END(r);
+  include_p = r_le(mrb, beg, val) &&                 /* beg <= val */
+              (RANGE_EXCL(r) ? r_gt(mrb, end, val)   /* end >  val */
+                             : r_ge(mrb, end, val)); /* end >= val */
+
+  return mrb_bool_value(include_p);
+}
+
+/* 15.2.14.4.12(x) */
+/*
+ * call-seq:
+ *   rng.to_s   -> string
+ *
+ * Convert this range object to a printable form.
+ */
+static mrb_value
+range_to_s(mrb_state *mrb, mrb_value range)
+{
+  mrb_value str, str2;
+  struct RRange *r = mrb_range_ptr(mrb, range);
+
+  str  = mrb_obj_as_string(mrb, RANGE_BEG(r));
+  str2 = mrb_obj_as_string(mrb, RANGE_END(r));
+  str  = mrb_str_dup(mrb, str);
+  mrb_str_cat(mrb, str, "...", RANGE_EXCL(r) ? 3 : 2);
+  mrb_str_cat_str(mrb, str, str2);
+
+  return str;
+}
+
+/* 15.2.14.4.13(x) */
+/*
+ * call-seq:
+ *   rng.inspect  -> string
+ *
+ * Convert this range object to a printable form (using
+ * <code>inspect</code> to convert the start and end
+ * objects).
+ */
+static mrb_value
+range_inspect(mrb_state *mrb, mrb_value range)
+{
+  mrb_value str, str2;
+  struct RRange *r = mrb_range_ptr(mrb, range);
+
+  str  = mrb_inspect(mrb, RANGE_BEG(r));
+  str2 = mrb_inspect(mrb, RANGE_END(r));
+  str  = mrb_str_dup(mrb, str);
+  mrb_str_cat(mrb, str, "...", RANGE_EXCL(r) ? 3 : 2);
+  mrb_str_cat_str(mrb, str, str2);
+
+  return str;
+}
+
+/* 15.2.14.4.14(x) */
+/*
+ *  call-seq:
+ *     rng.eql?(obj)    -> true or false
+ *
+ *  Returns <code>true</code> only if <i>obj</i> is a Range, has equivalent
+ *  beginning and end items (by comparing them with #eql?), and has the same
+ *  #exclude_end? setting as <i>rng</i>.
+ *
+ *    (0..2).eql?(0..2)            #=> true
+ *    (0..2).eql?(Range.new(0,2))  #=> true
+ *    (0..2).eql?(0...2)           #=> false
+ */
+static mrb_value
+range_eql(mrb_state *mrb, mrb_value range)
+{
+  mrb_value obj;
+  struct RRange *r, *o;
+
+  mrb_get_args(mrb, "o", &obj);
+
+  if (mrb_obj_equal(mrb, range, obj)) return mrb_true_value();
+  if (!mrb_obj_is_kind_of(mrb, obj, mrb->range_class)) return mrb_false_value();
+  if (!mrb_range_p(obj)) return mrb_false_value();
+
+  r = mrb_range_ptr(mrb, range);
+  o = mrb_range_ptr(mrb, obj);
+  if (!mrb_eql(mrb, RANGE_BEG(r), RANGE_BEG(o)) ||
+      !mrb_eql(mrb, RANGE_END(r), RANGE_END(o)) ||
+      (RANGE_EXCL(r) != RANGE_EXCL(o))) {
+    return mrb_false_value();
+  }
+  return mrb_true_value();
+}
+
+/* 15.2.14.4.15(x) */
+static mrb_value
+range_initialize_copy(mrb_state *mrb, mrb_value copy)
+{
+  mrb_value src;
+  struct RRange *r;
+
+  mrb_get_args(mrb, "o", &src);
+
+  if (mrb_obj_equal(mrb, copy, src)) return copy;
+  if (!mrb_obj_is_instance_of(mrb, src, mrb_obj_class(mrb, copy))) {
+    mrb_raise(mrb, E_TYPE_ERROR, "wrong argument class");
+  }
+
+  r = mrb_range_ptr(mrb, src);
+  range_ptr_replace(mrb, mrb_range_raw_ptr(copy), RANGE_BEG(r), RANGE_END(r), RANGE_EXCL(r));
+
+  return copy;
+}
+
+mrb_value
+mrb_get_values_at(mrb_state *mrb, mrb_value obj, mrb_int olen, mrb_int argc, const mrb_value *argv, mrb_value (*func)(mrb_state*, mrb_value, mrb_int))
+{
+  mrb_int i, j, beg, len;
+  mrb_value result;
+  result = mrb_ary_new(mrb);
+
+  for (i = 0; i < argc; ++i) {
+    if (mrb_fixnum_p(argv[i])) {
+      mrb_ary_push(mrb, result, func(mrb, obj, mrb_fixnum(argv[i])));
+    }
+    else if (mrb_range_beg_len(mrb, argv[i], &beg, &len, olen, FALSE) == MRB_RANGE_OK) {
+      mrb_int const end = olen < beg + len ? olen : beg + len;
+      for (j = beg; j < end; ++j) {
+        mrb_ary_push(mrb, result, func(mrb, obj, j));
+      }
+
+      for (; j < beg + len; ++j) {
+        mrb_ary_push(mrb, result, mrb_nil_value());
+      }
+    }
+    else {
+      mrb_raisef(mrb, E_TYPE_ERROR, "invalid values selector: %v", argv[i]);
+    }
+  }
+
+  return result;
+}
+
+void
+mrb_gc_mark_range(mrb_state *mrb, struct RRange *r)
+{
+  if (RANGE_INITIALIZED_P(r)) {
+    mrb_gc_mark_value(mrb, RANGE_BEG(r));
+    mrb_gc_mark_value(mrb, RANGE_END(r));
+  }
+}
+
+MRB_API struct RRange*
+mrb_range_ptr(mrb_state *mrb, mrb_value range)
+{
+  struct RRange *r = mrb_range_raw_ptr(range);
+
+  /* check for if #initialize_copy was removed [#3320] */
+  if (!RANGE_INITIALIZED_P(r)) {
+    mrb_raise(mrb, E_ARGUMENT_ERROR, "uninitialized range");
+  }
+  return r;
+}
+
+MRB_API mrb_value
+mrb_range_new(mrb_state *mrb, mrb_value beg, mrb_value end, mrb_bool excl)
+{
+  struct RRange *r = range_ptr_init(mrb, NULL, beg, end, excl);
+  return mrb_range_value(r);
+}
+
+MRB_API enum mrb_range_beg_len
+mrb_range_beg_len(mrb_state *mrb, mrb_value range, mrb_int *begp, mrb_int *lenp, mrb_int len, mrb_bool trunc)
+{
+  mrb_int beg, end;
+  struct RRange *r;
+
+  if (!mrb_range_p(range)) return MRB_RANGE_TYPE_MISMATCH;
+  r = mrb_range_ptr(mrb, range);
+
+  beg = mrb_int(mrb, RANGE_BEG(r));
+  end = mrb_int(mrb, RANGE_END(r));
+
+  if (beg < 0) {
+    beg += len;
+    if (beg < 0) return MRB_RANGE_OUT;
+  }
+
+  if (trunc) {
+    if (beg > len) return MRB_RANGE_OUT;
+    if (end > len) end = len;
+  }
+
+  if (end < 0) end += len;
+  if (!RANGE_EXCL(r) && (!trunc || end < len)) end++;  /* include end point */
+  len = end - beg;
+  if (len < 0) len = 0;
+
+  *begp = beg;
+  *lenp = len;
+  return MRB_RANGE_OK;
+}
+
+void
+mrb_init_range(mrb_state *mrb)
+{
+  struct RClass *r;
+
+  r = mrb_define_class(mrb, "Range", mrb->object_class);                                /* 15.2.14 */
+  mrb->range_class = r;
+  MRB_SET_INSTANCE_TT(r, MRB_TT_RANGE);
+
+  mrb_define_method(mrb, r, "begin",           range_beg,             MRB_ARGS_NONE()); /* 15.2.14.4.3  */
+  mrb_define_method(mrb, r, "end",             range_end,             MRB_ARGS_NONE()); /* 15.2.14.4.5  */
+  mrb_define_method(mrb, r, "==",              range_eq,              MRB_ARGS_REQ(1)); /* 15.2.14.4.1  */
+  mrb_define_method(mrb, r, "===",             range_include,         MRB_ARGS_REQ(1)); /* 15.2.14.4.2  */
+  mrb_define_method(mrb, r, "exclude_end?",    range_excl,            MRB_ARGS_NONE()); /* 15.2.14.4.6  */
+  mrb_define_method(mrb, r, "first",           range_beg,             MRB_ARGS_NONE()); /* 15.2.14.4.7  */
+  mrb_define_method(mrb, r, "include?",        range_include,         MRB_ARGS_REQ(1)); /* 15.2.14.4.8  */
+  mrb_define_method(mrb, r, "initialize",      range_initialize,      MRB_ARGS_ANY());  /* 15.2.14.4.9  */
+  mrb_define_method(mrb, r, "last",            range_end,             MRB_ARGS_NONE()); /* 15.2.14.4.10 */
+  mrb_define_method(mrb, r, "member?",         range_include,         MRB_ARGS_REQ(1)); /* 15.2.14.4.11 */
+  mrb_define_method(mrb, r, "to_s",            range_to_s,            MRB_ARGS_NONE()); /* 15.2.14.4.12(x) */
+  mrb_define_method(mrb, r, "inspect",         range_inspect,         MRB_ARGS_NONE()); /* 15.2.14.4.13(x) */
+  mrb_define_method(mrb, r, "eql?",            range_eql,             MRB_ARGS_REQ(1)); /* 15.2.14.4.14(x) */
+  mrb_define_method(mrb, r, "initialize_copy", range_initialize_copy, MRB_ARGS_REQ(1)); /* 15.2.14.4.15(x) */
+}
Index: /EcnlProtoTool/trunk/mruby-2.1.1/src/state.c
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/src/state.c	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/src/state.c	(revision 439)
@@ -0,0 +1,220 @@
+/*
+** state.c - mrb_state open/close functions
+**
+** See Copyright Notice in mruby.h
+*/
+
+#include <stdlib.h>
+#include <string.h>
+#include <mruby.h>
+#include <mruby/irep.h>
+#include <mruby/variable.h>
+#include <mruby/debug.h>
+#include <mruby/string.h>
+#include <mruby/class.h>
+
+void mrb_init_core(mrb_state*);
+void mrb_init_mrbgems(mrb_state*);
+
+void mrb_gc_init(mrb_state*, mrb_gc *gc);
+void mrb_gc_destroy(mrb_state*, mrb_gc *gc);
+
+MRB_API mrb_state*
+mrb_open_core(mrb_allocf f, void *ud)
+{
+  static const mrb_state mrb_state_zero = { 0 };
+  static const struct mrb_context mrb_context_zero = { 0 };
+  mrb_state *mrb;
+
+  if (f == NULL) f = mrb_default_allocf;
+  mrb = (mrb_state *)(f)(NULL, NULL, sizeof(mrb_state), ud);
+  if (mrb == NULL) return NULL;
+
+  *mrb = mrb_state_zero;
+  mrb->allocf_ud = ud;
+  mrb->allocf = f;
+  mrb->atexit_stack_len = 0;
+
+  mrb_gc_init(mrb, &mrb->gc);
+  mrb->c = (struct mrb_context*)mrb_malloc(mrb, sizeof(struct mrb_context));
+  *mrb->c = mrb_context_zero;
+  mrb->root_c = mrb->c;
+
+  mrb_init_core(mrb);
+
+  return mrb;
+}
+
+void*
+mrb_default_allocf(mrb_state *mrb, void *p, size_t size, void *ud)
+{
+  if (size == 0) {
+    free(p);
+    return NULL;
+  }
+  else {
+    return realloc(p, size);
+  }
+}
+
+MRB_API mrb_state*
+mrb_open(void)
+{
+  mrb_state *mrb = mrb_open_allocf(mrb_default_allocf, NULL, FALSE);
+
+  return mrb;
+}
+
+MRB_API mrb_state*
+mrb_open_allocf(mrb_allocf f, void *ud, mrb_bool disable_gems)
+{
+  mrb_state *mrb = mrb_open_core(f, ud);
+
+  if (mrb == NULL) {
+    return NULL;
+  }
+
+  if (!disable_gems) {
+#ifndef DISABLE_GEMS
+    mrb_init_mrbgems(mrb);
+    mrb_gc_arena_restore(mrb, 0);
+#endif
+  }
+  return mrb;
+}
+
+void mrb_free_symtbl(mrb_state *mrb);
+
+void
+mrb_irep_incref(mrb_state *mrb, mrb_irep *irep)
+{
+  irep->refcnt++;
+}
+
+void
+mrb_irep_decref(mrb_state *mrb, mrb_irep *irep)
+{
+  irep->refcnt--;
+  if (irep->refcnt == 0) {
+    mrb_irep_free(mrb, irep);
+  }
+}
+
+void
+mrb_irep_cutref(mrb_state *mrb, mrb_irep *irep)
+{
+  mrb_irep *tmp;
+  int i;
+
+  for (i=0; i<irep->rlen; i++) {
+    tmp = irep->reps[i];
+    irep->reps[i] = NULL;
+    if (tmp) mrb_irep_decref(mrb, tmp);
+  }
+}
+
+void
+mrb_irep_free(mrb_state *mrb, mrb_irep *irep)
+{
+  int i;
+
+  if (!(irep->flags & MRB_ISEQ_NO_FREE))
+    mrb_free(mrb, (void*)irep->iseq);
+  if (irep->pool) for (i=0; i<irep->plen; i++) {
+    if (mrb_string_p(irep->pool[i])) {
+      mrb_gc_free_str(mrb, RSTRING(irep->pool[i]));
+      mrb_free(mrb, mrb_obj_ptr(irep->pool[i]));
+    }
+#if defined(MRB_WORD_BOXING) && !defined(MRB_WITHOUT_FLOAT)
+    else if (mrb_float_p(irep->pool[i])) {
+      mrb_free(mrb, mrb_obj_ptr(irep->pool[i]));
+    }
+#endif
+  }
+  mrb_free(mrb, irep->pool);
+  mrb_free(mrb, irep->syms);
+  for (i=0; i<irep->rlen; i++) {
+    if (irep->reps[i])
+      mrb_irep_decref(mrb, irep->reps[i]);
+  }
+  mrb_free(mrb, irep->reps);
+  mrb_free(mrb, irep->lv);
+  mrb_debug_info_free(mrb, irep->debug_info);
+  mrb_free(mrb, irep);
+}
+
+void mrb_free_backtrace(mrb_state *mrb);
+
+MRB_API void
+mrb_free_context(mrb_state *mrb, struct mrb_context *c)
+{
+  if (!c) return;
+  mrb_free(mrb, c->stbase);
+  mrb_free(mrb, c->cibase);
+  mrb_free(mrb, c->rescue);
+  mrb_free(mrb, c->ensure);
+  mrb_free(mrb, c);
+}
+
+MRB_API void
+mrb_close(mrb_state *mrb)
+{
+  if (!mrb) return;
+  if (mrb->atexit_stack_len > 0) {
+    mrb_int i;
+    for (i = mrb->atexit_stack_len; i > 0; --i) {
+      mrb->atexit_stack[i - 1](mrb);
+    }
+#ifndef MRB_FIXED_STATE_ATEXIT_STACK
+    mrb_free(mrb, mrb->atexit_stack);
+#endif
+  }
+
+  /* free */
+  mrb_gc_destroy(mrb, &mrb->gc);
+  mrb_free_context(mrb, mrb->root_c);
+  mrb_gc_free_gv(mrb);
+  mrb_free_symtbl(mrb);
+  mrb_free(mrb, mrb);
+}
+
+MRB_API mrb_irep*
+mrb_add_irep(mrb_state *mrb)
+{
+  static const mrb_irep mrb_irep_zero = { 0 };
+  mrb_irep *irep;
+
+  irep = (mrb_irep *)mrb_malloc(mrb, sizeof(mrb_irep));
+  *irep = mrb_irep_zero;
+  irep->refcnt = 1;
+
+  return irep;
+}
+
+MRB_API mrb_value
+mrb_top_self(mrb_state *mrb)
+{
+  return mrb_obj_value(mrb->top_self);
+}
+
+MRB_API void
+mrb_state_atexit(mrb_state *mrb, mrb_atexit_func f)
+{
+#ifdef MRB_FIXED_STATE_ATEXIT_STACK
+  if (mrb->atexit_stack_len + 1 > MRB_FIXED_STATE_ATEXIT_STACK_SIZE) {
+    mrb_raise(mrb, E_RUNTIME_ERROR, "exceeded fixed state atexit stack limit");
+  }
+#else
+  size_t stack_size;
+
+  stack_size = sizeof(mrb_atexit_func) * (mrb->atexit_stack_len + 1);
+  if (mrb->atexit_stack_len == 0) {
+    mrb->atexit_stack = (mrb_atexit_func*)mrb_malloc(mrb, stack_size);
+  }
+  else {
+    mrb->atexit_stack = (mrb_atexit_func*)mrb_realloc(mrb, mrb->atexit_stack, stack_size);
+  }
+#endif
+
+  mrb->atexit_stack[mrb->atexit_stack_len++] = f;
+}
Index: /EcnlProtoTool/trunk/mruby-2.1.1/src/string.c
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/src/string.c	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/src/string.c	(revision 439)
@@ -0,0 +1,3227 @@
+/*
+** string.c - String class
+**
+** See Copyright Notice in mruby.h
+*/
+
+#ifdef _MSC_VER
+# define _CRT_NONSTDC_NO_DEPRECATE
+#endif
+
+#ifndef MRB_WITHOUT_FLOAT
+#include <float.h>
+#include <math.h>
+#endif
+#include <limits.h>
+#include <stddef.h>
+#include <stdlib.h>
+#include <string.h>
+#include <mruby.h>
+#include <mruby/array.h>
+#include <mruby/class.h>
+#include <mruby/range.h>
+#include <mruby/string.h>
+#include <mruby/numeric.h>
+
+typedef struct mrb_shared_string {
+  int refcnt;
+  mrb_ssize capa;
+  char *ptr;
+} mrb_shared_string;
+
+const char mrb_digitmap[] = "0123456789abcdefghijklmnopqrstuvwxyz";
+
+#define mrb_obj_alloc_string(mrb) ((struct RString*)mrb_obj_alloc((mrb), MRB_TT_STRING, (mrb)->string_class))
+
+static struct RString*
+str_init_normal_capa(mrb_state *mrb, struct RString *s,
+                     const char *p, size_t len, size_t capa)
+{
+  char *dst = (char *)mrb_malloc(mrb, capa + 1);
+  if (p) memcpy(dst, p, len);
+  dst[len] = '\0';
+  s->as.heap.ptr = dst;
+  s->as.heap.len = (mrb_ssize)len;
+  s->as.heap.aux.capa = (mrb_ssize)capa;
+  RSTR_UNSET_TYPE_FLAG(s);
+  return s;
+}
+
+static struct RString*
+str_init_normal(mrb_state *mrb, struct RString *s, const char *p, size_t len)
+{
+  return str_init_normal_capa(mrb, s, p, len, len);
+}
+
+static struct RString*
+str_init_embed(struct RString *s, const char *p, size_t len)
+{
+  if (p) memcpy(RSTR_EMBED_PTR(s), p, len);
+  RSTR_EMBED_PTR(s)[len] = '\0';
+  RSTR_SET_TYPE_FLAG(s, EMBED);
+  RSTR_SET_EMBED_LEN(s, len);
+  return s;
+}
+
+static struct RString*
+str_init_nofree(struct RString *s, const char *p, size_t len)
+{
+  s->as.heap.ptr = (char *)p;
+  s->as.heap.len = (mrb_ssize)len;
+  s->as.heap.aux.capa = 0;             /* nofree */
+  RSTR_SET_TYPE_FLAG(s, NOFREE);
+  return s;
+}
+
+static struct RString*
+str_init_shared(mrb_state *mrb, const struct RString *orig, struct RString *s, mrb_shared_string *shared)
+{
+  if (shared) {
+    shared->refcnt++;
+  }
+  else {
+    shared = (mrb_shared_string *)mrb_malloc(mrb, sizeof(mrb_shared_string));
+    shared->refcnt = 1;
+    shared->ptr = orig->as.heap.ptr;
+    shared->capa = orig->as.heap.aux.capa;
+  }
+  s->as.heap.ptr = orig->as.heap.ptr;
+  s->as.heap.len = orig->as.heap.len;
+  s->as.heap.aux.shared = shared;
+  RSTR_SET_TYPE_FLAG(s, SHARED);
+  return s;
+}
+
+static struct RString*
+str_init_fshared(const struct RString *orig, struct RString *s, struct RString *fshared)
+{
+  s->as.heap.ptr = orig->as.heap.ptr;
+  s->as.heap.len = orig->as.heap.len;
+  s->as.heap.aux.fshared = fshared;
+  RSTR_SET_TYPE_FLAG(s, FSHARED);
+  return s;
+}
+
+static struct RString*
+str_init_modifiable(mrb_state *mrb, struct RString *s, const char *p, size_t len)
+{
+  if (RSTR_EMBEDDABLE_P(len)) {
+    return str_init_embed(s, p, len);
+  }
+  else {
+    return str_init_normal(mrb, s, p, len);
+  }
+}
+
+static struct RString*
+str_new_static(mrb_state *mrb, const char *p, size_t len)
+{
+  if (RSTR_EMBEDDABLE_P(len)) {
+    return str_init_embed(mrb_obj_alloc_string(mrb), p, len);
+  }
+  if (len >= MRB_SSIZE_MAX) {
+    mrb_raise(mrb, E_ARGUMENT_ERROR, "string size too big");
+  }
+  return str_init_nofree(mrb_obj_alloc_string(mrb), p, len);
+}
+
+static struct RString*
+str_new(mrb_state *mrb, const char *p, size_t len)
+{
+  if (RSTR_EMBEDDABLE_P(len)) {
+    return str_init_embed(mrb_obj_alloc_string(mrb), p, len);
+  }
+  if (len >= MRB_SSIZE_MAX) {
+    mrb_raise(mrb, E_ARGUMENT_ERROR, "string size too big");
+  }
+  if (p && mrb_ro_data_p(p)) {
+    return str_init_nofree(mrb_obj_alloc_string(mrb), p, len);
+  }
+  return str_init_normal(mrb, mrb_obj_alloc_string(mrb), p, len);
+}
+
+static inline void
+str_with_class(struct RString *s, mrb_value obj)
+{
+  s->c = mrb_str_ptr(obj)->c;
+}
+
+static mrb_value
+mrb_str_new_empty(mrb_state *mrb, mrb_value str)
+{
+  struct RString *s = str_new(mrb, 0, 0);
+
+  str_with_class(s, str);
+  return mrb_obj_value(s);
+}
+
+MRB_API mrb_value
+mrb_str_new_capa(mrb_state *mrb, size_t capa)
+{
+  struct RString *s;
+
+  if (RSTR_EMBEDDABLE_P(capa)) {
+    s = str_init_embed(mrb_obj_alloc_string(mrb), NULL, 0);
+  }
+  else if (capa >= MRB_SSIZE_MAX) {
+    mrb_raise(mrb, E_ARGUMENT_ERROR, "string capacity size too big");
+    /* not reached */
+    s = NULL;
+  }
+  else {
+    s = str_init_normal_capa(mrb, mrb_obj_alloc_string(mrb), NULL, 0, capa);
+  }
+
+  return mrb_obj_value(s);
+}
+
+#ifndef MRB_STR_BUF_MIN_SIZE
+# define MRB_STR_BUF_MIN_SIZE 128
+#endif
+
+MRB_API mrb_value
+mrb_str_buf_new(mrb_state *mrb, size_t capa)
+{
+  if (capa < MRB_STR_BUF_MIN_SIZE) {
+    capa = MRB_STR_BUF_MIN_SIZE;
+  }
+  return mrb_str_new_capa(mrb, capa);
+}
+
+static void
+resize_capa(mrb_state *mrb, struct RString *s, size_t capacity)
+{
+#if SIZE_MAX > MRB_SSIZE_MAX
+    mrb_assert(capacity < MRB_SSIZE_MAX);
+#endif
+  if (RSTR_EMBED_P(s)) {
+    if (!RSTR_EMBEDDABLE_P(capacity)) {
+      str_init_normal_capa(mrb, s, RSTR_EMBED_PTR(s), RSTR_EMBED_LEN(s), capacity);
+    }
+  }
+  else {
+    s->as.heap.ptr = (char*)mrb_realloc(mrb, RSTR_PTR(s), capacity+1);
+    s->as.heap.aux.capa = (mrb_ssize)capacity;
+  }
+}
+
+MRB_API mrb_value
+mrb_str_new(mrb_state *mrb, const char *p, size_t len)
+{
+  return mrb_obj_value(str_new(mrb, p, len));
+}
+
+MRB_API mrb_value
+mrb_str_new_cstr(mrb_state *mrb, const char *p)
+{
+  struct RString *s;
+  size_t len;
+
+  if (p) {
+    len = strlen(p);
+  }
+  else {
+    len = 0;
+  }
+
+  s = str_new(mrb, p, len);
+
+  return mrb_obj_value(s);
+}
+
+MRB_API mrb_value
+mrb_str_new_static(mrb_state *mrb, const char *p, size_t len)
+{
+  struct RString *s = str_new_static(mrb, p, len);
+  return mrb_obj_value(s);
+}
+
+static void
+str_decref(mrb_state *mrb, mrb_shared_string *shared)
+{
+  shared->refcnt--;
+  if (shared->refcnt == 0) {
+    mrb_free(mrb, shared->ptr);
+    mrb_free(mrb, shared);
+  }
+}
+
+static void
+str_modify_keep_ascii(mrb_state *mrb, struct RString *s)
+{
+  if (RSTR_SHARED_P(s)) {
+    mrb_shared_string *shared = s->as.heap.aux.shared;
+
+    if (shared->refcnt == 1 && s->as.heap.ptr == shared->ptr) {
+      s->as.heap.aux.capa = shared->capa;
+      s->as.heap.ptr[s->as.heap.len] = '\0';
+      RSTR_UNSET_SHARED_FLAG(s);
+      mrb_free(mrb, shared);
+    }
+    else {
+      str_init_modifiable(mrb, s, s->as.heap.ptr, (size_t)s->as.heap.len);
+      str_decref(mrb, shared);
+    }
+  }
+  else if (RSTR_NOFREE_P(s) || RSTR_FSHARED_P(s)) {
+    str_init_modifiable(mrb, s, s->as.heap.ptr, (size_t)s->as.heap.len);
+  }
+}
+
+static void
+check_null_byte(mrb_state *mrb, mrb_value str)
+{
+  mrb_to_str(mrb, str);
+  if (memchr(RSTRING_PTR(str), '\0', RSTRING_LEN(str))) {
+    mrb_raise(mrb, E_ARGUMENT_ERROR, "string contains null byte");
+  }
+}
+
+void
+mrb_gc_free_str(mrb_state *mrb, struct RString *str)
+{
+  if (RSTR_EMBED_P(str))
+    /* no code */;
+  else if (RSTR_SHARED_P(str))
+    str_decref(mrb, str->as.heap.aux.shared);
+  else if (!RSTR_NOFREE_P(str) && !RSTR_FSHARED_P(str))
+    mrb_free(mrb, str->as.heap.ptr);
+}
+
+#ifdef MRB_UTF8_STRING
+static const char utf8len_codepage[256] =
+{
+  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+  2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+  3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,1,1,1,1,1,1,1,1,1,1,1,
+};
+
+mrb_int
+mrb_utf8len(const char* p, const char* e)
+{
+  mrb_int len;
+  mrb_int i;
+
+  if ((unsigned char)*p < 0x80) return 1;
+  len = utf8len_codepage[(unsigned char)*p];
+  if (len == 1) return 1;
+  if (len > e - p) return 1;
+  for (i = 1; i < len; ++i)
+    if ((p[i] & 0xc0) != 0x80)
+      return 1;
+  return len;
+}
+
+mrb_int
+mrb_utf8_strlen(const char *str, mrb_int byte_len)
+{
+  mrb_int total = 0;
+  const char *p = str;
+  const char *e = p + byte_len;
+
+  while (p < e) {
+    p += mrb_utf8len(p, e);
+    total++;
+  }
+  return total;
+}
+
+static mrb_int
+utf8_strlen(mrb_value str)
+{
+  struct RString *s = mrb_str_ptr(str);
+  mrb_int byte_len = RSTR_LEN(s);
+
+  if (RSTR_ASCII_P(s)) {
+    return byte_len;
+  }
+  else {
+    mrb_int utf8_len = mrb_utf8_strlen(RSTR_PTR(s), byte_len);
+    if (byte_len == utf8_len) RSTR_SET_ASCII_FLAG(s);
+    return utf8_len;
+  }
+}
+
+#define RSTRING_CHAR_LEN(s) utf8_strlen(s)
+
+/* map character index to byte offset index */
+static mrb_int
+chars2bytes(mrb_value s, mrb_int off, mrb_int idx)
+{
+  if (RSTR_ASCII_P(mrb_str_ptr(s))) {
+    return idx;
+  }
+  else {
+    mrb_int i, b, n;
+    const char *p = RSTRING_PTR(s) + off;
+    const char *e = RSTRING_END(s);
+
+    for (b=i=0; p<e && i<idx; i++) {
+      n = mrb_utf8len(p, e);
+      b += n;
+      p += n;
+    }
+    return b;
+  }
+}
+
+/* map byte offset to character index */
+static mrb_int
+bytes2chars(char *p, mrb_int len, mrb_int bi)
+{
+  const char *e = p + (size_t)len;
+  const char *pivot = p + bi;
+  mrb_int i;
+
+  for (i = 0; p < pivot; i ++) {
+    p += mrb_utf8len(p, e);
+  }
+  if (p != pivot) return -1;
+  return i;
+}
+
+static const char *
+char_adjust(const char *beg, const char *end, const char *ptr)
+{
+  if ((ptr > beg || ptr < end) && (*ptr & 0xc0) == 0x80) {
+    const int utf8_adjust_max = 3;
+    const char *p;
+
+    if (ptr - beg > utf8_adjust_max) {
+      beg = ptr - utf8_adjust_max;
+    }
+
+    p = ptr;
+    while (p > beg) {
+      p --;
+      if ((*p & 0xc0) != 0x80) {
+        int clen = mrb_utf8len(p, end);
+        if (clen > ptr - p) return p;
+        break;
+      }
+    }
+  }
+
+  return ptr;
+}
+
+static const char *
+char_backtrack(const char *ptr, const char *end)
+{
+  if (ptr < end) {
+    const int utf8_bytelen_max = 4;
+    const char *p;
+
+    if (end - ptr > utf8_bytelen_max) {
+      ptr = end - utf8_bytelen_max;
+    }
+
+    p = end;
+    while (p > ptr) {
+      p --;
+      if ((*p & 0xc0) != 0x80) {
+        int clen = utf8len_codepage[(unsigned char)*p];
+        if (clen == end - p) { return p; }
+        break;
+      }
+    }
+  }
+
+  return end - 1;
+}
+
+static mrb_int
+str_index_str_by_char_search(mrb_state *mrb, const char *p, const char *pend, const char *s, const mrb_int slen, mrb_int off)
+{
+  /* Based on Quick Search algorithm (Boyer-Moore-Horspool algorithm) */
+
+  ptrdiff_t qstable[1 << CHAR_BIT];
+
+  /* Preprocessing */
+  {
+    mrb_int i;
+
+    for (i = 0; i < 1 << CHAR_BIT; i ++) {
+      qstable[i] = slen;
+    }
+    for (i = 0; i < slen; i ++) {
+      qstable[(unsigned char)s[i]] = slen - (i + 1);
+    }
+  }
+
+  /* Searching */
+  while (p < pend && pend - p >= slen) {
+    const char *pivot;
+
+    if (memcmp(p, s, slen) == 0) {
+      return off;
+    }
+
+    pivot = p + qstable[(unsigned char)p[slen - 1]];
+    if (pivot >= pend || pivot < p /* overflowed */) { return -1; }
+
+    do {
+      p += mrb_utf8len(p, pend);
+      off ++;
+    } while (p < pivot);
+  }
+
+  return -1;
+}
+
+static mrb_int
+str_index_str_by_char(mrb_state *mrb, mrb_value str, mrb_value sub, mrb_int pos)
+{
+  const char *p = RSTRING_PTR(str);
+  const char *pend = p + RSTRING_LEN(str);
+  const char *s = RSTRING_PTR(sub);
+  const mrb_int slen = RSTRING_LEN(sub);
+  mrb_int off = pos;
+
+  for (; pos > 0; pos --) {
+    if (pend - p < 1) { return -1; }
+    p += mrb_utf8len(p, pend);
+  }
+
+  if (slen < 1) { return off; }
+
+  return str_index_str_by_char_search(mrb, p, pend, s, slen, off);
+}
+
+#define BYTES_ALIGN_CHECK(pos) if (pos < 0) return mrb_nil_value();
+#else
+#define RSTRING_CHAR_LEN(s) RSTRING_LEN(s)
+#define chars2bytes(p, off, ci) (ci)
+#define bytes2chars(p, end, bi) (bi)
+#define char_adjust(beg, end, ptr) (ptr)
+#define char_backtrack(ptr, end) ((end) - 1)
+#define BYTES_ALIGN_CHECK(pos)
+#define str_index_str_by_char(mrb, str, sub, pos) str_index_str(mrb, str, sub, pos)
+#endif
+
+#ifndef MRB_QS_SHORT_STRING_LENGTH
+#define MRB_QS_SHORT_STRING_LENGTH 2048
+#endif
+
+static inline mrb_int
+mrb_memsearch_qs(const unsigned char *xs, mrb_int m, const unsigned char *ys, mrb_int n)
+{
+  if (n + m < MRB_QS_SHORT_STRING_LENGTH) {
+    const unsigned char *y = ys;
+    const unsigned char *ye = ys+n-m+1;
+
+    for (;;) {
+      y = (const unsigned char*)memchr(y, xs[0], (size_t)(ye-y));
+      if (y == NULL) return -1;
+      if (memcmp(xs, y, m) == 0) {
+        return (mrb_int)(y - ys);
+      }
+      y++;
+    }
+    return -1;
+  }
+  else {
+    const unsigned char *x = xs, *xe = xs + m;
+    const unsigned char *y = ys;
+    int i;
+    ptrdiff_t qstable[256];
+
+    /* Preprocessing */
+    for (i = 0; i < 256; ++i)
+      qstable[i] = m + 1;
+    for (; x < xe; ++x)
+      qstable[*x] = xe - x;
+    /* Searching */
+    for (; y + m <= ys + n; y += *(qstable + y[m])) {
+      if (*xs == *y && memcmp(xs, y, m) == 0)
+        return (mrb_int)(y - ys);
+    }
+    return -1;
+  }
+}
+
+static mrb_int
+mrb_memsearch(const void *x0, mrb_int m, const void *y0, mrb_int n)
+{
+  const unsigned char *x = (const unsigned char *)x0, *y = (const unsigned char *)y0;
+
+  if (m > n) return -1;
+  else if (m == n) {
+    return memcmp(x0, y0, m) == 0 ? 0 : -1;
+  }
+  else if (m < 1) {
+    return 0;
+  }
+  else if (m == 1) {
+    const unsigned char *ys = (const unsigned char *)memchr(y, *x, n);
+
+    if (ys)
+      return (mrb_int)(ys - y);
+    else
+      return -1;
+  }
+  return mrb_memsearch_qs((const unsigned char *)x0, m, (const unsigned char *)y0, n);
+}
+
+static void
+str_share(mrb_state *mrb, struct RString *orig, struct RString *s)
+{
+  size_t len = (size_t)orig->as.heap.len;
+
+  mrb_assert(!RSTR_EMBED_P(orig));
+  if (RSTR_NOFREE_P(orig)) {
+    str_init_nofree(s, orig->as.heap.ptr, len);
+  }
+  else if (RSTR_SHARED_P(orig)) {
+    str_init_shared(mrb, orig, s, orig->as.heap.aux.shared);
+  }
+  else if (RSTR_FSHARED_P(orig)) {
+    str_init_fshared(orig, s, orig->as.heap.aux.fshared);
+  }
+  else if (mrb_frozen_p(orig) && !RSTR_POOL_P(orig)) {
+    str_init_fshared(orig, s, orig);
+  }
+  else {
+    if (orig->as.heap.aux.capa > orig->as.heap.len) {
+      orig->as.heap.ptr = (char *)mrb_realloc(mrb, orig->as.heap.ptr, len+1);
+      orig->as.heap.aux.capa = (mrb_ssize)len;
+    }
+    str_init_shared(mrb, orig, s, NULL);
+    str_init_shared(mrb, orig, orig, s->as.heap.aux.shared);
+  }
+}
+
+mrb_value
+mrb_str_pool(mrb_state *mrb, const char *p, mrb_int len, mrb_bool nofree)
+{
+  struct RString *s = (struct RString *)mrb_malloc(mrb, sizeof(struct RString));
+
+  s->tt = MRB_TT_STRING;
+  s->c = mrb->string_class;
+  s->flags = 0;
+
+  if (RSTR_EMBEDDABLE_P(len)) {
+    str_init_embed(s, p, len);
+  }
+  else if (nofree) {
+    str_init_nofree(s, p, len);
+  }
+  else {
+    str_init_normal(mrb, s, p, len);
+  }
+  RSTR_SET_POOL_FLAG(s);
+  MRB_SET_FROZEN_FLAG(s);
+  return mrb_obj_value(s);
+}
+
+mrb_value
+mrb_str_byte_subseq(mrb_state *mrb, mrb_value str, mrb_int beg, mrb_int len)
+{
+  struct RString *orig, *s;
+
+  orig = mrb_str_ptr(str);
+  s = mrb_obj_alloc_string(mrb);
+  if (RSTR_EMBEDDABLE_P(len)) {
+    str_init_embed(s, RSTR_PTR(orig)+beg, len);
+  }
+  else {
+    str_share(mrb, orig, s);
+    s->as.heap.ptr += (mrb_ssize)beg;
+    s->as.heap.len = (mrb_ssize)len;
+  }
+  RSTR_COPY_ASCII_FLAG(s, orig);
+  return mrb_obj_value(s);
+}
+
+static void
+str_range_to_bytes(mrb_value str, mrb_int *pos, mrb_int *len)
+{
+  *pos = chars2bytes(str, 0, *pos);
+  *len = chars2bytes(str, *pos, *len);
+}
+#ifdef MRB_UTF8_STRING
+static inline mrb_value
+str_subseq(mrb_state *mrb, mrb_value str, mrb_int beg, mrb_int len)
+{
+  str_range_to_bytes(str, &beg, &len);
+  return mrb_str_byte_subseq(mrb, str, beg, len);
+}
+#else
+#define str_subseq(mrb, str, beg, len) mrb_str_byte_subseq(mrb, str, beg, len)
+#endif
+
+mrb_bool
+mrb_str_beg_len(mrb_int str_len, mrb_int *begp, mrb_int *lenp)
+{
+  if (str_len < *begp || *lenp < 0) return FALSE;
+  if (*begp < 0) {
+    *begp += str_len;
+    if (*begp < 0) return FALSE;
+  }
+  if (*lenp > str_len - *begp)
+    *lenp = str_len - *begp;
+  if (*lenp <= 0) {
+    *lenp = 0;
+  }
+  return TRUE;
+}
+
+static mrb_value
+str_substr(mrb_state *mrb, mrb_value str, mrb_int beg, mrb_int len)
+{
+  return mrb_str_beg_len(RSTRING_CHAR_LEN(str), &beg, &len) ?
+    str_subseq(mrb, str, beg, len) : mrb_nil_value();
+}
+
+MRB_API mrb_int
+mrb_str_index(mrb_state *mrb, mrb_value str, const char *sptr, mrb_int slen, mrb_int offset)
+{
+  mrb_int pos;
+  char *s;
+  mrb_int len;
+
+  len = RSTRING_LEN(str);
+  if (offset < 0) {
+    offset += len;
+    if (offset < 0) return -1;
+  }
+  if (len - offset < slen) return -1;
+  s = RSTRING_PTR(str);
+  if (offset) {
+    s += offset;
+  }
+  if (slen == 0) return offset;
+  /* need proceed one character at a time */
+  len = RSTRING_LEN(str) - offset;
+  pos = mrb_memsearch(sptr, slen, s, len);
+  if (pos < 0) return pos;
+  return pos + offset;
+}
+
+static mrb_int
+str_index_str(mrb_state *mrb, mrb_value str, mrb_value str2, mrb_int offset)
+{
+  const char *ptr;
+  mrb_int len;
+
+  ptr = RSTRING_PTR(str2);
+  len = RSTRING_LEN(str2);
+
+  return mrb_str_index(mrb, str, ptr, len, offset);
+}
+
+static mrb_value
+str_replace(mrb_state *mrb, struct RString *s1, struct RString *s2)
+{
+  size_t len;
+
+  mrb_check_frozen(mrb, s1);
+  if (s1 == s2) return mrb_obj_value(s1);
+  RSTR_COPY_ASCII_FLAG(s1, s2);
+  if (RSTR_SHARED_P(s1)) {
+    str_decref(mrb, s1->as.heap.aux.shared);
+  }
+  else if (!RSTR_EMBED_P(s1) && !RSTR_NOFREE_P(s1) && !RSTR_FSHARED_P(s1)
+           && s1->as.heap.ptr) {
+    mrb_free(mrb, s1->as.heap.ptr);
+  }
+
+  len = (size_t)RSTR_LEN(s2);
+  if (RSTR_EMBEDDABLE_P(len)) {
+    str_init_embed(s1, RSTR_PTR(s2), len);
+  }
+  else {
+    str_share(mrb, s2, s1);
+  }
+
+  return mrb_obj_value(s1);
+}
+
+static mrb_int
+str_rindex(mrb_state *mrb, mrb_value str, mrb_value sub, mrb_int pos)
+{
+  const char *s, *sbeg, *t;
+  struct RString *ps = mrb_str_ptr(str);
+  mrb_int len = RSTRING_LEN(sub);
+
+  /* substring longer than string */
+  if (RSTR_LEN(ps) < len) return -1;
+  if (RSTR_LEN(ps) - pos < len) {
+    pos = RSTR_LEN(ps) - len;
+  }
+  sbeg = RSTR_PTR(ps);
+  s = RSTR_PTR(ps) + pos;
+  t = RSTRING_PTR(sub);
+  if (len) {
+    s = char_adjust(sbeg, sbeg + RSTR_LEN(ps), s);
+    while (sbeg <= s) {
+      if (memcmp(s, t, len) == 0) {
+        return (mrb_int)(s - RSTR_PTR(ps));
+      }
+      s = char_backtrack(sbeg, s);
+    }
+    return -1;
+  }
+  else {
+    return pos;
+  }
+}
+
+MRB_API mrb_int
+mrb_str_strlen(mrb_state *mrb, struct RString *s)
+{
+  mrb_int i, max = RSTR_LEN(s);
+  char *p = RSTR_PTR(s);
+
+  if (!p) return 0;
+  for (i=0; i<max; i++) {
+    if (p[i] == '\0') {
+      mrb_raise(mrb, E_ARGUMENT_ERROR, "string contains null byte");
+    }
+  }
+  return max;
+}
+
+#ifdef _WIN32
+#include <windows.h>
+
+char*
+mrb_utf8_from_locale(const char *str, int len)
+{
+  wchar_t* wcsp;
+  char* mbsp;
+  int mbssize, wcssize;
+
+  if (len == 0)
+    return strdup("");
+  if (len == -1)
+    len = (int)strlen(str);
+  wcssize = MultiByteToWideChar(GetACP(), 0, str, len,  NULL, 0);
+  wcsp = (wchar_t*) malloc((wcssize + 1) * sizeof(wchar_t));
+  if (!wcsp)
+    return NULL;
+  wcssize = MultiByteToWideChar(GetACP(), 0, str, len, wcsp, wcssize + 1);
+  wcsp[wcssize] = 0;
+
+  mbssize = WideCharToMultiByte(CP_UTF8, 0, (LPCWSTR) wcsp, -1, NULL, 0, NULL, NULL);
+  mbsp = (char*) malloc((mbssize + 1));
+  if (!mbsp) {
+    free(wcsp);
+    return NULL;
+  }
+  mbssize = WideCharToMultiByte(CP_UTF8, 0, (LPCWSTR) wcsp, -1, mbsp, mbssize, NULL, NULL);
+  mbsp[mbssize] = 0;
+  free(wcsp);
+  return mbsp;
+}
+
+char*
+mrb_locale_from_utf8(const char *utf8, int len)
+{
+  wchar_t* wcsp;
+  char* mbsp;
+  int mbssize, wcssize;
+
+  if (len == 0)
+    return strdup("");
+  if (len == -1)
+    len = (int)strlen(utf8);
+  wcssize = MultiByteToWideChar(CP_UTF8, 0, utf8, len,  NULL, 0);
+  wcsp = (wchar_t*) malloc((wcssize + 1) * sizeof(wchar_t));
+  if (!wcsp)
+    return NULL;
+  wcssize = MultiByteToWideChar(CP_UTF8, 0, utf8, len, wcsp, wcssize + 1);
+  wcsp[wcssize] = 0;
+  mbssize = WideCharToMultiByte(GetACP(), 0, (LPCWSTR) wcsp, -1, NULL, 0, NULL, NULL);
+  mbsp = (char*) malloc((mbssize + 1));
+  if (!mbsp) {
+    free(wcsp);
+    return NULL;
+  }
+  mbssize = WideCharToMultiByte(GetACP(), 0, (LPCWSTR) wcsp, -1, mbsp, mbssize, NULL, NULL);
+  mbsp[mbssize] = 0;
+  free(wcsp);
+  return mbsp;
+}
+#endif
+
+MRB_API void
+mrb_str_modify_keep_ascii(mrb_state *mrb, struct RString *s)
+{
+  mrb_check_frozen(mrb, s);
+  str_modify_keep_ascii(mrb, s);
+}
+
+MRB_API void
+mrb_str_modify(mrb_state *mrb, struct RString *s)
+{
+  mrb_str_modify_keep_ascii(mrb, s);
+  RSTR_UNSET_ASCII_FLAG(s);
+}
+
+MRB_API mrb_value
+mrb_str_resize(mrb_state *mrb, mrb_value str, mrb_int len)
+{
+  mrb_int slen;
+  struct RString *s = mrb_str_ptr(str);
+
+  if (len < 0) {
+    mrb_raise(mrb, E_ARGUMENT_ERROR, "negative (or overflowed) string size");
+  }
+  mrb_str_modify(mrb, s);
+  slen = RSTR_LEN(s);
+  if (len != slen) {
+    if (slen < len || slen - len > 256) {
+      resize_capa(mrb, s, len);
+    }
+    RSTR_SET_LEN(s, len);
+    RSTR_PTR(s)[len] = '\0';   /* sentinel */
+  }
+  return str;
+}
+
+MRB_API char*
+mrb_str_to_cstr(mrb_state *mrb, mrb_value str0)
+{
+  struct RString *s;
+
+  check_null_byte(mrb, str0);
+  s = str_new(mrb, RSTRING_PTR(str0), RSTRING_LEN(str0));
+  return RSTR_PTR(s);
+}
+
+MRB_API void
+mrb_str_concat(mrb_state *mrb, mrb_value self, mrb_value other)
+{
+  other = mrb_str_to_str(mrb, other);
+  mrb_str_cat_str(mrb, self, other);
+}
+
+MRB_API mrb_value
+mrb_str_plus(mrb_state *mrb, mrb_value a, mrb_value b)
+{
+  struct RString *s = mrb_str_ptr(a);
+  struct RString *s2 = mrb_str_ptr(b);
+  struct RString *t;
+
+  t = str_new(mrb, 0, RSTR_LEN(s) + RSTR_LEN(s2));
+  memcpy(RSTR_PTR(t), RSTR_PTR(s), RSTR_LEN(s));
+  memcpy(RSTR_PTR(t) + RSTR_LEN(s), RSTR_PTR(s2), RSTR_LEN(s2));
+
+  return mrb_obj_value(t);
+}
+
+/* 15.2.10.5.2  */
+
+/*
+ *  call-seq:
+ *     str + other_str   -> new_str
+ *
+ *  Concatenation---Returns a new <code>String</code> containing
+ *  <i>other_str</i> concatenated to <i>str</i>.
+ *
+ *     "Hello from " + self.to_s   #=> "Hello from main"
+ */
+static mrb_value
+mrb_str_plus_m(mrb_state *mrb, mrb_value self)
+{
+  mrb_value str;
+
+  mrb_get_args(mrb, "S", &str);
+  return mrb_str_plus(mrb, self, str);
+}
+
+/* 15.2.10.5.26 */
+/* 15.2.10.5.33 */
+/*
+ *  call-seq:
+ *     "abcd".size   => int
+ *
+ *  Returns the length of string.
+ */
+static mrb_value
+mrb_str_size(mrb_state *mrb, mrb_value self)
+{
+  mrb_int len = RSTRING_CHAR_LEN(self);
+  return mrb_fixnum_value(len);
+}
+
+static mrb_value
+mrb_str_bytesize(mrb_state *mrb, mrb_value self)
+{
+  mrb_int len = RSTRING_LEN(self);
+  return mrb_fixnum_value(len);
+}
+
+/* 15.2.10.5.1  */
+/*
+ *  call-seq:
+ *     str * integer   => new_str
+ *
+ *  Copy---Returns a new <code>String</code> containing <i>integer</i> copies of
+ *  the receiver.
+ *
+ *     "Ho! " * 3   #=> "Ho! Ho! Ho! "
+ */
+static mrb_value
+mrb_str_times(mrb_state *mrb, mrb_value self)
+{
+  mrb_int n,len,times;
+  struct RString *str2;
+  char *p;
+
+  mrb_get_args(mrb, "i", &times);
+  if (times < 0) {
+    mrb_raise(mrb, E_ARGUMENT_ERROR, "negative argument");
+  }
+  if (times && MRB_SSIZE_MAX / times < RSTRING_LEN(self)) {
+    mrb_raise(mrb, E_ARGUMENT_ERROR, "argument too big");
+  }
+
+  len = RSTRING_LEN(self)*times;
+  str2 = str_new(mrb, 0, len);
+  str_with_class(str2, self);
+  p = RSTR_PTR(str2);
+  if (len > 0) {
+    n = RSTRING_LEN(self);
+    memcpy(p, RSTRING_PTR(self), n);
+    while (n <= len/2) {
+      memcpy(p + n, p, n);
+      n *= 2;
+    }
+    memcpy(p + n, p, len-n);
+  }
+  p[RSTR_LEN(str2)] = '\0';
+  RSTR_COPY_ASCII_FLAG(str2, mrb_str_ptr(self));
+
+  return mrb_obj_value(str2);
+}
+/* -------------------------------------------------------------- */
+
+#define lesser(a,b) (((a)>(b))?(b):(a))
+
+/* ---------------------------*/
+/*
+ *  call-seq:
+ *     mrb_value str1 <=> mrb_value str2   => int
+ *                     >  1
+ *                     =  0
+ *                     <  -1
+ */
+MRB_API int
+mrb_str_cmp(mrb_state *mrb, mrb_value str1, mrb_value str2)
+{
+  mrb_int len;
+  mrb_int retval;
+  struct RString *s1 = mrb_str_ptr(str1);
+  struct RString *s2 = mrb_str_ptr(str2);
+
+  len = lesser(RSTR_LEN(s1), RSTR_LEN(s2));
+  retval = memcmp(RSTR_PTR(s1), RSTR_PTR(s2), len);
+  if (retval == 0) {
+    if (RSTR_LEN(s1) == RSTR_LEN(s2)) return 0;
+    if (RSTR_LEN(s1) > RSTR_LEN(s2))  return 1;
+    return -1;
+  }
+  if (retval > 0) return 1;
+  return -1;
+}
+
+/* 15.2.10.5.3  */
+
+/*
+ *  call-seq:
+ *     str <=> other_str   => -1, 0, +1
+ *
+ *  Comparison---Returns -1 if <i>other_str</i> is less than, 0 if
+ *  <i>other_str</i> is equal to, and +1 if <i>other_str</i> is greater than
+ *  <i>str</i>. If the strings are of different lengths, and the strings are
+ *  equal when compared up to the shortest length, then the longer string is
+ *  considered greater than the shorter one. If the variable <code>$=</code> is
+ *  <code>false</code>, the comparison is based on comparing the binary values
+ *  of each character in the string. In older versions of Ruby, setting
+ *  <code>$=</code> allowed case-insensitive comparisons; this is now deprecated
+ *  in favor of using <code>String#casecmp</code>.
+ *
+ *  <code><=></code> is the basis for the methods <code><</code>,
+ *  <code><=</code>, <code>></code>, <code>>=</code>, and <code>between?</code>,
+ *  included from module <code>Comparable</code>.  The method
+ *  <code>String#==</code> does not use <code>Comparable#==</code>.
+ *
+ *     "abcdef" <=> "abcde"     #=> 1
+ *     "abcdef" <=> "abcdef"    #=> 0
+ *     "abcdef" <=> "abcdefg"   #=> -1
+ *     "abcdef" <=> "ABCDEF"    #=> 1
+ */
+static mrb_value
+mrb_str_cmp_m(mrb_state *mrb, mrb_value str1)
+{
+  mrb_value str2;
+  mrb_int result;
+
+  mrb_get_args(mrb, "o", &str2);
+  if (!mrb_string_p(str2)) {
+    return mrb_nil_value();
+  }
+  else {
+    result = mrb_str_cmp(mrb, str1, str2);
+  }
+  return mrb_fixnum_value(result);
+}
+
+static mrb_bool
+str_eql(mrb_state *mrb, const mrb_value str1, const mrb_value str2)
+{
+  const mrb_int len = RSTRING_LEN(str1);
+
+  if (len != RSTRING_LEN(str2)) return FALSE;
+  if (memcmp(RSTRING_PTR(str1), RSTRING_PTR(str2), (size_t)len) == 0)
+    return TRUE;
+  return FALSE;
+}
+
+MRB_API mrb_bool
+mrb_str_equal(mrb_state *mrb, mrb_value str1, mrb_value str2)
+{
+  if (!mrb_string_p(str2)) return FALSE;
+  return str_eql(mrb, str1, str2);
+}
+
+/* 15.2.10.5.4  */
+/*
+ *  call-seq:
+ *     str == obj   => true or false
+ *
+ *  Equality---
+ *  If <i>obj</i> is not a <code>String</code>, returns <code>false</code>.
+ *  Otherwise, returns <code>false</code> or <code>true</code>
+ *
+ *   caution:if <i>str</i> <code><=></code> <i>obj</i> returns zero.
+ */
+static mrb_value
+mrb_str_equal_m(mrb_state *mrb, mrb_value str1)
+{
+  mrb_value str2;
+
+  mrb_get_args(mrb, "o", &str2);
+
+  return mrb_bool_value(mrb_str_equal(mrb, str1, str2));
+}
+/* ---------------------------------- */
+
+MRB_API mrb_value
+mrb_str_to_str(mrb_state *mrb, mrb_value str)
+{
+  switch (mrb_type(str)) {
+  case MRB_TT_STRING:
+    return str;
+  case MRB_TT_SYMBOL:
+    return mrb_sym_str(mrb, mrb_symbol(str));
+  case MRB_TT_FIXNUM:
+    return mrb_fixnum_to_str(mrb, str, 10);
+  case MRB_TT_CLASS:
+  case MRB_TT_MODULE:
+    return mrb_mod_to_s(mrb, str);
+  default:
+    return mrb_convert_type(mrb, str, MRB_TT_STRING, "String", "to_s");
+  }
+}
+
+/* obslete: use RSTRING_PTR() */
+MRB_API const char*
+mrb_string_value_ptr(mrb_state *mrb, mrb_value str)
+{
+  str = mrb_str_to_str(mrb, str);
+  return RSTRING_PTR(str);
+}
+
+/* obslete: use RSTRING_LEN() */
+MRB_API mrb_int
+mrb_string_value_len(mrb_state *mrb, mrb_value ptr)
+{
+  mrb_to_str(mrb, ptr);
+  return RSTRING_LEN(ptr);
+}
+
+MRB_API mrb_value
+mrb_str_dup(mrb_state *mrb, mrb_value str)
+{
+  struct RString *s = mrb_str_ptr(str);
+  struct RString *dup = str_new(mrb, 0, 0);
+
+  str_with_class(dup, str);
+  return str_replace(mrb, dup, s);
+}
+
+enum str_convert_range {
+  /* `beg` and `len` are byte unit in `0 ... str.bytesize` */
+  STR_BYTE_RANGE_CORRECTED = 1,
+
+  /* `beg` and `len` are char unit in any range */
+  STR_CHAR_RANGE = 2,
+
+  /* `beg` and `len` are char unit in `0 ... str.size` */
+  STR_CHAR_RANGE_CORRECTED = 3,
+
+  /* `beg` is out of range */
+  STR_OUT_OF_RANGE = -1
+};
+
+static enum str_convert_range
+str_convert_range(mrb_state *mrb, mrb_value str, mrb_value indx, mrb_value alen, mrb_int *beg, mrb_int *len)
+{
+  if (!mrb_undef_p(alen)) {
+    *beg = mrb_int(mrb, indx);
+    *len = mrb_int(mrb, alen);
+    return STR_CHAR_RANGE;
+  }
+  else {
+    switch (mrb_type(indx)) {
+      case MRB_TT_FIXNUM:
+        *beg = mrb_fixnum(indx);
+        *len = 1;
+        return STR_CHAR_RANGE;
+
+      case MRB_TT_STRING:
+        *beg = str_index_str(mrb, str, indx, 0);
+        if (*beg < 0) { break; }
+        *len = RSTRING_LEN(indx);
+        return STR_BYTE_RANGE_CORRECTED;
+
+      case MRB_TT_RANGE:
+        goto range_arg;
+
+      default:
+        indx = mrb_to_int(mrb, indx);
+        if (mrb_fixnum_p(indx)) {
+          *beg = mrb_fixnum(indx);
+          *len = 1;
+          return STR_CHAR_RANGE;
+        }
+range_arg:
+        *len = RSTRING_CHAR_LEN(str);
+        switch (mrb_range_beg_len(mrb, indx, beg, len, *len, TRUE)) {
+          case MRB_RANGE_OK:
+            return STR_CHAR_RANGE_CORRECTED;
+          case MRB_RANGE_OUT:
+            return STR_OUT_OF_RANGE;
+          default:
+            break;
+        }
+
+        mrb_raise(mrb, E_TYPE_ERROR, "can't convert to Fixnum");
+    }
+  }
+  return STR_OUT_OF_RANGE;
+}
+
+static mrb_value
+mrb_str_aref(mrb_state *mrb, mrb_value str, mrb_value indx, mrb_value alen)
+{
+  mrb_int beg, len;
+
+  switch (str_convert_range(mrb, str, indx, alen, &beg, &len)) {
+    case STR_CHAR_RANGE_CORRECTED:
+      return str_subseq(mrb, str, beg, len);
+    case STR_CHAR_RANGE:
+      str = str_substr(mrb, str, beg, len);
+      if (mrb_undef_p(alen) && !mrb_nil_p(str) && RSTRING_LEN(str) == 0) return mrb_nil_value();
+      return str;
+    case STR_BYTE_RANGE_CORRECTED:
+      if (mrb_string_p(indx)) {
+        return mrb_str_dup(mrb, indx);
+      }
+      else {
+        return mrb_str_byte_subseq(mrb, str, beg, len);
+      }
+    case STR_OUT_OF_RANGE:
+    default:
+      return mrb_nil_value();
+  }
+}
+
+/* 15.2.10.5.6  */
+/* 15.2.10.5.34 */
+/*
+ *  call-seq:
+ *     str[fixnum]                 => fixnum or nil
+ *     str[fixnum, fixnum]         => new_str or nil
+ *     str[range]                  => new_str or nil
+ *     str[other_str]              => new_str or nil
+ *     str.slice(fixnum)           => fixnum or nil
+ *     str.slice(fixnum, fixnum)   => new_str or nil
+ *     str.slice(range)            => new_str or nil
+ *     str.slice(other_str)        => new_str or nil
+ *
+ *  Element Reference---If passed a single <code>Fixnum</code>, returns the code
+ *  of the character at that position. If passed two <code>Fixnum</code>
+ *  objects, returns a substring starting at the offset given by the first, and
+ *  a length given by the second. If given a range, a substring containing
+ *  characters at offsets given by the range is returned. In all three cases, if
+ *  an offset is negative, it is counted from the end of <i>str</i>. Returns
+ *  <code>nil</code> if the initial offset falls outside the string, the length
+ *  is negative, or the beginning of the range is greater than the end.
+ *
+ *  If a <code>String</code> is given, that string is returned if it occurs in
+ *  <i>str</i>. In both cases, <code>nil</code> is returned if there is no
+ *  match.
+ *
+ *     a = "hello there"
+ *     a[1]                   #=> 101(1.8.7) "e"(1.9.2)
+ *     a[1.1]                 #=>            "e"(1.9.2)
+ *     a[1,3]                 #=> "ell"
+ *     a[1..3]                #=> "ell"
+ *     a[-3,2]                #=> "er"
+ *     a[-4..-2]              #=> "her"
+ *     a[12..-1]              #=> nil
+ *     a[-2..-4]              #=> ""
+ *     a["lo"]                #=> "lo"
+ *     a["bye"]               #=> nil
+ */
+static mrb_value
+mrb_str_aref_m(mrb_state *mrb, mrb_value str)
+{
+  mrb_value a1, a2;
+
+  if (mrb_get_args(mrb, "o|o", &a1, &a2) == 1) {
+    a2 = mrb_undef_value();
+  }
+
+  return mrb_str_aref(mrb, str, a1, a2);
+}
+
+static mrb_noreturn void
+str_out_of_index(mrb_state *mrb, mrb_value index)
+{
+  mrb_raisef(mrb, E_INDEX_ERROR, "index %v out of string", index);
+}
+
+static mrb_value
+str_replace_partial(mrb_state *mrb, mrb_value src, mrb_int pos, mrb_int end, mrb_value rep)
+{
+  const mrb_int shrink_threshold = 256;
+  struct RString *str = mrb_str_ptr(src);
+  mrb_int len = RSTR_LEN(str);
+  mrb_int replen, newlen;
+  char *strp;
+
+  if (end > len) { end = len; }
+
+  if (pos < 0 || pos > len) {
+    str_out_of_index(mrb, mrb_fixnum_value(pos));
+  }
+
+  replen = (mrb_nil_p(rep) ? 0 : RSTRING_LEN(rep));
+  newlen = replen + len - (end - pos);
+
+  if (newlen >= MRB_SSIZE_MAX || newlen < replen /* overflowed */) {
+    mrb_raise(mrb, E_RUNTIME_ERROR, "string size too big");
+  }
+
+  mrb_str_modify(mrb, str);
+
+  if (len < newlen) {
+    resize_capa(mrb, str, newlen);
+  }
+
+  strp = RSTR_PTR(str);
+
+  memmove(strp + newlen - (len - end), strp + end, len - end);
+  if (!mrb_nil_p(rep)) {
+    memmove(strp + pos, RSTRING_PTR(rep), replen);
+  }
+  RSTR_SET_LEN(str, newlen);
+  strp[newlen] = '\0';
+
+  if (len - newlen >= shrink_threshold) {
+    resize_capa(mrb, str, newlen);
+  }
+
+  return src;
+}
+
+#define IS_EVSTR(p,e) ((p) < (e) && (*(p) == '$' || *(p) == '@' || *(p) == '{'))
+
+static mrb_value
+str_escape(mrb_state *mrb, mrb_value str, mrb_bool inspect)
+{
+  const char *p, *pend;
+  char buf[4];  /* `\x??` or UTF-8 character */
+  mrb_value result = mrb_str_new_lit(mrb, "\"");
+#ifdef MRB_UTF8_STRING
+  uint32_t ascii_flag = MRB_STR_ASCII;
+#endif
+
+  p = RSTRING_PTR(str); pend = RSTRING_END(str);
+  for (;p < pend; p++) {
+    unsigned char c, cc;
+#ifdef MRB_UTF8_STRING
+    if (inspect) {
+      mrb_int clen = mrb_utf8len(p, pend);
+      if (clen > 1) {
+        mrb_int i;
+
+        for (i=0; i<clen; i++) {
+          buf[i] = p[i];
+        }
+        mrb_str_cat(mrb, result, buf, clen);
+        p += clen-1;
+        ascii_flag = 0;
+        continue;
+      }
+    }
+#endif
+    c = *p;
+    if (c == '"'|| c == '\\' || (c == '#' && IS_EVSTR(p+1, pend))) {
+      buf[0] = '\\'; buf[1] = c;
+      mrb_str_cat(mrb, result, buf, 2);
+      continue;
+    }
+    if (ISPRINT(c)) {
+      buf[0] = c;
+      mrb_str_cat(mrb, result, buf, 1);
+      continue;
+    }
+    switch (c) {
+      case '\n': cc = 'n'; break;
+      case '\r': cc = 'r'; break;
+      case '\t': cc = 't'; break;
+      case '\f': cc = 'f'; break;
+      case '\013': cc = 'v'; break;
+      case '\010': cc = 'b'; break;
+      case '\007': cc = 'a'; break;
+      case 033: cc = 'e'; break;
+      default: cc = 0; break;
+    }
+    if (cc) {
+      buf[0] = '\\';
+      buf[1] = (char)cc;
+      mrb_str_cat(mrb, result, buf, 2);
+      continue;
+    }
+    else {
+      buf[0] = '\\';
+      buf[1] = 'x';
+      buf[3] = mrb_digitmap[c % 16]; c /= 16;
+      buf[2] = mrb_digitmap[c % 16];
+      mrb_str_cat(mrb, result, buf, 4);
+      continue;
+    }
+  }
+  mrb_str_cat_lit(mrb, result, "\"");
+#ifdef MRB_UTF8_STRING
+  if (inspect) {
+    mrb_str_ptr(str)->flags |= ascii_flag;
+    mrb_str_ptr(result)->flags |= ascii_flag;
+  }
+  else {
+    RSTR_SET_ASCII_FLAG(mrb_str_ptr(result));
+  }
+#endif
+
+  return result;
+}
+
+static void
+mrb_str_aset(mrb_state *mrb, mrb_value str, mrb_value indx, mrb_value alen, mrb_value replace)
+{
+  mrb_int beg, len, charlen;
+
+  mrb_to_str(mrb, replace);
+
+  switch (str_convert_range(mrb, str, indx, alen, &beg, &len)) {
+    case STR_OUT_OF_RANGE:
+    default:
+      mrb_raise(mrb, E_INDEX_ERROR, "string not matched");
+    case STR_CHAR_RANGE:
+      if (len < 0) {
+        mrb_raisef(mrb, E_INDEX_ERROR, "negative length %v", alen);
+      }
+      charlen = RSTRING_CHAR_LEN(str);
+      if (beg < 0) { beg += charlen; }
+      if (beg < 0 || beg > charlen) { str_out_of_index(mrb, indx); }
+      /* fall through */
+    case STR_CHAR_RANGE_CORRECTED:
+      str_range_to_bytes(str, &beg, &len);
+      /* fall through */
+    case STR_BYTE_RANGE_CORRECTED:
+      str_replace_partial(mrb, str, beg, beg + len, replace);
+  }
+}
+
+/*
+ * call-seq:
+ *    str[fixnum] = replace
+ *    str[fixnum, fixnum] = replace
+ *    str[range] = replace
+ *    str[other_str] = replace
+ *
+ * Modify +self+ by replacing the content of +self+.
+ * The portion of the string affected is determined using the same criteria as +String#[]+.
+ */
+static mrb_value
+mrb_str_aset_m(mrb_state *mrb, mrb_value str)
+{
+  mrb_value indx, alen, replace;
+
+  switch (mrb_get_args(mrb, "oo|S!", &indx, &alen, &replace)) {
+    case 2:
+      replace = alen;
+      alen = mrb_undef_value();
+      break;
+    case 3:
+      break;
+  }
+  mrb_str_aset(mrb, str, indx, alen, replace);
+  return str;
+}
+
+/* 15.2.10.5.8  */
+/*
+ *  call-seq:
+ *     str.capitalize!   => str or nil
+ *
+ *  Modifies <i>str</i> by converting the first character to uppercase and the
+ *  remainder to lowercase. Returns <code>nil</code> if no changes are made.
+ *
+ *     a = "hello"
+ *     a.capitalize!   #=> "Hello"
+ *     a               #=> "Hello"
+ *     a.capitalize!   #=> nil
+ */
+static mrb_value
+mrb_str_capitalize_bang(mrb_state *mrb, mrb_value str)
+{
+  char *p, *pend;
+  mrb_bool modify = FALSE;
+  struct RString *s = mrb_str_ptr(str);
+
+  mrb_str_modify_keep_ascii(mrb, s);
+  if (RSTR_LEN(s) == 0 || !RSTR_PTR(s)) return mrb_nil_value();
+  p = RSTR_PTR(s); pend = RSTR_PTR(s) + RSTR_LEN(s);
+  if (ISLOWER(*p)) {
+    *p = TOUPPER(*p);
+    modify = TRUE;
+  }
+  while (++p < pend) {
+    if (ISUPPER(*p)) {
+      *p = TOLOWER(*p);
+      modify = TRUE;
+    }
+  }
+  if (modify) return str;
+  return mrb_nil_value();
+}
+
+/* 15.2.10.5.7  */
+/*
+ *  call-seq:
+ *     str.capitalize   => new_str
+ *
+ *  Returns a copy of <i>str</i> with the first character converted to uppercase
+ *  and the remainder to lowercase.
+ *
+ *     "hello".capitalize    #=> "Hello"
+ *     "HELLO".capitalize    #=> "Hello"
+ *     "123ABC".capitalize   #=> "123abc"
+ */
+static mrb_value
+mrb_str_capitalize(mrb_state *mrb, mrb_value self)
+{
+  mrb_value str;
+
+  str = mrb_str_dup(mrb, self);
+  mrb_str_capitalize_bang(mrb, str);
+  return str;
+}
+
+/* 15.2.10.5.10  */
+/*
+ *  call-seq:
+ *     str.chomp!(separator="\n")   => str or nil
+ *
+ *  Modifies <i>str</i> in place as described for <code>String#chomp</code>,
+ *  returning <i>str</i>, or <code>nil</code> if no modifications were made.
+ */
+static mrb_value
+mrb_str_chomp_bang(mrb_state *mrb, mrb_value str)
+{
+  mrb_value rs;
+  mrb_int newline;
+  char *p, *pp;
+  mrb_int rslen;
+  mrb_int len;
+  mrb_int argc;
+  struct RString *s = mrb_str_ptr(str);
+
+  argc = mrb_get_args(mrb, "|S", &rs);
+  mrb_str_modify_keep_ascii(mrb, s);
+  len = RSTR_LEN(s);
+  if (argc == 0) {
+    if (len == 0) return mrb_nil_value();
+  smart_chomp:
+    if (RSTR_PTR(s)[len-1] == '\n') {
+      RSTR_SET_LEN(s, RSTR_LEN(s) - 1);
+      if (RSTR_LEN(s) > 0 &&
+          RSTR_PTR(s)[RSTR_LEN(s)-1] == '\r') {
+        RSTR_SET_LEN(s, RSTR_LEN(s) - 1);
+      }
+    }
+    else if (RSTR_PTR(s)[len-1] == '\r') {
+      RSTR_SET_LEN(s, RSTR_LEN(s) - 1);
+    }
+    else {
+      return mrb_nil_value();
+    }
+    RSTR_PTR(s)[RSTR_LEN(s)] = '\0';
+    return str;
+  }
+
+  if (len == 0 || mrb_nil_p(rs)) return mrb_nil_value();
+  p = RSTR_PTR(s);
+  rslen = RSTRING_LEN(rs);
+  if (rslen == 0) {
+    while (len>0 && p[len-1] == '\n') {
+      len--;
+      if (len>0 && p[len-1] == '\r')
+        len--;
+    }
+    if (len < RSTR_LEN(s)) {
+      RSTR_SET_LEN(s, len);
+      p[len] = '\0';
+      return str;
+    }
+    return mrb_nil_value();
+  }
+  if (rslen > len) return mrb_nil_value();
+  newline = RSTRING_PTR(rs)[rslen-1];
+  if (rslen == 1 && newline == '\n')
+    newline = RSTRING_PTR(rs)[rslen-1];
+  if (rslen == 1 && newline == '\n')
+    goto smart_chomp;
+
+  pp = p + len - rslen;
+  if (p[len-1] == newline &&
+     (rslen <= 1 ||
+     memcmp(RSTRING_PTR(rs), pp, rslen) == 0)) {
+    RSTR_SET_LEN(s, len - rslen);
+    p[RSTR_LEN(s)] = '\0';
+    return str;
+  }
+  return mrb_nil_value();
+}
+
+/* 15.2.10.5.9  */
+/*
+ *  call-seq:
+ *     str.chomp(separator="\n")   => new_str
+ *
+ *  Returns a new <code>String</code> with the given record separator removed
+ *  from the end of <i>str</i> (if present). <code>chomp</code> also removes
+ *  carriage return characters (that is it will remove <code>\n</code>,
+ *  <code>\r</code>, and <code>\r\n</code>).
+ *
+ *     "hello".chomp            #=> "hello"
+ *     "hello\n".chomp          #=> "hello"
+ *     "hello\r\n".chomp        #=> "hello"
+ *     "hello\n\r".chomp        #=> "hello\n"
+ *     "hello\r".chomp          #=> "hello"
+ *     "hello \n there".chomp   #=> "hello \n there"
+ *     "hello".chomp("llo")     #=> "he"
+ */
+static mrb_value
+mrb_str_chomp(mrb_state *mrb, mrb_value self)
+{
+  mrb_value str;
+
+  str = mrb_str_dup(mrb, self);
+  mrb_str_chomp_bang(mrb, str);
+  return str;
+}
+
+/* 15.2.10.5.12 */
+/*
+ *  call-seq:
+ *     str.chop!   => str or nil
+ *
+ *  Processes <i>str</i> as for <code>String#chop</code>, returning <i>str</i>,
+ *  or <code>nil</code> if <i>str</i> is the empty string.  See also
+ *  <code>String#chomp!</code>.
+ */
+static mrb_value
+mrb_str_chop_bang(mrb_state *mrb, mrb_value str)
+{
+  struct RString *s = mrb_str_ptr(str);
+
+  mrb_str_modify_keep_ascii(mrb, s);
+  if (RSTR_LEN(s) > 0) {
+    mrb_int len;
+#ifdef MRB_UTF8_STRING
+    const char* t = RSTR_PTR(s), *p = t;
+    const char* e = p + RSTR_LEN(s);
+    while (p<e) {
+      mrb_int clen = mrb_utf8len(p, e);
+      if (p + clen>=e) break;
+      p += clen;
+    }
+    len = p - t;
+#else
+    len = RSTR_LEN(s) - 1;
+#endif
+    if (RSTR_PTR(s)[len] == '\n') {
+      if (len > 0 &&
+          RSTR_PTR(s)[len-1] == '\r') {
+        len--;
+      }
+    }
+    RSTR_SET_LEN(s, len);
+    RSTR_PTR(s)[len] = '\0';
+    return str;
+  }
+  return mrb_nil_value();
+}
+
+/* 15.2.10.5.11 */
+/*
+ *  call-seq:
+ *     str.chop   => new_str
+ *
+ *  Returns a new <code>String</code> with the last character removed.  If the
+ *  string ends with <code>\r\n</code>, both characters are removed. Applying
+ *  <code>chop</code> to an empty string returns an empty
+ *  string. <code>String#chomp</code> is often a safer alternative, as it leaves
+ *  the string unchanged if it doesn't end in a record separator.
+ *
+ *     "string\r\n".chop   #=> "string"
+ *     "string\n\r".chop   #=> "string\n"
+ *     "string\n".chop     #=> "string"
+ *     "string".chop       #=> "strin"
+ *     "x".chop            #=> ""
+ */
+static mrb_value
+mrb_str_chop(mrb_state *mrb, mrb_value self)
+{
+  mrb_value str;
+  str = mrb_str_dup(mrb, self);
+  mrb_str_chop_bang(mrb, str);
+  return str;
+}
+
+/* 15.2.10.5.14 */
+/*
+ *  call-seq:
+ *     str.downcase!   => str or nil
+ *
+ *  Downcases the contents of <i>str</i>, returning <code>nil</code> if no
+ *  changes were made.
+ */
+static mrb_value
+mrb_str_downcase_bang(mrb_state *mrb, mrb_value str)
+{
+  char *p, *pend;
+  mrb_bool modify = FALSE;
+  struct RString *s = mrb_str_ptr(str);
+
+  mrb_str_modify_keep_ascii(mrb, s);
+  p = RSTR_PTR(s);
+  pend = RSTR_PTR(s) + RSTR_LEN(s);
+  while (p < pend) {
+    if (ISUPPER(*p)) {
+      *p = TOLOWER(*p);
+      modify = TRUE;
+    }
+    p++;
+  }
+
+  if (modify) return str;
+  return mrb_nil_value();
+}
+
+/* 15.2.10.5.13 */
+/*
+ *  call-seq:
+ *     str.downcase   => new_str
+ *
+ *  Returns a copy of <i>str</i> with all uppercase letters replaced with their
+ *  lowercase counterparts. The operation is locale insensitive---only
+ *  characters 'A' to 'Z' are affected.
+ *
+ *     "hEllO".downcase   #=> "hello"
+ */
+static mrb_value
+mrb_str_downcase(mrb_state *mrb, mrb_value self)
+{
+  mrb_value str;
+
+  str = mrb_str_dup(mrb, self);
+  mrb_str_downcase_bang(mrb, str);
+  return str;
+}
+
+/* 15.2.10.5.16 */
+/*
+ *  call-seq:
+ *     str.empty?   => true or false
+ *
+ *  Returns <code>true</code> if <i>str</i> has a length of zero.
+ *
+ *     "hello".empty?   #=> false
+ *     "".empty?        #=> true
+ */
+static mrb_value
+mrb_str_empty_p(mrb_state *mrb, mrb_value self)
+{
+  struct RString *s = mrb_str_ptr(self);
+
+  return mrb_bool_value(RSTR_LEN(s) == 0);
+}
+
+/* 15.2.10.5.17 */
+/*
+ * call-seq:
+ *   str.eql?(other)   => true or false
+ *
+ * Two strings are equal if the have the same length and content.
+ */
+static mrb_value
+mrb_str_eql(mrb_state *mrb, mrb_value self)
+{
+  mrb_value str2;
+  mrb_bool eql_p;
+
+  mrb_get_args(mrb, "o", &str2);
+  eql_p = (mrb_string_p(str2)) && str_eql(mrb, self, str2);
+
+  return mrb_bool_value(eql_p);
+}
+
+MRB_API mrb_value
+mrb_str_substr(mrb_state *mrb, mrb_value str, mrb_int beg, mrb_int len)
+{
+  return str_substr(mrb, str, beg, len);
+}
+
+uint32_t
+mrb_str_hash(mrb_state *mrb, mrb_value str)
+{
+  /* 1-8-7 */
+  struct RString *s = mrb_str_ptr(str);
+  mrb_int len = RSTR_LEN(s);
+  char *p = RSTR_PTR(s);
+  uint64_t key = 0;
+
+  while (len--) {
+    key = key*65599 + *p;
+    p++;
+  }
+  return (uint32_t)(key + (key>>5));
+}
+
+/* 15.2.10.5.20 */
+/*
+ * call-seq:
+ *    str.hash   => fixnum
+ *
+ * Return a hash based on the string's length and content.
+ */
+static mrb_value
+mrb_str_hash_m(mrb_state *mrb, mrb_value self)
+{
+  mrb_int key = mrb_str_hash(mrb, self);
+  return mrb_fixnum_value(key);
+}
+
+/* 15.2.10.5.21 */
+/*
+ *  call-seq:
+ *     str.include? other_str   => true or false
+ *     str.include? fixnum      => true or false
+ *
+ *  Returns <code>true</code> if <i>str</i> contains the given string or
+ *  character.
+ *
+ *     "hello".include? "lo"   #=> true
+ *     "hello".include? "ol"   #=> false
+ *     "hello".include? ?h     #=> true
+ */
+static mrb_value
+mrb_str_include(mrb_state *mrb, mrb_value self)
+{
+  mrb_value str2;
+
+  mrb_get_args(mrb, "S", &str2);
+  if (str_index_str(mrb, self, str2, 0) < 0)
+    return mrb_bool_value(FALSE);
+  return mrb_bool_value(TRUE);
+}
+
+/* 15.2.10.5.22 */
+/*
+ *  call-seq:
+ *     str.index(substring [, offset])   => fixnum or nil
+ *
+ *  Returns the index of the first occurrence of the given
+ *  <i>substring</i>. Returns <code>nil</code> if not found.
+ *  If the second parameter is present, it
+ *  specifies the position in the string to begin the search.
+ *
+ *     "hello".index('l')             #=> 2
+ *     "hello".index('lo')            #=> 3
+ *     "hello".index('a')             #=> nil
+ *     "hello".index('l', -2)         #=> 3
+ */
+static mrb_value
+mrb_str_index_m(mrb_state *mrb, mrb_value str)
+{
+  mrb_value sub;
+  mrb_int pos;
+
+  if (mrb_get_args(mrb, "S|i", &sub, &pos) == 1) {
+    pos = 0;
+  }
+  else if (pos < 0) {
+    mrb_int clen = RSTRING_CHAR_LEN(str);
+    pos += clen;
+    if (pos < 0) {
+      return mrb_nil_value();
+    }
+  }
+  pos = str_index_str_by_char(mrb, str, sub, pos);
+
+  if (pos == -1) return mrb_nil_value();
+  BYTES_ALIGN_CHECK(pos);
+  return mrb_fixnum_value(pos);
+}
+
+/* 15.2.10.5.24 */
+/* 15.2.10.5.28 */
+/*
+ *  call-seq:
+ *     str.replace(other_str)   => str
+ *
+ *     s = "hello"         #=> "hello"
+ *     s.replace "world"   #=> "world"
+ */
+static mrb_value
+mrb_str_replace(mrb_state *mrb, mrb_value str)
+{
+  mrb_value str2;
+
+  mrb_get_args(mrb, "S", &str2);
+  return str_replace(mrb, mrb_str_ptr(str), mrb_str_ptr(str2));
+}
+
+/* 15.2.10.5.23 */
+/*
+ *  call-seq:
+ *     String.new(str="")   => new_str
+ *
+ *  Returns a new string object containing a copy of <i>str</i>.
+ */
+static mrb_value
+mrb_str_init(mrb_state *mrb, mrb_value self)
+{
+  mrb_value str2;
+
+  if (mrb_get_args(mrb, "|S", &str2) == 0) {
+    struct RString *s = str_new(mrb, 0, 0);
+    str2 = mrb_obj_value(s);
+  }
+  str_replace(mrb, mrb_str_ptr(self), mrb_str_ptr(str2));
+  return self;
+}
+
+/* 15.2.10.5.25 */
+/* 15.2.10.5.41 */
+/*
+ *  call-seq:
+ *     str.intern   => symbol
+ *     str.to_sym   => symbol
+ *
+ *  Returns the <code>Symbol</code> corresponding to <i>str</i>, creating the
+ *  symbol if it did not previously exist. See <code>Symbol#id2name</code>.
+ *
+ *     "Koala".intern         #=> :Koala
+ *     s = 'cat'.to_sym       #=> :cat
+ *     s == :cat              #=> true
+ *     s = '@cat'.to_sym      #=> :@cat
+ *     s == :@cat             #=> true
+ *
+ *  This can also be used to create symbols that cannot be represented using the
+ *  <code>:xxx</code> notation.
+ *
+ *     'cat and dog'.to_sym   #=> :"cat and dog"
+ */
+MRB_API mrb_value
+mrb_str_intern(mrb_state *mrb, mrb_value self)
+{
+  return mrb_symbol_value(mrb_intern_str(mrb, self));
+}
+/* ---------------------------------- */
+MRB_API mrb_value
+mrb_obj_as_string(mrb_state *mrb, mrb_value obj)
+{
+  if (mrb_string_p(obj)) {
+    return obj;
+  }
+  return mrb_str_to_str(mrb, obj);
+}
+
+MRB_API mrb_value
+mrb_ptr_to_str(mrb_state *mrb, void *p)
+{
+  struct RString *p_str;
+  char *p1;
+  char *p2;
+  uintptr_t n = (uintptr_t)p;
+
+  p_str = str_new(mrb, NULL, 2 + sizeof(uintptr_t) * CHAR_BIT / 4);
+  p1 = RSTR_PTR(p_str);
+  *p1++ = '0';
+  *p1++ = 'x';
+  p2 = p1;
+
+  do {
+    *p2++ = mrb_digitmap[n % 16];
+    n /= 16;
+  } while (n > 0);
+  *p2 = '\0';
+  RSTR_SET_LEN(p_str, (mrb_int)(p2 - RSTR_PTR(p_str)));
+
+  while (p1 < p2) {
+    const char  c = *p1;
+    *p1++ = *--p2;
+    *p2 = c;
+  }
+
+  return mrb_obj_value(p_str);
+}
+
+static inline void
+str_reverse(char *p, char *e)
+{
+  char c;
+
+  while (p < e) {
+    c = *p;
+    *p++ = *e;
+    *e-- = c;
+  }
+}
+
+/* 15.2.10.5.30 */
+/*
+ *  call-seq:
+ *     str.reverse!   => str
+ *
+ *  Reverses <i>str</i> in place.
+ */
+static mrb_value
+mrb_str_reverse_bang(mrb_state *mrb, mrb_value str)
+{
+  struct RString *s = mrb_str_ptr(str);
+  char *p, *e;
+
+#ifdef MRB_UTF8_STRING
+  mrb_int utf8_len = RSTRING_CHAR_LEN(str);
+  mrb_int len = RSTR_LEN(s);
+
+  if (utf8_len < 2) return str;
+  if (utf8_len < len) {
+    mrb_str_modify(mrb, s);
+    p = RSTR_PTR(s);
+    e = p + RSTR_LEN(s);
+    while (p<e) {
+      mrb_int clen = mrb_utf8len(p, e);
+      str_reverse(p, p + clen - 1);
+      p += clen;
+    }
+    goto bytes;
+  }
+#endif
+
+  if (RSTR_LEN(s) > 1) {
+    mrb_str_modify(mrb, s);
+    goto bytes;
+  }
+  return str;
+
+ bytes:
+  p = RSTR_PTR(s);
+  e = p + RSTR_LEN(s) - 1;
+  str_reverse(p, e);
+  return str;
+}
+
+/* ---------------------------------- */
+/* 15.2.10.5.29 */
+/*
+ *  call-seq:
+ *     str.reverse   => new_str
+ *
+ *  Returns a new string with the characters from <i>str</i> in reverse order.
+ *
+ *     "stressed".reverse   #=> "desserts"
+ */
+static mrb_value
+mrb_str_reverse(mrb_state *mrb, mrb_value str)
+{
+  mrb_value str2 = mrb_str_dup(mrb, str);
+  mrb_str_reverse_bang(mrb, str2);
+  return str2;
+}
+
+/* 15.2.10.5.31 */
+/*
+ *  call-seq:
+ *     str.rindex(substring [, offset])   => fixnum or nil
+ *
+ *  Returns the index of the last occurrence of the given <i>substring</i>.
+ *  Returns <code>nil</code> if not found. If the second parameter is
+ *  present, it specifies the position in the string to end the
+ *  search---characters beyond this point will not be considered.
+ *
+ *     "hello".rindex('e')             #=> 1
+ *     "hello".rindex('l')             #=> 3
+ *     "hello".rindex('a')             #=> nil
+ *     "hello".rindex('l', 2)          #=> 2
+ */
+static mrb_value
+mrb_str_rindex(mrb_state *mrb, mrb_value str)
+{
+  mrb_value sub;
+  mrb_int pos, len = RSTRING_CHAR_LEN(str);
+
+  if (mrb_get_args(mrb, "S|i", &sub, &pos) == 1) {
+    pos = len;
+  }
+  else {
+    if (pos < 0) {
+      pos += len;
+      if (pos < 0) {
+        return mrb_nil_value();
+      }
+    }
+    if (pos > len) pos = len;
+  }
+  pos = chars2bytes(str, 0, pos);
+  pos = str_rindex(mrb, str, sub, pos);
+  if (pos >= 0) {
+    pos = bytes2chars(RSTRING_PTR(str), RSTRING_LEN(str), pos);
+    BYTES_ALIGN_CHECK(pos);
+    return mrb_fixnum_value(pos);
+  }
+  return mrb_nil_value();
+}
+
+/* 15.2.10.5.35 */
+
+/*
+ *  call-seq:
+ *     str.split(separator=nil, [limit])   => anArray
+ *
+ *  Divides <i>str</i> into substrings based on a delimiter, returning an array
+ *  of these substrings.
+ *
+ *  If <i>separator</i> is a <code>String</code>, then its contents are used as
+ *  the delimiter when splitting <i>str</i>. If <i>separator</i> is a single
+ *  space, <i>str</i> is split on whitespace, with leading whitespace and runs
+ *  of contiguous whitespace characters ignored.
+ *
+ *  If <i>separator</i> is omitted or <code>nil</code> (which is the default),
+ *  <i>str</i> is split on whitespace as if ' ' were specified.
+ *
+ *  If the <i>limit</i> parameter is omitted, trailing null fields are
+ *  suppressed. If <i>limit</i> is a positive number, at most that number of
+ *  fields will be returned (if <i>limit</i> is <code>1</code>, the entire
+ *  string is returned as the only entry in an array). If negative, there is no
+ *  limit to the number of fields returned, and trailing null fields are not
+ *  suppressed.
+ *
+ *     " now's  the time".split        #=> ["now's", "the", "time"]
+ *     " now's  the time".split(' ')   #=> ["now's", "the", "time"]
+ *
+ *     "mellow yellow".split("ello")   #=> ["m", "w y", "w"]
+ *     "1,2,,3,4,,".split(',')         #=> ["1", "2", "", "3", "4"]
+ *     "1,2,,3,4,,".split(',', 4)      #=> ["1", "2", "", "3,4,,"]
+ *     "1,2,,3,4,,".split(',', -4)     #=> ["1", "2", "", "3", "4", "", ""]
+ */
+
+static mrb_value
+mrb_str_split_m(mrb_state *mrb, mrb_value str)
+{
+  mrb_int argc;
+  mrb_value spat = mrb_nil_value();
+  enum {awk, string} split_type = string;
+  mrb_int i = 0;
+  mrb_int beg;
+  mrb_int end;
+  mrb_int lim = 0;
+  mrb_bool lim_p;
+  mrb_value result, tmp;
+
+  argc = mrb_get_args(mrb, "|oi", &spat, &lim);
+  lim_p = (lim > 0 && argc == 2);
+  if (argc == 2) {
+    if (lim == 1) {
+      if (RSTRING_LEN(str) == 0)
+        return mrb_ary_new_capa(mrb, 0);
+      return mrb_ary_new_from_values(mrb, 1, &str);
+    }
+    i = 1;
+  }
+
+  if (argc == 0 || mrb_nil_p(spat)) {
+    split_type = awk;
+  }
+  else if (!mrb_string_p(spat)) {
+    mrb_raise(mrb, E_TYPE_ERROR, "expected String");
+  }
+  else if (RSTRING_LEN(spat) == 1 && RSTRING_PTR(spat)[0] == ' ') {
+    split_type = awk;
+  }
+
+  result = mrb_ary_new(mrb);
+  beg = 0;
+  if (split_type == awk) {
+    mrb_bool skip = TRUE;
+    mrb_int idx = 0;
+    mrb_int str_len = RSTRING_LEN(str);
+    unsigned int c;
+    int ai = mrb_gc_arena_save(mrb);
+
+    idx = end = beg;
+    while (idx < str_len) {
+      c = (unsigned char)RSTRING_PTR(str)[idx++];
+      if (skip) {
+        if (ISSPACE(c)) {
+          beg = idx;
+        }
+        else {
+          end = idx;
+          skip = FALSE;
+          if (lim_p && lim <= i) break;
+        }
+      }
+      else if (ISSPACE(c)) {
+        mrb_ary_push(mrb, result, mrb_str_byte_subseq(mrb, str, beg, end-beg));
+        mrb_gc_arena_restore(mrb, ai);
+        skip = TRUE;
+        beg = idx;
+        if (lim_p) ++i;
+      }
+      else {
+        end = idx;
+      }
+    }
+  }
+  else {                        /* split_type == string */
+    mrb_int str_len = RSTRING_LEN(str);
+    mrb_int pat_len = RSTRING_LEN(spat);
+    mrb_int idx = 0;
+    int ai = mrb_gc_arena_save(mrb);
+
+    while (idx < str_len) {
+      if (pat_len > 0) {
+        end = mrb_memsearch(RSTRING_PTR(spat), pat_len, RSTRING_PTR(str)+idx, str_len - idx);
+        if (end < 0) break;
+      }
+      else {
+        end = chars2bytes(str, idx, 1);
+      }
+      mrb_ary_push(mrb, result, mrb_str_byte_subseq(mrb, str, idx, end));
+      mrb_gc_arena_restore(mrb, ai);
+      idx += end + pat_len;
+      if (lim_p && lim <= ++i) break;
+    }
+    beg = idx;
+  }
+  if (RSTRING_LEN(str) > 0 && (lim_p || RSTRING_LEN(str) > beg || lim < 0)) {
+    if (RSTRING_LEN(str) == beg) {
+      tmp = mrb_str_new_empty(mrb, str);
+    }
+    else {
+      tmp = mrb_str_byte_subseq(mrb, str, beg, RSTRING_LEN(str)-beg);
+    }
+    mrb_ary_push(mrb, result, tmp);
+  }
+  if (!lim_p && lim == 0) {
+    mrb_int len;
+    while ((len = RARRAY_LEN(result)) > 0 &&
+           (tmp = RARRAY_PTR(result)[len-1], RSTRING_LEN(tmp) == 0))
+      mrb_ary_pop(mrb, result);
+  }
+
+  return result;
+}
+
+mrb_value
+mrb_str_len_to_inum(mrb_state *mrb, const char *str, mrb_int len, mrb_int base, int badcheck)
+{
+  const char *p = str;
+  const char *pend = str + len;
+  char sign = 1;
+  int c;
+  uint64_t n = 0;
+  mrb_int val;
+
+#define conv_digit(c) \
+    (ISDIGIT(c) ? ((c) - '0') : \
+     ISLOWER(c) ? ((c) - 'a' + 10) : \
+     ISUPPER(c) ? ((c) - 'A' + 10) : \
+     -1)
+
+  if (!p) {
+    if (badcheck) goto bad;
+    return mrb_fixnum_value(0);
+  }
+  while (p<pend && ISSPACE(*p))
+    p++;
+
+  if (p[0] == '+') {
+    p++;
+  }
+  else if (p[0] == '-') {
+    p++;
+    sign = 0;
+  }
+  if (base <= 0) {
+    if (p[0] == '0') {
+      switch (p[1]) {
+        case 'x': case 'X':
+          base = 16;
+          break;
+        case 'b': case 'B':
+          base = 2;
+          break;
+        case 'o': case 'O':
+          base = 8;
+          break;
+        case 'd': case 'D':
+          base = 10;
+          break;
+        default:
+          base = 8;
+          break;
+      }
+    }
+    else if (base < -1) {
+      base = -base;
+    }
+    else {
+      base = 10;
+    }
+  }
+  switch (base) {
+    case 2:
+      if (p[0] == '0' && (p[1] == 'b'||p[1] == 'B')) {
+        p += 2;
+      }
+      break;
+    case 3:
+      break;
+    case 8:
+      if (p[0] == '0' && (p[1] == 'o'||p[1] == 'O')) {
+        p += 2;
+      }
+    case 4: case 5: case 6: case 7:
+      break;
+    case 10:
+      if (p[0] == '0' && (p[1] == 'd'||p[1] == 'D')) {
+        p += 2;
+      }
+    case 9: case 11: case 12: case 13: case 14: case 15:
+      break;
+    case 16:
+      if (p[0] == '0' && (p[1] == 'x'||p[1] == 'X')) {
+        p += 2;
+      }
+      break;
+    default:
+      if (base < 2 || 36 < base) {
+        mrb_raisef(mrb, E_ARGUMENT_ERROR, "illegal radix %i", base);
+      }
+      break;
+  } /* end of switch (base) { */
+  if (p>=pend) {
+    if (badcheck) goto bad;
+    return mrb_fixnum_value(0);
+  }
+  if (*p == '0') {    /* squeeze preceding 0s */
+    p++;
+    while (p<pend) {
+      c = *p++;
+      if (c == '_') {
+        if (p<pend && *p == '_') {
+          if (badcheck) goto bad;
+          break;
+        }
+        continue;
+      }
+      if (c != '0') {
+        p--;
+        break;
+      }
+    }
+    if (*(p - 1) == '0')
+      p--;
+  }
+  if (p == pend || *p == '_') {
+    if (badcheck) goto bad;
+    return mrb_fixnum_value(0);
+  }
+  for ( ;p<pend;p++) {
+    if (*p == '_') {
+      p++;
+      if (p==pend) {
+        if (badcheck) goto bad;
+        continue;
+      }
+      if (*p == '_') {
+        if (badcheck) goto bad;
+        break;
+      }
+    }
+    if (badcheck && *p == '\0') {
+      goto nullbyte;
+    }
+    c = conv_digit(*p);
+    if (c < 0 || c >= base) {
+      break;
+    }
+    n *= base;
+    n += c;
+    if (n > (uint64_t)MRB_INT_MAX + (sign ? 0 : 1)) {
+#ifndef MRB_WITHOUT_FLOAT
+      if (base == 10) {
+        return mrb_float_value(mrb, mrb_str_to_dbl(mrb, mrb_str_new(mrb, str, len), badcheck));
+      }
+      else
+#endif
+      {
+        mrb_raisef(mrb, E_RANGE_ERROR, "string (%l) too big for integer", str, pend-str);
+      }
+    }
+  }
+  val = (mrb_int)n;
+  if (badcheck) {
+    if (p == str) goto bad;             /* no number */
+    if (*(p - 1) == '_') goto bad;      /* trailing '_' */
+    while (p<pend && ISSPACE(*p)) p++;
+    if (p<pend) goto bad;               /* trailing garbage */
+  }
+
+  return mrb_fixnum_value(sign ? val : -val);
+ nullbyte:
+  mrb_raise(mrb, E_ARGUMENT_ERROR, "string contains null byte");
+  /* not reached */
+ bad:
+  mrb_raisef(mrb, E_ARGUMENT_ERROR, "invalid string for number(%!l)", str, pend-str);
+  /* not reached */
+  return mrb_fixnum_value(0);
+}
+
+MRB_API mrb_value
+mrb_cstr_to_inum(mrb_state *mrb, const char *str, mrb_int base, mrb_bool badcheck)
+{
+  return mrb_str_len_to_inum(mrb, str, strlen(str), base, badcheck);
+}
+
+/* obslete: use RSTRING_CSTR() or mrb_string_cstr() */
+MRB_API const char*
+mrb_string_value_cstr(mrb_state *mrb, mrb_value *ptr)
+{
+  struct RString *ps;
+  const char *p;
+  mrb_int len;
+
+  check_null_byte(mrb, *ptr);
+  ps = mrb_str_ptr(*ptr);
+  p = RSTR_PTR(ps);
+  len = RSTR_LEN(ps);
+  if (p[len] == '\0') {
+    return p;
+  }
+
+  /*
+   * Even after str_modify_keep_ascii(), NULL termination is not ensured if
+   * RSTR_SET_LEN() is used explicitly (e.g. String#delete_suffix!).
+   */
+  str_modify_keep_ascii(mrb, ps);
+  RSTR_PTR(ps)[len] = '\0';
+  return RSTR_PTR(ps);
+}
+
+MRB_API const char*
+mrb_string_cstr(mrb_state *mrb, mrb_value str)
+{
+  return mrb_string_value_cstr(mrb, &str);
+}
+
+MRB_API mrb_value
+mrb_str_to_inum(mrb_state *mrb, mrb_value str, mrb_int base, mrb_bool badcheck)
+{
+  const char *s;
+  mrb_int len;
+
+  mrb_to_str(mrb, str);
+  s = RSTRING_PTR(str);
+  len = RSTRING_LEN(str);
+  return mrb_str_len_to_inum(mrb, s, len, base, badcheck);
+}
+
+/* 15.2.10.5.38 */
+/*
+ *  call-seq:
+ *     str.to_i(base=10)   => integer
+ *
+ *  Returns the result of interpreting leading characters in <i>str</i> as an
+ *  integer base <i>base</i> (between 2 and 36). Extraneous characters past the
+ *  end of a valid number are ignored. If there is not a valid number at the
+ *  start of <i>str</i>, <code>0</code> is returned. This method never raises an
+ *  exception.
+ *
+ *     "12345".to_i             #=> 12345
+ *     "99 red balloons".to_i   #=> 99
+ *     "0a".to_i                #=> 0
+ *     "0a".to_i(16)            #=> 10
+ *     "hello".to_i             #=> 0
+ *     "1100101".to_i(2)        #=> 101
+ *     "1100101".to_i(8)        #=> 294977
+ *     "1100101".to_i(10)       #=> 1100101
+ *     "1100101".to_i(16)       #=> 17826049
+ */
+static mrb_value
+mrb_str_to_i(mrb_state *mrb, mrb_value self)
+{
+  mrb_int base = 10;
+
+  mrb_get_args(mrb, "|i", &base);
+  if (base < 0) {
+    mrb_raisef(mrb, E_ARGUMENT_ERROR, "illegal radix %i", base);
+  }
+  return mrb_str_to_inum(mrb, self, base, FALSE);
+}
+
+#ifndef MRB_WITHOUT_FLOAT
+double
+mrb_str_len_to_dbl(mrb_state *mrb, const char *s, size_t len, mrb_bool badcheck)
+{
+  char buf[DBL_DIG * 4 + 20];
+  const char *p = s, *p2;
+  const char *pend = p + len;
+  char *end;
+  char *n;
+  char prev = 0;
+  double d;
+  mrb_bool dot = FALSE;
+
+  if (!p) return 0.0;
+  while (p<pend && ISSPACE(*p)) p++;
+  p2 = p;
+
+  if (pend - p > 2 && p[0] == '0' && (p[1] == 'x' || p[1] == 'X')) {
+    mrb_value x;
+
+    if (!badcheck) return 0.0;
+    x = mrb_str_len_to_inum(mrb, p, pend-p, 0, badcheck);
+    if (mrb_fixnum_p(x))
+      d = (double)mrb_fixnum(x);
+    else /* if (mrb_float_p(x)) */
+      d = mrb_float(x);
+    return d;
+  }
+  while (p < pend) {
+    if (!*p) {
+      if (badcheck) {
+        mrb_raise(mrb, E_ARGUMENT_ERROR, "string for Float contains null byte");
+        /* not reached */
+      }
+      pend = p;
+      p = p2;
+      goto nocopy;
+    }
+    if (!badcheck && *p == ' ') {
+      pend = p;
+      p = p2;
+      goto nocopy;
+    }
+    if (*p == '_') break;
+    p++;
+  }
+  p = p2;
+  n = buf;
+  while (p < pend) {
+    char c = *p++;
+    if (c == '.') dot = TRUE;
+    if (c == '_') {
+      /* remove an underscore between digits */
+      if (n == buf || !ISDIGIT(prev) || p == pend) {
+        if (badcheck) goto bad;
+        break;
+      }
+    }
+    else if (badcheck && prev == '_' && !ISDIGIT(c)) goto bad;
+    else {
+      const char *bend = buf+sizeof(buf)-1;
+      if (n==bend) {            /* buffer overflow */
+        if (dot) break;         /* cut off remaining fractions */
+        return INFINITY;
+      }
+      *n++ = c;
+    }
+    prev = c;
+  }
+  *n = '\0';
+  p = buf;
+  pend = n;
+nocopy:
+  d = mrb_float_read(p, &end);
+  if (p == end) {
+    if (badcheck) {
+bad:
+      mrb_raisef(mrb, E_ARGUMENT_ERROR, "invalid string for float(%!s)", s);
+      /* not reached */
+    }
+    return d;
+  }
+  if (badcheck) {
+    if (!end || p == end) goto bad;
+    while (end<pend && ISSPACE(*end)) end++;
+    if (end<pend) goto bad;
+  }
+  return d;
+}
+
+MRB_API double
+mrb_cstr_to_dbl(mrb_state *mrb, const char *s, mrb_bool badcheck)
+{
+  return mrb_str_len_to_dbl(mrb, s, strlen(s), badcheck);
+}
+
+MRB_API double
+mrb_str_to_dbl(mrb_state *mrb, mrb_value str, mrb_bool badcheck)
+{
+  return mrb_str_len_to_dbl(mrb, RSTRING_PTR(str), RSTRING_LEN(str), badcheck);
+}
+
+/* 15.2.10.5.39 */
+/*
+ *  call-seq:
+ *     str.to_f   => float
+ *
+ *  Returns the result of interpreting leading characters in <i>str</i> as a
+ *  floating point number. Extraneous characters past the end of a valid number
+ *  are ignored. If there is not a valid number at the start of <i>str</i>,
+ *  <code>0.0</code> is returned. This method never raises an exception.
+ *
+ *     "123.45e1".to_f        #=> 1234.5
+ *     "45.67 degrees".to_f   #=> 45.67
+ *     "thx1138".to_f         #=> 0.0
+ */
+static mrb_value
+mrb_str_to_f(mrb_state *mrb, mrb_value self)
+{
+  return mrb_float_value(mrb, mrb_str_to_dbl(mrb, self, FALSE));
+}
+#endif
+
+/* 15.2.10.5.40 */
+/*
+ *  call-seq:
+ *     str.to_s     => str
+ *
+ *  Returns the receiver.
+ */
+static mrb_value
+mrb_str_to_s(mrb_state *mrb, mrb_value self)
+{
+  if (mrb_obj_class(mrb, self) != mrb->string_class) {
+    return mrb_str_dup(mrb, self);
+  }
+  return self;
+}
+
+/* 15.2.10.5.43 */
+/*
+ *  call-seq:
+ *     str.upcase!   => str or nil
+ *
+ *  Upcases the contents of <i>str</i>, returning <code>nil</code> if no changes
+ *  were made.
+ */
+static mrb_value
+mrb_str_upcase_bang(mrb_state *mrb, mrb_value str)
+{
+  struct RString *s = mrb_str_ptr(str);
+  char *p, *pend;
+  mrb_bool modify = FALSE;
+
+  mrb_str_modify_keep_ascii(mrb, s);
+  p = RSTRING_PTR(str);
+  pend = RSTRING_END(str);
+  while (p < pend) {
+    if (ISLOWER(*p)) {
+      *p = TOUPPER(*p);
+      modify = TRUE;
+    }
+    p++;
+  }
+
+  if (modify) return str;
+  return mrb_nil_value();
+}
+
+/* 15.2.10.5.42 */
+/*
+ *  call-seq:
+ *     str.upcase   => new_str
+ *
+ *  Returns a copy of <i>str</i> with all lowercase letters replaced with their
+ *  uppercase counterparts. The operation is locale insensitive---only
+ *  characters 'a' to 'z' are affected.
+ *
+ *     "hEllO".upcase   #=> "HELLO"
+ */
+static mrb_value
+mrb_str_upcase(mrb_state *mrb, mrb_value self)
+{
+  mrb_value str;
+
+  str = mrb_str_dup(mrb, self);
+  mrb_str_upcase_bang(mrb, str);
+  return str;
+}
+
+/*
+ *  call-seq:
+ *     str.dump   -> new_str
+ *
+ *  Produces a version of <i>str</i> with all nonprinting characters replaced by
+ *  <code>\nnn</code> notation and all special characters escaped.
+ */
+mrb_value
+mrb_str_dump(mrb_state *mrb, mrb_value str)
+{
+  return str_escape(mrb, str, FALSE);
+}
+
+MRB_API mrb_value
+mrb_str_cat(mrb_state *mrb, mrb_value str, const char *ptr, size_t len)
+{
+  struct RString *s = mrb_str_ptr(str);
+  size_t capa;
+  size_t total;
+  ptrdiff_t off = -1;
+
+  if (len == 0) return str;
+  mrb_str_modify(mrb, s);
+  if (ptr >= RSTR_PTR(s) && ptr <= RSTR_PTR(s) + (size_t)RSTR_LEN(s)) {
+      off = ptr - RSTR_PTR(s);
+  }
+
+  capa = RSTR_CAPA(s);
+  total = RSTR_LEN(s)+len;
+  if (total >= MRB_SSIZE_MAX) {
+  size_error:
+    mrb_raise(mrb, E_ARGUMENT_ERROR, "string size too big");
+  }
+  if (capa <= total) {
+    if (capa == 0) capa = 1;
+    while (capa <= total) {
+      if (capa <= MRB_SSIZE_MAX / 2) {
+        capa *= 2;
+      }
+      else {
+        capa = total+1;
+      }
+    }
+    if (capa <= total || capa > MRB_SSIZE_MAX) {
+      goto size_error;
+    }
+    resize_capa(mrb, s, capa);
+  }
+  if (off != -1) {
+      ptr = RSTR_PTR(s) + off;
+  }
+  memcpy(RSTR_PTR(s) + RSTR_LEN(s), ptr, len);
+  mrb_assert_int_fit(size_t, total, mrb_ssize, MRB_SSIZE_MAX);
+  RSTR_SET_LEN(s, total);
+  RSTR_PTR(s)[total] = '\0';   /* sentinel */
+  return str;
+}
+
+MRB_API mrb_value
+mrb_str_cat_cstr(mrb_state *mrb, mrb_value str, const char *ptr)
+{
+  return mrb_str_cat(mrb, str, ptr, strlen(ptr));
+}
+
+MRB_API mrb_value
+mrb_str_cat_str(mrb_state *mrb, mrb_value str, mrb_value str2)
+{
+  if (mrb_str_ptr(str) == mrb_str_ptr(str2)) {
+    mrb_str_modify(mrb, mrb_str_ptr(str));
+  }
+  return mrb_str_cat(mrb, str, RSTRING_PTR(str2), RSTRING_LEN(str2));
+}
+
+MRB_API mrb_value
+mrb_str_append(mrb_state *mrb, mrb_value str1, mrb_value str2)
+{
+  mrb_to_str(mrb, str2);
+  return mrb_str_cat_str(mrb, str1, str2);
+}
+
+/*
+ * call-seq:
+ *   str.inspect   -> string
+ *
+ * Returns a printable version of _str_, surrounded by quote marks,
+ * with special characters escaped.
+ *
+ *    str = "hello"
+ *    str[3] = "\b"
+ *    str.inspect       #=> "\"hel\\bo\""
+ */
+mrb_value
+mrb_str_inspect(mrb_state *mrb, mrb_value str)
+{
+  return str_escape(mrb, str, TRUE);
+}
+
+/*
+ * call-seq:
+ *   str.bytes   -> array of fixnums
+ *
+ * Returns an array of bytes in _str_.
+ *
+ *    str = "hello"
+ *    str.bytes       #=> [104, 101, 108, 108, 111]
+ */
+static mrb_value
+mrb_str_bytes(mrb_state *mrb, mrb_value str)
+{
+  struct RString *s = mrb_str_ptr(str);
+  mrb_value a = mrb_ary_new_capa(mrb, RSTR_LEN(s));
+  unsigned char *p = (unsigned char *)(RSTR_PTR(s)), *pend = p + RSTR_LEN(s);
+
+  while (p < pend) {
+    mrb_ary_push(mrb, a, mrb_fixnum_value(p[0]));
+    p++;
+  }
+  return a;
+}
+
+/*
+ *  call-seq:
+ *     str.getbyte(index)          -> 0 .. 255
+ *
+ *  returns the <i>index</i>th byte as an integer.
+ */
+static mrb_value
+mrb_str_getbyte(mrb_state *mrb, mrb_value str)
+{
+  mrb_int pos;
+  mrb_get_args(mrb, "i", &pos);
+
+  if (pos < 0)
+    pos += RSTRING_LEN(str);
+  if (pos < 0 ||  RSTRING_LEN(str) <= pos)
+    return mrb_nil_value();
+
+  return mrb_fixnum_value((unsigned char)RSTRING_PTR(str)[pos]);
+}
+
+/*
+ *  call-seq:
+ *     str.setbyte(index, integer) -> integer
+ *
+ *  modifies the <i>index</i>th byte as <i>integer</i>.
+ */
+static mrb_value
+mrb_str_setbyte(mrb_state *mrb, mrb_value str)
+{
+  mrb_int pos, byte;
+  mrb_int len;
+
+  mrb_get_args(mrb, "ii", &pos, &byte);
+
+  len = RSTRING_LEN(str);
+  if (pos < -len || len <= pos)
+    mrb_raisef(mrb, E_INDEX_ERROR, "index %i out of string", pos);
+  if (pos < 0)
+    pos += len;
+
+  mrb_str_modify(mrb, mrb_str_ptr(str));
+  byte &= 0xff;
+  RSTRING_PTR(str)[pos] = (unsigned char)byte;
+  return mrb_fixnum_value((unsigned char)byte);
+}
+
+/*
+ *  call-seq:
+ *     str.byteslice(integer)           -> new_str or nil
+ *     str.byteslice(integer, integer)   -> new_str or nil
+ *     str.byteslice(range)            -> new_str or nil
+ *
+ *  Byte Reference---If passed a single Integer, returns a
+ *  substring of one byte at that position. If passed two Integer
+ *  objects, returns a substring starting at the offset given by the first, and
+ *  a length given by the second. If given a Range, a substring containing
+ *  bytes at offsets given by the range is returned. In all three cases, if
+ *  an offset is negative, it is counted from the end of <i>str</i>. Returns
+ *  <code>nil</code> if the initial offset falls outside the string, the length
+ *  is negative, or the beginning of the range is greater than the end.
+ *  The encoding of the resulted string keeps original encoding.
+ *
+ *     "hello".byteslice(1)     #=> "e"
+ *     "hello".byteslice(-1)    #=> "o"
+ *     "hello".byteslice(1, 2)  #=> "el"
+ *     "\x80\u3042".byteslice(1, 3) #=> "\u3042"
+ *     "\x03\u3042\xff".byteslice(1..3) #=> "\u3042"
+ */
+static mrb_value
+mrb_str_byteslice(mrb_state *mrb, mrb_value str)
+{
+  mrb_value a1, a2;
+  mrb_int str_len = RSTRING_LEN(str), beg, len;
+  mrb_bool empty = TRUE;
+
+  if (mrb_get_args(mrb, "o|o", &a1, &a2) == 2) {
+    beg = mrb_fixnum(mrb_to_int(mrb, a1));
+    len = mrb_fixnum(mrb_to_int(mrb, a2));
+  }
+  else if (mrb_range_p(a1)) {
+    if (mrb_range_beg_len(mrb, a1, &beg, &len, str_len, TRUE) != MRB_RANGE_OK) {
+      return mrb_nil_value();
+    }
+  }
+  else {
+    beg = mrb_fixnum(mrb_to_int(mrb, a1));
+    len = 1;
+    empty = FALSE;
+  }
+
+  if (mrb_str_beg_len(str_len, &beg, &len) && (empty || len != 0)) {
+    return mrb_str_byte_subseq(mrb, str, beg, len);
+  }
+  else {
+    return mrb_nil_value();
+  }
+}
+
+/* ---------------------------*/
+void
+mrb_init_string(mrb_state *mrb)
+{
+  struct RClass *s;
+
+  mrb_static_assert(RSTRING_EMBED_LEN_MAX < (1 << MRB_STR_EMBED_LEN_BIT),
+                    "pointer size too big for embedded string");
+
+  mrb->string_class = s = mrb_define_class(mrb, "String", mrb->object_class);             /* 15.2.10 */
+  MRB_SET_INSTANCE_TT(s, MRB_TT_STRING);
+
+  mrb_define_method(mrb, s, "bytesize",        mrb_str_bytesize,        MRB_ARGS_NONE());
+
+  mrb_define_method(mrb, s, "<=>",             mrb_str_cmp_m,           MRB_ARGS_REQ(1)); /* 15.2.10.5.1  */
+  mrb_define_method(mrb, s, "==",              mrb_str_equal_m,         MRB_ARGS_REQ(1)); /* 15.2.10.5.2  */
+  mrb_define_method(mrb, s, "+",               mrb_str_plus_m,          MRB_ARGS_REQ(1)); /* 15.2.10.5.4  */
+  mrb_define_method(mrb, s, "*",               mrb_str_times,           MRB_ARGS_REQ(1)); /* 15.2.10.5.5  */
+  mrb_define_method(mrb, s, "[]",              mrb_str_aref_m,          MRB_ARGS_ANY());  /* 15.2.10.5.6  */
+  mrb_define_method(mrb, s, "[]=",             mrb_str_aset_m,          MRB_ARGS_ANY());
+  mrb_define_method(mrb, s, "capitalize",      mrb_str_capitalize,      MRB_ARGS_NONE()); /* 15.2.10.5.7  */
+  mrb_define_method(mrb, s, "capitalize!",     mrb_str_capitalize_bang, MRB_ARGS_NONE()); /* 15.2.10.5.8  */
+  mrb_define_method(mrb, s, "chomp",           mrb_str_chomp,           MRB_ARGS_ANY());  /* 15.2.10.5.9  */
+  mrb_define_method(mrb, s, "chomp!",          mrb_str_chomp_bang,      MRB_ARGS_ANY());  /* 15.2.10.5.10 */
+  mrb_define_method(mrb, s, "chop",            mrb_str_chop,            MRB_ARGS_NONE()); /* 15.2.10.5.11 */
+  mrb_define_method(mrb, s, "chop!",           mrb_str_chop_bang,       MRB_ARGS_NONE()); /* 15.2.10.5.12 */
+  mrb_define_method(mrb, s, "downcase",        mrb_str_downcase,        MRB_ARGS_NONE()); /* 15.2.10.5.13 */
+  mrb_define_method(mrb, s, "downcase!",       mrb_str_downcase_bang,   MRB_ARGS_NONE()); /* 15.2.10.5.14 */
+  mrb_define_method(mrb, s, "empty?",          mrb_str_empty_p,         MRB_ARGS_NONE()); /* 15.2.10.5.16 */
+  mrb_define_method(mrb, s, "eql?",            mrb_str_eql,             MRB_ARGS_REQ(1)); /* 15.2.10.5.17 */
+
+  mrb_define_method(mrb, s, "hash",            mrb_str_hash_m,          MRB_ARGS_NONE()); /* 15.2.10.5.20 */
+  mrb_define_method(mrb, s, "include?",        mrb_str_include,         MRB_ARGS_REQ(1)); /* 15.2.10.5.21 */
+  mrb_define_method(mrb, s, "index",           mrb_str_index_m,         MRB_ARGS_ARG(1,1));  /* 15.2.10.5.22 */
+  mrb_define_method(mrb, s, "initialize",      mrb_str_init,            MRB_ARGS_REQ(1)); /* 15.2.10.5.23 */
+  mrb_define_method(mrb, s, "initialize_copy", mrb_str_replace,         MRB_ARGS_REQ(1)); /* 15.2.10.5.24 */
+  mrb_define_method(mrb, s, "intern",          mrb_str_intern,          MRB_ARGS_NONE()); /* 15.2.10.5.25 */
+  mrb_define_method(mrb, s, "length",          mrb_str_size,            MRB_ARGS_NONE()); /* 15.2.10.5.26 */
+  mrb_define_method(mrb, s, "replace",         mrb_str_replace,         MRB_ARGS_REQ(1)); /* 15.2.10.5.28 */
+  mrb_define_method(mrb, s, "reverse",         mrb_str_reverse,         MRB_ARGS_NONE()); /* 15.2.10.5.29 */
+  mrb_define_method(mrb, s, "reverse!",        mrb_str_reverse_bang,    MRB_ARGS_NONE()); /* 15.2.10.5.30 */
+  mrb_define_method(mrb, s, "rindex",          mrb_str_rindex,          MRB_ARGS_ANY());  /* 15.2.10.5.31 */
+  mrb_define_method(mrb, s, "size",            mrb_str_size,            MRB_ARGS_NONE()); /* 15.2.10.5.33 */
+  mrb_define_method(mrb, s, "slice",           mrb_str_aref_m,          MRB_ARGS_ANY());  /* 15.2.10.5.34 */
+  mrb_define_method(mrb, s, "split",           mrb_str_split_m,         MRB_ARGS_ANY());  /* 15.2.10.5.35 */
+
+#ifndef MRB_WITHOUT_FLOAT
+  mrb_define_method(mrb, s, "to_f",            mrb_str_to_f,            MRB_ARGS_NONE()); /* 15.2.10.5.38 */
+#endif
+  mrb_define_method(mrb, s, "to_i",            mrb_str_to_i,            MRB_ARGS_ANY());  /* 15.2.10.5.39 */
+  mrb_define_method(mrb, s, "to_s",            mrb_str_to_s,            MRB_ARGS_NONE()); /* 15.2.10.5.40 */
+  mrb_define_method(mrb, s, "to_str",          mrb_str_to_s,            MRB_ARGS_NONE());
+  mrb_define_method(mrb, s, "to_sym",          mrb_str_intern,          MRB_ARGS_NONE()); /* 15.2.10.5.41 */
+  mrb_define_method(mrb, s, "upcase",          mrb_str_upcase,          MRB_ARGS_NONE()); /* 15.2.10.5.42 */
+  mrb_define_method(mrb, s, "upcase!",         mrb_str_upcase_bang,     MRB_ARGS_NONE()); /* 15.2.10.5.43 */
+  mrb_define_method(mrb, s, "inspect",         mrb_str_inspect,         MRB_ARGS_NONE()); /* 15.2.10.5.46(x) */
+  mrb_define_method(mrb, s, "bytes",           mrb_str_bytes,           MRB_ARGS_NONE());
+
+  mrb_define_method(mrb, s, "getbyte",         mrb_str_getbyte,         MRB_ARGS_REQ(1));
+  mrb_define_method(mrb, s, "setbyte",         mrb_str_setbyte,         MRB_ARGS_REQ(2));
+  mrb_define_method(mrb, s, "byteslice",       mrb_str_byteslice,       MRB_ARGS_ARG(1,1));
+}
+
+#ifndef MRB_WITHOUT_FLOAT
+/*
+ * Source code for the "strtod" library procedure.
+ *
+ * Copyright (c) 1988-1993 The Regents of the University of California.
+ * Copyright (c) 1994 Sun Microsystems, Inc.
+ *
+ * Permission to use, copy, modify, and distribute this
+ * software and its documentation for any purpose and without
+ * fee is hereby granted, provided that the above copyright
+ * notice appear in all copies.  The University of California
+ * makes no representations about the suitability of this
+ * software for any purpose.  It is provided "as is" without
+ * express or implied warranty.
+ *
+ * RCS: @(#) $Id$
+ */
+
+#include <ctype.h>
+#include <errno.h>
+
+static const int maxExponent = 511; /* Largest possible base 10 exponent.  Any
+                                     * exponent larger than this will already
+                                     * produce underflow or overflow, so there's
+                                     * no need to worry about additional digits.
+                                     */
+static const double powersOf10[] = {/* Table giving binary powers of 10.  Entry */
+    10.,                            /* is 10^2^i.  Used to convert decimal */
+    100.,                           /* exponents into floating-point numbers. */
+    1.0e4,
+    1.0e8,
+    1.0e16,
+    1.0e32,
+    1.0e64,
+    1.0e128,
+    1.0e256
+};
+
+MRB_API double
+mrb_float_read(const char *string, char **endPtr)
+/*  const char *string;            A decimal ASCII floating-point number,
+                                 * optionally preceded by white space.
+                                 * Must have form "-I.FE-X", where I is the
+                                 * integer part of the mantissa, F is the
+                                 * fractional part of the mantissa, and X
+                                 * is the exponent.  Either of the signs
+                                 * may be "+", "-", or omitted.  Either I
+                                 * or F may be omitted, or both.  The decimal
+                                 * point isn't necessary unless F is present.
+                                 * The "E" may actually be an "e".  E and X
+                                 * may both be omitted (but not just one).
+                                 */
+/*  char **endPtr;                 If non-NULL, store terminating character's
+                                 * address here. */
+{
+    int sign, expSign = FALSE;
+    double fraction, dblExp;
+    const double *d;
+    const char *p;
+    int c;
+    int exp = 0;                /* Exponent read from "EX" field. */
+    int fracExp = 0;            /* Exponent that derives from the fractional
+                                 * part.  Under normal circumstatnces, it is
+                                 * the negative of the number of digits in F.
+                                 * However, if I is very long, the last digits
+                                 * of I get dropped (otherwise a long I with a
+                                 * large negative exponent could cause an
+                                 * unnecessary overflow on I alone).  In this
+                                 * case, fracExp is incremented one for each
+                                 * dropped digit. */
+    int mantSize;               /* Number of digits in mantissa. */
+    int decPt;                  /* Number of mantissa digits BEFORE decimal
+                                 * point. */
+    const char *pExp;           /* Temporarily holds location of exponent
+                                 * in string. */
+
+    /*
+     * Strip off leading blanks and check for a sign.
+     */
+
+    p = string;
+    while (ISSPACE(*p)) {
+      p += 1;
+    }
+    if (*p == '-') {
+      sign = TRUE;
+      p += 1;
+    }
+    else {
+      if (*p == '+') {
+        p += 1;
+      }
+      sign = FALSE;
+    }
+
+    /*
+     * Count the number of digits in the mantissa (including the decimal
+     * point), and also locate the decimal point.
+     */
+
+    decPt = -1;
+    for (mantSize = 0; ; mantSize += 1)
+    {
+      c = *p;
+      if (!ISDIGIT(c)) {
+        if ((c != '.') || (decPt >= 0)) {
+          break;
+        }
+        decPt = mantSize;
+      }
+      p += 1;
+    }
+
+    /*
+     * Now suck up the digits in the mantissa.  Use two integers to
+     * collect 9 digits each (this is faster than using floating-point).
+     * If the mantissa has more than 18 digits, ignore the extras, since
+     * they can't affect the value anyway.
+     */
+
+    pExp  = p;
+    p -= mantSize;
+    if (decPt < 0) {
+      decPt = mantSize;
+    }
+    else {
+      mantSize -= 1; /* One of the digits was the point. */
+    }
+    if (mantSize > 18) {
+      if (decPt - 18 > 29999) {
+        fracExp = 29999;
+      }
+      else {
+        fracExp = decPt - 18;
+      }
+      mantSize = 18;
+    }
+    else {
+      fracExp = decPt - mantSize;
+    }
+    if (mantSize == 0) {
+      fraction = 0.0;
+      p = string;
+      goto done;
+    }
+    else {
+      int frac1, frac2;
+      frac1 = 0;
+      for ( ; mantSize > 9; mantSize -= 1)
+      {
+        c = *p;
+        p += 1;
+        if (c == '.') {
+          c = *p;
+          p += 1;
+        }
+        frac1 = 10*frac1 + (c - '0');
+      }
+      frac2 = 0;
+      for (; mantSize > 0; mantSize -= 1)
+      {
+        c = *p;
+        p += 1;
+        if (c == '.') {
+          c = *p;
+          p += 1;
+        }
+        frac2 = 10*frac2 + (c - '0');
+      }
+      fraction = (1.0e9 * frac1) + frac2;
+    }
+
+    /*
+     * Skim off the exponent.
+     */
+
+    p = pExp;
+    if ((*p == 'E') || (*p == 'e')) {
+      p += 1;
+      if (*p == '-') {
+        expSign = TRUE;
+        p += 1;
+      }
+      else {
+        if (*p == '+') {
+          p += 1;
+        }
+        expSign = FALSE;
+      }
+      while (ISDIGIT(*p)) {
+        exp = exp * 10 + (*p - '0');
+        if (exp > 19999) {
+          exp = 19999;
+        }
+        p += 1;
+      }
+    }
+    if (expSign) {
+      exp = fracExp - exp;
+    }
+    else {
+      exp = fracExp + exp;
+    }
+
+    /*
+     * Generate a floating-point number that represents the exponent.
+     * Do this by processing the exponent one bit at a time to combine
+     * many powers of 2 of 10. Then combine the exponent with the
+     * fraction.
+     */
+
+    if (exp < 0) {
+      expSign = TRUE;
+      exp = -exp;
+    }
+    else {
+      expSign = FALSE;
+    }
+    if (exp > maxExponent) {
+      exp = maxExponent;
+      errno = ERANGE;
+    }
+    dblExp = 1.0;
+    for (d = powersOf10; exp != 0; exp >>= 1, d += 1) {
+      if (exp & 01) {
+        dblExp *= *d;
+      }
+    }
+    if (expSign) {
+      fraction /= dblExp;
+    }
+    else {
+      fraction *= dblExp;
+    }
+
+done:
+    if (endPtr != NULL) {
+      *endPtr = (char *) p;
+    }
+
+    if (sign) {
+      return -fraction;
+    }
+    return fraction;
+}
+#endif
Index: /EcnlProtoTool/trunk/mruby-2.1.1/src/symbol.c
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/src/symbol.c	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/src/symbol.c	(revision 439)
@@ -0,0 +1,607 @@
+/*
+** symbol.c - Symbol class
+**
+** See Copyright Notice in mruby.h
+*/
+
+#include <limits.h>
+#include <string.h>
+#include <mruby.h>
+#include <mruby/khash.h>
+#include <mruby/string.h>
+#include <mruby/dump.h>
+#include <mruby/class.h>
+
+/* ------------------------------------------------------ */
+typedef struct symbol_name {
+  mrb_bool lit : 1;
+  uint8_t prev;
+  uint16_t len;
+  const char *name;
+} symbol_name;
+
+#define SYMBOL_INLINE_BIT_POS       1
+#define SYMBOL_INLINE_LOWER_BIT_POS 2
+#define SYMBOL_INLINE               (1 << (SYMBOL_INLINE_BIT_POS - 1))
+#define SYMBOL_INLINE_LOWER         (1 << (SYMBOL_INLINE_LOWER_BIT_POS - 1))
+#define SYMBOL_NORMAL_SHIFT         SYMBOL_INLINE_BIT_POS
+#define SYMBOL_INLINE_SHIFT         SYMBOL_INLINE_LOWER_BIT_POS
+#ifdef MRB_ENABLE_ALL_SYMBOLS
+# define SYMBOL_INLINE_P(sym) FALSE
+# define SYMBOL_INLINE_LOWER_P(sym) FALSE
+# define sym_inline_pack(name, len) 0
+# define sym_inline_unpack(sym, buf, lenp) NULL
+#else
+# define SYMBOL_INLINE_P(sym) ((sym) & SYMBOL_INLINE)
+# define SYMBOL_INLINE_LOWER_P(sym) ((sym) & SYMBOL_INLINE_LOWER)
+#endif
+
+static void
+sym_validate_len(mrb_state *mrb, size_t len)
+{
+  if (len >= RITE_LV_NULL_MARK) {
+    mrb_raise(mrb, E_ARGUMENT_ERROR, "symbol length too long");
+  }
+}
+
+#ifndef MRB_ENABLE_ALL_SYMBOLS
+static const char pack_table[] = "_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
+
+static mrb_sym
+sym_inline_pack(const char *name, size_t len)
+{
+  const size_t lower_length_max = (MRB_SYMBOL_BIT - 2) / 5;
+  const size_t mix_length_max   = (MRB_SYMBOL_BIT - 2) / 6;
+
+  char c;
+  const char *p;
+  size_t i;
+  mrb_sym sym = 0;
+  mrb_bool lower = TRUE;
+
+  if (len > lower_length_max) return 0; /* too long */
+  for (i=0; i<len; i++) {
+    uint32_t bits;
+
+    c = name[i];
+    if (c == 0) return 0;       /* NUL in name */
+    p = strchr(pack_table, (int)c);
+    if (p == 0) return 0;       /* non alnum char */
+    bits = (uint32_t)(p - pack_table)+1;
+    if (bits > 27) lower = FALSE;
+    if (i >= mix_length_max) break;
+    sym |= bits<<(i*6+SYMBOL_INLINE_SHIFT);
+  }
+  if (lower) {
+    sym = 0;
+    for (i=0; i<len; i++) {
+      uint32_t bits;
+
+      c = name[i];
+      p = strchr(pack_table, (int)c);
+      bits = (uint32_t)(p - pack_table)+1;
+      sym |= bits<<(i*5+SYMBOL_INLINE_SHIFT);
+    }
+    return sym | SYMBOL_INLINE | SYMBOL_INLINE_LOWER;
+  }
+  if (len > mix_length_max) return 0;
+  return sym | SYMBOL_INLINE;
+}
+
+static const char*
+sym_inline_unpack(mrb_sym sym, char *buf, mrb_int *lenp)
+{
+  int bit_per_char = SYMBOL_INLINE_LOWER_P(sym) ? 5 : 6;
+  int i;
+
+  mrb_assert(SYMBOL_INLINE_P(sym));
+
+  for (i=0; i<30/bit_per_char; i++) {
+    uint32_t bits = sym>>(i*bit_per_char+SYMBOL_INLINE_SHIFT) & ((1<<bit_per_char)-1);
+    if (bits == 0) break;
+    buf[i] = pack_table[bits-1];;
+  }
+  buf[i] = '\0';
+  if (lenp) *lenp = i;
+  return buf;
+}
+#endif
+
+static uint8_t
+symhash(const char *key, size_t len)
+{
+    uint32_t hash, i;
+
+    for(hash = i = 0; i < len; ++i) {
+        hash += key[i];
+        hash += (hash << 10);
+        hash ^= (hash >> 6);
+    }
+    hash += (hash << 3);
+    hash ^= (hash >> 11);
+    hash += (hash << 15);
+    return hash & 0xff;
+}
+
+static mrb_sym
+find_symbol(mrb_state *mrb, const char *name, size_t len, uint8_t *hashp)
+{
+  mrb_sym i;
+  symbol_name *sname;
+  uint8_t hash;
+
+  /* inline symbol */
+  i = sym_inline_pack(name, len);
+  if (i > 0) return i;
+
+  hash = symhash(name, len);
+  if (hashp) *hashp = hash;
+
+  i = mrb->symhash[hash];
+  if (i == 0) return 0;
+  do {
+    sname = &mrb->symtbl[i];
+    if (sname->len == len && memcmp(sname->name, name, len) == 0) {
+      return i<<SYMBOL_NORMAL_SHIFT;
+    }
+    if (sname->prev == 0xff) {
+      i -= 0xff;
+      sname = &mrb->symtbl[i];
+      while (mrb->symtbl < sname) {
+        if (sname->len == len && memcmp(sname->name, name, len) == 0) {
+          return (mrb_sym)(sname - mrb->symtbl)<<SYMBOL_NORMAL_SHIFT;
+        }
+        sname--;
+      }
+      return 0;
+    }
+    i -= sname->prev;
+  } while (sname->prev > 0);
+  return 0;
+}
+
+static mrb_sym
+sym_intern(mrb_state *mrb, const char *name, size_t len, mrb_bool lit)
+{
+  mrb_sym sym;
+  symbol_name *sname;
+  uint8_t hash;
+
+  sym_validate_len(mrb, len);
+  sym = find_symbol(mrb, name, len, &hash);
+  if (sym > 0) return sym;
+
+  /* registering a new symbol */
+  sym = ++mrb->symidx;
+  if (mrb->symcapa < sym) {
+    if (mrb->symcapa == 0) mrb->symcapa = 100;
+    else mrb->symcapa = (size_t)(mrb->symcapa * 6 / 5);
+    mrb->symtbl = (symbol_name*)mrb_realloc(mrb, mrb->symtbl, sizeof(symbol_name)*(mrb->symcapa+1));
+  }
+  sname = &mrb->symtbl[sym];
+  sname->len = (uint16_t)len;
+  if (lit || mrb_ro_data_p(name)) {
+    sname->name = name;
+    sname->lit = TRUE;
+  }
+  else {
+    char *p = (char *)mrb_malloc(mrb, len+1);
+    memcpy(p, name, len);
+    p[len] = 0;
+    sname->name = (const char*)p;
+    sname->lit = FALSE;
+  }
+  if (mrb->symhash[hash]) {
+    mrb_sym i = sym - mrb->symhash[hash];
+    if (i > 0xff)
+      sname->prev = 0xff;
+    else
+      sname->prev = i;
+  }
+  else {
+    sname->prev = 0;
+  }
+  mrb->symhash[hash] = sym;
+
+  return sym<<SYMBOL_NORMAL_SHIFT;
+}
+
+MRB_API mrb_sym
+mrb_intern(mrb_state *mrb, const char *name, size_t len)
+{
+  return sym_intern(mrb, name, len, FALSE);
+}
+
+MRB_API mrb_sym
+mrb_intern_static(mrb_state *mrb, const char *name, size_t len)
+{
+  return sym_intern(mrb, name, len, TRUE);
+}
+
+MRB_API mrb_sym
+mrb_intern_cstr(mrb_state *mrb, const char *name)
+{
+  return mrb_intern(mrb, name, strlen(name));
+}
+
+MRB_API mrb_sym
+mrb_intern_str(mrb_state *mrb, mrb_value str)
+{
+  return mrb_intern(mrb, RSTRING_PTR(str), RSTRING_LEN(str));
+}
+
+MRB_API mrb_value
+mrb_check_intern(mrb_state *mrb, const char *name, size_t len)
+{
+  mrb_sym sym;
+
+  sym_validate_len(mrb, len);
+  sym = find_symbol(mrb, name, len, NULL);
+  if (sym > 0) return mrb_symbol_value(sym);
+  return mrb_nil_value();
+}
+
+MRB_API mrb_value
+mrb_check_intern_cstr(mrb_state *mrb, const char *name)
+{
+  return mrb_check_intern(mrb, name, strlen(name));
+}
+
+MRB_API mrb_value
+mrb_check_intern_str(mrb_state *mrb, mrb_value str)
+{
+  return mrb_check_intern(mrb, RSTRING_PTR(str), RSTRING_LEN(str));
+}
+
+static const char*
+sym2name_len(mrb_state *mrb, mrb_sym sym, char *buf, mrb_int *lenp)
+{
+  if (SYMBOL_INLINE_P(sym)) return sym_inline_unpack(sym, buf, lenp);
+
+  sym >>= SYMBOL_NORMAL_SHIFT;
+  if (sym == 0 || mrb->symidx < sym) {
+    if (lenp) *lenp = 0;
+    return NULL;
+  }
+
+  if (lenp) *lenp = mrb->symtbl[sym].len;
+  return mrb->symtbl[sym].name;
+}
+
+MRB_API const char*
+mrb_sym_name_len(mrb_state *mrb, mrb_sym sym, mrb_int *lenp)
+{
+  return sym2name_len(mrb, sym, mrb->symbuf, lenp);
+}
+
+void
+mrb_free_symtbl(mrb_state *mrb)
+{
+  mrb_sym i, lim;
+
+  for (i=1, lim=mrb->symidx+1; i<lim; i++) {
+    if (!mrb->symtbl[i].lit) {
+      mrb_free(mrb, (char*)mrb->symtbl[i].name);
+    }
+  }
+  mrb_free(mrb, mrb->symtbl);
+}
+
+void
+mrb_init_symtbl(mrb_state *mrb)
+{
+}
+
+/**********************************************************************
+ * Document-class: Symbol
+ *
+ *  <code>Symbol</code> objects represent names and some strings
+ *  inside the Ruby
+ *  interpreter. They are generated using the <code>:name</code> and
+ *  <code>:"string"</code> literals
+ *  syntax, and by the various <code>to_sym</code> methods. The same
+ *  <code>Symbol</code> object will be created for a given name or string
+ *  for the duration of a program's execution, regardless of the context
+ *  or meaning of that name. Thus if <code>Fred</code> is a constant in
+ *  one context, a method in another, and a class in a third, the
+ *  <code>Symbol</code> <code>:Fred</code> will be the same object in
+ *  all three contexts.
+ *
+ *     module One
+ *       class Fred
+ *       end
+ *       $f1 = :Fred
+ *     end
+ *     module Two
+ *       Fred = 1
+ *       $f2 = :Fred
+ *     end
+ *     def Fred()
+ *     end
+ *     $f3 = :Fred
+ *     $f1.object_id   #=> 2514190
+ *     $f2.object_id   #=> 2514190
+ *     $f3.object_id   #=> 2514190
+ *
+ */
+
+/* 15.2.11.3.2  */
+/* 15.2.11.3.3  */
+/*
+ *  call-seq:
+ *     sym.id2name   -> string
+ *     sym.to_s      -> string
+ *
+ *  Returns the name or string corresponding to <i>sym</i>.
+ *
+ *     :fred.id2name   #=> "fred"
+ */
+static mrb_value
+sym_to_s(mrb_state *mrb, mrb_value sym)
+{
+  return mrb_sym_str(mrb, mrb_symbol(sym));
+}
+
+/* 15.2.11.3.4  */
+/*
+ * call-seq:
+ *   sym.to_sym   -> sym
+ *   sym.intern   -> sym
+ *
+ * In general, <code>to_sym</code> returns the <code>Symbol</code> corresponding
+ * to an object. As <i>sym</i> is already a symbol, <code>self</code> is returned
+ * in this case.
+ */
+
+static mrb_value
+sym_to_sym(mrb_state *mrb, mrb_value sym)
+{
+  return sym;
+}
+
+/* 15.2.11.3.5(x)  */
+/*
+ *  call-seq:
+ *     sym.inspect    -> string
+ *
+ *  Returns the representation of <i>sym</i> as a symbol literal.
+ *
+ *     :fred.inspect   #=> ":fred"
+ */
+
+#if __STDC__
+# define SIGN_EXTEND_CHAR(c) ((signed char)(c))
+#else  /* not __STDC__ */
+/* As in Harbison and Steele.  */
+# define SIGN_EXTEND_CHAR(c) ((((unsigned char)(c)) ^ 128) - 128)
+#endif
+#define is_identchar(c) (SIGN_EXTEND_CHAR(c)!=-1&&(ISALNUM(c) || (c) == '_'))
+
+static mrb_bool
+is_special_global_name(const char* m)
+{
+  switch (*m) {
+    case '~': case '*': case '$': case '?': case '!': case '@':
+    case '/': case '\\': case ';': case ',': case '.': case '=':
+    case ':': case '<': case '>': case '\"':
+    case '&': case '`': case '\'': case '+':
+    case '0':
+      ++m;
+      break;
+    case '-':
+      ++m;
+      if (is_identchar(*m)) m += 1;
+      break;
+    default:
+      if (!ISDIGIT(*m)) return FALSE;
+      do ++m; while (ISDIGIT(*m));
+      break;
+  }
+  return !*m;
+}
+
+static mrb_bool
+symname_p(const char *name)
+{
+  const char *m = name;
+  mrb_bool localid = FALSE;
+
+  if (!m) return FALSE;
+  switch (*m) {
+    case '\0':
+      return FALSE;
+
+    case '$':
+      if (is_special_global_name(++m)) return TRUE;
+      goto id;
+
+    case '@':
+      if (*++m == '@') ++m;
+      goto id;
+
+    case '<':
+      switch (*++m) {
+        case '<': ++m; break;
+        case '=': if (*++m == '>') ++m; break;
+        default: break;
+      }
+      break;
+
+    case '>':
+      switch (*++m) {
+        case '>': case '=': ++m; break;
+        default: break;
+      }
+      break;
+
+    case '=':
+      switch (*++m) {
+        case '~': ++m; break;
+        case '=': if (*++m == '=') ++m; break;
+        default: return FALSE;
+      }
+      break;
+
+    case '*':
+      if (*++m == '*') ++m;
+      break;
+    case '!':
+      switch (*++m) {
+        case '=': case '~': ++m;
+      }
+      break;
+    case '+': case '-':
+      if (*++m == '@') ++m;
+      break;
+    case '|':
+      if (*++m == '|') ++m;
+      break;
+    case '&':
+      if (*++m == '&') ++m;
+      break;
+
+    case '^': case '/': case '%': case '~': case '`':
+      ++m;
+      break;
+
+    case '[':
+      if (*++m != ']') return FALSE;
+      if (*++m == '=') ++m;
+      break;
+
+    default:
+      localid = !ISUPPER(*m);
+id:
+      if (*m != '_' && !ISALPHA(*m)) return FALSE;
+      while (is_identchar(*m)) m += 1;
+      if (localid) {
+        switch (*m) {
+          case '!': case '?': case '=': ++m;
+          default: break;
+        }
+      }
+      break;
+  }
+  return *m ? FALSE : TRUE;
+}
+
+static mrb_value
+sym_inspect(mrb_state *mrb, mrb_value sym)
+{
+  mrb_value str;
+  const char *name;
+  mrb_int len;
+  mrb_sym id = mrb_symbol(sym);
+  char *sp;
+
+  name = mrb_sym_name_len(mrb, id, &len);
+  str = mrb_str_new(mrb, 0, len+1);
+  sp = RSTRING_PTR(str);
+  sp[0] = ':';
+  memcpy(sp+1, name, len);
+  mrb_assert_int_fit(mrb_int, len, size_t, SIZE_MAX);
+  if (!symname_p(name) || strlen(name) != (size_t)len) {
+    str = mrb_str_inspect(mrb, str);
+    sp = RSTRING_PTR(str);
+    sp[0] = ':';
+    sp[1] = '"';
+  }
+#ifdef MRB_UTF8_STRING
+  if (SYMBOL_INLINE_P(id)) RSTR_SET_ASCII_FLAG(mrb_str_ptr(str));
+#endif
+  return str;
+}
+
+MRB_API mrb_value
+mrb_sym_str(mrb_state *mrb, mrb_sym sym)
+{
+  mrb_int len;
+  const char *name = mrb_sym_name_len(mrb, sym, &len);
+
+  if (!name) return mrb_undef_value(); /* can't happen */
+  if (SYMBOL_INLINE_P(sym)) {
+    mrb_value str = mrb_str_new(mrb, name, len);
+    RSTR_SET_ASCII_FLAG(mrb_str_ptr(str));
+    return str;
+  }
+  return mrb_str_new_static(mrb, name, len);
+}
+
+static const char*
+sym_name(mrb_state *mrb, mrb_sym sym, mrb_bool dump)
+{
+  mrb_int len;
+  const char *name = mrb_sym_name_len(mrb, sym, &len);
+
+  if (!name) return NULL;
+  if (strlen(name) == (size_t)len && (!dump || symname_p(name))) {
+    return name;
+  }
+  else {
+    mrb_value str = SYMBOL_INLINE_P(sym) ?
+      mrb_str_new(mrb, name, len) : mrb_str_new_static(mrb, name, len);
+    str = mrb_str_dump(mrb, str);
+    return RSTRING_PTR(str);
+  }
+}
+
+MRB_API const char*
+mrb_sym_name(mrb_state *mrb, mrb_sym sym)
+{
+  return sym_name(mrb, sym, FALSE);
+}
+
+MRB_API const char*
+mrb_sym_dump(mrb_state *mrb, mrb_sym sym)
+{
+  return sym_name(mrb, sym, TRUE);
+}
+
+#define lesser(a,b) (((a)>(b))?(b):(a))
+
+static mrb_value
+sym_cmp(mrb_state *mrb, mrb_value s1)
+{
+  mrb_value s2;
+  mrb_sym sym1, sym2;
+
+  mrb_get_args(mrb, "o", &s2);
+  if (!mrb_symbol_p(s2)) return mrb_nil_value();
+  sym1 = mrb_symbol(s1);
+  sym2 = mrb_symbol(s2);
+  if (sym1 == sym2) return mrb_fixnum_value(0);
+  else {
+    const char *p1, *p2;
+    int retval;
+    mrb_int len, len1, len2;
+    char buf1[8], buf2[8];
+
+    p1 = sym2name_len(mrb, sym1, buf1, &len1);
+    p2 = sym2name_len(mrb, sym2, buf2, &len2);
+    len = lesser(len1, len2);
+    retval = memcmp(p1, p2, len);
+    if (retval == 0) {
+      if (len1 == len2) return mrb_fixnum_value(0);
+      if (len1 > len2)  return mrb_fixnum_value(1);
+      return mrb_fixnum_value(-1);
+    }
+    if (retval > 0) return mrb_fixnum_value(1);
+    return mrb_fixnum_value(-1);
+  }
+}
+
+void
+mrb_init_symbol(mrb_state *mrb)
+{
+  struct RClass *sym;
+
+  mrb->symbol_class = sym = mrb_define_class(mrb, "Symbol", mrb->object_class);  /* 15.2.11 */
+  MRB_SET_INSTANCE_TT(sym, MRB_TT_SYMBOL);
+  mrb_undef_class_method(mrb,  sym, "new");
+
+  mrb_define_method(mrb, sym, "id2name", sym_to_s,    MRB_ARGS_NONE());          /* 15.2.11.3.2 */
+  mrb_define_method(mrb, sym, "to_s",    sym_to_s,    MRB_ARGS_NONE());          /* 15.2.11.3.3 */
+  mrb_define_method(mrb, sym, "to_sym",  sym_to_sym,  MRB_ARGS_NONE());          /* 15.2.11.3.4 */
+  mrb_define_method(mrb, sym, "inspect", sym_inspect, MRB_ARGS_NONE());          /* 15.2.11.3.5(x) */
+  mrb_define_method(mrb, sym, "<=>",     sym_cmp,     MRB_ARGS_REQ(1));
+}
Index: /EcnlProtoTool/trunk/mruby-2.1.1/src/value_array.h
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/src/value_array.h	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/src/value_array.h	(revision 439)
@@ -0,0 +1,27 @@
+#ifndef MRB_VALUE_ARRAY_H__
+#define MRB_VALUE_ARRAY_H__
+
+#include <mruby.h>
+
+static inline void
+value_move(mrb_value *s1, const mrb_value *s2, size_t n)
+{
+  if (s1 > s2 && s1 < s2 + n)
+  {
+    s1 += n;
+    s2 += n;
+    while (n-- > 0) {
+      *--s1 = *--s2;
+    }
+  }
+  else if (s1 != s2) {
+    while (n-- > 0) {
+      *s1++ = *s2++;
+    }
+  }
+  else {
+    /* nothing to do. */
+  }
+}
+
+#endif /* MRB_VALUE_ARRAY_H__ */
Index: /EcnlProtoTool/trunk/mruby-2.1.1/src/variable.c
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/src/variable.c	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/src/variable.c	(revision 439)
@@ -0,0 +1,1142 @@
+/*
+** variable.c - mruby variables
+**
+** See Copyright Notice in mruby.h
+*/
+
+#include <mruby.h>
+#include <mruby/array.h>
+#include <mruby/class.h>
+#include <mruby/proc.h>
+#include <mruby/string.h>
+#include <mruby/variable.h>
+
+#ifndef MRB_IV_SEGMENT_SIZE
+#define MRB_IV_SEGMENT_SIZE 4
+#endif
+
+typedef struct segment {
+  mrb_sym key[MRB_IV_SEGMENT_SIZE];
+  mrb_value val[MRB_IV_SEGMENT_SIZE];
+  struct segment *next;
+} segment;
+
+/* Instance variable table structure */
+typedef struct iv_tbl {
+  segment *rootseg;
+  size_t size;
+  size_t last_len;
+} iv_tbl;
+
+/* Creates the instance variable table. */
+static iv_tbl*
+iv_new(mrb_state *mrb)
+{
+  iv_tbl *t;
+
+  t = (iv_tbl*)mrb_malloc(mrb, sizeof(iv_tbl));
+  t->size = 0;
+  t->rootseg =  NULL;
+  t->last_len = 0;
+
+  return t;
+}
+
+/* Set the value for the symbol in the instance variable table. */
+static void
+iv_put(mrb_state *mrb, iv_tbl *t, mrb_sym sym, mrb_value val)
+{
+  segment *seg;
+  segment *prev = NULL;
+  segment *matched_seg = NULL;
+  size_t matched_idx = 0;
+  size_t i;
+
+  if (t == NULL) return;
+  seg = t->rootseg;
+  while (seg) {
+    for (i=0; i<MRB_IV_SEGMENT_SIZE; i++) {
+      mrb_sym key = seg->key[i];
+      /* Found room in last segment after last_len */
+      if (!seg->next && i >= t->last_len) {
+        seg->key[i] = sym;
+        seg->val[i] = val;
+        t->last_len = i+1;
+        t->size++;
+        return;
+      }
+      if (!matched_seg && key == 0) {
+        matched_seg = seg;
+        matched_idx = i;
+      }
+      else if (key == sym) {
+        seg->val[i] = val;
+        return;
+      }
+    }
+    prev = seg;
+    seg = seg->next;
+  }
+
+  /* Not found */
+  if (matched_seg) {
+    matched_seg->key[matched_idx] = sym;
+    matched_seg->val[matched_idx] = val;
+    t->size++;
+    return;
+  }
+
+  seg = (segment*)mrb_malloc(mrb, sizeof(segment));
+  seg->next = NULL;
+  seg->key[0] = sym;
+  seg->val[0] = val;
+  t->last_len = 1;
+  t->size++;
+  if (prev) {
+    prev->next = seg;
+  }
+  else {
+    t->rootseg = seg;
+  }
+}
+
+/* Get a value for a symbol from the instance variable table. */
+static mrb_bool
+iv_get(mrb_state *mrb, iv_tbl *t, mrb_sym sym, mrb_value *vp)
+{
+  segment *seg;
+  size_t i;
+
+  if (t == NULL) return FALSE;
+  seg = t->rootseg;
+  while (seg) {
+    for (i=0; i<MRB_IV_SEGMENT_SIZE; i++) {
+      mrb_sym key = seg->key[i];
+
+      if (!seg->next && i >= t->last_len) {
+        return FALSE;
+      }
+      if (key == sym) {
+        if (vp) *vp = seg->val[i];
+        return TRUE;
+      }
+    }
+    seg = seg->next;
+  }
+  return FALSE;
+}
+
+/* Deletes the value for the symbol from the instance variable table. */
+static mrb_bool
+iv_del(mrb_state *mrb, iv_tbl *t, mrb_sym sym, mrb_value *vp)
+{
+  segment *seg;
+  size_t i;
+
+  if (t == NULL) return FALSE;
+  seg = t->rootseg;
+  while (seg) {
+    for (i=0; i<MRB_IV_SEGMENT_SIZE; i++) {
+      mrb_sym key = seg->key[i];
+
+      if (!seg->next && i >= t->last_len) {
+        return FALSE;
+      }
+      if (key == sym) {
+        t->size--;
+        seg->key[i] = 0;
+        if (vp) *vp = seg->val[i];
+        return TRUE;
+      }
+    }
+    seg = seg->next;
+  }
+  return FALSE;
+}
+
+/* Iterates over the instance variable table. */
+static void
+iv_foreach(mrb_state *mrb, iv_tbl *t, mrb_iv_foreach_func *func, void *p)
+{
+  segment *seg;
+  size_t i;
+
+  if (t == NULL) return;
+  seg = t->rootseg;
+  while (seg) {
+    for (i=0; i<MRB_IV_SEGMENT_SIZE; i++) {
+      mrb_sym key = seg->key[i];
+
+      /* no value in last segment after last_len */
+      if (!seg->next && i >= t->last_len) {
+        return;
+      }
+      if (key != 0) {
+        if ((*func)(mrb, key, seg->val[i], p) != 0) {
+          return;
+        }
+      }
+    }
+    seg = seg->next;
+  }
+  return;
+}
+
+/* Get the size of the instance variable table. */
+static size_t
+iv_size(mrb_state *mrb, iv_tbl *t)
+{
+  segment *seg;
+  size_t size = 0;
+
+  if (t == NULL) return 0;
+  if (t->size > 0) return t->size;
+  seg = t->rootseg;
+  while (seg) {
+    if (seg->next == NULL) {
+      size += t->last_len;
+      return size;
+    }
+    seg = seg->next;
+    size += MRB_IV_SEGMENT_SIZE;
+  }
+  /* empty iv_tbl */
+  return 0;
+}
+
+/* Copy the instance variable table. */
+static iv_tbl*
+iv_copy(mrb_state *mrb, iv_tbl *t)
+{
+  segment *seg;
+  iv_tbl *t2;
+
+  size_t i;
+
+  seg = t->rootseg;
+  t2 = iv_new(mrb);
+
+  while (seg != NULL) {
+    for (i=0; i<MRB_IV_SEGMENT_SIZE; i++) {
+      mrb_sym key = seg->key[i];
+      mrb_value val = seg->val[i];
+
+      if ((seg->next == NULL) && (i >= t->last_len)) {
+        return t2;
+      }
+      iv_put(mrb, t2, key, val);
+    }
+    seg = seg->next;
+  }
+  return t2;
+}
+
+/* Free memory of the instance variable table. */
+static void
+iv_free(mrb_state *mrb, iv_tbl *t)
+{
+  segment *seg;
+
+  seg = t->rootseg;
+  while (seg) {
+    segment *p = seg;
+    seg = seg->next;
+    mrb_free(mrb, p);
+  }
+  mrb_free(mrb, t);
+}
+
+static int
+iv_mark_i(mrb_state *mrb, mrb_sym sym, mrb_value v, void *p)
+{
+  mrb_gc_mark_value(mrb, v);
+  return 0;
+}
+
+static void
+mark_tbl(mrb_state *mrb, iv_tbl *t)
+{
+  iv_foreach(mrb, t, iv_mark_i, 0);
+}
+
+void
+mrb_gc_mark_gv(mrb_state *mrb)
+{
+  mark_tbl(mrb, mrb->globals);
+}
+
+void
+mrb_gc_free_gv(mrb_state *mrb)
+{
+  if (mrb->globals)
+    iv_free(mrb, mrb->globals);
+}
+
+void
+mrb_gc_mark_iv(mrb_state *mrb, struct RObject *obj)
+{
+  mark_tbl(mrb, obj->iv);
+}
+
+size_t
+mrb_gc_mark_iv_size(mrb_state *mrb, struct RObject *obj)
+{
+  return iv_size(mrb, obj->iv);
+}
+
+void
+mrb_gc_free_iv(mrb_state *mrb, struct RObject *obj)
+{
+  if (obj->iv) {
+    iv_free(mrb, obj->iv);
+  }
+}
+
+mrb_value
+mrb_vm_special_get(mrb_state *mrb, mrb_sym i)
+{
+  return mrb_fixnum_value(0);
+}
+
+void
+mrb_vm_special_set(mrb_state *mrb, mrb_sym i, mrb_value v)
+{
+}
+
+static mrb_bool
+obj_iv_p(mrb_value obj)
+{
+  switch (mrb_type(obj)) {
+    case MRB_TT_OBJECT:
+    case MRB_TT_CLASS:
+    case MRB_TT_MODULE:
+    case MRB_TT_SCLASS:
+    case MRB_TT_HASH:
+    case MRB_TT_DATA:
+    case MRB_TT_EXCEPTION:
+      return TRUE;
+    default:
+      return FALSE;
+  }
+}
+
+MRB_API mrb_value
+mrb_obj_iv_get(mrb_state *mrb, struct RObject *obj, mrb_sym sym)
+{
+  mrb_value v;
+
+  if (obj->iv && iv_get(mrb, obj->iv, sym, &v))
+    return v;
+  return mrb_nil_value();
+}
+
+MRB_API mrb_value
+mrb_iv_get(mrb_state *mrb, mrb_value obj, mrb_sym sym)
+{
+  if (obj_iv_p(obj)) {
+    return mrb_obj_iv_get(mrb, mrb_obj_ptr(obj), sym);
+  }
+  return mrb_nil_value();
+}
+
+static inline void assign_class_name(mrb_state *mrb, struct RObject *obj, mrb_sym sym, mrb_value v);
+
+void
+mrb_obj_iv_set_force(mrb_state *mrb, struct RObject *obj, mrb_sym sym, mrb_value v)
+{
+  assign_class_name(mrb, obj, sym, v);
+  if (!obj->iv) {
+    obj->iv = iv_new(mrb);
+  }
+  iv_put(mrb, obj->iv, sym, v);
+  mrb_write_barrier(mrb, (struct RBasic*)obj);
+}
+
+MRB_API void
+mrb_obj_iv_set(mrb_state *mrb, struct RObject *obj, mrb_sym sym, mrb_value v)
+{
+  mrb_check_frozen(mrb, obj);
+  mrb_obj_iv_set_force(mrb, obj, sym, v);
+}
+
+/* Iterates over the instance variable table. */
+MRB_API void
+mrb_iv_foreach(mrb_state *mrb, mrb_value obj, mrb_iv_foreach_func *func, void *p)
+{
+  if (!obj_iv_p(obj)) return;
+  iv_foreach(mrb, mrb_obj_ptr(obj)->iv, func, p);
+}
+
+static inline mrb_bool
+namespace_p(enum mrb_vtype tt)
+{
+  return tt == MRB_TT_CLASS || tt == MRB_TT_MODULE ? TRUE : FALSE;
+}
+
+static inline void
+assign_class_name(mrb_state *mrb, struct RObject *obj, mrb_sym sym, mrb_value v)
+{
+  if (namespace_p(obj->tt) && namespace_p(mrb_type(v))) {
+    struct RObject *c = mrb_obj_ptr(v);
+    if (obj != c && ISUPPER(mrb_sym_name_len(mrb, sym, NULL)[0])) {
+      mrb_sym id_classname = mrb_intern_lit(mrb, "__classname__");
+      mrb_value o = mrb_obj_iv_get(mrb, c, id_classname);
+
+      if (mrb_nil_p(o)) {
+        mrb_sym id_outer = mrb_intern_lit(mrb, "__outer__");
+        o = mrb_obj_iv_get(mrb, c, id_outer);
+
+        if (mrb_nil_p(o)) {
+          if ((struct RClass *)obj == mrb->object_class) {
+            mrb_obj_iv_set_force(mrb, c, id_classname, mrb_symbol_value(sym));
+          }
+          else {
+            mrb_obj_iv_set_force(mrb, c, id_outer, mrb_obj_value(obj));
+          }
+        }
+      }
+    }
+  }
+}
+
+MRB_API void
+mrb_iv_set(mrb_state *mrb, mrb_value obj, mrb_sym sym, mrb_value v)
+{
+  if (obj_iv_p(obj)) {
+    mrb_obj_iv_set(mrb, mrb_obj_ptr(obj), sym, v);
+  }
+  else {
+    mrb_raise(mrb, E_ARGUMENT_ERROR, "cannot set instance variable");
+  }
+}
+
+MRB_API mrb_bool
+mrb_obj_iv_defined(mrb_state *mrb, struct RObject *obj, mrb_sym sym)
+{
+  iv_tbl *t;
+
+  t = obj->iv;
+  if (t) {
+    return iv_get(mrb, t, sym, NULL);
+  }
+  return FALSE;
+}
+
+MRB_API mrb_bool
+mrb_iv_defined(mrb_state *mrb, mrb_value obj, mrb_sym sym)
+{
+  if (!obj_iv_p(obj)) return FALSE;
+  return mrb_obj_iv_defined(mrb, mrb_obj_ptr(obj), sym);
+}
+
+MRB_API mrb_bool
+mrb_iv_name_sym_p(mrb_state *mrb, mrb_sym iv_name)
+{
+  const char *s;
+  mrb_int len;
+
+  s = mrb_sym_name_len(mrb, iv_name, &len);
+  if (len < 2) return FALSE;
+  if (s[0] != '@') return FALSE;
+  if (ISDIGIT(s[1])) return FALSE;
+  return mrb_ident_p(s+1, len-1);
+}
+
+MRB_API void
+mrb_iv_name_sym_check(mrb_state *mrb, mrb_sym iv_name)
+{
+  if (!mrb_iv_name_sym_p(mrb, iv_name)) {
+    mrb_name_error(mrb, iv_name, "'%n' is not allowed as an instance variable name", iv_name);
+  }
+}
+
+MRB_API void
+mrb_iv_copy(mrb_state *mrb, mrb_value dest, mrb_value src)
+{
+  struct RObject *d = mrb_obj_ptr(dest);
+  struct RObject *s = mrb_obj_ptr(src);
+
+  if (d->iv) {
+    iv_free(mrb, d->iv);
+    d->iv = 0;
+  }
+  if (s->iv) {
+    mrb_write_barrier(mrb, (struct RBasic*)d);
+    d->iv = iv_copy(mrb, s->iv);
+  }
+}
+
+static int
+inspect_i(mrb_state *mrb, mrb_sym sym, mrb_value v, void *p)
+{
+  mrb_value str = *(mrb_value*)p;
+  const char *s;
+  mrb_int len;
+  mrb_value ins;
+  char *sp = RSTRING_PTR(str);
+
+  /* need not to show internal data */
+  if (sp[0] == '-') { /* first element */
+    sp[0] = '#';
+    mrb_str_cat_lit(mrb, str, " ");
+  }
+  else {
+    mrb_str_cat_lit(mrb, str, ", ");
+  }
+  s = mrb_sym_name_len(mrb, sym, &len);
+  mrb_str_cat(mrb, str, s, len);
+  mrb_str_cat_lit(mrb, str, "=");
+  if (mrb_object_p(v)) {
+    ins = mrb_any_to_s(mrb, v);
+  }
+  else {
+    ins = mrb_inspect(mrb, v);
+  }
+  mrb_str_cat_str(mrb, str, ins);
+  return 0;
+}
+
+mrb_value
+mrb_obj_iv_inspect(mrb_state *mrb, struct RObject *obj)
+{
+  iv_tbl *t = obj->iv;
+  size_t len = iv_size(mrb, t);
+
+  if (len > 0) {
+    const char *cn = mrb_obj_classname(mrb, mrb_obj_value(obj));
+    mrb_value str = mrb_str_new_capa(mrb, 30);
+
+    mrb_str_cat_lit(mrb, str, "-<");
+    mrb_str_cat_cstr(mrb, str, cn);
+    mrb_str_cat_lit(mrb, str, ":");
+    mrb_str_cat_str(mrb, str, mrb_ptr_to_str(mrb, obj));
+
+    iv_foreach(mrb, t, inspect_i, &str);
+    mrb_str_cat_lit(mrb, str, ">");
+    return str;
+  }
+  return mrb_any_to_s(mrb, mrb_obj_value(obj));
+}
+
+MRB_API mrb_value
+mrb_iv_remove(mrb_state *mrb, mrb_value obj, mrb_sym sym)
+{
+  if (obj_iv_p(obj)) {
+    iv_tbl *t = mrb_obj_ptr(obj)->iv;
+    mrb_value val;
+
+    mrb_check_frozen(mrb, mrb_obj_ptr(obj));
+    if (iv_del(mrb, t, sym, &val)) {
+      return val;
+    }
+  }
+  return mrb_undef_value();
+}
+
+static int
+iv_i(mrb_state *mrb, mrb_sym sym, mrb_value v, void *p)
+{
+  mrb_value ary;
+  const char* s;
+  mrb_int len;
+
+  ary = *(mrb_value*)p;
+  s = mrb_sym_name_len(mrb, sym, &len);
+  if (len > 1 && s[0] == '@' && s[1] != '@') {
+    mrb_ary_push(mrb, ary, mrb_symbol_value(sym));
+  }
+  return 0;
+}
+
+/* 15.3.1.3.23 */
+/*
+ *  call-seq:
+ *     obj.instance_variables    -> array
+ *
+ *  Returns an array of instance variable names for the receiver. Note
+ *  that simply defining an accessor does not create the corresponding
+ *  instance variable.
+ *
+ *     class Fred
+ *       attr_accessor :a1
+ *       def initialize
+ *         @iv = 3
+ *       end
+ *     end
+ *     Fred.new.instance_variables   #=> [:@iv]
+ */
+mrb_value
+mrb_obj_instance_variables(mrb_state *mrb, mrb_value self)
+{
+  mrb_value ary;
+
+  ary = mrb_ary_new(mrb);
+  if (obj_iv_p(self)) {
+    iv_foreach(mrb, mrb_obj_ptr(self)->iv, iv_i, &ary);
+  }
+  return ary;
+}
+
+static int
+cv_i(mrb_state *mrb, mrb_sym sym, mrb_value v, void *p)
+{
+  mrb_value ary;
+  const char* s;
+  mrb_int len;
+
+  ary = *(mrb_value*)p;
+  s = mrb_sym_name_len(mrb, sym, &len);
+  if (len > 2 && s[0] == '@' && s[1] == '@') {
+    mrb_ary_push(mrb, ary, mrb_symbol_value(sym));
+  }
+  return 0;
+}
+
+/* 15.2.2.4.19 */
+/*
+ *  call-seq:
+ *     mod.class_variables(inherit=true)   -> array
+ *
+ *  Returns an array of the names of class variables in <i>mod</i>.
+ *
+ *     class One
+ *       @@var1 = 1
+ *     end
+ *     class Two < One
+ *       @@var2 = 2
+ *     end
+ *     One.class_variables   #=> [:@@var1]
+ *     Two.class_variables   #=> [:@@var2]
+ */
+mrb_value
+mrb_mod_class_variables(mrb_state *mrb, mrb_value mod)
+{
+  mrb_value ary;
+  struct RClass *c;
+  mrb_bool inherit = TRUE;
+
+  mrb_get_args(mrb, "|b", &inherit);
+  ary = mrb_ary_new(mrb);
+  c = mrb_class_ptr(mod);
+  while (c) {
+    iv_foreach(mrb, c->iv, cv_i, &ary);
+    if (!inherit) break;
+    c = c->super;
+  }
+  return ary;
+}
+
+mrb_value
+mrb_mod_cv_get(mrb_state *mrb, struct RClass *c, mrb_sym sym)
+{
+  struct RClass * cls = c;
+  mrb_value v;
+  int given = FALSE;
+
+  while (c) {
+    if (c->iv && iv_get(mrb, c->iv, sym, &v)) {
+      given = TRUE;
+    }
+    c = c->super;
+  }
+  if (given) return v;
+  if (cls && cls->tt == MRB_TT_SCLASS) {
+    mrb_value klass;
+
+    klass = mrb_obj_iv_get(mrb, (struct RObject *)cls,
+                           mrb_intern_lit(mrb, "__attached__"));
+    c = mrb_class_ptr(klass);
+    if (c->tt == MRB_TT_CLASS || c->tt == MRB_TT_MODULE) {
+      given = FALSE;
+      while (c) {
+        if (c->iv && iv_get(mrb, c->iv, sym, &v)) {
+          given = TRUE;
+        }
+        c = c->super;
+      }
+      if (given) return v;
+    }
+  }
+  mrb_name_error(mrb, sym, "uninitialized class variable %n in %C", sym, cls);
+  /* not reached */
+  return mrb_nil_value();
+}
+
+MRB_API mrb_value
+mrb_cv_get(mrb_state *mrb, mrb_value mod, mrb_sym sym)
+{
+  return mrb_mod_cv_get(mrb, mrb_class_ptr(mod), sym);
+}
+
+MRB_API void
+mrb_mod_cv_set(mrb_state *mrb, struct RClass *c, mrb_sym sym, mrb_value v)
+{
+  struct RClass * cls = c;
+
+  while (c) {
+    iv_tbl *t = c->iv;
+
+    if (iv_get(mrb, t, sym, NULL)) {
+      mrb_check_frozen(mrb, c);
+      iv_put(mrb, t, sym, v);
+      mrb_write_barrier(mrb, (struct RBasic*)c);
+      return;
+    }
+    c = c->super;
+  }
+
+  if (cls && cls->tt == MRB_TT_SCLASS) {
+    mrb_value klass;
+
+    klass = mrb_obj_iv_get(mrb, (struct RObject*)cls,
+                           mrb_intern_lit(mrb, "__attached__"));
+    switch (mrb_type(klass)) {
+    case MRB_TT_CLASS:
+    case MRB_TT_MODULE:
+    case MRB_TT_SCLASS:
+      c = mrb_class_ptr(klass);
+      break;
+    default:
+      c = cls;
+      break;
+    }
+  }
+  else{
+    c = cls;
+  }
+
+  mrb_check_frozen(mrb, c);
+  if (!c->iv) {
+    c->iv = iv_new(mrb);
+  }
+
+  iv_put(mrb, c->iv, sym, v);
+  mrb_write_barrier(mrb, (struct RBasic*)c);
+}
+
+MRB_API void
+mrb_cv_set(mrb_state *mrb, mrb_value mod, mrb_sym sym, mrb_value v)
+{
+  mrb_mod_cv_set(mrb, mrb_class_ptr(mod), sym, v);
+}
+
+mrb_bool
+mrb_mod_cv_defined(mrb_state *mrb, struct RClass * c, mrb_sym sym)
+{
+  while (c) {
+    iv_tbl *t = c->iv;
+    if (iv_get(mrb, t, sym, NULL)) return TRUE;
+    c = c->super;
+  }
+
+  return FALSE;
+}
+
+MRB_API mrb_bool
+mrb_cv_defined(mrb_state *mrb, mrb_value mod, mrb_sym sym)
+{
+  return mrb_mod_cv_defined(mrb, mrb_class_ptr(mod), sym);
+}
+
+mrb_value
+mrb_vm_cv_get(mrb_state *mrb, mrb_sym sym)
+{
+  struct RClass *c;
+
+  struct RProc *p = mrb->c->ci->proc;
+
+  for (;;) {
+    c = MRB_PROC_TARGET_CLASS(p);
+    if (c->tt != MRB_TT_SCLASS) break;
+    p = p->upper;
+  }
+  return mrb_mod_cv_get(mrb, c, sym);
+}
+
+void
+mrb_vm_cv_set(mrb_state *mrb, mrb_sym sym, mrb_value v)
+{
+  struct RClass *c;
+  struct RProc *p = mrb->c->ci->proc;
+
+  for (;;) {
+    c = MRB_PROC_TARGET_CLASS(p);
+    if (c->tt != MRB_TT_SCLASS) break;
+    p = p->upper;
+  }
+  mrb_mod_cv_set(mrb, c, sym, v);
+}
+
+static void
+mod_const_check(mrb_state *mrb, mrb_value mod)
+{
+  switch (mrb_type(mod)) {
+  case MRB_TT_CLASS:
+  case MRB_TT_MODULE:
+  case MRB_TT_SCLASS:
+    break;
+  default:
+    mrb_raise(mrb, E_TYPE_ERROR, "constant look-up for non class/module");
+    break;
+  }
+}
+
+static mrb_value
+const_get(mrb_state *mrb, struct RClass *base, mrb_sym sym)
+{
+  struct RClass *c = base;
+  mrb_value v;
+  mrb_bool retry = FALSE;
+  mrb_value name;
+
+L_RETRY:
+  while (c) {
+    if (c->iv) {
+      if (iv_get(mrb, c->iv, sym, &v))
+        return v;
+    }
+    c = c->super;
+  }
+  if (!retry && base->tt == MRB_TT_MODULE) {
+    c = mrb->object_class;
+    retry = TRUE;
+    goto L_RETRY;
+  }
+  name = mrb_symbol_value(sym);
+  return mrb_funcall_argv(mrb, mrb_obj_value(base), mrb_intern_lit(mrb, "const_missing"), 1, &name);
+}
+
+MRB_API mrb_value
+mrb_const_get(mrb_state *mrb, mrb_value mod, mrb_sym sym)
+{
+  mod_const_check(mrb, mod);
+  return const_get(mrb, mrb_class_ptr(mod), sym);
+}
+
+mrb_value
+mrb_vm_const_get(mrb_state *mrb, mrb_sym sym)
+{
+  struct RClass *c;
+  struct RClass *c2;
+  mrb_value v;
+  struct RProc *proc;
+
+  c = MRB_PROC_TARGET_CLASS(mrb->c->ci->proc);
+  if (iv_get(mrb, c->iv, sym, &v)) {
+    return v;
+  }
+  c2 = c;
+  while (c2 && c2->tt == MRB_TT_SCLASS) {
+    mrb_value klass;
+
+    if (!iv_get(mrb, c2->iv, mrb_intern_lit(mrb, "__attached__"), &klass)) {
+      c2 = NULL;
+      break;
+    }
+    c2 = mrb_class_ptr(klass);
+  }
+  if (c2 && (c2->tt == MRB_TT_CLASS || c2->tt == MRB_TT_MODULE)) c = c2;
+  mrb_assert(!MRB_PROC_CFUNC_P(mrb->c->ci->proc));
+  proc = mrb->c->ci->proc;
+  while (proc) {
+    c2 = MRB_PROC_TARGET_CLASS(proc);
+    if (c2 && iv_get(mrb, c2->iv, sym, &v)) {
+      return v;
+    }
+    proc = proc->upper;
+  }
+  return const_get(mrb, c, sym);
+}
+
+MRB_API void
+mrb_const_set(mrb_state *mrb, mrb_value mod, mrb_sym sym, mrb_value v)
+{
+  mod_const_check(mrb, mod);
+  if (mrb_type(v) == MRB_TT_CLASS || mrb_type(v) == MRB_TT_MODULE) {
+    mrb_class_name_class(mrb, mrb_class_ptr(mod), mrb_class_ptr(v), sym);
+  }
+  mrb_iv_set(mrb, mod, sym, v);
+}
+
+void
+mrb_vm_const_set(mrb_state *mrb, mrb_sym sym, mrb_value v)
+{
+  struct RClass *c;
+
+  c = MRB_PROC_TARGET_CLASS(mrb->c->ci->proc);
+  mrb_obj_iv_set(mrb, (struct RObject*)c, sym, v);
+}
+
+MRB_API void
+mrb_const_remove(mrb_state *mrb, mrb_value mod, mrb_sym sym)
+{
+  mod_const_check(mrb, mod);
+  mrb_iv_remove(mrb, mod, sym);
+}
+
+MRB_API void
+mrb_define_const(mrb_state *mrb, struct RClass *mod, const char *name, mrb_value v)
+{
+  mrb_obj_iv_set(mrb, (struct RObject*)mod, mrb_intern_cstr(mrb, name), v);
+}
+
+MRB_API void
+mrb_define_global_const(mrb_state *mrb, const char *name, mrb_value val)
+{
+  mrb_define_const(mrb, mrb->object_class, name, val);
+}
+
+static int
+const_i(mrb_state *mrb, mrb_sym sym, mrb_value v, void *p)
+{
+  mrb_value ary;
+  const char* s;
+  mrb_int len;
+
+  ary = *(mrb_value*)p;
+  s = mrb_sym_name_len(mrb, sym, &len);
+  if (len >= 1 && ISUPPER(s[0])) {
+    mrb_int i, alen = RARRAY_LEN(ary);
+
+    for (i=0; i<alen; i++) {
+      if (mrb_symbol(RARRAY_PTR(ary)[i]) == sym)
+        break;
+    }
+    if (i==alen) {
+      mrb_ary_push(mrb, ary, mrb_symbol_value(sym));
+    }
+  }
+  return 0;
+}
+
+/* 15.2.2.4.24 */
+/*
+ *  call-seq:
+ *     mod.constants    -> array
+ *
+ *  Returns an array of all names of contants defined in the receiver.
+ */
+mrb_value
+mrb_mod_constants(mrb_state *mrb, mrb_value mod)
+{
+  mrb_value ary;
+  mrb_bool inherit = TRUE;
+  struct RClass *c = mrb_class_ptr(mod);
+
+  mrb_get_args(mrb, "|b", &inherit);
+  ary = mrb_ary_new(mrb);
+  while (c) {
+    iv_foreach(mrb, c->iv, const_i, &ary);
+    if (!inherit) break;
+    c = c->super;
+    if (c == mrb->object_class) break;
+  }
+  return ary;
+}
+
+MRB_API mrb_value
+mrb_gv_get(mrb_state *mrb, mrb_sym sym)
+{
+  mrb_value v;
+
+  if (iv_get(mrb, mrb->globals, sym, &v))
+    return v;
+  return mrb_nil_value();
+}
+
+MRB_API void
+mrb_gv_set(mrb_state *mrb, mrb_sym sym, mrb_value v)
+{
+  iv_tbl *t;
+
+  if (!mrb->globals) {
+    mrb->globals = iv_new(mrb);
+  }
+  t = mrb->globals;
+  iv_put(mrb, t, sym, v);
+}
+
+MRB_API void
+mrb_gv_remove(mrb_state *mrb, mrb_sym sym)
+{
+  iv_del(mrb, mrb->globals, sym, NULL);
+}
+
+static int
+gv_i(mrb_state *mrb, mrb_sym sym, mrb_value v, void *p)
+{
+  mrb_value ary;
+
+  ary = *(mrb_value*)p;
+  mrb_ary_push(mrb, ary, mrb_symbol_value(sym));
+  return 0;
+}
+
+/* 15.3.1.2.4  */
+/* 15.3.1.3.14 */
+/*
+ *  call-seq:
+ *     global_variables    -> array
+ *
+ *  Returns an array of the names of global variables.
+ *
+ *     global_variables.grep /std/   #=> [:$stdin, :$stdout, :$stderr]
+ */
+mrb_value
+mrb_f_global_variables(mrb_state *mrb, mrb_value self)
+{
+  iv_tbl *t = mrb->globals;
+  mrb_value ary = mrb_ary_new(mrb);
+
+  iv_foreach(mrb, t, gv_i, &ary);
+  return ary;
+}
+
+static mrb_bool
+mrb_const_defined_0(mrb_state *mrb, mrb_value mod, mrb_sym id, mrb_bool exclude, mrb_bool recurse)
+{
+  struct RClass *klass = mrb_class_ptr(mod);
+  struct RClass *tmp;
+  mrb_bool mod_retry = FALSE;
+
+  tmp = klass;
+retry:
+  while (tmp) {
+    if (iv_get(mrb, tmp->iv, id, NULL)) {
+      return TRUE;
+    }
+    if (!recurse && (klass != mrb->object_class)) break;
+    tmp = tmp->super;
+  }
+  if (!exclude && !mod_retry && (klass->tt == MRB_TT_MODULE)) {
+    mod_retry = TRUE;
+    tmp = mrb->object_class;
+    goto retry;
+  }
+  return FALSE;
+}
+
+MRB_API mrb_bool
+mrb_const_defined(mrb_state *mrb, mrb_value mod, mrb_sym id)
+{
+  return mrb_const_defined_0(mrb, mod, id, TRUE, TRUE);
+}
+
+MRB_API mrb_bool
+mrb_const_defined_at(mrb_state *mrb, mrb_value mod, mrb_sym id)
+{
+  return mrb_const_defined_0(mrb, mod, id, TRUE, FALSE);
+}
+
+MRB_API mrb_value
+mrb_attr_get(mrb_state *mrb, mrb_value obj, mrb_sym id)
+{
+  return mrb_iv_get(mrb, obj, id);
+}
+
+struct csym_arg {
+  struct RClass *c;
+  mrb_sym sym;
+};
+
+static int
+csym_i(mrb_state *mrb, mrb_sym sym, mrb_value v, void *p)
+{
+  struct csym_arg *a = (struct csym_arg*)p;
+  struct RClass *c = a->c;
+
+  if (mrb_type(v) == c->tt && mrb_class_ptr(v) == c) {
+    a->sym = sym;
+    return 1;     /* stop iteration */
+  }
+  return 0;
+}
+
+static mrb_sym
+find_class_sym(mrb_state *mrb, struct RClass *outer, struct RClass *c)
+{
+  struct csym_arg arg;
+
+  if (!outer) return 0;
+  if (outer == c) return 0;
+  arg.c = c;
+  arg.sym = 0;
+  iv_foreach(mrb, outer->iv, csym_i, &arg);
+  return arg.sym;
+}
+
+static struct RClass*
+outer_class(mrb_state *mrb, struct RClass *c)
+{
+  mrb_value ov;
+
+  ov = mrb_obj_iv_get(mrb, (struct RObject*)c, mrb_intern_lit(mrb, "__outer__"));
+  if (mrb_nil_p(ov)) return NULL;
+  switch (mrb_type(ov)) {
+  case MRB_TT_CLASS:
+  case MRB_TT_MODULE:
+    return mrb_class_ptr(ov);
+  default:
+    break;
+  }
+  return NULL;
+}
+
+static mrb_bool
+detect_outer_loop(mrb_state *mrb, struct RClass *c)
+{
+  struct RClass *t = c;         /* tortoise */
+  struct RClass *h = c;         /* hare */
+
+  for (;;) {
+    if (h == NULL) return FALSE;
+    h = outer_class(mrb, h);
+    if (h == NULL) return FALSE;
+    h = outer_class(mrb, h);
+    t = outer_class(mrb, t);
+    if (t == h) return TRUE;
+  }
+}
+
+mrb_value
+mrb_class_find_path(mrb_state *mrb, struct RClass *c)
+{
+  struct RClass *outer;
+  mrb_value path;
+  mrb_sym name;
+  const char *str;
+  mrb_int len;
+
+  if (detect_outer_loop(mrb, c)) return mrb_nil_value();
+  outer = outer_class(mrb, c);
+  if (outer == NULL) return mrb_nil_value();
+  name = find_class_sym(mrb, outer, c);
+  if (name == 0) return mrb_nil_value();
+  str = mrb_class_name(mrb, outer);
+  path = mrb_str_new_capa(mrb, 40);
+  mrb_str_cat_cstr(mrb, path, str);
+  mrb_str_cat_cstr(mrb, path, "::");
+
+  str = mrb_sym_name_len(mrb, name, &len);
+  mrb_str_cat(mrb, path, str, len);
+  if (RSTRING_PTR(path)[0] != '#') {
+    iv_del(mrb, c->iv, mrb_intern_lit(mrb, "__outer__"), NULL);
+    iv_put(mrb, c->iv, mrb_intern_lit(mrb, "__classname__"), path);
+    mrb_field_write_barrier_value(mrb, (struct RBasic*)c, path);
+    path = mrb_str_dup(mrb, path);
+  }
+  return path;
+}
+
+#define identchar(c) (ISALNUM(c) || (c) == '_' || !ISASCII(c))
+
+mrb_bool
+mrb_ident_p(const char *s, mrb_int len)
+{
+  mrb_int i;
+
+  for (i = 0; i < len; i++) {
+    if (!identchar(s[i])) return FALSE;
+  }
+  return TRUE;
+}
Index: /EcnlProtoTool/trunk/mruby-2.1.1/src/version.c
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/src/version.c	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/src/version.c	(revision 439)
@@ -0,0 +1,17 @@
+#include <mruby.h>
+#include <mruby/variable.h>
+
+void
+mrb_init_version(mrb_state* mrb)
+{
+  mrb_value mruby_version = mrb_str_new_lit(mrb, MRUBY_VERSION);
+
+  mrb_define_global_const(mrb, "RUBY_VERSION", mrb_str_new_lit(mrb, MRUBY_RUBY_VERSION));
+  mrb_define_global_const(mrb, "RUBY_ENGINE", mrb_str_new_lit(mrb, MRUBY_RUBY_ENGINE));
+  mrb_define_global_const(mrb, "RUBY_ENGINE_VERSION", mruby_version);
+  mrb_define_global_const(mrb, "MRUBY_VERSION", mruby_version);
+  mrb_define_global_const(mrb, "MRUBY_RELEASE_NO", mrb_fixnum_value(MRUBY_RELEASE_NO));
+  mrb_define_global_const(mrb, "MRUBY_RELEASE_DATE", mrb_str_new_lit(mrb, MRUBY_RELEASE_DATE));
+  mrb_define_global_const(mrb, "MRUBY_DESCRIPTION", mrb_str_new_lit(mrb, MRUBY_DESCRIPTION));
+  mrb_define_global_const(mrb, "MRUBY_COPYRIGHT", mrb_str_new_lit(mrb, MRUBY_COPYRIGHT));
+}
Index: /EcnlProtoTool/trunk/mruby-2.1.1/src/vm.c
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/src/vm.c	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/src/vm.c	(revision 439)
@@ -0,0 +1,2869 @@
+/*
+** vm.c - virtual machine for mruby
+**
+** See Copyright Notice in mruby.h
+*/
+
+#include <stddef.h>
+#include <stdarg.h>
+#ifndef MRB_WITHOUT_FLOAT
+#include <math.h>
+#endif
+#include <mruby.h>
+#include <mruby/array.h>
+#include <mruby/class.h>
+#include <mruby/hash.h>
+#include <mruby/irep.h>
+#include <mruby/numeric.h>
+#include <mruby/proc.h>
+#include <mruby/range.h>
+#include <mruby/string.h>
+#include <mruby/variable.h>
+#include <mruby/error.h>
+#include <mruby/opcode.h>
+#include "value_array.h"
+#include <mruby/throw.h>
+
+#ifdef MRB_DISABLE_STDIO
+#if defined(__cplusplus)
+extern "C" {
+#endif
+void abort(void);
+#if defined(__cplusplus)
+}  /* extern "C" { */
+#endif
+#endif
+
+#define STACK_INIT_SIZE 128
+#define CALLINFO_INIT_SIZE 32
+
+#ifndef ENSURE_STACK_INIT_SIZE
+#define ENSURE_STACK_INIT_SIZE 16
+#endif
+
+#ifndef RESCUE_STACK_INIT_SIZE
+#define RESCUE_STACK_INIT_SIZE 16
+#endif
+
+/* Define amount of linear stack growth. */
+#ifndef MRB_STACK_GROWTH
+#define MRB_STACK_GROWTH 128
+#endif
+
+/* Maximum mrb_funcall() depth. Should be set lower on memory constrained systems. */
+#ifndef MRB_FUNCALL_DEPTH_MAX
+#define MRB_FUNCALL_DEPTH_MAX 512
+#endif
+
+/* Maximum depth of ecall() recursion. */
+#ifndef MRB_ECALL_DEPTH_MAX
+#define MRB_ECALL_DEPTH_MAX 512
+#endif
+
+/* Maximum stack depth. Should be set lower on memory constrained systems.
+The value below allows about 60000 recursive calls in the simplest case. */
+#ifndef MRB_STACK_MAX
+#define MRB_STACK_MAX (0x40000 - MRB_STACK_GROWTH)
+#endif
+
+#ifdef VM_DEBUG
+# define DEBUG(x) (x)
+#else
+# define DEBUG(x)
+#endif
+
+
+#ifndef MRB_GC_FIXED_ARENA
+static void
+mrb_gc_arena_shrink(mrb_state *mrb, int idx)
+{
+  mrb_gc *gc = &mrb->gc;
+  int capa = gc->arena_capa;
+
+  if (idx < capa / 4) {
+    capa >>= 2;
+    if (capa < MRB_GC_ARENA_SIZE) {
+      capa = MRB_GC_ARENA_SIZE;
+    }
+    if (capa != gc->arena_capa) {
+      gc->arena = (struct RBasic**)mrb_realloc(mrb, gc->arena, sizeof(struct RBasic*)*capa);
+      gc->arena_capa = capa;
+    }
+  }
+}
+#else
+#define mrb_gc_arena_shrink(mrb,idx)
+#endif
+
+#define CALL_MAXARGS 127
+
+void mrb_method_missing(mrb_state *mrb, mrb_sym name, mrb_value self, mrb_value args);
+
+static inline void
+stack_clear(mrb_value *from, size_t count)
+{
+#ifndef MRB_NAN_BOXING
+  const mrb_value mrb_value_zero = { { 0 } };
+
+  while (count-- > 0) {
+    *from++ = mrb_value_zero;
+  }
+#else
+  while (count-- > 0) {
+    SET_NIL_VALUE(*from);
+    from++;
+  }
+#endif
+}
+
+static inline void
+stack_copy(mrb_value *dst, const mrb_value *src, size_t size)
+{
+  while (size-- > 0) {
+    *dst++ = *src++;
+  }
+}
+
+static void
+stack_init(mrb_state *mrb)
+{
+  struct mrb_context *c = mrb->c;
+
+  /* mrb_assert(mrb->stack == NULL); */
+  c->stbase = (mrb_value *)mrb_calloc(mrb, STACK_INIT_SIZE, sizeof(mrb_value));
+  c->stend = c->stbase + STACK_INIT_SIZE;
+  c->stack = c->stbase;
+
+  /* mrb_assert(ci == NULL); */
+  c->cibase = (mrb_callinfo *)mrb_calloc(mrb, CALLINFO_INIT_SIZE, sizeof(mrb_callinfo));
+  c->ciend = c->cibase + CALLINFO_INIT_SIZE;
+  c->ci = c->cibase;
+  c->ci->target_class = mrb->object_class;
+  c->ci->stackent = c->stack;
+}
+
+static inline void
+envadjust(mrb_state *mrb, mrb_value *oldbase, mrb_value *newbase, size_t oldsize)
+{
+  mrb_callinfo *ci = mrb->c->cibase;
+
+  if (newbase == oldbase) return;
+  while (ci <= mrb->c->ci) {
+    struct REnv *e = ci->env;
+    mrb_value *st;
+
+    if (e && MRB_ENV_STACK_SHARED_P(e) &&
+        (st = e->stack) && oldbase <= st && st < oldbase+oldsize) {
+      ptrdiff_t off = e->stack - oldbase;
+
+      e->stack = newbase + off;
+    }
+
+    if (ci->proc && MRB_PROC_ENV_P(ci->proc) && ci->env != MRB_PROC_ENV(ci->proc)) {
+      e = MRB_PROC_ENV(ci->proc);
+
+      if (e && MRB_ENV_STACK_SHARED_P(e) &&
+          (st = e->stack) && oldbase <= st && st < oldbase+oldsize) {
+        ptrdiff_t off = e->stack - oldbase;
+
+        e->stack = newbase + off;
+      }
+    }
+
+    ci->stackent = newbase + (ci->stackent - oldbase);
+    ci++;
+  }
+}
+
+/** def rec ; $deep =+ 1 ; if $deep > 1000 ; return 0 ; end ; rec ; end  */
+
+static void
+stack_extend_alloc(mrb_state *mrb, mrb_int room)
+{
+  mrb_value *oldbase = mrb->c->stbase;
+  mrb_value *newstack;
+  size_t oldsize = mrb->c->stend - mrb->c->stbase;
+  size_t size = oldsize;
+  size_t off = mrb->c->stack - mrb->c->stbase;
+
+  if (off > size) size = off;
+#ifdef MRB_STACK_EXTEND_DOUBLING
+  if ((size_t)room <= size)
+    size *= 2;
+  else
+    size += room;
+#else
+  /* Use linear stack growth.
+     It is slightly slower than doubling the stack space,
+     but it saves memory on small devices. */
+  if (room <= MRB_STACK_GROWTH)
+    size += MRB_STACK_GROWTH;
+  else
+    size += room;
+#endif
+
+  newstack = (mrb_value *)mrb_realloc(mrb, mrb->c->stbase, sizeof(mrb_value) * size);
+  if (newstack == NULL) {
+    mrb_exc_raise(mrb, mrb_obj_value(mrb->stack_err));
+  }
+  stack_clear(&(newstack[oldsize]), size - oldsize);
+  envadjust(mrb, oldbase, newstack, oldsize);
+  mrb->c->stbase = newstack;
+  mrb->c->stack = mrb->c->stbase + off;
+  mrb->c->stend = mrb->c->stbase + size;
+
+  /* Raise an exception if the new stack size will be too large,
+     to prevent infinite recursion. However, do this only after resizing the stack, so mrb_raise has stack space to work with. */
+  if (size > MRB_STACK_MAX) {
+    mrb_exc_raise(mrb, mrb_obj_value(mrb->stack_err));
+  }
+}
+
+MRB_API void
+mrb_stack_extend(mrb_state *mrb, mrb_int room)
+{
+  if (mrb->c->stack + room >= mrb->c->stend) {
+    stack_extend_alloc(mrb, room);
+  }
+}
+
+static inline struct REnv*
+uvenv(mrb_state *mrb, int up)
+{
+  struct RProc *proc = mrb->c->ci->proc;
+  struct REnv *e;
+
+  while (up--) {
+    proc = proc->upper;
+    if (!proc) return NULL;
+  }
+  e = MRB_PROC_ENV(proc);
+  if (e) return e;              /* proc has enclosed env */
+  else {
+    mrb_callinfo *ci = mrb->c->ci;
+    mrb_callinfo *cb = mrb->c->cibase;
+
+    while (cb <= ci) {
+      if (ci->proc == proc) {
+        return ci->env;
+      }
+      ci--;
+    }
+  }
+  return NULL;
+}
+
+static inline struct RProc*
+top_proc(mrb_state *mrb, struct RProc *proc)
+{
+  while (proc->upper) {
+    if (MRB_PROC_SCOPE_P(proc) || MRB_PROC_STRICT_P(proc))
+      return proc;
+    proc = proc->upper;
+  }
+  return proc;
+}
+
+#define CI_ACC_SKIP    -1
+#define CI_ACC_DIRECT  -2
+#define CI_ACC_RESUMED -3
+
+static inline mrb_callinfo*
+cipush(mrb_state *mrb)
+{
+  struct mrb_context *c = mrb->c;
+  static const mrb_callinfo ci_zero = { 0 };
+  mrb_callinfo *ci = c->ci;
+
+  int ridx = ci->ridx;
+
+  if (ci + 1 == c->ciend) {
+    ptrdiff_t size = ci - c->cibase;
+
+    c->cibase = (mrb_callinfo *)mrb_realloc(mrb, c->cibase, sizeof(mrb_callinfo)*size*2);
+    c->ci = c->cibase + size;
+    c->ciend = c->cibase + size * 2;
+  }
+  ci = ++c->ci;
+  *ci = ci_zero;
+  ci->epos = mrb->c->eidx;
+  ci->ridx = ridx;
+
+  return ci;
+}
+
+void
+mrb_env_unshare(mrb_state *mrb, struct REnv *e)
+{
+  if (e == NULL) return;
+  else {
+    size_t len = (size_t)MRB_ENV_STACK_LEN(e);
+    mrb_value *p;
+
+    if (!MRB_ENV_STACK_SHARED_P(e)) return;
+    if (e->cxt != mrb->c) return;
+    if (e == mrb->c->cibase->env) return; /* for mirb */
+    p = (mrb_value *)mrb_malloc(mrb, sizeof(mrb_value)*len);
+    if (len > 0) {
+      stack_copy(p, e->stack, len);
+    }
+    e->stack = p;
+    MRB_ENV_UNSHARE_STACK(e);
+    mrb_write_barrier(mrb, (struct RBasic *)e);
+  }
+}
+
+static inline void
+cipop(mrb_state *mrb)
+{
+  struct mrb_context *c = mrb->c;
+  struct REnv *env = c->ci->env;
+
+  c->ci--;
+  if (env) mrb_env_unshare(mrb, env);
+}
+
+void mrb_exc_set(mrb_state *mrb, mrb_value exc);
+
+static void
+ecall(mrb_state *mrb)
+{
+  struct RProc *p;
+  struct mrb_context *c = mrb->c;
+  mrb_callinfo *ci = c->ci;
+  struct RObject *exc;
+  struct REnv *env;
+  ptrdiff_t cioff;
+  int ai = mrb_gc_arena_save(mrb);
+  uint16_t i = --c->eidx;
+  int nregs;
+
+  if (i<0) return;
+  /* restrict total call depth of ecall() */
+  if (++mrb->ecall_nest > MRB_ECALL_DEPTH_MAX) {
+    mrb_exc_raise(mrb, mrb_obj_value(mrb->stack_err));
+  }
+  p = c->ensure[i];
+  if (!p) return;
+  mrb_assert(!MRB_PROC_CFUNC_P(p));
+  c->ensure[i] = NULL;
+  nregs = p->upper->body.irep->nregs;
+  if (ci->proc && !MRB_PROC_CFUNC_P(ci->proc) &&
+      ci->proc->body.irep->nregs > nregs) {
+    nregs = ci->proc->body.irep->nregs;
+  }
+  cioff = ci - c->cibase;
+  ci = cipush(mrb);
+  ci->stackent = mrb->c->stack;
+  ci->mid = ci[-1].mid;
+  ci->acc = CI_ACC_SKIP;
+  ci->argc = 0;
+  ci->proc = p;
+  ci->target_class = MRB_PROC_TARGET_CLASS(p);
+  env = MRB_PROC_ENV(p);
+  mrb_assert(env);
+  c->stack += nregs;
+  exc = mrb->exc; mrb->exc = 0;
+  if (exc) {
+    mrb_gc_protect(mrb, mrb_obj_value(exc));
+  }
+  if (mrb->c->fib) {
+    mrb_gc_protect(mrb, mrb_obj_value(mrb->c->fib));
+  }
+  mrb_run(mrb, p, env->stack[0]);
+  mrb->c = c;
+  c->ci = c->cibase + cioff;
+  if (!mrb->exc) mrb->exc = exc;
+  mrb_gc_arena_restore(mrb, ai);
+  mrb->ecall_nest--;
+}
+
+#ifndef MRB_FUNCALL_ARGC_MAX
+#define MRB_FUNCALL_ARGC_MAX 16
+#endif
+
+MRB_API mrb_value
+mrb_funcall(mrb_state *mrb, mrb_value self, const char *name, mrb_int argc, ...)
+{
+  mrb_value argv[MRB_FUNCALL_ARGC_MAX];
+  va_list ap;
+  mrb_int i;
+  mrb_sym mid = mrb_intern_cstr(mrb, name);
+
+  if (argc > MRB_FUNCALL_ARGC_MAX) {
+    mrb_raise(mrb, E_ARGUMENT_ERROR, "Too long arguments. (limit=" MRB_STRINGIZE(MRB_FUNCALL_ARGC_MAX) ")");
+  }
+
+  va_start(ap, argc);
+  for (i = 0; i < argc; i++) {
+    argv[i] = va_arg(ap, mrb_value);
+  }
+  va_end(ap);
+  return mrb_funcall_argv(mrb, self, mid, argc, argv);
+}
+
+static int
+ci_nregs(mrb_callinfo *ci)
+{
+  struct RProc *p;
+  int n = 0;
+
+  if (!ci) return 3;
+  p = ci->proc;
+  if (!p) {
+    if (ci->argc < 0) return 3;
+    return ci->argc+2;
+  }
+  if (!MRB_PROC_CFUNC_P(p) && p->body.irep) {
+    n = p->body.irep->nregs;
+  }
+  if (ci->argc < 0) {
+    if (n < 3) n = 3; /* self + args + blk */
+  }
+  if (ci->argc > n) {
+    n = ci->argc + 2; /* self + blk */
+  }
+  return n;
+}
+
+MRB_API mrb_value
+mrb_funcall_with_block(mrb_state *mrb, mrb_value self, mrb_sym mid, mrb_int argc, const mrb_value *argv, mrb_value blk)
+{
+  mrb_value val;
+  int ai = mrb_gc_arena_save(mrb);
+
+  if (!mrb->jmp) {
+    struct mrb_jmpbuf c_jmp;
+    ptrdiff_t nth_ci = mrb->c->ci - mrb->c->cibase;
+
+    MRB_TRY(&c_jmp) {
+      mrb->jmp = &c_jmp;
+      /* recursive call */
+      val = mrb_funcall_with_block(mrb, self, mid, argc, argv, blk);
+      mrb->jmp = 0;
+    }
+    MRB_CATCH(&c_jmp) { /* error */
+      while (nth_ci < (mrb->c->ci - mrb->c->cibase)) {
+        mrb->c->stack = mrb->c->ci->stackent;
+        cipop(mrb);
+      }
+      mrb->jmp = 0;
+      val = mrb_obj_value(mrb->exc);
+    }
+    MRB_END_EXC(&c_jmp);
+    mrb->jmp = 0;
+  }
+  else {
+    mrb_method_t m;
+    struct RClass *c;
+    mrb_callinfo *ci;
+    int n = ci_nregs(mrb->c->ci);
+    ptrdiff_t voff = -1;
+
+    if (!mrb->c->stack) {
+      stack_init(mrb);
+    }
+    if (argc < 0) {
+      mrb_raisef(mrb, E_ARGUMENT_ERROR, "negative argc for funcall (%i)", argc);
+    }
+    c = mrb_class(mrb, self);
+    m = mrb_method_search_vm(mrb, &c, mid);
+    if (MRB_METHOD_UNDEF_P(m)) {
+      mrb_sym missing = mrb_intern_lit(mrb, "method_missing");
+      mrb_value args = mrb_ary_new_from_values(mrb, argc, argv);
+      m = mrb_method_search_vm(mrb, &c, missing);
+      if (MRB_METHOD_UNDEF_P(m)) {
+        mrb_method_missing(mrb, mid, self, args);
+      }
+      mrb_ary_unshift(mrb, args, mrb_symbol_value(mid));
+      mrb_stack_extend(mrb, n+2);
+      mrb->c->stack[n+1] = args;
+      argc = -1;
+    }
+    if (mrb->c->ci - mrb->c->cibase > MRB_FUNCALL_DEPTH_MAX) {
+      mrb_exc_raise(mrb, mrb_obj_value(mrb->stack_err));
+    }
+    ci = cipush(mrb);
+    ci->mid = mid;
+    ci->stackent = mrb->c->stack;
+    ci->argc = (int)argc;
+    ci->target_class = c;
+    mrb->c->stack = mrb->c->stack + n;
+    if (argc < 0) argc = 1;
+    if (mrb->c->stbase <= argv && argv < mrb->c->stend) {
+      voff = argv - mrb->c->stbase;
+    }
+    if (argc >= CALL_MAXARGS) {
+      mrb_value args = mrb_ary_new_from_values(mrb, argc, argv);
+
+      mrb->c->stack[1] = args;
+      ci->argc = -1;
+      argc = 1;
+    }
+    mrb_stack_extend(mrb, argc + 2);
+    if (MRB_METHOD_PROC_P(m)) {
+      struct RProc *p = MRB_METHOD_PROC(m);
+
+      ci->proc = p;
+      if (!MRB_PROC_CFUNC_P(p)) {
+        mrb_stack_extend(mrb, p->body.irep->nregs + argc);
+      }
+    }
+    if (voff >= 0) {
+      argv = mrb->c->stbase + voff;
+    }
+    mrb->c->stack[0] = self;
+    if (ci->argc > 0) {
+      stack_copy(mrb->c->stack+1, argv, argc);
+    }
+    mrb->c->stack[argc+1] = blk;
+
+    if (MRB_METHOD_CFUNC_P(m)) {
+      ci->acc = CI_ACC_DIRECT;
+      val = MRB_METHOD_CFUNC(m)(mrb, self);
+      mrb->c->stack = mrb->c->ci->stackent;
+      cipop(mrb);
+    }
+    else {
+      ci->acc = CI_ACC_SKIP;
+      val = mrb_run(mrb, MRB_METHOD_PROC(m), self);
+    }
+  }
+  mrb_gc_arena_restore(mrb, ai);
+  mrb_gc_protect(mrb, val);
+  return val;
+}
+
+MRB_API mrb_value
+mrb_funcall_argv(mrb_state *mrb, mrb_value self, mrb_sym mid, mrb_int argc, const mrb_value *argv)
+{
+  return mrb_funcall_with_block(mrb, self, mid, argc, argv, mrb_nil_value());
+}
+
+mrb_value
+mrb_exec_irep(mrb_state *mrb, mrb_value self, struct RProc *p)
+{
+  mrb_callinfo *ci = mrb->c->ci;
+  int keep, nregs;
+
+  mrb->c->stack[0] = self;
+  ci->proc = p;
+  if (MRB_PROC_CFUNC_P(p)) {
+    return MRB_PROC_CFUNC(p)(mrb, self);
+  }
+  nregs = p->body.irep->nregs;
+  if (ci->argc < 0) keep = 3;
+  else keep = ci->argc + 2;
+  if (nregs < keep) {
+    mrb_stack_extend(mrb, keep);
+  }
+  else {
+    mrb_stack_extend(mrb, nregs);
+    stack_clear(mrb->c->stack+keep, nregs-keep);
+  }
+
+  ci = cipush(mrb);
+  ci->target_class = 0;
+  ci->pc = p->body.irep->iseq;
+  ci->stackent = mrb->c->stack;
+  ci->acc = 0;
+
+  return self;
+}
+
+/* 15.3.1.3.4  */
+/* 15.3.1.3.44 */
+/*
+ *  call-seq:
+ *     obj.send(symbol [, args...])        -> obj
+ *     obj.__send__(symbol [, args...])      -> obj
+ *
+ *  Invokes the method identified by _symbol_, passing it any
+ *  arguments specified. You can use <code>__send__</code> if the name
+ *  +send+ clashes with an existing method in _obj_.
+ *
+ *     class Klass
+ *       def hello(*args)
+ *         "Hello " + args.join(' ')
+ *       end
+ *     end
+ *     k = Klass.new
+ *     k.send :hello, "gentle", "readers"   #=> "Hello gentle readers"
+ */
+mrb_value
+mrb_f_send(mrb_state *mrb, mrb_value self)
+{
+  mrb_sym name;
+  mrb_value block, *argv, *regs;
+  mrb_int argc, i, len;
+  mrb_method_t m;
+  struct RClass *c;
+  mrb_callinfo *ci;
+
+  mrb_get_args(mrb, "n*&", &name, &argv, &argc, &block);
+  ci = mrb->c->ci;
+  if (ci->acc < 0) {
+  funcall:
+    return mrb_funcall_with_block(mrb, self, name, argc, argv, block);
+  }
+
+  c = mrb_class(mrb, self);
+  m = mrb_method_search_vm(mrb, &c, name);
+  if (MRB_METHOD_UNDEF_P(m)) {            /* call method_mising */
+    goto funcall;
+  }
+
+  ci->mid = name;
+  ci->target_class = c;
+  regs = mrb->c->stack+1;
+  /* remove first symbol from arguments */
+  if (ci->argc >= 0) {
+    for (i=0,len=ci->argc; i<len; i++) {
+      regs[i] = regs[i+1];
+    }
+    ci->argc--;
+  }
+  else {                     /* variable length arguments */
+    mrb_ary_shift(mrb, regs[0]);
+  }
+
+  if (MRB_METHOD_CFUNC_P(m)) {
+    if (MRB_METHOD_PROC_P(m)) {
+      ci->proc = MRB_METHOD_PROC(m);
+    }
+    return MRB_METHOD_CFUNC(m)(mrb, self);
+  }
+  return mrb_exec_irep(mrb, self, MRB_METHOD_PROC(m));
+}
+
+static mrb_value
+eval_under(mrb_state *mrb, mrb_value self, mrb_value blk, struct RClass *c)
+{
+  struct RProc *p;
+  mrb_callinfo *ci;
+  int nregs;
+
+  if (mrb_nil_p(blk)) {
+    mrb_raise(mrb, E_ARGUMENT_ERROR, "no block given");
+  }
+  ci = mrb->c->ci;
+  if (ci->acc == CI_ACC_DIRECT) {
+    ci->target_class = c;
+    return mrb_yield_cont(mrb, blk, self, 1, &self);
+  }
+  ci->target_class = c;
+  p = mrb_proc_ptr(blk);
+  ci->proc = p;
+  ci->argc = 1;
+  ci->mid = ci[-1].mid;
+  if (MRB_PROC_CFUNC_P(p)) {
+    mrb_stack_extend(mrb, 3);
+    mrb->c->stack[0] = self;
+    mrb->c->stack[1] = self;
+    mrb->c->stack[2] = mrb_nil_value();
+    return MRB_PROC_CFUNC(p)(mrb, self);
+  }
+  nregs = p->body.irep->nregs;
+  if (nregs < 3) nregs = 3;
+  mrb_stack_extend(mrb, nregs);
+  mrb->c->stack[0] = self;
+  mrb->c->stack[1] = self;
+  stack_clear(mrb->c->stack+2, nregs-2);
+  ci = cipush(mrb);
+  ci->target_class = 0;
+  ci->pc = p->body.irep->iseq;
+  ci->stackent = mrb->c->stack;
+  ci->acc = 0;
+
+  return self;
+}
+
+/* 15.2.2.4.35 */
+/*
+ *  call-seq:
+ *     mod.class_eval {| | block }  -> obj
+ *     mod.module_eval {| | block } -> obj
+ *
+ *  Evaluates block in the context of _mod_. This can
+ *  be used to add methods to a class. <code>module_eval</code> returns
+ *  the result of evaluating its argument.
+ */
+mrb_value
+mrb_mod_module_eval(mrb_state *mrb, mrb_value mod)
+{
+  mrb_value a, b;
+
+  if (mrb_get_args(mrb, "|S&", &a, &b) == 1) {
+    mrb_raise(mrb, E_NOTIMP_ERROR, "module_eval/class_eval with string not implemented");
+  }
+  return eval_under(mrb, mod, b, mrb_class_ptr(mod));
+}
+
+/* 15.3.1.3.18 */
+/*
+ *  call-seq:
+ *     obj.instance_eval {| | block }                       -> obj
+ *
+ *  Evaluates the given block,within  the context of the receiver (_obj_).
+ *  In order to set the context, the variable +self+ is set to _obj_ while
+ *  the code is executing, giving the code access to _obj_'s
+ *  instance variables. In the version of <code>instance_eval</code>
+ *  that takes a +String+, the optional second and third
+ *  parameters supply a filename and starting line number that are used
+ *  when reporting compilation errors.
+ *
+ *     class KlassWithSecret
+ *       def initialize
+ *         @secret = 99
+ *       end
+ *     end
+ *     k = KlassWithSecret.new
+ *     k.instance_eval { @secret }   #=> 99
+ */
+mrb_value
+mrb_obj_instance_eval(mrb_state *mrb, mrb_value self)
+{
+  mrb_value a, b;
+  mrb_value cv;
+  struct RClass *c;
+
+  if (mrb_get_args(mrb, "|S&", &a, &b) == 1) {
+    mrb_raise(mrb, E_NOTIMP_ERROR, "instance_eval with string not implemented");
+  }
+  switch (mrb_type(self)) {
+  case MRB_TT_SYMBOL:
+  case MRB_TT_FIXNUM:
+#ifndef MRB_WITHOUT_FLOAT
+  case MRB_TT_FLOAT:
+#endif
+    c = 0;
+    break;
+  default:
+    cv = mrb_singleton_class(mrb, self);
+    c = mrb_class_ptr(cv);
+    break;
+  }
+  return eval_under(mrb, self, b, c);
+}
+
+MRB_API mrb_value
+mrb_yield_with_class(mrb_state *mrb, mrb_value b, mrb_int argc, const mrb_value *argv, mrb_value self, struct RClass *c)
+{
+  struct RProc *p;
+  mrb_sym mid = mrb->c->ci->mid;
+  mrb_callinfo *ci;
+  mrb_value val;
+  int n;
+
+  if (mrb_nil_p(b)) {
+    mrb_raise(mrb, E_ARGUMENT_ERROR, "no block given");
+  }
+  ci = mrb->c->ci;
+  n = ci_nregs(ci);
+  if (ci - mrb->c->cibase > MRB_FUNCALL_DEPTH_MAX) {
+    mrb_exc_raise(mrb, mrb_obj_value(mrb->stack_err));
+  }
+  p = mrb_proc_ptr(b);
+  ci = cipush(mrb);
+  ci->mid = mid;
+  ci->proc = p;
+  ci->stackent = mrb->c->stack;
+  ci->argc = (int)argc;
+  ci->target_class = c;
+  ci->acc = CI_ACC_SKIP;
+  n = MRB_PROC_CFUNC_P(p) ? (int)(argc+2) : p->body.irep->nregs;
+  mrb->c->stack = mrb->c->stack + n;
+  mrb_stack_extend(mrb, n);
+
+  mrb->c->stack[0] = self;
+  if (argc > 0) {
+    stack_copy(mrb->c->stack+1, argv, argc);
+  }
+  mrb->c->stack[argc+1] = mrb_nil_value();
+
+  if (MRB_PROC_CFUNC_P(p)) {
+    val = MRB_PROC_CFUNC(p)(mrb, self);
+    mrb->c->stack = mrb->c->ci->stackent;
+    cipop(mrb);
+  }
+  else {
+    val = mrb_run(mrb, p, self);
+  }
+  return val;
+}
+
+MRB_API mrb_value
+mrb_yield_argv(mrb_state *mrb, mrb_value b, mrb_int argc, const mrb_value *argv)
+{
+  struct RProc *p = mrb_proc_ptr(b);
+
+  return mrb_yield_with_class(mrb, b, argc, argv, MRB_PROC_ENV(p)->stack[0], MRB_PROC_TARGET_CLASS(p));
+}
+
+MRB_API mrb_value
+mrb_yield(mrb_state *mrb, mrb_value b, mrb_value arg)
+{
+  struct RProc *p = mrb_proc_ptr(b);
+
+  return mrb_yield_with_class(mrb, b, 1, &arg, MRB_PROC_ENV(p)->stack[0], MRB_PROC_TARGET_CLASS(p));
+}
+
+mrb_value
+mrb_yield_cont(mrb_state *mrb, mrb_value b, mrb_value self, mrb_int argc, const mrb_value *argv)
+{
+  struct RProc *p;
+  mrb_callinfo *ci;
+
+  if (mrb_nil_p(b)) {
+    mrb_raise(mrb, E_ARGUMENT_ERROR, "no block given");
+  }
+  if (!mrb_proc_p(b)) {
+    mrb_raise(mrb, E_TYPE_ERROR, "not a block");
+  }
+
+  p = mrb_proc_ptr(b);
+  ci = mrb->c->ci;
+
+  mrb_stack_extend(mrb, 3);
+  mrb->c->stack[1] = mrb_ary_new_from_values(mrb, argc, argv);
+  mrb->c->stack[2] = mrb_nil_value();
+  ci->argc = -1;
+  return mrb_exec_irep(mrb, self, p);
+}
+
+static struct RBreak*
+break_new(mrb_state *mrb, struct RProc *p, mrb_value val)
+{
+  struct RBreak *brk;
+
+  brk = (struct RBreak*)mrb_obj_alloc(mrb, MRB_TT_BREAK, NULL);
+  mrb_break_proc_set(brk, p);
+  mrb_break_value_set(brk, val);
+
+  return brk;
+}
+
+typedef enum {
+  LOCALJUMP_ERROR_RETURN = 0,
+  LOCALJUMP_ERROR_BREAK = 1,
+  LOCALJUMP_ERROR_YIELD = 2
+} localjump_error_kind;
+
+static void
+localjump_error(mrb_state *mrb, localjump_error_kind kind)
+{
+  char kind_str[3][7] = { "return", "break", "yield" };
+  char kind_str_len[] = { 6, 5, 5 };
+  static const char lead[] = "unexpected ";
+  mrb_value msg;
+  mrb_value exc;
+
+  msg = mrb_str_new_capa(mrb, sizeof(lead) + 7);
+  mrb_str_cat(mrb, msg, lead, sizeof(lead) - 1);
+  mrb_str_cat(mrb, msg, kind_str[kind], kind_str_len[kind]);
+  exc = mrb_exc_new_str(mrb, E_LOCALJUMP_ERROR, msg);
+  mrb_exc_set(mrb, exc);
+}
+
+static void
+argnum_error(mrb_state *mrb, mrb_int num)
+{
+  mrb_value exc;
+  mrb_value str;
+  mrb_int argc = mrb->c->ci->argc;
+
+  if (argc < 0) {
+    mrb_value args = mrb->c->stack[1];
+    if (mrb_array_p(args)) {
+      argc = RARRAY_LEN(args);
+    }
+  }
+  if (mrb->c->ci->mid) {
+    str = mrb_format(mrb, "'%n': wrong number of arguments (%i for %i)",
+                     mrb->c->ci->mid, argc, num);
+  }
+  else {
+    str = mrb_format(mrb, "wrong number of arguments (%i for %i)", argc, num);
+  }
+  exc = mrb_exc_new_str(mrb, E_ARGUMENT_ERROR, str);
+  mrb_exc_set(mrb, exc);
+}
+
+#define ERR_PC_SET(mrb) mrb->c->ci->err = pc0;
+#define ERR_PC_CLR(mrb) mrb->c->ci->err = 0;
+#ifdef MRB_ENABLE_DEBUG_HOOK
+#define CODE_FETCH_HOOK(mrb, irep, pc, regs) if ((mrb)->code_fetch_hook) (mrb)->code_fetch_hook((mrb), (irep), (pc), (regs));
+#else
+#define CODE_FETCH_HOOK(mrb, irep, pc, regs)
+#endif
+
+#ifdef MRB_BYTECODE_DECODE_OPTION
+#define BYTECODE_DECODER(x) ((mrb)->bytecode_decoder)?(mrb)->bytecode_decoder((mrb), (x)):(x)
+#else
+#define BYTECODE_DECODER(x) (x)
+#endif
+
+#ifndef MRB_DISABLE_DIRECT_THREADING
+#if defined __GNUC__ || defined __clang__ || defined __INTEL_COMPILER
+#define DIRECT_THREADED
+#endif
+#endif /* ifndef MRB_DISABLE_DIRECT_THREADING */
+
+#ifndef DIRECT_THREADED
+
+#define INIT_DISPATCH for (;;) { insn = BYTECODE_DECODER(*pc); CODE_FETCH_HOOK(mrb, irep, pc, regs); switch (insn) {
+#define CASE(insn,ops) case insn: pc0=pc++; FETCH_ ## ops ();; L_ ## insn ## _BODY:
+#define NEXT break
+#define JUMP NEXT
+#define END_DISPATCH }}
+
+#else
+
+#define INIT_DISPATCH JUMP; return mrb_nil_value();
+#define CASE(insn,ops) L_ ## insn: pc0=pc++; FETCH_ ## ops (); L_ ## insn ## _BODY:
+#define NEXT insn=BYTECODE_DECODER(*pc); CODE_FETCH_HOOK(mrb, irep, pc, regs); goto *optable[insn]
+#define JUMP NEXT
+
+#define END_DISPATCH
+
+#endif
+
+MRB_API mrb_value
+mrb_vm_run(mrb_state *mrb, struct RProc *proc, mrb_value self, unsigned int stack_keep)
+{
+  mrb_irep *irep = proc->body.irep;
+  mrb_value result;
+  struct mrb_context *c = mrb->c;
+  ptrdiff_t cioff = c->ci - c->cibase;
+  unsigned int nregs = irep->nregs;
+
+  if (!c->stack) {
+    stack_init(mrb);
+  }
+  if (stack_keep > nregs)
+    nregs = stack_keep;
+  mrb_stack_extend(mrb, nregs);
+  stack_clear(c->stack + stack_keep, nregs - stack_keep);
+  c->stack[0] = self;
+  result = mrb_vm_exec(mrb, proc, irep->iseq);
+  if (mrb->c != c) {
+    if (mrb->c->fib) {
+      mrb_write_barrier(mrb, (struct RBasic*)mrb->c->fib);
+    }
+    mrb->c = c;
+  }
+  else if (c->ci - c->cibase > cioff) {
+    c->ci = c->cibase + cioff;
+  }
+  return result;
+}
+
+static mrb_bool
+check_target_class(mrb_state *mrb)
+{
+  if (!mrb->c->ci->target_class) {
+    mrb_value exc = mrb_exc_new_str_lit(mrb, E_TYPE_ERROR, "no target class or module");
+    mrb_exc_set(mrb, exc);
+    return FALSE;
+  }
+  return TRUE;
+}
+
+void mrb_hash_check_kdict(mrb_state *mrb, mrb_value self);
+
+MRB_API mrb_value
+mrb_vm_exec(mrb_state *mrb, struct RProc *proc, const mrb_code *pc)
+{
+  /* mrb_assert(MRB_PROC_CFUNC_P(proc)) */
+  const mrb_code *pc0 = pc;
+  mrb_irep *irep = proc->body.irep;
+  mrb_value *pool = irep->pool;
+  mrb_sym *syms = irep->syms;
+  mrb_code insn;
+  int ai = mrb_gc_arena_save(mrb);
+  struct mrb_jmpbuf *prev_jmp = mrb->jmp;
+  struct mrb_jmpbuf c_jmp;
+  uint32_t a;
+  uint16_t b;
+  uint8_t c;
+  mrb_sym mid;
+
+#ifdef DIRECT_THREADED
+  static void *optable[] = {
+#define OPCODE(x,_) &&L_OP_ ## x,
+#include "mruby/ops.h"
+#undef OPCODE
+  };
+#endif
+
+  mrb_bool exc_catched = FALSE;
+RETRY_TRY_BLOCK:
+
+  MRB_TRY(&c_jmp) {
+
+  if (exc_catched) {
+    exc_catched = FALSE;
+    mrb_gc_arena_restore(mrb, ai);
+    if (mrb->exc && mrb->exc->tt == MRB_TT_BREAK)
+      goto L_BREAK;
+    goto L_RAISE;
+  }
+  mrb->jmp = &c_jmp;
+  mrb->c->ci->proc = proc;
+
+#define regs (mrb->c->stack)
+  INIT_DISPATCH {
+    CASE(OP_NOP, Z) {
+      /* do nothing */
+      NEXT;
+    }
+
+    CASE(OP_MOVE, BB) {
+      regs[a] = regs[b];
+      NEXT;
+    }
+
+    CASE(OP_LOADL, BB) {
+#ifdef MRB_WORD_BOXING
+      mrb_value val = pool[b];
+#ifndef MRB_WITHOUT_FLOAT
+      if (mrb_float_p(val)) {
+        val = mrb_float_value(mrb, mrb_float(val));
+      }
+#endif
+      regs[a] = val;
+#else
+      regs[a] = pool[b];
+#endif
+      NEXT;
+    }
+
+    CASE(OP_LOADI, BB) {
+      SET_INT_VALUE(regs[a], b);
+      NEXT;
+    }
+
+    CASE(OP_LOADINEG, BB) {
+      SET_INT_VALUE(regs[a], -b);
+      NEXT;
+    }
+
+    CASE(OP_LOADI__1,B) goto L_LOADI;
+    CASE(OP_LOADI_0,B) goto L_LOADI;
+    CASE(OP_LOADI_1,B) goto L_LOADI;
+    CASE(OP_LOADI_2,B) goto L_LOADI;
+    CASE(OP_LOADI_3,B) goto L_LOADI;
+    CASE(OP_LOADI_4,B) goto L_LOADI;
+    CASE(OP_LOADI_5,B) goto L_LOADI;
+    CASE(OP_LOADI_6,B) goto L_LOADI;
+    CASE(OP_LOADI_7, B) {
+    L_LOADI:
+      SET_INT_VALUE(regs[a], (mrb_int)insn - (mrb_int)OP_LOADI_0);
+      NEXT;
+    }
+
+    CASE(OP_LOADSYM, BB) {
+      SET_SYM_VALUE(regs[a], syms[b]);
+      NEXT;
+    }
+
+    CASE(OP_LOADNIL, B) {
+      SET_NIL_VALUE(regs[a]);
+      NEXT;
+    }
+
+    CASE(OP_LOADSELF, B) {
+      regs[a] = regs[0];
+      NEXT;
+    }
+
+    CASE(OP_LOADT, B) {
+      SET_TRUE_VALUE(regs[a]);
+      NEXT;
+    }
+
+    CASE(OP_LOADF, B) {
+      SET_FALSE_VALUE(regs[a]);
+      NEXT;
+    }
+
+    CASE(OP_GETGV, BB) {
+      mrb_value val = mrb_gv_get(mrb, syms[b]);
+      regs[a] = val;
+      NEXT;
+    }
+
+    CASE(OP_SETGV, BB) {
+      mrb_gv_set(mrb, syms[b], regs[a]);
+      NEXT;
+    }
+
+    CASE(OP_GETSV, BB) {
+      mrb_value val = mrb_vm_special_get(mrb, b);
+      regs[a] = val;
+      NEXT;
+    }
+
+    CASE(OP_SETSV, BB) {
+      mrb_vm_special_set(mrb, b, regs[a]);
+      NEXT;
+    }
+
+    CASE(OP_GETIV, BB) {
+      regs[a] = mrb_iv_get(mrb, regs[0], syms[b]);
+      NEXT;
+    }
+
+    CASE(OP_SETIV, BB) {
+      mrb_iv_set(mrb, regs[0], syms[b], regs[a]);
+      NEXT;
+    }
+
+    CASE(OP_GETCV, BB) {
+      mrb_value val;
+      ERR_PC_SET(mrb);
+      val = mrb_vm_cv_get(mrb, syms[b]);
+      ERR_PC_CLR(mrb);
+      regs[a] = val;
+      NEXT;
+    }
+
+    CASE(OP_SETCV, BB) {
+      mrb_vm_cv_set(mrb, syms[b], regs[a]);
+      NEXT;
+    }
+
+    CASE(OP_GETCONST, BB) {
+      mrb_value val;
+      mrb_sym sym = syms[b];
+
+      ERR_PC_SET(mrb);
+      val = mrb_vm_const_get(mrb, sym);
+      ERR_PC_CLR(mrb);
+      regs[a] = val;
+      NEXT;
+    }
+
+    CASE(OP_SETCONST, BB) {
+      mrb_vm_const_set(mrb, syms[b], regs[a]);
+      NEXT;
+    }
+
+    CASE(OP_GETMCNST, BB) {
+      mrb_value val;
+
+      ERR_PC_SET(mrb);
+      val = mrb_const_get(mrb, regs[a], syms[b]);
+      ERR_PC_CLR(mrb);
+      regs[a] = val;
+      NEXT;
+    }
+
+    CASE(OP_SETMCNST, BB) {
+      mrb_const_set(mrb, regs[a+1], syms[b], regs[a]);
+      NEXT;
+    }
+
+    CASE(OP_GETUPVAR, BBB) {
+      mrb_value *regs_a = regs + a;
+      struct REnv *e = uvenv(mrb, c);
+
+      if (e && b < MRB_ENV_STACK_LEN(e)) {
+        *regs_a = e->stack[b];
+      }
+      else {
+        *regs_a = mrb_nil_value();
+      }
+      NEXT;
+    }
+
+    CASE(OP_SETUPVAR, BBB) {
+      struct REnv *e = uvenv(mrb, c);
+
+      if (e) {
+        mrb_value *regs_a = regs + a;
+
+        if (b < MRB_ENV_STACK_LEN(e)) {
+          e->stack[b] = *regs_a;
+          mrb_write_barrier(mrb, (struct RBasic*)e);
+        }
+      }
+      NEXT;
+    }
+
+    CASE(OP_JMP, S) {
+      pc = irep->iseq+a;
+      JUMP;
+    }
+    CASE(OP_JMPIF, BS) {
+      if (mrb_test(regs[a])) {
+        pc = irep->iseq+b;
+        JUMP;
+      }
+      NEXT;
+    }
+    CASE(OP_JMPNOT, BS) {
+      if (!mrb_test(regs[a])) {
+        pc = irep->iseq+b;
+        JUMP;
+      }
+      NEXT;
+    }
+    CASE(OP_JMPNIL, BS) {
+      if (mrb_nil_p(regs[a])) {
+        pc = irep->iseq+b;
+        JUMP;
+      }
+      NEXT;
+    }
+
+    CASE(OP_ONERR, S) {
+      /* check rescue stack */
+      if (mrb->c->ci->ridx == UINT16_MAX-1) {
+        mrb_value exc = mrb_exc_new_str_lit(mrb, E_RUNTIME_ERROR, "too many nested rescues");
+        mrb_exc_set(mrb, exc);
+        goto L_RAISE;
+      }
+      /* expand rescue stack */
+      if (mrb->c->rsize <= mrb->c->ci->ridx) {
+        if (mrb->c->rsize == 0) mrb->c->rsize = RESCUE_STACK_INIT_SIZE;
+        else {
+          mrb->c->rsize *= 2;
+          if (mrb->c->rsize <= mrb->c->ci->ridx) {
+            mrb->c->rsize = UINT16_MAX;
+          }
+        }
+        mrb->c->rescue = (uint16_t*)mrb_realloc(mrb, mrb->c->rescue, sizeof(uint16_t)*mrb->c->rsize);
+      }
+      /* push rescue stack */
+      mrb->c->rescue[mrb->c->ci->ridx++] = a;
+      NEXT;
+    }
+
+    CASE(OP_EXCEPT, B) {
+      mrb_value exc = mrb_obj_value(mrb->exc);
+      mrb->exc = 0;
+      regs[a] = exc;
+      NEXT;
+    }
+    CASE(OP_RESCUE, BB) {
+      mrb_value exc = regs[a];  /* exc on stack */
+      mrb_value e = regs[b];
+      struct RClass *ec;
+
+      switch (mrb_type(e)) {
+      case MRB_TT_CLASS:
+      case MRB_TT_MODULE:
+        break;
+      default:
+        {
+          mrb_value exc;
+
+          exc = mrb_exc_new_str_lit(mrb, E_TYPE_ERROR,
+                                    "class or module required for rescue clause");
+          mrb_exc_set(mrb, exc);
+          goto L_RAISE;
+        }
+      }
+      ec = mrb_class_ptr(e);
+      regs[b] = mrb_bool_value(mrb_obj_is_kind_of(mrb, exc, ec));
+      NEXT;
+    }
+
+    CASE(OP_POPERR, B) {
+      mrb->c->ci->ridx -= a;
+      NEXT;
+    }
+
+    CASE(OP_RAISE, B) {
+      mrb_exc_set(mrb, regs[a]);
+      goto L_RAISE;
+    }
+
+    CASE(OP_EPUSH, B) {
+      struct RProc *p;
+
+      p = mrb_closure_new(mrb, irep->reps[a]);
+      /* check ensure stack */
+      if (mrb->c->eidx == UINT16_MAX-1) {
+        mrb_value exc = mrb_exc_new_str_lit(mrb, E_RUNTIME_ERROR, "too many nested ensures");
+        mrb_exc_set(mrb, exc);
+        goto L_RAISE;
+      }
+      /* expand ensure stack */
+      if (mrb->c->esize <= mrb->c->eidx+1) {
+        if (mrb->c->esize == 0) mrb->c->esize = ENSURE_STACK_INIT_SIZE;
+        else {
+          mrb->c->esize *= 2;
+          if (mrb->c->esize <= mrb->c->eidx) {
+            mrb->c->esize = UINT16_MAX;
+          }
+        }
+        mrb->c->ensure = (struct RProc**)mrb_realloc(mrb, mrb->c->ensure, sizeof(struct RProc*)*mrb->c->esize);
+      }
+      /* push ensure stack */
+      mrb->c->ensure[mrb->c->eidx++] = p;
+      mrb->c->ensure[mrb->c->eidx] = NULL;
+      mrb_gc_arena_restore(mrb, ai);
+      NEXT;
+    }
+
+    CASE(OP_EPOP, B) {
+      mrb_callinfo *ci = mrb->c->ci;
+      unsigned int n, epos = ci->epos;
+      mrb_value self = regs[0];
+      struct RClass *target_class = ci->target_class;
+
+      if (mrb->c->eidx <= epos) {
+        NEXT;
+      }
+
+      if (a > (int)mrb->c->eidx - epos)
+        a = mrb->c->eidx - epos;
+      for (n=0; n<a; n++) {
+        int nregs = irep->nregs;
+
+        proc = mrb->c->ensure[epos+n];
+        mrb->c->ensure[epos+n] = NULL;
+        if (proc == NULL) continue;
+        irep = proc->body.irep;
+        ci = cipush(mrb);
+        ci->mid = ci[-1].mid;
+        ci->argc = 0;
+        ci->proc = proc;
+        ci->stackent = mrb->c->stack;
+        ci->target_class = target_class;
+        ci->pc = pc;
+        ci->acc = nregs;
+        mrb->c->stack += ci->acc;
+        mrb_stack_extend(mrb, irep->nregs);
+        regs[0] = self;
+        pc = irep->iseq;
+      }
+      pool = irep->pool;
+      syms = irep->syms;
+      mrb->c->eidx = epos;
+      JUMP;
+    }
+
+    CASE(OP_SENDV, BB) {
+      c = CALL_MAXARGS;
+      goto L_SEND;
+    };
+
+    CASE(OP_SENDVB, BB) {
+      c = CALL_MAXARGS;
+      goto L_SENDB;
+    };
+
+    CASE(OP_SEND, BBB)
+    L_SEND:
+    {
+      /* push nil after arguments */
+      int bidx = (c == CALL_MAXARGS) ? a+2 : a+c+1;
+      SET_NIL_VALUE(regs[bidx]);
+      goto L_SENDB;
+    };
+    L_SEND_SYM:
+    {
+      /* push nil after arguments */
+      int bidx = (c == CALL_MAXARGS) ? a+2 : a+c+1;
+      SET_NIL_VALUE(regs[bidx]);
+      goto L_SENDB_SYM;
+    };
+
+    CASE(OP_SENDB, BBB)
+    L_SENDB:
+    mid = syms[b];
+    L_SENDB_SYM:
+    {
+      int argc = (c == CALL_MAXARGS) ? -1 : c;
+      int bidx = (argc < 0) ? a+2 : a+c+1;
+      mrb_method_t m;
+      struct RClass *cls;
+      mrb_callinfo *ci = mrb->c->ci;
+      mrb_value recv, blk;
+
+      mrb_assert(bidx < irep->nregs);
+
+      recv = regs[a];
+      blk = regs[bidx];
+      if (!mrb_nil_p(blk) && !mrb_proc_p(blk)) {
+        blk = mrb_convert_type(mrb, blk, MRB_TT_PROC, "Proc", "to_proc");
+        /* The stack might have been reallocated during mrb_convert_type(),
+           see #3622 */
+        regs[bidx] = blk;
+      }
+      cls = mrb_class(mrb, recv);
+      m = mrb_method_search_vm(mrb, &cls, mid);
+      if (MRB_METHOD_UNDEF_P(m)) {
+        mrb_sym missing = mrb_intern_lit(mrb, "method_missing");
+        m = mrb_method_search_vm(mrb, &cls, missing);
+        if (MRB_METHOD_UNDEF_P(m) || (missing == mrb->c->ci->mid && mrb_obj_eq(mrb, regs[0], recv))) {
+          mrb_value args = (argc < 0) ? regs[a+1] : mrb_ary_new_from_values(mrb, c, regs+a+1);
+          ERR_PC_SET(mrb);
+          mrb_method_missing(mrb, mid, recv, args);
+        }
+        if (argc >= 0) {
+          if (a+2 >= irep->nregs) {
+            mrb_stack_extend(mrb, a+3);
+          }
+          regs[a+1] = mrb_ary_new_from_values(mrb, c, regs+a+1);
+          regs[a+2] = blk;
+          argc = -1;
+        }
+        mrb_ary_unshift(mrb, regs[a+1], mrb_symbol_value(mid));
+        mid = missing;
+      }
+
+      /* push callinfo */
+      ci = cipush(mrb);
+      ci->mid = mid;
+      ci->stackent = mrb->c->stack;
+      ci->target_class = cls;
+      ci->argc = argc;
+
+      ci->pc = pc;
+      ci->acc = a;
+
+      /* prepare stack */
+      mrb->c->stack += a;
+
+      if (MRB_METHOD_CFUNC_P(m)) {
+        if (MRB_METHOD_PROC_P(m)) {
+          struct RProc *p = MRB_METHOD_PROC(m);
+
+          ci->proc = p;
+          recv = p->body.func(mrb, recv);
+        }
+        else if (MRB_METHOD_NOARG_P(m) &&
+                 (argc > 0 || (argc == -1 && RARRAY_LEN(regs[1]) != 0))) {
+          argnum_error(mrb, 0);
+          goto L_RAISE;
+        }
+        else {
+          recv = MRB_METHOD_FUNC(m)(mrb, recv);
+        }
+        mrb_gc_arena_restore(mrb, ai);
+        mrb_gc_arena_shrink(mrb, ai);
+        if (mrb->exc) goto L_RAISE;
+        ci = mrb->c->ci;
+        if (mrb_proc_p(blk)) {
+          struct RProc *p = mrb_proc_ptr(blk);
+          if (p && !MRB_PROC_STRICT_P(p) && MRB_PROC_ENV(p) == ci[-1].env) {
+            p->flags |= MRB_PROC_ORPHAN;
+          }
+        }
+        if (!ci->target_class) { /* return from context modifying method (resume/yield) */
+          if (ci->acc == CI_ACC_RESUMED) {
+            mrb->jmp = prev_jmp;
+            return recv;
+          }
+          else {
+            mrb_assert(!MRB_PROC_CFUNC_P(ci[-1].proc));
+            proc = ci[-1].proc;
+            irep = proc->body.irep;
+            pool = irep->pool;
+            syms = irep->syms;
+          }
+        }
+        mrb->c->stack[0] = recv;
+        /* pop stackpos */
+        mrb->c->stack = ci->stackent;
+        pc = ci->pc;
+        cipop(mrb);
+        JUMP;
+      }
+      else {
+        /* setup environment for calling method */
+        proc = ci->proc = MRB_METHOD_PROC(m);
+        irep = proc->body.irep;
+        pool = irep->pool;
+        syms = irep->syms;
+        mrb_stack_extend(mrb, (argc < 0 && irep->nregs < 3) ? 3 : irep->nregs);
+        pc = irep->iseq;
+        JUMP;
+      }
+    }
+
+    CASE(OP_CALL, Z) {
+      mrb_callinfo *ci;
+      mrb_value recv = mrb->c->stack[0];
+      struct RProc *m = mrb_proc_ptr(recv);
+
+      /* replace callinfo */
+      ci = mrb->c->ci;
+      ci->target_class = MRB_PROC_TARGET_CLASS(m);
+      ci->proc = m;
+      if (MRB_PROC_ENV_P(m)) {
+        struct REnv *e = MRB_PROC_ENV(m);
+
+        ci->mid = e->mid;
+        if (!e->stack) {
+          e->stack = mrb->c->stack;
+        }
+      }
+
+      /* prepare stack */
+      if (MRB_PROC_CFUNC_P(m)) {
+        recv = MRB_PROC_CFUNC(m)(mrb, recv);
+        mrb_gc_arena_restore(mrb, ai);
+        mrb_gc_arena_shrink(mrb, ai);
+        if (mrb->exc) goto L_RAISE;
+        /* pop stackpos */
+        ci = mrb->c->ci;
+        mrb->c->stack = ci->stackent;
+        regs[ci->acc] = recv;
+        pc = ci->pc;
+        cipop(mrb);
+        irep = mrb->c->ci->proc->body.irep;
+        pool = irep->pool;
+        syms = irep->syms;
+        JUMP;
+      }
+      else {
+        /* setup environment for calling method */
+        proc = m;
+        irep = m->body.irep;
+        if (!irep) {
+          mrb->c->stack[0] = mrb_nil_value();
+          a = 0;
+          c = OP_R_NORMAL;
+          goto L_OP_RETURN_BODY;
+        }
+        pool = irep->pool;
+        syms = irep->syms;
+        mrb_stack_extend(mrb, irep->nregs);
+        if (ci->argc < 0) {
+          if (irep->nregs > 3) {
+            stack_clear(regs+3, irep->nregs-3);
+          }
+        }
+        else if (ci->argc+2 < irep->nregs) {
+          stack_clear(regs+ci->argc+2, irep->nregs-ci->argc-2);
+        }
+        if (MRB_PROC_ENV_P(m)) {
+          regs[0] = MRB_PROC_ENV(m)->stack[0];
+        }
+        pc = irep->iseq;
+        JUMP;
+      }
+    }
+
+    CASE(OP_SUPER, BB) {
+      int argc = (b == CALL_MAXARGS) ? -1 : b;
+      int bidx = (argc < 0) ? a+2 : a+b+1;
+      mrb_method_t m;
+      struct RClass *cls;
+      mrb_callinfo *ci = mrb->c->ci;
+      mrb_value recv, blk;
+      struct RProc *p = ci->proc;
+      mrb_sym mid = ci->mid;
+      struct RClass* target_class = MRB_PROC_TARGET_CLASS(p);
+
+      if (MRB_PROC_ENV_P(p) && p->e.env->mid && p->e.env->mid != mid) { /* alias support */
+        mid = p->e.env->mid;    /* restore old mid */
+      }
+      mrb_assert(bidx < irep->nregs);
+
+      if (mid == 0 || !target_class) {
+        mrb_value exc = mrb_exc_new_str_lit(mrb, E_NOMETHOD_ERROR, "super called outside of method");
+        mrb_exc_set(mrb, exc);
+        goto L_RAISE;
+      }
+      if (target_class->tt == MRB_TT_MODULE) {
+        target_class = ci->target_class;
+        if (target_class->tt != MRB_TT_ICLASS) {
+          mrb_value exc = mrb_exc_new_str_lit(mrb, E_RUNTIME_ERROR, "superclass info lost [mruby limitations]");
+          mrb_exc_set(mrb, exc);
+          goto L_RAISE;
+        }
+      }
+      recv = regs[0];
+      if (!mrb_obj_is_kind_of(mrb, recv, target_class)) {
+        mrb_value exc = mrb_exc_new_str_lit(mrb, E_TYPE_ERROR,
+                                            "self has wrong type to call super in this context");
+        mrb_exc_set(mrb, exc);
+        goto L_RAISE;
+      }
+      blk = regs[bidx];
+      if (!mrb_nil_p(blk) && !mrb_proc_p(blk)) {
+        blk = mrb_convert_type(mrb, blk, MRB_TT_PROC, "Proc", "to_proc");
+        /* The stack or ci stack might have been reallocated during
+           mrb_convert_type(), see #3622 and #3784 */
+        regs[bidx] = blk;
+        ci = mrb->c->ci;
+      }
+      cls = target_class->super;
+      m = mrb_method_search_vm(mrb, &cls, mid);
+      if (MRB_METHOD_UNDEF_P(m)) {
+        mrb_sym missing = mrb_intern_lit(mrb, "method_missing");
+
+        if (mid != missing) {
+          cls = mrb_class(mrb, recv);
+        }
+        m = mrb_method_search_vm(mrb, &cls, missing);
+        if (MRB_METHOD_UNDEF_P(m)) {
+          mrb_value args = (argc < 0) ? regs[a+1] : mrb_ary_new_from_values(mrb, b, regs+a+1);
+          ERR_PC_SET(mrb);
+          mrb_method_missing(mrb, mid, recv, args);
+        }
+        mid = missing;
+        if (argc >= 0) {
+          if (a+2 >= irep->nregs) {
+            mrb_stack_extend(mrb, a+3);
+          }
+          regs[a+1] = mrb_ary_new_from_values(mrb, b, regs+a+1);
+          regs[a+2] = blk;
+          argc = -1;
+        }
+        mrb_ary_unshift(mrb, regs[a+1], mrb_symbol_value(ci->mid));
+      }
+
+      /* push callinfo */
+      ci = cipush(mrb);
+      ci->mid = mid;
+      ci->stackent = mrb->c->stack;
+      ci->target_class = cls;
+      ci->pc = pc;
+      ci->argc = argc;
+
+      /* prepare stack */
+      mrb->c->stack += a;
+      mrb->c->stack[0] = recv;
+
+      if (MRB_METHOD_CFUNC_P(m)) {
+        mrb_value v;
+
+        if (MRB_METHOD_PROC_P(m)) {
+          ci->proc = MRB_METHOD_PROC(m);
+        }
+        v = MRB_METHOD_CFUNC(m)(mrb, recv);
+        mrb_gc_arena_restore(mrb, ai);
+        if (mrb->exc) goto L_RAISE;
+        ci = mrb->c->ci;
+        if (!ci->target_class) { /* return from context modifying method (resume/yield) */
+          if (ci->acc == CI_ACC_RESUMED) {
+            mrb->jmp = prev_jmp;
+            return v;
+          }
+          else {
+            mrb_assert(!MRB_PROC_CFUNC_P(ci[-1].proc));
+            proc = ci[-1].proc;
+            irep = proc->body.irep;
+            pool = irep->pool;
+            syms = irep->syms;
+          }
+        }
+        mrb->c->stack[0] = v;
+        /* pop stackpos */
+        mrb->c->stack = ci->stackent;
+        pc = ci->pc;
+        cipop(mrb);
+        JUMP;
+      }
+      else {
+        /* fill callinfo */
+        ci->acc = a;
+
+        /* setup environment for calling method */
+        proc = ci->proc = MRB_METHOD_PROC(m);
+        irep = proc->body.irep;
+        pool = irep->pool;
+        syms = irep->syms;
+        mrb_stack_extend(mrb, (argc < 0 && irep->nregs < 3) ? 3 : irep->nregs);
+        pc = irep->iseq;
+        JUMP;
+      }
+    }
+
+    CASE(OP_ARGARY, BS) {
+      int m1 = (b>>11)&0x3f;
+      int r  = (b>>10)&0x1;
+      int m2 = (b>>5)&0x1f;
+      int kd = (b>>4)&0x1;
+      int lv = (b>>0)&0xf;
+      mrb_value *stack;
+
+      if (mrb->c->ci->mid == 0 || mrb->c->ci->target_class == NULL) {
+        mrb_value exc;
+
+      L_NOSUPER:
+        exc = mrb_exc_new_str_lit(mrb, E_NOMETHOD_ERROR, "super called outside of method");
+        mrb_exc_set(mrb, exc);
+        goto L_RAISE;
+      }
+      if (lv == 0) stack = regs + 1;
+      else {
+        struct REnv *e = uvenv(mrb, lv-1);
+        if (!e) goto L_NOSUPER;
+        if (MRB_ENV_STACK_LEN(e) <= m1+r+m2+kd+1)
+          goto L_NOSUPER;
+        stack = e->stack + 1;
+      }
+      if (r == 0) {
+        regs[a] = mrb_ary_new_from_values(mrb, m1+m2+kd, stack);
+      }
+      else {
+        mrb_value *pp = NULL;
+        struct RArray *rest;
+        int len = 0;
+
+        if (mrb_array_p(stack[m1])) {
+          struct RArray *ary = mrb_ary_ptr(stack[m1]);
+
+          pp = ARY_PTR(ary);
+          len = (int)ARY_LEN(ary);
+        }
+        regs[a] = mrb_ary_new_capa(mrb, m1+len+m2+kd);
+        rest = mrb_ary_ptr(regs[a]);
+        if (m1 > 0) {
+          stack_copy(ARY_PTR(rest), stack, m1);
+        }
+        if (len > 0) {
+          stack_copy(ARY_PTR(rest)+m1, pp, len);
+        }
+        if (m2 > 0) {
+          stack_copy(ARY_PTR(rest)+m1+len, stack+m1+1, m2);
+        }
+        if (kd) {
+          stack_copy(ARY_PTR(rest)+m1+len+m2, stack+m1+m2+1, kd);
+        }
+        ARY_SET_LEN(rest, m1+len+m2+kd);
+      }
+      regs[a+1] = stack[m1+r+m2];
+      mrb_gc_arena_restore(mrb, ai);
+      NEXT;
+    }
+
+    CASE(OP_ENTER, W) {
+      int m1 = MRB_ASPEC_REQ(a);
+      int o  = MRB_ASPEC_OPT(a);
+      int r  = MRB_ASPEC_REST(a);
+      int m2 = MRB_ASPEC_POST(a);
+      int kd = (MRB_ASPEC_KEY(a) > 0 || MRB_ASPEC_KDICT(a))? 1 : 0;
+      /* unused
+      int b  = MRB_ASPEC_BLOCK(a);
+      */
+      int argc = mrb->c->ci->argc;
+      mrb_value *argv = regs+1;
+      mrb_value * const argv0 = argv;
+      int const len = m1 + o + r + m2;
+      int const blk_pos = len + kd + 1;
+      mrb_value *blk = &argv[argc < 0 ? 1 : argc];
+      mrb_value kdict;
+      int kargs = kd;
+
+      /* arguments is passed with Array */
+      if (argc < 0) {
+        struct RArray *ary = mrb_ary_ptr(regs[1]);
+        argv = ARY_PTR(ary);
+        argc = (int)ARY_LEN(ary);
+        mrb_gc_protect(mrb, regs[1]);
+      }
+
+      /* strict argument check */
+      if (mrb->c->ci->proc && MRB_PROC_STRICT_P(mrb->c->ci->proc)) {
+        if (argc < m1 + m2 || (r == 0 && argc > len + kd)) {
+          argnum_error(mrb, m1+m2);
+          goto L_RAISE;
+        }
+      }
+      /* extract first argument array to arguments */
+      else if (len > 1 && argc == 1 && mrb_array_p(argv[0])) {
+        mrb_gc_protect(mrb, argv[0]);
+        argc = (int)RARRAY_LEN(argv[0]);
+        argv = RARRAY_PTR(argv[0]);
+      }
+
+      if (kd) {
+        /* check last arguments is hash if method takes keyword arguments */
+        if (argc == m1+m2) {
+          kdict = mrb_hash_new(mrb);
+          kargs = 0;
+        }
+        else {
+          if (argv && argc > 0 && mrb_hash_p(argv[argc-1])) {
+            kdict = argv[argc-1];
+            mrb_hash_check_kdict(mrb, kdict);
+          }
+          else if (r || argc <= m1+m2+o
+                   || !(mrb->c->ci->proc && MRB_PROC_STRICT_P(mrb->c->ci->proc))) {
+            kdict = mrb_hash_new(mrb);
+            kargs = 0;
+          }
+          else {
+            argnum_error(mrb, m1+m2);
+            goto L_RAISE;
+          }
+          if (MRB_ASPEC_KEY(a) > 0) {
+            kdict = mrb_hash_dup(mrb, kdict);
+          }
+        }
+      }
+
+      /* no rest arguments */
+      if (argc-kargs < len) {
+        int mlen = m2;
+        if (argc < m1+m2) {
+          mlen = m1 < argc ? argc - m1 : 0;
+        }
+        regs[blk_pos] = *blk; /* move block */
+        if (kd) regs[len + 1] = kdict;
+
+        /* copy mandatory and optional arguments */
+        if (argv0 != argv) {
+          value_move(&regs[1], argv, argc-mlen); /* m1 + o */
+        }
+        if (argc < m1) {
+          stack_clear(&regs[argc+1], m1-argc);
+        }
+        /* copy post mandatory arguments */
+        if (mlen) {
+          value_move(&regs[len-m2+1], &argv[argc-mlen], mlen);
+        }
+        if (mlen < m2) {
+          stack_clear(&regs[len-m2+mlen+1], m2-mlen);
+        }
+        /* initalize rest arguments with empty Array */
+        if (r) {
+          regs[m1+o+1] = mrb_ary_new_capa(mrb, 0);
+        }
+        /* skip initailizer of passed arguments */
+        if (o > 0 && argc-kargs > m1+m2)
+          pc += (argc - kargs - m1 - m2)*3;
+      }
+      else {
+        int rnum = 0;
+        if (argv0 != argv) {
+          regs[blk_pos] = *blk; /* move block */
+          if (kd) regs[len + 1] = kdict;
+          value_move(&regs[1], argv, m1+o);
+        }
+        if (r) {
+          mrb_value ary;
+
+          rnum = argc-m1-o-m2-kargs;
+          ary = mrb_ary_new_from_values(mrb, rnum, argv+m1+o);
+          regs[m1+o+1] = ary;
+        }
+        if (m2) {
+          if (argc-m2 > m1) {
+            value_move(&regs[m1+o+r+1], &argv[m1+o+rnum], m2);
+          }
+        }
+        if (argv0 == argv) {
+          regs[blk_pos] = *blk; /* move block */
+          if (kd) regs[len + 1] = kdict;
+        }
+        pc += o*3;
+      }
+
+      /* format arguments for generated code */
+      mrb->c->ci->argc = len + kd;
+
+      /* clear local (but non-argument) variables */
+      if (irep->nlocals-blk_pos-1 > 0) {
+        stack_clear(&regs[blk_pos+1], irep->nlocals-blk_pos-1);
+      }
+      JUMP;
+    }
+
+    CASE(OP_KARG, BB) {
+      mrb_value k = mrb_symbol_value(syms[b]);
+      mrb_value kdict = regs[mrb->c->ci->argc];
+
+      if (!mrb_hash_p(kdict) || !mrb_hash_key_p(mrb, kdict, k)) {
+        mrb_value str = mrb_format(mrb, "missing keyword: %v", k);
+        mrb_exc_set(mrb, mrb_exc_new_str(mrb, E_ARGUMENT_ERROR, str));
+        goto L_RAISE;
+      }
+      regs[a] = mrb_hash_get(mrb, kdict, k);
+      mrb_hash_delete_key(mrb, kdict, k);
+      NEXT;
+    }
+
+    CASE(OP_KEY_P, BB) {
+      mrb_value k = mrb_symbol_value(syms[b]);
+      mrb_value kdict = regs[mrb->c->ci->argc];
+      mrb_bool key_p = FALSE;
+
+      if (mrb_hash_p(kdict)) {
+        key_p = mrb_hash_key_p(mrb, kdict, k);
+      }
+      regs[a] = mrb_bool_value(key_p);
+      NEXT;
+    }
+
+    CASE(OP_KEYEND, Z) {
+      mrb_value kdict = regs[mrb->c->ci->argc];
+
+      if (mrb_hash_p(kdict) && !mrb_hash_empty_p(mrb, kdict)) {
+        mrb_value keys = mrb_hash_keys(mrb, kdict);
+        mrb_value key1 = RARRAY_PTR(keys)[0];
+        mrb_value str = mrb_format(mrb, "unknown keyword: %v", key1);
+        mrb_exc_set(mrb, mrb_exc_new_str(mrb, E_ARGUMENT_ERROR, str));
+        goto L_RAISE;
+      }
+      NEXT;
+    }
+
+    CASE(OP_BREAK, B) {
+      c = OP_R_BREAK;
+      goto L_RETURN;
+    }
+    CASE(OP_RETURN_BLK, B) {
+      c = OP_R_RETURN;
+      goto L_RETURN;
+    }
+    CASE(OP_RETURN, B)
+    c = OP_R_NORMAL;
+    L_RETURN:
+    {
+       mrb_callinfo *ci;
+
+#define ecall_adjust() do {\
+  ptrdiff_t cioff = ci - mrb->c->cibase;\
+  ecall(mrb);\
+  ci = mrb->c->cibase + cioff;\
+} while (0)
+
+      ci = mrb->c->ci;
+      if (ci->mid) {
+        mrb_value blk;
+
+        if (ci->argc < 0) {
+          blk = regs[2];
+        }
+        else {
+          blk = regs[ci->argc+1];
+        }
+        if (mrb_proc_p(blk)) {
+          struct RProc *p = mrb_proc_ptr(blk);
+
+          if (!MRB_PROC_STRICT_P(p) &&
+              ci > mrb->c->cibase && MRB_PROC_ENV(p) == ci[-1].env) {
+            p->flags |= MRB_PROC_ORPHAN;
+          }
+        }
+      }
+
+      if (mrb->exc) {
+        mrb_callinfo *ci0;
+
+      L_RAISE:
+        ci0 = ci = mrb->c->ci;
+        if (ci == mrb->c->cibase) {
+          if (ci->ridx == 0) goto L_FTOP;
+          goto L_RESCUE;
+        }
+        while (ci[0].ridx == ci[-1].ridx) {
+          cipop(mrb);
+          mrb->c->stack = ci->stackent;
+          if (ci->acc == CI_ACC_SKIP && prev_jmp) {
+            mrb->jmp = prev_jmp;
+            MRB_THROW(prev_jmp);
+          }
+          ci = mrb->c->ci;
+          if (ci == mrb->c->cibase) {
+            if (ci->ridx == 0) {
+            L_FTOP:             /* fiber top */
+              if (mrb->c == mrb->root_c) {
+                mrb->c->stack = mrb->c->stbase;
+                goto L_STOP;
+              }
+              else {
+                struct mrb_context *c = mrb->c;
+
+                while (c->eidx > ci->epos) {
+                  ecall_adjust();
+                }
+                c->status = MRB_FIBER_TERMINATED;
+                mrb->c = c->prev;
+                c->prev = NULL;
+                goto L_RAISE;
+              }
+            }
+            break;
+          }
+          /* call ensure only when we skip this callinfo */
+          if (ci[0].ridx == ci[-1].ridx) {
+            while (mrb->c->eidx > ci->epos) {
+              ecall_adjust();
+            }
+          }
+        }
+      L_RESCUE:
+        if (ci->ridx == 0) goto L_STOP;
+        proc = ci->proc;
+        irep = proc->body.irep;
+        pool = irep->pool;
+        syms = irep->syms;
+        if (ci < ci0) {
+          mrb->c->stack = ci[1].stackent;
+        }
+        mrb_stack_extend(mrb, irep->nregs);
+        pc = irep->iseq+mrb->c->rescue[--ci->ridx];
+      }
+      else {
+        int acc;
+        mrb_value v;
+        struct RProc *dst;
+
+        ci = mrb->c->ci;
+        v = regs[a];
+        mrb_gc_protect(mrb, v);
+        switch (c) {
+        case OP_R_RETURN:
+          /* Fall through to OP_R_NORMAL otherwise */
+          if (ci->acc >=0 && MRB_PROC_ENV_P(proc) && !MRB_PROC_STRICT_P(proc)) {
+            mrb_callinfo *cibase = mrb->c->cibase;
+            dst = top_proc(mrb, proc);
+
+            if (MRB_PROC_ENV_P(dst)) {
+              struct REnv *e = MRB_PROC_ENV(dst);
+
+              if (!MRB_ENV_STACK_SHARED_P(e) || (e->cxt && e->cxt != mrb->c)) {
+                localjump_error(mrb, LOCALJUMP_ERROR_RETURN);
+                goto L_RAISE;
+              }
+            }
+            while (cibase <= ci && ci->proc != dst) {
+              if (ci->acc < 0) {
+                localjump_error(mrb, LOCALJUMP_ERROR_RETURN);
+                goto L_RAISE;
+              }
+              ci--;
+            }
+            if (ci <= cibase) {
+              localjump_error(mrb, LOCALJUMP_ERROR_RETURN);
+              goto L_RAISE;
+            }
+            break;
+          }
+          /* fallthrough */
+        case OP_R_NORMAL:
+        NORMAL_RETURN:
+          if (ci == mrb->c->cibase) {
+            struct mrb_context *c = mrb->c;
+
+            if (!c->prev) { /* toplevel return */
+              regs[irep->nlocals] = v;
+              goto L_STOP;
+            }
+            if (c->prev->ci == c->prev->cibase) {
+              mrb_value exc = mrb_exc_new_str_lit(mrb, E_FIBER_ERROR, "double resume");
+              mrb_exc_set(mrb, exc);
+              goto L_RAISE;
+            }
+            while (c->eidx > 0) {
+              ecall(mrb);
+            }
+            /* automatic yield at the end */
+            c->status = MRB_FIBER_TERMINATED;
+            mrb->c = c->prev;
+            c->prev = NULL;
+            mrb->c->status = MRB_FIBER_RUNNING;
+            ci = mrb->c->ci;
+          }
+          break;
+        case OP_R_BREAK:
+          if (MRB_PROC_STRICT_P(proc)) goto NORMAL_RETURN;
+          if (MRB_PROC_ORPHAN_P(proc)) {
+            mrb_value exc;
+
+          L_BREAK_ERROR:
+            exc = mrb_exc_new_str_lit(mrb, E_LOCALJUMP_ERROR,
+                                      "break from proc-closure");
+            mrb_exc_set(mrb, exc);
+            goto L_RAISE;
+          }
+          if (!MRB_PROC_ENV_P(proc) || !MRB_ENV_STACK_SHARED_P(MRB_PROC_ENV(proc))) {
+            goto L_BREAK_ERROR;
+          }
+          else {
+            struct REnv *e = MRB_PROC_ENV(proc);
+
+            if (e->cxt != mrb->c) {
+              goto L_BREAK_ERROR;
+            }
+          }
+          while (mrb->c->eidx > mrb->c->ci->epos) {
+            ecall_adjust();
+          }
+          /* break from fiber block */
+          if (ci == mrb->c->cibase && ci->pc) {
+            struct mrb_context *c = mrb->c;
+
+            mrb->c = c->prev;
+            c->prev = NULL;
+            ci = mrb->c->ci;
+          }
+          if (ci->acc < 0) {
+            mrb_gc_arena_restore(mrb, ai);
+            mrb->c->vmexec = FALSE;
+            mrb->exc = (struct RObject*)break_new(mrb, proc, v);
+            mrb->jmp = prev_jmp;
+            MRB_THROW(prev_jmp);
+          }
+          if (FALSE) {
+          L_BREAK:
+            v = mrb_break_value_get((struct RBreak*)mrb->exc);
+            proc = mrb_break_proc_get((struct RBreak*)mrb->exc);
+            mrb->exc = NULL;
+            ci = mrb->c->ci;
+          }
+          mrb->c->stack = ci->stackent;
+          proc = proc->upper;
+          while (mrb->c->cibase < ci &&  ci[-1].proc != proc) {
+            if (ci[-1].acc == CI_ACC_SKIP) {
+              while (ci < mrb->c->ci) {
+                cipop(mrb);
+              }
+              goto L_BREAK_ERROR;
+            }
+            ci--;
+          }
+          if (ci == mrb->c->cibase) {
+            goto L_BREAK_ERROR;
+          }
+          break;
+        default:
+          /* cannot happen */
+          break;
+        }
+        while (ci < mrb->c->ci) {
+          cipop(mrb);
+        }
+        ci[0].ridx = ci[-1].ridx;
+        while (mrb->c->eidx > ci->epos) {
+          ecall_adjust();
+        }
+        if (mrb->c->vmexec && !ci->target_class) {
+          mrb_gc_arena_restore(mrb, ai);
+          mrb->c->vmexec = FALSE;
+          mrb->jmp = prev_jmp;
+          return v;
+        }
+        acc = ci->acc;
+        mrb->c->stack = ci->stackent;
+        cipop(mrb);
+        if (acc == CI_ACC_SKIP || acc == CI_ACC_DIRECT) {
+          mrb_gc_arena_restore(mrb, ai);
+          mrb->jmp = prev_jmp;
+          return v;
+        }
+        pc = ci->pc;
+        ci = mrb->c->ci;
+        DEBUG(fprintf(stderr, "from :%s\n", mrb_sym_name(mrb, ci->mid)));
+        proc = mrb->c->ci->proc;
+        irep = proc->body.irep;
+        pool = irep->pool;
+        syms = irep->syms;
+
+        regs[acc] = v;
+        mrb_gc_arena_restore(mrb, ai);
+      }
+      JUMP;
+    }
+
+    CASE(OP_BLKPUSH, BS) {
+      int m1 = (b>>11)&0x3f;
+      int r  = (b>>10)&0x1;
+      int m2 = (b>>5)&0x1f;
+      int kd = (b>>4)&0x1;
+      int lv = (b>>0)&0xf;
+      mrb_value *stack;
+
+      if (lv == 0) stack = regs + 1;
+      else {
+        struct REnv *e = uvenv(mrb, lv-1);
+        if (!e || (!MRB_ENV_STACK_SHARED_P(e) && e->mid == 0) ||
+            MRB_ENV_STACK_LEN(e) <= m1+r+m2+1) {
+          localjump_error(mrb, LOCALJUMP_ERROR_YIELD);
+          goto L_RAISE;
+        }
+        stack = e->stack + 1;
+      }
+      if (mrb_nil_p(stack[m1+r+m2])) {
+        localjump_error(mrb, LOCALJUMP_ERROR_YIELD);
+        goto L_RAISE;
+      }
+      regs[a] = stack[m1+r+m2+kd];
+      NEXT;
+    }
+
+#define TYPES2(a,b) ((((uint16_t)(a))<<8)|(((uint16_t)(b))&0xff))
+#define OP_MATH(op_name)                                                    \
+  /* need to check if op is overridden */                                   \
+  switch (TYPES2(mrb_type(regs[a]),mrb_type(regs[a+1]))) {                  \
+    OP_MATH_CASE_FIXNUM(op_name);                                           \
+    OP_MATH_CASE_FLOAT(op_name, fixnum, float);                             \
+    OP_MATH_CASE_FLOAT(op_name, float,  fixnum);                            \
+    OP_MATH_CASE_FLOAT(op_name, float,  float);                             \
+    OP_MATH_CASE_STRING_##op_name();                                        \
+    default:                                                                \
+      c = 1;                                                                \
+      mid = mrb_intern_lit(mrb, MRB_STRINGIZE(OP_MATH_OP_##op_name));       \
+      goto L_SEND_SYM;                                                      \
+  }                                                                         \
+  NEXT;
+#define OP_MATH_CASE_FIXNUM(op_name)                                        \
+  case TYPES2(MRB_TT_FIXNUM, MRB_TT_FIXNUM):                                \
+    {                                                                       \
+      mrb_int x = mrb_fixnum(regs[a]), y = mrb_fixnum(regs[a+1]), z;        \
+      if (mrb_int_##op_name##_overflow(x, y, &z))                           \
+        OP_MATH_OVERFLOW_INT(op_name, x, y, z);                             \
+      else                                                                  \
+        SET_INT_VALUE(regs[a], z);                                          \
+    }                                                                       \
+    break
+#ifdef MRB_WITHOUT_FLOAT
+#define OP_MATH_CASE_FLOAT(op_name, t1, t2) (void)0
+#define OP_MATH_OVERFLOW_INT(op_name, x, y, z) SET_INT_VALUE(regs[a], z)
+#else
+#define OP_MATH_CASE_FLOAT(op_name, t1, t2)                                     \
+  case TYPES2(OP_MATH_TT_##t1, OP_MATH_TT_##t2):                                \
+    {                                                                           \
+      mrb_float z = mrb_##t1(regs[a]) OP_MATH_OP_##op_name mrb_##t2(regs[a+1]); \
+      SET_FLOAT_VALUE(mrb, regs[a], z);                                         \
+    }                                                                           \
+    break
+#define OP_MATH_OVERFLOW_INT(op_name, x, y, z) \
+  SET_FLOAT_VALUE(mrb, regs[a], (mrb_float)x OP_MATH_OP_##op_name (mrb_float)y)
+#endif
+#define OP_MATH_CASE_STRING_add()                                           \
+  case TYPES2(MRB_TT_STRING, MRB_TT_STRING):                                \
+    regs[a] = mrb_str_plus(mrb, regs[a], regs[a+1]);                        \
+    mrb_gc_arena_restore(mrb, ai);                                          \
+    break
+#define OP_MATH_CASE_STRING_sub() (void)0
+#define OP_MATH_CASE_STRING_mul() (void)0
+#define OP_MATH_OP_add +
+#define OP_MATH_OP_sub -
+#define OP_MATH_OP_mul *
+#define OP_MATH_TT_fixnum MRB_TT_FIXNUM
+#define OP_MATH_TT_float  MRB_TT_FLOAT
+
+    CASE(OP_ADD, B) {
+      OP_MATH(add);
+    }
+
+    CASE(OP_SUB, B) {
+      OP_MATH(sub);
+    }
+
+    CASE(OP_MUL, B) {
+      OP_MATH(mul);
+    }
+
+    CASE(OP_DIV, B) {
+#ifndef MRB_WITHOUT_FLOAT
+      double x, y, f;
+#endif
+
+      /* need to check if op is overridden */
+      switch (TYPES2(mrb_type(regs[a]),mrb_type(regs[a+1]))) {
+      case TYPES2(MRB_TT_FIXNUM,MRB_TT_FIXNUM):
+#ifdef MRB_WITHOUT_FLOAT
+        {
+          mrb_int x = mrb_fixnum(regs[a]);
+          mrb_int y = mrb_fixnum(regs[a+1]);
+          SET_INT_VALUE(regs[a], y ? x / y : 0);
+        }
+        break;
+#else
+        x = (mrb_float)mrb_fixnum(regs[a]);
+        y = (mrb_float)mrb_fixnum(regs[a+1]);
+        break;
+      case TYPES2(MRB_TT_FIXNUM,MRB_TT_FLOAT):
+        x = (mrb_float)mrb_fixnum(regs[a]);
+        y = mrb_float(regs[a+1]);
+        break;
+      case TYPES2(MRB_TT_FLOAT,MRB_TT_FIXNUM):
+        x = mrb_float(regs[a]);
+        y = (mrb_float)mrb_fixnum(regs[a+1]);
+        break;
+      case TYPES2(MRB_TT_FLOAT,MRB_TT_FLOAT):
+        x = mrb_float(regs[a]);
+        y = mrb_float(regs[a+1]);
+        break;
+#endif
+      default:
+        c = 1;
+        mid = mrb_intern_lit(mrb, "/");
+        goto L_SEND_SYM;
+      }
+
+#ifndef MRB_WITHOUT_FLOAT
+      if (y == 0) {
+        if (x > 0) f = INFINITY;
+        else if (x < 0) f = -INFINITY;
+        else /* if (x == 0) */ f = NAN;
+      }
+      else {
+        f = x / y;
+      }
+      SET_FLOAT_VALUE(mrb, regs[a], f);
+#endif
+      NEXT;
+    }
+
+#define OP_MATHI(op_name)                                                   \
+  /* need to check if op is overridden */                                   \
+  switch (mrb_type(regs[a])) {                                              \
+    OP_MATHI_CASE_FIXNUM(op_name);                                          \
+    OP_MATHI_CASE_FLOAT(op_name);                                           \
+    default:                                                                \
+      SET_INT_VALUE(regs[a+1], b);                                          \
+      c = 1;                                                                \
+      mid = mrb_intern_lit(mrb, MRB_STRINGIZE(OP_MATH_OP_##op_name));       \
+      goto L_SEND_SYM;                                                      \
+  }                                                                         \
+  NEXT;
+#define OP_MATHI_CASE_FIXNUM(op_name)                                       \
+  case MRB_TT_FIXNUM:                                                       \
+    {                                                                       \
+      mrb_int x = mrb_fixnum(regs[a]), y = (mrb_int)b, z;                   \
+      if (mrb_int_##op_name##_overflow(x, y, &z))                           \
+        OP_MATH_OVERFLOW_INT(op_name, x, y, z);                             \
+      else                                                                  \
+        SET_INT_VALUE(regs[a], z);                                          \
+    }                                                                       \
+    break
+#ifdef MRB_WITHOUT_FLOAT
+#define OP_MATHI_CASE_FLOAT(op_name) (void)0
+#else
+#define OP_MATHI_CASE_FLOAT(op_name)                                        \
+  case MRB_TT_FLOAT:                                                        \
+    {                                                                       \
+      mrb_float z = mrb_float(regs[a]) OP_MATH_OP_##op_name b;              \
+      SET_FLOAT_VALUE(mrb, regs[a], z);                                     \
+    }                                                                       \
+    break
+#endif
+
+    CASE(OP_ADDI, BB) {
+      OP_MATHI(add);
+    }
+
+    CASE(OP_SUBI, BB) {
+      OP_MATHI(sub);
+    }
+
+#define OP_CMP_BODY(op,v1,v2) (v1(regs[a]) op v2(regs[a+1]))
+
+#ifdef MRB_WITHOUT_FLOAT
+#define OP_CMP(op) do {\
+  int result;\
+  /* need to check if - is overridden */\
+  switch (TYPES2(mrb_type(regs[a]),mrb_type(regs[a+1]))) {\
+  case TYPES2(MRB_TT_FIXNUM,MRB_TT_FIXNUM):\
+    result = OP_CMP_BODY(op,mrb_fixnum,mrb_fixnum);\
+    break;\
+  default:\
+    c = 1;\
+    mid = mrb_intern_lit(mrb, # op);\
+    goto L_SEND_SYM;\
+  }\
+  if (result) {\
+    SET_TRUE_VALUE(regs[a]);\
+  }\
+  else {\
+    SET_FALSE_VALUE(regs[a]);\
+  }\
+} while(0)
+#else
+#define OP_CMP(op) do {\
+  int result;\
+  /* need to check if - is overridden */\
+  switch (TYPES2(mrb_type(regs[a]),mrb_type(regs[a+1]))) {\
+  case TYPES2(MRB_TT_FIXNUM,MRB_TT_FIXNUM):\
+    result = OP_CMP_BODY(op,mrb_fixnum,mrb_fixnum);\
+    break;\
+  case TYPES2(MRB_TT_FIXNUM,MRB_TT_FLOAT):\
+    result = OP_CMP_BODY(op,mrb_fixnum,mrb_float);\
+    break;\
+  case TYPES2(MRB_TT_FLOAT,MRB_TT_FIXNUM):\
+    result = OP_CMP_BODY(op,mrb_float,mrb_fixnum);\
+    break;\
+  case TYPES2(MRB_TT_FLOAT,MRB_TT_FLOAT):\
+    result = OP_CMP_BODY(op,mrb_float,mrb_float);\
+    break;\
+  default:\
+    c = 1;\
+    mid = mrb_intern_lit(mrb, # op);\
+    goto L_SEND_SYM;\
+  }\
+  if (result) {\
+    SET_TRUE_VALUE(regs[a]);\
+  }\
+  else {\
+    SET_FALSE_VALUE(regs[a]);\
+  }\
+} while(0)
+#endif
+
+    CASE(OP_EQ, B) {
+      if (mrb_obj_eq(mrb, regs[a], regs[a+1])) {
+        SET_TRUE_VALUE(regs[a]);
+      }
+      else {
+        OP_CMP(==);
+      }
+      NEXT;
+    }
+
+    CASE(OP_LT, B) {
+      OP_CMP(<);
+      NEXT;
+    }
+
+    CASE(OP_LE, B) {
+      OP_CMP(<=);
+      NEXT;
+    }
+
+    CASE(OP_GT, B) {
+      OP_CMP(>);
+      NEXT;
+    }
+
+    CASE(OP_GE, B) {
+      OP_CMP(>=);
+      NEXT;
+    }
+
+    CASE(OP_ARRAY, BB) {
+      mrb_value v = mrb_ary_new_from_values(mrb, b, &regs[a]);
+      regs[a] = v;
+      mrb_gc_arena_restore(mrb, ai);
+      NEXT;
+    }
+    CASE(OP_ARRAY2, BBB) {
+      mrb_value v = mrb_ary_new_from_values(mrb, c, &regs[b]);
+      regs[a] = v;
+      mrb_gc_arena_restore(mrb, ai);
+      NEXT;
+    }
+
+    CASE(OP_ARYCAT, B) {
+      mrb_value splat = mrb_ary_splat(mrb, regs[a+1]);
+      if (mrb_nil_p(regs[a])) {
+        regs[a] = splat;
+      }
+      else {
+        mrb_ary_concat(mrb, regs[a], splat);
+      }
+      mrb_gc_arena_restore(mrb, ai);
+      NEXT;
+    }
+
+    CASE(OP_ARYPUSH, B) {
+      mrb_ary_push(mrb, regs[a], regs[a+1]);
+      NEXT;
+    }
+
+    CASE(OP_ARYDUP, B) {
+      mrb_value ary = regs[a];
+      if (mrb_array_p(ary)) {
+        ary = mrb_ary_new_from_values(mrb, RARRAY_LEN(ary), RARRAY_PTR(ary));
+      }
+      else {
+        ary = mrb_ary_new_from_values(mrb, 1, &ary);
+      }
+      regs[a] = ary;
+      NEXT;
+    }
+
+    CASE(OP_AREF, BBB) {
+      mrb_value v = regs[b];
+
+      if (!mrb_array_p(v)) {
+        if (c == 0) {
+          regs[a] = v;
+        }
+        else {
+          SET_NIL_VALUE(regs[a]);
+        }
+      }
+      else {
+        v = mrb_ary_ref(mrb, v, c);
+        regs[a] = v;
+      }
+      NEXT;
+    }
+
+    CASE(OP_ASET, BBB) {
+      mrb_ary_set(mrb, regs[b], c, regs[a]);
+      NEXT;
+    }
+
+    CASE(OP_APOST, BBB) {
+      mrb_value v = regs[a];
+      int pre  = b;
+      int post = c;
+      struct RArray *ary;
+      int len, idx;
+
+      if (!mrb_array_p(v)) {
+        v = mrb_ary_new_from_values(mrb, 1, &regs[a]);
+      }
+      ary = mrb_ary_ptr(v);
+      len = (int)ARY_LEN(ary);
+      if (len > pre + post) {
+        v = mrb_ary_new_from_values(mrb, len - pre - post, ARY_PTR(ary)+pre);
+        regs[a++] = v;
+        while (post--) {
+          regs[a++] = ARY_PTR(ary)[len-post-1];
+        }
+      }
+      else {
+        v = mrb_ary_new_capa(mrb, 0);
+        regs[a++] = v;
+        for (idx=0; idx+pre<len; idx++) {
+          regs[a+idx] = ARY_PTR(ary)[pre+idx];
+        }
+        while (idx < post) {
+          SET_NIL_VALUE(regs[a+idx]);
+          idx++;
+        }
+      }
+      mrb_gc_arena_restore(mrb, ai);
+      NEXT;
+    }
+
+    CASE(OP_INTERN, B) {
+      mrb_sym sym = mrb_intern_str(mrb, regs[a]);
+
+      regs[a] = mrb_symbol_value(sym);
+      mrb_gc_arena_restore(mrb, ai);
+      NEXT;
+    }
+
+    CASE(OP_STRING, BB) {
+      mrb_value str = mrb_str_dup(mrb, pool[b]);
+
+      regs[a] = str;
+      mrb_gc_arena_restore(mrb, ai);
+      NEXT;
+    }
+
+    CASE(OP_STRCAT, B) {
+      mrb_str_concat(mrb, regs[a], regs[a+1]);
+      NEXT;
+    }
+
+    CASE(OP_HASH, BB) {
+      mrb_value hash = mrb_hash_new_capa(mrb, b);
+      int i;
+      int lim = a+b*2;
+
+      for (i=a; i<lim; i+=2) {
+        mrb_hash_set(mrb, hash, regs[i], regs[i+1]);
+      }
+      regs[a] = hash;
+      mrb_gc_arena_restore(mrb, ai);
+      NEXT;
+    }
+
+    CASE(OP_HASHADD, BB) {
+      mrb_value hash;
+      int i;
+      int lim = a+b*2+1;
+
+      hash = mrb_ensure_hash_type(mrb, regs[a]);
+      for (i=a+1; i<lim; i+=2) {
+        mrb_hash_set(mrb, hash, regs[i], regs[i+1]);
+      }
+      mrb_gc_arena_restore(mrb, ai);
+      NEXT;
+    }
+    CASE(OP_HASHCAT, B) {
+      mrb_value hash = mrb_ensure_hash_type(mrb, regs[a]);
+
+      mrb_hash_merge(mrb, hash, regs[a+1]);
+      mrb_gc_arena_restore(mrb, ai);
+      NEXT;
+    }
+
+    CASE(OP_LAMBDA, BB)
+    c = OP_L_LAMBDA;
+    L_MAKE_LAMBDA:
+    {
+      struct RProc *p;
+      mrb_irep *nirep = irep->reps[b];
+
+      if (c & OP_L_CAPTURE) {
+        p = mrb_closure_new(mrb, nirep);
+      }
+      else {
+        p = mrb_proc_new(mrb, nirep);
+        p->flags |= MRB_PROC_SCOPE;
+      }
+      if (c & OP_L_STRICT) p->flags |= MRB_PROC_STRICT;
+      regs[a] = mrb_obj_value(p);
+      mrb_gc_arena_restore(mrb, ai);
+      NEXT;
+    }
+    CASE(OP_BLOCK, BB) {
+      c = OP_L_BLOCK;
+      goto L_MAKE_LAMBDA;
+    }
+    CASE(OP_METHOD, BB) {
+      c = OP_L_METHOD;
+      goto L_MAKE_LAMBDA;
+    }
+
+    CASE(OP_RANGE_INC, B) {
+      mrb_value val = mrb_range_new(mrb, regs[a], regs[a+1], FALSE);
+      regs[a] = val;
+      mrb_gc_arena_restore(mrb, ai);
+      NEXT;
+    }
+
+    CASE(OP_RANGE_EXC, B) {
+      mrb_value val = mrb_range_new(mrb, regs[a], regs[a+1], TRUE);
+      regs[a] = val;
+      mrb_gc_arena_restore(mrb, ai);
+      NEXT;
+    }
+
+    CASE(OP_OCLASS, B) {
+      regs[a] = mrb_obj_value(mrb->object_class);
+      NEXT;
+    }
+
+    CASE(OP_CLASS, BB) {
+      struct RClass *c = 0, *baseclass;
+      mrb_value base, super;
+      mrb_sym id = syms[b];
+
+      base = regs[a];
+      super = regs[a+1];
+      if (mrb_nil_p(base)) {
+        baseclass = MRB_PROC_TARGET_CLASS(mrb->c->ci->proc);
+        base = mrb_obj_value(baseclass);
+      }
+      c = mrb_vm_define_class(mrb, base, super, id);
+      regs[a] = mrb_obj_value(c);
+      mrb_gc_arena_restore(mrb, ai);
+      NEXT;
+    }
+
+    CASE(OP_MODULE, BB) {
+      struct RClass *cls = 0, *baseclass;
+      mrb_value base;
+      mrb_sym id = syms[b];
+
+      base = regs[a];
+      if (mrb_nil_p(base)) {
+        baseclass = MRB_PROC_TARGET_CLASS(mrb->c->ci->proc);
+        base = mrb_obj_value(baseclass);
+      }
+      cls = mrb_vm_define_module(mrb, base, id);
+      regs[a] = mrb_obj_value(cls);
+      mrb_gc_arena_restore(mrb, ai);
+      NEXT;
+    }
+
+    CASE(OP_EXEC, BB) {
+      mrb_callinfo *ci;
+      mrb_value recv = regs[a];
+      struct RProc *p;
+      mrb_irep *nirep = irep->reps[b];
+
+      /* prepare closure */
+      p = mrb_proc_new(mrb, nirep);
+      p->c = NULL;
+      mrb_field_write_barrier(mrb, (struct RBasic*)p, (struct RBasic*)proc);
+      MRB_PROC_SET_TARGET_CLASS(p, mrb_class_ptr(recv));
+      p->flags |= MRB_PROC_SCOPE;
+
+      /* prepare call stack */
+      ci = cipush(mrb);
+      ci->pc = pc;
+      ci->acc = a;
+      ci->mid = 0;
+      ci->stackent = mrb->c->stack;
+      ci->argc = 0;
+      ci->target_class = mrb_class_ptr(recv);
+
+      /* prepare stack */
+      mrb->c->stack += a;
+
+      /* setup block to call */
+      ci->proc = p;
+
+      irep = p->body.irep;
+      pool = irep->pool;
+      syms = irep->syms;
+      mrb_stack_extend(mrb, irep->nregs);
+      stack_clear(regs+1, irep->nregs-1);
+      pc = irep->iseq;
+      JUMP;
+    }
+
+    CASE(OP_DEF, BB) {
+      struct RClass *target = mrb_class_ptr(regs[a]);
+      struct RProc *p = mrb_proc_ptr(regs[a+1]);
+      mrb_method_t m;
+
+      MRB_METHOD_FROM_PROC(m, p);
+      mrb_define_method_raw(mrb, target, syms[b], m);
+      mrb_gc_arena_restore(mrb, ai);
+      NEXT;
+    }
+
+    CASE(OP_SCLASS, B) {
+      regs[a] = mrb_singleton_class(mrb, regs[a]);
+      mrb_gc_arena_restore(mrb, ai);
+      NEXT;
+    }
+
+    CASE(OP_TCLASS, B) {
+      if (!check_target_class(mrb)) goto L_RAISE;
+      regs[a] = mrb_obj_value(mrb->c->ci->target_class);
+      NEXT;
+    }
+
+    CASE(OP_ALIAS, BB) {
+      struct RClass *target;
+
+      if (!check_target_class(mrb)) goto L_RAISE;
+      target = mrb->c->ci->target_class;
+      mrb_alias_method(mrb, target, syms[a], syms[b]);
+      NEXT;
+    }
+    CASE(OP_UNDEF, B) {
+      struct RClass *target;
+
+      if (!check_target_class(mrb)) goto L_RAISE;
+      target = mrb->c->ci->target_class;
+      mrb_undef_method_id(mrb, target, syms[a]);
+      NEXT;
+    }
+
+    CASE(OP_DEBUG, Z) {
+      FETCH_BBB();
+#ifdef MRB_ENABLE_DEBUG_HOOK
+      mrb->debug_op_hook(mrb, irep, pc, regs);
+#else
+#ifndef MRB_DISABLE_STDIO
+      printf("OP_DEBUG %d %d %d\n", a, b, c);
+#else
+      abort();
+#endif
+#endif
+      NEXT;
+    }
+
+    CASE(OP_ERR, B) {
+      mrb_value msg = mrb_str_dup(mrb, pool[a]);
+      mrb_value exc;
+
+      exc = mrb_exc_new_str(mrb, E_LOCALJUMP_ERROR, msg);
+      ERR_PC_SET(mrb);
+      mrb_exc_set(mrb, exc);
+      goto L_RAISE;
+    }
+
+    CASE(OP_EXT1, Z) {
+      insn = READ_B();
+      switch (insn) {
+#define OPCODE(insn,ops) case OP_ ## insn: FETCH_ ## ops ## _1(); goto L_OP_ ## insn ## _BODY;
+#include "mruby/ops.h"
+#undef OPCODE
+      }
+      pc--;
+      NEXT;
+    }
+    CASE(OP_EXT2, Z) {
+      insn = READ_B();
+      switch (insn) {
+#define OPCODE(insn,ops) case OP_ ## insn: FETCH_ ## ops ## _2(); goto L_OP_ ## insn ## _BODY;
+#include "mruby/ops.h"
+#undef OPCODE
+      }
+      pc--;
+      NEXT;
+    }
+    CASE(OP_EXT3, Z) {
+      uint8_t insn = READ_B();
+      switch (insn) {
+#define OPCODE(insn,ops) case OP_ ## insn: FETCH_ ## ops ## _3(); goto L_OP_ ## insn ## _BODY;
+#include "mruby/ops.h"
+#undef OPCODE
+      }
+      pc--;
+      NEXT;
+    }
+
+    CASE(OP_STOP, Z) {
+      /*        stop VM */
+    L_STOP:
+      while (mrb->c->eidx > 0) {
+        ecall(mrb);
+      }
+      mrb->c->cibase->ridx = 0;
+      ERR_PC_CLR(mrb);
+      mrb->jmp = prev_jmp;
+      if (mrb->exc) {
+        return mrb_obj_value(mrb->exc);
+      }
+      return regs[irep->nlocals];
+    }
+  }
+  END_DISPATCH;
+#undef regs
+  }
+  MRB_CATCH(&c_jmp) {
+    exc_catched = TRUE;
+    goto RETRY_TRY_BLOCK;
+  }
+  MRB_END_EXC(&c_jmp);
+}
+
+MRB_API mrb_value
+mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self)
+{
+  if (mrb->c->ci->argc < 0) {
+    return mrb_vm_run(mrb, proc, self, 3); /* receiver, args and block) */
+  }
+  else {
+    return mrb_vm_run(mrb, proc, self, mrb->c->ci->argc + 2); /* argc + 2 (receiver and block) */
+  }
+}
+
+MRB_API mrb_value
+mrb_top_run(mrb_state *mrb, struct RProc *proc, mrb_value self, unsigned int stack_keep)
+{
+  mrb_callinfo *ci;
+  mrb_value v;
+
+  if (!mrb->c->cibase) {
+    return mrb_vm_run(mrb, proc, self, stack_keep);
+  }
+  if (mrb->c->ci == mrb->c->cibase) {
+    mrb->c->ci->env = NULL;
+    return mrb_vm_run(mrb, proc, self, stack_keep);
+  }
+  ci = cipush(mrb);
+  ci->stackent = mrb->c->stack;
+  ci->mid = 0;
+  ci->acc = CI_ACC_SKIP;
+  ci->target_class = mrb->object_class;
+  v = mrb_vm_run(mrb, proc, self, stack_keep);
+
+  return v;
+}
+
+#if defined(MRB_ENABLE_CXX_EXCEPTION) && defined(__cplusplus)
+# if !defined(MRB_ENABLE_CXX_ABI)
+} /* end of extern "C" */
+# endif
+mrb_int mrb_jmpbuf::jmpbuf_id = 0;
+# if !defined(MRB_ENABLE_CXX_ABI)
+extern "C" {
+# endif
+#endif
Index: /EcnlProtoTool/trunk/mruby-2.1.1/tasks/benchmark.rake
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/tasks/benchmark.rake	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/tasks/benchmark.rake	(revision 439)
@@ -0,0 +1,91 @@
+module MRuby
+  BENCHMARK_REPEAT = 4
+end
+
+$dat_files = []
+
+def bm_files
+  Dir.glob("#{MRUBY_ROOT}/benchmark/bm_*.rb")
+end
+
+def build_config_name
+  if ENV['MRUBY_CONFIG']
+    File.basename(ENV['MRUBY_CONFIG'], '.rb').gsub('build_config_', '')
+  else
+    "build"
+  end
+end
+
+def plot_file
+  File.join(MRUBY_ROOT, 'benchmark', "#{build_config_name}.png")
+end
+
+def plot
+  opts_file = "#{MRUBY_ROOT}/benchmark/plot.gpl"
+  opts = File.read(opts_file).each_line.to_a.map(&:strip).join(';')
+
+  dat_files = $dat_files.group_by {|f| File.dirname(f).split(File::SEPARATOR)[-1]}
+
+  opts += ";set output '#{plot_file}'"
+
+  opts += ';plot '
+
+  opts += dat_files.keys.map do |data_file|
+    %Q['-' u 2:3:4:xtic(1) w hist title columnheader(1)]
+  end.join(',')
+  opts += ';'
+
+  cmd = %Q{gnuplot -p -e "#{opts}"}
+
+  IO.popen(cmd, 'w') do |p|
+    dat_files.each do |target_name, bm_files|
+      p.puts target_name.gsub('_', '-')
+      bm_files.each do |bm_file|
+        p.write File.read(bm_file)
+      end
+      p.puts "e"
+    end
+  end
+end
+
+
+MRuby.each_target do |target|
+  next if target.name == 'host'
+  mruby_bin = "#{target.build_dir}/bin/mruby"
+
+  bm_files.each do |bm_file|
+    bm_name = File.basename bm_file, ".rb"
+
+    dat_dir = File.join('benchmark', build_config_name, target.name)
+    dat_file = File.join(dat_dir, "#{bm_name}.dat")
+    $dat_files << dat_file
+
+    directory dat_dir
+
+    file dat_file => [bm_file, dat_dir, mruby_bin] do |task|
+      print bm_name
+      puts "..."
+
+      data = (0...MRuby::BENCHMARK_REPEAT).map do |n|
+        str = %x{(time -f "%e %S %U" #{mruby_bin} #{bm_file}) 2>&1 >/dev/null}
+        str.split(' ').map(&:to_f)
+      end
+
+      File.open(task.name, "w") do |f|
+        data = data.map {|_,r,s| (r + s) / 2.0}
+        min = data.min
+        max = data.max
+        avg = data.inject(&:+) / data.size
+        f.puts "#{bm_name.gsub('_', '-')} #{avg} #{min} #{max}"
+      end
+    end
+  end
+end
+
+file plot_file => $dat_files do
+  plot
+end
+
+task :benchmark => plot_file do
+  plot
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/tasks/doc.rake
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/tasks/doc.rake	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/tasks/doc.rake	(revision 439)
@@ -0,0 +1,48 @@
+desc 'generate document'
+task :doc => [:api_doc, :capi_doc] do
+
+end
+
+desc 'generate yard docs'
+task :api_doc do
+  begin
+    sh "mrbdoc"
+  rescue
+    puts "ERROR: To generate yard documentation, you should install yard-mruby gem."
+    puts "  $ gem install yard-mruby yard-coderay"
+  end
+end
+
+desc 'generate doxygen docs'
+task :capi_doc do
+  begin
+    sh "doxygen Doxyfile"
+  rescue
+    puts "ERROR: To generate C API documents, you need Doxygen."
+    puts "  $ sudo apt-get install doxygen"
+  end
+end
+
+desc 'clean all built docs'
+task :clean_api_doc do
+  rm_rf 'doc/api'
+end
+
+desc 'clean all built docs'
+task :clean_capi_doc do
+  rm_rf 'doc/capi'
+end
+
+desc 'clean all built docs'
+task :clean_doc => [:clean_api_doc, :clean_capi_doc] do
+end
+
+desc 'clean all built docs'
+task :view_api => [:api_doc] do
+  sh 'xdg-open doc/api/index.html'
+end
+
+desc 'clean all built docs'
+task :view_capi => [:capi_doc] do
+  sh 'xdg-open doc/capi/html/index.html'
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/tasks/gitlab.rake
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/tasks/gitlab.rake	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/tasks/gitlab.rake	(revision 439)
@@ -0,0 +1,115 @@
+CI_VERSION = '0.7'.freeze
+CI_BASE = 'ubuntu:16.10'.freeze
+CI_COMPILERS = ['gcc-4.7',
+                'gcc-4.8',
+                'gcc-4.9',
+                'gcc-5',
+                'gcc-6',
+                'clang-3.5',
+                'clang-3.6',
+                'clang-3.7',
+                'clang-3.8',
+                'clang-3.9'].freeze
+
+def ci_image_tag(compiler)
+  compiler.tr('+', 'c').delete('-').delete('.')
+end
+
+def ci_docker_tag(compiler)
+  tag = ci_image_tag(compiler)
+  "registry.gitlab.com/dabroz/mruby:#{tag}_#{CI_VERSION}"
+end
+
+def run_cmd(cmd)
+  puts cmd
+  raise 'error' unless system cmd
+end
+
+desc 'recreate docker images for GitLab builds'
+task :gitlab_dockers do
+  CI_COMPILERS.each do |compiler|
+    tag = ci_image_tag(compiler)
+    filename = "Dockerfile.#{tag}"
+    File.open(filename, 'wb') do |f|
+      f << "# #{compiler} - #{tag}\n"
+      f << "FROM #{CI_BASE}\n"
+      f << "RUN apt-get update && apt-get install -y git ruby2.3 ruby2.3-dev bison\n"
+      f << "RUN apt-get update && apt-get install -y binutils manpages\n"
+      f << "RUN apt-get update && apt-get install -y #{compiler}\n"
+      if compiler['gcc']
+        f << "RUN apt-get update && apt-get install -y libx32#{compiler}-dev\n"
+        f << "RUN apt-get update && apt-get install --no-install-recommends -y #{compiler}-multilib\n"
+      end
+      f << "RUN dpkg --add-architecture i386\n"
+      f << "RUN apt-get update && apt-get install -y linux-libc-dev:i386\n"
+      if compiler['clang']
+        f << "RUN apt-get update && apt-get install --no-install-recommends -y libc6-dev-i386\n"
+        f << "RUN apt-get update && apt-get install -y gcc gcc-multilib\n"
+      end
+    end
+    docker_tag = ci_docker_tag(compiler)
+    cmd1 = "docker build -t #{docker_tag} -f #{filename} ."
+    cmd2 = "docker push #{docker_tag}"
+    run_cmd cmd1
+    run_cmd cmd2
+    File.delete(filename)
+  end
+end
+
+desc 'create build configurations and update .gitlab-ci.yml'
+task :gitlab_config do
+  require 'yaml'
+
+  configs = []
+  [true, false].each do |mode_32|
+    ['', 'MRB_USE_FLOAT'].each do |float_conf|
+      ['', 'MRB_NAN_BOXING', 'MRB_WORD_BOXING'].each do |boxing_conf|
+        ['', 'MRB_UTF8_STRING'].each do |utf8_conf|
+          next if (float_conf == 'MRB_USE_FLOAT') && (boxing_conf == 'MRB_NAN_BOXING')
+          next if (int_conf == 'MRB_INT64') && (boxing_conf == 'MRB_NAN_BOXING')
+          next if (int_conf == 'MRB_INT64') && (boxing_conf == 'MRB_WORD_BOXING') && mode_32
+          env = [float_conf, int_conf, boxing_conf, utf8_conf].map do |conf|
+            conf == '' ? nil : "-D#{conf}=1"
+          end.compact.join(' ')
+          bit = mode_32 ? '-m32 ' : ''
+          _info = ''
+          _info += mode_32 ? '32bit ' : '64bit '
+          _info += float_conf['USE'] ? 'float ' : ''
+          _info += int_conf['16'] ? 'int16 ' : ''
+          _info += int_conf['64'] ? 'int64 ' : ''
+          _info += boxing_conf['NAN'] ? 'nan ' : ''
+          _info += boxing_conf['WORD'] ? 'word ' : ''
+          _info += utf8_conf['UTF8'] ? 'utf8 ' : ''
+          _info = _info.gsub(/ +/, ' ').strip.tr(' ', '_')
+          configs << { '_info' => _info, 'CFLAGS' => "#{bit}#{env}", 'LDFLAGS' => bit.strip.to_s }
+        end
+      end
+    end
+  end
+  path = './.gitlab-ci.yml'
+  data = YAML.load_file(path)
+  data.keys.select do |key|
+    key.start_with? 'Test'
+  end.each do |key|
+    data.delete(key)
+  end
+  CI_COMPILERS.each do |compiler|
+    configs.each do |config|
+      name = "Test #{compiler} #{config['_info']}"
+      hash = {
+        'CC' => compiler,
+        'CXX' => compiler.gsub('gcc', 'g++').gsub('clang', 'clang++'),
+        'LD' => compiler
+      }
+      hash = hash.merge(config)
+      hash.delete('_info')
+      data[name] = {
+        'stage' => 'test',
+        'image' => ci_docker_tag(compiler),
+        'variables' => hash,
+        'script' => 'env; rake --verbose all test'
+      }
+    end
+  end
+  File.open(path, 'w') { |f| YAML.dump(data, f) }
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/tasks/libmruby.rake
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/tasks/libmruby.rake	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/tasks/libmruby.rake	(revision 439)
@@ -0,0 +1,25 @@
+MRuby.each_target do
+  file libmruby_static => libmruby_objs.flatten do |t|
+    archiver.run t.name, t.prerequisites
+  end
+
+  file "#{build_dir}/lib/libmruby.flags.mak" => [__FILE__, libmruby_static] do |t|
+    mkdir_p File.dirname t.name
+    open(t.name, 'w') do |f|
+      f.puts "MRUBY_CFLAGS = #{cc.all_flags}"
+
+      gem_flags = gems.map { |g| g.linker.flags }
+      gem_library_paths = gems.map { |g| g.linker.library_paths }
+      f.puts "MRUBY_LDFLAGS = #{linker.all_flags(gem_library_paths, gem_flags)} #{linker.option_library_path % "#{build_dir}/lib"}"
+
+      gem_flags_before_libraries = gems.map { |g| g.linker.flags_before_libraries }
+      f.puts "MRUBY_LDFLAGS_BEFORE_LIBS = #{[linker.flags_before_libraries, gem_flags_before_libraries].flatten.join(' ')}"
+
+      gem_libraries = gems.map { |g| g.linker.libraries }
+      f.puts "MRUBY_LIBS = #{linker.option_library % 'mruby'} #{linker.library_flags(gem_libraries)}"
+
+      f.puts "MRUBY_LIBMRUBY_PATH = #{libmruby_static}"
+    end
+  end
+  task :all => "#{build_dir}/lib/libmruby.flags.mak"
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/tasks/mrbgems.rake
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/tasks/mrbgems.rake	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/tasks/mrbgems.rake	(revision 439)
@@ -0,0 +1,99 @@
+MRuby.each_target do
+  if enable_gems?
+    # set up all gems
+    gems.each(&:setup)
+    gems.check self
+
+    # loader all gems
+    self.libmruby_objs << objfile("#{build_dir}/mrbgems/gem_init")
+    file objfile("#{build_dir}/mrbgems/gem_init") => ["#{build_dir}/mrbgems/gem_init.c", "#{build_dir}/LEGAL"]
+    file "#{build_dir}/mrbgems/gem_init.c" => [MRUBY_CONFIG, __FILE__] do |t|
+      mkdir_p "#{build_dir}/mrbgems"
+      open(t.name, 'w') do |f|
+        gem_func_gems = gems.select { |g| g.generate_functions }
+        gem_func_decls = gem_func_gems.each_with_object('') do |g, s|
+          s << "void GENERATED_TMP_mrb_#{g.funcname}_gem_init(mrb_state*);\n" \
+               "void GENERATED_TMP_mrb_#{g.funcname}_gem_final(mrb_state*);\n"
+        end
+        gem_init_calls = gem_func_gems.each_with_object('') do |g, s|
+          s << "  GENERATED_TMP_mrb_#{g.funcname}_gem_init(mrb);\n"
+        end
+        gem_final_calls = gem_func_gems.reverse_each.with_object('') do |g, s|
+          s << "  GENERATED_TMP_mrb_#{g.funcname}_gem_final(mrb);\n"
+        end
+        f.puts %Q[/*]
+        f.puts %Q[ * This file contains a list of all]
+        f.puts %Q[ * initializing methods which are]
+        f.puts %Q[ * necessary to bootstrap all gems.]
+        f.puts %Q[ *]
+        f.puts %Q[ * IMPORTANT:]
+        f.puts %Q[ *   This file was generated!]
+        f.puts %Q[ *   All manual changes will get lost.]
+        f.puts %Q[ */]
+        f.puts %Q[]
+        f.puts %Q[#include <mruby.h>]
+        f.puts %Q[]
+        f.write gem_func_decls
+        unless gem_final_calls.empty?
+        f.puts %Q[]
+          f.puts %Q[static void]
+          f.puts %Q[mrb_final_mrbgems(mrb_state *mrb) {]
+          f.write gem_final_calls
+          f.puts %Q[}]
+        end
+        f.puts %Q[]
+        f.puts %Q[void]
+        f.puts %Q[mrb_init_mrbgems(mrb_state *mrb) {]
+        f.write gem_init_calls
+        f.puts %Q[  mrb_state_atexit(mrb, mrb_final_mrbgems);] unless gem_final_calls.empty?
+        f.puts %Q[}]
+      end
+    end
+  end
+
+  # legal documents
+  file "#{build_dir}/LEGAL" => [MRUBY_CONFIG, __FILE__] do |t|
+    mkdir_p File.dirname t.name
+    open(t.name, 'w+') do |f|
+     f.puts <<LEGAL
+Copyright (c) #{Time.now.year} mruby developers
+
+Permission is hereby granted, free of charge, to any person obtaining a
+copy of this software and associated documentation files (the "Software"),
+to deal in the Software without restriction, including without limitation
+the rights to use, copy, modify, merge, publish, distribute, sublicense,
+and/or sell copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
+LEGAL
+
+      if enable_gems?
+        f.puts <<GEMS_LEGAL
+
+Additional Licenses
+
+Due to the reason that you choosed additional mruby packages (GEMS),
+please check the following additional licenses too:
+GEMS_LEGAL
+
+        gems.map do |g|
+          authors = [g.authors].flatten.sort.join(", ")
+          f.puts
+          f.puts "GEM: #{g.name}"
+          f.puts "Copyright (c) #{Time.now.year} #{authors}"
+          f.puts "License: #{g.licenses}"
+        end
+      end
+    end
+  end
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/tasks/toolchains/android.rake
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/tasks/toolchains/android.rake	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/tasks/toolchains/android.rake	(revision 439)
@@ -0,0 +1,367 @@
+class MRuby::Toolchain::Android
+
+  DEFAULT_ARCH = 'armeabi' # TODO : Revise if arch should have a default
+
+  DEFAULT_TOOLCHAIN = :clang
+
+  DEFAULT_NDK_HOMES = %w{
+    /usr/local/opt/android-sdk/ndk-bundle
+    /usr/local/opt/android-ndk
+    ~/Android/Sdk/ndk-bundle
+    %LOCALAPPDATA%/Android/android-sdk/ndk-bundle
+    %LOCALAPPDATA%/Android/android-ndk
+    %LOCALAPPDATA%/Android/Sdk/ndk/*
+    ~/Library/Android/sdk/ndk-bundle
+    ~/Library/Android/ndk
+  }
+
+  TOOLCHAINS = [:clang, :gcc]
+
+  ARCHITECTURES = %w{
+    armeabi armeabi-v7a arm64-v8a
+    x86 x86_64
+    mips mips64
+  }
+
+  class AndroidNDKHomeNotFound < StandardError
+    def message
+        <<-EOM
+Couldn't find Android NDK Home.
+Set ANDROID_NDK_HOME environment variable or set :ndk_home parameter
+        EOM
+    end
+  end
+
+  class PlatformDirNotFound < StandardError
+    def message
+        <<-EOM
+Couldn't find Android NDK platform directories.
+Set ANDROID_PLATFORM environment variable or set :platform parameter
+        EOM
+    end
+  end
+
+  class SysrootNotReady < StandardError
+    def message
+      <<-EOM
+Couldn't find standard header files
+Please Move/Copy important file inside
+  <NDK_HOME>/sysroot/usr/include/
+to
+  <NDK_HOME>/platforms/<ANDROID_VERSION>/<ARCH>/usr/include/
+Higher NDK version will be use.
+      EOM
+    end
+  end
+
+  attr_reader :params
+
+  def initialize(params)
+    @params = params
+  end
+
+  def bin_gcc(command)
+    command = command.to_s
+
+    command = case arch
+      when /armeabi/    then 'arm-linux-androideabi-'
+      when /arm64-v8a/  then 'aarch64-linux-android-'
+      when /x86_64/     then 'x86_64-linux-android-'
+      when /x86/        then 'i686-linux-android-'
+      when /mips64/     then 'mips64el-linux-android-'
+      when /mips/       then 'mipsel-linux-android-'
+      end + command
+
+    gcc_toolchain_path.join('bin', command).to_s
+  end
+
+  def bin(command)
+    command = command.to_s
+    toolchain_path.join('bin', command).to_s
+  end
+
+  def home_path
+    @home_path ||= Pathname.new(
+      params[:ndk_home] ||
+      ENV['ANDROID_NDK_HOME'] ||
+      DEFAULT_NDK_HOMES.find { |path|
+        path.gsub! '%LOCALAPPDATA%', ENV['LOCALAPPDATA'] || '%LOCALAPPDATA%'
+        path.gsub! '\\', '/'
+        path.gsub! '~', Dir.home || '~'
+        path.gsub!('*') do
+          next nil unless path[-1] == "*"
+          dirs = Dir.glob(path).collect do |d|
+            m = d.match(/(\d+)\.(\d+)\.(\d+)$/)
+            m ? [m[1], m[2], m[3]].collect { |v| v.to_i } : nil
+          end
+          dirs.compact!
+          dirs.sort! do |before, after|
+            f = 0
+            if (f = (after.first <=> before.first)) != 0
+              next f
+            elsif (f = (after[1] <=> before[1])) != 0
+              next f
+            else
+              next after.last <=> before.last
+            end
+          end
+          dirs.empty? ? nil.to_s : dirs.first.join(".")
+        end
+        File.directory?(path)
+      } || raise(AndroidNDKHomeNotFound)
+    )
+  end
+
+  def toolchain
+    @toolchain ||= params.fetch(:toolchain){ DEFAULT_TOOLCHAIN }
+  end
+
+  def toolchain_path
+    @toolchain_path ||= case toolchain
+      when :gcc
+        gcc_toolchain_path
+      when :clang
+        home_path.join('toolchains', 'llvm' , 'prebuilt', host_platform)
+      end
+  end
+
+  def gcc_toolchain_path
+    if @gcc_toolchain_path === nil then
+      prefix = case arch
+        when /armeabi/    then 'arm-linux-androideabi-'
+        when /arm64-v8a/  then 'aarch64-linux-android-'
+        when /x86_64/     then 'x86_64-'
+        when /x86/        then 'x86-'
+        when /mips64/     then 'mips64el-linux-android-'
+        when /mips/       then 'mipsel-linux-android-'
+        end
+
+      test = case arch
+        when /armeabi/    then 'arm-linux-androideabi-*'
+        when /arm64-v8a/  then 'aarch64-linux-android-*'
+        when /x86_64/     then 'x86_64-*'
+        when /x86/        then 'x86-*'
+        when /mips64/     then 'mips64el-linux-android-*'
+        when /mips/       then 'mipsel-linux-android-*'
+        end
+
+      gcc_toolchain_version = Dir[home_path.join('toolchains', test)].map{|t| t.match(/-(\d+\.\d+)$/); $1.to_f }.max
+      @gcc_toolchain_path = home_path.join('toolchains', prefix + gcc_toolchain_version.to_s, 'prebuilt', host_platform)
+    end
+    @gcc_toolchain_path
+  end
+
+  def host_platform
+    @host_platform ||= case RUBY_PLATFORM
+      when /cygwin|mswin|mingw|bccwin|wince|emx/i
+        path = home_path.join('toolchains', 'llvm' , 'prebuilt', 'windows*')
+        Dir.glob(path.to_s){ |item|
+          next if File.file?(item)
+          path = Pathname.new(item)
+          break
+        }
+        path.basename
+      when /x86_64-darwin/i
+        'darwin-x86_64'
+      when /darwin/i
+        'darwin-x86'
+      when /x86_64-linux/i
+        'linux-x86_64'
+      when /linux/i
+        'linux-x86'
+      else
+        raise NotImplementedError, "Unknown host platform (#{RUBY_PLATFORM})"
+      end
+  end
+
+  def arch
+    @arch ||= (params[:arch] || ENV['ANDROID_ARCH'] || DEFAULT_ARCH).to_s
+  end
+
+  def sysroot
+    return @sysroot if @sysroot
+    sysroot_path = home_path.join('platforms', platform,
+        case arch
+        when /armeabi/    then 'arch-arm'
+        when /arm64-v8a/  then 'arch-arm64'
+        when /x86_64/     then 'arch-x86_64'
+        when /x86/        then 'arch-x86'
+        when /mips64/     then 'arch-mips64'
+        when /mips/       then 'arch-mips'
+        end
+      ).to_s
+    if Dir.exist?(File.join(sysroot_path, "usr", "include"))
+      return @sysroot = sysroot_path
+    else
+      raise(SysrootNotReady)
+    end
+  end
+
+  def platform
+    if @platform === nil then
+      @platform = params[:platform] || ENV['ANDROID_PLATFORM'] || nil
+      if @platform === nil
+        Dir.glob(home_path.join('platforms/android-*').to_s){ |item|
+          next if File.file?(item)
+          if @platform === nil
+            @platform = Integer(item.rpartition('-')[2])
+          else
+            platform = Integer(item.rpartition('-')[2])
+            @platform = platform > @platform ? platform : @platform
+          end
+        }
+        if @platform === nil
+          raise(PlatformDirNotFound)
+        else
+          @platform = "android-#{@platform}"
+        end
+      end
+    end
+    if Integer(@platform.rpartition('-')[2]) < 21
+      case arch
+      when /arm64-v8a/, /x86_64/, /mips64/
+        raise NotImplementedError, "Platform (#{@platform}) has no implementation for architecture (#{arch})"
+      end
+    end
+    @platform
+  end
+
+  def armeabi_v7a_mfpu
+    @armeabi_v7a_mfpu ||= (params[:mfpu] || 'vfpv3-d16').to_s
+  end
+
+  def armeabi_v7a_mfloat_abi
+    @armeabi_v7a_mfloat_abi ||= (params[:mfloat_abi] || 'softfp').to_s
+  end
+
+  def no_warn_mismatch
+    if %W(soft softfp).include? armeabi_v7a_mfloat_abi
+      ''
+    else
+      ',--no-warn-mismatch'
+    end
+  end
+
+  def cc
+    case toolchain
+    when :gcc then bin_gcc('gcc')
+    when :clang then bin('clang')
+    end
+  end
+
+  def ar
+    case toolchain
+    when :gcc   then bin_gcc('ar')
+    when :clang then bin_gcc('ar')
+    end
+  end
+
+  def ctarget
+    flags = []
+
+    case toolchain
+    when :gcc
+      case arch
+      when /armeabi-v7a/  then flags += %W(-march=armv7-a)
+      when /armeabi/      then flags += %W(-march=armv5te)
+      when /arm64-v8a/    then flags += %W(-march=armv8-a)
+      when /x86_64/       then flags += %W(-march=x86-64)
+      when /x86/          then flags += %W(-march=i686)
+      when /mips64/       then flags += %W(-march=mips64r6)
+      when /mips/         then flags += %W(-march=mips32)
+      end
+    when :clang
+      case arch
+      when /armeabi-v7a/  then flags += %W(-target armv7-none-linux-androideabi)
+      when /armeabi/      then flags += %W(-target armv5te-none-linux-androideabi)
+      when /arm64-v8a/    then flags += %W(-target aarch64-none-linux-android)
+      when /x86_64/       then flags += %W(-target x86_64-none-linux-android)
+      when /x86/          then flags += %W(-target i686-none-linux-android)
+      when /mips64/       then flags += %W(-target mips64el-none-linux-android)
+      when /mips/         then flags += %W(-target mipsel-none-linux-android)
+      end
+    end
+
+    case arch
+    when /armeabi-v7a/  then flags += %W(-mfpu=#{armeabi_v7a_mfpu} -mfloat-abi=#{armeabi_v7a_mfloat_abi})
+    when /armeabi/      then flags += %W(-mtune=xscale -msoft-float)
+    when /arm64-v8a/    then flags += %W()
+    when /x86_64/       then flags += %W()
+    when /x86/          then flags += %W()
+    when /mips64/       then flags += %W(-fmessage-length=0)
+    when /mips/         then flags += %W(-fmessage-length=0)
+    end
+
+    flags
+  end
+
+  def cflags
+    flags = []
+
+    case RUBY_PLATFORM
+    when /mswin|mingw|win32/
+      # Build for Android dont need window flag
+      flags += %W(-U_WIN32 -U_WIN64)
+    end
+
+    flags += %W(-MMD -MP -D__android__ -DANDROID --sysroot="#{sysroot}")
+    flags += ctarget
+    case toolchain
+    when :gcc
+    when :clang
+      flags += %W(-gcc-toolchain "#{gcc_toolchain_path}" -Wno-invalid-command-line-argument -Wno-unused-command-line-argument)
+    end
+    flags += %W(-fpic -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes)
+
+    flags
+  end
+
+  def ldflags
+    flags = []
+
+    flags += %W(--sysroot="#{sysroot}")
+
+    flags
+  end
+
+  def ldflags_before_libraries
+    flags = []
+
+    case toolchain
+    when :gcc
+      case arch
+      when /armeabi-v7a/  then flags += %W(-Wl#{no_warn_mismatch})
+      end
+    when :clang
+      flags += %W(-gcc-toolchain "#{gcc_toolchain_path.to_s}")
+      case arch
+      when /armeabi-v7a/  then flags += %W(-target armv7-none-linux-androideabi -Wl,--fix-cortex-a8#{no_warn_mismatch})
+      when /armeabi/      then flags += %W(-target armv5te-none-linux-androideabi)
+      when /arm64-v8a/    then flags += %W(-target aarch64-none-linux-android)
+      when /x86_64/       then flags += %W(-target x86_64-none-linux-android)
+      when /x86/          then flags += %W(-target i686-none-linux-android)
+      when /mips64/       then flags += %W(-target mips64el-none-linux-android)
+      when /mips/         then flags += %W(-target mipsel-none-linux-android)
+      end
+    end
+    flags += %W(-no-canonical-prefixes)
+
+    flags
+  end
+end
+
+MRuby::Toolchain.new(:android) do |conf, params|
+  android = MRuby::Toolchain::Android.new(params)
+
+  toolchain android.toolchain
+
+  [conf.cc, conf.cxx, conf.objc, conf.asm].each do |cc|
+    cc.command = android.cc
+    cc.flags = android.cflags
+  end
+
+  conf.archiver.command = android.ar
+  conf.linker.command = android.cc
+  conf.linker.flags = android.ldflags
+  conf.linker.flags_before_libraries = android.ldflags_before_libraries
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/tasks/toolchains/clang.rake
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/tasks/toolchains/clang.rake	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/tasks/toolchains/clang.rake	(revision 439)
@@ -0,0 +1,8 @@
+MRuby::Toolchain.new(:clang) do |conf, _params|
+  toolchain :gcc, default_command: 'clang'
+
+  [conf.cc, conf.objc, conf.asm].each do |cc|
+    cc.flags << '-Wzero-length-array' unless ENV['CFLAGS']
+  end
+  conf.cxx.flags << '-Wzero-length-array' unless ENV['CXXFLAGS'] || ENV['CFLAGS']
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/tasks/toolchains/emscripten.rake
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/tasks/toolchains/emscripten.rake	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/tasks/toolchains/emscripten.rake	(revision 439)
@@ -0,0 +1,11 @@
+MRuby::Toolchain.new(:emscripten) do |conf, _params|
+  toolchain :gcc, default_command: 'emcc'
+
+  [conf.cc, conf.objc, conf.asm].each do |cc|
+    i = cc.flags[1][0].rindex("-Og")
+    cc.flags[1][0][i] = "-O3" if i
+  end
+
+  conf.archiver.command = "emar"
+  conf.exts.executable = '.js'
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/tasks/toolchains/gcc.rake
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/tasks/toolchains/gcc.rake	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/tasks/toolchains/gcc.rake	(revision 439)
@@ -0,0 +1,65 @@
+MRuby::Toolchain.new(:gcc) do |conf, params|
+  default_command = params[:default_command] || 'gcc'
+  compiler_flags = %w(-g3 -Og -Wall -Wundef)
+  c_mandatory_flags = %w(-std=gnu99)
+  cxx_invalid_flags = %w(-Wdeclaration-after-statement -Werror-implicit-function-declaration)
+
+  [conf.cc, conf.objc, conf.asm, conf.cxx].each do |compiler|
+    if compiler == conf.cxx
+      compiler.command = ENV['CXX'] || default_command.sub(/cc|$/, '++')
+      compiler.flags = [ENV['CXXFLAGS'] || ENV['CFLAGS'] || compiler_flags]
+    else
+      compiler.command = ENV['CC'] || default_command
+      compiler.flags = [c_mandatory_flags, ENV['CFLAGS'] || [compiler_flags, cxx_invalid_flags, %w(-Wwrite-strings)]]
+    end
+    compiler.option_include_path = %q[-I"%s"]
+    compiler.option_define = '-D%s'
+    compiler.compile_options = %q[%{flags} -MMD -o "%{outfile}" -c "%{infile}"]
+    compiler.cxx_compile_flag = '-x c++ -std=gnu++03'
+    compiler.cxx_exception_flag = '-fexceptions'
+    compiler.cxx_invalid_flags = c_mandatory_flags + cxx_invalid_flags
+  end
+
+  conf.linker do |linker|
+    linker.command = ENV['LD'] || ENV['CXX'] || ENV['CC'] || default_command
+    linker.flags = [ENV['LDFLAGS'] || %w()]
+    linker.libraries = %w(m)
+    linker.library_paths = []
+    linker.option_library = '-l%s'
+    linker.option_library_path = '-L%s'
+    linker.link_options = '%{flags} -o "%{outfile}" %{objs} %{flags_before_libraries} %{libs} %{flags_after_libraries}'
+  end
+
+  [[conf.cc, 'c'], [conf.cxx, 'c++']].each do |cc, lang|
+    cc.instance_variable_set :@header_search_language, lang
+    def cc.header_search_paths
+      if @header_search_command != command
+        result = `echo | #{build.filename command} -x#{@header_search_language} -Wp,-v - -fsyntax-only 2>&1`
+        result = `echo | #{command} -x#{@header_search_language} -Wp,-v - -fsyntax-only 2>&1` if $?.exitstatus != 0
+        return include_paths if  $?.exitstatus != 0
+
+        @frameworks = []
+        @header_search_paths = result.lines.map { |v|
+          framework = v.match(/^ (.*)(?: \(framework directory\))$/)
+          if framework
+            @frameworks << framework[1]
+            next nil
+          end
+
+          v.match(/^ (.*)$/)
+        }.compact.map { |v| v[1] }.select { |v| File.directory? v }
+        @header_search_paths += include_paths
+        @header_search_command = command
+      end
+      @header_search_paths
+    end
+  end
+
+  def conf.enable_sanitizer(*opts)
+    fail 'sanitizer already set' if @sanitizer_list
+
+    @sanitizer_list = opts
+    flg = "-fsanitize=#{opts.join ','}"
+    [self.cc, self.cxx, self.linker].each{|cmd| cmd.flags << flg }
+  end
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/tasks/toolchains/openwrt.rake
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/tasks/toolchains/openwrt.rake	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/tasks/toolchains/openwrt.rake	(revision 439)
@@ -0,0 +1,36 @@
+# usage of environmental variables to set the
+# cross compiling toolchain proper
+MRuby::Toolchain.new(:openwrt) do |conf|
+  [conf.cc, conf.objc, conf.asm].each do |cc|
+    cc.command = ENV['TARGET_CC']
+    cc.flags = ENV['TARGET_CFLAGS']
+    cc.include_paths = ["#{MRUBY_ROOT}/include"]
+    cc.option_include_path = %q[-I"%s"]
+    cc.option_define = '-D%s'
+    cc.compile_options = %q[%{flags} -MMD -o "%{outfile}" -c "%{infile}"]
+  end
+
+  [conf.cxx].each do |cxx|
+    cxx.command = ENV['TARGET_CXX']
+    cxx.flags = ENV['TARGET_CXXFLAGS']
+    cxx.include_paths = ["#{MRUBY_ROOT}/include"]
+    cxx.option_include_path = %q[-I"%s"]
+    cxx.option_define = '-D%s'
+    cxx.compile_options = %q[%{flags} -MMD -o "%{outfile}" -c "%{infile}"]
+   end
+
+  conf.linker do |linker|
+    linker.command = ENV['TARGET_CC']
+    linker.flags = ENV['TARGET_LDFLAGS']
+    linker.libraries = %w(m)
+    linker.library_paths = []
+    linker.option_library = '-l%s'
+    linker.option_library_path = '-L%s'
+    linker.link_options = '%{flags} -o "%{outfile}" %{objs} %{flags_before_libraries} %{libs} %{flags_after_libraries}'
+  end
+
+  conf.archiver do |archiver|
+    archiver.command = ENV['TARGET_AR']
+    archiver.archive_options = 'rs "%{outfile}" %{objs}'
+  end
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/tasks/toolchains/visualcpp.rake
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/tasks/toolchains/visualcpp.rake	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/tasks/toolchains/visualcpp.rake	(revision 439)
@@ -0,0 +1,69 @@
+MRuby::Toolchain.new(:visualcpp) do |conf, _params|
+  conf.file_separator = '\\'
+
+  conf.cc do |cc|
+    cc.command = ENV['CC'] || 'cl.exe'
+    cc.flags = [ENV['CFLAGS'] || %w(/c /nologo /utf-8 /W4 /GS /analyze- /Zc:wchar_t /Zi /O2 /Zc:inline /fp:precise /errorReport:prompt /WX- /Zc:forScope /Gd /Oy- /MD /EHsc /DWIN32 /DNDEBUG /D_CONSOLE /D_CRT_SECURE_NO_WARNINGS)]
+    cc.flags << %w(/we4002 /we4003 /we4005 /we4007 /we4010 /we4013 /we4015 /we4020 /we4022 /we4024 /we4028 /we4029 /we4031 /we4033 /we4034 /we4042 /we4047 /we4048 /we4049 /we4056 /we4067 /we4074 /we4079 /we4083 /we4088 /we4089 /we4090 /we4091 /we4094 /we4096 /we4098 /we4099 /we4113 /we4133 /we4715 /we4716)
+    cc.flags << %w(/wd4214 /wd4100 /wd4996)
+    cc.flags << ["/Fd\"#{conf.build_dir.gsub('/', conf.file_separator)}\\vc142.pdb\""]
+    cc.flags << ["/Fp\"%{outdir}\\%{outfilebase}.pch\""]
+    cc.defines = %w(MRB_STACK_EXTEND_DOUBLING)
+    cc.option_include_path = %q[/I"%s"]
+    cc.option_define = '/D%s'
+    cc.compile_options = %Q[%{flags} /Fo"%{outfile}" "%{infile}"]
+    cc.cxx_compile_flag = '/TP'
+    cc.cxx_exception_flag = '/EHs'
+  end
+
+  conf.cxx do |cxx|
+    cxx.command = ENV['CXX'] || 'cl.exe'
+    cxx.flags = [ENV['CXXFLAGS'] || ENV['CFLAGS'] || %w(/c /nologo /utf-8 /W4 /GS /analyze- /Zc:wchar_t /Zi /O2 /Zc:inline /fp:precise /errorReport:prompt /WX- /Zc:forScope /Gd /Oy- /MD /EHsc /DWIN32 /DNDEBUG /D_CONSOLE /D_CRT_SECURE_NO_WARNINGS)]
+    cxx.flags << %w(/we4002 /we4003 /we4005 /we4007 /we4010 /we4013 /we4015 /we4020 /we4022 /we4024 /we4028 /we4029 /we4031 /we4033 /we4034 /we4042 /we4047 /we4048 /we4049 /we4056 /we4067 /we4074 /we4079 /we4083 /we4088 /we4089 /we4090 /we4091 /we4094 /we4096 /we4098 /we4099 /we4113 /we4133 /we4715 /we4716)
+    cxx.flags << %w(/wd4214 /wd4100 /wd4996)
+    cxx.flags << ["/Fd\"#{conf.build_dir.gsub('/', conf.file_separator)}\\vc142.pdb\""]
+    cxx.flags << ["/Fp\"%{outdir}\\%{outfilebase}.pch\""]
+    cxx.defines = %w(MRB_STACK_EXTEND_DOUBLING)
+    cxx.option_include_path = %q[/I"%s"]
+    cxx.option_define = '/D%s'
+    cxx.compile_options = %Q[%{flags} /Fo"%{outfile}" "%{infile}"]
+    cxx.cxx_compile_flag = '/TP'
+    cxx.cxx_exception_flag = '/EHs'
+  end
+
+  conf.linker do |linker|
+    linker.command = ENV['LD'] || 'link.exe'
+    linker.flags = [ENV['LDFLAGS'] || %w(/MANIFEST /NXCOMPAT /DYNAMICBASE /DEBUG /OPT:REF /INCREMENTAL:NO /SUBSYSTEM:CONSOLE /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /OPT:ICF /ERRORREPORT:PROMPT /NOLOGO /TLBID:1)]
+    #linker.flags = [ENV['LDFLAGS'] || %w(/MANIFEST /LTCG:incremental /NXCOMPAT /DYNAMICBASE /DEBUG /OPT:REF /INCREMENTAL:NO /SUBSYSTEM:CONSOLE /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /OPT:ICF /ERRORREPORT:PROMPT /NOLOGO /TLBID:1)]
+    #linker.flags << ["/PGD:\"%{outdir}\\%{outfilebase}.pgd\""]
+    linker.flags << ["/PDB:\"#{conf.build_dir.gsub('/', conf.file_separator)}\\vc142.pdb\""]
+    linker.flags << ["/ManifestFile:\"%{outdir}\\%{outfilebase}.exe.intermediate.manifest\""]
+    linker.libraries = %w()
+    linker.library_paths = %w()
+    linker.option_library = '%s.lib'
+    linker.option_library_path = '/LIBPATH:%s'
+    linker.link_options = %Q[%{flags} /OUT:"%{outfile}" %{objs} %{flags_before_libraries} %{libs} %{flags_after_libraries}]
+  end
+
+  conf.archiver do |archiver|
+    archiver.command = ENV['AR'] || 'lib.exe'
+    archiver.archive_options = '/nologo /OUT:"%{outfile}" %{objs}'
+  end
+
+  conf.yacc do |yacc|
+    yacc.command = ENV['YACC'] || 'bison.exe'
+    yacc.compile_options = %q[-o "%{outfile}" "%{infile}"]
+  end
+
+  conf.gperf do |gperf|
+    gperf.command = 'gperf.exe'
+    gperf.compile_options = %q[-L ANSI-C -C -p -j1 -i 1 -g -o -t -N mrb_reserved_word -k"1,3,$" "%{infile}" > "%{outfile}"]
+  end
+
+  conf.exts do |exts|
+    exts.object = '.obj'
+    exts.executable = '.exe'
+    exts.library = '.lib'
+  end
+
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/test/assert.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/test/assert.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/test/assert.rb	(revision 439)
@@ -0,0 +1,403 @@
+$undefined = Object.new
+$ok_test = 0
+$ko_test = 0
+$kill_test = 0
+$warning_test = 0
+$skip_test = 0
+$asserts  = []
+$test_start = Time.now if Object.const_defined?(:Time)
+
+# For bintest on Ruby
+unless RUBY_ENGINE == "mruby"
+  def t_print(*args)
+    print(*args)
+    $stdout.flush
+    nil
+  end
+
+  def _str_match?(pattern, str)
+    File.fnmatch?(pattern, str, File::FNM_EXTGLOB|File::FNM_DOTMATCH)
+  end
+end
+
+class Array
+  def _assertion_join
+    join("-")
+  end
+end
+
+class String
+  def _assertion_indent(indent)
+    indent = indent.to_s
+    off = 0
+    str = self
+    while nl = index("\n", off)
+      nl += 1
+      nl += 1 while slice(nl) == "\n"
+      break if nl >= size
+      str = indent.dup if off == 0
+      str += slice(off, nl - off) + indent
+      off = nl
+    end
+
+    if off == 0
+      str = indent + self
+    else
+      str += slice(off..-1)
+    end
+
+    str
+  end
+end
+
+##
+# Create the assertion in a readable way
+def assertion_string(err, str, iso=nil, e=nil, bt=nil)
+  msg = "#{err}#{str}"
+  msg += " [#{iso}]" if iso && !iso.empty?
+  msg += " => #{e}" if e && !e.to_s.empty?
+  msg += " (#{GEMNAME == 'mruby-test' ? 'core' : "mrbgems: #{GEMNAME}"})"
+  if $mrbtest_assert
+    $mrbtest_assert.each do |idx, assert_msg, diff|
+      msg += "\n - Assertion[#{idx}]"
+      msg += " #{assert_msg}." if assert_msg && !assert_msg.empty?
+      msg += "\n#{diff}" if diff && !diff.empty?
+    end
+  end
+  msg += "\nbacktrace:\n        #{bt.join("\n        ")}" if bt
+  msg
+end
+
+##
+# Verify a code block.
+#
+# str : A remark which will be printed in case
+#       this assertion fails
+# iso : The ISO reference code of the feature
+#       which will be tested by this
+#       assertion
+def assert(str = 'assert', iso = '')
+  t_print(str, (iso != '' ? " [#{iso}]" : ''), ' : ') if $mrbtest_verbose
+  begin
+    $mrbtest_child_noassert ||= [0]
+    $mrbtest_child_noassert << 0
+    parent_asserts = $asserts
+    $asserts = []
+    parent_mrbtest_assert = $mrbtest_assert
+    $mrbtest_assert = []
+
+    if $mrbtest_assert_idx && !$mrbtest_assert_idx.empty?
+      $mrbtest_assert_idx[-1] += 1
+      $mrbtest_assert_idx << 0
+    else
+      $mrbtest_assert_idx = [0]
+      class << $mrbtest_assert_idx
+        alias to_s _assertion_join
+      end
+    end
+
+    yield
+    if $mrbtest_assert.size > 0
+      if $mrbtest_assert.size == $mrbtest_child_noassert[-1]
+        $asserts.push(assertion_string('Skip: ', str, iso))
+        $mrbtest_child_noassert[-2] += 1
+        $skip_test += 1
+        t_print('?')
+      else
+        $asserts.push(assertion_string('Fail: ', str, iso))
+        $ko_test += 1
+        t_print('F')
+      end
+    elsif $mrbtest_assert_idx[-1] == 0
+      $asserts.push(assertion_string('Warn: ', str, iso, 'no assertion'))
+      $warning_test += 1
+      t_print('W')
+    else
+      $ok_test += 1
+      t_print('.')
+    end
+  rescue MRubyTestSkip => e
+    $asserts.push(assertion_string('Skip: ', str, iso, e))
+    $skip_test += 1
+    $mrbtest_child_noassert[-2] += 1
+    t_print('?')
+  rescue Exception => e
+    bt = e.backtrace if $mrbtest_verbose
+    $asserts.push(assertion_string("#{e.class}: ", str, iso, e, bt))
+    $kill_test += 1
+    t_print('X')
+  ensure
+    if $mrbtest_assert_idx.size > 1
+      $asserts.each do |mesg|
+        idx = $mrbtest_assert_idx[0..-2]._assertion_join
+        mesg = mesg._assertion_indent("    ")
+
+        # Give `mesg` as a `diff` argument to avoid adding extra periods.
+        parent_mrbtest_assert << [idx, nil, mesg]
+      end
+    else
+      parent_asserts.concat $asserts
+    end
+    $asserts = parent_asserts
+
+    $mrbtest_assert = parent_mrbtest_assert
+    $mrbtest_assert_idx.pop
+    $mrbtest_assert_idx = nil if $mrbtest_assert_idx.empty?
+    $mrbtest_child_noassert.pop
+
+    nil
+  end
+  t_print("\n") if $mrbtest_verbose
+end
+
+def assertion_diff(exp, act)
+  "    Expected: #{exp.inspect}\n" \
+  "      Actual: #{act.inspect}"
+end
+
+def assert_true(obj, msg = nil, diff = nil)
+  if $mrbtest_assert_idx && $mrbtest_assert_idx.size > 0
+    $mrbtest_assert_idx[-1] += 1
+    unless obj == true
+      diff ||= "    Expected #{obj.inspect} to be true."
+      $mrbtest_assert.push([$mrbtest_assert_idx.to_s, msg, diff])
+    end
+  end
+  obj
+end
+
+def assert_false(obj, msg = nil, diff = nil)
+  unless obj == false
+    diff ||= "    Expected #{obj.inspect} to be false."
+  end
+  assert_true(!obj, msg, diff)
+end
+
+def assert_equal(exp, act_or_msg = nil, msg = nil, &block)
+  ret, exp, act, msg = _eval_assertion(:==, exp, act_or_msg, msg, block)
+  unless ret
+    diff = assertion_diff(exp, act)
+  end
+  assert_true(ret, msg, diff)
+end
+
+def assert_not_equal(exp, act_or_msg = nil, msg = nil, &block)
+  ret, exp, act, msg = _eval_assertion(:==, exp, act_or_msg, msg, block)
+  if ret
+    diff = "    Expected #{act.inspect} to not be equal to #{exp.inspect}."
+  end
+  assert_true(!ret, msg, diff)
+end
+
+def assert_same(*args); _assert_same(true, *args) end
+def assert_not_same(*args); _assert_same(false, *args) end
+def _assert_same(affirmed, exp, act, msg = nil)
+  unless ret = exp.equal?(act) == affirmed
+    exp_str, act_str = [exp, act].map do |o|
+      "#{o.inspect} (class=#{o.class}, oid=#{o.__id__})"
+    end
+    diff = "    Expected #{act_str} to #{'not ' unless affirmed}be the same as #{exp_str}."
+  end
+  assert_true(ret, msg, diff)
+end
+
+def assert_nil(obj, msg = nil)
+  unless ret = obj.nil?
+    diff = "    Expected #{obj.inspect} to be nil."
+  end
+  assert_true(ret, msg, diff)
+end
+
+def assert_not_nil(obj, msg = nil)
+  if ret = obj.nil?
+    diff = "    Expected #{obj.inspect} to not be nil."
+  end
+  assert_false(ret, msg, diff)
+end
+
+def assert_include(*args); _assert_include(true, *args) end
+def assert_not_include(*args); _assert_include(false, *args) end
+def _assert_include(affirmed, collection, obj, msg = nil)
+  unless ret = collection.include?(obj) == affirmed
+    diff = "    Expected #{collection.inspect} to #{'not ' unless affirmed}include #{obj.inspect}."
+  end
+  assert_true(ret, msg, diff)
+end
+
+def assert_predicate(*args); _assert_predicate(true, *args) end
+def assert_not_predicate(*args); _assert_predicate(false, *args) end
+def _assert_predicate(affirmed, obj, op, msg = nil)
+  unless ret = obj.__send__(op) == affirmed
+    diff = "    Expected #{obj.inspect} to #{'not ' unless affirmed}be #{op}."
+  end
+  assert_true(ret, msg, diff)
+end
+
+def assert_operator(*args); _assert_operator(true, *args) end
+def assert_not_operator(*args); _assert_operator(false, *args) end
+def _assert_operator(affirmed, obj1, op, obj2 = $undefined, msg = nil)
+  return _assert_predicate(affirmed, obj1, op, msg) if $undefined.equal?(obj2)
+  unless ret = obj1.__send__(op, obj2) == affirmed
+    diff = "    Expected #{obj1.inspect} to #{'not ' unless affirmed}be #{op} #{obj2.inspect}."
+  end
+  assert_true(ret, msg, diff)
+end
+
+##
+# Fail unless +str+ matches against +pattern+.
+#
+# +pattern+ is interpreted as pattern for File.fnmatch?. It may contain the
+# following metacharacters:
+#
+# <code>*</code> ::
+#   Matches any string.
+#
+# <code>?</code> ::
+#   Matches any one character.
+#
+# <code>[_SET_]</code>, <code>[^_SET_]</code> (<code>[!_SET_]</code>) ::
+#   Matches any one character in _SET_.  Behaves like character sets in
+#   Regexp, including set negation (<code>[^a-z]</code>).
+#
+# <code>{_A_,_B_}</code> ::
+#   Matches pattern _A_ or pattern _B_.
+#
+# <code> \ </code> ::
+#   Escapes the next character.
+def assert_match(*args); _assert_match(true, *args) end
+def assert_not_match(*args); _assert_match(false, *args) end
+def _assert_match(affirmed, pattern, str, msg = nil)
+  unless ret = _str_match?(pattern, str) == affirmed
+    diff = "    Expected #{pattern.inspect} to #{'not ' unless affirmed}match #{str.inspect}."
+  end
+  assert_true(ret, msg, diff)
+end
+
+##
+# Fails unless +obj+ is a kind of +cls+.
+def assert_kind_of(cls, obj, msg = nil)
+  unless ret = obj.kind_of?(cls)
+    diff = "    Expected #{obj.inspect} to be a kind of #{cls}, not #{obj.class}."
+  end
+  assert_true(ret, msg, diff)
+end
+
+##
+# Fails unless +exp+ is equal to +act+ in terms of a Float
+def assert_float(exp, act, msg = nil)
+  e, a = exp.to_f, act.to_f
+  if e.finite? && a.finite? && (n = (e - a).abs) > Mrbtest::FLOAT_TOLERANCE
+    flunk(msg, "    Expected |#{exp} - #{act}| (#{n}) to be <= #{Mrbtest::FLOAT_TOLERANCE}.")
+  elsif (e.infinite? || a.infinite?) && e != a ||
+     e.nan? && !a.nan? || !e.nan? && a.nan?
+    flunk(msg, "    Expected #{act} to be #{exp}.")
+  else
+    pass
+  end
+end
+
+def assert_raise(*exc)
+  msg = (exc.last.is_a? String) ? exc.pop : nil
+  exc = exc.empty? ? StandardError : exc.size == 1 ? exc[0] : exc
+  begin
+    yield
+  rescue *exc => e
+    pass
+    e
+  rescue Exception => e
+    diff = "    #{exc} exception expected, not\n" \
+           "    Class: <#{e.class}>\n" \
+           "    Message: <#{e}>"
+    flunk(msg, diff)
+  else
+    diff = "    #{exc} expected but nothing was raised."
+    flunk(msg, diff)
+  end
+end
+
+def assert_nothing_raised(msg = nil)
+  begin
+    yield
+  rescue Exception => e
+    diff = "    Exception raised:\n" \
+           "    Class: <#{e.class}>\n" \
+           "    Message: <#{e}>"
+    flunk(msg, diff)
+  else
+    pass
+  end
+end
+
+def assert_raise_with_message(*args, &block)
+  _assert_raise_with_message(:plain, *args, &block)
+end
+def assert_raise_with_message_pattern(*args, &block)
+  _assert_raise_with_message(:pattern, *args, &block)
+end
+def _assert_raise_with_message(type, exc, exp_msg, msg = nil, &block)
+  e = msg ? assert_raise(exc, msg, &block) : assert_raise(exc, &block)
+  e ? ($mrbtest_assert_idx[-1]-=1) : (return e)
+
+  err_msg = e.message
+  unless ret = type == :pattern ? _str_match?(exp_msg, err_msg) : exp_msg == err_msg
+    diff = "    Expected Exception(#{exc}) was raised, but the message doesn't match.\n"
+    if type == :pattern
+      diff += "    Expected #{exp_msg.inspect} to match #{err_msg.inspect}."
+    else
+      diff += assertion_diff(exp_msg, err_msg)
+    end
+  end
+  assert_true(ret, msg, diff)
+end
+
+def pass
+  assert_true(true)
+end
+
+def flunk(msg = "Epic Fail!", diff = "")
+  assert_true(false, msg, diff)
+end
+
+##
+# Report the test result and print all assertions
+# which were reported broken.
+def report
+  t_print("\n")
+
+  $asserts.each do |msg|
+    t_print("#{msg}\n")
+  end
+
+  $total_test = $ok_test + $ko_test + $kill_test + $warning_test + $skip_test
+  t_print("  Total: #{$total_test}\n")
+
+  t_print("     OK: #{$ok_test}\n")
+  t_print("     KO: #{$ko_test}\n")
+  t_print("  Crash: #{$kill_test}\n")
+  t_print("Warning: #{$warning_test}\n")
+  t_print("   Skip: #{$skip_test}\n")
+
+  if Object.const_defined?(:Time)
+    t_time = Time.now - $test_start
+    t_print("   Time: #{t_time.round(2)} seconds\n")
+  end
+
+  $ko_test == 0 && $kill_test == 0
+end
+
+def _eval_assertion(meth, exp, act_or_msg, msg, block)
+  if block
+    exp, act, msg = exp, block.call, act_or_msg
+  else
+    exp, act, msg = exp, act_or_msg, msg
+  end
+  return exp.__send__(meth, act), exp, act, msg
+end
+
+##
+# Skip the test
+class MRubyTestSkip < NotImplementedError; end
+
+def skip(cause = "")
+  raise MRubyTestSkip.new(cause)
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/test/bintest.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/test/bintest.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/test/bintest.rb	(revision 439)
@@ -0,0 +1,42 @@
+$:.unshift File.dirname(File.dirname(File.expand_path(__FILE__)))
+require 'test/assert.rb'
+
+GEMNAME = ""
+
+def cmd(s)
+  case RbConfig::CONFIG['host_os']
+  when /mswin(?!ce)|mingw|bccwin/
+    "bin\\#{s}.exe"
+  else
+    "bin/#{s}"
+  end
+end
+
+def shellquote(s)
+  case RbConfig::CONFIG['host_os']
+  when /mswin(?!ce)|mingw|bccwin/
+    "\"#{s}\""
+  else
+    "'#{s}'"
+  end
+end
+
+print "bintest - Command Binary Test\n\n"
+
+ARGV.each do |gem|
+  case gem
+  when '-v'; $mrbtest_verbose = true
+  end
+
+  case RbConfig::CONFIG['host_os']
+  when /mswin(?!ce)|mingw|bccwin/
+    gem = gem.gsub('\\', '/')
+  end
+
+  Dir["#{gem}/bintest/**/*.rb"].each do |file|
+    GEMNAME.replace(File.basename(gem))
+    load file
+  end
+end
+
+exit report
Index: /EcnlProtoTool/trunk/mruby-2.1.1/test/t/argumenterror.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/test/t/argumenterror.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/test/t/argumenterror.rb	(revision 439)
@@ -0,0 +1,16 @@
+##
+# ArgumentError ISO Test
+
+assert('ArgumentError', '15.2.24') do
+  e2 = nil
+  a = []
+  begin
+    # this will cause an exception due to the wrong arguments
+    a[]
+  rescue => e1
+    e2 = e1
+  end
+
+  assert_equal(Class, ArgumentError.class)
+  assert_equal(ArgumentError, e2.class)
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/test/t/array.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/test/t/array.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/test/t/array.rb	(revision 439)
@@ -0,0 +1,422 @@
+##
+# Array ISO Test
+
+assert('Array', '15.2.12') do
+  assert_equal(Class, Array.class)
+end
+
+assert('Array inclueded modules', '15.2.12.3') do
+  assert_true(Array.include?(Enumerable))
+end
+
+assert('Array.[]', '15.2.12.4.1') do
+  assert_equal([1, 2, 3], Array.[](1,2,3))
+end
+
+class SubArray < Array
+end
+
+assert('SubArray.[]') do
+  a = SubArray[1, 2, 3]
+  assert_equal(SubArray, a.class)
+end
+
+assert('Array#+', '15.2.12.5.1') do
+  assert_equal([1, 1], [1].+([1]))
+end
+
+assert('Array#*', '15.2.12.5.2') do
+  assert_raise(ArgumentError) do
+    # this will cause an exception due to the wrong argument
+    [1].*(-1)
+  end
+  assert_equal([1, 1, 1], [1].*(3))
+  assert_equal([], [1].*(0))
+end
+
+assert('Array#<<', '15.2.12.5.3') do
+  assert_equal([1, 1], [1].<<(1))
+end
+
+assert('Array#[]', '15.2.12.5.4') do
+  a = Array.new
+  assert_raise(ArgumentError) do
+    # this will cause an exception due to the wrong arguments
+    a.[]()
+  end
+  assert_raise(ArgumentError) do
+    # this will cause an exception due to the wrong arguments
+    a.[](1,2,3)
+  end
+
+  assert_equal(2, [1,2,3].[](1))
+  assert_equal(nil, [1,2,3].[](4))
+  assert_equal(3, [1,2,3].[](-1))
+  assert_equal(nil, [1,2,3].[](-4))
+
+  a = [ "a", "b", "c", "d", "e" ]
+  assert_equal(["b", "c"], a[1,2])
+  assert_equal(["b", "c", "d"], a[1..-2])
+  skip unless Object.const_defined?(:Float)
+  assert_equal("b", a[1.1])
+end
+
+assert('Array#[]=', '15.2.12.5.5') do
+  a = Array.new
+  assert_raise(ArgumentError) do
+    # this will cause an exception due to the wrong arguments
+    a.[]=()
+  end
+  assert_raise(ArgumentError) do
+    # this will cause an exception due to the wrong arguments
+    a.[]=(1,2,3,4)
+  end
+  assert_raise(IndexError) do
+    # this will cause an exception due to the wrong arguments
+    a = [1,2,3,4,5]
+    a[1, -1] = 10
+  end
+
+  assert_equal(4, [1,2,3].[]=(1,4))
+  assert_equal(3, [1,2,3].[]=(1,2,3))
+
+  a = [1,2,3,4,5]
+  a[3..-1] = 6
+  assert_equal([1,2,3,6], a)
+
+  a = [1,2,3,4,5]
+  a[3..-1] = []
+  assert_equal([1,2,3], a)
+
+  a = [1,2,3,4,5]
+  a[2...4] = 6
+  assert_equal([1,2,6,5], a)
+
+  # passing self (#3274)
+  a = [1,2,3]
+  a[1,0] = a
+  assert_equal([1,1,2,3,2,3], a)
+  a = [1,2,3]
+  a[-1,0] = a
+  assert_equal([1,2,1,2,3,3], a)
+end
+
+assert('Array#clear', '15.2.12.5.6') do
+  a = [1]
+  a.clear
+  assert_equal([], a)
+end
+
+assert('Array#collect!', '15.2.12.5.7') do
+  a = [1,2,3]
+  a.collect! { |i| i + i }
+  assert_equal([2,4,6], a)
+end
+
+assert('Array#concat', '15.2.12.5.8') do
+  assert_equal([1,2,3,4], [1, 2].concat([3, 4]))
+
+  # passing self (#3302)
+  a = [1,2,3]
+  a.concat(a)
+  assert_equal([1,2,3,1,2,3], a)
+end
+
+assert('Array#delete_at', '15.2.12.5.9') do
+  a = [1,2,3]
+  assert_equal(2, a.delete_at(1))
+  assert_equal([1,3], a)
+  assert_equal(nil, a.delete_at(3))
+  assert_equal([1,3], a)
+  assert_equal(nil, a.delete_at(-3))
+  assert_equal([1,3], a)
+  assert_equal(3, a.delete_at(-1))
+  assert_equal([1], a)
+end
+
+assert('Array#each', '15.2.12.5.10') do
+  a = [1,2,3]
+  b = 0
+  a.each {|i| b += i}
+  assert_equal(6, b)
+end
+
+assert('Array#each_index', '15.2.12.5.11') do
+  a = [1]
+  b = nil
+  a.each_index {|i| b = i}
+  assert_equal(0, b)
+end
+
+assert('Array#empty?', '15.2.12.5.12') do
+  a = []
+  b = [b]
+  assert_true([].empty?)
+  assert_false([1].empty?)
+end
+
+assert('Array#first', '15.2.12.5.13') do
+  assert_raise(ArgumentError) do
+    # this will cause an exception due to the wrong argument
+    [1,2,3].first(-1)
+  end
+  assert_raise(ArgumentError) do
+    # this will cause an exception due to the wrong argument
+    [1,2,3].first(1,2)
+  end
+
+  assert_nil([].first)
+
+  b = [1,2,3]
+  assert_equal(1, b.first)
+  assert_equal([], b.first(0))
+  assert_equal([1], b.first(1))
+  assert_equal([1,2,3], b.first(4))
+end
+
+assert('Array#index', '15.2.12.5.14') do
+  a = [1,2,3]
+
+  assert_equal(1, a.index(2))
+  assert_equal(nil, a.index(0))
+end
+
+assert('Array#initialize', '15.2.12.5.15') do
+  a = [].initialize(1)
+  b = [].initialize(2)
+  c = [].initialize(2, 1)
+  d = [].initialize(2) {|i| i}
+
+  assert_equal([nil], a)
+  assert_equal([nil,nil], b)
+  assert_equal([1,1], c)
+  assert_equal([0,1], d)
+end
+
+assert('Array#initialize_copy', '15.2.12.5.16') do
+  a = [1,2,3]
+  b = [].initialize_copy(a)
+
+  assert_equal([1,2,3], b)
+end
+
+assert('Array#join', '15.2.12.5.17') do
+  a = [1,2,3].join
+  b = [1,2,3].join(',')
+
+  assert_equal('123', a)
+  assert_equal('1,2,3', b)
+end
+
+assert('Array#last', '15.2.12.5.18') do
+  assert_raise(ArgumentError) do
+    # this will cause an exception due to the wrong argument
+    [1,2,3].last(-1)
+  end
+
+  a = [1,2,3]
+  assert_equal(3, a.last)
+  assert_nil([].last)
+end
+
+assert('Array#length', '15.2.12.5.19') do
+  a = [1,2,3]
+
+  assert_equal(3, a.length)
+end
+
+assert('Array#map!', '15.2.12.5.20') do
+  a = [1,2,3]
+  a.map! { |i| i + i }
+  assert_equal([2,4,6], a)
+end
+
+assert('Array#pop', '15.2.12.5.21') do
+  a = [1,2,3]
+  b = a.pop
+
+  assert_nil([].pop)
+  assert_equal([1,2], a)
+  assert_equal(3, b)
+
+  assert_raise(FrozenError) { [].freeze.pop }
+end
+
+assert('Array#push', '15.2.12.5.22') do
+  a = [1,2,3]
+  b = a.push(4)
+
+  assert_equal([1,2,3,4], a)
+  assert_equal([1,2,3,4], b)
+end
+
+assert('Array#replace', '15.2.12.5.23') do
+  a = [1,2,3]
+  b = [].replace(a)
+
+  assert_equal([1,2,3], b)
+end
+
+assert('Array#reverse', '15.2.12.5.24') do
+  a = [1,2,3]
+  b = a.reverse
+
+  assert_equal([1,2,3], a)
+  assert_equal([3,2,1], b)
+end
+
+assert('Array#reverse!', '15.2.12.5.25') do
+  a = [1,2,3]
+  b = a.reverse!
+
+  assert_equal([3,2,1], a)
+  assert_equal([3,2,1], b)
+end
+
+assert('Array#rindex', '15.2.12.5.26') do
+  a = [1,2,3]
+
+  assert_equal(1, a.rindex(2))
+  assert_equal(nil, a.rindex(0))
+end
+
+assert('Array#shift', '15.2.12.5.27') do
+  a = [1,2,3]
+  b = a.shift
+
+  assert_nil([].shift)
+  assert_equal([2,3], a)
+  assert_equal(1, b)
+
+  assert_raise(FrozenError) { [].freeze.shift }
+end
+
+assert('Array#size', '15.2.12.5.28') do
+  a = [1,2,3]
+
+  assert_equal(3, a.size)
+end
+
+assert('Array#slice', '15.2.12.5.29') do
+  a = [*(1..100)]
+  b = a.dup
+
+  assert_equal(1, a.slice(0))
+  assert_equal(100, a.slice(99))
+  assert_nil(a.slice(100))
+  assert_equal(100, a.slice(-1))
+  assert_equal(99,  a.slice(-2))
+  assert_equal(1,   a.slice(-100))
+  assert_nil(a.slice(-101))
+  assert_equal([1],   a.slice(0,1))
+  assert_equal([100], a.slice(99,1))
+  assert_equal([],    a.slice(100,1))
+  assert_equal([100], a.slice(99,100))
+  assert_equal([100], a.slice(-1,1))
+  assert_equal([99],  a.slice(-2,1))
+  assert_equal([10, 11, 12], a.slice(9, 3))
+  assert_equal([10, 11, 12], a.slice(-91, 3))
+  assert_nil(a.slice(-101, 2))
+  assert_equal([1],   a.slice(0..0))
+  assert_equal([100], a.slice(99..99))
+  assert_equal([],    a.slice(100..100))
+  assert_equal([100], a.slice(99..200))
+  assert_equal([100], a.slice(-1..-1))
+  assert_equal([99],  a.slice(-2..-2))
+  assert_equal([10, 11, 12], a.slice(9..11))
+  assert_equal([10, 11, 12], a.slice(-91..-89))
+  assert_equal([10, 11, 12], a.slice(-91..-89))
+  assert_nil(a.slice(-101..-1))
+  assert_nil(a.slice(10, -3))
+  assert_equal([], a.slice(10..7))
+  assert_equal(b, a)
+end
+
+assert('Array#unshift', '15.2.12.5.30') do
+  a = [2,3]
+  b = a.unshift(1)
+  c = [2,3]
+  d = c.unshift(0, 1)
+
+  assert_equal([1,2,3], a)
+  assert_equal([1,2,3], b)
+  assert_equal([0,1,2,3], c)
+  assert_equal([0,1,2,3], d)
+end
+
+assert('Array#to_s', '15.2.12.5.31 / 15.2.12.5.32') do
+  a = [2, 3,   4, 5]
+  a[4] = a
+  r1 = a.to_s
+  r2 = a.inspect
+
+  assert_equal(r2, r1)
+  assert_equal("[2, 3, 4, 5, [...]]", r1)
+end
+
+assert('Array#==', '15.2.12.5.33') do
+  assert_false(["a", "c"] == ["a", "c", 7])
+  assert_true(["a", "c", 7] == ["a", "c", 7])
+  assert_false(["a", "c", 7] == ["a", "d", "f"])
+end
+
+assert('Array#eql?', '15.2.12.5.34') do
+  a1 = [ 1, 2, 3 ]
+  a2 = [ 1, 2, 3 ]
+  a3 = [ 1.0, 2.0, 3.0 ]
+
+  assert_true(a1.eql? a2)
+  assert_false(a1.eql? a3)
+end
+
+assert('Array#hash', '15.2.12.5.35') do
+  a = [ 1, 2, 3 ]
+
+  #assert_true(a.hash.is_a? Integer)
+  assert_true(a.hash.is_a? Integral)  # mruby special
+  assert_equal([1,2].hash, [1,2].hash)
+end
+
+assert('Array#<=>', '15.2.12.5.36') do
+  r1 = [ "a", "a", "c" ]    <=> [ "a", "b", "c" ]   #=> -1
+  r2 = [ 1, 2, 3, 4, 5, 6 ] <=> [ 1, 2 ]            #=> +1
+  r3 = [ "a", "b", "c" ]    <=> [ "a", "b", "c" ]   #=> 0
+
+  assert_equal(-1, r1)
+  assert_equal(+1, r2)
+  assert_equal(0, r3)
+end
+
+# Not ISO specified
+
+assert("Array (Longish inline array)") do
+  ary = [[0, 0], [1, 1], [2, 2], [3, 3], [4, 4], [5, 5], [6, 6], [7, 7], [8, 8], [9, 9], [10, 10], [11, 11], [12, 12], [13, 13], [14, 14], [15, 15], [16, 16], [17, 17], [18, 18], [19, 19], [20, 20], [21, 21], [22, 22], [23, 23], [24, 24], [25, 25], [26, 26], [27, 27], [28, 28], [29, 29], [30, 30], [31, 31], [32, 32], [33, 33], [34, 34], [35, 35], [36, 36], [37, 37], [38, 38], [39, 39], [40, 40], [41, 41], [42, 42], [43, 43], [44, 44], [45, 45], [46, 46], [47, 47], [48, 48], [49, 49], [50, 50], [51, 51], [52, 52], [53, 53], [54, 54], [55, 55], [56, 56], [57, 57], [58, 58], [59, 59], [60, 60], [61, 61], [62, 62], [63, 63], [64, 64], [65, 65], [66, 66], [67, 67], [68, 68], [69, 69], [70, 70], [71, 71], [72, 72], [73, 73], [74, 74], [75, 75], [76, 76], [77, 77], [78, 78], [79, 79], [80, 80], [81, 81], [82, 82], [83, 83], [84, 84], [85, 85], [86, 86], [87, 87], [88, 88], [89, 89], [90, 90], [91, 91], [92, 92], [93, 93], [94, 94], [95, 95], [96, 96], [97, 97], [98, 98], [99, 99], [100, 100], [101, 101], [102, 102], [103, 103], [104, 104], [105, 105], [106, 106], [107, 107], [108, 108], [109, 109], [110, 110], [111, 111], [112, 112], [113, 113], [114, 114], [115, 115], [116, 116], [117, 117], [118, 118], [119, 119], [120, 120], [121, 121], [122, 122], [123, 123], [124, 124], [125, 125], [126, 126], [127, 127], [128, 128], [129, 129], [130, 130], [131, 131], [132, 132], [133, 133], [134, 134], [135, 135], [136, 136], [137, 137], [138, 138], [139, 139], [140, 140], [141, 141], [142, 142], [143, 143], [144, 144], [145, 145], [146, 146], [147, 147], [148, 148], [149, 149], [150, 150], [151, 151], [152, 152], [153, 153], [154, 154], [155, 155], [156, 156], [157, 157], [158, 158], [159, 159], [160, 160], [161, 161], [162, 162], [163, 163], [164, 164], [165, 165], [166, 166], [167, 167], [168, 168], [169, 169], [170, 170], [171, 171], [172, 172], [173, 173], [174, 174], [175, 175], [176, 176], [177, 177], [178, 178], [179, 179], [180, 180], [181, 181], [182, 182], [183, 183], [184, 184], [185, 185], [186, 186], [187, 187], [188, 188], [189, 189], [190, 190], [191, 191], [192, 192], [193, 193], [194, 194], [195, 195], [196, 196], [197, 197], [198, 198], [199, 199]]
+  h = Hash.new(0)
+  ary.each {|p| h[p.class] += 1}
+  assert_equal({Array=>200}, h)
+end
+
+assert("Array#rindex") do
+  class Sneaky
+    def ==(*)
+      $a.clear
+      $a.replace([1])
+      false
+    end
+  end
+  $a = [2, 3, 4, 5, 6, 7, 8, 9, 10, Sneaky.new]
+  assert_equal 0, $a.rindex(1)
+end
+
+assert('Array#sort!') do
+  a = [3, 2, 1]
+  assert_equal a, a.sort!      # sort! returns self.
+  assert_equal [1, 2, 3], a    # it is sorted.
+end
+
+assert('Array#freeze') do
+  a = [].freeze
+  assert_raise(FrozenError) do
+    a[0] = 1
+  end
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/test/t/basicobject.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/test/t/basicobject.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/test/t/basicobject.rb	(revision 439)
@@ -0,0 +1,11 @@
+##
+# BasicObject
+
+assert('BasicObject') do
+  assert_equal(Class, BasicObject.class)
+end
+
+assert('BasicObject superclass') do
+  assert_nil(BasicObject.superclass)
+end
+
Index: /EcnlProtoTool/trunk/mruby-2.1.1/test/t/bs_block.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/test/t/bs_block.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/test/t/bs_block.rb	(revision 439)
@@ -0,0 +1,522 @@
+##
+# Bootstrap tests for blocks
+
+assert('BS Block 1') do
+  assert_equal(1) do
+    1.times{
+      begin
+        a = 1
+      ensure
+        foo = nil
+      end
+    }
+  end
+end
+
+assert('BS Block 2') do
+  assert_equal 2, [1,2,3].find{|x| x == 2}
+end
+
+assert('BS Block 3') do
+  class E
+    include Enumerable
+    def each(&block)
+      [1, 2, 3].each(&block)
+    end
+  end
+  assert_equal 2, E.new.find {|x| x == 2 }
+end
+
+assert('BS Block 3') do
+  sum = 0
+  for x in [1, 2, 3]
+    sum += x
+  end
+  assert_equal 6, sum
+end
+
+assert('BS Block 4') do
+  sum = 0
+  for x in (1..5)
+    sum += x
+  end
+  assert_equal 15, sum
+end
+
+assert('BS Block 5') do
+  sum = 0
+  for x in []
+    sum += x
+  end
+  assert_equal 0, sum
+end
+
+assert('BS Block 6') do
+  ans = []
+  assert_equal(1) do
+    1.times{
+      for n in 1..3
+        a = n
+        ans << a
+      end
+    }
+  end
+end
+
+assert('BS Block 7') do
+  ans = []
+  assert_equal((1..3)) do
+    for m in 1..3
+      for n in 2..4
+        a = [m, n]
+        ans << a
+      end
+    end
+  end
+end
+
+assert('BS Block 8') do
+  assert_equal [1, 2, 3], (1..3).to_a
+end
+
+assert('BS Block 9') do
+  assert_equal([4, 8, 12]) do
+    (1..3).map{|e|
+      e * 4
+    }
+  end
+end
+
+assert('BS Block 10') do
+  def m
+    yield
+  end
+  def n
+    yield
+  end
+
+  assert_equal(100) do
+    m{
+      n{
+        100
+      }
+    }
+  end
+end
+
+assert('BS Block 11') do
+  def m
+    yield 1
+  end
+
+  assert_equal(20) do
+    m{|ib|
+      m{|jb|
+        i = 20
+      }
+    }
+  end
+end
+
+assert('BS Block 12') do
+  def m
+    yield 1
+  end
+
+  assert_equal(2) do
+    m{|ib|
+      m{|jb|
+        ib = 20
+        kb = 2
+      }
+    }
+  end
+end
+
+assert('BS Block 13') do
+  def iter1
+    iter2{
+      yield
+    }
+  end
+
+  def iter2
+    yield
+  end
+
+  assert_equal(3) do
+    iter1{
+      jb = 2
+      iter1{
+        jb = 3
+      }
+      jb
+    }
+  end
+end
+
+assert('BS Block 14') do
+  def iter1
+    iter2{
+      yield
+    }
+  end
+
+  def iter2
+    yield
+  end
+
+  assert_equal(2) do
+    iter1{
+      jb = 2
+      iter1{
+        jb
+      }
+      jb
+    }
+  end
+end
+
+assert('BS Block 15') do
+  def m
+    yield 1
+  end
+  assert_equal(2) do
+    m{|ib|
+      ib*2
+    }
+  end
+end
+
+assert('BS Block 16') do
+  def m
+    yield 12345, 67890
+  end
+  assert_equal(92580) do
+    m{|ib,jb|
+      ib*2+jb
+    }
+  end
+end
+
+assert('BS Block 17') do
+  def iter
+    yield 10
+  end
+
+  a = nil
+  assert_equal [10, nil] do
+    [iter{|a|
+      a
+    }, a]
+  end
+end
+
+assert('BS Block 18') do
+  def iter
+    yield 10
+  end
+
+  assert_equal(21) do
+    iter{|a|
+      iter{|a|
+        a + 1
+      } + a
+    }
+  end
+end
+
+assert('BS Block 19') do
+  def iter
+    yield 10, 20, 30, 40
+  end
+
+  a = b = c = d = nil
+  assert_equal([10, 20, 30, 40, nil, nil, nil, nil]) do
+    iter{|a, b, c, d|
+      [a, b, c, d]
+    } + [a, b, c, d]
+  end
+end
+
+assert('BS Block 20') do
+  def iter
+    yield 10, 20, 30, 40
+  end
+
+  a = b = nil
+  assert_equal([10, 20, 30, 40, nil, nil]) do
+    iter{|a, b, c, d|
+      [a, b, c, d]
+    } + [a, b]
+  end
+end
+
+assert('BS Block 21') do
+  def iter
+    yield 1, 2
+  end
+
+  assert_equal([1, [2]]) do
+    iter{|a, *b|
+      [a, b]
+    }
+  end
+end
+
+assert('BS Block 22') do
+  def iter
+    yield 1, 2
+  end
+
+  assert_equal([[1, 2]]) do
+    iter{|*a|
+      [a]
+    }
+  end
+end
+
+assert('BS Block 23') do
+  def iter
+    yield 1, 2
+  end
+
+  assert_equal([1, 2, []]) do
+    iter{|a, b, *c|
+      [a, b, c]
+    }
+  end
+end
+
+assert('BS Block 24') do
+  def m
+    yield
+  end
+  assert_equal(1) do
+    m{
+      1
+    }
+  end
+end
+
+assert('BS Block 25') do
+  def m
+    yield 123
+  end
+  assert_equal(15129) do
+    m{|ib|
+      m{|jb|
+        ib*jb
+      }
+    }
+  end
+end
+
+assert('BS Block 26') do
+  def m a
+    yield a
+  end
+  assert_equal(2) do
+    m(1){|ib|
+      m(2){|jb|
+        ib*jb
+      }
+    }
+  end
+end
+
+assert('BS Block 27') do
+  sum = 0
+  3.times{|ib|
+    2.times{|jb|
+      sum += ib + jb
+    }}
+  assert_equal sum, 9
+end
+
+assert('BS Block 28') do
+  assert_equal(10) do
+    3.times{
+      break 10
+    }
+  end
+end
+
+assert('BS Block 29') do
+  def iter
+    yield 1,2,3
+  end
+
+  assert_equal([1, 2]) do
+    iter{|i, j|
+      [i, j]
+    }
+  end
+end
+
+assert('BS Block 30') do
+  def iter
+    yield 1
+  end
+
+  assert_equal([1, nil]) do
+    iter{|i, j|
+      [i, j]
+    }
+  end
+end
+
+assert('BS Block [ruby-dev:31147]') do
+  def m
+    yield
+  end
+  assert_nil m{|&b| b}
+end
+
+assert('BS Block [ruby-dev:31160]') do
+  def m()
+    yield
+  end
+  assert_nil m {|(v,(*))|}
+end
+
+assert('BS Block [issue #750]') do
+  def m(a, *b)
+    yield
+  end
+  args = [1, 2, 3]
+  assert_equal m(*args){ 1 }, 1
+end
+
+assert('BS Block 31') do
+  def m()
+    yield
+  end
+  assert_nil m {|((*))|}
+end
+
+assert('BS Block [ruby-dev:31440]') do
+  def m
+    yield [0]
+  end
+  assert_equal m{|v, &b| v}, [0]
+end
+
+assert('BS Block 32') do
+  r = false; 1.times{|&b| r = b}
+  assert_equal NilClass, r.class
+end
+
+assert('BS Block [ruby-core:14395]') do
+  assert_nothing_raised do
+    class Controller
+      def respond_to(&block)
+        responder = Responder.new
+        block.call(responder)
+        responder.respond
+      end
+      def test_for_bug
+        respond_to{|format|
+          format.js{
+            "in test"
+            render{|obj|
+              obj
+            }
+          }
+        }
+      end
+      def render(&block)
+        "in render"
+      end
+    end
+    class Responder
+      def method_missing(symbol, &block)
+        "enter method_missing"
+        @response = Proc.new{
+          'in method missing'
+          block.call
+        }
+        "leave method_missing"
+      end
+      def respond
+        @response.call
+      end
+    end
+    t = Controller.new
+    t.test_for_bug
+  end
+end
+
+assert("BS Block 33") do
+  module TestReturnFromNestedBlock
+    def self.test
+      1.times do
+        1.times do
+          return :ok
+        end
+      end
+      :bad
+    end
+  end
+  assert_equal :ok, TestReturnFromNestedBlock.test
+end
+
+assert("BS Block 34") do
+  module TestReturnFromNestedBlock_BSBlock34
+    def self.test
+      1.times do
+        while true
+          return :ok
+        end
+      end
+      :bad
+    end
+  end
+  assert_equal :ok, TestReturnFromNestedBlock_BSBlock34.test
+end
+
+assert("BS Block 35") do
+  module TestReturnFromNestedBlock_BSBlock35
+    def self.test
+      1.times do
+        until false
+          return :ok
+        end
+      end
+      :bad
+    end
+  end
+  assert_equal :ok, TestReturnFromNestedBlock_BSBlock35.test
+end
+
+assert('BS Block 36') do
+  def iter
+    yield 1, 2, 3, 4, 5
+  end
+
+  assert_equal([1, 2, [3, 4], 5]) do
+    iter{|a, b, *c, d|
+      [a, b, c, d]
+    }
+  end
+end
+
+assert('BS Block 37') do
+  def iter
+    yield 1, 2, 3
+  end
+
+  assert_equal([1, 2, [], 3]) do
+    iter{|a, b, *c, d|
+      [a, b, c, d]
+    }
+  end
+end
+
+assert('BS Block 38') do
+  def iter
+    yield 1,2,3,4,5,6
+  end
+
+  assert_equal [1,2,3,4,5], iter{|a,b,c=:c,d,e| [a,b,c,d,e]}
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/test/t/bs_literal.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/test/t/bs_literal.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/test/t/bs_literal.rb	(revision 439)
@@ -0,0 +1,38 @@
+##
+# Bootstrap test for literals
+
+assert('BS Literal 1') do
+  assert_true true
+end
+
+assert('BS Literal 2') do
+  assert_equal TrueClass, true.class
+end
+
+assert('BS Literal 3') do
+  assert_false false
+end
+
+assert('BS Literal 4') do
+  assert_equal FalseClass, false.class
+end
+
+assert('BS Literal 5') do
+  assert_equal 'nil', nil.inspect
+end
+
+assert('BS Literal 6') do
+  assert_equal NilClass, nil.class
+end
+
+assert('BS Literal 7') do
+  assert_equal Symbol, :sym.class
+end
+
+assert('BS Literal 8') do
+  assert_equal 1234, 1234
+end
+
+assert('BS Literal 9') do
+  assert_equal Fixnum, 1234.class
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/test/t/class.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/test/t/class.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/test/t/class.rb	(revision 439)
@@ -0,0 +1,465 @@
+##
+# Class ISO Test
+
+assert('Class', '15.2.3') do
+  assert_equal(Class, Class.class)
+end
+
+assert('Class#initialize', '15.2.3.3.1') do
+  c = Class.new do
+    def test
+      :test
+    end
+  end.new
+
+  assert_equal(c.test, :test)
+end
+
+assert('Class#initialize_copy', '15.2.3.3.2') do
+  class TestClass
+    attr_accessor :n
+    def initialize(n)
+      @n = n
+    end
+    def initialize_copy(obj)
+      @n = n
+    end
+  end
+
+  c1 = TestClass.new('Foo')
+  c2 = c1.dup
+  c3 = TestClass.new('Bar')
+
+  assert_equal(c1.n, c2.n)
+  assert_not_equal(c1.n, c3.n)
+end
+
+assert('Class#new', '15.2.3.3.3') do
+  assert_raise(TypeError, 'Singleton should raise TypeError') do
+    (class <<"a"; self; end).new
+  end
+
+  class TestClass
+    def initialize args, &block
+      @result = if not args.nil? and block.nil?
+        # only arguments
+        :only_args
+      elsif not args.nil? and not block.nil?
+        # args and block is given
+        :args_and_block
+      else
+        # this should never happen
+        :broken
+      end
+    end
+
+    def result; @result; end
+  end
+
+  assert_equal(:only_args, TestClass.new(:arg).result)
+  # with block doesn't work yet
+end
+
+assert('Class#superclass', '15.2.3.3.4') do
+  class SubClass < String; end
+  assert_equal(String, SubClass.superclass)
+end
+
+# Not ISO specified
+
+assert('Class 1') do
+  class C1; end
+  assert_equal(Class, C1.class)
+end
+
+assert('Class 2') do
+  class C2; end
+  assert_equal(C2, C2.new.class)
+end
+
+assert('Class 3') do
+  class C3; end
+  assert_equal(Class, C3.new.class.class)
+end
+
+assert('Class 4') do
+  class C4_A; end
+  class C4 < C4_A; end
+  assert_equal(Class, C4.class)
+end
+
+assert('Class 5') do
+  class C5_A; end
+  class C5 < C5_A; end
+  assert_equal(C5, C5.new.class)
+end
+
+assert('Class 6') do
+  class C6_A; end
+  class C6 < C6_A; end
+  assert_equal(Class, C6.new.class.class)
+end
+
+assert('Class 7') do
+  class C7_A; end
+  class C7_B; end
+
+  class C7 < C7_A; end
+
+  assert_raise(TypeError) do
+    # Different superclass.
+    class C7 < C7_B; end
+  end
+end
+
+assert('Class 8') do
+  class C8_A; end
+
+  class C8; end  # superclass is Object
+
+  assert_raise(TypeError) do
+    # Different superclass.
+    class C8 < C8_A; end
+  end
+end
+
+assert('Class 9') do
+  Class9Const = "a"
+
+  assert_raise(TypeError) do
+    class Class9Const; end
+  end
+end
+
+assert('Class Module 1') do
+  module M; end
+  assert_equal(Module, M.class)
+end
+
+assert('Class Module 2') do
+  module M; end
+  class C; include M; end
+  assert_equal(C, C.new.class)
+end
+
+# nested class
+assert('Class Nested 1') do
+  class A; end
+  class A::B; end
+  assert_equal(A::B, A::B)
+end
+
+assert('Class Nested 2') do
+  class A; end
+  class A::B; end
+  assert_equal(A::B, A::B.new.class)
+end
+
+assert('Class Nested 3') do
+  class A; end
+  class A::B; end
+  assert_equal(Class, A::B.new.class.class)
+end
+
+assert('Class Nested 4') do
+  class A; end
+  class A::B; end
+  class A::B::C; end
+  assert_equal(A::B::C, A::B::C)
+end
+
+assert('Class Nested 5') do
+  class A; end
+  class A::B; end
+  class A::B::C; end
+  assert_equal(Class, A::B::C.class)
+end
+
+assert('Class Nested 6') do
+  class A; end
+  class A::B; end
+  class A::B::C; end
+  assert_equal(A::B::C, A::B::C.new.class)
+end
+
+assert('Class Nested 7') do
+  class A; end
+  class A::B; end
+  class A::B2 < A::B; end
+  assert_equal(A::B2, A::B2)
+end
+
+assert('Class Nested 8') do
+  class A; end
+  class A::B; end
+  class A::B2 < A::B; end
+  assert_equal(Class, A::B2.class)
+end
+
+assert('Class Colon 1') do
+  class A; end
+  A::C = 1
+  assert_equal(1, A::C)
+end
+
+assert('Class Colon 2') do
+  class A; class ::C; end end
+  assert_equal(C, C)
+end
+
+assert('Class Colon 3') do
+  class A; class ::C; end end
+  assert_equal(Class, C.class)
+end
+
+assert('Class Dup 1') do
+  class C; end
+  assert_equal(Class, C.dup.class)
+end
+
+assert('Class Dup 2') do
+  module M; end
+  assert_equal(Module, M.dup.class)
+end
+
+assert('Class.new') do
+  assert_equal(Class, Class.new.class)
+  a = []
+  klass = Class.new do |c|
+    a << c
+  end
+  assert_equal([klass], a)
+end
+
+assert('class to return the last value') do
+  m = class C; :m end
+  assert_equal(m, :m)
+end
+
+assert('class to return nil if body is empty') do
+  assert_nil(class C end)
+  assert_nil(class << self; end)
+end
+
+assert('raise when superclass is not a class') do
+  module FirstModule; end
+  assert_raise(TypeError, 'should raise TypeError') do
+    class FirstClass < FirstModule; end
+  end
+
+  class SecondClass; end
+  assert_raise(TypeError, 'should raise TypeError') do
+    class SecondClass < false; end
+  end
+
+  class ThirdClass; end
+  assert_raise(TypeError, 'should raise TypeError') do
+    class ThirdClass < ThirdClass; end
+  end
+end
+
+assert('Class#inherited') do
+  class Foo
+    @@subclass_name = nil
+    def self.inherited(subclass)
+      @@subclass_name = subclass
+    end
+    def self.subclass_name
+      @@subclass_name
+    end
+  end
+
+  assert_equal(nil, Foo.subclass_name)
+
+  class Bar < Foo
+  end
+
+  assert_equal(Bar, Foo.subclass_name)
+
+  class Baz < Bar
+  end
+
+  assert_equal(Baz, Foo.subclass_name)
+end
+
+assert('singleton tests') do
+  module FooMod
+    def run_foo_mod
+      100
+    end
+  end
+
+  bar = String.new
+
+  baz = class << bar
+    extend FooMod
+    def self.run_baz
+      200
+    end
+  end
+
+  assert_equal :run_baz, baz
+
+  assert_raise(NoMethodError, 'should raise NoMethodError') do
+    bar.run_foo_mod
+  end
+  assert_raise(NoMethodError, 'should raise NoMethodError') do
+    bar.run_baz
+  end
+
+  baz = class << bar
+    extend FooMod
+    def self.run_baz
+      300
+    end
+    self
+  end
+
+  assert_true baz.respond_to? :run_baz
+  assert_true baz.respond_to? :run_foo_mod
+  assert_equal 100, baz.run_foo_mod
+  assert_equal 300, baz.run_baz
+
+  assert_raise(NoMethodError, 'should raise NoMethodError') do
+    bar.run_foo_mod
+  end
+  assert_raise(NoMethodError, 'should raise NoMethodError') do
+    bar.run_baz
+  end
+
+  fv = false
+  class << fv
+    def self.run_false
+      5
+    end
+  end
+
+  nv = nil
+  class << nv
+    def self.run_nil
+      6
+    end
+  end
+
+  tv = true
+  class << tv
+    def self.run_nil
+      7
+    end
+  end
+
+  assert_raise(TypeError, 'should raise TypeError') do
+    num = 1.0
+    class << num
+      def self.run_nil
+        7
+      end
+    end
+  end if Object.const_defined?(:Float)
+
+  o = Object.new
+  sc = class << o; self end
+  o.freeze
+  assert_predicate(sc, :frozen?)
+
+  assert_predicate(class << Object.new.freeze; self end, :frozen?)
+end
+
+assert('clone Class') do
+  class Foo
+    def func
+      true
+    end
+  end
+
+  assert_true(Foo.clone.new.func)
+end
+
+assert('class variable and class << self style class method') do
+  class ClassVariableTest
+    @@class_variable = "value"
+    class << self
+      def class_variable
+        @@class_variable
+      end
+    end
+  end
+
+  assert_equal("value", ClassVariableTest.class_variable)
+end
+
+assert('class variable definition in singleton_class') do
+  class ClassVariableDefinitionInSingletonTest
+    class << self
+      @@class_variable = "value"
+    end
+    def class_variable
+      @@class_variable
+    end
+  end
+
+  assert_equal("value", ClassVariableDefinitionInSingletonTest.new.class_variable)
+end
+
+assert('class variable in module and class << self style class method') do
+  module ClassVariableInModuleTest
+    @@class_variable = "value"
+    class << self
+      def class_variable
+        @@class_variable
+      end
+    end
+  end
+
+  assert_equal("value", ClassVariableInModuleTest.class_variable)
+end
+
+assert('child class/module defined in singleton class get parent constant') do
+  actual = module GetParentConstantTest
+            EXPECT = "value"
+            class << self
+              class CHILD
+                class << self
+                    EXPECT
+                end
+              end
+            end
+          end
+  assert_equal("value", actual)
+end
+
+assert('overriding class variable with a module (#3235)') do
+  module ModuleWithCVar
+    @@class_variable = 1
+  end
+  class CVarOverrideTest
+    @@class_variable = 2
+    include ModuleWithCVar
+
+    assert_equal(1, @@class_variable)
+  end
+end
+
+assert('class variable for frozen class/module') do
+  module CVarForFrozenModule
+    freeze
+    assert_raise(FrozenError) { @@cv = 1 }
+  end
+
+  class CVarForFrozenClassA
+    @@a = nil
+    freeze
+  end
+  class CVarForFrozenClassB < CVarForFrozenClassA
+    def a=(v)
+      @@a = v
+    end
+  end
+  b = CVarForFrozenClassB.new
+  assert_raise(FrozenError) { b.a = 1 }
+end
+
+assert('class with non-class/module outer raises TypeError') do
+  assert_raise(TypeError) { class 0::C1; end }
+  assert_raise(TypeError) { class []::C2; end }
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/test/t/codegen.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/test/t/codegen.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/test/t/codegen.rb	(revision 439)
@@ -0,0 +1,197 @@
+##
+# Codegen tests
+
+assert('peephole optimization does not eliminate move whose result is reused') do
+  assert_raise LocalJumpError do
+    def method
+      yield
+    end
+    method(&a &&= 0)
+  end
+end
+
+assert('empty condition in ternary expression parses correctly') do
+  assert_equal(() ? 1 : 2, 2)
+end
+
+assert('method call with exactly 127 arguments') do
+  def args_to_ary(*args)
+    args
+  end
+
+  assert_equal [0]*127, args_to_ary(
+    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, \
+    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, \
+    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, \
+    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, \
+    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, \
+    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+  )
+end
+
+assert('nested empty heredoc') do
+  _, a = nil, <<B
+#{<<A}
+A
+B
+  assert_equal "\n", a
+end
+
+assert('splat in case splat') do
+  a = *case
+    when 0
+      * = 1
+  end
+
+  assert_equal [1], a
+end
+
+assert('undef with 127 or more arguments') do
+  assert_raise NameError do
+    undef
+      a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
+      a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
+      a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
+      a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a
+  end
+end
+
+assert('next in normal loop with 127 arguments') do
+  assert_raise NameError do
+    while true
+      next A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A
+    end
+  end
+end
+
+assert('negate literal register alignment') do
+  a = *case
+  when 0
+    -0.0
+    2
+  end
+
+  assert_equal [2], a
+end
+
+assert('register window of calls (#3783)') do
+  # NODE_FOR
+  assert_nothing_raised do
+    for i in []; end
+  end
+
+  # NODE_SYMBOLS
+  assert_nothing_raised do
+    %i(sym)
+  end
+
+  # NODE_SCALL
+  assert_nothing_raised do
+    Object.new&.__id__
+  end
+
+  # NODE_RESCUE with splat
+  assert_nothing_raised do
+    begin
+      raise
+    rescue *[Exception]
+    end
+  end
+
+  # NODE_CASE
+  assert_nothing_raised do
+    case 1
+    when nil
+    end
+  end
+
+  # NODE_CASE with splat
+  assert_nothing_raised do
+    case 1
+    when *nil
+    end
+  end
+
+  # NODE_HASH
+  assert_nothing_raised do
+    {}.merge(
+        0=>0,     1=>1,     2=>2,     3=>3,     4=>4,     5=>5,     6=>6,     7=>7,     8=>8,     9=>9,
+       10=>10,   11=>11,   12=>12,   13=>13,   14=>14,   15=>15,   16=>16,   17=>17,   18=>18,   19=>19,
+       20=>20,   21=>21,   22=>22,   23=>23,   24=>24,   25=>25,   26=>26,   27=>27,   28=>28,   29=>29,
+       30=>30,   31=>31,   32=>32,   33=>33,   34=>34,   35=>35,   36=>36,   37=>37,   38=>38,   39=>39,
+       40=>40,   41=>41,   42=>42,   43=>43,   44=>44,   45=>45,   46=>46,   47=>47,   48=>48,   49=>49,
+       50=>50,   51=>51,   52=>52,   53=>53,   54=>54,   55=>55,   56=>56,   57=>57,   58=>58,   59=>59,
+       60=>60,   61=>61,   62=>62,   63=>63,   64=>64,   65=>65,   66=>66,   67=>67,   68=>68,   69=>69,
+       70=>70,   71=>71,   72=>72,   73=>73,   74=>74,   75=>75,   76=>76,   77=>77,   78=>78,   79=>79,
+       80=>80,   81=>81,   82=>82,   83=>83,   84=>84,   85=>85,   86=>86,   87=>87,   88=>88,   89=>89,
+       90=>90,   91=>91,   92=>92,   93=>93,   94=>94,   95=>95,   96=>96,   97=>97,   98=>98,   99=>99,
+      100=>100, 101=>101, 102=>102, 103=>103, 104=>104, 105=>105, 106=>106, 107=>107, 108=>108, 109=>109,
+      110=>110, 111=>111, 112=>112, 113=>113, 114=>114, 115=>115, 116=>116, 117=>117, 118=>118, 119=>119,
+      120=>120, 121=>121, 122=>122, 123=>123, 124=>124, 125=>125, 126=>126)
+  end
+
+  # NODE_OP_ASGN
+  o = Object.new
+  class << o
+    attr_accessor :a
+  end
+
+  o.a = 1
+  assert_nothing_raised{ o.a += 1 }
+  o.a = 1
+  assert_nothing_raised{ o.a <<= 1 }
+  o.a = 1
+  assert_nothing_raised{ o.a &&= 1 }
+
+  o = { k: 1 }
+  assert_nothing_raised{ o[:k] += 1 }
+  o = { k: 1 }
+  assert_nothing_raised{ o[:k] <<= 1 }
+  o = { k: 1 }
+  assert_nothing_raised{ o[:k] &&= 1 }
+
+  o = { k: 1 }
+  assert_nothing_raised{ o[*[:k]] += 1 }
+  o = { k: 1 }
+  assert_nothing_raised{ o[*[:k]] <<= 1 }
+  o = { k: 1 }
+  assert_nothing_raised{ o[*[:k]] &&= 1 }
+
+  # NODE_YIELD
+  def check_node_yield
+    yield
+  end
+  assert_nothing_raised do
+    check_node_yield{}
+  end
+
+  # NODE_DXSTR
+  assert_raise(NotImplementedError){ `#{:dynamic}` }
+
+  # NODE_XSTR
+  assert_raise(NotImplementedError){ `static` }
+
+  # NODE_DREGX
+  class Regexp; end
+  assert_raise(NoMethodError){ /#{'dynamic'}tail/ }
+  assert_raise(NoMethodError){ /#{'dynamic'}tail/iu }
+
+  # NODE_REGX
+  assert_raise(NoMethodError){ /static/ }
+  assert_raise(NoMethodError){ /static/iu }
+  Object.remove_const :Regexp
+
+  # NODE_UNDEF
+  assert_nothing_raised do
+    class << Object.new
+      undef inspect
+    end
+  end
+
+  # NODE_ALIAS
+  assert_nothing_raised do
+    class << Object.new
+      alias inspect2 inspect
+    end
+  end
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/test/t/comparable.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/test/t/comparable.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/test/t/comparable.rb	(revision 439)
@@ -0,0 +1,80 @@
+
+assert('Comparable#<', '15.3.3.2.1') do
+  class Foo
+    include Comparable
+    def <=>(x)
+      x
+    end
+  end
+  assert_false(Foo.new < 0)
+  assert_false(Foo.new < 1)
+  assert_true(Foo.new < -1)
+  assert_raise(ArgumentError){ Foo.new < nil }
+end
+
+assert('Comparable#<=', '15.3.3.2.2') do
+  class Foo
+    include Comparable
+    def <=>(x)
+      x
+    end
+  end
+  assert_true(Foo.new <= 0)
+  assert_false(Foo.new <= 1)
+  assert_true(Foo.new <= -1)
+  assert_raise(ArgumentError){ Foo.new <= nil }
+end
+
+assert('Comparable#==', '15.3.3.2.3') do
+  class Foo
+    include Comparable
+    def <=>(x)
+      0
+    end
+  end
+
+  assert_true(Foo.new == Foo.new)
+end
+
+assert('Comparable#>', '15.3.3.2.4') do
+  class Foo
+    include Comparable
+    def <=>(x)
+      x
+    end
+  end
+  assert_false(Foo.new > 0)
+  assert_true(Foo.new > 1)
+  assert_false(Foo.new > -1)
+  assert_raise(ArgumentError){ Foo.new > nil }
+end
+
+assert('Comparable#>=', '15.3.3.2.5') do
+  class Foo
+    include Comparable
+    def <=>(x)
+      x
+    end
+  end
+  assert_true(Foo.new >= 0)
+  assert_true(Foo.new >= 1)
+  assert_false(Foo.new >= -1)
+  assert_raise(ArgumentError){ Foo.new >= nil }
+end
+
+assert('Comparable#between?', '15.3.3.2.6') do
+  class Foo
+    include Comparable
+    def <=>(x)
+      x
+    end
+  end
+
+  c = Foo.new
+
+  assert_false(c.between?(-1,  1))
+  assert_false(c.between?(-1, -1))
+  assert_false(c.between?( 1,  1))
+  assert_true(c.between?( 1, -1))
+  assert_true(c.between?(0, 0))
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/test/t/ensure.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/test/t/ensure.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/test/t/ensure.rb	(revision 439)
@@ -0,0 +1,54 @@
+##
+# ensure Test
+
+assert('ensure - context - yield') do
+  class EnsureYieldBreak
+    attr_reader :ensure_context
+    def try
+      yield
+    ensure
+      @ensure_context = self
+    end
+  end
+
+  yielder = EnsureYieldBreak.new
+  yielder.try do
+  end
+  assert_equal yielder, yielder.ensure_context
+end
+
+assert('ensure - context - yield and break') do
+  class EnsureYieldBreak
+    attr_reader :ensure_context
+    def try
+      yield
+    ensure
+      @ensure_context = self
+    end
+  end
+
+  yielder = EnsureYieldBreak.new
+  yielder.try do
+    break
+  end
+  assert_equal yielder, yielder.ensure_context
+end
+
+assert('ensure - context - yield and return') do
+  class EnsureYieldBreak
+    attr_reader :ensure_context
+    def try
+      yield
+    ensure
+      @ensure_context = self
+    end
+  end
+
+  yielder = EnsureYieldBreak.new
+  lambda do
+    yielder.try do
+      return
+    end
+  end.call
+  assert_equal yielder, yielder.ensure_context
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/test/t/enumerable.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/test/t/enumerable.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/test/t/enumerable.rb	(revision 439)
@@ -0,0 +1,134 @@
+##
+# Enumerable ISO Test
+
+assert('Enumerable', '15.3.2') do
+  assert_equal(Module, Enumerable.class)
+end
+
+assert('Enumerable#all?', '15.3.2.2.1') do
+  assert_true([1,2,3].all?)
+  assert_false([1,false,3].all?)
+
+  a = [2,4,6]
+  all = a.all? do |e|
+    e % 2 == 0
+  end
+  assert_true(all)
+
+  a = [2,4,7]
+  all = a.all? do |e|
+    e % 2 == 0
+  end
+  assert_false(all)
+end
+
+assert('Enumerable#any?', '15.3.2.2.2') do
+  assert_true([false,true,false].any?)
+  assert_false([false,false,false].any?)
+
+  a = [1,3,6]
+  any = a.any? do |e|
+    e % 2 == 0
+  end
+  assert_true(any)
+
+  a = [1,3,5]
+  any = a.any? do |e|
+    e % 2 == 0
+  end
+  assert_false(any)
+end
+
+assert('Enumerable#collect', '15.3.2.2.3') do
+  assert_true [1,2,3].collect { |i| i + i } == [2,4,6]
+end
+
+assert('Enumerable#detect', '15.3.2.2.4') do
+  assert_equal 1, [1,2,3].detect() { true }
+  assert_equal 'a', [1,2,3].detect(->{"a"}) { false }
+end
+
+assert('Array#each_with_index', '15.3.2.2.5') do
+  a = nil
+  b = nil
+
+  [1].each_with_index {|e,i| a = e; b = i}
+
+  assert_equal(1, a)
+  assert_equal(0, b)
+end
+
+assert('Enumerable#entries', '15.3.2.2.6') do
+  assert_equal([1], [1].entries)
+end
+
+assert('Enumerable#find', '15.3.2.2.7') do
+  assert_equal 1, [1,2,3].find() { true }
+  assert_equal 'a', [1,2,3].find(->{"a"}) { false }
+end
+
+assert('Enumerable#find_all', '15.3.2.2.8') do
+  assert_equal [2,4,6,8], [1,2,3,4,5,6,7,8,9].find_all() {|i| i%2 == 0}
+end
+
+assert('Enumerable#grep', '15.3.2.2.9') do
+  assert_equal [4,5,6], [1,2,3,4,5,6,7,8,9].grep(4..6)
+end
+
+assert('Enumerable#include?', '15.3.2.2.10') do
+  assert_true [1,2,3,4,5,6,7,8,9].include?(5)
+  assert_false [1,2,3,4,5,6,7,8,9].include?(0)
+end
+
+assert('Enumerable#inject', '15.3.2.2.11') do
+  assert_equal 21, [1,2,3,4,5,6].inject() {|s, n| s + n}
+  assert_equal 22, [1,2,3,4,5,6].inject(1) {|s, n| s + n}
+end
+
+assert('Enumerable#map', '15.3.2.2.12') do
+  assert_equal [2,4,6], [1,2,3].map { |i| i + i }
+end
+
+assert('Enumerable#max', '15.3.2.2.13') do
+  a = ['aaa', 'bb', 'c']
+  assert_equal 'c', a.max
+  assert_equal 'aaa', a.max {|i1,i2| i1.length <=> i2.length}
+end
+
+assert('Enumerable#min', '15.3.2.2.14') do
+  a = ['aaa', 'bb', 'c']
+  assert_equal 'aaa', a.min
+  assert_equal 'c', a.min {|i1,i2| i1.length <=> i2.length}
+end
+
+assert('Enumerable#member?', '15.3.2.2.15') do
+  assert_true [1,2,3,4,5,6,7,8,9].member?(5)
+  assert_false [1,2,3,4,5,6,7,8,9].member?(0)
+end
+
+assert('Enumerable#partition', '15.3.2.2.16') do
+  partition = [0,1,2,3,4,5,6,7,8,9].partition do |i|
+    i % 2 == 0
+  end
+  assert_equal [[0,2,4,6,8], [1,3,5,7,9]], partition
+end
+
+assert('Enumerable#reject', '15.3.2.2.17') do
+  reject = [0,1,2,3,4,5,6,7,8,9].reject do |i|
+    i % 2 == 0
+  end
+  assert_equal [1,3,5,7,9], reject
+end
+
+assert('Enumerable#select', '15.3.2.2.18') do
+  assert_equal [2,4,6,8], [1,2,3,4,5,6,7,8,9].select() {|i| i%2 == 0}
+end
+
+assert('Enumerable#sort', '15.3.2.2.19') do
+  assert_equal [1,2,3,4,6,7], [7,3,1,2,6,4].sort
+  assert_equal [7,6,4,3,2,1], [7,3,1,2,6,4].sort {|e1,e2|e2<=>e1}
+end
+
+assert('Enumerable#to_a', '15.3.2.2.20') do
+  assert_equal [1], [1].to_a
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/test/t/exception.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/test/t/exception.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/test/t/exception.rb	(revision 439)
@@ -0,0 +1,424 @@
+##
+# Exception ISO Test
+
+assert('Exception', '15.2.22') do
+  assert_equal Class, Exception.class
+end
+
+assert('Exception.exception', '15.2.22.4.1') do
+  e = Exception.exception('a')
+
+  assert_equal Exception, e.class
+end
+
+assert('Exception#exception', '15.2.22.5.1') do
+  e = Exception.new
+  re = RuntimeError.new
+  assert_equal e, e.exception
+  assert_equal e, e.exception(e)
+  assert_equal re, re.exception(re)
+  changed_re = re.exception('message has changed')
+  assert_not_equal re, changed_re
+  assert_equal 'message has changed', changed_re.message
+end
+
+assert('Exception#message', '15.2.22.5.2') do
+  e = Exception.exception('a')
+
+  assert_equal 'a', e.message
+end
+
+assert('Exception#to_s', '15.2.22.5.3') do
+  e = Exception.exception('a')
+
+  assert_equal 'a', e.to_s
+end
+
+assert('Exception.exception', '15.2.22.4.1') do
+  e = Exception.exception()
+  e.initialize('a')
+
+  assert_equal 'a', e.message
+end
+
+assert('NameError', '15.2.31') do
+  assert_raise(NameError) do
+    raise NameError.new
+  end
+
+  e = NameError.new "msg", "name"
+  assert_equal "msg", e.message
+  assert_equal "name", e.name
+end
+
+assert('ScriptError', '15.2.37') do
+  assert_raise(ScriptError) do
+    raise ScriptError.new
+  end
+end
+
+assert('SyntaxError', '15.2.38') do
+  assert_raise(SyntaxError) do
+    raise SyntaxError.new
+  end
+end
+
+# Not ISO specified
+
+assert('Exception 1') do
+r=begin
+    1+1
+  ensure
+    2+2
+  end
+  assert_equal 2, r
+end
+
+assert('Exception 2') do
+r=begin
+    1+1
+    begin
+      2+2
+    ensure
+      3+3
+    end
+  ensure
+    4+4
+  end
+  assert_equal 4, r
+end
+
+assert('Exception 3') do
+r=begin
+    1+1
+    begin
+      2+2
+    ensure
+      3+3
+    end
+  ensure
+    4+4
+    begin
+      5+5
+    ensure
+      6+6
+    end
+  end
+  assert_equal 4, r
+end
+
+assert('Exception 4') do
+  a = nil
+  1.times{|e|
+    begin
+    rescue => err
+    end
+    a = err.class
+  }
+  assert_equal NilClass, a
+end
+
+assert('Exception 5') do
+  $ans = []
+  def m
+    $!
+  end
+  def m2
+    1.times{
+      begin
+        return
+      ensure
+        $ans << m
+      end
+    }
+  end
+  m2
+  assert_equal [nil], $ans
+end
+
+assert('Exception 6') do
+  $i = 0
+  def m
+    iter{
+      begin
+        $i += 1
+        begin
+          $i += 2
+          break
+        ensure
+
+        end
+      ensure
+        $i += 4
+      end
+      $i = 0
+    }
+  end
+
+  def iter
+    yield
+  end
+  m
+  assert_equal 7, $i
+end
+
+assert('Exception 7') do
+  $i = 0
+  def m
+    begin
+      $i += 1
+      begin
+        $i += 2
+        return
+      ensure
+        $i += 3
+      end
+    ensure
+      $i += 4
+    end
+    p :end
+  end
+  m
+  assert_equal 10, $i
+end
+
+assert('Exception 8') do
+r=begin
+    1
+  rescue
+    2
+  else
+    3
+  end
+  assert_equal 3, r
+end
+
+assert('Exception 9') do
+r=begin
+    1+1
+  rescue
+    2+2
+  else
+    3+3
+  ensure
+    4+4
+  end
+  assert_equal 6, r
+end
+
+assert('Exception 10') do
+r=begin
+    1+1
+    begin
+      2+2
+    rescue
+      3+3
+    else
+      4+4
+    end
+  rescue
+    5+5
+  else
+    6+6
+  ensure
+    7+7
+  end
+  assert_equal 12, r
+end
+
+assert('Exception 11') do
+  a = :ok
+  begin
+    begin
+      raise Exception
+    rescue
+      a = :ng
+    end
+  rescue Exception
+  end
+  assert_equal :ok, a
+end
+
+assert('Exception 12') do
+  a = :ok
+  begin
+    raise Exception rescue a = :ng
+  rescue Exception
+  end
+  assert_equal :ok, a
+end
+
+assert('Exception 13') do
+  a = :ng
+  begin
+    raise StandardError
+  rescue TypeError, ArgumentError
+    a = :ng
+  rescue
+    a = :ok
+  else
+    a = :ng
+  end
+  assert_equal :ok, a
+end
+
+assert('Exception 14') do
+  def (o = Object.new).exception_test14; UnknownConstant end
+  a = :ng
+  begin
+    o.__send__(:exception_test14)
+  rescue
+    a = :ok
+  end
+
+  assert_equal :ok, a
+end
+
+assert('Exception 15') do
+  a = begin
+        :ok
+      rescue
+        :ko
+      end
+  assert_equal :ok, a
+end
+
+assert('Exception 16') do
+  begin
+    raise "foo"
+    false
+  rescue => e
+    assert_equal "foo", e.message
+  end
+end
+
+assert('Exception 17') do
+r=begin
+    raise "a"  # RuntimeError
+  rescue ArgumentError
+    1
+  rescue StandardError
+    2
+  else
+    3
+  ensure
+    4
+  end
+  assert_equal 2, r
+end
+
+assert('Exception 18') do
+r=begin
+    0
+  rescue ArgumentError
+    1
+  rescue StandardError
+    2
+  else
+    3
+  ensure
+    4
+  end
+  assert_equal 3, r
+end
+
+assert('Exception 19') do
+  class Class4Exception19
+    def a
+      r = @e = false
+      begin
+        b
+      rescue TypeError
+        r = self.z
+      end
+      [ r, @e ]
+    end
+
+    def b
+      begin
+        1 * "b"
+      ensure
+        @e = self.zz
+      end
+    end
+
+    def zz
+      true
+    end
+    def z
+      true
+    end
+  end
+  assert_equal [true, true], Class4Exception19.new.a
+end
+
+assert('Exception#inspect') do
+  assert_equal "Exception", Exception.new.inspect
+  assert_equal "Exception", Exception.new("").inspect
+  assert_equal "error! (Exception)", Exception.new("error!").inspect
+end
+
+assert('Exception#backtrace') do
+  assert_nothing_raised do
+    begin
+      raise "get backtrace"
+    rescue => e
+      e.backtrace
+    end
+  end
+end
+
+assert('Raise in ensure') do
+  assert_raise(ArgumentError) do
+    begin
+      raise "" # RuntimeError
+    ensure
+      raise ArgumentError
+    end
+  end
+end
+
+def backtrace_available?
+  begin
+    raise "XXX"
+  rescue => exception
+    not exception.backtrace.empty?
+  end
+end
+
+assert('GC in rescue') do
+  skip "backtrace isn't available" unless backtrace_available?
+
+  line = nil
+  begin
+    [1].each do
+      [2].each do
+        [3].each do
+          line = __LINE__; raise "XXX"
+        end
+      end
+    end
+  rescue => exception
+    GC.start
+    assert_equal("#{__FILE__}:#{line}",
+                 exception.backtrace.first)
+  end
+end
+
+assert('Method call in rescue') do
+  skip "backtrace isn't available" unless backtrace_available?
+
+  line = nil
+  begin
+    [1].each do
+      [2].each do
+        line = __LINE__; raise "XXX"
+      end
+    end
+  rescue => exception
+    [3].each do
+    end
+    assert_equal("#{__FILE__}:#{line}",
+                 exception.backtrace.first)
+  end
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/test/t/false.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/test/t/false.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/test/t/false.rb	(revision 439)
@@ -0,0 +1,31 @@
+##
+# FalseClass ISO Test
+
+assert('FalseClass', '15.2.6') do
+  assert_equal Class, FalseClass.class
+end
+
+assert('FalseClass false', '15.2.6.1') do
+  assert_false false
+  assert_equal FalseClass, false.class
+  assert_false FalseClass.method_defined? :new
+end
+
+assert('FalseClass#&', '15.2.6.3.1') do
+  assert_false false.&(true)
+  assert_false false.&(false)
+end
+
+assert('FalseClass#^', '15.2.6.3.2') do
+  assert_true false.^(true)
+  assert_false false.^(false)
+end
+
+assert('FalseClass#to_s', '15.2.6.3.3') do
+  assert_equal 'false', false.to_s
+end
+
+assert('FalseClass#|', '15.2.6.3.4') do
+  assert_true false.|(true)
+  assert_false false.|(false)
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/test/t/float.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/test/t/float.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/test/t/float.rb	(revision 439)
@@ -0,0 +1,248 @@
+##
+# Float ISO Test
+
+if Object.const_defined?(:Float)
+
+assert('Float', '15.2.9') do
+  assert_equal Class, Float.class
+end
+
+assert('Float#+', '15.2.9.3.1') do
+  a = 3.123456788 + 0.000000001
+  b = 3.123456789 + 1
+
+  assert_float(3.123456789, a)
+  assert_float(4.123456789, b)
+
+  assert_raise(TypeError){ 0.0+nil }
+  assert_raise(TypeError){ 1.0+nil }
+end
+
+assert('Float#-', '15.2.9.3.2') do
+  a = 3.123456790 - 0.000000001
+  b = 5.123456789 - 1
+
+  assert_float(3.123456789, a)
+  assert_float(4.123456789, b)
+end
+
+assert('Float#*', '15.2.9.3.3') do
+  a = 3.125 * 3.125
+  b = 3.125 * 1
+
+  assert_float(9.765625, a)
+  assert_float(3.125   , b)
+end
+
+assert('Float#/', '15.2.9.3.4') do
+  a = 3.123456789 / 3.123456789
+  b = 3.123456789 / 1
+
+  assert_float(1.0        , a)
+  assert_float(3.123456789, b)
+end
+
+assert('Float#%', '15.2.9.3.5') do
+  a = 3.125 % 3.125
+  b = 3.125 % 1
+
+  assert_float(0.0  , a)
+  assert_float(0.125, b)
+end
+
+assert('Float#<=>', '15.2.9.3.6') do
+  a = 3.125 <=> 3.123
+  b = 3.125 <=> 3.125
+  c = 3.125 <=> 3.126
+  a2 = 3.125 <=> 3
+  c2 = 3.125 <=> 4
+
+  assert_equal( 1, a)
+  assert_equal( 0, b)
+  assert_equal(-1, c)
+  assert_equal( 1, a2)
+  assert_equal(-1, c2)
+end
+
+assert('Float#==', '15.2.9.3.7') do
+  assert_true 3.1 == 3.1
+  assert_false 3.1 == 3.2
+end
+
+assert('Float#ceil', '15.2.9.3.8') do
+  a = 3.123456789.ceil
+  b = 3.0.ceil
+  c = -3.123456789.ceil
+  d = -3.0.ceil
+
+  assert_equal( 4, a)
+  assert_equal( 3, b)
+  assert_equal(-3, c)
+  assert_equal(-3, d)
+end
+
+assert('Float#finite?', '15.2.9.3.9') do
+  assert_predicate 3.123456789, :finite?
+  assert_not_predicate 1.0 / 0.0, :finite?
+end
+
+assert('Float#floor', '15.2.9.3.10') do
+  a = 3.123456789.floor
+  b = 3.0.floor
+  c = -3.123456789.floor
+  d = -3.0.floor
+
+  assert_equal( 3, a)
+  assert_equal( 3, b)
+  assert_equal(-4, c)
+  assert_equal(-3, d)
+end
+
+assert('Float#infinite?', '15.2.9.3.11') do
+  a = 3.123456789.infinite?
+  b = (1.0 / 0.0).infinite?
+  c = (-1.0 / 0.0).infinite?
+
+  assert_nil a
+  assert_equal( 1, b)
+  assert_equal(-1, c)
+end
+
+assert('Float#round', '15.2.9.3.12') do
+  a = 3.123456789.round
+  b = 3.5.round
+  c = 3.4999.round
+  d = (-3.123456789).round
+  e = (-3.5).round
+  f = 12345.67.round(-1)
+  g = 3.423456789.round(0)
+  h = 3.423456789.round(1)
+  i = 3.423456789.round(3)
+
+  assert_equal(    3, a)
+  assert_equal(    4, b)
+  assert_equal(    3, c)
+  assert_equal(   -3, d)
+  assert_equal(   -4, e)
+  assert_equal(12350, f)
+  assert_equal(    3, g)
+  assert_float(  3.4, h)
+  assert_float(3.423, i)
+
+  assert_equal(42.0, 42.0.round(307))
+  assert_equal(1.0e307, 1.0e307.round(2))
+
+  inf = 1.0/0.0
+  assert_raise(FloatDomainError){ inf.round }
+  assert_raise(FloatDomainError){ inf.round(-1) }
+  assert_equal(inf, inf.round(1))
+  nan = 0.0/0.0
+  assert_raise(FloatDomainError){ nan.round }
+  assert_raise(FloatDomainError){ nan.round(-1) }
+  assert_predicate(nan.round(1), :nan?)
+end
+
+assert('Float#to_f', '15.2.9.3.13') do
+  a = 3.123456789
+
+  assert_float(a, a.to_f)
+end
+
+assert('Float#to_i', '15.2.9.3.14') do
+  assert_equal(3, 3.123456789.to_i)
+  assert_raise(FloatDomainError) { Float::INFINITY.to_i }
+  assert_raise(FloatDomainError) { (-Float::INFINITY).to_i }
+  assert_raise(FloatDomainError) { Float::NAN.to_i }
+end
+
+assert('Float#truncate', '15.2.9.3.15') do
+  assert_equal( 3,  3.123456789.truncate)
+  assert_equal(-3, -3.1.truncate)
+end
+
+assert('Float#divmod') do
+  def check_floats exp, act
+    assert_float exp[0], act[0]
+    assert_float exp[1], act[1]
+  end
+
+  # Note: quotients are Float because mruby does not have Bignum.
+  check_floats [ 0,  0.0],   0.0.divmod(1)
+  check_floats [ 0,  1.1],   1.1.divmod(3)
+  check_floats [ 3,  0.2],   3.2.divmod(1)
+  check_floats [ 2,  6.3],  20.3.divmod(7)
+  check_floats [-1,  1.6],  -3.4.divmod(5)
+  check_floats [-2, -0.5],  25.5.divmod(-13)
+  check_floats [ 1, -6.6], -13.6.divmod(-7)
+  check_floats [ 3,  0.2],   9.8.divmod(3.2)
+end
+
+assert('Float#nan?') do
+  assert_predicate(0.0/0.0, :nan?)
+  assert_not_predicate(0.0, :nan?)
+  assert_not_predicate(1.0/0.0, :nan?)
+  assert_not_predicate(-1.0/0.0, :nan?)
+end
+
+assert('Float#<<') do
+  # Left Shift by one
+  assert_equal 46, 23.0 << 1
+
+  # Left Shift by a negative is Right Shift
+  assert_equal 23, 46.0 << -1
+end
+
+assert('Float#>>') do
+  # Right Shift by one
+  assert_equal 23, 46.0 >> 1
+
+  # Right Shift by a negative is Left Shift
+  assert_equal 46, 23.0 >> -1
+
+  # Don't raise on large Right Shift
+  assert_equal 0, 23.0 >> 128
+
+  # Don't raise on large Right Shift
+  assert_equal(-1, -23.0 >> 128)
+end
+
+assert('Float#to_s') do
+  uses_float = 4e38.infinite?  # enable MRB_USE_FLOAT?
+
+  assert_equal("Infinity", Float::INFINITY.to_s)
+  assert_equal("-Infinity", (-Float::INFINITY).to_s)
+  assert_equal("NaN", Float::NAN.to_s)
+  assert_equal("0", 0.0.to_s)
+  assert_equal("-0", -0.0.to_s)
+  assert_equal("-3.25", -3.25.to_s)
+  assert_equal("50", 50.0.to_s)
+  assert_equal("0.0125", 0.0125.to_s)
+  assert_equal("-0.0125", -0.0125.to_s)
+  assert_equal("1.0e-10", 0.0000000001.to_s)
+  assert_equal("-1.0e-10", -0.0000000001.to_s)
+  assert_equal("1.0e+20", 1e20.to_s)
+  assert_equal("-1.0e+20", -1e20.to_s)
+  assert_equal("1.0e+16", 10000000000000000.0.to_s)
+  assert_equal("-1.0e+16", -10000000000000000.0.to_s)
+  assert_equal("100000", 100000.0.to_s)
+  assert_equal("-100000", -100000.0.to_s)
+  if uses_float
+    assert_equal("1.0e+08", 100000000.0.to_s)
+    assert_equal("-1.0e+08", -100000000.0.to_s)
+    assert_equal("1.0e+07", 10000000.0.to_s)
+    assert_equal("-1.0e+07", -10000000.0.to_s)
+  else
+    assert_equal("1.0e+15", 1000000000000000.0.to_s)
+    assert_equal("-1.0e+15", -1000000000000000.0.to_s)
+    assert_equal("100000000000000", 100000000000000.0.to_s)
+    assert_equal("-100000000000000", -100000000000000.0.to_s)
+  end
+end
+
+assert('Float#eql?') do
+  assert_operator(5.0, :eql?, 5.0)
+  assert_not_operator(5.0, :eql?, 5)
+  assert_not_operator(5.0, :eql?, "5.0")
+end
+
+end # const_defined?(:Float)
Index: /EcnlProtoTool/trunk/mruby-2.1.1/test/t/gc.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/test/t/gc.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/test/t/gc.rb	(revision 439)
@@ -0,0 +1,45 @@
+# Not ISO specified
+
+assert('GC.enable') do
+  assert_false GC.disable
+  assert_true GC.enable
+  assert_false GC.enable
+end
+
+assert('GC.disable') do
+  begin
+    assert_false GC.disable
+    assert_true GC.disable
+  ensure
+    GC.enable
+  end
+end
+
+assert('GC.interval_ratio=') do
+  origin = GC.interval_ratio
+  begin
+    assert_equal 150, (GC.interval_ratio = 150)
+  ensure
+    GC.interval_ratio = origin
+  end
+end
+
+assert('GC.step_ratio=') do
+  origin = GC.step_ratio
+  begin
+    assert_equal 150, (GC.step_ratio = 150)
+  ensure
+    GC.step_ratio = origin
+  end
+end
+
+assert('GC.generational_mode=') do
+  origin = GC.generational_mode
+  begin
+    assert_false (GC.generational_mode = false)
+    assert_true (GC.generational_mode = true)
+    assert_true (GC.generational_mode = true)
+  ensure
+    GC.generational_mode = origin
+  end
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/test/t/hash.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/test/t/hash.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/test/t/hash.rb	(revision 439)
@@ -0,0 +1,378 @@
+##
+# Hash ISO Test
+
+assert('Hash', '15.2.13') do
+  assert_equal Class, Hash.class
+end
+
+assert('Hash#==', '15.2.13.4.1') do
+  assert_true({ 'abc' => 'abc' } == { 'abc' => 'abc' })
+  assert_false({ 'abc' => 'abc' } ==  { 'cba' => 'cba' })
+  assert_false({ :a => 1 } == true)
+  skip unless Object.const_defined?(:Float)
+  assert_true({ :equal => 1 } == { :equal => 1.0 })
+end
+
+assert('Hash#[]', '15.2.13.4.2') do
+  a = { 'abc' => 'abc' }
+
+  assert_equal 'abc', a['abc']
+
+  # Hash#[] should call #default (#3272)
+  hash = {}
+  def hash.default(k); self[k] = 1; end
+  hash[:foo] += 1
+
+  assert_equal 2, hash[:foo]
+end
+
+assert('Hash#[]=', '15.2.13.4.3') do
+  a = Hash.new
+  a['abc'] = 'abc'
+
+  assert_equal 'abc', a['abc']
+end
+
+assert('Hash#clear', '15.2.13.4.4') do
+  a = { 'abc' => 'abc' }
+  a.clear
+
+  assert_equal({ }, a)
+end
+
+assert('Hash#dup') do
+  a = { 'a' => 1 }
+  b = a.dup
+  a['a'] = 2
+  assert_equal({'a' => 1}, b)
+
+  c = Hash.new { |h, k| h[k] = k.upcase }
+  d = c.dup
+  assert_equal("FOO", d["foo"])
+end
+
+assert('Hash#default', '15.2.13.4.5') do
+  a = Hash.new
+  b = Hash.new('abc')
+  c = Hash.new {|s,k| s[k] = k}
+
+  assert_nil a.default
+  assert_equal 'abc', b.default
+  assert_nil c.default
+  assert_equal 'abc', c.default('abc')
+end
+
+assert('Hash#default=', '15.2.13.4.6') do
+  a = { 'abc' => 'abc' }
+  a.default = 'cba'
+
+  assert_equal 'abc', a['abc']
+  assert_equal 'cba', a['notexist']
+end
+
+assert('Hash#default_proc', '15.2.13.4.7') do
+  a = Hash.new
+  b = Hash.new {|s,k| s[k] = k + k}
+  c = b[2]
+  d = b['cat']
+
+  assert_nil a.default_proc
+  assert_equal Proc, b.default_proc.class
+  assert_equal 4, c
+  assert_equal 'catcat', d
+end
+
+assert('Hash#delete', '15.2.13.4.8') do
+  a = { 'abc' => 'ABC' }
+  b = { 'abc' => 'ABC' }
+  b_tmp_1 = false
+  b_tmp_2 = false
+
+  assert_equal 'ABC', a.delete('abc')
+  b.delete('abc') do |k|
+    b_tmp_1 = true
+  end
+  b.delete('abc') do |k|
+    b_tmp_2 = true
+  end
+
+  assert_nil a.delete('cba')
+  assert_false a.has_key?('abc')
+  assert_false b_tmp_1
+  assert_true b_tmp_2
+end
+
+assert('Hash#each', '15.2.13.4.9') do
+  a = { 'abc_key' => 'abc_value' }
+  key = nil
+  value = nil
+
+  a.each  do |k,v|
+    key = k
+    value = v
+  end
+
+  assert_equal 'abc_key', key
+  assert_equal 'abc_value', value
+end
+
+assert('Hash#each_key', '15.2.13.4.10') do
+  a = { 'abc_key' => 'abc_value' }
+  key = nil
+
+  a.each_key  do |k|
+    key = k
+  end
+
+  assert_equal 'abc_key', key
+end
+
+assert('Hash#each_value', '15.2.13.4.11') do
+  a = { 'abc_key' => 'abc_value' }
+  value = nil
+
+  a.each_value  do |v|
+    value = v
+  end
+
+  assert_equal 'abc_value', value
+end
+
+assert('Hash#empty?', '15.2.13.4.12') do
+  a = { 'abc_key' => 'abc_value' }
+  b = Hash.new
+
+  assert_false a.empty?
+  assert_true b.empty?
+end
+
+assert('Hash#has_key?', '15.2.13.4.13') do
+  a = { 'abc_key' => 'abc_value' }
+  b = Hash.new
+
+  assert_true a.has_key?('abc_key')
+  assert_false b.has_key?('cba')
+end
+
+assert('Hash#has_value?', '15.2.13.4.14') do
+  a = { 'abc_key' => 'abc_value' }
+  b = Hash.new
+
+  assert_true a.has_value?('abc_value')
+  assert_false b.has_value?('cba')
+end
+
+assert('Hash#include?', '15.2.13.4.15') do
+  a = { 'abc_key' => 'abc_value' }
+  b = Hash.new
+
+  assert_true a.include?('abc_key')
+  assert_false b.include?('cba')
+end
+
+assert('Hash#initialize', '15.2.13.4.16') do
+  # Testing initialize by new.
+  h = Hash.new
+  h2 = Hash.new(:not_found)
+
+  assert_true h.is_a? Hash
+  assert_equal({ }, h)
+  assert_nil h["hello"]
+  assert_equal :not_found, h2["hello"]
+end
+
+assert('Hash#initialize_copy', '15.2.13.4.17') do
+  a = { 'abc_key' => 'abc_value' }
+  b = Hash.new.initialize_copy(a)
+
+  assert_equal({ 'abc_key' => 'abc_value' }, b)
+end
+
+assert('Hash#key?', '15.2.13.4.18') do
+  a = { 'abc_key' => 'abc_value' }
+  b = Hash.new
+
+  assert_true a.key?('abc_key')
+  assert_false b.key?('cba')
+end
+
+assert('Hash#keys', '15.2.13.4.19') do
+  a = { 'abc_key' => 'abc_value' }
+
+  assert_equal ['abc_key'], a.keys
+end
+
+assert('Hash#length', '15.2.13.4.20') do
+  a = { 'abc_key' => 'abc_value' }
+  b = Hash.new
+
+  assert_equal 1, a.length
+  assert_equal 0, b.length
+end
+
+assert('Hash#member?', '15.2.13.4.21') do
+  a = { 'abc_key' => 'abc_value' }
+  b = Hash.new
+
+  assert_true a.member?('abc_key')
+  assert_false b.member?('cba')
+end
+
+assert('Hash#merge', '15.2.13.4.22') do
+  a = { 'abc_key' => 'abc_value', 'cba_key' => 'cba_value' }
+  b = { 'cba_key' => 'XXX',  'xyz_key' => 'xyz_value' }
+
+  result_1 = a.merge b
+  result_2 = a.merge(b) do |key, original, new|
+    original
+  end
+
+  assert_equal({'abc_key' => 'abc_value', 'cba_key' => 'XXX',
+                'xyz_key' => 'xyz_value' }, result_1)
+  assert_equal({'abc_key' => 'abc_value', 'cba_key' => 'cba_value',
+                'xyz_key' => 'xyz_value' }, result_2)
+
+  assert_raise(TypeError) do
+    { 'abc_key' => 'abc_value' }.merge "a"
+  end
+end
+
+assert('Hash#replace', '15.2.13.4.23') do
+  a = { 'abc_key' => 'abc_value' }
+  b = Hash.new.replace(a)
+
+  assert_equal({ 'abc_key' => 'abc_value' }, b)
+
+  a = Hash.new(42)
+  b = {}
+  b.replace(a)
+  assert_equal(42, b[1])
+
+  a = Hash.new{|h,x| x}
+  b.replace(a)
+  assert_equal(127, b[127])
+
+   assert_raise(TypeError) do
+    { 'abc_key' => 'abc_value' }.replace "a"
+  end
+end
+
+assert('Hash#shift', '15.2.13.4.24') do
+  a = { 'abc_key' => 'abc_value', 'cba_key' => 'cba_value' }
+  b = a.shift
+
+  assert_equal Array, b.class
+  assert_equal 2, b.size
+  assert_equal 1, a.size
+
+  b = a.shift
+
+  assert_equal Array, b.class
+  assert_equal 2, b.size
+  assert_equal 0, a.size
+end
+
+assert('Hash#size', '15.2.13.4.25') do
+  a = { 'abc_key' => 'abc_value' }
+  b = Hash.new
+
+  assert_equal 1, a.size
+  assert_equal 0, b.size
+end
+
+assert('Hash#store', '15.2.13.4.26') do
+  a = Hash.new
+  a.store('abc', 'abc')
+
+  assert_equal 'abc', a['abc']
+end
+
+assert('Hash#value?', '15.2.13.4.27') do
+  a = { 'abc_key' => 'abc_value' }
+  b = Hash.new
+
+  assert_true a.value?('abc_value')
+  assert_false b.value?('cba')
+end
+
+assert('Hash#values', '15.2.13.4.28') do
+  a = { 'abc_key' => 'abc_value' }
+
+  assert_equal ['abc_value'], a.values
+end
+
+# Not ISO specified
+
+assert('Hash#eql?') do
+  a = { 'a' => 1, 'b' => 2, 'c' => 3 }
+  b = { 'a' => 1, 'b' => 2, 'c' => 3 }
+  c = { 'a' => 1.0, 'b' => 2, 'c' => 3 }
+  assert_true(a.eql?(b))
+  assert_false(a.eql?(c))
+  assert_false(a.eql?(true))
+end
+
+assert('Hash#reject') do
+  h = {:one => 1, :two => 2, :three => 3, :four => 4}
+  ret = h.reject do |k,v|
+    v % 2 == 0
+  end
+  assert_equal({:one => 1, :three => 3}, ret)
+  assert_equal({:one => 1, :two => 2, :three => 3, :four => 4}, h)
+end
+
+assert('Hash#reject!') do
+  h = {:one => 1, :two => 2, :three => 3, :four => 4}
+  ret = h.reject! do |k,v|
+    v % 2 == 0
+  end
+  assert_equal({:one => 1, :three => 3}, ret)
+  assert_equal({:one => 1, :three => 3}, h)
+end
+
+assert('Hash#select') do
+  h = {:one => 1, :two => 2, :three => 3, :four => 4}
+  ret = h.select do |k,v|
+    v % 2 == 0
+  end
+  assert_equal({:two => 2, :four => 4}, ret)
+  assert_equal({:one => 1, :two => 2, :three => 3, :four => 4}, h)
+end
+
+assert('Hash#select!') do
+  h = {:one => 1, :two => 2, :three => 3, :four => 4}
+  ret = h.select! do |k,v|
+    v % 2 == 0
+  end
+  assert_equal({:two => 2, :four => 4}, ret)
+  assert_equal({:two => 2, :four => 4}, h)
+end
+
+# Not ISO specified
+
+assert('Hash#inspect') do
+  h = { "c" => 300, "a" => 100, "d" => 400, "c" => 300  }
+  h["recur"] = h
+  ret = h.to_s
+
+  assert_include ret, '"c"=>300'
+  assert_include ret, '"a"=>100'
+  assert_include ret, '"d"=>400'
+  assert_include ret, '"recur"=>{...}'
+end
+
+assert('Hash#rehash') do
+  h = {[:a] => "b"}
+  # hash key modified
+  h.keys[0][0] = :b
+  # h[[:b]] => nil
+  h.rehash
+  assert_equal("b", h[[:b]])
+end
+
+assert('Hash#freeze') do
+  h = {}.freeze
+  assert_raise(FrozenError) do
+    h[:a] = 'b'
+  end
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/test/t/indexerror.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/test/t/indexerror.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/test/t/indexerror.rb	(revision 439)
@@ -0,0 +1,6 @@
+##
+# IndexError ISO Test
+
+assert('IndexError', '15.2.33') do
+  assert_equal Class, IndexError.class
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/test/t/integer.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/test/t/integer.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/test/t/integer.rb	(revision 439)
@@ -0,0 +1,267 @@
+##
+# Integer ISO Test
+
+assert('Integer', '15.2.8') do
+  assert_equal Class, Integer.class
+end
+
+assert('Integer#+', '15.2.8.3.1') do
+  a = 1+1
+  b = 1+1.0 if Object.const_defined?(:Float)
+
+  assert_equal 2, a
+  assert_equal 2.0, b if Object.const_defined?(:Float)
+
+  assert_raise(TypeError){ 0+nil }
+  assert_raise(TypeError){ 1+nil }
+
+  c = Mrbtest::FIXNUM_MAX + 1
+  d = Mrbtest::FIXNUM_MAX.__send__(:+, 1)
+
+  skip unless Object.const_defined?(:Float)
+  e = Mrbtest::FIXNUM_MAX + 1.0
+  assert_equal Float, c.class
+  assert_equal Float, d.class
+  assert_float e, c
+  assert_float e, d
+end
+
+assert('Integer#-', '15.2.8.3.2') do
+  a = 2-1
+  b = 2-1.0 if Object.const_defined?(:Float)
+
+  assert_equal 1, a
+  assert_equal 1.0, b if Object.const_defined?(:Float)
+
+  c = Mrbtest::FIXNUM_MIN - 1
+  d = Mrbtest::FIXNUM_MIN.__send__(:-, 1)
+
+  skip unless Object.const_defined?(:Float)
+  e = Mrbtest::FIXNUM_MIN - 1.0
+  assert_equal Float, c.class
+  assert_equal Float, d.class
+  assert_float e, c
+  assert_float e, d
+end
+
+assert('Integer#*', '15.2.8.3.3') do
+  a = 1*1
+  b = 1*1.0 if Object.const_defined?(:Float)
+
+  assert_equal 1, a
+  assert_equal 1.0, b if Object.const_defined?(:Float)
+
+  assert_raise(TypeError){ 0*nil }
+  assert_raise(TypeError){ 1*nil }
+
+  c = Mrbtest::FIXNUM_MAX * 2
+  d = Mrbtest::FIXNUM_MAX.__send__(:*, 2)
+
+  skip unless Object.const_defined?(:Float)
+  e = Mrbtest::FIXNUM_MAX * 2.0
+  assert_equal Float, c.class
+  assert_equal Float, d.class
+  assert_float e, c
+  assert_float e, d
+end
+
+assert('Integer#/', '15.2.8.3.4') do
+  a = 2/1
+  b = 2/1.0
+
+  assert_equal 2, a
+  assert_equal 2.0, b
+end
+
+assert('Integer#%', '15.2.8.3.5') do
+  a = 1%1
+  b = 1%1.0
+  c = 2%4
+  d = 2%5
+  e = 2%-5
+  f = -2%5
+  g = -2%-5
+  h =  2%-2
+  i = -2%2
+  j = -2%-2
+
+  assert_equal 0, a
+  assert_equal 0.0, b
+  assert_equal 2, c
+  assert_equal 2, d
+  assert_equal(-3, e)
+  assert_equal 3, f
+  assert_equal(-2, g)
+  assert_equal 0, h
+  assert_equal 0, i
+  assert_equal 0, j
+end
+
+assert('Integer#<=>', '15.2.9.3.6') do
+  a = 1<=>0
+  b = 1<=>1
+  c = 1<=>2
+
+  assert_equal  1, a
+  assert_equal  0, b
+  assert_equal(-1, c)
+end
+
+assert('Integer#==', '15.2.8.3.7') do
+  a = 1==0
+  b = 1==1
+
+  assert_false a
+  assert_true b
+end
+
+assert('Integer#~', '15.2.8.3.8') do
+  # Complement
+  assert_equal(-1, ~0)
+  assert_equal(-3, ~2)
+end
+
+assert('Integer#&', '15.2.8.3.9') do
+  # Bitwise AND
+  #   0101 (5)
+  # & 0011 (3)
+  # = 0001 (1)
+  assert_equal 1, 5 & 3
+end
+
+assert('Integer#|', '15.2.8.3.10') do
+  # Bitwise OR
+  #   0101 (5)
+  # | 0011 (3)
+  # = 0111 (7)
+  assert_equal 7, 5 | 3
+end
+
+assert('Integer#^', '15.2.8.3.11') do
+  # Bitwise XOR
+  #   0101 (5)
+  # ^ 0011 (3)
+  # = 0110 (6)
+  assert_equal 6, 5 ^ 3
+end
+
+assert('Integer#<<', '15.2.8.3.12') do
+  # Left Shift by one
+  #   00010111 (23)
+  # = 00101110 (46)
+  assert_equal 46, 23 << 1
+
+  # Left Shift by a negative is Right Shift
+  assert_equal 23, 46 << -1
+
+  skip unless Object.const_defined?(:Float)
+
+  # Overflow to Fixnum
+  assert_float 9223372036854775808.0, 1 << 63
+  assert_float(-13835058055282163712.0, -3 << 62)
+end
+
+assert('Integer#>>', '15.2.8.3.13') do
+  # Right Shift by one
+  #   00101110 (46)
+  # = 00010111 (23)
+  assert_equal 23, 46 >> 1
+
+  # Right Shift by a negative is Left Shift
+  assert_equal 46, 23 >> -1
+
+  # Don't raise on large Right Shift
+  assert_equal 0, 23 >> 128
+end
+
+assert('Integer#ceil', '15.2.8.3.14') do
+  assert_equal 10, 10.ceil
+end
+
+assert('Integer#downto', '15.2.8.3.15') do
+  a = 0
+  3.downto(1) do |i|
+    a += i
+  end
+  assert_equal 6, a
+end
+
+assert('Integer#eql?', '15.2.8.3.16') do
+  a = 1.eql?(1)
+  b = 1.eql?(2)
+  c = 1.eql?(nil)
+
+  assert_true a
+  assert_false b
+  assert_false c
+end
+
+assert('Integer#floor', '15.2.8.3.17') do
+  a = 1.floor
+
+  assert_equal 1, a
+end
+
+assert('Integer#next', '15.2.8.3.19') do
+  assert_equal 2, 1.next
+end
+
+assert('Integer#round', '15.2.8.3.20') do
+  assert_equal 1, 1.round
+end
+
+assert('Integer#succ', '15.2.8.3.21') do
+  assert_equal 2, 1.succ
+end
+
+assert('Integer#times', '15.2.8.3.22') do
+  a = 0
+  3.times do
+    a += 1
+  end
+  assert_equal 3, a
+end
+
+assert('Integer#to_f', '15.2.8.3.23') do
+  skip unless Object.const_defined?(:Float)
+  assert_equal 1.0, 1.to_f
+end
+
+assert('Integer#to_i', '15.2.8.3.24') do
+  assert_equal 1, 1.to_i
+end
+
+assert('Integer#to_s', '15.2.8.3.25') do
+  assert_equal "1", 1.to_s
+  assert_equal "-1", -1.to_s
+  assert_equal "1010", 10.to_s(2)
+  assert_equal "a", 10.to_s(36)
+  assert_equal "-a", -10.to_s(36)
+  assert_equal "30071", 12345.to_s(8)
+  assert_raise(ArgumentError) { 10.to_s(-1) }
+  assert_raise(ArgumentError) { 10.to_s(0) }
+  assert_raise(ArgumentError) { 10.to_s(1) }
+  assert_raise(ArgumentError) { 10.to_s(37) }
+end
+
+assert('Integer#truncate', '15.2.8.3.26') do
+  assert_equal 1, 1.truncate
+end
+
+assert('Integer#upto', '15.2.8.3.27') do
+  a = 0
+  1.upto(3) do |i|
+    a += i
+  end
+  assert_equal 6, a
+end
+
+assert('Integer#divmod', '15.2.8.3.30') do
+  assert_equal [ 0,  0],   0.divmod(1)
+  assert_equal [ 0,  1],   1.divmod(3)
+  assert_equal [ 3,  0],   3.divmod(1)
+  assert_equal [ 2,  6],  20.divmod(7)
+  assert_equal [-1,  2],  -3.divmod(5)
+  assert_equal [-2, -1],  25.divmod(-13)
+  assert_equal [ 1, -6], -13.divmod(-7)
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/test/t/iterations.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/test/t/iterations.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/test/t/iterations.rb	(revision 439)
@@ -0,0 +1,61 @@
+assert('while expression', '11.5.2.3.2') do
+  idx = 10
+  all = []
+  res = while idx > 0
+    all << idx
+    idx -= 1
+  end
+
+  assert_equal nil, res
+  assert_equal [10,9,8,7,6,5,4,3,2,1], all
+end
+
+assert('until expression', '11.5.2.3.3') do
+  idx = 10
+  all = []
+  res = until idx == 0
+    all << idx
+    idx -= 1
+  end
+
+  assert_equal nil, res
+  assert_equal [10,9,8,7,6,5,4,3,2,1], all
+end
+
+assert('break expression', '11.5.2.4.3') do
+  assert_equal :result do
+    while true
+      break :result
+    end
+  end
+
+  assert_equal :result do
+    until false
+      break :result
+    end
+  end
+end
+
+assert('next expression', '11.5.2.4.4') do
+  assert_equal [8,6,4,2,0] do
+    all = []
+    idx = 10
+    while idx > 0
+      idx -= 1
+      next if (idx % 2) == 1
+      all << idx
+    end
+    all
+  end
+
+  assert_equal [8,6,4,2,0] do
+    all = []
+    idx = 10
+    until idx == 0
+      idx -= 1
+      next if (idx % 2) == 1
+      all << idx
+    end
+    all
+  end
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/test/t/kernel.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/test/t/kernel.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/test/t/kernel.rb	(revision 439)
@@ -0,0 +1,507 @@
+##
+# Kernel ISO Test
+
+assert('Kernel', '15.3.1') do
+  assert_equal Module, Kernel.class
+end
+
+assert('Kernel.block_given?', '15.3.1.2.2') do
+  def bg_try(&b)
+    if Kernel.block_given?
+      yield
+    else
+      "no block"
+    end
+  end
+
+  assert_false Kernel.block_given?
+  # test without block
+  assert_equal "no block", bg_try
+  # test with block
+  assert_equal "block" do
+    bg_try { "block" }
+  end
+  # test with block
+  assert_equal "block" do
+    bg_try do
+      "block"
+    end
+  end
+end
+
+# Kernel.eval is provided by the mruby-gem mrbgem. '15.3.1.2.3'
+
+assert('Kernel.iterator?', '15.3.1.2.5') do
+  assert_false Kernel.iterator?
+end
+
+assert('Kernel.lambda', '15.3.1.2.6') do
+  l = Kernel.lambda do
+    true
+  end
+
+  m = Kernel.lambda(&l)
+
+  assert_true l.call
+  assert_equal Proc, l.class
+  assert_true m.call
+  assert_equal Proc, m.class
+end
+
+assert('Kernel.loop', '15.3.1.2.8') do
+  i = 0
+
+  Kernel.loop do
+    i += 1
+    break if i == 100
+  end
+
+  assert_equal 100, i
+end
+
+assert('Kernel.p', '15.3.1.2.9') do
+  # TODO search for a way to test p to stdio
+  assert_true true
+end
+
+assert('Kernel.print', '15.3.1.2.10') do
+  # TODO search for a way to test print to stdio
+  assert_true true
+end
+
+assert('Kernel.puts', '15.3.1.2.11') do
+  # TODO search for a way to test puts to stdio
+  assert_true true
+end
+
+assert('Kernel.raise', '15.3.1.2.12') do
+  assert_raise RuntimeError do
+    Kernel.raise
+  end
+
+  assert_raise RuntimeError do
+    Kernel.raise RuntimeError.new
+  end
+end
+
+assert('Kernel#__id__', '15.3.1.3.3') do
+  assert_equal Fixnum, __id__.class
+end
+
+assert('Kernel#__send__', '15.3.1.3.4') do
+  # test with block
+  l = __send__(:lambda) do
+    true
+  end
+
+  assert_true l.call
+  assert_equal Proc, l.class
+  # test with argument
+  assert_true __send__(:respond_to?, :nil?)
+  # test without argument and without block
+  assert_equal String, __send__(:to_s).class
+end
+
+assert('Kernel#block_given?', '15.3.1.3.6') do
+  def bg_try(&b)
+    if block_given?
+      yield
+    else
+      "no block"
+    end
+  end
+
+  assert_false block_given?
+  assert_equal "no block", bg_try
+  assert_equal "block" do
+    bg_try { "block" }
+  end
+  assert_equal "block" do
+    bg_try do
+      "block"
+    end
+  end
+end
+
+assert('Kernel#class', '15.3.1.3.7') do
+  assert_equal Module, Kernel.class
+end
+
+assert('Kernel#clone', '15.3.1.3.8') do
+  class KernelCloneTest
+    def initialize
+      @v = 0
+    end
+
+    def get
+      @v
+    end
+
+    def set(v)
+      @v = v
+    end
+  end
+
+  a = KernelCloneTest.new
+  a.set(1)
+  b = a.clone
+
+  def a.test
+  end
+  a.set(2)
+  c = a.clone
+
+  immutables = [ 1, :foo, true, false, nil ]
+  error_count = 0
+  immutables.each do |i|
+    begin
+      i.clone
+    rescue TypeError
+      error_count += 1
+    end
+  end
+
+  assert_equal 2, a.get
+  assert_equal 1, b.get
+  assert_equal 2, c.get
+  assert_true a.respond_to?(:test)
+  assert_false b.respond_to?(:test)
+  assert_true c.respond_to?(:test)
+
+  a.freeze
+  d = a.clone
+  assert_true d.frozen?
+end
+
+assert('Kernel#dup', '15.3.1.3.9') do
+  class KernelDupTest
+    def initialize
+      @v = 0
+    end
+
+    def get
+      @v
+    end
+
+    def set(v)
+      @v = v
+    end
+  end
+
+  a = KernelDupTest.new
+  a.set(1)
+  b = a.dup
+
+  def a.test
+  end
+  a.set(2)
+  c = a.dup
+
+  immutables = [ 1, :foo, true, false, nil ]
+  error_count = 0
+  immutables.each do |i|
+    begin
+      i.dup
+    rescue TypeError
+      error_count += 1
+    end
+  end
+
+  assert_equal immutables.size, error_count
+  assert_equal 2, a.get
+  assert_equal 1, b.get
+  assert_equal 2, c.get
+  assert_true a.respond_to?(:test)
+  assert_false b.respond_to?(:test)
+  assert_false c.respond_to?(:test)
+end
+
+assert('Kernel#dup class') do
+  assert_nothing_raised do
+    Array.dup.new(200)
+    Range.dup.new(2, 3)
+    String.dup.new("a"*50)
+  end
+end
+
+# Kernel#eval is provided by mruby-eval mrbgem '15.3.1.3.12'
+
+assert('Kernel#extend', '15.3.1.3.13') do
+  class Test4ExtendClass
+  end
+
+  module Test4ExtendModule
+    def test_method; end
+  end
+
+  a = Test4ExtendClass.new
+  a.extend(Test4ExtendModule)
+  b = Test4ExtendClass.new
+
+  assert_true a.respond_to?(:test_method)
+  assert_false b.respond_to?(:test_method)
+
+  assert_raise(FrozenError) { Object.new.freeze.extend(Test4ExtendModule) }
+  assert_raise(FrozenError, TypeError) { :sym.extend(Test4ExtendModule) }
+end
+
+assert('Kernel#extend works on toplevel', '15.3.1.3.13') do
+  module Test4ExtendModule
+    def test_method; end
+  end
+  # This would crash...
+  extend(Test4ExtendModule)
+
+  assert_true respond_to?(:test_method)
+end
+
+assert('Kernel#freeze') do
+  obj = Object.new
+  assert_equal obj, obj.freeze
+  assert_equal 0, 0.freeze
+  assert_equal :a, :a.freeze
+  assert_equal true, true.freeze
+  assert_equal false, false.freeze
+  assert_equal nil, nil.freeze
+  skip unless Object.const_defined?(:Float)
+  assert_equal 0.0, 0.0.freeze
+end
+
+assert('Kernel#frozen?') do
+  assert_false "".frozen?
+  assert_true "".freeze.frozen?
+  assert_true 0.frozen?
+  assert_true :a.frozen?
+  assert_true true.frozen?
+  assert_true false.frozen?
+  assert_true nil.frozen?
+  skip unless Object.const_defined?(:Float)
+  assert_true 0.0.frozen?
+end
+
+assert('Kernel#hash', '15.3.1.3.15') do
+  assert_equal hash, hash
+end
+
+assert('Kernel#inspect', '15.3.1.3.17') do
+  s = inspect
+
+  assert_equal String, s.class
+  assert_equal "main", s
+end
+
+assert('Kernel#is_a?', '15.3.1.3.24') do
+  assert_true is_a?(Kernel)
+  assert_false is_a?(Array)
+
+  assert_raise TypeError do
+    42.is_a?(42)
+  end
+end
+
+assert('Kernel#iterator?', '15.3.1.3.25') do
+  assert_false iterator?
+end
+
+assert('Kernel#kind_of?', '15.3.1.3.26') do
+  assert_true kind_of?(Kernel)
+  assert_false kind_of?(Array)
+end
+
+assert('Kernel#lambda', '15.3.1.3.27') do
+  l = lambda do
+    true
+  end
+
+  m = lambda(&l)
+
+  assert_true l.call
+  assert_equal Proc, l.class
+  assert_true m.call
+  assert_equal Proc, m.class
+end
+
+assert('Kernel#loop', '15.3.1.3.29') do
+  i = 0
+
+  loop do
+    i += 1
+    break if i == 100
+  end
+
+  assert_equal i, 100
+end
+
+assert('Kernel#method_missing', '15.3.1.3.30') do
+  class MMTestClass
+    def method_missing(sym)
+      "A call to #{sym}"
+    end
+  end
+  mm_test = MMTestClass.new
+  assert_equal 'A call to no_method_named_this', mm_test.no_method_named_this
+
+  class SuperMMTestClass < MMTestClass
+    def no_super_method_named_this
+      super
+    end
+  end
+  super_mm_test = SuperMMTestClass.new
+  assert_equal 'A call to no_super_method_named_this', super_mm_test.no_super_method_named_this
+
+  class NoSuperMethodTestClass
+    def no_super_method_named_this
+      super
+    end
+  end
+  no_super_test = NoSuperMethodTestClass.new
+  msg = "undefined method 'no_super_method_named_this'"
+  assert_raise_with_message(NoMethodError, msg) do
+    no_super_test.no_super_method_named_this
+  end
+
+  a = String.new
+  msg = "undefined method 'no_method_named_this'"
+  assert_raise_with_message(NoMethodError, msg) do
+    a.no_method_named_this
+  end
+end
+
+assert('Kernel#nil?', '15.3.1.3.32') do
+  assert_false nil?
+end
+
+assert('Kernel#object_id', '15.3.1.3.33') do
+  a = ""
+  b = ""
+  assert_not_equal a.object_id, b.object_id
+
+  assert_kind_of Numeric, object_id
+  assert_kind_of Numeric, "".object_id
+  assert_kind_of Numeric, true.object_id
+  assert_kind_of Numeric, false.object_id
+  assert_kind_of Numeric, nil.object_id
+  assert_kind_of Numeric, :no.object_id
+  assert_kind_of Numeric, 1.object_id
+  assert_kind_of Numeric, 1.0.object_id
+end
+
+# Kernel#p is defined in mruby-print mrbgem. '15.3.1.3.34'
+
+# Kernel#print is defined in mruby-print mrbgem. '15.3.1.3.35'
+
+# Kernel#puts is defined in mruby-print mrbgem. '15.3.1.3.39'
+
+assert('Kernel#raise', '15.3.1.3.40') do
+  assert_raise RuntimeError do
+    raise
+  end
+
+  assert_raise RuntimeError do
+    raise RuntimeError.new
+  end
+end
+
+assert('Kernel#remove_instance_variable', '15.3.1.3.41') do
+  class Test4RemoveInstanceVar
+    attr_reader :var
+    def initialize
+      @var = 99
+    end
+    def remove
+      remove_instance_variable(:@var)
+    end
+  end
+
+  tri = Test4RemoveInstanceVar.new
+  assert_equal 99, tri.var
+  assert_equal 99, tri.remove
+  assert_equal nil, tri.var
+  assert_raise(NameError) { tri.remove }
+  assert_raise(NameError) { tri.remove_instance_variable(:var) }
+  assert_raise(FrozenError) { tri.freeze.remove }
+  assert_raise(FrozenError, NameError) { :a.remove_instance_variable(:@v) }
+end
+
+# Kernel#require is defined in mruby-require. '15.3.1.3.42'
+
+assert('Kernel#respond_to?', '15.3.1.3.43') do
+  class Test4RespondTo
+    def valid_method; end
+
+    def test_method; end
+    undef test_method
+  end
+
+  assert_raise TypeError do
+    Test4RespondTo.new.respond_to?(1)
+  end
+
+  assert_raise ArgumentError do
+    Test4RespondTo.new.respond_to?
+  end
+
+  assert_raise ArgumentError do
+    Test4RespondTo.new.respond_to? :a, true, :aa
+  end
+
+  assert_true respond_to?(:nil?)
+  assert_true Test4RespondTo.new.respond_to?(:valid_method)
+  assert_true Test4RespondTo.new.respond_to?('valid_method')
+  assert_false Test4RespondTo.new.respond_to?(:test_method)
+end
+
+assert('Kernel#to_s', '15.3.1.3.46') do
+  assert_equal to_s.class, String
+end
+
+assert('Kernel#!=') do
+  str1 = "hello"
+  str2 = str1
+  str3 = "world"
+
+  assert_false (str1[1] != 'e')
+  assert_true (str1 != str3)
+  assert_false (str2 != str1)
+end
+
+# operator "!~" is defined in ISO Ruby 11.4.4.
+assert('Kernel#!~') do
+  x = "x"
+  def x.=~(other)
+    other == "x"
+  end
+  assert_false x !~ "x"
+  assert_true  x !~ "z"
+
+  y = "y"
+  def y.=~(other)
+    other == "y"
+  end
+  def y.!~(other)
+    other == "not y"
+  end
+  assert_false y !~ "y"
+  assert_false y !~ "z"
+  assert_true  y !~ "not y"
+end
+
+assert('Kernel#respond_to_missing?') do
+  class Test4RespondToMissing
+    def respond_to_missing?(method_name, include_private = false)
+      method_name == :a_method
+    end
+  end
+
+  assert_true Test4RespondToMissing.new.respond_to?(:a_method)
+  assert_false Test4RespondToMissing.new.respond_to?(:no_method)
+end
+
+assert('stack extend') do
+  def recurse(count, stop)
+    return count if count > stop
+    recurse(count+1, stop)
+  end
+
+  assert_equal 6, recurse(0, 5)
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/test/t/lang.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/test/t/lang.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/test/t/lang.rb	(revision 439)
@@ -0,0 +1,74 @@
+# The aim of these tests is  to detect pitfall for optimized VM.
+
+# Test for or/and
+#
+# You may think instruction fusion(OP_EQ and OP_JMPIF) for avoiding
+# generate intermediate boolean value.
+# But and/or is pitfall for this fusioning.
+#
+# For example, the following mruby code:
+#
+#   if i > 0 and i < 10
+#
+# compiles to the following byte code:
+#
+#    1 000 OP_LOADI      R1      0               ; R1:i
+#    2 001 OP_MOVE       R2      R1              ; R1:i
+#    2 002 OP_LOADI      R3      0
+#    2 003 OP_GT R2      :>      1
+#    2 004 OP_JMPNOT     R2      008
+#    2 005 OP_MOVE       R2      R1              ; R1:i
+#    2 006 OP_LOADI      R3      10
+#    2 007 OP_LT R2      :<      1
+#    2 008 OP_JMPNOT     R2      (The address of end of then part)
+#
+# When the instruction fusion the OP_GT and OP_JMPNOT you fell into the pitfalls.
+# The deleted intermediate boolean value is used in OP_JMPNOT (address 008).
+
+assert('and', '11.2.3') do
+  a = 1
+  if a > 0 and a < 10
+    b = 1
+  else
+    b = 0
+  end
+  assert_equal 1, b
+
+  if a < 0 and a < 10
+    b = 1
+  else
+    b = 0
+  end
+  assert_equal 0, b
+
+  if a < 0 and a > 10
+    b = 1
+  else
+    b = 0
+  end
+  assert_equal 0, b
+end
+
+assert('or','11.2.4') do
+  a = 1
+  if a > 0 or a < 10
+    b = 1
+  else
+    b = 0
+  end
+  assert_equal 1, b
+
+  if a < 0 or a < 10
+    b = 1
+  else
+    b = 0
+  end
+  assert_equal 1, b
+
+  if a < 0 or a > 10
+    b = 1
+  else
+    b = 0
+  end
+  assert_equal 0, b
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/test/t/literals.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/test/t/literals.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/test/t/literals.rb	(revision 439)
@@ -0,0 +1,337 @@
+##
+# Literals ISO Test
+
+assert('Literals Numerical', '8.7.6.2') do
+  # signed and unsigned integer
+  assert_equal 1, 1
+  assert_equal(-1, -1)
+  assert_equal(+1, +1)
+  # signed and unsigned float
+  assert_equal 1.0, 1.0
+  assert_equal(-1.0, -1.0)
+  # binary
+  assert_equal 128, 0b10000000
+  assert_equal 128, 0B10000000
+  # octal
+  assert_equal 8, 0o10
+  assert_equal 8, 0O10
+  assert_equal 8, 0_10
+  # hex
+  assert_equal 255, 0xff
+  assert_equal 255, 0Xff
+  # decimal
+  assert_equal 999, 0d999
+  assert_equal 999, 0D999
+  # decimal separator
+  assert_equal 10000000, 10_000_000
+  assert_equal       10, 1_0
+  # integer with exponent
+  assert_equal 10.0, 1e1
+  assert_equal(0.1, 1e-1)
+  assert_equal 10.0, 1e+1
+  # float with exponent
+  assert_equal 10.0, 1.0e1
+  assert_equal(0.1, 1.0e-1)
+  assert_equal 10.0, 1.0e+1
+end
+
+assert('Literals Strings Single Quoted', '8.7.6.3.2') do
+  assert_equal 'abc', 'abc'
+  assert_equal '\'', '\''
+  assert_equal '\\', '\\'
+end
+
+assert('Literals Strings Double Quoted', '8.7.6.3.3') do
+  a = "abc"
+
+  assert_equal "abc", "abc"
+  assert_equal "\"", "\""
+  assert_equal "\\", "\\"
+  assert_equal "abc", "#{a}"
+end
+
+assert('Literals Strings Quoted Non-Expanded', '8.7.6.3.4') do
+  a = %q{abc}
+  b = %q(abc)
+  c = %q[abc]
+  d = %q<abc>
+  e = %q/abc/
+  f = %q/ab\/c/
+  g = %q{#{a}}
+
+  assert_equal 'abc', a
+  assert_equal 'abc', b
+  assert_equal 'abc', c
+  assert_equal 'abc', d
+  assert_equal 'abc', e
+  assert_equal 'ab/c', f
+  assert_equal '#{a}', g
+end
+
+assert('Literals Strings Quoted Expanded', '8.7.6.3.5') do
+  a = %Q{abc}
+  b = %Q(abc)
+  c = %Q[abc]
+  d = %Q<abc>
+  e = %Q/abc/
+  f = %Q/ab\/c/
+  g = %Q{#{a}}
+
+  assert_equal 'abc', a
+  assert_equal 'abc', b
+  assert_equal 'abc', c
+  assert_equal 'abc', d
+  assert_equal 'abc', e
+  assert_equal 'ab/c', f
+  assert_equal 'abc', g
+end
+
+assert('Literals Strings Here documents', '8.7.6.3.6') do
+  a = <<AAA
+aaa
+AAA
+   b = <<b_b
+bbb
+b_b
+    c = [<<CCC1, <<"CCC2", <<'CCC3']
+c1
+CCC1
+c 2
+CCC2
+c  3
+CCC3
+
+      d = <<DDD
+d#{1+2}DDD
+d\t
+DDD\n
+DDD
+  e = <<'EEE'
+e#{1+2}EEE
+e\t
+EEE\n
+EEE
+  f = <<"FFF"
+F
+FF#{"f"}FFF
+F
+FFF
+
+  g = <<-GGG
+  ggg
+  GGG
+  h = <<-"HHH"
+  hhh
+  HHH
+  i = <<-'III'
+  iii
+  III
+  j = [<<-JJJ1   , <<-"JJJ2"   , <<-'JJJ3' ]
+  j#{1}j
+  JJJ1
+  j#{2}j
+  JJJ2
+  j#{3}j
+  JJJ3
+
+  k = <<'KKK'.to_i
+123
+KKK
+
+  m = [<<MM1, <<MM2]
+x#{m2 = {x:<<MM3}}y
+mm3
+MM3
+mm1
+MM1
+mm2
+MM2
+
+  n = [1, "#{<<NN1}", 3,
+nn1
+NN1
+  4]
+
+  qqq = Proc.new {|*x| x.join(' $ ')}
+  q1 = qqq.call("a", <<QQ1, "c",
+q
+QQ1
+      "d")
+  q2 = qqq.call("l", "m#{<<QQ2}n",
+qq
+QQ2
+      "o")
+
+  w = %W( 1 #{<<WWW} 3
+www
+WWW
+      4 5 )
+
+  x = [1, <<XXX1,
+foo #{<<XXX2} bar
+222 #{<<XXX3} 444
+333
+XXX3
+5
+XXX2
+6
+XXX1
+    9]
+
+  z = <<'ZZZ'
+ZZZ
+
+  assert_equal "aaa\n", a
+  assert_equal "bbb\n", b
+  assert_equal ["c1\n", "c 2\n", "c  3\n"], c
+  assert_equal "d3DDD\nd\t\nDDD\n\n", d
+  assert_equal "e\#{1+2}EEE\ne\\t\nEEE\\n\n", e
+  assert_equal "F\nFFfFFF\nF\n", f
+  assert_equal "  ggg\n", g
+  assert_equal "  hhh\n", h
+  assert_equal "  iii\n", i
+  assert_equal ["  j1j\n", "  j2j\n", "  j\#{3}j\n"], j
+  assert_equal 123, k
+  assert_equal ["x{:x=>\"mm3\\n\"}y\nmm1\n", "mm2\n"], m
+  assert_equal ({:x=>"mm3\n"}), m2
+  assert_equal [1, "nn1\n", 3, 4], n
+  assert_equal "a $ q\n $ c $ d", q1
+  assert_equal "l $ mqq\nn $ o", q2
+  assert_equal ["1", "www\n", "3", "4", "5"], w
+  assert_equal [1, "foo 222 333\n 444\n5\n bar\n6\n", 9], x
+  assert_equal "", z
+
+end
+
+
+assert('Literals Array', '8.7.6.4') do
+  a = %W{abc#{1+2}def \}g}
+  b = %W(abc #{2+3} def \(g)
+  c = %W[#{3+4}]
+  d = %W< #{4+5} >
+  e = %W//
+  f = %W[[ab cd][ef]]
+  g = %W{
+    ab
+    #{-1}1
+    2#{2}
+  }
+  h = %W(a\nb
+         test\ abc
+         c\
+d
+         x\y x\\y x\\\y)
+
+  assert_equal ['abc3def', '}g'], a
+  assert_equal ['abc', '5', 'def', '(g'], b
+  assert_equal ['7'],c
+  assert_equal ['9'], d
+  assert_equal [], e
+  assert_equal ['[ab', 'cd][ef]'], f
+  assert_equal ['ab', '-11', '22'], g
+  assert_equal ["a\nb", 'test abc', "c\nd", "xy", "x\\y", "x\\y"], h
+
+  a = %w{abc#{1+2}def \}g}
+  b = %w(abc #{2+3} def \(g)
+  c = %w[#{3+4}]
+  d = %w< #{4+5} >
+  e = %w//
+  f = %w[[ab cd][ef]]
+  g = %w{
+    ab
+    #{-1}1
+    2#{2}
+  }
+  h = %w(a\nb
+         test\ abc
+         c\
+d
+         x\y x\\y x\\\y)
+
+  assert_equal ['abc#{1+2}def', '}g'], a
+  assert_equal ['abc', '#{2+3}', 'def', '(g'], b
+  assert_equal ['#{3+4}'], c
+  assert_equal ['#{4+5}'], d
+  assert_equal [], e
+  assert_equal ['[ab', 'cd][ef]'], f
+  assert_equal ['ab', '#{-1}1', '2#{2}'], g
+  assert_equal ["a\\nb", "test abc", "c\nd", "x\\y", "x\\y", "x\\\\y"], h
+end
+
+
+assert('Literals Array of symbols') do
+  a = %I{abc#{1+2}def \}g}
+  b = %I(abc #{2+3} def \(g)
+  c = %I[#{3+4}]
+  d = %I< #{4+5} >
+  e = %I//
+  f = %I[[ab cd][ef]]
+  g = %I{
+    ab
+    #{-1}1
+    2#{2}
+  }
+
+  assert_equal [:'abc3def', :'}g'], a
+  assert_equal [:'abc', :'5', :'def', :'(g'], b
+  assert_equal [:'7'],c
+  assert_equal [:'9'], d
+  assert_equal [], e
+  assert_equal [:'[ab', :'cd][ef]'], f
+  assert_equal [:'ab', :'-11', :'22'], g
+
+  a = %i{abc#{1+2}def \}g}
+  b = %i(abc #{2+3} def \(g)
+  c = %i[#{3+4}]
+  d = %i< #{4+5} >
+  e = %i//
+  f = %i[[ab cd][ef]]
+  g = %i{
+    ab
+    #{-1}1
+    2#{2}
+  }
+
+  assert_equal [:'abc#{1+2}def', :'}g'], a
+  assert_equal [:'abc', :'#{2+3}', :'def', :'(g'], b
+  assert_equal [:'#{3+4}'], c
+  assert_equal [:'#{4+5}'], d
+  assert_equal [] ,e
+  assert_equal [:'[ab', :'cd][ef]'], f
+  assert_equal [:'ab', :'#{-1}1', :'2#{2}'], g
+end
+
+assert('Literals Symbol', '8.7.6.6') do
+  # do not compile error
+  :$asd
+  :@asd
+  :@@asd
+  :asd=
+  :asd!
+  :asd?
+  :+
+  :+@
+  :if
+  :BEGIN
+
+  a = :"asd qwe"
+  b = :'foo bar'
+  c = :"a#{1+2}b"
+  d = %s(asd)
+  e = %s( foo \))
+  f = %s[asd \[
+qwe]
+  g = %s/foo#{1+2}bar/
+  h = %s{{foo bar}}
+
+  assert_equal :'asd qwe', a
+  assert_equal :"foo bar", b
+  assert_equal :a3b, c
+  assert_equal :asd, d
+  assert_equal :' foo )', e
+  assert_equal :"asd [\nqwe", f
+  assert_equal :'foo#{1+2}bar', g
+  assert_equal :'{foo bar}', h
+end
+
+# Not Implemented ATM assert('Literals Regular expression', '8.7.6.5') do
Index: /EcnlProtoTool/trunk/mruby-2.1.1/test/t/localjumperror.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/test/t/localjumperror.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/test/t/localjumperror.rb	(revision 439)
@@ -0,0 +1,13 @@
+##
+# LocalJumpError ISO Test
+
+assert('LocalJumpError', '15.2.25') do
+  assert_equal Class, LocalJumpError.class
+#  assert_raise LocalJumpError do
+#    # this will cause an exception due to the wrong location
+#    retry
+#  end
+end
+
+# TODO 15.2.25.2.1 LocalJumpError#exit_value
+# TODO 15.2.25.2.2 LocalJumpError#reason
Index: /EcnlProtoTool/trunk/mruby-2.1.1/test/t/methods.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/test/t/methods.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/test/t/methods.rb	(revision 439)
@@ -0,0 +1,109 @@
+##
+# Chapter 13.3 "Methods" ISO Test
+
+assert('The alias statement', '13.3.6 a) 4)') do
+  # check aliasing in all possible ways
+
+  def alias_test_method_original; true; end
+
+  alias alias_test_method_a alias_test_method_original
+  alias :alias_test_method_b :alias_test_method_original
+
+  assert_true(alias_test_method_original)
+  assert_true(alias_test_method_a)
+  assert_true(alias_test_method_b)
+end
+
+assert('The alias statement (overwrite original)', '13.3.6 a) 4)') do
+  # check that an aliased method can be overwritten
+  # without side effect
+
+  def alias_test_method_original; true; end
+
+  alias alias_test_method_a alias_test_method_original
+  alias :alias_test_method_b :alias_test_method_original
+
+  assert_true(alias_test_method_original)
+
+  def alias_test_method_original; false; end
+
+  assert_false(alias_test_method_original)
+  assert_true(alias_test_method_a)
+  assert_true(alias_test_method_b)
+end
+
+assert('The alias statement', '13.3.6 a) 5)') do
+  # check that alias is raising NameError if
+  # non-existing method should be undefined
+
+  assert_raise(NameError) do
+    alias new_name_a non_existing_method
+  end
+
+  assert_raise(NameError) do
+    alias :new_name_b :non_existing_method
+  end
+end
+
+assert('The undef statement', '13.3.7 a) 4)') do
+  # check that undef is undefining method
+  # based on the method name
+
+  def existing_method_a; true; end
+  def existing_method_b; true; end
+  def existing_method_c; true; end
+  def existing_method_d; true; end
+  def existing_method_e; true; end
+  def existing_method_f; true; end
+
+  # check that methods are defined
+
+  assert_true(existing_method_a, 'Method should be defined')
+  assert_true(existing_method_b, 'Method should be defined')
+  assert_true(existing_method_c, 'Method should be defined')
+  assert_true(existing_method_d, 'Method should be defined')
+  assert_true(existing_method_e, 'Method should be defined')
+  assert_true(existing_method_f, 'Method should be defined')
+
+  # undefine in all possible ways and check that method
+  # is undefined
+
+  undef existing_method_a
+  assert_raise(NoMethodError) do
+    existing_method_a
+  end
+
+  undef :existing_method_b
+  assert_raise(NoMethodError) do
+    existing_method_b
+  end
+
+  undef existing_method_c, existing_method_d
+  assert_raise(NoMethodError) do
+    existing_method_c
+  end
+  assert_raise(NoMethodError) do
+    existing_method_d
+  end
+
+  undef :existing_method_e, :existing_method_f
+  assert_raise(NoMethodError) do
+    existing_method_e
+  end
+  assert_raise(NoMethodError) do
+    existing_method_f
+  end
+end
+
+assert('The undef statement (method undefined)', '13.3.7 a) 5)') do
+  # check that undef is raising NameError if
+  # non-existing method should be undefined
+
+  assert_raise(NameError) do
+    undef non_existing_method
+  end
+
+  assert_raise(NameError) do
+    undef :non_existing_method
+  end
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/test/t/module.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/test/t/module.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/test/t/module.rb	(revision 439)
@@ -0,0 +1,798 @@
+##
+# Module ISO Test
+
+def labeled_module(name, &block)
+  Module.new do
+    (class <<self; self end).class_eval do
+      define_method(:to_s) { name }
+      alias_method :inspect, :to_s
+    end
+    class_eval(&block) if block
+  end
+end
+
+def labeled_class(name, supklass = Object, &block)
+  Class.new(supklass) do
+    (class <<self; self end).class_eval do
+      define_method(:to_s) { name }
+      alias_method :inspect, :to_s
+    end
+    class_eval(&block) if block
+  end
+end
+
+def assert_uninitialized_const(&block)
+  assert_raise_with_message_pattern(NameError, "uninitialized constant *", &block)
+end
+
+def assert_wrong_const_name(&block)
+  assert_raise_with_message_pattern(NameError, "wrong constant name *", &block)
+end
+
+assert('Module', '15.2.2') do
+  assert_equal Class, Module.class
+end
+
+assert('Module#alias_method', '15.2.2.4.8') do
+  cls = Class.new do
+    def foo
+      "FOO"
+    end
+  end
+
+  assert_same(cls, cls.alias_method(:bar, :foo))
+  assert_equal("FOO", cls.new.bar)
+end
+
+# TODO not implemented ATM assert('Module.constants', '15.2.2.3.1') do
+
+assert('Module#ancestors', '15.2.2.4.9') do
+  class Test4ModuleAncestors
+  end
+  r = String.ancestors
+
+  assert_equal Array, r.class
+  assert_true r.include?(String)
+  assert_true r.include?(Object)
+end
+
+assert('Module#append_features', '15.2.2.4.10') do
+  module Test4AppendFeatures
+    def self.append_features(mod)
+      Test4AppendFeatures2.const_set(:Const4AppendFeatures2, mod)
+    end
+  end
+  module Test4AppendFeatures2
+    include Test4AppendFeatures
+  end
+
+  assert_equal Test4AppendFeatures2, Test4AppendFeatures2.const_get(:Const4AppendFeatures2)
+  assert_raise(FrozenError) { Module.new.append_features Class.new.freeze }
+end
+
+assert('Module#attr NameError') do
+  %w[
+    foo?
+    @foo
+    @@foo
+    $foo
+  ].each do |name|
+    module NameTest; end
+
+    assert_raise(NameError) do
+      NameTest.module_eval { attr_reader name.to_sym }
+    end
+
+    assert_raise(NameError) do
+      NameTest.module_eval { attr_writer name.to_sym }
+    end
+
+    assert_raise(NameError) do
+      NameTest.module_eval { attr name.to_sym }
+    end
+
+    assert_raise(NameError) do
+      NameTest.module_eval { attr_accessor name.to_sym }
+    end
+  end
+
+end
+
+assert('Module#attr', '15.2.2.4.11') do
+  class AttrTest
+    class << self
+      attr :cattr
+      def cattr_val=(val)
+        @cattr = val
+      end
+    end
+    attr :iattr
+    def iattr_val=(val)
+      @iattr = val
+    end
+  end
+
+  test = AttrTest.new
+  assert_true AttrTest.respond_to?(:cattr)
+  assert_true test.respond_to?(:iattr)
+
+  assert_false AttrTest.respond_to?(:cattr=)
+  assert_false test.respond_to?(:iattr=)
+
+  test.iattr_val = 'test'
+  assert_equal 'test', test.iattr
+
+  AttrTest.cattr_val = 'test'
+  assert_equal 'test', AttrTest.cattr
+end
+
+assert('Module#attr_accessor', '15.2.2.4.12') do
+  class AttrTestAccessor
+    class << self
+      attr_accessor :cattr
+    end
+    attr_accessor :iattr, 'iattr2'
+  end
+
+  attr_instance = AttrTestAccessor.new
+  assert_true AttrTestAccessor.respond_to?(:cattr=)
+  assert_true attr_instance.respond_to?(:iattr=)
+  assert_true attr_instance.respond_to?(:iattr2=)
+  assert_true AttrTestAccessor.respond_to?(:cattr)
+  assert_true attr_instance.respond_to?(:iattr)
+  assert_true attr_instance.respond_to?(:iattr2)
+
+  attr_instance.iattr = 'test'
+  assert_equal 'test', attr_instance.iattr
+
+  AttrTestAccessor.cattr = 'test'
+  assert_equal 'test', AttrTestAccessor.cattr
+end
+
+assert('Module#attr_reader', '15.2.2.4.13') do
+  class AttrTestReader
+    class << self
+      attr_reader :cattr
+      def cattr_val=(val)
+        @cattr = val
+      end
+    end
+    attr_reader :iattr, 'iattr2'
+    def iattr_val=(val)
+      @iattr = val
+    end
+  end
+
+  attr_instance = AttrTestReader.new
+  assert_true AttrTestReader.respond_to?(:cattr)
+  assert_true attr_instance.respond_to?(:iattr)
+  assert_true attr_instance.respond_to?(:iattr2)
+
+  assert_false AttrTestReader.respond_to?(:cattr=)
+  assert_false attr_instance.respond_to?(:iattr=)
+  assert_false attr_instance.respond_to?(:iattr2=)
+
+  attr_instance.iattr_val = 'test'
+  assert_equal 'test', attr_instance.iattr
+
+  AttrTestReader.cattr_val = 'test'
+  assert_equal 'test', AttrTestReader.cattr
+end
+
+assert('Module#attr_writer', '15.2.2.4.14') do
+  class AttrTestWriter
+    class << self
+      attr_writer :cattr
+      def cattr_val
+        @cattr
+      end
+    end
+    attr_writer :iattr, 'iattr2'
+    def iattr_val
+      @iattr
+    end
+  end
+
+  attr_instance = AttrTestWriter.new
+  assert_true AttrTestWriter.respond_to?(:cattr=)
+  assert_true attr_instance.respond_to?(:iattr=)
+  assert_true attr_instance.respond_to?(:iattr2=)
+
+  assert_false AttrTestWriter.respond_to?(:cattr)
+  assert_false attr_instance.respond_to?(:iattr)
+  assert_false attr_instance.respond_to?(:iattr2)
+
+  attr_instance.iattr = 'test'
+  assert_equal 'test', attr_instance.iattr_val
+
+  AttrTestWriter.cattr = 'test'
+  assert_equal 'test', AttrTestWriter.cattr_val
+end
+
+assert('Module#class_eval', '15.2.2.4.15') do
+  class Test4ClassEval
+    @a = 11
+    @b = 12
+  end
+  Test4ClassEval.class_eval do
+    def method1
+    end
+  end
+  assert_equal 11, Test4ClassEval.class_eval{ @a }
+  assert_equal 12, Test4ClassEval.class_eval{ @b }
+  assert_equal true, Test4ClassEval.new.respond_to?(:method1)
+end
+
+assert('Module#const_defined?', '15.2.2.4.20') do
+  module Test4ConstDefined
+    Const4Test4ConstDefined = true
+  end
+
+  assert_true Test4ConstDefined.const_defined?(:Const4Test4ConstDefined)
+  assert_false Test4ConstDefined.const_defined?(:NotExisting)
+  assert_wrong_const_name{ Test4ConstDefined.const_defined?(:wrong_name) }
+end
+
+assert('Module#const_get', '15.2.2.4.21') do
+  module Test4ConstGet
+    Const4Test4ConstGet = 42
+  end
+
+  assert_equal 42, Test4ConstGet.const_get(:Const4Test4ConstGet)
+  assert_equal 42, Test4ConstGet.const_get("Const4Test4ConstGet")
+  assert_equal 42, Object.const_get("Test4ConstGet::Const4Test4ConstGet")
+
+  assert_raise(TypeError){ Test4ConstGet.const_get(123) }
+  assert_uninitialized_const{ Test4ConstGet.const_get(:I_DO_NOT_EXIST) }
+  assert_uninitialized_const{ Test4ConstGet.const_get("I_DO_NOT_EXIST::ME_NEITHER") }
+  assert_wrong_const_name{ Test4ConstGet.const_get(:wrong_name) }
+end
+
+assert('Module#const_set', '15.2.2.4.23') do
+  module Test4ConstSet
+    Const4Test4ConstSet = 42
+  end
+
+  assert_equal 23, Test4ConstSet.const_set(:Const4Test4ConstSet, 23)
+  assert_equal 23, Test4ConstSet.const_get(:Const4Test4ConstSet)
+  ["", "wrongNAME", "Wrong-Name"].each do |n|
+    assert_wrong_const_name { Test4ConstSet.const_set(n, 1) }
+  end
+end
+
+assert('Module#remove_const', '15.2.2.4.40') do
+  module Test4RemoveConst
+    ExistingConst = 23
+  end
+
+  assert_equal 23, Test4RemoveConst.remove_const(:ExistingConst)
+  assert_false Test4RemoveConst.const_defined?(:ExistingConst)
+  assert_raise_with_message_pattern(NameError, "constant * not defined") do
+    Test4RemoveConst.remove_const(:NonExistingConst)
+  end
+  %i[x X!].each do |n|
+    assert_wrong_const_name { Test4RemoveConst.remove_const(n) }
+  end
+  assert_raise(FrozenError) { Test4RemoveConst.freeze.remove_const(:A) }
+end
+
+assert('Module#const_missing', '15.2.2.4.22') do
+  module Test4ConstMissing
+    def self.const_missing(sym)
+      42 # the answer to everything
+    end
+  end
+
+  assert_equal 42, Test4ConstMissing.const_get(:ConstDoesntExist)
+end
+
+assert('Module#extend_object', '15.2.2.4.25') do
+  cls = Class.new
+  mod = Module.new { def foo; end }
+  a = cls.new
+  b = cls.new
+  mod.extend_object(b)
+  assert_false a.respond_to?(:foo)
+  assert_true b.respond_to?(:foo)
+  assert_raise(FrozenError) { mod.extend_object(cls.new.freeze) }
+  assert_raise(FrozenError, TypeError) { mod.extend_object(1) }
+end
+
+assert('Module#include', '15.2.2.4.27') do
+  module Test4Include
+    Const4Include = 42
+  end
+  module Test4Include2
+    @include_result = include Test4Include
+    class << self
+      attr_reader :include_result
+    end
+  end
+
+  assert_equal 42, Test4Include2.const_get(:Const4Include)
+  assert_equal Test4Include2, Test4Include2.include_result
+  assert_raise(FrozenError) { Module.new.freeze.include Test4Include }
+end
+
+assert('Module#include?', '15.2.2.4.28') do
+  module Test4IncludeP
+  end
+  class Test4IncludeP2
+    include Test4IncludeP
+  end
+  class Test4IncludeP3 < Test4IncludeP2
+  end
+
+  assert_true Test4IncludeP2.include?(Test4IncludeP)
+  assert_true Test4IncludeP3.include?(Test4IncludeP)
+  assert_false Test4IncludeP.include?(Test4IncludeP)
+end
+
+assert('Module#included', '15.2.2.4.29') do
+  module Test4Included
+    Const4Included = 42
+    def self.included mod
+      Test4Included.const_set(:Const4Included2, mod)
+    end
+  end
+  module Test4Included2
+    include Test4Included
+  end
+
+  assert_equal 42, Test4Included2.const_get(:Const4Included)
+  assert_equal Test4Included2, Test4Included2.const_get(:Const4Included2)
+end
+
+assert('Module#initialize', '15.2.2.4.31') do
+  assert_kind_of Module, Module.new
+  mod = Module.new { def hello; "hello"; end }
+  cls = Class.new{include mod}
+  assert_true cls.new.respond_to?(:hello)
+  a = nil
+  mod = Module.new { |m| a = m }
+  assert_equal mod, a
+end
+
+assert('Module#method_defined?', '15.2.2.4.34') do
+  module Test4MethodDefined
+    module A
+      def method1()  end
+    end
+
+    class B
+      def method2()  end
+    end
+
+    class C < B
+      include A
+      def method3()  end
+    end
+  end
+
+  assert_true Test4MethodDefined::A.method_defined? :method1
+  assert_true Test4MethodDefined::C.method_defined? :method1
+  assert_true Test4MethodDefined::C.method_defined? "method2"
+  assert_true Test4MethodDefined::C.method_defined? "method3"
+  assert_false Test4MethodDefined::C.method_defined? "method4"
+end
+
+assert('Module#module_eval', '15.2.2.4.35') do
+  module Test4ModuleEval
+    @a = 11
+    @b = 12
+  end
+
+  assert_equal 11, Test4ModuleEval.module_eval{ @a }
+  assert_equal 12, Test4ModuleEval.module_eval{ @b }
+end
+
+assert('Module#undef_method', '15.2.2.4.42') do
+  module Test4UndefMethod
+    class Parent
+      def hello
+      end
+     end
+
+     class Child < Parent
+      def hello
+      end
+     end
+
+     class GrandChild < Child
+     end
+  end
+  Test4UndefMethod::Child.class_eval{ undef_method :hello }
+
+  assert_true Test4UndefMethod::Parent.new.respond_to?(:hello)
+  assert_false Test4UndefMethod::Child.new.respond_to?(:hello)
+  assert_false Test4UndefMethod::GrandChild.new.respond_to?(:hello)
+end
+
+# Not ISO specified
+
+assert('Module#dup') do
+  module TestModuleDup
+    @@cvar = :cvar
+    class << self
+      attr_accessor :cattr
+      def cmeth; :cmeth end
+    end
+    def cvar; @@cvar end
+    def imeth; :imeth end
+    self.cattr = :cattr
+  end
+
+  m = TestModuleDup.dup
+  o = Object.include(m).new
+  assert_equal(:cattr, m.cattr)
+  assert_equal(:cmeth, m.cmeth)
+  assert_equal(:cvar, o.cvar)
+  assert_equal(:imeth, o.imeth)
+  assert_match("#<Module:0x*>", m.to_s)
+  assert_not_predicate(m, :frozen?)
+  assert_not_predicate(TestModuleDup.freeze.dup, :frozen?)
+end
+
+assert('Module#define_method') do
+  c = Class.new {
+    define_method(:m1) { :ok }
+    define_method(:m2, Proc.new { :ok })
+  }
+  assert_equal c.new.m1, :ok
+  assert_equal c.new.m2, :ok
+  assert_raise(TypeError) do
+    Class.new { define_method(:n1, nil) }
+  end
+end
+
+assert 'Module#prepend_features' do
+  mod = Module.new { def m; :mod end }
+  cls = Class.new { def m; :cls end }
+  assert_equal :cls, cls.new.m
+  mod.prepend_features(cls)
+  assert_equal :mod, cls.new.m
+  assert_raise(FrozenError) { Module.new.prepend_features(Class.new.freeze) }
+end
+
+# @!group prepend
+  assert('Module#prepend') do
+    module M0
+      def m1; [:M0] end
+    end
+    module M1
+      def m1; [:M1, super, :M1] end
+    end
+    module M2
+      def m1; [:M2, super, :M2] end
+    end
+    M3 = Module.new do
+      def m1; [:M3, super, :M3] end
+    end
+    module M4
+      def m1; [:M4, super, :M4] end
+    end
+
+    class P0
+      include M0
+      prepend M1
+      def m1; [:C0, super, :C0] end
+    end
+    class P1 < P0
+      prepend M2, M3
+      include M4
+      def m1; [:C1, super, :C1] end
+    end
+
+    obj = P1.new
+    expected = [:M2,[:M3,[:C1,[:M4,[:M1,[:C0,[:M0],:C0],:M1],:M4],:C1],:M3],:M2]
+    assert_equal(expected, obj.m1)
+  end
+
+  assert('Module#prepend result') do
+    module TestPrepended; end
+    module TestPrependResult
+      @prepend_result = prepend TestPrepended
+      class << self
+        attr_reader :prepend_result
+      end
+    end
+
+    assert_equal TestPrependResult, TestPrependResult.prepend_result
+  end
+
+  # mruby shouldn't be affected by this since there is
+  # no visibility control (yet)
+  assert('Module#prepend public') do
+    assert_nothing_raised('ruby/ruby #8846') do
+      Class.new.prepend(Module.new)
+    end
+  end
+
+  assert('Module#prepend inheritance') do
+    bug6654 = '[ruby-core:45914]'
+    a = labeled_module('a')
+    b = labeled_module('b') { include a }
+    c = labeled_module('c') { prepend b }
+
+    #assert bug6654 do
+      # the Module#< operator should be used here instead, but we don't have it
+      assert_include(c.ancestors, a)
+      assert_include(c.ancestors, b)
+    #end
+
+    bug8357 = '[ruby-core:54736] [Bug #8357]'
+    b = labeled_module('b') { prepend a }
+    c = labeled_class('c') { include b }
+
+    #assert bug8357 do
+      # the Module#< operator should be used here instead, but we don't have it
+      assert_include(c.ancestors, a)
+      assert_include(c.ancestors, b)
+    #end
+
+    bug8357 = '[ruby-core:54742] [Bug #8357]'
+    assert_kind_of(b, c.new, bug8357)
+  end
+
+  assert 'Module#prepend + Class#ancestors' do
+    bug6658 = '[ruby-core:45919]'
+    m = labeled_module("m")
+    c = labeled_class("c") {prepend m}
+    assert_equal([m, c], c.ancestors[0, 2], bug6658)
+
+    bug6662 = '[ruby-dev:45868]'
+    c2 = labeled_class("c2", c)
+    anc = c2.ancestors
+    assert_equal([c2, m, c, Object], anc[0..anc.index(Object)], bug6662)
+  end
+
+  assert 'Module#prepend + Module#ancestors' do
+    bug6659 = '[ruby-dev:45861]'
+    m0 = labeled_module("m0") { def x; [:m0, *super] end }
+    m1 = labeled_module("m1") { def x; [:m1, *super] end; prepend m0 }
+    m2 = labeled_module("m2") { def x; [:m2, *super] end; prepend m1 }
+    c0 = labeled_class("c0") { def x; [:c0] end }
+    c1 = labeled_class("c1") { def x; [:c1] end; prepend m2 }
+    c2 = labeled_class("c2", c0) { def x; [:c2, *super] end; include m2 }
+    #
+    assert_equal([m0, m1], m1.ancestors, bug6659)
+    #
+    bug6662 = '[ruby-dev:45868]'
+    assert_equal([m0, m1, m2], m2.ancestors, bug6662)
+    assert_equal([m0, m1, m2, c1], c1.ancestors[0, 4], bug6662)
+    assert_equal([:m0, :m1, :m2, :c1], c1.new.x)
+    assert_equal([c2, m0, m1, m2, c0], c2.ancestors[0, 5], bug6662)
+    assert_equal([:c2, :m0, :m1, :m2, :c0], c2.new.x)
+    #
+    m3 = labeled_module("m3") { include m1; prepend m1 }
+    assert_equal([m3, m0, m1], m3.ancestors)
+    m3 = labeled_module("m3") { prepend m1; include m1 }
+    assert_equal([m0, m1, m3], m3.ancestors)
+    m3 = labeled_module("m3") { prepend m1; prepend m1 }
+    assert_equal([m0, m1, m3], m3.ancestors)
+    m3 = labeled_module("m3") { include m1; include m1 }
+    assert_equal([m3, m0, m1], m3.ancestors)
+  end
+
+  assert 'cyclic Module#prepend' do
+    bug7841 = '[ruby-core:52205] [Bug #7841]'
+    m1 = Module.new
+    m2 = Module.new
+    m1.instance_eval { prepend(m2) }
+    assert_raise(ArgumentError, bug7841) do
+      m2.instance_eval { prepend(m1) }
+    end
+  end
+
+  # these assertions will not run without a #assert_separately method
+  #assert 'test_prepend_optmethod' do
+  #  bug7983 = '[ruby-dev:47124] [Bug #7983]'
+  #  assert_separately [], %{
+  #    module M
+  #      def /(other)
+  #        to_f / other
+  #      end
+  #    end
+  #    Fixnum.send(:prepend, M)
+  #    assert_equal(0.5, 1 / 2, "#{bug7983}")
+  #  }
+  #  assert_equal(0, 1 / 2)
+  #end
+
+  # mruby has no visibility control
+  # assert 'Module#prepend visibility' do
+  #   bug8005 = '[ruby-core:53106] [Bug #8005]'
+  #   c = Class.new do
+  #     prepend Module.new {}
+  #     def foo() end
+  #     protected :foo
+  #   end
+  #   a = c.new
+  #   assert_true a.respond_to?(:foo), bug8005
+  #   assert_nothing_raised(bug8005) {a.send :foo}
+  # end
+
+  # mruby has no visibility control
+  # assert 'Module#prepend inherited visibility' do
+  #   bug8238 = '[ruby-core:54105] [Bug #8238]'
+  #   module Test4PrependVisibilityInherited
+  #     class A
+  #       def foo() A; end
+  #       private :foo
+  #     end
+  #     class B < A
+  #       public :foo
+  #       prepend Module.new
+  #     end
+  #   end
+  #   assert_equal(Test4PrependVisibilityInherited::A, Test4PrependVisibilityInherited::B.new.foo, "#{bug8238}")
+  # end
+
+  # assert 'Module#prepend super in alias' do
+  #   skip "super does not currently work in aliased methods"
+  #   bug7842 = '[Bug #7842]'
+
+  #   p = labeled_module("P") do
+  #     def m; "P"+super; end
+  #   end
+
+  #   a = labeled_class("A") do
+  #     def m; "A"; end
+  #   end
+
+  #   b = labeled_class("B", a) do
+  #     def m; "B"+super; end
+  #     alias m2 m
+  #     prepend p
+  #     alias m3 m
+  #   end
+
+  #   assert_nothing_raised do
+  #     assert_equal("BA", b.new.m2, bug7842)
+  #   end
+
+  #   assert_nothing_raised do
+  #     assert_equal("PBA", b.new.m3, bug7842)
+  #   end
+  # end
+
+  assert 'Module#prepend each class' do
+    m = labeled_module("M")
+    c1 = labeled_class("C1") {prepend m}
+    c2 = labeled_class("C2", c1) {prepend m}
+    assert_equal([m, c2, m, c1], c2.ancestors[0, 4], "should be able to prepend each class")
+  end
+
+  assert 'Module#prepend no duplication' do
+    m = labeled_module("M")
+    c = labeled_class("C") {prepend m; prepend m}
+    assert_equal([m, c], c.ancestors[0, 2], "should never duplicate")
+  end
+
+  assert 'Module#prepend in superclass' do
+    m = labeled_module("M")
+    c1 = labeled_class("C1")
+    c2 = labeled_class("C2", c1) {prepend m}
+    c1.class_eval {prepend m}
+    assert_equal([m, c2, m, c1], c2.ancestors[0, 4], "should accesisble prepended module in superclass")
+  end
+
+  # requires #assert_separately
+  #assert 'Module#prepend call super' do
+  #  assert_separately([], <<-'end;') #do
+  #    bug10847 = '[ruby-core:68093] [Bug #10847]'
+  #    module M; end
+  #    Float.prepend M
+  #    assert_nothing_raised(SystemStackError, bug10847) do
+  #      0.3.numerator
+  #    end
+  #  end;
+  #end
+
+  assert 'Module#prepend to frozen class' do
+    assert_raise(FrozenError) { Class.new.freeze.prepend Module.new }
+  end
+# @!endgroup prepend
+
+assert('Module#to_s') do
+  module Outer
+    class Inner; end
+    const_set :SetInner, Class.new
+  end
+
+  assert_equal 'Outer', Outer.to_s
+  assert_equal 'Outer::Inner', Outer::Inner.to_s
+  assert_equal 'Outer::SetInner', Outer::SetInner.to_s
+
+  outer = Module.new do
+    const_set :SetInner, Class.new
+  end
+  Object.const_set :SetOuter, outer
+
+  assert_equal 'SetOuter', SetOuter.to_s
+  assert_equal 'SetOuter::SetInner', SetOuter::SetInner.to_s
+
+  assert_match "#<Module:0x*>", Module.new.to_s
+  assert_match "#<Class:0x*>", Class.new.to_s
+
+  assert_equal "FrozenClassToS", (FrozenClassToS = Class.new.freeze).to_s
+  assert_equal "Outer::A", (Outer::A = Module.new.freeze).to_s
+  assert_match "#<Module:0x*>::A", (Module.new::A = Class.new.freeze).to_s
+end
+
+assert('Module#inspect') do
+  module Test4to_sModules
+  end
+
+  assert_equal 'Test4to_sModules', Test4to_sModules.inspect
+end
+
+assert('Issue 1467') do
+  module M1
+    def initialize()
+      super()
+    end
+  end
+
+  class C1
+    include M1
+     def initialize()
+       super()
+     end
+  end
+
+  class C2
+    include M1
+  end
+
+  assert_kind_of(M1, C1.new)
+  assert_kind_of(M1, C2.new)
+end
+
+assert('clone Module') do
+  module M1
+    def foo
+      true
+    end
+  end
+
+  class B
+    include M1.clone
+  end
+
+  assert_true(B.new.foo)
+end
+
+assert('Module#module_function') do
+  module M
+    def modfunc; end
+    module_function :modfunc
+  end
+
+  assert_true M.respond_to?(:modfunc)
+end
+
+assert('module with non-class/module outer raises TypeError') do
+  assert_raise(TypeError) { module 0::M1 end }
+  assert_raise(TypeError) { module []::M2 end }
+end
+
+assert('module to return the last value') do
+  m = module M; :m end
+  assert_equal(m, :m)
+end
+
+assert('module to return nil if body is empty') do
+  assert_nil(module M end)
+end
+
+assert('get constant of parent module in singleton class; issue #3568') do
+  actual = module GetConstantInSingletonTest
+    EXPECTED = "value"
+    class << self
+      EXPECTED
+    end
+  end
+
+  assert_equal("value", actual)
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/test/t/nameerror.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/test/t/nameerror.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/test/t/nameerror.rb	(revision 439)
@@ -0,0 +1,28 @@
+##
+# NameError ISO Test
+
+assert('NameError', '15.2.31') do
+  assert_equal Class, NameError.class
+end
+
+assert('NameError#name', '15.2.31.2.1') do
+
+  # This check is not duplicate with 15.2.31.2.2 check.
+  # Because the NameError in this test is generated in
+  # C API.
+  class TestDummy
+    alias foo bar
+  rescue NameError => e
+    $test_dummy_result = e.name
+  end
+
+  assert_equal :bar, $test_dummy_result
+end
+
+assert('NameError#initialize', '15.2.31.2.2') do
+   e = NameError.new('a', :foo)
+
+   assert_equal NameError, e.class
+   assert_equal 'a', e.message
+   assert_equal :foo, e.name
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/test/t/nil.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/test/t/nil.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/test/t/nil.rb	(revision 439)
@@ -0,0 +1,39 @@
+##
+# NilClass ISO Test
+
+assert('NilClass', '15.2.4') do
+  assert_equal Class, NilClass.class
+end
+
+assert('NilClass', '15.2.4.1') do
+  assert_equal NilClass, nil.class
+  assert_false NilClass.method_defined? :new
+end
+
+assert('NilClass#&', '15.2.4.3.1') do
+  assert_false nil.&(true)
+  assert_false nil.&(nil)
+end
+
+assert('NilClass#^', '15.2.4.3.2') do
+  assert_true nil.^(true)
+  assert_false nil.^(false)
+end
+
+assert('NilClass#|', '15.2.4.3.3') do
+  assert_true nil.|(true)
+  assert_false nil.|(false)
+end
+
+assert('NilClass#nil?', '15.2.4.3.4') do
+  assert_true nil.nil?
+end
+
+assert('NilClass#to_s', '15.2.4.3.5') do
+  assert_equal '', nil.to_s
+end
+
+assert('safe navigation') do
+  assert_nil nil&.size
+  assert_equal 0, []&.size
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/test/t/nomethoderror.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/test/t/nomethoderror.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/test/t/nomethoderror.rb	(revision 439)
@@ -0,0 +1,22 @@
+##
+# NoMethodError ISO Test
+
+assert('NoMethodError', '15.2.32') do
+  NoMethodError.class == Class
+  assert_raise NoMethodError do
+    doesNotExistAsAMethodNameForVerySure("")
+  end
+end
+
+assert('NoMethodError#args', '15.2.32.2.1') do
+  a = NoMethodError.new 'test', :test, [1, 2]
+  assert_equal [1, 2], a.args
+
+  assert_nothing_raised do
+    begin
+      doesNotExistAsAMethodNameForVerySure 3, 1, 4
+    rescue NoMethodError => e
+      assert_equal [3, 1, 4], e.args
+    end
+  end
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/test/t/numeric.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/test/t/numeric.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/test/t/numeric.rb	(revision 439)
@@ -0,0 +1,114 @@
+##
+# Numeric ISO Test
+
+def assert_step(exp, receiver, args, inf: false)
+  act = []
+  ret = receiver.step(*args) do |i|
+    act << i
+    break if inf && exp.size == act.size
+  end
+  expr = "#{receiver.inspect}.step(#{args.map(&:inspect).join(', ')})"
+  assert "assert_step" do
+    assert_true(exp.eql?(act), "#{expr}: counters", assertion_diff(exp, act))
+    assert_same(receiver, ret, "#{expr}: return value") unless inf
+  end
+end
+
+assert('Numeric', '15.2.7') do
+  assert_equal(Class, Numeric.class)
+end
+
+assert('Numeric#+@', '15.2.7.4.1') do
+  assert_equal(+1, +1)
+end
+
+assert('Numeric#-@', '15.2.7.4.2') do
+  assert_equal(-1, -1)
+end
+
+assert('Numeric#abs', '15.2.7.4.3') do
+  assert_equal(1, 1.abs)
+  skip unless Object.const_defined?(:Float)
+  assert_equal(1.0, -1.abs)
+end
+
+assert('Numeric#/', '15.2.8.3.4') do
+  n = Class.new(Numeric){ def /(x); 15.1;end }.new
+
+  assert_equal(2, 10/5)
+  assert_equal(0.0625, 1/16)
+  assert_equal(15.1, n/10)
+  assert_raise(TypeError){ 1/n }
+  assert_raise(TypeError){ 1/nil }
+end
+
+# Not ISO specified
+
+assert('Numeric#**') do
+  assert_equal(8, 2 ** 3)
+  assert_equal(-8, -2 ** 3)
+  assert_equal(1, 2 ** 0)
+  skip unless Object.const_defined?(:Float)
+  assert_equal(1.0, 2.2 ** 0)
+  assert_equal(0.5, 2 ** -1)
+  assert_equal(8.0, 2.0**3)
+end
+
+assert('Numeric#step') do
+  assert_raise(ArgumentError) { 1.step(2, 0) { break } }
+  assert_step([2, 3, 4], 2, [4])
+  assert_step([10, 8, 6, 4, 2], 10, [1, -2])
+  assert_step([], 2, [1, 3])
+  assert_step([], -2, [-1, -3])
+  assert_step([10, 11, 12, 13], 10, [], inf: true)
+  assert_step([10, 7, 4], 10, [nil, -3], inf: true)
+
+  skip unless Object.const_defined?(:Float)
+  inf = Float::INFINITY
+  assert_raise(ArgumentError) { 1.step(2, 0.0) { break } }
+  assert_step([2.0, 3.0, 4.0], 2, [4.0])
+  assert_step([7.0, 4.0, 1.0, -2.0], 7, [-4, -3.0])
+  assert_step([2.0, 3.0, 4.0], 2.0, [4])
+  assert_step([10.0, 11.0, 12.0, 13.0], 10.0, [], inf: true)
+  assert_step([10.0, 7.0, 4.0], 10, [nil, -3.0], inf: true)
+  assert_step([1.0], 1, [nil, inf])
+  assert_step([1.0], 1, [nil, -inf])
+  assert_step([1.0], 1, [3, inf])
+  assert_step([], 1, [-3, inf])
+  assert_step([], 1, [3, -inf])
+  assert_step([1.0], 1, [-3, -inf])
+  assert_step([1.0], 1, [inf, inf])
+  assert_step([], 1, [inf, -inf])
+  assert_step([], 1, [-inf, inf])
+  assert_step([1.0], 1, [-inf, -inf])
+  assert_step([], inf, [2])
+  assert_step([], inf, [-2])
+  assert_step([], inf, [2, 3])
+  assert_step([inf, inf, inf], inf, [2, -3], inf: true)
+  assert_step([], inf, [2, inf])
+  assert_step([inf], inf, [2, -inf])
+  assert_step([], inf, [-2, inf])
+  assert_step([inf], inf, [-2, -inf])
+  assert_step([], inf, [-2, 3])
+  assert_step([inf, inf, inf], inf, [-2, -3], inf: true)
+  assert_step([inf], inf, [inf])
+  assert_step([], inf, [-inf])
+  assert_step([inf], inf, [inf, inf])
+  assert_step([inf], inf, [inf, -inf])
+  assert_step([inf], inf, [-inf, -inf])
+  assert_step([-inf, -inf, -inf], -inf, [2], inf: true)
+  assert_step([-inf, -inf, -inf], -inf, [-2], inf: true)
+  assert_step([-inf, -inf, -inf], -inf, [2, 3], inf: true)
+  assert_step([], -inf, [2, -3])
+  assert_step([-inf], -inf, [2, inf])
+  assert_step([], -inf, [2, -inf])
+  assert_step([-inf], -inf, [-2, inf])
+  assert_step([], -inf, [-2, -inf])
+  assert_step([-inf, -inf, -inf], -inf, [-2, 3], inf: true)
+  assert_step([], -inf, [-2, -3])
+  assert_step([-inf, -inf, -inf], -inf, [inf], inf: true)
+  assert_step([-inf], -inf, [-inf])
+  assert_step([-inf], -inf, [inf, inf])
+  assert_step([], -inf, [inf, -inf])
+  assert_step([-inf], -inf, [-inf, -inf])
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/test/t/object.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/test/t/object.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/test/t/object.rb	(revision 439)
@@ -0,0 +1,11 @@
+##
+# Object ISO Test
+
+assert('Object', '15.2.1') do
+  assert_equal Class, Object.class
+end
+
+assert('Object superclass', '15.2.1.2') do
+  assert_equal BasicObject, Object.superclass
+end
+
Index: /EcnlProtoTool/trunk/mruby-2.1.1/test/t/proc.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/test/t/proc.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/test/t/proc.rb	(revision 439)
@@ -0,0 +1,180 @@
+##
+# Proc ISO Test
+
+assert('Proc', '15.2.17') do
+  assert_equal Class, Proc.class
+end
+
+assert('Proc.new', '15.2.17.3.1') do
+  assert_raise ArgumentError do
+    Proc.new
+  end
+
+  assert_equal (Proc.new {}).class, Proc
+
+  assert_raise LocalJumpError do
+    Proc.new{ break }.call
+  end
+end
+
+assert('Proc#[]', '15.2.17.4.1') do
+  a = 0
+  b = Proc.new { a += 1 }
+  b.[]
+
+  a2 = 0
+  b2 = Proc.new { |i| a2 += i }
+  b2.[](5)
+
+  assert_equal 1, a
+  assert_equal 5, a2
+end
+
+assert('Proc#arity', '15.2.17.4.2') do
+  a = Proc.new {|x, y|}.arity
+  b = Proc.new {|x, *y, z|}.arity
+  c = Proc.new {|x=0, y|}.arity
+  d = Proc.new {|(x, y), z=0|}.arity
+
+  assert_equal  2, a
+  assert_equal(-3, b)
+  assert_equal  1, c
+  assert_equal  1, d
+
+  e = ->(x=0, y){}.arity
+  f = ->((x, y), z=0){}.arity
+  g = ->(x=0){}.arity
+
+  assert_equal(-2, e)
+  assert_equal(-2, f)
+  assert_equal(-1, g)
+end
+
+assert('Proc#call', '15.2.17.4.3') do
+  a = 0
+  b = Proc.new { a += 1 }
+  b.call
+
+  a2 = 0
+  b2 = Proc.new { |i| a2 += i }
+  b2.call(5)
+
+  assert_equal 1, a
+  assert_equal 5, a2
+end
+
+assert('Proc#call proc args pos block') do
+  pr = Proc.new {|a,b,&c|
+    [a, b, c.class, c&&c.call(:x)]
+  }
+  assert_equal [nil, nil, Proc, :proc], (pr.call(){ :proc })
+  assert_equal [1, nil, Proc, :proc], (pr.call(1){ :proc })
+  assert_equal [1, 2, Proc, :proc], (pr.call(1, 2){ :proc })
+  assert_equal [1, 2, Proc, :proc], (pr.call(1, 2, 3){ :proc })
+  assert_equal [1, 2, Proc, :proc], (pr.call(1, 2, 3, 4){ :proc })
+
+  assert_equal [nil, nil, Proc, :x], (pr.call(){|x| x})
+  assert_equal [1, nil, Proc, :x], (pr.call(1){|x| x})
+  assert_equal [1, 2, Proc, :x], (pr.call(1, 2){|x| x})
+  assert_equal [1, 2, Proc, :x], (pr.call(1, 2, 3){|x| x})
+  assert_equal [1, 2, Proc, :x], (pr.call(1, 2, 3, 4){|x| x})
+end
+
+assert('Proc#call proc args pos rest post') do
+  pr = Proc.new {|a,b,*c,d,e|
+    [a,b,c,d,e]
+  }
+  assert_equal [nil, nil, [], nil, nil], pr.call()
+  assert_equal [1, nil, [], nil, nil], pr.call(1)
+  assert_equal [1, 2, [], nil, nil], pr.call(1,2)
+  assert_equal [1, 2, [], 3, nil], pr.call(1,2,3)
+  assert_equal [1, 2, [], 3, 4], pr.call(1,2,3,4)
+  assert_equal [1, 2, [3], 4, 5], pr.call(1,2,3,4,5)
+  assert_equal [1, 2, [3, 4], 5, 6], pr.call(1,2,3,4,5,6)
+  assert_equal [1, 2, [3, 4, 5], 6,7], pr.call(1,2,3,4,5,6,7)
+
+  assert_equal [nil, nil, [], nil, nil], pr.call([])
+  assert_equal [1, nil, [], nil, nil], pr.call([1])
+  assert_equal [1, 2, [], nil, nil], pr.call([1,2])
+  assert_equal [1, 2, [], 3, nil], pr.call([1,2,3])
+  assert_equal [1, 2, [], 3, 4], pr.call([1,2,3,4])
+  assert_equal [1, 2, [3], 4, 5], pr.call([1,2,3,4,5])
+  assert_equal [1, 2, [3, 4], 5, 6], pr.call([1,2,3,4,5,6])
+  assert_equal [1, 2, [3, 4, 5], 6,7], pr.call([1,2,3,4,5,6,7])
+end
+
+assert('Proc#return_does_not_break_self') do
+  class TestClass
+    attr_accessor :block
+    def initialize
+    end
+    def return_array
+      @block = Proc.new { self }
+      return []
+    end
+    def return_instance_variable
+      @block = Proc.new { self }
+      return @block
+    end
+    def return_const_fixnum
+      @block = Proc.new { self }
+      return 123
+    end
+    def return_nil
+      @block = Proc.new { self }
+      return nil
+    end
+  end
+
+  c = TestClass.new
+  assert_equal [], c.return_array
+  assert_equal c, c.block.call
+
+  c.return_instance_variable
+  assert_equal c, c.block.call
+
+  assert_equal 123, c.return_const_fixnum
+  assert_equal c, c.block.call
+
+  assert_equal nil, c.return_nil
+  assert_equal c, c.block.call
+end
+
+assert('call Proc#initialize if defined') do
+  a = []
+  c = Class.new(Proc) do
+    define_method(:initialize) do
+      a << :ok
+    end
+  end
+
+  assert_kind_of c, c.new{}
+  assert_equal [:ok], a
+end
+
+assert('&obj call to_proc if defined') do
+  pr = Proc.new{}
+  def mock(&b)
+    b
+  end
+  assert_same pr, mock(&pr)
+  assert_equal pr, mock(&pr)
+
+  obj = Object.new
+  def obj.to_proc
+    Proc.new{ :from_to_proc }
+  end
+  assert_equal :from_to_proc, mock(&obj).call
+
+  assert_raise(TypeError){ mock(&(Object.new)) }
+end
+
+assert('Creation of a proc through the block of a method') do
+  def m(&b) b end
+
+  assert_equal m{}.class, Proc
+
+  assert_raise LocalJumpError do
+    m{ break }.call
+  end
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/test/t/range.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/test/t/range.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/test/t/range.rb	(revision 439)
@@ -0,0 +1,112 @@
+##
+# Range ISO Test
+
+assert('Range', '15.2.14') do
+  assert_equal Class, Range.class
+end
+
+assert('Range#==', '15.2.14.4.1') do
+  assert_true (1..10) == (1..10)
+  assert_false (1..10) == (1..100)
+  skip unless Object.const_defined?(:Float)
+  assert_true (1..10) == Range.new(1.0, 10.0)
+end
+
+assert('Range#===', '15.2.14.4.2') do
+  a = (1..10)
+
+  assert_true a === 5
+  assert_false a === 20
+end
+
+assert('Range#begin', '15.2.14.4.3') do
+  assert_equal 1, (1..10).begin
+end
+
+assert('Range#each', '15.2.14.4.4') do
+  a = (1..3)
+  b = 0
+  a.each {|i| b += i}
+  assert_equal 6, b
+end
+
+assert('Range#end', '15.2.14.4.5') do
+  assert_equal 10, (1..10).end
+end
+
+assert('Range#exclude_end?', '15.2.14.4.6') do
+  assert_true (1...10).exclude_end?
+  assert_false (1..10).exclude_end?
+end
+
+assert('Range#first', '15.2.14.4.7') do
+  assert_equal 1, (1..10).first
+end
+
+assert('Range#include?', '15.2.14.4.8') do
+  assert_true (1..10).include?(10)
+  assert_false (1..10).include?(11)
+
+  assert_true (1...10).include?(9)
+  assert_false (1...10).include?(10)
+end
+
+assert('Range#initialize', '15.2.14.4.9') do
+  a = Range.new(1, 10, true)
+  b = Range.new(1, 10, false)
+
+  assert_equal (1...10), a
+  assert_true a.exclude_end?
+  assert_equal (1..10), b
+  assert_false b.exclude_end?
+
+  assert_raise(NameError) { (0..1).__send__(:initialize, 1, 3) }
+end
+
+assert('Range#last', '15.2.14.4.10') do
+  assert_equal 10, (1..10).last
+end
+
+assert('Range#member?', '15.2.14.4.11') do
+  a = (1..10)
+
+  assert_true a.member?(5)
+  assert_false a.member?(20)
+end
+
+assert('Range#to_s', '15.2.14.4.12') do
+  assert_equal "0..1", (0..1).to_s
+  assert_equal "0...1", (0...1).to_s
+  assert_equal "a..b", ("a".."b").to_s
+  assert_equal "a...b", ("a"..."b").to_s
+end
+
+assert('Range#inspect', '15.2.14.4.13') do
+  assert_equal "0..1", (0..1).inspect
+  assert_equal "0...1", (0...1).inspect
+  assert_equal "\"a\"..\"b\"", ("a".."b").inspect
+  assert_equal "\"a\"...\"b\"", ("a"..."b").inspect
+end
+
+assert('Range#eql?', '15.2.14.4.14') do
+  assert_true (1..10).eql? (1..10)
+  assert_false (1..10).eql? (1..100)
+  assert_false (1..10).eql? (Range.new(1.0, 10.0))
+  assert_false (1..10).eql? "1..10"
+end
+
+assert('Range#initialize_copy', '15.2.14.4.15') do
+  assert_raise(NameError) { (0..1).__send__(:initialize_copy, 1..3) }
+end
+
+assert('Range#dup') do
+  r = (1..3).dup
+  assert_equal 1, r.begin
+  assert_equal 3, r.end
+  assert_false r.exclude_end?
+
+  r = ("a"..."z").dup
+  assert_equal "a", r.begin
+  assert_equal "z", r.end
+  assert_true r.exclude_end?
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/test/t/rangeerror.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/test/t/rangeerror.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/test/t/rangeerror.rb	(revision 439)
@@ -0,0 +1,6 @@
+##
+# RangeError ISO Test
+
+assert('RangeError', '15.2.26') do
+  assert_equal Class, RangeError.class
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/test/t/regexperror.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/test/t/regexperror.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/test/t/regexperror.rb	(revision 439)
@@ -0,0 +1,4 @@
+##
+# RegexpError ISO Test
+
+# TODO broken ATM assert('RegexpError', '15.2.27') do
Index: /EcnlProtoTool/trunk/mruby-2.1.1/test/t/runtimeerror.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/test/t/runtimeerror.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/test/t/runtimeerror.rb	(revision 439)
@@ -0,0 +1,6 @@
+##
+# RuntimeError ISO Test
+
+assert('RuntimeError', '15.2.28') do
+  assert_equal Class, RuntimeError.class
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/test/t/standarderror.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/test/t/standarderror.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/test/t/standarderror.rb	(revision 439)
@@ -0,0 +1,6 @@
+##
+# StandardError ISO Test
+
+assert('StandardError', '15.2.23') do
+  assert_equal Class, StandardError.class
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/test/t/string.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/test/t/string.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/test/t/string.rb	(revision 439)
@@ -0,0 +1,897 @@
+# coding: utf-8
+##
+# String ISO Test
+
+UTF8STRING = __ENCODING__ == "UTF-8"
+
+assert('String', '15.2.10') do
+  assert_equal Class, String.class
+end
+
+assert('String#<=>', '15.2.10.5.1') do
+  a = '' <=> ''
+  b = '' <=> 'not empty'
+  c = 'not empty' <=> ''
+  d = 'abc' <=> 'cba'
+  e = 'cba' <=> 'abc'
+
+  assert_equal  0, a
+  assert_equal(-1, b)
+  assert_equal  1, c
+  assert_equal(-1, d)
+  assert_equal  1, e
+  assert_nil 'a' <=> 1024
+end
+
+assert('String#==', '15.2.10.5.2') do
+  assert_equal 'abc', 'abc'
+  assert_not_equal 'abc', 'cba'
+end
+
+# 'String#=~', '15.2.10.5.3' will be tested in mrbgems.
+
+assert('String#+', '15.2.10.5.4') do
+  assert_equal 'ab', 'a' + 'b'
+end
+
+assert('String#*', '15.2.10.5.5') do
+  assert_equal 'aaaaa', 'a' * 5
+  assert_equal '', 'a' * 0
+  assert_raise(ArgumentError) { 'a' * -1 }
+  assert_raise(TypeError) { 'a' * '1' }
+  assert_raise(TypeError) { 'a' * nil }
+
+  skip unless Object.const_defined?(:Float)
+  assert_equal 'aa', 'a' * 2.1
+  assert_raise(RangeError) { '' * 1e30 }
+  assert_raise(RangeError) { '' * Float::INFINITY }
+  assert_raise(RangeError) { '' * Float::NAN }
+end
+
+assert('String#[]', '15.2.10.5.6') do
+  # length of args is 1
+  assert_equal 'a', 'abc'[0]
+  assert_equal 'c', 'abc'[-1]
+  assert_nil 'abc'[10]
+  assert_nil 'abc'[-10]
+  assert_equal 'b', 'abc'[1.1] if Object.const_defined?(:Float)
+
+  # length of args is 2
+  assert_nil 'abc'[0, -1]
+  assert_nil 'abc'[10, 0]
+  assert_nil 'abc'[-10, 0]
+  assert_equal '', 'abc'[0, 0]
+  assert_equal 'bc', 'abc'[1, 2]
+
+  # args is String
+  assert_equal 'bc', 'abc'['bc']
+  assert_nil 'abc'['XX']
+
+  assert_raise(TypeError) { 'abc'[nil] }
+end
+
+assert('String#[](UTF-8)', '15.2.10.5.6') do
+  assert_equal "ち", "こんにちは世界"[3]
+  assert_equal nil, "こんにちは世界"[20]
+  assert_equal "世", "こんにちは世界"[-2]
+  assert_equal "世界", "こんにちは世界"[-2..-1]
+  assert_equal "んに", "こんにちは世界"[1,2]
+  assert_equal "世", "こんにちは世界"["世"]
+end if UTF8STRING
+
+assert('String#[] with Range') do
+  a1 = 'abc'[1..0]
+  b1 = 'abc'[1..1]
+  c1 = 'abc'[1..2]
+  d1 = 'abc'[1..3]
+  e1 = 'abc'[1..4]
+  f1 = 'abc'[0..-2]
+  g1 = 'abc'[-2..3]
+  h1 = 'abc'[3..4]
+  i1 = 'abc'[4..5]
+  j1 = 'abcdefghijklmnopqrstuvwxyz'[1..3]
+  a2 = 'abc'[1...0]
+  b2 = 'abc'[1...1]
+  c2 = 'abc'[1...2]
+  d2 = 'abc'[1...3]
+  e2 = 'abc'[1...4]
+  f2 = 'abc'[0...-2]
+  g2 = 'abc'[-2...3]
+  h2 = 'abc'[3...4]
+  i2 = 'abc'[4...5]
+  j2 = 'abcdefghijklmnopqrstuvwxyz'[1...3]
+
+  assert_equal '', a1
+  assert_equal 'b', b1
+  assert_equal 'bc', c1
+  assert_equal 'bc', d1
+  assert_equal 'bc', e1
+  assert_equal 'ab', f1
+  assert_equal 'bc', g1
+  assert_equal '', h1
+  assert_nil i2
+  assert_equal 'bcd', j1
+  assert_equal '', a2
+  assert_equal '', b2
+  assert_equal 'b', c2
+  assert_equal 'bc', d2
+  assert_equal 'bc', e2
+  assert_equal 'a', f2
+  assert_equal 'bc', g2
+  assert_equal '', h2
+  assert_nil i2
+  assert_equal 'bc', j2
+end
+
+assert('String#[]=') do
+  # length of args is 1
+  a = 'abc'
+  a[0] = 'X'
+  assert_equal 'Xbc', a
+
+  b = 'abc'
+  b[-1] = 'X'
+  assert_equal 'abX', b
+
+  c = 'abc'
+  assert_raise(IndexError) do
+    c[10] = 'X'
+  end
+
+  d = 'abc'
+  assert_raise(IndexError) do
+    d[-10] = 'X'
+  end
+
+  if Object.const_defined?(:Float)
+   e = 'abc'
+   e[1.1] = 'X'
+   assert_equal 'aXc', e
+  end
+
+  assert_raise(TypeError) { 'a'[0] = 1 }
+  assert_raise(TypeError) { 'a'[:a] = '1' }
+
+  # length of args is 2
+  a1 = 'abc'
+  assert_raise(IndexError) do
+    a1[0, -1] = 'X'
+  end
+
+  b1 = 'abc'
+  assert_raise(IndexError) do
+    b1[10, 0] = 'X'
+  end
+
+  c1 = 'abc'
+  assert_raise(IndexError) do
+    c1[-10, 0] = 'X'
+  end
+
+  d1 = 'abc'
+  d1[0, 0] = 'X'
+  assert_equal 'Xabc', d1
+
+  e1 = 'abc'
+  e1[1, 3] = 'X'
+  assert_equal 'aX', e1
+
+  # args is RegExp
+  # It will be tested in mrbgems.
+
+  # args is String
+  a3 = 'abc'
+  a3['bc'] = 'X'
+  assert_equal a3, 'aX'
+
+  b3 = 'abc'
+  assert_raise(IndexError) do
+    b3['XX'] = 'Y'
+  end
+
+  assert_raise(TypeError) { 'a'[:a, 0] = '1' }
+  assert_raise(TypeError) { 'a'[0, :a] = '1' }
+  assert_raise(TypeError) { 'a'[0, 1] = 1 }
+end
+
+assert('String[]=(UTF-8)') do
+  a = "➀➁➂➃➄"
+  a[3] = "⚃"
+  assert_equal "➀➁➂⚃➄", a
+
+  b = "➀➁➂➃➄"
+  b[3, 0] = "⛄"
+  assert_equal "➀➁➂⛄➃➄", b
+
+  c = "➀➁➂➃➄"
+  c[3, 2] = "⚃⚄"
+  assert_equal "➀➁➂⚃⚄", c
+
+  d = "➀➁➂➃➄"
+  d[5] = "⛄"
+  assert_equal "➀➁➂➃➄⛄", d
+
+  e = "➀➁➂➃➄"
+  e[5, 0] = "⛄"
+  assert_equal "➀➁➂➃➄⛄", e
+
+  f = "➀➁➂➃➄"
+  f[5, 2] = "⛄"
+  assert_equal "➀➁➂➃➄⛄", f
+
+  g = "➀➁➂➃➄"
+  assert_raise(IndexError) { g[6] = "⛄" }
+
+  h = "➀➁➂➃➄"
+  assert_raise(IndexError) { h[6, 0] = "⛄" }
+
+  i = "➀➁➂➃➄"
+  assert_raise(IndexError) { i[6, 2] = "⛄" }
+
+  j = "➀➁➂➃➄"
+  j["➃"] = "⚃"
+  assert_equal "➀➁➂⚃➄", j
+
+  k = "➀➁➂➃➄"
+  assert_raise(IndexError) { k["⛄"] = "⛇" }
+
+  l = "➀➁➂➃➄"
+  assert_nothing_raised { l["➂"] = "" }
+  assert_equal "➀➁➃➄", l
+
+  m = "➀➁➂➃➄"
+  assert_raise(TypeError) { m["➂"] = nil }
+  assert_equal "➀➁➂➃➄", m
+end if UTF8STRING
+
+assert('String#capitalize', '15.2.10.5.7') do
+  a = 'abc'
+  a.capitalize
+
+  assert_equal 'abc', a
+  assert_equal 'Abc', 'abc'.capitalize
+end
+
+assert('String#capitalize!', '15.2.10.5.8') do
+  a = 'abc'
+  a.capitalize!
+
+  assert_equal 'Abc', a
+  assert_equal nil, 'Abc'.capitalize!
+end
+
+assert('String#chomp', '15.2.10.5.9') do
+  a = 'abc'.chomp
+  b = ''.chomp
+  c = "abc\n".chomp
+  d = "abc\n\n".chomp
+  e = "abc\t".chomp("\t")
+  f = "abc\n"
+
+  f.chomp
+
+  assert_equal 'abc', a
+  assert_equal '', b
+  assert_equal 'abc', c
+  assert_equal "abc\n", d
+  assert_equal 'abc', e
+  assert_equal "abc\n", f
+end
+
+assert('String#chomp!', '15.2.10.5.10') do
+  a = 'abc'
+  b = ''
+  c = "abc\n"
+  d = "abc\n\n"
+  e = "abc\t"
+
+  a.chomp!
+  b.chomp!
+  c.chomp!
+  d.chomp!
+  e.chomp!("\t")
+
+  assert_equal 'abc', a
+  assert_equal '', b
+  assert_equal 'abc', c
+  assert_equal "abc\n", d
+  assert_equal 'abc', e
+end
+
+assert('String#chop', '15.2.10.5.11') do
+  a = ''.chop
+  b = 'abc'.chop
+  c = 'abc'
+
+  c.chop
+
+  assert_equal '', a
+  assert_equal 'ab', b
+  assert_equal 'abc', c
+end
+
+assert('String#chop(UTF-8)', '15.2.10.5.11') do
+  a = ''.chop
+  b = 'あいう'.chop
+  c = "あ\nい".chop.chop
+
+  assert_equal '', a
+  assert_equal 'あい', b
+  assert_equal 'あ', c
+end if UTF8STRING
+
+assert('String#chop!', '15.2.10.5.12') do
+  a = ''
+  b = 'abc'
+
+  a.chop!
+  b.chop!
+
+  assert_equal a, ''
+  assert_equal b, 'ab'
+end
+
+assert('String#chop!(UTF-8)', '15.2.10.5.12') do
+  a = ''
+  b = "あいうえ\n"
+  c = "あいうえ\n"
+
+  a.chop!
+  b.chop!
+  c.chop!
+  c.chop!
+
+  assert_equal a, ''
+  assert_equal b, 'あいうえ'
+  assert_equal c, 'あいう'
+end if UTF8STRING
+
+assert('String#downcase', '15.2.10.5.13') do
+  a = 'ABC'.downcase
+  b = 'ABC'
+
+  b.downcase
+
+  assert_equal 'abc', a
+  assert_equal 'ABC', b
+end
+
+assert('String#downcase!', '15.2.10.5.14') do
+  a = 'ABC'
+
+  a.downcase!
+
+  assert_equal 'abc', a
+  assert_equal nil, 'abc'.downcase!
+end
+
+assert('String#each_line', '15.2.10.5.15') do
+  a = "first line\nsecond line\nthird line"
+  list = ["first line\n", "second line\n", "third line"]
+  n_list = []
+
+  a.each_line do |line|
+    n_list << line
+  end
+
+  assert_equal list, n_list
+
+  n_list.clear
+  a.each_line("li") do |line|
+    n_list << line
+  end
+  assert_equal ["first li", "ne\nsecond li", "ne\nthird li", "ne"], n_list
+end
+
+assert('String#empty?', '15.2.10.5.16') do
+  a = ''
+  b = 'not empty'
+
+  assert_true a.empty?
+  assert_false b.empty?
+end
+
+assert('String#eql?', '15.2.10.5.17') do
+  assert_true 'abc'.eql?('abc')
+  assert_false 'abc'.eql?('cba')
+end
+
+assert('String#gsub', '15.2.10.5.18') do
+  assert_equal('aBcaBc', 'abcabc'.gsub('b', 'B'), 'gsub without block')
+  assert_equal('aBcaBc', 'abcabc'.gsub('b'){|w| w.capitalize }, 'gsub with block')
+  assert_equal('$a$a$',  '#a#a#'.gsub('#', '$'), 'mruby/mruby#847')
+  assert_equal('$a$a$',  '#a#a#'.gsub('#'){|_w| '$' }, 'mruby/mruby#847 with block')
+  assert_equal('$$a$$',  '##a##'.gsub('##', '$$'), 'mruby/mruby#847 another case')
+  assert_equal('$$a$$',  '##a##'.gsub('##'){|_w| '$$' }, 'mruby/mruby#847 another case with block')
+  assert_equal('A',      'a'.gsub('a', 'A'))
+  assert_equal('A',      'a'.gsub('a'){|w| w.capitalize })
+  assert_equal("<a><><>", 'a'.gsub('a', '<\0><\1><\2>'))
+  assert_equal(".h.e.l.l.o.", "hello".gsub("", "."))
+  a = []
+  assert_equal(".h.e.l.l.o.", "hello".gsub("") { |i| a << i; "." })
+  assert_equal(["", "", "", "", "", ""], a)
+  assert_raise(ArgumentError) { "".gsub }
+  assert_raise(ArgumentError) { "".gsub("", "", "") }
+end
+
+assert('String#gsub with backslash') do
+  s = 'abXcdXef'
+  assert_equal 'ab<\\>cd<\\>ef',    s.gsub('X', '<\\\\>')
+  assert_equal 'ab<X>cd<X>ef',      s.gsub('X', '<\\&>')
+  assert_equal 'ab<X>cd<X>ef',      s.gsub('X', '<\\0>')
+  assert_equal 'ab<ab>cd<abXcd>ef', s.gsub('X', '<\\`>')
+  assert_equal 'ab<cdXef>cd<ef>ef', s.gsub('X', '<\\\'>')
+end
+
+assert('String#gsub!', '15.2.10.5.19') do
+  a = 'abcabc'
+  a.gsub!('b', 'B')
+
+  b = 'abcabc'
+  b.gsub!('b') { |w| w.capitalize }
+
+  assert_equal 'aBcaBc', a
+  assert_equal 'aBcaBc', b
+end
+
+assert('String#hash', '15.2.10.5.20') do
+  a = 'abc'
+
+  assert_equal 'abc'.hash, a.hash
+end
+
+assert('String#include?', '15.2.10.5.21') do
+  assert_true 'abc'.include?('a')
+  assert_false 'abc'.include?('d')
+end
+
+assert('String#index', '15.2.10.5.22') do
+  assert_equal 0, 'abc'.index('a')
+  assert_nil 'abc'.index('d')
+  assert_equal 3, 'abcabc'.index('a', 1)
+  assert_equal 5, "hello".index("", 5)
+  assert_equal nil, "hello".index("", 6)
+  assert_equal 3, "hello".index("l", -2)
+  assert_raise(ArgumentError) { "hello".index }
+  assert_raise(TypeError) { "hello".index(101) }
+end
+
+assert('String#index(UTF-8)', '15.2.10.5.22') do
+  assert_equal 0, '⓿➊➋➌➍➎'.index('⓿')
+  assert_nil '⓿➊➋➌➍➎'.index('➓')
+  assert_equal 6, '⓿➊➋➌➍➎⓿➊➋➌➍➎'.index('⓿', 1)
+  assert_equal 6, '⓿➊➋➌➍➎⓿➊➋➌➍➎'.index('⓿', -7)
+  assert_equal 6, "⓿➊➋➌➍➎".index("", 6)
+  assert_equal nil, "⓿➊➋➌➍➎".index("", 7)
+  assert_equal 0, '⓿➊➋➌➍➎'.index("\xe2")
+  assert_equal nil, '⓿➊➋➌➍➎'.index("\xe3")
+  assert_equal 6, "\xd1\xd1\xd1\xd1\xd1\xd1⓿➊➋➌➍➎".index('⓿')
+end if UTF8STRING
+
+assert('String#initialize', '15.2.10.5.23') do
+  a = ''
+  a.initialize('abc')
+  assert_equal 'abc', a
+
+  a.initialize('abcdefghijklmnopqrstuvwxyz')
+  assert_equal 'abcdefghijklmnopqrstuvwxyz', a
+end
+
+assert('String#initialize_copy', '15.2.10.5.24') do
+  a = ''
+  a.initialize_copy('abc')
+
+  assert_equal 'abc', a
+end
+
+assert('String#intern', '15.2.10.5.25') do
+  assert_equal :abc, 'abc'.intern
+end
+
+assert('String#length', '15.2.10.5.26') do
+  assert_equal 3, 'abc'.length
+end
+
+# 'String#match', '15.2.10.5.27' will be tested in mrbgems.
+
+assert('String#replace', '15.2.10.5.28') do
+  a = ''
+  a.replace('abc')
+
+  assert_equal 'abc', a
+  assert_equal 'abc', 'cba'.replace(a)
+
+  b = 'abc' * 10
+  c = ('cba' * 10).dup
+  b.replace(c);
+  c.replace(b);
+  assert_equal c, b
+
+  # shared string
+  s = "foo" * 100
+  a = s[10, 90]                # create shared string
+  assert_equal("", s.replace(""))    # clear
+  assert_equal("", s)          # s is cleared
+  assert_not_equal("", a)      # a should not be affected
+end
+
+assert('String#reverse', '15.2.10.5.29') do
+  a = 'abc'
+  a.reverse
+
+  assert_equal 'abc', a
+  assert_equal 'cba', 'abc'.reverse
+end
+
+assert('String#reverse(UTF-8)', '15.2.10.5.29') do
+  a = 'こんにちは世界!'
+  a.reverse
+
+  assert_equal 'こんにちは世界!', a
+  assert_equal '!界世はちにんこ', 'こんにちは世界!'.reverse
+  assert_equal 'あ', 'あ'.reverse
+end if UTF8STRING
+
+assert('String#reverse!', '15.2.10.5.30') do
+  a = 'abc'
+  a.reverse!
+
+  assert_equal 'cba', a
+  assert_equal 'cba', 'abc'.reverse!
+end
+
+assert('String#reverse!(UTF-8)', '15.2.10.5.30') do
+  a = 'こんにちは世界!'
+  a.reverse!
+
+  assert_equal '!界世はちにんこ', a
+  assert_equal '!界世はちにんこ', 'こんにちは世界!'.reverse!
+
+  b = 'あ'
+  b.reverse!
+  assert_equal 'あ', b
+end if UTF8STRING
+
+assert('String#rindex', '15.2.10.5.31') do
+  assert_equal 0, 'abc'.rindex('a')
+  assert_equal 0, 'abc'.rindex('a', 3)
+  assert_nil 'abc'.rindex('a', -4)
+  assert_nil 'abc'.rindex('d')
+  assert_equal 6, 'abcabc'.rindex('')
+  assert_equal 3, 'abcabc'.rindex('a')
+  assert_equal 0, 'abcabc'.rindex('a', 1)
+  assert_equal 3, 'abcabc'.rindex('a', 4)
+  assert_equal 0, 'abcabc'.rindex('a', -4)
+  assert_raise(ArgumentError) { "hello".rindex }
+  assert_raise(TypeError) { "hello".rindex(101) }
+end
+
+assert('String#rindex(UTF-8)', '15.2.10.5.31') do
+  str = "こんにちは世界!\nこんにちは世界!"
+  assert_nil str.rindex('さ')
+  assert_equal 12, str.rindex('ち')
+  assert_equal 3, str.rindex('ち', 10)
+  assert_equal 3, str.rindex('ち', -6)
+
+  broken = "\xf0☀\xf1☁\xf2☂\xf3☃\xf0☀\xf1☁\xf2☂\xf3☃"
+  assert_nil broken.rindex("\x81") # "\x81" is a part of "☁" ("\xe2\x98\x81")
+  assert_equal 11, broken.rindex("☁")
+  assert_equal 11, broken.rindex("☁", 12)
+  assert_equal 11, broken.rindex("☁", 11)
+  assert_equal  3, broken.rindex("☁", 10)
+end if UTF8STRING
+
+# assert('String#scan', '15.2.10.5.32') do
+#   # Not implemented yet
+# end
+
+assert('String#size', '15.2.10.5.33') do
+  assert_equal 3, 'abc'.size
+end
+
+assert('String#size(UTF-8)', '15.2.10.5.33') do
+  str = 'こんにちは世界!'
+  assert_equal 8, str.size
+  assert_not_equal str.bytesize, str.size
+  assert_equal 2, str[1, 2].size
+end if UTF8STRING
+
+assert('String#slice', '15.2.10.5.34') do
+  # length of args is 1
+  a = 'abc'.slice(0)
+  b = 'abc'.slice(-1)
+  c = 'abc'.slice(10)
+  d = 'abc'.slice(-10)
+
+  # length of args is 2
+  a1 = 'abc'.slice(0, -1)
+  b1 = 'abc'.slice(10, 0)
+  c1 = 'abc'.slice(-10, 0)
+  d1 = 'abc'.slice(0, 0)
+  e1 = 'abc'.slice(1, 2)
+
+  # slice of shared string
+  e11 = e1.slice(0)
+
+  # args is RegExp
+  # It will be tested in mrbgems.
+
+  # args is String
+  a3 = 'abc'.slice('bc')
+  b3 = 'abc'.slice('XX')
+
+  assert_equal 'a', a
+  assert_equal 'c', b
+  assert_nil c
+  assert_nil d
+  assert_nil a1
+  assert_nil b1
+  assert_nil c1
+  assert_equal '', d1
+  assert_equal 'bc', e1
+  assert_equal 'b', e11
+  assert_equal 'bc', a3
+  assert_nil b3
+end
+
+# TODO Broken ATM
+assert('String#split', '15.2.10.5.35') do
+  # without RegExp behavior is actually unspecified
+  assert_equal ['abc', 'abc', 'abc'], 'abc abc abc'.split
+  assert_equal ["a", "b", "c", "", "d"], 'a,b,c,,d'.split(',')
+  assert_equal ['abc', 'abc', 'abc'], 'abc abc abc'.split(nil)
+  assert_equal ['a', 'b', 'c'], 'abc'.split("")
+end
+
+assert('String#split(UTF-8)', '15.2.10.5.35') do
+  got = "こんにちは世界!".split('')
+  assert_equal ['こ', 'ん', 'に', 'ち', 'は', '世', '界', '!'], got
+  got = "こんにちは世界!".split('に')
+  assert_equal ['こん', 'ちは世界!'], got
+end if UTF8STRING
+
+assert('String#sub', '15.2.10.5.36') do
+  assert_equal 'aBcabc', 'abcabc'.sub('b', 'B')
+  assert_equal 'aBcabc', 'abcabc'.sub('b') { |w| w.capitalize }
+  assert_equal 'aa$', 'aa#'.sub('#', '$')
+  assert_equal '.abc', "abc".sub("", ".")
+
+  str = "abc"
+  miss = str.sub("X", "Z")
+  assert_equal str, miss
+  assert_not_same str, miss
+
+  a = []
+  assert_equal '.abc', "abc".sub("") { |i| a << i; "." }
+  assert_equal [""], a
+end
+
+assert('String#sub with backslash') do
+  s = 'abXcdXef'
+  assert_equal 'ab<\\>cdXef',    s.sub('X', '<\\\\>')
+  assert_equal 'ab<X>cdXef',     s.sub('X', '<\\&>')
+  assert_equal 'ab<X>cdXef',     s.sub('X', '<\\0>')
+  assert_equal 'ab<ab>cdXef',    s.sub('X', '<\\`>')
+  assert_equal 'ab<cdXef>cdXef', s.sub('X', '<\\\'>')
+end
+
+assert('String#sub!', '15.2.10.5.37') do
+  a = 'abcabc'
+  a.sub!('b', 'B')
+
+  b = 'abcabc'
+  b.sub!('b') { |w| w.capitalize }
+
+  assert_equal 'aBcabc', a
+  assert_equal 'aBcabc', b
+end
+
+assert('String#to_f', '15.2.10.5.38') do
+  assert_operator(0.0, :eql?, ''.to_f)
+  assert_operator(123456789.0, :eql?, '123456789'.to_f)
+  assert_operator(12345.6789, :eql?, '12345.6789'.to_f)
+  assert_operator(0.0, :eql?, '1e-2147483648'.to_f)
+  assert_operator(Float::INFINITY, :eql?, '1e2147483648'.to_f)
+  assert_operator(0.0, :eql?, 'a'.to_f)
+  assert_operator(4.0, :eql?, '4a5'.to_f)
+  assert_operator(12.0, :eql?, '1_2__3'.to_f)
+  assert_operator(123.0, :eql?, '1_2_3'.to_f)
+  assert_operator(68.0, :eql?, '68_'.to_f)
+  assert_operator(68.0, :eql?, '68._7'.to_f)
+  assert_operator(68.7, :eql?, '68.7_'.to_f)
+  assert_operator(68.7, :eql?, '68.7_ '.to_f)
+  assert_operator(6.0, :eql?, '6 8.7'.to_f)
+  assert_operator(68.0, :eql?, '68. 7'.to_f)
+  assert_operator(0.0, :eql?, '_68'.to_f)
+  assert_operator(0.0, :eql?, ' _68'.to_f)
+  assert_operator(12.34, :eql?, '1_2.3_4'.to_f)
+  assert_operator(12.3, :eql?, '1_2.3__4'.to_f)
+  assert_operator(0.9, :eql?, '.9'.to_f)
+  assert_operator(0.9, :eql?, "\t\r\n\f\v .9 \t\r\n\f\v".to_f)
+end if Object.const_defined?(:Float)
+
+assert('String#to_i', '15.2.10.5.39') do
+  assert_operator 0, :eql?, ''.to_i
+  assert_operator 32143, :eql?, '32143'.to_i
+  assert_operator 10, :eql?, 'a'.to_i(16)
+  assert_operator 4, :eql?, '100'.to_i(2)
+  assert_operator 1_000, :eql?, '1_000'.to_i
+  assert_operator 0, :eql?, 'a'.to_i
+  assert_operator 4, :eql?, '4a5'.to_i
+  assert_operator 12, :eql?, '1_2__3'.to_i
+  assert_operator 123, :eql?, '1_2_3'.to_i
+  assert_operator 68, :eql?, '68_'.to_i
+  assert_operator 68, :eql?, '68_ '.to_i
+  assert_operator 0, :eql?, '_68'.to_i
+  assert_operator 0, :eql?, ' _68'.to_i
+  assert_operator 68, :eql?, "\t\r\n\f\v 68 \t\r\n\f\v".to_i
+  assert_operator 6, :eql?, ' 6 8 '.to_i
+end
+
+assert('String#to_s', '15.2.10.5.40') do
+  assert_equal 'abc', 'abc'.to_s
+end
+
+assert('String#to_sym', '15.2.10.5.41') do
+  assert_equal :abc, 'abc'.to_sym
+end
+
+assert('String#upcase', '15.2.10.5.42') do
+  a = 'abc'.upcase
+  b = 'abc'
+
+  b.upcase
+
+  assert_equal 'ABC', a
+  assert_equal 'abc', b
+end
+
+assert('String#upcase!', '15.2.10.5.43') do
+  a = 'abc'
+
+  a.upcase!
+
+  assert_equal 'ABC', a
+  assert_equal nil, 'ABC'.upcase!
+
+  a = 'abcdefghijklmnopqrstuvwxyz'
+  b = a.dup
+  a.upcase!
+  b.upcase!
+  assert_equal 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', b
+end
+
+assert('String#inspect', '15.2.10.5.46') do
+  assert_equal "\"\\x00\"", "\0".inspect
+  assert_equal "\"foo\"", "foo".inspect
+  if UTF8STRING
+    assert_equal '"る"', "る".inspect
+  else
+    assert_equal '"\xe3\x82\x8b"', "る".inspect
+  end
+
+  # should not raise an exception - regress #1210
+  assert_nothing_raised do
+    ("\1" * 100).inspect
+  end
+end
+
+# Not ISO specified
+
+assert('String interpolation (mrb_str_concat for shared strings)') do
+  a = "A" * 32
+  assert_equal "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA:", "#{a}:"
+end
+
+assert('String#bytes') do
+  str1 = "hello"
+  bytes1 = [104, 101, 108, 108, 111]
+
+  str2 = "\xFF"
+  bytes2 = [0xFF]
+
+  assert_equal bytes1, str1.bytes
+  assert_equal bytes2, str2.bytes
+end
+
+assert('String#each_byte') do
+  str1 = "hello"
+  bytes1 = [104, 101, 108, 108, 111]
+  bytes2 = []
+
+  str1.each_byte {|b| bytes2 << b }
+
+  assert_equal bytes1, bytes2
+end
+
+assert('String#freeze') do
+  str = "hello"
+  str.freeze
+
+  assert_raise(FrozenError) { str.upcase! }
+end
+
+assert('String literal concatenation') do
+  assert_equal 2, ("A" "B").size
+  assert_equal 3, ('A' "B" 'C').size
+  assert_equal 4, (%(A) "B#{?C}" "D").size
+end
+
+assert('String#getbyte') do
+  str1 = "hello"
+  bytes1 = [104, 101, 108, 108, 111]
+  assert_equal bytes1[0], str1.getbyte(0)
+  assert_equal bytes1[-1], str1.getbyte(-1)
+  assert_equal bytes1[6], str1.getbyte(6)
+
+  str2 = "\xFF"
+  bytes2 = [0xFF]
+  assert_equal bytes2[0], str2.getbyte(0)
+end
+
+assert('String#setbyte') do
+  str1 = "hello"
+  h = "H".getbyte(0)
+  str1.setbyte(0, h)
+  assert_equal(h, str1.getbyte(0))
+  assert_equal("Hello", str1)
+end
+
+assert('String#byteslice') do
+  str1 = "hello"
+  str2 = "\u3042ab"  # "\xE3\x81\x82ab"
+
+  assert_equal("h", str1.byteslice(0))
+  assert_equal("e", str1.byteslice(1))
+  assert_equal(nil, str1.byteslice(5))
+  assert_equal("o", str1.byteslice(-1))
+  assert_equal(nil, str1.byteslice(-6))
+  assert_equal("\xE3", str2.byteslice(0))
+  assert_equal("\x81", str2.byteslice(1))
+  assert_equal(nil, str2.byteslice(5))
+  assert_equal("b", str2.byteslice(-1))
+  assert_equal(nil, str2.byteslice(-6))
+
+  assert_equal("", str1.byteslice(0, 0))
+  assert_equal(str1, str1.byteslice(0, 6))
+  assert_equal("el", str1.byteslice(1, 2))
+  assert_equal("", str1.byteslice(5, 1))
+  assert_equal("o", str1.byteslice(-1, 6))
+  assert_equal(nil, str1.byteslice(-6, 1))
+  assert_equal(nil, str1.byteslice(0, -1))
+  assert_equal("", str2.byteslice(0, 0))
+  assert_equal(str2, str2.byteslice(0, 6))
+  assert_equal("\x81\x82", str2.byteslice(1, 2))
+  assert_equal("", str2.byteslice(5, 1))
+  assert_equal("b", str2.byteslice(-1, 6))
+  assert_equal(nil, str2.byteslice(-6, 1))
+  assert_equal(nil, str2.byteslice(0, -1))
+
+  assert_equal("ell", str1.byteslice(1..3))
+  assert_equal("el", str1.byteslice(1...3))
+  assert_equal("h", str1.byteslice(0..0))
+  assert_equal("", str1.byteslice(5..0))
+  assert_equal("o", str1.byteslice(4..5))
+  assert_equal(nil, str1.byteslice(6..0))
+  assert_equal("", str1.byteslice(-1..0))
+  assert_equal("llo", str1.byteslice(-3..5))
+  assert_equal("\x81\x82a", str2.byteslice(1..3))
+  assert_equal("\x81\x82", str2.byteslice(1...3))
+  assert_equal("\xE3", str2.byteslice(0..0))
+  assert_equal("", str2.byteslice(5..0))
+  assert_equal("b", str2.byteslice(4..5))
+  assert_equal(nil, str2.byteslice(6..0))
+  assert_equal("", str2.byteslice(-1..0))
+  assert_equal("\x82ab", str2.byteslice(-3..5))
+
+  assert_raise(ArgumentError) { str1.byteslice }
+  assert_raise(ArgumentError) { str1.byteslice(1, 2, 3) }
+  assert_raise(TypeError) { str1.byteslice("1") }
+  assert_raise(TypeError) { str1.byteslice("1", 2) }
+  assert_raise(TypeError) { str1.byteslice(1, "2") }
+  assert_raise(TypeError) { str1.byteslice(1..2, 3) }
+
+  skip unless Object.const_defined?(:Float)
+  assert_equal("o", str1.byteslice(4.0))
+  assert_equal("\x82ab", str2.byteslice(2.0, 3.0))
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/test/t/superclass.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/test/t/superclass.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/test/t/superclass.rb	(revision 439)
@@ -0,0 +1,47 @@
+[
+  # [:Object, :implementation_defined_value, '15.2.2.1'],
+  [:Module, :Object, '15.2.2.2'],
+  [:Class, :Module, '15.2.3.2'],
+  [:NilClass, :Object, '15.2.4.2'],
+  [:TrueClass, :Object, '15.2.5.2'],
+  [:FalseClass, :Object, '15.2.6.2'],
+  [:Numeric, :Object, '15.2.7.2'],
+  [:Integer, :Numeric, '15.2.8.2'],
+  [:Float, :Numeric, '15.2.9.2'],
+  [:String, :Object, '15.2.10.2'],
+  [:Symbol, :Object, '15.2.11.2'],
+  [:Array, :Object, '15.2.12.2'],
+  [:Hash, :Object, '15.2.13.2'],
+  [:Range, :Object, '15.2.14.2'],
+#  [:Regexp, :Object, '15.2.15.2'],      #No Regexp in mruby core
+#  [:MatchData, :Object, '15.2.16.2'],
+  [:Proc, :Object, '15.2.17.2'],
+#  [:Struct, :Object, '15.2.18.2'],
+#  [:Time, :Object, '15.2.19.2'],
+#  [:IO, :Object, '15.2.20.2'],
+#  [:File, :IO, '15.2.21.2'],
+  [:Exception, :Object, '15.2.22.2'],
+  [:StandardError, :Exception, '15.2.23.2'],
+  [:ArgumentError, :StandardError, '15.2.24.2'],
+  # [:LocalJumpError, :StandardError, '15.2.25.2'],
+  [:LocalJumpError, :ScriptError, '15.2.25.2'], # mruby specific
+  [:RangeError, :StandardError, '12.2.26.2'],
+  [:RegexpError, :StandardError, '12.2.27.2'],
+  [:RuntimeError, :StandardError, '12.2.28.2'],
+  [:TypeError, :StandardError, '12.2.29.2'],
+#  [:ZeroDivisionError, :StandardError, '12.2.30.2'],  # No ZeroDivisionError in mruby
+  [:NameError, :StandardError, '15.2.31.2'],
+  [:NoMethodError, :NameError, '15.2.32.2'],
+  [:IndexError, :StandardError, '15.2.33.2'],
+#  [:IOError, :StandardError, '12.2.34.2'],
+#  [:EOFError, :IOError, '12.2.35.2'],
+#  [:SystemCallError, :StandardError, '15.2.36.2'],
+  [:ScriptError, :Exception, '12.2.37.2'],
+  [:SyntaxError, :ScriptError, '12.2.38.2'],
+#  [:LoadError, :ScriptError, '12.2.39,2'],
+].each do |cls, super_cls, iso|
+  assert "Direct superclass of #{cls}", iso do
+    skip "#{cls} isn't defined" unless Object.const_defined? cls
+    assert_equal Object.const_get(super_cls), Object.const_get(cls).superclass
+  end
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/test/t/symbol.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/test/t/symbol.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/test/t/symbol.rb	(revision 439)
@@ -0,0 +1,34 @@
+##
+# Symbol ISO Test
+
+assert('Symbol') do
+  assert_equal :"a", :a
+  assert_equal :"a#{1}", :a1
+  assert_equal :'a', :a
+  assert_equal :'a#{1}', :"a\#{1}"
+end
+
+assert('Symbol', '15.2.11') do
+  assert_equal Class, Symbol.class
+end
+
+assert('Symbol#===', '15.2.11.3.1') do
+  assert_true :abc === :abc
+  assert_false :abc === :cba
+end
+
+assert('Symbol#id2name', '15.2.11.3.2') do
+  assert_equal 'abc', :abc.id2name
+end
+
+assert('Symbol#to_s', '15.2.11.3.3') do
+  assert_equal  'abc', :abc.to_s
+end
+
+assert('Symbol#to_sym', '15.2.11.3.4') do
+  assert_equal :abc, :abc.to_sym
+end
+
+assert('Symbol#to_proc') do
+  assert_equal 5, :abs.to_proc[-5]
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/test/t/syntax.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/test/t/syntax.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/test/t/syntax.rb	(revision 439)
@@ -0,0 +1,683 @@
+assert('__FILE__') do
+  file = __FILE__[-9, 9]
+  assert_equal 'syntax.rb', file
+end
+
+assert('__LINE__') do
+  assert_equal 7, __LINE__
+end
+
+assert('super', '11.3.4') do
+  assert_raise NoMethodError do
+    super
+  end
+
+  class SuperFoo
+    def foo
+      true
+    end
+    def bar(*a)
+      a
+    end
+  end
+  class SuperBar < SuperFoo
+    def foo
+      super
+    end
+    def bar(*a)
+      super(*a)
+    end
+  end
+  bar = SuperBar.new
+
+  assert_true bar.foo
+  assert_equal [1,2,3], bar.bar(1,2,3)
+end
+
+assert('yield', '11.3.5') do
+  assert_raise LocalJumpError do
+    yield
+  end
+  assert_raise LocalJumpError do
+    o = Object.new
+    def o.foo
+      yield
+    end
+    o.foo
+  end
+end
+
+assert('redo in a for loop (#3275)') do
+  sum = 0
+  for i in 1..10
+    sum += i
+    i -= 1
+    if i > 0
+      redo
+    end
+  end
+
+  assert_equal 220, sum
+end
+
+assert('Abbreviated variable assignment', '11.4.2.3.2') do
+  a ||= 1
+  b &&= 1
+  c = 1
+  c += 2
+
+  assert_equal 1, a
+  assert_nil b
+  assert_equal 3, c
+end
+
+assert('case expression', '11.5.2.2.4') do
+  # case-expression-with-expression, one when-clause
+  x = 0
+  case "a"
+  when "a"
+    x = 1
+  end
+  assert_equal 1, x
+
+  # case-expression-with-expression, multiple when-clauses
+  x = 0
+  case "b"
+  when "a"
+    x = 1
+  when "b"
+    x = 2
+  end
+  assert_equal 2, x
+
+  # no matching when-clause
+  x = 0
+  case "c"
+  when "a"
+    x = 1
+  when "b"
+    x = 2
+  end
+  assert_equal 0, x
+
+  # case-expression-with-expression, one when-clause and one else-clause
+  a = 0
+  case "c"
+  when "a"
+    x = 1
+  else
+    x = 3
+  end
+  assert_equal 3, x
+
+  # case-expression-without-expression, one when-clause
+  x = 0
+  case
+  when true
+    x = 1
+  end
+  assert_equal 1, x
+
+  # case-expression-without-expression, multiple when-clauses
+  x = 0
+  case
+  when 0 == 1
+    x = 1
+  when 1 == 1
+    x = 2
+  end
+  assert_equal 2, x
+
+  # case-expression-without-expression, one when-clause and one else-clause
+  x = 0
+  case
+  when 0 == 1
+    x = 1
+  else
+    x = 3
+  end
+  assert_equal 3, x
+
+  # multiple when-arguments
+  x = 0
+  case 4
+  when 1, 3, 5
+    x = 1
+  when 2, 4, 6
+    x = 2
+  end
+  assert_equal 2, x
+
+  # when-argument with splatting argument
+  x = :integer
+  odds  = [ 1, 3, 5, 7, 9 ]
+  evens = [ 2, 4, 6, 8 ]
+  case 5
+  when *odds
+    x = :odd
+  when *evens
+    x = :even
+  end
+  assert_equal :odd, x
+
+  true
+end
+
+assert('Nested const reference') do
+  module Syntax4Const
+    CONST1 = "hello world"
+    class Const2
+      def const1
+        CONST1
+      end
+    end
+  end
+  assert_equal "hello world", Syntax4Const::CONST1
+  assert_equal "hello world", Syntax4Const::Const2.new.const1
+end
+
+assert('Abbreviated variable assignment as returns') do
+  module Syntax4AbbrVarAsgnAsReturns
+    class A
+      def b
+        @c ||= 1
+      end
+    end
+  end
+  assert_equal 1, Syntax4AbbrVarAsgnAsReturns::A.new.b
+end
+
+assert('Splat and multiple assignment') do
+  *a = *[1,2,3]
+  b, *c = *[7,8,9]
+
+  assert_equal [1,2,3], a
+  assert_equal 7, b
+  assert_equal [8,9], c
+
+  (a, b), c = [1,2],3
+  assert_equal [1,2,3], [a,b,c]
+  (a, b), c = 1,2,3
+  assert_equal [1,nil,2], [a,b,c]
+end
+
+assert('Splat and multiple assignment from variable') do
+  a = [1, 2, 3]
+  b, *c = a
+
+  assert_equal 1, b
+  assert_equal [2, 3], c
+end
+
+assert('Splat and multiple assignment from variables') do
+  a = [1, 2, 3]
+  b = [4, 5, 6, 7]
+  c, d, *e, f, g = *a, *b
+
+  assert_equal 1, c
+  assert_equal 2, d
+  assert_equal [3, 4, 5], e
+  assert_equal 6, f
+  assert_equal 7, g
+end
+
+assert('Splat and multiple assignment in for') do
+  a = [1, 2, 3, 4, 5, 6, 7]
+  for b, c, *d, e, f in [a] do
+  end
+
+  assert_equal 1, b
+  assert_equal 2, c
+  assert_equal [3, 4, 5], d
+  assert_equal 6, e
+  assert_equal 7, f
+end
+
+assert('Splat without assignment') do
+  * = [0]
+  a, * = [1, 2]
+  assert_equal 1, a
+end
+
+assert('multiple assignment (rest)') do
+  *a = 0
+  assert_equal [0], a
+end
+
+assert('multiple assignment (rest+post)') do
+  *a, b = 0, 1, 2
+  *c, d = 3
+
+  assert_equal [0, 1], a
+  assert_equal 2, b
+  assert_equal [], c
+  assert_equal 3, d
+end
+
+assert('multiple assignment (nosplat array rhs)') do
+  a, *b = []
+  *c, d = [0]
+  e, *f, g = [1, 2]
+
+  assert_nil a
+  assert_equal [], b
+  assert_equal [], c
+  assert_equal 0, d
+  assert_equal 1, e
+  assert_equal [], f
+  assert_equal 2, g
+end
+
+assert('multiple assignment (empty array rhs #3236, #3239)') do
+  a,b,*c = []; assert_equal [nil, nil, []], [a, b, c]
+  a,b,*c = [1]; assert_equal [1, nil, []], [a, b, c]
+  a,b,*c = [nil]; assert_equal [nil,nil, []], [a, b, c]
+  a,b,*c = [[]]; assert_equal [[], nil, []], [a, b, c]
+end
+
+assert('Return values of case statements') do
+  a = [] << case 1
+  when 3 then 2
+  when 2 then 2
+  when 1 then 2
+  end
+
+  b = [] << case 1
+  when 2 then 2
+  else
+  end
+
+  def fb
+    n = 0
+    Proc.new do
+      n += 1
+      case
+      when n % 15 == 0
+      else n
+      end
+    end
+  end
+
+  assert_equal [2], a
+  assert_equal [nil], b
+  assert_equal 1, fb.call
+end
+
+assert('Return values of if and case statements') do
+  true_clause_value =
+    if true
+      1
+    else
+      case 2
+      when 3
+      end
+      4
+    end
+
+  assert_equal 1, true_clause_value
+end
+
+assert('Return values of no expression case statement') do
+  when_value =
+    case
+    when true
+      1
+    end
+
+  assert_equal 1, when_value
+end
+
+assert('splat object in assignment') do
+  o = Object.new
+  def o.to_a
+    nil
+  end
+  assert_equal [o], (a = *o)
+
+  def o.to_a
+    1
+  end
+  assert_raise(TypeError) { a = *o }
+
+  def o.to_a
+    [2]
+  end
+  assert_equal [2], (a = *o)
+end
+
+assert('splat object in case statement') do
+  o = Object.new
+  def o.to_a
+    nil
+  end
+  a = case o
+  when *o
+    1
+  end
+  assert_equal 1, a
+end
+
+assert('splat in case statement') do
+  values = [3,5,1,7,8]
+  testa = [1,2,7]
+  testb = [5,6]
+  resulta = []
+  resultb = []
+  resultc = []
+  values.each do |value|
+    case value
+    when *testa
+      resulta << value
+    when *testb
+      resultb << value
+    else
+      resultc << value
+    end
+  end
+
+  assert_equal [1,7], resulta
+  assert_equal [5], resultb
+  assert_equal [3,8], resultc
+end
+
+assert('External command execution.') do
+  module Kernel
+    sym = '`'.to_sym
+    alias_method :old_cmd, sym
+
+    results = []
+    define_method(sym) do |str|
+      results.push str
+      str
+    end
+
+    `test` # NOVAL NODE_XSTR
+    `test dynamic #{sym}` # NOVAL NODE_DXSTR
+    assert_equal ['test', 'test dynamic `'], results
+
+    t = `test` # VAL NODE_XSTR
+    assert_equal 'test', t
+    assert_equal ['test', 'test dynamic `', 'test'], results
+
+    t = `test dynamic #{sym}` # VAL NODE_DXSTR
+    assert_equal 'test dynamic `', t
+    assert_equal ['test', 'test dynamic `', 'test', 'test dynamic `'], results
+
+    results = []
+    assert_equal 'test sym test sym test', `test #{:sym} test #{:sym} test`
+
+    alias_method sym, :old_cmd
+  end
+  true
+end
+
+assert('parenthesed do-block in cmdarg') do
+  class ParenDoBlockCmdArg
+    def test(block)
+      block.call
+    end
+  end
+  x = ParenDoBlockCmdArg.new
+  result = x.test (Proc.new do :ok; end)
+  assert_equal :ok, result
+end
+
+assert('method definition in cmdarg') do
+  result = class MethodDefinitionInCmdarg
+    def self.bar(arg); arg end
+    bar def foo; self.each do end end
+  end
+  assert_equal(:foo, result)
+end
+
+assert('optional argument in the rhs default expressions') do
+  class OptArgInRHS
+    def foo
+      "method called"
+    end
+    def t(foo = foo)
+      foo
+    end
+    def t2(foo = foo())
+      foo
+    end
+  end
+  o = OptArgInRHS.new
+  assert_nil(o.t)
+  assert_equal("method called", o.t2)
+end
+
+assert('optional block argument in the rhs default expressions') do
+  assert_nil(Proc.new {|foo = foo| foo}.call)
+end
+
+assert('local variable definition in default value and subsequent arguments') do
+  def m(a = b = 1, c) [a, b, c] end
+  assert_equal([1, 1, :c], m(:c))
+  assert_equal([:a, nil, :c], m(:a, :c))
+
+  def m(a = b = 1, &c) [a, b, c ? true : nil] end
+  assert_equal([1, 1, nil], m)
+  assert_equal([1, 1, true], m{})
+  assert_equal([:a, nil, nil], m(:a))
+  assert_equal([:a, nil, true], m(:a){})
+end
+
+assert('multiline comments work correctly') do
+=begin
+this is a comment with nothing after begin and end
+=end
+=begin  this is a comment
+this is a comment with extra after =begin
+=end
+=begin
+this is a comment that has =end with spaces after it
+=end
+=begin this is a comment
+this is a comment that has extra after =begin and =end with spaces after it
+=end
+  line = __LINE__
+=begin	this is a comment
+this is a comment that has extra after =begin and =end with tabs after it
+=end	xxxxxxxxxxxxxxxxxxxxxxxxxx
+  assert_equal(line + 4, __LINE__)
+end
+
+assert 'keyword arguments' do
+  def m(a, b:1) [a, b] end
+  assert_equal [1, 1], m(1)
+  assert_equal [1, 2], m(1, b: 2)
+
+  def m(a, b:) [a, b] end
+  assert_equal [1, 2], m(1, b: 2)
+  assert_raise(ArgumentError) { m b: 1 }
+  assert_raise(ArgumentError) { m 1 }
+
+  def m(a:) a end
+  assert_equal 1, m(a: 1)
+  assert_raise(ArgumentError) { m }
+  assert_raise(ArgumentError) { m 'a'  => 1, a: 1 }
+  h = { a: 1 }
+  assert_equal 1, m(h)
+  assert_equal({ a: 1 }, h)
+
+  def m(a: 1) a end
+  assert_equal 1, m
+  assert_equal 2, m(a: 2)
+  assert_raise(ArgumentError) { m 1 }
+
+  def m(**) end
+  assert_nil m
+  assert_nil m a: 1, b: 2
+  assert_raise(ArgumentError) { m 2 }
+
+  def m(a, **) a end
+  assert_equal 1, m(1)
+  assert_equal 1, m(1, a: 2, b: 3)
+  assert_equal({ 'a' => 1, b: 2 }, m('a' => 1, b: 2))
+
+  def m(a, **k) [a, k] end
+  assert_equal [1, {}], m(1)
+  assert_equal [1, {a: 2, b: 3}], m(1, a: 2, b: 3)
+  assert_equal [{'a' => 1, b: 2}, {}], m('a' => 1, b: 2)
+
+  def m(a=1, **) a end
+  assert_equal 1, m
+  assert_equal 2, m(2, a: 1, b: 0)
+  assert_raise(ArgumentError) { m('a' => 1, a: 2) }
+
+  def m(a=1, **k) [a, k] end
+  assert_equal [1, {}], m
+  assert_equal [1, {a: 1}], m(a: 1)
+  assert_equal [2, {a: 1, b: 2}], m(2, a: 1, b: 2)
+  assert_equal [{a: 1}, {b: 2}], m({a: 1}, {b: 2})
+
+  def m(*, a:) a end
+  assert_equal 1, m(a: 1)
+  assert_equal 3, m(1, 2, a: 3)
+  assert_raise(ArgumentError) { m('a' => 1, a: 2) }
+
+  def m(*a, b:) [a, b] end
+  assert_equal [[], 1], m(b: 1)
+  assert_equal [[1, 2], 3], m(1, 2, b: 3)
+  assert_raise(ArgumentError) { m('a' => 1, b: 2) }
+
+  def m(*a, b: 1) [a, b] end
+  assert_equal [[], 1], m
+  assert_equal [[1, 2, 3], 4], m(1, 2, 3, b: 4)
+  assert_raise(ArgumentError) { m('a' => 1, b: 2) }
+
+  def m(*, **) end
+  assert_nil m()
+  assert_nil m(a: 1, b: 2)
+  assert_nil m(1, 2, 3, a: 4, b: 5)
+
+  def m(*a, **) a end
+  assert_equal [], m()
+  assert_equal [1, 2, 3], m(1, 2, 3, a: 4, b: 5)
+  assert_raise(ArgumentError) { m("a" => 1, a: 1) }
+  assert_equal [1], m(1, **{a: 2})
+
+  def m(*, **k) k end
+  assert_equal({}, m())
+  assert_equal({a: 4, b: 5}, m(1, 2, 3, a: 4, b: 5))
+  assert_raise(ArgumentError) { m("a" => 1, a: 1) }
+
+  def m(a = nil, b = nil, **k) [a, k] end
+  assert_equal [nil, {}], m()
+  assert_equal([nil, {a: 1}], m(a: 1))
+  assert_raise(ArgumentError) { m("a" => 1, a: 1) }
+  assert_equal([{"a" => 1}, {a: 1}], m({ "a" => 1 }, a: 1))
+  assert_equal([{a: 1}, {}], m({a: 1}, {}))
+  assert_equal([nil, {}], m({}))
+
+  def m(*a, **k) [a, k] end
+  assert_equal([[], {}], m())
+  assert_equal([[1], {}], m(1))
+  assert_equal([[], {a: 1, b: 2}], m(a: 1, b: 2))
+  assert_equal([[1, 2, 3], {a: 2}], m(1, 2, 3, a: 2))
+  assert_raise(ArgumentError) { m("a" => 1, a: 1) }
+  assert_raise(ArgumentError) { m("a" => 1) }
+  assert_equal([[], {a: 1}], m(a: 1))
+  assert_raise(ArgumentError) { m("a" => 1, a: 1) }
+  assert_equal([[{"a" => 1}], {a: 1}], m({ "a" => 1 }, a: 1))
+  assert_equal([[{a: 1}], {}], m({a: 1}, {}))
+  assert_raise(ArgumentError) { m({a: 1}, {"a" => 1}) }
+
+  def m(a:, b:) [a, b] end
+  assert_equal([1, 2], m(a: 1, b: 2))
+  assert_raise(ArgumentError) { m("a" => 1, a: 1, b: 2) }
+
+  def m(a:, b: 1) [a, b] end
+  assert_equal([1, 1], m(a: 1))
+  assert_equal([1, 2], m(a: 1, b: 2))
+  assert_raise(ArgumentError) { m("a" => 1, a: 1, b: 2) }
+
+  def m(a:, **) a end
+  assert_equal(1, m(a: 1))
+  assert_equal(1, m(a: 1, b: 2))
+  assert_raise(ArgumentError) { m("a" => 1, a: 1, b: 2) }
+
+  def m(a:, **k) [a, k] end
+  assert_equal([1, {}], m(a: 1))
+  assert_equal([1, {b: 2, c: 3}], m(a: 1, b: 2, c: 3))
+  assert_raise(ArgumentError) { m("a" => 1, a: 1, b: 2) }
+
+=begin
+  def m(a:, &b) [a, b] end
+  assert_equal([1, nil], m(a: 1))
+  assert_equal([1, l], m(a: 1, &(l = ->{})))
+=end
+
+  def m(a: 1, b:) [a, b] end
+  assert_equal([1, 0], m(b: 0))
+  assert_equal([3, 2], m(b: 2, a: 3))
+  assert_raise(ArgumentError) { m a: 1 }
+
+  def m(a: def m(a: 1) a end, b:)
+    [a, b]
+  end
+  assert_equal([2, 3], m(a: 2, b: 3))
+  assert_equal([:m, 1], m(b: 1))
+  # Note the default value of a: in the original method.
+  assert_equal(1, m())
+
+  def m(a: 1, b: 2) [a, b] end
+  assert_equal([1, 2], m())
+  assert_equal([4, 3], m(b: 3, a: 4))
+
+  def m(a: 1, **) a end
+  assert_equal(1, m())
+  assert_equal(2, m(a: 2, b: 1))
+
+  def m(a: 1, **k) [a, k] end
+  assert_equal([1, {b: 2, c: 3}], m(b: 2, c: 3))
+
+  def m(a:, **) yield end
+  assert_raise(ArgumentError) { m { :blk } }
+  assert_equal :blk, m(a: 1){ :blk }
+
+  def m(a:, **k, &b) [b.call, k] end
+  assert_raise(ArgumentError) { m { :blk } }
+  assert_equal [:blk, {b: 2}], m(a: 1, b: 2){ :blk }
+
+  def m(**k, &b) [k, b] end
+  assert_equal([{ a: 1, b: 2}, nil], m(a: 1, b: 2))
+  assert_equal :blk, m{ :blk }[1].call
+
+  def m(hsh = {}) hsh end
+  assert_equal({ a: 1, b: 2 }, m(a: 1, b: 2))
+  assert_equal({ a: 1, 'b' => 2 }, m(a: 1, 'b' => 2))
+
+  def m(hsh) hsh end
+  assert_equal({ a: 1, b: 2 }, m(a: 1, b: 2))
+  assert_equal({ a: 1, 'b' => 2 }, m(a: 1, 'b' => 2))
+
+=begin
+  def m(a, b=1, *c, (*d, (e)), f: 2, g:, h:, **k, &l)
+    [a, b, c, d, e, f, g, h, k, l]
+  end
+  result = m(9, 8, 7, 6, f: 5, g: 4, h: 3, &(l = ->{}))
+  assert_equal([9, 8, [7], [], 6, 5, 4, 3, {}, l], result)
+
+  def m a, b=1, *c, d, e:, f: 2, g:, **k, &l
+    [a, b, c, d, e, f, g, k, l]
+  end
+  result = m(1, 2, e: 3, g: 4, h: 5, i: 6, &(l = ->{}))
+  assert_equal([1, 1, [], 2, 3, 2, 4, { h: 5, i: 6 }, l], result)
+=end
+
+  def m(a: b = 1, c:) [a, b, c] end
+  assert_equal([1, 1, :c], m(c: :c))
+  assert_equal([:a, nil, :c], m(a: :a, c: :c))
+end
+
+assert('numbered parameters') do
+  assert_equal(15, [1,2,3,4,5].reduce {_1+_2})
+  assert_equal(45, Proc.new do _1 + _2 + _3 + _4 + _5 + _6 + _7 + _8 + _9 end.call(*[1, 2, 3, 4, 5, 6, 7, 8, 9]))
+end
+
+assert('_0 is not numbered parameter') do
+  _0 = :l
+  assert_equal(:l, ->{_0}.call)
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/test/t/true.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/test/t/true.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/test/t/true.rb	(revision 439)
@@ -0,0 +1,31 @@
+##
+# TrueClass ISO Test
+
+assert('TrueClass', '15.2.5') do
+  assert_equal Class, TrueClass.class
+end
+
+assert('TrueClass true', '15.2.5.1') do
+  assert_true true
+  assert_equal TrueClass, true.class
+  assert_false TrueClass.method_defined? :new
+end
+
+assert('TrueClass#&', '15.2.5.3.1') do
+  assert_true true.&(true)
+  assert_false true.&(false)
+end
+
+assert('TrueClass#^', '15.2.5.3.2') do
+  assert_false true.^(true)
+  assert_true true.^(false)
+end
+
+assert('TrueClass#to_s', '15.2.5.3.3') do
+  assert_equal 'true', true.to_s
+end
+
+assert('TrueClass#|', '15.2.5.3.4') do
+  assert_true true.|(true)
+  assert_true true.|(false)
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/test/t/typeerror.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/test/t/typeerror.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/test/t/typeerror.rb	(revision 439)
@@ -0,0 +1,6 @@
+##
+# TypeError ISO Test
+
+assert('TypeError', '15.2.29') do
+  assert_equal Class, TypeError.class
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/test/t/unicode.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/test/t/unicode.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/test/t/unicode.rb	(revision 439)
@@ -0,0 +1,39 @@
+# Test of the \u notation
+
+assert('bare \u notation test') do
+  # Mininum and maximum one byte characters
+  assert_equal("\x00", "\u0000")
+  assert_equal("\x7F", "\u007F")
+
+  # Mininum and maximum two byte characters
+  assert_equal("\xC2\x80", "\u0080")
+  assert_equal("\xDF\xBF", "\u07FF")
+
+  # Mininum and maximum three byte characters
+  assert_equal("\xE0\xA0\x80", "\u0800")
+  assert_equal("\xEF\xBF\xBF", "\uFFFF")
+
+  # Four byte characters require the \U notation
+end
+
+assert('braced \u notation test') do
+  # Mininum and maximum one byte characters
+  assert_equal("\x00", "\u{0000}")
+  assert_equal("\x7F", "\u{007F}")
+
+  # Mininum and maximum two byte characters
+  assert_equal("\xC2\x80", "\u{0080}")
+  assert_equal("\xDF\xBF", "\u{07FF}")
+
+  # Mininum and maximum three byte characters
+  assert_equal("\xE0\xA0\x80", "\u{0800}")
+  assert_equal("\xEF\xBF\xBF", "\u{FFFF}")
+
+  # Mininum and maximum four byte characters
+  assert_equal("\xF0\x90\x80\x80", "\u{10000}")
+  assert_equal("\xF4\x8F\xBF\xBF", "\u{10FFFF}")
+end
+
+assert('braced multiple \u notation test') do
+  assert_equal("ABC", "\u{41 42 43}")
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/test/t/vformat.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/test/t/vformat.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/test/t/vformat.rb	(revision 439)
@@ -0,0 +1,58 @@
+# coding: utf-8-emacs
+def sclass(v)
+  class << v
+    self
+  end
+end
+
+assert('mrb_vformat') do
+  vf = TestVFormat
+  assert_equal '', vf.z('')
+  assert_equal 'No specifier!', vf.z('No specifier!')
+  assert_equal '`c`: C', vf.c('`c`: %c', ?C)
+  assert_equal '`d`: 123', vf.d('`d`: %d', 123)
+  assert_equal '`d`: -79', vf.d('`d`: %d', -79)
+  assert_equal '`i`: 514', vf.i('`i`: %i', 514)
+  assert_equal '`i`: -83', vf.i('`i`: %i', -83)
+  assert_equal '`t`: NilClass', vf.v('`t`: %t', nil)
+  assert_equal '`t`: FalseClass', vf.v('`t`: %t', false)
+  assert_equal '`t`: TrueClass', vf.v('`t`: %t', true)
+  assert_equal '`t`: Fixnum', vf.v('`t`: %t', 0)
+  assert_equal '`t`: Hash', vf.v('`t`: %t', {k: "value"})
+  assert_match '#<Class:#<Class:#<Hash:0x*>>>', vf.v('%t', sclass({}))
+  assert_equal 'string and length', vf.l('string %l length', 'andante', 3)
+  assert_equal '`n`: sym', vf.n('`n`: %n', :sym)
+  assert_equal '%Cæå­åõº%', vf.s('%s', '%Cæå­åõº%')
+  assert_equal '`C`: Kernel module', vf.C('`C`: %C module', Kernel)
+  assert_equal '`C`: NilClass', vf.C('`C`: %C', nil.class)
+  assert_match '#<Class:#<String:0x*>>', vf.C('%C', sclass(""))
+  assert_equal '`T`: NilClass', vf.v('`T`: %T', nil)
+  assert_equal '`T`: FalseClass', vf.v('`T`: %T', false)
+  assert_equal '`T`: TrueClass', vf.v('`T`: %T', true)
+  assert_equal '`T`: Fixnum', vf.v('`T`: %T', 0)
+  assert_equal '`T`: Hash', vf.v('`T`: %T', {k: "value"})
+  assert_match 'Class', vf.v('%T', sclass({}))
+  assert_equal '`Y`: nil', vf.v('`Y`: %Y', nil)
+  assert_equal '`Y`: false', vf.v('`Y`: %Y', false)
+  assert_equal '`Y`: true', vf.v('`Y`: %Y', true)
+  assert_equal '`Y`: Fixnum', vf.v('`Y`: %Y', 0)
+  assert_equal '`Y`: Hash', vf.v('`Y`: %Y', {k: "value"})
+  assert_equal 'Class', vf.v('%Y', sclass({}))
+  assert_match '#<Class:#<String:0x*>>', vf.v('%v', sclass(""))
+  assert_equal '`v`: 1...3', vf.v('`v`: %v', 1...3)
+  assert_equal '`S`: {:a=>1, "b"=>"c"}', vf.v('`S`: %S', {a: 1, "b" => ?c})
+  assert_equal 'percent: %', vf.z('percent: %%')
+  assert_equal '"I": inspect char', vf.c('%!c: inspect char', ?I)
+  assert_equal '709: inspect mrb_int', vf.i('%!d: inspect mrb_int', 709)
+  assert_equal '"a\x00b\xff"', vf.l('%!l', "a\000b\xFFc\000d", 4)
+  assert_equal ':"&.": inspect symbol', vf.n('%!n: inspect symbol', :'&.')
+  assert_equal 'inspect "String"', vf.v('inspect %!v', 'String')
+  assert_equal 'inspect Array: [1, :x, {}]', vf.v('inspect Array: %!v', [1,:x,{}])
+  assert_match '`!C`: #<Class:0x*>', vf.C('`!C`: %!C', Class.new)
+  assert_equal 'escape: \\%a,b,c,d', vf.v('escape: \\\\\%a,b,\c%v', ',d')
+
+  skip unless Object.const_defined?(:Float)
+  assert_equal '`f`: 0.0125', vf.f('`f`: %f', 0.0125)
+  assert_equal '-Infinity', vf.f('%f', -Float::INFINITY)
+  assert_equal 'NaN: Not a Number', vf.f('%f: Not a Number', Float::NAN)
+end
Index: /EcnlProtoTool/trunk/mruby-2.1.1/travis_config.rb
===================================================================
--- /EcnlProtoTool/trunk/mruby-2.1.1/travis_config.rb	(revision 439)
+++ /EcnlProtoTool/trunk/mruby-2.1.1/travis_config.rb	(revision 439)
@@ -0,0 +1,40 @@
+MRuby::Build.new('full-debug') do |conf|
+  toolchain :gcc
+  enable_debug
+
+  # include all core GEMs
+  conf.gembox 'full-core'
+  conf.cc.flags += %w(-Werror=declaration-after-statement)
+  conf.cc.defines += %w(MRB_GC_STRESS MRB_METHOD_CACHE MRB_ENABLE_DEBUG_HOOK)
+
+  conf.enable_test
+end
+
+MRuby::Build.new do |conf|
+  toolchain :gcc
+
+  # include all core GEMs
+  conf.gembox 'full-core'
+  conf.cc.flags += %w(-Werror=declaration-after-statement)
+  conf.compilers.each do |c|
+    c.defines += %w(MRB_GC_FIXED_ARENA)
+  end
+  conf.enable_bintest
+  conf.enable_test
+end
+
+MRuby::Build.new('cxx_abi') do |conf|
+  toolchain :gcc
+
+  conf.gembox 'full-core'
+  conf.cc.flags += %w(-fpermissive)
+  conf.compilers.each do |c|
+    c.defines += %w(MRB_GC_FIXED_ARENA)
+  end
+  conf.enable_bintest
+  conf.enable_test
+
+  enable_cxx_abi
+
+  build_mrbc_exec
+end
Index: /EcnlProtoTool/trunk/ntshell/.cproject
===================================================================
--- /EcnlProtoTool/trunk/ntshell/.cproject	(revision 438)
+++ /EcnlProtoTool/trunk/ntshell/.cproject	(revision 439)
@@ -109,5 +109,5 @@
 									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/asp3_dcre/mbed/targets/hal/TARGET_RENESAS/TARGET_RZ_A1H}&quot;"/>
 									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/asp3_dcre/mbed/targets/hal/TARGET_RENESAS/TARGET_RZ_A1H/TARGET_MBED_MBRZA1H}&quot;"/>
-									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/mruby-1.3.0/include}&quot;"/>
+									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/mruby-2.1.1/include}&quot;"/>
 									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/asp3_dcre}&quot;"/>
 									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/ntshell/src}&quot;"/>
Index: /EcnlProtoTool/trunk/ntshell/src/fdtable.h
===================================================================
--- /EcnlProtoTool/trunk/ntshell/src/fdtable.h	(revision 438)
+++ /EcnlProtoTool/trunk/ntshell/src/fdtable.h	(revision 439)
@@ -1,6 +1,6 @@
 /*
- *  TOPPERS ECHONET Lite Communication Middleware
- * 
- *  Copyright (C) 2017 Cores Co., Ltd. Japan
+ *  TOPPERS PROJECT Home Network Working Group Software
+ * 
+ *  Copyright (C) 2017-2019 Cores Co., Ltd. Japan
  * 
  *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
Index: /EcnlProtoTool/trunk/ntshell/src/mbedcall.c
===================================================================
--- /EcnlProtoTool/trunk/ntshell/src/mbedcall.c	(revision 438)
+++ /EcnlProtoTool/trunk/ntshell/src/mbedcall.c	(revision 439)
@@ -1,6 +1,6 @@
 /*
- *  TOPPERS ECHONET Lite Communication Middleware
+ *  TOPPERS PROJECT Home Network Working Group Software
  * 
- *  Copyright (C) 2017 Cores Co., Ltd. Japan
+ *  Copyright (C) 2017-2019 Cores Co., Ltd. Japan
  * 
  *  ä¸è¨èä½æ¨©è
Index: /EcnlProtoTool/trunk/ntshell/src/shellif.h
===================================================================
--- /EcnlProtoTool/trunk/ntshell/src/shellif.h	(revision 438)
+++ /EcnlProtoTool/trunk/ntshell/src/shellif.h	(revision 439)
@@ -1,6 +1,6 @@
 /*
- *  TOPPERS ECHONET Lite Communication Middleware
- * 
- *  Copyright (C) 2017 Cores Co., Ltd. Japan
+ *  TOPPERS PROJECT Home Network Working Group Software
+ * 
+ *  Copyright (C) 2017-2019 Cores Co., Ltd. Japan
  * 
  *  ä¸è¨èä½æ¨©è
Index: /EcnlProtoTool/trunk/ntshell/src/socket_stub.c
===================================================================
--- /EcnlProtoTool/trunk/ntshell/src/socket_stub.c	(revision 438)
+++ /EcnlProtoTool/trunk/ntshell/src/socket_stub.c	(revision 439)
@@ -1,6 +1,6 @@
 /*
- *  TOPPERS ECHONET Lite Communication Middleware
+ *  TOPPERS PROJECT Home Network Working Group Software
  * 
- *  Copyright (C) 2017 Cores Co., Ltd. Japan
+ *  Copyright (C) 2017-2019 Cores Co., Ltd. Japan
  * 
  *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
Index: /EcnlProtoTool/trunk/ntshell/src/syscall.c
===================================================================
--- /EcnlProtoTool/trunk/ntshell/src/syscall.c	(revision 438)
+++ /EcnlProtoTool/trunk/ntshell/src/syscall.c	(revision 439)
@@ -1,6 +1,6 @@
 /*
- *  TOPPERS ECHONET Lite Communication Middleware
+ *  TOPPERS PROJECT Home Network Working Group Software
  * 
- *  Copyright (C) 2017 Cores Co., Ltd. Japan
+ *  Copyright (C) 2017-2019 Cores Co., Ltd. Japan
  * 
  *  ä¸è¨èä½æ¨©è
Index: /EcnlProtoTool/trunk/ntshell/src/tinet_main.cfg
===================================================================
--- /EcnlProtoTool/trunk/ntshell/src/tinet_main.cfg	(revision 438)
+++ /EcnlProtoTool/trunk/ntshell/src/tinet_main.cfg	(revision 439)
@@ -1,6 +1,6 @@
 /*
- *  TOPPERS ECHONET Lite Communication Middleware
+ *  TOPPERS PROJECT Home Network Working Group Software
  * 
- *  Copyright (C) 2014 Cores Co., Ltd. Japan
+ *  Copyright (C) 2017-2019 Cores Co., Ltd. Japan
  * 
  *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
Index: /EcnlProtoTool/trunk/onigmo-6.1.3/src/enc/utf_8.c
===================================================================
--- /EcnlProtoTool/trunk/onigmo-6.1.3/src/enc/utf_8.c	(revision 438)
+++ /EcnlProtoTool/trunk/onigmo-6.1.3/src/enc/utf_8.c	(revision 439)
@@ -418,5 +418,5 @@
   mbc_enc_len,
   "UTF-8",     /* name */
-  4,           /* max byte length */
+  6,           /* max byte length */
   1,           /* min byte length */
   is_mbc_newline,
Index: /EcnlProtoTool/trunk/prototool/.cproject
===================================================================
--- /EcnlProtoTool/trunk/prototool/.cproject	(revision 438)
+++ /EcnlProtoTool/trunk/prototool/.cproject	(revision 439)
@@ -81,5 +81,5 @@
 									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/musl-1.1.18/include}&quot;"/>
 									<listOptionValue builtIn="false" value="&quot;${workspace_loc:}/onigmo-6.1.3/src&quot;"/>
-									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/mruby-1.3.0/include}&quot;"/>
+									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/mruby-2.1.1/include}&quot;"/>
 									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/mbed_api/src}&quot;"/>
 									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/src}&quot;"/>
@@ -88,6 +88,7 @@
 								</option>
 								<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="ilg.gnuarmeclipse.managedbuild.cross.option.c.compiler.defs.165293534" name="Defined symbols (-D)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.c.compiler.defs" useByScannerDiscovery="true" valueType="definedSymbols">
-									<listOptionValue builtIn="false" value="MRB_GC_STRESS"/>
+									<listOptionValue builtIn="false" value="MRB_USE_CUSTOM_RO_DATA_P"/>
 									<listOptionValue builtIn="false" value="MRB_ENABLE_DEBUG_HOOK"/>
+									<listOptionValue builtIn="false" value="MRB_CONSTRAINED_BASELINE_PROFILE"/>
 									<listOptionValue builtIn="false" value="_DEFAULT_SOURCE"/>
 								</option>
@@ -149,5 +150,5 @@
 									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/onigmo-6.1.3/Debug}&quot;"/>
 									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/mbed_api/Debug}&quot;"/>
-									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/mruby-1.3.0/build/arm-none-eabi/lib}&quot;"/>
+									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/mruby-2.1.1/build/arm-none-eabi/lib}&quot;"/>
 									<listOptionValue builtIn="false" value="&quot;${TCINSTALL}/lib/gcc/arm-none-eabi/${GCC_VERSION}/thumb/v7-ar/fpv3/hard&quot;"/>
 									<listOptionValue builtIn="false" value="&quot;${TCINSTALL}/arm-none-eabi/lib/thumb/v7-ar/fpv3/hard&quot;"/>
@@ -165,5 +166,5 @@
 									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/onigmo-6.1.3/Debug}/libonigmo.a&quot;"/>
 									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/mbed_api/Debug}/libmbed_api.a&quot;"/>
-									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/mruby-1.3.0}/build/arm-none-eabi/lib/libmruby.a&quot;"/>
+									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/mruby-2.1.1}/build/arm-none-eabi/lib/libmruby.a&quot;"/>
 									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/lib}/libmrbcode.a&quot;"/>
 								</option>
Index: /EcnlProtoTool/trunk/prototool/.project
===================================================================
--- /EcnlProtoTool/trunk/prototool/.project	(revision 438)
+++ /EcnlProtoTool/trunk/prototool/.project	(revision 439)
@@ -6,5 +6,5 @@
 		<project>curl-7.57.0</project>
 		<project>mbed_api</project>
-		<project>mruby-1.3.0</project>
+		<project>mruby-2.1.1</project>
 		<project>ntshell</project>
 		<project>onigmo-6.1.3</project>
Index: /EcnlProtoTool/trunk/prototool/debug_setting.txt
===================================================================
--- /EcnlProtoTool/trunk/prototool/debug_setting.txt	(revision 438)
+++ /EcnlProtoTool/trunk/prototool/debug_setting.txt	(revision 439)
@@ -1,1 +1,4 @@
+
+-f interface/cmsis-dap.cfg -f target/renesas_rza1h_swd.cfg
+
 add-symbol-file ../ntshell/Debug/ntshell.elf 0x18004000
Index: /EcnlProtoTool/trunk/prototool/lib/makefile.mrbc
===================================================================
--- /EcnlProtoTool/trunk/prototool/lib/makefile.mrbc	(revision 438)
+++ /EcnlProtoTool/trunk/prototool/lib/makefile.mrbc	(revision 439)
@@ -2,7 +2,7 @@
 CC=arm-none-eabi-gcc
 AR=arm-none-eabi-ar
-MRBC=../../mruby-1.3.0/bin/mrbc
+MRBC=../../mruby-2.1.1/bin/mrbc
 
-CFLAGS=-mcpu=cortex-a9 -march=armv7-a -mlittle-endian -marm -mthumb-interwork -mfloat-abi=hard -mfpu=vfpv3 -I../../mruby-1.3.0/include
+CFLAGS=-mcpu=cortex-a9 -march=armv7-a -mlittle-endian -marm -mthumb-interwork -mfloat-abi=hard -mfpu=vfpv3 -I../../mruby-2.1.1/include
 COBJS=echo_server.o echo_client.o
 CSRCS=$(foreach file,$(COBJS),$(file:.o=.c))
Index: /EcnlProtoTool/trunk/prototool/src/apibreak.c
===================================================================
--- /EcnlProtoTool/trunk/prototool/src/apibreak.c	(revision 438)
+++ /EcnlProtoTool/trunk/prototool/src/apibreak.c	(revision 439)
@@ -4,15 +4,13 @@
 */
 
-#include <stdlib.h>
 #include <string.h>
-
-#include "mruby.h"
-#include "mruby/irep.h"
+#include <mruby.h>
+#include <mruby/irep.h>
 #include "mrdb.h"
-#include "mruby/debug.h"
-#include "mruby/opcode.h"
-#include "mruby/class.h"
-#include "mruby/proc.h"
-#include "mruby/variable.h"
+#include <mruby/debug.h>
+#include <mruby/opcode.h>
+#include <mruby/class.h>
+#include <mruby/proc.h>
+#include <mruby/variable.h>
 #include "mrdberror.h"
 #include "apibreak.h"
@@ -25,23 +23,23 @@
 check_lineno(mrb_irep_debug_info_file *info_file, uint16_t lineno)
 {
-	uint32_t count = info_file->line_entry_count;
-	uint16_t l_idx;
-
-	if (info_file->line_type == mrb_debug_line_ary) {
-		for (l_idx = 0; l_idx < count; ++l_idx) {
-			if (lineno == info_file->lines.ary[l_idx]) {
-				return lineno;
-			}
-		}
-	}
-	else {
-		for (l_idx = 0; l_idx < count; ++l_idx) {
-			if (lineno == info_file->lines.flat_map[l_idx].line) {
-				return lineno;
-			}
-		}
-	}
-
-	return 0;
+  uint32_t count = info_file->line_entry_count;
+  uint16_t l_idx;
+
+  if (info_file->line_type == mrb_debug_line_ary) {
+    for (l_idx = 0; l_idx < count; ++l_idx) {
+      if (lineno == info_file->lines.ary[l_idx]) {
+        return lineno;
+      }
+    }
+  }
+  else {
+    for (l_idx = 0; l_idx < count; ++l_idx) {
+      if (lineno == info_file->lines.flat_map[l_idx].line) {
+        return lineno;
+      }
+    }
+  }
+
+  return 0;
 }
 
@@ -49,21 +47,21 @@
 get_break_index(mrb_debug_context *dbg, uint32_t bpno)
 {
-	uint32_t i;
-	int32_t index;
-	char hit = FALSE;
-
-	for (i = 0; i < dbg->bpnum; i++) {
-		if (dbg->bp[i].bpno == bpno) {
-			hit = TRUE;
-			index = i;
-			break;
-		}
-	}
-
-	if (hit == FALSE) {
-		return MRB_DEBUG_BREAK_INVALID_NO;
-	}
-
-	return index;
+  uint32_t i;
+  int32_t index;
+  char hit = FALSE;
+
+  for(i = 0 ; i < dbg->bpnum; i++) {
+    if (dbg->bp[i].bpno == bpno) {
+      hit = TRUE;
+      index = i;
+      break;
+    }
+  }
+
+  if (hit == FALSE) {
+    return MRB_DEBUG_BREAK_INVALID_NO;
+  }
+
+  return index;
 }
 
@@ -71,57 +69,48 @@
 free_breakpoint(mrb_state *mrb, mrb_debug_breakpoint *bp)
 {
-	switch (bp->type) {
-	case MRB_DEBUG_BPTYPE_LINE:
-		mrb_free(mrb, (void*)bp->point.linepoint.file);
-		break;
-	case MRB_DEBUG_BPTYPE_METHOD:
-		mrb_free(mrb, (void*)bp->point.methodpoint.method_name);
-		if (bp->point.methodpoint.class_name != NULL) {
-			mrb_free(mrb, (void*)bp->point.methodpoint.class_name);
-		}
-		break;
-	default:
-		break;
-	}
+  switch(bp->type) {
+    case MRB_DEBUG_BPTYPE_LINE:
+      mrb_free(mrb, (void*)bp->point.linepoint.file);
+      break;
+    case MRB_DEBUG_BPTYPE_METHOD:
+      mrb_free(mrb, (void*)bp->point.methodpoint.method_name);
+      if (bp->point.methodpoint.class_name != NULL) {
+        mrb_free(mrb, (void*)bp->point.methodpoint.class_name);
+      }
+      break;
+    default:
+      break;
+  }
 }
 
 static uint16_t
-check_file_lineno(struct mrb_irep *irep, const char *file, uint16_t lineno)
-{
-	mrb_irep_debug_info_file *info_file;
-	uint16_t result = 0;
-	uint16_t f_idx;
-	uint16_t fix_lineno;
-	uint16_t i;
-
-	for (f_idx = 0; f_idx < irep->debug_info->flen; ++f_idx) {
-		info_file = irep->debug_info->files[f_idx];
-		if (!strcmp(info_file->filename, file)) {
-			result = MRB_DEBUG_BP_FILE_OK;
-
-			fix_lineno = check_lineno(info_file, lineno);
-			if (fix_lineno != 0) {
-				return result | MRB_DEBUG_BP_LINENO_OK;
-			}
-		}
-		for (i = 0; i < irep->rlen; ++i) {
-			result |= check_file_lineno(irep->reps[i], file, lineno);
-			if (result == (MRB_DEBUG_BP_FILE_OK | MRB_DEBUG_BP_LINENO_OK)) {
-				return result;
-			}
-		}
-	}
-	return result;
-}
-
-static const char*
-get_class_name(mrb_state *mrb, struct RClass *class_obj)
-{
-	struct RClass *outer;
-	mrb_sym class_sym;
-
-	outer = mrb_class_outer_module(mrb, class_obj);
-	class_sym = mrb_class_sym(mrb, class_obj, outer);
-	return mrb_sym2name(mrb, class_sym);
+check_file_lineno(mrb_state *mrb, struct mrb_irep *irep, const char *file, uint16_t lineno)
+{
+  mrb_irep_debug_info_file *info_file;
+  uint16_t result = 0;
+  uint16_t f_idx;
+  uint16_t fix_lineno;
+  uint16_t i;
+
+  for (f_idx = 0; f_idx < irep->debug_info->flen; ++f_idx) {
+    const char *filename;
+    info_file = irep->debug_info->files[f_idx];
+    filename = mrb_sym_name_len(mrb, info_file->filename_sym, NULL);
+    if (!strcmp(filename, file)) {
+      result = MRB_DEBUG_BP_FILE_OK;
+
+      fix_lineno = check_lineno(info_file, lineno);
+      if (fix_lineno != 0) {
+        return result | MRB_DEBUG_BP_LINENO_OK;
+      }
+    }
+    for (i=0; i < irep->rlen; ++i) {
+      result  |= check_file_lineno(mrb, irep->reps[i], file, lineno);
+      if (result == (MRB_DEBUG_BP_FILE_OK | MRB_DEBUG_BP_LINENO_OK)) {
+        return result;
+      }
+    }
+  }
+  return result;
 }
 
@@ -129,52 +118,52 @@
 compare_break_method(mrb_state *mrb, mrb_debug_breakpoint *bp, struct RClass *class_obj, mrb_sym method_sym, mrb_bool* isCfunc)
 {
-	const char* class_name;
-	const char* method_name;
-	struct RProc* m;
-	struct RClass* sc;
-	const char* sn;
-	mrb_sym ssym;
-	mrb_debug_methodpoint *method_p;
-	mrb_bool is_defined;
-
-	method_name = mrb_sym2name(mrb, method_sym);
-
-	method_p = &bp->point.methodpoint;
-	if (strcmp(method_p->method_name, method_name) == 0) {
-		class_name = get_class_name(mrb, class_obj);
-		if (class_name == NULL) {
-			if (method_p->class_name == NULL) {
-				return bp->bpno;
-			}
-		}
-		else if (method_p->class_name != NULL) {
-			m = mrb_method_search_vm(mrb, &class_obj, method_sym);
-			if (m == NULL) {
-				return MRB_DEBUG_OK;
-			}
-			if (MRB_PROC_CFUNC_P(m)) {
-				*isCfunc = TRUE;
-			}
-
-			is_defined = mrb_class_defined(mrb, method_p->class_name);
-			if (is_defined == FALSE) {
-				return MRB_DEBUG_OK;
-			}
-
-			sc = mrb_class_get(mrb, method_p->class_name);
-			ssym = mrb_symbol(mrb_check_intern_cstr(mrb, method_p->method_name));
-			m = mrb_method_search_vm(mrb, &sc, ssym);
-			if (m == NULL) {
-				return MRB_DEBUG_OK;
-			}
-
-			class_name = get_class_name(mrb, class_obj);
-			sn = get_class_name(mrb, sc);
-			if (strcmp(sn, class_name) == 0) {
-				return bp->bpno;
-			}
-		}
-	}
-	return MRB_DEBUG_OK;
+  const char* class_name;
+  const char* method_name;
+  mrb_method_t m;
+  struct RClass* sc;
+  const char* sn;
+  mrb_sym ssym;
+  mrb_debug_methodpoint *method_p;
+  mrb_bool is_defined;
+
+  method_name = mrb_sym_name(mrb, method_sym);
+
+  method_p = &bp->point.methodpoint;
+  if (strcmp(method_p->method_name, method_name) == 0) {
+    class_name = mrb_class_name(mrb, class_obj);
+    if (class_name == NULL) {
+      if (method_p->class_name == NULL) {
+        return bp->bpno;
+      }
+    }
+    else if (method_p->class_name != NULL) {
+      m = mrb_method_search_vm(mrb, &class_obj, method_sym);
+      if (MRB_METHOD_UNDEF_P(m)) {
+        return MRB_DEBUG_OK;
+      }
+      if (MRB_METHOD_CFUNC_P(m)) {
+        *isCfunc = TRUE;
+      }
+
+      is_defined = mrb_class_defined(mrb, method_p->class_name);
+      if (is_defined == FALSE) {
+        return MRB_DEBUG_OK;
+      }
+
+      sc = mrb_class_get(mrb, method_p->class_name);
+      ssym = mrb_symbol(mrb_check_intern_cstr(mrb, method_p->method_name));
+      m = mrb_method_search_vm(mrb, &sc, ssym);
+      if (MRB_METHOD_UNDEF_P(m)) {
+        return MRB_DEBUG_OK;
+      }
+
+      class_name = mrb_class_name(mrb, class_obj);
+      sn = mrb_class_name(mrb, sc);
+      if (strcmp(sn, class_name) == 0) {
+        return bp->bpno;
+      }
+    }
+  }
+  return MRB_DEBUG_OK;
 }
 
@@ -182,45 +171,44 @@
 mrb_debug_set_break_line(mrb_state *mrb, mrb_debug_context *dbg, const char *file, uint16_t lineno)
 {
-	int32_t index;
-	char* set_file;
-	uint16_t result;
-
-	if ((mrb == NULL) || (dbg == NULL) || (file == NULL)) {
-		return MRB_DEBUG_INVALID_ARGUMENT;
-	}
-
-	if (dbg->bpnum >= MAX_BREAKPOINT) {
-		return MRB_DEBUG_BREAK_NUM_OVER;
-	}
-
-	if (dbg->next_bpno > MAX_BREAKPOINTNO) {
-		return MRB_DEBUG_BREAK_NO_OVER;
-	}
-
-	/* file and lineno check (line type mrb_debug_line_ary only.) */
-	result = check_file_lineno(dbg->root_irep, file, lineno);
-	if (result == 0) {
-		return MRB_DEBUG_BREAK_INVALID_FILE;
-	}
-	else if (result == MRB_DEBUG_BP_FILE_OK) {
-		return MRB_DEBUG_BREAK_INVALID_LINENO;
-	}
-
-	int len = strlen(file) + 1;
-	set_file = (char *)mrb_malloc(mrb, len);
-
-	index = dbg->bpnum;
-	dbg->bp[index].bpno = dbg->next_bpno;
-	dbg->next_bpno++;
-	dbg->bp[index].enable = TRUE;
-	dbg->bp[index].type = MRB_DEBUG_BPTYPE_LINE;
-	dbg->bp[index].point.linepoint.lineno = lineno;
-	dbg->bpnum++;
-
-	strlcpy(set_file, file, len);
-
-	dbg->bp[index].point.linepoint.file = set_file;
-
-	return dbg->bp[index].bpno;
+  int32_t index;
+  char* set_file;
+  uint16_t result;
+
+  if ((mrb == NULL)||(dbg == NULL)||(file == NULL)) {
+    return MRB_DEBUG_INVALID_ARGUMENT;
+  }
+
+  if (dbg->bpnum >= MAX_BREAKPOINT) {
+    return MRB_DEBUG_BREAK_NUM_OVER;
+  }
+
+  if (dbg->next_bpno > MAX_BREAKPOINTNO) {
+    return MRB_DEBUG_BREAK_NO_OVER;
+  }
+
+  /* file and lineno check (line type mrb_debug_line_ary only.) */
+  result = check_file_lineno(mrb, dbg->root_irep, file, lineno);
+  if (result == 0) {
+    return MRB_DEBUG_BREAK_INVALID_FILE;
+  }
+  else if (result == MRB_DEBUG_BP_FILE_OK) {
+    return MRB_DEBUG_BREAK_INVALID_LINENO;
+  }
+
+  set_file = (char*)mrb_malloc(mrb, strlen(file) + 1);
+
+  index = dbg->bpnum;
+  dbg->bp[index].bpno = dbg->next_bpno;
+  dbg->next_bpno++;
+  dbg->bp[index].enable = TRUE;
+  dbg->bp[index].type = MRB_DEBUG_BPTYPE_LINE;
+  dbg->bp[index].point.linepoint.lineno = lineno;
+  dbg->bpnum++;
+
+  strncpy(set_file, file, strlen(file) + 1);
+
+  dbg->bp[index].point.linepoint.file = set_file;
+
+  return dbg->bp[index].bpno;
 }
 
@@ -228,45 +216,42 @@
 mrb_debug_set_break_method(mrb_state *mrb, mrb_debug_context *dbg, const char *class_name, const char *method_name)
 {
-	int32_t index;
-	char* set_class;
-	char* set_method;
-	int len;
-
-	if ((mrb == NULL) || (dbg == NULL) || (method_name == NULL)) {
-		return MRB_DEBUG_INVALID_ARGUMENT;
-	}
-
-	if (dbg->bpnum >= MAX_BREAKPOINT) {
-		return MRB_DEBUG_BREAK_NUM_OVER;
-	}
-
-	if (dbg->next_bpno > MAX_BREAKPOINTNO) {
-		return MRB_DEBUG_BREAK_NO_OVER;
-	}
-
-	if (class_name != NULL) {
-		len = strlen(class_name) + 1;
-		set_class = (char *)mrb_malloc(mrb, len);
-		strlcpy(set_class, class_name, len);
-	}
-	else {
-		set_class = NULL;
-	}
-
-	len = strlen(method_name) + 1;
-	set_method = (char *)mrb_malloc(mrb, len);
-
-	strlcpy(set_method, method_name, len);
-
-	index = dbg->bpnum;
-	dbg->bp[index].bpno = dbg->next_bpno;
-	dbg->next_bpno++;
-	dbg->bp[index].enable = TRUE;
-	dbg->bp[index].type = MRB_DEBUG_BPTYPE_METHOD;
-	dbg->bp[index].point.methodpoint.method_name = set_method;
-	dbg->bp[index].point.methodpoint.class_name = set_class;
-	dbg->bpnum++;
-
-	return dbg->bp[index].bpno;
+  int32_t index;
+  char* set_class;
+  char* set_method;
+
+  if ((mrb == NULL) || (dbg == NULL) || (method_name == NULL)) {
+    return MRB_DEBUG_INVALID_ARGUMENT;
+  }
+
+  if (dbg->bpnum >= MAX_BREAKPOINT) {
+    return MRB_DEBUG_BREAK_NUM_OVER;
+  }
+
+  if (dbg->next_bpno > MAX_BREAKPOINTNO) {
+    return MRB_DEBUG_BREAK_NO_OVER;
+  }
+
+  if (class_name != NULL) {
+    set_class = (char*)mrb_malloc(mrb, strlen(class_name) + 1);
+    strncpy(set_class, class_name, strlen(class_name) + 1);
+  }
+  else {
+    set_class = NULL;
+  }
+
+  set_method = (char*)mrb_malloc(mrb, strlen(method_name) + 1);
+
+  strncpy(set_method, method_name, strlen(method_name) + 1);
+
+  index = dbg->bpnum;
+  dbg->bp[index].bpno = dbg->next_bpno;
+  dbg->next_bpno++;
+  dbg->bp[index].enable = TRUE;
+  dbg->bp[index].type = MRB_DEBUG_BPTYPE_METHOD;
+  dbg->bp[index].point.methodpoint.method_name = set_method;
+  dbg->bp[index].point.methodpoint.class_name = set_class;
+  dbg->bpnum++;
+
+  return dbg->bp[index].bpno;
 }
 
@@ -274,30 +259,30 @@
 mrb_debug_get_breaknum(mrb_state *mrb, mrb_debug_context *dbg)
 {
-	if ((mrb == NULL) || (dbg == NULL)) {
-		return MRB_DEBUG_INVALID_ARGUMENT;
-	}
-
-	return dbg->bpnum;
-}
-
-int32_t
-mrb_debug_get_break_all(mrb_state *mrb, mrb_debug_context *dbg, uint32_t size, mrb_debug_breakpoint bp[])
-{
-	uint32_t get_size = 0;
-
-	if ((mrb == NULL) || (dbg == NULL) || (bp == NULL)) {
-		return MRB_DEBUG_INVALID_ARGUMENT;
-	}
-
-	if (dbg->bpnum >= size) {
-		get_size = size;
-	}
-	else {
-		get_size = dbg->bpnum;
-	}
-
-	memcpy(bp, dbg->bp, sizeof(mrb_debug_breakpoint) * get_size);
-
-	return get_size;
+  if ((mrb == NULL) || (dbg == NULL)) {
+    return MRB_DEBUG_INVALID_ARGUMENT;
+  }
+
+  return dbg->bpnum;
+}
+
+int32_t
+mrb_debug_get_break_all(mrb_state *mrb, mrb_debug_context *dbg, uint32_t size, mrb_debug_breakpoint *bp)
+{
+  uint32_t get_size = 0;
+
+  if ((mrb == NULL) || (dbg == NULL) || (bp == NULL)) {
+    return MRB_DEBUG_INVALID_ARGUMENT;
+  }
+
+  if (dbg->bpnum >= size) {
+    get_size = size;
+  }
+  else {
+    get_size = dbg->bpnum;
+  }
+
+  memcpy(bp, dbg->bp, sizeof(mrb_debug_breakpoint) * get_size);
+
+  return get_size;
 }
 
@@ -307,19 +292,19 @@
   int32_t index;
 
-	if ((mrb == NULL) || (dbg == NULL) || (bp == NULL)) {
-		return MRB_DEBUG_INVALID_ARGUMENT;
-	}
-
-	index = get_break_index(dbg, bpno);
-	if (index == MRB_DEBUG_BREAK_INVALID_NO) {
-		return MRB_DEBUG_BREAK_INVALID_NO;
-	}
-
-	bp->bpno = dbg->bp[index].bpno;
-	bp->enable = dbg->bp[index].enable;
-	bp->point = dbg->bp[index].point;
-	bp->type = dbg->bp[index].type;
-
-	return 0;
+  if ((mrb == NULL) || (dbg == NULL) || (bp == NULL)) {
+    return MRB_DEBUG_INVALID_ARGUMENT;
+  }
+
+  index = get_break_index(dbg, bpno);
+  if (index == MRB_DEBUG_BREAK_INVALID_NO) {
+    return MRB_DEBUG_BREAK_INVALID_NO;
+  }
+
+  bp->bpno = dbg->bp[index].bpno;
+  bp->enable = dbg->bp[index].enable;
+  bp->point = dbg->bp[index].point;
+  bp->type = dbg->bp[index].type;
+
+  return 0;
 }
 
@@ -327,30 +312,30 @@
 mrb_debug_delete_break(mrb_state *mrb, mrb_debug_context *dbg, uint32_t bpno)
 {
-	uint32_t i;
-	int32_t index;
-
-	if ((mrb == NULL) || (dbg == NULL)) {
-		return MRB_DEBUG_INVALID_ARGUMENT;
-	}
-
-	index = get_break_index(dbg, bpno);
-	if (index == MRB_DEBUG_BREAK_INVALID_NO) {
-		return MRB_DEBUG_BREAK_INVALID_NO;
-	}
-
-	free_breakpoint(mrb, &dbg->bp[index]);
-
-	for (i = index; i < dbg->bpnum; i++) {
-		if ((i + 1) == dbg->bpnum) {
-			memset(&dbg->bp[i], 0, sizeof(mrb_debug_breakpoint));
-		}
-		else {
-			memcpy(&dbg->bp[i], &dbg->bp[i + 1], sizeof(mrb_debug_breakpoint));
-		}
-	}
-
-	dbg->bpnum--;
-
-	return MRB_DEBUG_OK;
+  uint32_t i;
+  int32_t index;
+
+  if ((mrb == NULL) ||(dbg == NULL)) {
+    return MRB_DEBUG_INVALID_ARGUMENT;
+  }
+
+  index = get_break_index(dbg, bpno);
+  if (index == MRB_DEBUG_BREAK_INVALID_NO) {
+    return MRB_DEBUG_BREAK_INVALID_NO;
+  }
+
+  free_breakpoint(mrb, &dbg->bp[index]);
+
+  for(i = index ; i < dbg->bpnum; i++) {
+    if ((i + 1) == dbg->bpnum) {
+      memset(&dbg->bp[i], 0, sizeof(mrb_debug_breakpoint));
+    }
+    else {
+      memcpy(&dbg->bp[i], &dbg->bp[i + 1], sizeof(mrb_debug_breakpoint));
+    }
+  }
+
+  dbg->bpnum--;
+
+  return MRB_DEBUG_OK;
 }
 
@@ -358,17 +343,17 @@
 mrb_debug_delete_break_all(mrb_state *mrb, mrb_debug_context *dbg)
 {
-	uint32_t i;
-
-	if ((mrb == NULL) || (dbg == NULL)) {
-		return MRB_DEBUG_INVALID_ARGUMENT;
-	}
-
-	for (i = 0; i < dbg->bpnum; i++) {
-		free_breakpoint(mrb, &dbg->bp[i]);
-	}
-
-	dbg->bpnum = 0;
-
-	return MRB_DEBUG_OK;
+  uint32_t i;
+
+  if ((mrb == NULL) || (dbg == NULL)) {
+    return MRB_DEBUG_INVALID_ARGUMENT;
+  }
+
+  for(i = 0 ; i < dbg->bpnum ; i++) {
+    free_breakpoint(mrb, &dbg->bp[i]);
+  }
+
+  dbg->bpnum = 0;
+
+  return MRB_DEBUG_OK;
 }
 
@@ -376,18 +361,18 @@
 mrb_debug_enable_break(mrb_state *mrb, mrb_debug_context *dbg, uint32_t bpno)
 {
-	int32_t index = 0;
-
-	if ((mrb == NULL) || (dbg == NULL)) {
-		return MRB_DEBUG_INVALID_ARGUMENT;
-	}
-
-	index = get_break_index(dbg, bpno);
-	if (index == MRB_DEBUG_BREAK_INVALID_NO) {
-		return MRB_DEBUG_BREAK_INVALID_NO;
-	}
-
-	dbg->bp[index].enable = TRUE;
-
-	return MRB_DEBUG_OK;
+  int32_t index = 0;
+
+  if ((mrb == NULL) || (dbg == NULL)) {
+    return MRB_DEBUG_INVALID_ARGUMENT;
+  }
+
+  index = get_break_index(dbg, bpno);
+  if (index == MRB_DEBUG_BREAK_INVALID_NO) {
+    return MRB_DEBUG_BREAK_INVALID_NO;
+  }
+
+  dbg->bp[index].enable = TRUE;
+
+  return MRB_DEBUG_OK;
 }
 
@@ -395,15 +380,15 @@
 mrb_debug_enable_break_all(mrb_state *mrb, mrb_debug_context *dbg)
 {
-	uint32_t i;
-
-	if ((mrb == NULL) || (dbg == NULL)) {
-		return MRB_DEBUG_INVALID_ARGUMENT;
-	}
-
-	for (i = 0; i < dbg->bpnum; i++) {
-		dbg->bp[i].enable = TRUE;
-	}
-
-	return MRB_DEBUG_OK;
+  uint32_t i;
+
+  if ((mrb == NULL) || (dbg == NULL)) {
+    return MRB_DEBUG_INVALID_ARGUMENT;
+  }
+
+  for(i = 0 ; i < dbg->bpnum; i++) {
+    dbg->bp[i].enable = TRUE;
+  }
+
+  return MRB_DEBUG_OK;
 }
 
@@ -411,18 +396,18 @@
 mrb_debug_disable_break(mrb_state *mrb, mrb_debug_context *dbg, uint32_t bpno)
 {
-	int32_t index = 0;
-
-	if ((mrb == NULL) || (dbg == NULL)) {
-		return MRB_DEBUG_INVALID_ARGUMENT;
-	}
-
-	index = get_break_index(dbg, bpno);
-	if (index == MRB_DEBUG_BREAK_INVALID_NO) {
-		return MRB_DEBUG_BREAK_INVALID_NO;
-	}
-
-	dbg->bp[index].enable = FALSE;
-
-	return MRB_DEBUG_OK;
+  int32_t index = 0;
+
+  if ((mrb == NULL) || (dbg == NULL)) {
+    return MRB_DEBUG_INVALID_ARGUMENT;
+  }
+
+  index = get_break_index(dbg, bpno);
+  if (index == MRB_DEBUG_BREAK_INVALID_NO) {
+    return MRB_DEBUG_BREAK_INVALID_NO;
+  }
+
+  dbg->bp[index].enable = FALSE;
+
+  return MRB_DEBUG_OK;
 }
 
@@ -430,26 +415,26 @@
 mrb_debug_disable_break_all(mrb_state *mrb, mrb_debug_context *dbg)
 {
-	uint32_t i;
-
-	if ((mrb == NULL) || (dbg == NULL)) {
-		return MRB_DEBUG_INVALID_ARGUMENT;
-	}
-
-	for (i = 0; i < dbg->bpnum; i++) {
-		dbg->bp[i].enable = FALSE;
-	}
-
-	return MRB_DEBUG_OK;
+  uint32_t i;
+
+  if ((mrb == NULL) || (dbg == NULL)) {
+    return MRB_DEBUG_INVALID_ARGUMENT;
+  }
+
+  for(i = 0 ; i < dbg->bpnum; i++) {
+    dbg->bp[i].enable = FALSE;
+  }
+
+  return MRB_DEBUG_OK;
 }
 
 static mrb_bool
-check_start_pc_for_line(mrb_irep *irep, mrb_code *pc, uint16_t line)
-{
-	if (pc > irep->iseq) {
-		if (line == mrb_debug_get_line(irep, (uint32_t)(pc - irep->iseq - 1))) {
-			return FALSE;
-		}
-	}
-	return TRUE;
+check_start_pc_for_line(mrb_state *mrb, mrb_irep *irep, const mrb_code *pc, uint16_t line)
+{
+  if (pc > irep->iseq) {
+    if (line == mrb_debug_get_line(mrb, irep, pc - irep->iseq - 1)) {
+      return FALSE;
+    }
+  }
+  return TRUE;
 }
 
@@ -457,36 +442,36 @@
 mrb_debug_check_breakpoint_line(mrb_state *mrb, mrb_debug_context *dbg, const char *file, uint16_t line)
 {
-	mrb_debug_breakpoint *bp;
-	mrb_debug_linepoint *line_p;
-  uint32_t i;
-
-	if ((mrb == NULL) || (dbg == NULL) || (file == NULL) || (line <= 0)) {
-		return MRB_DEBUG_INVALID_ARGUMENT;
-	}
-
-	if (!check_start_pc_for_line(dbg->irep, dbg->pc, line)) {
-		return MRB_DEBUG_OK;
-	}
-
-	bp = dbg->bp;
-	for (i = 0; i < dbg->bpnum; i++) {
-		switch (bp->type) {
-		case MRB_DEBUG_BPTYPE_LINE:
-			if (bp->enable == TRUE) {
-				line_p = &bp->point.linepoint;
-				if ((strcmp(line_p->file, file) == 0) && (line_p->lineno == line)) {
-					return bp->bpno;
-				}
-			}
-			break;
-		case MRB_DEBUG_BPTYPE_METHOD:
-			break;
-		case MRB_DEBUG_BPTYPE_NONE:
-		default:
-			return MRB_DEBUG_OK;
-		}
-		bp++;
-	}
-	return MRB_DEBUG_OK;
+  mrb_debug_breakpoint *bp;
+  mrb_debug_linepoint *line_p;
+  uint32_t i;
+
+  if ((mrb == NULL) || (dbg == NULL) || (file == NULL) || (line <= 0)) {
+    return MRB_DEBUG_INVALID_ARGUMENT;
+  }
+
+  if (!check_start_pc_for_line(mrb, dbg->irep, dbg->pc, line)) {
+    return MRB_DEBUG_OK;
+  }
+
+  bp = dbg->bp;
+  for(i=0; i<dbg->bpnum; i++) {
+    switch (bp->type) {
+      case MRB_DEBUG_BPTYPE_LINE:
+        if (bp->enable == TRUE) {
+          line_p = &bp->point.linepoint;
+          if ((strcmp(line_p->file, file) == 0) && (line_p->lineno == line)) {
+            return bp->bpno;
+          }
+        }
+        break;
+      case MRB_DEBUG_BPTYPE_METHOD:
+        break;
+      case MRB_DEBUG_BPTYPE_NONE:
+      default:
+        return MRB_DEBUG_OK;
+    }
+    bp++;
+  }
+  return MRB_DEBUG_OK;
 }
 
@@ -495,30 +480,28 @@
 mrb_debug_check_breakpoint_method(mrb_state *mrb, mrb_debug_context *dbg, struct RClass *class_obj, mrb_sym method_sym, mrb_bool* isCfunc)
 {
-	mrb_debug_breakpoint *bp;
-	int32_t bpno;
-  uint32_t i;
-
-	if ((mrb == NULL) || (dbg == NULL) || (class_obj == NULL)) {
-		return MRB_DEBUG_INVALID_ARGUMENT;
-	}
-
-	bp = dbg->bp;
-	for (i = 0; i < dbg->bpnum; i++) {
-		if (bp->type == MRB_DEBUG_BPTYPE_METHOD) {
-			if (bp->enable == TRUE) {
-				bpno = compare_break_method(mrb, bp, class_obj, method_sym, isCfunc);
-				if (bpno > 0) {
-					return bpno;
-				}
-			}
-		}
-		else if (bp->type == MRB_DEBUG_BPTYPE_NONE) {
-			break;
-		}
-		bp++;
-	}
-
-	return 0;
-}
-
-
+  mrb_debug_breakpoint *bp;
+  int32_t bpno;
+  uint32_t i;
+
+  if ((mrb == NULL) || (dbg == NULL) || (class_obj == NULL)) {
+    return MRB_DEBUG_INVALID_ARGUMENT;
+  }
+
+  bp = dbg->bp;
+  for(i=0; i<dbg->bpnum; i++) {
+    if (bp->type == MRB_DEBUG_BPTYPE_METHOD) {
+      if (bp->enable == TRUE) {
+        bpno = compare_break_method(mrb, bp, class_obj, method_sym, isCfunc);
+        if (bpno > 0) {
+          return bpno;
+        }
+      }
+    }
+    else if (bp->type == MRB_DEBUG_BPTYPE_NONE) {
+      break;
+    }
+    bp++;
+  }
+
+  return 0;
+}
Index: /EcnlProtoTool/trunk/prototool/src/apibreak.h
===================================================================
--- /EcnlProtoTool/trunk/prototool/src/apibreak.h	(revision 438)
+++ /EcnlProtoTool/trunk/prototool/src/apibreak.h	(revision 439)
@@ -7,20 +7,20 @@
 #define APIBREAK_H_
 
-#include "mruby.h"
+#include <mruby.h>
 #include "mrdb.h"
 
-int32_t mrb_debug_set_break_line( mrb_state *, mrb_debug_context *, const char *, uint16_t );
-int32_t mrb_debug_set_break_method( mrb_state *, mrb_debug_context *, const char *, const char * );
-int32_t mrb_debug_get_breaknum( mrb_state *, mrb_debug_context * );
-int32_t mrb_debug_get_break_all( mrb_state *, mrb_debug_context *, uint32_t, mrb_debug_breakpoint bp[]);
-int32_t mrb_debug_get_break( mrb_state *, mrb_debug_context *, uint32_t, mrb_debug_breakpoint * );
-int32_t mrb_debug_delete_break( mrb_state *, mrb_debug_context *, uint32_t );
-int32_t mrb_debug_delete_break_all( mrb_state *, mrb_debug_context * );
-int32_t mrb_debug_enable_break( mrb_state *, mrb_debug_context *, uint32_t );
-int32_t mrb_debug_enable_break_all( mrb_state *, mrb_debug_context * );
-int32_t mrb_debug_disable_break( mrb_state *, mrb_debug_context *, uint32_t );
-int32_t mrb_debug_disable_break_all( mrb_state *, mrb_debug_context * );
-int32_t mrb_debug_check_breakpoint_line( mrb_state *, mrb_debug_context *, const char *, uint16_t );
-int32_t mrb_debug_check_breakpoint_method( mrb_state *, mrb_debug_context *, struct RClass *, mrb_sym, mrb_bool* );
+int32_t mrb_debug_set_break_line(mrb_state *, mrb_debug_context *, const char *, uint16_t);
+int32_t mrb_debug_set_break_method(mrb_state *, mrb_debug_context *, const char *, const char *);
+int32_t mrb_debug_get_breaknum(mrb_state *, mrb_debug_context *);
+int32_t mrb_debug_get_break_all(mrb_state *, mrb_debug_context *, uint32_t, mrb_debug_breakpoint bp[]);
+int32_t mrb_debug_get_break(mrb_state *, mrb_debug_context *, uint32_t, mrb_debug_breakpoint *);
+int32_t mrb_debug_delete_break(mrb_state *, mrb_debug_context *, uint32_t);
+int32_t mrb_debug_delete_break_all(mrb_state *, mrb_debug_context *);
+int32_t mrb_debug_enable_break(mrb_state *, mrb_debug_context *, uint32_t);
+int32_t mrb_debug_enable_break_all(mrb_state *, mrb_debug_context *);
+int32_t mrb_debug_disable_break(mrb_state *, mrb_debug_context *, uint32_t);
+int32_t mrb_debug_disable_break_all(mrb_state *, mrb_debug_context *);
+int32_t mrb_debug_check_breakpoint_line(mrb_state *, mrb_debug_context *, const char *, uint16_t);
+int32_t mrb_debug_check_breakpoint_method(mrb_state *, mrb_debug_context *, struct RClass *, mrb_sym, mrb_bool*);
 
 #endif /* APIBREAK_H_ */
Index: /EcnlProtoTool/trunk/prototool/src/apilist.c
===================================================================
--- /EcnlProtoTool/trunk/prototool/src/apilist.c	(revision 439)
+++ /EcnlProtoTool/trunk/prototool/src/apilist.c	(revision 439)
@@ -0,0 +1,240 @@
+/*
+ * apilist.c
+ */
+
+#include <ctype.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "mrdb.h"
+#include "mrdberror.h"
+#include "apilist.h"
+#include <mruby/compile.h>
+#include <mruby/irep.h>
+#include <mruby/debug.h>
+
+#define LINE_BUF_SIZE MAX_COMMAND_LINE
+
+typedef struct source_file {
+  char *path;
+  uint16_t lineno;
+  FILE *fp;
+} source_file;
+
+static void
+source_file_free(mrb_state *mrb, source_file *file)
+{
+  if (file != NULL) {
+    if (file->path != NULL) {
+      mrb_free(mrb, file->path);
+    }
+    if (file->fp != NULL) {
+      fclose(file->fp);
+      file->fp = NULL;
+    }
+    mrb_free(mrb, file);
+  }
+}
+
+static char*
+build_path(mrb_state *mrb, const char *dir, const char *base)
+{
+  int len;
+  char *path = NULL;
+
+  len = strlen(base) + 1;
+
+  if (strcmp(dir, ".")) {
+    len += strlen(dir) + sizeof("/") - 1;
+  }
+
+  path = (char*)mrb_malloc(mrb, len);
+  memset(path, 0, len);
+
+  if (strcmp(dir, ".")) {
+    strcat(path, dir);
+    strcat(path, "/");
+  }
+  strcat(path, base);
+
+  return path;
+}
+
+static char*
+dirname(mrb_state *mrb, const char *path)
+{
+  size_t len;
+  const char *p;
+  char *dir;
+
+  if (path == NULL) {
+    return NULL;
+  }
+
+  p = strrchr(path, '/');
+  len = p != NULL ? (size_t)(p - path) : strlen(path);
+
+  dir = (char*)mrb_malloc(mrb, len + 1);
+  strncpy(dir, path, len);
+  dir[len] = '\0';
+
+  return dir;
+}
+
+static source_file*
+source_file_new(mrb_state *mrb, mrb_debug_context *dbg, char *filename)
+{
+  source_file *file;
+
+  file = (source_file*)mrb_malloc(mrb, sizeof(source_file));
+
+  memset(file, '\0', sizeof(source_file));
+  file->fp = fopen(filename, "rb");
+
+  if (file->fp == NULL) {
+    source_file_free(mrb, file);
+    return NULL;
+  }
+
+  file->lineno = 1;
+  file->path = (char*)mrb_malloc(mrb, strlen(filename) + 1);
+  strcpy(file->path, filename);
+  return file;
+}
+
+static mrb_bool
+remove_newlines(char *s, FILE *fp)
+{
+  int c;
+  char *p;
+  size_t len;
+
+  if ((len = strlen(s)) == 0) {
+    return FALSE;
+  }
+
+  p = s + len - 1;
+
+  if (*p != '\r' && *p != '\n') {
+    return FALSE;
+  }
+
+  if (*p == '\r') {
+    /* peek the next character and skip '\n' */
+    if ((c = fgetc(fp)) != '\n') {
+      ungetc(c, fp);
+    }
+  }
+
+  /* remove trailing newline characters */
+  while (s <= p && (*p == '\r' || *p == '\n')) {
+    *p-- = '\0';
+  }
+
+  return TRUE;
+}
+
+static void
+show_lines(source_file *file, uint16_t line_min, uint16_t line_max)
+{
+  char buf[LINE_BUF_SIZE];
+  int show_lineno = 1, found_newline = 0, is_printed = 0;
+
+  if (file->fp == NULL) {
+    return;
+  }
+
+  while (fgets(buf, sizeof(buf), file->fp) != NULL) {
+    found_newline = remove_newlines(buf, file->fp);
+
+    if (line_min <= file->lineno) {
+      if (show_lineno) {
+        printf("%-8d", file->lineno);
+      }
+      show_lineno = found_newline;
+      printf(found_newline ? "%s\n" : "%s", buf);
+      is_printed = 1;
+    }
+
+    if (found_newline) {
+      if (line_max < ++file->lineno) {
+        break;
+      }
+    }
+  }
+
+  if (is_printed && !found_newline) {
+    printf("\n");
+  }
+}
+
+char*
+mrb_debug_get_source(mrb_state *mrb, mrdb_state *mrdb, const char *srcpath, const char *filename)
+{
+  int i;
+  FILE *fp;
+  const char *search_path[3];
+  char *path = NULL;
+  const char *srcname = strrchr(filename, '/');
+
+  if (srcname) srcname++;
+  else srcname = filename;
+
+  search_path[0] = srcpath;
+  search_path[1] = dirname(mrb, mrb_debug_get_filename(mrb, mrdb->dbg->irep, 0));
+  search_path[2] = ".";
+
+  for (i = 0; i < 3; i++) {
+    if (search_path[i] == NULL) {
+      continue;
+    }
+
+    if ((path = build_path(mrb, search_path[i], srcname)) == NULL) {
+      continue;
+    }
+
+    if ((fp = fopen(path, "rb")) == NULL) {
+      mrb_free(mrb, path);
+      path = NULL;
+      continue;
+    }
+    fclose(fp);
+    break;
+  }
+
+  mrb_free(mrb, (void *)search_path[1]);
+
+  return path;
+}
+
+int32_t
+mrb_debug_list(mrb_state *mrb, mrb_debug_context *dbg, char *filename, uint16_t line_min, uint16_t line_max)
+{
+  char *ext;
+  source_file *file;
+
+  if (mrb == NULL || dbg == NULL || filename == NULL) {
+    return MRB_DEBUG_INVALID_ARGUMENT;
+  }
+
+  ext = strrchr(filename, '.');
+
+  if (ext == NULL || strcmp(ext, ".rb")) {
+    printf("List command only supports .rb file.\n");
+    return MRB_DEBUG_INVALID_ARGUMENT;
+  }
+
+  if (line_min > line_max) {
+    return MRB_DEBUG_INVALID_ARGUMENT;
+  }
+
+  if ((file = source_file_new(mrb, dbg, filename)) != NULL) {
+    show_lines(file, line_min, line_max);
+    source_file_free(mrb, file);
+    return MRB_DEBUG_OK;
+  }
+  else {
+    printf("Invalid source file named %s.\n", filename);
+    return MRB_DEBUG_INVALID_ARGUMENT;
+  }
+}
Index: /EcnlProtoTool/trunk/prototool/src/apilist.h
===================================================================
--- /EcnlProtoTool/trunk/prototool/src/apilist.h	(revision 439)
+++ /EcnlProtoTool/trunk/prototool/src/apilist.h	(revision 439)
@@ -0,0 +1,14 @@
+/*
+ * apilist.h
+ */
+
+#ifndef APILIST_H_
+#define APILIST_H_
+
+#include <mruby.h>
+#include "mrdb.h"
+
+int32_t mrb_debug_list(mrb_state *, mrb_debug_context *, char *, uint16_t, uint16_t);
+char* mrb_debug_get_source(mrb_state *, mrdb_state *, const char *, const char *);
+
+#endif /* APILIST_H_ */
Index: /EcnlProtoTool/trunk/prototool/src/apiprint.c
===================================================================
--- /EcnlProtoTool/trunk/prototool/src/apiprint.c	(revision 438)
+++ /EcnlProtoTool/trunk/prototool/src/apiprint.c	(revision 439)
@@ -4,13 +4,12 @@
 */
 
-#include <stdlib.h>
-
+#include <string.h>
 #include "mrdb.h"
-#include "mruby/value.h"
-#include "mruby/class.h"
-#include "mruby/compile.h"
-#include "mruby/error.h"
-#include "mruby/numeric.h"
-#include "mruby/string.h"
+#include <mruby/value.h>
+#include <mruby/class.h>
+#include <mruby/compile.h>
+#include <mruby/error.h>
+#include <mruby/numeric.h>
+#include <mruby/string.h>
 #include "apiprint.h"
 
@@ -18,62 +17,67 @@
 mrdb_check_syntax(mrb_state *mrb, mrb_debug_context *dbg, const char *expr, size_t len)
 {
-	mrbc_context *c;
+  mrbc_context *c;
 
-	c = mrbc_context_new(mrb);
-	c->no_exec = TRUE;
-	c->capture_errors = TRUE;
-	c->filename = (char*)dbg->prvfile;
-	c->lineno = dbg->prvline;
+  c = mrbc_context_new(mrb);
+  c->no_exec = TRUE;
+  c->capture_errors = TRUE;
+  mrbc_filename(mrb, c, (const char*)dbg->prvfile);
+  c->lineno = dbg->prvline;
 
-	/* Load program */
-	mrb_load_nstring_cxt(mrb, expr, len, c);
+  /* Load program */
+  mrb_load_nstring_cxt(mrb, expr, len, c);
 
-	mrbc_context_free(mrb, c);
+  mrbc_context_free(mrb, c);
 }
 
 mrb_value
-mrb_debug_eval(mrb_state *mrb, mrb_debug_context *dbg, const char *expr, size_t len, mrb_bool *exc)
+mrb_debug_eval(mrb_state *mrb, mrb_debug_context *dbg, const char *expr, size_t len, mrb_bool *exc, int direct_eval)
 {
-	void(*tmp)(struct mrb_state *, struct mrb_irep *, mrb_code *, mrb_value *);
-	mrb_value ruby_code;
-	mrb_value s;
-	mrb_value v;
-	mrb_value recv;
+  void (*tmp)(struct mrb_state *, struct mrb_irep *, const mrb_code *, mrb_value *);
+  mrb_value ruby_code;
+  mrb_value s;
+  mrb_value v;
+  mrb_value recv;
 
-	/* disable code_fetch_hook */
-	tmp = mrb->code_fetch_hook;
-	mrb->code_fetch_hook = NULL;
+  /* disable code_fetch_hook */
+  tmp = mrb->code_fetch_hook;
+  mrb->code_fetch_hook = NULL;
 
-	mrdb_check_syntax(mrb, dbg, expr, len);
-	if (mrb->exc) {
-		v = mrb_obj_value(mrb->exc);
-		mrb->exc = 0;
-	}
-	else {
-		/*
-		 * begin
-		 *   expr
-		 * rescue => e
-		 *   e
-		 * end
-		 */
-		ruby_code = mrb_str_new_lit(mrb, "begin\n");
-		ruby_code = mrb_str_cat(mrb, ruby_code, expr, len);
-		ruby_code = mrb_str_cat_lit(mrb, ruby_code, "\nrescue => e\ne\nend");
+  mrdb_check_syntax(mrb, dbg, expr, len);
+  if (mrb->exc) {
+    v = mrb_obj_value(mrb->exc);
+    mrb->exc = 0;
+  }
+  else if (direct_eval) {
+    recv = dbg->regs[0];
 
-		recv = dbg->regs[0];
+    v = mrb_funcall(mrb, recv, expr, 0);
+  }
+  else {
+    /*
+     * begin
+     *   expr
+     * rescue => e
+     *   e
+     * end
+     */
+    ruby_code = mrb_str_new_lit(mrb, "begin\n");
+    ruby_code = mrb_str_cat(mrb, ruby_code, expr, len);
+    ruby_code = mrb_str_cat_lit(mrb, ruby_code, "\nrescue => e\ne\nend");
 
-		v = mrb_funcall(mrb, recv, "instance_eval", 1, ruby_code);
-	}
+    recv = dbg->regs[0];
 
-	if (exc) {
-		*exc = mrb_obj_is_kind_of(mrb, v, mrb->eException_class);
-	}
+    v =  mrb_funcall(mrb, recv, "instance_eval", 1, ruby_code);
+  }
 
-	s = mrb_funcall(mrb, v, "inspect", 0);
+  if (exc) {
+    *exc = mrb_obj_is_kind_of(mrb, v, mrb->eException_class);
+  }
 
-	/* enable code_fetch_hook */
-	mrb->code_fetch_hook = tmp;
+  s = mrb_inspect(mrb, v);
 
-	return s;
+  /* enable code_fetch_hook */
+  mrb->code_fetch_hook = tmp;
+
+  return s;
 }
Index: /EcnlProtoTool/trunk/prototool/src/apiprint.h
===================================================================
--- /EcnlProtoTool/trunk/prototool/src/apiprint.h	(revision 438)
+++ /EcnlProtoTool/trunk/prototool/src/apiprint.h	(revision 439)
@@ -6,8 +6,8 @@
 #define APIPRINT_H_
 
-#include "mruby.h"
+#include <mruby.h>
 #include "mrdb.h"
 
-mrb_value mrb_debug_eval(mrb_state*, mrb_debug_context*, const char*, size_t, mrb_bool*);
+mrb_value mrb_debug_eval(mrb_state*, mrb_debug_context*, const char*, size_t, mrb_bool*, int);
 
 #endif /* APIPRINT_H_ */
Index: /EcnlProtoTool/trunk/prototool/src/cmdbreak.c
===================================================================
--- /EcnlProtoTool/trunk/prototool/src/cmdbreak.c	(revision 438)
+++ /EcnlProtoTool/trunk/prototool/src/cmdbreak.c	(revision 439)
@@ -4,11 +4,10 @@
 */
 
-#include <stdlib.h>
+#include <ctype.h>
 #include <string.h>
-
-#include "mruby.h"
-#include "mruby/dump.h"
-#include "mruby/debug.h"
-#include "mruby/string.h"
+#include <mruby.h>
+#include <mruby/dump.h>
+#include <mruby/debug.h>
+#include <mruby/string.h>
 #include "mrdb.h"
 #include "mrdberror.h"
@@ -44,17 +43,17 @@
 #define BPNO_LETTER_NUM 9
 
-typedef int32_t(*all_command_func)(mrb_state *, mrb_debug_context *);
-typedef int32_t(*select_command_func)(mrb_state *, mrb_debug_context *, uint32_t);
+typedef int32_t (*all_command_func)(mrb_state *, mrb_debug_context *);
+typedef int32_t (*select_command_func)(mrb_state *, mrb_debug_context *, uint32_t);
 
 static void
 print_api_common_error(int32_t error)
 {
-	switch (error) {
-	case MRB_DEBUG_INVALID_ARGUMENT:
-		puts(BREAK_ERR_MSG_INVALIDARG);
-		break;
-	default:
-		break;
-	}
+  switch(error) {
+    case MRB_DEBUG_INVALID_ARGUMENT:
+      puts(BREAK_ERR_MSG_INVALIDARG);
+      break;
+    default:
+      break;
+  }
 }
 
@@ -69,20 +68,20 @@
 parse_breakpoint_no(char* args)
 {
-	char* ps = args;
-	uint32_t l;
-
-	if ((*ps == '0') || (strlen(ps) >= BPNO_LETTER_NUM)) {
-		return 0;
-	}
-
-	while (!(ISBLANK(*ps) || ISCNTRL(*ps))) {
-		if (!ISDIGIT(*ps)) {
-			return 0;
-		}
-		ps++;
-	}
-
-	STRTOUL(l, args);
-	return l;
+  char* ps = args;
+  uint32_t l;
+
+  if ((*ps == '0')||(strlen(ps) >= BPNO_LETTER_NUM)) {
+    return 0;
+  }
+
+  while (!(ISBLANK(*ps)||ISCNTRL(*ps))) {
+    if (!ISDIGIT(*ps)) {
+      return 0;
+    }
+    ps++;
+  }
+
+  STRTOUL(l, args);
+  return l;
 }
 
@@ -90,12 +89,12 @@
 exe_set_command_all(mrb_state *mrb, mrdb_state *mrdb, all_command_func func)
 {
-	int32_t ret = MRB_DEBUG_OK;
-
-	if (mrdb->wcnt == 1) {
-		ret = func(mrb, mrdb->dbg);
-		print_api_common_error(ret);
-		return TRUE;
-	}
-	return FALSE;
+  int32_t ret = MRB_DEBUG_OK;
+
+  if (mrdb->wcnt == 1) {
+    ret = func(mrb, mrdb->dbg);
+    print_api_common_error(ret);
+    return TRUE;
+  }
+  return FALSE;
 }
 
@@ -103,24 +102,24 @@
 exe_set_command_select(mrb_state *mrb, mrdb_state *mrdb, select_command_func func)
 {
-	char* ps;
-	int32_t ret = MRB_DEBUG_OK;
-	int32_t bpno = 0;
-	int32_t i;
-
-	for (i = 1; i < mrdb->wcnt; i++) {
-		ps = mrdb->words[i];
-		bpno = parse_breakpoint_no(ps);
-		if (bpno == 0) {
-			printf(BREAK_ERR_MSG_INVALIDBPNO, ps);
-			break;
-		}
-		ret = func(mrb, mrdb->dbg, (uint32_t)bpno);
-		if (ret == MRB_DEBUG_BREAK_INVALID_NO) {
-			printf(BREAK_ERR_MSG_NOBPNO, bpno);
-		}
-		else if (ret != MRB_DEBUG_OK) {
-			print_api_common_error(ret);
-		}
-	}
+  char* ps;
+  int32_t ret = MRB_DEBUG_OK;
+  int32_t bpno = 0;
+  int32_t i;
+
+  for(i=1; i<mrdb->wcnt; i++) {
+    ps = mrdb->words[i];
+    bpno = parse_breakpoint_no(ps);
+    if (bpno == 0) {
+      printf(BREAK_ERR_MSG_INVALIDBPNO, ps);
+      break;
+    }
+    ret = func(mrb, mrdb->dbg, (uint32_t)bpno);
+    if (ret == MRB_DEBUG_BREAK_INVALID_NO) {
+      printf(BREAK_ERR_MSG_NOBPNO, bpno);
+    }
+    else if (ret != MRB_DEBUG_OK) {
+      print_api_common_error(ret);
+    }
+  }
 }
 
@@ -128,29 +127,29 @@
 check_bptype(char* args)
 {
-	char* ps = args;
-
-	if (ISBLANK(*ps) || ISCNTRL(*ps)) {
-		puts(BREAK_ERR_MSG_BLANK);
-		return MRB_DEBUG_BPTYPE_NONE;
-	}
-
-	if (!ISDIGIT(*ps)) {
-		return MRB_DEBUG_BPTYPE_METHOD;
-	}
-
-	while (!(ISBLANK(*ps) || ISCNTRL(*ps))) {
-		if (!ISDIGIT(*ps)) {
-			printf(BREAK_ERR_MSG_INVALIDSTR, args);
-			return MRB_DEBUG_BPTYPE_NONE;
-		}
-		ps++;
-	}
-
-	if ((*args == '0') || (strlen(args) >= LINENO_MAX_DIGIT)) {
-		puts(BREAK_ERR_MSG_RANGEOVER);
-		return MRB_DEBUG_BPTYPE_NONE;
-	}
-
-	return MRB_DEBUG_BPTYPE_LINE;
+  char* ps = args;
+
+  if (ISBLANK(*ps)||ISCNTRL(*ps)) {
+    puts(BREAK_ERR_MSG_BLANK);
+    return MRB_DEBUG_BPTYPE_NONE;
+  }
+
+  if (!ISDIGIT(*ps)) {
+    return MRB_DEBUG_BPTYPE_METHOD;
+  }
+
+  while (!(ISBLANK(*ps)||ISCNTRL(*ps))) {
+    if (!ISDIGIT(*ps)) {
+      printf(BREAK_ERR_MSG_INVALIDSTR, args);
+      return MRB_DEBUG_BPTYPE_NONE;
+    }
+    ps++;
+  }
+
+  if ((*args == '0')||(strlen(args) >= LINENO_MAX_DIGIT)) {
+    puts(BREAK_ERR_MSG_RANGEOVER);
+    return MRB_DEBUG_BPTYPE_NONE;
+  }
+
+  return MRB_DEBUG_BPTYPE_LINE;
 }
 
@@ -158,20 +157,20 @@
 print_breakpoint(mrb_debug_breakpoint *bp)
 {
-	const char* enable_letter[] = { BREAK_INFO_MSG_DISABLE, BREAK_INFO_MSG_ENABLE };
-
-	if (bp->type == MRB_DEBUG_BPTYPE_LINE) {
-		printf(BREAK_INFO_MSG_LINEBREAK,
-			bp->bpno, enable_letter[bp->enable], bp->point.linepoint.file, bp->point.linepoint.lineno);
-	}
-	else {
-		if (bp->point.methodpoint.class_name == NULL) {
-			printf(BREAK_INFO_MSG_METHODBREAK_NOCLASS,
-				bp->bpno, enable_letter[bp->enable], bp->point.methodpoint.method_name);
-		}
-		else {
-			printf(BREAK_INFO_MSG_METHODBREAK,
-				bp->bpno, enable_letter[bp->enable], bp->point.methodpoint.class_name, bp->point.methodpoint.method_name);
-		}
-	}
+  const char* enable_letter[] = {BREAK_INFO_MSG_DISABLE, BREAK_INFO_MSG_ENABLE};
+
+  if (bp->type == MRB_DEBUG_BPTYPE_LINE) {
+    printf(BREAK_INFO_MSG_LINEBREAK,
+      bp->bpno, enable_letter[bp->enable], bp->point.linepoint.file, bp->point.linepoint.lineno);
+  }
+  else {
+    if (bp->point.methodpoint.class_name == NULL) {
+      printf(BREAK_INFO_MSG_METHODBREAK_NOCLASS,
+        bp->bpno, enable_letter[bp->enable], bp->point.methodpoint.method_name);
+    }
+    else {
+      printf(BREAK_INFO_MSG_METHODBREAK,
+        bp->bpno, enable_letter[bp->enable], bp->point.methodpoint.class_name, bp->point.methodpoint.method_name);
+    }
+  }
 }
 
@@ -179,31 +178,31 @@
 info_break_all(mrb_state *mrb, mrdb_state *mrdb)
 {
-	int32_t bpnum = 0;
-	int32_t i = 0;
-	int32_t ret = MRB_DEBUG_OK;
-	mrb_debug_breakpoint *bp_list;
-
-	bpnum = mrb_debug_get_breaknum(mrb, mrdb->dbg);
-	if (bpnum < 0) {
-		print_api_common_error(bpnum);
-		return;
-	}
-	else if (bpnum == 0) {
-		puts(BREAK_ERR_MSG_NOBPNO_INFOALL);
-		return;
-	}
-	bp_list = (mrb_debug_breakpoint*)mrb_malloc(mrb, bpnum * sizeof(mrb_debug_breakpoint));
-
-	ret = mrb_debug_get_break_all(mrb, mrdb->dbg, (uint32_t)bpnum, bp_list);
-	if (ret < 0) {
-		print_api_common_error(ret);
-		return;
-	}
-	puts(BREAK_INFO_MSG_HEADER);
-	for (i = 0; i < bpnum; i++) {
-		print_breakpoint(&bp_list[i]);
-	}
-
-	mrb_free(mrb, bp_list);
+  int32_t bpnum = 0;
+  int32_t i = 0;
+  int32_t ret = MRB_DEBUG_OK;
+  mrb_debug_breakpoint *bp_list;
+
+  bpnum = mrb_debug_get_breaknum(mrb, mrdb->dbg);
+  if (bpnum < 0) {
+    print_api_common_error(bpnum);
+    return;
+  }
+  else if (bpnum == 0) {
+    puts(BREAK_ERR_MSG_NOBPNO_INFOALL);
+    return;
+  }
+  bp_list = (mrb_debug_breakpoint*)mrb_malloc(mrb, bpnum * sizeof(mrb_debug_breakpoint));
+
+  ret = mrb_debug_get_break_all(mrb, mrdb->dbg, (uint32_t)bpnum, bp_list);
+  if (ret < 0) {
+    print_api_common_error(ret);
+    return;
+  }
+  puts(BREAK_INFO_MSG_HEADER);
+  for(i = 0 ; i < bpnum ; i++) {
+    print_breakpoint(&bp_list[i]);
+  }
+
+  mrb_free(mrb, bp_list);
 }
 
@@ -211,114 +210,114 @@
 info_break_select(mrb_state *mrb, mrdb_state *mrdb)
 {
-	int32_t ret = MRB_DEBUG_OK;
-	int32_t bpno = 0;
-	char* ps = mrdb->command;
-	mrb_debug_breakpoint bp;
-	mrb_bool isFirst = TRUE;
-	int32_t i;
-
-	for (i = 2; i < mrdb->wcnt; i++) {
-		ps = mrdb->words[i];
-		bpno = parse_breakpoint_no(ps);
-		if (bpno == 0) {
-			puts(BREAK_ERR_MSG_INVALIDBPNO_INFO);
-			break;
-		}
-
-		ret = mrb_debug_get_break(mrb, mrdb->dbg, bpno, &bp);
-		if (ret == MRB_DEBUG_BREAK_INVALID_NO) {
-			printf(BREAK_ERR_MSG_NOBPNO_INFO, bpno);
-			break;
-		}
-		else if (ret != MRB_DEBUG_OK) {
-			print_api_common_error(ret);
-			break;
-		}
-		else if (isFirst == TRUE) {
-			isFirst = FALSE;
-			puts(BREAK_INFO_MSG_HEADER);
-		}
-		print_breakpoint(&bp);
-	}
+  int32_t ret = MRB_DEBUG_OK;
+  int32_t bpno = 0;
+  char* ps = mrdb->command;
+  mrb_debug_breakpoint bp;
+  mrb_bool isFirst = TRUE;
+  int32_t i;
+
+  for(i=2; i<mrdb->wcnt; i++) {
+    ps = mrdb->words[i];
+    bpno = parse_breakpoint_no(ps);
+    if (bpno == 0) {
+      puts(BREAK_ERR_MSG_INVALIDBPNO_INFO);
+      break;
+    }
+
+    ret = mrb_debug_get_break(mrb, mrdb->dbg, bpno, &bp);
+    if (ret == MRB_DEBUG_BREAK_INVALID_NO) {
+      printf(BREAK_ERR_MSG_NOBPNO_INFO, bpno);
+      break;
+    }
+    else if (ret != MRB_DEBUG_OK) {
+      print_api_common_error(ret);
+      break;
+    }
+    else if (isFirst == TRUE) {
+      isFirst = FALSE;
+      puts(BREAK_INFO_MSG_HEADER);
+    }
+    print_breakpoint(&bp);
+  }
 }
 
 mrb_debug_bptype
-parse_breakcommand(mrdb_state *mrdb, const char **file, uint32_t *line, char **cname, char **method)
-{
-	mrb_debug_context *dbg = mrdb->dbg;
-	char *args;
-	char *body;
-	mrb_debug_bptype type;
-	uint32_t l;
-
-	if (mrdb->wcnt <= 1) {
-		puts(BREAK_ERR_MSG_BLANK);
-		return MRB_DEBUG_BPTYPE_NONE;
-	}
-
-	args = mrdb->words[1];
-	if ((body = strrchr(args, ':')) == NULL) {
-		body = args;
-		type = check_bptype(body);
-	}
-	else {
-		if (body == args) {
-			printf(BREAK_ERR_MSG_INVALIDSTR, args);
-			return MRB_DEBUG_BPTYPE_NONE;
-		}
-		*body = '\0';
-		type = check_bptype(++body);
-	}
-
-	switch (type) {
-	case MRB_DEBUG_BPTYPE_LINE:
-		STRTOUL(l, body);
-		if (l <= 65535) {
-			*line = l;
-			*file = (body == args) ? mrb_debug_get_filename(dbg->irep, (uint32_t)(dbg->pc - dbg->irep->iseq)) : args;
-		}
-		else {
-			puts(BREAK_ERR_MSG_RANGEOVER);
-			type = MRB_DEBUG_BPTYPE_NONE;
-		}
-		break;
-	case MRB_DEBUG_BPTYPE_METHOD:
-		if (body == args) {
-			/* method only */
-			if (ISUPPER(*body) || ISLOWER(*body) || (*body == '_')) {
-				*method = body;
-				*cname = NULL;
-			}
-			else {
-				printf(BREAK_ERR_MSG_INVALIDMETHOD, args);
-				type = MRB_DEBUG_BPTYPE_NONE;
-			}
-		}
-		else {
-			if (ISUPPER(*args)) {
-				switch (*body) {
-				case '@': case '$': case '?': case '.': case ',': case ':':
-				case ';': case '#': case '\\': case '\'': case '\"':
-					printf(BREAK_ERR_MSG_INVALIDMETHOD, body);
-					type = MRB_DEBUG_BPTYPE_NONE;
-					break;
-				default:
-					*method = body;
-					*cname = args;
-					break;
-				}
-			}
-			else {
-				printf(BREAK_ERR_MSG_INVALIDCLASS, args);
-				type = MRB_DEBUG_BPTYPE_NONE;
-			}
-		}
-		break;
-	case MRB_DEBUG_BPTYPE_NONE:
-	default:
-		break;
-	}
-
-	return type;
+parse_breakcommand(mrb_state *mrb, mrdb_state *mrdb, const char **file, uint32_t *line, char **cname, char **method)
+{
+  mrb_debug_context *dbg = mrdb->dbg;
+  char *args;
+  char *body;
+  mrb_debug_bptype type;
+  uint32_t l;
+
+  if (mrdb->wcnt <= 1) {
+    puts(BREAK_ERR_MSG_BLANK);
+    return MRB_DEBUG_BPTYPE_NONE;
+  }
+
+  args = mrdb->words[1];
+  if ((body = strrchr(args, ':')) == NULL) {
+    body = args;
+    type = check_bptype(body);
+  }
+  else {
+    if (body == args) {
+      printf(BREAK_ERR_MSG_INVALIDSTR, args);
+      return MRB_DEBUG_BPTYPE_NONE;
+    }
+    *body = '\0';
+    type = check_bptype(++body);
+  }
+
+  switch(type) {
+    case MRB_DEBUG_BPTYPE_LINE:
+      STRTOUL(l, body);
+      if (l <= 65535) {
+        *line = l;
+        *file = (body == args)? mrb_debug_get_filename(mrb, dbg->irep, dbg->pc - dbg->irep->iseq): args;
+      }
+      else {
+        puts(BREAK_ERR_MSG_RANGEOVER);
+        type = MRB_DEBUG_BPTYPE_NONE;
+      }
+      break;
+    case MRB_DEBUG_BPTYPE_METHOD:
+      if (body == args) {
+        /* method only */
+        if (ISUPPER(*body)||ISLOWER(*body)||(*body == '_')) {
+          *method = body;
+          *cname = NULL;
+        }
+        else {
+          printf(BREAK_ERR_MSG_INVALIDMETHOD, args);
+          type = MRB_DEBUG_BPTYPE_NONE;
+        }
+      }
+      else {
+        if (ISUPPER(*args)) {
+          switch(*body) {
+            case '@': case '$': case '?': case '.': case ',': case ':':
+            case ';': case '#': case '\\': case '\'': case '\"':
+            printf(BREAK_ERR_MSG_INVALIDMETHOD, body);
+            type = MRB_DEBUG_BPTYPE_NONE;
+            break;
+          default:
+            *method = body;
+            *cname = args;
+            break;
+          }
+        }
+        else {
+          printf(BREAK_ERR_MSG_INVALIDCLASS, args);
+          type = MRB_DEBUG_BPTYPE_NONE;
+        }
+      }
+      break;
+    case MRB_DEBUG_BPTYPE_NONE:
+    default:
+      break;
+  }
+
+  return type;
 }
 
@@ -326,62 +325,62 @@
 dbgcmd_break(mrb_state *mrb, mrdb_state *mrdb)
 {
-	mrb_debug_bptype type;
-	mrb_debug_context *dbg = mrdb->dbg;
-	const char *file = NULL;
-	uint32_t line = 0;
-	char *cname = NULL;
-	char *method = NULL;
-	int32_t ret;
-
-	type = parse_breakcommand(mrdb, &file, &line, &cname, &method);
-	switch (type) {
-	case MRB_DEBUG_BPTYPE_LINE:
-		ret = mrb_debug_set_break_line(mrb, dbg, file, line);
-		break;
-	case MRB_DEBUG_BPTYPE_METHOD:
-		ret = mrb_debug_set_break_method(mrb, dbg, cname, method);
-		break;
-	case MRB_DEBUG_BPTYPE_NONE:
-	default:
-		return DBGST_PROMPT;
-	}
-
-	if (ret >= 0) {
-		if (type == MRB_DEBUG_BPTYPE_LINE) {
-			printf(BREAK_SET_MSG_LINE, ret, file, line);
-		}
-		else if ((type == MRB_DEBUG_BPTYPE_METHOD) && (cname == NULL)) {
-			printf(BREAK_SET_MSG_METHOD, ret, method);
-		}
-		else {
-			printf(BREAK_SET_MSG_CLASS_METHOD, ret, cname, method);
-		}
-	}
-	else {
-		switch (ret) {
-		case MRB_DEBUG_BREAK_INVALID_LINENO:
-			printf(BREAK_ERR_MSG_INVALIDLINENO, line, file);
-			break;
-		case MRB_DEBUG_BREAK_INVALID_FILE:
-			printf(BREAK_ERR_MSG_INVALIDFILE, file);
-			break;
-		case MRB_DEBUG_BREAK_NUM_OVER:
-			puts(BREAK_ERR_MSG_NUMOVER);
-			break;
-		case MRB_DEBUG_BREAK_NO_OVER:
-			puts(BREAK_ERR_MSG_NOOVER);
-			break;
-		case MRB_DEBUG_INVALID_ARGUMENT:
-			puts(BREAK_ERR_MSG_INVALIDARG);
-			break;
-		case MRB_DEBUG_NOBUF:
-			puts("T.B.D.");
-			break;
-		default:
-			break;
-		}
-	}
-
-	return DBGST_PROMPT;
+  mrb_debug_bptype type;
+  mrb_debug_context *dbg = mrdb->dbg;
+  const char *file = NULL;
+  uint32_t line = 0;
+  char *cname = NULL;
+  char *method = NULL;
+  int32_t ret;
+
+  type = parse_breakcommand(mrb, mrdb, &file, &line, &cname, &method);
+  switch (type) {
+    case MRB_DEBUG_BPTYPE_LINE:
+      ret = mrb_debug_set_break_line(mrb, dbg, file, line);
+      break;
+    case MRB_DEBUG_BPTYPE_METHOD:
+      ret = mrb_debug_set_break_method(mrb, dbg, cname, method);
+      break;
+    case MRB_DEBUG_BPTYPE_NONE:
+    default:
+      return DBGST_PROMPT;
+  }
+
+  if (ret >= 0) {
+    if (type == MRB_DEBUG_BPTYPE_LINE) {
+      printf(BREAK_SET_MSG_LINE, ret, file, line);
+    }
+    else if ((type == MRB_DEBUG_BPTYPE_METHOD)&&(cname == NULL)) {
+      printf(BREAK_SET_MSG_METHOD, ret, method);
+    }
+    else {
+      printf(BREAK_SET_MSG_CLASS_METHOD, ret, cname, method);
+    }
+  }
+  else {
+    switch (ret) {
+      case MRB_DEBUG_BREAK_INVALID_LINENO:
+        printf(BREAK_ERR_MSG_INVALIDLINENO, line, file);
+        break;
+      case MRB_DEBUG_BREAK_INVALID_FILE:
+        printf(BREAK_ERR_MSG_INVALIDFILE, file);
+        break;
+      case MRB_DEBUG_BREAK_NUM_OVER:
+        puts(BREAK_ERR_MSG_NUMOVER);
+        break;
+      case MRB_DEBUG_BREAK_NO_OVER:
+        puts(BREAK_ERR_MSG_NOOVER);
+        break;
+      case MRB_DEBUG_INVALID_ARGUMENT:
+        puts(BREAK_ERR_MSG_INVALIDARG);
+        break;
+      case MRB_DEBUG_NOBUF:
+        puts("T.B.D.");
+        break;
+      default:
+        break;
+    }
+  }
+
+  return DBGST_PROMPT;
 }
 
@@ -389,12 +388,12 @@
 dbgcmd_info_break(mrb_state *mrb, mrdb_state *mrdb)
 {
-	if (mrdb->wcnt == 2) {
-		info_break_all(mrb, mrdb);
-	}
-	else {
-		info_break_select(mrb, mrdb);
-	}
-
-	return DBGST_PROMPT;
+  if (mrdb->wcnt == 2) {
+    info_break_all(mrb, mrdb);
+  }
+  else {
+    info_break_select(mrb, mrdb);
+  }
+
+  return DBGST_PROMPT;
 }
 
@@ -402,12 +401,12 @@
 dbgcmd_delete(mrb_state *mrb, mrdb_state *mrdb)
 {
-	mrb_bool ret = FALSE;
-
-	ret = exe_set_command_all(mrb, mrdb, mrb_debug_delete_break_all);
-	if (ret != TRUE) {
-		exe_set_command_select(mrb, mrdb, mrb_debug_delete_break);
-	}
-
-	return DBGST_PROMPT;
+  mrb_bool ret = FALSE;
+
+  ret = exe_set_command_all(mrb, mrdb, mrb_debug_delete_break_all);
+  if (ret != TRUE) {
+    exe_set_command_select(mrb, mrdb, mrb_debug_delete_break);
+  }
+
+  return DBGST_PROMPT;
 }
 
@@ -415,12 +414,12 @@
 dbgcmd_enable(mrb_state *mrb, mrdb_state *mrdb)
 {
-	mrb_bool ret = FALSE;
-
-	ret = exe_set_command_all(mrb, mrdb, mrb_debug_enable_break_all);
-	if (ret != TRUE) {
-		exe_set_command_select(mrb, mrdb, mrb_debug_enable_break);
-	}
-
-	return DBGST_PROMPT;
+  mrb_bool ret = FALSE;
+
+  ret = exe_set_command_all(mrb, mrdb, mrb_debug_enable_break_all);
+  if (ret != TRUE) {
+    exe_set_command_select(mrb, mrdb, mrb_debug_enable_break);
+  }
+
+  return DBGST_PROMPT;
 }
 
@@ -428,10 +427,10 @@
 dbgcmd_disable(mrb_state *mrb, mrdb_state *mrdb)
 {
-	mrb_bool ret = FALSE;
-
-	ret = exe_set_command_all(mrb, mrdb, mrb_debug_disable_break_all);
-	if (ret != TRUE) {
-		exe_set_command_select(mrb, mrdb, mrb_debug_disable_break);
-	}
-	return DBGST_PROMPT;
-}
+  mrb_bool ret = FALSE;
+
+  ret = exe_set_command_all(mrb, mrdb, mrb_debug_disable_break_all);
+  if (ret != TRUE) {
+    exe_set_command_select(mrb, mrdb, mrb_debug_disable_break);
+  }
+  return DBGST_PROMPT;
+}
Index: /EcnlProtoTool/trunk/prototool/src/cmdmisc.c
===================================================================
--- /EcnlProtoTool/trunk/prototool/src/cmdmisc.c	(revision 438)
+++ /EcnlProtoTool/trunk/prototool/src/cmdmisc.c	(revision 439)
@@ -4,130 +4,135 @@
 */
 
+#include <ctype.h>
 #include <stdlib.h>
 #include <string.h>
 
-#include "mruby/compile.h"
-#include "mrdb.h"
-
-typedef struct help_msg
-{
-	const char *cmd1;
-	const char *cmd2;
-	const char *short_msg;
-	const char *long_msg;
+#include "apilist.h"
+#include <mruby/compile.h>
+
+typedef struct help_msg {
+  const char *cmd1;
+  const char *cmd2;
+  const char *short_msg;
+  const char *long_msg;
 } help_msg;
 
 static help_msg help_msg_list[] = {
   {
-	"b[reak]", NULL, "Set breakpoint",
-	"Usage: break [file:]line\n"
-	"       break [class:]method\n"
-	"\n"
-	"Set breakpoint at specified line or method.\n"
-	"If \'[file:]line\' is specified, break at start of code for that line (in a file).\n"
-	"If \'[class:]method\' is specified, break at start of code for that method (of the class).\n"
-  },
-  {
-	"c[ontinue]", NULL, "Continue program being debugged",
-	"Usage: continue [N]\n"
-	"\n"
-	"Continue program stopped by a breakpoint.\n"
-	"If N, which is non negative value, is passed,\n"
-	"proceed program until the N-th breakpoint is coming.\n"
-	"If N is not passed, N is assumed 1.\n"
-  },
-  {
-	"d[elete]", NULL, "Delete some breakpoints",
-	"Usage: delete [bpno1 [bpno2 [... [bpnoN]]]]\n"
-	"\n"
-	"Delete some breakpoints.\n"
-	"Arguments are breakpoint numbers with spaces in between.\n"
-	"To delete all breakpoints, give no argument.\n"
-  },
-  {
-	"dis[able]", NULL, "Disable some breakpoints",
-	"Usage: disable [bpno1 [bpno2 [... [bpnoN]]]]\n"
-	"\n"
-	"Disable some breakpoints.\n"
-	"Arguments are breakpoint numbers with spaces in between.\n"
-	"To disable all breakpoints, give no argument.\n"
-  },
-  {
-	"en[able]", NULL, "Enable some breakpoints",
-	"Usage: enable [bpno1 [bpno2 [... [bpnoN]]]]\n"
-	"\n"
-	"Enable some breakpoints.\n"
-	"Arguments are breakpoint numbers with spaces in between.\n"
-	"To enable all breakpoints, give no argument.\n"
-  },
-  {
-	"ev[al]", NULL, "Evaluate expression",
-	"Usage: eval expr\n"
-	"\n"
-	"It evaluates and prints the value of the mruby expression.\n"
-	"This is equivalent to the \'print\' command.\n"
-  },
-  {
-	"h[elp]", NULL, "Print this help",
-	"Usage: help [command]\n"
-	"\n"
-	"With no arguments, help displays a short list of commands.\n"
-	"With a command name as help argument, help displays how to use that command.\n"
-  },
-  {
-	"i[nfo]", "b[reakpoints]", "Status of breakpoints",
-	"Usage: info breakpoints [bpno1 [bpno2 [... [bpnoN]]]]\n"
-	"\n"
-	"Status of specified breakpoints (all user-settable breakpoints if no argument).\n"
-	"Arguments are breakpoint numbers with spaces in between.\n"
-  },
-  {
-	"l[ist]", NULL, "List specified line",
-	"Usage: list\n"
-	"       list first[,last]\n"
-	"       list filename:first[,last]\n"
-	"\n"
-	"Print lines from a source file.\n"
-	"\n"
-	"With first and last, list prints lines from first to last.\n"
-	"When last is empty, it stands for ten lines away from first.\n"
-	"With filename, list prints lines in the specified source file.\n"
-  },
-  {
-	"p[rint]", NULL, "Print value of expression",
-	"Usage: print expr\n"
-	"\n"
-	"It evaluates and prints the value of the mruby expression.\n"
-	"This is equivalent to the \'eval\' command.\n"
-  },
-  {
-	"q[uit]", NULL, "Exit mrdb",
-	"Usage: quit\n"
-	"\n"
-	"Exit mrdb.\n"
-  },
-  {
-	"r[un]", NULL, "Start debugged program",
-	"Usage: run\n"
-	"\n"
-	"Start debugged program.\n"
-  },
-  {
-	"s[tep]", NULL, "Step program until it reaches a different source line",
-	"Usage: step\n"
-	"\n"
-	"Step program until it reaches a different source line.\n"
+    "b[reak]", NULL, "Set breakpoint",
+    "Usage: break [file:]line\n"
+    "       break [class:]method\n"
+    "\n"
+    "Set breakpoint at specified line or method.\n"
+    "If \'[file:]line\' is specified, break at start of code for that line (in a file).\n"
+    "If \'[class:]method\' is specified, break at start of code for that method (of the class).\n"
+  },
+  {
+    "c[ontinue]", NULL, "Continue program being debugged",
+    "Usage: continue [N]\n"
+    "\n"
+    "Continue program stopped by a breakpoint.\n"
+    "If N, which is non negative value, is passed,\n"
+    "proceed program until the N-th breakpoint is coming.\n"
+    "If N is not passed, N is assumed 1.\n"
+  },
+  {
+    "d[elete]", NULL, "Delete some breakpoints",
+    "Usage: delete [bpno1 [bpno2 [... [bpnoN]]]]\n"
+    "\n"
+    "Delete some breakpoints.\n"
+    "Arguments are breakpoint numbers with spaces in between.\n"
+    "To delete all breakpoints, give no argument.\n"
+  },
+  {
+    "dis[able]", NULL, "Disable some breakpoints",
+    "Usage: disable [bpno1 [bpno2 [... [bpnoN]]]]\n"
+    "\n"
+    "Disable some breakpoints.\n"
+    "Arguments are breakpoint numbers with spaces in between.\n"
+    "To disable all breakpoints, give no argument.\n"
+  },
+  {
+    "en[able]", NULL, "Enable some breakpoints",
+    "Usage: enable [bpno1 [bpno2 [... [bpnoN]]]]\n"
+    "\n"
+    "Enable some breakpoints.\n"
+    "Arguments are breakpoint numbers with spaces in between.\n"
+    "To enable all breakpoints, give no argument.\n"
+  },
+  {
+    "ev[al]", NULL, "Evaluate expression",
+    "Usage: eval expr\n"
+    "\n"
+    "It evaluates and prints the value of the mruby expression.\n"
+    "This is equivalent to the \'print\' command.\n"
+  },
+  {
+    "h[elp]", NULL, "Print this help",
+    "Usage: help [command]\n"
+    "\n"
+    "With no arguments, help displays a short list of commands.\n"
+    "With a command name as help argument, help displays how to use that command.\n"
+  },
+  {
+    "i[nfo]", "b[reakpoints]", "Status of breakpoints",
+    "Usage: info breakpoints [bpno1 [bpno2 [... [bpnoN]]]]\n"
+    "\n"
+    "Status of specified breakpoints (all user-settable breakpoints if no argument).\n"
+    "Arguments are breakpoint numbers with spaces in between.\n"
+  },
+  {
+    "i[nfo]", "l[ocals]", "Print name of local variables",
+    "Usage: info locals\n"
+    "\n"
+    "Print name of local variables.\n"
+  },
+  {
+    "l[ist]", NULL, "List specified line",
+    "Usage: list\n"
+    "       list first[,last]\n"
+    "       list filename:first[,last]\n"
+    "\n"
+    "Print lines from a source file.\n"
+    "\n"
+    "With first and last, list prints lines from first to last.\n"
+    "When last is empty, it stands for ten lines away from first.\n"
+    "With filename, list prints lines in the specified source file.\n"
+  },
+  {
+    "p[rint]", NULL, "Print value of expression",
+    "Usage: print expr\n"
+    "\n"
+    "It evaluates and prints the value of the mruby expression.\n"
+    "This is equivalent to the \'eval\' command.\n"
+  },
+  {
+    "q[uit]", NULL, "Exit mrdb",
+    "Usage: quit\n"
+    "\n"
+    "Exit mrdb.\n"
+  },
+  {
+    "r[un]", NULL, "Start debugged program",
+    "Usage: run\n"
+    "\n"
+    "Start debugged program.\n"
+  },
+  {
+    "s[tep]", NULL, "Step program until it reaches a different source line",
+    "Usage: step\n"
+    "\n"
+    "Step program until it reaches a different source line.\n"
   },
   { NULL, NULL, NULL, NULL }
 };
 
-typedef struct listcmd_parser_state
-{
-	mrb_bool parse_error;
-	mrb_bool has_line_min;
-	mrb_bool has_line_max;
-	char *filename;
-	uint16_t line_min;
-	uint16_t line_max;
+typedef struct listcmd_parser_state {
+  mrb_bool parse_error;
+  mrb_bool has_line_min;
+  mrb_bool has_line_max;
+  char *filename;
+  uint16_t line_min;
+  uint16_t line_max;
 } listcmd_parser_state;
 
@@ -135,7 +140,7 @@
 listcmd_parser_state_new(mrb_state *mrb)
 {
-	listcmd_parser_state *st = (listcmd_parser_state *)mrb_malloc(mrb, sizeof(listcmd_parser_state));
-	memset(st, 0, sizeof(listcmd_parser_state));
-	return st;
+  listcmd_parser_state *st = (listcmd_parser_state*)mrb_malloc(mrb, sizeof(listcmd_parser_state));
+  memset(st, 0, sizeof(listcmd_parser_state));
+  return st;
 }
 
@@ -143,10 +148,10 @@
 listcmd_parser_state_free(mrb_state *mrb, listcmd_parser_state *st)
 {
-	if (st != NULL) {
-		if (st->filename != NULL) {
-			mrb_free(mrb, st->filename);
-		}
-		mrb_free(mrb, st);
-	}
+  if (st != NULL) {
+    if (st->filename != NULL) {
+      mrb_free(mrb, st->filename);
+    }
+    mrb_free(mrb, st);
+  }
 }
 
@@ -154,19 +159,19 @@
 parse_uint(char **sp, uint16_t *n)
 {
-	char *p;
-	int i;
-
-	if (*sp == NULL || **sp == '\0') {
-		return FALSE;
-	}
-
-	for (p = *sp; *p != '\0' && ISDIGIT(*p); p++);
-
-	if (p != *sp && (i = atoi(*sp)) >= 0) {
-		*n = (uint16_t)i;
-		*sp = p;
-		return TRUE;
-	}
-	return FALSE;
+  char *p;
+  int i;
+
+  if (*sp == NULL || **sp == '\0') {
+    return FALSE;
+  }
+
+  for (p = *sp; *p != '\0' && ISDIGIT(*p); p++) ;
+
+  if (p != *sp && (i = atoi(*sp)) >= 0) {
+    *n = (uint16_t)i;
+    *sp = p;
+    return TRUE;
+  }
+  return FALSE;
 }
 
@@ -174,9 +179,9 @@
 skip_char(char **sp, char c)
 {
-	if (*sp != NULL && **sp == c) {
-		++*sp;
-		return TRUE;
-	}
-	return FALSE;
+  if (*sp != NULL && **sp == c) {
+    ++*sp;
+    return TRUE;
+  }
+  return FALSE;
 }
 
@@ -184,28 +189,28 @@
 parse_lineno(mrb_state *mrb, char **sp, listcmd_parser_state *st)
 {
-	if (*sp == NULL || **sp == '\0') {
-		return FALSE;
-	}
-
-	st->has_line_min = FALSE;
-	st->has_line_max = FALSE;
-
-	if (parse_uint(sp, &st->line_min)) {
-		st->has_line_min = TRUE;
-	}
-	else {
-		return FALSE;
-	}
-
-	if (skip_char(sp, ',')) {
-		if (parse_uint(sp, &st->line_max)) {
-			st->has_line_max = TRUE;
-		}
-		else {
-			st->parse_error = TRUE;
-			return FALSE;
-		}
-	}
-	return TRUE;
+  if (*sp == NULL || **sp == '\0') {
+    return FALSE;
+  }
+
+  st->has_line_min = FALSE;
+  st->has_line_max = FALSE;
+
+  if (parse_uint(sp, &st->line_min)) {
+    st->has_line_min = TRUE;
+  }
+  else {
+    return FALSE;
+  }
+
+  if (skip_char(sp, ',')) {
+    if (parse_uint(sp, &st->line_max)) {
+      st->has_line_max = TRUE;
+    }
+    else {
+      st->parse_error = TRUE;
+      return FALSE;
+    }
+  }
+  return TRUE;
 }
 
@@ -213,29 +218,29 @@
 parse_filename(mrb_state *mrb, char **sp, listcmd_parser_state *st)
 {
-	char *p;
-	int len;
-
-	if (st->filename != NULL) {
-		mrb_free(mrb, st->filename);
-		st->filename = NULL;
-	}
-
-	if ((p = strchr(*sp, ':')) != NULL) {
-		len = p - *sp;
-	}
-	else {
-		len = strlen(*sp);
-	}
-
-	if (len > 0) {
-		st->filename = mrb_malloc(mrb, len + 1);
-		strlcpy(st->filename, *sp, len + 1);
-		st->filename[len] = '\0';
-		*sp += len;
-		return TRUE;
-	}
-	else {
-		return FALSE;
-	}
+  char *p;
+  int len;
+
+  if (st->filename != NULL) {
+    mrb_free(mrb, st->filename);
+    st->filename = NULL;
+  }
+
+  if ((p = strchr(*sp, ':')) != NULL) {
+    len = p - *sp;
+  }
+  else {
+    len = strlen(*sp);
+  }
+
+  if (len > 0) {
+    st->filename = (char*)mrb_malloc(mrb, len + 1);
+    strncpy(st->filename, *sp, len);
+    st->filename[len] = '\0';
+    *sp += len;
+    return TRUE;
+  }
+  else {
+    return FALSE;
+  }
 }
 
@@ -243,26 +248,25 @@
 replace_ext(mrb_state *mrb, const char *filename, const char *ext)
 {
-	size_t len, len2;
-	const char *p;
-	char *s;
-
-	if (filename == NULL) {
-		return NULL;
-	}
-
-	if ((p = strrchr(filename, '.')) != NULL && strchr(p, '/') == NULL) {
-		len = p - filename;
-	}
-	else {
-		len = strlen(filename);
-	}
-
-	len2 = len + strlen(ext) + 1;
-	s = mrb_malloc(mrb, len2);
-	memset(s, '\0', len2);
-	strlcpy(s, filename, len);
-	strlcat(s, ext, len2);
-
-	return s;
+  size_t len;
+  const char *p;
+  char *s;
+
+  if (filename == NULL) {
+    return NULL;
+  }
+
+  if ((p = strrchr(filename, '.')) != NULL && strchr(p, '/') == NULL) {
+    len = p - filename;
+  }
+  else {
+    len = strlen(filename);
+  }
+
+  s = (char*)mrb_malloc(mrb, len + strlen(ext) + 1);
+  memset(s, '\0', len + strlen(ext) + 1);
+  strncpy(s, filename, len);
+  strcat(s, ext);
+
+  return s;
 }
 
@@ -270,58 +274,58 @@
 parse_listcmd_args(mrb_state *mrb, mrdb_state *mrdb, listcmd_parser_state *st)
 {
-	char *p;
-
-	switch (mrdb->wcnt) {
-	case 2:
-		p = mrdb->words[1];
-
-		/* mrdb->words[1] ::= <lineno> | <filename> ':' <lineno> | <filename> */
-		if (!parse_lineno(mrb, &p, st)) {
-			if (parse_filename(mrb, &p, st)) {
-				if (skip_char(&p, ':')) {
-					if (!parse_lineno(mrb, &p, st)) {
-						st->parse_error = TRUE;
-					}
-				}
-			}
-			else {
-				st->parse_error = TRUE;
-			}
-		}
-		if (*p != '\0') {
-			st->parse_error = TRUE;
-		}
-		break;
-	case 1:
-	case 0:
-		/* do nothing */
-		break;
-	default:
-		st->parse_error = TRUE;
-		printf("too many arguments\n");
-		break;
-	}
-
-	if (!st->parse_error) {
-		if (!st->has_line_min) {
-			st->line_min = (!st->filename && mrdb->dbg->prvline > 0) ? mrdb->dbg->prvline : 1;
-		}
-
-		if (!st->has_line_max) {
-			st->line_max = st->line_min + 9;
-		}
-
-		if (st->filename == NULL) {
-			if (mrdb->dbg->prvfile && strcmp(mrdb->dbg->prvfile, "-")) {
-				st->filename = replace_ext(mrb, mrdb->dbg->prvfile, ".rb");
-			}
-		}
-	}
-
-	if (st->parse_error || st->filename == NULL) {
-		return FALSE;
-	}
-
-	return TRUE;
+  char *p;
+
+  switch (mrdb->wcnt) {
+  case 2:
+    p = mrdb->words[1];
+
+    /* mrdb->words[1] ::= <lineno> | <filename> ':' <lineno> | <filename> */
+    if (!parse_lineno(mrb, &p, st)) {
+      if (parse_filename(mrb, &p, st)) {
+        if (skip_char(&p, ':')) {
+          if (!parse_lineno(mrb, &p, st)) {
+            st->parse_error = TRUE;
+          }
+        }
+      }
+      else {
+        st->parse_error = TRUE;
+      }
+    }
+    if (*p != '\0') {
+      st->parse_error = TRUE;
+    }
+    break;
+  case 1:
+  case 0:
+    /* do nothing */
+    break;
+  default:
+    st->parse_error = TRUE;
+    printf("too many arguments\n");
+    break;
+  }
+
+  if (!st->parse_error) {
+    if (!st->has_line_min) {
+      st->line_min = (!st->filename && mrdb->dbg->prvline > 0) ? mrdb->dbg->prvline : 1;
+    }
+
+    if (!st->has_line_max) {
+      st->line_max = st->line_min + 9;
+    }
+
+    if (st->filename == NULL) {
+      if (mrdb->dbg->prvfile && strcmp(mrdb->dbg->prvfile, "-")) {
+        st->filename = replace_ext(mrb, mrdb->dbg->prvfile, ".rb");
+      }
+    }
+  }
+
+  if (st->parse_error || st->filename == NULL) {
+    return FALSE;
+  }
+
+  return TRUE;
 }
 
@@ -329,31 +333,31 @@
 check_cmd_pattern(const char *pattern, const char *cmd)
 {
-	const char *lbracket, *rbracket, *p, *q;
-
-	if (pattern == NULL && cmd == NULL) {
-		return TRUE;
-	}
-	if (pattern == NULL || cmd == NULL) {
-		return FALSE;
-	}
-	if ((lbracket = strchr(pattern, '[')) == NULL) {
-		return !strcmp(pattern, cmd);
-	}
-	if ((rbracket = strchr(pattern, ']')) == NULL) {
-		return FALSE;
-	}
-	if (strncmp(pattern, cmd, lbracket - pattern)) {
-		return FALSE;
-	}
-
-	p = lbracket + 1;
-	q = (char *)cmd + (lbracket - pattern);
-
-	for (; p < rbracket && *q != '\0'; p++, q++) {
-		if (*p != *q) {
-			break;
-		}
-	}
-	return *q == '\0';
+  const char *lbracket, *rbracket, *p, *q;
+
+  if (pattern == NULL && cmd == NULL) {
+    return TRUE;
+  }
+  if (pattern == NULL || cmd == NULL) {
+    return FALSE;
+  }
+  if ((lbracket = strchr(pattern, '[')) == NULL) {
+    return !strcmp(pattern, cmd);
+  }
+  if ((rbracket = strchr(pattern, ']')) == NULL) {
+    return FALSE;
+  }
+  if (strncmp(pattern, cmd, lbracket - pattern)) {
+    return FALSE;
+  }
+
+  p = lbracket + 1;
+  q = (char *)cmd + (lbracket - pattern);
+
+  for ( ; p < rbracket && *q != '\0'; p++, q++) {
+    if (*p != *q) {
+      break;
+    }
+  }
+  return *q == '\0';
 }
 
@@ -361,15 +365,15 @@
 get_help_msg(char *cmd1, char *cmd2)
 {
-	help_msg *p;
-
-	if (cmd1 == NULL) {
-		return NULL;
-	}
-	for (p = help_msg_list; p->cmd1 != NULL; p++) {
-		if (check_cmd_pattern(p->cmd1, cmd1) && check_cmd_pattern(p->cmd2, cmd2)) {
-			return p;
-		}
-	}
-	return NULL;
+  help_msg *p;
+
+  if (cmd1 == NULL) {
+    return NULL;
+  }
+  for (p = help_msg_list; p->cmd1 != NULL; p++) {
+    if (check_cmd_pattern(p->cmd1, cmd1) && check_cmd_pattern(p->cmd2, cmd2)) {
+      return p;
+    }
+  }
+  return NULL;
 }
 
@@ -377,17 +381,17 @@
 show_short_help(void)
 {
-	help_msg *p;
-
-	printf("Commands\n");
-
-	for (p = help_msg_list; p->cmd1 != NULL; p++) {
-		if (p->cmd2 == NULL) {
-			printf("  %s -- %s\n", p->cmd1, p->short_msg);
-		}
-		else {
-			printf("  %s %s -- %s\n", p->cmd1, p->cmd2, p->short_msg);
-		}
-	}
-	return TRUE;
+  help_msg *p;
+
+  printf("Commands\n");
+
+  for (p = help_msg_list; p->cmd1 != NULL; p++) {
+    if (p->cmd2 == NULL) {
+      printf("  %s -- %s\n", p->cmd1, p->short_msg);
+    }
+    else {
+      printf("  %s %s -- %s\n", p->cmd1, p->cmd2, p->short_msg);
+    }
+  }
+  return TRUE;
 }
 
@@ -395,11 +399,32 @@
 show_long_help(char *cmd1, char *cmd2)
 {
-	help_msg *help;
-
-	if ((help = get_help_msg(cmd1, cmd2)) == NULL) {
-		return FALSE;
-	}
-	printf("%s", help->long_msg);
-	return TRUE;
+  help_msg *help;
+
+  if ((help = get_help_msg(cmd1, cmd2)) == NULL) {
+    return FALSE;
+  }
+  printf("%s", help->long_msg);
+  return TRUE;
+}
+
+dbgcmd_state
+dbgcmd_list(mrb_state *mrb, mrdb_state *mrdb)
+{
+  char *filename;
+  listcmd_parser_state *st = listcmd_parser_state_new(mrb);
+
+  if (parse_listcmd_args(mrb, mrdb, st)) {
+    if ((filename = mrb_debug_get_source(mrb, mrdb, mrdb->srcpath, st->filename)) == NULL) {
+      filename = st->filename;
+    }
+    mrb_debug_list(mrb, mrdb->dbg, filename, st->line_min, st->line_max);
+
+    if (filename != NULL && filename != st->filename) {
+      mrb_free(mrb, filename);
+    }
+    listcmd_parser_state_free(mrb, st);
+  }
+
+  return DBGST_PROMPT;
 }
 
@@ -407,32 +432,32 @@
 dbgcmd_help(mrb_state *mrb, mrdb_state *mrdb)
 {
-	mrb_bool is_valid;
-	int i;
-
-	switch (mrdb->wcnt) {
-	case 0:
-	case 1:
-		is_valid = show_short_help();
-		break;
-	case 2:
-		is_valid = show_long_help(mrdb->words[1], NULL);
-		break;
-	case 3:
-		is_valid = show_long_help(mrdb->words[1], mrdb->words[2]);
-		break;
-	default:
-		is_valid = FALSE;
-		break;
-	}
-
-	if (!is_valid) {
-		printf("Invalid command \"");
-		for (i = 1; i < mrdb->wcnt; i++) {
-			printf("%s%s", i == 1 ? "" : " ", mrdb->words[i]);
-		}
-		printf("\". Try \"help\".\n");
-	}
-
-	return DBGST_PROMPT;
+  mrb_bool is_valid;
+  int i;
+
+  switch (mrdb->wcnt) {
+  case 0:
+  case 1:
+    is_valid = show_short_help();
+    break;
+  case 2:
+    is_valid = show_long_help(mrdb->words[1], NULL);
+    break;
+  case 3:
+    is_valid = show_long_help(mrdb->words[1], mrdb->words[2]);
+    break;
+  default:
+    is_valid = FALSE;
+    break;
+  }
+
+  if (!is_valid) {
+    printf("Invalid command \"");
+    for (i = 1; i < mrdb->wcnt; i++) {
+      printf("%s%s", i == 1 ? "" : " ", mrdb->words[i]);
+    }
+    printf("\". Try \"help\".\n");
+  }
+
+  return DBGST_PROMPT;
 }
 
@@ -440,44 +465,44 @@
 dbgcmd_quit(mrb_state *mrb, mrdb_state *mrdb)
 {
-	switch (mrdb->dbg->xm) {
-	case DBG_RUN:
-	case DBG_STEP:
-	case DBG_NEXT:
-		while (1) {
-			char c;
-			int buf;
-
-			printf("The program is running.  Exit anyway? (y or n) ");
-			fflush(stdout);
-
-			if ((buf = getchar()) == EOF) {
-				InterlockedExchange(&mrdb->dbg->xm, DBG_QUIT);
-				break;
-			}
-			c = buf;
-			while (buf != '\n' && (buf = getchar()) != EOF);
-
-			if (c == 'y' || c == 'Y') {
-				InterlockedExchange(&mrdb->dbg->xm, DBG_QUIT);
-				break;
-			}
-			else if (c == 'n' || c == 'N') {
-				break;
-			}
-			else {
-				printf("Please answer y or n.\n");
-			}
-		}
-		break;
-	default:
-		InterlockedExchange(&mrdb->dbg->xm, DBG_QUIT);
-		break;
-	}
-
-	if (mrdb->dbg->xm == DBG_QUIT) {
-		struct RClass *exc;
-		exc = mrb_define_class(mrb, "DebuggerExit", mrb_class_get(mrb, "Exception"));
-		mrb_raise(mrb, exc, "Exit mrdb.");
-	}
-	return DBGST_PROMPT;
-}
+  switch (mrdb->dbg->xm) {
+  case DBG_RUN:
+  case DBG_STEP:
+  case DBG_NEXT:
+    while (1) {
+      char c;
+      int buf;
+
+      printf("The program is running.  Exit anyway? (y or n) ");
+      fflush(stdout);
+
+      if ((buf = getchar()) == EOF) {
+        mrdb->dbg->xm = DBG_QUIT;
+        break;
+      }
+      c = buf;
+      while (buf != '\n' && (buf = getchar()) != EOF) ;
+
+      if (c == 'y' || c == 'Y') {
+        mrdb->dbg->xm = DBG_QUIT;
+        break;
+      }
+      else if (c == 'n' || c == 'N') {
+        break;
+      }
+      else {
+        printf("Please answer y or n.\n");
+      }
+    }
+    break;
+  default:
+    mrdb->dbg->xm = DBG_QUIT;
+    break;
+  }
+
+  if (mrdb->dbg->xm == DBG_QUIT) {
+    struct RClass *exc;
+    exc = mrb_define_class(mrb, "DebuggerExit", mrb->eException_class);
+    mrb_raise(mrb, exc, "Exit mrdb.");
+  }
+  return DBGST_PROMPT;
+}
Index: /EcnlProtoTool/trunk/prototool/src/cmdprint.c
===================================================================
--- /EcnlProtoTool/trunk/prototool/src/cmdprint.c	(revision 438)
+++ /EcnlProtoTool/trunk/prototool/src/cmdprint.c	(revision 439)
@@ -4,13 +4,12 @@
 */
 
-#include <stdlib.h>
-
+#include <string.h>
 #include "mrdb.h"
-#include "mruby/value.h"
-#include "mruby/class.h"
-#include "mruby/compile.h"
-#include "mruby/error.h"
-#include "mruby/numeric.h"
-#include "mruby/string.h"
+#include <mruby/value.h>
+#include <mruby/class.h>
+#include <mruby/compile.h>
+#include <mruby/error.h>
+#include <mruby/numeric.h>
+#include <mruby/string.h>
 #include "apiprint.h"
 
@@ -18,37 +17,37 @@
 dbgcmd_print(mrb_state *mrb, mrdb_state *mrdb)
 {
-	mrb_value expr;
-	mrb_value result;
-	mrb_value s;
-	uint8_t wcnt;
-	int ai;
+  mrb_value expr;
+  mrb_value result;
+  uint8_t wcnt;
+  int ai;
 
-	if (mrdb->wcnt <= 1) {
-		puts("Parameter not specified.");
-		return DBGST_PROMPT;
-	}
+  if (mrdb->wcnt <= 1) {
+    puts("Parameter not specified.");
+    return DBGST_PROMPT;
+  }
 
-	ai = mrb_gc_arena_save(mrb);
+  ai = mrb_gc_arena_save(mrb);
 
-	/* eval expr */
-	expr = mrb_str_new_cstr(mrb, NULL);
-	for (wcnt = 1; wcnt < mrdb->wcnt; wcnt++) {
-		expr = mrb_str_cat_lit(mrb, expr, " ");
-		expr = mrb_str_cat_cstr(mrb, expr, mrdb->words[wcnt]);
-	}
+  /* eval expr */
+  expr = mrb_str_new_cstr(mrb, NULL);
+  for (wcnt=1; wcnt<mrdb->wcnt; wcnt++) {
+    expr = mrb_str_cat_lit(mrb, expr, " ");
+    expr = mrb_str_cat_cstr(mrb, expr, mrdb->words[wcnt]);
+  }
 
-	result = mrb_debug_eval(mrb, mrdb->dbg, RSTRING_PTR(expr), RSTRING_LEN(expr), NULL);
+  result = mrb_debug_eval(mrb, mrdb->dbg, RSTRING_PTR(expr), RSTRING_LEN(expr), NULL, 0);
 
-	/* $print_no = result */
-	s = mrb_str_cat_lit(mrb, result, "\0");
-	printf("$%lu = %s\n", (unsigned long)mrdb->print_no++, RSTRING_PTR(s));
+  /* $print_no = result */
+  printf("$%lu = ", (unsigned long)mrdb->print_no++);
+  fwrite(RSTRING_PTR(result), RSTRING_LEN(result), 1, stdout);
+  putc('\n', stdout);
 
-	if (mrdb->print_no == 0) {
-		mrdb->print_no = 1;
-	}
+  if (mrdb->print_no == 0) {
+    mrdb->print_no = 1;
+  }
 
-	mrb_gc_arena_restore(mrb, ai);
+  mrb_gc_arena_restore(mrb, ai);
 
-	return DBGST_PROMPT;
+  return DBGST_PROMPT;
 }
 
@@ -56,4 +55,27 @@
 dbgcmd_eval(mrb_state *mrb, mrdb_state *mrdb)
 {
-	return dbgcmd_print(mrb, mrdb);
+  return dbgcmd_print(mrb, mrdb);
 }
+
+dbgcmd_state
+dbgcmd_info_local(mrb_state *mrb, mrdb_state *mrdb)
+{
+  mrb_value result;
+  mrb_value s;
+  int ai;
+
+  ai = mrb_gc_arena_save(mrb);
+
+  result = mrb_debug_eval(mrb, mrdb->dbg, "local_variables", 0, NULL, 1);
+
+  s = mrb_str_cat_lit(mrb, result, "\0");
+  printf("$%lu = %s\n", (unsigned long)mrdb->print_no++, RSTRING_PTR(s));
+
+  if (mrdb->print_no == 0) {
+    mrdb->print_no = 1;
+  }
+
+  mrb_gc_arena_restore(mrb, ai);
+
+  return DBGST_PROMPT;
+}
Index: /EcnlProtoTool/trunk/prototool/src/cmdrun.c
===================================================================
--- /EcnlProtoTool/trunk/prototool/src/cmdrun.c	(revision 438)
+++ /EcnlProtoTool/trunk/prototool/src/cmdrun.c	(revision 439)
@@ -4,7 +4,5 @@
 */
 
-#include <stdlib.h>
-
-#include "mruby/opcode.h"
+#include <mruby/opcode.h>
 #include "mrdb.h"
 
@@ -12,20 +10,20 @@
 dbgcmd_run(mrb_state *mrb, mrdb_state *mrdb)
 {
-	mrb_debug_context *dbg = mrdb->dbg;
+  mrb_debug_context *dbg = mrdb->dbg;
 
-	if (dbg->xm == DBG_INIT) {
-		InterlockedExchange(&dbg->xm, DBG_RUN);
-	}
-	else {
-		InterlockedExchange(&dbg->xm, DBG_QUIT);
-		if (dbg->xphase == DBG_PHASE_RUNNING) {
-			struct RClass *exc;
-			puts("Start it from the beginning.");
-			exc = mrb_define_class(mrb, "DebuggerRestart", mrb_class_get(mrb, "Exception"));
-			mrb_raise(mrb, exc, "Restart mrdb.");
-		}
-	}
+  if (dbg->xm == DBG_INIT){
+    dbg->xm = DBG_RUN;
+  }
+  else {
+    dbg->xm = DBG_QUIT;
+    if (dbg->xphase == DBG_PHASE_RUNNING){
+      struct RClass *exc;
+      puts("Start it from the beginning.");
+      exc = mrb_define_class(mrb, "DebuggerRestart", mrb->eException_class);
+      mrb_raise(mrb, exc, "Restart mrdb.");
+    }
+  }
 
-	return DBGST_RESTART;
+  return DBGST_RESTART;
 }
 
@@ -33,20 +31,20 @@
 dbgcmd_continue(mrb_state *mrb, mrdb_state *mrdb)
 {
-	mrb_debug_context *dbg = mrdb->dbg;
-	int ccnt = 1;
+  mrb_debug_context *dbg = mrdb->dbg;
+  int ccnt = 1;
 
-	if (mrdb->wcnt > 1) {
-		sscanf(mrdb->words[1], "%d", &ccnt);
-	}
-	dbg->ccnt = (uint16_t)(ccnt > 0 ? ccnt : 1);  /* count of continue */
+  if (mrdb->wcnt > 1){
+    sscanf(mrdb->words[1], "%d", &ccnt);
+  }
+  dbg->ccnt = (uint16_t)(ccnt > 0 ? ccnt : 1);  /* count of continue */
 
-	if (dbg->xphase == DBG_PHASE_AFTER_RUN) {
-		puts("The program is not running.");
-		InterlockedExchange(&dbg->xm, DBG_QUIT);
-	}
-	else {
-		InterlockedExchange(&dbg->xm, DBG_RUN);
-	}
-	return DBGST_CONTINUE;
+  if (dbg->xphase == DBG_PHASE_AFTER_RUN){
+    puts("The program is not running.");
+    dbg->xm = DBG_QUIT;
+  }
+  else {
+    dbg->xm = DBG_RUN;
+  }
+  return DBGST_CONTINUE;
 }
 
@@ -54,6 +52,6 @@
 dbgcmd_step(mrb_state *mrb, mrdb_state *mrdb)
 {
-	InterlockedExchange(&mrdb->dbg->xm, DBG_STEP);
-	return DBGST_CONTINUE;
+  mrdb->dbg->xm = DBG_STEP;
+  return DBGST_CONTINUE;
 }
 
@@ -61,6 +59,6 @@
 dbgcmd_next(mrb_state *mrb, mrdb_state *mrdb)
 {
-	InterlockedExchange(&mrdb->dbg->xm, DBG_NEXT);
-	mrdb->dbg->prvci = mrb->c->ci;
-	return DBGST_CONTINUE;
+  mrdb->dbg->xm = DBG_NEXT;
+  mrdb->dbg->prvci = mrb->c->ci;
+  return DBGST_CONTINUE;
 }
Index: /EcnlProtoTool/trunk/prototool/src/linker_scriptDebug.ld
===================================================================
--- /EcnlProtoTool/trunk/prototool/src/linker_scriptDebug.ld	(revision 438)
+++ /EcnlProtoTool/trunk/prototool/src/linker_scriptDebug.ld	(revision 439)
Index: /EcnlProtoTool/trunk/prototool/src/main.c
===================================================================
--- /EcnlProtoTool/trunk/prototool/src/main.c	(revision 438)
+++ /EcnlProtoTool/trunk/prototool/src/main.c	(revision 439)
@@ -1,6 +1,6 @@
 /*
- *  TOPPERS ECHONET Lite Communication Middleware
+ *  TOPPERS PROJECT Home Network Working Group Software
  *
- *  Copyright (C) 2014-2017 Cores Co., Ltd. Japan
+ *  Copyright (C) 2017-2019 Cores Co., Ltd. Japan
  *
  *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
@@ -515,4 +515,11 @@
 }
 
+extern char __start_rodata, __end_rodata;
+
+mrb_bool mrb_ro_data_p(const char *p)
+{
+	return (&__start_rodata <= p && p < &__end_rodata);
+}
+
 void _start_c(long *p);
 extern int __start_idata, __start_data, __end_data;
Index: /EcnlProtoTool/trunk/prototool/src/mirb.c
===================================================================
--- /EcnlProtoTool/trunk/prototool/src/mirb.c	(revision 438)
+++ /EcnlProtoTool/trunk/prototool/src/mirb.c	(revision 439)
@@ -7,8 +7,24 @@
 */
 
+#include <mruby.h>
+
+#ifdef MRB_DISABLE_STDIO
+# error mruby-bin-mirb conflicts 'MRB_DISABLE_STDIO' configuration in your 'build_config.rb'
+#endif
+
+#include <mruby/array.h>
+#include <mruby/proc.h>
+#include <mruby/compile.h>
+#include <mruby/dump.h>
+#include <mruby/string.h>
+#include <mruby/variable.h>
+#include <mruby/throw.h>
+
 #include <stdlib.h>
 #include <string.h>
-#include <stdio.h>
 #include <ctype.h>
+
+#include <signal.h>
+#include <setjmp.h>
 
 #ifdef ENABLE_READLINE
@@ -17,4 +33,10 @@
 #define MIRB_ADD_HISTORY(line) add_history(line)
 #define MIRB_READLINE(ch) readline(ch)
+#if !defined(RL_READLINE_VERSION) || RL_READLINE_VERSION < 0x600
+/* libedit & older readline do not have rl_free() */
+#define MIRB_LINE_FREE(line) free(line)
+#else
+#define MIRB_LINE_FREE(line) rl_free(line)
+#endif
 #define MIRB_WRITE_HISTORY(path) write_history(path)
 #define MIRB_READ_HISTORY(path) read_history(path)
@@ -25,4 +47,5 @@
 #define MIRB_ADD_HISTORY(line) linenoiseHistoryAdd(line)
 #define MIRB_READLINE(ch) linenoise(ch)
+#define MIRB_LINE_FREE(line) linenoiseFree(line)
 #define MIRB_WRITE_HISTORY(path) linenoiseHistorySave(path)
 #define MIRB_READ_HISTORY(path) linenoiseHistoryLoad(history_path)
@@ -30,9 +53,13 @@
 #endif
 
-#include "mruby.h"
-#include "mruby/array.h"
-#include "mruby/proc.h"
-#include "mruby/compile.h"
-#include "mruby/string.h"
+#ifndef _WIN32
+#define MIRB_SIGSETJMP(env) sigsetjmp(env, 1)
+#define MIRB_SIGLONGJMP(env, val) siglongjmp(env, val)
+#define SIGJMP_BUF sigjmp_buf
+#else
+#define MIRB_SIGSETJMP(env) setjmp(env)
+#define MIRB_SIGLONGJMP(env, val) longjmp(env, val)
+#define SIGJMP_BUF jmp_buf
+#endif
 
 #ifdef ENABLE_READLINE
@@ -43,29 +70,29 @@
 get_history_path(mrb_state *mrb)
 {
-	char *path = NULL;
-	const char *home = getenv("HOME");
+  char *path = NULL;
+  const char *home = getenv("HOME");
 
 #ifdef _WIN32
-	if (home != NULL) {
-		home = getenv("USERPROFILE");
-	}
-#endif
-
-	if (home != NULL) {
-		int len = snprintf(NULL, 0, "%s/%s", home, history_file_name);
-		if (len >= 0) {
-			size_t size = len + 1;
-			path = (char *)mrb_malloc_simple(mrb, size);
-			if (path != NULL) {
-				int n = snprintf(path, size, "%s/%s", home, history_file_name);
-				if (n != len) {
-					mrb_free(mrb, path);
-					path = NULL;
-				}
-			}
-		}
-	}
-
-	return path;
+  if (home != NULL) {
+    home = getenv("USERPROFILE");
+  }
+#endif
+
+  if (home != NULL) {
+    int len = snprintf(NULL, 0, "%s/%s", home, history_file_name);
+    if (len >= 0) {
+      size_t size = len + 1;
+      path = (char *)mrb_malloc_simple(mrb, size);
+      if (path != NULL) {
+        int n = snprintf(path, size, "%s/%s", home, history_file_name);
+        if (n != len) {
+          mrb_free(mrb, path);
+          path = NULL;
+        }
+      }
+    }
+  }
+
+  return path;
 }
 
@@ -75,20 +102,23 @@
 p(mrb_state *mrb, mrb_value obj, int prompt)
 {
-	mrb_value val;
-
-	val = mrb_funcall(mrb, obj, "inspect", 0);
-	if (prompt) {
-		if (!mrb->exc) {
-			fputs(" => ", stdout);
-		}
-		else {
-			val = mrb_funcall(mrb, mrb_obj_value(mrb->exc), "inspect", 0);
-		}
-	}
-	if (!mrb_string_p(val)) {
-		val = mrb_obj_as_string(mrb, obj);
-	}
-	fwrite(RSTRING_PTR(val), RSTRING_LEN(val), 1, stdout);
-	putc('\n', stdout);
+  mrb_value val;
+  char* msg;
+
+  val = mrb_funcall(mrb, obj, "inspect", 0);
+  if (prompt) {
+    if (!mrb->exc) {
+      fputs(" => ", stdout);
+    }
+    else {
+      val = mrb_funcall(mrb, mrb_obj_value(mrb->exc), "inspect", 0);
+    }
+  }
+  if (!mrb_string_p(val)) {
+    val = mrb_obj_as_string(mrb, obj);
+  }
+  msg = mrb_locale_from_utf8(RSTRING_PTR(val), (int)RSTRING_LEN(val));
+  fwrite(msg, strlen(msg), 1, stdout);
+  mrb_locale_free(msg);
+  putc('\n', stdout);
 }
 
@@ -98,104 +128,104 @@
 is_code_block_open(struct mrb_parser_state *parser)
 {
-	mrb_bool code_block_open = FALSE;
-
-	/* check for heredoc */
-	if (parser->parsing_heredoc != NULL) return TRUE;
-	if (parser->heredoc_end_now) {
-		parser->heredoc_end_now = FALSE;
-		return FALSE;
-	}
-
-	/* check for unterminated string */
-	if (parser->lex_strterm) return TRUE;
-
-	/* check if parser error are available */
-	if (0 < parser->nerr) {
-		const char unexpected_end[] = "syntax error, unexpected $end";
-		const char *message = parser->error_buffer[0].message;
-
-		/* a parser error occur, we have to check if */
-		/* we need to read one more line or if there is */
-		/* a different issue which we have to show to */
-		/* the user */
-
-		if (strncmp(message, unexpected_end, sizeof(unexpected_end) - 1) == 0) {
-			code_block_open = TRUE;
-		}
-		else if (strcmp(message, "syntax error, unexpected keyword_end") == 0) {
-			code_block_open = FALSE;
-		}
-		else if (strcmp(message, "syntax error, unexpected tREGEXP_BEG") == 0) {
-			code_block_open = FALSE;
-		}
-		return code_block_open;
-	}
-
-	switch (parser->lstate) {
-
-	/* all states which need more code */
-
-	case EXPR_BEG:
-	  /* beginning of a statement, */
-	  /* that means previous line ended */
-		code_block_open = FALSE;
-		break;
-	case EXPR_DOT:
-	  /* a message dot was the last token, */
-	  /* there has to come more */
-		code_block_open = TRUE;
-		break;
-	case EXPR_CLASS:
-	  /* a class keyword is not enough! */
-	  /* we need also a name of the class */
-		code_block_open = TRUE;
-		break;
-	case EXPR_FNAME:
-	  /* a method name is necessary */
-		code_block_open = TRUE;
-		break;
-	case EXPR_VALUE:
-	  /* if, elsif, etc. without condition */
-		code_block_open = TRUE;
-		break;
-
-	  /* now all the states which are closed */
-
-	case EXPR_ARG:
-	  /* an argument is the last token */
-		code_block_open = FALSE;
-		break;
-
-	  /* all states which are unsure */
-
-	case EXPR_CMDARG:
-		break;
-	case EXPR_END:
-	  /* an expression was ended */
-		break;
-	case EXPR_ENDARG:
-	  /* closing parenthese */
-		break;
-	case EXPR_ENDFN:
-	  /* definition end */
-		break;
-	case EXPR_MID:
-	  /* jump keyword like break, return, ... */
-		break;
-	case EXPR_MAX_STATE:
-	  /* don't know what to do with this token */
-		break;
-	default:
-	  /* this state is unexpected! */
-		break;
-	}
-
-	return code_block_open;
+  mrb_bool code_block_open = FALSE;
+
+  /* check for heredoc */
+  if (parser->parsing_heredoc != NULL) return TRUE;
+
+  /* check for unterminated string */
+  if (parser->lex_strterm) return TRUE;
+
+  /* check if parser error are available */
+  if (0 < parser->nerr) {
+    const char unexpected_end[] = "syntax error, unexpected $end";
+    const char *message = parser->error_buffer[0].message;
+
+    /* a parser error occur, we have to check if */
+    /* we need to read one more line or if there is */
+    /* a different issue which we have to show to */
+    /* the user */
+
+    if (strncmp(message, unexpected_end, sizeof(unexpected_end) - 1) == 0) {
+      code_block_open = TRUE;
+    }
+    else if (strcmp(message, "syntax error, unexpected keyword_end") == 0) {
+      code_block_open = FALSE;
+    }
+    else if (strcmp(message, "syntax error, unexpected tREGEXP_BEG") == 0) {
+      code_block_open = FALSE;
+    }
+    return code_block_open;
+  }
+
+  switch (parser->lstate) {
+
+  /* all states which need more code */
+
+  case EXPR_BEG:
+    /* beginning of a statement, */
+    /* that means previous line ended */
+    code_block_open = FALSE;
+    break;
+  case EXPR_DOT:
+    /* a message dot was the last token, */
+    /* there has to come more */
+    code_block_open = TRUE;
+    break;
+  case EXPR_CLASS:
+    /* a class keyword is not enough! */
+    /* we need also a name of the class */
+    code_block_open = TRUE;
+    break;
+  case EXPR_FNAME:
+    /* a method name is necessary */
+    code_block_open = TRUE;
+    break;
+  case EXPR_VALUE:
+    /* if, elsif, etc. without condition */
+    code_block_open = TRUE;
+    break;
+
+  /* now all the states which are closed */
+
+  case EXPR_ARG:
+    /* an argument is the last token */
+    code_block_open = FALSE;
+    break;
+
+  /* all states which are unsure */
+
+  case EXPR_CMDARG:
+    break;
+  case EXPR_END:
+    /* an expression was ended */
+    break;
+  case EXPR_ENDARG:
+    /* closing parenthese */
+    break;
+  case EXPR_ENDFN:
+    /* definition end */
+    break;
+  case EXPR_MID:
+    /* jump keyword like break, return, ... */
+    break;
+  case EXPR_MAX_STATE:
+    /* don't know what to do with this token */
+    break;
+  default:
+    /* this state is unexpected! */
+    break;
+  }
+
+  return code_block_open;
 }
 
 struct _args {
-	mrb_bool verbose : 1;
-	int argc;
-	char** argv;
+  FILE *rfp;
+  mrb_bool verbose      : 1;
+  mrb_bool debug        : 1;
+  int argc;
+  char** argv;
+  int libc;
+  char **libv;
 };
 
@@ -203,17 +233,28 @@
 usage(const char *name)
 {
-	static const char *const usage_msg[] = {
-		"switches:",
-		"-v           print version number, then run in verbose mode",
-		"--verbose    run in verbose mode",
-		"--version    print the version",
-		"--copyright  print the copyright",
-		NULL
-	};
-	const char *const *p = usage_msg;
-
-	printf("Usage: %s [switches]\n", name);
-	while (*p)
-		printf("  %s\n", *p++);
+  static const char *const usage_msg[] = {
+  "switches:",
+  "-d           set $DEBUG to true (same as `mruby -d`)",
+  "-r library   same as `mruby -r`",
+  "-v           print version number, then run in verbose mode",
+  "--verbose    run in verbose mode",
+  "--version    print the version",
+  "--copyright  print the copyright",
+  NULL
+  };
+  const char *const *p = usage_msg;
+
+  printf("Usage: %s [switches] [programfile] [arguments]\n", name);
+  while (*p)
+    printf("  %s\n", *p++);
+}
+
+static char *
+dup_arg_item(mrb_state *mrb, const char *item)
+{
+  size_t buflen = strlen(item) + 1;
+  char *buf = (char*)mrb_malloc(mrb, buflen);
+  memcpy(buf, item, buflen);
+  return buf;
 }
 
@@ -221,36 +262,72 @@
 parse_args(mrb_state *mrb, int argc, char **argv, struct _args *args)
 {
-	static const struct _args args_zero = {0};
-
-	*args = args_zero;
-
-	for (argc--, argv++; argc > 0; argc--, argv++) {
-		char *item;
-		if (argv[0][0] != '-') break;
-
-		item = argv[0] + 1;
-		switch (*item++) {
-		case 'v':
-			if (!args->verbose) mrb_show_version(mrb);
-			args->verbose = TRUE;
-			break;
-		case '-':
-			if (strcmp((*argv) + 2, "version") == 0) {
-				mrb_show_version(mrb);
-				exit(EXIT_SUCCESS);
-			}
-			else if (strcmp((*argv) + 2, "verbose") == 0) {
-				args->verbose = TRUE;
-				break;
-			}
-			else if (strcmp((*argv) + 2, "copyright") == 0) {
-				mrb_show_copyright(mrb);
-				exit(EXIT_SUCCESS);
-			}
-		default:
-			return EXIT_FAILURE;
-		}
-	}
-	return EXIT_SUCCESS;
+  char **origargv = argv;
+  static const struct _args args_zero = { 0 };
+
+  *args = args_zero;
+
+  for (argc--,argv++; argc > 0; argc--,argv++) {
+    char *item;
+    if (argv[0][0] != '-') break;
+
+    item = argv[0] + 1;
+    switch (*item++) {
+    case 'd':
+      args->debug = TRUE;
+      break;
+    case 'r':
+      if (!item[0]) {
+        if (argc <= 1) {
+          printf("%s: No library specified for -r\n", *origargv);
+          return EXIT_FAILURE;
+        }
+        argc--; argv++;
+        item = argv[0];
+      }
+      if (args->libc == 0) {
+        args->libv = (char**)mrb_malloc(mrb, sizeof(char*));
+      }
+      else {
+        args->libv = (char**)mrb_realloc(mrb, args->libv, sizeof(char*) * (args->libc + 1));
+      }
+      args->libv[args->libc++] = dup_arg_item(mrb, item);
+      break;
+    case 'v':
+      if (!args->verbose) mrb_show_version(mrb);
+      args->verbose = TRUE;
+      break;
+    case '-':
+      if (strcmp((*argv) + 2, "version") == 0) {
+        mrb_show_version(mrb);
+        exit(EXIT_SUCCESS);
+      }
+      else if (strcmp((*argv) + 2, "verbose") == 0) {
+        args->verbose = TRUE;
+        break;
+      }
+      else if (strcmp((*argv) + 2, "copyright") == 0) {
+        mrb_show_copyright(mrb);
+        exit(EXIT_SUCCESS);
+      }
+    default:
+      return EXIT_FAILURE;
+    }
+  }
+
+  if (args->rfp == NULL) {
+    if (*argv != NULL) {
+      args->rfp = fopen(argv[0], "r");
+      if (args->rfp == NULL) {
+        printf("Cannot open program file. (%s)\n", *argv);
+        return EXIT_FAILURE;
+      }
+      argc--; argv++;
+    }
+  }
+  args->argv = (char **)mrb_realloc(mrb, args->argv, sizeof(char*) * (argc + 1));
+  memcpy(args->argv, argv, (argc+1) * sizeof(char*));
+  args->argc = argc;
+
+  return EXIT_SUCCESS;
 }
 
@@ -258,5 +335,14 @@
 cleanup(mrb_state *mrb, struct _args *args)
 {
-	mrb_close(mrb);
+  if (args->rfp)
+    fclose(args->rfp);
+  mrb_free(mrb, args->argv);
+  if (args->libc) {
+    while (args->libc--) {
+      mrb_free(mrb, args->libv[args->libc]);
+    }
+    mrb_free(mrb, args->libv);
+  }
+  mrb_close(mrb);
 }
 
@@ -265,5 +351,5 @@
 print_hint(void)
 {
-	printf("mirb - Embeddable Interactive Ruby Shell\n\n");
+  printf("mirb - Embeddable Interactive Ruby Shell\n\n");
 }
 
@@ -273,11 +359,11 @@
 print_cmdline(int code_block_open)
 {
-	if (code_block_open) {
-		printf("* ");
-	}
-	else {
-		printf("> ");
-	}
-	fflush(stdout);
+  if (code_block_open) {
+    printf("* ");
+  }
+  else {
+    printf("> ");
+  }
+  fflush(stdout);
 }
 #endif
@@ -288,206 +374,336 @@
 check_keyword(const char *buf, const char *word)
 {
-	const char *p = buf;
-	size_t len = strlen(word);
-
-	/* skip preceding spaces */
-	while (*p && isspace((unsigned char)*p)) {
-		p++;
-	}
-	/* check keyword */
-	if (strncmp(p, word, len) != 0) {
-		return 0;
-	}
-	p += len;
-	/* skip trailing spaces */
-	while (*p) {
-		if (!isspace((unsigned char)*p)) return 0;
-		p++;
-	}
-	return 1;
-}
+  const char *p = buf;
+  size_t len = strlen(word);
+
+  /* skip preceding spaces */
+  while (*p && ISSPACE(*p)) {
+    p++;
+  }
+  /* check keyword */
+  if (strncmp(p, word, len) != 0) {
+    return 0;
+  }
+  p += len;
+  /* skip trailing spaces */
+  while (*p) {
+    if (!ISSPACE(*p)) return 0;
+    p++;
+  }
+  return 1;
+}
+
+
+#ifndef ENABLE_READLINE
+volatile sig_atomic_t input_canceled = 0;
+void
+ctrl_c_handler(int signo)
+{
+  input_canceled = 1;
+}
+#else
+SIGJMP_BUF ctrl_c_buf;
+void
+ctrl_c_handler(int signo)
+{
+  MIRB_SIGLONGJMP(ctrl_c_buf, 1);
+}
+#endif
+
+#ifndef DISABLE_MIRB_UNDERSCORE
+void decl_lv_underscore(mrb_state *mrb, mrbc_context *cxt)
+{
+  struct RProc *proc;
+  struct mrb_parser_state *parser;
+
+  parser = mrb_parse_string(mrb, "_=nil", cxt);
+  if (parser == NULL) {
+    fputs("create parser state error\n", stderr);
+    mrb_close(mrb);
+    exit(EXIT_FAILURE);
+  }
+
+  proc = mrb_generate_code(mrb, parser);
+  mrb_vm_run(mrb, proc, mrb_top_self(mrb), 0);
+
+  mrb_parser_free(parser);
+}
+#endif
 
 int
 mirb_main(int argc, char **argv)
 {
-	char ruby_code[1024] = {0};
-	char last_code_line[1024] = {0};
+  char ruby_code[4096] = { 0 };
+  char last_code_line[1024] = { 0 };
 #ifndef ENABLE_READLINE
-	int last_char;
-	int char_index;
+  int last_char;
+  size_t char_index;
 #else
-	char *history_path;
-#endif
-	mrbc_context *cxt;
-	struct mrb_parser_state *parser;
-	mrb_state *mrb;
-	mrb_value result;
-	struct _args args;
-	int n;
-	mrb_bool code_block_open = FALSE;
-	int ai;
-	unsigned int stack_keep = 0;
-
-	/* new interpreter instance */
-	mrb = mrb_open();
-	if (mrb == NULL) {
-		fputs("Invalid mrb interpreter, exiting mirb\n", stderr);
-		return EXIT_FAILURE;
-	}
-	mrb_define_global_const(mrb, "ARGV", mrb_ary_new_capa(mrb, 0));
-
-	n = parse_args(mrb, argc, argv, &args);
-	if (n == EXIT_FAILURE) {
-		cleanup(mrb, &args);
-		usage(argv[0]);
-		return n;
-	}
+  char *history_path;
+  char* line;
+#endif
+  mrbc_context *cxt;
+  struct mrb_parser_state *parser;
+  mrb_state *mrb;
+  mrb_value result;
+  struct _args args;
+  mrb_value ARGV;
+  int n;
+  int i;
+  mrb_bool code_block_open = FALSE;
+  int ai;
+  unsigned int stack_keep = 0;
+
+  /* new interpreter instance */
+  mrb = mrb_open();
+  if (mrb == NULL) {
+    fputs("Invalid mrb interpreter, exiting mirb\n", stderr);
+    return EXIT_FAILURE;
+  }
+
+  n = parse_args(mrb, argc, argv, &args);
+  if (n == EXIT_FAILURE) {
+    cleanup(mrb, &args);
+    usage(argv[0]);
+    return n;
+  }
+
+  ARGV = mrb_ary_new_capa(mrb, args.argc);
+  for (i = 0; i < args.argc; i++) {
+    char* utf8 = mrb_utf8_from_locale(args.argv[i], -1);
+    if (utf8) {
+      mrb_ary_push(mrb, ARGV, mrb_str_new_cstr(mrb, utf8));
+      mrb_utf8_free(utf8);
+    }
+  }
+  mrb_define_global_const(mrb, "ARGV", ARGV);
+  mrb_gv_set(mrb, mrb_intern_lit(mrb, "$DEBUG"), mrb_bool_value(args.debug));
 
 #ifdef ENABLE_READLINE
-	history_path = get_history_path(mrb);
-	if (history_path == NULL) {
-		fputs("failed to get history path\n", stderr);
-		mrb_close(mrb);
-		return EXIT_FAILURE;
-	}
-
-	MIRB_USING_HISTORY();
-	MIRB_READ_HISTORY(history_path);
-#endif
-
-	print_hint();
-
-	cxt = mrbc_context_new(mrb);
-	cxt->capture_errors = TRUE;
-	cxt->lineno = 1;
-	mrbc_filename(mrb, cxt, "(mirb)");
-	if (args.verbose) cxt->dump_result = TRUE;
-
-	ai = mrb_gc_arena_save(mrb);
-
-	while (TRUE) {
-		char *utf8;
+  history_path = get_history_path(mrb);
+  if (history_path == NULL) {
+    fputs("failed to get history path\n", stderr);
+    mrb_close(mrb);
+    return EXIT_FAILURE;
+  }
+
+  MIRB_USING_HISTORY();
+  MIRB_READ_HISTORY(history_path);
+#endif
+
+  print_hint();
+
+  cxt = mrbc_context_new(mrb);
+
+#ifndef DISABLE_MIRB_UNDERSCORE
+  decl_lv_underscore(mrb, cxt);
+#endif
+
+  /* Load libraries */
+  for (i = 0; i < args.libc; i++) {
+    FILE *lfp = fopen(args.libv[i], "r");
+    if (lfp == NULL) {
+      printf("Cannot open library file. (%s)\n", args.libv[i]);
+      cleanup(mrb, &args);
+      return EXIT_FAILURE;
+    }
+    mrb_load_file_cxt(mrb, lfp, cxt);
+    fclose(lfp);
+  }
+
+  cxt->capture_errors = TRUE;
+  cxt->lineno = 1;
+  mrbc_filename(mrb, cxt, "(mirb)");
+  if (args.verbose) cxt->dump_result = TRUE;
+
+  ai = mrb_gc_arena_save(mrb);
+
+  while (TRUE) {
+    char *utf8;
+    struct mrb_jmpbuf c_jmp;
+
+    MRB_TRY(&c_jmp);
+    mrb->jmp = &c_jmp;
+    if (args.rfp) {
+      if (fgets(last_code_line, sizeof(last_code_line)-1, args.rfp) != NULL)
+        goto done;
+      break;
+    }
 
 #ifndef ENABLE_READLINE
-		print_cmdline(code_block_open);
-
-		char_index = 0;
-		while ((last_char = getchar()) != '\n') {
-			if (last_char == EOF) break;
-			if (char_index > sizeof(last_code_line) - 2) {
-				fputs("input string too long\n", stderr);
-				continue;
-			}
-			last_code_line[char_index++] = last_char;
-		}
-		if (last_char == EOF) {
-			fputs("\n", stdout);
-			break;
-		}
-
-		last_code_line[char_index++] = '\n';
-		last_code_line[char_index] = '\0';
+    print_cmdline(code_block_open);
+
+    signal(SIGINT, ctrl_c_handler);
+    char_index = 0;
+    while ((last_char = getchar()) != '\n') {
+      if (last_char == EOF) break;
+      if (char_index >= sizeof(last_code_line)-2) {
+        fputs("input string too long\n", stderr);
+        continue;
+      }
+      last_code_line[char_index++] = last_char;
+    }
+    signal(SIGINT, SIG_DFL);
+    if (input_canceled) {
+      ruby_code[0] = '\0';
+      last_code_line[0] = '\0';
+      code_block_open = FALSE;
+      puts("^C");
+      input_canceled = 0;
+      continue;
+    }
+    if (last_char == EOF) {
+      fputs("\n", stdout);
+      break;
+    }
+
+    last_code_line[char_index++] = '\n';
+    last_code_line[char_index] = '\0';
 #else
-		char* line = MIRB_READLINE(code_block_open ? "* " : "> ");
-		if (line == NULL) {
-			printf("\n");
-			break;
-		}
-		if (strlen(line) > sizeof(last_code_line) - 2) {
-			fputs("input string too long\n", stderr);
-			continue;
-		}
-		strlcpy(last_code_line, line, sizeof(last_code_line));
-		strlcat(last_code_line, "\n", sizeof(last_code_line));
-		MIRB_ADD_HISTORY(line);
-		free(line);
-#endif
-
-		if (code_block_open) {
-			if (strlen(ruby_code) + strlen(last_code_line) > sizeof(ruby_code) - 1) {
-				fputs("concatenated input string too long\n", stderr);
-				continue;
-			}
-			strlcat(ruby_code, last_code_line, sizeof(ruby_code));
-		}
-		else {
-			if (check_keyword(last_code_line, "quit") || check_keyword(last_code_line, "exit")) {
-				break;
-			}
-			strlcpy(ruby_code, last_code_line, sizeof(ruby_code));
-		}
-
-		utf8 = mrb_utf8_from_locale(ruby_code, -1);
-		if (!utf8) abort();
-
-		/* parse code */
-		parser = mrb_parser_new(mrb);
-		if (parser == NULL) {
-			fputs("create parser state error\n", stderr);
-			break;
-		}
-		parser->s = utf8;
-		parser->send = utf8 + strlen(utf8);
-		parser->lineno = cxt->lineno;
-		mrb_parser_parse(parser, cxt);
-		code_block_open = is_code_block_open(parser);
-		mrb_utf8_free(utf8);
-
-		if (code_block_open) {
-		  /* no evaluation of code */
-		}
-		else {
-			if (0 < parser->nerr) {
-			  /* syntax error */
-				printf("line %d: %s\n", parser->error_buffer[0].lineno, parser->error_buffer[0].message);
-			}
-			else {
-			  /* generate bytecode */
-				struct RProc *proc = mrb_generate_code(mrb, parser);
-				if (proc == NULL) {
-					fputs("codegen error\n", stderr);
-					mrb_parser_free(parser);
-					break;
-				}
-
-				if (args.verbose) {
-					mrb_codedump_all(mrb, proc);
-				}
-				/* pass a proc for evaulation */
-				/* evaluate the bytecode */
-				result = mrb_context_run(mrb,
-					proc,
-					mrb_top_self(mrb),
-					stack_keep);
-				stack_keep = proc->body.irep->nlocals;
-				/* did an exception occur? */
-				if (mrb->exc) {
-					p(mrb, mrb_obj_value(mrb->exc), 0);
-					mrb->exc = 0;
-				}
-				else {
-				  /* no */
-					if (!mrb_respond_to(mrb, result, mrb_intern_lit(mrb, "inspect"))) {
-						result = mrb_any_to_s(mrb, result);
-					}
-					p(mrb, result, 1);
-				}
-			}
-			ruby_code[0] = '\0';
-			last_code_line[0] = '\0';
-			mrb_gc_arena_restore(mrb, ai);
-		}
-		mrb_parser_free(parser);
-		cxt->lineno++;
-	}
+    if (MIRB_SIGSETJMP(ctrl_c_buf) == 0) {
+      ;
+    }
+    else {
+      ruby_code[0] = '\0';
+      last_code_line[0] = '\0';
+      code_block_open = FALSE;
+      puts("^C");
+    }
+    signal(SIGINT, ctrl_c_handler);
+    line = MIRB_READLINE(code_block_open ? "* " : "> ");
+    signal(SIGINT, SIG_DFL);
+
+    if (line == NULL) {
+      printf("\n");
+      break;
+    }
+    if (strlen(line) > sizeof(last_code_line)-2) {
+      fputs("input string too long\n", stderr);
+      continue;
+    }
+    strcpy(last_code_line, line);
+    strcat(last_code_line, "\n");
+    MIRB_ADD_HISTORY(line);
+    MIRB_LINE_FREE(line);
+#endif
+
+  done:
+    if (code_block_open) {
+      if (strlen(ruby_code)+strlen(last_code_line) > sizeof(ruby_code)-1) {
+        fputs("concatenated input string too long\n", stderr);
+        continue;
+      }
+      strcat(ruby_code, last_code_line);
+    }
+    else {
+      if (check_keyword(last_code_line, "quit") || check_keyword(last_code_line, "exit")) {
+        break;
+      }
+      strcpy(ruby_code, last_code_line);
+    }
+
+    utf8 = mrb_utf8_from_locale(ruby_code, -1);
+    if (!utf8) abort();
+
+    /* parse code */
+    parser = mrb_parser_new(mrb);
+    if (parser == NULL) {
+      fputs("create parser state error\n", stderr);
+      break;
+    }
+    parser->s = utf8;
+    parser->send = utf8 + strlen(utf8);
+    parser->lineno = cxt->lineno;
+    mrb_parser_parse(parser, cxt);
+    code_block_open = is_code_block_open(parser);
+    mrb_utf8_free(utf8);
+
+    if (code_block_open) {
+      /* no evaluation of code */
+    }
+    else {
+      if (0 < parser->nwarn) {
+        /* warning */
+        char* msg = mrb_locale_from_utf8(parser->warn_buffer[0].message, -1);
+        printf("line %d: %s\n", parser->warn_buffer[0].lineno, msg);
+        mrb_locale_free(msg);
+      }
+      if (0 < parser->nerr) {
+        /* syntax error */
+        char* msg = mrb_locale_from_utf8(parser->error_buffer[0].message, -1);
+        printf("line %d: %s\n", parser->error_buffer[0].lineno, msg);
+        mrb_locale_free(msg);
+      }
+      else {
+        /* generate bytecode */
+        struct RProc *proc = mrb_generate_code(mrb, parser);
+        if (proc == NULL) {
+          fputs("codegen error\n", stderr);
+          mrb_parser_free(parser);
+          break;
+        }
+
+        if (args.verbose) {
+          mrb_codedump_all(mrb, proc);
+        }
+        /* adjust stack length of toplevel environment */
+        if (mrb->c->cibase->env) {
+          struct REnv *e = mrb->c->cibase->env;
+          if (e && MRB_ENV_STACK_LEN(e) < proc->body.irep->nlocals) {
+            MRB_ENV_SET_STACK_LEN(e, proc->body.irep->nlocals);
+          }
+        }
+        /* pass a proc for evaluation */
+        /* evaluate the bytecode */
+        result = mrb_vm_run(mrb,
+            proc,
+            mrb_top_self(mrb),
+            stack_keep);
+        stack_keep = proc->body.irep->nlocals;
+        /* did an exception occur? */
+        if (mrb->exc) {
+          p(mrb, mrb_obj_value(mrb->exc), 0);
+          mrb->exc = 0;
+        }
+        else {
+          /* no */
+          if (!mrb_respond_to(mrb, result, mrb_intern_lit(mrb, "inspect"))){
+            result = mrb_any_to_s(mrb, result);
+          }
+          p(mrb, result, 1);
+#ifndef DISABLE_MIRB_UNDERSCORE
+          *(mrb->c->stack + 1) = result;
+#endif
+        }
+      }
+      ruby_code[0] = '\0';
+      last_code_line[0] = '\0';
+      mrb_gc_arena_restore(mrb, ai);
+    }
+    mrb_parser_free(parser);
+    cxt->lineno++;
+    MRB_CATCH(&c_jmp) {
+      p(mrb, mrb_obj_value(mrb->exc), 0);
+      mrb->exc = 0;
+    }
+    MRB_END_EXC(&c_jmp);
+  }
 
 #ifdef ENABLE_READLINE
-	MIRB_WRITE_HISTORY(history_path);
-	mrb_free(mrb, history_path);
-#endif
-
-	mrbc_context_free(mrb, cxt);
-	mrb_close(mrb);
-
-	return 0;
-}
+  MIRB_WRITE_HISTORY(history_path);
+  mrb_free(mrb, history_path);
+#endif
+
+  if (args.rfp) fclose(args.rfp);
+  mrb_free(mrb, args.argv);
+  if (args.libv) {
+    for (i = 0; i < args.libc; ++i) {
+      mrb_free(mrb, args.libv[i]);
+    }
+    mrb_free(mrb, args.libv);
+  }
+  mrbc_context_free(mrb, cxt);
+  mrb_close(mrb);
+
+  return 0;
+}
Index: /EcnlProtoTool/trunk/prototool/src/mrbc.c
===================================================================
--- /EcnlProtoTool/trunk/prototool/src/mrbc.c	(revision 438)
+++ /EcnlProtoTool/trunk/prototool/src/mrbc.c	(revision 439)
@@ -1,23 +1,28 @@
+#include <mruby.h>
+
+#ifdef MRB_DISABLE_STDIO
+# error mruby-bin-mrbc conflicts 'MRB_DISABLE_STDIO' configuration in your 'build_config.rb'
+#endif
+
 #include <stdlib.h>
-
-#include "mruby.h"
-#include "mruby/compile.h"
-#include "mruby/dump.h"
-#include "mruby/proc.h"
+#include <string.h>
+#include <mruby/compile.h>
+#include <mruby/dump.h>
+#include <mruby/proc.h>
 
 #define RITEBIN_EXT ".mrb"
 #define C_EXT       ".c"
 
-struct mrbc_args
-{
-	int argc;
-	char **argv;
-	int idx;
-	const char *prog;
-	const char *outfile;
-	const char *initname;
-	mrb_bool check_syntax : 1;
-	mrb_bool verbose : 1;
-	unsigned int flags : 4;
+struct mrbc_args {
+  int argc;
+  char **argv;
+  int idx;
+  const char *prog;
+  const char *outfile;
+  const char *initname;
+  mrb_bool check_syntax : 1;
+  mrb_bool verbose      : 1;
+  mrb_bool remove_lv    : 1;
+  unsigned int flags    : 4;
 };
 
@@ -25,23 +30,24 @@
 usage(const char *name)
 {
-	static const char *const usage_msg[] = {
-		"switches:",
-		"-c           check syntax only",
-		"-o<outfile>  place the output into <outfile>",
-		"-v           print version number, then turn on verbose mode",
-		"-g           produce debugging information",
-		"-B<symbol>   binary <symbol> output in C language format",
-		"-e           generate little endian iseq data",
-		"-E           generate big endian iseq data",
-		"--verbose    run at verbose mode",
-		"--version    print the version",
-		"--copyright  print the copyright",
-		NULL
-	};
-	const char *const *p = usage_msg;
-
-	printf("Usage: %s [switches] programfile\n", name);
-	while (*p)
-		printf("  %s\n", *p++);
+  static const char *const usage_msg[] = {
+  "switches:",
+  "-c           check syntax only",
+  "-o<outfile>  place the output into <outfile>",
+  "-v           print version number, then turn on verbose mode",
+  "-g           produce debugging information",
+  "-B<symbol>   binary <symbol> output in C language format",
+  "-e           generate little endian iseq data",
+  "-E           generate big endian iseq data",
+  "--remove-lv  remove local variables",
+  "--verbose    run at verbose mode",
+  "--version    print the version",
+  "--copyright  print the copyright",
+  NULL
+  };
+  const char *const *p = usage_msg;
+
+  printf("Usage: %s [switches] programfile\n", name);
+  while (*p)
+    printf("  %s\n", *p++);
 }
 
@@ -49,20 +55,20 @@
 get_outfilename(mrb_state *mrb, char *infile, const char *ext)
 {
-	size_t infilelen;
-	size_t extlen;
-	char *outfile;
-	char *p;
-
-	infilelen = strlen(infile);
-	extlen = strlen(ext);
-	outfile = (char*)mrb_malloc(mrb, infilelen + extlen + 1);
-	memcpy(outfile, infile, infilelen + 1);
-	if (*ext) {
-		if ((p = strrchr(outfile, '.')) == NULL)
-			p = outfile + infilelen;
-		memcpy(p, ext, extlen + 1);
-	}
-
-	return outfile;
+  size_t infilelen;
+  size_t extlen;
+  char *outfile;
+  char *p;
+
+  infilelen = strlen(infile);
+  extlen = strlen(ext);
+  outfile = (char*)mrb_malloc(mrb, infilelen + extlen + 1);
+  memcpy(outfile, infile, infilelen + 1);
+  if (*ext) {
+    if ((p = strrchr(outfile, '.')) == NULL)
+      p = outfile + infilelen;
+    memcpy(p, ext, extlen + 1);
+  }
+
+  return outfile;
 }
 
@@ -70,90 +76,94 @@
 parse_args(mrb_state *mrb, int argc, char **argv, struct mrbc_args *args)
 {
-	static const struct mrbc_args args_zero = { 0 };
-	int i;
-
-	*args = args_zero;
-	args->argc = argc;
-	args->argv = argv;
-	args->prog = argv[0];
-
-	for (i = 1; i < argc; i++) {
-		if (argv[i][0] == '-') {
-			switch ((argv[i])[1]) {
-			case 'o':
-				if (args->outfile) {
-					fprintf(stderr, "%s: an output file is already specified. (%s)\n",
-						args->prog, args->outfile);
-					return -1;
-				}
-				if (argv[i][2] == '\0' && argv[i + 1]) {
-					i++;
-					args->outfile = get_outfilename(mrb, argv[i], "");
-				}
-				else {
-					args->outfile = get_outfilename(mrb, argv[i] + 2, "");
-				}
-				break;
-			case 'B':
-				if (argv[i][2] == '\0' && argv[i + 1]) {
-					i++;
-					args->initname = argv[i];
-				}
-				else {
-					args->initname = argv[i] + 2;
-				}
-				if (*args->initname == '\0') {
-					fprintf(stderr, "%s: function name is not specified.\n", args->prog);
-					return -1;
-				}
-				break;
-			case 'c':
-				args->check_syntax = TRUE;
-				break;
-			case 'v':
-				if (!args->verbose) mrb_show_version(mrb);
-				args->verbose = TRUE;
-				break;
-			case 'g':
-				args->flags |= DUMP_DEBUG_INFO;
-				break;
-			case 'E':
-				args->flags = DUMP_ENDIAN_BIG | (args->flags & ~DUMP_ENDIAN_MASK);
-				break;
-			case 'e':
-				args->flags = DUMP_ENDIAN_LIL | (args->flags & ~DUMP_ENDIAN_MASK);
-				break;
-			case 'h':
-				return -1;
-			case '-':
-				if (argv[i][1] == '\n') {
-					return i;
-				}
-				if (strcmp(argv[i] + 2, "version") == 0) {
-					mrb_show_version(mrb);
-					exit(EXIT_SUCCESS);
-				}
-				else if (strcmp(argv[i] + 2, "verbose") == 0) {
-					args->verbose = TRUE;
-					break;
-				}
-				else if (strcmp(argv[i] + 2, "copyright") == 0) {
-					mrb_show_copyright(mrb);
-					exit(EXIT_SUCCESS);
-				}
-				return -1;
-			default:
-				return i;
-			}
-		}
-		else {
-			break;
-		}
-	}
-	if (args->verbose && args->initname && (args->flags & DUMP_ENDIAN_MASK) == 0) {
-		fprintf(stderr, "%s: generating %s endian C file. specify -e/-E for cross compiling.\n",
-			args->prog, bigendian_p() ? "big" : "little");
-	}
-	return i;
+  static const struct mrbc_args args_zero = { 0 };
+  int i;
+
+  *args = args_zero;
+  args->argc = argc;
+  args->argv = argv;
+  args->prog = argv[0];
+
+  for (i=1; i<argc; i++) {
+    if (argv[i][0] == '-') {
+      switch ((argv[i])[1]) {
+      case 'o':
+        if (args->outfile) {
+          fprintf(stderr, "%s: an output file is already specified. (%s)\n",
+                  args->prog, args->outfile);
+          return -1;
+        }
+        if (argv[i][2] == '\0' && argv[i+1]) {
+          i++;
+          args->outfile = get_outfilename(mrb, argv[i], "");
+        }
+        else {
+          args->outfile = get_outfilename(mrb, argv[i] + 2, "");
+        }
+        break;
+      case 'B':
+        if (argv[i][2] == '\0' && argv[i+1]) {
+          i++;
+          args->initname = argv[i];
+        }
+        else {
+          args->initname = argv[i]+2;
+        }
+        if (*args->initname == '\0') {
+          fprintf(stderr, "%s: function name is not specified.\n", args->prog);
+          return -1;
+        }
+        break;
+      case 'c':
+        args->check_syntax = TRUE;
+        break;
+      case 'v':
+        if (!args->verbose) mrb_show_version(mrb);
+        args->verbose = TRUE;
+        break;
+      case 'g':
+        args->flags |= DUMP_DEBUG_INFO;
+        break;
+      case 'E':
+        args->flags = DUMP_ENDIAN_BIG | (args->flags & ~DUMP_ENDIAN_MASK);
+        break;
+      case 'e':
+        args->flags = DUMP_ENDIAN_LIL | (args->flags & ~DUMP_ENDIAN_MASK);
+        break;
+      case 'h':
+        return -1;
+      case '-':
+        if (argv[i][1] == '\n') {
+          return i;
+        }
+        if (strcmp(argv[i] + 2, "version") == 0) {
+          mrb_show_version(mrb);
+          exit(EXIT_SUCCESS);
+        }
+        else if (strcmp(argv[i] + 2, "verbose") == 0) {
+          args->verbose = TRUE;
+          break;
+        }
+        else if (strcmp(argv[i] + 2, "copyright") == 0) {
+          mrb_show_copyright(mrb);
+          exit(EXIT_SUCCESS);
+        }
+        else if (strcmp(argv[i] + 2, "remove-lv") == 0) {
+          args->remove_lv = TRUE;
+          break;
+        }
+        return -1;
+      default:
+        return i;
+      }
+    }
+    else {
+      break;
+    }
+  }
+  if (args->verbose && args->initname && (args->flags & DUMP_ENDIAN_MASK) == 0) {
+    fprintf(stderr, "%s: generating %s endian C file. specify -e/-E for cross compiling.\n",
+            args->prog, bigendian_p() ? "big" : "little");
+  }
+  return i;
 }
 
@@ -161,6 +171,6 @@
 cleanup(mrb_state *mrb, struct mrbc_args *args)
 {
-	mrb_free(mrb, (void*)args->outfile);
-	mrb_close(mrb);
+  mrb_free(mrb, (void*)args->outfile);
+  mrb_close(mrb);
 }
 
@@ -168,21 +178,21 @@
 partial_hook(struct mrb_parser_state *p)
 {
-	mrbc_context *c = p->cxt;
-	struct mrbc_args *args = (struct mrbc_args *)c->partial_data;
-	const char *fn;
-
-	if (p->f) fclose(p->f);
-	if (args->idx >= args->argc) {
-		p->f = NULL;
-		return -1;
-	}
-	fn = args->argv[args->idx++];
-	p->f = fopen(fn, "r");
-	if (p->f == NULL) {
-		fprintf(stderr, "%s: cannot open program file. (%s)\n", args->prog, fn);
-		return -1;
-	}
-	mrb_parser_set_filename(p, fn);
-	return 0;
+  mrbc_context *c = p->cxt;
+  struct mrbc_args *args = (struct mrbc_args *)c->partial_data;
+  const char *fn;
+
+  if (p->f) fclose(p->f);
+  if (args->idx >= args->argc) {
+    p->f = NULL;
+    return -1;
+  }
+  fn = args->argv[args->idx++];
+  p->f = fopen(fn, "rb");
+  if (p->f == NULL) {
+    fprintf(stderr, "%s: cannot open program file. (%s)\n", args->prog, fn);
+    return -1;
+  }
+  mrb_parser_set_filename(p, fn);
+  return 0;
 }
 
@@ -190,38 +200,38 @@
 load_file(mrb_state *mrb, struct mrbc_args *args)
 {
-	mrbc_context *c;
-	mrb_value result;
-	char *input = args->argv[args->idx];
-	FILE *infile;
-	mrb_bool need_close = FALSE;
-
-	c = mrbc_context_new(mrb);
-	if (args->verbose)
-		c->dump_result = TRUE;
-	c->no_exec = TRUE;
-	if (input[0] == '-' && input[1] == '\0') {
-		infile = stdin;
-	}
-	else {
-		need_close = TRUE;
-		if ((infile = fopen(input, "r")) == NULL) {
-			fprintf(stderr, "%s: cannot open program file. (%s)\n", args->prog, input);
-			return mrb_nil_value();
-		}
-	}
-	mrbc_filename(mrb, c, input);
-	args->idx++;
-	if (args->idx < args->argc) {
-		need_close = FALSE;
-		mrbc_partial_hook(mrb, c, partial_hook, (void*)args);
-	}
-
-	result = mrb_load_file_cxt(mrb, infile, c);
-	if (need_close) fclose(infile);
-	mrbc_context_free(mrb, c);
-	if (mrb_undef_p(result)) {
-		return mrb_nil_value();
-	}
-	return result;
+  mrbc_context *c;
+  mrb_value result;
+  char *input = args->argv[args->idx];
+  FILE *infile;
+  mrb_bool need_close = FALSE;
+
+  c = mrbc_context_new(mrb);
+  if (args->verbose)
+    c->dump_result = TRUE;
+  c->no_exec = TRUE;
+  if (input[0] == '-' && input[1] == '\0') {
+    infile = stdin;
+  }
+  else {
+    need_close = TRUE;
+    if ((infile = fopen(input, "rb")) == NULL) {
+      fprintf(stderr, "%s: cannot open program file. (%s)\n", args->prog, input);
+      return mrb_nil_value();
+    }
+  }
+  mrbc_filename(mrb, c, input);
+  args->idx++;
+  if (args->idx < args->argc) {
+    need_close = FALSE;
+    mrbc_partial_hook(mrb, c, partial_hook, (void*)args);
+  }
+
+  result = mrb_load_file_cxt(mrb, infile, c);
+  if (need_close) fclose(infile);
+  mrbc_context_free(mrb, c);
+  if (mrb_undef_p(result)) {
+    return mrb_nil_value();
+  }
+  return result;
 }
 
@@ -229,20 +239,23 @@
 dump_file(mrb_state *mrb, FILE *wfp, const char *outfile, struct RProc *proc, struct mrbc_args *args)
 {
-	int n = MRB_DUMP_OK;
-	mrb_irep *irep = proc->body.irep;
-
-	if (args->initname) {
-		n = mrb_dump_irep_cfunc(mrb, irep, args->flags, wfp, args->initname);
-		if (n == MRB_DUMP_INVALID_ARGUMENT) {
-			fprintf(stderr, "%s: invalid C language symbol name\n", args->initname);
-		}
-	}
-	else {
-		n = mrb_dump_irep_binary(mrb, irep, args->flags, wfp);
-	}
-	if (n != MRB_DUMP_OK) {
-		fprintf(stderr, "%s: error in mrb dump (%s) %d\n", args->prog, outfile, n);
-	}
-	return n;
+  int n = MRB_DUMP_OK;
+  mrb_irep *irep = proc->body.irep;
+
+  if (args->remove_lv) {
+    mrb_irep_remove_lv(mrb, irep);
+  }
+  if (args->initname) {
+    n = mrb_dump_irep_cfunc(mrb, irep, args->flags, wfp, args->initname);
+    if (n == MRB_DUMP_INVALID_ARGUMENT) {
+      fprintf(stderr, "%s: invalid C language symbol name\n", args->initname);
+    }
+  }
+  else {
+    n = mrb_dump_irep_binary(mrb, irep, args->flags, wfp);
+  }
+  if (n != MRB_DUMP_OK) {
+    fprintf(stderr, "%s: error in mrb dump (%s) %d\n", args->prog, outfile, n);
+  }
+  return n;
 }
 
@@ -250,69 +263,69 @@
 mrbc_main(int argc, char **argv)
 {
-	mrb_state *mrb = mrb_open_allocf(mrb_default_allocf, NULL, TRUE);
-	int n, result;
-	struct mrbc_args args;
-	FILE *wfp;
-	mrb_value load;
-
-	if (mrb == NULL) {
-		fputs("Invalid mrb_state, exiting mrbc\n", stderr);
-		return EXIT_FAILURE;
-	}
-
-	n = parse_args(mrb, argc, argv, &args);
-	if (n < 0) {
-		cleanup(mrb, &args);
-		usage(argv[0]);
-		return EXIT_FAILURE;
-	}
-	if (n == argc) {
-		fprintf(stderr, "%s: no program file given\n", args.prog);
-		return EXIT_FAILURE;
-	}
-	if (args.outfile == NULL && !args.check_syntax) {
-		if (n + 1 == argc) {
-			args.outfile = get_outfilename(mrb, argv[n], args.initname ? C_EXT : RITEBIN_EXT);
-		}
-		else {
-			fprintf(stderr, "%s: output file should be specified to compile multiple files\n", args.prog);
-			return EXIT_FAILURE;
-		}
-	}
-
-	args.idx = n;
-	load = load_file(mrb, &args);
-	if (mrb_nil_p(load)) {
-		cleanup(mrb, &args);
-		return EXIT_FAILURE;
-	}
-	if (args.check_syntax) {
-		printf("%s:%s:Syntax OK\n", args.prog, argv[n]);
-	}
-
-	if (args.check_syntax) {
-		cleanup(mrb, &args);
-		return EXIT_SUCCESS;
-	}
-
-	if (args.outfile) {
-		if (strcmp("-", args.outfile) == 0) {
-			wfp = stdout;
-		}
-		else if ((wfp = fopen(args.outfile, "wb")) == NULL) {
-			fprintf(stderr, "%s: cannot open output file:(%s)\n", args.prog, args.outfile);
-			return EXIT_FAILURE;
-		}
-	}
-	else {
-		fprintf(stderr, "Output file is required\n");
-		return EXIT_FAILURE;
-	}
-	result = dump_file(mrb, wfp, args.outfile, mrb_proc_ptr(load), &args);
-	fclose(wfp);
-	cleanup(mrb, &args);
-	if (result != MRB_DUMP_OK) {
-		return EXIT_FAILURE;
-	}
-	return EXIT_SUCCESS;
-}
+  mrb_state *mrb = mrb_open_allocf(mrb_default_allocf, NULL, TRUE);
+  int n, result;
+  struct mrbc_args args;
+  FILE *wfp;
+  mrb_value load;
+
+  if (mrb == NULL) {
+    fputs("Invalid mrb_state, exiting mrbc\n", stderr);
+    return EXIT_FAILURE;
+  }
+
+  n = parse_args(mrb, argc, argv, &args);
+  if (n < 0) {
+    cleanup(mrb, &args);
+    usage(argv[0]);
+    return EXIT_FAILURE;
+  }
+  if (n == argc) {
+    fprintf(stderr, "%s: no program file given\n", args.prog);
+    return EXIT_FAILURE;
+  }
+  if (args.outfile == NULL && !args.check_syntax) {
+    if (n + 1 == argc) {
+      args.outfile = get_outfilename(mrb, argv[n], args.initname ? C_EXT : RITEBIN_EXT);
+    }
+    else {
+      fprintf(stderr, "%s: output file should be specified to compile multiple files\n", args.prog);
+      return EXIT_FAILURE;
+    }
+  }
+
+  args.idx = n;
+  load = load_file(mrb, &args);
+  if (mrb_nil_p(load)) {
+    cleanup(mrb, &args);
+    return EXIT_FAILURE;
+  }
+  if (args.check_syntax) {
+    printf("%s:%s:Syntax OK\n", args.prog, argv[n]);
+  }
+
+  if (args.check_syntax) {
+    cleanup(mrb, &args);
+    return EXIT_SUCCESS;
+  }
+
+  if (args.outfile) {
+    if (strcmp("-", args.outfile) == 0) {
+      wfp = stdout;
+    }
+    else if ((wfp = fopen(args.outfile, "wb")) == NULL) {
+      fprintf(stderr, "%s: cannot open output file:(%s)\n", args.prog, args.outfile);
+      return EXIT_FAILURE;
+    }
+  }
+  else {
+    fprintf(stderr, "Output file is required\n");
+    return EXIT_FAILURE;
+  }
+  result = dump_file(mrb, wfp, args.outfile, mrb_proc_ptr(load), &args);
+  fclose(wfp);
+  cleanup(mrb, &args);
+  if (result != MRB_DUMP_OK) {
+    return EXIT_FAILURE;
+  }
+  return EXIT_SUCCESS;
+}
Index: /EcnlProtoTool/trunk/prototool/src/mrdb.c
===================================================================
--- /EcnlProtoTool/trunk/prototool/src/mrdb.c	(revision 438)
+++ /EcnlProtoTool/trunk/prototool/src/mrdb.c	(revision 439)
@@ -6,14 +6,16 @@
 #include <stdlib.h>
 #include <string.h>
-
-#include "mruby.h"
-#include "mruby/dump.h"
-#include "mruby/debug.h"
-#include "mruby/class.h"
-#include "mruby/opcode.h"
-#include "mruby/variable.h"
+#include <ctype.h>
+
+#include <mruby.h>
+#include <mruby/dump.h>
+#include <mruby/debug.h>
+#include <mruby/class.h>
+#include <mruby/opcode.h>
+#include <mruby/variable.h>
 
 #include "mrdb.h"
 #include "apibreak.h"
+#include "apilist.h"
 
 void mrdb_state_free(mrb_state *);
@@ -22,23 +24,21 @@
 static mrdb_state *_mrdb_state = NULL;
 
-struct _args
-{
-	FILE *rfp;
-	char* fname;
-	char* srcpath;
-	int argc;
-	char** argv;
-	mrb_bool mrbfile : 1;
+struct _args {
+  FILE *rfp;
+  char* fname;
+  char* srcpath;
+  int argc;
+  char** argv;
+  mrb_bool mrbfile : 1;
 };
 
-typedef struct debug_command
-{
-	const char *cmd1;
-	const char *cmd2;
-	uint8_t len1;
-	uint8_t len2;
-	uint8_t div;
-	debug_command_id id;
-	debug_command_func func;
+typedef struct debug_command {
+  const char *cmd1;
+  const char *cmd2;
+  uint8_t len1;
+  uint8_t len2;
+  uint8_t div;
+  debug_command_id id;
+  debug_command_func func;
 } debug_command;
 
@@ -52,4 +52,6 @@
   {"help",      NULL,           1, 0, 1, DBGCMD_HELP,           dbgcmd_help},            /* h[elp] */
   {"info",      "breakpoints",  1, 1, 1, DBGCMD_INFO_BREAK,     dbgcmd_info_break},      /* i[nfo] b[reakpoints] */
+  {"info",      "locals",       1, 1, 0, DBGCMD_INFO_LOCAL,     dbgcmd_info_local},      /* i[nfo] l[ocals] */
+  {"list",      NULL,           1, 0, 1, DBGCMD_LIST,           dbgcmd_list},            /* l[ist] */
   {"print",     NULL,           1, 0, 0, DBGCMD_PRINT,          dbgcmd_print},           /* p[rint] */
   {"quit",      NULL,           1, 0, 0, DBGCMD_QUIT,           dbgcmd_quit},            /* q[uit] */
@@ -64,18 +66,18 @@
 usage(const char *name)
 {
-	static const char *const usage_msg[] = {
-		"switches:",
-		"-b           load and execute RiteBinary (mrb) file",
-		"-d           specify source directory",
-		"--version    print the version",
-		"--copyright  print the copyright",
-		NULL
-	};
-	const char *const *p = usage_msg;
-
-	printf("Usage: %s [switches] programfile\n", name);
-	while (*p) {
-		printf("  %s\n", *p++);
-	}
+  static const char *const usage_msg[] = {
+  "switches:",
+  "-b           load and execute RiteBinary (mrb) file",
+  "-d           specify source directory",
+  "--version    print the version",
+  "--copyright  print the copyright",
+  NULL
+  };
+  const char *const *p = usage_msg;
+
+  printf("Usage: %s [switches] programfile\n", name);
+  while (*p) {
+    printf("  %s\n", *p++);
+  }
 }
 
@@ -83,86 +85,86 @@
 parse_args(mrb_state *mrb, int argc, char **argv, struct _args *args)
 {
-	char **origargv = argv;
-	static const struct _args args_zero = { 0 };
-
-	*args = args_zero;
-
-	for (argc--, argv++; argc > 0; argc--, argv++) {
-		char *item;
-		if (argv[0][0] != '-') break;
-
-		item = argv[0] + 1;
-		switch (*item++) {
-		case 'b':
-			args->mrbfile = TRUE;
-			break;
-		case 'd':
-			if (item[0]) {
-				goto append_srcpath;
-			}
-			else if (argc > 1) {
-				argc--; argv++;
-				item = argv[0];
-			append_srcpath:
-				if (!args->srcpath) {
-					size_t buflen;
-					char *buf;
-
-					buflen = strlen(item) + 1;
-					buf = (char *)mrb_malloc(mrb, buflen);
-					memcpy(buf, item, buflen);
-					args->srcpath = buf;
-				}
-				else {
-					size_t srcpathlen;
-					size_t itemlen;
-
-					srcpathlen = strlen(args->srcpath);
-					itemlen = strlen(item);
-					args->srcpath =
-						(char *)mrb_realloc(mrb, args->srcpath, srcpathlen + itemlen + 2);
-					args->srcpath[srcpathlen] = '\n';
-					memcpy(args->srcpath + srcpathlen + 1, item, itemlen + 1);
-				}
-			}
-			else {
-				printf("%s: No path specified for -d\n", *origargv);
-				return EXIT_SUCCESS;
-			}
-			break;
-		case '-':
-			if (strcmp((*argv) + 2, "version") == 0) {
-				mrb_show_version(mrb);
-				exit(EXIT_SUCCESS);
-			}
-			else if (strcmp((*argv) + 2, "copyright") == 0) {
-				mrb_show_copyright(mrb);
-				exit(EXIT_SUCCESS);
-			}
-		default:
-			return EXIT_FAILURE;
-		}
-	}
-
-	if (args->rfp == NULL) {
-		if (*argv == NULL) {
-			printf("%s: Program file not specified.\n", *origargv);
-			return EXIT_FAILURE;
-		}
-		else {
-			args->rfp = fopen(argv[0], args->mrbfile ? "rb" : "r");
-			if (args->rfp == NULL) {
-				printf("%s: Cannot open program file. (%s)\n", *origargv, *argv);
-				return EXIT_FAILURE;
-			}
-			args->fname = argv[0];
-			argc--; argv++;
-		}
-	}
-	args->argv = (char **)mrb_realloc(mrb, args->argv, sizeof(char*) * (argc + 1));
-	memcpy(args->argv, argv, (argc + 1) * sizeof(char*));
-	args->argc = argc;
-
-	return EXIT_SUCCESS;
+  char **origargv = argv;
+  static const struct _args args_zero = { 0 };
+
+  *args = args_zero;
+
+  for (argc--,argv++; argc > 0; argc--,argv++) {
+    char *item;
+    if (argv[0][0] != '-') break;
+
+    item = argv[0] + 1;
+    switch (*item++) {
+    case 'b':
+      args->mrbfile = TRUE;
+      break;
+    case 'd':
+      if (item[0]) {
+        goto append_srcpath;
+      }
+      else if (argc > 1) {
+        argc--; argv++;
+        item = argv[0];
+append_srcpath:
+        if (!args->srcpath) {
+          size_t buflen;
+          char *buf;
+
+          buflen = strlen(item) + 1;
+          buf = (char *)mrb_malloc(mrb, buflen);
+          memcpy(buf, item, buflen);
+          args->srcpath = buf;
+        }
+        else {
+          size_t srcpathlen;
+          size_t itemlen;
+
+          srcpathlen = strlen(args->srcpath);
+          itemlen = strlen(item);
+          args->srcpath =
+            (char *)mrb_realloc(mrb, args->srcpath, srcpathlen + itemlen + 2);
+          args->srcpath[srcpathlen] = '\n';
+          memcpy(args->srcpath + srcpathlen + 1, item, itemlen + 1);
+        }
+      }
+      else {
+        printf("%s: No path specified for -d\n", *origargv);
+        return EXIT_SUCCESS;
+      }
+      break;
+    case '-':
+      if (strcmp((*argv) + 2, "version") == 0) {
+        mrb_show_version(mrb);
+        exit(EXIT_SUCCESS);
+      }
+      else if (strcmp((*argv) + 2, "copyright") == 0) {
+        mrb_show_copyright(mrb);
+        exit(EXIT_SUCCESS);
+      }
+    default:
+      return EXIT_FAILURE;
+    }
+  }
+
+  if (args->rfp == NULL) {
+    if (*argv == NULL) {
+      printf("%s: Program file not specified.\n", *origargv);
+      return EXIT_FAILURE;
+    }
+    else {
+      args->rfp = fopen(argv[0], args->mrbfile ? "rb" : "r");
+      if (args->rfp == NULL) {
+        printf("%s: Cannot open program file. (%s)\n", *origargv, *argv);
+        return EXIT_FAILURE;
+      }
+      args->fname = argv[0];
+      argc--; argv++;
+    }
+  }
+  args->argv = (char **)mrb_realloc(mrb, args->argv, sizeof(char*) * (argc + 1));
+  memcpy(args->argv, argv, (argc+1) * sizeof(char*));
+  args->argc = argc;
+
+  return EXIT_SUCCESS;
 }
 
@@ -170,12 +172,12 @@
 cleanup(mrb_state *mrb, struct _args *args)
 {
-	if (args->rfp)
-		fclose(args->rfp);
-	if (args->srcpath)
-		mrb_free(mrb, args->srcpath);
-	if (args->argv)
-		mrb_free(mrb, args->argv);
-	mrdb_state_free(mrb);
-	mrb_close(mrb);
+  if (args->rfp)
+    fclose(args->rfp);
+  if (args->srcpath)
+    mrb_free(mrb, args->srcpath);
+  if (args->argv)
+    mrb_free(mrb, args->argv);
+  mrdb_state_free(mrb);
+  mrb_close(mrb);
 }
 
@@ -183,13 +185,13 @@
 mrb_debug_context_new(mrb_state *mrb)
 {
-	mrb_debug_context *dbg = (mrb_debug_context *)mrb_malloc(mrb, sizeof(mrb_debug_context));
-
-	memset(dbg, 0, sizeof(mrb_debug_context));
-
-	InterlockedExchange(&dbg->xm, DBG_INIT);
-	dbg->xphase = DBG_PHASE_BEFORE_RUN;
-	dbg->next_bpno = 1;
-
-	return dbg;
+  mrb_debug_context *dbg = (mrb_debug_context*)mrb_malloc(mrb, sizeof(mrb_debug_context));
+
+  memset(dbg, 0, sizeof(mrb_debug_context));
+
+  dbg->xm = DBG_INIT;
+  dbg->xphase = DBG_PHASE_BEFORE_RUN;
+  dbg->next_bpno = 1;
+
+  return dbg;
 }
 
@@ -197,8 +199,8 @@
 mrb_debug_context_get(mrb_state *mrb)
 {
-	if (!_debug_context) {
-		_debug_context = mrb_debug_context_new(mrb);
-	}
-	return _debug_context;
+  if (!_debug_context) {
+    _debug_context = mrb_debug_context_new(mrb);
+  }
+  return _debug_context;
 }
 
@@ -206,5 +208,5 @@
 mrb_debug_context_set(mrb_debug_context *dbg)
 {
-	_debug_context = dbg;
+  _debug_context = dbg;
 }
 
@@ -212,9 +214,9 @@
 mrb_debug_context_free(mrb_state *mrb)
 {
-	if (_debug_context) {
-		mrb_debug_delete_break_all(mrb, _debug_context);
-		mrb_free(mrb, _debug_context);
-		_debug_context = NULL;
-	}
+  if (_debug_context) {
+    mrb_debug_delete_break_all(mrb, _debug_context);
+    mrb_free(mrb, _debug_context);
+    _debug_context = NULL;
+  }
 }
 
@@ -222,13 +224,13 @@
 mrdb_state_new(mrb_state *mrb)
 {
-	mrdb_state *mrdb = (mrdb_state *)mrb_malloc(mrb, sizeof(mrdb_state));
-
-	memset(mrdb, 0, sizeof(mrdb_state));
-
-	mrdb->dbg = mrb_debug_context_get(mrb);
-	mrdb->command = (char *)mrb_malloc(mrb, MAX_COMMAND_LINE + 1);
-	mrdb->print_no = 1;
-
-	return mrdb;
+  mrdb_state *mrdb = (mrdb_state*)mrb_malloc(mrb, sizeof(mrdb_state));
+
+  memset(mrdb, 0, sizeof(mrdb_state));
+
+  mrdb->dbg = mrb_debug_context_get(mrb);
+  mrdb->command = (char*)mrb_malloc(mrb, MAX_COMMAND_LINE+1);
+  mrdb->print_no = 1;
+
+  return mrdb;
 }
 
@@ -236,8 +238,8 @@
 mrdb_state_get(mrb_state *mrb)
 {
-	if (!_mrdb_state) {
-		_mrdb_state = mrdb_state_new(mrb);
-	}
-	return _mrdb_state;
+  if (!_mrdb_state) {
+    _mrdb_state = mrdb_state_new(mrb);
+  }
+  return _mrdb_state;
 }
 
@@ -245,5 +247,5 @@
 mrdb_state_set(mrdb_state *mrdb)
 {
-	_mrdb_state = mrdb;
+  _mrdb_state = mrdb;
 }
 
@@ -251,10 +253,10 @@
 mrdb_state_free(mrb_state *mrb)
 {
-	mrb_debug_context_free(mrb);
-	if (_mrdb_state) {
-		mrb_free(mrb, _mrdb_state->command);
-		mrb_free(mrb, _mrdb_state);
-		_mrdb_state = NULL;
-	}
+  mrb_debug_context_free(mrb);
+  if (_mrdb_state) {
+    mrb_free(mrb, _mrdb_state->command);
+    mrb_free(mrb, _mrdb_state);
+    _mrdb_state = NULL;
+  }
 }
 
@@ -262,29 +264,29 @@
 get_command(mrb_state *mrb, mrdb_state *mrdb)
 {
-	int i;
-	int c;
-
-	for (i = 0; i < MAX_COMMAND_LINE; i++) {
-		if ((c = getchar()) == EOF || c == '\n') break;
-		mrdb->command[i] = c;
-	}
-
-	if (i == 0 && feof(stdin)) {
-		clearerr(stdin);
-		strlcpy(mrdb->command, "quit", MAX_COMMAND_LINE + 1);
-		i += sizeof("quit") - 1;
-	}
-
-	if (i == MAX_COMMAND_LINE) {
-		for (; (c = getchar()) != EOF && c != '\n'; i++);
-	}
-
-	if (i > MAX_COMMAND_LINE) {
-		printf("command line too long.\n");
-		i = 0; /* discard command data */
-	}
-	mrdb->command[i] = '\0';
-
-	return mrdb->command;
+  int i;
+  int c;
+
+  for (i=0; i<MAX_COMMAND_LINE; i++) {
+    if ((c=getchar()) == EOF || c == '\n') break;
+    mrdb->command[i] = c;
+  }
+
+  if (i == 0 && feof(stdin)) {
+    clearerr(stdin);
+    strcpy(mrdb->command, "quit");
+    i += sizeof("quit") - 1;
+  }
+
+  if (i == MAX_COMMAND_LINE) {
+    for ( ; (c=getchar()) != EOF && c !='\n'; i++) ;
+  }
+
+  if (i > MAX_COMMAND_LINE) {
+    printf("command line too long.\n");
+    i = 0; /* discard command data */
+  }
+  mrdb->command[i] = '\0';
+
+  return mrdb->command;
 }
 
@@ -292,29 +294,29 @@
 pick_out_word(mrb_state *mrb, char **pp)
 {
-	char *ps;
-
-	for (ps = *pp; ISBLANK(*ps); ps++);
-	if (*ps == '\0') {
-		return NULL;
-	}
-
-	if (*ps == '\"' || *ps == '\'') {
-		*pp = strchr(ps + 1, *ps);
-		if (*pp) (*pp)++;
-	}
-	else {
-		*pp = strpbrk(ps, " \t");
-	}
-
-	if (!*pp) {
-		*pp = ps + strlen(ps);
-	}
-
-	if (**pp != '\0') {
-		**pp = '\0';
-		(*pp)++;
-	}
-
-	return ps;
+  char *ps;
+
+  for (ps=*pp; ISBLANK(*ps); ps++) ;
+  if (*ps == '\0') {
+    return NULL;
+  }
+
+  if (*ps == '\"' || *ps == '\'') {
+    *pp = strchr(ps+1, *ps);
+    if (*pp) (*pp)++;
+  }
+  else {
+    *pp = strpbrk(ps, " \t");
+  }
+
+  if (!*pp) {
+    *pp = ps + strlen(ps);
+  }
+
+  if (**pp != '\0') {
+    **pp = '\0';
+    (*pp)++;
+  }
+
+  return ps;
 }
 
@@ -322,74 +324,74 @@
 parse_command(mrb_state *mrb, mrdb_state *mrdb, char *buf)
 {
-	debug_command *cmd = NULL;
-	char *p = buf;
-	size_t wlen;
-
-	/* get word #1 */
-	mrdb->words[0] = pick_out_word(mrb, &p);
-	if (!mrdb->words[0]) {
-		return NULL;
-	}
-	mrdb->wcnt = 1;
-	/* set remain parameter */
-	for (; *p && ISBLANK(*p); p++);
-	if (*p) {
-		mrdb->words[mrdb->wcnt++] = p;
-	}
-
-	/* check word #1 */
-	for (cmd = (debug_command*)debug_command_list; cmd->cmd1; cmd++) {
-		wlen = strlen(mrdb->words[0]);
-		if (wlen >= cmd->len1 &&
-			strncmp(mrdb->words[0], cmd->cmd1, wlen) == 0) {
-			break;
-		}
-	}
-
-	if (cmd->cmd2) {
-		if (mrdb->wcnt > 1) {
-			/* get word #2 */
-			mrdb->words[1] = pick_out_word(mrb, &p);
-			if (mrdb->words[1]) {
-				/* update remain parameter */
-				for (; *p && ISBLANK(*p); p++);
-				if (*p) {
-					mrdb->words[mrdb->wcnt++] = p;
-				}
-			}
-		}
-
-		/* check word #1,#2 */
-		for (; cmd->cmd1; cmd++) {
-			wlen = strlen(mrdb->words[0]);
-			if (wlen < cmd->len1 ||
-				strncmp(mrdb->words[0], cmd->cmd1, wlen)) {
-				continue;
-			}
-
-			if (!cmd->cmd2) break;          /* word #1 only */
-
-			if (mrdb->wcnt == 1) continue;  /* word #2 not specified */
-
-			wlen = strlen(mrdb->words[1]);
-			if (wlen >= cmd->len2 &&
-				strncmp(mrdb->words[1], cmd->cmd2, wlen) == 0) {
-				break;  /* word #1 and #2 */
-			}
-		}
-	}
-
-	/* divide remain parameters */
-	if (cmd->cmd1 && cmd->div) {
-		p = mrdb->words[--mrdb->wcnt];
-		for (; mrdb->wcnt < MAX_COMMAND_WORD; mrdb->wcnt++) {
-			mrdb->words[mrdb->wcnt] = pick_out_word(mrb, &p);
-			if (!mrdb->words[mrdb->wcnt]) {
-				break;
-			}
-		}
-	}
-
-	return cmd->cmd1 ? cmd : NULL;
+  debug_command *cmd = NULL;
+  char *p = buf;
+  size_t wlen;
+
+  /* get word #1 */
+  mrdb->words[0] = pick_out_word(mrb, &p);
+  if (!mrdb->words[0]) {
+    return NULL;
+  }
+  mrdb->wcnt = 1;
+  /* set remain parameter */
+  for ( ; *p && ISBLANK(*p); p++) ;
+  if (*p) {
+    mrdb->words[mrdb->wcnt++] = p;
+  }
+
+  /* check word #1 */
+  for (cmd=(debug_command*)debug_command_list; cmd->cmd1; cmd++) {
+    wlen = strlen(mrdb->words[0]);
+    if (wlen >= cmd->len1 &&
+        strncmp(mrdb->words[0], cmd->cmd1, wlen) == 0) {
+      break;
+    }
+  }
+
+  if (cmd->cmd2) {
+    if (mrdb->wcnt > 1) {
+      /* get word #2 */
+      mrdb->words[1] = pick_out_word(mrb, &p);
+      if (mrdb->words[1]) {
+        /* update remain parameter */
+        for ( ; *p && ISBLANK(*p); p++) ;
+        if (*p) {
+          mrdb->words[mrdb->wcnt++] = p;
+        }
+      }
+    }
+
+    /* check word #1,#2 */
+    for ( ; cmd->cmd1; cmd++) {
+      wlen = strlen(mrdb->words[0]);
+      if (wlen < cmd->len1 ||
+          strncmp(mrdb->words[0], cmd->cmd1, wlen)) {
+        continue;
+      }
+
+      if (!cmd->cmd2) break;          /* word #1 only */
+
+      if (mrdb->wcnt == 1) continue;  /* word #2 not specified */
+
+      wlen = strlen(mrdb->words[1]);
+      if (wlen >= cmd->len2 &&
+          strncmp(mrdb->words[1], cmd->cmd2, wlen) == 0) {
+        break;  /* word #1 and #2 */
+      }
+    }
+  }
+
+  /* divide remain parameters */
+  if (cmd->cmd1 && cmd->div) {
+    p = mrdb->words[--mrdb->wcnt];
+    for ( ; mrdb->wcnt<MAX_COMMAND_WORD; mrdb->wcnt++) {
+      mrdb->words[mrdb->wcnt] = pick_out_word(mrb, &p);
+      if (!mrdb->words[mrdb->wcnt]) {
+        break;
+      }
+    }
+  }
+
+  return cmd->cmd1 ? cmd : NULL;
 }
 
@@ -397,36 +399,36 @@
 print_info_stopped_break(mrb_state *mrb, mrdb_state *mrdb)
 {
-	mrb_debug_breakpoint bp;
-	int32_t ret;
-	uint16_t lineno;
-	const char *file;
-	const char *method_name;
-	const char *class_name;
-
-	ret = mrb_debug_get_break(mrb, mrdb->dbg, mrdb->dbg->stopped_bpno, &bp);
-	if (ret == 0) {
-		switch (bp.type) {
-		case MRB_DEBUG_BPTYPE_LINE:
-			file = bp.point.linepoint.file;
-			lineno = bp.point.linepoint.lineno;
-			printf("Breakpoint %d, at %s:%d\n", bp.bpno, file, lineno);
-			break;
-		case MRB_DEBUG_BPTYPE_METHOD:
-			method_name = bp.point.methodpoint.method_name;
-			class_name = bp.point.methodpoint.class_name;
-			if (class_name == NULL) {
-				printf("Breakpoint %d, %s\n", bp.bpno, method_name);
-			}
-			else {
-				printf("Breakpoint %d, %s:%s\n", bp.bpno, class_name, method_name);
-			}
-			if (mrdb->dbg->isCfunc) {
-				printf("Stopped before calling the C function.\n");
-			}
-			break;
-		default:
-			break;
-		}
-	}
+  mrb_debug_breakpoint bp;
+  int32_t ret;
+  uint16_t lineno;
+  const char *file;
+  const char *method_name;
+  const char *class_name;
+
+  ret = mrb_debug_get_break(mrb, mrdb->dbg, mrdb->dbg->stopped_bpno, &bp);
+  if (ret == 0) {
+    switch(bp.type) {
+      case MRB_DEBUG_BPTYPE_LINE:
+        file = bp.point.linepoint.file;
+        lineno = bp.point.linepoint.lineno;
+        printf("Breakpoint %d, at %s:%d\n", bp.bpno, file, lineno);
+        break;
+      case MRB_DEBUG_BPTYPE_METHOD:
+        method_name = bp.point.methodpoint.method_name;
+        class_name = bp.point.methodpoint.class_name;
+        if (class_name == NULL) {
+          printf("Breakpoint %d, %s\n", bp.bpno, method_name);
+        }
+        else {
+          printf("Breakpoint %d, %s:%s\n", bp.bpno, class_name, method_name);
+        }
+        if (mrdb->dbg->isCfunc) {
+          printf("Stopped before calling the C function.\n");
+        }
+        break;
+      default:
+        break;
+    }
+  }
 }
 
@@ -434,7 +436,18 @@
 print_info_stopped_step_next(mrb_state *mrb, mrdb_state *mrdb)
 {
-	const char* file = mrdb->dbg->prvfile;
-	uint16_t lineno = mrdb->dbg->prvline;
-	printf("%s:%d\n", file, lineno);
+  const char* file = mrdb->dbg->prvfile;
+  uint16_t lineno = mrdb->dbg->prvline;
+  printf("%s:%d\n", file, lineno);
+}
+
+static void
+print_info_stopped_code(mrb_state *mrb, mrdb_state *mrdb)
+{
+  char* file = mrb_debug_get_source(mrb, mrdb, mrdb->srcpath, mrdb->dbg->prvfile);
+  uint16_t lineno = mrdb->dbg->prvline;
+  if (file != NULL) {
+    mrb_debug_list(mrb, mrdb->dbg, file, lineno, lineno);
+    mrb_free(mrb, file);
+  }
 }
 
@@ -442,15 +455,17 @@
 print_info_stopped(mrb_state *mrb, mrdb_state *mrdb)
 {
-	switch (mrdb->dbg->bm) {
-	case BRK_BREAK:
-		print_info_stopped_break(mrb, mrdb);
-		break;
-	case BRK_STEP:
-	case BRK_NEXT:
-		print_info_stopped_step_next(mrb, mrdb);
-		break;
-	default:
-		break;
-	}
+  switch(mrdb->dbg->bm) {
+    case BRK_BREAK:
+      print_info_stopped_break(mrb, mrdb);
+      print_info_stopped_code(mrb, mrdb);
+      break;
+    case BRK_STEP:
+    case BRK_NEXT:
+      print_info_stopped_step_next(mrb, mrdb);
+      print_info_stopped_code(mrb, mrdb);
+      break;
+    default:
+      break;
+  }
 }
 
@@ -458,161 +473,163 @@
 get_and_parse_command(mrb_state *mrb, mrdb_state *mrdb)
 {
-	debug_command *cmd = NULL;
-	char *p;
-	int i;
-
-	while (!cmd) {
-		for (p = NULL; !p || *p == '\0'; ) {
-			printf("(%s:%d) ", mrdb->dbg->prvfile, mrdb->dbg->prvline);
-			fflush(stdout);
-			p = get_command(mrb, mrdb);
-		}
-
-		cmd = parse_command(mrb, mrdb, p);
+  debug_command *cmd = NULL;
+  char *p;
+  int i;
+
+  while (!cmd) {
+    for (p=NULL; !p || *p=='\0'; ) {
+      printf("(%s:%d) ", mrdb->dbg->prvfile, mrdb->dbg->prvline);
+      fflush(stdout);
+      p = get_command(mrb, mrdb);
+    }
+
+    cmd = parse_command(mrb, mrdb, p);
 #ifdef _DBG_MRDB_PARSER_
-		for (i = 0; i < mrdb->wcnt; i++) {
-			printf("%d: %s\n", i, mrdb->words[i]);
-		}
+    for (i=0; i<mrdb->wcnt; i++) {
+      printf("%d: %s\n", i, mrdb->words[i]);
+    }
 #endif
-		if (!cmd) {
-			printf("invalid command (");
-			for (i = 0; i < mrdb->wcnt; i++) {
-				if (i > 0) {
-					printf(" ");
-				}
-				printf("%s", mrdb->words[i]);
-			}
-			puts(")");
-		}
-	}
-	return cmd;
+    if (!cmd) {
+      printf("invalid command (");
+      for (i=0; i<mrdb->wcnt; i++) {
+        if (i>0) {
+          printf(" ");
+        }
+        printf("%s", mrdb->words[i]);
+      }
+      puts(")");
+    }
+  }
+  return cmd;
 }
 
 static int32_t
-check_method_breakpoint(mrb_state *mrb, mrb_irep *irep, mrb_code *pc, mrb_value *regs)
-{
-	struct RClass* c = NULL;
-	mrb_sym sym;
-	int32_t bpno;
-	mrb_bool isCfunc;
-
-	mrb_debug_context *dbg = mrb_debug_context_get(mrb);
-
-	isCfunc = FALSE;
-	bpno = dbg->method_bpno;
-	dbg->method_bpno = 0;
-
-	switch (GET_OPCODE(*pc)) {
-	case OP_SEND:
-	case OP_SENDB:
-		c = mrb_class(mrb, regs[GETARG_A(*pc)]);
-		sym = irep->syms[GETARG_B(*pc)];
-		break;
-	case OP_SUPER:
-		c = mrb->c->ci->target_class->super;
-		sym = mrb->c->ci->mid;
-		break;
-	default:
-		sym = 0;
-		break;
-	}
-	if (sym != 0) {
-		dbg->method_bpno = mrb_debug_check_breakpoint_method(mrb, dbg, c, sym, &isCfunc);
-		if (isCfunc) {
-			bpno = dbg->method_bpno;
-			dbg->method_bpno = 0;
-		}
-	}
-	dbg->isCfunc = isCfunc;
-	return bpno;
+check_method_breakpoint(mrb_state *mrb, mrb_irep *irep, const mrb_code *pc, mrb_value *regs)
+{
+  struct RClass* c;
+  mrb_sym sym;
+  int32_t bpno;
+  mrb_bool isCfunc;
+  struct mrb_insn_data insn;
+
+  mrb_debug_context *dbg = mrb_debug_context_get(mrb);
+
+  isCfunc = FALSE;
+  bpno = dbg->method_bpno;
+  dbg->method_bpno = 0;
+
+  insn = mrb_decode_insn(pc);
+  switch(insn.insn) {
+    case OP_SEND:
+    case OP_SENDB:
+      c = mrb_class(mrb, regs[insn.a]);
+      sym = irep->syms[insn.b];
+      break;
+    case OP_SUPER:
+      c = mrb->c->ci->target_class->super;
+      sym = mrb->c->ci->mid;
+      break;
+    default:
+      sym = 0;
+      break;
+  }
+  if (sym != 0) {
+    dbg->method_bpno = mrb_debug_check_breakpoint_method(mrb, dbg, c, sym, &isCfunc);
+    if (isCfunc) {
+      bpno = dbg->method_bpno;
+      dbg->method_bpno = 0;
+    }
+  }
+  dbg->isCfunc = isCfunc;
+  return bpno;
 }
 
 static void
-mrb_code_fetch_hook(mrb_state *mrb, mrb_irep *irep, mrb_code *pc, mrb_value *regs)
-{
-	const char *file;
-	int32_t line;
-	int32_t bpno;
-
-	mrb_debug_context *dbg = mrb_debug_context_get(mrb);
-
-	mrb_assert(dbg);
-
-	dbg->irep = irep;
-	dbg->pc = pc;
-	dbg->regs = regs;
-
-	if (dbg->xphase == DBG_PHASE_RESTART) {
-		dbg->root_irep = irep;
-		dbg->prvfile = NULL;
-		dbg->prvline = 0;
-		dbg->prvci = NULL;
-		InterlockedExchange(&dbg->xm, DBG_RUN);
-		dbg->xphase = DBG_PHASE_RUNNING;
-	}
-
-	file = mrb_debug_get_filename(irep, (uint32_t)(pc - irep->iseq));
-	line = mrb_debug_get_line(irep, (uint32_t)(pc - irep->iseq));
-
-	switch (dbg->xm) {
-	case DBG_STEP:
-		if (!file || (dbg->prvfile == file && dbg->prvline == line)) {
-			return;
-		}
-		dbg->method_bpno = 0;
-		dbg->bm = BRK_STEP;
-		break;
-
-	case DBG_NEXT:
-		if (!file || (dbg->prvfile == file && dbg->prvline == line)) {
-			return;
-		}
-		if ((intptr_t)(dbg->prvci) < (intptr_t)(mrb->c->ci)) {
-			return;
-		}
-		dbg->prvci = NULL;
-		dbg->method_bpno = 0;
-		dbg->bm = BRK_NEXT;
-		break;
-
-	case DBG_RUN:
-		bpno = check_method_breakpoint(mrb, irep, pc, regs);
-		if (bpno > 0) {
-			dbg->stopped_bpno = bpno;
-			dbg->bm = BRK_BREAK;
-			break;
-		}
-		if (dbg->prvfile != file || dbg->prvline != line) {
-			bpno = mrb_debug_check_breakpoint_line(mrb, dbg, file, line);
-			if (bpno > 0) {
-				dbg->stopped_bpno = bpno;
-				dbg->bm = BRK_BREAK;
-				break;
-			}
-		}
-		dbg->prvfile = file;
-		dbg->prvline = line;
-		return;
-	case DBG_INIT:
-		dbg->root_irep = irep;
-		dbg->bm = BRK_INIT;
-		if (!file || line < 0) {
-			puts("Cannot get debugging information.");
-		}
-		break;
-
-	default:
-		return;
-	}
-
-	dbg->prvfile = file;
-	dbg->prvline = line;
-
-	if (dbg->bm == BRK_BREAK && --dbg->ccnt > 0) {
-		return;
-	}
-	dbg->break_hook(mrb, dbg);
-
-	dbg->xphase = DBG_PHASE_RUNNING;
+mrb_code_fetch_hook(mrb_state *mrb, mrb_irep *irep, const mrb_code *pc, mrb_value *regs)
+{
+  const char *file;
+  int32_t line;
+  int32_t bpno;
+
+  mrb_debug_context *dbg = mrb_debug_context_get(mrb);
+
+  mrb_assert(dbg);
+
+  dbg->irep = irep;
+  dbg->pc   = pc;
+  dbg->regs = regs;
+
+  if (dbg->xphase == DBG_PHASE_RESTART) {
+    dbg->root_irep = irep;
+    dbg->prvfile = NULL;
+    dbg->prvline = 0;
+    dbg->prvci = NULL;
+    dbg->xm = DBG_RUN;
+    dbg->xphase = DBG_PHASE_RUNNING;
+  }
+
+  file = mrb_debug_get_filename(mrb, irep, pc - irep->iseq);
+  line = mrb_debug_get_line(mrb, irep, pc - irep->iseq);
+
+  switch (dbg->xm) {
+  case DBG_STEP:
+    if (!file || (dbg->prvfile == file && dbg->prvline == line)) {
+      return;
+    }
+    dbg->method_bpno = 0;
+    dbg->bm = BRK_STEP;
+    break;
+
+  case DBG_NEXT:
+    if (!file || (dbg->prvfile == file && dbg->prvline == line)) {
+      return;
+    }
+    if ((intptr_t)(dbg->prvci) < (intptr_t)(mrb->c->ci)) {
+      return;
+    }
+    dbg->prvci = NULL;
+    dbg->method_bpno = 0;
+    dbg->bm = BRK_NEXT;
+    break;
+
+  case DBG_RUN:
+    bpno = check_method_breakpoint(mrb, irep, pc, regs);
+    if (bpno > 0) {
+      dbg->stopped_bpno = bpno;
+      dbg->bm = BRK_BREAK;
+      break;
+    }
+    if (dbg->prvfile != file || dbg->prvline != line) {
+      bpno = mrb_debug_check_breakpoint_line(mrb, dbg, file, line);
+      if (bpno > 0) {
+        dbg->stopped_bpno = bpno;
+        dbg->bm = BRK_BREAK;
+        break;
+      }
+    }
+    dbg->prvfile = file;
+    dbg->prvline = line;
+    return;
+  case DBG_INIT:
+    dbg->root_irep = irep;
+    dbg->bm = BRK_INIT;
+    if (!file || line < 0) {
+      puts("Cannot get debugging information.");
+    }
+    break;
+
+  default:
+    return;
+  }
+
+  dbg->prvfile = file;
+  dbg->prvline = line;
+
+  if (dbg->bm == BRK_BREAK && --dbg->ccnt > 0) {
+    return;
+  }
+  dbg->break_hook(mrb, dbg);
+
+  dbg->xphase = DBG_PHASE_RUNNING;
 }
 
@@ -620,19 +637,19 @@
 mrb_debug_break_hook(mrb_state *mrb, mrb_debug_context *dbg)
 {
-	debug_command *cmd;
-	dbgcmd_state st = DBGST_CONTINUE;
-	mrdb_state *mrdb = mrdb_state_get(mrb);
-
-	print_info_stopped(mrb, mrdb);
-
-	while (1) {
-		cmd = get_and_parse_command(mrb, mrdb);
-		mrb_assert(cmd);
-
-		st = cmd->func(mrb, mrdb);
-
-		if ((st == DBGST_CONTINUE) || (st == DBGST_RESTART)) break;
-	}
-	return dbg->xm;
+  debug_command *cmd;
+  dbgcmd_state st = DBGST_CONTINUE;
+  mrdb_state *mrdb = mrdb_state_get(mrb);
+
+  print_info_stopped(mrb, mrdb);
+
+  while (1) {
+    cmd = get_and_parse_command(mrb, mrdb);
+    mrb_assert(cmd);
+
+    st = cmd->func(mrb, mrdb);
+
+    if ((st == DBGST_CONTINUE) || (st == DBGST_RESTART)) break;
+  }
+  return dbg->xm;
 }
 
@@ -643,5 +660,8 @@
 	if (mrdb == NULL)
 		return 0;
-	return InterlockedCompareExchange(&mrdb->dbg->xm, DBG_STEP, DBG_RUN) == DBG_RUN;
+	long prev = mrdb->dbg->xm;
+	if (mrdb->dbg->xm == DBG_RUN)
+		mrdb->dbg->xm = DBG_STEP;
+	return prev == DBG_RUN;
 }
 
@@ -649,105 +669,105 @@
 mrdb_main(int argc, char **argv)
 {
-	mrb_state *mrb = mrb_open();
-	int n = -1;
-	struct _args args;
-	mrb_value v;
-	mrdb_state *mrdb;
-	mrdb_state *mrdb_backup;
-	mrb_debug_context* dbg_backup;
-	debug_command *cmd;
-
-l_restart:
-
-	if (mrb == NULL) {
-		fputs("Invalid mrb_state, exiting mruby\n", stderr);
-		return EXIT_FAILURE;
-	}
-
-	/* parse command parameters */
-	n = parse_args(mrb, argc, argv, &args);
-	if (n == EXIT_FAILURE || args.rfp == NULL) {
-		cleanup(mrb, &args);
-		usage(argv[0]);
-		return n;
-	}
-
-	/* initialize debugger information */
-	mrdb = mrdb_state_get(mrb);
-	mrb_assert(mrdb && mrdb->dbg);
-	mrdb->srcpath = args.srcpath;
-
-	if (mrdb->dbg->xm == DBG_QUIT) {
-		mrdb->dbg->xphase = DBG_PHASE_RESTART;
-	}
-	else {
-		mrdb->dbg->xphase = DBG_PHASE_BEFORE_RUN;
-	}
-	InterlockedExchange(&mrdb->dbg->xm, DBG_INIT);
-	mrdb->dbg->ccnt = 1;
-
-	/* setup hook functions */
-	mrb->code_fetch_hook = mrb_code_fetch_hook;
-	mrdb->dbg->break_hook = mrb_debug_break_hook;
-
-	if (args.mrbfile) { /* .mrb */
-		v = mrb_load_irep_file(mrb, args.rfp);
-	}
-	else {              /* .rb */
-		mrbc_context *cc = mrbc_context_new(mrb);
-		mrbc_filename(mrb, cc, args.fname);
-		v = mrb_load_file_cxt(mrb, args.rfp, cc);
-		mrbc_context_free(mrb, cc);
-	}
-	if (mrdb->dbg->xm == DBG_QUIT && !mrb_undef_p(v) && mrb->exc) {
-		const char *classname = mrb_obj_classname(mrb, mrb_obj_value(mrb->exc));
-		if (!strcmp(classname, "DebuggerExit")) {
-			cleanup(mrb, &args);
-			return 0;
-		}
-		if (!strcmp(classname, "DebuggerRestart")) {
-			mrdb_backup = mrdb_state_get(mrb);
-			dbg_backup = mrb_debug_context_get(mrb);
-
-			mrdb_state_set(NULL);
-			mrb_debug_context_set(NULL);
-
-			cleanup(mrb, &args);
-			mrb = mrb_open();
-
-			mrdb_state_set(mrdb_backup);
-			mrb_debug_context_set(dbg_backup);
-
-			goto l_restart;
-		}
-	}
-	puts("mruby application exited.");
-	mrdb->dbg->xphase = DBG_PHASE_AFTER_RUN;
-	if (!mrb_undef_p(v)) {
-		if (mrb->exc) {
-			mrb_print_error(mrb);
-		}
-		else {
-			printf(" => ");
-			mrb_p(mrb, v);
-		}
-	}
-
-	mrdb->dbg->prvfile = "-";
-	mrdb->dbg->prvline = 0;
-
-	while (1) {
-		cmd = get_and_parse_command(mrb, mrdb);
-		mrb_assert(cmd);
-
-		if (cmd->id == DBGCMD_QUIT) {
-			break;
-		}
-
-		if (cmd->func(mrb, mrdb) == DBGST_RESTART) goto l_restart;
-	}
-
-	cleanup(mrb, &args);
-
-	return 0;
-}
+  mrb_state *mrb = mrb_open();
+  int n = -1;
+  struct _args args;
+  mrb_value v;
+  mrdb_state *mrdb;
+  mrdb_state *mrdb_backup;
+  mrb_debug_context* dbg_backup;
+  debug_command *cmd;
+
+ l_restart:
+
+  if (mrb == NULL) {
+    fputs("Invalid mrb_state, exiting mruby\n", stderr);
+    return EXIT_FAILURE;
+  }
+
+  /* parse command parameters */
+  n = parse_args(mrb, argc, argv, &args);
+  if (n == EXIT_FAILURE || args.rfp == NULL) {
+    cleanup(mrb, &args);
+    usage(argv[0]);
+    return n;
+  }
+
+  /* initialize debugger information */
+  mrdb = mrdb_state_get(mrb);
+  mrb_assert(mrdb && mrdb->dbg);
+  mrdb->srcpath = args.srcpath;
+
+  if (mrdb->dbg->xm == DBG_QUIT) {
+    mrdb->dbg->xphase = DBG_PHASE_RESTART;
+  }
+  else {
+    mrdb->dbg->xphase = DBG_PHASE_BEFORE_RUN;
+  }
+  mrdb->dbg->xm = DBG_INIT;
+  mrdb->dbg->ccnt = 1;
+
+  /* setup hook functions */
+  mrb->code_fetch_hook = mrb_code_fetch_hook;
+  mrdb->dbg->break_hook = mrb_debug_break_hook;
+
+  if (args.mrbfile) { /* .mrb */
+    v = mrb_load_irep_file(mrb, args.rfp);
+  }
+  else {              /* .rb */
+    mrbc_context *cc = mrbc_context_new(mrb);
+    mrbc_filename(mrb, cc, args.fname);
+    v = mrb_load_file_cxt(mrb, args.rfp, cc);
+    mrbc_context_free(mrb, cc);
+  }
+  if (mrdb->dbg->xm == DBG_QUIT && !mrb_undef_p(v) && mrb->exc) {
+    const char *classname = mrb_obj_classname(mrb, mrb_obj_value(mrb->exc));
+    if (!strcmp(classname, "DebuggerExit")) {
+      cleanup(mrb, &args);
+      return 0;
+    }
+    if (!strcmp(classname, "DebuggerRestart")) {
+      mrdb_backup = mrdb_state_get(mrb);
+      dbg_backup = mrb_debug_context_get(mrb);
+
+      mrdb_state_set(NULL);
+      mrb_debug_context_set(NULL);
+
+      cleanup(mrb, &args);
+      mrb = mrb_open();
+
+      mrdb_state_set(mrdb_backup);
+      mrb_debug_context_set(dbg_backup);
+
+      goto l_restart;
+    }
+  }
+  puts("mruby application exited.");
+  mrdb->dbg->xphase = DBG_PHASE_AFTER_RUN;
+  if (!mrb_undef_p(v)) {
+    if (mrb->exc) {
+      mrb_print_error(mrb);
+    }
+    else {
+      printf(" => ");
+      mrb_p(mrb, v);
+    }
+  }
+
+  mrdb->dbg->prvfile = "-";
+  mrdb->dbg->prvline = 0;
+
+  while (1) {
+    cmd = get_and_parse_command(mrb, mrdb);
+    mrb_assert(cmd);
+
+    if (cmd->id == DBGCMD_QUIT) {
+      break;
+    }
+
+    if ( cmd->func(mrb, mrdb) == DBGST_RESTART ) goto l_restart;
+  }
+
+  cleanup(mrb, &args);
+
+  return 0;
+}
Index: /EcnlProtoTool/trunk/prototool/src/mrdb.h
===================================================================
--- /EcnlProtoTool/trunk/prototool/src/mrdb.h	(revision 438)
+++ /EcnlProtoTool/trunk/prototool/src/mrdb.h	(revision 439)
@@ -7,7 +7,11 @@
 #define MRDB_H
 
-#include "mruby.h"
+#include <mruby.h>
 
 #include "mrdbconf.h"
+
+#ifdef _MSC_VER
+# define __func__ __FUNCTION__
+#endif
 
 #define MAX_COMMAND_WORD (16)
@@ -20,4 +24,5 @@
   DBGCMD_BREAK,
   DBGCMD_INFO_BREAK,
+  DBGCMD_INFO_LOCAL,
   DBGCMD_WATCH,
   DBGCMD_INFO_WATCH,
@@ -52,13 +57,4 @@
   DBG_QUIT,
 } mrdb_exemode;
-
-#ifdef _MSC_VER
-# define __func__ __FUNCTION__
-extern long __stdcall InterlockedExchange(long *dst, long src);
-extern long __stdcall InterlockedCompareExchange(long *dst, long src, long cmp);
-#else
-#define InterlockedExchange(dst, src) do { *(dst) = src; } while(0)
-__inline__ static enum mrdb_exemode InterlockedCompareExchange(enum mrdb_exemode *dst, enum mrdb_exemode src, enum mrdb_exemode cmp) { long prev = *(dst); if (*(dst) == cmp) *(dst) = src; return prev; }
-#endif
 
 typedef enum mrdb_exephase {
@@ -110,5 +106,5 @@
   struct mrb_irep *root_irep;
   struct mrb_irep *irep;
-  mrb_code *pc;
+  const mrb_code *pc;
   mrb_value *regs;
 
@@ -117,9 +113,5 @@
   mrb_callinfo *prvci;
 
-#ifdef _MSC_VER
-  long xm;
-#else
   mrdb_exemode xm;
-#endif
   mrdb_exephase xphase;
   mrdb_brkmode bm;
@@ -161,4 +153,5 @@
 dbgcmd_state dbgcmd_break(mrb_state*, mrdb_state*);
 dbgcmd_state dbgcmd_info_break(mrb_state*, mrdb_state*);
+dbgcmd_state dbgcmd_info_local(mrb_state*, mrdb_state*);
 dbgcmd_state dbgcmd_delete(mrb_state*, mrdb_state*);
 dbgcmd_state dbgcmd_enable(mrb_state*, mrdb_state*);
@@ -168,4 +161,5 @@
 dbgcmd_state dbgcmd_eval(mrb_state*, mrdb_state*);
 /* cmdmisc.c */
+dbgcmd_state dbgcmd_list(mrb_state*, mrdb_state*);
 dbgcmd_state dbgcmd_help(mrb_state*, mrdb_state*);
 dbgcmd_state dbgcmd_quit(mrb_state*, mrdb_state*);
Index: /EcnlProtoTool/trunk/prototool/src/mrdbconf.h
===================================================================
--- /EcnlProtoTool/trunk/prototool/src/mrdbconf.h	(revision 438)
+++ /EcnlProtoTool/trunk/prototool/src/mrdbconf.h	(revision 439)
@@ -6,4 +6,12 @@
 #ifndef MRDBCONF_H
 #define MRDBCONF_H
+
+#ifndef MRB_ENABLE_DEBUG_HOOK
+# error mruby-bin-debugger need 'MRB_ENABLE_DEBUG_HOOK' configuration in your 'build_config.rb'
+#endif
+
+#ifdef MRB_DISABLE_STDIO
+# error mruby-bin-debugger conflicts 'MRB_DISABLE_STDIO' configuration in your 'build_config.rb'
+#endif
 
 /* configuration options: */
Index: /EcnlProtoTool/trunk/prototool/src/mruby.c
===================================================================
--- /EcnlProtoTool/trunk/prototool/src/mruby.c	(revision 438)
+++ /EcnlProtoTool/trunk/prototool/src/mruby.c	(revision 439)
@@ -1,34 +1,36 @@
+#include <mruby.h>
+
+#ifdef MRB_DISABLE_STDIO
+# error mruby-bin-mruby conflicts 'MRB_DISABLE_STDIO' configuration in your 'build_config.rb'
+#endif
+
 #include <stdlib.h>
 #include <string.h>
-
-#include "mruby.h"
-#include "mruby/array.h"
-#include "mruby/compile.h"
-#include "mruby/dump.h"
-#include "mruby/variable.h"
-
-#ifdef MRB_DISABLE_STDIO
-static void
-p(mrb_state *mrb, mrb_value obj)
-{
-	mrb_value val = mrb_inspect(mrb, obj);
-
-	fwrite(RSTRING_PTR(val), RSTRING_LEN(val), 1, stdout);
-	putc('\n', stdout);
-}
-#else
-#define p(mrb,obj) mrb_p(mrb,obj)
-#endif
-
-struct _args
-{
-	FILE *rfp;
-	char* cmdline;
-	mrb_bool fname : 1;
-	mrb_bool mrbfile : 1;
-	mrb_bool check_syntax : 1;
-	mrb_bool verbose : 1;
-	int argc;
-	char** argv;
+#include <mruby/array.h>
+#include <mruby/compile.h>
+#include <mruby/dump.h>
+#include <mruby/variable.h>
+
+struct _args {
+  FILE *rfp;
+  char *cmdline;
+  mrb_bool fname        : 1;
+  mrb_bool mrbfile      : 1;
+  mrb_bool check_syntax : 1;
+  mrb_bool verbose      : 1;
+  mrb_bool version      : 1;
+  mrb_bool debug        : 1;
+  int argc;
+  char **argv;
+  int libc;
+  char **libv;
+};
+
+struct options {
+  int argc;
+  char **argv;
+  char *program;
+  char *opt;
+  char short_opt[2];
 };
 
@@ -36,20 +38,89 @@
 usage(const char *name)
 {
-	static const char *const usage_msg[] = {
-		"switches:",
-		"-b           load and execute RiteBinary (mrb) file",
-		"-c           check syntax only",
-		"-e 'command' one line of script",
-		"-v           print version number, then run in verbose mode",
-		"--verbose    run in verbose mode",
-		"--version    print the version",
-		"--copyright  print the copyright",
-		NULL
-	};
-	const char *const *p = usage_msg;
-
-	printf("Usage: %s [switches] programfile\n", name);
-	while (*p)
-		printf("  %s\n", *p++);
+  static const char *const usage_msg[] = {
+  "switches:",
+  "-b           load and execute RiteBinary (mrb) file",
+  "-c           check syntax only",
+  "-d           set debugging flags (set $DEBUG to true)",
+  "-e 'command' one line of script",
+  "-r library   load the library before executing your script",
+  "-v           print version number, then run in verbose mode",
+  "--verbose    run in verbose mode",
+  "--version    print the version",
+  "--copyright  print the copyright",
+  NULL
+  };
+  const char *const *p = usage_msg;
+
+  printf("Usage: %s [switches] [programfile] [arguments]\n", name);
+  while (*p)
+    printf("  %s\n", *p++);
+}
+
+static void
+options_init(struct options *opts, int argc, char **argv)
+{
+  opts->argc = argc;
+  opts->argv = argv;
+  opts->program = *argv;
+  *opts->short_opt = 0;
+}
+
+static const char *
+options_opt(struct options *opts)
+{
+  /* concatenated short options (e.g. `-cv`) */
+  if (*opts->short_opt && *++opts->opt) {
+   short_opt:
+    opts->short_opt[0] = *opts->opt;
+    opts->short_opt[1] = 0;
+    return opts->short_opt;
+  }
+
+  while (++opts->argv, --opts->argc) {
+    opts->opt = *opts->argv;
+
+    /*  empty         || not start with `-`  || `-` */
+    if (!opts->opt[0] || opts->opt[0] != '-' || !opts->opt[1]) return NULL;
+
+    if (opts->opt[1] == '-') {
+      /* `--` */
+      if (!opts->opt[2]) {
+        ++opts->argv, --opts->argc;
+        return NULL;
+      }
+      /* long option */
+      opts->opt += 2;
+      *opts->short_opt = 0;
+      return opts->opt;
+    }
+    else {
+      /* short option */
+      ++opts->opt;
+      goto short_opt;
+    }
+  }
+  return NULL;
+}
+
+static const char *
+options_arg(struct options *opts)
+{
+  if (*opts->short_opt && opts->opt[1]) {
+    /* concatenated short option and option argument (e.g. `-rLIBRARY`) */
+    *opts->short_opt = 0;
+    return opts->opt + 1;
+  }
+  --opts->argc, ++opts->argv;
+  return opts->argc ? *opts->argv : NULL;
+}
+
+static char *
+dup_arg_item(mrb_state *mrb, const char *item)
+{
+  size_t buflen = strlen(item) + 1;
+  char *buf = (char*)mrb_malloc(mrb, buflen);
+  memcpy(buf, item, buflen);
+  return buf;
 }
 
@@ -57,101 +128,109 @@
 parse_args(mrb_state *mrb, int argc, char **argv, struct _args *args)
 {
-	char **origargv = argv;
-	static const struct _args args_zero = { 0 };
-
-	*args = args_zero;
-
-	for (argc--, argv++; argc > 0; argc--, argv++) {
-		char *item;
-		if (argv[0][0] != '-') break;
-
-		if (strlen(*argv) <= 1) {
-			argc--; argv++;
-			args->rfp = stdin;
-			break;
-		}
-
-		item = argv[0] + 1;
-		switch (*item++) {
-		case 'b':
-			args->mrbfile = TRUE;
-			break;
-		case 'c':
-			args->check_syntax = TRUE;
-			break;
-		case 'e':
-			if (item[0]) {
-				goto append_cmdline;
-			}
-			else if (argc > 1) {
-				argc--; argv++;
-				item = argv[0];
-			append_cmdline:
-				if (!args->cmdline) {
-					size_t buflen;
-					char *buf;
-
-					buflen = strlen(item) + 1;
-					buf = (char *)mrb_malloc(mrb, buflen);
-					memcpy(buf, item, buflen);
-					args->cmdline = buf;
-				}
-				else {
-					size_t cmdlinelen;
-					size_t itemlen;
-
-					cmdlinelen = strlen(args->cmdline);
-					itemlen = strlen(item);
-					args->cmdline =
-						(char *)mrb_realloc(mrb, args->cmdline, cmdlinelen + itemlen + 2);
-					args->cmdline[cmdlinelen] = '\n';
-					memcpy(args->cmdline + cmdlinelen + 1, item, itemlen + 1);
-				}
-			}
-			else {
-				printf("%s: No code specified for -e\n", *origargv);
-				return EXIT_SUCCESS;
-			}
-			break;
-		case 'v':
-			if (!args->verbose) mrb_show_version(mrb);
-			args->verbose = TRUE;
-			break;
-		case '-':
-			if (strcmp((*argv) + 2, "version") == 0) {
-				mrb_show_version(mrb);
-				exit(EXIT_SUCCESS);
-			}
-			else if (strcmp((*argv) + 2, "verbose") == 0) {
-				args->verbose = TRUE;
-				break;
-			}
-			else if (strcmp((*argv) + 2, "copyright") == 0) {
-				mrb_show_copyright(mrb);
-				exit(EXIT_SUCCESS);
-			}
-		default:
-			return EXIT_FAILURE;
-		}
-	}
-
-	if (args->rfp == NULL && args->cmdline == NULL) {
-		if (*argv == NULL) args->rfp = stdin;
-		else {
-			args->rfp = fopen(argv[0], args->mrbfile ? "rb" : "r");
-			if (args->rfp == NULL) {
-				printf("%s: Cannot open program file. (%s)\n", *origargv, *argv);
-				return EXIT_FAILURE;
-			}
-			args->fname = TRUE;
-			args->cmdline = argv[0];
-			argc--; argv++;
-		}
-	}
-	args->argv = (char **)mrb_realloc(mrb, args->argv, sizeof(char*) * (argc + 1));
-	memcpy(args->argv, argv, (argc + 1) * sizeof(char*));
-	args->argc = argc;
-
-	return EXIT_SUCCESS;
+  static const struct _args args_zero = { 0 };
+  struct options opts[1];
+  const char *opt, *item;
+
+  *args = args_zero;
+  options_init(opts, argc, argv);
+  while ((opt = options_opt(opts))) {
+    if (strcmp(opt, "b") == 0) {
+      args->mrbfile = TRUE;
+    }
+    else if (strcmp(opt, "c") == 0) {
+      args->check_syntax = TRUE;
+    }
+    else if (strcmp(opt, "d") == 0) {
+      args->debug = TRUE;
+    }
+    else if (strcmp(opt, "e") == 0) {
+      if ((item = options_arg(opts))) {
+        if (!args->cmdline) {
+          args->cmdline = dup_arg_item(mrb, item);
+        }
+        else {
+          size_t cmdlinelen;
+          size_t itemlen;
+
+          cmdlinelen = strlen(args->cmdline);
+          itemlen = strlen(item);
+          args->cmdline =
+            (char *)mrb_realloc(mrb, args->cmdline, cmdlinelen + itemlen + 2);
+          args->cmdline[cmdlinelen] = '\n';
+          memcpy(args->cmdline + cmdlinelen + 1, item, itemlen + 1);
+        }
+      }
+      else {
+        fprintf(stderr, "%s: No code specified for -e\n", opts->program);
+        return EXIT_FAILURE;
+      }
+    }
+    else if (strcmp(opt, "h") == 0) {
+      usage(opts->program);
+      exit(EXIT_SUCCESS);
+    }
+    else if (strcmp(opt, "r") == 0) {
+      if ((item = options_arg(opts))) {
+        if (args->libc == 0) {
+          args->libv = (char**)mrb_malloc(mrb, sizeof(char*));
+        }
+        else {
+          args->libv = (char**)mrb_realloc(mrb, args->libv, sizeof(char*) * (args->libc + 1));
+        }
+        args->libv[args->libc++] = dup_arg_item(mrb, item);
+      }
+      else {
+        fprintf(stderr, "%s: No library specified for -r\n", opts->program);
+        return EXIT_FAILURE;
+      }
+    }
+    else if (strcmp(opt, "v") == 0) {
+      if (!args->verbose) {
+        mrb_show_version(mrb);
+        args->version = TRUE;
+      }
+      args->verbose = TRUE;
+    }
+    else if (strcmp(opt, "version") == 0) {
+      mrb_show_version(mrb);
+      exit(EXIT_SUCCESS);
+    }
+    else if (strcmp(opt, "verbose") == 0) {
+      args->verbose = TRUE;
+    }
+    else if (strcmp(opt, "copyright") == 0) {
+      mrb_show_copyright(mrb);
+      exit(EXIT_SUCCESS);
+    }
+    else {
+      fprintf(stderr, "%s: invalid option %s%s (-h will show valid options)\n",
+              opts->program, opt[1] ? "--" : "-", opt);
+      return EXIT_FAILURE;
+    }
+  }
+
+  argc = opts->argc; argv = opts->argv;
+  if (args->cmdline == NULL) {
+    if (*argv == NULL) {
+      if (args->version) exit(EXIT_SUCCESS);
+      args->rfp = stdin;
+    }
+    else {
+      args->rfp = strcmp(argv[0], "-") == 0 ?
+        stdin : fopen(argv[0], args->mrbfile ? "rb" : "r");
+      if (args->rfp == NULL) {
+        fprintf(stderr, "%s: Cannot open program file: %s\n", opts->program, argv[0]);
+        return EXIT_FAILURE;
+      }
+      args->fname = TRUE;
+      args->cmdline = argv[0];
+      argc--; argv++;
+    }
+  }
+  args->argv = (char **)mrb_realloc(mrb, args->argv, sizeof(char*) * (argc + 1));
+  memcpy(args->argv, argv, (argc+1) * sizeof(char*));
+  args->argc = argc;
+
+  return EXIT_SUCCESS;
 }
 
@@ -159,10 +238,16 @@
 cleanup(mrb_state *mrb, struct _args *args)
 {
-	if (args->rfp && args->rfp != stdin)
-		fclose(args->rfp);
-	if (!args->fname)
-		mrb_free(mrb, args->cmdline);
-	mrb_free(mrb, args->argv);
-	mrb_close(mrb);
+  if (args->rfp && args->rfp != stdin)
+    fclose(args->rfp);
+  if (!args->fname)
+    mrb_free(mrb, args->cmdline);
+  mrb_free(mrb, args->argv);
+  if (args->libc) {
+    while (args->libc--) {
+      mrb_free(mrb, args->libv[args->libc]);
+    }
+    mrb_free(mrb, args->libv);
+  }
+  mrb_close(mrb);
 }
 
@@ -170,76 +255,101 @@
 mruby_main(int argc, char **argv)
 {
-	mrb_state *mrb = mrb_open();
-	int n = -1;
-	int i;
-	struct _args args;
-	mrb_value ARGV;
-	mrbc_context *c;
-	mrb_value v;
-	mrb_sym zero_sym;
-
-	if (mrb == NULL) {
-		fputs("Invalid mrb_state, exiting mruby\n", stderr);
-		return EXIT_FAILURE;
-	}
-
-	n = parse_args(mrb, argc, argv, &args);
-	if (n == EXIT_FAILURE || (args.cmdline == NULL && args.rfp == NULL)) {
-		cleanup(mrb, &args);
-		usage(argv[0]);
-		return n;
-	}
-	else {
-		int ai = mrb_gc_arena_save(mrb);
-		ARGV = mrb_ary_new_capa(mrb, args.argc);
-		for (i = 0; i < args.argc; i++) {
-			mrb_ary_push(mrb, ARGV, mrb_str_new_cstr(mrb, args.argv[i]));
-		}
-		mrb_define_global_const(mrb, "ARGV", ARGV);
-
-		c = mrbc_context_new(mrb);
-		if (args.verbose)
-			c->dump_result = TRUE;
-		if (args.check_syntax)
-			c->no_exec = TRUE;
-
-		/* Set $0 */
-		zero_sym = mrb_intern_lit(mrb, "$0");
-		if (args.rfp) {
-			const char *cmdline;
-			cmdline = args.cmdline ? args.cmdline : "-";
-			mrbc_filename(mrb, c, cmdline);
-			mrb_gv_set(mrb, zero_sym, mrb_str_new_cstr(mrb, cmdline));
-		}
-		else {
-			mrbc_filename(mrb, c, "-e");
-			mrb_gv_set(mrb, zero_sym, mrb_str_new_lit(mrb, "-e"));
-		}
-
-		/* Load program */
-		if (args.mrbfile) {
-			v = mrb_load_irep_file_cxt(mrb, args.rfp, c);
-		}
-		else if (args.rfp) {
-			v = mrb_load_file_cxt(mrb, args.rfp, c);
-		}
-		else {
-			v = mrb_load_string_cxt(mrb, args.cmdline, c);
-		}
-
-		mrb_gc_arena_restore(mrb, ai);
-		mrbc_context_free(mrb, c);
-		if (mrb->exc) {
-			if (!mrb_undef_p(v)) {
-				mrb_print_error(mrb);
-			}
-			n = -1;
-		}
-		else if (args.check_syntax) {
-			printf("Syntax OK\n");
-		}
-	}
-	cleanup(mrb, &args);
-
-	return n == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
-}
+  mrb_state *mrb = mrb_open();
+  int n = -1;
+  int i;
+  struct _args args;
+  mrb_value ARGV;
+  mrbc_context *c;
+  mrb_value v;
+  mrb_sym zero_sym;
+
+  if (mrb == NULL) {
+    fprintf(stderr, "%s: Invalid mrb_state, exiting mruby\n", *argv);
+    return EXIT_FAILURE;
+  }
+
+  n = parse_args(mrb, argc, argv, &args);
+  if (n == EXIT_FAILURE || (args.cmdline == NULL && args.rfp == NULL)) {
+    cleanup(mrb, &args);
+    return n;
+  }
+  else {
+    int ai = mrb_gc_arena_save(mrb);
+    ARGV = mrb_ary_new_capa(mrb, args.argc);
+    for (i = 0; i < args.argc; i++) {
+      char* utf8 = mrb_utf8_from_locale(args.argv[i], -1);
+      if (utf8) {
+        mrb_ary_push(mrb, ARGV, mrb_str_new_cstr(mrb, utf8));
+        mrb_utf8_free(utf8);
+      }
+    }
+    mrb_define_global_const(mrb, "ARGV", ARGV);
+    mrb_gv_set(mrb, mrb_intern_lit(mrb, "$DEBUG"), mrb_bool_value(args.debug));
+
+    c = mrbc_context_new(mrb);
+    if (args.verbose)
+      c->dump_result = TRUE;
+    if (args.check_syntax)
+      c->no_exec = TRUE;
+
+    /* Set $0 */
+    zero_sym = mrb_intern_lit(mrb, "$0");
+    if (args.rfp) {
+      const char *cmdline;
+      cmdline = args.cmdline ? args.cmdline : "-";
+      mrbc_filename(mrb, c, cmdline);
+      mrb_gv_set(mrb, zero_sym, mrb_str_new_cstr(mrb, cmdline));
+    }
+    else {
+      mrbc_filename(mrb, c, "-e");
+      mrb_gv_set(mrb, zero_sym, mrb_str_new_lit(mrb, "-e"));
+    }
+
+    /* Load libraries */
+    for (i = 0; i < args.libc; i++) {
+      FILE *lfp = fopen(args.libv[i], args.mrbfile ? "rb" : "r");
+      if (lfp == NULL) {
+        fprintf(stderr, "%s: Cannot open library file: %s\n", *argv, args.libv[i]);
+        mrbc_context_free(mrb, c);
+        cleanup(mrb, &args);
+        return EXIT_FAILURE;
+      }
+      if (args.mrbfile) {
+        v = mrb_load_irep_file_cxt(mrb, lfp, c);
+      }
+      else {
+        v = mrb_load_file_cxt(mrb, lfp, c);
+      }
+      fclose(lfp);
+    }
+
+    /* Load program */
+    if (args.mrbfile) {
+      v = mrb_load_irep_file_cxt(mrb, args.rfp, c);
+    }
+    else if (args.rfp) {
+      v = mrb_load_file_cxt(mrb, args.rfp, c);
+    }
+    else {
+      char* utf8 = mrb_utf8_from_locale(args.cmdline, -1);
+      if (!utf8) abort();
+      v = mrb_load_string_cxt(mrb, utf8, c);
+      mrb_utf8_free(utf8);
+    }
+
+    mrb_gc_arena_restore(mrb, ai);
+    mrbc_context_free(mrb, c);
+    if (mrb->exc) {
+      if (!mrb_undef_p(v)) {
+        mrb_print_error(mrb);
+      }
+      n = EXIT_FAILURE;
+    }
+    else if (args.check_syntax) {
+      puts("Syntax OK");
+    }
+  }
+  cleanup(mrb, &args);
+
+  return n;
+}
Index: /EcnlProtoTool/trunk/webapp/webmrbc/MainLoopBlock.cs
===================================================================
--- /EcnlProtoTool/trunk/webapp/webmrbc/MainLoopBlock.cs	(revision 438)
+++ /EcnlProtoTool/trunk/webapp/webmrbc/MainLoopBlock.cs	(revision 439)
@@ -85,5 +85,5 @@
 			field = Document.CreateElement("field");
 			field.SetAttribute("name", "TEXT");
-			field.AppendChild(Document.CreateTextNode("\\x00\\x00\\xB3"));/* TOPPERSプロジェクト */
+			field.AppendChild(Document.CreateTextNode("\\x00\\x00\\x00"));
 			text.AppendChild(field);
 
Index: /EcnlProtoTool/trunk/webapp/webmrbc/copy.bat
===================================================================
--- /EcnlProtoTool/trunk/webapp/webmrbc/copy.bat	(revision 438)
+++ /EcnlProtoTool/trunk/webapp/webmrbc/copy.bat	(revision 439)
@@ -51,4 +51,5 @@
 copy /Y /B js\blockly_compressed.js + js\bridge.min.js + js\webmrbc.min.js ..\..\httpd-fs\js\webmrbc.min.js
 copy /Y mrbc.min.js ..\..\httpd-fs\mrbc.min.js
+copy /Y mrbc.wasm ..\..\httpd-fs\mrbc.wasm
 copy /Y xterm\addons\fit\fit.min.js ..\..\httpd-fs\xterm\addons\fit\fit.js
 copy /Y xterm\src\xterm.min.css ..\..\httpd-fs\xterm\src\xterm.css
Index: /EcnlProtoTool/trunk/webapp/webmrbc/index.html
===================================================================
--- /EcnlProtoTool/trunk/webapp/webmrbc/index.html	(revision 438)
+++ /EcnlProtoTool/trunk/webapp/webmrbc/index.html	(revision 439)
@@ -17,6 +17,4 @@
 	<script src="xterm/addons/fit/fit.js"></script>
 	<script src="ace/ace.js" type="text/javascript" charset="utf-8"></script>
-	<script src="ace/theme-twilight.js" type="text/javascript" charset="utf-8"></script>
-	<script src="ace/mode-ruby.js" type="text/javascript" charset="utf-8"></script>
 	<script src="js/blockly.js" type="text/javascript"></script>
 	<script src="js/jszip.js"></script>
Index: /EcnlProtoTool/trunk/webapp/webmrbc/index.min.html
===================================================================
--- /EcnlProtoTool/trunk/webapp/webmrbc/index.min.html	(revision 438)
+++ /EcnlProtoTool/trunk/webapp/webmrbc/index.min.html	(revision 439)
@@ -15,6 +15,4 @@
 	<script src="xterm/addons/fit/fit.js"></script>
 	<script src="ace/ace.js" type="text/javascript" charset="utf-8"></script>
-	<script src="ace/theme-twilight.js" type="text/javascript" charset="utf-8"></script>
-	<script src="ace/mode-ruby.js" type="text/javascript" charset="utf-8"></script>
 	<script src="js/jszip.min.js"></script>
 	<script src="js/FileSaver.min.js" type="text/javascript"></script>
Index: /EcnlProtoTool/trunk/webapp/webmrbc/mrbc.js
===================================================================
--- /EcnlProtoTool/trunk/webapp/webmrbc/mrbc.js	(revision 438)
+++ /EcnlProtoTool/trunk/webapp/webmrbc/mrbc.js	(revision 439)
@@ -1,2 +1,23 @@
+
+
+// The Module object: Our interface to the outside world. We import
+// and export values on it. There are various ways Module can be used:
+// 1. Not defined. We create it here
+// 2. A function parameter, function(Module) { ..generated code.. }
+// 3. pre-run appended it, var Module = {}; ..generated code..
+// 4. External script tag defines var Module.
+// We need to check if Module already exists (e.g. case 3 above).
+// Substitution will be replaced with actual code on later stage of the build,
+// this way Closure Compiler will not mangle it (e.g. case 4. above).
+// Note that if you want to run closure, and also to use Module
+// after the generated code, you will need to define   var Module = {};
+// before the code. Then that object will be used in the code, and you
+// can continue to use Module afterwards as well.
+var Module = typeof Module !== 'undefined' ? Module : {};
+
+
+
+// --pre-jses are emitted after the Module integration code, so that they can
+// refer to Module (if they choose; they can also define Module)
 var mrbc = function(Module) {
   Module['preRun'].push(function () {
@@ -4,21 +25,5 @@
   });
 
-// The Module object: Our interface to the outside world. We import
-// and export values on it, and do the work to get that through
-// closure compiler if necessary. There are various ways Module can be used:
-// 1. Not defined. We create it here
-// 2. A function parameter, function(Module) { ..generated code.. }
-// 3. pre-run appended it, var Module = {}; ..generated code..
-// 4. External script tag defines var Module.
-// We need to do an eval in order to handle the closure compiler
-// case, where this code here is minified but Module was defined
-// elsewhere (e.g. case 4 above). We also need to check if Module
-// already exists (e.g. case 3 above).
-// Note that if you want to run closure, and also to use Module
-// after the generated code, you will need to define   var Module = {};
-// before the code. Then that object will be used in the code, and you
-// can continue to use Module afterwards as well.
-var Module;
-if (!Module) Module = (typeof Module !== 'undefined' ? Module : null) || {};
+
 
 // Sometimes an existing Module object exists with properties
@@ -28,5 +33,6 @@
 // defensive during initialization.
 var moduleOverrides = {};
-for (var key in Module) {
+var key;
+for (key in Module) {
   if (Module.hasOwnProperty(key)) {
     moduleOverrides[key] = Module[key];
@@ -34,55 +40,67 @@
 }
 
-// The environment setup code below is customized to use Module.
-// *** Environment setup code ***
+var arguments_ = [];
+var thisProgram = './this.program';
+var quit_ = function(status, toThrow) {
+  throw toThrow;
+};
+
+// Determine the runtime environment we are in. You can customize this by
+// setting the ENVIRONMENT setting at compile time (see settings.js).
+
 var ENVIRONMENT_IS_WEB = false;
 var ENVIRONMENT_IS_WORKER = false;
 var ENVIRONMENT_IS_NODE = false;
 var ENVIRONMENT_IS_SHELL = false;
-
-// Three configurations we can be running in:
-// 1) We could be the application main() thread running in the main JS UI thread. (ENVIRONMENT_IS_WORKER == false and ENVIRONMENT_IS_PTHREAD == false)
-// 2) We could be the application main() thread proxied to worker. (with Emscripten -s PROXY_TO_WORKER=1) (ENVIRONMENT_IS_WORKER == true, ENVIRONMENT_IS_PTHREAD == false)
-// 3) We could be an application pthread running in a worker. (ENVIRONMENT_IS_WORKER == true and ENVIRONMENT_IS_PTHREAD == true)
+ENVIRONMENT_IS_WEB = typeof window === 'object';
+ENVIRONMENT_IS_WORKER = typeof importScripts === 'function';
+// N.b. Electron.js environment is simultaneously a NODE-environment, but
+// also a web environment.
+ENVIRONMENT_IS_NODE = typeof process === 'object' && typeof process.versions === 'object' && typeof process.versions.node === 'string';
+ENVIRONMENT_IS_SHELL = !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_NODE && !ENVIRONMENT_IS_WORKER;
 
 if (Module['ENVIRONMENT']) {
-  if (Module['ENVIRONMENT'] === 'WEB') {
-    ENVIRONMENT_IS_WEB = true;
-  } else if (Module['ENVIRONMENT'] === 'WORKER') {
-    ENVIRONMENT_IS_WORKER = true;
-  } else if (Module['ENVIRONMENT'] === 'NODE') {
-    ENVIRONMENT_IS_NODE = true;
-  } else if (Module['ENVIRONMENT'] === 'SHELL') {
-    ENVIRONMENT_IS_SHELL = true;
+  throw new Error('Module.ENVIRONMENT has been deprecated. To force the environment, use the ENVIRONMENT compile-time option (for example, -s ENVIRONMENT=web or -s ENVIRONMENT=node)');
+}
+
+
+
+// `/` should be present at the end if `scriptDirectory` is not empty
+var scriptDirectory = '';
+function locateFile(path) {
+  if (Module['locateFile']) {
+    return Module['locateFile'](path, scriptDirectory);
+  }
+  return scriptDirectory + path;
+}
+
+// Hooks that are implemented differently in different runtime environments.
+var read_,
+    readAsync,
+    readBinary,
+    setWindowTitle;
+
+var nodeFS;
+var nodePath;
+
+if (ENVIRONMENT_IS_NODE) {
+  if (ENVIRONMENT_IS_WORKER) {
+    scriptDirectory = require('path').dirname(scriptDirectory) + '/';
   } else {
-    throw new Error('The provided Module[\'ENVIRONMENT\'] value is not valid. It must be one of: WEB|WORKER|NODE|SHELL.');
-  }
-} else {
-  ENVIRONMENT_IS_WEB = typeof window === 'object';
-  ENVIRONMENT_IS_WORKER = typeof importScripts === 'function';
-  ENVIRONMENT_IS_NODE = typeof process === 'object' && typeof require === 'function' && !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_WORKER;
-  ENVIRONMENT_IS_SHELL = !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_NODE && !ENVIRONMENT_IS_WORKER;
-}
-
-
-if (ENVIRONMENT_IS_NODE) {
-  // Expose functionality in the same simple way that the shells work
-  // Note that we pollute the global namespace here, otherwise we break in node
-  if (!Module['print']) Module['print'] = console.log;
-  if (!Module['printErr']) Module['printErr'] = console.warn;
-
-  var nodeFS;
-  var nodePath;
-
-  Module['read'] = function read(filename, binary) {
+    scriptDirectory = __dirname + '/';
+  }
+
+
+
+
+  read_ = function shell_read(filename, binary) {
     if (!nodeFS) nodeFS = require('fs');
     if (!nodePath) nodePath = require('path');
     filename = nodePath['normalize'](filename);
-    var ret = nodeFS['readFileSync'](filename);
-    return binary ? ret : ret.toString();
+    return nodeFS['readFileSync'](filename, binary ? null : 'utf8');
   };
 
-  Module['readBinary'] = function readBinary(filename) {
-    var ret = Module['read'](filename, true);
+  readBinary = function readBinary(filename) {
+    var ret = read_(filename, true);
     if (!ret.buffer) {
       ret = new Uint8Array(ret);
@@ -92,17 +110,12 @@
   };
 
-  Module['load'] = function load(f) {
-    globalEval(read(f));
-  };
-
-  if (!Module['thisProgram']) {
-    if (process['argv'].length > 1) {
-      Module['thisProgram'] = process['argv'][1].replace(/\\/g, '/');
-    } else {
-      Module['thisProgram'] = 'unknown-program';
-    }
-  }
-
-  Module['arguments'] = process['argv'].slice(2);
+
+
+
+  if (process['argv'].length > 1) {
+    thisProgram = process['argv'][1].replace(/\\/g, '/');
+  }
+
+  arguments_ = process['argv'].slice(2);
 
   if (typeof module !== 'undefined') {
@@ -117,21 +130,30 @@
   });
 
+  process['on']('unhandledRejection', abort);
+
+  quit_ = function(status) {
+    process['exit'](status);
+  };
+
   Module['inspect'] = function () { return '[Emscripten Module object]'; };
-}
-else if (ENVIRONMENT_IS_SHELL) {
-  if (!Module['print']) Module['print'] = print;
-  if (typeof printErr != 'undefined') Module['printErr'] = printErr; // not present in v8 or older sm
+
+
+
+} else
+if (ENVIRONMENT_IS_SHELL) {
+
 
   if (typeof read != 'undefined') {
-    Module['read'] = read;
-  } else {
-    Module['read'] = function read() { throw 'no read() available' };
-  }
-
-  Module['readBinary'] = function readBinary(f) {
+    read_ = function shell_read(f) {
+      return read(f);
+    };
+  }
+
+  readBinary = function readBinary(f) {
+    var data;
     if (typeof readbuffer === 'function') {
       return new Uint8Array(readbuffer(f));
     }
-    var data = read(f, 'binary');
+    data = read(f, 'binary');
     assert(typeof data === 'object');
     return data;
@@ -139,35 +161,70 @@
 
   if (typeof scriptArgs != 'undefined') {
-    Module['arguments'] = scriptArgs;
+    arguments_ = scriptArgs;
   } else if (typeof arguments != 'undefined') {
-    Module['arguments'] = arguments;
+    arguments_ = arguments;
   }
 
   if (typeof quit === 'function') {
-    Module['quit'] = function(status, toThrow) {
+    quit_ = function(status) {
       quit(status);
-    }
-  }
-
-}
-else if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) {
-  Module['read'] = function read(url) {
-    var xhr = new XMLHttpRequest();
-    xhr.open('GET', url, false);
-    xhr.send(null);
-    return xhr.responseText;
-  };
-
-  if (ENVIRONMENT_IS_WORKER) {
-    Module['readBinary'] = function read(url) {
+    };
+  }
+
+  if (typeof print !== 'undefined') {
+    // Prefer to use print/printErr where they exist, as they usually work better.
+    if (typeof console === 'undefined') console = /** @type{!Console} */({});
+    console.log = /** @type{!function(this:Console, ...*): undefined} */ (print);
+    console.warn = console.error = /** @type{!function(this:Console, ...*): undefined} */ (typeof printErr !== 'undefined' ? printErr : print);
+  }
+
+
+} else
+
+// Note that this includes Node.js workers when relevant (pthreads is enabled).
+// Node.js workers are detected as a combination of ENVIRONMENT_IS_WORKER and
+// ENVIRONMENT_IS_NODE.
+if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) {
+  if (ENVIRONMENT_IS_WORKER) { // Check worker, not web, since window could be polyfilled
+    scriptDirectory = self.location.href;
+  } else if (document.currentScript) { // web
+    scriptDirectory = document.currentScript.src;
+  }
+  // blob urls look like blob:http://site.com/etc/etc and we cannot infer anything from them.
+  // otherwise, slice off the final part of the url to find the script directory.
+  // if scriptDirectory does not contain a slash, lastIndexOf will return -1,
+  // and scriptDirectory will correctly be replaced with an empty string.
+  if (scriptDirectory.indexOf('blob:') !== 0) {
+    scriptDirectory = scriptDirectory.substr(0, scriptDirectory.lastIndexOf('/')+1);
+  } else {
+    scriptDirectory = '';
+  }
+
+
+  // Differentiate the Web Worker from the Node Worker case, as reading must
+  // be done differently.
+  {
+
+
+
+
+  read_ = function shell_read(url) {
       var xhr = new XMLHttpRequest();
       xhr.open('GET', url, false);
-      xhr.responseType = 'arraybuffer';
       xhr.send(null);
-      return xhr.response;
+      return xhr.responseText;
+  };
+
+  if (ENVIRONMENT_IS_WORKER) {
+    readBinary = function readBinary(url) {
+        var xhr = new XMLHttpRequest();
+        xhr.open('GET', url, false);
+        xhr.responseType = 'arraybuffer';
+        xhr.send(null);
+        return new Uint8Array(/** @type{!ArrayBuffer} */(xhr.response));
     };
   }
 
-  Module['readAsync'] = function readAsync(url, onload, onerror) {
+  readAsync = function readAsync(url, onload, onerror) {
     var xhr = new XMLHttpRequest();
     xhr.open('GET', url, true);
@@ -176,7 +233,7 @@
       if (xhr.status == 200 || (xhr.status == 0 && xhr.response)) { // file URLs can return 0
         onload(xhr.response);
-      } else {
-        onerror();
+        return;
       }
+      onerror();
     };
     xhr.onerror = onerror;
@@ -184,76 +241,23 @@
   };
 
-  if (typeof arguments != 'undefined') {
-    Module['arguments'] = arguments;
-  }
-
-  if (typeof console !== 'undefined') {
-    if (!Module['print']) Module['print'] = function print(x) {
-      console.log(x);
-    };
-    if (!Module['printErr']) Module['printErr'] = function printErr(x) {
-      console.warn(x);
-    };
-  } else {
-    // Probably a worker, and without console.log. We can do very little here...
-    var TRY_USE_DUMP = false;
-    if (!Module['print']) Module['print'] = (TRY_USE_DUMP && (typeof(dump) !== "undefined") ? (function(x) {
-      dump(x);
-    }) : (function(x) {
-      // self.postMessage(x); // enable this if you want stdout to be sent as messages
-    }));
-  }
-
-  if (ENVIRONMENT_IS_WORKER) {
-    Module['load'] = importScripts;
-  }
-
-  if (typeof Module['setWindowTitle'] === 'undefined') {
-    Module['setWindowTitle'] = function(title) { document.title = title };
-  }
-}
-else {
-  // Unreachable because SHELL is dependant on the others
-  throw 'Unknown runtime environment. Where are we?';
-}
-
-function globalEval(x) {
-  eval.call(null, x);
-}
-if (!Module['load'] && Module['read']) {
-  Module['load'] = function load(f) {
-    globalEval(Module['read'](f));
-  };
-}
-if (!Module['print']) {
-  Module['print'] = function(){};
-}
-if (!Module['printErr']) {
-  Module['printErr'] = Module['print'];
-}
-if (!Module['arguments']) {
-  Module['arguments'] = [];
-}
-if (!Module['thisProgram']) {
-  Module['thisProgram'] = './this.program';
-}
-if (!Module['quit']) {
-  Module['quit'] = function(status, toThrow) {
-    throw toThrow;
-  }
-}
-
-// *** Environment setup code ***
-
-// Closure helpers
-Module.print = Module['print'];
-Module.printErr = Module['printErr'];
-
-// Callbacks
-Module['preRun'] = [];
-Module['postRun'] = [];
+
+
+
+  }
+
+  setWindowTitle = function(title) { document.title = title };
+} else
+{
+  throw new Error('environment detection error');
+}
+
+
+// Set up the out() and err() hooks, which are how we can print to stdout or
+// stderr, respectively.
+var out = Module['print'] || console.log.bind(console);
+var err = Module['printErr'] || console.warn.bind(console);
 
 // Merge back in the overrides
-for (var key in moduleOverrides) {
+for (key in moduleOverrides) {
   if (moduleOverrides.hasOwnProperty(key)) {
     Module[key] = moduleOverrides[key];
@@ -262,9 +266,336 @@
 // Free the object hierarchy contained in the overrides, this lets the GC
 // reclaim data used e.g. in memoryInitializerRequest, which is a large typed array.
-moduleOverrides = undefined;
+moduleOverrides = null;
+
+// Emit code to handle expected values on the Module object. This applies Module.x
+// to the proper local x. This has two benefits: first, we only emit it if it is
+// expected to arrive, and second, by using a local everywhere else that can be
+// minified.
+if (Module['arguments']) arguments_ = Module['arguments'];if (!Object.getOwnPropertyDescriptor(Module, 'arguments')) Object.defineProperty(Module, 'arguments', { configurable: true, get: function() { abort('Module.arguments has been replaced with plain arguments_ (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)') } });
+if (Module['thisProgram']) thisProgram = Module['thisProgram'];if (!Object.getOwnPropertyDescriptor(Module, 'thisProgram')) Object.defineProperty(Module, 'thisProgram', { configurable: true, get: function() { abort('Module.thisProgram has been replaced with plain thisProgram (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)') } });
+if (Module['quit']) quit_ = Module['quit'];if (!Object.getOwnPropertyDescriptor(Module, 'quit')) Object.defineProperty(Module, 'quit', { configurable: true, get: function() { abort('Module.quit has been replaced with plain quit_ (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)') } });
+
+// perform assertions in shell.js after we set up out() and err(), as otherwise if an assertion fails it cannot print the message
+// Assertions on removed incoming Module JS APIs.
+assert(typeof Module['memoryInitializerPrefixURL'] === 'undefined', 'Module.memoryInitializerPrefixURL option was removed, use Module.locateFile instead');
+assert(typeof Module['pthreadMainPrefixURL'] === 'undefined', 'Module.pthreadMainPrefixURL option was removed, use Module.locateFile instead');
+assert(typeof Module['cdInitializerPrefixURL'] === 'undefined', 'Module.cdInitializerPrefixURL option was removed, use Module.locateFile instead');
+assert(typeof Module['filePackagePrefixURL'] === 'undefined', 'Module.filePackagePrefixURL option was removed, use Module.locateFile instead');
+assert(typeof Module['read'] === 'undefined', 'Module.read option was removed (modify read_ in JS)');
+assert(typeof Module['readAsync'] === 'undefined', 'Module.readAsync option was removed (modify readAsync in JS)');
+assert(typeof Module['readBinary'] === 'undefined', 'Module.readBinary option was removed (modify readBinary in JS)');
+assert(typeof Module['setWindowTitle'] === 'undefined', 'Module.setWindowTitle option was removed (modify setWindowTitle in JS)');
+assert(typeof Module['TOTAL_MEMORY'] === 'undefined', 'Module.TOTAL_MEMORY has been renamed Module.INITIAL_MEMORY');
+if (!Object.getOwnPropertyDescriptor(Module, 'read')) Object.defineProperty(Module, 'read', { configurable: true, get: function() { abort('Module.read has been replaced with plain read_ (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)') } });
+if (!Object.getOwnPropertyDescriptor(Module, 'readAsync')) Object.defineProperty(Module, 'readAsync', { configurable: true, get: function() { abort('Module.readAsync has been replaced with plain readAsync (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)') } });
+if (!Object.getOwnPropertyDescriptor(Module, 'readBinary')) Object.defineProperty(Module, 'readBinary', { configurable: true, get: function() { abort('Module.readBinary has been replaced with plain readBinary (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)') } });
+if (!Object.getOwnPropertyDescriptor(Module, 'setWindowTitle')) Object.defineProperty(Module, 'setWindowTitle', { configurable: true, get: function() { abort('Module.setWindowTitle has been replaced with plain setWindowTitle (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)') } });
+var IDBFS = 'IDBFS is no longer included by default; build with -lidbfs.js';
+var PROXYFS = 'PROXYFS is no longer included by default; build with -lproxyfs.js';
+var WORKERFS = 'WORKERFS is no longer included by default; build with -lworkerfs.js';
+var NODEFS = 'NODEFS is no longer included by default; build with -lnodefs.js';
+
+
+
 
 
 
 // {{PREAMBLE_ADDITIONS}}
+
+var STACK_ALIGN = 16;
+
+function dynamicAlloc(size) {
+  assert(DYNAMICTOP_PTR);
+  var ret = HEAP32[DYNAMICTOP_PTR>>2];
+  var end = (ret + size + 15) & -16;
+  assert(end <= HEAP8.length, 'failure to dynamicAlloc - memory growth etc. is not supported there, call malloc/sbrk directly');
+  HEAP32[DYNAMICTOP_PTR>>2] = end;
+  return ret;
+}
+
+function alignMemory(size, factor) {
+  if (!factor) factor = STACK_ALIGN; // stack alignment (16-byte) by default
+  return Math.ceil(size / factor) * factor;
+}
+
+function getNativeTypeSize(type) {
+  switch (type) {
+    case 'i1': case 'i8': return 1;
+    case 'i16': return 2;
+    case 'i32': return 4;
+    case 'i64': return 8;
+    case 'float': return 4;
+    case 'double': return 8;
+    default: {
+      if (type[type.length-1] === '*') {
+        return 4; // A pointer
+      } else if (type[0] === 'i') {
+        var bits = Number(type.substr(1));
+        assert(bits % 8 === 0, 'getNativeTypeSize invalid bits ' + bits + ', type ' + type);
+        return bits / 8;
+      } else {
+        return 0;
+      }
+    }
+  }
+}
+
+function warnOnce(text) {
+  if (!warnOnce.shown) warnOnce.shown = {};
+  if (!warnOnce.shown[text]) {
+    warnOnce.shown[text] = 1;
+    err(text);
+  }
+}
+
+
+
+
+
+
+
+
+// Wraps a JS function as a wasm function with a given signature.
+function convertJsFunctionToWasm(func, sig) {
+
+  // If the type reflection proposal is available, use the new
+  // "WebAssembly.Function" constructor.
+  // Otherwise, construct a minimal wasm module importing the JS function and
+  // re-exporting it.
+  if (typeof WebAssembly.Function === "function") {
+    var typeNames = {
+      'i': 'i32',
+      'j': 'i64',
+      'f': 'f32',
+      'd': 'f64'
+    };
+    var type = {
+      parameters: [],
+      results: sig[0] == 'v' ? [] : [typeNames[sig[0]]]
+    };
+    for (var i = 1; i < sig.length; ++i) {
+      type.parameters.push(typeNames[sig[i]]);
+    }
+    return new WebAssembly.Function(type, func);
+  }
+
+  // The module is static, with the exception of the type section, which is
+  // generated based on the signature passed in.
+  var typeSection = [
+    0x01, // id: section,
+    0x00, // length: 0 (placeholder)
+    0x01, // count: 1
+    0x60, // form: func
+  ];
+  var sigRet = sig.slice(0, 1);
+  var sigParam = sig.slice(1);
+  var typeCodes = {
+    'i': 0x7f, // i32
+    'j': 0x7e, // i64
+    'f': 0x7d, // f32
+    'd': 0x7c, // f64
+  };
+
+  // Parameters, length + signatures
+  typeSection.push(sigParam.length);
+  for (var i = 0; i < sigParam.length; ++i) {
+    typeSection.push(typeCodes[sigParam[i]]);
+  }
+
+  // Return values, length + signatures
+  // With no multi-return in MVP, either 0 (void) or 1 (anything else)
+  if (sigRet == 'v') {
+    typeSection.push(0x00);
+  } else {
+    typeSection = typeSection.concat([0x01, typeCodes[sigRet]]);
+  }
+
+  // Write the overall length of the type section back into the section header
+  // (excepting the 2 bytes for the section id and length)
+  typeSection[1] = typeSection.length - 2;
+
+  // Rest of the module is static
+  var bytes = new Uint8Array([
+    0x00, 0x61, 0x73, 0x6d, // magic ("\0asm")
+    0x01, 0x00, 0x00, 0x00, // version: 1
+  ].concat(typeSection, [
+    0x02, 0x07, // import section
+      // (import "e" "f" (func 0 (type 0)))
+      0x01, 0x01, 0x65, 0x01, 0x66, 0x00, 0x00,
+    0x07, 0x05, // export section
+      // (export "f" (func 0 (type 0)))
+      0x01, 0x01, 0x66, 0x00, 0x00,
+  ]));
+
+   // We can compile this wasm module synchronously because it is very small.
+  // This accepts an import (at "e.f"), that it reroutes to an export (at "f")
+  var module = new WebAssembly.Module(bytes);
+  var instance = new WebAssembly.Instance(module, {
+    'e': {
+      'f': func
+    }
+  });
+  var wrappedFunc = instance.exports['f'];
+  return wrappedFunc;
+}
+
+var freeTableIndexes = [];
+
+// Weak map of functions in the table to their indexes, created on first use.
+var functionsInTableMap;
+
+// Add a wasm function to the table.
+function addFunctionWasm(func, sig) {
+  var table = wasmTable;
+
+  // Check if the function is already in the table, to ensure each function
+  // gets a unique index. First, create the map if this is the first use.
+  if (!functionsInTableMap) {
+    functionsInTableMap = new WeakMap();
+    for (var i = 0; i < table.length; i++) {
+      var item = table.get(i);
+      // Ignore null values.
+      if (item) {
+        functionsInTableMap.set(item, i);
+      }
+    }
+  }
+  if (functionsInTableMap.has(func)) {
+    return functionsInTableMap.get(func);
+  }
+
+  // It's not in the table, add it now.
+
+
+  var ret;
+  // Reuse a free index if there is one, otherwise grow.
+  if (freeTableIndexes.length) {
+    ret = freeTableIndexes.pop();
+  } else {
+    ret = table.length;
+    // Grow the table
+    try {
+      table.grow(1);
+    } catch (err) {
+      if (!(err instanceof RangeError)) {
+        throw err;
+      }
+      throw 'Unable to grow wasm table. Set ALLOW_TABLE_GROWTH.';
+    }
+  }
+
+  // Set the new value.
+  try {
+    // Attempting to call this with JS function will cause of table.set() to fail
+    table.set(ret, func);
+  } catch (err) {
+    if (!(err instanceof TypeError)) {
+      throw err;
+    }
+    assert(typeof sig !== 'undefined', 'Missing signature argument to addFunction');
+    var wrapped = convertJsFunctionToWasm(func, sig);
+    table.set(ret, wrapped);
+  }
+
+  functionsInTableMap.set(func, ret);
+
+  return ret;
+}
+
+function removeFunctionWasm(index) {
+  functionsInTableMap.delete(wasmTable.get(index));
+  freeTableIndexes.push(index);
+}
+
+// 'sig' parameter is required for the llvm backend but only when func is not
+// already a WebAssembly function.
+function addFunction(func, sig) {
+  assert(typeof func !== 'undefined');
+
+  return addFunctionWasm(func, sig);
+}
+
+function removeFunction(index) {
+  removeFunctionWasm(index);
+}
+
+
+
+var funcWrappers = {};
+
+function getFuncWrapper(func, sig) {
+  if (!func) return; // on null pointer, return undefined
+  assert(sig);
+  if (!funcWrappers[sig]) {
+    funcWrappers[sig] = {};
+  }
+  var sigCache = funcWrappers[sig];
+  if (!sigCache[func]) {
+    // optimize away arguments usage in common cases
+    if (sig.length === 1) {
+      sigCache[func] = function dynCall_wrapper() {
+        return dynCall(sig, func);
+      };
+    } else if (sig.length === 2) {
+      sigCache[func] = function dynCall_wrapper(arg) {
+        return dynCall(sig, func, [arg]);
+      };
+    } else {
+      // general case
+      sigCache[func] = function dynCall_wrapper() {
+        return dynCall(sig, func, Array.prototype.slice.call(arguments));
+      };
+    }
+  }
+  return sigCache[func];
+}
+
+
+
+
+
+
+
+function makeBigInt(low, high, unsigned) {
+  return unsigned ? ((+((low>>>0)))+((+((high>>>0)))*4294967296.0)) : ((+((low>>>0)))+((+((high|0)))*4294967296.0));
+}
+
+/** @param {Array=} args */
+function dynCall(sig, ptr, args) {
+  if (args && args.length) {
+    // j (64-bit integer) must be passed in as two numbers [low 32, high 32].
+    assert(args.length === sig.substring(1).replace(/j/g, '--').length);
+    assert(('dynCall_' + sig) in Module, 'bad function pointer type - no table for sig \'' + sig + '\'');
+    return Module['dynCall_' + sig].apply(null, [ptr].concat(args));
+  } else {
+    assert(sig.length == 1);
+    assert(('dynCall_' + sig) in Module, 'bad function pointer type - no table for sig \'' + sig + '\'');
+    return Module['dynCall_' + sig].call(null, ptr);
+  }
+}
+
+var tempRet0 = 0;
+
+var setTempRet0 = function(value) {
+  tempRet0 = value;
+};
+
+var getTempRet0 = function() {
+  return tempRet0;
+};
+
+function getCompilerSetting(name) {
+  throw 'You must build with -s RETAIN_COMPILER_SETTINGS=1 for getCompilerSetting or emscripten_get_compiler_setting to work';
+}
+
+// The address globals begin at. Very low in memory, for code size and optimization opportunities.
+// Above 0 is static memory, starting with globals.
+// Then the stack.
+// Then 'dynamic' memory for sbrk.
+var GLOBAL_BASE = 1024;
+
+
+
+
 
 // === Preamble library stuff ===
@@ -278,306 +609,23 @@
 //    is up at http://kripken.github.io/emscripten-site/docs/api_reference/preamble.js.html
 
-//========================================
-// Runtime code shared with compiler
-//========================================
-
-var Runtime = {
-  setTempRet0: function (value) {
-    tempRet0 = value;
-    return value;
-  },
-  getTempRet0: function () {
-    return tempRet0;
-  },
-  stackSave: function () {
-    return STACKTOP;
-  },
-  stackRestore: function (stackTop) {
-    STACKTOP = stackTop;
-  },
-  getNativeTypeSize: function (type) {
-    switch (type) {
-      case 'i1': case 'i8': return 1;
-      case 'i16': return 2;
-      case 'i32': return 4;
-      case 'i64': return 8;
-      case 'float': return 4;
-      case 'double': return 8;
-      default: {
-        if (type[type.length-1] === '*') {
-          return Runtime.QUANTUM_SIZE; // A pointer
-        } else if (type[0] === 'i') {
-          var bits = parseInt(type.substr(1));
-          assert(bits % 8 === 0);
-          return bits/8;
-        } else {
-          return 0;
-        }
-      }
-    }
-  },
-  getNativeFieldSize: function (type) {
-    return Math.max(Runtime.getNativeTypeSize(type), Runtime.QUANTUM_SIZE);
-  },
-  STACK_ALIGN: 16,
-  prepVararg: function (ptr, type) {
-    if (type === 'double' || type === 'i64') {
-      // move so the load is aligned
-      if (ptr & 7) {
-        assert((ptr & 7) === 4);
-        ptr += 4;
-      }
-    } else {
-      assert((ptr & 3) === 0);
-    }
-    return ptr;
-  },
-  getAlignSize: function (type, size, vararg) {
-    // we align i64s and doubles on 64-bit boundaries, unlike x86
-    if (!vararg && (type == 'i64' || type == 'double')) return 8;
-    if (!type) return Math.min(size, 8); // align structures internally to 64 bits
-    return Math.min(size || (type ? Runtime.getNativeFieldSize(type) : 0), Runtime.QUANTUM_SIZE);
-  },
-  dynCall: function (sig, ptr, args) {
-    if (args && args.length) {
-      assert(args.length == sig.length-1);
-      assert(('dynCall_' + sig) in Module, 'bad function pointer type - no table for sig \'' + sig + '\'');
-      return Module['dynCall_' + sig].apply(null, [ptr].concat(args));
-    } else {
-      assert(sig.length == 1);
-      assert(('dynCall_' + sig) in Module, 'bad function pointer type - no table for sig \'' + sig + '\'');
-      return Module['dynCall_' + sig].call(null, ptr);
-    }
-  },
-  functionPointers: [],
-  addFunction: function (func) {
-    for (var i = 0; i < Runtime.functionPointers.length; i++) {
-      if (!Runtime.functionPointers[i]) {
-        Runtime.functionPointers[i] = func;
-        return 2*(1 + i);
-      }
-    }
-    throw 'Finished up all reserved function pointers. Use a higher value for RESERVED_FUNCTION_POINTERS.';
-  },
-  removeFunction: function (index) {
-    Runtime.functionPointers[(index-2)/2] = null;
-  },
-  warnOnce: function (text) {
-    if (!Runtime.warnOnce.shown) Runtime.warnOnce.shown = {};
-    if (!Runtime.warnOnce.shown[text]) {
-      Runtime.warnOnce.shown[text] = 1;
-      Module.printErr(text);
-    }
-  },
-  funcWrappers: {},
-  getFuncWrapper: function (func, sig) {
-    assert(sig);
-    if (!Runtime.funcWrappers[sig]) {
-      Runtime.funcWrappers[sig] = {};
-    }
-    var sigCache = Runtime.funcWrappers[sig];
-    if (!sigCache[func]) {
-      // optimize away arguments usage in common cases
-      if (sig.length === 1) {
-        sigCache[func] = function dynCall_wrapper() {
-          return Runtime.dynCall(sig, func);
-        };
-      } else if (sig.length === 2) {
-        sigCache[func] = function dynCall_wrapper(arg) {
-          return Runtime.dynCall(sig, func, [arg]);
-        };
-      } else {
-        // general case
-        sigCache[func] = function dynCall_wrapper() {
-          return Runtime.dynCall(sig, func, Array.prototype.slice.call(arguments));
-        };
-      }
-    }
-    return sigCache[func];
-  },
-  getCompilerSetting: function (name) {
-    throw 'You must build with -s RETAIN_COMPILER_SETTINGS=1 for Runtime.getCompilerSetting or emscripten_get_compiler_setting to work';
-  },
-  stackAlloc: function (size) { var ret = STACKTOP;STACKTOP = (STACKTOP + size)|0;STACKTOP = (((STACKTOP)+15)&-16);(assert((((STACKTOP|0) < (STACK_MAX|0))|0))|0); return ret; },
-  staticAlloc: function (size) { var ret = STATICTOP;STATICTOP = (STATICTOP + (assert(!staticSealed),size))|0;STATICTOP = (((STATICTOP)+15)&-16); return ret; },
-  dynamicAlloc: function (size) { assert(DYNAMICTOP_PTR);var ret = HEAP32[DYNAMICTOP_PTR>>2];var end = (((ret + size + 15)|0) & -16);HEAP32[DYNAMICTOP_PTR>>2] = end;if (end >= TOTAL_MEMORY) {var success = enlargeMemory();if (!success) {HEAP32[DYNAMICTOP_PTR>>2] = ret;return 0;}}return ret;},
-  alignMemory: function (size,quantum) { var ret = size = Math.ceil((size)/(quantum ? quantum : 16))*(quantum ? quantum : 16); return ret; },
-  makeBigInt: function (low,high,unsigned) { var ret = (unsigned ? ((+((low>>>0)))+((+((high>>>0)))*4294967296.0)) : ((+((low>>>0)))+((+((high|0)))*4294967296.0))); return ret; },
-  GLOBAL_BASE: 8,
-  QUANTUM_SIZE: 4,
-  __dummy__: 0
-}
-
-
-
-Module["Runtime"] = Runtime;
-
-
-
-//========================================
-// Runtime essentials
-//========================================
-
-var ABORT = 0; // whether we are quitting the application. no code should run after this. set in exit() and abort()
-var EXITSTATUS = 0;
-
-function assert(condition, text) {
-  if (!condition) {
-    abort('Assertion failed: ' + text);
-  }
-}
-
-var globalScope = this;
-
-// Returns the C function with a specified identifier (for C++, you need to do manual name mangling)
-function getCFunc(ident) {
-  var func = Module['_' + ident]; // closure exported function
-  if (!func) {
-    try { func = eval('_' + ident); } catch(e) {}
-  }
-  assert(func, 'Cannot call unknown function ' + ident + ' (perhaps LLVM optimizations or closure removed it?)');
-  return func;
-}
-
-var cwrap, ccall;
-(function(){
-  var JSfuncs = {
-    // Helpers for cwrap -- it can't refer to Runtime directly because it might
-    // be renamed by closure, instead it calls JSfuncs['stackSave'].body to find
-    // out what the minified function name is.
-    'stackSave': function() {
-      Runtime.stackSave()
-    },
-    'stackRestore': function() {
-      Runtime.stackRestore()
-    },
-    // type conversion from js to c
-    'arrayToC' : function(arr) {
-      var ret = Runtime.stackAlloc(arr.length);
-      writeArrayToMemory(arr, ret);
-      return ret;
-    },
-    'stringToC' : function(str) {
-      var ret = 0;
-      if (str !== null && str !== undefined && str !== 0) { // null string
-        // at most 4 bytes per UTF-8 code point, +1 for the trailing '\0'
-        var len = (str.length << 2) + 1;
-        ret = Runtime.stackAlloc(len);
-        stringToUTF8(str, ret, len);
-      }
-      return ret;
-    }
-  };
-  // For fast lookup of conversion functions
-  var toC = {'string' : JSfuncs['stringToC'], 'array' : JSfuncs['arrayToC']};
-
-  // C calling interface.
-  ccall = function ccallFunc(ident, returnType, argTypes, args, opts) {
-    var func = getCFunc(ident);
-    var cArgs = [];
-    var stack = 0;
-    assert(returnType !== 'array', 'Return type should not be "array".');
-    if (args) {
-      for (var i = 0; i < args.length; i++) {
-        var converter = toC[argTypes[i]];
-        if (converter) {
-          if (stack === 0) stack = Runtime.stackSave();
-          cArgs[i] = converter(args[i]);
-        } else {
-          cArgs[i] = args[i];
-        }
-      }
-    }
-    var ret = func.apply(null, cArgs);
-    if ((!opts || !opts.async) && typeof EmterpreterAsync === 'object') {
-      assert(!EmterpreterAsync.state, 'cannot start async op with normal JS calling ccall');
-    }
-    if (opts && opts.async) assert(!returnType, 'async ccalls cannot return values');
-    if (returnType === 'string') ret = Pointer_stringify(ret);
-    if (stack !== 0) {
-      if (opts && opts.async) {
-        EmterpreterAsync.asyncFinalizers.push(function() {
-          Runtime.stackRestore(stack);
-        });
-        return;
-      }
-      Runtime.stackRestore(stack);
-    }
-    return ret;
-  }
-
-  var sourceRegex = /^function\s*[a-zA-Z$_0-9]*\s*\(([^)]*)\)\s*{\s*([^*]*?)[\s;]*(?:return\s*(.*?)[;\s]*)?}$/;
-  function parseJSFunc(jsfunc) {
-    // Match the body and the return value of a javascript function source
-    var parsed = jsfunc.toString().match(sourceRegex).slice(1);
-    return {arguments : parsed[0], body : parsed[1], returnValue: parsed[2]}
-  }
-
-  // sources of useful functions. we create this lazily as it can trigger a source decompression on this entire file
-  var JSsource = null;
-  function ensureJSsource() {
-    if (!JSsource) {
-      JSsource = {};
-      for (var fun in JSfuncs) {
-        if (JSfuncs.hasOwnProperty(fun)) {
-          // Elements of toCsource are arrays of three items:
-          // the code, and the return value
-          JSsource[fun] = parseJSFunc(JSfuncs[fun]);
-        }
-      }
-    }
-  }
-
-  cwrap = function cwrap(ident, returnType, argTypes) {
-    argTypes = argTypes || [];
-    var cfunc = getCFunc(ident);
-    // When the function takes numbers and returns a number, we can just return
-    // the original function
-    var numericArgs = argTypes.every(function(type){ return type === 'number'});
-    var numericRet = (returnType !== 'string');
-    if ( numericRet && numericArgs) {
-      return cfunc;
-    }
-    // Creation of the arguments list (["$1","$2",...,"$nargs"])
-    var argNames = argTypes.map(function(x,i){return '$'+i});
-    var funcstr = "(function(" + argNames.join(',') + ") {";
-    var nargs = argTypes.length;
-    if (!numericArgs) {
-      // Generate the code needed to convert the arguments from javascript
-      // values to pointers
-      ensureJSsource();
-      funcstr += 'var stack = ' + JSsource['stackSave'].body + ';';
-      for (var i = 0; i < nargs; i++) {
-        var arg = argNames[i], type = argTypes[i];
-        if (type === 'number') continue;
-        var convertCode = JSsource[type + 'ToC']; // [code, return]
-        funcstr += 'var ' + convertCode.arguments + ' = ' + arg + ';';
-        funcstr += convertCode.body + ';';
-        funcstr += arg + '=(' + convertCode.returnValue + ');';
-      }
-    }
-
-    // When the code is compressed, the name of cfunc is not literally 'cfunc' anymore
-    var cfuncname = parseJSFunc(function(){return cfunc}).returnValue;
-    // Call the function
-    funcstr += 'var ret = ' + cfuncname + '(' + argNames.join(',') + ');';
-    if (!numericRet) { // Return type can only by 'string' or 'number'
-      // Convert the result to a string
-      var strgfy = parseJSFunc(function(){return Pointer_stringify}).returnValue;
-      funcstr += 'ret = ' + strgfy + '(ret);';
-    }
-    funcstr += "if (typeof EmterpreterAsync === 'object') { assert(!EmterpreterAsync.state, 'cannot start async op with normal JS calling cwrap') }";
-    if (!numericArgs) {
-      // If we had a stack, restore it
-      ensureJSsource();
-      funcstr += JSsource['stackRestore'].body.replace('()', '(stack)') + ';';
-    }
-    funcstr += 'return ret})';
-    return eval(funcstr);
-  };
-})();
-Module["ccall"] = ccall;
-Module["cwrap"] = cwrap;
-
+
+var wasmBinary;if (Module['wasmBinary']) wasmBinary = Module['wasmBinary'];if (!Object.getOwnPropertyDescriptor(Module, 'wasmBinary')) Object.defineProperty(Module, 'wasmBinary', { configurable: true, get: function() { abort('Module.wasmBinary has been replaced with plain wasmBinary (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)') } });
+var noExitRuntime;if (Module['noExitRuntime']) noExitRuntime = Module['noExitRuntime'];if (!Object.getOwnPropertyDescriptor(Module, 'noExitRuntime')) Object.defineProperty(Module, 'noExitRuntime', { configurable: true, get: function() { abort('Module.noExitRuntime has been replaced with plain noExitRuntime (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)') } });
+
+
+if (typeof WebAssembly !== 'object') {
+  abort('no native wasm support detected');
+}
+
+
+
+
+// In MINIMAL_RUNTIME, setValue() and getValue() are only available when building with safe heap enabled, for heap safety checking.
+// In traditional runtime, setValue() and getValue() are always available (although their use is highly discouraged due to perf penalties)
+
+/** @param {number} ptr
+    @param {number} value
+    @param {string} type
+    @param {number|boolean=} noSafe */
 function setValue(ptr, value, type, noSafe) {
   type = type || 'i8';
@@ -594,7 +642,8 @@
     }
 }
-Module["setValue"] = setValue;
-
-
+
+/** @param {number} ptr
+    @param {string} type
+    @param {number|boolean=} noSafe */
 function getValue(ptr, type, noSafe) {
   type = type || 'i8';
@@ -608,20 +657,121 @@
       case 'float': return HEAPF32[((ptr)>>2)];
       case 'double': return HEAPF64[((ptr)>>3)];
-      default: abort('invalid type for setValue: ' + type);
+      default: abort('invalid type for getValue: ' + type);
     }
   return null;
 }
-Module["getValue"] = getValue;
+
+
+
+
+
+
+// Wasm globals
+
+var wasmMemory;
+
+// In fastcomp asm.js, we don't need a wasm Table at all.
+// In the wasm backend, we polyfill the WebAssembly object,
+// so this creates a (non-native-wasm) table for us.
+var wasmTable = new WebAssembly.Table({
+  'initial': 336,
+  'maximum': 336 + 0,
+  'element': 'anyfunc'
+});
+
+
+//========================================
+// Runtime essentials
+//========================================
+
+// whether we are quitting the application. no code should run after this.
+// set in exit() and abort()
+var ABORT = false;
+
+// set by exit() and abort().  Passed to 'onExit' handler.
+// NOTE: This is also used as the process return code code in shell environments
+// but only when noExitRuntime is false.
+var EXITSTATUS = 0;
+
+/** @type {function(*, string=)} */
+function assert(condition, text) {
+  if (!condition) {
+    abort('Assertion failed: ' + text);
+  }
+}
+
+// Returns the C function with a specified identifier (for C++, you need to do manual name mangling)
+function getCFunc(ident) {
+  var func = Module['_' + ident]; // closure exported function
+  assert(func, 'Cannot call unknown function ' + ident + ', make sure it is exported');
+  return func;
+}
+
+// C calling interface.
+/** @param {string|null=} returnType
+    @param {Array=} argTypes
+    @param {Arguments|Array=} args
+    @param {Object=} opts */
+function ccall(ident, returnType, argTypes, args, opts) {
+  // For fast lookup of conversion functions
+  var toC = {
+    'string': function(str) {
+      var ret = 0;
+      if (str !== null && str !== undefined && str !== 0) { // null string
+        // at most 4 bytes per UTF-8 code point, +1 for the trailing '\0'
+        var len = (str.length << 2) + 1;
+        ret = stackAlloc(len);
+        stringToUTF8(str, ret, len);
+      }
+      return ret;
+    },
+    'array': function(arr) {
+      var ret = stackAlloc(arr.length);
+      writeArrayToMemory(arr, ret);
+      return ret;
+    }
+  };
+
+  function convertReturnValue(ret) {
+    if (returnType === 'string') return UTF8ToString(ret);
+    if (returnType === 'boolean') return Boolean(ret);
+    return ret;
+  }
+
+  var func = getCFunc(ident);
+  var cArgs = [];
+  var stack = 0;
+  assert(returnType !== 'array', 'Return type should not be "array".');
+  if (args) {
+    for (var i = 0; i < args.length; i++) {
+      var converter = toC[argTypes[i]];
+      if (converter) {
+        if (stack === 0) stack = stackSave();
+        cArgs[i] = converter(args[i]);
+      } else {
+        cArgs[i] = args[i];
+      }
+    }
+  }
+  var ret = func.apply(null, cArgs);
+
+  ret = convertReturnValue(ret);
+  if (stack !== 0) stackRestore(stack);
+  return ret;
+}
+
+/** @param {string=} returnType
+    @param {Array=} argTypes
+    @param {Object=} opts */
+function cwrap(ident, returnType, argTypes, opts) {
+  return function() {
+    return ccall(ident, returnType, argTypes, arguments, opts);
+  }
+}
 
 var ALLOC_NORMAL = 0; // Tries to use _malloc()
 var ALLOC_STACK = 1; // Lives for the duration of the current function call
-var ALLOC_STATIC = 2; // Cannot be freed
-var ALLOC_DYNAMIC = 3; // Cannot be freed except through sbrk
-var ALLOC_NONE = 4; // Do not allocate
-Module["ALLOC_NORMAL"] = ALLOC_NORMAL;
-Module["ALLOC_STACK"] = ALLOC_STACK;
-Module["ALLOC_STATIC"] = ALLOC_STATIC;
-Module["ALLOC_DYNAMIC"] = ALLOC_DYNAMIC;
-Module["ALLOC_NONE"] = ALLOC_NONE;
+var ALLOC_DYNAMIC = 2; // Cannot be freed except through sbrk
+var ALLOC_NONE = 3; // Do not allocate
 
 // allocate(): This is for internal use. You can use it yourself as well, but the interface
@@ -638,4 +788,5 @@
 //         ignored.
 // @allocator: How to allocate memory, see ALLOC_*
+/** @type {function((TypedArray|Array<number>|number), string, number, number=)} */
 function allocate(slab, types, allocator, ptr) {
   var zeroinit, size;
@@ -654,9 +805,12 @@
     ret = ptr;
   } else {
-    ret = [typeof _malloc === 'function' ? _malloc : Runtime.staticAlloc, Runtime.stackAlloc, Runtime.staticAlloc, Runtime.dynamicAlloc][allocator === undefined ? ALLOC_STATIC : allocator](Math.max(size, singleType ? 1 : types.length));
+    ret = [_malloc,
+    stackAlloc,
+    dynamicAlloc][allocator](Math.max(size, singleType ? 1 : types.length));
   }
 
   if (zeroinit) {
-    var ptr = ret, stop;
+    var stop;
+    ptr = ret;
     assert((ret & 3) == 0);
     stop = ret + (size & ~3);
@@ -673,5 +827,5 @@
   if (singleType === 'i8') {
     if (slab.subarray || slab.slice) {
-      HEAPU8.set(slab, ret);
+      HEAPU8.set(/** @type {!Uint8Array} */ (slab), ret);
     } else {
       HEAPU8.set(new Uint8Array(slab), ret);
@@ -683,8 +837,4 @@
   while (i < size) {
     var curr = slab[i];
-
-    if (typeof curr === 'function') {
-      curr = Runtime.getFunctionIndex(curr);
-    }
 
     type = singleType || types[i];
@@ -701,5 +851,5 @@
     // no need to look up size unless type changes, so cache it
     if (previousType !== type) {
-      typeSize = Runtime.getNativeTypeSize(type);
+      typeSize = getNativeTypeSize(type);
       previousType = type;
     }
@@ -709,68 +859,15 @@
   return ret;
 }
-Module["allocate"] = allocate;
 
 // Allocate memory during any stage of startup - static memory early on, dynamic memory later, malloc when ready
 function getMemory(size) {
-  if (!staticSealed) return Runtime.staticAlloc(size);
-  if (!runtimeInitialized) return Runtime.dynamicAlloc(size);
+  if (!runtimeInitialized) return dynamicAlloc(size);
   return _malloc(size);
 }
-Module["getMemory"] = getMemory;
-
-function Pointer_stringify(ptr, /* optional */ length) {
-  if (length === 0 || !ptr) return '';
-  // TODO: use TextDecoder
-  // Find the length, and check for UTF while doing so
-  var hasUtf = 0;
-  var t;
-  var i = 0;
-  while (1) {
-    assert(ptr + i < TOTAL_MEMORY);
-    t = HEAPU8[(((ptr)+(i))>>0)];
-    hasUtf |= t;
-    if (t == 0 && !length) break;
-    i++;
-    if (length && i == length) break;
-  }
-  if (!length) length = i;
-
-  var ret = '';
-
-  if (hasUtf < 128) {
-    var MAX_CHUNK = 1024; // split up into chunks, because .apply on a huge string can overflow the stack
-    var curr;
-    while (length > 0) {
-      curr = String.fromCharCode.apply(String, HEAPU8.subarray(ptr, ptr + Math.min(length, MAX_CHUNK)));
-      ret = ret ? ret + curr : curr;
-      ptr += MAX_CHUNK;
-      length -= MAX_CHUNK;
-    }
-    return ret;
-  }
-  return Module['UTF8ToString'](ptr);
-}
-Module["Pointer_stringify"] = Pointer_stringify;
-
-// Given a pointer 'ptr' to a null-terminated ASCII-encoded string in the emscripten HEAP, returns
-// a copy of that string as a Javascript String object.
-
-function AsciiToString(ptr) {
-  var str = '';
-  while (1) {
-    var ch = HEAP8[((ptr++)>>0)];
-    if (!ch) return str;
-    str += String.fromCharCode(ch);
-  }
-}
-Module["AsciiToString"] = AsciiToString;
-
-// Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr',
-// null-terminated and encoded in ASCII form. The copy will require at most str.length+1 bytes of space in the HEAP.
-
-function stringToAscii(str, outPtr) {
-  return writeAsciiToMemory(str, outPtr, false);
-}
-Module["stringToAscii"] = stringToAscii;
+
+
+
+
+// runtime_strings.js: Strings related runtime functions that are part of both MINIMAL_RUNTIME and regular runtime.
 
 // Given a pointer 'ptr' to a null-terminated UTF8-encoded string in the given array that contains uint8 values, returns
@@ -778,40 +875,40 @@
 
 var UTF8Decoder = typeof TextDecoder !== 'undefined' ? new TextDecoder('utf8') : undefined;
-function UTF8ArrayToString(u8Array, idx) {
+
+/**
+ * @param {number} idx
+ * @param {number=} maxBytesToRead
+ * @return {string}
+ */
+function UTF8ArrayToString(heap, idx, maxBytesToRead) {
+  var endIdx = idx + maxBytesToRead;
   var endPtr = idx;
   // TextDecoder needs to know the byte length in advance, it doesn't stop on null terminator by itself.
   // Also, use the length info to avoid running tiny strings through TextDecoder, since .subarray() allocates garbage.
-  while (u8Array[endPtr]) ++endPtr;
-
-  if (endPtr - idx > 16 && u8Array.subarray && UTF8Decoder) {
-    return UTF8Decoder.decode(u8Array.subarray(idx, endPtr));
+  // (As a tiny code save trick, compare endPtr against endIdx using a negation, so that undefined means Infinity)
+  while (heap[endPtr] && !(endPtr >= endIdx)) ++endPtr;
+
+  if (endPtr - idx > 16 && heap.subarray && UTF8Decoder) {
+    return UTF8Decoder.decode(heap.subarray(idx, endPtr));
   } else {
-    var u0, u1, u2, u3, u4, u5;
-
     var str = '';
-    while (1) {
-      // For UTF8 byte structure, see http://en.wikipedia.org/wiki/UTF-8#Description and https://www.ietf.org/rfc/rfc2279.txt and https://tools.ietf.org/html/rfc3629
-      u0 = u8Array[idx++];
-      if (!u0) return str;
+    // If building with TextDecoder, we have already computed the string length above, so test loop end condition against that
+    while (idx < endPtr) {
+      // For UTF8 byte structure, see:
+      // http://en.wikipedia.org/wiki/UTF-8#Description
+      // https://www.ietf.org/rfc/rfc2279.txt
+      // https://tools.ietf.org/html/rfc3629
+      var u0 = heap[idx++];
       if (!(u0 & 0x80)) { str += String.fromCharCode(u0); continue; }
-      u1 = u8Array[idx++] & 63;
+      var u1 = heap[idx++] & 63;
       if ((u0 & 0xE0) == 0xC0) { str += String.fromCharCode(((u0 & 31) << 6) | u1); continue; }
-      u2 = u8Array[idx++] & 63;
+      var u2 = heap[idx++] & 63;
       if ((u0 & 0xF0) == 0xE0) {
         u0 = ((u0 & 15) << 12) | (u1 << 6) | u2;
       } else {
-        u3 = u8Array[idx++] & 63;
-        if ((u0 & 0xF8) == 0xF0) {
-          u0 = ((u0 & 7) << 18) | (u1 << 12) | (u2 << 6) | u3;
-        } else {
-          u4 = u8Array[idx++] & 63;
-          if ((u0 & 0xFC) == 0xF8) {
-            u0 = ((u0 & 3) << 24) | (u1 << 18) | (u2 << 12) | (u3 << 6) | u4;
-          } else {
-            u5 = u8Array[idx++] & 63;
-            u0 = ((u0 & 1) << 30) | (u1 << 24) | (u2 << 18) | (u3 << 12) | (u4 << 6) | u5;
-          }
-        }
+        if ((u0 & 0xF8) != 0xF0) warnOnce('Invalid UTF-8 leading byte 0x' + u0.toString(16) + ' encountered when deserializing a UTF-8 string on the asm.js/wasm heap to a JS string!');
+        u0 = ((u0 & 7) << 18) | (u1 << 12) | (u2 << 6) | (heap[idx++] & 63);
       }
+
       if (u0 < 0x10000) {
         str += String.fromCharCode(u0);
@@ -822,14 +919,25 @@
     }
   }
-}
-Module["UTF8ArrayToString"] = UTF8ArrayToString;
-
-// Given a pointer 'ptr' to a null-terminated UTF8-encoded string in the emscripten HEAP, returns
-// a copy of that string as a Javascript String object.
-
-function UTF8ToString(ptr) {
-  return UTF8ArrayToString(HEAPU8,ptr);
-}
-Module["UTF8ToString"] = UTF8ToString;
+  return str;
+}
+
+// Given a pointer 'ptr' to a null-terminated UTF8-encoded string in the emscripten HEAP, returns a
+// copy of that string as a Javascript String object.
+// maxBytesToRead: an optional length that specifies the maximum number of bytes to read. You can omit
+//                 this parameter to scan the string until the first \0 byte. If maxBytesToRead is
+//                 passed, and the string at [ptr, ptr+maxBytesToReadr[ contains a null byte in the
+//                 middle, then the string will cut short at that byte index (i.e. maxBytesToRead will
+//                 not produce a string of exact length [ptr, ptr+maxBytesToRead[)
+//                 N.B. mixing frequent uses of UTF8ToString() with and without maxBytesToRead may
+//                 throw JS JIT optimizations off, so it is worth to consider consistently using one
+//                 style or the other.
+/**
+ * @param {number} ptr
+ * @param {number=} maxBytesToRead
+ * @return {string}
+ */
+function UTF8ToString(ptr, maxBytesToRead) {
+  return ptr ? UTF8ArrayToString(HEAPU8, ptr, maxBytesToRead) : '';
+}
 
 // Copies the given Javascript String object 'str' to the given byte array at address 'outIdx',
@@ -838,12 +946,13 @@
 // Parameters:
 //   str: the Javascript string to copy.
-//   outU8Array: the array to copy to. Each index in this array is assumed to be one 8-byte element.
+//   heap: the array to copy to. Each index in this array is assumed to be one 8-byte element.
 //   outIdx: The starting offset in the array to begin the copying.
-//   maxBytesToWrite: The maximum number of bytes this function can write to the array. This count should include the null
-//                    terminator, i.e. if maxBytesToWrite=1, only the null terminator will be written and nothing else.
+//   maxBytesToWrite: The maximum number of bytes this function can write to the array.
+//                    This count should include the null terminator,
+//                    i.e. if maxBytesToWrite=1, only the null terminator will be written and nothing else.
 //                    maxBytesToWrite=0 does not write any bytes to the output, not even the null terminator.
 // Returns the number of bytes written, EXCLUDING the null terminator.
 
-function stringToUTF8Array(str, outU8Array, outIdx, maxBytesToWrite) {
+function stringToUTF8Array(str, heap, outIdx, maxBytesToWrite) {
   if (!(maxBytesToWrite > 0)) // Parameter maxBytesToWrite is not optional. Negative values, 0, null, undefined and false each don't write out any bytes.
     return 0;
@@ -856,45 +965,33 @@
     // For UTF8 byte structure, see http://en.wikipedia.org/wiki/UTF-8#Description and https://www.ietf.org/rfc/rfc2279.txt and https://tools.ietf.org/html/rfc3629
     var u = str.charCodeAt(i); // possibly a lead surrogate
-    if (u >= 0xD800 && u <= 0xDFFF) u = 0x10000 + ((u & 0x3FF) << 10) | (str.charCodeAt(++i) & 0x3FF);
+    if (u >= 0xD800 && u <= 0xDFFF) {
+      var u1 = str.charCodeAt(++i);
+      u = 0x10000 + ((u & 0x3FF) << 10) | (u1 & 0x3FF);
+    }
     if (u <= 0x7F) {
       if (outIdx >= endIdx) break;
-      outU8Array[outIdx++] = u;
+      heap[outIdx++] = u;
     } else if (u <= 0x7FF) {
       if (outIdx + 1 >= endIdx) break;
-      outU8Array[outIdx++] = 0xC0 | (u >> 6);
-      outU8Array[outIdx++] = 0x80 | (u & 63);
+      heap[outIdx++] = 0xC0 | (u >> 6);
+      heap[outIdx++] = 0x80 | (u & 63);
     } else if (u <= 0xFFFF) {
       if (outIdx + 2 >= endIdx) break;
-      outU8Array[outIdx++] = 0xE0 | (u >> 12);
-      outU8Array[outIdx++] = 0x80 | ((u >> 6) & 63);
-      outU8Array[outIdx++] = 0x80 | (u & 63);
-    } else if (u <= 0x1FFFFF) {
+      heap[outIdx++] = 0xE0 | (u >> 12);
+      heap[outIdx++] = 0x80 | ((u >> 6) & 63);
+      heap[outIdx++] = 0x80 | (u & 63);
+    } else {
       if (outIdx + 3 >= endIdx) break;
-      outU8Array[outIdx++] = 0xF0 | (u >> 18);
-      outU8Array[outIdx++] = 0x80 | ((u >> 12) & 63);
-      outU8Array[outIdx++] = 0x80 | ((u >> 6) & 63);
-      outU8Array[outIdx++] = 0x80 | (u & 63);
-    } else if (u <= 0x3FFFFFF) {
-      if (outIdx + 4 >= endIdx) break;
-      outU8Array[outIdx++] = 0xF8 | (u >> 24);
-      outU8Array[outIdx++] = 0x80 | ((u >> 18) & 63);
-      outU8Array[outIdx++] = 0x80 | ((u >> 12) & 63);
-      outU8Array[outIdx++] = 0x80 | ((u >> 6) & 63);
-      outU8Array[outIdx++] = 0x80 | (u & 63);
-    } else {
-      if (outIdx + 5 >= endIdx) break;
-      outU8Array[outIdx++] = 0xFC | (u >> 30);
-      outU8Array[outIdx++] = 0x80 | ((u >> 24) & 63);
-      outU8Array[outIdx++] = 0x80 | ((u >> 18) & 63);
-      outU8Array[outIdx++] = 0x80 | ((u >> 12) & 63);
-      outU8Array[outIdx++] = 0x80 | ((u >> 6) & 63);
-      outU8Array[outIdx++] = 0x80 | (u & 63);
+      if (u >= 0x200000) warnOnce('Invalid Unicode code point 0x' + u.toString(16) + ' encountered when serializing a JS string to an UTF-8 string on the asm.js/wasm heap! (Valid unicode code points should be in range 0-0x1FFFFF).');
+      heap[outIdx++] = 0xF0 | (u >> 18);
+      heap[outIdx++] = 0x80 | ((u >> 12) & 63);
+      heap[outIdx++] = 0x80 | ((u >> 6) & 63);
+      heap[outIdx++] = 0x80 | (u & 63);
     }
   }
   // Null-terminate the pointer to the buffer.
-  outU8Array[outIdx] = 0;
+  heap[outIdx] = 0;
   return outIdx - startIdx;
 }
-Module["stringToUTF8Array"] = stringToUTF8Array;
 
 // Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr',
@@ -907,8 +1004,6 @@
   return stringToUTF8Array(str, HEAPU8,outPtr, maxBytesToWrite);
 }
-Module["stringToUTF8"] = stringToUTF8;
 
 // Returns the number of bytes the given Javascript string takes if encoded as a UTF8 byte array, EXCLUDING the null terminator byte.
-
 function lengthBytesUTF8(str) {
   var len = 0;
@@ -918,21 +1013,36 @@
     var u = str.charCodeAt(i); // possibly a lead surrogate
     if (u >= 0xD800 && u <= 0xDFFF) u = 0x10000 + ((u & 0x3FF) << 10) | (str.charCodeAt(++i) & 0x3FF);
-    if (u <= 0x7F) {
-      ++len;
-    } else if (u <= 0x7FF) {
-      len += 2;
-    } else if (u <= 0xFFFF) {
-      len += 3;
-    } else if (u <= 0x1FFFFF) {
-      len += 4;
-    } else if (u <= 0x3FFFFFF) {
-      len += 5;
-    } else {
-      len += 6;
-    }
+    if (u <= 0x7F) ++len;
+    else if (u <= 0x7FF) len += 2;
+    else if (u <= 0xFFFF) len += 3;
+    else len += 4;
   }
   return len;
 }
-Module["lengthBytesUTF8"] = lengthBytesUTF8;
+
+
+
+
+
+// runtime_strings_extra.js: Strings related runtime functions that are available only in regular runtime.
+
+// Given a pointer 'ptr' to a null-terminated ASCII-encoded string in the emscripten HEAP, returns
+// a copy of that string as a Javascript String object.
+
+function AsciiToString(ptr) {
+  var str = '';
+  while (1) {
+    var ch = HEAPU8[((ptr++)>>0)];
+    if (!ch) return str;
+    str += String.fromCharCode(ch);
+  }
+}
+
+// Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr',
+// null-terminated and encoded in ASCII form. The copy will require at most str.length+1 bytes of space in the HEAP.
+
+function stringToAscii(str, outPtr) {
+  return writeAsciiToMemory(str, outPtr, false);
+}
 
 // Given a pointer 'ptr' to a null-terminated UTF16LE-encoded string in the emscripten HEAP, returns
@@ -940,5 +1050,6 @@
 
 var UTF16Decoder = typeof TextDecoder !== 'undefined' ? new TextDecoder('utf-16le') : undefined;
-function UTF16ToString(ptr) {
+
+function UTF16ToString(ptr, maxBytesToRead) {
   assert(ptr % 2 == 0, 'Pointer passed to UTF16ToString must be aligned to two bytes!');
   var endPtr = ptr;
@@ -946,5 +1057,8 @@
   // Also, use the length info to avoid running tiny strings through TextDecoder, since .subarray() allocates garbage.
   var idx = endPtr >> 1;
-  while (HEAP16[idx]) ++idx;
+  var maxIdx = idx + maxBytesToRead / 2;
+  // If maxBytesToRead is not passed explicitly, it will be undefined, and this
+  // will always evaluate to true. This saves on code size.
+  while (!(idx >= maxIdx) && HEAPU16[idx]) ++idx;
   endPtr = idx << 1;
 
@@ -957,5 +1071,5 @@
     while (1) {
       var codeUnit = HEAP16[(((ptr)+(i*2))>>1)];
-      if (codeUnit == 0) return str;
+      if (codeUnit == 0 || i == maxBytesToRead / 2) return str;
       ++i;
       // fromCharCode constructs a character from a UTF-16 code unit, so we can pass the UTF16 string right through.
@@ -964,5 +1078,4 @@
   }
 }
-
 
 // Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr',
@@ -999,5 +1112,4 @@
 }
 
-
 // Returns the number of bytes the given Javascript string takes if encoded as a UTF16 byte array, EXCLUDING the null terminator byte.
 
@@ -1006,14 +1118,14 @@
 }
 
-
-function UTF32ToString(ptr) {
+function UTF32ToString(ptr, maxBytesToRead) {
   assert(ptr % 4 == 0, 'Pointer passed to UTF32ToString must be aligned to four bytes!');
   var i = 0;
 
   var str = '';
-  while (1) {
+  // If maxBytesToRead is not passed explicitly, it will be undefined, and this
+  // will always evaluate to true. This saves on code size.
+  while (!(i >= maxBytesToRead / 4)) {
     var utf32 = HEAP32[(((ptr)+(i*4))>>2)];
-    if (utf32 == 0)
-      return str;
+    if (utf32 == 0) break;
     ++i;
     // Gotcha: fromCharCode constructs a character from a UTF-16 encoded code (pair), not from a Unicode code point! So encode the code point to UTF-16 for constructing.
@@ -1026,6 +1138,6 @@
     }
   }
-}
-
+  return str;
+}
 
 // Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr',
@@ -1067,5 +1179,4 @@
 }
 
-
 // Returns the number of bytes the given Javascript string takes if encoded as a UTF16 byte array, EXCLUDING the null terminator byte.
 
@@ -1083,67 +1194,58 @@
 }
 
-
-function demangle(func) {
-  var __cxa_demangle_func = Module['___cxa_demangle'] || Module['__cxa_demangle'];
-  if (__cxa_demangle_func) {
-    try {
-      var s =
-        func.substr(1);
-      var len = lengthBytesUTF8(s)+1;
-      var buf = _malloc(len);
-      stringToUTF8(s, buf, len);
-      var status = _malloc(4);
-      var ret = __cxa_demangle_func(buf, 0, 0, status);
-      if (getValue(status, 'i32') === 0 && ret) {
-        return Pointer_stringify(ret);
-      }
-      // otherwise, libcxxabi failed
-    } catch(e) {
-      // ignore problems here
-    } finally {
-      if (buf) _free(buf);
-      if (status) _free(status);
-      if (ret) _free(ret);
-    }
-    // failure when using libcxxabi, don't demangle
-    return func;
-  }
-  Runtime.warnOnce('warning: build with  -s DEMANGLE_SUPPORT=1  to link in libcxxabi demangling');
-  return func;
-}
-
-function demangleAll(text) {
-  var regex =
-    /__Z[\w\d_]+/g;
-  return text.replace(regex,
-    function(x) {
-      var y = demangle(x);
-      return x === y ? x : (x + ' [' + y + ']');
-    });
-}
-
-function jsStackTrace() {
-  var err = new Error();
-  if (!err.stack) {
-    // IE10+ special cases: It does have callstack info, but it is only populated if an Error object is thrown,
-    // so try that as a special-case.
-    try {
-      throw new Error(0);
-    } catch(e) {
-      err = e;
-    }
-    if (!err.stack) {
-      return '(no stack trace available)';
-    }
-  }
-  return err.stack.toString();
-}
-
-function stackTrace() {
-  var js = jsStackTrace();
-  if (Module['extraStackTrace']) js += '\n' + Module['extraStackTrace']();
-  return demangleAll(js);
-}
-Module["stackTrace"] = stackTrace;
+// Allocate heap space for a JS string, and write it there.
+// It is the responsibility of the caller to free() that memory.
+function allocateUTF8(str) {
+  var size = lengthBytesUTF8(str) + 1;
+  var ret = _malloc(size);
+  if (ret) stringToUTF8Array(str, HEAP8, ret, size);
+  return ret;
+}
+
+// Allocate stack space for a JS string, and write it there.
+function allocateUTF8OnStack(str) {
+  var size = lengthBytesUTF8(str) + 1;
+  var ret = stackAlloc(size);
+  stringToUTF8Array(str, HEAP8, ret, size);
+  return ret;
+}
+
+// Deprecated: This function should not be called because it is unsafe and does not provide
+// a maximum length limit of how many bytes it is allowed to write. Prefer calling the
+// function stringToUTF8Array() instead, which takes in a maximum length that can be used
+// to be secure from out of bounds writes.
+/** @deprecated
+    @param {boolean=} dontAddNull */
+function writeStringToMemory(string, buffer, dontAddNull) {
+  warnOnce('writeStringToMemory is deprecated and should not be called! Use stringToUTF8() instead!');
+
+  var /** @type {number} */ lastChar, /** @type {number} */ end;
+  if (dontAddNull) {
+    // stringToUTF8Array always appends null. If we don't want to do that, remember the
+    // character that existed at the location where the null will be placed, and restore
+    // that after the write (below).
+    end = buffer + lengthBytesUTF8(string);
+    lastChar = HEAP8[end];
+  }
+  stringToUTF8(string, buffer, Infinity);
+  if (dontAddNull) HEAP8[end] = lastChar; // Restore the value under the null character.
+}
+
+function writeArrayToMemory(array, buffer) {
+  assert(array.length >= 0, 'writeArrayToMemory array must have a length (should be an array or typed array)')
+  HEAP8.set(array, buffer);
+}
+
+/** @param {boolean=} dontAddNull */
+function writeAsciiToMemory(str, buffer, dontAddNull) {
+  for (var i = 0; i < str.length; ++i) {
+    assert(str.charCodeAt(i) === str.charCodeAt(i)&0xff);
+    HEAP8[((buffer++)>>0)]=str.charCodeAt(i);
+  }
+  // Null-terminate the pointer to the HEAP.
+  if (!dontAddNull) HEAP8[((buffer)>>0)]=0;
+}
+
+
 
 // Memory management
@@ -1152,5 +1254,4 @@
 var WASM_PAGE_SIZE = 65536;
 var ASMJS_PAGE_SIZE = 16777216;
-var MIN_TOTAL_MEMORY = 16777216;
 
 function alignUp(x, multiple) {
@@ -1161,29 +1262,99 @@
 }
 
-var HEAP;
-var buffer;
-var HEAP8, HEAPU8, HEAP16, HEAPU16, HEAP32, HEAPU32, HEAPF32, HEAPF64;
-
-function updateGlobalBuffer(buf) {
-  Module['buffer'] = buffer = buf;
-}
-
-function updateGlobalBufferViews() {
-  Module['HEAP8'] = HEAP8 = new Int8Array(buffer);
-  Module['HEAP16'] = HEAP16 = new Int16Array(buffer);
-  Module['HEAP32'] = HEAP32 = new Int32Array(buffer);
-  Module['HEAPU8'] = HEAPU8 = new Uint8Array(buffer);
-  Module['HEAPU16'] = HEAPU16 = new Uint16Array(buffer);
-  Module['HEAPU32'] = HEAPU32 = new Uint32Array(buffer);
-  Module['HEAPF32'] = HEAPF32 = new Float32Array(buffer);
-  Module['HEAPF64'] = HEAPF64 = new Float64Array(buffer);
-}
-
-var STATIC_BASE, STATICTOP, staticSealed; // static area
-var STACK_BASE, STACKTOP, STACK_MAX; // stack area
-var DYNAMIC_BASE, DYNAMICTOP_PTR; // dynamic area handled by sbrk
-
-  STATIC_BASE = STATICTOP = STACK_BASE = STACKTOP = STACK_MAX = DYNAMIC_BASE = DYNAMICTOP_PTR = 0;
-  staticSealed = false;
+var HEAP,
+/** @type {ArrayBuffer} */
+  buffer,
+/** @type {Int8Array} */
+  HEAP8,
+/** @type {Uint8Array} */
+  HEAPU8,
+/** @type {Int16Array} */
+  HEAP16,
+/** @type {Uint16Array} */
+  HEAPU16,
+/** @type {Int32Array} */
+  HEAP32,
+/** @type {Uint32Array} */
+  HEAPU32,
+/** @type {Float32Array} */
+  HEAPF32,
+/** @type {Float64Array} */
+  HEAPF64;
+
+function updateGlobalBufferAndViews(buf) {
+  buffer = buf;
+  Module['HEAP8'] = HEAP8 = new Int8Array(buf);
+  Module['HEAP16'] = HEAP16 = new Int16Array(buf);
+  Module['HEAP32'] = HEAP32 = new Int32Array(buf);
+  Module['HEAPU8'] = HEAPU8 = new Uint8Array(buf);
+  Module['HEAPU16'] = HEAPU16 = new Uint16Array(buf);
+  Module['HEAPU32'] = HEAPU32 = new Uint32Array(buf);
+  Module['HEAPF32'] = HEAPF32 = new Float32Array(buf);
+  Module['HEAPF64'] = HEAPF64 = new Float64Array(buf);
+}
+
+var STATIC_BASE = 1024,
+    STACK_BASE = 5322752,
+    STACKTOP = STACK_BASE,
+    STACK_MAX = 79872,
+    DYNAMIC_BASE = 5322752,
+    DYNAMICTOP_PTR = 79712;
+
+assert(STACK_BASE % 16 === 0, 'stack must start aligned');
+assert(DYNAMIC_BASE % 16 === 0, 'heap must start aligned');
+
+
+var TOTAL_STACK = 5242880;
+if (Module['TOTAL_STACK']) assert(TOTAL_STACK === Module['TOTAL_STACK'], 'the stack size can no longer be determined at runtime')
+
+var INITIAL_INITIAL_MEMORY = Module['INITIAL_MEMORY'] || 16777216;if (!Object.getOwnPropertyDescriptor(Module, 'INITIAL_MEMORY')) Object.defineProperty(Module, 'INITIAL_MEMORY', { configurable: true, get: function() { abort('Module.INITIAL_MEMORY has been replaced with plain INITIAL_INITIAL_MEMORY (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)') } });
+
+assert(INITIAL_INITIAL_MEMORY >= TOTAL_STACK, 'INITIAL_MEMORY should be larger than TOTAL_STACK, was ' + INITIAL_INITIAL_MEMORY + '! (TOTAL_STACK=' + TOTAL_STACK + ')');
+
+// check for full engine support (use string 'subarray' to avoid closure compiler confusion)
+assert(typeof Int32Array !== 'undefined' && typeof Float64Array !== 'undefined' && Int32Array.prototype.subarray !== undefined && Int32Array.prototype.set !== undefined,
+       'JS engine does not provide full typed array support');
+
+
+
+
+
+
+
+
+// In non-standalone/normal mode, we create the memory here.
+
+
+
+// Create the main memory. (Note: this isn't used in STANDALONE_WASM mode since the wasm
+// memory is created in the wasm, not in JS.)
+
+  if (Module['wasmMemory']) {
+    wasmMemory = Module['wasmMemory'];
+  } else
+  {
+    wasmMemory = new WebAssembly.Memory({
+      'initial': INITIAL_INITIAL_MEMORY / WASM_PAGE_SIZE
+      ,
+      'maximum': INITIAL_INITIAL_MEMORY / WASM_PAGE_SIZE
+    });
+  }
+
+
+if (wasmMemory) {
+  buffer = wasmMemory.buffer;
+}
+
+// If the user provides an incorrect length, just use that length instead rather than providing the user to
+// specifically provide the memory length with Module['INITIAL_MEMORY'].
+INITIAL_INITIAL_MEMORY = buffer.byteLength;
+assert(INITIAL_INITIAL_MEMORY % WASM_PAGE_SIZE === 0);
+updateGlobalBufferAndViews(buffer);
+
+HEAP32[DYNAMICTOP_PTR>>2] = DYNAMIC_BASE;
+
+
+
+
 
 
@@ -1191,74 +1362,40 @@
 function writeStackCookie() {
   assert((STACK_MAX & 3) == 0);
-  HEAPU32[(STACK_MAX >> 2)-1] = 0x02135467;
-  HEAPU32[(STACK_MAX >> 2)-2] = 0x89BACDFE;
+  // The stack grows downwards
+  HEAPU32[(STACK_MAX >> 2)+1] = 0x2135467;
+  HEAPU32[(STACK_MAX >> 2)+2] = 0x89BACDFE;
+  // Also test the global address 0 for integrity.
+  // We don't do this with ASan because ASan does its own checks for this.
+  HEAP32[0] = 0x63736d65; /* 'emsc' */
 }
 
 function checkStackCookie() {
-  if (HEAPU32[(STACK_MAX >> 2)-1] != 0x02135467 || HEAPU32[(STACK_MAX >> 2)-2] != 0x89BACDFE) {
-    abort('Stack overflow! Stack cookie has been overwritten, expected hex dwords 0x89BACDFE and 0x02135467, but received 0x' + HEAPU32[(STACK_MAX >> 2)-2].toString(16) + ' ' + HEAPU32[(STACK_MAX >> 2)-1].toString(16));
-  }
-  // Also test the global address 0 for integrity. This check is not compatible with SAFE_SPLIT_MEMORY though, since that mode already tests all address 0 accesses on its own.
-  if (HEAP32[0] !== 0x63736d65 /* 'emsc' */) throw 'Runtime error: The application has corrupted its heap memory area (address zero)!';
-}
-
-function abortStackOverflow(allocSize) {
-  abort('Stack overflow! Attempted to allocate ' + allocSize + ' bytes on the stack, but stack has only ' + (STACK_MAX - asm.stackSave() + allocSize) + ' bytes available!');
-}
-
-function abortOnCannotGrowMemory() {
-  abort('Cannot enlarge memory arrays. Either (1) compile with  -s TOTAL_MEMORY=X  with X higher than the current value ' + TOTAL_MEMORY + ', (2) compile with  -s ALLOW_MEMORY_GROWTH=1  which adjusts the size at runtime but prevents some optimizations, (3) set Module.TOTAL_MEMORY to a higher value before the program runs, or if you want malloc to return NULL (0) instead of this abort, compile with  -s ABORTING_MALLOC=0 ');
-}
-
-
-function enlargeMemory() {
-  abortOnCannotGrowMemory();
-}
-
-
-var TOTAL_STACK = Module['TOTAL_STACK'] || 5242880;
-var TOTAL_MEMORY = Module['TOTAL_MEMORY'] || 16777216;
-if (TOTAL_MEMORY < TOTAL_STACK) Module.printErr('TOTAL_MEMORY should be larger than TOTAL_STACK, was ' + TOTAL_MEMORY + '! (TOTAL_STACK=' + TOTAL_STACK + ')');
-
-// Initialize the runtime's memory
-// check for full engine support (use string 'subarray' to avoid closure compiler confusion)
-assert(typeof Int32Array !== 'undefined' && typeof Float64Array !== 'undefined' && !!(new Int32Array(1)['subarray']) && !!(new Int32Array(1)['set']),
-       'JS engine does not provide full typed array support');
-
-
-
-// Use a provided buffer, if there is one, or else allocate a new one
-if (Module['buffer']) {
-  buffer = Module['buffer'];
-  assert(buffer.byteLength === TOTAL_MEMORY, 'provided buffer should be ' + TOTAL_MEMORY + ' bytes, but it is ' + buffer.byteLength);
-} else {
-  // Use a WebAssembly memory where available
-  {
-    buffer = new ArrayBuffer(TOTAL_MEMORY);
-  }
-  assert(buffer.byteLength === TOTAL_MEMORY);
-}
-updateGlobalBufferViews();
-
-
-function getTotalMemory() {
-  return TOTAL_MEMORY;
-}
+  var cookie1 = HEAPU32[(STACK_MAX >> 2)+1];
+  var cookie2 = HEAPU32[(STACK_MAX >> 2)+2];
+  if (cookie1 != 0x2135467 || cookie2 != 0x89BACDFE) {
+    abort('Stack overflow! Stack cookie has been overwritten, expected hex dwords 0x89BACDFE and 0x2135467, but received 0x' + cookie2.toString(16) + ' ' + cookie1.toString(16));
+  }
+  // Also test the global address 0 for integrity.
+  // We don't do this with ASan because ASan does its own checks for this.
+  if (HEAP32[0] !== 0x63736d65 /* 'emsc' */) abort('Runtime error: The application has corrupted its heap memory area (address zero)!');
+}
+
+
+
+
 
 // Endianness check (note: assumes compiler arch was little-endian)
-  HEAP32[0] = 0x63736d65; /* 'emsc' */
-HEAP16[1] = 0x6373;
-if (HEAPU8[2] !== 0x73 || HEAPU8[3] !== 0x63) throw 'Runtime error: expected the system to be little-endian!';
-
-Module['HEAP'] = HEAP;
-Module['buffer'] = buffer;
-Module['HEAP8'] = HEAP8;
-Module['HEAP16'] = HEAP16;
-Module['HEAP32'] = HEAP32;
-Module['HEAPU8'] = HEAPU8;
-Module['HEAPU16'] = HEAPU16;
-Module['HEAPU32'] = HEAPU32;
-Module['HEAPF32'] = HEAPF32;
-Module['HEAPF64'] = HEAPF64;
+(function() {
+  var h16 = new Int16Array(1);
+  var h8 = new Int8Array(h16.buffer);
+  h16[0] = 0x6373;
+  if (h8[0] !== 0x73 || h8[1] !== 0x63) throw 'Runtime error: expected the system to be little-endian!';
+})();
+
+function abortFnPtrError(ptr, sig) {
+	abort("Invalid function pointer " + ptr + " called with signature '" + sig + "'. Perhaps this is an invalid value (e.g. caused by calling a virtual method on a NULL pointer)? Or calling a function with an incorrect type, which will fail? (it is worth building your source files with -Werror (warnings are errors), as warnings can indicate undefined behavior which can cause this). Build with ASSERTIONS=2 for more info.");
+}
+
+
 
 function callRuntimeCallbacks(callbacks) {
@@ -1266,5 +1403,5 @@
     var callback = callbacks.shift();
     if (typeof callback == 'function') {
-      callback();
+      callback(Module); // Pass the module as the first argument.
       continue;
     }
@@ -1286,5 +1423,5 @@
 var __ATMAIN__    = []; // functions called when main() is to be run
 var __ATEXIT__    = []; // functions called during shutdown
-var __ATPOSTRUN__ = []; // functions called after the runtime has exited
+var __ATPOSTRUN__ = []; // functions called after the main() is called
 
 var runtimeInitialized = false;
@@ -1293,5 +1430,5 @@
 
 function preRun() {
-  // compatibility - merge in anything from Module['preRun'] at this time
+
   if (Module['preRun']) {
     if (typeof Module['preRun'] == 'function') Module['preRun'] = [Module['preRun']];
@@ -1300,11 +1437,14 @@
     }
   }
+
   callRuntimeCallbacks(__ATPRERUN__);
 }
 
-function ensureInitRuntime() {
+function initRuntime() {
   checkStackCookie();
-  if (runtimeInitialized) return;
+  assert(!runtimeInitialized);
   runtimeInitialized = true;
+  if (!Module["noFSInit"] && !FS.init.initialized) FS.init();
+TTY.init();
   callRuntimeCallbacks(__ATINIT__);
 }
@@ -1312,4 +1452,5 @@
 function preMain() {
   checkStackCookie();
+  FS.ignorePermissions = false;
   callRuntimeCallbacks(__ATMAIN__);
 }
@@ -1317,5 +1458,4 @@
 function exitRuntime() {
   checkStackCookie();
-  callRuntimeCallbacks(__ATEXIT__);
   runtimeExited = true;
 }
@@ -1323,5 +1463,5 @@
 function postRun() {
   checkStackCookie();
-  // compatibility - merge in anything from Module['postRun'] at this time
+
   if (Module['postRun']) {
     if (typeof Module['postRun'] == 'function') Module['postRun'] = [Module['postRun']];
@@ -1330,4 +1470,5 @@
     }
   }
+
   callRuntimeCallbacks(__ATPOSTRUN__);
 }
@@ -1336,88 +1477,21 @@
   __ATPRERUN__.unshift(cb);
 }
-Module["addOnPreRun"] = addOnPreRun;
 
 function addOnInit(cb) {
   __ATINIT__.unshift(cb);
 }
-Module["addOnInit"] = addOnInit;
 
 function addOnPreMain(cb) {
   __ATMAIN__.unshift(cb);
 }
-Module["addOnPreMain"] = addOnPreMain;
 
 function addOnExit(cb) {
-  __ATEXIT__.unshift(cb);
-}
-Module["addOnExit"] = addOnExit;
+}
 
 function addOnPostRun(cb) {
   __ATPOSTRUN__.unshift(cb);
 }
-Module["addOnPostRun"] = addOnPostRun;
-
-// Tools
-
-
-function intArrayFromString(stringy, dontAddNull, length /* optional */) {
-  var len = length > 0 ? length : lengthBytesUTF8(stringy)+1;
-  var u8array = new Array(len);
-  var numBytesWritten = stringToUTF8Array(stringy, u8array, 0, u8array.length);
-  if (dontAddNull) u8array.length = numBytesWritten;
-  return u8array;
-}
-Module["intArrayFromString"] = intArrayFromString;
-
-function intArrayToString(array) {
-  var ret = [];
-  for (var i = 0; i < array.length; i++) {
-    var chr = array[i];
-    if (chr > 0xFF) {
-      assert(false, 'Character code ' + chr + ' (' + String.fromCharCode(chr) + ')  at offset ' + i + ' not in 0x00-0xFF.');
-      chr &= 0xFF;
-    }
-    ret.push(String.fromCharCode(chr));
-  }
-  return ret.join('');
-}
-Module["intArrayToString"] = intArrayToString;
-
-// Deprecated: This function should not be called because it is unsafe and does not provide
-// a maximum length limit of how many bytes it is allowed to write. Prefer calling the
-// function stringToUTF8Array() instead, which takes in a maximum length that can be used
-// to be secure from out of bounds writes.
-function writeStringToMemory(string, buffer, dontAddNull) {
-  Runtime.warnOnce('writeStringToMemory is deprecated and should not be called! Use stringToUTF8() instead!');
-
-  var lastChar, end;
-  if (dontAddNull) {
-    // stringToUTF8Array always appends null. If we don't want to do that, remember the
-    // character that existed at the location where the null will be placed, and restore
-    // that after the write (below).
-    end = buffer + lengthBytesUTF8(string);
-    lastChar = HEAP8[end];
-  }
-  stringToUTF8(string, buffer, Infinity);
-  if (dontAddNull) HEAP8[end] = lastChar; // Restore the value under the null character.
-}
-Module["writeStringToMemory"] = writeStringToMemory;
-
-function writeArrayToMemory(array, buffer) {
-  assert(array.length >= 0, 'writeArrayToMemory array must have a length (should be an array or typed array)')
-  HEAP8.set(array, buffer);
-}
-Module["writeArrayToMemory"] = writeArrayToMemory;
-
-function writeAsciiToMemory(str, buffer, dontAddNull) {
-  for (var i = 0; i < str.length; ++i) {
-    assert(str.charCodeAt(i) === str.charCodeAt(i)&0xff);
-    HEAP8[((buffer++)>>0)]=str.charCodeAt(i);
-  }
-  // Null-terminate the pointer to the HEAP.
-  if (!dontAddNull) HEAP8[((buffer)>>0)]=0;
-}
-Module["writeAsciiToMemory"] = writeAsciiToMemory;
-
+
+/** @param {number|boolean=} ignore */
 function unSign(value, bits, ignore) {
   if (value >= 0) {
@@ -1427,4 +1501,5 @@
                     : Math.pow(2, bits)         + value;
 }
+/** @param {number|boolean=} ignore */
 function reSign(value, bits, ignore) {
   if (value <= 0) {
@@ -1442,28 +1517,18 @@
 
 
-// check for imul support, and also for correctness ( https://bugs.webkit.org/show_bug.cgi?id=126345 )
-if (!Math['imul'] || Math['imul'](0xffffffff, 5) !== -5) Math['imul'] = function imul(a, b) {
-  var ah  = a >>> 16;
-  var al = a & 0xffff;
-  var bh  = b >>> 16;
-  var bl = b & 0xffff;
-  return (al*bl + ((ah*bl + al*bh) << 16))|0;
-};
-Math.imul = Math['imul'];
-
-
-if (!Math['clz32']) Math['clz32'] = function(x) {
-  x = x >>> 0;
-  for (var i = 0; i < 32; i++) {
-    if (x & (1 << (31 - i))) return i;
-  }
-  return 32;
-};
-Math.clz32 = Math['clz32']
-
-if (!Math['trunc']) Math['trunc'] = function(x) {
-  return x < 0 ? Math.ceil(x) : Math.floor(x);
-};
-Math.trunc = Math['trunc'];
+
+
+// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/imul
+
+// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/fround
+
+// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/clz32
+
+// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/trunc
+
+assert(Math.imul, 'This browser does not support Math.imul(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill');
+assert(Math.fround, 'This browser does not support Math.fround(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill');
+assert(Math.clz32, 'This browser does not support Math.clz32(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill');
+assert(Math.trunc, 'This browser does not support Math.trunc(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill');
 
 var Math_abs = Math.abs;
@@ -1485,11 +1550,14 @@
 var Math_round = Math.round;
 var Math_min = Math.min;
+var Math_max = Math.max;
 var Math_clz32 = Math.clz32;
 var Math_trunc = Math.trunc;
+
+
 
 // A counter of dependencies for calling run(). If we need to
 // do asynchronous work before running, increment this and
 // decrement it. Incrementing must happen in a place like
-// PRE_RUN_ADDITIONS (used by emcc to add file preloading).
+// Module.preRun (used by emcc to add file preloading).
 // Note that you can add dependencies in preRun, even though
 // it happens right before run - run will be postponed until
@@ -1506,12 +1574,13 @@
     id = orig + Math.random();
   }
-  return id;
 }
 
 function addRunDependency(id) {
   runDependencies++;
+
   if (Module['monitorRunDependencies']) {
     Module['monitorRunDependencies'](runDependencies);
   }
+
   if (id) {
     assert(!runDependencyTracking[id]);
@@ -1529,29 +1598,30 @@
           if (!shown) {
             shown = true;
-            Module.printErr('still waiting on run dependencies:');
-          }
-          Module.printErr('dependency: ' + dep);
+            err('still waiting on run dependencies:');
+          }
+          err('dependency: ' + dep);
         }
         if (shown) {
-          Module.printErr('(end of list)');
+          err('(end of list)');
         }
       }, 10000);
     }
   } else {
-    Module.printErr('warning: run dependency added without ID');
-  }
-}
-Module["addRunDependency"] = addRunDependency;
+    err('warning: run dependency added without ID');
+  }
+}
 
 function removeRunDependency(id) {
   runDependencies--;
+
   if (Module['monitorRunDependencies']) {
     Module['monitorRunDependencies'](runDependencies);
   }
+
   if (id) {
     assert(runDependencyTracking[id]);
     delete runDependencyTracking[id];
   } else {
-    Module.printErr('warning: run dependency removed without ID');
+    err('warning: run dependency removed without ID');
   }
   if (runDependencies == 0) {
@@ -1567,9 +1637,29 @@
   }
 }
-Module["removeRunDependency"] = removeRunDependency;
 
 Module["preloadedImages"] = {}; // maps url to image data
 Module["preloadedAudios"] = {}; // maps url to audio data
 
+/** @param {string|number=} what */
+function abort(what) {
+  if (Module['onAbort']) {
+    Module['onAbort'](what);
+  }
+
+  what += '';
+  out(what);
+  err(what);
+
+  ABORT = true;
+  EXITSTATUS = 1;
+
+  var output = 'abort(' + what + ') at ' + stackTrace();
+  what = output;
+
+  // Throw a wasm runtime error, because a JS error might be seen as a foreign
+  // exception, which means we'd run destructors on it. We need the error to
+  // simply make the program stop.
+  throw new WebAssembly.RuntimeError(what);
+}
 
 
@@ -1581,26 +1671,197 @@
 
 
+
+
+
+
+
+
+function hasPrefix(str, prefix) {
+  return String.prototype.startsWith ?
+      str.startsWith(prefix) :
+      str.indexOf(prefix) === 0;
+}
+
+// Prefix of data URIs emitted by SINGLE_FILE and related options.
+var dataURIPrefix = 'data:application/octet-stream;base64,';
+
+// Indicates whether filename is a base64 data URI.
+function isDataURI(filename) {
+  return hasPrefix(filename, dataURIPrefix);
+}
+
+var fileURIPrefix = "file://";
+
+// Indicates whether filename is delivered via file protocol (as opposed to http/https)
+function isFileURI(filename) {
+  return hasPrefix(filename, fileURIPrefix);
+}
+
+
+
+function createExportWrapper(name, fixedasm) {
+  return function() {
+    var displayName = name;
+    var asm = fixedasm;
+    if (!fixedasm) {
+      asm = Module['asm'];
+    }
+    assert(runtimeInitialized, 'native function `' + displayName + '` called before runtime initialization');
+    assert(!runtimeExited, 'native function `' + displayName + '` called after runtime exit (use NO_EXIT_RUNTIME to keep it alive after main() exits)');
+    if (!asm[name]) {
+      assert(asm[name], 'exported native function `' + displayName + '` not found');
+    }
+    return asm[name].apply(null, arguments);
+  };
+}
+
+var wasmBinaryFile = 'mrbc.wasm';
+if (!isDataURI(wasmBinaryFile)) {
+  wasmBinaryFile = locateFile(wasmBinaryFile);
+}
+
+function getBinary() {
+  try {
+    if (wasmBinary) {
+      return new Uint8Array(wasmBinary);
+    }
+
+    if (readBinary) {
+      return readBinary(wasmBinaryFile);
+    } else {
+      throw "both async and sync fetching of the wasm failed";
+    }
+  }
+  catch (err) {
+    abort(err);
+  }
+}
+
+function getBinaryPromise() {
+  // If we don't have the binary yet, and have the Fetch api, use that;
+  // in some environments, like Electron's render process, Fetch api may be present, but have a different context than expected, let's only use it on the Web
+  if (!wasmBinary && (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) && typeof fetch === 'function'
+      // Let's not use fetch to get objects over file:// as it's most likely Cordova which doesn't support fetch for file://
+      && !isFileURI(wasmBinaryFile)
+      ) {
+    return fetch(wasmBinaryFile, { credentials: 'same-origin' }).then(function(response) {
+      if (!response['ok']) {
+        throw "failed to load wasm binary file at '" + wasmBinaryFile + "'";
+      }
+      return response['arrayBuffer']();
+    }).catch(function () {
+      return getBinary();
+    });
+  }
+  // Otherwise, getBinary should be able to get it synchronously
+  return new Promise(function(resolve, reject) {
+    resolve(getBinary());
+  });
+}
+
+
+
+// Create the wasm instance.
+// Receives the wasm imports, returns the exports.
+function createWasm() {
+  // prepare imports
+  var info = {
+    'env': asmLibraryArg,
+    'wasi_snapshot_preview1': asmLibraryArg
+  };
+  // Load the wasm module and create an instance of using native support in the JS engine.
+  // handle a generated wasm instance, receiving its exports and
+  // performing other necessary setup
+  /** @param {WebAssembly.Module=} module*/
+  function receiveInstance(instance, module) {
+    var exports = instance.exports;
+    Module['asm'] = exports;
+    removeRunDependency('wasm-instantiate');
+  }
+  // we can't run yet (except in a pthread, where we have a custom sync instantiator)
+  addRunDependency('wasm-instantiate');
+
+
+  // Async compilation can be confusing when an error on the page overwrites Module
+  // (for example, if the order of elements is wrong, and the one defining Module is
+  // later), so we save Module and check it later.
+  var trueModule = Module;
+  function receiveInstantiatedSource(output) {
+    // 'output' is a WebAssemblyInstantiatedSource object which has both the module and instance.
+    // receiveInstance() will swap in the exports (to Module.asm) so they can be called
+    assert(Module === trueModule, 'the Module object should not be replaced during async compilation - perhaps the order of HTML elements is wrong?');
+    trueModule = null;
+    // TODO: Due to Closure regression https://github.com/google/closure-compiler/issues/3193, the above line no longer optimizes out down to the following line.
+    // When the regression is fixed, can restore the above USE_PTHREADS-enabled path.
+    receiveInstance(output['instance']);
+  }
+
+
+  function instantiateArrayBuffer(receiver) {
+    return getBinaryPromise().then(function(binary) {
+      return WebAssembly.instantiate(binary, info);
+    }).then(receiver, function(reason) {
+      err('failed to asynchronously prepare wasm: ' + reason);
+
+
+      abort(reason);
+    });
+  }
+
+  // Prefer streaming instantiation if available.
+  function instantiateAsync() {
+    if (!wasmBinary &&
+        typeof WebAssembly.instantiateStreaming === 'function' &&
+        !isDataURI(wasmBinaryFile) &&
+        // Don't use streaming for file:// delivered objects in a webview, fetch them synchronously.
+        !isFileURI(wasmBinaryFile) &&
+        typeof fetch === 'function') {
+      fetch(wasmBinaryFile, { credentials: 'same-origin' }).then(function (response) {
+        var result = WebAssembly.instantiateStreaming(response, info);
+        return result.then(receiveInstantiatedSource, function(reason) {
+            // We expect the most common failure cause to be a bad MIME type for the binary,
+            // in which case falling back to ArrayBuffer instantiation should work.
+            err('wasm streaming compile failed: ' + reason);
+            err('falling back to ArrayBuffer instantiation');
+            return instantiateArrayBuffer(receiveInstantiatedSource);
+          });
+      });
+    } else {
+      return instantiateArrayBuffer(receiveInstantiatedSource);
+    }
+  }
+  // User shell pages can write their own Module.instantiateWasm = function(imports, successCallback) callback
+  // to manually instantiate the Wasm module themselves. This allows pages to run the instantiation parallel
+  // to any other async startup actions they are performing.
+  if (Module['instantiateWasm']) {
+    try {
+      var exports = Module['instantiateWasm'](info, receiveInstance);
+      return exports;
+    } catch(e) {
+      err('Module.instantiateWasm callback failed with error: ' + e);
+      return false;
+    }
+  }
+
+  instantiateAsync();
+  return {}; // no exports yet; we'll fill them in later
+}
+
+
+// Globals used by JS i64 conversions
+var tempDouble;
+var tempI64;
+
 // === Body ===
 
-var ASM_CONSTS = [];
-
-
-
-
-STATIC_BASE = 8;
-
-STATICTOP = STATIC_BASE + 77840;
-  /* global initializers */  __ATINIT__.push();
-  
-
-/* memory initializer */ allocate([108,210,0,0,118,210,0,0,149,210,0,0,194,210,0,0,255,210,0,0,42,211,0,0,99,211,0,0,145,211,0,0,188,211,0,0,221,211,0,0,252,211,0,0,0,0,0,0,0,0,0,0,221,248,0,0,2,0,0,0,245,248,0,0,3,0,0,0,133,216,0,0,4,0,0,0,164,220,0,0,10,0,0,0,65,0,1,0,8,0,0,0,58,0,1,0,9,0,0,0,72,0,1,0,11,0,0,0,167,216,0,0,12,0,0,0,174,216,0,0,13,0,0,0,78,0,1,0,6,0,0,0,181,216,0,0,14,0,0,0,31,255,0,0,15,0,0,0,6,255,0,0,16,0,0,0,44,255,0,0,17,0,0,0,30,14,1,0,19,0,0,0,187,216,0,0,21,0,0,0,192,216,0,0,255,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,4,0,0,0,5,0,0,0,6,0,0,0,7,0,0,0,8,0,0,0,9,0,0,0,10,0,0,0,11,0,0,0,12,0,0,0,13,0,0,0,14,0,0,0,15,0,0,0,16,0,0,0,17,0,0,0,18,0,0,0,19,0,0,0,20,0,0,0,21,0,0,0,22,0,0,0,23,0,0,0,24,0,0,0,25,0,0,0,26,0,0,0,27,0,0,0,28,0,0,0,29,0,0,0,30,0,0,0,31,0,0,0,32,0,0,0,33,0,0,0,33,0,0,0,35,0,0,0,36,0,0,0,37,0,0,0,38,0,0,0,39,0,0,0,40,0,0,0,41,0,0,0,42,0,0,0,43,0,0,0,44,0,0,0,45,0,0,0,46,0,0,0,47,0,0,0,48,0,0,0,49,0,0,0,50,0,0,0,51,0,0,0,52,0,0,0,53,0,0,0,54,0,0,0,55,0,0,0,56,0,0,0,57,0,0,0,58,0,0,0,59,0,0,0,60,0,0,0,61,0,0,0,62,0,0,0,63,0,0,0,64,0,0,0,65,0,0,0,66,0,0,0,67,0,0,0,68,0,0,0,69,0,0,0,70,0,0,0,71,0,0,0,72,0,0,0,73,0,0,0,74,0,0,0,75,0,0,0,34,0,0,0,167,234,0,0,172,234,0,0,178,234,0,0,189,234,0,0,203,234,0,0,218,234,0,0,230,234,0,0,244,234,0,0,255,234,0,0,14,235,0,0,28,235,0,0,42,235,0,0,54,235,0,0,68,235,0,0,83,235,0,0,98,235,0,0,110,235,0,0,123,235,0,0,137,235,0,0,150,235,0,0,163,235,0,0,176,235,0,0,190,235,0,0,203,235,0,0,216,235,0,0,230,235,0,0,241,235,0,0,252,235,0,0,12,236,0,0,29,236,0,0,47,236,0,0,62,236,0,0,76,236,0,0,90,236,0,0,103,236,0,0,115,236,0,0,128,236,0,0,142,236,0,0,154,236,0,0,165,236,0,0,177,236,0,0,189,236,0,0,205,236,0,0,220,236,0,0,235,236,0,0,251,236,0,0,9,237,0,0,23,237,0,0,35,237,0,0,51,237,0,0,67,237,0,0,87,237,0,0,99,237,0,0,104,237,0,0,110,237,0,0,116,237,0,0,126,237,0,0,132,237,0,0,139,237,0,0,148,237,0,0,155,237,0,0,161,237,0,0,170,237,0,0,178,237,0,0,186,237,0,0,199,237,0,0,211,237,0,0,220,237,0,0,230,237,0,0,242,237,0,0,249,237,0,0,1,238,0,0,6,238,0,0,11,238,0,0,15,238,0,0,20,238,0,0,25,238,0,0,30,238,0,0,35,238,0,0,42,238,0,0,48,238,0,0,55,238,0,0,63,238,0,0,69,238,0,0,75,238,0,0,81,238,0,0,87,238,0,0,94,238,0,0,101,238,0,0,109,238,0,0,117,238,0,0,126,238,0,0,133,238,0,0,141,238,0,0,153,238,0,0,161,238,0,0,169,238,0,0,177,238,0,0,189,238,0,0,195,238,0,0,202,238,0,0,210,238,0,0,218,238,0,0,230,238,0,0,241,238,0,0,254,238,0,0,10,239,0,0,23,239,0,0,36,239,0,0,44,239,0,0,57,239,0,0,70,239,0,0,85,239,0,0,103,239,0,0,119,239,0,0,134,239,0,0,142,239,0,0,146,239,0,0,150,239,0,0,154,239,0,0,158,239,0,0,162,239,0,0,166,239,0,0,170,239,0,0,174,239,0,0,178,239,0,0,182,239,0,0,186,239,0,0,190,239,0,0,194,239,0,0,206,239,0,0,210,239,0,0,214,239,0,0,226,239,0,0,230,239,0,0,234,239,0,0,238,239,0,0,242,239,0,0,246,239,0,0,250,239,0,0,254,239,0,0,2,240,0,0,6,240,0,0,10,240,0,0,15,240,0,0,23,240,0,0,31,240,0,0,35,240,0,0,48,240,0,0,58,240,0,0,67,240,0,0,70,240,0,0,79,240,0,0,88,240,0,0,94,240,0,0,99,240,0,0,103,240,0,0,116,240,0,0,121,240,0,0,132,240,0,0,145,240,0,0,159,240,0,0,175,240,0,0,179,240,0,0,187,240,0,0,192,240,0,0,203,240,0,0,214,240,0,0,224,240,0,0,234,240,0,0,244,240,0,0,254,240,0,0,2,241,0,0,8,241,0,0,14,241,0,0,20,241,0,0,25,241,0,0,36,241,0,0,40,241,0,0,43,241,0,0,52,241,0,0,56,241,0,0,66,241,0,0,76,241,0,0,87,241,0,0,102,241,0,0,116,241,0,0,126,241,0,0,139,241,0,0,142,241,0,0,152,241,0,0,166,241,0,0,171,241,0,0,176,241,0,0,184,241,0,0,187,241,0,0,190,241,0,0,194,241,0,0,199,241,0,0,203,241,0,0,207,241,0,0,212,241,0,0,217,241,0,0,222,241,0,0,227,241,0,0,232,241,0,0,237,241,0,0,241,241,0,0,245,241,0,0,249,241,0,0,253,241,0,0,1,242,0,0,5,242,0,0,9,242,0,0,13,242,0,0,27,242,0,0,32,242,0,0,35,242,0,0,43,242,0,0,52,242,0,0,60,242,0,0,67,242,0,0,79,242,0,0,87,242,0,0,99,242,0,0,115,242,0,0,131,242,0,0,143,242,0,0,152,242,0,0,157,242,0,0,168,242,0,0,180,242,0,0,189,242,0,0,194,242,0,0,205,242,0,0,217,242,0,0,229,242,0,0,233,242,0,0,237,242,0,0,247,242,0,0,253,242,0,0,8,243,0,0,17,243,0,0,25,243,0,0,36,243,0,0,44,243,0,0,51,243,0,0,62,243,0,0,76,243,0,0,80,243,0,0,88,243,0,0,95,243,0,0,103,243,0,0,122,243,0,0,137,243,0,0,150,243,0,0,169,243,0,0,191,243,0,0,195,243,0,0,201,243,0,0,208,243,0,0,221,243,0,0,225,243,0,0,233,243,0,0,241,243,0,0,250,243,0,0,2,244,0,0,10,244,0,0,100,0,1,0,18,244,0,0,23,244,0,0,33,244,0,0,40,244,0,0,50,244,0,0,61,244,0,0,72,244,0,0,78,244,0,0,89,244,0,0,95,244,0,0,107,244,0,0,122,244,0,0,131,244,0,0,144,244,0,0,155,244,0,0,167,244,0,0,179,244,0,0,195,244,0,0,205,244,0,0,210,244,0,0,221,244,0,0,228,244,0,0,234,244,0,0,244,244,0,0,255,244,0,0,10,245,0,0,23,245,0,0,33,245,0,0,40,245,0,0,47,245,0,0,56,245,0,0,64,245,0,0,69,245,0,0,72,245,0,0,77,245,0,0,83,245,0,0,0,0,0,0,244,39,1,0,0,0,0,0,0,0,0,0,0,0,0,0,244,39,1,0,0,0,0,0,0,0,0,0,0,0,0,0,244,39,1,0,0,0,0,0,0,0,0,0,0,0,0,0,244,39,1,0,0,0,0,0,0,0,0,0,0,0,0,0,244,39,1,0,0,0,0,0,0,0,0,0,0,0,0,0,244,39,1,0,0,0,0,0,0,0,0,0,0,0,0,0,244,39,1,0,0,0,0,0,0,0,0,0,0,0,0,0,244,39,1,0,0,0,0,0,0,0,0,0,0,0,0,0,195,248,0,0,20,1,0,0,20,1,0,0,6,0,0,0,201,248,0,0,17,1,0,0,17,1,0,0,0,0,0,0,206,248,0,0,33,1,0,0,33,1,0,0,1,0,0,0,210,248,0,0,13,1,0,0,13,1,0,0,0,0,0,0,100,14,1,0,14,1,0,0,14,1,0,0,1,0,0,0,27,242,0,0,15,1,0,0,15,1,0,0,0,0,0,0,217,248,0,0,38,1,0,0,38,1,0,0,4,0,0,0,221,248,0,0,35,1,0,0,35,1,0,0,1,0,0,0,227,248,0,0,32,1,0,0,32,1,0,0,1,0,0,0,232,248,0,0,16,1,0,0,16,1,0,0,10,0,0,0,238,248,0,0,12,1,0,0,43,1,0,0,6,0,0,0,245,248,0,0,34,1,0,0,34,1,0,0,1,0,0,0,250,248,0,0,9,1,0,0,42,1,0,0,10,0,0,0,0,249,0,0,7,1,0,0,40,1,0,0,10,0,0,0,7,249,0,0,29,1,0,0,29,1,0,0,6,0,0,0,14,249,0,0,4,1,0,0,4,1,0,0,7,0,0,0,18,249,0,0,36,1,0,0,36,1,0,0,10,0,0,0,32,242,0,0,25,1,0,0,25,1,0,0,0,0,0,0,22,249,0,0,30,1,0,0,30,1,0,0,4,0,0,0,28,249,0,0,10,1,0,0,10,1,0,0,10,0,0,0,32,249,0,0,11,1,0,0,11,1,0,0,7,0,0,0,38,249,0,0,37,1,0,0,37,1,0,0,10,0,0,0,41,249,0,0,24,1,0,0,24,1,0,0,10,0,0,0,44,249,0,0,19,1,0,0,19,1,0,0,10,0,0,0,49,249,0,0,23,1,0,0,23,1,0,0,1,0,0,0,55,249,0,0,6,1,0,0,39,1,0,0,10,0,0,0,58,249,0,0,18,1,0,0,18,1,0,0,10,0,0,0,63,249,0,0,22,1,0,0,22,1,0,0,1,0,0,0,68,249,0,0,21,1,0,0,21,1,0,0,6,0,0,0,73,249,0,0,31,1,0,0,31,1,0,0,4,0,0,0,79,249,0,0,3,1,0,0,3,1,0,0,10,0,0,0,94,14,1,0,5,1,0,0,5,1,0,0,0,0,0,0,86,249,0,0,47,1,0,0,47,1,0,0,1,0,0,0,95,249,0,0,48,1,0,0,48,1,0,0,1,0,0,0,104,249,0,0,49,1,0,0,49,1,0,0,1,0,0,0,117,249,0,0,46,1,0,0,46,1,0,0,1,0,0,0,121,249,0,0,44,1,0,0,44,1,0,0,7,0,0,0,127,249,0,0,45,1,0,0,45,1,0,0,1,0,0,0,244,39,1,0,0,0,0,0,0,0,0,0,0,0,0,0,31,11,1,0,2,1,0,0,2,1,0,0,9,0,0,0,244,39,1,0,0,0,0,0,0,0,0,0,0,0,0,0,244,39,1,0,0,0,0,0,0,0,0,0,0,0,0,0,133,249,0,0,8,1,0,0,41,1,0,0,10,0,0,0,35,0,0,0,248,9,0,0,5,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,3,0,0,0,253,39,1,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,224,37,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,108,11,0,0,9,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,3,0,0,0,5,40,1,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,236,11,0,0,5,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,3,0,0,0,13,44,1,0,0,4,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,236,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,0,0,0,100,0,0,0,232,3,0,0,16,39,0,0,160,134,1,0,64,66,15,0,128,150,152,0,0,225,245,5,95,112,137,0,255,9,47,15,253,252,126,0,160,9,253,252,84,27,100,34,171,35,250,20,253,252,17,33,17,33,253,252,253,252,209,34,249,24,25,19,250,29,250,29,253,252,253,252,250,29,13,12,132,10,253,252,253,252,253,252,253,252,181,0,249,24,253,252,230,255,253,252,253,252,131,21,7,11,253,252,253,252,12,22,253,252,253,252,253,252,253,252,253,252,253,252,253,252,130,33,130,33,90,0,194,16,215,255,107,30,77,31,9,26,253,252,233,23,115,2,98,3,105,3,115,3,193,1,253,252,235,0,243,33,130,33,253,252,246,0,253,252,185,4,253,252,123,1,253,252,253,252,101,0,37,0,253,252,36,0,62,35,253,252,117,0,117,11,7,0,87,0,13,0,66,0,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,14,0,92,0,253,252,49,0,51,0,253,252,253,252,253,252,253,252,253,252,31,0,53,0,141,0,133,1,144,1,17,33,75,1,52,17,115,1,253,252,175,0,253,252,213,0,253,252,253,252,51,0,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,45,0,74,0,83,0,100,0,253,252,253,252,253,252,253,252,253,252,253,252,129,0,187,0,253,252,204,0,253,252,214,0,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,13,0,162,13,26,1,123,1,109,0,20,1,139,1,25,0,48,1,50,0,109,0,17,33,17,33,86,1,253,252,253,252,167,1,121,1,54,0,95,0,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,113,24,253,252,253,252,19,1,253,252,253,252,253,252,246,0,151,1,253,252,253,252,43,1,130,33,130,33,130,33,130,33,253,252,117,11,110,1,253,252,253,252,68,1,70,1,253,252,253,252,253,252,167,18,253,252,250,29,250,29,253,252,253,252,139,19,17,33,253,252,253,252,79,1,166,17,253,252,26,2,146,1,106,1,54,28,194,16,83,1,246,0,185,4,72,1,103,1,253,252,17,33,72,1,89,1,94,0,106,0,253,252,110,1,100,1,106,0,253,252,186,1,24,36,99,1,39,2,133,2,137,2,246,2,253,252,253,252,253,252,253,252,169,3,253,252,253,252,253,252,253,252,253,252,253,252,125,1,44,3,253,252,253,252,179,3,253,252,187,3,253,252,201,3,253,252,78,2,174,1,178,1,253,252,253,252,253,252,253,252,253,19,17,33,17,33,17,33,17,33,54,28,17,33,17,33,253,252,253,252,190,31,253,252,194,16,118,26,113,1,190,31,130,33,130,33,130,33,130,33,130,33,130,33,130,33,130,33,130,33,130,33,130,33,130,33,130,33,130,33,130,33,130,33,130,33,130,33,130,33,130,33,130,33,130,33,130,33,130,33,130,33,130,33,235,8,250,29,47,37,253,252,253,252,251,40,253,252,253,252,253,252,243,33,243,33,253,252,156,1,253,252,123,1,253,252,9,3,253,252,253,252,253,252,253,252,253,252,128,37,250,29,209,37,162,13,17,33,253,252,253,252,245,1,250,1,67,0,253,252,49,14,249,1,130,33,34,38,250,29,115,38,130,33,130,33,79,15,55,0,55,0,103,0,196,38,250,29,21,39,253,252,204,1,253,252,125,1,151,1,47,32,2,2,253,252,253,252,253,252,253,252,130,33,227,26,253,252,253,252,220,30,253,252,72,1,136,1,253,252,253,252,72,1,253,252,162,1,163,1,253,252,71,0,253,252,253,252,249,24,193,15,184,1,34,38,115,38,130,33,185,4,72,1,253,252,253,252,110,20,171,1,123,1,253,252,253,252,197,27,253,252,253,252,77,31,253,252,253,252,253,252,9,3,36,0,24,36,253,252,24,36,102,39,250,29,183,39,194,1,253,252,253,252,253,252,253,252,132,4,253,252,253,252,253,252,253,252,50,4,253,252,253,252,253,252,253,252,253,252,182,1,130,33,253,252,190,1,23,2,195,1,28,2,253,252,253,252,14,2,166,17,253,252,253,252,253,252,125,1,253,252,181,1,253,252,253,252,253,252,253,252,253,252,253,252,253,252,130,33,130,33,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,33,0,130,33,253,252,199,1,202,1,253,252,72,1,24,36,203,1,253,252,253,252,253,252,226,1,111,10,253,252,253,252,146,1,240,36,240,36,240,36,240,36,40,4,40,4,15,41,249,12,240,36,240,36,248,11,248,11,85,2,85,2,119,12,40,4,40,4,224,2,224,2,158,2,52,0,52,0,146,1,146,1,146,1,144,12,239,22,19,13,96,23,253,252,53,0,253,252,72,1,208,1,253,252,44,2,253,252,253,252,138,11,253,252,253,252,160,8,33,0,33,0,253,252,236,9,253,252,117,11,253,252,253,252,246,0,17,33,162,13,176,1,229,0,253,252,53,0,72,1,53,0,77,2,71,0,148,3,129,25,253,252,160,32,104,2,253,252,150,0,253,252,242,10,125,22,1,10,72,1,244,0,13,1,104,2,253,252,253,252,253,252,253,252,139,0,152,0,72,1,107,0,123,0,17,33,249,24,253,252,125,1,122,2,69,0,253,252,253,252,130,33,110,1,253,252,167,28,70,1,253,252,253,252,253,252,253,252,227,26,220,30,253,252,253,252,4,2,253,252,117,11,18,1,185,4,72,1,106,0,113,1,253,252,176,1,229,0,72,1,66,1,71,1,253,252,253,252,132,4,231,1,253,252,8,2,72,1,253,252,72,1,61,0,50,4,253,252,253,252,253,252,50,4,253,252,253,252,142,2,253,252,253,252,253,252,13,2,166,17,253,252,253,252,253,252,146,1,146,1,253,252,68,3,53,18,253,252,253,252,21,2,24,29,253,252,253,252,24,36,243,33,130,33,49,2,243,33,243,33,253,252,156,1,32,2,50,2,243,33,243,33,253,252,253,252,156,1,253,252,66,0,101,0,53,18,166,17,130,33,33,0,253,252,246,0,149,2,253,252,253,252,253,252,50,4,162,13,246,0,253,252,199,1,253,252,93,2,253,252,80,16,155,2,253,252,17,33,161,2,253,252,130,33,130,33,21,1,130,33,130,33,179,2,53,18,53,18,130,0,55,0,253,252,253,252,137,29,192,14,253,252,130,33,253,252,253,252,62,2,253,252,253,252,253,252,200,0,72,1,182,2,65,2,146,4,253,252,63,2,66,2,53,18,166,17,253,252,253,252,67,2,68,2,253,252,81,2,253,252,82,2,81,2,253,252,86,2,72,1,103,2,102,2,133,36,253,252,110,2,112,2,253,252,200,2,130,33,117,2,253,252,117,11,130,33,253,252,117,11,253,252,117,11,253,252,253,252,243,33,253,252,117,11,253,252,117,11,253,252,253,252,253,252,237,2,121,2,117,11,166,17,162,13,253,252,253,252,72,1,243,2,253,252,148,3,242,36,109,0,253,252,253,252,53,18,253,252,253,252,109,0,253,252,130,33,253,252,248,2,249,2,253,252,253,252,138,0,253,252,220,30,253,252,129,2,182,2,46,2,253,252,253,252,236,2,4,3,145,2,50,4,253,252,142,2,253,252,142,2,253,252,142,2,253,252,253,252,253,252,167,2,253,252,50,4,253,252,238,2,22,3,50,4,253,252,142,2,253,252,253,252,159,2,117,11,253,252,117,11,253,252,253,252,164,2,32,3,253,252,253,252,162,13,250,2,253,252,40,3,133,2,137,2,162,13,253,252,49,14,253,252,253,252,53,18,253,252,253,252,253,252,182,2,129,2,182,2,171,2,253,252,237,0,253,252,253,252,253,252,253,252,81,2,175,2,81,2,81,2,253,252,177,2,178,2,253,252,8,40,81,2,253,252,181,2,81,2,253,252,253,252,33,3,9,3,89,40,250,29,170,40,250,1,150,0,49,3,129,2,182,2,236,2,253,252,253,252,142,2,253,252,253,252,253,252,50,4,253,252,142,2,253,252,183,2,185,2,253,252,142,2,253,252,253,252,253,252,82,0,229,0,72,1,119,0,121,0,253,252,253,252,253,252,129,2,253,252,81,2,81,2,188,2,81,2,81,2,128,0,253,252,253,252,142,2,253,252,253,252,253,252,81,2,253,252,2,0,170,1,27,0,16,0,17,0,62,0,83,0,20,0,132,1,248,0,15,0,7,0,36,1,28,0,14,0,5,0,6,0,80,1,76,0,150,1,36,1,16,0,17,0,13,0,4,0,20,0,208,0,48,0,28,0,82,2,108,1,159,1,65,0,202,1,22,0,24,1,52,0,31,1,110,0,28,1,107,1,90,2,109,1,80,1,97,2,112,1,16,0,17,0,50,0,51,0,20,0,100,2,130,1,159,2,107,2,50,0,51,0,210,1,54,0,2,0,65,0,4,0,52,0,15,0,131,1,155,2,144,1,65,0,244,1,248,2,167,1,67,2,68,2,170,1,250,2,153,1,143,1,26,0,145,1,25,0,50,0,174,2,27,0,174,2,219,1,16,0,76,0,154,1,74,3,142,2,29,0,93,3,26,0,16,0,17,0,88,0,13,1,20,0,16,0,140,0,22,0,88,0,143,0,48,1,90,0,9,0,10,0,133,0,37,0,38,0,98,0,15,0,79,0,65,0,107,1,90,0,109,1,105,0,15,2,112,1,25,0,188,1,10,0,71,0,48,0,16,0,0,0,15,0,25,0,28,0,116,0,119,0,25,0,88,0,212,1,16,0,129,1,16,0,131,1,90,0,90,0,116,0,135,0,136,0,16,0,55,0,213,1,70,3,25,0,136,0,143,1,137,0,145,1,116,0,121,0,25,0,18,0,90,0,20,0,152,1,77,1,154,1,88,0,165,3,25,0,116,0,116,0,17,0,18,0,108,0,139,0,88,0,158,3,137,0,11,3,88,0,98,0,25,0,126,0,127,0,128,0,136,0,90,0,116,0,133,0,155,2,137,0,111,0,88,0,159,2,139,0,137,0,139,0,113,2,187,1,188,1,179,1,142,0,143,0,133,0,224,1,121,2,125,3,123,3,174,2,109,0,137,0,203,2,224,1,77,2,136,0,142,0,143,0,158,1,143,0,128,2,210,1,88,0,211,1,136,0,213,1,139,0,135,0,136,0,142,0,143,0,26,0,77,3,233,0,31,1,226,0,137,0,137,0,116,0,157,3,233,0,136,0,143,0,15,1,252,0,137,0,254,0,255,0,137,0,137,0,247,0,248,0,81,3,13,1,143,0,202,0,142,0,143,0,255,0,89,3,89,3,208,0,252,0,93,3,254,0,137,0,142,0,143,0,142,0,143,0,136,0,15,1,137,0,147,2,148,2,142,0,143,0,65,3,15,1,75,1,88,0,137,0,15,2,139,0,80,1,139,0,233,0,252,0,189,2,254,0,182,2,127,2,128,2,88,0,137,0,196,2,139,0,88,0,58,0,59,0,120,0,2,0,31,1,4,0,5,0,6,0,88,0,88,0,9,0,10,0,209,0,210,0,13,0,89,2,15,0,16,0,17,0,77,1,129,1,20,0,116,1,117,1,88,0,78,1,15,1,139,0,209,0,210,0,136,0,143,0,12,1,86,2,23,1,24,1,252,0,165,3,254,0,28,1,133,0,90,0,135,0,136,0,55,0,2,1,7,1,136,0,65,1,48,0,211,2,78,1,13,1,52,0,25,0,135,0,136,0,136,0,108,1,25,0,17,1,2,1,3,1,62,0,21,1,233,2,90,0,116,0,75,1,108,1,77,3,135,0,136,0,80,1,90,0,139,0,248,2,76,0,250,2,20,1,130,1,137,0,89,3,183,2,109,1,65,1,93,3,143,0,178,3,51,0,70,1,130,1,116,0,55,0,144,1,142,0,143,0,116,0,137,1,116,0,116,0,90,0,122,2,153,1,55,0,144,1,131,1,149,1,150,1,25,0,109,0,137,2,111,0,208,1,153,1,210,1,77,1,67,3,137,0,137,0,145,1,174,2,26,0,37,0,38,0,66,1,67,1,68,1,69,1,154,1,71,1,72,1,184,1,26,0,20,0,167,1,58,0,59,0,43,3,178,1,179,1,66,1,67,1,68,1,69,1,116,0,185,1,184,1,142,0,210,2,116,0,182,2,115,2,160,1,70,3,71,3,65,3,210,2,165,3,90,0,149,1,150,1,212,1,188,1,91,0,26,0,137,0,199,1,137,0,140,0,137,0,137,0,143,0,212,1,140,0,133,0,15,2,143,0,143,0,140,1,71,0,208,1,116,0,210,1,88,0,116,0,140,0,148,1,213,1,67,3,88,0,230,1,133,1,141,0,233,1,88,0,235,1,134,0,110,0,137,0,199,0,113,0,114,0,108,3,55,0,185,1,137,0,123,3,71,0,125,3,209,0,210,0,71,0,137,0,194,1,172,1,97,0,61,0,88,0,176,1,64,0,65,0,242,2,15,0,181,1,8,2,13,0,88,0,16,0,133,0,63,0,135,0,136,0,39,2,191,1,139,0,15,0,135,0,136,0,140,0,133,0,157,3,135,0,136,0,15,2,51,0,139,0,53,0,54,0,55,0,56,0,57,2,49,3,252,0,110,0,254,0,255,0,113,0,114,0,2,1,3,1,90,0,137,0,137,0,7,1,135,0,136,0,111,0,112,0,12,1,13,1,137,0,133,0,116,0,135,0,136,0,82,2,20,1,139,0,240,1,63,2,134,0,137,0,66,2,67,2,68,2,55,2,116,0,31,1,75,2,137,0,97,2,151,3,51,0,63,2,137,0,63,0,66,2,51,0,137,0,83,2,107,2,137,0,137,0,152,3,116,0,89,2,90,2,137,0,92,2,87,2,15,0,81,2,14,2,83,2,111,2,51,0,100,2,53,0,54,0,55,0,56,0,65,1,66,1,67,1,68,1,69,1,70,1,71,1,72,1,111,2,137,0,75,1,88,0,77,1,78,1,142,2,80,1,89,2,122,2,198,2,18,0,75,2,182,2,51,3,183,2,88,0,153,2,186,2,187,2,57,3,127,2,55,2,90,0,192,2,193,2,15,0,134,0,61,0,90,0,63,2,64,0,65,0,66,2,137,0,108,1,134,0,141,3,174,2,56,0,57,0,58,0,59,0,116,1,117,1,71,0,150,3,137,0,152,3,116,0,135,0,136,0,115,2,15,0,85,2,116,0,118,0,130,1,14,0,132,1,133,1,76,2,141,0,135,0,136,0,15,0,62,0,140,1,64,0,65,0,137,0,144,1,137,0,91,0,137,2,148,1,137,0,76,2,111,0,112,0,153,1,182,2,51,0,15,0,53,0,54,0,55,0,56,0,137,0,205,2,203,2,137,0,140,0,137,0,137,0,110,2,212,2,142,0,124,0,125,0,126,0,127,0,128,0,216,2,15,0,136,2,219,2,137,0,137,0,134,0,88,0,110,2,185,1,121,0,88,0,111,0,112,0,233,2,71,0,31,3,151,2,194,1,51,0,92,0,53,0,54,0,55,0,56,0,137,0,242,2,99,0,11,3,167,2,86,0,87,0,208,1,137,0,210,1,137,0,212,1,175,2,15,0,205,2,137,0,134,0,2,3,3,3,15,0,5,3,212,2,7,3,8,3,15,0,15,0,123,0,137,0,13,3,135,0,136,0,16,3,17,3,135,0,136,0,92,0,15,0,200,2,201,2,240,1,134,0,14,3,233,2,124,0,125,0,126,0,127,0,128,0,51,0,121,0,53,0,54,0,55,0,56,0,55,0,218,2,71,0,137,0,51,0,134,0,53,0,54,0,55,0,56,0,15,0,15,0,55,0,230,2,231,2,137,0,15,2,86,0,87,0,137,0,237,2,137,0,137,0,50,3,221,2,137,0,65,3,15,0,2,0,139,0,4,0,139,0,137,0,185,1,247,2,9,0,10,0,254,2,255,2,6,0,221,2,15,0,16,0,17,0,66,2,92,0,20,0,233,1,13,0,235,1,159,2,98,0,99,0,162,2,123,0,124,0,125,0,126,0,127,0,128,0,88,0,154,3,51,3,147,2,199,2,174,2,128,3,158,3,57,3,62,0,153,3,64,0,65,0,88,0,48,0,246,1,123,0,76,2,77,2,126,0,7,0,42,3,51,0,155,2,53,0,54,0,55,0,56,0,62,0,46,3,89,3,88,0,139,0,54,3,133,3,134,3,135,3,136,3,49,3,138,3,139,3,151,3,198,0,142,3,255,255,144,3,145,3,135,0,136,0,255,255,255,255,110,2,151,3,255,255,153,3,154,3,178,3,255,255,111,0,112,0,135,0,136,0,255,255,92,0,63,0,64,0,65,0,152,3,255,255,98,0,99,0,63,0,64,0,65,0,255,255,109,0,255,255,111,0,135,0,136,0,255,255,63,0,64,0,65,0,255,255,255,255,255,255,186,3,187,3,188,3,189,3,190,3,255,255,114,3,123,0,116,3,255,255,126,0,119,3,198,3,255,255,255,255,51,0,255,255,53,0,54,0,55,0,56,0,167,2,255,255,255,255,255,255,111,0,112,0,143,0,255,255,175,2,255,255,255,255,111,0,112,0,255,255,255,255,182,2,183,2,255,255,255,255,186,2,187,2,111,0,112,0,255,255,255,255,192,2,193,2,63,0,64,0,65,0,255,255,255,255,255,255,200,2,201,2,92,0,255,255,63,0,64,0,65,0,255,255,98,0,99,0,255,255,211,2,63,0,64,0,65,0,255,255,16,0,17,0,218,2,255,255,20,0,221,2,255,255,77,3,199,0,79,3,63,0,64,0,65,0,83,3,230,2,231,2,255,255,123,0,209,0,210,0,126,0,237,2,255,255,93,3,255,255,95,3,111,0,112,0,255,255,45,0,46,0,255,255,255,255,139,0,50,0,51,0,111,0,112,0,254,2,255,2,41,1,255,255,255,255,255,255,111,0,112,0,62,0,63,0,49,1,255,255,255,255,52,1,255,255,54,1,14,3,56,1,255,255,58,1,111,0,112,0,255,255,252,0,255,255,254,0,255,0,255,255,255,255,2,1,3,1,255,255,255,255,31,3,7,1,255,255,255,255,255,255,255,255,12,1,13,1,255,255,255,255,255,255,42,3,43,3,255,255,20,1,255,255,255,255,255,255,255,255,50,3,161,3,255,255,255,255,54,3,165,3,255,255,167,3,255,255,255,255,255,255,255,255,172,3,51,0,255,255,53,0,54,0,55,0,56,0,255,255,255,255,2,3,3,3,71,0,5,3,255,255,7,3,8,3,255,255,255,255,255,255,255,255,13,3,255,255,194,3,16,3,17,3,255,255,86,0,87,0,65,1,66,1,67,1,68,1,69,1,70,1,71,1,72,1,255,255,255,255,75,1,255,255,77,1,255,255,92,0,80,1,255,255,255,255,108,3,255,255,98,0,99,0,255,255,255,255,114,3,255,255,116,3,255,255,255,255,119,3,255,255,255,255,255,255,121,0,122,0,123,0,124,0,125,0,126,0,127,0,128,0,255,255,255,255,108,1,255,255,123,0,255,255,255,255,126,0,255,255,255,255,116,1,117,1,255,255,255,255,51,0,255,255,53,0,54,0,55,0,56,0,151,3,255,255,255,255,255,255,130,1,255,255,132,1,133,1,51,0,255,255,53,0,54,0,55,0,56,0,140,1,255,255,255,255,255,255,144,1,255,255,255,255,255,255,148,1,255,255,255,255,255,255,255,255,153,1,255,255,255,255,255,255,238,0,239,0,240,0,241,0,92,0,40,0,41,0,42,0,43,0,44,0,98,0,255,255,255,255,255,255,252,0,255,255,254,0,255,0,92,0,255,255,133,3,134,3,135,3,136,3,98,0,138,3,139,3,255,255,185,1,142,3,255,255,144,3,145,3,255,255,255,255,255,255,255,255,194,1,255,255,255,255,255,255,2,0,255,255,4,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,13,0,255,255,255,255,212,1,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,186,3,187,3,188,3,189,3,190,3,255,255,255,255,255,255,255,255,255,255,240,1,255,255,198,3,255,255,48,0,255,255,255,255,255,255,255,255,255,255,75,1,255,255,255,255,255,255,255,255,80,1,81,1,82,1,83,1,84,1,85,1,86,1,87,1,88,1,89,1,90,1,91,1,92,1,93,1,94,1,95,1,96,1,97,1,98,1,99,1,100,1,101,1,102,1,103,1,104,1,105,1,106,1,255,255,108,1,255,255,255,255,255,255,255,255,255,255,255,255,255,255,116,1,117,1,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,130,1,255,255,111,0,255,255,255,255,2,0,255,255,4,0,255,255,255,255,255,255,255,255,142,1,255,255,144,1,255,255,146,1,147,1,255,255,255,255,255,255,255,255,255,255,153,1,255,255,255,255,255,255,76,2,77,2,255,255,160,1,255,255,255,255,255,255,255,255,255,255,166,1,167,1,255,255,255,255,170,1,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,48,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,189,1,255,255,110,2,255,255,255,255,255,255,255,255,255,255,255,255,255,255,199,1,255,255,255,255,202,1,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,212,1,255,255,255,255,255,255,255,255,255,255,255,255,51,0,199,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,2,0,231,1,4,0,5,0,6,0,7,0,255,255,255,255,255,255,255,255,255,255,13,0,255,255,255,255,111,0,255,255,255,255,255,255,167,2,255,255,255,255,255,255,255,255,255,255,254,1,255,1,175,2,255,255,255,255,255,255,255,255,255,255,255,255,255,255,183,2,9,2,255,255,186,2,187,2,255,255,255,255,255,255,255,255,192,2,193,2,255,255,48,0,255,255,255,255,255,255,52,0,200,2,201,2,255,255,7,1,255,255,255,255,255,255,255,255,12,1,13,1,255,255,211,2,255,255,255,255,255,255,255,255,255,255,255,255,218,2,255,255,255,255,221,2,255,255,76,0,255,255,255,255,255,255,255,255,255,255,255,255,230,2,231,2,255,255,255,255,255,255,255,255,255,255,237,2,2,0,255,255,4,0,5,0,6,0,255,255,255,255,255,255,255,255,255,255,255,255,13,0,255,255,199,0,255,255,255,255,254,2,255,2,255,255,255,255,111,0,255,255,255,255,65,1,255,255,255,255,89,2,255,255,70,1,255,255,255,255,255,255,255,255,255,255,255,255,77,1,255,255,255,255,80,1,255,255,255,255,255,255,255,255,255,255,255,255,255,255,48,0,255,255,255,255,31,3,52,0,255,255,255,255,255,255,255,255,118,2,255,255,255,255,121,2,255,255,42,3,43,3,255,255,255,255,127,2,128,2,255,255,255,255,255,255,255,255,255,255,255,255,54,3,255,255,76,0,255,255,255,255,7,1,255,255,255,255,255,255,255,255,12,1,13,1,255,255,255,255,255,255,238,0,239,0,240,0,132,1,255,255,255,255,255,255,255,255,255,255,255,255,255,255,140,1,255,255,255,255,255,255,255,255,255,255,255,255,255,255,148,1,255,255,199,0,111,0,255,255,255,255,255,255,255,255,255,255,255,255,179,2,255,255,255,255,255,255,183,2,184,2,255,255,186,2,187,2,255,255,108,3,255,255,255,255,192,2,193,2,255,255,114,3,255,255,116,3,65,1,255,255,119,3,255,255,202,2,70,1,255,255,255,255,185,1,255,255,255,255,255,255,77,1,255,255,255,255,255,255,255,255,194,1,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,224,2,225,2,255,255,227,2,228,2,255,255,255,255,255,255,151,3,255,255,255,255,7,1,236,2,255,255,255,255,239,2,12,1,13,1,255,255,75,1,255,255,255,255,255,255,255,255,80,1,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,31,1,199,0,240,1,255,255,255,255,255,255,132,1,255,255,255,255,255,255,255,255,255,255,255,255,255,255,140,1,255,255,255,255,20,3,255,255,255,255,255,255,24,3,148,1,255,255,255,255,255,255,255,255,255,255,31,3,255,255,255,255,255,255,255,255,255,255,65,1,255,255,255,255,255,255,255,255,70,1,255,255,255,255,255,255,255,255,255,255,255,255,77,1,78,1,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,59,3,255,255,255,255,185,1,255,255,255,255,255,255,255,255,67,3,7,1,255,255,255,255,194,1,160,1,12,1,13,1,255,255,255,255,255,255,166,1,167,1,255,255,255,255,170,1,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,31,1,255,255,255,255,255,255,255,255,255,255,77,2,255,255,255,255,255,255,255,255,255,255,132,1,255,255,255,255,255,255,255,255,255,255,255,255,199,1,140,1,255,255,202,1,255,255,255,255,240,1,255,255,255,255,148,1,255,255,255,255,255,255,255,255,255,255,65,1,255,255,255,255,255,255,255,255,70,1,255,255,255,255,255,255,255,255,255,255,255,255,77,1,78,1,255,255,255,255,255,255,231,1,255,255,255,255,255,255,255,255,255,255,255,255,255,255,151,3,255,255,255,255,255,255,255,255,255,255,185,1,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,194,1,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,9,2,255,255,255,255,208,1,255,255,210,1,255,255,255,255,255,255,255,255,255,255,167,2,255,255,255,255,255,255,255,255,132,1,255,255,255,255,175,2,255,255,255,255,255,255,255,255,140,1,255,255,255,255,183,2,255,255,255,255,255,255,255,255,148,1,77,2,255,255,240,1,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,200,2,201,2,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,211,2,255,255,255,255,255,255,255,255,255,255,255,255,218,2,255,255,255,255,255,255,15,2,255,255,255,255,185,1,255,255,255,255,255,255,255,255,230,2,231,2,255,255,255,255,194,1,255,255,89,2,237,2,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,208,1,255,255,210,1,255,255,255,255,255,255,254,2,255,2,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,118,2,255,255,255,255,121,2,255,255,255,255,255,255,255,255,255,255,127,2,128,2,255,255,255,255,255,255,167,2,240,1,255,255,255,255,255,255,77,2,255,255,255,255,175,2,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,42,3,43,3,255,255,255,255,255,255,255,255,255,255,255,255,50,3,255,255,255,255,255,255,54,3,15,2,200,2,201,2,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,211,2,255,255,255,255,179,2,255,255,255,255,255,255,218,2,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,230,2,231,2,255,255,255,255,255,255,255,255,255,255,237,2,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,108,3,255,255,254,2,255,2,255,255,255,255,114,3,255,255,116,3,77,2,167,2,119,3,255,255,255,255,255,255,255,255,255,255,255,255,175,2,236,2,255,255,255,255,239,2,255,255,255,255,182,2,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,200,2,201,2,255,255,42,3,43,3,255,255,0,0,255,255,255,255,255,255,255,255,211,2,255,255,255,255,255,255,54,3,20,3,255,255,218,2,13,0,14,0,15,0,16,0,17,0,18,0,255,255,20,0,255,255,255,255,255,255,230,2,231,2,26,0,27,0,255,255,255,255,255,255,237,2,255,255,255,255,255,255,255,255,255,255,37,0,38,0,255,255,40,0,41,0,42,0,43,0,44,0,255,255,255,255,255,255,254,2,255,2,167,2,255,255,255,255,255,255,255,255,255,255,255,255,67,3,175,2,255,255,255,255,255,255,255,255,108,3,14,3,182,2,255,255,255,255,255,255,114,3,255,255,116,3,255,255,255,255,119,3,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,200,2,201,2,255,255,255,255,255,255,88,0,255,255,255,255,255,255,42,3,43,3,211,2,255,255,255,255,255,255,255,255,255,255,50,3,218,2,255,255,255,255,54,3,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,230,2,231,2,255,255,255,255,255,255,255,255,255,255,237,2,255,255,255,255,255,255,255,255,255,255,51,0,52,0,255,255,255,255,55,0,255,255,255,255,133,0,134,0,255,255,136,0,254,2,255,2,139,0,140,0,255,255,142,0,143,0,69,0,70,0,71,0,72,0,73,0,74,0,75,0,76,0,77,0,14,3,255,255,80,0,81,0,255,255,108,3,84,0,85,0,86,0,87,0,255,255,114,3,255,255,116,3,255,255,255,255,119,3,255,255,255,255,255,255,98,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,42,3,43,3,255,255,255,255,255,255,255,255,255,255,255,255,50,3,255,255,255,255,255,255,54,3,119,0,120,0,121,0,122,0,123,0,124,0,125,0,126,0,127,0,128,0,255,255,130,0,131,0,255,255,255,255,255,255,255,255,255,255,255,255,138,0,139,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,108,3,255,255,255,255,255,255,255,255,255,255,114,3,255,255,116,3,0,0,1,0,119,3,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,255,255,255,255,255,255,255,255,255,255,255,255,19], "i8", ALLOC_NONE, Runtime.GLOBAL_BASE);
-/* memory initializer */ allocate([255,255,21,0,22,0,23,0,24,0,255,255,255,255,255,255,255,255,255,255,30,0,31,0,32,0,33,0,34,0,35,0,36,0,255,255,255,255,39,0,255,255,255,255,255,255,255,255,255,255,45,0,46,0,47,0,48,0,49,0,255,255,51,0,52,0,53,0,54,0,55,0,56,0,255,255,58,0,59,0,60,0,255,255,255,255,63,0,255,255,255,255,66,0,67,0,255,255,69,0,70,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,89,0,255,255,255,255,92,0,93,0,255,255,95,0,96,0,0,0,98,0,255,255,100,0,101,0,102,0,103,0,104,0,105,0,106,0,255,255,255,255,109,0,13,0,14,0,15,0,16,0,17,0,18,0,255,255,20,0,255,255,255,255,44,0,255,255,255,255,255,255,27,0,28,0,29,0,255,255,255,255,129,0,130,0,131,0,255,255,255,255,37,0,38,0,255,255,40,0,41,0,42,0,43,0,44,0,142,0,143,0,255,255,255,255,255,255,71,0,72,0,73,0,74,0,75,0,76,0,77,0,78,0,79,0,80,0,81,0,82,0,83,0,255,255,255,255,86,0,87,0,255,255,255,255,255,255,255,255,71,0,72,0,73,0,74,0,75,0,76,0,77,0,78,0,79,0,80,0,81,0,82,0,83,0,255,255,255,255,86,0,87,0,88,0,255,255,90,0,91,0,255,255,255,255,255,255,255,255,117,0,97,0,119,0,120,0,121,0,122,0,123,0,124,0,125,0,126,0,127,0,128,0,108,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,116,0,117,0,118,0,119,0,120,0,121,0,122,0,123,0,124,0,125,0,126,0,127,0,128,0,255,255,255,255,0,0,255,255,255,255,134,0,135,0,136,0,137,0,255,255,255,255,140,0,141,0,142,0,143,0,13,0,14,0,15,0,16,0,17,0,18,0,255,255,20,0,255,255,255,255,44,0,255,255,255,255,26,0,27,0,28,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,37,0,38,0,255,255,40,0,41,0,42,0,43,0,44,0,255,255,255,255,255,255,255,255,255,255,71,0,72,0,73,0,74,0,75,0,76,0,77,0,78,0,79,0,80,0,81,0,82,0,83,0,255,255,255,255,86,0,87,0,255,255,255,255,255,255,255,255,71,0,72,0,73,0,74,0,75,0,76,0,77,0,78,0,79,0,80,0,81,0,82,0,83,0,255,255,255,255,86,0,87,0,88,0,255,255,255,255,91,0,255,255,255,255,255,255,255,255,117,0,97,0,119,0,120,0,121,0,122,0,123,0,124,0,125,0,126,0,127,0,128,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,137,0,117,0,255,255,119,0,120,0,121,0,122,0,123,0,124,0,125,0,126,0,127,0,128,0,255,255,255,255,0,0,255,255,133,0,134,0,135,0,136,0,137,0,255,255,139,0,140,0,141,0,142,0,143,0,13,0,14,0,15,0,16,0,17,0,18,0,255,255,20,0,255,255,255,255,44,0,255,255,255,255,255,255,27,0,28,0,29,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,37,0,38,0,255,255,40,0,41,0,42,0,43,0,44,0,255,255,255,255,255,255,255,255,255,255,71,0,72,0,73,0,74,0,75,0,76,0,77,0,78,0,79,0,80,0,81,0,82,0,83,0,255,255,255,255,86,0,87,0,255,255,255,255,255,255,255,255,71,0,72,0,73,0,74,0,75,0,76,0,77,0,78,0,79,0,80,0,81,0,82,0,83,0,255,255,255,255,86,0,87,0,88,0,255,255,255,255,91,0,255,255,255,255,255,255,255,255,117,0,97,0,119,0,120,0,121,0,122,0,123,0,124,0,125,0,126,0,127,0,128,0,108,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,117,0,118,0,119,0,120,0,121,0,122,0,123,0,124,0,125,0,126,0,127,0,128,0,255,255,255,255,0,0,255,255,255,255,134,0,135,0,136,0,137,0,255,255,255,255,140,0,141,0,142,0,143,0,13,0,14,0,15,0,16,0,17,0,18,0,255,255,20,0,255,255,255,255,255,255,255,255,255,255,26,0,27,0,28,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,37,0,38,0,255,255,40,0,41,0,42,0,43,0,44,0,255,255,255,255,255,255,255,255,255,255,71,0,72,0,73,0,74,0,75,0,76,0,77,0,78,0,79,0,80,0,81,0,82,0,83,0,255,255,255,255,86,0,87,0,255,255,255,255,255,255,255,255,71,0,72,0,73,0,74,0,75,0,76,0,77,0,78,0,79,0,80,0,81,0,82,0,83,0,255,255,255,255,86,0,87,0,88,0,255,255,255,255,91,0,255,255,255,255,255,255,255,255,117,0,97,0,119,0,120,0,121,0,122,0,123,0,124,0,125,0,126,0,127,0,128,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,117,0,255,255,119,0,120,0,121,0,122,0,123,0,124,0,125,0,126,0,127,0,128,0,255,255,255,255,0,0,255,255,133,0,134,0,135,0,136,0,137,0,255,255,139,0,140,0,141,0,142,0,143,0,13,0,14,0,15,0,16,0,17,0,18,0,255,255,20,0,255,255,255,255,255,255,255,255,255,255,255,255,27,0,28,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,37,0,38,0,255,255,40,0,41,0,42,0,43,0,44,0,255,255,255,255,255,255,255,255,255,255,71,0,72,0,73,0,74,0,75,0,76,0,77,0,78,0,79,0,80,0,81,0,82,0,83,0,255,255,255,255,86,0,87,0,255,255,255,255,255,255,255,255,71,0,72,0,73,0,74,0,75,0,76,0,77,0,78,0,79,0,80,0,81,0,82,0,83,0,255,255,255,255,86,0,87,0,88,0,255,255,255,255,91,0,255,255,255,255,255,255,255,255,255,255,97,0,119,0,120,0,121,0,122,0,123,0,124,0,125,0,126,0,127,0,128,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,117,0,255,255,119,0,120,0,121,0,122,0,123,0,124,0,125,0,126,0,127,0,128,0,255,255,255,255,0,0,255,255,255,255,134,0,135,0,136,0,137,0,255,255,139,0,140,0,141,0,142,0,143,0,13,0,14,0,15,0,255,255,17,0,18,0,255,255,20,0,255,255,255,255,255,255,255,255,255,255,26,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,37,0,38,0,255,255,40,0,41,0,42,0,43,0,44,0,255,255,71,0,72,0,73,0,74,0,75,0,76,0,77,0,78,0,79,0,80,0,81,0,82,0,83,0,255,255,255,255,86,0,87,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,71,0,72,0,73,0,74,0,75,0,76,0,77,0,78,0,79,0,80,0,81,0,82,0,83,0,255,255,255,255,86,0,87,0,88,0,255,255,90,0,255,255,117,0,255,255,119,0,120,0,121,0,122,0,123,0,124,0,125,0,126,0,127,0,128,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,116,0,117,0,143,0,119,0,120,0,121,0,122,0,123,0,124,0,125,0,126,0,127,0,128,0,255,255,255,255,0,0,255,255,133,0,134,0,135,0,136,0,137,0,255,255,255,255,140,0,255,255,142,0,143,0,13,0,14,0,15,0,255,255,17,0,18,0,255,255,20,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,37,0,38,0,255,255,40,0,41,0,42,0,43,0,44,0,71,0,72,0,73,0,74,0,75,0,76,0,77,0,78,0,255,255,80,0,81,0,255,255,255,255,255,255,255,255,86,0,87,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,71,0,72,0,73,0,74,0,75,0,76,0,77,0,78,0,79,0,80,0,81,0,82,0,83,0,255,255,255,255,86,0,87,0,88,0,255,255,90,0,255,255,255,255,119,0,120,0,121,0,122,0,123,0,124,0,125,0,126,0,127,0,128,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,116,0,117,0,255,255,119,0,120,0,121,0,122,0,123,0,124,0,125,0,126,0,127,0,128,0,255,255,255,255,255,255,255,255,255,255,134,0,135,0,136,0,137,0,255,255,255,255,140,0,255,255,142,0,143,0,1,0,255,255,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,14,0,15,0,255,255,255,255,18,0,19,0,255,255,21,0,22,0,23,0,24,0,255,255,255,255,255,255,255,255,255,255,30,0,31,0,32,0,33,0,34,0,35,0,36,0,255,255,255,255,39,0,255,255,255,255,255,255,255,255,255,255,45,0,255,255,47,0,48,0,49,0,255,255,51,0,52,0,53,0,54,0,55,0,56,0,255,255,58,0,59,0,60,0,255,255,255,255,63,0,255,255,255,255,66,0,67,0,255,255,69,0,70,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,89,0,255,255,255,255,92,0,93,0,255,255,95,0,96,0,255,255,98,0,255,255,100,0,101,0,102,0,103,0,104,0,105,0,106,0,255,255,255,255,109,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,129,0,130,0,131,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,142,0,143,0,1,0,255,255,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,255,255,255,255,15,0,255,255,17,0,18,0,19,0,255,255,21,0,22,0,23,0,24,0,255,255,255,255,255,255,255,255,255,255,30,0,31,0,32,0,33,0,34,0,35,0,36,0,255,255,255,255,39,0,255,255,255,255,255,255,255,255,255,255,45,0,255,255,47,0,48,0,49,0,255,255,51,0,52,0,53,0,54,0,55,0,56,0,255,255,58,0,59,0,60,0,255,255,255,255,63,0,255,255,255,255,66,0,67,0,255,255,69,0,70,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,89,0,255,255,255,255,92,0,93,0,255,255,95,0,96,0,255,255,98,0,255,255,100,0,101,0,102,0,103,0,104,0,105,0,106,0,255,255,255,255,109,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,129,0,130,0,131,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,142,0,143,0,1,0,255,255,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,255,255,255,255,15,0,255,255,255,255,18,0,19,0,20,0,21,0,22,0,23,0,24,0,255,255,255,255,255,255,255,255,255,255,30,0,31,0,32,0,33,0,34,0,35,0,36,0,255,255,255,255,39,0,255,255,255,255,255,255,255,255,255,255,45,0,255,255,47,0,48,0,49,0,255,255,51,0,52,0,53,0,54,0,55,0,56,0,255,255,58,0,59,0,60,0,255,255,255,255,63,0,255,255,255,255,66,0,67,0,255,255,69,0,70,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,89,0,255,255,255,255,92,0,93,0,255,255,95,0,96,0,255,255,98,0,255,255,100,0,101,0,102,0,103,0,104,0,105,0,106,0,255,255,255,255,109,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,129,0,130,0,131,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,142,0,143,0,1,0,255,255,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,255,255,255,255,15,0,255,255,255,255,18,0,19,0,255,255,21,0,22,0,23,0,24,0,255,255,255,255,255,255,255,255,255,255,30,0,31,0,32,0,33,0,34,0,35,0,36,0,255,255,255,255,39,0,255,255,255,255,255,255,255,255,255,255,45,0,255,255,47,0,48,0,49,0,255,255,51,0,52,0,53,0,54,0,55,0,56,0,255,255,58,0,59,0,60,0,255,255,255,255,63,0,255,255,255,255,66,0,67,0,255,255,69,0,70,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,89,0,255,255,255,255,92,0,93,0,255,255,95,0,96,0,255,255,98,0,255,255,100,0,101,0,102,0,103,0,104,0,105,0,106,0,255,255,255,255,109,0,255,255,255,255,255,255,255,255,255,255,1,0,255,255,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,255,255,255,255,129,0,130,0,131,0,255,255,19,0,255,255,21,0,22,0,23,0,24,0,255,255,255,255,255,255,142,0,143,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,255,255,255,255,39,0,255,255,255,255,255,255,255,255,255,255,45,0,46,0,47,0,48,0,49,0,255,255,51,0,52,0,53,0,54,0,55,0,56,0,255,255,58,0,59,0,60,0,255,255,255,255,63,0,255,255,255,255,66,0,67,0,255,255,69,0,70,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,89,0,255,255,255,255,92,0,93,0,255,255,95,0,96,0,255,255,98,0,255,255,100,0,101,0,102,0,103,0,104,0,105,0,106,0,255,255,255,255,109,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,129,0,130,0,131,0,255,255,255,255,134,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,142,0,143,0,1,0,255,255,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,255,255,14,0,15,0,255,255,255,255,255,255,19,0,255,255,21,0,22,0,23,0,24,0,255,255,255,255,255,255,255,255,255,255,30,0,31,0,32,0,33,0,34,0,35,0,36,0,255,255,255,255,39,0,255,255,255,255,255,255,255,255,255,255,45,0,255,255,47,0,48,0,49,0,255,255,51,0,52,0,53,0,54,0,55,0,56,0,255,255,58,0,59,0,60,0,255,255,255,255,63,0,255,255,255,255,66,0,67,0,255,255,69,0,70,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,89,0,255,255,255,255,92,0,93,0,255,255,95,0,96,0,255,255,98,0,255,255,100,0,101,0,102,0,103,0,104,0,105,0,106,0,255,255,255,255,109,0,255,255,255,255,255,255,255,255,255,255,1,0,255,255,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,255,255,255,255,129,0,130,0,131,0,255,255,19,0,255,255,21,0,22,0,23,0,24,0,255,255,255,255,255,255,142,0,143,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,255,255,255,255,39,0,255,255,255,255,255,255,255,255,255,255,45,0,255,255,47,0,48,0,49,0,255,255,51,0,52,0,53,0,54,0,55,0,56,0,255,255,58,0,59,0,60,0,255,255,255,255,63,0,255,255,255,255,66,0,67,0,255,255,69,0,70,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,89,0,255,255,255,255,92,0,93,0,255,255,95,0,96,0,255,255,98,0,255,255,100,0,101,0,102,0,103,0,104,0,105,0,106,0,255,255,255,255,109,0,255,255,255,255,255,255,255,255,255,255,1,0,255,255,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,255,255,255,255,129,0,130,0,131,0,255,255,19,0,255,255,21,0,22,0,23,0,24,0,255,255,140,0,255,255,142,0,143,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,255,255,255,255,39,0,255,255,255,255,255,255,255,255,255,255,45,0,255,255,47,0,48,0,49,0,255,255,51,0,52,0,53,0,54,0,55,0,56,0,255,255,58,0,59,0,60,0,255,255,255,255,63,0,255,255,255,255,66,0,67,0,255,255,69,0,70,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,89,0,255,255,255,255,92,0,93,0,255,255,95,0,96,0,255,255,98,0,255,255,100,0,101,0,102,0,103,0,104,0,105,0,106,0,255,255,255,255,109,0,255,255,255,255,255,255,255,255,255,255,1,0,255,255,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,255,255,255,255,129,0,130,0,131,0,255,255,19,0,255,255,21,0,22,0,23,0,24,0,255,255,140,0,255,255,142,0,143,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,255,255,255,255,39,0,255,255,255,255,255,255,255,255,255,255,45,0,255,255,47,0,48,0,49,0,255,255,51,0,52,0,53,0,54,0,55,0,56,0,255,255,58,0,59,0,60,0,255,255,255,255,63,0,255,255,255,255,66,0,67,0,255,255,69,0,70,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,89,0,255,255,255,255,92,0,93,0,255,255,95,0,96,0,255,255,98,0,255,255,100,0,101,0,102,0,103,0,104,0,105,0,106,0,255,255,255,255,109,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,129,0,130,0,131,0,255,255,255,255,134,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,142,0,143,0,1,0,255,255,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,255,255,255,255,15,0,255,255,255,255,255,255,19,0,255,255,21,0,22,0,23,0,24,0,255,255,255,255,255,255,255,255,255,255,30,0,31,0,32,0,33,0,34,0,35,0,36,0,255,255,255,255,39,0,255,255,255,255,255,255,255,255,255,255,45,0,255,255,47,0,48,0,49,0,255,255,51,0,52,0,53,0,54,0,55,0,56,0,255,255,58,0,59,0,60,0,255,255,255,255,63,0,255,255,255,255,66,0,67,0,255,255,69,0,70,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,89,0,255,255,255,255,92,0,93,0,255,255,95,0,96,0,255,255,98,0,255,255,100,0,101,0,102,0,103,0,104,0,105,0,106,0,255,255,255,255,109,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,255,255,255,255,255,255,129,0,130,0,131,0,255,255,19,0,255,255,21,0,22,0,23,0,24,0,255,255,255,255,255,255,142,0,143,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,255,255,255,255,39,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,48,0,49,0,255,255,51,0,52,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,60,0,255,255,255,255,63,0,255,255,255,255,66,0,67,0,255,255,69,0,70,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,89,0,255,255,255,255,92,0,93,0,255,255,95,0,96,0,255,255,98,0,99,0,100,0,101,0,102,0,103,0,104,0,105,0,106,0,255,255,255,255,109,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,255,255,255,255,255,255,129,0,130,0,131,0,255,255,19,0,255,255,21,0,22,0,23,0,24,0,255,255,255,255,255,255,255,255,143,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,255,255,255,255,39,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,48,0,49,0,255,255,51,0,52,0,53,0,54,0,55,0,56,0,255,255,58,0,59,0,60,0,255,255,255,255,63,0,255,255,255,255,66,0,67,0,255,255,69,0,70,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,89,0,255,255,255,255,92,0,93,0,255,255,95,0,96,0,255,255,255,255,255,255,100,0,101,0,102,0,103,0,104,0,105,0,106,0,255,255,255,255,109,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,255,255,255,255,255,255,129,0,130,0,131,0,255,255,19,0,255,255,21,0,22,0,23,0,24,0,255,255,255,255,255,255,142,0,143,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,255,255,255,255,39,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,48,0,49,0,255,255,51,0,52,0,53,0,54,0,55,0,56,0,255,255,58,0,59,0,60,0,255,255,255,255,63,0,255,255,255,255,66,0,67,0,255,255,69,0,70,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,89,0,255,255,255,255,92,0,93,0,255,255,95,0,96,0,255,255,255,255,255,255,100,0,101,0,102,0,103,0,104,0,105,0,106,0,255,255,255,255,109,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,255,255,255,255,129,0,130,0,131,0,255,255,19,0,255,255,21,0,22,0,23,0,24,0,255,255,255,255,255,255,255,255,143,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,255,255,255,255,39,0,255,255,255,255,255,255,255,255,255,255,45,0,46,0,47,0,48,0,49,0,255,255,51,0,52,0,53,0,54,0,55,0,56,0,255,255,58,0,59,0,60,0,255,255,255,255,63,0,255,255,255,255,66,0,67,0,255,255,69,0,70,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,89,0,255,255,255,255,92,0,93,0,255,255,95,0,96,0,255,255,98,0,255,255,100,0,101,0,102,0,103,0,104,0,105,0,106,0,255,255,255,255,109,0,255,255,255,255,255,255,255,255,255,255,255,255,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,255,255,255,255,255,255,129,0,130,0,131,0,19,0,255,255,21,0,22,0,23,0,24,0,255,255,255,255,255,255,255,255,142,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,255,255,255,255,39,0,255,255,255,255,255,255,255,255,255,255,45,0,255,255,47,0,48,0,49,0,255,255,51,0,52,0,53,0,54,0,55,0,56,0,255,255,58,0,59,0,60,0,255,255,255,255,63,0,255,255,255,255,66,0,67,0,255,255,69,0,70,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,89,0,255,255,255,255,92,0,93,0,255,255,95,0,96,0,255,255,98,0,255,255,100,0,101,0,102,0,103,0,104,0,105,0,106,0,255,255,255,255,109,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,129,0,130,0,131,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,142,0,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,255,255,255,255,255,255,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0,38,0,39,0,255,255,255,255,255,255,255,255,255,255,45,0,46,0,47,0,48,0,49,0,50,0,51,0,52,0,53,0,54,0,55,0,56,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,69,0,70,0,71,0,72,0,73,0,74,0,75,0,76,0,77,0,255,255,255,255,80,0,81,0,255,255,255,255,84,0,85,0,86,0,87,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,98,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,119,0,120,0,121,0,122,0,123,0,124,0,125,0,126,0,127,0,128,0,255,255,130,0,131,0,255,255,255,255,255,255,255,255,255,255,255,255,138,0,139,0,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,19,0,255,255,21,0,22,0,23,0,24,0,255,255,26,0,255,255,255,255,255,255,30,0,31,0,32,0,33,0,34,0,35,0,36,0,255,255,255,255,39,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,48,0,49,0,255,255,51,0,52,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,60,0,255,255,255,255,63,0,255,255,255,255,66,0,67,0,255,255,69,0,70,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,89,0,255,255,255,255,92,0,93,0,255,255,95,0,96,0,255,255,98,0,99,0,100,0,101,0,102,0,103,0,104,0,105,0,106,0,255,255,255,255,109,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,129,0,130,0,131,0,255,255,133,0,255,255,255,255,255,255,255,255,255,255,139,0,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,19,0,255,255,21,0,22,0,23,0,24,0,255,255,26,0,255,255,255,255,255,255,30,0,31,0,32,0,33,0,34,0,35,0,36,0,255,255,255,255,39,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,48,0,49,0,255,255,51,0,52,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,60,0,255,255,255,255,63,0,255,255,255,255,66,0,67,0,255,255,69,0,70,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,89,0,255,255,255,255,92,0,93,0,255,255,95,0,96,0,255,255,98,0,99,0,100,0,101,0,102,0,103,0,104,0,105,0,106,0,255,255,255,255,109,0,255,255,255,255,255,255,255,255,255,255,255,255,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,255,255,255,255,255,255,255,255,129,0,130,0,131,0,19,0,133,0,21,0,22,0,23,0,24,0,255,255,139,0,255,255,255,255,255,255,30,0,31,0,32,0,33,0,34,0,35,0,36,0,255,255,255,255,39,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,48,0,49,0,255,255,51,0,52,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,60,0,255,255,255,255,63,0,255,255,255,255,66,0,67,0,255,255,69,0,70,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,89,0,90,0,255,255,92,0,93,0,255,255,95,0,96,0,255,255,98,0,99,0,100,0,101,0,102,0,103,0,104,0,105,0,106,0,255,255,255,255,109,0,255,255,255,255,255,255,255,255,255,255,255,255,116,0,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,255,255,255,255,255,255,129,0,130,0,131,0,255,255,19,0,255,255,21,0,22,0,23,0,24,0,139,0,255,255,255,255,255,255,255,255,30,0,31,0,32,0,33,0,34,0,35,0,36,0,255,255,255,255,39,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,48,0,49,0,255,255,51,0,52,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,60,0,255,255,255,255,63,0,255,255,255,255,66,0,67,0,255,255,69,0,70,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,89,0,255,255,255,255,92,0,93,0,255,255,95,0,96,0,255,255,98,0,99,0,100,0,101,0,102,0,103,0,104,0,105,0,106,0,255,255,255,255,109,0,255,255,255,255,255,255,255,255,255,255,255,255,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,255,255,255,255,255,255,255,255,129,0,130,0,131,0,19,0,255,255,21,0,22,0,23,0,24,0,255,255,139,0,255,255,255,255,255,255,30,0,31,0,32,0,33,0,34,0,35,0,36,0,255,255,255,255,39,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,48,0,49,0,255,255,51,0,52,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,60,0,255,255,255,255,63,0,255,255,255,255,66,0,67,0,255,255,69,0,70,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,89,0,255,255,255,255,92,0,93,0,255,255,95,0,96,0,255,255,98,0,99,0,100,0,101,0,102,0,103,0,104,0,105,0,106,0,255,255,255,255,109,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,129,0,130,0,131,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,139,0,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,255,255,255,255,255,255,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0,38,0,39,0,255,255,255,255,255,255,255,255,255,255,45,0,46,0,47,0,48,0,49,0,50,0,51,0,52,0,53,0,54,0,55,0,56,0,255,255,255,255,255,255,255,255,255,255,255,255,63,0,255,255,255,255,255,255,255,255,255,255,69,0,70,0,71,0,72,0,73,0,74,0,75,0,76,0,77,0,255,255,255,255,80,0,81,0,255,255,255,255,84,0,85,0,86,0,87,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,98,0,255,255,255,255,255,255,255,255,255,255,255,255,105,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,119,0,120,0,121,0,122,0,123,0,124,0,125,0,126,0,127,0,128,0,255,255,130,0,131,0,255,255,255,255,255,255,255,255,255,255,255,255,138,0,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,255,255,255,255,255,255,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0,38,0,39,0,255,255,255,255,255,255,255,255,255,255,45,0,46,0,47,0,48,0,49,0,50,0,51,0,52,0,53,0,54,0,55,0,56,0,255,255,255,255,255,255,255,255,255,255,255,255,63,0,255,255,255,255,255,255,255,255,255,255,69,0,70,0,71,0,72,0,73,0,74,0,75,0,76,0,77,0,255,255,255,255,80,0,81,0,255,255,255,255,84,0,85,0,86,0,87,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,98,0,255,255,255,255,255,255,255,255,255,255,255,255,105,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,119,0,120,0,121,0,122,0,123,0,124,0,125,0,126,0,127,0,128,0,255,255,130,0,131,0,255,255,255,255,255,255,255,255,255,255,255,255,138,0,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,255,255,255,255,255,255,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0,38,0,39,0,255,255,255,255,255,255,255,255,255,255,45,0,46,0,47,0,48,0,49,0,50,0,51,0,52,0,255,255,255,255,55,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,69,0,70,0,71,0,72,0,73,0,74,0,75,0,76,0,77,0,255,255,255,255,80,0,81,0,255,255,255,255,84,0,85,0,86,0,87,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,98,0,255,255,255,255,101,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,119,0,120,0,121,0,122,0,123,0,124,0,125,0,126,0,127,0,128,0,255,255,130,0,131,0,255,255,255,255,255,255,255,255,255,255,255,255,138,0,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,255,255,255,255,255,255,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0,38,0,39,0,255,255,255,255,255,255,255,255,255,255,45,0,46,0,47,0,48,0,49,0,50,0,51,0,52,0,255,255,255,255,55,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,69,0,70,0,71,0,72,0,73,0,74,0,75,0,76,0,77,0,255,255,255,255,80,0,81,0,255,255,255,255,84,0,85,0,86,0,87,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,98,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,119,0,120,0,121,0,122,0,123,0,124,0,125,0,126,0,127,0,128,0,255,255,130,0,131,0,255,255,255,255,255,255,255,255,255,255,255,255,138,0,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,19,0,255,255,21,0,22,0,23,0,24,0,255,255,255,255,255,255,255,255,255,255,30,0,31,0,32,0,33,0,34,0,35,0,36,0,255,255,255,255,39,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,48,0,49,0,255,255,51,0,52,0,53,0,54,0,55,0,56,0,255,255,58,0,59,0,60,0,255,255,255,255,63,0,255,255,255,255,66,0,67,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,89,0,255,255,255,255,92,0,93,0,255,255,95,0,96,0,255,255,255,255,255,255,100,0,101,0,102,0,103,0,104,0,105,0,106,0,255,255,255,255,109,0,255,255,255,255,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,19,0,129,0,21,0,22,0,23,0,24,0,255,255,255,255,255,255,137,0,255,255,30,0,31,0,32,0,33,0,34,0,35,0,36,0,255,255,255,255,39,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,48,0,49,0,255,255,51,0,52,0,53,0,54,0,55,0,56,0,255,255,58,0,59,0,60,0,255,255,255,255,63,0,255,255,255,255,66,0,67,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,89,0,255,255,255,255,92,0,93,0,255,255,95,0,96,0,255,255,255,255,255,255,100,0,101,0,102,0,103,0,104,0,105,0,106,0,255,255,255,255,109,0,255,255,255,255,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,19,0,129,0,21,0,22,0,23,0,24,0,255,255,255,255,255,255,137,0,255,255,30,0,31,0,32,0,33,0,34,0,35,0,36,0,255,255,255,255,39,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,48,0,49,0,255,255,51,0,52,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,60,0,255,255,255,255,63,0,255,255,255,255,66,0,67,0,255,255,69,0,70,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,89,0,255,255,255,255,92,0,93,0,255,255,95,0,96,0,255,255,98,0,99,0,100,0,101,0,102,0,103,0,104,0,105,0,106,0,255,255,255,255,109,0,110,0,255,255,255,255,113,0,114,0,255,255,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,255,255,255,255,255,255,129,0,130,0,131,0,19,0,255,255,21,0,22,0,23,0,24,0,255,255,255,255,255,255,255,255,255,255,30,0,31,0,32,0,33,0,34,0,35,0,36,0,255,255,255,255,39,0,255,255,255,255,255,255,255,255,255,255,45,0,46,0,47,0,48,0,49,0,255,255,51,0,52,0,53,0,54,0,55,0,56,0,255,255,58,0,59,0,60,0,255,255,255,255,63,0,255,255,255,255,66,0,67,0,255,255,69,0,70,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,89,0,255,255,255,255,92,0,93,0,255,255,95,0,96,0,255,255,98,0,255,255,100,0,101,0,102,0,103,0,104,0,105,0,106,0,255,255,255,255,109,0,255,255,255,255,255,255,255,255,255,255,255,255,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,255,255,255,255,255,255,255,255,129,0,130,0,131,0,19,0,255,255,21,0,22,0,23,0,24,0,255,255,255,255,255,255,255,255,255,255,30,0,31,0,32,0,33,0,34,0,35,0,36,0,255,255,255,255,39,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,48,0,49,0,255,255,51,0,52,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,60,0,255,255,255,255,63,0,255,255,255,255,66,0,67,0,255,255,69,0,70,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,89,0,255,255,255,255,92,0,93,0,255,255,95,0,96,0,255,255,98,0,255,255,100,0,101,0,102,0,103,0,104,0,105,0,106,0,255,255,255,255,109,0,110,0,255,255,255,255,113,0,114,0,255,255,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,255,255,255,255,255,255,129,0,130,0,131,0,19,0,255,255,21,0,22,0,23,0,24,0,255,255,255,255,255,255,255,255,255,255,30,0,31,0,32,0,33,0,34,0,35,0,36,0,255,255,255,255,39,0,255,255,255,255,255,255,255,255,255,255,45,0,255,255,47,0,48,0,49,0,255,255,51,0,52,0,53,0,54,0,55,0,56,0,255,255,58,0,59,0,60,0,255,255,255,255,63,0,255,255,255,255,66,0,67,0,255,255,69,0,70,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,89,0,255,255,255,255,92,0,93,0,255,255,95,0,96,0,255,255,98,0,255,255,100,0,101,0,102,0,103,0,104,0,105,0,106,0,255,255,255,255,109,0,255,255,255,255,255,255,255,255,255,255,255,255,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,255,255,255,255,255,255,255,255,129,0,130,0,131,0,19,0,255,255,21,0,22,0,23,0,24,0,255,255,255,255,255,255,255,255,255,255,30,0,31,0,32,0,33,0,34,0,35,0,36,0,255,255,255,255,39,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,48,0,49,0,255,255,51,0,52,0,53,0,54,0,55,0,56,0,255,255,58,0,59,0,60,0,255,255,255,255,63,0,255,255,255,255,66,0,67,0,255,255,69,0,70,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,89,0,255,255,255,255,92,0,93,0,255,255,95,0,96,0,255,255,98,0,255,255,100,0,101,0,102,0,103,0,104,0,105,0,106,0,255,255,255,255,109,0,110,0,255,255,255,255,113,0,114,0,255,255,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,255,255,255,255,255,255,255,255,129,0,130,0,131,0,19,0,255,255,21,0,22,0,23,0,24,0,255,255,255,255,255,255,255,255,255,255,30,0,31,0,32,0,33,0,34,0,35,0,36,0,255,255,255,255,39,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,48,0,49,0,255,255,51,0,52,0,53,0,54,0,55,0,56,0,255,255,58,0,59,0,60,0,255,255,255,255,63,0,255,255,255,255,66,0,67,0,255,255,69,0,70,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,89,0,255,255,255,255,92,0,93,0,255,255,95,0,96,0,255,255,98,0,255,255,100,0,101,0,102,0,103,0,104,0,105,0,106,0,255,255,255,255,109,0,110,0,255,255,255,255,113,0,114,0,255,255,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,255,255,255,255,255,255,255,255,129,0,130,0,131,0,19,0,255,255,21,0,22,0,23,0,24,0,255,255,255,255,255,255,255,255,255,255,30,0,31,0,32,0,33,0,34,0,35,0,36,0,255,255,255,255,39,0,255,255,255,255,255,255], "i8", ALLOC_NONE, Runtime.GLOBAL_BASE+10240);
-/* memory initializer */ allocate([255,255,255,255,255,255,255,255,255,255,48,0,49,0,255,255,51,0,52,0,53,0,54,0,55,0,56,0,255,255,58,0,59,0,60,0,255,255,255,255,63,0,255,255,255,255,66,0,67,0,255,255,69,0,70,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,89,0,255,255,255,255,92,0,93,0,255,255,95,0,96,0,255,255,98,0,255,255,100,0,101,0,102,0,103,0,104,0,105,0,106,0,255,255,255,255,109,0,110,0,255,255,255,255,113,0,114,0,255,255,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,255,255,255,255,255,255,255,255,129,0,130,0,131,0,19,0,255,255,21,0,22,0,23,0,24,0,255,255,255,255,255,255,255,255,255,255,30,0,31,0,32,0,33,0,34,0,35,0,36,0,255,255,255,255,39,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,48,0,49,0,255,255,51,0,52,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,60,0,255,255,255,255,63,0,255,255,255,255,66,0,67,0,255,255,69,0,70,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,89,0,255,255,255,255,92,0,93,0,255,255,95,0,96,0,255,255,98,0,99,0,100,0,101,0,102,0,103,0,104,0,105,0,106,0,255,255,255,255,109,0,255,255,255,255,255,255,255,255,255,255,255,255,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,255,255,255,255,255,255,255,255,129,0,130,0,131,0,19,0,255,255,21,0,22,0,23,0,24,0,255,255,255,255,255,255,255,255,255,255,30,0,31,0,32,0,33,0,34,0,35,0,36,0,255,255,255,255,39,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,48,0,49,0,255,255,51,0,52,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,60,0,255,255,255,255,63,0,255,255,255,255,66,0,67,0,255,255,69,0,70,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,89,0,255,255,255,255,92,0,93,0,255,255,95,0,96,0,255,255,98,0,255,255,100,0,101,0,102,0,103,0,104,0,105,0,106,0,255,255,255,255,109,0,255,255,255,255,255,255,255,255,255,255,255,255,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,255,255,255,255,255,255,255,255,129,0,130,0,131,0,19,0,255,255,21,0,22,0,23,0,24,0,255,255,255,255,255,255,255,255,255,255,30,0,31,0,32,0,33,0,34,0,35,0,36,0,255,255,255,255,39,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,48,0,49,0,255,255,51,0,52,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,60,0,255,255,255,255,63,0,255,255,255,255,66,0,67,0,255,255,69,0,70,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,89,0,255,255,255,255,92,0,93,0,255,255,95,0,96,0,255,255,255,255,99,0,100,0,101,0,102,0,103,0,104,0,105,0,106,0,255,255,255,255,109,0,255,255,255,255,255,255,255,255,255,255,255,255,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,255,255,255,255,255,255,255,255,129,0,130,0,131,0,19,0,255,255,21,0,22,0,23,0,24,0,255,255,255,255,255,255,255,255,255,255,30,0,31,0,32,0,33,0,34,0,35,0,36,0,255,255,255,255,39,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,48,0,49,0,255,255,51,0,52,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,60,0,255,255,255,255,63,0,255,255,255,255,66,0,67,0,255,255,69,0,70,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,89,0,255,255,255,255,92,0,93,0,255,255,95,0,96,0,255,255,255,255,255,255,100,0,101,0,102,0,103,0,104,0,105,0,106,0,255,255,255,255,109,0,255,255,255,255,255,255,255,255,255,255,255,255,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,255,255,255,255,255,255,255,255,129,0,130,0,131,0,19,0,255,255,21,0,22,0,23,0,24,0,255,255,255,255,255,255,255,255,255,255,30,0,31,0,32,0,33,0,34,0,35,0,36,0,255,255,255,255,39,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,48,0,49,0,255,255,51,0,52,0,53,0,54,0,55,0,56,0,255,255,58,0,59,0,60,0,255,255,255,255,63,0,255,255,255,255,66,0,67,0,255,255,69,0,70,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,89,0,255,255,255,255,92,0,93,0,255,255,95,0,96,0,255,255,98,0,255,255,100,0,101,0,102,0,103,0,104,0,105,0,106,0,255,255,255,255,109,0,255,255,255,255,255,255,255,255,255,255,255,255,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,255,255,255,255,255,255,255,255,129,0,130,0,131,0,19,0,255,255,21,0,22,0,23,0,24,0,255,255,255,255,255,255,255,255,255,255,30,0,31,0,32,0,33,0,34,0,35,0,36,0,255,255,255,255,39,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,48,0,49,0,255,255,51,0,52,0,53,0,54,0,55,0,56,0,255,255,58,0,59,0,60,0,255,255,255,255,63,0,255,255,255,255,66,0,67,0,255,255,69,0,70,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,89,0,255,255,255,255,92,0,93,0,255,255,95,0,96,0,255,255,98,0,255,255,100,0,101,0,102,0,103,0,104,0,105,0,106,0,255,255,255,255,109,0,255,255,255,255,255,255,255,255,255,255,255,255,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,255,255,255,255,255,255,255,255,129,0,130,0,131,0,19,0,255,255,21,0,22,0,23,0,24,0,255,255,255,255,255,255,255,255,255,255,30,0,31,0,32,0,33,0,34,0,35,0,36,0,255,255,255,255,39,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,48,0,49,0,255,255,51,0,52,0,53,0,54,0,55,0,56,0,255,255,58,0,59,0,60,0,255,255,255,255,63,0,255,255,255,255,66,0,67,0,255,255,69,0,70,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,89,0,255,255,255,255,92,0,93,0,255,255,95,0,96,0,255,255,98,0,255,255,100,0,101,0,102,0,103,0,104,0,105,0,106,0,255,255,255,255,109,0,255,255,255,255,255,255,255,255,255,255,255,255,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,255,255,255,255,255,255,255,255,129,0,130,0,131,0,19,0,255,255,21,0,22,0,23,0,24,0,255,255,255,255,255,255,255,255,255,255,30,0,31,0,32,0,33,0,34,0,35,0,36,0,255,255,255,255,39,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,48,0,49,0,255,255,51,0,52,0,53,0,54,0,55,0,56,0,255,255,58,0,59,0,60,0,255,255,255,255,63,0,255,255,255,255,66,0,67,0,255,255,69,0,70,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,89,0,255,255,255,255,92,0,93,0,255,255,95,0,96,0,255,255,255,255,255,255,100,0,101,0,102,0,103,0,104,0,105,0,106,0,255,255,255,255,109,0,255,255,255,255,255,255,255,255,255,255,255,255,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,255,255,255,255,255,255,255,255,129,0,130,0,131,0,19,0,255,255,21,0,22,0,23,0,24,0,255,255,255,255,255,255,255,255,255,255,30,0,31,0,32,0,33,0,34,0,35,0,36,0,255,255,255,255,39,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,48,0,49,0,255,255,51,0,52,0,53,0,54,0,55,0,56,0,255,255,58,0,59,0,60,0,255,255,255,255,63,0,255,255,255,255,66,0,67,0,255,255,69,0,70,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,89,0,255,255,255,255,92,0,93,0,255,255,95,0,96,0,255,255,255,255,255,255,100,0,101,0,102,0,103,0,104,0,105,0,106,0,255,255,255,255,109,0,255,255,255,255,255,255,255,255,255,255,255,255,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,255,255,255,255,255,255,255,255,129,0,130,0,131,0,19,0,255,255,21,0,22,0,23,0,24,0,255,255,255,255,255,255,255,255,255,255,30,0,31,0,32,0,33,0,34,0,35,0,36,0,255,255,255,255,39,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,48,0,49,0,255,255,51,0,52,0,53,0,54,0,55,0,56,0,255,255,58,0,59,0,60,0,255,255,255,255,63,0,255,255,255,255,66,0,67,0,255,255,69,0,70,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,89,0,255,255,255,255,92,0,93,0,255,255,95,0,96,0,255,255,255,255,255,255,100,0,101,0,102,0,103,0,104,0,105,0,106,0,255,255,255,255,109,0,255,255,255,255,255,255,255,255,255,255,255,255,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,255,255,255,255,255,255,255,255,129,0,130,0,131,0,19,0,255,255,21,0,22,0,23,0,24,0,255,255,255,255,255,255,255,255,255,255,30,0,31,0,32,0,33,0,34,0,35,0,36,0,255,255,255,255,39,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,48,0,49,0,255,255,51,0,52,0,53,0,54,0,55,0,56,0,255,255,58,0,59,0,60,0,255,255,255,255,63,0,255,255,255,255,66,0,67,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,86,0,255,255,255,255,89,0,255,255,255,255,92,0,93,0,255,255,95,0,96,0,255,255,255,255,255,255,100,0,101,0,102,0,103,0,104,0,105,0,106,0,255,255,255,255,109,0,255,255,255,255,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,19,0,129,0,21,0,22,0,23,0,24,0,255,255,255,255,255,255,255,255,255,255,30,0,31,0,32,0,33,0,34,0,35,0,36,0,255,255,255,255,39,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,48,0,49,0,255,255,51,0,52,0,53,0,54,0,55,0,56,0,255,255,58,0,59,0,60,0,255,255,255,255,63,0,255,255,255,255,66,0,67,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,89,0,255,255,255,255,92,0,93,0,255,255,95,0,96,0,255,255,98,0,255,255,100,0,101,0,102,0,103,0,104,0,105,0,106,0,255,255,255,255,109,0,255,255,255,255,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,19,0,129,0,21,0,22,0,23,0,24,0,255,255,255,255,255,255,255,255,255,255,30,0,31,0,32,0,33,0,34,0,35,0,36,0,255,255,255,255,39,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,48,0,49,0,255,255,51,0,52,0,53,0,54,0,55,0,56,0,255,255,58,0,59,0,60,0,255,255,255,255,63,0,255,255,255,255,66,0,67,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,89,0,255,255,255,255,92,0,93,0,255,255,95,0,96,0,255,255,98,0,255,255,100,0,101,0,102,0,103,0,104,0,105,0,106,0,255,255,255,255,109,0,255,255,255,255,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,19,0,129,0,21,0,22,0,23,0,24,0,255,255,255,255,255,255,255,255,255,255,30,0,31,0,32,0,33,0,34,0,35,0,36,0,255,255,255,255,39,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,48,0,49,0,255,255,51,0,52,0,53,0,54,0,55,0,56,0,255,255,58,0,59,0,60,0,255,255,255,255,63,0,255,255,255,255,66,0,67,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,89,0,255,255,255,255,92,0,93,0,255,255,95,0,96,0,255,255,255,255,255,255,100,0,101,0,102,0,103,0,104,0,105,0,106,0,255,255,255,255,109,0,255,255,255,255,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,19,0,129,0,21,0,22,0,23,0,24,0,255,255,255,255,255,255,255,255,255,255,30,0,31,0,32,0,33,0,34,0,35,0,36,0,255,255,255,255,39,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,48,0,49,0,255,255,51,0,52,0,53,0,54,0,55,0,56,0,255,255,58,0,59,0,60,0,255,255,255,255,63,0,255,255,255,255,66,0,67,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,89,0,255,255,255,255,92,0,93,0,255,255,95,0,96,0,255,255,255,255,255,255,100,0,101,0,102,0,103,0,104,0,105,0,106,0,255,255,255,255,109,0,255,255,255,255,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,19,0,129,0,21,0,22,0,23,0,24,0,255,255,255,255,255,255,255,255,255,255,30,0,31,0,32,0,33,0,34,0,35,0,36,0,255,255,255,255,39,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,48,0,49,0,255,255,51,0,52,0,53,0,54,0,55,0,56,0,255,255,58,0,59,0,60,0,255,255,255,255,63,0,255,255,255,255,66,0,67,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,89,0,255,255,255,255,92,0,93,0,255,255,95,0,96,0,255,255,255,255,255,255,100,0,101,0,102,0,103,0,104,0,105,0,106,0,255,255,255,255,109,0,255,255,255,255,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,19,0,129,0,21,0,22,0,23,0,24,0,255,255,255,255,255,255,255,255,255,255,30,0,31,0,32,0,33,0,34,0,35,0,36,0,255,255,255,255,39,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,48,0,49,0,255,255,51,0,52,0,53,0,54,0,55,0,56,0,255,255,58,0,59,0,60,0,255,255,255,255,63,0,255,255,255,255,66,0,67,0,255,255,71,0,72,0,73,0,74,0,75,0,76,0,77,0,255,255,255,255,80,0,81,0,255,255,255,255,255,255,255,255,86,0,87,0,255,255,255,255,255,255,89,0,255,255,255,255,92,0,93,0,255,255,95,0,96,0,255,255,255,255,255,255,100,0,101,0,102,0,103,0,104,0,105,0,106,0,255,255,255,255,109,0,255,255,255,255,51,0,52,0,255,255,255,255,55,0,119,0,120,0,121,0,122,0,123,0,124,0,125,0,126,0,127,0,128,0,255,255,255,255,129,0,69,0,70,0,71,0,72,0,73,0,74,0,75,0,76,0,77,0,255,255,255,255,80,0,81,0,255,255,255,255,84,0,85,0,86,0,87,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,98,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,119,0,120,0,121,0,122,0,123,0,124,0,125,0,126,0,127,0,128,0,255,255,130,0,131,0,51,0,52,0,255,255,255,255,55,0,255,255,138,0,139,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,69,0,70,0,71,0,72,0,73,0,74,0,75,0,76,0,77,0,255,255,255,255,80,0,81,0,255,255,255,255,84,0,85,0,86,0,87,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,98,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,119,0,120,0,121,0,122,0,123,0,124,0,125,0,126,0,127,0,128,0,255,255,130,0,131,0,51,0,52,0,255,255,255,255,55,0,255,255,138,0,139,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,69,0,70,0,71,0,72,0,73,0,74,0,75,0,76,0,77,0,255,255,255,255,80,0,81,0,255,255,255,255,84,0,85,0,86,0,87,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,98,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,119,0,120,0,121,0,122,0,123,0,124,0,125,0,126,0,127,0,128,0,255,255,130,0,131,0,51,0,52,0,255,255,255,255,55,0,255,255,138,0,139,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,69,0,70,0,71,0,72,0,73,0,74,0,75,0,76,0,77,0,255,255,255,255,80,0,81,0,255,255,255,255,84,0,85,0,86,0,87,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,98,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,119,0,120,0,121,0,122,0,123,0,124,0,125,0,126,0,127,0,128,0,255,255,130,0,131,0,51,0,52,0,255,255,255,255,55,0,255,255,138,0,139,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,69,0,70,0,71,0,72,0,73,0,74,0,75,0,76,0,77,0,255,255,255,255,80,0,81,0,255,255,255,255,84,0,85,0,86,0,87,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,98,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,119,0,120,0,121,0,122,0,123,0,124,0,125,0,126,0,127,0,128,0,255,255,130,0,131,0,51,0,52,0,255,255,255,255,55,0,255,255,138,0,139,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,69,0,70,0,71,0,72,0,73,0,74,0,75,0,76,0,77,0,255,255,255,255,80,0,81,0,255,255,255,255,84,0,85,0,86,0,87,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,98,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,119,0,120,0,121,0,122,0,123,0,124,0,125,0,126,0,127,0,128,0,255,255,130,0,131,0,51,0,52,0,255,255,255,255,55,0,255,255,138,0,139,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,69,0,70,0,71,0,72,0,73,0,74,0,75,0,76,0,77,0,255,255,255,255,80,0,81,0,255,255,255,255,84,0,85,0,86,0,87,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,98,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,119,0,120,0,121,0,122,0,123,0,124,0,125,0,126,0,127,0,128,0,255,255,130,0,131,0,51,0,52,0,255,255,255,255,55,0,255,255,138,0,139,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,69,0,70,0,71,0,72,0,73,0,74,0,75,0,76,0,77,0,255,255,255,255,80,0,81,0,255,255,255,255,84,0,85,0,86,0,87,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,98,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,119,0,120,0,121,0,122,0,123,0,124,0,125,0,126,0,127,0,128,0,255,255,130,0,131,0,51,0,52,0,255,255,255,255,55,0,255,255,138,0,139,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,69,0,70,0,71,0,72,0,73,0,74,0,75,0,76,0,77,0,255,255,255,255,80,0,81,0,255,255,255,255,84,0,85,0,86,0,87,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,98,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,119,0,120,0,121,0,122,0,123,0,124,0,125,0,126,0,127,0,128,0,255,255,130,0,131,0,51,0,52,0,255,255,255,255,55,0,255,255,138,0,139,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,69,0,70,0,71,0,72,0,73,0,74,0,75,0,76,0,77,0,255,255,255,255,80,0,81,0,255,255,255,255,84,0,85,0,86,0,87,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,98,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,119,0,120,0,121,0,122,0,123,0,124,0,125,0,126,0,127,0,128,0,255,255,130,0,131,0,51,0,52,0,255,255,255,255,55,0,255,255,138,0,139,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,69,0,70,0,71,0,72,0,73,0,74,0,75,0,76,0,77,0,255,255,255,255,80,0,81,0,255,255,255,255,84,0,85,0,86,0,87,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,98,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,119,0,120,0,121,0,122,0,123,0,124,0,125,0,126,0,127,0,128,0,255,255,130,0,131,0,51,0,52,0,255,255,255,255,55,0,255,255,138,0,139,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,69,0,70,0,71,0,72,0,73,0,74,0,75,0,76,0,77,0,255,255,255,255,80,0,81,0,255,255,255,255,84,0,85,0,86,0,87,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,98,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,119,0,120,0,121,0,122,0,123,0,124,0,125,0,126,0,127,0,128,0,255,255,130,0,131,0,51,0,52,0,255,255,255,255,55,0,255,255,138,0,139,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,69,0,70,0,71,0,72,0,73,0,74,0,75,0,76,0,77,0,255,255,255,255,80,0,81,0,255,255,255,255,84,0,85,0,86,0,87,0,255,255,255,255,255,255,71,0,72,0,73,0,74,0,75,0,76,0,77,0,98,0,255,255,80,0,81,0,255,255,255,255,255,255,255,255,86,0,87,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,119,0,120,0,121,0,122,0,123,0,124,0,125,0,126,0,127,0,128,0,255,255,130,0,131,0,255,255,255,255,255,255,255,255,255,255,255,255,138,0,119,0,120,0,121,0,122,0,123,0,124,0,125,0,126,0,127,0,128,0,99,0,123,2,3,1,242,0,242,0,61,1,115,1,242,0,84,2,171,1,235,0,194,0,226,1,5,1,230,0,115,0,115,0,18,2,79,1,104,2,237,1,248,0,248,0,115,0,100,0,248,0,148,1,18,1,230,0,207,2,57,2,114,2,65,1,123,2,0,1,203,1,32,1,208,1,124,1,205,1,55,2,219,2,63,2,23,2,226,2,66,2,247,0,247,0,25,1,29,1,247,0,229,2,82,2,6,3,232,2,24,1,28,1,139,2,42,1,67,0,235,0,67,0,115,0,236,0,83,2,1,3,97,2,64,1,168,2,69,3,120,2,200,2,201,2,120,2,72,3,107,2,55,2,113,1,63,2,162,255,23,1,12,3,101,2,14,3,152,2,139,1,115,0,83,2,130,3,246,2,254,2,143,3,113,1,245,0,250,0,188,254,191,1,251,0,159,255,237,254,1,1,110,1,237,254,244,1,49,254,201,0,201,0,7,1,71,1,72,1,118,1,201,0,173,2,236,0,53,2,49,254,61,2,0,1,181,2,61,2,155,255,83,2,208,0,81,1,14,1,139,1,3,0,233,0,156,255,73,1,162,255,118,1,160,255,46,254,142,2,160,255,53,2,158,255,61,2,117,1,147,1,162,255,188,254,188,254,161,255,11,1,83,2,124,3,158,255,111,1,53,2,170,255,61,2,75,1,174,2,161,255,218,2,189,1,160,1,53,2,14,2,61,2,47,254,143,3,159,255,155,255,155,255,221,2,218,2,255,2,252,0,45,254,130,3,76,1,87,3,107,1,119,1,157,255,104,1,105,1,106,1,46,254,116,1,156,255,114,1,3,3,163,255,14,1,44,254,7,3,255,0,170,255,255,0,168,2,53,2,61,2,171,1,231,0,232,0,114,1,153,2,168,2,156,3,72,3,17,3,121,1,236,2,42,3,237,1,206,2,47,254,231,0,232,0,113,2,232,0,123,2,208,1,42,254,53,2,45,254,61,2,237,253,108,1,109,1,159,255,159,255,119,254,6,3,235,0,207,1,42,1,199,1,163,255,80,1,184,3,159,1,44,254,232,0,194,1,242,0,164,255,242,0,242,0,202,1,168,255,169,1,169,1,1,3,18,1,232,0,236,0,231,0,232,0,180,1,14,3,1,3,236,0,248,0,14,3,248,0,166,255,160,255,160,255,158,255,158,255,42,254,235,0,169,255,152,2,249,2,161,255,161,255,120,3,193,1,10,2,43,254,167,255,208,1,237,253,19,2,2,1,236,0,247,0,29,3,247,0,22,3,120,2,120,2,119,254,165,255,36,3,236,253,54,254,59,1,60,1,127,1,81,0,115,0,81,0,116,0,116,0,129,1,50,254,204,0,204,0,201,0,201,0,214,0,215,2,204,0,204,0,204,0,18,1,80,2,204,0,69,2,71,2,234,254,16,2,236,0,2,1,149,1,150,1,43,254,232,0,190,1,237,1,201,1,201,1,172,1,14,3,175,1,201,1,119,254,227,2,119,254,119,254,138,1,182,1,186,1,54,254,0,2,81,0,47,3,115,0,14,1,33,1,168,255,130,1,131,1,50,254,242,0,166,255,195,1,181,1,183,1,204,0,197,1,63,3,228,2,160,255,12,2,180,1,134,3,234,254,234,254,12,2,59,3,236,253,152,2,33,1,152,2,196,1,242,0,158,3,139,3,18,2,62,2,67,0,144,3,232,0,191,3,122,1,5,2,180,1,158,255,123,1,242,0,231,0,232,0,189,255,91,2,142,1,161,255,146,1,241,2,242,0,151,1,180,1,62,2,103,2,103,2,155,1,204,0,245,2,81,0,138,2,180,1,207,1,14,1,123,2,175,255,157,1,62,2,18,3,240,253,71,1,72,1,201,0,201,0,201,0,201,0,62,2,6,2,7,2,130,2,239,253,160,1,122,2,125,1,126,1,105,3,169,1,169,1,1,2,2,2,3,2,4,2,168,255,99,0,230,0,162,1,46,3,166,255,208,1,237,2,115,2,152,2,126,3,121,3,237,1,188,3,189,1,236,0,236,0,242,0,62,2,166,1,233,253,168,255,137,2,167,1,168,255,170,1,166,255,168,255,180,1,166,255,185,1,207,1,166,255,232,0,92,2,81,1,115,0,190,255,115,0,54,254,156,255,192,1,100,2,62,2,120,2,143,1,157,2,85,2,198,1,157,2,50,254,157,2,204,1,241,1,210,1,81,0,242,1,243,1,148,3,206,1,67,0,164,255,152,2,254,1,152,2,204,0,204,0,255,1,17,2,135,2,124,2,73,2,57,1,152,1,126,2,45,1,46,1,241,2,88,2,129,2,177,2,89,2,233,253,93,2,240,253,238,1,54,254,54,254,185,2,134,2,240,253,116,2,144,1,145,1,125,2,239,253,152,2,50,254,50,254,115,0,146,2,239,253,215,1,216,1,217,1,218,1,190,2,237,1,204,0,169,2,204,0,204,0,242,1,243,1,204,0,204,0,192,2,127,2,128,2,81,0,153,1,154,1,47,1,48,1,81,0,81,0,175,255,233,253,145,2,233,253,233,253,190,2,204,0,237,253,166,2,197,2,132,2,155,2,197,2,177,2,177,2,188,2,160,255,33,1,204,2,159,2,190,2,178,3,161,2,194,2,162,2,165,2,194,2,164,2,3,255,197,2,190,2,179,2,182,2,83,2,183,2,217,2,220,2,168,255,220,2,213,2,208,2,188,2,180,2,194,2,234,2,146,2,220,2,215,1,216,1,217,1,218,1,81,0,204,0,204,0,204,0,204,0,81,0,204,0,204,0,230,0,248,2,204,0,187,1,81,0,33,1,190,2,204,0,12,2,169,1,37,3,218,2,236,0,207,1,114,3,19,2,211,1,253,2,25,3,27,3,116,3,242,2,189,2,193,2,32,3,34,3,235,2,243,2,253,1,31,3,196,2,45,1,46,1,199,2,250,2,204,0,9,3,53,2,253,2,52,1,54,1,56,1,58,1,204,0,204,0,81,1,53,2,2,255,61,2,158,255,144,1,188,1,236,0,45,3,209,2,161,255,24,3,204,0,54,3,81,0,204,0,201,0,30,3,212,1,213,1,58,3,44,1,81,0,45,1,46,1,166,255,204,0,125,3,50,3,201,1,81,0,169,255,205,2,47,1,48,1,204,0,115,0,146,2,60,3,215,1,216,1,217,1,218,1,67,3,44,3,177,2,70,3,73,3,77,3,79,3,201,0,48,3,74,3,102,1,103,1,104,1,105,1,106,1,52,3,97,3,244,2,56,3,81,3,83,3,86,3,48,254,233,2,81,0,88,3,244,254,47,1,48,1,103,2,81,1,100,3,251,2,81,0,146,2,219,1,215,1,216,1,217,1,218,1,89,3,169,1,221,1,253,2,10,3,94,1,95,1,33,1,93,3,33,1,95,3,204,0,19,3,102,3,236,0,1,255,103,3,157,2,157,2,107,3,157,2,236,0,157,2,157,2,117,3,118,3,222,1,123,3,157,2,48,254,48,254,157,2,157,2,244,254,244,254,147,2,131,3,39,3,40,3,81,0,132,3,115,0,236,0,102,1,103,1,104,1,105,1,106,1,127,3,137,3,215,1,216,1,217,1,218,1,140,3,53,3,81,1,0,255,214,1,146,3,215,1,216,1,217,1,218,1,147,3,175,3,149,3,61,3,62,3,157,3,33,1,94,1,95,1,161,3,65,3,165,3,167,3,115,0,201,0,172,3,220,2,183,3,98,0,237,253,98,0,236,253,194,3,131,2,68,3,98,0,98,0,75,3,76,3,120,0,57,3,98,0,98,0,98,0,198,2,219,1,98,0,160,2,212,0,163,2,5,3,220,1,221,1,8,3,101,1,102,1,103,1,104,1,105,1,106,1,233,254,182,3,236,0,247,2,38,3,13,3,159,3,185,3,236,0,248,1,181,3,45,1,46,1,141,3,98,0,170,2,222,1,204,0,81,0,223,1,197,0,104,3,214,1,2,3,215,1,216,1,217,1,218,1,98,0,106,3,138,3,150,3,224,1,115,3,157,2,157,2,157,2,157,2,108,3,157,2,157,2,242,0,135,1,157,2,0,0,157,2,157,2,233,254,233,254,0,0,0,0,204,0,180,1,0,0,91,2,220,2,190,2,0,0,47,1,48,1,130,1,131,1,0,0,219,1,51,1,45,1,46,1,62,2,0,0,220,1,221,1,53,1,45,1,46,1,0,0,98,0,0,0,98,0,151,3,152,3,0,0,55,1,45,1,46,1,0,0,0,0,0,0,157,2,157,2,157,2,157,2,157,2,0,0,153,3,222,1,154,3,0,0,223,1,155,3,157,2,0,0,0,0,214,1,0,0,215,1,216,1,217,1,218,1,81,0,0,0,0,0,0,0,47,1,48,1,232,0,0,0,81,0,0,0,0,0,47,1,48,1,0,0,0,0,33,1,204,0,0,0,0,0,204,0,204,0,47,1,48,1,0,0,0,0,204,0,204,0,238,1,45,1,46,1,0,0,0,0,0,0,81,0,81,0,219,1,0,0,250,1,45,1,46,1,0,0,220,1,221,1,0,0,81,0,251,1,45,1,46,1,0,0,243,0,243,0,81,0,0,0,243,0,204,0,0,0,133,3,98,0,135,3,252,1,45,1,46,1,136,3,81,0,81,0,0,0,222,1,98,0,98,0,223,1,81,0,0,0,142,3,0,0,145,3,47,1,48,1,0,0,8,1,10,1,0,0,0,0,210,2,243,0,243,0,47,1,48,1,81,0,81,0,239,1,0,0,0,0,0,0,47,1,48,1,62,1,63,1,249,1,0,0,0,0,249,1,0,0,249,1,92,3,249,1,0,0,249,1,47,1,48,1,0,0,98,0,0,0,98,0,98,0,0,0,0,0,98,0,98,0,0,0,0,0,204,0,98,0,0,0,0,0,0,0,0,0,98,0,98,0,0,0,0,0,0,0,81,0,81,0,0,0,98,0,0,0,0,0,0,0,0,0,111,3,186,3,0,0,0,0,81,0,187,3,0,0,189,3,0,0,0,0,0,0,0,0,190,3,214,1,0,0,215,1,216,1,217,1,218,1,0,0,0,0,78,3,80,3,81,1,82,3,0,0,84,3,85,3,0,0,0,0,0,0,0,0,90,3,0,0,198,3,94,3,96,3,0,0,94,1,95,1,98,0,98,0,98,0,98,0,98,0,98,0,98,0,98,0,0,0,0,0,98,0,0,0,98,0,0,0,219,1,98,0,0,0,0,0,81,0,0,0,220,1,221,1,0,0,0,0,81,0,0,0,81,0,0,0,0,0,81,0,0,0,0,0,0,0,99,1,100,1,101,1,102,1,103,1,104,1,105,1,106,1,0,0,0,0,98,0,0,0,222,1,0,0,0,0,223,1,0,0,0,0,98,0,98,0,0,0,0,0,146,2,0,0,215,1,216,1,217,1,218,1,204,0,0,0,0,0,0,0,98,0,0,0,98,0,98,0,146,2,0,0,215,1,216,1,217,1,218,1,98,0,0,0,0,0,0,0,98,0,0,0,0,0,0,0,98,0,0,0,0,0,0,0,0,0,98,0,0,0,0,0,0,0,243,0,243,0,243,0,62,1,147,2,66,1,67,1,68,1,69,1,70,1,148,2,0,0,0,0,0,0,243,0,0,0,243,0,243,0,147,2,0,0,160,3,162,3,163,3,164,3,71,3,166,3,168,3,0,0,98,0,171,3,0,0,173,3,174,3,0,0,0,0,0,0,0,0,98,0,0,0,0,0,0,0,78,0,0,0,78,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,213,0,0,0,0,0,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,3,193,3,195,3,196,3,197,3,0,0,0,0,0,0,0,0,0,0,98,0,0,0,199,3,0,0,78,0,0,0,0,0,0,0,0,0,0,0,243,0,0,0,0,0,0,0,0,0,21,2,24,2,25,2,26,2,27,2,28,2,29,2,30,2,31,2,32,2,33,2,34,2,35,2,36,2,37,2,38,2,39,2,40,2,41,2,42,2,43,2,44,2,45,2,46,2,47,2,48,2,49,2,0,0,243,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,2,72,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,243,0,0,0,78,0,0,0,0,0,95,0,0,0,95,0,0,0,0,0,0,0,0,0,94,2,0,0,243,0,0,0,70,2,72,2,0,0,0,0,0,0,0,0,0,0,243,0,0,0,0,0,0,0,98,0,98,0,0,0,243,0,0,0,0,0,0,0,0,0,0,0,243,0,243,0,0,0,0,0,243,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,95,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,2,0,0,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,243,0,0,0,0,0,243,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,243,0,0,0,0,0,0,0,0,0,0,0,0,0,26,1,78,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,94,0,243,0,94,0,117,0,117,0,117,0,0,0,0,0,0,0,0,0,0,0,216,0,0,0,0,0,95,0,0,0,0,0,0,0,98,0,0,0,0,0,0,0,0,0,0,0,171,2,172,2,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,0,243,0,0,0,98,0,98,0,0,0,0,0,0,0,0,0,98,0,98,0,0,0,94,0,0,0,0,0,0,0,34,1,98,0,98,0,0,0,78,0,0,0,0,0,0,0,0,0,78,0,78,0,0,0,98,0,0,0,0,0,0,0,0,0,0,0,0,0,98,0,0,0,0,0,98,0,0,0,34,1,0,0,0,0,0,0,0,0,0,0,0,0,98,0,98,0,0,0,0,0,0,0,0,0,0,0,98,0,97,0,0,0,97,0,118,0,118,0,0,0,0,0,0,0,0,0,0,0,0,0,217,0,0,0,95,0,0,0,0,0,98,0,98,0,0,0,0,0,94,0,0,0,0,0,78,0,0,0,0,0,243,0,0,0,78,0,0,0,0,0,0,0,0,0,0,0,0,0,78,0,0,0,0,0,20,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,97,0,0,0,0,0,98,0,35,1,0,0,0,0,0,0,0,0,243,0,0,0,0,0,243,0,0,0,98,0,98,0,0,0,0,0,243,0,243,0,0,0,0,0,0,0,0,0,0,0,0,0,98,0,0,0,35,1,0,0,0,0,95,0,0,0,0,0,0,0,0,0,95,0,95,0,0,0,0,0,0,0,163,1,164,1,165,1,78,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,78,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,78,0,0,0,94,0,97,0,0,0,0,0,0,0,0,0,0,0,0,0,243,0,0,0,0,0,0,0,94,2,23,3,0,0,26,3,28,3,0,0,98,0,0,0,0,0,33,3,35,3,0,0,98,0,0,0,98,0,95,0,0,0,98,0,0,0,41,3,95,0,0,0,0,0,78,0,0,0,0,0,0,0,95,0,0,0,0,0,0,0,0,0,78,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26,3,28,3,0,0,33,3,35,3,0,0,0,0,0,0,98,0,0,0,0,0,94,0,243,0,0,0,0,0,243,0,94,0,94,0,0,0,11,2,0,0,0,0,0,0,0,0,22,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,1,97,0,78,0,0,0,0,0,0,0,95,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,95,0,0,0,0,0,243,0,0,0,0,0,0,0,99,3,95,0,0,0,0,0,0,0,0,0,0,0,101,3,0,0,0,0,0,0,0,0,0,0,94,0,0,0,0,0,0,0,0,0,94,0,0,0,0,0,0,0,0,0,0,0,0,0,94,0,34,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,101,3,0,0,0,0,95,0,0,0,0,0,0,0,0,0,243,0,97,0,0,0,0,0,95,0,22,2,97,0,97,0,0,0,0,0,0,0,117,2,119,2,0,0,0,0,26,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35,1,0,0,0,0,0,0,0,0,0,0,78,0,0,0,0,0,0,0,0,0,0,0,94,0,0,0,0,0,0,0,0,0,0,0,0,0,119,2,94,0,0,0,26,1,0,0,0,0,95,0,0,0,0,0,94,0,0,0,0,0,0,0,0,0,0,0,97,0,0,0,0,0,0,0,0,0,97,0,0,0,0,0,0,0,0,0,0,0,0,0,97,0,35,1,0,0,0,0,0,0,158,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,243,0,0,0,0,0,0,0,0,0,0,0,94,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,94,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,178,2,0,0,0,0,34,1,0,0,34,1,0,0,0,0,0,0,0,0,0,0,78,0,0,0,0,0,0,0,0,0,97,0,0,0,0,0,78,0,0,0,0,0,0,0,0,0,97,0,0,0,0,0,20,2,0,0,0,0,0,0,0,0,97,0,95,0,0,0,94,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,78,0,78,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,78,0,0,0,0,0,0,0,0,0,0,0,0,0,78,0,0,0,0,0,0,0,34,1,0,0,0,0,97,0,0,0,0,0,0,0,0,0,78,0,78,0,0,0,0,0,97,0,0,0,214,2,78,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35,1,0,0,35,1,0,0,0,0,0,0,78,0,78,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,238,2,0,0,0,0,240,2,0,0,0,0,0,0,0,0,0,0,119,2,26,1,0,0,0,0,0,0,95,0,97,0,0,0,0,0,0,0,94,0,0,0,0,0,95], "i8", ALLOC_NONE, Runtime.GLOBAL_BASE+20480);
-/* memory initializer */ allocate([78,0,78,0,0,0,0,0,0,0,0,0,0,0,0,0,110,3,0,0,0,0,0,0,78,0,35,1,95,0,95,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,95,0,0,0,0,0,21,3,0,0,0,0,0,0,95,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,95,0,95,0,0,0,0,0,0,0,0,0,0,0,95,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,78,0,0,0,95,0,95,0,0,0,0,0,78,0,0,0,78,0,97,0,94,0,78,0,0,0,0,0,0,0,0,0,0,0,0,0,94,0,64,3,0,0,0,0,66,3,0,0,0,0,34,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,94,0,94,0,0,0,95,0,95,0,0,0,213,253,0,0,0,0,0,0,0,0,94,0,0,0,0,0,0,0,95,0,98,3,0,0,94,0,213,253,213,253,213,253,213,253,213,253,213,253,0,0,213,253,0,0,0,0,0,0,94,0,94,0,213,253,213,253,0,0,0,0,0,0,94,0,0,0,0,0,0,0,0,0,0,0,213,253,213,253,0,0,213,253,213,253,213,253,213,253,213,253,0,0,0,0,0,0,94,0,94,0,97,0,0,0,0,0,0,0,0,0,0,0,0,0,26,1,97,0,0,0,0,0,0,0,0,0,95,0,117,0,35,1,0,0,0,0,0,0,95,0,0,0,95,0,0,0,0,0,95,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,97,0,97,0,0,0,0,0,0,0,213,253,0,0,0,0,0,0,94,0,94,0,97,0,0,0,0,0,0,0,0,0,0,0,112,3,97,0,0,0,0,0,94,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,97,0,97,0,0,0,0,0,0,0,0,0,0,0,97,0,0,0,0,0,0,0,0,0,0,0,50,2,51,2,0,0,0,0,52,2,0,0,0,0,213,253,213,253,0,0,213,253,97,0,97,0,255,0,213,253,0,0,213,253,213,253,164,0,165,0,166,0,167,0,168,0,169,0,170,0,171,0,172,0,118,0,0,0,173,0,174,0,0,0,94,0,175,0,176,0,177,0,178,0,0,0,94,0,0,0,94,0,0,0,0,0,94,0,0,0,0,0,0,0,179,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,97,0,97,0,0,0,0,0,0,0,0,0,0,0,0,0,113,3,0,0,0,0,0,0,97,0,180,0,181,0,182,0,183,0,184,0,185,0,186,0,187,0,188,0,189,0,0,0,190,0,191,0,0,0,0,0,0,0,0,0,0,0,0,0,192,0,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,97,0,0,0,0,0,0,0,0,0,0,0,97,0,0,0,97,0,213,253,4,0,97,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,15,0,0,0,16,0,17,0,18,0,19,0,0,0,0,0,0,0,0,0,0,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,0,0,0,0,27,0,0,0,0,0,0,0,0,0,0,0,28,0,29,0,30,0,31,0,32,0,0,0,33,0,34,0,35,0,36,0,37,0,38,0,0,0,39,0,40,0,41,0,0,0,0,0,42,0,0,0,0,0,43,0,44,0,0,0,45,0,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,47,0,0,0,0,0,48,0,49,0,0,0,50,0,51,0,234,254,52,0,0,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,0,0,0,0,60,0,234,254,234,254,234,254,234,254,234,254,234,254,0,0,234,254,0,0,0,0,202,2,0,0,0,0,0,0,234,254,234,254,234,254,0,0,0,0,61,0,62,0,63,0,0,0,0,0,234,254,234,254,0,0,234,254,234,254,234,254,234,254,234,254,213,253,213,253,0,0,0,0,0,0,81,1,82,1,83,1,84,1,85,1,86,1,87,1,88,1,89,1,90,1,91,1,92,1,93,1,0,0,0,0,94,1,95,1,0,0,0,0,0,0,0,0,234,254,234,254,234,254,234,254,234,254,234,254,234,254,234,254,234,254,234,254,234,254,234,254,234,254,0,0,0,0,234,254,234,254,234,254,0,0,225,2,234,254,0,0,0,0,0,0,0,0,96,1,234,254,97,1,98,1,99,1,100,1,101,1,102,1,103,1,104,1,105,1,106,1,234,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,157,255,234,254,234,254,234,254,234,254,234,254,234,254,234,254,234,254,234,254,234,254,234,254,234,254,0,0,0,0,120,254,0,0,0,0,234,254,234,254,234,254,234,254,0,0,0,0,234,254,234,254,234,254,234,254,120,254,120,254,120,254,120,254,120,254,120,254,0,0,120,254,0,0,0,0,184,2,0,0,0,0,120,254,120,254,120,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,120,254,120,254,0,0,120,254,120,254,120,254,120,254,120,254,0,0,0,0,0,0,0,0,0,0,81,1,82,1,83,1,84,1,85,1,86,1,87,1,88,1,89,1,90,1,91,1,92,1,93,1,0,0,0,0,94,1,95,1,0,0,0,0,0,0,0,0,120,254,120,254,120,254,120,254,120,254,120,254,120,254,120,254,120,254,120,254,120,254,120,254,120,254,0,0,0,0,120,254,120,254,120,254,0,0,0,0,120,254,0,0,0,0,0,0,0,0,96,1,120,254,97,1,98,1,99,1,100,1,101,1,102,1,103,1,104,1,105,1,106,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26,255,120,254,0,0,120,254,120,254,120,254,120,254,120,254,120,254,120,254,120,254,120,254,120,254,0,0,0,0,243,254,0,0,120,254,120,254,120,254,120,254,120,254,0,0,255,0,120,254,120,254,120,254,120,254,243,254,243,254,243,254,243,254,243,254,243,254,0,0,243,254,0,0,0,0,184,2,0,0,0,0,0,0,243,254,243,254,243,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,243,254,243,254,0,0,243,254,243,254,243,254,243,254,243,254,0,0,0,0,0,0,0,0,0,0,81,1,82,1,83,1,84,1,85,1,86,1,87,1,88,1,89,1,90,1,91,1,92,1,93,1,0,0,0,0,94,1,95,1,0,0,0,0,0,0,0,0,243,254,243,254,243,254,243,254,243,254,243,254,243,254,243,254,243,254,243,254,243,254,243,254,243,254,0,0,0,0,243,254,243,254,243,254,0,0,0,0,243,254,0,0,0,0,0,0,0,0,96,1,243,254,97,1,98,1,99,1,100,1,101,1,102,1,103,1,104,1,105,1,106,1,243,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,243,254,243,254,243,254,243,254,243,254,243,254,243,254,243,254,243,254,243,254,243,254,243,254,0,0,0,0,213,253,0,0,0,0,243,254,243,254,243,254,243,254,0,0,0,0,243,254,243,254,243,254,243,254,213,253,213,253,213,253,213,253,213,253,213,253,0,0,213,253,0,0,0,0,0,0,0,0,0,0,213,253,213,253,213,253,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,213,253,213,253,0,0,213,253,213,253,213,253,213,253,213,253,0,0,0,0,0,0,0,0,0,0,81,1,82,1,83,1,84,1,85,1,86,1,87,1,88,1,89,1,90,1,91,1,92,1,93,1,0,0,0,0,94,1,95,1,0,0,0,0,0,0,0,0,213,253,213,253,213,253,213,253,213,253,213,253,213,253,213,253,213,253,213,253,213,253,213,253,213,253,0,0,0,0,213,253,213,253,213,253,0,0,0,0,213,253,0,0,0,0,0,0,0,0,96,1,213,253,97,1,98,1,99,1,100,1,101,1,102,1,103,1,104,1,105,1,106,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,213,253,0,0,213,253,213,253,213,253,213,253,213,253,213,253,213,253,213,253,213,253,213,253,0,0,0,0,227,254,0,0,213,253,213,253,213,253,213,253,213,253,0,0,255,0,213,253,213,253,213,253,213,253,227,254,227,254,227,254,227,254,227,254,227,254,0,0,227,254,0,0,0,0,0,0,0,0,0,0,0,0,227,254,227,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,227,254,227,254,0,0,227,254,227,254,227,254,227,254,227,254,0,0,0,0,0,0,0,0,0,0,81,1,82,1,83,1,84,1,85,1,86,1,87,1,88,1,89,1,90,1,91,1,212,253,212,253,0,0,0,0,94,1,95,1,0,0,0,0,0,0,0,0,227,254,227,254,227,254,227,254,227,254,227,254,227,254,227,254,227,254,227,254,227,254,227,254,227,254,0,0,0,0,227,254,227,254,227,254,0,0,0,0,227,254,0,0,0,0,0,0,0,0,0,0,227,254,97,1,98,1,99,1,100,1,101,1,102,1,103,1,104,1,105,1,106,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,227,254,0,0,227,254,227,254,227,254,227,254,227,254,227,254,227,254,227,254,227,254,227,254,0,0,0,0,233,253,0,0,0,0,227,254,227,254,227,254,227,254,0,0,252,0,227,254,227,254,227,254,227,254,233,253,233,253,233,253,0,0,233,253,233,253,0,0,233,253,0,0,0,0,0,0,0,0,0,0,233,253,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,233,253,233,253,0,0,233,253,233,253,233,253,233,253,233,253,0,0,81,1,82,1,83,1,84,1,85,1,86,1,87,1,88,1,89,1,90,1,91,1,92,1,93,1,0,0,0,0,94,1,95,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,233,253,233,253,233,253,233,253,233,253,233,253,233,253,233,253,233,253,233,253,233,253,233,253,233,253,0,0,0,0,233,253,233,253,233,253,0,0,186,2,0,0,96,1,0,0,97,1,98,1,99,1,100,1,101,1,102,1,103,1,104,1,105,1,106,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,159,255,233,253,232,0,233,253,233,253,233,253,233,253,233,253,233,253,233,253,233,253,233,253,233,253,0,0,0,0,234,254,0,0,233,253,233,253,233,253,233,253,167,255,0,0,0,0,233,253,0,0,233,253,233,253,234,254,234,254,234,254,0,0,234,254,234,254,0,0,234,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,234,254,234,254,0,0,234,254,234,254,234,254,234,254,234,254,81,1,82,1,83,1,84,1,85,1,86,1,87,1,88,1,0,0,90,1,91,1,0,0,0,0,0,0,0,0,94,1,95,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,234,254,234,254,234,254,234,254,234,254,234,254,234,254,234,254,234,254,234,254,234,254,234,254,234,254,0,0,0,0,234,254,234,254,234,254,0,0,187,2,0,0,0,0,97,1,98,1,99,1,100,1,101,1,102,1,103,1,104,1,105,1,106,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,157,255,234,254,0,0,234,254,234,254,234,254,234,254,234,254,234,254,234,254,234,254,234,254,234,254,0,0,0,0,0,0,0,0,0,0,234,254,234,254,234,254,165,255,0,0,0,0,234,254,0,0,234,254,234,254,12,1,0,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,14,0,213,253,213,253,213,253,0,0,0,0,213,253,15,0,0,0,16,0,17,0,18,0,19,0,0,0,0,0,0,0,0,0,0,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,0,0,0,0,27,0,0,0,0,0,0,0,0,0,0,0,28,0,0,0,30,0,31,0,32,0,0,0,33,0,34,0,35,0,36,0,37,0,38,0,0,0,39,0,40,0,41,0,0,0,0,0,42,0,0,0,0,0,43,0,44,0,0,0,45,0,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,47,0,0,0,0,0,48,0,49,0,0,0,50,0,51,0,0,0,52,0,0,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,0,0,0,0,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,61,0,62,0,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,213,253,213,253,12,1,0,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,14,0,0,0,0,0,213,253,0,0,213,253,213,253,15,0,0,0,16,0,17,0,18,0,19,0,0,0,0,0,0,0,0,0,0,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,0,0,0,0,27,0,0,0,0,0,0,0,0,0,0,0,28,0,0,0,30,0,31,0,32,0,0,0,33,0,34,0,35,0,36,0,37,0,38,0,0,0,39,0,40,0,41,0,0,0,0,0,42,0,0,0,0,0,43,0,44,0,0,0,45,0,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,47,0,0,0,0,0,48,0,49,0,0,0,50,0,51,0,0,0,52,0,0,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,0,0,0,0,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,61,0,62,0,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,213,253,213,253,12,1,0,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,14,0,0,0,0,0,213,253,0,0,0,0,213,253,15,0,213,253,16,0,17,0,18,0,19,0,0,0,0,0,0,0,0,0,0,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,0,0,0,0,27,0,0,0,0,0,0,0,0,0,0,0,28,0,0,0,30,0,31,0,32,0,0,0,33,0,34,0,35,0,36,0,37,0,38,0,0,0,39,0,40,0,41,0,0,0,0,0,42,0,0,0,0,0,43,0,44,0,0,0,45,0,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,47,0,0,0,0,0,48,0,49,0,0,0,50,0,51,0,0,0,52,0,0,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,0,0,0,0,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,61,0,62,0,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,213,253,213,253,12,1,0,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,14,0,0,0,0,0,213,253,0,0,0,0,213,253,15,0,0,0,16,0,17,0,18,0,19,0,0,0,0,0,0,0,0,0,0,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,0,0,0,0,27,0,0,0,0,0,0,0,0,0,0,0,28,0,0,0,30,0,31,0,32,0,0,0,33,0,34,0,35,0,36,0,37,0,38,0,0,0,39,0,40,0,41,0,0,0,0,0,42,0,0,0,0,0,43,0,44,0,0,0,45,0,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,47,0,0,0,0,0,48,0,49,0,0,0,50,0,51,0,0,0,52,0,0,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,0,0,0,0,60,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,14,0,0,0,0,0,61,0,62,0,63,0,0,0,15,0,0,0,16,0,17,0,18,0,19,0,0,0,0,0,0,0,213,253,213,253,20,0,21,0,22,0,23,0,24,0,25,0,26,0,0,0,0,0,27,0,0,0,0,0,0,0,0,0,0,0,28,0,29,0,30,0,31,0,32,0,0,0,33,0,34,0,35,0,36,0,37,0,38,0,0,0,39,0,40,0,41,0,0,0,0,0,42,0,0,0,0,0,43,0,44,0,0,0,45,0,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,47,0,0,0,0,0,48,0,49,0,0,0,50,0,51,0,0,0,52,0,0,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,0,0,0,0,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,61,0,62,0,63,0,0,0,0,0,213,253,0,0,0,0,0,0,0,0,0,0,0,0,0,0,213,253,213,253,12,1,0,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,14,0,0,0,213,253,213,253,0,0,0,0,0,0,15,0,0,0,16,0,17,0,18,0,19,0,0,0,0,0,0,0,0,0,0,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,0,0,0,0,27,0,0,0,0,0,0,0,0,0,0,0,28,0,0,0,30,0,31,0,32,0,0,0,33,0,34,0,35,0,36,0,37,0,38,0,0,0,39,0,40,0,41,0,0,0,0,0,42,0,0,0,0,0,43,0,44,0,0,0,45,0,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,47,0,0,0,0,0,48,0,49,0,0,0,50,0,51,0,0,0,52,0,0,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,0,0,0,0,60,0,0,0,0,0,0,0,0,0,0,0,12,1,0,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,14,0,0,0,0,0,61,0,62,0,63,0,0,0,15,0,0,0,16,0,17,0,18,0,19,0,0,0,0,0,0,0,213,253,213,253,20,0,21,0,22,0,23,0,24,0,25,0,26,0,0,0,0,0,27,0,0,0,0,0,0,0,0,0,0,0,28,0,0,0,30,0,31,0,32,0,0,0,33,0,34,0,35,0,36,0,37,0,38,0,0,0,39,0,40,0,41,0,0,0,0,0,42,0,0,0,0,0,43,0,44,0,0,0,45,0,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,47,0,0,0,0,0,13,1,49,0,0,0,50,0,51,0,0,0,52,0,0,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,0,0,0,0,60,0,0,0,0,0,0,0,0,0,0,0,12,1,0,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,14,0,0,0,0,0,61,0,62,0,63,0,0,0,15,0,0,0,16,0,17,0,18,0,19,0,0,0,213,253,0,0,213,253,213,253,20,0,21,0,22,0,23,0,24,0,25,0,26,0,0,0,0,0,27,0,0,0,0,0,0,0,0,0,0,0,28,0,0,0,30,0,31,0,32,0,0,0,33,0,34,0,35,0,36,0,37,0,38,0,0,0,39,0,40,0,41,0,0,0,0,0,42,0,0,0,0,0,43,0,44,0,0,0,45,0,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,47,0,0,0,0,0,48,0,49,0,0,0,50,0,51,0,0,0,52,0,0,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,0,0,0,0,60,0,0,0,0,0,0,0,0,0,0,0,12,1,0,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,14,0,0,0,0,0,61,0,62,0,63,0,0,0,15,0,0,0,16,0,17,0,18,0,19,0,0,0,213,253,0,0,213,253,213,253,20,0,21,0,22,0,23,0,24,0,25,0,26,0,0,0,0,0,27,0,0,0,0,0,0,0,0,0,0,0,28,0,0,0,30,0,31,0,32,0,0,0,33,0,34,0,35,0,36,0,37,0,38,0,0,0,39,0,40,0,41,0,0,0,0,0,42,0,0,0,0,0,43,0,44,0,0,0,45,0,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,47,0,0,0,0,0,48,0,49,0,0,0,50,0,51,0,0,0,52,0,0,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,0,0,0,0,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,61,0,62,0,63,0,0,0,0,0,213,253,0,0,0,0,0,0,0,0,0,0,0,0,0,0,213,253,213,253,12,1,0,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,14,0,0,0,0,0,213,253,0,0,0,0,0,0,15,0,0,0,16,0,17,0,18,0,19,0,0,0,0,0,0,0,0,0,0,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,0,0,0,0,27,0,0,0,0,0,0,0,0,0,0,0,28,0,0,0,30,0,31,0,32,0,0,0,33,0,34,0,35,0,36,0,37,0,38,0,0,0,39,0,40,0,41,0,0,0,0,0,42,0,0,0,0,0,43,0,44,0,0,0,45,0,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,47,0,0,0,0,0,48,0,49,0,0,0,50,0,51,0,0,0,52,0,0,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,0,0,0,0,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,0,0,0,0,0,0,61,0,62,0,63,0,0,0,15,0,0,0,16,0,17,0,18,0,19,0,0,0,0,0,0,0,213,253,213,253,20,0,21,0,22,0,23,0,24,0,25,0,26,0,0,0,0,0,106,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,0,32,0,0,0,33,0,34,0,35,0,36,0,37,0,38,0,238,0,39,0,40,0,41,0,0,0,0,0,42,0,0,0,0,0,43,0,44,0,0,0,45,0,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,200,0,0,0,0,0,111,0,49,0,0,0,50,0,51,0,0,0,239,0,240,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,0,0,0,0,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,0,0,0,0,0,0,61,0,241,0,63,0,0,0,15,0,0,0,16,0,17,0,18,0,19,0,0,0,0,0,0,0,0,0,232,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,0,0,0,0,27,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,0,32,0,0,0,33,0,34,0,35,0,36,0,37,0,38,0,0,0,39,0,40,0,41,0,0,0,0,0,42,0,0,0,0,0,43,0,44,0,0,0,45,0,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,200,0,0,0,0,0,111,0,49,0,0,0,50,0,51,0,0,0,0,0,0,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,0,0,0,0,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,0,0,0,0,0,0,61,0,62,0,63,0,0,0,15,0,0,0,16,0,17,0,18,0,19,0,0,0,0,0,0,0,231,0,232,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,0,0,0,0,27,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,0,32,0,0,0,33,0,34,0,35,0,36,0,37,0,38,0,0,0,39,0,40,0,41,0,0,0,0,0,42,0,0,0,0,0,43,0,44,0,0,0,45,0,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,200,0,0,0,0,0,111,0,49,0,0,0,50,0,51,0,0,0,0,0,0,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,0,0,0,0,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,14,0,0,0,0,0,61,0,62,0,63,0,0,0,15,0,0,0,16,0,17,0,18,0,19,0,0,0,0,0,0,0,0,0,232,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,0,0,0,0,27,0,0,0,0,0,0,0,0,0,0,0,28,0,29,0,30,0,31,0,32,0,0,0,33,0,34,0,35,0,36,0,37,0,38,0,0,0,39,0,40,0,41,0,0,0,0,0,42,0,0,0,0,0,43,0,44,0,0,0,45,0,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,47,0,0,0,0,0,48,0,49,0,0,0,50,0,51,0,0,0,52,0,0,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,0,0,0,0,60,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,14,0,0,0,0,0,0,0,61,0,62,0,63,0,15,0,0,0,16,0,17,0,18,0,19,0,0,0,0,0,0,0,0,0,162,1,20,0,21,0,22,0,23,0,24,0,25,0,26,0,0,0,0,0,27,0,0,0,0,0,0,0,0,0,0,0,28,0,0,0,30,0,31,0,32,0,0,0,33,0,34,0,35,0,36,0,37,0,38,0,0,0,39,0,40,0,41,0,0,0,0,0,42,0,0,0,0,0,43,0,44,0,0,0,45,0,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,47,0,0,0,0,0,48,0,49,0,0,0,50,0,51,0,0,0,52,0,0,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,0,0,0,0,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,61,0,62,0,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,162,1,121,0,122,0,123,0,124,0,125,0,126,0,127,0,128,0,129,0,130,0,131,0,132,0,133,0,134,0,135,0,136,0,137,0,138,0,139,0,140,0,141,0,142,0,143,0,144,0,0,0,0,0,0,0,145,0,146,0,147,0,148,0,149,0,150,0,151,0,152,0,153,0,154,0,0,0,0,0,0,0,0,0,0,0,155,0,156,0,157,0,158,0,159,0,160,0,161,0,162,0,35,0,36,0,163,0,38,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,164,0,165,0,166,0,167,0,168,0,169,0,170,0,171,0,172,0,0,0,0,0,173,0,174,0,0,0,0,0,175,0,176,0,177,0,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,179,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,180,0,181,0,182,0,183,0,184,0,185,0,186,0,187,0,188,0,189,0,0,0,190,0,191,0,0,0,0,0,0,0,0,0,0,0,0,0,192,0,193,0,240,253,240,253,240,253,240,253,240,253,240,253,240,253,240,253,240,253,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,253,0,0,240,253,240,253,240,253,240,253,0,0,240,253,0,0,0,0,0,0,240,253,240,253,240,253,240,253,240,253,240,253,240,253,0,0,0,0,240,253,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,253,240,253,0,0,240,253,240,253,240,253,240,253,240,253,240,253,240,253,240,253,240,253,240,253,0,0,0,0,240,253,0,0,0,0,240,253,240,253,0,0,240,253,240,253,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,253,0,0,0,0,240,253,240,253,0,0,240,253,240,253,0,0,240,253,240,253,240,253,240,253,240,253,240,253,240,253,240,253,240,253,0,0,0,0,240,253,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,253,240,253,240,253,0,0,240,253,0,0,0,0,0,0,0,0,0,0,240,253,239,253,239,253,239,253,239,253,239,253,239,253,239,253,239,253,239,253,0,0,0,0,0,0,0,0,0,0,0,0,0,0,239,253,0,0,239,253,239,253,239,253,239,253,0,0,239,253,0,0,0,0,0,0,239,253,239,253,239,253,239,253,239,253,239,253,239,253,0,0,0,0,239,253,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,239,253,239,253,0,0,239,253,239,253,239,253,239,253,239,253,239,253,239,253,239,253,239,253,239,253,0,0,0,0,239,253,0,0,0,0,239,253,239,253,0,0,239,253,239,253,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,239,253,0,0,0,0,239,253,239,253,0,0,239,253,239,253,0,0,239,253,239,253,239,253,239,253,239,253,239,253,239,253,239,253,239,253,0,0,0,0,239,253,0,0,0,0,0,0,0,0,0,0,0,0,237,253,237,253,237,253,237,253,237,253,237,253,237,253,237,253,237,253,0,0,0,0,0,0,0,0,239,253,239,253,239,253,237,253,239,253,237,253,237,253,237,253,237,253,0,0,239,253,0,0,0,0,0,0,237,253,237,253,237,253,237,253,237,253,237,253,237,253,0,0,0,0,237,253,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,237,253,237,253,0,0,237,253,237,253,237,253,237,253,237,253,237,253,237,253,237,253,237,253,237,253,0,0,0,0,237,253,0,0,0,0,237,253,237,253,0,0,237,253,237,253,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,237,253,224,2,0,0,237,253,237,253,0,0,237,253,237,253,0,0,237,253,237,253,237,253,237,253,237,253,237,253,237,253,237,253,237,253,0,0,0,0,237,253,0,0,0,0,0,0,0,0,0,0,0,0,159,255,235,253,235,253,235,253,235,253,235,253,235,253,235,253,235,253,235,253,0,0,0,0,0,0,237,253,237,253,237,253,0,0,235,253,0,0,235,253,235,253,235,253,235,253,237,253,0,0,0,0,0,0,0,0,235,253,235,253,235,253,235,253,235,253,235,253,235,253,0,0,0,0,235,253,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,235,253,235,253,0,0,235,253,235,253,235,253,235,253,235,253,235,253,235,253,235,253,235,253,235,253,0,0,0,0,235,253,0,0,0,0,235,253,235,253,0,0,235,253,235,253,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,235,253,0,0,0,0,235,253,235,253,0,0,235,253,235,253,0,0,235,253,235,253,235,253,235,253,235,253,235,253,235,253,235,253,235,253,0,0,0,0,235,253,0,0,0,0,0,0,0,0,0,0,0,0,234,253,234,253,234,253,234,253,234,253,234,253,234,253,234,253,234,253,0,0,0,0,0,0,0,0,235,253,235,253,235,253,234,253,0,0,234,253,234,253,234,253,234,253,0,0,235,253,0,0,0,0,0,0,234,253,234,253,234,253,234,253,234,253,234,253,234,253,0,0,0,0,234,253,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,234,253,234,253,0,0,234,253,234,253,234,253,234,253,234,253,234,253,234,253,234,253,234,253,234,253,0,0,0,0,234,253,0,0,0,0,234,253,234,253,0,0,234,253,234,253,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,234,253,0,0,0,0,234,253,234,253,0,0,234,253,234,253,0,0,234,253,234,253,234,253,234,253,234,253,234,253,234,253,234,253,234,253,0,0,0,0,234,253,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,234,253,234,253,234,253,0,0,0,0,0,0,0,0,0,0,0,0,0,0,234,253,121,0,122,0,123,0,124,0,125,0,126,0,127,0,128,0,129,0,130,0,131,0,132,0,133,0,134,0,135,0,136,0,137,0,138,0,139,0,140,0,141,0,142,0,143,0,144,0,0,0,0,0,0,0,145,0,146,0,147,0,218,0,219,0,220,0,221,0,152,0,153,0,154,0,0,0,0,0,0,0,0,0,0,0,155,0,156,0,157,0,222,0,223,0,160,0,224,0,162,0,37,1,38,1,225,0,39,1,0,0,0,0,0,0,0,0,0,0,0,0,40,1,0,0,0,0,0,0,0,0,0,0,164,0,165,0,166,0,167,0,168,0,169,0,170,0,171,0,172,0,0,0,0,0,173,0,174,0,0,0,0,0,175,0,176,0,177,0,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,179,0,0,0,0,0,0,0,0,0,0,0,0,0,41,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,180,0,181,0,182,0,183,0,184,0,185,0,186,0,187,0,188,0,189,0,0,0,190,0,191,0,0,0,0,0,0,0,0,0,0,0,0,0,192,0,121,0,122,0,123,0,124,0,125,0,126,0,127,0,128,0,129,0,130,0,131,0,132,0,133,0,134,0,135,0,136,0,137,0,138,0,139,0,140,0,141,0,142,0,143,0,144,0,0,0,0,0,0,0,145,0,146,0,147,0,218,0,219,0,220,0,221,0,152,0,153,0,154,0,0,0,0,0,0,0,0,0,0,0,155,0,156,0,157,0,222,0,223,0,160,0,224,0,162,0,37,1,38,1,225,0,39,1,0,0,0,0,0,0,0,0,0,0,0,0,40,1,0,0,0,0,0,0,0,0,0,0,164,0,165,0,166,0,167,0,168,0,169,0,170,0,171,0,172,0,0,0,0,0,173,0,174,0,0,0,0,0,175,0,176,0,177,0,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,179,0,0,0,0,0,0,0,0,0,0,0,0,0,156,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,180,0,181,0,182,0,183,0,184,0,185,0,186,0,187,0,188,0,189,0,0,0,190,0,191,0,0,0,0,0,0,0,0,0,0,0,0,0,192,0,121,0,122,0,123,0,124,0,125,0,126,0,127,0,128,0,129,0,130,0,131,0,132,0,133,0,134,0,135,0,136,0,137,0,138,0,139,0,140,0,141,0,142,0,143,0,144,0,0,0,0,0,0,0,145,0,146,0,147,0,218,0,219,0,220,0,221,0,152,0,153,0,154,0,0,0,0,0,0,0,0,0,0,0,155,0,156,0,157,0,222,0,223,0,160,0,224,0,162,0,0,0,0,0,225,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,164,0,165,0,166,0,167,0,168,0,169,0,170,0,171,0,172,0,0,0,0,0,173,0,174,0,0,0,0,0,175,0,176,0,177,0,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,179,0,0,0,0,0,226,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,180,0,181,0,182,0,183,0,184,0,185,0,186,0,187,0,188,0,189,0,0,0,190,0,191,0,0,0,0,0,0,0,0,0,0,0,0,0,192,0,121,0,122,0,123,0,124,0,125,0,126,0,127,0,128,0,129,0,130,0,131,0,132,0,133,0,134,0,135,0,136,0,137,0,138,0,139,0,140,0,141,0,142,0,143,0,144,0,0,0,0,0,0,0,145,0,146,0,147,0,218,0,219,0,220,0,221,0,152,0,153,0,154,0,0,0,0,0,0,0,0,0,0,0,155,0,156,0,157,0,222,0,223,0,160,0,224,0,162,0,0,0,0,0,225,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,164,0,165,0,166,0,167,0,168,0,169,0,170,0,171,0,172,0,0,0,0,0,173,0,174,0,0,0,0,0,175,0,176,0,177,0,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,179,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,180,0,181,0,182,0,183,0,184,0,185,0,186,0,187,0,188,0,189,0,0,0,190,0,191,0,0,0,0,0,0,0,0,0,0,0,0,0,192,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,0,0,0,101,0,102,0,18,0,19,0,0,0,0,0,0,0,0,0,0,0,103,0,104,0,105,0,23,0,24,0,25,0,26,0,0,0,0,0,106,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,0,32,0,0,0,33,0,34,0,35,0,36,0,37,0,38,0,0,0,39,0,40,0,41,0,0,0,0,0,42,0,0,0,0,0,43,0,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30,1,0,0,0,0,111,0,49,0,0,0,50,0,51,0,0,0,0,0,0,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,0,0,0,0,60,0,0,0,0,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,0,112,0,101,0,102,0,18,0,19,0,0,0,0,0,0,0,31,1,0,0,103,0,104,0,105,0,23,0,24,0,25,0,26,0,0,0,0,0,106,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,0,32,0,0,0,33,0,34,0,35,0,36,0,37,0,38,0,0,0,39,0,40,0,41,0,0,0,0,0,42,0,0,0,0,0,43,0,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30,1,0,0,0,0,111,0,49,0,0,0,50,0,51,0,0,0,0,0,0,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,0,0,0,0,60,0,0,0,0,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,0,112,0,101,0,102,0,18,0,19,0,0,0,0,0,0,0,15,2,0,0,103,0,104,0,105,0,23,0,24,0,25,0,26,0,0,0,0,0,106,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,0,32,0,0,0,33,0,34,0,35,0,36,0,37,0,38,0,238,0,39,0,40,0,41,0,0,0,0,0,42,0,0,0,0,0,43,0,44,0,0,0,45,0,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,200,0,0,0,0,0,111,0,49,0,0,0,50,0,51,0,0,0,118,2,240,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,0,0,0,0,60,0,241,1,0,0,0,0,242,1,243,1,0,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,14,0,0,0,0,0,0,0,61,0,241,0,63,0,15,0,0,0,16,0,17,0,18,0,19,0,0,0,0,0,0,0,0,0,0,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,0,0,0,0,27,0,0,0,0,0,0,0,0,0,0,0,28,0,29,0,30,0,31,0,32,0,0,0,33,0,34,0,35,0,36,0,37,0,38,0,0,0,39,0,40,0,41,0,0,0,0,0,42,0,0,0,0,0,43,0,44,0,0,0,45,0,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,47,0,0,0,0,0,48,0,49,0,0,0,50,0,51,0,0,0,52,0,0,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,0,0,0,0,60,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,0,0,0,0,0,0,0,0,61,0,62,0,63,0,15,0,0,0,101,0,102,0,18,0,19,0,0,0,0,0,0,0,0,0,0,0,103,0,104,0,105,0,23,0,24,0,25,0,26,0,0,0,0,0,106,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,0,32,0,0,0,33,0,34,0,35,0,36,0,37,0,38,0,238,0,39,0,40,0,41,0,0,0,0,0,42,0,0,0,0,0,43,0,44,0,0,0,45,0,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,200,0,0,0,0,0,111,0,49,0,0,0,50,0,51,0,0,0,118,2,0,0,53,0,54,0,55,0,56], "i8", ALLOC_NONE, Runtime.GLOBAL_BASE+30738);
-/* memory initializer */ allocate([57,0,58,0,59,0,0,0,0,0,60,0,241,1,0,0,0,0,242,1,243,1,0,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,14,0,0,0,0,0,0,0,61,0,241,0,63,0,15,0,0,0,16,0,17,0,18,0,19,0,0,0,0,0,0,0,0,0,0,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,0,0,0,0,27,0,0,0,0,0,0,0,0,0,0,0,28,0,0,0,30,0,31,0,32,0,0,0,33,0,34,0,35,0,36,0,37,0,38,0,0,0,39,0,40,0,41,0,0,0,0,0,42,0,0,0,0,0,43,0,44,0,0,0,45,0,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,47,0,0,0,0,0,48,0,49,0,0,0,50,0,51,0,0,0,52,0,0,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,0,0,0,0,60,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,0,0,0,0,0,0,0,0,61,0,62,0,63,0,15,0,0,0,101,0,102,0,18,0,19,0,0,0,0,0,0,0,0,0,0,0,103,0,104,0,105,0,23,0,24,0,25,0,26,0,0,0,0,0,106,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,0,32,0,0,0,33,0,34,0,35,0,36,0,37,0,38,0,0,0,39,0,40,0,41,0,0,0,0,0,42,0,0,0,0,0,43,0,44,0,0,0,45,0,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,200,0,0,0,0,0,111,0,49,0,0,0,50,0,51,0,0,0,239,2,0,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,0,0,0,0,60,0,241,1,0,0,0,0,242,1,243,1,0,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,0,0,0,0,0,0,0,0,61,0,241,0,63,0,15,0,0,0,101,0,102,0,18,0,19,0,0,0,0,0,0,0,0,0,0,0,103,0,104,0,105,0,23,0,24,0,25,0,26,0,0,0,0,0,106,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,0,32,0,0,0,33,0,34,0,35,0,36,0,37,0,38,0,0,0,39,0,40,0,41,0,0,0,0,0,42,0,0,0,0,0,43,0,44,0,0,0,45,0,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,200,0,0,0,0,0,111,0,49,0,0,0,50,0,51,0,0,0,20,3,0,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,0,0,0,0,60,0,241,1,0,0,0,0,242,1,243,1,0,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,0,0,0,0,0,0,0,0,61,0,241,0,63,0,15,0,0,0,101,0,102,0,18,0,19,0,0,0,0,0,0,0,0,0,0,0,103,0,104,0,105,0,23,0,24,0,25,0,26,0,0,0,0,0,106,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,0,32,0,0,0,33,0,34,0,35,0,36,0,37,0,38,0,0,0,39,0,40,0,41,0,0,0,0,0,42,0,0,0,0,0,43,0,44,0,0,0,45,0,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,200,0,0,0,0,0,111,0,49,0,0,0,50,0,51,0,0,0,118,2,0,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,0,0,0,0,60,0,241,1,0,0,0,0,242,1,243,1,0,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,0,0,0,0,0,0,0,0,61,0,241,0,63,0,15,0,0,0,16,0,17,0,18,0,19,0,0,0,0,0,0,0,0,0,0,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,0,0,0,0,106,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,0,32,0,0,0,33,0,34,0,35,0,36,0,37,0,38,0,238,0,39,0,40,0,41,0,0,0,0,0,42,0,0,0,0,0,43,0,44,0,0,0,45,0,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,200,0,0,0,0,0,111,0,49,0,0,0,50,0,51,0,0,0,239,0,240,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,0,0,0,0,60,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,0,0,0,0,0,0,0,0,61,0,241,0,63,0,15,0,0,0,101,0,102,0,18,0,19,0,0,0,0,0,0,0,0,0,0,0,103,0,104,0,105,0,23,0,24,0,25,0,26,0,0,0,0,0,106,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,0,32,0,0,0,33,0,34,0,35,0,36,0,37,0,38,0,238,0,39,0,40,0,41,0,0,0,0,0,42,0,0,0,0,0,43,0,44,0,0,0,45,0,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,200,0,0,0,0,0,111,0,49,0,0,0,50,0,51,0,0,0,239,0,0,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,0,0,0,0,60,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,0,0,0,0,0,0,0,0,61,0,241,0,63,0,15,0,0,0,101,0,102,0,18,0,19,0,0,0,0,0,0,0,0,0,0,0,103,0,104,0,105,0,23,0,24,0,25,0,26,0,0,0,0,0,106,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,0,32,0,0,0,33,0,34,0,35,0,36,0,37,0,38,0,238,0,39,0,40,0,41,0,0,0,0,0,42,0,0,0,0,0,43,0,44,0,0,0,45,0,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,200,0,0,0,0,0,111,0,49,0,0,0,50,0,51,0,0,0,0,0,240,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,0,0,0,0,60,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,0,0,0,0,0,0,0,0,61,0,241,0,63,0,15,0,0,0,101,0,102,0,18,0,19,0,0,0,0,0,0,0,0,0,0,0,103,0,104,0,105,0,23,0,24,0,25,0,26,0,0,0,0,0,106,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,0,32,0,0,0,33,0,34,0,35,0,36,0,37,0,38,0,238,0,39,0,40,0,41,0,0,0,0,0,42,0,0,0,0,0,43,0,44,0,0,0,45,0,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,200,0,0,0,0,0,111,0,49,0,0,0,50,0,51,0,0,0,0,0,0,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,0,0,0,0,60,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,0,0,0,0,0,0,0,0,61,0,241,0,63,0,15,0,0,0,16,0,17,0,18,0,19,0,0,0,0,0,0,0,0,0,0,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,0,0,0,0,106,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,0,32,0,0,0,33,0,34,0,35,0,36,0,37,0,38,0,0,0,39,0,40,0,41,0,0,0,0,0,42,0,0,0,0,0,43,0,44,0,0,0,45,0,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,200,0,0,0,0,0,111,0,49,0,0,0,50,0,51,0,0,0,9,2,0,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,0,0,0,0,60,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,0,0,0,0,0,0,0,0,61,0,241,0,63,0,15,0,0,0,101,0,102,0,18,0,19,0,0,0,0,0,0,0,0,0,0,0,103,0,104,0,105,0,23,0,24,0,25,0,26,0,0,0,0,0,106,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,0,32,0,0,0,33,0,34,0,35,0,36,0,37,0,38,0,0,0,39,0,40,0,41,0,0,0,0,0,42,0,0,0,0,0,43,0,44,0,0,0,45,0,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,200,0,0,0,0,0,111,0,49,0,0,0,50,0,51,0,0,0,239,0,0,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,0,0,0,0,60,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,0,0,0,0,0,0,0,0,61,0,241,0,63,0,15,0,0,0,101,0,102,0,18,0,19,0,0,0,0,0,0,0,0,0,0,0,103,0,104,0,105,0,23,0,24,0,25,0,26,0,0,0,0,0,106,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,0,32,0,0,0,33,0,34,0,35,0,36,0,37,0,38,0,0,0,39,0,40,0,41,0,0,0,0,0,42,0,0,0,0,0,43,0,44,0,0,0,45,0,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,200,0,0,0,0,0,111,0,49,0,0,0,50,0,51,0,0,0,9,2,0,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,0,0,0,0,60,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,0,0,0,0,0,0,0,0,61,0,241,0,63,0,15,0,0,0,16,0,17,0,18,0,19,0,0,0,0,0,0,0,0,0,0,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,0,0,0,0,27,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,0,32,0,0,0,33,0,34,0,35,0,36,0,37,0,38,0,0,0,39,0,40,0,41,0,0,0,0,0,42,0,0,0,0,0,43,0,44,0,0,0,45,0,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,200,0,0,0,0,0,111,0,49,0,0,0,50,0,51,0,0,0,0,0,0,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,0,0,0,0,60,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,0,0,0,0,0,0,0,0,61,0,62,0,63,0,15,0,0,0,101,0,102,0,18,0,19,0,0,0,0,0,0,0,0,0,0,0,103,0,104,0,105,0,23,0,24,0,25,0,26,0,0,0,0,0,106,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,0,32,0,0,0,33,0,34,0,35,0,36,0,37,0,38,0,0,0,39,0,40,0,41,0,0,0,0,0,42,0,0,0,0,0,43,0,44,0,0,0,45,0,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,200,0,0,0,0,0,111,0,49,0,0,0,50,0,51,0,0,0,0,0,0,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,0,0,0,0,60,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,0,0,0,0,0,0,0,0,61,0,241,0,63,0,15,0,0,0,16,0,17,0,18,0,19,0,0,0,0,0,0,0,0,0,0,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,0,0,0,0,106,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,0,32,0,0,0,33,0,34,0,35,0,36,0,37,0,38,0,0,0,39,0,40,0,41,0,0,0,0,0,42,0,0,0,0,0,43,0,44,0,0,0,45,0,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,200,0,0,0,0,0,111,0,49,0,0,0,50,0,51,0,0,0,0,0,0,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,0,0,0,0,60,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,0,0,0,0,0,0,0,0,61,0,241,0,63,0,15,0,0,0,101,0,102,0,18,0,19,0,0,0,0,0,0,0,0,0,0,0,103,0,104,0,105,0,23,0,24,0,25,0,26,0,0,0,0,0,106,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,0,32,0,0,0,107,0,34,0,35,0,36,0,108,0,38,0,0,0,39,0,40,0,41,0,0,0,0,0,42,0,0,0,0,0,43,0,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,0,0,0,0,0,110,0,0,0,0,0,111,0,49,0,0,0,50,0,51,0,0,0,0,0,0,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,0,0,0,0,60,0,0,0,0,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,0,112,0,101,0,102,0,18,0,19,0,0,0,0,0,0,0,0,0,0,0,103,0,104,0,105,0,23,0,24,0,25,0,26,0,0,0,0,0,106,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,0,32,0,0,0,33,0,34,0,35,0,36,0,37,0,38,0,0,0,39,0,40,0,41,0,0,0,0,0,42,0,0,0,0,0,43,0,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,211,0,0,0,0,0,48,0,49,0,0,0,50,0,51,0,0,0,52,0,0,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,0,0,0,0,60,0,0,0,0,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,0,112,0,101,0,102,0,18,0,19,0,0,0,0,0,0,0,0,0,0,0,103,0,104,0,105,0,23,0,24,0,25,0,26,0,0,0,0,0,106,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,0,32,0,0,0,33,0,34,0,35,0,36,0,37,0,38,0,0,0,39,0,40,0,41,0,0,0,0,0,42,0,0,0,0,0,43,0,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30,1,0,0,0,0,77,1,49,0,0,0,50,0,51,0,0,0,78,1,0,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,0,0,0,0,60,0,0,0,0,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,0,112,0,101,0,102,0,18,0,19,0,0,0,0,0,0,0,0,0,0,0,103,0,104,0,105,0,23,0,24,0,25,0,26,0,0,0,0,0,106,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,0,32,0,0,0,107,0,34,0,35,0,36,0,108,0,38,0,0,0,39,0,40,0,41,0,0,0,0,0,42,0,0,0,0,0,43,0,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,110,0,0,0,0,0,111,0,49,0,0,0,50,0,51,0,0,0,0,0,0,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,0,0,0,0,60,0,0,0,0,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,0,112,0,101,0,102,0,18,0,19,0,0,0,0,0,0,0,0,0,0,0,103,0,104,0,105,0,23,0,24,0,25,0,26,0,0,0,0,0,106,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,0,32,0,0,0,33,0,34,0,35,0,36,0,37,0,38,0,0,0,39,0,40,0,41,0,0,0,0,0,42,0,0,0,0,0,43,0,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30,1,0,0,0,0,77,1,49,0,0,0,50,0,51,0,0,0,0,0,0,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,0,0,0,0,60,0,0,0,0,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,0,112,0,101,0,102,0,18,0,19,0,0,0,0,0,0,0,0,0,0,0,103,0,104,0,105,0,23,0,24,0,25,0,26,0,0,0,0,0,106,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,0,32,0,0,0,33,0,34,0,35,0,36,0,37,0,38,0,0,0,39,0,40,0,41,0,0,0,0,0,42,0,0,0,0,0,43,0,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,91,3,0,0,0,0,111,0,49,0,0,0,50,0,51,0,0,0,0,0,0,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,0,0,0,0,60,0,0,0,0,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,0,112,0,101,0,102,0,18,0,19,0,0,0,0,0,0,0,0,0,0,0,103,0,104,0,105,0,23,0,24,0,25,0,26,0,0,0,0,0,106,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,0,32,0,0,0,33,0,34,0,35,0,36,0,37,0,38,0,0,0,39,0,40,0,41,0,0,0,0,0,42,0,0,0,0,0,43,0,44,0,0,0,81,1,212,253,212,253,212,253,212,253,86,1,87,1,0,0,0,0,212,253,212,253,0,0,0,0,0,0,0,0,94,1,95,1,0,0,0,0,0,0,109,3,0,0,0,0,111,0,49,0,0,0,50,0,51,0,0,0,0,0,0,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,0,0,0,0,60,0,0,0,0,0,58,2,59,2,0,0,0,0,60,2,97,1,98,1,99,1,100,1,101,1,102,1,103,1,104,1,105,1,106,1,0,0,0,0,112,0,164,0,165,0,166,0,167,0,168,0,169,0,170,0,171,0,172,0,0,0,0,0,173,0,174,0,0,0,0,0,175,0,176,0,177,0,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,179,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,180,0,181,0,182,0,183,0,184,0,185,0,186,0,187,0,188,0,189,0,0,0,190,0,191,0,78,2,51,2,0,0,0,0,79,2,0,0,192,0,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,164,0,165,0,166,0,167,0,168,0,169,0,170,0,171,0,172,0,0,0,0,0,173,0,174,0,0,0,0,0,175,0,176,0,177,0,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,179,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,180,0,181,0,182,0,183,0,184,0,185,0,186,0,187,0,188,0,189,0,0,0,190,0,191,0,64,2,59,2,0,0,0,0,65,2,0,0,192,0,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,164,0,165,0,166,0,167,0,168,0,169,0,170,0,171,0,172,0,0,0,0,0,173,0,174,0,0,0,0,0,175,0,176,0,177,0,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,179,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,180,0,181,0,182,0,183,0,184,0,185,0,186,0,187,0,188,0,189,0,0,0,190,0,191,0,95,2,51,2,0,0,0,0,96,2,0,0,192,0,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,164,0,165,0,166,0,167,0,168,0,169,0,170,0,171,0,172,0,0,0,0,0,173,0,174,0,0,0,0,0,175,0,176,0,177,0,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,179,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,180,0,181,0,182,0,183,0,184,0,185,0,186,0,187,0,188,0,189,0,0,0,190,0,191,0,98,2,59,2,0,0,0,0,99,2,0,0,192,0,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,164,0,165,0,166,0,167,0,168,0,169,0,170,0,171,0,172,0,0,0,0,0,173,0,174,0,0,0,0,0,175,0,176,0,177,0,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,179,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,180,0,181,0,182,0,183,0,184,0,185,0,186,0,187,0,188,0,189,0,0,0,190,0,191,0,105,2,51,2,0,0,0,0,106,2,0,0,192,0,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,164,0,165,0,166,0,167,0,168,0,169,0,170,0,171,0,172,0,0,0,0,0,173,0,174,0,0,0,0,0,175,0,176,0,177,0,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,179,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,180,0,181,0,182,0,183,0,184,0,185,0,186,0,187,0,188,0,189,0,0,0,190,0,191,0,108,2,59,2,0,0,0,0,109,2,0,0,192,0,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,164,0,165,0,166,0,167,0,168,0,169,0,170,0,171,0,172,0,0,0,0,0,173,0,174,0,0,0,0,0,175,0,176,0,177,0,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,179,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,180,0,181,0,182,0,183,0,184,0,185,0,186,0,187,0,188,0,189,0,0,0,190,0,191,0,140,2,51,2,0,0,0,0,141,2,0,0,192,0,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,164,0,165,0,166,0,167,0,168,0,169,0,170,0,171,0,172,0,0,0,0,0,173,0,174,0,0,0,0,0,175,0,176,0,177,0,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,179,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,180,0,181,0,182,0,183,0,184,0,185,0,186,0,187,0,188,0,189,0,0,0,190,0,191,0,143,2,59,2,0,0,0,0,144,2,0,0,192,0,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,164,0,165,0,166,0,167,0,168,0,169,0,170,0,171,0,172,0,0,0,0,0,173,0,174,0,0,0,0,0,175,0,176,0,177,0,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,179,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,180,0,181,0,182,0,183,0,184,0,185,0,186,0,187,0,188,0,189,0,0,0,190,0,191,0,169,3,51,2,0,0,0,0,170,3,0,0,192,0,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,164,0,165,0,166,0,167,0,168,0,169,0,170,0,171,0,172,0,0,0,0,0,173,0,174,0,0,0,0,0,175,0,176,0,177,0,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,179,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,180,0,181,0,182,0,183,0,184,0,185,0,186,0,187,0,188,0,189,0,0,0,190,0,191,0,176,3,51,2,0,0,0,0,177,3,0,0,192,0,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,164,0,165,0,166,0,167,0,168,0,169,0,170,0,171,0,172,0,0,0,0,0,173,0,174,0,0,0,0,0,175,0,176,0,177,0,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,179,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,180,0,181,0,182,0,183,0,184,0,185,0,186,0,187,0,188,0,189,0,0,0,190,0,191,0,179,3,59,2,0,0,0,0,180,3,0,0,192,0,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,164,0,165,0,166,0,167,0,168,0,169,0,170,0,171,0,172,0,0,0,0,0,173,0,174,0,0,0,0,0,175,0,176,0,177,0,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,179,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,180,0,181,0,182,0,183,0,184,0,185,0,186,0,187,0,188,0,189,0,0,0,190,0,191,0,64,2,59,2,0,0,0,0,65,2,0,0,192,0,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,164,0,165,0,166,0,167,0,168,0,169,0,170,0,171,0,172,0,0,0,0,0,173,0,174,0,0,0,0,0,175,0,176,0,177,0,178,0,0,0,0,0,0,0,81,1,82,1,83,1,84,1,85,1,86,1,87,1,179,0,0,0,90,1,91,1,0,0,0,0,0,0,0,0,94,1,95,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,180,0,181,0,182,0,183,0,184,0,185,0,186,0,187,0,188,0,189,0,0,0,190,0,191,0,0,0,0,0,0,0,0,0,0,0,0,0,192,0,97,1,98,1,99,1,100,1,101,1,102,1,103,1,104,1,105,1,106,1,2,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,14,1,0,0,0,0,40,1,43,1,0,0,0,0,28,2,64,1,65,1,66,1,67,1,26,1,248,0,248,0,210,1,209,1,211,1,212,1,30,2,0,0,10,0,0,0,214,1,213,1,202,1,18,2,204,1,203,1,206,1,205,1,198,1,199,1,158,1,159,1,215,1,216,1,0,0,0,0,0,0,0,0,16,1,43,2,43,2,78,0,35,1,0,0,0,0,0,0,0,0,0,0,0,0,173,1,0,0,0,0,0,0,3,0,28,2,6,0,9,0,27,0,39,0,42,0,50,0,49,0,0,0,66,0,0,0,70,0,80,0,0,0,47,0,229,0,0,0,51,0,33,1,6,1,7,1,8,1,9,1,10,1,156,1,155,1,187,1,157,1,154,1,208,1,0,0,11,1,12,1,248,0,5,0,8,0,64,1,65,1,26,1,29,1,136,1,0,0,102,0,103,0,0,0,0,0,0,0,0,0,105,0,217,1,68,1,0,0,208,1,12,1,0,0,56,1,156,0,166,0,157,0,153,0,182,0,183,0,184,0,185,0,164,0,179,0,172,0,162,0,161,0,177,0,160,0,159,0,155,0,180,0,154,0,167,0,171,0,173,0,165,0,158,0,174,0,181,0,176,0,175,0,168,0,178,0,163,0,152,0,170,0,169,0,151,0,149,0,150,0,146,0,147,0,148,0,107,0,109,0,108,0,141,0,142,0,138,0,120,0,121,0,122,0,129,0,126,0,128,0,123,0,124,0,143,0,144,0,130,0,131,0,135,0,125,0,127,0,117,0,118,0,119,0,132,0,133,0,134,0,136,0,137,0,139,0,140,0,145,0,8,2,58,1,110,0,111,0,7,2,0,0,0,0,0,0,48,0,0,0,0,0,0,0,208,1,0,0,12,1,0,0,0,0,0,0,0,0,79,1,78,1,0,0,0,0,208,1,12,1,175,0,168,0,178,0,163,0,146,0,147,0,107,0,108,0,0,0,112,0,114,0,20,0,113,0,37,2,39,2,28,2,0,0,41,2,38,2,29,2,0,0,0,0,0,0,0,0,243,0,230,0,253,0,64,0,247,0,43,2,43,2,12,2,65,0,63,0,30,2,62,0,0,0,43,2,135,1,61,0,30,2,0,0,31,2,18,0,0,0,0,0,207,0,0,0,208,0,23,1,0,0,0,0,0,0,28,2,15,0,30,2,68,0,14,0,0,0,30,2,0,0,34,2,34,2,231,0,0,0,0,0,34,2,10,2,0,0,0,0,76,0,0,0,86,0,93,0,236,1,192,1,191,1,193,1,194,1,0,0,190,1,189,1,171,1,165,1,164,1,167,1,0,0,0,0,162,1,185,1,0,0,196,1,0,0,160,1,0,0,169,1,0,0,200,1,201,1,46,0,222,0,223,0,4,0,29,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,123,1,125,1,0,0,82,0,0,0,74,0,71,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,43,2,0,0,27,2,26,2,0,0,140,1,138,1,34,1,0,0,0,0,129,1,55,0,32,1,53,1,102,0,103,0,104,0,200,1,201,1,218,1,51,1,0,0,43,2,0,0,0,0,0,0,59,1,61,1,0,0,43,2,23,1,70,1,0,0,69,1,0,0,0,0,43,2,0,0,0,0,0,0,0,0,0,0,0,0,23,1,0,0,43,2,0,0,48,1,0,0,115,0,174,1,0,0,0,0,0,0,42,2,15,2,254,0,250,0,0,0,0,0,244,0,252,0,0,0,245,0,30,2,0,0,28,1,249,0,30,2,239,0,43,2,43,2,238,0,30,2,31,1,45,0,0,0,0,0,0,0,0,0,0,0,0,0,17,0,30,2,21,1,13,0,29,2,67,0,17,1,20,1,24,1,36,2,232,0,35,2,36,2,234,0,25,1,11,2,92,0,84,0,0,0,79,0,0,0,0,0,43,2,0,0,242,1,239,1,238,1,237,1,240,1,0,0,255,1,3,2,2,2,254,1,236,1,36,1,120,1,241,1,243,1,245,1,43,2,0,0,252,1,43,2,1,2,43,2,0,0,235,1,195,1,0,0,0,0,178,1,183,1,182,1,168,1,176,1,0,0,180,1,172,1,163,1,186,1,197,1,161,1,170,1,0,0,0,0,7,0,21,0,22,0,23,0,24,0,25,0,43,0,44,0,43,2,0,0,28,0,37,0,0,0,38,0,30,2,0,0,72,0,83,0,41,0,40,0,0,0,186,0,253,0,36,0,204,0,212,0,217,0,218,0,219,0,214,0,216,0,226,0,227,0,220,0,221,0,197,0,198,0,224,0,225,0,30,2,213,0,215,0,209,0,210,0,211,0,199,0,200,0,201,0,202,0,203,0,19,2,24,2,20,2,25,2,134,1,248,0,132,1,30,2,19,2,21,2,20,2,22,2,133,1,248,0,19,2,20,2,248,0,43,2,43,2,29,0,188,0,35,0,196,0,53,0,56,0,0,0,0,0,0,0,102,0,103,0,106,0,0,0,30,2,43,2,0,0,30,2,236,1,0,0,15,1,43,2,43,2,146,1,43,2,71,1,186,0,23,2,20,2,30,2,19,2,20,2,43,2,73,1,41,1,72,1,44,1,23,2,22,1,30,2,19,2,20,2,0,0,0,0,40,2,175,1,0,0,0,0,47,1,14,2,0,0,255,0,251,0,0,0,43,2,13,2,27,1,32,2,235,0,240,0,242,0,30,1,19,0,0,0,26,0,195,0,69,0,16,0,30,2,34,2,85,0,77,0,89,0,91,0,30,2,19,2,20,2,247,1,242,1,0,0,91,1,82,1,84,1,30,2,80,1,30,2,0,0,0,0,228,1,6,2,248,1,0,0,231,1,0,2,0,0,233,1,4,2,188,1,0,0,0,0,177,1,179,1,181,1,205,0,206,0,111,1,30,2,0,0,109,1,108,1,5,1,0,0,81,0,75,0,0,0,0,0,0,0,0,0,0,0,0,0,131,1,59,0,0,0,137,1,0,0,0,0,237,0,130,1,57,0,236,0,126,1,52,0,0,0,0,0,0,0,43,2,54,1,0,0,0,0,137,1,57,1,9,2,236,1,0,0,0,0,62,1,147,1,148,1,43,2,149,1,0,0,43,2,76,1,0,0,0,0,74,1,0,0,0,0,137,1,0,0,0,0,0,0,0,0,0,0,137,1,0,0,116,0,46,1,0,0,0,0,0,1,0,0,1,1,246,0,43,2,11,0,18,1,233,0,87,0,30,2,0,0,89,1,0,0,244,1,0,0,113,1,0,0,0,0,37,1,246,1,43,2,43,2,5,2,43,2,253,1,43,2,43,2,166,1,0,0,30,2,0,0,43,2,0,0,250,1,43,2,43,2,107,1,0,0,0,0,3,1,73,0,187,0,0,0,34,0,193,0,33,0,194,0,60,0,33,2,0,0,31,0,191,0,32,0,192,0,58,0,127,1,128,1,0,0,0,0,189,0,0,0,0,0,219,1,52,1,30,2,0,0,221,1,236,1,0,0,0,0,151,1,77,1,0,0,12,0,153,1,0,0,38,1,0,0,39,1,0,0,0,0,49,1,255,0,43,2,2,1,241,0,81,1,92,1,0,0,87,1,83,1,119,1,0,0,0,0,0,0,0,0,224,1,0,0,226,1,0,0,232,1,0,0,229,1,234,1,184,1,0,0,110,1,98,1,100,1,0,0,249,1,0,0,103,1,0,0,105,1,124,1,4,1,228,0,30,0,190,0,141,1,139,1,0,0,0,0,220,1,60,1,0,0,0,0,150,1,0,0,94,0,101,0,0,0,152,1,0,0,42,1,45,1,0,0,143,1,144,1,142,1,0,0,90,1,0,0,85,1,117,1,30,2,115,1,118,1,122,1,121,1,43,2,43,2,43,2,43,2,112,1,43,2,43,2,23,1,0,0,43,2,251,1,43,2,43,2,54,0,55,1,0,0,100,0,0,0,43,2,0,0,43,2,43,2,0,0,88,1,0,0,0,0,114,1,225,1,0,0,222,1,227,1,230,1,0,0,95,1,0,0,97,1,23,2,22,1,104,1,0,0,101,1,106,1,63,1,23,2,99,0,30,2,19,2,20,2,145,1,75,1,50,1,86,1,116,1,43,2,43,2,43,2,43,2,43,2,137,1,223,1,96,1,0,0,93,1,99,1,102,1,43,2,94,1,0,0,144,0,146,0,145,0,147,0,148,0,148,0,148,0,148,0,149,0,150,0,149,0,151,0,152,0,153,0,153,0,153,0,153,0,155,0,154,0,154,0,154,0,154,0,154,0,154,0,154,0,154,0,154,0,154,0,154,0,154,0,154,0,154,0,154,0,154,0,154,0,154,0,154,0,154,0,154,0,156,0,156,0,157,0,157,0,157,0,157,0,157,0,157,0,158,0,159,0,159,0,160,0,160,0,162,0,161,0,163,0,163,0,163,0,163,0,163,0,163,0,163,0,163,0,163,0,163,0,163,0,164,0,164,0,165,0,165,0,166,0,166,0,166,0,166,0,166,0,166,0,166,0,166,0,166,0,166,0,167,0,167,0,168,0,168,0,169,0,169,0,170,0,170,0,170,0,170,0,170,0,170,0,170,0,170,0,171,0,171,0,171,0,171,0,171,0,171,0,171,0,171,0,172,0,172,0,173,0,173,0,173,0,174,0,174,0,174,0,174,0,174,0,175,0,175,0,176,0,177,0,176,0,178,0,178,0,178,0,178,0,178,0,178,0,178,0,178,0,178,0,178,0,178,0,178,0,178,0,178,0,178,0,178,0,178,0,178,0,178,0,178,0,178,0,178,0,178,0,178,0,178,0,178,0,178,0,178,0,178,0,179,0,179,0,179,0,179,0,179,0,179,0,179,0,179,0,179,0,179,0,179,0,179,0,179,0,179,0,179,0,179,0,179,0,179,0,179,0,179,0,179,0,179,0,179,0,179,0,179,0,179,0,179,0,179,0,179,0,179,0,179,0,179,0,179,0,179,0,179,0,179,0,179,0,179,0,179,0,179,0,180,0,180,0,180,0,180,0,180,0,180,0,180,0,180,0,180,0,180,0,180,0,180,0,180,0,180,0,180,0,180,0,180,0,180,0,180,0,180,0,180,0,180,0,180,0,180,0,180,0,180,0,180,0,180,0,180,0,180,0,180,0,180,0,180,0,180,0,180,0,180,0,180,0,180,0,180,0,180,0,180,0,180,0,180,0,180,0,181,0,182,0,182,0,182,0,182,0,183,0,184,0,184,0,185,0,185,0,185,0,185,0,185,0,186,0,186,0,186,0,186,0,186,0,188,0,187,0,189,0,190,0,190,0,191,0,191,0,191,0,191,0,191,0,191,0,192,0,192,0,192,0,193,0,193,0,193,0,193,0,193,0,193,0,193,0,193,0,194,0,193,0,195,0,196,0,193,0,197,0,193,0,193,0,193,0,193,0,193,0,193,0,193,0,193,0,193,0,193,0,193,0,193,0,193,0,193,0,193,0,198,0,199,0,193,0,193,0,193,0,200,0,201,0,193,0,202,0,203,0,193,0,193,0,193,0,204,0,205,0,193,0,206,0,193,0,207,0,208,0,193,0,209,0,193,0,210,0,211,0,193,0,212,0,213,0,193,0,193,0,193,0,193,0,193,0,214,0,215,0,215,0,215,0,216,0,216,0,217,0,217,0,218,0,218,0,219,0,219,0,220,0,220,0,221,0,221,0,222,0,222,0,222,0,222,0,222,0,222,0,222,0,222,0,222,0,223,0,223,0,223,0,223,0,223,0,223,0,223,0,223,0,223,0,223,0,223,0,223,0,223,0,223,0,223,0,224,0,224,0,225,0,225,0,225,0,226,0,226,0,227,0,227,0,228,0,228,0,229,0,229,0,230,0,230,0,232,0,231,0,233,0,233,0,233,0,233,0,234,0,234,0,234,0,234,0,234,0,234,0,234,0,234,0,234,0,236,0,235,0,237,0,235,0,238,0,239,0,239,0,240,0,240,0,241,0,241,0,241,0,242,0,242,0,243,0,243,0,244,0,244,0,244,0,244,0,245,0,245,0,245,0,245,0,246,0,246,0,247,0,248,0,247,0,247,0,247,0,249,0,249,0,250,0,250,0,251,0,252,0,252,0,253,0,253,0,254,0,254,0,255,0,255,0,0,1,1,1,0,1,2,1,2,1,3,1,3,1,4,1,5,1,5,1,5,1,5,1,5,1,5,1,6,1,6,1,7,1,7,1,7,1,7,1,8,1,8,1,8,1,8,1,8,1,9,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,11,1,11,1,12,1,13,1,12,1,14,1,14,1,15,1,15,1,15,1,15,1,15,1,15,1,15,1,15,1,15,1,15,1,15,1,15,1,15,1,15,1,15,1,16,1,16,1,16,1,16,1,17,1,17,1,18,1,18,1,19,1,19,1,20,1,21,1,22,1,23,1,23,1,24,1,24,1,25,1,25,1,26,1,26,1,27,1,27,1,28,1,29,1,29,1,30,1,31,1,30,1,32,1,32,1,33,1,33,1,34,1,34,1,35,1,35,1,35,1,36,1,36,1,36,1,36,1,37,1,37,1,37,1,38,1,38,1,39,1,39,1,40,1,40,1,41,1,42,1,43,1,43,1,43,1,44,1,44,1,46,1,45,1,47,1,47,1,48,1,253,252,253,252,253,252,141,1,253,252,20,0,253,252,132,254,76,0,253,252,57,0,253,252,193,254,96,0,112,0,199,255,253,252,94,254,253,252,243,255,72,3,83,255,235,255,198,255,6,255,103,254,240,255,3,5,184,255,70,3,4,0,241,255,253,252,253,252,7,255,253,252,238,3,150,5,253,252,12,0,15,1,178,254,77,0,78,0,253,252,159,254,17,255,30,0,219,254,10,0,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,38,1,74,255,125,254,200,255,207,253,253,252,80,253,77,253,209,0,253,252,4,254,253,252,163,253,253,252,202,255,253,252,253,252,158,0,253,252,253,252,253,252,179,255,253,252,253,252,128,254,253,252,210,255,253,252,253,252,253,252,253,252,253,252,94,2,253,2,253,252,253,252,253,252,253,252,253,252,55,255,80,254,253,252,122,1,253,252,253,252,253,252,0,0,253,252,253,252,253,252,210,5,115,5,110,3,43,6,253,252,253,252,86,0,232,254,14,253,121,254,166,253,184,0,165,253,150,253,254,252,38,0,221,0,253,252,30,254,253,252,240,254,107,1,253,252,253,252,253,252,5,0,87,254,63,3,189,254,253,252,197,2,2,0,231,255,80,0,203,253,11,255,251,255,48,0,253,252,223,255,254,255,255,255,1,0,2,0,64,0,65,0,66,0,6,1,136,1], "i8", ALLOC_NONE, Runtime.GLOBAL_BASE+40978);
-/* memory initializer */ allocate([137,1,15,1,16,1,184,1,68,0,69,0,202,0,70,0,71,0,74,2,203,2,72,0,73,0,17,1,74,0,75,0,76,0,209,1,77,0,203,0,113,0,114,0,227,0,228,0,229,0,111,2,195,0,196,0,79,0,244,0,22,1,54,2,195,2,176,1,177,1,253,0,254,0,246,0,168,1,178,1,13,2,80,0,199,0,20,1,136,2,21,1,36,1,154,2,209,0,230,2,210,0,231,2,110,2,119,3,77,2,75,2,43,3,132,1,134,1,86,2,87,2,49,3,9,1,140,1,102,2,222,2,223,2,215,0,149,2,150,2,151,2,11,3,175,2,176,2,252,2,128,3,129,3,225,1,0,3,74,1,8,2,82,0,83,0,120,1,68,2,67,2,161,1,122,3,90,2,216,2,51,3,55,3,84,0,85,0,49,1,50,1,240,1,86,0,87,0,88,0,112,2,121,2,245,1,246,1,247,1,167,2,89,0,90,0,91,0,43,1,92,0,93,0,205,0,206,0,96,0,207,0,128,1,76,2,211,2,212,2,227,1,228,1,229,1,230,1,231,1,232,1,15,3,16,3,233,1,234,1,235,1,236,1,4,3,156,2,198,0,133,1,27,1,179,1,249,0,119,0,81,2,56,2,112,1,234,0,173,1,174,1,191,2,200,1,141,1,4,1,158,1,237,0,19,1,0,0,145,0,146,0,0,0,1,0,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,19,0,21,0,22,0,23,0,24,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,39,0,45,0,46,0,47,0,48,0,49,0,51,0,52,0,53,0,54,0,55,0,56,0,58,0,59,0,60,0,63,0,66,0,67,0,69,0,70,0,89,0,92,0,93,0,95,0,96,0,98,0,100,0,101,0,102,0,103,0,104,0,105,0,106,0,109,0,129,0,130,0,131,0,147,0,148,0,149,0,154,0,156,0,157,0,159,0,160,0,163,0,164,0,166,0,167,0,168,0,170,0,171,0,180,0,193,0,214,0,233,0,234,0,244,0,245,0,249,0,250,0,251,0,2,1,3,1,4,1,6,1,7,1,8,1,9,1,10,1,11,1,35,1,48,1,149,0,21,0,22,0,30,0,31,0,32,0,39,0,51,0,55,0,86,0,89,0,92,0,129,0,172,0,173,0,193,0,214,0,8,1,11,1,35,1,173,0,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0,38,0,39,0,45,0,46,0,47,0,48,0,49,0,50,0,51,0,52,0,55,0,69,0,70,0,71,0,72,0,73,0,74,0,75,0,76,0,77,0,80,0,81,0,84,0,85,0,86,0,87,0,98,0,119,0,120,0,121,0,122,0,123,0,124,0,125,0,126,0,127,0,128,0,130,0,131,0,138,0,139,0,174,0,178,0,179,0,10,1,30,1,194,0,89,0,157,0,158,0,171,0,214,0,8,1,9,1,11,1,158,0,200,0,202,0,89,0,164,0,171,0,214,0,219,0,8,1,11,1,33,0,34,0,35,0,36,0,48,0,49,0,51,0,55,0,101,0,174,0,175,0,176,0,4,1,142,0,143,0,158,0,39,1,44,1,45,1,47,1,57,0,98,0,99,0,130,0,163,0,180,0,181,0,186,0,189,0,191,0,33,1,34,1,186,0,186,0,139,0,187,0,188,0,139,0,183,0,187,0,139,0,40,1,45,1,175,0,150,0,133,0,180,0,214,0,180,0,55,0,1,0,92,0,152,0,153,0,154,0,165,0,166,0,48,1,195,0,197,0,182,0,191,0,33,1,48,1,181,0,32,1,33,1,48,1,89,0,137,0,170,0,214,0,8,1,11,1,198,0,53,0,54,0,56,0,63,0,105,0,174,0,5,1,62,0,64,0,65,0,111,0,112,0,246,0,247,0,63,0,246,0,63,0,246,0,63,0,246,0,61,0,246,0,58,0,59,0,159,0,180,0,180,0,39,1,47,1,40,0,41,0,42,0,43,0,44,0,37,0,38,0,28,0,231,0,116,0,137,0,92,0,98,0,167,0,116,0,71,0,72,0,73,0,74,0,75,0,76,0,77,0,78,0,79,0,80,0,81,0,82,0,83,0,86,0,87,0,117,0,119,0,120,0,121,0,122,0,123,0,124,0,125,0,126,0,127,0,128,0,88,0,135,0,136,0,88,0,136,0,38,1,26,0,133,0,235,0,90,0,90,0,183,0,187,0,235,0,157,0,51,0,55,0,172,0,58,0,59,0,120,0,12,1,88,0,135,0,136,0,209,0,31,1,210,0,38,1,151,0,152,0,55,0,16,0,215,0,44,1,116,0,88,0,135,0,136,0,90,0,90,0,215,0,158,0,158,0,55,0,88,0,135,0,136,0,25,0,105,0,137,0,46,1,39,1,20,0,238,0,142,0,181,0,181,0,181,0,91,0,137,0,190,0,48,1,137,0,190,0,186,0,40,1,41,1,186,0,185,0,186,0,191,0,33,1,48,1,157,0,41,1,157,0,155,0,133,0,152,0,88,0,136,0,90,0,154,0,165,0,140,0,39,1,47,1,41,1,157,0,41,1,141,0,137,0,43,1,45,1,137,0,43,1,134,0,43,1,55,0,167,0,168,0,169,0,137,0,88,0,135,0,136,0,51,0,53,0,54,0,55,0,56,0,92,0,98,0,99,0,123,0,126,0,139,0,229,0,15,1,16,1,17,1,18,1,19,1,20,1,21,1,24,1,25,1,26,1,27,1,28,1,63,0,247,0,248,0,110,0,113,0,114,0,253,0,254,0,255,0,0,1,62,0,247,0,63,0,63,0,63,0,61,0,71,0,71,0,149,0,158,0,158,0,158,0,158,0,154,0,157,0,157,0,232,0,98,0,159,0,181,0,191,0,192,0,165,0,137,0,170,0,137,0,156,0,159,0,171,0,180,0,181,0,192,0,180,0,180,0,180,0,180,0,180,0,180,0,180,0,180,0,180,0,180,0,180,0,180,0,180,0,180,0,180,0,180,0,180,0,180,0,180,0,180,0,180,0,180,0,180,0,180,0,180,0,180,0,51,0,52,0,55,0,178,0,183,0,36,1,37,1,185,0,51,0,52,0,55,0,178,0,183,0,36,1,51,0,55,0,36,1,237,0,236,0,159,0,180,0,159,0,180,0,97,0,161,0,207,0,13,1,206,0,51,0,55,0,172,0,36,1,185,0,36,1,151,0,157,0,211,0,212,0,15,0,13,0,240,0,48,1,152,0,16,0,180,0,51,0,55,0,185,0,51,0,55,0,152,0,27,0,216,0,44,1,216,0,51,0,55,0,185,0,51,0,55,0,204,0,177,0,252,0,253,0,238,0,191,0,15,0,181,0,98,0,181,0,189,0,253,0,33,1,34,1,41,1,140,0,41,1,137,0,137,0,41,1,175,0,147,0,134,0,180,0,41,1,154,0,196,0,33,1,167,0,169,0,51,0,55,0,185,0,51,0,55,0,116,0,51,0,92,0,98,0,220,0,221,0,222,0,17,1,15,1,199,0,137,0,29,1,48,1,181,0,137,0,29,1,51,0,137,0,29,1,51,0,63,0,152,0,1,1,254,0,110,0,0,1,180,0,180,0,79,0,121,0,224,0,225,0,48,1,181,0,137,0,41,1,169,0,137,0,116,0,44,0,40,1,90,0,90,0,183,0,187,0,40,1,42,1,90,0,90,0,183,0,184,0,187,0,48,1,184,0,187,0,224,0,224,0,44,0,162,0,44,1,158,0,151,0,42,1,15,0,41,1,139,0,14,1,15,1,174,0,181,0,192,0,241,0,48,1,18,0,218,0,48,1,17,0,217,0,218,0,90,0,90,0,42,1,90,0,90,0,218,0,201,0,203,0,42,1,158,0,175,0,15,0,137,0,215,0,181,0,98,0,181,0,190,0,33,1,134,0,41,1,43,1,42,1,222,0,137,0,17,1,137,0,41,1,226,0,40,1,29,0,108,0,230,0,18,1,24,1,26,1,28,1,19,1,21,1,26,1,19,1,134,0,152,0,223,0,226,0,19,1,20,1,22,1,23,1,26,1,28,1,152,0,98,0,181,0,169,0,180,0,118,0,159,0,180,0,159,0,180,0,161,0,141,0,90,0,159,0,180,0,159,0,180,0,161,0,235,0,231,0,152,0,152,0,180,0,224,0,208,0,44,1,15,0,15,1,151,0,44,1,213,0,91,0,242,0,48,1,152,0,14,0,243,0,48,1,158,0,15,0,90,0,15,0,152,0,152,0,216,0,181,0,152,0,181,0,137,0,41,1,221,0,137,0,98,0,220,0,140,0,142,0,152,0,152,0,137,0,29,1,137,0,29,1,137,0,29,1,137,0,29,1,29,1,134,0,226,0,121,0,137,0,29,1,89,0,214,0,137,0,29,1,137,0,29,1,15,0,181,0,180,0,159,0,180,0,15,0,134,0,152,0,151,0,41,1,15,0,14,1,89,0,171,0,214,0,8,1,11,1,215,0,152,0,215,0,15,0,15,0,205,0,218,0,238,0,239,0,137,0,221,0,137,0,17,1,51,0,227,0,228,0,16,1,15,0,134,0,19,1,26,1,19,1,19,1,121,0,23,1,26,1,55,0,88,0,19,1,22,1,26,1,19,1,134,0,15,0,151,0,55,0,88,0,135,0,136,0,152,0,152,0,152,0,221,0,137,0,137,0,40,1,29,1,137,0,29,1,29,1,29,1,137,0,29,1,137,0,29,1,51,0,55,0,29,1,137,0,29,1,29,1,15,0,51,0,55,0,185,0,51,0,55,0,240,0,217,0,15,0,221,0,228,0,19,1,19,1,26,1,19,1,19,1,42,1,29,1,29,1,137,0,29,1,29,1,29,1,19,1,29,1,73,110,118,97,108,105,100,32,109,114,98,95,115,116,97,116,101,44,32,101,120,105,116,105,110,103,32,109,114,98,99,10,0,37,115,58,32,110,111,32,112,114,111,103,114,97,109,32,102,105,108,101,32,103,105,118,101,110,10,0,46,99,0,46,109,114,98,0,37,115,58,32,111,117,116,112,117,116,32,102,105,108,101,32,115,104,111,117,108,100,32,98,101,32,115,112,101,99,105,102,105,101,100,32,116,111,32,99,111,109,112,105,108,101,32,109,117,108,116,105,112,108,101,32,102,105,108,101,115,10,0,37,115,58,37,115,58,83,121,110,116,97,120,32,79,75,10,0,119,98,0,37,115,58,32,99,97,110,110,111,116,32,111,112,101,110,32,111,117,116,112,117,116,32,102,105,108,101,58,40,37,115,41,10,0,79,117,116,112,117,116,32,102,105,108,101,32,105,115,32,114,101,113,117,105,114,101,100,10,0,37,115,58,32,97,110,32,111,117,116,112,117,116,32,102,105,108,101,32,105,115,32,97,108,114,101,97,100,121,32,115,112,101,99,105,102,105,101,100,46,32,40,37,115,41,10,0,37,115,58,32,102,117,110,99,116,105,111,110,32,110,97,109,101,32,105,115,32,110,111,116,32,115,112,101,99,105,102,105,101,100,46,10,0,118,101,114,115,105,111,110,0,118,101,114,98,111,115,101,0,99,111,112,121,114,105,103,104,116,0,37,115,58,32,103,101,110,101,114,97,116,105,110,103,32,37,115,32,101,110,100,105,97,110,32,67,32,102,105,108,101,46,32,115,112,101,99,105,102,121,32,45,101,47,45,69,32,102,111,114,32,99,114,111,115,115,32,99,111,109,112,105,108,105,110,103,46,10,0,98,105,103,0,108,105,116,116,108,101,0,115,119,105,116,99,104,101,115,58,0,45,99,32,32,32,32,32,32,32,32,32,32,32,99,104,101,99,107,32,115,121,110,116,97,120,32,111,110,108,121,0,45,111,60,111,117,116,102,105,108,101,62,32,32,112,108,97,99,101,32,116,104,101,32,111,117,116,112,117,116,32,105,110,116,111,32,60,111,117,116,102,105,108,101,62,0,45,118,32,32,32,32,32,32,32,32,32,32,32,112,114,105,110,116,32,118,101,114,115,105,111,110,32,110,117,109,98,101,114,44,32,116,104,101,110,32,116,117,114,110,32,111,110,32,118,101,114,98,111,115,101,32,109,111,100,101,0,45,103,32,32,32,32,32,32,32,32,32,32,32,112,114,111,100,117,99,101,32,100,101,98,117,103,103,105,110,103,32,105,110,102,111,114,109,97,116,105,111,110,0,45,66,60,115,121,109,98,111,108,62,32,32,32,98,105,110,97,114,121,32,60,115,121,109,98,111,108,62,32,111,117,116,112,117,116,32,105,110,32,67,32,108,97,110,103,117,97,103,101,32,102,111,114,109,97,116,0,45,101,32,32,32,32,32,32,32,32,32,32,32,103,101,110,101,114,97,116,101,32,108,105,116,116,108,101,32,101,110,100,105,97,110,32,105,115,101,113,32,100,97,116,97,0,45,69,32,32,32,32,32,32,32,32,32,32,32,103,101,110,101,114,97,116,101,32,98,105,103,32,101,110,100,105,97,110,32,105,115,101,113,32,100,97,116,97,0,45,45,118,101,114,98,111,115,101,32,32,32,32,114,117,110,32,97,116,32,118,101,114,98,111,115,101,32,109,111,100,101,0,45,45,118,101,114,115,105,111,110,32,32,32,32,112,114,105,110,116,32,116,104,101,32,118,101,114,115,105,111,110,0,45,45,99,111,112,121,114,105,103,104,116,32,32,112,114,105,110,116,32,116,104,101,32,99,111,112,121,114,105,103,104,116,0,85,115,97,103,101,58,32,37,115,32,91,115,119,105,116,99,104,101,115,93,32,112,114,111,103,114,97,109,102,105,108,101,10,0,32,32,37,115,10,0,114,0,37,115,58,32,99,97,110,110,111,116,32,111,112,101,110,32,112,114,111,103,114,97,109,32,102,105,108,101,46,32,40,37,115,41,10,0,37,115,58,32,105,110,118,97,108,105,100,32,67,32,108,97,110,103,117,97,103,101,32,115,121,109,98,111,108,32,110,97,109,101,10,0,37,115,58,32,101,114,114,111,114,32,105,110,32,109,114,98,32,100,117,109,112,32,40,37,115,41,32,37,100,10,0,82,73,84,69,0,69,84,73,82,0,48,48,48,51,0,77,65,84,90,0,48,48,48,48,0,69,78,68,0,0,76,86,65,82,0,76,73,78,69,0,68,66,71,0,0,73,82,69,80,0,37,46,56,101,0,47,42,32,100,117,109,112,101,100,32,105,110,32,108,105,116,116,108,101,32,101,110,100,105,97,110,32,111,114,100,101,114,46,10,32,32,32,117,115,101,32,96,109,114,98,99,32,45,69,96,32,111,112,116,105,111,110,32,102,111,114,32,98,105,103,32,101,110,100,105,97,110,32,67,80,85,46,32,42,47,10,0,47,42,32,100,117,109,112,101,100,32,105,110,32,98,105,103,32,101,110,100,105,97,110,32,111,114,100,101,114,46,10,32,32,32,117,115,101,32,96,109,114,98,99,32,45,101,96,32,111,112,116,105,111,110,32,102,111,114,32,98,101,116,116,101,114,32,112,101,114,102,111,114,109,97,110,99,101,32,111,110,32,108,105,116,116,108,101,32,101,110,100,105,97,110,32,67,80,85,46,32,42,47,10,0,35,105,110,99,108,117,100,101,32,60,115,116,100,105,110,116,46,104,62,10,0,99,111,110,115,116,32,117,105,110,116,56,95,116,10,35,105,102,32,100,101,102,105,110,101,100,32,95,95,71,78,85,67,95,95,10,95,95,97,116,116,114,105,98,117,116,101,95,95,40,40,97,108,105,103,110,101,100,40,37,117,41,41,41,10,35,101,108,105,102,32,100,101,102,105,110,101,100,32,95,77,83,67,95,86,69,82,10,95,95,100,101,99,108,115,112,101,99,40,97,108,105,103,110,40,37,117,41,41,10,35,101,110,100,105,102,10,37,115,91,93,32,61,32,123,0,48,120,37,48,50,120,44,0,10,125,59,10,0,105,110,118,97,108,105,100,32,102,111,114,109,97,116,32,115,116,114,105,110,103,0,97,114,101,110,97,32,111,118,101,114,102,108,111,119,32,101,114,114,111,114,0,71,67,0,115,116,97,114,116,0,101,110,97,98,108,101,0,100,105,115,97,98,108,101,0,105,110,116,101,114,118,97,108,95,114,97,116,105,111,0,105,110,116,101,114,118,97,108,95,114,97,116,105,111,61,0,115,116,101,112,95,114,97,116,105,111,0,115,116,101,112,95,114,97,116,105,111,61,0,103,101,110,101,114,97,116,105,111,110,97,108,95,109,111,100,101,61,0,103,101,110,101,114,97,116,105,111,110,97,108,95,109,111,100,101,0,2,8,32,128,1,4,16,64,3,12,48,192,105,102,110,111,110,101,0,100,101,102,97,117,108,116,0,100,101,102,97,117,108,116,61,0,100,101,102,97,117,108,116,95,112,114,111,99,0,100,101,102,97,117,108,116,95,112,114,111,99,61,0,95,95,100,101,108,101,116,101,0,104,97,115,95,107,101,121,63,0,104,97,115,95,118,97,108,117,101,63,0,107,101,121,63,0,107,101,121,115,0,115,116,111,114,101,0,118,97,108,117,101,63,0,118,97,108,117,101,115,0,38,124,111,63,0,124,111,63,0,111,111,0,110,111,110,32,102,108,111,97,116,32,118,97,108,117,101,0,70,108,111,97,116,68,111,109,97,105,110,69,114,114,111,114,0,45,73,110,102,105,110,105,116,121,0,73,110,102,105,110,105,116,121,0,78,97,78,0,105,110,118,97,108,105,100,32,114,97,100,105,120,32,37,83,0,78,117,109,101,114,105,99,0,113,117,111,0,100,105,118,109,111,100,0,99,101,105,108,0,102,105,110,105,116,101,63,0,102,108,111,111,114,0,105,110,102,105,110,105,116,101,63,0,114,111,117,110,100,0,116,114,117,110,99,97,116,101,0,110,97,110,63,0,73,78,70,73,78,73,84,89,0,37,46,55,103,0,99,97,110,39,116,32,99,111,110,118,101,114,116,32,70,108,111,97,116,32,105,110,116,111,32,73,110,116,101,103,101,114,0,102,0,78,105,108,67,108,97,115,115,0,84,114,117,101,67,108,97,115,115,0,70,97,108,115,101,67,108,97,115,115,0,98,0,73,110,116,101,103,101,114,0,99,97,110,39,116,32,99,111,110,118,101,114,116,32,37,83,32,105,110,116,111,32,37,83,0,37,83,32,99,97,110,110,111,116,32,98,101,32,99,111,110,118,101,114,116,101,100,32,116,111,32,37,83,32,98,121,32,35,37,83,0,70,105,120,110,117,109,0,117,110,107,110,111,119,110,32,116,121,112,101,32,37,83,32,40,37,83,32,103,105,118,101,110,41,0,105,67,108,97,115,115,0,83,67,108,97,115,115,0,70,108,111,97,116,0,70,105,108,101,0,68,97,116,97,0,35,60,0,99,108,97,115,115,32,111,114,32,109,111,100,117,108,101,32,114,101,113,117,105,114,101,100,0,116,111,95,105,110,116,0,99,97,110,39,116,32,99,111,110,118,101,114,116,32,37,83,32,116,111,32,73,110,116,101,103,101,114,32,40,37,83,35,37,83,32,103,105,118,101,115,32,37,83,41,0,99,97,110,39,116,32,99,111,110,118,101,114,116,32,110,105,108,32,105,110,116,111,32,73,110,116,101,103,101,114,0,98,97,115,101,32,115,112,101,99,105,102,105,101,100,32,102,111,114,32,110,111,110,32,115,116,114,105,110,103,32,118,97,108,117,101,0,109,97,105,110,0,48,49,50,51,52,53,54,55,56,57,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,0,115,116,114,105,110,103,32,99,97,112,97,99,105,116,121,32,115,105,122,101,32,116,111,111,32,98,105,103,0,115,116,114,105,110,103,32,115,105,122,101,32,116,111,111,32,98,105,103,0,115,116,114,105,110,103,32,99,111,110,116,97,105,110,115,32,110,117,108,108,32,98,121,116,101,0,99,97,110,39,116,32,109,111,100,105,102,121,32,102,114,111,122,101,110,32,115,116,114,105,110,103,0,82,101,103,101,120,112,32,99,108,97,115,115,32,110,111,116,32,105,109,112,108,101,109,101,110,116,101,100,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,1,1,1,1,1,1,1,1,1,1,1,105,108,108,101,103,97,108,32,114,97,100,105,120,32,37,83,0,115,116,114,105,110,103,32,40,37,83,41,32,116,111,111,32,98,105,103,32,102,111,114,32,105,110,116,101,103,101,114,0,105,110,118,97,108,105,100,32,115,116,114,105,110,103,32,102,111,114,32,110,117,109,98,101,114,40,37,83,41,0,105,110,118,97,108,105,100,32,115,116,114,105,110,103,32,102,111,114,32,102,108,111,97,116,40,37,83,41,0,115,116,114,105,110,103,32,102,111,114,32,70,108,111,97,116,32,99,111,110,116,97,105,110,115,32,110,117,108,108,32,98,121,116,101,0,34,0,98,121,116,101,115,105,122,101,0,99,97,112,105,116,97,108,105,122,101,0,99,97,112,105,116,97,108,105,122,101,33,0,99,104,111,109,112,0,99,104,111,109,112,33,0,99,104,111,112,0,99,104,111,112,33,0,100,111,119,110,99,97,115,101,0,100,111,119,110,99,97,115,101,33,0,115,112,108,105,116,0,116,111,95,102,0,116,111,95,105,0,117,112,99,97,115,101,0,117,112,99,97,115,101,33,0,98,121,116,101,115,0,102,114,101,101,122,101,0,124,111,105,0,116,121,112,101,32,109,105,115,109,97,116,99,104,58,32,37,83,32,103,105,118,101,110,0,83,0,124,83,0,111,124,111,0,119,114,111,110,103,32,110,117,109,98,101,114,32,111,102,32,97,114,103,117,109,101,110,116,115,32,40,37,83,32,102,111,114,32,49,41,0,99,97,110,39,116,32,99,111,110,118,101,114,116,32,116,111,32,70,105,120,110,117,109,0,97,114,103,117,109,101,110,116,32,116,111,111,32,98,105,103,0,2,8,32,128,1,4,16,64,3,12,48,192,115,121,109,98,111,108,32,108,101,110,103,116,104,32,116,111,111,32,108,111,110,103,0,83,121,109,98,111,108,0,105,100,50,110,97,109,101,0,116,111,95,115,121,109,0,99,97,110,110,111,116,32,115,101,116,32,105,110,115,116,97,110,99,101,32,118,97,114,105,97,98,108,101,0,39,37,83,39,32,105,115,32,110,111,116,32,97,108,108,111,119,101,100,32,97,115,32,97,110,32,105,110,115,116,97,110,99,101,32,118,97,114,105,97,98,108,101,32,110,97,109,101,0,45,60,0,117,110,105,110,105,116,105,97,108,105,122,101,100,32,99,108,97,115,115,32,118,97,114,105,97,98,108,101,32,37,83,32,105,110,32,37,83,0,99,111,110,115,116,97,110,116,32,108,111,111,107,45,117,112,32,102,111,114,32,110,111,110,32,99,108,97,115,115,47,109,111,100,117,108,101,0,84,111,111,32,108,111,110,103,32,97,114,103,117,109,101,110,116,115,46,32,40,108,105,109,105,116,61,56,41,0,110,101,103,97,116,105,118,101,32,97,114,103,99,32,102,111,114,32,102,117,110,99,97,108,108,32,40,37,83,41,0,115,117,112,101,114,32,99,97,108,108,101,100,32,111,117,116,115,105,100,101,32,111,102,32,109,101,116,104,111,100,0,116,111,95,112,114,111,99,0,70,105,98,101,114,69,114,114,111,114,0,100,111,117,98,108,101,32,114,101,115,117,109,101,0,110,111,32,116,97,114,103,101,116,32,99,108,97,115,115,32,111,114,32,109,111,100,117,108,101,0,79,80,95,68,69,66,85,71,32,37,100,32,37,100,32,37,100,10,0,76,111,99,97,108,74,117,109,112,69,114,114,111,114,0,114,101,116,117,114,110,0,98,114,101,97,107,0,0,121,105,101,108,100,0,0,6,5,5,117,110,101,120,112,101,99,116,101,100,32,0,39,37,83,39,58,32,119,114,111,110,103,32,110,117,109,98,101,114,32,111,102,32,97,114,103,117,109,101,110,116,115,32,40,37,83,32,102,111,114,32,37,83,41,0,119,114,111,110,103,32,110,117,109,98,101,114,32,111,102,32,97,114,103,117,109,101,110,116,115,32,40,37,83,32,102,111,114,32,37,83,41,0,115,116,97,99,107,32,108,101,118,101,108,32,116,111,111,32,100,101,101,112,46,32,40,108,105,109,105,116,61,40,48,120,52,48,48,48,48,32,45,32,49,50,56,41,41,0,110,42,38,0,124,83,38,0,109,111,100,117,108,101,95,101,118,97,108,47,99,108,97,115,115,95,101,118,97,108,32,119,105,116,104,32,115,116,114,105,110,103,32,110,111,116,32,105,109,112,108,101,109,101,110,116,101,100,0,105,110,115,116,97,110,99,101,95,101,118,97,108,32,119,105,116,104,32,115,116,114,105,110,103,32,110,111,116,32,105,109,112,108,101,109,101,110,116,101,100,0,109,101,109,111,114,121,32,97,108,108,111,99,97,116,105,111,110,32,101,114,114,111,114,0,37,115,58,37,100,58,37,100,58,32,37,115,10,0,108,105,110,101,32,37,100,58,37,100,58,32,37,115,10,0,78,79,68,69,95,66,69,71,73,78,58,10,0,78,79,68,69,95,82,69,83,67,85,69,58,10,0,98,111,100,121,58,10,0,114,101,115,99,117,101,58,10,0,104,97,110,100,108,101,32,99,108,97,115,115,101,115,58,10,0,101,120,99,95,118,97,114,58,10,0,114,101,115,99,117,101,32,98,111,100,121,58,10,0,101,108,115,101,58,10,0,78,79,68,69,95,69,78,83,85,82,69,58,10,0,101,110,115,117,114,101,58,10,0,78,79,68,69,95,66,76,79,67,75,58,10,0,109,97,110,100,97,116,111,114,121,32,97,114,103,115,58,10,0,111,112,116,105,111,110,97,108,32,97,114,103,115,58,10,0,37,115,61,0,114,101,115,116,61,42,37,115,10,0,112,111,115,116,32,109,97,110,100,97,116,111,114,121,32,97,114,103,115,58,10,0,98,108,107,61,38,37,115,10,0,78,79,68,69,95,73,70,58,10,0,99,111,110,100,58,10,0,116,104,101,110,58,10,0,78,79,68,69,95,65,78,68,58,10,0,78,79,68,69,95,79,82,58,10,0,78,79,68,69,95,67,65,83,69,58,10,0,99,97,115,101,58,10,0,78,79,68,69,95,87,72,73,76,69,58,10,0,78,79,68,69,95,85,78,84,73,76,58,10,0,78,79,68,69,95,70,79,82,58,10,0,118,97,114,58,10,0,112,114,101,58,10,0,114,101,115,116,58,10,0,112,111,115,116,58,10,0,105,110,58,10,0,100,111,58,10,0,78,79,68,69,95,83,67,79,80,69,58,10,0,108,111,99,97,108,32,118,97,114,105,97,98,108,101,115,58,10,0,44,32,0,37,115,0,78,79,68,69,95,67,65,76,76,58,10,0,109,101,116,104,111,100,61,39,37,115,39,32,40,37,100,41,10,0,97,114,103,115,58,10,0,98,108,111,99,107,58,10,0,78,79,68,69,95,68,79,84,50,58,10,0,78,79,68,69,95,68,79,84,51,58,10,0,78,79,68,69,95,67,79,76,79,78,50,58,10,0,58,58,37,115,10,0,78,79,68,69,95,67,79,76,79,78,51,58,32,58,58,37,115,10,0,78,79,68,69,95,65,82,82,65,89,58,10,0,78,79,68,69,95,72,65,83,72,58,10,0,107,101,121,58,10,0,118,97,108,117,101,58,10,0,78,79,68,69,95,83,80,76,65,84,58,10,0,78,79,68,69,95,65,83,71,78,58,10,0,108,104,115,58,10,0,114,104,115,58,10,0,78,79,68,69,95,77,65,83,71,78,58,10,0,109,108,104,115,58,10,0,40,101,109,112,116,121,41,10,0,78,79,68,69,95,79,80,95,65,83,71,78,58,10,0,111,112,61,39,37,115,39,32,40,37,100,41,10,0,78,79,68,69,95,83,85,80,69,82,58,10,0,78,79,68,69,95,90,83,85,80,69,82,10,0,78,79,68,69,95,82,69,84,85,82,78,58,10,0,78,79,68,69,95,89,73,69,76,68,58,10,0,78,79,68,69,95,66,82,69,65,75,58,10,0,78,79,68,69,95,78,69,88,84,58,10,0,78,79,68,69,95,82,69,68,79,10,0,78,79,68,69,95,82,69,84,82,89,10,0,78,79,68,69,95,76,86,65,82,32,37,115,10,0,78,79,68,69,95,71,86,65,82,32,37,115,10,0,78,79,68,69,95,73,86,65,82,32,37,115,10,0,78,79,68,69,95,67,86,65,82,32,37,115,10,0,78,79,68,69,95,67,79,78,83,84,32,37,115,10,0,78,79,68,69,95,77,65,84,67,72,58,10,0,78,79,68,69,95,66,65,67,75,95,82,69,70,58,32,36,37,99,10,0,78,79,68,69,95,78,84,72,95,82,69,70,58,32,36,37,100,10,0,78,79,68,69,95,65,82,71,32,37,115,10,0,78,79,68,69,95,66,76,79,67,75,95,65,82,71,58,10,0,78,79,68,69,95,73,78,84,32,37,115,32,98,97,115,101,32,37,100,10,0,78,79,68,69,95,70,76,79,65,84,32,37,115,10,0,78,79,68,69,95,78,69,71,65,84,69,10,0,78,79,68,69,95,83,84,82,32,34,37,115,34,32,108,101,110,32,37,100,10,0,78,79,68,69,95,68,83,84,82,10,0,78,79,68,69,95,88,83,84,82,32,34,37,115,34,32,108,101,110,32,37,100,10,0,78,79,68,69,95,68,88,83,84,82,10,0,78,79,68,69,95,82,69,71,88,32,47,37,115,47,37,115,10,0,78,79,68,69,95,68,82,69,71,88,10,0,116,97,105,108,58,32,37,115,10,0,111,112,116,58,32,37,115,10,0,78,79,68,69,95,83,89,77,32,58,37,115,10,0,78,79,68,69,95,83,69,76,70,10,0,78,79,68,69,95,78,73,76,10,0,78,79,68,69,95,84,82,85,69,10,0,78,79,68,69,95,70,65,76,83,69,10,0,78,79,68,69,95,65,76,73,65,83,32,37,115,32,37,115,58,10,0,78,79,68,69,95,85,78,68,69,70,0,32,37,115,0,58,10,0,78,79,68,69,95,67,76,65,83,83,58,10,0,58,37,115,10,0,115,117,112,101,114,58,10,0,78,79,68,69,95,77,79,68,85,76,69,58,10,0,78,79,68,69,95,83,67,76,65,83,83,58,10,0,78,79,68,69,95,68,69,70,58,10,0,37,115,10,0,78,79,68,69,95,83,68,69,70,58,10,0,78,79,68,69,95,80,79,83,84,69,88,69,58,10,0,78,79,68,69,95,72,69,82,69,68,79,67,58,10,0,110,111,100,101,32,116,121,112,101,58,32,37,100,32,40,48,120,37,120,41,10,0,37,48,53,100,32,0,0,2,2,2,2,2,2,2,2,2,143,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,130,2,2,2,128,123,2,139,140,126,124,137,125,136,127,2,2,2,2,2,2,2,2,2,2,118,142,120,116,119,117,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,135,2,141,122,2,138,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,133,121,134,131,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,129,132,0,2,0,2,2,1,1,3,2,1,0,5,4,2,1,1,3,2,0,4,2,3,3,3,3,3,4,1,3,3,6,5,5,5,5,3,3,3,3,1,3,3,1,3,3,3,2,1,1,1,1,1,4,0,5,2,3,4,5,4,5,2,2,2,2,2,1,3,1,3,1,2,3,5,2,4,2,4,1,3,1,3,2,3,1,2,1,4,3,3,3,3,2,1,1,4,3,3,3,3,2,1,1,1,2,1,3,1,1,1,1,1,1,1,1,0,4,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,5,3,5,6,5,5,5,5,4,3,3,3,3,3,3,3,3,3,4,4,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,3,3,3,6,1,1,1,2,4,2,3,1,1,1,1,2,4,2,1,2,2,4,1,0,2,2,2,1,1,2,3,4,4,5,3,4,2,1,1,1,1,1,1,1,1,0,4,0,0,5,0,3,3,3,2,3,3,1,4,3,1,4,3,2,1,2,0,0,5,6,6,0,0,7,0,0,7,5,4,0,0,9,0,6,0,0,8,0,5,0,0,7,0,0,9,1,1,1,1,1,1,1,2,1,1,1,5,1,2,1,1,1,3,1,3,1,4,6,3,5,2,4,1,3,6,8,4,6,4,2,6,2,4,6,2,4,2,4,1,1,1,3,1,4,1,4,1,3,1,1,4,1,3,3,0,5,2,4,5,5,2,4,4,3,3,3,2,1,4,0,5,0,5,5,1,1,6,1,1,1,1,2,1,2,1,1,1,1,1,1,1,2,3,1,2,1,0,4,1,2,2,3,2,3,1,0,1,1,2,1,2,1,2,1,0,4,2,3,1,4,2,1,1,1,1,1,2,2,3,1,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,4,3,2,6,8,4,6,4,6,2,4,6,2,4,2,4,1,0,1,1,1,1,1,1,1,3,1,3,2,2,2,1,3,1,3,1,1,2,1,1,1,2,2,1,1,0,4,1,2,1,3,3,2,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,2,2,0,1,1,1,1,0,3,1,2,0,66,69,71,73,78,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,101,108,115,101,32,119,105,116,104,111,117,116,32,114,101,115,99,117,101,32,105,115,32,117,115,101,108,101,115,115,0,69,78,68,32,110,111,116,32,115,117,112,111,114,116,101,100,0,99,111,110,115,116,97,110,116,32,114,101,45,97,115,115,105,103,110,109,101,110,116,0,100,121,110,97,109,105,99,32,99,111,110,115,116,97,110,116,32,97,115,115,105,103,110,109,101,110,116,0,99,108,97,115,115,47,109,111,100,117,108,101,32,110,97,109,101,32,109,117,115,116,32,98,101,32,67,79,78,83,84,65,78,84,0,61,126,0,33,126,0,62,61,0,60,61,0,62,62,0,42,42,0,43,64,0,45,64,0,47,0,37,0,124,0,94,0,60,0,126,0,99,108,97,115,115,32,100,101,102,105,110,105,116,105,111,110,32,105,110,32,109,101,116,104,111,100,32,98,111,100,121,0,109,111,100,117,108,101,32,100,101,102,105,110,105,116,105,111,110,32,105,110,32,109,101,116,104,111,100,32,98,111,100,121,0,98,108,111,99,107,32,103,105,118,101,110,32,116,111,32,121,105,101,108,100,0,37,100,0,102,111,114,109,97,108,32,97,114,103,117,109,101,110,116,32,99,97,110,110,111,116,32,98,101,32,97,32,99,111,110,115,116,97,110,116,0,102,111,114,109,97,108,32,97,114,103,117,109,101,110,116,32,99,97,110,110,111,116,32,98,101,32,97,110,32,105,110,115,116,97,110,99,101,32,118,97,114,105,97,98,108,101,0,102,111,114,109,97,108,32,97,114,103,117,109,101,110,116,32,99,97,110,110,111,116,32,98,101,32,97,32,103,108,111,98,97,108,32,118,97,114,105,97,98,108,101,0,102,111,114,109,97,108,32,97,114,103,117,109,101,110,116,32,99,97,110,110,111,116,32,98,101,32,97,32,99,108,97,115,115,32,118,97,114,105,97,98,108,101,0,99,97,110,39,116,32,100,101,102,105,110,101,32,115,105,110,103,108,101,116,111,110,32,109,101,116,104,111,100,32,102,111,114,32,40,41,46,0,99,97,110,39,116,32,100,101,102,105,110,101,32,115,105,110,103,108,101,116,111,110,32,109,101,116,104,111,100,32,102,111,114,32,108,105,116,101,114,97,108,115,0,115,121,110,116,97,120,32,101,114,114,111,114,0,69,114,114,111,114,58,32,100,105,115,99,97,114,100,105,110,103,0,69,114,114,111,114,58,32,112,111,112,112,105,110,103,0,109,101,109,111,114,121,32,101,120,104,97,117,115,116,101,100,0,67,108,101,97,110,117,112,58,32,100,105,115,99,97,114,100,105,110,103,32,108,111,111,107,97,104,101,97,100,0,67,108,101,97,110,117,112,58,32,112,111,112,112,105,110,103,0,68,101,108,101,116,105,110,103,0,44,32,101,120,112,101,99,116,105,110,103,32,37,115,0,115,121,110,116,97,120,32,101,114,114,111,114,44,32,117,110,101,120,112,101,99,116,101,100,32,37,115,0,32,111,114,32,37,115,0,36,101,110,100,0,101,114,114,111,114,0,36,117,110,100,101,102,105,110,101,100,0,107,101,121,119,111,114,100,95,99,108,97,115,115,0,107,101,121,119,111,114,100,95,109,111,100,117,108,101,0,107,101,121,119,111,114,100,95,100,101,102,0,107,101,121,119,111,114,100,95,98,101,103,105,110,0,107,101,121,119,111,114,100,95,105,102,0,107,101,121,119,111,114,100,95,117,110,108,101,115,115,0,107,101,121,119,111,114,100,95,119,104,105,108,101,0,107,101,121,119,111,114,100,95,117,110,116,105,108,0,107,101,121,119,111,114,100,95,102,111,114,0,107,101,121,119,111,114,100,95,117,110,100,101,102,0,107,101,121,119,111,114,100,95,114,101,115,99,117,101,0,107,101,121,119,111,114,100,95,101,110,115,117,114,101,0,107,101,121,119,111,114,100,95,101,110,100,0,107,101,121,119,111,114,100,95,116,104,101,110,0,107,101,121,119,111,114,100,95,101,108,115,105,102,0,107,101,121,119,111,114,100,95,101,108,115,101,0,107,101,121,119,111,114,100,95,99,97,115,101,0,107,101,121,119,111,114,100,95,119,104,101,110,0,107,101,121,119,111,114,100,95,98,114,101,97,107,0,107,101,121,119,111,114,100,95,110,101,120,116,0,107,101,121,119,111,114,100,95,114,101,100,111,0,107,101,121,119,111,114,100,95,114,101,116,114,121,0,107,101,121,119,111,114,100,95,105,110,0,107,101,121,119,111,114,100,95,100,111,0,107,101,121,119,111,114,100,95,100,111,95,99,111,110,100,0,107,101,121,119,111,114,100,95,100,111,95,98,108,111,99,107,0,107,101,121,119,111,114,100,95,100,111,95,76,65,77,66,68,65,0,107,101,121,119,111,114,100,95,114,101,116,117,114,110,0,107,101,121,119,111,114,100,95,121,105,101,108,100,0,107,101,121,119,111,114,100,95,115,117,112,101,114,0,107,101,121,119,111,114,100,95,115,101,108,102,0,107,101,121,119,111,114,100,95,110,105,108,0,107,101,121,119,111,114,100,95,116,114,117,101,0,107,101,121,119,111,114,100,95,102,97,108,115,101,0,107,101,121,119,111,114,100,95,97,110,100,0,107,101,121,119,111,114,100,95,111,114,0,107,101,121,119,111,114,100,95,110,111,116,0,109,111,100,105,102,105,101,114,95,105,102,0,109,111,100,105,102,105,101,114,95,117,110,108,101,115,115,0,109,111,100,105,102,105,101,114,95,119,104,105,108,101,0,109,111,100,105,102,105,101,114,95,117,110,116,105,108,0,109,111,100,105,102,105,101,114,95,114,101,115,99,117,101,0,107,101,121,119,111,114,100,95,97,108,105,97,115,0,107,101,121,119,111,114,100,95,66,69,71,73,78,0,107,101,121,119,111,114,100,95,69,78,68,0,107,101,121,119,111,114,100,95,95,76,73,78,69,95,95,0,107,101,121,119,111,114,100,95,95,70,73,76,69,95,95,0,107,101,121,119,111,114,100,95,95,69,78,67,79,68,73,78,71,95,95,0,116,73,68,69,78,84,73,70,73,69,82,0,116,70,73,68,0,116,71,86,65,82,0,116,73,86,65,82,0,116,67,79,78,83,84,65,78,84,0,116,67,86,65,82,0,116,76,65,66,69,76,0,116,73,78,84,69,71,69,82,0,116,70,76,79,65,84,0,116,67,72,65,82,0,116,88,83,84,82,73,78,71,0,116,82,69,71,69,88,80,0,116,83,84,82,73,78,71,0,116,83,84,82,73,78,71,95,80,65,82,84,0,116,83,84,82,73,78,71,95,77,73,68,0,116,78,84,72,95,82,69,70,0,116,66,65,67,75,95,82,69,70,0,116,82,69,71,69,88,80,95,69,78,68,0,116,85,80,76,85,83,0,116,85,77,73,78,85,83,0,116,80,79,87,0,116,67,77,80,0,116,69,81,0,116,69,81,81,0,116,78,69,81,0,116,71,69,81,0,116,76,69,81,0,116,65,78,68,79,80,0,116,79,82,79,80,0,116,77,65,84,67,72,0,116,78,77,65,84,67,72,0,116,68,79,84,50,0,116,68,79,84,51,0,116,65,82,69,70,0,116,65,83,69,84,0,116,76,83,72,70,84,0,116,82,83,72,70,84,0,116,67,79,76,79,78,50,0,116,67,79,76,79,78,51,0,116,79,80,95,65,83,71,78,0,116,65,83,83,79,67,0,116,76,80,65,82,69,78,0,116,76,80,65,82,69,78,95,65,82,71,0,116,82,80,65,82,69,78,0,116,76,66,82,65,67,75,0,116,76,66,82,65,67,69,0,116,76,66,82,65,67,69,95,65,82,71,0,116,83,84,65,82,0,116,65,77,80,69,82,0,116,76,65,77,66,68,65,0,116,83,89,77,66,69,71,0,116,82,69,71,69,88,80,95,66,69,71,0,116,87,79,82,68,83,95,66,69,71,0,116,83,89,77,66,79,76,83,95,66,69,71,0,116,83,84,82,73,78,71,95,66,69,71,0,116,88,83,84,82,73,78,71,95,66,69,71,0,116,83,84,82,73,78,71,95,68,86,65,82,0,116,76,65,77,66,69,71,0,116,72,69,82,69,68,79,67,95,66,69,71,0,116,72,69,82,69,68,79,67,95,69,78,68,0,116,76,73,84,69,82,65,76,95,68,69,76,73,77,0,116,72,68,95,76,73,84,69,82,65,76,95,68,69,76,73,77,0,116,72,68,95,83,84,82,73,78,71,95,80,65,82,84,0,116,72,68,95,83,84,82,73,78,71,95,77,73,68,0,116,76,79,87,69,83,84,0,39,61,39,0,39,63,39,0,39,58,39,0,39,62,39,0,39,60,39,0,39,124,39,0,39,94,39,0,39,38,39,0,39,43,39,0,39,45,39,0,39,42,39,0,39,47,39,0,39,37,39,0,116,85,77,73,78,85,83,95,78,85,77,0,39,33,39,0,39,126,39,0,116,76,65,83,84,95,84,79,75,69,78,0,39,123,39,0,39,125,39,0,39,91,39,0,39,46,39,0,39,44,39,0,39,96,39,0,39,40,39,0,39,41,39,0,39,93,39,0,39,59,39,0,39,92,110,39,0,36,97,99,99,101,112,116,0,112,114,111], "i8", ALLOC_NONE, Runtime.GLOBAL_BASE+51218);
-/* memory initializer */ allocate([103,114,97,109,0,36,64,49,0,116,111,112,95,99,111,109,112,115,116,109,116,0,116,111,112,95,115,116,109,116,115,0,116,111,112,95,115,116,109,116,0,64,50,0,98,111,100,121,115,116,109,116,0,99,111,109,112,115,116,109,116,0,115,116,109,116,115,0,115,116,109,116,0,36,64,51,0,99,111,109,109,97,110,100,95,97,115,103,110,0,101,120,112,114,0,101,120,112,114,95,118,97,108,117,101,0,99,111,109,109,97,110,100,95,99,97,108,108,0,98,108,111,99,107,95,99,111,109,109,97,110,100,0,99,109,100,95,98,114,97,99,101,95,98,108,111,99,107,0,36,64,52,0,99,111,109,109,97,110,100,0,109,108,104,115,0,109,108,104,115,95,105,110,110,101,114,0,109,108,104,115,95,98,97,115,105,99,0,109,108,104,115,95,105,116,101,109,0,109,108,104,115,95,108,105,115,116,0,109,108,104,115,95,112,111,115,116,0,109,108,104,115,95,110,111,100,101,0,108,104,115,0,99,110,97,109,101,0,99,112,97,116,104,0,102,110,97,109,101,0,102,115,121,109,0,117,110,100,101,102,95,108,105,115,116,0,36,64,53,0,111,112,0,114,101,115,119,111,114,100,115,0,97,114,103,0,97,114,103,95,118,97,108,117,101,0,97,114,101,102,95,97,114,103,115,0,112,97,114,101,110,95,97,114,103,115,0,111,112,116,95,112,97,114,101,110,95,97,114,103,115,0,111,112,116,95,99,97,108,108,95,97,114,103,115,0,99,97,108,108,95,97,114,103,115,0,99,111,109,109,97,110,100,95,97,114,103,115,0,64,54,0,98,108,111,99,107,95,97,114,103,0,111,112,116,95,98,108,111,99,107,95,97,114,103,0,97,114,103,115,0,109,114,104,115,0,112,114,105,109,97,114,121,0,64,55,0,64,56,0,36,64,57,0,36,64,49,48,0,64,49,49,0,64,49,50,0,36,64,49,51,0,36,64,49,52,0,36,64,49,53,0,36,64,49,54,0,36,64,49,55,0,36,64,49,56,0,64,49,57,0,64,50,48,0,64,50,49,0,64,50,50,0,64,50,51,0,64,50,52,0,64,50,53,0,64,50,54,0,112,114,105,109,97,114,121,95,118,97,108,117,101,0,116,104,101,110,0,100,111,0,105,102,95,116,97,105,108,0,111,112,116,95,101,108,115,101,0,102,111,114,95,118,97,114,0,102,95,109,97,114,103,0,102,95,109,97,114,103,95,108,105,115,116,0,102,95,109,97,114,103,115,0,98,108,111,99,107,95,112,97,114,97,109,0,111,112,116,95,98,108,111,99,107,95,112,97,114,97,109,0,98,108,111,99,107,95,112,97,114,97,109,95,100,101,102,0,111,112,116,95,98,118,95,100,101,99,108,0,98,118,95,100,101,99,108,115,0,98,118,97,114,0,102,95,108,97,114,103,108,105,115,116,0,108,97,109,98,100,97,95,98,111,100,121,0,100,111,95,98,108,111,99,107,0,36,64,50,55,0,98,108,111,99,107,95,99,97,108,108,0,109,101,116,104,111,100,95,99,97,108,108,0,98,114,97,99,101,95,98,108,111,99,107,0,64,50,56,0,64,50,57,0,99,97,115,101,95,98,111,100,121,0,99,97,115,101,115,0,111,112,116,95,114,101,115,99,117,101,0,101,120,99,95,108,105,115,116,0,101,120,99,95,118,97,114,0,111,112,116,95,101,110,115,117,114,101,0,108,105,116,101,114,97,108,0,115,116,114,105,110,103,0,115,116,114,105,110,103,95,114,101,112,0,115,116,114,105,110,103,95,105,110,116,101,114,112,0,64,51,48,0,120,115,116,114,105,110,103,0,114,101,103,101,120,112,0,104,101,114,101,100,111,99,0,111,112,116,95,104,101,114,101,100,111,99,95,98,111,100,105,101,115,0,104,101,114,101,100,111,99,95,98,111,100,105,101,115,0,104,101,114,101,100,111,99,95,98,111,100,121,0,104,101,114,101,100,111,99,95,115,116,114,105,110,103,95,114,101,112,0,104,101,114,101,100,111,99,95,115,116,114,105,110,103,95,105,110,116,101,114,112,0,64,51,49,0,119,111,114,100,115,0,115,121,109,98,111,108,0,98,97,115,105,99,95,115,121,109,98,111,108,0,115,121,109,0,115,121,109,98,111,108,115,0,110,117,109,101,114,105,99,0,118,97,114,105,97,98,108,101,0,118,97,114,95,108,104,115,0,118,97,114,95,114,101,102,0,98,97,99,107,114,101,102,0,36,64,51,50,0,102,95,97,114,103,108,105,115,116,0,102,95,97,114,103,115,0,102,95,98,97,100,95,97,114,103,0,102,95,110,111,114,109,95,97,114,103,0,102,95,97,114,103,95,105,116,101,109,0,102,95,97,114,103,0,102,95,111,112,116,95,97,115,103,110,0,102,95,111,112,116,0,102,95,98,108,111,99,107,95,111,112,116,0,102,95,98,108,111,99,107,95,111,112,116,97,114,103,0,102,95,111,112,116,97,114,103,0,114,101,115,116,97,114,103,95,109,97,114,107,0,102,95,114,101,115,116,95,97,114,103,0,98,108,107,97,114,103,95,109,97,114,107,0,102,95,98,108,111,99,107,95,97,114,103,0,111,112,116,95,102,95,98,108,111,99,107,95,97,114,103,0,115,105,110,103,108,101,116,111,110,0,36,64,51,51,0,97,115,115,111,99,95,108,105,115,116,0,97,115,115,111,99,115,0,97,115,115,111,99,0,111,112,101,114,97,116,105,111,110,0,111,112,101,114,97,116,105,111,110,50,0,111,112,101,114,97,116,105,111,110,51,0,100,111,116,95,111,114,95,99,111,108,111,110,0,111,112,116,95,116,101,114,109,115,0,111,112,116,95,110,108,0,114,112,97,114,101,110,0,114,98,114,97,99,107,101,116,0,116,114,97,105,108,101,114,0,116,101,114,109,0,110,108,0,36,64,51,52,0,116,101,114,109,115,0,110,111,110,101,0,98,108,111,99,107,32,97,114,103,117,109,101,110,116,32,115,104,111,117,108,100,32,110,111,116,32,98,101,32,103,105,118,101,110,0,98,111,116,104,32,98,108,111,99,107,32,97,114,103,32,97,110,100,32,97,99,116,117,97,108,32,98,108,111,99,107,32,103,105,118,101,110,0,99,97,110,39,116,32,115,101,116,32,118,97,114,105,97,98,108,101,32,36,37,100,0,99,97,110,39,116,32,115,101,116,32,118,97,114,105,97,98,108,101,32,36,37,99,0,73,110,116,101,114,110,97,108,32,101,114,114,111,114,32,105,110,32,98,97,99,107,114,101,102,95,101,114,114,111,114,40,41,32,58,32,110,61,62,99,97,114,32,61,61,32,37,83,0,39,42,39,32,105,110,116,101,114,112,114,101,116,101,100,32,97,115,32,97,114,103,117,109,101,110,116,32,112,114,101,102,105,120,0,10,61,101,110,100,0,101,109,98,101,100,100,101,100,32,100,111,99,117,109,101,110,116,32,109,101,101,116,115,32,101,110,100,32,111,102,32,102,105,108,101,0,105,110,99,111,109,112,108,101,116,101,32,99,104,97,114,97,99,116,101,114,32,115,121,110,116,97,120,0,105,110,118,97,108,105,100,32,99,104,97,114,97,99,116,101,114,32,115,121,110,116,97,120,59,32,117,115,101,32,63,92,37,99,0,38,38,0,39,38,39,32,105,110,116,101,114,112,114,101,116,101,100,32,97,115,32,97,114,103,117,109,101,110,116,32,112,114,101,102,105,120,0,124,124,0,110,111,32,46,60,100,105,103,105,116,62,32,102,108,111,97,116,105,110,103,32,108,105,116,101,114,97,108,32,97,110,121,109,111,114,101,59,32,112,117,116,32,48,32,98,101,102,111,114,101,32,100,111,116,0,110,117,109,101,114,105,99,32,108,105,116,101,114,97,108,32,119,105,116,104,111,117,116,32,100,105,103,105,116,115,0,73,110,118,97,108,105,100,32,111,99,116,97,108,32,100,105,103,105,116,0,48,0,116,114,97,105,108,105,110,103,32,39,37,99,39,32,105,110,32,110,117,109,98,101,114,0,99,111,114,114,117,112,116,101,100,32,102,108,111,97,116,32,118,97,108,117,101,32,37,115,0,102,108,111,97,116,32,37,115,32,111,117,116,32,111,102,32,114,97,110,103,101,0,117,110,107,110,111,119,110,32,116,121,112,101,32,111,102,32,37,115,116,114,105,110,103,0,117,110,116,101,114,109,105,110,97,116,101,100,32,113,117,111,116,101,100,32,115,116,114,105,110,103,32,109,101,101,116,115,32,101,110,100,32,111,102,32,102,105,108,101,0,105,110,99,111,109,112,108,101,116,101,32,103,108,111,98,97,108,32,118,97,114,105,97,98,108,101,32,115,121,110,116,97,120,0,99,97,112,116,117,114,101,32,103,114,111,117,112,32,105,110,100,101,120,32,109,117,115,116,32,98,101,32,60,61,32,37,100,0,105,110,99,111,109,112,108,101,116,101,32,105,110,115,116,97,110,99,101,32,118,97,114,105,97,98,108,101,32,115,121,110,116,97,120,0,105,110,99,111,109,112,108,101,116,101,32,99,108,97,115,115,32,118,97,114,105,97,98,108,101,32,115,121,110,116,97,120,0,39,64,37,99,39,32,105,115,32,110,111,116,32,97,108,108,111,119,101,100,32,97,115,32,97,110,32,105,110,115,116,97,110,99,101,32,118,97,114,105,97,98,108,101,32,110,97,109,101,0,39,64,64,37,99,39,32,105,115,32,110,111,116,32,97,108,108,111,119,101,100,32,97,115,32,97,32,99,108,97,115,115,32,118,97,114,105,97,98,108,101,32,110,97,109,101,0,73,110,118,97,108,105,100,32,99,104,97,114,32,39,92,120,37,48,50,88,39,32,105,110,32,101,120,112,114,101,115,115,105,111,110,0,95,95,69,78,68,95,95,0,98,114,101,97,107,0,101,108,115,101,0,110,105,108,0,101,110,115,117,114,101,0,110,111,116,0,102,97,108,115,101,0,115,101,108,102,0,101,108,115,105,102,0,114,101,115,99,117,101,0,116,114,117,101,0,117,110,116,105,108,0,117,110,108,101,115,115,0,114,101,116,117,114,110,0,100,101,102,0,97,110,100,0,121,105,101,108,100,0,102,111,114,0,117,110,100,101,102,0,111,114,0,105,110,0,119,104,101,110,0,114,101,116,114,121,0,105,102,0,99,97,115,101,0,114,101,100,111,0,110,101,120,116,0,115,117,112,101,114,0,109,111,100,117,108,101,0,95,95,76,73,78,69,95,95,0,95,95,70,73,76,69,95,95,0,95,95,69,78,67,79,68,73,78,71,95,95,0,69,78,68,0,97,108,105,97,115,0,66,69,71,73,78,0,119,104,105,108,101,0,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,14,51,16,8,11,13,51,51,51,51,10,51,13,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,11,51,13,1,26,4,1,8,28,51,23,51,1,1,27,5,19,21,51,8,3,3,11,51,21,24,16,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,97,109,98,105,103,117,111,117,115,32,102,105,114,115,116,32,97,114,103,117,109,101,110,116,59,32,112,117,116,32,112,97,114,101,110,116,104,101,115,101,115,32,111,114,32,101,118,101,110,32,115,112,97,99,101,115,0,115,116,114,105,110,103,32,116,111,111,32,108,111,110,103,32,40,116,114,117,110,99,97,116,101,100,41,0,73,110,118,97,108,105,100,32,101,115,99,97,112,101,32,99,104,97,114,97,99,116,101,114,32,115,121,110,116,97,120,0,73,110,118,97,108,105,100,32,85,110,105,99,111,100,101,32,99,111,100,101,32,112,111,105,110,116,0,48,49,50,51,52,53,54,55,56,57,97,98,99,100,101,102,48,49,50,51,52,53,54,55,56,57,65,66,67,68,69,70,0,117,110,116,101,114,109,105,110,97,116,101,100,32,104,101,114,101,32,100,111,99,117,109,101,110,116,32,105,100,101,110,116,105,102,105,101,114,0,99,97,110,39,116,32,102,105,110,100,32,104,101,114,101,100,111,99,32,100,101,108,105,109,105,116,101,114,32,34,37,115,34,32,97,110,121,119,104,101,114,101,32,98,101,102,111,114,101,32,69,79,70,0,117,110,116,101,114,109,105,110,97,116,101,100,32,115,116,114,105,110,103,32,109,101,101,116,115,32,101,110,100,32,111,102,32,102,105,108,101,0,115,0,117,110,107,110,111,119,110,32,114,101,103,101,120,112,32,111,112,116,105,111,110,37,115,32,45,32,37,115,0,108,105,110,101,32,37,100,58,32,37,115,10,0,99,111,100,101,103,101,110,32,101,114,114,111,114,0,97,114,114,97,121,32,115,105,122,101,32,116,111,111,32,98,105,103,0,105,110,100,101,120,32,37,83,32,111,117,116,32,111,102,32,97,114,114,97,121,0,110,101,103,97,116,105,118,101,32,108,101,110,103,116,104,32,40,37,83,41,0,105,110,100,101,120,32,105,115,32,111,117,116,32,111,102,32,97,114,114,97,121,0,116,111,95,97,0,114,101,99,117,114,115,105,118,101,32,97,114,114,97,121,32,106,111,105,110,0,43,0,60,60,0,91,93,61,0,99,108,101,97,114,0,99,111,110,99,97,116,0,100,101,108,101,116,101,95,97,116,0,101,109,112,116,121,63,0,105,110,100,101,120,0,106,111,105,110,0,108,101,110,103,116,104,0,112,111,112,0,112,117,115,104,0,114,101,112,108,97,99,101,0,114,101,118,101,114,115,101,0,114,101,118,101,114,115,101,33,0,114,105,110,100,101,120,0,115,104,105,102,116,0,115,105,122,101,0,115,108,105,99,101,0,117,110,115,104,105,102,116,0,95,95,97,114,121,95,101,113,0,95,95,97,114,121,95,99,109,112,0,95,95,97,114,121,95,105,110,100,101,120,0,124,105,0,110,101,103,97,116,105,118,101,32,97,114,114,97,121,32,115,105,122,101,0,124,83,33,0,65,0,105,0,97,0,111,111,124,111,0,105,42,0,111,124,105,0,110,101,103,97,116,105,118,101,32,97,114,103,117,109,101,110,116,0,35,0,40,117,110,107,110,111,119,110,41,0,58,105,110,32,0,2,8,32,128,1,4,16,64,3,12,48,192,95,95,111,117,116,101,114,95,95,0,95,95,99,108,97,115,115,105,100,95,95,0,37,83,32,105,115,32,110,111,116,32,97,32,99,108,97,115,115,47,109,111,100,117,108,101,0,110,111,32,115,117,112,101,114,32,99,108,97,115,115,32,102,111,114,32,39,37,83,39,44,32,79,98,106,101,99,116,32,97,115,115,117,109,101,100,0,115,117,112,101,114,99,108,97,115,115,32,109,105,115,109,97,116,99,104,32,102,111,114,32,67,108,97,115,115,32,37,83,32,40,37,83,32,110,111,116,32,37,83,41,0,115,117,112,101,114,99,108,97,115,115,32,109,117,115,116,32,98,101,32,97,32,67,108,97,115,115,32,40,37,83,32,103,105,118,101,110,41,0,99,97,110,39,116,32,109,97,107,101,32,115,117,98,99,108,97,115,115,32,111,102,32,115,105,110,103,108,101,116,111,110,32,99,108,97,115,115,0,99,97,110,39,116,32,109,97,107,101,32,115,117,98,99,108,97,115,115,32,111,102,32,67,108,97,115,115,0,105,110,104,101,114,105,116,101,100,0,78,111,116,73,109,112,108,101,109,101,110,116,101,100,69,114,114,111,114,0,119,114,111,110,103,32,110,117,109,98,101,114,32,111,102,32,97,114,103,117,109,101,110,116,115,0,37,83,32,105,115,32,110,111,116,32,99,108,97,115,115,47,109,111,100,117,108,101,0,82,97,110,103,101,69,114,114,111,114,0,102,108,111,97,116,32,116,111,111,32,98,105,103,32,102,111,114,32,105,110,116,0,110,111,32,105,109,112,108,105,99,105,116,32,99,111,110,118,101,114,115,105,111,110,32,111,102,32,83,116,114,105,110,103,32,105,110,116,111,32,73,110,116,101,103,101,114,0,105,110,118,97,108,105,100,32,97,114,103,117,109,101,110,116,32,115,112,101,99,105,102,105,101,114,32,37,83,0,72,97,115,104,0,116,111,95,104,97,115,104,0,101,120,112,101,99,116,101,100,32,37,83,0,65,114,114,97,121,0,116,111,95,97,114,121,0,83,116,114,105,110,103,0,116,111,95,115,116,114,0,99,121,99,108,105,99,32,105,110,99,108,117,100,101,32,100,101,116,101,99,116,101,100,0,99,121,99,108,105,99,32,112,114,101,112,101,110,100,32,100,101,116,101,99,116,101,100,0,99,97,110,39,116,32,100,101,102,105,110,101,32,115,105,110,103,108,101,116,111,110,0,117,110,100,101,102,105,110,101,100,32,109,101,116,104,111,100,32,39,37,83,39,32,102,111,114,32,99,108,97,115,115,32,37,83,0,42,38,0,99,97,110,39,116,32,99,114,101,97,116,101,32,105,110,115,116,97,110,99,101,32,111,102,32,115,105,110,103,108,101,116,111,110,32,99,108,97,115,115,0,117,110,100,101,102,105,110,101,100,32,109,101,116,104,111,100,32,39,37,83,39,32,102,111,114,32,37,83,0,95,95,99,108,97,115,115,112,97,116,104,95,95,0,35,60,67,108,97,115,115,58,0,62,0,58,58,0,117,110,100,101,102,105,110,101,100,32,109,101,116,104,111,100,32,39,37,83,39,32,102,111,114,32,99,108,97,115,115,32,39,37,83,39,0,66,97,115,105,99,79,98,106,101,99,116,0,79,98,106,101,99,116,0,77,111,100,117,108,101,0,67,108,97,115,115,0,80,114,111,99,0,33,0,109,101,116,104,111,100,95,109,105,115,115,105,110,103,0,115,117,112,101,114,99,108,97,115,115,0,99,108,97,115,115,95,118,97,114,105,97,98,108,101,95,100,101,102,105,110,101,100,63,0,99,108,97,115,115,95,118,97,114,105,97,98,108,101,95,103,101,116,0,99,108,97,115,115,95,118,97,114,105,97,98,108,101,95,115,101,116,0,112,114,101,112,101,110,100,0,112,114,101,112,101,110,100,101,100,0,112,114,101,112,101,110,100,95,102,101,97,116,117,114,101,115,0,105,110,99,108,117,100,101,0,97,112,112,101,110,100,95,102,101,97,116,117,114,101,115,0,99,108,97,115,115,95,101,118,97,108,0,105,110,99,108,117,100,101,100,0,105,110,99,108,117,100,101,100,95,109,111,100,117,108,101,115,0,105,110,115,116,97,110,99,101,95,109,101,116,104,111,100,115,0,109,101,116,104,111,100,95,100,101,102,105,110,101,100,63,0,109,111,100,117,108,101,95,101,118,97,108,0,109,111,100,117,108,101,95,102,117,110,99,116,105,111,110,0,112,114,105,118,97,116,101,0,112,114,111,116,101,99,116,101,100,0,112,117,98,108,105,99,0,114,101,109,111,118,101,95,99,108,97,115,115,95,118,97,114,105,97,98,108,101,0,114,101,109,111,118,101,95,109,101,116,104,111,100,0,109,101,116,104,111,100,95,114,101,109,111,118,101,100,0,97,116,116,114,95,114,101,97,100,101,114,0,97,116,116,114,95,119,114,105,116,101,114,0,97,110,99,101,115,116,111,114,115,0,99,111,110,115,116,95,100,101,102,105,110,101,100,63,0,99,111,110,115,116,95,103,101,116,0,99,111,110,115,116,95,115,101,116,0,99,111,110,115,116,97,110,116,115,0,114,101,109,111,118,101,95,99,111,110,115,116,0,99,111,110,115,116,95,109,105,115,115,105,110,103,0,100,101,102,105,110,101,95,109,101,116,104,111,100,0,99,108,97,115,115,95,118,97,114,105,97,98,108,101,115,0,77,111,100,117,108,101,46,99,111,110,115,116,97,110,116,115,32,110,111,116,32,105,109,112,108,101,109,101,110,116,101,100,0,117,110,105,110,105,116,105,97,108,105,122,101,100,32,99,111,110,115,116,97,110,116,32,37,83,58,58,37,83,0,117,110,105,110,105,116,105,97,108,105,122,101,100,32,99,111,110,115,116,97,110,116,32,37,83,0,99,111,110,115,116,97,110,116,32,37,83,32,110,111,116,32,100,101,102,105,110,101,100,0,119,114,111,110,103,32,99,111,110,115,116,97,110,116,32,110,97,109,101,32,37,83,0,110,124,98,0,110,110,0,35,60,77,111,100,117,108,101,58,0,35,60,63,63,63,63,63,63,58,0,64,0,61,0,109,101,116,104,111,100,32,39,37,83,39,32,110,111,116,32,100,101,102,105,110,101,100,32,105,110,32,37,83,0,99,97,110,110,111,116,32,114,101,109,111,118,101,32,37,83,32,102,111,114,32,37,83,0,99,108,97,115,115,32,118,97,114,105,97,98,108,101,32,37,83,32,110,111,116,32,100,101,102,105,110,101,100,32,102,111,114,32,37,83,0,39,37,83,39,32,105,115,32,110,111,116,32,97,108,108,111,119,101,100,32,97,115,32,97,32,99,108,97,115,115,32,118,97,114,105,97,98,108,101,32,110,97,109,101,0,124,38,0,124,67,38,0,110,42,0,105,114,101,112,32,37,112,32,110,114,101,103,115,61,37,100,32,110,108,111,99,97,108,115,61,37,100,32,112,111,111,108,115,61,37,100,32,115,121,109,115,61,37,100,32,114,101,112,115,61,37,100,10,0,102,105,108,101,58,32,37,115,10,0,32,32,32,32,32,32,0,37,53,100,32,0,37,48,51,100,32,0,79,80,95,78,79,80,10,0,79,80,95,77,79,86,69,9,82,37,100,9,82,37,100,9,0,79,80,95,76,79,65,68,76,9,82,37,100,9,76,40,37,100,41,9,59,32,37,115,0,79,80,95,76,79,65,68,73,9,82,37,100,9,37,100,9,0,79,80,95,76,79,65,68,83,89,77,9,82,37,100,9,58,37,115,0,79,80,95,76,79,65,68,78,73,76,9,82,37,100,9,9,0,79,80,95,76,79,65,68,83,69,76,70,9,82,37,100,9,9,0,79,80,95,76,79,65,68,84,9,82,37,100,9,9,0,79,80,95,76,79,65,68,70,9,82,37,100,9,9,0,79,80,95,71,69,84,71,76,79,66,65,76,9,82,37,100,9,58,37,115,0,79,80,95,83,69,84,71,76,79,66,65,76,9,58,37,115,9,82,37,100,9,0,79,80,95,71,69,84,67,79,78,83,84,9,82,37,100,9,58,37,115,0,79,80,95,83,69,84,67,79,78,83,84,9,58,37,115,9,82,37,100,9,0,79,80,95,71,69,84,77,67,78,83,84,9,82,37,100,9,82,37,100,58,58,37,115,0,79,80,95,83,69,84,77,67,78,83,84,9,82,37,100,58,58,37,115,9,82,37,100,0,79,80,95,71,69,84,73,86,9,82,37,100,9,37,115,0,79,80,95,83,69,84,73,86,9,37,115,9,82,37,100,0,79,80,95,71,69,84,85,80,86,65,82,9,82,37,100,9,37,100,9,37,100,0,79,80,95,83,69,84,85,80,86,65,82,9,82,37,100,9,37,100,9,37,100,0,79,80,95,71,69,84,67,86,9,82,37,100,9,37,115,0,79,80,95,83,69,84,67,86,9,37,115,9,82,37,100,0,79,80,95,74,77,80,9,37,48,51,100,10,0,79,80,95,74,77,80,73,70,9,82,37,100,9,37,48,51,100,10,0,79,80,95,74,77,80,78,79,84,9,82,37,100,9,37,48,51,100,10,0,79,80,95,83,69,78,68,9,82,37,100,9,58,37,115,9,37,100,10,0,79,80,95,83,69,78,68,66,9,82,37,100,9,58,37,115,9,37,100,10,0,79,80,95,84,65,73,76,67,65,76,76,9,82,37,100,9,58,37,115,9,37,100,10,0,79,80,95,83,85,80,69,82,9,82,37,100,9,37,100,10,0,79,80,95,65,82,71,65,82,89,9,82,37,100,9,37,100,58,37,100,58,37,100,58,37,100,0,79,80,95,69,78,84,69,82,9,37,100,58,37,100,58,37,100,58,37,100,58,37,100,58,37,100,58,37,100,10,0,79,80,95,82,69,84,85,82,78,9,82,37,100,0,9,114,101,116,117,114,110,9,0,9,98,114,101,97,107,9,0,9,98,114,111,107,101,110,9,0,79,80,95,66,76,75,80,85,83,72,9,82,37,100,9,37,100,58,37,100,58,37,100,58,37,100,0,79,80,95,76,65,77,66,68,65,9,82,37,100,9,73,40,37,43,100,41,9,37,100,0,79,80,95,82,65,78,71,69,9,82,37,100,9,82,37,100,9,37,100,0,79,80,95,77,69,84,72,79,68,9,82,37,100,9,58,37,115,0,79,80,95,65,68,68,9,82,37,100,9,58,37,115,9,37,100,10,0,79,80,95,65,68,68,73,9,82,37,100,9,58,37,115,9,37,100,10,0,79,80,95,83,85,66,9,82,37,100,9,58,37,115,9,37,100,10,0,79,80,95,83,85,66,73,9,82,37,100,9,58,37,115,9,37,100,10,0,79,80,95,77,85,76,9,82,37,100,9,58,37,115,9,37,100,10,0,79,80,95,68,73,86,9,82,37,100,9,58,37,115,9,37,100,10,0,79,80,95,76,84,9,82,37,100,9,58,37,115,9,37,100,10,0,79,80,95,76,69,9,82,37,100,9,58,37,115,9,37,100,10,0,79,80,95,71,84,9,82,37,100,9,58,37,115,9,37,100,10,0,79,80,95,71,69,9,82,37,100,9,58,37,115,9,37,100,10,0,79,80,95,69,81,9,82,37,100,9,58,37,115,9,37,100,10,0,79,80,95,83,84,79,80,10,0,79,80,95,65,82,82,65,89,9,82,37,100,9,82,37,100,9,37,100,0,79,80,95,65,82,89,67,65,84,9,82,37,100,9,82,37,100,9,0,79,80,95,65,82,89,80,85,83,72,9,82,37,100,9,82,37,100,9,0,79,80,95,65,82,69,70,9,82,37,100,9,82,37,100,9,37,100,0,79,80,95,65,80,79,83,84,9,82,37,100,9,37,100,9,37,100,0,79,80,95,83,84,82,73,78,71,9,82,37,100,9,76,40,37,100,41,9,59,32,37,115,0,79,80,95,83,84,82,67,65,84,9,82,37,100,9,82,37,100,9,0,79,80,95,72,65,83,72,9,82,37,100,9,82,37,100,9,37,100,0,79,80,95,79,67,76,65,83,83,9,82,37,100,9,9,0,79,80,95,67,76,65,83,83,9,82,37,100,9,58,37,115,0,79,80,95,77,79,68,85,76,69,9,82,37,100,9,58,37,115,0,79,80,95,69,88,69,67,9,82,37,100,9,73,40,37,43,100,41,0,79,80,95,83,67,76,65,83,83,9,82,37,100,9,82,37,100,9,0,79,80,95,84,67,76,65,83,83,9,82,37,100,9,9,0,79,80,95,69,82,82,9,37,115,10,0,79,80,95,69,80,85,83,72,9,58,73,40,37,43,100,41,10,0,79,80,95,79,78,69,82,82,9,37,48,51,100,10,0,79,80,95,82,69,83,67,85,69,9,82,37,100,9,9,0,79,80,95,82,65,73,83,69,9,82,37,100,9,9,0,79,80,95,80,79,80,69,82,82,9,37,100,9,9,0,79,80,95,69,80,79,80,9,37,100,10,0,79,80,95,117,110,107,110,111,119,110,32,37,100,9,37,100,9,37,100,9,37,100,10,0,10,0,9,59,32,0,32,0,82,37,100,58,37,115,0,99,105,105,100,120,0,102,105,108,101,0,108,105,110,101,0,78,97,109,101,69,114,114,111,114,0,119,97,114,110,105,110,103,58,32,0,98,117,103,58,32,0,101,120,99,101,112,116,105,111,110,0,101,120,99,101,112,116,105,111,110,32,99,108,97,115,115,47,111,98,106,101,99,116,32,101,120,112,101,99,116,101,100,0,119,114,111,110,103,32,110,117,109,98,101,114,32,111,102,32,97,114,103,117,109,101,110,116,115,32,40,37,83,32,102,111,114,32,48,46,46,51,41,0,101,120,99,101,112,116,105,111,110,32,111,98,106,101,99,116,32,101,120,112,101,99,116,101,100,0,115,101,116,95,98,97,99,107,116,114,97,99,101,0,78,111,77,101,116,104,111,100,69,114,114,111,114,0,110,101,119,0,69,120,99,101,112,116,105,111,110,0,109,101,115,115,97,103,101,0,98,97,99,107,116,114,97,99,101,0,79,117,116,32,111,102,32,109,101,109,111,114,121,0,83,99,114,105,112,116,69,114,114,111,114,0,83,121,110,116,97,120,69,114,114,111,114,0,83,121,115,116,101,109,83,116,97,99,107,69,114,114,111,114,0,109,101,115,103,0,58,0,58,32,0,32,40,0,41,0,124,111,0,119,114,111,110,103,32,97,114,103,117,109,101,110,116,32,116,121,112,101,32,37,83,32,40,101,120,112,101,99,116,101,100,32,37,83,41,0,117,110,105,110,105,116,105,97,108,105,122,101,100,32,37,83,32,40,101,120,112,101,99,116,101,100,32,37,83,41,0,99,97,110,39,116,32,99,108,111,110,101,32,37,83,0,99,97,110,39,116,32,99,108,111,110,101,32,115,105,110,103,108,101,116,111,110,32,99,108,97,115,115,0,99,97,110,39,116,32,100,117,112,32,37,83,0,99,97,110,39,116,32,100,117,112,32,115,105,110,103,108,101,116,111,110,32,99,108,97,115,115,0,95,95,97,116,116,97,99,104,101,100,95,95,0,2,8,32,128,1,4,16,64,3,12,48,192,124,111,111,0,82,117,110,116,105,109,101,69,114,114,111,114,0,108,97,115,116,112,99,0,98,108,111,99,107,95,103,105,118,101,110,63,0,103,108,111,98,97,108,95,118,97,114,105,97,98,108,101,115,0,105,116,101,114,97,116,111,114,63,0,108,111,99,97,108,95,118,97,114,105,97,98,108,101,115,0,114,97,105,115,101,0,115,105,110,103,108,101,116,111,110,95,99,108,97,115,115,0,33,61,0,95,95,105,100,95,95,0,95,95,115,101,110,100,95,95,0,99,108,97,115,115,0,99,108,111,110,101,0,100,117,112,0,101,113,117,97,108,63,0,101,120,116,101,110,100,0,104,97,115,104,0,105,110,115,116,97,110,99,101,95,101,118,97,108,0,105,110,115,116,97,110,99,101,95,111,102,63,0,105,110,115,116,97,110,99,101,95,118,97,114,105,97,98,108,101,95,100,101,102,105,110,101,100,63,0,105,110,115,116,97,110,99,101,95,118,97,114,105,97,98,108,101,95,103,101,116,0,105,110,115,116,97,110,99,101,95,118,97,114,105,97,98,108,101,95,115,101,116,0,105,110,115,116,97,110,99,101,95,118,97,114,105,97,98,108,101,115,0,105,115,95,97,63,0,107,105,110,100,95,111,102,63,0,109,101,116,104,111,100,115,0,110,105,108,63,0,111,98,106,101,99,116,95,105,100,0,112,114,105,118,97,116,101,95,109,101,116,104,111,100,115,0,112,114,111,116,101,99,116,101,100,95,109,101,116,104,111,100,115,0,112,117,98,108,105,99,95,109,101,116,104,111,100,115,0,114,101,109,111,118,101,95,105,110,115,116,97,110,99,101,95,118,97,114,105,97,98,108,101,0,114,101,115,112,111,110,100,95,116,111,63,0,115,101,110,100,0,115,105,110,103,108,101,116,111,110,95,109,101,116,104,111,100,115,0,100,101,102,105,110,101,95,115,105,110,103,108,101,116,111,110,95,109,101,116,104,111,100,0,110,38,0,110,111,32,98,108,111,99,107,32,103,105,118,101,110,0,124,98,0,111,124,98,0,37,83,32,105,115,32,110,111,116,32,97,32,115,121,109,98,111,108,0,114,101,115,112,111,110,100,95,116,111,95,109,105,115,115,105,110,103,63,0,110,0,105,110,115,116,97,110,99,101,32,118,97,114,105,97,98,108,101,32,37,83,32,110,111,116,32,100,101,102,105,110,101,100,0,67,0,110,111,0,105,110,105,116,105,97,108,105,122,101,95,99,111,112,121,32,115,104,111,117,108,100,32,116,97,107,101,32,115,97,109,101,32,99,108,97,115,115,32,111,98,106,101,99,116,0,42,0,119,114,111,110,103,32,110,117,109,98,101,114,32,111,102,32,97,114,103,117,109,101,110,116,115,32,40,97,116,32,108,101,97,115,116,32,49,41,0,101,120,116,101,110,100,95,111,98,106,101,99,116,0,101,120,116,101,110,100,101,100,0,67,97,110,39,116,32,103,101,116,32,99,102,117,110,99,32,101,110,118,32,102,114,111,109,32,110,111,110,45,99,102,117,110,99,32,112,114,111,99,46,0,67,97,110,39,116,32,103,101,116,32,99,102,117,110,99,32,101,110,118,32,102,114,111,109,32,99,102,117,110,99,32,80,114,111,99,32,119,105,116,104,111,117,116,32,82,69,110,118,46,0,73,110,100,101,120,69,114,114,111,114,0,69,110,118,32,105,110,100,101,120,32,111,117,116,32,111,102,32,114,97,110,103,101,58,32,37,83,32,40,101,120,112,101,99,116,101,100,58,32,48,32,60,61,32,105,110,100,101,120,32,60,32,37,83,41,0,97,114,105,116,121,0,91,93,0,108,97,109,98,100,97,0,38,0,116,114,105,101,100,32,116,111,32,99,114,101,97,116,101,32,80,114,111,99,32,111,98,106,101,99,116,32,119,105,116,104,111,117,116,32,97,32,98,108,111,99,107,0,110,111,116,32,97,32,112,114,111,99,0,82,97,110,103,101,0,60,61,62,0,65,114,103,117,109,101,110,116,69,114,114,111,114,0,98,97,100,32,118,97,108,117,101,32,102,111,114,32,114,97,110,103,101,0,111,111,124,98,0,111,0,61,61,0,84,121,112,101,69,114,114,111,114,0,98,101,103,105,110,0,101,110,100,0,101,120,99,108,117,100,101,95,101,110,100,63,0,102,105,114,115,116,0,105,110,99,108,117,100,101,63,0,105,110,105,116,105,97,108,105,122,101,0,108,97,115,116,0,109,101,109,98,101,114,63,0,116,111,95,115,0,105,110,115,112,101,99,116,0,101,113,108,63,0,105,110,105,116,105,97,108,105,122,101,95,99,111,112,121,0,119,114,111,110,103,32,97,114,103,117,109,101,110,116,32,99,108,97,115,115,0,46,46,46,0,49,46,50,46,48,0,49,46,57,0,82,85,66,89,95,86,69,82,83,73,79,78,0,109,114,117,98,121,0,82,85,66,89,95,69,78,71,73,78,69,0,82,85,66,89,95,69,78,71,73,78,69,95,86,69,82,83,73,79,78,0,77,82,85,66,89,95,86,69,82,83,73,79,78,0,77,82,85,66,89,95,82,69,76,69,65,83,69,95,78,79,0,50,48,49,53,45,49,49,45,49,55,0,77,82,85,66,89,95,82,69,76,69,65,83,69,95,68,65,84,69,0,109,114,117,98,121,32,49,46,50,46,48,32,40,50,48,49,53,45,49,49,45,49,55,41,32,0,77,82,85,66,89,95,68,69,83,67,82,73,80,84,73,79,78,0,109,114,117,98,121,32,45,32,67,111,112,121,114,105,103,104,116,32,40,99,41,32,50,48,49,48,45,50,48,49,53,32,109,114,117,98,121,32,100,101,118,101,108,111,112,101,114,115,0,77,82,85,66,89,95,67,79,80,89,82,73,71,72,84,0,83,116,97,110,100,97,114,100,69,114,114,111,114,0,95,95,99,97,115,101,95,101,113,113,0,61,61,61,0,95,95,117,112,100,97,116,101,0,99,97,108,108,0,117,110,101,120,112,101,99,116,101,100,32,110,101,120,116,0,117,110,101,120,112,101,99,116,101,100,32,114,101,100,111,0,117,110,101,120,112,101,99,116,101,100,32,114,101,116,114,121,0,36,0,45,0,75,101,114,110,101,108,0,96,0,82,101,103,101,120,112,0,99,111,109,112,105,108,101,0,97,108,105,97,115,95,109,101,116,104,111,100,0,117,110,100,101,102,95,109,101,116,104,111,100,0,105,110,116,101,114,110,0,109,114,98,95,114,101,97,108,108,111,99,0,99,111,100,101,103,101,110,32,101,114,114,111,114,58,37,115,58,37,100,58,32,37,115,10,0,99,111,100,101,103,101,110,32,101,114,114,111,114,58,32,37,115,10,0,109,97,108,102,111,114,109,101,100,32,114,101,97,100,105,110,116,32,105,110,112,117,116,0,117,110,101,120,112,101,99,116,101,100,32,98,114,101,97,107,0,116,111,111,32,99,111,109,112,108,101,120,32,101,120,112,114,101,115,115,105,111,110,0,117,110,101,120,112,101,99,116,101,100,32,115,99,111,112,101,0,101,97,99,104,0,109,114,98,95,109,97,108,108,111,99,0,117,110,107,110,111,119,110,32,108,104,115,32,37,100,10,0,112,111,111,108,32,109,101,109,111,114,121,32,97,108,108,111,99,97,116,105,111,110,0,116,111,111,32,109,97,110,121,32,115,121,109,98,111,108,115,32,40,109,97,120,32,50,53,54,41,0,98,117,103,58,32,100,105,115,112,97,116,99,104,32,111,110,32,110,111,110,32,74,77,80,32,111,112,10,0,67,111,109,112,97,114,97,98,108,101,0,69,110,117,109,101,114,97,98,108,101,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,1,2,3,4,5,6,7,8,9,255,255,255,255,255,255,255,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,255,255,255,255,255,255,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,1,2,4,7,3,6,5,0,17,0,10,0,17,17,17,0,0,0,0,5,0,0,0,0,0,0,9,0,0,0,0,11,0,0,0,0,0,0,0,0,17,0,15,10,17,17,17,3,10,7,0,1,19,9,11,11,0,0,9,6,11,0,0,11,0,6,17,0,0,0,17,17,17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,17,0,10,10,17,17,17,0,10,0,0,2,0,9,11,0,0,0,9,0,11,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,12,0,0,0,0,9,12,0,0,0,0,0,12,0,0,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,0,0,0,0,0,0,0,0,0,0,0,13,0,0,0,4,13,0,0,0,0,9,14,0,0,0,0,0,14,0,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,15,0,0,0,0,15,0,0,0,0,9,16,0,0,0,0,0,16,0,0,16,0,0,18,0,0,0,18,18,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,0,0,0,18,18,18,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,0,0,0,10,0,0,0,0,10,0,0,0,0,9,11,0,0,0,0,0,11,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,12,0,0,0,0,9,12,0,0,0,0,0,12,0,0,12,0,0,45,43,32,32,32,48,88,48,120,0,40,110,117,108,108,41,0,45,48,88,43,48,88,32,48,88,45,48,120,43,48,120,32,48,120,0,105,110,102,0,73,78,70,0,78,65,78,0,48,49,50,51,52,53,54,55,56,57,65,66,67,68,69,70,46,0,84,33,34,25,13,1,2,3,17,75,28,12,16,4,11,29,18,30,39,104,110,111,112,113,98,32,5,6,15,19,20,21,26,8,22,7,40,36,23,24,9,10,14,27,31,37,35,131,130,125,38,42,43,60,61,62,63,67,71,74,77,88,89,90,91,92,93,94,95,96,97,99,100,101,102,103,105,106,107,108,114,115,116,121,122,123,124,0,73,108,108,101,103,97,108,32,98,121,116,101,32,115,101,113,117,101,110,99,101,0,68,111,109,97,105,110,32,101,114,114,111,114,0,82,101,115,117,108,116,32,110,111,116,32,114,101,112,114,101,115,101,110,116,97,98,108,101,0,78,111,116,32,97,32,116,116,121,0,80,101,114,109,105,115,115,105,111,110,32,100,101,110,105,101,100,0,79,112,101,114,97,116,105,111,110,32,110,111,116,32,112,101,114,109,105,116,116,101,100,0,78,111,32,115,117,99,104,32,102,105,108,101,32,111,114,32,100,105,114,101,99,116,111,114,121,0,78,111,32,115,117,99,104,32,112,114,111,99,101,115,115,0,70,105,108,101,32,101,120,105,115,116,115,0,86,97,108,117,101,32,116,111,111,32,108,97,114,103,101,32,102,111,114,32,100,97,116,97,32,116,121,112,101,0,78,111,32,115,112,97,99,101,32,108,101,102,116,32,111,110,32,100,101,118,105,99,101,0,79,117,116,32,111,102,32,109,101,109,111,114,121,0,82,101,115,111,117,114,99,101,32,98,117,115,121,0,73,110,116,101,114,114,117,112,116,101,100,32,115,121,115,116,101,109,32,99,97,108,108,0,82,101,115,111,117,114,99,101,32,116,101,109,112,111,114,97,114,105,108,121,32,117,110,97,118,97,105,108,97,98,108,101,0,73,110,118,97,108,105,100,32,115,101,101,107,0,67,114,111,115,115,45,100,101,118,105,99,101,32,108,105,110,107,0,82,101,97,100,45,111,110,108,121,32,102,105,108,101,32,115,121,115,116,101,109,0,68,105,114,101,99,116,111,114,121,32,110,111,116,32,101,109,112,116,121,0,67,111,110,110,101,99,116,105,111,110,32,114,101,115,101,116,32,98,121,32,112,101,101,114,0,79,112,101,114,97,116,105,111,110,32,116,105,109,101,100,32,111,117,116,0,67,111,110,110,101,99,116,105,111,110,32,114,101,102,117,115,101,100,0,72,111,115,116,32,105,115,32,100,111,119,110,0,72,111,115,116,32,105,115,32,117,110,114,101,97,99,104,97,98,108,101,0,65,100,100,114,101,115,115,32,105,110,32,117,115,101,0,66,114,111,107,101,110,32,112,105,112,101,0,73,47,79,32,101,114,114,111,114,0,78,111,32,115,117,99,104,32,100,101,118,105,99,101,32,111,114,32,97,100,100,114,101,115,115,0,66,108,111,99,107,32,100,101,118,105,99,101,32,114,101,113,117,105,114,101,100,0,78,111,32,115,117,99,104,32,100,101,118,105,99,101,0,78,111,116,32,97,32,100,105,114,101,99,116,111,114,121,0,73,115,32,97,32,100,105,114,101,99,116,111,114,121,0,84,101,120,116,32,102,105,108,101,32,98,117,115,121,0,69,120,101,99,32,102,111,114,109,97,116,32,101,114,114,111,114,0,73,110,118,97,108,105,100,32,97,114,103,117,109,101,110,116,0,65,114,103,117,109,101,110,116,32,108,105,115,116,32,116,111,111,32,108,111,110,103,0,83,121,109,98,111,108,105,99,32,108,105,110,107,32,108,111,111,112,0,70,105,108,101,110,97,109,101,32,116,111,111,32,108,111,110,103,0,84,111,111,32,109,97,110,121,32,111,112,101,110,32,102,105,108,101,115,32,105,110,32,115,121,115,116,101,109,0,78,111,32,102,105,108,101,32,100,101,115,99,114,105,112,116,111,114,115,32,97,118,97,105,108,97,98,108,101,0,66,97,100,32,102,105,108,101,32,100,101,115,99,114,105,112,116,111,114,0,78,111,32,99,104,105,108,100,32,112,114,111,99,101,115,115,0,66,97,100,32,97,100,100,114,101,115,115,0,70,105,108,101,32,116,111,111], "i8", ALLOC_NONE, Runtime.GLOBAL_BASE+61458);
-/* memory initializer */ allocate([32,108,97,114,103,101,0,84,111,111,32,109,97,110,121,32,108,105,110,107,115,0,78,111,32,108,111,99,107,115,32,97,118,97,105,108,97,98,108,101,0,82,101,115,111,117,114,99,101,32,100,101,97,100,108,111,99,107,32,119,111,117,108,100,32,111,99,99,117,114,0,83,116,97,116,101,32,110,111,116,32,114,101,99,111,118,101,114,97,98,108,101,0,80,114,101,118,105,111,117,115,32,111,119,110,101,114,32,100,105,101,100,0,79,112,101,114,97,116,105,111,110,32,99,97,110,99,101,108,101,100,0,70,117,110,99,116,105,111,110,32,110,111,116,32,105,109,112,108,101,109,101,110,116,101,100,0,78,111,32,109,101,115,115,97,103,101,32,111,102,32,100,101,115,105,114,101,100,32,116,121,112,101,0,73,100,101,110,116,105,102,105,101,114,32,114,101,109,111,118,101,100,0,68,101,118,105,99,101,32,110,111,116,32,97,32,115,116,114,101,97,109,0,78,111,32,100,97,116,97,32,97,118,97,105,108,97,98,108,101,0,68,101,118,105,99,101,32,116,105,109,101,111,117,116,0,79,117,116,32,111,102,32,115,116,114,101,97,109,115,32,114,101,115,111,117,114,99,101,115,0,76,105,110,107,32,104,97,115,32,98,101,101,110,32,115,101,118,101,114,101,100,0,80,114,111,116,111,99,111,108,32,101,114,114,111,114,0,66,97,100,32,109,101,115,115,97,103,101,0,70,105,108,101,32,100,101,115,99,114,105,112,116,111,114,32,105,110,32,98,97,100,32,115,116,97,116,101,0,78,111,116,32,97,32,115,111,99,107,101,116,0,68,101,115,116,105,110,97,116,105,111,110,32,97,100,100,114,101,115,115,32,114,101,113,117,105,114,101,100,0,77,101,115,115,97,103,101,32,116,111,111,32,108,97,114,103,101,0,80,114,111,116,111,99,111,108,32,119,114,111,110,103,32,116,121,112,101,32,102,111,114,32,115,111,99,107,101,116,0,80,114,111,116,111,99,111,108,32,110,111,116,32,97,118,97,105,108,97,98,108,101,0,80,114,111,116,111,99,111,108,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,83,111,99,107,101,116,32,116,121,112,101,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,78,111,116,32,115,117,112,112,111,114,116,101,100,0,80,114,111,116,111,99,111,108,32,102,97,109,105,108,121,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,65,100,100,114,101,115,115,32,102,97,109,105,108,121,32,110,111,116,32,115,117,112,112,111,114,116,101,100,32,98,121,32,112,114,111,116,111,99,111,108,0,65,100,100,114,101,115,115,32,110,111,116,32,97,118,97,105,108,97,98,108,101,0,78,101,116,119,111,114,107,32,105,115,32,100,111,119,110,0,78,101,116,119,111,114,107,32,117,110,114,101,97,99,104,97,98,108,101,0,67,111,110,110,101,99,116,105,111,110,32,114,101,115,101,116,32,98,121,32,110,101,116,119,111,114,107,0,67,111,110,110,101,99,116,105,111,110,32,97,98,111,114,116,101,100,0,78,111,32,98,117,102,102,101,114,32,115,112,97,99,101,32,97,118,97,105,108,97,98,108,101,0,83,111,99,107,101,116,32,105,115,32,99,111,110,110,101,99,116,101,100,0,83,111,99,107,101,116,32,110,111,116,32,99,111,110,110,101,99,116,101,100,0,67,97,110,110,111,116,32,115,101,110,100,32,97,102,116,101,114,32,115,111,99,107,101,116,32,115,104,117,116,100,111,119,110,0,79,112,101,114,97,116,105,111,110,32,97,108,114,101,97,100,121,32,105,110,32,112,114,111,103,114,101,115,115,0,79,112,101,114,97,116,105,111,110,32,105,110,32,112,114,111,103,114,101,115,115,0,83,116,97,108,101,32,102,105,108,101,32,104,97,110,100,108,101,0,82,101,109,111,116,101,32,73,47,79,32,101,114,114,111,114,0,81,117,111,116,97,32,101,120,99,101,101,100,101,100,0,78,111,32,109,101,100,105,117,109,32,102,111,117,110,100,0,87,114,111,110,103,32,109,101,100,105,117,109,32,116,121,112,101,0,78,111,32,101,114,114,111,114,32,105,110,102,111,114,109,97,116,105,111,110,0,0,105,110,102,105,110,105,116,121,0,110,97,110,0,114,119,97,0], "i8", ALLOC_NONE, Runtime.GLOBAL_BASE+71698);
-
+var ASM_CONSTS = {
+  
+};
+
+
+
+
+// STATICTOP = STATIC_BASE + 78848;
+/* global initializers */  __ATINIT__.push({ func: function() { ___wasm_call_ctors() } });
 
 
@@ -1608,95 +1869,860 @@
 
 /* no memory initializer */
-var tempDoublePtr = STATICTOP; STATICTOP += 16;
-
-assert(tempDoublePtr % 8 == 0);
-
-function copyTempFloat(ptr) { // functions, because inlining this code increases code size too much
-
-  HEAP8[tempDoublePtr] = HEAP8[ptr];
-
-  HEAP8[tempDoublePtr+1] = HEAP8[ptr+1];
-
-  HEAP8[tempDoublePtr+2] = HEAP8[ptr+2];
-
-  HEAP8[tempDoublePtr+3] = HEAP8[ptr+3];
-
-}
-
-function copyTempDouble(ptr) {
-
-  HEAP8[tempDoublePtr] = HEAP8[ptr];
-
-  HEAP8[tempDoublePtr+1] = HEAP8[ptr+1];
-
-  HEAP8[tempDoublePtr+2] = HEAP8[ptr+2];
-
-  HEAP8[tempDoublePtr+3] = HEAP8[ptr+3];
-
-  HEAP8[tempDoublePtr+4] = HEAP8[ptr+4];
-
-  HEAP8[tempDoublePtr+5] = HEAP8[ptr+5];
-
-  HEAP8[tempDoublePtr+6] = HEAP8[ptr+6];
-
-  HEAP8[tempDoublePtr+7] = HEAP8[ptr+7];
-
-}
-
 // {{PRE_LIBRARY}}
 
 
-   
-  Module["_i64Subtract"] = _i64Subtract;
-
-   
-  Module["_i64Add"] = _i64Add;
-
-   
-  Module["_memset"] = _memset;
-
-   
-  Module["_bitshift64Lshr"] = _bitshift64Lshr;
-
-  
-  
-  
-  function _realloc() { throw 'bad' }
-  Module["_realloc"] = _realloc; 
-  Module["_saveSetjmp"] = _saveSetjmp;
-  
-   
-  Module["_testSetjmp"] = _testSetjmp;function _longjmp(env, value) {
-      Module['setThrew'](env, value || 1);
-      throw 'longjmp';
-    }function _emscripten_longjmp(env, value) {
-      _longjmp(env, value);
-    }
-
-   
-  Module["_bitshift64Shl"] = _bitshift64Shl;
-
-  function _abort() {
-      Module['abort']();
-    }
-
-
-  
-  
-  
-  var ERRNO_CODES={EPERM:1,ENOENT:2,ESRCH:3,EINTR:4,EIO:5,ENXIO:6,E2BIG:7,ENOEXEC:8,EBADF:9,ECHILD:10,EAGAIN:11,EWOULDBLOCK:11,ENOMEM:12,EACCES:13,EFAULT:14,ENOTBLK:15,EBUSY:16,EEXIST:17,EXDEV:18,ENODEV:19,ENOTDIR:20,EISDIR:21,EINVAL:22,ENFILE:23,EMFILE:24,ENOTTY:25,ETXTBSY:26,EFBIG:27,ENOSPC:28,ESPIPE:29,EROFS:30,EMLINK:31,EPIPE:32,EDOM:33,ERANGE:34,ENOMSG:42,EIDRM:43,ECHRNG:44,EL2NSYNC:45,EL3HLT:46,EL3RST:47,ELNRNG:48,EUNATCH:49,ENOCSI:50,EL2HLT:51,EDEADLK:35,ENOLCK:37,EBADE:52,EBADR:53,EXFULL:54,ENOANO:55,EBADRQC:56,EBADSLT:57,EDEADLOCK:35,EBFONT:59,ENOSTR:60,ENODATA:61,ETIME:62,ENOSR:63,ENONET:64,ENOPKG:65,EREMOTE:66,ENOLINK:67,EADV:68,ESRMNT:69,ECOMM:70,EPROTO:71,EMULTIHOP:72,EDOTDOT:73,EBADMSG:74,ENOTUNIQ:76,EBADFD:77,EREMCHG:78,ELIBACC:79,ELIBBAD:80,ELIBSCN:81,ELIBMAX:82,ELIBEXEC:83,ENOSYS:38,ENOTEMPTY:39,ENAMETOOLONG:36,ELOOP:40,EOPNOTSUPP:95,EPFNOSUPPORT:96,ECONNRESET:104,ENOBUFS:105,EAFNOSUPPORT:97,EPROTOTYPE:91,ENOTSOCK:88,ENOPROTOOPT:92,ESHUTDOWN:108,ECONNREFUSED:111,EADDRINUSE:98,ECONNABORTED:103,ENETUNREACH:101,ENETDOWN:100,ETIMEDOUT:110,EHOSTDOWN:112,EHOSTUNREACH:113,EINPROGRESS:115,EALREADY:114,EDESTADDRREQ:89,EMSGSIZE:90,EPROTONOSUPPORT:93,ESOCKTNOSUPPORT:94,EADDRNOTAVAIL:99,ENETRESET:102,EISCONN:106,ENOTCONN:107,ETOOMANYREFS:109,EUSERS:87,EDQUOT:122,ESTALE:116,ENOTSUP:95,ENOMEDIUM:123,EILSEQ:84,EOVERFLOW:75,ECANCELED:125,ENOTRECOVERABLE:131,EOWNERDEAD:130,ESTRPIPE:86};
-  
-  var ERRNO_MESSAGES={0:"Success",1:"Not super-user",2:"No such file or directory",3:"No such process",4:"Interrupted system call",5:"I/O error",6:"No such device or address",7:"Arg list too long",8:"Exec format error",9:"Bad file number",10:"No children",11:"No more processes",12:"Not enough core",13:"Permission denied",14:"Bad address",15:"Block device required",16:"Mount device busy",17:"File exists",18:"Cross-device link",19:"No such device",20:"Not a directory",21:"Is a directory",22:"Invalid argument",23:"Too many open files in system",24:"Too many open files",25:"Not a typewriter",26:"Text file busy",27:"File too large",28:"No space left on device",29:"Illegal seek",30:"Read only file system",31:"Too many links",32:"Broken pipe",33:"Math arg out of domain of func",34:"Math result not representable",35:"File locking deadlock error",36:"File or path name too long",37:"No record locks available",38:"Function not implemented",39:"Directory not empty",40:"Too many symbolic links",42:"No message of desired type",43:"Identifier removed",44:"Channel number out of range",45:"Level 2 not synchronized",46:"Level 3 halted",47:"Level 3 reset",48:"Link number out of range",49:"Protocol driver not attached",50:"No CSI structure available",51:"Level 2 halted",52:"Invalid exchange",53:"Invalid request descriptor",54:"Exchange full",55:"No anode",56:"Invalid request code",57:"Invalid slot",59:"Bad font file fmt",60:"Device not a stream",61:"No data (for no delay io)",62:"Timer expired",63:"Out of streams resources",64:"Machine is not on the network",65:"Package not installed",66:"The object is remote",67:"The link has been severed",68:"Advertise error",69:"Srmount error",70:"Communication error on send",71:"Protocol error",72:"Multihop attempted",73:"Cross mount point (not really error)",74:"Trying to read unreadable message",75:"Value too large for defined data type",76:"Given log. name not unique",77:"f.d. invalid for this operation",78:"Remote address changed",79:"Can   access a needed shared lib",80:"Accessing a corrupted shared lib",81:".lib section in a.out corrupted",82:"Attempting to link in too many libs",83:"Attempting to exec a shared library",84:"Illegal byte sequence",86:"Streams pipe error",87:"Too many users",88:"Socket operation on non-socket",89:"Destination address required",90:"Message too long",91:"Protocol wrong type for socket",92:"Protocol not available",93:"Unknown protocol",94:"Socket type not supported",95:"Not supported",96:"Protocol family not supported",97:"Address family not supported by protocol family",98:"Address already in use",99:"Address not available",100:"Network interface is not configured",101:"Network is unreachable",102:"Connection reset by network",103:"Connection aborted",104:"Connection reset by peer",105:"No buffer space available",106:"Socket is already connected",107:"Socket is not connected",108:"Can't send after socket shutdown",109:"Too many references",110:"Connection timed out",111:"Connection refused",112:"Host is down",113:"Host is unreachable",114:"Socket already connected",115:"Connection already in progress",116:"Stale file handle",122:"Quota exceeded",123:"No medium (in tape drive)",125:"Operation canceled",130:"Previous owner died",131:"State not recoverable"};
-  
-  function ___setErrNo(value) {
-      if (Module['___errno_location']) HEAP32[((Module['___errno_location']())>>2)]=value;
-      else Module.printErr('failed to set errno from JS');
+  
+  
+  function _emscripten_set_main_loop_timing(mode, value) {
+      Browser.mainLoop.timingMode = mode;
+      Browser.mainLoop.timingValue = value;
+  
+      if (!Browser.mainLoop.func) {
+        console.error('emscripten_set_main_loop_timing: Cannot set timing mode for main loop since a main loop does not exist! Call emscripten_set_main_loop first to set one up.');
+        return 1; // Return non-zero on failure, can't set timing mode when there is no main loop.
+      }
+  
+      if (mode == 0 /*EM_TIMING_SETTIMEOUT*/) {
+        Browser.mainLoop.scheduler = function Browser_mainLoop_scheduler_setTimeout() {
+          var timeUntilNextTick = Math.max(0, Browser.mainLoop.tickStartTime + value - _emscripten_get_now())|0;
+          setTimeout(Browser.mainLoop.runner, timeUntilNextTick); // doing this each time means that on exception, we stop
+        };
+        Browser.mainLoop.method = 'timeout';
+      } else if (mode == 1 /*EM_TIMING_RAF*/) {
+        Browser.mainLoop.scheduler = function Browser_mainLoop_scheduler_rAF() {
+          Browser.requestAnimationFrame(Browser.mainLoop.runner);
+        };
+        Browser.mainLoop.method = 'rAF';
+      } else if (mode == 2 /*EM_TIMING_SETIMMEDIATE*/) {
+        if (typeof setImmediate === 'undefined') {
+          // Emulate setImmediate. (note: not a complete polyfill, we don't emulate clearImmediate() to keep code size to minimum, since not needed)
+          var setImmediates = [];
+          var emscriptenMainLoopMessageId = 'setimmediate';
+          var Browser_setImmediate_messageHandler = function(event) {
+            // When called in current thread or Worker, the main loop ID is structured slightly different to accommodate for --proxy-to-worker runtime listening to Worker events,
+            // so check for both cases.
+            if (event.data === emscriptenMainLoopMessageId || event.data.target === emscriptenMainLoopMessageId) {
+              event.stopPropagation();
+              setImmediates.shift()();
+            }
+          }
+          addEventListener("message", Browser_setImmediate_messageHandler, true);
+          setImmediate = /** @type{function(function(): ?, ...?): number} */(function Browser_emulated_setImmediate(func) {
+            setImmediates.push(func);
+            if (ENVIRONMENT_IS_WORKER) {
+              if (Module['setImmediates'] === undefined) Module['setImmediates'] = [];
+              Module['setImmediates'].push(func);
+              postMessage({target: emscriptenMainLoopMessageId}); // In --proxy-to-worker, route the message via proxyClient.js
+            } else postMessage(emscriptenMainLoopMessageId, "*"); // On the main thread, can just send the message to itself.
+          })
+        }
+        Browser.mainLoop.scheduler = function Browser_mainLoop_scheduler_setImmediate() {
+          setImmediate(Browser.mainLoop.runner);
+        };
+        Browser.mainLoop.method = 'immediate';
+      }
+      return 0;
+    }
+  
+  var _emscripten_get_now;if (ENVIRONMENT_IS_NODE) {
+    _emscripten_get_now = function() {
+      var t = process['hrtime']();
+      return t[0] * 1e3 + t[1] / 1e6;
+    };
+  } else if (typeof dateNow !== 'undefined') {
+    _emscripten_get_now = dateNow;
+  } else _emscripten_get_now = function() { return performance.now(); }
+  ;/** @param {number|boolean=} noSetTiming */
+  function _emscripten_set_main_loop(func, fps, simulateInfiniteLoop, arg, noSetTiming) {
+      noExitRuntime = true;
+  
+      assert(!Browser.mainLoop.func, 'emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.');
+  
+      Browser.mainLoop.func = func;
+      Browser.mainLoop.arg = arg;
+  
+      var browserIterationFunc;
+      if (typeof arg !== 'undefined') {
+        browserIterationFunc = function() {
+          Module['dynCall_vi'](func, arg);
+        };
+      } else {
+        browserIterationFunc = function() {
+          Module['dynCall_v'](func);
+        };
+      }
+  
+      var thisMainLoopId = Browser.mainLoop.currentlyRunningMainloop;
+  
+      Browser.mainLoop.runner = function Browser_mainLoop_runner() {
+        if (ABORT) return;
+        if (Browser.mainLoop.queue.length > 0) {
+          var start = Date.now();
+          var blocker = Browser.mainLoop.queue.shift();
+          blocker.func(blocker.arg);
+          if (Browser.mainLoop.remainingBlockers) {
+            var remaining = Browser.mainLoop.remainingBlockers;
+            var next = remaining%1 == 0 ? remaining-1 : Math.floor(remaining);
+            if (blocker.counted) {
+              Browser.mainLoop.remainingBlockers = next;
+            } else {
+              // not counted, but move the progress along a tiny bit
+              next = next + 0.5; // do not steal all the next one's progress
+              Browser.mainLoop.remainingBlockers = (8*remaining + next)/9;
+            }
+          }
+          console.log('main loop blocker "' + blocker.name + '" took ' + (Date.now() - start) + ' ms'); //, left: ' + Browser.mainLoop.remainingBlockers);
+          Browser.mainLoop.updateStatus();
+  
+          // catches pause/resume main loop from blocker execution
+          if (thisMainLoopId < Browser.mainLoop.currentlyRunningMainloop) return;
+  
+          setTimeout(Browser.mainLoop.runner, 0);
+          return;
+        }
+  
+        // catch pauses from non-main loop sources
+        if (thisMainLoopId < Browser.mainLoop.currentlyRunningMainloop) return;
+  
+        // Implement very basic swap interval control
+        Browser.mainLoop.currentFrameNumber = Browser.mainLoop.currentFrameNumber + 1 | 0;
+        if (Browser.mainLoop.timingMode == 1/*EM_TIMING_RAF*/ && Browser.mainLoop.timingValue > 1 && Browser.mainLoop.currentFrameNumber % Browser.mainLoop.timingValue != 0) {
+          // Not the scheduled time to render this frame - skip.
+          Browser.mainLoop.scheduler();
+          return;
+        } else if (Browser.mainLoop.timingMode == 0/*EM_TIMING_SETTIMEOUT*/) {
+          Browser.mainLoop.tickStartTime = _emscripten_get_now();
+        }
+  
+        // Signal GL rendering layer that processing of a new frame is about to start. This helps it optimize
+        // VBO double-buffering and reduce GPU stalls.
+  
+  
+  
+        if (Browser.mainLoop.method === 'timeout' && Module.ctx) {
+          warnOnce('Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!');
+          Browser.mainLoop.method = ''; // just warn once per call to set main loop
+        }
+  
+        Browser.mainLoop.runIter(browserIterationFunc);
+  
+        checkStackCookie();
+  
+        // catch pauses from the main loop itself
+        if (thisMainLoopId < Browser.mainLoop.currentlyRunningMainloop) return;
+  
+        // Queue new audio data. This is important to be right after the main loop invocation, so that we will immediately be able
+        // to queue the newest produced audio samples.
+        // TODO: Consider adding pre- and post- rAF callbacks so that GL.newRenderingFrameStarted() and SDL.audio.queueNewAudioData()
+        //       do not need to be hardcoded into this function, but can be more generic.
+        if (typeof SDL === 'object' && SDL.audio && SDL.audio.queueNewAudioData) SDL.audio.queueNewAudioData();
+  
+        Browser.mainLoop.scheduler();
+      }
+  
+      if (!noSetTiming) {
+        if (fps && fps > 0) _emscripten_set_main_loop_timing(0/*EM_TIMING_SETTIMEOUT*/, 1000.0 / fps);
+        else _emscripten_set_main_loop_timing(1/*EM_TIMING_RAF*/, 1); // Do rAF by rendering each frame (no decimating)
+  
+        Browser.mainLoop.scheduler();
+      }
+  
+      if (simulateInfiniteLoop) {
+        throw 'unwind';
+      }
+    }var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function() {
+          Browser.mainLoop.scheduler = null;
+          Browser.mainLoop.currentlyRunningMainloop++; // Incrementing this signals the previous main loop that it's now become old, and it must return.
+        },resume:function() {
+          Browser.mainLoop.currentlyRunningMainloop++;
+          var timingMode = Browser.mainLoop.timingMode;
+          var timingValue = Browser.mainLoop.timingValue;
+          var func = Browser.mainLoop.func;
+          Browser.mainLoop.func = null;
+          _emscripten_set_main_loop(func, 0, false, Browser.mainLoop.arg, true /* do not set timing and call scheduler, we will do it on the next lines */);
+          _emscripten_set_main_loop_timing(timingMode, timingValue);
+          Browser.mainLoop.scheduler();
+        },updateStatus:function() {
+          if (Module['setStatus']) {
+            var message = Module['statusMessage'] || 'Please wait...';
+            var remaining = Browser.mainLoop.remainingBlockers;
+            var expected = Browser.mainLoop.expectedBlockers;
+            if (remaining) {
+              if (remaining < expected) {
+                Module['setStatus'](message + ' (' + (expected - remaining) + '/' + expected + ')');
+              } else {
+                Module['setStatus'](message);
+              }
+            } else {
+              Module['setStatus']('');
+            }
+          }
+        },runIter:function(func) {
+          if (ABORT) return;
+          if (Module['preMainLoop']) {
+            var preRet = Module['preMainLoop']();
+            if (preRet === false) {
+              return; // |return false| skips a frame
+            }
+          }
+          try {
+            func();
+          } catch (e) {
+            if (e instanceof ExitStatus) {
+              return;
+            } else {
+              if (e && typeof e === 'object' && e.stack) err('exception thrown: ' + [e, e.stack]);
+              throw e;
+            }
+          }
+          if (Module['postMainLoop']) Module['postMainLoop']();
+        }},isFullscreen:false,pointerLock:false,moduleContextCreatedCallbacks:[],workers:[],init:function() {
+        if (!Module["preloadPlugins"]) Module["preloadPlugins"] = []; // needs to exist even in workers
+  
+        if (Browser.initted) return;
+        Browser.initted = true;
+  
+        try {
+          new Blob();
+          Browser.hasBlobConstructor = true;
+        } catch(e) {
+          Browser.hasBlobConstructor = false;
+          console.log("warning: no blob constructor, cannot create blobs with mimetypes");
+        }
+        Browser.BlobBuilder = typeof MozBlobBuilder != "undefined" ? MozBlobBuilder : (typeof WebKitBlobBuilder != "undefined" ? WebKitBlobBuilder : (!Browser.hasBlobConstructor ? console.log("warning: no BlobBuilder") : null));
+        Browser.URLObject = typeof window != "undefined" ? (window.URL ? window.URL : window.webkitURL) : undefined;
+        if (!Module.noImageDecoding && typeof Browser.URLObject === 'undefined') {
+          console.log("warning: Browser does not support creating object URLs. Built-in browser image decoding will not be available.");
+          Module.noImageDecoding = true;
+        }
+  
+        // Support for plugins that can process preloaded files. You can add more of these to
+        // your app by creating and appending to Module.preloadPlugins.
+        //
+        // Each plugin is asked if it can handle a file based on the file's name. If it can,
+        // it is given the file's raw data. When it is done, it calls a callback with the file's
+        // (possibly modified) data. For example, a plugin might decompress a file, or it
+        // might create some side data structure for use later (like an Image element, etc.).
+  
+        var imagePlugin = {};
+        imagePlugin['canHandle'] = function imagePlugin_canHandle(name) {
+          return !Module.noImageDecoding && /\.(jpg|jpeg|png|bmp)$/i.test(name);
+        };
+        imagePlugin['handle'] = function imagePlugin_handle(byteArray, name, onload, onerror) {
+          var b = null;
+          if (Browser.hasBlobConstructor) {
+            try {
+              b = new Blob([byteArray], { type: Browser.getMimetype(name) });
+              if (b.size !== byteArray.length) { // Safari bug #118630
+                // Safari's Blob can only take an ArrayBuffer
+                b = new Blob([(new Uint8Array(byteArray)).buffer], { type: Browser.getMimetype(name) });
+              }
+            } catch(e) {
+              warnOnce('Blob constructor present but fails: ' + e + '; falling back to blob builder');
+            }
+          }
+          if (!b) {
+            var bb = new Browser.BlobBuilder();
+            bb.append((new Uint8Array(byteArray)).buffer); // we need to pass a buffer, and must copy the array to get the right data range
+            b = bb.getBlob();
+          }
+          var url = Browser.URLObject.createObjectURL(b);
+          assert(typeof url == 'string', 'createObjectURL must return a url as a string');
+          var img = new Image();
+          img.onload = function img_onload() {
+            assert(img.complete, 'Image ' + name + ' could not be decoded');
+            var canvas = document.createElement('canvas');
+            canvas.width = img.width;
+            canvas.height = img.height;
+            var ctx = canvas.getContext('2d');
+            ctx.drawImage(img, 0, 0);
+            Module["preloadedImages"][name] = canvas;
+            Browser.URLObject.revokeObjectURL(url);
+            if (onload) onload(byteArray);
+          };
+          img.onerror = function img_onerror(event) {
+            console.log('Image ' + url + ' could not be decoded');
+            if (onerror) onerror();
+          };
+          img.src = url;
+        };
+        Module['preloadPlugins'].push(imagePlugin);
+  
+        var audioPlugin = {};
+        audioPlugin['canHandle'] = function audioPlugin_canHandle(name) {
+          return !Module.noAudioDecoding && name.substr(-4) in { '.ogg': 1, '.wav': 1, '.mp3': 1 };
+        };
+        audioPlugin['handle'] = function audioPlugin_handle(byteArray, name, onload, onerror) {
+          var done = false;
+          function finish(audio) {
+            if (done) return;
+            done = true;
+            Module["preloadedAudios"][name] = audio;
+            if (onload) onload(byteArray);
+          }
+          function fail() {
+            if (done) return;
+            done = true;
+            Module["preloadedAudios"][name] = new Audio(); // empty shim
+            if (onerror) onerror();
+          }
+          if (Browser.hasBlobConstructor) {
+            try {
+              var b = new Blob([byteArray], { type: Browser.getMimetype(name) });
+            } catch(e) {
+              return fail();
+            }
+            var url = Browser.URLObject.createObjectURL(b); // XXX we never revoke this!
+            assert(typeof url == 'string', 'createObjectURL must return a url as a string');
+            var audio = new Audio();
+            audio.addEventListener('canplaythrough', function() { finish(audio) }, false); // use addEventListener due to chromium bug 124926
+            audio.onerror = function audio_onerror(event) {
+              if (done) return;
+              console.log('warning: browser could not fully decode audio ' + name + ', trying slower base64 approach');
+              function encode64(data) {
+                var BASE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
+                var PAD = '=';
+                var ret = '';
+                var leftchar = 0;
+                var leftbits = 0;
+                for (var i = 0; i < data.length; i++) {
+                  leftchar = (leftchar << 8) | data[i];
+                  leftbits += 8;
+                  while (leftbits >= 6) {
+                    var curr = (leftchar >> (leftbits-6)) & 0x3f;
+                    leftbits -= 6;
+                    ret += BASE[curr];
+                  }
+                }
+                if (leftbits == 2) {
+                  ret += BASE[(leftchar&3) << 4];
+                  ret += PAD + PAD;
+                } else if (leftbits == 4) {
+                  ret += BASE[(leftchar&0xf) << 2];
+                  ret += PAD;
+                }
+                return ret;
+              }
+              audio.src = 'data:audio/x-' + name.substr(-3) + ';base64,' + encode64(byteArray);
+              finish(audio); // we don't wait for confirmation this worked - but it's worth trying
+            };
+            audio.src = url;
+            // workaround for chrome bug 124926 - we do not always get oncanplaythrough or onerror
+            Browser.safeSetTimeout(function() {
+              finish(audio); // try to use it even though it is not necessarily ready to play
+            }, 10000);
+          } else {
+            return fail();
+          }
+        };
+        Module['preloadPlugins'].push(audioPlugin);
+  
+  
+        // Canvas event setup
+  
+        function pointerLockChange() {
+          Browser.pointerLock = document['pointerLockElement'] === Module['canvas'] ||
+                                document['mozPointerLockElement'] === Module['canvas'] ||
+                                document['webkitPointerLockElement'] === Module['canvas'] ||
+                                document['msPointerLockElement'] === Module['canvas'];
+        }
+        var canvas = Module['canvas'];
+        if (canvas) {
+          // forced aspect ratio can be enabled by defining 'forcedAspectRatio' on Module
+          // Module['forcedAspectRatio'] = 4 / 3;
+  
+          canvas.requestPointerLock = canvas['requestPointerLock'] ||
+                                      canvas['mozRequestPointerLock'] ||
+                                      canvas['webkitRequestPointerLock'] ||
+                                      canvas['msRequestPointerLock'] ||
+                                      function(){};
+          canvas.exitPointerLock = document['exitPointerLock'] ||
+                                   document['mozExitPointerLock'] ||
+                                   document['webkitExitPointerLock'] ||
+                                   document['msExitPointerLock'] ||
+                                   function(){}; // no-op if function does not exist
+          canvas.exitPointerLock = canvas.exitPointerLock.bind(document);
+  
+          document.addEventListener('pointerlockchange', pointerLockChange, false);
+          document.addEventListener('mozpointerlockchange', pointerLockChange, false);
+          document.addEventListener('webkitpointerlockchange', pointerLockChange, false);
+          document.addEventListener('mspointerlockchange', pointerLockChange, false);
+  
+          if (Module['elementPointerLock']) {
+            canvas.addEventListener("click", function(ev) {
+              if (!Browser.pointerLock && Module['canvas'].requestPointerLock) {
+                Module['canvas'].requestPointerLock();
+                ev.preventDefault();
+              }
+            }, false);
+          }
+        }
+      },createContext:function(canvas, useWebGL, setInModule, webGLContextAttributes) {
+        if (useWebGL && Module.ctx && canvas == Module.canvas) return Module.ctx; // no need to recreate GL context if it's already been created for this canvas.
+  
+        var ctx;
+        var contextHandle;
+        if (useWebGL) {
+          // For GLES2/desktop GL compatibility, adjust a few defaults to be different to WebGL defaults, so that they align better with the desktop defaults.
+          var contextAttributes = {
+            antialias: false,
+            alpha: false,
+            majorVersion: 1,
+          };
+  
+          if (webGLContextAttributes) {
+            for (var attribute in webGLContextAttributes) {
+              contextAttributes[attribute] = webGLContextAttributes[attribute];
+            }
+          }
+  
+          // This check of existence of GL is here to satisfy Closure compiler, which yells if variable GL is referenced below but GL object is not
+          // actually compiled in because application is not doing any GL operations. TODO: Ideally if GL is not being used, this function
+          // Browser.createContext() should not even be emitted.
+          if (typeof GL !== 'undefined') {
+            contextHandle = GL.createContext(canvas, contextAttributes);
+            if (contextHandle) {
+              ctx = GL.getContext(contextHandle).GLctx;
+            }
+          }
+        } else {
+          ctx = canvas.getContext('2d');
+        }
+  
+        if (!ctx) return null;
+  
+        if (setInModule) {
+          if (!useWebGL) assert(typeof GLctx === 'undefined', 'cannot set in module if GLctx is used, but we are a non-GL context that would replace it');
+  
+          Module.ctx = ctx;
+          if (useWebGL) GL.makeContextCurrent(contextHandle);
+          Module.useWebGL = useWebGL;
+          Browser.moduleContextCreatedCallbacks.forEach(function(callback) { callback() });
+          Browser.init();
+        }
+        return ctx;
+      },destroyContext:function(canvas, useWebGL, setInModule) {},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer, resizeCanvas) {
+        Browser.lockPointer = lockPointer;
+        Browser.resizeCanvas = resizeCanvas;
+        if (typeof Browser.lockPointer === 'undefined') Browser.lockPointer = true;
+        if (typeof Browser.resizeCanvas === 'undefined') Browser.resizeCanvas = false;
+  
+        var canvas = Module['canvas'];
+        function fullscreenChange() {
+          Browser.isFullscreen = false;
+          var canvasContainer = canvas.parentNode;
+          if ((document['fullscreenElement'] || document['mozFullScreenElement'] ||
+               document['msFullscreenElement'] || document['webkitFullscreenElement'] ||
+               document['webkitCurrentFullScreenElement']) === canvasContainer) {
+            canvas.exitFullscreen = Browser.exitFullscreen;
+            if (Browser.lockPointer) canvas.requestPointerLock();
+            Browser.isFullscreen = true;
+            if (Browser.resizeCanvas) {
+              Browser.setFullscreenCanvasSize();
+            } else {
+              Browser.updateCanvasDimensions(canvas);
+            }
+          } else {
+            // remove the full screen specific parent of the canvas again to restore the HTML structure from before going full screen
+            canvasContainer.parentNode.insertBefore(canvas, canvasContainer);
+            canvasContainer.parentNode.removeChild(canvasContainer);
+  
+            if (Browser.resizeCanvas) {
+              Browser.setWindowedCanvasSize();
+            } else {
+              Browser.updateCanvasDimensions(canvas);
+            }
+          }
+          if (Module['onFullScreen']) Module['onFullScreen'](Browser.isFullscreen);
+          if (Module['onFullscreen']) Module['onFullscreen'](Browser.isFullscreen);
+        }
+  
+        if (!Browser.fullscreenHandlersInstalled) {
+          Browser.fullscreenHandlersInstalled = true;
+          document.addEventListener('fullscreenchange', fullscreenChange, false);
+          document.addEventListener('mozfullscreenchange', fullscreenChange, false);
+          document.addEventListener('webkitfullscreenchange', fullscreenChange, false);
+          document.addEventListener('MSFullscreenChange', fullscreenChange, false);
+        }
+  
+        // create a new parent to ensure the canvas has no siblings. this allows browsers to optimize full screen performance when its parent is the full screen root
+        var canvasContainer = document.createElement("div");
+        canvas.parentNode.insertBefore(canvasContainer, canvas);
+        canvasContainer.appendChild(canvas);
+  
+        // use parent of canvas as full screen root to allow aspect ratio correction (Firefox stretches the root to screen size)
+        canvasContainer.requestFullscreen = canvasContainer['requestFullscreen'] ||
+                                            canvasContainer['mozRequestFullScreen'] ||
+                                            canvasContainer['msRequestFullscreen'] ||
+                                           (canvasContainer['webkitRequestFullscreen'] ? function() { canvasContainer['webkitRequestFullscreen'](Element['ALLOW_KEYBOARD_INPUT']) } : null) ||
+                                           (canvasContainer['webkitRequestFullScreen'] ? function() { canvasContainer['webkitRequestFullScreen'](Element['ALLOW_KEYBOARD_INPUT']) } : null);
+  
+        canvasContainer.requestFullscreen();
+      },requestFullScreen:function() {
+        abort('Module.requestFullScreen has been replaced by Module.requestFullscreen (without a capital S)');
+      },exitFullscreen:function() {
+        // This is workaround for chrome. Trying to exit from fullscreen
+        // not in fullscreen state will cause "TypeError: Document not active"
+        // in chrome. See https://github.com/emscripten-core/emscripten/pull/8236
+        if (!Browser.isFullscreen) {
+          return false;
+        }
+  
+        var CFS = document['exitFullscreen'] ||
+                  document['cancelFullScreen'] ||
+                  document['mozCancelFullScreen'] ||
+                  document['msExitFullscreen'] ||
+                  document['webkitCancelFullScreen'] ||
+            (function() {});
+        CFS.apply(document, []);
+        return true;
+      },nextRAF:0,fakeRequestAnimationFrame:function(func) {
+        // try to keep 60fps between calls to here
+        var now = Date.now();
+        if (Browser.nextRAF === 0) {
+          Browser.nextRAF = now + 1000/60;
+        } else {
+          while (now + 2 >= Browser.nextRAF) { // fudge a little, to avoid timer jitter causing us to do lots of delay:0
+            Browser.nextRAF += 1000/60;
+          }
+        }
+        var delay = Math.max(Browser.nextRAF - now, 0);
+        setTimeout(func, delay);
+      },requestAnimationFrame:function(func) {
+        if (typeof requestAnimationFrame === 'function') {
+          requestAnimationFrame(func);
+          return;
+        }
+        var RAF = Browser.fakeRequestAnimationFrame;
+        RAF(func);
+      },safeCallback:function(func) {
+        return function() {
+          if (!ABORT) return func.apply(null, arguments);
+        };
+      },allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function() {
+        Browser.allowAsyncCallbacks = false;
+      },resumeAsyncCallbacks:function() { // marks future callbacks as ok to execute, and synchronously runs any remaining ones right now
+        Browser.allowAsyncCallbacks = true;
+        if (Browser.queuedAsyncCallbacks.length > 0) {
+          var callbacks = Browser.queuedAsyncCallbacks;
+          Browser.queuedAsyncCallbacks = [];
+          callbacks.forEach(function(func) {
+            func();
+          });
+        }
+      },safeRequestAnimationFrame:function(func) {
+        return Browser.requestAnimationFrame(function() {
+          if (ABORT) return;
+          if (Browser.allowAsyncCallbacks) {
+            func();
+          } else {
+            Browser.queuedAsyncCallbacks.push(func);
+          }
+        });
+      },safeSetTimeout:function(func, timeout) {
+        noExitRuntime = true;
+        return setTimeout(function() {
+          if (ABORT) return;
+          if (Browser.allowAsyncCallbacks) {
+            func();
+          } else {
+            Browser.queuedAsyncCallbacks.push(func);
+          }
+        }, timeout);
+      },safeSetInterval:function(func, timeout) {
+        noExitRuntime = true;
+        return setInterval(function() {
+          if (ABORT) return;
+          if (Browser.allowAsyncCallbacks) {
+            func();
+          } // drop it on the floor otherwise, next interval will kick in
+        }, timeout);
+      },getMimetype:function(name) {
+        return {
+          'jpg': 'image/jpeg',
+          'jpeg': 'image/jpeg',
+          'png': 'image/png',
+          'bmp': 'image/bmp',
+          'ogg': 'audio/ogg',
+          'wav': 'audio/wav',
+          'mp3': 'audio/mpeg'
+        }[name.substr(name.lastIndexOf('.')+1)];
+      },getUserMedia:function(func) {
+        if(!window.getUserMedia) {
+          window.getUserMedia = navigator['getUserMedia'] ||
+                                navigator['mozGetUserMedia'];
+        }
+        window.getUserMedia(func);
+      },getMovementX:function(event) {
+        return event['movementX'] ||
+               event['mozMovementX'] ||
+               event['webkitMovementX'] ||
+               0;
+      },getMovementY:function(event) {
+        return event['movementY'] ||
+               event['mozMovementY'] ||
+               event['webkitMovementY'] ||
+               0;
+      },getMouseWheelDelta:function(event) {
+        var delta = 0;
+        switch (event.type) {
+          case 'DOMMouseScroll':
+            // 3 lines make up a step
+            delta = event.detail / 3;
+            break;
+          case 'mousewheel':
+            // 120 units make up a step
+            delta = event.wheelDelta / 120;
+            break;
+          case 'wheel':
+            delta = event.deltaY
+            switch(event.deltaMode) {
+              case 0:
+                // DOM_DELTA_PIXEL: 100 pixels make up a step
+                delta /= 100;
+                break;
+              case 1:
+                // DOM_DELTA_LINE: 3 lines make up a step
+                delta /= 3;
+                break;
+              case 2:
+                // DOM_DELTA_PAGE: A page makes up 80 steps
+                delta *= 80;
+                break;
+              default:
+                throw 'unrecognized mouse wheel delta mode: ' + event.deltaMode;
+            }
+            break;
+          default:
+            throw 'unrecognized mouse wheel event: ' + event.type;
+        }
+        return delta;
+      },mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event) { // event should be mousemove, mousedown or mouseup
+        if (Browser.pointerLock) {
+          // When the pointer is locked, calculate the coordinates
+          // based on the movement of the mouse.
+          // Workaround for Firefox bug 764498
+          if (event.type != 'mousemove' &&
+              ('mozMovementX' in event)) {
+            Browser.mouseMovementX = Browser.mouseMovementY = 0;
+          } else {
+            Browser.mouseMovementX = Browser.getMovementX(event);
+            Browser.mouseMovementY = Browser.getMovementY(event);
+          }
+  
+          // check if SDL is available
+          if (typeof SDL != "undefined") {
+            Browser.mouseX = SDL.mouseX + Browser.mouseMovementX;
+            Browser.mouseY = SDL.mouseY + Browser.mouseMovementY;
+          } else {
+            // just add the mouse delta to the current absolut mouse position
+            // FIXME: ideally this should be clamped against the canvas size and zero
+            Browser.mouseX += Browser.mouseMovementX;
+            Browser.mouseY += Browser.mouseMovementY;
+          }
+        } else {
+          // Otherwise, calculate the movement based on the changes
+          // in the coordinates.
+          var rect = Module["canvas"].getBoundingClientRect();
+          var cw = Module["canvas"].width;
+          var ch = Module["canvas"].height;
+  
+          // Neither .scrollX or .pageXOffset are defined in a spec, but
+          // we prefer .scrollX because it is currently in a spec draft.
+          // (see: http://www.w3.org/TR/2013/WD-cssom-view-20131217/)
+          var scrollX = ((typeof window.scrollX !== 'undefined') ? window.scrollX : window.pageXOffset);
+          var scrollY = ((typeof window.scrollY !== 'undefined') ? window.scrollY : window.pageYOffset);
+          // If this assert lands, it's likely because the browser doesn't support scrollX or pageXOffset
+          // and we have no viable fallback.
+          assert((typeof scrollX !== 'undefined') && (typeof scrollY !== 'undefined'), 'Unable to retrieve scroll position, mouse positions likely broken.');
+  
+          if (event.type === 'touchstart' || event.type === 'touchend' || event.type === 'touchmove') {
+            var touch = event.touch;
+            if (touch === undefined) {
+              return; // the "touch" property is only defined in SDL
+  
+            }
+            var adjustedX = touch.pageX - (scrollX + rect.left);
+            var adjustedY = touch.pageY - (scrollY + rect.top);
+  
+            adjustedX = adjustedX * (cw / rect.width);
+            adjustedY = adjustedY * (ch / rect.height);
+  
+            var coords = { x: adjustedX, y: adjustedY };
+  
+            if (event.type === 'touchstart') {
+              Browser.lastTouches[touch.identifier] = coords;
+              Browser.touches[touch.identifier] = coords;
+            } else if (event.type === 'touchend' || event.type === 'touchmove') {
+              var last = Browser.touches[touch.identifier];
+              if (!last) last = coords;
+              Browser.lastTouches[touch.identifier] = last;
+              Browser.touches[touch.identifier] = coords;
+            }
+            return;
+          }
+  
+          var x = event.pageX - (scrollX + rect.left);
+          var y = event.pageY - (scrollY + rect.top);
+  
+          // the canvas might be CSS-scaled compared to its backbuffer;
+          // SDL-using content will want mouse coordinates in terms
+          // of backbuffer units.
+          x = x * (cw / rect.width);
+          y = y * (ch / rect.height);
+  
+          Browser.mouseMovementX = x - Browser.mouseX;
+          Browser.mouseMovementY = y - Browser.mouseY;
+          Browser.mouseX = x;
+          Browser.mouseY = y;
+        }
+      },asyncLoad:function(url, onload, onerror, noRunDep) {
+        var dep = !noRunDep ? getUniqueRunDependency('al ' + url) : '';
+        readAsync(url, function(arrayBuffer) {
+          assert(arrayBuffer, 'Loading data file "' + url + '" failed (no arrayBuffer).');
+          onload(new Uint8Array(arrayBuffer));
+          if (dep) removeRunDependency(dep);
+        }, function(event) {
+          if (onerror) {
+            onerror();
+          } else {
+            throw 'Loading data file "' + url + '" failed.';
+          }
+        });
+        if (dep) addRunDependency(dep);
+      },resizeListeners:[],updateResizeListeners:function() {
+        var canvas = Module['canvas'];
+        Browser.resizeListeners.forEach(function(listener) {
+          listener(canvas.width, canvas.height);
+        });
+      },setCanvasSize:function(width, height, noUpdates) {
+        var canvas = Module['canvas'];
+        Browser.updateCanvasDimensions(canvas, width, height);
+        if (!noUpdates) Browser.updateResizeListeners();
+      },windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function() {
+        // check if SDL is available
+        if (typeof SDL != "undefined") {
+          var flags = HEAPU32[((SDL.screen)>>2)];
+          flags = flags | 0x00800000; // set SDL_FULLSCREEN flag
+          HEAP32[((SDL.screen)>>2)]=flags
+        }
+        Browser.updateCanvasDimensions(Module['canvas']);
+        Browser.updateResizeListeners();
+      },setWindowedCanvasSize:function() {
+        // check if SDL is available
+        if (typeof SDL != "undefined") {
+          var flags = HEAPU32[((SDL.screen)>>2)];
+          flags = flags & ~0x00800000; // clear SDL_FULLSCREEN flag
+          HEAP32[((SDL.screen)>>2)]=flags
+        }
+        Browser.updateCanvasDimensions(Module['canvas']);
+        Browser.updateResizeListeners();
+      },updateCanvasDimensions:function(canvas, wNative, hNative) {
+        if (wNative && hNative) {
+          canvas.widthNative = wNative;
+          canvas.heightNative = hNative;
+        } else {
+          wNative = canvas.widthNative;
+          hNative = canvas.heightNative;
+        }
+        var w = wNative;
+        var h = hNative;
+        if (Module['forcedAspectRatio'] && Module['forcedAspectRatio'] > 0) {
+          if (w/h < Module['forcedAspectRatio']) {
+            w = Math.round(h * Module['forcedAspectRatio']);
+          } else {
+            h = Math.round(w / Module['forcedAspectRatio']);
+          }
+        }
+        if (((document['fullscreenElement'] || document['mozFullScreenElement'] ||
+             document['msFullscreenElement'] || document['webkitFullscreenElement'] ||
+             document['webkitCurrentFullScreenElement']) === canvas.parentNode) && (typeof screen != 'undefined')) {
+           var factor = Math.min(screen.width / w, screen.height / h);
+           w = Math.round(w * factor);
+           h = Math.round(h * factor);
+        }
+        if (Browser.resizeCanvas) {
+          if (canvas.width  != w) canvas.width  = w;
+          if (canvas.height != h) canvas.height = h;
+          if (typeof canvas.style != 'undefined') {
+            canvas.style.removeProperty( "width");
+            canvas.style.removeProperty("height");
+          }
+        } else {
+          if (canvas.width  != wNative) canvas.width  = wNative;
+          if (canvas.height != hNative) canvas.height = hNative;
+          if (typeof canvas.style != 'undefined') {
+            if (w != wNative || h != hNative) {
+              canvas.style.setProperty( "width", w + "px", "important");
+              canvas.style.setProperty("height", h + "px", "important");
+            } else {
+              canvas.style.removeProperty( "width");
+              canvas.style.removeProperty("height");
+            }
+          }
+        }
+      },wgetRequests:{},nextWgetRequestHandle:0,getNextWgetRequestHandle:function() {
+        var handle = Browser.nextWgetRequestHandle;
+        Browser.nextWgetRequestHandle++;
+        return handle;
+      }};
+
+  function abortStackOverflow(allocSize) {
+      abort('Stack overflow! Attempted to allocate ' + allocSize + ' bytes on the stack, but stack has only ' + (STACK_MAX - stackSave() + allocSize) + ' bytes available!');
+    }
+
+  function demangle(func) {
+      warnOnce('warning: build with  -s DEMANGLE_SUPPORT=1  to link in libcxxabi demangling');
+      return func;
+    }
+
+  function demangleAll(text) {
+      var regex =
+        /\b_Z[\w\d_]+/g;
+      return text.replace(regex,
+        function(x) {
+          var y = demangle(x);
+          return x === y ? x : (y + ' [' + x + ']');
+        });
+    }
+
+  function jsStackTrace() {
+      var err = new Error();
+      if (!err.stack) {
+        // IE10+ special cases: It does have callstack info, but it is only populated if an Error object is thrown,
+        // so try that as a special-case.
+        try {
+          throw new Error();
+        } catch(e) {
+          err = e;
+        }
+        if (!err.stack) {
+          return '(no stack trace available)';
+        }
+      }
+      return err.stack.toString();
+    }
+
+  function stackTrace() {
+      var js = jsStackTrace();
+      if (Module['extraStackTrace']) js += '\n' + Module['extraStackTrace']();
+      return demangleAll(js);
+    }
+
+  function ___handle_stack_overflow() {
+      abort('stack overflow')
+    }
+
+  
+  function setErrNo(value) {
+      HEAP32[((___errno_location())>>2)]=value;
       return value;
     }
   
-  var PATH={splitPath:function (filename) {
+  
+  var PATH={splitPath:function(filename) {
         var splitPathRe = /^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;
         return splitPathRe.exec(filename).slice(1);
-      },normalizeArray:function (parts, allowAboveRoot) {
+      },normalizeArray:function(parts, allowAboveRoot) {
         // if the path tries to go above the root, `up` ends up > 0
         var up = 0;
@@ -1715,10 +2741,10 @@
         // if the path is allowed to go above the root, restore leading ..s
         if (allowAboveRoot) {
-          for (; up--; up) {
+          for (; up; up--) {
             parts.unshift('..');
           }
         }
         return parts;
-      },normalize:function (path) {
+      },normalize:function(path) {
         var isAbsolute = path.charAt(0) === '/',
             trailingSlash = path.substr(-1) === '/';
@@ -1734,5 +2760,5 @@
         }
         return (isAbsolute ? '/' : '') + path;
-      },dirname:function (path) {
+      },dirname:function(path) {
         var result = PATH.splitPath(path),
             root = result[0],
@@ -1747,5 +2773,5 @@
         }
         return root + dir;
-      },basename:function (path) {
+      },basename:function(path) {
         // EMSCRIPTEN return '/'' for '/', not an empty string
         if (path === '/') return '/';
@@ -1753,12 +2779,15 @@
         if (lastSlash === -1) return path;
         return path.substr(lastSlash+1);
-      },extname:function (path) {
+      },extname:function(path) {
         return PATH.splitPath(path)[3];
-      },join:function () {
+      },join:function() {
         var paths = Array.prototype.slice.call(arguments, 0);
         return PATH.normalize(paths.join('/'));
-      },join2:function (l, r) {
+      },join2:function(l, r) {
         return PATH.normalize(l + '/' + r);
-      },resolve:function () {
+      }};
+  
+  
+  var PATH_FS={resolve:function() {
         var resolvedPath = '',
           resolvedAbsolute = false;
@@ -1780,7 +2809,7 @@
         }), !resolvedAbsolute).join('/');
         return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.';
-      },relative:function (from, to) {
-        from = PATH.resolve(from).substr(1);
-        to = PATH.resolve(to).substr(1);
+      },relative:function(from, to) {
+        from = PATH_FS.resolve(from).substr(1);
+        to = PATH_FS.resolve(to).substr(1);
         function trim(arr) {
           var start = 0;
@@ -1814,5 +2843,5 @@
   
   var TTY={ttys:[],init:function () {
-        // https://github.com/kripken/emscripten/pull/1555
+        // https://github.com/emscripten-core/emscripten/pull/1555
         // if (ENVIRONMENT_IS_NODE) {
         //   // currently, FS.init does not distinguish if process.stdin is a file or TTY
@@ -1822,6 +2851,6 @@
         //   process['stdin']['setEncoding']('utf8');
         // }
-      },shutdown:function () {
-        // https://github.com/kripken/emscripten/pull/1555
+      },shutdown:function() {
+        // https://github.com/emscripten-core/emscripten/pull/1555
         // if (ENVIRONMENT_IS_NODE) {
         //   // inolen: any idea as to why node -e 'process.stdin.read()' wouldn't exit immediately (with process.stdin being a tty)?
@@ -1832,22 +2861,22 @@
         //   process['stdin']['pause']();
         // }
-      },register:function (dev, ops) {
+      },register:function(dev, ops) {
         TTY.ttys[dev] = { input: [], output: [], ops: ops };
         FS.registerDevice(dev, TTY.stream_ops);
-      },stream_ops:{open:function (stream) {
+      },stream_ops:{open:function(stream) {
           var tty = TTY.ttys[stream.node.rdev];
           if (!tty) {
-            throw new FS.ErrnoError(ERRNO_CODES.ENODEV);
+            throw new FS.ErrnoError(43);
           }
           stream.tty = tty;
           stream.seekable = false;
-        },close:function (stream) {
+        },close:function(stream) {
           // flush any pending line data
           stream.tty.ops.flush(stream.tty);
-        },flush:function (stream) {
+        },flush:function(stream) {
           stream.tty.ops.flush(stream.tty);
-        },read:function (stream, buffer, offset, length, pos /* ignored */) {
+        },read:function(stream, buffer, offset, length, pos /* ignored */) {
           if (!stream.tty || !stream.tty.ops.get_char) {
-            throw new FS.ErrnoError(ERRNO_CODES.ENXIO);
+            throw new FS.ErrnoError(60);
           }
           var bytesRead = 0;
@@ -1857,8 +2886,8 @@
               result = stream.tty.ops.get_char(stream.tty);
             } catch (e) {
-              throw new FS.ErrnoError(ERRNO_CODES.EIO);
+              throw new FS.ErrnoError(29);
             }
             if (result === undefined && bytesRead === 0) {
-              throw new FS.ErrnoError(ERRNO_CODES.EAGAIN);
+              throw new FS.ErrnoError(6);
             }
             if (result === null || result === undefined) break;
@@ -1870,14 +2899,14 @@
           }
           return bytesRead;
-        },write:function (stream, buffer, offset, length, pos) {
+        },write:function(stream, buffer, offset, length, pos) {
           if (!stream.tty || !stream.tty.ops.put_char) {
-            throw new FS.ErrnoError(ERRNO_CODES.ENXIO);
-          }
-          for (var i = 0; i < length; i++) {
-            try {
+            throw new FS.ErrnoError(60);
+          }
+          try {
+            for (var i = 0; i < length; i++) {
               stream.tty.ops.put_char(stream.tty, buffer[offset+i]);
-            } catch (e) {
-              throw new FS.ErrnoError(ERRNO_CODES.EIO);
             }
+          } catch (e) {
+            throw new FS.ErrnoError(29);
           }
           if (length) {
@@ -1885,5 +2914,5 @@
           }
           return i;
-        }},default_tty_ops:{get_char:function (tty) {
+        }},default_tty_ops:{get_char:function(tty) {
           if (!tty.input.length) {
             var result = null;
@@ -1891,21 +2920,9 @@
               // we will read data by chunks of BUFSIZE
               var BUFSIZE = 256;
-              var buf = new Buffer(BUFSIZE);
+              var buf = Buffer.alloc ? Buffer.alloc(BUFSIZE) : new Buffer(BUFSIZE);
               var bytesRead = 0;
   
-              var isPosixPlatform = (process.platform != 'win32'); // Node doesn't offer a direct check, so test by exclusion
-  
-              var fd = process.stdin.fd;
-              if (isPosixPlatform) {
-                // Linux and Mac cannot use process.stdin.fd (which isn't set up as sync)
-                var usingDevice = false;
-                try {
-                  fd = fs.openSync('/dev/stdin', 'r');
-                  usingDevice = true;
-                } catch (e) {}
-              }
-  
               try {
-                bytesRead = fs.readSync(fd, buf, 0, BUFSIZE, null);
+                bytesRead = nodeFS.readSync(process.stdin.fd, buf, 0, BUFSIZE, null);
               } catch(e) {
                 // Cross-platform differences: on Windows, reading EOF throws an exception, but on other OSes,
@@ -1915,5 +2932,4 @@
               }
   
-              if (usingDevice) { fs.closeSync(fd); }
               if (bytesRead > 0) {
                 result = buf.slice(0, bytesRead).toString('utf-8');
@@ -1921,6 +2937,6 @@
                 result = null;
               }
-  
-            } else if (typeof window != 'undefined' &&
+            } else
+            if (typeof window != 'undefined' &&
               typeof window.prompt == 'function') {
               // Browser.
@@ -1942,36 +2958,36 @@
           }
           return tty.input.shift();
-        },put_char:function (tty, val) {
+        },put_char:function(tty, val) {
           if (val === null || val === 10) {
-            Module['print'](UTF8ArrayToString(tty.output, 0));
+            out(UTF8ArrayToString(tty.output, 0));
             tty.output = [];
           } else {
             if (val != 0) tty.output.push(val); // val == 0 would cut text output off in the middle.
           }
-        },flush:function (tty) {
+        },flush:function(tty) {
           if (tty.output && tty.output.length > 0) {
-            Module['print'](UTF8ArrayToString(tty.output, 0));
+            out(UTF8ArrayToString(tty.output, 0));
             tty.output = [];
           }
-        }},default_tty1_ops:{put_char:function (tty, val) {
+        }},default_tty1_ops:{put_char:function(tty, val) {
           if (val === null || val === 10) {
-            Module['printErr'](UTF8ArrayToString(tty.output, 0));
+            err(UTF8ArrayToString(tty.output, 0));
             tty.output = [];
           } else {
             if (val != 0) tty.output.push(val);
           }
-        },flush:function (tty) {
+        },flush:function(tty) {
           if (tty.output && tty.output.length > 0) {
-            Module['printErr'](UTF8ArrayToString(tty.output, 0));
+            err(UTF8ArrayToString(tty.output, 0));
             tty.output = [];
           }
         }}};
   
-  var MEMFS={ops_table:null,mount:function (mount) {
+  var MEMFS={ops_table:null,mount:function(mount) {
         return MEMFS.createNode(null, '/', 16384 | 511 /* 0777 */, 0);
-      },createNode:function (parent, name, mode, dev) {
+      },createNode:function(parent, name, mode, dev) {
         if (FS.isBlkdev(mode) || FS.isFIFO(mode)) {
           // no supported
-          throw new FS.ErrnoError(ERRNO_CODES.EPERM);
+          throw new FS.ErrnoError(63);
         }
         if (!MEMFS.ops_table) {
@@ -2050,5 +3066,5 @@
         }
         return node;
-      },getFileDataAsRegularArray:function (node) {
+      },getFileDataAsRegularArray:function(node) {
         if (node.contents && node.contents.subarray) {
           var arr = [];
@@ -2057,35 +3073,22 @@
         }
         return node.contents; // No-op, the file contents are already in a JS array. Return as-is.
-      },getFileDataAsTypedArray:function (node) {
-        if (!node.contents) return new Uint8Array;
+      },getFileDataAsTypedArray:function(node) {
+        if (!node.contents) return new Uint8Array(0);
         if (node.contents.subarray) return node.contents.subarray(0, node.usedBytes); // Make sure to not return excess unused bytes.
         return new Uint8Array(node.contents);
-      },expandFileStorage:function (node, newCapacity) {
-        // If we are asked to expand the size of a file that already exists, revert to using a standard JS array to store the file
-        // instead of a typed array. This makes resizing the array more flexible because we can just .push() elements at the back to
-        // increase the size.
-        if (node.contents && node.contents.subarray && newCapacity > node.contents.length) {
-          node.contents = MEMFS.getFileDataAsRegularArray(node);
-          node.usedBytes = node.contents.length; // We might be writing to a lazy-loaded file which had overridden this property, so force-reset it.
-        }
-  
-        if (!node.contents || node.contents.subarray) { // Keep using a typed array if creating a new storage, or if old one was a typed array as well.
-          var prevCapacity = node.contents ? node.contents.length : 0;
-          if (prevCapacity >= newCapacity) return; // No need to expand, the storage was already large enough.
-          // Don't expand strictly to the given requested limit if it's only a very small increase, but instead geometrically grow capacity.
-          // For small filesizes (<1MB), perform size*2 geometric increase, but for large sizes, do a much more conservative size*1.125 increase to
-          // avoid overshooting the allocation cap by a very large margin.
-          var CAPACITY_DOUBLING_MAX = 1024 * 1024;
-          newCapacity = Math.max(newCapacity, (prevCapacity * (prevCapacity < CAPACITY_DOUBLING_MAX ? 2.0 : 1.125)) | 0);
-          if (prevCapacity != 0) newCapacity = Math.max(newCapacity, 256); // At minimum allocate 256b for each file when expanding.
-          var oldContents = node.contents;
-          node.contents = new Uint8Array(newCapacity); // Allocate new storage.
-          if (node.usedBytes > 0) node.contents.set(oldContents.subarray(0, node.usedBytes), 0); // Copy old data over to the new storage.
-          return;
-        }
-        // Not using a typed array to back the file storage. Use a standard JS array instead.
-        if (!node.contents && newCapacity > 0) node.contents = [];
-        while (node.contents.length < newCapacity) node.contents.push(0);
-      },resizeFileStorage:function (node, newSize) {
+      },expandFileStorage:function(node, newCapacity) {
+        var prevCapacity = node.contents ? node.contents.length : 0;
+        if (prevCapacity >= newCapacity) return; // No need to expand, the storage was already large enough.
+        // Don't expand strictly to the given requested limit if it's only a very small increase, but instead geometrically grow capacity.
+        // For small filesizes (<1MB), perform size*2 geometric increase, but for large sizes, do a much more conservative size*1.125 increase to
+        // avoid overshooting the allocation cap by a very large margin.
+        var CAPACITY_DOUBLING_MAX = 1024 * 1024;
+        newCapacity = Math.max(newCapacity, (prevCapacity * (prevCapacity < CAPACITY_DOUBLING_MAX ? 2.0 : 1.125)) >>> 0);
+        if (prevCapacity != 0) newCapacity = Math.max(newCapacity, 256); // At minimum allocate 256b for each file when expanding.
+        var oldContents = node.contents;
+        node.contents = new Uint8Array(newCapacity); // Allocate new storage.
+        if (node.usedBytes > 0) node.contents.set(oldContents.subarray(0, node.usedBytes), 0); // Copy old data over to the new storage.
+        return;
+      },resizeFileStorage:function(node, newSize) {
         if (node.usedBytes == newSize) return;
         if (newSize == 0) {
@@ -2096,5 +3099,5 @@
         if (!node.contents || node.contents.subarray) { // Resize a typed array if that is being used as the backing store.
           var oldContents = node.contents;
-          node.contents = new Uint8Array(new ArrayBuffer(newSize)); // Allocate new storage.
+          node.contents = new Uint8Array(newSize); // Allocate new storage.
           if (oldContents) {
             node.contents.set(oldContents.subarray(0, Math.min(newSize, node.usedBytes))); // Copy old data over to the new storage.
@@ -2108,5 +3111,5 @@
         else while (node.contents.length < newSize) node.contents.push(0);
         node.usedBytes = newSize;
-      },node_ops:{getattr:function (node) {
+      },node_ops:{getattr:function(node) {
           var attr = {};
           // device numbers reuse inode numbers.
@@ -2135,5 +3138,5 @@
           attr.blocks = Math.ceil(attr.size / attr.blksize);
           return attr;
-        },setattr:function (node, attr) {
+        },setattr:function(node, attr) {
           if (attr.mode !== undefined) {
             node.mode = attr.mode;
@@ -2145,9 +3148,9 @@
             MEMFS.resizeFileStorage(node, attr.size);
           }
-        },lookup:function (parent, name) {
-          throw FS.genericErrors[ERRNO_CODES.ENOENT];
-        },mknod:function (parent, name, mode, dev) {
+        },lookup:function(parent, name) {
+          throw FS.genericErrors[44];
+        },mknod:function(parent, name, mode, dev) {
           return MEMFS.createNode(parent, name, mode, dev);
-        },rename:function (old_node, new_dir, new_name) {
+        },rename:function(old_node, new_dir, new_name) {
           // if we're overwriting a directory at new_name, make sure it's empty.
           if (FS.isDir(old_node.mode)) {
@@ -2159,5 +3162,5 @@
             if (new_node) {
               for (var i in new_node.contents) {
-                throw new FS.ErrnoError(ERRNO_CODES.ENOTEMPTY);
+                throw new FS.ErrnoError(55);
               }
             }
@@ -2168,14 +3171,14 @@
           new_dir.contents[new_name] = old_node;
           old_node.parent = new_dir;
-        },unlink:function (parent, name) {
+        },unlink:function(parent, name) {
           delete parent.contents[name];
-        },rmdir:function (parent, name) {
+        },rmdir:function(parent, name) {
           var node = FS.lookupNode(parent, name);
           for (var i in node.contents) {
-            throw new FS.ErrnoError(ERRNO_CODES.ENOTEMPTY);
+            throw new FS.ErrnoError(55);
           }
           delete parent.contents[name];
-        },readdir:function (node) {
-          var entries = ['.', '..']
+        },readdir:function(node) {
+          var entries = ['.', '..'];
           for (var key in node.contents) {
             if (!node.contents.hasOwnProperty(key)) {
@@ -2185,14 +3188,14 @@
           }
           return entries;
-        },symlink:function (parent, newname, oldpath) {
+        },symlink:function(parent, newname, oldpath) {
           var node = MEMFS.createNode(parent, newname, 511 /* 0777 */ | 40960, 0);
           node.link = oldpath;
           return node;
-        },readlink:function (node) {
+        },readlink:function(node) {
           if (!FS.isLink(node.mode)) {
-            throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
+            throw new FS.ErrnoError(28);
           }
           return node.link;
-        }},stream_ops:{read:function (stream, buffer, offset, length, position) {
+        }},stream_ops:{read:function(stream, buffer, offset, length, position) {
           var contents = stream.node.contents;
           if (position >= stream.node.usedBytes) return 0;
@@ -2205,5 +3208,8 @@
           }
           return size;
-        },write:function (stream, buffer, offset, length, position, canOwn) {
+        },write:function(stream, buffer, offset, length, position, canOwn) {
+          // The data buffer should be a typed array view
+          assert(!(buffer instanceof ArrayBuffer));
+  
           if (!length) return 0;
           var node = stream.node;
@@ -2217,5 +3223,5 @@
               return length;
             } else if (node.usedBytes === 0 && position === 0) { // If this is a simple first write to an empty file, do a fast set since we don't need to care about old data.
-              node.contents = new Uint8Array(buffer.subarray(offset, offset + length));
+              node.contents = buffer.slice(offset, offset + length);
               node.usedBytes = length;
               return length;
@@ -2234,11 +3240,11 @@
             }
           }
-          node.usedBytes = Math.max(node.usedBytes, position+length);
+          node.usedBytes = Math.max(node.usedBytes, position + length);
           return length;
-        },llseek:function (stream, offset, whence) {
+        },llseek:function(stream, offset, whence) {
           var position = offset;
-          if (whence === 1) {  // SEEK_CUR.
+          if (whence === 1) {
             position += stream.position;
-          } else if (whence === 2) {  // SEEK_END.
+          } else if (whence === 2) {
             if (FS.isFile(stream.node.mode)) {
               position += stream.node.usedBytes;
@@ -2246,13 +3252,16 @@
           }
           if (position < 0) {
-            throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
+            throw new FS.ErrnoError(28);
           }
           return position;
-        },allocate:function (stream, offset, length) {
+        },allocate:function(stream, offset, length) {
           MEMFS.expandFileStorage(stream.node, offset + length);
           stream.node.usedBytes = Math.max(stream.node.usedBytes, offset + length);
-        },mmap:function (stream, buffer, offset, length, position, prot, flags) {
+        },mmap:function(stream, address, length, position, prot, flags) {
+          // We don't currently support location hints for the address of the mapping
+          assert(address === 0);
+  
           if (!FS.isFile(stream.node.mode)) {
-            throw new FS.ErrnoError(ERRNO_CODES.ENODEV);
+            throw new FS.ErrnoError(43);
           }
           var ptr;
@@ -2260,6 +3269,5 @@
           var contents = stream.node.contents;
           // Only make a new copy when MAP_PRIVATE is specified.
-          if ( !(flags & 2) &&
-                (contents.buffer === buffer || contents.buffer === buffer.buffer) ) {
+          if (!(flags & 2) && contents.buffer === buffer) {
             // We can't emulate MAP_SHARED when the file is not backed by the buffer
             // we're mapping to (e.g. the HEAP buffer).
@@ -2268,5 +3276,5 @@
           } else {
             // Try to avoid unnecessary slices.
-            if (position > 0 || position + length < stream.node.usedBytes) {
+            if (position > 0 || position + length < contents.length) {
               if (contents.subarray) {
                 contents = contents.subarray(position, position + length);
@@ -2278,12 +3286,12 @@
             ptr = _malloc(length);
             if (!ptr) {
-              throw new FS.ErrnoError(ERRNO_CODES.ENOMEM);
+              throw new FS.ErrnoError(48);
             }
-            buffer.set(contents, ptr);
+            HEAP8.set(contents, ptr);
           }
           return { ptr: ptr, allocated: allocated };
-        },msync:function (stream, buffer, offset, length, mmapFlags) {
+        },msync:function(stream, buffer, offset, length, mmapFlags) {
           if (!FS.isFile(stream.node.mode)) {
-            throw new FS.ErrnoError(ERRNO_CODES.ENODEV);
+            throw new FS.ErrnoError(43);
           }
           if (mmapFlags & 2) {
@@ -2297,653 +3305,11 @@
         }}};
   
-  var IDBFS={dbs:{},indexedDB:function () {
-        if (typeof indexedDB !== 'undefined') return indexedDB;
-        var ret = null;
-        if (typeof window === 'object') ret = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB;
-        assert(ret, 'IDBFS used, but indexedDB not supported');
-        return ret;
-      },DB_VERSION:21,DB_STORE_NAME:"FILE_DATA",mount:function (mount) {
-        // reuse all of the core MEMFS functionality
-        return MEMFS.mount.apply(null, arguments);
-      },syncfs:function (mount, populate, callback) {
-        IDBFS.getLocalSet(mount, function(err, local) {
-          if (err) return callback(err);
-  
-          IDBFS.getRemoteSet(mount, function(err, remote) {
-            if (err) return callback(err);
-  
-            var src = populate ? remote : local;
-            var dst = populate ? local : remote;
-  
-            IDBFS.reconcile(src, dst, callback);
-          });
-        });
-      },getDB:function (name, callback) {
-        // check the cache first
-        var db = IDBFS.dbs[name];
-        if (db) {
-          return callback(null, db);
-        }
-  
-        var req;
-        try {
-          req = IDBFS.indexedDB().open(name, IDBFS.DB_VERSION);
-        } catch (e) {
-          return callback(e);
-        }
-        if (!req) {
-          return callback("Unable to connect to IndexedDB");
-        }
-        req.onupgradeneeded = function(e) {
-          var db = e.target.result;
-          var transaction = e.target.transaction;
-  
-          var fileStore;
-  
-          if (db.objectStoreNames.contains(IDBFS.DB_STORE_NAME)) {
-            fileStore = transaction.objectStore(IDBFS.DB_STORE_NAME);
-          } else {
-            fileStore = db.createObjectStore(IDBFS.DB_STORE_NAME);
-          }
-  
-          if (!fileStore.indexNames.contains('timestamp')) {
-            fileStore.createIndex('timestamp', 'timestamp', { unique: false });
-          }
-        };
-        req.onsuccess = function() {
-          db = req.result;
-  
-          // add to the cache
-          IDBFS.dbs[name] = db;
-          callback(null, db);
-        };
-        req.onerror = function(e) {
-          callback(this.error);
-          e.preventDefault();
-        };
-      },getLocalSet:function (mount, callback) {
-        var entries = {};
-  
-        function isRealDir(p) {
-          return p !== '.' && p !== '..';
-        };
-        function toAbsolute(root) {
-          return function(p) {
-            return PATH.join2(root, p);
-          }
-        };
-  
-        var check = FS.readdir(mount.mountpoint).filter(isRealDir).map(toAbsolute(mount.mountpoint));
-  
-        while (check.length) {
-          var path = check.pop();
-          var stat;
-  
-          try {
-            stat = FS.stat(path);
-          } catch (e) {
-            return callback(e);
-          }
-  
-          if (FS.isDir(stat.mode)) {
-            check.push.apply(check, FS.readdir(path).filter(isRealDir).map(toAbsolute(path)));
-          }
-  
-          entries[path] = { timestamp: stat.mtime };
-        }
-  
-        return callback(null, { type: 'local', entries: entries });
-      },getRemoteSet:function (mount, callback) {
-        var entries = {};
-  
-        IDBFS.getDB(mount.mountpoint, function(err, db) {
-          if (err) return callback(err);
-  
-          var transaction = db.transaction([IDBFS.DB_STORE_NAME], 'readonly');
-          transaction.onerror = function(e) {
-            callback(this.error);
-            e.preventDefault();
-          };
-  
-          var store = transaction.objectStore(IDBFS.DB_STORE_NAME);
-          var index = store.index('timestamp');
-  
-          index.openKeyCursor().onsuccess = function(event) {
-            var cursor = event.target.result;
-  
-            if (!cursor) {
-              return callback(null, { type: 'remote', db: db, entries: entries });
-            }
-  
-            entries[cursor.primaryKey] = { timestamp: cursor.key };
-  
-            cursor.continue();
-          };
-        });
-      },loadLocalEntry:function (path, callback) {
-        var stat, node;
-  
-        try {
-          var lookup = FS.lookupPath(path);
-          node = lookup.node;
-          stat = FS.stat(path);
-        } catch (e) {
-          return callback(e);
-        }
-  
-        if (FS.isDir(stat.mode)) {
-          return callback(null, { timestamp: stat.mtime, mode: stat.mode });
-        } else if (FS.isFile(stat.mode)) {
-          // Performance consideration: storing a normal JavaScript array to a IndexedDB is much slower than storing a typed array.
-          // Therefore always convert the file contents to a typed array first before writing the data to IndexedDB.
-          node.contents = MEMFS.getFileDataAsTypedArray(node);
-          return callback(null, { timestamp: stat.mtime, mode: stat.mode, contents: node.contents });
-        } else {
-          return callback(new Error('node type not supported'));
-        }
-      },storeLocalEntry:function (path, entry, callback) {
-        try {
-          if (FS.isDir(entry.mode)) {
-            FS.mkdir(path, entry.mode);
-          } else if (FS.isFile(entry.mode)) {
-            FS.writeFile(path, entry.contents, { encoding: 'binary', canOwn: true });
-          } else {
-            return callback(new Error('node type not supported'));
-          }
-  
-          FS.chmod(path, entry.mode);
-          FS.utime(path, entry.timestamp, entry.timestamp);
-        } catch (e) {
-          return callback(e);
-        }
-  
-        callback(null);
-      },removeLocalEntry:function (path, callback) {
-        try {
-          var lookup = FS.lookupPath(path);
-          var stat = FS.stat(path);
-  
-          if (FS.isDir(stat.mode)) {
-            FS.rmdir(path);
-          } else if (FS.isFile(stat.mode)) {
-            FS.unlink(path);
-          }
-        } catch (e) {
-          return callback(e);
-        }
-  
-        callback(null);
-      },loadRemoteEntry:function (store, path, callback) {
-        var req = store.get(path);
-        req.onsuccess = function(event) { callback(null, event.target.result); };
-        req.onerror = function(e) {
-          callback(this.error);
-          e.preventDefault();
-        };
-      },storeRemoteEntry:function (store, path, entry, callback) {
-        var req = store.put(entry, path);
-        req.onsuccess = function() { callback(null); };
-        req.onerror = function(e) {
-          callback(this.error);
-          e.preventDefault();
-        };
-      },removeRemoteEntry:function (store, path, callback) {
-        var req = store.delete(path);
-        req.onsuccess = function() { callback(null); };
-        req.onerror = function(e) {
-          callback(this.error);
-          e.preventDefault();
-        };
-      },reconcile:function (src, dst, callback) {
-        var total = 0;
-  
-        var create = [];
-        Object.keys(src.entries).forEach(function (key) {
-          var e = src.entries[key];
-          var e2 = dst.entries[key];
-          if (!e2 || e.timestamp > e2.timestamp) {
-            create.push(key);
-            total++;
-          }
-        });
-  
-        var remove = [];
-        Object.keys(dst.entries).forEach(function (key) {
-          var e = dst.entries[key];
-          var e2 = src.entries[key];
-          if (!e2) {
-            remove.push(key);
-            total++;
-          }
-        });
-  
-        if (!total) {
-          return callback(null);
-        }
-  
-        var errored = false;
-        var completed = 0;
-        var db = src.type === 'remote' ? src.db : dst.db;
-        var transaction = db.transaction([IDBFS.DB_STORE_NAME], 'readwrite');
-        var store = transaction.objectStore(IDBFS.DB_STORE_NAME);
-  
-        function done(err) {
-          if (err) {
-            if (!done.errored) {
-              done.errored = true;
-              return callback(err);
-            }
-            return;
-          }
-          if (++completed >= total) {
-            return callback(null);
-          }
-        };
-  
-        transaction.onerror = function(e) {
-          done(this.error);
-          e.preventDefault();
-        };
-  
-        // sort paths in ascending order so directory entries are created
-        // before the files inside them
-        create.sort().forEach(function (path) {
-          if (dst.type === 'local') {
-            IDBFS.loadRemoteEntry(store, path, function (err, entry) {
-              if (err) return done(err);
-              IDBFS.storeLocalEntry(path, entry, done);
-            });
-          } else {
-            IDBFS.loadLocalEntry(path, function (err, entry) {
-              if (err) return done(err);
-              IDBFS.storeRemoteEntry(store, path, entry, done);
-            });
-          }
-        });
-  
-        // sort paths in descending order so files are deleted before their
-        // parent directories
-        remove.sort().reverse().forEach(function(path) {
-          if (dst.type === 'local') {
-            IDBFS.removeLocalEntry(path, done);
-          } else {
-            IDBFS.removeRemoteEntry(store, path, done);
-          }
-        });
-      }};
-  
-  var NODEFS={isWindows:false,staticInit:function () {
-        NODEFS.isWindows = !!process.platform.match(/^win/);
-      },mount:function (mount) {
-        assert(ENVIRONMENT_IS_NODE);
-        return NODEFS.createNode(null, '/', NODEFS.getMode(mount.opts.root), 0);
-      },createNode:function (parent, name, mode, dev) {
-        if (!FS.isDir(mode) && !FS.isFile(mode) && !FS.isLink(mode)) {
-          throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
-        }
-        var node = FS.createNode(parent, name, mode);
-        node.node_ops = NODEFS.node_ops;
-        node.stream_ops = NODEFS.stream_ops;
-        return node;
-      },getMode:function (path) {
-        var stat;
-        try {
-          stat = fs.lstatSync(path);
-          if (NODEFS.isWindows) {
-            // On Windows, directories return permission bits 'rw-rw-rw-', even though they have 'rwxrwxrwx', so
-            // propagate write bits to execute bits.
-            stat.mode = stat.mode | ((stat.mode & 146) >> 1);
-          }
-        } catch (e) {
-          if (!e.code) throw e;
-          throw new FS.ErrnoError(ERRNO_CODES[e.code]);
-        }
-        return stat.mode;
-      },realPath:function (node) {
-        var parts = [];
-        while (node.parent !== node) {
-          parts.push(node.name);
-          node = node.parent;
-        }
-        parts.push(node.mount.opts.root);
-        parts.reverse();
-        return PATH.join.apply(null, parts);
-      },flagsToPermissionStringMap:{0:"r",1:"r+",2:"r+",64:"r",65:"r+",66:"r+",129:"rx+",193:"rx+",514:"w+",577:"w",578:"w+",705:"wx",706:"wx+",1024:"a",1025:"a",1026:"a+",1089:"a",1090:"a+",1153:"ax",1154:"ax+",1217:"ax",1218:"ax+",4096:"rs",4098:"rs+"},flagsToPermissionString:function (flags) {
-        flags &= ~0x200000 /*O_PATH*/; // Ignore this flag from musl, otherwise node.js fails to open the file.
-        flags &= ~0x800 /*O_NONBLOCK*/; // Ignore this flag from musl, otherwise node.js fails to open the file.
-        flags &= ~0x8000 /*O_LARGEFILE*/; // Ignore this flag from musl, otherwise node.js fails to open the file.
-        flags &= ~0x80000 /*O_CLOEXEC*/; // Some applications may pass it; it makes no sense for a single process.
-        if (flags in NODEFS.flagsToPermissionStringMap) {
-          return NODEFS.flagsToPermissionStringMap[flags];
-        } else {
-          throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
-        }
-      },node_ops:{getattr:function (node) {
-          var path = NODEFS.realPath(node);
-          var stat;
-          try {
-            stat = fs.lstatSync(path);
-          } catch (e) {
-            if (!e.code) throw e;
-            throw new FS.ErrnoError(ERRNO_CODES[e.code]);
-          }
-          // node.js v0.10.20 doesn't report blksize and blocks on Windows. Fake them with default blksize of 4096.
-          // See http://support.microsoft.com/kb/140365
-          if (NODEFS.isWindows && !stat.blksize) {
-            stat.blksize = 4096;
-          }
-          if (NODEFS.isWindows && !stat.blocks) {
-            stat.blocks = (stat.size+stat.blksize-1)/stat.blksize|0;
-          }
-          return {
-            dev: stat.dev,
-            ino: stat.ino,
-            mode: stat.mode,
-            nlink: stat.nlink,
-            uid: stat.uid,
-            gid: stat.gid,
-            rdev: stat.rdev,
-            size: stat.size,
-            atime: stat.atime,
-            mtime: stat.mtime,
-            ctime: stat.ctime,
-            blksize: stat.blksize,
-            blocks: stat.blocks
-          };
-        },setattr:function (node, attr) {
-          var path = NODEFS.realPath(node);
-          try {
-            if (attr.mode !== undefined) {
-              fs.chmodSync(path, attr.mode);
-              // update the common node structure mode as well
-              node.mode = attr.mode;
-            }
-            if (attr.timestamp !== undefined) {
-              var date = new Date(attr.timestamp);
-              fs.utimesSync(path, date, date);
-            }
-            if (attr.size !== undefined) {
-              fs.truncateSync(path, attr.size);
-            }
-          } catch (e) {
-            if (!e.code) throw e;
-            throw new FS.ErrnoError(ERRNO_CODES[e.code]);
-          }
-        },lookup:function (parent, name) {
-          var path = PATH.join2(NODEFS.realPath(parent), name);
-          var mode = NODEFS.getMode(path);
-          return NODEFS.createNode(parent, name, mode);
-        },mknod:function (parent, name, mode, dev) {
-          var node = NODEFS.createNode(parent, name, mode, dev);
-          // create the backing node for this in the fs root as well
-          var path = NODEFS.realPath(node);
-          try {
-            if (FS.isDir(node.mode)) {
-              fs.mkdirSync(path, node.mode);
-            } else {
-              fs.writeFileSync(path, '', { mode: node.mode });
-            }
-          } catch (e) {
-            if (!e.code) throw e;
-            throw new FS.ErrnoError(ERRNO_CODES[e.code]);
-          }
-          return node;
-        },rename:function (oldNode, newDir, newName) {
-          var oldPath = NODEFS.realPath(oldNode);
-          var newPath = PATH.join2(NODEFS.realPath(newDir), newName);
-          try {
-            fs.renameSync(oldPath, newPath);
-          } catch (e) {
-            if (!e.code) throw e;
-            throw new FS.ErrnoError(ERRNO_CODES[e.code]);
-          }
-        },unlink:function (parent, name) {
-          var path = PATH.join2(NODEFS.realPath(parent), name);
-          try {
-            fs.unlinkSync(path);
-          } catch (e) {
-            if (!e.code) throw e;
-            throw new FS.ErrnoError(ERRNO_CODES[e.code]);
-          }
-        },rmdir:function (parent, name) {
-          var path = PATH.join2(NODEFS.realPath(parent), name);
-          try {
-            fs.rmdirSync(path);
-          } catch (e) {
-            if (!e.code) throw e;
-            throw new FS.ErrnoError(ERRNO_CODES[e.code]);
-          }
-        },readdir:function (node) {
-          var path = NODEFS.realPath(node);
-          try {
-            return fs.readdirSync(path);
-          } catch (e) {
-            if (!e.code) throw e;
-            throw new FS.ErrnoError(ERRNO_CODES[e.code]);
-          }
-        },symlink:function (parent, newName, oldPath) {
-          var newPath = PATH.join2(NODEFS.realPath(parent), newName);
-          try {
-            fs.symlinkSync(oldPath, newPath);
-          } catch (e) {
-            if (!e.code) throw e;
-            throw new FS.ErrnoError(ERRNO_CODES[e.code]);
-          }
-        },readlink:function (node) {
-          var path = NODEFS.realPath(node);
-          try {
-            path = fs.readlinkSync(path);
-            path = NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root), path);
-            return path;
-          } catch (e) {
-            if (!e.code) throw e;
-            throw new FS.ErrnoError(ERRNO_CODES[e.code]);
-          }
-        }},stream_ops:{open:function (stream) {
-          var path = NODEFS.realPath(stream.node);
-          try {
-            if (FS.isFile(stream.node.mode)) {
-              stream.nfd = fs.openSync(path, NODEFS.flagsToPermissionString(stream.flags));
-            }
-          } catch (e) {
-            if (!e.code) throw e;
-            throw new FS.ErrnoError(ERRNO_CODES[e.code]);
-          }
-        },close:function (stream) {
-          try {
-            if (FS.isFile(stream.node.mode) && stream.nfd) {
-              fs.closeSync(stream.nfd);
-            }
-          } catch (e) {
-            if (!e.code) throw e;
-            throw new FS.ErrnoError(ERRNO_CODES[e.code]);
-          }
-        },read:function (stream, buffer, offset, length, position) {
-          if (length === 0) return 0; // node errors on 0 length reads
-          // FIXME this is terrible.
-          var nbuffer = new Buffer(length);
-          var res;
-          try {
-            res = fs.readSync(stream.nfd, nbuffer, 0, length, position);
-          } catch (e) {
-            throw new FS.ErrnoError(ERRNO_CODES[e.code]);
-          }
-          if (res > 0) {
-            for (var i = 0; i < res; i++) {
-              buffer[offset + i] = nbuffer[i];
-            }
-          }
-          return res;
-        },write:function (stream, buffer, offset, length, position) {
-          // FIXME this is terrible.
-          var nbuffer = new Buffer(buffer.subarray(offset, offset + length));
-          var res;
-          try {
-            res = fs.writeSync(stream.nfd, nbuffer, 0, length, position);
-          } catch (e) {
-            throw new FS.ErrnoError(ERRNO_CODES[e.code]);
-          }
-          return res;
-        },llseek:function (stream, offset, whence) {
-          var position = offset;
-          if (whence === 1) {  // SEEK_CUR.
-            position += stream.position;
-          } else if (whence === 2) {  // SEEK_END.
-            if (FS.isFile(stream.node.mode)) {
-              try {
-                var stat = fs.fstatSync(stream.nfd);
-                position += stat.size;
-              } catch (e) {
-                throw new FS.ErrnoError(ERRNO_CODES[e.code]);
-              }
-            }
-          }
-  
-          if (position < 0) {
-            throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
-          }
-  
-          return position;
-        }}};
-  
-  var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function (mount) {
-        assert(ENVIRONMENT_IS_WORKER);
-        if (!WORKERFS.reader) WORKERFS.reader = new FileReaderSync();
-        var root = WORKERFS.createNode(null, '/', WORKERFS.DIR_MODE, 0);
-        var createdParents = {};
-        function ensureParent(path) {
-          // return the parent node, creating subdirs as necessary
-          var parts = path.split('/');
-          var parent = root;
-          for (var i = 0; i < parts.length-1; i++) {
-            var curr = parts.slice(0, i+1).join('/');
-            // Issue 4254: Using curr as a node name will prevent the node
-            // from being found in FS.nameTable when FS.open is called on
-            // a path which holds a child of this node,
-            // given that all FS functions assume node names
-            // are just their corresponding parts within their given path,
-            // rather than incremental aggregates which include their parent's
-            // directories.
-            if (!createdParents[curr]) {
-              createdParents[curr] = WORKERFS.createNode(parent, parts[i], WORKERFS.DIR_MODE, 0);
-            }
-            parent = createdParents[curr];
-          }
-          return parent;
-        }
-        function base(path) {
-          var parts = path.split('/');
-          return parts[parts.length-1];
-        }
-        // We also accept FileList here, by using Array.prototype
-        Array.prototype.forEach.call(mount.opts["files"] || [], function(file) {
-          WORKERFS.createNode(ensureParent(file.name), base(file.name), WORKERFS.FILE_MODE, 0, file, file.lastModifiedDate);
-        });
-        (mount.opts["blobs"] || []).forEach(function(obj) {
-          WORKERFS.createNode(ensureParent(obj["name"]), base(obj["name"]), WORKERFS.FILE_MODE, 0, obj["data"]);
-        });
-        (mount.opts["packages"] || []).forEach(function(pack) {
-          pack['metadata'].files.forEach(function(file) {
-            var name = file.filename.substr(1); // remove initial slash
-            WORKERFS.createNode(ensureParent(name), base(name), WORKERFS.FILE_MODE, 0, pack['blob'].slice(file.start, file.end));
-          });
-        });
-        return root;
-      },createNode:function (parent, name, mode, dev, contents, mtime) {
-        var node = FS.createNode(parent, name, mode);
-        node.mode = mode;
-        node.node_ops = WORKERFS.node_ops;
-        node.stream_ops = WORKERFS.stream_ops;
-        node.timestamp = (mtime || new Date).getTime();
-        assert(WORKERFS.FILE_MODE !== WORKERFS.DIR_MODE);
-        if (mode === WORKERFS.FILE_MODE) {
-          node.size = contents.size;
-          node.contents = contents;
-        } else {
-          node.size = 4096;
-          node.contents = {};
-        }
-        if (parent) {
-          parent.contents[name] = node;
-        }
-        return node;
-      },node_ops:{getattr:function (node) {
-          return {
-            dev: 1,
-            ino: undefined,
-            mode: node.mode,
-            nlink: 1,
-            uid: 0,
-            gid: 0,
-            rdev: undefined,
-            size: node.size,
-            atime: new Date(node.timestamp),
-            mtime: new Date(node.timestamp),
-            ctime: new Date(node.timestamp),
-            blksize: 4096,
-            blocks: Math.ceil(node.size / 4096),
-          };
-        },setattr:function (node, attr) {
-          if (attr.mode !== undefined) {
-            node.mode = attr.mode;
-          }
-          if (attr.timestamp !== undefined) {
-            node.timestamp = attr.timestamp;
-          }
-        },lookup:function (parent, name) {
-          throw new FS.ErrnoError(ERRNO_CODES.ENOENT);
-        },mknod:function (parent, name, mode, dev) {
-          throw new FS.ErrnoError(ERRNO_CODES.EPERM);
-        },rename:function (oldNode, newDir, newName) {
-          throw new FS.ErrnoError(ERRNO_CODES.EPERM);
-        },unlink:function (parent, name) {
-          throw new FS.ErrnoError(ERRNO_CODES.EPERM);
-        },rmdir:function (parent, name) {
-          throw new FS.ErrnoError(ERRNO_CODES.EPERM);
-        },readdir:function (node) {
-          var entries = ['.', '..'];
-          for (var key in node.contents) {
-            if (!node.contents.hasOwnProperty(key)) {
-              continue;
-            }
-            entries.push(key);
-          }
-          return entries;
-        },symlink:function (parent, newName, oldPath) {
-          throw new FS.ErrnoError(ERRNO_CODES.EPERM);
-        },readlink:function (node) {
-          throw new FS.ErrnoError(ERRNO_CODES.EPERM);
-        }},stream_ops:{read:function (stream, buffer, offset, length, position) {
-          if (position >= stream.node.size) return 0;
-          var chunk = stream.node.contents.slice(position, position + length);
-          var ab = WORKERFS.reader.readAsArrayBuffer(chunk);
-          buffer.set(new Uint8Array(ab), offset);
-          return chunk.size;
-        },write:function (stream, buffer, offset, length, position) {
-          throw new FS.ErrnoError(ERRNO_CODES.EIO);
-        },llseek:function (stream, offset, whence) {
-          var position = offset;
-          if (whence === 1) {  // SEEK_CUR.
-            position += stream.position;
-          } else if (whence === 2) {  // SEEK_END.
-            if (FS.isFile(stream.node.mode)) {
-              position += stream.node.size;
-            }
-          }
-          if (position < 0) {
-            throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
-          }
-          return position;
-        }}};
-  
-  var _stdin=STATICTOP; STATICTOP += 16;;
-  
-  var _stdout=STATICTOP; STATICTOP += 16;;
-  
-  var _stderr=STATICTOP; STATICTOP += 16;;var FS={root:null,mounts:[],devices:[null],streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function (e) {
+  var ERRNO_MESSAGES={0:"Success",1:"Arg list too long",2:"Permission denied",3:"Address already in use",4:"Address not available",5:"Address family not supported by protocol family",6:"No more processes",7:"Socket already connected",8:"Bad file number",9:"Trying to read unreadable message",10:"Mount device busy",11:"Operation canceled",12:"No children",13:"Connection aborted",14:"Connection refused",15:"Connection reset by peer",16:"File locking deadlock error",17:"Destination address required",18:"Math arg out of domain of func",19:"Quota exceeded",20:"File exists",21:"Bad address",22:"File too large",23:"Host is unreachable",24:"Identifier removed",25:"Illegal byte sequence",26:"Connection already in progress",27:"Interrupted system call",28:"Invalid argument",29:"I/O error",30:"Socket is already connected",31:"Is a directory",32:"Too many symbolic links",33:"Too many open files",34:"Too many links",35:"Message too long",36:"Multihop attempted",37:"File or path name too long",38:"Network interface is not configured",39:"Connection reset by network",40:"Network is unreachable",41:"Too many open files in system",42:"No buffer space available",43:"No such device",44:"No such file or directory",45:"Exec format error",46:"No record locks available",47:"The link has been severed",48:"Not enough core",49:"No message of desired type",50:"Protocol not available",51:"No space left on device",52:"Function not implemented",53:"Socket is not connected",54:"Not a directory",55:"Directory not empty",56:"State not recoverable",57:"Socket operation on non-socket",59:"Not a typewriter",60:"No such device or address",61:"Value too large for defined data type",62:"Previous owner died",63:"Not super-user",64:"Broken pipe",65:"Protocol error",66:"Unknown protocol",67:"Protocol wrong type for socket",68:"Math result not representable",69:"Read only file system",70:"Illegal seek",71:"No such process",72:"Stale file handle",73:"Connection timed out",74:"Text file busy",75:"Cross-device link",100:"Device not a stream",101:"Bad font file fmt",102:"Invalid slot",103:"Invalid request code",104:"No anode",105:"Block device required",106:"Channel number out of range",107:"Level 3 halted",108:"Level 3 reset",109:"Link number out of range",110:"Protocol driver not attached",111:"No CSI structure available",112:"Level 2 halted",113:"Invalid exchange",114:"Invalid request descriptor",115:"Exchange full",116:"No data (for no delay io)",117:"Timer expired",118:"Out of streams resources",119:"Machine is not on the network",120:"Package not installed",121:"The object is remote",122:"Advertise error",123:"Srmount error",124:"Communication error on send",125:"Cross mount point (not really error)",126:"Given log. name not unique",127:"f.d. invalid for this operation",128:"Remote address changed",129:"Can   access a needed shared lib",130:"Accessing a corrupted shared lib",131:".lib section in a.out corrupted",132:"Attempting to link in too many libs",133:"Attempting to exec a shared library",135:"Streams pipe error",136:"Too many users",137:"Socket type not supported",138:"Not supported",139:"Protocol family not supported",140:"Can't send after socket shutdown",141:"Too many references",142:"Host is down",148:"No medium (in tape drive)",156:"Level 2 not synchronized"};
+  
+  var ERRNO_CODES={EPERM:63,ENOENT:44,ESRCH:71,EINTR:27,EIO:29,ENXIO:60,E2BIG:1,ENOEXEC:45,EBADF:8,ECHILD:12,EAGAIN:6,EWOULDBLOCK:6,ENOMEM:48,EACCES:2,EFAULT:21,ENOTBLK:105,EBUSY:10,EEXIST:20,EXDEV:75,ENODEV:43,ENOTDIR:54,EISDIR:31,EINVAL:28,ENFILE:41,EMFILE:33,ENOTTY:59,ETXTBSY:74,EFBIG:22,ENOSPC:51,ESPIPE:70,EROFS:69,EMLINK:34,EPIPE:64,EDOM:18,ERANGE:68,ENOMSG:49,EIDRM:24,ECHRNG:106,EL2NSYNC:156,EL3HLT:107,EL3RST:108,ELNRNG:109,EUNATCH:110,ENOCSI:111,EL2HLT:112,EDEADLK:16,ENOLCK:46,EBADE:113,EBADR:114,EXFULL:115,ENOANO:104,EBADRQC:103,EBADSLT:102,EDEADLOCK:16,EBFONT:101,ENOSTR:100,ENODATA:116,ETIME:117,ENOSR:118,ENONET:119,ENOPKG:120,EREMOTE:121,ENOLINK:47,EADV:122,ESRMNT:123,ECOMM:124,EPROTO:65,EMULTIHOP:36,EDOTDOT:125,EBADMSG:9,ENOTUNIQ:126,EBADFD:127,EREMCHG:128,ELIBACC:129,ELIBBAD:130,ELIBSCN:131,ELIBMAX:132,ELIBEXEC:133,ENOSYS:52,ENOTEMPTY:55,ENAMETOOLONG:37,ELOOP:32,EOPNOTSUPP:138,EPFNOSUPPORT:139,ECONNRESET:15,ENOBUFS:42,EAFNOSUPPORT:5,EPROTOTYPE:67,ENOTSOCK:57,ENOPROTOOPT:50,ESHUTDOWN:140,ECONNREFUSED:14,EADDRINUSE:3,ECONNABORTED:13,ENETUNREACH:40,ENETDOWN:38,ETIMEDOUT:73,EHOSTDOWN:142,EHOSTUNREACH:23,EINPROGRESS:26,EALREADY:7,EDESTADDRREQ:17,EMSGSIZE:35,EPROTONOSUPPORT:66,ESOCKTNOSUPPORT:137,EADDRNOTAVAIL:4,ENETRESET:39,EISCONN:30,ENOTCONN:53,ETOOMANYREFS:141,EUSERS:136,EDQUOT:19,ESTALE:72,ENOTSUP:138,ENOMEDIUM:148,EILSEQ:25,EOVERFLOW:61,ECANCELED:11,ENOTRECOVERABLE:56,EOWNERDEAD:62,ESTRPIPE:135};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function(e) {
         if (!(e instanceof FS.ErrnoError)) throw e + ' : ' + stackTrace();
-        return ___setErrNo(e.errno);
-      },lookupPath:function (path, opts) {
-        path = PATH.resolve(FS.cwd(), path);
+        return setErrNo(e.errno);
+      },lookupPath:function(path, opts) {
+        path = PATH_FS.resolve(FS.cwd(), path);
         opts = opts || {};
   
@@ -2961,5 +3327,5 @@
   
         if (opts.recurse_count > 8) {  // max recursive lookup of 8
-          throw new FS.ErrnoError(ERRNO_CODES.ELOOP);
+          throw new FS.ErrnoError(32);
         }
   
@@ -2996,5 +3362,5 @@
             while (FS.isLink(current.mode)) {
               var link = FS.readlink(current_path);
-              current_path = PATH.resolve(PATH.dirname(current_path), link);
+              current_path = PATH_FS.resolve(PATH.dirname(current_path), link);
   
               var lookup = FS.lookupPath(current_path, { recurse_count: opts.recurse_count });
@@ -3002,5 +3368,5 @@
   
               if (count++ > 40) {  // limit max consecutive symlinks to 40 (SYMLOOP_MAX).
-                throw new FS.ErrnoError(ERRNO_CODES.ELOOP);
+                throw new FS.ErrnoError(32);
               }
             }
@@ -3009,5 +3375,5 @@
   
         return { path: current_path, node: current };
-      },getPath:function (node) {
+      },getPath:function(node) {
         var path;
         while (true) {
@@ -3020,5 +3386,5 @@
           node = node.parent;
         }
-      },hashName:function (parentid, name) {
+      },hashName:function(parentid, name) {
         var hash = 0;
   
@@ -3028,9 +3394,9 @@
         }
         return ((parentid + hash) >>> 0) % FS.nameTable.length;
-      },hashAddNode:function (node) {
+      },hashAddNode:function(node) {
         var hash = FS.hashName(node.parent.id, node.name);
         node.name_next = FS.nameTable[hash];
         FS.nameTable[hash] = node;
-      },hashRemoveNode:function (node) {
+      },hashRemoveNode:function(node) {
         var hash = FS.hashName(node.parent.id, node.name);
         if (FS.nameTable[hash] === node) {
@@ -3046,8 +3412,8 @@
           }
         }
-      },lookupNode:function (parent, name) {
-        var err = FS.mayLookup(parent);
-        if (err) {
-          throw new FS.ErrnoError(err, parent);
+      },lookupNode:function(parent, name) {
+        var errCode = FS.mayLookup(parent);
+        if (errCode) {
+          throw new FS.ErrnoError(errCode, parent);
         }
         var hash = FS.hashName(parent.id, name);
@@ -3060,47 +3426,5 @@
         // if we failed to find it in the cache, call into the VFS
         return FS.lookup(parent, name);
-      },createNode:function (parent, name, mode, rdev) {
-        if (!FS.FSNode) {
-          FS.FSNode = function(parent, name, mode, rdev) {
-            if (!parent) {
-              parent = this;  // root node sets parent to itself
-            }
-            this.parent = parent;
-            this.mount = parent.mount;
-            this.mounted = null;
-            this.id = FS.nextInode++;
-            this.name = name;
-            this.mode = mode;
-            this.node_ops = {};
-            this.stream_ops = {};
-            this.rdev = rdev;
-          };
-  
-          FS.FSNode.prototype = {};
-  
-          // compatibility
-          var readMode = 292 | 73;
-          var writeMode = 146;
-  
-          // NOTE we must use Object.defineProperties instead of individual calls to
-          // Object.defineProperty in order to make closure compiler happy
-          Object.defineProperties(FS.FSNode.prototype, {
-            read: {
-              get: function() { return (this.mode & readMode) === readMode; },
-              set: function(val) { val ? this.mode |= readMode : this.mode &= ~readMode; }
-            },
-            write: {
-              get: function() { return (this.mode & writeMode) === writeMode; },
-              set: function(val) { val ? this.mode |= writeMode : this.mode &= ~writeMode; }
-            },
-            isFolder: {
-              get: function() { return FS.isDir(this.mode); }
-            },
-            isDevice: {
-              get: function() { return FS.isChrdev(this.mode); }
-            }
-          });
-        }
-  
+      },createNode:function(parent, name, mode, rdev) {
         var node = new FS.FSNode(parent, name, mode, rdev);
   
@@ -3108,25 +3432,25 @@
   
         return node;
-      },destroyNode:function (node) {
+      },destroyNode:function(node) {
         FS.hashRemoveNode(node);
-      },isRoot:function (node) {
+      },isRoot:function(node) {
         return node === node.parent;
-      },isMountpoint:function (node) {
+      },isMountpoint:function(node) {
         return !!node.mounted;
-      },isFile:function (mode) {
+      },isFile:function(mode) {
         return (mode & 61440) === 32768;
-      },isDir:function (mode) {
+      },isDir:function(mode) {
         return (mode & 61440) === 16384;
-      },isLink:function (mode) {
+      },isLink:function(mode) {
         return (mode & 61440) === 40960;
-      },isChrdev:function (mode) {
+      },isChrdev:function(mode) {
         return (mode & 61440) === 8192;
-      },isBlkdev:function (mode) {
+      },isBlkdev:function(mode) {
         return (mode & 61440) === 24576;
-      },isFIFO:function (mode) {
+      },isFIFO:function(mode) {
         return (mode & 61440) === 4096;
-      },isSocket:function (mode) {
+      },isSocket:function(mode) {
         return (mode & 49152) === 49152;
-      },flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function (str) {
+      },flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function(str) {
         var flags = FS.flagModes[str];
         if (typeof flags === 'undefined') {
@@ -3134,5 +3458,5 @@
         }
         return flags;
-      },flagsToPermissionString:function (flag) {
+      },flagsToPermissionString:function(flag) {
         var perms = ['r', 'w', 'rw'][flag & 3];
         if ((flag & 512)) {
@@ -3140,5 +3464,5 @@
         }
         return perms;
-      },nodePermissions:function (node, perms) {
+      },nodePermissions:function(node, perms) {
         if (FS.ignorePermissions) {
           return 0;
@@ -3146,24 +3470,24 @@
         // return 0 if any user, group or owner bits are set.
         if (perms.indexOf('r') !== -1 && !(node.mode & 292)) {
-          return ERRNO_CODES.EACCES;
+          return 2;
         } else if (perms.indexOf('w') !== -1 && !(node.mode & 146)) {
-          return ERRNO_CODES.EACCES;
+          return 2;
         } else if (perms.indexOf('x') !== -1 && !(node.mode & 73)) {
-          return ERRNO_CODES.EACCES;
+          return 2;
         }
         return 0;
-      },mayLookup:function (dir) {
-        var err = FS.nodePermissions(dir, 'x');
-        if (err) return err;
-        if (!dir.node_ops.lookup) return ERRNO_CODES.EACCES;
+      },mayLookup:function(dir) {
+        var errCode = FS.nodePermissions(dir, 'x');
+        if (errCode) return errCode;
+        if (!dir.node_ops.lookup) return 2;
         return 0;
-      },mayCreate:function (dir, name) {
+      },mayCreate:function(dir, name) {
         try {
           var node = FS.lookupNode(dir, name);
-          return ERRNO_CODES.EEXIST;
+          return 20;
         } catch (e) {
         }
         return FS.nodePermissions(dir, 'wx');
-      },mayDelete:function (dir, name, isdir) {
+      },mayDelete:function(dir, name, isdir) {
         var node;
         try {
@@ -3172,35 +3496,35 @@
           return e.errno;
         }
-        var err = FS.nodePermissions(dir, 'wx');
-        if (err) {
-          return err;
+        var errCode = FS.nodePermissions(dir, 'wx');
+        if (errCode) {
+          return errCode;
         }
         if (isdir) {
           if (!FS.isDir(node.mode)) {
-            return ERRNO_CODES.ENOTDIR;
+            return 54;
           }
           if (FS.isRoot(node) || FS.getPath(node) === FS.cwd()) {
-            return ERRNO_CODES.EBUSY;
+            return 10;
           }
         } else {
           if (FS.isDir(node.mode)) {
-            return ERRNO_CODES.EISDIR;
+            return 31;
           }
         }
         return 0;
-      },mayOpen:function (node, flags) {
+      },mayOpen:function(node, flags) {
         if (!node) {
-          return ERRNO_CODES.ENOENT;
+          return 44;
         }
         if (FS.isLink(node.mode)) {
-          return ERRNO_CODES.ELOOP;
+          return 32;
         } else if (FS.isDir(node.mode)) {
           if (FS.flagsToPermissionString(flags) !== 'r' || // opening for write
               (flags & 512)) { // TODO: check for O_SEARCH? (== search for dir only)
-            return ERRNO_CODES.EISDIR;
+            return 31;
           }
         }
         return FS.nodePermissions(node, FS.flagsToPermissionString(flags));
-      },MAX_OPEN_FDS:4096,nextfd:function (fd_start, fd_end) {
+      },MAX_OPEN_FDS:4096,nextfd:function(fd_start, fd_end) {
         fd_start = fd_start || 0;
         fd_end = fd_end || FS.MAX_OPEN_FDS;
@@ -3210,13 +3534,11 @@
           }
         }
-        throw new FS.ErrnoError(ERRNO_CODES.EMFILE);
-      },getStream:function (fd) {
+        throw new FS.ErrnoError(33);
+      },getStream:function(fd) {
         return FS.streams[fd];
-      },createStream:function (stream, fd_start, fd_end) {
+      },createStream:function(stream, fd_start, fd_end) {
         if (!FS.FSStream) {
-          FS.FSStream = function(){};
-          FS.FSStream.prototype = {};
-          // compatibility
-          Object.defineProperties(FS.FSStream.prototype, {
+          FS.FSStream = /** @constructor */ function(){};
+          FS.FSStream.prototype = {
             object: {
               get: function() { return this.node; },
@@ -3232,5 +3554,5 @@
               get: function() { return (this.flags & 1024); }
             }
-          });
+          };
         }
         // clone it, so we can return an instance of FSStream
@@ -3244,7 +3566,7 @@
         FS.streams[fd] = stream;
         return stream;
-      },closeStream:function (fd) {
+      },closeStream:function(fd) {
         FS.streams[fd] = null;
-      },chrdev_stream_ops:{open:function (stream) {
+      },chrdev_stream_ops:{open:function(stream) {
           var device = FS.getDevice(stream.node.rdev);
           // override node's stream ops with the device's
@@ -3254,17 +3576,17 @@
             stream.stream_ops.open(stream);
           }
-        },llseek:function () {
-          throw new FS.ErrnoError(ERRNO_CODES.ESPIPE);
-        }},major:function (dev) {
+        },llseek:function() {
+          throw new FS.ErrnoError(70);
+        }},major:function(dev) {
         return ((dev) >> 8);
-      },minor:function (dev) {
+      },minor:function(dev) {
         return ((dev) & 0xff);
-      },makedev:function (ma, mi) {
+      },makedev:function(ma, mi) {
         return ((ma) << 8 | (mi));
-      },registerDevice:function (dev, ops) {
+      },registerDevice:function(dev, ops) {
         FS.devices[dev] = { stream_ops: ops };
-      },getDevice:function (dev) {
+      },getDevice:function(dev) {
         return FS.devices[dev];
-      },getMounts:function (mount) {
+      },getMounts:function(mount) {
         var mounts = [];
         var check = [mount];
@@ -3279,5 +3601,5 @@
   
         return mounts;
-      },syncfs:function (populate, callback) {
+      },syncfs:function(populate, callback) {
         if (typeof(populate) === 'function') {
           callback = populate;
@@ -3288,5 +3610,5 @@
   
         if (FS.syncFSRequests > 1) {
-          console.log('warning: ' + FS.syncFSRequests + ' FS.syncfs operations in flight at once, probably just doing extra work');
+          err('warning: ' + FS.syncFSRequests + ' FS.syncfs operations in flight at once, probably just doing extra work');
         }
   
@@ -3294,15 +3616,15 @@
         var completed = 0;
   
-        function doCallback(err) {
+        function doCallback(errCode) {
           assert(FS.syncFSRequests > 0);
           FS.syncFSRequests--;
-          return callback(err);
-        }
-  
-        function done(err) {
-          if (err) {
+          return callback(errCode);
+        }
+  
+        function done(errCode) {
+          if (errCode) {
             if (!done.errored) {
               done.errored = true;
-              return doCallback(err);
+              return doCallback(errCode);
             }
             return;
@@ -3320,5 +3642,10 @@
           mount.type.syncfs(mount, populate, done);
         });
-      },mount:function (type, opts, mountpoint) {
+      },mount:function(type, opts, mountpoint) {
+        if (typeof type === 'string') {
+          // The filesystem was not included, and instead we have an error
+          // message stored in the variable.
+          throw type;
+        }
         var root = mountpoint === '/';
         var pseudo = !mountpoint;
@@ -3326,5 +3653,5 @@
   
         if (root && FS.root) {
-          throw new FS.ErrnoError(ERRNO_CODES.EBUSY);
+          throw new FS.ErrnoError(10);
         } else if (!root && !pseudo) {
           var lookup = FS.lookupPath(mountpoint, { follow_mount: false });
@@ -3334,9 +3661,9 @@
   
           if (FS.isMountpoint(node)) {
-            throw new FS.ErrnoError(ERRNO_CODES.EBUSY);
+            throw new FS.ErrnoError(10);
           }
   
           if (!FS.isDir(node.mode)) {
-            throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR);
+            throw new FS.ErrnoError(54);
           }
         }
@@ -3371,5 +3698,5 @@
   
         if (!FS.isMountpoint(lookup.node)) {
-          throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
+          throw new FS.ErrnoError(28);
         }
   
@@ -3400,32 +3727,32 @@
         assert(idx !== -1);
         node.mount.mounts.splice(idx, 1);
-      },lookup:function (parent, name) {
+      },lookup:function(parent, name) {
         return parent.node_ops.lookup(parent, name);
-      },mknod:function (path, mode, dev) {
+      },mknod:function(path, mode, dev) {
         var lookup = FS.lookupPath(path, { parent: true });
         var parent = lookup.node;
         var name = PATH.basename(path);
         if (!name || name === '.' || name === '..') {
-          throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
-        }
-        var err = FS.mayCreate(parent, name);
-        if (err) {
-          throw new FS.ErrnoError(err);
+          throw new FS.ErrnoError(28);
+        }
+        var errCode = FS.mayCreate(parent, name);
+        if (errCode) {
+          throw new FS.ErrnoError(errCode);
         }
         if (!parent.node_ops.mknod) {
-          throw new FS.ErrnoError(ERRNO_CODES.EPERM);
+          throw new FS.ErrnoError(63);
         }
         return parent.node_ops.mknod(parent, name, mode, dev);
-      },create:function (path, mode) {
+      },create:function(path, mode) {
         mode = mode !== undefined ? mode : 438 /* 0666 */;
         mode &= 4095;
         mode |= 32768;
         return FS.mknod(path, mode, 0);
-      },mkdir:function (path, mode) {
+      },mkdir:function(path, mode) {
         mode = mode !== undefined ? mode : 511 /* 0777 */;
         mode &= 511 | 512;
         mode |= 16384;
         return FS.mknod(path, mode, 0);
-      },mkdirTree:function (path, mode) {
+      },mkdirTree:function(path, mode) {
         var dirs = path.split('/');
         var d = '';
@@ -3436,8 +3763,8 @@
             FS.mkdir(d, mode);
           } catch(e) {
-            if (e.errno != ERRNO_CODES.EEXIST) throw e;
-          }
-        }
-      },mkdev:function (path, mode, dev) {
+            if (e.errno != 20) throw e;
+          }
+        }
+      },mkdev:function(path, mode, dev) {
         if (typeof(dev) === 'undefined') {
           dev = mode;
@@ -3446,23 +3773,23 @@
         mode |= 8192;
         return FS.mknod(path, mode, dev);
-      },symlink:function (oldpath, newpath) {
-        if (!PATH.resolve(oldpath)) {
-          throw new FS.ErrnoError(ERRNO_CODES.ENOENT);
+      },symlink:function(oldpath, newpath) {
+        if (!PATH_FS.resolve(oldpath)) {
+          throw new FS.ErrnoError(44);
         }
         var lookup = FS.lookupPath(newpath, { parent: true });
         var parent = lookup.node;
         if (!parent) {
-          throw new FS.ErrnoError(ERRNO_CODES.ENOENT);
+          throw new FS.ErrnoError(44);
         }
         var newname = PATH.basename(newpath);
-        var err = FS.mayCreate(parent, newname);
-        if (err) {
-          throw new FS.ErrnoError(err);
+        var errCode = FS.mayCreate(parent, newname);
+        if (errCode) {
+          throw new FS.ErrnoError(errCode);
         }
         if (!parent.node_ops.symlink) {
-          throw new FS.ErrnoError(ERRNO_CODES.EPERM);
+          throw new FS.ErrnoError(63);
         }
         return parent.node_ops.symlink(parent, newname, oldpath);
-      },rename:function (old_path, new_path) {
+      },rename:function(old_path, new_path) {
         var old_dirname = PATH.dirname(old_path);
         var new_dirname = PATH.dirname(new_path);
@@ -3477,22 +3804,22 @@
           new_dir = lookup.node;
         } catch (e) {
-          throw new FS.ErrnoError(ERRNO_CODES.EBUSY);
-        }
-        if (!old_dir || !new_dir) throw new FS.ErrnoError(ERRNO_CODES.ENOENT);
+          throw new FS.ErrnoError(10);
+        }
+        if (!old_dir || !new_dir) throw new FS.ErrnoError(44);
         // need to be part of the same mount
         if (old_dir.mount !== new_dir.mount) {
-          throw new FS.ErrnoError(ERRNO_CODES.EXDEV);
+          throw new FS.ErrnoError(75);
         }
         // source must exist
         var old_node = FS.lookupNode(old_dir, old_name);
         // old path should not be an ancestor of the new path
-        var relative = PATH.relative(old_path, new_dirname);
+        var relative = PATH_FS.relative(old_path, new_dirname);
         if (relative.charAt(0) !== '.') {
-          throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
+          throw new FS.ErrnoError(28);
         }
         // new path should not be an ancestor of the old path
-        relative = PATH.relative(new_path, old_dirname);
+        relative = PATH_FS.relative(new_path, old_dirname);
         if (relative.charAt(0) !== '.') {
-          throw new FS.ErrnoError(ERRNO_CODES.ENOTEMPTY);
+          throw new FS.ErrnoError(55);
         }
         // see if the new path already exists
@@ -3509,27 +3836,27 @@
         // we'll need to delete the old entry
         var isdir = FS.isDir(old_node.mode);
-        var err = FS.mayDelete(old_dir, old_name, isdir);
-        if (err) {
-          throw new FS.ErrnoError(err);
+        var errCode = FS.mayDelete(old_dir, old_name, isdir);
+        if (errCode) {
+          throw new FS.ErrnoError(errCode);
         }
         // need delete permissions if we'll be overwriting.
         // need create permissions if new doesn't already exist.
-        err = new_node ?
+        errCode = new_node ?
           FS.mayDelete(new_dir, new_name, isdir) :
           FS.mayCreate(new_dir, new_name);
-        if (err) {
-          throw new FS.ErrnoError(err);
+        if (errCode) {
+          throw new FS.ErrnoError(errCode);
         }
         if (!old_dir.node_ops.rename) {
-          throw new FS.ErrnoError(ERRNO_CODES.EPERM);
+          throw new FS.ErrnoError(63);
         }
         if (FS.isMountpoint(old_node) || (new_node && FS.isMountpoint(new_node))) {
-          throw new FS.ErrnoError(ERRNO_CODES.EBUSY);
+          throw new FS.ErrnoError(10);
         }
         // if we are going to change the parent, check write permissions
         if (new_dir !== old_dir) {
-          err = FS.nodePermissions(old_dir, 'w');
-          if (err) {
-            throw new FS.ErrnoError(err);
+          errCode = FS.nodePermissions(old_dir, 'w');
+          if (errCode) {
+            throw new FS.ErrnoError(errCode);
           }
         }
@@ -3539,5 +3866,5 @@
           }
         } catch(e) {
-          console.log("FS.trackingDelegate['willMovePath']('"+old_path+"', '"+new_path+"') threw an exception: " + e.message);
+          err("FS.trackingDelegate['willMovePath']('"+old_path+"', '"+new_path+"') threw an exception: " + e.message);
         }
         // remove the node from the lookup hash
@@ -3556,20 +3883,20 @@
           if (FS.trackingDelegate['onMovePath']) FS.trackingDelegate['onMovePath'](old_path, new_path);
         } catch(e) {
-          console.log("FS.trackingDelegate['onMovePath']('"+old_path+"', '"+new_path+"') threw an exception: " + e.message);
-        }
-      },rmdir:function (path) {
+          err("FS.trackingDelegate['onMovePath']('"+old_path+"', '"+new_path+"') threw an exception: " + e.message);
+        }
+      },rmdir:function(path) {
         var lookup = FS.lookupPath(path, { parent: true });
         var parent = lookup.node;
         var name = PATH.basename(path);
         var node = FS.lookupNode(parent, name);
-        var err = FS.mayDelete(parent, name, true);
-        if (err) {
-          throw new FS.ErrnoError(err);
+        var errCode = FS.mayDelete(parent, name, true);
+        if (errCode) {
+          throw new FS.ErrnoError(errCode);
         }
         if (!parent.node_ops.rmdir) {
-          throw new FS.ErrnoError(ERRNO_CODES.EPERM);
+          throw new FS.ErrnoError(63);
         }
         if (FS.isMountpoint(node)) {
-          throw new FS.ErrnoError(ERRNO_CODES.EBUSY);
+          throw new FS.ErrnoError(10);
         }
         try {
@@ -3578,5 +3905,5 @@
           }
         } catch(e) {
-          console.log("FS.trackingDelegate['willDeletePath']('"+path+"') threw an exception: " + e.message);
+          err("FS.trackingDelegate['willDeletePath']('"+path+"') threw an exception: " + e.message);
         }
         parent.node_ops.rmdir(parent, name);
@@ -3585,30 +3912,30 @@
           if (FS.trackingDelegate['onDeletePath']) FS.trackingDelegate['onDeletePath'](path);
         } catch(e) {
-          console.log("FS.trackingDelegate['onDeletePath']('"+path+"') threw an exception: " + e.message);
-        }
-      },readdir:function (path) {
+          err("FS.trackingDelegate['onDeletePath']('"+path+"') threw an exception: " + e.message);
+        }
+      },readdir:function(path) {
         var lookup = FS.lookupPath(path, { follow: true });
         var node = lookup.node;
         if (!node.node_ops.readdir) {
-          throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR);
+          throw new FS.ErrnoError(54);
         }
         return node.node_ops.readdir(node);
-      },unlink:function (path) {
+      },unlink:function(path) {
         var lookup = FS.lookupPath(path, { parent: true });
         var parent = lookup.node;
         var name = PATH.basename(path);
         var node = FS.lookupNode(parent, name);
-        var err = FS.mayDelete(parent, name, false);
-        if (err) {
+        var errCode = FS.mayDelete(parent, name, false);
+        if (errCode) {
           // According to POSIX, we should map EISDIR to EPERM, but
           // we instead do what Linux does (and we must, as we use
           // the musl linux libc).
-          throw new FS.ErrnoError(err);
+          throw new FS.ErrnoError(errCode);
         }
         if (!parent.node_ops.unlink) {
-          throw new FS.ErrnoError(ERRNO_CODES.EPERM);
+          throw new FS.ErrnoError(63);
         }
         if (FS.isMountpoint(node)) {
-          throw new FS.ErrnoError(ERRNO_CODES.EBUSY);
+          throw new FS.ErrnoError(10);
         }
         try {
@@ -3617,5 +3944,5 @@
           }
         } catch(e) {
-          console.log("FS.trackingDelegate['willDeletePath']('"+path+"') threw an exception: " + e.message);
+          err("FS.trackingDelegate['willDeletePath']('"+path+"') threw an exception: " + e.message);
         }
         parent.node_ops.unlink(parent, name);
@@ -3624,29 +3951,29 @@
           if (FS.trackingDelegate['onDeletePath']) FS.trackingDelegate['onDeletePath'](path);
         } catch(e) {
-          console.log("FS.trackingDelegate['onDeletePath']('"+path+"') threw an exception: " + e.message);
-        }
-      },readlink:function (path) {
+          err("FS.trackingDelegate['onDeletePath']('"+path+"') threw an exception: " + e.message);
+        }
+      },readlink:function(path) {
         var lookup = FS.lookupPath(path);
         var link = lookup.node;
         if (!link) {
-          throw new FS.ErrnoError(ERRNO_CODES.ENOENT);
+          throw new FS.ErrnoError(44);
         }
         if (!link.node_ops.readlink) {
-          throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
-        }
-        return PATH.resolve(FS.getPath(link.parent), link.node_ops.readlink(link));
-      },stat:function (path, dontFollow) {
+          throw new FS.ErrnoError(28);
+        }
+        return PATH_FS.resolve(FS.getPath(link.parent), link.node_ops.readlink(link));
+      },stat:function(path, dontFollow) {
         var lookup = FS.lookupPath(path, { follow: !dontFollow });
         var node = lookup.node;
         if (!node) {
-          throw new FS.ErrnoError(ERRNO_CODES.ENOENT);
+          throw new FS.ErrnoError(44);
         }
         if (!node.node_ops.getattr) {
-          throw new FS.ErrnoError(ERRNO_CODES.EPERM);
+          throw new FS.ErrnoError(63);
         }
         return node.node_ops.getattr(node);
-      },lstat:function (path) {
+      },lstat:function(path) {
         return FS.stat(path, true);
-      },chmod:function (path, mode, dontFollow) {
+      },chmod:function(path, mode, dontFollow) {
         var node;
         if (typeof path === 'string') {
@@ -3657,5 +3984,5 @@
         }
         if (!node.node_ops.setattr) {
-          throw new FS.ErrnoError(ERRNO_CODES.EPERM);
+          throw new FS.ErrnoError(63);
         }
         node.node_ops.setattr(node, {
@@ -3663,13 +3990,13 @@
           timestamp: Date.now()
         });
-      },lchmod:function (path, mode) {
+      },lchmod:function(path, mode) {
         FS.chmod(path, mode, true);
-      },fchmod:function (fd, mode) {
+      },fchmod:function(fd, mode) {
         var stream = FS.getStream(fd);
         if (!stream) {
-          throw new FS.ErrnoError(ERRNO_CODES.EBADF);
+          throw new FS.ErrnoError(8);
         }
         FS.chmod(stream.node, mode);
-      },chown:function (path, uid, gid, dontFollow) {
+      },chown:function(path, uid, gid, dontFollow) {
         var node;
         if (typeof path === 'string') {
@@ -3680,5 +4007,5 @@
         }
         if (!node.node_ops.setattr) {
-          throw new FS.ErrnoError(ERRNO_CODES.EPERM);
+          throw new FS.ErrnoError(63);
         }
         node.node_ops.setattr(node, {
@@ -3686,15 +4013,15 @@
           // we ignore the uid / gid for now
         });
-      },lchown:function (path, uid, gid) {
+      },lchown:function(path, uid, gid) {
         FS.chown(path, uid, gid, true);
-      },fchown:function (fd, uid, gid) {
+      },fchown:function(fd, uid, gid) {
         var stream = FS.getStream(fd);
         if (!stream) {
-          throw new FS.ErrnoError(ERRNO_CODES.EBADF);
+          throw new FS.ErrnoError(8);
         }
         FS.chown(stream.node, uid, gid);
-      },truncate:function (path, len) {
+      },truncate:function(path, len) {
         if (len < 0) {
-          throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
+          throw new FS.ErrnoError(28);
         }
         var node;
@@ -3706,15 +4033,15 @@
         }
         if (!node.node_ops.setattr) {
-          throw new FS.ErrnoError(ERRNO_CODES.EPERM);
+          throw new FS.ErrnoError(63);
         }
         if (FS.isDir(node.mode)) {
-          throw new FS.ErrnoError(ERRNO_CODES.EISDIR);
+          throw new FS.ErrnoError(31);
         }
         if (!FS.isFile(node.mode)) {
-          throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
-        }
-        var err = FS.nodePermissions(node, 'w');
-        if (err) {
-          throw new FS.ErrnoError(err);
+          throw new FS.ErrnoError(28);
+        }
+        var errCode = FS.nodePermissions(node, 'w');
+        if (errCode) {
+          throw new FS.ErrnoError(errCode);
         }
         node.node_ops.setattr(node, {
@@ -3722,14 +4049,14 @@
           timestamp: Date.now()
         });
-      },ftruncate:function (fd, len) {
+      },ftruncate:function(fd, len) {
         var stream = FS.getStream(fd);
         if (!stream) {
-          throw new FS.ErrnoError(ERRNO_CODES.EBADF);
+          throw new FS.ErrnoError(8);
         }
         if ((stream.flags & 2097155) === 0) {
-          throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
+          throw new FS.ErrnoError(28);
         }
         FS.truncate(stream.node, len);
-      },utime:function (path, atime, mtime) {
+      },utime:function(path, atime, mtime) {
         var lookup = FS.lookupPath(path, { follow: true });
         var node = lookup.node;
@@ -3737,7 +4064,7 @@
           timestamp: Math.max(atime, mtime)
         });
-      },open:function (path, flags, mode, fd_start, fd_end) {
+      },open:function(path, flags, mode, fd_start, fd_end) {
         if (path === "") {
-          throw new FS.ErrnoError(ERRNO_CODES.ENOENT);
+          throw new FS.ErrnoError(44);
         }
         flags = typeof flags === 'string' ? FS.modeStringToFlags(flags) : flags;
@@ -3768,5 +4095,5 @@
             // if O_CREAT and O_EXCL are set, error out if the node already exists
             if ((flags & 128)) {
-              throw new FS.ErrnoError(ERRNO_CODES.EEXIST);
+              throw new FS.ErrnoError(20);
             }
           } else {
@@ -3777,5 +4104,5 @@
         }
         if (!node) {
-          throw new FS.ErrnoError(ERRNO_CODES.ENOENT);
+          throw new FS.ErrnoError(44);
         }
         // can't truncate a device
@@ -3785,5 +4112,5 @@
         // if asked only for a directory, then this must be one
         if ((flags & 65536) && !FS.isDir(node.mode)) {
-          throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR);
+          throw new FS.ErrnoError(54);
         }
         // check permissions, if this is not a file we just created now (it is ok to
@@ -3791,7 +4118,7 @@
         // for later use)
         if (!created) {
-          var err = FS.mayOpen(node, flags);
-          if (err) {
-            throw new FS.ErrnoError(err);
+          var errCode = FS.mayOpen(node, flags);
+          if (errCode) {
+            throw new FS.ErrnoError(errCode);
           }
         }
@@ -3801,5 +4128,5 @@
         }
         // we've already handled these, don't pass down to the underlying vfs
-        flags &= ~(128 | 512);
+        flags &= ~(128 | 512 | 131072);
   
         // register the stream with the filesystem
@@ -3823,5 +4150,5 @@
           if (!(path in FS.readFiles)) {
             FS.readFiles[path] = 1;
-            Module['printErr']('read file: ' + path);
+            err("FS.trackingDelegate error on read file: " + path);
           }
         }
@@ -3838,8 +4165,11 @@
           }
         } catch(e) {
-          console.log("FS.trackingDelegate['onOpenFile']('"+path+"', flags) threw an exception: " + e.message);
+          err("FS.trackingDelegate['onOpenFile']('"+path+"', flags) threw an exception: " + e.message);
         }
         return stream;
-      },close:function (stream) {
+      },close:function(stream) {
+        if (FS.isClosed(stream)) {
+          throw new FS.ErrnoError(8);
+        }
         if (stream.getdents) stream.getdents = null; // free readdir state
         try {
@@ -3852,57 +4182,70 @@
           FS.closeStream(stream.fd);
         }
-      },llseek:function (stream, offset, whence) {
+        stream.fd = null;
+      },isClosed:function(stream) {
+        return stream.fd === null;
+      },llseek:function(stream, offset, whence) {
+        if (FS.isClosed(stream)) {
+          throw new FS.ErrnoError(8);
+        }
         if (!stream.seekable || !stream.stream_ops.llseek) {
-          throw new FS.ErrnoError(ERRNO_CODES.ESPIPE);
+          throw new FS.ErrnoError(70);
+        }
+        if (whence != 0 && whence != 1 && whence != 2) {
+          throw new FS.ErrnoError(28);
         }
         stream.position = stream.stream_ops.llseek(stream, offset, whence);
         stream.ungotten = [];
         return stream.position;
-      },read:function (stream, buffer, offset, length, position) {
+      },read:function(stream, buffer, offset, length, position) {
         if (length < 0 || position < 0) {
-          throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
+          throw new FS.ErrnoError(28);
+        }
+        if (FS.isClosed(stream)) {
+          throw new FS.ErrnoError(8);
         }
         if ((stream.flags & 2097155) === 1) {
-          throw new FS.ErrnoError(ERRNO_CODES.EBADF);
+          throw new FS.ErrnoError(8);
         }
         if (FS.isDir(stream.node.mode)) {
-          throw new FS.ErrnoError(ERRNO_CODES.EISDIR);
+          throw new FS.ErrnoError(31);
         }
         if (!stream.stream_ops.read) {
-          throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
-        }
-        var seeking = true;
-        if (typeof position === 'undefined') {
+          throw new FS.ErrnoError(28);
+        }
+        var seeking = typeof position !== 'undefined';
+        if (!seeking) {
           position = stream.position;
-          seeking = false;
         } else if (!stream.seekable) {
-          throw new FS.ErrnoError(ERRNO_CODES.ESPIPE);
+          throw new FS.ErrnoError(70);
         }
         var bytesRead = stream.stream_ops.read(stream, buffer, offset, length, position);
         if (!seeking) stream.position += bytesRead;
         return bytesRead;
-      },write:function (stream, buffer, offset, length, position, canOwn) {
+      },write:function(stream, buffer, offset, length, position, canOwn) {
         if (length < 0 || position < 0) {
-          throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
+          throw new FS.ErrnoError(28);
+        }
+        if (FS.isClosed(stream)) {
+          throw new FS.ErrnoError(8);
         }
         if ((stream.flags & 2097155) === 0) {
-          throw new FS.ErrnoError(ERRNO_CODES.EBADF);
+          throw new FS.ErrnoError(8);
         }
         if (FS.isDir(stream.node.mode)) {
-          throw new FS.ErrnoError(ERRNO_CODES.EISDIR);
+          throw new FS.ErrnoError(31);
         }
         if (!stream.stream_ops.write) {
-          throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
-        }
-        if (stream.flags & 1024) {
+          throw new FS.ErrnoError(28);
+        }
+        if (stream.seekable && stream.flags & 1024) {
           // seek to the end before writing in append mode
           FS.llseek(stream, 0, 2);
         }
-        var seeking = true;
-        if (typeof position === 'undefined') {
+        var seeking = typeof position !== 'undefined';
+        if (!seeking) {
           position = stream.position;
-          seeking = false;
         } else if (!stream.seekable) {
-          throw new FS.ErrnoError(ERRNO_CODES.ESPIPE);
+          throw new FS.ErrnoError(70);
         }
         var bytesWritten = stream.stream_ops.write(stream, buffer, offset, length, position, canOwn);
@@ -3911,43 +4254,56 @@
           if (stream.path && FS.trackingDelegate['onWriteToFile']) FS.trackingDelegate['onWriteToFile'](stream.path);
         } catch(e) {
-          console.log("FS.trackingDelegate['onWriteToFile']('"+path+"') threw an exception: " + e.message);
+          err("FS.trackingDelegate['onWriteToFile']('"+stream.path+"') threw an exception: " + e.message);
         }
         return bytesWritten;
-      },allocate:function (stream, offset, length) {
+      },allocate:function(stream, offset, length) {
+        if (FS.isClosed(stream)) {
+          throw new FS.ErrnoError(8);
+        }
         if (offset < 0 || length <= 0) {
-          throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
+          throw new FS.ErrnoError(28);
         }
         if ((stream.flags & 2097155) === 0) {
-          throw new FS.ErrnoError(ERRNO_CODES.EBADF);
-        }
-        if (!FS.isFile(stream.node.mode) && !FS.isDir(node.mode)) {
-          throw new FS.ErrnoError(ERRNO_CODES.ENODEV);
+          throw new FS.ErrnoError(8);
+        }
+        if (!FS.isFile(stream.node.mode) && !FS.isDir(stream.node.mode)) {
+          throw new FS.ErrnoError(43);
         }
         if (!stream.stream_ops.allocate) {
-          throw new FS.ErrnoError(ERRNO_CODES.EOPNOTSUPP);
+          throw new FS.ErrnoError(138);
         }
         stream.stream_ops.allocate(stream, offset, length);
-      },mmap:function (stream, buffer, offset, length, position, prot, flags) {
-        // TODO if PROT is PROT_WRITE, make sure we have write access
+      },mmap:function(stream, address, length, position, prot, flags) {
+        // User requests writing to file (prot & PROT_WRITE != 0).
+        // Checking if we have permissions to write to the file unless
+        // MAP_PRIVATE flag is set. According to POSIX spec it is possible
+        // to write to file opened in read-only mode with MAP_PRIVATE flag,
+        // as all modifications will be visible only in the memory of
+        // the current process.
+        if ((prot & 2) !== 0
+            && (flags & 2) === 0
+            && (stream.flags & 2097155) !== 2) {
+          throw new FS.ErrnoError(2);
+        }
         if ((stream.flags & 2097155) === 1) {
-          throw new FS.ErrnoError(ERRNO_CODES.EACCES);
+          throw new FS.ErrnoError(2);
         }
         if (!stream.stream_ops.mmap) {
-          throw new FS.ErrnoError(ERRNO_CODES.ENODEV);
-        }
-        return stream.stream_ops.mmap(stream, buffer, offset, length, position, prot, flags);
-      },msync:function (stream, buffer, offset, length, mmapFlags) {
+          throw new FS.ErrnoError(43);
+        }
+        return stream.stream_ops.mmap(stream, address, length, position, prot, flags);
+      },msync:function(stream, buffer, offset, length, mmapFlags) {
         if (!stream || !stream.stream_ops.msync) {
           return 0;
         }
         return stream.stream_ops.msync(stream, buffer, offset, length, mmapFlags);
-      },munmap:function (stream) {
+      },munmap:function(stream) {
         return 0;
-      },ioctl:function (stream, cmd, arg) {
+      },ioctl:function(stream, cmd, arg) {
         if (!stream.stream_ops.ioctl) {
-          throw new FS.ErrnoError(ERRNO_CODES.ENOTTY);
+          throw new FS.ErrnoError(59);
         }
         return stream.stream_ops.ioctl(stream, cmd, arg);
-      },readFile:function (path, opts) {
+      },readFile:function(path, opts) {
         opts = opts || {};
         opts.flags = opts.flags || 'r';
@@ -3969,40 +4325,38 @@
         FS.close(stream);
         return ret;
-      },writeFile:function (path, data, opts) {
+      },writeFile:function(path, data, opts) {
         opts = opts || {};
         opts.flags = opts.flags || 'w';
-        opts.encoding = opts.encoding || 'utf8';
-        if (opts.encoding !== 'utf8' && opts.encoding !== 'binary') {
-          throw new Error('Invalid encoding type "' + opts.encoding + '"');
-        }
         var stream = FS.open(path, opts.flags, opts.mode);
-        if (opts.encoding === 'utf8') {
+        if (typeof data === 'string') {
           var buf = new Uint8Array(lengthBytesUTF8(data)+1);
           var actualNumBytes = stringToUTF8Array(data, buf, 0, buf.length);
-          FS.write(stream, buf, 0, actualNumBytes, 0, opts.canOwn);
-        } else if (opts.encoding === 'binary') {
-          FS.write(stream, data, 0, data.length, 0, opts.canOwn);
+          FS.write(stream, buf, 0, actualNumBytes, undefined, opts.canOwn);
+        } else if (ArrayBuffer.isView(data)) {
+          FS.write(stream, data, 0, data.byteLength, undefined, opts.canOwn);
+        } else {
+          throw new Error('Unsupported data type');
         }
         FS.close(stream);
-      },cwd:function () {
+      },cwd:function() {
         return FS.currentPath;
-      },chdir:function (path) {
+      },chdir:function(path) {
         var lookup = FS.lookupPath(path, { follow: true });
         if (lookup.node === null) {
-          throw new FS.ErrnoError(ERRNO_CODES.ENOENT);
+          throw new FS.ErrnoError(44);
         }
         if (!FS.isDir(lookup.node.mode)) {
-          throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR);
-        }
-        var err = FS.nodePermissions(lookup.node, 'x');
-        if (err) {
-          throw new FS.ErrnoError(err);
+          throw new FS.ErrnoError(54);
+        }
+        var errCode = FS.nodePermissions(lookup.node, 'x');
+        if (errCode) {
+          throw new FS.ErrnoError(errCode);
         }
         FS.currentPath = lookup.path;
-      },createDefaultDirectories:function () {
+      },createDefaultDirectories:function() {
         FS.mkdir('/tmp');
         FS.mkdir('/home');
         FS.mkdir('/home/web_user');
-      },createDefaultDevices:function () {
+      },createDefaultDevices:function() {
         // create /dev
         FS.mkdir('/dev');
@@ -4022,14 +4376,23 @@
         // setup /dev/[u]random
         var random_device;
-        if (typeof crypto !== 'undefined') {
+        if (typeof crypto === 'object' && typeof crypto['getRandomValues'] === 'function') {
           // for modern web browsers
           var randomBuffer = new Uint8Array(1);
           random_device = function() { crypto.getRandomValues(randomBuffer); return randomBuffer[0]; };
-        } else if (ENVIRONMENT_IS_NODE) {
-          // for nodejs
-          random_device = function() { return require('crypto').randomBytes(1)[0]; };
-        } else {
-          // default for ES5 platforms
-          random_device = function() { return (Math.random()*256)|0; };
+        } else
+        if (ENVIRONMENT_IS_NODE) {
+          // for nodejs with or without crypto support included
+          try {
+            var crypto_module = require('crypto');
+            // nodejs has crypto support
+            random_device = function() { return crypto_module['randomBytes'](1)[0]; };
+          } catch (e) {
+            // nodejs doesn't have crypto support
+          }
+        } else
+        {}
+        if (!random_device) {
+          // we couldn't find a proper implementation, as Math.random() is not suitable for /dev/random, see emscripten-core/emscripten/pull/7096
+          random_device = function() { abort("no cryptographic support found for random_device. consider polyfilling it if you want to use something insecure like Math.random(), e.g. put this in a --pre-js: var crypto = { getRandomValues: function(array) { for (var i = 0; i < array.length; i++) array[i] = (Math.random()*256)|0 } };"); };
         }
         FS.createDevice('/dev', 'random', random_device);
@@ -4039,5 +4402,5 @@
         FS.mkdir('/dev/shm');
         FS.mkdir('/dev/shm/tmp');
-      },createSpecialDirectories:function () {
+      },createSpecialDirectories:function() {
         // create /proc/self/fd which allows /proc/self/fd/6 => readlink gives the name of the stream for fd 6 (see test_unistd_ttyname)
         FS.mkdir('/proc');
@@ -4051,5 +4414,5 @@
                 var fd = +name;
                 var stream = FS.getStream(fd);
-                if (!stream) throw new FS.ErrnoError(ERRNO_CODES.EBADF);
+                if (!stream) throw new FS.ErrnoError(8);
                 var ret = {
                   parent: null,
@@ -4064,5 +4427,5 @@
           }
         }, {}, '/proc/self/fd');
-      },createStandardStreams:function () {
+      },createStandardStreams:function() {
         // TODO deprecate the old functionality of a single
         // input / output callback and that utilizes FS.createDevice
@@ -4091,17 +4454,14 @@
         // open default streams for the stdin, stdout and stderr devices
         var stdin = FS.open('/dev/stdin', 'r');
+        var stdout = FS.open('/dev/stdout', 'w');
+        var stderr = FS.open('/dev/stderr', 'w');
         assert(stdin.fd === 0, 'invalid handle for stdin (' + stdin.fd + ')');
-  
-        var stdout = FS.open('/dev/stdout', 'w');
         assert(stdout.fd === 1, 'invalid handle for stdout (' + stdout.fd + ')');
-  
-        var stderr = FS.open('/dev/stderr', 'w');
         assert(stderr.fd === 2, 'invalid handle for stderr (' + stderr.fd + ')');
-      },ensureErrnoError:function () {
+      },ensureErrnoError:function() {
         if (FS.ErrnoError) return;
-        FS.ErrnoError = function ErrnoError(errno, node) {
-          //Module.printErr(stackTrace()); // useful for debugging
+        FS.ErrnoError = /** @this{Object} */ function ErrnoError(errno, node) {
           this.node = node;
-          this.setErrno = function(errno) {
+          this.setErrno = /** @this{Object} */ function(errno) {
             this.errno = errno;
             for (var key in ERRNO_CODES) {
@@ -4114,14 +4474,21 @@
           this.setErrno(errno);
           this.message = ERRNO_MESSAGES[errno];
-          if (this.stack) this.stack = demangleAll(this.stack);
+  
+          // Try to get a maximally helpful stack trace. On Node.js, getting Error.stack
+          // now ensures it shows what we want.
+          if (this.stack) {
+            // Define the stack property for Node.js 4, which otherwise errors on the next line.
+            Object.defineProperty(this, "stack", { value: (new Error).stack, writable: true });
+            this.stack = demangleAll(this.stack);
+          }
         };
         FS.ErrnoError.prototype = new Error();
         FS.ErrnoError.prototype.constructor = FS.ErrnoError;
         // Some errors may happen quite a bit, to avoid overhead we reuse them (and suffer a lack of stack info)
-        [ERRNO_CODES.ENOENT].forEach(function(code) {
+        [44].forEach(function(code) {
           FS.genericErrors[code] = new FS.ErrnoError(code);
           FS.genericErrors[code].stack = '<generic error, no stack>';
         });
-      },staticInit:function () {
+      },staticInit:function() {
         FS.ensureErrnoError();
   
@@ -4136,9 +4503,6 @@
         FS.filesystems = {
           'MEMFS': MEMFS,
-          'IDBFS': IDBFS,
-          'NODEFS': NODEFS,
-          'WORKERFS': WORKERFS,
         };
-      },init:function (input, output, error) {
+      },init:function(input, output, error) {
         assert(!FS.init.initialized, 'FS.init was previously called. If you want to initialize later with custom parameters, remove any earlier calls (note that one is automatically added to the generated code)');
         FS.init.initialized = true;
@@ -4152,5 +4516,5 @@
   
         FS.createStandardStreams();
-      },quit:function () {
+      },quit:function() {
         FS.init.initialized = false;
         // force-flush all streams, so we get musl std streams printed out
@@ -4165,26 +4529,26 @@
           FS.close(stream);
         }
-      },getMode:function (canRead, canWrite) {
+      },getMode:function(canRead, canWrite) {
         var mode = 0;
         if (canRead) mode |= 292 | 73;
         if (canWrite) mode |= 146;
         return mode;
-      },joinPath:function (parts, forceRelative) {
+      },joinPath:function(parts, forceRelative) {
         var path = PATH.join.apply(null, parts);
         if (forceRelative && path[0] == '/') path = path.substr(1);
         return path;
-      },absolutePath:function (relative, base) {
-        return PATH.resolve(base, relative);
-      },standardizePath:function (path) {
+      },absolutePath:function(relative, base) {
+        return PATH_FS.resolve(base, relative);
+      },standardizePath:function(path) {
         return PATH.normalize(path);
-      },findObject:function (path, dontResolveLastLink) {
+      },findObject:function(path, dontResolveLastLink) {
         var ret = FS.analyzePath(path, dontResolveLastLink);
         if (ret.exists) {
           return ret.object;
         } else {
-          ___setErrNo(ret.error);
+          setErrNo(ret.error);
           return null;
         }
-      },analyzePath:function (path, dontResolveLastLink) {
+      },analyzePath:function(path, dontResolveLastLink) {
         // operate from within the context of the symlink's target
         try {
@@ -4213,9 +4577,9 @@
         };
         return ret;
-      },createFolder:function (parent, name, canRead, canWrite) {
+      },createFolder:function(parent, name, canRead, canWrite) {
         var path = PATH.join2(typeof parent === 'string' ? parent : FS.getPath(parent), name);
         var mode = FS.getMode(canRead, canWrite);
         return FS.mkdir(path, mode);
-      },createPath:function (parent, path, canRead, canWrite) {
+      },createPath:function(parent, path, canRead, canWrite) {
         parent = typeof parent === 'string' ? parent : FS.getPath(parent);
         var parts = path.split('/').reverse();
@@ -4232,9 +4596,9 @@
         }
         return current;
-      },createFile:function (parent, name, properties, canRead, canWrite) {
+      },createFile:function(parent, name, properties, canRead, canWrite) {
         var path = PATH.join2(typeof parent === 'string' ? parent : FS.getPath(parent), name);
         var mode = FS.getMode(canRead, canWrite);
         return FS.create(path, mode);
-      },createDataFile:function (parent, name, data, canRead, canWrite, canOwn) {
+      },createDataFile:function(parent, name, data, canRead, canWrite, canOwn) {
         var path = name ? PATH.join2(typeof parent === 'string' ? parent : FS.getPath(parent), name) : parent;
         var mode = FS.getMode(canRead, canWrite);
@@ -4254,5 +4618,5 @@
         }
         return node;
-      },createDevice:function (parent, name, input, output) {
+      },createDevice:function(parent, name, input, output) {
         var path = PATH.join2(typeof parent === 'string' ? parent : FS.getPath(parent), name);
         var mode = FS.getMode(!!input, !!output);
@@ -4278,8 +4642,8 @@
                 result = input();
               } catch (e) {
-                throw new FS.ErrnoError(ERRNO_CODES.EIO);
+                throw new FS.ErrnoError(29);
               }
               if (result === undefined && bytesRead === 0) {
-                throw new FS.ErrnoError(ERRNO_CODES.EAGAIN);
+                throw new FS.ErrnoError(6);
               }
               if (result === null || result === undefined) break;
@@ -4297,5 +4661,5 @@
                 output(buffer[offset+i]);
               } catch (e) {
-                throw new FS.ErrnoError(ERRNO_CODES.EIO);
+                throw new FS.ErrnoError(29);
               }
             }
@@ -4307,18 +4671,18 @@
         });
         return FS.mkdev(path, mode, dev);
-      },createLink:function (parent, name, target, canRead, canWrite) {
+      },createLink:function(parent, name, target, canRead, canWrite) {
         var path = PATH.join2(typeof parent === 'string' ? parent : FS.getPath(parent), name);
         return FS.symlink(target, path);
-      },forceLoadFile:function (obj) {
+      },forceLoadFile:function(obj) {
         if (obj.isDevice || obj.isFolder || obj.link || obj.contents) return true;
         var success = true;
         if (typeof XMLHttpRequest !== 'undefined') {
           throw new Error("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.");
-        } else if (Module['read']) {
+        } else if (read_) {
           // Command-line.
           try {
             // WARNING: Can't read binary files in V8's d8 or tracemonkey's js, as
             //          read() will try to parse UTF8.
-            obj.contents = intArrayFromString(Module['read'](obj.url), true);
+            obj.contents = intArrayFromString(read_(obj.url), true);
             obj.usedBytes = obj.contents.length;
           } catch (e) {
@@ -4328,13 +4692,14 @@
           throw new Error('Cannot load without read() or XMLHttpRequest.');
         }
-        if (!success) ___setErrNo(ERRNO_CODES.EIO);
+        if (!success) setErrNo(29);
         return success;
-      },createLazyFile:function (parent, name, url, canRead, canWrite) {
+      },createLazyFile:function(parent, name, url, canRead, canWrite) {
         // Lazy chunked Uint8Array (implements get and length from Uint8Array). Actual getting is abstracted away for eventual reuse.
+        /** @constructor */
         function LazyUint8Array() {
           this.lengthKnown = false;
           this.chunks = []; // Loaded chunks. Index is the chunk number
         }
-        LazyUint8Array.prototype.get = function LazyUint8Array_get(idx) {
+        LazyUint8Array.prototype.get = /** @this{Object} */ function LazyUint8Array_get(idx) {
           if (idx > this.length-1 || idx < 0) {
             return undefined;
@@ -4343,8 +4708,8 @@
           var chunkNum = (idx / this.chunkSize)|0;
           return this.getter(chunkNum)[chunkOffset];
-        }
+        };
         LazyUint8Array.prototype.setDataGetter = function LazyUint8Array_setDataGetter(getter) {
           this.getter = getter;
-        }
+        };
         LazyUint8Array.prototype.cacheLength = function LazyUint8Array_cacheLength() {
           // Find length
@@ -4381,5 +4746,5 @@
             if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304)) throw new Error("Couldn't load " + url + ". Status: " + xhr.status);
             if (xhr.response !== undefined) {
-              return new Uint8Array(xhr.response || []);
+              return new Uint8Array(/** @type{Array<number>} */(xhr.response || []));
             } else {
               return intArrayFromString(xhr.responseText || '', true);
@@ -4403,5 +4768,5 @@
             datalength = this.getter(0).length;
             chunkSize = datalength;
-            console.log("LazyFiles on gzip forces download of the whole file when length is accessed");
+            out("LazyFiles on gzip forces download of the whole file when length is accessed");
           }
   
@@ -4409,5 +4774,5 @@
           this._chunkSize = chunkSize;
           this.lengthKnown = true;
-        }
+        };
         if (typeof XMLHttpRequest !== 'undefined') {
           if (!ENVIRONMENT_IS_WORKER) throw 'Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc';
@@ -4415,5 +4780,5 @@
           Object.defineProperties(lazyArray, {
             length: {
-              get: function() {
+              get: /** @this{Object} */ function() {
                 if(!this.lengthKnown) {
                   this.cacheLength();
@@ -4423,5 +4788,5 @@
             },
             chunkSize: {
-              get: function() {
+              get: /** @this{Object} */ function() {
                 if(!this.lengthKnown) {
                   this.cacheLength();
@@ -4450,5 +4815,5 @@
         Object.defineProperties(node, {
           usedBytes: {
-            get: function() { return this.contents.length; }
+            get: /** @this {FSNode} */ function() { return this.contents.length; }
           }
         });
@@ -4460,5 +4825,5 @@
           stream_ops[key] = function forceLoadLazyFile() {
             if (!FS.forceLoadFile(node)) {
-              throw new FS.ErrnoError(ERRNO_CODES.EIO);
+              throw new FS.ErrnoError(29);
             }
             return fn.apply(null, arguments);
@@ -4468,5 +4833,5 @@
         stream_ops.read = function stream_ops_read(stream, buffer, offset, length, position) {
           if (!FS.forceLoadFile(node)) {
-            throw new FS.ErrnoError(ERRNO_CODES.EIO);
+            throw new FS.ErrnoError(29);
           }
           var contents = stream.node.contents;
@@ -4488,9 +4853,9 @@
         node.stream_ops = stream_ops;
         return node;
-      },createPreloadedFile:function (parent, name, url, canRead, canWrite, onload, onerror, dontCreateFile, canOwn, preFinish) {
+      },createPreloadedFile:function(parent, name, url, canRead, canWrite, onload, onerror, dontCreateFile, canOwn, preFinish) {
         Browser.init(); // XXX perhaps this method should move onto Browser?
         // TODO we should allow people to just pass in a complete filename instead
         // of parent and name being that we just join them anyways
-        var fullname = name ? PATH.resolve(PATH.join2(parent, name)) : parent;
+        var fullname = name ? PATH_FS.resolve(PATH.join2(parent, name)) : parent;
         var dep = getUniqueRunDependency('cp ' + fullname); // might have several active requests for the same fullname
         function processData(byteArray) {
@@ -4524,9 +4889,9 @@
           processData(url);
         }
-      },indexedDB:function () {
+      },indexedDB:function() {
         return window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB;
-      },DB_NAME:function () {
+      },DB_NAME:function() {
         return 'EM_FS_' + window.location.pathname;
-      },DB_VERSION:20,DB_STORE_NAME:"FILE_DATA",saveFilesToDB:function (paths, onload, onerror) {
+      },DB_VERSION:20,DB_STORE_NAME:"FILE_DATA",saveFilesToDB:function(paths, onload, onerror) {
         onload = onload || function(){};
         onerror = onerror || function(){};
@@ -4538,5 +4903,5 @@
         }
         openRequest.onupgradeneeded = function openRequest_onupgradeneeded() {
-          console.log('creating db');
+          out('creating db');
           var db = openRequest.result;
           db.createObjectStore(FS.DB_STORE_NAME);
@@ -4558,5 +4923,5 @@
         };
         openRequest.onerror = onerror;
-      },loadFilesFromDB:function (paths, onload, onerror) {
+      },loadFilesFromDB:function(paths, onload, onerror) {
         onload = onload || function(){};
         onerror = onerror || function(){};
@@ -4596,5 +4961,5 @@
         };
         openRequest.onerror = onerror;
-      }};var SYSCALLS={DEFAULT_POLLMASK:5,mappings:{},umask:511,calculateAt:function (dirfd, path) {
+      }};var SYSCALLS={mappings:{},DEFAULT_POLLMASK:5,umask:511,calculateAt:function(dirfd, path) {
         if (path[0] !== '/') {
           // relative path
@@ -4604,5 +4969,5 @@
           } else {
             var dirstream = FS.getStream(dirfd);
-            if (!dirstream) throw new FS.ErrnoError(ERRNO_CODES.EBADF);
+            if (!dirstream) throw new FS.ErrnoError(8);
             dir = dirstream.path;
           }
@@ -4610,5 +4975,5 @@
         }
         return path;
-      },doStat:function (func, path, buf) {
+      },doStat:function(func, path, buf) {
         try {
           var stat = func(path);
@@ -4616,5 +4981,5 @@
           if (e && e.node && PATH.normalize(path) !== PATH.normalize(FS.getPath(e.node))) {
             // an error occurred while trying to look up the path; we should just report ENOTDIR
-            return -ERRNO_CODES.ENOTDIR;
+            return -54;
           }
           throw e;
@@ -4629,19 +4994,19 @@
         HEAP32[(((buf)+(28))>>2)]=stat.rdev;
         HEAP32[(((buf)+(32))>>2)]=0;
-        HEAP32[(((buf)+(36))>>2)]=stat.size;
-        HEAP32[(((buf)+(40))>>2)]=4096;
-        HEAP32[(((buf)+(44))>>2)]=stat.blocks;
-        HEAP32[(((buf)+(48))>>2)]=(stat.atime.getTime() / 1000)|0;
-        HEAP32[(((buf)+(52))>>2)]=0;
-        HEAP32[(((buf)+(56))>>2)]=(stat.mtime.getTime() / 1000)|0;
+        (tempI64 = [stat.size>>>0,(tempDouble=stat.size,(+(Math_abs(tempDouble))) >= 1.0 ? (tempDouble > 0.0 ? ((Math_min((+(Math_floor((tempDouble)/4294967296.0))), 4294967295.0))|0)>>>0 : (~~((+(Math_ceil((tempDouble - +(((~~(tempDouble)))>>>0))/4294967296.0)))))>>>0) : 0)],HEAP32[(((buf)+(40))>>2)]=tempI64[0],HEAP32[(((buf)+(44))>>2)]=tempI64[1]);
+        HEAP32[(((buf)+(48))>>2)]=4096;
+        HEAP32[(((buf)+(52))>>2)]=stat.blocks;
+        HEAP32[(((buf)+(56))>>2)]=(stat.atime.getTime() / 1000)|0;
         HEAP32[(((buf)+(60))>>2)]=0;
-        HEAP32[(((buf)+(64))>>2)]=(stat.ctime.getTime() / 1000)|0;
+        HEAP32[(((buf)+(64))>>2)]=(stat.mtime.getTime() / 1000)|0;
         HEAP32[(((buf)+(68))>>2)]=0;
-        HEAP32[(((buf)+(72))>>2)]=stat.ino;
+        HEAP32[(((buf)+(72))>>2)]=(stat.ctime.getTime() / 1000)|0;
+        HEAP32[(((buf)+(76))>>2)]=0;
+        (tempI64 = [stat.ino>>>0,(tempDouble=stat.ino,(+(Math_abs(tempDouble))) >= 1.0 ? (tempDouble > 0.0 ? ((Math_min((+(Math_floor((tempDouble)/4294967296.0))), 4294967295.0))|0)>>>0 : (~~((+(Math_ceil((tempDouble - +(((~~(tempDouble)))>>>0))/4294967296.0)))))>>>0) : 0)],HEAP32[(((buf)+(80))>>2)]=tempI64[0],HEAP32[(((buf)+(84))>>2)]=tempI64[1]);
         return 0;
-      },doMsync:function (addr, stream, len, flags) {
-        var buffer = new Uint8Array(HEAPU8.subarray(addr, addr + len));
-        FS.msync(stream, buffer, 0, len, flags);
-      },doMkdir:function (path, mode) {
+      },doMsync:function(addr, stream, len, flags, offset) {
+        var buffer = HEAPU8.slice(addr, addr + len);
+        FS.msync(stream, buffer, offset, len, flags);
+      },doMkdir:function(path, mode) {
         // remove a trailing slash, if one - /a/b/ has basename of '', but
         // we want to create b in the context of this function
@@ -4650,5 +5015,5 @@
         FS.mkdir(path, mode, 0);
         return 0;
-      },doMknod:function (path, mode, dev) {
+      },doMknod:function(path, mode, dev) {
         // we don't want this in the JS API as it uses mknod to create all nodes.
         switch (mode & 61440) {
@@ -4659,10 +5024,10 @@
           case 49152:
             break;
-          default: return -ERRNO_CODES.EINVAL;
+          default: return -28;
         }
         FS.mknod(path, mode, dev);
         return 0;
-      },doReadlink:function (path, buf, bufsize) {
-        if (bufsize <= 0) return -ERRNO_CODES.EINVAL;
+      },doReadlink:function(path, buf, bufsize) {
+        if (bufsize <= 0) return -28;
         var ret = FS.readlink(path);
   
@@ -4675,12 +5040,15 @@
   
         return len;
-      },doAccess:function (path, amode) {
+      },doAccess:function(path, amode) {
         if (amode & ~7) {
           // need a valid mode
-          return -ERRNO_CODES.EINVAL;
+          return -28;
         }
         var node;
         var lookup = FS.lookupPath(path, { follow: true });
         node = lookup.node;
+        if (!node) {
+          return -44;
+        }
         var perms = '';
         if (amode & 4) perms += 'r';
@@ -4688,12 +5056,12 @@
         if (amode & 1) perms += 'x';
         if (perms /* otherwise, they've just passed F_OK */ && FS.nodePermissions(node, perms)) {
-          return -ERRNO_CODES.EACCES;
+          return -2;
         }
         return 0;
-      },doDup:function (path, flags, suggestFD) {
+      },doDup:function(path, flags, suggestFD) {
         var suggest = FS.getStream(suggestFD);
         if (suggest) FS.close(suggest);
         return FS.open(path, flags, 0, suggestFD, suggestFD).fd;
-      },doReadv:function (stream, iov, iovcnt, offset) {
+      },doReadv:function(stream, iov, iovcnt, offset) {
         var ret = 0;
         for (var i = 0; i < iovcnt; i++) {
@@ -4706,5 +5074,5 @@
         }
         return ret;
-      },doWritev:function (stream, iov, iovcnt, offset) {
+      },doWritev:function(stream, iov, iovcnt, offset) {
         var ret = 0;
         for (var i = 0; i < iovcnt; i++) {
@@ -4716,940 +5084,29 @@
         }
         return ret;
-      },varargs:0,get:function (varargs) {
+      },varargs:undefined,get:function() {
+        assert(SYSCALLS.varargs != undefined);
         SYSCALLS.varargs += 4;
         var ret = HEAP32[(((SYSCALLS.varargs)-(4))>>2)];
         return ret;
-      },getStr:function () {
-        var ret = Pointer_stringify(SYSCALLS.get());
+      },getStr:function(ptr) {
+        var ret = UTF8ToString(ptr);
         return ret;
-      },getStreamFromFD:function () {
-        var stream = FS.getStream(SYSCALLS.get());
-        if (!stream) throw new FS.ErrnoError(ERRNO_CODES.EBADF);
+      },getStreamFromFD:function(fd) {
+        var stream = FS.getStream(fd);
+        if (!stream) throw new FS.ErrnoError(8);
         return stream;
-      },getSocketFromFD:function () {
-        var socket = SOCKFS.getSocket(SYSCALLS.get());
-        if (!socket) throw new FS.ErrnoError(ERRNO_CODES.EBADF);
-        return socket;
-      },getSocketAddress:function (allowNull) {
-        var addrp = SYSCALLS.get(), addrlen = SYSCALLS.get();
-        if (allowNull && addrp === 0) return null;
-        var info = __read_sockaddr(addrp, addrlen);
-        if (info.errno) throw new FS.ErrnoError(info.errno);
-        info.addr = DNS.lookup_addr(info.addr) || info.addr;
-        return info;
-      },get64:function () {
-        var low = SYSCALLS.get(), high = SYSCALLS.get();
+      },get64:function(low, high) {
         if (low >= 0) assert(high === 0);
         else assert(high === -1);
         return low;
-      },getZero:function () {
-        assert(SYSCALLS.get() === 0);
-      }};function ___syscall5(which, varargs) {SYSCALLS.varargs = varargs;
+      }};function ___sys_fcntl64(fd, cmd, varargs) {SYSCALLS.varargs = varargs;
   try {
-   // open
-      var pathname = SYSCALLS.getStr(), flags = SYSCALLS.get(), mode = SYSCALLS.get() // optional TODO
-      var stream = FS.open(pathname, flags, mode);
-      return stream.fd;
-    } catch (e) {
-    if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e);
-    return -e.errno;
-  }
-  }
-
-  function ___lock() {}
-
-  function ___unlock() {}
-
-  function ___syscall6(which, varargs) {SYSCALLS.varargs = varargs;
-  try {
-   // close
-      var stream = SYSCALLS.getStreamFromFD();
-      FS.close(stream);
-      return 0;
-    } catch (e) {
-    if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e);
-    return -e.errno;
-  }
-  }
-
-   
-  Module["_llvm_bswap_i32"] = _llvm_bswap_i32;
-
-  
-  
-  var cttz_i8 = allocate([8,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,7,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0], "i8", ALLOC_STATIC); 
-  Module["_llvm_cttz_i32"] = _llvm_cttz_i32; 
-  Module["___udivmoddi4"] = ___udivmoddi4; 
-  Module["___udivdi3"] = ___udivdi3;
-
-  
-   
-  Module["___muldsi3"] = ___muldsi3; 
-  Module["___muldi3"] = ___muldi3;
-
-  var _llvm_pow_f64=Math_pow;
-
-   
-  Module["_sbrk"] = _sbrk;
-
-  
-  
-  function _emscripten_memcpy_big(dest, src, num) {
-      HEAPU8.set(HEAPU8.subarray(src, src+num), dest);
-      return dest;
-    } 
-  Module["_memcpy"] = _memcpy; 
-  Module["_memmove"] = _memmove;
-
-
-   
-  Module["___uremdi3"] = ___uremdi3;
-
-
-
-  
-  function __exit(status) {
-      // void _exit(int status);
-      // http://pubs.opengroup.org/onlinepubs/000095399/functions/exit.html
-      Module['exit'](status);
-    }function _exit(status) {
-      __exit(status);
-    }
-
-  
-  
-  function _emscripten_set_main_loop_timing(mode, value) {
-      Browser.mainLoop.timingMode = mode;
-      Browser.mainLoop.timingValue = value;
-  
-      if (!Browser.mainLoop.func) {
-        console.error('emscripten_set_main_loop_timing: Cannot set timing mode for main loop since a main loop does not exist! Call emscripten_set_main_loop first to set one up.');
-        return 1; // Return non-zero on failure, can't set timing mode when there is no main loop.
-      }
-  
-      if (mode == 0 /*EM_TIMING_SETTIMEOUT*/) {
-        Browser.mainLoop.scheduler = function Browser_mainLoop_scheduler_setTimeout() {
-          var timeUntilNextTick = Math.max(0, Browser.mainLoop.tickStartTime + value - _emscripten_get_now())|0;
-          setTimeout(Browser.mainLoop.runner, timeUntilNextTick); // doing this each time means that on exception, we stop
-        };
-        Browser.mainLoop.method = 'timeout';
-      } else if (mode == 1 /*EM_TIMING_RAF*/) {
-        Browser.mainLoop.scheduler = function Browser_mainLoop_scheduler_rAF() {
-          Browser.requestAnimationFrame(Browser.mainLoop.runner);
-        };
-        Browser.mainLoop.method = 'rAF';
-      } else if (mode == 2 /*EM_TIMING_SETIMMEDIATE*/) {
-        if (!window['setImmediate']) {
-          // Emulate setImmediate. (note: not a complete polyfill, we don't emulate clearImmediate() to keep code size to minimum, since not needed)
-          var setImmediates = [];
-          var emscriptenMainLoopMessageId = 'setimmediate';
-          function Browser_setImmediate_messageHandler(event) {
-            if (event.source === window && event.data === emscriptenMainLoopMessageId) {
-              event.stopPropagation();
-              setImmediates.shift()();
-            }
-          }
-          window.addEventListener("message", Browser_setImmediate_messageHandler, true);
-          window['setImmediate'] = function Browser_emulated_setImmediate(func) {
-            setImmediates.push(func);
-            if (ENVIRONMENT_IS_WORKER) {
-              if (Module['setImmediates'] === undefined) Module['setImmediates'] = [];
-              Module['setImmediates'].push(func);
-              window.postMessage({target: emscriptenMainLoopMessageId}); // In --proxy-to-worker, route the message via proxyClient.js
-            } else window.postMessage(emscriptenMainLoopMessageId, "*"); // On the main thread, can just send the message to itself.
-          }
-        }
-        Browser.mainLoop.scheduler = function Browser_mainLoop_scheduler_setImmediate() {
-          window['setImmediate'](Browser.mainLoop.runner);
-        };
-        Browser.mainLoop.method = 'immediate';
-      }
-      return 0;
-    }
-  
-  function _emscripten_get_now() { abort() }function _emscripten_set_main_loop(func, fps, simulateInfiniteLoop, arg, noSetTiming) {
-      Module['noExitRuntime'] = true;
-  
-      assert(!Browser.mainLoop.func, 'emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.');
-  
-      Browser.mainLoop.func = func;
-      Browser.mainLoop.arg = arg;
-  
-      var browserIterationFunc;
-      if (typeof arg !== 'undefined') {
-        browserIterationFunc = function() {
-          Module['dynCall_vi'](func, arg);
-        };
-      } else {
-        browserIterationFunc = function() {
-          Module['dynCall_v'](func);
-        };
-      }
-  
-      var thisMainLoopId = Browser.mainLoop.currentlyRunningMainloop;
-  
-      Browser.mainLoop.runner = function Browser_mainLoop_runner() {
-        if (ABORT) return;
-        if (Browser.mainLoop.queue.length > 0) {
-          var start = Date.now();
-          var blocker = Browser.mainLoop.queue.shift();
-          blocker.func(blocker.arg);
-          if (Browser.mainLoop.remainingBlockers) {
-            var remaining = Browser.mainLoop.remainingBlockers;
-            var next = remaining%1 == 0 ? remaining-1 : Math.floor(remaining);
-            if (blocker.counted) {
-              Browser.mainLoop.remainingBlockers = next;
-            } else {
-              // not counted, but move the progress along a tiny bit
-              next = next + 0.5; // do not steal all the next one's progress
-              Browser.mainLoop.remainingBlockers = (8*remaining + next)/9;
-            }
-          }
-          console.log('main loop blocker "' + blocker.name + '" took ' + (Date.now() - start) + ' ms'); //, left: ' + Browser.mainLoop.remainingBlockers);
-          Browser.mainLoop.updateStatus();
-          
-          // catches pause/resume main loop from blocker execution
-          if (thisMainLoopId < Browser.mainLoop.currentlyRunningMainloop) return;
-          
-          setTimeout(Browser.mainLoop.runner, 0);
-          return;
-        }
-  
-        // catch pauses from non-main loop sources
-        if (thisMainLoopId < Browser.mainLoop.currentlyRunningMainloop) return;
-  
-        // Implement very basic swap interval control
-        Browser.mainLoop.currentFrameNumber = Browser.mainLoop.currentFrameNumber + 1 | 0;
-        if (Browser.mainLoop.timingMode == 1/*EM_TIMING_RAF*/ && Browser.mainLoop.timingValue > 1 && Browser.mainLoop.currentFrameNumber % Browser.mainLoop.timingValue != 0) {
-          // Not the scheduled time to render this frame - skip.
-          Browser.mainLoop.scheduler();
-          return;
-        } else if (Browser.mainLoop.timingMode == 0/*EM_TIMING_SETTIMEOUT*/) {
-          Browser.mainLoop.tickStartTime = _emscripten_get_now();
-        }
-  
-        // Signal GL rendering layer that processing of a new frame is about to start. This helps it optimize
-        // VBO double-buffering and reduce GPU stalls.
-  
-  
-        if (Browser.mainLoop.method === 'timeout' && Module.ctx) {
-          Module.printErr('Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!');
-          Browser.mainLoop.method = ''; // just warn once per call to set main loop
-        }
-  
-        Browser.mainLoop.runIter(browserIterationFunc);
-  
-        checkStackCookie();
-  
-        // catch pauses from the main loop itself
-        if (thisMainLoopId < Browser.mainLoop.currentlyRunningMainloop) return;
-  
-        // Queue new audio data. This is important to be right after the main loop invocation, so that we will immediately be able
-        // to queue the newest produced audio samples.
-        // TODO: Consider adding pre- and post- rAF callbacks so that GL.newRenderingFrameStarted() and SDL.audio.queueNewAudioData()
-        //       do not need to be hardcoded into this function, but can be more generic.
-        if (typeof SDL === 'object' && SDL.audio && SDL.audio.queueNewAudioData) SDL.audio.queueNewAudioData();
-  
-        Browser.mainLoop.scheduler();
-      }
-  
-      if (!noSetTiming) {
-        if (fps && fps > 0) _emscripten_set_main_loop_timing(0/*EM_TIMING_SETTIMEOUT*/, 1000.0 / fps);
-        else _emscripten_set_main_loop_timing(1/*EM_TIMING_RAF*/, 1); // Do rAF by rendering each frame (no decimating)
-  
-        Browser.mainLoop.scheduler();
-      }
-  
-      if (simulateInfiniteLoop) {
-        throw 'SimulateInfiniteLoop';
-      }
-    }var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function () {
-          Browser.mainLoop.scheduler = null;
-          Browser.mainLoop.currentlyRunningMainloop++; // Incrementing this signals the previous main loop that it's now become old, and it must return.
-        },resume:function () {
-          Browser.mainLoop.currentlyRunningMainloop++;
-          var timingMode = Browser.mainLoop.timingMode;
-          var timingValue = Browser.mainLoop.timingValue;
-          var func = Browser.mainLoop.func;
-          Browser.mainLoop.func = null;
-          _emscripten_set_main_loop(func, 0, false, Browser.mainLoop.arg, true /* do not set timing and call scheduler, we will do it on the next lines */);
-          _emscripten_set_main_loop_timing(timingMode, timingValue);
-          Browser.mainLoop.scheduler();
-        },updateStatus:function () {
-          if (Module['setStatus']) {
-            var message = Module['statusMessage'] || 'Please wait...';
-            var remaining = Browser.mainLoop.remainingBlockers;
-            var expected = Browser.mainLoop.expectedBlockers;
-            if (remaining) {
-              if (remaining < expected) {
-                Module['setStatus'](message + ' (' + (expected - remaining) + '/' + expected + ')');
-              } else {
-                Module['setStatus'](message);
-              }
-            } else {
-              Module['setStatus']('');
-            }
-          }
-        },runIter:function (func) {
-          if (ABORT) return;
-          if (Module['preMainLoop']) {
-            var preRet = Module['preMainLoop']();
-            if (preRet === false) {
-              return; // |return false| skips a frame
-            }
-          }
-          try {
-            func();
-          } catch (e) {
-            if (e instanceof ExitStatus) {
-              return;
-            } else {
-              if (e && typeof e === 'object' && e.stack) Module.printErr('exception thrown: ' + [e, e.stack]);
-              throw e;
-            }
-          }
-          if (Module['postMainLoop']) Module['postMainLoop']();
-        }},isFullscreen:false,pointerLock:false,moduleContextCreatedCallbacks:[],workers:[],init:function () {
-        if (!Module["preloadPlugins"]) Module["preloadPlugins"] = []; // needs to exist even in workers
-  
-        if (Browser.initted) return;
-        Browser.initted = true;
-  
-        try {
-          new Blob();
-          Browser.hasBlobConstructor = true;
-        } catch(e) {
-          Browser.hasBlobConstructor = false;
-          console.log("warning: no blob constructor, cannot create blobs with mimetypes");
-        }
-        Browser.BlobBuilder = typeof MozBlobBuilder != "undefined" ? MozBlobBuilder : (typeof WebKitBlobBuilder != "undefined" ? WebKitBlobBuilder : (!Browser.hasBlobConstructor ? console.log("warning: no BlobBuilder") : null));
-        Browser.URLObject = typeof window != "undefined" ? (window.URL ? window.URL : window.webkitURL) : undefined;
-        if (!Module.noImageDecoding && typeof Browser.URLObject === 'undefined') {
-          console.log("warning: Browser does not support creating object URLs. Built-in browser image decoding will not be available.");
-          Module.noImageDecoding = true;
-        }
-  
-        // Support for plugins that can process preloaded files. You can add more of these to
-        // your app by creating and appending to Module.preloadPlugins.
-        //
-        // Each plugin is asked if it can handle a file based on the file's name. If it can,
-        // it is given the file's raw data. When it is done, it calls a callback with the file's
-        // (possibly modified) data. For example, a plugin might decompress a file, or it
-        // might create some side data structure for use later (like an Image element, etc.).
-  
-        var imagePlugin = {};
-        imagePlugin['canHandle'] = function imagePlugin_canHandle(name) {
-          return !Module.noImageDecoding && /\.(jpg|jpeg|png|bmp)$/i.test(name);
-        };
-        imagePlugin['handle'] = function imagePlugin_handle(byteArray, name, onload, onerror) {
-          var b = null;
-          if (Browser.hasBlobConstructor) {
-            try {
-              b = new Blob([byteArray], { type: Browser.getMimetype(name) });
-              if (b.size !== byteArray.length) { // Safari bug #118630
-                // Safari's Blob can only take an ArrayBuffer
-                b = new Blob([(new Uint8Array(byteArray)).buffer], { type: Browser.getMimetype(name) });
-              }
-            } catch(e) {
-              Runtime.warnOnce('Blob constructor present but fails: ' + e + '; falling back to blob builder');
-            }
-          }
-          if (!b) {
-            var bb = new Browser.BlobBuilder();
-            bb.append((new Uint8Array(byteArray)).buffer); // we need to pass a buffer, and must copy the array to get the right data range
-            b = bb.getBlob();
-          }
-          var url = Browser.URLObject.createObjectURL(b);
-          assert(typeof url == 'string', 'createObjectURL must return a url as a string');
-          var img = new Image();
-          img.onload = function img_onload() {
-            assert(img.complete, 'Image ' + name + ' could not be decoded');
-            var canvas = document.createElement('canvas');
-            canvas.width = img.width;
-            canvas.height = img.height;
-            var ctx = canvas.getContext('2d');
-            ctx.drawImage(img, 0, 0);
-            Module["preloadedImages"][name] = canvas;
-            Browser.URLObject.revokeObjectURL(url);
-            if (onload) onload(byteArray);
-          };
-          img.onerror = function img_onerror(event) {
-            console.log('Image ' + url + ' could not be decoded');
-            if (onerror) onerror();
-          };
-          img.src = url;
-        };
-        Module['preloadPlugins'].push(imagePlugin);
-  
-        var audioPlugin = {};
-        audioPlugin['canHandle'] = function audioPlugin_canHandle(name) {
-          return !Module.noAudioDecoding && name.substr(-4) in { '.ogg': 1, '.wav': 1, '.mp3': 1 };
-        };
-        audioPlugin['handle'] = function audioPlugin_handle(byteArray, name, onload, onerror) {
-          var done = false;
-          function finish(audio) {
-            if (done) return;
-            done = true;
-            Module["preloadedAudios"][name] = audio;
-            if (onload) onload(byteArray);
-          }
-          function fail() {
-            if (done) return;
-            done = true;
-            Module["preloadedAudios"][name] = new Audio(); // empty shim
-            if (onerror) onerror();
-          }
-          if (Browser.hasBlobConstructor) {
-            try {
-              var b = new Blob([byteArray], { type: Browser.getMimetype(name) });
-            } catch(e) {
-              return fail();
-            }
-            var url = Browser.URLObject.createObjectURL(b); // XXX we never revoke this!
-            assert(typeof url == 'string', 'createObjectURL must return a url as a string');
-            var audio = new Audio();
-            audio.addEventListener('canplaythrough', function() { finish(audio) }, false); // use addEventListener due to chromium bug 124926
-            audio.onerror = function audio_onerror(event) {
-              if (done) return;
-              console.log('warning: browser could not fully decode audio ' + name + ', trying slower base64 approach');
-              function encode64(data) {
-                var BASE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
-                var PAD = '=';
-                var ret = '';
-                var leftchar = 0;
-                var leftbits = 0;
-                for (var i = 0; i < data.length; i++) {
-                  leftchar = (leftchar << 8) | data[i];
-                  leftbits += 8;
-                  while (leftbits >= 6) {
-                    var curr = (leftchar >> (leftbits-6)) & 0x3f;
-                    leftbits -= 6;
-                    ret += BASE[curr];
-                  }
-                }
-                if (leftbits == 2) {
-                  ret += BASE[(leftchar&3) << 4];
-                  ret += PAD + PAD;
-                } else if (leftbits == 4) {
-                  ret += BASE[(leftchar&0xf) << 2];
-                  ret += PAD;
-                }
-                return ret;
-              }
-              audio.src = 'data:audio/x-' + name.substr(-3) + ';base64,' + encode64(byteArray);
-              finish(audio); // we don't wait for confirmation this worked - but it's worth trying
-            };
-            audio.src = url;
-            // workaround for chrome bug 124926 - we do not always get oncanplaythrough or onerror
-            Browser.safeSetTimeout(function() {
-              finish(audio); // try to use it even though it is not necessarily ready to play
-            }, 10000);
-          } else {
-            return fail();
-          }
-        };
-        Module['preloadPlugins'].push(audioPlugin);
-  
-        // Canvas event setup
-  
-        function pointerLockChange() {
-          Browser.pointerLock = document['pointerLockElement'] === Module['canvas'] ||
-                                document['mozPointerLockElement'] === Module['canvas'] ||
-                                document['webkitPointerLockElement'] === Module['canvas'] ||
-                                document['msPointerLockElement'] === Module['canvas'];
-        }
-        var canvas = Module['canvas'];
-        if (canvas) {
-          // forced aspect ratio can be enabled by defining 'forcedAspectRatio' on Module
-          // Module['forcedAspectRatio'] = 4 / 3;
-          
-          canvas.requestPointerLock = canvas['requestPointerLock'] ||
-                                      canvas['mozRequestPointerLock'] ||
-                                      canvas['webkitRequestPointerLock'] ||
-                                      canvas['msRequestPointerLock'] ||
-                                      function(){};
-          canvas.exitPointerLock = document['exitPointerLock'] ||
-                                   document['mozExitPointerLock'] ||
-                                   document['webkitExitPointerLock'] ||
-                                   document['msExitPointerLock'] ||
-                                   function(){}; // no-op if function does not exist
-          canvas.exitPointerLock = canvas.exitPointerLock.bind(document);
-  
-          document.addEventListener('pointerlockchange', pointerLockChange, false);
-          document.addEventListener('mozpointerlockchange', pointerLockChange, false);
-          document.addEventListener('webkitpointerlockchange', pointerLockChange, false);
-          document.addEventListener('mspointerlockchange', pointerLockChange, false);
-  
-          if (Module['elementPointerLock']) {
-            canvas.addEventListener("click", function(ev) {
-              if (!Browser.pointerLock && Module['canvas'].requestPointerLock) {
-                Module['canvas'].requestPointerLock();
-                ev.preventDefault();
-              }
-            }, false);
-          }
-        }
-      },createContext:function (canvas, useWebGL, setInModule, webGLContextAttributes) {
-        if (useWebGL && Module.ctx && canvas == Module.canvas) return Module.ctx; // no need to recreate GL context if it's already been created for this canvas.
-  
-        var ctx;
-        var contextHandle;
-        if (useWebGL) {
-          // For GLES2/desktop GL compatibility, adjust a few defaults to be different to WebGL defaults, so that they align better with the desktop defaults.
-          var contextAttributes = {
-            antialias: false,
-            alpha: false
-          };
-  
-          if (webGLContextAttributes) {
-            for (var attribute in webGLContextAttributes) {
-              contextAttributes[attribute] = webGLContextAttributes[attribute];
-            }
-          }
-  
-          contextHandle = GL.createContext(canvas, contextAttributes);
-          if (contextHandle) {
-            ctx = GL.getContext(contextHandle).GLctx;
-          }
-        } else {
-          ctx = canvas.getContext('2d');
-        }
-  
-        if (!ctx) return null;
-  
-        if (setInModule) {
-          if (!useWebGL) assert(typeof GLctx === 'undefined', 'cannot set in module if GLctx is used, but we are a non-GL context that would replace it');
-  
-          Module.ctx = ctx;
-          if (useWebGL) GL.makeContextCurrent(contextHandle);
-          Module.useWebGL = useWebGL;
-          Browser.moduleContextCreatedCallbacks.forEach(function(callback) { callback() });
-          Browser.init();
-        }
-        return ctx;
-      },destroyContext:function (canvas, useWebGL, setInModule) {},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function (lockPointer, resizeCanvas, vrDevice) {
-        Browser.lockPointer = lockPointer;
-        Browser.resizeCanvas = resizeCanvas;
-        Browser.vrDevice = vrDevice;
-        if (typeof Browser.lockPointer === 'undefined') Browser.lockPointer = true;
-        if (typeof Browser.resizeCanvas === 'undefined') Browser.resizeCanvas = false;
-        if (typeof Browser.vrDevice === 'undefined') Browser.vrDevice = null;
-  
-        var canvas = Module['canvas'];
-        function fullscreenChange() {
-          Browser.isFullscreen = false;
-          var canvasContainer = canvas.parentNode;
-          if ((document['fullscreenElement'] || document['mozFullScreenElement'] ||
-               document['msFullscreenElement'] || document['webkitFullscreenElement'] ||
-               document['webkitCurrentFullScreenElement']) === canvasContainer) {
-            canvas.exitFullscreen = document['exitFullscreen'] ||
-                                    document['cancelFullScreen'] ||
-                                    document['mozCancelFullScreen'] ||
-                                    document['msExitFullscreen'] ||
-                                    document['webkitCancelFullScreen'] ||
-                                    function() {};
-            canvas.exitFullscreen = canvas.exitFullscreen.bind(document);
-            if (Browser.lockPointer) canvas.requestPointerLock();
-            Browser.isFullscreen = true;
-            if (Browser.resizeCanvas) Browser.setFullscreenCanvasSize();
-          } else {
-            
-            // remove the full screen specific parent of the canvas again to restore the HTML structure from before going full screen
-            canvasContainer.parentNode.insertBefore(canvas, canvasContainer);
-            canvasContainer.parentNode.removeChild(canvasContainer);
-            
-            if (Browser.resizeCanvas) Browser.setWindowedCanvasSize();
-          }
-          if (Module['onFullScreen']) Module['onFullScreen'](Browser.isFullscreen);
-          if (Module['onFullscreen']) Module['onFullscreen'](Browser.isFullscreen);
-          Browser.updateCanvasDimensions(canvas);
-        }
-  
-        if (!Browser.fullscreenHandlersInstalled) {
-          Browser.fullscreenHandlersInstalled = true;
-          document.addEventListener('fullscreenchange', fullscreenChange, false);
-          document.addEventListener('mozfullscreenchange', fullscreenChange, false);
-          document.addEventListener('webkitfullscreenchange', fullscreenChange, false);
-          document.addEventListener('MSFullscreenChange', fullscreenChange, false);
-        }
-  
-        // create a new parent to ensure the canvas has no siblings. this allows browsers to optimize full screen performance when its parent is the full screen root
-        var canvasContainer = document.createElement("div");
-        canvas.parentNode.insertBefore(canvasContainer, canvas);
-        canvasContainer.appendChild(canvas);
-  
-        // use parent of canvas as full screen root to allow aspect ratio correction (Firefox stretches the root to screen size)
-        canvasContainer.requestFullscreen = canvasContainer['requestFullscreen'] ||
-                                            canvasContainer['mozRequestFullScreen'] ||
-                                            canvasContainer['msRequestFullscreen'] ||
-                                           (canvasContainer['webkitRequestFullscreen'] ? function() { canvasContainer['webkitRequestFullscreen'](Element['ALLOW_KEYBOARD_INPUT']) } : null) ||
-                                           (canvasContainer['webkitRequestFullScreen'] ? function() { canvasContainer['webkitRequestFullScreen'](Element['ALLOW_KEYBOARD_INPUT']) } : null);
-  
-        if (vrDevice) {
-          canvasContainer.requestFullscreen({ vrDisplay: vrDevice });
-        } else {
-          canvasContainer.requestFullscreen();
-        }
-      },requestFullScreen:function (lockPointer, resizeCanvas, vrDevice) {
-          Module.printErr('Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead.');
-          Browser.requestFullScreen = function(lockPointer, resizeCanvas, vrDevice) {
-            return Browser.requestFullscreen(lockPointer, resizeCanvas, vrDevice);
-          }
-          return Browser.requestFullscreen(lockPointer, resizeCanvas, vrDevice);
-      },nextRAF:0,fakeRequestAnimationFrame:function (func) {
-        // try to keep 60fps between calls to here
-        var now = Date.now();
-        if (Browser.nextRAF === 0) {
-          Browser.nextRAF = now + 1000/60;
-        } else {
-          while (now + 2 >= Browser.nextRAF) { // fudge a little, to avoid timer jitter causing us to do lots of delay:0
-            Browser.nextRAF += 1000/60;
-          }
-        }
-        var delay = Math.max(Browser.nextRAF - now, 0);
-        setTimeout(func, delay);
-      },requestAnimationFrame:function requestAnimationFrame(func) {
-        if (typeof window === 'undefined') { // Provide fallback to setTimeout if window is undefined (e.g. in Node.js)
-          Browser.fakeRequestAnimationFrame(func);
-        } else {
-          if (!window.requestAnimationFrame) {
-            window.requestAnimationFrame = window['requestAnimationFrame'] ||
-                                           window['mozRequestAnimationFrame'] ||
-                                           window['webkitRequestAnimationFrame'] ||
-                                           window['msRequestAnimationFrame'] ||
-                                           window['oRequestAnimationFrame'] ||
-                                           Browser.fakeRequestAnimationFrame;
-          }
-          window.requestAnimationFrame(func);
-        }
-      },safeCallback:function (func) {
-        return function() {
-          if (!ABORT) return func.apply(null, arguments);
-        };
-      },allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function () {
-        Browser.allowAsyncCallbacks = false;
-      },resumeAsyncCallbacks:function () { // marks future callbacks as ok to execute, and synchronously runs any remaining ones right now
-        Browser.allowAsyncCallbacks = true;
-        if (Browser.queuedAsyncCallbacks.length > 0) {
-          var callbacks = Browser.queuedAsyncCallbacks;
-          Browser.queuedAsyncCallbacks = [];
-          callbacks.forEach(function(func) {
-            func();
-          });
-        }
-      },safeRequestAnimationFrame:function (func) {
-        return Browser.requestAnimationFrame(function() {
-          if (ABORT) return;
-          if (Browser.allowAsyncCallbacks) {
-            func();
-          } else {
-            Browser.queuedAsyncCallbacks.push(func);
-          }
-        });
-      },safeSetTimeout:function (func, timeout) {
-        Module['noExitRuntime'] = true;
-        return setTimeout(function() {
-          if (ABORT) return;
-          if (Browser.allowAsyncCallbacks) {
-            func();
-          } else {
-            Browser.queuedAsyncCallbacks.push(func);
-          }
-        }, timeout);
-      },safeSetInterval:function (func, timeout) {
-        Module['noExitRuntime'] = true;
-        return setInterval(function() {
-          if (ABORT) return;
-          if (Browser.allowAsyncCallbacks) {
-            func();
-          } // drop it on the floor otherwise, next interval will kick in
-        }, timeout);
-      },getMimetype:function (name) {
-        return {
-          'jpg': 'image/jpeg',
-          'jpeg': 'image/jpeg',
-          'png': 'image/png',
-          'bmp': 'image/bmp',
-          'ogg': 'audio/ogg',
-          'wav': 'audio/wav',
-          'mp3': 'audio/mpeg'
-        }[name.substr(name.lastIndexOf('.')+1)];
-      },getUserMedia:function (func) {
-        if(!window.getUserMedia) {
-          window.getUserMedia = navigator['getUserMedia'] ||
-                                navigator['mozGetUserMedia'];
-        }
-        window.getUserMedia(func);
-      },getMovementX:function (event) {
-        return event['movementX'] ||
-               event['mozMovementX'] ||
-               event['webkitMovementX'] ||
-               0;
-      },getMovementY:function (event) {
-        return event['movementY'] ||
-               event['mozMovementY'] ||
-               event['webkitMovementY'] ||
-               0;
-      },getMouseWheelDelta:function (event) {
-        var delta = 0;
-        switch (event.type) {
-          case 'DOMMouseScroll': 
-            delta = event.detail;
-            break;
-          case 'mousewheel': 
-            delta = event.wheelDelta;
-            break;
-          case 'wheel': 
-            delta = event['deltaY'];
-            break;
-          default:
-            throw 'unrecognized mouse wheel event: ' + event.type;
-        }
-        return delta;
-      },mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function (event) { // event should be mousemove, mousedown or mouseup
-        if (Browser.pointerLock) {
-          // When the pointer is locked, calculate the coordinates
-          // based on the movement of the mouse.
-          // Workaround for Firefox bug 764498
-          if (event.type != 'mousemove' &&
-              ('mozMovementX' in event)) {
-            Browser.mouseMovementX = Browser.mouseMovementY = 0;
-          } else {
-            Browser.mouseMovementX = Browser.getMovementX(event);
-            Browser.mouseMovementY = Browser.getMovementY(event);
-          }
-          
-          // check if SDL is available
-          if (typeof SDL != "undefined") {
-          	Browser.mouseX = SDL.mouseX + Browser.mouseMovementX;
-          	Browser.mouseY = SDL.mouseY + Browser.mouseMovementY;
-          } else {
-          	// just add the mouse delta to the current absolut mouse position
-          	// FIXME: ideally this should be clamped against the canvas size and zero
-          	Browser.mouseX += Browser.mouseMovementX;
-          	Browser.mouseY += Browser.mouseMovementY;
-          }        
-        } else {
-          // Otherwise, calculate the movement based on the changes
-          // in the coordinates.
-          var rect = Module["canvas"].getBoundingClientRect();
-          var cw = Module["canvas"].width;
-          var ch = Module["canvas"].height;
-  
-          // Neither .scrollX or .pageXOffset are defined in a spec, but
-          // we prefer .scrollX because it is currently in a spec draft.
-          // (see: http://www.w3.org/TR/2013/WD-cssom-view-20131217/)
-          var scrollX = ((typeof window.scrollX !== 'undefined') ? window.scrollX : window.pageXOffset);
-          var scrollY = ((typeof window.scrollY !== 'undefined') ? window.scrollY : window.pageYOffset);
-          // If this assert lands, it's likely because the browser doesn't support scrollX or pageXOffset
-          // and we have no viable fallback.
-          assert((typeof scrollX !== 'undefined') && (typeof scrollY !== 'undefined'), 'Unable to retrieve scroll position, mouse positions likely broken.');
-  
-          if (event.type === 'touchstart' || event.type === 'touchend' || event.type === 'touchmove') {
-            var touch = event.touch;
-            if (touch === undefined) {
-              return; // the "touch" property is only defined in SDL
-  
-            }
-            var adjustedX = touch.pageX - (scrollX + rect.left);
-            var adjustedY = touch.pageY - (scrollY + rect.top);
-  
-            adjustedX = adjustedX * (cw / rect.width);
-            adjustedY = adjustedY * (ch / rect.height);
-  
-            var coords = { x: adjustedX, y: adjustedY };
-            
-            if (event.type === 'touchstart') {
-              Browser.lastTouches[touch.identifier] = coords;
-              Browser.touches[touch.identifier] = coords;
-            } else if (event.type === 'touchend' || event.type === 'touchmove') {
-              var last = Browser.touches[touch.identifier];
-              if (!last) last = coords;
-              Browser.lastTouches[touch.identifier] = last;
-              Browser.touches[touch.identifier] = coords;
-            } 
-            return;
-          }
-  
-          var x = event.pageX - (scrollX + rect.left);
-          var y = event.pageY - (scrollY + rect.top);
-  
-          // the canvas might be CSS-scaled compared to its backbuffer;
-          // SDL-using content will want mouse coordinates in terms
-          // of backbuffer units.
-          x = x * (cw / rect.width);
-          y = y * (ch / rect.height);
-  
-          Browser.mouseMovementX = x - Browser.mouseX;
-          Browser.mouseMovementY = y - Browser.mouseY;
-          Browser.mouseX = x;
-          Browser.mouseY = y;
-        }
-      },asyncLoad:function (url, onload, onerror, noRunDep) {
-        var dep = !noRunDep ? getUniqueRunDependency('al ' + url) : '';
-        Module['readAsync'](url, function(arrayBuffer) {
-          assert(arrayBuffer, 'Loading data file "' + url + '" failed (no arrayBuffer).');
-          onload(new Uint8Array(arrayBuffer));
-          if (dep) removeRunDependency(dep);
-        }, function(event) {
-          if (onerror) {
-            onerror();
-          } else {
-            throw 'Loading data file "' + url + '" failed.';
-          }
-        });
-        if (dep) addRunDependency(dep);
-      },resizeListeners:[],updateResizeListeners:function () {
-        var canvas = Module['canvas'];
-        Browser.resizeListeners.forEach(function(listener) {
-          listener(canvas.width, canvas.height);
-        });
-      },setCanvasSize:function (width, height, noUpdates) {
-        var canvas = Module['canvas'];
-        Browser.updateCanvasDimensions(canvas, width, height);
-        if (!noUpdates) Browser.updateResizeListeners();
-      },windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function () {
-        // check if SDL is available   
-        if (typeof SDL != "undefined") {
-        	var flags = HEAPU32[((SDL.screen+Runtime.QUANTUM_SIZE*0)>>2)];
-        	flags = flags | 0x00800000; // set SDL_FULLSCREEN flag
-        	HEAP32[((SDL.screen+Runtime.QUANTUM_SIZE*0)>>2)]=flags
-        }
-        Browser.updateResizeListeners();
-      },setWindowedCanvasSize:function () {
-        // check if SDL is available       
-        if (typeof SDL != "undefined") {
-        	var flags = HEAPU32[((SDL.screen+Runtime.QUANTUM_SIZE*0)>>2)];
-        	flags = flags & ~0x00800000; // clear SDL_FULLSCREEN flag
-        	HEAP32[((SDL.screen+Runtime.QUANTUM_SIZE*0)>>2)]=flags
-        }
-        Browser.updateResizeListeners();
-      },updateCanvasDimensions:function (canvas, wNative, hNative) {
-        if (wNative && hNative) {
-          canvas.widthNative = wNative;
-          canvas.heightNative = hNative;
-        } else {
-          wNative = canvas.widthNative;
-          hNative = canvas.heightNative;
-        }
-        var w = wNative;
-        var h = hNative;
-        if (Module['forcedAspectRatio'] && Module['forcedAspectRatio'] > 0) {
-          if (w/h < Module['forcedAspectRatio']) {
-            w = Math.round(h * Module['forcedAspectRatio']);
-          } else {
-            h = Math.round(w / Module['forcedAspectRatio']);
-          }
-        }
-        if (((document['fullscreenElement'] || document['mozFullScreenElement'] ||
-             document['msFullscreenElement'] || document['webkitFullscreenElement'] ||
-             document['webkitCurrentFullScreenElement']) === canvas.parentNode) && (typeof screen != 'undefined')) {
-           var factor = Math.min(screen.width / w, screen.height / h);
-           w = Math.round(w * factor);
-           h = Math.round(h * factor);
-        }
-        if (Browser.resizeCanvas) {
-          if (canvas.width  != w) canvas.width  = w;
-          if (canvas.height != h) canvas.height = h;
-          if (typeof canvas.style != 'undefined') {
-            canvas.style.removeProperty( "width");
-            canvas.style.removeProperty("height");
-          }
-        } else {
-          if (canvas.width  != wNative) canvas.width  = wNative;
-          if (canvas.height != hNative) canvas.height = hNative;
-          if (typeof canvas.style != 'undefined') {
-            if (w != wNative || h != hNative) {
-              canvas.style.setProperty( "width", w + "px", "important");
-              canvas.style.setProperty("height", h + "px", "important");
-            } else {
-              canvas.style.removeProperty( "width");
-              canvas.style.removeProperty("height");
-            }
-          }
-        }
-      },wgetRequests:{},nextWgetRequestHandle:0,getNextWgetRequestHandle:function () {
-        var handle = Browser.nextWgetRequestHandle;
-        Browser.nextWgetRequestHandle++;
-        return handle;
-      }};
-
-  function ___syscall140(which, varargs) {SYSCALLS.varargs = varargs;
-  try {
-   // llseek
-      var stream = SYSCALLS.getStreamFromFD(), offset_high = SYSCALLS.get(), offset_low = SYSCALLS.get(), result = SYSCALLS.get(), whence = SYSCALLS.get();
-      var offset = offset_low;
-      assert(offset_high === 0);
-      FS.llseek(stream, offset, whence);
-      HEAP32[((result)>>2)]=stream.position;
-      if (stream.getdents && offset === 0 && whence === 0) stream.getdents = null; // reset readdir state
-      return 0;
-    } catch (e) {
-    if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e);
-    return -e.errno;
-  }
-  }
-
-  function ___syscall146(which, varargs) {SYSCALLS.varargs = varargs;
-  try {
-   // writev
-      var stream = SYSCALLS.getStreamFromFD(), iov = SYSCALLS.get(), iovcnt = SYSCALLS.get();
-      return SYSCALLS.doWritev(stream, iov, iovcnt);
-    } catch (e) {
-    if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e);
-    return -e.errno;
-  }
-  }
-
-  function ___syscall54(which, varargs) {SYSCALLS.varargs = varargs;
-  try {
-   // ioctl
-      var stream = SYSCALLS.getStreamFromFD(), op = SYSCALLS.get();
-      switch (op) {
-        case 21505: {
-          if (!stream.tty) return -ERRNO_CODES.ENOTTY;
-          return 0;
-        }
-        case 21506: {
-          if (!stream.tty) return -ERRNO_CODES.ENOTTY;
-          return 0; // no-op, not actually adjusting terminal settings
-        }
-        case 21519: {
-          if (!stream.tty) return -ERRNO_CODES.ENOTTY;
-          var argp = SYSCALLS.get();
-          HEAP32[((argp)>>2)]=0;
-          return 0;
-        }
-        case 21520: {
-          if (!stream.tty) return -ERRNO_CODES.ENOTTY;
-          return -ERRNO_CODES.EINVAL; // not supported
-        }
-        case 21531: {
-          var argp = SYSCALLS.get();
-          return FS.ioctl(stream, op, argp);
-        }
-        case 21523: {
-          // TODO: in theory we should write to the winsize struct that gets
-          // passed in, but for now musl doesn't read anything on it
-          if (!stream.tty) return -ERRNO_CODES.ENOTTY;
-          return 0;
-        }
-        default: abort('bad ioctl syscall ' + op);
-      }
-    } catch (e) {
-    if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e);
-    return -e.errno;
-  }
-  }
-
-  function ___syscall221(which, varargs) {SYSCALLS.varargs = varargs;
-  try {
-   // fcntl64
-      var stream = SYSCALLS.getStreamFromFD(), cmd = SYSCALLS.get();
+  
+      var stream = SYSCALLS.getStreamFromFD(fd);
       switch (cmd) {
         case 0: {
           var arg = SYSCALLS.get();
           if (arg < 0) {
-            return -ERRNO_CODES.EINVAL;
+            return -28;
           }
           var newStream;
@@ -5668,5 +5125,6 @@
         }
         case 12:
-        case 12: {
+        /* case 12: Currently in musl F_GETLK64 has same value as F_GETLK, so omitted to avoid duplicate case blocks. If that changes, uncomment this */ {
+          
           var arg = SYSCALLS.get();
           var offset = 0;
@@ -5677,16 +5135,18 @@
         case 13:
         case 14:
-        case 13:
-        case 14:
+        /* case 13: Currently in musl F_SETLK64 has same value as F_SETLK, so omitted to avoid duplicate case blocks. If that changes, uncomment this */
+        /* case 14: Currently in musl F_SETLKW64 has same value as F_SETLKW, so omitted to avoid duplicate case blocks. If that changes, uncomment this */
+          
+          
           return 0; // Pretend that the locking is successful.
         case 16:
         case 8:
-          return -ERRNO_CODES.EINVAL; // These are for sockets. We don't have them fully implemented yet.
+          return -28; // These are for sockets. We don't have them fully implemented yet.
         case 9:
           // musl trusts getown return values, due to a bug where they must be, as they overlap with errors. just return -1 here, so fnctl() returns that, and we set errno ourselves.
-          ___setErrNo(ERRNO_CODES.EINVAL);
+          setErrNo(28);
           return -1;
         default: {
-          return -ERRNO_CODES.EINVAL;
+          return -28;
         }
       }
@@ -5697,9 +5157,52 @@
   }
 
-  function ___syscall145(which, varargs) {SYSCALLS.varargs = varargs;
+  function ___sys_ioctl(fd, op, varargs) {SYSCALLS.varargs = varargs;
   try {
-   // readv
-      var stream = SYSCALLS.getStreamFromFD(), iov = SYSCALLS.get(), iovcnt = SYSCALLS.get();
-      return SYSCALLS.doReadv(stream, iov, iovcnt);
+  
+      var stream = SYSCALLS.getStreamFromFD(fd);
+      switch (op) {
+        case 21509:
+        case 21505: {
+          if (!stream.tty) return -59;
+          return 0;
+        }
+        case 21510:
+        case 21511:
+        case 21512:
+        case 21506:
+        case 21507:
+        case 21508: {
+          if (!stream.tty) return -59;
+          return 0; // no-op, not actually adjusting terminal settings
+        }
+        case 21519: {
+          if (!stream.tty) return -59;
+          var argp = SYSCALLS.get();
+          HEAP32[((argp)>>2)]=0;
+          return 0;
+        }
+        case 21520: {
+          if (!stream.tty) return -59;
+          return -28; // not supported
+        }
+        case 21531: {
+          var argp = SYSCALLS.get();
+          return FS.ioctl(stream, op, argp);
+        }
+        case 21523: {
+          // TODO: in theory we should write to the winsize struct that gets
+          // passed in, but for now musl doesn't read anything on it
+          if (!stream.tty) return -59;
+          return 0;
+        }
+        case 21524: {
+          // TODO: technically, this ioctl call should change the window size.
+          // but, since emscripten doesn't have any concept of a terminal window
+          // yet, we'll just silently throw it away as we do TIOCGWINSZ
+          if (!stream.tty) return -59;
+          return 0;
+        }
+        default: abort('bad ioctl syscall ' + op);
+      }
     } catch (e) {
     if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e);
@@ -5707,9 +5210,131 @@
   }
   }
-FS.staticInit();__ATINIT__.unshift(function() { if (!Module["noFSInit"] && !FS.init.initialized) FS.init() });__ATMAIN__.push(function() { FS.ignorePermissions = false });__ATEXIT__.push(function() { FS.quit() });Module["FS_createFolder"] = FS.createFolder;Module["FS_createPath"] = FS.createPath;Module["FS_createDataFile"] = FS.createDataFile;Module["FS_createPreloadedFile"] = FS.createPreloadedFile;Module["FS_createLazyFile"] = FS.createLazyFile;Module["FS_createLink"] = FS.createLink;Module["FS_createDevice"] = FS.createDevice;Module["FS_unlink"] = FS.unlink;;
-__ATINIT__.unshift(function() { TTY.init() });__ATEXIT__.push(function() { TTY.shutdown() });;
-if (ENVIRONMENT_IS_NODE) { var fs = require("fs"); var NODEJS_PATH = require("path"); NODEFS.staticInit(); };
-Module["requestFullScreen"] = function Module_requestFullScreen(lockPointer, resizeCanvas, vrDevice) { Module.printErr("Module.requestFullScreen is deprecated. Please call Module.requestFullscreen instead."); Module["requestFullScreen"] = Module["requestFullscreen"]; Browser.requestFullScreen(lockPointer, resizeCanvas, vrDevice) };
-  Module["requestFullscreen"] = function Module_requestFullscreen(lockPointer, resizeCanvas, vrDevice) { Browser.requestFullscreen(lockPointer, resizeCanvas, vrDevice) };
+
+  function ___sys_open(path, flags, varargs) {SYSCALLS.varargs = varargs;
+  try {
+  
+      var pathname = SYSCALLS.getStr(path);
+      var mode = SYSCALLS.get();
+      var stream = FS.open(pathname, flags, mode);
+      return stream.fd;
+    } catch (e) {
+    if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e);
+    return -e.errno;
+  }
+  }
+
+  function _abort() {
+      abort();
+    }
+
+  function _emscripten_get_sbrk_ptr() {
+      return 79712;
+    }
+
+  
+  function _longjmp(env, value) {
+      _setThrew(env, value || 1);
+      throw 'longjmp';
+    }function _emscripten_longjmp(env, value) {
+      _longjmp(env, value);
+    }
+
+  function _emscripten_memcpy_big(dest, src, num) {
+      HEAPU8.copyWithin(dest, src, src + num);
+    }
+
+  
+  function _emscripten_get_heap_size() {
+      return HEAPU8.length;
+    }
+  
+  function abortOnCannotGrowMemory(requestedSize) {
+      abort('Cannot enlarge memory arrays to size ' + requestedSize + ' bytes (OOM). Either (1) compile with  -s INITIAL_MEMORY=X  with X higher than the current value ' + HEAP8.length + ', (2) compile with  -s ALLOW_MEMORY_GROWTH=1  which allows increasing the size at runtime, or (3) if you want malloc to return NULL (0) instead of this abort, compile with  -s ABORTING_MALLOC=0 ');
+    }function _emscripten_resize_heap(requestedSize) {
+      requestedSize = requestedSize >>> 0;
+      abortOnCannotGrowMemory(requestedSize);
+    }
+
+  function _exit(status) {
+      // void _exit(int status);
+      // http://pubs.opengroup.org/onlinepubs/000095399/functions/exit.html
+      exit(status);
+    }
+
+  function _fd_close(fd) {try {
+  
+      var stream = SYSCALLS.getStreamFromFD(fd);
+      FS.close(stream);
+      return 0;
+    } catch (e) {
+    if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e);
+    return e.errno;
+  }
+  }
+
+  function _fd_read(fd, iov, iovcnt, pnum) {try {
+  
+      var stream = SYSCALLS.getStreamFromFD(fd);
+      var num = SYSCALLS.doReadv(stream, iov, iovcnt);
+      HEAP32[((pnum)>>2)]=num
+      return 0;
+    } catch (e) {
+    if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e);
+    return e.errno;
+  }
+  }
+
+  function _fd_seek(fd, offset_low, offset_high, whence, newOffset) {try {
+  
+      
+      var stream = SYSCALLS.getStreamFromFD(fd);
+      var HIGH_OFFSET = 0x100000000; // 2^32
+      // use an unsigned operator on low and shift high by 32-bits
+      var offset = offset_high * HIGH_OFFSET + (offset_low >>> 0);
+  
+      var DOUBLE_LIMIT = 0x20000000000000; // 2^53
+      // we also check for equality since DOUBLE_LIMIT + 1 == DOUBLE_LIMIT
+      if (offset <= -DOUBLE_LIMIT || offset >= DOUBLE_LIMIT) {
+        return -61;
+      }
+  
+      FS.llseek(stream, offset, whence);
+      (tempI64 = [stream.position>>>0,(tempDouble=stream.position,(+(Math_abs(tempDouble))) >= 1.0 ? (tempDouble > 0.0 ? ((Math_min((+(Math_floor((tempDouble)/4294967296.0))), 4294967295.0))|0)>>>0 : (~~((+(Math_ceil((tempDouble - +(((~~(tempDouble)))>>>0))/4294967296.0)))))>>>0) : 0)],HEAP32[((newOffset)>>2)]=tempI64[0],HEAP32[(((newOffset)+(4))>>2)]=tempI64[1]);
+      if (stream.getdents && offset === 0 && whence === 0) stream.getdents = null; // reset readdir state
+      return 0;
+    } catch (e) {
+    if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e);
+    return e.errno;
+  }
+  }
+
+  function _fd_write(fd, iov, iovcnt, pnum) {try {
+  
+      var stream = SYSCALLS.getStreamFromFD(fd);
+      var num = SYSCALLS.doWritev(stream, iov, iovcnt);
+      HEAP32[((pnum)>>2)]=num
+      return 0;
+    } catch (e) {
+    if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e);
+    return e.errno;
+  }
+  }
+
+  function _getTempRet0() {
+      return (getTempRet0() | 0);
+    }
+
+  
+  function _round(d) {
+      d = +d;
+      return d >= +0 ? +Math_floor(d + +0.5) : +Math_ceil(d - +0.5);
+    }
+
+  function _setTempRet0($i) {
+      setTempRet0(($i) | 0);
+    }
+
+Module["requestFullscreen"] = function Module_requestFullscreen(lockPointer, resizeCanvas) { Browser.requestFullscreen(lockPointer, resizeCanvas) };
+  Module["requestFullScreen"] = function Module_requestFullScreen() { Browser.requestFullScreen() };
   Module["requestAnimationFrame"] = function Module_requestAnimationFrame(func) { Browser.requestAnimationFrame(func) };
   Module["setCanvasSize"] = function Module_setCanvasSize(width, height, noUpdates) { Browser.setCanvasSize(width, height, noUpdates) };
@@ -5718,105502 +5343,290 @@
   Module["getUserMedia"] = function Module_getUserMedia() { Browser.getUserMedia() }
   Module["createContext"] = function Module_createContext(canvas, useWebGL, setInModule, webGLContextAttributes) { return Browser.createContext(canvas, useWebGL, setInModule, webGLContextAttributes) };
-if (ENVIRONMENT_IS_NODE) {
-    _emscripten_get_now = function _emscripten_get_now_actual() {
-      var t = process['hrtime']();
-      return t[0] * 1e3 + t[1] / 1e6;
-    };
-  } else if (typeof dateNow !== 'undefined') {
-    _emscripten_get_now = dateNow;
-  } else if (typeof self === 'object' && self['performance'] && typeof self['performance']['now'] === 'function') {
-    _emscripten_get_now = function() { return self['performance']['now'](); };
-  } else if (typeof performance === 'object' && typeof performance['now'] === 'function') {
-    _emscripten_get_now = function() { return performance['now'](); };
-  } else {
-    _emscripten_get_now = Date.now;
+var FSNode = /** @constructor */ function(parent, name, mode, rdev) {
+    if (!parent) {
+      parent = this;  // root node sets parent to itself
+    }
+    this.parent = parent;
+    this.mount = parent.mount;
+    this.mounted = null;
+    this.id = FS.nextInode++;
+    this.name = name;
+    this.mode = mode;
+    this.node_ops = {};
+    this.stream_ops = {};
+    this.rdev = rdev;
   };
-DYNAMICTOP_PTR = allocate(1, "i32", ALLOC_STATIC);
-
-STACK_BASE = STACKTOP = Runtime.alignMemory(STATICTOP);
-
-STACK_MAX = STACK_BASE + TOTAL_STACK;
-
-DYNAMIC_BASE = Runtime.alignMemory(STACK_MAX);
-
-HEAP32[DYNAMICTOP_PTR>>2] = DYNAMIC_BASE;
-
-staticSealed = true; // seal the static portion of memory
-
-assert(DYNAMIC_BASE < TOTAL_MEMORY, "TOTAL_MEMORY not big enough for stack");
-
-
-
-function nullFunc_iiii(x) { Module["printErr"]("Invalid function pointer called with signature 'iiii'. Perhaps this is an invalid value (e.g. caused by calling a virtual method on a NULL pointer)? Or calling a function with an incorrect type, which will fail? (it is worth building your source files with -Werror (warnings are errors), as warnings can indicate undefined behavior which can cause this)");  Module["printErr"]("Build with ASSERTIONS=2 for more info.");abort(x) }
-
-function nullFunc_viiiiiii(x) { Module["printErr"]("Invalid function pointer called with signature 'viiiiiii'. Perhaps this is an invalid value (e.g. caused by calling a virtual method on a NULL pointer)? Or calling a function with an incorrect type, which will fail? (it is worth building your source files with -Werror (warnings are errors), as warnings can indicate undefined behavior which can cause this)");  Module["printErr"]("Build with ASSERTIONS=2 for more info.");abort(x) }
-
-function nullFunc_viiiii(x) { Module["printErr"]("Invalid function pointer called with signature 'viiiii'. Perhaps this is an invalid value (e.g. caused by calling a virtual method on a NULL pointer)? Or calling a function with an incorrect type, which will fail? (it is worth building your source files with -Werror (warnings are errors), as warnings can indicate undefined behavior which can cause this)");  Module["printErr"]("Build with ASSERTIONS=2 for more info.");abort(x) }
-
-function nullFunc_vi(x) { Module["printErr"]("Invalid function pointer called with signature 'vi'. Perhaps this is an invalid value (e.g. caused by calling a virtual method on a NULL pointer)? Or calling a function with an incorrect type, which will fail? (it is worth building your source files with -Werror (warnings are errors), as warnings can indicate undefined behavior which can cause this)");  Module["printErr"]("Build with ASSERTIONS=2 for more info.");abort(x) }
-
-function nullFunc_vii(x) { Module["printErr"]("Invalid function pointer called with signature 'vii'. Perhaps this is an invalid value (e.g. caused by calling a virtual method on a NULL pointer)? Or calling a function with an incorrect type, which will fail? (it is worth building your source files with -Werror (warnings are errors), as warnings can indicate undefined behavior which can cause this)");  Module["printErr"]("Build with ASSERTIONS=2 for more info.");abort(x) }
-
-function nullFunc_ii(x) { Module["printErr"]("Invalid function pointer called with signature 'ii'. Perhaps this is an invalid value (e.g. caused by calling a virtual method on a NULL pointer)? Or calling a function with an incorrect type, which will fail? (it is worth building your source files with -Werror (warnings are errors), as warnings can indicate undefined behavior which can cause this)");  Module["printErr"]("Build with ASSERTIONS=2 for more info.");abort(x) }
-
-function nullFunc_viii(x) { Module["printErr"]("Invalid function pointer called with signature 'viii'. Perhaps this is an invalid value (e.g. caused by calling a virtual method on a NULL pointer)? Or calling a function with an incorrect type, which will fail? (it is worth building your source files with -Werror (warnings are errors), as warnings can indicate undefined behavior which can cause this)");  Module["printErr"]("Build with ASSERTIONS=2 for more info.");abort(x) }
-
-function nullFunc_iiiii(x) { Module["printErr"]("Invalid function pointer called with signature 'iiiii'. Perhaps this is an invalid value (e.g. caused by calling a virtual method on a NULL pointer)? Or calling a function with an incorrect type, which will fail? (it is worth building your source files with -Werror (warnings are errors), as warnings can indicate undefined behavior which can cause this)");  Module["printErr"]("Build with ASSERTIONS=2 for more info.");abort(x) }
-
-function nullFunc_viiiiii(x) { Module["printErr"]("Invalid function pointer called with signature 'viiiiii'. Perhaps this is an invalid value (e.g. caused by calling a virtual method on a NULL pointer)? Or calling a function with an incorrect type, which will fail? (it is worth building your source files with -Werror (warnings are errors), as warnings can indicate undefined behavior which can cause this)");  Module["printErr"]("Build with ASSERTIONS=2 for more info.");abort(x) }
-
-function nullFunc_iii(x) { Module["printErr"]("Invalid function pointer called with signature 'iii'. Perhaps this is an invalid value (e.g. caused by calling a virtual method on a NULL pointer)? Or calling a function with an incorrect type, which will fail? (it is worth building your source files with -Werror (warnings are errors), as warnings can indicate undefined behavior which can cause this)");  Module["printErr"]("Build with ASSERTIONS=2 for more info.");abort(x) }
-
-function nullFunc_viiii(x) { Module["printErr"]("Invalid function pointer called with signature 'viiii'. Perhaps this is an invalid value (e.g. caused by calling a virtual method on a NULL pointer)? Or calling a function with an incorrect type, which will fail? (it is worth building your source files with -Werror (warnings are errors), as warnings can indicate undefined behavior which can cause this)");  Module["printErr"]("Build with ASSERTIONS=2 for more info.");abort(x) }
+  var readMode = 292/*292*/ | 73/*73*/;
+  var writeMode = 146/*146*/;
+  Object.defineProperties(FSNode.prototype, {
+   read: {
+    get: /** @this{FSNode} */function() {
+     return (this.mode & readMode) === readMode;
+    },
+    set: /** @this{FSNode} */function(val) {
+     val ? this.mode |= readMode : this.mode &= ~readMode;
+    }
+   },
+   write: {
+    get: /** @this{FSNode} */function() {
+     return (this.mode & writeMode) === writeMode;
+    },
+    set: /** @this{FSNode} */function(val) {
+     val ? this.mode |= writeMode : this.mode &= ~writeMode;
+    }
+   },
+   isFolder: {
+    get: /** @this{FSNode} */function() {
+     return FS.isDir(this.mode);
+    }
+   },
+   isDevice: {
+    get: /** @this{FSNode} */function() {
+     return FS.isChrdev(this.mode);
+    }
+   }
+  });
+  FS.FSNode = FSNode;
+  FS.staticInit();Module["FS_createFolder"] = FS.createFolder;Module["FS_createPath"] = FS.createPath;Module["FS_createDataFile"] = FS.createDataFile;Module["FS_createPreloadedFile"] = FS.createPreloadedFile;Module["FS_createLazyFile"] = FS.createLazyFile;Module["FS_createLink"] = FS.createLink;Module["FS_createDevice"] = FS.createDevice;Module["FS_unlink"] = FS.unlink;;
+var ASSERTIONS = true;
+
+
+
+/** @type {function(string, boolean=, number=)} */
+function intArrayFromString(stringy, dontAddNull, length) {
+  var len = length > 0 ? length : lengthBytesUTF8(stringy)+1;
+  var u8array = new Array(len);
+  var numBytesWritten = stringToUTF8Array(stringy, u8array, 0, u8array.length);
+  if (dontAddNull) u8array.length = numBytesWritten;
+  return u8array;
+}
+
+function intArrayToString(array) {
+  var ret = [];
+  for (var i = 0; i < array.length; i++) {
+    var chr = array[i];
+    if (chr > 0xFF) {
+      if (ASSERTIONS) {
+        assert(false, 'Character code ' + chr + ' (' + String.fromCharCode(chr) + ')  at offset ' + i + ' not in 0x00-0xFF.');
+      }
+      chr &= 0xFF;
+    }
+    ret.push(String.fromCharCode(chr));
+  }
+  return ret.join('');
+}
+
+
+// ASM_LIBRARY EXTERN PRIMITIVES: Math_floor,Math_ceil
+
+var asmGlobalArg = {};
+var asmLibraryArg = { "__handle_stack_overflow": ___handle_stack_overflow, "__sys_fcntl64": ___sys_fcntl64, "__sys_ioctl": ___sys_ioctl, "__sys_open": ___sys_open, "abort": _abort, "emscripten_get_sbrk_ptr": _emscripten_get_sbrk_ptr, "emscripten_longjmp": _emscripten_longjmp, "emscripten_memcpy_big": _emscripten_memcpy_big, "emscripten_resize_heap": _emscripten_resize_heap, "exit": _exit, "fd_close": _fd_close, "fd_read": _fd_read, "fd_seek": _fd_seek, "fd_write": _fd_write, "getTempRet0": _getTempRet0, "invoke_ii": invoke_ii, "invoke_iii": invoke_iii, "invoke_iiii": invoke_iiii, "invoke_iiiii": invoke_iiiii, "invoke_vi": invoke_vi, "invoke_vii": invoke_vii, "invoke_viii": invoke_viii, "invoke_viiii": invoke_viiii, "invoke_viiiii": invoke_viiiii, "invoke_viiiiii": invoke_viiiiii, "invoke_viiiiiii": invoke_viiiiiii, "memory": wasmMemory, "round": _round, "setTempRet0": _setTempRet0, "table": wasmTable };
+var asm = createWasm();
+/** @type {function(...*):?} */
+var ___wasm_call_ctors = Module["___wasm_call_ctors"] = createExportWrapper("__wasm_call_ctors");
+
+/** @type {function(...*):?} */
+var _main = Module["_main"] = createExportWrapper("main");
+
+/** @type {function(...*):?} */
+var ___errno_location = Module["___errno_location"] = createExportWrapper("__errno_location");
+
+/** @type {function(...*):?} */
+var _malloc = Module["_malloc"] = createExportWrapper("malloc");
+
+/** @type {function(...*):?} */
+var _testSetjmp = Module["_testSetjmp"] = createExportWrapper("testSetjmp");
+
+/** @type {function(...*):?} */
+var _saveSetjmp = Module["_saveSetjmp"] = createExportWrapper("saveSetjmp");
+
+/** @type {function(...*):?} */
+var _free = Module["_free"] = createExportWrapper("free");
+
+/** @type {function(...*):?} */
+var _realloc = Module["_realloc"] = createExportWrapper("realloc");
+
+/** @type {function(...*):?} */
+var _fflush = Module["_fflush"] = createExportWrapper("fflush");
+
+/** @type {function(...*):?} */
+var _setThrew = Module["_setThrew"] = createExportWrapper("setThrew");
+
+/** @type {function(...*):?} */
+var stackSave = Module["stackSave"] = createExportWrapper("stackSave");
+
+/** @type {function(...*):?} */
+var stackRestore = Module["stackRestore"] = createExportWrapper("stackRestore");
+
+/** @type {function(...*):?} */
+var stackAlloc = Module["stackAlloc"] = createExportWrapper("stackAlloc");
+
+/** @type {function(...*):?} */
+var dynCall_vi = Module["dynCall_vi"] = createExportWrapper("dynCall_vi");
+
+/** @type {function(...*):?} */
+var dynCall_vii = Module["dynCall_vii"] = createExportWrapper("dynCall_vii");
+
+/** @type {function(...*):?} */
+var dynCall_viii = Module["dynCall_viii"] = createExportWrapper("dynCall_viii");
+
+/** @type {function(...*):?} */
+var dynCall_viiii = Module["dynCall_viiii"] = createExportWrapper("dynCall_viiii");
+
+/** @type {function(...*):?} */
+var dynCall_viiiii = Module["dynCall_viiiii"] = createExportWrapper("dynCall_viiiii");
+
+/** @type {function(...*):?} */
+var dynCall_viiiiii = Module["dynCall_viiiiii"] = createExportWrapper("dynCall_viiiiii");
+
+/** @type {function(...*):?} */
+var dynCall_viiiiiii = Module["dynCall_viiiiiii"] = createExportWrapper("dynCall_viiiiiii");
+
+/** @type {function(...*):?} */
+var dynCall_ii = Module["dynCall_ii"] = createExportWrapper("dynCall_ii");
+
+/** @type {function(...*):?} */
+var dynCall_iii = Module["dynCall_iii"] = createExportWrapper("dynCall_iii");
+
+/** @type {function(...*):?} */
+var dynCall_iiii = Module["dynCall_iiii"] = createExportWrapper("dynCall_iiii");
+
+/** @type {function(...*):?} */
+var dynCall_iiiii = Module["dynCall_iiiii"] = createExportWrapper("dynCall_iiiii");
+
+/** @type {function(...*):?} */
+var ___set_stack_limit = Module["___set_stack_limit"] = createExportWrapper("__set_stack_limit");
+
+/** @type {function(...*):?} */
+var __growWasmMemory = Module["__growWasmMemory"] = createExportWrapper("__growWasmMemory");
+
+/** @type {function(...*):?} */
+var dynCall_jiji = Module["dynCall_jiji"] = createExportWrapper("dynCall_jiji");
+
+/** @type {function(...*):?} */
+var dynCall_iidiiii = Module["dynCall_iidiiii"] = createExportWrapper("dynCall_iidiiii");
+
+
+function invoke_vi(index,a1) {
+  var sp = stackSave();
+  try {
+    dynCall_vi(index,a1);
+  } catch(e) {
+    stackRestore(sp);
+    if (e !== e+0 && e !== 'longjmp') throw e;
+    _setThrew(1, 0);
+  }
+}
+
+function invoke_vii(index,a1,a2) {
+  var sp = stackSave();
+  try {
+    dynCall_vii(index,a1,a2);
+  } catch(e) {
+    stackRestore(sp);
+    if (e !== e+0 && e !== 'longjmp') throw e;
+    _setThrew(1, 0);
+  }
+}
 
 function invoke_iiii(index,a1,a2,a3) {
+  var sp = stackSave();
   try {
-    return Module["dynCall_iiii"](index,a1,a2,a3);
+    return dynCall_iiii(index,a1,a2,a3);
   } catch(e) {
-    if (typeof e !== 'number' && e !== 'longjmp') throw e;
-    Module["setThrew"](1, 0);
+    stackRestore(sp);
+    if (e !== e+0 && e !== 'longjmp') throw e;
+    _setThrew(1, 0);
+  }
+}
+
+function invoke_iii(index,a1,a2) {
+  var sp = stackSave();
+  try {
+    return dynCall_iii(index,a1,a2);
+  } catch(e) {
+    stackRestore(sp);
+    if (e !== e+0 && e !== 'longjmp') throw e;
+    _setThrew(1, 0);
+  }
+}
+
+function invoke_viiii(index,a1,a2,a3,a4) {
+  var sp = stackSave();
+  try {
+    dynCall_viiii(index,a1,a2,a3,a4);
+  } catch(e) {
+    stackRestore(sp);
+    if (e !== e+0 && e !== 'longjmp') throw e;
+    _setThrew(1, 0);
+  }
+}
+
+function invoke_viiiii(index,a1,a2,a3,a4,a5) {
+  var sp = stackSave();
+  try {
+    dynCall_viiiii(index,a1,a2,a3,a4,a5);
+  } catch(e) {
+    stackRestore(sp);
+    if (e !== e+0 && e !== 'longjmp') throw e;
+    _setThrew(1, 0);
+  }
+}
+
+function invoke_viii(index,a1,a2,a3) {
+  var sp = stackSave();
+  try {
+    dynCall_viii(index,a1,a2,a3);
+  } catch(e) {
+    stackRestore(sp);
+    if (e !== e+0 && e !== 'longjmp') throw e;
+    _setThrew(1, 0);
   }
 }
 
 function invoke_viiiiiii(index,a1,a2,a3,a4,a5,a6,a7) {
+  var sp = stackSave();
   try {
-    Module["dynCall_viiiiiii"](index,a1,a2,a3,a4,a5,a6,a7);
+    dynCall_viiiiiii(index,a1,a2,a3,a4,a5,a6,a7);
   } catch(e) {
-    if (typeof e !== 'number' && e !== 'longjmp') throw e;
-    Module["setThrew"](1, 0);
-  }
-}
-
-function invoke_viiiii(index,a1,a2,a3,a4,a5) {
+    stackRestore(sp);
+    if (e !== e+0 && e !== 'longjmp') throw e;
+    _setThrew(1, 0);
+  }
+}
+
+function invoke_iiiii(index,a1,a2,a3,a4) {
+  var sp = stackSave();
   try {
-    Module["dynCall_viiiii"](index,a1,a2,a3,a4,a5);
+    return dynCall_iiiii(index,a1,a2,a3,a4);
   } catch(e) {
-    if (typeof e !== 'number' && e !== 'longjmp') throw e;
-    Module["setThrew"](1, 0);
-  }
-}
-
-function invoke_vi(index,a1) {
+    stackRestore(sp);
+    if (e !== e+0 && e !== 'longjmp') throw e;
+    _setThrew(1, 0);
+  }
+}
+
+function invoke_viiiiii(index,a1,a2,a3,a4,a5,a6) {
+  var sp = stackSave();
   try {
-    Module["dynCall_vi"](index,a1);
+    dynCall_viiiiii(index,a1,a2,a3,a4,a5,a6);
   } catch(e) {
-    if (typeof e !== 'number' && e !== 'longjmp') throw e;
-    Module["setThrew"](1, 0);
-  }
-}
-
-function invoke_vii(index,a1,a2) {
+    stackRestore(sp);
+    if (e !== e+0 && e !== 'longjmp') throw e;
+    _setThrew(1, 0);
+  }
+}
+
+function invoke_ii(index,a1) {
+  var sp = stackSave();
   try {
-    Module["dynCall_vii"](index,a1,a2);
+    return dynCall_ii(index,a1);
   } catch(e) {
-    if (typeof e !== 'number' && e !== 'longjmp') throw e;
-    Module["setThrew"](1, 0);
-  }
-}
-
-function invoke_ii(index,a1) {
-  try {
-    return Module["dynCall_ii"](index,a1);
-  } catch(e) {
-    if (typeof e !== 'number' && e !== 'longjmp') throw e;
-    Module["setThrew"](1, 0);
-  }
-}
-
-function invoke_viii(index,a1,a2,a3) {
-  try {
-    Module["dynCall_viii"](index,a1,a2,a3);
-  } catch(e) {
-    if (typeof e !== 'number' && e !== 'longjmp') throw e;
-    Module["setThrew"](1, 0);
-  }
-}
-
-function invoke_iiiii(index,a1,a2,a3,a4) {
-  try {
-    return Module["dynCall_iiiii"](index,a1,a2,a3,a4);
-  } catch(e) {
-    if (typeof e !== 'number' && e !== 'longjmp') throw e;
-    Module["setThrew"](1, 0);
-  }
-}
-
-function invoke_viiiiii(index,a1,a2,a3,a4,a5,a6) {
-  try {
-    Module["dynCall_viiiiii"](index,a1,a2,a3,a4,a5,a6);
-  } catch(e) {
-    if (typeof e !== 'number' && e !== 'longjmp') throw e;
-    Module["setThrew"](1, 0);
-  }
-}
-
-function invoke_iii(index,a1,a2) {
-  try {
-    return Module["dynCall_iii"](index,a1,a2);
-  } catch(e) {
-    if (typeof e !== 'number' && e !== 'longjmp') throw e;
-    Module["setThrew"](1, 0);
-  }
-}
-
-function invoke_viiii(index,a1,a2,a3,a4) {
-  try {
-    Module["dynCall_viiii"](index,a1,a2,a3,a4);
-  } catch(e) {
-    if (typeof e !== 'number' && e !== 'longjmp') throw e;
-    Module["setThrew"](1, 0);
-  }
-}
-
-Module.asmGlobalArg = { "Math": Math, "Int8Array": Int8Array, "Int16Array": Int16Array, "Int32Array": Int32Array, "Uint8Array": Uint8Array, "Uint16Array": Uint16Array, "Uint32Array": Uint32Array, "Float32Array": Float32Array, "Float64Array": Float64Array, "NaN": NaN, "Infinity": Infinity };
-
-Module.asmLibraryArg = { "abort": abort, "assert": assert, "enlargeMemory": enlargeMemory, "getTotalMemory": getTotalMemory, "abortOnCannotGrowMemory": abortOnCannotGrowMemory, "abortStackOverflow": abortStackOverflow, "nullFunc_iiii": nullFunc_iiii, "nullFunc_viiiiiii": nullFunc_viiiiiii, "nullFunc_viiiii": nullFunc_viiiii, "nullFunc_vi": nullFunc_vi, "nullFunc_vii": nullFunc_vii, "nullFunc_ii": nullFunc_ii, "nullFunc_viii": nullFunc_viii, "nullFunc_iiiii": nullFunc_iiiii, "nullFunc_viiiiii": nullFunc_viiiiii, "nullFunc_iii": nullFunc_iii, "nullFunc_viiii": nullFunc_viiii, "invoke_iiii": invoke_iiii, "invoke_viiiiiii": invoke_viiiiiii, "invoke_viiiii": invoke_viiiii, "invoke_vi": invoke_vi, "invoke_vii": invoke_vii, "invoke_ii": invoke_ii, "invoke_viii": invoke_viii, "invoke_iiiii": invoke_iiiii, "invoke_viiiiii": invoke_viiiiii, "invoke_iii": invoke_iii, "invoke_viiii": invoke_viiii, "___syscall221": ___syscall221, "_longjmp": _longjmp, "___syscall146": ___syscall146, "_llvm_pow_f64": _llvm_pow_f64, "_emscripten_set_main_loop": _emscripten_set_main_loop, "___lock": ___lock, "___syscall6": ___syscall6, "___syscall5": ___syscall5, "_abort": _abort, "___syscall140": ___syscall140, "_emscripten_longjmp": _emscripten_longjmp, "___setErrNo": ___setErrNo, "_emscripten_memcpy_big": _emscripten_memcpy_big, "___syscall54": ___syscall54, "___unlock": ___unlock, "_exit": _exit, "_emscripten_set_main_loop_timing": _emscripten_set_main_loop_timing, "__exit": __exit, "___syscall145": ___syscall145, "_emscripten_get_now": _emscripten_get_now, "DYNAMICTOP_PTR": DYNAMICTOP_PTR, "tempDoublePtr": tempDoublePtr, "ABORT": ABORT, "STACKTOP": STACKTOP, "STACK_MAX": STACK_MAX, "cttz_i8": cttz_i8 };
-// EMSCRIPTEN_START_ASM
-var asm = (function(global, env, buffer) {
-  'almost asm';
-  
-  
-  var HEAP8 = new global.Int8Array(buffer);
-  var HEAP16 = new global.Int16Array(buffer);
-  var HEAP32 = new global.Int32Array(buffer);
-  var HEAPU8 = new global.Uint8Array(buffer);
-  var HEAPU16 = new global.Uint16Array(buffer);
-  var HEAPU32 = new global.Uint32Array(buffer);
-  var HEAPF32 = new global.Float32Array(buffer);
-  var HEAPF64 = new global.Float64Array(buffer);
-
-
-  var DYNAMICTOP_PTR=env.DYNAMICTOP_PTR|0;
-  var tempDoublePtr=env.tempDoublePtr|0;
-  var ABORT=env.ABORT|0;
-  var STACKTOP=env.STACKTOP|0;
-  var STACK_MAX=env.STACK_MAX|0;
-  var cttz_i8=env.cttz_i8|0;
-
-  var __THREW__ = 0;
-  var threwValue = 0;
-  var setjmpId = 0;
-  var undef = 0;
-  var nan = global.NaN, inf = global.Infinity;
-  var tempInt = 0, tempBigInt = 0, tempBigIntP = 0, tempBigIntS = 0, tempBigIntR = 0.0, tempBigIntI = 0, tempBigIntD = 0, tempValue = 0, tempDouble = 0.0;
-  var tempRet0 = 0;
-
-  var Math_floor=global.Math.floor;
-  var Math_abs=global.Math.abs;
-  var Math_sqrt=global.Math.sqrt;
-  var Math_pow=global.Math.pow;
-  var Math_cos=global.Math.cos;
-  var Math_sin=global.Math.sin;
-  var Math_tan=global.Math.tan;
-  var Math_acos=global.Math.acos;
-  var Math_asin=global.Math.asin;
-  var Math_atan=global.Math.atan;
-  var Math_atan2=global.Math.atan2;
-  var Math_exp=global.Math.exp;
-  var Math_log=global.Math.log;
-  var Math_ceil=global.Math.ceil;
-  var Math_imul=global.Math.imul;
-  var Math_min=global.Math.min;
-  var Math_max=global.Math.max;
-  var Math_clz32=global.Math.clz32;
-  var abort=env.abort;
-  var assert=env.assert;
-  var enlargeMemory=env.enlargeMemory;
-  var getTotalMemory=env.getTotalMemory;
-  var abortOnCannotGrowMemory=env.abortOnCannotGrowMemory;
-  var abortStackOverflow=env.abortStackOverflow;
-  var nullFunc_iiii=env.nullFunc_iiii;
-  var nullFunc_viiiiiii=env.nullFunc_viiiiiii;
-  var nullFunc_viiiii=env.nullFunc_viiiii;
-  var nullFunc_vi=env.nullFunc_vi;
-  var nullFunc_vii=env.nullFunc_vii;
-  var nullFunc_ii=env.nullFunc_ii;
-  var nullFunc_viii=env.nullFunc_viii;
-  var nullFunc_iiiii=env.nullFunc_iiiii;
-  var nullFunc_viiiiii=env.nullFunc_viiiiii;
-  var nullFunc_iii=env.nullFunc_iii;
-  var nullFunc_viiii=env.nullFunc_viiii;
-  var invoke_iiii=env.invoke_iiii;
-  var invoke_viiiiiii=env.invoke_viiiiiii;
-  var invoke_viiiii=env.invoke_viiiii;
-  var invoke_vi=env.invoke_vi;
-  var invoke_vii=env.invoke_vii;
-  var invoke_ii=env.invoke_ii;
-  var invoke_viii=env.invoke_viii;
-  var invoke_iiiii=env.invoke_iiiii;
-  var invoke_viiiiii=env.invoke_viiiiii;
-  var invoke_iii=env.invoke_iii;
-  var invoke_viiii=env.invoke_viiii;
-  var ___syscall221=env.___syscall221;
-  var _longjmp=env._longjmp;
-  var ___syscall146=env.___syscall146;
-  var _llvm_pow_f64=env._llvm_pow_f64;
-  var _emscripten_set_main_loop=env._emscripten_set_main_loop;
-  var ___lock=env.___lock;
-  var ___syscall6=env.___syscall6;
-  var ___syscall5=env.___syscall5;
-  var _abort=env._abort;
-  var ___syscall140=env.___syscall140;
-  var _emscripten_longjmp=env._emscripten_longjmp;
-  var ___setErrNo=env.___setErrNo;
-  var _emscripten_memcpy_big=env._emscripten_memcpy_big;
-  var ___syscall54=env.___syscall54;
-  var ___unlock=env.___unlock;
-  var _exit=env._exit;
-  var _emscripten_set_main_loop_timing=env._emscripten_set_main_loop_timing;
-  var __exit=env.__exit;
-  var ___syscall145=env.___syscall145;
-  var _emscripten_get_now=env._emscripten_get_now;
-  var tempFloat = 0.0;
-
-// EMSCRIPTEN_START_FUNCS
-
-function stackAlloc(size) {
-  size = size|0;
-  var ret = 0;
-  ret = STACKTOP;
-  STACKTOP = (STACKTOP + size)|0;
-  STACKTOP = (STACKTOP + 15)&-16;
-  if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(size|0);
-
-  return ret|0;
-}
-function stackSave() {
-  return STACKTOP|0;
-}
-function stackRestore(top) {
-  top = top|0;
-  STACKTOP = top;
-}
-function establishStackSpace(stackBase, stackMax) {
-  stackBase = stackBase|0;
-  stackMax = stackMax|0;
-  STACKTOP = stackBase;
-  STACK_MAX = stackMax;
-}
-
-function setThrew(threw, value) {
-  threw = threw|0;
-  value = value|0;
-  if ((__THREW__|0) == 0) {
-    __THREW__ = threw;
-    threwValue = value;
-  }
-}
-
-function setTempRet0(value) {
-  value = value|0;
-  tempRet0 = value;
-}
-function getTempRet0() {
-  return tempRet0|0;
-}
-
-function _main($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0;
- var $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0;
- var $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0;
- var $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0;
- var $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0;
- var $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $vararg_buffer = 0, $vararg_buffer1 = 0, $vararg_buffer12 = 0, $vararg_buffer4 = 0, $vararg_buffer8 = 0, $vararg_ptr11 = 0, $vararg_ptr7 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 112|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(112|0);
- $vararg_buffer12 = sp + 32|0;
- $vararg_buffer8 = sp + 24|0;
- $vararg_buffer4 = sp + 16|0;
- $vararg_buffer1 = sp + 8|0;
- $vararg_buffer = sp;
- $8 = sp + 60|0;
- $10 = sp + 48|0;
- $11 = sp + 40|0;
- $2 = 0;
- $3 = $0;
- $4 = $1;
- $12 = (_mrb_open()|0);
- $5 = $12;
- $13 = $5;
- $14 = ($13|0)==(0|0);
- if ($14) {
-  $15 = HEAP32[637]|0;
-  (_fputs(53468,$15)|0);
-  $2 = 1;
-  $108 = $2;
-  STACKTOP = sp;return ($108|0);
- }
- $16 = $5;
- $17 = $3;
- $18 = $4;
- $19 = (_parse_args($16,$17,$18,$8)|0);
- $6 = $19;
- $20 = $6;
- $21 = ($20|0)<(0);
- if ($21) {
-  $22 = $5;
-  _cleanup($22,$8);
-  $23 = $4;
-  $24 = HEAP32[$23>>2]|0;
-  _usage($24);
-  $2 = 1;
-  $108 = $2;
-  STACKTOP = sp;return ($108|0);
- }
- $25 = $6;
- $26 = $3;
- $27 = ($25|0)==($26|0);
- if ($27) {
-  $28 = HEAP32[637]|0;
-  $29 = ((($8)) + 12|0);
-  $30 = HEAP32[$29>>2]|0;
-  HEAP32[$vararg_buffer>>2] = $30;
-  (_fprintf($28,53501,$vararg_buffer)|0);
-  $2 = 1;
-  $108 = $2;
-  STACKTOP = sp;return ($108|0);
- }
- $31 = ((($8)) + 16|0);
- $32 = HEAP32[$31>>2]|0;
- $33 = ($32|0)==(0|0);
- do {
-  if ($33) {
-   $34 = ((($8)) + 24|0);
-   $35 = HEAP8[$34>>0]|0;
-   $36 = $35 & 1;
-   $37 = ($36<<24>>24)!=(0);
-   if (!($37)) {
-    $38 = $6;
-    $39 = (($38) + 1)|0;
-    $40 = $3;
-    $41 = ($39|0)==($40|0);
-    if ($41) {
-     $42 = $5;
-     $43 = $4;
-     $44 = $6;
-     $45 = (($43) + ($44<<2)|0);
-     $46 = HEAP32[$45>>2]|0;
-     $47 = ((($8)) + 20|0);
-     $48 = HEAP32[$47>>2]|0;
-     $49 = ($48|0)!=(0|0);
-     $50 = $49 ? 53528 : 53531;
-     $51 = (_get_outfilename($42,$46,$50)|0);
-     $52 = ((($8)) + 16|0);
-     HEAP32[$52>>2] = $51;
-     break;
-    }
-    $53 = HEAP32[637]|0;
-    $54 = ((($8)) + 12|0);
-    $55 = HEAP32[$54>>2]|0;
-    HEAP32[$vararg_buffer1>>2] = $55;
-    (_fprintf($53,53536,$vararg_buffer1)|0);
-    $2 = 1;
-    $108 = $2;
-    STACKTOP = sp;return ($108|0);
-   }
-  }
- } while(0);
- $56 = $6;
- $57 = ((($8)) + 8|0);
- HEAP32[$57>>2] = $56;
- $58 = $5;
- _load_file($11,$58,$8);
- ;HEAP32[$10>>2]=HEAP32[$11>>2]|0;HEAP32[$10+4>>2]=HEAP32[$11+4>>2]|0;
- $59 = ((($10)) + 4|0);
- $60 = HEAP32[$59>>2]|0;
- $61 = ($60|0)==(0);
- if ($61) {
-  $62 = HEAP32[$10>>2]|0;
-  $63 = ($62|0)!=(0);
-  if (!($63)) {
-   $64 = $5;
-   _cleanup($64,$8);
-   $2 = 1;
-   $108 = $2;
-   STACKTOP = sp;return ($108|0);
-  }
- }
- $65 = ((($8)) + 24|0);
- $66 = HEAP8[$65>>0]|0;
- $67 = $66 & 1;
- $68 = ($67<<24>>24)!=(0);
- if ($68) {
-  $69 = ((($8)) + 12|0);
-  $70 = HEAP32[$69>>2]|0;
-  $71 = $4;
-  $72 = $6;
-  $73 = (($71) + ($72<<2)|0);
-  $74 = HEAP32[$73>>2]|0;
-  HEAP32[$vararg_buffer4>>2] = $70;
-  $vararg_ptr7 = ((($vararg_buffer4)) + 4|0);
-  HEAP32[$vararg_ptr7>>2] = $74;
-  (_printf(53599,$vararg_buffer4)|0);
- }
- $75 = ((($8)) + 24|0);
- $76 = HEAP8[$75>>0]|0;
- $77 = $76 & 1;
- $78 = ($77<<24>>24)!=(0);
- if ($78) {
-  $79 = $5;
-  _cleanup($79,$8);
-  $2 = 0;
-  $108 = $2;
-  STACKTOP = sp;return ($108|0);
- }
- $80 = ((($8)) + 16|0);
- $81 = HEAP32[$80>>2]|0;
- $82 = ($81|0)!=(0|0);
- if (!($82)) {
-  $97 = HEAP32[637]|0;
-  (_fprintf($97,53653,$vararg_buffer12)|0);
-  $2 = 1;
-  $108 = $2;
-  STACKTOP = sp;return ($108|0);
- }
- $83 = ((($8)) + 16|0);
- $84 = HEAP32[$83>>2]|0;
- $85 = (_strcmp(69660,$84)|0);
- $86 = ($85|0)==(0);
- if ($86) {
-  $87 = HEAP32[762]|0;
-  $9 = $87;
- } else {
-  $88 = ((($8)) + 16|0);
-  $89 = HEAP32[$88>>2]|0;
-  $90 = (_fopen($89,53616)|0);
-  $9 = $90;
-  $91 = ($90|0)==(0|0);
-  if ($91) {
-   $92 = HEAP32[637]|0;
-   $93 = ((($8)) + 12|0);
-   $94 = HEAP32[$93>>2]|0;
-   $95 = ((($8)) + 16|0);
-   $96 = HEAP32[$95>>2]|0;
-   HEAP32[$vararg_buffer8>>2] = $94;
-   $vararg_ptr11 = ((($vararg_buffer8)) + 4|0);
-   HEAP32[$vararg_ptr11>>2] = $96;
-   (_fprintf($92,53619,$vararg_buffer8)|0);
-   $2 = 1;
-   $108 = $2;
-   STACKTOP = sp;return ($108|0);
-  }
- }
- $98 = $5;
- $99 = $9;
- $100 = ((($8)) + 16|0);
- $101 = HEAP32[$100>>2]|0;
- $102 = HEAP32[$10>>2]|0;
- $103 = (_dump_file($98,$99,$101,$102,$8)|0);
- $7 = $103;
- $104 = $9;
- (_fclose($104)|0);
- $105 = $5;
- _cleanup($105,$8);
- $106 = $7;
- $107 = ($106|0)!=(0);
- if ($107) {
-  $2 = 1;
-  $108 = $2;
-  STACKTOP = sp;return ($108|0);
- } else {
-  $2 = 0;
-  $108 = $2;
-  STACKTOP = sp;return ($108|0);
- }
- return (0)|0;
-}
-function _parse_args($0,$1,$2,$3) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- var $$sink = 0, $$sink2 = 0, $$sink3 = 0, $$sink5 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0;
- var $114 = 0, $115 = 0, $116 = 0, $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0;
- var $132 = 0, $133 = 0, $134 = 0, $135 = 0, $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0;
- var $150 = 0, $151 = 0, $152 = 0, $153 = 0, $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0;
- var $169 = 0, $17 = 0, $170 = 0, $171 = 0, $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0;
- var $187 = 0, $188 = 0, $189 = 0, $19 = 0, $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0, $197 = 0, $198 = 0, $199 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0, $204 = 0;
- var $205 = 0, $206 = 0, $207 = 0, $208 = 0, $209 = 0, $21 = 0, $210 = 0, $211 = 0, $212 = 0, $213 = 0, $214 = 0, $215 = 0, $216 = 0, $217 = 0, $218 = 0, $219 = 0, $22 = 0, $220 = 0, $221 = 0, $222 = 0;
- var $223 = 0, $224 = 0, $225 = 0, $226 = 0, $227 = 0, $228 = 0, $229 = 0, $23 = 0, $230 = 0, $231 = 0, $232 = 0, $233 = 0, $234 = 0, $235 = 0, $236 = 0, $237 = 0, $238 = 0, $239 = 0, $24 = 0, $240 = 0;
- var $241 = 0, $242 = 0, $243 = 0, $244 = 0, $245 = 0, $246 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0;
- var $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0;
- var $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0;
- var $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0;
- var $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $vararg_buffer = 0, $vararg_buffer10 = 0, $vararg_buffer7 = 0, $vararg_ptr13 = 0, $vararg_ptr6 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);
- $vararg_buffer10 = sp + 16|0;
- $vararg_buffer7 = sp + 8|0;
- $vararg_buffer = sp;
- $5 = $0;
- $6 = $1;
- $7 = $2;
- $8 = $3;
- $9 = 0;
- $11 = $8;
- ;HEAP32[$11>>2]=HEAP32[72696>>2]|0;HEAP32[$11+4>>2]=HEAP32[72696+4>>2]|0;HEAP32[$11+8>>2]=HEAP32[72696+8>>2]|0;HEAP32[$11+12>>2]=HEAP32[72696+12>>2]|0;HEAP32[$11+16>>2]=HEAP32[72696+16>>2]|0;HEAP32[$11+20>>2]=HEAP32[72696+20>>2]|0;HEAP32[$11+24>>2]=HEAP32[72696+24>>2]|0;
- $12 = $6;
- $13 = $8;
- HEAP32[$13>>2] = $12;
- $14 = $7;
- $15 = $8;
- $16 = ((($15)) + 4|0);
- HEAP32[$16>>2] = $14;
- $17 = $7;
- $18 = HEAP32[$17>>2]|0;
- $19 = $8;
- $20 = ((($19)) + 12|0);
- HEAP32[$20>>2] = $18;
- $10 = 1;
- L1: while(1) {
-  $21 = $10;
-  $22 = $6;
-  $23 = ($21|0)<($22|0);
-  if (!($23)) {
-   label = 37;
-   break;
-  }
-  $24 = $7;
-  $25 = $10;
-  $26 = (($24) + ($25<<2)|0);
-  $27 = HEAP32[$26>>2]|0;
-  $28 = HEAP8[$27>>0]|0;
-  $29 = $28 << 24 >> 24;
-  $30 = ($29|0)==(45);
-  if (!($30)) {
-   label = 37;
-   break;
-  }
-  $31 = $7;
-  $32 = $10;
-  $33 = (($31) + ($32<<2)|0);
-  $34 = HEAP32[$33>>2]|0;
-  $35 = ((($34)) + 1|0);
-  $36 = HEAP8[$35>>0]|0;
-  $37 = $36 << 24 >> 24;
-  switch ($37|0) {
-  case 104:  {
-   label = 25;
-   break L1;
-   break;
-  }
-  case 111:  {
-   $38 = $8;
-   $39 = ((($38)) + 16|0);
-   $40 = HEAP32[$39>>2]|0;
-   $41 = ($40|0)!=(0|0);
-   if ($41) {
-    label = 6;
-    break L1;
-   }
-   $47 = $7;
-   $48 = $10;
-   $49 = (($47) + ($48<<2)|0);
-   $50 = HEAP32[$49>>2]|0;
-   $51 = ((($50)) + 2|0);
-   $52 = HEAP8[$51>>0]|0;
-   $53 = $52 << 24 >> 24;
-   $54 = ($53|0)==(0);
-   if ($54) {
-    $55 = $7;
-    $56 = $10;
-    $57 = (($56) + 1)|0;
-    $58 = (($55) + ($57<<2)|0);
-    $59 = HEAP32[$58>>2]|0;
-    $60 = ($59|0)!=(0|0);
-    if ($60) {
-     $61 = $10;
-     $62 = (($61) + 1)|0;
-     $10 = $62;
-     $63 = $5;
-     $64 = $7;
-     $65 = $10;
-     $66 = (($64) + ($65<<2)|0);
-     $67 = HEAP32[$66>>2]|0;
-     $68 = (_get_outfilename($63,$67,75764)|0);
-     $69 = $8;
-     $$sink = $68;$$sink2 = $69;
-    } else {
-     label = 10;
-    }
-   } else {
-    label = 10;
-   }
-   if ((label|0) == 10) {
-    label = 0;
-    $70 = $5;
-    $71 = $7;
-    $72 = $10;
-    $73 = (($71) + ($72<<2)|0);
-    $74 = HEAP32[$73>>2]|0;
-    $75 = ((($74)) + 2|0);
-    $76 = (_get_outfilename($70,$75,75764)|0);
-    $77 = $8;
-    $$sink = $76;$$sink2 = $77;
-   }
-   $78 = ((($$sink2)) + 16|0);
-   HEAP32[$78>>2] = $$sink;
-   break;
-  }
-  case 66:  {
-   $79 = $7;
-   $80 = $10;
-   $81 = (($79) + ($80<<2)|0);
-   $82 = HEAP32[$81>>2]|0;
-   $83 = ((($82)) + 2|0);
-   $84 = HEAP8[$83>>0]|0;
-   $85 = $84 << 24 >> 24;
-   $86 = ($85|0)==(0);
-   if ($86) {
-    $87 = $7;
-    $88 = $10;
-    $89 = (($88) + 1)|0;
-    $90 = (($87) + ($89<<2)|0);
-    $91 = HEAP32[$90>>2]|0;
-    $92 = ($91|0)!=(0|0);
-    if ($92) {
-     $93 = $10;
-     $94 = (($93) + 1)|0;
-     $10 = $94;
-     $95 = $7;
-     $96 = $10;
-     $97 = (($95) + ($96<<2)|0);
-     $98 = HEAP32[$97>>2]|0;
-     $99 = $8;
-     $$sink3 = $98;$$sink5 = $99;
-    } else {
-     label = 15;
-    }
-   } else {
-    label = 15;
-   }
-   if ((label|0) == 15) {
-    label = 0;
-    $100 = $7;
-    $101 = $10;
-    $102 = (($100) + ($101<<2)|0);
-    $103 = HEAP32[$102>>2]|0;
-    $104 = ((($103)) + 2|0);
-    $105 = $8;
-    $$sink3 = $104;$$sink5 = $105;
-   }
-   $106 = ((($$sink5)) + 20|0);
-   HEAP32[$106>>2] = $$sink3;
-   $107 = $8;
-   $108 = ((($107)) + 20|0);
-   $109 = HEAP32[$108>>2]|0;
-   $110 = HEAP8[$109>>0]|0;
-   $111 = $110 << 24 >> 24;
-   $112 = ($111|0)==(0);
-   if ($112) {
-    label = 17;
-    break L1;
-   }
-   break;
-  }
-  case 99:  {
-   $117 = $8;
-   $118 = ((($117)) + 24|0);
-   $119 = HEAP8[$118>>0]|0;
-   $120 = $119 & -2;
-   $121 = $120 | 1;
-   HEAP8[$118>>0] = $121;
-   break;
-  }
-  case 118:  {
-   $122 = $8;
-   $123 = ((($122)) + 24|0);
-   $124 = HEAP8[$123>>0]|0;
-   $125 = ($124&255) >>> 1;
-   $126 = $125 & 1;
-   $127 = ($126<<24>>24)!=(0);
-   if (!($127)) {
-    $128 = $5;
-    _mrb_show_version($128);
-   }
-   $129 = $8;
-   $130 = ((($129)) + 24|0);
-   $131 = HEAP8[$130>>0]|0;
-   $132 = $131 & -3;
-   $133 = $132 | 2;
-   HEAP8[$130>>0] = $133;
-   break;
-  }
-  case 103:  {
-   $134 = $8;
-   $135 = ((($134)) + 24|0);
-   $136 = HEAP8[$135>>0]|0;
-   $137 = ($136&255) >>> 2;
-   $138 = $137 & 15;
-   $139 = $138&255;
-   $140 = $139 | 1;
-   $141 = $140&255;
-   $142 = HEAP8[$135>>0]|0;
-   $143 = $141 & 15;
-   $144 = ($143 << 2)&255;
-   $145 = $142 & -61;
-   $146 = $145 | $144;
-   HEAP8[$135>>0] = $146;
-   break;
-  }
-  case 69:  {
-   $147 = $8;
-   $148 = ((($147)) + 24|0);
-   $149 = HEAP8[$148>>0]|0;
-   $150 = ($149&255) >>> 2;
-   $151 = $150 & 15;
-   $152 = $151&255;
-   $153 = $152 & -7;
-   $154 = 2 | $153;
-   $155 = $8;
-   $156 = ((($155)) + 24|0);
-   $157 = $154&255;
-   $158 = HEAP8[$156>>0]|0;
-   $159 = $157 & 15;
-   $160 = ($159 << 2)&255;
-   $161 = $158 & -61;
-   $162 = $161 | $160;
-   HEAP8[$156>>0] = $162;
-   break;
-  }
-  case 101:  {
-   $163 = $8;
-   $164 = ((($163)) + 24|0);
-   $165 = HEAP8[$164>>0]|0;
-   $166 = ($165&255) >>> 2;
-   $167 = $166 & 15;
-   $168 = $167&255;
-   $169 = $168 & -7;
-   $170 = 4 | $169;
-   $171 = $8;
-   $172 = ((($171)) + 24|0);
-   $173 = $170&255;
-   $174 = HEAP8[$172>>0]|0;
-   $175 = $173 & 15;
-   $176 = ($175 << 2)&255;
-   $177 = $174 & -61;
-   $178 = $177 | $176;
-   HEAP8[$172>>0] = $178;
-   break;
-  }
-  case 45:  {
-   $179 = $7;
-   $180 = $10;
-   $181 = (($179) + ($180<<2)|0);
-   $182 = HEAP32[$181>>2]|0;
-   $183 = ((($182)) + 1|0);
-   $184 = HEAP8[$183>>0]|0;
-   $185 = $184 << 24 >> 24;
-   $186 = ($185|0)==(10);
-   if ($186) {
-    label = 27;
-    break L1;
-   }
-   $188 = $7;
-   $189 = $10;
-   $190 = (($188) + ($189<<2)|0);
-   $191 = HEAP32[$190>>2]|0;
-   $192 = ((($191)) + 2|0);
-   $193 = (_strcmp($192,53762)|0);
-   $194 = ($193|0)==(0);
-   if ($194) {
-    label = 29;
-    break L1;
-   }
-   $196 = $7;
-   $197 = $10;
-   $198 = (($196) + ($197<<2)|0);
-   $199 = HEAP32[$198>>2]|0;
-   $200 = ((($199)) + 2|0);
-   $201 = (_strcmp($200,53770)|0);
-   $202 = ($201|0)==(0);
-   if (!($202)) {
-    label = 32;
-    break L1;
-   }
-   $203 = $8;
-   $204 = ((($203)) + 24|0);
-   $205 = HEAP8[$204>>0]|0;
-   $206 = $205 & -3;
-   $207 = $206 | 2;
-   HEAP8[$204>>0] = $207;
-   break;
-  }
-  default: {
-   label = 35;
-   break L1;
-  }
-  }
-  $217 = $10;
-  $218 = (($217) + 1)|0;
-  $10 = $218;
- }
- if ((label|0) == 6) {
-  $42 = HEAP32[637]|0;
-  $43 = $8;
-  $44 = ((($43)) + 12|0);
-  $45 = HEAP32[$44>>2]|0;
-  $46 = $9;
-  HEAP32[$vararg_buffer>>2] = $45;
-  $vararg_ptr6 = ((($vararg_buffer)) + 4|0);
-  HEAP32[$vararg_ptr6>>2] = $46;
-  (_fprintf($42,53678,$vararg_buffer)|0);
-  $4 = -1;
-  $246 = $4;
-  STACKTOP = sp;return ($246|0);
- }
- else if ((label|0) == 17) {
-  $113 = HEAP32[637]|0;
-  $114 = $8;
-  $115 = ((($114)) + 12|0);
-  $116 = HEAP32[$115>>2]|0;
-  HEAP32[$vararg_buffer7>>2] = $116;
-  (_fprintf($113,53725,$vararg_buffer7)|0);
-  $4 = -1;
-  $246 = $4;
-  STACKTOP = sp;return ($246|0);
- }
- else if ((label|0) == 25) {
-  $4 = -1;
-  $246 = $4;
-  STACKTOP = sp;return ($246|0);
- }
- else if ((label|0) == 27) {
-  $187 = $10;
-  $4 = $187;
-  $246 = $4;
-  STACKTOP = sp;return ($246|0);
- }
- else if ((label|0) == 29) {
-  $195 = $5;
-  _mrb_show_version($195);
-  _exit(0);
-  // unreachable;
- }
- else if ((label|0) == 32) {
-  $208 = $7;
-  $209 = $10;
-  $210 = (($208) + ($209<<2)|0);
-  $211 = HEAP32[$210>>2]|0;
-  $212 = ((($211)) + 2|0);
-  $213 = (_strcmp($212,53778)|0);
-  $214 = ($213|0)==(0);
-  if ($214) {
-   $215 = $5;
-   _mrb_show_copyright($215);
-   _exit(0);
-   // unreachable;
-  }
-  $4 = -1;
-  $246 = $4;
-  STACKTOP = sp;return ($246|0);
- }
- else if ((label|0) == 35) {
-  $216 = $10;
-  $4 = $216;
-  $246 = $4;
-  STACKTOP = sp;return ($246|0);
- }
- else if ((label|0) == 37) {
-  $219 = $8;
-  $220 = ((($219)) + 24|0);
-  $221 = HEAP8[$220>>0]|0;
-  $222 = ($221&255) >>> 1;
-  $223 = $222 & 1;
-  $224 = $223&255;
-  $225 = ($224|0)!=(0);
-  if ($225) {
-   $226 = $8;
-   $227 = ((($226)) + 20|0);
-   $228 = HEAP32[$227>>2]|0;
-   $229 = ($228|0)!=(0|0);
-   if ($229) {
-    $230 = $8;
-    $231 = ((($230)) + 24|0);
-    $232 = HEAP8[$231>>0]|0;
-    $233 = ($232&255) >>> 2;
-    $234 = $233 & 15;
-    $235 = $234&255;
-    $236 = $235 & 6;
-    $237 = ($236|0)==(0);
-    if ($237) {
-     $238 = HEAP32[637]|0;
-     $239 = $8;
-     $240 = ((($239)) + 12|0);
-     $241 = HEAP32[$240>>2]|0;
-     $242 = (_bigendian_p()|0);
-     $243 = ($242|0)!=(0);
-     $244 = $243 ? 53857 : 53861;
-     HEAP32[$vararg_buffer10>>2] = $241;
-     $vararg_ptr13 = ((($vararg_buffer10)) + 4|0);
-     HEAP32[$vararg_ptr13>>2] = $244;
-     (_fprintf($238,53788,$vararg_buffer10)|0);
-    }
-   }
-  }
-  $245 = $10;
-  $4 = $245;
-  $246 = $4;
-  STACKTOP = sp;return ($246|0);
- }
- return (0)|0;
-}
-function _cleanup($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $4 = $2;
- $5 = $3;
- $6 = ((($5)) + 16|0);
- $7 = HEAP32[$6>>2]|0;
- _mrb_free($4,$7);
- $8 = $2;
- _mrb_close($8);
- STACKTOP = sp;return;
-}
-function _usage($0) {
- $0 = $0|0;
- var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, $vararg_buffer1 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $vararg_buffer1 = sp + 8|0;
- $vararg_buffer = sp;
- $1 = $0;
- $2 = 8;
- $3 = $1;
- HEAP32[$vararg_buffer>>2] = $3;
- (_printf(54301,$vararg_buffer)|0);
- while(1) {
-  $4 = $2;
-  $5 = HEAP32[$4>>2]|0;
-  $6 = ($5|0)!=(0|0);
-  if (!($6)) {
-   break;
-  }
-  $7 = $2;
-  $8 = ((($7)) + 4|0);
-  $2 = $8;
-  $9 = HEAP32[$7>>2]|0;
-  HEAP32[$vararg_buffer1>>2] = $9;
-  (_printf(54335,$vararg_buffer1)|0);
- }
- STACKTOP = sp;return;
-}
-function _get_outfilename($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;
- var $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $3 = $0;
- $4 = $1;
- $5 = $2;
- $10 = $4;
- $11 = (_strlen($10)|0);
- $6 = $11;
- $12 = $5;
- $13 = (_strlen($12)|0);
- $7 = $13;
- $14 = $3;
- $15 = $6;
- $16 = $7;
- $17 = (($15) + ($16))|0;
- $18 = (($17) + 1)|0;
- $19 = (_mrb_malloc($14,$18)|0);
- $8 = $19;
- $20 = $8;
- $21 = $4;
- $22 = $6;
- $23 = (($22) + 1)|0;
- _memcpy(($20|0),($21|0),($23|0))|0;
- $24 = $5;
- $25 = HEAP8[$24>>0]|0;
- $26 = ($25<<24>>24)!=(0);
- if (!($26)) {
-  $37 = $8;
-  STACKTOP = sp;return ($37|0);
- }
- $27 = $8;
- $28 = (_strrchr($27,46)|0);
- $9 = $28;
- $29 = ($28|0)==(0|0);
- if ($29) {
-  $30 = $8;
-  $31 = $6;
-  $32 = (($30) + ($31)|0);
-  $9 = $32;
- }
- $33 = $9;
- $34 = $5;
- $35 = $7;
- $36 = (($35) + 1)|0;
- _memcpy(($33|0),($34|0),($36|0))|0;
- $37 = $8;
- STACKTOP = sp;return ($37|0);
-}
-function _load_file($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;
- var $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0;
- var $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0;
- var $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $9 = 0, $vararg_buffer = 0;
- var $vararg_ptr1 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);
- $vararg_buffer = sp;
- $6 = sp + 24|0;
- $10 = sp + 8|0;
- $3 = $1;
- $4 = $2;
- $11 = $4;
- $12 = ((($11)) + 4|0);
- $13 = HEAP32[$12>>2]|0;
- $14 = $4;
- $15 = ((($14)) + 8|0);
- $16 = HEAP32[$15>>2]|0;
- $17 = (($13) + ($16<<2)|0);
- $18 = HEAP32[$17>>2]|0;
- $7 = $18;
- $9 = 0;
- $19 = $3;
- $20 = (_mrbc_context_new($19)|0);
- $5 = $20;
- $21 = $4;
- $22 = ((($21)) + 24|0);
- $23 = HEAP8[$22>>0]|0;
- $24 = ($23&255) >>> 1;
- $25 = $24 & 1;
- $26 = ($25<<24>>24)!=(0);
- if ($26) {
-  $27 = $5;
-  $28 = ((($27)) + 28|0);
-  $29 = HEAP8[$28>>0]|0;
-  $30 = $29 & -3;
-  $31 = $30 | 2;
-  HEAP8[$28>>0] = $31;
- }
- $32 = $5;
- $33 = ((($32)) + 28|0);
- $34 = HEAP8[$33>>0]|0;
- $35 = $34 & -5;
- $36 = $35 | 4;
- HEAP8[$33>>0] = $36;
- $37 = $7;
- $38 = HEAP8[$37>>0]|0;
- $39 = $38 << 24 >> 24;
- $40 = ($39|0)==(45);
- if ($40) {
-  $41 = $7;
-  $42 = ((($41)) + 1|0);
-  $43 = HEAP8[$42>>0]|0;
-  $44 = $43 << 24 >> 24;
-  $45 = ($44|0)==(0);
-  if ($45) {
-   $46 = HEAP32[730]|0;
-   $8 = $46;
-  } else {
-   label = 6;
-  }
- } else {
-  label = 6;
- }
- if ((label|0) == 6) {
-  $9 = 1;
-  $47 = $7;
-  $48 = (_fopen($47,54341)|0);
-  $8 = $48;
-  $49 = ($48|0)==(0|0);
-  if ($49) {
-   $50 = HEAP32[637]|0;
-   $51 = $4;
-   $52 = ((($51)) + 12|0);
-   $53 = HEAP32[$52>>2]|0;
-   $54 = $7;
-   HEAP32[$vararg_buffer>>2] = $53;
-   $vararg_ptr1 = ((($vararg_buffer)) + 4|0);
-   HEAP32[$vararg_ptr1>>2] = $54;
-   (_fprintf($50,54343,$vararg_buffer)|0);
-   _mrb_nil_value($0);
-   STACKTOP = sp;return;
-  }
- }
- $55 = $3;
- $56 = $5;
- $57 = $7;
- (_mrbc_filename($55,$56,$57)|0);
- $58 = $4;
- $59 = ((($58)) + 8|0);
- $60 = HEAP32[$59>>2]|0;
- $61 = (($60) + 1)|0;
- HEAP32[$59>>2] = $61;
- $62 = $4;
- $63 = ((($62)) + 8|0);
- $64 = HEAP32[$63>>2]|0;
- $65 = $4;
- $66 = HEAP32[$65>>2]|0;
- $67 = ($64|0)<($66|0);
- if ($67) {
-  $9 = 0;
-  $68 = $3;
-  $69 = $5;
-  $70 = $4;
-  _mrbc_partial_hook($68,$69,7,$70);
- }
- $71 = $3;
- $72 = $8;
- $73 = $5;
- _mrb_load_file_cxt($10,$71,$72,$73);
- ;HEAP32[$6>>2]=HEAP32[$10>>2]|0;HEAP32[$6+4>>2]=HEAP32[$10+4>>2]|0;
- $74 = $9;
- $75 = ($74<<24>>24)!=(0);
- if ($75) {
-  $76 = $8;
-  (_fclose($76)|0);
- }
- $77 = $3;
- $78 = $5;
- _mrbc_context_free($77,$78);
- $79 = ((($6)) + 4|0);
- $80 = HEAP32[$79>>2]|0;
- $81 = ($80|0)==(5);
- if ($81) {
-  _mrb_nil_value($0);
-  STACKTOP = sp;return;
- } else {
-  ;HEAP32[$0>>2]=HEAP32[$6>>2]|0;HEAP32[$0+4>>2]=HEAP32[$6+4>>2]|0;
-  STACKTOP = sp;return;
- }
-}
-function _dump_file($0,$1,$2,$3,$4) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- $4 = $4|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;
- var $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $5 = 0;
- var $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, $vararg_buffer1 = 0, $vararg_ptr4 = 0, $vararg_ptr5 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);
- $vararg_buffer1 = sp + 8|0;
- $vararg_buffer = sp;
- $5 = $0;
- $6 = $1;
- $7 = $2;
- $8 = $3;
- $9 = $4;
- $10 = 0;
- $12 = $8;
- $13 = ((($12)) + 12|0);
- $14 = HEAP32[$13>>2]|0;
- $11 = $14;
- $15 = $9;
- $16 = ((($15)) + 20|0);
- $17 = HEAP32[$16>>2]|0;
- $18 = ($17|0)!=(0|0);
- $19 = $5;
- $20 = $11;
- $21 = $9;
- $22 = ((($21)) + 24|0);
- $23 = HEAP8[$22>>0]|0;
- $24 = ($23&255) >>> 2;
- $25 = $24 & 15;
- $26 = $25&255;
- $27 = $26&255;
- $28 = $6;
- if ($18) {
-  $29 = $9;
-  $30 = ((($29)) + 20|0);
-  $31 = HEAP32[$30>>2]|0;
-  $32 = (_mrb_dump_irep_cfunc($19,$20,$27,$28,$31)|0);
-  $10 = $32;
-  $33 = $10;
-  $34 = ($33|0)==(-7);
-  if ($34) {
-   $35 = HEAP32[637]|0;
-   $36 = $9;
-   $37 = ((($36)) + 20|0);
-   $38 = HEAP32[$37>>2]|0;
-   HEAP32[$vararg_buffer>>2] = $38;
-   (_fprintf($35,54379,$vararg_buffer)|0);
-  }
- } else {
-  $39 = (_mrb_dump_irep_binary($19,$20,$27,$28)|0);
-  $10 = $39;
- }
- $40 = $10;
- $41 = ($40|0)!=(0);
- if (!($41)) {
-  $48 = $10;
-  STACKTOP = sp;return ($48|0);
- }
- $42 = HEAP32[637]|0;
- $43 = $9;
- $44 = ((($43)) + 12|0);
- $45 = HEAP32[$44>>2]|0;
- $46 = $7;
- $47 = $10;
- HEAP32[$vararg_buffer1>>2] = $45;
- $vararg_ptr4 = ((($vararg_buffer1)) + 4|0);
- HEAP32[$vararg_ptr4>>2] = $46;
- $vararg_ptr5 = ((($vararg_buffer1)) + 8|0);
- HEAP32[$vararg_ptr5>>2] = $47;
- (_fprintf($42,54415,$vararg_buffer1)|0);
- $48 = $10;
- STACKTOP = sp;return ($48|0);
-}
-function _mrb_init_mrblib($0) {
- $0 = $0|0;
- var $1 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $1 = $0;
- STACKTOP = sp;return;
-}
-function _mrb_init_mrbgems($0) {
- $0 = $0|0;
- var $1 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $1 = $0;
- STACKTOP = sp;return;
-}
-function _bigendian_p() {
- var $0 = 0, $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $0 = sp + 4|0;
- HEAP32[$0>>2] = 1;
- $1 = $0;
- $2 = $1;
- $3 = HEAP8[$2>>0]|0;
- $4 = $3 << 24 >> 24;
- $5 = ($4|0)!=(0);
- $6 = $5 ? 0 : 1;
- STACKTOP = sp;return ($6|0);
-}
-function _mrb_nil_value($0) {
- $0 = $0|0;
- var $1 = 0, $2 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $1 = sp;
- $2 = ((($1)) + 4|0);
- HEAP32[$2>>2] = 0;
- HEAP32[$1>>2] = 0;
- ;HEAP32[$0>>2]=HEAP32[$1>>2]|0;HEAP32[$0+4>>2]=HEAP32[$1+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _partial_hook($0) {
- $0 = $0|0;
- var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;
- var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0;
- var $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, $vararg_ptr1 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $vararg_buffer = sp;
- $2 = $0;
- $6 = $2;
- $7 = ((($6)) + 24|0);
- $8 = HEAP32[$7>>2]|0;
- $3 = $8;
- $9 = $3;
- $10 = ((($9)) + 20|0);
- $11 = HEAP32[$10>>2]|0;
- $4 = $11;
- $12 = $2;
- $13 = ((($12)) + 20|0);
- $14 = HEAP32[$13>>2]|0;
- $15 = ($14|0)!=(0|0);
- if ($15) {
-  $16 = $2;
-  $17 = ((($16)) + 20|0);
-  $18 = HEAP32[$17>>2]|0;
-  (_fclose($18)|0);
- }
- $19 = $4;
- $20 = ((($19)) + 8|0);
- $21 = HEAP32[$20>>2]|0;
- $22 = $4;
- $23 = HEAP32[$22>>2]|0;
- $24 = ($21|0)>=($23|0);
- if ($24) {
-  $25 = $2;
-  $26 = ((($25)) + 20|0);
-  HEAP32[$26>>2] = 0;
-  $1 = -1;
-  $51 = $1;
-  STACKTOP = sp;return ($51|0);
- }
- $27 = $4;
- $28 = ((($27)) + 4|0);
- $29 = HEAP32[$28>>2]|0;
- $30 = $4;
- $31 = ((($30)) + 8|0);
- $32 = HEAP32[$31>>2]|0;
- $33 = (($32) + 1)|0;
- HEAP32[$31>>2] = $33;
- $34 = (($29) + ($32<<2)|0);
- $35 = HEAP32[$34>>2]|0;
- $5 = $35;
- $36 = $5;
- $37 = (_fopen($36,54341)|0);
- $38 = $2;
- $39 = ((($38)) + 20|0);
- HEAP32[$39>>2] = $37;
- $40 = $2;
- $41 = ((($40)) + 20|0);
- $42 = HEAP32[$41>>2]|0;
- $43 = ($42|0)==(0|0);
- if ($43) {
-  $44 = HEAP32[637]|0;
-  $45 = $4;
-  $46 = ((($45)) + 12|0);
-  $47 = HEAP32[$46>>2]|0;
-  $48 = $5;
-  HEAP32[$vararg_buffer>>2] = $47;
-  $vararg_ptr1 = ((($vararg_buffer)) + 4|0);
-  HEAP32[$vararg_ptr1>>2] = $48;
-  (_fprintf($44,54343,$vararg_buffer)|0);
-  $1 = -1;
-  $51 = $1;
-  STACKTOP = sp;return ($51|0);
- } else {
-  $49 = $2;
-  $50 = $5;
-  _mrb_parser_set_filename($49,$50);
-  $1 = 0;
-  $51 = $1;
-  STACKTOP = sp;return ($51|0);
- }
- return (0)|0;
-}
-function _dump_flags($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0;
- var label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $0;
- $4 = $1;
- $5 = $4;
- $6 = $5&255;
- $7 = ($6|0)==(2);
- $8 = $3;
- $9 = $8&255;
- $10 = $9 & 6;
- $11 = ($10|0)==(0);
- $12 = $3;
- do {
-  if ($7) {
-   if ($11) {
-    $13 = $12&255;
-    $14 = $13 & 1;
-    $15 = $14 | 6;
-    $16 = $15&255;
-    $2 = $16;
-    break;
-   } else {
-    $2 = $12;
-    break;
-   }
-  } else {
-   if ($11) {
-    $17 = $12&255;
-    $18 = $17 & 1;
-    $19 = $18 | 2;
-    $20 = $19&255;
-    $2 = $20;
-    break;
-   } else {
-    $2 = $12;
-    break;
-   }
-  }
- } while(0);
- $21 = $2;
- STACKTOP = sp;return ($21|0);
-}
-function _dump_irep($0,$1,$2,$3,$4) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- $4 = $4|0;
- var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;
- var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0;
- var $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0, $152 = 0, $153 = 0;
- var $154 = 0, $155 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0;
- var $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0;
- var $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0;
- var $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0;
- var $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);
- $13 = sp + 24|0;
- $19 = sp + 8|0;
- $20 = sp + 4|0;
- $21 = sp;
- $22 = sp + 56|0;
- $6 = $0;
- $7 = $1;
- $8 = $2;
- $9 = $3;
- $10 = $4;
- $11 = -1;
- $14 = 0;
- $15 = 0;
- $16 = 0;
- $23 = $7;
- $24 = (_is_debug_info_defined($23)|0);
- $17 = $24;
- $25 = $7;
- $26 = (_is_lv_defined($25)|0);
- $18 = $26;
- HEAP32[$19>>2] = 0;
- HEAP32[$20>>2] = 0;
- HEAP32[$21>>2] = 0;
- HEAP16[$22>>1] = 0;
- $27 = $6;
- $28 = ($27|0)==(0|0);
- if ($28) {
-  $29 = $9;
-  HEAP32[$29>>2] = 0;
-  $5 = -1;
-  $155 = $5;
-  STACKTOP = sp;return ($155|0);
- }
- HEAP32[$13>>2] = 12;
- $30 = $6;
- $31 = $7;
- $32 = (_get_irep_record_size($30,$31)|0);
- $33 = HEAP32[$13>>2]|0;
- $34 = (($33) + ($32))|0;
- HEAP32[$13>>2] = $34;
- $35 = $8;
- $36 = $35&255;
- $37 = $36 & 1;
- $38 = ($37|0)!=(0);
- do {
-  if ($38) {
-   $39 = $17;
-   $40 = ($39<<24>>24)!=(0);
-   $41 = $14;
-   $42 = (($41) + 8)|0;
-   $14 = $42;
-   $43 = $6;
-   if ($40) {
-    $44 = (_mrb_malloc($43,5)|0);
-    HEAP32[$21>>2] = $44;
-    $45 = $14;
-    $46 = (($45) + 2)|0;
-    $14 = $46;
-    $47 = $6;
-    $48 = $7;
-    $49 = (_get_filename_table_size($47,$48,$21,$22)|0);
-    $50 = $14;
-    $51 = (($50) + ($49))|0;
-    $14 = $51;
-    $52 = $6;
-    $53 = $7;
-    $54 = (_get_debug_record_size($52,$53)|0);
-    $55 = $14;
-    $56 = (($55) + ($54))|0;
-    $14 = $56;
-    break;
-   } else {
-    $57 = $7;
-    $58 = (_get_lineno_record_size($43,$57)|0);
-    $59 = $14;
-    $60 = (($59) + ($58))|0;
-    $14 = $60;
-    break;
-   }
-  }
- } while(0);
- $61 = $18;
- $62 = ($61<<24>>24)!=(0);
- if ($62) {
-  $63 = $15;
-  $64 = (($63) + 8)|0;
-  $15 = $64;
-  $65 = $6;
-  $66 = $7;
-  _create_lv_sym_table($65,$66,$19,$20);
-  $67 = $6;
-  $68 = $7;
-  $69 = HEAP32[$19>>2]|0;
-  $70 = HEAP32[$20>>2]|0;
-  $71 = (_get_lv_section_size($67,$68,$69,$70)|0);
-  $72 = $15;
-  $73 = (($72) + ($71))|0;
-  $15 = $73;
- }
- $74 = HEAP32[$13>>2]|0;
- $75 = (22 + ($74))|0;
- $76 = $14;
- $77 = (($75) + ($76))|0;
- $78 = $15;
- $79 = (($77) + ($78))|0;
- $80 = (($79) + 8)|0;
- $12 = $80;
- $81 = $6;
- $82 = $12;
- $83 = (_mrb_malloc($81,$82)|0);
- $84 = $9;
- HEAP32[$84>>2] = $83;
- $16 = $83;
- $85 = $16;
- $86 = ((($85)) + 22|0);
- $16 = $86;
- $87 = $6;
- $88 = $7;
- $89 = $16;
- $90 = $8;
- $91 = (_write_section_irep($87,$88,$89,$13,$90)|0);
- $11 = $91;
- $92 = $11;
- $93 = ($92|0)!=(0);
- do {
-  if (!($93)) {
-   $94 = HEAP32[$13>>2]|0;
-   $95 = $16;
-   $96 = (($95) + ($94)|0);
-   $16 = $96;
-   $97 = HEAP32[$13>>2]|0;
-   $98 = (22 + ($97))|0;
-   $99 = $14;
-   $100 = (($98) + ($99))|0;
-   $101 = $15;
-   $102 = (($100) + ($101))|0;
-   $103 = (($102) + 8)|0;
-   $104 = $10;
-   HEAP32[$104>>2] = $103;
-   $105 = $8;
-   $106 = $105&255;
-   $107 = $106 & 1;
-   $108 = ($107|0)!=(0);
-   if ($108) {
-    $109 = $17;
-    $110 = ($109<<24>>24)!=(0);
-    $111 = $6;
-    $112 = $7;
-    $113 = $16;
-    if ($110) {
-     $114 = HEAP32[$21>>2]|0;
-     $115 = HEAP16[$22>>1]|0;
-     $116 = (_write_section_debug($111,$112,$113,$114,$115)|0);
-     $11 = $116;
-    } else {
-     $117 = (_write_section_lineno($111,$112,$113)|0);
-     $11 = $117;
-    }
-    $118 = $11;
-    $119 = ($118|0)!=(0);
-    if ($119) {
-     break;
-    }
-    $120 = $14;
-    $121 = $16;
-    $122 = (($121) + ($120)|0);
-    $16 = $122;
-   }
-   $123 = $18;
-   $124 = ($123<<24>>24)!=(0);
-   if ($124) {
-    $125 = $6;
-    $126 = $7;
-    $127 = $16;
-    $128 = HEAP32[$19>>2]|0;
-    $129 = HEAP32[$20>>2]|0;
-    $130 = (_write_section_lv($125,$126,$127,$128,$129)|0);
-    $11 = $130;
-    $131 = $11;
-    $132 = ($131|0)!=(0);
-    if ($132) {
-     break;
-    }
-    $133 = $15;
-    $134 = $16;
-    $135 = (($134) + ($133)|0);
-    $16 = $135;
-   }
-   $136 = $6;
-   $137 = $16;
-   (_write_footer($136,$137)|0);
-   $138 = $6;
-   $139 = $10;
-   $140 = HEAP32[$139>>2]|0;
-   $141 = $9;
-   $142 = HEAP32[$141>>2]|0;
-   $143 = $8;
-   (_write_rite_binary_header($138,$140,$142,$143)|0);
-  }
- } while(0);
- $144 = $11;
- $145 = ($144|0)!=(0);
- if ($145) {
-  $146 = $6;
-  $147 = $9;
-  $148 = HEAP32[$147>>2]|0;
-  _mrb_free($146,$148);
-  $149 = $9;
-  HEAP32[$149>>2] = 0;
- }
- $150 = $6;
- $151 = HEAP32[$19>>2]|0;
- _mrb_free($150,$151);
- $152 = $6;
- $153 = HEAP32[$21>>2]|0;
- _mrb_free($152,$153);
- $154 = $11;
- $5 = $154;
- $155 = $5;
- STACKTOP = sp;return ($155|0);
-}
-function _is_debug_info_defined($0) {
- $0 = $0|0;
- var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0;
- var $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $4 = $2;
- $5 = ((($4)) + 36|0);
- $6 = HEAP32[$5>>2]|0;
- $7 = ($6|0)!=(0|0);
- if (!($7)) {
-  $1 = 0;
-  $23 = $1;
-  STACKTOP = sp;return ($23|0);
- }
- $3 = 0;
- while(1) {
-  $8 = $3;
-  $9 = $2;
-  $10 = ((($9)) + 52|0);
-  $11 = HEAP32[$10>>2]|0;
-  $12 = ($8>>>0)<($11>>>0);
-  if (!($12)) {
-   label = 8;
-   break;
-  }
-  $13 = $2;
-  $14 = ((($13)) + 20|0);
-  $15 = HEAP32[$14>>2]|0;
-  $16 = $3;
-  $17 = (($15) + ($16<<2)|0);
-  $18 = HEAP32[$17>>2]|0;
-  $19 = (_is_debug_info_defined($18)|0);
-  $20 = ($19<<24>>24)!=(0);
-  if (!($20)) {
-   label = 6;
-   break;
-  }
-  $21 = $3;
-  $22 = (($21) + 1)|0;
-  $3 = $22;
- }
- if ((label|0) == 6) {
-  $1 = 0;
-  $23 = $1;
-  STACKTOP = sp;return ($23|0);
- }
- else if ((label|0) == 8) {
-  $1 = 1;
-  $23 = $1;
-  STACKTOP = sp;return ($23|0);
- }
- return (0)|0;
-}
-function _is_lv_defined($0) {
- $0 = $0|0;
- var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0;
- var $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $4 = $2;
- $5 = ((($4)) + 24|0);
- $6 = HEAP32[$5>>2]|0;
- $7 = ($6|0)!=(0|0);
- if ($7) {
-  $1 = 1;
-  $23 = $1;
-  STACKTOP = sp;return ($23|0);
- }
- $3 = 0;
- while(1) {
-  $8 = $3;
-  $9 = $2;
-  $10 = ((($9)) + 52|0);
-  $11 = HEAP32[$10>>2]|0;
-  $12 = ($8>>>0)<($11>>>0);
-  if (!($12)) {
-   label = 8;
-   break;
-  }
-  $13 = $2;
-  $14 = ((($13)) + 20|0);
-  $15 = HEAP32[$14>>2]|0;
-  $16 = $3;
-  $17 = (($15) + ($16<<2)|0);
-  $18 = HEAP32[$17>>2]|0;
-  $19 = (_is_lv_defined($18)|0);
-  $20 = ($19<<24>>24)!=(0);
-  if ($20) {
-   label = 6;
-   break;
-  }
-  $21 = $3;
-  $22 = (($21) + 1)|0;
-  $3 = $22;
- }
- if ((label|0) == 6) {
-  $1 = 1;
-  $23 = $1;
-  STACKTOP = sp;return ($23|0);
- }
- else if ((label|0) == 8) {
-  $1 = 0;
-  $23 = $1;
-  STACKTOP = sp;return ($23|0);
- }
- return (0)|0;
-}
-function _get_irep_record_size($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $3 = 0, $4 = 0;
- var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $4 = 0;
- $6 = $2;
- $7 = $3;
- $8 = (_get_irep_record_size_1($6,$7)|0);
- $4 = $8;
- $5 = 0;
- while(1) {
-  $9 = $5;
-  $10 = $3;
-  $11 = ((($10)) + 52|0);
-  $12 = HEAP32[$11>>2]|0;
-  $13 = ($9>>>0)<($12>>>0);
-  if (!($13)) {
-   break;
-  }
-  $14 = $2;
-  $15 = $3;
-  $16 = ((($15)) + 20|0);
-  $17 = HEAP32[$16>>2]|0;
-  $18 = $5;
-  $19 = (($17) + ($18<<2)|0);
-  $20 = HEAP32[$19>>2]|0;
-  $21 = (_get_irep_record_size($14,$20)|0);
-  $22 = $4;
-  $23 = (($22) + ($21))|0;
-  $4 = $23;
-  $24 = $5;
-  $25 = (($24) + 1)|0;
-  $5 = $25;
- }
- $26 = $4;
- STACKTOP = sp;return ($26|0);
-}
-function _get_filename_table_size($0,$1,$2,$3) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;
- var $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0;
- var $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0;
- var $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0;
- var $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);
- $13 = sp;
- $4 = $0;
- $5 = $1;
- $6 = $2;
- $7 = $3;
- $14 = $6;
- $15 = HEAP32[$14>>2]|0;
- $8 = $15;
- $10 = 0;
- $16 = $5;
- $17 = ((($16)) + 36|0);
- $18 = HEAP32[$17>>2]|0;
- $11 = $18;
- $9 = 0;
- while(1) {
-  $19 = $9;
-  $20 = $11;
-  $21 = ((($20)) + 4|0);
-  $22 = HEAP16[$21>>1]|0;
-  $23 = $22&65535;
-  $24 = ($19>>>0)<($23>>>0);
-  if (!($24)) {
-   break;
-  }
-  $25 = $11;
-  $26 = ((($25)) + 8|0);
-  $27 = HEAP32[$26>>2]|0;
-  $28 = $9;
-  $29 = (($27) + ($28<<2)|0);
-  $30 = HEAP32[$29>>2]|0;
-  $12 = $30;
-  $31 = $8;
-  $32 = $7;
-  $33 = HEAP16[$32>>1]|0;
-  $34 = $33&65535;
-  $35 = $12;
-  $36 = ((($35)) + 8|0);
-  $37 = HEAP32[$36>>2]|0;
-  $38 = (_find_filename_index($31,$34,$37)|0);
-  $39 = ($38|0)==(-1);
-  if ($39) {
-   $40 = $7;
-   $41 = HEAP16[$40>>1]|0;
-   $42 = $41&65535;
-   $43 = (($42) + 1)|0;
-   $44 = $43&65535;
-   HEAP16[$40>>1] = $44;
-   $45 = $4;
-   $46 = $8;
-   $47 = $7;
-   $48 = HEAP16[$47>>1]|0;
-   $49 = $48&65535;
-   $50 = $49<<2;
-   $51 = (_mrb_realloc($45,$46,$50)|0);
-   $8 = $51;
-   $52 = $6;
-   HEAP32[$52>>2] = $51;
-   $53 = $12;
-   $54 = ((($53)) + 8|0);
-   $55 = HEAP32[$54>>2]|0;
-   $56 = $8;
-   $57 = $7;
-   $58 = HEAP16[$57>>1]|0;
-   $59 = $58&65535;
-   $60 = (($59) - 1)|0;
-   $61 = (($56) + ($60<<2)|0);
-   HEAP32[$61>>2] = $55;
-   $62 = $4;
-   $63 = $12;
-   $64 = ((($63)) + 8|0);
-   $65 = HEAP32[$64>>2]|0;
-   (_mrb_sym2name_len($62,$65,$13)|0);
-   $66 = HEAP32[$13>>2]|0;
-   $67 = (2 + ($66))|0;
-   $68 = $10;
-   $69 = (($68) + ($67))|0;
-   $10 = $69;
-  }
-  $70 = $9;
-  $71 = (($70) + 1)|0;
-  $9 = $71;
- }
- $9 = 0;
- while(1) {
-  $72 = $9;
-  $73 = $5;
-  $74 = ((($73)) + 52|0);
-  $75 = HEAP32[$74>>2]|0;
-  $76 = ($72>>>0)<($75>>>0);
-  if (!($76)) {
-   break;
-  }
-  $77 = $4;
-  $78 = $5;
-  $79 = ((($78)) + 20|0);
-  $80 = HEAP32[$79>>2]|0;
-  $81 = $9;
-  $82 = (($80) + ($81<<2)|0);
-  $83 = HEAP32[$82>>2]|0;
-  $84 = $6;
-  $85 = $7;
-  $86 = (_get_filename_table_size($77,$83,$84,$85)|0);
-  $87 = $10;
-  $88 = (($87) + ($86))|0;
-  $10 = $88;
-  $89 = $9;
-  $90 = (($89) + 1)|0;
-  $9 = $90;
- }
- $91 = $10;
- STACKTOP = sp;return ($91|0);
-}
-function _get_debug_record_size($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;
- var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0;
- var $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0;
- var $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $2 = $0;
- $3 = $1;
- $4 = 0;
- $8 = $4;
- $9 = (($8) + 4)|0;
- $4 = $9;
- $10 = $4;
- $11 = (($10) + 2)|0;
- $4 = $11;
- $5 = 0;
- while(1) {
-  $12 = $5;
-  $13 = $12&65535;
-  $14 = $3;
-  $15 = ((($14)) + 36|0);
-  $16 = HEAP32[$15>>2]|0;
-  $17 = ((($16)) + 4|0);
-  $18 = HEAP16[$17>>1]|0;
-  $19 = $18&65535;
-  $20 = ($13|0)<($19|0);
-  if (!($20)) {
-   break;
-  }
-  $21 = $3;
-  $22 = ((($21)) + 36|0);
-  $23 = HEAP32[$22>>2]|0;
-  $24 = ((($23)) + 8|0);
-  $25 = HEAP32[$24>>2]|0;
-  $26 = $5;
-  $27 = $26&65535;
-  $28 = (($25) + ($27<<2)|0);
-  $29 = HEAP32[$28>>2]|0;
-  $7 = $29;
-  $30 = $4;
-  $31 = (($30) + 4)|0;
-  $4 = $31;
-  $32 = $4;
-  $33 = (($32) + 2)|0;
-  $4 = $33;
-  $34 = $4;
-  $35 = (($34) + 4)|0;
-  $4 = $35;
-  $36 = $4;
-  $37 = (($36) + 1)|0;
-  $4 = $37;
-  $38 = $7;
-  $39 = ((($38)) + 16|0);
-  $40 = HEAP32[$39>>2]|0;
-  switch ($40|0) {
-  case 0:  {
-   $41 = $7;
-   $42 = ((($41)) + 12|0);
-   $43 = HEAP32[$42>>2]|0;
-   $44 = $43<<1;
-   $45 = $4;
-   $46 = (($45) + ($44))|0;
-   $4 = $46;
-   break;
-  }
-  case 1:  {
-   $47 = $7;
-   $48 = ((($47)) + 12|0);
-   $49 = HEAP32[$48>>2]|0;
-   $50 = ($49*6)|0;
-   $51 = $4;
-   $52 = (($51) + ($50))|0;
-   $4 = $52;
-   break;
-  }
-  default: {
-  }
-  }
-  $53 = $5;
-  $54 = (($53) + 1)<<16>>16;
-  $5 = $54;
- }
- $6 = 0;
- while(1) {
-  $55 = $6;
-  $56 = $3;
-  $57 = ((($56)) + 52|0);
-  $58 = HEAP32[$57>>2]|0;
-  $59 = ($55>>>0)<($58>>>0);
-  if (!($59)) {
-   break;
-  }
-  $60 = $2;
-  $61 = $3;
-  $62 = ((($61)) + 20|0);
-  $63 = HEAP32[$62>>2]|0;
-  $64 = $6;
-  $65 = (($63) + ($64<<2)|0);
-  $66 = HEAP32[$65>>2]|0;
-  $67 = (_get_debug_record_size($60,$66)|0);
-  $68 = $4;
-  $69 = (($68) + ($67))|0;
-  $4 = $69;
-  $70 = $6;
-  $71 = (($70) + 1)|0;
-  $6 = $71;
- }
- $72 = $4;
- STACKTOP = sp;return ($72|0);
-}
-function _get_lineno_record_size($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;
- var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $4 = 0;
- $5 = $4;
- $6 = (($5) + 4)|0;
- $4 = $6;
- $7 = $4;
- $8 = (($7) + 2)|0;
- $4 = $8;
- $9 = $3;
- $10 = ((($9)) + 28|0);
- $11 = HEAP32[$10>>2]|0;
- $12 = ($11|0)!=(0|0);
- if ($12) {
-  $13 = $3;
-  $14 = ((($13)) + 28|0);
-  $15 = HEAP32[$14>>2]|0;
-  $16 = (_strlen($15)|0);
-  $17 = $4;
-  $18 = (($17) + ($16))|0;
-  $4 = $18;
- }
- $19 = $4;
- $20 = (($19) + 4)|0;
- $4 = $20;
- $21 = $3;
- $22 = ((($21)) + 32|0);
- $23 = HEAP32[$22>>2]|0;
- $24 = ($23|0)!=(0|0);
- if (!($24)) {
-  $31 = $4;
-  STACKTOP = sp;return ($31|0);
- }
- $25 = $3;
- $26 = ((($25)) + 40|0);
- $27 = HEAP32[$26>>2]|0;
- $28 = $27<<1;
- $29 = $4;
- $30 = (($29) + ($28))|0;
- $4 = $30;
- $31 = $4;
- STACKTOP = sp;return ($31|0);
-}
-function _create_lv_sym_table($0,$1,$2,$3) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;
- var $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0;
- var $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0;
- var $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $4 = $0;
- $5 = $1;
- $6 = $2;
- $7 = $3;
- $10 = $6;
- $11 = HEAP32[$10>>2]|0;
- $12 = ($11|0)==(0|0);
- if ($12) {
-  $13 = $4;
-  $14 = (_mrb_malloc($13,4)|0);
-  $15 = $6;
-  HEAP32[$15>>2] = $14;
- }
- $8 = 0;
- while(1) {
-  $16 = $8;
-  $17 = (($16) + 1)|0;
-  $18 = $5;
-  $19 = HEAP16[$18>>1]|0;
-  $20 = $19&65535;
-  $21 = ($17>>>0)<($20>>>0);
-  if (!($21)) {
-   break;
-  }
-  $22 = $5;
-  $23 = ((($22)) + 24|0);
-  $24 = HEAP32[$23>>2]|0;
-  $25 = $8;
-  $26 = (($24) + ($25<<3)|0);
-  $27 = HEAP32[$26>>2]|0;
-  $9 = $27;
-  $28 = $9;
-  $29 = ($28|0)==(0);
-  if (!($29)) {
-   $30 = $6;
-   $31 = HEAP32[$30>>2]|0;
-   $32 = $7;
-   $33 = HEAP32[$32>>2]|0;
-   $34 = $9;
-   $35 = (_find_filename_index($31,$33,$34)|0);
-   $36 = ($35|0)!=(-1);
-   if (!($36)) {
-    $37 = $7;
-    $38 = HEAP32[$37>>2]|0;
-    $39 = (($38) + 1)|0;
-    HEAP32[$37>>2] = $39;
-    $40 = $4;
-    $41 = $6;
-    $42 = HEAP32[$41>>2]|0;
-    $43 = $7;
-    $44 = HEAP32[$43>>2]|0;
-    $45 = $44<<2;
-    $46 = (_mrb_realloc($40,$42,$45)|0);
-    $47 = $6;
-    HEAP32[$47>>2] = $46;
-    $48 = $9;
-    $49 = $6;
-    $50 = HEAP32[$49>>2]|0;
-    $51 = $7;
-    $52 = HEAP32[$51>>2]|0;
-    $53 = (($52) - 1)|0;
-    $54 = (($50) + ($53<<2)|0);
-    HEAP32[$54>>2] = $48;
-   }
-  }
-  $55 = $8;
-  $56 = (($55) + 1)|0;
-  $8 = $56;
- }
- $8 = 0;
- while(1) {
-  $57 = $8;
-  $58 = $5;
-  $59 = ((($58)) + 52|0);
-  $60 = HEAP32[$59>>2]|0;
-  $61 = ($57>>>0)<($60>>>0);
-  if (!($61)) {
-   break;
-  }
-  $62 = $4;
-  $63 = $5;
-  $64 = ((($63)) + 20|0);
-  $65 = HEAP32[$64>>2]|0;
-  $66 = $8;
-  $67 = (($65) + ($66<<2)|0);
-  $68 = HEAP32[$67>>2]|0;
-  $69 = $6;
-  $70 = $7;
-  _create_lv_sym_table($62,$68,$69,$70);
-  $71 = $8;
-  $72 = (($71) + 1)|0;
-  $8 = $72;
- }
- STACKTOP = sp;return;
-}
-function _get_lv_section_size($0,$1,$2,$3) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;
- var $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $10 = sp;
- $4 = $0;
- $5 = $1;
- $6 = $2;
- $7 = $3;
- $8 = 0;
- $11 = $8;
- $12 = (($11) + 4)|0;
- $8 = $12;
- $13 = $7;
- $14 = $13<<1;
- $15 = $8;
- $16 = (($15) + ($14))|0;
- $8 = $16;
- $9 = 0;
- while(1) {
-  $17 = $9;
-  $18 = $7;
-  $19 = ($17>>>0)<($18>>>0);
-  $20 = $4;
-  if (!($19)) {
-   break;
-  }
-  $21 = $6;
-  $22 = $9;
-  $23 = (($21) + ($22<<2)|0);
-  $24 = HEAP32[$23>>2]|0;
-  (_mrb_sym2name_len($20,$24,$10)|0);
-  $25 = HEAP32[$10>>2]|0;
-  $26 = $8;
-  $27 = (($26) + ($25))|0;
-  $8 = $27;
-  $28 = $9;
-  $29 = (($28) + 1)|0;
-  $9 = $29;
- }
- $30 = $5;
- $31 = (_get_lv_record_size($20,$30)|0);
- $32 = $8;
- $33 = (($32) + ($31))|0;
- $8 = $33;
- $34 = $8;
- STACKTOP = sp;return ($34|0);
-}
-function _write_section_irep($0,$1,$2,$3,$4) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- $4 = $4|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;
- var $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $40 = 0, $41 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $or$cond = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);
- $12 = sp + 4|0;
- $6 = $0;
- $7 = $1;
- $8 = $2;
- $9 = $3;
- $10 = $4;
- HEAP32[$12>>2] = 0;
- $14 = $8;
- $13 = $14;
- $15 = $6;
- $16 = ($15|0)==(0|0);
- $17 = $8;
- $18 = ($17|0)==(0|0);
- $or$cond = $16 | $18;
- if ($or$cond) {
-  $5 = -7;
-  $41 = $5;
-  STACKTOP = sp;return ($41|0);
- }
- $19 = $13;
- $20 = ((($19)) + 12|0);
- $13 = $20;
- $21 = $6;
- $22 = $7;
- $23 = $13;
- $24 = $10;
- $25 = (_write_irep_record($21,$22,$23,$12,$24)|0);
- $11 = $25;
- $26 = $11;
- $27 = ($26|0)!=(0);
- if ($27) {
-  $28 = $11;
-  $5 = $28;
-  $41 = $5;
-  STACKTOP = sp;return ($41|0);
- } else {
-  $29 = $13;
-  $30 = $8;
-  $31 = $29;
-  $32 = $30;
-  $33 = (($31) - ($32))|0;
-  $34 = HEAP32[$12>>2]|0;
-  $35 = (($33) + ($34))|0;
-  $36 = $9;
-  HEAP32[$36>>2] = $35;
-  $37 = $6;
-  $38 = $9;
-  $39 = HEAP32[$38>>2]|0;
-  $40 = $8;
-  (_write_section_irep_header($37,$39,$40)|0);
-  $5 = 0;
-  $41 = $5;
-  STACKTOP = sp;return ($41|0);
- }
- return (0)|0;
-}
-function _write_section_debug($0,$1,$2,$3,$4) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- $4 = $4|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;
- var $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0;
- var $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0;
- var $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $8 = 0, $9 = 0, $or$cond = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);
- $17 = sp;
- $6 = $0;
- $7 = $1;
- $8 = $2;
- $9 = $3;
- $10 = $4;
- $11 = 0;
- $18 = $8;
- $12 = $18;
- $19 = $6;
- $20 = ($19|0)==(0|0);
- $21 = $8;
- $22 = ($21|0)==(0|0);
- $or$cond = $20 | $22;
- if ($or$cond) {
-  $5 = -7;
-  $77 = $5;
-  STACKTOP = sp;return ($77|0);
- }
- $23 = $12;
- $13 = $23;
- $24 = $8;
- $25 = ((($24)) + 8|0);
- $8 = $25;
- $26 = $11;
- $27 = (($26) + 8)|0;
- $11 = $27;
- $28 = $10;
- $29 = $8;
- $30 = (_uint16_to_bin($28,$29)|0);
- $31 = $8;
- $32 = (($31) + ($30)|0);
- $8 = $32;
- $33 = $11;
- $34 = (($33) + 2)|0;
- $11 = $34;
- $15 = 0;
- while(1) {
-  $35 = $15;
-  $36 = $35&65535;
-  $37 = $10;
-  $38 = $37&65535;
-  $39 = ($36|0)<($38|0);
-  $40 = $6;
-  if (!($39)) {
-   break;
-  }
-  $41 = $9;
-  $42 = $15;
-  $43 = $42&65535;
-  $44 = (($41) + ($43<<2)|0);
-  $45 = HEAP32[$44>>2]|0;
-  $46 = (_mrb_sym2name_len($40,$45,$17)|0);
-  $16 = $46;
-  $47 = HEAP32[$17>>2]|0;
-  $48 = $47&65535;
-  $49 = $8;
-  $50 = (_uint16_to_bin($48,$49)|0);
-  $51 = $8;
-  $52 = (($51) + ($50)|0);
-  $8 = $52;
-  $53 = $8;
-  $54 = $16;
-  $55 = HEAP32[$17>>2]|0;
-  _memcpy(($53|0),($54|0),($55|0))|0;
-  $56 = HEAP32[$17>>2]|0;
-  $57 = $8;
-  $58 = (($57) + ($56)|0);
-  $8 = $58;
-  $59 = HEAP32[$17>>2]|0;
-  $60 = (2 + ($59))|0;
-  $61 = $11;
-  $62 = (($61) + ($60))|0;
-  $11 = $62;
-  $63 = $15;
-  $64 = (($63) + 1)<<16>>16;
-  $15 = $64;
- }
- $65 = $7;
- $66 = $8;
- $67 = $9;
- $68 = $10;
- $69 = (_write_debug_record($40,$65,$66,$67,$68)|0);
- $14 = $69;
- $70 = $14;
- $71 = $11;
- $72 = (($71) + ($70))|0;
- $11 = $72;
- $73 = $13;
- ;HEAP8[$73>>0]=HEAP8[54486>>0]|0;HEAP8[$73+1>>0]=HEAP8[54486+1>>0]|0;HEAP8[$73+2>>0]=HEAP8[54486+2>>0]|0;HEAP8[$73+3>>0]=HEAP8[54486+3>>0]|0;
- $74 = $11;
- $75 = $13;
- $76 = ((($75)) + 4|0);
- (_uint32_to_bin($74,$76)|0);
- $5 = 0;
- $77 = $5;
- STACKTOP = sp;return ($77|0);
-}
-function _write_section_lineno($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;
- var $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $or$cond = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $4 = $0;
- $5 = $1;
- $6 = $2;
- $7 = 0;
- $8 = 0;
- $10 = $6;
- $9 = $10;
- $11 = $4;
- $12 = ($11|0)==(0|0);
- $13 = $6;
- $14 = ($13|0)==(0|0);
- $or$cond = $12 | $14;
- if ($or$cond) {
-  $3 = -7;
-  $29 = $3;
-  STACKTOP = sp;return ($29|0);
- } else {
-  $15 = $9;
-  $16 = ((($15)) + 8|0);
-  $9 = $16;
-  $17 = $7;
-  $18 = (($17) + 8)|0;
-  $7 = $18;
-  $19 = $4;
-  $20 = $5;
-  $21 = $9;
-  $22 = (_write_lineno_record($19,$20,$21)|0);
-  $8 = $22;
-  $23 = $8;
-  $24 = $7;
-  $25 = (($24) + ($23))|0;
-  $7 = $25;
-  $26 = $4;
-  $27 = $7;
-  $28 = $6;
-  (_write_section_lineno_header($26,$27,$28)|0);
-  $3 = 0;
-  $29 = $3;
-  STACKTOP = sp;return ($29|0);
- }
- return (0)|0;
-}
-function _write_section_lv($0,$1,$2,$3,$4) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- $4 = $4|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;
- var $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $5 = 0, $6 = 0, $7 = 0;
- var $8 = 0, $9 = 0, $or$cond = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);
- $11 = sp + 12|0;
- $6 = $0;
- $7 = $1;
- $8 = $2;
- $9 = $3;
- $10 = $4;
- $15 = $8;
- HEAP32[$11>>2] = $15;
- $14 = 0;
- $16 = $6;
- $17 = ($16|0)==(0|0);
- $18 = HEAP32[$11>>2]|0;
- $19 = ($18|0)==(0|0);
- $or$cond = $17 | $19;
- if ($or$cond) {
-  $5 = -7;
-  $46 = $5;
-  STACKTOP = sp;return ($46|0);
- }
- $20 = HEAP32[$11>>2]|0;
- $12 = $20;
- $21 = HEAP32[$11>>2]|0;
- $22 = ((($21)) + 8|0);
- HEAP32[$11>>2] = $22;
- $23 = $6;
- $24 = $9;
- $25 = $10;
- $26 = (_write_lv_sym_table($23,$11,$24,$25)|0);
- $14 = $26;
- $27 = $14;
- $28 = ($27|0)!=(0);
- if (!($28)) {
-  $29 = $6;
-  $30 = $7;
-  $31 = $9;
-  $32 = $10;
-  $33 = (_write_lv_record($29,$30,$11,$31,$32)|0);
-  $14 = $33;
-  $34 = $14;
-  $35 = ($34|0)!=(0);
-  if (!($35)) {
-   $36 = $12;
-   ;HEAP8[$36>>0]=HEAP8[54476>>0]|0;HEAP8[$36+1>>0]=HEAP8[54476+1>>0]|0;HEAP8[$36+2>>0]=HEAP8[54476+2>>0]|0;HEAP8[$36+3>>0]=HEAP8[54476+3>>0]|0;
-   $37 = HEAP32[$11>>2]|0;
-   $38 = $8;
-   $39 = $37;
-   $40 = $38;
-   $41 = (($39) - ($40))|0;
-   $13 = $41;
-   $42 = $13;
-   $43 = $12;
-   $44 = ((($43)) + 4|0);
-   (_uint32_to_bin($42,$44)|0);
-  }
- }
- $45 = $14;
- $5 = $45;
- $46 = $5;
- STACKTOP = sp;return ($46|0);
-}
-function _write_footer($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $4 = sp + 8|0;
- $2 = $0;
- $3 = $1;
- ;HEAP8[$4>>0]=HEAP8[54471>>0]|0;HEAP8[$4+1>>0]=HEAP8[54471+1>>0]|0;HEAP8[$4+2>>0]=HEAP8[54471+2>>0]|0;HEAP8[$4+3>>0]=HEAP8[54471+3>>0]|0;
- $5 = ((($4)) + 4|0);
- (_uint32_to_bin(8,$5)|0);
- $6 = $3;
- ;HEAP8[$6>>0]=HEAP8[$4>>0]|0;HEAP8[$6+1>>0]=HEAP8[$4+1>>0]|0;HEAP8[$6+2>>0]=HEAP8[$4+2>>0]|0;HEAP8[$6+3>>0]=HEAP8[$4+3>>0]|0;HEAP8[$6+4>>0]=HEAP8[$4+4>>0]|0;HEAP8[$6+5>>0]=HEAP8[$4+5>>0]|0;HEAP8[$6+6>>0]=HEAP8[$4+6>>0]|0;HEAP8[$6+7>>0]=HEAP8[$4+7>>0]|0;
- STACKTOP = sp;return 8;
-}
-function _write_rite_binary_header($0,$1,$2,$3) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;
- var $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0;
- var $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $4 = $0;
- $5 = $1;
- $6 = $2;
- $7 = $3;
- $11 = $6;
- $8 = $11;
- $12 = $7;
- $13 = $12&255;
- $14 = $13 & 6;
- switch ($14|0) {
- case 2:  {
-  label = 2;
-  break;
- }
- case 4:  {
-  label = 3;
-  break;
- }
- case 6:  {
-  $17 = (_bigendian_p_3()|0);
-  $18 = ($17|0)!=(0);
-  if ($18) {
-   label = 2;
-  } else {
-   label = 3;
-  }
-  break;
- }
- default: {
- }
- }
- if ((label|0) == 2) {
-  $15 = $8;
-  ;HEAP8[$15>>0]=HEAP8[54446>>0]|0;HEAP8[$15+1>>0]=HEAP8[54446+1>>0]|0;HEAP8[$15+2>>0]=HEAP8[54446+2>>0]|0;HEAP8[$15+3>>0]=HEAP8[54446+3>>0]|0;
- }
- else if ((label|0) == 3) {
-  $16 = $8;
-  ;HEAP8[$16>>0]=HEAP8[54451>>0]|0;HEAP8[$16+1>>0]=HEAP8[54451+1>>0]|0;HEAP8[$16+2>>0]=HEAP8[54451+2>>0]|0;HEAP8[$16+3>>0]=HEAP8[54451+3>>0]|0;
- }
- $19 = $8;
- $20 = ((($19)) + 4|0);
- ;HEAP8[$20>>0]=HEAP8[54456>>0]|0;HEAP8[$20+1>>0]=HEAP8[54456+1>>0]|0;HEAP8[$20+2>>0]=HEAP8[54456+2>>0]|0;HEAP8[$20+3>>0]=HEAP8[54456+3>>0]|0;
- $21 = $8;
- $22 = ((($21)) + 14|0);
- ;HEAP8[$22>>0]=HEAP8[54461>>0]|0;HEAP8[$22+1>>0]=HEAP8[54461+1>>0]|0;HEAP8[$22+2>>0]=HEAP8[54461+2>>0]|0;HEAP8[$22+3>>0]=HEAP8[54461+3>>0]|0;
- $23 = $8;
- $24 = ((($23)) + 18|0);
- ;HEAP8[$24>>0]=HEAP8[54466>>0]|0;HEAP8[$24+1>>0]=HEAP8[54466+1>>0]|0;HEAP8[$24+2>>0]=HEAP8[54466+2>>0]|0;HEAP8[$24+3>>0]=HEAP8[54466+3>>0]|0;
- $25 = $5;
- $26 = $8;
- $27 = ((($26)) + 10|0);
- (_uint32_to_bin($25,$27)|0);
- $28 = $8;
- $29 = ((($28)) + 8|0);
- $30 = $6;
- $31 = $29;
- $32 = $30;
- $33 = (($31) - ($32))|0;
- $34 = (($33) + 2)|0;
- $10 = $34;
- $35 = $6;
- $36 = $10;
- $37 = (($35) + ($36)|0);
- $38 = $5;
- $39 = $10;
- $40 = (($38) - ($39))|0;
- $41 = (_calc_crc_16_ccitt($37,$40,0)|0);
- $9 = $41;
- $42 = $9;
- $43 = $8;
- $44 = ((($43)) + 8|0);
- (_uint16_to_bin($42,$44)|0);
- STACKTOP = sp;return 0;
-}
-function _bigendian_p_3() {
- var $0 = 0, $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $0 = sp + 4|0;
- HEAP32[$0>>2] = 1;
- $1 = $0;
- $2 = $1;
- $3 = HEAP8[$2>>0]|0;
- $4 = $3 << 24 >> 24;
- $5 = ($4|0)!=(0);
- $6 = $5 ? 0 : 1;
- STACKTOP = sp;return ($6|0);
-}
-function _uint32_to_bin($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $3 = 0, $4 = 0, $5 = 0;
- var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $4 = $2;
- $5 = $4 >>> 24;
- $6 = $5 & 255;
- $7 = $6&255;
- $8 = $3;
- $9 = ((($8)) + 1|0);
- $3 = $9;
- HEAP8[$8>>0] = $7;
- $10 = $2;
- $11 = $10 >>> 16;
- $12 = $11 & 255;
- $13 = $12&255;
- $14 = $3;
- $15 = ((($14)) + 1|0);
- $3 = $15;
- HEAP8[$14>>0] = $13;
- $16 = $2;
- $17 = $16 >>> 8;
- $18 = $17 & 255;
- $19 = $18&255;
- $20 = $3;
- $21 = ((($20)) + 1|0);
- $3 = $21;
- HEAP8[$20>>0] = $19;
- $22 = $2;
- $23 = $22 & 255;
- $24 = $23&255;
- $25 = $3;
- HEAP8[$25>>0] = $24;
- STACKTOP = sp;return 4;
-}
-function _uint16_to_bin($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $4 = $2;
- $5 = $4&65535;
- $6 = $5 >> 8;
- $7 = $6 & 255;
- $8 = $7&255;
- $9 = $3;
- $10 = ((($9)) + 1|0);
- $3 = $10;
- HEAP8[$9>>0] = $8;
- $11 = $2;
- $12 = $11&65535;
- $13 = $12 & 255;
- $14 = $13&255;
- $15 = $3;
- HEAP8[$15>>0] = $14;
- STACKTOP = sp;return 2;
-}
-function _write_lv_sym_table($0,$1,$2,$3) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;
- var $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0;
- var label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $11 = sp;
- $4 = $0;
- $5 = $1;
- $6 = $2;
- $7 = $3;
- $12 = $5;
- $13 = HEAP32[$12>>2]|0;
- $8 = $13;
- $14 = $7;
- $15 = $8;
- $16 = (_uint32_to_bin($14,$15)|0);
- $17 = $8;
- $18 = (($17) + ($16)|0);
- $8 = $18;
- $9 = 0;
- while(1) {
-  $19 = $9;
-  $20 = $7;
-  $21 = ($19>>>0)<($20>>>0);
-  if (!($21)) {
-   break;
-  }
-  $22 = $4;
-  $23 = $6;
-  $24 = $9;
-  $25 = (($23) + ($24<<2)|0);
-  $26 = HEAP32[$25>>2]|0;
-  $27 = (_mrb_sym2name_len($22,$26,$11)|0);
-  $10 = $27;
-  $28 = HEAP32[$11>>2]|0;
-  $29 = $28&65535;
-  $30 = $8;
-  $31 = (_uint16_to_bin($29,$30)|0);
-  $32 = $8;
-  $33 = (($32) + ($31)|0);
-  $8 = $33;
-  $34 = $8;
-  $35 = $10;
-  $36 = HEAP32[$11>>2]|0;
-  _memcpy(($34|0),($35|0),($36|0))|0;
-  $37 = HEAP32[$11>>2]|0;
-  $38 = $8;
-  $39 = (($38) + ($37)|0);
-  $8 = $39;
-  $40 = $9;
-  $41 = (($40) + 1)|0;
-  $9 = $41;
- }
- $42 = $8;
- $43 = $5;
- HEAP32[$43>>2] = $42;
- STACKTOP = sp;return 0;
-}
-function _write_lv_record($0,$1,$2,$3,$4) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- $4 = $4|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;
- var $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0;
- var $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0;
- var $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $10 = sp + 8|0;
- $5 = $0;
- $6 = $1;
- $7 = $2;
- $8 = $3;
- $9 = $4;
- $13 = $7;
- $14 = HEAP32[$13>>2]|0;
- HEAP32[$10>>2] = $14;
- $11 = 0;
- while(1) {
-  $15 = $11;
-  $16 = (($15) + 1)|0;
-  $17 = $6;
-  $18 = HEAP16[$17>>1]|0;
-  $19 = $18&65535;
-  $20 = ($16>>>0)<($19>>>0);
-  if (!($20)) {
-   break;
-  }
-  $21 = $6;
-  $22 = ((($21)) + 24|0);
-  $23 = HEAP32[$22>>2]|0;
-  $24 = $11;
-  $25 = (($23) + ($24<<3)|0);
-  $26 = HEAP32[$25>>2]|0;
-  $27 = ($26|0)==(0);
-  if ($27) {
-   $28 = HEAP32[$10>>2]|0;
-   $29 = (_uint16_to_bin(-1,$28)|0);
-   $30 = HEAP32[$10>>2]|0;
-   $31 = (($30) + ($29)|0);
-   HEAP32[$10>>2] = $31;
-   $32 = HEAP32[$10>>2]|0;
-   $33 = (_uint16_to_bin(0,$32)|0);
-   $34 = HEAP32[$10>>2]|0;
-   $35 = (($34) + ($33)|0);
-   HEAP32[$10>>2] = $35;
-  } else {
-   $36 = $8;
-   $37 = $9;
-   $38 = $6;
-   $39 = ((($38)) + 24|0);
-   $40 = HEAP32[$39>>2]|0;
-   $41 = $11;
-   $42 = (($40) + ($41<<3)|0);
-   $43 = HEAP32[$42>>2]|0;
-   $44 = (_find_filename_index($36,$37,$43)|0);
-   $12 = $44;
-   $45 = $12;
-   $46 = $45&65535;
-   $47 = HEAP32[$10>>2]|0;
-   $48 = (_uint16_to_bin($46,$47)|0);
-   $49 = HEAP32[$10>>2]|0;
-   $50 = (($49) + ($48)|0);
-   HEAP32[$10>>2] = $50;
-   $51 = $6;
-   $52 = ((($51)) + 24|0);
-   $53 = HEAP32[$52>>2]|0;
-   $54 = $11;
-   $55 = (($53) + ($54<<3)|0);
-   $56 = ((($55)) + 4|0);
-   $57 = HEAP16[$56>>1]|0;
-   $58 = HEAP32[$10>>2]|0;
-   $59 = (_uint16_to_bin($57,$58)|0);
-   $60 = HEAP32[$10>>2]|0;
-   $61 = (($60) + ($59)|0);
-   HEAP32[$10>>2] = $61;
-  }
-  $62 = $11;
-  $63 = (($62) + 1)|0;
-  $11 = $63;
- }
- $11 = 0;
- while(1) {
-  $64 = $11;
-  $65 = $6;
-  $66 = ((($65)) + 52|0);
-  $67 = HEAP32[$66>>2]|0;
-  $68 = ($64>>>0)<($67>>>0);
-  if (!($68)) {
-   break;
-  }
-  $69 = $5;
-  $70 = $6;
-  $71 = ((($70)) + 20|0);
-  $72 = HEAP32[$71>>2]|0;
-  $73 = $11;
-  $74 = (($72) + ($73<<2)|0);
-  $75 = HEAP32[$74>>2]|0;
-  $76 = $8;
-  $77 = $9;
-  (_write_lv_record($69,$75,$10,$76,$77)|0);
-  $78 = $11;
-  $79 = (($78) + 1)|0;
-  $11 = $79;
- }
- $80 = HEAP32[$10>>2]|0;
- $81 = $7;
- HEAP32[$81>>2] = $80;
- STACKTOP = sp;return 0;
-}
-function _find_filename_index($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $4 = $0;
- $5 = $1;
- $6 = $2;
- $7 = 0;
- while(1) {
-  $8 = $7;
-  $9 = $5;
-  $10 = ($8|0)<($9|0);
-  if (!($10)) {
-   label = 6;
-   break;
-  }
-  $11 = $4;
-  $12 = $7;
-  $13 = (($11) + ($12<<2)|0);
-  $14 = HEAP32[$13>>2]|0;
-  $15 = $6;
-  $16 = ($14|0)==($15|0);
-  $17 = $7;
-  if ($16) {
-   label = 4;
-   break;
-  }
-  $18 = (($17) + 1)|0;
-  $7 = $18;
- }
- if ((label|0) == 4) {
-  $3 = $17;
-  $19 = $3;
-  STACKTOP = sp;return ($19|0);
- }
- else if ((label|0) == 6) {
-  $3 = -1;
-  $19 = $3;
-  STACKTOP = sp;return ($19|0);
- }
- return (0)|0;
-}
-function _write_lineno_record($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;
- var $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $3 = $0;
- $4 = $1;
- $5 = $2;
- $8 = 0;
- $9 = $3;
- $10 = $4;
- $11 = $5;
- $12 = (_write_lineno_record_1($9,$10,$11)|0);
- $7 = $12;
- $13 = $7;
- $14 = $5;
- $15 = (($14) + ($13)|0);
- $5 = $15;
- $16 = $7;
- $17 = $8;
- $18 = (($17) + ($16))|0;
- $8 = $18;
- $6 = 0;
- while(1) {
-  $19 = $6;
-  $20 = $4;
-  $21 = ((($20)) + 52|0);
-  $22 = HEAP32[$21>>2]|0;
-  $23 = ($19>>>0)<($22>>>0);
-  if (!($23)) {
-   break;
-  }
-  $24 = $3;
-  $25 = $4;
-  $26 = $5;
-  $27 = (_write_lineno_record($24,$25,$26)|0);
-  $7 = $27;
-  $28 = $7;
-  $29 = $5;
-  $30 = (($29) + ($28)|0);
-  $5 = $30;
-  $31 = $7;
-  $32 = $8;
-  $33 = (($32) + ($31))|0;
-  $8 = $33;
-  $34 = $6;
-  $35 = (($34) + 1)|0;
-  $6 = $35;
- }
- $36 = $8;
- STACKTOP = sp;return ($36|0);
-}
-function _write_section_lineno_header($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $0;
- $4 = $1;
- $5 = $2;
- $7 = $5;
- $6 = $7;
- $8 = $6;
- ;HEAP8[$8>>0]=HEAP8[54481>>0]|0;HEAP8[$8+1>>0]=HEAP8[54481+1>>0]|0;HEAP8[$8+2>>0]=HEAP8[54481+2>>0]|0;HEAP8[$8+3>>0]=HEAP8[54481+3>>0]|0;
- $9 = $4;
- $10 = $6;
- $11 = ((($10)) + 4|0);
- (_uint32_to_bin($9,$11)|0);
- STACKTOP = sp;return 0;
-}
-function _write_lineno_record_1($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;
- var $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0;
- var $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0;
- var $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $3 = $0;
- $4 = $1;
- $5 = $2;
- $10 = $5;
- $6 = $10;
- $11 = $6;
- $12 = ((($11)) + 4|0);
- $6 = $12;
- $13 = $4;
- $14 = ((($13)) + 28|0);
- $15 = HEAP32[$14>>2]|0;
- $16 = ($15|0)!=(0|0);
- if ($16) {
-  $17 = $4;
-  $18 = ((($17)) + 28|0);
-  $19 = HEAP32[$18>>2]|0;
-  $20 = (_strlen($19)|0);
-  $8 = $20;
- } else {
-  $8 = 0;
- }
- $21 = $8;
- $22 = $21&65535;
- $23 = $6;
- $24 = (_uint16_to_bin($22,$23)|0);
- $25 = $6;
- $26 = (($25) + ($24)|0);
- $6 = $26;
- $27 = $8;
- $28 = ($27|0)!=(0);
- if ($28) {
-  $29 = $6;
-  $30 = $4;
-  $31 = ((($30)) + 28|0);
-  $32 = HEAP32[$31>>2]|0;
-  $33 = $8;
-  _memcpy(($29|0),($32|0),($33|0))|0;
-  $34 = $8;
-  $35 = $6;
-  $36 = (($35) + ($34)|0);
-  $6 = $36;
- }
- $37 = $4;
- $38 = ((($37)) + 32|0);
- $39 = HEAP32[$38>>2]|0;
- $40 = ($39|0)!=(0|0);
- if (!($40)) {
-  $65 = $6;
-  $66 = (_uint32_to_bin(0,$65)|0);
-  $67 = $6;
-  $68 = (($67) + ($66)|0);
-  $6 = $68;
-  $69 = $6;
-  $70 = $5;
-  $71 = $69;
-  $72 = $70;
-  $73 = (($71) - ($72))|0;
-  $9 = $73;
-  $74 = $9;
-  $75 = $5;
-  (_uint32_to_bin($74,$75)|0);
-  $76 = $9;
-  STACKTOP = sp;return ($76|0);
- }
- $41 = $4;
- $42 = ((($41)) + 40|0);
- $43 = HEAP32[$42>>2]|0;
- $44 = $6;
- $45 = (_uint32_to_bin($43,$44)|0);
- $46 = $6;
- $47 = (($46) + ($45)|0);
- $6 = $47;
- $7 = 0;
- while(1) {
-  $48 = $7;
-  $49 = $4;
-  $50 = ((($49)) + 40|0);
-  $51 = HEAP32[$50>>2]|0;
-  $52 = ($48>>>0)<($51>>>0);
-  if (!($52)) {
-   break;
-  }
-  $53 = $4;
-  $54 = ((($53)) + 32|0);
-  $55 = HEAP32[$54>>2]|0;
-  $56 = $7;
-  $57 = (($55) + ($56<<1)|0);
-  $58 = HEAP16[$57>>1]|0;
-  $59 = $6;
-  $60 = (_uint16_to_bin($58,$59)|0);
-  $61 = $6;
-  $62 = (($61) + ($60)|0);
-  $6 = $62;
-  $63 = $7;
-  $64 = (($63) + 1)|0;
-  $7 = $64;
- }
- $69 = $6;
- $70 = $5;
- $71 = $69;
- $72 = $70;
- $73 = (($71) - ($72))|0;
- $9 = $73;
- $74 = $9;
- $75 = $5;
- (_uint32_to_bin($74,$75)|0);
- $76 = $9;
- STACKTOP = sp;return ($76|0);
-}
-function _write_debug_record($0,$1,$2,$3,$4) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- $4 = $4|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;
- var $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $5 = 0, $6 = 0, $7 = 0;
- var $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $5 = $0;
- $6 = $1;
- $7 = $2;
- $8 = $3;
- $9 = $4;
- $13 = $5;
- $14 = $6;
- $15 = $7;
- $16 = $8;
- $17 = $9;
- $18 = (_write_debug_record_1($13,$14,$15,$16,$17)|0);
- $11 = $18;
- $10 = $18;
- $19 = $11;
- $20 = $7;
- $21 = (($20) + ($19)|0);
- $7 = $21;
- $12 = 0;
- while(1) {
-  $22 = $12;
-  $23 = $6;
-  $24 = ((($23)) + 52|0);
-  $25 = HEAP32[$24>>2]|0;
-  $26 = ($22>>>0)<($25>>>0);
-  if (!($26)) {
-   break;
-  }
-  $27 = $5;
-  $28 = $6;
-  $29 = ((($28)) + 20|0);
-  $30 = HEAP32[$29>>2]|0;
-  $31 = $12;
-  $32 = (($30) + ($31<<2)|0);
-  $33 = HEAP32[$32>>2]|0;
-  $34 = $7;
-  $35 = $8;
-  $36 = $9;
-  $37 = (_write_debug_record($27,$33,$34,$35,$36)|0);
-  $11 = $37;
-  $38 = $11;
-  $39 = $7;
-  $40 = (($39) + ($38)|0);
-  $7 = $40;
-  $41 = $11;
-  $42 = $10;
-  $43 = (($42) + ($41))|0;
-  $10 = $43;
-  $44 = $12;
-  $45 = (($44) + 1)|0;
-  $12 = $45;
- }
- $46 = $10;
- STACKTOP = sp;return ($46|0);
-}
-function _write_debug_record_1($0,$1,$2,$3,$4) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- $4 = $4|0;
- var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;
- var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0;
- var $136 = 0, $137 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $30 = 0, $31 = 0;
- var $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0;
- var $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0;
- var $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0;
- var $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);
- $5 = $0;
- $6 = $1;
- $7 = $2;
- $8 = $3;
- $9 = $4;
- $17 = $7;
- $18 = ((($17)) + 4|0);
- $10 = $18;
- $19 = $6;
- $20 = ((($19)) + 36|0);
- $21 = HEAP32[$20>>2]|0;
- $22 = ((($21)) + 4|0);
- $23 = HEAP16[$22>>1]|0;
- $24 = $10;
- $25 = (_uint16_to_bin($23,$24)|0);
- $26 = $10;
- $27 = (($26) + ($25)|0);
- $10 = $27;
- $11 = 0;
- while(1) {
-  $28 = $11;
-  $29 = $28&65535;
-  $30 = $6;
-  $31 = ((($30)) + 36|0);
-  $32 = HEAP32[$31>>2]|0;
-  $33 = ((($32)) + 4|0);
-  $34 = HEAP16[$33>>1]|0;
-  $35 = $34&65535;
-  $36 = ($29|0)<($35|0);
-  if (!($36)) {
-   break;
-  }
-  $37 = $6;
-  $38 = ((($37)) + 36|0);
-  $39 = HEAP32[$38>>2]|0;
-  $40 = ((($39)) + 8|0);
-  $41 = HEAP32[$40>>2]|0;
-  $42 = $11;
-  $43 = $42&65535;
-  $44 = (($41) + ($43<<2)|0);
-  $45 = HEAP32[$44>>2]|0;
-  $14 = $45;
-  $46 = $14;
-  $47 = HEAP32[$46>>2]|0;
-  $48 = $10;
-  $49 = (_uint32_to_bin($47,$48)|0);
-  $50 = $10;
-  $51 = (($50) + ($49)|0);
-  $10 = $51;
-  $52 = $8;
-  $53 = $9;
-  $54 = $53&65535;
-  $55 = $14;
-  $56 = ((($55)) + 8|0);
-  $57 = HEAP32[$56>>2]|0;
-  $58 = (_find_filename_index($52,$54,$57)|0);
-  $13 = $58;
-  $59 = $13;
-  $60 = $59&65535;
-  $61 = $10;
-  $62 = (_uint16_to_bin($60,$61)|0);
-  $63 = $10;
-  $64 = (($63) + ($62)|0);
-  $10 = $64;
-  $65 = $14;
-  $66 = ((($65)) + 12|0);
-  $67 = HEAP32[$66>>2]|0;
-  $68 = $10;
-  $69 = (_uint32_to_bin($67,$68)|0);
-  $70 = $10;
-  $71 = (($70) + ($69)|0);
-  $10 = $71;
-  $72 = $14;
-  $73 = ((($72)) + 16|0);
-  $74 = HEAP32[$73>>2]|0;
-  $75 = $74&255;
-  $76 = $10;
-  $77 = (_uint8_to_bin($75,$76)|0);
-  $78 = $10;
-  $79 = (($78) + ($77)|0);
-  $10 = $79;
-  $80 = $14;
-  $81 = ((($80)) + 16|0);
-  $82 = HEAP32[$81>>2]|0;
-  L4: do {
-   switch ($82|0) {
-   case 0:  {
-    $15 = 0;
-    while(1) {
-     $83 = $15;
-     $84 = $14;
-     $85 = ((($84)) + 12|0);
-     $86 = HEAP32[$85>>2]|0;
-     $87 = ($83>>>0)<($86>>>0);
-     if (!($87)) {
-      break L4;
-     }
-     $88 = $14;
-     $89 = ((($88)) + 20|0);
-     $90 = HEAP32[$89>>2]|0;
-     $91 = $15;
-     $92 = (($90) + ($91<<1)|0);
-     $93 = HEAP16[$92>>1]|0;
-     $94 = $10;
-     $95 = (_uint16_to_bin($93,$94)|0);
-     $96 = $10;
-     $97 = (($96) + ($95)|0);
-     $10 = $97;
-     $98 = $15;
-     $99 = (($98) + 1)|0;
-     $15 = $99;
-    }
-    break;
-   }
-   case 1:  {
-    $16 = 0;
-    while(1) {
-     $100 = $16;
-     $101 = $14;
-     $102 = ((($101)) + 12|0);
-     $103 = HEAP32[$102>>2]|0;
-     $104 = ($100>>>0)<($103>>>0);
-     if (!($104)) {
-      break L4;
-     }
-     $105 = $14;
-     $106 = ((($105)) + 20|0);
-     $107 = HEAP32[$106>>2]|0;
-     $108 = $16;
-     $109 = (($107) + ($108<<3)|0);
-     $110 = HEAP32[$109>>2]|0;
-     $111 = $10;
-     $112 = (_uint32_to_bin($110,$111)|0);
-     $113 = $10;
-     $114 = (($113) + ($112)|0);
-     $10 = $114;
-     $115 = $14;
-     $116 = ((($115)) + 20|0);
-     $117 = HEAP32[$116>>2]|0;
-     $118 = $16;
-     $119 = (($117) + ($118<<3)|0);
-     $120 = ((($119)) + 4|0);
-     $121 = HEAP16[$120>>1]|0;
-     $122 = $10;
-     $123 = (_uint16_to_bin($121,$122)|0);
-     $124 = $10;
-     $125 = (($124) + ($123)|0);
-     $10 = $125;
-     $126 = $16;
-     $127 = (($126) + 1)|0;
-     $16 = $127;
-    }
-    break;
-   }
-   default: {
-   }
-   }
-  } while(0);
-  $128 = $11;
-  $129 = (($128) + 1)<<16>>16;
-  $11 = $129;
- }
- $130 = $10;
- $131 = $7;
- $132 = $130;
- $133 = $131;
- $134 = (($132) - ($133))|0;
- $12 = $134;
- $135 = $12;
- $136 = $7;
- (_uint32_to_bin($135,$136)|0);
- $137 = $12;
- STACKTOP = sp;return ($137|0);
-}
-function _uint8_to_bin($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $4 = $2;
- $5 = $3;
- HEAP8[$5>>0] = $4;
- STACKTOP = sp;return 1;
-}
-function _write_irep_record($0,$1,$2,$3,$4) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- $4 = $4|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;
- var $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0;
- var $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0;
- var $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);
- $14 = sp;
- $6 = $0;
- $7 = $1;
- $8 = $2;
- $9 = $3;
- $10 = $4;
- $15 = $8;
- $12 = $15;
- $16 = $7;
- $17 = ($16|0)==(0|0);
- if ($17) {
-  $5 = -6;
-  $79 = $5;
-  STACKTOP = sp;return ($79|0);
- }
- $18 = $6;
- $19 = $7;
- $20 = (_get_irep_record_size_1($18,$19)|0);
- $21 = $9;
- HEAP32[$21>>2] = $20;
- $22 = $9;
- $23 = HEAP32[$22>>2]|0;
- $24 = ($23|0)==(0);
- if ($24) {
-  $5 = -1;
-  $79 = $5;
-  STACKTOP = sp;return ($79|0);
- }
- $25 = $6;
- $26 = $7;
- $27 = $8;
- $28 = (_write_irep_header($25,$26,$27)|0);
- $29 = $8;
- $30 = (($29) + ($28)|0);
- $8 = $30;
- $31 = $6;
- $32 = $7;
- $33 = $8;
- $34 = $10;
- $35 = (_write_iseq_block($31,$32,$33,$34)|0);
- $36 = $8;
- $37 = (($36) + ($35)|0);
- $8 = $37;
- $38 = $6;
- $39 = $7;
- $40 = $8;
- $41 = (_write_pool_block($38,$39,$40)|0);
- $42 = $8;
- $43 = (($42) + ($41)|0);
- $8 = $43;
- $44 = $6;
- $45 = $7;
- $46 = $8;
- $47 = (_write_syms_block($44,$45,$46)|0);
- $48 = $8;
- $49 = (($48) + ($47)|0);
- $8 = $49;
- $11 = 0;
- while(1) {
-  $50 = $11;
-  $51 = $7;
-  $52 = ((($51)) + 52|0);
-  $53 = HEAP32[$52>>2]|0;
-  $54 = ($50>>>0)<($53>>>0);
-  if (!($54)) {
-   label = 10;
-   break;
-  }
-  $55 = $6;
-  $56 = $7;
-  $57 = ((($56)) + 20|0);
-  $58 = HEAP32[$57>>2]|0;
-  $59 = $11;
-  $60 = (($58) + ($59<<2)|0);
-  $61 = HEAP32[$60>>2]|0;
-  $62 = $8;
-  $63 = $10;
-  $64 = (_write_irep_record($55,$61,$62,$14,$63)|0);
-  $13 = $64;
-  $65 = $13;
-  $66 = ($65|0)!=(0);
-  if ($66) {
-   label = 8;
-   break;
-  }
-  $68 = HEAP32[$14>>2]|0;
-  $69 = $8;
-  $70 = (($69) + ($68)|0);
-  $8 = $70;
-  $71 = $11;
-  $72 = (($71) + 1)|0;
-  $11 = $72;
- }
- if ((label|0) == 8) {
-  $67 = $13;
-  $5 = $67;
-  $79 = $5;
-  STACKTOP = sp;return ($79|0);
- }
- else if ((label|0) == 10) {
-  $73 = $8;
-  $74 = $12;
-  $75 = $73;
-  $76 = $74;
-  $77 = (($75) - ($76))|0;
-  $78 = $9;
-  HEAP32[$78>>2] = $77;
-  $5 = 0;
-  $79 = $5;
-  STACKTOP = sp;return ($79|0);
- }
- return (0)|0;
-}
-function _write_section_irep_header($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $0;
- $4 = $1;
- $5 = $2;
- $7 = $5;
- $6 = $7;
- $8 = $6;
- ;HEAP8[$8>>0]=HEAP8[54491>>0]|0;HEAP8[$8+1>>0]=HEAP8[54491+1>>0]|0;HEAP8[$8+2>>0]=HEAP8[54491+2>>0]|0;HEAP8[$8+3>>0]=HEAP8[54491+3>>0]|0;
- $9 = $4;
- $10 = $6;
- $11 = ((($10)) + 4|0);
- (_uint32_to_bin($9,$11)|0);
- $12 = $6;
- $13 = ((($12)) + 8|0);
- ;HEAP8[$13>>0]=HEAP8[54466>>0]|0;HEAP8[$13+1>>0]=HEAP8[54466+1>>0]|0;HEAP8[$13+2>>0]=HEAP8[54466+2>>0]|0;HEAP8[$13+3>>0]=HEAP8[54466+3>>0]|0;
- STACKTOP = sp;return 0;
-}
-function _get_irep_record_size_1($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0;
- var $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $4 = 0;
- $5 = $2;
- $6 = (_get_irep_header_size($5)|0);
- $7 = $4;
- $8 = (($7) + ($6))|0;
- $4 = $8;
- $9 = $2;
- $10 = $3;
- $11 = (_get_iseq_block_size($9,$10)|0);
- $12 = $4;
- $13 = (($12) + ($11))|0;
- $4 = $13;
- $14 = $2;
- $15 = $3;
- $16 = (_get_pool_block_size($14,$15)|0);
- $17 = $4;
- $18 = (($17) + ($16))|0;
- $4 = $18;
- $19 = $2;
- $20 = $3;
- $21 = (_get_syms_block_size($19,$20)|0);
- $22 = $4;
- $23 = (($22) + ($21))|0;
- $4 = $23;
- $24 = $4;
- STACKTOP = sp;return ($24|0);
-}
-function _write_irep_header($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;
- var $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $0;
- $4 = $1;
- $5 = $2;
- $7 = $5;
- $6 = $7;
- $8 = $3;
- $9 = $4;
- $10 = (_get_irep_record_size_1($8,$9)|0);
- $11 = $6;
- $12 = (_uint32_to_bin($10,$11)|0);
- $13 = $6;
- $14 = (($13) + ($12)|0);
- $6 = $14;
- $15 = $4;
- $16 = HEAP16[$15>>1]|0;
- $17 = $6;
- $18 = (_uint16_to_bin($16,$17)|0);
- $19 = $6;
- $20 = (($19) + ($18)|0);
- $6 = $20;
- $21 = $4;
- $22 = ((($21)) + 2|0);
- $23 = HEAP16[$22>>1]|0;
- $24 = $6;
- $25 = (_uint16_to_bin($23,$24)|0);
- $26 = $6;
- $27 = (($26) + ($25)|0);
- $6 = $27;
- $28 = $4;
- $29 = ((($28)) + 52|0);
- $30 = HEAP32[$29>>2]|0;
- $31 = $30&65535;
- $32 = $6;
- $33 = (_uint16_to_bin($31,$32)|0);
- $34 = $6;
- $35 = (($34) + ($33)|0);
- $6 = $35;
- $36 = $6;
- $37 = $5;
- $38 = $36;
- $39 = $37;
- $40 = (($38) - ($39))|0;
- STACKTOP = sp;return ($40|0);
-}
-function _write_iseq_block($0,$1,$2,$3) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;
- var $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0;
- var $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0;
- var $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $4 = $0;
- $5 = $1;
- $6 = $2;
- $7 = $3;
- $10 = $6;
- $8 = $10;
- $11 = $5;
- $12 = ((($11)) + 40|0);
- $13 = HEAP32[$12>>2]|0;
- $14 = $8;
- $15 = (_uint32_to_bin($13,$14)|0);
- $16 = $8;
- $17 = (($16) + ($15)|0);
- $8 = $17;
- $18 = $8;
- $19 = (_write_padding($18)|0);
- $20 = $8;
- $21 = (($20) + ($19)|0);
- $8 = $21;
- $22 = $7;
- $23 = $22&255;
- $24 = $23 & 6;
- switch ($24|0) {
- case 2:  {
-  $25 = (_bigendian_p_3()|0);
-  $26 = ($25|0)!=(0);
-  if (!($26)) {
-   $9 = 0;
-   while(1) {
-    $27 = $9;
-    $28 = $5;
-    $29 = ((($28)) + 40|0);
-    $30 = HEAP32[$29>>2]|0;
-    $31 = ($27>>>0)<($30>>>0);
-    if (!($31)) {
-     break;
-    }
-    $32 = $5;
-    $33 = ((($32)) + 8|0);
-    $34 = HEAP32[$33>>2]|0;
-    $35 = $9;
-    $36 = (($34) + ($35<<2)|0);
-    $37 = HEAP32[$36>>2]|0;
-    $38 = $8;
-    $39 = (_uint32_to_bin($37,$38)|0);
-    $40 = $8;
-    $41 = (($40) + ($39)|0);
-    $8 = $41;
-    $42 = $9;
-    $43 = (($42) + 1)|0;
-    $9 = $43;
-   }
-   $77 = $8;
-   $78 = $6;
-   $79 = $77;
-   $80 = $78;
-   $81 = (($79) - ($80))|0;
-   STACKTOP = sp;return ($81|0);
-  }
-  break;
- }
- case 4:  {
-  $44 = (_bigendian_p_3()|0);
-  $45 = ($44|0)!=(0);
-  if ($45) {
-   $9 = 0;
-   while(1) {
-    $46 = $9;
-    $47 = $5;
-    $48 = ((($47)) + 40|0);
-    $49 = HEAP32[$48>>2]|0;
-    $50 = ($46>>>0)<($49>>>0);
-    if (!($50)) {
-     break;
-    }
-    $51 = $5;
-    $52 = ((($51)) + 8|0);
-    $53 = HEAP32[$52>>2]|0;
-    $54 = $9;
-    $55 = (($53) + ($54<<2)|0);
-    $56 = HEAP32[$55>>2]|0;
-    $57 = $8;
-    $58 = (_uint32l_to_bin($56,$57)|0);
-    $59 = $8;
-    $60 = (($59) + ($58)|0);
-    $8 = $60;
-    $61 = $9;
-    $62 = (($61) + 1)|0;
-    $9 = $62;
-   }
-   $77 = $8;
-   $78 = $6;
-   $79 = $77;
-   $80 = $78;
-   $81 = (($79) - ($80))|0;
-   STACKTOP = sp;return ($81|0);
-  }
-  break;
- }
- case 6:  {
-  break;
- }
- default: {
-  $77 = $8;
-  $78 = $6;
-  $79 = $77;
-  $80 = $78;
-  $81 = (($79) - ($80))|0;
-  STACKTOP = sp;return ($81|0);
- }
- }
- $63 = $8;
- $64 = $5;
- $65 = ((($64)) + 8|0);
- $66 = HEAP32[$65>>2]|0;
- $67 = $5;
- $68 = ((($67)) + 40|0);
- $69 = HEAP32[$68>>2]|0;
- $70 = $69<<2;
- _memcpy(($63|0),($66|0),($70|0))|0;
- $71 = $5;
- $72 = ((($71)) + 40|0);
- $73 = HEAP32[$72>>2]|0;
- $74 = $73<<2;
- $75 = $8;
- $76 = (($75) + ($74)|0);
- $8 = $76;
- $77 = $8;
- $78 = $6;
- $79 = $77;
- $80 = $78;
- $81 = (($79) - ($80))|0;
- STACKTOP = sp;return ($81|0);
-}
-function _write_pool_block($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $12 = 0, $13 = 0, $14 = 0;
- var $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0;
- var $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0;
- var $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0;
- var $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0;
- var $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 96|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(96|0);
- $$byval_copy1 = sp + 72|0;
- $$byval_copy = sp + 64|0;
- $9 = sp + 32|0;
- $12 = sp + 16|0;
- $13 = sp + 8|0;
- $3 = $0;
- $4 = $1;
- $5 = $2;
- $15 = $5;
- $7 = $15;
- $16 = $4;
- $17 = ((($16)) + 44|0);
- $18 = HEAP32[$17>>2]|0;
- $19 = $7;
- $20 = (_uint32_to_bin($18,$19)|0);
- $21 = $7;
- $22 = (($21) + ($20)|0);
- $7 = $22;
- $6 = 0;
- while(1) {
-  $23 = $6;
-  $24 = $4;
-  $25 = ((($24)) + 44|0);
-  $26 = HEAP32[$25>>2]|0;
-  $27 = ($23>>>0)<($26>>>0);
-  if (!($27)) {
-   break;
-  }
-  $28 = $3;
-  $29 = (_mrb_gc_arena_save($28)|0);
-  $11 = $29;
-  $30 = $4;
-  $31 = ((($30)) + 12|0);
-  $32 = HEAP32[$31>>2]|0;
-  $33 = $6;
-  $34 = (($32) + ($33<<3)|0);
-  $35 = ((($34)) + 4|0);
-  $36 = HEAP32[$35>>2]|0;
-  switch ($36|0) {
-  case 3:  {
-   $37 = $7;
-   $38 = (_uint8_to_bin(1,$37)|0);
-   $39 = $7;
-   $40 = (($39) + ($38)|0);
-   $7 = $40;
-   $41 = $3;
-   $42 = $4;
-   $43 = ((($42)) + 12|0);
-   $44 = HEAP32[$43>>2]|0;
-   $45 = $6;
-   $46 = (($44) + ($45<<3)|0);
-   ;HEAP32[$$byval_copy>>2]=HEAP32[$46>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$46+4>>2]|0;
-   _mrb_fixnum_to_str($12,$41,$$byval_copy,10);
-   ;HEAP32[$9>>2]=HEAP32[$12>>2]|0;HEAP32[$9+4>>2]=HEAP32[$12+4>>2]|0;
-   label = 7;
-   break;
-  }
-  case 6:  {
-   $47 = $7;
-   $48 = (_uint8_to_bin(2,$47)|0);
-   $49 = $7;
-   $50 = (($49) + ($48)|0);
-   $7 = $50;
-   $51 = $3;
-   $52 = $4;
-   $53 = ((($52)) + 12|0);
-   $54 = HEAP32[$53>>2]|0;
-   $55 = $6;
-   $56 = (($54) + ($55<<3)|0);
-   ;HEAP32[$$byval_copy1>>2]=HEAP32[$56>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$56+4>>2]|0;
-   _mrb_float_to_str($13,$51,$$byval_copy1,54496);
-   ;HEAP32[$9>>2]=HEAP32[$13>>2]|0;HEAP32[$9+4>>2]=HEAP32[$13+4>>2]|0;
-   label = 7;
-   break;
-  }
-  case 16:  {
-   $57 = $7;
-   $58 = (_uint8_to_bin(0,$57)|0);
-   $59 = $7;
-   $60 = (($59) + ($58)|0);
-   $7 = $60;
-   $61 = $4;
-   $62 = ((($61)) + 12|0);
-   $63 = HEAP32[$62>>2]|0;
-   $64 = $6;
-   $65 = (($63) + ($64<<3)|0);
-   ;HEAP32[$9>>2]=HEAP32[$65>>2]|0;HEAP32[$9+4>>2]=HEAP32[$65+4>>2]|0;
-   label = 7;
-   break;
-  }
-  default: {
-  }
-  }
-  if ((label|0) == 7) {
-   label = 0;
-   $66 = HEAP32[$9>>2]|0;
-   $67 = HEAP32[$66>>2]|0;
-   $68 = $67 >>> 11;
-   $69 = $68 & 8;
-   $70 = ($69|0)!=(0);
-   $71 = HEAP32[$9>>2]|0;
-   $72 = ((($71)) + 12|0);
-   if ($70) {
-    $75 = $72;
-   } else {
-    $73 = ((($72)) + 8|0);
-    $74 = HEAP32[$73>>2]|0;
-    $75 = $74;
-   }
-   $10 = $75;
-   $76 = HEAP32[$9>>2]|0;
-   $77 = HEAP32[$76>>2]|0;
-   $78 = $77 >>> 11;
-   $79 = $78 & 8;
-   $80 = ($79|0)!=(0);
-   $81 = HEAP32[$9>>2]|0;
-   if ($80) {
-    $82 = HEAP32[$81>>2]|0;
-    $83 = $82 >>> 11;
-    $84 = $83 & 496;
-    $85 = $84 >> 4;
-    $88 = $85;
-   } else {
-    $86 = ((($81)) + 12|0);
-    $87 = HEAP32[$86>>2]|0;
-    $88 = $87;
-   }
-   $14 = $88;
-   $89 = $14;
-   $90 = $89&65535;
-   $8 = $90;
-   $91 = $8;
-   $92 = $7;
-   $93 = (_uint16_to_bin($91,$92)|0);
-   $94 = $7;
-   $95 = (($94) + ($93)|0);
-   $7 = $95;
-   $96 = $7;
-   $97 = $10;
-   $98 = $8;
-   $99 = $98&65535;
-   _memcpy(($96|0),($97|0),($99|0))|0;
-   $100 = $8;
-   $101 = $100&65535;
-   $102 = $7;
-   $103 = (($102) + ($101)|0);
-   $7 = $103;
-   $104 = $3;
-   $105 = $11;
-   _mrb_gc_arena_restore($104,$105);
-  }
-  $106 = $6;
-  $107 = (($106) + 1)|0;
-  $6 = $107;
- }
- $108 = $7;
- $109 = $5;
- $110 = $108;
- $111 = $109;
- $112 = (($110) - ($111))|0;
- STACKTOP = sp;return ($112|0);
-}
-function _write_syms_block($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;
- var $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0;
- var $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $7 = 0;
- var $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $9 = sp;
- $3 = $0;
- $4 = $1;
- $5 = $2;
- $10 = $5;
- $7 = $10;
- $11 = $4;
- $12 = ((($11)) + 48|0);
- $13 = HEAP32[$12>>2]|0;
- $14 = $7;
- $15 = (_uint32_to_bin($13,$14)|0);
- $16 = $7;
- $17 = (($16) + ($15)|0);
- $7 = $17;
- $6 = 0;
- while(1) {
-  $18 = $6;
-  $19 = $4;
-  $20 = ((($19)) + 48|0);
-  $21 = HEAP32[$20>>2]|0;
-  $22 = ($18>>>0)<($21>>>0);
-  if (!($22)) {
-   break;
-  }
-  $23 = $4;
-  $24 = ((($23)) + 16|0);
-  $25 = HEAP32[$24>>2]|0;
-  $26 = $6;
-  $27 = (($25) + ($26<<2)|0);
-  $28 = HEAP32[$27>>2]|0;
-  $29 = ($28|0)!=(0);
-  if ($29) {
-   $30 = $3;
-   $31 = $4;
-   $32 = ((($31)) + 16|0);
-   $33 = HEAP32[$32>>2]|0;
-   $34 = $6;
-   $35 = (($33) + ($34<<2)|0);
-   $36 = HEAP32[$35>>2]|0;
-   $37 = (_mrb_sym2name_len($30,$36,$9)|0);
-   $8 = $37;
-   $38 = HEAP32[$9>>2]|0;
-   $39 = $38&65535;
-   $40 = $7;
-   $41 = (_uint16_to_bin($39,$40)|0);
-   $42 = $7;
-   $43 = (($42) + ($41)|0);
-   $7 = $43;
-   $44 = $7;
-   $45 = $8;
-   $46 = HEAP32[$9>>2]|0;
-   _memcpy(($44|0),($45|0),($46|0))|0;
-   $47 = HEAP32[$9>>2]|0;
-   $48 = $47&65535;
-   $49 = $48&65535;
-   $50 = $7;
-   $51 = (($50) + ($49)|0);
-   $7 = $51;
-   $52 = $7;
-   $53 = ((($52)) + 1|0);
-   $7 = $53;
-   HEAP8[$52>>0] = 0;
-  } else {
-   $54 = $7;
-   $55 = (_uint16_to_bin(-1,$54)|0);
-   $56 = $7;
-   $57 = (($56) + ($55)|0);
-   $7 = $57;
-  }
-  $58 = $6;
-  $59 = (($58) + 1)|0;
-  $6 = $59;
- }
- $60 = $7;
- $61 = $5;
- $62 = $60;
- $63 = $61;
- $64 = (($62) - ($63))|0;
- STACKTOP = sp;return ($64|0);
-}
-function _write_padding($0) {
- $0 = $0|0;
- var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $1 = $0;
- $2 = 4;
- $4 = $1;
- $5 = $4;
- $6 = (0 - ($5))|0;
- $7 = $6 & 3;
- $3 = $7;
- $8 = $3;
- $9 = ($8>>>0)>(0);
- if ($9) {
-  $10 = $1;
-  $11 = $3;
-  _memset(($10|0),0,($11|0))|0;
- }
- $12 = $3;
- STACKTOP = sp;return ($12|0);
-}
-function _uint32l_to_bin($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $3 = 0, $4 = 0, $5 = 0;
- var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $4 = $2;
- $5 = $4 >>> 24;
- $6 = $5 & 255;
- $7 = $6&255;
- $8 = $3;
- $9 = ((($8)) + 3|0);
- HEAP8[$9>>0] = $7;
- $10 = $2;
- $11 = $10 >>> 16;
- $12 = $11 & 255;
- $13 = $12&255;
- $14 = $3;
- $15 = ((($14)) + 2|0);
- HEAP8[$15>>0] = $13;
- $16 = $2;
- $17 = $16 >>> 8;
- $18 = $17 & 255;
- $19 = $18&255;
- $20 = $3;
- $21 = ((($20)) + 1|0);
- HEAP8[$21>>0] = $19;
- $22 = $2;
- $23 = $22 & 255;
- $24 = $23&255;
- $25 = $3;
- HEAP8[$25>>0] = $24;
- STACKTOP = sp;return 4;
-}
-function _get_irep_header_size($0) {
- $0 = $0|0;
- var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $1 = $0;
- $2 = 0;
- $3 = $2;
- $4 = (($3) + 4)|0;
- $2 = $4;
- $5 = $2;
- $6 = (($5) + 6)|0;
- $2 = $6;
- $7 = $2;
- STACKTOP = sp;return ($7|0);
-}
-function _get_iseq_block_size($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $4 = 0;
- $5 = $4;
- $6 = (($5) + 4)|0;
- $4 = $6;
- $7 = $4;
- $8 = (($7) + 4)|0;
- $4 = $8;
- $9 = $3;
- $10 = ((($9)) + 40|0);
- $11 = HEAP32[$10>>2]|0;
- $12 = $11<<2;
- $13 = $4;
- $14 = (($13) + ($12))|0;
- $4 = $14;
- $15 = $4;
- STACKTOP = sp;return ($15|0);
-}
-function _get_pool_block_size($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0;
- var $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0;
- var $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0;
- var $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0;
- var $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0;
- var $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 80|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(80|0);
- $$byval_copy1 = sp + 72|0;
- $$byval_copy = sp + 64|0;
- $6 = sp + 40|0;
- $8 = sp + 24|0;
- $10 = sp + 8|0;
- $2 = $0;
- $3 = $1;
- $4 = 0;
- $13 = $4;
- $14 = (($13) + 4)|0;
- $4 = $14;
- $15 = $3;
- $16 = ((($15)) + 44|0);
- $17 = HEAP32[$16>>2]|0;
- $18 = ($17*3)|0;
- $19 = $4;
- $20 = (($19) + ($18))|0;
- $4 = $20;
- $5 = 0;
- while(1) {
-  $21 = $5;
-  $22 = $3;
-  $23 = ((($22)) + 44|0);
-  $24 = HEAP32[$23>>2]|0;
-  $25 = ($21>>>0)<($24>>>0);
-  if (!($25)) {
-   break;
-  }
-  $26 = $2;
-  $27 = (_mrb_gc_arena_save($26)|0);
-  $7 = $27;
-  $28 = $3;
-  $29 = ((($28)) + 12|0);
-  $30 = HEAP32[$29>>2]|0;
-  $31 = $5;
-  $32 = (($30) + ($31<<3)|0);
-  $33 = ((($32)) + 4|0);
-  $34 = HEAP32[$33>>2]|0;
-  switch ($34|0) {
-  case 3:  {
-   $35 = $2;
-   $36 = $3;
-   $37 = ((($36)) + 12|0);
-   $38 = HEAP32[$37>>2]|0;
-   $39 = $5;
-   $40 = (($38) + ($39<<3)|0);
-   ;HEAP32[$$byval_copy>>2]=HEAP32[$40>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$40+4>>2]|0;
-   _mrb_fixnum_to_str($8,$35,$$byval_copy,10);
-   ;HEAP32[$6>>2]=HEAP32[$8>>2]|0;HEAP32[$6+4>>2]=HEAP32[$8+4>>2]|0;
-   $41 = HEAP32[$6>>2]|0;
-   $42 = HEAP32[$41>>2]|0;
-   $43 = $42 >>> 11;
-   $44 = $43 & 8;
-   $45 = ($44|0)!=(0);
-   $46 = HEAP32[$6>>2]|0;
-   if ($45) {
-    $47 = HEAP32[$46>>2]|0;
-    $48 = $47 >>> 11;
-    $49 = $48 & 496;
-    $50 = $49 >> 4;
-    $53 = $50;
-   } else {
-    $51 = ((($46)) + 12|0);
-    $52 = HEAP32[$51>>2]|0;
-    $53 = $52;
-   }
-   $9 = $53;
-   $54 = $9;
-   $55 = $4;
-   $56 = (($55) + ($54))|0;
-   $4 = $56;
-   break;
-  }
-  case 6:  {
-   $57 = $2;
-   $58 = $3;
-   $59 = ((($58)) + 12|0);
-   $60 = HEAP32[$59>>2]|0;
-   $61 = $5;
-   $62 = (($60) + ($61<<3)|0);
-   ;HEAP32[$$byval_copy1>>2]=HEAP32[$62>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$62+4>>2]|0;
-   _mrb_float_to_str($10,$57,$$byval_copy1,54496);
-   ;HEAP32[$6>>2]=HEAP32[$10>>2]|0;HEAP32[$6+4>>2]=HEAP32[$10+4>>2]|0;
-   $63 = HEAP32[$6>>2]|0;
-   $64 = HEAP32[$63>>2]|0;
-   $65 = $64 >>> 11;
-   $66 = $65 & 8;
-   $67 = ($66|0)!=(0);
-   $68 = HEAP32[$6>>2]|0;
-   if ($67) {
-    $69 = HEAP32[$68>>2]|0;
-    $70 = $69 >>> 11;
-    $71 = $70 & 496;
-    $72 = $71 >> 4;
-    $75 = $72;
-   } else {
-    $73 = ((($68)) + 12|0);
-    $74 = HEAP32[$73>>2]|0;
-    $75 = $74;
-   }
-   $11 = $75;
-   $76 = $11;
-   $77 = $4;
-   $78 = (($77) + ($76))|0;
-   $4 = $78;
-   break;
-  }
-  case 16:  {
-   $79 = $3;
-   $80 = ((($79)) + 12|0);
-   $81 = HEAP32[$80>>2]|0;
-   $82 = $5;
-   $83 = (($81) + ($82<<3)|0);
-   $84 = HEAP32[$83>>2]|0;
-   $85 = HEAP32[$84>>2]|0;
-   $86 = $85 >>> 11;
-   $87 = $86 & 8;
-   $88 = ($87|0)!=(0);
-   $89 = $3;
-   $90 = ((($89)) + 12|0);
-   $91 = HEAP32[$90>>2]|0;
-   $92 = $5;
-   $93 = (($91) + ($92<<3)|0);
-   $94 = HEAP32[$93>>2]|0;
-   if ($88) {
-    $95 = HEAP32[$94>>2]|0;
-    $96 = $95 >>> 11;
-    $97 = $96 & 496;
-    $98 = $97 >> 4;
-    $101 = $98;
-   } else {
-    $99 = ((($94)) + 12|0);
-    $100 = HEAP32[$99>>2]|0;
-    $101 = $100;
-   }
-   $12 = $101;
-   $102 = $12;
-   $103 = $4;
-   $104 = (($103) + ($102))|0;
-   $4 = $104;
-   break;
-  }
-  default: {
-  }
-  }
-  $105 = $2;
-  $106 = $7;
-  _mrb_gc_arena_restore($105,$106);
-  $107 = $5;
-  $108 = (($107) + 1)|0;
-  $5 = $108;
- }
- $109 = $4;
- STACKTOP = sp;return ($109|0);
-}
-function _get_syms_block_size($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;
- var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $6 = sp;
- $2 = $0;
- $3 = $1;
- $4 = 0;
- $7 = $4;
- $8 = (($7) + 4)|0;
- $4 = $8;
- $5 = 0;
- while(1) {
-  $9 = $5;
-  $10 = $3;
-  $11 = ((($10)) + 48|0);
-  $12 = HEAP32[$11>>2]|0;
-  $13 = ($9>>>0)<($12>>>0);
-  $14 = $4;
-  if (!($13)) {
-   break;
-  }
-  $15 = (($14) + 2)|0;
-  $4 = $15;
-  $16 = $3;
-  $17 = ((($16)) + 16|0);
-  $18 = HEAP32[$17>>2]|0;
-  $19 = $5;
-  $20 = (($18) + ($19<<2)|0);
-  $21 = HEAP32[$20>>2]|0;
-  $22 = ($21|0)!=(0);
-  if ($22) {
-   $23 = $2;
-   $24 = $3;
-   $25 = ((($24)) + 16|0);
-   $26 = HEAP32[$25>>2]|0;
-   $27 = $5;
-   $28 = (($26) + ($27<<2)|0);
-   $29 = HEAP32[$28>>2]|0;
-   (_mrb_sym2name_len($23,$29,$6)|0);
-   $30 = HEAP32[$6>>2]|0;
-   $31 = (($30) + 1)|0;
-   $32 = $4;
-   $33 = (($32) + ($31))|0;
-   $4 = $33;
-  }
-  $34 = $5;
-  $35 = (($34) + 1)|0;
-  $5 = $35;
- }
- STACKTOP = sp;return ($14|0);
-}
-function _get_lv_record_size($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;
- var $29 = 0, $3 = 0, $30 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $4 = 0;
- $6 = $3;
- $7 = HEAP16[$6>>1]|0;
- $8 = $7&65535;
- $9 = (($8) - 1)|0;
- $10 = $9<<2;
- $11 = $4;
- $12 = (($11) + ($10))|0;
- $4 = $12;
- $5 = 0;
- while(1) {
-  $13 = $5;
-  $14 = $3;
-  $15 = ((($14)) + 52|0);
-  $16 = HEAP32[$15>>2]|0;
-  $17 = ($13>>>0)<($16>>>0);
-  if (!($17)) {
-   break;
-  }
-  $18 = $2;
-  $19 = $3;
-  $20 = ((($19)) + 20|0);
-  $21 = HEAP32[$20>>2]|0;
-  $22 = $5;
-  $23 = (($21) + ($22<<2)|0);
-  $24 = HEAP32[$23>>2]|0;
-  $25 = (_get_lv_record_size($18,$24)|0);
-  $26 = $4;
-  $27 = (($26) + ($25))|0;
-  $4 = $27;
-  $28 = $5;
-  $29 = (($28) + 1)|0;
-  $5 = $29;
- }
- $30 = $4;
- STACKTOP = sp;return ($30|0);
-}
-function _mrb_dump_irep_binary($0,$1,$2,$3) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;
- var $30 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $9 = sp + 8|0;
- $10 = sp + 4|0;
- $5 = $0;
- $6 = $1;
- $7 = $2;
- $8 = $3;
- HEAP32[$9>>2] = 0;
- HEAP32[$10>>2] = 0;
- $12 = $8;
- $13 = ($12|0)==(0|0);
- if ($13) {
-  $4 = -7;
-  $30 = $4;
-  STACKTOP = sp;return ($30|0);
- }
- $14 = $5;
- $15 = $6;
- $16 = $7;
- $17 = (_dump_flags($16,0)|0);
- $18 = (_dump_irep($14,$15,$17,$9,$10)|0);
- $11 = $18;
- $19 = $11;
- $20 = ($19|0)==(0);
- if ($20) {
-  $21 = HEAP32[$9>>2]|0;
-  $22 = HEAP32[$10>>2]|0;
-  $23 = $8;
-  $24 = (_fwrite($21,1,$22,$23)|0);
-  $25 = HEAP32[$10>>2]|0;
-  $26 = ($24|0)!=($25|0);
-  if ($26) {
-   $11 = -2;
-  }
- }
- $27 = $5;
- $28 = HEAP32[$9>>2]|0;
- _mrb_free($27,$28);
- $29 = $11;
- $4 = $29;
- $30 = $4;
- STACKTOP = sp;return ($30|0);
-}
-function _mrb_dump_irep_cfunc($0,$1,$2,$3,$4) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- $4 = $4|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;
- var $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0;
- var $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0;
- var $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $9 = 0;
- var $or$cond = 0, $vararg_buffer = 0, $vararg_buffer10 = 0, $vararg_buffer2 = 0, $vararg_buffer4 = 0, $vararg_buffer6 = 0, $vararg_ptr8 = 0, $vararg_ptr9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 96|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(96|0);
- $vararg_buffer10 = sp + 40|0;
- $vararg_buffer6 = sp + 24|0;
- $vararg_buffer4 = sp + 16|0;
- $vararg_buffer2 = sp + 8|0;
- $vararg_buffer = sp;
- $11 = sp + 56|0;
- $12 = sp + 52|0;
- $6 = $0;
- $7 = $1;
- $8 = $2;
- $9 = $3;
- $10 = $4;
- HEAP32[$11>>2] = 0;
- HEAP32[$12>>2] = 0;
- $13 = 0;
- $15 = $9;
- $16 = ($15|0)==(0|0);
- $17 = $10;
- $18 = ($17|0)==(0|0);
- $or$cond = $16 | $18;
- if (!($or$cond)) {
-  $19 = $10;
-  $20 = HEAP8[$19>>0]|0;
-  $21 = $20 << 24 >> 24;
-  $22 = ($21|0)==(0);
-  if (!($22)) {
-   $23 = $8;
-   $24 = (_dump_flags($23,2)|0);
-   $8 = $24;
-   $25 = $6;
-   $26 = $7;
-   $27 = $8;
-   $28 = (_dump_irep($25,$26,$27,$11,$12)|0);
-   $14 = $28;
-   $29 = $14;
-   $30 = ($29|0)==(0);
-   do {
-    if ($30) {
-     $31 = $8;
-     $32 = (_dump_bigendian_p($31)|0);
-     $33 = ($32<<24>>24)!=(0);
-     $34 = $9;
-     if ($33) {
-      $39 = (_fprintf($34,54583,$vararg_buffer2)|0);
-      $40 = ($39|0)<(0);
-      if ($40) {
-       $41 = $6;
-       $42 = HEAP32[$11>>2]|0;
-       _mrb_free($41,$42);
-       $5 = -2;
-       $84 = $5;
-       STACKTOP = sp;return ($84|0);
-      }
-     } else {
-      $35 = (_fprintf($34,54501,$vararg_buffer)|0);
-      $36 = ($35|0)<(0);
-      if ($36) {
-       $37 = $6;
-       $38 = HEAP32[$11>>2]|0;
-       _mrb_free($37,$38);
-       $5 = -2;
-       $84 = $5;
-       STACKTOP = sp;return ($84|0);
-      }
-     }
-     $43 = $9;
-     $44 = (_fprintf($43,54687,$vararg_buffer4)|0);
-     $45 = ($44|0)<(0);
-     if ($45) {
-      $46 = $6;
-      $47 = HEAP32[$11>>2]|0;
-      _mrb_free($46,$47);
-      $5 = -2;
-      $84 = $5;
-      STACKTOP = sp;return ($84|0);
-     }
-     $48 = $9;
-     $49 = $10;
-     HEAP32[$vararg_buffer6>>2] = 4;
-     $vararg_ptr8 = ((($vararg_buffer6)) + 4|0);
-     HEAP32[$vararg_ptr8>>2] = 4;
-     $vararg_ptr9 = ((($vararg_buffer6)) + 8|0);
-     HEAP32[$vararg_ptr9>>2] = $49;
-     $50 = (_fprintf($48,54708,$vararg_buffer6)|0);
-     $51 = ($50|0)<(0);
-     if ($51) {
-      $52 = $6;
-      $53 = HEAP32[$11>>2]|0;
-      _mrb_free($52,$53);
-      $5 = -2;
-      $84 = $5;
-      STACKTOP = sp;return ($84|0);
-     }
-     while(1) {
-      $54 = $13;
-      $55 = HEAP32[$12>>2]|0;
-      $56 = ($54>>>0)<($55>>>0);
-      if (!($56)) {
-       label = 20;
-       break;
-      }
-      $57 = $13;
-      $58 = (($57>>>0) % 16)&-1;
-      $59 = ($58|0)==(0);
-      if ($59) {
-       $60 = $9;
-       $61 = (_fputs(67789,$60)|0);
-       $62 = ($61|0)==(-1);
-       if ($62) {
-        label = 17;
-        break;
-       }
-      }
-      $65 = $9;
-      $66 = HEAP32[$11>>2]|0;
-      $67 = $13;
-      $68 = (($67) + 1)|0;
-      $13 = $68;
-      $69 = (($66) + ($67)|0);
-      $70 = HEAP8[$69>>0]|0;
-      $71 = $70&255;
-      HEAP32[$vararg_buffer10>>2] = $71;
-      $72 = (_fprintf($65,54833,$vararg_buffer10)|0);
-      $73 = ($72|0)<(0);
-      if ($73) {
-       label = 19;
-       break;
-      }
-     }
-     if ((label|0) == 17) {
-      $63 = $6;
-      $64 = HEAP32[$11>>2]|0;
-      _mrb_free($63,$64);
-      $5 = -2;
-      $84 = $5;
-      STACKTOP = sp;return ($84|0);
-     }
-     else if ((label|0) == 19) {
-      $74 = $6;
-      $75 = HEAP32[$11>>2]|0;
-      _mrb_free($74,$75);
-      $5 = -2;
-      $84 = $5;
-      STACKTOP = sp;return ($84|0);
-     }
-     else if ((label|0) == 20) {
-      $76 = $9;
-      $77 = (_fputs(54841,$76)|0);
-      $78 = ($77|0)==(-1);
-      if (!($78)) {
-       break;
-      }
-      $79 = $6;
-      $80 = HEAP32[$11>>2]|0;
-      _mrb_free($79,$80);
-      $5 = -2;
-      $84 = $5;
-      STACKTOP = sp;return ($84|0);
-     }
-    }
-   } while(0);
-   $81 = $6;
-   $82 = HEAP32[$11>>2]|0;
-   _mrb_free($81,$82);
-   $83 = $14;
-   $5 = $83;
-   $84 = $5;
-   STACKTOP = sp;return ($84|0);
-  }
- }
- $5 = -7;
- $84 = $5;
- STACKTOP = sp;return ($84|0);
-}
-function _dump_bigendian_p($0) {
- $0 = $0|0;
- var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $2;
- $4 = $3&255;
- $5 = $4 & 6;
- switch ($5|0) {
- case 2:  {
-  $1 = 1;
-  break;
- }
- case 4:  {
-  $1 = 0;
-  break;
- }
- default: {
-  $6 = (_bigendian_p_3()|0);
-  $7 = $6&255;
-  $1 = $7;
- }
- }
- $8 = $1;
- STACKTOP = sp;return ($8|0);
-}
-function _mrb_float_to_str($0,$1,$2,$3) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- var $10 = 0, $11 = 0, $12 = 0.0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $6 = sp + 8|0;
- $7 = sp;
- $4 = $1;
- $5 = $3;
- $8 = $4;
- HEAP32[$6>>2] = $8;
- $9 = ((($6)) + 4|0);
- $10 = $4;
- _mrb_str_buf_new($7,$10,24);
- ;HEAP32[$9>>2]=HEAP32[$7>>2]|0;HEAP32[$9+4>>2]=HEAP32[$7+4>>2]|0;
- $11 = $5;
- $12 = +HEAPF32[$2>>2];
- $13 = (_fmt_core($6,$11,$12)|0);
- $14 = ($13|0)<(0);
- if ($14) {
-  $15 = $4;
-  $16 = $4;
-  $17 = (_mrb_class_get($16,69160)|0);
-  _mrb_raise($15,$17,54846);
-  // unreachable;
- } else {
-  $18 = ((($6)) + 4|0);
-  ;HEAP32[$0>>2]=HEAP32[$18>>2]|0;HEAP32[$0+4>>2]=HEAP32[$18+4>>2]|0;
-  STACKTOP = sp;return;
- }
-}
-function _fmt_core($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = +$2;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;
- var $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0.0, $39 = 0.0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $5 = 0, $6 = 0.0;
- var $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $4 = $0;
- $5 = $1;
- $6 = $2;
- $8 = $5;
- $9 = HEAP8[$8>>0]|0;
- $10 = $9 << 24 >> 24;
- $11 = ($10|0)!=(37);
- if ($11) {
-  $3 = -1;
-  $45 = $3;
-  STACKTOP = sp;return ($45|0);
- }
- $12 = $5;
- $13 = ((($12)) + 1|0);
- $5 = $13;
- $14 = $5;
- $15 = HEAP8[$14>>0]|0;
- $16 = $15 << 24 >> 24;
- $17 = ($16|0)==(46);
- L5: do {
-  if ($17) {
-   $18 = $5;
-   $19 = ((($18)) + 1|0);
-   $5 = $19;
-   $7 = 0;
-   while(1) {
-    $20 = $5;
-    $21 = HEAP8[$20>>0]|0;
-    $22 = $21 << 24 >> 24;
-    $23 = (($22) - 48)|0;
-    $24 = ($23>>>0)<(10);
-    if (!($24)) {
-     break L5;
-    }
-    $25 = $7;
-    $26 = ($25*10)|0;
-    $27 = $5;
-    $28 = HEAP8[$27>>0]|0;
-    $29 = $28 << 24 >> 24;
-    $30 = (($29) - 48)|0;
-    $31 = (($26) + ($30))|0;
-    $7 = $31;
-    $32 = $5;
-    $33 = ((($32)) + 1|0);
-    $5 = $33;
-   }
-  } else {
-   $7 = -1;
-  }
- } while(0);
- $34 = $5;
- $35 = HEAP8[$34>>0]|0;
- $36 = $35 << 24 >> 24;
- switch ($36|0) {
- case 65: case 71: case 70: case 69: case 97: case 103: case 102: case 101:  {
-  $37 = $4;
-  $38 = $6;
-  $39 = $38;
-  $40 = $7;
-  $41 = $5;
-  $42 = HEAP8[$41>>0]|0;
-  $43 = $42 << 24 >> 24;
-  $44 = (_fmt_fp($37,$39,0,$40,0,$43)|0);
-  $3 = $44;
-  $45 = $3;
-  STACKTOP = sp;return ($45|0);
-  break;
- }
- default: {
-  $3 = -1;
-  $45 = $3;
-  STACKTOP = sp;return ($45|0);
- }
- }
- return (0)|0;
-}
-function _fmt_fp($0,$1,$2,$3,$4,$5) {
- $0 = $0|0;
- $1 = +$1;
- $2 = $2|0;
- $3 = $3|0;
- $4 = $4|0;
- $5 = $5|0;
- var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0.0, $114 = 0.0, $115 = 0.0, $116 = 0.0, $117 = 0;
- var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0;
- var $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0.0, $142 = 0.0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0.0, $148 = 0.0, $149 = 0.0, $15 = 0, $150 = 0.0, $151 = 0.0, $152 = 0.0, $153 = 0.0;
- var $154 = 0.0, $155 = 0.0, $156 = 0.0, $157 = 0.0, $158 = 0.0, $159 = 0.0, $16 = 0, $160 = 0.0, $161 = 0.0, $162 = 0.0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0, $170 = 0, $171 = 0;
- var $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0.0, $187 = 0, $188 = 0, $189 = 0, $19 = 0;
- var $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0, $197 = 0, $198 = 0.0, $199 = 0, $20 = 0, $200 = 0.0, $201 = 0.0, $202 = 0.0, $203 = 0, $204 = 0, $205 = 0, $206 = 0, $207 = 0, $208 = 0.0;
- var $209 = 0, $21 = 0, $210 = 0, $211 = 0, $212 = 0, $213 = 0, $214 = 0, $215 = 0, $216 = 0, $217 = 0.0, $218 = 0, $219 = 0, $22 = 0, $220 = 0, $221 = 0, $222 = 0, $223 = 0, $224 = 0, $225 = 0, $226 = 0;
- var $227 = 0, $228 = 0, $229 = 0, $23 = 0, $230 = 0, $231 = 0, $232 = 0, $233 = 0, $234 = 0, $235 = 0, $236 = 0, $237 = 0, $238 = 0, $239 = 0, $24 = 0, $240 = 0, $241 = 0, $242 = 0, $243 = 0, $244 = 0;
- var $245 = 0, $246 = 0, $247 = 0, $248 = 0, $249 = 0, $25 = 0, $250 = 0, $251 = 0, $252 = 0, $253 = 0, $254 = 0, $255 = 0, $256 = 0, $257 = 0, $258 = 0, $259 = 0, $26 = 0, $260 = 0, $261 = 0, $262 = 0;
- var $263 = 0, $264 = 0, $265 = 0, $266 = 0, $267 = 0, $268 = 0, $269 = 0, $27 = 0, $270 = 0, $271 = 0, $272 = 0, $273 = 0, $274 = 0, $275 = 0, $276 = 0, $277 = 0, $278 = 0, $279 = 0, $28 = 0, $280 = 0;
- var $281 = 0, $282 = 0, $283 = 0, $284 = 0, $285 = 0, $286 = 0, $287 = 0, $288 = 0, $289 = 0, $29 = 0, $290 = 0, $291 = 0, $292 = 0, $293 = 0, $294 = 0, $295 = 0, $296 = 0, $297 = 0, $298 = 0, $299 = 0;
- var $30 = 0, $300 = 0, $301 = 0, $302 = 0, $303 = 0, $304 = 0, $305 = 0, $306 = 0.0, $307 = 0, $308 = 0.0, $309 = 0.0, $31 = 0.0, $310 = 0, $311 = 0, $312 = 0, $313 = 0, $314 = 0, $315 = 0, $316 = 0, $317 = 0.0;
- var $318 = 0, $319 = 0, $32 = 0, $320 = 0.0, $321 = 0, $322 = 0, $323 = 0, $324 = 0.0, $325 = 0.0, $326 = 0.0, $327 = 0.0, $328 = 0, $329 = 0, $33 = 0, $330 = 0, $331 = 0, $332 = 0, $333 = 0, $334 = 0, $335 = 0;
- var $336 = 0, $337 = 0, $338 = 0, $339 = 0, $34 = 0, $340 = 0, $341 = 0, $342 = 0, $343 = 0, $344 = 0, $345 = 0, $346 = 0, $347 = 0, $348 = 0, $349 = 0, $35 = 0, $350 = 0, $351 = 0, $352 = 0, $353 = 0;
- var $354 = 0, $355 = 0, $356 = 0, $357 = 0, $358 = 0, $359 = 0, $36 = 0, $360 = 0, $361 = 0, $362 = 0, $363 = 0, $364 = 0, $365 = 0, $366 = 0, $367 = 0, $368 = 0, $369 = 0, $37 = 0, $370 = 0, $371 = 0;
- var $372 = 0, $373 = 0, $374 = 0, $375 = 0, $376 = 0, $377 = 0, $378 = 0, $379 = 0, $38 = 0, $380 = 0, $381 = 0, $382 = 0, $383 = 0, $384 = 0, $385 = 0, $386 = 0, $387 = 0, $388 = 0, $389 = 0, $39 = 0;
- var $390 = 0, $391 = 0, $392 = 0, $393 = 0, $394 = 0, $395 = 0, $396 = 0, $397 = 0, $398 = 0, $399 = 0, $40 = 0, $400 = 0, $401 = 0, $402 = 0, $403 = 0, $404 = 0, $405 = 0, $406 = 0, $407 = 0, $408 = 0;
- var $409 = 0, $41 = 0, $410 = 0, $411 = 0, $412 = 0, $413 = 0, $414 = 0, $415 = 0, $416 = 0, $417 = 0, $418 = 0, $419 = 0, $42 = 0, $420 = 0, $421 = 0, $422 = 0, $423 = 0, $424 = 0, $425 = 0, $426 = 0;
- var $427 = 0, $428 = 0, $429 = 0, $43 = 0.0, $430 = 0, $431 = 0, $432 = 0, $433 = 0, $434 = 0, $435 = 0, $436 = 0, $437 = 0, $438 = 0, $439 = 0, $44 = 0.0, $440 = 0, $441 = 0, $442 = 0, $443 = 0, $444 = 0;
- var $445 = 0, $446 = 0, $447 = 0, $448 = 0, $449 = 0, $45 = 0, $450 = 0, $451 = 0, $452 = 0, $453 = 0, $454 = 0, $455 = 0, $456 = 0, $457 = 0, $458 = 0, $459 = 0, $46 = 0, $460 = 0, $461 = 0, $462 = 0;
- var $463 = 0, $464 = 0, $465 = 0, $466 = 0, $467 = 0, $468 = 0, $469 = 0, $47 = 0, $470 = 0, $471 = 0, $472 = 0, $473 = 0, $474 = 0, $475 = 0, $476 = 0, $477 = 0, $478 = 0, $479 = 0, $48 = 0, $480 = 0;
- var $481 = 0, $482 = 0, $483 = 0, $484 = 0, $485 = 0, $486 = 0, $487 = 0, $488 = 0, $489 = 0, $49 = 0.0, $490 = 0, $491 = 0, $492 = 0, $493 = 0, $494 = 0, $495 = 0, $496 = 0, $497 = 0, $498 = 0, $499 = 0;
- var $50 = 0, $500 = 0, $501 = 0, $502 = 0, $503 = 0, $504 = 0, $505 = 0, $506 = 0, $507 = 0, $508 = 0, $509 = 0, $51 = 0, $510 = 0, $511 = 0, $512 = 0, $513 = 0, $514 = 0, $515 = 0, $516 = 0, $517 = 0;
- var $518 = 0, $519 = 0, $52 = 0, $520 = 0, $521 = 0, $522 = 0, $523 = 0, $524 = 0, $525 = 0, $526 = 0, $527 = 0, $528 = 0, $529 = 0, $53 = 0, $530 = 0, $531 = 0, $532 = 0, $533 = 0, $534 = 0.0, $535 = 0.0;
- var $536 = 0, $537 = 0, $538 = 0, $539 = 0, $54 = 0, $540 = 0, $541 = 0, $542 = 0, $543 = 0, $544 = 0, $545 = 0, $546 = 0, $547 = 0, $548 = 0, $549 = 0, $55 = 0.0, $550 = 0, $551 = 0, $552 = 0, $553 = 0;
- var $554 = 0.0, $555 = 0.0, $556 = 0.0, $557 = 0.0, $558 = 0, $559 = 0, $56 = 0.0, $560 = 0, $561 = 0, $562 = 0.0, $563 = 0.0, $564 = 0.0, $565 = 0.0, $566 = 0, $567 = 0, $568 = 0, $569 = 0, $57 = 0, $570 = 0, $571 = 0;
- var $572 = 0, $573 = 0, $574 = 0, $575 = 0, $576 = 0, $577 = 0, $578 = 0, $579 = 0, $58 = 0, $580 = 0, $581 = 0, $582 = 0, $583 = 0, $584 = 0, $585 = 0, $586 = 0, $587 = 0, $588 = 0, $589 = 0, $59 = 0;
- var $590 = 0, $591 = 0, $592 = 0, $593 = 0, $594 = 0, $595 = 0, $596 = 0, $597 = 0, $598 = 0, $599 = 0, $6 = 0, $60 = 0, $600 = 0, $601 = 0, $602 = 0, $603 = 0, $604 = 0, $605 = 0, $606 = 0, $607 = 0;
- var $608 = 0, $609 = 0, $61 = 0, $610 = 0, $611 = 0, $612 = 0, $613 = 0, $614 = 0, $615 = 0, $616 = 0, $617 = 0, $618 = 0, $619 = 0, $62 = 0, $620 = 0, $621 = 0, $622 = 0, $623 = 0, $624 = 0, $625 = 0;
- var $626 = 0, $627 = 0, $628 = 0, $629 = 0, $63 = 0, $630 = 0, $631 = 0, $632 = 0, $633 = 0, $634 = 0, $635 = 0, $636 = 0, $637 = 0, $638 = 0, $639 = 0, $64 = 0, $640 = 0, $641 = 0, $642 = 0, $643 = 0;
- var $644 = 0, $645 = 0, $646 = 0, $647 = 0, $648 = 0, $649 = 0, $65 = 0, $650 = 0, $651 = 0, $652 = 0, $653 = 0, $654 = 0, $655 = 0, $656 = 0, $657 = 0, $658 = 0, $659 = 0, $66 = 0, $660 = 0, $661 = 0;
- var $662 = 0, $663 = 0, $664 = 0, $665 = 0, $666 = 0, $667 = 0, $668 = 0, $669 = 0, $67 = 0, $670 = 0, $671 = 0, $672 = 0, $673 = 0, $674 = 0, $675 = 0, $676 = 0, $677 = 0, $678 = 0, $679 = 0, $68 = 0.0;
- var $680 = 0, $681 = 0, $682 = 0, $683 = 0, $684 = 0, $685 = 0, $686 = 0, $687 = 0, $688 = 0, $689 = 0, $69 = 0, $690 = 0, $691 = 0, $692 = 0, $693 = 0, $694 = 0, $695 = 0, $696 = 0, $697 = 0, $698 = 0;
- var $699 = 0, $7 = 0, $70 = 0, $700 = 0, $701 = 0, $702 = 0, $703 = 0, $704 = 0, $705 = 0, $706 = 0, $707 = 0, $708 = 0, $709 = 0, $71 = 0, $710 = 0, $711 = 0, $712 = 0, $713 = 0, $714 = 0, $715 = 0;
- var $716 = 0, $717 = 0, $718 = 0, $719 = 0, $72 = 0, $720 = 0, $721 = 0, $722 = 0, $723 = 0, $724 = 0, $725 = 0, $726 = 0, $727 = 0, $728 = 0, $729 = 0, $73 = 0, $730 = 0, $731 = 0, $732 = 0, $733 = 0;
- var $734 = 0, $735 = 0, $736 = 0, $737 = 0, $738 = 0, $739 = 0, $74 = 0, $740 = 0, $741 = 0, $742 = 0, $743 = 0, $744 = 0, $745 = 0, $746 = 0, $747 = 0, $748 = 0, $749 = 0, $75 = 0, $750 = 0, $751 = 0;
- var $752 = 0, $753 = 0, $754 = 0, $755 = 0, $756 = 0, $757 = 0, $758 = 0, $759 = 0, $76 = 0, $760 = 0, $761 = 0, $762 = 0, $763 = 0, $764 = 0, $765 = 0, $766 = 0, $767 = 0, $768 = 0, $769 = 0, $77 = 0;
- var $770 = 0, $771 = 0, $772 = 0, $773 = 0, $774 = 0, $775 = 0, $776 = 0, $777 = 0, $778 = 0, $779 = 0, $78 = 0, $780 = 0, $781 = 0, $782 = 0, $783 = 0, $784 = 0, $785 = 0, $786 = 0, $787 = 0, $788 = 0;
- var $789 = 0, $79 = 0, $790 = 0, $791 = 0, $792 = 0, $793 = 0, $794 = 0, $795 = 0, $796 = 0, $797 = 0, $798 = 0, $799 = 0, $8 = 0.0, $80 = 0, $800 = 0, $801 = 0, $802 = 0, $803 = 0, $804 = 0, $805 = 0;
- var $806 = 0, $807 = 0, $808 = 0, $809 = 0, $81 = 0.0, $810 = 0, $811 = 0, $812 = 0, $813 = 0, $814 = 0, $815 = 0, $816 = 0, $817 = 0, $818 = 0, $819 = 0, $82 = 0.0, $820 = 0, $821 = 0, $822 = 0, $823 = 0;
- var $824 = 0, $825 = 0, $826 = 0, $827 = 0, $828 = 0, $829 = 0, $83 = 0, $830 = 0, $831 = 0, $832 = 0, $833 = 0, $834 = 0, $835 = 0, $836 = 0, $837 = 0, $838 = 0, $839 = 0, $84 = 0, $840 = 0, $841 = 0;
- var $842 = 0, $843 = 0, $844 = 0, $845 = 0, $846 = 0, $847 = 0, $848 = 0, $849 = 0, $85 = 0, $850 = 0, $851 = 0, $852 = 0, $853 = 0, $854 = 0, $855 = 0, $856 = 0, $857 = 0, $858 = 0, $859 = 0, $86 = 0;
- var $860 = 0, $861 = 0, $862 = 0, $863 = 0, $864 = 0, $865 = 0, $866 = 0, $867 = 0, $868 = 0, $869 = 0, $87 = 0, $870 = 0, $871 = 0, $872 = 0, $873 = 0, $874 = 0, $875 = 0, $876 = 0, $877 = 0, $878 = 0;
- var $879 = 0, $88 = 0, $880 = 0, $881 = 0, $882 = 0, $883 = 0, $884 = 0, $885 = 0, $886 = 0, $887 = 0, $888 = 0, $889 = 0, $89 = 0, $890 = 0, $891 = 0, $892 = 0, $893 = 0, $894 = 0, $895 = 0, $896 = 0;
- var $897 = 0, $898 = 0, $899 = 0, $9 = 0, $90 = 0, $900 = 0, $901 = 0, $902 = 0, $903 = 0, $904 = 0, $905 = 0, $906 = 0, $907 = 0, $908 = 0, $909 = 0, $91 = 0, $910 = 0, $911 = 0, $912 = 0, $913 = 0;
- var $914 = 0, $915 = 0, $916 = 0, $917 = 0, $918 = 0, $919 = 0, $92 = 0, $920 = 0, $921 = 0, $922 = 0, $923 = 0, $924 = 0, $925 = 0, $926 = 0, $927 = 0, $928 = 0, $929 = 0, $93 = 0, $930 = 0, $931 = 0;
- var $932 = 0, $933 = 0, $934 = 0, $935 = 0, $936 = 0, $937 = 0, $938 = 0, $939 = 0, $94 = 0, $940 = 0, $941 = 0, $942 = 0, $943 = 0, $944 = 0, $945 = 0, $946 = 0, $947 = 0, $948 = 0, $949 = 0, $95 = 0;
- var $950 = 0, $951 = 0, $952 = 0, $953 = 0, $954 = 0, $955 = 0, $956 = 0, $957 = 0, $958 = 0, $959 = 0, $96 = 0, $960 = 0, $961 = 0, $962 = 0, $963 = 0, $964 = 0, $965 = 0, $966 = 0, $967 = 0, $968 = 0;
- var $969 = 0, $97 = 0, $970 = 0, $971 = 0, $972 = 0, $973 = 0, $974 = 0, $975 = 0, $976 = 0, $98 = 0, $99 = 0, $or$cond = 0, $or$cond3 = 0, $or$cond6 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 720|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(720|0);
- $13 = sp + 152|0;
- $19 = sp + 128|0;
- $23 = sp + 692|0;
- $27 = sp + 680|0;
- $36 = sp + 16|0;
- $7 = $0;
- $8 = $1;
- $9 = $2;
- $10 = $3;
- $11 = $4;
- $12 = $5;
- HEAP32[$19>>2] = 0;
- $25 = 70736;
- $48 = ((($27)) + 12|0);
- $28 = $48;
- $26 = 1;
- $49 = $8;
- $50 = (___DOUBLE_BITS($49)|0);
- $51 = tempRet0;
- $52 = (_bitshift64Lshr(($50|0),($51|0),63)|0);
- $53 = tempRet0;
- $54 = ($52|0)!=(0);
- do {
-  if ($54) {
-   $55 = $8;
-   $56 = -$55;
-   $8 = $56;
-  } else {
-   $57 = $11;
-   $58 = $57 & 2048;
-   $59 = ($58|0)!=(0);
-   if ($59) {
-    $60 = $25;
-    $61 = ((($60)) + 3|0);
-    $25 = $61;
-    break;
-   }
-   $62 = $11;
-   $63 = $62 & 1;
-   $64 = ($63|0)!=(0);
-   $65 = $25;
-   if ($64) {
-    $66 = ((($65)) + 6|0);
-    $25 = $66;
-    break;
-   } else {
-    $67 = ((($65)) + 1|0);
-    $25 = $67;
-    $26 = 0;
-    break;
-   }
-  }
- } while(0);
- $68 = $8;
- $69 = (___DOUBLE_BITS($68)|0);
- $70 = tempRet0;
- $71 = $70 & 2147483647;
- $72 = ($71>>>0)<(2146435072);
- $73 = ($69>>>0)<(0);
- $74 = ($71|0)==(2146435072);
- $75 = $74 & $73;
- $76 = $72 | $75;
- if (!($76)) {
-  $77 = $12;
-  $78 = $77 & 32;
-  $79 = ($78|0)!=(0);
-  $80 = $79 ? 70755 : 70759;
-  $30 = $80;
-  $81 = $8;
-  $82 = $8;
-  $83 = $81 != $82;
-  if ($83) {
-   $84 = $12;
-   $85 = $84 & 32;
-   $86 = ($85|0)!=(0);
-   $87 = $86 ? 72686 : 70763;
-   $30 = $87;
-  }
-  $88 = $7;
-  $89 = $9;
-  $90 = $26;
-  $91 = (3 + ($90))|0;
-  $92 = $11;
-  $93 = $92 & -65537;
-  _pad($88,32,$89,$91,$93);
-  $94 = $7;
-  $95 = $25;
-  $96 = $26;
-  _out($94,$95,$96);
-  $97 = $7;
-  $98 = $30;
-  _out($97,$98,3);
-  $99 = $7;
-  $100 = $9;
-  $101 = $26;
-  $102 = (3 + ($101))|0;
-  $103 = $11;
-  $104 = $103 ^ 8192;
-  _pad($99,32,$100,$102,$104);
-  $105 = $9;
-  $106 = $26;
-  $107 = (3 + ($106))|0;
-  $108 = ($105|0)>($107|0);
-  $109 = $9;
-  $110 = $26;
-  $111 = (3 + ($110))|0;
-  $112 = $108 ? $109 : $111;
-  $6 = $112;
-  $976 = $6;
-  STACKTOP = sp;return ($976|0);
- }
- $113 = $8;
- $114 = (+_frexp($113,$19));
- $115 = $114 * 2.0;
- $8 = $115;
- $116 = $8;
- $117 = $116 != 0.0;
- if ($117) {
-  $118 = HEAP32[$19>>2]|0;
-  $119 = (($118) + -1)|0;
-  HEAP32[$19>>2] = $119;
- }
- $120 = $12;
- $121 = $120 | 32;
- $122 = ($121|0)==(97);
- if ($122) {
-  $31 = 8.0;
-  $123 = $12;
-  $124 = $123 & 32;
-  $125 = ($124|0)!=(0);
-  if ($125) {
-   $126 = $25;
-   $127 = ((($126)) + 9|0);
-   $25 = $127;
-  }
-  $128 = $26;
-  $129 = (($128) + 2)|0;
-  $26 = $129;
-  $130 = $10;
-  $131 = ($130|0)<(0);
-  $132 = $10;
-  $133 = ($132|0)>=(12);
-  $or$cond = $131 | $133;
-  if ($or$cond) {
-   $32 = 0;
-  } else {
-   $134 = $10;
-   $135 = (12 - ($134))|0;
-   $32 = $135;
-  }
-  $136 = $32;
-  $137 = ($136|0)!=(0);
-  do {
-   if ($137) {
-    while(1) {
-     $138 = $32;
-     $139 = (($138) + -1)|0;
-     $32 = $139;
-     $140 = ($138|0)!=(0);
-     if (!($140)) {
-      break;
-     }
-     $141 = $31;
-     $142 = $141 * 16.0;
-     $31 = $142;
-    }
-    $143 = $25;
-    $144 = HEAP8[$143>>0]|0;
-    $145 = $144 << 24 >> 24;
-    $146 = ($145|0)==(45);
-    if ($146) {
-     $147 = $8;
-     $148 = -$147;
-     $8 = $148;
-     $149 = $31;
-     $150 = $8;
-     $151 = $150 - $149;
-     $8 = $151;
-     $152 = $31;
-     $153 = $8;
-     $154 = $153 + $152;
-     $8 = $154;
-     $155 = $8;
-     $156 = -$155;
-     $8 = $156;
-     break;
-    } else {
-     $157 = $31;
-     $158 = $8;
-     $159 = $158 + $157;
-     $8 = $159;
-     $160 = $31;
-     $161 = $8;
-     $162 = $161 - $160;
-     $8 = $162;
-     break;
-    }
-   }
-  } while(0);
-  $163 = HEAP32[$19>>2]|0;
-  $164 = ($163|0)<(0);
-  $165 = HEAP32[$19>>2]|0;
-  $166 = (0 - ($165))|0;
-  $167 = $164 ? $166 : $165;
-  $168 = $28;
-  $169 = (_fmt_u($167,$168)|0);
-  $29 = $169;
-  $170 = $29;
-  $171 = $28;
-  $172 = ($170|0)==($171|0);
-  if ($172) {
-   $173 = $29;
-   $174 = ((($173)) + -1|0);
-   $29 = $174;
-   HEAP8[$174>>0] = 48;
-  }
-  $175 = HEAP32[$19>>2]|0;
-  $176 = ($175|0)<(0);
-  $177 = $176 ? 45 : 43;
-  $178 = $177&255;
-  $179 = $29;
-  $180 = ((($179)) + -1|0);
-  $29 = $180;
-  HEAP8[$180>>0] = $178;
-  $181 = $12;
-  $182 = (($181) + 15)|0;
-  $183 = $182&255;
-  $184 = $29;
-  $185 = ((($184)) + -1|0);
-  $29 = $185;
-  HEAP8[$185>>0] = $183;
-  $24 = $23;
-  while(1) {
-   $186 = $8;
-   $187 = (~~(($186)));
-   $33 = $187;
-   $188 = $33;
-   $189 = (70767 + ($188)|0);
-   $190 = HEAP8[$189>>0]|0;
-   $191 = $190 << 24 >> 24;
-   $192 = $12;
-   $193 = $192 & 32;
-   $194 = $191 | $193;
-   $195 = $194&255;
-   $196 = $24;
-   $197 = ((($196)) + 1|0);
-   $24 = $197;
-   HEAP8[$196>>0] = $195;
-   $198 = $8;
-   $199 = $33;
-   $200 = (+($199|0));
-   $201 = $198 - $200;
-   $202 = 16.0 * $201;
-   $8 = $202;
-   $203 = $24;
-   $204 = $203;
-   $205 = $23;
-   $206 = (($204) - ($205))|0;
-   $207 = ($206|0)==(1);
-   do {
-    if ($207) {
-     $208 = $8;
-     $209 = $208 != 0.0;
-     $210 = $10;
-     $211 = ($210|0)>(0);
-     $or$cond3 = $209 | $211;
-     if (!($or$cond3)) {
-      $212 = $11;
-      $213 = $212 & 8;
-      $214 = ($213|0)!=(0);
-      if (!($214)) {
-       break;
-      }
-     }
-     $215 = $24;
-     $216 = ((($215)) + 1|0);
-     $24 = $216;
-     HEAP8[$215>>0] = 46;
-    }
-   } while(0);
-   $217 = $8;
-   $218 = $217 != 0.0;
-   if (!($218)) {
-    break;
-   }
-  }
-  $219 = $10;
-  $220 = ($219|0)!=(0);
-  if ($220) {
-   $221 = $24;
-   $222 = $221;
-   $223 = $23;
-   $224 = (($222) - ($223))|0;
-   $225 = (($224) - 2)|0;
-   $226 = $10;
-   $227 = ($225|0)<($226|0);
-   if ($227) {
-    $228 = $10;
-    $229 = (($228) + 2)|0;
-    $230 = $28;
-    $231 = $29;
-    $232 = $230;
-    $233 = $231;
-    $234 = (($232) - ($233))|0;
-    $235 = (($229) + ($234))|0;
-    $22 = $235;
-   } else {
-    label = 37;
-   }
-  } else {
-   label = 37;
-  }
-  if ((label|0) == 37) {
-   $236 = $24;
-   $237 = $236;
-   $238 = $23;
-   $239 = (($237) - ($238))|0;
-   $240 = $28;
-   $241 = $29;
-   $242 = $240;
-   $243 = $241;
-   $244 = (($242) - ($243))|0;
-   $245 = (($239) + ($244))|0;
-   $22 = $245;
-  }
-  $246 = $7;
-  $247 = $9;
-  $248 = $26;
-  $249 = $22;
-  $250 = (($248) + ($249))|0;
-  $251 = $11;
-  _pad($246,32,$247,$250,$251);
-  $252 = $7;
-  $253 = $25;
-  $254 = $26;
-  _out($252,$253,$254);
-  $255 = $7;
-  $256 = $9;
-  $257 = $26;
-  $258 = $22;
-  $259 = (($257) + ($258))|0;
-  $260 = $11;
-  $261 = $260 ^ 65536;
-  _pad($255,48,$256,$259,$261);
-  $262 = $7;
-  $263 = $24;
-  $264 = $263;
-  $265 = $23;
-  $266 = (($264) - ($265))|0;
-  _out($262,$23,$266);
-  $267 = $7;
-  $268 = $22;
-  $269 = $28;
-  $270 = $29;
-  $271 = $269;
-  $272 = $270;
-  $273 = (($271) - ($272))|0;
-  $274 = (($268) - ($273))|0;
-  $275 = $24;
-  $276 = $275;
-  $277 = $23;
-  $278 = (($276) - ($277))|0;
-  $279 = (($274) - ($278))|0;
-  _pad($267,48,$279,0,0);
-  $280 = $7;
-  $281 = $29;
-  $282 = $28;
-  $283 = $29;
-  $284 = $282;
-  $285 = $283;
-  $286 = (($284) - ($285))|0;
-  _out($280,$281,$286);
-  $287 = $7;
-  $288 = $9;
-  $289 = $26;
-  $290 = $22;
-  $291 = (($289) + ($290))|0;
-  $292 = $11;
-  $293 = $292 ^ 8192;
-  _pad($287,32,$288,$291,$293);
-  $294 = $9;
-  $295 = $26;
-  $296 = $22;
-  $297 = (($295) + ($296))|0;
-  $298 = ($294|0)>($297|0);
-  if ($298) {
-   $299 = $9;
-   $303 = $299;
-  } else {
-   $300 = $26;
-   $301 = $22;
-   $302 = (($300) + ($301))|0;
-   $303 = $302;
-  }
-  $6 = $303;
-  $976 = $6;
-  STACKTOP = sp;return ($976|0);
- }
- $304 = $10;
- $305 = ($304|0)<(0);
- if ($305) {
-  $10 = 6;
- }
- $306 = $8;
- $307 = $306 != 0.0;
- if ($307) {
-  $308 = $8;
-  $309 = $308 * 268435456.0;
-  $8 = $309;
-  $310 = HEAP32[$19>>2]|0;
-  $311 = (($310) - 28)|0;
-  HEAP32[$19>>2] = $311;
- }
- $312 = HEAP32[$19>>2]|0;
- $313 = ($312|0)<(0);
- if ($313) {
-  $17 = $13;
-  $16 = $13;
-  $14 = $13;
- } else {
-  $314 = ((($13)) + 504|0);
-  $315 = ((($314)) + -212|0);
-  $316 = ((($315)) + -4|0);
-  $17 = $316;
-  $16 = $316;
-  $14 = $316;
- }
- while(1) {
-  $317 = $8;
-  $318 = (~~(($317))>>>0);
-  $319 = $17;
-  HEAP32[$319>>2] = $318;
-  $320 = $8;
-  $321 = $17;
-  $322 = ((($321)) + 4|0);
-  $17 = $322;
-  $323 = HEAP32[$321>>2]|0;
-  $324 = (+($323>>>0));
-  $325 = $320 - $324;
-  $326 = 1.0E+9 * $325;
-  $8 = $326;
-  $327 = $8;
-  $328 = $327 != 0.0;
-  if (!($328)) {
-   break;
-  }
- }
- while(1) {
-  $329 = HEAP32[$19>>2]|0;
-  $330 = ($329|0)>(0);
-  if (!($330)) {
-   break;
-  }
-  $34 = 0;
-  $331 = HEAP32[$19>>2]|0;
-  $332 = (29)<($331|0);
-  $333 = HEAP32[$19>>2]|0;
-  $334 = $332 ? 29 : $333;
-  $35 = $334;
-  $335 = $17;
-  $336 = ((($335)) + -4|0);
-  $15 = $336;
-  while(1) {
-   $337 = $15;
-   $338 = $14;
-   $339 = ($337>>>0)>=($338>>>0);
-   if (!($339)) {
-    break;
-   }
-   $340 = $15;
-   $341 = HEAP32[$340>>2]|0;
-   $342 = $35;
-   $343 = (_bitshift64Shl(($341|0),0,($342|0))|0);
-   $344 = tempRet0;
-   $345 = $34;
-   $346 = (_i64Add(($343|0),($344|0),($345|0),0)|0);
-   $347 = tempRet0;
-   $348 = $36;
-   $349 = $348;
-   HEAP32[$349>>2] = $346;
-   $350 = (($348) + 4)|0;
-   $351 = $350;
-   HEAP32[$351>>2] = $347;
-   $352 = $36;
-   $353 = $352;
-   $354 = HEAP32[$353>>2]|0;
-   $355 = (($352) + 4)|0;
-   $356 = $355;
-   $357 = HEAP32[$356>>2]|0;
-   $358 = (___uremdi3(($354|0),($357|0),1000000000,0)|0);
-   $359 = tempRet0;
-   $360 = $15;
-   HEAP32[$360>>2] = $358;
-   $361 = $36;
-   $362 = $361;
-   $363 = HEAP32[$362>>2]|0;
-   $364 = (($361) + 4)|0;
-   $365 = $364;
-   $366 = HEAP32[$365>>2]|0;
-   $367 = (___udivdi3(($363|0),($366|0),1000000000,0)|0);
-   $368 = tempRet0;
-   $34 = $367;
-   $369 = $15;
-   $370 = ((($369)) + -4|0);
-   $15 = $370;
-  }
-  $371 = $34;
-  $372 = ($371|0)!=(0);
-  if ($372) {
-   $373 = $34;
-   $374 = $14;
-   $375 = ((($374)) + -4|0);
-   $14 = $375;
-   HEAP32[$375>>2] = $373;
-  }
-  while(1) {
-   $376 = $17;
-   $377 = $14;
-   $378 = ($376>>>0)>($377>>>0);
-   if (!($378)) {
-    break;
-   }
-   $379 = $17;
-   $380 = ((($379)) + -4|0);
-   $381 = HEAP32[$380>>2]|0;
-   $382 = ($381|0)!=(0);
-   $383 = $382 ^ 1;
-   if (!($383)) {
-    break;
-   }
-   $384 = $17;
-   $385 = ((($384)) + -4|0);
-   $17 = $385;
-  }
-  $386 = $35;
-  $387 = HEAP32[$19>>2]|0;
-  $388 = (($387) - ($386))|0;
-  HEAP32[$19>>2] = $388;
- }
- while(1) {
-  $389 = HEAP32[$19>>2]|0;
-  $390 = ($389|0)<(0);
-  if (!($390)) {
-   break;
-  }
-  $37 = 0;
-  $391 = HEAP32[$19>>2]|0;
-  $392 = (0 - ($391))|0;
-  $393 = (9)<($392|0);
-  $394 = HEAP32[$19>>2]|0;
-  $395 = (0 - ($394))|0;
-  $396 = $393 ? 9 : $395;
-  $39 = $396;
-  $397 = $10;
-  $398 = (($397) + 17)|0;
-  $399 = (($398) + 8)|0;
-  $400 = (($399|0) / 9)&-1;
-  $401 = (1 + ($400))|0;
-  $40 = $401;
-  $402 = $14;
-  $15 = $402;
-  while(1) {
-   $403 = $15;
-   $404 = $17;
-   $405 = ($403>>>0)<($404>>>0);
-   if (!($405)) {
-    break;
-   }
-   $406 = $15;
-   $407 = HEAP32[$406>>2]|0;
-   $408 = $39;
-   $409 = 1 << $408;
-   $410 = (($409) - 1)|0;
-   $411 = $407 & $410;
-   $41 = $411;
-   $412 = $15;
-   $413 = HEAP32[$412>>2]|0;
-   $414 = $39;
-   $415 = $413 >>> $414;
-   $416 = $37;
-   $417 = (($415) + ($416))|0;
-   $418 = $15;
-   HEAP32[$418>>2] = $417;
-   $419 = $39;
-   $420 = 1000000000 >> $419;
-   $421 = $41;
-   $422 = Math_imul($420, $421)|0;
-   $37 = $422;
-   $423 = $15;
-   $424 = ((($423)) + 4|0);
-   $15 = $424;
-  }
-  $425 = $14;
-  $426 = HEAP32[$425>>2]|0;
-  $427 = ($426|0)!=(0);
-  if (!($427)) {
-   $428 = $14;
-   $429 = ((($428)) + 4|0);
-   $14 = $429;
-  }
-  $430 = $37;
-  $431 = ($430|0)!=(0);
-  if ($431) {
-   $432 = $37;
-   $433 = $17;
-   $434 = ((($433)) + 4|0);
-   $17 = $434;
-   HEAP32[$433>>2] = $432;
-  }
-  $435 = $12;
-  $436 = $435 | 32;
-  $437 = ($436|0)==(102);
-  $438 = $16;
-  $439 = $14;
-  $440 = $437 ? $438 : $439;
-  $38 = $440;
-  $441 = $17;
-  $442 = $38;
-  $443 = $441;
-  $444 = $442;
-  $445 = (($443) - ($444))|0;
-  $446 = (($445|0) / 4)&-1;
-  $447 = $40;
-  $448 = ($446|0)>($447|0);
-  if ($448) {
-   $449 = $38;
-   $450 = $40;
-   $451 = (($449) + ($450<<2)|0);
-   $17 = $451;
-  }
-  $452 = $39;
-  $453 = HEAP32[$19>>2]|0;
-  $454 = (($453) + ($452))|0;
-  HEAP32[$19>>2] = $454;
- }
- $455 = $14;
- $456 = $17;
- $457 = ($455>>>0)<($456>>>0);
- L105: do {
-  if ($457) {
-   $18 = 10;
-   $458 = $16;
-   $459 = $14;
-   $460 = $458;
-   $461 = $459;
-   $462 = (($460) - ($461))|0;
-   $463 = (($462|0) / 4)&-1;
-   $464 = ($463*9)|0;
-   $20 = $464;
-   while(1) {
-    $465 = $14;
-    $466 = HEAP32[$465>>2]|0;
-    $467 = $18;
-    $468 = ($466>>>0)>=($467>>>0);
-    if (!($468)) {
-     break L105;
-    }
-    $469 = $18;
-    $470 = ($469*10)|0;
-    $18 = $470;
-    $471 = $20;
-    $472 = (($471) + 1)|0;
-    $20 = $472;
-   }
-  } else {
-   $20 = 0;
-  }
- } while(0);
- $473 = $10;
- $474 = $12;
- $475 = $474 | 32;
- $476 = ($475|0)!=(102);
- $477 = $476&1;
- $478 = $20;
- $479 = Math_imul($477, $478)|0;
- $480 = (($473) - ($479))|0;
- $481 = $12;
- $482 = $481 | 32;
- $483 = ($482|0)==(103);
- $484 = $10;
- $485 = ($484|0)!=(0);
- $486 = $483 ? $485 : 0;
- $487 = $486&1;
- $488 = (($480) - ($487))|0;
- $21 = $488;
- $489 = $21;
- $490 = $17;
- $491 = $16;
- $492 = $490;
- $493 = $491;
- $494 = (($492) - ($493))|0;
- $495 = (($494|0) / 4)&-1;
- $496 = (($495) - 1)|0;
- $497 = ($496*9)|0;
- $498 = ($489|0)<($497|0);
- if ($498) {
-  $499 = $16;
-  $500 = ((($499)) + 4|0);
-  $501 = $21;
-  $502 = (($501) + 9216)|0;
-  $503 = (($502|0) / 9)&-1;
-  $504 = (($503) - 1024)|0;
-  $505 = (($500) + ($504<<2)|0);
-  $15 = $505;
-  $506 = $21;
-  $507 = (($506) + 9216)|0;
-  $21 = $507;
-  $508 = $21;
-  $509 = (($508|0) % 9)&-1;
-  $21 = $509;
-  $18 = 10;
-  $510 = $21;
-  $511 = (($510) + 1)|0;
-  $21 = $511;
-  while(1) {
-   $512 = $21;
-   $513 = ($512|0)<(9);
-   if (!($513)) {
-    break;
-   }
-   $514 = $18;
-   $515 = ($514*10)|0;
-   $18 = $515;
-   $516 = $21;
-   $517 = (($516) + 1)|0;
-   $21 = $517;
-  }
-  $518 = $15;
-  $519 = HEAP32[$518>>2]|0;
-  $520 = $18;
-  $521 = (($519>>>0) % ($520>>>0))&-1;
-  $42 = $521;
-  $522 = $42;
-  $523 = ($522|0)!=(0);
-  if ($523) {
-   label = 82;
-  } else {
-   $524 = $15;
-   $525 = ((($524)) + 4|0);
-   $526 = $17;
-   $527 = ($525|0)!=($526|0);
-   if ($527) {
-    label = 82;
-   }
-  }
-  L120: do {
-   if ((label|0) == 82) {
-    $43 = 9007199254740992.0;
-    $528 = $15;
-    $529 = HEAP32[$528>>2]|0;
-    $530 = $18;
-    $531 = (($529>>>0) / ($530>>>0))&-1;
-    $532 = $531 & 1;
-    $533 = ($532|0)!=(0);
-    if ($533) {
-     $534 = $43;
-     $535 = $534 + 2.0;
-     $43 = $535;
-    }
-    $536 = $42;
-    $537 = $18;
-    $538 = (($537>>>0) / 2)&-1;
-    $539 = ($536>>>0)<($538>>>0);
-    do {
-     if ($539) {
-      $44 = 0.5;
-     } else {
-      $540 = $42;
-      $541 = $18;
-      $542 = (($541>>>0) / 2)&-1;
-      $543 = ($540|0)==($542|0);
-      if ($543) {
-       $544 = $15;
-       $545 = ((($544)) + 4|0);
-       $546 = $17;
-       $547 = ($545|0)==($546|0);
-       if ($547) {
-        $44 = 1.0;
-        break;
-       }
-      }
-      $44 = 1.5;
-     }
-    } while(0);
-    $548 = $26;
-    $549 = ($548|0)!=(0);
-    if ($549) {
-     $550 = $25;
-     $551 = HEAP8[$550>>0]|0;
-     $552 = $551 << 24 >> 24;
-     $553 = ($552|0)==(45);
-     if ($553) {
-      $554 = $43;
-      $555 = $554 * -1.0;
-      $43 = $555;
-      $556 = $44;
-      $557 = $556 * -1.0;
-      $44 = $557;
-     }
-    }
-    $558 = $42;
-    $559 = $15;
-    $560 = HEAP32[$559>>2]|0;
-    $561 = (($560) - ($558))|0;
-    HEAP32[$559>>2] = $561;
-    $562 = $43;
-    $563 = $44;
-    $564 = $562 + $563;
-    $565 = $43;
-    $566 = $564 != $565;
-    if ($566) {
-     $567 = $15;
-     $568 = HEAP32[$567>>2]|0;
-     $569 = $18;
-     $570 = (($568) + ($569))|0;
-     $571 = $15;
-     HEAP32[$571>>2] = $570;
-     while(1) {
-      $572 = $15;
-      $573 = HEAP32[$572>>2]|0;
-      $574 = ($573>>>0)>(999999999);
-      if (!($574)) {
-       break;
-      }
-      $575 = $15;
-      $576 = ((($575)) + -4|0);
-      $15 = $576;
-      HEAP32[$575>>2] = 0;
-      $577 = $15;
-      $578 = $14;
-      $579 = ($577>>>0)<($578>>>0);
-      if ($579) {
-       $580 = $14;
-       $581 = ((($580)) + -4|0);
-       $14 = $581;
-       HEAP32[$581>>2] = 0;
-      }
-      $582 = $15;
-      $583 = HEAP32[$582>>2]|0;
-      $584 = (($583) + 1)|0;
-      HEAP32[$582>>2] = $584;
-     }
-     $18 = 10;
-     $585 = $16;
-     $586 = $14;
-     $587 = $585;
-     $588 = $586;
-     $589 = (($587) - ($588))|0;
-     $590 = (($589|0) / 4)&-1;
-     $591 = ($590*9)|0;
-     $20 = $591;
-     while(1) {
-      $592 = $14;
-      $593 = HEAP32[$592>>2]|0;
-      $594 = $18;
-      $595 = ($593>>>0)>=($594>>>0);
-      if (!($595)) {
-       break L120;
-      }
-      $596 = $18;
-      $597 = ($596*10)|0;
-      $18 = $597;
-      $598 = $20;
-      $599 = (($598) + 1)|0;
-      $20 = $599;
-     }
-    }
-   }
-  } while(0);
-  $600 = $17;
-  $601 = $15;
-  $602 = ((($601)) + 4|0);
-  $603 = ($600>>>0)>($602>>>0);
-  if ($603) {
-   $604 = $15;
-   $605 = ((($604)) + 4|0);
-   $17 = $605;
-  }
- }
- while(1) {
-  $606 = $17;
-  $607 = $14;
-  $608 = ($606>>>0)>($607>>>0);
-  if (!($608)) {
-   break;
-  }
-  $609 = $17;
-  $610 = ((($609)) + -4|0);
-  $611 = HEAP32[$610>>2]|0;
-  $612 = ($611|0)!=(0);
-  $613 = $612 ^ 1;
-  if (!($613)) {
-   break;
-  }
-  $614 = $17;
-  $615 = ((($614)) + -4|0);
-  $17 = $615;
- }
- $616 = $12;
- $617 = $616 | 32;
- $618 = ($617|0)==(103);
- do {
-  if ($618) {
-   $619 = $10;
-   $620 = ($619|0)!=(0);
-   if (!($620)) {
-    $621 = $10;
-    $622 = (($621) + 1)|0;
-    $10 = $622;
-   }
-   $623 = $10;
-   $624 = $20;
-   $625 = ($623|0)>($624|0);
-   $626 = $20;
-   $627 = ($626|0)>=(-4);
-   $or$cond6 = $625 & $627;
-   $628 = $12;
-   if ($or$cond6) {
-    $629 = (($628) + -1)|0;
-    $12 = $629;
-    $630 = $20;
-    $631 = (($630) + 1)|0;
-    $632 = $10;
-    $633 = (($632) - ($631))|0;
-    $10 = $633;
-   } else {
-    $634 = (($628) - 2)|0;
-    $12 = $634;
-    $635 = $10;
-    $636 = (($635) + -1)|0;
-    $10 = $636;
-   }
-   $637 = $11;
-   $638 = $637 & 8;
-   $639 = ($638|0)!=(0);
-   if (!($639)) {
-    $640 = $17;
-    $641 = $14;
-    $642 = ($640>>>0)>($641>>>0);
-    L165: do {
-     if ($642) {
-      $643 = $17;
-      $644 = ((($643)) + -4|0);
-      $645 = HEAP32[$644>>2]|0;
-      $646 = ($645|0)!=(0);
-      if ($646) {
-       $18 = 10;
-       $21 = 0;
-       while(1) {
-        $647 = $17;
-        $648 = ((($647)) + -4|0);
-        $649 = HEAP32[$648>>2]|0;
-        $650 = $18;
-        $651 = (($649>>>0) % ($650>>>0))&-1;
-        $652 = ($651|0)==(0);
-        if (!($652)) {
-         break L165;
-        }
-        $653 = $18;
-        $654 = ($653*10)|0;
-        $18 = $654;
-        $655 = $21;
-        $656 = (($655) + 1)|0;
-        $21 = $656;
-       }
-      } else {
-       label = 119;
-      }
-     } else {
-      label = 119;
-     }
-    } while(0);
-    if ((label|0) == 119) {
-     $21 = 9;
-    }
-    $657 = $12;
-    $658 = $657 | 32;
-    $659 = ($658|0)==(102);
-    $660 = $10;
-    $661 = $17;
-    $662 = $16;
-    $663 = $661;
-    $664 = $662;
-    $665 = (($663) - ($664))|0;
-    $666 = (($665|0) / 4)&-1;
-    $667 = (($666) - 1)|0;
-    $668 = ($667*9)|0;
-    if ($659) {
-     $669 = $21;
-     $670 = (($668) - ($669))|0;
-     $671 = (0)>($670|0);
-     if ($671) {
-      $683 = 0;
-     } else {
-      $672 = $17;
-      $673 = $16;
-      $674 = $672;
-      $675 = $673;
-      $676 = (($674) - ($675))|0;
-      $677 = (($676|0) / 4)&-1;
-      $678 = (($677) - 1)|0;
-      $679 = ($678*9)|0;
-      $680 = $21;
-      $681 = (($679) - ($680))|0;
-      $683 = $681;
-     }
-     $682 = ($660|0)<($683|0);
-     do {
-      if ($682) {
-       $684 = $10;
-       $706 = $684;
-      } else {
-       $685 = $17;
-       $686 = $16;
-       $687 = $685;
-       $688 = $686;
-       $689 = (($687) - ($688))|0;
-       $690 = (($689|0) / 4)&-1;
-       $691 = (($690) - 1)|0;
-       $692 = ($691*9)|0;
-       $693 = $21;
-       $694 = (($692) - ($693))|0;
-       $695 = (0)>($694|0);
-       if ($695) {
-        $706 = 0;
-        break;
-       }
-       $696 = $17;
-       $697 = $16;
-       $698 = $696;
-       $699 = $697;
-       $700 = (($698) - ($699))|0;
-       $701 = (($700|0) / 4)&-1;
-       $702 = (($701) - 1)|0;
-       $703 = ($702*9)|0;
-       $704 = $21;
-       $705 = (($703) - ($704))|0;
-       $706 = $705;
-      }
-     } while(0);
-     $10 = $706;
-     break;
-    } else {
-     $707 = $20;
-     $708 = (($668) + ($707))|0;
-     $709 = $21;
-     $710 = (($708) - ($709))|0;
-     $711 = (0)>($710|0);
-     if ($711) {
-      $725 = 0;
-     } else {
-      $712 = $17;
-      $713 = $16;
-      $714 = $712;
-      $715 = $713;
-      $716 = (($714) - ($715))|0;
-      $717 = (($716|0) / 4)&-1;
-      $718 = (($717) - 1)|0;
-      $719 = ($718*9)|0;
-      $720 = $20;
-      $721 = (($719) + ($720))|0;
-      $722 = $21;
-      $723 = (($721) - ($722))|0;
-      $725 = $723;
-     }
-     $724 = ($660|0)<($725|0);
-     do {
-      if ($724) {
-       $726 = $10;
-       $752 = $726;
-      } else {
-       $727 = $17;
-       $728 = $16;
-       $729 = $727;
-       $730 = $728;
-       $731 = (($729) - ($730))|0;
-       $732 = (($731|0) / 4)&-1;
-       $733 = (($732) - 1)|0;
-       $734 = ($733*9)|0;
-       $735 = $20;
-       $736 = (($734) + ($735))|0;
-       $737 = $21;
-       $738 = (($736) - ($737))|0;
-       $739 = (0)>($738|0);
-       if ($739) {
-        $752 = 0;
-        break;
-       }
-       $740 = $17;
-       $741 = $16;
-       $742 = $740;
-       $743 = $741;
-       $744 = (($742) - ($743))|0;
-       $745 = (($744|0) / 4)&-1;
-       $746 = (($745) - 1)|0;
-       $747 = ($746*9)|0;
-       $748 = $20;
-       $749 = (($747) + ($748))|0;
-       $750 = $21;
-       $751 = (($749) - ($750))|0;
-       $752 = $751;
-      }
-     } while(0);
-     $10 = $752;
-     break;
-    }
-   }
-  }
- } while(0);
- $753 = $10;
- $754 = (1 + ($753))|0;
- $755 = $10;
- $756 = ($755|0)!=(0);
- if ($756) {
-  $761 = 1;
- } else {
-  $757 = $11;
-  $758 = $757 & 8;
-  $759 = ($758|0)!=(0);
-  $761 = $759;
- }
- $760 = $761&1;
- $762 = (($754) + ($760))|0;
- $22 = $762;
- $763 = $12;
- $764 = $763 | 32;
- $765 = ($764|0)==(102);
- $766 = $20;
- if ($765) {
-  $767 = ($766|0)>(0);
-  if ($767) {
-   $768 = $20;
-   $769 = $22;
-   $770 = (($769) + ($768))|0;
-   $22 = $770;
-  }
- } else {
-  $771 = ($766|0)<(0);
-  $772 = $20;
-  $773 = (0 - ($772))|0;
-  $774 = $771 ? $773 : $772;
-  $775 = $28;
-  $776 = (_fmt_u($774,$775)|0);
-  $29 = $776;
-  while(1) {
-   $777 = $28;
-   $778 = $29;
-   $779 = $777;
-   $780 = $778;
-   $781 = (($779) - ($780))|0;
-   $782 = ($781|0)<(2);
-   if (!($782)) {
-    break;
-   }
-   $783 = $29;
-   $784 = ((($783)) + -1|0);
-   $29 = $784;
-   HEAP8[$784>>0] = 48;
-  }
-  $785 = $20;
-  $786 = ($785|0)<(0);
-  $787 = $786 ? 45 : 43;
-  $788 = $787&255;
-  $789 = $29;
-  $790 = ((($789)) + -1|0);
-  $29 = $790;
-  HEAP8[$790>>0] = $788;
-  $791 = $12;
-  $792 = $791&255;
-  $793 = $29;
-  $794 = ((($793)) + -1|0);
-  $29 = $794;
-  HEAP8[$794>>0] = $792;
-  $795 = $28;
-  $796 = $29;
-  $797 = $795;
-  $798 = $796;
-  $799 = (($797) - ($798))|0;
-  $800 = $22;
-  $801 = (($800) + ($799))|0;
-  $22 = $801;
- }
- $802 = $7;
- $803 = $9;
- $804 = $26;
- $805 = $22;
- $806 = (($804) + ($805))|0;
- $807 = $11;
- _pad($802,32,$803,$806,$807);
- $808 = $7;
- $809 = $25;
- $810 = $26;
- _out($808,$809,$810);
- $811 = $7;
- $812 = $9;
- $813 = $26;
- $814 = $22;
- $815 = (($813) + ($814))|0;
- $816 = $11;
- $817 = $816 ^ 65536;
- _pad($811,48,$812,$815,$817);
- $818 = $12;
- $819 = $818 | 32;
- $820 = ($819|0)==(102);
- if ($820) {
-  $821 = $14;
-  $822 = $16;
-  $823 = ($821>>>0)>($822>>>0);
-  if ($823) {
-   $824 = $16;
-   $14 = $824;
-  }
-  $825 = $14;
-  $15 = $825;
-  while(1) {
-   $826 = $15;
-   $827 = $16;
-   $828 = ($826>>>0)<=($827>>>0);
-   if (!($828)) {
-    break;
-   }
-   $829 = $15;
-   $830 = HEAP32[$829>>2]|0;
-   $831 = ((($23)) + 9|0);
-   $832 = (_fmt_u($830,$831)|0);
-   $45 = $832;
-   $833 = $15;
-   $834 = $14;
-   $835 = ($833|0)!=($834|0);
-   L214: do {
-    if ($835) {
-     while(1) {
-      $836 = $45;
-      $837 = ($836>>>0)>($23>>>0);
-      if (!($837)) {
-       break L214;
-      }
-      $838 = $45;
-      $839 = ((($838)) + -1|0);
-      $45 = $839;
-      HEAP8[$839>>0] = 48;
-     }
-    } else {
-     $840 = $45;
-     $841 = ((($23)) + 9|0);
-     $842 = ($840|0)==($841|0);
-     if ($842) {
-      $843 = $45;
-      $844 = ((($843)) + -1|0);
-      $45 = $844;
-      HEAP8[$844>>0] = 48;
-     }
-    }
-   } while(0);
-   $845 = $7;
-   $846 = $45;
-   $847 = ((($23)) + 9|0);
-   $848 = $45;
-   $849 = $847;
-   $850 = $848;
-   $851 = (($849) - ($850))|0;
-   _out($845,$846,$851);
-   $852 = $15;
-   $853 = ((($852)) + 4|0);
-   $15 = $853;
-  }
-  $854 = $10;
-  $855 = ($854|0)!=(0);
-  if ($855) {
-   label = 157;
-  } else {
-   $856 = $11;
-   $857 = $856 & 8;
-   $858 = ($857|0)!=(0);
-   if ($858) {
-    label = 157;
-   }
-  }
-  if ((label|0) == 157) {
-   $859 = $7;
-   _out($859,70783,1);
-  }
-  while(1) {
-   $860 = $15;
-   $861 = $17;
-   $862 = ($860>>>0)<($861>>>0);
-   $863 = $10;
-   $864 = ($863|0)>(0);
-   $865 = $862 ? $864 : 0;
-   if (!($865)) {
-    break;
-   }
-   $866 = $15;
-   $867 = HEAP32[$866>>2]|0;
-   $868 = ((($23)) + 9|0);
-   $869 = (_fmt_u($867,$868)|0);
-   $46 = $869;
-   while(1) {
-    $870 = $46;
-    $871 = ($870>>>0)>($23>>>0);
-    if (!($871)) {
-     break;
-    }
-    $872 = $46;
-    $873 = ((($872)) + -1|0);
-    $46 = $873;
-    HEAP8[$873>>0] = 48;
-   }
-   $874 = $7;
-   $875 = $46;
-   $876 = $10;
-   $877 = (9)<($876|0);
-   $878 = $10;
-   $879 = $877 ? 9 : $878;
-   _out($874,$875,$879);
-   $880 = $15;
-   $881 = ((($880)) + 4|0);
-   $15 = $881;
-   $882 = $10;
-   $883 = (($882) - 9)|0;
-   $10 = $883;
-  }
-  $884 = $7;
-  $885 = $10;
-  $886 = (($885) + 9)|0;
-  _pad($884,48,$886,9,0);
- } else {
-  $887 = $17;
-  $888 = $14;
-  $889 = ($887>>>0)<=($888>>>0);
-  if ($889) {
-   $890 = $14;
-   $891 = ((($890)) + 4|0);
-   $17 = $891;
-  }
-  $892 = $14;
-  $15 = $892;
-  while(1) {
-   $893 = $15;
-   $894 = $17;
-   $895 = ($893>>>0)<($894>>>0);
-   $896 = $10;
-   $897 = ($896|0)>=(0);
-   $898 = $895 ? $897 : 0;
-   if (!($898)) {
-    break;
-   }
-   $899 = $15;
-   $900 = HEAP32[$899>>2]|0;
-   $901 = ((($23)) + 9|0);
-   $902 = (_fmt_u($900,$901)|0);
-   $47 = $902;
-   $903 = $47;
-   $904 = ((($23)) + 9|0);
-   $905 = ($903|0)==($904|0);
-   if ($905) {
-    $906 = $47;
-    $907 = ((($906)) + -1|0);
-    $47 = $907;
-    HEAP8[$907>>0] = 48;
-   }
-   $908 = $15;
-   $909 = $14;
-   $910 = ($908|0)!=($909|0);
-   L244: do {
-    if ($910) {
-     while(1) {
-      $911 = $47;
-      $912 = ($911>>>0)>($23>>>0);
-      if (!($912)) {
-       break L244;
-      }
-      $913 = $47;
-      $914 = ((($913)) + -1|0);
-      $47 = $914;
-      HEAP8[$914>>0] = 48;
-     }
-    } else {
-     $915 = $7;
-     $916 = $47;
-     $917 = ((($916)) + 1|0);
-     $47 = $917;
-     _out($915,$916,1);
-     $918 = $10;
-     $919 = ($918|0)>(0);
-     if (!($919)) {
-      $920 = $11;
-      $921 = $920 & 8;
-      $922 = ($921|0)!=(0);
-      if (!($922)) {
-       break;
-      }
-     }
-     $923 = $7;
-     _out($923,70783,1);
-    }
-   } while(0);
-   $924 = $7;
-   $925 = $47;
-   $926 = ((($23)) + 9|0);
-   $927 = $47;
-   $928 = $926;
-   $929 = $927;
-   $930 = (($928) - ($929))|0;
-   $931 = $10;
-   $932 = ($930|0)<($931|0);
-   if ($932) {
-    $933 = ((($23)) + 9|0);
-    $934 = $47;
-    $935 = $933;
-    $936 = $934;
-    $937 = (($935) - ($936))|0;
-    $939 = $937;
-   } else {
-    $938 = $10;
-    $939 = $938;
-   }
-   _out($924,$925,$939);
-   $940 = ((($23)) + 9|0);
-   $941 = $47;
-   $942 = $940;
-   $943 = $941;
-   $944 = (($942) - ($943))|0;
-   $945 = $10;
-   $946 = (($945) - ($944))|0;
-   $10 = $946;
-   $947 = $15;
-   $948 = ((($947)) + 4|0);
-   $15 = $948;
-  }
-  $949 = $7;
-  $950 = $10;
-  $951 = (($950) + 18)|0;
-  _pad($949,48,$951,18,0);
-  $952 = $7;
-  $953 = $29;
-  $954 = $28;
-  $955 = $29;
-  $956 = $954;
-  $957 = $955;
-  $958 = (($956) - ($957))|0;
-  _out($952,$953,$958);
- }
- $959 = $7;
- $960 = $9;
- $961 = $26;
- $962 = $22;
- $963 = (($961) + ($962))|0;
- $964 = $11;
- $965 = $964 ^ 8192;
- _pad($959,32,$960,$963,$965);
- $966 = $9;
- $967 = $26;
- $968 = $22;
- $969 = (($967) + ($968))|0;
- $970 = ($966|0)>($969|0);
- if ($970) {
-  $971 = $9;
-  $975 = $971;
- } else {
-  $972 = $26;
-  $973 = $22;
-  $974 = (($972) + ($973))|0;
-  $975 = $974;
- }
- $6 = $975;
- $976 = $6;
- STACKTOP = sp;return ($976|0);
-}
-function ___FLOAT_BITS($0) {
- $0 = +$0;
- var $1 = 0.0, $2 = 0, $3 = 0.0, $4 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = sp;
- $1 = $0;
- $3 = $1;
- HEAPF32[$2>>2] = $3;
- $4 = HEAP32[$2>>2]|0;
- STACKTOP = sp;return ($4|0);
-}
-function ___DOUBLE_BITS($0) {
- $0 = +$0;
- var $1 = 0.0, $2 = 0, $3 = 0.0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = sp;
- $1 = $0;
- $3 = $1;
- HEAPF64[$2>>3] = $3;
- $4 = $2;
- $5 = $4;
- $6 = HEAP32[$5>>2]|0;
- $7 = (($4) + 4)|0;
- $8 = $7;
- $9 = HEAP32[$8>>2]|0;
- tempRet0 = ($9);
- STACKTOP = sp;return ($6|0);
-}
-function _pad($0,$1,$2,$3,$4) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- $4 = $4|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;
- var $30 = 0, $31 = 0, $32 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 288|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(288|0);
- $10 = sp + 16|0;
- $5 = $0;
- $6 = $1;
- $7 = $2;
- $8 = $3;
- $9 = $4;
- $11 = $9;
- $12 = $11 & 73728;
- $13 = ($12|0)!=(0);
- if ($13) {
-  STACKTOP = sp;return;
- }
- $14 = $8;
- $15 = $7;
- $16 = ($14|0)>=($15|0);
- if ($16) {
-  STACKTOP = sp;return;
- }
- $17 = $7;
- $18 = $8;
- $19 = (($17) - ($18))|0;
- $8 = $19;
- $20 = $6;
- $21 = $20 << 24 >> 24;
- $22 = $21&255;
- $23 = $8;
- $24 = ($23|0)>(256);
- $25 = $8;
- $26 = $24 ? 256 : $25;
- _memset(($10|0),($22|0),($26|0))|0;
- while(1) {
-  $27 = $8;
-  $28 = ($27|0)>=(256);
-  $29 = $5;
-  if (!($28)) {
-   break;
-  }
-  _out($29,$10,256);
-  $30 = $8;
-  $31 = (($30) - 256)|0;
-  $8 = $31;
- }
- $32 = $8;
- _out($29,$10,$32);
- STACKTOP = sp;return;
-}
-function _out($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $10 = 0, $11 = 0, $12 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $$byval_copy = sp + 24|0;
- $6 = sp;
- $3 = $0;
- $4 = $1;
- $5 = $2;
- $7 = $3;
- $8 = HEAP32[$7>>2]|0;
- $9 = $3;
- $10 = ((($9)) + 4|0);
- $11 = $4;
- $12 = $5;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$10>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$10+4>>2]|0;
- _mrb_str_cat($6,$8,$$byval_copy,$11,$12);
- STACKTOP = sp;return;
-}
-function _fmt_u($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- while(1) {
-  $4 = $2;
-  $5 = ($4|0)!=(0);
-  if (!($5)) {
-   break;
-  }
-  $6 = $2;
-  $7 = (($6>>>0) % 10)&-1;
-  $8 = (48 + ($7))|0;
-  $9 = $8&255;
-  $10 = $3;
-  $11 = ((($10)) + -1|0);
-  $3 = $11;
-  HEAP8[$11>>0] = $9;
-  $12 = $2;
-  $13 = (($12>>>0) / 10)&-1;
-  $2 = $13;
- }
- $14 = $3;
- STACKTOP = sp;return ($14|0);
-}
-function _mrb_realloc_simple($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;
- var $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $or$cond = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $0;
- $4 = $1;
- $5 = $2;
- $7 = $3;
- $8 = ((($7)) + 4|0);
- $9 = HEAP32[$8>>2]|0;
- $10 = $3;
- $11 = $4;
- $12 = $5;
- $13 = $3;
- $14 = ((($13)) + 8|0);
- $15 = HEAP32[$14>>2]|0;
- $16 = (FUNCTION_TABLE_iiiii[$9 & 255]($10,$11,$12,$15)|0);
- $6 = $16;
- $17 = $6;
- $18 = ($17|0)==(0|0);
- $19 = $5;
- $20 = ($19>>>0)>(0);
- $or$cond = $18 & $20;
- if (!($or$cond)) {
-  $36 = $6;
-  STACKTOP = sp;return ($36|0);
- }
- $21 = $3;
- $22 = ((($21)) + 92|0);
- $23 = HEAP32[$22>>2]|0;
- $24 = ($23|0)!=(0|0);
- if (!($24)) {
-  $36 = $6;
-  STACKTOP = sp;return ($36|0);
- }
- $25 = $3;
- _mrb_full_gc($25);
- $26 = $3;
- $27 = ((($26)) + 4|0);
- $28 = HEAP32[$27>>2]|0;
- $29 = $3;
- $30 = $4;
- $31 = $5;
- $32 = $3;
- $33 = ((($32)) + 8|0);
- $34 = HEAP32[$33>>2]|0;
- $35 = (FUNCTION_TABLE_iiiii[$28 & 255]($29,$30,$31,$34)|0);
- $6 = $35;
- $36 = $6;
- STACKTOP = sp;return ($36|0);
-}
-function _mrb_full_gc($0) {
- $0 = $0|0;
- var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;
- var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0;
- var $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $1 = $0;
- $3 = $1;
- $4 = ((($3)) + 92|0);
- $2 = $4;
- $5 = $2;
- $6 = ((($5)) + 452|0);
- $7 = HEAP8[$6>>0]|0;
- $8 = $7 & 1;
- $9 = ($8<<24>>24)!=(0);
- if ($9) {
-  STACKTOP = sp;return;
- }
- $10 = $2;
- $11 = ((($10)) + 452|0);
- $12 = HEAP8[$11>>0]|0;
- $13 = ($12&255) >>> 2;
- $14 = $13 & 1;
- $15 = ($14<<24>>24)!=(0);
- if ($15) {
-  $16 = $1;
-  $17 = $2;
-  _clear_all_old($16,$17);
-  $18 = $2;
-  $19 = ((($18)) + 452|0);
-  $20 = HEAP8[$19>>0]|0;
-  $21 = $20 & -3;
-  $22 = $21 | 2;
-  HEAP8[$19>>0] = $22;
- } else {
-  $23 = $2;
-  $24 = ((($23)) + 420|0);
-  $25 = HEAP32[$24>>2]|0;
-  $26 = ($25|0)!=(0);
-  if ($26) {
-   $27 = $1;
-   $28 = $2;
-   _incremental_gc_until($27,$28,0);
-  }
- }
- $29 = $1;
- $30 = $2;
- _incremental_gc_until($29,$30,0);
- $31 = $2;
- $32 = ((($31)) + 436|0);
- $33 = HEAP32[$32>>2]|0;
- $34 = (($33>>>0) / 100)&-1;
- $35 = $2;
- $36 = ((($35)) + 444|0);
- $37 = HEAP32[$36>>2]|0;
- $38 = Math_imul($34, $37)|0;
- $39 = $2;
- $40 = ((($39)) + 440|0);
- HEAP32[$40>>2] = $38;
- $41 = $2;
- $42 = ((($41)) + 452|0);
- $43 = HEAP8[$42>>0]|0;
- $44 = ($43&255) >>> 2;
- $45 = $44 & 1;
- $46 = ($45<<24>>24)!=(0);
- if (!($46)) {
-  STACKTOP = sp;return;
- }
- $47 = $2;
- $48 = ((($47)) + 436|0);
- $49 = HEAP32[$48>>2]|0;
- $50 = (($49>>>0) / 100)&-1;
- $51 = ($50*200)|0;
- $52 = $2;
- $53 = ((($52)) + 456|0);
- HEAP32[$53>>2] = $51;
- $54 = $2;
- $55 = ((($54)) + 452|0);
- $56 = HEAP8[$55>>0]|0;
- $57 = $56 & -3;
- HEAP8[$55>>0] = $57;
- STACKTOP = sp;return;
-}
-function _clear_all_old($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;
- var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $5 = 0;
- var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $5 = $3;
- $6 = ((($5)) + 452|0);
- $7 = HEAP8[$6>>0]|0;
- $8 = ($7&255) >>> 2;
- $9 = $8 & 1;
- $4 = $9;
- $10 = $3;
- $11 = ((($10)) + 452|0);
- $12 = HEAP8[$11>>0]|0;
- $13 = ($12&255) >>> 2;
- $14 = $13 & 1;
- $15 = $14&255;
- $16 = ($15|0)!=(0);
- if ($16) {
-  $17 = $3;
-  $18 = ((($17)) + 452|0);
-  $19 = HEAP8[$18>>0]|0;
-  $20 = ($19&255) >>> 1;
-  $21 = $20 & 1;
-  $22 = $21&255;
-  $23 = ($22|0)!=(0);
-  if ($23) {
-   $24 = $2;
-   $25 = $3;
-   _incremental_gc_until($24,$25,0);
-  }
- }
- $26 = $3;
- $27 = ((($26)) + 452|0);
- $28 = HEAP8[$27>>0]|0;
- $29 = $28 & -5;
- HEAP8[$27>>0] = $29;
- $30 = $2;
- $31 = $3;
- _prepare_incremental_sweep($30,$31);
- $32 = $2;
- $33 = $3;
- _incremental_gc_until($32,$33,0);
- $34 = $4;
- $35 = $3;
- $36 = ((($35)) + 452|0);
- $37 = HEAP8[$36>>0]|0;
- $38 = $34 & 1;
- $39 = ($38 << 2)&255;
- $40 = $37 & -5;
- $41 = $40 | $39;
- HEAP8[$36>>0] = $41;
- $42 = $3;
- $43 = ((($42)) + 428|0);
- HEAP32[$43>>2] = 0;
- $44 = $3;
- $45 = ((($44)) + 432|0);
- HEAP32[$45>>2] = 0;
- STACKTOP = sp;return;
-}
-function _incremental_gc_until($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $0;
- $4 = $1;
- $5 = $2;
- while(1) {
-  $6 = $3;
-  $7 = $4;
-  (_incremental_gc($6,$7,-1)|0);
-  $8 = $4;
-  $9 = ((($8)) + 420|0);
-  $10 = HEAP32[$9>>2]|0;
-  $11 = $5;
-  $12 = ($10|0)!=($11|0);
-  if (!($12)) {
-   break;
-  }
- }
- STACKTOP = sp;return;
-}
-function _incremental_gc($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;
- var $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $4 = $0;
- $5 = $1;
- $6 = $2;
- $8 = $5;
- $9 = ((($8)) + 420|0);
- $10 = HEAP32[$9>>2]|0;
- switch ($10|0) {
- case 0:  {
-  $11 = $4;
-  $12 = $5;
-  _root_scan_phase($11,$12);
-  $13 = $5;
-  $14 = ((($13)) + 420|0);
-  HEAP32[$14>>2] = 1;
-  $15 = $5;
-  $16 = ((($15)) + 424|0);
-  $17 = HEAP32[$16>>2]|0;
-  $18 = $17 ^ 3;
-  $19 = $5;
-  $20 = ((($19)) + 424|0);
-  HEAP32[$20>>2] = $18;
-  $3 = 0;
-  $40 = $3;
-  STACKTOP = sp;return ($40|0);
-  break;
- }
- case 1:  {
-  $21 = $5;
-  $22 = ((($21)) + 428|0);
-  $23 = HEAP32[$22>>2]|0;
-  $24 = ($23|0)!=(0|0);
-  $25 = $4;
-  $26 = $5;
-  if ($24) {
-   $27 = $6;
-   $28 = (_incremental_marking_phase($25,$26,$27)|0);
-   $3 = $28;
-   $40 = $3;
-   STACKTOP = sp;return ($40|0);
-  } else {
-   _final_marking_phase($25,$26);
-   $29 = $4;
-   $30 = $5;
-   _prepare_incremental_sweep($29,$30);
-   $3 = 0;
-   $40 = $3;
-   STACKTOP = sp;return ($40|0);
-  }
-  break;
- }
- case 2:  {
-  $7 = 0;
-  $31 = $4;
-  $32 = $5;
-  $33 = $6;
-  $34 = (_incremental_sweep_phase($31,$32,$33)|0);
-  $7 = $34;
-  $35 = $7;
-  $36 = ($35|0)==(0);
-  if ($36) {
-   $37 = $5;
-   $38 = ((($37)) + 420|0);
-   HEAP32[$38>>2] = 0;
-  }
-  $39 = $7;
-  $3 = $39;
-  $40 = $3;
-  STACKTOP = sp;return ($40|0);
-  break;
- }
- default: {
-  $3 = 0;
-  $40 = $3;
-  STACKTOP = sp;return ($40|0);
- }
- }
- return (0)|0;
-}
-function _root_scan_phase($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;
- var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0;
- var $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0;
- var $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $6 = $3;
- $7 = ((($6)) + 452|0);
- $8 = HEAP8[$7>>0]|0;
- $9 = ($8&255) >>> 2;
- $10 = $9 & 1;
- $11 = $10&255;
- $12 = ($11|0)!=(0);
- if ($12) {
-  $13 = $3;
-  $14 = ((($13)) + 452|0);
-  $15 = HEAP8[$14>>0]|0;
-  $16 = ($15&255) >>> 1;
-  $17 = $16 & 1;
-  $18 = ($17<<24>>24)!=(0);
-  if ($18) {
-   label = 3;
-  }
- } else {
-  label = 3;
- }
- if ((label|0) == 3) {
-  $19 = $3;
-  $20 = ((($19)) + 428|0);
-  HEAP32[$20>>2] = 0;
-  $21 = $3;
-  $22 = ((($21)) + 432|0);
-  HEAP32[$22>>2] = 0;
- }
- $23 = $2;
- _mrb_gc_mark_gv($23);
- $4 = 0;
- $24 = $3;
- $25 = ((($24)) + 416|0);
- $26 = HEAP32[$25>>2]|0;
- $5 = $26;
- while(1) {
-  $27 = $4;
-  $28 = $5;
-  $29 = ($27>>>0)<($28>>>0);
-  $30 = $2;
-  if (!($29)) {
-   break;
-  }
-  $31 = $3;
-  $32 = ((($31)) + 16|0);
-  $33 = $4;
-  $34 = (($32) + ($33<<2)|0);
-  $35 = HEAP32[$34>>2]|0;
-  _mrb_gc_mark($30,$35);
-  $36 = $4;
-  $37 = (($36) + 1)|0;
-  $4 = $37;
- }
- $38 = $2;
- $39 = ((($38)) + 32|0);
- $40 = HEAP32[$39>>2]|0;
- _mrb_gc_mark($30,$40);
- $41 = $2;
- $42 = $2;
- $43 = ((($42)) + 28|0);
- $44 = HEAP32[$43>>2]|0;
- _mrb_gc_mark($41,$44);
- $45 = $2;
- $46 = $2;
- $47 = ((($46)) + 20|0);
- $48 = HEAP32[$47>>2]|0;
- _mrb_gc_mark($45,$48);
- $49 = $2;
- $50 = $2;
- $51 = ((($50)) + 576|0);
- $52 = HEAP32[$51>>2]|0;
- _mrb_gc_mark($49,$52);
- $53 = $2;
- $54 = $2;
- $55 = ((($54)) + 16|0);
- $56 = HEAP32[$55>>2]|0;
- _mark_context($53,$56);
- $57 = $2;
- $58 = ((($57)) + 16|0);
- $59 = HEAP32[$58>>2]|0;
- $60 = ((($59)) + 48|0);
- $61 = HEAP32[$60>>2]|0;
- $62 = ($61|0)!=(0|0);
- if ($62) {
-  $63 = $2;
-  $64 = $2;
-  $65 = ((($64)) + 16|0);
-  $66 = HEAP32[$65>>2]|0;
-  $67 = ((($66)) + 48|0);
-  $68 = HEAP32[$67>>2]|0;
-  _mrb_gc_mark($63,$68);
- }
- $69 = $2;
- $70 = ((($69)) + 16|0);
- $71 = HEAP32[$70>>2]|0;
- $72 = $2;
- $73 = ((($72)) + 12|0);
- $74 = HEAP32[$73>>2]|0;
- $75 = ($71|0)!=($74|0);
- if (!($75)) {
-  STACKTOP = sp;return;
- }
- $76 = $2;
- $77 = $2;
- $78 = ((($77)) + 12|0);
- $79 = HEAP32[$78>>2]|0;
- _mark_context($76,$79);
- STACKTOP = sp;return;
-}
-function _incremental_marking_phase($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0;
- var label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $0;
- $4 = $1;
- $5 = $2;
- $6 = 0;
- while(1) {
-  $7 = $4;
-  $8 = ((($7)) + 428|0);
-  $9 = HEAP32[$8>>2]|0;
-  $10 = ($9|0)!=(0|0);
-  if (!($10)) {
-   label = 5;
-   break;
-  }
-  $11 = $6;
-  $12 = $5;
-  $13 = ($11>>>0)<($12>>>0);
-  if (!($13)) {
-   label = 5;
-   break;
-  }
-  $14 = $3;
-  $15 = $4;
-  $16 = $4;
-  $17 = ((($16)) + 428|0);
-  $18 = HEAP32[$17>>2]|0;
-  $19 = (_gc_gray_mark($14,$15,$18)|0);
-  $20 = $6;
-  $21 = (($20) + ($19))|0;
-  $6 = $21;
- }
- if ((label|0) == 5) {
-  $22 = $6;
-  STACKTOP = sp;return ($22|0);
- }
- return (0)|0;
-}
-function _final_marking_phase($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $4 = $2;
- $5 = $2;
- $6 = ((($5)) + 16|0);
- $7 = HEAP32[$6>>2]|0;
- _mark_context_stack($4,$7);
- $8 = $2;
- $9 = $3;
- _gc_mark_gray_list($8,$9);
- $10 = $3;
- $11 = ((($10)) + 432|0);
- $12 = HEAP32[$11>>2]|0;
- $13 = $3;
- $14 = ((($13)) + 428|0);
- HEAP32[$14>>2] = $12;
- $15 = $3;
- $16 = ((($15)) + 432|0);
- HEAP32[$16>>2] = 0;
- $17 = $2;
- $18 = $3;
- _gc_mark_gray_list($17,$18);
- STACKTOP = sp;return;
-}
-function _prepare_incremental_sweep($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $4 = $3;
- $5 = ((($4)) + 420|0);
- HEAP32[$5>>2] = 2;
- $6 = $3;
- $7 = HEAP32[$6>>2]|0;
- $8 = $3;
- $9 = ((($8)) + 4|0);
- HEAP32[$9>>2] = $7;
- $10 = $3;
- $11 = ((($10)) + 12|0);
- $12 = HEAP32[$11>>2]|0;
- $13 = $3;
- $14 = ((($13)) + 436|0);
- HEAP32[$14>>2] = $12;
- STACKTOP = sp;return;
-}
-function _incremental_sweep_phase($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;
- var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0;
- var $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0, $152 = 0, $153 = 0;
- var $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0;
- var $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0;
- var $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0;
- var $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0;
- var $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0;
- var $97 = 0, $98 = 0, $99 = 0, $or$cond = 0, $or$cond3 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);
- $3 = $0;
- $4 = $1;
- $5 = $2;
- $14 = $4;
- $15 = ((($14)) + 4|0);
- $16 = HEAP32[$15>>2]|0;
- $6 = $16;
- $7 = 0;
- while(1) {
-  $17 = $6;
-  $18 = ($17|0)!=(0|0);
-  if ($18) {
-   $19 = $7;
-   $20 = $5;
-   $21 = ($19>>>0)<($20>>>0);
-   $165 = $21;
-  } else {
-   $165 = 0;
-  }
-  $22 = $6;
-  if (!($165)) {
-   break;
-  }
-  $23 = ((($22)) + 24|0);
-  $8 = $23;
-  $24 = $8;
-  $25 = ((($24)) + 1536|0);
-  $9 = $25;
-  $10 = 0;
-  $11 = 1;
-  $26 = $6;
-  $27 = HEAP32[$26>>2]|0;
-  $28 = ($27|0)==(0|0);
-  $29 = $28&1;
-  $30 = $29&255;
-  $12 = $30;
-  $31 = $4;
-  $32 = ((($31)) + 452|0);
-  $33 = HEAP8[$32>>0]|0;
-  $34 = ($33&255) >>> 2;
-  $35 = $34 & 1;
-  $36 = $35&255;
-  $37 = ($36|0)!=(0);
-  if ($37) {
-   $38 = $4;
-   $39 = ((($38)) + 452|0);
-   $40 = HEAP8[$39>>0]|0;
-   $41 = ($40&255) >>> 1;
-   $42 = $41 & 1;
-   $43 = ($42<<24>>24)!=(0);
-   if (!($43)) {
-    $44 = $6;
-    $45 = ((($44)) + 20|0);
-    $46 = HEAP8[$45>>0]|0;
-    $47 = $46 & 1;
-    $48 = $47&255;
-    $49 = ($48|0)!=(0);
-    if ($49) {
-     $50 = $9;
-     $8 = $50;
-     $11 = 0;
-    }
-   }
-  }
-  while(1) {
-   $51 = $8;
-   $52 = $9;
-   $53 = ($51>>>0)<($52>>>0);
-   if (!($53)) {
-    break;
-   }
-   $54 = $8;
-   $55 = HEAP32[$54>>2]|0;
-   $56 = $55 >>> 8;
-   $57 = $56 & 7;
-   $58 = $4;
-   $59 = ((($58)) + 424|0);
-   $60 = HEAP32[$59>>2]|0;
-   $61 = $60 ^ 3;
-   $62 = $57 & $61;
-   $63 = $62 & 3;
-   $64 = ($63|0)!=(0);
-   if ($64) {
-    label = 12;
-   } else {
-    $65 = $8;
-    $66 = HEAP32[$65>>2]|0;
-    $67 = $66 & 255;
-    $68 = ($67|0)==(1);
-    if ($68) {
-     label = 12;
-    } else {
-     $83 = $4;
-     $84 = ((($83)) + 452|0);
-     $85 = HEAP8[$84>>0]|0;
-     $86 = ($85&255) >>> 2;
-     $87 = $86 & 1;
-     $88 = ($87<<24>>24)!=(0);
-     if (!($88)) {
-      $89 = $4;
-      $90 = ((($89)) + 424|0);
-      $91 = HEAP32[$90>>2]|0;
-      $92 = $8;
-      $93 = HEAP32[$92>>2]|0;
-      $94 = $91 & 7;
-      $95 = $94 << 8;
-      $96 = $93 & -1793;
-      $97 = $96 | $95;
-      HEAP32[$92>>2] = $97;
-     }
-     $11 = 0;
-    }
-   }
-   if ((label|0) == 12) {
-    label = 0;
-    $69 = $8;
-    $70 = HEAP32[$69>>2]|0;
-    $71 = $70 & 255;
-    $72 = ($71|0)!=(1);
-    if ($72) {
-     $73 = $3;
-     $74 = $8;
-     _obj_free($73,$74);
-     $75 = $6;
-     $76 = HEAP32[$75>>2]|0;
-     $77 = $8;
-     $78 = ((($77)) + 12|0);
-     HEAP32[$78>>2] = $76;
-     $79 = $8;
-     $80 = $6;
-     HEAP32[$80>>2] = $79;
-     $81 = $10;
-     $82 = (($81) + 1)|0;
-     $10 = $82;
-    }
-   }
-   $98 = $8;
-   $99 = ((($98)) + 24|0);
-   $8 = $99;
-  }
-  $100 = $11;
-  $101 = $100&255;
-  $102 = ($101|0)!=(0);
-  $103 = $10;
-  $104 = ($103>>>0)<(64);
-  $or$cond = $102 & $104;
-  if ($or$cond) {
-   $105 = $6;
-   $106 = ((($105)) + 8|0);
-   $107 = HEAP32[$106>>2]|0;
-   $13 = $107;
-   $108 = $4;
-   $109 = $6;
-   _unlink_heap_page($108,$109);
-   $110 = $4;
-   $111 = $6;
-   _unlink_free_heap_page($110,$111);
-   $112 = $3;
-   $113 = $6;
-   _mrb_free($112,$113);
-   $114 = $13;
-   $6 = $114;
-  } else {
-   $115 = $12;
-   $116 = $115&255;
-   $117 = ($116|0)!=(0);
-   $118 = $10;
-   $119 = ($118>>>0)>(0);
-   $or$cond3 = $117 & $119;
-   if ($or$cond3) {
-    $120 = $4;
-    $121 = $6;
-    _link_free_heap_page($120,$121);
-   }
-   $122 = $6;
-   $123 = HEAP32[$122>>2]|0;
-   $124 = ($123|0)==(0|0);
-   if ($124) {
-    $125 = $4;
-    $126 = ((($125)) + 452|0);
-    $127 = HEAP8[$126>>0]|0;
-    $128 = ($127&255) >>> 2;
-    $129 = $128 & 1;
-    $130 = $129&255;
-    $131 = ($130|0)!=(0);
-    if ($131) {
-     $132 = $4;
-     $133 = ((($132)) + 452|0);
-     $134 = HEAP8[$133>>0]|0;
-     $135 = ($134&255) >>> 1;
-     $136 = $135 & 1;
-     $137 = ($136<<24>>24)!=(0);
-     if ($137) {
-      label = 26;
-     } else {
-      $138 = $6;
-      $139 = ((($138)) + 20|0);
-      $140 = HEAP8[$139>>0]|0;
-      $141 = $140 & -2;
-      $142 = $141 | 1;
-      HEAP8[$139>>0] = $142;
-     }
-    } else {
-     label = 26;
-    }
-   } else {
-    label = 26;
-   }
-   if ((label|0) == 26) {
-    label = 0;
-    $143 = $6;
-    $144 = ((($143)) + 20|0);
-    $145 = HEAP8[$144>>0]|0;
-    $146 = $145 & -2;
-    HEAP8[$144>>0] = $146;
-   }
-   $147 = $6;
-   $148 = ((($147)) + 8|0);
-   $149 = HEAP32[$148>>2]|0;
-   $6 = $149;
-  }
-  $150 = $7;
-  $151 = (($150) + 64)|0;
-  $7 = $151;
-  $152 = $10;
-  $153 = $4;
-  $154 = ((($153)) + 12|0);
-  $155 = HEAP32[$154>>2]|0;
-  $156 = (($155) - ($152))|0;
-  HEAP32[$154>>2] = $156;
-  $157 = $10;
-  $158 = $4;
-  $159 = ((($158)) + 436|0);
-  $160 = HEAP32[$159>>2]|0;
-  $161 = (($160) - ($157))|0;
-  HEAP32[$159>>2] = $161;
- }
- $162 = $4;
- $163 = ((($162)) + 4|0);
- HEAP32[$163>>2] = $22;
- $164 = $7;
- STACKTOP = sp;return ($164|0);
-}
-function _obj_free($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0;
- var $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0;
- var $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0;
- var $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0;
- var $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0;
- var $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $2 = $0;
- $3 = $1;
- $8 = $3;
- $9 = HEAP32[$8>>2]|0;
- $10 = $9 & 255;
- L1: do {
-  switch ($10|0) {
-  case 18: case 8:  {
-   $11 = $2;
-   $12 = $3;
-   _mrb_gc_free_iv($11,$12);
-   break;
-  }
-  case 12: case 10: case 9:  {
-   $13 = $2;
-   $14 = $3;
-   _mrb_gc_free_mt($13,$14);
-   $15 = $2;
-   $16 = $3;
-   _mrb_gc_free_iv($15,$16);
-   break;
-  }
-  case 11:  {
-   $17 = $3;
-   $18 = HEAP32[$17>>2]|0;
-   $19 = $18 >>> 11;
-   $20 = $19 & 1048576;
-   $21 = ($20|0)!=(0);
-   if ($21) {
-    $22 = $2;
-    $23 = $3;
-    _mrb_gc_free_mt($22,$23);
-   }
-   break;
-  }
-  case 20:  {
-   $24 = $3;
-   $4 = $24;
-   $25 = $4;
-   $26 = ((($25)) + 20|0);
-   $27 = HEAP32[$26>>2]|0;
-   $28 = ($27|0)>=(0);
-   if (!($28)) {
-    $29 = $2;
-    $30 = $4;
-    $31 = ((($30)) + 12|0);
-    $32 = HEAP32[$31>>2]|0;
-    _mrb_free($29,$32);
-    $33 = $4;
-    $34 = ((($33)) + 12|0);
-    HEAP32[$34>>2] = 0;
-   }
-   break;
-  }
-  case 22:  {
-   $35 = $3;
-   $36 = ((($35)) + 12|0);
-   $37 = HEAP32[$36>>2]|0;
-   $5 = $37;
-   $38 = $5;
-   $39 = $2;
-   $40 = ((($39)) + 16|0);
-   $41 = HEAP32[$40>>2]|0;
-   $42 = ($38|0)!=($41|0);
-   if ($42) {
-    $43 = $2;
-    $44 = $5;
-    _mrb_free_context($43,$44);
-   }
-   break;
-  }
-  case 14:  {
-   $45 = $3;
-   $46 = HEAP32[$45>>2]|0;
-   $47 = $46 >>> 11;
-   $48 = $47 & 256;
-   $49 = ($48|0)!=(0);
-   $50 = $2;
-   $51 = $3;
-   if ($49) {
-    $52 = ((($51)) + 16|0);
-    $53 = HEAP32[$52>>2]|0;
-    _mrb_ary_decref($50,$53);
-    break L1;
-   } else {
-    $54 = ((($51)) + 20|0);
-    $55 = HEAP32[$54>>2]|0;
-    _mrb_free($50,$55);
-    break L1;
-   }
-   break;
-  }
-  case 15:  {
-   $56 = $2;
-   $57 = $3;
-   _mrb_gc_free_iv($56,$57);
-   $58 = $2;
-   $59 = $3;
-   _mrb_gc_free_hash($58,$59);
-   break;
-  }
-  case 16:  {
-   $60 = $2;
-   $61 = $3;
-   _mrb_gc_free_str($60,$61);
-   break;
-  }
-  case 13:  {
-   $62 = $3;
-   $6 = $62;
-   $63 = $6;
-   $64 = HEAP32[$63>>2]|0;
-   $65 = $64 >>> 11;
-   $66 = $65 & 128;
-   $67 = ($66|0)!=(0);
-   if (!($67)) {
-    $68 = $6;
-    $69 = ((($68)) + 12|0);
-    $70 = HEAP32[$69>>2]|0;
-    $71 = ($70|0)!=(0|0);
-    if ($71) {
-     $72 = $2;
-     $73 = $6;
-     $74 = ((($73)) + 12|0);
-     $75 = HEAP32[$74>>2]|0;
-     _mrb_irep_decref($72,$75);
-    }
-   }
-   break;
-  }
-  case 17:  {
-   $76 = $2;
-   $77 = $3;
-   $78 = ((($77)) + 12|0);
-   $79 = HEAP32[$78>>2]|0;
-   _mrb_free($76,$79);
-   break;
-  }
-  case 21:  {
-   $80 = $3;
-   $7 = $80;
-   $81 = $7;
-   $82 = ((($81)) + 16|0);
-   $83 = HEAP32[$82>>2]|0;
-   $84 = ($83|0)!=(0|0);
-   if ($84) {
-    $85 = $7;
-    $86 = ((($85)) + 16|0);
-    $87 = HEAP32[$86>>2]|0;
-    $88 = ((($87)) + 4|0);
-    $89 = HEAP32[$88>>2]|0;
-    $90 = ($89|0)!=(0|0);
-    if ($90) {
-     $91 = $7;
-     $92 = ((($91)) + 16|0);
-     $93 = HEAP32[$92>>2]|0;
-     $94 = ((($93)) + 4|0);
-     $95 = HEAP32[$94>>2]|0;
-     $96 = $2;
-     $97 = $7;
-     $98 = ((($97)) + 20|0);
-     $99 = HEAP32[$98>>2]|0;
-     FUNCTION_TABLE_vii[$95 & 511]($96,$99);
-    }
-   }
-   $100 = $2;
-   $101 = $3;
-   _mrb_gc_free_iv($100,$101);
-   break;
-  }
-  case 6: case 4: case 3: case 2:  {
-   STACKTOP = sp;return;
-   break;
-  }
-  default: {
-  }
-  }
- } while(0);
- $102 = $3;
- $103 = HEAP32[$102>>2]|0;
- $104 = $103 & -256;
- $105 = $104 | 1;
- HEAP32[$102>>2] = $105;
- STACKTOP = sp;return;
-}
-function _unlink_heap_page($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;
- var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $4 = $3;
- $5 = ((($4)) + 4|0);
- $6 = HEAP32[$5>>2]|0;
- $7 = ($6|0)!=(0|0);
- if ($7) {
-  $8 = $3;
-  $9 = ((($8)) + 8|0);
-  $10 = HEAP32[$9>>2]|0;
-  $11 = $3;
-  $12 = ((($11)) + 4|0);
-  $13 = HEAP32[$12>>2]|0;
-  $14 = ((($13)) + 8|0);
-  HEAP32[$14>>2] = $10;
- }
- $15 = $3;
- $16 = ((($15)) + 8|0);
- $17 = HEAP32[$16>>2]|0;
- $18 = ($17|0)!=(0|0);
- if ($18) {
-  $19 = $3;
-  $20 = ((($19)) + 4|0);
-  $21 = HEAP32[$20>>2]|0;
-  $22 = $3;
-  $23 = ((($22)) + 8|0);
-  $24 = HEAP32[$23>>2]|0;
-  $25 = ((($24)) + 4|0);
-  HEAP32[$25>>2] = $21;
- }
- $26 = $2;
- $27 = HEAP32[$26>>2]|0;
- $28 = $3;
- $29 = ($27|0)==($28|0);
- if (!($29)) {
-  $34 = $3;
-  $35 = ((($34)) + 4|0);
-  HEAP32[$35>>2] = 0;
-  $36 = $3;
-  $37 = ((($36)) + 8|0);
-  HEAP32[$37>>2] = 0;
-  STACKTOP = sp;return;
- }
- $30 = $3;
- $31 = ((($30)) + 8|0);
- $32 = HEAP32[$31>>2]|0;
- $33 = $2;
- HEAP32[$33>>2] = $32;
- $34 = $3;
- $35 = ((($34)) + 4|0);
- HEAP32[$35>>2] = 0;
- $36 = $3;
- $37 = ((($36)) + 8|0);
- HEAP32[$37>>2] = 0;
- STACKTOP = sp;return;
-}
-function _unlink_free_heap_page($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;
- var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $4 = $3;
- $5 = ((($4)) + 16|0);
- $6 = HEAP32[$5>>2]|0;
- $7 = ($6|0)!=(0|0);
- if ($7) {
-  $8 = $3;
-  $9 = ((($8)) + 12|0);
-  $10 = HEAP32[$9>>2]|0;
-  $11 = $3;
-  $12 = ((($11)) + 16|0);
-  $13 = HEAP32[$12>>2]|0;
-  $14 = ((($13)) + 12|0);
-  HEAP32[$14>>2] = $10;
- }
- $15 = $3;
- $16 = ((($15)) + 12|0);
- $17 = HEAP32[$16>>2]|0;
- $18 = ($17|0)!=(0|0);
- if ($18) {
-  $19 = $3;
-  $20 = ((($19)) + 16|0);
-  $21 = HEAP32[$20>>2]|0;
-  $22 = $3;
-  $23 = ((($22)) + 12|0);
-  $24 = HEAP32[$23>>2]|0;
-  $25 = ((($24)) + 16|0);
-  HEAP32[$25>>2] = $21;
- }
- $26 = $2;
- $27 = ((($26)) + 8|0);
- $28 = HEAP32[$27>>2]|0;
- $29 = $3;
- $30 = ($28|0)==($29|0);
- if (!($30)) {
-  $36 = $3;
-  $37 = ((($36)) + 16|0);
-  HEAP32[$37>>2] = 0;
-  $38 = $3;
-  $39 = ((($38)) + 12|0);
-  HEAP32[$39>>2] = 0;
-  STACKTOP = sp;return;
- }
- $31 = $3;
- $32 = ((($31)) + 12|0);
- $33 = HEAP32[$32>>2]|0;
- $34 = $2;
- $35 = ((($34)) + 8|0);
- HEAP32[$35>>2] = $33;
- $36 = $3;
- $37 = ((($36)) + 16|0);
- HEAP32[$37>>2] = 0;
- $38 = $3;
- $39 = ((($38)) + 12|0);
- HEAP32[$39>>2] = 0;
- STACKTOP = sp;return;
-}
-function _mrb_free($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $4 = $2;
- $5 = ((($4)) + 4|0);
- $6 = HEAP32[$5>>2]|0;
- $7 = $2;
- $8 = $3;
- $9 = $2;
- $10 = ((($9)) + 8|0);
- $11 = HEAP32[$10>>2]|0;
- (FUNCTION_TABLE_iiiii[$6 & 255]($7,$8,0,$11)|0);
- STACKTOP = sp;return;
-}
-function _link_free_heap_page($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0;
- var sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $4 = $2;
- $5 = ((($4)) + 8|0);
- $6 = HEAP32[$5>>2]|0;
- $7 = $3;
- $8 = ((($7)) + 12|0);
- HEAP32[$8>>2] = $6;
- $9 = $2;
- $10 = ((($9)) + 8|0);
- $11 = HEAP32[$10>>2]|0;
- $12 = ($11|0)!=(0|0);
- if ($12) {
-  $13 = $3;
-  $14 = $2;
-  $15 = ((($14)) + 8|0);
-  $16 = HEAP32[$15>>2]|0;
-  $17 = ((($16)) + 16|0);
-  HEAP32[$17>>2] = $13;
- }
- $18 = $3;
- $19 = $2;
- $20 = ((($19)) + 8|0);
- HEAP32[$20>>2] = $18;
- STACKTOP = sp;return;
-}
-function _mark_context_stack($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;
- var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0;
- var $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0;
- var $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $6 = sp + 8|0;
- $7 = sp;
- $2 = $0;
- $3 = $1;
- $8 = $3;
- $9 = ((($8)) + 4|0);
- $10 = HEAP32[$9>>2]|0;
- $11 = $3;
- $12 = ((($11)) + 8|0);
- $13 = HEAP32[$12>>2]|0;
- $14 = $10;
- $15 = $13;
- $16 = (($14) - ($15))|0;
- $17 = (($16|0) / 8)&-1;
- $5 = $17;
- $18 = $3;
- $19 = ((($18)) + 16|0);
- $20 = HEAP32[$19>>2]|0;
- $21 = ($20|0)!=(0|0);
- if ($21) {
-  $22 = $3;
-  $23 = ((($22)) + 16|0);
-  $24 = HEAP32[$23>>2]|0;
-  $25 = ((($24)) + 12|0);
-  $26 = HEAP32[$25>>2]|0;
-  $27 = $5;
-  $28 = (($27) + ($26))|0;
-  $5 = $28;
- }
- $29 = $3;
- $30 = ((($29)) + 8|0);
- $31 = HEAP32[$30>>2]|0;
- $32 = $5;
- $33 = (($31) + ($32<<3)|0);
- $34 = $3;
- $35 = ((($34)) + 12|0);
- $36 = HEAP32[$35>>2]|0;
- $37 = ($33>>>0)>($36>>>0);
- if ($37) {
-  $38 = $3;
-  $39 = ((($38)) + 12|0);
-  $40 = HEAP32[$39>>2]|0;
-  $41 = $3;
-  $42 = ((($41)) + 8|0);
-  $43 = HEAP32[$42>>2]|0;
-  $44 = $40;
-  $45 = $43;
-  $46 = (($44) - ($45))|0;
-  $47 = (($46|0) / 8)&-1;
-  $5 = $47;
- }
- $4 = 0;
- while(1) {
-  $48 = $4;
-  $49 = $5;
-  $50 = ($48>>>0)<($49>>>0);
-  if (!($50)) {
-   break;
-  }
-  $51 = $3;
-  $52 = ((($51)) + 8|0);
-  $53 = HEAP32[$52>>2]|0;
-  $54 = $4;
-  $55 = (($53) + ($54<<3)|0);
-  ;HEAP32[$6>>2]=HEAP32[$55>>2]|0;HEAP32[$6+4>>2]=HEAP32[$55+4>>2]|0;
-  $56 = ((($6)) + 4|0);
-  $57 = HEAP32[$56>>2]|0;
-  $58 = ($57>>>0)<(8);
-  do {
-   if (!($58)) {
-    $59 = HEAP32[$6>>2]|0;
-    $60 = HEAP32[$59>>2]|0;
-    $61 = $60 & 255;
-    $62 = ($61|0)==(1);
-    if ($62) {
-     $63 = $3;
-     $64 = ((($63)) + 8|0);
-     $65 = HEAP32[$64>>2]|0;
-     $66 = $4;
-     $67 = (($65) + ($66<<3)|0);
-     _mrb_nil_value_55($7);
-     ;HEAP32[$67>>2]=HEAP32[$7>>2]|0;HEAP32[$67+4>>2]=HEAP32[$7+4>>2]|0;
-     break;
-    } else {
-     $68 = $2;
-     $69 = HEAP32[$6>>2]|0;
-     _mrb_gc_mark($68,$69);
-     break;
-    }
-   }
-  } while(0);
-  $70 = $4;
-  $71 = (($70) + 1)|0;
-  $4 = $71;
- }
- STACKTOP = sp;return;
-}
-function _gc_mark_gray_list($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $3 = 0, $4 = 0;
- var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- while(1) {
-  $4 = $3;
-  $5 = ((($4)) + 428|0);
-  $6 = HEAP32[$5>>2]|0;
-  $7 = ($6|0)!=(0|0);
-  if (!($7)) {
-   break;
-  }
-  $8 = $3;
-  $9 = ((($8)) + 428|0);
-  $10 = HEAP32[$9>>2]|0;
-  $11 = HEAP32[$10>>2]|0;
-  $12 = $11 >>> 8;
-  $13 = $12 & 7;
-  $14 = ($13|0)==(0);
-  if ($14) {
-   $15 = $2;
-   $16 = $3;
-   $17 = $3;
-   $18 = ((($17)) + 428|0);
-   $19 = HEAP32[$18>>2]|0;
-   _gc_mark_children($15,$16,$19);
-   continue;
-  } else {
-   $20 = $3;
-   $21 = ((($20)) + 428|0);
-   $22 = HEAP32[$21>>2]|0;
-   $23 = ((($22)) + 8|0);
-   $24 = HEAP32[$23>>2]|0;
-   $25 = $3;
-   $26 = ((($25)) + 428|0);
-   HEAP32[$26>>2] = $24;
-   continue;
-  }
- }
- STACKTOP = sp;return;
-}
-function _gc_mark_children($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;
- var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0;
- var $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0, $152 = 0, $153 = 0;
- var $154 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0;
- var $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0;
- var $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0;
- var $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0;
- var $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);
- $3 = $0;
- $4 = $1;
- $5 = $2;
- $17 = $5;
- $18 = HEAP32[$17>>2]|0;
- $19 = $18 & -1793;
- $20 = $19 | 1024;
- HEAP32[$17>>2] = $20;
- $21 = $5;
- $22 = ((($21)) + 8|0);
- $23 = HEAP32[$22>>2]|0;
- $24 = $4;
- $25 = ((($24)) + 428|0);
- HEAP32[$25>>2] = $23;
- $26 = $3;
- $27 = $5;
- $28 = ((($27)) + 4|0);
- $29 = HEAP32[$28>>2]|0;
- _mrb_gc_mark($26,$29);
- $30 = $5;
- $31 = HEAP32[$30>>2]|0;
- $32 = $31 & 255;
- switch ($32|0) {
- case 11:  {
-  $33 = $5;
-  $6 = $33;
-  $34 = $6;
-  $35 = HEAP32[$34>>2]|0;
-  $36 = $35 >>> 11;
-  $37 = $36 & 1048576;
-  $38 = ($37|0)!=(0);
-  if ($38) {
-   $39 = $3;
-   $40 = $6;
-   _mrb_gc_mark_mt($39,$40);
-  }
-  $41 = $3;
-  $42 = $5;
-  $43 = ((($42)) + 20|0);
-  $44 = HEAP32[$43>>2]|0;
-  _mrb_gc_mark($41,$44);
-  STACKTOP = sp;return;
-  break;
- }
- case 12: case 10: case 9:  {
-  $45 = $5;
-  $7 = $45;
-  $46 = $3;
-  $47 = $7;
-  _mrb_gc_mark_mt($46,$47);
-  $48 = $3;
-  $49 = $7;
-  $50 = ((($49)) + 20|0);
-  $51 = HEAP32[$50>>2]|0;
-  _mrb_gc_mark($48,$51);
-  break;
- }
- case 18: case 21: case 8:  {
-  break;
- }
- case 13:  {
-  $54 = $5;
-  $8 = $54;
-  $55 = $3;
-  $56 = $8;
-  $57 = ((($56)) + 20|0);
-  $58 = HEAP32[$57>>2]|0;
-  _mrb_gc_mark($55,$58);
-  $59 = $3;
-  $60 = $8;
-  $61 = ((($60)) + 16|0);
-  $62 = HEAP32[$61>>2]|0;
-  _mrb_gc_mark($59,$62);
-  STACKTOP = sp;return;
-  break;
- }
- case 20:  {
-  $63 = $5;
-  $9 = $63;
-  $64 = $9;
-  $65 = ((($64)) + 20|0);
-  $66 = HEAP32[$65>>2]|0;
-  $67 = ($66|0)>=(0);
-  if ($67) {
-   STACKTOP = sp;return;
-  }
-  $68 = $9;
-  $69 = HEAP32[$68>>2]|0;
-  $70 = $69 >>> 11;
-  $11 = $70;
-  $10 = 0;
-  while(1) {
-   $71 = $10;
-   $72 = $11;
-   $73 = ($71|0)<($72|0);
-   if (!($73)) {
-    break;
-   }
-   $74 = $9;
-   $75 = ((($74)) + 12|0);
-   $76 = HEAP32[$75>>2]|0;
-   $77 = $10;
-   $78 = (($76) + ($77<<3)|0);
-   $79 = ((($78)) + 4|0);
-   $80 = HEAP32[$79>>2]|0;
-   $81 = ($80>>>0)<(8);
-   if (!($81)) {
-    $82 = $3;
-    $83 = $9;
-    $84 = ((($83)) + 12|0);
-    $85 = HEAP32[$84>>2]|0;
-    $86 = $10;
-    $87 = (($85) + ($86<<3)|0);
-    $88 = HEAP32[$87>>2]|0;
-    _mrb_gc_mark($82,$88);
-   }
-   $89 = $10;
-   $90 = (($89) + 1)|0;
-   $10 = $90;
-  }
-  STACKTOP = sp;return;
-  break;
- }
- case 22:  {
-  $91 = $5;
-  $92 = ((($91)) + 12|0);
-  $93 = HEAP32[$92>>2]|0;
-  $12 = $93;
-  $94 = $12;
-  $95 = ($94|0)!=(0|0);
-  if (!($95)) {
-   STACKTOP = sp;return;
-  }
-  $96 = $3;
-  $97 = $12;
-  _mark_context($96,$97);
-  STACKTOP = sp;return;
-  break;
- }
- case 14:  {
-  $98 = $5;
-  $13 = $98;
-  $14 = 0;
-  $99 = $13;
-  $100 = ((($99)) + 12|0);
-  $101 = HEAP32[$100>>2]|0;
-  $15 = $101;
-  while(1) {
-   $102 = $14;
-   $103 = $15;
-   $104 = ($102>>>0)<($103>>>0);
-   if (!($104)) {
-    break;
-   }
-   $105 = $13;
-   $106 = ((($105)) + 20|0);
-   $107 = HEAP32[$106>>2]|0;
-   $108 = $14;
-   $109 = (($107) + ($108<<3)|0);
-   $110 = ((($109)) + 4|0);
-   $111 = HEAP32[$110>>2]|0;
-   $112 = ($111>>>0)<(8);
-   if (!($112)) {
-    $113 = $3;
-    $114 = $13;
-    $115 = ((($114)) + 20|0);
-    $116 = HEAP32[$115>>2]|0;
-    $117 = $14;
-    $118 = (($116) + ($117<<3)|0);
-    $119 = HEAP32[$118>>2]|0;
-    _mrb_gc_mark($113,$119);
-   }
-   $120 = $14;
-   $121 = (($120) + 1)|0;
-   $14 = $121;
-  }
-  STACKTOP = sp;return;
-  break;
- }
- case 15:  {
-  $122 = $3;
-  $123 = $5;
-  _mrb_gc_mark_iv($122,$123);
-  $124 = $3;
-  $125 = $5;
-  _mrb_gc_mark_hash($124,$125);
-  STACKTOP = sp;return;
-  break;
- }
- case 17:  {
-  $126 = $5;
-  $16 = $126;
-  $127 = $16;
-  $128 = ((($127)) + 12|0);
-  $129 = HEAP32[$128>>2]|0;
-  $130 = ($129|0)!=(0|0);
-  if (!($130)) {
-   STACKTOP = sp;return;
-  }
-  $131 = $16;
-  $132 = ((($131)) + 12|0);
-  $133 = HEAP32[$132>>2]|0;
-  $134 = ((($133)) + 4|0);
-  $135 = HEAP32[$134>>2]|0;
-  $136 = ($135>>>0)<(8);
-  if (!($136)) {
-   $137 = $3;
-   $138 = $16;
-   $139 = ((($138)) + 12|0);
-   $140 = HEAP32[$139>>2]|0;
-   $141 = HEAP32[$140>>2]|0;
-   _mrb_gc_mark($137,$141);
-  }
-  $142 = $16;
-  $143 = ((($142)) + 12|0);
-  $144 = HEAP32[$143>>2]|0;
-  $145 = ((($144)) + 8|0);
-  $146 = ((($145)) + 4|0);
-  $147 = HEAP32[$146>>2]|0;
-  $148 = ($147>>>0)<(8);
-  if ($148) {
-   STACKTOP = sp;return;
-  }
-  $149 = $3;
-  $150 = $16;
-  $151 = ((($150)) + 12|0);
-  $152 = HEAP32[$151>>2]|0;
-  $153 = ((($152)) + 8|0);
-  $154 = HEAP32[$153>>2]|0;
-  _mrb_gc_mark($149,$154);
-  STACKTOP = sp;return;
-  break;
- }
- default: {
-  STACKTOP = sp;return;
- }
- }
- $52 = $3;
- $53 = $5;
- _mrb_gc_mark_iv($52,$53);
- STACKTOP = sp;return;
-}
-function _mrb_gc_mark($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $4 = $3;
- $5 = ($4|0)==(0|0);
- if ($5) {
-  STACKTOP = sp;return;
- }
- $6 = $3;
- $7 = HEAP32[$6>>2]|0;
- $8 = $7 >>> 8;
- $9 = $8 & 7;
- $10 = $9 & 3;
- $11 = ($10|0)!=(0);
- if (!($11)) {
-  STACKTOP = sp;return;
- }
- $12 = $2;
- $13 = $2;
- $14 = ((($13)) + 92|0);
- $15 = $3;
- _add_gray_list($12,$14,$15);
- STACKTOP = sp;return;
-}
-function _mark_context($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;
- var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0;
- var $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0;
- var $65 = 0, $66 = 0, $67 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $2 = $0;
- $3 = $1;
- $5 = 0;
- $7 = $2;
- $8 = $3;
- _mark_context_stack($7,$8);
- $9 = $3;
- $10 = ((($9)) + 20|0);
- $11 = HEAP32[$10>>2]|0;
- $12 = ($11|0)!=(0|0);
- L1: do {
-  if ($12) {
-   $13 = $3;
-   $14 = ((($13)) + 20|0);
-   $15 = HEAP32[$14>>2]|0;
-   $6 = $15;
-   while(1) {
-    $16 = $6;
-    $17 = $3;
-    $18 = ((($17)) + 16|0);
-    $19 = HEAP32[$18>>2]|0;
-    $20 = ($16>>>0)<=($19>>>0);
-    if (!($20)) {
-     break L1;
-    }
-    $21 = $6;
-    $22 = ((($21)) + 20|0);
-    $23 = HEAP32[$22>>2]|0;
-    $24 = $5;
-    $25 = ($23|0)>($24|0);
-    if ($25) {
-     $26 = $6;
-     $27 = ((($26)) + 20|0);
-     $28 = HEAP32[$27>>2]|0;
-     $5 = $28;
-    }
-    $29 = $2;
-    $30 = $6;
-    $31 = ((($30)) + 24|0);
-    $32 = HEAP32[$31>>2]|0;
-    _mrb_gc_mark($29,$32);
-    $33 = $2;
-    $34 = $6;
-    $35 = ((($34)) + 4|0);
-    $36 = HEAP32[$35>>2]|0;
-    _mrb_gc_mark($33,$36);
-    $37 = $2;
-    $38 = $6;
-    $39 = ((($38)) + 44|0);
-    $40 = HEAP32[$39>>2]|0;
-    _mrb_gc_mark($37,$40);
-    $41 = $6;
-    $42 = ((($41)) + 48|0);
-    $6 = $42;
-   }
-  }
- } while(0);
- $4 = 0;
- while(1) {
-  $43 = $4;
-  $44 = $5;
-  $45 = ($43|0)<($44|0);
-  if (!($45)) {
-   break;
-  }
-  $46 = $2;
-  $47 = $3;
-  $48 = ((($47)) + 36|0);
-  $49 = HEAP32[$48>>2]|0;
-  $50 = $4;
-  $51 = (($49) + ($50<<2)|0);
-  $52 = HEAP32[$51>>2]|0;
-  _mrb_gc_mark($46,$52);
-  $53 = $4;
-  $54 = (($53) + 1)|0;
-  $4 = $54;
- }
- $55 = $3;
- $56 = HEAP32[$55>>2]|0;
- $57 = ($56|0)!=(0|0);
- if (!($57)) {
-  STACKTOP = sp;return;
- }
- $58 = $3;
- $59 = HEAP32[$58>>2]|0;
- $60 = ((($59)) + 48|0);
- $61 = HEAP32[$60>>2]|0;
- $62 = ($61|0)!=(0|0);
- if (!($62)) {
-  STACKTOP = sp;return;
- }
- $63 = $2;
- $64 = $3;
- $65 = HEAP32[$64>>2]|0;
- $66 = ((($65)) + 48|0);
- $67 = HEAP32[$66>>2]|0;
- _mrb_gc_mark($63,$67);
- STACKTOP = sp;return;
-}
-function _add_gray_list($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $0;
- $4 = $1;
- $5 = $2;
- $6 = $5;
- $7 = HEAP32[$6>>2]|0;
- $8 = $7 & -1793;
- HEAP32[$6>>2] = $8;
- $9 = $4;
- $10 = ((($9)) + 428|0);
- $11 = HEAP32[$10>>2]|0;
- $12 = $5;
- $13 = ((($12)) + 8|0);
- HEAP32[$13>>2] = $11;
- $14 = $5;
- $15 = $4;
- $16 = ((($15)) + 428|0);
- HEAP32[$16>>2] = $14;
- STACKTOP = sp;return;
-}
-function _mrb_nil_value_55($0) {
- $0 = $0|0;
- var $1 = 0, $2 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $1 = sp;
- $2 = ((($1)) + 4|0);
- HEAP32[$2>>2] = 0;
- HEAP32[$1>>2] = 0;
- ;HEAP32[$0>>2]=HEAP32[$1>>2]|0;HEAP32[$0+4>>2]=HEAP32[$1+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _gc_gray_mark($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;
- var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0;
- var $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;
- var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0;
- var $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0;
- var $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0;
- var $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);
- $3 = $0;
- $4 = $1;
- $5 = $2;
- $6 = 0;
- $12 = $3;
- $13 = $4;
- $14 = $5;
- _gc_mark_children($12,$13,$14);
- $15 = $5;
- $16 = HEAP32[$15>>2]|0;
- $17 = $16 & 255;
- switch ($17|0) {
- case 11:  {
-  $18 = $6;
-  $19 = (($18) + 1)|0;
-  $6 = $19;
-  $140 = $6;
-  STACKTOP = sp;return ($140|0);
-  break;
- }
- case 10: case 12: case 9:  {
-  $20 = $5;
-  $7 = $20;
-  $21 = $3;
-  $22 = $5;
-  $23 = (_mrb_gc_mark_iv_size($21,$22)|0);
-  $24 = $6;
-  $25 = (($24) + ($23))|0;
-  $6 = $25;
-  $26 = $3;
-  $27 = $7;
-  $28 = (_mrb_gc_mark_mt_size($26,$27)|0);
-  $29 = $6;
-  $30 = (($29) + ($28))|0;
-  $6 = $30;
-  $31 = $6;
-  $32 = (($31) + 1)|0;
-  $6 = $32;
-  $140 = $6;
-  STACKTOP = sp;return ($140|0);
-  break;
- }
- case 18: case 21: case 8:  {
-  $33 = $3;
-  $34 = $5;
-  $35 = (_mrb_gc_mark_iv_size($33,$34)|0);
-  $36 = $6;
-  $37 = (($36) + ($35))|0;
-  $6 = $37;
-  $140 = $6;
-  STACKTOP = sp;return ($140|0);
-  break;
- }
- case 20:  {
-  $38 = $5;
-  $39 = HEAP32[$38>>2]|0;
-  $40 = $39 >>> 11;
-  $41 = $6;
-  $42 = (($41) + ($40))|0;
-  $6 = $42;
-  $140 = $6;
-  STACKTOP = sp;return ($140|0);
-  break;
- }
- case 22:  {
-  $43 = $5;
-  $44 = ((($43)) + 12|0);
-  $45 = HEAP32[$44>>2]|0;
-  $8 = $45;
-  $46 = $8;
-  $47 = ($46|0)!=(0|0);
-  if (!($47)) {
-   $140 = $6;
-   STACKTOP = sp;return ($140|0);
-  }
-  $48 = $8;
-  $49 = ((($48)) + 4|0);
-  $50 = HEAP32[$49>>2]|0;
-  $51 = $8;
-  $52 = ((($51)) + 8|0);
-  $53 = HEAP32[$52>>2]|0;
-  $54 = $50;
-  $55 = $53;
-  $56 = (($54) - ($55))|0;
-  $57 = (($56|0) / 8)&-1;
-  $9 = $57;
-  $58 = $8;
-  $59 = ((($58)) + 16|0);
-  $60 = HEAP32[$59>>2]|0;
-  $61 = ($60|0)!=(0|0);
-  if ($61) {
-   $62 = $8;
-   $63 = ((($62)) + 16|0);
-   $64 = HEAP32[$63>>2]|0;
-   $65 = ((($64)) + 12|0);
-   $66 = HEAP32[$65>>2]|0;
-   $67 = $9;
-   $68 = (($67) + ($66))|0;
-   $9 = $68;
-  }
-  $69 = $8;
-  $70 = ((($69)) + 8|0);
-  $71 = HEAP32[$70>>2]|0;
-  $72 = $9;
-  $73 = (($71) + ($72<<3)|0);
-  $74 = $8;
-  $75 = ((($74)) + 12|0);
-  $76 = HEAP32[$75>>2]|0;
-  $77 = ($73>>>0)>($76>>>0);
-  if ($77) {
-   $78 = $8;
-   $79 = ((($78)) + 12|0);
-   $80 = HEAP32[$79>>2]|0;
-   $81 = $8;
-   $82 = ((($81)) + 8|0);
-   $83 = HEAP32[$82>>2]|0;
-   $84 = $80;
-   $85 = $83;
-   $86 = (($84) - ($85))|0;
-   $87 = (($86|0) / 8)&-1;
-   $9 = $87;
-  }
-  $88 = $9;
-  $89 = $6;
-  $90 = (($89) + ($88))|0;
-  $6 = $90;
-  $91 = $8;
-  $92 = ((($91)) + 16|0);
-  $93 = HEAP32[$92>>2]|0;
-  $94 = ($93|0)!=(0|0);
-  if ($94) {
-   $95 = $8;
-   $96 = ((($95)) + 16|0);
-   $97 = HEAP32[$96>>2]|0;
-   $98 = ((($97)) + 20|0);
-   $99 = HEAP32[$98>>2]|0;
-   $102 = $99;
-  } else {
-   $102 = 0;
-  }
-  $100 = $6;
-  $101 = (($100) + ($102))|0;
-  $6 = $101;
-  $103 = $8;
-  $104 = ((($103)) + 20|0);
-  $105 = HEAP32[$104>>2]|0;
-  $106 = ($105|0)!=(0|0);
-  L23: do {
-   if ($106) {
-    $9 = 0;
-    $107 = $8;
-    $108 = ((($107)) + 20|0);
-    $109 = HEAP32[$108>>2]|0;
-    $10 = $109;
-    while(1) {
-     $110 = $10;
-     $111 = $8;
-     $112 = ((($111)) + 16|0);
-     $113 = HEAP32[$112>>2]|0;
-     $114 = ($110>>>0)<=($113>>>0);
-     if (!($114)) {
-      break L23;
-     }
-     $115 = $9;
-     $116 = (($115) + 1)|0;
-     $9 = $116;
-     $117 = $10;
-     $118 = ((($117)) + 48|0);
-     $10 = $118;
-    }
-   }
-  } while(0);
-  $119 = $9;
-  $120 = $6;
-  $121 = (($120) + ($119))|0;
-  $6 = $121;
-  $140 = $6;
-  STACKTOP = sp;return ($140|0);
-  break;
- }
- case 14:  {
-  $122 = $5;
-  $11 = $122;
-  $123 = $11;
-  $124 = ((($123)) + 12|0);
-  $125 = HEAP32[$124>>2]|0;
-  $126 = $6;
-  $127 = (($126) + ($125))|0;
-  $6 = $127;
-  $140 = $6;
-  STACKTOP = sp;return ($140|0);
-  break;
- }
- case 15:  {
-  $128 = $3;
-  $129 = $5;
-  $130 = (_mrb_gc_mark_iv_size($128,$129)|0);
-  $131 = $6;
-  $132 = (($131) + ($130))|0;
-  $6 = $132;
-  $133 = $3;
-  $134 = $5;
-  $135 = (_mrb_gc_mark_hash_size($133,$134)|0);
-  $136 = $6;
-  $137 = (($136) + ($135))|0;
-  $6 = $137;
-  $140 = $6;
-  STACKTOP = sp;return ($140|0);
-  break;
- }
- case 17: case 13:  {
-  $138 = $6;
-  $139 = (($138) + 2)|0;
-  $6 = $139;
-  $140 = $6;
-  STACKTOP = sp;return ($140|0);
-  break;
- }
- default: {
-  $140 = $6;
-  STACKTOP = sp;return ($140|0);
- }
- }
- return (0)|0;
-}
-function _mrb_realloc($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;
- var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $or$cond = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $$byval_copy = sp + 24|0;
- $7 = sp;
- $3 = $0;
- $4 = $1;
- $5 = $2;
- $8 = $3;
- $9 = $4;
- $10 = $5;
- $11 = (_mrb_realloc_simple($8,$9,$10)|0);
- $6 = $11;
- $12 = $6;
- $13 = ($12|0)==(0|0);
- $14 = $5;
- $15 = ($14|0)!=(0);
- $or$cond = $13 & $15;
- $16 = $3;
- $17 = ((($16)) + 92|0);
- $18 = ((($17)) + 452|0);
- $19 = HEAP8[$18>>0]|0;
- if (!($or$cond)) {
-  $33 = $19 & -9;
-  HEAP8[$18>>0] = $33;
-  $34 = $6;
-  STACKTOP = sp;return ($34|0);
- }
- $20 = ($19&255) >>> 3;
- $21 = $20 & 1;
- $22 = ($21<<24>>24)!=(0);
- if ($22) {
-  $34 = $6;
-  STACKTOP = sp;return ($34|0);
- } else {
-  $23 = $3;
-  $24 = ((($23)) + 92|0);
-  $25 = ((($24)) + 452|0);
-  $26 = HEAP8[$25>>0]|0;
-  $27 = $26 & -9;
-  $28 = $27 | 8;
-  HEAP8[$25>>0] = $28;
-  $29 = $3;
-  $30 = $3;
-  $31 = ((($30)) + 576|0);
-  $32 = HEAP32[$31>>2]|0;
-  _mrb_obj_value($7,$32);
-  ;HEAP32[$$byval_copy>>2]=HEAP32[$7>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$7+4>>2]|0;
-  _mrb_exc_raise($29,$$byval_copy);
-  // unreachable;
- }
- return (0)|0;
-}
-function _mrb_obj_value($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = sp;
- $2 = $1;
- $4 = $2;
- $5 = HEAP32[$4>>2]|0;
- $6 = $5 & 255;
- $7 = ((($3)) + 4|0);
- HEAP32[$7>>2] = $6;
- $8 = $2;
- HEAP32[$3>>2] = $8;
- ;HEAP32[$0>>2]=HEAP32[$3>>2]|0;HEAP32[$0+4>>2]=HEAP32[$3+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_malloc($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $4 = $2;
- $5 = $3;
- $6 = (_mrb_realloc($4,0,$5)|0);
- STACKTOP = sp;return ($6|0);
-}
-function _mrb_malloc_simple($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $4 = $2;
- $5 = $3;
- $6 = (_mrb_realloc_simple($4,0,$5)|0);
- STACKTOP = sp;return ($6|0);
-}
-function _mrb_calloc($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0;
- var $8 = 0, $9 = 0, $or$cond = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $3 = $0;
- $4 = $1;
- $5 = $2;
- $8 = $4;
- $9 = ($8>>>0)>(0);
- $10 = $5;
- $11 = ($10>>>0)>(0);
- $or$cond = $9 & $11;
- if ($or$cond) {
-  $12 = $4;
-  $13 = $5;
-  $14 = (4294967295 / ($13>>>0))&-1;
-  $15 = ($12>>>0)<=($14>>>0);
-  if ($15) {
-   $16 = $4;
-   $17 = $5;
-   $18 = Math_imul($16, $17)|0;
-   $7 = $18;
-   $19 = $3;
-   $20 = $7;
-   $21 = (_mrb_malloc($19,$20)|0);
-   $6 = $21;
-   $22 = $6;
-   $23 = $7;
-   _memset(($22|0),0,($23|0))|0;
-   $24 = $6;
-   STACKTOP = sp;return ($24|0);
-  }
- }
- $6 = 0;
- $24 = $6;
- STACKTOP = sp;return ($24|0);
-}
-function _mrb_gc_init($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0;
- var $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $4 = $3;
- $5 = ((($4)) + 424|0);
- HEAP32[$5>>2] = 1;
- $6 = $3;
- HEAP32[$6>>2] = 0;
- $7 = $3;
- $8 = ((($7)) + 8|0);
- HEAP32[$8>>2] = 0;
- $9 = $2;
- $10 = $3;
- _add_heap($9,$10);
- $11 = $3;
- $12 = ((($11)) + 444|0);
- HEAP32[$12>>2] = 200;
- $13 = $3;
- $14 = ((($13)) + 448|0);
- HEAP32[$14>>2] = 200;
- $15 = $3;
- $16 = ((($15)) + 452|0);
- $17 = HEAP8[$16>>0]|0;
- $18 = $17 & -5;
- $19 = $18 | 4;
- HEAP8[$16>>0] = $19;
- $20 = $3;
- $21 = ((($20)) + 452|0);
- $22 = HEAP8[$21>>0]|0;
- $23 = $22 & -3;
- $24 = $23 | 2;
- HEAP8[$21>>0] = $24;
- STACKTOP = sp;return;
-}
-function _add_heap($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;
- var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $2 = $0;
- $3 = $1;
- $8 = $2;
- $9 = (_mrb_calloc($8,1,1560)|0);
- $4 = $9;
- $7 = 0;
- $10 = $4;
- $11 = ((($10)) + 24|0);
- $5 = $11;
- $12 = $5;
- $13 = ((($12)) + 1536|0);
- $6 = $13;
- while(1) {
-  $14 = $5;
-  $15 = $6;
-  $16 = ($14>>>0)<($15>>>0);
-  if (!($16)) {
-   break;
-  }
-  $17 = $5;
-  $18 = HEAP32[$17>>2]|0;
-  $19 = $18 & -256;
-  $20 = $19 | 1;
-  HEAP32[$17>>2] = $20;
-  $21 = $7;
-  $22 = $5;
-  $23 = ((($22)) + 12|0);
-  HEAP32[$23>>2] = $21;
-  $24 = $5;
-  $7 = $24;
-  $25 = $5;
-  $26 = ((($25)) + 24|0);
-  $5 = $26;
- }
- $27 = $7;
- $28 = $4;
- HEAP32[$28>>2] = $27;
- $29 = $3;
- $30 = $4;
- _link_heap_page($29,$30);
- $31 = $3;
- $32 = $4;
- _link_free_heap_page($31,$32);
- STACKTOP = sp;return;
-}
-function _link_heap_page($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $4 = $2;
- $5 = HEAP32[$4>>2]|0;
- $6 = $3;
- $7 = ((($6)) + 8|0);
- HEAP32[$7>>2] = $5;
- $8 = $2;
- $9 = HEAP32[$8>>2]|0;
- $10 = ($9|0)!=(0|0);
- if ($10) {
-  $11 = $3;
-  $12 = $2;
-  $13 = HEAP32[$12>>2]|0;
-  $14 = ((($13)) + 4|0);
-  HEAP32[$14>>2] = $11;
- }
- $15 = $3;
- $16 = $2;
- HEAP32[$16>>2] = $15;
- STACKTOP = sp;return;
-}
-function _free_heap($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;
- var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $2 = $0;
- $3 = $1;
- $8 = $3;
- $9 = HEAP32[$8>>2]|0;
- $4 = $9;
- while(1) {
-  $10 = $4;
-  $11 = ($10|0)!=(0|0);
-  if (!($11)) {
-   break;
-  }
-  $12 = $4;
-  $5 = $12;
-  $13 = $4;
-  $14 = ((($13)) + 8|0);
-  $15 = HEAP32[$14>>2]|0;
-  $4 = $15;
-  $16 = $5;
-  $17 = ((($16)) + 24|0);
-  $6 = $17;
-  $18 = $6;
-  $19 = ((($18)) + 1536|0);
-  $7 = $19;
-  while(1) {
-   $20 = $6;
-   $21 = $7;
-   $22 = ($20>>>0)<($21>>>0);
-   if (!($22)) {
-    break;
-   }
-   $23 = $6;
-   $24 = HEAP32[$23>>2]|0;
-   $25 = $24 & 255;
-   $26 = ($25|0)!=(1);
-   if ($26) {
-    $27 = $2;
-    $28 = $6;
-    _obj_free($27,$28);
-   }
-   $29 = $6;
-   $30 = ((($29)) + 24|0);
-   $6 = $30;
-  }
-  $31 = $2;
-  $32 = $5;
-  _mrb_free($31,$32);
- }
- STACKTOP = sp;return;
-}
-function _mrb_gc_destroy($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $4 = $2;
- $5 = $3;
- _free_heap($4,$5);
- STACKTOP = sp;return;
-}
-function _mrb_gc_protect($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = ((($1)) + 4|0);
- $4 = HEAP32[$3>>2]|0;
- $5 = ($4>>>0)<(8);
- if ($5) {
-  STACKTOP = sp;return;
- }
- $6 = $2;
- $7 = $2;
- $8 = ((($7)) + 92|0);
- $9 = HEAP32[$1>>2]|0;
- _gc_protect($6,$8,$9);
- STACKTOP = sp;return;
-}
-function _gc_protect($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0;
- var label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $0;
- $4 = $1;
- $5 = $2;
- $6 = $4;
- $7 = ((($6)) + 416|0);
- $8 = HEAP32[$7>>2]|0;
- $9 = ($8|0)>=(100);
- if ($9) {
-  $10 = $4;
-  $11 = ((($10)) + 416|0);
-  HEAP32[$11>>2] = 96;
-  $12 = $3;
-  $13 = $3;
-  $14 = (_mrb_class_get($13,68266)|0);
-  _mrb_raise($12,$14,54868);
-  // unreachable;
- } else {
-  $15 = $5;
-  $16 = $4;
-  $17 = ((($16)) + 16|0);
-  $18 = $4;
-  $19 = ((($18)) + 416|0);
-  $20 = HEAP32[$19>>2]|0;
-  $21 = (($20) + 1)|0;
-  HEAP32[$19>>2] = $21;
-  $22 = (($17) + ($20<<2)|0);
-  HEAP32[$22>>2] = $15;
-  STACKTOP = sp;return;
- }
-}
-function _mrb_obj_alloc($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;
- var $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0;
- var $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0;
- var $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $3 = $0;
- $4 = $1;
- $5 = $2;
- $8 = $3;
- $9 = ((($8)) + 92|0);
- $7 = $9;
- $10 = $7;
- $11 = ((($10)) + 440|0);
- $12 = HEAP32[$11>>2]|0;
- $13 = $7;
- $14 = ((($13)) + 12|0);
- $15 = HEAP32[$14>>2]|0;
- $16 = ($12>>>0)<($15>>>0);
- if ($16) {
-  $17 = $3;
-  _mrb_incremental_gc($17);
- }
- $18 = $7;
- $19 = ((($18)) + 8|0);
- $20 = HEAP32[$19>>2]|0;
- $21 = ($20|0)==(0|0);
- if ($21) {
-  $22 = $3;
-  $23 = $7;
-  _add_heap($22,$23);
- }
- $24 = $7;
- $25 = ((($24)) + 8|0);
- $26 = HEAP32[$25>>2]|0;
- $27 = HEAP32[$26>>2]|0;
- $6 = $27;
- $28 = $6;
- $29 = ((($28)) + 12|0);
- $30 = HEAP32[$29>>2]|0;
- $31 = $7;
- $32 = ((($31)) + 8|0);
- $33 = HEAP32[$32>>2]|0;
- HEAP32[$33>>2] = $30;
- $34 = $7;
- $35 = ((($34)) + 8|0);
- $36 = HEAP32[$35>>2]|0;
- $37 = HEAP32[$36>>2]|0;
- $38 = ($37|0)==(0|0);
- if ($38) {
-  $39 = $7;
-  $40 = $7;
-  $41 = ((($40)) + 8|0);
-  $42 = HEAP32[$41>>2]|0;
-  _unlink_free_heap_page($39,$42);
- }
- $43 = $7;
- $44 = ((($43)) + 12|0);
- $45 = HEAP32[$44>>2]|0;
- $46 = (($45) + 1)|0;
- HEAP32[$44>>2] = $46;
- $47 = $3;
- $48 = $7;
- $49 = $6;
- _gc_protect($47,$48,$49);
- $50 = $6;
- ;HEAP32[$50>>2]=HEAP32[72724>>2]|0;HEAP32[$50+4>>2]=HEAP32[72724+4>>2]|0;HEAP32[$50+8>>2]=HEAP32[72724+8>>2]|0;HEAP32[$50+12>>2]=HEAP32[72724+12>>2]|0;HEAP32[$50+16>>2]=HEAP32[72724+16>>2]|0;HEAP32[$50+20>>2]=HEAP32[72724+20>>2]|0;
- $51 = $4;
- $52 = $6;
- $53 = HEAP32[$52>>2]|0;
- $54 = $51 & 255;
- $55 = $53 & -256;
- $56 = $55 | $54;
- HEAP32[$52>>2] = $56;
- $57 = $5;
- $58 = $6;
- $59 = ((($58)) + 4|0);
- HEAP32[$59>>2] = $57;
- $60 = $7;
- $61 = ((($60)) + 424|0);
- $62 = HEAP32[$61>>2]|0;
- $63 = $6;
- $64 = HEAP32[$63>>2]|0;
- $65 = $62 & 7;
- $66 = $65 << 8;
- $67 = $64 & -1793;
- $68 = $67 | $66;
- HEAP32[$63>>2] = $68;
- $69 = $6;
- STACKTOP = sp;return ($69|0);
-}
-function _mrb_incremental_gc($0) {
- $0 = $0|0;
- var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;
- var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0;
- var $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0;
- var $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0;
- var $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $1 = $0;
- $3 = $1;
- $4 = ((($3)) + 92|0);
- $2 = $4;
- $5 = $2;
- $6 = ((($5)) + 452|0);
- $7 = HEAP8[$6>>0]|0;
- $8 = $7 & 1;
- $9 = ($8<<24>>24)!=(0);
- if ($9) {
-  STACKTOP = sp;return;
- }
- $10 = $2;
- $11 = ((($10)) + 452|0);
- $12 = HEAP8[$11>>0]|0;
- $13 = ($12&255) >>> 2;
- $14 = $13 & 1;
- $15 = $14&255;
- $16 = ($15|0)!=(0);
- if ($16) {
-  $17 = $2;
-  $18 = ((($17)) + 452|0);
-  $19 = HEAP8[$18>>0]|0;
-  $20 = ($19&255) >>> 1;
-  $21 = $20 & 1;
-  $22 = ($21<<24>>24)!=(0);
-  if ($22) {
-   label = 5;
-  } else {
-   $23 = $1;
-   $24 = $2;
-   _incremental_gc_until($23,$24,0);
-  }
- } else {
-  label = 5;
- }
- if ((label|0) == 5) {
-  $25 = $1;
-  $26 = $2;
-  _incremental_gc_step($25,$26);
- }
- $27 = $2;
- $28 = ((($27)) + 420|0);
- $29 = HEAP32[$28>>2]|0;
- $30 = ($29|0)==(0);
- if (!($30)) {
-  STACKTOP = sp;return;
- }
- $31 = $2;
- $32 = ((($31)) + 436|0);
- $33 = HEAP32[$32>>2]|0;
- $34 = (($33>>>0) / 100)&-1;
- $35 = $2;
- $36 = ((($35)) + 444|0);
- $37 = HEAP32[$36>>2]|0;
- $38 = Math_imul($34, $37)|0;
- $39 = $2;
- $40 = ((($39)) + 440|0);
- HEAP32[$40>>2] = $38;
- $41 = $2;
- $42 = ((($41)) + 440|0);
- $43 = HEAP32[$42>>2]|0;
- $44 = ($43>>>0)<(1024);
- if ($44) {
-  $45 = $2;
-  $46 = ((($45)) + 440|0);
-  HEAP32[$46>>2] = 1024;
- }
- $47 = $2;
- $48 = ((($47)) + 452|0);
- $49 = HEAP8[$48>>0]|0;
- $50 = ($49&255) >>> 2;
- $51 = $50 & 1;
- $52 = $51&255;
- $53 = ($52|0)!=(0);
- if ($53) {
-  $54 = $2;
-  $55 = ((($54)) + 452|0);
-  $56 = HEAP8[$55>>0]|0;
-  $57 = ($56&255) >>> 1;
-  $58 = $57 & 1;
-  $59 = $58&255;
-  $60 = ($59|0)!=(0);
-  if ($60) {
-   $61 = $2;
-   $62 = ((($61)) + 436|0);
-   $63 = HEAP32[$62>>2]|0;
-   $64 = (($63>>>0) / 100)&-1;
-   $65 = ($64*200)|0;
-   $66 = $2;
-   $67 = ((($66)) + 456|0);
-   HEAP32[$67>>2] = $65;
-   $68 = $2;
-   $69 = ((($68)) + 452|0);
-   $70 = HEAP8[$69>>0]|0;
-   $71 = $70 & -3;
-   HEAP8[$69>>0] = $71;
-   STACKTOP = sp;return;
-  }
- }
- $72 = $2;
- $73 = ((($72)) + 452|0);
- $74 = HEAP8[$73>>0]|0;
- $75 = ($74&255) >>> 2;
- $76 = $75 & 1;
- $77 = $76&255;
- $78 = ($77|0)!=(0);
- if (!($78)) {
-  STACKTOP = sp;return;
- }
- $79 = $2;
- $80 = ((($79)) + 452|0);
- $81 = HEAP8[$80>>0]|0;
- $82 = ($81&255) >>> 1;
- $83 = $82 & 1;
- $84 = ($83<<24>>24)!=(0);
- if ($84) {
-  STACKTOP = sp;return;
- }
- $85 = $2;
- $86 = ((($85)) + 12|0);
- $87 = HEAP32[$86>>2]|0;
- $88 = $2;
- $89 = ((($88)) + 456|0);
- $90 = HEAP32[$89>>2]|0;
- $91 = ($87>>>0)>($90>>>0);
- if (!($91)) {
-  STACKTOP = sp;return;
- }
- $92 = $1;
- $93 = $2;
- _clear_all_old($92,$93);
- $94 = $2;
- $95 = ((($94)) + 452|0);
- $96 = HEAP8[$95>>0]|0;
- $97 = $96 & -3;
- $98 = $97 | 2;
- HEAP8[$95>>0] = $98;
- STACKTOP = sp;return;
-}
-function _incremental_gc_step($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;
- var $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $4 = 0;
- $5 = 0;
- $6 = $3;
- $7 = ((($6)) + 448|0);
- $8 = HEAP32[$7>>2]|0;
- $9 = ($8*10)|0;
- $4 = $9;
- while(1) {
-  $10 = $5;
-  $11 = $4;
-  $12 = ($10>>>0)<($11>>>0);
-  if (!($12)) {
-   break;
-  }
-  $13 = $2;
-  $14 = $3;
-  $15 = $4;
-  $16 = (_incremental_gc($13,$14,$15)|0);
-  $17 = $5;
-  $18 = (($17) + ($16))|0;
-  $5 = $18;
-  $19 = $3;
-  $20 = ((($19)) + 420|0);
-  $21 = HEAP32[$20>>2]|0;
-  $22 = ($21|0)==(0);
-  if ($22) {
-   break;
-  }
- }
- $23 = $3;
- $24 = ((($23)) + 12|0);
- $25 = HEAP32[$24>>2]|0;
- $26 = (($25) + 1024)|0;
- $27 = $3;
- $28 = ((($27)) + 440|0);
- HEAP32[$28>>2] = $26;
- STACKTOP = sp;return;
-}
-function _mrb_gc_arena_save($0) {
- $0 = $0|0;
- var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $1 = $0;
- $2 = $1;
- $3 = ((($2)) + 92|0);
- $4 = ((($3)) + 416|0);
- $5 = HEAP32[$4>>2]|0;
- STACKTOP = sp;return ($5|0);
-}
-function _mrb_gc_arena_restore($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $5 = $2;
- $6 = ((($5)) + 92|0);
- $4 = $6;
- $7 = $3;
- $8 = $4;
- $9 = ((($8)) + 416|0);
- HEAP32[$9>>2] = $7;
- STACKTOP = sp;return;
-}
-function _mrb_field_write_barrier($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;
- var $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0;
- var $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $0;
- $4 = $1;
- $5 = $2;
- $7 = $3;
- $8 = ((($7)) + 92|0);
- $6 = $8;
- $9 = $4;
- $10 = HEAP32[$9>>2]|0;
- $11 = $10 >>> 8;
- $12 = $11 & 7;
- $13 = $12 & 4;
- $14 = ($13|0)!=(0);
- if (!($14)) {
-  STACKTOP = sp;return;
- }
- $15 = $5;
- $16 = HEAP32[$15>>2]|0;
- $17 = $16 >>> 8;
- $18 = $17 & 7;
- $19 = $18 & 3;
- $20 = ($19|0)!=(0);
- if (!($20)) {
-  STACKTOP = sp;return;
- }
- $21 = $6;
- $22 = ((($21)) + 452|0);
- $23 = HEAP8[$22>>0]|0;
- $24 = ($23&255) >>> 2;
- $25 = $24 & 1;
- $26 = $25&255;
- $27 = ($26|0)!=(0);
- if (!($27)) {
-  $28 = $6;
-  $29 = ((($28)) + 420|0);
-  $30 = HEAP32[$29>>2]|0;
-  $31 = ($30|0)==(1);
-  if (!($31)) {
-   $35 = $6;
-   $36 = ((($35)) + 424|0);
-   $37 = HEAP32[$36>>2]|0;
-   $38 = $4;
-   $39 = HEAP32[$38>>2]|0;
-   $40 = $37 & 7;
-   $41 = $40 << 8;
-   $42 = $39 & -1793;
-   $43 = $42 | $41;
-   HEAP32[$38>>2] = $43;
-   STACKTOP = sp;return;
-  }
- }
- $32 = $3;
- $33 = $6;
- $34 = $5;
- _add_gray_list($32,$33,$34);
- STACKTOP = sp;return;
-}
-function _mrb_write_barrier($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0;
- var $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $5 = $2;
- $6 = ((($5)) + 92|0);
- $4 = $6;
- $7 = $3;
- $8 = HEAP32[$7>>2]|0;
- $9 = $8 >>> 8;
- $10 = $9 & 7;
- $11 = $10 & 4;
- $12 = ($11|0)!=(0);
- if (!($12)) {
-  STACKTOP = sp;return;
- }
- $13 = $3;
- $14 = HEAP32[$13>>2]|0;
- $15 = $14 & -1793;
- HEAP32[$13>>2] = $15;
- $16 = $4;
- $17 = ((($16)) + 432|0);
- $18 = HEAP32[$17>>2]|0;
- $19 = $3;
- $20 = ((($19)) + 8|0);
- HEAP32[$20>>2] = $18;
- $21 = $3;
- $22 = $4;
- $23 = ((($22)) + 432|0);
- HEAP32[$23>>2] = $21;
- STACKTOP = sp;return;
-}
-function _mrb_init_gc($0) {
- $0 = $0|0;
- var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0;
- var $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $1 = $0;
- $3 = $1;
- $4 = (_mrb_define_module($3,54889)|0);
- $2 = $4;
- $5 = $1;
- $6 = $2;
- _mrb_define_class_method($5,$6,54892,8,0);
- $7 = $1;
- $8 = $2;
- _mrb_define_class_method($7,$8,54898,9,0);
- $9 = $1;
- $10 = $2;
- _mrb_define_class_method($9,$10,54905,10,0);
- $11 = $1;
- $12 = $2;
- _mrb_define_class_method($11,$12,54913,11,0);
- $13 = $1;
- $14 = $2;
- _mrb_define_class_method($13,$14,54928,12,262144);
- $15 = $1;
- $16 = $2;
- _mrb_define_class_method($15,$16,54944,13,0);
- $17 = $1;
- $18 = $2;
- _mrb_define_class_method($17,$18,54955,14,262144);
- $19 = $1;
- $20 = $2;
- _mrb_define_class_method($19,$20,54967,15,262144);
- $21 = $1;
- $22 = $2;
- _mrb_define_class_method($21,$22,54986,16,0);
- STACKTOP = sp;return;
-}
-function _gc_start($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $3 = 0, $4 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $1;
- $4 = $3;
- _mrb_full_gc($4);
- _mrb_nil_value_55($0);
- STACKTOP = sp;return;
-}
-function _gc_enable($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $1;
- $5 = $3;
- $6 = ((($5)) + 92|0);
- $7 = ((($6)) + 452|0);
- $8 = HEAP8[$7>>0]|0;
- $9 = $8 & 1;
- $4 = $9;
- $10 = $3;
- $11 = ((($10)) + 92|0);
- $12 = ((($11)) + 452|0);
- $13 = HEAP8[$12>>0]|0;
- $14 = $13 & -2;
- HEAP8[$12>>0] = $14;
- $15 = $4;
- _mrb_bool_value($0,$15);
- STACKTOP = sp;return;
-}
-function _gc_disable($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $1;
- $5 = $3;
- $6 = ((($5)) + 92|0);
- $7 = ((($6)) + 452|0);
- $8 = HEAP8[$7>>0]|0;
- $9 = $8 & 1;
- $4 = $9;
- $10 = $3;
- $11 = ((($10)) + 92|0);
- $12 = ((($11)) + 452|0);
- $13 = HEAP8[$12>>0]|0;
- $14 = $13 & -2;
- $15 = $14 | 1;
- HEAP8[$12>>0] = $15;
- $16 = $4;
- _mrb_bool_value($0,$16);
- STACKTOP = sp;return;
-}
-function _gc_interval_ratio_get($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $1;
- $4 = $3;
- $5 = ((($4)) + 92|0);
- $6 = ((($5)) + 444|0);
- $7 = HEAP32[$6>>2]|0;
- _mrb_fixnum_value($0,$7);
- STACKTOP = sp;return;
-}
-function _gc_interval_ratio_set($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $vararg_buffer = sp;
- $4 = sp + 4|0;
- $3 = $1;
- $5 = $3;
- HEAP32[$vararg_buffer>>2] = $4;
- (_mrb_get_args($5,64797,$vararg_buffer)|0);
- $6 = HEAP32[$4>>2]|0;
- $7 = $3;
- $8 = ((($7)) + 92|0);
- $9 = ((($8)) + 444|0);
- HEAP32[$9>>2] = $6;
- _mrb_nil_value_55($0);
- STACKTOP = sp;return;
-}
-function _gc_step_ratio_get($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $1;
- $4 = $3;
- $5 = ((($4)) + 92|0);
- $6 = ((($5)) + 448|0);
- $7 = HEAP32[$6>>2]|0;
- _mrb_fixnum_value($0,$7);
- STACKTOP = sp;return;
-}
-function _gc_step_ratio_set($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $vararg_buffer = sp;
- $4 = sp + 4|0;
- $3 = $1;
- $5 = $3;
- HEAP32[$vararg_buffer>>2] = $4;
- (_mrb_get_args($5,64797,$vararg_buffer)|0);
- $6 = HEAP32[$4>>2]|0;
- $7 = $3;
- $8 = ((($7)) + 92|0);
- $9 = ((($8)) + 448|0);
- HEAP32[$9>>2] = $6;
- _mrb_nil_value_55($0);
- STACKTOP = sp;return;
-}
-function _gc_generational_mode_set($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, label = 0;
- var sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $vararg_buffer = sp;
- $4 = sp + 8|0;
- $3 = $1;
- $5 = $3;
- HEAP32[$vararg_buffer>>2] = $4;
- (_mrb_get_args($5,55358,$vararg_buffer)|0);
- $6 = $3;
- $7 = ((($6)) + 92|0);
- $8 = ((($7)) + 452|0);
- $9 = HEAP8[$8>>0]|0;
- $10 = ($9&255) >>> 2;
- $11 = $10 & 1;
- $12 = $11&255;
- $13 = HEAP8[$4>>0]|0;
- $14 = $13&255;
- $15 = ($12|0)!=($14|0);
- if (!($15)) {
-  $20 = HEAP8[$4>>0]|0;
-  _mrb_bool_value($0,$20);
-  STACKTOP = sp;return;
- }
- $16 = $3;
- $17 = $3;
- $18 = ((($17)) + 92|0);
- $19 = HEAP8[$4>>0]|0;
- _change_gen_gc_mode($16,$18,$19);
- $20 = HEAP8[$4>>0]|0;
- _mrb_bool_value($0,$20);
- STACKTOP = sp;return;
-}
-function _gc_generational_mode_get($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $1;
- $4 = $3;
- $5 = ((($4)) + 92|0);
- $6 = ((($5)) + 452|0);
- $7 = HEAP8[$6>>0]|0;
- $8 = ($7&255) >>> 2;
- $9 = $8 & 1;
- _mrb_bool_value($0,$9);
- STACKTOP = sp;return;
-}
-function _mrb_bool_value($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = sp;
- $2 = $1;
- $4 = $2;
- $5 = $4&255;
- $6 = ($5|0)!=(0);
- $7 = $6 ? 2 : 0;
- $8 = ((($3)) + 4|0);
- HEAP32[$8>>2] = $7;
- HEAP32[$3>>2] = 1;
- ;HEAP32[$0>>2]=HEAP32[$3>>2]|0;HEAP32[$0+4>>2]=HEAP32[$3+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _change_gen_gc_mode($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;
- var $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0;
- var $48 = 0, $49 = 0, $5 = 0, $50 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $or$cond = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $0;
- $4 = $1;
- $5 = $2;
- $6 = $4;
- $7 = ((($6)) + 452|0);
- $8 = HEAP8[$7>>0]|0;
- $9 = ($8&255) >>> 2;
- $10 = $9 & 1;
- $11 = $10&255;
- $12 = ($11|0)==(0);
- $13 = $5;
- $14 = ($13<<24>>24)!=(0);
- $or$cond = $12 | $14;
- if ($or$cond) {
-  $21 = $4;
-  $22 = ((($21)) + 452|0);
-  $23 = HEAP8[$22>>0]|0;
-  $24 = ($23&255) >>> 2;
-  $25 = $24 & 1;
-  $26 = ($25<<24>>24)!=(0);
-  if (!($26)) {
-   $27 = $5;
-   $28 = $27&255;
-   $29 = ($28|0)!=(0);
-   if ($29) {
-    $30 = $3;
-    $31 = $4;
-    _incremental_gc_until($30,$31,0);
-    $32 = $4;
-    $33 = ((($32)) + 436|0);
-    $34 = HEAP32[$33>>2]|0;
-    $35 = (($34>>>0) / 100)&-1;
-    $36 = ($35*200)|0;
-    $37 = $4;
-    $38 = ((($37)) + 456|0);
-    HEAP32[$38>>2] = $36;
-    $39 = $4;
-    $40 = ((($39)) + 452|0);
-    $41 = HEAP8[$40>>0]|0;
-    $42 = $41 & -3;
-    HEAP8[$40>>0] = $42;
-   }
-  }
- } else {
-  $15 = $3;
-  $16 = $4;
-  _clear_all_old($15,$16);
-  $17 = $4;
-  $18 = ((($17)) + 452|0);
-  $19 = HEAP8[$18>>0]|0;
-  $20 = $19 & -3;
-  HEAP8[$18>>0] = $20;
- }
- $43 = $5;
- $44 = $4;
- $45 = ((($44)) + 452|0);
- $46 = HEAP8[$45>>0]|0;
- $47 = $43 & 1;
- $48 = ($47 << 2)&255;
- $49 = $46 & -5;
- $50 = $49 | $48;
- HEAP8[$45>>0] = $50;
- STACKTOP = sp;return;
-}
-function _mrb_fixnum_value($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = sp;
- $2 = $1;
- $4 = ((($3)) + 4|0);
- HEAP32[$4>>2] = 3;
- $5 = $2;
- HEAP32[$3>>2] = $5;
- ;HEAP32[$0>>2]=HEAP32[$3>>2]|0;HEAP32[$0+4>>2]=HEAP32[$3+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _kh_alloc_ht($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;
- var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0;
- var $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $2 = $0;
- $3 = $1;
- $7 = $3;
- $8 = HEAP32[$7>>2]|0;
- $4 = $8;
- $5 = 20;
- $9 = $2;
- $10 = $4;
- $11 = $10;
- $12 = (($11>>>0) / 4)&-1;
- $13 = $5;
- $14 = $4;
- $15 = Math_imul($13, $14)|0;
- $16 = (($12) + ($15))|0;
- $17 = (_mrb_malloc($9,$16)|0);
- $6 = $17;
- $18 = $3;
- $19 = ((($18)) + 8|0);
- HEAP32[$19>>2] = 0;
- $20 = $3;
- $21 = ((($20)) + 4|0);
- HEAP32[$21>>2] = 0;
- $22 = $6;
- $23 = $3;
- $24 = ((($23)) + 16|0);
- HEAP32[$24>>2] = $22;
- $25 = $6;
- $26 = $4;
- $27 = $26<<3;
- $28 = (($25) + ($27)|0);
- $29 = $3;
- $30 = ((($29)) + 20|0);
- HEAP32[$30>>2] = $28;
- $31 = $6;
- $32 = $5;
- $33 = $4;
- $34 = Math_imul($32, $33)|0;
- $35 = (($31) + ($34)|0);
- $36 = $3;
- $37 = ((($36)) + 12|0);
- HEAP32[$37>>2] = $35;
- $38 = $3;
- $39 = ((($38)) + 12|0);
- $40 = HEAP32[$39>>2]|0;
- $41 = $4;
- $42 = (($41>>>0) / 4)&-1;
- _kh_fill_flags($40,-86,$42);
- STACKTOP = sp;return;
-}
-function _kh_fill_flags($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $0;
- $4 = $1;
- $5 = $2;
- while(1) {
-  $6 = $5;
-  $7 = (($6) + -1)|0;
-  $5 = $7;
-  $8 = ($6>>>0)>(0);
-  if (!($8)) {
-   break;
-  }
-  $9 = $4;
-  $10 = $3;
-  $11 = ((($10)) + 1|0);
-  $3 = $11;
-  HEAP8[$10>>0] = $9;
- }
- STACKTOP = sp;return;
-}
-function _kh_init_ht_size($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;
- var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $5 = $2;
- $6 = (_mrb_calloc($5,1,24)|0);
- $4 = $6;
- $7 = $3;
- $8 = ($7>>>0)<(8);
- if ($8) {
-  $3 = 8;
- }
- $9 = $3;
- $10 = (($9) + -1)|0;
- $3 = $10;
- $11 = $3;
- $12 = $11 >>> 1;
- $13 = $3;
- $14 = $13 | $12;
- $3 = $14;
- $15 = $3;
- $16 = $15 >>> 2;
- $17 = $3;
- $18 = $17 | $16;
- $3 = $18;
- $19 = $3;
- $20 = $19 >>> 4;
- $21 = $3;
- $22 = $21 | $20;
- $3 = $22;
- $23 = $3;
- $24 = $23 >>> 8;
- $25 = $3;
- $26 = $25 | $24;
- $3 = $26;
- $27 = $3;
- $28 = $27 >>> 16;
- $29 = $3;
- $30 = $29 | $28;
- $3 = $30;
- $31 = $3;
- $32 = (($31) + 1)|0;
- $3 = $32;
- $33 = $3;
- $34 = $4;
- HEAP32[$34>>2] = $33;
- $35 = $2;
- $36 = $4;
- _kh_alloc_ht($35,$36);
- $37 = $4;
- STACKTOP = sp;return ($37|0);
-}
-function _kh_init_ht($0) {
- $0 = $0|0;
- var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $1 = $0;
- $2 = $1;
- $3 = (_kh_init_ht_size($2,8)|0);
- STACKTOP = sp;return ($3|0);
-}
-function _kh_destroy_ht($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $4 = $3;
- $5 = ($4|0)!=(0|0);
- if (!($5)) {
-  STACKTOP = sp;return;
- }
- $6 = $2;
- $7 = $3;
- $8 = ((($7)) + 16|0);
- $9 = HEAP32[$8>>2]|0;
- _mrb_free($6,$9);
- $10 = $2;
- $11 = $3;
- _mrb_free($10,$11);
- STACKTOP = sp;return;
-}
-function _kh_clear_ht($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $4 = $3;
- $5 = ($4|0)!=(0|0);
- if (!($5)) {
-  STACKTOP = sp;return;
- }
- $6 = $3;
- $7 = ((($6)) + 12|0);
- $8 = HEAP32[$7>>2]|0;
- $9 = ($8|0)!=(0|0);
- if (!($9)) {
-  STACKTOP = sp;return;
- }
- $10 = $3;
- $11 = ((($10)) + 12|0);
- $12 = HEAP32[$11>>2]|0;
- $13 = $3;
- $14 = HEAP32[$13>>2]|0;
- $15 = (($14>>>0) / 4)&-1;
- _kh_fill_flags($12,-86,$15);
- $16 = $3;
- $17 = ((($16)) + 8|0);
- HEAP32[$17>>2] = 0;
- $18 = $3;
- $19 = ((($18)) + 4|0);
- HEAP32[$19>>2] = 0;
- STACKTOP = sp;return;
-}
-function _kh_get_ht($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $$byval_copy2 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0;
- var $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0;
- var $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0;
- var $63 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);
- $$byval_copy2 = sp + 40|0;
- $$byval_copy1 = sp + 32|0;
- $$byval_copy = sp + 24|0;
- $4 = $0;
- $5 = $1;
- $8 = $4;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
- $9 = (_mrb_hash_ht_hash_func($8,$$byval_copy)|0);
- $10 = $5;
- $11 = HEAP32[$10>>2]|0;
- $12 = (($11) - 1)|0;
- $13 = $9 & $12;
- $6 = $13;
- $7 = 0;
- while(1) {
-  $14 = $5;
-  $15 = ((($14)) + 12|0);
-  $16 = HEAP32[$15>>2]|0;
-  $17 = $6;
-  $18 = (($17>>>0) / 4)&-1;
-  $19 = (($16) + ($18)|0);
-  $20 = HEAP8[$19>>0]|0;
-  $21 = $20&255;
-  $22 = $6;
-  $23 = (($22>>>0) % 4)&-1;
-  $24 = (55004 + ($23)|0);
-  $25 = HEAP8[$24>>0]|0;
-  $26 = $25&255;
-  $27 = $21 & $26;
-  $28 = ($27|0)!=(0);
-  $29 = $28 ^ 1;
-  $30 = $5;
-  if (!($29)) {
-   label = 7;
-   break;
-  }
-  $31 = ((($30)) + 12|0);
-  $32 = HEAP32[$31>>2]|0;
-  $33 = $6;
-  $34 = (($33>>>0) / 4)&-1;
-  $35 = (($32) + ($34)|0);
-  $36 = HEAP8[$35>>0]|0;
-  $37 = $36&255;
-  $38 = $6;
-  $39 = (($38>>>0) % 4)&-1;
-  $40 = (55008 + ($39)|0);
-  $41 = HEAP8[$40>>0]|0;
-  $42 = $41&255;
-  $43 = $37 & $42;
-  $44 = ($43|0)!=(0);
-  if (!($44)) {
-   $45 = $4;
-   $46 = $5;
-   $47 = ((($46)) + 16|0);
-   $48 = HEAP32[$47>>2]|0;
-   $49 = $6;
-   $50 = (($48) + ($49<<3)|0);
-   ;HEAP32[$$byval_copy1>>2]=HEAP32[$50>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$50+4>>2]|0;
-   ;HEAP32[$$byval_copy2>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy2+4>>2]=HEAP32[$2+4>>2]|0;
-   $51 = (_mrb_hash_ht_hash_equal($45,$$byval_copy1,$$byval_copy2)|0);
-   $52 = ($51|0)!=(0);
-   if ($52) {
-    label = 5;
-    break;
-   }
-  }
-  $54 = $6;
-  $55 = $7;
-  $56 = (($55) + 1)|0;
-  $7 = $56;
-  $57 = (($54) + ($56))|0;
-  $58 = $5;
-  $59 = HEAP32[$58>>2]|0;
-  $60 = (($59) - 1)|0;
-  $61 = $57 & $60;
-  $6 = $61;
- }
- if ((label|0) == 5) {
-  $53 = $6;
-  $3 = $53;
-  $63 = $3;
-  STACKTOP = sp;return ($63|0);
- }
- else if ((label|0) == 7) {
-  $62 = HEAP32[$30>>2]|0;
-  $3 = $62;
-  $63 = $3;
-  STACKTOP = sp;return ($63|0);
- }
- return (0)|0;
-}
-function _mrb_hash_ht_hash_func($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $$byval_copy = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;
- var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0;
- var $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0.0, $61 = 0, $62 = 0, $63 = 0;
- var $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0.0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0;
- var $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);
- $$byval_copy = sp + 56|0;
- $vararg_buffer = sp;
- $5 = sp + 32|0;
- $10 = sp + 8|0;
- $3 = $0;
- $11 = ((($1)) + 4|0);
- $12 = HEAP32[$11>>2]|0;
- $4 = $12;
- $13 = $4;
- switch ($13|0) {
- case 16:  {
-  $14 = HEAP32[$1>>2]|0;
-  $15 = HEAP32[$14>>2]|0;
-  $16 = $15 >>> 11;
-  $17 = $16 & 8;
-  $18 = ($17|0)!=(0);
-  $19 = HEAP32[$1>>2]|0;
-  $20 = ((($19)) + 12|0);
-  if ($18) {
-   $23 = $20;
-  } else {
-   $21 = ((($20)) + 8|0);
-   $22 = HEAP32[$21>>2]|0;
-   $23 = $22;
-  }
-  $6 = $23;
-  $24 = HEAP32[$1>>2]|0;
-  $25 = HEAP32[$24>>2]|0;
-  $26 = $25 >>> 11;
-  $27 = $26 & 8;
-  $28 = ($27|0)!=(0);
-  $29 = HEAP32[$1>>2]|0;
-  if ($28) {
-   $30 = HEAP32[$29>>2]|0;
-   $31 = $30 >>> 11;
-   $32 = $31 & 496;
-   $33 = $32 >> 4;
-   $36 = $33;
-  } else {
-   $34 = ((($29)) + 12|0);
-   $35 = HEAP32[$34>>2]|0;
-   $36 = $35;
-  }
-  $8 = $36;
-  $9 = 0;
-  $7 = 0;
-  while(1) {
-   $37 = $7;
-   $38 = $8;
-   $39 = ($37|0)<($38|0);
-   $40 = $9;
-   if (!($39)) {
-    break;
-   }
-   $41 = $40 << 5;
-   $42 = $9;
-   $43 = (($41) - ($42))|0;
-   $44 = $6;
-   $45 = ((($44)) + 1|0);
-   $6 = $45;
-   $46 = HEAP8[$44>>0]|0;
-   $47 = $46 << 24 >> 24;
-   $48 = (($43) + ($47))|0;
-   $9 = $48;
-   $49 = $7;
-   $50 = (($49) + 1)|0;
-   $7 = $50;
-  }
-  $2 = $40;
-  $89 = $2;
-  STACKTOP = sp;return ($89|0);
-  break;
- }
- case 4:  {
-  $51 = HEAP32[$1>>2]|0;
-  $9 = $51;
-  $52 = $9;
-  $53 = $9;
-  $54 = $53 << 2;
-  $55 = $52 ^ $54;
-  $56 = $9;
-  $57 = $56 >>> 2;
-  $58 = $55 ^ $57;
-  $2 = $58;
-  $89 = $2;
-  STACKTOP = sp;return ($89|0);
-  break;
- }
- case 3:  {
-  $59 = HEAP32[$1>>2]|0;
-  $60 = (+($59|0));
-  $61 = (_mrb_float_id($60)|0);
-  $9 = $61;
-  $62 = $9;
-  $63 = $9;
-  $64 = $63 << 2;
-  $65 = $62 ^ $64;
-  $66 = $9;
-  $67 = $66 >>> 2;
-  $68 = $65 ^ $67;
-  $2 = $68;
-  $89 = $2;
-  STACKTOP = sp;return ($89|0);
-  break;
- }
- case 6:  {
-  $69 = +HEAPF32[$1>>2];
-  $70 = (_mrb_float_id($69)|0);
-  $9 = $70;
-  $71 = $9;
-  $72 = $9;
-  $73 = $72 << 2;
-  $74 = $71 ^ $73;
-  $75 = $9;
-  $76 = $75 >>> 2;
-  $77 = $74 ^ $76;
-  $2 = $77;
-  $89 = $2;
-  STACKTOP = sp;return ($89|0);
-  break;
- }
- default: {
-  $78 = $3;
-  ;HEAP32[$$byval_copy>>2]=HEAP32[$1>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$1+4>>2]|0;
-  _mrb_funcall($10,$78,$$byval_copy,68413,0,$vararg_buffer);
-  ;HEAP32[$5>>2]=HEAP32[$10>>2]|0;HEAP32[$5+4>>2]=HEAP32[$10+4>>2]|0;
-  $79 = $4;
-  $80 = HEAP32[$5>>2]|0;
-  $81 = $79 ^ $80;
-  $9 = $81;
-  $82 = $9;
-  $83 = $9;
-  $84 = $83 << 2;
-  $85 = $82 ^ $84;
-  $86 = $9;
-  $87 = $86 >>> 2;
-  $88 = $85 ^ $87;
-  $2 = $88;
-  $89 = $2;
-  STACKTOP = sp;return ($89|0);
- }
- }
- return (0)|0;
-}
-function _mrb_hash_ht_hash_equal($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $$byval_copy2 = 0, $$byval_copy3 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0;
- var $26 = 0.0, $27 = 0.0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0.0, $33 = 0, $34 = 0.0, $35 = 0, $36 = 0, $37 = 0.0, $38 = 0.0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0;
- var $44 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);
- $$byval_copy3 = sp + 40|0;
- $$byval_copy2 = sp + 32|0;
- $$byval_copy1 = sp + 24|0;
- $$byval_copy = sp + 16|0;
- $4 = $0;
- $6 = ((($1)) + 4|0);
- $7 = HEAP32[$6>>2]|0;
- $5 = $7;
- $8 = $5;
- L1: do {
-  switch ($8|0) {
-  case 16:  {
-   $9 = $4;
-   ;HEAP32[$$byval_copy>>2]=HEAP32[$1>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$1+4>>2]|0;
-   ;HEAP32[$$byval_copy1>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$2+4>>2]|0;
-   $10 = (_mrb_str_equal($9,$$byval_copy,$$byval_copy1)|0);
-   $11 = $10&255;
-   $3 = $11;
-   break;
-  }
-  case 4:  {
-   $12 = ((($2)) + 4|0);
-   $13 = HEAP32[$12>>2]|0;
-   $14 = ($13|0)!=(4);
-   if ($14) {
-    $3 = 0;
-    break L1;
-   } else {
-    $15 = HEAP32[$1>>2]|0;
-    $16 = HEAP32[$2>>2]|0;
-    $17 = ($15|0)==($16|0);
-    $18 = $17&1;
-    $3 = $18;
-    break L1;
-   }
-   break;
-  }
-  case 3:  {
-   $19 = ((($2)) + 4|0);
-   $20 = HEAP32[$19>>2]|0;
-   switch ($20|0) {
-   case 3:  {
-    $21 = HEAP32[$1>>2]|0;
-    $22 = HEAP32[$2>>2]|0;
-    $23 = ($21|0)==($22|0);
-    $24 = $23&1;
-    $3 = $24;
-    break L1;
-    break;
-   }
-   case 6:  {
-    $25 = HEAP32[$1>>2]|0;
-    $26 = (+($25|0));
-    $27 = +HEAPF32[$2>>2];
-    $28 = $26 == $27;
-    $29 = $28&1;
-    $3 = $29;
-    break L1;
-    break;
-   }
-   default: {
-    $3 = 0;
-    break L1;
-   }
-   }
-   break;
-  }
-  case 6:  {
-   $30 = ((($2)) + 4|0);
-   $31 = HEAP32[$30>>2]|0;
-   switch ($31|0) {
-   case 3:  {
-    $32 = +HEAPF32[$1>>2];
-    $33 = HEAP32[$2>>2]|0;
-    $34 = (+($33|0));
-    $35 = $32 == $34;
-    $36 = $35&1;
-    $3 = $36;
-    break L1;
-    break;
-   }
-   case 6:  {
-    $37 = +HEAPF32[$1>>2];
-    $38 = +HEAPF32[$2>>2];
-    $39 = $37 == $38;
-    $40 = $39&1;
-    $3 = $40;
-    break L1;
-    break;
-   }
-   default: {
-    $3 = 0;
-    break L1;
-   }
-   }
-   break;
-  }
-  default: {
-   $41 = $4;
-   ;HEAP32[$$byval_copy2>>2]=HEAP32[$1>>2]|0;HEAP32[$$byval_copy2+4>>2]=HEAP32[$1+4>>2]|0;
-   ;HEAP32[$$byval_copy3>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy3+4>>2]=HEAP32[$2+4>>2]|0;
-   $42 = (_mrb_eql($41,$$byval_copy2,$$byval_copy3)|0);
-   $43 = $42&255;
-   $3 = $43;
-  }
-  }
- } while(0);
- $44 = $3;
- STACKTOP = sp;return ($44|0);
-}
-function _kh_resize_ht($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$ = 0, $$byval_copy = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;
- var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0;
- var $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0;
- var $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0;
- var $82 = 0, $83 = 0, $84 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 80|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(80|0);
- $$byval_copy = sp + 64|0;
- $6 = sp + 24|0;
- $3 = $0;
- $4 = $1;
- $5 = $2;
- $13 = $5;
- $14 = ($13>>>0)<(8);
- $$ = $14 ? 8 : $2;
- $5 = $$;
- $15 = $5;
- $16 = (($15) + -1)|0;
- $5 = $16;
- $17 = $5;
- $18 = $17 >>> 1;
- $19 = $5;
- $20 = $19 | $18;
- $5 = $20;
- $21 = $5;
- $22 = $21 >>> 2;
- $23 = $5;
- $24 = $23 | $22;
- $5 = $24;
- $25 = $5;
- $26 = $25 >>> 4;
- $27 = $5;
- $28 = $27 | $26;
- $5 = $28;
- $29 = $5;
- $30 = $29 >>> 8;
- $31 = $5;
- $32 = $31 | $30;
- $5 = $32;
- $33 = $5;
- $34 = $33 >>> 16;
- $35 = $5;
- $36 = $35 | $34;
- $5 = $36;
- $37 = $5;
- $38 = (($37) + 1)|0;
- $5 = $38;
- $39 = $4;
- $40 = ((($39)) + 12|0);
- $41 = HEAP32[$40>>2]|0;
- $7 = $41;
- $42 = $4;
- $43 = ((($42)) + 16|0);
- $44 = HEAP32[$43>>2]|0;
- $8 = $44;
- $45 = $4;
- $46 = ((($45)) + 20|0);
- $47 = HEAP32[$46>>2]|0;
- $9 = $47;
- $48 = $4;
- $49 = HEAP32[$48>>2]|0;
- $10 = $49;
- $50 = $5;
- HEAP32[$6>>2] = $50;
- $51 = $3;
- _kh_alloc_ht($51,$6);
- $11 = 0;
- while(1) {
-  $52 = $11;
-  $53 = $10;
-  $54 = ($52>>>0)<($53>>>0);
-  if (!($54)) {
-   break;
-  }
-  $55 = $7;
-  $56 = $11;
-  $57 = (($56>>>0) / 4)&-1;
-  $58 = (($55) + ($57)|0);
-  $59 = HEAP8[$58>>0]|0;
-  $60 = $59&255;
-  $61 = $11;
-  $62 = (($61>>>0) % 4)&-1;
-  $63 = (55012 + ($62)|0);
-  $64 = HEAP8[$63>>0]|0;
-  $65 = $64&255;
-  $66 = $60 & $65;
-  $67 = ($66|0)!=(0);
-  if (!($67)) {
-   $68 = $3;
-   $69 = $8;
-   $70 = $11;
-   $71 = (($69) + ($70<<3)|0);
-   ;HEAP32[$$byval_copy>>2]=HEAP32[$71>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$71+4>>2]|0;
-   $72 = (_kh_put_ht($68,$6,$$byval_copy,0)|0);
-   $12 = $72;
-   $73 = ((($6)) + 20|0);
-   $74 = HEAP32[$73>>2]|0;
-   $75 = $12;
-   $76 = (($74) + (($75*12)|0)|0);
-   $77 = $9;
-   $78 = $11;
-   $79 = (($77) + (($78*12)|0)|0);
-   ;HEAP32[$76>>2]=HEAP32[$79>>2]|0;HEAP32[$76+4>>2]=HEAP32[$79+4>>2]|0;HEAP32[$76+8>>2]=HEAP32[$79+8>>2]|0;
-  }
-  $80 = $11;
-  $81 = (($80) + 1)|0;
-  $11 = $81;
- }
- $82 = $4;
- ;HEAP32[$82>>2]=HEAP32[$6>>2]|0;HEAP32[$82+4>>2]=HEAP32[$6+4>>2]|0;HEAP32[$82+8>>2]=HEAP32[$6+8>>2]|0;HEAP32[$82+12>>2]=HEAP32[$6+12>>2]|0;HEAP32[$82+16>>2]=HEAP32[$6+16>>2]|0;HEAP32[$82+20>>2]=HEAP32[$6+20>>2]|0;
- $83 = $3;
- $84 = $8;
- _mrb_free($83,$84);
- STACKTOP = sp;return;
-}
-function _kh_put_ht($0,$1,$2,$3) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $$byval_copy2 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0;
- var $115 = 0, $116 = 0, $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0;
- var $133 = 0, $134 = 0, $135 = 0, $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0;
- var $151 = 0, $152 = 0, $153 = 0, $154 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $30 = 0, $31 = 0;
- var $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0;
- var $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0;
- var $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0;
- var $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);
- $$byval_copy2 = sp + 48|0;
- $$byval_copy1 = sp + 40|0;
- $$byval_copy = sp + 32|0;
- $5 = $0;
- $6 = $1;
- $7 = $3;
- $10 = 0;
- $11 = $6;
- $12 = ((($11)) + 8|0);
- $13 = HEAP32[$12>>2]|0;
- $14 = $6;
- $15 = HEAP32[$14>>2]|0;
- $16 = $15 >>> 2;
- $17 = $6;
- $18 = HEAP32[$17>>2]|0;
- $19 = $18 >>> 1;
- $20 = $16 | $19;
- $21 = ($13>>>0)>=($20>>>0);
- if ($21) {
-  $22 = $5;
-  $23 = $6;
-  $24 = $6;
-  $25 = HEAP32[$24>>2]|0;
-  $26 = $25<<1;
-  _kh_resize_ht($22,$23,$26);
- }
- $27 = $5;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
- $28 = (_mrb_hash_ht_hash_func($27,$$byval_copy)|0);
- $29 = $6;
- $30 = HEAP32[$29>>2]|0;
- $31 = (($30) - 1)|0;
- $32 = $28 & $31;
- $8 = $32;
- $33 = $6;
- $34 = HEAP32[$33>>2]|0;
- $9 = $34;
- while(1) {
-  $35 = $6;
-  $36 = ((($35)) + 12|0);
-  $37 = HEAP32[$36>>2]|0;
-  $38 = $8;
-  $39 = (($38>>>0) / 4)&-1;
-  $40 = (($37) + ($39)|0);
-  $41 = HEAP8[$40>>0]|0;
-  $42 = $41&255;
-  $43 = $8;
-  $44 = (($43>>>0) % 4)&-1;
-  $45 = (55004 + ($44)|0);
-  $46 = HEAP8[$45>>0]|0;
-  $47 = $46&255;
-  $48 = $42 & $47;
-  $49 = ($48|0)!=(0);
-  $50 = $49 ^ 1;
-  if (!($50)) {
-   break;
-  }
-  $51 = $6;
-  $52 = ((($51)) + 12|0);
-  $53 = HEAP32[$52>>2]|0;
-  $54 = $8;
-  $55 = (($54>>>0) / 4)&-1;
-  $56 = (($53) + ($55)|0);
-  $57 = HEAP8[$56>>0]|0;
-  $58 = $57&255;
-  $59 = $8;
-  $60 = (($59>>>0) % 4)&-1;
-  $61 = (55008 + ($60)|0);
-  $62 = HEAP8[$61>>0]|0;
-  $63 = $62&255;
-  $64 = $58 & $63;
-  $65 = ($64|0)!=(0);
-  if ($65) {
-   $78 = $9;
-   $79 = $6;
-   $80 = HEAP32[$79>>2]|0;
-   $81 = ($78|0)==($80|0);
-   if ($81) {
-    $82 = $8;
-    $9 = $82;
-   }
-  } else {
-   $66 = $5;
-   $67 = $6;
-   $68 = ((($67)) + 16|0);
-   $69 = HEAP32[$68>>2]|0;
-   $70 = $8;
-   $71 = (($69) + ($70<<3)|0);
-   ;HEAP32[$$byval_copy1>>2]=HEAP32[$71>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$71+4>>2]|0;
-   ;HEAP32[$$byval_copy2>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy2+4>>2]=HEAP32[$2+4>>2]|0;
-   $72 = (_mrb_hash_ht_hash_equal($66,$$byval_copy1,$$byval_copy2)|0);
-   $73 = ($72|0)!=(0);
-   if ($73) {
-    label = 7;
-    break;
-   }
-  }
-  $83 = $8;
-  $84 = $10;
-  $85 = (($84) + 1)|0;
-  $10 = $85;
-  $86 = (($83) + ($85))|0;
-  $87 = $6;
-  $88 = HEAP32[$87>>2]|0;
-  $89 = (($88) - 1)|0;
-  $90 = $86 & $89;
-  $8 = $90;
- }
- if ((label|0) == 7) {
-  $74 = $7;
-  $75 = ($74|0)!=(0|0);
-  if ($75) {
-   $76 = $7;
-   HEAP32[$76>>2] = 0;
-  }
-  $77 = $8;
-  $4 = $77;
-  $154 = $4;
-  STACKTOP = sp;return ($154|0);
- }
- $91 = $9;
- $92 = $6;
- $93 = HEAP32[$92>>2]|0;
- $94 = ($91|0)!=($93|0);
- $95 = $6;
- $96 = ((($95)) + 16|0);
- $97 = HEAP32[$96>>2]|0;
- if ($94) {
-  $98 = $9;
-  $99 = (($97) + ($98<<3)|0);
-  ;HEAP32[$99>>2]=HEAP32[$2>>2]|0;HEAP32[$99+4>>2]=HEAP32[$2+4>>2]|0;
-  $100 = $9;
-  $101 = (($100>>>0) % 4)&-1;
-  $102 = (55008 + ($101)|0);
-  $103 = HEAP8[$102>>0]|0;
-  $104 = $103&255;
-  $105 = $104 ^ -1;
-  $106 = $6;
-  $107 = ((($106)) + 12|0);
-  $108 = HEAP32[$107>>2]|0;
-  $109 = $9;
-  $110 = (($109>>>0) / 4)&-1;
-  $111 = (($108) + ($110)|0);
-  $112 = HEAP8[$111>>0]|0;
-  $113 = $112&255;
-  $114 = $113 & $105;
-  $115 = $114&255;
-  HEAP8[$111>>0] = $115;
-  $116 = $6;
-  $117 = ((($116)) + 4|0);
-  $118 = HEAP32[$117>>2]|0;
-  $119 = (($118) + 1)|0;
-  HEAP32[$117>>2] = $119;
-  $120 = $7;
-  $121 = ($120|0)!=(0|0);
-  if ($121) {
-   $122 = $7;
-   HEAP32[$122>>2] = 2;
-  }
-  $123 = $9;
-  $4 = $123;
-  $154 = $4;
-  STACKTOP = sp;return ($154|0);
- } else {
-  $124 = $8;
-  $125 = (($97) + ($124<<3)|0);
-  ;HEAP32[$125>>2]=HEAP32[$2>>2]|0;HEAP32[$125+4>>2]=HEAP32[$2+4>>2]|0;
-  $126 = $8;
-  $127 = (($126>>>0) % 4)&-1;
-  $128 = (55004 + ($127)|0);
-  $129 = HEAP8[$128>>0]|0;
-  $130 = $129&255;
-  $131 = $130 ^ -1;
-  $132 = $6;
-  $133 = ((($132)) + 12|0);
-  $134 = HEAP32[$133>>2]|0;
-  $135 = $8;
-  $136 = (($135>>>0) / 4)&-1;
-  $137 = (($134) + ($136)|0);
-  $138 = HEAP8[$137>>0]|0;
-  $139 = $138&255;
-  $140 = $139 & $131;
-  $141 = $140&255;
-  HEAP8[$137>>0] = $141;
-  $142 = $6;
-  $143 = ((($142)) + 4|0);
-  $144 = HEAP32[$143>>2]|0;
-  $145 = (($144) + 1)|0;
-  HEAP32[$143>>2] = $145;
-  $146 = $6;
-  $147 = ((($146)) + 8|0);
-  $148 = HEAP32[$147>>2]|0;
-  $149 = (($148) + 1)|0;
-  HEAP32[$147>>2] = $149;
-  $150 = $7;
-  $151 = ($150|0)!=(0|0);
-  if ($151) {
-   $152 = $7;
-   HEAP32[$152>>2] = 1;
-  }
-  $153 = $8;
-  $4 = $153;
-  $154 = $4;
-  STACKTOP = sp;return ($154|0);
- }
- return (0)|0;
-}
-function _kh_del_ht($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0;
- var $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $0;
- $4 = $1;
- $5 = $2;
- $6 = $5;
- $7 = (($6>>>0) % 4)&-1;
- $8 = (55008 + ($7)|0);
- $9 = HEAP8[$8>>0]|0;
- $10 = $9&255;
- $11 = $4;
- $12 = ((($11)) + 12|0);
- $13 = HEAP32[$12>>2]|0;
- $14 = $5;
- $15 = (($14>>>0) / 4)&-1;
- $16 = (($13) + ($15)|0);
- $17 = HEAP8[$16>>0]|0;
- $18 = $17&255;
- $19 = $18 | $10;
- $20 = $19&255;
- HEAP8[$16>>0] = $20;
- $21 = $4;
- $22 = ((($21)) + 4|0);
- $23 = HEAP32[$22>>2]|0;
- $24 = (($23) + -1)|0;
- HEAP32[$22>>2] = $24;
- STACKTOP = sp;return;
-}
-function _mrb_gc_mark_hash($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;
- var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0;
- var $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $6 = sp + 8|0;
- $7 = sp;
- $2 = $0;
- $3 = $1;
- $8 = $3;
- $9 = ((($8)) + 16|0);
- $10 = HEAP32[$9>>2]|0;
- $5 = $10;
- $11 = $5;
- $12 = ($11|0)!=(0|0);
- if (!($12)) {
-  STACKTOP = sp;return;
- }
- $4 = 0;
- while(1) {
-  $13 = $4;
-  $14 = $5;
-  $15 = HEAP32[$14>>2]|0;
-  $16 = ($13|0)!=($15|0);
-  if (!($16)) {
-   break;
-  }
-  $17 = $5;
-  $18 = ((($17)) + 12|0);
-  $19 = HEAP32[$18>>2]|0;
-  $20 = $4;
-  $21 = (($20>>>0) / 4)&-1;
-  $22 = (($19) + ($21)|0);
-  $23 = HEAP8[$22>>0]|0;
-  $24 = $23&255;
-  $25 = $4;
-  $26 = (($25>>>0) % 4)&-1;
-  $27 = (55012 + ($26)|0);
-  $28 = HEAP8[$27>>0]|0;
-  $29 = $28&255;
-  $30 = $24 & $29;
-  $31 = ($30|0)!=(0);
-  if (!($31)) {
-   $32 = $5;
-   $33 = ((($32)) + 16|0);
-   $34 = HEAP32[$33>>2]|0;
-   $35 = $4;
-   $36 = (($34) + ($35<<3)|0);
-   ;HEAP32[$6>>2]=HEAP32[$36>>2]|0;HEAP32[$6+4>>2]=HEAP32[$36+4>>2]|0;
-   $37 = $5;
-   $38 = ((($37)) + 20|0);
-   $39 = HEAP32[$38>>2]|0;
-   $40 = $4;
-   $41 = (($39) + (($40*12)|0)|0);
-   ;HEAP32[$7>>2]=HEAP32[$41>>2]|0;HEAP32[$7+4>>2]=HEAP32[$41+4>>2]|0;
-   $42 = ((($6)) + 4|0);
-   $43 = HEAP32[$42>>2]|0;
-   $44 = ($43>>>0)<(8);
-   if (!($44)) {
-    $45 = $2;
-    $46 = HEAP32[$6>>2]|0;
-    _mrb_gc_mark($45,$46);
-   }
-   $47 = ((($7)) + 4|0);
-   $48 = HEAP32[$47>>2]|0;
-   $49 = ($48>>>0)<(8);
-   if (!($49)) {
-    $50 = $2;
-    $51 = HEAP32[$7>>2]|0;
-    _mrb_gc_mark($50,$51);
-   }
-  }
-  $52 = $4;
-  $53 = (($52) + 1)|0;
-  $4 = $53;
- }
- STACKTOP = sp;return;
-}
-function _mrb_gc_mark_hash_size($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $0;
- $4 = $1;
- $5 = $4;
- $6 = ((($5)) + 16|0);
- $7 = HEAP32[$6>>2]|0;
- $8 = ($7|0)!=(0|0);
- if ($8) {
-  $9 = $4;
-  $10 = ((($9)) + 16|0);
-  $11 = HEAP32[$10>>2]|0;
-  $12 = ((($11)) + 4|0);
-  $13 = HEAP32[$12>>2]|0;
-  $14 = $13<<1;
-  $2 = $14;
-  $15 = $2;
-  STACKTOP = sp;return ($15|0);
- } else {
-  $2 = 0;
-  $15 = $2;
-  STACKTOP = sp;return ($15|0);
- }
- return (0)|0;
-}
-function _mrb_gc_free_hash($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $4 = $3;
- $5 = ((($4)) + 16|0);
- $6 = HEAP32[$5>>2]|0;
- $7 = ($6|0)!=(0|0);
- if (!($7)) {
-  STACKTOP = sp;return;
- }
- $8 = $2;
- $9 = $3;
- $10 = ((($9)) + 16|0);
- $11 = HEAP32[$10>>2]|0;
- _kh_destroy_ht($8,$11);
- STACKTOP = sp;return;
-}
-function _mrb_hash_new_capa($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0;
- var $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $1;
- $4 = $2;
- $6 = $3;
- $7 = $3;
- $8 = ((($7)) + 56|0);
- $9 = HEAP32[$8>>2]|0;
- $10 = (_mrb_obj_alloc($6,15,$9)|0);
- $5 = $10;
- $11 = $3;
- $12 = (_kh_init_ht($11)|0);
- $13 = $5;
- $14 = ((($13)) + 16|0);
- HEAP32[$14>>2] = $12;
- $15 = $4;
- $16 = ($15|0)>(0);
- if ($16) {
-  $17 = $3;
-  $18 = $5;
-  $19 = ((($18)) + 16|0);
-  $20 = HEAP32[$19>>2]|0;
-  $21 = $4;
-  _kh_resize_ht($17,$20,$21);
- }
- $22 = $5;
- $23 = ((($22)) + 12|0);
- HEAP32[$23>>2] = 0;
- $24 = $5;
- _mrb_obj_value_86($0,$24);
- STACKTOP = sp;return;
-}
-function _mrb_obj_value_86($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = sp;
- $2 = $1;
- $4 = $2;
- $5 = HEAP32[$4>>2]|0;
- $6 = $5 & 255;
- $7 = ((($3)) + 4|0);
- HEAP32[$7>>2] = $6;
- $8 = $2;
- HEAP32[$3>>2] = $8;
- ;HEAP32[$0>>2]=HEAP32[$3>>2]|0;HEAP32[$0+4>>2]=HEAP32[$3+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_hash_get($0,$1,$2,$3) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- var $$byval_copy = 0, $$byval_copy2 = 0, $$byval_copy3 = 0, $$byval_copy4 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0;
- var $26 = 0, $27 = 0, $28 = 0, $29 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, $vararg_ptr1 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 80|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(80|0);
- $$byval_copy4 = sp + 64|0;
- $$byval_copy3 = sp + 56|0;
- $$byval_copy2 = sp + 48|0;
- $$byval_copy = sp + 40|0;
- $vararg_buffer = sp;
- $7 = sp + 16|0;
- $4 = $1;
- $8 = HEAP32[$2>>2]|0;
- $9 = ((($8)) + 16|0);
- $10 = HEAP32[$9>>2]|0;
- $5 = $10;
- $11 = $5;
- $12 = ($11|0)!=(0|0);
- if ($12) {
-  $13 = $4;
-  $14 = $5;
-  ;HEAP32[$$byval_copy>>2]=HEAP32[$3>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$3+4>>2]|0;
-  $15 = (_kh_get_ht($13,$14,$$byval_copy)|0);
-  $6 = $15;
-  $16 = $6;
-  $17 = $5;
-  $18 = HEAP32[$17>>2]|0;
-  $19 = ($16|0)!=($18|0);
-  if ($19) {
-   $20 = $5;
-   $21 = ((($20)) + 20|0);
-   $22 = HEAP32[$21>>2]|0;
-   $23 = $6;
-   $24 = (($22) + (($23*12)|0)|0);
-   ;HEAP32[$0>>2]=HEAP32[$24>>2]|0;HEAP32[$0+4>>2]=HEAP32[$24+4>>2]|0;
-   STACKTOP = sp;return;
-  }
- }
- $25 = HEAP32[$2>>2]|0;
- $26 = HEAP32[$25>>2]|0;
- $27 = $26 >>> 11;
- $28 = $27 & 256;
- $29 = ($28|0)!=(0);
- $30 = $4;
- $31 = $4;
- if ($29) {
-  $32 = $4;
-  $33 = (_mrb_intern_static($32,55016,6)|0);
-  ;HEAP32[$$byval_copy2>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy2+4>>2]=HEAP32[$2+4>>2]|0;
-  _mrb_iv_get($7,$31,$$byval_copy2,$33);
-  ;HEAP8[$vararg_buffer>>0]=HEAP8[$2>>0]|0;HEAP8[$vararg_buffer+1>>0]=HEAP8[$2+1>>0]|0;HEAP8[$vararg_buffer+2>>0]=HEAP8[$2+2>>0]|0;HEAP8[$vararg_buffer+3>>0]=HEAP8[$2+3>>0]|0;HEAP8[$vararg_buffer+4>>0]=HEAP8[$2+4>>0]|0;HEAP8[$vararg_buffer+5>>0]=HEAP8[$2+5>>0]|0;HEAP8[$vararg_buffer+6>>0]=HEAP8[$2+6>>0]|0;HEAP8[$vararg_buffer+7>>0]=HEAP8[$2+7>>0]|0;
-  $vararg_ptr1 = ((($vararg_buffer)) + 8|0);
-  ;HEAP8[$vararg_ptr1>>0]=HEAP8[$3>>0]|0;HEAP8[$vararg_ptr1+1>>0]=HEAP8[$3+1>>0]|0;HEAP8[$vararg_ptr1+2>>0]=HEAP8[$3+2>>0]|0;HEAP8[$vararg_ptr1+3>>0]=HEAP8[$3+3>>0]|0;HEAP8[$vararg_ptr1+4>>0]=HEAP8[$3+4>>0]|0;HEAP8[$vararg_ptr1+5>>0]=HEAP8[$3+5>>0]|0;HEAP8[$vararg_ptr1+6>>0]=HEAP8[$3+6>>0]|0;HEAP8[$vararg_ptr1+7>>0]=HEAP8[$3+7>>0]|0;
-  ;HEAP32[$$byval_copy3>>2]=HEAP32[$7>>2]|0;HEAP32[$$byval_copy3+4>>2]=HEAP32[$7+4>>2]|0;
-  _mrb_funcall($0,$30,$$byval_copy3,69604,2,$vararg_buffer);
-  STACKTOP = sp;return;
- } else {
-  $34 = (_mrb_intern_static($31,55016,6)|0);
-  ;HEAP32[$$byval_copy4>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy4+4>>2]=HEAP32[$2+4>>2]|0;
-  _mrb_iv_get($0,$30,$$byval_copy4,$34);
-  STACKTOP = sp;return;
- }
-}
-function _mrb_hash_set($0,$1,$2,$3) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $$byval_copy2 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0;
- var $27 = 0, $28 = 0, $29 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0;
- var $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $7 = 0, $8 = 0;
- var $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);
- $$byval_copy2 = sp + 48|0;
- $$byval_copy1 = sp + 40|0;
- $$byval_copy = sp + 32|0;
- $7 = sp + 12|0;
- $9 = sp;
- $4 = $0;
- $10 = $4;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$1>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$1+4>>2]|0;
- _mrb_hash_modify($10,$$byval_copy);
- $11 = HEAP32[$1>>2]|0;
- $12 = ((($11)) + 16|0);
- $13 = HEAP32[$12>>2]|0;
- $5 = $13;
- $14 = $5;
- $15 = ($14|0)!=(0|0);
- if (!($15)) {
-  $16 = $4;
-  $17 = (_kh_init_ht($16)|0);
-  $18 = HEAP32[$1>>2]|0;
-  $19 = ((($18)) + 16|0);
-  HEAP32[$19>>2] = $17;
-  $5 = $17;
- }
- $20 = $4;
- $21 = $5;
- ;HEAP32[$$byval_copy1>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$2+4>>2]|0;
- $22 = (_kh_put_ht($20,$21,$$byval_copy1,$7)|0);
- $6 = $22;
- $23 = $5;
- $24 = ((($23)) + 20|0);
- $25 = HEAP32[$24>>2]|0;
- $26 = $6;
- $27 = (($25) + (($26*12)|0)|0);
- ;HEAP32[$27>>2]=HEAP32[$3>>2]|0;HEAP32[$27+4>>2]=HEAP32[$3+4>>2]|0;
- $28 = HEAP32[$7>>2]|0;
- $29 = ($28|0)!=(0);
- if ($29) {
-  $30 = $4;
-  $31 = (_mrb_gc_arena_save($30)|0);
-  $8 = $31;
-  $32 = $5;
-  $33 = ((($32)) + 16|0);
-  $34 = HEAP32[$33>>2]|0;
-  $35 = $6;
-  $36 = (($34) + ($35<<3)|0);
-  $37 = $4;
-  ;HEAP32[$$byval_copy2>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy2+4>>2]=HEAP32[$2+4>>2]|0;
-  _mrb_hash_ht_key($9,$37,$$byval_copy2);
-  ;HEAP32[$36>>2]=HEAP32[$9>>2]|0;HEAP32[$36+4>>2]=HEAP32[$9+4>>2]|0;
-  ;HEAP32[$2>>2]=HEAP32[$36>>2]|0;HEAP32[$2+4>>2]=HEAP32[$36+4>>2]|0;
-  $38 = $4;
-  $39 = $8;
-  _mrb_gc_arena_restore($38,$39);
-  $40 = $5;
-  $41 = ((($40)) + 4|0);
-  $42 = HEAP32[$41>>2]|0;
-  $43 = (($42) - 1)|0;
-  $44 = $5;
-  $45 = ((($44)) + 20|0);
-  $46 = HEAP32[$45>>2]|0;
-  $47 = $6;
-  $48 = (($46) + (($47*12)|0)|0);
-  $49 = ((($48)) + 8|0);
-  HEAP32[$49>>2] = $43;
- }
- $50 = ((($2)) + 4|0);
- $51 = HEAP32[$50>>2]|0;
- $52 = ($51>>>0)<(8);
- if (!($52)) {
-  $53 = $4;
-  $54 = HEAP32[$1>>2]|0;
-  $55 = HEAP32[$2>>2]|0;
-  _mrb_field_write_barrier($53,$54,$55);
- }
- $56 = ((($3)) + 4|0);
- $57 = HEAP32[$56>>2]|0;
- $58 = ($57>>>0)<(8);
- if ($58) {
-  STACKTOP = sp;return;
- }
- $59 = $4;
- $60 = HEAP32[$1>>2]|0;
- $61 = HEAP32[$3>>2]|0;
- _mrb_field_write_barrier($59,$60,$61);
- STACKTOP = sp;return;
-}
-function _mrb_hash_modify($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $$byval_copy = 0, $2 = 0, $3 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $$byval_copy = sp + 8|0;
- $2 = $0;
- $3 = $2;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$1>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$1+4>>2]|0;
- (_mrb_hash_tbl($3,$$byval_copy)|0);
- STACKTOP = sp;return;
-}
-function _mrb_hash_ht_key($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0;
- var $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $$byval_copy = sp + 16|0;
- $4 = sp;
- $3 = $1;
- $5 = ((($2)) + 4|0);
- $6 = HEAP32[$5>>2]|0;
- $7 = ($6|0)==(16);
- if ($7) {
-  $8 = HEAP32[$2>>2]|0;
-  $9 = HEAP32[$8>>2]|0;
-  $10 = $9 >>> 11;
-  $11 = $10 & 4;
-  $12 = ($11|0)!=(0);
-  if (!($12)) {
-   $13 = $3;
-   ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
-   _mrb_str_dup($4,$13,$$byval_copy);
-   ;HEAP32[$2>>2]=HEAP32[$4>>2]|0;HEAP32[$2+4>>2]=HEAP32[$4+4>>2]|0;
-   $14 = HEAP32[$2>>2]|0;
-   $15 = HEAP32[$14>>2]|0;
-   $16 = $15 >>> 11;
-   $17 = $16 | 4;
-   $18 = HEAP32[$14>>2]|0;
-   $19 = $17 & 2097151;
-   $20 = $19 << 11;
-   $21 = $18 & 2047;
-   $22 = $21 | $20;
-   HEAP32[$14>>2] = $22;
-  }
- }
- ;HEAP32[$0>>2]=HEAP32[$2>>2]|0;HEAP32[$0+4>>2]=HEAP32[$2+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_hash_tbl($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $0;
- $5 = HEAP32[$1>>2]|0;
- $6 = ((($5)) + 16|0);
- $7 = HEAP32[$6>>2]|0;
- $4 = $7;
- $8 = $4;
- $9 = ($8|0)!=(0|0);
- if ($9) {
-  $14 = $4;
-  $2 = $14;
-  $15 = $2;
-  STACKTOP = sp;return ($15|0);
- } else {
-  $10 = $3;
-  $11 = (_kh_init_ht($10)|0);
-  $12 = HEAP32[$1>>2]|0;
-  $13 = ((($12)) + 16|0);
-  HEAP32[$13>>2] = $11;
-  $2 = $11;
-  $15 = $2;
-  STACKTOP = sp;return ($15|0);
- }
- return (0)|0;
-}
-function _mrb_hash_delete_key($0,$1,$2,$3) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- var $$byval_copy = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;
- var $29 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0;
- var $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0;
- var $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);
- $$byval_copy = sp + 32|0;
- $7 = sp + 8|0;
- $4 = $1;
- $9 = HEAP32[$2>>2]|0;
- $10 = ((($9)) + 16|0);
- $11 = HEAP32[$10>>2]|0;
- $5 = $11;
- $12 = $5;
- $13 = ($12|0)!=(0|0);
- if ($13) {
-  $14 = $4;
-  $15 = $5;
-  ;HEAP32[$$byval_copy>>2]=HEAP32[$3>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$3+4>>2]|0;
-  $16 = (_kh_get_ht($14,$15,$$byval_copy)|0);
-  $6 = $16;
-  $17 = $6;
-  $18 = $5;
-  $19 = HEAP32[$18>>2]|0;
-  $20 = ($17|0)!=($19|0);
-  if ($20) {
-   $21 = $5;
-   $22 = ((($21)) + 20|0);
-   $23 = HEAP32[$22>>2]|0;
-   $24 = $6;
-   $25 = (($23) + (($24*12)|0)|0);
-   ;HEAP32[$7>>2]=HEAP32[$25>>2]|0;HEAP32[$7+4>>2]=HEAP32[$25+4>>2]|0;
-   $26 = $5;
-   $27 = ((($26)) + 20|0);
-   $28 = HEAP32[$27>>2]|0;
-   $29 = $6;
-   $30 = (($28) + (($29*12)|0)|0);
-   $31 = ((($30)) + 8|0);
-   $32 = HEAP32[$31>>2]|0;
-   $8 = $32;
-   $33 = $4;
-   $34 = $5;
-   $35 = $6;
-   _kh_del_ht($33,$34,$35);
-   $6 = 0;
-   while(1) {
-    $36 = $6;
-    $37 = $5;
-    $38 = HEAP32[$37>>2]|0;
-    $39 = ($36|0)!=($38|0);
-    if (!($39)) {
-     break;
-    }
-    $40 = $5;
-    $41 = ((($40)) + 12|0);
-    $42 = HEAP32[$41>>2]|0;
-    $43 = $6;
-    $44 = (($43>>>0) / 4)&-1;
-    $45 = (($42) + ($44)|0);
-    $46 = HEAP8[$45>>0]|0;
-    $47 = $46&255;
-    $48 = $6;
-    $49 = (($48>>>0) % 4)&-1;
-    $50 = (55012 + ($49)|0);
-    $51 = HEAP8[$50>>0]|0;
-    $52 = $51&255;
-    $53 = $47 & $52;
-    $54 = ($53|0)!=(0);
-    if (!($54)) {
-     $55 = $5;
-     $56 = ((($55)) + 20|0);
-     $57 = HEAP32[$56>>2]|0;
-     $58 = $6;
-     $59 = (($57) + (($58*12)|0)|0);
-     $60 = ((($59)) + 8|0);
-     $61 = HEAP32[$60>>2]|0;
-     $62 = $8;
-     $63 = ($61|0)>($62|0);
-     if ($63) {
-      $64 = $5;
-      $65 = ((($64)) + 20|0);
-      $66 = HEAP32[$65>>2]|0;
-      $67 = $6;
-      $68 = (($66) + (($67*12)|0)|0);
-      $69 = ((($68)) + 8|0);
-      $70 = HEAP32[$69>>2]|0;
-      $71 = (($70) + -1)|0;
-      HEAP32[$69>>2] = $71;
-     }
-    }
-    $72 = $6;
-    $73 = (($72) + 1)|0;
-    $6 = $73;
-   }
-   ;HEAP32[$0>>2]=HEAP32[$7>>2]|0;HEAP32[$0+4>>2]=HEAP32[$7+4>>2]|0;
-   STACKTOP = sp;return;
-  }
- }
- _mrb_nil_value_91($0);
- STACKTOP = sp;return;
-}
-function _mrb_nil_value_91($0) {
- $0 = $0|0;
- var $1 = 0, $2 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $1 = sp;
- $2 = ((($1)) + 4|0);
- HEAP32[$2>>2] = 0;
- HEAP32[$1>>2] = 0;
- ;HEAP32[$0>>2]=HEAP32[$1>>2]|0;HEAP32[$0+4>>2]=HEAP32[$1+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_hash_clear($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $1;
- $5 = HEAP32[$2>>2]|0;
- $6 = ((($5)) + 16|0);
- $7 = HEAP32[$6>>2]|0;
- $4 = $7;
- $8 = $4;
- $9 = ($8|0)!=(0|0);
- if ($9) {
-  $10 = $3;
-  $11 = $4;
-  _kh_clear_ht($10,$11);
- }
- ;HEAP32[$0>>2]=HEAP32[$2>>2]|0;HEAP32[$0+4>>2]=HEAP32[$2+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_hash_empty_p($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $1;
- $5 = HEAP32[$2>>2]|0;
- $6 = ((($5)) + 16|0);
- $7 = HEAP32[$6>>2]|0;
- $4 = $7;
- $8 = $4;
- $9 = ($8|0)!=(0|0);
- if ($9) {
-  $10 = $4;
-  $11 = ((($10)) + 4|0);
-  $12 = HEAP32[$11>>2]|0;
-  $13 = ($12|0)==(0);
-  $14 = $13&1;
-  $15 = $14&255;
-  _mrb_bool_value_92($0,$15);
-  STACKTOP = sp;return;
- } else {
-  _mrb_true_value($0);
-  STACKTOP = sp;return;
- }
-}
-function _mrb_bool_value_92($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = sp;
- $2 = $1;
- $4 = $2;
- $5 = $4&255;
- $6 = ($5|0)!=(0);
- $7 = $6 ? 2 : 0;
- $8 = ((($3)) + 4|0);
- HEAP32[$8>>2] = $7;
- HEAP32[$3>>2] = 1;
- ;HEAP32[$0>>2]=HEAP32[$3>>2]|0;HEAP32[$0+4>>2]=HEAP32[$3+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_true_value($0) {
- $0 = $0|0;
- var $1 = 0, $2 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $1 = sp;
- $2 = ((($1)) + 4|0);
- HEAP32[$2>>2] = 2;
- HEAP32[$1>>2] = 1;
- ;HEAP32[$0>>2]=HEAP32[$1>>2]|0;HEAP32[$0+4>>2]=HEAP32[$1+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_hash_keys($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;
- var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0;
- var $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0;
- var $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 96|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(96|0);
- $$byval_copy1 = sp + 80|0;
- $$byval_copy = sp + 72|0;
- $6 = sp + 48|0;
- $8 = sp + 32|0;
- $9 = sp + 24|0;
- $10 = sp + 16|0;
- $11 = sp;
- $3 = $1;
- $12 = HEAP32[$2>>2]|0;
- $13 = ((($12)) + 16|0);
- $14 = HEAP32[$13>>2]|0;
- $4 = $14;
- $15 = $4;
- $16 = ($15|0)!=(0|0);
- if ($16) {
-  $17 = $4;
-  $18 = ((($17)) + 4|0);
-  $19 = HEAP32[$18>>2]|0;
-  $20 = ($19|0)==(0);
-  if (!($20)) {
-   $22 = $3;
-   $23 = $4;
-   $24 = ((($23)) + 4|0);
-   $25 = HEAP32[$24>>2]|0;
-   _mrb_ary_new_capa($8,$22,$25);
-   ;HEAP32[$6>>2]=HEAP32[$8>>2]|0;HEAP32[$6+4>>2]=HEAP32[$8+4>>2]|0;
-   $26 = $3;
-   $27 = $4;
-   $28 = ((($27)) + 4|0);
-   $29 = HEAP32[$28>>2]|0;
-   $30 = (($29) - 1)|0;
-   _mrb_nil_value_91($9);
-   ;HEAP32[$$byval_copy>>2]=HEAP32[$6>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$6+4>>2]|0;
-   ;HEAP32[$$byval_copy1>>2]=HEAP32[$9>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$9+4>>2]|0;
-   _mrb_ary_set($26,$$byval_copy,$30,$$byval_copy1);
-   $31 = HEAP32[$6>>2]|0;
-   $32 = ((($31)) + 20|0);
-   $33 = HEAP32[$32>>2]|0;
-   $7 = $33;
-   $5 = 0;
-   while(1) {
-    $34 = $5;
-    $35 = $4;
-    $36 = HEAP32[$35>>2]|0;
-    $37 = ($34|0)!=($36|0);
-    if (!($37)) {
-     break;
-    }
-    $38 = $4;
-    $39 = ((($38)) + 12|0);
-    $40 = HEAP32[$39>>2]|0;
-    $41 = $5;
-    $42 = (($41>>>0) / 4)&-1;
-    $43 = (($40) + ($42)|0);
-    $44 = HEAP8[$43>>0]|0;
-    $45 = $44&255;
-    $46 = $5;
-    $47 = (($46>>>0) % 4)&-1;
-    $48 = (55012 + ($47)|0);
-    $49 = HEAP8[$48>>0]|0;
-    $50 = $49&255;
-    $51 = $45 & $50;
-    $52 = ($51|0)!=(0);
-    if (!($52)) {
-     $53 = $4;
-     $54 = ((($53)) + 16|0);
-     $55 = HEAP32[$54>>2]|0;
-     $56 = $5;
-     $57 = (($55) + ($56<<3)|0);
-     ;HEAP32[$10>>2]=HEAP32[$57>>2]|0;HEAP32[$10+4>>2]=HEAP32[$57+4>>2]|0;
-     $58 = $4;
-     $59 = ((($58)) + 20|0);
-     $60 = HEAP32[$59>>2]|0;
-     $61 = $5;
-     $62 = (($60) + (($61*12)|0)|0);
-     ;HEAP32[$11>>2]=HEAP32[$62>>2]|0;HEAP32[$11+4>>2]=HEAP32[$62+4>>2]|0;HEAP32[$11+8>>2]=HEAP32[$62+8>>2]|0;
-     $63 = $7;
-     $64 = ((($11)) + 8|0);
-     $65 = HEAP32[$64>>2]|0;
-     $66 = (($63) + ($65<<3)|0);
-     ;HEAP32[$66>>2]=HEAP32[$10>>2]|0;HEAP32[$66+4>>2]=HEAP32[$10+4>>2]|0;
-    }
-    $67 = $5;
-    $68 = (($67) + 1)|0;
-    $5 = $68;
-   }
-   ;HEAP32[$0>>2]=HEAP32[$6>>2]|0;HEAP32[$0+4>>2]=HEAP32[$6+4>>2]|0;
-   STACKTOP = sp;return;
-  }
- }
- $21 = $3;
- _mrb_ary_new($0,$21);
- STACKTOP = sp;return;
-}
-function _mrb_init_hash($0) {
- $0 = $0|0;
- var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;
- var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0;
- var $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0;
- var $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $1 = $0;
- $3 = $1;
- $4 = $1;
- $5 = ((($4)) + 32|0);
- $6 = HEAP32[$5>>2]|0;
- $7 = (_mrb_define_class($3,65286,$6)|0);
- $2 = $7;
- $8 = $1;
- $9 = ((($8)) + 56|0);
- HEAP32[$9>>2] = $7;
- $10 = $2;
- $11 = HEAP32[$10>>2]|0;
- $12 = $11 >>> 11;
- $13 = $12 & -256;
- $14 = $13 | 15;
- $15 = $2;
- $16 = HEAP32[$15>>2]|0;
- $17 = $14 & 2097151;
- $18 = $17 << 11;
- $19 = $16 & 2047;
- $20 = $19 | $18;
- HEAP32[$15>>2] = $20;
- $21 = $1;
- $22 = $2;
- _mrb_define_method($21,$22,69083,17,262144);
- $23 = $1;
- $24 = $2;
- _mrb_define_method($23,$24,64619,18,524288);
- $25 = $1;
- $26 = $2;
- _mrb_define_method($25,$26,64623,19,0);
- $27 = $1;
- $28 = $2;
- _mrb_define_method($27,$28,55023,20,4096);
- $29 = $1;
- $30 = $2;
- _mrb_define_method($29,$30,55031,21,262144);
- $31 = $1;
- $32 = $2;
- _mrb_define_method($31,$32,55040,22,0);
- $33 = $1;
- $34 = $2;
- _mrb_define_method($33,$34,55053,23,262144);
- $35 = $1;
- $36 = $2;
- _mrb_define_method($35,$36,55067,24,262144);
- $37 = $1;
- $38 = $2;
- _mrb_define_method($37,$38,64646,25,0);
- $39 = $1;
- $40 = $2;
- _mrb_define_method($39,$40,55076,26,262144);
- $41 = $1;
- $42 = $2;
- _mrb_define_method($41,$42,55085,27,262144);
- $43 = $1;
- $44 = $2;
- _mrb_define_method($43,$44,69243,26,262144);
- $45 = $1;
- $46 = $2;
- _mrb_define_method($45,$46,69252,28,8192);
- $47 = $1;
- $48 = $2;
- _mrb_define_method($47,$48,55096,26,262144);
- $49 = $1;
- $50 = $2;
- _mrb_define_method($49,$50,55101,29,0);
- $51 = $1;
- $52 = $2;
- _mrb_define_method($51,$52,64664,30,0);
- $53 = $1;
- $54 = $2;
- _mrb_define_method($53,$54,69268,26,262144);
- $55 = $1;
- $56 = $2;
- _mrb_define_method($55,$56,64712,31,0);
- $57 = $1;
- $58 = $2;
- _mrb_define_method($57,$58,68395,32,0);
- $59 = $1;
- $60 = $2;
- _mrb_define_method($59,$60,64718,30,0);
- $61 = $1;
- $62 = $2;
- _mrb_define_method($61,$62,55106,18,524288);
- $63 = $1;
- $64 = $2;
- _mrb_define_method($63,$64,55112,27,262144);
- $65 = $1;
- $66 = $2;
- _mrb_define_method($65,$66,55119,33,0);
- $67 = $1;
- $68 = $2;
- _mrb_define_method($67,$68,65291,34,0);
- STACKTOP = sp;return;
-}
-function _mrb_hash_aget($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);
- $$byval_copy1 = sp + 32|0;
- $$byval_copy = sp + 24|0;
- $vararg_buffer = sp;
- $4 = sp + 8|0;
- $3 = $1;
- $5 = $3;
- HEAP32[$vararg_buffer>>2] = $4;
- (_mrb_get_args($5,69199,$vararg_buffer)|0);
- $6 = $3;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
- ;HEAP32[$$byval_copy1>>2]=HEAP32[$4>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$4+4>>2]|0;
- _mrb_hash_get($0,$6,$$byval_copy,$$byval_copy1);
- STACKTOP = sp;return;
-}
-function _mrb_hash_aset($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $$byval_copy2 = 0, $$byval_copy3 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $vararg_buffer = 0, $vararg_ptr1 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);
- $$byval_copy3 = sp + 48|0;
- $$byval_copy2 = sp + 40|0;
- $$byval_copy = sp + 32|0;
- $vararg_buffer = sp;
- $4 = sp + 16|0;
- $5 = sp + 8|0;
- $3 = $1;
- $6 = $3;
- HEAP32[$vararg_buffer>>2] = $4;
- $vararg_ptr1 = ((($vararg_buffer)) + 4|0);
- HEAP32[$vararg_ptr1>>2] = $5;
- (_mrb_get_args($6,55135,$vararg_buffer)|0);
- $7 = $3;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
- ;HEAP32[$$byval_copy2>>2]=HEAP32[$4>>2]|0;HEAP32[$$byval_copy2+4>>2]=HEAP32[$4+4>>2]|0;
- ;HEAP32[$$byval_copy3>>2]=HEAP32[$5>>2]|0;HEAP32[$$byval_copy3+4>>2]=HEAP32[$5+4>>2]|0;
- _mrb_hash_set($7,$$byval_copy,$$byval_copy2,$$byval_copy3);
- ;HEAP32[$0>>2]=HEAP32[$5>>2]|0;HEAP32[$0+4>>2]=HEAP32[$5+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_hash_default($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $$byval_copy6 = 0, $$byval_copy7 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0;
- var $8 = 0, $9 = 0, $vararg_buffer = 0, $vararg_buffer2 = 0, $vararg_ptr1 = 0, $vararg_ptr5 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 80|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(80|0);
- $$byval_copy7 = sp + 64|0;
- $$byval_copy6 = sp + 56|0;
- $$byval_copy = sp + 48|0;
- $vararg_buffer2 = sp + 8|0;
- $vararg_buffer = sp;
- $4 = sp + 32|0;
- $5 = sp + 72|0;
- $6 = sp + 24|0;
- $3 = $1;
- $7 = $3;
- HEAP32[$vararg_buffer>>2] = $4;
- $vararg_ptr1 = ((($vararg_buffer)) + 4|0);
- HEAP32[$vararg_ptr1>>2] = $5;
- (_mrb_get_args($7,55131,$vararg_buffer)|0);
- $8 = HEAP32[$2>>2]|0;
- $9 = HEAP32[$8>>2]|0;
- $10 = $9 >>> 11;
- $11 = $10 & 256;
- $12 = ($11|0)!=(0);
- if (!($12)) {
-  $19 = $3;
-  $20 = $3;
-  $21 = (_mrb_intern_static($20,55016,6)|0);
-  ;HEAP32[$$byval_copy7>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy7+4>>2]=HEAP32[$2+4>>2]|0;
-  _mrb_iv_get($0,$19,$$byval_copy7,$21);
-  STACKTOP = sp;return;
- }
- $13 = HEAP8[$5>>0]|0;
- $14 = ($13<<24>>24)!=(0);
- if ($14) {
-  $15 = $3;
-  $16 = $3;
-  $17 = $3;
-  $18 = (_mrb_intern_static($17,55016,6)|0);
-  ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
-  _mrb_iv_get($6,$16,$$byval_copy,$18);
-  ;HEAP8[$vararg_buffer2>>0]=HEAP8[$2>>0]|0;HEAP8[$vararg_buffer2+1>>0]=HEAP8[$2+1>>0]|0;HEAP8[$vararg_buffer2+2>>0]=HEAP8[$2+2>>0]|0;HEAP8[$vararg_buffer2+3>>0]=HEAP8[$2+3>>0]|0;HEAP8[$vararg_buffer2+4>>0]=HEAP8[$2+4>>0]|0;HEAP8[$vararg_buffer2+5>>0]=HEAP8[$2+5>>0]|0;HEAP8[$vararg_buffer2+6>>0]=HEAP8[$2+6>>0]|0;HEAP8[$vararg_buffer2+7>>0]=HEAP8[$2+7>>0]|0;
-  $vararg_ptr5 = ((($vararg_buffer2)) + 8|0);
-  ;HEAP8[$vararg_ptr5>>0]=HEAP8[$4>>0]|0;HEAP8[$vararg_ptr5+1>>0]=HEAP8[$4+1>>0]|0;HEAP8[$vararg_ptr5+2>>0]=HEAP8[$4+2>>0]|0;HEAP8[$vararg_ptr5+3>>0]=HEAP8[$4+3>>0]|0;HEAP8[$vararg_ptr5+4>>0]=HEAP8[$4+4>>0]|0;HEAP8[$vararg_ptr5+5>>0]=HEAP8[$4+5>>0]|0;HEAP8[$vararg_ptr5+6>>0]=HEAP8[$4+6>>0]|0;HEAP8[$vararg_ptr5+7>>0]=HEAP8[$4+7>>0]|0;
-  ;HEAP32[$$byval_copy6>>2]=HEAP32[$6>>2]|0;HEAP32[$$byval_copy6+4>>2]=HEAP32[$6+4>>2]|0;
-  _mrb_funcall($0,$15,$$byval_copy6,69604,2,$vararg_buffer2);
-  STACKTOP = sp;return;
- } else {
-  _mrb_nil_value_91($0);
-  STACKTOP = sp;return;
- }
-}
-function _mrb_hash_set_default($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $$byval_copy2 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0;
- var label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);
- $$byval_copy2 = sp + 40|0;
- $$byval_copy1 = sp + 32|0;
- $$byval_copy = sp + 24|0;
- $vararg_buffer = sp;
- $4 = sp + 8|0;
- $3 = $1;
- $5 = $3;
- HEAP32[$vararg_buffer>>2] = $4;
- (_mrb_get_args($5,69199,$vararg_buffer)|0);
- $6 = $3;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
- _mrb_hash_modify($6,$$byval_copy);
- $7 = $3;
- $8 = $3;
- $9 = (_mrb_intern_static($8,55016,6)|0);
- ;HEAP32[$$byval_copy1>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$2+4>>2]|0;
- ;HEAP32[$$byval_copy2>>2]=HEAP32[$4>>2]|0;HEAP32[$$byval_copy2+4>>2]=HEAP32[$4+4>>2]|0;
- _mrb_iv_set($7,$$byval_copy1,$9,$$byval_copy2);
- $10 = HEAP32[$2>>2]|0;
- $11 = HEAP32[$10>>2]|0;
- $12 = $11 >>> 11;
- $13 = $12 & -257;
- $14 = HEAP32[$10>>2]|0;
- $15 = $13 & 2097151;
- $16 = $15 << 11;
- $17 = $14 & 2047;
- $18 = $17 | $16;
- HEAP32[$10>>2] = $18;
- ;HEAP32[$0>>2]=HEAP32[$4>>2]|0;HEAP32[$0+4>>2]=HEAP32[$4+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_hash_default_proc($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $10 = 0, $11 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $$byval_copy = sp + 8|0;
- $3 = $1;
- $4 = HEAP32[$2>>2]|0;
- $5 = HEAP32[$4>>2]|0;
- $6 = $5 >>> 11;
- $7 = $6 & 256;
- $8 = ($7|0)!=(0);
- if ($8) {
-  $9 = $3;
-  $10 = $3;
-  $11 = (_mrb_intern_static($10,55016,6)|0);
-  ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
-  _mrb_iv_get($0,$9,$$byval_copy,$11);
-  STACKTOP = sp;return;
- } else {
-  _mrb_nil_value_91($0);
-  STACKTOP = sp;return;
- }
-}
-function _mrb_hash_set_default_proc($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $$byval_copy2 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0;
- var label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);
- $$byval_copy2 = sp + 40|0;
- $$byval_copy1 = sp + 32|0;
- $$byval_copy = sp + 24|0;
- $vararg_buffer = sp;
- $4 = sp + 8|0;
- $3 = $1;
- $5 = $3;
- HEAP32[$vararg_buffer>>2] = $4;
- (_mrb_get_args($5,69199,$vararg_buffer)|0);
- $6 = $3;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
- _mrb_hash_modify($6,$$byval_copy);
- $7 = $3;
- $8 = $3;
- $9 = (_mrb_intern_static($8,55016,6)|0);
- ;HEAP32[$$byval_copy1>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$2+4>>2]|0;
- ;HEAP32[$$byval_copy2>>2]=HEAP32[$4>>2]|0;HEAP32[$$byval_copy2+4>>2]=HEAP32[$4+4>>2]|0;
- _mrb_iv_set($7,$$byval_copy1,$9,$$byval_copy2);
- $10 = HEAP32[$2>>2]|0;
- $11 = HEAP32[$10>>2]|0;
- $12 = $11 >>> 11;
- $13 = $12 | 256;
- $14 = HEAP32[$10>>2]|0;
- $15 = $13 & 2097151;
- $16 = $15 << 11;
- $17 = $14 & 2047;
- $18 = $17 | $16;
- HEAP32[$10>>2] = $18;
- ;HEAP32[$0>>2]=HEAP32[$4>>2]|0;HEAP32[$0+4>>2]=HEAP32[$4+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_hash_delete($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);
- $$byval_copy1 = sp + 32|0;
- $$byval_copy = sp + 24|0;
- $vararg_buffer = sp;
- $4 = sp + 8|0;
- $3 = $1;
- $5 = $3;
- HEAP32[$vararg_buffer>>2] = $4;
- (_mrb_get_args($5,69199,$vararg_buffer)|0);
- $6 = $3;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
- ;HEAP32[$$byval_copy1>>2]=HEAP32[$4>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$4+4>>2]|0;
- _mrb_hash_delete_key($0,$6,$$byval_copy,$$byval_copy1);
- STACKTOP = sp;return;
-}
-function _mrb_hash_has_key($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0;
- var $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);
- $$byval_copy = sp + 32|0;
- $vararg_buffer = sp;
- $4 = sp + 16|0;
- $3 = $1;
- $7 = $3;
- HEAP32[$vararg_buffer>>2] = $4;
- (_mrb_get_args($7,69199,$vararg_buffer)|0);
- $8 = HEAP32[$2>>2]|0;
- $9 = ((($8)) + 16|0);
- $10 = HEAP32[$9>>2]|0;
- $5 = $10;
- $11 = $5;
- $12 = ($11|0)!=(0|0);
- if ($12) {
-  $13 = $3;
-  $14 = $5;
-  ;HEAP32[$$byval_copy>>2]=HEAP32[$4>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$4+4>>2]|0;
-  $15 = (_kh_get_ht($13,$14,$$byval_copy)|0);
-  $6 = $15;
-  $16 = $6;
-  $17 = $5;
-  $18 = HEAP32[$17>>2]|0;
-  $19 = ($16|0)!=($18|0);
-  $20 = $19&1;
-  $21 = $20&255;
-  _mrb_bool_value_92($0,$21);
-  STACKTOP = sp;return;
- } else {
-  _mrb_false_value($0);
-  STACKTOP = sp;return;
- }
-}
-function _mrb_hash_has_value($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;
- var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0;
- var $9 = 0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);
- $$byval_copy1 = sp + 40|0;
- $$byval_copy = sp + 32|0;
- $vararg_buffer = sp;
- $4 = sp + 16|0;
- $3 = $1;
- $7 = $3;
- HEAP32[$vararg_buffer>>2] = $4;
- (_mrb_get_args($7,69199,$vararg_buffer)|0);
- $8 = HEAP32[$2>>2]|0;
- $9 = ((($8)) + 16|0);
- $10 = HEAP32[$9>>2]|0;
- $5 = $10;
- $11 = $5;
- $12 = ($11|0)!=(0|0);
- L1: do {
-  if ($12) {
-   $6 = 0;
-   while(1) {
-    $13 = $6;
-    $14 = $5;
-    $15 = HEAP32[$14>>2]|0;
-    $16 = ($13|0)!=($15|0);
-    if (!($16)) {
-     break L1;
-    }
-    $17 = $5;
-    $18 = ((($17)) + 12|0);
-    $19 = HEAP32[$18>>2]|0;
-    $20 = $6;
-    $21 = (($20>>>0) / 4)&-1;
-    $22 = (($19) + ($21)|0);
-    $23 = HEAP8[$22>>0]|0;
-    $24 = $23&255;
-    $25 = $6;
-    $26 = (($25>>>0) % 4)&-1;
-    $27 = (55012 + ($26)|0);
-    $28 = HEAP8[$27>>0]|0;
-    $29 = $28&255;
-    $30 = $24 & $29;
-    $31 = ($30|0)!=(0);
-    if (!($31)) {
-     $32 = $3;
-     $33 = $5;
-     $34 = ((($33)) + 20|0);
-     $35 = HEAP32[$34>>2]|0;
-     $36 = $6;
-     $37 = (($35) + (($36*12)|0)|0);
-     ;HEAP32[$$byval_copy>>2]=HEAP32[$37>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$37+4>>2]|0;
-     ;HEAP32[$$byval_copy1>>2]=HEAP32[$4>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$4+4>>2]|0;
-     $38 = (_mrb_equal($32,$$byval_copy,$$byval_copy1)|0);
-     $39 = ($38<<24>>24)!=(0);
-     if ($39) {
-      break;
-     }
-    }
-    $40 = $6;
-    $41 = (($40) + 1)|0;
-    $6 = $41;
-   }
-   _mrb_true_value($0);
-   STACKTOP = sp;return;
-  }
- } while(0);
- _mrb_false_value($0);
- STACKTOP = sp;return;
-}
-function _mrb_hash_init($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $$byval_copy3 = 0, $$byval_copy4 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0;
- var $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, $vararg_ptr1 = 0, $vararg_ptr2 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 80|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(80|0);
- $$byval_copy4 = sp + 64|0;
- $$byval_copy3 = sp + 56|0;
- $$byval_copy = sp + 48|0;
- $vararg_buffer = sp;
- $4 = sp + 32|0;
- $5 = sp + 24|0;
- $6 = sp + 72|0;
- $7 = sp + 16|0;
- $3 = $1;
- _mrb_nil_value_91($7);
- ;HEAP32[$5>>2]=HEAP32[$7>>2]|0;HEAP32[$5+4>>2]=HEAP32[$7+4>>2]|0;
- $8 = $3;
- HEAP32[$vararg_buffer>>2] = $4;
- $vararg_ptr1 = ((($vararg_buffer)) + 4|0);
- HEAP32[$vararg_ptr1>>2] = $5;
- $vararg_ptr2 = ((($vararg_buffer)) + 8|0);
- HEAP32[$vararg_ptr2>>2] = $6;
- (_mrb_get_args($8,55126,$vararg_buffer)|0);
- $9 = $3;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
- _mrb_hash_modify($9,$$byval_copy);
- $10 = ((($4)) + 4|0);
- $11 = HEAP32[$10>>2]|0;
- $12 = ($11|0)==(0);
- if ($12) {
-  $13 = HEAP32[$4>>2]|0;
-  $14 = ($13|0)!=(0);
-  if ($14) {
-   label = 3;
-  }
- } else {
-  label = 3;
- }
- do {
-  if ((label|0) == 3) {
-   $15 = HEAP8[$6>>0]|0;
-   $16 = ($15<<24>>24)!=(0);
-   if ($16) {
-    $17 = $3;
-    $18 = $3;
-    $19 = (_mrb_class_get($18,69160)|0);
-    _mrb_raise($17,$19,65128);
-    // unreachable;
-   } else {
-    $20 = HEAP32[$2>>2]|0;
-    $21 = HEAP32[$20>>2]|0;
-    $22 = $21 >>> 11;
-    $23 = $22 | 256;
-    $24 = HEAP32[$20>>2]|0;
-    $25 = $23 & 2097151;
-    $26 = $25 << 11;
-    $27 = $24 & 2047;
-    $28 = $27 | $26;
-    HEAP32[$20>>2] = $28;
-    ;HEAP32[$5>>2]=HEAP32[$4>>2]|0;HEAP32[$5+4>>2]=HEAP32[$4+4>>2]|0;
-    break;
-   }
-  }
- } while(0);
- $29 = $3;
- $30 = $3;
- $31 = (_mrb_intern_static($30,55016,6)|0);
- ;HEAP32[$$byval_copy3>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy3+4>>2]=HEAP32[$2+4>>2]|0;
- ;HEAP32[$$byval_copy4>>2]=HEAP32[$5>>2]|0;HEAP32[$$byval_copy4+4>>2]=HEAP32[$5+4>>2]|0;
- _mrb_iv_set($29,$$byval_copy3,$31,$$byval_copy4);
- ;HEAP32[$0>>2]=HEAP32[$2>>2]|0;HEAP32[$0+4>>2]=HEAP32[$2+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_hash_size_m($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $1;
- $5 = HEAP32[$2>>2]|0;
- $6 = ((($5)) + 16|0);
- $7 = HEAP32[$6>>2]|0;
- $4 = $7;
- $8 = $4;
- $9 = ($8|0)!=(0|0);
- if ($9) {
-  $10 = $4;
-  $11 = ((($10)) + 4|0);
-  $12 = HEAP32[$11>>2]|0;
-  _mrb_fixnum_value_116($0,$12);
-  STACKTOP = sp;return;
- } else {
-  _mrb_fixnum_value_116($0,0);
-  STACKTOP = sp;return;
- }
-}
-function _mrb_hash_shift($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $$byval_copy10 = 0, $$byval_copy2 = 0, $$byval_copy3 = 0, $$byval_copy4 = 0, $$byval_copy5 = 0, $$byval_copy6 = 0, $$byval_copy7 = 0, $$byval_copy8 = 0, $$byval_copy9 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0;
- var $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0;
- var $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0;
- var $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, $vararg_ptr1 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 160|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(160|0);
- $$byval_copy10 = sp + 144|0;
- $$byval_copy9 = sp + 136|0;
- $$byval_copy8 = sp + 128|0;
- $$byval_copy7 = sp + 120|0;
- $$byval_copy6 = sp + 112|0;
- $$byval_copy5 = sp + 104|0;
- $$byval_copy4 = sp + 96|0;
- $$byval_copy3 = sp + 88|0;
- $$byval_copy2 = sp + 80|0;
- $$byval_copy = sp + 72|0;
- $vararg_buffer = sp;
- $6 = sp + 48|0;
- $7 = sp + 40|0;
- $8 = sp + 32|0;
- $9 = sp + 24|0;
- $10 = sp + 16|0;
- $3 = $1;
- $11 = HEAP32[$2>>2]|0;
- $12 = ((($11)) + 16|0);
- $13 = HEAP32[$12>>2]|0;
- $4 = $13;
- $14 = $3;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
- _mrb_hash_modify($14,$$byval_copy);
- $15 = $4;
- $16 = ($15|0)!=(0|0);
- L1: do {
-  if ($16) {
-   $17 = $4;
-   $18 = ((($17)) + 4|0);
-   $19 = HEAP32[$18>>2]|0;
-   $20 = ($19>>>0)>(0);
-   if ($20) {
-    $5 = 0;
-    while(1) {
-     $21 = $5;
-     $22 = $4;
-     $23 = HEAP32[$22>>2]|0;
-     $24 = ($21|0)!=($23|0);
-     if (!($24)) {
-      break L1;
-     }
-     $25 = $4;
-     $26 = ((($25)) + 12|0);
-     $27 = HEAP32[$26>>2]|0;
-     $28 = $5;
-     $29 = (($28>>>0) / 4)&-1;
-     $30 = (($27) + ($29)|0);
-     $31 = HEAP8[$30>>0]|0;
-     $32 = $31&255;
-     $33 = $5;
-     $34 = (($33>>>0) % 4)&-1;
-     $35 = (55012 + ($34)|0);
-     $36 = HEAP8[$35>>0]|0;
-     $37 = $36&255;
-     $38 = $32 & $37;
-     $39 = ($38|0)!=(0);
-     if (!($39)) {
-      break;
-     }
-     $49 = $5;
-     $50 = (($49) + 1)|0;
-     $5 = $50;
-    }
-    $40 = $4;
-    $41 = ((($40)) + 16|0);
-    $42 = HEAP32[$41>>2]|0;
-    $43 = $5;
-    $44 = (($42) + ($43<<3)|0);
-    ;HEAP32[$6>>2]=HEAP32[$44>>2]|0;HEAP32[$6+4>>2]=HEAP32[$44+4>>2]|0;
-    $45 = $3;
-    ;HEAP32[$$byval_copy2>>2]=HEAP32[$6>>2]|0;HEAP32[$$byval_copy2+4>>2]=HEAP32[$6+4>>2]|0;
-    _mrb_gc_protect($45,$$byval_copy2);
-    $46 = $3;
-    ;HEAP32[$$byval_copy3>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy3+4>>2]=HEAP32[$2+4>>2]|0;
-    ;HEAP32[$$byval_copy4>>2]=HEAP32[$6>>2]|0;HEAP32[$$byval_copy4+4>>2]=HEAP32[$6+4>>2]|0;
-    _mrb_hash_delete_key($8,$46,$$byval_copy3,$$byval_copy4);
-    ;HEAP32[$7>>2]=HEAP32[$8>>2]|0;HEAP32[$7+4>>2]=HEAP32[$8+4>>2]|0;
-    $47 = $3;
-    ;HEAP32[$$byval_copy5>>2]=HEAP32[$7>>2]|0;HEAP32[$$byval_copy5+4>>2]=HEAP32[$7+4>>2]|0;
-    _mrb_gc_protect($47,$$byval_copy5);
-    $48 = $3;
-    ;HEAP32[$$byval_copy6>>2]=HEAP32[$6>>2]|0;HEAP32[$$byval_copy6+4>>2]=HEAP32[$6+4>>2]|0;
-    ;HEAP32[$$byval_copy7>>2]=HEAP32[$7>>2]|0;HEAP32[$$byval_copy7+4>>2]=HEAP32[$7+4>>2]|0;
-    _mrb_assoc_new($0,$48,$$byval_copy6,$$byval_copy7);
-    STACKTOP = sp;return;
-   }
-  }
- } while(0);
- $51 = HEAP32[$2>>2]|0;
- $52 = HEAP32[$51>>2]|0;
- $53 = $52 >>> 11;
- $54 = $53 & 256;
- $55 = ($54|0)!=(0);
- $56 = $3;
- $57 = $3;
- if ($55) {
-  $58 = $3;
-  $59 = (_mrb_intern_static($58,55016,6)|0);
-  ;HEAP32[$$byval_copy8>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy8+4>>2]=HEAP32[$2+4>>2]|0;
-  _mrb_iv_get($9,$57,$$byval_copy8,$59);
-  _mrb_nil_value_91($10);
-  ;HEAP8[$vararg_buffer>>0]=HEAP8[$2>>0]|0;HEAP8[$vararg_buffer+1>>0]=HEAP8[$2+1>>0]|0;HEAP8[$vararg_buffer+2>>0]=HEAP8[$2+2>>0]|0;HEAP8[$vararg_buffer+3>>0]=HEAP8[$2+3>>0]|0;HEAP8[$vararg_buffer+4>>0]=HEAP8[$2+4>>0]|0;HEAP8[$vararg_buffer+5>>0]=HEAP8[$2+5>>0]|0;HEAP8[$vararg_buffer+6>>0]=HEAP8[$2+6>>0]|0;HEAP8[$vararg_buffer+7>>0]=HEAP8[$2+7>>0]|0;
-  $vararg_ptr1 = ((($vararg_buffer)) + 8|0);
-  ;HEAP8[$vararg_ptr1>>0]=HEAP8[$10>>0]|0;HEAP8[$vararg_ptr1+1>>0]=HEAP8[$10+1>>0]|0;HEAP8[$vararg_ptr1+2>>0]=HEAP8[$10+2>>0]|0;HEAP8[$vararg_ptr1+3>>0]=HEAP8[$10+3>>0]|0;HEAP8[$vararg_ptr1+4>>0]=HEAP8[$10+4>>0]|0;HEAP8[$vararg_ptr1+5>>0]=HEAP8[$10+5>>0]|0;HEAP8[$vararg_ptr1+6>>0]=HEAP8[$10+6>>0]|0;HEAP8[$vararg_ptr1+7>>0]=HEAP8[$10+7>>0]|0;
-  ;HEAP32[$$byval_copy9>>2]=HEAP32[$9>>2]|0;HEAP32[$$byval_copy9+4>>2]=HEAP32[$9+4>>2]|0;
-  _mrb_funcall($0,$56,$$byval_copy9,69604,2,$vararg_buffer);
-  STACKTOP = sp;return;
- } else {
-  $60 = (_mrb_intern_static($57,55016,6)|0);
-  ;HEAP32[$$byval_copy10>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy10+4>>2]=HEAP32[$2+4>>2]|0;
-  _mrb_iv_get($0,$56,$$byval_copy10,$60);
-  STACKTOP = sp;return;
- }
-}
-function _mrb_hash_dup($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;
- var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0;
- var $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0;
- var $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);
- $$byval_copy1 = sp + 48|0;
- $$byval_copy = sp + 40|0;
- $10 = sp;
- $3 = $1;
- $11 = HEAP32[$2>>2]|0;
- $12 = ((($11)) + 16|0);
- $13 = HEAP32[$12>>2]|0;
- $5 = $13;
- $14 = $3;
- $15 = $3;
- $16 = ((($15)) + 56|0);
- $17 = HEAP32[$16>>2]|0;
- $18 = (_mrb_obj_alloc($14,15,$17)|0);
- $4 = $18;
- $19 = $3;
- $20 = (_kh_init_ht($19)|0);
- $21 = $4;
- $22 = ((($21)) + 16|0);
- HEAP32[$22>>2] = $20;
- $23 = $5;
- $24 = ((($23)) + 4|0);
- $25 = HEAP32[$24>>2]|0;
- $26 = ($25>>>0)>(0);
- if (!($26)) {
-  $74 = $4;
-  _mrb_obj_value_86($0,$74);
-  STACKTOP = sp;return;
- }
- $27 = $4;
- $28 = ((($27)) + 16|0);
- $29 = HEAP32[$28>>2]|0;
- $6 = $29;
- $7 = 0;
- while(1) {
-  $30 = $7;
-  $31 = $5;
-  $32 = HEAP32[$31>>2]|0;
-  $33 = ($30|0)!=($32|0);
-  if (!($33)) {
-   break;
-  }
-  $34 = $5;
-  $35 = ((($34)) + 12|0);
-  $36 = HEAP32[$35>>2]|0;
-  $37 = $7;
-  $38 = (($37>>>0) / 4)&-1;
-  $39 = (($36) + ($38)|0);
-  $40 = HEAP8[$39>>0]|0;
-  $41 = $40&255;
-  $42 = $7;
-  $43 = (($42>>>0) % 4)&-1;
-  $44 = (55012 + ($43)|0);
-  $45 = HEAP8[$44>>0]|0;
-  $46 = $45&255;
-  $47 = $41 & $46;
-  $48 = ($47|0)!=(0);
-  if (!($48)) {
-   $49 = $3;
-   $50 = (_mrb_gc_arena_save($49)|0);
-   $9 = $50;
-   $51 = $3;
-   $52 = $6;
-   $53 = $3;
-   $54 = $5;
-   $55 = ((($54)) + 16|0);
-   $56 = HEAP32[$55>>2]|0;
-   $57 = $7;
-   $58 = (($56) + ($57<<3)|0);
-   ;HEAP32[$$byval_copy>>2]=HEAP32[$58>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$58+4>>2]|0;
-   _mrb_hash_ht_key($10,$53,$$byval_copy);
-   ;HEAP32[$$byval_copy1>>2]=HEAP32[$10>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$10+4>>2]|0;
-   $59 = (_kh_put_ht($51,$52,$$byval_copy1,0)|0);
-   $8 = $59;
-   $60 = $3;
-   $61 = $9;
-   _mrb_gc_arena_restore($60,$61);
-   $62 = $6;
-   $63 = ((($62)) + 20|0);
-   $64 = HEAP32[$63>>2]|0;
-   $65 = $8;
-   $66 = (($64) + (($65*12)|0)|0);
-   $67 = $5;
-   $68 = ((($67)) + 20|0);
-   $69 = HEAP32[$68>>2]|0;
-   $70 = $7;
-   $71 = (($69) + (($70*12)|0)|0);
-   ;HEAP32[$66>>2]=HEAP32[$71>>2]|0;HEAP32[$66+4>>2]=HEAP32[$71+4>>2]|0;HEAP32[$66+8>>2]=HEAP32[$71+8>>2]|0;
-  }
-  $72 = $7;
-  $73 = (($72) + 1)|0;
-  $7 = $73;
- }
- $74 = $4;
- _mrb_obj_value_86($0,$74);
- STACKTOP = sp;return;
-}
-function _mrb_hash_values($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;
- var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0;
- var $46 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);
- $$byval_copy1 = sp + 56|0;
- $$byval_copy = sp + 48|0;
- $6 = sp + 24|0;
- $7 = sp + 16|0;
- $8 = sp;
- $3 = $1;
- $9 = HEAP32[$2>>2]|0;
- $10 = ((($9)) + 16|0);
- $11 = HEAP32[$10>>2]|0;
- $4 = $11;
- $12 = $4;
- $13 = ($12|0)!=(0|0);
- $14 = $3;
- if (!($13)) {
-  _mrb_ary_new($0,$14);
-  STACKTOP = sp;return;
- }
- $15 = $4;
- $16 = ((($15)) + 4|0);
- $17 = HEAP32[$16>>2]|0;
- _mrb_ary_new_capa($7,$14,$17);
- ;HEAP32[$6>>2]=HEAP32[$7>>2]|0;HEAP32[$6+4>>2]=HEAP32[$7+4>>2]|0;
- $5 = 0;
- while(1) {
-  $18 = $5;
-  $19 = $4;
-  $20 = HEAP32[$19>>2]|0;
-  $21 = ($18|0)!=($20|0);
-  if (!($21)) {
-   break;
-  }
-  $22 = $4;
-  $23 = ((($22)) + 12|0);
-  $24 = HEAP32[$23>>2]|0;
-  $25 = $5;
-  $26 = (($25>>>0) / 4)&-1;
-  $27 = (($24) + ($26)|0);
-  $28 = HEAP8[$27>>0]|0;
-  $29 = $28&255;
-  $30 = $5;
-  $31 = (($30>>>0) % 4)&-1;
-  $32 = (55012 + ($31)|0);
-  $33 = HEAP8[$32>>0]|0;
-  $34 = $33&255;
-  $35 = $29 & $34;
-  $36 = ($35|0)!=(0);
-  if (!($36)) {
-   $37 = $4;
-   $38 = ((($37)) + 20|0);
-   $39 = HEAP32[$38>>2]|0;
-   $40 = $5;
-   $41 = (($39) + (($40*12)|0)|0);
-   ;HEAP32[$8>>2]=HEAP32[$41>>2]|0;HEAP32[$8+4>>2]=HEAP32[$41+4>>2]|0;HEAP32[$8+8>>2]=HEAP32[$41+8>>2]|0;
-   $42 = $3;
-   $43 = ((($8)) + 8|0);
-   $44 = HEAP32[$43>>2]|0;
-   ;HEAP32[$$byval_copy>>2]=HEAP32[$6>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$6+4>>2]|0;
-   ;HEAP32[$$byval_copy1>>2]=HEAP32[$8>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$8+4>>2]|0;
-   _mrb_ary_set($42,$$byval_copy,$44,$$byval_copy1);
-  }
-  $45 = $5;
-  $46 = (($45) + 1)|0;
-  $5 = $46;
- }
- ;HEAP32[$0>>2]=HEAP32[$6>>2]|0;HEAP32[$0+4>>2]=HEAP32[$6+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_hash_to_hash($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $3 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $1;
- ;HEAP32[$0>>2]=HEAP32[$2>>2]|0;HEAP32[$0+4>>2]=HEAP32[$2+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_fixnum_value_116($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = sp;
- $2 = $1;
- $4 = ((($3)) + 4|0);
- HEAP32[$4>>2] = 3;
- $5 = $2;
- HEAP32[$3>>2] = $5;
- ;HEAP32[$0>>2]=HEAP32[$3>>2]|0;HEAP32[$0+4>>2]=HEAP32[$3+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_false_value($0) {
- $0 = $0|0;
- var $1 = 0, $2 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $1 = sp;
- $2 = ((($1)) + 4|0);
- HEAP32[$2>>2] = 0;
- HEAP32[$1>>2] = 1;
- ;HEAP32[$0>>2]=HEAP32[$1>>2]|0;HEAP32[$0+4>>2]=HEAP32[$1+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_to_flo($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0.0, $12 = 0.0, $2 = 0.0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0.0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $0;
- $4 = ((($1)) + 4|0);
- $5 = HEAP32[$4>>2]|0;
- switch ($5|0) {
- case 3:  {
-  $6 = HEAP32[$1>>2]|0;
-  $7 = (+($6|0));
-  $2 = $7;
-  $12 = $2;
-  STACKTOP = sp;return (+$12);
-  break;
- }
- case 6:  {
-  $11 = +HEAPF32[$1>>2];
-  $2 = $11;
-  $12 = $2;
-  STACKTOP = sp;return (+$12);
-  break;
- }
- default: {
-  $8 = $3;
-  $9 = $3;
-  $10 = (_mrb_class_get($9,69204)|0);
-  _mrb_raise($8,$10,55138);
-  // unreachable;
- }
- }
- return +(0.0);
-}
-function _mrb_float_value($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = +$2;
- var $3 = 0, $4 = 0.0, $5 = 0, $6 = 0, $7 = 0.0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $5 = sp;
- $3 = $1;
- $4 = $2;
- $6 = ((($5)) + 4|0);
- HEAP32[$6>>2] = 6;
- $7 = $4;
- HEAPF32[$5>>2] = $7;
- ;HEAP32[$0>>2]=HEAP32[$5>>2]|0;HEAP32[$0+4>>2]=HEAP32[$5+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_fixnum_mul($0,$1,$2,$3) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- var $$byval_copy = 0, $$old6 = 0, $$old8 = 0.0, $$old9 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0;
- var $26 = 0.0, $27 = 0, $28 = 0, $29 = 0.0, $30 = 0, $31 = 0.0, $32 = 0.0, $33 = 0, $34 = 0.0, $35 = 0, $36 = 0.0, $37 = 0, $38 = 0.0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0.0, $43 = 0, $44 = 0.0;
- var $45 = 0.0, $46 = 0.0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0.0, $51 = 0, $52 = 0.0, $53 = 0.0, $6 = 0.0, $7 = 0, $8 = 0, $9 = 0, $or$cond = 0, $or$cond10 = 0, $or$cond12 = 0, $or$cond3 = 0, $or$cond5 = 0, $or$cond7 = 0;
- var label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $$byval_copy = sp + 16|0;
- $4 = $1;
- $8 = HEAP32[$2>>2]|0;
- $5 = $8;
- $9 = ((($3)) + 4|0);
- $10 = HEAP32[$9>>2]|0;
- $11 = ($10|0)==(3);
- if (!($11)) {
-  $48 = $4;
-  $49 = $5;
-  $50 = (+($49|0));
-  $51 = $4;
-  ;HEAP32[$$byval_copy>>2]=HEAP32[$3>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$3+4>>2]|0;
-  $52 = (+_mrb_to_flo($51,$$byval_copy));
-  $53 = $50 * $52;
-  _mrb_float_value($0,$48,$53);
-  STACKTOP = sp;return;
- }
- $12 = $5;
- $13 = ($12|0)==(0);
- if ($13) {
-  ;HEAP32[$0>>2]=HEAP32[$2>>2]|0;HEAP32[$0+4>>2]=HEAP32[$2+4>>2]|0;
-  STACKTOP = sp;return;
- }
- $14 = HEAP32[$3>>2]|0;
- $7 = $14;
- $15 = $5;
- $16 = ($15|0)<(32768);
- $17 = $5;
- $18 = ($17|0)>=(-32768);
- $or$cond = $16 & $18;
- $19 = $7;
- $20 = ($19|0)<(32768);
- $or$cond3 = $or$cond & $20;
- $21 = $7;
- $22 = ($21|0)>=(-32768);
- $or$cond5 = $or$cond3 & $22;
- $23 = $5;
- $24 = $7;
- $25 = Math_imul($23, $24)|0;
- if ($or$cond5) {
-  _mrb_fixnum_value_125($0,$25);
-  STACKTOP = sp;return;
- }
- $26 = (+($25|0));
- $6 = $26;
- $27 = $5;
- $28 = ($27|0)!=(0);
- $29 = $6;
- if ($28) {
-  $30 = $5;
-  $31 = (+($30|0));
-  $32 = $29 / $31;
-  $33 = $7;
-  $34 = (+($33|0));
-  $35 = $32 == $34;
-  $36 = $6;
-  $37 = $36 <= 2147483648.0;
-  $or$cond7 = $35 & $37;
-  $38 = $6;
-  $39 = $38 >= -2147483648.0;
-  $or$cond10 = $or$cond7 & $39;
-  if ($or$cond10) {
-   label = 10;
-  } else {
-   label = 9;
-  }
- } else {
-  $$old6 = $29 <= 2147483648.0;
-  $$old8 = $6;
-  $$old9 = $$old8 >= -2147483648.0;
-  $or$cond12 = $$old6 & $$old9;
-  if ($or$cond12) {
-   label = 10;
-  } else {
-   label = 9;
-  }
- }
- if ((label|0) == 9) {
-  $40 = $4;
-  $41 = $5;
-  $42 = (+($41|0));
-  $43 = $7;
-  $44 = (+($43|0));
-  $45 = $42 * $44;
-  _mrb_float_value($0,$40,$45);
-  STACKTOP = sp;return;
- }
- else if ((label|0) == 10) {
-  $46 = $6;
-  $47 = (~~(($46)));
-  _mrb_fixnum_value_125($0,$47);
-  STACKTOP = sp;return;
- }
-}
-function _mrb_fixnum_value_125($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = sp;
- $2 = $1;
- $4 = ((($3)) + 4|0);
- HEAP32[$4>>2] = 3;
- $5 = $2;
- HEAP32[$3>>2] = $5;
- ;HEAP32[$0>>2]=HEAP32[$3>>2]|0;HEAP32[$0+4>>2]=HEAP32[$3+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_flo_to_fixnum($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0.0, $13 = 0.0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0.0, $21 = 0, $22 = 0, $23 = 0.0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;
- var $3 = 0, $30 = 0.0, $31 = 0, $32 = 0, $4 = 0, $5 = 0.0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $1;
- $6 = ((($2)) + 4|0);
- $7 = HEAP32[$6>>2]|0;
- $8 = ($7|0)==(6);
- if (!($8)) {
-  $9 = $3;
-  $10 = $3;
-  $11 = (_mrb_class_get($10,69204)|0);
-  _mrb_raise($9,$11,55138);
-  // unreachable;
- }
- $12 = +HEAPF32[$2>>2];
- $5 = $12;
- $13 = $5;
- $14 = (___FLOAT_BITS_126($13)|0);
- $15 = $14 & 2147483647;
- $16 = ($15|0)==(2139095040);
- if ($16) {
-  $17 = $3;
-  $18 = $3;
-  $19 = (_mrb_class_get($18,55154)|0);
-  $20 = $5;
-  $21 = $20 < 0.0;
-  $22 = $21 ? 55171 : 55181;
-  _mrb_raise($17,$19,$22);
-  // unreachable;
- }
- $23 = $5;
- $24 = (___FLOAT_BITS_126($23)|0);
- $25 = $24 & 2147483647;
- $26 = ($25>>>0)>(2139095040);
- if ($26) {
-  $27 = $3;
-  $28 = $3;
-  $29 = (_mrb_class_get($28,55154)|0);
-  _mrb_raise($27,$29,55190);
-  // unreachable;
- } else {
-  $30 = $5;
-  $31 = (~~(($30)));
-  $4 = $31;
-  $32 = $4;
-  _mrb_fixnum_value_125($0,$32);
-  STACKTOP = sp;return;
- }
-}
-function ___FLOAT_BITS_126($0) {
- $0 = +$0;
- var $1 = 0.0, $2 = 0, $3 = 0.0, $4 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = sp;
- $1 = $0;
- $3 = $1;
- HEAPF32[$2>>2] = $3;
- $4 = HEAP32[$2>>2]|0;
- STACKTOP = sp;return ($4|0);
-}
-function ___DOUBLE_BITS_127($0) {
- $0 = +$0;
- var $1 = 0.0, $2 = 0, $3 = 0.0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = sp;
- $1 = $0;
- $3 = $1;
- HEAPF64[$2>>3] = $3;
- $4 = $2;
- $5 = $4;
- $6 = HEAP32[$5>>2]|0;
- $7 = (($4) + 4)|0;
- $8 = $7;
- $9 = HEAP32[$8>>2]|0;
- tempRet0 = ($9);
- STACKTOP = sp;return ($6|0);
-}
-function _mrb_fixnum_plus($0,$1,$2,$3) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- var $$byval_copy = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0.0, $22 = 0, $23 = 0.0, $24 = 0.0, $25 = 0, $26 = 0, $27 = 0, $28 = 0.0;
- var $29 = 0, $30 = 0.0, $31 = 0.0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $$byval_copy = sp + 16|0;
- $7 = sp;
- $4 = $1;
- $8 = HEAP32[$2>>2]|0;
- $5 = $8;
- $9 = ((($3)) + 4|0);
- $10 = HEAP32[$9>>2]|0;
- $11 = ($10|0)==(3);
- if (!($11)) {
-  $26 = $4;
-  $27 = $5;
-  $28 = (+($27|0));
-  $29 = $4;
-  ;HEAP32[$$byval_copy>>2]=HEAP32[$3>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$3+4>>2]|0;
-  $30 = (+_mrb_to_flo($29,$$byval_copy));
-  $31 = $28 + $30;
-  _mrb_float_value($0,$26,$31);
-  STACKTOP = sp;return;
- }
- $12 = $5;
- $13 = ($12|0)==(0);
- if ($13) {
-  ;HEAP32[$0>>2]=HEAP32[$3>>2]|0;HEAP32[$0+4>>2]=HEAP32[$3+4>>2]|0;
-  STACKTOP = sp;return;
- }
- $14 = HEAP32[$3>>2]|0;
- $6 = $14;
- $15 = $5;
- $16 = $6;
- $17 = (_mrb_int_add_overflow($15,$16,$7)|0);
- $18 = ($17<<24>>24)!=(0);
- if ($18) {
-  $19 = $4;
-  $20 = $5;
-  $21 = (+($20|0));
-  $22 = $6;
-  $23 = (+($22|0));
-  $24 = $21 + $23;
-  _mrb_float_value($0,$19,$24);
-  STACKTOP = sp;return;
- } else {
-  $25 = HEAP32[$7>>2]|0;
-  _mrb_fixnum_value_125($0,$25);
-  STACKTOP = sp;return;
- }
-}
-function _mrb_int_add_overflow($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$arith = 0, $$ispos = 0, $$negcheck = 0, $$negtemp = 0, $$poscheck = 0, $$postemp = 0, $$select = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $3 = 0, $4 = 0, $5 = 0;
- var $6 = 0, $7 = 0, $8 = 0, $9 = 0, $or$cond = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $3 = $0;
- $4 = $1;
- $5 = $2;
- $8 = $3;
- $9 = $4;
- $$arith = (($8) + ($9))|0;
- $$postemp = (($8) + -2147483648)|0;
- $$negtemp = (($8) + 2147483647)|0;
- $$poscheck = ($$arith|0)<($$postemp|0);
- $$negcheck = ($$arith|0)>($$negtemp|0);
- $$ispos = ($8|0)>=(0);
- $$select = $$ispos ? $$poscheck : $$negcheck;
- $7 = $$arith;
- $10 = $7;
- $11 = ($10|0)>(2147483647);
- $or$cond = $$select | $11;
- if ($or$cond) {
-  $15 = 1;
- } else {
-  $12 = $7;
-  $13 = ($12|0)<(-2147483648);
-  $15 = $13;
- }
- $14 = $15&1;
- $16 = $14&255;
- $6 = $16;
- $17 = $7;
- $18 = $5;
- HEAP32[$18>>2] = $17;
- $19 = $6;
- STACKTOP = sp;return ($19|0);
-}
-function _mrb_fixnum_minus($0,$1,$2,$3) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- var $$byval_copy = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0.0, $20 = 0, $21 = 0.0, $22 = 0.0, $23 = 0, $24 = 0, $25 = 0, $26 = 0.0, $27 = 0, $28 = 0.0;
- var $29 = 0.0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $$byval_copy = sp + 16|0;
- $7 = sp;
- $4 = $1;
- $8 = HEAP32[$2>>2]|0;
- $5 = $8;
- $9 = ((($3)) + 4|0);
- $10 = HEAP32[$9>>2]|0;
- $11 = ($10|0)==(3);
- if (!($11)) {
-  $24 = $4;
-  $25 = $5;
-  $26 = (+($25|0));
-  $27 = $4;
-  ;HEAP32[$$byval_copy>>2]=HEAP32[$3>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$3+4>>2]|0;
-  $28 = (+_mrb_to_flo($27,$$byval_copy));
-  $29 = $26 - $28;
-  _mrb_float_value($0,$24,$29);
-  STACKTOP = sp;return;
- }
- $12 = HEAP32[$3>>2]|0;
- $6 = $12;
- $13 = $5;
- $14 = $6;
- $15 = (_mrb_int_sub_overflow($13,$14,$7)|0);
- $16 = ($15<<24>>24)!=(0);
- if ($16) {
-  $17 = $4;
-  $18 = $5;
-  $19 = (+($18|0));
-  $20 = $6;
-  $21 = (+($20|0));
-  $22 = $19 - $21;
-  _mrb_float_value($0,$17,$22);
-  STACKTOP = sp;return;
- } else {
-  $23 = HEAP32[$7>>2]|0;
-  _mrb_fixnum_value_125($0,$23);
-  STACKTOP = sp;return;
- }
-}
-function _mrb_int_sub_overflow($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$arith = 0, $$ispos = 0, $$negcheck = 0, $$negtemp = 0, $$poscheck = 0, $$postemp = 0, $$select = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $3 = 0, $4 = 0, $5 = 0;
- var $6 = 0, $7 = 0, $8 = 0, $9 = 0, $or$cond = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $3 = $0;
- $4 = $1;
- $5 = $2;
- $8 = $3;
- $9 = $4;
- $$arith = (($8) - ($9))|0;
- $$postemp = (($8) + -2147483647)|0;
- $$negtemp = (($8) + -2147483648)|0;
- $$poscheck = ($$arith|0)<($$postemp|0);
- $$negcheck = ($$arith|0)>($$negtemp|0);
- $$ispos = ($8|0)>=(0);
- $$select = $$ispos ? $$poscheck : $$negcheck;
- $7 = $$arith;
- $10 = $7;
- $11 = ($10|0)>(2147483647);
- $or$cond = $$select | $11;
- if ($or$cond) {
-  $15 = 1;
- } else {
-  $12 = $7;
-  $13 = ($12|0)<(-2147483648);
-  $15 = $13;
- }
- $14 = $15&1;
- $16 = $14&255;
- $6 = $16;
- $17 = $7;
- $18 = $5;
- HEAP32[$18>>2] = $17;
- $19 = $6;
- STACKTOP = sp;return ($19|0);
-}
-function _mrb_fixnum_to_str($0,$1,$2,$3) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;
- var $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0;
- var $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $or$cond = 0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 80|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(80|0);
- $vararg_buffer = sp;
- $6 = sp + 32|0;
- $9 = sp + 8|0;
- $4 = $1;
- $5 = $3;
- $10 = ((($6)) + 33|0);
- $7 = $10;
- $11 = HEAP32[$2>>2]|0;
- $8 = $11;
- $12 = $5;
- $13 = ($12|0)<(2);
- $14 = $5;
- $15 = (36)<($14|0);
- $or$cond = $13 | $15;
- if ($or$cond) {
-  $16 = $4;
-  $17 = $4;
-  $18 = (_mrb_class_get($17,69160)|0);
-  $19 = $5;
-  _mrb_fixnum_value_125($9,$19);
-  ;HEAP8[$vararg_buffer>>0]=HEAP8[$9>>0]|0;HEAP8[$vararg_buffer+1>>0]=HEAP8[$9+1>>0]|0;HEAP8[$vararg_buffer+2>>0]=HEAP8[$9+2>>0]|0;HEAP8[$vararg_buffer+3>>0]=HEAP8[$9+3>>0]|0;HEAP8[$vararg_buffer+4>>0]=HEAP8[$9+4>>0]|0;HEAP8[$vararg_buffer+5>>0]=HEAP8[$9+5>>0]|0;HEAP8[$vararg_buffer+6>>0]=HEAP8[$9+6>>0]|0;HEAP8[$vararg_buffer+7>>0]=HEAP8[$9+7>>0]|0;
-  _mrb_raisef($16,$18,55194,$vararg_buffer);
-  // unreachable;
- }
- $20 = $8;
- $21 = ($20|0)==(0);
- if ($21) {
-  $22 = $7;
-  $23 = ((($22)) + -1|0);
-  $7 = $23;
-  HEAP8[$23>>0] = 48;
-  $51 = $4;
-  $52 = $7;
-  $53 = ((($6)) + 33|0);
-  $54 = $7;
-  $55 = $53;
-  $56 = $54;
-  $57 = (($55) - ($56))|0;
-  _mrb_str_new($0,$51,$52,$57);
-  STACKTOP = sp;return;
- }
- $24 = $8;
- $25 = ($24|0)<(0);
- if (!($25)) {
-  while(1) {
-   $40 = $8;
-   $41 = $5;
-   $42 = (($40|0) % ($41|0))&-1;
-   $43 = (55645 + ($42)|0);
-   $44 = HEAP8[$43>>0]|0;
-   $45 = $7;
-   $46 = ((($45)) + -1|0);
-   $7 = $46;
-   HEAP8[$46>>0] = $44;
-   $47 = $5;
-   $48 = $8;
-   $49 = (($48|0) / ($47|0))&-1;
-   $8 = $49;
-   $50 = ($49|0)!=(0);
-   if (!($50)) {
-    break;
-   }
-  }
-  $51 = $4;
-  $52 = $7;
-  $53 = ((($6)) + 33|0);
-  $54 = $7;
-  $55 = $53;
-  $56 = $54;
-  $57 = (($55) - ($56))|0;
-  _mrb_str_new($0,$51,$52,$57);
-  STACKTOP = sp;return;
- }
- while(1) {
-  $26 = $8;
-  $27 = $5;
-  $28 = (($26|0) % ($27|0))&-1;
-  $29 = (0 - ($28))|0;
-  $30 = (55645 + ($29)|0);
-  $31 = HEAP8[$30>>0]|0;
-  $32 = $7;
-  $33 = ((($32)) + -1|0);
-  $7 = $33;
-  HEAP8[$33>>0] = $31;
-  $34 = $5;
-  $35 = $8;
-  $36 = (($35|0) / ($34|0))&-1;
-  $8 = $36;
-  $37 = ($36|0)!=(0);
-  if (!($37)) {
-   break;
-  }
- }
- $38 = $7;
- $39 = ((($38)) + -1|0);
- $7 = $39;
- HEAP8[$39>>0] = 45;
- $51 = $4;
- $52 = $7;
- $53 = ((($6)) + 33|0);
- $54 = $7;
- $55 = $53;
- $56 = $54;
- $57 = (($55) - ($56))|0;
- _mrb_str_new($0,$51,$52,$57);
- STACKTOP = sp;return;
-}
-function _mrb_init_numeric($0) {
- $0 = $0|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $1 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0;
- var $115 = 0, $116 = 0, $117 = 0, $118 = 0, $119 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0;
- var $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0;
- var $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0;
- var $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0;
- var $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0;
- var $99 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);
- $$byval_copy1 = sp + 48|0;
- $$byval_copy = sp + 40|0;
- $6 = sp + 8|0;
- $7 = sp;
- $1 = $0;
- $8 = $1;
- $9 = $1;
- $10 = ((($9)) + 32|0);
- $11 = HEAP32[$10>>2]|0;
- $12 = (_mrb_define_class($8,55211,$11)|0);
- $2 = $12;
- $13 = $1;
- $14 = $2;
- _mrb_define_method($13,$14,59540,35,262144);
- $15 = $1;
- $16 = $2;
- _mrb_define_method($15,$16,59549,36,262144);
- $17 = $1;
- $18 = $2;
- _mrb_define_method($17,$18,55219,36,262144);
- $19 = $1;
- $20 = $2;
- _mrb_define_method($19,$20,69156,37,262144);
- $21 = $1;
- $22 = $2;
- $23 = (_mrb_define_class($21,55360,$22)|0);
- $3 = $23;
- $24 = $1;
- $25 = $3;
- _mrb_undef_class_method($24,$25,67982);
- $26 = $1;
- $27 = $3;
- _mrb_define_method($26,$27,56301,38,0);
- $28 = $1;
- $29 = $3;
- _mrb_define_method($28,$29,55521,38,0);
- $30 = $1;
- $31 = $3;
- $32 = (_mrb_define_class($30,55429,$31)|0);
- $4 = $32;
- $33 = $1;
- $34 = ((($33)) + 64|0);
- HEAP32[$34>>2] = $32;
- $35 = $1;
- $36 = $4;
- _mrb_define_method($35,$36,64614,39,262144);
- $37 = $1;
- $38 = $4;
- _mrb_define_method($37,$38,69660,40,262144);
- $39 = $1;
- $40 = $4;
- _mrb_define_method($39,$40,68856,41,262144);
- $41 = $1;
- $42 = $4;
- _mrb_define_method($41,$42,59551,42,262144);
- $43 = $1;
- $44 = $4;
- _mrb_define_method($43,$44,69201,43,262144);
- $45 = $1;
- $46 = $4;
- _mrb_define_method($45,$46,59559,44,0);
- $47 = $1;
- $48 = $4;
- _mrb_define_method($47,$48,69093,45,262144);
- $49 = $1;
- $50 = $4;
- _mrb_define_method($49,$50,59553,46,262144);
- $51 = $1;
- $52 = $4;
- _mrb_define_method($51,$52,59555,47,262144);
- $53 = $1;
- $54 = $4;
- _mrb_define_method($53,$54,64616,48,262144);
- $55 = $1;
- $56 = $4;
- _mrb_define_method($55,$56,59537,49,262144);
- $57 = $1;
- $58 = $4;
- _mrb_define_method($57,$58,69289,50,262144);
- $59 = $1;
- $60 = $4;
- _mrb_define_method($59,$60,68413,51,0);
- $61 = $1;
- $62 = $4;
- _mrb_define_method($61,$62,56296,52,0);
- $63 = $1;
- $64 = $4;
- _mrb_define_method($63,$64,69276,53,0);
- $65 = $1;
- $66 = $4;
- _mrb_define_method($65,$66,69281,53,0);
- $67 = $1;
- $68 = $4;
- _mrb_define_method($67,$68,55223,54,262144);
- $69 = $1;
- $70 = $2;
- $71 = (_mrb_define_class($69,55477,$70)|0);
- $5 = $71;
- $72 = $1;
- $73 = ((($72)) + 60|0);
- HEAP32[$73>>2] = $71;
- $74 = $1;
- $75 = $5;
- _mrb_undef_class_method($74,$75,67982);
- $76 = $1;
- $77 = $5;
- _mrb_define_method($76,$77,64614,55,262144);
- $78 = $1;
- $79 = $5;
- _mrb_define_method($78,$79,69660,56,262144);
- $80 = $1;
- $81 = $5;
- _mrb_define_method($80,$81,68856,57,262144);
- $82 = $1;
- $83 = $5;
- _mrb_define_method($82,$83,59551,58,262144);
- $84 = $1;
- $85 = $5;
- _mrb_define_method($84,$85,69201,59,262144);
- $86 = $1;
- $87 = $5;
- _mrb_define_method($86,$87,55230,60,0);
- $88 = $1;
- $89 = $5;
- _mrb_define_method($88,$89,55235,61,0);
- $90 = $1;
- $91 = $5;
- _mrb_define_method($90,$91,55243,62,0);
- $92 = $1;
- $93 = $5;
- _mrb_define_method($92,$93,55249,63,0);
- $94 = $1;
- $95 = $5;
- _mrb_define_method($94,$95,55259,64,8192);
- $96 = $1;
- $97 = $5;
- _mrb_define_method($96,$97,56296,65,0);
- $98 = $1;
- $99 = $5;
- _mrb_define_method($98,$99,56301,66,0);
- $100 = $1;
- $101 = $5;
- _mrb_define_method($100,$101,55521,66,0);
- $102 = $1;
- $103 = $5;
- _mrb_define_method($102,$103,55265,66,0);
- $104 = $1;
- $105 = $5;
- _mrb_define_method($104,$105,55223,67,262144);
- $106 = $1;
- $107 = $5;
- _mrb_define_method($106,$107,69289,68,262144);
- $108 = $1;
- $109 = $5;
- _mrb_define_method($108,$109,69276,69,0);
- $110 = $1;
- $111 = $5;
- _mrb_define_method($110,$111,69281,69,0);
- $112 = $1;
- $113 = $5;
- _mrb_define_method($112,$113,55274,70,0);
- $114 = $1;
- $115 = $5;
- $116 = $1;
- _mrb_float_value($6,$116,inf);
- ;HEAP32[$$byval_copy>>2]=HEAP32[$6>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$6+4>>2]|0;
- _mrb_define_const($114,$115,55279,$$byval_copy);
- $117 = $1;
- $118 = $5;
- $119 = $1;
- _mrb_float_value($7,$119,nan);
- ;HEAP32[$$byval_copy1>>2]=HEAP32[$7>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$7+4>>2]|0;
- _mrb_define_const($117,$118,70763,$$byval_copy1);
- STACKTOP = sp;return;
-}
-function _num_pow($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $$byval_copy6 = 0, $10 = 0, $11 = 0.0, $12 = 0.0, $13 = 0.0, $14 = 0.0, $15 = 0.0, $16 = 0.0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0.0, $24 = 0, $25 = 0.0, $26 = 0, $27 = 0.0;
- var $28 = 0, $29 = 0.0, $3 = 0, $30 = 0, $31 = 0.0, $32 = 0, $33 = 0.0, $34 = 0, $35 = 0, $36 = 0.0, $37 = 0, $38 = 0, $39 = 0.0, $4 = 0, $5 = 0.0, $6 = 0.0, $7 = 0, $8 = 0, $9 = 0.0, $or$cond = 0;
- var $or$cond3 = 0, $or$cond5 = 0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);
- $$byval_copy6 = sp + 40|0;
- $$byval_copy = sp + 32|0;
- $vararg_buffer = sp;
- $4 = sp + 16|0;
- $3 = $1;
- $7 = $3;
- HEAP32[$vararg_buffer>>2] = $4;
- (_mrb_get_args($7,69199,$vararg_buffer)|0);
- $8 = $3;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$4>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$4+4>>2]|0;
- $9 = (+_mrb_to_flo($8,$$byval_copy));
- $6 = $9;
- $10 = $3;
- ;HEAP32[$$byval_copy6>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy6+4>>2]=HEAP32[$2+4>>2]|0;
- $11 = (+_mrb_to_flo($10,$$byval_copy6));
- $12 = $11;
- $13 = $6;
- $14 = $13;
- $15 = (+Math_pow((+$12),(+$14)));
- $16 = $15;
- $5 = $16;
- $17 = ((($2)) + 4|0);
- $18 = HEAP32[$17>>2]|0;
- $19 = ($18|0)==(3);
- do {
-  if ($19) {
-   $20 = ((($4)) + 4|0);
-   $21 = HEAP32[$20>>2]|0;
-   $22 = ($21|0)==(3);
-   $23 = $5;
-   $24 = $23 <= 2147483648.0;
-   $or$cond = $22 & $24;
-   $25 = $5;
-   $26 = $25 >= -2147483648.0;
-   $or$cond3 = $or$cond & $26;
-   $27 = $6;
-   $28 = $27 > 0.0;
-   $or$cond5 = $or$cond3 & $28;
-   if ($or$cond5) {
-    $29 = $5;
-    $30 = $29 < 0.0;
-    if (!($30)) {
-     $31 = $5;
-     $32 = $31 > 0.0;
-     if (!($32)) {
-      break;
-     }
-     $33 = $5;
-     $34 = (~~(($33)));
-     $35 = ($34|0)>(0);
-     if (!($35)) {
-      break;
-     }
-    }
-    $36 = $5;
-    $37 = (~~(($36)));
-    _mrb_fixnum_value_125($0,$37);
-    STACKTOP = sp;return;
-   }
-  }
- } while(0);
- $38 = $3;
- $39 = $5;
- _mrb_float_value($0,$38,$39);
- STACKTOP = sp;return;
-}
-function _num_div($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $10 = 0.0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0.0, $9 = 0.0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $$byval_copy = sp + 16|0;
- $vararg_buffer = sp;
- $4 = sp + 4|0;
- $3 = $1;
- $5 = $3;
- HEAP32[$vararg_buffer>>2] = $4;
- (_mrb_get_args($5,55326,$vararg_buffer)|0);
- $6 = $3;
- $7 = $3;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
- $8 = (+_mrb_to_flo($7,$$byval_copy));
- $9 = +HEAPF32[$4>>2];
- $10 = $8 / $9;
- _mrb_float_value($0,$6,$10);
- STACKTOP = sp;return;
-}
-function _num_cmp($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0.0, $14 = 0.0, $15 = 0.0, $16 = 0.0, $17 = 0, $18 = 0.0, $19 = 0.0, $20 = 0, $3 = 0, $4 = 0, $5 = 0.0, $6 = 0.0, $7 = 0, $8 = 0, $9 = 0.0, $vararg_buffer = 0;
- var label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);
- $$byval_copy = sp + 32|0;
- $vararg_buffer = sp;
- $4 = sp + 16|0;
- $3 = $1;
- $7 = $3;
- HEAP32[$vararg_buffer>>2] = $4;
- (_mrb_get_args($7,69199,$vararg_buffer)|0);
- $8 = $3;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
- $9 = (+_mrb_to_flo($8,$$byval_copy));
- $5 = $9;
- $10 = ((($4)) + 4|0);
- $11 = HEAP32[$10>>2]|0;
- switch ($11|0) {
- case 3:  {
-  $12 = HEAP32[$4>>2]|0;
-  $13 = (+($12|0));
-  $6 = $13;
-  break;
- }
- case 6:  {
-  $14 = +HEAPF32[$4>>2];
-  $6 = $14;
-  break;
- }
- default: {
-  _mrb_nil_value_168($0);
-  STACKTOP = sp;return;
- }
- }
- $15 = $5;
- $16 = $6;
- $17 = $15 > $16;
- if ($17) {
-  _mrb_fixnum_value_125($0,1);
-  STACKTOP = sp;return;
- }
- $18 = $5;
- $19 = $6;
- $20 = $18 < $19;
- if ($20) {
-  _mrb_fixnum_value_125($0,-1);
-  STACKTOP = sp;return;
- } else {
-  _mrb_fixnum_value_125($0,0);
-  STACKTOP = sp;return;
- }
-}
-function _int_to_i($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $3 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $1;
- ;HEAP32[$0>>2]=HEAP32[$2>>2]|0;HEAP32[$0+4>>2]=HEAP32[$2+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _fix_plus($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);
- $$byval_copy1 = sp + 32|0;
- $$byval_copy = sp + 24|0;
- $vararg_buffer = sp;
- $4 = sp + 8|0;
- $3 = $1;
- $5 = $3;
- HEAP32[$vararg_buffer>>2] = $4;
- (_mrb_get_args($5,69199,$vararg_buffer)|0);
- $6 = $3;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
- ;HEAP32[$$byval_copy1>>2]=HEAP32[$4>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$4+4>>2]|0;
- _mrb_fixnum_plus($0,$6,$$byval_copy,$$byval_copy1);
- STACKTOP = sp;return;
-}
-function _fix_minus($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);
- $$byval_copy1 = sp + 32|0;
- $$byval_copy = sp + 24|0;
- $vararg_buffer = sp;
- $4 = sp + 8|0;
- $3 = $1;
- $5 = $3;
- HEAP32[$vararg_buffer>>2] = $4;
- (_mrb_get_args($5,69199,$vararg_buffer)|0);
- $6 = $3;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
- ;HEAP32[$$byval_copy1>>2]=HEAP32[$4>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$4+4>>2]|0;
- _mrb_fixnum_minus($0,$6,$$byval_copy,$$byval_copy1);
- STACKTOP = sp;return;
-}
-function _fix_mul($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);
- $$byval_copy1 = sp + 32|0;
- $$byval_copy = sp + 24|0;
- $vararg_buffer = sp;
- $4 = sp + 8|0;
- $3 = $1;
- $5 = $3;
- HEAP32[$vararg_buffer>>2] = $4;
- (_mrb_get_args($5,69199,$vararg_buffer)|0);
- $6 = $3;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
- ;HEAP32[$$byval_copy1>>2]=HEAP32[$4>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$4+4>>2]|0;
- _mrb_fixnum_mul($0,$6,$$byval_copy,$$byval_copy1);
- STACKTOP = sp;return;
-}
-function _fix_mod($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0.0, $23 = 0, $24 = 0.0, $25 = 0, $26 = 0.0, $3 = 0, $4 = 0;
- var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);
- $$byval_copy = sp + 40|0;
- $vararg_buffer = sp;
- $4 = sp + 24|0;
- $7 = sp + 8|0;
- $8 = sp + 4|0;
- $3 = $1;
- $9 = $3;
- HEAP32[$vararg_buffer>>2] = $4;
- (_mrb_get_args($9,69199,$vararg_buffer)|0);
- $10 = HEAP32[$2>>2]|0;
- $5 = $10;
- $11 = ((($4)) + 4|0);
- $12 = HEAP32[$11>>2]|0;
- $13 = ($12|0)==(3);
- if (!($13)) {
-  $20 = $3;
-  $21 = $5;
-  $22 = (+($21|0));
-  $23 = $3;
-  ;HEAP32[$$byval_copy>>2]=HEAP32[$4>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$4+4>>2]|0;
-  $24 = (+_mrb_to_flo($23,$$byval_copy));
-  _flodivmod($20,$22,$24,0,$8);
-  $25 = $3;
-  $26 = +HEAPF32[$8>>2];
-  _mrb_float_value($0,$25,$26);
-  STACKTOP = sp;return;
- }
- $14 = HEAP32[$4>>2]|0;
- $6 = $14;
- $15 = ($14|0)==(0);
- $16 = $3;
- if ($15) {
-  _mrb_float_value($0,$16,nan);
-  STACKTOP = sp;return;
- } else {
-  $17 = $5;
-  $18 = $6;
-  _fixdivmod($16,$17,$18,0,$7);
-  $19 = HEAP32[$7>>2]|0;
-  _mrb_fixnum_value_125($0,$19);
-  STACKTOP = sp;return;
- }
-}
-function _fix_equal($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0.0, $15 = 0.0, $16 = 0, $17 = 0, $18 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $vararg_buffer = sp;
- $4 = sp + 8|0;
- $3 = $1;
- $5 = $3;
- HEAP32[$vararg_buffer>>2] = $4;
- (_mrb_get_args($5,69199,$vararg_buffer)|0);
- $6 = ((($4)) + 4|0);
- $7 = HEAP32[$6>>2]|0;
- switch ($7|0) {
- case 3:  {
-  $8 = HEAP32[$2>>2]|0;
-  $9 = HEAP32[$4>>2]|0;
-  $10 = ($8|0)==($9|0);
-  $11 = $10&1;
-  $12 = $11&255;
-  _mrb_bool_value_165($0,$12);
-  STACKTOP = sp;return;
-  break;
- }
- case 6:  {
-  $13 = HEAP32[$2>>2]|0;
-  $14 = (+($13|0));
-  $15 = +HEAPF32[$4>>2];
-  $16 = $14 == $15;
-  $17 = $16&1;
-  $18 = $17&255;
-  _mrb_bool_value_165($0,$18);
-  STACKTOP = sp;return;
-  break;
- }
- default: {
-  _mrb_false_value_167($0);
-  STACKTOP = sp;return;
- }
- }
-}
-function _fix_rev($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $1;
- $5 = HEAP32[$2>>2]|0;
- $4 = $5;
- $6 = $4;
- $7 = $6 ^ -1;
- _mrb_fixnum_value_125($0,$7);
- STACKTOP = sp;return;
-}
-function _fix_and($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $10 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);
- $$byval_copy = sp + 32|0;
- $vararg_buffer = sp;
- $4 = sp + 16|0;
- $5 = sp + 8|0;
- $3 = $1;
- $6 = $3;
- HEAP32[$vararg_buffer>>2] = $4;
- (_mrb_get_args($6,69199,$vararg_buffer)|0);
- $7 = $3;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$4>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$4+4>>2]|0;
- _bit_coerce($5,$7,$$byval_copy);
- ;HEAP32[$4>>2]=HEAP32[$5>>2]|0;HEAP32[$4+4>>2]=HEAP32[$5+4>>2]|0;
- $8 = HEAP32[$2>>2]|0;
- $9 = HEAP32[$4>>2]|0;
- $10 = $8 & $9;
- _mrb_fixnum_value_125($0,$10);
- STACKTOP = sp;return;
-}
-function _fix_or($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $10 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);
- $$byval_copy = sp + 32|0;
- $vararg_buffer = sp;
- $4 = sp + 16|0;
- $5 = sp + 8|0;
- $3 = $1;
- $6 = $3;
- HEAP32[$vararg_buffer>>2] = $4;
- (_mrb_get_args($6,69199,$vararg_buffer)|0);
- $7 = $3;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$4>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$4+4>>2]|0;
- _bit_coerce($5,$7,$$byval_copy);
- ;HEAP32[$4>>2]=HEAP32[$5>>2]|0;HEAP32[$4+4>>2]=HEAP32[$5+4>>2]|0;
- $8 = HEAP32[$2>>2]|0;
- $9 = HEAP32[$4>>2]|0;
- $10 = $8 | $9;
- _mrb_fixnum_value_125($0,$10);
- STACKTOP = sp;return;
-}
-function _fix_xor($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $10 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);
- $$byval_copy = sp + 32|0;
- $vararg_buffer = sp;
- $4 = sp + 16|0;
- $5 = sp + 8|0;
- $3 = $1;
- $6 = $3;
- HEAP32[$vararg_buffer>>2] = $4;
- (_mrb_get_args($6,69199,$vararg_buffer)|0);
- $7 = $3;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$4>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$4+4>>2]|0;
- _bit_coerce($5,$7,$$byval_copy);
- ;HEAP32[$4>>2]=HEAP32[$5>>2]|0;HEAP32[$4+4>>2]=HEAP32[$5+4>>2]|0;
- $8 = HEAP32[$2>>2]|0;
- $9 = HEAP32[$4>>2]|0;
- $10 = $8 ^ $9;
- _mrb_fixnum_value_125($0,$10);
- STACKTOP = sp;return;
-}
-function _fix_lshift($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $4 = sp + 4|0;
- $3 = $1;
- $6 = $3;
- _fix_shift_get_width($6,$4);
- $7 = HEAP32[$4>>2]|0;
- $8 = ($7|0)==(0);
- if ($8) {
-  ;HEAP32[$0>>2]=HEAP32[$2>>2]|0;HEAP32[$0+4>>2]=HEAP32[$2+4>>2]|0;
-  STACKTOP = sp;return;
- }
- $9 = HEAP32[$2>>2]|0;
- $5 = $9;
- $10 = HEAP32[$4>>2]|0;
- $11 = ($10|0)<(0);
- if ($11) {
-  $12 = $5;
-  $13 = HEAP32[$4>>2]|0;
-  $14 = (0 - ($13))|0;
-  _rshift($0,$12,$14);
-  STACKTOP = sp;return;
- } else {
-  $15 = $3;
-  $16 = $5;
-  $17 = HEAP32[$4>>2]|0;
-  _lshift($0,$15,$16,$17);
-  STACKTOP = sp;return;
- }
-}
-function _fix_rshift($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $4 = sp + 4|0;
- $3 = $1;
- $6 = $3;
- _fix_shift_get_width($6,$4);
- $7 = HEAP32[$4>>2]|0;
- $8 = ($7|0)==(0);
- if ($8) {
-  ;HEAP32[$0>>2]=HEAP32[$2>>2]|0;HEAP32[$0+4>>2]=HEAP32[$2+4>>2]|0;
-  STACKTOP = sp;return;
- }
- $9 = HEAP32[$2>>2]|0;
- $5 = $9;
- $10 = HEAP32[$4>>2]|0;
- $11 = ($10|0)<(0);
- if ($11) {
-  $12 = $3;
-  $13 = $5;
-  $14 = HEAP32[$4>>2]|0;
-  $15 = (0 - ($14))|0;
-  _lshift($0,$12,$13,$15);
-  STACKTOP = sp;return;
- } else {
-  $16 = $5;
-  $17 = HEAP32[$4>>2]|0;
-  _rshift($0,$16,$17);
-  STACKTOP = sp;return;
- }
-}
-function _fix_eql($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $vararg_buffer = sp;
- $4 = sp + 8|0;
- $3 = $1;
- $5 = $3;
- HEAP32[$vararg_buffer>>2] = $4;
- (_mrb_get_args($5,69199,$vararg_buffer)|0);
- $6 = ((($4)) + 4|0);
- $7 = HEAP32[$6>>2]|0;
- $8 = ($7|0)==(3);
- if ($8) {
-  $9 = HEAP32[$2>>2]|0;
-  $10 = HEAP32[$4>>2]|0;
-  $11 = ($9|0)==($10|0);
-  $12 = $11&1;
-  $13 = $12&255;
-  _mrb_bool_value_165($0,$13);
-  STACKTOP = sp;return;
- } else {
-  _mrb_false_value_167($0);
-  STACKTOP = sp;return;
- }
-}
-function _flo_hash($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0.0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $3 = 0, $4 = 0;
- var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0.0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $4 = sp + 12|0;
- $3 = $1;
- $8 = HEAP32[$2>>2]|0;
- $9 = (+($8|0));
- HEAPF32[$4>>2] = $9;
- $10 = +HEAPF32[$4>>2];
- $11 = $10 == 0.0;
- if ($11) {
-  HEAPF32[$4>>2] = 0.0;
- }
- $5 = $4;
- $7 = 0;
- $6 = 0;
- while(1) {
-  $12 = $6;
-  $13 = ($12>>>0)<(4);
-  $14 = $7;
-  if (!($13)) {
-   break;
-  }
-  $15 = ($14*971)|0;
-  $16 = $5;
-  $17 = $6;
-  $18 = (($16) + ($17)|0);
-  $19 = HEAP8[$18>>0]|0;
-  $20 = $19&255;
-  $21 = $15 ^ $20;
-  $7 = $21;
-  $22 = $6;
-  $23 = (($22) + 1)|0;
-  $6 = $23;
- }
- $24 = ($14|0)<(0);
- if (!($24)) {
-  $27 = $7;
-  _mrb_fixnum_value_125($0,$27);
-  STACKTOP = sp;return;
- }
- $25 = $7;
- $26 = (0 - ($25))|0;
- $7 = $26;
- $27 = $7;
- _mrb_fixnum_value_125($0,$27);
- STACKTOP = sp;return;
-}
-function _fix_to_f($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $3 = 0, $4 = 0, $5 = 0, $6 = 0.0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $1;
- $4 = $3;
- $5 = HEAP32[$2>>2]|0;
- $6 = (+($5|0));
- _mrb_float_value($0,$4,$6);
- STACKTOP = sp;return;
-}
-function _fix_to_s($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $$byval_copy = sp + 16|0;
- $vararg_buffer = sp;
- $4 = sp + 4|0;
- $3 = $1;
- HEAP32[$4>>2] = 10;
- $5 = $3;
- HEAP32[$vararg_buffer>>2] = $4;
- (_mrb_get_args($5,64768,$vararg_buffer)|0);
- $6 = $3;
- $7 = HEAP32[$4>>2]|0;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
- _mrb_fixnum_to_str($0,$6,$$byval_copy,$7);
- STACKTOP = sp;return;
-}
-function _fix_divmod($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $$byval_copy2 = 0, $$byval_copy3 = 0, $$byval_copy4 = 0, $$byval_copy5 = 0, $$byval_copy6 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0;
- var $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0.0, $34 = 0, $35 = 0.0, $36 = 0, $37 = 0.0, $38 = 0, $39 = 0.0, $4 = 0, $40 = 0;
- var $41 = 0.0, $42 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 160|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(160|0);
- $$byval_copy6 = sp + 152|0;
- $$byval_copy5 = sp + 144|0;
- $$byval_copy4 = sp + 136|0;
- $$byval_copy3 = sp + 128|0;
- $$byval_copy2 = sp + 120|0;
- $$byval_copy1 = sp + 112|0;
- $$byval_copy = sp + 104|0;
- $vararg_buffer = sp;
- $4 = sp + 88|0;
- $5 = sp + 84|0;
- $6 = sp + 80|0;
- $7 = sp + 72|0;
- $8 = sp + 64|0;
- $9 = sp + 56|0;
- $10 = sp + 48|0;
- $11 = sp + 44|0;
- $12 = sp + 40|0;
- $13 = sp + 32|0;
- $14 = sp + 24|0;
- $15 = sp + 16|0;
- $16 = sp + 8|0;
- $3 = $1;
- $17 = $3;
- HEAP32[$vararg_buffer>>2] = $4;
- (_mrb_get_args($17,69199,$vararg_buffer)|0);
- $18 = ((($4)) + 4|0);
- $19 = HEAP32[$18>>2]|0;
- $20 = ($19|0)==(3);
- if (!($20)) {
-  $31 = $3;
-  $32 = HEAP32[$2>>2]|0;
-  $33 = (+($32|0));
-  $34 = $3;
-  ;HEAP32[$$byval_copy4>>2]=HEAP32[$4>>2]|0;HEAP32[$$byval_copy4+4>>2]=HEAP32[$4+4>>2]|0;
-  $35 = (+_mrb_to_flo($34,$$byval_copy4));
-  _flodivmod($31,$33,$35,$11,$12);
-  $36 = $3;
-  $37 = +HEAPF32[$11>>2];
-  $38 = (~~(($37)));
-  $39 = (+($38|0));
-  _mrb_float_value($15,$36,$39);
-  ;HEAP32[$13>>2]=HEAP32[$15>>2]|0;HEAP32[$13+4>>2]=HEAP32[$15+4>>2]|0;
-  $40 = $3;
-  $41 = +HEAPF32[$12>>2];
-  _mrb_float_value($16,$40,$41);
-  ;HEAP32[$14>>2]=HEAP32[$16>>2]|0;HEAP32[$14+4>>2]=HEAP32[$16+4>>2]|0;
-  $42 = $3;
-  ;HEAP32[$$byval_copy5>>2]=HEAP32[$13>>2]|0;HEAP32[$$byval_copy5+4>>2]=HEAP32[$13+4>>2]|0;
-  ;HEAP32[$$byval_copy6>>2]=HEAP32[$14>>2]|0;HEAP32[$$byval_copy6+4>>2]=HEAP32[$14+4>>2]|0;
-  _mrb_assoc_new($0,$42,$$byval_copy5,$$byval_copy6);
-  STACKTOP = sp;return;
- }
- $21 = HEAP32[$4>>2]|0;
- $22 = ($21|0)==(0);
- $23 = $3;
- if ($22) {
-  $24 = $3;
-  _mrb_float_value($7,$24,inf);
-  $25 = $3;
-  _mrb_float_value($8,$25,nan);
-  ;HEAP32[$$byval_copy>>2]=HEAP32[$7>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$7+4>>2]|0;
-  ;HEAP32[$$byval_copy1>>2]=HEAP32[$8>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$8+4>>2]|0;
-  _mrb_assoc_new($0,$23,$$byval_copy,$$byval_copy1);
-  STACKTOP = sp;return;
- } else {
-  $26 = HEAP32[$2>>2]|0;
-  $27 = HEAP32[$4>>2]|0;
-  _fixdivmod($23,$26,$27,$5,$6);
-  $28 = $3;
-  $29 = HEAP32[$5>>2]|0;
-  _mrb_fixnum_value_125($9,$29);
-  $30 = HEAP32[$6>>2]|0;
-  _mrb_fixnum_value_125($10,$30);
-  ;HEAP32[$$byval_copy2>>2]=HEAP32[$9>>2]|0;HEAP32[$$byval_copy2+4>>2]=HEAP32[$9+4>>2]|0;
-  ;HEAP32[$$byval_copy3>>2]=HEAP32[$10>>2]|0;HEAP32[$$byval_copy3+4>>2]=HEAP32[$10+4>>2]|0;
-  _mrb_assoc_new($0,$28,$$byval_copy2,$$byval_copy3);
-  STACKTOP = sp;return;
- }
-}
-function _flo_plus($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $10 = 0.0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0.0, $8 = 0, $9 = 0.0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $$byval_copy = sp + 24|0;
- $vararg_buffer = sp;
- $4 = sp + 8|0;
- $3 = $1;
- $5 = $3;
- HEAP32[$vararg_buffer>>2] = $4;
- (_mrb_get_args($5,69199,$vararg_buffer)|0);
- $6 = $3;
- $7 = +HEAPF32[$2>>2];
- $8 = $3;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$4>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$4+4>>2]|0;
- $9 = (+_mrb_to_flo($8,$$byval_copy));
- $10 = $7 + $9;
- _mrb_float_value($0,$6,$10);
- STACKTOP = sp;return;
-}
-function _flo_minus($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $10 = 0.0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0.0, $8 = 0, $9 = 0.0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $$byval_copy = sp + 24|0;
- $vararg_buffer = sp;
- $4 = sp + 8|0;
- $3 = $1;
- $5 = $3;
- HEAP32[$vararg_buffer>>2] = $4;
- (_mrb_get_args($5,69199,$vararg_buffer)|0);
- $6 = $3;
- $7 = +HEAPF32[$2>>2];
- $8 = $3;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$4>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$4+4>>2]|0;
- $9 = (+_mrb_to_flo($8,$$byval_copy));
- $10 = $7 - $9;
- _mrb_float_value($0,$6,$10);
- STACKTOP = sp;return;
-}
-function _flo_mul($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $10 = 0.0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0.0, $8 = 0, $9 = 0.0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $$byval_copy = sp + 24|0;
- $vararg_buffer = sp;
- $4 = sp + 8|0;
- $3 = $1;
- $5 = $3;
- HEAP32[$vararg_buffer>>2] = $4;
- (_mrb_get_args($5,69199,$vararg_buffer)|0);
- $6 = $3;
- $7 = +HEAPF32[$2>>2];
- $8 = $3;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$4>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$4+4>>2]|0;
- $9 = (+_mrb_to_flo($8,$$byval_copy));
- $10 = $7 * $9;
- _mrb_float_value($0,$6,$10);
- STACKTOP = sp;return;
-}
-function _flo_mod($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $10 = 0.0, $11 = 0, $12 = 0.0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0.0, $9 = 0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $$byval_copy = sp + 24|0;
- $vararg_buffer = sp;
- $4 = sp + 8|0;
- $5 = sp + 4|0;
- $3 = $1;
- $6 = $3;
- HEAP32[$vararg_buffer>>2] = $4;
- (_mrb_get_args($6,69199,$vararg_buffer)|0);
- $7 = $3;
- $8 = +HEAPF32[$2>>2];
- $9 = $3;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$4>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$4+4>>2]|0;
- $10 = (+_mrb_to_flo($9,$$byval_copy));
- _flodivmod($7,$8,$10,0,$5);
- $11 = $3;
- $12 = +HEAPF32[$5>>2];
- _mrb_float_value($0,$11,$12);
- STACKTOP = sp;return;
-}
-function _flo_eq($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0.0, $11 = 0, $12 = 0, $13 = 0, $14 = 0.0, $15 = 0.0, $16 = 0, $17 = 0, $18 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0.0, $9 = 0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $vararg_buffer = sp;
- $4 = sp + 8|0;
- $3 = $1;
- $5 = $3;
- HEAP32[$vararg_buffer>>2] = $4;
- (_mrb_get_args($5,69199,$vararg_buffer)|0);
- $6 = ((($4)) + 4|0);
- $7 = HEAP32[$6>>2]|0;
- switch ($7|0) {
- case 3:  {
-  $8 = +HEAPF32[$2>>2];
-  $9 = HEAP32[$4>>2]|0;
-  $10 = (+($9|0));
-  $11 = $8 == $10;
-  $12 = $11&1;
-  $13 = $12&255;
-  _mrb_bool_value_165($0,$13);
-  STACKTOP = sp;return;
-  break;
- }
- case 6:  {
-  $14 = +HEAPF32[$2>>2];
-  $15 = +HEAPF32[$4>>2];
-  $16 = $14 == $15;
-  $17 = $16&1;
-  $18 = $17&255;
-  _mrb_bool_value_165($0,$18);
-  STACKTOP = sp;return;
-  break;
- }
- default: {
-  _mrb_false_value_167($0);
-  STACKTOP = sp;return;
- }
- }
-}
-function _flo_ceil($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0.0, $13 = 0.0, $14 = 0, $3 = 0, $4 = 0.0, $5 = 0.0, $6 = 0.0, $7 = 0.0, $8 = 0, $9 = 0.0, $or$cond = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $1;
- $5 = +HEAPF32[$2>>2];
- $6 = (+Math_ceil((+$5)));
- $4 = $6;
- $7 = $4;
- $8 = $7 <= 2147483648.0;
- $9 = $4;
- $10 = $9 >= -2147483648.0;
- $or$cond = $8 & $10;
- if ($or$cond) {
-  $13 = $4;
-  $14 = (~~(($13)));
-  _mrb_fixnum_value_125($0,$14);
-  STACKTOP = sp;return;
- } else {
-  $11 = $3;
-  $12 = $4;
-  _mrb_float_value($0,$11,$12);
-  STACKTOP = sp;return;
- }
-}
-function _flo_finite_p($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $3 = 0, $4 = 0.0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $1;
- $4 = +HEAPF32[$2>>2];
- $5 = (___FLOAT_BITS_126($4)|0);
- $6 = $5 & 2147483647;
- $7 = ($6>>>0)<(2139095040);
- $8 = $7&1;
- $9 = $8&255;
- _mrb_bool_value_165($0,$9);
- STACKTOP = sp;return;
-}
-function _flo_floor($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0.0, $13 = 0.0, $14 = 0, $3 = 0, $4 = 0.0, $5 = 0.0, $6 = 0.0, $7 = 0.0, $8 = 0, $9 = 0.0, $or$cond = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $1;
- $5 = +HEAPF32[$2>>2];
- $6 = (+Math_floor((+$5)));
- $4 = $6;
- $7 = $4;
- $8 = $7 <= 2147483648.0;
- $9 = $4;
- $10 = $9 >= -2147483648.0;
- $or$cond = $8 & $10;
- if ($or$cond) {
-  $13 = $4;
-  $14 = (~~(($13)));
-  _mrb_fixnum_value_125($0,$14);
-  STACKTOP = sp;return;
- } else {
-  $11 = $3;
-  $12 = $4;
-  _mrb_float_value($0,$11,$12);
-  STACKTOP = sp;return;
- }
-}
-function _flo_infinite_p($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0.0, $11 = 0, $12 = 0, $3 = 0, $4 = 0.0, $5 = 0.0, $6 = 0.0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $1;
- $5 = +HEAPF32[$2>>2];
- $4 = $5;
- $6 = $4;
- $7 = (___FLOAT_BITS_126($6)|0);
- $8 = $7 & 2147483647;
- $9 = ($8|0)==(2139095040);
- if ($9) {
-  $10 = $4;
-  $11 = $10 < 0.0;
-  $12 = $11 ? -1 : 1;
-  _mrb_fixnum_value_125($0,$12);
-  STACKTOP = sp;return;
- } else {
-  _mrb_nil_value_168($0);
-  STACKTOP = sp;return;
- }
-}
-function _flo_round($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0.0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0.0, $109 = 0.0, $11 = 0.0, $110 = 0, $12 = 0.0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0;
- var $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0.0, $25 = 0, $26 = 0, $27 = 0.0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0;
- var $38 = 0, $39 = 0, $4 = 0.0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0.0, $5 = 0.0, $50 = 0.0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0;
- var $56 = 0, $57 = 0, $58 = 0, $59 = 0.0, $6 = 0, $60 = 0.0, $61 = 0.0, $62 = 0.0, $63 = 0.0, $64 = 0, $65 = 0.0, $66 = 0.0, $67 = 0.0, $68 = 0.0, $69 = 0.0, $7 = 0, $70 = 0.0, $71 = 0.0, $72 = 0.0, $73 = 0;
- var $74 = 0, $75 = 0.0, $76 = 0.0, $77 = 0, $78 = 0.0, $79 = 0.0, $8 = 0.0, $80 = 0.0, $81 = 0.0, $82 = 0.0, $83 = 0.0, $84 = 0.0, $85 = 0.0, $86 = 0, $87 = 0, $88 = 0.0, $89 = 0.0, $9 = 0, $90 = 0, $91 = 0;
- var $92 = 0.0, $93 = 0.0, $94 = 0.0, $95 = 0.0, $96 = 0, $97 = 0, $98 = 0.0, $99 = 0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);
- $vararg_buffer = sp + 24|0;
- $6 = sp + 32|0;
- $3 = $1;
- HEAP32[$6>>2] = 0;
- $9 = $3;
- HEAP32[$vararg_buffer>>2] = $6;
- (_mrb_get_args($9,64768,$vararg_buffer)|0);
- $10 = +HEAPF32[$2>>2];
- $11 = $10;
- $4 = $11;
- $12 = $4;
- $13 = (___DOUBLE_BITS_127($12)|0);
- $14 = tempRet0;
- $15 = $14 & 2147483647;
- $16 = ($13|0)==(0);
- $17 = ($15|0)==(2146435072);
- $18 = $16 & $17;
- if ($18) {
-  $19 = HEAP32[$6>>2]|0;
-  $20 = (0)<($19|0);
-  if (!($20)) {
-   $21 = $3;
-   $22 = $3;
-   $23 = (_mrb_class_get($22,55154)|0);
-   $24 = $4;
-   $25 = $24 < 0.0;
-   $26 = $25 ? 55171 : 55181;
-   _mrb_raise($21,$23,$26);
-   // unreachable;
-  }
-  ;HEAP32[$0>>2]=HEAP32[$2>>2]|0;HEAP32[$0+4>>2]=HEAP32[$2+4>>2]|0;
-  STACKTOP = sp;return;
- }
- $27 = $4;
- $28 = (___DOUBLE_BITS_127($27)|0);
- $29 = tempRet0;
- $30 = $29 & 2147483647;
- $31 = ($30>>>0)>(2146435072);
- $32 = ($28>>>0)>(0);
- $33 = ($30|0)==(2146435072);
- $34 = $33 & $32;
- $35 = $31 | $34;
- if ($35) {
-  $36 = HEAP32[$6>>2]|0;
-  $37 = (0)<($36|0);
-  if (!($37)) {
-   $38 = $3;
-   $39 = $3;
-   $40 = (_mrb_class_get($39,55154)|0);
-   _mrb_raise($38,$40,55190);
-   // unreachable;
-  }
-  ;HEAP32[$0>>2]=HEAP32[$2>>2]|0;HEAP32[$0+4>>2]=HEAP32[$2+4>>2]|0;
-  STACKTOP = sp;return;
- }
- $5 = 1.0;
- $41 = HEAP32[$6>>2]|0;
- $42 = ($41|0)>=(0);
- $43 = HEAP32[$6>>2]|0;
- $44 = (0 - ($43))|0;
- $45 = $42 ? $43 : $44;
- $7 = $45;
- while(1) {
-  $46 = $7;
-  $47 = (($46) + -1)|0;
-  $7 = $47;
-  $48 = ($47|0)>=(0);
-  $49 = $5;
-  if (!($48)) {
-   break;
-  }
-  $50 = $49 * 10.0;
-  $5 = $50;
- }
- $51 = (___DOUBLE_BITS_127($49)|0);
- $52 = tempRet0;
- $53 = $52 & 2147483647;
- $54 = ($51|0)==(0);
- $55 = ($53|0)==(2146435072);
- $56 = $54 & $55;
- $57 = HEAP32[$6>>2]|0;
- $58 = ($57|0)<(0);
- do {
-  if ($56) {
-   if ($58) {
-    $4 = 0.0;
-   }
-  } else {
-   $59 = $5;
-   $60 = $4;
-   if ($58) {
-    $61 = $60 / $59;
-    $4 = $61;
-   } else {
-    $62 = $60 * $59;
-    $4 = $62;
-   }
-   $63 = $4;
-   $64 = $63 > 0.0;
-   $65 = $4;
-   if ($64) {
-    $66 = $65;
-    $67 = (+Math_floor((+$66)));
-    $68 = $67;
-    $8 = $68;
-    $69 = $8;
-    $70 = $4;
-    $71 = $8;
-    $72 = $70 - $71;
-    $73 = $72 >= 0.5;
-    $74 = $73&1;
-    $75 = (+($74|0));
-    $76 = $69 + $75;
-    $4 = $76;
-   } else {
-    $77 = $65 < 0.0;
-    if ($77) {
-     $78 = $4;
-     $79 = $78;
-     $80 = (+Math_ceil((+$79)));
-     $81 = $80;
-     $8 = $81;
-     $82 = $8;
-     $83 = $8;
-     $84 = $4;
-     $85 = $83 - $84;
-     $86 = $85 >= 0.5;
-     $87 = $86&1;
-     $88 = (+($87|0));
-     $89 = $82 - $88;
-     $4 = $89;
-    }
-   }
-   $90 = HEAP32[$6>>2]|0;
-   $91 = ($90|0)<(0);
-   $92 = $5;
-   $93 = $4;
-   if ($91) {
-    $94 = $93 * $92;
-    $4 = $94;
-    break;
-   } else {
-    $95 = $93 / $92;
-    $4 = $95;
-    break;
-   }
-  }
- } while(0);
- $96 = HEAP32[$6>>2]|0;
- $97 = ($96|0)>(0);
- $98 = $4;
- if (!($97)) {
-  $110 = (~~(($98)));
-  _mrb_fixnum_value_125($0,$110);
-  STACKTOP = sp;return;
- }
- $99 = (___DOUBLE_BITS_127($98)|0);
- $100 = tempRet0;
- $101 = $100 & 2147483647;
- $102 = ($101>>>0)<(2146435072);
- $103 = ($99>>>0)<(0);
- $104 = ($101|0)==(2146435072);
- $105 = $104 & $103;
- $106 = $102 | $105;
- if ($106) {
-  $107 = $3;
-  $108 = $4;
-  $109 = $108;
-  _mrb_float_value($0,$107,$109);
-  STACKTOP = sp;return;
- } else {
-  ;HEAP32[$0>>2]=HEAP32[$2>>2]|0;HEAP32[$0+4>>2]=HEAP32[$2+4>>2]|0;
-  STACKTOP = sp;return;
- }
-}
-function _flo_to_f($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $3 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $1;
- ;HEAP32[$0>>2]=HEAP32[$2>>2]|0;HEAP32[$0+4>>2]=HEAP32[$2+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _flo_truncate($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0.0, $11 = 0.0, $12 = 0.0, $13 = 0, $14 = 0.0, $15 = 0.0, $16 = 0.0, $17 = 0, $18 = 0.0, $19 = 0, $20 = 0, $21 = 0.0, $22 = 0.0, $23 = 0, $3 = 0, $4 = 0.0, $5 = 0.0, $6 = 0.0, $7 = 0.0, $8 = 0;
- var $9 = 0.0, $or$cond = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $1;
- $5 = +HEAPF32[$2>>2];
- $4 = $5;
- $6 = $4;
- $7 = $6;
- $8 = $7 > 0.0;
- if ($8) {
-  $9 = $4;
-  $10 = (+Math_floor((+$9)));
-  $4 = $10;
- }
- $11 = $4;
- $12 = $11;
- $13 = $12 < 0.0;
- if ($13) {
-  $14 = $4;
-  $15 = (+Math_ceil((+$14)));
-  $4 = $15;
- }
- $16 = $4;
- $17 = $16 <= 2147483648.0;
- $18 = $4;
- $19 = $18 >= -2147483648.0;
- $or$cond = $17 & $19;
- if ($or$cond) {
-  $22 = $4;
-  $23 = (~~(($22)));
-  _mrb_fixnum_value_125($0,$23);
-  STACKTOP = sp;return;
- } else {
-  $20 = $3;
-  $21 = $4;
-  _mrb_float_value($0,$20,$21);
-  STACKTOP = sp;return;
- }
-}
-function _flo_divmod($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $$byval_copy2 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0.0, $14 = 0, $15 = 0.0, $16 = 0, $17 = 0.0, $18 = 0, $19 = 0.0, $20 = 0, $21 = 0.0, $22 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0;
- var $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 96|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(96|0);
- $$byval_copy2 = sp + 80|0;
- $$byval_copy1 = sp + 72|0;
- $$byval_copy = sp + 64|0;
- $vararg_buffer = sp;
- $4 = sp + 48|0;
- $5 = sp + 44|0;
- $6 = sp + 40|0;
- $7 = sp + 32|0;
- $8 = sp + 24|0;
- $9 = sp + 16|0;
- $10 = sp + 8|0;
- $3 = $1;
- $11 = $3;
- HEAP32[$vararg_buffer>>2] = $4;
- (_mrb_get_args($11,69199,$vararg_buffer)|0);
- $12 = $3;
- $13 = +HEAPF32[$2>>2];
- $14 = $3;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$4>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$4+4>>2]|0;
- $15 = (+_mrb_to_flo($14,$$byval_copy));
- _flodivmod($12,$13,$15,$5,$6);
- $16 = $3;
- $17 = +HEAPF32[$5>>2];
- $18 = (~~(($17)));
- $19 = (+($18|0));
- _mrb_float_value($9,$16,$19);
- ;HEAP32[$7>>2]=HEAP32[$9>>2]|0;HEAP32[$7+4>>2]=HEAP32[$9+4>>2]|0;
- $20 = $3;
- $21 = +HEAPF32[$6>>2];
- _mrb_float_value($10,$20,$21);
- ;HEAP32[$8>>2]=HEAP32[$10>>2]|0;HEAP32[$8+4>>2]=HEAP32[$10+4>>2]|0;
- $22 = $3;
- ;HEAP32[$$byval_copy1>>2]=HEAP32[$7>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$7+4>>2]|0;
- ;HEAP32[$$byval_copy2>>2]=HEAP32[$8>>2]|0;HEAP32[$$byval_copy2+4>>2]=HEAP32[$8+4>>2]|0;
- _mrb_assoc_new($0,$22,$$byval_copy1,$$byval_copy2);
- STACKTOP = sp;return;
-}
-function _flo_eql($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0.0, $12 = 0, $13 = 0, $14 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0.0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $vararg_buffer = sp;
- $4 = sp + 8|0;
- $3 = $1;
- $5 = $3;
- HEAP32[$vararg_buffer>>2] = $4;
- (_mrb_get_args($5,69199,$vararg_buffer)|0);
- $6 = ((($4)) + 4|0);
- $7 = HEAP32[$6>>2]|0;
- $8 = ($7|0)==(6);
- if ($8) {
-  $9 = +HEAPF32[$2>>2];
-  $10 = HEAP32[$4>>2]|0;
-  $11 = (+($10|0));
-  $12 = $9 == $11;
-  $13 = $12&1;
-  $14 = $13&255;
-  _mrb_bool_value_165($0,$14);
-  STACKTOP = sp;return;
- } else {
-  _mrb_false_value_167($0);
-  STACKTOP = sp;return;
- }
-}
-function _flo_to_s($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $3 = 0, $4 = 0.0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $$byval_copy = sp + 8|0;
- $3 = $1;
- $4 = +HEAPF32[$2>>2];
- $5 = (___FLOAT_BITS_126($4)|0);
- $6 = $5 & 2147483647;
- $7 = ($6>>>0)>(2139095040);
- $8 = $3;
- if ($7) {
-  _mrb_str_new_static($0,$8,55190,3);
-  STACKTOP = sp;return;
- } else {
-  ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
-  _mrb_float_to_str($0,$8,$$byval_copy,55288);
-  STACKTOP = sp;return;
- }
-}
-function _flo_nan_p($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $3 = 0, $4 = 0.0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $1;
- $4 = +HEAPF32[$2>>2];
- $5 = (___FLOAT_BITS_126($4)|0);
- $6 = $5 & 2147483647;
- $7 = ($6>>>0)>(2139095040);
- $8 = $7&1;
- $9 = $8&255;
- _mrb_bool_value_165($0,$9);
- STACKTOP = sp;return;
-}
-function _mrb_bool_value_165($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = sp;
- $2 = $1;
- $4 = $2;
- $5 = $4&255;
- $6 = ($5|0)!=(0);
- $7 = $6 ? 2 : 0;
- $8 = ((($3)) + 4|0);
- HEAP32[$8>>2] = $7;
- HEAP32[$3>>2] = 1;
- ;HEAP32[$0>>2]=HEAP32[$3>>2]|0;HEAP32[$0+4>>2]=HEAP32[$3+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_false_value_167($0) {
- $0 = $0|0;
- var $1 = 0, $2 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $1 = sp;
- $2 = ((($1)) + 4|0);
- HEAP32[$2>>2] = 0;
- HEAP32[$1>>2] = 1;
- ;HEAP32[$0>>2]=HEAP32[$1>>2]|0;HEAP32[$0+4>>2]=HEAP32[$1+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _flodivmod($0,$1,$2,$3,$4) {
- $0 = $0|0;
- $1 = +$1;
- $2 = +$2;
- $3 = $3|0;
- $4 = $4|0;
- var $10 = 0.0, $11 = 0.0, $12 = 0.0, $13 = 0.0, $14 = 0, $15 = 0.0, $16 = 0.0, $17 = 0.0, $18 = 0.0, $19 = 0, $20 = 0, $21 = 0, $22 = 0.0, $23 = 0, $24 = 0, $25 = 0, $26 = 0.0, $27 = 0.0, $28 = 0.0, $29 = 0.0;
- var $30 = 0.0, $31 = 0.0, $32 = 0.0, $33 = 0.0, $34 = 0.0, $35 = 0, $36 = 0.0, $37 = 0.0, $38 = 0.0, $39 = 0.0, $40 = 0.0, $41 = 0.0, $42 = 0.0, $43 = 0, $44 = 0, $45 = 0.0, $46 = 0, $47 = 0, $48 = 0, $49 = 0.0;
- var $5 = 0, $50 = 0, $6 = 0.0, $7 = 0.0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $5 = $0;
- $6 = $1;
- $7 = $2;
- $8 = $3;
- $9 = $4;
- $12 = $7;
- $13 = $12;
- $14 = $13 == 0.0;
- if ($14) {
-  $10 = inf;
-  $11 = nan;
- } else {
-  $15 = $6;
-  $16 = $7;
-  $17 = (+_fmodf($15,$16));
-  $11 = $17;
-  $18 = $6;
-  $19 = (___FLOAT_BITS_126($18)|0);
-  $20 = $19 & 2147483647;
-  $21 = ($20|0)==(2139095040);
-  if ($21) {
-   $22 = $7;
-   $23 = (___FLOAT_BITS_126($22)|0);
-   $24 = $23 & 2147483647;
-   $25 = ($24>>>0)<(2139095040);
-   if ($25) {
-    $26 = $6;
-    $10 = $26;
-   } else {
-    label = 6;
-   }
-  } else {
-   label = 6;
-  }
-  if ((label|0) == 6) {
-   $27 = $6;
-   $28 = $11;
-   $29 = $27 - $28;
-   $30 = $7;
-   $31 = $29 / $30;
-   $10 = $31;
-  }
-  $32 = $7;
-  $33 = $11;
-  $34 = $32 * $33;
-  $35 = $34 < 0.0;
-  if ($35) {
-   $36 = $7;
-   $37 = $11;
-   $38 = $37 + $36;
-   $11 = $38;
-   $39 = $10;
-   $40 = $39;
-   $41 = $40 - 1.0;
-   $42 = $41;
-   $10 = $42;
-  }
- }
- $43 = $9;
- $44 = ($43|0)!=(0|0);
- if ($44) {
-  $45 = $11;
-  $46 = $9;
-  HEAPF32[$46>>2] = $45;
- }
- $47 = $8;
- $48 = ($47|0)!=(0|0);
- if (!($48)) {
-  STACKTOP = sp;return;
- }
- $49 = $10;
- $50 = $8;
- HEAPF32[$50>>2] = $49;
- STACKTOP = sp;return;
-}
-function _mrb_nil_value_168($0) {
- $0 = $0|0;
- var $1 = 0, $2 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $1 = sp;
- $2 = ((($1)) + 4|0);
- HEAP32[$2>>2] = 0;
- HEAP32[$1>>2] = 0;
- ;HEAP32[$0>>2]=HEAP32[$1>>2]|0;HEAP32[$0+4>>2]=HEAP32[$1+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _fixdivmod($0,$1,$2,$3,$4) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- $4 = $4|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;
- var $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0;
- var $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $or$cond = 0, $or$cond3 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $5 = $0;
- $6 = $1;
- $7 = $2;
- $8 = $3;
- $9 = $4;
- $12 = $7;
- $13 = ($12|0)<(0);
- $14 = $6;
- $15 = ($14|0)<(0);
- $16 = $6;
- do {
-  if ($13) {
-   if ($15) {
-    $17 = (0 - ($16))|0;
-    $18 = $7;
-    $19 = (0 - ($18))|0;
-    $20 = (($17|0) / ($19|0))&-1;
-    $10 = $20;
-    break;
-   } else {
-    $21 = $7;
-    $22 = (0 - ($21))|0;
-    $23 = (($16|0) / ($22|0))&-1;
-    $24 = (0 - ($23))|0;
-    $10 = $24;
-    break;
-   }
-  } else {
-   if ($15) {
-    $25 = (0 - ($16))|0;
-    $26 = $7;
-    $27 = (($25|0) / ($26|0))&-1;
-    $28 = (0 - ($27))|0;
-    $10 = $28;
-    break;
-   } else {
-    $29 = $7;
-    $30 = (($16|0) / ($29|0))&-1;
-    $10 = $30;
-    break;
-   }
-  }
- } while(0);
- $31 = $6;
- $32 = $10;
- $33 = $7;
- $34 = Math_imul($32, $33)|0;
- $35 = (($31) - ($34))|0;
- $11 = $35;
- $36 = $11;
- $37 = ($36|0)<(0);
- $38 = $7;
- $39 = ($38|0)>(0);
- $or$cond = $37 & $39;
- if ($or$cond) {
-  label = 10;
- } else {
-  $40 = $11;
-  $41 = ($40|0)>(0);
-  $42 = $7;
-  $43 = ($42|0)<(0);
-  $or$cond3 = $41 & $43;
-  if ($or$cond3) {
-   label = 10;
-  }
- }
- if ((label|0) == 10) {
-  $44 = $7;
-  $45 = $11;
-  $46 = (($45) + ($44))|0;
-  $11 = $46;
-  $47 = $10;
-  $48 = (($47) - 1)|0;
-  $10 = $48;
- }
- $49 = $8;
- $50 = ($49|0)!=(0|0);
- if ($50) {
-  $51 = $10;
-  $52 = $8;
-  HEAP32[$52>>2] = $51;
- }
- $53 = $9;
- $54 = ($53|0)!=(0|0);
- if (!($54)) {
-  STACKTOP = sp;return;
- }
- $55 = $11;
- $56 = $9;
- HEAP32[$56>>2] = $55;
- STACKTOP = sp;return;
-}
-function _fix_shift_get_width($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $$byval_copy = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);
- $$byval_copy = sp + 32|0;
- $vararg_buffer = sp;
- $4 = sp + 16|0;
- $5 = sp + 8|0;
- $2 = $0;
- $3 = $1;
- $6 = $2;
- HEAP32[$vararg_buffer>>2] = $4;
- (_mrb_get_args($6,69199,$vararg_buffer)|0);
- $7 = $2;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$4>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$4+4>>2]|0;
- _bit_coerce($5,$7,$$byval_copy);
- $8 = HEAP32[$5>>2]|0;
- $9 = $3;
- HEAP32[$9>>2] = $8;
- STACKTOP = sp;return;
-}
-function _lshift($0,$1,$2,$3) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- var $10 = 0, $11 = 0.0, $12 = 0, $13 = 0, $14 = 0, $15 = 0.0, $16 = 0.0, $17 = 0, $18 = 0.0, $19 = 0, $20 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0.0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $4 = $1;
- $5 = $2;
- $6 = $3;
- $8 = $6;
- $9 = ($8|0)>(31);
- $10 = $5;
- if (!($9)) {
-  $19 = $6;
-  $20 = $10 << $19;
-  _mrb_fixnum_value_125($0,$20);
-  STACKTOP = sp;return;
- }
- $11 = (+($10|0));
- $7 = $11;
- while(1) {
-  $12 = $6;
-  $13 = (($12) + -1)|0;
-  $6 = $13;
-  $14 = ($12|0)!=(0);
-  if (!($14)) {
-   break;
-  }
-  $15 = $7;
-  $16 = $15 * 2.0;
-  $7 = $16;
- }
- $17 = $4;
- $18 = $7;
- _mrb_float_value($0,$17,$18);
- STACKTOP = sp;return;
-}
-function _rshift($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $1;
- $4 = $2;
- $5 = $4;
- $6 = ($5|0)>=(31);
- $7 = $3;
- do {
-  if ($6) {
-   $8 = ($7|0)<(0);
-   if ($8) {
-    _mrb_fixnum_value_125($0,-1);
-    break;
-   } else {
-    _mrb_fixnum_value_125($0,0);
-    break;
-   }
-  } else {
-   $9 = $4;
-   $10 = $7 >> $9;
-   _mrb_fixnum_value_125($0,$10);
-  }
- } while(0);
- STACKTOP = sp;return;
-}
-function _bit_coerce($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $$byval_copy = sp + 16|0;
- $4 = sp;
- $3 = $1;
- while(1) {
-  $5 = ((($2)) + 4|0);
-  $6 = HEAP32[$5>>2]|0;
-  $7 = ($6|0)==(3);
-  $8 = $7 ^ 1;
-  if (!($8)) {
-   label = 6;
-   break;
-  }
-  $9 = ((($2)) + 4|0);
-  $10 = HEAP32[$9>>2]|0;
-  $11 = ($10|0)==(6);
-  $12 = $3;
-  if ($11) {
-   label = 4;
-   break;
-  }
-  ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
-  _mrb_to_int($4,$12,$$byval_copy);
-  ;HEAP32[$2>>2]=HEAP32[$4>>2]|0;HEAP32[$2+4>>2]=HEAP32[$4+4>>2]|0;
- }
- if ((label|0) == 4) {
-  $13 = $3;
-  $14 = (_mrb_class_get($13,69204)|0);
-  _mrb_raise($12,$14,55293);
-  // unreachable;
- }
- else if ((label|0) == 6) {
-  ;HEAP32[$0>>2]=HEAP32[$2>>2]|0;HEAP32[$0+4>>2]=HEAP32[$2+4>>2]|0;
-  STACKTOP = sp;return;
- }
-}
-function _mrb_obj_eq($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0.0, $23 = 0.0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;
- var $3 = 0, $30 = 0, $31 = 0, $32 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $4 = $0;
- $5 = ((($1)) + 4|0);
- $6 = HEAP32[$5>>2]|0;
- $7 = ((($2)) + 4|0);
- $8 = HEAP32[$7>>2]|0;
- $9 = ($6|0)!=($8|0);
- L1: do {
-  if ($9) {
-   $3 = 0;
-  } else {
-   $10 = ((($1)) + 4|0);
-   $11 = HEAP32[$10>>2]|0;
-   switch ($11|0) {
-   case 2:  {
-    $3 = 1;
-    break L1;
-    break;
-   }
-   case 3: case 0:  {
-    $12 = HEAP32[$1>>2]|0;
-    $13 = HEAP32[$2>>2]|0;
-    $14 = ($12|0)==($13|0);
-    $15 = $14&1;
-    $16 = $15&255;
-    $3 = $16;
-    break L1;
-    break;
-   }
-   case 4:  {
-    $17 = HEAP32[$1>>2]|0;
-    $18 = HEAP32[$2>>2]|0;
-    $19 = ($17|0)==($18|0);
-    $20 = $19&1;
-    $21 = $20&255;
-    $3 = $21;
-    break L1;
-    break;
-   }
-   case 6:  {
-    $22 = +HEAPF32[$1>>2];
-    $23 = +HEAPF32[$2>>2];
-    $24 = $22 == $23;
-    $25 = $24&1;
-    $26 = $25&255;
-    $3 = $26;
-    break L1;
-    break;
-   }
-   default: {
-    $27 = HEAP32[$1>>2]|0;
-    $28 = HEAP32[$2>>2]|0;
-    $29 = ($27|0)==($28|0);
-    $30 = $29&1;
-    $31 = $30&255;
-    $3 = $31;
-    break L1;
-   }
-   }
-  }
- } while(0);
- $32 = $3;
- STACKTOP = sp;return ($32|0);
-}
-function _mrb_obj_equal($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $$byval_copy1 = sp + 16|0;
- $$byval_copy = sp + 8|0;
- $3 = $0;
- $4 = $3;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$1>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$1+4>>2]|0;
- ;HEAP32[$$byval_copy1>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$2+4>>2]|0;
- $5 = (_mrb_obj_eq($4,$$byval_copy,$$byval_copy1)|0);
- STACKTOP = sp;return ($5|0);
-}
-function _mrb_equal($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $$byval_copy2 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);
- $$byval_copy2 = sp + 48|0;
- $$byval_copy1 = sp + 40|0;
- $$byval_copy = sp + 32|0;
- $vararg_buffer = sp;
- $5 = sp + 16|0;
- $6 = sp + 8|0;
- $4 = $0;
- $7 = $4;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$1>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$1+4>>2]|0;
- ;HEAP32[$$byval_copy1>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$2+4>>2]|0;
- $8 = (_mrb_obj_eq($7,$$byval_copy,$$byval_copy1)|0);
- $9 = ($8<<24>>24)!=(0);
- if ($9) {
-  $3 = 1;
-  $14 = $3;
-  STACKTOP = sp;return ($14|0);
- }
- $10 = $4;
- ;HEAP8[$vararg_buffer>>0]=HEAP8[$2>>0]|0;HEAP8[$vararg_buffer+1>>0]=HEAP8[$2+1>>0]|0;HEAP8[$vararg_buffer+2>>0]=HEAP8[$2+2>>0]|0;HEAP8[$vararg_buffer+3>>0]=HEAP8[$2+3>>0]|0;HEAP8[$vararg_buffer+4>>0]=HEAP8[$2+4>>0]|0;HEAP8[$vararg_buffer+5>>0]=HEAP8[$2+5>>0]|0;HEAP8[$vararg_buffer+6>>0]=HEAP8[$2+6>>0]|0;HEAP8[$vararg_buffer+7>>0]=HEAP8[$2+7>>0]|0;
- ;HEAP32[$$byval_copy2>>2]=HEAP32[$1>>2]|0;HEAP32[$$byval_copy2+4>>2]=HEAP32[$1+4>>2]|0;
- _mrb_funcall($6,$10,$$byval_copy2,69201,1,$vararg_buffer);
- ;HEAP32[$5>>2]=HEAP32[$6>>2]|0;HEAP32[$5+4>>2]=HEAP32[$6+4>>2]|0;
- $11 = ((($5)) + 4|0);
- $12 = HEAP32[$11>>2]|0;
- $13 = ($12|0)!=(0);
- if ($13) {
-  $3 = 1;
-  $14 = $3;
-  STACKTOP = sp;return ($14|0);
- } else {
-  $3 = 0;
-  $14 = $3;
-  STACKTOP = sp;return ($14|0);
- }
- return (0)|0;
-}
-function _mrb_init_object($0) {
- $0 = $0|0;
- var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;
- var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0;
- var $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0;
- var $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $1 = $0;
- $5 = $1;
- $6 = $1;
- $7 = ((($6)) + 32|0);
- $8 = HEAP32[$7>>2]|0;
- $9 = (_mrb_define_class($5,55328,$8)|0);
- $2 = $9;
- $10 = $1;
- $11 = ((($10)) + 76|0);
- HEAP32[$11>>2] = $9;
- $12 = $1;
- $13 = $2;
- _mrb_undef_class_method($12,$13,67982);
- $14 = $1;
- $15 = $2;
- _mrb_define_method($14,$15,69093,71,262144);
- $16 = $1;
- $17 = $2;
- _mrb_define_method($16,$17,59555,72,262144);
- $18 = $1;
- $19 = $2;
- _mrb_define_method($18,$19,59553,73,262144);
- $20 = $1;
- $21 = $2;
- _mrb_define_method($20,$21,68558,74,0);
- $22 = $1;
- $23 = $2;
- _mrb_define_method($22,$23,69276,75,0);
- $24 = $1;
- $25 = $2;
- _mrb_define_method($24,$25,69281,76,0);
- $26 = $1;
- $27 = $1;
- $28 = ((($27)) + 32|0);
- $29 = HEAP32[$28>>2]|0;
- $30 = (_mrb_define_class($26,55337,$29)|0);
- $3 = $30;
- $31 = $1;
- $32 = ((($31)) + 68|0);
- HEAP32[$32>>2] = $30;
- $33 = $1;
- $34 = $3;
- _mrb_undef_class_method($33,$34,67982);
- $35 = $1;
- $36 = $3;
- _mrb_define_method($35,$36,69093,77,262144);
- $37 = $1;
- $38 = $3;
- _mrb_define_method($37,$38,59555,78,262144);
- $39 = $1;
- $40 = $3;
- _mrb_define_method($39,$40,69276,79,0);
- $41 = $1;
- $42 = $3;
- _mrb_define_method($41,$42,59553,80,262144);
- $43 = $1;
- $44 = $3;
- _mrb_define_method($43,$44,69281,79,0);
- $45 = $1;
- $46 = $1;
- $47 = ((($46)) + 32|0);
- $48 = HEAP32[$47>>2]|0;
- $49 = (_mrb_define_class($45,55347,$48)|0);
- $4 = $49;
- $50 = $1;
- $51 = ((($50)) + 72|0);
- HEAP32[$51>>2] = $49;
- $52 = $1;
- $53 = $4;
- _mrb_undef_class_method($52,$53,67982);
- $54 = $1;
- $55 = $4;
- _mrb_define_method($54,$55,69093,71,262144);
- $56 = $1;
- $57 = $4;
- _mrb_define_method($56,$57,59555,72,262144);
- $58 = $1;
- $59 = $4;
- _mrb_define_method($58,$59,69276,81,0);
- $60 = $1;
- $61 = $4;
- _mrb_define_method($60,$61,59553,73,262144);
- $62 = $1;
- $63 = $4;
- _mrb_define_method($62,$63,69281,81,0);
- STACKTOP = sp;return;
-}
-function _false_and($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $3 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $1;
- _mrb_false_value_190($0);
- STACKTOP = sp;return;
-}
-function _false_xor($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $3 = 0, $4 = 0, $5 = 0, $6 = 0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $vararg_buffer = sp;
- $4 = sp + 8|0;
- $3 = $1;
- $5 = $3;
- HEAP32[$vararg_buffer>>2] = $4;
- (_mrb_get_args($5,55358,$vararg_buffer)|0);
- $6 = HEAP8[$4>>0]|0;
- _mrb_bool_value_188($0,$6);
- STACKTOP = sp;return;
-}
-function _false_or($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $3 = 0, $4 = 0, $5 = 0, $6 = 0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $vararg_buffer = sp;
- $4 = sp + 8|0;
- $3 = $1;
- $5 = $3;
- HEAP32[$vararg_buffer>>2] = $4;
- (_mrb_get_args($5,55358,$vararg_buffer)|0);
- $6 = HEAP8[$4>>0]|0;
- _mrb_bool_value_188($0,$6);
- STACKTOP = sp;return;
-}
-function _mrb_true($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $3 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $1;
- _mrb_true_value_185($0);
- STACKTOP = sp;return;
-}
-function _nil_to_s($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $3 = 0, $4 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $1;
- $4 = $3;
- _mrb_str_new($0,$4,0,0);
- STACKTOP = sp;return;
-}
-function _nil_inspect($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $3 = 0, $4 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $1;
- $4 = $3;
- _mrb_str_new_static($0,$4,63694,3);
- STACKTOP = sp;return;
-}
-function _true_and($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $3 = 0, $4 = 0, $5 = 0, $6 = 0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $vararg_buffer = sp;
- $4 = sp + 8|0;
- $3 = $1;
- $5 = $3;
- HEAP32[$vararg_buffer>>2] = $4;
- (_mrb_get_args($5,55358,$vararg_buffer)|0);
- $6 = HEAP8[$4>>0]|0;
- _mrb_bool_value_188($0,$6);
- STACKTOP = sp;return;
-}
-function _true_xor($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $vararg_buffer = sp;
- $4 = sp + 8|0;
- $3 = $1;
- $5 = $3;
- HEAP32[$vararg_buffer>>2] = $4;
- (_mrb_get_args($5,55358,$vararg_buffer)|0);
- $6 = HEAP8[$4>>0]|0;
- $7 = ($6<<24>>24)!=(0);
- $8 = $7 ^ 1;
- $9 = $8&1;
- $10 = $9&255;
- _mrb_bool_value_188($0,$10);
- STACKTOP = sp;return;
-}
-function _true_to_s($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $3 = 0, $4 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $1;
- $4 = $3;
- _mrb_str_new_static($0,$4,63733,4);
- STACKTOP = sp;return;
-}
-function _true_or($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $3 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $1;
- _mrb_true_value_185($0);
- STACKTOP = sp;return;
-}
-function _false_to_s($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $3 = 0, $4 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $1;
- $4 = $3;
- _mrb_str_new_static($0,$4,63709,5);
- STACKTOP = sp;return;
-}
-function _mrb_true_value_185($0) {
- $0 = $0|0;
- var $1 = 0, $2 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $1 = sp;
- $2 = ((($1)) + 4|0);
- HEAP32[$2>>2] = 2;
- HEAP32[$1>>2] = 1;
- ;HEAP32[$0>>2]=HEAP32[$1>>2]|0;HEAP32[$0+4>>2]=HEAP32[$1+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_bool_value_188($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = sp;
- $2 = $1;
- $4 = $2;
- $5 = $4&255;
- $6 = ($5|0)!=(0);
- $7 = $6 ? 2 : 0;
- $8 = ((($3)) + 4|0);
- HEAP32[$8>>2] = $7;
- HEAP32[$3>>2] = 1;
- ;HEAP32[$0>>2]=HEAP32[$3>>2]|0;HEAP32[$0+4>>2]=HEAP32[$3+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_false_value_190($0) {
- $0 = $0|0;
- var $1 = 0, $2 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $1 = sp;
- $2 = ((($1)) + 4|0);
- HEAP32[$2>>2] = 0;
- HEAP32[$1>>2] = 1;
- ;HEAP32[$0>>2]=HEAP32[$1>>2]|0;HEAP32[$0+4>>2]=HEAP32[$1+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _convert_type($0,$1,$2,$3,$4,$5) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- $4 = $4|0;
- $5 = $5|0;
- var $$byval_copy = 0, $$byval_copy2 = 0, $$byval_copy3 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0;
- var $27 = 0, $28 = 0, $29 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, $vararg_ptr1 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 80|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(80|0);
- $$byval_copy3 = sp + 64|0;
- $$byval_copy2 = sp + 56|0;
- $$byval_copy = sp + 48|0;
- $vararg_buffer = sp;
- $11 = sp + 24|0;
- $12 = sp + 16|0;
- $6 = $1;
- $7 = $3;
- $8 = $4;
- $9 = $5;
- $10 = 0;
- $13 = $6;
- $14 = $8;
- $15 = (_mrb_intern_cstr($13,$14)|0);
- $10 = $15;
- $16 = $6;
- $17 = $10;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
- $18 = (_mrb_respond_to($16,$$byval_copy,$17)|0);
- $19 = ($18<<24>>24)!=(0);
- if ($19) {
-  $28 = $6;
-  $29 = $10;
-  ;HEAP32[$$byval_copy3>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy3+4>>2]=HEAP32[$2+4>>2]|0;
-  _mrb_funcall_argv($0,$28,$$byval_copy3,$29,0,0);
-  STACKTOP = sp;return;
- }
- $20 = $9;
- $21 = ($20<<24>>24)!=(0);
- if ($21) {
-  $22 = $6;
-  $23 = $6;
-  $24 = (_mrb_class_get($23,69204)|0);
-  $25 = $6;
-  ;HEAP32[$$byval_copy2>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy2+4>>2]=HEAP32[$2+4>>2]|0;
-  _inspect_type($11,$25,$$byval_copy2);
-  $26 = $6;
-  $27 = $7;
-  _mrb_str_new_cstr($12,$26,$27);
-  ;HEAP8[$vararg_buffer>>0]=HEAP8[$11>>0]|0;HEAP8[$vararg_buffer+1>>0]=HEAP8[$11+1>>0]|0;HEAP8[$vararg_buffer+2>>0]=HEAP8[$11+2>>0]|0;HEAP8[$vararg_buffer+3>>0]=HEAP8[$11+3>>0]|0;HEAP8[$vararg_buffer+4>>0]=HEAP8[$11+4>>0]|0;HEAP8[$vararg_buffer+5>>0]=HEAP8[$11+5>>0]|0;HEAP8[$vararg_buffer+6>>0]=HEAP8[$11+6>>0]|0;HEAP8[$vararg_buffer+7>>0]=HEAP8[$11+7>>0]|0;
-  $vararg_ptr1 = ((($vararg_buffer)) + 8|0);
-  ;HEAP8[$vararg_ptr1>>0]=HEAP8[$12>>0]|0;HEAP8[$vararg_ptr1+1>>0]=HEAP8[$12+1>>0]|0;HEAP8[$vararg_ptr1+2>>0]=HEAP8[$12+2>>0]|0;HEAP8[$vararg_ptr1+3>>0]=HEAP8[$12+3>>0]|0;HEAP8[$vararg_ptr1+4>>0]=HEAP8[$12+4>>0]|0;HEAP8[$vararg_ptr1+5>>0]=HEAP8[$12+5>>0]|0;HEAP8[$vararg_ptr1+6>>0]=HEAP8[$12+6>>0]|0;HEAP8[$vararg_ptr1+7>>0]=HEAP8[$12+7>>0]|0;
-  _mrb_raisef($22,$24,55368,$vararg_buffer);
-  // unreachable;
- }
- _mrb_nil_value_192($0);
- STACKTOP = sp;return;
-}
-function _mrb_nil_value_192($0) {
- $0 = $0|0;
- var $1 = 0, $2 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $1 = sp;
- $2 = ((($1)) + 4|0);
- HEAP32[$2>>2] = 0;
- HEAP32[$1>>2] = 0;
- ;HEAP32[$0>>2]=HEAP32[$1>>2]|0;HEAP32[$0+4>>2]=HEAP32[$1+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _inspect_type($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $$byval_copy1 = sp + 16|0;
- $$byval_copy = sp + 8|0;
- $3 = $1;
- $4 = ((($2)) + 4|0);
- $5 = HEAP32[$4>>2]|0;
- $6 = ($5|0)==(0);
- if (!($6)) {
-  $7 = ((($2)) + 4|0);
-  $8 = HEAP32[$7>>2]|0;
-  $9 = ($8|0)==(2);
-  if (!($9)) {
-   $11 = $3;
-   $12 = $3;
-   ;HEAP32[$$byval_copy1>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$2+4>>2]|0;
-   $13 = (_mrb_obj_classname($12,$$byval_copy1)|0);
-   _mrb_str_new_cstr($0,$11,$13);
-   STACKTOP = sp;return;
-  }
- }
- $10 = $3;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
- _mrb_inspect($0,$10,$$byval_copy);
- STACKTOP = sp;return;
-}
-function _mrb_inspect($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);
- $$byval_copy1 = sp + 32|0;
- $$byval_copy = sp + 24|0;
- $vararg_buffer = sp;
- $4 = sp + 8|0;
- $3 = $1;
- $5 = $3;
- $6 = $3;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
- _mrb_funcall($4,$6,$$byval_copy,69281,0,$vararg_buffer);
- ;HEAP32[$$byval_copy1>>2]=HEAP32[$4>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$4+4>>2]|0;
- _mrb_obj_as_string($0,$5,$$byval_copy1);
- STACKTOP = sp;return;
-}
-function _mrb_convert_type($0,$1,$2,$3,$4,$5) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- $4 = $4|0;
- $5 = $5|0;
- var $$byval_copy = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;
- var $29 = 0, $30 = 0, $31 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, $vararg_ptr1 = 0, $vararg_ptr2 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 80|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(80|0);
- $$byval_copy = sp + 72|0;
- $vararg_buffer = sp;
- $10 = sp + 48|0;
- $11 = sp + 40|0;
- $12 = sp + 32|0;
- $13 = sp + 24|0;
- $6 = $1;
- $7 = $3;
- $8 = $4;
- $9 = $5;
- $14 = ((($2)) + 4|0);
- $15 = HEAP32[$14>>2]|0;
- $16 = $7;
- $17 = ($15|0)==($16|0);
- if ($17) {
-  ;HEAP32[$0>>2]=HEAP32[$2>>2]|0;HEAP32[$0+4>>2]=HEAP32[$2+4>>2]|0;
-  STACKTOP = sp;return;
- }
- $18 = $6;
- $19 = $8;
- $20 = $9;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
- _convert_type($11,$18,$$byval_copy,$19,$20,1);
- ;HEAP32[$10>>2]=HEAP32[$11>>2]|0;HEAP32[$10+4>>2]=HEAP32[$11+4>>2]|0;
- $21 = ((($10)) + 4|0);
- $22 = HEAP32[$21>>2]|0;
- $23 = $7;
- $24 = ($22|0)!=($23|0);
- if ($24) {
-  $25 = $6;
-  $26 = $6;
-  $27 = (_mrb_class_get($26,69204)|0);
-  $28 = $6;
-  $29 = $8;
-  _mrb_str_new_cstr($12,$28,$29);
-  $30 = $6;
-  $31 = $9;
-  _mrb_str_new_cstr($13,$30,$31);
-  ;HEAP8[$vararg_buffer>>0]=HEAP8[$2>>0]|0;HEAP8[$vararg_buffer+1>>0]=HEAP8[$2+1>>0]|0;HEAP8[$vararg_buffer+2>>0]=HEAP8[$2+2>>0]|0;HEAP8[$vararg_buffer+3>>0]=HEAP8[$2+3>>0]|0;HEAP8[$vararg_buffer+4>>0]=HEAP8[$2+4>>0]|0;HEAP8[$vararg_buffer+5>>0]=HEAP8[$2+5>>0]|0;HEAP8[$vararg_buffer+6>>0]=HEAP8[$2+6>>0]|0;HEAP8[$vararg_buffer+7>>0]=HEAP8[$2+7>>0]|0;
-  $vararg_ptr1 = ((($vararg_buffer)) + 8|0);
-  ;HEAP8[$vararg_ptr1>>0]=HEAP8[$12>>0]|0;HEAP8[$vararg_ptr1+1>>0]=HEAP8[$12+1>>0]|0;HEAP8[$vararg_ptr1+2>>0]=HEAP8[$12+2>>0]|0;HEAP8[$vararg_ptr1+3>>0]=HEAP8[$12+3>>0]|0;HEAP8[$vararg_ptr1+4>>0]=HEAP8[$12+4>>0]|0;HEAP8[$vararg_ptr1+5>>0]=HEAP8[$12+5>>0]|0;HEAP8[$vararg_ptr1+6>>0]=HEAP8[$12+6>>0]|0;HEAP8[$vararg_ptr1+7>>0]=HEAP8[$12+7>>0]|0;
-  $vararg_ptr2 = ((($vararg_buffer)) + 16|0);
-  ;HEAP8[$vararg_ptr2>>0]=HEAP8[$13>>0]|0;HEAP8[$vararg_ptr2+1>>0]=HEAP8[$13+1>>0]|0;HEAP8[$vararg_ptr2+2>>0]=HEAP8[$13+2>>0]|0;HEAP8[$vararg_ptr2+3>>0]=HEAP8[$13+3>>0]|0;HEAP8[$vararg_ptr2+4>>0]=HEAP8[$13+4>>0]|0;HEAP8[$vararg_ptr2+5>>0]=HEAP8[$13+5>>0]|0;HEAP8[$vararg_ptr2+6>>0]=HEAP8[$13+6>>0]|0;HEAP8[$vararg_ptr2+7>>0]=HEAP8[$13+7>>0]|0;
-  _mrb_raisef($25,$27,55393,$vararg_buffer);
-  // unreachable;
- }
- ;HEAP32[$0>>2]=HEAP32[$10>>2]|0;HEAP32[$0+4>>2]=HEAP32[$10+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_check_convert_type($0,$1,$2,$3,$4,$5) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- $4 = $4|0;
- $5 = $5|0;
- var $$byval_copy = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;
- var $29 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $or$cond = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);
- $$byval_copy = sp + 32|0;
- $10 = sp + 8|0;
- $11 = sp;
- $6 = $1;
- $7 = $3;
- $8 = $4;
- $9 = $5;
- $12 = ((($2)) + 4|0);
- $13 = HEAP32[$12>>2]|0;
- $14 = $7;
- $15 = ($13|0)==($14|0);
- $16 = $7;
- $17 = ($16|0)!=(21);
- $or$cond = $15 & $17;
- if ($or$cond) {
-  ;HEAP32[$0>>2]=HEAP32[$2>>2]|0;HEAP32[$0+4>>2]=HEAP32[$2+4>>2]|0;
-  STACKTOP = sp;return;
- }
- $18 = $6;
- $19 = $8;
- $20 = $9;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
- _convert_type($11,$18,$$byval_copy,$19,$20,0);
- ;HEAP32[$10>>2]=HEAP32[$11>>2]|0;HEAP32[$10+4>>2]=HEAP32[$11+4>>2]|0;
- $21 = ((($10)) + 4|0);
- $22 = HEAP32[$21>>2]|0;
- $23 = ($22|0)==(0);
- if ($23) {
-  $24 = HEAP32[$10>>2]|0;
-  $25 = ($24|0)!=(0);
-  if ($25) {
-   label = 5;
-  }
- } else {
-  label = 5;
- }
- if ((label|0) == 5) {
-  $26 = ((($10)) + 4|0);
-  $27 = HEAP32[$26>>2]|0;
-  $28 = $7;
-  $29 = ($27|0)!=($28|0);
-  if (!($29)) {
-   ;HEAP32[$0>>2]=HEAP32[$10>>2]|0;HEAP32[$0+4>>2]=HEAP32[$10+4>>2]|0;
-   STACKTOP = sp;return;
-  }
- }
- _mrb_nil_value_192($0);
- STACKTOP = sp;return;
-}
-function _mrb_check_type($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $$byval_copy7 = 0, $$byval_copy8 = 0, $$byval_copy9 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0;
- var $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0;
- var $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0;
- var $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $8 = 0, $9 = 0, $or$cond = 0, $vararg_buffer = 0;
- var $vararg_buffer3 = 0, $vararg_ptr2 = 0, $vararg_ptr6 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 144|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(144|0);
- $$byval_copy9 = sp + 136|0;
- $$byval_copy8 = sp + 128|0;
- $$byval_copy7 = sp + 120|0;
- $$byval_copy = sp + 112|0;
- $vararg_buffer3 = sp + 16|0;
- $vararg_buffer = sp;
- $8 = sp + 80|0;
- $9 = sp + 72|0;
- $10 = sp + 64|0;
- $11 = sp + 56|0;
- $12 = sp + 48|0;
- $13 = sp + 40|0;
- $14 = sp + 32|0;
- $3 = $0;
- $4 = $2;
- $5 = 56;
- $15 = ((($1)) + 4|0);
- $16 = HEAP32[$15>>2]|0;
- $6 = $16;
- $17 = $6;
- $18 = $4;
- $19 = ($17|0)!=($18|0);
- $20 = $6;
- $21 = ($20|0)==(21);
- $or$cond = $19 | $21;
- if (!($or$cond)) {
-  STACKTOP = sp;return;
- }
- while(1) {
-  $22 = $5;
-  $23 = HEAP8[$22>>0]|0;
-  $24 = $23&255;
-  $25 = ($24|0)<(23);
-  if (!($25)) {
-   label = 19;
-   break;
-  }
-  $26 = $5;
-  $27 = HEAP8[$26>>0]|0;
-  $28 = $27&255;
-  $29 = $4;
-  $30 = ($28|0)==($29|0);
-  if ($30) {
-   break;
-  }
-  $69 = $5;
-  $70 = ((($69)) + 8|0);
-  $5 = $70;
- }
- if ((label|0) == 19) {
-  $71 = $3;
-  $72 = $3;
-  $73 = (_mrb_class_get($72,69204)|0);
-  $74 = $4;
-  _mrb_fixnum_value_201($13,$74);
-  $75 = ((($1)) + 4|0);
-  $76 = HEAP32[$75>>2]|0;
-  _mrb_fixnum_value_201($14,$76);
-  ;HEAP8[$vararg_buffer3>>0]=HEAP8[$13>>0]|0;HEAP8[$vararg_buffer3+1>>0]=HEAP8[$13+1>>0]|0;HEAP8[$vararg_buffer3+2>>0]=HEAP8[$13+2>>0]|0;HEAP8[$vararg_buffer3+3>>0]=HEAP8[$13+3>>0]|0;HEAP8[$vararg_buffer3+4>>0]=HEAP8[$13+4>>0]|0;HEAP8[$vararg_buffer3+5>>0]=HEAP8[$13+5>>0]|0;HEAP8[$vararg_buffer3+6>>0]=HEAP8[$13+6>>0]|0;HEAP8[$vararg_buffer3+7>>0]=HEAP8[$13+7>>0]|0;
-  $vararg_ptr6 = ((($vararg_buffer3)) + 8|0);
-  ;HEAP8[$vararg_ptr6>>0]=HEAP8[$14>>0]|0;HEAP8[$vararg_ptr6+1>>0]=HEAP8[$14+1>>0]|0;HEAP8[$vararg_ptr6+2>>0]=HEAP8[$14+2>>0]|0;HEAP8[$vararg_ptr6+3>>0]=HEAP8[$14+3>>0]|0;HEAP8[$vararg_ptr6+4>>0]=HEAP8[$14+4>>0]|0;HEAP8[$vararg_ptr6+5>>0]=HEAP8[$14+5>>0]|0;HEAP8[$vararg_ptr6+6>>0]=HEAP8[$14+6>>0]|0;HEAP8[$vararg_ptr6+7>>0]=HEAP8[$14+7>>0]|0;
-  _mrb_raisef($71,$73,55436,$vararg_buffer3);
-  // unreachable;
- }
- $31 = ((($1)) + 4|0);
- $32 = HEAP32[$31>>2]|0;
- $33 = ($32|0)==(0);
- if ($33) {
-  $34 = HEAP32[$1>>2]|0;
-  $35 = ($34|0)!=(0);
-  if ($35) {
-   label = 7;
-  } else {
-   $7 = 63694;
-  }
- } else {
-  label = 7;
- }
- do {
-  if ((label|0) == 7) {
-   $36 = ((($1)) + 4|0);
-   $37 = HEAP32[$36>>2]|0;
-   $38 = ($37|0)==(3);
-   if ($38) {
-    $7 = 55429;
-    break;
-   }
-   $39 = ((($1)) + 4|0);
-   $40 = HEAP32[$39>>2]|0;
-   $41 = ($40|0)==(4);
-   if ($41) {
-    $7 = 56484;
-    break;
-   }
-   $42 = ((($1)) + 4|0);
-   $43 = HEAP32[$42>>2]|0;
-   $44 = ($43>>>0)<(8);
-   $45 = $3;
-   if (!($44)) {
-    ;HEAP32[$$byval_copy9>>2]=HEAP32[$1>>2]|0;HEAP32[$$byval_copy9+4>>2]=HEAP32[$1+4>>2]|0;
-    $59 = (_mrb_obj_classname($45,$$byval_copy9)|0);
-    $7 = $59;
-    break;
-   }
-   ;HEAP32[$$byval_copy>>2]=HEAP32[$1>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$1+4>>2]|0;
-   _mrb_obj_as_string($8,$45,$$byval_copy);
-   $46 = HEAP32[$8>>2]|0;
-   $47 = HEAP32[$46>>2]|0;
-   $48 = $47 >>> 11;
-   $49 = $48 & 8;
-   $50 = ($49|0)!=(0);
-   $51 = $3;
-   if ($50) {
-    ;HEAP32[$$byval_copy7>>2]=HEAP32[$1>>2]|0;HEAP32[$$byval_copy7+4>>2]=HEAP32[$1+4>>2]|0;
-    _mrb_obj_as_string($9,$51,$$byval_copy7);
-    $52 = HEAP32[$9>>2]|0;
-    $53 = ((($52)) + 12|0);
-    $58 = $53;
-   } else {
-    ;HEAP32[$$byval_copy8>>2]=HEAP32[$1>>2]|0;HEAP32[$$byval_copy8+4>>2]=HEAP32[$1+4>>2]|0;
-    _mrb_obj_as_string($10,$51,$$byval_copy8);
-    $54 = HEAP32[$10>>2]|0;
-    $55 = ((($54)) + 12|0);
-    $56 = ((($55)) + 8|0);
-    $57 = HEAP32[$56>>2]|0;
-    $58 = $57;
-   }
-   $7 = $58;
-  }
- } while(0);
- $60 = $3;
- $61 = $3;
- $62 = (_mrb_class_get($61,69204)|0);
- $63 = $3;
- $64 = $7;
- _mrb_str_new_cstr($11,$63,$64);
- $65 = $3;
- $66 = $5;
- $67 = ((($66)) + 4|0);
- $68 = HEAP32[$67>>2]|0;
- _mrb_str_new_cstr($12,$65,$68);
- ;HEAP8[$vararg_buffer>>0]=HEAP8[$11>>0]|0;HEAP8[$vararg_buffer+1>>0]=HEAP8[$11+1>>0]|0;HEAP8[$vararg_buffer+2>>0]=HEAP8[$11+2>>0]|0;HEAP8[$vararg_buffer+3>>0]=HEAP8[$11+3>>0]|0;HEAP8[$vararg_buffer+4>>0]=HEAP8[$11+4>>0]|0;HEAP8[$vararg_buffer+5>>0]=HEAP8[$11+5>>0]|0;HEAP8[$vararg_buffer+6>>0]=HEAP8[$11+6>>0]|0;HEAP8[$vararg_buffer+7>>0]=HEAP8[$11+7>>0]|0;
- $vararg_ptr2 = ((($vararg_buffer)) + 8|0);
- ;HEAP8[$vararg_ptr2>>0]=HEAP8[$12>>0]|0;HEAP8[$vararg_ptr2+1>>0]=HEAP8[$12+1>>0]|0;HEAP8[$vararg_ptr2+2>>0]=HEAP8[$12+2>>0]|0;HEAP8[$vararg_ptr2+3>>0]=HEAP8[$12+3>>0]|0;HEAP8[$vararg_ptr2+4>>0]=HEAP8[$12+4>>0]|0;HEAP8[$vararg_ptr2+5>>0]=HEAP8[$12+5>>0]|0;HEAP8[$vararg_ptr2+6>>0]=HEAP8[$12+6>>0]|0;HEAP8[$vararg_ptr2+7>>0]=HEAP8[$12+7>>0]|0;
- _mrb_raisef($60,$62,68087,$vararg_buffer);
- // unreachable;
-}
-function _mrb_fixnum_value_201($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = sp;
- $2 = $1;
- $4 = ((($3)) + 4|0);
- HEAP32[$4>>2] = 3;
- $5 = $2;
- HEAP32[$3>>2] = $5;
- ;HEAP32[$0>>2]=HEAP32[$3>>2]|0;HEAP32[$0+4>>2]=HEAP32[$3+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_any_to_s($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $$byval_copy2 = 0, $$byval_copy3 = 0, $$byval_copy4 = 0, $$byval_copy5 = 0, $$byval_copy6 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $3 = 0;
- var $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 128|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(128|0);
- $$byval_copy6 = sp + 112|0;
- $$byval_copy5 = sp + 104|0;
- $$byval_copy4 = sp + 96|0;
- $$byval_copy3 = sp + 88|0;
- $$byval_copy2 = sp + 80|0;
- $$byval_copy1 = sp + 72|0;
- $$byval_copy = sp + 64|0;
- $4 = sp + 48|0;
- $6 = sp + 32|0;
- $7 = sp + 24|0;
- $8 = sp + 16|0;
- $9 = sp + 8|0;
- $10 = sp;
- $3 = $1;
- $11 = $3;
- _mrb_str_buf_new($4,$11,20);
- $12 = $3;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
- $13 = (_mrb_obj_classname($12,$$byval_copy)|0);
- $5 = $13;
- $14 = $3;
- ;HEAP32[$$byval_copy1>>2]=HEAP32[$4>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$4+4>>2]|0;
- _mrb_str_cat($6,$14,$$byval_copy1,55493,2);
- $15 = $3;
- $16 = $5;
- ;HEAP32[$$byval_copy2>>2]=HEAP32[$4>>2]|0;HEAP32[$$byval_copy2+4>>2]=HEAP32[$4+4>>2]|0;
- _mrb_str_cat_cstr($7,$15,$$byval_copy2,$16);
- $17 = $3;
- ;HEAP32[$$byval_copy3>>2]=HEAP32[$4>>2]|0;HEAP32[$$byval_copy3+4>>2]=HEAP32[$4+4>>2]|0;
- _mrb_str_cat($8,$17,$$byval_copy3,68074,1);
- $18 = $3;
- $19 = $3;
- $20 = HEAP32[$2>>2]|0;
- _mrb_ptr_to_str($9,$19,$20);
- ;HEAP32[$$byval_copy4>>2]=HEAP32[$4>>2]|0;HEAP32[$$byval_copy4+4>>2]=HEAP32[$4+4>>2]|0;
- ;HEAP32[$$byval_copy5>>2]=HEAP32[$9>>2]|0;HEAP32[$$byval_copy5+4>>2]=HEAP32[$9+4>>2]|0;
- _mrb_str_concat($18,$$byval_copy4,$$byval_copy5);
- $21 = $3;
- ;HEAP32[$$byval_copy6>>2]=HEAP32[$4>>2]|0;HEAP32[$$byval_copy6+4>>2]=HEAP32[$4+4>>2]|0;
- _mrb_str_cat($10,$21,$$byval_copy6,65540,1);
- ;HEAP32[$0>>2]=HEAP32[$4>>2]|0;HEAP32[$0+4>>2]=HEAP32[$4+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_obj_is_kind_of($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $$off = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;
- var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0;
- var $46 = 0, $47 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $switch = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $$byval_copy = sp + 16|0;
- $4 = $0;
- $5 = $2;
- $7 = $4;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$1>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$1+4>>2]|0;
- $8 = (_mrb_class($7,$$byval_copy)|0);
- $6 = $8;
- $9 = $5;
- $10 = HEAP32[$9>>2]|0;
- $11 = $10 & 255;
- $$off = (($11) + -9)|0;
- $switch = ($$off>>>0)<(3);
- if (!($switch)) {
-  $12 = $4;
-  $13 = $4;
-  $14 = (_mrb_class_get($13,69204)|0);
-  _mrb_raise($12,$14,55496);
-  // unreachable;
- }
- $15 = $5;
- $16 = HEAP32[$15>>2]|0;
- $17 = $16 >>> 11;
- $18 = $17 & 524288;
- $19 = ($18|0)!=(0);
- L4: do {
-  if ($19) {
-   $20 = $5;
-   $21 = ((($20)) + 20|0);
-   $22 = HEAP32[$21>>2]|0;
-   $5 = $22;
-   while(1) {
-    $23 = $5;
-    $24 = HEAP32[$23>>2]|0;
-    $25 = $24 >>> 11;
-    $26 = $25 & 1048576;
-    $27 = ($26|0)!=(0);
-    $28 = $27 ^ 1;
-    if (!($28)) {
-     break L4;
-    }
-    $29 = $5;
-    $30 = ((($29)) + 20|0);
-    $31 = HEAP32[$30>>2]|0;
-    $5 = $31;
-   }
-  }
- } while(0);
- while(1) {
-  $32 = $6;
-  $33 = ($32|0)!=(0|0);
-  if (!($33)) {
-   label = 12;
-   break;
-  }
-  $34 = $6;
-  $35 = $5;
-  $36 = ($34|0)==($35|0);
-  if ($36) {
-   label = 10;
-   break;
-  }
-  $37 = $6;
-  $38 = ((($37)) + 16|0);
-  $39 = HEAP32[$38>>2]|0;
-  $40 = $5;
-  $41 = ((($40)) + 16|0);
-  $42 = HEAP32[$41>>2]|0;
-  $43 = ($39|0)==($42|0);
-  if ($43) {
-   label = 10;
-   break;
-  }
-  $44 = $6;
-  $45 = ((($44)) + 20|0);
-  $46 = HEAP32[$45>>2]|0;
-  $6 = $46;
- }
- if ((label|0) == 10) {
-  $3 = 1;
-  $47 = $3;
-  STACKTOP = sp;return ($47|0);
- }
- else if ((label|0) == 12) {
-  $3 = 0;
-  $47 = $3;
-  STACKTOP = sp;return ($47|0);
- }
- return (0)|0;
-}
-function _mrb_class($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;
- var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $0;
- $4 = ((($1)) + 4|0);
- $5 = HEAP32[$4>>2]|0;
- L1: do {
-  switch ($5|0) {
-  case 0:  {
-   $6 = HEAP32[$1>>2]|0;
-   $7 = ($6|0)!=(0);
-   $8 = $3;
-   if ($7) {
-    $9 = ((($8)) + 72|0);
-    $10 = HEAP32[$9>>2]|0;
-    $2 = $10;
-    break L1;
-   } else {
-    $11 = ((($8)) + 76|0);
-    $12 = HEAP32[$11>>2]|0;
-    $2 = $12;
-    break L1;
-   }
-   break;
-  }
-  case 2:  {
-   $13 = $3;
-   $14 = ((($13)) + 68|0);
-   $15 = HEAP32[$14>>2]|0;
-   $2 = $15;
-   break;
-  }
-  case 4:  {
-   $16 = $3;
-   $17 = ((($16)) + 80|0);
-   $18 = HEAP32[$17>>2]|0;
-   $2 = $18;
-   break;
-  }
-  case 3:  {
-   $19 = $3;
-   $20 = ((($19)) + 64|0);
-   $21 = HEAP32[$20>>2]|0;
-   $2 = $21;
-   break;
-  }
-  case 6:  {
-   $22 = $3;
-   $23 = ((($22)) + 60|0);
-   $24 = HEAP32[$23>>2]|0;
-   $2 = $24;
-   break;
-  }
-  case 7:  {
-   $25 = $3;
-   $26 = ((($25)) + 32|0);
-   $27 = HEAP32[$26>>2]|0;
-   $2 = $27;
-   break;
-  }
-  case 20:  {
-   $2 = 0;
-   break;
-  }
-  default: {
-   $28 = HEAP32[$1>>2]|0;
-   $29 = ((($28)) + 4|0);
-   $30 = HEAP32[$29>>2]|0;
-   $2 = $30;
-  }
-  }
- } while(0);
- $31 = $2;
- STACKTOP = sp;return ($31|0);
-}
-function _mrb_to_int($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $3 = 0, $4 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $$byval_copy = sp + 8|0;
- $3 = $1;
- $4 = $3;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
- _mrb_to_integer($0,$4,$$byval_copy,55521);
- STACKTOP = sp;return;
-}
-function _mrb_to_integer($0,$1,$2,$3) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- var $$byval_copy = 0, $$byval_copy4 = 0, $$byval_copy5 = 0, $$byval_copy6 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0;
- var $26 = 0, $27 = 0, $28 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, $vararg_ptr1 = 0, $vararg_ptr2 = 0, $vararg_ptr3 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 112|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(112|0);
- $$byval_copy6 = sp + 104|0;
- $$byval_copy5 = sp + 96|0;
- $$byval_copy4 = sp + 88|0;
- $$byval_copy = sp + 80|0;
- $vararg_buffer = sp;
- $6 = sp + 64|0;
- $7 = sp + 56|0;
- $8 = sp + 48|0;
- $9 = sp + 40|0;
- $10 = sp + 32|0;
- $4 = $1;
- $5 = $3;
- $11 = ((($2)) + 4|0);
- $12 = HEAP32[$11>>2]|0;
- $13 = ($12|0)==(3);
- if ($13) {
-  ;HEAP32[$0>>2]=HEAP32[$2>>2]|0;HEAP32[$0+4>>2]=HEAP32[$2+4>>2]|0;
-  STACKTOP = sp;return;
- }
- $14 = $4;
- $15 = $5;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
- _convert_type($7,$14,$$byval_copy,55360,$15,1);
- ;HEAP32[$6>>2]=HEAP32[$7>>2]|0;HEAP32[$6+4>>2]=HEAP32[$7+4>>2]|0;
- $16 = $4;
- $17 = $4;
- $18 = ((($17)) + 64|0);
- $19 = HEAP32[$18>>2]|0;
- ;HEAP32[$$byval_copy4>>2]=HEAP32[$6>>2]|0;HEAP32[$$byval_copy4+4>>2]=HEAP32[$6+4>>2]|0;
- $20 = (_mrb_obj_is_kind_of($16,$$byval_copy4,$19)|0);
- $21 = ($20<<24>>24)!=(0);
- if (!($21)) {
-  $22 = $4;
-  ;HEAP32[$$byval_copy5>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy5+4>>2]=HEAP32[$2+4>>2]|0;
-  _inspect_type($8,$22,$$byval_copy5);
-  $23 = $4;
-  $24 = $4;
-  $25 = (_mrb_class_get($24,69204)|0);
-  $26 = $4;
-  $27 = $5;
-  _mrb_str_new_cstr($9,$26,$27);
-  $28 = $4;
-  ;HEAP32[$$byval_copy6>>2]=HEAP32[$6>>2]|0;HEAP32[$$byval_copy6+4>>2]=HEAP32[$6+4>>2]|0;
-  _inspect_type($10,$28,$$byval_copy6);
-  ;HEAP8[$vararg_buffer>>0]=HEAP8[$8>>0]|0;HEAP8[$vararg_buffer+1>>0]=HEAP8[$8+1>>0]|0;HEAP8[$vararg_buffer+2>>0]=HEAP8[$8+2>>0]|0;HEAP8[$vararg_buffer+3>>0]=HEAP8[$8+3>>0]|0;HEAP8[$vararg_buffer+4>>0]=HEAP8[$8+4>>0]|0;HEAP8[$vararg_buffer+5>>0]=HEAP8[$8+5>>0]|0;HEAP8[$vararg_buffer+6>>0]=HEAP8[$8+6>>0]|0;HEAP8[$vararg_buffer+7>>0]=HEAP8[$8+7>>0]|0;
-  $vararg_ptr1 = ((($vararg_buffer)) + 8|0);
-  ;HEAP8[$vararg_ptr1>>0]=HEAP8[$8>>0]|0;HEAP8[$vararg_ptr1+1>>0]=HEAP8[$8+1>>0]|0;HEAP8[$vararg_ptr1+2>>0]=HEAP8[$8+2>>0]|0;HEAP8[$vararg_ptr1+3>>0]=HEAP8[$8+3>>0]|0;HEAP8[$vararg_ptr1+4>>0]=HEAP8[$8+4>>0]|0;HEAP8[$vararg_ptr1+5>>0]=HEAP8[$8+5>>0]|0;HEAP8[$vararg_ptr1+6>>0]=HEAP8[$8+6>>0]|0;HEAP8[$vararg_ptr1+7>>0]=HEAP8[$8+7>>0]|0;
-  $vararg_ptr2 = ((($vararg_buffer)) + 16|0);
-  ;HEAP8[$vararg_ptr2>>0]=HEAP8[$9>>0]|0;HEAP8[$vararg_ptr2+1>>0]=HEAP8[$9+1>>0]|0;HEAP8[$vararg_ptr2+2>>0]=HEAP8[$9+2>>0]|0;HEAP8[$vararg_ptr2+3>>0]=HEAP8[$9+3>>0]|0;HEAP8[$vararg_ptr2+4>>0]=HEAP8[$9+4>>0]|0;HEAP8[$vararg_ptr2+5>>0]=HEAP8[$9+5>>0]|0;HEAP8[$vararg_ptr2+6>>0]=HEAP8[$9+6>>0]|0;HEAP8[$vararg_ptr2+7>>0]=HEAP8[$9+7>>0]|0;
-  $vararg_ptr3 = ((($vararg_buffer)) + 24|0);
-  ;HEAP8[$vararg_ptr3>>0]=HEAP8[$10>>0]|0;HEAP8[$vararg_ptr3+1>>0]=HEAP8[$10+1>>0]|0;HEAP8[$vararg_ptr3+2>>0]=HEAP8[$10+2>>0]|0;HEAP8[$vararg_ptr3+3>>0]=HEAP8[$10+3>>0]|0;HEAP8[$vararg_ptr3+4>>0]=HEAP8[$10+4>>0]|0;HEAP8[$vararg_ptr3+5>>0]=HEAP8[$10+5>>0]|0;HEAP8[$vararg_ptr3+6>>0]=HEAP8[$10+6>>0]|0;HEAP8[$vararg_ptr3+7>>0]=HEAP8[$10+7>>0]|0;
-  _mrb_raisef($23,$25,55528,$vararg_buffer);
-  // unreachable;
- }
- ;HEAP32[$0>>2]=HEAP32[$6>>2]|0;HEAP32[$0+4>>2]=HEAP32[$6+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_convert_to_integer($0,$1,$2,$3) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $$byval_copy2 = 0, $$byval_copy3 = 0, $$byval_copy4 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0.0, $24 = 0;
- var $25 = 0.0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0;
- var $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 80|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(80|0);
- $$byval_copy4 = sp + 64|0;
- $$byval_copy3 = sp + 56|0;
- $$byval_copy2 = sp + 48|0;
- $$byval_copy1 = sp + 40|0;
- $$byval_copy = sp + 32|0;
- $6 = sp + 16|0;
- $7 = sp + 8|0;
- $8 = sp;
- $4 = $1;
- $5 = $3;
- $9 = ((($2)) + 4|0);
- $10 = HEAP32[$9>>2]|0;
- $11 = ($10|0)==(0);
- if ($11) {
-  $12 = HEAP32[$2>>2]|0;
-  $13 = ($12|0)!=(0);
-  if (!($13)) {
-   $14 = $5;
-   $15 = ($14|0)!=(0);
-   if ($15) {
-    $40 = $4;
-    $41 = $4;
-    $42 = (_mrb_class_get($41,69160)|0);
-    _mrb_raise($40,$42,55604);
-    // unreachable;
-   } else {
-    $16 = $4;
-    $17 = $4;
-    $18 = (_mrb_class_get($17,69204)|0);
-    _mrb_raise($16,$18,55573);
-    // unreachable;
-   }
-  }
- }
- $19 = ((($2)) + 4|0);
- $20 = HEAP32[$19>>2]|0;
- switch ($20|0) {
- case 6:  {
-  label = 6;
-  break;
- }
- case 3:  {
-  $28 = $5;
-  $29 = ($28|0)!=(0);
-  if ($29) {
-   $40 = $4;
-   $41 = $4;
-   $42 = (_mrb_class_get($41,69160)|0);
-   _mrb_raise($40,$42,55604);
-   // unreachable;
-  }
-  ;HEAP32[$0>>2]=HEAP32[$2>>2]|0;HEAP32[$0+4>>2]=HEAP32[$2+4>>2]|0;
-  STACKTOP = sp;return;
-  break;
- }
- case 16:  {
-  break;
- }
- default: {
-  label = 13;
- }
- }
- do {
-  if ((label|0) == 6) {
-   $21 = $5;
-   $22 = ($21|0)!=(0);
-   if ($22) {
-    $40 = $4;
-    $41 = $4;
-    $42 = (_mrb_class_get($41,69160)|0);
-    _mrb_raise($40,$42,55604);
-    // unreachable;
-   }
-   $23 = +HEAPF32[$2>>2];
-   $24 = $23 <= 2147483648.0;
-   if ($24) {
-    $25 = +HEAPF32[$2>>2];
-    $26 = $25 >= -2147483648.0;
-    if ($26) {
-     label = 13;
-     break;
-    }
-   }
-   $27 = $4;
-   ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
-   _mrb_flo_to_fixnum($0,$27,$$byval_copy);
-   STACKTOP = sp;return;
-  }
- } while(0);
- do {
-  if ((label|0) == 13) {
-   $32 = $5;
-   $33 = ($32|0)!=(0);
-   $34 = $4;
-   if ($33) {
-    ;HEAP32[$$byval_copy2>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy2+4>>2]=HEAP32[$2+4>>2]|0;
-    _mrb_check_string_type($7,$34,$$byval_copy2);
-    ;HEAP32[$6>>2]=HEAP32[$7>>2]|0;HEAP32[$6+4>>2]=HEAP32[$7+4>>2]|0;
-    $35 = ((($6)) + 4|0);
-    $36 = HEAP32[$35>>2]|0;
-    $37 = ($36|0)==(0);
-    if (!($37)) {
-     break;
-    }
-    $38 = HEAP32[$6>>2]|0;
-    $39 = ($38|0)!=(0);
-    if ($39) {
-     break;
-    }
-    $40 = $4;
-    $41 = $4;
-    $42 = (_mrb_class_get($41,69160)|0);
-    _mrb_raise($40,$42,55604);
-    // unreachable;
-   }
-   ;HEAP32[$$byval_copy3>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy3+4>>2]=HEAP32[$2+4>>2]|0;
-   _convert_type($8,$34,$$byval_copy3,55360,55521,0);
-   ;HEAP32[$6>>2]=HEAP32[$8>>2]|0;HEAP32[$6+4>>2]=HEAP32[$8+4>>2]|0;
-   $43 = ((($6)) + 4|0);
-   $44 = HEAP32[$43>>2]|0;
-   $45 = ($44|0)==(0);
-   if ($45) {
-    $46 = HEAP32[$6>>2]|0;
-    $47 = ($46|0)!=(0);
-    if (!($47)) {
-     $48 = $4;
-     ;HEAP32[$$byval_copy4>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy4+4>>2]=HEAP32[$2+4>>2]|0;
-     _mrb_to_integer($0,$48,$$byval_copy4,56301);
-     STACKTOP = sp;return;
-    }
-   }
-   ;HEAP32[$0>>2]=HEAP32[$6>>2]|0;HEAP32[$0+4>>2]=HEAP32[$6+4>>2]|0;
-   STACKTOP = sp;return;
-  }
- } while(0);
- $30 = $4;
- $31 = $5;
- ;HEAP32[$$byval_copy1>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$2+4>>2]|0;
- _mrb_str_to_inum($0,$30,$$byval_copy1,$31,1);
- STACKTOP = sp;return;
-}
-function _mrb_Integer($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $3 = 0, $4 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $$byval_copy = sp + 8|0;
- $3 = $1;
- $4 = $3;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
- _mrb_convert_to_integer($0,$4,$$byval_copy,0);
- STACKTOP = sp;return;
-}
-function _mrb_eql($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $$byval_copy2 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);
- $$byval_copy2 = sp + 40|0;
- $$byval_copy1 = sp + 32|0;
- $$byval_copy = sp + 24|0;
- $vararg_buffer = sp;
- $5 = sp + 8|0;
- $4 = $0;
- $6 = $4;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$1>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$1+4>>2]|0;
- ;HEAP32[$$byval_copy1>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$2+4>>2]|0;
- $7 = (_mrb_obj_eq($6,$$byval_copy,$$byval_copy1)|0);
- $8 = ($7<<24>>24)!=(0);
- if ($8) {
-  $3 = 1;
-  $15 = $3;
-  STACKTOP = sp;return ($15|0);
- } else {
-  $9 = $4;
-  ;HEAP8[$vararg_buffer>>0]=HEAP8[$2>>0]|0;HEAP8[$vararg_buffer+1>>0]=HEAP8[$2+1>>0]|0;HEAP8[$vararg_buffer+2>>0]=HEAP8[$2+2>>0]|0;HEAP8[$vararg_buffer+3>>0]=HEAP8[$2+3>>0]|0;HEAP8[$vararg_buffer+4>>0]=HEAP8[$2+4>>0]|0;HEAP8[$vararg_buffer+5>>0]=HEAP8[$2+5>>0]|0;HEAP8[$vararg_buffer+6>>0]=HEAP8[$2+6>>0]|0;HEAP8[$vararg_buffer+7>>0]=HEAP8[$2+7>>0]|0;
-  ;HEAP32[$$byval_copy2>>2]=HEAP32[$1>>2]|0;HEAP32[$$byval_copy2+4>>2]=HEAP32[$1+4>>2]|0;
-  _mrb_funcall($5,$9,$$byval_copy2,69289,1,$vararg_buffer);
-  $10 = ((($5)) + 4|0);
-  $11 = HEAP32[$10>>2]|0;
-  $12 = ($11|0)!=(0);
-  $13 = $12&1;
-  $14 = $13&255;
-  $3 = $14;
-  $15 = $3;
-  STACKTOP = sp;return ($15|0);
- }
- return (0)|0;
-}
-function _mrb_p($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $$byval_copy1 = sp + 24|0;
- $$byval_copy = sp + 16|0;
- $3 = sp;
- $2 = $0;
- $4 = $2;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$1>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$1+4>>2]|0;
- _mrb_inspect($3,$4,$$byval_copy);
- $5 = HEAP32[762]|0;
- ;HEAP32[$$byval_copy1>>2]=HEAP32[$3>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$3+4>>2]|0;
- _printstr($$byval_copy1,$5);
- STACKTOP = sp;return;
-}
-function _printstr($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;
- var $29 = 0, $3 = 0, $30 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $1;
- $3 = ((($0)) + 4|0);
- $4 = HEAP32[$3>>2]|0;
- $5 = ($4|0)==(16);
- if (!($5)) {
-  STACKTOP = sp;return;
- }
- $6 = HEAP32[$0>>2]|0;
- $7 = HEAP32[$6>>2]|0;
- $8 = $7 >>> 11;
- $9 = $8 & 8;
- $10 = ($9|0)!=(0);
- $11 = HEAP32[$0>>2]|0;
- $12 = ((($11)) + 12|0);
- if ($10) {
-  $28 = $12;
- } else {
-  $13 = ((($12)) + 8|0);
-  $14 = HEAP32[$13>>2]|0;
-  $28 = $14;
- }
- $15 = HEAP32[$0>>2]|0;
- $16 = HEAP32[$15>>2]|0;
- $17 = $16 >>> 11;
- $18 = $17 & 8;
- $19 = ($18|0)!=(0);
- $20 = HEAP32[$0>>2]|0;
- if ($19) {
-  $21 = HEAP32[$20>>2]|0;
-  $22 = $21 >>> 11;
-  $23 = $22 & 496;
-  $24 = $23 >> 4;
-  $29 = $24;
- } else {
-  $25 = ((($20)) + 12|0);
-  $26 = HEAP32[$25>>2]|0;
-  $29 = $26;
- }
- $27 = $2;
- (_fwrite($28,$29,1,$27)|0);
- $30 = $2;
- (_putc(10,$30)|0);
- STACKTOP = sp;return;
-}
-function _mrb_obj_value_234($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = sp;
- $2 = $1;
- $4 = $2;
- $5 = HEAP32[$4>>2]|0;
- $6 = $5 & 255;
- $7 = ((($3)) + 4|0);
- HEAP32[$7>>2] = $6;
- $8 = $2;
- HEAP32[$3>>2] = $8;
- ;HEAP32[$0>>2]=HEAP32[$3>>2]|0;HEAP32[$0+4>>2]=HEAP32[$3+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_show_version($0) {
- $0 = $0|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $1 = 0, $10 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);
- $$byval_copy1 = sp + 32|0;
- $$byval_copy = sp + 24|0;
- $2 = sp + 8|0;
- $3 = sp;
- $1 = $0;
- $4 = $1;
- $5 = $1;
- $6 = ((($5)) + 32|0);
- $7 = HEAP32[$6>>2]|0;
- _mrb_obj_value_234($3,$7);
- $8 = $1;
- $9 = (_mrb_intern_static($8,69483,17)|0);
- ;HEAP32[$$byval_copy>>2]=HEAP32[$3>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$3+4>>2]|0;
- _mrb_const_get($2,$4,$$byval_copy,$9);
- $10 = HEAP32[762]|0;
- ;HEAP32[$$byval_copy1>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$2+4>>2]|0;
- _printstr($$byval_copy1,$10);
- STACKTOP = sp;return;
-}
-function _mrb_show_copyright($0) {
- $0 = $0|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $1 = 0, $10 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);
- $$byval_copy1 = sp + 32|0;
- $$byval_copy = sp + 24|0;
- $2 = sp + 8|0;
- $3 = sp;
- $1 = $0;
- $4 = $1;
- $5 = $1;
- $6 = ((($5)) + 32|0);
- $7 = HEAP32[$6>>2]|0;
- _mrb_obj_value_234($3,$7);
- $8 = $1;
- $9 = (_mrb_intern_static($8,69550,15)|0);
- ;HEAP32[$$byval_copy>>2]=HEAP32[$3>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$3+4>>2]|0;
- _mrb_const_get($2,$4,$$byval_copy,$9);
- $10 = HEAP32[762]|0;
- ;HEAP32[$$byval_copy1>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$2+4>>2]|0;
- _printstr($$byval_copy1,$10);
- STACKTOP = sp;return;
-}
-function _mrb_open_core($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;
- var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, dest = 0, label = 0, sp = 0, src = 0;
- var stop = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $0;
- $4 = $1;
- $6 = $3;
- $7 = $4;
- $8 = (FUNCTION_TABLE_iiiii[$6 & 255](0,0,592,$7)|0);
- $5 = $8;
- $9 = $5;
- $10 = ($9|0)==(0|0);
- if ($10) {
-  $2 = 0;
-  $37 = $2;
-  STACKTOP = sp;return ($37|0);
- } else {
-  $11 = $5;
-  _memcpy(($11|0),(72748|0),592)|0;
-  $12 = $4;
-  $13 = $5;
-  $14 = ((($13)) + 8|0);
-  HEAP32[$14>>2] = $12;
-  $15 = $3;
-  $16 = $5;
-  $17 = ((($16)) + 4|0);
-  HEAP32[$17>>2] = $15;
-  $18 = $5;
-  $19 = ((($18)) + 588|0);
-  HEAP32[$19>>2] = 0;
-  $20 = $5;
-  $21 = $5;
-  $22 = ((($21)) + 92|0);
-  _mrb_gc_init($20,$22);
-  $23 = $5;
-  $24 = (_mrb_malloc($23,52)|0);
-  $25 = $5;
-  $26 = ((($25)) + 12|0);
-  HEAP32[$26>>2] = $24;
-  $27 = $5;
-  $28 = ((($27)) + 12|0);
-  $29 = HEAP32[$28>>2]|0;
-  dest=$29; src=73340; stop=dest+52|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0));
-  $30 = $5;
-  $31 = ((($30)) + 12|0);
-  $32 = HEAP32[$31>>2]|0;
-  $33 = $5;
-  $34 = ((($33)) + 16|0);
-  HEAP32[$34>>2] = $32;
-  $35 = $5;
-  _mrb_init_core($35);
-  $36 = $5;
-  $2 = $36;
-  $37 = $2;
-  STACKTOP = sp;return ($37|0);
- }
- return (0)|0;
-}
-function _mrb_default_allocf($0,$1,$2,$3) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $5 = $0;
- $6 = $1;
- $7 = $2;
- $8 = $3;
- $9 = $7;
- $10 = ($9|0)==(0);
- $11 = $6;
- if ($10) {
-  _free($11);
-  $4 = 0;
- } else {
-  $12 = $7;
-  $13 = (_realloc($11,$12)|0);
-  $4 = $13;
- }
- $14 = $4;
- STACKTOP = sp;return ($14|0);
-}
-function _mrb_alloca($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $5 = $2;
- $6 = $3;
- $7 = (4 + ($6))|0;
- $8 = (_mrb_malloc($5,$7)|0);
- $4 = $8;
- $9 = $2;
- $10 = ((($9)) + 88|0);
- $11 = HEAP32[$10>>2]|0;
- $12 = $4;
- HEAP32[$12>>2] = $11;
- $13 = $4;
- $14 = $2;
- $15 = ((($14)) + 88|0);
- HEAP32[$15>>2] = $13;
- $16 = $4;
- $17 = ((($16)) + 4|0);
- STACKTOP = sp;return ($17|0);
-}
-function _mrb_open() {
- var $0 = 0, $1 = 0, $2 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $1 = (_mrb_open_allocf(82,0,0)|0);
- $0 = $1;
- $2 = $0;
- STACKTOP = sp;return ($2|0);
-}
-function _mrb_open_allocf($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $4 = $0;
- $5 = $1;
- $6 = $2;
- $8 = $4;
- $9 = $5;
- $10 = (_mrb_open_core($8,$9)|0);
- $7 = $10;
- $11 = $7;
- $12 = ($11|0)==(0|0);
- if ($12) {
-  $3 = 0;
-  $18 = $3;
-  STACKTOP = sp;return ($18|0);
- }
- $13 = $6;
- $14 = ($13<<24>>24)!=(0);
- if (!($14)) {
-  $15 = $7;
-  _mrb_init_mrbgems($15);
-  $16 = $7;
-  _mrb_gc_arena_restore($16,0);
- }
- $17 = $7;
- $3 = $17;
- $18 = $3;
- STACKTOP = sp;return ($18|0);
-}
-function _mrb_irep_incref($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $4 = $3;
- $5 = ((($4)) + 56|0);
- $6 = HEAP32[$5>>2]|0;
- $7 = (($6) + 1)|0;
- HEAP32[$5>>2] = $7;
- STACKTOP = sp;return;
-}
-function _mrb_irep_decref($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $4 = $3;
- $5 = ((($4)) + 56|0);
- $6 = HEAP32[$5>>2]|0;
- $7 = (($6) + -1)|0;
- HEAP32[$5>>2] = $7;
- $8 = $3;
- $9 = ((($8)) + 56|0);
- $10 = HEAP32[$9>>2]|0;
- $11 = ($10|0)==(0);
- if (!($11)) {
-  STACKTOP = sp;return;
- }
- $12 = $2;
- $13 = $3;
- _mrb_irep_free($12,$13);
- STACKTOP = sp;return;
-}
-function _mrb_irep_free($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;
- var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0;
- var $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0;
- var $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0;
- var $83 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $5 = $3;
- $6 = ((($5)) + 4|0);
- $7 = HEAP8[$6>>0]|0;
- $8 = $7&255;
- $9 = $8 & 1;
- $10 = ($9|0)!=(0);
- if (!($10)) {
-  $11 = $2;
-  $12 = $3;
-  $13 = ((($12)) + 8|0);
-  $14 = HEAP32[$13>>2]|0;
-  _mrb_free($11,$14);
- }
- $4 = 0;
- while(1) {
-  $15 = $4;
-  $16 = $3;
-  $17 = ((($16)) + 44|0);
-  $18 = HEAP32[$17>>2]|0;
-  $19 = ($15>>>0)<($18>>>0);
-  if (!($19)) {
-   break;
-  }
-  $20 = $3;
-  $21 = ((($20)) + 12|0);
-  $22 = HEAP32[$21>>2]|0;
-  $23 = $4;
-  $24 = (($22) + ($23<<3)|0);
-  $25 = ((($24)) + 4|0);
-  $26 = HEAP32[$25>>2]|0;
-  $27 = ($26|0)==(16);
-  if ($27) {
-   $28 = $2;
-   $29 = $3;
-   $30 = ((($29)) + 12|0);
-   $31 = HEAP32[$30>>2]|0;
-   $32 = $4;
-   $33 = (($31) + ($32<<3)|0);
-   $34 = HEAP32[$33>>2]|0;
-   _mrb_gc_free_str($28,$34);
-   $35 = $2;
-   $36 = $3;
-   $37 = ((($36)) + 12|0);
-   $38 = HEAP32[$37>>2]|0;
-   $39 = $4;
-   $40 = (($38) + ($39<<3)|0);
-   $41 = HEAP32[$40>>2]|0;
-   _mrb_free($35,$41);
-  }
-  $42 = $4;
-  $43 = (($42) + 1)|0;
-  $4 = $43;
- }
- $44 = $2;
- $45 = $3;
- $46 = ((($45)) + 12|0);
- $47 = HEAP32[$46>>2]|0;
- _mrb_free($44,$47);
- $48 = $2;
- $49 = $3;
- $50 = ((($49)) + 16|0);
- $51 = HEAP32[$50>>2]|0;
- _mrb_free($48,$51);
- $4 = 0;
- while(1) {
-  $52 = $4;
-  $53 = $3;
-  $54 = ((($53)) + 52|0);
-  $55 = HEAP32[$54>>2]|0;
-  $56 = ($52>>>0)<($55>>>0);
-  $57 = $2;
-  $58 = $3;
-  $59 = ((($58)) + 20|0);
-  $60 = HEAP32[$59>>2]|0;
-  if (!($56)) {
-   break;
-  }
-  $61 = $4;
-  $62 = (($60) + ($61<<2)|0);
-  $63 = HEAP32[$62>>2]|0;
-  _mrb_irep_decref($57,$63);
-  $64 = $4;
-  $65 = (($64) + 1)|0;
-  $4 = $65;
- }
- _mrb_free($57,$60);
- $66 = $2;
- $67 = $3;
- $68 = ((($67)) + 24|0);
- $69 = HEAP32[$68>>2]|0;
- _mrb_free($66,$69);
- $70 = $2;
- $71 = $3;
- $72 = ((($71)) + 28|0);
- $73 = HEAP32[$72>>2]|0;
- _mrb_free($70,$73);
- $74 = $2;
- $75 = $3;
- $76 = ((($75)) + 32|0);
- $77 = HEAP32[$76>>2]|0;
- _mrb_free($74,$77);
- $78 = $2;
- $79 = $3;
- $80 = ((($79)) + 36|0);
- $81 = HEAP32[$80>>2]|0;
- _mrb_debug_info_free($78,$81);
- $82 = $2;
- $83 = $3;
- _mrb_free($82,$83);
- STACKTOP = sp;return;
-}
-function _mrb_str_pool($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$sink = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0;
- var $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $14 = 0, $15 = 0;
- var $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0;
- var $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0;
- var $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0;
- var $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0;
- var $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $3 = $1;
- $9 = HEAP32[$2>>2]|0;
- $4 = $9;
- $10 = $3;
- $11 = (_mrb_malloc($10,24)|0);
- $5 = $11;
- $12 = $5;
- $13 = HEAP32[$12>>2]|0;
- $14 = $13 & -256;
- $15 = $14 | 16;
- HEAP32[$12>>2] = $15;
- $16 = $3;
- $17 = ((($16)) + 48|0);
- $18 = HEAP32[$17>>2]|0;
- $19 = $5;
- $20 = ((($19)) + 4|0);
- HEAP32[$20>>2] = $18;
- $21 = $4;
- $22 = HEAP32[$21>>2]|0;
- $23 = $22 >>> 11;
- $24 = $23 & 2;
- $25 = ($24|0)!=(0);
- $26 = $5;
- $27 = HEAP32[$26>>2]|0;
- $28 = $27 & 2047;
- if ($25) {
-  $29 = $28 | 4096;
-  HEAP32[$26>>2] = $29;
-  $30 = $4;
-  $31 = ((($30)) + 12|0);
-  $32 = ((($31)) + 8|0);
-  $33 = HEAP32[$32>>2]|0;
-  $34 = $5;
-  $35 = ((($34)) + 12|0);
-  $36 = ((($35)) + 8|0);
-  HEAP32[$36>>2] = $33;
-  $37 = $4;
-  $38 = ((($37)) + 12|0);
-  $39 = HEAP32[$38>>2]|0;
-  $40 = $5;
-  $41 = ((($40)) + 12|0);
-  HEAP32[$41>>2] = $39;
-  $42 = $5;
-  $43 = ((($42)) + 12|0);
-  $44 = ((($43)) + 4|0);
-  HEAP32[$44>>2] = 0;
-  $132 = $5;
-  _mrb_obj_value_246($0,$132);
-  STACKTOP = sp;return;
- }
- HEAP32[$26>>2] = $28;
- $45 = $4;
- $46 = HEAP32[$45>>2]|0;
- $47 = $46 >>> 11;
- $48 = $47 & 8;
- $49 = ($48|0)!=(0);
- $50 = $4;
- $51 = ((($50)) + 12|0);
- if ($49) {
-  $6 = $51;
-  $52 = $4;
-  $53 = HEAP32[$52>>2]|0;
-  $54 = $53 >>> 11;
-  $55 = $54 & 496;
-  $56 = $55 >> 4;
-  $7 = $56;
- } else {
-  $57 = ((($51)) + 8|0);
-  $58 = HEAP32[$57>>2]|0;
-  $6 = $58;
-  $59 = $4;
-  $60 = ((($59)) + 12|0);
-  $61 = HEAP32[$60>>2]|0;
-  $7 = $61;
- }
- $62 = $7;
- $63 = ($62|0)<(11);
- if ($63) {
-  $64 = $5;
-  $65 = HEAP32[$64>>2]|0;
-  $66 = $65 >>> 11;
-  $67 = $66 | 8;
-  $68 = HEAP32[$64>>2]|0;
-  $69 = $67 & 2097151;
-  $70 = $69 << 11;
-  $71 = $68 & 2047;
-  $72 = $71 | $70;
-  HEAP32[$64>>2] = $72;
-  $73 = $7;
-  $8 = $73;
-  $74 = $5;
-  $75 = HEAP32[$74>>2]|0;
-  $76 = $75 >>> 11;
-  $77 = $76 & -497;
-  $78 = HEAP32[$74>>2]|0;
-  $79 = $77 & 2097151;
-  $80 = $79 << 11;
-  $81 = $78 & 2047;
-  $82 = $81 | $80;
-  HEAP32[$74>>2] = $82;
-  $83 = $8;
-  $84 = $83 << 4;
-  $85 = $5;
-  $86 = HEAP32[$85>>2]|0;
-  $87 = $86 >>> 11;
-  $88 = $87 | $84;
-  $89 = HEAP32[$85>>2]|0;
-  $90 = $88 & 2097151;
-  $91 = $90 << 11;
-  $92 = $89 & 2047;
-  $93 = $92 | $91;
-  HEAP32[$85>>2] = $93;
-  $94 = $6;
-  $95 = ($94|0)!=(0|0);
-  if ($95) {
-   $96 = $5;
-   $97 = ((($96)) + 12|0);
-   $98 = $6;
-   $99 = $7;
-   _memcpy(($97|0),($98|0),($99|0))|0;
-  }
-  $100 = $5;
-  $101 = ((($100)) + 12|0);
-  $102 = $7;
-  $103 = (($101) + ($102)|0);
-  $$sink = $103;
- } else {
-  $104 = $3;
-  $105 = $7;
-  $106 = (($105) + 1)|0;
-  $107 = (_mrb_malloc($104,$106)|0);
-  $108 = $5;
-  $109 = ((($108)) + 12|0);
-  $110 = ((($109)) + 8|0);
-  HEAP32[$110>>2] = $107;
-  $111 = $7;
-  $112 = $5;
-  $113 = ((($112)) + 12|0);
-  HEAP32[$113>>2] = $111;
-  $114 = $7;
-  $115 = $5;
-  $116 = ((($115)) + 12|0);
-  $117 = ((($116)) + 4|0);
-  HEAP32[$117>>2] = $114;
-  $118 = $6;
-  $119 = ($118|0)!=(0|0);
-  if ($119) {
-   $120 = $5;
-   $121 = ((($120)) + 12|0);
-   $122 = ((($121)) + 8|0);
-   $123 = HEAP32[$122>>2]|0;
-   $124 = $6;
-   $125 = $7;
-   _memcpy(($123|0),($124|0),($125|0))|0;
-  }
-  $126 = $5;
-  $127 = ((($126)) + 12|0);
-  $128 = ((($127)) + 8|0);
-  $129 = HEAP32[$128>>2]|0;
-  $130 = $7;
-  $131 = (($129) + ($130)|0);
-  $$sink = $131;
- }
- HEAP8[$$sink>>0] = 0;
- $132 = $5;
- _mrb_obj_value_246($0,$132);
- STACKTOP = sp;return;
-}
-function _mrb_obj_value_246($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = sp;
- $2 = $1;
- $4 = $2;
- $5 = HEAP32[$4>>2]|0;
- $6 = $5 & 255;
- $7 = ((($3)) + 4|0);
- HEAP32[$7>>2] = $6;
- $8 = $2;
- HEAP32[$3>>2] = $8;
- ;HEAP32[$0>>2]=HEAP32[$3>>2]|0;HEAP32[$0+4>>2]=HEAP32[$3+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_free_context($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0;
- var $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $4 = $3;
- $5 = ($4|0)!=(0|0);
- if (!($5)) {
-  STACKTOP = sp;return;
- }
- $6 = $2;
- $7 = $3;
- $8 = ((($7)) + 8|0);
- $9 = HEAP32[$8>>2]|0;
- _mrb_free($6,$9);
- $10 = $2;
- $11 = $3;
- $12 = ((($11)) + 20|0);
- $13 = HEAP32[$12>>2]|0;
- _mrb_free($10,$13);
- $14 = $2;
- $15 = $3;
- $16 = ((($15)) + 28|0);
- $17 = HEAP32[$16>>2]|0;
- _mrb_free($14,$17);
- $18 = $2;
- $19 = $3;
- $20 = ((($19)) + 36|0);
- $21 = HEAP32[$20>>2]|0;
- _mrb_free($18,$21);
- $22 = $2;
- $23 = $3;
- _mrb_free($22,$23);
- STACKTOP = sp;return;
-}
-function _mrb_close($0) {
- $0 = $0|0;
- var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;
- var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $1 = $0;
- $3 = $1;
- $4 = ($3|0)!=(0|0);
- if (!($4)) {
-  STACKTOP = sp;return;
- }
- $5 = $1;
- $6 = ((($5)) + 588|0);
- $7 = HEAP32[$6>>2]|0;
- $8 = ($7|0)>(0);
- if ($8) {
-  $9 = $1;
-  $10 = ((($9)) + 588|0);
-  $11 = HEAP32[$10>>2]|0;
-  $2 = $11;
-  while(1) {
-   $12 = $2;
-   $13 = ($12|0)>(0);
-   $14 = $1;
-   if (!($13)) {
-    break;
-   }
-   $15 = ((($14)) + 584|0);
-   $16 = HEAP32[$15>>2]|0;
-   $17 = $2;
-   $18 = (($17) - 1)|0;
-   $19 = (($16) + ($18<<2)|0);
-   $20 = HEAP32[$19>>2]|0;
-   $21 = $1;
-   FUNCTION_TABLE_vi[$20 & 511]($21);
-   $22 = $2;
-   $23 = (($22) + -1)|0;
-   $2 = $23;
-  }
-  $24 = $1;
-  $25 = ((($24)) + 584|0);
-  $26 = HEAP32[$25>>2]|0;
-  _mrb_free($14,$26);
- }
- $27 = $1;
- _mrb_gc_free_gv($27);
- $28 = $1;
- $29 = $1;
- $30 = ((($29)) + 16|0);
- $31 = HEAP32[$30>>2]|0;
- _mrb_free_context($28,$31);
- $32 = $1;
- _mrb_free_symtbl($32);
- $33 = $1;
- _mrb_alloca_free($33);
- $34 = $1;
- $35 = $1;
- $36 = ((($35)) + 92|0);
- _mrb_gc_destroy($34,$36);
- $37 = $1;
- $38 = $1;
- _mrb_free($37,$38);
- STACKTOP = sp;return;
-}
-function _mrb_alloca_free($0) {
- $0 = $0|0;
- var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $1 = $0;
- $4 = $1;
- $5 = ($4|0)==(0|0);
- if ($5) {
-  STACKTOP = sp;return;
- }
- $6 = $1;
- $7 = ((($6)) + 88|0);
- $8 = HEAP32[$7>>2]|0;
- $2 = $8;
- while(1) {
-  $9 = $2;
-  $10 = ($9|0)!=(0|0);
-  if (!($10)) {
-   break;
-  }
-  $11 = $2;
-  $3 = $11;
-  $12 = $2;
-  $13 = HEAP32[$12>>2]|0;
-  $2 = $13;
-  $14 = $1;
-  $15 = $3;
-  _mrb_free($14,$15);
- }
- STACKTOP = sp;return;
-}
-function _mrb_add_irep($0) {
- $0 = $0|0;
- var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, dest = 0, label = 0, sp = 0, src = 0, stop = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $1 = $0;
- $3 = $1;
- $4 = (_mrb_malloc($3,60)|0);
- $2 = $4;
- $5 = $2;
- dest=$5; src=73392; stop=dest+60|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0));
- $6 = $2;
- $7 = ((($6)) + 56|0);
- HEAP32[$7>>2] = 1;
- $8 = $2;
- STACKTOP = sp;return ($8|0);
-}
-function _mrb_top_self($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0;
- var $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $1;
- $3 = $2;
- $4 = ((($3)) + 28|0);
- $5 = HEAP32[$4>>2]|0;
- $6 = ($5|0)!=(0|0);
- if ($6) {
-  $22 = $2;
-  $23 = ((($22)) + 28|0);
-  $24 = HEAP32[$23>>2]|0;
-  _mrb_obj_value_246($0,$24);
-  STACKTOP = sp;return;
- }
- $7 = $2;
- $8 = $2;
- $9 = ((($8)) + 32|0);
- $10 = HEAP32[$9>>2]|0;
- $11 = (_mrb_obj_alloc($7,8,$10)|0);
- $12 = $2;
- $13 = ((($12)) + 28|0);
- HEAP32[$13>>2] = $11;
- $14 = $2;
- $15 = $2;
- $16 = ((($15)) + 28|0);
- $17 = HEAP32[$16>>2]|0;
- _mrb_define_singleton_method($14,$17,69281,83,0);
- $18 = $2;
- $19 = $2;
- $20 = ((($19)) + 28|0);
- $21 = HEAP32[$20>>2]|0;
- _mrb_define_singleton_method($18,$21,69276,83,0);
- $22 = $2;
- $23 = ((($22)) + 28|0);
- $24 = HEAP32[$23>>2]|0;
- _mrb_obj_value_246($0,$24);
- STACKTOP = sp;return;
-}
-function _inspect_main($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $3 = 0, $4 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $1;
- $4 = $3;
- _mrb_str_new_static($0,$4,55640,4);
- STACKTOP = sp;return;
-}
-function _mrb_str_buf_new($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;
- var $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0;
- var sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $1;
- $4 = $2;
- $6 = $3;
- $7 = $3;
- $8 = ((($7)) + 48|0);
- $9 = HEAP32[$8>>2]|0;
- $10 = (_mrb_obj_alloc($6,16,$9)|0);
- $5 = $10;
- $11 = $4;
- $12 = ($11>>>0)>=(2147483647);
- if ($12) {
-  $13 = $3;
-  $14 = $3;
-  $15 = (_mrb_class_get($14,69160)|0);
-  _mrb_raise($13,$15,55682);
-  // unreachable;
- }
- $16 = $4;
- $17 = ($16>>>0)<(20);
- if ($17) {
-  $4 = 20;
- }
- $18 = $5;
- $19 = ((($18)) + 12|0);
- HEAP32[$19>>2] = 0;
- $20 = $4;
- $21 = $5;
- $22 = ((($21)) + 12|0);
- $23 = ((($22)) + 4|0);
- HEAP32[$23>>2] = $20;
- $24 = $3;
- $25 = $4;
- $26 = (($25) + 1)|0;
- $27 = (_mrb_malloc($24,$26)|0);
- $28 = $5;
- $29 = ((($28)) + 12|0);
- $30 = ((($29)) + 8|0);
- HEAP32[$30>>2] = $27;
- $31 = $5;
- $32 = HEAP32[$31>>2]|0;
- $33 = $32 >>> 11;
- $34 = $33 & 8;
- $35 = ($34|0)!=(0);
- $36 = $5;
- $37 = ((($36)) + 12|0);
- if ($35) {
-  $40 = $37;
-  HEAP8[$40>>0] = 0;
-  $41 = $5;
-  _mrb_obj_value_260($0,$41);
-  STACKTOP = sp;return;
- } else {
-  $38 = ((($37)) + 8|0);
-  $39 = HEAP32[$38>>2]|0;
-  $40 = $39;
-  HEAP8[$40>>0] = 0;
-  $41 = $5;
-  _mrb_obj_value_260($0,$41);
-  STACKTOP = sp;return;
- }
-}
-function _mrb_obj_value_260($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = sp;
- $2 = $1;
- $4 = $2;
- $5 = HEAP32[$4>>2]|0;
- $6 = $5 & 255;
- $7 = ((($3)) + 4|0);
- HEAP32[$7>>2] = $6;
- $8 = $2;
- HEAP32[$3>>2] = $8;
- ;HEAP32[$0>>2]=HEAP32[$3>>2]|0;HEAP32[$0+4>>2]=HEAP32[$3+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_str_new($0,$1,$2,$3) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- var $10 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $4 = $1;
- $5 = $2;
- $6 = $3;
- $7 = $4;
- $8 = $5;
- $9 = $6;
- $10 = (_str_new($7,$8,$9)|0);
- _mrb_obj_value_260($0,$10);
- STACKTOP = sp;return;
-}
-function _str_new($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;
- var $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0;
- var $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0;
- var $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0;
- var $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $4 = $0;
- $5 = $1;
- $6 = $2;
- $9 = $4;
- $10 = $4;
- $11 = ((($10)) + 48|0);
- $12 = HEAP32[$11>>2]|0;
- $13 = (_mrb_obj_alloc($9,16,$12)|0);
- $7 = $13;
- $14 = $6;
- $15 = ($14>>>0)<(11);
- if ($15) {
-  $16 = $7;
-  $17 = HEAP32[$16>>2]|0;
-  $18 = $17 >>> 11;
-  $19 = $18 | 8;
-  $20 = HEAP32[$16>>2]|0;
-  $21 = $19 & 2097151;
-  $22 = $21 << 11;
-  $23 = $20 & 2047;
-  $24 = $23 | $22;
-  HEAP32[$16>>2] = $24;
-  $25 = $6;
-  $8 = $25;
-  $26 = $7;
-  $27 = HEAP32[$26>>2]|0;
-  $28 = $27 >>> 11;
-  $29 = $28 & -497;
-  $30 = HEAP32[$26>>2]|0;
-  $31 = $29 & 2097151;
-  $32 = $31 << 11;
-  $33 = $30 & 2047;
-  $34 = $33 | $32;
-  HEAP32[$26>>2] = $34;
-  $35 = $8;
-  $36 = $35 << 4;
-  $37 = $7;
-  $38 = HEAP32[$37>>2]|0;
-  $39 = $38 >>> 11;
-  $40 = $39 | $36;
-  $41 = HEAP32[$37>>2]|0;
-  $42 = $40 & 2097151;
-  $43 = $42 << 11;
-  $44 = $41 & 2047;
-  $45 = $44 | $43;
-  HEAP32[$37>>2] = $45;
-  $46 = $5;
-  $47 = ($46|0)!=(0|0);
-  if ($47) {
-   $48 = $7;
-   $49 = ((($48)) + 12|0);
-   $50 = $5;
-   $51 = $6;
-   _memcpy(($49|0),($50|0),($51|0))|0;
-  }
- } else {
-  $52 = $6;
-  $53 = ($52>>>0)>=(2147483647);
-  if ($53) {
-   $54 = $4;
-   $55 = $4;
-   $56 = (_mrb_class_get($55,69160)|0);
-   _mrb_raise($54,$56,55711);
-   // unreachable;
-  }
-  $57 = $6;
-  $58 = $7;
-  $59 = ((($58)) + 12|0);
-  HEAP32[$59>>2] = $57;
-  $60 = $6;
-  $61 = $7;
-  $62 = ((($61)) + 12|0);
-  $63 = ((($62)) + 4|0);
-  HEAP32[$63>>2] = $60;
-  $64 = $4;
-  $65 = $6;
-  $66 = (($65) + 1)|0;
-  $67 = (_mrb_malloc($64,$66)|0);
-  $68 = $7;
-  $69 = ((($68)) + 12|0);
-  $70 = ((($69)) + 8|0);
-  HEAP32[$70>>2] = $67;
-  $71 = $5;
-  $72 = ($71|0)!=(0|0);
-  if ($72) {
-   $73 = $7;
-   $74 = ((($73)) + 12|0);
-   $75 = ((($74)) + 8|0);
-   $76 = HEAP32[$75>>2]|0;
-   $77 = $5;
-   $78 = $6;
-   _memcpy(($76|0),($77|0),($78|0))|0;
-  }
- }
- $79 = $7;
- $80 = HEAP32[$79>>2]|0;
- $81 = $80 >>> 11;
- $82 = $81 & 8;
- $83 = ($82|0)!=(0);
- $84 = $7;
- $85 = ((($84)) + 12|0);
- if ($83) {
-  $90 = $85;
-  $88 = $6;
-  $89 = (($90) + ($88)|0);
-  HEAP8[$89>>0] = 0;
-  $91 = $7;
-  $3 = $91;
-  $92 = $3;
-  STACKTOP = sp;return ($92|0);
- } else {
-  $86 = ((($85)) + 8|0);
-  $87 = HEAP32[$86>>2]|0;
-  $90 = $87;
-  $88 = $6;
-  $89 = (($90) + ($88)|0);
-  HEAP8[$89>>0] = 0;
-  $91 = $7;
-  $3 = $91;
-  $92 = $3;
-  STACKTOP = sp;return ($92|0);
- }
- return (0)|0;
-}
-function _str_new_static($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;
- var $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $0;
- $4 = $1;
- $5 = $2;
- $7 = $5;
- $8 = ($7>>>0)>=(2147483647);
- $9 = $3;
- $10 = $3;
- if ($8) {
-  $11 = (_mrb_class_get($10,69160)|0);
-  _mrb_raise($9,$11,55711);
-  // unreachable;
- } else {
-  $12 = ((($10)) + 48|0);
-  $13 = HEAP32[$12>>2]|0;
-  $14 = (_mrb_obj_alloc($9,16,$13)|0);
-  $6 = $14;
-  $15 = $5;
-  $16 = $6;
-  $17 = ((($16)) + 12|0);
-  HEAP32[$17>>2] = $15;
-  $18 = $6;
-  $19 = ((($18)) + 12|0);
-  $20 = ((($19)) + 4|0);
-  HEAP32[$20>>2] = 0;
-  $21 = $4;
-  $22 = $6;
-  $23 = ((($22)) + 12|0);
-  $24 = ((($23)) + 8|0);
-  HEAP32[$24>>2] = $21;
-  $25 = $6;
-  $26 = HEAP32[$25>>2]|0;
-  $27 = $26 & 2047;
-  $28 = $27 | 4096;
-  HEAP32[$25>>2] = $28;
-  $29 = $6;
-  STACKTOP = sp;return ($29|0);
- }
- return (0)|0;
-}
-function _mrb_str_new_cstr($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $1;
- $4 = $2;
- $7 = $4;
- $8 = ($7|0)!=(0|0);
- if ($8) {
-  $9 = $4;
-  $10 = (_strlen($9)|0);
-  $6 = $10;
- } else {
-  $6 = 0;
- }
- $11 = $3;
- $12 = $4;
- $13 = $6;
- $14 = (_str_new($11,$12,$13)|0);
- $5 = $14;
- $15 = $5;
- _mrb_obj_value_260($0,$15);
- STACKTOP = sp;return;
-}
-function _mrb_str_new_static($0,$1,$2,$3) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- var $10 = 0, $11 = 0, $12 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $4 = $1;
- $5 = $2;
- $6 = $3;
- $8 = $4;
- $9 = $5;
- $10 = $6;
- $11 = (_str_new_static($8,$9,$10)|0);
- $7 = $11;
- $12 = $7;
- _mrb_obj_value_260($0,$12);
- STACKTOP = sp;return;
-}
-function _mrb_gc_free_str($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;
- var $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $4 = $3;
- $5 = HEAP32[$4>>2]|0;
- $6 = $5 >>> 11;
- $7 = $6 & 8;
- $8 = ($7|0)!=(0);
- if ($8) {
-  STACKTOP = sp;return;
- }
- $9 = $3;
- $10 = HEAP32[$9>>2]|0;
- $11 = $10 >>> 11;
- $12 = $11 & 1;
- $13 = ($12|0)!=(0);
- if ($13) {
-  $14 = $2;
-  $15 = $3;
-  $16 = ((($15)) + 12|0);
-  $17 = ((($16)) + 4|0);
-  $18 = HEAP32[$17>>2]|0;
-  _str_decref($14,$18);
-  STACKTOP = sp;return;
- }
- $19 = $3;
- $20 = HEAP32[$19>>2]|0;
- $21 = $20 >>> 11;
- $22 = $21 & 2;
- $23 = ($22|0)!=(0);
- if ($23) {
-  STACKTOP = sp;return;
- }
- $24 = $2;
- $25 = $3;
- $26 = ((($25)) + 12|0);
- $27 = ((($26)) + 8|0);
- $28 = HEAP32[$27>>2]|0;
- _mrb_free($24,$28);
- STACKTOP = sp;return;
-}
-function _str_decref($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0;
- var label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $4 = $3;
- $5 = ((($4)) + 4|0);
- $6 = HEAP32[$5>>2]|0;
- $7 = (($6) + -1)|0;
- HEAP32[$5>>2] = $7;
- $8 = $3;
- $9 = ((($8)) + 4|0);
- $10 = HEAP32[$9>>2]|0;
- $11 = ($10|0)==(0);
- if (!($11)) {
-  STACKTOP = sp;return;
- }
- $12 = $3;
- $13 = HEAP8[$12>>0]|0;
- $14 = $13 & 1;
- $15 = ($14<<24>>24)!=(0);
- if (!($15)) {
-  $16 = $2;
-  $17 = $3;
-  $18 = ((($17)) + 8|0);
-  $19 = HEAP32[$18>>2]|0;
-  _mrb_free($16,$19);
- }
- $20 = $2;
- $21 = $3;
- _mrb_free($20,$21);
- STACKTOP = sp;return;
-}
-function _mrb_str_strlen($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;
- var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0;
- var $47 = 0, $48 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $3 = $0;
- $4 = $1;
- $8 = $4;
- $9 = HEAP32[$8>>2]|0;
- $10 = $9 >>> 11;
- $11 = $10 & 8;
- $12 = ($11|0)!=(0);
- $13 = $4;
- if ($12) {
-  $14 = HEAP32[$13>>2]|0;
-  $15 = $14 >>> 11;
-  $16 = $15 & 496;
-  $17 = $16 >> 4;
-  $20 = $17;
- } else {
-  $18 = ((($13)) + 12|0);
-  $19 = HEAP32[$18>>2]|0;
-  $20 = $19;
- }
- $6 = $20;
- $21 = $4;
- $22 = HEAP32[$21>>2]|0;
- $23 = $22 >>> 11;
- $24 = $23 & 8;
- $25 = ($24|0)!=(0);
- $26 = $4;
- $27 = ((($26)) + 12|0);
- if ($25) {
-  $30 = $27;
- } else {
-  $28 = ((($27)) + 8|0);
-  $29 = HEAP32[$28>>2]|0;
-  $30 = $29;
- }
- $7 = $30;
- $31 = $7;
- $32 = ($31|0)!=(0|0);
- if (!($32)) {
-  $2 = 0;
-  $48 = $2;
-  STACKTOP = sp;return ($48|0);
- }
- $5 = 0;
- while(1) {
-  $33 = $5;
-  $34 = $6;
-  $35 = ($33|0)<($34|0);
-  if (!($35)) {
-   break;
-  }
-  $36 = $7;
-  $37 = $5;
-  $38 = (($36) + ($37)|0);
-  $39 = HEAP8[$38>>0]|0;
-  $40 = $39 << 24 >> 24;
-  $41 = ($40|0)==(0);
-  if ($41) {
-   label = 12;
-   break;
-  }
-  $45 = $5;
-  $46 = (($45) + 1)|0;
-  $5 = $46;
- }
- if ((label|0) == 12) {
-  $42 = $3;
-  $43 = $3;
-  $44 = (_mrb_class_get($43,69160)|0);
-  _mrb_raise($42,$44,55731);
-  // unreachable;
- }
- $47 = $6;
- $2 = $47;
- $48 = $2;
- STACKTOP = sp;return ($48|0);
-}
-function _mrb_str_modify($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $$sink7 = 0, $$sink9 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0;
- var $116 = 0, $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0;
- var $134 = 0, $135 = 0, $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0;
- var $152 = 0, $153 = 0, $154 = 0, $155 = 0, $156 = 0, $157 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;
- var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0;
- var $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0;
- var $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0;
- var $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $2 = $0;
- $3 = $1;
- $9 = $2;
- $10 = $3;
- _check_frozen($9,$10);
- $11 = $3;
- $12 = HEAP32[$11>>2]|0;
- $13 = $12 >>> 11;
- $14 = $13 & 1;
- $15 = ($14|0)!=(0);
- $16 = $3;
- if ($15) {
-  $17 = ((($16)) + 12|0);
-  $18 = ((($17)) + 4|0);
-  $19 = HEAP32[$18>>2]|0;
-  $4 = $19;
-  $20 = $4;
-  $21 = ((($20)) + 4|0);
-  $22 = HEAP32[$21>>2]|0;
-  $23 = ($22|0)==(1);
-  if ($23) {
-   $24 = $3;
-   $25 = ((($24)) + 12|0);
-   $26 = ((($25)) + 8|0);
-   $27 = HEAP32[$26>>2]|0;
-   $28 = $4;
-   $29 = ((($28)) + 8|0);
-   $30 = HEAP32[$29>>2]|0;
-   $31 = ($27|0)==($30|0);
-   if ($31) {
-    $32 = $4;
-    $33 = ((($32)) + 8|0);
-    $34 = HEAP32[$33>>2]|0;
-    $35 = $3;
-    $36 = ((($35)) + 12|0);
-    $37 = ((($36)) + 8|0);
-    HEAP32[$37>>2] = $34;
-    $38 = $4;
-    $39 = ((($38)) + 12|0);
-    $40 = HEAP32[$39>>2]|0;
-    $41 = $3;
-    $42 = ((($41)) + 12|0);
-    $43 = ((($42)) + 4|0);
-    HEAP32[$43>>2] = $40;
-    $44 = $3;
-    $45 = HEAP32[$44>>2]|0;
-    $46 = $45 >>> 11;
-    $47 = $46 & 8;
-    $48 = ($47|0)!=(0);
-    $49 = $3;
-    $50 = ((($49)) + 12|0);
-    if ($48) {
-     $57 = $50;
-    } else {
-     $51 = ((($50)) + 8|0);
-     $52 = HEAP32[$51>>2]|0;
-     $57 = $52;
-    }
-    $53 = $3;
-    $54 = ((($53)) + 12|0);
-    $55 = HEAP32[$54>>2]|0;
-    $56 = (($57) + ($55)|0);
-    HEAP8[$56>>0] = 0;
-    $58 = $2;
-    $59 = $4;
-    _mrb_free($58,$59);
-   } else {
-    label = 8;
-   }
-  } else {
-   label = 8;
-  }
-  if ((label|0) == 8) {
-   $60 = $3;
-   $61 = HEAP32[$60>>2]|0;
-   $62 = $61 >>> 11;
-   $63 = $62 & 8;
-   $64 = ($63|0)!=(0);
-   $65 = $3;
-   $66 = ((($65)) + 12|0);
-   if ($64) {
-    $69 = $66;
-   } else {
-    $67 = ((($66)) + 8|0);
-    $68 = HEAP32[$67>>2]|0;
-    $69 = $68;
-   }
-   $6 = $69;
-   $70 = $3;
-   $71 = ((($70)) + 12|0);
-   $72 = HEAP32[$71>>2]|0;
-   $7 = $72;
-   $73 = $2;
-   $74 = $7;
-   $75 = (($74) + 1)|0;
-   $76 = (_mrb_malloc($73,$75)|0);
-   $5 = $76;
-   $77 = $6;
-   $78 = ($77|0)!=(0|0);
-   if ($78) {
-    $79 = $5;
-    $80 = $6;
-    $81 = $7;
-    _memcpy(($79|0),($80|0),($81|0))|0;
-   }
-   $82 = $5;
-   $83 = $7;
-   $84 = (($82) + ($83)|0);
-   HEAP8[$84>>0] = 0;
-   $85 = $5;
-   $86 = $3;
-   $87 = ((($86)) + 12|0);
-   $88 = ((($87)) + 8|0);
-   HEAP32[$88>>2] = $85;
-   $89 = $7;
-   $90 = $3;
-   $91 = ((($90)) + 12|0);
-   $92 = ((($91)) + 4|0);
-   HEAP32[$92>>2] = $89;
-   $93 = $2;
-   $94 = $4;
-   _str_decref($93,$94);
-  }
-  $95 = $3;
-  $$sink7 = -2;$$sink9 = $95;
- } else {
-  $96 = HEAP32[$16>>2]|0;
-  $97 = $96 >>> 11;
-  $98 = $97 & 2;
-  $99 = ($98|0)!=(0);
-  if (!($99)) {
-   STACKTOP = sp;return;
-  }
-  $100 = $3;
-  $101 = ((($100)) + 12|0);
-  $102 = ((($101)) + 8|0);
-  $103 = HEAP32[$102>>2]|0;
-  $8 = $103;
-  $104 = $2;
-  $105 = $3;
-  $106 = ((($105)) + 12|0);
-  $107 = HEAP32[$106>>2]|0;
-  $108 = (($107) + 1)|0;
-  $109 = (_mrb_malloc($104,$108)|0);
-  $110 = $3;
-  $111 = ((($110)) + 12|0);
-  $112 = ((($111)) + 8|0);
-  HEAP32[$112>>2] = $109;
-  $113 = $8;
-  $114 = ($113|0)!=(0|0);
-  if ($114) {
-   $115 = $3;
-   $116 = HEAP32[$115>>2]|0;
-   $117 = $116 >>> 11;
-   $118 = $117 & 8;
-   $119 = ($118|0)!=(0);
-   $120 = $3;
-   $121 = ((($120)) + 12|0);
-   if ($119) {
-    $128 = $121;
-   } else {
-    $122 = ((($121)) + 8|0);
-    $123 = HEAP32[$122>>2]|0;
-    $128 = $123;
-   }
-   $124 = $8;
-   $125 = $3;
-   $126 = ((($125)) + 12|0);
-   $127 = HEAP32[$126>>2]|0;
-   _memcpy(($128|0),($124|0),($127|0))|0;
-  }
-  $129 = $3;
-  $130 = HEAP32[$129>>2]|0;
-  $131 = $130 >>> 11;
-  $132 = $131 & 8;
-  $133 = ($132|0)!=(0);
-  $134 = $3;
-  $135 = ((($134)) + 12|0);
-  if ($133) {
-   $142 = $135;
-  } else {
-   $136 = ((($135)) + 8|0);
-   $137 = HEAP32[$136>>2]|0;
-   $142 = $137;
-  }
-  $138 = $3;
-  $139 = ((($138)) + 12|0);
-  $140 = HEAP32[$139>>2]|0;
-  $141 = (($142) + ($140)|0);
-  HEAP8[$141>>0] = 0;
-  $143 = $3;
-  $144 = ((($143)) + 12|0);
-  $145 = HEAP32[$144>>2]|0;
-  $146 = $3;
-  $147 = ((($146)) + 12|0);
-  $148 = ((($147)) + 4|0);
-  HEAP32[$148>>2] = $145;
-  $149 = $3;
-  $$sink7 = -3;$$sink9 = $149;
- }
- $150 = HEAP32[$$sink9>>2]|0;
- $151 = $150 >>> 11;
- $152 = $151 & $$sink7;
- $153 = HEAP32[$$sink9>>2]|0;
- $154 = $152 & 2097151;
- $155 = $154 << 11;
- $156 = $153 & 2047;
- $157 = $156 | $155;
- HEAP32[$$sink9>>2] = $157;
- STACKTOP = sp;return;
-}
-function _check_frozen($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $4 = $3;
- $5 = HEAP32[$4>>2]|0;
- $6 = $5 >>> 11;
- $7 = $6 & 4;
- $8 = ($7|0)!=(0);
- if ($8) {
-  $9 = $2;
-  $10 = $2;
-  $11 = (_mrb_class_get($10,68266)|0);
-  _mrb_raise($9,$11,55757);
-  // unreachable;
- } else {
-  STACKTOP = sp;return;
- }
-}
-function _resize_capa($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$sink = 0, $$sink5 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;
- var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0;
- var $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0;
- var $64 = 0, $65 = 0, $66 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $3 = $0;
- $4 = $1;
- $5 = $2;
- $8 = $4;
- $9 = HEAP32[$8>>2]|0;
- $10 = $9 >>> 11;
- $11 = $10 & 8;
- $12 = ($11|0)!=(0);
- do {
-  if ($12) {
-   $13 = $5;
-   $14 = (11)<($13|0);
-   if ($14) {
-    $15 = $3;
-    $16 = $5;
-    $17 = (($16) + 1)|0;
-    $18 = (_mrb_malloc($15,$17)|0);
-    $6 = $18;
-    $19 = $4;
-    $20 = HEAP32[$19>>2]|0;
-    $21 = $20 >>> 11;
-    $22 = $21 & 496;
-    $23 = $22 >> 4;
-    $7 = $23;
-    $24 = $6;
-    $25 = $4;
-    $26 = ((($25)) + 12|0);
-    $27 = $7;
-    _memcpy(($24|0),($26|0),($27|0))|0;
-    $28 = $4;
-    $29 = HEAP32[$28>>2]|0;
-    $30 = $29 >>> 11;
-    $31 = $30 & -505;
-    $32 = HEAP32[$28>>2]|0;
-    $33 = $31 & 2097151;
-    $34 = $33 << 11;
-    $35 = $32 & 2047;
-    $36 = $35 | $34;
-    HEAP32[$28>>2] = $36;
-    $37 = $6;
-    $38 = $4;
-    $39 = ((($38)) + 12|0);
-    $40 = ((($39)) + 8|0);
-    HEAP32[$40>>2] = $37;
-    $41 = $7;
-    $42 = $4;
-    $43 = ((($42)) + 12|0);
-    HEAP32[$43>>2] = $41;
-    $44 = $5;
-    $45 = $4;
-    $$sink = $44;$$sink5 = $45;
-    break;
-   } else {
-    STACKTOP = sp;return;
-   }
-  } else {
-   $46 = $3;
-   $47 = $4;
-   $48 = HEAP32[$47>>2]|0;
-   $49 = $48 >>> 11;
-   $50 = $49 & 8;
-   $51 = ($50|0)!=(0);
-   $52 = $4;
-   $53 = ((($52)) + 12|0);
-   if ($51) {
-    $58 = $53;
-   } else {
-    $54 = ((($53)) + 8|0);
-    $55 = HEAP32[$54>>2]|0;
-    $58 = $55;
-   }
-   $56 = $5;
-   $57 = (($56) + 1)|0;
-   $59 = (_mrb_realloc($46,$58,$57)|0);
-   $60 = $4;
-   $61 = ((($60)) + 12|0);
-   $62 = ((($61)) + 8|0);
-   HEAP32[$62>>2] = $59;
-   $63 = $5;
-   $64 = $4;
-   $$sink = $63;$$sink5 = $64;
-  }
- } while(0);
- $65 = ((($$sink5)) + 12|0);
- $66 = ((($65)) + 4|0);
- HEAP32[$66>>2] = $$sink;
- STACKTOP = sp;return;
-}
-function _mrb_str_concat($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0;
- var $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0;
- var $135 = 0, $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0;
- var $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0;
- var $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0;
- var $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0;
- var $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0;
- var $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);
- $$byval_copy = sp + 32|0;
- $7 = sp + 8|0;
- $3 = $0;
- $9 = HEAP32[$1>>2]|0;
- $4 = $9;
- $10 = $3;
- $11 = $4;
- _mrb_str_modify($10,$11);
- $12 = ((($2)) + 4|0);
- $13 = HEAP32[$12>>2]|0;
- $14 = ($13|0)==(16);
- if (!($14)) {
-  $15 = $3;
-  ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
-  _mrb_str_to_str($7,$15,$$byval_copy);
-  ;HEAP32[$2>>2]=HEAP32[$7>>2]|0;HEAP32[$2+4>>2]=HEAP32[$7+4>>2]|0;
- }
- $16 = HEAP32[$2>>2]|0;
- $5 = $16;
- $17 = $4;
- $18 = HEAP32[$17>>2]|0;
- $19 = $18 >>> 11;
- $20 = $19 & 8;
- $21 = ($20|0)!=(0);
- $22 = $4;
- if ($21) {
-  $23 = HEAP32[$22>>2]|0;
-  $24 = $23 >>> 11;
-  $25 = $24 & 496;
-  $26 = $25 >> 4;
-  $43 = $26;
- } else {
-  $27 = ((($22)) + 12|0);
-  $28 = HEAP32[$27>>2]|0;
-  $43 = $28;
- }
- $29 = $5;
- $30 = HEAP32[$29>>2]|0;
- $31 = $30 >>> 11;
- $32 = $31 & 8;
- $33 = ($32|0)!=(0);
- $34 = $5;
- if ($33) {
-  $35 = HEAP32[$34>>2]|0;
-  $36 = $35 >>> 11;
-  $37 = $36 & 496;
-  $38 = $37 >> 4;
-  $42 = $38;
- } else {
-  $39 = ((($34)) + 12|0);
-  $40 = HEAP32[$39>>2]|0;
-  $42 = $40;
- }
- $41 = (($43) + ($42))|0;
- $6 = $41;
- $44 = HEAP32[$1>>2]|0;
- $45 = HEAP32[$44>>2]|0;
- $46 = $45 >>> 11;
- $47 = $46 & 8;
- $48 = ($47|0)!=(0);
- if ($48) {
-  $55 = 11;
- } else {
-  $49 = HEAP32[$1>>2]|0;
-  $50 = ((($49)) + 12|0);
-  $51 = ((($50)) + 4|0);
-  $52 = HEAP32[$51>>2]|0;
-  $55 = $52;
- }
- $53 = $6;
- $54 = ($55|0)<($53|0);
- if ($54) {
-  $56 = $3;
-  $57 = $4;
-  $58 = $6;
-  _resize_capa($56,$57,$58);
- }
- $59 = $4;
- $60 = HEAP32[$59>>2]|0;
- $61 = $60 >>> 11;
- $62 = $61 & 8;
- $63 = ($62|0)!=(0);
- $64 = $4;
- $65 = ((($64)) + 12|0);
- if ($63) {
-  $81 = $65;
- } else {
-  $66 = ((($65)) + 8|0);
-  $67 = HEAP32[$66>>2]|0;
-  $81 = $67;
- }
- $68 = $4;
- $69 = HEAP32[$68>>2]|0;
- $70 = $69 >>> 11;
- $71 = $70 & 8;
- $72 = ($71|0)!=(0);
- $73 = $4;
- if ($72) {
-  $74 = HEAP32[$73>>2]|0;
-  $75 = $74 >>> 11;
-  $76 = $75 & 496;
-  $77 = $76 >> 4;
-  $82 = $77;
- } else {
-  $78 = ((($73)) + 12|0);
-  $79 = HEAP32[$78>>2]|0;
-  $82 = $79;
- }
- $80 = (($81) + ($82)|0);
- $83 = $5;
- $84 = HEAP32[$83>>2]|0;
- $85 = $84 >>> 11;
- $86 = $85 & 8;
- $87 = ($86|0)!=(0);
- $88 = $5;
- $89 = ((($88)) + 12|0);
- if ($87) {
-  $104 = $89;
- } else {
-  $90 = ((($89)) + 8|0);
-  $91 = HEAP32[$90>>2]|0;
-  $104 = $91;
- }
- $92 = $5;
- $93 = HEAP32[$92>>2]|0;
- $94 = $93 >>> 11;
- $95 = $94 & 8;
- $96 = ($95|0)!=(0);
- $97 = $5;
- if ($96) {
-  $98 = HEAP32[$97>>2]|0;
-  $99 = $98 >>> 11;
-  $100 = $99 & 496;
-  $101 = $100 >> 4;
-  $105 = $101;
- } else {
-  $102 = ((($97)) + 12|0);
-  $103 = HEAP32[$102>>2]|0;
-  $105 = $103;
- }
- _memcpy(($80|0),($104|0),($105|0))|0;
- $106 = $4;
- $107 = HEAP32[$106>>2]|0;
- $108 = $107 >>> 11;
- $109 = $108 & 8;
- $110 = ($109|0)!=(0);
- $111 = $6;
- if ($110) {
-  $8 = $111;
-  $112 = $4;
-  $113 = HEAP32[$112>>2]|0;
-  $114 = $113 >>> 11;
-  $115 = $114 & -497;
-  $116 = HEAP32[$112>>2]|0;
-  $117 = $115 & 2097151;
-  $118 = $117 << 11;
-  $119 = $116 & 2047;
-  $120 = $119 | $118;
-  HEAP32[$112>>2] = $120;
-  $121 = $8;
-  $122 = $121 << 4;
-  $123 = $4;
-  $124 = HEAP32[$123>>2]|0;
-  $125 = $124 >>> 11;
-  $126 = $125 | $122;
-  $127 = HEAP32[$123>>2]|0;
-  $128 = $126 & 2097151;
-  $129 = $128 << 11;
-  $130 = $127 & 2047;
-  $131 = $130 | $129;
-  HEAP32[$123>>2] = $131;
- } else {
-  $132 = $4;
-  $133 = ((($132)) + 12|0);
-  HEAP32[$133>>2] = $111;
- }
- $134 = $4;
- $135 = HEAP32[$134>>2]|0;
- $136 = $135 >>> 11;
- $137 = $136 & 8;
- $138 = ($137|0)!=(0);
- $139 = $4;
- $140 = ((($139)) + 12|0);
- if ($138) {
-  $145 = $140;
-  $143 = $6;
-  $144 = (($145) + ($143)|0);
-  HEAP8[$144>>0] = 0;
-  STACKTOP = sp;return;
- } else {
-  $141 = ((($140)) + 8|0);
-  $142 = HEAP32[$141>>2]|0;
-  $145 = $142;
-  $143 = $6;
-  $144 = (($145) + ($143)|0);
-  HEAP8[$144>>0] = 0;
-  STACKTOP = sp;return;
- }
-}
-function _mrb_str_to_str($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);
- $$byval_copy1 = sp + 40|0;
- $$byval_copy = sp + 32|0;
- $4 = sp + 16|0;
- $5 = sp + 8|0;
- $6 = sp;
- $3 = $1;
- $7 = ((($2)) + 4|0);
- $8 = HEAP32[$7>>2]|0;
- $9 = ($8|0)==(16);
- if ($9) {
-  ;HEAP32[$0>>2]=HEAP32[$2>>2]|0;HEAP32[$0+4>>2]=HEAP32[$2+4>>2]|0;
-  STACKTOP = sp;return;
- }
- $10 = $3;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
- _mrb_check_convert_type($5,$10,$$byval_copy,16,65324,65331);
- ;HEAP32[$4>>2]=HEAP32[$5>>2]|0;HEAP32[$4+4>>2]=HEAP32[$5+4>>2]|0;
- $11 = ((($4)) + 4|0);
- $12 = HEAP32[$11>>2]|0;
- $13 = ($12|0)==(0);
- if ($13) {
-  $14 = HEAP32[$4>>2]|0;
-  $15 = ($14|0)!=(0);
-  if (!($15)) {
-   $16 = $3;
-   ;HEAP32[$$byval_copy1>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$2+4>>2]|0;
-   _mrb_convert_type($6,$16,$$byval_copy1,16,65324,69276);
-   ;HEAP32[$4>>2]=HEAP32[$6>>2]|0;HEAP32[$4+4>>2]=HEAP32[$6+4>>2]|0;
-  }
- }
- ;HEAP32[$0>>2]=HEAP32[$4>>2]|0;HEAP32[$0+4>>2]=HEAP32[$4+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_str_plus($0,$1,$2,$3) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;
- var $118 = 0, $119 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;
- var $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0;
- var $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0;
- var $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0;
- var $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $4 = $1;
- $8 = HEAP32[$2>>2]|0;
- $5 = $8;
- $9 = HEAP32[$3>>2]|0;
- $6 = $9;
- $10 = $4;
- $11 = $5;
- $12 = HEAP32[$11>>2]|0;
- $13 = $12 >>> 11;
- $14 = $13 & 8;
- $15 = ($14|0)!=(0);
- $16 = $5;
- if ($15) {
-  $17 = HEAP32[$16>>2]|0;
-  $18 = $17 >>> 11;
-  $19 = $18 & 496;
-  $20 = $19 >> 4;
-  $37 = $20;
- } else {
-  $21 = ((($16)) + 12|0);
-  $22 = HEAP32[$21>>2]|0;
-  $37 = $22;
- }
- $23 = $6;
- $24 = HEAP32[$23>>2]|0;
- $25 = $24 >>> 11;
- $26 = $25 & 8;
- $27 = ($26|0)!=(0);
- $28 = $6;
- if ($27) {
-  $29 = HEAP32[$28>>2]|0;
-  $30 = $29 >>> 11;
-  $31 = $30 & 496;
-  $32 = $31 >> 4;
-  $36 = $32;
- } else {
-  $33 = ((($28)) + 12|0);
-  $34 = HEAP32[$33>>2]|0;
-  $36 = $34;
- }
- $35 = (($37) + ($36))|0;
- $38 = (_str_new($10,0,$35)|0);
- $7 = $38;
- $39 = $7;
- $40 = HEAP32[$39>>2]|0;
- $41 = $40 >>> 11;
- $42 = $41 & 8;
- $43 = ($42|0)!=(0);
- $44 = $7;
- $45 = ((($44)) + 12|0);
- if ($43) {
-  $69 = $45;
- } else {
-  $46 = ((($45)) + 8|0);
-  $47 = HEAP32[$46>>2]|0;
-  $69 = $47;
- }
- $48 = $5;
- $49 = HEAP32[$48>>2]|0;
- $50 = $49 >>> 11;
- $51 = $50 & 8;
- $52 = ($51|0)!=(0);
- $53 = $5;
- $54 = ((($53)) + 12|0);
- if ($52) {
-  $70 = $54;
- } else {
-  $55 = ((($54)) + 8|0);
-  $56 = HEAP32[$55>>2]|0;
-  $70 = $56;
- }
- $57 = $5;
- $58 = HEAP32[$57>>2]|0;
- $59 = $58 >>> 11;
- $60 = $59 & 8;
- $61 = ($60|0)!=(0);
- $62 = $5;
- if ($61) {
-  $63 = HEAP32[$62>>2]|0;
-  $64 = $63 >>> 11;
-  $65 = $64 & 496;
-  $66 = $65 >> 4;
-  $71 = $66;
- } else {
-  $67 = ((($62)) + 12|0);
-  $68 = HEAP32[$67>>2]|0;
-  $71 = $68;
- }
- _memcpy(($69|0),($70|0),($71|0))|0;
- $72 = $7;
- $73 = HEAP32[$72>>2]|0;
- $74 = $73 >>> 11;
- $75 = $74 & 8;
- $76 = ($75|0)!=(0);
- $77 = $7;
- $78 = ((($77)) + 12|0);
- if ($76) {
-  $94 = $78;
- } else {
-  $79 = ((($78)) + 8|0);
-  $80 = HEAP32[$79>>2]|0;
-  $94 = $80;
- }
- $81 = $5;
- $82 = HEAP32[$81>>2]|0;
- $83 = $82 >>> 11;
- $84 = $83 & 8;
- $85 = ($84|0)!=(0);
- $86 = $5;
- if ($85) {
-  $87 = HEAP32[$86>>2]|0;
-  $88 = $87 >>> 11;
-  $89 = $88 & 496;
-  $90 = $89 >> 4;
-  $95 = $90;
- } else {
-  $91 = ((($86)) + 12|0);
-  $92 = HEAP32[$91>>2]|0;
-  $95 = $92;
- }
- $93 = (($94) + ($95)|0);
- $96 = $6;
- $97 = HEAP32[$96>>2]|0;
- $98 = $97 >>> 11;
- $99 = $98 & 8;
- $100 = ($99|0)!=(0);
- $101 = $6;
- $102 = ((($101)) + 12|0);
- if ($100) {
-  $117 = $102;
- } else {
-  $103 = ((($102)) + 8|0);
-  $104 = HEAP32[$103>>2]|0;
-  $117 = $104;
- }
- $105 = $6;
- $106 = HEAP32[$105>>2]|0;
- $107 = $106 >>> 11;
- $108 = $107 & 8;
- $109 = ($108|0)!=(0);
- $110 = $6;
- if ($109) {
-  $111 = HEAP32[$110>>2]|0;
-  $112 = $111 >>> 11;
-  $113 = $112 & 496;
-  $114 = $113 >> 4;
-  $118 = $114;
-  _memcpy(($93|0),($117|0),($118|0))|0;
-  $119 = $7;
-  _mrb_obj_value_260($0,$119);
-  STACKTOP = sp;return;
- } else {
-  $115 = ((($110)) + 12|0);
-  $116 = HEAP32[$115>>2]|0;
-  $118 = $116;
-  _memcpy(($93|0),($117|0),($118|0))|0;
-  $119 = $7;
-  _mrb_obj_value_260($0,$119);
-  STACKTOP = sp;return;
- }
-}
-function _mrb_str_cmp($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;
- var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0;
- var $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0;
- var $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0;
- var $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0;
- var $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0;
- var $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0;
- var $99 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $4 = $0;
- $9 = HEAP32[$1>>2]|0;
- $7 = $9;
- $10 = HEAP32[$2>>2]|0;
- $8 = $10;
- $11 = $7;
- $12 = HEAP32[$11>>2]|0;
- $13 = $12 >>> 11;
- $14 = $13 & 8;
- $15 = ($14|0)!=(0);
- $16 = $7;
- if ($15) {
-  $17 = HEAP32[$16>>2]|0;
-  $18 = $17 >>> 11;
-  $19 = $18 & 496;
-  $20 = $19 >> 4;
-  $36 = $20;
- } else {
-  $21 = ((($16)) + 12|0);
-  $22 = HEAP32[$21>>2]|0;
-  $36 = $22;
- }
- $23 = $8;
- $24 = HEAP32[$23>>2]|0;
- $25 = $24 >>> 11;
- $26 = $25 & 8;
- $27 = ($26|0)!=(0);
- $28 = $8;
- if ($27) {
-  $29 = HEAP32[$28>>2]|0;
-  $30 = $29 >>> 11;
-  $31 = $30 & 496;
-  $32 = $31 >> 4;
-  $37 = $32;
- } else {
-  $33 = ((($28)) + 12|0);
-  $34 = HEAP32[$33>>2]|0;
-  $37 = $34;
- }
- $35 = ($36|0)>($37|0);
- do {
-  if ($35) {
-   $38 = $8;
-   $39 = HEAP32[$38>>2]|0;
-   $40 = $39 >>> 11;
-   $41 = $40 & 8;
-   $42 = ($41|0)!=(0);
-   $43 = $8;
-   if ($42) {
-    $44 = HEAP32[$43>>2]|0;
-    $45 = $44 >>> 11;
-    $46 = $45 & 496;
-    $47 = $46 >> 4;
-    $62 = $47;
-    break;
-   } else {
-    $48 = ((($43)) + 12|0);
-    $49 = HEAP32[$48>>2]|0;
-    $62 = $49;
-    break;
-   }
-  } else {
-   $50 = $7;
-   $51 = HEAP32[$50>>2]|0;
-   $52 = $51 >>> 11;
-   $53 = $52 & 8;
-   $54 = ($53|0)!=(0);
-   $55 = $7;
-   if ($54) {
-    $56 = HEAP32[$55>>2]|0;
-    $57 = $56 >>> 11;
-    $58 = $57 & 496;
-    $59 = $58 >> 4;
-    $62 = $59;
-    break;
-   } else {
-    $60 = ((($55)) + 12|0);
-    $61 = HEAP32[$60>>2]|0;
-    $62 = $61;
-    break;
-   }
-  }
- } while(0);
- $5 = $62;
- $63 = $7;
- $64 = HEAP32[$63>>2]|0;
- $65 = $64 >>> 11;
- $66 = $65 & 8;
- $67 = ($66|0)!=(0);
- $68 = $7;
- $69 = ((($68)) + 12|0);
- if ($67) {
-  $82 = $69;
- } else {
-  $70 = ((($69)) + 8|0);
-  $71 = HEAP32[$70>>2]|0;
-  $82 = $71;
- }
- $72 = $8;
- $73 = HEAP32[$72>>2]|0;
- $74 = $73 >>> 11;
- $75 = $74 & 8;
- $76 = ($75|0)!=(0);
- $77 = $8;
- $78 = ((($77)) + 12|0);
- if ($76) {
-  $83 = $78;
- } else {
-  $79 = ((($78)) + 8|0);
-  $80 = HEAP32[$79>>2]|0;
-  $83 = $80;
- }
- $81 = $5;
- $84 = (_memcmp($82,$83,$81)|0);
- $6 = $84;
- $85 = $6;
- $86 = ($85|0)==(0);
- if (!($86)) {
-  $141 = $6;
-  $142 = ($141|0)>(0);
-  if ($142) {
-   $3 = 1;
-   $143 = $3;
-   STACKTOP = sp;return ($143|0);
-  } else {
-   $3 = -1;
-   $143 = $3;
-   STACKTOP = sp;return ($143|0);
-  }
- }
- $87 = $7;
- $88 = HEAP32[$87>>2]|0;
- $89 = $88 >>> 11;
- $90 = $89 & 8;
- $91 = ($90|0)!=(0);
- $92 = $7;
- if ($91) {
-  $93 = HEAP32[$92>>2]|0;
-  $94 = $93 >>> 11;
-  $95 = $94 & 496;
-  $96 = $95 >> 4;
-  $112 = $96;
- } else {
-  $97 = ((($92)) + 12|0);
-  $98 = HEAP32[$97>>2]|0;
-  $112 = $98;
- }
- $99 = $8;
- $100 = HEAP32[$99>>2]|0;
- $101 = $100 >>> 11;
- $102 = $101 & 8;
- $103 = ($102|0)!=(0);
- $104 = $8;
- if ($103) {
-  $105 = HEAP32[$104>>2]|0;
-  $106 = $105 >>> 11;
-  $107 = $106 & 496;
-  $108 = $107 >> 4;
-  $113 = $108;
- } else {
-  $109 = ((($104)) + 12|0);
-  $110 = HEAP32[$109>>2]|0;
-  $113 = $110;
- }
- $111 = ($112|0)==($113|0);
- if ($111) {
-  $3 = 0;
-  $143 = $3;
-  STACKTOP = sp;return ($143|0);
- }
- $114 = $7;
- $115 = HEAP32[$114>>2]|0;
- $116 = $115 >>> 11;
- $117 = $116 & 8;
- $118 = ($117|0)!=(0);
- $119 = $7;
- if ($118) {
-  $120 = HEAP32[$119>>2]|0;
-  $121 = $120 >>> 11;
-  $122 = $121 & 496;
-  $123 = $122 >> 4;
-  $139 = $123;
- } else {
-  $124 = ((($119)) + 12|0);
-  $125 = HEAP32[$124>>2]|0;
-  $139 = $125;
- }
- $126 = $8;
- $127 = HEAP32[$126>>2]|0;
- $128 = $127 >>> 11;
- $129 = $128 & 8;
- $130 = ($129|0)!=(0);
- $131 = $8;
- if ($130) {
-  $132 = HEAP32[$131>>2]|0;
-  $133 = $132 >>> 11;
-  $134 = $133 & 496;
-  $135 = $134 >> 4;
-  $140 = $135;
- } else {
-  $136 = ((($131)) + 12|0);
-  $137 = HEAP32[$136>>2]|0;
-  $140 = $137;
- }
- $138 = ($139|0)>($140|0);
- if ($138) {
-  $3 = 1;
-  $143 = $3;
-  STACKTOP = sp;return ($143|0);
- } else {
-  $3 = -1;
-  $143 = $3;
-  STACKTOP = sp;return ($143|0);
- }
- return (0)|0;
-}
-function _mrb_str_equal($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $$byval_copy2 = 0, $$byval_copy3 = 0, $$byval_copy4 = 0, $$byval_copy5 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0;
- var $24 = 0, $25 = 0, $26 = 0, $27 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 80|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(80|0);
- $$byval_copy5 = sp + 64|0;
- $$byval_copy4 = sp + 56|0;
- $$byval_copy3 = sp + 48|0;
- $$byval_copy2 = sp + 40|0;
- $$byval_copy1 = sp + 32|0;
- $$byval_copy = sp + 24|0;
- $vararg_buffer = sp;
- $5 = sp + 8|0;
- $4 = $0;
- $6 = ((($2)) + 4|0);
- $7 = HEAP32[$6>>2]|0;
- $8 = ($7>>>0)<(8);
- if ($8) {
-  $3 = 0;
-  $27 = $3;
-  STACKTOP = sp;return ($27|0);
- }
- $9 = ((($2)) + 4|0);
- $10 = HEAP32[$9>>2]|0;
- $11 = ($10|0)==(16);
- if ($11) {
-  $25 = $4;
-  ;HEAP32[$$byval_copy4>>2]=HEAP32[$1>>2]|0;HEAP32[$$byval_copy4+4>>2]=HEAP32[$1+4>>2]|0;
-  ;HEAP32[$$byval_copy5>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy5+4>>2]=HEAP32[$2+4>>2]|0;
-  $26 = (_str_eql($25,$$byval_copy4,$$byval_copy5)|0);
-  $3 = $26;
-  $27 = $3;
-  STACKTOP = sp;return ($27|0);
- }
- $12 = ((($2)) + 4|0);
- $13 = HEAP32[$12>>2]|0;
- $14 = ($13|0)==(0);
- if ($14) {
-  $15 = HEAP32[$2>>2]|0;
-  $16 = ($15|0)!=(0);
-  if (!($16)) {
-   $3 = 0;
-   $27 = $3;
-   STACKTOP = sp;return ($27|0);
-  }
- }
- $17 = $4;
- $18 = $4;
- $19 = (_mrb_intern_static($18,65331,6)|0);
- ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
- $20 = (_mrb_respond_to($17,$$byval_copy,$19)|0);
- $21 = ($20<<24>>24)!=(0);
- if ($21) {
-  $22 = $4;
-  ;HEAP32[$$byval_copy1>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$2+4>>2]|0;
-  _mrb_funcall($5,$22,$$byval_copy1,65331,0,$vararg_buffer);
-  ;HEAP32[$2>>2]=HEAP32[$5>>2]|0;HEAP32[$2+4>>2]=HEAP32[$5+4>>2]|0;
-  $23 = $4;
-  ;HEAP32[$$byval_copy2>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy2+4>>2]=HEAP32[$2+4>>2]|0;
-  ;HEAP32[$$byval_copy3>>2]=HEAP32[$1>>2]|0;HEAP32[$$byval_copy3+4>>2]=HEAP32[$1+4>>2]|0;
-  $24 = (_mrb_equal($23,$$byval_copy2,$$byval_copy3)|0);
-  $3 = $24;
-  $27 = $3;
-  STACKTOP = sp;return ($27|0);
- } else {
-  $3 = 0;
-  $27 = $3;
-  STACKTOP = sp;return ($27|0);
- }
- return (0)|0;
-}
-function _str_eql($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;
- var $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0;
- var $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $4 = $0;
- $6 = HEAP32[$1>>2]|0;
- $7 = HEAP32[$6>>2]|0;
- $8 = $7 >>> 11;
- $9 = $8 & 8;
- $10 = ($9|0)!=(0);
- $11 = HEAP32[$1>>2]|0;
- if ($10) {
-  $12 = HEAP32[$11>>2]|0;
-  $13 = $12 >>> 11;
-  $14 = $13 & 496;
-  $15 = $14 >> 4;
-  $18 = $15;
- } else {
-  $16 = ((($11)) + 12|0);
-  $17 = HEAP32[$16>>2]|0;
-  $18 = $17;
- }
- $5 = $18;
- $19 = $5;
- $20 = HEAP32[$2>>2]|0;
- $21 = HEAP32[$20>>2]|0;
- $22 = $21 >>> 11;
- $23 = $22 & 8;
- $24 = ($23|0)!=(0);
- $25 = HEAP32[$2>>2]|0;
- if ($24) {
-  $26 = HEAP32[$25>>2]|0;
-  $27 = $26 >>> 11;
-  $28 = $27 & 496;
-  $29 = $28 >> 4;
-  $33 = $29;
- } else {
-  $30 = ((($25)) + 12|0);
-  $31 = HEAP32[$30>>2]|0;
-  $33 = $31;
- }
- $32 = ($19|0)!=($33|0);
- if ($32) {
-  $3 = 0;
-  $57 = $3;
-  STACKTOP = sp;return ($57|0);
- }
- $34 = HEAP32[$1>>2]|0;
- $35 = HEAP32[$34>>2]|0;
- $36 = $35 >>> 11;
- $37 = $36 & 8;
- $38 = ($37|0)!=(0);
- $39 = HEAP32[$1>>2]|0;
- $40 = ((($39)) + 12|0);
- if ($38) {
-  $53 = $40;
- } else {
-  $41 = ((($40)) + 8|0);
-  $42 = HEAP32[$41>>2]|0;
-  $53 = $42;
- }
- $43 = HEAP32[$2>>2]|0;
- $44 = HEAP32[$43>>2]|0;
- $45 = $44 >>> 11;
- $46 = $45 & 8;
- $47 = ($46|0)!=(0);
- $48 = HEAP32[$2>>2]|0;
- $49 = ((($48)) + 12|0);
- if ($47) {
-  $54 = $49;
- } else {
-  $50 = ((($49)) + 8|0);
-  $51 = HEAP32[$50>>2]|0;
-  $54 = $51;
- }
- $52 = $5;
- $55 = (_memcmp($53,$54,$52)|0);
- $56 = ($55|0)==(0);
- if ($56) {
-  $3 = 1;
-  $57 = $3;
-  STACKTOP = sp;return ($57|0);
- } else {
-  $3 = 0;
-  $57 = $3;
-  STACKTOP = sp;return ($57|0);
- }
- return (0)|0;
-}
-function _mrb_string_value_ptr($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $$byval_copy = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $$byval_copy = sp + 16|0;
- $3 = sp;
- $2 = $0;
- $4 = $2;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$1>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$1+4>>2]|0;
- _mrb_str_to_str($3,$4,$$byval_copy);
- $5 = HEAP32[$3>>2]|0;
- $6 = HEAP32[$5>>2]|0;
- $7 = $6 >>> 11;
- $8 = $7 & 8;
- $9 = ($8|0)!=(0);
- $10 = HEAP32[$3>>2]|0;
- $11 = ((($10)) + 12|0);
- if ($9) {
-  $14 = $11;
-  STACKTOP = sp;return ($14|0);
- } else {
-  $12 = ((($11)) + 8|0);
-  $13 = HEAP32[$12>>2]|0;
-  $14 = $13;
-  STACKTOP = sp;return ($14|0);
- }
- return (0)|0;
-}
-function _mrb_noregexp($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $2;
- $4 = $2;
- $5 = (_mrb_class_get($4,65108)|0);
- _mrb_raise($3,$5,55784);
- // unreachable;
-}
-function _mrb_regexp_check($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $$byval_copy1 = sp + 16|0;
- $$byval_copy = sp + 8|0;
- $2 = $0;
- $3 = $2;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$1>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$1+4>>2]|0;
- $4 = (_mrb_regexp_p($3,$$byval_copy)|0);
- $5 = ($4<<24>>24)!=(0);
- if (!($5)) {
-  STACKTOP = sp;return;
- }
- $6 = $2;
- ;HEAP32[$$byval_copy1>>2]=HEAP32[$1>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$1+4>>2]|0;
- _mrb_noregexp($6,$$byval_copy1);
- STACKTOP = sp;return;
-}
-function _mrb_str_dup($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $$byval_copy = sp + 16|0;
- $3 = $1;
- $6 = HEAP32[$2>>2]|0;
- $4 = $6;
- $7 = $3;
- $8 = (_str_new($7,0,0)|0);
- $5 = $8;
- $9 = $3;
- $10 = $5;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
- _str_with_class($9,$10,$$byval_copy);
- $11 = $3;
- $12 = $5;
- $13 = $4;
- _str_replace($0,$11,$12,$13);
- STACKTOP = sp;return;
-}
-function _str_with_class($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $0;
- $4 = $1;
- $5 = HEAP32[$2>>2]|0;
- $6 = ((($5)) + 4|0);
- $7 = HEAP32[$6>>2]|0;
- $8 = $4;
- $9 = ((($8)) + 4|0);
- HEAP32[$9>>2] = $7;
- STACKTOP = sp;return;
-}
-function _str_replace($0,$1,$2,$3) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;
- var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0;
- var $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0, $152 = 0, $153 = 0;
- var $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;
- var $28 = 0, $29 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0;
- var $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0;
- var $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0;
- var $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $4 = $1;
- $5 = $2;
- $6 = $3;
- $9 = $4;
- $10 = $5;
- _check_frozen($9,$10);
- $11 = $6;
- $12 = HEAP32[$11>>2]|0;
- $13 = $12 >>> 11;
- $14 = $13 & 8;
- $15 = ($14|0)!=(0);
- $16 = $6;
- if ($15) {
-  $17 = HEAP32[$16>>2]|0;
-  $18 = $17 >>> 11;
-  $19 = $18 & 496;
-  $20 = $19 >> 4;
-  $23 = $20;
- } else {
-  $21 = ((($16)) + 12|0);
-  $22 = HEAP32[$21>>2]|0;
-  $23 = $22;
- }
- $7 = $23;
- $24 = $5;
- $25 = HEAP32[$24>>2]|0;
- $26 = $25 >>> 11;
- $27 = $26 & 1;
- $28 = ($27|0)!=(0);
- if ($28) {
-  $29 = $4;
-  $30 = $5;
-  $31 = ((($30)) + 12|0);
-  $32 = ((($31)) + 4|0);
-  $33 = HEAP32[$32>>2]|0;
-  _str_decref($29,$33);
- } else {
-  $34 = $5;
-  $35 = HEAP32[$34>>2]|0;
-  $36 = $35 >>> 11;
-  $37 = $36 & 8;
-  $38 = ($37|0)!=(0);
-  if (!($38)) {
-   $39 = $5;
-   $40 = HEAP32[$39>>2]|0;
-   $41 = $40 >>> 11;
-   $42 = $41 & 2;
-   $43 = ($42|0)!=(0);
-   if (!($43)) {
-    $44 = $4;
-    $45 = $5;
-    $46 = ((($45)) + 12|0);
-    $47 = ((($46)) + 8|0);
-    $48 = HEAP32[$47>>2]|0;
-    _mrb_free($44,$48);
-   }
-  }
- }
- $49 = $5;
- $50 = HEAP32[$49>>2]|0;
- $51 = $50 >>> 11;
- $52 = $51 & -3;
- $53 = HEAP32[$49>>2]|0;
- $54 = $52 & 2097151;
- $55 = $54 << 11;
- $56 = $53 & 2047;
- $57 = $56 | $55;
- HEAP32[$49>>2] = $57;
- $58 = $6;
- $59 = HEAP32[$58>>2]|0;
- $60 = $59 >>> 11;
- $61 = $60 & 1;
- $62 = ($61|0)!=(0);
- do {
-  if (!($62)) {
-   $105 = $7;
-   $106 = ($105|0)<=(11);
-   if (!($106)) {
-    $159 = $4;
-    $160 = $6;
-    _str_make_shared($159,$160);
-    break;
-   }
-   $107 = $5;
-   $108 = HEAP32[$107>>2]|0;
-   $109 = $108 >>> 11;
-   $110 = $109 & -2;
-   $111 = HEAP32[$107>>2]|0;
-   $112 = $110 & 2097151;
-   $113 = $112 << 11;
-   $114 = $111 & 2047;
-   $115 = $114 | $113;
-   HEAP32[$107>>2] = $115;
-   $116 = $5;
-   $117 = HEAP32[$116>>2]|0;
-   $118 = $117 >>> 11;
-   $119 = $118 | 8;
-   $120 = HEAP32[$116>>2]|0;
-   $121 = $119 & 2097151;
-   $122 = $121 << 11;
-   $123 = $120 & 2047;
-   $124 = $123 | $122;
-   HEAP32[$116>>2] = $124;
-   $125 = $5;
-   $126 = ((($125)) + 12|0);
-   $127 = $6;
-   $128 = HEAP32[$127>>2]|0;
-   $129 = $128 >>> 11;
-   $130 = $129 & 8;
-   $131 = ($130|0)!=(0);
-   $132 = $6;
-   $133 = ((($132)) + 12|0);
-   if ($131) {
-    $137 = $133;
-   } else {
-    $134 = ((($133)) + 8|0);
-    $135 = HEAP32[$134>>2]|0;
-    $137 = $135;
-   }
-   $136 = $7;
-   _memcpy(($126|0),($137|0),($136|0))|0;
-   $138 = $7;
-   $8 = $138;
-   $139 = $5;
-   $140 = HEAP32[$139>>2]|0;
-   $141 = $140 >>> 11;
-   $142 = $141 & -497;
-   $143 = HEAP32[$139>>2]|0;
-   $144 = $142 & 2097151;
-   $145 = $144 << 11;
-   $146 = $143 & 2047;
-   $147 = $146 | $145;
-   HEAP32[$139>>2] = $147;
-   $148 = $8;
-   $149 = $148 << 4;
-   $150 = $5;
-   $151 = HEAP32[$150>>2]|0;
-   $152 = $151 >>> 11;
-   $153 = $152 | $149;
-   $154 = HEAP32[$150>>2]|0;
-   $155 = $153 & 2097151;
-   $156 = $155 << 11;
-   $157 = $154 & 2047;
-   $158 = $157 | $156;
-   HEAP32[$150>>2] = $158;
-   $161 = $5;
-   _mrb_obj_value_260($0,$161);
-   STACKTOP = sp;return;
-  }
- } while(0);
- $63 = $5;
- $64 = HEAP32[$63>>2]|0;
- $65 = $64 >>> 11;
- $66 = $65 & -505;
- $67 = HEAP32[$63>>2]|0;
- $68 = $66 & 2097151;
- $69 = $68 << 11;
- $70 = $67 & 2047;
- $71 = $70 | $69;
- HEAP32[$63>>2] = $71;
- $72 = $6;
- $73 = ((($72)) + 12|0);
- $74 = ((($73)) + 8|0);
- $75 = HEAP32[$74>>2]|0;
- $76 = $5;
- $77 = ((($76)) + 12|0);
- $78 = ((($77)) + 8|0);
- HEAP32[$78>>2] = $75;
- $79 = $7;
- $80 = $5;
- $81 = ((($80)) + 12|0);
- HEAP32[$81>>2] = $79;
- $82 = $6;
- $83 = ((($82)) + 12|0);
- $84 = ((($83)) + 4|0);
- $85 = HEAP32[$84>>2]|0;
- $86 = $5;
- $87 = ((($86)) + 12|0);
- $88 = ((($87)) + 4|0);
- HEAP32[$88>>2] = $85;
- $89 = $5;
- $90 = HEAP32[$89>>2]|0;
- $91 = $90 >>> 11;
- $92 = $91 | 1;
- $93 = HEAP32[$89>>2]|0;
- $94 = $92 & 2097151;
- $95 = $94 << 11;
- $96 = $93 & 2047;
- $97 = $96 | $95;
- HEAP32[$89>>2] = $97;
- $98 = $5;
- $99 = ((($98)) + 12|0);
- $100 = ((($99)) + 4|0);
- $101 = HEAP32[$100>>2]|0;
- $102 = ((($101)) + 4|0);
- $103 = HEAP32[$102>>2]|0;
- $104 = (($103) + 1)|0;
- HEAP32[$102>>2] = $104;
- $161 = $5;
- _mrb_obj_value_260($0,$161);
- STACKTOP = sp;return;
-}
-function _str_make_shared($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;
- var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0;
- var $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0;
- var $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0;
- var $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0;
- var $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0;
- var $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $2 = $0;
- $3 = $1;
- $7 = $3;
- $8 = HEAP32[$7>>2]|0;
- $9 = $8 >>> 11;
- $10 = $9 & 1;
- $11 = ($10|0)!=(0);
- if ($11) {
-  STACKTOP = sp;return;
- }
- $12 = $2;
- $13 = (_mrb_malloc($12,16)|0);
- $4 = $13;
- $14 = $4;
- $15 = ((($14)) + 4|0);
- HEAP32[$15>>2] = 1;
- $16 = $3;
- $17 = HEAP32[$16>>2]|0;
- $18 = $17 >>> 11;
- $19 = $18 & 8;
- $20 = ($19|0)!=(0);
- $21 = $3;
- $22 = HEAP32[$21>>2]|0;
- $23 = $22 >>> 11;
- do {
-  if ($20) {
-   $24 = $23 & 496;
-   $25 = $24 >> 4;
-   $5 = $25;
-   $26 = $2;
-   $27 = $5;
-   $28 = (($27) + 1)|0;
-   $29 = (_mrb_malloc($26,$28)|0);
-   $6 = $29;
-   $30 = $6;
-   $31 = $3;
-   $32 = ((($31)) + 12|0);
-   $33 = $5;
-   _memcpy(($30|0),($32|0),($33|0))|0;
-   $34 = $6;
-   $35 = $5;
-   $36 = (($34) + ($35)|0);
-   HEAP8[$36>>0] = 0;
-   $37 = $3;
-   $38 = HEAP32[$37>>2]|0;
-   $39 = $38 >>> 11;
-   $40 = $39 & -505;
-   $41 = HEAP32[$37>>2]|0;
-   $42 = $40 & 2097151;
-   $43 = $42 << 11;
-   $44 = $41 & 2047;
-   $45 = $44 | $43;
-   HEAP32[$37>>2] = $45;
-   $46 = $6;
-   $47 = $3;
-   $48 = ((($47)) + 12|0);
-   $49 = ((($48)) + 8|0);
-   HEAP32[$49>>2] = $46;
-   $50 = $5;
-   $51 = $3;
-   $52 = ((($51)) + 12|0);
-   HEAP32[$52>>2] = $50;
-   $53 = $4;
-   $54 = HEAP8[$53>>0]|0;
-   $55 = $54 & -2;
-   HEAP8[$53>>0] = $55;
-   $56 = $3;
-   $57 = ((($56)) + 12|0);
-   $58 = ((($57)) + 8|0);
-   $59 = HEAP32[$58>>2]|0;
-   $60 = $4;
-   $61 = ((($60)) + 8|0);
-   HEAP32[$61>>2] = $59;
-  } else {
-   $62 = $23 & 2;
-   $63 = ($62|0)!=(0);
-   $64 = $4;
-   $65 = HEAP8[$64>>0]|0;
-   $66 = $65 & -2;
-   if ($63) {
-    $67 = $66 | 1;
-    HEAP8[$64>>0] = $67;
-    $68 = $3;
-    $69 = ((($68)) + 12|0);
-    $70 = ((($69)) + 8|0);
-    $71 = HEAP32[$70>>2]|0;
-    $72 = $4;
-    $73 = ((($72)) + 8|0);
-    HEAP32[$73>>2] = $71;
-    $74 = $3;
-    $75 = HEAP32[$74>>2]|0;
-    $76 = $75 >>> 11;
-    $77 = $76 & -3;
-    $78 = HEAP32[$74>>2]|0;
-    $79 = $77 & 2097151;
-    $80 = $79 << 11;
-    $81 = $78 & 2047;
-    $82 = $81 | $80;
-    HEAP32[$74>>2] = $82;
-    break;
-   }
-   HEAP8[$64>>0] = $66;
-   $83 = $3;
-   $84 = ((($83)) + 12|0);
-   $85 = ((($84)) + 4|0);
-   $86 = HEAP32[$85>>2]|0;
-   $87 = $3;
-   $88 = ((($87)) + 12|0);
-   $89 = HEAP32[$88>>2]|0;
-   $90 = ($86|0)>($89|0);
-   if ($90) {
-    $91 = $2;
-    $92 = $3;
-    $93 = ((($92)) + 12|0);
-    $94 = ((($93)) + 8|0);
-    $95 = HEAP32[$94>>2]|0;
-    $96 = $3;
-    $97 = ((($96)) + 12|0);
-    $98 = HEAP32[$97>>2]|0;
-    $99 = (($98) + 1)|0;
-    $100 = (_mrb_realloc($91,$95,$99)|0);
-    $101 = $4;
-    $102 = ((($101)) + 8|0);
-    HEAP32[$102>>2] = $100;
-    $103 = $3;
-    $104 = ((($103)) + 12|0);
-    $105 = ((($104)) + 8|0);
-    HEAP32[$105>>2] = $100;
-    break;
-   } else {
-    $106 = $3;
-    $107 = ((($106)) + 12|0);
-    $108 = ((($107)) + 8|0);
-    $109 = HEAP32[$108>>2]|0;
-    $110 = $4;
-    $111 = ((($110)) + 8|0);
-    HEAP32[$111>>2] = $109;
-    break;
-   }
-  }
- } while(0);
- $112 = $3;
- $113 = ((($112)) + 12|0);
- $114 = HEAP32[$113>>2]|0;
- $115 = $4;
- $116 = ((($115)) + 12|0);
- HEAP32[$116>>2] = $114;
- $117 = $4;
- $118 = $3;
- $119 = ((($118)) + 12|0);
- $120 = ((($119)) + 4|0);
- HEAP32[$120>>2] = $117;
- $121 = $3;
- $122 = HEAP32[$121>>2]|0;
- $123 = $122 >>> 11;
- $124 = $123 | 1;
- $125 = HEAP32[$121>>2]|0;
- $126 = $124 & 2097151;
- $127 = $126 << 11;
- $128 = $125 & 2047;
- $129 = $128 | $127;
- HEAP32[$121>>2] = $129;
- STACKTOP = sp;return;
-}
-function _str_substr($0,$1,$2,$3,$4) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- $4 = $4|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;
- var $28 = 0, $29 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $40 = 0, $41 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0;
- var sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $$byval_copy1 = sp + 24|0;
- $$byval_copy = sp + 16|0;
- $5 = $1;
- $6 = $3;
- $7 = $4;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
- $9 = (_utf8_strlen($$byval_copy,-1)|0);
- $8 = $9;
- $10 = $7;
- $11 = ($10|0)<(0);
- if ($11) {
-  _mrb_nil_value_283($0);
-  STACKTOP = sp;return;
- }
- $12 = $8;
- $13 = ($12|0)==(0);
- if ($13) {
-  $7 = 0;
- } else {
-  $14 = $6;
-  $15 = ($14|0)<(0);
-  if ($15) {
-   $16 = $8;
-   $17 = $6;
-   $18 = (($16) + ($17))|0;
-   $6 = $18;
-  }
- }
- $19 = $6;
- $20 = $8;
- $21 = ($19|0)>($20|0);
- if ($21) {
-  _mrb_nil_value_283($0);
-  STACKTOP = sp;return;
- }
- $22 = $6;
- $23 = ($22|0)<(0);
- if ($23) {
-  $24 = $8;
-  $25 = $6;
-  $26 = (($25) + ($24))|0;
-  $6 = $26;
-  $27 = $6;
-  $28 = ($27|0)<(0);
-  if ($28) {
-   _mrb_nil_value_283($0);
-   STACKTOP = sp;return;
-  }
- }
- $29 = $6;
- $30 = $7;
- $31 = (($29) + ($30))|0;
- $32 = $8;
- $33 = ($31|0)>($32|0);
- if ($33) {
-  $34 = $8;
-  $35 = $6;
-  $36 = (($34) - ($35))|0;
-  $7 = $36;
- }
- $37 = $7;
- $38 = ($37|0)<=(0);
- if ($38) {
-  $7 = 0;
- }
- $39 = $5;
- $40 = $6;
- $41 = $7;
- ;HEAP32[$$byval_copy1>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$2+4>>2]|0;
- _str_subseq($0,$39,$$byval_copy1,$40,$41);
- STACKTOP = sp;return;
-}
-function _utf8_strlen($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;
- var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $5 = 0;
- var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $1;
- $3 = 0;
- $6 = HEAP32[$0>>2]|0;
- $7 = HEAP32[$6>>2]|0;
- $8 = $7 >>> 11;
- $9 = $8 & 8;
- $10 = ($9|0)!=(0);
- $11 = HEAP32[$0>>2]|0;
- $12 = ((($11)) + 12|0);
- if ($10) {
-  $15 = $12;
- } else {
-  $13 = ((($12)) + 8|0);
-  $14 = HEAP32[$13>>2]|0;
-  $15 = $14;
- }
- $4 = $15;
- $16 = $4;
- $5 = $16;
- $17 = $2;
- $18 = ($17|0)<(0);
- do {
-  if ($18) {
-   $19 = HEAP32[$0>>2]|0;
-   $20 = HEAP32[$19>>2]|0;
-   $21 = $20 >>> 11;
-   $22 = $21 & 8;
-   $23 = ($22|0)!=(0);
-   $24 = HEAP32[$0>>2]|0;
-   if ($23) {
-    $25 = HEAP32[$24>>2]|0;
-    $26 = $25 >>> 11;
-    $27 = $26 & 496;
-    $28 = $27 >> 4;
-    $34 = $28;
-    break;
-   } else {
-    $29 = ((($24)) + 12|0);
-    $30 = HEAP32[$29>>2]|0;
-    $34 = $30;
-    break;
-   }
-  } else {
-   $31 = $2;
-   $34 = $31;
-  }
- } while(0);
- $32 = $5;
- $33 = (($32) + ($34)|0);
- $5 = $33;
- while(1) {
-  $35 = $4;
-  $36 = $5;
-  $37 = ($35>>>0)<($36>>>0);
-  if (!($37)) {
-   break;
-  }
-  $38 = $4;
-  $39 = $5;
-  $40 = (_utf8len($38,$39)|0);
-  $41 = $4;
-  $42 = (($41) + ($40)|0);
-  $4 = $42;
-  $43 = $3;
-  $44 = (($43) + 1)|0;
-  $3 = $44;
- }
- $45 = $3;
- STACKTOP = sp;return ($45|0);
-}
-function _mrb_nil_value_283($0) {
- $0 = $0|0;
- var $1 = 0, $2 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $1 = sp;
- $2 = ((($1)) + 4|0);
- HEAP32[$2>>2] = 0;
- HEAP32[$1>>2] = 0;
- ;HEAP32[$0>>2]=HEAP32[$1>>2]|0;HEAP32[$0+4>>2]=HEAP32[$1+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _str_subseq($0,$1,$2,$3,$4) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- $4 = $4|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $$byval_copy2 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);
- $$byval_copy2 = sp + 32|0;
- $$byval_copy1 = sp + 24|0;
- $$byval_copy = sp + 16|0;
- $5 = $1;
- $6 = $3;
- $7 = $4;
- $8 = $6;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
- $9 = (_chars2bytes($$byval_copy,0,$8)|0);
- $6 = $9;
- $10 = $6;
- $11 = $7;
- ;HEAP32[$$byval_copy1>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$2+4>>2]|0;
- $12 = (_chars2bytes($$byval_copy1,$10,$11)|0);
- $7 = $12;
- $13 = $5;
- $14 = $6;
- $15 = $7;
- ;HEAP32[$$byval_copy2>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy2+4>>2]=HEAP32[$2+4>>2]|0;
- _byte_subseq($0,$13,$$byval_copy2,$14,$15);
- STACKTOP = sp;return;
-}
-function _chars2bytes($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;
- var $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0;
- var $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $7 = 0, $8 = 0;
- var $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $3 = $1;
- $4 = $2;
- $10 = HEAP32[$0>>2]|0;
- $11 = HEAP32[$10>>2]|0;
- $12 = $11 >>> 11;
- $13 = $12 & 8;
- $14 = ($13|0)!=(0);
- $15 = HEAP32[$0>>2]|0;
- $16 = ((($15)) + 12|0);
- if ($14) {
-  $21 = $16;
- } else {
-  $17 = ((($16)) + 8|0);
-  $18 = HEAP32[$17>>2]|0;
-  $21 = $18;
- }
- $19 = $3;
- $20 = (($21) + ($19)|0);
- $8 = $20;
- $22 = HEAP32[$0>>2]|0;
- $23 = HEAP32[$22>>2]|0;
- $24 = $23 >>> 11;
- $25 = $24 & 8;
- $26 = ($25|0)!=(0);
- $27 = HEAP32[$0>>2]|0;
- $28 = ((($27)) + 12|0);
- if ($26) {
-  $44 = $28;
- } else {
-  $29 = ((($28)) + 8|0);
-  $30 = HEAP32[$29>>2]|0;
-  $44 = $30;
- }
- $31 = HEAP32[$0>>2]|0;
- $32 = HEAP32[$31>>2]|0;
- $33 = $32 >>> 11;
- $34 = $33 & 8;
- $35 = ($34|0)!=(0);
- $36 = HEAP32[$0>>2]|0;
- if ($35) {
-  $37 = HEAP32[$36>>2]|0;
-  $38 = $37 >>> 11;
-  $39 = $38 & 496;
-  $40 = $39 >> 4;
-  $45 = $40;
- } else {
-  $41 = ((($36)) + 12|0);
-  $42 = HEAP32[$41>>2]|0;
-  $45 = $42;
- }
- $43 = (($44) + ($45)|0);
- $9 = $43;
- $5 = 0;
- $6 = 0;
- while(1) {
-  $46 = $8;
-  $47 = $9;
-  $48 = ($46>>>0)<($47>>>0);
-  if (!($48)) {
-   label = 14;
-   break;
-  }
-  $49 = $5;
-  $50 = $4;
-  $51 = ($49|0)<($50|0);
-  if (!($51)) {
-   label = 14;
-   break;
-  }
-  $52 = $8;
-  $53 = $9;
-  $54 = (_utf8len($52,$53)|0);
-  $7 = $54;
-  $55 = $7;
-  $56 = $6;
-  $57 = (($56) + ($55))|0;
-  $6 = $57;
-  $58 = $7;
-  $59 = $8;
-  $60 = (($59) + ($58)|0);
-  $8 = $60;
-  $61 = $5;
-  $62 = (($61) + 1)|0;
-  $5 = $62;
- }
- if ((label|0) == 14) {
-  $63 = $6;
-  STACKTOP = sp;return ($63|0);
- }
- return (0)|0;
-}
-function _byte_subseq($0,$1,$2,$3,$4) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- $4 = $4|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;
- var $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0;
- var $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $5 = $1;
- $6 = $3;
- $7 = $4;
- $11 = HEAP32[$2>>2]|0;
- $8 = $11;
- $12 = $8;
- $13 = HEAP32[$12>>2]|0;
- $14 = $13 >>> 11;
- $15 = $14 & 8;
- $16 = ($15|0)!=(0);
- $17 = $5;
- $18 = $8;
- if ($16) {
-  $19 = ((($18)) + 12|0);
-  $20 = $6;
-  $21 = (($19) + ($20)|0);
-  $22 = $7;
-  $23 = (_str_new($17,$21,$22)|0);
-  $9 = $23;
-  $62 = $9;
-  _mrb_obj_value_260($0,$62);
-  STACKTOP = sp;return;
- } else {
-  _str_make_shared($17,$18);
-  $24 = $8;
-  $25 = ((($24)) + 12|0);
-  $26 = ((($25)) + 4|0);
-  $27 = HEAP32[$26>>2]|0;
-  $10 = $27;
-  $28 = $5;
-  $29 = $5;
-  $30 = ((($29)) + 48|0);
-  $31 = HEAP32[$30>>2]|0;
-  $32 = (_mrb_obj_alloc($28,16,$31)|0);
-  $9 = $32;
-  $33 = $8;
-  $34 = ((($33)) + 12|0);
-  $35 = ((($34)) + 8|0);
-  $36 = HEAP32[$35>>2]|0;
-  $37 = $6;
-  $38 = (($36) + ($37)|0);
-  $39 = $9;
-  $40 = ((($39)) + 12|0);
-  $41 = ((($40)) + 8|0);
-  HEAP32[$41>>2] = $38;
-  $42 = $7;
-  $43 = $9;
-  $44 = ((($43)) + 12|0);
-  HEAP32[$44>>2] = $42;
-  $45 = $10;
-  $46 = $9;
-  $47 = ((($46)) + 12|0);
-  $48 = ((($47)) + 4|0);
-  HEAP32[$48>>2] = $45;
-  $49 = $9;
-  $50 = HEAP32[$49>>2]|0;
-  $51 = $50 >>> 11;
-  $52 = $51 | 1;
-  $53 = HEAP32[$49>>2]|0;
-  $54 = $52 & 2097151;
-  $55 = $54 << 11;
-  $56 = $53 & 2047;
-  $57 = $56 | $55;
-  HEAP32[$49>>2] = $57;
-  $58 = $10;
-  $59 = ((($58)) + 4|0);
-  $60 = HEAP32[$59>>2]|0;
-  $61 = (($60) + 1)|0;
-  HEAP32[$59>>2] = $61;
-  $62 = $9;
-  _mrb_obj_value_260($0,$62);
-  STACKTOP = sp;return;
- }
-}
-function _utf8len($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;
- var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $3 = $0;
- $4 = $1;
- $7 = $3;
- $8 = HEAP8[$7>>0]|0;
- $9 = $8&255;
- $10 = (55813 + ($9)|0);
- $11 = HEAP8[$10>>0]|0;
- $12 = $11 << 24 >> 24;
- $5 = $12;
- $13 = $3;
- $14 = $5;
- $15 = (($13) + ($14)|0);
- $16 = $4;
- $17 = ($15>>>0)>($16>>>0);
- if ($17) {
-  $2 = 1;
-  $31 = $2;
-  STACKTOP = sp;return ($31|0);
- }
- $6 = 1;
- while(1) {
-  $18 = $6;
-  $19 = $5;
-  $20 = ($18|0)<($19|0);
-  if (!($20)) {
-   label = 8;
-   break;
-  }
-  $21 = $3;
-  $22 = $6;
-  $23 = (($21) + ($22)|0);
-  $24 = HEAP8[$23>>0]|0;
-  $25 = $24 << 24 >> 24;
-  $26 = $25 & 192;
-  $27 = ($26|0)!=(128);
-  if ($27) {
-   label = 6;
-   break;
-  }
-  $28 = $6;
-  $29 = (($28) + 1)|0;
-  $6 = $29;
- }
- if ((label|0) == 6) {
-  $2 = 1;
-  $31 = $2;
-  STACKTOP = sp;return ($31|0);
- }
- else if ((label|0) == 8) {
-  $30 = $5;
-  $2 = $30;
-  $31 = $2;
-  STACKTOP = sp;return ($31|0);
- }
- return (0)|0;
-}
-function _mrb_str_hash($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;
- var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $5 = 0, $6 = 0;
- var $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $2 = $0;
- $7 = HEAP32[$1>>2]|0;
- $3 = $7;
- $8 = $3;
- $9 = HEAP32[$8>>2]|0;
- $10 = $9 >>> 11;
- $11 = $10 & 8;
- $12 = ($11|0)!=(0);
- $13 = $3;
- if ($12) {
-  $14 = HEAP32[$13>>2]|0;
-  $15 = $14 >>> 11;
-  $16 = $15 & 496;
-  $17 = $16 >> 4;
-  $20 = $17;
- } else {
-  $18 = ((($13)) + 12|0);
-  $19 = HEAP32[$18>>2]|0;
-  $20 = $19;
- }
- $4 = $20;
- $21 = $3;
- $22 = HEAP32[$21>>2]|0;
- $23 = $22 >>> 11;
- $24 = $23 & 8;
- $25 = ($24|0)!=(0);
- $26 = $3;
- $27 = ((($26)) + 12|0);
- if ($25) {
-  $30 = $27;
- } else {
-  $28 = ((($27)) + 8|0);
-  $29 = HEAP32[$28>>2]|0;
-  $30 = $29;
- }
- $5 = $30;
- $6 = 0;
- while(1) {
-  $31 = $4;
-  $32 = (($31) + -1)|0;
-  $4 = $32;
-  $33 = ($31|0)!=(0);
-  $34 = $6;
-  if (!($33)) {
-   break;
-  }
-  $35 = ($34*65599)|0;
-  $36 = $5;
-  $37 = HEAP8[$36>>0]|0;
-  $38 = $37 << 24 >> 24;
-  $39 = (($35) + ($38))|0;
-  $6 = $39;
-  $40 = $5;
-  $41 = ((($40)) + 1|0);
-  $5 = $41;
- }
- $42 = $6;
- $43 = $42 >> 5;
- $44 = (($34) + ($43))|0;
- STACKTOP = sp;return ($44|0);
-}
-function _mrb_str_intern($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $$byval_copy = sp + 8|0;
- $3 = $1;
- $4 = $3;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
- $5 = (_mrb_intern_str($4,$$byval_copy)|0);
- _mrb_symbol_value($0,$5);
- STACKTOP = sp;return;
-}
-function _mrb_symbol_value($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = sp;
- $2 = $1;
- $4 = ((($3)) + 4|0);
- HEAP32[$4>>2] = 4;
- $5 = $2;
- HEAP32[$3>>2] = $5;
- ;HEAP32[$0>>2]=HEAP32[$3>>2]|0;HEAP32[$0+4>>2]=HEAP32[$3+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_obj_as_string($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);
- $$byval_copy1 = sp + 40|0;
- $$byval_copy = sp + 32|0;
- $vararg_buffer = sp;
- $4 = sp + 16|0;
- $5 = sp + 8|0;
- $3 = $1;
- $6 = ((($2)) + 4|0);
- $7 = HEAP32[$6>>2]|0;
- $8 = ($7|0)==(16);
- if ($8) {
-  ;HEAP32[$0>>2]=HEAP32[$2>>2]|0;HEAP32[$0+4>>2]=HEAP32[$2+4>>2]|0;
-  STACKTOP = sp;return;
- }
- $9 = $3;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
- _mrb_funcall($5,$9,$$byval_copy,69276,0,$vararg_buffer);
- ;HEAP32[$4>>2]=HEAP32[$5>>2]|0;HEAP32[$4+4>>2]=HEAP32[$5+4>>2]|0;
- $10 = ((($4)) + 4|0);
- $11 = HEAP32[$10>>2]|0;
- $12 = ($11|0)==(16);
- if ($12) {
-  ;HEAP32[$0>>2]=HEAP32[$4>>2]|0;HEAP32[$0+4>>2]=HEAP32[$4+4>>2]|0;
-  STACKTOP = sp;return;
- } else {
-  $13 = $3;
-  ;HEAP32[$$byval_copy1>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$2+4>>2]|0;
-  _mrb_any_to_s($0,$13,$$byval_copy1);
-  STACKTOP = sp;return;
- }
-}
-function _mrb_ptr_to_str($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $100 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;
- var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0;
- var $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0;
- var $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0;
- var $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $3 = $1;
- $4 = $2;
- $11 = $4;
- $12 = $11;
- $8 = $12;
- $13 = $3;
- $14 = (_str_new($13,0,10)|0);
- $5 = $14;
- $15 = $5;
- $16 = HEAP32[$15>>2]|0;
- $17 = $16 >>> 11;
- $18 = $17 & 8;
- $19 = ($18|0)!=(0);
- $20 = $5;
- $21 = ((($20)) + 12|0);
- if ($19) {
-  $24 = $21;
- } else {
-  $22 = ((($21)) + 8|0);
-  $23 = HEAP32[$22>>2]|0;
-  $24 = $23;
- }
- $6 = $24;
- $25 = $6;
- $26 = ((($25)) + 1|0);
- $6 = $26;
- HEAP8[$25>>0] = 48;
- $27 = $6;
- $28 = ((($27)) + 1|0);
- $6 = $28;
- HEAP8[$27>>0] = 120;
- $29 = $6;
- $7 = $29;
- while(1) {
-  $30 = $8;
-  $31 = (($30>>>0) % 16)&-1;
-  $32 = (55645 + ($31)|0);
-  $33 = HEAP8[$32>>0]|0;
-  $34 = $7;
-  $35 = ((($34)) + 1|0);
-  $7 = $35;
-  HEAP8[$34>>0] = $33;
-  $36 = $8;
-  $37 = (($36>>>0) / 16)&-1;
-  $8 = $37;
-  $38 = $8;
-  $39 = ($38>>>0)>(0);
-  if (!($39)) {
-   break;
-  }
- }
- $40 = $7;
- HEAP8[$40>>0] = 0;
- $41 = $5;
- $42 = HEAP32[$41>>2]|0;
- $43 = $42 >>> 11;
- $44 = $43 & 8;
- $45 = ($44|0)!=(0);
- $46 = $7;
- $47 = $5;
- $48 = HEAP32[$47>>2]|0;
- $49 = $48 >>> 11;
- $50 = $49 & 8;
- $51 = ($50|0)!=(0);
- $52 = $5;
- $53 = ((($52)) + 12|0);
- if ($45) {
-  if ($51) {
-   $58 = $53;
-  } else {
-   $54 = ((($53)) + 8|0);
-   $55 = HEAP32[$54>>2]|0;
-   $58 = $55;
-  }
-  $56 = $46;
-  $57 = $58;
-  $59 = (($56) - ($57))|0;
-  $9 = $59;
-  $60 = $5;
-  $61 = HEAP32[$60>>2]|0;
-  $62 = $61 >>> 11;
-  $63 = $62 & -497;
-  $64 = HEAP32[$60>>2]|0;
-  $65 = $63 & 2097151;
-  $66 = $65 << 11;
-  $67 = $64 & 2047;
-  $68 = $67 | $66;
-  HEAP32[$60>>2] = $68;
-  $69 = $9;
-  $70 = $69 << 4;
-  $71 = $5;
-  $72 = HEAP32[$71>>2]|0;
-  $73 = $72 >>> 11;
-  $74 = $73 | $70;
-  $75 = HEAP32[$71>>2]|0;
-  $76 = $74 & 2097151;
-  $77 = $76 << 11;
-  $78 = $75 & 2047;
-  $79 = $78 | $77;
-  HEAP32[$71>>2] = $79;
- } else {
-  if ($51) {
-   $84 = $53;
-  } else {
-   $80 = ((($53)) + 8|0);
-   $81 = HEAP32[$80>>2]|0;
-   $84 = $81;
-  }
-  $82 = $46;
-  $83 = $84;
-  $85 = (($82) - ($83))|0;
-  $86 = $5;
-  $87 = ((($86)) + 12|0);
-  HEAP32[$87>>2] = $85;
- }
- while(1) {
-  $88 = $6;
-  $89 = $7;
-  $90 = ($88>>>0)<($89>>>0);
-  if (!($90)) {
-   break;
-  }
-  $91 = $6;
-  $92 = HEAP8[$91>>0]|0;
-  $10 = $92;
-  $93 = $7;
-  $94 = ((($93)) + -1|0);
-  $7 = $94;
-  $95 = HEAP8[$94>>0]|0;
-  $96 = $6;
-  $97 = ((($96)) + 1|0);
-  $6 = $97;
-  HEAP8[$96>>0] = $95;
-  $98 = $10;
-  $99 = $7;
-  HEAP8[$99>>0] = $98;
- }
- $100 = $5;
- _mrb_obj_value_260($0,$100);
- STACKTOP = sp;return;
-}
-function _mrb_check_string_type($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $3 = 0, $4 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $$byval_copy = sp + 8|0;
- $3 = $1;
- $4 = $3;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
- _mrb_check_convert_type($0,$4,$$byval_copy,16,65324,65331);
- STACKTOP = sp;return;
-}
-function _mrb_cstr_to_inum($0,$1,$2,$3,$4) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- $4 = $4|0;
- var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;
- var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0;
- var $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0, $152 = 0, $153 = 0;
- var $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0, $170 = 0, $171 = 0;
- var $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0, $188 = 0, $189 = 0, $19 = 0;
- var $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0, $197 = 0, $198 = 0, $199 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0, $204 = 0, $205 = 0, $206 = 0, $207 = 0, $208 = 0;
- var $209 = 0, $21 = 0, $210 = 0, $211 = 0, $212 = 0, $213 = 0, $214 = 0, $215 = 0, $216 = 0, $217 = 0, $218 = 0, $219 = 0, $22 = 0, $220 = 0, $221 = 0, $222 = 0, $223 = 0, $224 = 0, $225 = 0, $226 = 0;
- var $227 = 0, $228 = 0, $229 = 0, $23 = 0, $230 = 0, $231 = 0, $232 = 0, $233 = 0, $234 = 0, $235 = 0, $236 = 0, $237 = 0, $238 = 0, $239 = 0, $24 = 0, $240 = 0, $241 = 0, $242 = 0, $243 = 0, $244 = 0;
- var $245 = 0, $246 = 0, $247 = 0, $248 = 0, $249 = 0, $25 = 0, $250 = 0, $251 = 0, $252 = 0, $253 = 0, $254 = 0, $255 = 0, $256 = 0, $257 = 0, $258 = 0, $259 = 0, $26 = 0, $260 = 0, $261 = 0, $262 = 0;
- var $263 = 0, $264 = 0, $265 = 0, $266 = 0, $267 = 0, $268 = 0, $269 = 0, $27 = 0, $270 = 0, $271 = 0, $272 = 0, $273 = 0, $274 = 0, $275 = 0, $276 = 0, $277 = 0, $278 = 0, $279 = 0, $28 = 0, $280 = 0;
- var $281 = 0, $282 = 0, $283 = 0, $284 = 0, $285 = 0, $286 = 0, $287 = 0, $288 = 0, $289 = 0, $29 = 0, $290 = 0, $291 = 0, $292 = 0, $293 = 0, $294 = 0, $295 = 0, $296 = 0, $297 = 0, $298 = 0, $299 = 0;
- var $30 = 0, $300 = 0, $301 = 0, $302 = 0, $303 = 0, $304 = 0, $305 = 0, $306 = 0, $307 = 0, $308 = 0, $309 = 0, $31 = 0, $310 = 0, $311 = 0, $312 = 0, $313 = 0, $314 = 0, $315 = 0, $316 = 0, $317 = 0;
- var $318 = 0, $319 = 0, $32 = 0, $320 = 0, $321 = 0, $322 = 0, $323 = 0, $324 = 0, $325 = 0, $326 = 0, $327 = 0, $328 = 0, $329 = 0, $33 = 0, $330 = 0, $331 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0;
- var $38 = 0, $39 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0;
- var $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0;
- var $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0;
- var $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $or$cond = 0, $or$cond3 = 0, $vararg_buffer = 0, $vararg_buffer4 = 0, $vararg_buffer7 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 96|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(96|0);
- $vararg_buffer7 = sp + 24|0;
- $vararg_buffer4 = sp + 16|0;
- $vararg_buffer = sp + 8|0;
- $13 = sp;
- $15 = sp + 48|0;
- $16 = sp + 40|0;
- $17 = sp + 32|0;
- $5 = $1;
- $6 = $2;
- $7 = $3;
- $8 = $4;
- $10 = 1;
- $18 = $13;
- $19 = $18;
- HEAP32[$19>>2] = 0;
- $20 = (($18) + 4)|0;
- $21 = $20;
- HEAP32[$21>>2] = 0;
- $22 = $6;
- $23 = ($22|0)!=(0|0);
- do {
-  if ($23) {
-   while(1) {
-    $26 = $6;
-    $27 = HEAP8[$26>>0]|0;
-    $28 = $27 << 24 >> 24;
-    $29 = ($28|0)==(32);
-    if ($29) {
-     $330 = 1;
-    } else {
-     $30 = $6;
-     $31 = HEAP8[$30>>0]|0;
-     $32 = $31 << 24 >> 24;
-     $33 = (($32) - 9)|0;
-     $34 = ($33>>>0)<(5);
-     $330 = $34;
-    }
-    $35 = $6;
-    if (!($330)) {
-     break;
-    }
-    $36 = ((($35)) + 1|0);
-    $6 = $36;
-   }
-   $37 = HEAP8[$35>>0]|0;
-   $38 = $37 << 24 >> 24;
-   $39 = ($38|0)==(43);
-   $40 = $6;
-   if ($39) {
-    $41 = ((($40)) + 1|0);
-    $6 = $41;
-   } else {
-    $42 = HEAP8[$40>>0]|0;
-    $43 = $42 << 24 >> 24;
-    $44 = ($43|0)==(45);
-    if ($44) {
-     $45 = $6;
-     $46 = ((($45)) + 1|0);
-     $6 = $46;
-     $10 = 0;
-    }
-   }
-   $47 = $6;
-   $48 = HEAP8[$47>>0]|0;
-   $49 = $48 << 24 >> 24;
-   $50 = ($49|0)==(43);
-   if (!($50)) {
-    $51 = $6;
-    $52 = HEAP8[$51>>0]|0;
-    $53 = $52 << 24 >> 24;
-    $54 = ($53|0)==(45);
-    if (!($54)) {
-     $57 = $7;
-     $58 = ($57|0)<=(0);
-     L17: do {
-      if ($58) {
-       $59 = $6;
-       $60 = HEAP8[$59>>0]|0;
-       $61 = $60 << 24 >> 24;
-       $62 = ($61|0)==(48);
-       if (!($62)) {
-        $67 = $7;
-        $68 = ($67|0)<(-1);
-        if ($68) {
-         $69 = $7;
-         $70 = (0 - ($69))|0;
-         $7 = $70;
-         break;
-        } else {
-         $7 = 10;
-         break;
-        }
-       }
-       $63 = $6;
-       $64 = ((($63)) + 1|0);
-       $65 = HEAP8[$64>>0]|0;
-       $66 = $65 << 24 >> 24;
-       switch ($66|0) {
-       case 88: case 120:  {
-        $7 = 16;
-        break L17;
-        break;
-       }
-       case 66: case 98:  {
-        $7 = 2;
-        break L17;
-        break;
-       }
-       case 79: case 111:  {
-        $7 = 8;
-        break L17;
-        break;
-       }
-       case 68: case 100:  {
-        $7 = 10;
-        break L17;
-        break;
-       }
-       default: {
-        $7 = 8;
-        break L17;
-       }
-       }
-      }
-     } while(0);
-     $71 = $7;
-     L32: do {
-      switch ($71|0) {
-      case 2:  {
-       $72 = $6;
-       $73 = HEAP8[$72>>0]|0;
-       $74 = $73 << 24 >> 24;
-       $75 = ($74|0)==(48);
-       if ($75) {
-        $76 = $6;
-        $77 = ((($76)) + 1|0);
-        $78 = HEAP8[$77>>0]|0;
-        $79 = $78 << 24 >> 24;
-        $80 = ($79|0)==(98);
-        if (!($80)) {
-         $81 = $6;
-         $82 = ((($81)) + 1|0);
-         $83 = HEAP8[$82>>0]|0;
-         $84 = $83 << 24 >> 24;
-         $85 = ($84|0)==(66);
-         if (!($85)) {
-          break L32;
-         }
-        }
-        $86 = $6;
-        $87 = ((($86)) + 2|0);
-        $6 = $87;
-       }
-       break;
-      }
-      case 15: case 14: case 13: case 12: case 11: case 9: case 7: case 6: case 5: case 4: case 3:  {
-       break;
-      }
-      case 8:  {
-       $88 = $6;
-       $89 = HEAP8[$88>>0]|0;
-       $90 = $89 << 24 >> 24;
-       $91 = ($90|0)==(48);
-       if ($91) {
-        $92 = $6;
-        $93 = ((($92)) + 1|0);
-        $94 = HEAP8[$93>>0]|0;
-        $95 = $94 << 24 >> 24;
-        $96 = ($95|0)==(111);
-        if (!($96)) {
-         $97 = $6;
-         $98 = ((($97)) + 1|0);
-         $99 = HEAP8[$98>>0]|0;
-         $100 = $99 << 24 >> 24;
-         $101 = ($100|0)==(79);
-         if (!($101)) {
-          break L32;
-         }
-        }
-        $102 = $6;
-        $103 = ((($102)) + 2|0);
-        $6 = $103;
-       }
-       break;
-      }
-      case 10:  {
-       $104 = $6;
-       $105 = HEAP8[$104>>0]|0;
-       $106 = $105 << 24 >> 24;
-       $107 = ($106|0)==(48);
-       if ($107) {
-        $108 = $6;
-        $109 = ((($108)) + 1|0);
-        $110 = HEAP8[$109>>0]|0;
-        $111 = $110 << 24 >> 24;
-        $112 = ($111|0)==(100);
-        if (!($112)) {
-         $113 = $6;
-         $114 = ((($113)) + 1|0);
-         $115 = HEAP8[$114>>0]|0;
-         $116 = $115 << 24 >> 24;
-         $117 = ($116|0)==(68);
-         if (!($117)) {
-          break L32;
-         }
-        }
-        $118 = $6;
-        $119 = ((($118)) + 2|0);
-        $6 = $119;
-       }
-       break;
-      }
-      case 16:  {
-       $120 = $6;
-       $121 = HEAP8[$120>>0]|0;
-       $122 = $121 << 24 >> 24;
-       $123 = ($122|0)==(48);
-       if ($123) {
-        $124 = $6;
-        $125 = ((($124)) + 1|0);
-        $126 = HEAP8[$125>>0]|0;
-        $127 = $126 << 24 >> 24;
-        $128 = ($127|0)==(120);
-        if (!($128)) {
-         $129 = $6;
-         $130 = ((($129)) + 1|0);
-         $131 = HEAP8[$130>>0]|0;
-         $132 = $131 << 24 >> 24;
-         $133 = ($132|0)==(88);
-         if (!($133)) {
-          break L32;
-         }
-        }
-        $134 = $6;
-        $135 = ((($134)) + 2|0);
-        $6 = $135;
-       }
-       break;
-      }
-      default: {
-       $136 = $7;
-       $137 = ($136|0)<(2);
-       $138 = $7;
-       $139 = (36)<($138|0);
-       $or$cond = $137 | $139;
-       if ($or$cond) {
-        $140 = $5;
-        $141 = $5;
-        $142 = (_mrb_class_get($141,69160)|0);
-        $143 = $7;
-        _mrb_fixnum_value_290($15,$143);
-        ;HEAP8[$vararg_buffer>>0]=HEAP8[$15>>0]|0;HEAP8[$vararg_buffer+1>>0]=HEAP8[$15+1>>0]|0;HEAP8[$vararg_buffer+2>>0]=HEAP8[$15+2>>0]|0;HEAP8[$vararg_buffer+3>>0]=HEAP8[$15+3>>0]|0;HEAP8[$vararg_buffer+4>>0]=HEAP8[$15+4>>0]|0;HEAP8[$vararg_buffer+5>>0]=HEAP8[$15+5>>0]|0;HEAP8[$vararg_buffer+6>>0]=HEAP8[$15+6>>0]|0;HEAP8[$vararg_buffer+7>>0]=HEAP8[$15+7>>0]|0;
-        _mrb_raisef($140,$142,56069,$vararg_buffer);
-        // unreachable;
-       }
-      }
-      }
-     } while(0);
-     $144 = $6;
-     $145 = HEAP8[$144>>0]|0;
-     $146 = $145 << 24 >> 24;
-     $147 = ($146|0)==(48);
-     do {
-      if ($147) {
-       $12 = 0;
-       while(1) {
-        $148 = $6;
-        $149 = ((($148)) + 1|0);
-        $6 = $149;
-        $150 = HEAP8[$149>>0]|0;
-        $151 = $150 << 24 >> 24;
-        $11 = $151;
-        $152 = ($151|0)==(48);
-        $153 = $11;
-        $154 = ($153|0)==(95);
-        $155 = $152 ? 1 : $154;
-        if (!($155)) {
-         break;
-        }
-        $156 = $11;
-        $157 = ($156|0)==(95);
-        if ($157) {
-         $158 = $12;
-         $159 = (($158) + 1)|0;
-         $12 = $159;
-         $160 = ($159|0)>=(2);
-         if ($160) {
-          break;
-         } else {
-          continue;
-         }
-        } else {
-         $12 = 0;
-         continue;
-        }
-       }
-       $161 = $6;
-       $162 = HEAP8[$161>>0]|0;
-       $163 = $162 << 24 >> 24;
-       $11 = $163;
-       $164 = ($163|0)==(0);
-       $165 = $11;
-       $166 = ($165|0)==(32);
-       $or$cond3 = $164 | $166;
-       if (!($or$cond3)) {
-        $167 = $11;
-        $168 = (($167) - 9)|0;
-        $169 = ($168>>>0)<(5);
-        if (!($169)) {
-         break;
-        }
-       }
-       $170 = $6;
-       $171 = ((($170)) + -1|0);
-       $6 = $171;
-      }
-     } while(0);
-     $172 = $6;
-     $173 = HEAP8[$172>>0]|0;
-     $174 = $173 << 24 >> 24;
-     $11 = $174;
-     $175 = $11;
-     $176 = (($175) - 48)|0;
-     $177 = ($176>>>0)<(10);
-     $178 = $11;
-     do {
-      if ($177) {
-       $179 = (($178) - 48)|0;
-       $190 = $179;
-      } else {
-       $180 = (($178) - 97)|0;
-       $181 = ($180>>>0)<(26);
-       $182 = $11;
-       if ($181) {
-        $183 = (($182) - 97)|0;
-        $184 = (($183) + 10)|0;
-        $190 = $184;
-        break;
-       }
-       $185 = (($182) - 65)|0;
-       $186 = ($185>>>0)<(26);
-       if ($186) {
-        $187 = $11;
-        $188 = (($187) - 65)|0;
-        $189 = (($188) + 10)|0;
-        $190 = $189;
-       } else {
-        $190 = -1;
-       }
-      }
-     } while(0);
-     $11 = $190;
-     $191 = $11;
-     $192 = ($191|0)<(0);
-     if (!($192)) {
-      $193 = $11;
-      $194 = $7;
-      $195 = ($193|0)>=($194|0);
-      if (!($195)) {
-       $12 = 0;
-       $198 = $6;
-       $9 = $198;
-       while(1) {
-        $199 = $9;
-        $200 = HEAP8[$199>>0]|0;
-        $201 = ($200<<24>>24)!=(0);
-        if (!($201)) {
-         break;
-        }
-        $202 = $9;
-        $203 = HEAP8[$202>>0]|0;
-        $204 = $203 << 24 >> 24;
-        $205 = ($204|0)==(95);
-        if ($205) {
-         $206 = $12;
-         $207 = ($206|0)==(0);
-         if (!($207)) {
-          label = 70;
-          break;
-         }
-         $208 = $12;
-         $209 = (($208) + 1)|0;
-         $12 = $209;
-        } else {
-         $12 = 0;
-         $212 = $9;
-         $213 = HEAP8[$212>>0]|0;
-         $214 = $213 << 24 >> 24;
-         $215 = (($214) - 48)|0;
-         $216 = ($215>>>0)<(10);
-         $217 = $9;
-         $218 = HEAP8[$217>>0]|0;
-         $219 = $218 << 24 >> 24;
-         do {
-          if ($216) {
-           $220 = (($219) - 48)|0;
-           $235 = $220;
-          } else {
-           $221 = (($219) - 97)|0;
-           $222 = ($221>>>0)<(26);
-           $223 = $9;
-           $224 = HEAP8[$223>>0]|0;
-           $225 = $224 << 24 >> 24;
-           if ($222) {
-            $226 = (($225) - 97)|0;
-            $227 = (($226) + 10)|0;
-            $235 = $227;
-            break;
-           }
-           $228 = (($225) - 65)|0;
-           $229 = ($228>>>0)<(26);
-           if ($229) {
-            $230 = $9;
-            $231 = HEAP8[$230>>0]|0;
-            $232 = $231 << 24 >> 24;
-            $233 = (($232) - 65)|0;
-            $234 = (($233) + 10)|0;
-            $235 = $234;
-           } else {
-            $235 = -1;
-           }
-          }
-         } while(0);
-         $11 = $235;
-         $236 = $11;
-         $237 = ($236|0)<(0);
-         if ($237) {
-          label = 79;
-          break;
-         }
-         $238 = $11;
-         $239 = $7;
-         $240 = ($238|0)>=($239|0);
-         if ($240) {
-          label = 79;
-          break;
-         }
-         $243 = $7;
-         $244 = ($243|0)<(0);
-         $245 = $244 << 31 >> 31;
-         $246 = $13;
-         $247 = $246;
-         $248 = HEAP32[$247>>2]|0;
-         $249 = (($246) + 4)|0;
-         $250 = $249;
-         $251 = HEAP32[$250>>2]|0;
-         $252 = (___muldi3(($248|0),($251|0),($243|0),($245|0))|0);
-         $253 = tempRet0;
-         $254 = $13;
-         $255 = $254;
-         HEAP32[$255>>2] = $252;
-         $256 = (($254) + 4)|0;
-         $257 = $256;
-         HEAP32[$257>>2] = $253;
-         $258 = $11;
-         $259 = ($258|0)<(0);
-         $260 = $259 << 31 >> 31;
-         $261 = $13;
-         $262 = $261;
-         $263 = HEAP32[$262>>2]|0;
-         $264 = (($261) + 4)|0;
-         $265 = $264;
-         $266 = HEAP32[$265>>2]|0;
-         $267 = (_i64Add(($263|0),($266|0),($258|0),($260|0))|0);
-         $268 = tempRet0;
-         $269 = $13;
-         $270 = $269;
-         HEAP32[$270>>2] = $267;
-         $271 = (($269) + 4)|0;
-         $272 = $271;
-         HEAP32[$272>>2] = $268;
-         $273 = $13;
-         $274 = $273;
-         $275 = HEAP32[$274>>2]|0;
-         $276 = (($273) + 4)|0;
-         $277 = $276;
-         $278 = HEAP32[$277>>2]|0;
-         $279 = ($278>>>0)>(0);
-         $280 = ($275>>>0)>(2147483647);
-         $281 = ($278|0)==(0);
-         $282 = $281 & $280;
-         $283 = $279 | $282;
-         if ($283) {
-          label = 81;
-          break;
-         }
-        }
-        $289 = $9;
-        $290 = ((($289)) + 1|0);
-        $9 = $290;
-       }
-       if ((label|0) == 70) {
-        $210 = $8;
-        $211 = ($210|0)!=(0);
-        if ($211) {
-         break;
-        }
-       }
-       else if ((label|0) == 79) {
-        $241 = $8;
-        $242 = ($241|0)!=(0);
-        if ($242) {
-         break;
-        }
-       }
-       else if ((label|0) == 81) {
-        $284 = $5;
-        $285 = $5;
-        $286 = (_mrb_class_get($285,69160)|0);
-        $287 = $5;
-        $288 = $6;
-        _mrb_str_new_cstr($16,$287,$288);
-        ;HEAP8[$vararg_buffer4>>0]=HEAP8[$16>>0]|0;HEAP8[$vararg_buffer4+1>>0]=HEAP8[$16+1>>0]|0;HEAP8[$vararg_buffer4+2>>0]=HEAP8[$16+2>>0]|0;HEAP8[$vararg_buffer4+3>>0]=HEAP8[$16+3>>0]|0;HEAP8[$vararg_buffer4+4>>0]=HEAP8[$16+4>>0]|0;HEAP8[$vararg_buffer4+5>>0]=HEAP8[$16+5>>0]|0;HEAP8[$vararg_buffer4+6>>0]=HEAP8[$16+6>>0]|0;HEAP8[$vararg_buffer4+7>>0]=HEAP8[$16+7>>0]|0;
-        _mrb_raisef($284,$286,56086,$vararg_buffer4);
-        // unreachable;
-       }
-       $291 = $13;
-       $292 = $291;
-       $293 = HEAP32[$292>>2]|0;
-       $294 = (($291) + 4)|0;
-       $295 = $294;
-       $296 = HEAP32[$295>>2]|0;
-       $14 = $293;
-       $297 = $8;
-       $298 = ($297|0)!=(0);
-       if ($298) {
-        $299 = $9;
-        $300 = $6;
-        $301 = ($299|0)==($300|0);
-        if ($301) {
-         break;
-        }
-        while(1) {
-         $302 = $9;
-         $303 = HEAP8[$302>>0]|0;
-         $304 = $303 << 24 >> 24;
-         $305 = ($304|0)!=(0);
-         if ($305) {
-          $306 = $9;
-          $307 = HEAP8[$306>>0]|0;
-          $308 = $307 << 24 >> 24;
-          $309 = ($308|0)==(32);
-          if ($309) {
-           $331 = 1;
-          } else {
-           $310 = $9;
-           $311 = HEAP8[$310>>0]|0;
-           $312 = $311 << 24 >> 24;
-           $313 = (($312) - 9)|0;
-           $314 = ($313>>>0)<(5);
-           $331 = $314;
-          }
-         } else {
-          $331 = 0;
-         }
-         $315 = $9;
-         if (!($331)) {
-          break;
-         }
-         $316 = ((($315)) + 1|0);
-         $9 = $316;
-        }
-        $317 = HEAP8[$315>>0]|0;
-        $318 = ($317<<24>>24)!=(0);
-        if ($318) {
-         break;
-        }
-       }
-       $319 = $10;
-       $320 = $319 << 24 >> 24;
-       $321 = ($320|0)!=(0);
-       $322 = $14;
-       $323 = (0 - ($322))|0;
-       $324 = $321 ? $322 : $323;
-       _mrb_fixnum_value_290($0,$324);
-       STACKTOP = sp;return;
-      }
-     }
-     $196 = $8;
-     $197 = ($196|0)!=(0);
-     if ($197) {
-      break;
-     }
-     _mrb_fixnum_value_290($0,0);
-     STACKTOP = sp;return;
-    }
-   }
-   $55 = $8;
-   $56 = ($55|0)!=(0);
-   if (!($56)) {
-    _mrb_fixnum_value_290($0,0);
-    STACKTOP = sp;return;
-   }
-  } else {
-   $24 = $8;
-   $25 = ($24|0)!=(0);
-   if (!($25)) {
-    _mrb_fixnum_value_290($0,0);
-    STACKTOP = sp;return;
-   }
-  }
- } while(0);
- $325 = $5;
- $326 = $5;
- $327 = (_mrb_class_get($326,69160)|0);
- $328 = $5;
- $329 = $6;
- _mrb_str_new_cstr($17,$328,$329);
- ;HEAP8[$vararg_buffer7>>0]=HEAP8[$17>>0]|0;HEAP8[$vararg_buffer7+1>>0]=HEAP8[$17+1>>0]|0;HEAP8[$vararg_buffer7+2>>0]=HEAP8[$17+2>>0]|0;HEAP8[$vararg_buffer7+3>>0]=HEAP8[$17+3>>0]|0;HEAP8[$vararg_buffer7+4>>0]=HEAP8[$17+4>>0]|0;HEAP8[$vararg_buffer7+5>>0]=HEAP8[$17+5>>0]|0;HEAP8[$vararg_buffer7+6>>0]=HEAP8[$17+6>>0]|0;HEAP8[$vararg_buffer7+7>>0]=HEAP8[$17+7>>0]|0;
- _mrb_raisef($325,$327,56118,$vararg_buffer7);
- // unreachable;
-}
-function _mrb_fixnum_value_290($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = sp;
- $2 = $1;
- $4 = ((($3)) + 4|0);
- HEAP32[$4>>2] = 3;
- $5 = $2;
- HEAP32[$3>>2] = $5;
- ;HEAP32[$0>>2]=HEAP32[$3>>2]|0;HEAP32[$0+4>>2]=HEAP32[$3+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_string_value_cstr($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $$byval_copy = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;
- var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0;
- var $46 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);
- $$byval_copy = sp + 40|0;
- $5 = sp + 16|0;
- $3 = $0;
- $4 = $1;
- $9 = $3;
- $10 = $4;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$10>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$10+4>>2]|0;
- _mrb_str_to_str($5,$9,$$byval_copy);
- $11 = HEAP32[$5>>2]|0;
- $6 = $11;
- $12 = $3;
- $13 = $6;
- $14 = (_mrb_str_strlen($12,$13)|0);
- $7 = $14;
- $15 = $6;
- $16 = HEAP32[$15>>2]|0;
- $17 = $16 >>> 11;
- $18 = $17 & 8;
- $19 = ($18|0)!=(0);
- $20 = $6;
- $21 = ((($20)) + 12|0);
- if ($19) {
-  $24 = $21;
- } else {
-  $22 = ((($21)) + 8|0);
-  $23 = HEAP32[$22>>2]|0;
-  $24 = $23;
- }
- $8 = $24;
- $25 = $8;
- $26 = ($25|0)!=(0|0);
- if ($26) {
-  $27 = $8;
-  $28 = $7;
-  $29 = (($27) + ($28)|0);
-  $30 = HEAP8[$29>>0]|0;
-  $31 = $30 << 24 >> 24;
-  $32 = ($31|0)!=(0);
-  if (!($32)) {
-   $45 = $8;
-   $2 = $45;
-   $46 = $2;
-   STACKTOP = sp;return ($46|0);
-  }
- }
- $33 = $3;
- $34 = $6;
- _mrb_str_modify($33,$34);
- $35 = $6;
- $36 = HEAP32[$35>>2]|0;
- $37 = $36 >>> 11;
- $38 = $37 & 8;
- $39 = ($38|0)!=(0);
- $40 = $6;
- $41 = ((($40)) + 12|0);
- if ($39) {
-  $44 = $41;
- } else {
-  $42 = ((($41)) + 8|0);
-  $43 = HEAP32[$42>>2]|0;
-  $44 = $43;
- }
- $2 = $44;
- $46 = $2;
- STACKTOP = sp;return ($46|0);
-}
-function _mrb_str_to_inum($0,$1,$2,$3,$4) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- $4 = $4|0;
- var $$byval_copy = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;
- var $29 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0;
- var $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);
- $$byval_copy = sp + 24|0;
- $5 = $1;
- $6 = $3;
- $7 = $4;
- $11 = $7;
- $12 = ($11<<24>>24)!=(0);
- $13 = $5;
- if ($12) {
-  $14 = (_mrb_string_value_cstr($13,$2)|0);
-  $8 = $14;
- } else {
-  ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
-  $15 = (_mrb_string_value_ptr($13,$$byval_copy)|0);
-  $8 = $15;
- }
- $16 = $8;
- $17 = ($16|0)!=(0|0);
- if ($17) {
-  $18 = HEAP32[$2>>2]|0;
-  $19 = HEAP32[$18>>2]|0;
-  $20 = $19 >>> 11;
-  $21 = $20 & 8;
-  $22 = ($21|0)!=(0);
-  $23 = HEAP32[$2>>2]|0;
-  if ($22) {
-   $24 = HEAP32[$23>>2]|0;
-   $25 = $24 >>> 11;
-   $26 = $25 & 496;
-   $27 = $26 >> 4;
-   $30 = $27;
-  } else {
-   $28 = ((($23)) + 12|0);
-   $29 = HEAP32[$28>>2]|0;
-   $30 = $29;
-  }
-  $9 = $30;
-  $31 = $8;
-  $32 = $9;
-  $33 = (($31) + ($32)|0);
-  $34 = HEAP8[$33>>0]|0;
-  $35 = ($34<<24>>24)!=(0);
-  if ($35) {
-   $36 = $5;
-   $37 = $8;
-   $38 = $9;
-   $39 = (_str_new($36,$37,$38)|0);
-   $10 = $39;
-   $40 = $10;
-   $41 = HEAP32[$40>>2]|0;
-   $42 = $41 >>> 11;
-   $43 = $42 & 8;
-   $44 = ($43|0)!=(0);
-   $45 = $10;
-   $46 = ((($45)) + 12|0);
-   if ($44) {
-    $49 = $46;
-   } else {
-    $47 = ((($46)) + 8|0);
-    $48 = HEAP32[$47>>2]|0;
-    $49 = $48;
-   }
-   $8 = $49;
-  }
- }
- $50 = $5;
- $51 = $8;
- $52 = $6;
- $53 = $7;
- $54 = $53&255;
- _mrb_cstr_to_inum($0,$50,$51,$52,$54);
- STACKTOP = sp;return;
-}
-function _mrb_cstr_to_dbl($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;
- var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0.0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0;
- var $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0.0, $152 = 0.0, $153 = 0;
- var $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0.0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0;
- var $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0.0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0;
- var $53 = 0, $54 = 0, $55 = 0.0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0;
- var $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0;
- var $9 = 0.0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 128|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(128|0);
- $vararg_buffer = sp + 16|0;
- $7 = sp + 40|0;
- $8 = sp + 54|0;
- $10 = sp + 32|0;
- $4 = $0;
- $5 = $1;
- $6 = $2;
- $14 = $5;
- $15 = ($14|0)!=(0|0);
- if (!($15)) {
-  $3 = 0.0;
-  $152 = $3;
-  STACKTOP = sp;return (+$152);
- }
- while(1) {
-  $16 = $5;
-  $17 = HEAP8[$16>>0]|0;
-  $18 = $17 << 24 >> 24;
-  $19 = ($18|0)==(32);
-  if (!($19)) {
-   $20 = $5;
-   $21 = HEAP8[$20>>0]|0;
-   $22 = $21 << 24 >> 24;
-   $23 = (($22) - 9)|0;
-   $24 = ($23>>>0)<(5);
-   if (!($24)) {
-    break;
-   }
-  }
-  $25 = $5;
-  $26 = ((($25)) + 1|0);
-  $5 = $26;
- }
- $27 = $6;
- $28 = ($27<<24>>24)!=(0);
- do {
-  if (!($28)) {
-   $29 = $5;
-   $30 = HEAP8[$29>>0]|0;
-   $31 = $30 << 24 >> 24;
-   $32 = ($31|0)==(48);
-   if ($32) {
-    $33 = $5;
-    $34 = ((($33)) + 1|0);
-    $35 = HEAP8[$34>>0]|0;
-    $36 = $35 << 24 >> 24;
-    $37 = ($36|0)==(120);
-    if (!($37)) {
-     $38 = $5;
-     $39 = ((($38)) + 1|0);
-     $40 = HEAP8[$39>>0]|0;
-     $41 = $40 << 24 >> 24;
-     $42 = ($41|0)==(88);
-     if (!($42)) {
-      break;
-     }
-    }
-    $3 = 0.0;
-    $152 = $3;
-    STACKTOP = sp;return (+$152);
-   }
-  }
- } while(0);
- $43 = $5;
- $44 = (+_strtod($43,$7));
- $9 = $44;
- $45 = $5;
- $46 = HEAP32[$7>>2]|0;
- $47 = ($45|0)==($46|0);
- L18: do {
-  if ($47) {
-   $48 = $6;
-   $49 = ($48<<24>>24)!=(0);
-   if (!($49)) {
-    $55 = $9;
-    $3 = $55;
-    $152 = $3;
-    STACKTOP = sp;return (+$152);
-   }
-  } else {
-   $56 = HEAP32[$7>>2]|0;
-   $57 = HEAP8[$56>>0]|0;
-   $58 = ($57<<24>>24)!=(0);
-   if ($58) {
-    $11 = $8;
-    $59 = ((($8)) + 70|0);
-    $60 = ((($59)) + -1|0);
-    $12 = $60;
-    $13 = 0;
-    while(1) {
-     $61 = $5;
-     $62 = HEAP32[$7>>2]|0;
-     $63 = ($61>>>0)<($62>>>0);
-     if (!($63)) {
-      break;
-     }
-     $64 = $11;
-     $65 = $12;
-     $66 = ($64>>>0)<($65>>>0);
-     if (!($66)) {
-      break;
-     }
-     $67 = $5;
-     $68 = ((($67)) + 1|0);
-     $5 = $68;
-     $69 = HEAP8[$67>>0]|0;
-     $70 = $11;
-     $71 = ((($70)) + 1|0);
-     $11 = $71;
-     HEAP8[$70>>0] = $69;
-     $13 = $69;
-    }
-    L29: while(1) {
-     $72 = $5;
-     $73 = HEAP8[$72>>0]|0;
-     $74 = ($73<<24>>24)!=(0);
-     if (!($74)) {
-      break;
-     }
-     $75 = $5;
-     $76 = HEAP8[$75>>0]|0;
-     $77 = $76 << 24 >> 24;
-     $78 = ($77|0)==(95);
-     if ($78) {
-      $79 = $6;
-      $80 = ($79<<24>>24)!=(0);
-      if (!($80)) {
-       while(1) {
-        $94 = $5;
-        $95 = ((($94)) + 1|0);
-        $5 = $95;
-        $96 = HEAP8[$95>>0]|0;
-        $97 = $96 << 24 >> 24;
-        $98 = ($97|0)==(95);
-        if (!($98)) {
-         continue L29;
-        }
-       }
-      }
-      $81 = $11;
-      $82 = ($81|0)==($8|0);
-      if ($82) {
-       break L18;
-      }
-      $83 = $13;
-      $84 = $83 << 24 >> 24;
-      $85 = (($84) - 48)|0;
-      $86 = ($85>>>0)<(10);
-      if (!($86)) {
-       break L18;
-      }
-      $87 = $5;
-      $88 = ((($87)) + 1|0);
-      $5 = $88;
-      $89 = $5;
-      $90 = HEAP8[$89>>0]|0;
-      $91 = $90 << 24 >> 24;
-      $92 = (($91) - 48)|0;
-      $93 = ($92>>>0)<(10);
-      if (!($93)) {
-       break L18;
-      }
-     }
-     $99 = $5;
-     $100 = ((($99)) + 1|0);
-     $5 = $100;
-     $101 = HEAP8[$99>>0]|0;
-     $13 = $101;
-     $102 = $11;
-     $103 = $12;
-     $104 = ($102>>>0)<($103>>>0);
-     if (!($104)) {
-      continue;
-     }
-     $105 = $13;
-     $106 = $11;
-     $107 = ((($106)) + 1|0);
-     $11 = $107;
-     HEAP8[$106>>0] = $105;
-    }
-    $108 = $11;
-    HEAP8[$108>>0] = 0;
-    $5 = $8;
-    $109 = $6;
-    $110 = ($109<<24>>24)!=(0);
-    do {
-     if (!($110)) {
-      $111 = $5;
-      $112 = HEAP8[$111>>0]|0;
-      $113 = $112 << 24 >> 24;
-      $114 = ($113|0)==(48);
-      if ($114) {
-       $115 = $5;
-       $116 = ((($115)) + 1|0);
-       $117 = HEAP8[$116>>0]|0;
-       $118 = $117 << 24 >> 24;
-       $119 = ($118|0)==(120);
-       if (!($119)) {
-        $120 = $5;
-        $121 = ((($120)) + 1|0);
-        $122 = HEAP8[$121>>0]|0;
-        $123 = $122 << 24 >> 24;
-        $124 = ($123|0)==(88);
-        if (!($124)) {
-         break;
-        }
-       }
-       $3 = 0.0;
-       $152 = $3;
-       STACKTOP = sp;return (+$152);
-      }
-     }
-    } while(0);
-    $125 = $5;
-    $126 = (+_strtod($125,$7));
-    $9 = $126;
-    $127 = $6;
-    $128 = ($127<<24>>24)!=(0);
-    if ($128) {
-     $129 = HEAP32[$7>>2]|0;
-     $130 = ($129|0)!=(0|0);
-     if (!($130)) {
-      break;
-     }
-     $131 = $5;
-     $132 = HEAP32[$7>>2]|0;
-     $133 = ($131|0)==($132|0);
-     if ($133) {
-      break;
-     }
-     while(1) {
-      $134 = HEAP32[$7>>2]|0;
-      $135 = HEAP8[$134>>0]|0;
-      $136 = $135 << 24 >> 24;
-      $137 = ($136|0)!=(0);
-      if ($137) {
-       $138 = HEAP32[$7>>2]|0;
-       $139 = HEAP8[$138>>0]|0;
-       $140 = $139 << 24 >> 24;
-       $141 = ($140|0)==(32);
-       if ($141) {
-        $153 = 1;
-       } else {
-        $142 = HEAP32[$7>>2]|0;
-        $143 = HEAP8[$142>>0]|0;
-        $144 = $143 << 24 >> 24;
-        $145 = (($144) - 9)|0;
-        $146 = ($145>>>0)<(5);
-        $153 = $146;
-       }
-      } else {
-       $153 = 0;
-      }
-      $147 = HEAP32[$7>>2]|0;
-      if (!($153)) {
-       break;
-      }
-      $148 = ((($147)) + 1|0);
-      HEAP32[$7>>2] = $148;
-     }
-     $149 = HEAP8[$147>>0]|0;
-     $150 = ($149<<24>>24)!=(0);
-     if ($150) {
-      break;
-     }
-    }
-   }
-   $151 = $9;
-   $3 = $151;
-   $152 = $3;
-   STACKTOP = sp;return (+$152);
-  }
- } while(0);
- $50 = $4;
- $51 = $4;
- $52 = (_mrb_class_get($51,69160)|0);
- $53 = $4;
- $54 = $5;
- _mrb_str_new_cstr($10,$53,$54);
- ;HEAP8[$vararg_buffer>>0]=HEAP8[$10>>0]|0;HEAP8[$vararg_buffer+1>>0]=HEAP8[$10+1>>0]|0;HEAP8[$vararg_buffer+2>>0]=HEAP8[$10+2>>0]|0;HEAP8[$vararg_buffer+3>>0]=HEAP8[$10+3>>0]|0;HEAP8[$vararg_buffer+4>>0]=HEAP8[$10+4>>0]|0;HEAP8[$vararg_buffer+5>>0]=HEAP8[$10+5>>0]|0;HEAP8[$vararg_buffer+6>>0]=HEAP8[$10+6>>0]|0;HEAP8[$vararg_buffer+7>>0]=HEAP8[$10+7>>0]|0;
- _mrb_raisef($50,$52,56148,$vararg_buffer);
- // unreachable;
- return +(0.0);
-}
-function _mrb_str_to_dbl($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;
- var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0;
- var $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0;
- var $65 = 0, $66 = 0, $67 = 0.0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);
- $$byval_copy = sp + 32|0;
- $7 = sp + 8|0;
- $3 = $0;
- $4 = $2;
- $9 = $3;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$1>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$1+4>>2]|0;
- _mrb_str_to_str($7,$9,$$byval_copy);
- ;HEAP32[$1>>2]=HEAP32[$7>>2]|0;HEAP32[$1+4>>2]=HEAP32[$7+4>>2]|0;
- $10 = HEAP32[$1>>2]|0;
- $11 = HEAP32[$10>>2]|0;
- $12 = $11 >>> 11;
- $13 = $12 & 8;
- $14 = ($13|0)!=(0);
- $15 = HEAP32[$1>>2]|0;
- $16 = ((($15)) + 12|0);
- if ($14) {
-  $19 = $16;
- } else {
-  $17 = ((($16)) + 8|0);
-  $18 = HEAP32[$17>>2]|0;
-  $19 = $18;
- }
- $5 = $19;
- $20 = HEAP32[$1>>2]|0;
- $21 = HEAP32[$20>>2]|0;
- $22 = $21 >>> 11;
- $23 = $22 & 8;
- $24 = ($23|0)!=(0);
- $25 = HEAP32[$1>>2]|0;
- if ($24) {
-  $26 = HEAP32[$25>>2]|0;
-  $27 = $26 >>> 11;
-  $28 = $27 & 496;
-  $29 = $28 >> 4;
-  $32 = $29;
- } else {
-  $30 = ((($25)) + 12|0);
-  $31 = HEAP32[$30>>2]|0;
-  $32 = $31;
- }
- $6 = $32;
- $33 = $5;
- $34 = ($33|0)!=(0|0);
- if (!($34)) {
-  $64 = $3;
-  $65 = $5;
-  $66 = $4;
-  $67 = (+_mrb_cstr_to_dbl($64,$65,$66));
-  STACKTOP = sp;return (+$67);
- }
- $35 = $4;
- $36 = $35&255;
- $37 = ($36|0)!=(0);
- if ($37) {
-  $38 = $5;
-  $39 = $6;
-  $40 = (_memchr($38,0,$39)|0);
-  $41 = ($40|0)!=(0|0);
-  if ($41) {
-   $42 = $3;
-   $43 = $3;
-   $44 = (_mrb_class_get($43,69160)|0);
-   _mrb_raise($42,$44,56177);
-   // unreachable;
-  }
- }
- $45 = $5;
- $46 = $6;
- $47 = (($45) + ($46)|0);
- $48 = HEAP8[$47>>0]|0;
- $49 = ($48<<24>>24)!=(0);
- if (!($49)) {
-  $64 = $3;
-  $65 = $5;
-  $66 = $4;
-  $67 = (+_mrb_cstr_to_dbl($64,$65,$66));
-  STACKTOP = sp;return (+$67);
- }
- $50 = $3;
- $51 = $5;
- $52 = $6;
- $53 = (_str_new($50,$51,$52)|0);
- $8 = $53;
- $54 = $8;
- $55 = HEAP32[$54>>2]|0;
- $56 = $55 >>> 11;
- $57 = $56 & 8;
- $58 = ($57|0)!=(0);
- $59 = $8;
- $60 = ((($59)) + 12|0);
- if ($58) {
-  $63 = $60;
- } else {
-  $61 = ((($60)) + 8|0);
-  $62 = HEAP32[$61>>2]|0;
-  $63 = $62;
- }
- $5 = $63;
- $64 = $3;
- $65 = $5;
- $66 = $4;
- $67 = (+_mrb_cstr_to_dbl($64,$65,$66));
- STACKTOP = sp;return (+$67);
-}
-function _mrb_str_dump($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0;
- var $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0;
- var $135 = 0, $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0, $152 = 0;
- var $153 = 0, $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0, $170 = 0;
- var $171 = 0, $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0, $188 = 0, $189 = 0;
- var $19 = 0, $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0, $197 = 0, $198 = 0, $199 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0, $204 = 0, $205 = 0, $206 = 0, $207 = 0;
- var $208 = 0, $209 = 0, $21 = 0, $210 = 0, $211 = 0, $212 = 0, $213 = 0, $214 = 0, $215 = 0, $216 = 0, $217 = 0, $218 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;
- var $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0;
- var $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0;
- var $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0;
- var $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);
- $$byval_copy = sp + 24|0;
- $3 = $1;
- $4 = 2;
- $11 = HEAP32[$2>>2]|0;
- $12 = HEAP32[$11>>2]|0;
- $13 = $12 >>> 11;
- $14 = $13 & 8;
- $15 = ($14|0)!=(0);
- $16 = HEAP32[$2>>2]|0;
- $17 = ((($16)) + 12|0);
- if ($15) {
-  $20 = $17;
- } else {
-  $18 = ((($17)) + 8|0);
-  $19 = HEAP32[$18>>2]|0;
-  $20 = $19;
- }
- $5 = $20;
- $21 = $5;
- $22 = HEAP32[$2>>2]|0;
- $23 = HEAP32[$22>>2]|0;
- $24 = $23 >>> 11;
- $25 = $24 & 8;
- $26 = ($25|0)!=(0);
- $27 = HEAP32[$2>>2]|0;
- if ($26) {
-  $28 = HEAP32[$27>>2]|0;
-  $29 = $28 >>> 11;
-  $30 = $29 & 496;
-  $31 = $30 >> 4;
-  $35 = $31;
- } else {
-  $32 = ((($27)) + 12|0);
-  $33 = HEAP32[$32>>2]|0;
-  $35 = $33;
- }
- $34 = (($21) + ($35)|0);
- $6 = $34;
- L9: while(1) {
-  $36 = $5;
-  $37 = $6;
-  $38 = ($36>>>0)<($37>>>0);
-  if (!($38)) {
-   break;
-  }
-  $39 = $5;
-  $40 = ((($39)) + 1|0);
-  $5 = $40;
-  $41 = HEAP8[$39>>0]|0;
-  $9 = $41;
-  $42 = $9;
-  $43 = $42&255;
-  switch ($43|0) {
-  case 27: case 7: case 8: case 11: case 12: case 9: case 13: case 10: case 92: case 34:  {
-   $44 = $4;
-   $45 = (($44) + 2)|0;
-   $4 = $45;
-   continue L9;
-   break;
-  }
-  case 35:  {
-   $46 = $5;
-   $47 = $6;
-   $48 = ($46>>>0)<($47>>>0);
-   if ($48) {
-    $49 = $5;
-    $50 = HEAP8[$49>>0]|0;
-    $51 = $50 << 24 >> 24;
-    $52 = ($51|0)==(36);
-    if ($52) {
-     $62 = 1;
-    } else {
-     $53 = $5;
-     $54 = HEAP8[$53>>0]|0;
-     $55 = $54 << 24 >> 24;
-     $56 = ($55|0)==(64);
-     if ($56) {
-      $62 = 1;
-     } else {
-      $57 = $5;
-      $58 = HEAP8[$57>>0]|0;
-      $59 = $58 << 24 >> 24;
-      $60 = ($59|0)==(123);
-      $62 = $60;
-     }
-    }
-   } else {
-    $62 = 0;
-   }
-   $61 = $62 ? 2 : 1;
-   $63 = $4;
-   $64 = (($63) + ($61))|0;
-   $4 = $64;
-   continue L9;
-   break;
-  }
-  default: {
-   $65 = $9;
-   $66 = $65&255;
-   $67 = (($66) - 32)|0;
-   $68 = ($67>>>0)<(95);
-   $69 = $4;
-   if ($68) {
-    $70 = (($69) + 1)|0;
-    $4 = $70;
-    continue L9;
-   } else {
-    $71 = (($69) + 4)|0;
-    $4 = $71;
-    continue L9;
-   }
-  }
-  }
- }
- $72 = $3;
- $73 = $4;
- $74 = (_str_new($72,0,$73)|0);
- $8 = $74;
- $75 = $3;
- $76 = $8;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
- _str_with_class($75,$76,$$byval_copy);
- $77 = HEAP32[$2>>2]|0;
- $78 = HEAP32[$77>>2]|0;
- $79 = $78 >>> 11;
- $80 = $79 & 8;
- $81 = ($80|0)!=(0);
- $82 = HEAP32[$2>>2]|0;
- $83 = ((($82)) + 12|0);
- if ($81) {
-  $86 = $83;
- } else {
-  $84 = ((($83)) + 8|0);
-  $85 = HEAP32[$84>>2]|0;
-  $86 = $85;
- }
- $5 = $86;
- $87 = $5;
- $88 = HEAP32[$2>>2]|0;
- $89 = HEAP32[$88>>2]|0;
- $90 = $89 >>> 11;
- $91 = $90 & 8;
- $92 = ($91|0)!=(0);
- $93 = HEAP32[$2>>2]|0;
- if ($92) {
-  $94 = HEAP32[$93>>2]|0;
-  $95 = $94 >>> 11;
-  $96 = $95 & 496;
-  $97 = $96 >> 4;
-  $101 = $97;
- } else {
-  $98 = ((($93)) + 12|0);
-  $99 = HEAP32[$98>>2]|0;
-  $101 = $99;
- }
- $100 = (($87) + ($101)|0);
- $6 = $100;
- $102 = $8;
- $103 = HEAP32[$102>>2]|0;
- $104 = $103 >>> 11;
- $105 = $104 & 8;
- $106 = ($105|0)!=(0);
- $107 = $8;
- $108 = ((($107)) + 12|0);
- if ($106) {
-  $111 = $108;
- } else {
-  $109 = ((($108)) + 8|0);
-  $110 = HEAP32[$109>>2]|0;
-  $111 = $110;
- }
- $7 = $111;
- $112 = $7;
- $113 = ((($112)) + 1|0);
- $7 = $113;
- HEAP8[$112>>0] = 34;
- L37: while(1) {
-  $114 = $5;
-  $115 = $6;
-  $116 = ($114>>>0)<($115>>>0);
-  if (!($116)) {
-   break;
-  }
-  $117 = $5;
-  $118 = ((($117)) + 1|0);
-  $5 = $118;
-  $119 = HEAP8[$117>>0]|0;
-  $10 = $119;
-  $120 = $10;
-  $121 = $120&255;
-  do {
-   switch ($121|0) {
-   case 92: case 34:  {
-    $122 = $7;
-    $123 = ((($122)) + 1|0);
-    $7 = $123;
-    HEAP8[$122>>0] = 92;
-    $124 = $10;
-    $125 = $7;
-    $126 = ((($125)) + 1|0);
-    $7 = $126;
-    HEAP8[$125>>0] = $124;
-    continue L37;
-    break;
-   }
-   case 10:  {
-    $127 = $7;
-    $128 = ((($127)) + 1|0);
-    $7 = $128;
-    HEAP8[$127>>0] = 92;
-    $129 = $7;
-    $130 = ((($129)) + 1|0);
-    $7 = $130;
-    HEAP8[$129>>0] = 110;
-    continue L37;
-    break;
-   }
-   case 13:  {
-    $131 = $7;
-    $132 = ((($131)) + 1|0);
-    $7 = $132;
-    HEAP8[$131>>0] = 92;
-    $133 = $7;
-    $134 = ((($133)) + 1|0);
-    $7 = $134;
-    HEAP8[$133>>0] = 114;
-    continue L37;
-    break;
-   }
-   case 9:  {
-    $135 = $7;
-    $136 = ((($135)) + 1|0);
-    $7 = $136;
-    HEAP8[$135>>0] = 92;
-    $137 = $7;
-    $138 = ((($137)) + 1|0);
-    $7 = $138;
-    HEAP8[$137>>0] = 116;
-    continue L37;
-    break;
-   }
-   case 12:  {
-    $139 = $7;
-    $140 = ((($139)) + 1|0);
-    $7 = $140;
-    HEAP8[$139>>0] = 92;
-    $141 = $7;
-    $142 = ((($141)) + 1|0);
-    $7 = $142;
-    HEAP8[$141>>0] = 102;
-    continue L37;
-    break;
-   }
-   case 11:  {
-    $143 = $7;
-    $144 = ((($143)) + 1|0);
-    $7 = $144;
-    HEAP8[$143>>0] = 92;
-    $145 = $7;
-    $146 = ((($145)) + 1|0);
-    $7 = $146;
-    HEAP8[$145>>0] = 118;
-    continue L37;
-    break;
-   }
-   case 8:  {
-    $147 = $7;
-    $148 = ((($147)) + 1|0);
-    $7 = $148;
-    HEAP8[$147>>0] = 92;
-    $149 = $7;
-    $150 = ((($149)) + 1|0);
-    $7 = $150;
-    HEAP8[$149>>0] = 98;
-    continue L37;
-    break;
-   }
-   case 7:  {
-    $151 = $7;
-    $152 = ((($151)) + 1|0);
-    $7 = $152;
-    HEAP8[$151>>0] = 92;
-    $153 = $7;
-    $154 = ((($153)) + 1|0);
-    $7 = $154;
-    HEAP8[$153>>0] = 97;
-    continue L37;
-    break;
-   }
-   case 27:  {
-    $155 = $7;
-    $156 = ((($155)) + 1|0);
-    $7 = $156;
-    HEAP8[$155>>0] = 92;
-    $157 = $7;
-    $158 = ((($157)) + 1|0);
-    $7 = $158;
-    HEAP8[$157>>0] = 101;
-    continue L37;
-    break;
-   }
-   case 35:  {
-    $159 = $5;
-    $160 = $6;
-    $161 = ($159>>>0)<($160>>>0);
-    do {
-     if ($161) {
-      $162 = $5;
-      $163 = HEAP8[$162>>0]|0;
-      $164 = $163 << 24 >> 24;
-      $165 = ($164|0)==(36);
-      if (!($165)) {
-       $166 = $5;
-       $167 = HEAP8[$166>>0]|0;
-       $168 = $167 << 24 >> 24;
-       $169 = ($168|0)==(64);
-       if (!($169)) {
-        $170 = $5;
-        $171 = HEAP8[$170>>0]|0;
-        $172 = $171 << 24 >> 24;
-        $173 = ($172|0)==(123);
-        if (!($173)) {
-         break;
-        }
-       }
-      }
-      $174 = $7;
-      $175 = ((($174)) + 1|0);
-      $7 = $175;
-      HEAP8[$174>>0] = 92;
-     }
-    } while(0);
-    $176 = $7;
-    $177 = ((($176)) + 1|0);
-    $7 = $177;
-    HEAP8[$176>>0] = 35;
-    continue L37;
-    break;
-   }
-   default: {
-    $178 = $10;
-    $179 = $178&255;
-    $180 = (($179) - 32)|0;
-    $181 = ($180>>>0)<(95);
-    if ($181) {
-     $182 = $10;
-     $183 = $7;
-     $184 = ((($183)) + 1|0);
-     $7 = $184;
-     HEAP8[$183>>0] = $182;
-     continue L37;
-    } else {
-     $185 = $7;
-     $186 = ((($185)) + 1|0);
-     $7 = $186;
-     HEAP8[$185>>0] = 92;
-     $187 = $10;
-     $188 = $187&255;
-     $189 = (($188|0) % 8)&-1;
-     $190 = (48 + ($189))|0;
-     $191 = $190&255;
-     $192 = $7;
-     $193 = ((($192)) + 2|0);
-     HEAP8[$193>>0] = $191;
-     $194 = $10;
-     $195 = $194&255;
-     $196 = (($195|0) / 8)&-1;
-     $197 = $196&255;
-     $10 = $197;
-     $198 = $10;
-     $199 = $198&255;
-     $200 = (($199|0) % 8)&-1;
-     $201 = (48 + ($200))|0;
-     $202 = $201&255;
-     $203 = $7;
-     $204 = ((($203)) + 1|0);
-     HEAP8[$204>>0] = $202;
-     $205 = $10;
-     $206 = $205&255;
-     $207 = (($206|0) / 8)&-1;
-     $208 = $207&255;
-     $10 = $208;
-     $209 = $10;
-     $210 = $209&255;
-     $211 = (($210|0) % 8)&-1;
-     $212 = (48 + ($211))|0;
-     $213 = $212&255;
-     $214 = $7;
-     HEAP8[$214>>0] = $213;
-     $215 = $7;
-     $216 = ((($215)) + 3|0);
-     $7 = $216;
-     continue L37;
-    }
-   }
-   }
-  } while(0);
- }
- $217 = $7;
- HEAP8[$217>>0] = 34;
- $218 = $8;
- _mrb_obj_value_260($0,$218);
- STACKTOP = sp;return;
-}
-function _mrb_str_cat($0,$1,$2,$3,$4) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- $4 = $4|0;
- var $10 = 0, $11 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $5 = $1;
- $6 = $3;
- $7 = $4;
- $8 = $5;
- $9 = HEAP32[$2>>2]|0;
- $10 = $6;
- $11 = $7;
- _str_buf_cat($8,$9,$10,$11);
- ;HEAP32[$0>>2]=HEAP32[$2>>2]|0;HEAP32[$0+4>>2]=HEAP32[$2+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _str_buf_cat($0,$1,$2,$3) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;
- var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0;
- var $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0, $152 = 0, $153 = 0;
- var $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0, $170 = 0, $171 = 0;
- var $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0, $188 = 0, $189 = 0, $19 = 0;
- var $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0, $197 = 0, $198 = 0, $199 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0, $204 = 0, $205 = 0, $206 = 0, $207 = 0, $208 = 0;
- var $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0;
- var $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0;
- var $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0;
- var $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0;
- var $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $4 = $0;
- $5 = $1;
- $6 = $2;
- $7 = $3;
- $10 = -1;
- $12 = $7;
- $13 = ($12|0)==(0);
- if ($13) {
-  STACKTOP = sp;return;
- }
- $14 = $4;
- $15 = $5;
- _mrb_str_modify($14,$15);
- $16 = $6;
- $17 = $5;
- $18 = HEAP32[$17>>2]|0;
- $19 = $18 >>> 11;
- $20 = $19 & 8;
- $21 = ($20|0)!=(0);
- $22 = $5;
- $23 = ((($22)) + 12|0);
- if ($21) {
-  $27 = $23;
- } else {
-  $24 = ((($23)) + 8|0);
-  $25 = HEAP32[$24>>2]|0;
-  $27 = $25;
- }
- $26 = ($16>>>0)>=($27>>>0);
- if ($26) {
-  $28 = $6;
-  $29 = $5;
-  $30 = HEAP32[$29>>2]|0;
-  $31 = $30 >>> 11;
-  $32 = $31 & 8;
-  $33 = ($32|0)!=(0);
-  $34 = $5;
-  $35 = ((($34)) + 12|0);
-  if ($33) {
-   $51 = $35;
-  } else {
-   $36 = ((($35)) + 8|0);
-   $37 = HEAP32[$36>>2]|0;
-   $51 = $37;
-  }
-  $38 = $5;
-  $39 = HEAP32[$38>>2]|0;
-  $40 = $39 >>> 11;
-  $41 = $40 & 8;
-  $42 = ($41|0)!=(0);
-  $43 = $5;
-  if ($42) {
-   $44 = HEAP32[$43>>2]|0;
-   $45 = $44 >>> 11;
-   $46 = $45 & 496;
-   $47 = $46 >> 4;
-   $52 = $47;
-  } else {
-   $48 = ((($43)) + 12|0);
-   $49 = HEAP32[$48>>2]|0;
-   $52 = $49;
-  }
-  $50 = (($51) + ($52)|0);
-  $53 = ($28>>>0)<=($50>>>0);
-  if ($53) {
-   $54 = $6;
-   $55 = $5;
-   $56 = HEAP32[$55>>2]|0;
-   $57 = $56 >>> 11;
-   $58 = $57 & 8;
-   $59 = ($58|0)!=(0);
-   $60 = $5;
-   $61 = ((($60)) + 12|0);
-   if ($59) {
-    $66 = $61;
-   } else {
-    $62 = ((($61)) + 8|0);
-    $63 = HEAP32[$62>>2]|0;
-    $66 = $63;
-   }
-   $64 = $54;
-   $65 = $66;
-   $67 = (($64) - ($65))|0;
-   $10 = $67;
-  }
- }
- $68 = $5;
- $69 = HEAP32[$68>>2]|0;
- $70 = $69 >>> 11;
- $71 = $70 & 8;
- $72 = ($71|0)!=(0);
- if ($72) {
-  $8 = 11;
- } else {
-  $73 = $5;
-  $74 = ((($73)) + 12|0);
-  $75 = ((($74)) + 4|0);
-  $76 = HEAP32[$75>>2]|0;
-  $8 = $76;
- }
- $77 = $5;
- $78 = HEAP32[$77>>2]|0;
- $79 = $78 >>> 11;
- $80 = $79 & 8;
- $81 = ($80|0)!=(0);
- $82 = $5;
- if ($81) {
-  $83 = HEAP32[$82>>2]|0;
-  $84 = $83 >>> 11;
-  $85 = $84 & 496;
-  $86 = $85 >> 4;
-  $92 = $86;
- } else {
-  $87 = ((($82)) + 12|0);
-  $88 = HEAP32[$87>>2]|0;
-  $92 = $88;
- }
- $89 = $7;
- $90 = (2147483647 - ($89))|0;
- $91 = ($92|0)>=($90|0);
- if ($91) {
-  $93 = $4;
-  $94 = $4;
-  $95 = (_mrb_class_get($94,69160)|0);
-  _mrb_raise($93,$95,55711);
-  // unreachable;
- }
- $96 = $5;
- $97 = HEAP32[$96>>2]|0;
- $98 = $97 >>> 11;
- $99 = $98 & 8;
- $100 = ($99|0)!=(0);
- $101 = $5;
- if ($100) {
-  $102 = HEAP32[$101>>2]|0;
-  $103 = $102 >>> 11;
-  $104 = $103 & 496;
-  $105 = $104 >> 4;
-  $110 = $105;
- } else {
-  $106 = ((($101)) + 12|0);
-  $107 = HEAP32[$106>>2]|0;
-  $110 = $107;
- }
- $108 = $7;
- $109 = (($110) + ($108))|0;
- $9 = $109;
- $111 = $8;
- $112 = $9;
- $113 = ($111>>>0)<=($112>>>0);
- if ($113) {
-  while(1) {
-   $114 = $9;
-   $115 = $8;
-   $116 = ($114>>>0)>($115>>>0);
-   if (!($116)) {
-    break;
-   }
-   $117 = $8;
-   $118 = (($117) + 1)|0;
-   $119 = ($118>>>0)>=(1073741823);
-   if ($119) {
-    label = 31;
-    break;
-   }
-   $123 = $8;
-   $124 = (($123) + 1)|0;
-   $125 = $124<<1;
-   $8 = $125;
-  }
-  if ((label|0) == 31) {
-   $120 = $9;
-   $121 = (($120) + 4095)|0;
-   $122 = (($121>>>0) / 4096)&-1;
-   $8 = $122;
-  }
-  $126 = $4;
-  $127 = $5;
-  $128 = $8;
-  _resize_capa($126,$127,$128);
- }
- $129 = $10;
- $130 = ($129|0)!=(-1);
- if ($130) {
-  $131 = $5;
-  $132 = HEAP32[$131>>2]|0;
-  $133 = $132 >>> 11;
-  $134 = $133 & 8;
-  $135 = ($134|0)!=(0);
-  $136 = $5;
-  $137 = ((($136)) + 12|0);
-  if ($135) {
-   $142 = $137;
-  } else {
-   $138 = ((($137)) + 8|0);
-   $139 = HEAP32[$138>>2]|0;
-   $142 = $139;
-  }
-  $140 = $10;
-  $141 = (($142) + ($140)|0);
-  $6 = $141;
- }
- $143 = $5;
- $144 = HEAP32[$143>>2]|0;
- $145 = $144 >>> 11;
- $146 = $145 & 8;
- $147 = ($146|0)!=(0);
- $148 = $5;
- $149 = ((($148)) + 12|0);
- if ($147) {
-  $165 = $149;
- } else {
-  $150 = ((($149)) + 8|0);
-  $151 = HEAP32[$150>>2]|0;
-  $165 = $151;
- }
- $152 = $5;
- $153 = HEAP32[$152>>2]|0;
- $154 = $153 >>> 11;
- $155 = $154 & 8;
- $156 = ($155|0)!=(0);
- $157 = $5;
- if ($156) {
-  $158 = HEAP32[$157>>2]|0;
-  $159 = $158 >>> 11;
-  $160 = $159 & 496;
-  $161 = $160 >> 4;
-  $166 = $161;
- } else {
-  $162 = ((($157)) + 12|0);
-  $163 = HEAP32[$162>>2]|0;
-  $166 = $163;
- }
- $164 = (($165) + ($166)|0);
- $167 = $6;
- $168 = $7;
- _memcpy(($164|0),($167|0),($168|0))|0;
- $169 = $5;
- $170 = HEAP32[$169>>2]|0;
- $171 = $170 >>> 11;
- $172 = $171 & 8;
- $173 = ($172|0)!=(0);
- $174 = $9;
- if ($173) {
-  $11 = $174;
-  $175 = $5;
-  $176 = HEAP32[$175>>2]|0;
-  $177 = $176 >>> 11;
-  $178 = $177 & -497;
-  $179 = HEAP32[$175>>2]|0;
-  $180 = $178 & 2097151;
-  $181 = $180 << 11;
-  $182 = $179 & 2047;
-  $183 = $182 | $181;
-  HEAP32[$175>>2] = $183;
-  $184 = $11;
-  $185 = $184 << 4;
-  $186 = $5;
-  $187 = HEAP32[$186>>2]|0;
-  $188 = $187 >>> 11;
-  $189 = $188 | $185;
-  $190 = HEAP32[$186>>2]|0;
-  $191 = $189 & 2097151;
-  $192 = $191 << 11;
-  $193 = $190 & 2047;
-  $194 = $193 | $192;
-  HEAP32[$186>>2] = $194;
- } else {
-  $195 = $5;
-  $196 = ((($195)) + 12|0);
-  HEAP32[$196>>2] = $174;
- }
- $197 = $5;
- $198 = HEAP32[$197>>2]|0;
- $199 = $198 >>> 11;
- $200 = $199 & 8;
- $201 = ($200|0)!=(0);
- $202 = $5;
- $203 = ((($202)) + 12|0);
- if ($201) {
-  $208 = $203;
- } else {
-  $204 = ((($203)) + 8|0);
-  $205 = HEAP32[$204>>2]|0;
-  $208 = $205;
- }
- $206 = $9;
- $207 = (($208) + ($206)|0);
- HEAP8[$207>>0] = 0;
- STACKTOP = sp;return;
-}
-function _mrb_str_cat_cstr($0,$1,$2,$3) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- var $$byval_copy = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $$byval_copy = sp + 8|0;
- $4 = $1;
- $5 = $3;
- $6 = $4;
- $7 = $5;
- $8 = $5;
- $9 = (_strlen($8)|0);
- ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
- _mrb_str_cat($0,$6,$$byval_copy,$7,$9);
- STACKTOP = sp;return;
-}
-function _mrb_str_cat_str($0,$1,$2,$3) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- var $$byval_copy = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;
- var $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $$byval_copy = sp + 8|0;
- $4 = $1;
- $5 = $4;
- $6 = HEAP32[$3>>2]|0;
- $7 = HEAP32[$6>>2]|0;
- $8 = $7 >>> 11;
- $9 = $8 & 8;
- $10 = ($9|0)!=(0);
- $11 = HEAP32[$3>>2]|0;
- $12 = ((($11)) + 12|0);
- if ($10) {
-  $27 = $12;
- } else {
-  $13 = ((($12)) + 8|0);
-  $14 = HEAP32[$13>>2]|0;
-  $27 = $14;
- }
- $15 = HEAP32[$3>>2]|0;
- $16 = HEAP32[$15>>2]|0;
- $17 = $16 >>> 11;
- $18 = $17 & 8;
- $19 = ($18|0)!=(0);
- $20 = HEAP32[$3>>2]|0;
- if ($19) {
-  $21 = HEAP32[$20>>2]|0;
-  $22 = $21 >>> 11;
-  $23 = $22 & 496;
-  $24 = $23 >> 4;
-  $28 = $24;
- } else {
-  $25 = ((($20)) + 12|0);
-  $26 = HEAP32[$25>>2]|0;
-  $28 = $26;
- }
- ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
- _mrb_str_cat($0,$5,$$byval_copy,$27,$28);
- STACKTOP = sp;return;
-}
-function _mrb_str_append($0,$1,$2,$3) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $$byval_copy2 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);
- $$byval_copy2 = sp + 32|0;
- $$byval_copy1 = sp + 24|0;
- $$byval_copy = sp + 16|0;
- $5 = sp;
- $4 = $1;
- $6 = $4;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$3>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$3+4>>2]|0;
- _mrb_str_to_str($5,$6,$$byval_copy);
- ;HEAP32[$3>>2]=HEAP32[$5>>2]|0;HEAP32[$3+4>>2]=HEAP32[$5+4>>2]|0;
- $7 = $4;
- ;HEAP32[$$byval_copy1>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$2+4>>2]|0;
- ;HEAP32[$$byval_copy2>>2]=HEAP32[$3>>2]|0;HEAP32[$$byval_copy2+4>>2]=HEAP32[$3+4>>2]|0;
- _mrb_str_cat_str($0,$7,$$byval_copy1,$$byval_copy2);
- STACKTOP = sp;return;
-}
-function _mrb_str_inspect($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $$byval_copy2 = 0, $$byval_copy3 = 0, $$byval_copy4 = 0, $$byval_copy5 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0;
- var $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0;
- var $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0, $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0;
- var $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0;
- var $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0;
- var $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0;
- var $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0;
- var $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 144|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(144|0);
- $$byval_copy5 = sp + 120|0;
- $$byval_copy4 = sp + 112|0;
- $$byval_copy3 = sp + 104|0;
- $$byval_copy2 = sp + 96|0;
- $$byval_copy1 = sp + 88|0;
- $$byval_copy = sp + 80|0;
- $6 = sp + 130|0;
- $7 = sp + 56|0;
- $12 = sp + 40|0;
- $13 = sp + 32|0;
- $14 = sp + 24|0;
- $15 = sp + 16|0;
- $16 = sp + 8|0;
- $17 = sp;
- $3 = $1;
- $18 = $3;
- _mrb_str_new_static($7,$18,56213,1);
- $19 = HEAP32[$2>>2]|0;
- $20 = HEAP32[$19>>2]|0;
- $21 = $20 >>> 11;
- $22 = $21 & 8;
- $23 = ($22|0)!=(0);
- $24 = HEAP32[$2>>2]|0;
- $25 = ((($24)) + 12|0);
- if ($23) {
-  $28 = $25;
- } else {
-  $26 = ((($25)) + 8|0);
-  $27 = HEAP32[$26>>2]|0;
-  $28 = $27;
- }
- $4 = $28;
- $29 = HEAP32[$2>>2]|0;
- $30 = HEAP32[$29>>2]|0;
- $31 = $30 >>> 11;
- $32 = $31 & 8;
- $33 = ($32|0)!=(0);
- $34 = HEAP32[$2>>2]|0;
- $35 = ((($34)) + 12|0);
- if ($33) {
-  $51 = $35;
- } else {
-  $36 = ((($35)) + 8|0);
-  $37 = HEAP32[$36>>2]|0;
-  $51 = $37;
- }
- $38 = HEAP32[$2>>2]|0;
- $39 = HEAP32[$38>>2]|0;
- $40 = $39 >>> 11;
- $41 = $40 & 8;
- $42 = ($41|0)!=(0);
- $43 = HEAP32[$2>>2]|0;
- if ($42) {
-  $44 = HEAP32[$43>>2]|0;
-  $45 = $44 >>> 11;
-  $46 = $45 & 496;
-  $47 = $46 >> 4;
-  $52 = $47;
- } else {
-  $48 = ((($43)) + 12|0);
-  $49 = HEAP32[$48>>2]|0;
-  $52 = $49;
- }
- $50 = (($51) + ($52)|0);
- $5 = $50;
- while(1) {
-  $53 = $4;
-  $54 = $5;
-  $55 = ($53>>>0)<($54>>>0);
-  if (!($55)) {
-   break;
-  }
-  $56 = $4;
-  $57 = $5;
-  $58 = (_utf8len($56,$57)|0);
-  $10 = $58;
-  $59 = $10;
-  $60 = ($59|0)>(1);
-  L16: do {
-   if ($60) {
-    $11 = 0;
-    while(1) {
-     $61 = $11;
-     $62 = $10;
-     $63 = ($61|0)<($62|0);
-     if (!($63)) {
-      break;
-     }
-     $64 = $4;
-     $65 = $11;
-     $66 = (($64) + ($65)|0);
-     $67 = HEAP8[$66>>0]|0;
-     $68 = $11;
-     $69 = (($6) + ($68)|0);
-     HEAP8[$69>>0] = $67;
-     $70 = $11;
-     $71 = (($70) + 1)|0;
-     $11 = $71;
-    }
-    $72 = $3;
-    $73 = $10;
-    ;HEAP32[$$byval_copy>>2]=HEAP32[$7>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$7+4>>2]|0;
-    _mrb_str_cat($12,$72,$$byval_copy,$6,$73);
-    $74 = $10;
-    $75 = (($74) - 1)|0;
-    $76 = $4;
-    $77 = (($76) + ($75)|0);
-    $4 = $77;
-   } else {
-    $78 = $4;
-    $79 = HEAP8[$78>>0]|0;
-    $8 = $79;
-    $80 = $8;
-    $81 = $80&255;
-    $82 = ($81|0)==(34);
-    do {
-     if (!($82)) {
-      $83 = $8;
-      $84 = $83&255;
-      $85 = ($84|0)==(92);
-      if (!($85)) {
-       $86 = $8;
-       $87 = $86&255;
-       $88 = ($87|0)==(35);
-       if ($88) {
-        $89 = $4;
-        $90 = $5;
-        $91 = ($89>>>0)<($90>>>0);
-        if ($91) {
-         $92 = $4;
-         $93 = HEAP8[$92>>0]|0;
-         $94 = $93 << 24 >> 24;
-         $95 = ($94|0)==(36);
-         if ($95) {
-          break;
-         }
-         $96 = $4;
-         $97 = HEAP8[$96>>0]|0;
-         $98 = $97 << 24 >> 24;
-         $99 = ($98|0)==(64);
-         if ($99) {
-          break;
-         }
-         $100 = $4;
-         $101 = HEAP8[$100>>0]|0;
-         $102 = $101 << 24 >> 24;
-         $103 = ($102|0)==(123);
-         if ($103) {
-          break;
-         }
-        }
-       }
-       $107 = $8;
-       $108 = $107&255;
-       $109 = (($108) - 32)|0;
-       $110 = ($109>>>0)<(95);
-       $111 = $8;
-       if ($110) {
-        HEAP8[$6>>0] = $111;
-        $112 = $3;
-        ;HEAP32[$$byval_copy2>>2]=HEAP32[$7>>2]|0;HEAP32[$$byval_copy2+4>>2]=HEAP32[$7+4>>2]|0;
-        _mrb_str_cat($14,$112,$$byval_copy2,$6,1);
-        break L16;
-       }
-       $113 = $111&255;
-       switch ($113|0) {
-       case 10:  {
-        $9 = 110;
-        break;
-       }
-       case 13:  {
-        $9 = 114;
-        break;
-       }
-       case 9:  {
-        $9 = 116;
-        break;
-       }
-       case 12:  {
-        $9 = 102;
-        break;
-       }
-       case 11:  {
-        $9 = 118;
-        break;
-       }
-       case 8:  {
-        $9 = 98;
-        break;
-       }
-       case 7:  {
-        $9 = 97;
-        break;
-       }
-       case 27:  {
-        $9 = 101;
-        break;
-       }
-       default: {
-        $9 = 0;
-       }
-       }
-       $114 = $9;
-       $115 = ($114<<24>>24)!=(0);
-       HEAP8[$6>>0] = 92;
-       if ($115) {
-        $116 = $9;
-        $117 = ((($6)) + 1|0);
-        HEAP8[$117>>0] = $116;
-        $118 = $3;
-        ;HEAP32[$$byval_copy3>>2]=HEAP32[$7>>2]|0;HEAP32[$$byval_copy3+4>>2]=HEAP32[$7+4>>2]|0;
-        _mrb_str_cat($15,$118,$$byval_copy3,$6,2);
-        break L16;
-       } else {
-        $119 = $8;
-        $120 = $119&255;
-        $121 = (($120|0) % 8)&-1;
-        $122 = (48 + ($121))|0;
-        $123 = $122&255;
-        $124 = ((($6)) + 3|0);
-        HEAP8[$124>>0] = $123;
-        $125 = $8;
-        $126 = $125&255;
-        $127 = (($126|0) / 8)&-1;
-        $128 = $127&255;
-        $8 = $128;
-        $129 = $8;
-        $130 = $129&255;
-        $131 = (($130|0) % 8)&-1;
-        $132 = (48 + ($131))|0;
-        $133 = $132&255;
-        $134 = ((($6)) + 2|0);
-        HEAP8[$134>>0] = $133;
-        $135 = $8;
-        $136 = $135&255;
-        $137 = (($136|0) / 8)&-1;
-        $138 = $137&255;
-        $8 = $138;
-        $139 = $8;
-        $140 = $139&255;
-        $141 = (($140|0) % 8)&-1;
-        $142 = (48 + ($141))|0;
-        $143 = $142&255;
-        $144 = ((($6)) + 1|0);
-        HEAP8[$144>>0] = $143;
-        $145 = $3;
-        ;HEAP32[$$byval_copy4>>2]=HEAP32[$7>>2]|0;HEAP32[$$byval_copy4+4>>2]=HEAP32[$7+4>>2]|0;
-        _mrb_str_cat($16,$145,$$byval_copy4,$6,4);
-        break L16;
-       }
-      }
-     }
-    } while(0);
-    HEAP8[$6>>0] = 92;
-    $104 = $8;
-    $105 = ((($6)) + 1|0);
-    HEAP8[$105>>0] = $104;
-    $106 = $3;
-    ;HEAP32[$$byval_copy1>>2]=HEAP32[$7>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$7+4>>2]|0;
-    _mrb_str_cat($13,$106,$$byval_copy1,$6,2);
-   }
-  } while(0);
-  $146 = $4;
-  $147 = ((($146)) + 1|0);
-  $4 = $147;
- }
- $148 = $3;
- ;HEAP32[$$byval_copy5>>2]=HEAP32[$7>>2]|0;HEAP32[$$byval_copy5+4>>2]=HEAP32[$7+4>>2]|0;
- _mrb_str_cat($17,$148,$$byval_copy5,56213,1);
- ;HEAP32[$0>>2]=HEAP32[$7>>2]|0;HEAP32[$0+4>>2]=HEAP32[$7+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_init_string($0) {
- $0 = $0|0;
- var $1 = 0, $10 = 0, $100 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0;
- var $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0;
- var $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0;
- var $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0;
- var $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0;
- var label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $1 = $0;
- $3 = $1;
- $4 = $1;
- $5 = ((($4)) + 32|0);
- $6 = HEAP32[$5>>2]|0;
- $7 = (_mrb_define_class($3,65324,$6)|0);
- $2 = $7;
- $8 = $1;
- $9 = ((($8)) + 48|0);
- HEAP32[$9>>2] = $7;
- $10 = $2;
- $11 = HEAP32[$10>>2]|0;
- $12 = $11 >>> 11;
- $13 = $12 & -256;
- $14 = $13 | 16;
- $15 = $2;
- $16 = HEAP32[$15>>2]|0;
- $17 = $14 & 2097151;
- $18 = $17 << 11;
- $19 = $16 & 2047;
- $20 = $19 | $18;
- HEAP32[$15>>2] = $20;
- $21 = $1;
- $22 = $2;
- _mrb_define_method($21,$22,56215,84,0);
- $23 = $1;
- $24 = $2;
- _mrb_define_method($23,$24,69156,85,262144);
- $25 = $1;
- $26 = $2;
- _mrb_define_method($25,$26,69201,86,262144);
- $27 = $1;
- $28 = $2;
- _mrb_define_method($27,$28,64614,87,262144);
- $29 = $1;
- $30 = $2;
- _mrb_define_method($29,$30,68856,88,262144);
- $31 = $1;
- $32 = $2;
- _mrb_define_method($31,$32,69083,89,4096);
- $33 = $1;
- $34 = $2;
- _mrb_define_method($33,$34,56224,90,0);
- $35 = $1;
- $36 = $2;
- _mrb_define_method($35,$36,56235,91,0);
- $37 = $1;
- $38 = $2;
- _mrb_define_method($37,$38,56247,92,4096);
- $39 = $1;
- $40 = $2;
- _mrb_define_method($39,$40,56253,93,4096);
- $41 = $1;
- $42 = $2;
- _mrb_define_method($41,$42,56260,94,262144);
- $43 = $1;
- $44 = $2;
- _mrb_define_method($43,$44,56265,95,262144);
- $45 = $1;
- $46 = $2;
- _mrb_define_method($45,$46,56271,96,0);
- $47 = $1;
- $48 = $2;
- _mrb_define_method($47,$48,56280,97,0);
- $49 = $1;
- $50 = $2;
- _mrb_define_method($49,$50,64646,98,0);
- $51 = $1;
- $52 = $2;
- _mrb_define_method($51,$52,69289,99,262144);
- $53 = $1;
- $54 = $2;
- _mrb_define_method($53,$54,68413,100,0);
- $55 = $1;
- $56 = $2;
- _mrb_define_method($55,$56,69243,101,262144);
- $57 = $1;
- $58 = $2;
- _mrb_define_method($57,$58,64653,102,4096);
- $59 = $1;
- $60 = $2;
- _mrb_define_method($59,$60,69252,103,262144);
- $61 = $1;
- $62 = $2;
- _mrb_define_method($61,$62,69294,104,262144);
- $63 = $1;
- $64 = $2;
- _mrb_define_method($63,$64,69712,105,0);
- $65 = $1;
- $66 = $2;
- _mrb_define_method($65,$66,64664,106,0);
- $67 = $1;
- $68 = $2;
- _mrb_define_method($67,$68,64680,104,262144);
- $69 = $1;
- $70 = $2;
- _mrb_define_method($69,$70,64688,107,0);
- $71 = $1;
- $72 = $2;
- _mrb_define_method($71,$72,64696,108,0);
- $73 = $1;
- $74 = $2;
- _mrb_define_method($73,$74,64705,109,4096);
- $75 = $1;
- $76 = $2;
- _mrb_define_method($75,$76,64718,106,0);
- $77 = $1;
- $78 = $2;
- _mrb_define_method($77,$78,64723,89,4096);
- $79 = $1;
- $80 = $2;
- _mrb_define_method($79,$80,56290,110,4096);
- $81 = $1;
- $82 = $2;
- _mrb_define_method($81,$82,56296,111,0);
- $83 = $1;
- $84 = $2;
- _mrb_define_method($83,$84,56301,112,4096);
- $85 = $1;
- $86 = $2;
- _mrb_define_method($85,$86,69276,113,0);
- $87 = $1;
- $88 = $2;
- _mrb_define_method($87,$88,65331,113,0);
- $89 = $1;
- $90 = $2;
- _mrb_define_method($89,$90,56499,105,0);
- $91 = $1;
- $92 = $2;
- _mrb_define_method($91,$92,56306,114,0);
- $93 = $1;
- $94 = $2;
- _mrb_define_method($93,$94,56313,115,0);
- $95 = $1;
- $96 = $2;
- _mrb_define_method($95,$96,69281,116,0);
- $97 = $1;
- $98 = $2;
- _mrb_define_method($97,$98,56321,117,0);
- $99 = $1;
- $100 = $2;
- _mrb_define_method($99,$100,56327,118,0);
- STACKTOP = sp;return;
-}
-function _mrb_str_bytesize($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $1;
- $5 = HEAP32[$2>>2]|0;
- $6 = HEAP32[$5>>2]|0;
- $7 = $6 >>> 11;
- $8 = $7 & 8;
- $9 = ($8|0)!=(0);
- $10 = HEAP32[$2>>2]|0;
- if ($9) {
-  $11 = HEAP32[$10>>2]|0;
-  $12 = $11 >>> 11;
-  $13 = $12 & 496;
-  $14 = $13 >> 4;
-  $17 = $14;
- } else {
-  $15 = ((($10)) + 12|0);
-  $16 = HEAP32[$15>>2]|0;
-  $17 = $16;
- }
- $4 = $17;
- $18 = $4;
- _mrb_fixnum_value_290($0,$18);
- STACKTOP = sp;return;
-}
-function _mrb_str_cmp_m($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $$byval_copy10 = 0, $$byval_copy11 = 0, $$byval_copy7 = 0, $$byval_copy8 = 0, $$byval_copy9 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0;
- var $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, $vararg_buffer1 = 0;
- var $vararg_buffer4 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 112|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(112|0);
- $$byval_copy11 = sp + 104|0;
- $$byval_copy10 = sp + 96|0;
- $$byval_copy9 = sp + 88|0;
- $$byval_copy8 = sp + 80|0;
- $$byval_copy7 = sp + 72|0;
- $$byval_copy = sp + 64|0;
- $vararg_buffer4 = sp + 16|0;
- $vararg_buffer1 = sp + 8|0;
- $vararg_buffer = sp;
- $4 = sp + 48|0;
- $6 = sp + 32|0;
- $7 = sp + 24|0;
- $3 = $1;
- $8 = $3;
- HEAP32[$vararg_buffer>>2] = $4;
- (_mrb_get_args($8,69199,$vararg_buffer)|0);
- $9 = ((($4)) + 4|0);
- $10 = HEAP32[$9>>2]|0;
- $11 = ($10|0)==(16);
- $12 = $3;
- do {
-  if ($11) {
-   ;HEAP32[$$byval_copy10>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy10+4>>2]=HEAP32[$2+4>>2]|0;
-   ;HEAP32[$$byval_copy11>>2]=HEAP32[$4>>2]|0;HEAP32[$$byval_copy11+4>>2]=HEAP32[$4+4>>2]|0;
-   $33 = (_mrb_str_cmp($12,$$byval_copy10,$$byval_copy11)|0);
-   $5 = $33;
-  } else {
-   $13 = $3;
-   $14 = (_mrb_intern_static($13,69276,4)|0);
-   ;HEAP32[$$byval_copy>>2]=HEAP32[$4>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$4+4>>2]|0;
-   $15 = (_mrb_respond_to($12,$$byval_copy,$14)|0);
-   $16 = ($15<<24>>24)!=(0);
-   if (!($16)) {
-    _mrb_nil_value_283($0);
-    STACKTOP = sp;return;
-   }
-   $17 = $3;
-   $18 = $3;
-   $19 = (_mrb_intern_static($18,69156,3)|0);
-   ;HEAP32[$$byval_copy7>>2]=HEAP32[$4>>2]|0;HEAP32[$$byval_copy7+4>>2]=HEAP32[$4+4>>2]|0;
-   $20 = (_mrb_respond_to($17,$$byval_copy7,$19)|0);
-   $21 = ($20<<24>>24)!=(0);
-   if (!($21)) {
-    _mrb_nil_value_283($0);
-    STACKTOP = sp;return;
-   }
-   $22 = $3;
-   ;HEAP8[$vararg_buffer1>>0]=HEAP8[$2>>0]|0;HEAP8[$vararg_buffer1+1>>0]=HEAP8[$2+1>>0]|0;HEAP8[$vararg_buffer1+2>>0]=HEAP8[$2+2>>0]|0;HEAP8[$vararg_buffer1+3>>0]=HEAP8[$2+3>>0]|0;HEAP8[$vararg_buffer1+4>>0]=HEAP8[$2+4>>0]|0;HEAP8[$vararg_buffer1+5>>0]=HEAP8[$2+5>>0]|0;HEAP8[$vararg_buffer1+6>>0]=HEAP8[$2+6>>0]|0;HEAP8[$vararg_buffer1+7>>0]=HEAP8[$2+7>>0]|0;
-   ;HEAP32[$$byval_copy8>>2]=HEAP32[$4>>2]|0;HEAP32[$$byval_copy8+4>>2]=HEAP32[$4+4>>2]|0;
-   _mrb_funcall($6,$22,$$byval_copy8,69156,1,$vararg_buffer1);
-   $23 = ((($6)) + 4|0);
-   $24 = HEAP32[$23>>2]|0;
-   $25 = ($24|0)==(0);
-   if ($25) {
-    $26 = HEAP32[$6>>2]|0;
-    $27 = ($26|0)!=(0);
-    if (!($27)) {
-     _mrb_nil_value_283($0);
-     STACKTOP = sp;return;
-    }
-   }
-   $28 = HEAP32[$6>>2]|0;
-   $29 = ($28|0)!=(0);
-   if ($29) {
-    $31 = HEAP32[$6>>2]|0;
-    $32 = (0 - ($31))|0;
-    $5 = $32;
-    break;
-   }
-   $30 = $3;
-   _mrb_fixnum_value_290($7,0);
-   ;HEAP8[$vararg_buffer4>>0]=HEAP8[$6>>0]|0;HEAP8[$vararg_buffer4+1>>0]=HEAP8[$6+1>>0]|0;HEAP8[$vararg_buffer4+2>>0]=HEAP8[$6+2>>0]|0;HEAP8[$vararg_buffer4+3>>0]=HEAP8[$6+3>>0]|0;HEAP8[$vararg_buffer4+4>>0]=HEAP8[$6+4>>0]|0;HEAP8[$vararg_buffer4+5>>0]=HEAP8[$6+5>>0]|0;HEAP8[$vararg_buffer4+6>>0]=HEAP8[$6+6>>0]|0;HEAP8[$vararg_buffer4+7>>0]=HEAP8[$6+7>>0]|0;
-   ;HEAP32[$$byval_copy9>>2]=HEAP32[$7>>2]|0;HEAP32[$$byval_copy9+4>>2]=HEAP32[$7+4>>2]|0;
-   _mrb_funcall($0,$30,$$byval_copy9,69660,1,$vararg_buffer4);
-   STACKTOP = sp;return;
-  }
- } while(0);
- $34 = $5;
- _mrb_fixnum_value_290($0,$34);
- STACKTOP = sp;return;
-}
-function _mrb_str_equal_m($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);
- $$byval_copy1 = sp + 32|0;
- $$byval_copy = sp + 24|0;
- $vararg_buffer = sp;
- $4 = sp + 8|0;
- $3 = $1;
- $5 = $3;
- HEAP32[$vararg_buffer>>2] = $4;
- (_mrb_get_args($5,69199,$vararg_buffer)|0);
- $6 = $3;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
- ;HEAP32[$$byval_copy1>>2]=HEAP32[$4>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$4+4>>2]|0;
- $7 = (_mrb_str_equal($6,$$byval_copy,$$byval_copy1)|0);
- _mrb_bool_value_340($0,$7);
- STACKTOP = sp;return;
-}
-function _mrb_str_plus_m($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);
- $$byval_copy1 = sp + 32|0;
- $$byval_copy = sp + 24|0;
- $vararg_buffer = sp;
- $4 = sp + 8|0;
- $3 = $1;
- $5 = $3;
- HEAP32[$vararg_buffer>>2] = $4;
- (_mrb_get_args($5,56362,$vararg_buffer)|0);
- $6 = $3;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
- ;HEAP32[$$byval_copy1>>2]=HEAP32[$4>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$4+4>>2]|0;
- _mrb_str_plus($0,$6,$$byval_copy,$$byval_copy1);
- STACKTOP = sp;return;
-}
-function _mrb_str_times($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0;
- var $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0;
- var $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0;
- var $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0;
- var $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0;
- var $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0;
- var $99 = 0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);
- $$byval_copy = sp + 32|0;
- $vararg_buffer = sp;
- $6 = sp + 12|0;
- $3 = $1;
- $9 = $3;
- HEAP32[$vararg_buffer>>2] = $6;
- (_mrb_get_args($9,64797,$vararg_buffer)|0);
- $10 = HEAP32[$6>>2]|0;
- $11 = ($10|0)<(0);
- if ($11) {
-  $12 = $3;
-  $13 = $3;
-  $14 = (_mrb_class_get($13,69160)|0);
-  _mrb_raise($12,$14,64813);
-  // unreachable;
- }
- $15 = HEAP32[$6>>2]|0;
- $16 = ($15|0)!=(0);
- if ($16) {
-  $17 = HEAP32[$6>>2]|0;
-  $18 = (2147483647 / ($17|0))&-1;
-  $19 = HEAP32[$2>>2]|0;
-  $20 = HEAP32[$19>>2]|0;
-  $21 = $20 >>> 11;
-  $22 = $21 & 8;
-  $23 = ($22|0)!=(0);
-  $24 = HEAP32[$2>>2]|0;
-  if ($23) {
-   $25 = HEAP32[$24>>2]|0;
-   $26 = $25 >>> 11;
-   $27 = $26 & 496;
-   $28 = $27 >> 4;
-   $32 = $28;
-  } else {
-   $29 = ((($24)) + 12|0);
-   $30 = HEAP32[$29>>2]|0;
-   $32 = $30;
-  }
-  $31 = ($18|0)<($32|0);
-  if ($31) {
-   $33 = $3;
-   $34 = $3;
-   $35 = (_mrb_class_get($34,69160)|0);
-   _mrb_raise($33,$35,56432);
-   // unreachable;
-  }
- }
- $36 = HEAP32[$2>>2]|0;
- $37 = HEAP32[$36>>2]|0;
- $38 = $37 >>> 11;
- $39 = $38 & 8;
- $40 = ($39|0)!=(0);
- $41 = HEAP32[$2>>2]|0;
- if ($40) {
-  $42 = HEAP32[$41>>2]|0;
-  $43 = $42 >>> 11;
-  $44 = $43 & 496;
-  $45 = $44 >> 4;
-  $50 = $45;
- } else {
-  $46 = ((($41)) + 12|0);
-  $47 = HEAP32[$46>>2]|0;
-  $50 = $47;
- }
- $48 = HEAP32[$6>>2]|0;
- $49 = Math_imul($50, $48)|0;
- $5 = $49;
- $51 = $3;
- $52 = $5;
- $53 = (_str_new($51,0,$52)|0);
- $7 = $53;
- $54 = $3;
- $55 = $7;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
- _str_with_class($54,$55,$$byval_copy);
- $56 = $7;
- $57 = HEAP32[$56>>2]|0;
- $58 = $57 >>> 11;
- $59 = $58 & 8;
- $60 = ($59|0)!=(0);
- $61 = $7;
- $62 = ((($61)) + 12|0);
- if ($60) {
-  $65 = $62;
- } else {
-  $63 = ((($62)) + 8|0);
-  $64 = HEAP32[$63>>2]|0;
-  $65 = $64;
- }
- $8 = $65;
- $66 = $5;
- $67 = ($66|0)>(0);
- if ($67) {
-  $68 = HEAP32[$2>>2]|0;
-  $69 = HEAP32[$68>>2]|0;
-  $70 = $69 >>> 11;
-  $71 = $70 & 8;
-  $72 = ($71|0)!=(0);
-  $73 = HEAP32[$2>>2]|0;
-  if ($72) {
-   $74 = HEAP32[$73>>2]|0;
-   $75 = $74 >>> 11;
-   $76 = $75 & 496;
-   $77 = $76 >> 4;
-   $80 = $77;
-  } else {
-   $78 = ((($73)) + 12|0);
-   $79 = HEAP32[$78>>2]|0;
-   $80 = $79;
-  }
-  $4 = $80;
-  $81 = $8;
-  $82 = HEAP32[$2>>2]|0;
-  $83 = HEAP32[$82>>2]|0;
-  $84 = $83 >>> 11;
-  $85 = $84 & 8;
-  $86 = ($85|0)!=(0);
-  $87 = HEAP32[$2>>2]|0;
-  $88 = ((($87)) + 12|0);
-  if ($86) {
-   $92 = $88;
-  } else {
-   $89 = ((($88)) + 8|0);
-   $90 = HEAP32[$89>>2]|0;
-   $92 = $90;
-  }
-  $91 = $4;
-  _memcpy(($81|0),($92|0),($91|0))|0;
-  while(1) {
-   $93 = $4;
-   $94 = $5;
-   $95 = (($94|0) / 2)&-1;
-   $96 = ($93|0)<=($95|0);
-   $97 = $8;
-   $98 = $4;
-   $99 = (($97) + ($98)|0);
-   $100 = $8;
-   if (!($96)) {
-    break;
-   }
-   $101 = $4;
-   _memcpy(($99|0),($100|0),($101|0))|0;
-   $102 = $4;
-   $103 = $102<<1;
-   $4 = $103;
-  }
-  $104 = $5;
-  $105 = $4;
-  $106 = (($104) - ($105))|0;
-  _memcpy(($99|0),($100|0),($106|0))|0;
- }
- $107 = $8;
- $108 = $7;
- $109 = HEAP32[$108>>2]|0;
- $110 = $109 >>> 11;
- $111 = $110 & 8;
- $112 = ($111|0)!=(0);
- $113 = $7;
- if ($112) {
-  $114 = HEAP32[$113>>2]|0;
-  $115 = $114 >>> 11;
-  $116 = $115 & 496;
-  $117 = $116 >> 4;
-  $121 = $117;
-  $120 = (($107) + ($121)|0);
-  HEAP8[$120>>0] = 0;
-  $122 = $7;
-  _mrb_obj_value_260($0,$122);
-  STACKTOP = sp;return;
- } else {
-  $118 = ((($113)) + 12|0);
-  $119 = HEAP32[$118>>2]|0;
-  $121 = $119;
-  $120 = (($107) + ($121)|0);
-  HEAP8[$120>>0] = 0;
-  $122 = $7;
-  _mrb_obj_value_260($0,$122);
-  STACKTOP = sp;return;
- }
-}
-function _mrb_str_aref_m($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $$byval_copy5 = 0, $$byval_copy6 = 0, $$byval_copy7 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0;
- var $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, $vararg_buffer2 = 0, $vararg_ptr1 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 96|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(96|0);
- $$byval_copy7 = sp + 80|0;
- $$byval_copy6 = sp + 72|0;
- $$byval_copy5 = sp + 64|0;
- $$byval_copy = sp + 56|0;
- $vararg_buffer2 = sp + 8|0;
- $vararg_buffer = sp;
- $4 = sp + 40|0;
- $5 = sp + 32|0;
- $7 = sp + 16|0;
- $3 = $1;
- $8 = $3;
- HEAP32[$vararg_buffer>>2] = $4;
- $vararg_ptr1 = ((($vararg_buffer)) + 4|0);
- HEAP32[$vararg_ptr1>>2] = $5;
- $9 = (_mrb_get_args($8,56367,$vararg_buffer)|0);
- $6 = $9;
- $10 = $6;
- $11 = ($10|0)==(2);
- if ($11) {
-  $12 = $3;
-  ;HEAP32[$$byval_copy>>2]=HEAP32[$4>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$4+4>>2]|0;
-  _mrb_regexp_check($12,$$byval_copy);
-  $13 = $3;
-  $14 = HEAP32[$4>>2]|0;
-  $15 = HEAP32[$5>>2]|0;
-  ;HEAP32[$$byval_copy5>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy5+4>>2]=HEAP32[$2+4>>2]|0;
-  _str_substr($0,$13,$$byval_copy5,$14,$15);
-  STACKTOP = sp;return;
- }
- $16 = $6;
- $17 = ($16|0)!=(1);
- $18 = $3;
- if ($17) {
-  $19 = $3;
-  $20 = (_mrb_class_get($19,69160)|0);
-  $21 = $6;
-  _mrb_fixnum_value_290($7,$21);
-  ;HEAP8[$vararg_buffer2>>0]=HEAP8[$7>>0]|0;HEAP8[$vararg_buffer2+1>>0]=HEAP8[$7+1>>0]|0;HEAP8[$vararg_buffer2+2>>0]=HEAP8[$7+2>>0]|0;HEAP8[$vararg_buffer2+3>>0]=HEAP8[$7+3>>0]|0;HEAP8[$vararg_buffer2+4>>0]=HEAP8[$7+4>>0]|0;HEAP8[$vararg_buffer2+5>>0]=HEAP8[$7+5>>0]|0;HEAP8[$vararg_buffer2+6>>0]=HEAP8[$7+6>>0]|0;HEAP8[$vararg_buffer2+7>>0]=HEAP8[$7+7>>0]|0;
-  _mrb_raisef($18,$20,56371,$vararg_buffer2);
-  // unreachable;
- }
- ;HEAP32[$$byval_copy6>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy6+4>>2]=HEAP32[$2+4>>2]|0;
- ;HEAP32[$$byval_copy7>>2]=HEAP32[$4>>2]|0;HEAP32[$$byval_copy7+4>>2]=HEAP32[$4+4>>2]|0;
- _mrb_str_aref($0,$18,$$byval_copy6,$$byval_copy7);
- STACKTOP = sp;return;
-}
-function _mrb_str_capitalize($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);
- $$byval_copy1 = sp + 40|0;
- $$byval_copy = sp + 32|0;
- $4 = sp + 16|0;
- $5 = sp + 8|0;
- $6 = sp;
- $3 = $1;
- $7 = $3;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
- _mrb_str_dup($5,$7,$$byval_copy);
- ;HEAP32[$4>>2]=HEAP32[$5>>2]|0;HEAP32[$4+4>>2]=HEAP32[$5+4>>2]|0;
- $8 = $3;
- ;HEAP32[$$byval_copy1>>2]=HEAP32[$4>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$4+4>>2]|0;
- _mrb_str_capitalize_bang($6,$8,$$byval_copy1);
- ;HEAP32[$0>>2]=HEAP32[$4>>2]|0;HEAP32[$0+4>>2]=HEAP32[$4+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_str_capitalize_bang($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0;
- var $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0;
- var $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0;
- var $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0;
- var $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0;
- var $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $3 = $1;
- $6 = 0;
- $8 = HEAP32[$2>>2]|0;
- $7 = $8;
- $9 = $3;
- $10 = $7;
- _mrb_str_modify($9,$10);
- $11 = $7;
- $12 = HEAP32[$11>>2]|0;
- $13 = $12 >>> 11;
- $14 = $13 & 8;
- $15 = ($14|0)!=(0);
- $16 = $7;
- if ($15) {
-  $17 = HEAP32[$16>>2]|0;
-  $18 = $17 >>> 11;
-  $19 = $18 & 496;
-  $20 = $19 >> 4;
-  $24 = $20;
- } else {
-  $21 = ((($16)) + 12|0);
-  $22 = HEAP32[$21>>2]|0;
-  $24 = $22;
- }
- $23 = ($24|0)==(0);
- do {
-  if (!($23)) {
-   $25 = $7;
-   $26 = HEAP32[$25>>2]|0;
-   $27 = $26 >>> 11;
-   $28 = $27 & 8;
-   $29 = ($28|0)!=(0);
-   $30 = $7;
-   $31 = ((($30)) + 12|0);
-   if ($29) {
-    $32 = ($31|0)!=(0|0);
-    if (!($32)) {
-     break;
-    }
-   } else {
-    $33 = ((($31)) + 8|0);
-    $34 = HEAP32[$33>>2]|0;
-    $35 = ($34|0)!=(0|0);
-    if (!($35)) {
-     break;
-    }
-   }
-   $36 = $7;
-   $37 = HEAP32[$36>>2]|0;
-   $38 = $37 >>> 11;
-   $39 = $38 & 8;
-   $40 = ($39|0)!=(0);
-   $41 = $7;
-   $42 = ((($41)) + 12|0);
-   if ($40) {
-    $45 = $42;
-   } else {
-    $43 = ((($42)) + 8|0);
-    $44 = HEAP32[$43>>2]|0;
-    $45 = $44;
-   }
-   $4 = $45;
-   $46 = $7;
-   $47 = HEAP32[$46>>2]|0;
-   $48 = $47 >>> 11;
-   $49 = $48 & 8;
-   $50 = ($49|0)!=(0);
-   $51 = $7;
-   $52 = ((($51)) + 12|0);
-   if ($50) {
-    $68 = $52;
-   } else {
-    $53 = ((($52)) + 8|0);
-    $54 = HEAP32[$53>>2]|0;
-    $68 = $54;
-   }
-   $55 = $7;
-   $56 = HEAP32[$55>>2]|0;
-   $57 = $56 >>> 11;
-   $58 = $57 & 8;
-   $59 = ($58|0)!=(0);
-   $60 = $7;
-   if ($59) {
-    $61 = HEAP32[$60>>2]|0;
-    $62 = $61 >>> 11;
-    $63 = $62 & 496;
-    $64 = $63 >> 4;
-    $69 = $64;
-   } else {
-    $65 = ((($60)) + 12|0);
-    $66 = HEAP32[$65>>2]|0;
-    $69 = $66;
-   }
-   $67 = (($68) + ($69)|0);
-   $5 = $67;
-   $70 = $4;
-   $71 = HEAP8[$70>>0]|0;
-   $72 = $71 << 24 >> 24;
-   $73 = (($72) - 97)|0;
-   $74 = ($73>>>0)<(26);
-   if ($74) {
-    $75 = $4;
-    $76 = HEAP8[$75>>0]|0;
-    $77 = $76 << 24 >> 24;
-    $78 = (($77) - 97)|0;
-    $79 = ($78>>>0)<(26);
-    $80 = $4;
-    $81 = HEAP8[$80>>0]|0;
-    $82 = $81 << 24 >> 24;
-    $83 = $82 & 95;
-    $84 = $79 ? $83 : $82;
-    $85 = $84&255;
-    $86 = $4;
-    HEAP8[$86>>0] = $85;
-    $6 = 1;
-   }
-   while(1) {
-    $87 = $4;
-    $88 = ((($87)) + 1|0);
-    $4 = $88;
-    $89 = $5;
-    $90 = ($88>>>0)<($89>>>0);
-    if (!($90)) {
-     break;
-    }
-    $91 = $4;
-    $92 = HEAP8[$91>>0]|0;
-    $93 = $92 << 24 >> 24;
-    $94 = (($93) - 65)|0;
-    $95 = ($94>>>0)<(26);
-    if (!($95)) {
-     continue;
-    }
-    $96 = $4;
-    $97 = HEAP8[$96>>0]|0;
-    $98 = $97 << 24 >> 24;
-    $99 = (($98) - 65)|0;
-    $100 = ($99>>>0)<(26);
-    $101 = $4;
-    $102 = HEAP8[$101>>0]|0;
-    $103 = $102 << 24 >> 24;
-    $104 = $103 | 32;
-    $105 = $100 ? $104 : $103;
-    $106 = $105&255;
-    $107 = $4;
-    HEAP8[$107>>0] = $106;
-    $6 = 1;
-   }
-   $108 = $6;
-   $109 = ($108<<24>>24)!=(0);
-   if ($109) {
-    ;HEAP32[$0>>2]=HEAP32[$2>>2]|0;HEAP32[$0+4>>2]=HEAP32[$2+4>>2]|0;
-    STACKTOP = sp;return;
-   } else {
-    _mrb_nil_value_283($0);
-    STACKTOP = sp;return;
-   }
-  }
- } while(0);
- _mrb_nil_value_283($0);
- STACKTOP = sp;return;
-}
-function _mrb_str_chomp($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);
- $$byval_copy1 = sp + 40|0;
- $$byval_copy = sp + 32|0;
- $4 = sp + 16|0;
- $5 = sp + 8|0;
- $6 = sp;
- $3 = $1;
- $7 = $3;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
- _mrb_str_dup($5,$7,$$byval_copy);
- ;HEAP32[$4>>2]=HEAP32[$5>>2]|0;HEAP32[$4+4>>2]=HEAP32[$5+4>>2]|0;
- $8 = $3;
- ;HEAP32[$$byval_copy1>>2]=HEAP32[$4>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$4+4>>2]|0;
- _mrb_str_chomp_bang($6,$8,$$byval_copy1);
- ;HEAP32[$0>>2]=HEAP32[$4>>2]|0;HEAP32[$0+4>>2]=HEAP32[$4+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_str_chomp_bang($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;
- var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0;
- var $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0, $152 = 0, $153 = 0;
- var $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0, $170 = 0, $171 = 0;
- var $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0, $188 = 0, $189 = 0, $19 = 0;
- var $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0, $197 = 0, $198 = 0, $199 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0, $204 = 0, $205 = 0, $206 = 0, $207 = 0, $208 = 0;
- var $209 = 0, $21 = 0, $210 = 0, $211 = 0, $212 = 0, $213 = 0, $214 = 0, $215 = 0, $216 = 0, $217 = 0, $218 = 0, $219 = 0, $22 = 0, $220 = 0, $221 = 0, $222 = 0, $223 = 0, $224 = 0, $225 = 0, $226 = 0;
- var $227 = 0, $228 = 0, $229 = 0, $23 = 0, $230 = 0, $231 = 0, $232 = 0, $233 = 0, $234 = 0, $235 = 0, $236 = 0, $237 = 0, $238 = 0, $239 = 0, $24 = 0, $240 = 0, $241 = 0, $242 = 0, $243 = 0, $244 = 0;
- var $245 = 0, $246 = 0, $247 = 0, $248 = 0, $249 = 0, $25 = 0, $250 = 0, $251 = 0, $252 = 0, $253 = 0, $254 = 0, $255 = 0, $256 = 0, $257 = 0, $258 = 0, $259 = 0, $26 = 0, $260 = 0, $261 = 0, $262 = 0;
- var $263 = 0, $264 = 0, $265 = 0, $266 = 0, $267 = 0, $268 = 0, $269 = 0, $27 = 0, $270 = 0, $271 = 0, $272 = 0, $273 = 0, $274 = 0, $275 = 0, $276 = 0, $277 = 0, $278 = 0, $279 = 0, $28 = 0, $280 = 0;
- var $281 = 0, $282 = 0, $283 = 0, $284 = 0, $285 = 0, $286 = 0, $287 = 0, $288 = 0, $289 = 0, $29 = 0, $290 = 0, $291 = 0, $292 = 0, $293 = 0, $294 = 0, $295 = 0, $296 = 0, $297 = 0, $298 = 0, $299 = 0;
- var $3 = 0, $30 = 0, $300 = 0, $301 = 0, $302 = 0, $303 = 0, $304 = 0, $305 = 0, $306 = 0, $307 = 0, $308 = 0, $309 = 0, $31 = 0, $310 = 0, $311 = 0, $312 = 0, $313 = 0, $314 = 0, $315 = 0, $316 = 0;
- var $317 = 0, $318 = 0, $319 = 0, $32 = 0, $320 = 0, $321 = 0, $322 = 0, $323 = 0, $324 = 0, $325 = 0, $326 = 0, $327 = 0, $328 = 0, $329 = 0, $33 = 0, $330 = 0, $331 = 0, $332 = 0, $333 = 0, $334 = 0;
- var $335 = 0, $336 = 0, $337 = 0, $338 = 0, $339 = 0, $34 = 0, $340 = 0, $341 = 0, $342 = 0, $343 = 0, $344 = 0, $345 = 0, $346 = 0, $347 = 0, $348 = 0, $349 = 0, $35 = 0, $350 = 0, $351 = 0, $352 = 0;
- var $353 = 0, $354 = 0, $355 = 0, $356 = 0, $357 = 0, $358 = 0, $359 = 0, $36 = 0, $360 = 0, $361 = 0, $362 = 0, $363 = 0, $364 = 0, $365 = 0, $366 = 0, $367 = 0, $368 = 0, $369 = 0, $37 = 0, $370 = 0;
- var $371 = 0, $372 = 0, $373 = 0, $374 = 0, $375 = 0, $376 = 0, $377 = 0, $378 = 0, $379 = 0, $38 = 0, $380 = 0, $381 = 0, $382 = 0, $383 = 0, $384 = 0, $385 = 0, $386 = 0, $387 = 0, $388 = 0, $389 = 0;
- var $39 = 0, $390 = 0, $391 = 0, $392 = 0, $393 = 0, $394 = 0, $395 = 0, $396 = 0, $397 = 0, $398 = 0, $399 = 0, $4 = 0, $40 = 0, $400 = 0, $401 = 0, $402 = 0, $403 = 0, $404 = 0, $405 = 0, $406 = 0;
- var $407 = 0, $408 = 0, $409 = 0, $41 = 0, $410 = 0, $411 = 0, $412 = 0, $413 = 0, $414 = 0, $415 = 0, $416 = 0, $417 = 0, $418 = 0, $419 = 0, $42 = 0, $420 = 0, $421 = 0, $422 = 0, $423 = 0, $424 = 0;
- var $425 = 0, $426 = 0, $427 = 0, $428 = 0, $429 = 0, $43 = 0, $430 = 0, $431 = 0, $432 = 0, $433 = 0, $434 = 0, $435 = 0, $436 = 0, $437 = 0, $438 = 0, $439 = 0, $44 = 0, $440 = 0, $441 = 0, $442 = 0;
- var $443 = 0, $444 = 0, $445 = 0, $446 = 0, $447 = 0, $448 = 0, $449 = 0, $45 = 0, $450 = 0, $451 = 0, $452 = 0, $453 = 0, $454 = 0, $455 = 0, $456 = 0, $457 = 0, $458 = 0, $459 = 0, $46 = 0, $460 = 0;
- var $461 = 0, $462 = 0, $463 = 0, $464 = 0, $465 = 0, $466 = 0, $467 = 0, $468 = 0, $469 = 0, $47 = 0, $470 = 0, $471 = 0, $472 = 0, $473 = 0, $474 = 0, $475 = 0, $476 = 0, $477 = 0, $478 = 0, $479 = 0;
- var $48 = 0, $480 = 0, $481 = 0, $482 = 0, $483 = 0, $484 = 0, $485 = 0, $486 = 0, $487 = 0, $488 = 0, $489 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0;
- var $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0;
- var $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0;
- var $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $or$cond = 0, $or$cond3 = 0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);
- $vararg_buffer = sp;
- $4 = sp + 48|0;
- $3 = $1;
- $16 = HEAP32[$2>>2]|0;
- $10 = $16;
- $17 = $3;
- $18 = $10;
- _mrb_str_modify($17,$18);
- $19 = $10;
- $20 = HEAP32[$19>>2]|0;
- $21 = $20 >>> 11;
- $22 = $21 & 8;
- $23 = ($22|0)!=(0);
- $24 = $10;
- if ($23) {
-  $25 = HEAP32[$24>>2]|0;
-  $26 = $25 >>> 11;
-  $27 = $26 & 496;
-  $28 = $27 >> 4;
-  $31 = $28;
- } else {
-  $29 = ((($24)) + 12|0);
-  $30 = HEAP32[$29>>2]|0;
-  $31 = $30;
- }
- $9 = $31;
- $32 = $3;
- HEAP32[$vararg_buffer>>2] = $4;
- $33 = (_mrb_get_args($32,56364,$vararg_buffer)|0);
- $34 = ($33|0)==(0);
- $35 = $9;
- $36 = ($35|0)==(0);
- L5: do {
-  if ($34) {
-   if ($36) {
-    _mrb_nil_value_283($0);
-    STACKTOP = sp;return;
-   }
-  } else {
-   do {
-    if (!($36)) {
-     $276 = ((($4)) + 4|0);
-     $277 = HEAP32[$276>>2]|0;
-     $278 = ($277|0)==(0);
-     if ($278) {
-      $279 = HEAP32[$4>>2]|0;
-      $280 = ($279|0)!=(0);
-      if (!($280)) {
-       break;
-      }
-     }
-     $281 = $10;
-     $282 = HEAP32[$281>>2]|0;
-     $283 = $282 >>> 11;
-     $284 = $283 & 8;
-     $285 = ($284|0)!=(0);
-     $286 = $10;
-     $287 = ((($286)) + 12|0);
-     if ($285) {
-      $290 = $287;
-     } else {
-      $288 = ((($287)) + 8|0);
-      $289 = HEAP32[$288>>2]|0;
-      $290 = $289;
-     }
-     $6 = $290;
-     $291 = HEAP32[$4>>2]|0;
-     $292 = HEAP32[$291>>2]|0;
-     $293 = $292 >>> 11;
-     $294 = $293 & 8;
-     $295 = ($294|0)!=(0);
-     $296 = HEAP32[$4>>2]|0;
-     if ($295) {
-      $297 = HEAP32[$296>>2]|0;
-      $298 = $297 >>> 11;
-      $299 = $298 & 496;
-      $300 = $299 >> 4;
-      $303 = $300;
-     } else {
-      $301 = ((($296)) + 12|0);
-      $302 = HEAP32[$301>>2]|0;
-      $303 = $302;
-     }
-     $8 = $303;
-     $304 = $8;
-     $305 = ($304|0)==(0);
-     if ($305) {
-      while(1) {
-       $306 = $9;
-       $307 = ($306|0)>(0);
-       if ($307) {
-        $308 = $6;
-        $309 = $9;
-        $310 = (($309) - 1)|0;
-        $311 = (($308) + ($310)|0);
-        $312 = HEAP8[$311>>0]|0;
-        $313 = $312 << 24 >> 24;
-        $314 = ($313|0)==(10);
-        $489 = $314;
-       } else {
-        $489 = 0;
-       }
-       $315 = $9;
-       if (!($489)) {
-        break;
-       }
-       $316 = (($315) + -1)|0;
-       $9 = $316;
-       $317 = $9;
-       $318 = ($317|0)>(0);
-       if (!($318)) {
-        continue;
-       }
-       $319 = $6;
-       $320 = $9;
-       $321 = (($320) - 1)|0;
-       $322 = (($319) + ($321)|0);
-       $323 = HEAP8[$322>>0]|0;
-       $324 = $323 << 24 >> 24;
-       $325 = ($324|0)==(13);
-       if (!($325)) {
-        continue;
-       }
-       $326 = $9;
-       $327 = (($326) + -1)|0;
-       $9 = $327;
-      }
-      $328 = $10;
-      $329 = HEAP32[$328>>2]|0;
-      $330 = $329 >>> 11;
-      $331 = $330 & 8;
-      $332 = ($331|0)!=(0);
-      $333 = $10;
-      if ($332) {
-       $334 = HEAP32[$333>>2]|0;
-       $335 = $334 >>> 11;
-       $336 = $335 & 496;
-       $337 = $336 >> 4;
-       $341 = $337;
-      } else {
-       $338 = ((($333)) + 12|0);
-       $339 = HEAP32[$338>>2]|0;
-       $341 = $339;
-      }
-      $340 = ($315|0)<($341|0);
-      if (!($340)) {
-       _mrb_nil_value_283($0);
-       STACKTOP = sp;return;
-      }
-      $342 = $10;
-      $343 = HEAP32[$342>>2]|0;
-      $344 = $343 >>> 11;
-      $345 = $344 & 8;
-      $346 = ($345|0)!=(0);
-      $347 = $9;
-      if ($346) {
-       $14 = $347;
-       $348 = $10;
-       $349 = HEAP32[$348>>2]|0;
-       $350 = $349 >>> 11;
-       $351 = $350 & -497;
-       $352 = HEAP32[$348>>2]|0;
-       $353 = $351 & 2097151;
-       $354 = $353 << 11;
-       $355 = $352 & 2047;
-       $356 = $355 | $354;
-       HEAP32[$348>>2] = $356;
-       $357 = $14;
-       $358 = $357 << 4;
-       $359 = $10;
-       $360 = HEAP32[$359>>2]|0;
-       $361 = $360 >>> 11;
-       $362 = $361 | $358;
-       $363 = HEAP32[$359>>2]|0;
-       $364 = $362 & 2097151;
-       $365 = $364 << 11;
-       $366 = $363 & 2047;
-       $367 = $366 | $365;
-       HEAP32[$359>>2] = $367;
-      } else {
-       $368 = $10;
-       $369 = ((($368)) + 12|0);
-       HEAP32[$369>>2] = $347;
-      }
-      $370 = $6;
-      $371 = $9;
-      $372 = (($370) + ($371)|0);
-      HEAP8[$372>>0] = 0;
-      ;HEAP32[$0>>2]=HEAP32[$2>>2]|0;HEAP32[$0+4>>2]=HEAP32[$2+4>>2]|0;
-      STACKTOP = sp;return;
-     }
-     $373 = $8;
-     $374 = $9;
-     $375 = ($373|0)>($374|0);
-     if ($375) {
-      _mrb_nil_value_283($0);
-      STACKTOP = sp;return;
-     }
-     $376 = HEAP32[$4>>2]|0;
-     $377 = HEAP32[$376>>2]|0;
-     $378 = $377 >>> 11;
-     $379 = $378 & 8;
-     $380 = ($379|0)!=(0);
-     $381 = HEAP32[$4>>2]|0;
-     $382 = ((($381)) + 12|0);
-     if ($380) {
-      $388 = $382;
-     } else {
-      $383 = ((($382)) + 8|0);
-      $384 = HEAP32[$383>>2]|0;
-      $388 = $384;
-     }
-     $385 = $8;
-     $386 = (($385) - 1)|0;
-     $387 = (($388) + ($386)|0);
-     $389 = HEAP8[$387>>0]|0;
-     $390 = $389 << 24 >> 24;
-     $5 = $390;
-     $391 = $8;
-     $392 = ($391|0)==(1);
-     $393 = $5;
-     $394 = ($393|0)==(10);
-     $or$cond = $392 & $394;
-     if ($or$cond) {
-      $395 = HEAP32[$4>>2]|0;
-      $396 = HEAP32[$395>>2]|0;
-      $397 = $396 >>> 11;
-      $398 = $397 & 8;
-      $399 = ($398|0)!=(0);
-      $400 = HEAP32[$4>>2]|0;
-      $401 = ((($400)) + 12|0);
-      if ($399) {
-       $407 = $401;
-      } else {
-       $402 = ((($401)) + 8|0);
-       $403 = HEAP32[$402>>2]|0;
-       $407 = $403;
-      }
-      $404 = $8;
-      $405 = (($404) - 1)|0;
-      $406 = (($407) + ($405)|0);
-      $408 = HEAP8[$406>>0]|0;
-      $409 = $408 << 24 >> 24;
-      $5 = $409;
-     }
-     $410 = $8;
-     $411 = ($410|0)==(1);
-     $412 = $5;
-     $413 = ($412|0)==(10);
-     $or$cond3 = $411 & $413;
-     if ($or$cond3) {
-      break L5;
-     }
-     $414 = $6;
-     $415 = $9;
-     $416 = (($414) + ($415)|0);
-     $417 = $8;
-     $418 = (0 - ($417))|0;
-     $419 = (($416) + ($418)|0);
-     $7 = $419;
-     $420 = $6;
-     $421 = $9;
-     $422 = (($421) - 1)|0;
-     $423 = (($420) + ($422)|0);
-     $424 = HEAP8[$423>>0]|0;
-     $425 = $424 << 24 >> 24;
-     $426 = $5;
-     $427 = ($425|0)==($426|0);
-     do {
-      if ($427) {
-       $428 = $8;
-       $429 = ($428|0)<=(1);
-       if (!($429)) {
-        $430 = HEAP32[$4>>2]|0;
-        $431 = HEAP32[$430>>2]|0;
-        $432 = $431 >>> 11;
-        $433 = $432 & 8;
-        $434 = ($433|0)!=(0);
-        $435 = HEAP32[$4>>2]|0;
-        $436 = ((($435)) + 12|0);
-        if ($434) {
-         $441 = $436;
-        } else {
-         $437 = ((($436)) + 8|0);
-         $438 = HEAP32[$437>>2]|0;
-         $441 = $438;
-        }
-        $439 = $7;
-        $440 = $8;
-        $442 = (_memcmp($441,$439,$440)|0);
-        $443 = ($442|0)==(0);
-        if (!($443)) {
-         break;
-        }
-       }
-       $444 = $10;
-       $445 = HEAP32[$444>>2]|0;
-       $446 = $445 >>> 11;
-       $447 = $446 & 8;
-       $448 = ($447|0)!=(0);
-       $449 = $9;
-       $450 = $8;
-       $451 = (($449) - ($450))|0;
-       if ($448) {
-        $15 = $451;
-        $452 = $10;
-        $453 = HEAP32[$452>>2]|0;
-        $454 = $453 >>> 11;
-        $455 = $454 & -497;
-        $456 = HEAP32[$452>>2]|0;
-        $457 = $455 & 2097151;
-        $458 = $457 << 11;
-        $459 = $456 & 2047;
-        $460 = $459 | $458;
-        HEAP32[$452>>2] = $460;
-        $461 = $15;
-        $462 = $461 << 4;
-        $463 = $10;
-        $464 = HEAP32[$463>>2]|0;
-        $465 = $464 >>> 11;
-        $466 = $465 | $462;
-        $467 = HEAP32[$463>>2]|0;
-        $468 = $466 & 2097151;
-        $469 = $468 << 11;
-        $470 = $467 & 2047;
-        $471 = $470 | $469;
-        HEAP32[$463>>2] = $471;
-       } else {
-        $472 = $10;
-        $473 = ((($472)) + 12|0);
-        HEAP32[$473>>2] = $451;
-       }
-       $474 = $6;
-       $475 = $10;
-       $476 = HEAP32[$475>>2]|0;
-       $477 = $476 >>> 11;
-       $478 = $477 & 8;
-       $479 = ($478|0)!=(0);
-       $480 = $10;
-       if ($479) {
-        $481 = HEAP32[$480>>2]|0;
-        $482 = $481 >>> 11;
-        $483 = $482 & 496;
-        $484 = $483 >> 4;
-        $488 = $484;
-       } else {
-        $485 = ((($480)) + 12|0);
-        $486 = HEAP32[$485>>2]|0;
-        $488 = $486;
-       }
-       $487 = (($474) + ($488)|0);
-       HEAP8[$487>>0] = 0;
-       ;HEAP32[$0>>2]=HEAP32[$2>>2]|0;HEAP32[$0+4>>2]=HEAP32[$2+4>>2]|0;
-       STACKTOP = sp;return;
-      }
-     } while(0);
-     _mrb_nil_value_283($0);
-     STACKTOP = sp;return;
-    }
-   } while(0);
-   _mrb_nil_value_283($0);
-   STACKTOP = sp;return;
-  }
- } while(0);
- $37 = $10;
- $38 = HEAP32[$37>>2]|0;
- $39 = $38 >>> 11;
- $40 = $39 & 8;
- $41 = ($40|0)!=(0);
- $42 = $10;
- $43 = ((($42)) + 12|0);
- if ($41) {
-  $49 = $43;
- } else {
-  $44 = ((($43)) + 8|0);
-  $45 = HEAP32[$44>>2]|0;
-  $49 = $45;
- }
- $46 = $9;
- $47 = (($46) - 1)|0;
- $48 = (($49) + ($47)|0);
- $50 = HEAP8[$48>>0]|0;
- $51 = $50 << 24 >> 24;
- $52 = ($51|0)==(10);
- $53 = $10;
- $54 = HEAP32[$53>>2]|0;
- $55 = $54 >>> 11;
- $56 = $55 & 8;
- $57 = ($56|0)!=(0);
- $58 = $10;
- do {
-  if ($52) {
-   $59 = HEAP32[$58>>2]|0;
-   $60 = $59 >>> 11;
-   $61 = $60 & 8;
-   $62 = ($61|0)!=(0);
-   $63 = $10;
-   if ($57) {
-    if ($62) {
-     $64 = HEAP32[$63>>2]|0;
-     $65 = $64 >>> 11;
-     $66 = $65 & 496;
-     $67 = $66 >> 4;
-     $71 = $67;
-    } else {
-     $68 = ((($63)) + 12|0);
-     $69 = HEAP32[$68>>2]|0;
-     $71 = $69;
-    }
-    $70 = (($71) - 1)|0;
-    $11 = $70;
-    $72 = $10;
-    $73 = HEAP32[$72>>2]|0;
-    $74 = $73 >>> 11;
-    $75 = $74 & -497;
-    $76 = HEAP32[$72>>2]|0;
-    $77 = $75 & 2097151;
-    $78 = $77 << 11;
-    $79 = $76 & 2047;
-    $80 = $79 | $78;
-    HEAP32[$72>>2] = $80;
-    $81 = $11;
-    $82 = $81 << 4;
-    $83 = $10;
-    $84 = HEAP32[$83>>2]|0;
-    $85 = $84 >>> 11;
-    $86 = $85 | $82;
-    $87 = HEAP32[$83>>2]|0;
-    $88 = $86 & 2097151;
-    $89 = $88 << 11;
-    $90 = $87 & 2047;
-    $91 = $90 | $89;
-    HEAP32[$83>>2] = $91;
-   } else {
-    if ($62) {
-     $92 = HEAP32[$63>>2]|0;
-     $93 = $92 >>> 11;
-     $94 = $93 & 496;
-     $95 = $94 >> 4;
-     $99 = $95;
-    } else {
-     $96 = ((($63)) + 12|0);
-     $97 = HEAP32[$96>>2]|0;
-     $99 = $97;
-    }
-    $98 = (($99) - 1)|0;
-    $100 = $10;
-    $101 = ((($100)) + 12|0);
-    HEAP32[$101>>2] = $98;
-   }
-   $102 = $10;
-   $103 = HEAP32[$102>>2]|0;
-   $104 = $103 >>> 11;
-   $105 = $104 & 8;
-   $106 = ($105|0)!=(0);
-   $107 = $10;
-   if ($106) {
-    $108 = HEAP32[$107>>2]|0;
-    $109 = $108 >>> 11;
-    $110 = $109 & 496;
-    $111 = $110 >> 4;
-    $115 = $111;
-   } else {
-    $112 = ((($107)) + 12|0);
-    $113 = HEAP32[$112>>2]|0;
-    $115 = $113;
-   }
-   $114 = ($115|0)>(0);
-   if ($114) {
-    $116 = $10;
-    $117 = HEAP32[$116>>2]|0;
-    $118 = $117 >>> 11;
-    $119 = $118 & 8;
-    $120 = ($119|0)!=(0);
-    $121 = $10;
-    $122 = ((($121)) + 12|0);
-    if ($120) {
-     $140 = $122;
-    } else {
-     $123 = ((($122)) + 8|0);
-     $124 = HEAP32[$123>>2]|0;
-     $140 = $124;
-    }
-    $125 = $10;
-    $126 = HEAP32[$125>>2]|0;
-    $127 = $126 >>> 11;
-    $128 = $127 & 8;
-    $129 = ($128|0)!=(0);
-    $130 = $10;
-    if ($129) {
-     $131 = HEAP32[$130>>2]|0;
-     $132 = $131 >>> 11;
-     $133 = $132 & 496;
-     $134 = $133 >> 4;
-     $138 = $134;
-    } else {
-     $135 = ((($130)) + 12|0);
-     $136 = HEAP32[$135>>2]|0;
-     $138 = $136;
-    }
-    $137 = (($138) - 1)|0;
-    $139 = (($140) + ($137)|0);
-    $141 = HEAP8[$139>>0]|0;
-    $142 = $141 << 24 >> 24;
-    $143 = ($142|0)==(13);
-    if ($143) {
-     $144 = $10;
-     $145 = HEAP32[$144>>2]|0;
-     $146 = $145 >>> 11;
-     $147 = $146 & 8;
-     $148 = ($147|0)!=(0);
-     $149 = $10;
-     $150 = HEAP32[$149>>2]|0;
-     $151 = $150 >>> 11;
-     $152 = $151 & 8;
-     $153 = ($152|0)!=(0);
-     $154 = $10;
-     if ($148) {
-      if ($153) {
-       $155 = HEAP32[$154>>2]|0;
-       $156 = $155 >>> 11;
-       $157 = $156 & 496;
-       $158 = $157 >> 4;
-       $162 = $158;
-      } else {
-       $159 = ((($154)) + 12|0);
-       $160 = HEAP32[$159>>2]|0;
-       $162 = $160;
-      }
-      $161 = (($162) - 1)|0;
-      $12 = $161;
-      $163 = $10;
-      $164 = HEAP32[$163>>2]|0;
-      $165 = $164 >>> 11;
-      $166 = $165 & -497;
-      $167 = HEAP32[$163>>2]|0;
-      $168 = $166 & 2097151;
-      $169 = $168 << 11;
-      $170 = $167 & 2047;
-      $171 = $170 | $169;
-      HEAP32[$163>>2] = $171;
-      $172 = $12;
-      $173 = $172 << 4;
-      $174 = $10;
-      $175 = HEAP32[$174>>2]|0;
-      $176 = $175 >>> 11;
-      $177 = $176 | $173;
-      $178 = HEAP32[$174>>2]|0;
-      $179 = $177 & 2097151;
-      $180 = $179 << 11;
-      $181 = $178 & 2047;
-      $182 = $181 | $180;
-      HEAP32[$174>>2] = $182;
-      break;
-     } else {
-      if ($153) {
-       $183 = HEAP32[$154>>2]|0;
-       $184 = $183 >>> 11;
-       $185 = $184 & 496;
-       $186 = $185 >> 4;
-       $190 = $186;
-      } else {
-       $187 = ((($154)) + 12|0);
-       $188 = HEAP32[$187>>2]|0;
-       $190 = $188;
-      }
-      $189 = (($190) - 1)|0;
-      $191 = $10;
-      $192 = ((($191)) + 12|0);
-      HEAP32[$192>>2] = $189;
-      break;
-     }
-    }
-   }
-  } else {
-   $193 = ((($58)) + 12|0);
-   if ($57) {
-    $199 = $193;
-   } else {
-    $194 = ((($193)) + 8|0);
-    $195 = HEAP32[$194>>2]|0;
-    $199 = $195;
-   }
-   $196 = $9;
-   $197 = (($196) - 1)|0;
-   $198 = (($199) + ($197)|0);
-   $200 = HEAP8[$198>>0]|0;
-   $201 = $200 << 24 >> 24;
-   $202 = ($201|0)==(13);
-   if (!($202)) {
-    _mrb_nil_value_283($0);
-    STACKTOP = sp;return;
-   }
-   $203 = $10;
-   $204 = HEAP32[$203>>2]|0;
-   $205 = $204 >>> 11;
-   $206 = $205 & 8;
-   $207 = ($206|0)!=(0);
-   $208 = $10;
-   $209 = HEAP32[$208>>2]|0;
-   $210 = $209 >>> 11;
-   $211 = $210 & 8;
-   $212 = ($211|0)!=(0);
-   $213 = $10;
-   if ($207) {
-    if ($212) {
-     $214 = HEAP32[$213>>2]|0;
-     $215 = $214 >>> 11;
-     $216 = $215 & 496;
-     $217 = $216 >> 4;
-     $221 = $217;
-    } else {
-     $218 = ((($213)) + 12|0);
-     $219 = HEAP32[$218>>2]|0;
-     $221 = $219;
-    }
-    $220 = (($221) - 1)|0;
-    $13 = $220;
-    $222 = $10;
-    $223 = HEAP32[$222>>2]|0;
-    $224 = $223 >>> 11;
-    $225 = $224 & -497;
-    $226 = HEAP32[$222>>2]|0;
-    $227 = $225 & 2097151;
-    $228 = $227 << 11;
-    $229 = $226 & 2047;
-    $230 = $229 | $228;
-    HEAP32[$222>>2] = $230;
-    $231 = $13;
-    $232 = $231 << 4;
-    $233 = $10;
-    $234 = HEAP32[$233>>2]|0;
-    $235 = $234 >>> 11;
-    $236 = $235 | $232;
-    $237 = HEAP32[$233>>2]|0;
-    $238 = $236 & 2097151;
-    $239 = $238 << 11;
-    $240 = $237 & 2047;
-    $241 = $240 | $239;
-    HEAP32[$233>>2] = $241;
-    break;
-   } else {
-    if ($212) {
-     $242 = HEAP32[$213>>2]|0;
-     $243 = $242 >>> 11;
-     $244 = $243 & 496;
-     $245 = $244 >> 4;
-     $249 = $245;
-    } else {
-     $246 = ((($213)) + 12|0);
-     $247 = HEAP32[$246>>2]|0;
-     $249 = $247;
-    }
-    $248 = (($249) - 1)|0;
-    $250 = $10;
-    $251 = ((($250)) + 12|0);
-    HEAP32[$251>>2] = $248;
-    break;
-   }
-  }
- } while(0);
- $252 = $10;
- $253 = HEAP32[$252>>2]|0;
- $254 = $253 >>> 11;
- $255 = $254 & 8;
- $256 = ($255|0)!=(0);
- $257 = $10;
- $258 = ((($257)) + 12|0);
- if ($256) {
-  $274 = $258;
- } else {
-  $259 = ((($258)) + 8|0);
-  $260 = HEAP32[$259>>2]|0;
-  $274 = $260;
- }
- $261 = $10;
- $262 = HEAP32[$261>>2]|0;
- $263 = $262 >>> 11;
- $264 = $263 & 8;
- $265 = ($264|0)!=(0);
- $266 = $10;
- if ($265) {
-  $267 = HEAP32[$266>>2]|0;
-  $268 = $267 >>> 11;
-  $269 = $268 & 496;
-  $270 = $269 >> 4;
-  $275 = $270;
- } else {
-  $271 = ((($266)) + 12|0);
-  $272 = HEAP32[$271>>2]|0;
-  $275 = $272;
- }
- $273 = (($274) + ($275)|0);
- HEAP8[$273>>0] = 0;
- ;HEAP32[$0>>2]=HEAP32[$2>>2]|0;HEAP32[$0+4>>2]=HEAP32[$2+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_str_chop($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);
- $$byval_copy1 = sp + 40|0;
- $$byval_copy = sp + 32|0;
- $4 = sp + 16|0;
- $5 = sp + 8|0;
- $6 = sp;
- $3 = $1;
- $7 = $3;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
- _mrb_str_dup($5,$7,$$byval_copy);
- ;HEAP32[$4>>2]=HEAP32[$5>>2]|0;HEAP32[$4+4>>2]=HEAP32[$5+4>>2]|0;
- $8 = $3;
- ;HEAP32[$$byval_copy1>>2]=HEAP32[$4>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$4+4>>2]|0;
- _mrb_str_chop_bang($6,$8,$$byval_copy1);
- ;HEAP32[$0>>2]=HEAP32[$4>>2]|0;HEAP32[$0+4>>2]=HEAP32[$4+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_str_chop_bang($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;
- var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0;
- var $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0;
- var $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0;
- var $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0;
- var $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0;
- var $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0;
- var $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $or$cond = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $3 = $1;
- $11 = HEAP32[$2>>2]|0;
- $4 = $11;
- $12 = $3;
- $13 = $4;
- _mrb_str_modify($12,$13);
- $14 = $4;
- $15 = HEAP32[$14>>2]|0;
- $16 = $15 >>> 11;
- $17 = $16 & 8;
- $18 = ($17|0)!=(0);
- $19 = $4;
- if ($18) {
-  $20 = HEAP32[$19>>2]|0;
-  $21 = $20 >>> 11;
-  $22 = $21 & 496;
-  $23 = $22 >> 4;
-  $27 = $23;
- } else {
-  $24 = ((($19)) + 12|0);
-  $25 = HEAP32[$24>>2]|0;
-  $27 = $25;
- }
- $26 = ($27|0)>(0);
- if (!($26)) {
-  _mrb_nil_value_283($0);
-  STACKTOP = sp;return;
- }
- $28 = $4;
- $29 = HEAP32[$28>>2]|0;
- $30 = $29 >>> 11;
- $31 = $30 & 8;
- $32 = ($31|0)!=(0);
- $33 = $4;
- $34 = ((($33)) + 12|0);
- if ($32) {
-  $37 = $34;
- } else {
-  $35 = ((($34)) + 8|0);
-  $36 = HEAP32[$35>>2]|0;
-  $37 = $36;
- }
- $6 = $37;
- $38 = $6;
- $7 = $38;
- $39 = $7;
- $40 = $4;
- $41 = HEAP32[$40>>2]|0;
- $42 = $41 >>> 11;
- $43 = $42 & 8;
- $44 = ($43|0)!=(0);
- $45 = $4;
- if ($44) {
-  $46 = HEAP32[$45>>2]|0;
-  $47 = $46 >>> 11;
-  $48 = $47 & 496;
-  $49 = $48 >> 4;
-  $53 = $49;
- } else {
-  $50 = ((($45)) + 12|0);
-  $51 = HEAP32[$50>>2]|0;
-  $53 = $51;
- }
- $52 = (($39) + ($53)|0);
- $8 = $52;
- while(1) {
-  $54 = $7;
-  $55 = $8;
-  $56 = ($54>>>0)<($55>>>0);
-  if (!($56)) {
-   break;
-  }
-  $57 = $7;
-  $58 = $8;
-  $59 = (_utf8len($57,$58)|0);
-  $9 = $59;
-  $60 = $7;
-  $61 = $9;
-  $62 = (($60) + ($61)|0);
-  $63 = $8;
-  $64 = ($62>>>0)>=($63>>>0);
-  if ($64) {
-   break;
-  }
-  $65 = $9;
-  $66 = $7;
-  $67 = (($66) + ($65)|0);
-  $7 = $67;
- }
- $68 = $7;
- $69 = $6;
- $70 = $68;
- $71 = $69;
- $72 = (($70) - ($71))|0;
- $5 = $72;
- $73 = $4;
- $74 = HEAP32[$73>>2]|0;
- $75 = $74 >>> 11;
- $76 = $75 & 8;
- $77 = ($76|0)!=(0);
- $78 = $4;
- $79 = ((($78)) + 12|0);
- if ($77) {
-  $84 = $79;
- } else {
-  $80 = ((($79)) + 8|0);
-  $81 = HEAP32[$80>>2]|0;
-  $84 = $81;
- }
- $82 = $5;
- $83 = (($84) + ($82)|0);
- $85 = HEAP8[$83>>0]|0;
- $86 = $85 << 24 >> 24;
- $87 = ($86|0)==(10);
- $88 = $5;
- $89 = ($88|0)>(0);
- $or$cond = $87 & $89;
- if ($or$cond) {
-  $90 = $4;
-  $91 = HEAP32[$90>>2]|0;
-  $92 = $91 >>> 11;
-  $93 = $92 & 8;
-  $94 = ($93|0)!=(0);
-  $95 = $4;
-  $96 = ((($95)) + 12|0);
-  if ($94) {
-   $102 = $96;
-  } else {
-   $97 = ((($96)) + 8|0);
-   $98 = HEAP32[$97>>2]|0;
-   $102 = $98;
-  }
-  $99 = $5;
-  $100 = (($99) - 1)|0;
-  $101 = (($102) + ($100)|0);
-  $103 = HEAP8[$101>>0]|0;
-  $104 = $103 << 24 >> 24;
-  $105 = ($104|0)==(13);
-  if ($105) {
-   $106 = $5;
-   $107 = (($106) + -1)|0;
-   $5 = $107;
-  }
- }
- $108 = $4;
- $109 = HEAP32[$108>>2]|0;
- $110 = $109 >>> 11;
- $111 = $110 & 8;
- $112 = ($111|0)!=(0);
- $113 = $5;
- if ($112) {
-  $10 = $113;
-  $114 = $4;
-  $115 = HEAP32[$114>>2]|0;
-  $116 = $115 >>> 11;
-  $117 = $116 & -497;
-  $118 = HEAP32[$114>>2]|0;
-  $119 = $117 & 2097151;
-  $120 = $119 << 11;
-  $121 = $118 & 2047;
-  $122 = $121 | $120;
-  HEAP32[$114>>2] = $122;
-  $123 = $10;
-  $124 = $123 << 4;
-  $125 = $4;
-  $126 = HEAP32[$125>>2]|0;
-  $127 = $126 >>> 11;
-  $128 = $127 | $124;
-  $129 = HEAP32[$125>>2]|0;
-  $130 = $128 & 2097151;
-  $131 = $130 << 11;
-  $132 = $129 & 2047;
-  $133 = $132 | $131;
-  HEAP32[$125>>2] = $133;
- } else {
-  $134 = $4;
-  $135 = ((($134)) + 12|0);
-  HEAP32[$135>>2] = $113;
- }
- $136 = $4;
- $137 = HEAP32[$136>>2]|0;
- $138 = $137 >>> 11;
- $139 = $138 & 8;
- $140 = ($139|0)!=(0);
- $141 = $4;
- $142 = ((($141)) + 12|0);
- if ($140) {
-  $147 = $142;
- } else {
-  $143 = ((($142)) + 8|0);
-  $144 = HEAP32[$143>>2]|0;
-  $147 = $144;
- }
- $145 = $5;
- $146 = (($147) + ($145)|0);
- HEAP8[$146>>0] = 0;
- ;HEAP32[$0>>2]=HEAP32[$2>>2]|0;HEAP32[$0+4>>2]=HEAP32[$2+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_str_downcase($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);
- $$byval_copy1 = sp + 40|0;
- $$byval_copy = sp + 32|0;
- $4 = sp + 16|0;
- $5 = sp + 8|0;
- $6 = sp;
- $3 = $1;
- $7 = $3;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
- _mrb_str_dup($5,$7,$$byval_copy);
- ;HEAP32[$4>>2]=HEAP32[$5>>2]|0;HEAP32[$4+4>>2]=HEAP32[$5+4>>2]|0;
- $8 = $3;
- ;HEAP32[$$byval_copy1>>2]=HEAP32[$4>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$4+4>>2]|0;
- _mrb_str_downcase_bang($6,$8,$$byval_copy1);
- ;HEAP32[$0>>2]=HEAP32[$4>>2]|0;HEAP32[$0+4>>2]=HEAP32[$4+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_str_downcase_bang($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;
- var $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0;
- var $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0;
- var $66 = 0, $67 = 0, $68 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $3 = $1;
- $6 = 0;
- $8 = HEAP32[$2>>2]|0;
- $7 = $8;
- $9 = $3;
- $10 = $7;
- _mrb_str_modify($9,$10);
- $11 = $7;
- $12 = HEAP32[$11>>2]|0;
- $13 = $12 >>> 11;
- $14 = $13 & 8;
- $15 = ($14|0)!=(0);
- $16 = $7;
- $17 = ((($16)) + 12|0);
- if ($15) {
-  $20 = $17;
- } else {
-  $18 = ((($17)) + 8|0);
-  $19 = HEAP32[$18>>2]|0;
-  $20 = $19;
- }
- $4 = $20;
- $21 = $7;
- $22 = HEAP32[$21>>2]|0;
- $23 = $22 >>> 11;
- $24 = $23 & 8;
- $25 = ($24|0)!=(0);
- $26 = $7;
- $27 = ((($26)) + 12|0);
- if ($25) {
-  $43 = $27;
- } else {
-  $28 = ((($27)) + 8|0);
-  $29 = HEAP32[$28>>2]|0;
-  $43 = $29;
- }
- $30 = $7;
- $31 = HEAP32[$30>>2]|0;
- $32 = $31 >>> 11;
- $33 = $32 & 8;
- $34 = ($33|0)!=(0);
- $35 = $7;
- if ($34) {
-  $36 = HEAP32[$35>>2]|0;
-  $37 = $36 >>> 11;
-  $38 = $37 & 496;
-  $39 = $38 >> 4;
-  $44 = $39;
- } else {
-  $40 = ((($35)) + 12|0);
-  $41 = HEAP32[$40>>2]|0;
-  $44 = $41;
- }
- $42 = (($43) + ($44)|0);
- $5 = $42;
- while(1) {
-  $45 = $4;
-  $46 = $5;
-  $47 = ($45>>>0)<($46>>>0);
-  if (!($47)) {
-   break;
-  }
-  $48 = $4;
-  $49 = HEAP8[$48>>0]|0;
-  $50 = $49 << 24 >> 24;
-  $51 = (($50) - 65)|0;
-  $52 = ($51>>>0)<(26);
-  if ($52) {
-   $53 = $4;
-   $54 = HEAP8[$53>>0]|0;
-   $55 = $54 << 24 >> 24;
-   $56 = (($55) - 65)|0;
-   $57 = ($56>>>0)<(26);
-   $58 = $4;
-   $59 = HEAP8[$58>>0]|0;
-   $60 = $59 << 24 >> 24;
-   $61 = $60 | 32;
-   $62 = $57 ? $61 : $60;
-   $63 = $62&255;
-   $64 = $4;
-   HEAP8[$64>>0] = $63;
-   $6 = 1;
-  }
-  $65 = $4;
-  $66 = ((($65)) + 1|0);
-  $4 = $66;
- }
- $67 = $6;
- $68 = ($67<<24>>24)!=(0);
- if ($68) {
-  ;HEAP32[$0>>2]=HEAP32[$2>>2]|0;HEAP32[$0+4>>2]=HEAP32[$2+4>>2]|0;
-  STACKTOP = sp;return;
- } else {
-  _mrb_nil_value_283($0);
-  STACKTOP = sp;return;
- }
-}
-function _mrb_str_empty_p($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0;
- var sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $1;
- $5 = HEAP32[$2>>2]|0;
- $4 = $5;
- $6 = $4;
- $7 = HEAP32[$6>>2]|0;
- $8 = $7 >>> 11;
- $9 = $8 & 8;
- $10 = ($9|0)!=(0);
- $11 = $4;
- if ($10) {
-  $12 = HEAP32[$11>>2]|0;
-  $13 = $12 >>> 11;
-  $14 = $13 & 496;
-  $15 = $14 >> 4;
-  $19 = $15;
- } else {
-  $16 = ((($11)) + 12|0);
-  $17 = HEAP32[$16>>2]|0;
-  $19 = $17;
- }
- $18 = ($19|0)==(0);
- $20 = $18&1;
- $21 = $20&255;
- _mrb_bool_value_340($0,$21);
- STACKTOP = sp;return;
-}
-function _mrb_str_eql($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);
- $$byval_copy1 = sp + 32|0;
- $$byval_copy = sp + 24|0;
- $vararg_buffer = sp;
- $4 = sp + 8|0;
- $3 = $1;
- $6 = $3;
- HEAP32[$vararg_buffer>>2] = $4;
- (_mrb_get_args($6,69199,$vararg_buffer)|0);
- $7 = ((($4)) + 4|0);
- $8 = HEAP32[$7>>2]|0;
- $9 = ($8|0)==(16);
- if (!($9)) {
-  $15 = 0;
-  $14 = $15&1;
-  $16 = $14&255;
-  $5 = $16;
-  $17 = $5;
-  _mrb_bool_value_340($0,$17);
-  STACKTOP = sp;return;
- }
- $10 = $3;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
- ;HEAP32[$$byval_copy1>>2]=HEAP32[$4>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$4+4>>2]|0;
- $11 = (_str_eql($10,$$byval_copy,$$byval_copy1)|0);
- $12 = $11&255;
- $13 = ($12|0)!=(0);
- $15 = $13;
- $14 = $15&1;
- $16 = $14&255;
- $5 = $16;
- $17 = $5;
- _mrb_bool_value_340($0,$17);
- STACKTOP = sp;return;
-}
-function _mrb_str_hash_m($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $$byval_copy = sp + 8|0;
- $3 = $1;
- $5 = $3;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
- $6 = (_mrb_str_hash($5,$$byval_copy)|0);
- $4 = $6;
- $7 = $4;
- _mrb_fixnum_value_290($0,$7);
- STACKTOP = sp;return;
-}
-function _mrb_str_include($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $$byval_copy2 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0;
- var $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0;
- var $45 = 0, $46 = 0, $47 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);
- $$byval_copy2 = sp + 48|0;
- $$byval_copy1 = sp + 40|0;
- $$byval_copy = sp + 32|0;
- $vararg_buffer = sp;
- $5 = sp + 16|0;
- $7 = sp + 8|0;
- $3 = $1;
- $8 = $3;
- HEAP32[$vararg_buffer>>2] = $5;
- (_mrb_get_args($8,69199,$vararg_buffer)|0);
- $9 = ((($5)) + 4|0);
- $10 = HEAP32[$9>>2]|0;
- $11 = ($10|0)==(3);
- if (!($11)) {
-  $40 = $3;
-  ;HEAP32[$$byval_copy>>2]=HEAP32[$5>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$5+4>>2]|0;
-  _mrb_str_to_str($7,$40,$$byval_copy);
-  ;HEAP32[$5>>2]=HEAP32[$7>>2]|0;HEAP32[$5+4>>2]=HEAP32[$7+4>>2]|0;
-  $41 = $3;
-  ;HEAP32[$$byval_copy1>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$2+4>>2]|0;
-  ;HEAP32[$$byval_copy2>>2]=HEAP32[$5>>2]|0;HEAP32[$$byval_copy2+4>>2]=HEAP32[$5+4>>2]|0;
-  $42 = (_str_index($41,$$byval_copy1,$$byval_copy2,0)|0);
-  $4 = $42;
-  $43 = $4;
-  $44 = ($43|0)!=(-1);
-  $45 = $44&1;
-  $46 = $45&255;
-  $6 = $46;
-  $47 = $6;
-  _mrb_bool_value_340($0,$47);
-  STACKTOP = sp;return;
- }
- $12 = HEAP32[$2>>2]|0;
- $13 = HEAP32[$12>>2]|0;
- $14 = $13 >>> 11;
- $15 = $14 & 8;
- $16 = ($15|0)!=(0);
- $17 = HEAP32[$2>>2]|0;
- $18 = ((($17)) + 12|0);
- if ($16) {
-  $34 = $18;
- } else {
-  $19 = ((($18)) + 8|0);
-  $20 = HEAP32[$19>>2]|0;
-  $34 = $20;
- }
- $21 = HEAP32[$5>>2]|0;
- $22 = HEAP32[$2>>2]|0;
- $23 = HEAP32[$22>>2]|0;
- $24 = $23 >>> 11;
- $25 = $24 & 8;
- $26 = ($25|0)!=(0);
- $27 = HEAP32[$2>>2]|0;
- if ($26) {
-  $28 = HEAP32[$27>>2]|0;
-  $29 = $28 >>> 11;
-  $30 = $29 & 496;
-  $31 = $30 >> 4;
-  $35 = $31;
- } else {
-  $32 = ((($27)) + 12|0);
-  $33 = HEAP32[$32>>2]|0;
-  $35 = $33;
- }
- $36 = (_memchr($34,$21,$35)|0);
- $37 = ($36|0)!=(0|0);
- $38 = $37&1;
- $39 = $38&255;
- $6 = $39;
- $47 = $6;
- _mrb_bool_value_340($0,$47);
- STACKTOP = sp;return;
-}
-function _mrb_str_index($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $$byval_copy5 = 0, $$byval_copy6 = 0, $$byval_copy7 = 0, $$byval_copy8 = 0, $$byval_copy9 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0;
- var $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0;
- var $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0;
- var $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $7 = 0, $8 = 0, $9 = 0, $cond = 0, $vararg_buffer = 0, $vararg_buffer2 = 0, $vararg_ptr1 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 128|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(128|0);
- $$byval_copy9 = sp + 112|0;
- $$byval_copy8 = sp + 104|0;
- $$byval_copy7 = sp + 96|0;
- $$byval_copy6 = sp + 88|0;
- $$byval_copy5 = sp + 80|0;
- $$byval_copy = sp + 72|0;
- $vararg_buffer2 = sp + 8|0;
- $vararg_buffer = sp;
- $4 = sp + 60|0;
- $5 = sp + 56|0;
- $6 = sp + 48|0;
- $9 = sp + 32|0;
- $10 = sp + 24|0;
- $11 = sp + 16|0;
- $3 = $1;
- $12 = $3;
- HEAP32[$vararg_buffer>>2] = $4;
- $vararg_ptr1 = ((($vararg_buffer)) + 4|0);
- HEAP32[$vararg_ptr1>>2] = $5;
- (_mrb_get_args($12,68856,$vararg_buffer)|0);
- $13 = HEAP32[$5>>2]|0;
- $14 = ($13|0)==(2);
- do {
-  if ($14) {
-   $15 = HEAP32[$4>>2]|0;
-   $16 = ((($15)) + 8|0);
-   $17 = HEAP32[$16>>2]|0;
-   $7 = $17;
-   $18 = HEAP32[$4>>2]|0;
-   ;HEAP32[$6>>2]=HEAP32[$18>>2]|0;HEAP32[$6+4>>2]=HEAP32[$18+4>>2]|0;
-  } else {
-   $7 = 0;
-   $19 = HEAP32[$5>>2]|0;
-   $20 = ($19|0)>(0);
-   if ($20) {
-    $21 = HEAP32[$4>>2]|0;
-    ;HEAP32[$6>>2]=HEAP32[$21>>2]|0;HEAP32[$6+4>>2]=HEAP32[$21+4>>2]|0;
-    break;
-   } else {
-    _mrb_nil_value_283($9);
-    ;HEAP32[$6>>2]=HEAP32[$9>>2]|0;HEAP32[$6+4>>2]=HEAP32[$9+4>>2]|0;
-    break;
-   }
-  }
- } while(0);
- $22 = $3;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$6>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$6+4>>2]|0;
- _mrb_regexp_check($22,$$byval_copy);
- ;HEAP32[$$byval_copy5>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy5+4>>2]=HEAP32[$2+4>>2]|0;
- $23 = (_utf8_strlen($$byval_copy5,-1)|0);
- $8 = $23;
- $24 = $7;
- $25 = ($24|0)<(0);
- if ($25) {
-  $26 = $8;
-  $27 = $7;
-  $28 = (($27) + ($26))|0;
-  $7 = $28;
-  $29 = $7;
-  $30 = ($29|0)<(0);
-  if ($30) {
-   _mrb_nil_value_283($0);
-   STACKTOP = sp;return;
-  }
- }
- $31 = $7;
- $32 = $8;
- $33 = ($31|0)>=($32|0);
- if ($33) {
-  _mrb_nil_value_283($0);
-  STACKTOP = sp;return;
- }
- $34 = $7;
- ;HEAP32[$$byval_copy6>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy6+4>>2]=HEAP32[$2+4>>2]|0;
- $35 = (_chars2bytes($$byval_copy6,0,$34)|0);
- $7 = $35;
- $36 = ((($6)) + 4|0);
- $37 = HEAP32[$36>>2]|0;
- $cond = ($37|0)==(16);
- if (!($cond)) {
-  $38 = $3;
-  ;HEAP32[$$byval_copy7>>2]=HEAP32[$6>>2]|0;HEAP32[$$byval_copy7+4>>2]=HEAP32[$6+4>>2]|0;
-  _mrb_check_string_type($11,$38,$$byval_copy7);
-  ;HEAP32[$10>>2]=HEAP32[$11>>2]|0;HEAP32[$10+4>>2]=HEAP32[$11+4>>2]|0;
-  $39 = ((($10)) + 4|0);
-  $40 = HEAP32[$39>>2]|0;
-  $41 = ($40|0)==(0);
-  if ($41) {
-   $42 = HEAP32[$10>>2]|0;
-   $43 = ($42|0)!=(0);
-   if (!($43)) {
-    $44 = $3;
-    $45 = $3;
-    $46 = (_mrb_class_get($45,69204)|0);
-    ;HEAP8[$vararg_buffer2>>0]=HEAP8[$6>>0]|0;HEAP8[$vararg_buffer2+1>>0]=HEAP8[$6+1>>0]|0;HEAP8[$vararg_buffer2+2>>0]=HEAP8[$6+2>>0]|0;HEAP8[$vararg_buffer2+3>>0]=HEAP8[$6+3>>0]|0;HEAP8[$vararg_buffer2+4>>0]=HEAP8[$6+4>>0]|0;HEAP8[$vararg_buffer2+5>>0]=HEAP8[$6+5>>0]|0;HEAP8[$vararg_buffer2+6>>0]=HEAP8[$6+6>>0]|0;HEAP8[$vararg_buffer2+7>>0]=HEAP8[$6+7>>0]|0;
-    _mrb_raisef($44,$46,56338,$vararg_buffer2);
-    // unreachable;
-   }
-  }
-  ;HEAP32[$6>>2]=HEAP32[$10>>2]|0;HEAP32[$6+4>>2]=HEAP32[$10+4>>2]|0;
- }
- $47 = $3;
- $48 = $7;
- ;HEAP32[$$byval_copy8>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy8+4>>2]=HEAP32[$2+4>>2]|0;
- ;HEAP32[$$byval_copy9>>2]=HEAP32[$6>>2]|0;HEAP32[$$byval_copy9+4>>2]=HEAP32[$6+4>>2]|0;
- $49 = (_str_index($47,$$byval_copy8,$$byval_copy9,$48)|0);
- $7 = $49;
- $50 = $7;
- $51 = ($50|0)==(-1);
- if ($51) {
-  _mrb_nil_value_283($0);
-  STACKTOP = sp;return;
- }
- $52 = HEAP32[$2>>2]|0;
- $53 = HEAP32[$52>>2]|0;
- $54 = $53 >>> 11;
- $55 = $54 & 8;
- $56 = ($55|0)!=(0);
- $57 = HEAP32[$2>>2]|0;
- $58 = ((($57)) + 12|0);
- if ($56) {
-  $62 = $58;
- } else {
-  $59 = ((($58)) + 8|0);
-  $60 = HEAP32[$59>>2]|0;
-  $62 = $60;
- }
- $61 = $7;
- $63 = (_bytes2chars($62,$61)|0);
- $7 = $63;
- $64 = $7;
- _mrb_fixnum_value_290($0,$64);
- STACKTOP = sp;return;
-}
-function _mrb_str_init($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $vararg_buffer = sp;
- $4 = sp + 16|0;
- $5 = sp + 8|0;
- $3 = $1;
- $6 = $3;
- HEAP32[$vararg_buffer>>2] = $4;
- $7 = (_mrb_get_args($6,56364,$vararg_buffer)|0);
- $8 = ($7|0)==(1);
- if ($8) {
-  $9 = $3;
-  $10 = HEAP32[$2>>2]|0;
-  $11 = HEAP32[$4>>2]|0;
-  _str_replace($5,$9,$10,$11);
- }
- ;HEAP32[$0>>2]=HEAP32[$2>>2]|0;HEAP32[$0+4>>2]=HEAP32[$2+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_str_replace($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $vararg_buffer = sp;
- $4 = sp + 8|0;
- $3 = $1;
- $5 = $3;
- HEAP32[$vararg_buffer>>2] = $4;
- (_mrb_get_args($5,56362,$vararg_buffer)|0);
- $6 = $3;
- $7 = HEAP32[$2>>2]|0;
- $8 = HEAP32[$4>>2]|0;
- _str_replace($0,$6,$7,$8);
- STACKTOP = sp;return;
-}
-function _mrb_str_size($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $$byval_copy = sp + 8|0;
- $3 = $1;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
- $5 = (_utf8_strlen($$byval_copy,-1)|0);
- $4 = $5;
- $6 = $4;
- _mrb_fixnum_value_290($0,$6);
- STACKTOP = sp;return;
-}
-function _mrb_str_reverse($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);
- $$byval_copy1 = sp + 32|0;
- $$byval_copy = sp + 24|0;
- $4 = sp + 8|0;
- $5 = sp;
- $3 = $1;
- $6 = $3;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
- _mrb_str_dup($4,$6,$$byval_copy);
- $7 = $3;
- ;HEAP32[$$byval_copy1>>2]=HEAP32[$4>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$4+4>>2]|0;
- _mrb_str_reverse_bang($5,$7,$$byval_copy1);
- ;HEAP32[$0>>2]=HEAP32[$4>>2]|0;HEAP32[$0+4>>2]=HEAP32[$4+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_str_reverse_bang($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0;
- var $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0;
- var $135 = 0, $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0, $152 = 0;
- var $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0;
- var $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0;
- var $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0;
- var $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0;
- var $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);
- $$byval_copy = sp + 48|0;
- $3 = $1;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
- $15 = (_utf8_strlen($$byval_copy,-1)|0);
- $4 = $15;
- $16 = HEAP32[$2>>2]|0;
- $17 = HEAP32[$16>>2]|0;
- $18 = $17 >>> 11;
- $19 = $18 & 8;
- $20 = ($19|0)!=(0);
- $21 = HEAP32[$2>>2]|0;
- if ($20) {
-  $22 = HEAP32[$21>>2]|0;
-  $23 = $22 >>> 11;
-  $24 = $23 & 496;
-  $25 = $24 >> 4;
-  $28 = $25;
- } else {
-  $26 = ((($21)) + 12|0);
-  $27 = HEAP32[$26>>2]|0;
-  $28 = $27;
- }
- $5 = $28;
- $29 = $4;
- $30 = $5;
- $31 = ($29|0)==($30|0);
- if ($31) {
-  $98 = HEAP32[$2>>2]|0;
-  $11 = $98;
-  $99 = $3;
-  $100 = $11;
-  _mrb_str_modify($99,$100);
-  $101 = $11;
-  $102 = HEAP32[$101>>2]|0;
-  $103 = $102 >>> 11;
-  $104 = $103 & 8;
-  $105 = ($104|0)!=(0);
-  $106 = $11;
-  if ($105) {
-   $107 = HEAP32[$106>>2]|0;
-   $108 = $107 >>> 11;
-   $109 = $108 & 496;
-   $110 = $109 >> 4;
-   $114 = $110;
-  } else {
-   $111 = ((($106)) + 12|0);
-   $112 = HEAP32[$111>>2]|0;
-   $114 = $112;
-  }
-  $113 = ($114|0)>(1);
-  L11: do {
-   if ($113) {
-    $115 = $11;
-    $116 = HEAP32[$115>>2]|0;
-    $117 = $116 >>> 11;
-    $118 = $117 & 8;
-    $119 = ($118|0)!=(0);
-    $120 = $11;
-    $121 = ((($120)) + 12|0);
-    if ($119) {
-     $124 = $121;
-    } else {
-     $122 = ((($121)) + 8|0);
-     $123 = HEAP32[$122>>2]|0;
-     $124 = $123;
-    }
-    $12 = $124;
-    $125 = $12;
-    $126 = $11;
-    $127 = HEAP32[$126>>2]|0;
-    $128 = $127 >>> 11;
-    $129 = $128 & 8;
-    $130 = ($129|0)!=(0);
-    $131 = $11;
-    if ($130) {
-     $132 = HEAP32[$131>>2]|0;
-     $133 = $132 >>> 11;
-     $134 = $133 & 496;
-     $135 = $134 >> 4;
-     $139 = $135;
-    } else {
-     $136 = ((($131)) + 12|0);
-     $137 = HEAP32[$136>>2]|0;
-     $139 = $137;
-    }
-    $138 = (($125) + ($139)|0);
-    $140 = ((($138)) + -1|0);
-    $13 = $140;
-    while(1) {
-     $141 = $12;
-     $142 = $13;
-     $143 = ($141>>>0)<($142>>>0);
-     if (!($143)) {
-      break L11;
-     }
-     $144 = $12;
-     $145 = HEAP8[$144>>0]|0;
-     $14 = $145;
-     $146 = $13;
-     $147 = HEAP8[$146>>0]|0;
-     $148 = $12;
-     $149 = ((($148)) + 1|0);
-     $12 = $149;
-     HEAP8[$148>>0] = $147;
-     $150 = $14;
-     $151 = $13;
-     $152 = ((($151)) + -1|0);
-     $13 = $152;
-     HEAP8[$151>>0] = $150;
-    }
-   }
-  } while(0);
-  ;HEAP32[$0>>2]=HEAP32[$2>>2]|0;HEAP32[$0+4>>2]=HEAP32[$2+4>>2]|0;
-  STACKTOP = sp;return;
- }
- $32 = $4;
- $33 = ($32|0)>(1);
- if ($33) {
-  $34 = $3;
-  $35 = HEAP32[$2>>2]|0;
-  _mrb_str_modify($34,$35);
-  $36 = HEAP32[$2>>2]|0;
-  $37 = HEAP32[$36>>2]|0;
-  $38 = $37 >>> 11;
-  $39 = $38 & 8;
-  $40 = ($39|0)!=(0);
-  $41 = HEAP32[$2>>2]|0;
-  if ($40) {
-   $42 = HEAP32[$41>>2]|0;
-   $43 = $42 >>> 11;
-   $44 = $43 & 496;
-   $45 = $44 >> 4;
-   $48 = $45;
-  } else {
-   $46 = ((($41)) + 12|0);
-   $47 = HEAP32[$46>>2]|0;
-   $48 = $47;
-  }
-  $5 = $48;
-  $49 = $3;
-  $50 = $5;
-  $51 = (_mrb_malloc($49,$50)|0);
-  $6 = $51;
-  $52 = $6;
-  $7 = $52;
-  $53 = $6;
-  $54 = $5;
-  $55 = (($53) + ($54)|0);
-  $8 = $55;
-  $56 = $6;
-  $57 = HEAP32[$2>>2]|0;
-  $58 = HEAP32[$57>>2]|0;
-  $59 = $58 >>> 11;
-  $60 = $59 & 8;
-  $61 = ($60|0)!=(0);
-  $62 = HEAP32[$2>>2]|0;
-  $63 = ((($62)) + 12|0);
-  if ($61) {
-   $67 = $63;
-  } else {
-   $64 = ((($63)) + 8|0);
-   $65 = HEAP32[$64>>2]|0;
-   $67 = $65;
-  }
-  $66 = $5;
-  _memcpy(($56|0),($67|0),($66|0))|0;
-  $68 = HEAP32[$2>>2]|0;
-  $69 = HEAP32[$68>>2]|0;
-  $70 = $69 >>> 11;
-  $71 = $70 & 8;
-  $72 = ($71|0)!=(0);
-  $73 = HEAP32[$2>>2]|0;
-  $74 = ((($73)) + 12|0);
-  if ($72) {
-   $79 = $74;
-  } else {
-   $75 = ((($74)) + 8|0);
-   $76 = HEAP32[$75>>2]|0;
-   $79 = $76;
-  }
-  $77 = $5;
-  $78 = (($79) + ($77)|0);
-  $9 = $78;
-  while(1) {
-   $80 = $7;
-   $81 = $8;
-   $82 = ($80>>>0)<($81>>>0);
-   if (!($82)) {
-    break;
-   }
-   $83 = $7;
-   $84 = $8;
-   $85 = (_utf8len($83,$84)|0);
-   $10 = $85;
-   $86 = $10;
-   $87 = $9;
-   $88 = (0 - ($86))|0;
-   $89 = (($87) + ($88)|0);
-   $9 = $89;
-   $90 = $9;
-   $91 = $7;
-   $92 = $10;
-   _memcpy(($90|0),($91|0),($92|0))|0;
-   $93 = $10;
-   $94 = $7;
-   $95 = (($94) + ($93)|0);
-   $7 = $95;
-  }
-  $96 = $3;
-  $97 = $6;
-  _mrb_free($96,$97);
- }
- ;HEAP32[$0>>2]=HEAP32[$2>>2]|0;HEAP32[$0+4>>2]=HEAP32[$2+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_str_rindex($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $$byval_copy10 = 0, $$byval_copy11 = 0, $$byval_copy5 = 0, $$byval_copy6 = 0, $$byval_copy7 = 0, $$byval_copy8 = 0, $$byval_copy9 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0;
- var $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0;
- var $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0;
- var $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $8 = 0, $9 = 0, $cond = 0, $vararg_buffer = 0, $vararg_buffer2 = 0;
- var $vararg_ptr1 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 144|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(144|0);
- $$byval_copy11 = sp + 136|0;
- $$byval_copy10 = sp + 128|0;
- $$byval_copy9 = sp + 120|0;
- $$byval_copy8 = sp + 112|0;
- $$byval_copy7 = sp + 104|0;
- $$byval_copy6 = sp + 96|0;
- $$byval_copy5 = sp + 88|0;
- $$byval_copy = sp + 80|0;
- $vararg_buffer2 = sp + 8|0;
- $vararg_buffer = sp;
- $4 = sp + 68|0;
- $5 = sp + 64|0;
- $6 = sp + 56|0;
- $7 = sp + 48|0;
- $10 = sp + 32|0;
- $11 = sp + 24|0;
- $12 = sp + 16|0;
- $3 = $1;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
- $13 = (_utf8_strlen($$byval_copy,-1)|0);
- $9 = $13;
- $14 = $3;
- HEAP32[$vararg_buffer>>2] = $4;
- $vararg_ptr1 = ((($vararg_buffer)) + 4|0);
- HEAP32[$vararg_ptr1>>2] = $5;
- (_mrb_get_args($14,68856,$vararg_buffer)|0);
- $15 = HEAP32[$5>>2]|0;
- $16 = ($15|0)==(2);
- do {
-  if ($16) {
-   $17 = HEAP32[$4>>2]|0;
-   ;HEAP32[$6>>2]=HEAP32[$17>>2]|0;HEAP32[$6+4>>2]=HEAP32[$17+4>>2]|0;
-   $18 = HEAP32[$4>>2]|0;
-   $19 = ((($18)) + 8|0);
-   ;HEAP32[$7>>2]=HEAP32[$19>>2]|0;HEAP32[$7+4>>2]=HEAP32[$19+4>>2]|0;
-   $20 = HEAP32[$7>>2]|0;
-   $8 = $20;
-   $21 = $8;
-   $22 = ($21|0)<(0);
-   if ($22) {
-    $23 = $9;
-    $24 = $8;
-    $25 = (($24) + ($23))|0;
-    $8 = $25;
-    $26 = $8;
-    $27 = ($26|0)<(0);
-    if ($27) {
-     $28 = $3;
-     ;HEAP32[$$byval_copy5>>2]=HEAP32[$6>>2]|0;HEAP32[$$byval_copy5+4>>2]=HEAP32[$6+4>>2]|0;
-     _mrb_regexp_check($28,$$byval_copy5);
-     _mrb_nil_value_283($0);
-     STACKTOP = sp;return;
-    }
-   }
-   $29 = $8;
-   $30 = $9;
-   $31 = ($29|0)>($30|0);
-   if ($31) {
-    $32 = $9;
-    $8 = $32;
-   }
-  } else {
-   $33 = $9;
-   $8 = $33;
-   $34 = HEAP32[$5>>2]|0;
-   $35 = ($34|0)>(0);
-   if ($35) {
-    $36 = HEAP32[$4>>2]|0;
-    ;HEAP32[$6>>2]=HEAP32[$36>>2]|0;HEAP32[$6+4>>2]=HEAP32[$36+4>>2]|0;
-    break;
-   } else {
-    _mrb_nil_value_283($10);
-    ;HEAP32[$6>>2]=HEAP32[$10>>2]|0;HEAP32[$6+4>>2]=HEAP32[$10+4>>2]|0;
-    break;
-   }
-  }
- } while(0);
- $37 = $8;
- ;HEAP32[$$byval_copy6>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy6+4>>2]=HEAP32[$2+4>>2]|0;
- $38 = (_chars2bytes($$byval_copy6,0,$37)|0);
- $8 = $38;
- $39 = $8;
- $40 = $9;
- ;HEAP32[$$byval_copy7>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy7+4>>2]=HEAP32[$2+4>>2]|0;
- $41 = (_chars2bytes($$byval_copy7,$39,$40)|0);
- $9 = $41;
- $42 = $3;
- ;HEAP32[$$byval_copy8>>2]=HEAP32[$6>>2]|0;HEAP32[$$byval_copy8+4>>2]=HEAP32[$6+4>>2]|0;
- _mrb_regexp_check($42,$$byval_copy8);
- $43 = ((($6)) + 4|0);
- $44 = HEAP32[$43>>2]|0;
- $cond = ($44|0)==(16);
- if (!($cond)) {
-  $45 = $3;
-  ;HEAP32[$$byval_copy9>>2]=HEAP32[$6>>2]|0;HEAP32[$$byval_copy9+4>>2]=HEAP32[$6+4>>2]|0;
-  _mrb_check_string_type($12,$45,$$byval_copy9);
-  ;HEAP32[$11>>2]=HEAP32[$12>>2]|0;HEAP32[$11+4>>2]=HEAP32[$12+4>>2]|0;
-  $46 = ((($11)) + 4|0);
-  $47 = HEAP32[$46>>2]|0;
-  $48 = ($47|0)==(0);
-  if ($48) {
-   $49 = HEAP32[$11>>2]|0;
-   $50 = ($49|0)!=(0);
-   if (!($50)) {
-    $51 = $3;
-    $52 = $3;
-    $53 = (_mrb_class_get($52,69204)|0);
-    ;HEAP8[$vararg_buffer2>>0]=HEAP8[$6>>0]|0;HEAP8[$vararg_buffer2+1>>0]=HEAP8[$6+1>>0]|0;HEAP8[$vararg_buffer2+2>>0]=HEAP8[$6+2>>0]|0;HEAP8[$vararg_buffer2+3>>0]=HEAP8[$6+3>>0]|0;HEAP8[$vararg_buffer2+4>>0]=HEAP8[$6+4>>0]|0;HEAP8[$vararg_buffer2+5>>0]=HEAP8[$6+5>>0]|0;HEAP8[$vararg_buffer2+6>>0]=HEAP8[$6+6>>0]|0;HEAP8[$vararg_buffer2+7>>0]=HEAP8[$6+7>>0]|0;
-    _mrb_raisef($51,$53,56338,$vararg_buffer2);
-    // unreachable;
-   }
-  }
-  ;HEAP32[$6>>2]=HEAP32[$11>>2]|0;HEAP32[$6+4>>2]=HEAP32[$11+4>>2]|0;
- }
- $54 = $3;
- $55 = $8;
- ;HEAP32[$$byval_copy10>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy10+4>>2]=HEAP32[$2+4>>2]|0;
- ;HEAP32[$$byval_copy11>>2]=HEAP32[$6>>2]|0;HEAP32[$$byval_copy11+4>>2]=HEAP32[$6+4>>2]|0;
- $56 = (_str_rindex($54,$$byval_copy10,$$byval_copy11,$55)|0);
- $8 = $56;
- $57 = $8;
- $58 = ($57|0)>=(0);
- if (!($58)) {
-  _mrb_nil_value_283($0);
-  STACKTOP = sp;return;
- }
- $59 = HEAP32[$2>>2]|0;
- $60 = HEAP32[$59>>2]|0;
- $61 = $60 >>> 11;
- $62 = $61 & 8;
- $63 = ($62|0)!=(0);
- $64 = HEAP32[$2>>2]|0;
- $65 = ((($64)) + 12|0);
- if ($63) {
-  $69 = $65;
- } else {
-  $66 = ((($65)) + 8|0);
-  $67 = HEAP32[$66>>2]|0;
-  $69 = $67;
- }
- $68 = $8;
- $70 = (_bytes2chars($69,$68)|0);
- $8 = $70;
- $71 = $8;
- _mrb_fixnum_value_290($0,$71);
- STACKTOP = sp;return;
-}
-function _mrb_str_split_m($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $$byval_copy10 = 0, $$byval_copy11 = 0, $$byval_copy12 = 0, $$byval_copy13 = 0, $$byval_copy14 = 0, $$byval_copy15 = 0, $$byval_copy16 = 0, $$byval_copy17 = 0, $$byval_copy5 = 0, $$byval_copy6 = 0, $$byval_copy7 = 0, $$byval_copy8 = 0, $$byval_copy9 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0;
- var $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0;
- var $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0, $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0;
- var $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0, $152 = 0, $153 = 0, $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0;
- var $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0, $170 = 0, $171 = 0, $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0;
- var $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0, $188 = 0, $189 = 0, $19 = 0, $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0;
- var $196 = 0, $197 = 0, $198 = 0, $199 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0, $204 = 0, $205 = 0, $206 = 0, $207 = 0, $208 = 0, $209 = 0, $21 = 0, $210 = 0, $211 = 0, $212 = 0, $213 = 0;
- var $214 = 0, $215 = 0, $216 = 0, $217 = 0, $218 = 0, $219 = 0, $22 = 0, $220 = 0, $221 = 0, $222 = 0, $223 = 0, $224 = 0, $225 = 0, $226 = 0, $227 = 0, $228 = 0, $229 = 0, $23 = 0, $230 = 0, $231 = 0;
- var $232 = 0, $233 = 0, $234 = 0, $235 = 0, $236 = 0, $237 = 0, $238 = 0, $239 = 0, $24 = 0, $240 = 0, $241 = 0, $242 = 0, $243 = 0, $244 = 0, $245 = 0, $246 = 0, $247 = 0, $248 = 0, $249 = 0, $25 = 0;
- var $250 = 0, $251 = 0, $252 = 0, $253 = 0, $254 = 0, $255 = 0, $256 = 0, $257 = 0, $258 = 0, $259 = 0, $26 = 0, $260 = 0, $261 = 0, $262 = 0, $263 = 0, $264 = 0, $265 = 0, $266 = 0, $267 = 0, $268 = 0;
- var $269 = 0, $27 = 0, $270 = 0, $271 = 0, $272 = 0, $273 = 0, $274 = 0, $275 = 0, $276 = 0, $277 = 0, $278 = 0, $279 = 0, $28 = 0, $280 = 0, $281 = 0, $282 = 0, $283 = 0, $284 = 0, $285 = 0, $286 = 0;
- var $287 = 0, $288 = 0, $289 = 0, $29 = 0, $290 = 0, $291 = 0, $292 = 0, $293 = 0, $294 = 0, $295 = 0, $296 = 0, $297 = 0, $298 = 0, $299 = 0, $3 = 0, $30 = 0, $300 = 0, $301 = 0, $302 = 0, $303 = 0;
- var $304 = 0, $305 = 0, $306 = 0, $307 = 0, $308 = 0, $309 = 0, $31 = 0, $310 = 0, $311 = 0, $312 = 0, $313 = 0, $314 = 0, $315 = 0, $316 = 0, $317 = 0, $318 = 0, $319 = 0, $32 = 0, $320 = 0, $321 = 0;
- var $322 = 0, $323 = 0, $324 = 0, $325 = 0, $326 = 0, $327 = 0, $328 = 0, $329 = 0, $33 = 0, $330 = 0, $331 = 0, $332 = 0, $333 = 0, $334 = 0, $335 = 0, $336 = 0, $337 = 0, $338 = 0, $339 = 0, $34 = 0;
- var $340 = 0, $341 = 0, $342 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0;
- var $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0;
- var $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0;
- var $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $or$cond = 0, $or$cond3 = 0, $vararg_buffer = 0, $vararg_ptr4 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 272|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(272|0);
- $$byval_copy17 = sp + 256|0;
- $$byval_copy16 = sp + 248|0;
- $$byval_copy15 = sp + 240|0;
- $$byval_copy14 = sp + 232|0;
- $$byval_copy13 = sp + 224|0;
- $$byval_copy12 = sp + 216|0;
- $$byval_copy11 = sp + 208|0;
- $$byval_copy10 = sp + 200|0;
- $$byval_copy9 = sp + 192|0;
- $$byval_copy8 = sp + 184|0;
- $$byval_copy7 = sp + 176|0;
- $$byval_copy6 = sp + 168|0;
- $$byval_copy5 = sp + 160|0;
- $$byval_copy = sp + 152|0;
- $vararg_buffer = sp;
- $5 = sp + 136|0;
- $11 = sp + 112|0;
- $12 = sp + 104|0;
- $13 = sp + 96|0;
- $14 = sp + 88|0;
- $20 = sp + 64|0;
- $25 = sp + 40|0;
- $26 = sp + 32|0;
- $27 = sp + 24|0;
- $29 = sp + 8|0;
- $3 = $1;
- _mrb_nil_value_283($5);
- $6 = 1;
- $7 = 0;
- HEAP32[$11>>2] = 0;
- $30 = $3;
- HEAP32[$vararg_buffer>>2] = $5;
- $vararg_ptr4 = ((($vararg_buffer)) + 4|0);
- HEAP32[$vararg_ptr4>>2] = $11;
- $31 = (_mrb_get_args($30,56334,$vararg_buffer)|0);
- $4 = $31;
- $32 = HEAP32[$11>>2]|0;
- $33 = ($32|0)>(0);
- $34 = $4;
- $35 = ($34|0)==(2);
- $36 = $33 ? $35 : 0;
- $37 = $36&1;
- $8 = $37;
- $38 = $4;
- $39 = ($38|0)==(2);
- do {
-  if ($39) {
-   $40 = HEAP32[$11>>2]|0;
-   $41 = ($40|0)==(1);
-   if (!($41)) {
-    $7 = 1;
-    break;
-   }
-   $42 = HEAP32[$2>>2]|0;
-   $43 = HEAP32[$42>>2]|0;
-   $44 = $43 >>> 11;
-   $45 = $44 & 8;
-   $46 = ($45|0)!=(0);
-   $47 = HEAP32[$2>>2]|0;
-   if ($46) {
-    $48 = HEAP32[$47>>2]|0;
-    $49 = $48 >>> 11;
-    $50 = $49 & 496;
-    $51 = $50 >> 4;
-    $55 = $51;
-   } else {
-    $52 = ((($47)) + 12|0);
-    $53 = HEAP32[$52>>2]|0;
-    $55 = $53;
-   }
-   $54 = ($55|0)==(0);
-   $56 = $3;
-   if ($54) {
-    _mrb_ary_new_capa($0,$56,0);
-    STACKTOP = sp;return;
-   } else {
-    _mrb_ary_new_from_values($0,$56,1,$2);
-    STACKTOP = sp;return;
-   }
-  }
- } while(0);
- $57 = $4;
- $58 = ($57|0)==(0);
- do {
-  if ($58) {
-   label = 13;
-  } else {
-   $59 = ((($5)) + 4|0);
-   $60 = HEAP32[$59>>2]|0;
-   $61 = ($60|0)==(0);
-   if ($61) {
-    $62 = HEAP32[$5>>2]|0;
-    $63 = ($62|0)!=(0);
-    if (!($63)) {
-     label = 13;
-     break;
-    }
-   }
-   $64 = ((($5)) + 4|0);
-   $65 = HEAP32[$64>>2]|0;
-   $66 = ($65|0)==(16);
-   if (!($66)) {
-    $94 = $3;
-    ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
-    _mrb_noregexp($94,$$byval_copy);
-    break;
-   }
-   $6 = 1;
-   $67 = HEAP32[$5>>2]|0;
-   $68 = HEAP32[$67>>2]|0;
-   $69 = $68 >>> 11;
-   $70 = $69 & 8;
-   $71 = ($70|0)!=(0);
-   $72 = HEAP32[$5>>2]|0;
-   if ($71) {
-    $73 = HEAP32[$72>>2]|0;
-    $74 = $73 >>> 11;
-    $75 = $74 & 496;
-    $76 = $75 >> 4;
-    $80 = $76;
-   } else {
-    $77 = ((($72)) + 12|0);
-    $78 = HEAP32[$77>>2]|0;
-    $80 = $78;
-   }
-   $79 = ($80|0)==(1);
-   if ($79) {
-    $81 = HEAP32[$5>>2]|0;
-    $82 = HEAP32[$81>>2]|0;
-    $83 = $82 >>> 11;
-    $84 = $83 & 8;
-    $85 = ($84|0)!=(0);
-    $86 = HEAP32[$5>>2]|0;
-    $87 = ((($86)) + 12|0);
-    if ($85) {
-     $91 = $87;
-    } else {
-     $88 = ((($87)) + 8|0);
-     $89 = HEAP32[$88>>2]|0;
-     $91 = $89;
-    }
-    $90 = HEAP8[$91>>0]|0;
-    $92 = $90 << 24 >> 24;
-    $93 = ($92|0)==(32);
-    if ($93) {
-     $6 = 0;
-    }
-   }
-  }
- } while(0);
- if ((label|0) == 13) {
-  $6 = 0;
- }
- $95 = $3;
- _mrb_ary_new($14,$95);
- ;HEAP32[$12>>2]=HEAP32[$14>>2]|0;HEAP32[$12+4>>2]=HEAP32[$14+4>>2]|0;
- $9 = 0;
- $96 = $6;
- $97 = ($96|0)==(0);
- L37: do {
-  if ($97) {
-   $15 = 1;
-   $16 = 0;
-   $98 = HEAP32[$2>>2]|0;
-   $99 = HEAP32[$98>>2]|0;
-   $100 = $99 >>> 11;
-   $101 = $100 & 8;
-   $102 = ($101|0)!=(0);
-   $103 = HEAP32[$2>>2]|0;
-   if ($102) {
-    $104 = HEAP32[$103>>2]|0;
-    $105 = $104 >>> 11;
-    $106 = $105 & 496;
-    $107 = $106 >> 4;
-    $110 = $107;
-   } else {
-    $108 = ((($103)) + 12|0);
-    $109 = HEAP32[$108>>2]|0;
-    $110 = $109;
-   }
-   $17 = $110;
-   $111 = $3;
-   $112 = (_mrb_gc_arena_save($111)|0);
-   $19 = $112;
-   $113 = $9;
-   $10 = $113;
-   $16 = $113;
-   while(1) {
-    $114 = $16;
-    $115 = $17;
-    $116 = ($114|0)<($115|0);
-    if (!($116)) {
-     break L37;
-    }
-    $117 = HEAP32[$2>>2]|0;
-    $118 = HEAP32[$117>>2]|0;
-    $119 = $118 >>> 11;
-    $120 = $119 & 8;
-    $121 = ($120|0)!=(0);
-    $122 = HEAP32[$2>>2]|0;
-    $123 = ((($122)) + 12|0);
-    if ($121) {
-     $129 = $123;
-    } else {
-     $124 = ((($123)) + 8|0);
-     $125 = HEAP32[$124>>2]|0;
-     $129 = $125;
-    }
-    $126 = $16;
-    $127 = (($126) + 1)|0;
-    $16 = $127;
-    $128 = (($129) + ($126)|0);
-    $130 = HEAP8[$128>>0]|0;
-    $131 = $130&255;
-    $18 = $131;
-    $132 = $15;
-    $133 = ($132<<24>>24)!=(0);
-    $134 = $18;
-    $135 = ($134|0)==(32);
-    if ($133) {
-     if (!($135)) {
-      $136 = $18;
-      $137 = (($136) - 9)|0;
-      $138 = ($137>>>0)<(5);
-      if (!($138)) {
-       $140 = $16;
-       $10 = $140;
-       $15 = 0;
-       $141 = $8;
-       $142 = ($141|0)!=(0);
-       if (!($142)) {
-        continue;
-       }
-       $143 = HEAP32[$11>>2]|0;
-       $144 = $7;
-       $145 = ($143|0)<=($144|0);
-       if ($145) {
-        break L37;
-       } else {
-        continue;
-       }
-      }
-     }
-     $139 = $16;
-     $9 = $139;
-     continue;
-    } else {
-     if (!($135)) {
-      $146 = $18;
-      $147 = (($146) - 9)|0;
-      $148 = ($147>>>0)<(5);
-      if (!($148)) {
-       $162 = $16;
-       $10 = $162;
-       continue;
-      }
-     }
-     $149 = $3;
-     $150 = $3;
-     $151 = $9;
-     $152 = $10;
-     $153 = $9;
-     $154 = (($152) - ($153))|0;
-     ;HEAP32[$$byval_copy5>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy5+4>>2]=HEAP32[$2+4>>2]|0;
-     _byte_subseq($20,$150,$$byval_copy5,$151,$154);
-     ;HEAP32[$$byval_copy6>>2]=HEAP32[$12>>2]|0;HEAP32[$$byval_copy6+4>>2]=HEAP32[$12+4>>2]|0;
-     ;HEAP32[$$byval_copy7>>2]=HEAP32[$20>>2]|0;HEAP32[$$byval_copy7+4>>2]=HEAP32[$20+4>>2]|0;
-     _mrb_ary_push($149,$$byval_copy6,$$byval_copy7);
-     $155 = $3;
-     $156 = $19;
-     _mrb_gc_arena_restore($155,$156);
-     $15 = 1;
-     $157 = $16;
-     $9 = $157;
-     $158 = $8;
-     $159 = ($158|0)!=(0);
-     if (!($159)) {
-      continue;
-     }
-     $160 = $7;
-     $161 = (($160) + 1)|0;
-     $7 = $161;
-     continue;
-    }
-   }
-  } else {
-   $163 = $6;
-   $164 = ($163|0)==(1);
-   if (!($164)) {
-    $247 = $3;
-    ;HEAP32[$$byval_copy12>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy12+4>>2]=HEAP32[$2+4>>2]|0;
-    _mrb_noregexp($247,$$byval_copy12);
-    break;
-   }
-   $165 = HEAP32[$2>>2]|0;
-   $166 = HEAP32[$165>>2]|0;
-   $167 = $166 >>> 11;
-   $168 = $167 & 8;
-   $169 = ($168|0)!=(0);
-   $170 = HEAP32[$2>>2]|0;
-   if ($169) {
-    $171 = HEAP32[$170>>2]|0;
-    $172 = $171 >>> 11;
-    $173 = $172 & 496;
-    $174 = $173 >> 4;
-    $177 = $174;
-   } else {
-    $175 = ((($170)) + 12|0);
-    $176 = HEAP32[$175>>2]|0;
-    $177 = $176;
-   }
-   $21 = $177;
-   $178 = HEAP32[$5>>2]|0;
-   $179 = HEAP32[$178>>2]|0;
-   $180 = $179 >>> 11;
-   $181 = $180 & 8;
-   $182 = ($181|0)!=(0);
-   $183 = HEAP32[$5>>2]|0;
-   if ($182) {
-    $184 = HEAP32[$183>>2]|0;
-    $185 = $184 >>> 11;
-    $186 = $185 & 496;
-    $187 = $186 >> 4;
-    $190 = $187;
-   } else {
-    $188 = ((($183)) + 12|0);
-    $189 = HEAP32[$188>>2]|0;
-    $190 = $189;
-   }
-   $22 = $190;
-   $23 = 0;
-   $191 = $3;
-   $192 = (_mrb_gc_arena_save($191)|0);
-   $24 = $192;
-   while(1) {
-    $193 = $23;
-    $194 = $21;
-    $195 = ($193|0)<($194|0);
-    if (!($195)) {
-     break;
-    }
-    $196 = $22;
-    $197 = ($196|0)>(0);
-    if ($197) {
-     $198 = HEAP32[$5>>2]|0;
-     $199 = HEAP32[$198>>2]|0;
-     $200 = $199 >>> 11;
-     $201 = $200 & 8;
-     $202 = ($201|0)!=(0);
-     $203 = HEAP32[$5>>2]|0;
-     $204 = ((($203)) + 12|0);
-     if ($202) {
-      $223 = $204;
-     } else {
-      $205 = ((($204)) + 8|0);
-      $206 = HEAP32[$205>>2]|0;
-      $223 = $206;
-     }
-     $207 = $22;
-     $208 = HEAP32[$2>>2]|0;
-     $209 = HEAP32[$208>>2]|0;
-     $210 = $209 >>> 11;
-     $211 = $210 & 8;
-     $212 = ($211|0)!=(0);
-     $213 = HEAP32[$2>>2]|0;
-     $214 = ((($213)) + 12|0);
-     if ($212) {
-      $219 = $214;
-     } else {
-      $215 = ((($214)) + 8|0);
-      $216 = HEAP32[$215>>2]|0;
-      $219 = $216;
-     }
-     $217 = $23;
-     $218 = (($219) + ($217)|0);
-     $220 = $21;
-     $221 = $23;
-     $222 = (($220) - ($221))|0;
-     $224 = (_mrb_memsearch($223,$207,$218,$222)|0);
-     $10 = $224;
-     $225 = $10;
-     $226 = ($225|0)<(0);
-     if ($226) {
-      break;
-     }
-    } else {
-     $227 = $23;
-     ;HEAP32[$$byval_copy8>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy8+4>>2]=HEAP32[$2+4>>2]|0;
-     $228 = (_chars2bytes($$byval_copy8,$227,1)|0);
-     $10 = $228;
-    }
-    $229 = $3;
-    $230 = $3;
-    $231 = $23;
-    $232 = $10;
-    ;HEAP32[$$byval_copy9>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy9+4>>2]=HEAP32[$2+4>>2]|0;
-    _byte_subseq($25,$230,$$byval_copy9,$231,$232);
-    ;HEAP32[$$byval_copy10>>2]=HEAP32[$12>>2]|0;HEAP32[$$byval_copy10+4>>2]=HEAP32[$12+4>>2]|0;
-    ;HEAP32[$$byval_copy11>>2]=HEAP32[$25>>2]|0;HEAP32[$$byval_copy11+4>>2]=HEAP32[$25+4>>2]|0;
-    _mrb_ary_push($229,$$byval_copy10,$$byval_copy11);
-    $233 = $3;
-    $234 = $24;
-    _mrb_gc_arena_restore($233,$234);
-    $235 = $10;
-    $236 = $22;
-    $237 = (($235) + ($236))|0;
-    $238 = $23;
-    $239 = (($238) + ($237))|0;
-    $23 = $239;
-    $240 = $8;
-    $241 = ($240|0)!=(0);
-    if (!($241)) {
-     continue;
-    }
-    $242 = HEAP32[$11>>2]|0;
-    $243 = $7;
-    $244 = (($243) + 1)|0;
-    $7 = $244;
-    $245 = ($242|0)<=($244|0);
-    if ($245) {
-     break;
-    }
-   }
-   $246 = $23;
-   $9 = $246;
-  }
- } while(0);
- $248 = HEAP32[$2>>2]|0;
- $249 = HEAP32[$248>>2]|0;
- $250 = $249 >>> 11;
- $251 = $250 & 8;
- $252 = ($251|0)!=(0);
- $253 = HEAP32[$2>>2]|0;
- if ($252) {
-  $254 = HEAP32[$253>>2]|0;
-  $255 = $254 >>> 11;
-  $256 = $255 & 496;
-  $257 = $256 >> 4;
-  $261 = $257;
- } else {
-  $258 = ((($253)) + 12|0);
-  $259 = HEAP32[$258>>2]|0;
-  $261 = $259;
- }
- $260 = ($261|0)>(0);
- do {
-  if ($260) {
-   $262 = $8;
-   $263 = ($262|0)!=(0);
-   if (!($263)) {
-    $264 = HEAP32[$2>>2]|0;
-    $265 = HEAP32[$264>>2]|0;
-    $266 = $265 >>> 11;
-    $267 = $266 & 8;
-    $268 = ($267|0)!=(0);
-    $269 = HEAP32[$2>>2]|0;
-    if ($268) {
-     $270 = HEAP32[$269>>2]|0;
-     $271 = $270 >>> 11;
-     $272 = $271 & 496;
-     $273 = $272 >> 4;
-     $278 = $273;
-    } else {
-     $274 = ((($269)) + 12|0);
-     $275 = HEAP32[$274>>2]|0;
-     $278 = $275;
-    }
-    $276 = $9;
-    $277 = ($278|0)>($276|0);
-    $279 = HEAP32[$11>>2]|0;
-    $280 = ($279|0)<(0);
-    $or$cond = $277 | $280;
-    if (!($or$cond)) {
-     break;
-    }
-   }
-   $281 = HEAP32[$2>>2]|0;
-   $282 = HEAP32[$281>>2]|0;
-   $283 = $282 >>> 11;
-   $284 = $283 & 8;
-   $285 = ($284|0)!=(0);
-   $286 = HEAP32[$2>>2]|0;
-   if ($285) {
-    $287 = HEAP32[$286>>2]|0;
-    $288 = $287 >>> 11;
-    $289 = $288 & 496;
-    $290 = $289 >> 4;
-    $295 = $290;
-   } else {
-    $291 = ((($286)) + 12|0);
-    $292 = HEAP32[$291>>2]|0;
-    $295 = $292;
-   }
-   $293 = $9;
-   $294 = ($295|0)==($293|0);
-   $296 = $3;
-   if ($294) {
-    ;HEAP32[$$byval_copy13>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy13+4>>2]=HEAP32[$2+4>>2]|0;
-    _mrb_str_new_empty($26,$296,$$byval_copy13);
-    ;HEAP32[$13>>2]=HEAP32[$26>>2]|0;HEAP32[$13+4>>2]=HEAP32[$26+4>>2]|0;
-   } else {
-    $297 = $9;
-    $298 = HEAP32[$2>>2]|0;
-    $299 = HEAP32[$298>>2]|0;
-    $300 = $299 >>> 11;
-    $301 = $300 & 8;
-    $302 = ($301|0)!=(0);
-    $303 = HEAP32[$2>>2]|0;
-    if ($302) {
-     $304 = HEAP32[$303>>2]|0;
-     $305 = $304 >>> 11;
-     $306 = $305 & 496;
-     $307 = $306 >> 4;
-     $312 = $307;
-    } else {
-     $308 = ((($303)) + 12|0);
-     $309 = HEAP32[$308>>2]|0;
-     $312 = $309;
-    }
-    $310 = $9;
-    $311 = (($312) - ($310))|0;
-    ;HEAP32[$$byval_copy14>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy14+4>>2]=HEAP32[$2+4>>2]|0;
-    _byte_subseq($27,$296,$$byval_copy14,$297,$311);
-    ;HEAP32[$13>>2]=HEAP32[$27>>2]|0;HEAP32[$13+4>>2]=HEAP32[$27+4>>2]|0;
-   }
-   $313 = $3;
-   ;HEAP32[$$byval_copy15>>2]=HEAP32[$12>>2]|0;HEAP32[$$byval_copy15+4>>2]=HEAP32[$12+4>>2]|0;
-   ;HEAP32[$$byval_copy16>>2]=HEAP32[$13>>2]|0;HEAP32[$$byval_copy16+4>>2]=HEAP32[$13+4>>2]|0;
-   _mrb_ary_push($313,$$byval_copy15,$$byval_copy16);
-  }
- } while(0);
- $314 = $8;
- $315 = ($314|0)==(0);
- $316 = HEAP32[$11>>2]|0;
- $317 = ($316|0)==(0);
- $or$cond3 = $315 & $317;
- L119: do {
-  if ($or$cond3) {
-   while(1) {
-    $318 = HEAP32[$12>>2]|0;
-    $319 = ((($318)) + 12|0);
-    $320 = HEAP32[$319>>2]|0;
-    $28 = $320;
-    $321 = ($320|0)>(0);
-    if (!($321)) {
-     break L119;
-    }
-    $322 = HEAP32[$12>>2]|0;
-    $323 = ((($322)) + 20|0);
-    $324 = HEAP32[$323>>2]|0;
-    $325 = $28;
-    $326 = (($325) - 1)|0;
-    $327 = (($324) + ($326<<3)|0);
-    ;HEAP32[$13>>2]=HEAP32[$327>>2]|0;HEAP32[$13+4>>2]=HEAP32[$327+4>>2]|0;
-    $328 = HEAP32[$13>>2]|0;
-    $329 = HEAP32[$328>>2]|0;
-    $330 = $329 >>> 11;
-    $331 = $330 & 8;
-    $332 = ($331|0)!=(0);
-    $333 = HEAP32[$13>>2]|0;
-    if ($332) {
-     $334 = HEAP32[$333>>2]|0;
-     $335 = $334 >>> 11;
-     $336 = $335 & 496;
-     $337 = $336 >> 4;
-     $341 = $337;
-    } else {
-     $338 = ((($333)) + 12|0);
-     $339 = HEAP32[$338>>2]|0;
-     $341 = $339;
-    }
-    $340 = ($341|0)==(0);
-    if (!($340)) {
-     break L119;
-    }
-    $342 = $3;
-    ;HEAP32[$$byval_copy17>>2]=HEAP32[$12>>2]|0;HEAP32[$$byval_copy17+4>>2]=HEAP32[$12+4>>2]|0;
-    _mrb_ary_pop($29,$342,$$byval_copy17);
-   }
-  }
- } while(0);
- ;HEAP32[$0>>2]=HEAP32[$12>>2]|0;HEAP32[$0+4>>2]=HEAP32[$12+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_str_to_f($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0.0, $7 = 0.0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $$byval_copy = sp + 8|0;
- $3 = $1;
- $4 = $3;
- $5 = $3;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
- $6 = (+_mrb_str_to_dbl($5,$$byval_copy,0));
- $7 = $6;
- _mrb_float_value_339($0,$4,$7);
- STACKTOP = sp;return;
-}
-function _mrb_str_to_i($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, $vararg_buffer1 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);
- $$byval_copy = sp + 32|0;
- $vararg_buffer1 = sp + 8|0;
- $vararg_buffer = sp;
- $4 = sp + 24|0;
- $5 = sp + 16|0;
- $3 = $1;
- HEAP32[$4>>2] = 10;
- $6 = $3;
- HEAP32[$vararg_buffer>>2] = $4;
- (_mrb_get_args($6,64768,$vararg_buffer)|0);
- $7 = HEAP32[$4>>2]|0;
- $8 = ($7|0)<(0);
- $9 = $3;
- if ($8) {
-  $10 = $3;
-  $11 = (_mrb_class_get($10,69160)|0);
-  $12 = HEAP32[$4>>2]|0;
-  _mrb_fixnum_value_290($5,$12);
-  ;HEAP8[$vararg_buffer1>>0]=HEAP8[$5>>0]|0;HEAP8[$vararg_buffer1+1>>0]=HEAP8[$5+1>>0]|0;HEAP8[$vararg_buffer1+2>>0]=HEAP8[$5+2>>0]|0;HEAP8[$vararg_buffer1+3>>0]=HEAP8[$5+3>>0]|0;HEAP8[$vararg_buffer1+4>>0]=HEAP8[$5+4>>0]|0;HEAP8[$vararg_buffer1+5>>0]=HEAP8[$5+5>>0]|0;HEAP8[$vararg_buffer1+6>>0]=HEAP8[$5+6>>0]|0;HEAP8[$vararg_buffer1+7>>0]=HEAP8[$5+7>>0]|0;
-  _mrb_raisef($9,$11,56069,$vararg_buffer1);
-  // unreachable;
- } else {
-  $13 = HEAP32[$4>>2]|0;
-  ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
-  _mrb_str_to_inum($0,$9,$$byval_copy,$13,0);
-  STACKTOP = sp;return;
- }
-}
-function _mrb_str_to_s($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $10 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $$byval_copy1 = sp + 16|0;
- $$byval_copy = sp + 8|0;
- $3 = $1;
- $4 = $3;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
- $5 = (_mrb_obj_class($4,$$byval_copy)|0);
- $6 = $3;
- $7 = ((($6)) + 48|0);
- $8 = HEAP32[$7>>2]|0;
- $9 = ($5|0)!=($8|0);
- if ($9) {
-  $10 = $3;
-  ;HEAP32[$$byval_copy1>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$2+4>>2]|0;
-  _mrb_str_dup($0,$10,$$byval_copy1);
-  STACKTOP = sp;return;
- } else {
-  ;HEAP32[$0>>2]=HEAP32[$2>>2]|0;HEAP32[$0+4>>2]=HEAP32[$2+4>>2]|0;
-  STACKTOP = sp;return;
- }
-}
-function _mrb_str_upcase($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);
- $$byval_copy1 = sp + 40|0;
- $$byval_copy = sp + 32|0;
- $4 = sp + 16|0;
- $5 = sp + 8|0;
- $6 = sp;
- $3 = $1;
- $7 = $3;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
- _mrb_str_dup($5,$7,$$byval_copy);
- ;HEAP32[$4>>2]=HEAP32[$5>>2]|0;HEAP32[$4+4>>2]=HEAP32[$5+4>>2]|0;
- $8 = $3;
- ;HEAP32[$$byval_copy1>>2]=HEAP32[$4>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$4+4>>2]|0;
- _mrb_str_upcase_bang($6,$8,$$byval_copy1);
- ;HEAP32[$0>>2]=HEAP32[$4>>2]|0;HEAP32[$0+4>>2]=HEAP32[$4+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_str_upcase_bang($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;
- var $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0;
- var $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0;
- var $66 = 0, $67 = 0, $68 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $3 = $1;
- $8 = HEAP32[$2>>2]|0;
- $4 = $8;
- $7 = 0;
- $9 = $3;
- $10 = $4;
- _mrb_str_modify($9,$10);
- $11 = HEAP32[$2>>2]|0;
- $12 = HEAP32[$11>>2]|0;
- $13 = $12 >>> 11;
- $14 = $13 & 8;
- $15 = ($14|0)!=(0);
- $16 = HEAP32[$2>>2]|0;
- $17 = ((($16)) + 12|0);
- if ($15) {
-  $20 = $17;
- } else {
-  $18 = ((($17)) + 8|0);
-  $19 = HEAP32[$18>>2]|0;
-  $20 = $19;
- }
- $5 = $20;
- $21 = HEAP32[$2>>2]|0;
- $22 = HEAP32[$21>>2]|0;
- $23 = $22 >>> 11;
- $24 = $23 & 8;
- $25 = ($24|0)!=(0);
- $26 = HEAP32[$2>>2]|0;
- $27 = ((($26)) + 12|0);
- if ($25) {
-  $43 = $27;
- } else {
-  $28 = ((($27)) + 8|0);
-  $29 = HEAP32[$28>>2]|0;
-  $43 = $29;
- }
- $30 = HEAP32[$2>>2]|0;
- $31 = HEAP32[$30>>2]|0;
- $32 = $31 >>> 11;
- $33 = $32 & 8;
- $34 = ($33|0)!=(0);
- $35 = HEAP32[$2>>2]|0;
- if ($34) {
-  $36 = HEAP32[$35>>2]|0;
-  $37 = $36 >>> 11;
-  $38 = $37 & 496;
-  $39 = $38 >> 4;
-  $44 = $39;
- } else {
-  $40 = ((($35)) + 12|0);
-  $41 = HEAP32[$40>>2]|0;
-  $44 = $41;
- }
- $42 = (($43) + ($44)|0);
- $6 = $42;
- while(1) {
-  $45 = $5;
-  $46 = $6;
-  $47 = ($45>>>0)<($46>>>0);
-  if (!($47)) {
-   break;
-  }
-  $48 = $5;
-  $49 = HEAP8[$48>>0]|0;
-  $50 = $49 << 24 >> 24;
-  $51 = (($50) - 97)|0;
-  $52 = ($51>>>0)<(26);
-  if ($52) {
-   $53 = $5;
-   $54 = HEAP8[$53>>0]|0;
-   $55 = $54 << 24 >> 24;
-   $56 = (($55) - 97)|0;
-   $57 = ($56>>>0)<(26);
-   $58 = $5;
-   $59 = HEAP8[$58>>0]|0;
-   $60 = $59 << 24 >> 24;
-   $61 = $60 & 95;
-   $62 = $57 ? $61 : $60;
-   $63 = $62&255;
-   $64 = $5;
-   HEAP8[$64>>0] = $63;
-   $7 = 1;
-  }
-  $65 = $5;
-  $66 = ((($65)) + 1|0);
-  $5 = $66;
- }
- $67 = $7;
- $68 = ($67<<24>>24)!=(0);
- if ($68) {
-  ;HEAP32[$0>>2]=HEAP32[$2>>2]|0;HEAP32[$0+4>>2]=HEAP32[$2+4>>2]|0;
-  STACKTOP = sp;return;
- } else {
-  _mrb_nil_value_283($0);
-  STACKTOP = sp;return;
- }
-}
-function _mrb_str_bytes($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;
- var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0;
- var $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);
- $$byval_copy1 = sp + 40|0;
- $$byval_copy = sp + 32|0;
- $5 = sp + 16|0;
- $8 = sp;
- $3 = $1;
- $9 = HEAP32[$2>>2]|0;
- $4 = $9;
- $10 = $3;
- $11 = $4;
- $12 = HEAP32[$11>>2]|0;
- $13 = $12 >>> 11;
- $14 = $13 & 8;
- $15 = ($14|0)!=(0);
- $16 = $4;
- if ($15) {
-  $17 = HEAP32[$16>>2]|0;
-  $18 = $17 >>> 11;
-  $19 = $18 & 496;
-  $20 = $19 >> 4;
-  $23 = $20;
- } else {
-  $21 = ((($16)) + 12|0);
-  $22 = HEAP32[$21>>2]|0;
-  $23 = $22;
- }
- _mrb_ary_new_capa($5,$10,$23);
- $24 = $4;
- $25 = HEAP32[$24>>2]|0;
- $26 = $25 >>> 11;
- $27 = $26 & 8;
- $28 = ($27|0)!=(0);
- $29 = $4;
- $30 = ((($29)) + 12|0);
- if ($28) {
-  $33 = $30;
- } else {
-  $31 = ((($30)) + 8|0);
-  $32 = HEAP32[$31>>2]|0;
-  $33 = $32;
- }
- $6 = $33;
- $34 = $6;
- $35 = $4;
- $36 = HEAP32[$35>>2]|0;
- $37 = $36 >>> 11;
- $38 = $37 & 8;
- $39 = ($38|0)!=(0);
- $40 = $4;
- if ($39) {
-  $41 = HEAP32[$40>>2]|0;
-  $42 = $41 >>> 11;
-  $43 = $42 & 496;
-  $44 = $43 >> 4;
-  $48 = $44;
- } else {
-  $45 = ((($40)) + 12|0);
-  $46 = HEAP32[$45>>2]|0;
-  $48 = $46;
- }
- $47 = (($34) + ($48)|0);
- $7 = $47;
- while(1) {
-  $49 = $6;
-  $50 = $7;
-  $51 = ($49>>>0)<($50>>>0);
-  if (!($51)) {
-   break;
-  }
-  $52 = $3;
-  $53 = $6;
-  $54 = HEAP8[$53>>0]|0;
-  $55 = $54&255;
-  _mrb_fixnum_value_290($8,$55);
-  ;HEAP32[$$byval_copy>>2]=HEAP32[$5>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$5+4>>2]|0;
-  ;HEAP32[$$byval_copy1>>2]=HEAP32[$8>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$8+4>>2]|0;
-  _mrb_ary_push($52,$$byval_copy,$$byval_copy1);
-  $56 = $6;
-  $57 = ((($56)) + 1|0);
-  $6 = $57;
- }
- ;HEAP32[$0>>2]=HEAP32[$5>>2]|0;HEAP32[$0+4>>2]=HEAP32[$5+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_str_freeze($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $1;
- $5 = HEAP32[$2>>2]|0;
- $4 = $5;
- $6 = $4;
- $7 = HEAP32[$6>>2]|0;
- $8 = $7 >>> 11;
- $9 = $8 | 4;
- $10 = HEAP32[$6>>2]|0;
- $11 = $9 & 2097151;
- $12 = $11 << 11;
- $13 = $10 & 2047;
- $14 = $13 | $12;
- HEAP32[$6>>2] = $14;
- ;HEAP32[$0>>2]=HEAP32[$2>>2]|0;HEAP32[$0+4>>2]=HEAP32[$2+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_float_value_339($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = +$2;
- var $3 = 0, $4 = 0.0, $5 = 0, $6 = 0, $7 = 0.0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $5 = sp;
- $3 = $1;
- $4 = $2;
- $6 = ((($5)) + 4|0);
- HEAP32[$6>>2] = 6;
- $7 = $4;
- HEAPF32[$5>>2] = $7;
- ;HEAP32[$0>>2]=HEAP32[$5>>2]|0;HEAP32[$0+4>>2]=HEAP32[$5+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_memsearch($0,$1,$2,$3) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;
- var $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0;
- var $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);
- $5 = $0;
- $6 = $1;
- $7 = $2;
- $8 = $3;
- $13 = $5;
- $9 = $13;
- $14 = $7;
- $10 = $14;
- $15 = $6;
- $16 = $8;
- $17 = ($15|0)>($16|0);
- do {
-  if ($17) {
-   $4 = -1;
-  } else {
-   $18 = $6;
-   $19 = $8;
-   $20 = ($18|0)==($19|0);
-   if ($20) {
-    $21 = $5;
-    $22 = $7;
-    $23 = $6;
-    $24 = (_memcmp($21,$22,$23)|0);
-    $25 = ($24|0)==(0);
-    $26 = $25 ? 0 : -1;
-    $4 = $26;
-    break;
-   }
-   $27 = $6;
-   $28 = ($27|0)<(1);
-   if ($28) {
-    $4 = 0;
-    break;
-   }
-   $29 = $6;
-   $30 = ($29|0)==(1);
-   if (!($30)) {
-    $51 = $5;
-    $52 = $6;
-    $53 = $7;
-    $54 = $8;
-    $55 = (_mrb_memsearch_qs($51,$52,$53,$54)|0);
-    $4 = $55;
-    break;
-   }
-   $31 = $10;
-   $11 = $31;
-   $32 = $11;
-   $33 = $8;
-   $34 = (($32) + ($33)|0);
-   $12 = $34;
-   while(1) {
-    $35 = $10;
-    $36 = $12;
-    $37 = ($35>>>0)<($36>>>0);
-    if (!($37)) {
-     label = 13;
-     break;
-    }
-    $38 = $9;
-    $39 = HEAP8[$38>>0]|0;
-    $40 = $39&255;
-    $41 = $10;
-    $42 = HEAP8[$41>>0]|0;
-    $43 = $42&255;
-    $44 = ($40|0)==($43|0);
-    $45 = $10;
-    if ($44) {
-     label = 11;
-     break;
-    }
-    $50 = ((($45)) + 1|0);
-    $10 = $50;
-   }
-   if ((label|0) == 11) {
-    $46 = $11;
-    $47 = $45;
-    $48 = $46;
-    $49 = (($47) - ($48))|0;
-    $4 = $49;
-    break;
-   }
-   else if ((label|0) == 13) {
-    $4 = -1;
-    break;
-   }
-  }
- } while(0);
- $56 = $4;
- STACKTOP = sp;return ($56|0);
-}
-function _mrb_str_new_empty($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $$byval_copy = sp + 8|0;
- $3 = $1;
- $5 = $3;
- $6 = (_str_new($5,0,0)|0);
- $4 = $6;
- $7 = $3;
- $8 = $4;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
- _str_with_class($7,$8,$$byval_copy);
- $9 = $4;
- _mrb_obj_value_260($0,$9);
- STACKTOP = sp;return;
-}
-function _mrb_memsearch_qs($0,$1,$2,$3) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;
- var $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0;
- var $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0;
- var $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 1072|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(1072|0);
- $13 = sp;
- $5 = $0;
- $6 = $1;
- $7 = $2;
- $8 = $3;
- $14 = $5;
- $9 = $14;
- $15 = $5;
- $16 = $6;
- $17 = (($15) + ($16)|0);
- $10 = $17;
- $18 = $7;
- $11 = $18;
- $12 = 0;
- while(1) {
-  $19 = $12;
-  $20 = ($19|0)<(256);
-  if (!($20)) {
-   break;
-  }
-  $21 = $6;
-  $22 = (($21) + 1)|0;
-  $23 = $12;
-  $24 = (($13) + ($23<<2)|0);
-  HEAP32[$24>>2] = $22;
-  $25 = $12;
-  $26 = (($25) + 1)|0;
-  $12 = $26;
- }
- while(1) {
-  $27 = $9;
-  $28 = $10;
-  $29 = ($27>>>0)<($28>>>0);
-  if (!($29)) {
-   break;
-  }
-  $30 = $10;
-  $31 = $9;
-  $32 = $30;
-  $33 = $31;
-  $34 = (($32) - ($33))|0;
-  $35 = $9;
-  $36 = HEAP8[$35>>0]|0;
-  $37 = $36&255;
-  $38 = (($13) + ($37<<2)|0);
-  HEAP32[$38>>2] = $34;
-  $39 = $9;
-  $40 = ((($39)) + 1|0);
-  $9 = $40;
- }
- while(1) {
-  $41 = $11;
-  $42 = $6;
-  $43 = (($41) + ($42)|0);
-  $44 = $7;
-  $45 = $8;
-  $46 = (($44) + ($45)|0);
-  $47 = ($43>>>0)<=($46>>>0);
-  if (!($47)) {
-   label = 11;
-   break;
-  }
-  $48 = $5;
-  $49 = HEAP8[$48>>0]|0;
-  $50 = $49&255;
-  $51 = $11;
-  $52 = HEAP8[$51>>0]|0;
-  $53 = $52&255;
-  $54 = ($50|0)==($53|0);
-  if ($54) {
-   $55 = $5;
-   $56 = $11;
-   $57 = $6;
-   $58 = (_memcmp($55,$56,$57)|0);
-   $59 = ($58|0)==(0);
-   if ($59) {
-    label = 9;
-    break;
-   }
-  }
-  $65 = $11;
-  $66 = $6;
-  $67 = (($65) + ($66)|0);
-  $68 = HEAP8[$67>>0]|0;
-  $69 = $68&255;
-  $70 = (($13) + ($69<<2)|0);
-  $71 = HEAP32[$70>>2]|0;
-  $72 = $11;
-  $73 = (($72) + ($71)|0);
-  $11 = $73;
- }
- if ((label|0) == 9) {
-  $60 = $11;
-  $61 = $7;
-  $62 = $60;
-  $63 = $61;
-  $64 = (($62) - ($63))|0;
-  $4 = $64;
-  $74 = $4;
-  STACKTOP = sp;return ($74|0);
- }
- else if ((label|0) == 11) {
-  $4 = -1;
-  $74 = $4;
-  STACKTOP = sp;return ($74|0);
- }
- return (0)|0;
-}
-function _str_rindex($0,$1,$2,$3) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;
- var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0;
- var $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0;
- var $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0;
- var $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0;
- var $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0;
- var $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $5 = $0;
- $6 = $3;
- $12 = HEAP32[$1>>2]|0;
- $10 = $12;
- $13 = HEAP32[$2>>2]|0;
- $14 = HEAP32[$13>>2]|0;
- $15 = $14 >>> 11;
- $16 = $15 & 8;
- $17 = ($16|0)!=(0);
- $18 = HEAP32[$2>>2]|0;
- if ($17) {
-  $19 = HEAP32[$18>>2]|0;
-  $20 = $19 >>> 11;
-  $21 = $20 & 496;
-  $22 = $21 >> 4;
-  $25 = $22;
- } else {
-  $23 = ((($18)) + 12|0);
-  $24 = HEAP32[$23>>2]|0;
-  $25 = $24;
- }
- $11 = $25;
- $26 = $10;
- $27 = HEAP32[$26>>2]|0;
- $28 = $27 >>> 11;
- $29 = $28 & 8;
- $30 = ($29|0)!=(0);
- $31 = $10;
- if ($30) {
-  $32 = HEAP32[$31>>2]|0;
-  $33 = $32 >>> 11;
-  $34 = $33 & 496;
-  $35 = $34 >> 4;
-  $40 = $35;
- } else {
-  $36 = ((($31)) + 12|0);
-  $37 = HEAP32[$36>>2]|0;
-  $40 = $37;
- }
- $38 = $11;
- $39 = ($40|0)<($38|0);
- if ($39) {
-  $4 = -1;
-  $131 = $4;
-  STACKTOP = sp;return ($131|0);
- }
- $41 = $10;
- $42 = HEAP32[$41>>2]|0;
- $43 = $42 >>> 11;
- $44 = $43 & 8;
- $45 = ($44|0)!=(0);
- $46 = $10;
- if ($45) {
-  $47 = HEAP32[$46>>2]|0;
-  $48 = $47 >>> 11;
-  $49 = $48 & 496;
-  $50 = $49 >> 4;
-  $55 = $50;
- } else {
-  $51 = ((($46)) + 12|0);
-  $52 = HEAP32[$51>>2]|0;
-  $55 = $52;
- }
- $53 = $6;
- $54 = (($55) - ($53))|0;
- $56 = $11;
- $57 = ($54|0)<($56|0);
- if ($57) {
-  $58 = $10;
-  $59 = HEAP32[$58>>2]|0;
-  $60 = $59 >>> 11;
-  $61 = $60 & 8;
-  $62 = ($61|0)!=(0);
-  $63 = $10;
-  if ($62) {
-   $64 = HEAP32[$63>>2]|0;
-   $65 = $64 >>> 11;
-   $66 = $65 & 496;
-   $67 = $66 >> 4;
-   $72 = $67;
-  } else {
-   $68 = ((($63)) + 12|0);
-   $69 = HEAP32[$68>>2]|0;
-   $72 = $69;
-  }
-  $70 = $11;
-  $71 = (($72) - ($70))|0;
-  $6 = $71;
- }
- $73 = $10;
- $74 = HEAP32[$73>>2]|0;
- $75 = $74 >>> 11;
- $76 = $75 & 8;
- $77 = ($76|0)!=(0);
- $78 = $10;
- $79 = ((($78)) + 12|0);
- if ($77) {
-  $82 = $79;
- } else {
-  $80 = ((($79)) + 8|0);
-  $81 = HEAP32[$80>>2]|0;
-  $82 = $81;
- }
- $8 = $82;
- $83 = $10;
- $84 = HEAP32[$83>>2]|0;
- $85 = $84 >>> 11;
- $86 = $85 & 8;
- $87 = ($86|0)!=(0);
- $88 = $10;
- $89 = ((($88)) + 12|0);
- if ($87) {
-  $94 = $89;
- } else {
-  $90 = ((($89)) + 8|0);
-  $91 = HEAP32[$90>>2]|0;
-  $94 = $91;
- }
- $92 = $6;
- $93 = (($94) + ($92)|0);
- $7 = $93;
- $95 = HEAP32[$2>>2]|0;
- $96 = HEAP32[$95>>2]|0;
- $97 = $96 >>> 11;
- $98 = $97 & 8;
- $99 = ($98|0)!=(0);
- $100 = HEAP32[$2>>2]|0;
- $101 = ((($100)) + 12|0);
- if ($99) {
-  $104 = $101;
- } else {
-  $102 = ((($101)) + 8|0);
-  $103 = HEAP32[$102>>2]|0;
-  $104 = $103;
- }
- $9 = $104;
- $105 = $11;
- $106 = ($105|0)!=(0);
- if (!($106)) {
-  $130 = $6;
-  $4 = $130;
-  $131 = $4;
-  STACKTOP = sp;return ($131|0);
- }
- while(1) {
-  $107 = $8;
-  $108 = $7;
-  $109 = ($107>>>0)<=($108>>>0);
-  if (!($109)) {
-   label = 34;
-   break;
-  }
-  $110 = $7;
-  $111 = $9;
-  $112 = $11;
-  $113 = (_memcmp($110,$111,$112)|0);
-  $114 = ($113|0)==(0);
-  $115 = $7;
-  if ($114) {
-   break;
-  }
-  $129 = ((($115)) + -1|0);
-  $7 = $129;
- }
- if ((label|0) == 34) {
-  $4 = -1;
-  $131 = $4;
-  STACKTOP = sp;return ($131|0);
- }
- $116 = $10;
- $117 = HEAP32[$116>>2]|0;
- $118 = $117 >>> 11;
- $119 = $118 & 8;
- $120 = ($119|0)!=(0);
- $121 = $10;
- $122 = ((($121)) + 12|0);
- if ($120) {
-  $127 = $122;
- } else {
-  $123 = ((($122)) + 8|0);
-  $124 = HEAP32[$123>>2]|0;
-  $127 = $124;
- }
- $125 = $115;
- $126 = $127;
- $128 = (($125) - ($126))|0;
- $4 = $128;
- $131 = $4;
- STACKTOP = sp;return ($131|0);
-}
-function _bytes2chars($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0;
- var $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $2 = $0;
- $3 = $1;
- $4 = 0;
- $5 = 0;
- while(1) {
-  $7 = $5;
-  $8 = $3;
-  $9 = ($7|0)<($8|0);
-  if (!($9)) {
-   break;
-  }
-  $10 = $2;
-  $11 = $2;
-  $12 = $3;
-  $13 = (($11) + ($12)|0);
-  $14 = (_utf8len($10,$13)|0);
-  $6 = $14;
-  $15 = $6;
-  $16 = $5;
-  $17 = (($16) + ($15))|0;
-  $5 = $17;
-  $18 = $6;
-  $19 = $2;
-  $20 = (($19) + ($18)|0);
-  $2 = $20;
-  $21 = $4;
-  $22 = (($21) + 1)|0;
-  $4 = $22;
- }
- $23 = $4;
- STACKTOP = sp;return ($23|0);
-}
-function _str_index($0,$1,$2,$3) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $12 = 0;
- var $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $30 = 0, $31 = 0, $32 = 0;
- var $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0;
- var $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0;
- var $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0;
- var $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $5 = $0;
- $6 = $3;
- $12 = HEAP32[$1>>2]|0;
- $13 = HEAP32[$12>>2]|0;
- $14 = $13 >>> 11;
- $15 = $14 & 8;
- $16 = ($15|0)!=(0);
- $17 = HEAP32[$1>>2]|0;
- if ($16) {
-  $18 = HEAP32[$17>>2]|0;
-  $19 = $18 >>> 11;
-  $20 = $19 & 496;
-  $21 = $20 >> 4;
-  $24 = $21;
- } else {
-  $22 = ((($17)) + 12|0);
-  $23 = HEAP32[$22>>2]|0;
-  $24 = $23;
- }
- $10 = $24;
- $25 = HEAP32[$2>>2]|0;
- $26 = HEAP32[$25>>2]|0;
- $27 = $26 >>> 11;
- $28 = $27 & 8;
- $29 = ($28|0)!=(0);
- $30 = HEAP32[$2>>2]|0;
- if ($29) {
-  $31 = HEAP32[$30>>2]|0;
-  $32 = $31 >>> 11;
-  $33 = $32 & 496;
-  $34 = $33 >> 4;
-  $37 = $34;
- } else {
-  $35 = ((($30)) + 12|0);
-  $36 = HEAP32[$35>>2]|0;
-  $37 = $36;
- }
- $11 = $37;
- $38 = $6;
- $39 = ($38|0)<(0);
- if ($39) {
-  $40 = $10;
-  $41 = $6;
-  $42 = (($41) + ($40))|0;
-  $6 = $42;
-  $43 = $6;
-  $44 = ($43|0)<(0);
-  if ($44) {
-   $4 = -1;
-   $116 = $4;
-   STACKTOP = sp;return ($116|0);
-  }
- }
- $45 = $10;
- $46 = $6;
- $47 = (($45) - ($46))|0;
- $48 = $11;
- $49 = ($47|0)<($48|0);
- if ($49) {
-  $4 = -1;
-  $116 = $4;
-  STACKTOP = sp;return ($116|0);
- }
- $50 = HEAP32[$1>>2]|0;
- $51 = HEAP32[$50>>2]|0;
- $52 = $51 >>> 11;
- $53 = $52 & 8;
- $54 = ($53|0)!=(0);
- $55 = HEAP32[$1>>2]|0;
- $56 = ((($55)) + 12|0);
- if ($54) {
-  $59 = $56;
- } else {
-  $57 = ((($56)) + 8|0);
-  $58 = HEAP32[$57>>2]|0;
-  $59 = $58;
- }
- $8 = $59;
- $60 = $6;
- $61 = ($60|0)!=(0);
- if ($61) {
-  $62 = $6;
-  $63 = $8;
-  $64 = (($63) + ($62)|0);
-  $8 = $64;
- }
- $65 = $11;
- $66 = ($65|0)==(0);
- if ($66) {
-  $67 = $6;
-  $4 = $67;
-  $116 = $4;
-  STACKTOP = sp;return ($116|0);
- }
- $68 = HEAP32[$2>>2]|0;
- $69 = HEAP32[$68>>2]|0;
- $70 = $69 >>> 11;
- $71 = $70 & 8;
- $72 = ($71|0)!=(0);
- $73 = HEAP32[$2>>2]|0;
- $74 = ((($73)) + 12|0);
- if ($72) {
-  $77 = $74;
- } else {
-  $75 = ((($74)) + 8|0);
-  $76 = HEAP32[$75>>2]|0;
-  $77 = $76;
- }
- $9 = $77;
- $78 = HEAP32[$2>>2]|0;
- $79 = HEAP32[$78>>2]|0;
- $80 = $79 >>> 11;
- $81 = $80 & 8;
- $82 = ($81|0)!=(0);
- $83 = HEAP32[$2>>2]|0;
- if ($82) {
-  $84 = HEAP32[$83>>2]|0;
-  $85 = $84 >>> 11;
-  $86 = $85 & 496;
-  $87 = $86 >> 4;
-  $90 = $87;
- } else {
-  $88 = ((($83)) + 12|0);
-  $89 = HEAP32[$88>>2]|0;
-  $90 = $89;
- }
- $11 = $90;
- $91 = HEAP32[$1>>2]|0;
- $92 = HEAP32[$91>>2]|0;
- $93 = $92 >>> 11;
- $94 = $93 & 8;
- $95 = ($94|0)!=(0);
- $96 = HEAP32[$1>>2]|0;
- if ($95) {
-  $97 = HEAP32[$96>>2]|0;
-  $98 = $97 >>> 11;
-  $99 = $98 & 496;
-  $100 = $99 >> 4;
-  $105 = $100;
- } else {
-  $101 = ((($96)) + 12|0);
-  $102 = HEAP32[$101>>2]|0;
-  $105 = $102;
- }
- $103 = $6;
- $104 = (($105) - ($103))|0;
- $10 = $104;
- $106 = $9;
- $107 = $11;
- $108 = $8;
- $109 = $10;
- $110 = (_mrb_memsearch($106,$107,$108,$109)|0);
- $7 = $110;
- $111 = $7;
- $112 = ($111|0)<(0);
- $113 = $7;
- if ($112) {
-  $4 = $113;
-  $116 = $4;
-  STACKTOP = sp;return ($116|0);
- } else {
-  $114 = $6;
-  $115 = (($113) + ($114))|0;
-  $4 = $115;
-  $116 = $4;
-  STACKTOP = sp;return ($116|0);
- }
- return (0)|0;
-}
-function _mrb_bool_value_340($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = sp;
- $2 = $1;
- $4 = $2;
- $5 = $4&255;
- $6 = ($5|0)!=(0);
- $7 = $6 ? 2 : 0;
- $8 = ((($3)) + 4|0);
- HEAP32[$8>>2] = $7;
- HEAP32[$3>>2] = 1;
- ;HEAP32[$0>>2]=HEAP32[$3>>2]|0;HEAP32[$0+4>>2]=HEAP32[$3+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_str_aref($0,$1,$2,$3) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $$byval_copy2 = 0, $$byval_copy3 = 0, $$byval_copy4 = 0, $$byval_copy5 = 0, $$byval_copy6 = 0, $$byval_copy7 = 0, $$byval_copy8 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0;
- var $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0;
- var $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $6 = 0, $7 = 0;
- var $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 112|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(112|0);
- $$byval_copy8 = sp + 96|0;
- $$byval_copy7 = sp + 88|0;
- $$byval_copy6 = sp + 80|0;
- $$byval_copy5 = sp + 72|0;
- $$byval_copy4 = sp + 64|0;
- $$byval_copy3 = sp + 56|0;
- $$byval_copy2 = sp + 48|0;
- $$byval_copy1 = sp + 40|0;
- $$byval_copy = sp + 32|0;
- $6 = sp + 16|0;
- $7 = sp + 12|0;
- $8 = sp + 8|0;
- $9 = sp;
- $4 = $1;
- $10 = $4;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$3>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$3+4>>2]|0;
- _mrb_regexp_check($10,$$byval_copy);
- $11 = ((($3)) + 4|0);
- $12 = HEAP32[$11>>2]|0;
- switch ($12|0) {
- case 3:  {
-  $13 = HEAP32[$3>>2]|0;
-  $5 = $13;
-  break;
- }
- case 16:  {
-  $35 = $4;
-  ;HEAP32[$$byval_copy2>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy2+4>>2]=HEAP32[$2+4>>2]|0;
-  ;HEAP32[$$byval_copy3>>2]=HEAP32[$3>>2]|0;HEAP32[$$byval_copy3+4>>2]=HEAP32[$3+4>>2]|0;
-  $36 = (_str_index($35,$$byval_copy2,$$byval_copy3,0)|0);
-  $37 = ($36|0)!=(-1);
-  if ($37) {
-   $38 = $4;
-   ;HEAP32[$$byval_copy4>>2]=HEAP32[$3>>2]|0;HEAP32[$$byval_copy4+4>>2]=HEAP32[$3+4>>2]|0;
-   _mrb_str_dup($0,$38,$$byval_copy4);
-   STACKTOP = sp;return;
-  } else {
-   _mrb_nil_value_283($0);
-   STACKTOP = sp;return;
-  }
-  break;
- }
- case 17:  {
-  ;HEAP32[$$byval_copy5>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy5+4>>2]=HEAP32[$2+4>>2]|0;
-  $39 = (_utf8_strlen($$byval_copy5,-1)|0);
-  HEAP32[$8>>2] = $39;
-  $40 = $4;
-  $41 = HEAP32[$8>>2]|0;
-  ;HEAP32[$$byval_copy6>>2]=HEAP32[$3>>2]|0;HEAP32[$$byval_copy6+4>>2]=HEAP32[$3+4>>2]|0;
-  $42 = (_mrb_range_beg_len($40,$$byval_copy6,$7,$8,$41)|0);
-  $43 = ($42<<24>>24)!=(0);
-  if ($43) {
-   $44 = $4;
-   $45 = HEAP32[$7>>2]|0;
-   $46 = HEAP32[$8>>2]|0;
-   ;HEAP32[$$byval_copy7>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy7+4>>2]=HEAP32[$2+4>>2]|0;
-   _str_subseq($0,$44,$$byval_copy7,$45,$46);
-   STACKTOP = sp;return;
-  } else {
-   _mrb_nil_value_283($0);
-   STACKTOP = sp;return;
-  }
-  break;
- }
- default: {
-  $47 = $4;
-  ;HEAP32[$$byval_copy8>>2]=HEAP32[$3>>2]|0;HEAP32[$$byval_copy8+4>>2]=HEAP32[$3+4>>2]|0;
-  _mrb_Integer($9,$47,$$byval_copy8);
-  ;HEAP32[$3>>2]=HEAP32[$9>>2]|0;HEAP32[$3+4>>2]=HEAP32[$9+4>>2]|0;
-  $48 = ((($3)) + 4|0);
-  $49 = HEAP32[$48>>2]|0;
-  $50 = ($49|0)==(0);
-  if ($50) {
-   $51 = HEAP32[$3>>2]|0;
-   $52 = ($51|0)!=(0);
-   if (!($52)) {
-    $53 = $4;
-    $54 = $4;
-    $55 = (_mrb_class_get($54,69204)|0);
-    _mrb_raise($53,$55,56408);
-    // unreachable;
-   }
-  }
-  $56 = HEAP32[$3>>2]|0;
-  $5 = $56;
- }
- }
- $14 = $4;
- $15 = $5;
- ;HEAP32[$$byval_copy1>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$2+4>>2]|0;
- _str_substr($6,$14,$$byval_copy1,$15,1);
- ;HEAP32[$2>>2]=HEAP32[$6>>2]|0;HEAP32[$2+4>>2]=HEAP32[$6+4>>2]|0;
- $16 = ((($2)) + 4|0);
- $17 = HEAP32[$16>>2]|0;
- $18 = ($17|0)==(0);
- if ($18) {
-  $19 = HEAP32[$2>>2]|0;
-  $20 = ($19|0)!=(0);
-  if ($20) {
-   label = 5;
-  }
- } else {
-  label = 5;
- }
- if ((label|0) == 5) {
-  $21 = HEAP32[$2>>2]|0;
-  $22 = HEAP32[$21>>2]|0;
-  $23 = $22 >>> 11;
-  $24 = $23 & 8;
-  $25 = ($24|0)!=(0);
-  $26 = HEAP32[$2>>2]|0;
-  if ($25) {
-   $27 = HEAP32[$26>>2]|0;
-   $28 = $27 >>> 11;
-   $29 = $28 & 496;
-   $30 = $29 >> 4;
-   $34 = $30;
-  } else {
-   $31 = ((($26)) + 12|0);
-   $32 = HEAP32[$31>>2]|0;
-   $34 = $32;
-  }
-  $33 = ($34|0)==(0);
-  if ($33) {
-   _mrb_nil_value_283($0);
-   STACKTOP = sp;return;
-  }
- }
- ;HEAP32[$0>>2]=HEAP32[$2>>2]|0;HEAP32[$0+4>>2]=HEAP32[$2+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _kh_alloc_n2s($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;
- var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $2 = $0;
- $3 = $1;
- $7 = $3;
- $8 = HEAP32[$7>>2]|0;
- $4 = $8;
- $5 = 4;
- $9 = $2;
- $10 = $4;
- $11 = $10;
- $12 = (($11>>>0) / 4)&-1;
- $13 = $5;
- $14 = $4;
- $15 = Math_imul($13, $14)|0;
- $16 = (($12) + ($15))|0;
- $17 = (_mrb_malloc($9,$16)|0);
- $6 = $17;
- $18 = $3;
- $19 = ((($18)) + 8|0);
- HEAP32[$19>>2] = 0;
- $20 = $3;
- $21 = ((($20)) + 4|0);
- HEAP32[$21>>2] = 0;
- $22 = $6;
- $23 = $3;
- $24 = ((($23)) + 16|0);
- HEAP32[$24>>2] = $22;
- $25 = $3;
- $26 = ((($25)) + 20|0);
- HEAP32[$26>>2] = 0;
- $27 = $6;
- $28 = $5;
- $29 = $4;
- $30 = Math_imul($28, $29)|0;
- $31 = (($27) + ($30)|0);
- $32 = $3;
- $33 = ((($32)) + 12|0);
- HEAP32[$33>>2] = $31;
- $34 = $3;
- $35 = ((($34)) + 12|0);
- $36 = HEAP32[$35>>2]|0;
- $37 = $4;
- $38 = (($37>>>0) / 4)&-1;
- _kh_fill_flags_342($36,-86,$38);
- STACKTOP = sp;return;
-}
-function _kh_fill_flags_342($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $0;
- $4 = $1;
- $5 = $2;
- while(1) {
-  $6 = $5;
-  $7 = (($6) + -1)|0;
-  $5 = $7;
-  $8 = ($6>>>0)>(0);
-  if (!($8)) {
-   break;
-  }
-  $9 = $4;
-  $10 = $3;
-  $11 = ((($10)) + 1|0);
-  $3 = $11;
-  HEAP8[$10>>0] = $9;
- }
- STACKTOP = sp;return;
-}
-function _kh_init_n2s_size($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;
- var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $5 = $2;
- $6 = (_mrb_calloc($5,1,24)|0);
- $4 = $6;
- $7 = $3;
- $8 = ($7>>>0)<(8);
- if ($8) {
-  $3 = 8;
- }
- $9 = $3;
- $10 = (($9) + -1)|0;
- $3 = $10;
- $11 = $3;
- $12 = $11 >>> 1;
- $13 = $3;
- $14 = $13 | $12;
- $3 = $14;
- $15 = $3;
- $16 = $15 >>> 2;
- $17 = $3;
- $18 = $17 | $16;
- $3 = $18;
- $19 = $3;
- $20 = $19 >>> 4;
- $21 = $3;
- $22 = $21 | $20;
- $3 = $22;
- $23 = $3;
- $24 = $23 >>> 8;
- $25 = $3;
- $26 = $25 | $24;
- $3 = $26;
- $27 = $3;
- $28 = $27 >>> 16;
- $29 = $3;
- $30 = $29 | $28;
- $3 = $30;
- $31 = $3;
- $32 = (($31) + 1)|0;
- $3 = $32;
- $33 = $3;
- $34 = $4;
- HEAP32[$34>>2] = $33;
- $35 = $2;
- $36 = $4;
- _kh_alloc_n2s($35,$36);
- $37 = $4;
- STACKTOP = sp;return ($37|0);
-}
-function _kh_init_n2s($0) {
- $0 = $0|0;
- var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $1 = $0;
- $2 = $1;
- $3 = (_kh_init_n2s_size($2,8)|0);
- STACKTOP = sp;return ($3|0);
-}
-function _kh_destroy_n2s($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $4 = $3;
- $5 = ($4|0)!=(0|0);
- if (!($5)) {
-  STACKTOP = sp;return;
- }
- $6 = $2;
- $7 = $3;
- $8 = ((($7)) + 16|0);
- $9 = HEAP32[$8>>2]|0;
- _mrb_free($6,$9);
- $10 = $2;
- $11 = $3;
- _mrb_free($10,$11);
- STACKTOP = sp;return;
-}
-function _kh_get_n2s($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0;
- var $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0;
- var $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0;
- var $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0;
- var $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0;
- var $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $4 = $0;
- $5 = $1;
- $6 = $2;
- $9 = $4;
- $10 = $6;
- $11 = (_sym_hash_func($9,$10)|0);
- $12 = $5;
- $13 = HEAP32[$12>>2]|0;
- $14 = (($13) - 1)|0;
- $15 = $11 & $14;
- $7 = $15;
- $8 = 0;
- while(1) {
-  $16 = $5;
-  $17 = ((($16)) + 12|0);
-  $18 = HEAP32[$17>>2]|0;
-  $19 = $7;
-  $20 = (($19>>>0) / 4)&-1;
-  $21 = (($18) + ($20)|0);
-  $22 = HEAP8[$21>>0]|0;
-  $23 = $22&255;
-  $24 = $7;
-  $25 = (($24>>>0) % 4)&-1;
-  $26 = (56449 + ($25)|0);
-  $27 = HEAP8[$26>>0]|0;
-  $28 = $27&255;
-  $29 = $23 & $28;
-  $30 = ($29|0)!=(0);
-  $31 = $30 ^ 1;
-  $32 = $5;
-  if (!($31)) {
-   label = 8;
-   break;
-  }
-  $33 = ((($32)) + 12|0);
-  $34 = HEAP32[$33>>2]|0;
-  $35 = $7;
-  $36 = (($35>>>0) / 4)&-1;
-  $37 = (($34) + ($36)|0);
-  $38 = HEAP8[$37>>0]|0;
-  $39 = $38&255;
-  $40 = $7;
-  $41 = (($40>>>0) % 4)&-1;
-  $42 = (56453 + ($41)|0);
-  $43 = HEAP8[$42>>0]|0;
-  $44 = $43&255;
-  $45 = $39 & $44;
-  $46 = ($45|0)!=(0);
-  if (!($46)) {
-   $47 = $4;
-   $48 = ((($47)) + 560|0);
-   $49 = HEAP32[$48>>2]|0;
-   $50 = $5;
-   $51 = ((($50)) + 16|0);
-   $52 = HEAP32[$51>>2]|0;
-   $53 = $7;
-   $54 = (($52) + ($53<<2)|0);
-   $55 = HEAP32[$54>>2]|0;
-   $56 = (($49) + ($55<<3)|0);
-   $57 = ((($56)) + 2|0);
-   $58 = HEAP16[$57>>1]|0;
-   $59 = $58&65535;
-   $60 = $4;
-   $61 = ((($60)) + 560|0);
-   $62 = HEAP32[$61>>2]|0;
-   $63 = $6;
-   $64 = (($62) + ($63<<3)|0);
-   $65 = ((($64)) + 2|0);
-   $66 = HEAP16[$65>>1]|0;
-   $67 = $66&65535;
-   $68 = ($59|0)==($67|0);
-   if ($68) {
-    $69 = $4;
-    $70 = ((($69)) + 560|0);
-    $71 = HEAP32[$70>>2]|0;
-    $72 = $5;
-    $73 = ((($72)) + 16|0);
-    $74 = HEAP32[$73>>2]|0;
-    $75 = $7;
-    $76 = (($74) + ($75<<2)|0);
-    $77 = HEAP32[$76>>2]|0;
-    $78 = (($71) + ($77<<3)|0);
-    $79 = ((($78)) + 4|0);
-    $80 = HEAP32[$79>>2]|0;
-    $81 = $4;
-    $82 = ((($81)) + 560|0);
-    $83 = HEAP32[$82>>2]|0;
-    $84 = $6;
-    $85 = (($83) + ($84<<3)|0);
-    $86 = ((($85)) + 4|0);
-    $87 = HEAP32[$86>>2]|0;
-    $88 = $4;
-    $89 = ((($88)) + 560|0);
-    $90 = HEAP32[$89>>2]|0;
-    $91 = $5;
-    $92 = ((($91)) + 16|0);
-    $93 = HEAP32[$92>>2]|0;
-    $94 = $7;
-    $95 = (($93) + ($94<<2)|0);
-    $96 = HEAP32[$95>>2]|0;
-    $97 = (($90) + ($96<<3)|0);
-    $98 = ((($97)) + 2|0);
-    $99 = HEAP16[$98>>1]|0;
-    $100 = $99&65535;
-    $101 = (_memcmp($80,$87,$100)|0);
-    $102 = ($101|0)==(0);
-    if ($102) {
-     label = 6;
-     break;
-    }
-   }
-  }
-  $104 = $7;
-  $105 = $8;
-  $106 = (($105) + 1)|0;
-  $8 = $106;
-  $107 = (($104) + ($106))|0;
-  $108 = $5;
-  $109 = HEAP32[$108>>2]|0;
-  $110 = (($109) - 1)|0;
-  $111 = $107 & $110;
-  $7 = $111;
- }
- if ((label|0) == 6) {
-  $103 = $7;
-  $3 = $103;
-  $113 = $3;
-  STACKTOP = sp;return ($113|0);
- }
- else if ((label|0) == 8) {
-  $112 = HEAP32[$32>>2]|0;
-  $3 = $112;
-  $113 = $3;
-  STACKTOP = sp;return ($113|0);
- }
- return (0)|0;
-}
-function _sym_hash_func($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;
- var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $2 = $0;
- $3 = $1;
- $4 = 0;
- $8 = $2;
- $9 = ((($8)) + 560|0);
- $10 = HEAP32[$9>>2]|0;
- $11 = $3;
- $12 = (($10) + ($11<<3)|0);
- $13 = ((($12)) + 2|0);
- $14 = HEAP16[$13>>1]|0;
- $15 = $14&65535;
- $6 = $15;
- $16 = $2;
- $17 = ((($16)) + 560|0);
- $18 = HEAP32[$17>>2]|0;
- $19 = $3;
- $20 = (($18) + ($19<<3)|0);
- $21 = ((($20)) + 4|0);
- $22 = HEAP32[$21>>2]|0;
- $7 = $22;
- $5 = 0;
- while(1) {
-  $23 = $5;
-  $24 = $6;
-  $25 = ($23>>>0)<($24>>>0);
-  $26 = $4;
-  if (!($25)) {
-   break;
-  }
-  $27 = $26 << 5;
-  $28 = $4;
-  $29 = (($27) - ($28))|0;
-  $30 = $7;
-  $31 = ((($30)) + 1|0);
-  $7 = $31;
-  $32 = HEAP8[$30>>0]|0;
-  $33 = $32 << 24 >> 24;
-  $34 = (($29) + ($33))|0;
-  $4 = $34;
-  $35 = $5;
-  $36 = (($35) + 1)|0;
-  $5 = $36;
- }
- STACKTOP = sp;return ($26|0);
-}
-function _kh_resize_n2s($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$ = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;
- var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0;
- var $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0;
- var $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);
- $6 = sp + 24|0;
- $3 = $0;
- $4 = $1;
- $5 = $2;
- $13 = $5;
- $14 = ($13>>>0)<(8);
- $$ = $14 ? 8 : $2;
- $5 = $$;
- $15 = $5;
- $16 = (($15) + -1)|0;
- $5 = $16;
- $17 = $5;
- $18 = $17 >>> 1;
- $19 = $5;
- $20 = $19 | $18;
- $5 = $20;
- $21 = $5;
- $22 = $21 >>> 2;
- $23 = $5;
- $24 = $23 | $22;
- $5 = $24;
- $25 = $5;
- $26 = $25 >>> 4;
- $27 = $5;
- $28 = $27 | $26;
- $5 = $28;
- $29 = $5;
- $30 = $29 >>> 8;
- $31 = $5;
- $32 = $31 | $30;
- $5 = $32;
- $33 = $5;
- $34 = $33 >>> 16;
- $35 = $5;
- $36 = $35 | $34;
- $5 = $36;
- $37 = $5;
- $38 = (($37) + 1)|0;
- $5 = $38;
- $39 = $4;
- $40 = ((($39)) + 12|0);
- $41 = HEAP32[$40>>2]|0;
- $7 = $41;
- $42 = $4;
- $43 = ((($42)) + 16|0);
- $44 = HEAP32[$43>>2]|0;
- $8 = $44;
- $45 = $4;
- $46 = ((($45)) + 20|0);
- $47 = HEAP32[$46>>2]|0;
- $9 = $47;
- $48 = $4;
- $49 = HEAP32[$48>>2]|0;
- $10 = $49;
- $50 = $5;
- HEAP32[$6>>2] = $50;
- $51 = $3;
- _kh_alloc_n2s($51,$6);
- $11 = 0;
- while(1) {
-  $52 = $11;
-  $53 = $10;
-  $54 = ($52>>>0)<($53>>>0);
-  if (!($54)) {
-   break;
-  }
-  $55 = $7;
-  $56 = $11;
-  $57 = (($56>>>0) / 4)&-1;
-  $58 = (($55) + ($57)|0);
-  $59 = HEAP8[$58>>0]|0;
-  $60 = $59&255;
-  $61 = $11;
-  $62 = (($61>>>0) % 4)&-1;
-  $63 = (56457 + ($62)|0);
-  $64 = HEAP8[$63>>0]|0;
-  $65 = $64&255;
-  $66 = $60 & $65;
-  $67 = ($66|0)!=(0);
-  if (!($67)) {
-   $68 = $3;
-   $69 = $8;
-   $70 = $11;
-   $71 = (($69) + ($70<<2)|0);
-   $72 = HEAP32[$71>>2]|0;
-   $73 = (_kh_put_n2s($68,$6,$72,0)|0);
-   $12 = $73;
-  }
-  $74 = $11;
-  $75 = (($74) + 1)|0;
-  $11 = $75;
- }
- $76 = $4;
- ;HEAP32[$76>>2]=HEAP32[$6>>2]|0;HEAP32[$76+4>>2]=HEAP32[$6+4>>2]|0;HEAP32[$76+8>>2]=HEAP32[$6+8>>2]|0;HEAP32[$76+12>>2]=HEAP32[$6+12>>2]|0;HEAP32[$76+16>>2]=HEAP32[$6+16>>2]|0;HEAP32[$76+20>>2]=HEAP32[$6+20>>2]|0;
- $77 = $3;
- $78 = $8;
- _mrb_free($77,$78);
- STACKTOP = sp;return;
-}
-function _kh_put_n2s($0,$1,$2,$3) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;
- var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0;
- var $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0, $152 = 0, $153 = 0;
- var $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0, $170 = 0, $171 = 0;
- var $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0, $188 = 0, $189 = 0, $19 = 0;
- var $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0, $197 = 0, $198 = 0, $199 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0, $204 = 0, $205 = 0, $21 = 0, $22 = 0, $23 = 0;
- var $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0;
- var $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0;
- var $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0;
- var $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0;
- var $98 = 0, $99 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $5 = $0;
- $6 = $1;
- $7 = $2;
- $8 = $3;
- $11 = 0;
- $12 = $6;
- $13 = ((($12)) + 8|0);
- $14 = HEAP32[$13>>2]|0;
- $15 = $6;
- $16 = HEAP32[$15>>2]|0;
- $17 = $16 >>> 2;
- $18 = $6;
- $19 = HEAP32[$18>>2]|0;
- $20 = $19 >>> 1;
- $21 = $17 | $20;
- $22 = ($14>>>0)>=($21>>>0);
- if ($22) {
-  $23 = $5;
-  $24 = $6;
-  $25 = $6;
-  $26 = HEAP32[$25>>2]|0;
-  $27 = $26<<1;
-  _kh_resize_n2s($23,$24,$27);
- }
- $28 = $5;
- $29 = $7;
- $30 = (_sym_hash_func($28,$29)|0);
- $31 = $6;
- $32 = HEAP32[$31>>2]|0;
- $33 = (($32) - 1)|0;
- $34 = $30 & $33;
- $9 = $34;
- $35 = $6;
- $36 = HEAP32[$35>>2]|0;
- $10 = $36;
- while(1) {
-  $37 = $6;
-  $38 = ((($37)) + 12|0);
-  $39 = HEAP32[$38>>2]|0;
-  $40 = $9;
-  $41 = (($40>>>0) / 4)&-1;
-  $42 = (($39) + ($41)|0);
-  $43 = HEAP8[$42>>0]|0;
-  $44 = $43&255;
-  $45 = $9;
-  $46 = (($45>>>0) % 4)&-1;
-  $47 = (56449 + ($46)|0);
-  $48 = HEAP8[$47>>0]|0;
-  $49 = $48&255;
-  $50 = $44 & $49;
-  $51 = ($50|0)!=(0);
-  $52 = $51 ^ 1;
-  if (!($52)) {
-   break;
-  }
-  $53 = $6;
-  $54 = ((($53)) + 12|0);
-  $55 = HEAP32[$54>>2]|0;
-  $56 = $9;
-  $57 = (($56>>>0) / 4)&-1;
-  $58 = (($55) + ($57)|0);
-  $59 = HEAP8[$58>>0]|0;
-  $60 = $59&255;
-  $61 = $9;
-  $62 = (($61>>>0) % 4)&-1;
-  $63 = (56453 + ($62)|0);
-  $64 = HEAP8[$63>>0]|0;
-  $65 = $64&255;
-  $66 = $60 & $65;
-  $67 = ($66|0)!=(0);
-  if ($67) {
-   $128 = $10;
-   $129 = $6;
-   $130 = HEAP32[$129>>2]|0;
-   $131 = ($128|0)==($130|0);
-   if ($131) {
-    $132 = $9;
-    $10 = $132;
-   }
-  } else {
-   $68 = $5;
-   $69 = ((($68)) + 560|0);
-   $70 = HEAP32[$69>>2]|0;
-   $71 = $6;
-   $72 = ((($71)) + 16|0);
-   $73 = HEAP32[$72>>2]|0;
-   $74 = $9;
-   $75 = (($73) + ($74<<2)|0);
-   $76 = HEAP32[$75>>2]|0;
-   $77 = (($70) + ($76<<3)|0);
-   $78 = ((($77)) + 2|0);
-   $79 = HEAP16[$78>>1]|0;
-   $80 = $79&65535;
-   $81 = $5;
-   $82 = ((($81)) + 560|0);
-   $83 = HEAP32[$82>>2]|0;
-   $84 = $7;
-   $85 = (($83) + ($84<<3)|0);
-   $86 = ((($85)) + 2|0);
-   $87 = HEAP16[$86>>1]|0;
-   $88 = $87&65535;
-   $89 = ($80|0)==($88|0);
-   if ($89) {
-    $90 = $5;
-    $91 = ((($90)) + 560|0);
-    $92 = HEAP32[$91>>2]|0;
-    $93 = $6;
-    $94 = ((($93)) + 16|0);
-    $95 = HEAP32[$94>>2]|0;
-    $96 = $9;
-    $97 = (($95) + ($96<<2)|0);
-    $98 = HEAP32[$97>>2]|0;
-    $99 = (($92) + ($98<<3)|0);
-    $100 = ((($99)) + 4|0);
-    $101 = HEAP32[$100>>2]|0;
-    $102 = $5;
-    $103 = ((($102)) + 560|0);
-    $104 = HEAP32[$103>>2]|0;
-    $105 = $7;
-    $106 = (($104) + ($105<<3)|0);
-    $107 = ((($106)) + 4|0);
-    $108 = HEAP32[$107>>2]|0;
-    $109 = $5;
-    $110 = ((($109)) + 560|0);
-    $111 = HEAP32[$110>>2]|0;
-    $112 = $6;
-    $113 = ((($112)) + 16|0);
-    $114 = HEAP32[$113>>2]|0;
-    $115 = $9;
-    $116 = (($114) + ($115<<2)|0);
-    $117 = HEAP32[$116>>2]|0;
-    $118 = (($111) + ($117<<3)|0);
-    $119 = ((($118)) + 2|0);
-    $120 = HEAP16[$119>>1]|0;
-    $121 = $120&65535;
-    $122 = (_memcmp($101,$108,$121)|0);
-    $123 = ($122|0)==(0);
-    if ($123) {
-     label = 8;
-     break;
-    }
-   }
-  }
-  $133 = $9;
-  $134 = $11;
-  $135 = (($134) + 1)|0;
-  $11 = $135;
-  $136 = (($133) + ($135))|0;
-  $137 = $6;
-  $138 = HEAP32[$137>>2]|0;
-  $139 = (($138) - 1)|0;
-  $140 = $136 & $139;
-  $9 = $140;
- }
- if ((label|0) == 8) {
-  $124 = $8;
-  $125 = ($124|0)!=(0|0);
-  if ($125) {
-   $126 = $8;
-   HEAP32[$126>>2] = 0;
-  }
-  $127 = $9;
-  $4 = $127;
-  $205 = $4;
-  STACKTOP = sp;return ($205|0);
- }
- $141 = $10;
- $142 = $6;
- $143 = HEAP32[$142>>2]|0;
- $144 = ($141|0)!=($143|0);
- $145 = $7;
- $146 = $6;
- $147 = ((($146)) + 16|0);
- $148 = HEAP32[$147>>2]|0;
- if ($144) {
-  $149 = $10;
-  $150 = (($148) + ($149<<2)|0);
-  HEAP32[$150>>2] = $145;
-  $151 = $10;
-  $152 = (($151>>>0) % 4)&-1;
-  $153 = (56453 + ($152)|0);
-  $154 = HEAP8[$153>>0]|0;
-  $155 = $154&255;
-  $156 = $155 ^ -1;
-  $157 = $6;
-  $158 = ((($157)) + 12|0);
-  $159 = HEAP32[$158>>2]|0;
-  $160 = $10;
-  $161 = (($160>>>0) / 4)&-1;
-  $162 = (($159) + ($161)|0);
-  $163 = HEAP8[$162>>0]|0;
-  $164 = $163&255;
-  $165 = $164 & $156;
-  $166 = $165&255;
-  HEAP8[$162>>0] = $166;
-  $167 = $6;
-  $168 = ((($167)) + 4|0);
-  $169 = HEAP32[$168>>2]|0;
-  $170 = (($169) + 1)|0;
-  HEAP32[$168>>2] = $170;
-  $171 = $8;
-  $172 = ($171|0)!=(0|0);
-  if ($172) {
-   $173 = $8;
-   HEAP32[$173>>2] = 2;
-  }
-  $174 = $10;
-  $4 = $174;
-  $205 = $4;
-  STACKTOP = sp;return ($205|0);
- } else {
-  $175 = $9;
-  $176 = (($148) + ($175<<2)|0);
-  HEAP32[$176>>2] = $145;
-  $177 = $9;
-  $178 = (($177>>>0) % 4)&-1;
-  $179 = (56449 + ($178)|0);
-  $180 = HEAP8[$179>>0]|0;
-  $181 = $180&255;
-  $182 = $181 ^ -1;
-  $183 = $6;
-  $184 = ((($183)) + 12|0);
-  $185 = HEAP32[$184>>2]|0;
-  $186 = $9;
-  $187 = (($186>>>0) / 4)&-1;
-  $188 = (($185) + ($187)|0);
-  $189 = HEAP8[$188>>0]|0;
-  $190 = $189&255;
-  $191 = $190 & $182;
-  $192 = $191&255;
-  HEAP8[$188>>0] = $192;
-  $193 = $6;
-  $194 = ((($193)) + 4|0);
-  $195 = HEAP32[$194>>2]|0;
-  $196 = (($195) + 1)|0;
-  HEAP32[$194>>2] = $196;
-  $197 = $6;
-  $198 = ((($197)) + 8|0);
-  $199 = HEAP32[$198>>2]|0;
-  $200 = (($199) + 1)|0;
-  HEAP32[$198>>2] = $200;
-  $201 = $8;
-  $202 = ($201|0)!=(0|0);
-  if ($202) {
-   $203 = $8;
-   HEAP32[$203>>2] = 1;
-  }
-  $204 = $9;
-  $4 = $204;
-  $205 = $4;
-  STACKTOP = sp;return ($205|0);
- }
- return (0)|0;
-}
-function _mrb_intern($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $0;
- $4 = $1;
- $5 = $2;
- $6 = $3;
- $7 = $4;
- $8 = $5;
- $9 = (_sym_intern($6,$7,$8,0)|0);
- STACKTOP = sp;return ($9|0);
-}
-function _sym_intern($0,$1,$2,$3) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;
- var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0;
- var $27 = 0, $28 = 0, $29 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0;
- var $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0;
- var $64 = 0, $65 = 0, $66 = 0.0, $67 = 0.0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0;
- var $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0;
- var sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);
- $5 = $0;
- $6 = $1;
- $7 = $2;
- $8 = $3;
- $14 = $5;
- $15 = ((($14)) + 556|0);
- $16 = HEAP32[$15>>2]|0;
- $9 = $16;
- $17 = $5;
- $18 = ((($17)) + 560|0);
- $19 = HEAP32[$18>>2]|0;
- $10 = $19;
- $20 = $5;
- $21 = $7;
- _sym_validate_len($20,$21);
- $22 = $10;
- $23 = ($22|0)!=(0|0);
- if ($23) {
-  $24 = $8;
-  $25 = $10;
-  $26 = HEAP8[$25>>0]|0;
-  $27 = $24 & 1;
-  $28 = $26 & -2;
-  $29 = $28 | $27;
-  HEAP8[$25>>0] = $29;
-  $30 = $7;
-  $31 = $30&65535;
-  $32 = $10;
-  $33 = ((($32)) + 2|0);
-  HEAP16[$33>>1] = $31;
-  $34 = $6;
-  $35 = $10;
-  $36 = ((($35)) + 4|0);
-  HEAP32[$36>>2] = $34;
-  $37 = $5;
-  $38 = $9;
-  $39 = (_kh_get_n2s($37,$38,0)|0);
-  $11 = $39;
-  $40 = $11;
-  $41 = $9;
-  $42 = HEAP32[$41>>2]|0;
-  $43 = ($40|0)!=($42|0);
-  if ($43) {
-   $44 = $9;
-   $45 = ((($44)) + 16|0);
-   $46 = HEAP32[$45>>2]|0;
-   $47 = $11;
-   $48 = (($46) + ($47<<2)|0);
-   $49 = HEAP32[$48>>2]|0;
-   $4 = $49;
-   $122 = $4;
-   STACKTOP = sp;return ($122|0);
-  }
- }
- $50 = $5;
- $51 = ((($50)) + 552|0);
- $52 = HEAP32[$51>>2]|0;
- $53 = (($52) + 1)|0;
- HEAP32[$51>>2] = $53;
- $12 = $53;
- $54 = $5;
- $55 = ((($54)) + 564|0);
- $56 = HEAP32[$55>>2]|0;
- $57 = $12;
- $58 = ($56>>>0)<($57>>>0);
- if ($58) {
-  $59 = $5;
-  $60 = ((($59)) + 564|0);
-  $61 = HEAP32[$60>>2]|0;
-  $62 = ($61|0)==(0);
-  $63 = $5;
-  $64 = ((($63)) + 564|0);
-  if ($62) {
-   HEAP32[$64>>2] = 100;
-  } else {
-   $65 = HEAP32[$64>>2]|0;
-   $66 = (+($65>>>0));
-   $67 = $66 * 1.2;
-   $68 = (~~(($67))>>>0);
-   $69 = $5;
-   $70 = ((($69)) + 564|0);
-   HEAP32[$70>>2] = $68;
-  }
-  $71 = $5;
-  $72 = $5;
-  $73 = ((($72)) + 560|0);
-  $74 = HEAP32[$73>>2]|0;
-  $75 = $5;
-  $76 = ((($75)) + 564|0);
-  $77 = HEAP32[$76>>2]|0;
-  $78 = (($77) + 1)|0;
-  $79 = $78<<3;
-  $80 = (_mrb_realloc($71,$74,$79)|0);
-  $81 = $5;
-  $82 = ((($81)) + 560|0);
-  HEAP32[$82>>2] = $80;
- }
- $83 = $5;
- $84 = ((($83)) + 560|0);
- $85 = HEAP32[$84>>2]|0;
- $86 = $12;
- $87 = (($85) + ($86<<3)|0);
- $10 = $87;
- $88 = $7;
- $89 = $88&65535;
- $90 = $10;
- $91 = ((($90)) + 2|0);
- HEAP16[$91>>1] = $89;
- $92 = $8;
- $93 = $92&255;
- $94 = ($93|0)!=(0);
- if ($94) {
-  $95 = $6;
-  $96 = $10;
-  $97 = ((($96)) + 4|0);
-  HEAP32[$97>>2] = $95;
-  $98 = $10;
-  $99 = HEAP8[$98>>0]|0;
-  $100 = $99 & -2;
-  $101 = $100 | 1;
-  HEAP8[$98>>0] = $101;
- } else {
-  $102 = $5;
-  $103 = $7;
-  $104 = (($103) + 1)|0;
-  $105 = (_mrb_malloc($102,$104)|0);
-  $13 = $105;
-  $106 = $13;
-  $107 = $6;
-  $108 = $7;
-  _memcpy(($106|0),($107|0),($108|0))|0;
-  $109 = $13;
-  $110 = $7;
-  $111 = (($109) + ($110)|0);
-  HEAP8[$111>>0] = 0;
-  $112 = $13;
-  $113 = $10;
-  $114 = ((($113)) + 4|0);
-  HEAP32[$114>>2] = $112;
-  $115 = $10;
-  $116 = HEAP8[$115>>0]|0;
-  $117 = $116 & -2;
-  HEAP8[$115>>0] = $117;
- }
- $118 = $5;
- $119 = $9;
- $120 = $12;
- (_kh_put_n2s($118,$119,$120,0)|0);
- $121 = $12;
- $4 = $121;
- $122 = $4;
- STACKTOP = sp;return ($122|0);
-}
-function _sym_validate_len($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $4 = $3;
- $5 = ($4>>>0)>=(65535);
- if ($5) {
-  $6 = $2;
-  $7 = $2;
-  $8 = (_mrb_class_get($7,69160)|0);
-  _mrb_raise($6,$8,56461);
-  // unreachable;
- } else {
-  STACKTOP = sp;return;
- }
-}
-function _mrb_intern_static($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $0;
- $4 = $1;
- $5 = $2;
- $6 = $3;
- $7 = $4;
- $8 = $5;
- $9 = (_sym_intern($6,$7,$8,1)|0);
- STACKTOP = sp;return ($9|0);
-}
-function _mrb_intern_cstr($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $4 = $2;
- $5 = $3;
- $6 = $3;
- $7 = (_strlen($6)|0);
- $8 = (_mrb_intern($4,$5,$7)|0);
- STACKTOP = sp;return ($8|0);
-}
-function _mrb_intern_str($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $3 = 0;
- var $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $2;
- $4 = HEAP32[$1>>2]|0;
- $5 = HEAP32[$4>>2]|0;
- $6 = $5 >>> 11;
- $7 = $6 & 8;
- $8 = ($7|0)!=(0);
- $9 = HEAP32[$1>>2]|0;
- $10 = ((($9)) + 12|0);
- if ($8) {
-  $25 = $10;
- } else {
-  $11 = ((($10)) + 8|0);
-  $12 = HEAP32[$11>>2]|0;
-  $25 = $12;
- }
- $13 = HEAP32[$1>>2]|0;
- $14 = HEAP32[$13>>2]|0;
- $15 = $14 >>> 11;
- $16 = $15 & 8;
- $17 = ($16|0)!=(0);
- $18 = HEAP32[$1>>2]|0;
- if ($17) {
-  $19 = HEAP32[$18>>2]|0;
-  $20 = $19 >>> 11;
-  $21 = $20 & 496;
-  $22 = $21 >> 4;
-  $26 = $22;
-  $27 = (_mrb_intern($3,$25,$26)|0);
-  STACKTOP = sp;return ($27|0);
- } else {
-  $23 = ((($18)) + 12|0);
-  $24 = HEAP32[$23>>2]|0;
-  $26 = $24;
-  $27 = (_mrb_intern($3,$25,$26)|0);
-  STACKTOP = sp;return ($27|0);
- }
- return (0)|0;
-}
-function _mrb_check_intern($0,$1,$2,$3) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;
- var $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $4 = $1;
- $5 = $2;
- $6 = $3;
- $10 = $4;
- $11 = ((($10)) + 556|0);
- $12 = HEAP32[$11>>2]|0;
- $7 = $12;
- $13 = $4;
- $14 = ((($13)) + 560|0);
- $15 = HEAP32[$14>>2]|0;
- $8 = $15;
- $16 = $4;
- $17 = $6;
- _sym_validate_len($16,$17);
- $18 = $6;
- $19 = $18&65535;
- $20 = $8;
- $21 = ((($20)) + 2|0);
- HEAP16[$21>>1] = $19;
- $22 = $5;
- $23 = $8;
- $24 = ((($23)) + 4|0);
- HEAP32[$24>>2] = $22;
- $25 = $4;
- $26 = $7;
- $27 = (_kh_get_n2s($25,$26,0)|0);
- $9 = $27;
- $28 = $9;
- $29 = $7;
- $30 = HEAP32[$29>>2]|0;
- $31 = ($28|0)!=($30|0);
- if ($31) {
-  $32 = $7;
-  $33 = ((($32)) + 16|0);
-  $34 = HEAP32[$33>>2]|0;
-  $35 = $9;
-  $36 = (($34) + ($35<<2)|0);
-  $37 = HEAP32[$36>>2]|0;
-  _mrb_symbol_value_354($0,$37);
-  STACKTOP = sp;return;
- } else {
-  _mrb_nil_value_355($0);
-  STACKTOP = sp;return;
- }
-}
-function _mrb_symbol_value_354($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = sp;
- $2 = $1;
- $4 = ((($3)) + 4|0);
- HEAP32[$4>>2] = 4;
- $5 = $2;
- HEAP32[$3>>2] = $5;
- ;HEAP32[$0>>2]=HEAP32[$3>>2]|0;HEAP32[$0+4>>2]=HEAP32[$3+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_nil_value_355($0) {
- $0 = $0|0;
- var $1 = 0, $2 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $1 = sp;
- $2 = ((($1)) + 4|0);
- HEAP32[$2>>2] = 0;
- HEAP32[$1>>2] = 0;
- ;HEAP32[$0>>2]=HEAP32[$1>>2]|0;HEAP32[$0+4>>2]=HEAP32[$1+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_check_intern_cstr($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $1;
- $4 = $2;
- $5 = $3;
- $6 = $4;
- $7 = $4;
- $8 = (_strlen($7)|0);
- _mrb_check_intern($0,$5,$6,$8);
- STACKTOP = sp;return;
-}
-function _mrb_check_intern_str($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $3 = 0, $4 = 0;
- var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $1;
- $4 = $3;
- $5 = HEAP32[$2>>2]|0;
- $6 = HEAP32[$5>>2]|0;
- $7 = $6 >>> 11;
- $8 = $7 & 8;
- $9 = ($8|0)!=(0);
- $10 = HEAP32[$2>>2]|0;
- $11 = ((($10)) + 12|0);
- if ($9) {
-  $26 = $11;
- } else {
-  $12 = ((($11)) + 8|0);
-  $13 = HEAP32[$12>>2]|0;
-  $26 = $13;
- }
- $14 = HEAP32[$2>>2]|0;
- $15 = HEAP32[$14>>2]|0;
- $16 = $15 >>> 11;
- $17 = $16 & 8;
- $18 = ($17|0)!=(0);
- $19 = HEAP32[$2>>2]|0;
- if ($18) {
-  $20 = HEAP32[$19>>2]|0;
-  $21 = $20 >>> 11;
-  $22 = $21 & 496;
-  $23 = $22 >> 4;
-  $27 = $23;
-  _mrb_check_intern($0,$4,$26,$27);
-  STACKTOP = sp;return;
- } else {
-  $24 = ((($19)) + 12|0);
-  $25 = HEAP32[$24>>2]|0;
-  $27 = $25;
-  _mrb_check_intern($0,$4,$26,$27);
-  STACKTOP = sp;return;
- }
-}
-function _mrb_sym2name_len($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;
- var $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $4 = $0;
- $5 = $1;
- $6 = $2;
- $7 = $5;
- $8 = ($7|0)==(0);
- if (!($8)) {
-  $9 = $4;
-  $10 = ((($9)) + 552|0);
-  $11 = HEAP32[$10>>2]|0;
-  $12 = $5;
-  $13 = ($11>>>0)<($12>>>0);
-  if (!($13)) {
-   $17 = $6;
-   $18 = ($17|0)!=(0|0);
-   if ($18) {
-    $19 = $4;
-    $20 = ((($19)) + 560|0);
-    $21 = HEAP32[$20>>2]|0;
-    $22 = $5;
-    $23 = (($21) + ($22<<3)|0);
-    $24 = ((($23)) + 2|0);
-    $25 = HEAP16[$24>>1]|0;
-    $26 = $25&65535;
-    $27 = $6;
-    HEAP32[$27>>2] = $26;
-   }
-   $28 = $4;
-   $29 = ((($28)) + 560|0);
-   $30 = HEAP32[$29>>2]|0;
-   $31 = $5;
-   $32 = (($30) + ($31<<3)|0);
-   $33 = ((($32)) + 4|0);
-   $34 = HEAP32[$33>>2]|0;
-   $3 = $34;
-   $35 = $3;
-   STACKTOP = sp;return ($35|0);
-  }
- }
- $14 = $6;
- $15 = ($14|0)!=(0|0);
- if ($15) {
-  $16 = $6;
-  HEAP32[$16>>2] = 0;
- }
- $3 = 0;
- $35 = $3;
- STACKTOP = sp;return ($35|0);
-}
-function _mrb_free_symtbl($0) {
- $0 = $0|0;
- var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;
- var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $1 = $0;
- $2 = 1;
- $4 = $1;
- $5 = ((($4)) + 552|0);
- $6 = HEAP32[$5>>2]|0;
- $7 = (($6) + 1)|0;
- $3 = $7;
- while(1) {
-  $8 = $2;
-  $9 = $3;
-  $10 = ($8>>>0)<($9>>>0);
-  $11 = $1;
-  if (!($10)) {
-   break;
-  }
-  $12 = ((($11)) + 560|0);
-  $13 = HEAP32[$12>>2]|0;
-  $14 = $2;
-  $15 = (($13) + ($14<<3)|0);
-  $16 = HEAP8[$15>>0]|0;
-  $17 = $16 & 1;
-  $18 = ($17<<24>>24)!=(0);
-  if (!($18)) {
-   $19 = $1;
-   $20 = $1;
-   $21 = ((($20)) + 560|0);
-   $22 = HEAP32[$21>>2]|0;
-   $23 = $2;
-   $24 = (($22) + ($23<<3)|0);
-   $25 = ((($24)) + 4|0);
-   $26 = HEAP32[$25>>2]|0;
-   _mrb_free($19,$26);
-  }
-  $27 = $2;
-  $28 = (($27) + 1)|0;
-  $2 = $28;
- }
- $29 = $1;
- $30 = ((($29)) + 560|0);
- $31 = HEAP32[$30>>2]|0;
- _mrb_free($11,$31);
- $32 = $1;
- $33 = $1;
- $34 = ((($33)) + 556|0);
- $35 = HEAP32[$34>>2]|0;
- _kh_destroy_n2s($32,$35);
- STACKTOP = sp;return;
-}
-function _mrb_init_symtbl($0) {
- $0 = $0|0;
- var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $1 = $0;
- $2 = $1;
- $3 = (_kh_init_n2s($2)|0);
- $4 = $1;
- $5 = ((($4)) + 556|0);
- HEAP32[$5>>2] = $3;
- STACKTOP = sp;return;
-}
-function _mrb_sym2str($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $5 = sp + 4|0;
- $3 = $1;
- $4 = $2;
- $7 = $3;
- $8 = $4;
- $9 = (_mrb_sym2name_len($7,$8,$5)|0);
- $6 = $9;
- $10 = $6;
- $11 = ($10|0)!=(0|0);
- if ($11) {
-  $12 = $3;
-  $13 = $6;
-  $14 = HEAP32[$5>>2]|0;
-  _mrb_str_new_static($0,$12,$13,$14);
-  STACKTOP = sp;return;
- } else {
-  _mrb_undef_value($0);
-  STACKTOP = sp;return;
- }
-}
-function _mrb_undef_value($0) {
- $0 = $0|0;
- var $1 = 0, $2 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $1 = sp;
- $2 = ((($1)) + 4|0);
- HEAP32[$2>>2] = 5;
- HEAP32[$1>>2] = 0;
- ;HEAP32[$0>>2]=HEAP32[$1>>2]|0;HEAP32[$0+4>>2]=HEAP32[$1+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_sym2name($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $$byval_copy = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;
- var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);
- $$byval_copy = sp + 40|0;
- $5 = sp + 20|0;
- $7 = sp + 8|0;
- $8 = sp;
- $3 = $0;
- $4 = $1;
- $9 = $3;
- $10 = $4;
- $11 = (_mrb_sym2name_len($9,$10,$5)|0);
- $6 = $11;
- $12 = $6;
- $13 = ($12|0)!=(0|0);
- if (!($13)) {
-  $2 = 0;
-  $37 = $2;
-  STACKTOP = sp;return ($37|0);
- }
- $14 = $6;
- $15 = (_symname_p($14)|0);
- $16 = $15&255;
- $17 = ($16|0)!=(0);
- if ($17) {
-  $18 = $6;
-  $19 = (_strlen($18)|0);
-  $20 = HEAP32[$5>>2]|0;
-  $21 = ($19|0)==($20|0);
-  if ($21) {
-   $22 = $6;
-   $2 = $22;
-   $37 = $2;
-   STACKTOP = sp;return ($37|0);
-  }
- }
- $23 = $3;
- $24 = $3;
- $25 = $6;
- $26 = HEAP32[$5>>2]|0;
- _mrb_str_new_static($8,$24,$25,$26);
- ;HEAP32[$$byval_copy>>2]=HEAP32[$8>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$8+4>>2]|0;
- _mrb_str_dump($7,$23,$$byval_copy);
- $27 = HEAP32[$7>>2]|0;
- $28 = HEAP32[$27>>2]|0;
- $29 = $28 >>> 11;
- $30 = $29 & 8;
- $31 = ($30|0)!=(0);
- $32 = HEAP32[$7>>2]|0;
- $33 = ((($32)) + 12|0);
- if ($31) {
-  $36 = $33;
- } else {
-  $34 = ((($33)) + 8|0);
-  $35 = HEAP32[$34>>2]|0;
-  $36 = $35;
- }
- $2 = $36;
- $37 = $2;
- STACKTOP = sp;return ($37|0);
-}
-function _symname_p($0) {
- $0 = $0|0;
- var $$off = 0, $1 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0;
- var $116 = 0, $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0;
- var $134 = 0, $135 = 0, $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0;
- var $152 = 0, $153 = 0, $154 = 0, $155 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0;
- var $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0;
- var $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0;
- var $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0;
- var $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $switch = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $5 = $2;
- $3 = $5;
- $4 = 0;
- $6 = $3;
- $7 = ($6|0)!=(0|0);
- if (!($7)) {
-  $1 = 0;
-  $155 = $1;
-  STACKTOP = sp;return ($155|0);
- }
- $8 = $3;
- $9 = HEAP8[$8>>0]|0;
- $10 = $9 << 24 >> 24;
- L5: do {
-  switch ($10|0) {
-  case 0:  {
-   $1 = 0;
-   $155 = $1;
-   STACKTOP = sp;return ($155|0);
-   break;
-  }
-  case 36:  {
-   $11 = $3;
-   $12 = ((($11)) + 1|0);
-   $3 = $12;
-   $13 = (_is_special_global_name($12)|0);
-   $14 = ($13<<24>>24)!=(0);
-   if ($14) {
-    $1 = 1;
-    $155 = $1;
-    STACKTOP = sp;return ($155|0);
-   } else {
-    label = 36;
-   }
-   break;
-  }
-  case 64:  {
-   $15 = $3;
-   $16 = ((($15)) + 1|0);
-   $3 = $16;
-   $17 = HEAP8[$16>>0]|0;
-   $18 = $17 << 24 >> 24;
-   $19 = ($18|0)==(64);
-   if ($19) {
-    $20 = $3;
-    $21 = ((($20)) + 1|0);
-    $3 = $21;
-    label = 36;
-   } else {
-    label = 36;
-   }
-   break;
-  }
-  case 60:  {
-   $22 = $3;
-   $23 = ((($22)) + 1|0);
-   $3 = $23;
-   $24 = HEAP8[$23>>0]|0;
-   $25 = $24 << 24 >> 24;
-   switch ($25|0) {
-   case 60:  {
-    $26 = $3;
-    $27 = ((($26)) + 1|0);
-    $3 = $27;
-    break L5;
-    break;
-   }
-   case 61:  {
-    break;
-   }
-   default: {
-    break L5;
-   }
-   }
-   $28 = $3;
-   $29 = ((($28)) + 1|0);
-   $3 = $29;
-   $30 = HEAP8[$29>>0]|0;
-   $31 = $30 << 24 >> 24;
-   $32 = ($31|0)==(62);
-   if ($32) {
-    $33 = $3;
-    $34 = ((($33)) + 1|0);
-    $3 = $34;
-   }
-   break;
-  }
-  case 62:  {
-   $35 = $3;
-   $36 = ((($35)) + 1|0);
-   $3 = $36;
-   $37 = HEAP8[$36>>0]|0;
-   $38 = $37 << 24 >> 24;
-   $$off = (($38) + -61)|0;
-   $switch = ($$off>>>0)<(2);
-   if ($switch) {
-    $39 = $3;
-    $40 = ((($39)) + 1|0);
-    $3 = $40;
-   }
-   break;
-  }
-  case 61:  {
-   $41 = $3;
-   $42 = ((($41)) + 1|0);
-   $3 = $42;
-   $43 = HEAP8[$42>>0]|0;
-   $44 = $43 << 24 >> 24;
-   switch ($44|0) {
-   case 126:  {
-    $45 = $3;
-    $46 = ((($45)) + 1|0);
-    $3 = $46;
-    break L5;
-    break;
-   }
-   case 61:  {
-    $47 = $3;
-    $48 = ((($47)) + 1|0);
-    $3 = $48;
-    $49 = HEAP8[$48>>0]|0;
-    $50 = $49 << 24 >> 24;
-    $51 = ($50|0)==(61);
-    if (!($51)) {
-     break L5;
-    }
-    $52 = $3;
-    $53 = ((($52)) + 1|0);
-    $3 = $53;
-    break L5;
-    break;
-   }
-   default: {
-    $1 = 0;
-    $155 = $1;
-    STACKTOP = sp;return ($155|0);
-   }
-   }
-   break;
-  }
-  case 42:  {
-   $54 = $3;
-   $55 = ((($54)) + 1|0);
-   $3 = $55;
-   $56 = HEAP8[$55>>0]|0;
-   $57 = $56 << 24 >> 24;
-   $58 = ($57|0)==(42);
-   if ($58) {
-    $59 = $3;
-    $60 = ((($59)) + 1|0);
-    $3 = $60;
-   }
-   break;
-  }
-  case 33:  {
-   $61 = $3;
-   $62 = ((($61)) + 1|0);
-   $3 = $62;
-   $63 = HEAP8[$62>>0]|0;
-   $64 = $63 << 24 >> 24;
-   $65 = ($64|0)==(61);
-   if ($65) {
-    $66 = $3;
-    $67 = ((($66)) + 1|0);
-    $3 = $67;
-   }
-   break;
-  }
-  case 45: case 43:  {
-   $68 = $3;
-   $69 = ((($68)) + 1|0);
-   $3 = $69;
-   $70 = HEAP8[$69>>0]|0;
-   $71 = $70 << 24 >> 24;
-   $72 = ($71|0)==(64);
-   if ($72) {
-    $73 = $3;
-    $74 = ((($73)) + 1|0);
-    $3 = $74;
-   }
-   break;
-  }
-  case 124:  {
-   $75 = $3;
-   $76 = ((($75)) + 1|0);
-   $3 = $76;
-   $77 = HEAP8[$76>>0]|0;
-   $78 = $77 << 24 >> 24;
-   $79 = ($78|0)==(124);
-   if ($79) {
-    $80 = $3;
-    $81 = ((($80)) + 1|0);
-    $3 = $81;
-   }
-   break;
-  }
-  case 38:  {
-   $82 = $3;
-   $83 = ((($82)) + 1|0);
-   $3 = $83;
-   $84 = HEAP8[$83>>0]|0;
-   $85 = $84 << 24 >> 24;
-   $86 = ($85|0)==(38);
-   if ($86) {
-    $87 = $3;
-    $88 = ((($87)) + 1|0);
-    $3 = $88;
-   }
-   break;
-  }
-  case 96: case 126: case 37: case 47: case 94:  {
-   $89 = $3;
-   $90 = ((($89)) + 1|0);
-   $3 = $90;
-   break;
-  }
-  case 91:  {
-   $91 = $3;
-   $92 = ((($91)) + 1|0);
-   $3 = $92;
-   $93 = HEAP8[$92>>0]|0;
-   $94 = $93 << 24 >> 24;
-   $95 = ($94|0)!=(93);
-   if ($95) {
-    $1 = 0;
-    $155 = $1;
-    STACKTOP = sp;return ($155|0);
-   } else {
-    $96 = $3;
-    $97 = ((($96)) + 1|0);
-    $3 = $97;
-    $98 = HEAP8[$97>>0]|0;
-    $99 = $98 << 24 >> 24;
-    $100 = ($99|0)==(61);
-    if (!($100)) {
-     break L5;
-    }
-    $101 = $3;
-    $102 = ((($101)) + 1|0);
-    $3 = $102;
-    break L5;
-   }
-   break;
-  }
-  default: {
-   $103 = $3;
-   $104 = HEAP8[$103>>0]|0;
-   $105 = $104 << 24 >> 24;
-   $106 = (($105) - 65)|0;
-   $107 = ($106>>>0)<(26);
-   $108 = $107 ^ 1;
-   $109 = $108&1;
-   $110 = $109&255;
-   $4 = $110;
-   label = 36;
-  }
-  }
- } while(0);
- L45: do {
-  if ((label|0) == 36) {
-   $111 = $3;
-   $112 = HEAP8[$111>>0]|0;
-   $113 = $112 << 24 >> 24;
-   $114 = ($113|0)!=(95);
-   if ($114) {
-    $115 = $3;
-    $116 = HEAP8[$115>>0]|0;
-    $117 = $116 << 24 >> 24;
-    $118 = $117 | 32;
-    $119 = (($118) - 97)|0;
-    $120 = ($119>>>0)<(26);
-    if (!($120)) {
-     $1 = 0;
-     $155 = $1;
-     STACKTOP = sp;return ($155|0);
-    }
-   }
-   while(1) {
-    $121 = $3;
-    $122 = HEAP8[$121>>0]|0;
-    $123 = $122 << 24 >> 24;
-    $124 = ($123|0)!=(-1);
-    if (!($124)) {
-     break;
-    }
-    $125 = $3;
-    $126 = HEAP8[$125>>0]|0;
-    $127 = $126 << 24 >> 24;
-    $128 = $127 | 32;
-    $129 = (($128) - 97)|0;
-    $130 = ($129>>>0)<(26);
-    if (!($130)) {
-     $131 = $3;
-     $132 = HEAP8[$131>>0]|0;
-     $133 = $132 << 24 >> 24;
-     $134 = (($133) - 48)|0;
-     $135 = ($134>>>0)<(10);
-     if (!($135)) {
-      $136 = $3;
-      $137 = HEAP8[$136>>0]|0;
-      $138 = $137 << 24 >> 24;
-      $139 = ($138|0)==(95);
-      if (!($139)) {
-       break;
-      }
-     }
-    }
-    $140 = $3;
-    $141 = ((($140)) + 1|0);
-    $3 = $141;
-   }
-   $142 = $4;
-   $143 = ($142<<24>>24)!=(0);
-   if ($143) {
-    $144 = $3;
-    $145 = HEAP8[$144>>0]|0;
-    $146 = $145 << 24 >> 24;
-    switch ($146|0) {
-    case 61: case 63: case 33:  {
-     break;
-    }
-    default: {
-     break L45;
-    }
-    }
-    $147 = $3;
-    $148 = ((($147)) + 1|0);
-    $3 = $148;
-   }
-  }
- } while(0);
- $149 = $3;
- $150 = HEAP8[$149>>0]|0;
- $151 = $150 << 24 >> 24;
- $152 = ($151|0)!=(0);
- $153 = $152 ? 0 : 1;
- $154 = $153&255;
- $1 = $154;
- $155 = $1;
- STACKTOP = sp;return ($155|0);
-}
-function _is_special_global_name($0) {
- $0 = $0|0;
- var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;
- var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0;
- var $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $2;
- $4 = HEAP8[$3>>0]|0;
- $5 = $4 << 24 >> 24;
- L1: do {
-  switch ($5|0) {
-  case 48: case 43: case 39: case 96: case 38: case 34: case 62: case 60: case 58: case 61: case 46: case 44: case 59: case 92: case 47: case 64: case 33: case 63: case 36: case 42: case 126:  {
-   $6 = $2;
-   $7 = ((($6)) + 1|0);
-   $2 = $7;
-   break;
-  }
-  case 45:  {
-   $8 = $2;
-   $9 = ((($8)) + 1|0);
-   $2 = $9;
-   $10 = $2;
-   $11 = HEAP8[$10>>0]|0;
-   $12 = $11 << 24 >> 24;
-   $13 = ($12|0)!=(-1);
-   if ($13) {
-    $14 = $2;
-    $15 = HEAP8[$14>>0]|0;
-    $16 = $15 << 24 >> 24;
-    $17 = $16 | 32;
-    $18 = (($17) - 97)|0;
-    $19 = ($18>>>0)<(26);
-    if (!($19)) {
-     $20 = $2;
-     $21 = HEAP8[$20>>0]|0;
-     $22 = $21 << 24 >> 24;
-     $23 = (($22) - 48)|0;
-     $24 = ($23>>>0)<(10);
-     if (!($24)) {
-      $25 = $2;
-      $26 = HEAP8[$25>>0]|0;
-      $27 = $26 << 24 >> 24;
-      $28 = ($27|0)==(95);
-      if (!($28)) {
-       break L1;
-      }
-     }
-    }
-    $29 = $2;
-    $30 = ((($29)) + 1|0);
-    $2 = $30;
-   }
-   break;
-  }
-  default: {
-   $31 = $2;
-   $32 = HEAP8[$31>>0]|0;
-   $33 = $32 << 24 >> 24;
-   $34 = (($33) - 48)|0;
-   $35 = ($34>>>0)<(10);
-   if ($35) {
-    while(1) {
-     $36 = $2;
-     $37 = ((($36)) + 1|0);
-     $2 = $37;
-     $38 = $2;
-     $39 = HEAP8[$38>>0]|0;
-     $40 = $39 << 24 >> 24;
-     $41 = (($40) - 48)|0;
-     $42 = ($41>>>0)<(10);
-     if (!($42)) {
-      break L1;
-     }
-    }
-   }
-   $1 = 0;
-   $49 = $1;
-   STACKTOP = sp;return ($49|0);
-  }
-  }
- } while(0);
- $43 = $2;
- $44 = HEAP8[$43>>0]|0;
- $45 = ($44<<24>>24)!=(0);
- $46 = $45 ^ 1;
- $47 = $46&1;
- $48 = $47&255;
- $1 = $48;
- $49 = $1;
- STACKTOP = sp;return ($49|0);
-}
-function _mrb_init_symbol($0) {
- $0 = $0|0;
- var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0;
- var $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $1 = $0;
- $3 = $1;
- $4 = $1;
- $5 = ((($4)) + 32|0);
- $6 = HEAP32[$5>>2]|0;
- $7 = (_mrb_define_class($3,56484,$6)|0);
- $2 = $7;
- $8 = $1;
- $9 = ((($8)) + 80|0);
- HEAP32[$9>>2] = $7;
- $10 = $1;
- $11 = $2;
- _mrb_define_method($10,$11,69591,119,262144);
- $12 = $1;
- $13 = $2;
- _mrb_define_method($12,$13,56491,120,0);
- $14 = $1;
- $15 = $2;
- _mrb_define_method($14,$15,69276,120,0);
- $16 = $1;
- $17 = $2;
- _mrb_define_method($16,$17,56499,121,0);
- $18 = $1;
- $19 = $2;
- _mrb_define_method($18,$19,69281,122,0);
- $20 = $1;
- $21 = $2;
- _mrb_define_method($20,$21,69156,123,262144);
- STACKTOP = sp;return;
-}
-function _sym_equal($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);
- $$byval_copy1 = sp + 32|0;
- $$byval_copy = sp + 24|0;
- $vararg_buffer = sp;
- $4 = sp + 8|0;
- $3 = $1;
- $5 = $3;
- HEAP32[$vararg_buffer>>2] = $4;
- (_mrb_get_args($5,69199,$vararg_buffer)|0);
- $6 = $3;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
- ;HEAP32[$$byval_copy1>>2]=HEAP32[$4>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$4+4>>2]|0;
- $7 = (_mrb_obj_equal($6,$$byval_copy,$$byval_copy1)|0);
- _mrb_bool_value_369($0,$7);
- STACKTOP = sp;return;
-}
-function _mrb_sym_to_s($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $6 = sp;
- $3 = $1;
- $7 = HEAP32[$2>>2]|0;
- $4 = $7;
- $8 = $3;
- $9 = $4;
- $10 = (_mrb_sym2name_len($8,$9,$6)|0);
- $5 = $10;
- $11 = $3;
- $12 = $5;
- $13 = HEAP32[$6>>2]|0;
- _mrb_str_new_static($0,$11,$12,$13);
- STACKTOP = sp;return;
-}
-function _sym_to_sym($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $3 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $1;
- ;HEAP32[$0>>2]=HEAP32[$2>>2]|0;HEAP32[$0+4>>2]=HEAP32[$2+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _sym_inspect($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;
- var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0;
- var $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $7 = 0, $8 = 0;
- var $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);
- $$byval_copy = sp + 48|0;
- $4 = sp + 32|0;
- $6 = sp + 24|0;
- $9 = sp + 8|0;
- $10 = sp;
- $3 = $1;
- $11 = HEAP32[$2>>2]|0;
- $7 = $11;
- $12 = $3;
- $13 = $7;
- $14 = (_mrb_sym2name_len($12,$13,$6)|0);
- $5 = $14;
- $15 = $3;
- $16 = HEAP32[$6>>2]|0;
- $17 = (($16) + 1)|0;
- _mrb_str_new($9,$15,0,$17);
- ;HEAP32[$4>>2]=HEAP32[$9>>2]|0;HEAP32[$4+4>>2]=HEAP32[$9+4>>2]|0;
- $18 = HEAP32[$4>>2]|0;
- $19 = HEAP32[$18>>2]|0;
- $20 = $19 >>> 11;
- $21 = $20 & 8;
- $22 = ($21|0)!=(0);
- $23 = HEAP32[$4>>2]|0;
- $24 = ((($23)) + 12|0);
- if ($22) {
-  $27 = $24;
- } else {
-  $25 = ((($24)) + 8|0);
-  $26 = HEAP32[$25>>2]|0;
-  $27 = $26;
- }
- $8 = $27;
- $28 = HEAP32[$4>>2]|0;
- $29 = HEAP32[$28>>2]|0;
- $30 = $29 >>> 11;
- $31 = $30 & 8;
- $32 = ($31|0)!=(0);
- $33 = HEAP32[$4>>2]|0;
- $34 = ((($33)) + 12|0);
- if ($32) {
-  $37 = $34;
- } else {
-  $35 = ((($34)) + 8|0);
-  $36 = HEAP32[$35>>2]|0;
-  $37 = $36;
- }
- HEAP8[$37>>0] = 58;
- $38 = $8;
- $39 = ((($38)) + 1|0);
- $40 = $5;
- $41 = HEAP32[$6>>2]|0;
- _memcpy(($39|0),($40|0),($41|0))|0;
- $42 = $5;
- $43 = (_symname_p($42)|0);
- $44 = ($43<<24>>24)!=(0);
- if ($44) {
-  $45 = $5;
-  $46 = (_strlen($45)|0);
-  $47 = HEAP32[$6>>2]|0;
-  $48 = ($46|0)!=($47|0);
-  if (!($48)) {
-   ;HEAP32[$0>>2]=HEAP32[$4>>2]|0;HEAP32[$0+4>>2]=HEAP32[$4+4>>2]|0;
-   STACKTOP = sp;return;
-  }
- }
- $49 = $3;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$4>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$4+4>>2]|0;
- _mrb_str_dump($10,$49,$$byval_copy);
- ;HEAP32[$4>>2]=HEAP32[$10>>2]|0;HEAP32[$4+4>>2]=HEAP32[$10+4>>2]|0;
- $50 = HEAP32[$4>>2]|0;
- $51 = HEAP32[$50>>2]|0;
- $52 = $51 >>> 11;
- $53 = $52 & 8;
- $54 = ($53|0)!=(0);
- $55 = HEAP32[$4>>2]|0;
- $56 = ((($55)) + 12|0);
- if ($54) {
-  $59 = $56;
- } else {
-  $57 = ((($56)) + 8|0);
-  $58 = HEAP32[$57>>2]|0;
-  $59 = $58;
- }
- $8 = $59;
- $60 = $8;
- HEAP8[$60>>0] = 58;
- $61 = $8;
- $62 = ((($61)) + 1|0);
- HEAP8[$62>>0] = 34;
- ;HEAP32[$0>>2]=HEAP32[$4>>2]|0;HEAP32[$0+4>>2]=HEAP32[$4+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _sym_cmp($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;
- var $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0;
- var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);
- $vararg_buffer = sp;
- $4 = sp + 40|0;
- $11 = sp + 8|0;
- $12 = sp + 4|0;
- $3 = $1;
- $13 = $3;
- HEAP32[$vararg_buffer>>2] = $4;
- (_mrb_get_args($13,69199,$vararg_buffer)|0);
- $14 = ((($4)) + 4|0);
- $15 = HEAP32[$14>>2]|0;
- $16 = ($15|0)!=(4);
- if ($16) {
-  _mrb_nil_value_355($0);
-  STACKTOP = sp;return;
- }
- $17 = HEAP32[$2>>2]|0;
- $5 = $17;
- $18 = HEAP32[$4>>2]|0;
- $6 = $18;
- $19 = $5;
- $20 = $6;
- $21 = ($19|0)==($20|0);
- if ($21) {
-  _mrb_fixnum_value_368($0,0);
-  STACKTOP = sp;return;
- }
- $22 = $3;
- $23 = $5;
- $24 = (_mrb_sym2name_len($22,$23,$11)|0);
- $7 = $24;
- $25 = $3;
- $26 = $6;
- $27 = (_mrb_sym2name_len($25,$26,$12)|0);
- $8 = $27;
- $28 = HEAP32[$11>>2]|0;
- $29 = HEAP32[$12>>2]|0;
- $30 = ($28|0)>($29|0);
- $31 = HEAP32[$12>>2]|0;
- $32 = HEAP32[$11>>2]|0;
- $33 = $30 ? $31 : $32;
- $10 = $33;
- $34 = $7;
- $35 = $8;
- $36 = $10;
- $37 = (_memcmp($34,$35,$36)|0);
- $9 = $37;
- $38 = $9;
- $39 = ($38|0)==(0);
- if (!($39)) {
-  $46 = $9;
-  $47 = ($46|0)>(0);
-  if ($47) {
-   _mrb_fixnum_value_368($0,1);
-   STACKTOP = sp;return;
-  } else {
-   _mrb_fixnum_value_368($0,-1);
-   STACKTOP = sp;return;
-  }
- }
- $40 = HEAP32[$11>>2]|0;
- $41 = HEAP32[$12>>2]|0;
- $42 = ($40|0)==($41|0);
- if ($42) {
-  _mrb_fixnum_value_368($0,0);
-  STACKTOP = sp;return;
- }
- $43 = HEAP32[$11>>2]|0;
- $44 = HEAP32[$12>>2]|0;
- $45 = ($43|0)>($44|0);
- if ($45) {
-  _mrb_fixnum_value_368($0,1);
-  STACKTOP = sp;return;
- } else {
-  _mrb_fixnum_value_368($0,-1);
-  STACKTOP = sp;return;
- }
-}
-function _mrb_fixnum_value_368($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = sp;
- $2 = $1;
- $4 = ((($3)) + 4|0);
- HEAP32[$4>>2] = 3;
- $5 = $2;
- HEAP32[$3>>2] = $5;
- ;HEAP32[$0>>2]=HEAP32[$3>>2]|0;HEAP32[$0+4>>2]=HEAP32[$3+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_bool_value_369($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = sp;
- $2 = $1;
- $4 = $2;
- $5 = $4&255;
- $6 = ($5|0)!=(0);
- $7 = $6 ? 2 : 0;
- $8 = ((($3)) + 4|0);
- HEAP32[$8>>2] = $7;
- HEAP32[$3>>2] = 1;
- ;HEAP32[$0>>2]=HEAP32[$3>>2]|0;HEAP32[$0+4>>2]=HEAP32[$3+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_gc_mark_gv($0) {
- $0 = $0|0;
- var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $1 = $0;
- $2 = $1;
- $3 = $1;
- $4 = ((($3)) + 24|0);
- $5 = HEAP32[$4>>2]|0;
- _mark_tbl($2,$5);
- STACKTOP = sp;return;
-}
-function _mark_tbl($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $4 = $3;
- $5 = ($4|0)!=(0|0);
- if (!($5)) {
-  STACKTOP = sp;return;
- }
- $6 = $2;
- $7 = $3;
- (_iv_foreach($6,$7,124,0)|0);
- STACKTOP = sp;return;
-}
-function _iv_mark_i($0,$1,$2,$3) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- var $10 = 0, $11 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $4 = $0;
- $5 = $1;
- $6 = $3;
- $7 = ((($2)) + 4|0);
- $8 = HEAP32[$7>>2]|0;
- $9 = ($8>>>0)<(8);
- if ($9) {
-  STACKTOP = sp;return 0;
- }
- $10 = $4;
- $11 = HEAP32[$2>>2]|0;
- _mrb_gc_mark($10,$11);
- STACKTOP = sp;return 0;
-}
-function _iv_foreach($0,$1,$2,$3) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- var $$byval_copy = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;
- var $29 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0;
- var $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);
- $$byval_copy = sp + 32|0;
- $5 = $0;
- $6 = $1;
- $7 = $2;
- $8 = $3;
- $13 = $6;
- $14 = HEAP32[$13>>2]|0;
- $9 = $14;
- L1: while(1) {
-  $15 = $9;
-  $16 = ($15|0)!=(0|0);
-  if (!($16)) {
-   label = 15;
-   break;
-  }
-  $10 = 0;
-  while(1) {
-   $17 = $10;
-   $18 = ($17>>>0)<(4);
-   $19 = $9;
-   if (!($18)) {
-    break;
-   }
-   $20 = $10;
-   $21 = (($19) + ($20<<2)|0);
-   $22 = HEAP32[$21>>2]|0;
-   $12 = $22;
-   $23 = $9;
-   $24 = ((($23)) + 48|0);
-   $25 = HEAP32[$24>>2]|0;
-   $26 = ($25|0)!=(0|0);
-   if (!($26)) {
-    $27 = $10;
-    $28 = $6;
-    $29 = ((($28)) + 8|0);
-    $30 = HEAP32[$29>>2]|0;
-    $31 = ($27>>>0)>=($30>>>0);
-    if ($31) {
-     label = 7;
-     break L1;
-    }
-   }
-   $32 = $12;
-   $33 = ($32|0)!=(0);
-   if ($33) {
-    $34 = $7;
-    $35 = $5;
-    $36 = $12;
-    $37 = $9;
-    $38 = ((($37)) + 16|0);
-    $39 = $10;
-    $40 = (($38) + ($39<<3)|0);
-    $41 = $8;
-    ;HEAP32[$$byval_copy>>2]=HEAP32[$40>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$40+4>>2]|0;
-    $42 = (FUNCTION_TABLE_iiiii[$34 & 255]($35,$36,$$byval_copy,$41)|0);
-    $11 = $42;
-    $43 = $11;
-    $44 = ($43|0)>(0);
-    if ($44) {
-     label = 10;
-     break L1;
-    }
-    $45 = $11;
-    $46 = ($45|0)<(0);
-    if ($46) {
-     $47 = $6;
-     $48 = ((($47)) + 4|0);
-     $49 = HEAP32[$48>>2]|0;
-     $50 = (($49) + -1)|0;
-     HEAP32[$48>>2] = $50;
-     $51 = $9;
-     $52 = $10;
-     $53 = (($51) + ($52<<2)|0);
-     HEAP32[$53>>2] = 0;
-    }
-   }
-   $54 = $10;
-   $55 = (($54) + 1)|0;
-   $10 = $55;
-  }
-  $56 = ((($19)) + 48|0);
-  $57 = HEAP32[$56>>2]|0;
-  $9 = $57;
- }
- if ((label|0) == 7) {
-  $4 = 0;
-  $58 = $4;
-  STACKTOP = sp;return ($58|0);
- }
- else if ((label|0) == 10) {
-  $4 = 0;
-  $58 = $4;
-  STACKTOP = sp;return ($58|0);
- }
- else if ((label|0) == 15) {
-  $4 = 1;
-  $58 = $4;
-  STACKTOP = sp;return ($58|0);
- }
- return (0)|0;
-}
-function _mrb_gc_free_gv($0) {
- $0 = $0|0;
- var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $1 = $0;
- $2 = $1;
- $3 = ((($2)) + 24|0);
- $4 = HEAP32[$3>>2]|0;
- $5 = ($4|0)!=(0|0);
- if (!($5)) {
-  STACKTOP = sp;return;
- }
- $6 = $1;
- $7 = $1;
- $8 = ((($7)) + 24|0);
- $9 = HEAP32[$8>>2]|0;
- _iv_free($6,$9);
- STACKTOP = sp;return;
-}
-function _iv_free($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $6 = $3;
- $7 = HEAP32[$6>>2]|0;
- $4 = $7;
- while(1) {
-  $8 = $4;
-  $9 = ($8|0)!=(0|0);
-  if (!($9)) {
-   break;
-  }
-  $10 = $4;
-  $5 = $10;
-  $11 = $4;
-  $12 = ((($11)) + 48|0);
-  $13 = HEAP32[$12>>2]|0;
-  $4 = $13;
-  $14 = $2;
-  $15 = $5;
-  _mrb_free($14,$15);
- }
- $16 = $2;
- $17 = $3;
- _mrb_free($16,$17);
- STACKTOP = sp;return;
-}
-function _mrb_gc_mark_iv($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $4 = $2;
- $5 = $3;
- $6 = ((($5)) + 12|0);
- $7 = HEAP32[$6>>2]|0;
- _mark_tbl($4,$7);
- STACKTOP = sp;return;
-}
-function _mrb_gc_mark_iv_size($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $4 = $2;
- $5 = $3;
- $6 = ((($5)) + 12|0);
- $7 = HEAP32[$6>>2]|0;
- $8 = (_iv_size($4,$7)|0);
- STACKTOP = sp;return ($8|0);
-}
-function _iv_size($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;
- var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $3 = $0;
- $4 = $1;
- $6 = 0;
- $7 = $4;
- $8 = ($7|0)!=(0|0);
- if (!($8)) {
-  $2 = 0;
-  $34 = $2;
-  STACKTOP = sp;return ($34|0);
- }
- $9 = $4;
- $10 = ((($9)) + 4|0);
- $11 = HEAP32[$10>>2]|0;
- $12 = ($11>>>0)>(0);
- $13 = $4;
- if ($12) {
-  $14 = ((($13)) + 4|0);
-  $15 = HEAP32[$14>>2]|0;
-  $2 = $15;
-  $34 = $2;
-  STACKTOP = sp;return ($34|0);
- }
- $16 = HEAP32[$13>>2]|0;
- $5 = $16;
- while(1) {
-  $17 = $5;
-  $18 = ($17|0)!=(0|0);
-  if (!($18)) {
-   label = 10;
-   break;
-  }
-  $19 = $5;
-  $20 = ((($19)) + 48|0);
-  $21 = HEAP32[$20>>2]|0;
-  $22 = ($21|0)==(0|0);
-  if ($22) {
-   label = 8;
-   break;
-  }
-  $29 = $5;
-  $30 = ((($29)) + 48|0);
-  $31 = HEAP32[$30>>2]|0;
-  $5 = $31;
-  $32 = $6;
-  $33 = (($32) + 4)|0;
-  $6 = $33;
- }
- if ((label|0) == 8) {
-  $23 = $4;
-  $24 = ((($23)) + 8|0);
-  $25 = HEAP32[$24>>2]|0;
-  $26 = $6;
-  $27 = (($26) + ($25))|0;
-  $6 = $27;
-  $28 = $6;
-  $2 = $28;
-  $34 = $2;
-  STACKTOP = sp;return ($34|0);
- }
- else if ((label|0) == 10) {
-  $2 = 0;
-  $34 = $2;
-  STACKTOP = sp;return ($34|0);
- }
- return (0)|0;
-}
-function _mrb_gc_free_iv($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $4 = $3;
- $5 = ((($4)) + 12|0);
- $6 = HEAP32[$5>>2]|0;
- $7 = ($6|0)!=(0|0);
- if (!($7)) {
-  STACKTOP = sp;return;
- }
- $8 = $2;
- $9 = $3;
- $10 = ((($9)) + 12|0);
- $11 = HEAP32[$10>>2]|0;
- _iv_free($8,$11);
- STACKTOP = sp;return;
-}
-function _mrb_vm_special_get($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $3 = 0, $4 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $1;
- $4 = $2;
- _mrb_fixnum_value_380($0,0);
- STACKTOP = sp;return;
-}
-function _mrb_fixnum_value_380($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = sp;
- $2 = $1;
- $4 = ((($3)) + 4|0);
- HEAP32[$4>>2] = 3;
- $5 = $2;
- HEAP32[$3>>2] = $5;
- ;HEAP32[$0>>2]=HEAP32[$3>>2]|0;HEAP32[$0+4>>2]=HEAP32[$3+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_vm_special_set($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $3 = 0, $4 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $0;
- $4 = $1;
- STACKTOP = sp;return;
-}
-function _mrb_obj_iv_get($0,$1,$2,$3) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $7 = sp;
- $4 = $1;
- $5 = $2;
- $6 = $3;
- $8 = $5;
- $9 = ((($8)) + 12|0);
- $10 = HEAP32[$9>>2]|0;
- $11 = ($10|0)!=(0|0);
- if ($11) {
-  $12 = $4;
-  $13 = $5;
-  $14 = ((($13)) + 12|0);
-  $15 = HEAP32[$14>>2]|0;
-  $16 = $6;
-  $17 = (_iv_get($12,$15,$16,$7)|0);
-  $18 = $17&255;
-  $19 = ($18|0)!=(0);
-  if ($19) {
-   ;HEAP32[$0>>2]=HEAP32[$7>>2]|0;HEAP32[$0+4>>2]=HEAP32[$7+4>>2]|0;
-   STACKTOP = sp;return;
-  }
- }
- _mrb_nil_value_381($0);
- STACKTOP = sp;return;
-}
-function _iv_get($0,$1,$2,$3) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;
- var $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $5 = 0, $6 = 0, $7 = 0;
- var $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $5 = $0;
- $6 = $1;
- $7 = $2;
- $8 = $3;
- $12 = $6;
- $13 = HEAP32[$12>>2]|0;
- $9 = $13;
- L1: while(1) {
-  $14 = $9;
-  $15 = ($14|0)!=(0|0);
-  if (!($15)) {
-   label = 14;
-   break;
-  }
-  $10 = 0;
-  while(1) {
-   $16 = $10;
-   $17 = ($16>>>0)<(4);
-   $18 = $9;
-   if (!($17)) {
-    break;
-   }
-   $19 = $10;
-   $20 = (($18) + ($19<<2)|0);
-   $21 = HEAP32[$20>>2]|0;
-   $11 = $21;
-   $22 = $9;
-   $23 = ((($22)) + 48|0);
-   $24 = HEAP32[$23>>2]|0;
-   $25 = ($24|0)!=(0|0);
-   if (!($25)) {
-    $26 = $10;
-    $27 = $6;
-    $28 = ((($27)) + 8|0);
-    $29 = HEAP32[$28>>2]|0;
-    $30 = ($26>>>0)>=($29>>>0);
-    if ($30) {
-     label = 7;
-     break L1;
-    }
-   }
-   $31 = $11;
-   $32 = $7;
-   $33 = ($31|0)==($32|0);
-   if ($33) {
-    label = 9;
-    break L1;
-   }
-   $41 = $10;
-   $42 = (($41) + 1)|0;
-   $10 = $42;
-  }
-  $43 = ((($18)) + 48|0);
-  $44 = HEAP32[$43>>2]|0;
-  $9 = $44;
- }
- if ((label|0) == 7) {
-  $4 = 0;
-  $45 = $4;
-  STACKTOP = sp;return ($45|0);
- }
- else if ((label|0) == 9) {
-  $34 = $8;
-  $35 = ($34|0)!=(0|0);
-  if ($35) {
-   $36 = $8;
-   $37 = $9;
-   $38 = ((($37)) + 16|0);
-   $39 = $10;
-   $40 = (($38) + ($39<<3)|0);
-   ;HEAP32[$36>>2]=HEAP32[$40>>2]|0;HEAP32[$36+4>>2]=HEAP32[$40+4>>2]|0;
-  }
-  $4 = 1;
-  $45 = $4;
-  STACKTOP = sp;return ($45|0);
- }
- else if ((label|0) == 14) {
-  $4 = 0;
-  $45 = $4;
-  STACKTOP = sp;return ($45|0);
- }
- return (0)|0;
-}
-function _mrb_nil_value_381($0) {
- $0 = $0|0;
- var $1 = 0, $2 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $1 = sp;
- $2 = ((($1)) + 4|0);
- HEAP32[$2>>2] = 0;
- HEAP32[$1>>2] = 0;
- ;HEAP32[$0>>2]=HEAP32[$1>>2]|0;HEAP32[$0+4>>2]=HEAP32[$1+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_iv_get($0,$1,$2,$3) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- var $$byval_copy = 0, $10 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $$byval_copy = sp + 8|0;
- $4 = $1;
- $5 = $3;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
- $6 = (_obj_iv_p($$byval_copy)|0);
- $7 = ($6<<24>>24)!=(0);
- if ($7) {
-  $8 = $4;
-  $9 = HEAP32[$2>>2]|0;
-  $10 = $5;
-  _mrb_obj_iv_get($0,$8,$9,$10);
-  STACKTOP = sp;return;
- } else {
-  _mrb_nil_value_381($0);
-  STACKTOP = sp;return;
- }
-}
-function _obj_iv_p($0) {
- $0 = $0|0;
- var $1 = 0, $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = ((($0)) + 4|0);
- $3 = HEAP32[$2>>2]|0;
- switch ($3|0) {
- case 18: case 21: case 15: case 12: case 10: case 9: case 8:  {
-  $1 = 1;
-  break;
- }
- default: {
-  $1 = 0;
- }
- }
- $4 = $1;
- STACKTOP = sp;return ($4|0);
-}
-function _mrb_obj_iv_set($0,$1,$2,$3) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- var $$byval_copy = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0;
- var sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $$byval_copy = sp + 16|0;
- $4 = $0;
- $5 = $1;
- $6 = $2;
- $8 = $5;
- $9 = ((($8)) + 12|0);
- $10 = HEAP32[$9>>2]|0;
- $7 = $10;
- $11 = $7;
- $12 = ($11|0)!=(0|0);
- if (!($12)) {
-  $13 = $4;
-  $14 = (_iv_new($13)|0);
-  $15 = $5;
-  $16 = ((($15)) + 12|0);
-  HEAP32[$16>>2] = $14;
-  $7 = $14;
- }
- $17 = $4;
- $18 = $5;
- _mrb_write_barrier($17,$18);
- $19 = $4;
- $20 = $7;
- $21 = $6;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$3>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$3+4>>2]|0;
- _iv_put($19,$20,$21,$$byval_copy);
- STACKTOP = sp;return;
-}
-function _iv_new($0) {
- $0 = $0|0;
- var $1 = 0, $10 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $1 = $0;
- $3 = $1;
- $4 = (_mrb_malloc($3,12)|0);
- $2 = $4;
- $5 = $2;
- $6 = ((($5)) + 4|0);
- HEAP32[$6>>2] = 0;
- $7 = $2;
- HEAP32[$7>>2] = 0;
- $8 = $2;
- $9 = ((($8)) + 8|0);
- HEAP32[$9>>2] = 0;
- $10 = $2;
- STACKTOP = sp;return ($10|0);
-}
-function _iv_put($0,$1,$2,$3) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;
- var $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0;
- var $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0;
- var $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0;
- var $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $or$cond = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);
- $4 = $0;
- $5 = $1;
- $6 = $2;
- $13 = $5;
- $14 = HEAP32[$13>>2]|0;
- $7 = $14;
- $8 = 0;
- $9 = 0;
- $10 = 0;
- L1: while(1) {
-  $15 = $7;
-  $16 = ($15|0)!=(0|0);
-  if (!($16)) {
-   label = 14;
-   break;
-  }
-  $11 = 0;
-  while(1) {
-   $17 = $11;
-   $18 = ($17>>>0)<(4);
-   $19 = $7;
-   if (!($18)) {
-    break;
-   }
-   $20 = $11;
-   $21 = (($19) + ($20<<2)|0);
-   $22 = HEAP32[$21>>2]|0;
-   $12 = $22;
-   $23 = $7;
-   $24 = ((($23)) + 48|0);
-   $25 = HEAP32[$24>>2]|0;
-   $26 = ($25|0)!=(0|0);
-   if (!($26)) {
-    $27 = $11;
-    $28 = $5;
-    $29 = ((($28)) + 8|0);
-    $30 = HEAP32[$29>>2]|0;
-    $31 = ($27>>>0)>=($30>>>0);
-    if ($31) {
-     label = 7;
-     break L1;
-    }
-   }
-   $48 = $9;
-   $49 = ($48|0)==(0|0);
-   $50 = $12;
-   $51 = ($50|0)==(0);
-   $or$cond = $49 & $51;
-   if ($or$cond) {
-    $52 = $7;
-    $9 = $52;
-    $53 = $11;
-    $10 = $53;
-   } else {
-    $54 = $12;
-    $55 = $6;
-    $56 = ($54|0)==($55|0);
-    if ($56) {
-     label = 11;
-     break L1;
-    }
-   }
-   $61 = $11;
-   $62 = (($61) + 1)|0;
-   $11 = $62;
-  }
-  $8 = $19;
-  $63 = $7;
-  $64 = ((($63)) + 48|0);
-  $65 = HEAP32[$64>>2]|0;
-  $7 = $65;
- }
- if ((label|0) == 7) {
-  $32 = $6;
-  $33 = $7;
-  $34 = $11;
-  $35 = (($33) + ($34<<2)|0);
-  HEAP32[$35>>2] = $32;
-  $36 = $7;
-  $37 = ((($36)) + 16|0);
-  $38 = $11;
-  $39 = (($37) + ($38<<3)|0);
-  ;HEAP32[$39>>2]=HEAP32[$3>>2]|0;HEAP32[$39+4>>2]=HEAP32[$3+4>>2]|0;
-  $40 = $11;
-  $41 = (($40) + 1)|0;
-  $42 = $5;
-  $43 = ((($42)) + 8|0);
-  HEAP32[$43>>2] = $41;
-  $44 = $5;
-  $45 = ((($44)) + 4|0);
-  $46 = HEAP32[$45>>2]|0;
-  $47 = (($46) + 1)|0;
-  HEAP32[$45>>2] = $47;
-  STACKTOP = sp;return;
- }
- else if ((label|0) == 11) {
-  $57 = $7;
-  $58 = ((($57)) + 16|0);
-  $59 = $11;
-  $60 = (($58) + ($59<<3)|0);
-  ;HEAP32[$60>>2]=HEAP32[$3>>2]|0;HEAP32[$60+4>>2]=HEAP32[$3+4>>2]|0;
-  STACKTOP = sp;return;
- }
- else if ((label|0) == 14) {
-  $66 = $5;
-  $67 = ((($66)) + 4|0);
-  $68 = HEAP32[$67>>2]|0;
-  $69 = (($68) + 1)|0;
-  HEAP32[$67>>2] = $69;
-  $70 = $9;
-  $71 = ($70|0)!=(0|0);
-  if ($71) {
-   $72 = $6;
-   $73 = $9;
-   $74 = $10;
-   $75 = (($73) + ($74<<2)|0);
-   HEAP32[$75>>2] = $72;
-   $76 = $9;
-   $77 = ((($76)) + 16|0);
-   $78 = $10;
-   $79 = (($77) + ($78<<3)|0);
-   ;HEAP32[$79>>2]=HEAP32[$3>>2]|0;HEAP32[$79+4>>2]=HEAP32[$3+4>>2]|0;
-   STACKTOP = sp;return;
-  }
-  $80 = $4;
-  $81 = (_mrb_malloc($80,52)|0);
-  $7 = $81;
-  $82 = $7;
-  $83 = ($82|0)!=(0|0);
-  if (!($83)) {
-   STACKTOP = sp;return;
-  }
-  $84 = $7;
-  $85 = ((($84)) + 48|0);
-  HEAP32[$85>>2] = 0;
-  $86 = $6;
-  $87 = $7;
-  HEAP32[$87>>2] = $86;
-  $88 = $7;
-  $89 = ((($88)) + 16|0);
-  ;HEAP32[$89>>2]=HEAP32[$3>>2]|0;HEAP32[$89+4>>2]=HEAP32[$3+4>>2]|0;
-  $90 = $5;
-  $91 = ((($90)) + 8|0);
-  HEAP32[$91>>2] = 1;
-  $92 = $8;
-  $93 = ($92|0)!=(0|0);
-  $94 = $7;
-  if ($93) {
-   $95 = $8;
-   $96 = ((($95)) + 48|0);
-   HEAP32[$96>>2] = $94;
-   STACKTOP = sp;return;
-  } else {
-   $97 = $5;
-   HEAP32[$97>>2] = $94;
-   STACKTOP = sp;return;
-  }
- }
-}
-function _mrb_obj_iv_ifnone($0,$1,$2,$3) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- var $$byval_copy = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $4 = 0, $5 = 0, $6 = 0;
- var $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $$byval_copy = sp + 16|0;
- $4 = $0;
- $5 = $1;
- $6 = $2;
- $8 = $5;
- $9 = ((($8)) + 12|0);
- $10 = HEAP32[$9>>2]|0;
- $7 = $10;
- $11 = $7;
- $12 = ($11|0)!=(0|0);
- $13 = $4;
- if ($12) {
-  $17 = $7;
-  $18 = $6;
-  $19 = (_iv_get($13,$17,$18,$3)|0);
-  $20 = ($19<<24>>24)!=(0);
-  if ($20) {
-   STACKTOP = sp;return;
-  }
- } else {
-  $14 = (_iv_new($13)|0);
-  $15 = $5;
-  $16 = ((($15)) + 12|0);
-  HEAP32[$16>>2] = $14;
-  $7 = $14;
- }
- $21 = $4;
- $22 = $5;
- _mrb_write_barrier($21,$22);
- $23 = $4;
- $24 = $7;
- $25 = $6;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$3>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$3+4>>2]|0;
- _iv_put($23,$24,$25,$$byval_copy);
- STACKTOP = sp;return;
-}
-function _mrb_iv_set($0,$1,$2,$3) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $10 = 0, $11 = 0, $12 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $$byval_copy1 = sp + 16|0;
- $$byval_copy = sp + 8|0;
- $4 = $0;
- $5 = $2;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$1>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$1+4>>2]|0;
- $6 = (_obj_iv_p($$byval_copy)|0);
- $7 = ($6<<24>>24)!=(0);
- $8 = $4;
- if ($7) {
-  $9 = HEAP32[$1>>2]|0;
-  $10 = $5;
-  ;HEAP32[$$byval_copy1>>2]=HEAP32[$3>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$3+4>>2]|0;
-  _mrb_obj_iv_set($8,$9,$10,$$byval_copy1);
-  STACKTOP = sp;return;
- } else {
-  $11 = $4;
-  $12 = (_mrb_class_get($11,69160)|0);
-  _mrb_raise($8,$12,56506);
-  // unreachable;
- }
-}
-function _mrb_obj_iv_defined($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $4 = $0;
- $5 = $1;
- $6 = $2;
- $8 = $5;
- $9 = ((($8)) + 12|0);
- $10 = HEAP32[$9>>2]|0;
- $7 = $10;
- $11 = $7;
- $12 = ($11|0)!=(0|0);
- if ($12) {
-  $13 = $4;
-  $14 = $7;
-  $15 = $6;
-  $16 = (_iv_get($13,$14,$15,0)|0);
-  $3 = $16;
-  $17 = $3;
-  STACKTOP = sp;return ($17|0);
- } else {
-  $3 = 0;
-  $17 = $3;
-  STACKTOP = sp;return ($17|0);
- }
- return (0)|0;
-}
-function _mrb_iv_defined($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $10 = 0, $11 = 0, $12 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $$byval_copy = sp + 8|0;
- $4 = $0;
- $5 = $2;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$1>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$1+4>>2]|0;
- $6 = (_obj_iv_p($$byval_copy)|0);
- $7 = ($6<<24>>24)!=(0);
- if ($7) {
-  $8 = $4;
-  $9 = HEAP32[$1>>2]|0;
-  $10 = $5;
-  $11 = (_mrb_obj_iv_defined($8,$9,$10)|0);
-  $3 = $11;
-  $12 = $3;
-  STACKTOP = sp;return ($12|0);
- } else {
-  $3 = 0;
-  $12 = $3;
-  STACKTOP = sp;return ($12|0);
- }
- return (0)|0;
-}
-function _mrb_iv_p($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;
- var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0;
- var $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $7 = sp;
- $3 = $0;
- $4 = $1;
- $8 = $3;
- $9 = $4;
- $10 = (_mrb_sym2name_len($8,$9,$7)|0);
- $5 = $10;
- $11 = HEAP32[$7>>2]|0;
- $12 = ($11|0)<(2);
- if ($12) {
-  $2 = 0;
-  $54 = $2;
-  STACKTOP = sp;return ($54|0);
- }
- $13 = $5;
- $14 = HEAP8[$13>>0]|0;
- $15 = $14 << 24 >> 24;
- $16 = ($15|0)!=(64);
- if ($16) {
-  $2 = 0;
-  $54 = $2;
-  STACKTOP = sp;return ($54|0);
- }
- $17 = $5;
- $18 = ((($17)) + 1|0);
- $19 = HEAP8[$18>>0]|0;
- $20 = $19 << 24 >> 24;
- $21 = ($20|0)==(64);
- if ($21) {
-  $2 = 0;
-  $54 = $2;
-  STACKTOP = sp;return ($54|0);
- }
- $6 = 1;
- while(1) {
-  $22 = $6;
-  $23 = HEAP32[$7>>2]|0;
-  $24 = ($22|0)<($23|0);
-  if (!($24)) {
-   label = 15;
-   break;
-  }
-  $25 = $5;
-  $26 = $6;
-  $27 = (($25) + ($26)|0);
-  $28 = HEAP8[$27>>0]|0;
-  $29 = $28 << 24 >> 24;
-  $30 = $29 | 32;
-  $31 = (($30) - 97)|0;
-  $32 = ($31>>>0)<(26);
-  if (!($32)) {
-   $33 = $5;
-   $34 = $6;
-   $35 = (($33) + ($34)|0);
-   $36 = HEAP8[$35>>0]|0;
-   $37 = $36 << 24 >> 24;
-   $38 = (($37) - 48)|0;
-   $39 = ($38>>>0)<(10);
-   if (!($39)) {
-    $40 = $5;
-    $41 = $6;
-    $42 = (($40) + ($41)|0);
-    $43 = HEAP8[$42>>0]|0;
-    $44 = $43 << 24 >> 24;
-    $45 = ($44|0)==(95);
-    if (!($45)) {
-     $46 = $5;
-     $47 = $6;
-     $48 = (($46) + ($47)|0);
-     $49 = HEAP8[$48>>0]|0;
-     $50 = $49 << 24 >> 24;
-     $51 = ($50>>>0)<=(127);
-     if ($51) {
-      label = 13;
-      break;
-     }
-    }
-   }
-  }
-  $52 = $6;
-  $53 = (($52) + 1)|0;
-  $6 = $53;
- }
- if ((label|0) == 13) {
-  $2 = 0;
-  $54 = $2;
-  STACKTOP = sp;return ($54|0);
- }
- else if ((label|0) == 15) {
-  $2 = 1;
-  $54 = $2;
-  STACKTOP = sp;return ($54|0);
- }
- return (0)|0;
-}
-function _mrb_iv_check($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $vararg_buffer = sp;
- $4 = sp + 8|0;
- $2 = $0;
- $3 = $1;
- $5 = $2;
- $6 = $3;
- $7 = (_mrb_iv_p($5,$6)|0);
- $8 = ($7<<24>>24)!=(0);
- if ($8) {
-  STACKTOP = sp;return;
- } else {
-  $9 = $2;
-  $10 = $3;
-  $11 = $2;
-  $12 = $3;
-  _mrb_sym2str($4,$11,$12);
-  ;HEAP8[$vararg_buffer>>0]=HEAP8[$4>>0]|0;HEAP8[$vararg_buffer+1>>0]=HEAP8[$4+1>>0]|0;HEAP8[$vararg_buffer+2>>0]=HEAP8[$4+2>>0]|0;HEAP8[$vararg_buffer+3>>0]=HEAP8[$4+3>>0]|0;HEAP8[$vararg_buffer+4>>0]=HEAP8[$4+4>>0]|0;HEAP8[$vararg_buffer+5>>0]=HEAP8[$4+5>>0]|0;HEAP8[$vararg_buffer+6>>0]=HEAP8[$4+6>>0]|0;HEAP8[$vararg_buffer+7>>0]=HEAP8[$4+7>>0]|0;
-  _mrb_name_error($9,$10,56535,$vararg_buffer);
-  // unreachable;
- }
-}
-function _mrb_iv_copy($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;
- var $3 = 0, $30 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $0;
- $6 = HEAP32[$1>>2]|0;
- $4 = $6;
- $7 = HEAP32[$2>>2]|0;
- $5 = $7;
- $8 = $4;
- $9 = ((($8)) + 12|0);
- $10 = HEAP32[$9>>2]|0;
- $11 = ($10|0)!=(0|0);
- if ($11) {
-  $12 = $3;
-  $13 = $4;
-  $14 = ((($13)) + 12|0);
-  $15 = HEAP32[$14>>2]|0;
-  _iv_free($12,$15);
-  $16 = $4;
-  $17 = ((($16)) + 12|0);
-  HEAP32[$17>>2] = 0;
- }
- $18 = $5;
- $19 = ((($18)) + 12|0);
- $20 = HEAP32[$19>>2]|0;
- $21 = ($20|0)!=(0|0);
- if (!($21)) {
-  STACKTOP = sp;return;
- }
- $22 = $3;
- $23 = $4;
- _mrb_write_barrier($22,$23);
- $24 = $3;
- $25 = $5;
- $26 = ((($25)) + 12|0);
- $27 = HEAP32[$26>>2]|0;
- $28 = (_iv_copy($24,$27)|0);
- $29 = $4;
- $30 = ((($29)) + 12|0);
- HEAP32[$30>>2] = $28;
- STACKTOP = sp;return;
-}
-function _iv_copy($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $$byval_copy = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;
- var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $5 = 0;
- var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);
- $$byval_copy = sp + 40|0;
- $9 = sp;
- $3 = $0;
- $4 = $1;
- $10 = $4;
- $11 = HEAP32[$10>>2]|0;
- $5 = $11;
- $12 = $3;
- $13 = (_iv_new($12)|0);
- $6 = $13;
- L1: while(1) {
-  $14 = $5;
-  $15 = ($14|0)!=(0|0);
-  if (!($15)) {
-   label = 10;
-   break;
-  }
-  $7 = 0;
-  while(1) {
-   $16 = $7;
-   $17 = ($16>>>0)<(4);
-   $18 = $5;
-   if (!($17)) {
-    break;
-   }
-   $19 = $7;
-   $20 = (($18) + ($19<<2)|0);
-   $21 = HEAP32[$20>>2]|0;
-   $8 = $21;
-   $22 = $5;
-   $23 = ((($22)) + 16|0);
-   $24 = $7;
-   $25 = (($23) + ($24<<3)|0);
-   ;HEAP32[$9>>2]=HEAP32[$25>>2]|0;HEAP32[$9+4>>2]=HEAP32[$25+4>>2]|0;
-   $26 = $5;
-   $27 = ((($26)) + 48|0);
-   $28 = HEAP32[$27>>2]|0;
-   $29 = ($28|0)==(0|0);
-   if ($29) {
-    $30 = $7;
-    $31 = $4;
-    $32 = ((($31)) + 8|0);
-    $33 = HEAP32[$32>>2]|0;
-    $34 = ($30>>>0)>=($33>>>0);
-    if ($34) {
-     label = 7;
-     break L1;
-    }
-   }
-   $36 = $3;
-   $37 = $6;
-   $38 = $8;
-   ;HEAP32[$$byval_copy>>2]=HEAP32[$9>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$9+4>>2]|0;
-   _iv_put($36,$37,$38,$$byval_copy);
-   $39 = $7;
-   $40 = (($39) + 1)|0;
-   $7 = $40;
-  }
-  $41 = ((($18)) + 48|0);
-  $42 = HEAP32[$41>>2]|0;
-  $5 = $42;
- }
- if ((label|0) == 7) {
-  $35 = $6;
-  $2 = $35;
-  $44 = $2;
-  STACKTOP = sp;return ($44|0);
- }
- else if ((label|0) == 10) {
-  $43 = $6;
-  $2 = $43;
-  $44 = $2;
-  STACKTOP = sp;return ($44|0);
- }
- return (0)|0;
-}
-function _mrb_obj_iv_inspect($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $$byval_copy2 = 0, $$byval_copy3 = 0, $$byval_copy4 = 0, $$byval_copy5 = 0, $$byval_copy6 = 0, $$byval_copy7 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0;
- var $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $4 = 0, $5 = 0, $6 = 0;
- var $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 160|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(160|0);
- $$byval_copy7 = sp + 144|0;
- $$byval_copy6 = sp + 136|0;
- $$byval_copy5 = sp + 128|0;
- $$byval_copy4 = sp + 120|0;
- $$byval_copy3 = sp + 112|0;
- $$byval_copy2 = sp + 104|0;
- $$byval_copy1 = sp + 96|0;
- $$byval_copy = sp + 88|0;
- $8 = sp + 56|0;
- $9 = sp + 48|0;
- $10 = sp + 40|0;
- $11 = sp + 32|0;
- $12 = sp + 24|0;
- $13 = sp + 16|0;
- $14 = sp + 8|0;
- $15 = sp;
- $3 = $1;
- $4 = $2;
- $16 = $4;
- $17 = ((($16)) + 12|0);
- $18 = HEAP32[$17>>2]|0;
- $5 = $18;
- $19 = $3;
- $20 = $5;
- $21 = (_iv_size($19,$20)|0);
- $6 = $21;
- $22 = $6;
- $23 = ($22>>>0)>(0);
- $24 = $3;
- $25 = $4;
- if ($23) {
-  _mrb_obj_value_389($8,$25);
-  ;HEAP32[$$byval_copy>>2]=HEAP32[$8>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$8+4>>2]|0;
-  $26 = (_mrb_obj_classname($24,$$byval_copy)|0);
-  $7 = $26;
-  $27 = $3;
-  _mrb_str_buf_new($9,$27,30);
-  $28 = $3;
-  ;HEAP32[$$byval_copy1>>2]=HEAP32[$9>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$9+4>>2]|0;
-  _mrb_str_cat($10,$28,$$byval_copy1,56584,2);
-  $29 = $3;
-  $30 = $7;
-  ;HEAP32[$$byval_copy2>>2]=HEAP32[$9>>2]|0;HEAP32[$$byval_copy2+4>>2]=HEAP32[$9+4>>2]|0;
-  _mrb_str_cat_cstr($11,$29,$$byval_copy2,$30);
-  $31 = $3;
-  ;HEAP32[$$byval_copy3>>2]=HEAP32[$9>>2]|0;HEAP32[$$byval_copy3+4>>2]=HEAP32[$9+4>>2]|0;
-  _mrb_str_cat($12,$31,$$byval_copy3,68074,1);
-  $32 = $3;
-  $33 = $3;
-  $34 = $4;
-  _mrb_ptr_to_str($13,$33,$34);
-  ;HEAP32[$$byval_copy4>>2]=HEAP32[$9>>2]|0;HEAP32[$$byval_copy4+4>>2]=HEAP32[$9+4>>2]|0;
-  ;HEAP32[$$byval_copy5>>2]=HEAP32[$13>>2]|0;HEAP32[$$byval_copy5+4>>2]=HEAP32[$13+4>>2]|0;
-  _mrb_str_concat($32,$$byval_copy4,$$byval_copy5);
-  $35 = $3;
-  $36 = $5;
-  (_iv_foreach($35,$36,125,$9)|0);
-  $37 = $3;
-  ;HEAP32[$$byval_copy6>>2]=HEAP32[$9>>2]|0;HEAP32[$$byval_copy6+4>>2]=HEAP32[$9+4>>2]|0;
-  _mrb_str_cat($14,$37,$$byval_copy6,65540,1);
-  ;HEAP32[$0>>2]=HEAP32[$9>>2]|0;HEAP32[$0+4>>2]=HEAP32[$9+4>>2]|0;
-  STACKTOP = sp;return;
- } else {
-  _mrb_obj_value_389($15,$25);
-  ;HEAP32[$$byval_copy7>>2]=HEAP32[$15>>2]|0;HEAP32[$$byval_copy7+4>>2]=HEAP32[$15+4>>2]|0;
-  _mrb_any_to_s($0,$24,$$byval_copy7);
-  STACKTOP = sp;return;
- }
-}
-function _mrb_obj_value_389($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = sp;
- $2 = $1;
- $4 = $2;
- $5 = HEAP32[$4>>2]|0;
- $6 = $5 & 255;
- $7 = ((($3)) + 4|0);
- HEAP32[$7>>2] = $6;
- $8 = $2;
- HEAP32[$3>>2] = $8;
- ;HEAP32[$0>>2]=HEAP32[$3>>2]|0;HEAP32[$0+4>>2]=HEAP32[$3+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _inspect_i($0,$1,$2,$3) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $$byval_copy2 = 0, $$byval_copy3 = 0, $$byval_copy4 = 0, $$byval_copy5 = 0, $$byval_copy6 = 0, $$byval_copy7 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0;
- var $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0;
- var $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 176|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(176|0);
- $$byval_copy7 = sp + 160|0;
- $$byval_copy6 = sp + 152|0;
- $$byval_copy5 = sp + 144|0;
- $$byval_copy4 = sp + 136|0;
- $$byval_copy3 = sp + 128|0;
- $$byval_copy2 = sp + 120|0;
- $$byval_copy1 = sp + 112|0;
- $$byval_copy = sp + 104|0;
- $7 = sp + 80|0;
- $9 = sp + 72|0;
- $10 = sp + 64|0;
- $12 = sp + 48|0;
- $13 = sp + 40|0;
- $14 = sp + 32|0;
- $15 = sp + 24|0;
- $16 = sp + 16|0;
- $17 = sp + 8|0;
- $18 = sp;
- $4 = $0;
- $5 = $1;
- $6 = $3;
- $19 = $6;
- ;HEAP32[$7>>2]=HEAP32[$19>>2]|0;HEAP32[$7+4>>2]=HEAP32[$19+4>>2]|0;
- $20 = HEAP32[$7>>2]|0;
- $21 = HEAP32[$20>>2]|0;
- $22 = $21 >>> 11;
- $23 = $22 & 8;
- $24 = ($23|0)!=(0);
- $25 = HEAP32[$7>>2]|0;
- $26 = ((($25)) + 12|0);
- if ($24) {
-  $29 = $26;
- } else {
-  $27 = ((($26)) + 8|0);
-  $28 = HEAP32[$27>>2]|0;
-  $29 = $28;
- }
- $11 = $29;
- $30 = $11;
- $31 = HEAP8[$30>>0]|0;
- $32 = $31 << 24 >> 24;
- $33 = ($32|0)==(45);
- if ($33) {
-  $34 = $11;
-  HEAP8[$34>>0] = 35;
-  $35 = $4;
-  ;HEAP32[$$byval_copy>>2]=HEAP32[$7>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$7+4>>2]|0;
-  _mrb_str_cat($12,$35,$$byval_copy,67795,1);
- } else {
-  $36 = $4;
-  ;HEAP32[$$byval_copy1>>2]=HEAP32[$7>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$7+4>>2]|0;
-  _mrb_str_cat($13,$36,$$byval_copy1,57540,2);
- }
- $37 = $4;
- $38 = $5;
- $39 = (_mrb_sym2name_len($37,$38,$9)|0);
- $8 = $39;
- $40 = $4;
- $41 = $8;
- $42 = HEAP32[$9>>2]|0;
- ;HEAP32[$$byval_copy2>>2]=HEAP32[$7>>2]|0;HEAP32[$$byval_copy2+4>>2]=HEAP32[$7+4>>2]|0;
- _mrb_str_cat($14,$40,$$byval_copy2,$41,$42);
- $43 = $4;
- ;HEAP32[$$byval_copy3>>2]=HEAP32[$7>>2]|0;HEAP32[$$byval_copy3+4>>2]=HEAP32[$7+4>>2]|0;
- _mrb_str_cat($15,$43,$$byval_copy3,66243,1);
- $44 = ((($2)) + 4|0);
- $45 = HEAP32[$44>>2]|0;
- $46 = ($45|0)==(8);
- $47 = $4;
- if ($46) {
-  ;HEAP32[$$byval_copy4>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy4+4>>2]=HEAP32[$2+4>>2]|0;
-  _mrb_any_to_s($16,$47,$$byval_copy4);
-  ;HEAP32[$10>>2]=HEAP32[$16>>2]|0;HEAP32[$10+4>>2]=HEAP32[$16+4>>2]|0;
-  $48 = $4;
-  ;HEAP32[$$byval_copy6>>2]=HEAP32[$7>>2]|0;HEAP32[$$byval_copy6+4>>2]=HEAP32[$7+4>>2]|0;
-  ;HEAP32[$$byval_copy7>>2]=HEAP32[$10>>2]|0;HEAP32[$$byval_copy7+4>>2]=HEAP32[$10+4>>2]|0;
-  _mrb_str_cat_str($18,$48,$$byval_copy6,$$byval_copy7);
-  STACKTOP = sp;return 0;
- } else {
-  ;HEAP32[$$byval_copy5>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy5+4>>2]=HEAP32[$2+4>>2]|0;
-  _mrb_inspect($17,$47,$$byval_copy5);
-  ;HEAP32[$10>>2]=HEAP32[$17>>2]|0;HEAP32[$10+4>>2]=HEAP32[$17+4>>2]|0;
-  $48 = $4;
-  ;HEAP32[$$byval_copy6>>2]=HEAP32[$7>>2]|0;HEAP32[$$byval_copy6+4>>2]=HEAP32[$7+4>>2]|0;
-  ;HEAP32[$$byval_copy7>>2]=HEAP32[$10>>2]|0;HEAP32[$$byval_copy7+4>>2]=HEAP32[$10+4>>2]|0;
-  _mrb_str_cat_str($18,$48,$$byval_copy6,$$byval_copy7);
-  STACKTOP = sp;return 0;
- }
- return (0)|0;
-}
-function _mrb_iv_remove($0,$1,$2,$3) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- var $$byval_copy = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $$byval_copy = sp + 24|0;
- $7 = sp;
- $4 = $1;
- $5 = $3;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
- $8 = (_obj_iv_p($$byval_copy)|0);
- $9 = ($8<<24>>24)!=(0);
- if ($9) {
-  $10 = HEAP32[$2>>2]|0;
-  $11 = ((($10)) + 12|0);
-  $12 = HEAP32[$11>>2]|0;
-  $6 = $12;
-  $13 = $6;
-  $14 = ($13|0)!=(0|0);
-  if ($14) {
-   $15 = $4;
-   $16 = $6;
-   $17 = $5;
-   $18 = (_iv_del($15,$16,$17,$7)|0);
-   $19 = $18&255;
-   $20 = ($19|0)!=(0);
-   if ($20) {
-    ;HEAP32[$0>>2]=HEAP32[$7>>2]|0;HEAP32[$0+4>>2]=HEAP32[$7+4>>2]|0;
-    STACKTOP = sp;return;
-   }
-  }
- }
- _mrb_undef_value_396($0);
- STACKTOP = sp;return;
-}
-function _iv_del($0,$1,$2,$3) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;
- var $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0;
- var $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $5 = $0;
- $6 = $1;
- $7 = $2;
- $8 = $3;
- $12 = $6;
- $13 = HEAP32[$12>>2]|0;
- $9 = $13;
- L1: while(1) {
-  $14 = $9;
-  $15 = ($14|0)!=(0|0);
-  if (!($15)) {
-   label = 14;
-   break;
-  }
-  $10 = 0;
-  while(1) {
-   $16 = $10;
-   $17 = ($16>>>0)<(4);
-   $18 = $9;
-   if (!($17)) {
-    break;
-   }
-   $19 = $10;
-   $20 = (($18) + ($19<<2)|0);
-   $21 = HEAP32[$20>>2]|0;
-   $11 = $21;
-   $22 = $9;
-   $23 = ((($22)) + 48|0);
-   $24 = HEAP32[$23>>2]|0;
-   $25 = ($24|0)!=(0|0);
-   if (!($25)) {
-    $26 = $10;
-    $27 = $6;
-    $28 = ((($27)) + 8|0);
-    $29 = HEAP32[$28>>2]|0;
-    $30 = ($26>>>0)>=($29>>>0);
-    if ($30) {
-     label = 7;
-     break L1;
-    }
-   }
-   $31 = $11;
-   $32 = $7;
-   $33 = ($31|0)==($32|0);
-   if ($33) {
-    label = 9;
-    break L1;
-   }
-   $48 = $10;
-   $49 = (($48) + 1)|0;
-   $10 = $49;
-  }
-  $50 = ((($18)) + 48|0);
-  $51 = HEAP32[$50>>2]|0;
-  $9 = $51;
- }
- if ((label|0) == 7) {
-  $4 = 0;
-  $52 = $4;
-  STACKTOP = sp;return ($52|0);
- }
- else if ((label|0) == 9) {
-  $34 = $6;
-  $35 = ((($34)) + 4|0);
-  $36 = HEAP32[$35>>2]|0;
-  $37 = (($36) + -1)|0;
-  HEAP32[$35>>2] = $37;
-  $38 = $9;
-  $39 = $10;
-  $40 = (($38) + ($39<<2)|0);
-  HEAP32[$40>>2] = 0;
-  $41 = $8;
-  $42 = ($41|0)!=(0|0);
-  if ($42) {
-   $43 = $8;
-   $44 = $9;
-   $45 = ((($44)) + 16|0);
-   $46 = $10;
-   $47 = (($45) + ($46<<3)|0);
-   ;HEAP32[$43>>2]=HEAP32[$47>>2]|0;HEAP32[$43+4>>2]=HEAP32[$47+4>>2]|0;
-  }
-  $4 = 1;
-  $52 = $4;
-  STACKTOP = sp;return ($52|0);
- }
- else if ((label|0) == 14) {
-  $4 = 0;
-  $52 = $4;
-  STACKTOP = sp;return ($52|0);
- }
- return (0)|0;
-}
-function _mrb_undef_value_396($0) {
- $0 = $0|0;
- var $1 = 0, $2 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $1 = sp;
- $2 = ((($1)) + 4|0);
- HEAP32[$2>>2] = 5;
- HEAP32[$1>>2] = 0;
- ;HEAP32[$0>>2]=HEAP32[$1>>2]|0;HEAP32[$0+4>>2]=HEAP32[$1+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_vm_iv_get($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $10 = 0, $11 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $$byval_copy = sp + 8|0;
- $3 = $1;
- $4 = $2;
- $5 = $3;
- $6 = $3;
- $7 = ((($6)) + 12|0);
- $8 = HEAP32[$7>>2]|0;
- $9 = ((($8)) + 4|0);
- $10 = HEAP32[$9>>2]|0;
- $11 = $4;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$10>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$10+4>>2]|0;
- _mrb_iv_get($0,$5,$$byval_copy,$11);
- STACKTOP = sp;return;
-}
-function _mrb_vm_iv_set($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $10 = 0, $11 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $$byval_copy1 = sp + 16|0;
- $$byval_copy = sp + 8|0;
- $3 = $0;
- $4 = $1;
- $5 = $3;
- $6 = $3;
- $7 = ((($6)) + 12|0);
- $8 = HEAP32[$7>>2]|0;
- $9 = ((($8)) + 4|0);
- $10 = HEAP32[$9>>2]|0;
- $11 = $4;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$10>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$10+4>>2]|0;
- ;HEAP32[$$byval_copy1>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$2+4>>2]|0;
- _mrb_iv_set($5,$$byval_copy,$11,$$byval_copy1);
- STACKTOP = sp;return;
-}
-function _mrb_obj_instance_variables($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $$byval_copy = sp + 24|0;
- $4 = sp + 8|0;
- $5 = sp;
- $3 = $1;
- $6 = $3;
- _mrb_ary_new($5,$6);
- ;HEAP32[$4>>2]=HEAP32[$5>>2]|0;HEAP32[$4+4>>2]=HEAP32[$5+4>>2]|0;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
- $7 = (_obj_iv_p($$byval_copy)|0);
- $8 = $7&255;
- $9 = ($8|0)!=(0);
- if ($9) {
-  $10 = HEAP32[$2>>2]|0;
-  $11 = ((($10)) + 12|0);
-  $12 = HEAP32[$11>>2]|0;
-  $13 = ($12|0)!=(0|0);
-  if ($13) {
-   $14 = $3;
-   $15 = HEAP32[$2>>2]|0;
-   $16 = ((($15)) + 12|0);
-   $17 = HEAP32[$16>>2]|0;
-   (_iv_foreach($14,$17,126,$4)|0);
-  }
- }
- ;HEAP32[$0>>2]=HEAP32[$4>>2]|0;HEAP32[$0+4>>2]=HEAP32[$4+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _iv_i($0,$1,$2,$3) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;
- var $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);
- $$byval_copy1 = sp + 48|0;
- $$byval_copy = sp + 40|0;
- $7 = sp + 16|0;
- $9 = sp + 8|0;
- $10 = sp;
- $4 = $0;
- $5 = $1;
- $6 = $3;
- $11 = $6;
- ;HEAP32[$7>>2]=HEAP32[$11>>2]|0;HEAP32[$7+4>>2]=HEAP32[$11+4>>2]|0;
- $12 = $4;
- $13 = $5;
- $14 = (_mrb_sym2name_len($12,$13,$9)|0);
- $8 = $14;
- $15 = HEAP32[$9>>2]|0;
- $16 = ($15|0)>(1);
- if (!($16)) {
-  STACKTOP = sp;return 0;
- }
- $17 = $8;
- $18 = HEAP8[$17>>0]|0;
- $19 = $18 << 24 >> 24;
- $20 = ($19|0)==(64);
- if (!($20)) {
-  STACKTOP = sp;return 0;
- }
- $21 = $8;
- $22 = ((($21)) + 1|0);
- $23 = HEAP8[$22>>0]|0;
- $24 = $23 << 24 >> 24;
- $25 = ($24|0)!=(64);
- if (!($25)) {
-  STACKTOP = sp;return 0;
- }
- $26 = $4;
- $27 = $5;
- _mrb_symbol_value_397($10,$27);
- ;HEAP32[$$byval_copy>>2]=HEAP32[$7>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$7+4>>2]|0;
- ;HEAP32[$$byval_copy1>>2]=HEAP32[$10>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$10+4>>2]|0;
- _mrb_ary_push($26,$$byval_copy,$$byval_copy1);
- STACKTOP = sp;return 0;
-}
-function _mrb_symbol_value_397($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = sp;
- $2 = $1;
- $4 = ((($3)) + 4|0);
- HEAP32[$4>>2] = 4;
- $5 = $2;
- HEAP32[$3>>2] = $5;
- ;HEAP32[$0>>2]=HEAP32[$3>>2]|0;HEAP32[$0+4>>2]=HEAP32[$3+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_mod_class_variables($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0;
- var sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $4 = sp + 16|0;
- $6 = sp;
- $3 = $1;
- $7 = $3;
- _mrb_ary_new($6,$7);
- ;HEAP32[$4>>2]=HEAP32[$6>>2]|0;HEAP32[$4+4>>2]=HEAP32[$6+4>>2]|0;
- $8 = HEAP32[$2>>2]|0;
- $5 = $8;
- while(1) {
-  $9 = $5;
-  $10 = ($9|0)!=(0|0);
-  if (!($10)) {
-   break;
-  }
-  $11 = $5;
-  $12 = ((($11)) + 12|0);
-  $13 = HEAP32[$12>>2]|0;
-  $14 = ($13|0)!=(0|0);
-  if ($14) {
-   $15 = $3;
-   $16 = $5;
-   $17 = ((($16)) + 12|0);
-   $18 = HEAP32[$17>>2]|0;
-   (_iv_foreach($15,$18,127,$4)|0);
-  }
-  $19 = $5;
-  $20 = ((($19)) + 20|0);
-  $21 = HEAP32[$20>>2]|0;
-  $5 = $21;
- }
- ;HEAP32[$0>>2]=HEAP32[$4>>2]|0;HEAP32[$0+4>>2]=HEAP32[$4+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _cv_i($0,$1,$2,$3) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;
- var $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);
- $$byval_copy1 = sp + 48|0;
- $$byval_copy = sp + 40|0;
- $7 = sp + 16|0;
- $9 = sp + 8|0;
- $10 = sp;
- $4 = $0;
- $5 = $1;
- $6 = $3;
- $11 = $6;
- ;HEAP32[$7>>2]=HEAP32[$11>>2]|0;HEAP32[$7+4>>2]=HEAP32[$11+4>>2]|0;
- $12 = $4;
- $13 = $5;
- $14 = (_mrb_sym2name_len($12,$13,$9)|0);
- $8 = $14;
- $15 = HEAP32[$9>>2]|0;
- $16 = ($15|0)>(2);
- if (!($16)) {
-  STACKTOP = sp;return 0;
- }
- $17 = $8;
- $18 = HEAP8[$17>>0]|0;
- $19 = $18 << 24 >> 24;
- $20 = ($19|0)==(64);
- if (!($20)) {
-  STACKTOP = sp;return 0;
- }
- $21 = $8;
- $22 = ((($21)) + 1|0);
- $23 = HEAP8[$22>>0]|0;
- $24 = $23 << 24 >> 24;
- $25 = ($24|0)==(64);
- if (!($25)) {
-  STACKTOP = sp;return 0;
- }
- $26 = $4;
- $27 = $5;
- _mrb_symbol_value_397($10,$27);
- ;HEAP32[$$byval_copy>>2]=HEAP32[$7>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$7+4>>2]|0;
- ;HEAP32[$$byval_copy1>>2]=HEAP32[$10>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$10+4>>2]|0;
- _mrb_ary_push($26,$$byval_copy,$$byval_copy1);
- STACKTOP = sp;return 0;
-}
-function _mrb_mod_cv_get($0,$1,$2,$3) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- var $$old = 0, $$old1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;
- var $28 = 0, $29 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0;
- var $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0;
- var $65 = 0, $66 = 0, $67 = 0, $7 = 0, $8 = 0, $9 = 0, $or$cond = 0, $vararg_buffer = 0, $vararg_ptr2 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 80|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(80|0);
- $vararg_buffer = sp;
- $8 = sp + 48|0;
- $9 = sp + 40|0;
- $10 = sp + 32|0;
- $11 = sp + 24|0;
- $12 = sp + 16|0;
- $4 = $1;
- $5 = $2;
- $6 = $3;
- $13 = $5;
- $7 = $13;
- while(1) {
-  $14 = $5;
-  $15 = ($14|0)!=(0|0);
-  if (!($15)) {
-   break;
-  }
-  $16 = $5;
-  $17 = ((($16)) + 12|0);
-  $18 = HEAP32[$17>>2]|0;
-  $19 = ($18|0)!=(0|0);
-  if ($19) {
-   $20 = $4;
-   $21 = $5;
-   $22 = ((($21)) + 12|0);
-   $23 = HEAP32[$22>>2]|0;
-   $24 = $6;
-   $25 = (_iv_get($20,$23,$24,$8)|0);
-   $26 = $25&255;
-   $27 = ($26|0)!=(0);
-   if ($27) {
-    label = 5;
-    break;
-   }
-  }
-  $28 = $5;
-  $29 = ((($28)) + 20|0);
-  $30 = HEAP32[$29>>2]|0;
-  $5 = $30;
- }
- if ((label|0) == 5) {
-  ;HEAP32[$0>>2]=HEAP32[$8>>2]|0;HEAP32[$0+4>>2]=HEAP32[$8+4>>2]|0;
-  STACKTOP = sp;return;
- }
- $31 = $7;
- $32 = ($31|0)!=(0|0);
- L11: do {
-  if ($32) {
-   $33 = $7;
-   $34 = HEAP32[$33>>2]|0;
-   $35 = $34 & 255;
-   $36 = ($35|0)==(12);
-   if ($36) {
-    $37 = $4;
-    $38 = $7;
-    $39 = $4;
-    $40 = (_mrb_intern_static($39,68237,12)|0);
-    _mrb_obj_iv_get($10,$37,$38,$40);
-    ;HEAP32[$9>>2]=HEAP32[$10>>2]|0;HEAP32[$9+4>>2]=HEAP32[$10+4>>2]|0;
-    $41 = HEAP32[$9>>2]|0;
-    $5 = $41;
-    $42 = $5;
-    $43 = HEAP32[$42>>2]|0;
-    $44 = $43 & 255;
-    $45 = ($44|0)==(9);
-    $46 = $5;
-    $47 = ($46|0)!=(0|0);
-    $or$cond = $45 & $47;
-    if ($or$cond) {
-     while(1) {
-      $48 = $5;
-      $49 = ((($48)) + 12|0);
-      $50 = HEAP32[$49>>2]|0;
-      $51 = ($50|0)!=(0|0);
-      if ($51) {
-       $52 = $4;
-       $53 = $5;
-       $54 = ((($53)) + 12|0);
-       $55 = HEAP32[$54>>2]|0;
-       $56 = $6;
-       $57 = (_iv_get($52,$55,$56,$8)|0);
-       $58 = $57&255;
-       $59 = ($58|0)!=(0);
-       if ($59) {
-        break;
-       }
-      }
-      $60 = $5;
-      $61 = ((($60)) + 20|0);
-      $62 = HEAP32[$61>>2]|0;
-      $5 = $62;
-      $$old = $5;
-      $$old1 = ($$old|0)!=(0|0);
-      if (!($$old1)) {
-       break L11;
-      }
-     }
-     ;HEAP32[$0>>2]=HEAP32[$8>>2]|0;HEAP32[$0+4>>2]=HEAP32[$8+4>>2]|0;
-     STACKTOP = sp;return;
-    }
-   }
-  }
- } while(0);
- $63 = $4;
- $64 = $6;
- $65 = $4;
- $66 = $6;
- _mrb_sym2str($11,$65,$66);
- $67 = $7;
- _mrb_obj_value_389($12,$67);
- ;HEAP8[$vararg_buffer>>0]=HEAP8[$11>>0]|0;HEAP8[$vararg_buffer+1>>0]=HEAP8[$11+1>>0]|0;HEAP8[$vararg_buffer+2>>0]=HEAP8[$11+2>>0]|0;HEAP8[$vararg_buffer+3>>0]=HEAP8[$11+3>>0]|0;HEAP8[$vararg_buffer+4>>0]=HEAP8[$11+4>>0]|0;HEAP8[$vararg_buffer+5>>0]=HEAP8[$11+5>>0]|0;HEAP8[$vararg_buffer+6>>0]=HEAP8[$11+6>>0]|0;HEAP8[$vararg_buffer+7>>0]=HEAP8[$11+7>>0]|0;
- $vararg_ptr2 = ((($vararg_buffer)) + 8|0);
- ;HEAP8[$vararg_ptr2>>0]=HEAP8[$12>>0]|0;HEAP8[$vararg_ptr2+1>>0]=HEAP8[$12+1>>0]|0;HEAP8[$vararg_ptr2+2>>0]=HEAP8[$12+2>>0]|0;HEAP8[$vararg_ptr2+3>>0]=HEAP8[$12+3>>0]|0;HEAP8[$vararg_ptr2+4>>0]=HEAP8[$12+4>>0]|0;HEAP8[$vararg_ptr2+5>>0]=HEAP8[$12+5>>0]|0;HEAP8[$vararg_ptr2+6>>0]=HEAP8[$12+6>>0]|0;HEAP8[$vararg_ptr2+7>>0]=HEAP8[$12+7>>0]|0;
- _mrb_name_error($63,$64,56587,$vararg_buffer);
- // unreachable;
-}
-function _mrb_cv_get($0,$1,$2,$3) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- var $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $4 = $1;
- $5 = $3;
- $6 = $4;
- $7 = HEAP32[$2>>2]|0;
- $8 = $5;
- _mrb_mod_cv_get($0,$6,$7,$8);
- STACKTOP = sp;return;
-}
-function _mrb_mod_cv_set($0,$1,$2,$3) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;
- var $28 = 0, $29 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0;
- var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);
- $$byval_copy1 = sp + 32|0;
- $$byval_copy = sp + 24|0;
- $4 = $0;
- $5 = $1;
- $6 = $2;
- $9 = $5;
- $7 = $9;
- while(1) {
-  $10 = $5;
-  $11 = ($10|0)!=(0|0);
-  if (!($11)) {
-   break;
-  }
-  $12 = $5;
-  $13 = ((($12)) + 12|0);
-  $14 = HEAP32[$13>>2]|0;
-  $15 = ($14|0)!=(0|0);
-  if ($15) {
-   $16 = $5;
-   $17 = ((($16)) + 12|0);
-   $18 = HEAP32[$17>>2]|0;
-   $8 = $18;
-   $19 = $4;
-   $20 = $8;
-   $21 = $6;
-   $22 = (_iv_get($19,$20,$21,0)|0);
-   $23 = ($22<<24>>24)!=(0);
-   if ($23) {
-    label = 5;
-    break;
-   }
-  }
-  $29 = $5;
-  $30 = ((($29)) + 20|0);
-  $31 = HEAP32[$30>>2]|0;
-  $5 = $31;
- }
- if ((label|0) == 5) {
-  $24 = $4;
-  $25 = $5;
-  _mrb_write_barrier($24,$25);
-  $26 = $4;
-  $27 = $8;
-  $28 = $6;
-  ;HEAP32[$$byval_copy>>2]=HEAP32[$3>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$3+4>>2]|0;
-  _iv_put($26,$27,$28,$$byval_copy);
-  STACKTOP = sp;return;
- }
- $32 = $7;
- $33 = ((($32)) + 12|0);
- $34 = HEAP32[$33>>2]|0;
- $35 = ($34|0)!=(0|0);
- if (!($35)) {
-  $36 = $4;
-  $37 = (_iv_new($36)|0);
-  $38 = $7;
-  $39 = ((($38)) + 12|0);
-  HEAP32[$39>>2] = $37;
- }
- $40 = $4;
- $41 = $7;
- _mrb_write_barrier($40,$41);
- $42 = $4;
- $43 = $7;
- $44 = ((($43)) + 12|0);
- $45 = HEAP32[$44>>2]|0;
- $46 = $6;
- ;HEAP32[$$byval_copy1>>2]=HEAP32[$3>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$3+4>>2]|0;
- _iv_put($42,$45,$46,$$byval_copy1);
- STACKTOP = sp;return;
-}
-function _mrb_cv_set($0,$1,$2,$3) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- var $$byval_copy = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $$byval_copy = sp + 8|0;
- $4 = $0;
- $5 = $2;
- $6 = $4;
- $7 = HEAP32[$1>>2]|0;
- $8 = $5;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$3>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$3+4>>2]|0;
- _mrb_mod_cv_set($6,$7,$8,$$byval_copy);
- STACKTOP = sp;return;
-}
-function _mrb_mod_cv_defined($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0;
- var $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $4 = $0;
- $5 = $1;
- $6 = $2;
- while(1) {
-  $8 = $5;
-  $9 = ($8|0)!=(0|0);
-  if (!($9)) {
-   label = 7;
-   break;
-  }
-  $10 = $5;
-  $11 = ((($10)) + 12|0);
-  $12 = HEAP32[$11>>2]|0;
-  $13 = ($12|0)!=(0|0);
-  if ($13) {
-   $14 = $5;
-   $15 = ((($14)) + 12|0);
-   $16 = HEAP32[$15>>2]|0;
-   $7 = $16;
-   $17 = $4;
-   $18 = $7;
-   $19 = $6;
-   $20 = (_iv_get($17,$18,$19,0)|0);
-   $21 = ($20<<24>>24)!=(0);
-   if ($21) {
-    label = 5;
-    break;
-   }
-  }
-  $22 = $5;
-  $23 = ((($22)) + 20|0);
-  $24 = HEAP32[$23>>2]|0;
-  $5 = $24;
- }
- if ((label|0) == 5) {
-  $3 = 1;
-  $25 = $3;
-  STACKTOP = sp;return ($25|0);
- }
- else if ((label|0) == 7) {
-  $3 = 0;
-  $25 = $3;
-  STACKTOP = sp;return ($25|0);
- }
- return (0)|0;
-}
-function _mrb_cv_defined($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $0;
- $4 = $2;
- $5 = $3;
- $6 = HEAP32[$1>>2]|0;
- $7 = $4;
- $8 = (_mrb_mod_cv_defined($5,$6,$7)|0);
- STACKTOP = sp;return ($8|0);
-}
-function _mrb_vm_cv_get($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $3 = 0, $4 = 0, $5 = 0;
- var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $1;
- $4 = $2;
- $6 = $3;
- $7 = ((($6)) + 12|0);
- $8 = HEAP32[$7>>2]|0;
- $9 = ((($8)) + 16|0);
- $10 = HEAP32[$9>>2]|0;
- $11 = ((($10)) + 4|0);
- $12 = HEAP32[$11>>2]|0;
- $13 = ((($12)) + 16|0);
- $14 = HEAP32[$13>>2]|0;
- $5 = $14;
- $15 = $5;
- $16 = ($15|0)!=(0|0);
- if ($16) {
-  $24 = $3;
-  $25 = $5;
-  $26 = $4;
-  _mrb_mod_cv_get($0,$24,$25,$26);
-  STACKTOP = sp;return;
- }
- $17 = $3;
- $18 = ((($17)) + 12|0);
- $19 = HEAP32[$18>>2]|0;
- $20 = ((($19)) + 16|0);
- $21 = HEAP32[$20>>2]|0;
- $22 = ((($21)) + 44|0);
- $23 = HEAP32[$22>>2]|0;
- $5 = $23;
- $24 = $3;
- $25 = $5;
- $26 = $4;
- _mrb_mod_cv_get($0,$24,$25,$26);
- STACKTOP = sp;return;
-}
-function _mrb_vm_cv_set($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $3 = 0, $4 = 0;
- var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $$byval_copy = sp + 16|0;
- $3 = $0;
- $4 = $1;
- $6 = $3;
- $7 = ((($6)) + 12|0);
- $8 = HEAP32[$7>>2]|0;
- $9 = ((($8)) + 16|0);
- $10 = HEAP32[$9>>2]|0;
- $11 = ((($10)) + 4|0);
- $12 = HEAP32[$11>>2]|0;
- $13 = ((($12)) + 16|0);
- $14 = HEAP32[$13>>2]|0;
- $5 = $14;
- $15 = $5;
- $16 = ($15|0)!=(0|0);
- if (!($16)) {
-  $17 = $3;
-  $18 = ((($17)) + 12|0);
-  $19 = HEAP32[$18>>2]|0;
-  $20 = ((($19)) + 16|0);
-  $21 = HEAP32[$20>>2]|0;
-  $22 = ((($21)) + 44|0);
-  $23 = HEAP32[$22>>2]|0;
-  $5 = $23;
- }
- $24 = $3;
- $25 = $5;
- $26 = $4;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
- _mrb_mod_cv_set($24,$25,$26,$$byval_copy);
- STACKTOP = sp;return;
-}
-function _mrb_const_get($0,$1,$2,$3) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- var $$byval_copy = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $$byval_copy = sp + 8|0;
- $4 = $1;
- $5 = $3;
- $6 = $4;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
- _mod_const_check($6,$$byval_copy);
- $7 = $4;
- $8 = HEAP32[$2>>2]|0;
- $9 = $5;
- _const_get($0,$7,$8,$9);
- STACKTOP = sp;return;
-}
-function _mod_const_check($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = ((($1)) + 4|0);
- $4 = HEAP32[$3>>2]|0;
- switch ($4|0) {
- case 12: case 10: case 9:  {
-  STACKTOP = sp;return;
-  break;
- }
- default: {
-  $5 = $2;
-  $6 = $2;
-  $7 = (_mrb_class_get($6,69204)|0);
-  _mrb_raise($5,$7,56625);
-  // unreachable;
- }
- }
-}
-function _const_get($0,$1,$2,$3) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- var $$byval_copy = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;
- var $29 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0;
- var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $or$cond = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 80|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(80|0);
- $$byval_copy = sp + 56|0;
- $8 = sp + 32|0;
- $11 = sp + 16|0;
- $12 = sp + 8|0;
- $13 = sp;
- $4 = $1;
- $5 = $2;
- $6 = $3;
- $14 = $5;
- $7 = $14;
- $10 = 0;
- L1: while(1) {
-  while(1) {
-   $15 = $7;
-   $16 = ($15|0)!=(0|0);
-   if (!($16)) {
-    break;
-   }
-   $17 = $7;
-   $18 = ((($17)) + 12|0);
-   $19 = HEAP32[$18>>2]|0;
-   $20 = ($19|0)!=(0|0);
-   if ($20) {
-    $21 = $7;
-    $22 = ((($21)) + 12|0);
-    $23 = HEAP32[$22>>2]|0;
-    $9 = $23;
-    $24 = $4;
-    $25 = $9;
-    $26 = $6;
-    $27 = (_iv_get($24,$25,$26,$8)|0);
-    $28 = ($27<<24>>24)!=(0);
-    if ($28) {
-     label = 6;
-     break L1;
-    }
-   }
-   $29 = $7;
-   $30 = ((($29)) + 20|0);
-   $31 = HEAP32[$30>>2]|0;
-   $7 = $31;
-  }
-  $32 = $10;
-  $33 = ($32<<24>>24)==(0);
-  $34 = $5;
-  $35 = ($34|0)!=(0|0);
-  $or$cond = $33 & $35;
-  if (!($or$cond)) {
-   label = 11;
-   break;
-  }
-  $36 = $5;
-  $37 = HEAP32[$36>>2]|0;
-  $38 = $37 & 255;
-  $39 = ($38|0)==(10);
-  if (!($39)) {
-   label = 11;
-   break;
-  }
-  $40 = $4;
-  $41 = ((($40)) + 32|0);
-  $42 = HEAP32[$41>>2]|0;
-  $7 = $42;
-  $10 = 1;
- }
- if ((label|0) == 6) {
-  ;HEAP32[$0>>2]=HEAP32[$8>>2]|0;HEAP32[$0+4>>2]=HEAP32[$8+4>>2]|0;
-  STACKTOP = sp;return;
- }
- else if ((label|0) == 11) {
-  $43 = $6;
-  _mrb_symbol_value_397($12,$43);
-  ;HEAP32[$11>>2]=HEAP32[$12>>2]|0;HEAP32[$11+4>>2]=HEAP32[$12+4>>2]|0;
-  $44 = $4;
-  $45 = $5;
-  _mrb_obj_value_389($13,$45);
-  $46 = $4;
-  $47 = (_mrb_intern_static($46,66034,13)|0);
-  ;HEAP32[$$byval_copy>>2]=HEAP32[$13>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$13+4>>2]|0;
-  _mrb_funcall_argv($0,$44,$$byval_copy,$47,1,$11);
-  STACKTOP = sp;return;
- }
-}
-function _mrb_vm_const_get($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;
- var $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0;
- var $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0;
- var $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);
- $7 = sp + 16|0;
- $8 = sp + 8|0;
- $9 = sp;
- $3 = $1;
- $4 = $2;
- $10 = $3;
- $11 = ((($10)) + 12|0);
- $12 = HEAP32[$11>>2]|0;
- $13 = ((($12)) + 16|0);
- $14 = HEAP32[$13>>2]|0;
- $15 = ((($14)) + 4|0);
- $16 = HEAP32[$15>>2]|0;
- $17 = ((($16)) + 16|0);
- $18 = HEAP32[$17>>2]|0;
- $5 = $18;
- $19 = $5;
- $20 = ($19|0)!=(0|0);
- if (!($20)) {
-  $21 = $3;
-  $22 = ((($21)) + 12|0);
-  $23 = HEAP32[$22>>2]|0;
-  $24 = ((($23)) + 16|0);
-  $25 = HEAP32[$24>>2]|0;
-  $26 = ((($25)) + 44|0);
-  $27 = HEAP32[$26>>2]|0;
-  $5 = $27;
- }
- $28 = $5;
- $29 = ($28|0)!=(0|0);
- L4: do {
-  if ($29) {
-   $30 = $5;
-   $31 = ((($30)) + 12|0);
-   $32 = HEAP32[$31>>2]|0;
-   $33 = ($32|0)!=(0|0);
-   if ($33) {
-    $34 = $3;
-    $35 = $5;
-    $36 = ((($35)) + 12|0);
-    $37 = HEAP32[$36>>2]|0;
-    $38 = $4;
-    $39 = (_iv_get($34,$37,$38,$7)|0);
-    $40 = $39&255;
-    $41 = ($40|0)!=(0);
-    if ($41) {
-     ;HEAP32[$0>>2]=HEAP32[$7>>2]|0;HEAP32[$0+4>>2]=HEAP32[$7+4>>2]|0;
-     STACKTOP = sp;return;
-    }
-   }
-   $42 = $5;
-   $43 = HEAP32[$42>>2]|0;
-   $44 = $43 & 255;
-   $45 = ($44|0)==(12);
-   if ($45) {
-    $46 = $3;
-    $47 = $5;
-    $48 = $3;
-    $49 = (_mrb_intern_static($48,68237,12)|0);
-    _mrb_obj_iv_get($9,$46,$47,$49);
-    ;HEAP32[$8>>2]=HEAP32[$9>>2]|0;HEAP32[$8+4>>2]=HEAP32[$9+4>>2]|0;
-    $50 = HEAP32[$8>>2]|0;
-    $6 = $50;
-    $51 = $6;
-    $52 = HEAP32[$51>>2]|0;
-    $53 = $52 & 255;
-    $54 = ($53|0)==(9);
-    if ($54) {
-     $55 = $6;
-     $5 = $55;
-    }
-   }
-   $56 = $5;
-   $6 = $56;
-   while(1) {
-    $57 = $3;
-    $58 = $6;
-    $59 = (_mrb_class_outer_module($57,$58)|0);
-    $6 = $59;
-    $60 = $6;
-    $61 = ($60|0)!=(0|0);
-    if (!($61)) {
-     break L4;
-    }
-    $62 = $6;
-    $63 = ((($62)) + 12|0);
-    $64 = HEAP32[$63>>2]|0;
-    $65 = ($64|0)!=(0|0);
-    if (!($65)) {
-     continue;
-    }
-    $66 = $3;
-    $67 = $6;
-    $68 = ((($67)) + 12|0);
-    $69 = HEAP32[$68>>2]|0;
-    $70 = $4;
-    $71 = (_iv_get($66,$69,$70,$7)|0);
-    $72 = $71&255;
-    $73 = ($72|0)!=(0);
-    if ($73) {
-     break;
-    }
-   }
-   ;HEAP32[$0>>2]=HEAP32[$7>>2]|0;HEAP32[$0+4>>2]=HEAP32[$7+4>>2]|0;
-   STACKTOP = sp;return;
-  }
- } while(0);
- $74 = $3;
- $75 = $5;
- $76 = $4;
- _const_get($0,$74,$75,$76);
- STACKTOP = sp;return;
-}
-function _mrb_const_set($0,$1,$2,$3) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $$byval_copy2 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $$byval_copy2 = sp + 24|0;
- $$byval_copy1 = sp + 16|0;
- $$byval_copy = sp + 8|0;
- $4 = $0;
- $5 = $2;
- $6 = $4;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$1>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$1+4>>2]|0;
- _mod_const_check($6,$$byval_copy);
- $7 = $4;
- $8 = $5;
- ;HEAP32[$$byval_copy1>>2]=HEAP32[$1>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$1+4>>2]|0;
- ;HEAP32[$$byval_copy2>>2]=HEAP32[$3>>2]|0;HEAP32[$$byval_copy2+4>>2]=HEAP32[$3+4>>2]|0;
- _mrb_iv_set($7,$$byval_copy1,$8,$$byval_copy2);
- STACKTOP = sp;return;
-}
-function _mrb_vm_const_set($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $3 = 0, $4 = 0;
- var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $$byval_copy = sp + 16|0;
- $3 = $0;
- $4 = $1;
- $6 = $3;
- $7 = ((($6)) + 12|0);
- $8 = HEAP32[$7>>2]|0;
- $9 = ((($8)) + 16|0);
- $10 = HEAP32[$9>>2]|0;
- $11 = ((($10)) + 4|0);
- $12 = HEAP32[$11>>2]|0;
- $13 = ((($12)) + 16|0);
- $14 = HEAP32[$13>>2]|0;
- $5 = $14;
- $15 = $5;
- $16 = ($15|0)!=(0|0);
- if (!($16)) {
-  $17 = $3;
-  $18 = ((($17)) + 12|0);
-  $19 = HEAP32[$18>>2]|0;
-  $20 = ((($19)) + 16|0);
-  $21 = HEAP32[$20>>2]|0;
-  $22 = ((($21)) + 44|0);
-  $23 = HEAP32[$22>>2]|0;
-  $5 = $23;
- }
- $24 = $3;
- $25 = $5;
- $26 = $4;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
- _mrb_obj_iv_set($24,$25,$26,$$byval_copy);
- STACKTOP = sp;return;
-}
-function _mrb_define_const($0,$1,$2,$3) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- var $$byval_copy = 0, $10 = 0, $11 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $$byval_copy = sp + 16|0;
- $4 = $0;
- $5 = $1;
- $6 = $2;
- $7 = $4;
- $8 = $5;
- $9 = $4;
- $10 = $6;
- $11 = (_mrb_intern_cstr($9,$10)|0);
- ;HEAP32[$$byval_copy>>2]=HEAP32[$3>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$3+4>>2]|0;
- _mrb_obj_iv_set($7,$8,$11,$$byval_copy);
- STACKTOP = sp;return;
-}
-function _mrb_define_global_const($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $$byval_copy = sp + 8|0;
- $3 = $0;
- $4 = $1;
- $5 = $3;
- $6 = $3;
- $7 = ((($6)) + 32|0);
- $8 = HEAP32[$7>>2]|0;
- $9 = $4;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
- _mrb_define_const($5,$8,$9,$$byval_copy);
- STACKTOP = sp;return;
-}
-function _mrb_mod_constants($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$old = 0, $$old1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;
- var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $or$cond = 0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);
- $vararg_buffer = sp;
- $4 = sp + 24|0;
- $5 = sp + 36|0;
- $7 = sp + 8|0;
- $3 = $1;
- HEAP8[$5>>0] = 1;
- $8 = HEAP32[$2>>2]|0;
- $6 = $8;
- $9 = $3;
- HEAP32[$vararg_buffer>>2] = $5;
- (_mrb_get_args($9,68724,$vararg_buffer)|0);
- $10 = $3;
- _mrb_ary_new($7,$10);
- ;HEAP32[$4>>2]=HEAP32[$7>>2]|0;HEAP32[$4+4>>2]=HEAP32[$7+4>>2]|0;
- $$old = $6;
- $$old1 = ($$old|0)!=(0|0);
- L1: do {
-  if ($$old1) {
-   while(1) {
-    $11 = $6;
-    $12 = ((($11)) + 12|0);
-    $13 = HEAP32[$12>>2]|0;
-    $14 = ($13|0)!=(0|0);
-    if ($14) {
-     $15 = $3;
-     $16 = $6;
-     $17 = ((($16)) + 12|0);
-     $18 = HEAP32[$17>>2]|0;
-     (_iv_foreach($15,$18,128,$4)|0);
-    }
-    $19 = HEAP8[$5>>0]|0;
-    $20 = ($19<<24>>24)!=(0);
-    if (!($20)) {
-     break L1;
-    }
-    $21 = $6;
-    $22 = ((($21)) + 20|0);
-    $23 = HEAP32[$22>>2]|0;
-    $6 = $23;
-    $24 = $6;
-    $25 = $3;
-    $26 = ((($25)) + 32|0);
-    $27 = HEAP32[$26>>2]|0;
-    $28 = ($24|0)!=($27|0);
-    $29 = $6;
-    $30 = ($29|0)!=(0|0);
-    $or$cond = $28 & $30;
-    if (!($or$cond)) {
-     break;
-    }
-   }
-  }
- } while(0);
- ;HEAP32[$0>>2]=HEAP32[$4>>2]|0;HEAP32[$0+4>>2]=HEAP32[$4+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _const_i($0,$1,$2,$3) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0;
- var $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);
- $$byval_copy1 = sp + 48|0;
- $$byval_copy = sp + 40|0;
- $7 = sp + 16|0;
- $9 = sp + 8|0;
- $10 = sp;
- $4 = $0;
- $5 = $1;
- $6 = $3;
- $11 = $6;
- ;HEAP32[$7>>2]=HEAP32[$11>>2]|0;HEAP32[$7+4>>2]=HEAP32[$11+4>>2]|0;
- $12 = $4;
- $13 = $5;
- $14 = (_mrb_sym2name_len($12,$13,$9)|0);
- $8 = $14;
- $15 = HEAP32[$9>>2]|0;
- $16 = ($15|0)>=(1);
- if (!($16)) {
-  STACKTOP = sp;return 0;
- }
- $17 = $8;
- $18 = HEAP8[$17>>0]|0;
- $19 = $18 << 24 >> 24;
- $20 = (($19) - 65)|0;
- $21 = ($20>>>0)<(26);
- if (!($21)) {
-  STACKTOP = sp;return 0;
- }
- $22 = $4;
- $23 = $5;
- _mrb_symbol_value_397($10,$23);
- ;HEAP32[$$byval_copy>>2]=HEAP32[$7>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$7+4>>2]|0;
- ;HEAP32[$$byval_copy1>>2]=HEAP32[$10>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$10+4>>2]|0;
- _mrb_ary_push($22,$$byval_copy,$$byval_copy1);
- STACKTOP = sp;return 0;
-}
-function _mrb_gv_get($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $5 = sp;
- $3 = $1;
- $4 = $2;
- $6 = $3;
- $7 = ((($6)) + 24|0);
- $8 = HEAP32[$7>>2]|0;
- $9 = ($8|0)!=(0|0);
- if (!($9)) {
-  _mrb_nil_value_381($0);
-  STACKTOP = sp;return;
- }
- $10 = $3;
- $11 = $3;
- $12 = ((($11)) + 24|0);
- $13 = HEAP32[$12>>2]|0;
- $14 = $4;
- $15 = (_iv_get($10,$13,$14,$5)|0);
- $16 = ($15<<24>>24)!=(0);
- if ($16) {
-  ;HEAP32[$0>>2]=HEAP32[$5>>2]|0;HEAP32[$0+4>>2]=HEAP32[$5+4>>2]|0;
-  STACKTOP = sp;return;
- } else {
-  _mrb_nil_value_381($0);
-  STACKTOP = sp;return;
- }
-}
-function _mrb_gv_set($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $$byval_copy = sp + 16|0;
- $3 = $0;
- $4 = $1;
- $6 = $3;
- $7 = ((($6)) + 24|0);
- $8 = HEAP32[$7>>2]|0;
- $9 = ($8|0)!=(0|0);
- $10 = $3;
- if ($9) {
-  $14 = ((($10)) + 24|0);
-  $15 = HEAP32[$14>>2]|0;
-  $5 = $15;
- } else {
-  $11 = (_iv_new($10)|0);
-  $12 = $3;
-  $13 = ((($12)) + 24|0);
-  HEAP32[$13>>2] = $11;
-  $5 = $11;
- }
- $16 = $3;
- $17 = $5;
- $18 = $4;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
- _iv_put($16,$17,$18,$$byval_copy);
- STACKTOP = sp;return;
-}
-function _mrb_f_global_variables($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;
- var $28 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);
- $$byval_copy1 = sp + 40|0;
- $$byval_copy = sp + 32|0;
- $5 = sp + 16|0;
- $7 = sp + 48|0;
- $8 = sp;
- $3 = $1;
- $9 = $3;
- $10 = ((($9)) + 24|0);
- $11 = HEAP32[$10>>2]|0;
- $4 = $11;
- $12 = $3;
- _mrb_ary_new($5,$12);
- $13 = $4;
- $14 = ($13|0)!=(0|0);
- if ($14) {
-  $15 = $3;
-  $16 = $4;
-  (_iv_foreach($15,$16,129,$5)|0);
- }
- HEAP8[$7>>0] = 36;
- $17 = ((($7)) + 2|0);
- HEAP8[$17>>0] = 0;
- $6 = 1;
- while(1) {
-  $18 = $6;
-  $19 = ($18>>>0)<=(9);
-  if (!($19)) {
-   break;
-  }
-  $20 = $6;
-  $21 = (($20) + 48)|0;
-  $22 = $21&255;
-  $23 = ((($7)) + 1|0);
-  HEAP8[$23>>0] = $22;
-  $24 = $3;
-  $25 = $3;
-  $26 = (_mrb_intern($25,$7,2)|0);
-  _mrb_symbol_value_397($8,$26);
-  ;HEAP32[$$byval_copy>>2]=HEAP32[$5>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$5+4>>2]|0;
-  ;HEAP32[$$byval_copy1>>2]=HEAP32[$8>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$8+4>>2]|0;
-  _mrb_ary_push($24,$$byval_copy,$$byval_copy1);
-  $27 = $6;
-  $28 = (($27) + 1)|0;
-  $6 = $28;
- }
- ;HEAP32[$0>>2]=HEAP32[$5>>2]|0;HEAP32[$0+4>>2]=HEAP32[$5+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _gv_i($0,$1,$2,$3) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $10 = 0, $11 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);
- $$byval_copy1 = sp + 40|0;
- $$byval_copy = sp + 32|0;
- $7 = sp + 8|0;
- $8 = sp;
- $4 = $0;
- $5 = $1;
- $6 = $3;
- $9 = $6;
- ;HEAP32[$7>>2]=HEAP32[$9>>2]|0;HEAP32[$7+4>>2]=HEAP32[$9+4>>2]|0;
- $10 = $4;
- $11 = $5;
- _mrb_symbol_value_397($8,$11);
- ;HEAP32[$$byval_copy>>2]=HEAP32[$7>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$7+4>>2]|0;
- ;HEAP32[$$byval_copy1>>2]=HEAP32[$8>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$8+4>>2]|0;
- _mrb_ary_push($10,$$byval_copy,$$byval_copy1);
- STACKTOP = sp;return 0;
-}
-function _mrb_const_defined($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $$byval_copy = sp + 8|0;
- $3 = $0;
- $4 = $2;
- $5 = $3;
- $6 = $4;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$1>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$1+4>>2]|0;
- $7 = (_mrb_const_defined_0($5,$$byval_copy,$6,1,1)|0);
- STACKTOP = sp;return ($7|0);
-}
-function _mrb_const_defined_0($0,$1,$2,$3,$4) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- $4 = $4|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;
- var $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0;
- var $5 = 0, $50 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $or$cond = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $6 = $0;
- $7 = $2;
- $8 = $3;
- $9 = $4;
- $13 = HEAP32[$1>>2]|0;
- $10 = $13;
- $12 = 0;
- $14 = $10;
- $11 = $14;
- L1: while(1) {
-  while(1) {
-   $15 = $11;
-   $16 = ($15|0)!=(0|0);
-   if (!($16)) {
-    break;
-   }
-   $17 = $11;
-   $18 = ((($17)) + 12|0);
-   $19 = HEAP32[$18>>2]|0;
-   $20 = ($19|0)!=(0|0);
-   if ($20) {
-    $21 = $6;
-    $22 = $11;
-    $23 = ((($22)) + 12|0);
-    $24 = HEAP32[$23>>2]|0;
-    $25 = $7;
-    $26 = (_iv_get($21,$24,$25,0)|0);
-    $27 = $26&255;
-    $28 = ($27|0)!=(0);
-    if ($28) {
-     label = 6;
-     break L1;
-    }
-   }
-   $29 = $9;
-   $30 = ($29<<24>>24)!=(0);
-   if (!($30)) {
-    $31 = $10;
-    $32 = $6;
-    $33 = ((($32)) + 32|0);
-    $34 = HEAP32[$33>>2]|0;
-    $35 = ($31|0)!=($34|0);
-    if ($35) {
-     break;
-    }
-   }
-   $36 = $11;
-   $37 = ((($36)) + 20|0);
-   $38 = HEAP32[$37>>2]|0;
-   $11 = $38;
-  }
-  $39 = $8;
-  $40 = ($39<<24>>24)!=(0);
-  $41 = $12;
-  $42 = ($41<<24>>24)!=(0);
-  $or$cond = $40 | $42;
-  if ($or$cond) {
-   label = 13;
-   break;
-  }
-  $43 = $10;
-  $44 = HEAP32[$43>>2]|0;
-  $45 = $44 & 255;
-  $46 = ($45|0)==(10);
-  if (!($46)) {
-   label = 13;
-   break;
-  }
-  $12 = 1;
-  $47 = $6;
-  $48 = ((($47)) + 32|0);
-  $49 = HEAP32[$48>>2]|0;
-  $11 = $49;
- }
- if ((label|0) == 6) {
-  $5 = 1;
-  $50 = $5;
-  STACKTOP = sp;return ($50|0);
- }
- else if ((label|0) == 13) {
-  $5 = 0;
-  $50 = $5;
-  STACKTOP = sp;return ($50|0);
- }
- return (0)|0;
-}
-function _mrb_const_defined_at($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $$byval_copy = sp + 8|0;
- $3 = $0;
- $4 = $2;
- $5 = $3;
- $6 = $4;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$1>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$1+4>>2]|0;
- $7 = (_mrb_const_defined_0($5,$$byval_copy,$6,1,0)|0);
- STACKTOP = sp;return ($7|0);
-}
-function _mrb_attr_get($0,$1,$2,$3) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- var $$byval_copy = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $$byval_copy = sp + 8|0;
- $4 = $1;
- $5 = $3;
- $6 = $4;
- $7 = $5;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
- _mrb_iv_get($0,$6,$$byval_copy,$7);
- STACKTOP = sp;return;
-}
-function _mrb_class_sym($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;
- var $3 = 0, $30 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);
- $7 = sp + 16|0;
- $8 = sp + 8|0;
- $9 = sp;
- $4 = $0;
- $5 = $1;
- $6 = $2;
- $10 = $4;
- $11 = $5;
- $12 = $4;
- $13 = (_mrb_intern_static($12,64870,11)|0);
- _mrb_obj_iv_get($8,$10,$11,$13);
- ;HEAP32[$7>>2]=HEAP32[$8>>2]|0;HEAP32[$7+4>>2]=HEAP32[$8+4>>2]|0;
- $14 = ((($7)) + 4|0);
- $15 = HEAP32[$14>>2]|0;
- $16 = ($15|0)==(0);
- if ($16) {
-  $17 = HEAP32[$7>>2]|0;
-  $18 = ($17|0)!=(0);
-  if (!($18)) {
-   $19 = $6;
-   $20 = ($19|0)!=(0|0);
-   if ($20) {
-    $21 = $5;
-    HEAP32[$9>>2] = $21;
-    $22 = ((($9)) + 4|0);
-    HEAP32[$22>>2] = 0;
-    $23 = $4;
-    $24 = $6;
-    $25 = ((($24)) + 12|0);
-    $26 = HEAP32[$25>>2]|0;
-    (_iv_foreach($23,$26,130,$9)|0);
-    $27 = ((($9)) + 4|0);
-    $28 = HEAP32[$27>>2]|0;
-    $3 = $28;
-    $30 = $3;
-    STACKTOP = sp;return ($30|0);
-   } else {
-    $3 = 0;
-    $30 = $3;
-    STACKTOP = sp;return ($30|0);
-   }
-  }
- }
- $29 = HEAP32[$7>>2]|0;
- $3 = $29;
- $30 = $3;
- STACKTOP = sp;return ($30|0);
-}
-function _csym_i($0,$1,$2,$3) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0;
- var $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $5 = $0;
- $6 = $1;
- $7 = $3;
- $10 = $7;
- $8 = $10;
- $11 = $8;
- $12 = HEAP32[$11>>2]|0;
- $9 = $12;
- $13 = ((($2)) + 4|0);
- $14 = HEAP32[$13>>2]|0;
- $15 = $9;
- $16 = HEAP32[$15>>2]|0;
- $17 = $16 & 255;
- $18 = ($14|0)==($17|0);
- if ($18) {
-  $19 = HEAP32[$2>>2]|0;
-  $20 = $9;
-  $21 = ($19|0)==($20|0);
-  if ($21) {
-   $22 = $6;
-   $23 = $8;
-   $24 = ((($23)) + 4|0);
-   HEAP32[$24>>2] = $22;
-   $4 = 1;
-   $25 = $4;
-   STACKTOP = sp;return ($25|0);
-  }
- }
- $4 = 0;
- $25 = $4;
- STACKTOP = sp;return ($25|0);
-}
-function _mrb_funcall($0,$1,$2,$3,$4,$varargs) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- $4 = $4|0;
- $varargs = $varargs|0;
- var $$byval_copy = 0, $$field$field = 0.0, $$field3 = 0, $$index2 = 0, $$index6 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0;
- var $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $arglist_current = 0, $arglist_next = 0, $expanded = 0;
- var $expanded10 = 0, $expanded11 = 0, $expanded7 = 0, $expanded9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 128|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(128|0);
- $$byval_copy = sp + 112|0;
- $8 = sp + 32|0;
- $9 = sp + 16|0;
- $12 = sp;
- $5 = $1;
- $6 = $3;
- $7 = $4;
- $13 = $5;
- $14 = $6;
- $15 = (_mrb_intern_cstr($13,$14)|0);
- $11 = $15;
- $16 = $7;
- $17 = ($16|0)>(8);
- if ($17) {
-  $18 = $5;
-  $19 = $5;
-  $20 = (_mrb_class_get($19,69160)|0);
-  _mrb_raise($18,$20,56663);
-  // unreachable;
- }
- HEAP32[$9>>2] = $varargs;
- $10 = 0;
- while(1) {
-  $21 = $10;
-  $22 = $7;
-  $23 = ($21|0)<($22|0);
-  if (!($23)) {
-   break;
-  }
-  $24 = $10;
-  $25 = (($8) + ($24<<3)|0);
-  $arglist_current = HEAP32[$9>>2]|0;
-  $26 = $arglist_current;
-  $27 = ((0) + 4|0);
-  $expanded7 = $27;
-  $expanded = (($expanded7) - 1)|0;
-  $28 = (($26) + ($expanded))|0;
-  $29 = ((0) + 4|0);
-  $expanded11 = $29;
-  $expanded10 = (($expanded11) - 1)|0;
-  $expanded9 = $expanded10 ^ -1;
-  $30 = $28 & $expanded9;
-  $31 = $30;
-  $$field$field = +HEAPF32[$31>>2];
-  $$index2 = ((($31)) + 4|0);
-  $$field3 = HEAP32[$$index2>>2]|0;
-  $arglist_next = ((($31)) + 8|0);
-  HEAP32[$9>>2] = $arglist_next;
-  HEAPF32[$12>>2] = $$field$field;
-  $$index6 = ((($12)) + 4|0);
-  HEAP32[$$index6>>2] = $$field3;
-  ;HEAP32[$25>>2]=HEAP32[$12>>2]|0;HEAP32[$25+4>>2]=HEAP32[$12+4>>2]|0;
-  $32 = $10;
-  $33 = (($32) + 1)|0;
-  $10 = $33;
- }
- $34 = $5;
- $35 = $11;
- $36 = $7;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
- _mrb_funcall_argv($0,$34,$$byval_copy,$35,$36,$8);
- STACKTOP = sp;return;
-}
-function _mrb_funcall_argv($0,$1,$2,$3,$4,$5) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- $4 = $4|0;
- $5 = $5|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);
- $$byval_copy1 = sp + 32|0;
- $$byval_copy = sp + 24|0;
- $10 = sp;
- $6 = $1;
- $7 = $3;
- $8 = $4;
- $9 = $5;
- $11 = $6;
- $12 = $7;
- $13 = $8;
- $14 = $9;
- _mrb_nil_value_419($10);
- ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
- ;HEAP32[$$byval_copy1>>2]=HEAP32[$10>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$10+4>>2]|0;
- _mrb_funcall_with_block($0,$11,$$byval_copy,$12,$13,$14,$$byval_copy1);
- STACKTOP = sp;return;
-}
-function _mrb_nil_value_419($0) {
- $0 = $0|0;
- var $1 = 0, $2 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $1 = sp;
- $2 = ((($1)) + 4|0);
- HEAP32[$2>>2] = 0;
- HEAP32[$1>>2] = 0;
- ;HEAP32[$0>>2]=HEAP32[$1>>2]|0;HEAP32[$0+4>>2]=HEAP32[$1+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_funcall_with_block($0,$1,$2,$3,$4,$5,$6) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- $4 = $4|0;
- $5 = $5|0;
- $6 = $6|0;
- var $$0 = 0, $$088 = 0, $$089 = 0, $$090 = 0, $$091 = 0, $$091$phi = 0, $$092 = 0, $$092$phi = 0, $$094 = 0, $$094$phi = 0, $$097 = 0, $$097$phi = 0, $$1 = 0, $$193 = 0, $$195 = 0, $$198 = 0, $$2 = 0, $$296 = 0, $$299 = 0, $$byval_copy = 0;
- var $$byval_copy100 = 0, $$byval_copy101 = 0, $$byval_copy102 = 0, $$byval_copy103 = 0, $$byval_copy104 = 0, $$reg2mem86$0 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0;
- var $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0;
- var $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0, $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0;
- var $149 = 0, $15 = 0, $150 = 0, $151 = 0, $152 = 0, $153 = 0, $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0;
- var $167 = 0, $168 = 0, $169 = 0, $17 = 0, $170 = 0, $171 = 0, $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0;
- var $185 = 0, $186 = 0, $187 = 0, $188 = 0, $189 = 0, $19 = 0, $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0, $197 = 0, $198 = 0, $199 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0;
- var $203 = 0, $204 = 0, $205 = 0, $206 = 0, $207 = 0, $208 = 0, $209 = 0, $21 = 0, $210 = 0, $211 = 0, $212 = 0, $213 = 0, $214 = 0, $215 = 0, $216 = 0, $217 = 0, $218 = 0, $219 = 0, $22 = 0, $220 = 0;
- var $221 = 0, $222 = 0, $223 = 0, $224 = 0, $225 = 0, $226 = 0, $227 = 0, $228 = 0, $229 = 0, $23 = 0, $230 = 0, $231 = 0, $232 = 0, $233 = 0, $234 = 0, $235 = 0, $236 = 0, $237 = 0, $238 = 0, $239 = 0;
- var $24 = 0, $240 = 0, $241 = 0, $242 = 0, $243 = 0, $244 = 0, $245 = 0, $246 = 0, $247 = 0, $248 = 0, $249 = 0, $25 = 0, $250 = 0, $251 = 0, $252 = 0, $253 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;
- var $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0;
- var $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0;
- var $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0;
- var $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $cond = 0, $cond113 = 0, $cond114 = 0, $cond115 = 0, $cond116 = 0, $cond117 = 0, $cond118 = 0;
- var $cond119 = 0, $cond120 = 0, $cond121 = 0, $cond122 = 0, $cond123 = 0, $cond124 = 0, $cond125 = 0, $cond126 = 0, $cond127 = 0, $cond128 = 0, $cond129 = 0, $cond130 = 0, $cond131 = 0, $cond132 = 0, $cond133 = 0, $cond134 = 0, $vararg_buffer = 0, _setjmpTable = 0, _setjmpTableSize = 0, label = 0;
- var sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 288|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(288|0);
- $$byval_copy104 = sp + 272|0;
- $$byval_copy103 = sp + 264|0;
- $$byval_copy102 = sp + 256|0;
- $$byval_copy101 = sp + 248|0;
- $$byval_copy100 = sp + 240|0;
- $$byval_copy = sp + 232|0;
- $vararg_buffer = sp;
- _setjmpTableSize = 4;_setjmpTable = _malloc(40) | 0;HEAP32[_setjmpTable>>2]=0;
- $7 = sp + 224|0;
- $8 = sp + 64|0;
- $9 = sp + 56|0;
- $10 = sp + 48|0;
- $11 = sp + 40|0;
- $12 = sp + 32|0;
- $13 = sp + 24|0;
- $14 = sp + 16|0;
- $15 = sp + 8|0;
- $16 = HEAP32[$1>>2]|0;
- $17 = ($16|0)!=(0|0);
- do {
-  if ($17) {
-   $67 = ((($1)) + 12|0);
-   $68 = HEAP32[$67>>2]|0;
-   $69 = ((($68)) + 4|0);
-   $70 = HEAP32[$69>>2]|0;
-   $71 = ($70|0)!=(0|0);
-   if (!($71)) {
-    __THREW__ = 0;
-    invoke_vi(134,($1|0));
-    $72 = __THREW__; __THREW__ = 0;
-    if ((($72|0) != 0) & ((threwValue|0) != 0)) { $73 = _testSetjmp(HEAP32[$72>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($73|0) == 0) { _longjmp($72|0, threwValue|0); } tempRet0 = (threwValue); } else { $73 = -1; };
-    $74 = tempRet0;
-    $cond117 = ($73|0)==(1);
-    if ($cond117) {
-     $$091 = 0;$$092 = $5;$$094 = $4;$$097 = $3;$$reg2mem86$0 = $74;
-     break;
-    }
-   }
-   $75 = ((($1)) + 12|0);
-   $76 = HEAP32[$75>>2]|0;
-   $77 = ((($76)) + 16|0);
-   $78 = HEAP32[$77>>2]|0;
-   $79 = ((($78)) + 12|0);
-   $80 = HEAP32[$79>>2]|0;
-   $81 = ($4|0)<(0);
-   if ($81) {
-    __THREW__ = 0;
-    $82 = (invoke_iii(135,($1|0),(69160|0))|0);
-    $83 = __THREW__; __THREW__ = 0;
-    if ((($83|0) != 0) & ((threwValue|0) != 0)) { $84 = _testSetjmp(HEAP32[$83>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($84|0) == 0) { _longjmp($83|0, threwValue|0); } tempRet0 = (threwValue); } else { $84 = -1; };
-    $85 = tempRet0;
-    $cond133 = ($84|0)==(1);
-    if ($cond133) {
-     $$091 = 0;$$092 = $5;$$094 = $4;$$097 = $3;$$reg2mem86$0 = $85;
-     break;
-    }
-    __THREW__ = 0;
-    invoke_vii(136,($12|0),($4|0));
-    $86 = __THREW__; __THREW__ = 0;
-    if ((($86|0) != 0) & ((threwValue|0) != 0)) { $87 = _testSetjmp(HEAP32[$86>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($87|0) == 0) { _longjmp($86|0, threwValue|0); } tempRet0 = (threwValue); } else { $87 = -1; };
-    $88 = tempRet0;
-    $cond134 = ($87|0)==(1);
-    if ($cond134) {
-     $$091 = 0;$$092 = $5;$$094 = $4;$$097 = $3;$$reg2mem86$0 = $88;
-     break;
-    }
-    __THREW__ = 0;
-    ;HEAP8[$vararg_buffer>>0]=HEAP8[$12>>0]|0;HEAP8[$vararg_buffer+1>>0]=HEAP8[$12+1>>0]|0;HEAP8[$vararg_buffer+2>>0]=HEAP8[$12+2>>0]|0;HEAP8[$vararg_buffer+3>>0]=HEAP8[$12+3>>0]|0;HEAP8[$vararg_buffer+4>>0]=HEAP8[$12+4>>0]|0;HEAP8[$vararg_buffer+5>>0]=HEAP8[$12+5>>0]|0;HEAP8[$vararg_buffer+6>>0]=HEAP8[$12+6>>0]|0;HEAP8[$vararg_buffer+7>>0]=HEAP8[$12+7>>0]|0;
-    invoke_viiii(137,($1|0),($82|0),(56693|0),($vararg_buffer|0));
-    $89 = __THREW__; __THREW__ = 0;
-    if ((($89|0) != 0) & ((threwValue|0) != 0)) { $90 = _testSetjmp(HEAP32[$89>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($90|0) == 0) { _longjmp($89|0, threwValue|0); } tempRet0 = (threwValue); } else { $90 = -1; };
-    $91 = tempRet0;
-    $$091 = 0;$$092 = $5;$$094 = $4;$$097 = $3;$$reg2mem86$0 = $91;
-    break;
-   }
-   __THREW__ = 0;
-   ;HEAP32[$$byval_copy101>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy101+4>>2]=HEAP32[$2+4>>2]|0;
-   $92 = (invoke_iii(138,($1|0),($$byval_copy101|0))|0);
-   $93 = __THREW__; __THREW__ = 0;
-   if ((($93|0) != 0) & ((threwValue|0) != 0)) { $94 = _testSetjmp(HEAP32[$93>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($94|0) == 0) { _longjmp($93|0, threwValue|0); } tempRet0 = (threwValue); } else { $94 = -1; };
-   $95 = tempRet0;
-   $cond118 = ($94|0)==(1);
-   if ($cond118) {
-    $$091 = 0;$$092 = $5;$$094 = $4;$$097 = $3;$$reg2mem86$0 = $95;
-   } else {
-    HEAP32[$11>>2] = $92;
-    __THREW__ = 0;
-    $96 = (invoke_iiii(139,($1|0),($11|0),($3|0))|0);
-    $97 = __THREW__; __THREW__ = 0;
-    if ((($97|0) != 0) & ((threwValue|0) != 0)) { $98 = _testSetjmp(HEAP32[$97>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($98|0) == 0) { _longjmp($97|0, threwValue|0); } tempRet0 = (threwValue); } else { $98 = -1; };
-    $99 = tempRet0;
-    $cond119 = ($98|0)==(1);
-    if ($cond119) {
-     $$091 = 0;$$092 = $5;$$094 = $4;$$097 = $3;$$reg2mem86$0 = $99;
-    } else {
-     $100 = ($96|0)!=(0|0);
-     if ($100) {
-      $$088 = $80;$$089 = 0;$$090 = $96;$$195 = $4;$$198 = $3;
-     } else {
-      __THREW__ = 0;
-      $101 = (invoke_iiii(140,($1|0),(65621|0),14)|0);
-      $102 = __THREW__; __THREW__ = 0;
-      if ((($102|0) != 0) & ((threwValue|0) != 0)) { $103 = _testSetjmp(HEAP32[$102>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($103|0) == 0) { _longjmp($102|0, threwValue|0); } tempRet0 = (threwValue); } else { $103 = -1; };
-      $104 = tempRet0;
-      $cond120 = ($103|0)==(1);
-      if ($cond120) {
-       $$091 = 0;$$092 = $5;$$094 = $4;$$097 = $3;$$reg2mem86$0 = $104;
-       break;
-      }
-      __THREW__ = 0;
-      $105 = (invoke_iiii(139,($1|0),($11|0),($101|0))|0);
-      $106 = __THREW__; __THREW__ = 0;
-      if ((($106|0) != 0) & ((threwValue|0) != 0)) { $107 = _testSetjmp(HEAP32[$106>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($107|0) == 0) { _longjmp($106|0, threwValue|0); } tempRet0 = (threwValue); } else { $107 = -1; };
-      $108 = tempRet0;
-      $cond121 = ($107|0)==(1);
-      if ($cond121) {
-       $$091 = 0;$$092 = $5;$$094 = $4;$$097 = $101;$$reg2mem86$0 = $108;
-       break;
-      }
-      $109 = (($80) + 1)|0;
-      $110 = (($4) + 1)|0;
-      $$088 = $109;$$089 = $3;$$090 = $105;$$195 = $110;$$198 = $101;
-     }
-     __THREW__ = 0;
-     $111 = (invoke_ii(141,($1|0))|0);
-     $112 = __THREW__; __THREW__ = 0;
-     if ((($112|0) != 0) & ((threwValue|0) != 0)) { $113 = _testSetjmp(HEAP32[$112>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($113|0) == 0) { _longjmp($112|0, threwValue|0); } tempRet0 = (threwValue); } else { $113 = -1; };
-     $114 = tempRet0;
-     $cond122 = ($113|0)==(1);
-     if ($cond122) {
-      $$091 = 0;$$092 = $5;$$094 = $$195;$$097 = $$198;$$reg2mem86$0 = $114;
-     } else {
-      HEAP32[$111>>2] = $$198;
-      $115 = ((($111)) + 4|0);
-      HEAP32[$115>>2] = $$090;
-      $116 = ((($1)) + 12|0);
-      $117 = HEAP32[$116>>2]|0;
-      $118 = ((($117)) + 4|0);
-      $119 = HEAP32[$118>>2]|0;
-      $120 = ((($111)) + 8|0);
-      HEAP32[$120>>2] = $119;
-      $121 = ((($111)) + 36|0);
-      HEAP32[$121>>2] = $$195;
-      $122 = HEAP32[$11>>2]|0;
-      $123 = ((($111)) + 44|0);
-      HEAP32[$123>>2] = $122;
-      $124 = ((($1)) + 12|0);
-      $125 = HEAP32[$124>>2]|0;
-      $126 = ((($125)) + 4|0);
-      $127 = HEAP32[$126>>2]|0;
-      $128 = (($127) + ($$088<<3)|0);
-      $129 = ((($1)) + 12|0);
-      $130 = HEAP32[$129>>2]|0;
-      $131 = ((($130)) + 4|0);
-      HEAP32[$131>>2] = $128;
-      $132 = ((($1)) + 12|0);
-      $133 = HEAP32[$132>>2]|0;
-      $134 = ((($133)) + 8|0);
-      $135 = HEAP32[$134>>2]|0;
-      $136 = ($135>>>0)<=($5>>>0);
-      if ($136) {
-       $137 = ((($1)) + 12|0);
-       $138 = HEAP32[$137>>2]|0;
-       $139 = ((($138)) + 12|0);
-       $140 = HEAP32[$139>>2]|0;
-       $141 = ($5>>>0)<($140>>>0);
-       if ($141) {
-        $142 = ((($1)) + 12|0);
-        $143 = HEAP32[$142>>2]|0;
-        $144 = ((($143)) + 8|0);
-        $145 = HEAP32[$144>>2]|0;
-        $146 = $5;
-        $147 = $145;
-        $148 = (($146) - ($147))|0;
-        $149 = (($148|0) / 8)&-1;
-        $$0 = $149;
-       } else {
-        $$0 = -1;
-       }
-      } else {
-       $$0 = -1;
-      }
-      $150 = HEAP32[$$090>>2]|0;
-      $151 = $150 >>> 11;
-      $152 = $151 & 128;
-      $153 = ($152|0)!=(0);
-      if ($153) {
-       $154 = (($$195) + 2)|0;
-       $155 = ((($111)) + 12|0);
-       HEAP32[$155>>2] = $154;
-       $156 = ((($111)) + 12|0);
-       $157 = HEAP32[$156>>2]|0;
-       __THREW__ = 0;
-       invoke_viii(142,($1|0),($157|0),0);
-       $158 = __THREW__; __THREW__ = 0;
-       if ((($158|0) != 0) & ((threwValue|0) != 0)) { $159 = _testSetjmp(HEAP32[$158>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($159|0) == 0) { _longjmp($158|0, threwValue|0); } tempRet0 = (threwValue); } else { $159 = -1; };
-       $160 = tempRet0;
-       $cond132 = ($159|0)==(1);
-       if ($cond132) {
-        $$091 = 0;$$092 = $5;$$094 = $$195;$$097 = $$198;$$reg2mem86$0 = $160;
-        break;
-       }
-      } else {
-       $161 = ((($$090)) + 12|0);
-       $162 = HEAP32[$161>>2]|0;
-       $163 = ((($162)) + 2|0);
-       $164 = HEAP16[$163>>1]|0;
-       $165 = $164&65535;
-       $166 = (($165) + ($$088))|0;
-       $167 = ((($111)) + 12|0);
-       HEAP32[$167>>2] = $166;
-       $168 = ((($111)) + 12|0);
-       $169 = HEAP32[$168>>2]|0;
-       $170 = (($$195) + 2)|0;
-       __THREW__ = 0;
-       invoke_viii(142,($1|0),($169|0),($170|0));
-       $171 = __THREW__; __THREW__ = 0;
-       if ((($171|0) != 0) & ((threwValue|0) != 0)) { $172 = _testSetjmp(HEAP32[$171>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($172|0) == 0) { _longjmp($171|0, threwValue|0); } tempRet0 = (threwValue); } else { $172 = -1; };
-       $173 = tempRet0;
-       $cond123 = ($172|0)==(1);
-       if ($cond123) {
-        $$091 = 0;$$092 = $5;$$094 = $$195;$$097 = $$198;$$reg2mem86$0 = $173;
-        break;
-       }
-      }
-      $174 = ($$0|0)>=(0);
-      if ($174) {
-       $175 = ((($1)) + 12|0);
-       $176 = HEAP32[$175>>2]|0;
-       $177 = ((($176)) + 8|0);
-       $178 = HEAP32[$177>>2]|0;
-       $179 = (($178) + ($$0<<3)|0);
-       $$193 = $179;
-      } else {
-       $$193 = $5;
-      }
-      $180 = ((($1)) + 12|0);
-      $181 = HEAP32[$180>>2]|0;
-      $182 = ((($181)) + 4|0);
-      $183 = HEAP32[$182>>2]|0;
-      ;HEAP32[$183>>2]=HEAP32[$2>>2]|0;HEAP32[$183+4>>2]=HEAP32[$2+4>>2]|0;
-      $184 = ($$089|0)!=(0);
-      if ($184) {
-       $185 = ((($1)) + 12|0);
-       $186 = HEAP32[$185>>2]|0;
-       $187 = ((($186)) + 4|0);
-       $188 = HEAP32[$187>>2]|0;
-       $189 = ((($188)) + 8|0);
-       __THREW__ = 0;
-       invoke_vii(143,($13|0),($$089|0));
-       $190 = __THREW__; __THREW__ = 0;
-       if ((($190|0) != 0) & ((threwValue|0) != 0)) { $191 = _testSetjmp(HEAP32[$190>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($191|0) == 0) { _longjmp($190|0, threwValue|0); } tempRet0 = (threwValue); } else { $191 = -1; };
-       $192 = tempRet0;
-       $cond130 = ($191|0)==(1);
-       if ($cond130) {
-        $$091 = 0;$$092 = $$193;$$094 = $$195;$$097 = $$198;$$reg2mem86$0 = $192;
-        break;
-       }
-       ;HEAP32[$189>>2]=HEAP32[$13>>2]|0;HEAP32[$189+4>>2]=HEAP32[$13+4>>2]|0;
-       $193 = ($$195|0)>(1);
-       if ($193) {
-        $194 = ((($1)) + 12|0);
-        $195 = HEAP32[$194>>2]|0;
-        $196 = ((($195)) + 4|0);
-        $197 = HEAP32[$196>>2]|0;
-        $198 = ((($197)) + 16|0);
-        $199 = (($$195) - 1)|0;
-        __THREW__ = 0;
-        invoke_viii(144,($198|0),($$193|0),($199|0));
-        $200 = __THREW__; __THREW__ = 0;
-        if ((($200|0) != 0) & ((threwValue|0) != 0)) { $201 = _testSetjmp(HEAP32[$200>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($201|0) == 0) { _longjmp($200|0, threwValue|0); } tempRet0 = (threwValue); } else { $201 = -1; };
-        $202 = tempRet0;
-        $cond131 = ($201|0)==(1);
-        if ($cond131) {
-         $$091 = 0;$$092 = $$193;$$094 = $$195;$$097 = $$198;$$reg2mem86$0 = $202;
-         break;
-        }
-       }
-      } else {
-       $203 = ($$195|0)>(0);
-       if ($203) {
-        $204 = ((($1)) + 12|0);
-        $205 = HEAP32[$204>>2]|0;
-        $206 = ((($205)) + 4|0);
-        $207 = HEAP32[$206>>2]|0;
-        $208 = ((($207)) + 8|0);
-        __THREW__ = 0;
-        invoke_viii(144,($208|0),($$193|0),($$195|0));
-        $209 = __THREW__; __THREW__ = 0;
-        if ((($209|0) != 0) & ((threwValue|0) != 0)) { $210 = _testSetjmp(HEAP32[$209>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($210|0) == 0) { _longjmp($209|0, threwValue|0); } tempRet0 = (threwValue); } else { $210 = -1; };
-        $211 = tempRet0;
-        $cond129 = ($210|0)==(1);
-        if ($cond129) {
-         $$091 = 0;$$092 = $$193;$$094 = $$195;$$097 = $$198;$$reg2mem86$0 = $211;
-         break;
-        }
-       }
-      }
-      $212 = ((($1)) + 12|0);
-      $213 = HEAP32[$212>>2]|0;
-      $214 = ((($213)) + 4|0);
-      $215 = HEAP32[$214>>2]|0;
-      $216 = (($$195) + 1)|0;
-      $217 = (($215) + ($216<<3)|0);
-      ;HEAP32[$217>>2]=HEAP32[$6>>2]|0;HEAP32[$217+4>>2]=HEAP32[$6+4>>2]|0;
-      $218 = HEAP32[$$090>>2]|0;
-      $219 = $218 >>> 11;
-      $220 = $219 & 128;
-      $221 = ($220|0)!=(0);
-      if (!($221)) {
-       $247 = ((($111)) + 40|0);
-       HEAP32[$247>>2] = -1;
-       __THREW__ = 0;
-       ;HEAP32[$$byval_copy103>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy103+4>>2]=HEAP32[$2+4>>2]|0;
-       invoke_viiii(147,($15|0),($1|0),($$090|0),($$byval_copy103|0));
-       $248 = __THREW__; __THREW__ = 0;
-       if ((($248|0) != 0) & ((threwValue|0) != 0)) { $249 = _testSetjmp(HEAP32[$248>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($249|0) == 0) { _longjmp($248|0, threwValue|0); } tempRet0 = (threwValue); } else { $249 = -1; };
-       $250 = tempRet0;
-       $cond124 = ($249|0)==(1);
-       if ($cond124) {
-        $$091 = 0;$$092 = $$193;$$094 = $$195;$$097 = $$198;$$reg2mem86$0 = $250;
-        break;
-       }
-       ;HEAP32[$7>>2]=HEAP32[$15>>2]|0;HEAP32[$7+4>>2]=HEAP32[$15+4>>2]|0;
-       $$1 = 0;$$2 = $$193;$$296 = $$195;$$299 = $$198;
-       label = 52;
-       break;
-      }
-      __THREW__ = 0;
-      $222 = (invoke_ii(145,($1|0))|0);
-      $223 = __THREW__; __THREW__ = 0;
-      if ((($223|0) != 0) & ((threwValue|0) != 0)) { $224 = _testSetjmp(HEAP32[$223>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($224|0) == 0) { _longjmp($223|0, threwValue|0); } tempRet0 = (threwValue); } else { $224 = -1; };
-      $225 = tempRet0;
-      $cond125 = ($224|0)==(1);
-      if ($cond125) {
-       $$091 = 0;$$092 = $$193;$$094 = $$195;$$097 = $$198;$$reg2mem86$0 = $225;
-      } else {
-       $226 = ((($111)) + 40|0);
-       HEAP32[$226>>2] = -2;
-       $227 = ((($$090)) + 12|0);
-       $228 = HEAP32[$227>>2]|0;
-       __THREW__ = 0;
-       ;HEAP32[$$byval_copy102>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy102+4>>2]=HEAP32[$2+4>>2]|0;
-       invoke_viii($228|0,($14|0),($1|0),($$byval_copy102|0));
-       $229 = __THREW__; __THREW__ = 0;
-       if ((($229|0) != 0) & ((threwValue|0) != 0)) { $230 = _testSetjmp(HEAP32[$229>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($230|0) == 0) { _longjmp($229|0, threwValue|0); } tempRet0 = (threwValue); } else { $230 = -1; };
-       $231 = tempRet0;
-       $cond126 = ($230|0)==(1);
-       if ($cond126) {
-        $$091 = 0;$$092 = $$193;$$094 = $$195;$$097 = $$198;$$reg2mem86$0 = $231;
-       } else {
-        ;HEAP32[$7>>2]=HEAP32[$14>>2]|0;HEAP32[$7+4>>2]=HEAP32[$14+4>>2]|0;
-        $232 = ((($1)) + 12|0);
-        $233 = HEAP32[$232>>2]|0;
-        $234 = ((($233)) + 16|0);
-        $235 = HEAP32[$234>>2]|0;
-        $236 = ((($235)) + 8|0);
-        $237 = HEAP32[$236>>2]|0;
-        $238 = ((($1)) + 12|0);
-        $239 = HEAP32[$238>>2]|0;
-        $240 = ((($239)) + 4|0);
-        HEAP32[$240>>2] = $237;
-        __THREW__ = 0;
-        invoke_vi(132,($1|0));
-        $241 = __THREW__; __THREW__ = 0;
-        if ((($241|0) != 0) & ((threwValue|0) != 0)) { $242 = _testSetjmp(HEAP32[$241>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($242|0) == 0) { _longjmp($241|0, threwValue|0); } tempRet0 = (threwValue); } else { $242 = -1; };
-        $243 = tempRet0;
-        $cond127 = ($242|0)==(1);
-        if ($cond127) {
-         $$091 = 0;$$092 = $$193;$$094 = $$195;$$097 = $$198;$$reg2mem86$0 = $243;
-        } else {
-         __THREW__ = 0;
-         invoke_vii(146,($1|0),($222|0));
-         $244 = __THREW__; __THREW__ = 0;
-         if ((($244|0) != 0) & ((threwValue|0) != 0)) { $245 = _testSetjmp(HEAP32[$244>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($245|0) == 0) { _longjmp($244|0, threwValue|0); } tempRet0 = (threwValue); } else { $245 = -1; };
-         $246 = tempRet0;
-         $cond128 = ($245|0)==(1);
-         if ($cond128) {
-          $$091 = 0;$$092 = $$193;$$094 = $$195;$$097 = $$198;$$reg2mem86$0 = $246;
-         } else {
-          $$1 = 0;$$2 = $$193;$$296 = $$195;$$299 = $$198;
-          label = 52;
-         }
-        }
-       }
-      }
-     }
-    }
-   }
-  } else {
-   $18 = ((($1)) + 12|0);
-   $19 = HEAP32[$18>>2]|0;
-   $20 = ((($19)) + 16|0);
-   $21 = HEAP32[$20>>2]|0;
-   $22 = ((($1)) + 12|0);
-   $23 = HEAP32[$22>>2]|0;
-   $24 = ((($23)) + 20|0);
-   $25 = HEAP32[$24>>2]|0;
-   $26 = $21;
-   $27 = $25;
-   $28 = (($26) - ($27))|0;
-   $29 = (($28|0) / 48)&-1;
-   _setjmpTable = _saveSetjmp($8,1,_setjmpTable|0,_setjmpTableSize|0)|0;_setjmpTableSize = tempRet0;
-   __THREW__ = 0;
-   $30 = __THREW__; __THREW__ = 0;
-   if ((($30|0) != 0) & ((threwValue|0) != 0)) { $31 = _testSetjmp(HEAP32[$30>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($31|0) == 0) { _longjmp($30|0, threwValue|0); } tempRet0 = (threwValue); } else { $31 = -1; };
-   $32 = tempRet0;
-   $cond = ($31|0)==(1);
-   if ($cond) {
-    $$091 = $29;$$092 = $5;$$094 = $4;$$097 = $3;$$reg2mem86$0 = $32;
-   } else {
-    $$091 = $29;$$092 = $5;$$094 = $4;$$097 = $3;$$reg2mem86$0 = 0;
-   }
-  }
- } while(0);
- L52: while(1) {
-  if ((label|0) == 52) {
-   label = 0;
-   __THREW__ = 0;
-   ;HEAP32[$$byval_copy104>>2]=HEAP32[$7>>2]|0;HEAP32[$$byval_copy104+4>>2]=HEAP32[$7+4>>2]|0;
-   invoke_vii(148,($1|0),($$byval_copy104|0));
-   $251 = __THREW__; __THREW__ = 0;
-   if ((($251|0) != 0) & ((threwValue|0) != 0)) { $252 = _testSetjmp(HEAP32[$251>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($252|0) == 0) { _longjmp($251|0, threwValue|0); } tempRet0 = (threwValue); } else { $252 = -1; };
-   $253 = tempRet0;
-   $cond114 = ($252|0)==(1);
-   if ($cond114) {
-    $$091 = $$1;$$092 = $$2;$$094 = $$296;$$097 = $$299;$$reg2mem86$0 = $253;
-   } else {
-    break;
-   }
-  }
-  $33 = ($$reg2mem86$0|0)==(0);
-  if ($33) {
-   HEAP32[$1>>2] = $8;
-   __THREW__ = 0;
-   ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
-   ;HEAP32[$$byval_copy100>>2]=HEAP32[$6>>2]|0;HEAP32[$$byval_copy100+4>>2]=HEAP32[$6+4>>2]|0;
-   invoke_viiiiiii(131,($9|0),($1|0),($$byval_copy|0),($$097|0),($$094|0),($$092|0),($$byval_copy100|0));
-   $34 = __THREW__; __THREW__ = 0;
-   if ((($34|0) != 0) & ((threwValue|0) != 0)) { $35 = _testSetjmp(HEAP32[$34>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($35|0) == 0) { _longjmp($34|0, threwValue|0); } tempRet0 = (threwValue); } else { $35 = -1; };
-   $36 = tempRet0;
-   $cond116 = ($35|0)==(1);
-   if ($cond116) {
-    $$097$phi = $$097;$$094$phi = $$094;$$092$phi = $$092;$$091$phi = $$091;$$reg2mem86$0 = $36;$$097 = $$097$phi;$$094 = $$094$phi;$$092 = $$092$phi;$$091 = $$091$phi;
-    continue;
-   }
-   ;HEAP32[$7>>2]=HEAP32[$9>>2]|0;HEAP32[$7+4>>2]=HEAP32[$9+4>>2]|0;
-   HEAP32[$1>>2] = 0;
-   $$1 = $$091;$$2 = $$092;$$296 = $$094;$$299 = $$097;
-   label = 52;
-   continue;
-  }
-  while(1) {
-   $37 = ((($1)) + 12|0);
-   $38 = HEAP32[$37>>2]|0;
-   $39 = ((($38)) + 16|0);
-   $40 = HEAP32[$39>>2]|0;
-   $41 = ((($1)) + 12|0);
-   $42 = HEAP32[$41>>2]|0;
-   $43 = ((($42)) + 20|0);
-   $44 = HEAP32[$43>>2]|0;
-   $45 = $40;
-   $46 = $44;
-   $47 = (($45) - ($46))|0;
-   $48 = (($47|0) / 48)&-1;
-   $49 = ($$091|0)<($48|0);
-   if (!($49)) {
-    break;
-   }
-   $50 = ((($1)) + 12|0);
-   $51 = HEAP32[$50>>2]|0;
-   $52 = ((($51)) + 16|0);
-   $53 = HEAP32[$52>>2]|0;
-   $54 = ((($53)) + 8|0);
-   $55 = HEAP32[$54>>2]|0;
-   $56 = ((($1)) + 12|0);
-   $57 = HEAP32[$56>>2]|0;
-   $58 = ((($57)) + 4|0);
-   HEAP32[$58>>2] = $55;
-   __THREW__ = 0;
-   invoke_vi(132,($1|0));
-   $59 = __THREW__; __THREW__ = 0;
-   if ((($59|0) != 0) & ((threwValue|0) != 0)) { $60 = _testSetjmp(HEAP32[$59>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($60|0) == 0) { _longjmp($59|0, threwValue|0); } tempRet0 = (threwValue); } else { $60 = -1; };
-   $61 = tempRet0;
-   $cond115 = ($60|0)==(1);
-   if ($cond115) {
-    $$097$phi = $$097;$$094$phi = $$094;$$092$phi = $$092;$$091$phi = $$091;$$reg2mem86$0 = $61;$$097 = $$097$phi;$$094 = $$094$phi;$$092 = $$092$phi;$$091 = $$091$phi;
-    continue L52;
-   }
-  }
-  HEAP32[$1>>2] = 0;
-  $62 = ((($1)) + 20|0);
-  $63 = HEAP32[$62>>2]|0;
-  __THREW__ = 0;
-  invoke_vii(133,($10|0),($63|0));
-  $64 = __THREW__; __THREW__ = 0;
-  if ((($64|0) != 0) & ((threwValue|0) != 0)) { $65 = _testSetjmp(HEAP32[$64>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($65|0) == 0) { _longjmp($64|0, threwValue|0); } tempRet0 = (threwValue); } else { $65 = -1; };
-  $66 = tempRet0;
-  $cond113 = ($65|0)==(1);
-  if ($cond113) {
-   $$097$phi = $$097;$$094$phi = $$094;$$092$phi = $$092;$$091$phi = $$091;$$reg2mem86$0 = $66;$$097 = $$097$phi;$$094 = $$094$phi;$$092 = $$092$phi;$$091 = $$091$phi;
-   continue;
-  }
-  ;HEAP32[$7>>2]=HEAP32[$10>>2]|0;HEAP32[$7+4>>2]=HEAP32[$10+4>>2]|0;
-  $$1 = $$091;$$2 = $$092;$$296 = $$094;$$299 = $$097;
-  label = 52;
- }
- ;HEAP32[$0>>2]=HEAP32[$7>>2]|0;HEAP32[$0+4>>2]=HEAP32[$7+4>>2]|0;
- _free(_setjmpTable|0);
- STACKTOP = sp;return;
-}
-function _cipop($0) {
- $0 = $0|0;
- var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;
- var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $5 = 0;
- var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $1 = $0;
- $6 = $1;
- $7 = ((($6)) + 12|0);
- $8 = HEAP32[$7>>2]|0;
- $2 = $8;
- $9 = $2;
- $10 = ((($9)) + 16|0);
- $11 = HEAP32[$10>>2]|0;
- $12 = ((($11)) + 24|0);
- $13 = HEAP32[$12>>2]|0;
- $14 = ($13|0)!=(0|0);
- if (!($14)) {
-  $41 = $2;
-  $42 = ((($41)) + 16|0);
-  $43 = HEAP32[$42>>2]|0;
-  $44 = ((($43)) + -48|0);
-  HEAP32[$42>>2] = $44;
-  STACKTOP = sp;return;
- }
- $15 = $2;
- $16 = ((($15)) + 16|0);
- $17 = HEAP32[$16>>2]|0;
- $18 = ((($17)) + 24|0);
- $19 = HEAP32[$18>>2]|0;
- $3 = $19;
- $20 = $3;
- $21 = HEAP32[$20>>2]|0;
- $22 = $21 >>> 11;
- $4 = $22;
- $23 = $1;
- $24 = $4;
- $25 = $24<<3;
- $26 = (_mrb_malloc($23,$25)|0);
- $5 = $26;
- $27 = $3;
- $28 = ((($27)) + 20|0);
- HEAP32[$28>>2] = -1;
- $29 = $4;
- $30 = ($29>>>0)>(0);
- if ($30) {
-  $31 = $5;
-  $32 = $3;
-  $33 = ((($32)) + 12|0);
-  $34 = HEAP32[$33>>2]|0;
-  $35 = $4;
-  _stack_copy($31,$34,$35);
- }
- $36 = $5;
- $37 = $3;
- $38 = ((($37)) + 12|0);
- HEAP32[$38>>2] = $36;
- $39 = $1;
- $40 = $3;
- _mrb_write_barrier($39,$40);
- $41 = $2;
- $42 = ((($41)) + 16|0);
- $43 = HEAP32[$42>>2]|0;
- $44 = ((($43)) + -48|0);
- HEAP32[$42>>2] = $44;
- STACKTOP = sp;return;
-}
-function _mrb_obj_value_420($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = sp;
- $2 = $1;
- $4 = $2;
- $5 = HEAP32[$4>>2]|0;
- $6 = $5 & 255;
- $7 = ((($3)) + 4|0);
- HEAP32[$7>>2] = $6;
- $8 = $2;
- HEAP32[$3>>2] = $8;
- ;HEAP32[$0>>2]=HEAP32[$3>>2]|0;HEAP32[$0+4>>2]=HEAP32[$3+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _stack_init($0) {
- $0 = $0|0;
- var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;
- var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0;
- var $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $1 = $0;
- $3 = $1;
- $4 = ((($3)) + 12|0);
- $5 = HEAP32[$4>>2]|0;
- $2 = $5;
- $6 = $1;
- $7 = (_mrb_calloc($6,128,8)|0);
- $8 = $2;
- $9 = ((($8)) + 8|0);
- HEAP32[$9>>2] = $7;
- $10 = $2;
- $11 = ((($10)) + 8|0);
- $12 = HEAP32[$11>>2]|0;
- $13 = ((($12)) + 1024|0);
- $14 = $2;
- $15 = ((($14)) + 12|0);
- HEAP32[$15>>2] = $13;
- $16 = $2;
- $17 = ((($16)) + 8|0);
- $18 = HEAP32[$17>>2]|0;
- $19 = $2;
- $20 = ((($19)) + 4|0);
- HEAP32[$20>>2] = $18;
- $21 = $1;
- $22 = (_mrb_calloc($21,32,48)|0);
- $23 = $2;
- $24 = ((($23)) + 20|0);
- HEAP32[$24>>2] = $22;
- $25 = $2;
- $26 = ((($25)) + 20|0);
- $27 = HEAP32[$26>>2]|0;
- $28 = ((($27)) + 1536|0);
- $29 = $2;
- $30 = ((($29)) + 24|0);
- HEAP32[$30>>2] = $28;
- $31 = $2;
- $32 = ((($31)) + 20|0);
- $33 = HEAP32[$32>>2]|0;
- $34 = $2;
- $35 = ((($34)) + 16|0);
- HEAP32[$35>>2] = $33;
- $36 = $1;
- $37 = ((($36)) + 32|0);
- $38 = HEAP32[$37>>2]|0;
- $39 = $2;
- $40 = ((($39)) + 16|0);
- $41 = HEAP32[$40>>2]|0;
- $42 = ((($41)) + 44|0);
- HEAP32[$42>>2] = $38;
- $43 = $2;
- $44 = ((($43)) + 4|0);
- $45 = HEAP32[$44>>2]|0;
- $46 = $2;
- $47 = ((($46)) + 16|0);
- $48 = HEAP32[$47>>2]|0;
- $49 = ((($48)) + 8|0);
- HEAP32[$49>>2] = $45;
- STACKTOP = sp;return;
-}
-function _mrb_fixnum_value_421($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = sp;
- $2 = $1;
- $4 = ((($3)) + 4|0);
- HEAP32[$4>>2] = 3;
- $5 = $2;
- HEAP32[$3>>2] = $5;
- ;HEAP32[$0>>2]=HEAP32[$3>>2]|0;HEAP32[$0+4>>2]=HEAP32[$3+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_class_423($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;
- var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $0;
- $4 = ((($1)) + 4|0);
- $5 = HEAP32[$4>>2]|0;
- L1: do {
-  switch ($5|0) {
-  case 0:  {
-   $6 = HEAP32[$1>>2]|0;
-   $7 = ($6|0)!=(0);
-   $8 = $3;
-   if ($7) {
-    $9 = ((($8)) + 72|0);
-    $10 = HEAP32[$9>>2]|0;
-    $2 = $10;
-    break L1;
-   } else {
-    $11 = ((($8)) + 76|0);
-    $12 = HEAP32[$11>>2]|0;
-    $2 = $12;
-    break L1;
-   }
-   break;
-  }
-  case 2:  {
-   $13 = $3;
-   $14 = ((($13)) + 68|0);
-   $15 = HEAP32[$14>>2]|0;
-   $2 = $15;
-   break;
-  }
-  case 4:  {
-   $16 = $3;
-   $17 = ((($16)) + 80|0);
-   $18 = HEAP32[$17>>2]|0;
-   $2 = $18;
-   break;
-  }
-  case 3:  {
-   $19 = $3;
-   $20 = ((($19)) + 64|0);
-   $21 = HEAP32[$20>>2]|0;
-   $2 = $21;
-   break;
-  }
-  case 6:  {
-   $22 = $3;
-   $23 = ((($22)) + 60|0);
-   $24 = HEAP32[$23>>2]|0;
-   $2 = $24;
-   break;
-  }
-  case 7:  {
-   $25 = $3;
-   $26 = ((($25)) + 32|0);
-   $27 = HEAP32[$26>>2]|0;
-   $2 = $27;
-   break;
-  }
-  case 20:  {
-   $2 = 0;
-   break;
-  }
-  default: {
-   $28 = HEAP32[$1>>2]|0;
-   $29 = ((($28)) + 4|0);
-   $30 = HEAP32[$29>>2]|0;
-   $2 = $30;
-  }
-  }
- } while(0);
- $31 = $2;
- STACKTOP = sp;return ($31|0);
-}
-function _cipush($0) {
- $0 = $0|0;
- var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;
- var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0;
- var $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0;
- var $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $1 = $0;
- $7 = $1;
- $8 = ((($7)) + 12|0);
- $9 = HEAP32[$8>>2]|0;
- $2 = $9;
- $10 = $2;
- $11 = ((($10)) + 16|0);
- $12 = HEAP32[$11>>2]|0;
- $3 = $12;
- $13 = $3;
- $14 = ((($13)) + 20|0);
- $15 = HEAP32[$14>>2]|0;
- $4 = $15;
- $16 = $3;
- $17 = ((($16)) + 16|0);
- $18 = HEAP32[$17>>2]|0;
- $5 = $18;
- $19 = $3;
- $20 = ((($19)) + 48|0);
- $21 = $2;
- $22 = ((($21)) + 24|0);
- $23 = HEAP32[$22>>2]|0;
- $24 = ($20|0)==($23|0);
- if ($24) {
-  $25 = $3;
-  $26 = $2;
-  $27 = ((($26)) + 20|0);
-  $28 = HEAP32[$27>>2]|0;
-  $29 = $25;
-  $30 = $28;
-  $31 = (($29) - ($30))|0;
-  $32 = (($31|0) / 48)&-1;
-  $6 = $32;
-  $33 = $1;
-  $34 = $2;
-  $35 = ((($34)) + 20|0);
-  $36 = HEAP32[$35>>2]|0;
-  $37 = $6;
-  $38 = ($37*48)|0;
-  $39 = $38<<1;
-  $40 = (_mrb_realloc($33,$36,$39)|0);
-  $41 = $2;
-  $42 = ((($41)) + 20|0);
-  HEAP32[$42>>2] = $40;
-  $43 = $2;
-  $44 = ((($43)) + 20|0);
-  $45 = HEAP32[$44>>2]|0;
-  $46 = $6;
-  $47 = (($45) + (($46*48)|0)|0);
-  $48 = $2;
-  $49 = ((($48)) + 16|0);
-  HEAP32[$49>>2] = $47;
-  $50 = $2;
-  $51 = ((($50)) + 20|0);
-  $52 = HEAP32[$51>>2]|0;
-  $53 = $6;
-  $54 = $53<<1;
-  $55 = (($52) + (($54*48)|0)|0);
-  $56 = $2;
-  $57 = ((($56)) + 24|0);
-  HEAP32[$57>>2] = $55;
- }
- $58 = $2;
- $59 = ((($58)) + 16|0);
- $60 = HEAP32[$59>>2]|0;
- $61 = ((($60)) + 48|0);
- HEAP32[$59>>2] = $61;
- $3 = $61;
- $62 = $4;
- $63 = $3;
- $64 = ((($63)) + 20|0);
- HEAP32[$64>>2] = $62;
- $65 = $5;
- $66 = $3;
- $67 = ((($66)) + 16|0);
- HEAP32[$67>>2] = $65;
- $68 = $3;
- $69 = ((($68)) + 24|0);
- HEAP32[$69>>2] = 0;
- $70 = $3;
- $71 = ((($70)) + 28|0);
- HEAP32[$71>>2] = 0;
- $72 = $3;
- $73 = ((($72)) + 32|0);
- HEAP32[$73>>2] = 0;
- $74 = $3;
- $75 = ((($74)) + 4|0);
- HEAP32[$75>>2] = 0;
- $76 = $3;
- STACKTOP = sp;return ($76|0);
-}
-function _stack_extend($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0;
- var $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $0;
- $4 = $1;
- $5 = $2;
- $6 = $3;
- $7 = ((($6)) + 12|0);
- $8 = HEAP32[$7>>2]|0;
- $9 = ((($8)) + 4|0);
- $10 = HEAP32[$9>>2]|0;
- $11 = $4;
- $12 = (($10) + ($11<<3)|0);
- $13 = $3;
- $14 = ((($13)) + 12|0);
- $15 = HEAP32[$14>>2]|0;
- $16 = ((($15)) + 12|0);
- $17 = HEAP32[$16>>2]|0;
- $18 = ($12>>>0)>=($17>>>0);
- if (!($18)) {
-  $22 = $3;
-  $23 = $4;
-  $24 = $5;
-  _init_new_stack_space($22,$23,$24);
-  STACKTOP = sp;return;
- }
- $19 = $3;
- $20 = $4;
- $21 = $5;
- _stack_extend_alloc($19,$20,$21);
- $22 = $3;
- $23 = $4;
- $24 = $5;
- _init_new_stack_space($22,$23,$24);
- STACKTOP = sp;return;
-}
-function _mrb_symbol_value_425($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = sp;
- $2 = $1;
- $4 = ((($3)) + 4|0);
- HEAP32[$4>>2] = 4;
- $5 = $2;
- HEAP32[$3>>2] = $5;
- ;HEAP32[$0>>2]=HEAP32[$3>>2]|0;HEAP32[$0+4>>2]=HEAP32[$3+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _stack_copy($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $0;
- $4 = $1;
- $5 = $2;
- while(1) {
-  $6 = $5;
-  $7 = (($6) + -1)|0;
-  $5 = $7;
-  $8 = ($6>>>0)>(0);
-  if (!($8)) {
-   break;
-  }
-  $9 = $3;
-  $10 = ((($9)) + 8|0);
-  $3 = $10;
-  $11 = $4;
-  $12 = ((($11)) + 8|0);
-  $4 = $12;
-  ;HEAP32[$9>>2]=HEAP32[$11>>2]|0;HEAP32[$9+4>>2]=HEAP32[$11+4>>2]|0;
- }
- STACKTOP = sp;return;
-}
-function _mrb_run($0,$1,$2,$3) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- var $$byval_copy = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $$byval_copy = sp + 8|0;
- $4 = $1;
- $5 = $2;
- $6 = $4;
- $7 = $5;
- $8 = $4;
- $9 = ((($8)) + 12|0);
- $10 = HEAP32[$9>>2]|0;
- $11 = ((($10)) + 16|0);
- $12 = HEAP32[$11>>2]|0;
- $13 = ((($12)) + 36|0);
- $14 = HEAP32[$13>>2]|0;
- $15 = (($14) + 2)|0;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$3>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$3+4>>2]|0;
- _mrb_context_run($0,$6,$7,$$byval_copy,$15);
- STACKTOP = sp;return;
-}
-function _mrb_context_run($0,$1,$2,$3,$4) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- $4 = $4|0;
- var $$0 = 0, $$01004 = 0, $$01005 = 0, $$01006 = 0, $$01007 = 0, $$01008 = 0, $$01009 = 0, $$01010 = 0, $$01011 = 0, $$01012 = 0, $$01013 = 0, $$01014 = 0, $$01015 = 0, $$01016 = 0, $$01017 = 0, $$01018 = 0, $$01019 = 0, $$01021 = 0, $$01021$phi = 0, $$01023 = 0;
- var $$01025 = 0, $$01026 = 0, $$01027 = 0, $$01029 = 0, $$01031 = 0, $$01032 = 0, $$01033 = 0, $$01034 = 0, $$01035 = 0, $$01036 = 0, $$01037 = 0, $$01038 = 0, $$01039 = 0, $$01040 = 0, $$01041 = 0, $$01042 = 0, $$01043 = 0, $$01046 = 0, $$01048 = 0, $$01050 = 0;
- var $$01053 = 0, $$01059 = 0, $$01065 = 0, $$01072 = 0, $$01079 = 0, $$01086 = 0, $$1 = 0, $$11020 = 0, $$11020$phi = 0, $$11022 = 0, $$11024 = 0, $$11028 = 0, $$11030 = 0, $$11044 = 0, $$11044$phi = 0, $$11047 = 0, $$11047$phi = 0, $$11049 = 0, $$11049$phi = 0, $$11051 = 0;
- var $$11054 = 0, $$11054$phi = 0, $$11060 = 0, $$11060$phi = 0, $$11066 = 0, $$11066$phi = 0, $$11073 = 0, $$11073$phi = 0, $$11080 = 0, $$11080$phi = 0, $$11087 = 0, $$11087$phi = 0, $$2 = 0, $$21045 = 0, $$21045$phi = 0, $$21052 = 0, $$21055 = 0, $$21055$phi = 0, $$21061 = 0, $$21067 = 0;
- var $$21074 = 0, $$21081 = 0, $$21088 = 0, $$3 = 0, $$31056 = 0, $$31062 = 0, $$31062$phi = 0, $$31068 = 0, $$31068$phi = 0, $$31075 = 0, $$31075$phi = 0, $$31082 = 0, $$31089 = 0, $$4 = 0, $$41057 = 0, $$41063 = 0, $$41069 = 0, $$41076 = 0, $$41083 = 0, $$41090 = 0;
- var $$5 = 0, $$5$phi = 0, $$51058 = 0, $$51058$phi = 0, $$51064 = 0, $$51070 = 0, $$51077 = 0, $$51084 = 0, $$51084$phi = 0, $$51091 = 0, $$51091$phi = 0, $$6 = 0, $$6$phi = 0, $$61071 = 0, $$61071$phi = 0, $$61078 = 0, $$61085 = 0, $$61092 = 0, $$7 = 0, $$71093 = 0;
- var $$8 = 0, $$8$phi = 0, $$81094 = 0, $$81094$phi = 0, $$byval_copy = 0, $$byval_copy1097 = 0, $$byval_copy1098 = 0, $$byval_copy1099 = 0, $$byval_copy1100 = 0, $$byval_copy1101 = 0, $$byval_copy1102 = 0, $$byval_copy1103 = 0, $$byval_copy1104 = 0, $$byval_copy1105 = 0, $$byval_copy1106 = 0, $$byval_copy1107 = 0, $$byval_copy1108 = 0, $$byval_copy1109 = 0, $$byval_copy1110 = 0, $$byval_copy1111 = 0;
- var $$byval_copy1112 = 0, $$byval_copy1113 = 0, $$byval_copy1114 = 0, $$byval_copy1115 = 0, $$byval_copy1116 = 0, $$byval_copy1117 = 0, $$byval_copy1118 = 0, $$byval_copy1119 = 0, $$byval_copy1120 = 0, $$byval_copy1121 = 0, $$byval_copy1122 = 0, $$byval_copy1123 = 0, $$byval_copy1124 = 0, $$byval_copy1125 = 0, $$byval_copy1126 = 0, $$byval_copy1127 = 0, $$byval_copy1128 = 0, $$byval_copy1129 = 0, $$byval_copy1130 = 0, $$byval_copy1131 = 0;
- var $$byval_copy1132 = 0, $$byval_copy1133 = 0, $$byval_copy1134 = 0, $$byval_copy1135 = 0, $$byval_copy1136 = 0, $$byval_copy1137 = 0, $$byval_copy1138 = 0, $$byval_copy1139 = 0, $$byval_copy1140 = 0, $$byval_copy1141 = 0, $$byval_copy1142 = 0, $$byval_copy1143 = 0, $$byval_copy1144 = 0, $$byval_copy1145 = 0, $$byval_copy1146 = 0, $$byval_copy1147 = 0, $$byval_copy1148 = 0, $$byval_copy1149 = 0, $$byval_copy1150 = 0, $$byval_copy1151 = 0;
- var $$byval_copy1152 = 0, $$byval_copy1153 = 0, $$byval_copy1154 = 0, $$byval_copy1155 = 0, $$byval_copy1156 = 0, $$reg2mem1000$0 = 0, $$reg2mem1002$0 = 0, $$reg2mem992$0 = 0, $$reg2mem994$0 = 0, $$reg2mem996$0 = 0, $$reg2mem998$0 = 0, $$sink$reg2mem$0 = 0, $$sink10 = 0, $$sink11$reg2mem$0 = 0, $$sink17 = 0, $$sink19 = 0, $$sink2$reg2mem$0 = 0, $$sink24$reg2mem$0 = 0, $$sink25$reg2mem$0 = 0.0, $$sink28$reg2mem$0 = 0;
- var $$sink3$reg2mem$0 = 0, $$sink31$reg2mem$0 = 0, $$sink34$reg2mem$0 = 0, $$sink37$reg2mem$0 = 0, $$sink40$reg2mem$0 = 0, $$sink43$reg2mem$0 = 0, $$sink5$reg2mem$0 = 0, $$sink8 = 0, $10 = 0, $100 = 0, $1000 = 0, $1001 = 0, $1002 = 0, $1003 = 0, $1004 = 0, $1005 = 0, $1006 = 0, $1007 = 0, $1008 = 0, $1009 = 0;
- var $101 = 0, $1010 = 0, $1011 = 0, $1012 = 0, $1013 = 0, $1014 = 0, $1015 = 0, $1016 = 0, $1017 = 0, $1018 = 0, $1019 = 0, $102 = 0, $1020 = 0, $1021 = 0, $1022 = 0, $1023 = 0, $1024 = 0, $1025 = 0, $1026 = 0, $1027 = 0;
- var $1028 = 0, $1029 = 0, $103 = 0, $1030 = 0, $1031 = 0, $1032 = 0, $1033 = 0, $1034 = 0, $1035 = 0, $1036 = 0, $1037 = 0, $1038 = 0, $1039 = 0, $104 = 0, $1040 = 0, $1041 = 0, $1042 = 0, $1043 = 0, $1044 = 0, $1045 = 0;
- var $1046 = 0, $1047 = 0, $1048 = 0, $1049 = 0, $105 = 0, $1050 = 0, $1051 = 0, $1052 = 0, $1053 = 0, $1054 = 0, $1055 = 0, $1056 = 0, $1057 = 0, $1058 = 0, $1059 = 0, $106 = 0, $1060 = 0, $1061 = 0, $1062 = 0, $1063 = 0;
- var $1064 = 0, $1065 = 0, $1066 = 0, $1067 = 0, $1068 = 0, $1069 = 0, $107 = 0, $1070 = 0, $1071 = 0, $1072 = 0, $1073 = 0, $1074 = 0, $1075 = 0, $1076 = 0, $1077 = 0, $1078 = 0, $1079 = 0, $108 = 0, $1080 = 0, $1081 = 0;
- var $1082 = 0, $1083 = 0, $1084 = 0, $1085 = 0, $1086 = 0, $1087 = 0, $1088 = 0, $1089 = 0, $109 = 0, $1090 = 0, $1091 = 0, $1092 = 0, $1093 = 0, $1094 = 0, $1095 = 0, $1096 = 0, $1097 = 0, $1098 = 0, $1099 = 0, $11 = 0;
- var $110 = 0, $1100 = 0, $1101 = 0, $1102 = 0, $1103 = 0, $1104 = 0, $1105 = 0, $1106 = 0, $1107 = 0, $1108 = 0, $1109 = 0, $111 = 0, $1110 = 0, $1111 = 0, $1112 = 0, $1113 = 0, $1114 = 0, $1115 = 0, $1116 = 0, $1117 = 0;
- var $1118 = 0, $1119 = 0, $112 = 0, $1120 = 0, $1121 = 0, $1122 = 0, $1123 = 0, $1124 = 0, $1125 = 0, $1126 = 0, $1127 = 0, $1128 = 0, $1129 = 0, $113 = 0, $1130 = 0, $1131 = 0, $1132 = 0, $1133 = 0, $1134 = 0, $1135 = 0;
- var $1136 = 0, $1137 = 0, $1138 = 0, $1139 = 0, $114 = 0, $1140 = 0, $1141 = 0, $1142 = 0, $1143 = 0, $1144 = 0, $1145 = 0, $1146 = 0, $1147 = 0, $1148 = 0, $1149 = 0, $115 = 0, $1150 = 0, $1151 = 0, $1152 = 0, $1153 = 0;
- var $1154 = 0, $1155 = 0, $1156 = 0, $1157 = 0, $1158 = 0, $1159 = 0, $116 = 0, $1160 = 0, $1161 = 0, $1162 = 0, $1163 = 0, $1164 = 0, $1165 = 0, $1166 = 0, $1167 = 0, $1168 = 0, $1169 = 0, $117 = 0, $1170 = 0, $1171 = 0;
- var $1172 = 0, $1173 = 0, $1174 = 0, $1175 = 0, $1176 = 0, $1177 = 0, $1178 = 0, $1179 = 0, $118 = 0, $1180 = 0, $1181 = 0, $1182 = 0, $1183 = 0, $1184 = 0, $1185 = 0, $1186 = 0, $1187 = 0, $1188 = 0, $1189 = 0, $119 = 0;
- var $1190 = 0, $1191 = 0, $1192 = 0, $1193 = 0, $1194 = 0, $1195 = 0, $1196 = 0, $1197 = 0, $1198 = 0, $1199 = 0, $12 = 0, $120 = 0, $1200 = 0, $1201 = 0, $1202 = 0, $1203 = 0, $1204 = 0, $1205 = 0, $1206 = 0, $1207 = 0;
- var $1208 = 0, $1209 = 0, $121 = 0, $1210 = 0, $1211 = 0, $1212 = 0, $1213 = 0, $1214 = 0, $1215 = 0, $1216 = 0, $1217 = 0, $1218 = 0, $1219 = 0, $122 = 0, $1220 = 0, $1221 = 0, $1222 = 0, $1223 = 0, $1224 = 0, $1225 = 0;
- var $1226 = 0, $1227 = 0, $1228 = 0, $1229 = 0, $123 = 0, $1230 = 0, $1231 = 0, $1232 = 0, $1233 = 0, $1234 = 0, $1235 = 0, $1236 = 0, $1237 = 0, $1238 = 0, $1239 = 0, $124 = 0, $1240 = 0, $1241 = 0, $1242 = 0, $1243 = 0;
- var $1244 = 0, $1245 = 0, $1246 = 0, $1247 = 0, $1248 = 0, $1249 = 0, $125 = 0, $1250 = 0, $1251 = 0, $1252 = 0, $1253 = 0, $1254 = 0, $1255 = 0, $1256 = 0, $1257 = 0, $1258 = 0, $1259 = 0, $126 = 0, $1260 = 0, $1261 = 0;
- var $1262 = 0, $1263 = 0, $1264 = 0, $1265 = 0, $1266 = 0, $1267 = 0, $1268 = 0, $1269 = 0, $127 = 0, $1270 = 0, $1271 = 0, $1272 = 0, $1273 = 0, $1274 = 0, $1275 = 0, $1276 = 0, $1277 = 0, $1278 = 0, $1279 = 0, $128 = 0;
- var $1280 = 0, $1281 = 0, $1282 = 0, $1283 = 0, $1284 = 0, $1285 = 0, $1286 = 0, $1287 = 0, $1288 = 0, $1289 = 0, $129 = 0, $1290 = 0, $1291 = 0, $1292 = 0, $1293 = 0, $1294 = 0, $1295 = 0, $1296 = 0, $1297 = 0, $1298 = 0;
- var $1299 = 0, $13 = 0, $130 = 0, $1300 = 0, $1301 = 0, $1302 = 0, $1303 = 0, $1304 = 0, $1305 = 0, $1306 = 0, $1307 = 0, $1308 = 0, $1309 = 0, $131 = 0, $1310 = 0, $1311 = 0, $1312 = 0, $1313 = 0, $1314 = 0, $1315 = 0;
- var $1316 = 0, $1317 = 0, $1318 = 0, $1319 = 0, $132 = 0, $1320 = 0, $1321 = 0, $1322 = 0, $1323 = 0, $1324 = 0, $1325 = 0, $1326 = 0, $1327 = 0, $1328 = 0, $1329 = 0, $133 = 0, $1330 = 0, $1331 = 0, $1332 = 0, $1333 = 0;
- var $1334 = 0, $1335 = 0, $1336 = 0, $1337 = 0, $1338 = 0, $1339 = 0, $134 = 0, $1340 = 0, $1341 = 0, $1342 = 0, $1343 = 0, $1344 = 0, $1345 = 0, $1346 = 0, $1347 = 0, $1348 = 0, $1349 = 0, $135 = 0, $1350 = 0, $1351 = 0;
- var $1352 = 0, $1353 = 0, $1354 = 0, $1355 = 0, $1356 = 0, $1357 = 0, $1358 = 0, $1359 = 0, $136 = 0, $1360 = 0, $1361 = 0, $1362 = 0, $1363 = 0, $1364 = 0, $1365 = 0, $1366 = 0, $1367 = 0, $1368 = 0, $1369 = 0, $137 = 0;
- var $1370 = 0, $1371 = 0, $1372 = 0, $1373 = 0, $1374 = 0, $1375 = 0, $1376 = 0, $1377 = 0, $1378 = 0, $1379 = 0, $138 = 0, $1380 = 0, $1381 = 0, $1382 = 0, $1383 = 0, $1384 = 0, $1385 = 0, $1386 = 0, $1387 = 0, $1388 = 0;
- var $1389 = 0, $139 = 0, $1390 = 0, $1391 = 0, $1392 = 0, $1393 = 0, $1394 = 0, $1395 = 0, $1396 = 0, $1397 = 0, $1398 = 0, $1399 = 0, $14 = 0, $140 = 0, $1400 = 0, $1401 = 0, $1402 = 0, $1403 = 0, $1404 = 0, $1405 = 0;
- var $1406 = 0, $1407 = 0, $1408 = 0, $1409 = 0, $141 = 0, $1410 = 0, $1411 = 0, $1412 = 0, $1413 = 0, $1414 = 0, $1415 = 0, $1416 = 0, $1417 = 0, $1418 = 0, $1419 = 0, $142 = 0, $1420 = 0, $1421 = 0, $1422 = 0, $1423 = 0;
- var $1424 = 0, $1425 = 0, $1426 = 0, $1427 = 0, $1428 = 0, $1429 = 0, $143 = 0, $1430 = 0, $1431 = 0, $1432 = 0, $1433 = 0, $1434 = 0, $1435 = 0, $1436 = 0, $1437 = 0, $1438 = 0, $1439 = 0, $144 = 0, $1440 = 0, $1441 = 0;
- var $1442 = 0, $1443 = 0, $1444 = 0, $1445 = 0, $1446 = 0, $1447 = 0, $1448 = 0, $1449 = 0, $145 = 0, $1450 = 0, $1451 = 0, $1452 = 0, $1453 = 0, $1454 = 0, $1455 = 0, $1456 = 0, $1457 = 0, $1458 = 0, $1459 = 0, $146 = 0;
- var $1460 = 0, $1461 = 0, $1462 = 0, $1463 = 0, $1464 = 0, $1465 = 0, $1466 = 0, $1467 = 0, $1468 = 0, $1469 = 0, $147 = 0, $1470 = 0, $1471 = 0, $1472 = 0, $1473 = 0, $1474 = 0, $1475 = 0, $1476 = 0, $1477 = 0, $1478 = 0;
- var $1479 = 0, $148 = 0, $1480 = 0, $1481 = 0, $1482 = 0, $1483 = 0, $1484 = 0, $1485 = 0, $1486 = 0, $1487 = 0, $1488 = 0, $1489 = 0, $149 = 0, $1490 = 0, $1491 = 0, $1492 = 0, $1493 = 0, $1494 = 0, $1495 = 0, $1496 = 0;
- var $1497 = 0, $1498 = 0, $1499 = 0, $15 = 0, $150 = 0, $1500 = 0, $1501 = 0, $1502 = 0, $1503 = 0, $1504 = 0, $1505 = 0, $1506 = 0, $1507 = 0, $1508 = 0, $1509 = 0, $151 = 0, $1510 = 0, $1511 = 0, $1512 = 0, $1513 = 0;
- var $1514 = 0, $1515 = 0, $1516 = 0, $1517 = 0, $1518 = 0, $1519 = 0, $152 = 0, $1520 = 0, $1521 = 0, $1522 = 0, $1523 = 0, $1524 = 0, $1525 = 0, $1526 = 0, $1527 = 0, $1528 = 0, $1529 = 0, $153 = 0, $1530 = 0, $1531 = 0;
- var $1532 = 0, $1533 = 0, $1534 = 0, $1535 = 0, $1536 = 0, $1537 = 0, $1538 = 0, $1539 = 0, $154 = 0, $1540 = 0, $1541 = 0, $1542 = 0, $1543 = 0, $1544 = 0, $1545 = 0, $1546 = 0, $1547 = 0, $1548 = 0, $1549 = 0, $155 = 0;
- var $1550 = 0, $1551 = 0, $1552 = 0, $1553 = 0, $1554 = 0, $1555 = 0, $1556 = 0, $1557 = 0, $1558 = 0, $1559 = 0, $156 = 0, $1560 = 0, $1561 = 0, $1562 = 0, $1563 = 0, $1564 = 0, $1565 = 0, $1566 = 0, $1567 = 0, $1568 = 0;
- var $1569 = 0, $157 = 0, $1570 = 0, $1571 = 0, $1572 = 0, $1573 = 0, $1574 = 0, $1575 = 0, $1576 = 0, $1577 = 0, $1578 = 0, $1579 = 0, $158 = 0, $1580 = 0, $1581 = 0, $1582 = 0, $1583 = 0, $1584 = 0, $1585 = 0, $1586 = 0;
- var $1587 = 0, $1588 = 0, $1589 = 0, $159 = 0, $1590 = 0, $1591 = 0, $1592 = 0, $1593 = 0, $1594 = 0, $1595 = 0, $1596 = 0, $1597 = 0, $1598 = 0, $1599 = 0, $16 = 0, $160 = 0, $1600 = 0, $1601 = 0, $1602 = 0, $1603 = 0;
- var $1604 = 0, $1605 = 0, $1606 = 0, $1607 = 0, $1608 = 0, $1609 = 0, $161 = 0, $1610 = 0, $1611 = 0, $1612 = 0, $1613 = 0, $1614 = 0, $1615 = 0, $1616 = 0, $1617 = 0, $1618 = 0, $1619 = 0, $162 = 0, $1620 = 0, $1621 = 0;
- var $1622 = 0, $1623 = 0, $1624 = 0, $1625 = 0, $1626 = 0, $1627 = 0, $1628 = 0, $1629 = 0, $163 = 0, $1630 = 0, $1631 = 0, $1632 = 0, $1633 = 0, $1634 = 0, $1635 = 0, $1636 = 0, $1637 = 0, $1638 = 0, $1639 = 0, $164 = 0;
- var $1640 = 0, $1641 = 0, $1642 = 0, $1643 = 0, $1644 = 0, $1645 = 0, $1646 = 0, $1647 = 0, $1648 = 0, $1649 = 0, $165 = 0, $1650 = 0, $1651 = 0, $1652 = 0, $1653 = 0, $1654 = 0, $1655 = 0, $1656 = 0, $1657 = 0, $1658 = 0;
- var $1659 = 0, $166 = 0, $1660 = 0, $1661 = 0, $1662 = 0, $1663 = 0, $1664 = 0, $1665 = 0, $1666 = 0, $1667 = 0, $1668 = 0, $1669 = 0, $167 = 0, $1670 = 0, $1671 = 0, $1672 = 0, $1673 = 0, $1674 = 0, $1675 = 0, $1676 = 0;
- var $1677 = 0, $1678 = 0, $1679 = 0, $168 = 0, $1680 = 0, $1681 = 0, $1682 = 0, $1683 = 0, $1684 = 0, $1685 = 0, $1686 = 0, $1687 = 0, $1688 = 0, $1689 = 0, $169 = 0, $1690 = 0, $1691 = 0, $1692 = 0, $1693 = 0, $1694 = 0;
- var $1695 = 0, $1696 = 0, $1697 = 0, $1698 = 0, $1699 = 0, $17 = 0, $170 = 0, $1700 = 0, $1701 = 0, $1702 = 0, $1703 = 0, $1704 = 0, $1705 = 0, $1706 = 0, $1707 = 0, $1708 = 0, $1709 = 0, $171 = 0, $1710 = 0, $1711 = 0;
- var $1712 = 0, $1713 = 0, $1714 = 0, $1715 = 0, $1716 = 0, $1717 = 0, $1718 = 0, $1719 = 0, $172 = 0, $1720 = 0, $1721 = 0, $1722 = 0, $1723 = 0, $1724 = 0, $1725 = 0, $1726 = 0, $1727 = 0, $1728 = 0, $1729 = 0, $173 = 0;
- var $1730 = 0, $1731 = 0, $1732 = 0, $1733 = 0, $1734 = 0, $1735 = 0, $1736 = 0, $1737 = 0, $1738 = 0, $1739 = 0, $174 = 0, $1740 = 0, $1741 = 0, $1742 = 0, $1743 = 0, $1744 = 0, $1745 = 0, $1746 = 0, $1747 = 0, $1748 = 0;
- var $1749 = 0, $175 = 0, $1750 = 0, $1751 = 0, $1752 = 0, $1753 = 0, $1754 = 0, $1755 = 0, $1756 = 0, $1757 = 0, $1758 = 0, $1759 = 0, $176 = 0, $1760 = 0, $1761 = 0, $1762 = 0, $1763 = 0, $1764 = 0, $1765 = 0, $1766 = 0;
- var $1767 = 0, $1768 = 0, $1769 = 0, $177 = 0, $1770 = 0, $1771 = 0, $1772 = 0, $1773 = 0, $1774 = 0, $1775 = 0, $1776 = 0, $1777 = 0, $1778 = 0, $1779 = 0, $178 = 0, $1780 = 0, $1781 = 0, $1782 = 0, $1783 = 0, $1784 = 0;
- var $1785 = 0, $1786 = 0, $1787 = 0, $1788 = 0, $1789 = 0, $179 = 0, $1790 = 0, $1791 = 0, $1792 = 0, $1793 = 0, $1794 = 0, $1795 = 0, $1796 = 0, $1797 = 0, $1798 = 0, $1799 = 0, $18 = 0, $180 = 0, $1800 = 0, $1801 = 0;
- var $1802 = 0, $1803 = 0, $1804 = 0, $1805 = 0, $1806 = 0, $1807 = 0, $1808 = 0, $1809 = 0, $181 = 0, $1810 = 0, $1811 = 0, $1812 = 0, $1813 = 0, $1814 = 0, $1815 = 0, $1816 = 0, $1817 = 0, $1818 = 0, $1819 = 0, $182 = 0;
- var $1820 = 0, $1821 = 0, $1822 = 0, $1823 = 0, $1824 = 0, $1825 = 0, $1826 = 0, $1827 = 0, $1828 = 0, $1829 = 0, $183 = 0, $1830 = 0, $1831 = 0, $1832 = 0, $1833 = 0, $1834 = 0, $1835 = 0, $1836 = 0, $1837 = 0, $1838 = 0;
- var $1839 = 0, $184 = 0, $1840 = 0, $1841 = 0, $1842 = 0, $1843 = 0, $1844 = 0, $1845 = 0, $1846 = 0, $1847 = 0, $1848 = 0, $1849 = 0, $185 = 0, $1850 = 0, $1851 = 0, $1852 = 0, $1853 = 0, $1854 = 0, $1855 = 0, $1856 = 0;
- var $1857 = 0, $1858 = 0, $1859 = 0, $186 = 0, $1860 = 0, $1861 = 0, $1862 = 0, $1863 = 0, $1864 = 0, $1865 = 0, $1866 = 0, $1867 = 0, $1868 = 0, $1869 = 0, $187 = 0, $1870 = 0, $1871 = 0, $1872 = 0, $1873 = 0, $1874 = 0;
- var $1875 = 0, $1876 = 0, $1877 = 0, $1878 = 0, $1879 = 0, $188 = 0, $1880 = 0, $1881 = 0, $1882 = 0, $1883 = 0, $1884 = 0, $1885 = 0, $1886 = 0, $1887 = 0, $1888 = 0, $1889 = 0, $189 = 0, $1890 = 0, $1891 = 0, $1892 = 0;
- var $1893 = 0, $1894 = 0, $1895 = 0, $1896 = 0, $1897 = 0, $1898 = 0, $1899 = 0, $19 = 0, $190 = 0, $1900 = 0, $1901 = 0, $1902 = 0, $1903 = 0, $1904 = 0, $1905 = 0, $1906 = 0, $1907 = 0, $1908 = 0, $1909 = 0, $191 = 0;
- var $1910 = 0, $1911 = 0, $1912 = 0, $1913 = 0, $1914 = 0, $1915 = 0, $1916 = 0, $1917 = 0, $1918 = 0, $1919 = 0, $192 = 0, $1920 = 0, $1921 = 0, $1922 = 0, $1923 = 0, $1924 = 0, $1925 = 0, $1926 = 0, $1927 = 0, $1928 = 0;
- var $1929 = 0, $193 = 0, $1930 = 0.0, $1931 = 0.0, $1932 = 0.0, $1933 = 0, $1934 = 0, $1935 = 0, $1936 = 0, $1937 = 0, $1938 = 0, $1939 = 0, $194 = 0, $1940 = 0, $1941 = 0.0, $1942 = 0, $1943 = 0, $1944 = 0.0, $1945 = 0.0, $1946 = 0;
- var $1947 = 0, $1948 = 0.0, $1949 = 0, $195 = 0, $1950 = 0, $1951 = 0, $1952 = 0.0, $1953 = 0.0, $1954 = 0, $1955 = 0, $1956 = 0.0, $1957 = 0, $1958 = 0, $1959 = 0.0, $196 = 0, $1960 = 0.0, $1961 = 0, $1962 = 0, $1963 = 0, $1964 = 0;
- var $1965 = 0, $1966 = 0, $1967 = 0, $1968 = 0, $1969 = 0, $197 = 0, $1970 = 0, $1971 = 0, $1972 = 0, $1973 = 0, $1974 = 0, $1975 = 0, $1976 = 0, $1977 = 0, $1978 = 0, $1979 = 0, $198 = 0, $1980 = 0, $1981 = 0, $1982 = 0;
- var $1983 = 0, $1984 = 0, $1985 = 0, $1986 = 0, $1987 = 0, $1988 = 0, $1989 = 0, $199 = 0, $1990 = 0, $1991 = 0, $1992 = 0, $1993 = 0, $1994 = 0, $1995 = 0, $1996 = 0, $1997 = 0, $1998 = 0, $1999 = 0, $20 = 0, $200 = 0;
- var $2000 = 0, $2001 = 0.0, $2002 = 0.0, $2003 = 0.0, $2004 = 0, $2005 = 0, $2006 = 0, $2007 = 0, $2008 = 0, $2009 = 0, $201 = 0, $2010 = 0, $2011 = 0.0, $2012 = 0, $2013 = 0, $2014 = 0.0, $2015 = 0.0, $2016 = 0, $2017 = 0, $2018 = 0.0;
- var $2019 = 0, $202 = 0, $2020 = 0, $2021 = 0, $2022 = 0.0, $2023 = 0.0, $2024 = 0, $2025 = 0, $2026 = 0.0, $2027 = 0, $2028 = 0, $2029 = 0.0, $203 = 0, $2030 = 0.0, $2031 = 0, $2032 = 0, $2033 = 0, $2034 = 0, $2035 = 0, $2036 = 0;
- var $2037 = 0, $2038 = 0, $2039 = 0, $204 = 0, $2040 = 0, $2041 = 0, $2042 = 0, $2043 = 0, $2044 = 0, $2045 = 0, $2046 = 0, $2047 = 0, $2048 = 0, $2049 = 0, $205 = 0, $2050 = 0, $2051 = 0, $2052 = 0, $2053 = 0, $2054 = 0;
- var $2055 = 0, $2056 = 0, $2057 = 0, $2058 = 0, $2059 = 0, $206 = 0, $2060 = 0, $2061 = 0, $2062 = 0, $2063 = 0, $2064 = 0.0, $2065 = 0, $2066 = 0, $2067 = 0, $2068 = 0, $2069 = 0, $207 = 0, $2070 = 0.0, $2071 = 0, $2072 = 0;
- var $2073 = 0.0, $2074 = 0.0, $2075 = 0, $2076 = 0, $2077 = 0.0, $2078 = 0, $2079 = 0, $208 = 0, $2080 = 0, $2081 = 0.0, $2082 = 0.0, $2083 = 0, $2084 = 0, $2085 = 0.0, $2086 = 0, $2087 = 0, $2088 = 0.0, $2089 = 0.0, $209 = 0, $2090 = 0;
- var $2091 = 0, $2092 = 0, $2093 = 0, $2094 = 0, $2095 = 0, $2096 = 0, $2097 = 0, $2098 = 0, $2099 = 0, $21 = 0, $210 = 0, $2100 = 0, $2101 = 0, $2102 = 0, $2103 = 0, $2104 = 0, $2105 = 0, $2106 = 0, $2107 = 0, $2108 = 0;
- var $2109 = 0, $211 = 0, $2110 = 0, $2111 = 0, $2112 = 0, $2113 = 0, $2114 = 0, $2115 = 0, $2116 = 0.0, $2117 = 0.0, $2118 = 0.0, $2119 = 0, $212 = 0, $2120 = 0, $2121 = 0, $2122 = 0, $2123 = 0, $2124 = 0.0, $2125 = 0, $2126 = 0;
- var $2127 = 0.0, $2128 = 0.0, $2129 = 0, $213 = 0, $2130 = 0, $2131 = 0.0, $2132 = 0, $2133 = 0, $2134 = 0, $2135 = 0.0, $2136 = 0.0, $2137 = 0, $2138 = 0, $2139 = 0.0, $214 = 0, $2140 = 0, $2141 = 0, $2142 = 0.0, $2143 = 0.0, $2144 = 0;
- var $2145 = 0, $2146 = 0, $2147 = 0, $2148 = 0, $2149 = 0, $215 = 0, $2150 = 0, $2151 = 0, $2152 = 0, $2153 = 0, $2154 = 0, $2155 = 0, $2156 = 0, $2157 = 0, $2158 = 0, $2159 = 0, $216 = 0, $2160 = 0, $2161 = 0, $2162 = 0;
- var $2163 = 0.0, $2164 = 0.0, $2165 = 0.0, $2166 = 0, $2167 = 0, $2168 = 0, $2169 = 0, $217 = 0, $2170 = 0, $2171 = 0.0, $2172 = 0, $2173 = 0.0, $2174 = 0.0, $2175 = 0, $2176 = 0, $2177 = 0, $2178 = 0, $2179 = 0, $218 = 0, $2180 = 0;
- var $2181 = 0, $2182 = 0, $2183 = 0, $2184 = 0, $2185 = 0, $2186 = 0, $2187 = 0, $2188 = 0, $2189 = 0, $219 = 0, $2190 = 0, $2191 = 0, $2192 = 0, $2193 = 0, $2194 = 0, $2195 = 0, $2196 = 0, $2197 = 0, $2198 = 0, $2199 = 0;
- var $22 = 0, $220 = 0, $2200 = 0, $2201 = 0, $2202 = 0, $2203 = 0, $2204 = 0, $2205 = 0, $2206 = 0, $2207 = 0.0, $2208 = 0.0, $2209 = 0.0, $221 = 0, $2210 = 0, $2211 = 0, $2212 = 0, $2213 = 0.0, $2214 = 0.0, $2215 = 0.0, $2216 = 0;
- var $2217 = 0, $2218 = 0, $2219 = 0, $222 = 0, $2220 = 0, $2221 = 0, $2222 = 0, $2223 = 0, $2224 = 0, $2225 = 0, $2226 = 0, $2227 = 0, $2228 = 0, $2229 = 0, $223 = 0, $2230 = 0, $2231 = 0, $2232 = 0, $2233 = 0, $2234 = 0;
- var $2235 = 0, $2236 = 0, $2237 = 0, $2238 = 0, $2239 = 0, $224 = 0, $2240 = 0, $2241 = 0, $2242 = 0, $2243 = 0, $2244 = 0, $2245 = 0, $2246 = 0, $2247 = 0, $2248 = 0, $2249 = 0, $225 = 0, $2250 = 0, $2251 = 0, $2252 = 0;
- var $2253 = 0, $2254 = 0, $2255 = 0, $2256 = 0, $2257 = 0, $2258 = 0, $2259 = 0, $226 = 0, $2260 = 0, $2261 = 0, $2262 = 0, $2263 = 0, $2264 = 0, $2265 = 0, $2266 = 0.0, $2267 = 0, $2268 = 0, $2269 = 0.0, $227 = 0, $2270 = 0;
- var $2271 = 0, $2272 = 0, $2273 = 0.0, $2274 = 0, $2275 = 0, $2276 = 0, $2277 = 0.0, $2278 = 0, $2279 = 0, $228 = 0, $2280 = 0, $2281 = 0.0, $2282 = 0, $2283 = 0, $2284 = 0.0, $2285 = 0, $2286 = 0, $2287 = 0, $2288 = 0, $2289 = 0;
- var $229 = 0, $2290 = 0, $2291 = 0, $2292 = 0, $2293 = 0, $2294 = 0, $2295 = 0, $2296 = 0, $2297 = 0, $2298 = 0, $2299 = 0, $23 = 0, $230 = 0, $2300 = 0, $2301 = 0, $2302 = 0, $2303 = 0, $2304 = 0, $2305 = 0, $2306 = 0;
- var $2307 = 0, $2308 = 0, $2309 = 0, $231 = 0, $2310 = 0, $2311 = 0, $2312 = 0, $2313 = 0, $2314 = 0, $2315 = 0, $2316 = 0, $2317 = 0, $2318 = 0, $2319 = 0.0, $232 = 0, $2320 = 0, $2321 = 0, $2322 = 0.0, $2323 = 0, $2324 = 0;
- var $2325 = 0, $2326 = 0.0, $2327 = 0, $2328 = 0, $2329 = 0, $233 = 0, $2330 = 0.0, $2331 = 0, $2332 = 0, $2333 = 0, $2334 = 0.0, $2335 = 0, $2336 = 0, $2337 = 0.0, $2338 = 0, $2339 = 0, $234 = 0, $2340 = 0, $2341 = 0, $2342 = 0;
- var $2343 = 0, $2344 = 0, $2345 = 0, $2346 = 0, $2347 = 0, $2348 = 0, $2349 = 0, $235 = 0, $2350 = 0, $2351 = 0, $2352 = 0, $2353 = 0, $2354 = 0, $2355 = 0, $2356 = 0, $2357 = 0, $2358 = 0, $2359 = 0, $236 = 0, $2360 = 0;
- var $2361 = 0, $2362 = 0, $2363 = 0, $2364 = 0, $2365 = 0, $2366 = 0, $2367 = 0, $2368 = 0, $2369 = 0, $237 = 0, $2370 = 0, $2371 = 0, $2372 = 0.0, $2373 = 0, $2374 = 0, $2375 = 0.0, $2376 = 0, $2377 = 0, $2378 = 0, $2379 = 0.0;
- var $238 = 0, $2380 = 0, $2381 = 0, $2382 = 0, $2383 = 0.0, $2384 = 0, $2385 = 0, $2386 = 0, $2387 = 0.0, $2388 = 0, $2389 = 0, $239 = 0, $2390 = 0.0, $2391 = 0, $2392 = 0, $2393 = 0, $2394 = 0, $2395 = 0, $2396 = 0, $2397 = 0;
- var $2398 = 0, $2399 = 0, $24 = 0, $240 = 0, $2400 = 0, $2401 = 0, $2402 = 0, $2403 = 0, $2404 = 0, $2405 = 0, $2406 = 0, $2407 = 0, $2408 = 0, $2409 = 0, $241 = 0, $2410 = 0, $2411 = 0, $2412 = 0, $2413 = 0, $2414 = 0;
- var $2415 = 0, $2416 = 0, $2417 = 0, $2418 = 0, $2419 = 0, $242 = 0, $2420 = 0, $2421 = 0, $2422 = 0, $2423 = 0, $2424 = 0, $2425 = 0.0, $2426 = 0, $2427 = 0, $2428 = 0.0, $2429 = 0, $243 = 0, $2430 = 0, $2431 = 0, $2432 = 0.0;
- var $2433 = 0, $2434 = 0, $2435 = 0, $2436 = 0.0, $2437 = 0, $2438 = 0, $2439 = 0, $244 = 0, $2440 = 0.0, $2441 = 0, $2442 = 0, $2443 = 0.0, $2444 = 0, $2445 = 0, $2446 = 0, $2447 = 0, $2448 = 0, $2449 = 0, $245 = 0, $2450 = 0;
- var $2451 = 0, $2452 = 0, $2453 = 0, $2454 = 0, $2455 = 0, $2456 = 0, $2457 = 0, $2458 = 0, $2459 = 0, $246 = 0, $2460 = 0, $2461 = 0, $2462 = 0, $2463 = 0, $2464 = 0, $2465 = 0, $2466 = 0, $2467 = 0, $2468 = 0, $2469 = 0;
- var $247 = 0, $2470 = 0, $2471 = 0, $2472 = 0, $2473 = 0, $2474 = 0, $2475 = 0, $2476 = 0, $2477 = 0, $2478 = 0.0, $2479 = 0, $248 = 0, $2480 = 0, $2481 = 0.0, $2482 = 0, $2483 = 0, $2484 = 0, $2485 = 0.0, $2486 = 0, $2487 = 0;
- var $2488 = 0, $2489 = 0.0, $249 = 0, $2490 = 0, $2491 = 0, $2492 = 0, $2493 = 0.0, $2494 = 0, $2495 = 0, $2496 = 0.0, $2497 = 0, $2498 = 0, $2499 = 0, $25 = 0, $250 = 0, $2500 = 0, $2501 = 0, $2502 = 0, $2503 = 0, $2504 = 0;
- var $2505 = 0, $2506 = 0, $2507 = 0, $2508 = 0, $2509 = 0, $251 = 0, $2510 = 0, $2511 = 0, $2512 = 0, $2513 = 0, $2514 = 0, $2515 = 0, $2516 = 0, $2517 = 0, $2518 = 0, $2519 = 0, $252 = 0, $2520 = 0, $2521 = 0, $2522 = 0;
- var $2523 = 0, $2524 = 0, $2525 = 0, $2526 = 0, $2527 = 0, $2528 = 0, $2529 = 0, $253 = 0, $2530 = 0, $2531 = 0, $2532 = 0, $2533 = 0, $2534 = 0, $2535 = 0, $2536 = 0, $2537 = 0, $2538 = 0, $2539 = 0, $254 = 0, $2540 = 0;
- var $2541 = 0, $2542 = 0, $2543 = 0, $2544 = 0, $2545 = 0, $2546 = 0, $2547 = 0, $2548 = 0, $2549 = 0, $255 = 0, $2550 = 0, $2551 = 0, $2552 = 0, $2553 = 0, $2554 = 0, $2555 = 0, $2556 = 0, $2557 = 0, $2558 = 0, $2559 = 0;
- var $256 = 0, $2560 = 0, $2561 = 0, $2562 = 0, $2563 = 0, $2564 = 0, $2565 = 0, $2566 = 0, $2567 = 0, $2568 = 0, $2569 = 0, $257 = 0, $2570 = 0, $2571 = 0, $2572 = 0, $2573 = 0, $2574 = 0, $2575 = 0, $2576 = 0, $2577 = 0;
- var $2578 = 0, $2579 = 0, $258 = 0, $2580 = 0, $2581 = 0, $2582 = 0, $2583 = 0, $2584 = 0, $2585 = 0, $2586 = 0, $2587 = 0, $2588 = 0, $2589 = 0, $259 = 0, $2590 = 0, $2591 = 0, $2592 = 0, $2593 = 0, $2594 = 0, $2595 = 0;
- var $2596 = 0, $2597 = 0, $2598 = 0, $2599 = 0, $26 = 0, $260 = 0, $2600 = 0, $2601 = 0, $2602 = 0, $2603 = 0, $2604 = 0, $2605 = 0, $2606 = 0, $2607 = 0, $2608 = 0, $2609 = 0, $261 = 0, $2610 = 0, $2611 = 0, $2612 = 0;
- var $2613 = 0, $2614 = 0, $2615 = 0, $2616 = 0, $2617 = 0, $2618 = 0, $2619 = 0, $262 = 0, $2620 = 0, $2621 = 0, $2622 = 0, $2623 = 0, $2624 = 0, $2625 = 0, $2626 = 0, $2627 = 0, $2628 = 0, $2629 = 0, $263 = 0, $2630 = 0;
- var $2631 = 0, $2632 = 0, $2633 = 0, $2634 = 0, $2635 = 0, $2636 = 0, $2637 = 0, $2638 = 0, $2639 = 0, $264 = 0, $2640 = 0, $2641 = 0, $2642 = 0, $2643 = 0, $2644 = 0, $2645 = 0, $2646 = 0, $2647 = 0, $2648 = 0, $2649 = 0;
- var $265 = 0, $2650 = 0, $2651 = 0, $2652 = 0, $2653 = 0, $2654 = 0, $2655 = 0, $2656 = 0, $2657 = 0, $2658 = 0, $2659 = 0, $266 = 0, $2660 = 0, $2661 = 0, $2662 = 0, $2663 = 0, $2664 = 0, $2665 = 0, $2666 = 0, $2667 = 0;
- var $2668 = 0, $2669 = 0, $267 = 0, $2670 = 0, $2671 = 0, $2672 = 0, $2673 = 0, $2674 = 0, $2675 = 0, $2676 = 0, $2677 = 0, $2678 = 0, $2679 = 0, $268 = 0, $2680 = 0, $2681 = 0, $2682 = 0, $2683 = 0, $2684 = 0, $2685 = 0;
- var $2686 = 0, $2687 = 0, $2688 = 0, $2689 = 0, $269 = 0, $2690 = 0, $2691 = 0, $2692 = 0, $2693 = 0, $2694 = 0, $2695 = 0, $2696 = 0, $2697 = 0, $2698 = 0, $2699 = 0, $27 = 0, $270 = 0, $2700 = 0, $2701 = 0, $2702 = 0;
- var $2703 = 0, $2704 = 0, $2705 = 0, $2706 = 0, $2707 = 0, $2708 = 0, $2709 = 0, $271 = 0, $2710 = 0, $2711 = 0, $2712 = 0, $2713 = 0, $2714 = 0, $2715 = 0, $2716 = 0, $2717 = 0, $2718 = 0, $2719 = 0, $272 = 0, $2720 = 0;
- var $2721 = 0, $2722 = 0, $2723 = 0, $2724 = 0, $2725 = 0, $2726 = 0, $2727 = 0, $2728 = 0, $2729 = 0, $273 = 0, $2730 = 0, $2731 = 0, $2732 = 0, $2733 = 0, $2734 = 0, $2735 = 0, $2736 = 0, $2737 = 0, $2738 = 0, $2739 = 0;
- var $274 = 0, $2740 = 0, $2741 = 0, $2742 = 0, $2743 = 0, $2744 = 0, $2745 = 0, $2746 = 0, $2747 = 0, $2748 = 0, $2749 = 0, $275 = 0, $2750 = 0, $2751 = 0, $2752 = 0, $2753 = 0, $2754 = 0, $2755 = 0, $2756 = 0, $2757 = 0;
- var $2758 = 0, $2759 = 0, $276 = 0, $2760 = 0, $2761 = 0, $2762 = 0, $2763 = 0, $2764 = 0, $2765 = 0, $2766 = 0, $2767 = 0, $2768 = 0, $2769 = 0, $277 = 0, $2770 = 0, $2771 = 0, $2772 = 0, $2773 = 0, $2774 = 0, $2775 = 0;
- var $2776 = 0, $2777 = 0, $2778 = 0, $2779 = 0, $278 = 0, $2780 = 0, $2781 = 0, $2782 = 0, $2783 = 0, $2784 = 0, $2785 = 0, $2786 = 0, $2787 = 0, $2788 = 0, $2789 = 0, $279 = 0, $2790 = 0, $2791 = 0, $2792 = 0, $2793 = 0;
- var $2794 = 0, $2795 = 0, $2796 = 0, $2797 = 0, $2798 = 0, $2799 = 0, $28 = 0, $280 = 0, $2800 = 0, $2801 = 0, $2802 = 0, $2803 = 0, $2804 = 0, $2805 = 0, $2806 = 0, $2807 = 0, $2808 = 0, $2809 = 0, $281 = 0, $2810 = 0;
- var $2811 = 0, $2812 = 0, $2813 = 0, $2814 = 0, $2815 = 0, $2816 = 0, $2817 = 0, $2818 = 0, $2819 = 0, $282 = 0, $2820 = 0, $2821 = 0, $2822 = 0, $2823 = 0, $2824 = 0, $2825 = 0, $2826 = 0, $2827 = 0, $2828 = 0, $2829 = 0;
- var $283 = 0, $2830 = 0, $2831 = 0, $2832 = 0, $2833 = 0, $2834 = 0, $2835 = 0, $2836 = 0, $2837 = 0, $2838 = 0, $2839 = 0, $284 = 0, $2840 = 0, $2841 = 0, $2842 = 0, $2843 = 0, $2844 = 0, $2845 = 0, $2846 = 0, $2847 = 0;
- var $2848 = 0, $2849 = 0, $285 = 0, $2850 = 0, $2851 = 0, $2852 = 0, $2853 = 0, $2854 = 0, $2855 = 0, $2856 = 0, $2857 = 0, $2858 = 0, $2859 = 0, $286 = 0, $2860 = 0, $2861 = 0, $2862 = 0, $2863 = 0, $2864 = 0, $2865 = 0;
- var $2866 = 0, $2867 = 0, $2868 = 0, $2869 = 0, $287 = 0, $2870 = 0, $2871 = 0, $2872 = 0, $2873 = 0, $2874 = 0, $2875 = 0, $2876 = 0, $2877 = 0, $2878 = 0, $2879 = 0, $288 = 0, $2880 = 0, $2881 = 0, $2882 = 0, $2883 = 0;
- var $2884 = 0, $2885 = 0, $2886 = 0, $2887 = 0, $2888 = 0, $2889 = 0, $289 = 0, $2890 = 0, $2891 = 0, $2892 = 0, $2893 = 0, $2894 = 0, $2895 = 0, $2896 = 0, $2897 = 0, $2898 = 0, $2899 = 0, $29 = 0, $290 = 0, $2900 = 0;
- var $2901 = 0, $2902 = 0, $2903 = 0, $2904 = 0, $2905 = 0, $2906 = 0, $2907 = 0, $2908 = 0, $2909 = 0, $291 = 0, $2910 = 0, $2911 = 0, $2912 = 0, $2913 = 0, $2914 = 0, $2915 = 0, $2916 = 0, $2917 = 0, $2918 = 0, $2919 = 0;
- var $292 = 0, $2920 = 0, $2921 = 0, $2922 = 0, $2923 = 0, $2924 = 0, $2925 = 0, $2926 = 0, $2927 = 0, $2928 = 0, $2929 = 0, $293 = 0, $2930 = 0, $2931 = 0, $2932 = 0, $2933 = 0, $2934 = 0, $2935 = 0, $2936 = 0, $2937 = 0;
- var $2938 = 0, $2939 = 0, $294 = 0, $2940 = 0, $2941 = 0, $2942 = 0, $2943 = 0, $2944 = 0, $2945 = 0, $2946 = 0, $2947 = 0, $2948 = 0, $2949 = 0, $295 = 0, $2950 = 0, $2951 = 0, $2952 = 0, $2953 = 0, $2954 = 0, $2955 = 0;
- var $2956 = 0, $2957 = 0, $2958 = 0, $2959 = 0, $296 = 0, $2960 = 0, $2961 = 0, $2962 = 0, $2963 = 0, $2964 = 0, $2965 = 0, $2966 = 0, $2967 = 0, $2968 = 0, $2969 = 0, $297 = 0, $2970 = 0, $2971 = 0, $2972 = 0, $2973 = 0;
- var $2974 = 0, $2975 = 0, $2976 = 0, $2977 = 0, $2978 = 0, $2979 = 0, $298 = 0, $2980 = 0, $2981 = 0, $2982 = 0, $2983 = 0, $2984 = 0, $2985 = 0, $2986 = 0, $2987 = 0, $2988 = 0, $2989 = 0, $299 = 0, $2990 = 0, $2991 = 0;
- var $2992 = 0, $2993 = 0, $2994 = 0, $2995 = 0, $2996 = 0, $2997 = 0, $2998 = 0, $2999 = 0, $30 = 0, $300 = 0, $3000 = 0, $3001 = 0, $3002 = 0, $3003 = 0, $3004 = 0, $3005 = 0, $3006 = 0, $3007 = 0, $3008 = 0, $3009 = 0;
- var $301 = 0, $3010 = 0, $3011 = 0, $3012 = 0, $3013 = 0, $3014 = 0, $3015 = 0, $3016 = 0, $3017 = 0, $3018 = 0, $3019 = 0, $302 = 0, $3020 = 0, $3021 = 0, $3022 = 0, $3023 = 0, $3024 = 0, $3025 = 0, $3026 = 0, $3027 = 0;
- var $3028 = 0, $3029 = 0, $303 = 0, $3030 = 0, $3031 = 0, $3032 = 0, $3033 = 0, $3034 = 0, $3035 = 0, $3036 = 0, $3037 = 0, $3038 = 0, $3039 = 0, $304 = 0, $3040 = 0, $3041 = 0, $3042 = 0, $3043 = 0, $3044 = 0, $3045 = 0;
- var $3046 = 0, $3047 = 0, $3048 = 0, $3049 = 0, $305 = 0, $3050 = 0, $3051 = 0, $3052 = 0, $3053 = 0, $3054 = 0, $3055 = 0, $3056 = 0, $3057 = 0, $3058 = 0, $3059 = 0, $306 = 0, $3060 = 0, $3061 = 0, $3062 = 0, $3063 = 0;
- var $3064 = 0, $3065 = 0, $3066 = 0, $3067 = 0, $3068 = 0, $3069 = 0, $307 = 0, $3070 = 0, $3071 = 0, $3072 = 0, $308 = 0, $309 = 0, $31 = 0, $310 = 0, $311 = 0, $312 = 0, $313 = 0, $314 = 0, $315 = 0, $316 = 0;
- var $317 = 0, $318 = 0, $319 = 0, $32 = 0, $320 = 0, $321 = 0, $322 = 0, $323 = 0, $324 = 0, $325 = 0, $326 = 0, $327 = 0, $328 = 0, $329 = 0, $33 = 0, $330 = 0, $331 = 0, $332 = 0, $333 = 0, $334 = 0;
- var $335 = 0, $336 = 0, $337 = 0, $338 = 0, $339 = 0, $34 = 0, $340 = 0, $341 = 0, $342 = 0, $343 = 0, $344 = 0, $345 = 0, $346 = 0, $347 = 0, $348 = 0, $349 = 0, $35 = 0, $350 = 0, $351 = 0, $352 = 0;
- var $353 = 0, $354 = 0, $355 = 0, $356 = 0, $357 = 0, $358 = 0, $359 = 0, $36 = 0, $360 = 0, $361 = 0, $362 = 0, $363 = 0, $364 = 0, $365 = 0, $366 = 0, $367 = 0, $368 = 0, $369 = 0, $37 = 0, $370 = 0;
- var $371 = 0, $372 = 0, $373 = 0, $374 = 0, $375 = 0, $376 = 0, $377 = 0, $378 = 0, $379 = 0, $38 = 0, $380 = 0, $381 = 0, $382 = 0, $383 = 0, $384 = 0, $385 = 0, $386 = 0, $387 = 0, $388 = 0, $389 = 0;
- var $39 = 0, $390 = 0, $391 = 0, $392 = 0, $393 = 0, $394 = 0, $395 = 0, $396 = 0, $397 = 0, $398 = 0, $399 = 0, $40 = 0, $400 = 0, $401 = 0, $402 = 0, $403 = 0, $404 = 0, $405 = 0, $406 = 0, $407 = 0;
- var $408 = 0, $409 = 0, $41 = 0, $410 = 0, $411 = 0, $412 = 0, $413 = 0, $414 = 0, $415 = 0, $416 = 0, $417 = 0, $418 = 0, $419 = 0, $42 = 0, $420 = 0, $421 = 0, $422 = 0, $423 = 0, $424 = 0, $425 = 0;
- var $426 = 0, $427 = 0, $428 = 0, $429 = 0, $43 = 0, $430 = 0, $431 = 0, $432 = 0, $433 = 0, $434 = 0, $435 = 0, $436 = 0, $437 = 0, $438 = 0, $439 = 0, $44 = 0, $440 = 0, $441 = 0, $442 = 0, $443 = 0;
- var $444 = 0, $445 = 0, $446 = 0, $447 = 0, $448 = 0, $449 = 0, $45 = 0, $450 = 0, $451 = 0, $452 = 0, $453 = 0, $454 = 0, $455 = 0, $456 = 0, $457 = 0, $458 = 0, $459 = 0, $46 = 0, $460 = 0, $461 = 0;
- var $462 = 0, $463 = 0, $464 = 0, $465 = 0, $466 = 0, $467 = 0, $468 = 0, $469 = 0, $47 = 0, $470 = 0, $471 = 0, $472 = 0, $473 = 0, $474 = 0, $475 = 0, $476 = 0, $477 = 0, $478 = 0, $479 = 0, $48 = 0;
- var $480 = 0, $481 = 0, $482 = 0, $483 = 0, $484 = 0, $485 = 0, $486 = 0, $487 = 0, $488 = 0, $489 = 0, $49 = 0, $490 = 0, $491 = 0, $492 = 0, $493 = 0, $494 = 0, $495 = 0, $496 = 0, $497 = 0, $498 = 0;
- var $499 = 0, $5 = 0, $50 = 0, $500 = 0, $501 = 0, $502 = 0, $503 = 0, $504 = 0, $505 = 0, $506 = 0, $507 = 0, $508 = 0, $509 = 0, $51 = 0, $510 = 0, $511 = 0, $512 = 0, $513 = 0, $514 = 0, $515 = 0;
- var $516 = 0, $517 = 0, $518 = 0, $519 = 0, $52 = 0, $520 = 0, $521 = 0, $522 = 0, $523 = 0, $524 = 0, $525 = 0, $526 = 0, $527 = 0, $528 = 0, $529 = 0, $53 = 0, $530 = 0, $531 = 0, $532 = 0, $533 = 0;
- var $534 = 0, $535 = 0, $536 = 0, $537 = 0, $538 = 0, $539 = 0, $54 = 0, $540 = 0, $541 = 0, $542 = 0, $543 = 0, $544 = 0, $545 = 0, $546 = 0, $547 = 0, $548 = 0, $549 = 0, $55 = 0, $550 = 0, $551 = 0;
- var $552 = 0, $553 = 0, $554 = 0, $555 = 0, $556 = 0, $557 = 0, $558 = 0, $559 = 0, $56 = 0, $560 = 0, $561 = 0, $562 = 0, $563 = 0, $564 = 0, $565 = 0, $566 = 0, $567 = 0, $568 = 0, $569 = 0, $57 = 0;
- var $570 = 0, $571 = 0, $572 = 0, $573 = 0, $574 = 0, $575 = 0, $576 = 0, $577 = 0, $578 = 0, $579 = 0, $58 = 0, $580 = 0, $581 = 0, $582 = 0, $583 = 0, $584 = 0, $585 = 0, $586 = 0, $587 = 0, $588 = 0;
- var $589 = 0, $59 = 0, $590 = 0, $591 = 0, $592 = 0, $593 = 0, $594 = 0, $595 = 0, $596 = 0, $597 = 0, $598 = 0, $599 = 0, $6 = 0, $60 = 0, $600 = 0, $601 = 0, $602 = 0, $603 = 0, $604 = 0, $605 = 0;
- var $606 = 0, $607 = 0, $608 = 0, $609 = 0, $61 = 0, $610 = 0, $611 = 0, $612 = 0, $613 = 0, $614 = 0, $615 = 0, $616 = 0, $617 = 0, $618 = 0, $619 = 0, $62 = 0, $620 = 0, $621 = 0, $622 = 0, $623 = 0;
- var $624 = 0, $625 = 0, $626 = 0, $627 = 0, $628 = 0, $629 = 0, $63 = 0, $630 = 0, $631 = 0, $632 = 0, $633 = 0, $634 = 0, $635 = 0, $636 = 0, $637 = 0, $638 = 0, $639 = 0, $64 = 0, $640 = 0, $641 = 0;
- var $642 = 0, $643 = 0, $644 = 0, $645 = 0, $646 = 0, $647 = 0, $648 = 0, $649 = 0, $65 = 0, $650 = 0, $651 = 0, $652 = 0, $653 = 0, $654 = 0, $655 = 0, $656 = 0, $657 = 0, $658 = 0, $659 = 0, $66 = 0;
- var $660 = 0, $661 = 0, $662 = 0, $663 = 0, $664 = 0, $665 = 0, $666 = 0, $667 = 0, $668 = 0, $669 = 0, $67 = 0, $670 = 0, $671 = 0, $672 = 0, $673 = 0, $674 = 0, $675 = 0, $676 = 0, $677 = 0, $678 = 0;
- var $679 = 0, $68 = 0, $680 = 0, $681 = 0, $682 = 0, $683 = 0, $684 = 0, $685 = 0, $686 = 0, $687 = 0, $688 = 0, $689 = 0, $69 = 0, $690 = 0, $691 = 0, $692 = 0, $693 = 0, $694 = 0, $695 = 0, $696 = 0;
- var $697 = 0, $698 = 0, $699 = 0, $7 = 0, $70 = 0, $700 = 0, $701 = 0, $702 = 0, $703 = 0, $704 = 0, $705 = 0, $706 = 0, $707 = 0, $708 = 0, $709 = 0, $71 = 0, $710 = 0, $711 = 0, $712 = 0, $713 = 0;
- var $714 = 0, $715 = 0, $716 = 0, $717 = 0, $718 = 0, $719 = 0, $72 = 0, $720 = 0, $721 = 0, $722 = 0, $723 = 0, $724 = 0, $725 = 0, $726 = 0, $727 = 0, $728 = 0, $729 = 0, $73 = 0, $730 = 0, $731 = 0;
- var $732 = 0, $733 = 0, $734 = 0, $735 = 0, $736 = 0, $737 = 0, $738 = 0, $739 = 0, $74 = 0, $740 = 0, $741 = 0, $742 = 0, $743 = 0, $744 = 0, $745 = 0, $746 = 0, $747 = 0, $748 = 0, $749 = 0, $75 = 0;
- var $750 = 0, $751 = 0, $752 = 0, $753 = 0, $754 = 0, $755 = 0, $756 = 0, $757 = 0, $758 = 0, $759 = 0, $76 = 0, $760 = 0, $761 = 0, $762 = 0, $763 = 0, $764 = 0, $765 = 0, $766 = 0, $767 = 0, $768 = 0;
- var $769 = 0, $77 = 0, $770 = 0, $771 = 0, $772 = 0, $773 = 0, $774 = 0, $775 = 0, $776 = 0, $777 = 0, $778 = 0, $779 = 0, $78 = 0, $780 = 0, $781 = 0, $782 = 0, $783 = 0, $784 = 0, $785 = 0, $786 = 0;
- var $787 = 0, $788 = 0, $789 = 0, $79 = 0, $790 = 0, $791 = 0, $792 = 0, $793 = 0, $794 = 0, $795 = 0, $796 = 0, $797 = 0, $798 = 0, $799 = 0, $8 = 0, $80 = 0, $800 = 0, $801 = 0, $802 = 0, $803 = 0;
- var $804 = 0, $805 = 0, $806 = 0, $807 = 0, $808 = 0, $809 = 0, $81 = 0, $810 = 0, $811 = 0, $812 = 0, $813 = 0, $814 = 0, $815 = 0, $816 = 0, $817 = 0, $818 = 0, $819 = 0, $82 = 0, $820 = 0, $821 = 0;
- var $822 = 0, $823 = 0, $824 = 0, $825 = 0, $826 = 0, $827 = 0, $828 = 0, $829 = 0, $83 = 0, $830 = 0, $831 = 0, $832 = 0, $833 = 0, $834 = 0, $835 = 0, $836 = 0, $837 = 0, $838 = 0, $839 = 0, $84 = 0;
- var $840 = 0, $841 = 0, $842 = 0, $843 = 0, $844 = 0, $845 = 0, $846 = 0, $847 = 0, $848 = 0, $849 = 0, $85 = 0, $850 = 0, $851 = 0, $852 = 0, $853 = 0, $854 = 0, $855 = 0, $856 = 0, $857 = 0, $858 = 0;
- var $859 = 0, $86 = 0, $860 = 0, $861 = 0, $862 = 0, $863 = 0, $864 = 0, $865 = 0, $866 = 0, $867 = 0, $868 = 0, $869 = 0, $87 = 0, $870 = 0, $871 = 0, $872 = 0, $873 = 0, $874 = 0, $875 = 0, $876 = 0;
- var $877 = 0, $878 = 0, $879 = 0, $88 = 0, $880 = 0, $881 = 0, $882 = 0, $883 = 0, $884 = 0, $885 = 0, $886 = 0, $887 = 0, $888 = 0, $889 = 0, $89 = 0, $890 = 0, $891 = 0, $892 = 0, $893 = 0, $894 = 0;
- var $895 = 0, $896 = 0, $897 = 0, $898 = 0, $899 = 0, $9 = 0, $90 = 0, $900 = 0, $901 = 0, $902 = 0, $903 = 0, $904 = 0, $905 = 0, $906 = 0, $907 = 0, $908 = 0, $909 = 0, $91 = 0, $910 = 0, $911 = 0;
- var $912 = 0, $913 = 0, $914 = 0, $915 = 0, $916 = 0, $917 = 0, $918 = 0, $919 = 0, $92 = 0, $920 = 0, $921 = 0, $922 = 0, $923 = 0, $924 = 0, $925 = 0, $926 = 0, $927 = 0, $928 = 0, $929 = 0, $93 = 0;
- var $930 = 0, $931 = 0, $932 = 0, $933 = 0, $934 = 0, $935 = 0, $936 = 0, $937 = 0, $938 = 0, $939 = 0, $94 = 0, $940 = 0, $941 = 0, $942 = 0, $943 = 0, $944 = 0, $945 = 0, $946 = 0, $947 = 0, $948 = 0;
- var $949 = 0, $95 = 0, $950 = 0, $951 = 0, $952 = 0, $953 = 0, $954 = 0, $955 = 0, $956 = 0, $957 = 0, $958 = 0, $959 = 0, $96 = 0, $960 = 0, $961 = 0, $962 = 0, $963 = 0, $964 = 0, $965 = 0, $966 = 0;
- var $967 = 0, $968 = 0, $969 = 0, $97 = 0, $970 = 0, $971 = 0, $972 = 0, $973 = 0, $974 = 0, $975 = 0, $976 = 0, $977 = 0, $978 = 0, $979 = 0, $98 = 0, $980 = 0, $981 = 0, $982 = 0, $983 = 0, $984 = 0;
- var $985 = 0, $986 = 0, $987 = 0, $988 = 0, $989 = 0, $99 = 0, $990 = 0, $991 = 0, $992 = 0, $993 = 0, $994 = 0, $995 = 0, $996 = 0, $997 = 0, $998 = 0, $999 = 0, $cond = 0, $cond1240 = 0, $cond1241 = 0, $cond1242 = 0;
- var $cond1243 = 0, $cond1244 = 0, $cond1245 = 0, $cond1246 = 0, $cond1247 = 0, $cond1248 = 0, $cond1249 = 0, $cond1250 = 0, $cond1251 = 0, $cond1252 = 0, $cond1253 = 0, $cond1254 = 0, $cond1255 = 0, $cond1256 = 0, $cond1257 = 0, $cond1258 = 0, $cond1259 = 0, $cond1260 = 0, $cond1261 = 0, $cond1262 = 0;
- var $cond1263 = 0, $cond1264 = 0, $cond1265 = 0, $cond1266 = 0, $cond1267 = 0, $cond1268 = 0, $cond1269 = 0, $cond1270 = 0, $cond1271 = 0, $cond1272 = 0, $cond1273 = 0, $cond1274 = 0, $cond1275 = 0, $cond1276 = 0, $cond1277 = 0, $cond1278 = 0, $cond1279 = 0, $cond1280 = 0, $cond1281 = 0, $cond1282 = 0;
- var $cond1283 = 0, $cond1284 = 0, $cond1285 = 0, $cond1286 = 0, $cond1287 = 0, $cond1288 = 0, $cond1289 = 0, $cond1290 = 0, $cond1291 = 0, $cond1292 = 0, $cond1293 = 0, $cond1294 = 0, $cond1295 = 0, $cond1296 = 0, $cond1297 = 0, $cond1298 = 0, $cond1299 = 0, $cond1300 = 0, $cond1301 = 0, $cond1302 = 0;
- var $cond1303 = 0, $cond1304 = 0, $cond1305 = 0, $cond1306 = 0, $cond1307 = 0, $cond1308 = 0, $cond1309 = 0, $cond1310 = 0, $cond1311 = 0, $cond1312 = 0, $cond1313 = 0, $cond1314 = 0, $cond1315 = 0, $cond1316 = 0, $cond1317 = 0, $cond1318 = 0, $cond1319 = 0, $cond1320 = 0, $cond1321 = 0, $cond1322 = 0;
- var $cond1323 = 0, $cond1324 = 0, $cond1325 = 0, $cond1326 = 0, $cond1327 = 0, $cond1328 = 0, $cond1329 = 0, $cond1330 = 0, $cond1331 = 0, $cond1332 = 0, $cond1333 = 0, $cond1334 = 0, $cond1335 = 0, $cond1336 = 0, $cond1337 = 0, $cond1338 = 0, $cond1339 = 0, $cond1340 = 0, $cond1341 = 0, $cond1342 = 0;
- var $cond1343 = 0, $cond1344 = 0, $cond1345 = 0, $cond1346 = 0, $cond1347 = 0, $cond1348 = 0, $cond1349 = 0, $cond1350 = 0, $cond1351 = 0, $cond1352 = 0, $cond1353 = 0, $cond1354 = 0, $cond1355 = 0, $cond1356 = 0, $cond1357 = 0, $cond1358 = 0, $cond1359 = 0, $cond1360 = 0, $cond1361 = 0, $cond1362 = 0;
- var $cond1363 = 0, $cond1364 = 0, $cond1365 = 0, $cond1366 = 0, $cond1367 = 0, $cond1368 = 0, $cond1369 = 0, $cond1370 = 0, $cond1371 = 0, $cond1372 = 0, $cond1373 = 0, $cond1374 = 0, $cond1375 = 0, $cond1376 = 0, $cond1377 = 0, $cond1378 = 0, $cond1379 = 0, $cond1380 = 0, $cond1381 = 0, $cond1382 = 0;
- var $cond1383 = 0, $cond1384 = 0, $cond1385 = 0, $cond1386 = 0, $cond1387 = 0, $cond1388 = 0, $cond1389 = 0, $cond1390 = 0, $cond1391 = 0, $cond1392 = 0, $cond1393 = 0, $cond1394 = 0, $cond1395 = 0, $cond1396 = 0, $cond1397 = 0, $cond1398 = 0, $cond1399 = 0, $cond1400 = 0, $cond1401 = 0, $indirectbr_cast = 0;
- var $or$cond = 0, $or$cond16 = 0, $vararg_buffer = 0, $vararg_ptr1095 = 0, $vararg_ptr1096 = 0, _setjmpTable = 0, _setjmpTableSize = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 1328|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(1328|0);
- $$byval_copy1156 = sp + 1312|0;
- $$byval_copy1155 = sp + 1304|0;
- $$byval_copy1154 = sp + 1296|0;
- $$byval_copy1153 = sp + 1288|0;
- $$byval_copy1152 = sp + 1280|0;
- $$byval_copy1151 = sp + 1272|0;
- $$byval_copy1150 = sp + 1264|0;
- $$byval_copy1149 = sp + 1256|0;
- $$byval_copy1148 = sp + 1248|0;
- $$byval_copy1147 = sp + 1240|0;
- $$byval_copy1146 = sp + 1232|0;
- $$byval_copy1145 = sp + 1224|0;
- $$byval_copy1144 = sp + 1216|0;
- $$byval_copy1143 = sp + 1208|0;
- $$byval_copy1142 = sp + 1200|0;
- $$byval_copy1141 = sp + 1192|0;
- $$byval_copy1140 = sp + 1184|0;
- $$byval_copy1139 = sp + 1176|0;
- $$byval_copy1138 = sp + 1168|0;
- $$byval_copy1137 = sp + 1160|0;
- $$byval_copy1136 = sp + 1152|0;
- $$byval_copy1135 = sp + 1144|0;
- $$byval_copy1134 = sp + 1136|0;
- $$byval_copy1133 = sp + 1128|0;
- $$byval_copy1132 = sp + 1120|0;
- $$byval_copy1131 = sp + 1112|0;
- $$byval_copy1130 = sp + 1104|0;
- $$byval_copy1129 = sp + 1096|0;
- $$byval_copy1128 = sp + 1088|0;
- $$byval_copy1127 = sp + 1080|0;
- $$byval_copy1126 = sp + 1072|0;
- $$byval_copy1125 = sp + 1064|0;
- $$byval_copy1124 = sp + 1056|0;
- $$byval_copy1123 = sp + 1048|0;
- $$byval_copy1122 = sp + 1040|0;
- $$byval_copy1121 = sp + 1032|0;
- $$byval_copy1120 = sp + 1024|0;
- $$byval_copy1119 = sp + 1016|0;
- $$byval_copy1118 = sp + 1008|0;
- $$byval_copy1117 = sp + 1000|0;
- $$byval_copy1116 = sp + 992|0;
- $$byval_copy1115 = sp + 984|0;
- $$byval_copy1114 = sp + 976|0;
- $$byval_copy1113 = sp + 968|0;
- $$byval_copy1112 = sp + 960|0;
- $$byval_copy1111 = sp + 952|0;
- $$byval_copy1110 = sp + 944|0;
- $$byval_copy1109 = sp + 936|0;
- $$byval_copy1108 = sp + 928|0;
- $$byval_copy1107 = sp + 920|0;
- $$byval_copy1106 = sp + 912|0;
- $$byval_copy1105 = sp + 904|0;
- $$byval_copy1104 = sp + 896|0;
- $$byval_copy1103 = sp + 888|0;
- $$byval_copy1102 = sp + 880|0;
- $$byval_copy1101 = sp + 872|0;
- $$byval_copy1100 = sp + 864|0;
- $$byval_copy1099 = sp + 856|0;
- $$byval_copy1098 = sp + 848|0;
- $$byval_copy1097 = sp + 840|0;
- $$byval_copy = sp + 832|0;
- $vararg_buffer = sp;
- _setjmpTableSize = 4;_setjmpTable = _malloc(40) | 0;HEAP32[_setjmpTable>>2]=0;
- $5 = sp + 672|0;
- $6 = sp + 664|0;
- $7 = sp + 656|0;
- $8 = sp + 648|0;
- $9 = sp + 640|0;
- $10 = sp + 632|0;
- $11 = sp + 624|0;
- $12 = sp + 616|0;
- $13 = sp + 608|0;
- $14 = sp + 600|0;
- $15 = sp + 592|0;
- $16 = sp + 584|0;
- $17 = sp + 576|0;
- $18 = sp + 568|0;
- $19 = sp + 560|0;
- $20 = sp + 552|0;
- $21 = sp + 544|0;
- $22 = sp + 536|0;
- $23 = sp + 528|0;
- $24 = sp + 520|0;
- $25 = sp + 512|0;
- $26 = sp + 504|0;
- $27 = sp + 496|0;
- $28 = sp + 488|0;
- $29 = sp + 480|0;
- $30 = sp + 472|0;
- $31 = sp + 464|0;
- $32 = sp + 456|0;
- $33 = sp + 448|0;
- $34 = sp + 440|0;
- $35 = sp + 432|0;
- $36 = sp + 424|0;
- $37 = sp + 416|0;
- $38 = sp + 408|0;
- $39 = sp + 400|0;
- $40 = sp + 392|0;
- $41 = sp + 384|0;
- $42 = sp + 376|0;
- $43 = sp + 368|0;
- $44 = sp + 360|0;
- $45 = sp + 352|0;
- $46 = sp + 344|0;
- $47 = sp + 336|0;
- $48 = sp + 328|0;
- $49 = sp + 320|0;
- $50 = sp + 312|0;
- $51 = sp + 304|0;
- $52 = sp + 296|0;
- $53 = sp + 288|0;
- $54 = sp + 280|0;
- $55 = sp + 272|0;
- $56 = sp + 264|0;
- $57 = sp + 260|0;
- $58 = sp + 256|0;
- $59 = sp + 248|0;
- $60 = sp + 240|0;
- $61 = sp + 232|0;
- $62 = sp + 224|0;
- $63 = sp + 216|0;
- $64 = sp + 208|0;
- $65 = sp + 200|0;
- $66 = sp + 192|0;
- $67 = sp + 184|0;
- $68 = sp + 176|0;
- $69 = sp + 168|0;
- $70 = sp + 160|0;
- $71 = sp + 152|0;
- $72 = sp + 144|0;
- $73 = sp + 136|0;
- $74 = sp + 128|0;
- $75 = sp + 120|0;
- $76 = sp + 112|0;
- $77 = sp + 104|0;
- $78 = sp + 96|0;
- $79 = sp + 88|0;
- $80 = sp + 80|0;
- $81 = sp + 72|0;
- $82 = sp + 64|0;
- $83 = sp + 56|0;
- $84 = sp + 48|0;
- $85 = sp + 40|0;
- $86 = sp + 32|0;
- $87 = sp + 24|0;
- $88 = sp + 16|0;
- $89 = ((($2)) + 12|0);
- $90 = HEAP32[$89>>2]|0;
- $91 = ((($90)) + 8|0);
- $92 = HEAP32[$91>>2]|0;
- $93 = ((($90)) + 12|0);
- $94 = HEAP32[$93>>2]|0;
- $95 = ((($90)) + 16|0);
- $96 = HEAP32[$95>>2]|0;
- __THREW__ = 0;
- $97 = (invoke_ii(145,($1|0))|0);
- $98 = __THREW__; __THREW__ = 0;
- if ((($98|0) != 0) & ((threwValue|0) != 0)) { $99 = _testSetjmp(HEAP32[$98>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($99|0) == 0) { _longjmp($98|0, threwValue|0); } tempRet0 = (threwValue); } else { $99 = -1; };
- $100 = tempRet0;
- $cond = ($99|0)==(1);
- if ($cond) {
-  $$11044 = 0;$$11047 = 0;$$11049 = 0;$$11054 = 0;$$11060 = $96;$$11066 = $94;$$11073 = $92;$$11080 = $90;$$11087 = $2;$$reg2mem1002$0 = $100;
- } else {
-  $101 = HEAP32[$1>>2]|0;
-  $$01043 = 0;$$01046 = $101;$$01048 = $97;$$01053 = 0;$$01059 = $96;$$01065 = $94;$$01072 = $92;$$01079 = $90;$$01086 = $2;
-  label = 3;
- }
- L3: while(1) {
-  if ((label|0) == 3) {
-   label = 0;
-   _setjmpTable = _saveSetjmp($5,1,_setjmpTable|0,_setjmpTableSize|0)|0;_setjmpTableSize = tempRet0;
-   __THREW__ = 0;
-   $102 = __THREW__; __THREW__ = 0;
-   if ((($102|0) != 0) & ((threwValue|0) != 0)) { $103 = _testSetjmp(HEAP32[$102>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($103|0) == 0) { _longjmp($102|0, threwValue|0); } tempRet0 = (threwValue); } else { $103 = -1; };
-   $104 = tempRet0;
-   $cond1240 = ($103|0)==(1);
-   if ($cond1240) {
-    $$11044 = $$01043;$$11047 = $$01046;$$11049 = $$01048;$$11054 = $$01053;$$11060 = $$01059;$$11066 = $$01065;$$11073 = $$01072;$$11080 = $$01079;$$11087 = $$01086;$$reg2mem1002$0 = $104;
-    continue;
-   }
-   $$11044 = $$01043;$$11047 = $$01046;$$11049 = $$01048;$$11054 = $$01053;$$11060 = $$01059;$$11066 = $$01065;$$11073 = $$01072;$$11080 = $$01079;$$11087 = $$01086;$$reg2mem1002$0 = 0;
-  }
-  $105 = ($$reg2mem1002$0|0)==(0);
-  if (!($105)) {
-   $$01043 = 1;$$01046 = $$11047;$$01048 = $$11049;$$01053 = $$11054;$$01059 = $$11060;$$01065 = $$11066;$$01072 = $$11073;$$01079 = $$11080;$$01086 = $$11087;
-   label = 3;
-   continue;
-  }
-  $106 = ($$11044<<24>>24)!=(0);
-  if ($106) {
-   $$21045 = 0;$$21055 = $$11054;$$31062 = $$11060;$$31068 = $$11066;$$31075 = $$11073;$$51084 = $$11080;$$51091 = $$11087;
-   label = 272;
-  } else {
-   HEAP32[$1>>2] = $5;
-   $107 = ((($1)) + 12|0);
-   $108 = HEAP32[$107>>2]|0;
-   $109 = ((($108)) + 4|0);
-   $110 = HEAP32[$109>>2]|0;
-   $111 = ($110|0)!=(0|0);
-   if (!($111)) {
-    __THREW__ = 0;
-    invoke_vi(134,($1|0));
-    $112 = __THREW__; __THREW__ = 0;
-    if ((($112|0) != 0) & ((threwValue|0) != 0)) { $113 = _testSetjmp(HEAP32[$112>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($113|0) == 0) { _longjmp($112|0, threwValue|0); } tempRet0 = (threwValue); } else { $113 = -1; };
-    $114 = tempRet0;
-    $cond1241 = ($113|0)==(1);
-    if ($cond1241) {
-     $$11087$phi = $$11087;$$11080$phi = $$11080;$$11073$phi = $$11073;$$11066$phi = $$11066;$$11060$phi = $$11060;$$11054$phi = $$11054;$$11049$phi = $$11049;$$11047$phi = $$11047;$$11044$phi = $$11044;$$reg2mem1002$0 = $114;$$11087 = $$11087$phi;$$11080 = $$11080$phi;$$11073 = $$11073$phi;$$11066 = $$11066$phi;$$11060 = $$11060$phi;$$11054 = $$11054$phi;$$11049 = $$11049$phi;$$11047 = $$11047$phi;$$11044 = $$11044$phi;
-     continue;
-    }
-   }
-   $115 = ((($$11080)) + 2|0);
-   $116 = HEAP16[$115>>1]|0;
-   $117 = $116&65535;
-   __THREW__ = 0;
-   invoke_viii(142,($1|0),($117|0),($4|0));
-   $118 = __THREW__; __THREW__ = 0;
-   if ((($118|0) != 0) & ((threwValue|0) != 0)) { $119 = _testSetjmp(HEAP32[$118>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($119|0) == 0) { _longjmp($118|0, threwValue|0); } tempRet0 = (threwValue); } else { $119 = -1; };
-   $120 = tempRet0;
-   $cond1242 = ($119|0)==(1);
-   if ($cond1242) {
-    $$11087$phi = $$11087;$$11080$phi = $$11080;$$11073$phi = $$11073;$$11066$phi = $$11066;$$11060$phi = $$11060;$$11054$phi = $$11054;$$11049$phi = $$11049;$$11047$phi = $$11047;$$11044$phi = $$11044;$$reg2mem1002$0 = $120;$$11087 = $$11087$phi;$$11080 = $$11080$phi;$$11073 = $$11073$phi;$$11066 = $$11066$phi;$$11060 = $$11060$phi;$$11054 = $$11054$phi;$$11049 = $$11049$phi;$$11047 = $$11047$phi;$$11044 = $$11044$phi;
-    continue;
-   }
-   $121 = ((($1)) + 12|0);
-   $122 = HEAP32[$121>>2]|0;
-   $123 = ((($122)) + 16|0);
-   $124 = HEAP32[$123>>2]|0;
-   $125 = ((($124)) + 4|0);
-   HEAP32[$125>>2] = $$11087;
-   $126 = ((($$11080)) + 2|0);
-   $127 = HEAP16[$126>>1]|0;
-   $128 = $127&65535;
-   $129 = ((($1)) + 12|0);
-   $130 = HEAP32[$129>>2]|0;
-   $131 = ((($130)) + 16|0);
-   $132 = HEAP32[$131>>2]|0;
-   $133 = ((($132)) + 12|0);
-   HEAP32[$133>>2] = $128;
-   $134 = ((($1)) + 12|0);
-   $135 = HEAP32[$134>>2]|0;
-   $136 = ((($135)) + 4|0);
-   $137 = HEAP32[$136>>2]|0;
-   ;HEAP32[$137>>2]=HEAP32[$3>>2]|0;HEAP32[$137+4>>2]=HEAP32[$3+4>>2]|0;
-   $138 = HEAP32[$$11073>>2]|0;
-   $$21052 = $138;$$5 = $$11044;$$51058 = $137;$$6 = $$11060;$$61071 = $$11066;$$61078 = $$11073;$$8 = $$11080;$$81094 = $$11087;$$sink$reg2mem$0 = $138;
-   label = 583;
-  }
-  L19: while(1) {
-   if ((label|0) == 272) {
-    label = 0;
-    $1407 = ((($1)) + 12|0);
-    $1408 = HEAP32[$1407>>2]|0;
-    $1409 = ((($1408)) + 16|0);
-    $1410 = HEAP32[$1409>>2]|0;
-    $1411 = ((($1)) + 20|0);
-    $1412 = HEAP32[$1411>>2]|0;
-    __THREW__ = 0;
-    $1413 = (invoke_iiii(140,($1|0),(68279|0),6)|0);
-    $1414 = __THREW__; __THREW__ = 0;
-    if ((($1414|0) != 0) & ((threwValue|0) != 0)) { $1415 = _testSetjmp(HEAP32[$1414>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($1415|0) == 0) { _longjmp($1414|0, threwValue|0); } tempRet0 = (threwValue); } else { $1415 = -1; };
-    $1416 = tempRet0;
-    $cond1249 = ($1415|0)==(1);
-    if ($cond1249) {
-     $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$21045;$$11054 = $$21055;$$11060 = $$31062;$$11066 = $$31068;$$11073 = $$31075;$$11080 = $$51084;$$11087 = $$51091;$$reg2mem1002$0 = $1416;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-     continue L3;
-    }
-    __THREW__ = 0;
-    invoke_viii(176,($42|0),($1|0),($$31075|0));
-    $1417 = __THREW__; __THREW__ = 0;
-    if ((($1417|0) != 0) & ((threwValue|0) != 0)) { $1418 = _testSetjmp(HEAP32[$1417>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($1418|0) == 0) { _longjmp($1417|0, threwValue|0); } tempRet0 = (threwValue); } else { $1418 = -1; };
-    $1419 = tempRet0;
-    $cond1250 = ($1418|0)==(1);
-    if ($cond1250) {
-     $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$21045;$$11054 = $$21055;$$11060 = $$31062;$$11066 = $$31068;$$11073 = $$31075;$$11080 = $$51084;$$11087 = $$51091;$$reg2mem1002$0 = $1419;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-     continue L3;
-    }
-    __THREW__ = 0;
-    ;HEAP32[$$byval_copy1119>>2]=HEAP32[$42>>2]|0;HEAP32[$$byval_copy1119+4>>2]=HEAP32[$42+4>>2]|0;
-    invoke_viiii(177,($1|0),($1412|0),($1413|0),($$byval_copy1119|0));
-    $1420 = __THREW__; __THREW__ = 0;
-    if ((($1420|0) != 0) & ((threwValue|0) != 0)) { $1421 = _testSetjmp(HEAP32[$1420>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($1421|0) == 0) { _longjmp($1420|0, threwValue|0); } tempRet0 = (threwValue); } else { $1421 = -1; };
-    $1422 = tempRet0;
-    $cond1251 = ($1421|0)==(1);
-    if ($cond1251) {
-     $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$21045;$$11054 = $$21055;$$11060 = $$31062;$$11066 = $$31068;$$11073 = $$31075;$$11080 = $$51084;$$11087 = $$51091;$$reg2mem1002$0 = $1422;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-     continue L3;
-    }
-    $1423 = ((($1)) + 20|0);
-    $1424 = HEAP32[$1423>>2]|0;
-    __THREW__ = 0;
-    $1425 = (invoke_iiii(140,($1|0),(67804|0),5)|0);
-    $1426 = __THREW__; __THREW__ = 0;
-    if ((($1426|0) != 0) & ((threwValue|0) != 0)) { $1427 = _testSetjmp(HEAP32[$1426>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($1427|0) == 0) { _longjmp($1426|0, threwValue|0); } tempRet0 = (threwValue); } else { $1427 = -1; };
-    $1428 = tempRet0;
-    $cond1252 = ($1427|0)==(1);
-    if ($cond1252) {
-     $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$21045;$$11054 = $$21055;$$11060 = $$31062;$$11066 = $$31068;$$11073 = $$31075;$$11080 = $$51084;$$11087 = $$51091;$$reg2mem1002$0 = $1428;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-     continue L3;
-    }
-    $1429 = ((($1)) + 12|0);
-    $1430 = HEAP32[$1429>>2]|0;
-    $1431 = ((($1430)) + 20|0);
-    $1432 = HEAP32[$1431>>2]|0;
-    $1433 = $1410;
-    $1434 = $1432;
-    $1435 = (($1433) - ($1434))|0;
-    $1436 = (($1435|0) / 48)&-1;
-    __THREW__ = 0;
-    invoke_vii(136,($43|0),($1436|0));
-    $1437 = __THREW__; __THREW__ = 0;
-    if ((($1437|0) != 0) & ((threwValue|0) != 0)) { $1438 = _testSetjmp(HEAP32[$1437>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($1438|0) == 0) { _longjmp($1437|0, threwValue|0); } tempRet0 = (threwValue); } else { $1438 = -1; };
-    $1439 = tempRet0;
-    $cond1253 = ($1438|0)==(1);
-    if ($cond1253) {
-     $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$21045;$$11054 = $$21055;$$11060 = $$31062;$$11066 = $$31068;$$11073 = $$31075;$$11080 = $$51084;$$11087 = $$51091;$$reg2mem1002$0 = $1439;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-     continue L3;
-    }
-    __THREW__ = 0;
-    ;HEAP32[$$byval_copy1120>>2]=HEAP32[$43>>2]|0;HEAP32[$$byval_copy1120+4>>2]=HEAP32[$43+4>>2]|0;
-    invoke_viiii(177,($1|0),($1424|0),($1425|0),($$byval_copy1120|0));
-    $1440 = __THREW__; __THREW__ = 0;
-    if ((($1440|0) != 0) & ((threwValue|0) != 0)) { $1441 = _testSetjmp(HEAP32[$1440>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($1441|0) == 0) { _longjmp($1440|0, threwValue|0); } tempRet0 = (threwValue); } else { $1441 = -1; };
-    $1442 = tempRet0;
-    $cond1254 = ($1441|0)==(1);
-    if ($cond1254) {
-     $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$21045;$$11054 = $$21055;$$11060 = $$31062;$$11066 = $$31068;$$11073 = $$31075;$$11080 = $$51084;$$11087 = $$51091;$$reg2mem1002$0 = $1442;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-     continue L3;
-    }
-    $1443 = ((($1410)) + 20|0);
-    $1444 = HEAP32[$1443>>2]|0;
-    $1445 = ((($1)) + 12|0);
-    $1446 = HEAP32[$1445>>2]|0;
-    $1447 = ((($1446)) + 20|0);
-    $1448 = HEAP32[$1447>>2]|0;
-    $1449 = ($1410|0)==($1448|0);
-    L28: do {
-     if ($1449) {
-      $1450 = ((($1410)) + 16|0);
-      $1451 = HEAP32[$1450>>2]|0;
-      $1452 = ($1451|0)==(0);
-      if ($1452) {
-       $$4 = $$21045;$$41057 = $$21055;$$51064 = $$31062;$$51070 = $$31068;$$51077 = $$31075;$$7 = $$51084;$$71093 = $$51091;
-       break L19;
-      } else {
-       $$11024 = $1410;
-      }
-     } else {
-      $$01021 = $1444;$$01023 = $1410;
-      L30: while(1) {
-       $1453 = ((($$01023)) + 16|0);
-       $1454 = HEAP32[$1453>>2]|0;
-       $1455 = ((($$01023)) + -48|0);
-       $1456 = ((($1455)) + 16|0);
-       $1457 = HEAP32[$1456>>2]|0;
-       $1458 = ($1454|0)==($1457|0);
-       if (!($1458)) {
-        $$11024 = $$01023;
-        break L28;
-       }
-       __THREW__ = 0;
-       invoke_vi(132,($1|0));
-       $1459 = __THREW__; __THREW__ = 0;
-       if ((($1459|0) != 0) & ((threwValue|0) != 0)) { $1460 = _testSetjmp(HEAP32[$1459>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($1460|0) == 0) { _longjmp($1459|0, threwValue|0); } tempRet0 = (threwValue); } else { $1460 = -1; };
-       $1461 = tempRet0;
-       $cond1255 = ($1460|0)==(1);
-       if ($cond1255) {
-        $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$21045;$$11054 = $$21055;$$11060 = $$31062;$$11066 = $$31068;$$11073 = $$31075;$$11080 = $$51084;$$11087 = $$51091;$$reg2mem1002$0 = $1461;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-        continue L3;
-       }
-       $1462 = ((($1)) + 12|0);
-       $1463 = HEAP32[$1462>>2]|0;
-       $1464 = ((($1463)) + 16|0);
-       $1465 = HEAP32[$1464>>2]|0;
-       $1466 = ((($1465)) + 48|0);
-       $1467 = ((($1466)) + 8|0);
-       $1468 = HEAP32[$1467>>2]|0;
-       $1469 = ((($1)) + 12|0);
-       $1470 = HEAP32[$1469>>2]|0;
-       $1471 = ((($1470)) + 4|0);
-       HEAP32[$1471>>2] = $1468;
-       $1472 = ((($1465)) + 48|0);
-       $1473 = ((($1472)) + 40|0);
-       $1474 = HEAP32[$1473>>2]|0;
-       $1475 = ($1474|0)==(-1);
-       $1476 = ($$11047|0)!=(0|0);
-       $or$cond16 = $1475 & $1476;
-       if ($or$cond16) {
-        label = 283;
-        break L19;
-       }
-       $1480 = ((($1)) + 12|0);
-       $1481 = HEAP32[$1480>>2]|0;
-       $1482 = ((($1481)) + 20|0);
-       $1483 = HEAP32[$1482>>2]|0;
-       $1484 = ($1465|0)==($1483|0);
-       if ($1484) {
-        $$11022 = $$01021;
-        break;
-       }
-       $1507 = ((($1465)) + 16|0);
-       $1508 = HEAP32[$1507>>2]|0;
-       $1509 = ((($1465)) + -48|0);
-       $1510 = ((($1509)) + 16|0);
-       $1511 = HEAP32[$1510>>2]|0;
-       $1512 = ($1508|0)==($1511|0);
-       if ($1512) {
-        $$2 = $$01021;
-       } else {
-        $$01021$phi = $$01021;$$01023 = $1465;$$01021 = $$01021$phi;
-        continue;
-       }
-       while(1) {
-        $1513 = ((($1465)) + -48|0);
-        $1514 = ((($1513)) + 20|0);
-        $1515 = HEAP32[$1514>>2]|0;
-        $1516 = ($$2|0)>($1515|0);
-        if (!($1516)) {
-         $$01021 = $$2;$$01023 = $1465;
-         continue L30;
-        }
-        $1517 = (($$2) + -1)|0;
-        __THREW__ = 0;
-        invoke_vii(166,($1|0),($1517|0));
-        $1518 = __THREW__; __THREW__ = 0;
-        if ((($1518|0) != 0) & ((threwValue|0) != 0)) { $1519 = _testSetjmp(HEAP32[$1518>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($1519|0) == 0) { _longjmp($1518|0, threwValue|0); } tempRet0 = (threwValue); } else { $1519 = -1; };
-        $1520 = tempRet0;
-        $cond1256 = ($1519|0)==(1);
-        if ($cond1256) {
-         $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$21045;$$11054 = $$21055;$$11060 = $$31062;$$11066 = $$31068;$$11073 = $$31075;$$11080 = $$51084;$$11087 = $$51091;$$reg2mem1002$0 = $1520;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-         continue L3;
-        }
-        $$2 = $1517;
-       }
-      }
-      while(1) {
-       $1485 = ($$11022|0)>(0);
-       if (!($1485)) {
-        break;
-       }
-       $1486 = (($$11022) + -1)|0;
-       __THREW__ = 0;
-       invoke_vii(166,($1|0),($1486|0));
-       $1487 = __THREW__; __THREW__ = 0;
-       if ((($1487|0) != 0) & ((threwValue|0) != 0)) { $1488 = _testSetjmp(HEAP32[$1487>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($1488|0) == 0) { _longjmp($1487|0, threwValue|0); } tempRet0 = (threwValue); } else { $1488 = -1; };
-       $1489 = tempRet0;
-       $cond1257 = ($1488|0)==(1);
-       if ($cond1257) {
-        $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$21045;$$11054 = $$21055;$$11060 = $$31062;$$11066 = $$31068;$$11073 = $$31075;$$11080 = $$51084;$$11087 = $$51091;$$reg2mem1002$0 = $1489;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-        continue L3;
-       }
-       $$11022 = $1486;
-      }
-      $1490 = ((($1465)) + 16|0);
-      $1491 = HEAP32[$1490>>2]|0;
-      $1492 = ($1491|0)==(0);
-      if ($1492) {
-       $1493 = ((($1)) + 12|0);
-       $1494 = HEAP32[$1493>>2]|0;
-       $1495 = ((($1)) + 16|0);
-       $1496 = HEAP32[$1495>>2]|0;
-       $1497 = ($1494|0)==($1496|0);
-       $1498 = ((($1)) + 12|0);
-       $1499 = HEAP32[$1498>>2]|0;
-       if ($1497) {
-        label = 290;
-        break L19;
-       }
-       $1505 = HEAP32[$1499>>2]|0;
-       $1506 = ((($1)) + 12|0);
-       HEAP32[$1506>>2] = $1505;
-       HEAP32[$1499>>2] = 0;
-       $$51091$phi = $$51091;$$51084$phi = $$51084;$$31075$phi = $$31075;$$31068$phi = $$31068;$$31062$phi = $$31062;$$21055$phi = $$21055;$$21045$phi = $$21045;$$51091 = $$51091$phi;$$51084 = $$51084$phi;$$31075 = $$31075$phi;$$31068 = $$31068$phi;$$31062 = $$31062$phi;$$21055 = $$21055$phi;$$21045 = $$21045$phi;
-       label = 272;
-       continue L19;
-      } else {
-       $$11024 = $1465;
-      }
-     }
-    } while(0);
-    $1521 = ((($$11024)) + 16|0);
-    $1522 = HEAP32[$1521>>2]|0;
-    $1523 = ($1522|0)==(0);
-    if ($1523) {
-     $$4 = $$21045;$$41057 = $$21055;$$51064 = $$31062;$$51070 = $$31068;$$51077 = $$31075;$$7 = $$51084;$$71093 = $$51091;
-     break;
-    }
-    $1524 = ((($$11024)) + 4|0);
-    $1525 = HEAP32[$1524>>2]|0;
-    $1526 = ((($1525)) + 12|0);
-    $1527 = HEAP32[$1526>>2]|0;
-    $1528 = ((($1527)) + 12|0);
-    $1529 = HEAP32[$1528>>2]|0;
-    $1530 = ((($1527)) + 16|0);
-    $1531 = HEAP32[$1530>>2]|0;
-    $1532 = ((($$11024)) + 48|0);
-    $1533 = ((($1532)) + 8|0);
-    $1534 = HEAP32[$1533>>2]|0;
-    $1535 = ((($1)) + 12|0);
-    $1536 = HEAP32[$1535>>2]|0;
-    $1537 = ((($1536)) + 4|0);
-    HEAP32[$1537>>2] = $1534;
-    $1538 = ((($1)) + 12|0);
-    $1539 = HEAP32[$1538>>2]|0;
-    $1540 = ((($1539)) + 28|0);
-    $1541 = HEAP32[$1540>>2]|0;
-    $1542 = ((($$11024)) + 16|0);
-    $1543 = HEAP32[$1542>>2]|0;
-    $1544 = (($1543) + -1)|0;
-    HEAP32[$1542>>2] = $1544;
-    $1545 = (($1541) + ($1544<<2)|0);
-    $1546 = HEAP32[$1545>>2]|0;
-    $$3 = $$21045;$$31056 = $1534;$$41063 = $1531;$$41069 = $1529;$$41076 = $1546;$$61085 = $1527;$$61092 = $1525;
-   }
-   else if ((label|0) == 583) {
-    label = 0;
-    $3070 = $$sink$reg2mem$0 & 127;
-    $3071 = (200 + ($3070<<2)|0);
-    $3072 = HEAP32[$3071>>2]|0;
-    $indirectbr_cast = $3072;
-    L50: do {
-     switch ($indirectbr_cast|0) {
-     case 75:  {
-      $$4 = $$5;$$41057 = $$51058;$$51064 = $$6;$$51070 = $$61071;$$51077 = $$61078;$$7 = $$8;$$71093 = $$81094;
-      break L19;
-      break;
-     }
-     case 1:  {
-      $139 = ((($$61078)) + 4|0);
-      $140 = HEAP32[$139>>2]|0;
-      $$81094$phi = $$81094;$$8$phi = $$8;$$61071$phi = $$61071;$$6$phi = $$6;$$51058$phi = $$51058;$$5$phi = $$5;$$21052 = $140;$$61078 = $139;$$sink$reg2mem$0 = $140;$$81094 = $$81094$phi;$$8 = $$8$phi;$$61071 = $$61071$phi;$$6 = $$6$phi;$$51058 = $$51058$phi;$$5 = $$5$phi;
-      label = 583;
-      continue L19;
-      break;
-     }
-     case 2:  {
-      $141 = $$21052 >>> 23;
-      $142 = $141 & 511;
-      $143 = (($$51058) + ($142<<3)|0);
-      $144 = $$21052 >>> 14;
-      $145 = $144 & 511;
-      $146 = (($$51058) + ($145<<3)|0);
-      ;HEAP32[$143>>2]=HEAP32[$146>>2]|0;HEAP32[$143+4>>2]=HEAP32[$146+4>>2]|0;
-      $147 = ((($$61078)) + 4|0);
-      $148 = HEAP32[$147>>2]|0;
-      $$81094$phi = $$81094;$$8$phi = $$8;$$61071$phi = $$61071;$$6$phi = $$6;$$51058$phi = $$51058;$$5$phi = $$5;$$21052 = $148;$$61078 = $147;$$sink$reg2mem$0 = $148;$$81094 = $$81094$phi;$$8 = $$8$phi;$$61071 = $$61071$phi;$$6 = $$6$phi;$$51058 = $$51058$phi;$$5 = $$5$phi;
-      label = 583;
-      continue L19;
-      break;
-     }
-     case 3:  {
-      $149 = $$21052 >>> 23;
-      $150 = $149 & 511;
-      $151 = (($$51058) + ($150<<3)|0);
-      $152 = $$21052 >>> 7;
-      $153 = $152 & 65535;
-      $154 = (($$61071) + ($153<<3)|0);
-      ;HEAP32[$151>>2]=HEAP32[$154>>2]|0;HEAP32[$151+4>>2]=HEAP32[$154+4>>2]|0;
-      $155 = ((($$61078)) + 4|0);
-      $156 = HEAP32[$155>>2]|0;
-      $$81094$phi = $$81094;$$8$phi = $$8;$$61071$phi = $$61071;$$6$phi = $$6;$$51058$phi = $$51058;$$5$phi = $$5;$$21052 = $156;$$61078 = $155;$$sink$reg2mem$0 = $156;$$81094 = $$81094$phi;$$8 = $$8$phi;$$61071 = $$61071$phi;$$6 = $$6$phi;$$51058 = $$51058$phi;$$5 = $$5$phi;
-      label = 583;
-      continue L19;
-      break;
-     }
-     case 4:  {
-      $157 = $$21052 >>> 23;
-      $158 = $157 & 511;
-      $159 = (($$51058) + ($158<<3)|0);
-      $160 = ((($159)) + 4|0);
-      HEAP32[$160>>2] = 3;
-      $161 = $$21052 >>> 7;
-      $162 = $161 & 65535;
-      $163 = (($162) - 32767)|0;
-      $164 = $$21052 >>> 23;
-      $165 = $164 & 511;
-      $166 = (($$51058) + ($165<<3)|0);
-      HEAP32[$166>>2] = $163;
-      $167 = ((($$61078)) + 4|0);
-      $168 = HEAP32[$167>>2]|0;
-      $$81094$phi = $$81094;$$8$phi = $$8;$$61071$phi = $$61071;$$6$phi = $$6;$$51058$phi = $$51058;$$5$phi = $$5;$$21052 = $168;$$61078 = $167;$$sink$reg2mem$0 = $168;$$81094 = $$81094$phi;$$8 = $$8$phi;$$61071 = $$61071$phi;$$6 = $$6$phi;$$51058 = $$51058$phi;$$5 = $$5$phi;
-      label = 583;
-      continue L19;
-      break;
-     }
-     case 5:  {
-      $169 = $$21052 >>> 23;
-      $170 = $169 & 511;
-      $171 = (($$51058) + ($170<<3)|0);
-      $172 = ((($171)) + 4|0);
-      HEAP32[$172>>2] = 4;
-      $173 = $$21052 >>> 7;
-      $174 = $173 & 65535;
-      $175 = (($$6) + ($174<<2)|0);
-      $176 = HEAP32[$175>>2]|0;
-      $177 = $$21052 >>> 23;
-      $178 = $177 & 511;
-      $179 = (($$51058) + ($178<<3)|0);
-      HEAP32[$179>>2] = $176;
-      $180 = ((($$61078)) + 4|0);
-      $181 = HEAP32[$180>>2]|0;
-      $$81094$phi = $$81094;$$8$phi = $$8;$$61071$phi = $$61071;$$6$phi = $$6;$$51058$phi = $$51058;$$5$phi = $$5;$$21052 = $181;$$61078 = $180;$$sink$reg2mem$0 = $181;$$81094 = $$81094$phi;$$8 = $$8$phi;$$61071 = $$61071$phi;$$6 = $$6$phi;$$51058 = $$51058$phi;$$5 = $$5$phi;
-      label = 583;
-      continue L19;
-      break;
-     }
-     case 6:  {
-      $636 = $$21052 >>> 23;
-      $637 = $636 & 511;
-      $638 = (($$51058) + ($637<<3)|0);
-      $639 = ((($638)) + 4|0);
-      HEAP32[$639>>2] = 0;
-      $640 = (($$51058) + ($637<<3)|0);
-      HEAP32[$640>>2] = 0;
-      $641 = ((($$61078)) + 4|0);
-      $642 = HEAP32[$641>>2]|0;
-      $$81094$phi = $$81094;$$8$phi = $$8;$$61071$phi = $$61071;$$6$phi = $$6;$$51058$phi = $$51058;$$5$phi = $$5;$$21052 = $642;$$61078 = $641;$$sink$reg2mem$0 = $642;$$81094 = $$81094$phi;$$8 = $$8$phi;$$61071 = $$61071$phi;$$6 = $$6$phi;$$51058 = $$51058$phi;$$5 = $$5$phi;
-      label = 583;
-      continue L19;
-      break;
-     }
-     case 7:  {
-      $182 = $$21052 >>> 23;
-      $183 = $182 & 511;
-      $184 = (($$51058) + ($183<<3)|0);
-      ;HEAP32[$184>>2]=HEAP32[$$51058>>2]|0;HEAP32[$184+4>>2]=HEAP32[$$51058+4>>2]|0;
-      $185 = ((($$61078)) + 4|0);
-      $186 = HEAP32[$185>>2]|0;
-      $$81094$phi = $$81094;$$8$phi = $$8;$$61071$phi = $$61071;$$6$phi = $$6;$$51058$phi = $$51058;$$5$phi = $$5;$$21052 = $186;$$61078 = $185;$$sink$reg2mem$0 = $186;$$81094 = $$81094$phi;$$8 = $$8$phi;$$61071 = $$61071$phi;$$6 = $$6$phi;$$51058 = $$51058$phi;$$5 = $$5$phi;
-      label = 583;
-      continue L19;
-      break;
-     }
-     case 8:  {
-      $187 = $$21052 >>> 23;
-      $188 = $187 & 511;
-      $189 = (($$51058) + ($188<<3)|0);
-      $190 = ((($189)) + 4|0);
-      HEAP32[$190>>2] = 2;
-      $191 = $$21052 >>> 23;
-      $192 = $191 & 511;
-      $193 = (($$51058) + ($192<<3)|0);
-      HEAP32[$193>>2] = 1;
-      $194 = ((($$61078)) + 4|0);
-      $195 = HEAP32[$194>>2]|0;
-      $$81094$phi = $$81094;$$8$phi = $$8;$$61071$phi = $$61071;$$6$phi = $$6;$$51058$phi = $$51058;$$5$phi = $$5;$$21052 = $195;$$61078 = $194;$$sink$reg2mem$0 = $195;$$81094 = $$81094$phi;$$8 = $$8$phi;$$61071 = $$61071$phi;$$6 = $$6$phi;$$51058 = $$51058$phi;$$5 = $$5$phi;
-      label = 583;
-      continue L19;
-      break;
-     }
-     case 9:  {
-      $196 = $$21052 >>> 23;
-      $197 = $196 & 511;
-      $198 = (($$51058) + ($197<<3)|0);
-      $199 = ((($198)) + 4|0);
-      HEAP32[$199>>2] = 0;
-      $200 = $$21052 >>> 23;
-      $201 = $200 & 511;
-      $202 = (($$51058) + ($201<<3)|0);
-      HEAP32[$202>>2] = 1;
-      $203 = ((($$61078)) + 4|0);
-      $204 = HEAP32[$203>>2]|0;
-      $$81094$phi = $$81094;$$8$phi = $$8;$$61071$phi = $$61071;$$6$phi = $$6;$$51058$phi = $$51058;$$5$phi = $$5;$$21052 = $204;$$61078 = $203;$$sink$reg2mem$0 = $204;$$81094 = $$81094$phi;$$8 = $$8$phi;$$61071 = $$61071$phi;$$6 = $$6$phi;$$51058 = $$51058$phi;$$5 = $$5$phi;
-      label = 583;
-      continue L19;
-      break;
-     }
-     case 10:  {
-      $205 = $$21052 >>> 23;
-      $206 = $205 & 511;
-      $207 = (($$51058) + ($206<<3)|0);
-      $208 = $$21052 >>> 7;
-      $209 = $208 & 65535;
-      $210 = (($$6) + ($209<<2)|0);
-      $211 = HEAP32[$210>>2]|0;
-      __THREW__ = 0;
-      invoke_viii(149,($6|0),($1|0),($211|0));
-      $212 = __THREW__; __THREW__ = 0;
-      if ((($212|0) != 0) & ((threwValue|0) != 0)) { $213 = _testSetjmp(HEAP32[$212>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($213|0) == 0) { _longjmp($212|0, threwValue|0); } tempRet0 = (threwValue); } else { $213 = -1; };
-      $214 = tempRet0;
-      $cond1401 = ($213|0)==(1);
-      if ($cond1401) {
-       $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $214;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-       continue L3;
-      }
-      ;HEAP32[$207>>2]=HEAP32[$6>>2]|0;HEAP32[$207+4>>2]=HEAP32[$6+4>>2]|0;
-      $215 = ((($$61078)) + 4|0);
-      $216 = HEAP32[$215>>2]|0;
-      $$81094$phi = $$81094;$$8$phi = $$8;$$61071$phi = $$61071;$$6$phi = $$6;$$51058$phi = $$51058;$$5$phi = $$5;$$21052 = $216;$$61078 = $215;$$sink$reg2mem$0 = $216;$$81094 = $$81094$phi;$$8 = $$8$phi;$$61071 = $$61071$phi;$$6 = $$6$phi;$$51058 = $$51058$phi;$$5 = $$5$phi;
-      label = 583;
-      continue L19;
-      break;
-     }
-     case 11:  {
-      $217 = $$21052 >>> 7;
-      $218 = $217 & 65535;
-      $219 = (($$6) + ($218<<2)|0);
-      $220 = HEAP32[$219>>2]|0;
-      $221 = $$21052 >>> 23;
-      $222 = $221 & 511;
-      $223 = (($$51058) + ($222<<3)|0);
-      __THREW__ = 0;
-      ;HEAP32[$$byval_copy>>2]=HEAP32[$223>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$223+4>>2]|0;
-      invoke_viii(150,($1|0),($220|0),($$byval_copy|0));
-      $224 = __THREW__; __THREW__ = 0;
-      if ((($224|0) != 0) & ((threwValue|0) != 0)) { $225 = _testSetjmp(HEAP32[$224>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($225|0) == 0) { _longjmp($224|0, threwValue|0); } tempRet0 = (threwValue); } else { $225 = -1; };
-      $226 = tempRet0;
-      $cond1400 = ($225|0)==(1);
-      if ($cond1400) {
-       $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $226;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-       continue L3;
-      }
-      $227 = ((($$61078)) + 4|0);
-      $228 = HEAP32[$227>>2]|0;
-      $$81094$phi = $$81094;$$8$phi = $$8;$$61071$phi = $$61071;$$6$phi = $$6;$$51058$phi = $$51058;$$5$phi = $$5;$$21052 = $228;$$61078 = $227;$$sink$reg2mem$0 = $228;$$81094 = $$81094$phi;$$8 = $$8$phi;$$61071 = $$61071$phi;$$6 = $$6$phi;$$51058 = $$51058$phi;$$5 = $$5$phi;
-      label = 583;
-      continue L19;
-      break;
-     }
-     case 12:  {
-      $229 = $$21052 >>> 23;
-      $230 = $229 & 511;
-      $231 = (($$51058) + ($230<<3)|0);
-      $232 = $$21052 >>> 7;
-      $233 = $232 & 65535;
-      __THREW__ = 0;
-      invoke_viii(151,($7|0),($1|0),($233|0));
-      $234 = __THREW__; __THREW__ = 0;
-      if ((($234|0) != 0) & ((threwValue|0) != 0)) { $235 = _testSetjmp(HEAP32[$234>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($235|0) == 0) { _longjmp($234|0, threwValue|0); } tempRet0 = (threwValue); } else { $235 = -1; };
-      $236 = tempRet0;
-      $cond1399 = ($235|0)==(1);
-      if ($cond1399) {
-       $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $236;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-       continue L3;
-      }
-      ;HEAP32[$231>>2]=HEAP32[$7>>2]|0;HEAP32[$231+4>>2]=HEAP32[$7+4>>2]|0;
-      $237 = ((($$61078)) + 4|0);
-      $238 = HEAP32[$237>>2]|0;
-      $$81094$phi = $$81094;$$8$phi = $$8;$$61071$phi = $$61071;$$6$phi = $$6;$$51058$phi = $$51058;$$5$phi = $$5;$$21052 = $238;$$61078 = $237;$$sink$reg2mem$0 = $238;$$81094 = $$81094$phi;$$8 = $$8$phi;$$61071 = $$61071$phi;$$6 = $$6$phi;$$51058 = $$51058$phi;$$5 = $$5$phi;
-      label = 583;
-      continue L19;
-      break;
-     }
-     case 13:  {
-      $239 = $$21052 >>> 7;
-      $240 = $239 & 65535;
-      $241 = $$21052 >>> 23;
-      $242 = $241 & 511;
-      $243 = (($$51058) + ($242<<3)|0);
-      __THREW__ = 0;
-      ;HEAP32[$$byval_copy1097>>2]=HEAP32[$243>>2]|0;HEAP32[$$byval_copy1097+4>>2]=HEAP32[$243+4>>2]|0;
-      invoke_viii(152,($1|0),($240|0),($$byval_copy1097|0));
-      $244 = __THREW__; __THREW__ = 0;
-      if ((($244|0) != 0) & ((threwValue|0) != 0)) { $245 = _testSetjmp(HEAP32[$244>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($245|0) == 0) { _longjmp($244|0, threwValue|0); } tempRet0 = (threwValue); } else { $245 = -1; };
-      $246 = tempRet0;
-      $cond1398 = ($245|0)==(1);
-      if ($cond1398) {
-       $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $246;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-       continue L3;
-      }
-      $247 = ((($$61078)) + 4|0);
-      $248 = HEAP32[$247>>2]|0;
-      $$81094$phi = $$81094;$$8$phi = $$8;$$61071$phi = $$61071;$$6$phi = $$6;$$51058$phi = $$51058;$$5$phi = $$5;$$21052 = $248;$$61078 = $247;$$sink$reg2mem$0 = $248;$$81094 = $$81094$phi;$$8 = $$8$phi;$$61071 = $$61071$phi;$$6 = $$6$phi;$$51058 = $$51058$phi;$$5 = $$5$phi;
-      label = 583;
-      continue L19;
-      break;
-     }
-     case 14:  {
-      $249 = $$21052 >>> 23;
-      $250 = $249 & 511;
-      $251 = (($$51058) + ($250<<3)|0);
-      $252 = $$21052 >>> 7;
-      $253 = $252 & 65535;
-      $254 = (($$6) + ($253<<2)|0);
-      $255 = HEAP32[$254>>2]|0;
-      __THREW__ = 0;
-      invoke_viii(153,($8|0),($1|0),($255|0));
-      $256 = __THREW__; __THREW__ = 0;
-      if ((($256|0) != 0) & ((threwValue|0) != 0)) { $257 = _testSetjmp(HEAP32[$256>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($257|0) == 0) { _longjmp($256|0, threwValue|0); } tempRet0 = (threwValue); } else { $257 = -1; };
-      $258 = tempRet0;
-      $cond1397 = ($257|0)==(1);
-      if ($cond1397) {
-       $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $258;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-       continue L3;
-      }
-      ;HEAP32[$251>>2]=HEAP32[$8>>2]|0;HEAP32[$251+4>>2]=HEAP32[$8+4>>2]|0;
-      $259 = ((($$61078)) + 4|0);
-      $260 = HEAP32[$259>>2]|0;
-      $$81094$phi = $$81094;$$8$phi = $$8;$$61071$phi = $$61071;$$6$phi = $$6;$$51058$phi = $$51058;$$5$phi = $$5;$$21052 = $260;$$61078 = $259;$$sink$reg2mem$0 = $260;$$81094 = $$81094$phi;$$8 = $$8$phi;$$61071 = $$61071$phi;$$6 = $$6$phi;$$51058 = $$51058$phi;$$5 = $$5$phi;
-      label = 583;
-      continue L19;
-      break;
-     }
-     case 15:  {
-      $261 = $$21052 >>> 7;
-      $262 = $261 & 65535;
-      $263 = (($$6) + ($262<<2)|0);
-      $264 = HEAP32[$263>>2]|0;
-      $265 = $$21052 >>> 23;
-      $266 = $265 & 511;
-      $267 = (($$51058) + ($266<<3)|0);
-      __THREW__ = 0;
-      ;HEAP32[$$byval_copy1098>>2]=HEAP32[$267>>2]|0;HEAP32[$$byval_copy1098+4>>2]=HEAP32[$267+4>>2]|0;
-      invoke_viii(154,($1|0),($264|0),($$byval_copy1098|0));
-      $268 = __THREW__; __THREW__ = 0;
-      if ((($268|0) != 0) & ((threwValue|0) != 0)) { $269 = _testSetjmp(HEAP32[$268>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($269|0) == 0) { _longjmp($268|0, threwValue|0); } tempRet0 = (threwValue); } else { $269 = -1; };
-      $270 = tempRet0;
-      $cond1396 = ($269|0)==(1);
-      if ($cond1396) {
-       $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $270;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-       continue L3;
-      }
-      $271 = ((($$61078)) + 4|0);
-      $272 = HEAP32[$271>>2]|0;
-      $$81094$phi = $$81094;$$8$phi = $$8;$$61071$phi = $$61071;$$6$phi = $$6;$$51058$phi = $$51058;$$5$phi = $$5;$$21052 = $272;$$61078 = $271;$$sink$reg2mem$0 = $272;$$81094 = $$81094$phi;$$8 = $$8$phi;$$61071 = $$61071$phi;$$6 = $$6$phi;$$51058 = $$51058$phi;$$5 = $$5$phi;
-      label = 583;
-      continue L19;
-      break;
-     }
-     case 16:  {
-      $273 = ((($1)) + 12|0);
-      $274 = HEAP32[$273>>2]|0;
-      $275 = ((($274)) + 16|0);
-      $276 = HEAP32[$275>>2]|0;
-      $277 = ((($276)) + 32|0);
-      HEAP32[$277>>2] = $$61078;
-      $278 = $$21052 >>> 23;
-      $279 = $278 & 511;
-      $280 = (($$51058) + ($279<<3)|0);
-      $281 = $$21052 >>> 7;
-      $282 = $281 & 65535;
-      $283 = (($$6) + ($282<<2)|0);
-      $284 = HEAP32[$283>>2]|0;
-      __THREW__ = 0;
-      invoke_viii(155,($9|0),($1|0),($284|0));
-      $285 = __THREW__; __THREW__ = 0;
-      if ((($285|0) != 0) & ((threwValue|0) != 0)) { $286 = _testSetjmp(HEAP32[$285>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($286|0) == 0) { _longjmp($285|0, threwValue|0); } tempRet0 = (threwValue); } else { $286 = -1; };
-      $287 = tempRet0;
-      $cond1395 = ($286|0)==(1);
-      if ($cond1395) {
-       $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $287;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-       continue L3;
-      }
-      ;HEAP32[$280>>2]=HEAP32[$9>>2]|0;HEAP32[$280+4>>2]=HEAP32[$9+4>>2]|0;
-      $288 = ((($1)) + 12|0);
-      $289 = HEAP32[$288>>2]|0;
-      $290 = ((($289)) + 16|0);
-      $291 = HEAP32[$290>>2]|0;
-      $292 = ((($291)) + 32|0);
-      HEAP32[$292>>2] = 0;
-      $293 = ((($$61078)) + 4|0);
-      $294 = HEAP32[$293>>2]|0;
-      $$81094$phi = $$81094;$$8$phi = $$8;$$61071$phi = $$61071;$$6$phi = $$6;$$51058$phi = $$51058;$$5$phi = $$5;$$21052 = $294;$$61078 = $293;$$sink$reg2mem$0 = $294;$$81094 = $$81094$phi;$$8 = $$8$phi;$$61071 = $$61071$phi;$$6 = $$6$phi;$$51058 = $$51058$phi;$$5 = $$5$phi;
-      label = 583;
-      continue L19;
-      break;
-     }
-     case 17:  {
-      $295 = $$21052 >>> 7;
-      $296 = $295 & 65535;
-      $297 = (($$6) + ($296<<2)|0);
-      $298 = HEAP32[$297>>2]|0;
-      $299 = $$21052 >>> 23;
-      $300 = $299 & 511;
-      $301 = (($$51058) + ($300<<3)|0);
-      __THREW__ = 0;
-      ;HEAP32[$$byval_copy1099>>2]=HEAP32[$301>>2]|0;HEAP32[$$byval_copy1099+4>>2]=HEAP32[$301+4>>2]|0;
-      invoke_viii(156,($1|0),($298|0),($$byval_copy1099|0));
-      $302 = __THREW__; __THREW__ = 0;
-      if ((($302|0) != 0) & ((threwValue|0) != 0)) { $303 = _testSetjmp(HEAP32[$302>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($303|0) == 0) { _longjmp($302|0, threwValue|0); } tempRet0 = (threwValue); } else { $303 = -1; };
-      $304 = tempRet0;
-      $cond1394 = ($303|0)==(1);
-      if ($cond1394) {
-       $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $304;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-       continue L3;
-      }
-      $305 = ((($$61078)) + 4|0);
-      $306 = HEAP32[$305>>2]|0;
-      $$81094$phi = $$81094;$$8$phi = $$8;$$61071$phi = $$61071;$$6$phi = $$6;$$51058$phi = $$51058;$$5$phi = $$5;$$21052 = $306;$$61078 = $305;$$sink$reg2mem$0 = $306;$$81094 = $$81094$phi;$$8 = $$8$phi;$$61071 = $$61071$phi;$$6 = $$6$phi;$$51058 = $$51058$phi;$$5 = $$5$phi;
-      label = 583;
-      continue L19;
-      break;
-     }
-     case 18:  {
-      $307 = ((($1)) + 12|0);
-      $308 = HEAP32[$307>>2]|0;
-      $309 = ((($308)) + 16|0);
-      $310 = HEAP32[$309>>2]|0;
-      $311 = ((($310)) + 32|0);
-      HEAP32[$311>>2] = $$61078;
-      $312 = $$21052 >>> 7;
-      $313 = $312 & 65535;
-      $314 = (($$6) + ($313<<2)|0);
-      $315 = HEAP32[$314>>2]|0;
-      __THREW__ = 0;
-      invoke_viii(157,($11|0),($1|0),($315|0));
-      $316 = __THREW__; __THREW__ = 0;
-      if ((($316|0) != 0) & ((threwValue|0) != 0)) { $317 = _testSetjmp(HEAP32[$316>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($317|0) == 0) { _longjmp($316|0, threwValue|0); } tempRet0 = (threwValue); } else { $317 = -1; };
-      $318 = tempRet0;
-      $cond1393 = ($317|0)==(1);
-      if ($cond1393) {
-       $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $318;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-       continue L3;
-      }
-      ;HEAP32[$10>>2]=HEAP32[$11>>2]|0;HEAP32[$10+4>>2]=HEAP32[$11+4>>2]|0;
-      $319 = ((($1)) + 12|0);
-      $320 = HEAP32[$319>>2]|0;
-      $321 = ((($320)) + 16|0);
-      $322 = HEAP32[$321>>2]|0;
-      $323 = ((($322)) + 32|0);
-      HEAP32[$323>>2] = 0;
-      $324 = ((($1)) + 12|0);
-      $325 = HEAP32[$324>>2]|0;
-      $326 = ((($325)) + 4|0);
-      $327 = HEAP32[$326>>2]|0;
-      $328 = $$21052 >>> 23;
-      $329 = $328 & 511;
-      $330 = (($327) + ($329<<3)|0);
-      ;HEAP32[$330>>2]=HEAP32[$10>>2]|0;HEAP32[$330+4>>2]=HEAP32[$10+4>>2]|0;
-      $331 = ((($$61078)) + 4|0);
-      $332 = HEAP32[$331>>2]|0;
-      $$81094$phi = $$81094;$$8$phi = $$8;$$61071$phi = $$61071;$$6$phi = $$6;$$5$phi = $$5;$$21052 = $332;$$51058 = $327;$$61078 = $331;$$sink$reg2mem$0 = $332;$$81094 = $$81094$phi;$$8 = $$8$phi;$$61071 = $$61071$phi;$$6 = $$6$phi;$$5 = $$5$phi;
-      label = 583;
-      continue L19;
-      break;
-     }
-     case 19:  {
-      $333 = $$21052 >>> 7;
-      $334 = $333 & 65535;
-      $335 = (($$6) + ($334<<2)|0);
-      $336 = HEAP32[$335>>2]|0;
-      $337 = $$21052 >>> 23;
-      $338 = $337 & 511;
-      $339 = (($$51058) + ($338<<3)|0);
-      __THREW__ = 0;
-      ;HEAP32[$$byval_copy1100>>2]=HEAP32[$339>>2]|0;HEAP32[$$byval_copy1100+4>>2]=HEAP32[$339+4>>2]|0;
-      invoke_viii(158,($1|0),($336|0),($$byval_copy1100|0));
-      $340 = __THREW__; __THREW__ = 0;
-      if ((($340|0) != 0) & ((threwValue|0) != 0)) { $341 = _testSetjmp(HEAP32[$340>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($341|0) == 0) { _longjmp($340|0, threwValue|0); } tempRet0 = (threwValue); } else { $341 = -1; };
-      $342 = tempRet0;
-      $cond1392 = ($341|0)==(1);
-      if ($cond1392) {
-       $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $342;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-       continue L3;
-      }
-      $343 = ((($$61078)) + 4|0);
-      $344 = HEAP32[$343>>2]|0;
-      $$81094$phi = $$81094;$$8$phi = $$8;$$61071$phi = $$61071;$$6$phi = $$6;$$51058$phi = $$51058;$$5$phi = $$5;$$21052 = $344;$$61078 = $343;$$sink$reg2mem$0 = $344;$$81094 = $$81094$phi;$$8 = $$8$phi;$$61071 = $$61071$phi;$$6 = $$6$phi;$$51058 = $$51058$phi;$$5 = $$5$phi;
-      label = 583;
-      continue L19;
-      break;
-     }
-     case 20:  {
-      $345 = $$21052 >>> 23;
-      $346 = $345 & 511;
-      $347 = ((($1)) + 12|0);
-      $348 = HEAP32[$347>>2]|0;
-      $349 = ((($348)) + 16|0);
-      $350 = HEAP32[$349>>2]|0;
-      $351 = ((($350)) + 32|0);
-      HEAP32[$351>>2] = $$61078;
-      $352 = (($$51058) + ($346<<3)|0);
-      $353 = $$21052 >>> 7;
-      $354 = $353 & 65535;
-      $355 = (($$6) + ($354<<2)|0);
-      $356 = HEAP32[$355>>2]|0;
-      __THREW__ = 0;
-      ;HEAP32[$$byval_copy1101>>2]=HEAP32[$352>>2]|0;HEAP32[$$byval_copy1101+4>>2]=HEAP32[$352+4>>2]|0;
-      invoke_viiii(159,($13|0),($1|0),($$byval_copy1101|0),($356|0));
-      $357 = __THREW__; __THREW__ = 0;
-      if ((($357|0) != 0) & ((threwValue|0) != 0)) { $358 = _testSetjmp(HEAP32[$357>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($358|0) == 0) { _longjmp($357|0, threwValue|0); } tempRet0 = (threwValue); } else { $358 = -1; };
-      $359 = tempRet0;
-      $cond1391 = ($358|0)==(1);
-      if ($cond1391) {
-       $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $359;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-       continue L3;
-      }
-      ;HEAP32[$12>>2]=HEAP32[$13>>2]|0;HEAP32[$12+4>>2]=HEAP32[$13+4>>2]|0;
-      $360 = ((($1)) + 12|0);
-      $361 = HEAP32[$360>>2]|0;
-      $362 = ((($361)) + 16|0);
-      $363 = HEAP32[$362>>2]|0;
-      $364 = ((($363)) + 32|0);
-      HEAP32[$364>>2] = 0;
-      $365 = ((($1)) + 12|0);
-      $366 = HEAP32[$365>>2]|0;
-      $367 = ((($366)) + 4|0);
-      $368 = HEAP32[$367>>2]|0;
-      $369 = (($368) + ($346<<3)|0);
-      ;HEAP32[$369>>2]=HEAP32[$12>>2]|0;HEAP32[$369+4>>2]=HEAP32[$12+4>>2]|0;
-      $370 = ((($$61078)) + 4|0);
-      $371 = HEAP32[$370>>2]|0;
-      $$81094$phi = $$81094;$$8$phi = $$8;$$61071$phi = $$61071;$$6$phi = $$6;$$5$phi = $$5;$$21052 = $371;$$51058 = $368;$$61078 = $370;$$sink$reg2mem$0 = $371;$$81094 = $$81094$phi;$$8 = $$8$phi;$$61071 = $$61071$phi;$$6 = $$6$phi;$$5 = $$5$phi;
-      label = 583;
-      continue L19;
-      break;
-     }
-     case 21:  {
-      $372 = $$21052 >>> 23;
-      $373 = $372 & 511;
-      $374 = (($373) + 1)|0;
-      $375 = (($$51058) + ($374<<3)|0);
-      $376 = $$21052 >>> 7;
-      $377 = $376 & 65535;
-      $378 = (($$6) + ($377<<2)|0);
-      $379 = HEAP32[$378>>2]|0;
-      $380 = (($$51058) + ($373<<3)|0);
-      __THREW__ = 0;
-      ;HEAP32[$$byval_copy1102>>2]=HEAP32[$375>>2]|0;HEAP32[$$byval_copy1102+4>>2]=HEAP32[$375+4>>2]|0;
-      ;HEAP32[$$byval_copy1103>>2]=HEAP32[$380>>2]|0;HEAP32[$$byval_copy1103+4>>2]=HEAP32[$380+4>>2]|0;
-      invoke_viiii(160,($1|0),($$byval_copy1102|0),($379|0),($$byval_copy1103|0));
-      $381 = __THREW__; __THREW__ = 0;
-      if ((($381|0) != 0) & ((threwValue|0) != 0)) { $382 = _testSetjmp(HEAP32[$381>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($382|0) == 0) { _longjmp($381|0, threwValue|0); } tempRet0 = (threwValue); } else { $382 = -1; };
-      $383 = tempRet0;
-      $cond1390 = ($382|0)==(1);
-      if ($cond1390) {
-       $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $383;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-       continue L3;
-      }
-      $384 = ((($$61078)) + 4|0);
-      $385 = HEAP32[$384>>2]|0;
-      $$81094$phi = $$81094;$$8$phi = $$8;$$61071$phi = $$61071;$$6$phi = $$6;$$51058$phi = $$51058;$$5$phi = $$5;$$21052 = $385;$$61078 = $384;$$sink$reg2mem$0 = $385;$$81094 = $$81094$phi;$$8 = $$8$phi;$$61071 = $$61071$phi;$$6 = $$6$phi;$$51058 = $$51058$phi;$$5 = $$5$phi;
-      label = 583;
-      continue L19;
-      break;
-     }
-     case 22:  {
-      $386 = $$21052 >>> 23;
-      $387 = $386 & 511;
-      $388 = (($$51058) + ($387<<3)|0);
-      $389 = $$21052 >>> 7;
-      $390 = $389 & 127;
-      __THREW__ = 0;
-      $391 = (invoke_iii(161,($1|0),($390|0))|0);
-      $392 = __THREW__; __THREW__ = 0;
-      if ((($392|0) != 0) & ((threwValue|0) != 0)) { $393 = _testSetjmp(HEAP32[$392>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($393|0) == 0) { _longjmp($392|0, threwValue|0); } tempRet0 = (threwValue); } else { $393 = -1; };
-      $394 = tempRet0;
-      $cond1388 = ($393|0)==(1);
-      if ($cond1388) {
-       $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $394;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-       continue L3;
-      }
-      $395 = ($391|0)!=(0|0);
-      if ($395) {
-       $399 = $$21052 >>> 14;
-       $400 = $399 & 511;
-       $401 = ((($391)) + 12|0);
-       $402 = HEAP32[$401>>2]|0;
-       $403 = (($402) + ($400<<3)|0);
-       ;HEAP32[$388>>2]=HEAP32[$403>>2]|0;HEAP32[$388+4>>2]=HEAP32[$403+4>>2]|0;
-      } else {
-       __THREW__ = 0;
-       invoke_vi(162,($14|0));
-       $396 = __THREW__; __THREW__ = 0;
-       if ((($396|0) != 0) & ((threwValue|0) != 0)) { $397 = _testSetjmp(HEAP32[$396>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($397|0) == 0) { _longjmp($396|0, threwValue|0); } tempRet0 = (threwValue); } else { $397 = -1; };
-       $398 = tempRet0;
-       $cond1389 = ($397|0)==(1);
-       if ($cond1389) {
-        $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $398;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-        continue L3;
-       }
-       ;HEAP32[$388>>2]=HEAP32[$14>>2]|0;HEAP32[$388+4>>2]=HEAP32[$14+4>>2]|0;
-      }
-      $404 = ((($$61078)) + 4|0);
-      $405 = HEAP32[$404>>2]|0;
-      $$81094$phi = $$81094;$$8$phi = $$8;$$61071$phi = $$61071;$$6$phi = $$6;$$51058$phi = $$51058;$$5$phi = $$5;$$21052 = $405;$$61078 = $404;$$sink$reg2mem$0 = $405;$$81094 = $$81094$phi;$$8 = $$8$phi;$$61071 = $$61071$phi;$$6 = $$6$phi;$$51058 = $$51058$phi;$$5 = $$5$phi;
-      label = 583;
-      continue L19;
-      break;
-     }
-     case 23:  {
-      $406 = $$21052 >>> 7;
-      $407 = $406 & 127;
-      __THREW__ = 0;
-      $408 = (invoke_iii(161,($1|0),($407|0))|0);
-      $409 = __THREW__; __THREW__ = 0;
-      if ((($409|0) != 0) & ((threwValue|0) != 0)) { $410 = _testSetjmp(HEAP32[$409>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($410|0) == 0) { _longjmp($409|0, threwValue|0); } tempRet0 = (threwValue); } else { $410 = -1; };
-      $411 = tempRet0;
-      $cond1386 = ($410|0)==(1);
-      if ($cond1386) {
-       $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $411;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-       continue L3;
-      }
-      $412 = ($408|0)!=(0|0);
-      if ($412) {
-       $413 = $$21052 >>> 23;
-       $414 = $413 & 511;
-       $415 = (($$51058) + ($414<<3)|0);
-       $416 = $$21052 >>> 14;
-       $417 = $416 & 511;
-       $418 = ((($408)) + 12|0);
-       $419 = HEAP32[$418>>2]|0;
-       $420 = (($419) + ($417<<3)|0);
-       ;HEAP32[$420>>2]=HEAP32[$415>>2]|0;HEAP32[$420+4>>2]=HEAP32[$415+4>>2]|0;
-       __THREW__ = 0;
-       invoke_vii(163,($1|0),($408|0));
-       $421 = __THREW__; __THREW__ = 0;
-       if ((($421|0) != 0) & ((threwValue|0) != 0)) { $422 = _testSetjmp(HEAP32[$421>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($422|0) == 0) { _longjmp($421|0, threwValue|0); } tempRet0 = (threwValue); } else { $422 = -1; };
-       $423 = tempRet0;
-       $cond1387 = ($422|0)==(1);
-       if ($cond1387) {
-        $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $423;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-        continue L3;
-       }
-      }
-      $424 = ((($$61078)) + 4|0);
-      $425 = HEAP32[$424>>2]|0;
-      $$81094$phi = $$81094;$$8$phi = $$8;$$61071$phi = $$61071;$$6$phi = $$6;$$51058$phi = $$51058;$$5$phi = $$5;$$21052 = $425;$$61078 = $424;$$sink$reg2mem$0 = $425;$$81094 = $$81094$phi;$$8 = $$8$phi;$$61071 = $$61071$phi;$$6 = $$6$phi;$$51058 = $$51058$phi;$$5 = $$5$phi;
-      label = 583;
-      continue L19;
-      break;
-     }
-     case 24:  {
-      $426 = $$21052 >>> 7;
-      $427 = $426 & 65535;
-      $428 = (($427) - 32767)|0;
-      $429 = (($$61078) + ($428<<2)|0);
-      $430 = HEAP32[$429>>2]|0;
-      $$81094$phi = $$81094;$$8$phi = $$8;$$61071$phi = $$61071;$$6$phi = $$6;$$51058$phi = $$51058;$$5$phi = $$5;$$21052 = $430;$$61078 = $429;$$sink$reg2mem$0 = $430;$$81094 = $$81094$phi;$$8 = $$8$phi;$$61071 = $$61071$phi;$$6 = $$6$phi;$$51058 = $$51058$phi;$$5 = $$5$phi;
-      label = 583;
-      continue L19;
-      break;
-     }
-     case 25:  {
-      $431 = $$21052 >>> 23;
-      $432 = $431 & 511;
-      $433 = (($$51058) + ($432<<3)|0);
-      $434 = ((($433)) + 4|0);
-      $435 = HEAP32[$434>>2]|0;
-      $436 = ($435|0)!=(0);
-      if ($436) {
-       $437 = $$21052 >>> 7;
-       $438 = $437 & 65535;
-       $439 = (($438) - 32767)|0;
-       $440 = (($$61078) + ($439<<2)|0);
-       $441 = HEAP32[$440>>2]|0;
-       $$81094$phi = $$81094;$$8$phi = $$8;$$61071$phi = $$61071;$$6$phi = $$6;$$51058$phi = $$51058;$$5$phi = $$5;$$21052 = $441;$$61078 = $440;$$sink$reg2mem$0 = $441;$$81094 = $$81094$phi;$$8 = $$8$phi;$$61071 = $$61071$phi;$$6 = $$6$phi;$$51058 = $$51058$phi;$$5 = $$5$phi;
-       label = 583;
-       continue L19;
-      } else {
-       $442 = ((($$61078)) + 4|0);
-       $443 = HEAP32[$442>>2]|0;
-       $$81094$phi = $$81094;$$8$phi = $$8;$$61071$phi = $$61071;$$6$phi = $$6;$$51058$phi = $$51058;$$5$phi = $$5;$$21052 = $443;$$61078 = $442;$$sink$reg2mem$0 = $443;$$81094 = $$81094$phi;$$8 = $$8$phi;$$61071 = $$61071$phi;$$6 = $$6$phi;$$51058 = $$51058$phi;$$5 = $$5$phi;
-       label = 583;
-       continue L19;
-      }
-      break;
-     }
-     case 26:  {
-      $444 = $$21052 >>> 23;
-      $445 = $444 & 511;
-      $446 = (($$51058) + ($445<<3)|0);
-      $447 = ((($446)) + 4|0);
-      $448 = HEAP32[$447>>2]|0;
-      $449 = ($448|0)!=(0);
-      if ($449) {
-       $455 = ((($$61078)) + 4|0);
-       $456 = HEAP32[$455>>2]|0;
-       $$81094$phi = $$81094;$$8$phi = $$8;$$61071$phi = $$61071;$$6$phi = $$6;$$51058$phi = $$51058;$$5$phi = $$5;$$21052 = $456;$$61078 = $455;$$sink$reg2mem$0 = $456;$$81094 = $$81094$phi;$$8 = $$8$phi;$$61071 = $$61071$phi;$$6 = $$6$phi;$$51058 = $$51058$phi;$$5 = $$5$phi;
-       label = 583;
-       continue L19;
-      } else {
-       $450 = $$21052 >>> 7;
-       $451 = $450 & 65535;
-       $452 = (($451) - 32767)|0;
-       $453 = (($$61078) + ($452<<2)|0);
-       $454 = HEAP32[$453>>2]|0;
-       $$81094$phi = $$81094;$$8$phi = $$8;$$61071$phi = $$61071;$$6$phi = $$6;$$51058$phi = $$51058;$$5$phi = $$5;$$21052 = $454;$$61078 = $453;$$sink$reg2mem$0 = $454;$$81094 = $$81094$phi;$$8 = $$8$phi;$$61071 = $$61071$phi;$$6 = $$6$phi;$$51058 = $$51058$phi;$$5 = $$5$phi;
-       label = 583;
-       continue L19;
-      }
-      break;
-     }
-     case 27:  {
-      $457 = ((($1)) + 12|0);
-      $458 = HEAP32[$457>>2]|0;
-      $459 = ((($458)) + 32|0);
-      $460 = HEAP32[$459>>2]|0;
-      $461 = ((($1)) + 12|0);
-      $462 = HEAP32[$461>>2]|0;
-      $463 = ((($462)) + 16|0);
-      $464 = HEAP32[$463>>2]|0;
-      $465 = ((($464)) + 16|0);
-      $466 = HEAP32[$465>>2]|0;
-      $467 = ($460|0)<=($466|0);
-      if ($467) {
-       $468 = ((($1)) + 12|0);
-       $469 = HEAP32[$468>>2]|0;
-       $470 = ((($469)) + 32|0);
-       $471 = HEAP32[$470>>2]|0;
-       $472 = ($471|0)==(0);
-       $473 = ((($1)) + 12|0);
-       $474 = HEAP32[$473>>2]|0;
-       $475 = ((($474)) + 32|0);
-       if ($472) {
-        $$sink2$reg2mem$0 = 16;
-       } else {
-        $476 = HEAP32[$475>>2]|0;
-        $477 = $476<<1;
-        $$sink2$reg2mem$0 = $477;
-       }
-       HEAP32[$475>>2] = $$sink2$reg2mem$0;
-       $478 = ((($1)) + 12|0);
-       $479 = HEAP32[$478>>2]|0;
-       $480 = ((($479)) + 28|0);
-       $481 = HEAP32[$480>>2]|0;
-       $482 = ((($1)) + 12|0);
-       $483 = HEAP32[$482>>2]|0;
-       $484 = ((($483)) + 32|0);
-       $485 = HEAP32[$484>>2]|0;
-       $486 = $485<<2;
-       __THREW__ = 0;
-       $487 = (invoke_iiii(164,($1|0),($481|0),($486|0))|0);
-       $488 = __THREW__; __THREW__ = 0;
-       if ((($488|0) != 0) & ((threwValue|0) != 0)) { $489 = _testSetjmp(HEAP32[$488>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($489|0) == 0) { _longjmp($488|0, threwValue|0); } tempRet0 = (threwValue); } else { $489 = -1; };
-       $490 = tempRet0;
-       $cond1385 = ($489|0)==(1);
-       if ($cond1385) {
-        $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $490;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-        continue L3;
-       }
-       $491 = ((($1)) + 12|0);
-       $492 = HEAP32[$491>>2]|0;
-       $493 = ((($492)) + 28|0);
-       HEAP32[$493>>2] = $487;
-      }
-      $494 = $$21052 >>> 7;
-      $495 = $494 & 65535;
-      $496 = (($495) - 32767)|0;
-      $497 = (($$61078) + ($496<<2)|0);
-      $498 = ((($1)) + 12|0);
-      $499 = HEAP32[$498>>2]|0;
-      $500 = ((($499)) + 28|0);
-      $501 = HEAP32[$500>>2]|0;
-      $502 = ((($1)) + 12|0);
-      $503 = HEAP32[$502>>2]|0;
-      $504 = ((($503)) + 16|0);
-      $505 = HEAP32[$504>>2]|0;
-      $506 = ((($505)) + 16|0);
-      $507 = HEAP32[$506>>2]|0;
-      $508 = (($507) + 1)|0;
-      HEAP32[$506>>2] = $508;
-      $509 = (($501) + ($507<<2)|0);
-      HEAP32[$509>>2] = $497;
-      $510 = ((($$61078)) + 4|0);
-      $511 = HEAP32[$510>>2]|0;
-      $$81094$phi = $$81094;$$8$phi = $$8;$$61071$phi = $$61071;$$6$phi = $$6;$$51058$phi = $$51058;$$5$phi = $$5;$$21052 = $511;$$61078 = $510;$$sink$reg2mem$0 = $511;$$81094 = $$81094$phi;$$8 = $$8$phi;$$61071 = $$61071$phi;$$6 = $$6$phi;$$51058 = $$51058$phi;$$5 = $$5$phi;
-      label = 583;
-      continue L19;
-      break;
-     }
-     case 28:  {
-      $512 = ((($1)) + 20|0);
-      $513 = HEAP32[$512>>2]|0;
-      $514 = HEAP32[$513>>2]|0;
-      $515 = $514 & 255;
-      $516 = $$21052 >>> 23;
-      $517 = $516 & 511;
-      $518 = (($$51058) + ($517<<3)|0);
-      $519 = ((($518)) + 4|0);
-      HEAP32[$519>>2] = $515;
-      $520 = ((($1)) + 20|0);
-      $521 = HEAP32[$520>>2]|0;
-      $522 = $$21052 >>> 23;
-      $523 = $522 & 511;
-      $524 = (($$51058) + ($523<<3)|0);
-      HEAP32[$524>>2] = $521;
-      $525 = ((($1)) + 20|0);
-      HEAP32[$525>>2] = 0;
-      $526 = ((($$61078)) + 4|0);
-      $527 = HEAP32[$526>>2]|0;
-      $$81094$phi = $$81094;$$8$phi = $$8;$$61071$phi = $$61071;$$6$phi = $$6;$$51058$phi = $$51058;$$5$phi = $$5;$$21052 = $527;$$61078 = $526;$$sink$reg2mem$0 = $527;$$81094 = $$81094$phi;$$8 = $$8$phi;$$61071 = $$61071$phi;$$6 = $$6$phi;$$51058 = $$51058$phi;$$5 = $$5$phi;
-      label = 583;
-      continue L19;
-      break;
-     }
-     case 29:  {
-      $528 = $$21052 >>> 23;
-      $529 = $528 & 511;
-      $$01042 = $529;
-      while(1) {
-       $530 = (($$01042) + -1)|0;
-       $531 = ($$01042|0)!=(0);
-       if (!($531)) {
-        break;
-       }
-       $532 = ((($1)) + 12|0);
-       $533 = HEAP32[$532>>2]|0;
-       $534 = ((($533)) + 16|0);
-       $535 = HEAP32[$534>>2]|0;
-       $536 = ((($535)) + 16|0);
-       $537 = HEAP32[$536>>2]|0;
-       $538 = (($537) + -1)|0;
-       HEAP32[$536>>2] = $538;
-       $$01042 = $530;
-      }
-      $539 = ((($$61078)) + 4|0);
-      $540 = HEAP32[$539>>2]|0;
-      $$81094$phi = $$81094;$$8$phi = $$8;$$61071$phi = $$61071;$$6$phi = $$6;$$51058$phi = $$51058;$$5$phi = $$5;$$21052 = $540;$$61078 = $539;$$sink$reg2mem$0 = $540;$$81094 = $$81094$phi;$$8 = $$8$phi;$$61071 = $$61071$phi;$$6 = $$6$phi;$$51058 = $$51058$phi;$$5 = $$5$phi;
-      label = 583;
-      continue L19;
-      break;
-     }
-     case 30:  {
-      $541 = $$21052 >>> 23;
-      $542 = $541 & 511;
-      $543 = (($$51058) + ($542<<3)|0);
-      $544 = HEAP32[$543>>2]|0;
-      $545 = ((($1)) + 20|0);
-      HEAP32[$545>>2] = $544;
-      $$21045 = $$5;$$21055 = $$51058;$$31062 = $$6;$$31068 = $$61071;$$31075 = $$61078;$$51084 = $$8;$$51091 = $$81094;
-      label = 272;
-      continue L19;
-      break;
-     }
-     case 31:  {
-      $546 = ((($$8)) + 20|0);
-      $547 = HEAP32[$546>>2]|0;
-      $548 = $$21052 >>> 7;
-      $549 = $548 & 65535;
-      $550 = (($547) + ($549<<2)|0);
-      $551 = HEAP32[$550>>2]|0;
-      __THREW__ = 0;
-      $552 = (invoke_iii(165,($1|0),($551|0))|0);
-      $553 = __THREW__; __THREW__ = 0;
-      if ((($553|0) != 0) & ((threwValue|0) != 0)) { $554 = _testSetjmp(HEAP32[$553>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($554|0) == 0) { _longjmp($553|0, threwValue|0); } tempRet0 = (threwValue); } else { $554 = -1; };
-      $555 = tempRet0;
-      $cond1383 = ($554|0)==(1);
-      if ($cond1383) {
-       $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $555;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-       continue L3;
-      }
-      $556 = ((($1)) + 12|0);
-      $557 = HEAP32[$556>>2]|0;
-      $558 = ((($557)) + 40|0);
-      $559 = HEAP32[$558>>2]|0;
-      $560 = ((($1)) + 12|0);
-      $561 = HEAP32[$560>>2]|0;
-      $562 = ((($561)) + 16|0);
-      $563 = HEAP32[$562>>2]|0;
-      $564 = ((($563)) + 20|0);
-      $565 = HEAP32[$564>>2]|0;
-      $566 = ($559|0)<=($565|0);
-      if ($566) {
-       $567 = ((($1)) + 12|0);
-       $568 = HEAP32[$567>>2]|0;
-       $569 = ((($568)) + 40|0);
-       $570 = HEAP32[$569>>2]|0;
-       $571 = ($570|0)==(0);
-       $572 = ((($1)) + 12|0);
-       $573 = HEAP32[$572>>2]|0;
-       $574 = ((($573)) + 40|0);
-       if ($571) {
-        $$sink3$reg2mem$0 = 16;
-       } else {
-        $575 = HEAP32[$574>>2]|0;
-        $576 = $575<<1;
-        $$sink3$reg2mem$0 = $576;
-       }
-       HEAP32[$574>>2] = $$sink3$reg2mem$0;
-       $577 = ((($1)) + 12|0);
-       $578 = HEAP32[$577>>2]|0;
-       $579 = ((($578)) + 36|0);
-       $580 = HEAP32[$579>>2]|0;
-       $581 = ((($1)) + 12|0);
-       $582 = HEAP32[$581>>2]|0;
-       $583 = ((($582)) + 40|0);
-       $584 = HEAP32[$583>>2]|0;
-       $585 = $584<<2;
-       __THREW__ = 0;
-       $586 = (invoke_iiii(164,($1|0),($580|0),($585|0))|0);
-       $587 = __THREW__; __THREW__ = 0;
-       if ((($587|0) != 0) & ((threwValue|0) != 0)) { $588 = _testSetjmp(HEAP32[$587>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($588|0) == 0) { _longjmp($587|0, threwValue|0); } tempRet0 = (threwValue); } else { $588 = -1; };
-       $589 = tempRet0;
-       $cond1384 = ($588|0)==(1);
-       if ($cond1384) {
-        $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $589;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-        continue L3;
-       }
-       $590 = ((($1)) + 12|0);
-       $591 = HEAP32[$590>>2]|0;
-       $592 = ((($591)) + 36|0);
-       HEAP32[$592>>2] = $586;
-      }
-      $593 = ((($1)) + 12|0);
-      $594 = HEAP32[$593>>2]|0;
-      $595 = ((($594)) + 36|0);
-      $596 = HEAP32[$595>>2]|0;
-      $597 = ((($1)) + 12|0);
-      $598 = HEAP32[$597>>2]|0;
-      $599 = ((($598)) + 16|0);
-      $600 = HEAP32[$599>>2]|0;
-      $601 = ((($600)) + 20|0);
-      $602 = HEAP32[$601>>2]|0;
-      $603 = (($602) + 1)|0;
-      HEAP32[$601>>2] = $603;
-      $604 = (($596) + ($602<<2)|0);
-      HEAP32[$604>>2] = $552;
-      $605 = ((($1)) + 92|0);
-      $606 = ((($605)) + 416|0);
-      HEAP32[$606>>2] = $$11049;
-      $607 = ((($$61078)) + 4|0);
-      $608 = HEAP32[$607>>2]|0;
-      $$81094$phi = $$81094;$$8$phi = $$8;$$61071$phi = $$61071;$$6$phi = $$6;$$51058$phi = $$51058;$$5$phi = $$5;$$21052 = $608;$$61078 = $607;$$sink$reg2mem$0 = $608;$$81094 = $$81094$phi;$$8 = $$8$phi;$$61071 = $$61071$phi;$$6 = $$6$phi;$$51058 = $$51058$phi;$$5 = $$5$phi;
-      label = 583;
-      continue L19;
-      break;
-     }
-     case 32:  {
-      $609 = $$21052 >>> 23;
-      $610 = $609 & 511;
-      $611 = ((($1)) + 12|0);
-      $612 = HEAP32[$611>>2]|0;
-      $613 = ((($612)) + 16|0);
-      $614 = HEAP32[$613>>2]|0;
-      $615 = ((($614)) + 20|0);
-      $616 = HEAP32[$615>>2]|0;
-      $$01040 = $616;$$01041 = 0;
-      while(1) {
-       $617 = ($$01041|0)<($610|0);
-       if (!($617)) {
-        break;
-       }
-       $618 = ((($1)) + 12|0);
-       $619 = HEAP32[$618>>2]|0;
-       $620 = ((($619)) + 20|0);
-       $621 = HEAP32[$620>>2]|0;
-       $622 = ($614|0)==($621|0);
-       if (!($622)) {
-        $623 = ((($614)) + -48|0);
-        $624 = ((($623)) + 20|0);
-        $625 = HEAP32[$624>>2]|0;
-        $626 = ($$01040|0)>($625|0);
-        if (!($626)) {
-         break;
-        }
-       }
-       $627 = (($$01040) + -1)|0;
-       __THREW__ = 0;
-       invoke_vii(166,($1|0),($627|0));
-       $628 = __THREW__; __THREW__ = 0;
-       if ((($628|0) != 0) & ((threwValue|0) != 0)) { $629 = _testSetjmp(HEAP32[$628>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($629|0) == 0) { _longjmp($628|0, threwValue|0); } tempRet0 = (threwValue); } else { $629 = -1; };
-       $630 = tempRet0;
-       $cond1382 = ($629|0)==(1);
-       if ($cond1382) {
-        $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $630;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-        continue L3;
-       }
-       $631 = ((($1)) + 92|0);
-       $632 = ((($631)) + 416|0);
-       HEAP32[$632>>2] = $$11049;
-       $633 = (($$01041) + 1)|0;
-       $$01040 = $627;$$01041 = $633;
-      }
-      $634 = ((($$61078)) + 4|0);
-      $635 = HEAP32[$634>>2]|0;
-      $$81094$phi = $$81094;$$8$phi = $$8;$$61071$phi = $$61071;$$6$phi = $$6;$$51058$phi = $$51058;$$5$phi = $$5;$$21052 = $635;$$61078 = $634;$$sink$reg2mem$0 = $635;$$81094 = $$81094$phi;$$8 = $$8$phi;$$61071 = $$61071$phi;$$6 = $$6$phi;$$51058 = $$51058$phi;$$5 = $$5$phi;
-      label = 583;
-      continue L19;
-      break;
-     }
-     case 33:  {
-      $$01050 = $$21052;
-      label = 90;
-      break;
-     }
-     case 34:  {
-      $3045 = $$21052 >>> 7;
-      $3046 = $3045 & 65535;
-      $3047 = (($$61071) + ($3046<<3)|0);
-      __THREW__ = 0;
-      ;HEAP32[$$byval_copy1154>>2]=HEAP32[$3047>>2]|0;HEAP32[$$byval_copy1154+4>>2]=HEAP32[$3047+4>>2]|0;
-      invoke_viii(191,($85|0),($1|0),($$byval_copy1154|0));
-      $3048 = __THREW__; __THREW__ = 0;
-      if ((($3048|0) != 0) & ((threwValue|0) != 0)) { $3049 = _testSetjmp(HEAP32[$3048>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($3049|0) == 0) { _longjmp($3048|0, threwValue|0); } tempRet0 = (threwValue); } else { $3049 = -1; };
-      $3050 = tempRet0;
-      $cond1362 = ($3049|0)==(1);
-      if ($cond1362) {
-       $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $3050;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-       continue L3;
-      }
-      $3051 = $$21052 >>> 23;
-      $3052 = $3051 & 511;
-      $3053 = ($3052|0)==(0);
-      if ($3053) {
-       __THREW__ = 0;
-       $3054 = (invoke_iii(135,($1|0),(68266|0))|0);
-       $3055 = __THREW__; __THREW__ = 0;
-       if ((($3055|0) != 0) & ((threwValue|0) != 0)) { $3056 = _testSetjmp(HEAP32[$3055>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($3056|0) == 0) { _longjmp($3055|0, threwValue|0); } tempRet0 = (threwValue); } else { $3056 = -1; };
-       $3057 = tempRet0;
-       $cond1365 = ($3056|0)==(1);
-       if ($cond1365) {
-        $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $3057;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-        continue L3;
-       }
-       __THREW__ = 0;
-       ;HEAP32[$$byval_copy1155>>2]=HEAP32[$85>>2]|0;HEAP32[$$byval_copy1155+4>>2]=HEAP32[$85+4>>2]|0;
-       invoke_viiii(172,($87|0),($1|0),($3054|0),($$byval_copy1155|0));
-       $3058 = __THREW__; __THREW__ = 0;
-       if ((($3058|0) != 0) & ((threwValue|0) != 0)) { $3059 = _testSetjmp(HEAP32[$3058>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($3059|0) == 0) { _longjmp($3058|0, threwValue|0); } tempRet0 = (threwValue); } else { $3059 = -1; };
-       $3060 = tempRet0;
-       $cond1366 = ($3059|0)==(1);
-       if ($cond1366) {
-        $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $3060;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-        continue L3;
-       }
-       ;HEAP32[$86>>2]=HEAP32[$87>>2]|0;HEAP32[$86+4>>2]=HEAP32[$87+4>>2]|0;
-      } else {
-       __THREW__ = 0;
-       $3061 = (invoke_iii(135,($1|0),(56833|0))|0);
-       $3062 = __THREW__; __THREW__ = 0;
-       if ((($3062|0) != 0) & ((threwValue|0) != 0)) { $3063 = _testSetjmp(HEAP32[$3062>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($3063|0) == 0) { _longjmp($3062|0, threwValue|0); } tempRet0 = (threwValue); } else { $3063 = -1; };
-       $3064 = tempRet0;
-       $cond1363 = ($3063|0)==(1);
-       if ($cond1363) {
-        $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $3064;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-        continue L3;
-       }
-       __THREW__ = 0;
-       ;HEAP32[$$byval_copy1156>>2]=HEAP32[$85>>2]|0;HEAP32[$$byval_copy1156+4>>2]=HEAP32[$85+4>>2]|0;
-       invoke_viiii(172,($88|0),($1|0),($3061|0),($$byval_copy1156|0));
-       $3065 = __THREW__; __THREW__ = 0;
-       if ((($3065|0) != 0) & ((threwValue|0) != 0)) { $3066 = _testSetjmp(HEAP32[$3065>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($3066|0) == 0) { _longjmp($3065|0, threwValue|0); } tempRet0 = (threwValue); } else { $3066 = -1; };
-       $3067 = tempRet0;
-       $cond1364 = ($3066|0)==(1);
-       if ($cond1364) {
-        $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $3067;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-        continue L3;
-       }
-       ;HEAP32[$86>>2]=HEAP32[$88>>2]|0;HEAP32[$86+4>>2]=HEAP32[$88+4>>2]|0;
-      }
-      $3068 = HEAP32[$86>>2]|0;
-      $3069 = ((($1)) + 20|0);
-      HEAP32[$3069>>2] = $3068;
-      $$21045 = $$5;$$21055 = $$51058;$$31062 = $$6;$$31068 = $$61071;$$31075 = $$61078;$$51084 = $$8;$$51091 = $$81094;
-      label = 272;
-      continue L19;
-      break;
-     }
-     case 35:  {
-      $834 = ((($$61078)) + 4|0);
-      $835 = HEAP32[$834>>2]|0;
-      $$81094$phi = $$81094;$$8$phi = $$8;$$61071$phi = $$61071;$$6$phi = $$6;$$51058$phi = $$51058;$$5$phi = $$5;$$21052 = $835;$$61078 = $834;$$sink$reg2mem$0 = $835;$$81094 = $$81094$phi;$$8 = $$8$phi;$$61071 = $$61071$phi;$$6 = $$6$phi;$$51058 = $$51058$phi;$$5 = $$5$phi;
-      label = 583;
-      continue L19;
-      break;
-     }
-     case 36:  {
-      $836 = ((($1)) + 12|0);
-      $837 = HEAP32[$836>>2]|0;
-      $838 = ((($837)) + 4|0);
-      $839 = HEAP32[$838>>2]|0;
-      ;HEAP32[$23>>2]=HEAP32[$839>>2]|0;HEAP32[$23+4>>2]=HEAP32[$839+4>>2]|0;
-      $840 = HEAP32[$23>>2]|0;
-      $841 = ((($1)) + 12|0);
-      $842 = HEAP32[$841>>2]|0;
-      $843 = ((($842)) + 16|0);
-      $844 = HEAP32[$843>>2]|0;
-      $845 = ((($840)) + 16|0);
-      $846 = HEAP32[$845>>2]|0;
-      $847 = ((($844)) + 44|0);
-      HEAP32[$847>>2] = $846;
-      $848 = ((($844)) + 4|0);
-      HEAP32[$848>>2] = $840;
-      $849 = ((($840)) + 20|0);
-      $850 = HEAP32[$849>>2]|0;
-      $851 = ($850|0)!=(0|0);
-      if ($851) {
-       $852 = ((($840)) + 20|0);
-       $853 = HEAP32[$852>>2]|0;
-       $854 = ((($853)) + 16|0);
-       $855 = HEAP32[$854>>2]|0;
-       $856 = ($855|0)!=(0);
-       if ($856) {
-        $857 = ((($840)) + 20|0);
-        $858 = HEAP32[$857>>2]|0;
-        $859 = ((($858)) + 16|0);
-        $860 = HEAP32[$859>>2]|0;
-        HEAP32[$844>>2] = $860;
-       }
-       $861 = ((($840)) + 20|0);
-       $862 = HEAP32[$861>>2]|0;
-       $863 = ((($862)) + 12|0);
-       $864 = HEAP32[$863>>2]|0;
-       $865 = ($864|0)!=(0|0);
-       if (!($865)) {
-        $866 = ((($1)) + 12|0);
-        $867 = HEAP32[$866>>2]|0;
-        $868 = ((($867)) + 4|0);
-        $869 = HEAP32[$868>>2]|0;
-        $870 = ((($840)) + 20|0);
-        $871 = HEAP32[$870>>2]|0;
-        $872 = ((($871)) + 12|0);
-        HEAP32[$872>>2] = $869;
-       }
-      }
-      $873 = HEAP32[$840>>2]|0;
-      $874 = $873 >>> 11;
-      $875 = $874 & 128;
-      $876 = ($875|0)!=(0);
-      if ($876) {
-       $877 = ((($840)) + 12|0);
-       $878 = HEAP32[$877>>2]|0;
-       __THREW__ = 0;
-       ;HEAP32[$$byval_copy1110>>2]=HEAP32[$23>>2]|0;HEAP32[$$byval_copy1110+4>>2]=HEAP32[$23+4>>2]|0;
-       invoke_viii($878|0,($24|0),($1|0),($$byval_copy1110|0));
-       $879 = __THREW__; __THREW__ = 0;
-       if ((($879|0) != 0) & ((threwValue|0) != 0)) { $880 = _testSetjmp(HEAP32[$879>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($880|0) == 0) { _longjmp($879|0, threwValue|0); } tempRet0 = (threwValue); } else { $880 = -1; };
-       $881 = tempRet0;
-       $cond1359 = ($880|0)==(1);
-       if ($cond1359) {
-        $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $881;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-        continue L3;
-       }
-       ;HEAP32[$23>>2]=HEAP32[$24>>2]|0;HEAP32[$23+4>>2]=HEAP32[$24+4>>2]|0;
-       __THREW__ = 0;
-       invoke_vii(146,($1|0),($$11049|0));
-       $882 = __THREW__; __THREW__ = 0;
-       if ((($882|0) != 0) & ((threwValue|0) != 0)) { $883 = _testSetjmp(HEAP32[$882>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($883|0) == 0) { _longjmp($882|0, threwValue|0); } tempRet0 = (threwValue); } else { $883 = -1; };
-       $884 = tempRet0;
-       $cond1360 = ($883|0)==(1);
-       if ($cond1360) {
-        $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $884;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-        continue L3;
-       }
-       $885 = ((($1)) + 20|0);
-       $886 = HEAP32[$885>>2]|0;
-       $887 = ($886|0)!=(0|0);
-       if ($887) {
-        $$21045 = $$5;$$21055 = $$51058;$$31062 = $$6;$$31068 = $$61071;$$31075 = $$61078;$$51084 = $$8;$$51091 = $$81094;
-        label = 272;
-        continue L19;
-       }
-       $888 = ((($1)) + 12|0);
-       $889 = HEAP32[$888>>2]|0;
-       $890 = ((($889)) + 16|0);
-       $891 = HEAP32[$890>>2]|0;
-       $892 = ((($891)) + 8|0);
-       $893 = HEAP32[$892>>2]|0;
-       $894 = ((($1)) + 12|0);
-       $895 = HEAP32[$894>>2]|0;
-       $896 = ((($895)) + 4|0);
-       HEAP32[$896>>2] = $893;
-       $897 = ((($891)) + 40|0);
-       $898 = HEAP32[$897>>2]|0;
-       $899 = (($893) + ($898<<3)|0);
-       ;HEAP32[$899>>2]=HEAP32[$23>>2]|0;HEAP32[$899+4>>2]=HEAP32[$23+4>>2]|0;
-       $900 = ((($891)) + 28|0);
-       $901 = HEAP32[$900>>2]|0;
-       __THREW__ = 0;
-       invoke_vi(132,($1|0));
-       $902 = __THREW__; __THREW__ = 0;
-       if ((($902|0) != 0) & ((threwValue|0) != 0)) { $903 = _testSetjmp(HEAP32[$902>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($903|0) == 0) { _longjmp($902|0, threwValue|0); } tempRet0 = (threwValue); } else { $903 = -1; };
-       $904 = tempRet0;
-       $cond1361 = ($903|0)==(1);
-       if ($cond1361) {
-        $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $893;$$11060 = $$6;$$11066 = $$61071;$$11073 = $901;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $904;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-        continue L3;
-       }
-       $905 = ((($1)) + 12|0);
-       $906 = HEAP32[$905>>2]|0;
-       $907 = ((($906)) + 16|0);
-       $908 = HEAP32[$907>>2]|0;
-       $909 = ((($908)) + 4|0);
-       $910 = HEAP32[$909>>2]|0;
-       $911 = ((($910)) + 12|0);
-       $912 = HEAP32[$911>>2]|0;
-       $913 = ((($912)) + 12|0);
-       $914 = HEAP32[$913>>2]|0;
-       $915 = ((($912)) + 16|0);
-       $916 = HEAP32[$915>>2]|0;
-       $917 = HEAP32[$901>>2]|0;
-       $$81094$phi = $$81094;$$5$phi = $$5;$$21052 = $917;$$51058 = $893;$$6 = $916;$$61071 = $914;$$61078 = $901;$$8 = $912;$$sink$reg2mem$0 = $917;$$81094 = $$81094$phi;$$5 = $$5$phi;
-       label = 583;
-       continue L19;
-      }
-      $918 = ((($840)) + 12|0);
-      $919 = HEAP32[$918>>2]|0;
-      $920 = ($919|0)!=(0|0);
-      if (!($920)) {
-       $921 = ((($1)) + 12|0);
-       $922 = HEAP32[$921>>2]|0;
-       $923 = ((($922)) + 4|0);
-       $924 = HEAP32[$923>>2]|0;
-       __THREW__ = 0;
-       invoke_vi(162,($25|0));
-       $925 = __THREW__; __THREW__ = 0;
-       if ((($925|0) != 0) & ((threwValue|0) != 0)) { $926 = _testSetjmp(HEAP32[$925>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($926|0) == 0) { _longjmp($925|0, threwValue|0); } tempRet0 = (threwValue); } else { $926 = -1; };
-       $927 = tempRet0;
-       $cond1356 = ($926|0)==(1);
-       if ($cond1356) {
-        $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $919;$$11087 = $840;$$reg2mem1002$0 = $927;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-        continue L3;
-       }
-       ;HEAP32[$924>>2]=HEAP32[$25>>2]|0;HEAP32[$924+4>>2]=HEAP32[$25+4>>2]|0;
-       $$31082 = $919;$$31089 = $840;
-       label = 270;
-       break L50;
-      }
-      $928 = ((($919)) + 12|0);
-      $929 = HEAP32[$928>>2]|0;
-      $930 = ((($919)) + 16|0);
-      $931 = HEAP32[$930>>2]|0;
-      $932 = ((($919)) + 2|0);
-      $933 = HEAP16[$932>>1]|0;
-      $934 = $933&65535;
-      $935 = ((($844)) + 12|0);
-      HEAP32[$935>>2] = $934;
-      $936 = ((($844)) + 36|0);
-      $937 = HEAP32[$936>>2]|0;
-      $938 = ($937|0)<(0);
-      $939 = ((($919)) + 2|0);
-      $940 = HEAP16[$939>>1]|0;
-      $941 = $940&65535;
-      if ($938) {
-       $942 = ($941|0)<(3);
-       if ($942) {
-        $$reg2mem998$0 = 3;
-       } else {
-        $943 = ((($919)) + 2|0);
-        $944 = HEAP16[$943>>1]|0;
-        $945 = $944&65535;
-        $$reg2mem998$0 = $945;
-       }
-       __THREW__ = 0;
-       invoke_viii(142,($1|0),($$reg2mem998$0|0),3);
-       $946 = __THREW__; __THREW__ = 0;
-       if ((($946|0) != 0) & ((threwValue|0) != 0)) { $947 = _testSetjmp(HEAP32[$946>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($947|0) == 0) { _longjmp($946|0, threwValue|0); } tempRet0 = (threwValue); } else { $947 = -1; };
-       $948 = tempRet0;
-       $cond1358 = ($947|0)==(1);
-       if ($cond1358) {
-        $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $931;$$11066 = $929;$$11073 = $$61078;$$11080 = $919;$$11087 = $840;$$reg2mem1002$0 = $948;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-        continue L3;
-       }
-      } else {
-       $949 = ((($844)) + 36|0);
-       $950 = HEAP32[$949>>2]|0;
-       $951 = (($950) + 2)|0;
-       __THREW__ = 0;
-       invoke_viii(142,($1|0),($941|0),($951|0));
-       $952 = __THREW__; __THREW__ = 0;
-       if ((($952|0) != 0) & ((threwValue|0) != 0)) { $953 = _testSetjmp(HEAP32[$952>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($953|0) == 0) { _longjmp($952|0, threwValue|0); } tempRet0 = (threwValue); } else { $953 = -1; };
-       $954 = tempRet0;
-       $cond1357 = ($953|0)==(1);
-       if ($cond1357) {
-        $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $931;$$11066 = $929;$$11073 = $$61078;$$11080 = $919;$$11087 = $840;$$reg2mem1002$0 = $954;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-        continue L3;
-       }
-      }
-      $955 = ((($1)) + 12|0);
-      $956 = HEAP32[$955>>2]|0;
-      $957 = ((($956)) + 4|0);
-      $958 = HEAP32[$957>>2]|0;
-      $959 = ((($840)) + 20|0);
-      $960 = HEAP32[$959>>2]|0;
-      $961 = ((($960)) + 12|0);
-      $962 = HEAP32[$961>>2]|0;
-      ;HEAP32[$958>>2]=HEAP32[$962>>2]|0;HEAP32[$958+4>>2]=HEAP32[$962+4>>2]|0;
-      $963 = ((($919)) + 8|0);
-      $964 = HEAP32[$963>>2]|0;
-      $965 = HEAP32[$964>>2]|0;
-      $$5$phi = $$5;$$21052 = $965;$$51058 = $958;$$6 = $931;$$61071 = $929;$$61078 = $964;$$8 = $919;$$81094 = $840;$$sink$reg2mem$0 = $965;$$5 = $$5$phi;
-      label = 583;
-      continue L19;
-      break;
-     }
-     case 37:  {
-      $966 = ((($1)) + 12|0);
-      $967 = HEAP32[$966>>2]|0;
-      $968 = ((($967)) + 16|0);
-      $969 = HEAP32[$968>>2]|0;
-      $970 = HEAP32[$969>>2]|0;
-      $971 = $$21052 >>> 23;
-      $972 = $971 & 511;
-      $973 = $$21052 >>> 7;
-      $974 = $973 & 127;
-      $975 = ($970|0)==(0);
-      if ($975) {
-       __THREW__ = 0;
-       $976 = (invoke_iii(135,($1|0),(67968|0))|0);
-       $977 = __THREW__; __THREW__ = 0;
-       if ((($977|0) != 0) & ((threwValue|0) != 0)) { $978 = _testSetjmp(HEAP32[$977>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($978|0) == 0) { _longjmp($977|0, threwValue|0); } tempRet0 = (threwValue); } else { $978 = -1; };
-       $979 = tempRet0;
-       $cond1353 = ($978|0)==(1);
-       if ($cond1353) {
-        $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $979;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-        continue L3;
-       }
-       __THREW__ = 0;
-       invoke_viiii(171,($29|0),($1|0),(56724|0),30);
-       $980 = __THREW__; __THREW__ = 0;
-       if ((($980|0) != 0) & ((threwValue|0) != 0)) { $981 = _testSetjmp(HEAP32[$980>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($981|0) == 0) { _longjmp($980|0, threwValue|0); } tempRet0 = (threwValue); } else { $981 = -1; };
-       $982 = tempRet0;
-       $cond1354 = ($981|0)==(1);
-       if ($cond1354) {
-        $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $982;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-        continue L3;
-       }
-       __THREW__ = 0;
-       ;HEAP32[$$byval_copy1111>>2]=HEAP32[$29>>2]|0;HEAP32[$$byval_copy1111+4>>2]=HEAP32[$29+4>>2]|0;
-       invoke_viiii(172,($30|0),($1|0),($976|0),($$byval_copy1111|0));
-       $983 = __THREW__; __THREW__ = 0;
-       if ((($983|0) != 0) & ((threwValue|0) != 0)) { $984 = _testSetjmp(HEAP32[$983>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($984|0) == 0) { _longjmp($983|0, threwValue|0); } tempRet0 = (threwValue); } else { $984 = -1; };
-       $985 = tempRet0;
-       $cond1355 = ($984|0)==(1);
-       if ($cond1355) {
-        $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $985;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-        continue L3;
-       }
-       ;HEAP32[$28>>2]=HEAP32[$30>>2]|0;HEAP32[$28+4>>2]=HEAP32[$30+4>>2]|0;
-       $986 = HEAP32[$28>>2]|0;
-       $987 = ((($1)) + 20|0);
-       HEAP32[$987>>2] = $986;
-       $$21045 = $$5;$$21055 = $$51058;$$31062 = $$6;$$31068 = $$61071;$$31075 = $$61078;$$51084 = $$8;$$51091 = $$81094;
-       label = 272;
-       continue L19;
-      }
-      ;HEAP32[$26>>2]=HEAP32[$$51058>>2]|0;HEAP32[$26+4>>2]=HEAP32[$$51058+4>>2]|0;
-      $988 = ((($1)) + 12|0);
-      $989 = HEAP32[$988>>2]|0;
-      $990 = ((($989)) + 16|0);
-      $991 = HEAP32[$990>>2]|0;
-      $992 = ((($991)) + 44|0);
-      $993 = HEAP32[$992>>2]|0;
-      $994 = ((($993)) + 20|0);
-      $995 = HEAP32[$994>>2]|0;
-      HEAP32[$27>>2] = $995;
-      __THREW__ = 0;
-      $996 = (invoke_iiii(139,($1|0),($27|0),($970|0))|0);
-      $997 = __THREW__; __THREW__ = 0;
-      if ((($997|0) != 0) & ((threwValue|0) != 0)) { $998 = _testSetjmp(HEAP32[$997>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($998|0) == 0) { _longjmp($997|0, threwValue|0); } tempRet0 = (threwValue); } else { $998 = -1; };
-      $999 = tempRet0;
-      $cond1341 = ($998|0)==(1);
-      if ($cond1341) {
-       $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $999;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-       continue L3;
-      }
-      $1000 = ($996|0)!=(0|0);
-      do {
-       if ($1000) {
-        $$01034 = $974;$$01035 = $970;$$01036 = $996;
-       } else {
-        __THREW__ = 0;
-        $1001 = (invoke_iiii(140,($1|0),(65621|0),14)|0);
-        $1002 = __THREW__; __THREW__ = 0;
-        if ((($1002|0) != 0) & ((threwValue|0) != 0)) { $1003 = _testSetjmp(HEAP32[$1002>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($1003|0) == 0) { _longjmp($1002|0, threwValue|0); } tempRet0 = (threwValue); } else { $1003 = -1; };
-        $1004 = tempRet0;
-        $cond1342 = ($1003|0)==(1);
-        if ($cond1342) {
-         $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $1004;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-         continue L3;
-        }
-        __THREW__ = 0;
-        $1005 = (invoke_iiii(139,($1|0),($27|0),($1001|0))|0);
-        $1006 = __THREW__; __THREW__ = 0;
-        if ((($1006|0) != 0) & ((threwValue|0) != 0)) { $1007 = _testSetjmp(HEAP32[$1006>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($1007|0) == 0) { _longjmp($1006|0, threwValue|0); } tempRet0 = (threwValue); } else { $1007 = -1; };
-        $1008 = tempRet0;
-        $cond1343 = ($1007|0)==(1);
-        if ($cond1343) {
-         $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $1008;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-         continue L3;
-        }
-        $1009 = ($974|0)==(127);
-        if (!($1009)) {
-         $1019 = (($$51058) + ($972<<3)|0);
-         $1020 = ((($1019)) + 16|0);
-         $1021 = (($$51058) + ($972<<3)|0);
-         $1022 = ((($1021)) + 8|0);
-         $1023 = (($974) + 1)|0;
-         __THREW__ = 0;
-         invoke_viii(170,($1020|0),($1022|0),($1023|0));
-         $1024 = __THREW__; __THREW__ = 0;
-         if ((($1024|0) != 0) & ((threwValue|0) != 0)) { $1025 = _testSetjmp(HEAP32[$1024>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($1025|0) == 0) { _longjmp($1024|0, threwValue|0); } tempRet0 = (threwValue); } else { $1025 = -1; };
-         $1026 = tempRet0;
-         $cond1344 = ($1025|0)==(1);
-         if ($cond1344) {
-          $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $1026;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-          continue L3;
-         }
-         $1027 = (($972) + 1)|0;
-         $1028 = (($$51058) + ($1027<<3)|0);
-         $1029 = ((($1028)) + 4|0);
-         HEAP32[$1029>>2] = 4;
-         $1030 = HEAP32[$969>>2]|0;
-         $1031 = (($972) + 1)|0;
-         $1032 = (($$51058) + ($1031<<3)|0);
-         HEAP32[$1032>>2] = $1030;
-         $$01034 = $1023;$$01035 = $1001;$$01036 = $1005;
-         break;
-        }
-        $1010 = (($972) + 1)|0;
-        $1011 = (($$51058) + ($1010<<3)|0);
-        $1012 = HEAP32[$969>>2]|0;
-        __THREW__ = 0;
-        invoke_vii(143,($31|0),($1012|0));
-        $1013 = __THREW__; __THREW__ = 0;
-        if ((($1013|0) != 0) & ((threwValue|0) != 0)) { $1014 = _testSetjmp(HEAP32[$1013>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($1014|0) == 0) { _longjmp($1013|0, threwValue|0); } tempRet0 = (threwValue); } else { $1014 = -1; };
-        $1015 = tempRet0;
-        $cond1345 = ($1014|0)==(1);
-        if ($cond1345) {
-         $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $1015;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-         continue L3;
-        }
-        __THREW__ = 0;
-        ;HEAP32[$$byval_copy1112>>2]=HEAP32[$1011>>2]|0;HEAP32[$$byval_copy1112+4>>2]=HEAP32[$1011+4>>2]|0;
-        ;HEAP32[$$byval_copy1113>>2]=HEAP32[$31>>2]|0;HEAP32[$$byval_copy1113+4>>2]=HEAP32[$31+4>>2]|0;
-        invoke_viiii(169,($32|0),($1|0),($$byval_copy1112|0),($$byval_copy1113|0));
-        $1016 = __THREW__; __THREW__ = 0;
-        if ((($1016|0) != 0) & ((threwValue|0) != 0)) { $1017 = _testSetjmp(HEAP32[$1016>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($1017|0) == 0) { _longjmp($1016|0, threwValue|0); } tempRet0 = (threwValue); } else { $1017 = -1; };
-        $1018 = tempRet0;
-        $cond1346 = ($1017|0)==(1);
-        if ($cond1346) {
-         $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $1018;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-         continue L3;
-        }
-        $$01034 = $974;$$01035 = $1001;$$01036 = $1005;
-       }
-      } while(0);
-      __THREW__ = 0;
-      $1033 = (invoke_ii(141,($1|0))|0);
-      $1034 = __THREW__; __THREW__ = 0;
-      if ((($1034|0) != 0) & ((threwValue|0) != 0)) { $1035 = _testSetjmp(HEAP32[$1034>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($1035|0) == 0) { _longjmp($1034|0, threwValue|0); } tempRet0 = (threwValue); } else { $1035 = -1; };
-      $1036 = tempRet0;
-      $cond1347 = ($1035|0)==(1);
-      if ($cond1347) {
-       $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $1036;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-       continue L3;
-      }
-      HEAP32[$1033>>2] = $$01035;
-      $1037 = ((($1033)) + 4|0);
-      HEAP32[$1037>>2] = $$01036;
-      $1038 = ((($1)) + 12|0);
-      $1039 = HEAP32[$1038>>2]|0;
-      $1040 = ((($1039)) + 4|0);
-      $1041 = HEAP32[$1040>>2]|0;
-      $1042 = ((($1033)) + 8|0);
-      HEAP32[$1042>>2] = $1041;
-      $1043 = ($$01034|0)==(127);
-      $$sink10 = $1043 ? $1033 : $1033;
-      $$sink8 = $1043 ? -1 : $$01034;
-      $1044 = ((($$sink10)) + 36|0);
-      HEAP32[$1044>>2] = $$sink8;
-      $1045 = HEAP32[$27>>2]|0;
-      $1046 = ((($1033)) + 44|0);
-      HEAP32[$1046>>2] = $1045;
-      $1047 = ((($$61078)) + 4|0);
-      $1048 = ((($1033)) + 28|0);
-      HEAP32[$1048>>2] = $1047;
-      $1049 = ((($1)) + 12|0);
-      $1050 = HEAP32[$1049>>2]|0;
-      $1051 = ((($1050)) + 4|0);
-      $1052 = HEAP32[$1051>>2]|0;
-      $1053 = (($1052) + ($972<<3)|0);
-      HEAP32[$1051>>2] = $1053;
-      $1054 = ((($1)) + 12|0);
-      $1055 = HEAP32[$1054>>2]|0;
-      $1056 = ((($1055)) + 4|0);
-      $1057 = HEAP32[$1056>>2]|0;
-      ;HEAP32[$1057>>2]=HEAP32[$26>>2]|0;HEAP32[$1057+4>>2]=HEAP32[$26+4>>2]|0;
-      $1058 = HEAP32[$$01036>>2]|0;
-      $1059 = $1058 >>> 11;
-      $1060 = $1059 & 128;
-      $1061 = ($1060|0)!=(0);
-      if ($1061) {
-       $1062 = ($$01034|0)==(127);
-       if ($1062) {
-        $$sink11$reg2mem$0 = 3;
-       } else {
-        $1063 = (($$01034) + 2)|0;
-        $$sink11$reg2mem$0 = $1063;
-       }
-       $1064 = ((($1033)) + 12|0);
-       HEAP32[$1064>>2] = $$sink11$reg2mem$0;
-       $1065 = ((($1)) + 12|0);
-       $1066 = HEAP32[$1065>>2]|0;
-       $1067 = ((($1066)) + 4|0);
-       $1068 = HEAP32[$1067>>2]|0;
-       $1069 = ((($$01036)) + 12|0);
-       $1070 = HEAP32[$1069>>2]|0;
-       __THREW__ = 0;
-       ;HEAP32[$$byval_copy1114>>2]=HEAP32[$26>>2]|0;HEAP32[$$byval_copy1114+4>>2]=HEAP32[$26+4>>2]|0;
-       invoke_viii($1070|0,($33|0),($1|0),($$byval_copy1114|0));
-       $1071 = __THREW__; __THREW__ = 0;
-       if ((($1071|0) != 0) & ((threwValue|0) != 0)) { $1072 = _testSetjmp(HEAP32[$1071>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($1072|0) == 0) { _longjmp($1071|0, threwValue|0); } tempRet0 = (threwValue); } else { $1072 = -1; };
-       $1073 = tempRet0;
-       $cond1350 = ($1072|0)==(1);
-       if ($cond1350) {
-        $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $1073;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-        continue L3;
-       }
-       ;HEAP32[$1068>>2]=HEAP32[$33>>2]|0;HEAP32[$1068+4>>2]=HEAP32[$33+4>>2]|0;
-       __THREW__ = 0;
-       invoke_vii(146,($1|0),($$11049|0));
-       $1074 = __THREW__; __THREW__ = 0;
-       if ((($1074|0) != 0) & ((threwValue|0) != 0)) { $1075 = _testSetjmp(HEAP32[$1074>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($1075|0) == 0) { _longjmp($1074|0, threwValue|0); } tempRet0 = (threwValue); } else { $1075 = -1; };
-       $1076 = tempRet0;
-       $cond1351 = ($1075|0)==(1);
-       if ($cond1351) {
-        $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $1076;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-        continue L3;
-       }
-       $1077 = ((($1)) + 20|0);
-       $1078 = HEAP32[$1077>>2]|0;
-       $1079 = ($1078|0)!=(0|0);
-       if ($1079) {
-        $$21045 = $$5;$$21055 = $$51058;$$31062 = $$6;$$31068 = $$61071;$$31075 = $$61078;$$51084 = $$8;$$51091 = $$81094;
-        label = 272;
-        continue L19;
-       }
-       $1080 = ((($1)) + 12|0);
-       $1081 = HEAP32[$1080>>2]|0;
-       $1082 = ((($1081)) + 16|0);
-       $1083 = HEAP32[$1082>>2]|0;
-       $1084 = ((($1083)) + 8|0);
-       $1085 = HEAP32[$1084>>2]|0;
-       $1086 = ((($1)) + 12|0);
-       $1087 = HEAP32[$1086>>2]|0;
-       $1088 = ((($1087)) + 4|0);
-       HEAP32[$1088>>2] = $1085;
-       __THREW__ = 0;
-       invoke_vi(132,($1|0));
-       $1089 = __THREW__; __THREW__ = 0;
-       if ((($1089|0) != 0) & ((threwValue|0) != 0)) { $1090 = _testSetjmp(HEAP32[$1089>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($1090|0) == 0) { _longjmp($1089|0, threwValue|0); } tempRet0 = (threwValue); } else { $1090 = -1; };
-       $1091 = tempRet0;
-       $cond1352 = ($1090|0)==(1);
-       if ($cond1352) {
-        $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $1085;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $1091;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-        continue L3;
-       }
-       $1092 = ((($$61078)) + 4|0);
-       $1093 = HEAP32[$1092>>2]|0;
-       $$81094$phi = $$81094;$$8$phi = $$8;$$61071$phi = $$61071;$$6$phi = $$6;$$5$phi = $$5;$$21052 = $1093;$$51058 = $1085;$$61078 = $1092;$$sink$reg2mem$0 = $1093;$$81094 = $$81094$phi;$$8 = $$8$phi;$$61071 = $$61071$phi;$$6 = $$6$phi;$$5 = $$5$phi;
-       label = 583;
-       continue L19;
-      } else {
-       $1094 = ((($1033)) + 40|0);
-       HEAP32[$1094>>2] = $972;
-       $1095 = ((($1033)) + 4|0);
-       HEAP32[$1095>>2] = $$01036;
-       $1096 = ((($$01036)) + 12|0);
-       $1097 = HEAP32[$1096>>2]|0;
-       $1098 = ((($1097)) + 12|0);
-       $1099 = HEAP32[$1098>>2]|0;
-       $1100 = ((($1097)) + 16|0);
-       $1101 = HEAP32[$1100>>2]|0;
-       $1102 = ((($1097)) + 2|0);
-       $1103 = HEAP16[$1102>>1]|0;
-       $1104 = $1103&65535;
-       $1105 = ((($1033)) + 12|0);
-       HEAP32[$1105>>2] = $1104;
-       $1106 = ($$01034|0)==(127);
-       $1107 = ((($1097)) + 2|0);
-       $1108 = HEAP16[$1107>>1]|0;
-       $1109 = $1108&65535;
-       if ($1106) {
-        $1110 = ($1109|0)<(3);
-        if ($1110) {
-         $$reg2mem996$0 = 3;
-        } else {
-         $1111 = ((($1097)) + 2|0);
-         $1112 = HEAP16[$1111>>1]|0;
-         $1113 = $1112&65535;
-         $$reg2mem996$0 = $1113;
-        }
-        __THREW__ = 0;
-        invoke_viii(142,($1|0),($$reg2mem996$0|0),3);
-        $1114 = __THREW__; __THREW__ = 0;
-        if ((($1114|0) != 0) & ((threwValue|0) != 0)) { $1115 = _testSetjmp(HEAP32[$1114>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($1115|0) == 0) { _longjmp($1114|0, threwValue|0); } tempRet0 = (threwValue); } else { $1115 = -1; };
-        $1116 = tempRet0;
-        $cond1349 = ($1115|0)==(1);
-        if ($cond1349) {
-         $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $1101;$$11066 = $1099;$$11073 = $$61078;$$11080 = $1097;$$11087 = $$81094;$$reg2mem1002$0 = $1116;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-         continue L3;
-        }
-       } else {
-        $1117 = ((($1033)) + 36|0);
-        $1118 = HEAP32[$1117>>2]|0;
-        $1119 = (($1118) + 2)|0;
-        __THREW__ = 0;
-        invoke_viii(142,($1|0),($1109|0),($1119|0));
-        $1120 = __THREW__; __THREW__ = 0;
-        if ((($1120|0) != 0) & ((threwValue|0) != 0)) { $1121 = _testSetjmp(HEAP32[$1120>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($1121|0) == 0) { _longjmp($1120|0, threwValue|0); } tempRet0 = (threwValue); } else { $1121 = -1; };
-        $1122 = tempRet0;
-        $cond1348 = ($1121|0)==(1);
-        if ($cond1348) {
-         $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $1101;$$11066 = $1099;$$11073 = $$61078;$$11080 = $1097;$$11087 = $$81094;$$reg2mem1002$0 = $1122;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-         continue L3;
-        }
-       }
-       $1123 = ((($1)) + 12|0);
-       $1124 = HEAP32[$1123>>2]|0;
-       $1125 = ((($1124)) + 4|0);
-       $1126 = HEAP32[$1125>>2]|0;
-       $1127 = ((($1097)) + 8|0);
-       $1128 = HEAP32[$1127>>2]|0;
-       $1129 = HEAP32[$1128>>2]|0;
-       $$81094$phi = $$81094;$$5$phi = $$5;$$21052 = $1129;$$51058 = $1126;$$6 = $1101;$$61071 = $1099;$$61078 = $1128;$$8 = $1097;$$sink$reg2mem$0 = $1129;$$81094 = $$81094$phi;$$5 = $$5$phi;
-       label = 583;
-       continue L19;
-      }
-      break;
-     }
-     case 38:  {
-      $1130 = $$21052 >>> 23;
-      $1131 = $1130 & 511;
-      $1132 = $$21052 >>> 7;
-      $1133 = $1132 & 65535;
-      $1134 = $1133 >> 10;
-      $1135 = $1134 & 63;
-      $1136 = $1133 >> 9;
-      $1137 = $1136 & 1;
-      $1138 = $1133 >> 4;
-      $1139 = $1138 & 31;
-      $1140 = $1133 >> 0;
-      $1141 = $1140 & 15;
-      $1142 = ($1141|0)==(0);
-      do {
-       if ($1142) {
-        $1143 = ((($$51058)) + 8|0);
-        $$01033 = $1143;
-       } else {
-        $1144 = (($1141) - 1)|0;
-        __THREW__ = 0;
-        $1145 = (invoke_iii(161,($1|0),($1144|0))|0);
-        $1146 = __THREW__; __THREW__ = 0;
-        if ((($1146|0) != 0) & ((threwValue|0) != 0)) { $1147 = _testSetjmp(HEAP32[$1146>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($1147|0) == 0) { _longjmp($1146|0, threwValue|0); } tempRet0 = (threwValue); } else { $1147 = -1; };
-        $1148 = tempRet0;
-        $cond1332 = ($1147|0)==(1);
-        if ($cond1332) {
-         $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $1148;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-         continue L3;
-        }
-        $1149 = ($1145|0)!=(0|0);
-        if ($1149) {
-         $1162 = ((($1145)) + 12|0);
-         $1163 = HEAP32[$1162>>2]|0;
-         $1164 = ((($1163)) + 8|0);
-         $$01033 = $1164;
-         break;
-        }
-        __THREW__ = 0;
-        $1150 = (invoke_iii(135,($1|0),(67968|0))|0);
-        $1151 = __THREW__; __THREW__ = 0;
-        if ((($1151|0) != 0) & ((threwValue|0) != 0)) { $1152 = _testSetjmp(HEAP32[$1151>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($1152|0) == 0) { _longjmp($1151|0, threwValue|0); } tempRet0 = (threwValue); } else { $1152 = -1; };
-        $1153 = tempRet0;
-        $cond1333 = ($1152|0)==(1);
-        if ($cond1333) {
-         $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $1153;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-         continue L3;
-        }
-        __THREW__ = 0;
-        invoke_viiii(171,($35|0),($1|0),(56724|0),30);
-        $1154 = __THREW__; __THREW__ = 0;
-        if ((($1154|0) != 0) & ((threwValue|0) != 0)) { $1155 = _testSetjmp(HEAP32[$1154>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($1155|0) == 0) { _longjmp($1154|0, threwValue|0); } tempRet0 = (threwValue); } else { $1155 = -1; };
-        $1156 = tempRet0;
-        $cond1334 = ($1155|0)==(1);
-        if ($cond1334) {
-         $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $1156;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-         continue L3;
-        }
-        __THREW__ = 0;
-        ;HEAP32[$$byval_copy1115>>2]=HEAP32[$35>>2]|0;HEAP32[$$byval_copy1115+4>>2]=HEAP32[$35+4>>2]|0;
-        invoke_viiii(172,($36|0),($1|0),($1150|0),($$byval_copy1115|0));
-        $1157 = __THREW__; __THREW__ = 0;
-        if ((($1157|0) != 0) & ((threwValue|0) != 0)) { $1158 = _testSetjmp(HEAP32[$1157>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($1158|0) == 0) { _longjmp($1157|0, threwValue|0); } tempRet0 = (threwValue); } else { $1158 = -1; };
-        $1159 = tempRet0;
-        $cond1335 = ($1158|0)==(1);
-        if ($cond1335) {
-         $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $1159;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-         continue L3;
-        }
-        ;HEAP32[$34>>2]=HEAP32[$36>>2]|0;HEAP32[$34+4>>2]=HEAP32[$36+4>>2]|0;
-        $1160 = HEAP32[$34>>2]|0;
-        $1161 = ((($1)) + 20|0);
-        HEAP32[$1161>>2] = $1160;
-        $$21045 = $$5;$$21055 = $$51058;$$31062 = $$6;$$31068 = $$61071;$$31075 = $$61078;$$51084 = $$8;$$51091 = $$81094;
-        label = 272;
-        continue L19;
-       }
-      } while(0);
-      $1165 = ($1137|0)==(0);
-      if ($1165) {
-       $1166 = (($$51058) + ($1131<<3)|0);
-       $1167 = (($1135) + ($1139))|0;
-       __THREW__ = 0;
-       invoke_viiii(167,($37|0),($1|0),($1167|0),($$01033|0));
-       $1168 = __THREW__; __THREW__ = 0;
-       if ((($1168|0) != 0) & ((threwValue|0) != 0)) { $1169 = _testSetjmp(HEAP32[$1168>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($1169|0) == 0) { _longjmp($1168|0, threwValue|0); } tempRet0 = (threwValue); } else { $1169 = -1; };
-       $1170 = tempRet0;
-       $cond1340 = ($1169|0)==(1);
-       if ($cond1340) {
-        $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $1170;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-        continue L3;
-       }
-       ;HEAP32[$1166>>2]=HEAP32[$37>>2]|0;HEAP32[$1166+4>>2]=HEAP32[$37+4>>2]|0;
-      } else {
-       $1171 = (($$01033) + ($1135<<3)|0);
-       $1172 = ((($1171)) + 4|0);
-       $1173 = HEAP32[$1172>>2]|0;
-       $1174 = ($1173|0)==(14);
-       if ($1174) {
-        $1175 = (($$01033) + ($1135<<3)|0);
-        $1176 = HEAP32[$1175>>2]|0;
-        $1177 = ((($1176)) + 20|0);
-        $1178 = HEAP32[$1177>>2]|0;
-        $1179 = ((($1176)) + 12|0);
-        $1180 = HEAP32[$1179>>2]|0;
-        $$01031 = $1180;$$01032 = $1178;
-       } else {
-        $$01031 = 0;$$01032 = 0;
-       }
-       $1181 = (($$51058) + ($1131<<3)|0);
-       $1182 = (($1135) + ($$01031))|0;
-       $1183 = (($1182) + ($1139))|0;
-       __THREW__ = 0;
-       invoke_viii(173,($38|0),($1|0),($1183|0));
-       $1184 = __THREW__; __THREW__ = 0;
-       if ((($1184|0) != 0) & ((threwValue|0) != 0)) { $1185 = _testSetjmp(HEAP32[$1184>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($1185|0) == 0) { _longjmp($1184|0, threwValue|0); } tempRet0 = (threwValue); } else { $1185 = -1; };
-       $1186 = tempRet0;
-       $cond1336 = ($1185|0)==(1);
-       if ($cond1336) {
-        $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $1186;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-        continue L3;
-       }
-       ;HEAP32[$1181>>2]=HEAP32[$38>>2]|0;HEAP32[$1181+4>>2]=HEAP32[$38+4>>2]|0;
-       $1187 = (($$51058) + ($1131<<3)|0);
-       $1188 = HEAP32[$1187>>2]|0;
-       $1189 = ($1135|0)>(0);
-       if ($1189) {
-        $1190 = ((($1188)) + 20|0);
-        $1191 = HEAP32[$1190>>2]|0;
-        __THREW__ = 0;
-        invoke_viii(144,($1191|0),($$01033|0),($1135|0));
-        $1192 = __THREW__; __THREW__ = 0;
-        if ((($1192|0) != 0) & ((threwValue|0) != 0)) { $1193 = _testSetjmp(HEAP32[$1192>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($1193|0) == 0) { _longjmp($1192|0, threwValue|0); } tempRet0 = (threwValue); } else { $1193 = -1; };
-        $1194 = tempRet0;
-        $cond1339 = ($1193|0)==(1);
-        if ($cond1339) {
-         $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $1194;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-         continue L3;
-        }
-       }
-       $1195 = ($$01031|0)>(0);
-       if ($1195) {
-        $1196 = ((($1188)) + 20|0);
-        $1197 = HEAP32[$1196>>2]|0;
-        $1198 = (($1197) + ($1135<<3)|0);
-        __THREW__ = 0;
-        invoke_viii(144,($1198|0),($$01032|0),($$01031|0));
-        $1199 = __THREW__; __THREW__ = 0;
-        if ((($1199|0) != 0) & ((threwValue|0) != 0)) { $1200 = _testSetjmp(HEAP32[$1199>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($1200|0) == 0) { _longjmp($1199|0, threwValue|0); } tempRet0 = (threwValue); } else { $1200 = -1; };
-        $1201 = tempRet0;
-        $cond1338 = ($1200|0)==(1);
-        if ($cond1338) {
-         $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $1201;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-         continue L3;
-        }
-       }
-       $1202 = ($1139|0)>(0);
-       if ($1202) {
-        $1203 = ((($1188)) + 20|0);
-        $1204 = HEAP32[$1203>>2]|0;
-        $1205 = (($1204) + ($1135<<3)|0);
-        $1206 = (($1205) + ($$01031<<3)|0);
-        $1207 = (($$01033) + ($1135<<3)|0);
-        $1208 = ((($1207)) + 8|0);
-        __THREW__ = 0;
-        invoke_viii(144,($1206|0),($1208|0),($1139|0));
-        $1209 = __THREW__; __THREW__ = 0;
-        if ((($1209|0) != 0) & ((threwValue|0) != 0)) { $1210 = _testSetjmp(HEAP32[$1209>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($1210|0) == 0) { _longjmp($1209|0, threwValue|0); } tempRet0 = (threwValue); } else { $1210 = -1; };
-        $1211 = tempRet0;
-        $cond1337 = ($1210|0)==(1);
-        if ($cond1337) {
-         $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $1211;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-         continue L3;
-        }
-       }
-       $1212 = (($1135) + ($$01031))|0;
-       $1213 = (($1212) + ($1139))|0;
-       $1214 = ((($1188)) + 12|0);
-       HEAP32[$1214>>2] = $1213;
-      }
-      $1215 = (($1131) + 1)|0;
-      $1216 = (($$51058) + ($1215<<3)|0);
-      $1217 = (($1135) + ($1137))|0;
-      $1218 = (($1217) + ($1139))|0;
-      $1219 = (($$01033) + ($1218<<3)|0);
-      ;HEAP32[$1216>>2]=HEAP32[$1219>>2]|0;HEAP32[$1216+4>>2]=HEAP32[$1219+4>>2]|0;
-      $1220 = ((($1)) + 92|0);
-      $1221 = ((($1220)) + 416|0);
-      HEAP32[$1221>>2] = $$11049;
-      $1222 = ((($$61078)) + 4|0);
-      $1223 = HEAP32[$1222>>2]|0;
-      $$81094$phi = $$81094;$$8$phi = $$8;$$61071$phi = $$61071;$$6$phi = $$6;$$51058$phi = $$51058;$$5$phi = $$5;$$21052 = $1223;$$61078 = $1222;$$sink$reg2mem$0 = $1223;$$81094 = $$81094$phi;$$8 = $$8$phi;$$61071 = $$61071$phi;$$6 = $$6$phi;$$51058 = $$51058$phi;$$5 = $$5$phi;
-      label = 583;
-      continue L19;
-      break;
-     }
-     case 39:  {
-      $1224 = $$21052 >>> 7;
-      $1225 = $1224 & 33554431;
-      $1226 = $1225 >>> 18;
-      $1227 = $1226 & 31;
-      $1228 = $1225 >>> 13;
-      $1229 = $1228 & 31;
-      $1230 = $1225 >>> 12;
-      $1231 = $1230 & 1;
-      $1232 = $1225 >>> 7;
-      $1233 = $1232 & 31;
-      $1234 = ((($1)) + 12|0);
-      $1235 = HEAP32[$1234>>2]|0;
-      $1236 = ((($1235)) + 16|0);
-      $1237 = HEAP32[$1236>>2]|0;
-      $1238 = ((($1237)) + 36|0);
-      $1239 = HEAP32[$1238>>2]|0;
-      $1240 = ((($$51058)) + 8|0);
-      $1241 = (($1227) + ($1229))|0;
-      $1242 = (($1241) + ($1231))|0;
-      $1243 = (($1242) + ($1233))|0;
-      $1244 = ($1239|0)<(0);
-      $1245 = $1244 ? 1 : $1239;
-      $1246 = (($1240) + ($1245<<3)|0);
-      $1247 = ((($1246)) + 4|0);
-      $1248 = HEAP32[$1247>>2]|0;
-      $1249 = ($1248|0)==(0);
-      if ($1249) {
-       $1250 = HEAP32[$1246>>2]|0;
-       $1251 = ($1250|0)!=(0);
-       if ($1251) {
-        label = 218;
-       }
-      } else {
-       label = 218;
-      }
-      if ((label|0) == 218) {
-       label = 0;
-       $1252 = ((($1246)) + 4|0);
-       $1253 = HEAP32[$1252>>2]|0;
-       $1254 = ($1253|0)!=(13);
-       if ($1254) {
-        __THREW__ = 0;
-        ;HEAP32[$$byval_copy1116>>2]=HEAP32[$1246>>2]|0;HEAP32[$$byval_copy1116+4>>2]=HEAP32[$1246+4>>2]|0;
-        invoke_viiiiii(174,($39|0),($1|0),($$byval_copy1116|0),13,(65614|0),(56755|0));
-        $1255 = __THREW__; __THREW__ = 0;
-        if ((($1255|0) != 0) & ((threwValue|0) != 0)) { $1256 = _testSetjmp(HEAP32[$1255>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($1256|0) == 0) { _longjmp($1255|0, threwValue|0); } tempRet0 = (threwValue); } else { $1256 = -1; };
-        $1257 = tempRet0;
-        $cond1331 = ($1256|0)==(1);
-        if ($cond1331) {
-         $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $1257;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-         continue L3;
-        }
-        ;HEAP32[$1246>>2]=HEAP32[$39>>2]|0;HEAP32[$1246+4>>2]=HEAP32[$39+4>>2]|0;
-       }
-      }
-      $1258 = ($1239|0)<(0);
-      if ($1258) {
-       $1259 = ((($$51058)) + 8|0);
-       $1260 = HEAP32[$1259>>2]|0;
-       $1261 = ((($1260)) + 20|0);
-       $1262 = HEAP32[$1261>>2]|0;
-       $1263 = ((($1260)) + 12|0);
-       $1264 = HEAP32[$1263>>2]|0;
-       $1265 = ((($$51058)) + 8|0);
-       __THREW__ = 0;
-       ;HEAP32[$$byval_copy1117>>2]=HEAP32[$1265>>2]|0;HEAP32[$$byval_copy1117+4>>2]=HEAP32[$1265+4>>2]|0;
-       invoke_vii(148,($1|0),($$byval_copy1117|0));
-       $1266 = __THREW__; __THREW__ = 0;
-       if ((($1266|0) != 0) & ((threwValue|0) != 0)) { $1267 = _testSetjmp(HEAP32[$1266>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($1267|0) == 0) { _longjmp($1266|0, threwValue|0); } tempRet0 = (threwValue); } else { $1267 = -1; };
-       $1268 = tempRet0;
-       $cond1330 = ($1267|0)==(1);
-       if ($cond1330) {
-        $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $1268;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-        continue L3;
-       }
-       $$01027 = $1262;$$01029 = $1264;
-      } else {
-       $$01027 = $1240;$$01029 = $1239;
-      }
-      $1269 = ((($1)) + 12|0);
-      $1270 = HEAP32[$1269>>2]|0;
-      $1271 = ((($1270)) + 16|0);
-      $1272 = HEAP32[$1271>>2]|0;
-      $1273 = ((($1272)) + 4|0);
-      $1274 = HEAP32[$1273>>2]|0;
-      $1275 = ($1274|0)!=(0|0);
-      do {
-       if ($1275) {
-        $1276 = ((($1)) + 12|0);
-        $1277 = HEAP32[$1276>>2]|0;
-        $1278 = ((($1277)) + 16|0);
-        $1279 = HEAP32[$1278>>2]|0;
-        $1280 = ((($1279)) + 4|0);
-        $1281 = HEAP32[$1280>>2]|0;
-        $1282 = HEAP32[$1281>>2]|0;
-        $1283 = $1282 >>> 11;
-        $1284 = $1283 & 256;
-        $1285 = ($1284|0)!=(0);
-        if ($1285) {
-         $1286 = ($$01029|0)>=(0);
-         if ($1286) {
-          $1287 = (($1227) + ($1233))|0;
-          $1288 = ($$01029|0)<($1287|0);
-          if (!($1288)) {
-           $1289 = ($1231|0)==(0);
-           if (!($1289)) {
-            $$11028 = $$01027;$$11030 = $$01029;
-            break;
-           }
-           $1290 = ($$01029|0)>($1243|0);
-           if (!($1290)) {
-            $$11028 = $$01027;$$11030 = $$01029;
-            break;
-           }
-          }
-          $1291 = (($1227) + ($1233))|0;
-          __THREW__ = 0;
-          invoke_vii(175,($1|0),($1291|0));
-          $1292 = __THREW__; __THREW__ = 0;
-          if ((($1292|0) != 0) & ((threwValue|0) != 0)) { $1293 = _testSetjmp(HEAP32[$1292>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($1293|0) == 0) { _longjmp($1292|0, threwValue|0); } tempRet0 = (threwValue); } else { $1293 = -1; };
-          $1294 = tempRet0;
-          $cond1329 = ($1293|0)==(1);
-          if ($cond1329) {
-           $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $1294;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-           continue L3;
-          }
-          $$21045 = $$5;$$21055 = $$51058;$$31062 = $$6;$$31068 = $$61071;$$31075 = $$61078;$$51084 = $$8;$$51091 = $$81094;
-          label = 272;
-          continue L19;
-         } else {
-          $$11028 = $$01027;$$11030 = $$01029;
-         }
-        } else {
-         label = 232;
-        }
-       } else {
-        label = 232;
-       }
-      } while(0);
-      if ((label|0) == 232) {
-       label = 0;
-       $1295 = ($1243|0)>(1);
-       $1296 = ($$01029|0)==(1);
-       $or$cond = $1295 & $1296;
-       if ($or$cond) {
-        $1297 = ((($$01027)) + 4|0);
-        $1298 = HEAP32[$1297>>2]|0;
-        $1299 = ($1298|0)==(14);
-        if ($1299) {
-         __THREW__ = 0;
-         ;HEAP32[$$byval_copy1118>>2]=HEAP32[$$01027>>2]|0;HEAP32[$$byval_copy1118+4>>2]=HEAP32[$$01027+4>>2]|0;
-         invoke_vii(148,($1|0),($$byval_copy1118|0));
-         $1300 = __THREW__; __THREW__ = 0;
-         if ((($1300|0) != 0) & ((threwValue|0) != 0)) { $1301 = _testSetjmp(HEAP32[$1300>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($1301|0) == 0) { _longjmp($1300|0, threwValue|0); } tempRet0 = (threwValue); } else { $1301 = -1; };
-         $1302 = tempRet0;
-         $cond1328 = ($1301|0)==(1);
-         if ($cond1328) {
-          $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $1302;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-          continue L3;
-         }
-         $1303 = HEAP32[$$01027>>2]|0;
-         $1304 = ((($1303)) + 12|0);
-         $1305 = HEAP32[$1304>>2]|0;
-         $1306 = HEAP32[$$01027>>2]|0;
-         $1307 = ((($1306)) + 20|0);
-         $1308 = HEAP32[$1307>>2]|0;
-         $$11028 = $1308;$$11030 = $1305;
-        } else {
-         $$11028 = $$01027;$$11030 = $$01029;
-        }
-       } else {
-        $$11028 = $$01027;$$11030 = $$01029;
-       }
-      }
-      $1309 = ((($1)) + 12|0);
-      $1310 = HEAP32[$1309>>2]|0;
-      $1311 = ((($1310)) + 16|0);
-      $1312 = HEAP32[$1311>>2]|0;
-      $1313 = ((($1312)) + 36|0);
-      HEAP32[$1313>>2] = $1243;
-      $1314 = ($$11030|0)<($1243|0);
-      do {
-       if ($1314) {
-        $1315 = (($1227) + ($1233))|0;
-        $1316 = ($$11030|0)<($1315|0);
-        do {
-         if ($1316) {
-          $1317 = ($1227|0)<($$11030|0);
-          if ($1317) {
-           $1318 = (($$11030) - ($1227))|0;
-           $$01026 = $1318;
-           break;
-          } else {
-           $$01026 = 0;
-           break;
-          }
-         } else {
-          $$01026 = $1233;
-         }
-        } while(0);
-        $1319 = (($1243) + 1)|0;
-        $1320 = (($$51058) + ($1319<<3)|0);
-        ;HEAP32[$1320>>2]=HEAP32[$1246>>2]|0;HEAP32[$1320+4>>2]=HEAP32[$1246+4>>2]|0;
-        $1321 = (($$11030) + 1)|0;
-        $1322 = (($$51058) + ($1321<<3)|0);
-        $1323 = ((($1322)) + 4|0);
-        HEAP32[$1323>>2] = 0;
-        $1324 = (($$11030) + 1)|0;
-        $1325 = (($$51058) + ($1324<<3)|0);
-        HEAP32[$1325>>2] = 0;
-        $1326 = ($1240|0)!=($$11028|0);
-        if ($1326) {
-         $1327 = ((($$51058)) + 8|0);
-         $1328 = (($$11030) - ($$01026))|0;
-         __THREW__ = 0;
-         invoke_viii(170,($1327|0),($$11028|0),($1328|0));
-         $1329 = __THREW__; __THREW__ = 0;
-         if ((($1329|0) != 0) & ((threwValue|0) != 0)) { $1330 = _testSetjmp(HEAP32[$1329>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($1330|0) == 0) { _longjmp($1329|0, threwValue|0); } tempRet0 = (threwValue); } else { $1330 = -1; };
-         $1331 = tempRet0;
-         $cond1327 = ($1330|0)==(1);
-         if ($cond1327) {
-          $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $1331;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-          continue L3;
-         }
-        }
-        $1332 = ($$01026|0)!=(0);
-        if ($1332) {
-         $1333 = (($1243) - ($1233))|0;
-         $1334 = (($1333) + 1)|0;
-         $1335 = (($$51058) + ($1334<<3)|0);
-         $1336 = (($$11030) - ($$01026))|0;
-         $1337 = (($$11028) + ($1336<<3)|0);
-         __THREW__ = 0;
-         invoke_viii(170,($1335|0),($1337|0),($$01026|0));
-         $1338 = __THREW__; __THREW__ = 0;
-         if ((($1338|0) != 0) & ((threwValue|0) != 0)) { $1339 = _testSetjmp(HEAP32[$1338>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($1339|0) == 0) { _longjmp($1338|0, threwValue|0); } tempRet0 = (threwValue); } else { $1339 = -1; };
-         $1340 = tempRet0;
-         $cond1326 = ($1339|0)==(1);
-         if ($cond1326) {
-          $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $1340;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-          continue L3;
-         }
-        }
-        $1341 = ($1231|0)!=(0);
-        if ($1341) {
-         $1342 = (($1227) + ($1229))|0;
-         $1343 = (($1342) + 1)|0;
-         $1344 = (($$51058) + ($1343<<3)|0);
-         __THREW__ = 0;
-         invoke_viii(173,($40|0),($1|0),0);
-         $1345 = __THREW__; __THREW__ = 0;
-         if ((($1345|0) != 0) & ((threwValue|0) != 0)) { $1346 = _testSetjmp(HEAP32[$1345>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($1346|0) == 0) { _longjmp($1345|0, threwValue|0); } tempRet0 = (threwValue); } else { $1346 = -1; };
-         $1347 = tempRet0;
-         $cond1325 = ($1346|0)==(1);
-         if ($cond1325) {
-          $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $1347;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-          continue L3;
-         }
-         ;HEAP32[$1344>>2]=HEAP32[$40>>2]|0;HEAP32[$1344+4>>2]=HEAP32[$40+4>>2]|0;
-        }
-        $1348 = ($1229|0)==(0);
-        if (!($1348)) {
-         $1349 = (($1227) + ($1233))|0;
-         $1350 = ($$11030|0)<($1349|0);
-         if (!($1350)) {
-          $1352 = (($$11030) - ($1227))|0;
-          $1353 = (($1352) - ($1233))|0;
-          $1354 = (($1353) + 1)|0;
-          $1355 = (($$61078) + ($1354<<2)|0);
-          $$21074 = $1355;
-          break;
-         }
-        }
-        $1351 = ((($$61078)) + 4|0);
-        $$21074 = $1351;
-       } else {
-        $1356 = ($1240|0)!=($$11028|0);
-        if ($1356) {
-         $1357 = (($1243) + 1)|0;
-         $1358 = (($$51058) + ($1357<<3)|0);
-         ;HEAP32[$1358>>2]=HEAP32[$1246>>2]|0;HEAP32[$1358+4>>2]=HEAP32[$1246+4>>2]|0;
-         $1359 = ((($$51058)) + 8|0);
-         $1360 = (($1227) + ($1229))|0;
-         __THREW__ = 0;
-         invoke_viii(170,($1359|0),($$11028|0),($1360|0));
-         $1361 = __THREW__; __THREW__ = 0;
-         if ((($1361|0) != 0) & ((threwValue|0) != 0)) { $1362 = _testSetjmp(HEAP32[$1361>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($1362|0) == 0) { _longjmp($1361|0, threwValue|0); } tempRet0 = (threwValue); } else { $1362 = -1; };
-         $1363 = tempRet0;
-         $cond1324 = ($1362|0)==(1);
-         if ($cond1324) {
-          $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $1363;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-          continue L3;
-         }
-        }
-        $1364 = ($1231|0)!=(0);
-        if ($1364) {
-         $1365 = (($$11030) - ($1227))|0;
-         $1366 = (($1365) - ($1229))|0;
-         $1367 = (($1366) - ($1233))|0;
-         $1368 = (($1227) + ($1229))|0;
-         $1369 = (($1368) + 1)|0;
-         $1370 = (($$51058) + ($1369<<3)|0);
-         $1371 = (($$11028) + ($1227<<3)|0);
-         $1372 = (($1371) + ($1229<<3)|0);
-         __THREW__ = 0;
-         invoke_viiii(167,($41|0),($1|0),($1367|0),($1372|0));
-         $1373 = __THREW__; __THREW__ = 0;
-         if ((($1373|0) != 0) & ((threwValue|0) != 0)) { $1374 = _testSetjmp(HEAP32[$1373>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($1374|0) == 0) { _longjmp($1373|0, threwValue|0); } tempRet0 = (threwValue); } else { $1374 = -1; };
-         $1375 = tempRet0;
-         $cond1323 = ($1374|0)==(1);
-         if ($cond1323) {
-          $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $1375;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-          continue L3;
-         }
-         ;HEAP32[$1370>>2]=HEAP32[$41>>2]|0;HEAP32[$1370+4>>2]=HEAP32[$41+4>>2]|0;
-         $$01025 = $1367;
-        } else {
-         $$01025 = 0;
-        }
-        $1376 = ($1233|0)!=(0);
-        if ($1376) {
-         $1377 = (($$11030) - ($1233))|0;
-         $1378 = ($1377|0)>($1227|0);
-         if ($1378) {
-          $1379 = (($1227) + ($1229))|0;
-          $1380 = (($1379) + ($1231))|0;
-          $1381 = (($1380) + 1)|0;
-          $1382 = (($$51058) + ($1381<<3)|0);
-          $1383 = (($1227) + ($1229))|0;
-          $1384 = (($1383) + ($$01025))|0;
-          $1385 = (($$11028) + ($1384<<3)|0);
-          __THREW__ = 0;
-          invoke_viii(170,($1382|0),($1385|0),($1233|0));
-          $1386 = __THREW__; __THREW__ = 0;
-          if ((($1386|0) != 0) & ((threwValue|0) != 0)) { $1387 = _testSetjmp(HEAP32[$1386>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($1387|0) == 0) { _longjmp($1386|0, threwValue|0); } tempRet0 = (threwValue); } else { $1387 = -1; };
-          $1388 = tempRet0;
-          $cond1322 = ($1387|0)==(1);
-          if ($cond1322) {
-           $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $1388;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-           continue L3;
-          }
-         }
-        }
-        $1389 = ($1240|0)==($$11028|0);
-        if ($1389) {
-         $1390 = (($1243) + 1)|0;
-         $1391 = (($$51058) + ($1390<<3)|0);
-         ;HEAP32[$1391>>2]=HEAP32[$1246>>2]|0;HEAP32[$1391+4>>2]=HEAP32[$1246+4>>2]|0;
-        }
-        $1392 = (($1229) + 1)|0;
-        $1393 = (($$61078) + ($1392<<2)|0);
-        $$21074 = $1393;
-       }
-      } while(0);
-      $1394 = HEAP32[$$21074>>2]|0;
-      $$81094$phi = $$81094;$$8$phi = $$8;$$61071$phi = $$61071;$$6$phi = $$6;$$51058$phi = $$51058;$$5$phi = $$5;$$21052 = $1394;$$61078 = $$21074;$$sink$reg2mem$0 = $1394;$$81094 = $$81094$phi;$$8 = $$8$phi;$$61071 = $$61071$phi;$$6 = $$6$phi;$$51058 = $$51058$phi;$$5 = $$5$phi;
-      label = 583;
-      continue L19;
-      break;
-     }
-     case 40:  {
-      $1395 = ((($$61078)) + 4|0);
-      $1396 = HEAP32[$1395>>2]|0;
-      $$81094$phi = $$81094;$$8$phi = $$8;$$61071$phi = $$61071;$$6$phi = $$6;$$51058$phi = $$51058;$$5$phi = $$5;$$21052 = $1396;$$61078 = $1395;$$sink$reg2mem$0 = $1396;$$81094 = $$81094$phi;$$8 = $$8$phi;$$61071 = $$61071$phi;$$6 = $$6$phi;$$51058 = $$51058$phi;$$5 = $$5$phi;
-      label = 583;
-      continue L19;
-      break;
-     }
-     case 41:  {
-      $1397 = ((($$61078)) + 4|0);
-      $1398 = HEAP32[$1397>>2]|0;
-      $$81094$phi = $$81094;$$8$phi = $$8;$$61071$phi = $$61071;$$6$phi = $$6;$$51058$phi = $$51058;$$5$phi = $$5;$$21052 = $1398;$$61078 = $1397;$$sink$reg2mem$0 = $1398;$$81094 = $$81094$phi;$$8 = $$8$phi;$$61071 = $$61071$phi;$$6 = $$6$phi;$$51058 = $$51058$phi;$$5 = $$5$phi;
-      label = 583;
-      continue L19;
-      break;
-     }
-     case 42:  {
-      $$11051 = $$21052;$$41083 = $$8;$$41090 = $$81094;
-      break;
-     }
-     case 43:  {
-      $1760 = $$21052 >>> 23;
-      $1761 = $1760 & 511;
-      $1762 = $$21052 >>> 7;
-      $1763 = $1762 & 127;
-      $1764 = $$21052 >>> 14;
-      $1765 = $1764 & 511;
-      $1766 = (($$6) + ($1765<<2)|0);
-      $1767 = HEAP32[$1766>>2]|0;
-      $1768 = (($$51058) + ($1761<<3)|0);
-      ;HEAP32[$48>>2]=HEAP32[$1768>>2]|0;HEAP32[$48+4>>2]=HEAP32[$1768+4>>2]|0;
-      __THREW__ = 0;
-      ;HEAP32[$$byval_copy1122>>2]=HEAP32[$48>>2]|0;HEAP32[$$byval_copy1122+4>>2]=HEAP32[$48+4>>2]|0;
-      $1769 = (invoke_iii(138,($1|0),($$byval_copy1122|0))|0);
-      $1770 = __THREW__; __THREW__ = 0;
-      if ((($1770|0) != 0) & ((threwValue|0) != 0)) { $1771 = _testSetjmp(HEAP32[$1770>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($1771|0) == 0) { _longjmp($1770|0, threwValue|0); } tempRet0 = (threwValue); } else { $1771 = -1; };
-      $1772 = tempRet0;
-      $cond1300 = ($1771|0)==(1);
-      if ($cond1300) {
-       $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $1772;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-       continue L3;
-      }
-      HEAP32[$47>>2] = $1769;
-      __THREW__ = 0;
-      $1773 = (invoke_iiii(139,($1|0),($47|0),($1767|0))|0);
-      $1774 = __THREW__; __THREW__ = 0;
-      if ((($1774|0) != 0) & ((threwValue|0) != 0)) { $1775 = _testSetjmp(HEAP32[$1774>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($1775|0) == 0) { _longjmp($1774|0, threwValue|0); } tempRet0 = (threwValue); } else { $1775 = -1; };
-      $1776 = tempRet0;
-      $cond1301 = ($1775|0)==(1);
-      if ($cond1301) {
-       $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $1776;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-       continue L3;
-      }
-      $1777 = ($1773|0)!=(0|0);
-      do {
-       if ($1777) {
-        $$01015 = $1767;$$01016 = $1773;$$01017 = $1763;
-       } else {
-        __THREW__ = 0;
-        invoke_vii(143,($49|0),($1767|0));
-        $1778 = __THREW__; __THREW__ = 0;
-        if ((($1778|0) != 0) & ((threwValue|0) != 0)) { $1779 = _testSetjmp(HEAP32[$1778>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($1779|0) == 0) { _longjmp($1778|0, threwValue|0); } tempRet0 = (threwValue); } else { $1779 = -1; };
-        $1780 = tempRet0;
-        $cond1302 = ($1779|0)==(1);
-        if ($cond1302) {
-         $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $1780;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-         continue L3;
-        }
-        __THREW__ = 0;
-        $1781 = (invoke_iiii(140,($1|0),(65621|0),14)|0);
-        $1782 = __THREW__; __THREW__ = 0;
-        if ((($1782|0) != 0) & ((threwValue|0) != 0)) { $1783 = _testSetjmp(HEAP32[$1782>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($1783|0) == 0) { _longjmp($1782|0, threwValue|0); } tempRet0 = (threwValue); } else { $1783 = -1; };
-        $1784 = tempRet0;
-        $cond1303 = ($1783|0)==(1);
-        if ($cond1303) {
-         $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $1784;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-         continue L3;
-        }
-        __THREW__ = 0;
-        $1785 = (invoke_iiii(139,($1|0),($47|0),($1781|0))|0);
-        $1786 = __THREW__; __THREW__ = 0;
-        if ((($1786|0) != 0) & ((threwValue|0) != 0)) { $1787 = _testSetjmp(HEAP32[$1786>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($1787|0) == 0) { _longjmp($1786|0, threwValue|0); } tempRet0 = (threwValue); } else { $1787 = -1; };
-        $1788 = tempRet0;
-        $cond1304 = ($1787|0)==(1);
-        if ($cond1304) {
-         $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $1788;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-         continue L3;
-        }
-        $1789 = ($1763|0)==(127);
-        if ($1789) {
-         $1790 = (($1761) + 1)|0;
-         $1791 = (($$51058) + ($1790<<3)|0);
-         __THREW__ = 0;
-         ;HEAP32[$$byval_copy1123>>2]=HEAP32[$1791>>2]|0;HEAP32[$$byval_copy1123+4>>2]=HEAP32[$1791+4>>2]|0;
-         ;HEAP32[$$byval_copy1124>>2]=HEAP32[$49>>2]|0;HEAP32[$$byval_copy1124+4>>2]=HEAP32[$49+4>>2]|0;
-         invoke_viiii(169,($50|0),($1|0),($$byval_copy1123|0),($$byval_copy1124|0));
-         $1792 = __THREW__; __THREW__ = 0;
-         if ((($1792|0) != 0) & ((threwValue|0) != 0)) { $1793 = _testSetjmp(HEAP32[$1792>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($1793|0) == 0) { _longjmp($1792|0, threwValue|0); } tempRet0 = (threwValue); } else { $1793 = -1; };
-         $1794 = tempRet0;
-         $cond1306 = ($1793|0)==(1);
-         if ($cond1306) {
-          $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $1794;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-          continue L3;
-         }
-         $$01015 = $1781;$$01016 = $1785;$$01017 = $1763;
-         break;
-        } else {
-         $1795 = (($$51058) + ($1761<<3)|0);
-         $1796 = ((($1795)) + 16|0);
-         $1797 = (($$51058) + ($1761<<3)|0);
-         $1798 = ((($1797)) + 8|0);
-         $1799 = (($1763) + 1)|0;
-         __THREW__ = 0;
-         invoke_viii(170,($1796|0),($1798|0),($1799|0));
-         $1800 = __THREW__; __THREW__ = 0;
-         if ((($1800|0) != 0) & ((threwValue|0) != 0)) { $1801 = _testSetjmp(HEAP32[$1800>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($1801|0) == 0) { _longjmp($1800|0, threwValue|0); } tempRet0 = (threwValue); } else { $1801 = -1; };
-         $1802 = tempRet0;
-         $cond1305 = ($1801|0)==(1);
-         if ($cond1305) {
-          $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $1802;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-          continue L3;
-         }
-         $1803 = (($1761) + 1)|0;
-         $1804 = (($$51058) + ($1803<<3)|0);
-         ;HEAP32[$1804>>2]=HEAP32[$49>>2]|0;HEAP32[$1804+4>>2]=HEAP32[$49+4>>2]|0;
-         $$01015 = $1781;$$01016 = $1785;$$01017 = $1799;
-         break;
-        }
-       }
-      } while(0);
-      $1805 = ((($1)) + 12|0);
-      $1806 = HEAP32[$1805>>2]|0;
-      $1807 = ((($1806)) + 16|0);
-      $1808 = HEAP32[$1807>>2]|0;
-      HEAP32[$1808>>2] = $$01015;
-      $1809 = HEAP32[$47>>2]|0;
-      $1810 = ((($1808)) + 44|0);
-      HEAP32[$1810>>2] = $1809;
-      $1811 = ($$01017|0)==(127);
-      $$sink19 = $1811 ? $1808 : $1808;
-      $$sink17 = $1811 ? -1 : $$01017;
-      $1812 = ((($$sink19)) + 36|0);
-      HEAP32[$1812>>2] = $$sink17;
-      $1813 = ((($1)) + 12|0);
-      $1814 = HEAP32[$1813>>2]|0;
-      $1815 = ((($1814)) + 4|0);
-      $1816 = HEAP32[$1815>>2]|0;
-      $1817 = (($$51058) + ($1761<<3)|0);
-      $1818 = ((($1808)) + 36|0);
-      $1819 = HEAP32[$1818>>2]|0;
-      $1820 = (($1819) + 1)|0;
-      __THREW__ = 0;
-      invoke_viii(170,($1816|0),($1817|0),($1820|0));
-      $1821 = __THREW__; __THREW__ = 0;
-      if ((($1821|0) != 0) & ((threwValue|0) != 0)) { $1822 = _testSetjmp(HEAP32[$1821>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($1822|0) == 0) { _longjmp($1821|0, threwValue|0); } tempRet0 = (threwValue); } else { $1822 = -1; };
-      $1823 = tempRet0;
-      $cond1307 = ($1822|0)==(1);
-      if ($cond1307) {
-       $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $1823;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-       continue L3;
-      }
-      $1824 = HEAP32[$$01016>>2]|0;
-      $1825 = $1824 >>> 11;
-      $1826 = $1825 & 128;
-      $1827 = ($1826|0)!=(0);
-      if ($1827) {
-       $1828 = ((($1)) + 12|0);
-       $1829 = HEAP32[$1828>>2]|0;
-       $1830 = ((($1829)) + 4|0);
-       $1831 = HEAP32[$1830>>2]|0;
-       $1832 = ((($$01016)) + 12|0);
-       $1833 = HEAP32[$1832>>2]|0;
-       __THREW__ = 0;
-       ;HEAP32[$$byval_copy1125>>2]=HEAP32[$48>>2]|0;HEAP32[$$byval_copy1125+4>>2]=HEAP32[$48+4>>2]|0;
-       invoke_viii($1833|0,($51|0),($1|0),($$byval_copy1125|0));
-       $1834 = __THREW__; __THREW__ = 0;
-       if ((($1834|0) != 0) & ((threwValue|0) != 0)) { $1835 = _testSetjmp(HEAP32[$1834>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($1835|0) == 0) { _longjmp($1834|0, threwValue|0); } tempRet0 = (threwValue); } else { $1835 = -1; };
-       $1836 = tempRet0;
-       $cond1310 = ($1835|0)==(1);
-       if ($cond1310) {
-        $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $1836;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-        continue L3;
-       }
-       ;HEAP32[$1831>>2]=HEAP32[$51>>2]|0;HEAP32[$1831+4>>2]=HEAP32[$51+4>>2]|0;
-       __THREW__ = 0;
-       invoke_vii(146,($1|0),($$11049|0));
-       $1837 = __THREW__; __THREW__ = 0;
-       if ((($1837|0) != 0) & ((threwValue|0) != 0)) { $1838 = _testSetjmp(HEAP32[$1837>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($1838|0) == 0) { _longjmp($1837|0, threwValue|0); } tempRet0 = (threwValue); } else { $1838 = -1; };
-       $1839 = tempRet0;
-       $cond1311 = ($1838|0)==(1);
-       if ($cond1311) {
-        $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $1839;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-        continue L3;
-       }
-       $$31082 = $$8;$$31089 = $$81094;
-       label = 270;
-       break L50;
-      }
-      $1840 = ((($$01016)) + 12|0);
-      $1841 = HEAP32[$1840>>2]|0;
-      $1842 = ((($1841)) + 12|0);
-      $1843 = HEAP32[$1842>>2]|0;
-      $1844 = ((($1841)) + 16|0);
-      $1845 = HEAP32[$1844>>2]|0;
-      $1846 = ((($1808)) + 36|0);
-      $1847 = HEAP32[$1846>>2]|0;
-      $1848 = ($1847|0)<(0);
-      $1849 = ((($1841)) + 2|0);
-      $1850 = HEAP16[$1849>>1]|0;
-      $1851 = $1850&65535;
-      if ($1848) {
-       $1852 = ($1851|0)<(3);
-       if ($1852) {
-        $$reg2mem994$0 = 3;
-       } else {
-        $1853 = ((($1841)) + 2|0);
-        $1854 = HEAP16[$1853>>1]|0;
-        $1855 = $1854&65535;
-        $$reg2mem994$0 = $1855;
-       }
-       __THREW__ = 0;
-       invoke_viii(142,($1|0),($$reg2mem994$0|0),3);
-       $1856 = __THREW__; __THREW__ = 0;
-       if ((($1856|0) != 0) & ((threwValue|0) != 0)) { $1857 = _testSetjmp(HEAP32[$1856>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($1857|0) == 0) { _longjmp($1856|0, threwValue|0); } tempRet0 = (threwValue); } else { $1857 = -1; };
-       $1858 = tempRet0;
-       $cond1309 = ($1857|0)==(1);
-       if ($cond1309) {
-        $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $1845;$$11066 = $1843;$$11073 = $$61078;$$11080 = $1841;$$11087 = $$81094;$$reg2mem1002$0 = $1858;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-        continue L3;
-       }
-      } else {
-       $1859 = ((($1808)) + 36|0);
-       $1860 = HEAP32[$1859>>2]|0;
-       $1861 = (($1860) + 2)|0;
-       __THREW__ = 0;
-       invoke_viii(142,($1|0),($1851|0),($1861|0));
-       $1862 = __THREW__; __THREW__ = 0;
-       if ((($1862|0) != 0) & ((threwValue|0) != 0)) { $1863 = _testSetjmp(HEAP32[$1862>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($1863|0) == 0) { _longjmp($1862|0, threwValue|0); } tempRet0 = (threwValue); } else { $1863 = -1; };
-       $1864 = tempRet0;
-       $cond1308 = ($1863|0)==(1);
-       if ($cond1308) {
-        $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $1845;$$11066 = $1843;$$11073 = $$61078;$$11080 = $1841;$$11087 = $$81094;$$reg2mem1002$0 = $1864;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-        continue L3;
-       }
-      }
-      $1865 = ((($1)) + 12|0);
-      $1866 = HEAP32[$1865>>2]|0;
-      $1867 = ((($1866)) + 4|0);
-      $1868 = HEAP32[$1867>>2]|0;
-      $1869 = ((($1841)) + 8|0);
-      $1870 = HEAP32[$1869>>2]|0;
-      $1871 = HEAP32[$1870>>2]|0;
-      $$81094$phi = $$81094;$$5$phi = $$5;$$21052 = $1871;$$51058 = $1868;$$6 = $1845;$$61071 = $1843;$$61078 = $1870;$$8 = $1841;$$sink$reg2mem$0 = $1871;$$81094 = $$81094$phi;$$5 = $$5$phi;
-      label = 583;
-      continue L19;
-      break;
-     }
-     case 44:  {
-      $1872 = $$21052 >>> 23;
-      $1873 = $1872 & 511;
-      $1874 = $$21052 >>> 7;
-      $1875 = $1874 & 65535;
-      $1876 = $1875 >> 10;
-      $1877 = $1876 & 63;
-      $1878 = $1875 >> 9;
-      $1879 = $1878 & 1;
-      $1880 = $1875 >> 4;
-      $1881 = $1880 & 31;
-      $1882 = $1875 >> 0;
-      $1883 = $1882 & 15;
-      $1884 = ($1883|0)==(0);
-      do {
-       if ($1884) {
-        $1885 = ((($$51058)) + 8|0);
-        $$01014 = $1885;
-       } else {
-        $1886 = (($1883) - 1)|0;
-        __THREW__ = 0;
-        $1887 = (invoke_iii(161,($1|0),($1886|0))|0);
-        $1888 = __THREW__; __THREW__ = 0;
-        if ((($1888|0) != 0) & ((threwValue|0) != 0)) { $1889 = _testSetjmp(HEAP32[$1888>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($1889|0) == 0) { _longjmp($1888|0, threwValue|0); } tempRet0 = (threwValue); } else { $1889 = -1; };
-        $1890 = tempRet0;
-        $cond1298 = ($1889|0)==(1);
-        if ($cond1298) {
-         $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $1890;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-         continue L3;
-        }
-        $1891 = ($1887|0)!=(0|0);
-        if ($1891) {
-         $1895 = ((($1887)) + 12|0);
-         $1896 = HEAP32[$1895>>2]|0;
-         $1897 = ((($1896)) + 8|0);
-         $$01014 = $1897;
-         break;
-        }
-        __THREW__ = 0;
-        invoke_vii(180,($1|0),2);
-        $1892 = __THREW__; __THREW__ = 0;
-        if ((($1892|0) != 0) & ((threwValue|0) != 0)) { $1893 = _testSetjmp(HEAP32[$1892>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($1893|0) == 0) { _longjmp($1892|0, threwValue|0); } tempRet0 = (threwValue); } else { $1893 = -1; };
-        $1894 = tempRet0;
-        $cond1299 = ($1893|0)==(1);
-        if ($cond1299) {
-         $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $1894;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-         continue L3;
-        }
-        $$21045 = $$5;$$21055 = $$51058;$$31062 = $$6;$$31068 = $$61071;$$31075 = $$61078;$$51084 = $$8;$$51091 = $$81094;
-        label = 272;
-        continue L19;
-       }
-      } while(0);
-      $1898 = (($$51058) + ($1873<<3)|0);
-      $1899 = (($1877) + ($1879))|0;
-      $1900 = (($1899) + ($1881))|0;
-      $1901 = (($$01014) + ($1900<<3)|0);
-      ;HEAP32[$1898>>2]=HEAP32[$1901>>2]|0;HEAP32[$1898+4>>2]=HEAP32[$1901+4>>2]|0;
-      $1902 = ((($$61078)) + 4|0);
-      $1903 = HEAP32[$1902>>2]|0;
-      $$81094$phi = $$81094;$$8$phi = $$8;$$61071$phi = $$61071;$$6$phi = $$6;$$51058$phi = $$51058;$$5$phi = $$5;$$21052 = $1903;$$61078 = $1902;$$sink$reg2mem$0 = $1903;$$81094 = $$81094$phi;$$8 = $$8$phi;$$61071 = $$61071$phi;$$6 = $$6$phi;$$51058 = $$51058$phi;$$5 = $$5$phi;
-      label = 583;
-      continue L19;
-      break;
-     }
-     case 45:  {
-      $1904 = $$21052 >>> 23;
-      $1905 = $1904 & 511;
-      $1906 = (($$51058) + ($1905<<3)|0);
-      $1907 = ((($1906)) + 4|0);
-      $1908 = HEAP32[$1907>>2]|0;
-      $1909 = $1908&65535;
-      $1910 = $1909&65535;
-      $1911 = $1910 << 8;
-      $1912 = (($1905) + 1)|0;
-      $1913 = (($$51058) + ($1912<<3)|0);
-      $1914 = ((($1913)) + 4|0);
-      $1915 = HEAP32[$1914>>2]|0;
-      $1916 = $1915&65535;
-      $1917 = $1916&65535;
-      $1918 = $1917 & 255;
-      $1919 = $1911 | $1918;
-      L362: do {
-       switch ($1919|0) {
-       case 771:  {
-        $1920 = (($$51058) + ($1905<<3)|0);
-        $1921 = HEAP32[$1920>>2]|0;
-        $1922 = ((($1920)) + 8|0);
-        $1923 = HEAP32[$1922>>2]|0;
-        __THREW__ = 0;
-        $1924 = (invoke_iiii(181,($1921|0),($1923|0),($52|0))|0);
-        $1925 = __THREW__; __THREW__ = 0;
-        if ((($1925|0) != 0) & ((threwValue|0) != 0)) { $1926 = _testSetjmp(HEAP32[$1925>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($1926|0) == 0) { _longjmp($1925|0, threwValue|0); } tempRet0 = (threwValue); } else { $1926 = -1; };
-        $1927 = tempRet0;
-        $cond1297 = ($1926|0)==(1);
-        if ($cond1297) {
-         $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $1927;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-         continue L3;
-        }
-        $1928 = ($1924<<24>>24)!=(0);
-        if ($1928) {
-         $1929 = ((($1920)) + 4|0);
-         HEAP32[$1929>>2] = 6;
-         $1930 = (+($1921|0));
-         $1931 = (+($1923|0));
-         $1932 = $1930 + $1931;
-         HEAPF32[$1920>>2] = $1932;
-         break L362;
-        } else {
-         $1933 = (($$51058) + ($1905<<3)|0);
-         $1934 = ((($1933)) + 4|0);
-         HEAP32[$1934>>2] = 3;
-         $1935 = HEAP32[$52>>2]|0;
-         $1936 = (($$51058) + ($1905<<3)|0);
-         HEAP32[$1936>>2] = $1935;
-         break L362;
-        }
-        break;
-       }
-       case 774:  {
-        $1937 = (($$51058) + ($1905<<3)|0);
-        $1938 = HEAP32[$1937>>2]|0;
-        $1939 = (($1905) + 1)|0;
-        $1940 = (($$51058) + ($1939<<3)|0);
-        $1941 = +HEAPF32[$1940>>2];
-        $1942 = (($$51058) + ($1905<<3)|0);
-        $1943 = ((($1942)) + 4|0);
-        HEAP32[$1943>>2] = 6;
-        $1944 = (+($1938|0));
-        $1945 = $1944 + $1941;
-        $1946 = (($$51058) + ($1905<<3)|0);
-        HEAPF32[$1946>>2] = $1945;
-        break;
-       }
-       case 1539:  {
-        $1947 = (($$51058) + ($1905<<3)|0);
-        $1948 = +HEAPF32[$1947>>2];
-        $1949 = (($1905) + 1)|0;
-        $1950 = (($$51058) + ($1949<<3)|0);
-        $1951 = HEAP32[$1950>>2]|0;
-        $1952 = (+($1951|0));
-        $1953 = $1948 + $1952;
-        $1954 = (($$51058) + ($1905<<3)|0);
-        HEAPF32[$1954>>2] = $1953;
-        break;
-       }
-       case 1542:  {
-        $1955 = (($$51058) + ($1905<<3)|0);
-        $1956 = +HEAPF32[$1955>>2];
-        $1957 = (($1905) + 1)|0;
-        $1958 = (($$51058) + ($1957<<3)|0);
-        $1959 = +HEAPF32[$1958>>2];
-        $1960 = $1956 + $1959;
-        $1961 = (($$51058) + ($1905<<3)|0);
-        HEAPF32[$1961>>2] = $1960;
-        break;
-       }
-       case 4112:  {
-        $1962 = (($$51058) + ($1905<<3)|0);
-        $1963 = (($$51058) + ($1905<<3)|0);
-        $1964 = (($1905) + 1)|0;
-        $1965 = (($$51058) + ($1964<<3)|0);
-        __THREW__ = 0;
-        ;HEAP32[$$byval_copy1126>>2]=HEAP32[$1963>>2]|0;HEAP32[$$byval_copy1126+4>>2]=HEAP32[$1963+4>>2]|0;
-        ;HEAP32[$$byval_copy1127>>2]=HEAP32[$1965>>2]|0;HEAP32[$$byval_copy1127+4>>2]=HEAP32[$1965+4>>2]|0;
-        invoke_viiii(182,($53|0),($1|0),($$byval_copy1126|0),($$byval_copy1127|0));
-        $1966 = __THREW__; __THREW__ = 0;
-        if ((($1966|0) != 0) & ((threwValue|0) != 0)) { $1967 = _testSetjmp(HEAP32[$1966>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($1967|0) == 0) { _longjmp($1966|0, threwValue|0); } tempRet0 = (threwValue); } else { $1967 = -1; };
-        $1968 = tempRet0;
-        $cond1296 = ($1967|0)==(1);
-        if ($cond1296) {
-         $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $1968;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-         continue L3;
-        }
-        ;HEAP32[$1962>>2]=HEAP32[$53>>2]|0;HEAP32[$1962+4>>2]=HEAP32[$53+4>>2]|0;
-        break;
-       }
-       default: {
-        $$01050 = $$21052;
-        label = 90;
-        break L50;
-       }
-       }
-      } while(0);
-      $1969 = ((($1)) + 92|0);
-      $1970 = ((($1969)) + 416|0);
-      HEAP32[$1970>>2] = $$11049;
-      $1971 = ((($$61078)) + 4|0);
-      $1972 = HEAP32[$1971>>2]|0;
-      $$81094$phi = $$81094;$$8$phi = $$8;$$61071$phi = $$61071;$$6$phi = $$6;$$51058$phi = $$51058;$$5$phi = $$5;$$21052 = $1972;$$61078 = $1971;$$sink$reg2mem$0 = $1972;$$81094 = $$81094$phi;$$8 = $$8$phi;$$61071 = $$61071$phi;$$6 = $$6$phi;$$51058 = $$51058$phi;$$5 = $$5$phi;
-      label = 583;
-      continue L19;
-      break;
-     }
-     case 46:  {
-      $2147 = $$21052 >>> 23;
-      $2148 = $2147 & 511;
-      $2149 = (($$51058) + ($2148<<3)|0);
-      $2150 = ((($2149)) + 4|0);
-      $2151 = HEAP32[$2150>>2]|0;
-      L375: do {
-       switch ($2151|0) {
-       case 3:  {
-        $2152 = (($$51058) + ($2148<<3)|0);
-        $2153 = HEAP32[$2152>>2]|0;
-        $2154 = $$21052 >>> 7;
-        $2155 = $2154 & 127;
-        __THREW__ = 0;
-        $2156 = (invoke_iiii(181,($2153|0),($2155|0),($57|0))|0);
-        $2157 = __THREW__; __THREW__ = 0;
-        if ((($2157|0) != 0) & ((threwValue|0) != 0)) { $2158 = _testSetjmp(HEAP32[$2157>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($2158|0) == 0) { _longjmp($2157|0, threwValue|0); } tempRet0 = (threwValue); } else { $2158 = -1; };
-        $2159 = tempRet0;
-        $cond1295 = ($2158|0)==(1);
-        if ($cond1295) {
-         $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $2159;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-         continue L3;
-        }
-        $2160 = ($2156<<24>>24)!=(0);
-        $2161 = (($$51058) + ($2148<<3)|0);
-        $2162 = ((($2161)) + 4|0);
-        if ($2160) {
-         HEAP32[$2162>>2] = 6;
-         $2163 = (+($2153|0));
-         $2164 = (+($2155|0));
-         $2165 = $2163 + $2164;
-         $2166 = (($$51058) + ($2148<<3)|0);
-         HEAPF32[$2166>>2] = $2165;
-         break L375;
-        } else {
-         HEAP32[$2162>>2] = 3;
-         $2167 = HEAP32[$57>>2]|0;
-         $2168 = (($$51058) + ($2148<<3)|0);
-         HEAP32[$2168>>2] = $2167;
-         break L375;
-        }
-        break;
-       }
-       case 6:  {
-        $2169 = $$21052 >>> 7;
-        $2170 = $2169 & 127;
-        $2171 = (+($2170|0));
-        $2172 = (($$51058) + ($2148<<3)|0);
-        $2173 = +HEAPF32[$2172>>2];
-        $2174 = $2173 + $2171;
-        HEAPF32[$2172>>2] = $2174;
-        break;
-       }
-       default: {
-        $2175 = (($2148) + 1)|0;
-        $2176 = (($$51058) + ($2175<<3)|0);
-        $2177 = ((($2176)) + 4|0);
-        HEAP32[$2177>>2] = 3;
-        $2178 = $$21052 >>> 7;
-        $2179 = $2178 & 127;
-        $2180 = (($2148) + 1)|0;
-        $2181 = (($$51058) + ($2180<<3)|0);
-        HEAP32[$2181>>2] = $2179;
-        $2182 = $2148 & 511;
-        $2183 = $2182 << 23;
-        $2184 = 32 | $2183;
-        $2185 = $$21052 >>> 14;
-        $2186 = $2185 & 511;
-        $2187 = $2186 & 511;
-        $2188 = $2187 << 14;
-        $2189 = $2184 | $2188;
-        $2190 = $2189 | 128;
-        $$01050 = $2190;
-        label = 90;
-        break L50;
-       }
-       }
-      } while(0);
-      $2191 = ((($$61078)) + 4|0);
-      $2192 = HEAP32[$2191>>2]|0;
-      $$81094$phi = $$81094;$$8$phi = $$8;$$61071$phi = $$61071;$$6$phi = $$6;$$51058$phi = $$51058;$$5$phi = $$5;$$21052 = $2192;$$61078 = $2191;$$sink$reg2mem$0 = $2192;$$81094 = $$81094$phi;$$8 = $$8$phi;$$61071 = $$61071$phi;$$6 = $$6$phi;$$51058 = $$51058$phi;$$5 = $$5$phi;
-      label = 583;
-      continue L19;
-      break;
-     }
-     case 47:  {
-      $1973 = $$21052 >>> 23;
-      $1974 = $1973 & 511;
-      $1975 = (($$51058) + ($1974<<3)|0);
-      $1976 = ((($1975)) + 4|0);
-      $1977 = HEAP32[$1976>>2]|0;
-      $1978 = $1977&65535;
-      $1979 = $1978&65535;
-      $1980 = $1979 << 8;
-      $1981 = (($1974) + 1)|0;
-      $1982 = (($$51058) + ($1981<<3)|0);
-      $1983 = ((($1982)) + 4|0);
-      $1984 = HEAP32[$1983>>2]|0;
-      $1985 = $1984&65535;
-      $1986 = $1985&65535;
-      $1987 = $1986 & 255;
-      $1988 = $1980 | $1987;
-      L385: do {
-       switch ($1988|0) {
-       case 771:  {
-        $1989 = (($$51058) + ($1974<<3)|0);
-        $1990 = HEAP32[$1989>>2]|0;
-        $1991 = (($1974) + 1)|0;
-        $1992 = (($$51058) + ($1991<<3)|0);
-        $1993 = HEAP32[$1992>>2]|0;
-        __THREW__ = 0;
-        $1994 = (invoke_iiii(183,($1990|0),($1993|0),($54|0))|0);
-        $1995 = __THREW__; __THREW__ = 0;
-        if ((($1995|0) != 0) & ((threwValue|0) != 0)) { $1996 = _testSetjmp(HEAP32[$1995>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($1996|0) == 0) { _longjmp($1995|0, threwValue|0); } tempRet0 = (threwValue); } else { $1996 = -1; };
-        $1997 = tempRet0;
-        $cond1294 = ($1996|0)==(1);
-        if ($cond1294) {
-         $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $1997;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-         continue L3;
-        }
-        $1998 = ($1994<<24>>24)!=(0);
-        $1999 = (($$51058) + ($1974<<3)|0);
-        $2000 = ((($1999)) + 4|0);
-        if ($1998) {
-         HEAP32[$2000>>2] = 6;
-         $2001 = (+($1990|0));
-         $2002 = (+($1993|0));
-         $2003 = $2001 - $2002;
-         $2004 = (($$51058) + ($1974<<3)|0);
-         HEAPF32[$2004>>2] = $2003;
-         break L385;
-        } else {
-         HEAP32[$2000>>2] = 3;
-         $2005 = HEAP32[$54>>2]|0;
-         $2006 = (($$51058) + ($1974<<3)|0);
-         HEAP32[$2006>>2] = $2005;
-         break L385;
-        }
-        break;
-       }
-       case 774:  {
-        $2007 = (($$51058) + ($1974<<3)|0);
-        $2008 = HEAP32[$2007>>2]|0;
-        $2009 = (($1974) + 1)|0;
-        $2010 = (($$51058) + ($2009<<3)|0);
-        $2011 = +HEAPF32[$2010>>2];
-        $2012 = (($$51058) + ($1974<<3)|0);
-        $2013 = ((($2012)) + 4|0);
-        HEAP32[$2013>>2] = 6;
-        $2014 = (+($2008|0));
-        $2015 = $2014 - $2011;
-        $2016 = (($$51058) + ($1974<<3)|0);
-        HEAPF32[$2016>>2] = $2015;
-        break;
-       }
-       case 1539:  {
-        $2017 = (($$51058) + ($1974<<3)|0);
-        $2018 = +HEAPF32[$2017>>2];
-        $2019 = (($1974) + 1)|0;
-        $2020 = (($$51058) + ($2019<<3)|0);
-        $2021 = HEAP32[$2020>>2]|0;
-        $2022 = (+($2021|0));
-        $2023 = $2018 - $2022;
-        $2024 = (($$51058) + ($1974<<3)|0);
-        HEAPF32[$2024>>2] = $2023;
-        break;
-       }
-       case 1542:  {
-        $2025 = (($$51058) + ($1974<<3)|0);
-        $2026 = +HEAPF32[$2025>>2];
-        $2027 = (($1974) + 1)|0;
-        $2028 = (($$51058) + ($2027<<3)|0);
-        $2029 = +HEAPF32[$2028>>2];
-        $2030 = $2026 - $2029;
-        $2031 = (($$51058) + ($1974<<3)|0);
-        HEAPF32[$2031>>2] = $2030;
-        break;
-       }
-       default: {
-        $$01050 = $$21052;
-        label = 90;
-        break L50;
-       }
-       }
-      } while(0);
-      $2032 = ((($$61078)) + 4|0);
-      $2033 = HEAP32[$2032>>2]|0;
-      $$81094$phi = $$81094;$$8$phi = $$8;$$61071$phi = $$61071;$$6$phi = $$6;$$51058$phi = $$51058;$$5$phi = $$5;$$21052 = $2033;$$61078 = $2032;$$sink$reg2mem$0 = $2033;$$81094 = $$81094$phi;$$8 = $$8$phi;$$61071 = $$61071$phi;$$6 = $$6$phi;$$51058 = $$51058$phi;$$5 = $$5$phi;
-      label = 583;
-      continue L19;
-      break;
-     }
-     case 48:  {
-      $2193 = $$21052 >>> 23;
-      $2194 = $2193 & 511;
-      $2195 = (($$51058) + ($2194<<3)|0);
-      $2196 = ((($2195)) + 4|0);
-      $2197 = HEAP32[$2196>>2]|0;
-      L396: do {
-       switch ($2197|0) {
-       case 3:  {
-        $2198 = HEAP32[$2195>>2]|0;
-        $2199 = $$21052 >>> 7;
-        $2200 = $2199 & 127;
-        __THREW__ = 0;
-        $2201 = (invoke_iiii(183,($2198|0),($2200|0),($58|0))|0);
-        $2202 = __THREW__; __THREW__ = 0;
-        if ((($2202|0) != 0) & ((threwValue|0) != 0)) { $2203 = _testSetjmp(HEAP32[$2202>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($2203|0) == 0) { _longjmp($2202|0, threwValue|0); } tempRet0 = (threwValue); } else { $2203 = -1; };
-        $2204 = tempRet0;
-        $cond1293 = ($2203|0)==(1);
-        if ($cond1293) {
-         $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $2204;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-         continue L3;
-        }
-        $2205 = ($2201<<24>>24)!=(0);
-        $2206 = ((($2195)) + 4|0);
-        if ($2205) {
-         HEAP32[$2206>>2] = 6;
-         $2207 = (+($2198|0));
-         $2208 = (+($2200|0));
-         $2209 = $2207 - $2208;
-         HEAPF32[$2195>>2] = $2209;
-         break L396;
-        } else {
-         HEAP32[$2206>>2] = 3;
-         $2210 = HEAP32[$58>>2]|0;
-         HEAP32[$2195>>2] = $2210;
-         break L396;
-        }
-        break;
-       }
-       case 6:  {
-        $2211 = $$21052 >>> 7;
-        $2212 = $2211 & 127;
-        $2213 = (+($2212|0));
-        $2214 = +HEAPF32[$2195>>2];
-        $2215 = $2214 - $2213;
-        HEAPF32[$2195>>2] = $2215;
-        break;
-       }
-       default: {
-        $2216 = ((($2195)) + 8|0);
-        $2217 = ((($2216)) + 4|0);
-        HEAP32[$2217>>2] = 3;
-        $2218 = $$21052 >>> 7;
-        $2219 = $2218 & 127;
-        $2220 = ((($2195)) + 8|0);
-        HEAP32[$2220>>2] = $2219;
-        $2221 = $2194 & 511;
-        $2222 = $2221 << 23;
-        $2223 = 32 | $2222;
-        $2224 = $$21052 >>> 14;
-        $2225 = $2224 & 511;
-        $2226 = $2225 & 511;
-        $2227 = $2226 << 14;
-        $2228 = $2223 | $2227;
-        $2229 = $2228 | 128;
-        $$01050 = $2229;
-        label = 90;
-        break L50;
-       }
-       }
-      } while(0);
-      $2230 = ((($$61078)) + 4|0);
-      $2231 = HEAP32[$2230>>2]|0;
-      $$81094$phi = $$81094;$$8$phi = $$8;$$61071$phi = $$61071;$$6$phi = $$6;$$51058$phi = $$51058;$$5$phi = $$5;$$21052 = $2231;$$61078 = $2230;$$sink$reg2mem$0 = $2231;$$81094 = $$81094$phi;$$8 = $$8$phi;$$61071 = $$61071$phi;$$6 = $$6$phi;$$51058 = $$51058$phi;$$5 = $$5$phi;
-      label = 583;
-      continue L19;
-      break;
-     }
-     case 49:  {
-      $2034 = $$21052 >>> 23;
-      $2035 = $2034 & 511;
-      $2036 = (($$51058) + ($2035<<3)|0);
-      $2037 = ((($2036)) + 4|0);
-      $2038 = HEAP32[$2037>>2]|0;
-      $2039 = $2038&65535;
-      $2040 = $2039&65535;
-      $2041 = $2040 << 8;
-      $2042 = (($2035) + 1)|0;
-      $2043 = (($$51058) + ($2042<<3)|0);
-      $2044 = ((($2043)) + 4|0);
-      $2045 = HEAP32[$2044>>2]|0;
-      $2046 = $2045&65535;
-      $2047 = $2046&65535;
-      $2048 = $2047 & 255;
-      $2049 = $2041 | $2048;
-      L406: do {
-       switch ($2049|0) {
-       case 771:  {
-        $2050 = (($$51058) + ($2035<<3)|0);
-        $2051 = (($2035) + 1)|0;
-        $2052 = (($$51058) + ($2051<<3)|0);
-        __THREW__ = 0;
-        ;HEAP32[$$byval_copy1128>>2]=HEAP32[$2050>>2]|0;HEAP32[$$byval_copy1128+4>>2]=HEAP32[$2050+4>>2]|0;
-        ;HEAP32[$$byval_copy1129>>2]=HEAP32[$2052>>2]|0;HEAP32[$$byval_copy1129+4>>2]=HEAP32[$2052+4>>2]|0;
-        invoke_viiii(184,($56|0),($1|0),($$byval_copy1128|0),($$byval_copy1129|0));
-        $2053 = __THREW__; __THREW__ = 0;
-        if ((($2053|0) != 0) & ((threwValue|0) != 0)) { $2054 = _testSetjmp(HEAP32[$2053>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($2054|0) == 0) { _longjmp($2053|0, threwValue|0); } tempRet0 = (threwValue); } else { $2054 = -1; };
-        $2055 = tempRet0;
-        $cond1292 = ($2054|0)==(1);
-        if ($cond1292) {
-         $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $2055;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-         continue L3;
-        }
-        ;HEAP32[$55>>2]=HEAP32[$56>>2]|0;HEAP32[$55+4>>2]=HEAP32[$56+4>>2]|0;
-        $2056 = ((($55)) + 4|0);
-        $2057 = HEAP32[$2056>>2]|0;
-        switch ($2057|0) {
-        case 3:  {
-         $2058 = (($$51058) + ($2035<<3)|0);
-         $2059 = ((($2058)) + 4|0);
-         HEAP32[$2059>>2] = 3;
-         $2060 = HEAP32[$55>>2]|0;
-         $2061 = (($$51058) + ($2035<<3)|0);
-         HEAP32[$2061>>2] = $2060;
-         break L406;
-         break;
-        }
-        case 6:  {
-         $2062 = (($$51058) + ($2035<<3)|0);
-         $2063 = ((($2062)) + 4|0);
-         HEAP32[$2063>>2] = 6;
-         $2064 = +HEAPF32[$55>>2];
-         $2065 = (($$51058) + ($2035<<3)|0);
-         HEAPF32[$2065>>2] = $2064;
-         break L406;
-         break;
-        }
-        default: {
-         break L406;
-        }
-        }
-        break;
-       }
-       case 774:  {
-        $2066 = (($$51058) + ($2035<<3)|0);
-        $2067 = HEAP32[$2066>>2]|0;
-        $2068 = (($2035) + 1)|0;
-        $2069 = (($$51058) + ($2068<<3)|0);
-        $2070 = +HEAPF32[$2069>>2];
-        $2071 = (($$51058) + ($2035<<3)|0);
-        $2072 = ((($2071)) + 4|0);
-        HEAP32[$2072>>2] = 6;
-        $2073 = (+($2067|0));
-        $2074 = $2073 * $2070;
-        $2075 = (($$51058) + ($2035<<3)|0);
-        HEAPF32[$2075>>2] = $2074;
-        break;
-       }
-       case 1539:  {
-        $2076 = (($$51058) + ($2035<<3)|0);
-        $2077 = +HEAPF32[$2076>>2];
-        $2078 = (($2035) + 1)|0;
-        $2079 = (($$51058) + ($2078<<3)|0);
-        $2080 = HEAP32[$2079>>2]|0;
-        $2081 = (+($2080|0));
-        $2082 = $2077 * $2081;
-        $2083 = (($$51058) + ($2035<<3)|0);
-        HEAPF32[$2083>>2] = $2082;
-        break;
-       }
-       case 1542:  {
-        $2084 = (($$51058) + ($2035<<3)|0);
-        $2085 = +HEAPF32[$2084>>2];
-        $2086 = (($2035) + 1)|0;
-        $2087 = (($$51058) + ($2086<<3)|0);
-        $2088 = +HEAPF32[$2087>>2];
-        $2089 = $2085 * $2088;
-        $2090 = (($$51058) + ($2035<<3)|0);
-        HEAPF32[$2090>>2] = $2089;
-        break;
-       }
-       default: {
-        $$01050 = $$21052;
-        label = 90;
-        break L50;
-       }
-       }
-      } while(0);
-      $2091 = ((($$61078)) + 4|0);
-      $2092 = HEAP32[$2091>>2]|0;
-      $$81094$phi = $$81094;$$8$phi = $$8;$$61071$phi = $$61071;$$6$phi = $$6;$$51058$phi = $$51058;$$5$phi = $$5;$$21052 = $2092;$$61078 = $2091;$$sink$reg2mem$0 = $2092;$$81094 = $$81094$phi;$$8 = $$8$phi;$$61071 = $$61071$phi;$$6 = $$6$phi;$$51058 = $$51058$phi;$$5 = $$5$phi;
-      label = 583;
-      continue L19;
-      break;
-     }
-     case 50:  {
-      $2093 = $$21052 >>> 23;
-      $2094 = $2093 & 511;
-      $2095 = (($$51058) + ($2094<<3)|0);
-      $2096 = ((($2095)) + 4|0);
-      $2097 = HEAP32[$2096>>2]|0;
-      $2098 = $2097&65535;
-      $2099 = $2098&65535;
-      $2100 = $2099 << 8;
-      $2101 = (($2094) + 1)|0;
-      $2102 = (($$51058) + ($2101<<3)|0);
-      $2103 = ((($2102)) + 4|0);
-      $2104 = HEAP32[$2103>>2]|0;
-      $2105 = $2104&65535;
-      $2106 = $2105&65535;
-      $2107 = $2106 & 255;
-      $2108 = $2100 | $2107;
-      switch ($2108|0) {
-      case 771:  {
-       $2109 = (($$51058) + ($2094<<3)|0);
-       $2110 = HEAP32[$2109>>2]|0;
-       $2111 = (($2094) + 1)|0;
-       $2112 = (($$51058) + ($2111<<3)|0);
-       $2113 = HEAP32[$2112>>2]|0;
-       $2114 = (($$51058) + ($2094<<3)|0);
-       $2115 = ((($2114)) + 4|0);
-       HEAP32[$2115>>2] = 6;
-       $2116 = (+($2110|0));
-       $2117 = (+($2113|0));
-       $2118 = $2116 / $2117;
-       $2119 = (($$51058) + ($2094<<3)|0);
-       $$sink25$reg2mem$0 = $2118;$$sink28$reg2mem$0 = $2119;
-       break;
-      }
-      case 774:  {
-       $2120 = (($$51058) + ($2094<<3)|0);
-       $2121 = HEAP32[$2120>>2]|0;
-       $2122 = (($2094) + 1)|0;
-       $2123 = (($$51058) + ($2122<<3)|0);
-       $2124 = +HEAPF32[$2123>>2];
-       $2125 = (($$51058) + ($2094<<3)|0);
-       $2126 = ((($2125)) + 4|0);
-       HEAP32[$2126>>2] = 6;
-       $2127 = (+($2121|0));
-       $2128 = $2127 / $2124;
-       $2129 = (($$51058) + ($2094<<3)|0);
-       $$sink25$reg2mem$0 = $2128;$$sink28$reg2mem$0 = $2129;
-       break;
-      }
-      case 1539:  {
-       $2130 = (($$51058) + ($2094<<3)|0);
-       $2131 = +HEAPF32[$2130>>2];
-       $2132 = (($2094) + 1)|0;
-       $2133 = (($$51058) + ($2132<<3)|0);
-       $2134 = HEAP32[$2133>>2]|0;
-       $2135 = (+($2134|0));
-       $2136 = $2131 / $2135;
-       $2137 = (($$51058) + ($2094<<3)|0);
-       $$sink25$reg2mem$0 = $2136;$$sink28$reg2mem$0 = $2137;
-       break;
-      }
-      case 1542:  {
-       $2138 = (($$51058) + ($2094<<3)|0);
-       $2139 = +HEAPF32[$2138>>2];
-       $2140 = (($2094) + 1)|0;
-       $2141 = (($$51058) + ($2140<<3)|0);
-       $2142 = +HEAPF32[$2141>>2];
-       $2143 = $2139 / $2142;
-       $2144 = (($$51058) + ($2094<<3)|0);
-       $$sink25$reg2mem$0 = $2143;$$sink28$reg2mem$0 = $2144;
-       break;
-      }
-      default: {
-       $$01050 = $$21052;
-       label = 90;
-       break L50;
-      }
-      }
-      HEAPF32[$$sink28$reg2mem$0>>2] = $$sink25$reg2mem$0;
-      $2145 = ((($$61078)) + 4|0);
-      $2146 = HEAP32[$2145>>2]|0;
-      $$81094$phi = $$81094;$$8$phi = $$8;$$61071$phi = $$61071;$$6$phi = $$6;$$51058$phi = $$51058;$$5$phi = $$5;$$21052 = $2146;$$61078 = $2145;$$sink$reg2mem$0 = $2146;$$81094 = $$81094$phi;$$8 = $$8$phi;$$61071 = $$61071$phi;$$6 = $$6$phi;$$51058 = $$51058$phi;$$5 = $$5$phi;
-      label = 583;
-      continue L19;
-      break;
-     }
-     case 51:  {
-      $2232 = $$21052 >>> 23;
-      $2233 = $2232 & 511;
-      $2234 = (($$51058) + ($2233<<3)|0);
-      $2235 = (($2233) + 1)|0;
-      $2236 = (($$51058) + ($2235<<3)|0);
-      __THREW__ = 0;
-      ;HEAP32[$$byval_copy1130>>2]=HEAP32[$2234>>2]|0;HEAP32[$$byval_copy1130+4>>2]=HEAP32[$2234+4>>2]|0;
-      ;HEAP32[$$byval_copy1131>>2]=HEAP32[$2236>>2]|0;HEAP32[$$byval_copy1131+4>>2]=HEAP32[$2236+4>>2]|0;
-      $2237 = (invoke_iiii(185,($1|0),($$byval_copy1130|0),($$byval_copy1131|0))|0);
-      $2238 = __THREW__; __THREW__ = 0;
-      if ((($2238|0) != 0) & ((threwValue|0) != 0)) { $2239 = _testSetjmp(HEAP32[$2238>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($2239|0) == 0) { _longjmp($2238|0, threwValue|0); } tempRet0 = (threwValue); } else { $2239 = -1; };
-      $2240 = tempRet0;
-      $cond1291 = ($2239|0)==(1);
-      if ($cond1291) {
-       $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $2240;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-       continue L3;
-      }
-      $2241 = ($2237<<24>>24)!=(0);
-      $2242 = (($$51058) + ($2233<<3)|0);
-      $2243 = ((($2242)) + 4|0);
-      do {
-       if ($2241) {
-        HEAP32[$2243>>2] = 2;
-        $2244 = (($$51058) + ($2233<<3)|0);
-        $$sink31$reg2mem$0 = $2244;
-       } else {
-        $2245 = HEAP32[$2243>>2]|0;
-        $2246 = $2245&65535;
-        $2247 = $2246&65535;
-        $2248 = $2247 << 8;
-        $2249 = (($2233) + 1)|0;
-        $2250 = (($$51058) + ($2249<<3)|0);
-        $2251 = ((($2250)) + 4|0);
-        $2252 = HEAP32[$2251>>2]|0;
-        $2253 = $2252&65535;
-        $2254 = $2253&65535;
-        $2255 = $2254 & 255;
-        $2256 = $2248 | $2255;
-        switch ($2256|0) {
-        case 771:  {
-         $2257 = (($$51058) + ($2233<<3)|0);
-         $2258 = HEAP32[$2257>>2]|0;
-         $2259 = (($2233) + 1)|0;
-         $2260 = (($$51058) + ($2259<<3)|0);
-         $2261 = HEAP32[$2260>>2]|0;
-         $2262 = ($2258|0)==($2261|0);
-         $2263 = $2262&1;
-         $$01013 = $2263;
-         break;
-        }
-        case 774:  {
-         $2264 = (($$51058) + ($2233<<3)|0);
-         $2265 = HEAP32[$2264>>2]|0;
-         $2266 = (+($2265|0));
-         $2267 = (($2233) + 1)|0;
-         $2268 = (($$51058) + ($2267<<3)|0);
-         $2269 = +HEAPF32[$2268>>2];
-         $2270 = $2266 == $2269;
-         $2271 = $2270&1;
-         $$01013 = $2271;
-         break;
-        }
-        case 1539:  {
-         $2272 = (($$51058) + ($2233<<3)|0);
-         $2273 = +HEAPF32[$2272>>2];
-         $2274 = (($2233) + 1)|0;
-         $2275 = (($$51058) + ($2274<<3)|0);
-         $2276 = HEAP32[$2275>>2]|0;
-         $2277 = (+($2276|0));
-         $2278 = $2273 == $2277;
-         $2279 = $2278&1;
-         $$01013 = $2279;
-         break;
-        }
-        case 1542:  {
-         $2280 = (($$51058) + ($2233<<3)|0);
-         $2281 = +HEAPF32[$2280>>2];
-         $2282 = (($2233) + 1)|0;
-         $2283 = (($$51058) + ($2282<<3)|0);
-         $2284 = +HEAPF32[$2283>>2];
-         $2285 = $2281 == $2284;
-         $2286 = $2285&1;
-         $$01013 = $2286;
-         break;
-        }
-        default: {
-         $$01050 = $$21052;
-         label = 90;
-         break L50;
-        }
-        }
-        $2287 = ($$01013|0)!=(0);
-        $2288 = (($$51058) + ($2233<<3)|0);
-        $2289 = ((($2288)) + 4|0);
-        if ($2287) {
-         HEAP32[$2289>>2] = 2;
-         $2290 = (($$51058) + ($2233<<3)|0);
-         $$sink31$reg2mem$0 = $2290;
-         break;
-        } else {
-         HEAP32[$2289>>2] = 0;
-         $2291 = (($$51058) + ($2233<<3)|0);
-         $$sink31$reg2mem$0 = $2291;
-         break;
-        }
-       }
-      } while(0);
-      HEAP32[$$sink31$reg2mem$0>>2] = 1;
-      $2292 = ((($$61078)) + 4|0);
-      $2293 = HEAP32[$2292>>2]|0;
-      $$81094$phi = $$81094;$$8$phi = $$8;$$61071$phi = $$61071;$$6$phi = $$6;$$51058$phi = $$51058;$$5$phi = $$5;$$21052 = $2293;$$61078 = $2292;$$sink$reg2mem$0 = $2293;$$81094 = $$81094$phi;$$8 = $$8$phi;$$61071 = $$61071$phi;$$6 = $$6$phi;$$51058 = $$51058$phi;$$5 = $$5$phi;
-      label = 583;
-      continue L19;
-      break;
-     }
-     case 52:  {
-      $2294 = $$21052 >>> 23;
-      $2295 = $2294 & 511;
-      $2296 = (($$51058) + ($2295<<3)|0);
-      $2297 = ((($2296)) + 4|0);
-      $2298 = HEAP32[$2297>>2]|0;
-      $2299 = $2298&65535;
-      $2300 = $2299&65535;
-      $2301 = $2300 << 8;
-      $2302 = (($2295) + 1)|0;
-      $2303 = (($$51058) + ($2302<<3)|0);
-      $2304 = ((($2303)) + 4|0);
-      $2305 = HEAP32[$2304>>2]|0;
-      $2306 = $2305&65535;
-      $2307 = $2306&65535;
-      $2308 = $2307 & 255;
-      $2309 = $2301 | $2308;
-      switch ($2309|0) {
-      case 771:  {
-       $2310 = (($$51058) + ($2295<<3)|0);
-       $2311 = HEAP32[$2310>>2]|0;
-       $2312 = (($2295) + 1)|0;
-       $2313 = (($$51058) + ($2312<<3)|0);
-       $2314 = HEAP32[$2313>>2]|0;
-       $2315 = ($2311|0)<($2314|0);
-       $2316 = $2315&1;
-       $$01012 = $2316;
-       break;
-      }
-      case 774:  {
-       $2317 = (($$51058) + ($2295<<3)|0);
-       $2318 = HEAP32[$2317>>2]|0;
-       $2319 = (+($2318|0));
-       $2320 = (($2295) + 1)|0;
-       $2321 = (($$51058) + ($2320<<3)|0);
-       $2322 = +HEAPF32[$2321>>2];
-       $2323 = $2319 < $2322;
-       $2324 = $2323&1;
-       $$01012 = $2324;
-       break;
-      }
-      case 1539:  {
-       $2325 = (($$51058) + ($2295<<3)|0);
-       $2326 = +HEAPF32[$2325>>2];
-       $2327 = (($2295) + 1)|0;
-       $2328 = (($$51058) + ($2327<<3)|0);
-       $2329 = HEAP32[$2328>>2]|0;
-       $2330 = (+($2329|0));
-       $2331 = $2326 < $2330;
-       $2332 = $2331&1;
-       $$01012 = $2332;
-       break;
-      }
-      case 1542:  {
-       $2333 = (($$51058) + ($2295<<3)|0);
-       $2334 = +HEAPF32[$2333>>2];
-       $2335 = (($2295) + 1)|0;
-       $2336 = (($$51058) + ($2335<<3)|0);
-       $2337 = +HEAPF32[$2336>>2];
-       $2338 = $2334 < $2337;
-       $2339 = $2338&1;
-       $$01012 = $2339;
-       break;
-      }
-      default: {
-       $$01050 = $$21052;
-       label = 90;
-       break L50;
-      }
-      }
-      $2340 = ($$01012|0)!=(0);
-      $2341 = (($$51058) + ($2295<<3)|0);
-      $2342 = ((($2341)) + 4|0);
-      if ($2340) {
-       HEAP32[$2342>>2] = 2;
-       $2343 = (($$51058) + ($2295<<3)|0);
-       $$sink34$reg2mem$0 = $2343;
-      } else {
-       HEAP32[$2342>>2] = 0;
-       $2344 = (($$51058) + ($2295<<3)|0);
-       $$sink34$reg2mem$0 = $2344;
-      }
-      HEAP32[$$sink34$reg2mem$0>>2] = 1;
-      $2345 = ((($$61078)) + 4|0);
-      $2346 = HEAP32[$2345>>2]|0;
-      $$81094$phi = $$81094;$$8$phi = $$8;$$61071$phi = $$61071;$$6$phi = $$6;$$51058$phi = $$51058;$$5$phi = $$5;$$21052 = $2346;$$61078 = $2345;$$sink$reg2mem$0 = $2346;$$81094 = $$81094$phi;$$8 = $$8$phi;$$61071 = $$61071$phi;$$6 = $$6$phi;$$51058 = $$51058$phi;$$5 = $$5$phi;
-      label = 583;
-      continue L19;
-      break;
-     }
-     case 53:  {
-      $2347 = $$21052 >>> 23;
-      $2348 = $2347 & 511;
-      $2349 = (($$51058) + ($2348<<3)|0);
-      $2350 = ((($2349)) + 4|0);
-      $2351 = HEAP32[$2350>>2]|0;
-      $2352 = $2351&65535;
-      $2353 = $2352&65535;
-      $2354 = $2353 << 8;
-      $2355 = (($2348) + 1)|0;
-      $2356 = (($$51058) + ($2355<<3)|0);
-      $2357 = ((($2356)) + 4|0);
-      $2358 = HEAP32[$2357>>2]|0;
-      $2359 = $2358&65535;
-      $2360 = $2359&65535;
-      $2361 = $2360 & 255;
-      $2362 = $2354 | $2361;
-      switch ($2362|0) {
-      case 771:  {
-       $2363 = (($$51058) + ($2348<<3)|0);
-       $2364 = HEAP32[$2363>>2]|0;
-       $2365 = (($2348) + 1)|0;
-       $2366 = (($$51058) + ($2365<<3)|0);
-       $2367 = HEAP32[$2366>>2]|0;
-       $2368 = ($2364|0)<=($2367|0);
-       $2369 = $2368&1;
-       $$01011 = $2369;
-       break;
-      }
-      case 774:  {
-       $2370 = (($$51058) + ($2348<<3)|0);
-       $2371 = HEAP32[$2370>>2]|0;
-       $2372 = (+($2371|0));
-       $2373 = (($2348) + 1)|0;
-       $2374 = (($$51058) + ($2373<<3)|0);
-       $2375 = +HEAPF32[$2374>>2];
-       $2376 = $2372 <= $2375;
-       $2377 = $2376&1;
-       $$01011 = $2377;
-       break;
-      }
-      case 1539:  {
-       $2378 = (($$51058) + ($2348<<3)|0);
-       $2379 = +HEAPF32[$2378>>2];
-       $2380 = (($2348) + 1)|0;
-       $2381 = (($$51058) + ($2380<<3)|0);
-       $2382 = HEAP32[$2381>>2]|0;
-       $2383 = (+($2382|0));
-       $2384 = $2379 <= $2383;
-       $2385 = $2384&1;
-       $$01011 = $2385;
-       break;
-      }
-      case 1542:  {
-       $2386 = (($$51058) + ($2348<<3)|0);
-       $2387 = +HEAPF32[$2386>>2];
-       $2388 = (($2348) + 1)|0;
-       $2389 = (($$51058) + ($2388<<3)|0);
-       $2390 = +HEAPF32[$2389>>2];
-       $2391 = $2387 <= $2390;
-       $2392 = $2391&1;
-       $$01011 = $2392;
-       break;
-      }
-      default: {
-       $$01050 = $$21052;
-       label = 90;
-       break L50;
-      }
-      }
-      $2393 = ($$01011|0)!=(0);
-      $2394 = (($$51058) + ($2348<<3)|0);
-      $2395 = ((($2394)) + 4|0);
-      if ($2393) {
-       HEAP32[$2395>>2] = 2;
-       $2396 = (($$51058) + ($2348<<3)|0);
-       $$sink37$reg2mem$0 = $2396;
-      } else {
-       HEAP32[$2395>>2] = 0;
-       $2397 = (($$51058) + ($2348<<3)|0);
-       $$sink37$reg2mem$0 = $2397;
-      }
-      HEAP32[$$sink37$reg2mem$0>>2] = 1;
-      $2398 = ((($$61078)) + 4|0);
-      $2399 = HEAP32[$2398>>2]|0;
-      $$81094$phi = $$81094;$$8$phi = $$8;$$61071$phi = $$61071;$$6$phi = $$6;$$51058$phi = $$51058;$$5$phi = $$5;$$21052 = $2399;$$61078 = $2398;$$sink$reg2mem$0 = $2399;$$81094 = $$81094$phi;$$8 = $$8$phi;$$61071 = $$61071$phi;$$6 = $$6$phi;$$51058 = $$51058$phi;$$5 = $$5$phi;
-      label = 583;
-      continue L19;
-      break;
-     }
-     case 54:  {
-      $2400 = $$21052 >>> 23;
-      $2401 = $2400 & 511;
-      $2402 = (($$51058) + ($2401<<3)|0);
-      $2403 = ((($2402)) + 4|0);
-      $2404 = HEAP32[$2403>>2]|0;
-      $2405 = $2404&65535;
-      $2406 = $2405&65535;
-      $2407 = $2406 << 8;
-      $2408 = (($2401) + 1)|0;
-      $2409 = (($$51058) + ($2408<<3)|0);
-      $2410 = ((($2409)) + 4|0);
-      $2411 = HEAP32[$2410>>2]|0;
-      $2412 = $2411&65535;
-      $2413 = $2412&65535;
-      $2414 = $2413 & 255;
-      $2415 = $2407 | $2414;
-      switch ($2415|0) {
-      case 771:  {
-       $2416 = (($$51058) + ($2401<<3)|0);
-       $2417 = HEAP32[$2416>>2]|0;
-       $2418 = (($2401) + 1)|0;
-       $2419 = (($$51058) + ($2418<<3)|0);
-       $2420 = HEAP32[$2419>>2]|0;
-       $2421 = ($2417|0)>($2420|0);
-       $2422 = $2421&1;
-       $$01010 = $2422;
-       break;
-      }
-      case 774:  {
-       $2423 = (($$51058) + ($2401<<3)|0);
-       $2424 = HEAP32[$2423>>2]|0;
-       $2425 = (+($2424|0));
-       $2426 = (($2401) + 1)|0;
-       $2427 = (($$51058) + ($2426<<3)|0);
-       $2428 = +HEAPF32[$2427>>2];
-       $2429 = $2425 > $2428;
-       $2430 = $2429&1;
-       $$01010 = $2430;
-       break;
-      }
-      case 1539:  {
-       $2431 = (($$51058) + ($2401<<3)|0);
-       $2432 = +HEAPF32[$2431>>2];
-       $2433 = (($2401) + 1)|0;
-       $2434 = (($$51058) + ($2433<<3)|0);
-       $2435 = HEAP32[$2434>>2]|0;
-       $2436 = (+($2435|0));
-       $2437 = $2432 > $2436;
-       $2438 = $2437&1;
-       $$01010 = $2438;
-       break;
-      }
-      case 1542:  {
-       $2439 = (($$51058) + ($2401<<3)|0);
-       $2440 = +HEAPF32[$2439>>2];
-       $2441 = (($2401) + 1)|0;
-       $2442 = (($$51058) + ($2441<<3)|0);
-       $2443 = +HEAPF32[$2442>>2];
-       $2444 = $2440 > $2443;
-       $2445 = $2444&1;
-       $$01010 = $2445;
-       break;
-      }
-      default: {
-       $$01050 = $$21052;
-       label = 90;
-       break L50;
-      }
-      }
-      $2446 = ($$01010|0)!=(0);
-      $2447 = (($$51058) + ($2401<<3)|0);
-      $2448 = ((($2447)) + 4|0);
-      if ($2446) {
-       HEAP32[$2448>>2] = 2;
-       $2449 = (($$51058) + ($2401<<3)|0);
-       $$sink40$reg2mem$0 = $2449;
-      } else {
-       HEAP32[$2448>>2] = 0;
-       $2450 = (($$51058) + ($2401<<3)|0);
-       $$sink40$reg2mem$0 = $2450;
-      }
-      HEAP32[$$sink40$reg2mem$0>>2] = 1;
-      $2451 = ((($$61078)) + 4|0);
-      $2452 = HEAP32[$2451>>2]|0;
-      $$81094$phi = $$81094;$$8$phi = $$8;$$61071$phi = $$61071;$$6$phi = $$6;$$51058$phi = $$51058;$$5$phi = $$5;$$21052 = $2452;$$61078 = $2451;$$sink$reg2mem$0 = $2452;$$81094 = $$81094$phi;$$8 = $$8$phi;$$61071 = $$61071$phi;$$6 = $$6$phi;$$51058 = $$51058$phi;$$5 = $$5$phi;
-      label = 583;
-      continue L19;
-      break;
-     }
-     case 55:  {
-      $2453 = $$21052 >>> 23;
-      $2454 = $2453 & 511;
-      $2455 = (($$51058) + ($2454<<3)|0);
-      $2456 = ((($2455)) + 4|0);
-      $2457 = HEAP32[$2456>>2]|0;
-      $2458 = $2457&65535;
-      $2459 = $2458&65535;
-      $2460 = $2459 << 8;
-      $2461 = (($2454) + 1)|0;
-      $2462 = (($$51058) + ($2461<<3)|0);
-      $2463 = ((($2462)) + 4|0);
-      $2464 = HEAP32[$2463>>2]|0;
-      $2465 = $2464&65535;
-      $2466 = $2465&65535;
-      $2467 = $2466 & 255;
-      $2468 = $2460 | $2467;
-      switch ($2468|0) {
-      case 771:  {
-       $2469 = (($$51058) + ($2454<<3)|0);
-       $2470 = HEAP32[$2469>>2]|0;
-       $2471 = (($2454) + 1)|0;
-       $2472 = (($$51058) + ($2471<<3)|0);
-       $2473 = HEAP32[$2472>>2]|0;
-       $2474 = ($2470|0)>=($2473|0);
-       $2475 = $2474&1;
-       $$01009 = $2475;
-       break;
-      }
-      case 774:  {
-       $2476 = (($$51058) + ($2454<<3)|0);
-       $2477 = HEAP32[$2476>>2]|0;
-       $2478 = (+($2477|0));
-       $2479 = (($2454) + 1)|0;
-       $2480 = (($$51058) + ($2479<<3)|0);
-       $2481 = +HEAPF32[$2480>>2];
-       $2482 = $2478 >= $2481;
-       $2483 = $2482&1;
-       $$01009 = $2483;
-       break;
-      }
-      case 1539:  {
-       $2484 = (($$51058) + ($2454<<3)|0);
-       $2485 = +HEAPF32[$2484>>2];
-       $2486 = (($2454) + 1)|0;
-       $2487 = (($$51058) + ($2486<<3)|0);
-       $2488 = HEAP32[$2487>>2]|0;
-       $2489 = (+($2488|0));
-       $2490 = $2485 >= $2489;
-       $2491 = $2490&1;
-       $$01009 = $2491;
-       break;
-      }
-      case 1542:  {
-       $2492 = (($$51058) + ($2454<<3)|0);
-       $2493 = +HEAPF32[$2492>>2];
-       $2494 = (($2454) + 1)|0;
-       $2495 = (($$51058) + ($2494<<3)|0);
-       $2496 = +HEAPF32[$2495>>2];
-       $2497 = $2493 >= $2496;
-       $2498 = $2497&1;
-       $$01009 = $2498;
-       break;
-      }
-      default: {
-       $$01050 = $$21052;
-       label = 90;
-       break L50;
-      }
-      }
-      $2499 = ($$01009|0)!=(0);
-      $2500 = (($$51058) + ($2454<<3)|0);
-      $2501 = ((($2500)) + 4|0);
-      if ($2499) {
-       HEAP32[$2501>>2] = 2;
-       $2502 = (($$51058) + ($2454<<3)|0);
-       $$sink43$reg2mem$0 = $2502;
-      } else {
-       HEAP32[$2501>>2] = 0;
-       $2503 = (($$51058) + ($2454<<3)|0);
-       $$sink43$reg2mem$0 = $2503;
-      }
-      HEAP32[$$sink43$reg2mem$0>>2] = 1;
-      $2504 = ((($$61078)) + 4|0);
-      $2505 = HEAP32[$2504>>2]|0;
-      $$81094$phi = $$81094;$$8$phi = $$8;$$61071$phi = $$61071;$$6$phi = $$6;$$51058$phi = $$51058;$$5$phi = $$5;$$21052 = $2505;$$61078 = $2504;$$sink$reg2mem$0 = $2505;$$81094 = $$81094$phi;$$8 = $$8$phi;$$61071 = $$61071$phi;$$6 = $$6$phi;$$51058 = $$51058$phi;$$5 = $$5$phi;
-      label = 583;
-      continue L19;
-      break;
-     }
-     case 56:  {
-      $2506 = $$21052 >>> 23;
-      $2507 = $2506 & 511;
-      $2508 = (($$51058) + ($2507<<3)|0);
-      $2509 = $$21052 >>> 7;
-      $2510 = $2509 & 127;
-      $2511 = $$21052 >>> 14;
-      $2512 = $2511 & 511;
-      $2513 = (($$51058) + ($2512<<3)|0);
-      __THREW__ = 0;
-      invoke_viiii(167,($59|0),($1|0),($2510|0),($2513|0));
-      $2514 = __THREW__; __THREW__ = 0;
-      if ((($2514|0) != 0) & ((threwValue|0) != 0)) { $2515 = _testSetjmp(HEAP32[$2514>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($2515|0) == 0) { _longjmp($2514|0, threwValue|0); } tempRet0 = (threwValue); } else { $2515 = -1; };
-      $2516 = tempRet0;
-      $cond1290 = ($2515|0)==(1);
-      if ($cond1290) {
-       $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $2516;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-       continue L3;
-      }
-      ;HEAP32[$2508>>2]=HEAP32[$59>>2]|0;HEAP32[$2508+4>>2]=HEAP32[$59+4>>2]|0;
-      $2517 = ((($1)) + 92|0);
-      $2518 = ((($2517)) + 416|0);
-      HEAP32[$2518>>2] = $$11049;
-      $2519 = ((($$61078)) + 4|0);
-      $2520 = HEAP32[$2519>>2]|0;
-      $$81094$phi = $$81094;$$8$phi = $$8;$$61071$phi = $$61071;$$6$phi = $$6;$$51058$phi = $$51058;$$5$phi = $$5;$$21052 = $2520;$$61078 = $2519;$$sink$reg2mem$0 = $2520;$$81094 = $$81094$phi;$$8 = $$8$phi;$$61071 = $$61071$phi;$$6 = $$6$phi;$$51058 = $$51058$phi;$$5 = $$5$phi;
-      label = 583;
-      continue L19;
-      break;
-     }
-     case 57:  {
-      $2521 = $$21052 >>> 23;
-      $2522 = $2521 & 511;
-      $2523 = (($$51058) + ($2522<<3)|0);
-      $2524 = $$21052 >>> 14;
-      $2525 = $2524 & 511;
-      $2526 = (($$51058) + ($2525<<3)|0);
-      __THREW__ = 0;
-      ;HEAP32[$$byval_copy1132>>2]=HEAP32[$2526>>2]|0;HEAP32[$$byval_copy1132+4>>2]=HEAP32[$2526+4>>2]|0;
-      invoke_viii(186,($60|0),($1|0),($$byval_copy1132|0));
-      $2527 = __THREW__; __THREW__ = 0;
-      if ((($2527|0) != 0) & ((threwValue|0) != 0)) { $2528 = _testSetjmp(HEAP32[$2527>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($2528|0) == 0) { _longjmp($2527|0, threwValue|0); } tempRet0 = (threwValue); } else { $2528 = -1; };
-      $2529 = tempRet0;
-      $cond1288 = ($2528|0)==(1);
-      if ($cond1288) {
-       $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $2529;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-       continue L3;
-      }
-      __THREW__ = 0;
-      ;HEAP32[$$byval_copy1133>>2]=HEAP32[$2523>>2]|0;HEAP32[$$byval_copy1133+4>>2]=HEAP32[$2523+4>>2]|0;
-      ;HEAP32[$$byval_copy1134>>2]=HEAP32[$60>>2]|0;HEAP32[$$byval_copy1134+4>>2]=HEAP32[$60+4>>2]|0;
-      invoke_viii(187,($1|0),($$byval_copy1133|0),($$byval_copy1134|0));
-      $2530 = __THREW__; __THREW__ = 0;
-      if ((($2530|0) != 0) & ((threwValue|0) != 0)) { $2531 = _testSetjmp(HEAP32[$2530>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($2531|0) == 0) { _longjmp($2530|0, threwValue|0); } tempRet0 = (threwValue); } else { $2531 = -1; };
-      $2532 = tempRet0;
-      $cond1289 = ($2531|0)==(1);
-      if ($cond1289) {
-       $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $2532;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-       continue L3;
-      }
-      $2533 = ((($1)) + 92|0);
-      $2534 = ((($2533)) + 416|0);
-      HEAP32[$2534>>2] = $$11049;
-      $2535 = ((($$61078)) + 4|0);
-      $2536 = HEAP32[$2535>>2]|0;
-      $$81094$phi = $$81094;$$8$phi = $$8;$$61071$phi = $$61071;$$6$phi = $$6;$$51058$phi = $$51058;$$5$phi = $$5;$$21052 = $2536;$$61078 = $2535;$$sink$reg2mem$0 = $2536;$$81094 = $$81094$phi;$$8 = $$8$phi;$$61071 = $$61071$phi;$$6 = $$6$phi;$$51058 = $$51058$phi;$$5 = $$5$phi;
-      label = 583;
-      continue L19;
-      break;
-     }
-     case 58:  {
-      $2537 = $$21052 >>> 23;
-      $2538 = $2537 & 511;
-      $2539 = (($$51058) + ($2538<<3)|0);
-      $2540 = $$21052 >>> 14;
-      $2541 = $2540 & 511;
-      $2542 = (($$51058) + ($2541<<3)|0);
-      __THREW__ = 0;
-      ;HEAP32[$$byval_copy1135>>2]=HEAP32[$2539>>2]|0;HEAP32[$$byval_copy1135+4>>2]=HEAP32[$2539+4>>2]|0;
-      ;HEAP32[$$byval_copy1136>>2]=HEAP32[$2542>>2]|0;HEAP32[$$byval_copy1136+4>>2]=HEAP32[$2542+4>>2]|0;
-      invoke_viii(188,($1|0),($$byval_copy1135|0),($$byval_copy1136|0));
-      $2543 = __THREW__; __THREW__ = 0;
-      if ((($2543|0) != 0) & ((threwValue|0) != 0)) { $2544 = _testSetjmp(HEAP32[$2543>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($2544|0) == 0) { _longjmp($2543|0, threwValue|0); } tempRet0 = (threwValue); } else { $2544 = -1; };
-      $2545 = tempRet0;
-      $cond1287 = ($2544|0)==(1);
-      if ($cond1287) {
-       $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $2545;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-       continue L3;
-      }
-      $2546 = ((($$61078)) + 4|0);
-      $2547 = HEAP32[$2546>>2]|0;
-      $$81094$phi = $$81094;$$8$phi = $$8;$$61071$phi = $$61071;$$6$phi = $$6;$$51058$phi = $$51058;$$5$phi = $$5;$$21052 = $2547;$$61078 = $2546;$$sink$reg2mem$0 = $2547;$$81094 = $$81094$phi;$$8 = $$8$phi;$$61071 = $$61071$phi;$$6 = $$6$phi;$$51058 = $$51058$phi;$$5 = $$5$phi;
-      label = 583;
-      continue L19;
-      break;
-     }
-     case 59:  {
-      $2548 = $$21052 >>> 23;
-      $2549 = $2548 & 511;
-      $2550 = $$21052 >>> 7;
-      $2551 = $2550 & 127;
-      $2552 = $$21052 >>> 14;
-      $2553 = $2552 & 511;
-      $2554 = (($$51058) + ($2553<<3)|0);
-      ;HEAP32[$61>>2]=HEAP32[$2554>>2]|0;HEAP32[$61+4>>2]=HEAP32[$2554+4>>2]|0;
-      $2555 = ((($61)) + 4|0);
-      $2556 = HEAP32[$2555>>2]|0;
-      $2557 = ($2556|0)==(14);
-      do {
-       if ($2557) {
-        $2565 = $$21052 >>> 23;
-        $2566 = $2565 & 511;
-        $2567 = (($$51058) + ($2566<<3)|0);
-        __THREW__ = 0;
-        ;HEAP32[$$byval_copy1137>>2]=HEAP32[$61>>2]|0;HEAP32[$$byval_copy1137+4>>2]=HEAP32[$61+4>>2]|0;
-        invoke_viiii(189,($62|0),($1|0),($$byval_copy1137|0),($2551|0));
-        $2568 = __THREW__; __THREW__ = 0;
-        if ((($2568|0) != 0) & ((threwValue|0) != 0)) { $2569 = _testSetjmp(HEAP32[$2568>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($2569|0) == 0) { _longjmp($2568|0, threwValue|0); } tempRet0 = (threwValue); } else { $2569 = -1; };
-        $2570 = tempRet0;
-        $cond1286 = ($2569|0)==(1);
-        if ($cond1286) {
-         $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $2570;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-         continue L3;
-        }
-        ;HEAP32[$2567>>2]=HEAP32[$62>>2]|0;HEAP32[$2567+4>>2]=HEAP32[$62+4>>2]|0;
-       } else {
-        $2558 = ($2551|0)==(0);
-        if ($2558) {
-         $2559 = $$21052 >>> 23;
-         $2560 = $2559 & 511;
-         $2561 = (($$51058) + ($2560<<3)|0);
-         ;HEAP32[$2561>>2]=HEAP32[$61>>2]|0;HEAP32[$2561+4>>2]=HEAP32[$61+4>>2]|0;
-         break;
-        } else {
-         $2562 = (($$51058) + ($2549<<3)|0);
-         $2563 = ((($2562)) + 4|0);
-         HEAP32[$2563>>2] = 0;
-         $2564 = (($$51058) + ($2549<<3)|0);
-         HEAP32[$2564>>2] = 0;
-         break;
-        }
-       }
-      } while(0);
-      $2571 = ((($$61078)) + 4|0);
-      $2572 = HEAP32[$2571>>2]|0;
-      $$81094$phi = $$81094;$$8$phi = $$8;$$61071$phi = $$61071;$$6$phi = $$6;$$51058$phi = $$51058;$$5$phi = $$5;$$21052 = $2572;$$61078 = $2571;$$sink$reg2mem$0 = $2572;$$81094 = $$81094$phi;$$8 = $$8$phi;$$61071 = $$61071$phi;$$6 = $$6$phi;$$51058 = $$51058$phi;$$5 = $$5$phi;
-      label = 583;
-      continue L19;
-      break;
-     }
-     case 60:  {
-      $2573 = $$21052 >>> 14;
-      $2574 = $2573 & 511;
-      $2575 = (($$51058) + ($2574<<3)|0);
-      $2576 = $$21052 >>> 7;
-      $2577 = $2576 & 127;
-      $2578 = $$21052 >>> 23;
-      $2579 = $2578 & 511;
-      $2580 = (($$51058) + ($2579<<3)|0);
-      __THREW__ = 0;
-      ;HEAP32[$$byval_copy1138>>2]=HEAP32[$2575>>2]|0;HEAP32[$$byval_copy1138+4>>2]=HEAP32[$2575+4>>2]|0;
-      ;HEAP32[$$byval_copy1139>>2]=HEAP32[$2580>>2]|0;HEAP32[$$byval_copy1139+4>>2]=HEAP32[$2580+4>>2]|0;
-      invoke_viiii(190,($1|0),($$byval_copy1138|0),($2577|0),($$byval_copy1139|0));
-      $2581 = __THREW__; __THREW__ = 0;
-      if ((($2581|0) != 0) & ((threwValue|0) != 0)) { $2582 = _testSetjmp(HEAP32[$2581>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($2582|0) == 0) { _longjmp($2581|0, threwValue|0); } tempRet0 = (threwValue); } else { $2582 = -1; };
-      $2583 = tempRet0;
-      $cond1285 = ($2582|0)==(1);
-      if ($cond1285) {
-       $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $2583;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-       continue L3;
-      }
-      $2584 = ((($$61078)) + 4|0);
-      $2585 = HEAP32[$2584>>2]|0;
-      $$81094$phi = $$81094;$$8$phi = $$8;$$61071$phi = $$61071;$$6$phi = $$6;$$51058$phi = $$51058;$$5$phi = $$5;$$21052 = $2585;$$61078 = $2584;$$sink$reg2mem$0 = $2585;$$81094 = $$81094$phi;$$8 = $$8$phi;$$61071 = $$61071$phi;$$6 = $$6$phi;$$51058 = $$51058$phi;$$5 = $$5$phi;
-      label = 583;
-      continue L19;
-      break;
-     }
-     case 61:  {
-      $2586 = $$21052 >>> 23;
-      $2587 = $2586 & 511;
-      $2588 = (($$51058) + ($2587<<3)|0);
-      ;HEAP32[$63>>2]=HEAP32[$2588>>2]|0;HEAP32[$63+4>>2]=HEAP32[$2588+4>>2]|0;
-      $2589 = $$21052 >>> 14;
-      $2590 = $2589 & 511;
-      $2591 = $$21052 >>> 7;
-      $2592 = $2591 & 127;
-      $2593 = ((($63)) + 4|0);
-      $2594 = HEAP32[$2593>>2]|0;
-      $2595 = ($2594|0)==(14);
-      if (!($2595)) {
-       $2596 = (($$51058) + ($2587<<3)|0);
-       __THREW__ = 0;
-       invoke_viiii(167,($64|0),($1|0),1,($2596|0));
-       $2597 = __THREW__; __THREW__ = 0;
-       if ((($2597|0) != 0) & ((threwValue|0) != 0)) { $2598 = _testSetjmp(HEAP32[$2597>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($2598|0) == 0) { _longjmp($2597|0, threwValue|0); } tempRet0 = (threwValue); } else { $2598 = -1; };
-       $2599 = tempRet0;
-       $cond1282 = ($2598|0)==(1);
-       if ($cond1282) {
-        $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $2599;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-        continue L3;
-       }
-       ;HEAP32[$63>>2]=HEAP32[$64>>2]|0;HEAP32[$63+4>>2]=HEAP32[$64+4>>2]|0;
-      }
-      $2600 = HEAP32[$63>>2]|0;
-      $2601 = ((($2600)) + 12|0);
-      $2602 = HEAP32[$2601>>2]|0;
-      $2603 = (($2590) + ($2592))|0;
-      $2604 = ($2602|0)>($2603|0);
-      $2605 = (($2587) + 1)|0;
-      $2606 = (($$51058) + ($2587<<3)|0);
-      L505: do {
-       if ($2604) {
-        $2607 = (($2602) - ($2590))|0;
-        $2608 = (($2607) - ($2592))|0;
-        $2609 = ((($2600)) + 20|0);
-        $2610 = HEAP32[$2609>>2]|0;
-        $2611 = (($2610) + ($2590<<3)|0);
-        __THREW__ = 0;
-        invoke_viiii(167,($65|0),($1|0),($2608|0),($2611|0));
-        $2612 = __THREW__; __THREW__ = 0;
-        if ((($2612|0) != 0) & ((threwValue|0) != 0)) { $2613 = _testSetjmp(HEAP32[$2612>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($2613|0) == 0) { _longjmp($2612|0, threwValue|0); } tempRet0 = (threwValue); } else { $2613 = -1; };
-        $2614 = tempRet0;
-        $cond1284 = ($2613|0)==(1);
-        if ($cond1284) {
-         $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $2614;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-         continue L3;
-        }
-        ;HEAP32[$2606>>2]=HEAP32[$65>>2]|0;HEAP32[$2606+4>>2]=HEAP32[$65+4>>2]|0;
-        $$01007 = $2592;$$01008 = $2605;
-        while(1) {
-         $2615 = (($$01007) + -1)|0;
-         $2616 = ($$01007|0)!=(0);
-         if (!($2616)) {
-          break L505;
-         }
-         $2617 = (($$01008) + 1)|0;
-         $2618 = (($$51058) + ($$01008<<3)|0);
-         $2619 = ((($2600)) + 20|0);
-         $2620 = HEAP32[$2619>>2]|0;
-         $2621 = (($2602) - ($2615))|0;
-         $2622 = (($2621) - 1)|0;
-         $2623 = (($2620) + ($2622<<3)|0);
-         ;HEAP32[$2618>>2]=HEAP32[$2623>>2]|0;HEAP32[$2618+4>>2]=HEAP32[$2623+4>>2]|0;
-         $$01007 = $2615;$$01008 = $2617;
-        }
-       } else {
-        __THREW__ = 0;
-        invoke_viii(173,($66|0),($1|0),0);
-        $2624 = __THREW__; __THREW__ = 0;
-        if ((($2624|0) != 0) & ((threwValue|0) != 0)) { $2625 = _testSetjmp(HEAP32[$2624>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($2625|0) == 0) { _longjmp($2624|0, threwValue|0); } tempRet0 = (threwValue); } else { $2625 = -1; };
-        $2626 = tempRet0;
-        $cond1283 = ($2625|0)==(1);
-        if ($cond1283) {
-         $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $2626;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-         continue L3;
-        }
-        ;HEAP32[$2606>>2]=HEAP32[$66>>2]|0;HEAP32[$2606+4>>2]=HEAP32[$66+4>>2]|0;
-        $$01006 = 0;
-        while(1) {
-         $2627 = (($$01006) + ($2590))|0;
-         $2628 = ($2627|0)<($2602|0);
-         if (!($2628)) {
-          $$1 = $$01006;
-          break;
-         }
-         $2629 = (($2605) + ($$01006))|0;
-         $2630 = (($$51058) + ($2629<<3)|0);
-         $2631 = ((($2600)) + 20|0);
-         $2632 = HEAP32[$2631>>2]|0;
-         $2633 = (($2590) + ($$01006))|0;
-         $2634 = (($2632) + ($2633<<3)|0);
-         ;HEAP32[$2630>>2]=HEAP32[$2634>>2]|0;HEAP32[$2630+4>>2]=HEAP32[$2634+4>>2]|0;
-         $2635 = (($$01006) + 1)|0;
-         $$01006 = $2635;
-        }
-        while(1) {
-         $2636 = ($$1|0)<($2592|0);
-         if (!($2636)) {
-          break L505;
-         }
-         $2637 = (($2605) + ($$1))|0;
-         $2638 = (($$51058) + ($2637<<3)|0);
-         $2639 = ((($2638)) + 4|0);
-         HEAP32[$2639>>2] = 0;
-         $2640 = (($2605) + ($$1))|0;
-         $2641 = (($$51058) + ($2640<<3)|0);
-         HEAP32[$2641>>2] = 0;
-         $2642 = (($$1) + 1)|0;
-         $$1 = $2642;
-        }
-       }
-      } while(0);
-      $2643 = ((($1)) + 92|0);
-      $2644 = ((($2643)) + 416|0);
-      HEAP32[$2644>>2] = $$11049;
-      $2645 = ((($$61078)) + 4|0);
-      $2646 = HEAP32[$2645>>2]|0;
-      $$81094$phi = $$81094;$$8$phi = $$8;$$61071$phi = $$61071;$$6$phi = $$6;$$51058$phi = $$51058;$$5$phi = $$5;$$21052 = $2646;$$61078 = $2645;$$sink$reg2mem$0 = $2646;$$81094 = $$81094$phi;$$8 = $$8$phi;$$61071 = $$61071$phi;$$6 = $$6$phi;$$51058 = $$51058$phi;$$5 = $$5$phi;
-      label = 583;
-      continue L19;
-      break;
-     }
-     case 62:  {
-      $2647 = $$21052 >>> 23;
-      $2648 = $2647 & 511;
-      $2649 = (($$51058) + ($2648<<3)|0);
-      $2650 = $$21052 >>> 7;
-      $2651 = $2650 & 65535;
-      $2652 = (($$61071) + ($2651<<3)|0);
-      __THREW__ = 0;
-      ;HEAP32[$$byval_copy1140>>2]=HEAP32[$2652>>2]|0;HEAP32[$$byval_copy1140+4>>2]=HEAP32[$2652+4>>2]|0;
-      invoke_viii(191,($67|0),($1|0),($$byval_copy1140|0));
-      $2653 = __THREW__; __THREW__ = 0;
-      if ((($2653|0) != 0) & ((threwValue|0) != 0)) { $2654 = _testSetjmp(HEAP32[$2653>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($2654|0) == 0) { _longjmp($2653|0, threwValue|0); } tempRet0 = (threwValue); } else { $2654 = -1; };
-      $2655 = tempRet0;
-      $cond1281 = ($2654|0)==(1);
-      if ($cond1281) {
-       $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $2655;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-       continue L3;
-      }
-      ;HEAP32[$2649>>2]=HEAP32[$67>>2]|0;HEAP32[$2649+4>>2]=HEAP32[$67+4>>2]|0;
-      $2656 = ((($1)) + 92|0);
-      $2657 = ((($2656)) + 416|0);
-      HEAP32[$2657>>2] = $$11049;
-      $2658 = ((($$61078)) + 4|0);
-      $2659 = HEAP32[$2658>>2]|0;
-      $$81094$phi = $$81094;$$8$phi = $$8;$$61071$phi = $$61071;$$6$phi = $$6;$$51058$phi = $$51058;$$5$phi = $$5;$$21052 = $2659;$$61078 = $2658;$$sink$reg2mem$0 = $2659;$$81094 = $$81094$phi;$$8 = $$8$phi;$$61071 = $$61071$phi;$$6 = $$6$phi;$$51058 = $$51058$phi;$$5 = $$5$phi;
-      label = 583;
-      continue L19;
-      break;
-     }
-     case 63:  {
-      $2660 = $$21052 >>> 23;
-      $2661 = $2660 & 511;
-      $2662 = (($$51058) + ($2661<<3)|0);
-      $2663 = $$21052 >>> 14;
-      $2664 = $2663 & 511;
-      $2665 = (($$51058) + ($2664<<3)|0);
-      __THREW__ = 0;
-      ;HEAP32[$$byval_copy1141>>2]=HEAP32[$2662>>2]|0;HEAP32[$$byval_copy1141+4>>2]=HEAP32[$2662+4>>2]|0;
-      ;HEAP32[$$byval_copy1142>>2]=HEAP32[$2665>>2]|0;HEAP32[$$byval_copy1142+4>>2]=HEAP32[$2665+4>>2]|0;
-      invoke_viii(192,($1|0),($$byval_copy1141|0),($$byval_copy1142|0));
-      $2666 = __THREW__; __THREW__ = 0;
-      if ((($2666|0) != 0) & ((threwValue|0) != 0)) { $2667 = _testSetjmp(HEAP32[$2666>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($2667|0) == 0) { _longjmp($2666|0, threwValue|0); } tempRet0 = (threwValue); } else { $2667 = -1; };
-      $2668 = tempRet0;
-      $cond1280 = ($2667|0)==(1);
-      if ($cond1280) {
-       $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $2668;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-       continue L3;
-      }
-      $2669 = ((($1)) + 12|0);
-      $2670 = HEAP32[$2669>>2]|0;
-      $2671 = ((($2670)) + 4|0);
-      $2672 = HEAP32[$2671>>2]|0;
-      $2673 = ((($$61078)) + 4|0);
-      $2674 = HEAP32[$2673>>2]|0;
-      $$81094$phi = $$81094;$$8$phi = $$8;$$61071$phi = $$61071;$$6$phi = $$6;$$5$phi = $$5;$$21052 = $2674;$$51058 = $2672;$$61078 = $2673;$$sink$reg2mem$0 = $2674;$$81094 = $$81094$phi;$$8 = $$8$phi;$$61071 = $$61071$phi;$$6 = $$6$phi;$$5 = $$5$phi;
-      label = 583;
-      continue L19;
-      break;
-     }
-     case 64:  {
-      $2675 = $$21052 >>> 14;
-      $2676 = $2675 & 511;
-      $2677 = $$21052 >>> 7;
-      $2678 = $2677 & 127;
-      $2679 = $2678<<1;
-      $2680 = (($2676) + ($2679))|0;
-      __THREW__ = 0;
-      invoke_viii(193,($68|0),($1|0),($2678|0));
-      $2681 = __THREW__; __THREW__ = 0;
-      if ((($2681|0) != 0) & ((threwValue|0) != 0)) { $2682 = _testSetjmp(HEAP32[$2681>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($2682|0) == 0) { _longjmp($2681|0, threwValue|0); } tempRet0 = (threwValue); } else { $2682 = -1; };
-      $2683 = tempRet0;
-      $cond1278 = ($2682|0)==(1);
-      if ($cond1278) {
-       $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $2683;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-       continue L3;
-      }
-      $$01005 = $2676;
-      while(1) {
-       $2684 = ($$01005|0)<($2680|0);
-       if (!($2684)) {
-        break;
-       }
-       $2685 = (($$51058) + ($$01005<<3)|0);
-       $2686 = (($$01005) + 1)|0;
-       $2687 = (($$51058) + ($2686<<3)|0);
-       __THREW__ = 0;
-       ;HEAP32[$$byval_copy1143>>2]=HEAP32[$68>>2]|0;HEAP32[$$byval_copy1143+4>>2]=HEAP32[$68+4>>2]|0;
-       ;HEAP32[$$byval_copy1144>>2]=HEAP32[$2685>>2]|0;HEAP32[$$byval_copy1144+4>>2]=HEAP32[$2685+4>>2]|0;
-       ;HEAP32[$$byval_copy1145>>2]=HEAP32[$2687>>2]|0;HEAP32[$$byval_copy1145+4>>2]=HEAP32[$2687+4>>2]|0;
-       invoke_viiii(194,($1|0),($$byval_copy1143|0),($$byval_copy1144|0),($$byval_copy1145|0));
-       $2688 = __THREW__; __THREW__ = 0;
-       if ((($2688|0) != 0) & ((threwValue|0) != 0)) { $2689 = _testSetjmp(HEAP32[$2688>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($2689|0) == 0) { _longjmp($2688|0, threwValue|0); } tempRet0 = (threwValue); } else { $2689 = -1; };
-       $2690 = tempRet0;
-       $cond1279 = ($2689|0)==(1);
-       if ($cond1279) {
-        $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $2690;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-        continue L3;
-       }
-       $2691 = (($$01005) + 2)|0;
-       $$01005 = $2691;
-      }
-      $2692 = $$21052 >>> 23;
-      $2693 = $2692 & 511;
-      $2694 = (($$51058) + ($2693<<3)|0);
-      ;HEAP32[$2694>>2]=HEAP32[$68>>2]|0;HEAP32[$2694+4>>2]=HEAP32[$68+4>>2]|0;
-      $2695 = ((($1)) + 92|0);
-      $2696 = ((($2695)) + 416|0);
-      HEAP32[$2696>>2] = $$11049;
-      $2697 = ((($$61078)) + 4|0);
-      $2698 = HEAP32[$2697>>2]|0;
-      $$81094$phi = $$81094;$$8$phi = $$8;$$61071$phi = $$61071;$$6$phi = $$6;$$51058$phi = $$51058;$$5$phi = $$5;$$21052 = $2698;$$61078 = $2697;$$sink$reg2mem$0 = $2698;$$81094 = $$81094$phi;$$8 = $$8$phi;$$61071 = $$61071$phi;$$6 = $$6$phi;$$51058 = $$51058$phi;$$5 = $$5$phi;
-      label = 583;
-      continue L19;
-      break;
-     }
-     case 65:  {
-      $2699 = $$21052 >>> 7;
-      $2700 = $2699 & 3;
-      $2701 = $2700 & 2;
-      $2702 = ($2701|0)!=(0);
-      $2703 = ((($$8)) + 20|0);
-      $2704 = HEAP32[$2703>>2]|0;
-      $2705 = $$21052 >>> 9;
-      $2706 = $2705 & 16383;
-      $2707 = (($2704) + ($2706<<2)|0);
-      $2708 = HEAP32[$2707>>2]|0;
-      if ($2702) {
-       __THREW__ = 0;
-       $2709 = (invoke_iii(165,($1|0),($2708|0))|0);
-       $2710 = __THREW__; __THREW__ = 0;
-       if ((($2710|0) != 0) & ((threwValue|0) != 0)) { $2711 = _testSetjmp(HEAP32[$2710>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($2711|0) == 0) { _longjmp($2710|0, threwValue|0); } tempRet0 = (threwValue); } else { $2711 = -1; };
-       $2712 = tempRet0;
-       $cond1277 = ($2711|0)==(1);
-       if ($cond1277) {
-        $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $2712;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-        continue L3;
-       }
-       $$01004 = $2709;
-      } else {
-       __THREW__ = 0;
-       $2713 = (invoke_iii(195,($1|0),($2708|0))|0);
-       $2714 = __THREW__; __THREW__ = 0;
-       if ((($2714|0) != 0) & ((threwValue|0) != 0)) { $2715 = _testSetjmp(HEAP32[$2714>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($2715|0) == 0) { _longjmp($2714|0, threwValue|0); } tempRet0 = (threwValue); } else { $2715 = -1; };
-       $2716 = tempRet0;
-       $cond1275 = ($2715|0)==(1);
-       if ($cond1275) {
-        $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $2716;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-        continue L3;
-       }
-       $$01004 = $2713;
-      }
-      $2717 = $2700 & 1;
-      $2718 = ($2717|0)!=(0);
-      if ($2718) {
-       $2719 = HEAP32[$$01004>>2]|0;
-       $2720 = $2719 >>> 11;
-       $2721 = $2720 | 256;
-       $2722 = HEAP32[$$01004>>2]|0;
-       $2723 = $2721 & 2097151;
-       $2724 = $2723 << 11;
-       $2725 = $2722 & 2047;
-       $2726 = $2725 | $2724;
-       HEAP32[$$01004>>2] = $2726;
-      }
-      $2727 = $$21052 >>> 23;
-      $2728 = $2727 & 511;
-      $2729 = (($$51058) + ($2728<<3)|0);
-      __THREW__ = 0;
-      invoke_vii(133,($69|0),($$01004|0));
-      $2730 = __THREW__; __THREW__ = 0;
-      if ((($2730|0) != 0) & ((threwValue|0) != 0)) { $2731 = _testSetjmp(HEAP32[$2730>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($2731|0) == 0) { _longjmp($2730|0, threwValue|0); } tempRet0 = (threwValue); } else { $2731 = -1; };
-      $2732 = tempRet0;
-      $cond1276 = ($2731|0)==(1);
-      if ($cond1276) {
-       $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $2732;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-       continue L3;
-      }
-      ;HEAP32[$2729>>2]=HEAP32[$69>>2]|0;HEAP32[$2729+4>>2]=HEAP32[$69+4>>2]|0;
-      $2733 = ((($1)) + 92|0);
-      $2734 = ((($2733)) + 416|0);
-      HEAP32[$2734>>2] = $$11049;
-      $2735 = ((($$61078)) + 4|0);
-      $2736 = HEAP32[$2735>>2]|0;
-      $$81094$phi = $$81094;$$8$phi = $$8;$$61071$phi = $$61071;$$6$phi = $$6;$$51058$phi = $$51058;$$5$phi = $$5;$$21052 = $2736;$$61078 = $2735;$$sink$reg2mem$0 = $2736;$$81094 = $$81094$phi;$$8 = $$8$phi;$$61071 = $$61071$phi;$$6 = $$6$phi;$$51058 = $$51058$phi;$$5 = $$5$phi;
-      label = 583;
-      continue L19;
-      break;
-     }
-     case 66:  {
-      $2973 = $$21052 >>> 14;
-      $2974 = $2973 & 511;
-      $2975 = $$21052 >>> 23;
-      $2976 = $2975 & 511;
-      $2977 = (($$51058) + ($2976<<3)|0);
-      $2978 = (($$51058) + ($2974<<3)|0);
-      $2979 = (($2974) + 1)|0;
-      $2980 = (($$51058) + ($2979<<3)|0);
-      $2981 = $$21052 >>> 7;
-      $2982 = $2981 & 127;
-      $2983 = $2982&255;
-      __THREW__ = 0;
-      ;HEAP32[$$byval_copy1152>>2]=HEAP32[$2978>>2]|0;HEAP32[$$byval_copy1152+4>>2]=HEAP32[$2978+4>>2]|0;
-      ;HEAP32[$$byval_copy1153>>2]=HEAP32[$2980>>2]|0;HEAP32[$$byval_copy1153+4>>2]=HEAP32[$2980+4>>2]|0;
-      invoke_viiiii(200,($84|0),($1|0),($$byval_copy1152|0),($$byval_copy1153|0),($2983|0));
-      $2984 = __THREW__; __THREW__ = 0;
-      if ((($2984|0) != 0) & ((threwValue|0) != 0)) { $2985 = _testSetjmp(HEAP32[$2984>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($2985|0) == 0) { _longjmp($2984|0, threwValue|0); } tempRet0 = (threwValue); } else { $2985 = -1; };
-      $2986 = tempRet0;
-      $cond1274 = ($2985|0)==(1);
-      if ($cond1274) {
-       $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $2986;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-       continue L3;
-      }
-      ;HEAP32[$2977>>2]=HEAP32[$84>>2]|0;HEAP32[$2977+4>>2]=HEAP32[$84+4>>2]|0;
-      $2987 = ((($1)) + 92|0);
-      $2988 = ((($2987)) + 416|0);
-      HEAP32[$2988>>2] = $$11049;
-      $2989 = ((($$61078)) + 4|0);
-      $2990 = HEAP32[$2989>>2]|0;
-      $$81094$phi = $$81094;$$8$phi = $$8;$$61071$phi = $$61071;$$6$phi = $$6;$$51058$phi = $$51058;$$5$phi = $$5;$$21052 = $2990;$$61078 = $2989;$$sink$reg2mem$0 = $2990;$$81094 = $$81094$phi;$$8 = $$8$phi;$$61071 = $$61071$phi;$$6 = $$6$phi;$$51058 = $$51058$phi;$$5 = $$5$phi;
-      label = 583;
-      continue L19;
-      break;
-     }
-     case 67:  {
-      $2737 = $$21052 >>> 23;
-      $2738 = $2737 & 511;
-      $2739 = (($$51058) + ($2738<<3)|0);
-      $2740 = ((($1)) + 32|0);
-      $2741 = HEAP32[$2740>>2]|0;
-      __THREW__ = 0;
-      invoke_vii(133,($70|0),($2741|0));
-      $2742 = __THREW__; __THREW__ = 0;
-      if ((($2742|0) != 0) & ((threwValue|0) != 0)) { $2743 = _testSetjmp(HEAP32[$2742>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($2743|0) == 0) { _longjmp($2742|0, threwValue|0); } tempRet0 = (threwValue); } else { $2743 = -1; };
-      $2744 = tempRet0;
-      $cond1273 = ($2743|0)==(1);
-      if ($cond1273) {
-       $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $2744;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-       continue L3;
-      }
-      ;HEAP32[$2739>>2]=HEAP32[$70>>2]|0;HEAP32[$2739+4>>2]=HEAP32[$70+4>>2]|0;
-      $2745 = ((($$61078)) + 4|0);
-      $2746 = HEAP32[$2745>>2]|0;
-      $$81094$phi = $$81094;$$8$phi = $$8;$$61071$phi = $$61071;$$6$phi = $$6;$$51058$phi = $$51058;$$5$phi = $$5;$$21052 = $2746;$$61078 = $2745;$$sink$reg2mem$0 = $2746;$$81094 = $$81094$phi;$$8 = $$8$phi;$$61071 = $$61071$phi;$$6 = $$6$phi;$$51058 = $$51058$phi;$$5 = $$5$phi;
-      label = 583;
-      continue L19;
-      break;
-     }
-     case 68:  {
-      $2747 = $$21052 >>> 23;
-      $2748 = $2747 & 511;
-      $2749 = $$21052 >>> 14;
-      $2750 = $2749 & 511;
-      $2751 = (($$6) + ($2750<<2)|0);
-      $2752 = HEAP32[$2751>>2]|0;
-      $2753 = (($$51058) + ($2748<<3)|0);
-      ;HEAP32[$71>>2]=HEAP32[$2753>>2]|0;HEAP32[$71+4>>2]=HEAP32[$2753+4>>2]|0;
-      $2754 = (($2748) + 1)|0;
-      $2755 = (($$51058) + ($2754<<3)|0);
-      ;HEAP32[$72>>2]=HEAP32[$2755>>2]|0;HEAP32[$72+4>>2]=HEAP32[$2755+4>>2]|0;
-      $2756 = ((($71)) + 4|0);
-      $2757 = HEAP32[$2756>>2]|0;
-      $2758 = ($2757|0)==(0);
-      if ($2758) {
-       $2759 = HEAP32[$71>>2]|0;
-       $2760 = ($2759|0)!=(0);
-       if (!($2760)) {
-        $2761 = ((($1)) + 12|0);
-        $2762 = HEAP32[$2761>>2]|0;
-        $2763 = ((($2762)) + 16|0);
-        $2764 = HEAP32[$2763>>2]|0;
-        $2765 = ((($2764)) + 44|0);
-        $2766 = HEAP32[$2765>>2]|0;
-        __THREW__ = 0;
-        invoke_vii(133,($73|0),($2766|0));
-        $2767 = __THREW__; __THREW__ = 0;
-        if ((($2767|0) != 0) & ((threwValue|0) != 0)) { $2768 = _testSetjmp(HEAP32[$2767>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($2768|0) == 0) { _longjmp($2767|0, threwValue|0); } tempRet0 = (threwValue); } else { $2768 = -1; };
-        $2769 = tempRet0;
-        $cond1272 = ($2768|0)==(1);
-        if ($cond1272) {
-         $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $2769;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-         continue L3;
-        }
-        ;HEAP32[$71>>2]=HEAP32[$73>>2]|0;HEAP32[$71+4>>2]=HEAP32[$73+4>>2]|0;
-       }
-      }
-      __THREW__ = 0;
-      ;HEAP32[$$byval_copy1146>>2]=HEAP32[$71>>2]|0;HEAP32[$$byval_copy1146+4>>2]=HEAP32[$71+4>>2]|0;
-      ;HEAP32[$$byval_copy1147>>2]=HEAP32[$72>>2]|0;HEAP32[$$byval_copy1147+4>>2]=HEAP32[$72+4>>2]|0;
-      $2770 = (invoke_iiiii(196,($1|0),($$byval_copy1146|0),($$byval_copy1147|0),($2752|0))|0);
-      $2771 = __THREW__; __THREW__ = 0;
-      if ((($2771|0) != 0) & ((threwValue|0) != 0)) { $2772 = _testSetjmp(HEAP32[$2771>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($2772|0) == 0) { _longjmp($2771|0, threwValue|0); } tempRet0 = (threwValue); } else { $2772 = -1; };
-      $2773 = tempRet0;
-      $cond1270 = ($2772|0)==(1);
-      if ($cond1270) {
-       $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $2773;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-       continue L3;
-      }
-      $2774 = (($$51058) + ($2748<<3)|0);
-      __THREW__ = 0;
-      invoke_vii(133,($74|0),($2770|0));
-      $2775 = __THREW__; __THREW__ = 0;
-      if ((($2775|0) != 0) & ((threwValue|0) != 0)) { $2776 = _testSetjmp(HEAP32[$2775>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($2776|0) == 0) { _longjmp($2775|0, threwValue|0); } tempRet0 = (threwValue); } else { $2776 = -1; };
-      $2777 = tempRet0;
-      $cond1271 = ($2776|0)==(1);
-      if ($cond1271) {
-       $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $2777;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-       continue L3;
-      }
-      ;HEAP32[$2774>>2]=HEAP32[$74>>2]|0;HEAP32[$2774+4>>2]=HEAP32[$74+4>>2]|0;
-      $2778 = ((($1)) + 92|0);
-      $2779 = ((($2778)) + 416|0);
-      HEAP32[$2779>>2] = $$11049;
-      $2780 = ((($$61078)) + 4|0);
-      $2781 = HEAP32[$2780>>2]|0;
-      $$81094$phi = $$81094;$$8$phi = $$8;$$61071$phi = $$61071;$$6$phi = $$6;$$51058$phi = $$51058;$$5$phi = $$5;$$21052 = $2781;$$61078 = $2780;$$sink$reg2mem$0 = $2781;$$81094 = $$81094$phi;$$8 = $$8$phi;$$61071 = $$61071$phi;$$6 = $$6$phi;$$51058 = $$51058$phi;$$5 = $$5$phi;
-      label = 583;
-      continue L19;
-      break;
-     }
-     case 69:  {
-      $2782 = $$21052 >>> 23;
-      $2783 = $2782 & 511;
-      $2784 = $$21052 >>> 14;
-      $2785 = $2784 & 511;
-      $2786 = (($$6) + ($2785<<2)|0);
-      $2787 = HEAP32[$2786>>2]|0;
-      $2788 = (($$51058) + ($2783<<3)|0);
-      ;HEAP32[$75>>2]=HEAP32[$2788>>2]|0;HEAP32[$75+4>>2]=HEAP32[$2788+4>>2]|0;
-      $2789 = ((($75)) + 4|0);
-      $2790 = HEAP32[$2789>>2]|0;
-      $2791 = ($2790|0)==(0);
-      if ($2791) {
-       $2792 = HEAP32[$75>>2]|0;
-       $2793 = ($2792|0)!=(0);
-       if (!($2793)) {
-        $2794 = ((($1)) + 12|0);
-        $2795 = HEAP32[$2794>>2]|0;
-        $2796 = ((($2795)) + 16|0);
-        $2797 = HEAP32[$2796>>2]|0;
-        $2798 = ((($2797)) + 44|0);
-        $2799 = HEAP32[$2798>>2]|0;
-        __THREW__ = 0;
-        invoke_vii(133,($76|0),($2799|0));
-        $2800 = __THREW__; __THREW__ = 0;
-        if ((($2800|0) != 0) & ((threwValue|0) != 0)) { $2801 = _testSetjmp(HEAP32[$2800>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($2801|0) == 0) { _longjmp($2800|0, threwValue|0); } tempRet0 = (threwValue); } else { $2801 = -1; };
-        $2802 = tempRet0;
-        $cond1269 = ($2801|0)==(1);
-        if ($cond1269) {
-         $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $2802;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-         continue L3;
-        }
-        ;HEAP32[$75>>2]=HEAP32[$76>>2]|0;HEAP32[$75+4>>2]=HEAP32[$76+4>>2]|0;
-       }
-      }
-      __THREW__ = 0;
-      ;HEAP32[$$byval_copy1148>>2]=HEAP32[$75>>2]|0;HEAP32[$$byval_copy1148+4>>2]=HEAP32[$75+4>>2]|0;
-      $2803 = (invoke_iiii(197,($1|0),($$byval_copy1148|0),($2787|0))|0);
-      $2804 = __THREW__; __THREW__ = 0;
-      if ((($2804|0) != 0) & ((threwValue|0) != 0)) { $2805 = _testSetjmp(HEAP32[$2804>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($2805|0) == 0) { _longjmp($2804|0, threwValue|0); } tempRet0 = (threwValue); } else { $2805 = -1; };
-      $2806 = tempRet0;
-      $cond1267 = ($2805|0)==(1);
-      if ($cond1267) {
-       $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $2806;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-       continue L3;
-      }
-      $2807 = (($$51058) + ($2783<<3)|0);
-      __THREW__ = 0;
-      invoke_vii(133,($77|0),($2803|0));
-      $2808 = __THREW__; __THREW__ = 0;
-      if ((($2808|0) != 0) & ((threwValue|0) != 0)) { $2809 = _testSetjmp(HEAP32[$2808>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($2809|0) == 0) { _longjmp($2808|0, threwValue|0); } tempRet0 = (threwValue); } else { $2809 = -1; };
-      $2810 = tempRet0;
-      $cond1268 = ($2809|0)==(1);
-      if ($cond1268) {
-       $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $2810;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-       continue L3;
-      }
-      ;HEAP32[$2807>>2]=HEAP32[$77>>2]|0;HEAP32[$2807+4>>2]=HEAP32[$77+4>>2]|0;
-      $2811 = ((($1)) + 92|0);
-      $2812 = ((($2811)) + 416|0);
-      HEAP32[$2812>>2] = $$11049;
-      $2813 = ((($$61078)) + 4|0);
-      $2814 = HEAP32[$2813>>2]|0;
-      $$81094$phi = $$81094;$$8$phi = $$8;$$61071$phi = $$61071;$$6$phi = $$6;$$51058$phi = $$51058;$$5$phi = $$5;$$21052 = $2814;$$61078 = $2813;$$sink$reg2mem$0 = $2814;$$81094 = $$81094$phi;$$8 = $$8$phi;$$61071 = $$61071$phi;$$6 = $$6$phi;$$51058 = $$51058$phi;$$5 = $$5$phi;
-      label = 583;
-      continue L19;
-      break;
-     }
-     case 70:  {
-      $2815 = $$21052 >>> 23;
-      $2816 = $2815 & 511;
-      $2817 = (($$51058) + ($2816<<3)|0);
-      ;HEAP32[$78>>2]=HEAP32[$2817>>2]|0;HEAP32[$78+4>>2]=HEAP32[$2817+4>>2]|0;
-      __THREW__ = 0;
-      $2818 = (invoke_ii(141,($1|0))|0);
-      $2819 = __THREW__; __THREW__ = 0;
-      if ((($2819|0) != 0) & ((threwValue|0) != 0)) { $2820 = _testSetjmp(HEAP32[$2819>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($2820|0) == 0) { _longjmp($2819|0, threwValue|0); } tempRet0 = (threwValue); } else { $2820 = -1; };
-      $2821 = tempRet0;
-      $cond1261 = ($2820|0)==(1);
-      if ($cond1261) {
-       $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $2821;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-       continue L3;
-      }
-      $2822 = ((($$61078)) + 4|0);
-      $2823 = ((($2818)) + 28|0);
-      HEAP32[$2823>>2] = $2822;
-      $2824 = ((($2818)) + 40|0);
-      HEAP32[$2824>>2] = $2816;
-      HEAP32[$2818>>2] = 0;
-      $2825 = ((($1)) + 12|0);
-      $2826 = HEAP32[$2825>>2]|0;
-      $2827 = ((($2826)) + 4|0);
-      $2828 = HEAP32[$2827>>2]|0;
-      $2829 = ((($2818)) + 8|0);
-      HEAP32[$2829>>2] = $2828;
-      $2830 = ((($2818)) + 36|0);
-      HEAP32[$2830>>2] = 0;
-      $2831 = HEAP32[$78>>2]|0;
-      $2832 = ((($2818)) + 44|0);
-      HEAP32[$2832>>2] = $2831;
-      $2833 = ((($1)) + 12|0);
-      $2834 = HEAP32[$2833>>2]|0;
-      $2835 = ((($2834)) + 4|0);
-      $2836 = HEAP32[$2835>>2]|0;
-      $2837 = (($2836) + ($2816<<3)|0);
-      HEAP32[$2835>>2] = $2837;
-      $2838 = ((($$8)) + 20|0);
-      $2839 = HEAP32[$2838>>2]|0;
-      $2840 = $$21052 >>> 7;
-      $2841 = $2840 & 65535;
-      $2842 = (($2839) + ($2841<<2)|0);
-      $2843 = HEAP32[$2842>>2]|0;
-      __THREW__ = 0;
-      $2844 = (invoke_iii(195,($1|0),($2843|0))|0);
-      $2845 = __THREW__; __THREW__ = 0;
-      if ((($2845|0) != 0) & ((threwValue|0) != 0)) { $2846 = _testSetjmp(HEAP32[$2845>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($2846|0) == 0) { _longjmp($2845|0, threwValue|0); } tempRet0 = (threwValue); } else { $2846 = -1; };
-      $2847 = tempRet0;
-      $cond1262 = ($2846|0)==(1);
-      if ($cond1262) {
-       $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $2847;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-       continue L3;
-      }
-      $2848 = ((($2818)) + 44|0);
-      $2849 = HEAP32[$2848>>2]|0;
-      $2850 = ((($2844)) + 16|0);
-      HEAP32[$2850>>2] = $2849;
-      $2851 = ((($2818)) + 4|0);
-      HEAP32[$2851>>2] = $2844;
-      $2852 = HEAP32[$2844>>2]|0;
-      $2853 = $2852 >>> 11;
-      $2854 = $2853 & 128;
-      $2855 = ($2854|0)!=(0);
-      if (!($2855)) {
-       $2886 = ((($2844)) + 12|0);
-       $2887 = HEAP32[$2886>>2]|0;
-       $2888 = ((($2887)) + 12|0);
-       $2889 = HEAP32[$2888>>2]|0;
-       $2890 = ((($2887)) + 16|0);
-       $2891 = HEAP32[$2890>>2]|0;
-       $2892 = ((($2887)) + 2|0);
-       $2893 = HEAP16[$2892>>1]|0;
-       $2894 = $2893&65535;
-       __THREW__ = 0;
-       invoke_viii(142,($1|0),($2894|0),1);
-       $2895 = __THREW__; __THREW__ = 0;
-       if ((($2895|0) != 0) & ((threwValue|0) != 0)) { $2896 = _testSetjmp(HEAP32[$2895>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($2896|0) == 0) { _longjmp($2895|0, threwValue|0); } tempRet0 = (threwValue); } else { $2896 = -1; };
-       $2897 = tempRet0;
-       $cond1263 = ($2896|0)==(1);
-       if ($cond1263) {
-        $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $2891;$$11066 = $2889;$$11073 = $$61078;$$11080 = $2887;$$11087 = $$81094;$$reg2mem1002$0 = $2897;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-        continue L3;
-       }
-       $2898 = ((($2887)) + 2|0);
-       $2899 = HEAP16[$2898>>1]|0;
-       $2900 = $2899&65535;
-       $2901 = ((($2818)) + 12|0);
-       HEAP32[$2901>>2] = $2900;
-       $2902 = ((($1)) + 12|0);
-       $2903 = HEAP32[$2902>>2]|0;
-       $2904 = ((($2903)) + 4|0);
-       $2905 = HEAP32[$2904>>2]|0;
-       $2906 = ((($2887)) + 8|0);
-       $2907 = HEAP32[$2906>>2]|0;
-       $2908 = HEAP32[$2907>>2]|0;
-       $$81094$phi = $$81094;$$5$phi = $$5;$$21052 = $2908;$$51058 = $2905;$$6 = $2891;$$61071 = $2889;$$61078 = $2907;$$8 = $2887;$$sink$reg2mem$0 = $2908;$$81094 = $$81094$phi;$$5 = $$5$phi;
-       label = 583;
-       continue L19;
-      }
-      $2856 = ((($2818)) + 12|0);
-      HEAP32[$2856>>2] = 0;
-      $2857 = ((($1)) + 12|0);
-      $2858 = HEAP32[$2857>>2]|0;
-      $2859 = ((($2858)) + 4|0);
-      $2860 = HEAP32[$2859>>2]|0;
-      $2861 = ((($2844)) + 12|0);
-      $2862 = HEAP32[$2861>>2]|0;
-      __THREW__ = 0;
-      ;HEAP32[$$byval_copy1149>>2]=HEAP32[$78>>2]|0;HEAP32[$$byval_copy1149+4>>2]=HEAP32[$78+4>>2]|0;
-      invoke_viii($2862|0,($79|0),($1|0),($$byval_copy1149|0));
-      $2863 = __THREW__; __THREW__ = 0;
-      if ((($2863|0) != 0) & ((threwValue|0) != 0)) { $2864 = _testSetjmp(HEAP32[$2863>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($2864|0) == 0) { _longjmp($2863|0, threwValue|0); } tempRet0 = (threwValue); } else { $2864 = -1; };
-      $2865 = tempRet0;
-      $cond1264 = ($2864|0)==(1);
-      if ($cond1264) {
-       $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $2865;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-       continue L3;
-      }
-      ;HEAP32[$2860>>2]=HEAP32[$79>>2]|0;HEAP32[$2860+4>>2]=HEAP32[$79+4>>2]|0;
-      __THREW__ = 0;
-      invoke_vii(146,($1|0),($$11049|0));
-      $2866 = __THREW__; __THREW__ = 0;
-      if ((($2866|0) != 0) & ((threwValue|0) != 0)) { $2867 = _testSetjmp(HEAP32[$2866>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($2867|0) == 0) { _longjmp($2866|0, threwValue|0); } tempRet0 = (threwValue); } else { $2867 = -1; };
-      $2868 = tempRet0;
-      $cond1265 = ($2867|0)==(1);
-      if ($cond1265) {
-       $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $2868;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-       continue L3;
-      }
-      $2869 = ((($1)) + 20|0);
-      $2870 = HEAP32[$2869>>2]|0;
-      $2871 = ($2870|0)!=(0|0);
-      if ($2871) {
-       $$21045 = $$5;$$21055 = $$51058;$$31062 = $$6;$$31068 = $$61071;$$31075 = $$61078;$$51084 = $$8;$$51091 = $$81094;
-       label = 272;
-       continue L19;
-      }
-      $2872 = ((($1)) + 12|0);
-      $2873 = HEAP32[$2872>>2]|0;
-      $2874 = ((($2873)) + 16|0);
-      $2875 = HEAP32[$2874>>2]|0;
-      $2876 = ((($2875)) + 8|0);
-      $2877 = HEAP32[$2876>>2]|0;
-      $2878 = ((($1)) + 12|0);
-      $2879 = HEAP32[$2878>>2]|0;
-      $2880 = ((($2879)) + 4|0);
-      HEAP32[$2880>>2] = $2877;
-      __THREW__ = 0;
-      invoke_vi(132,($1|0));
-      $2881 = __THREW__; __THREW__ = 0;
-      if ((($2881|0) != 0) & ((threwValue|0) != 0)) { $2882 = _testSetjmp(HEAP32[$2881>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($2882|0) == 0) { _longjmp($2881|0, threwValue|0); } tempRet0 = (threwValue); } else { $2882 = -1; };
-      $2883 = tempRet0;
-      $cond1266 = ($2882|0)==(1);
-      if ($cond1266) {
-       $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $2877;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $2883;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-       continue L3;
-      }
-      $2884 = ((($$61078)) + 4|0);
-      $2885 = HEAP32[$2884>>2]|0;
-      $$81094$phi = $$81094;$$8$phi = $$8;$$61071$phi = $$61071;$$6$phi = $$6;$$5$phi = $$5;$$21052 = $2885;$$51058 = $2877;$$61078 = $2884;$$sink$reg2mem$0 = $2885;$$81094 = $$81094$phi;$$8 = $$8$phi;$$61071 = $$61071$phi;$$6 = $$6$phi;$$5 = $$5$phi;
-      label = 583;
-      continue L19;
-      break;
-     }
-     case 71:  {
-      $2909 = $$21052 >>> 23;
-      $2910 = $2909 & 511;
-      $2911 = (($$51058) + ($2910<<3)|0);
-      $2912 = HEAP32[$2911>>2]|0;
-      $2913 = (($2910) + 1)|0;
-      $2914 = (($$51058) + ($2913<<3)|0);
-      $2915 = HEAP32[$2914>>2]|0;
-      $2916 = $$21052 >>> 14;
-      $2917 = $2916 & 511;
-      $2918 = (($$6) + ($2917<<2)|0);
-      $2919 = HEAP32[$2918>>2]|0;
-      __THREW__ = 0;
-      invoke_viiii(198,($1|0),($2912|0),($2919|0),($2915|0));
-      $2920 = __THREW__; __THREW__ = 0;
-      if ((($2920|0) != 0) & ((threwValue|0) != 0)) { $2921 = _testSetjmp(HEAP32[$2920>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($2921|0) == 0) { _longjmp($2920|0, threwValue|0); } tempRet0 = (threwValue); } else { $2921 = -1; };
-      $2922 = tempRet0;
-      $cond1260 = ($2921|0)==(1);
-      if ($cond1260) {
-       $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $2922;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-       continue L3;
-      }
-      $2923 = ((($1)) + 92|0);
-      $2924 = ((($2923)) + 416|0);
-      HEAP32[$2924>>2] = $$11049;
-      $2925 = ((($$61078)) + 4|0);
-      $2926 = HEAP32[$2925>>2]|0;
-      $$81094$phi = $$81094;$$8$phi = $$8;$$61071$phi = $$61071;$$6$phi = $$6;$$51058$phi = $$51058;$$5$phi = $$5;$$21052 = $2926;$$61078 = $2925;$$sink$reg2mem$0 = $2926;$$81094 = $$81094$phi;$$8 = $$8$phi;$$61071 = $$61071$phi;$$6 = $$6$phi;$$51058 = $$51058$phi;$$5 = $$5$phi;
-      label = 583;
-      continue L19;
-      break;
-     }
-     case 72:  {
-      $2927 = $$21052 >>> 23;
-      $2928 = $2927 & 511;
-      $2929 = (($$51058) + ($2928<<3)|0);
-      $2930 = $$21052 >>> 14;
-      $2931 = $2930 & 511;
-      $2932 = (($$51058) + ($2931<<3)|0);
-      __THREW__ = 0;
-      ;HEAP32[$$byval_copy1150>>2]=HEAP32[$2932>>2]|0;HEAP32[$$byval_copy1150+4>>2]=HEAP32[$2932+4>>2]|0;
-      invoke_viii(199,($80|0),($1|0),($$byval_copy1150|0));
-      $2933 = __THREW__; __THREW__ = 0;
-      if ((($2933|0) != 0) & ((threwValue|0) != 0)) { $2934 = _testSetjmp(HEAP32[$2933>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($2934|0) == 0) { _longjmp($2933|0, threwValue|0); } tempRet0 = (threwValue); } else { $2934 = -1; };
-      $2935 = tempRet0;
-      $cond1259 = ($2934|0)==(1);
-      if ($cond1259) {
-       $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $2935;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-       continue L3;
-      }
-      ;HEAP32[$2929>>2]=HEAP32[$80>>2]|0;HEAP32[$2929+4>>2]=HEAP32[$80+4>>2]|0;
-      $2936 = ((($1)) + 92|0);
-      $2937 = ((($2936)) + 416|0);
-      HEAP32[$2937>>2] = $$11049;
-      $2938 = ((($$61078)) + 4|0);
-      $2939 = HEAP32[$2938>>2]|0;
-      $$81094$phi = $$81094;$$8$phi = $$8;$$61071$phi = $$61071;$$6$phi = $$6;$$51058$phi = $$51058;$$5$phi = $$5;$$21052 = $2939;$$61078 = $2938;$$sink$reg2mem$0 = $2939;$$81094 = $$81094$phi;$$8 = $$8$phi;$$61071 = $$61071$phi;$$6 = $$6$phi;$$51058 = $$51058$phi;$$5 = $$5$phi;
-      label = 583;
-      continue L19;
-      break;
-     }
-     case 73:  {
-      $2940 = ((($1)) + 12|0);
-      $2941 = HEAP32[$2940>>2]|0;
-      $2942 = ((($2941)) + 16|0);
-      $2943 = HEAP32[$2942>>2]|0;
-      $2944 = ((($2943)) + 44|0);
-      $2945 = HEAP32[$2944>>2]|0;
-      $2946 = ($2945|0)!=(0|0);
-      if ($2946) {
-       $2959 = $$21052 >>> 23;
-       $2960 = $2959 & 511;
-       $2961 = (($$51058) + ($2960<<3)|0);
-       $2962 = ((($1)) + 12|0);
-       $2963 = HEAP32[$2962>>2]|0;
-       $2964 = ((($2963)) + 16|0);
-       $2965 = HEAP32[$2964>>2]|0;
-       $2966 = ((($2965)) + 44|0);
-       $2967 = HEAP32[$2966>>2]|0;
-       __THREW__ = 0;
-       invoke_vii(133,($83|0),($2967|0));
-       $2968 = __THREW__; __THREW__ = 0;
-       if ((($2968|0) != 0) & ((threwValue|0) != 0)) { $2969 = _testSetjmp(HEAP32[$2968>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($2969|0) == 0) { _longjmp($2968|0, threwValue|0); } tempRet0 = (threwValue); } else { $2969 = -1; };
-       $2970 = tempRet0;
-       $cond1258 = ($2969|0)==(1);
-       if ($cond1258) {
-        $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $2970;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-        continue L3;
-       }
-       ;HEAP32[$2961>>2]=HEAP32[$83>>2]|0;HEAP32[$2961+4>>2]=HEAP32[$83+4>>2]|0;
-       $2971 = ((($$61078)) + 4|0);
-       $2972 = HEAP32[$2971>>2]|0;
-       $$81094$phi = $$81094;$$8$phi = $$8;$$61071$phi = $$61071;$$6$phi = $$6;$$51058$phi = $$51058;$$5$phi = $$5;$$21052 = $2972;$$61078 = $2971;$$sink$reg2mem$0 = $2972;$$81094 = $$81094$phi;$$8 = $$8$phi;$$61071 = $$61071$phi;$$6 = $$6$phi;$$51058 = $$51058$phi;$$5 = $$5$phi;
-       label = 583;
-       continue L19;
-      }
-      __THREW__ = 0;
-      $2947 = (invoke_iii(135,($1|0),(69204|0))|0);
-      $2948 = __THREW__; __THREW__ = 0;
-      if ((($2948|0) != 0) & ((threwValue|0) != 0)) { $2949 = _testSetjmp(HEAP32[$2948>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($2949|0) == 0) { _longjmp($2948|0, threwValue|0); } tempRet0 = (threwValue); } else { $2949 = -1; };
-      $2950 = tempRet0;
-      $cond1246 = ($2949|0)==(1);
-      if ($cond1246) {
-       $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $2950;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-       continue L3;
-      }
-      __THREW__ = 0;
-      invoke_viiii(171,($82|0),($1|0),(56788|0),25);
-      $2951 = __THREW__; __THREW__ = 0;
-      if ((($2951|0) != 0) & ((threwValue|0) != 0)) { $2952 = _testSetjmp(HEAP32[$2951>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($2952|0) == 0) { _longjmp($2951|0, threwValue|0); } tempRet0 = (threwValue); } else { $2952 = -1; };
-      $2953 = tempRet0;
-      $cond1247 = ($2952|0)==(1);
-      if ($cond1247) {
-       $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $2953;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-       continue L3;
-      }
-      __THREW__ = 0;
-      ;HEAP32[$$byval_copy1151>>2]=HEAP32[$82>>2]|0;HEAP32[$$byval_copy1151+4>>2]=HEAP32[$82+4>>2]|0;
-      invoke_viiii(172,($81|0),($1|0),($2947|0),($$byval_copy1151|0));
-      $2954 = __THREW__; __THREW__ = 0;
-      if ((($2954|0) != 0) & ((threwValue|0) != 0)) { $2955 = _testSetjmp(HEAP32[$2954>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($2955|0) == 0) { _longjmp($2954|0, threwValue|0); } tempRet0 = (threwValue); } else { $2955 = -1; };
-      $2956 = tempRet0;
-      $cond1248 = ($2955|0)==(1);
-      if ($cond1248) {
-       $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $2956;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-       continue L3;
-      }
-      $2957 = HEAP32[$81>>2]|0;
-      $2958 = ((($1)) + 20|0);
-      HEAP32[$2958>>2] = $2957;
-      $$21045 = $$5;$$21055 = $$51058;$$31062 = $$6;$$31068 = $$61071;$$31075 = $$61078;$$51084 = $$8;$$51091 = $$81094;
-      label = 272;
-      continue L19;
-      break;
-     }
-     case 74:  {
-      $2991 = $$21052 >>> 23;
-      $2992 = $2991 & 511;
-      $2993 = $$21052 >>> 14;
-      $2994 = $2993 & 511;
-      $2995 = $$21052 >>> 7;
-      $2996 = $2995 & 127;
-      __THREW__ = 0;
-      HEAP32[$vararg_buffer>>2] = $2992;
-      $vararg_ptr1095 = ((($vararg_buffer)) + 4|0);
-      HEAP32[$vararg_ptr1095>>2] = $2994;
-      $vararg_ptr1096 = ((($vararg_buffer)) + 8|0);
-      HEAP32[$vararg_ptr1096>>2] = $2996;
-      (invoke_iii(201,(56814|0),($vararg_buffer|0))|0);
-      $2997 = __THREW__; __THREW__ = 0;
-      if ((($2997|0) != 0) & ((threwValue|0) != 0)) { $2998 = _testSetjmp(HEAP32[$2997>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($2998|0) == 0) { _longjmp($2997|0, threwValue|0); } tempRet0 = (threwValue); } else { $2998 = -1; };
-      $2999 = tempRet0;
-      $cond1245 = ($2998|0)==(1);
-      if ($cond1245) {
-       $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $2999;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-       continue L3;
-      }
-      $3000 = ((($$61078)) + 4|0);
-      $3001 = HEAP32[$3000>>2]|0;
-      $$81094$phi = $$81094;$$8$phi = $$8;$$61071$phi = $$61071;$$6$phi = $$6;$$51058$phi = $$51058;$$5$phi = $$5;$$21052 = $3001;$$61078 = $3000;$$sink$reg2mem$0 = $3001;$$81094 = $$81094$phi;$$8 = $$8$phi;$$61071 = $$61071$phi;$$6 = $$6$phi;$$51058 = $$51058$phi;$$5 = $$5$phi;
-      label = 583;
-      continue L19;
-      break;
-     }
-     default: {
-      label = 584;
-      break L3;
-     }
-     }
-    } while(0);
-    if ((label|0) == 90) {
-     label = 0;
-     $643 = $$01050 >>> 23;
-     $644 = $643 & 511;
-     $645 = $$01050 >>> 7;
-     $646 = $645 & 127;
-     $647 = $$01050 >>> 14;
-     $648 = $647 & 511;
-     $649 = (($$6) + ($648<<2)|0);
-     $650 = HEAP32[$649>>2]|0;
-     $651 = (($$51058) + ($644<<3)|0);
-     ;HEAP32[$16>>2]=HEAP32[$651>>2]|0;HEAP32[$16+4>>2]=HEAP32[$651+4>>2]|0;
-     $652 = $$01050 & 127;
-     $653 = ($652|0)!=(33);
-     if ($653) {
-      $654 = ($646|0)==(127);
-      if ($654) {
-       $655 = (($644) + 2)|0;
-       $656 = (($$51058) + ($655<<3)|0);
-       $657 = ((($656)) + 4|0);
-       HEAP32[$657>>2] = 0;
-       $658 = (($644) + 2)|0;
-       $$sink24$reg2mem$0 = $658;
-      } else {
-       $659 = (($644) + ($646))|0;
-       $660 = (($659) + 1)|0;
-       $661 = (($$51058) + ($660<<3)|0);
-       $662 = ((($661)) + 4|0);
-       HEAP32[$662>>2] = 0;
-       $663 = (($644) + ($646))|0;
-       $664 = (($663) + 1)|0;
-       $$sink24$reg2mem$0 = $664;
-      }
-      $665 = (($$51058) + ($$sink24$reg2mem$0<<3)|0);
-      HEAP32[$665>>2] = 0;
-     }
-     __THREW__ = 0;
-     ;HEAP32[$$byval_copy1104>>2]=HEAP32[$16>>2]|0;HEAP32[$$byval_copy1104+4>>2]=HEAP32[$16+4>>2]|0;
-     $666 = (invoke_iii(138,($1|0),($$byval_copy1104|0))|0);
-     $667 = __THREW__; __THREW__ = 0;
-     if ((($667|0) != 0) & ((threwValue|0) != 0)) { $668 = _testSetjmp(HEAP32[$667>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($668|0) == 0) { _longjmp($667|0, threwValue|0); } tempRet0 = (threwValue); } else { $668 = -1; };
-     $669 = tempRet0;
-     $cond1367 = ($668|0)==(1);
-     if ($cond1367) {
-      $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $669;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-      continue L3;
-     }
-     HEAP32[$15>>2] = $666;
-     __THREW__ = 0;
-     $670 = (invoke_iiii(139,($1|0),($15|0),($650|0))|0);
-     $671 = __THREW__; __THREW__ = 0;
-     if ((($671|0) != 0) & ((threwValue|0) != 0)) { $672 = _testSetjmp(HEAP32[$671>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($672|0) == 0) { _longjmp($671|0, threwValue|0); } tempRet0 = (threwValue); } else { $672 = -1; };
-     $673 = tempRet0;
-     $cond1368 = ($672|0)==(1);
-     if ($cond1368) {
-      $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $673;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-      continue L3;
-     }
-     $674 = ($670|0)!=(0|0);
-     do {
-      if ($674) {
-       $$01037 = $650;$$01038 = $670;$$01039 = $646;
-      } else {
-       __THREW__ = 0;
-       invoke_vii(143,($18|0),($650|0));
-       $675 = __THREW__; __THREW__ = 0;
-       if ((($675|0) != 0) & ((threwValue|0) != 0)) { $676 = _testSetjmp(HEAP32[$675>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($676|0) == 0) { _longjmp($675|0, threwValue|0); } tempRet0 = (threwValue); } else { $676 = -1; };
-       $677 = tempRet0;
-       $cond1369 = ($676|0)==(1);
-       if ($cond1369) {
-        $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $677;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-        continue L3;
-       }
-       __THREW__ = 0;
-       $678 = (invoke_iiii(140,($1|0),(65621|0),14)|0);
-       $679 = __THREW__; __THREW__ = 0;
-       if ((($679|0) != 0) & ((threwValue|0) != 0)) { $680 = _testSetjmp(HEAP32[$679>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($680|0) == 0) { _longjmp($679|0, threwValue|0); } tempRet0 = (threwValue); } else { $680 = -1; };
-       $681 = tempRet0;
-       $cond1370 = ($680|0)==(1);
-       if ($cond1370) {
-        $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $681;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-        continue L3;
-       }
-       __THREW__ = 0;
-       $682 = (invoke_iiii(139,($1|0),($15|0),($678|0))|0);
-       $683 = __THREW__; __THREW__ = 0;
-       if ((($683|0) != 0) & ((threwValue|0) != 0)) { $684 = _testSetjmp(HEAP32[$683>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($684|0) == 0) { _longjmp($683|0, threwValue|0); } tempRet0 = (threwValue); } else { $684 = -1; };
-       $685 = tempRet0;
-       $cond1371 = ($684|0)==(1);
-       if ($cond1371) {
-        $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $685;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-        continue L3;
-       }
-       $686 = ($682|0)!=(0|0);
-       if (!($686)) {
-        $687 = ($646|0)==(127);
-        if ($687) {
-         $688 = (($644) + 1)|0;
-         $689 = (($$51058) + ($688<<3)|0);
-         ;HEAP32[$19>>2]=HEAP32[$689>>2]|0;HEAP32[$19+4>>2]=HEAP32[$689+4>>2]|0;
-        } else {
-         $690 = (($$51058) + ($644<<3)|0);
-         $691 = ((($690)) + 8|0);
-         __THREW__ = 0;
-         invoke_viiii(167,($20|0),($1|0),($646|0),($691|0));
-         $692 = __THREW__; __THREW__ = 0;
-         if ((($692|0) != 0) & ((threwValue|0) != 0)) { $693 = _testSetjmp(HEAP32[$692>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($693|0) == 0) { _longjmp($692|0, threwValue|0); } tempRet0 = (threwValue); } else { $693 = -1; };
-         $694 = tempRet0;
-         $cond1372 = ($693|0)==(1);
-         if ($cond1372) {
-          $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $694;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-          continue L3;
-         }
-         ;HEAP32[$19>>2]=HEAP32[$20>>2]|0;HEAP32[$19+4>>2]=HEAP32[$20+4>>2]|0;
-        }
-        __THREW__ = 0;
-        ;HEAP32[$$byval_copy1105>>2]=HEAP32[$16>>2]|0;HEAP32[$$byval_copy1105+4>>2]=HEAP32[$16+4>>2]|0;
-        ;HEAP32[$$byval_copy1106>>2]=HEAP32[$19>>2]|0;HEAP32[$$byval_copy1106+4>>2]=HEAP32[$19+4>>2]|0;
-        invoke_viiii(168,($1|0),($650|0),($$byval_copy1105|0),($$byval_copy1106|0));
-        $695 = __THREW__; __THREW__ = 0;
-        if ((($695|0) != 0) & ((threwValue|0) != 0)) { $696 = _testSetjmp(HEAP32[$695>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($696|0) == 0) { _longjmp($695|0, threwValue|0); } tempRet0 = (threwValue); } else { $696 = -1; };
-        $697 = tempRet0;
-        $cond1373 = ($696|0)==(1);
-        if ($cond1373) {
-         $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $697;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-         continue L3;
-        }
-       }
-       $698 = ($646|0)==(127);
-       if ($698) {
-        $699 = (($644) + 1)|0;
-        $700 = (($$51058) + ($699<<3)|0);
-        __THREW__ = 0;
-        ;HEAP32[$$byval_copy1107>>2]=HEAP32[$700>>2]|0;HEAP32[$$byval_copy1107+4>>2]=HEAP32[$700+4>>2]|0;
-        ;HEAP32[$$byval_copy1108>>2]=HEAP32[$18>>2]|0;HEAP32[$$byval_copy1108+4>>2]=HEAP32[$18+4>>2]|0;
-        invoke_viiii(169,($21|0),($1|0),($$byval_copy1107|0),($$byval_copy1108|0));
-        $701 = __THREW__; __THREW__ = 0;
-        if ((($701|0) != 0) & ((threwValue|0) != 0)) { $702 = _testSetjmp(HEAP32[$701>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($702|0) == 0) { _longjmp($701|0, threwValue|0); } tempRet0 = (threwValue); } else { $702 = -1; };
-        $703 = tempRet0;
-        $cond1375 = ($702|0)==(1);
-        if ($cond1375) {
-         $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $703;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-         continue L3;
-        }
-        $$01037 = $678;$$01038 = $682;$$01039 = $646;
-        break;
-       } else {
-        $704 = (($$51058) + ($644<<3)|0);
-        $705 = ((($704)) + 16|0);
-        $706 = (($$51058) + ($644<<3)|0);
-        $707 = ((($706)) + 8|0);
-        $708 = (($646) + 1)|0;
-        __THREW__ = 0;
-        invoke_viii(170,($705|0),($707|0),($708|0));
-        $709 = __THREW__; __THREW__ = 0;
-        if ((($709|0) != 0) & ((threwValue|0) != 0)) { $710 = _testSetjmp(HEAP32[$709>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($710|0) == 0) { _longjmp($709|0, threwValue|0); } tempRet0 = (threwValue); } else { $710 = -1; };
-        $711 = tempRet0;
-        $cond1374 = ($710|0)==(1);
-        if ($cond1374) {
-         $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $711;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-         continue L3;
-        }
-        $712 = (($644) + 1)|0;
-        $713 = (($$51058) + ($712<<3)|0);
-        ;HEAP32[$713>>2]=HEAP32[$18>>2]|0;HEAP32[$713+4>>2]=HEAP32[$18+4>>2]|0;
-        $$01037 = $678;$$01038 = $682;$$01039 = $708;
-        break;
-       }
-      }
-     } while(0);
-     __THREW__ = 0;
-     $714 = (invoke_ii(141,($1|0))|0);
-     $715 = __THREW__; __THREW__ = 0;
-     if ((($715|0) != 0) & ((threwValue|0) != 0)) { $716 = _testSetjmp(HEAP32[$715>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($716|0) == 0) { _longjmp($715|0, threwValue|0); } tempRet0 = (threwValue); } else { $716 = -1; };
-     $717 = tempRet0;
-     $cond1376 = ($716|0)==(1);
-     if ($cond1376) {
-      $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $717;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-      continue L3;
-     }
-     HEAP32[$714>>2] = $$01037;
-     $718 = ((($714)) + 4|0);
-     HEAP32[$718>>2] = $$01038;
-     $719 = ((($1)) + 12|0);
-     $720 = HEAP32[$719>>2]|0;
-     $721 = ((($720)) + 4|0);
-     $722 = HEAP32[$721>>2]|0;
-     $723 = ((($714)) + 8|0);
-     HEAP32[$723>>2] = $722;
-     $724 = HEAP32[$15>>2]|0;
-     $725 = ((($714)) + 44|0);
-     HEAP32[$725>>2] = $724;
-     $726 = ((($$61078)) + 4|0);
-     $727 = ((($714)) + 28|0);
-     HEAP32[$727>>2] = $726;
-     $728 = ((($714)) + 40|0);
-     HEAP32[$728>>2] = $644;
-     $729 = ((($1)) + 12|0);
-     $730 = HEAP32[$729>>2]|0;
-     $731 = ((($730)) + 4|0);
-     $732 = HEAP32[$731>>2]|0;
-     $733 = (($732) + ($644<<3)|0);
-     HEAP32[$731>>2] = $733;
-     $734 = HEAP32[$$01038>>2]|0;
-     $735 = $734 >>> 11;
-     $736 = $735 & 128;
-     $737 = ($736|0)!=(0);
-     if (!($737)) {
-      $792 = ((($1)) + 12|0);
-      $793 = HEAP32[$792>>2]|0;
-      $794 = ((($793)) + 16|0);
-      $795 = HEAP32[$794>>2]|0;
-      $796 = ((($795)) + 4|0);
-      HEAP32[$796>>2] = $$01038;
-      $797 = ((($$01038)) + 12|0);
-      $798 = HEAP32[$797>>2]|0;
-      $799 = ((($798)) + 12|0);
-      $800 = HEAP32[$799>>2]|0;
-      $801 = ((($798)) + 16|0);
-      $802 = HEAP32[$801>>2]|0;
-      $803 = ((($798)) + 2|0);
-      $804 = HEAP16[$803>>1]|0;
-      $805 = $804&65535;
-      $806 = ((($714)) + 12|0);
-      HEAP32[$806>>2] = $805;
-      $807 = ($$01039|0)==(127);
-      if ($807) {
-       $808 = ((($714)) + 36|0);
-       HEAP32[$808>>2] = -1;
-       $809 = ((($798)) + 2|0);
-       $810 = HEAP16[$809>>1]|0;
-       $811 = $810&65535;
-       $812 = ($811|0)<(3);
-       if ($812) {
-        $$reg2mem1000$0 = 3;
-       } else {
-        $813 = ((($798)) + 2|0);
-        $814 = HEAP16[$813>>1]|0;
-        $815 = $814&65535;
-        $$reg2mem1000$0 = $815;
-       }
-       __THREW__ = 0;
-       invoke_viii(142,($1|0),($$reg2mem1000$0|0),3);
-       $816 = __THREW__; __THREW__ = 0;
-       if ((($816|0) != 0) & ((threwValue|0) != 0)) { $817 = _testSetjmp(HEAP32[$816>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($817|0) == 0) { _longjmp($816|0, threwValue|0); } tempRet0 = (threwValue); } else { $817 = -1; };
-       $818 = tempRet0;
-       $cond1378 = ($817|0)==(1);
-       if ($cond1378) {
-        $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $802;$$11066 = $800;$$11073 = $$61078;$$11080 = $798;$$11087 = $$01038;$$reg2mem1002$0 = $818;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-        continue L3;
-       }
-      } else {
-       $819 = ((($714)) + 36|0);
-       HEAP32[$819>>2] = $$01039;
-       $820 = ((($798)) + 2|0);
-       $821 = HEAP16[$820>>1]|0;
-       $822 = $821&65535;
-       $823 = (($$01039) + 2)|0;
-       __THREW__ = 0;
-       invoke_viii(142,($1|0),($822|0),($823|0));
-       $824 = __THREW__; __THREW__ = 0;
-       if ((($824|0) != 0) & ((threwValue|0) != 0)) { $825 = _testSetjmp(HEAP32[$824>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($825|0) == 0) { _longjmp($824|0, threwValue|0); } tempRet0 = (threwValue); } else { $825 = -1; };
-       $826 = tempRet0;
-       $cond1377 = ($825|0)==(1);
-       if ($cond1377) {
-        $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $802;$$11066 = $800;$$11073 = $$61078;$$11080 = $798;$$11087 = $$01038;$$reg2mem1002$0 = $826;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-        continue L3;
-       }
-      }
-      $827 = ((($1)) + 12|0);
-      $828 = HEAP32[$827>>2]|0;
-      $829 = ((($828)) + 4|0);
-      $830 = HEAP32[$829>>2]|0;
-      $831 = ((($798)) + 8|0);
-      $832 = HEAP32[$831>>2]|0;
-      $833 = HEAP32[$832>>2]|0;
-      $$5$phi = $$5;$$21052 = $833;$$51058 = $830;$$6 = $802;$$61071 = $800;$$61078 = $832;$$8 = $798;$$81094 = $$01038;$$sink$reg2mem$0 = $833;$$5 = $$5$phi;
-      label = 583;
-      continue;
-     }
-     $738 = ($$01039|0)==(127);
-     if ($738) {
-      $739 = ((($714)) + 36|0);
-      HEAP32[$739>>2] = -1;
-      $$sink5$reg2mem$0 = 3;
-     } else {
-      $740 = ((($714)) + 36|0);
-      HEAP32[$740>>2] = $$01039;
-      $741 = (($$01039) + 2)|0;
-      $$sink5$reg2mem$0 = $741;
-     }
-     $742 = ((($714)) + 12|0);
-     HEAP32[$742>>2] = $$sink5$reg2mem$0;
-     $743 = ((($$01038)) + 12|0);
-     $744 = HEAP32[$743>>2]|0;
-     __THREW__ = 0;
-     ;HEAP32[$$byval_copy1109>>2]=HEAP32[$16>>2]|0;HEAP32[$$byval_copy1109+4>>2]=HEAP32[$16+4>>2]|0;
-     invoke_viii($744|0,($22|0),($1|0),($$byval_copy1109|0));
-     $745 = __THREW__; __THREW__ = 0;
-     if ((($745|0) != 0) & ((threwValue|0) != 0)) { $746 = _testSetjmp(HEAP32[$745>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($746|0) == 0) { _longjmp($745|0, threwValue|0); } tempRet0 = (threwValue); } else { $746 = -1; };
-     $747 = tempRet0;
-     $cond1379 = ($746|0)==(1);
-     if ($cond1379) {
-      $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $747;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-      continue L3;
-     }
-     ;HEAP32[$17>>2]=HEAP32[$22>>2]|0;HEAP32[$17+4>>2]=HEAP32[$22+4>>2]|0;
-     $748 = ((($1)) + 12|0);
-     $749 = HEAP32[$748>>2]|0;
-     $750 = ((($749)) + 4|0);
-     $751 = HEAP32[$750>>2]|0;
-     ;HEAP32[$751>>2]=HEAP32[$17>>2]|0;HEAP32[$751+4>>2]=HEAP32[$17+4>>2]|0;
-     __THREW__ = 0;
-     invoke_vii(146,($1|0),($$11049|0));
-     $752 = __THREW__; __THREW__ = 0;
-     if ((($752|0) != 0) & ((threwValue|0) != 0)) { $753 = _testSetjmp(HEAP32[$752>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($753|0) == 0) { _longjmp($752|0, threwValue|0); } tempRet0 = (threwValue); } else { $753 = -1; };
-     $754 = tempRet0;
-     $cond1380 = ($753|0)==(1);
-     if ($cond1380) {
-      $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$8;$$11087 = $$81094;$$reg2mem1002$0 = $754;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-      continue L3;
-     }
-     $755 = ((($1)) + 20|0);
-     $756 = HEAP32[$755>>2]|0;
-     $757 = ($756|0)!=(0|0);
-     if ($757) {
-      $$21045 = $$5;$$21055 = $$51058;$$31062 = $$6;$$31068 = $$61071;$$31075 = $$61078;$$51084 = $$8;$$51091 = $$81094;
-      label = 272;
-      continue;
-     }
-     $758 = ((($1)) + 12|0);
-     $759 = HEAP32[$758>>2]|0;
-     $760 = ((($759)) + 16|0);
-     $761 = HEAP32[$760>>2]|0;
-     $762 = ((($761)) + 44|0);
-     $763 = HEAP32[$762>>2]|0;
-     $764 = ($763|0)!=(0|0);
-     if ($764) {
-      $$21061 = $$6;$$21067 = $$61071;$$21081 = $$8;$$21088 = $$81094;
-     } else {
-      $765 = ((($761)) + -48|0);
-      $766 = ((($765)) + 4|0);
-      $767 = HEAP32[$766>>2]|0;
-      $768 = HEAP32[$767>>2]|0;
-      $769 = $768 >>> 11;
-      $770 = $769 & 128;
-      $771 = ($770|0)!=(0);
-      if ($771) {
-       $$21061 = $$6;$$21067 = $$61071;$$21081 = $$8;$$21088 = $$81094;
-      } else {
-       $772 = ((($761)) + -48|0);
-       $773 = ((($772)) + 4|0);
-       $774 = HEAP32[$773>>2]|0;
-       $775 = ((($774)) + 12|0);
-       $776 = HEAP32[$775>>2]|0;
-       $777 = ((($776)) + 12|0);
-       $778 = HEAP32[$777>>2]|0;
-       $779 = ((($776)) + 16|0);
-       $780 = HEAP32[$779>>2]|0;
-       $$21061 = $780;$$21067 = $778;$$21081 = $776;$$21088 = $774;
-      }
-     }
-     $781 = ((($761)) + 8|0);
-     $782 = HEAP32[$781>>2]|0;
-     $783 = ((($1)) + 12|0);
-     $784 = HEAP32[$783>>2]|0;
-     $785 = ((($784)) + 4|0);
-     HEAP32[$785>>2] = $782;
-     $786 = ((($761)) + 28|0);
-     $787 = HEAP32[$786>>2]|0;
-     __THREW__ = 0;
-     invoke_vi(132,($1|0));
-     $788 = __THREW__; __THREW__ = 0;
-     if ((($788|0) != 0) & ((threwValue|0) != 0)) { $789 = _testSetjmp(HEAP32[$788>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($789|0) == 0) { _longjmp($788|0, threwValue|0); } tempRet0 = (threwValue); } else { $789 = -1; };
-     $790 = tempRet0;
-     $cond1381 = ($789|0)==(1);
-     if ($cond1381) {
-      $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $782;$$11060 = $$21061;$$11066 = $$21067;$$11073 = $787;$$11080 = $$21081;$$11087 = $$21088;$$reg2mem1002$0 = $790;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-      continue L3;
-     }
-     $791 = HEAP32[$787>>2]|0;
-     $$5$phi = $$5;$$21052 = $791;$$51058 = $782;$$6 = $$21061;$$61071 = $$21067;$$61078 = $787;$$8 = $$21081;$$81094 = $$21088;$$sink$reg2mem$0 = $791;$$5 = $$5$phi;
-     label = 583;
-     continue;
-    }
-    else if ((label|0) == 270) {
-     label = 0;
-     $1399 = $$21052 >>> 23;
-     $1400 = $1399 & 511;
-     $1401 = $1400 & 511;
-     $1402 = $1401 << 23;
-     $1403 = 41 | $1402;
-     $$11051 = $1403;$$41083 = $$31082;$$41090 = $$31089;
-    }
-    $1404 = ((($1)) + 20|0);
-    $1405 = HEAP32[$1404>>2]|0;
-    $1406 = ($1405|0)!=(0|0);
-    if ($1406) {
-     $$21045 = $$5;$$21055 = $$51058;$$31062 = $$6;$$31068 = $$61071;$$31075 = $$61078;$$51084 = $$41083;$$51091 = $$41090;
-     label = 272;
-     continue;
-    }
-    $1547 = ((($1)) + 12|0);
-    $1548 = HEAP32[$1547>>2]|0;
-    $1549 = ((($1548)) + 16|0);
-    $1550 = HEAP32[$1549>>2]|0;
-    $1551 = ((($1)) + 12|0);
-    $1552 = HEAP32[$1551>>2]|0;
-    $1553 = ((($1552)) + 16|0);
-    $1554 = HEAP32[$1553>>2]|0;
-    $1555 = ((($1554)) + 20|0);
-    $1556 = HEAP32[$1555>>2]|0;
-    $1557 = $$11051 >>> 23;
-    $1558 = $1557 & 511;
-    $1559 = (($$51058) + ($1558<<3)|0);
-    ;HEAP32[$44>>2]=HEAP32[$1559>>2]|0;HEAP32[$44+4>>2]=HEAP32[$1559+4>>2]|0;
-    $1560 = $$11051 >>> 14;
-    $1561 = $1560 & 511;
-    L646: do {
-     switch ($1561|0) {
-     case 2:  {
-      $1562 = ((($$41090)) + 20|0);
-      $1563 = HEAP32[$1562>>2]|0;
-      $1564 = ($1563|0)!=(0|0);
-      if ($1564) {
-       $1565 = HEAP32[$$41090>>2]|0;
-       $1566 = $1565 >>> 11;
-       $1567 = $1566 & 256;
-       $1568 = ($1567|0)!=(0);
-       if ($1568) {
-        label = 309;
-       } else {
-        __THREW__ = 0;
-        $1569 = (invoke_iii(179,($1|0),($$41090|0))|0);
-        $1570 = __THREW__; __THREW__ = 0;
-        if ((($1570|0) != 0) & ((threwValue|0) != 0)) { $1571 = _testSetjmp(HEAP32[$1570>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($1571|0) == 0) { _longjmp($1570|0, threwValue|0); } tempRet0 = (threwValue); } else { $1571 = -1; };
-        $1572 = tempRet0;
-        $cond1317 = ($1571|0)==(1);
-        if ($cond1317) {
-         $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$41083;$$11087 = $$41090;$$reg2mem1002$0 = $1572;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-         continue L3;
-        }
-        $1573 = ((($1569)) + 20|0);
-        $1574 = HEAP32[$1573>>2]|0;
-        $1575 = ($1574|0)>=(0);
-        if (!($1575)) {
-         __THREW__ = 0;
-         invoke_vii(180,($1|0),0);
-         $1576 = __THREW__; __THREW__ = 0;
-         if ((($1576|0) != 0) & ((threwValue|0) != 0)) { $1577 = _testSetjmp(HEAP32[$1576>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($1577|0) == 0) { _longjmp($1576|0, threwValue|0); } tempRet0 = (threwValue); } else { $1577 = -1; };
-         $1578 = tempRet0;
-         $cond1318 = ($1577|0)==(1);
-         if ($cond1318) {
-          $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$41083;$$11087 = $$41090;$$reg2mem1002$0 = $1578;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-          continue L3;
-         }
-         $$21045 = $$5;$$21055 = $$51058;$$31062 = $$6;$$31068 = $$61071;$$31075 = $$61078;$$51084 = $$41083;$$51091 = $$41090;
-         label = 272;
-         continue L19;
-        }
-        $1579 = ((($1)) + 12|0);
-        $1580 = HEAP32[$1579>>2]|0;
-        $1581 = ((($1580)) + 20|0);
-        $1582 = HEAP32[$1581>>2]|0;
-        $1583 = ((($1569)) + 20|0);
-        $1584 = HEAP32[$1583>>2]|0;
-        $1585 = (($1582) + (($1584*48)|0)|0);
-        $1586 = ((($1)) + 12|0);
-        $1587 = HEAP32[$1586>>2]|0;
-        $1588 = ((($1587)) + 20|0);
-        $1589 = HEAP32[$1588>>2]|0;
-        $1590 = ($1585|0)==($1589|0);
-        if (!($1590)) {
-         $1594 = ((($1)) + 12|0);
-         $1595 = HEAP32[$1594>>2]|0;
-         $1596 = ((($1595)) + 16|0);
-         $1597 = HEAP32[$1596>>2]|0;
-         $1598 = ((($1597)) + 8|0);
-         $1599 = HEAP32[$1598>>2]|0;
-         $1600 = ((($1)) + 12|0);
-         $1601 = HEAP32[$1600>>2]|0;
-         $1602 = ((($1601)) + 4|0);
-         HEAP32[$1602>>2] = $1599;
-         $1603 = ((($1)) + 12|0);
-         $1604 = HEAP32[$1603>>2]|0;
-         $1605 = ((($1604)) + 16|0);
-         HEAP32[$1605>>2] = $1585;
-         $$01018 = $1556;$$11020 = $1585;
-         break L646;
-        }
-        __THREW__ = 0;
-        invoke_vii(180,($1|0),0);
-        $1591 = __THREW__; __THREW__ = 0;
-        if ((($1591|0) != 0) & ((threwValue|0) != 0)) { $1592 = _testSetjmp(HEAP32[$1591>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($1592|0) == 0) { _longjmp($1591|0, threwValue|0); } tempRet0 = (threwValue); } else { $1592 = -1; };
-        $1593 = tempRet0;
-        $cond1319 = ($1592|0)==(1);
-        if ($cond1319) {
-         $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$41083;$$11087 = $$41090;$$reg2mem1002$0 = $1593;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-         continue L3;
-        }
-        $$21045 = $$5;$$21055 = $$51058;$$31062 = $$6;$$31068 = $$61071;$$31075 = $$61078;$$51084 = $$41083;$$51091 = $$41090;
-        label = 272;
-        continue L19;
-       }
-      } else {
-       label = 309;
-      }
-      break;
-     }
-     case 0:  {
-      label = 309;
-      break;
-     }
-     case 1:  {
-      $1655 = ((($$41090)) + 20|0);
-      $1656 = HEAP32[$1655>>2]|0;
-      $1657 = ($1656|0)!=(0|0);
-      if ($1657) {
-       $1658 = ((($$41090)) + 20|0);
-       $1659 = HEAP32[$1658>>2]|0;
-       $1660 = ((($1659)) + 20|0);
-       $1661 = HEAP32[$1660>>2]|0;
-       $1662 = ($1661|0)>=(0);
-       if ($1662) {
-        $1666 = ((($1)) + 12|0);
-        $1667 = HEAP32[$1666>>2]|0;
-        $1668 = ((($1667)) + 16|0);
-        $1669 = HEAP32[$1668>>2]|0;
-        $1670 = ((($1)) + 12|0);
-        $1671 = HEAP32[$1670>>2]|0;
-        $1672 = ((($1671)) + 20|0);
-        $1673 = HEAP32[$1672>>2]|0;
-        $1674 = ($1669|0)==($1673|0);
-        if ($1674) {
-         $1675 = ((($1)) + 12|0);
-         $1676 = HEAP32[$1675>>2]|0;
-         $1677 = ((($1676)) + 16|0);
-         $1678 = HEAP32[$1677>>2]|0;
-         $1679 = ((($1678)) + 28|0);
-         $1680 = HEAP32[$1679>>2]|0;
-         $1681 = ($1680|0)!=(0|0);
-         if ($1681) {
-          $1682 = ((($1)) + 12|0);
-          $1683 = HEAP32[$1682>>2]|0;
-          $1684 = HEAP32[$1683>>2]|0;
-          $1685 = ((($1)) + 12|0);
-          HEAP32[$1685>>2] = $1684;
-          HEAP32[$1683>>2] = 0;
-         }
-        }
-        $1686 = ((($1)) + 12|0);
-        $1687 = HEAP32[$1686>>2]|0;
-        $1688 = ((($1687)) + 16|0);
-        $1689 = HEAP32[$1688>>2]|0;
-        $1690 = ((($1689)) + 8|0);
-        $1691 = HEAP32[$1690>>2]|0;
-        $1692 = ((($1)) + 12|0);
-        $1693 = HEAP32[$1692>>2]|0;
-        $1694 = ((($1693)) + 4|0);
-        HEAP32[$1694>>2] = $1691;
-        $1695 = ((($1)) + 12|0);
-        $1696 = HEAP32[$1695>>2]|0;
-        $1697 = ((($1696)) + 20|0);
-        $1698 = HEAP32[$1697>>2]|0;
-        $1699 = ((($$41090)) + 20|0);
-        $1700 = HEAP32[$1699>>2]|0;
-        $1701 = ((($1700)) + 20|0);
-        $1702 = HEAP32[$1701>>2]|0;
-        $1703 = (($1698) + (($1702*48)|0)|0);
-        $1704 = ((($1703)) + 48|0);
-        $1705 = ((($1)) + 12|0);
-        $1706 = HEAP32[$1705>>2]|0;
-        $1707 = ((($1706)) + 16|0);
-        HEAP32[$1707>>2] = $1704;
-        $$01019 = $1689;
-        while(1) {
-         $1708 = ((($1)) + 12|0);
-         $1709 = HEAP32[$1708>>2]|0;
-         $1710 = ((($1709)) + 16|0);
-         $1711 = HEAP32[$1710>>2]|0;
-         $1712 = ($$01019>>>0)>($1711>>>0);
-         if (!($1712)) {
-          $$01018 = $1556;$$11020 = $$01019;
-          break L646;
-         }
-         $1713 = ((($$01019)) + -48|0);
-         $1714 = ((($1713)) + 40|0);
-         $1715 = HEAP32[$1714>>2]|0;
-         $1716 = ($1715|0)==(-1);
-         if ($1716) {
-          break;
-         }
-         $1720 = ((($$01019)) + -48|0);
-         $$01019 = $1720;
-        }
-        $1717 = ((($1)) + 12|0);
-        $1718 = HEAP32[$1717>>2]|0;
-        $1719 = ((($1718)) + 16|0);
-        HEAP32[$1719>>2] = $$01019;
-        $$01018 = $1556;$$11020 = $$01019;
-        break L646;
-       }
-      }
-      __THREW__ = 0;
-      invoke_vii(180,($1|0),1);
-      $1663 = __THREW__; __THREW__ = 0;
-      if ((($1663|0) != 0) & ((threwValue|0) != 0)) { $1664 = _testSetjmp(HEAP32[$1663>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($1664|0) == 0) { _longjmp($1663|0, threwValue|0); } tempRet0 = (threwValue); } else { $1664 = -1; };
-      $1665 = tempRet0;
-      $cond1312 = ($1664|0)==(1);
-      if ($cond1312) {
-       $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$41083;$$11087 = $$41090;$$reg2mem1002$0 = $1665;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-       continue L3;
-      }
-      $$21045 = $$5;$$21055 = $$51058;$$31062 = $$6;$$31068 = $$61071;$$31075 = $$61078;$$51084 = $$41083;$$51091 = $$41090;
-      label = 272;
-      continue L19;
-      break;
-     }
-     default: {
-      $$01018 = $1556;$$11020 = $1550;
-     }
-     }
-    } while(0);
-    if ((label|0) == 309) {
-     label = 0;
-     $1606 = ((($1)) + 12|0);
-     $1607 = HEAP32[$1606>>2]|0;
-     $1608 = ((($1607)) + 20|0);
-     $1609 = HEAP32[$1608>>2]|0;
-     $1610 = ($1550|0)==($1609|0);
-     do {
-      if ($1610) {
-       $1611 = ((($1)) + 12|0);
-       $1612 = HEAP32[$1611>>2]|0;
-       $1613 = HEAP32[$1612>>2]|0;
-       $1614 = ($1613|0)!=(0|0);
-       if (!($1614)) {
-        __THREW__ = 0;
-        invoke_vii(180,($1|0),0);
-        $1615 = __THREW__; __THREW__ = 0;
-        if ((($1615|0) != 0) & ((threwValue|0) != 0)) { $1616 = _testSetjmp(HEAP32[$1615>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($1616|0) == 0) { _longjmp($1615|0, threwValue|0); } tempRet0 = (threwValue); } else { $1616 = -1; };
-        $1617 = tempRet0;
-        $cond1313 = ($1616|0)==(1);
-        if ($cond1313) {
-         $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$41083;$$11087 = $$41090;$$reg2mem1002$0 = $1617;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-         continue L3;
-        }
-        $$21045 = $$5;$$21055 = $$51058;$$31062 = $$6;$$31068 = $$61071;$$31075 = $$61078;$$51084 = $$41083;$$51091 = $$41090;
-        label = 272;
-        continue L19;
-       }
-       $1618 = ((($1)) + 12|0);
-       $1619 = HEAP32[$1618>>2]|0;
-       $1620 = HEAP32[$1619>>2]|0;
-       $1621 = ((($1620)) + 16|0);
-       $1622 = HEAP32[$1621>>2]|0;
-       $1623 = ((($1)) + 12|0);
-       $1624 = HEAP32[$1623>>2]|0;
-       $1625 = HEAP32[$1624>>2]|0;
-       $1626 = ((($1625)) + 20|0);
-       $1627 = HEAP32[$1626>>2]|0;
-       $1628 = ($1622|0)==($1627|0);
-       if (!($1628)) {
-        $1641 = ((($1)) + 12|0);
-        $1642 = HEAP32[$1641>>2]|0;
-        $1643 = ((($1642)) + 44|0);
-        HEAP32[$1643>>2] = 5;
-        $1644 = ((($1)) + 12|0);
-        $1645 = HEAP32[$1644>>2]|0;
-        $1646 = HEAP32[$1645>>2]|0;
-        $1647 = ((($1)) + 12|0);
-        HEAP32[$1647>>2] = $1646;
-        $1648 = ((($1)) + 12|0);
-        $1649 = HEAP32[$1648>>2]|0;
-        $1650 = ((($1649)) + 44|0);
-        HEAP32[$1650>>2] = 1;
-        break;
-       }
-       __THREW__ = 0;
-       $1629 = (invoke_iii(135,($1|0),(56763|0))|0);
-       $1630 = __THREW__; __THREW__ = 0;
-       if ((($1630|0) != 0) & ((threwValue|0) != 0)) { $1631 = _testSetjmp(HEAP32[$1630>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($1631|0) == 0) { _longjmp($1630|0, threwValue|0); } tempRet0 = (threwValue); } else { $1631 = -1; };
-       $1632 = tempRet0;
-       $cond1314 = ($1631|0)==(1);
-       if ($cond1314) {
-        $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$41083;$$11087 = $$41090;$$reg2mem1002$0 = $1632;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-        continue L3;
-       }
-       __THREW__ = 0;
-       invoke_viiii(171,($46|0),($1|0),(56774|0),13);
-       $1633 = __THREW__; __THREW__ = 0;
-       if ((($1633|0) != 0) & ((threwValue|0) != 0)) { $1634 = _testSetjmp(HEAP32[$1633>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($1634|0) == 0) { _longjmp($1633|0, threwValue|0); } tempRet0 = (threwValue); } else { $1634 = -1; };
-       $1635 = tempRet0;
-       $cond1315 = ($1634|0)==(1);
-       if ($cond1315) {
-        $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$41083;$$11087 = $$41090;$$reg2mem1002$0 = $1635;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-        continue L3;
-       }
-       __THREW__ = 0;
-       ;HEAP32[$$byval_copy1121>>2]=HEAP32[$46>>2]|0;HEAP32[$$byval_copy1121+4>>2]=HEAP32[$46+4>>2]|0;
-       invoke_viiii(172,($45|0),($1|0),($1629|0),($$byval_copy1121|0));
-       $1636 = __THREW__; __THREW__ = 0;
-       if ((($1636|0) != 0) & ((threwValue|0) != 0)) { $1637 = _testSetjmp(HEAP32[$1636>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($1637|0) == 0) { _longjmp($1636|0, threwValue|0); } tempRet0 = (threwValue); } else { $1637 = -1; };
-       $1638 = tempRet0;
-       $cond1316 = ($1637|0)==(1);
-       if ($cond1316) {
-        $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$41083;$$11087 = $$41090;$$reg2mem1002$0 = $1638;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-        continue L3;
-       }
-       $1639 = HEAP32[$45>>2]|0;
-       $1640 = ((($1)) + 20|0);
-       HEAP32[$1640>>2] = $1639;
-       $$21045 = $$5;$$21055 = $$51058;$$31062 = $$6;$$31068 = $$61071;$$31075 = $$61078;$$51084 = $$41083;$$51091 = $$41090;
-       label = 272;
-       continue L19;
-      }
-     } while(0);
-     $1651 = ((($1)) + 12|0);
-     $1652 = HEAP32[$1651>>2]|0;
-     $1653 = ((($1652)) + 16|0);
-     $1654 = HEAP32[$1653>>2]|0;
-     $$01018 = $1556;$$11020 = $1654;
-    }
-    while(1) {
-     $1721 = ((($1)) + 12|0);
-     $1722 = HEAP32[$1721>>2]|0;
-     $1723 = ((($1722)) + 16|0);
-     $1724 = HEAP32[$1723>>2]|0;
-     $1725 = ((($1724)) + -48|0);
-     $1726 = ((($1725)) + 20|0);
-     $1727 = HEAP32[$1726>>2]|0;
-     $1728 = ($$01018|0)>($1727|0);
-     if (!($1728)) {
-      break;
-     }
-     $1729 = (($$01018) + -1)|0;
-     __THREW__ = 0;
-     invoke_vii(166,($1|0),($1729|0));
-     $1730 = __THREW__; __THREW__ = 0;
-     if ((($1730|0) != 0) & ((threwValue|0) != 0)) { $1731 = _testSetjmp(HEAP32[$1730>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($1731|0) == 0) { _longjmp($1730|0, threwValue|0); } tempRet0 = (threwValue); } else { $1731 = -1; };
-     $1732 = tempRet0;
-     $cond1321 = ($1731|0)==(1);
-     if ($cond1321) {
-      $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$41083;$$11087 = $$41090;$$reg2mem1002$0 = $1732;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-      continue L3;
-     }
-     $$11020$phi = $$11020;$$01018 = $1729;$$11020 = $$11020$phi;
-    }
-    __THREW__ = 0;
-    invoke_vi(132,($1|0));
-    $1733 = __THREW__; __THREW__ = 0;
-    if ((($1733|0) != 0) & ((threwValue|0) != 0)) { $1734 = _testSetjmp(HEAP32[$1733>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($1734|0) == 0) { _longjmp($1733|0, threwValue|0); } tempRet0 = (threwValue); } else { $1734 = -1; };
-    $1735 = tempRet0;
-    $cond1320 = ($1734|0)==(1);
-    if ($cond1320) {
-     $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$5;$$11054 = $$51058;$$11060 = $$6;$$11066 = $$61071;$$11073 = $$61078;$$11080 = $$41083;$$11087 = $$41090;$$reg2mem1002$0 = $1735;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-     continue L3;
-    }
-    $1736 = ((($$11020)) + 40|0);
-    $1737 = HEAP32[$1736>>2]|0;
-    $1738 = ((($$11020)) + 28|0);
-    $1739 = HEAP32[$1738>>2]|0;
-    $1740 = ((($$11020)) + 8|0);
-    $1741 = HEAP32[$1740>>2]|0;
-    $1742 = ((($1)) + 12|0);
-    $1743 = HEAP32[$1742>>2]|0;
-    $1744 = ((($1743)) + 4|0);
-    HEAP32[$1744>>2] = $1741;
-    $1745 = ($1737|0)==(-1);
-    if ($1745) {
-     label = 337;
-     break L3;
-    }
-    $1746 = ((($1)) + 12|0);
-    $1747 = HEAP32[$1746>>2]|0;
-    $1748 = ((($1747)) + 16|0);
-    $1749 = HEAP32[$1748>>2]|0;
-    $1750 = ((($1749)) + 4|0);
-    $1751 = HEAP32[$1750>>2]|0;
-    $1752 = ((($1751)) + 12|0);
-    $1753 = HEAP32[$1752>>2]|0;
-    $1754 = ((($1753)) + 12|0);
-    $1755 = HEAP32[$1754>>2]|0;
-    $1756 = ((($1753)) + 16|0);
-    $1757 = HEAP32[$1756>>2]|0;
-    $1758 = (($1741) + ($1737<<3)|0);
-    ;HEAP32[$1758>>2]=HEAP32[$44>>2]|0;HEAP32[$1758+4>>2]=HEAP32[$44+4>>2]|0;
-    $$3 = $$5;$$31056 = $1741;$$41063 = $1757;$$41069 = $1755;$$41076 = $1739;$$61085 = $1753;$$61092 = $1751;
-   }
-   $1759 = HEAP32[$$41076>>2]|0;
-   $$21052 = $1759;$$5 = $$3;$$51058 = $$31056;$$6 = $$41063;$$61071 = $$41069;$$61078 = $$41076;$$8 = $$61085;$$81094 = $$61092;$$sink$reg2mem$0 = $1759;
-   label = 583;
-  }
-  if ((label|0) == 283) {
-   label = 0;
-   HEAP32[$1>>2] = $$11047;
-   __THREW__ = 0;
-   invoke_vii(178,($$11047|0),1);
-   $1477 = __THREW__; __THREW__ = 0;
-   if ((($1477|0) != 0) & ((threwValue|0) != 0)) { $1478 = _testSetjmp(HEAP32[$1477>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($1478|0) == 0) { _longjmp($1477|0, threwValue|0); } tempRet0 = (threwValue); } else { $1478 = -1; };
-   $1479 = tempRet0;
-   $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$21045;$$11054 = $$21055;$$11060 = $$31062;$$11066 = $$31068;$$11073 = $$31075;$$11080 = $$51084;$$11087 = $$51091;$$reg2mem1002$0 = $1479;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-   continue;
-  }
-  else if ((label|0) == 290) {
-   label = 0;
-   $1500 = ((($1499)) + 8|0);
-   $1501 = HEAP32[$1500>>2]|0;
-   $1502 = ((($1)) + 12|0);
-   $1503 = HEAP32[$1502>>2]|0;
-   $1504 = ((($1503)) + 4|0);
-   HEAP32[$1504>>2] = $1501;
-   $$4 = $$21045;$$41057 = $1501;$$51064 = $$31062;$$51070 = $$31068;$$51077 = $$31075;$$7 = $$51084;$$71093 = $$51091;
-  }
-  $3002 = ((($1)) + 12|0);
-  $3003 = HEAP32[$3002>>2]|0;
-  $3004 = ((($3003)) + 16|0);
-  $3005 = HEAP32[$3004>>2]|0;
-  $3006 = ((($1)) + 12|0);
-  $3007 = HEAP32[$3006>>2]|0;
-  $3008 = ((($3007)) + 20|0);
-  $3009 = HEAP32[$3008>>2]|0;
-  $3010 = ($3005|0)==($3009|0);
-  if ($3010) {
-   $$reg2mem992$0 = 0;
-  } else {
-   $3011 = ((($1)) + 12|0);
-   $3012 = HEAP32[$3011>>2]|0;
-   $3013 = ((($3012)) + 16|0);
-   $3014 = HEAP32[$3013>>2]|0;
-   $3015 = ((($3014)) + -48|0);
-   $3016 = ((($3015)) + 20|0);
-   $3017 = HEAP32[$3016>>2]|0;
-   $$reg2mem992$0 = $3017;
-  }
-  $3018 = ((($1)) + 12|0);
-  $3019 = HEAP32[$3018>>2]|0;
-  $3020 = ((($3019)) + 16|0);
-  $3021 = HEAP32[$3020>>2]|0;
-  $3022 = ((($3021)) + 20|0);
-  $3023 = HEAP32[$3022>>2]|0;
-  $$0 = $3023;
-  while(1) {
-   $3024 = ($$0|0)>($$reg2mem992$0|0);
-   if (!($3024)) {
-    break;
-   }
-   $3025 = (($$0) + -1)|0;
-   __THREW__ = 0;
-   invoke_vii(166,($1|0),($3025|0));
-   $3026 = __THREW__; __THREW__ = 0;
-   if ((($3026|0) != 0) & ((threwValue|0) != 0)) { $3027 = _testSetjmp(HEAP32[$3026>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($3027|0) == 0) { _longjmp($3026|0, threwValue|0); } tempRet0 = (threwValue); } else { $3027 = -1; };
-   $3028 = tempRet0;
-   $cond1244 = ($3027|0)==(1);
-   if ($cond1244) {
-    $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$4;$$11054 = $$41057;$$11060 = $$51064;$$11066 = $$51070;$$11073 = $$51077;$$11080 = $$7;$$11087 = $$71093;$$reg2mem1002$0 = $3028;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-    continue L3;
-   }
-   $$0 = $3025;
-  }
-  $3029 = ((($1)) + 12|0);
-  $3030 = HEAP32[$3029>>2]|0;
-  $3031 = ((($3030)) + 16|0);
-  $3032 = HEAP32[$3031>>2]|0;
-  $3033 = ((($3032)) + 32|0);
-  HEAP32[$3033>>2] = 0;
-  HEAP32[$1>>2] = $$11047;
-  $3034 = ((($1)) + 20|0);
-  $3035 = HEAP32[$3034>>2]|0;
-  $3036 = ($3035|0)!=(0|0);
-  if (!($3036)) {
-   label = 571;
-   break;
-  }
-  $3037 = ((($1)) + 20|0);
-  $3038 = HEAP32[$3037>>2]|0;
-  __THREW__ = 0;
-  invoke_vii(133,($0|0),($3038|0));
-  $3039 = __THREW__; __THREW__ = 0;
-  if ((($3039|0) != 0) & ((threwValue|0) != 0)) { $3040 = _testSetjmp(HEAP32[$3039>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($3040|0) == 0) { _longjmp($3039|0, threwValue|0); } tempRet0 = (threwValue); } else { $3040 = -1; };
-  $3041 = tempRet0;
-  $cond1243 = ($3040|0)==(1);
-  if ($cond1243) {
-   $$11049$phi = $$11049;$$11047$phi = $$11047;$$11044 = $$4;$$11054 = $$41057;$$11060 = $$51064;$$11066 = $$51070;$$11073 = $$51077;$$11080 = $$7;$$11087 = $$71093;$$reg2mem1002$0 = $3041;$$11049 = $$11049$phi;$$11047 = $$11047$phi;
-  } else {
-   label = 570;
-   break;
-  }
- }
- if ((label|0) == 337) {
-  HEAP32[$1>>2] = $$11047;
-  ;HEAP32[$0>>2]=HEAP32[$44>>2]|0;HEAP32[$0+4>>2]=HEAP32[$44+4>>2]|0;
-  _free(_setjmpTable|0);
-  STACKTOP = sp;return;
- }
- else if ((label|0) == 570) {
-  _free(_setjmpTable|0);
-  STACKTOP = sp;return;
- }
- else if ((label|0) == 571) {
-  $3042 = HEAP16[$$7>>1]|0;
-  $3043 = $3042&65535;
-  $3044 = (($$41057) + ($3043<<3)|0);
-  ;HEAP32[$0>>2]=HEAP32[$3044>>2]|0;HEAP32[$0+4>>2]=HEAP32[$3044+4>>2]|0;
-  _free(_setjmpTable|0);
-  STACKTOP = sp;return;
- }
- else if ((label|0) == 584) {
-  // unreachable;
- }
-}
-function _uvenv($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0;
- var $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $0;
- $4 = $1;
- $6 = $3;
- $7 = ((($6)) + 12|0);
- $8 = HEAP32[$7>>2]|0;
- $9 = ((($8)) + 16|0);
- $10 = HEAP32[$9>>2]|0;
- $11 = ((($10)) + 4|0);
- $12 = HEAP32[$11>>2]|0;
- $13 = ((($12)) + 20|0);
- $14 = HEAP32[$13>>2]|0;
- $5 = $14;
- while(1) {
-  $15 = $4;
-  $16 = (($15) + -1)|0;
-  $4 = $16;
-  $17 = ($15|0)!=(0);
-  $18 = $5;
-  if (!($17)) {
-   label = 6;
-   break;
-  }
-  $19 = ($18|0)!=(0|0);
-  if (!($19)) {
-   label = 4;
-   break;
-  }
-  $20 = $5;
-  $21 = ((($20)) + 4|0);
-  $22 = HEAP32[$21>>2]|0;
-  $5 = $22;
- }
- if ((label|0) == 4) {
-  $2 = 0;
-  $23 = $2;
-  STACKTOP = sp;return ($23|0);
- }
- else if ((label|0) == 6) {
-  $2 = $18;
-  $23 = $2;
-  STACKTOP = sp;return ($23|0);
- }
- return (0)|0;
-}
-function _ecall($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $$byval_copy = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0;
- var $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0;
- var $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0;
- var $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0;
- var $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0;
- var $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);
- $$byval_copy = sp + 32|0;
- $8 = sp;
- $2 = $0;
- $3 = $1;
- $9 = $2;
- $10 = ((($9)) + 12|0);
- $11 = HEAP32[$10>>2]|0;
- $12 = ((($11)) + 4|0);
- $13 = HEAP32[$12>>2]|0;
- $6 = $13;
- $14 = $3;
- $15 = ($14|0)<(0);
- if ($15) {
-  STACKTOP = sp;return;
- }
- $16 = $2;
- $17 = ((($16)) + 12|0);
- $18 = HEAP32[$17>>2]|0;
- $19 = ((($18)) + 36|0);
- $20 = HEAP32[$19>>2]|0;
- $21 = $3;
- $22 = (($20) + ($21<<2)|0);
- $23 = HEAP32[$22>>2]|0;
- $4 = $23;
- $24 = $4;
- $25 = ($24|0)!=(0|0);
- if (!($25)) {
-  STACKTOP = sp;return;
- }
- $26 = $2;
- $27 = ((($26)) + 12|0);
- $28 = HEAP32[$27>>2]|0;
- $29 = ((($28)) + 16|0);
- $30 = HEAP32[$29>>2]|0;
- $31 = ((($30)) + 20|0);
- $32 = HEAP32[$31>>2]|0;
- $33 = $3;
- $34 = ($32|0)>($33|0);
- if ($34) {
-  $35 = $3;
-  $36 = $2;
-  $37 = ((($36)) + 12|0);
-  $38 = HEAP32[$37>>2]|0;
-  $39 = ((($38)) + 16|0);
-  $40 = HEAP32[$39>>2]|0;
-  $41 = ((($40)) + 20|0);
-  HEAP32[$41>>2] = $35;
- }
- $42 = $2;
- $43 = (_cipush($42)|0);
- $5 = $43;
- $44 = $2;
- $45 = ((($44)) + 12|0);
- $46 = HEAP32[$45>>2]|0;
- $47 = ((($46)) + 4|0);
- $48 = HEAP32[$47>>2]|0;
- $49 = $5;
- $50 = ((($49)) + 8|0);
- HEAP32[$50>>2] = $48;
- $51 = $5;
- $52 = ((($51)) + -48|0);
- $53 = HEAP32[$52>>2]|0;
- $54 = $5;
- HEAP32[$54>>2] = $53;
- $55 = $5;
- $56 = ((($55)) + 40|0);
- HEAP32[$56>>2] = -1;
- $57 = $5;
- $58 = ((($57)) + 36|0);
- HEAP32[$58>>2] = 0;
- $59 = $4;
- $60 = $5;
- $61 = ((($60)) + 4|0);
- HEAP32[$61>>2] = $59;
- $62 = $4;
- $63 = ((($62)) + 12|0);
- $64 = HEAP32[$63>>2]|0;
- $65 = ((($64)) + 2|0);
- $66 = HEAP16[$65>>1]|0;
- $67 = $66&65535;
- $68 = $5;
- $69 = ((($68)) + 12|0);
- HEAP32[$69>>2] = $67;
- $70 = $4;
- $71 = ((($70)) + 16|0);
- $72 = HEAP32[$71>>2]|0;
- $73 = $5;
- $74 = ((($73)) + 44|0);
- HEAP32[$74>>2] = $72;
- $75 = $2;
- $76 = ((($75)) + 12|0);
- $77 = HEAP32[$76>>2]|0;
- $78 = ((($77)) + 4|0);
- $79 = HEAP32[$78>>2]|0;
- $80 = $5;
- $81 = ((($80)) + -48|0);
- $82 = ((($81)) + 12|0);
- $83 = HEAP32[$82>>2]|0;
- $84 = (($79) + ($83<<3)|0);
- $85 = $2;
- $86 = ((($85)) + 12|0);
- $87 = HEAP32[$86>>2]|0;
- $88 = ((($87)) + 4|0);
- HEAP32[$88>>2] = $84;
- $89 = $2;
- $90 = ((($89)) + 20|0);
- $91 = HEAP32[$90>>2]|0;
- $7 = $91;
- $92 = $2;
- $93 = ((($92)) + 20|0);
- HEAP32[$93>>2] = 0;
- $94 = $2;
- $95 = $4;
- $96 = $6;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$96>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$96+4>>2]|0;
- _mrb_run($8,$94,$95,$$byval_copy);
- $97 = $2;
- $98 = ((($97)) + 12|0);
- $99 = HEAP32[$98>>2]|0;
- $100 = ((($99)) + 36|0);
- $101 = HEAP32[$100>>2]|0;
- $102 = $3;
- $103 = (($101) + ($102<<2)|0);
- HEAP32[$103>>2] = 0;
- $104 = $2;
- $105 = ((($104)) + 20|0);
- $106 = HEAP32[$105>>2]|0;
- $107 = ($106|0)!=(0|0);
- if ($107) {
-  STACKTOP = sp;return;
- }
- $108 = $7;
- $109 = $2;
- $110 = ((($109)) + 20|0);
- HEAP32[$110>>2] = $108;
- STACKTOP = sp;return;
-}
-function _value_move($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;
- var $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $0;
- $4 = $1;
- $5 = $2;
- $6 = $3;
- $7 = $4;
- $8 = ($6>>>0)>($7>>>0);
- if ($8) {
-  $9 = $3;
-  $10 = $4;
-  $11 = $5;
-  $12 = (($10) + ($11<<3)|0);
-  $13 = ($9>>>0)<($12>>>0);
-  if ($13) {
-   $14 = $5;
-   $15 = $3;
-   $16 = (($15) + ($14<<3)|0);
-   $3 = $16;
-   $17 = $5;
-   $18 = $4;
-   $19 = (($18) + ($17<<3)|0);
-   $4 = $19;
-   while(1) {
-    $20 = $5;
-    $21 = (($20) + -1)|0;
-    $5 = $21;
-    $22 = ($20>>>0)>(0);
-    if (!($22)) {
-     break;
-    }
-    $23 = $3;
-    $24 = ((($23)) + -8|0);
-    $3 = $24;
-    $25 = $4;
-    $26 = ((($25)) + -8|0);
-    $4 = $26;
-    ;HEAP32[$24>>2]=HEAP32[$26>>2]|0;HEAP32[$24+4>>2]=HEAP32[$26+4>>2]|0;
-   }
-   STACKTOP = sp;return;
-  }
- }
- $27 = $3;
- $28 = $4;
- $29 = ($27|0)!=($28|0);
- if (!($29)) {
-  STACKTOP = sp;return;
- }
- while(1) {
-  $30 = $5;
-  $31 = (($30) + -1)|0;
-  $5 = $31;
-  $32 = ($30>>>0)>(0);
-  if (!($32)) {
-   break;
-  }
-  $33 = $3;
-  $34 = ((($33)) + 8|0);
-  $3 = $34;
-  $35 = $4;
-  $36 = ((($35)) + 8|0);
-  $4 = $36;
-  ;HEAP32[$33>>2]=HEAP32[$35>>2]|0;HEAP32[$33+4>>2]=HEAP32[$35+4>>2]|0;
- }
- STACKTOP = sp;return;
-}
-function _argnum_error($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $$byval_copy = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;
- var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0;
- var $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, $vararg_buffer3 = 0, $vararg_ptr1 = 0, $vararg_ptr2 = 0, $vararg_ptr6 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 144|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(144|0);
- $$byval_copy = sp + 128|0;
- $vararg_buffer3 = sp + 24|0;
- $vararg_buffer = sp;
- $4 = sp + 112|0;
- $5 = sp + 104|0;
- $6 = sp + 96|0;
- $7 = sp + 88|0;
- $8 = sp + 80|0;
- $9 = sp + 72|0;
- $10 = sp + 64|0;
- $11 = sp + 56|0;
- $12 = sp + 48|0;
- $13 = sp + 40|0;
- $2 = $0;
- $3 = $1;
- $14 = $2;
- $15 = ((($14)) + 12|0);
- $16 = HEAP32[$15>>2]|0;
- $17 = ((($16)) + 16|0);
- $18 = HEAP32[$17>>2]|0;
- $19 = HEAP32[$18>>2]|0;
- $20 = ($19|0)!=(0);
- $21 = $2;
- $22 = $2;
- if ($20) {
-  $23 = $2;
-  $24 = ((($23)) + 12|0);
-  $25 = HEAP32[$24>>2]|0;
-  $26 = ((($25)) + 16|0);
-  $27 = HEAP32[$26>>2]|0;
-  $28 = HEAP32[$27>>2]|0;
-  _mrb_sym2str($6,$22,$28);
-  $29 = $2;
-  $30 = ((($29)) + 12|0);
-  $31 = HEAP32[$30>>2]|0;
-  $32 = ((($31)) + 16|0);
-  $33 = HEAP32[$32>>2]|0;
-  $34 = ((($33)) + 36|0);
-  $35 = HEAP32[$34>>2]|0;
-  _mrb_fixnum_value_421($7,$35);
-  $36 = $3;
-  _mrb_fixnum_value_421($8,$36);
-  ;HEAP8[$vararg_buffer>>0]=HEAP8[$6>>0]|0;HEAP8[$vararg_buffer+1>>0]=HEAP8[$6+1>>0]|0;HEAP8[$vararg_buffer+2>>0]=HEAP8[$6+2>>0]|0;HEAP8[$vararg_buffer+3>>0]=HEAP8[$6+3>>0]|0;HEAP8[$vararg_buffer+4>>0]=HEAP8[$6+4>>0]|0;HEAP8[$vararg_buffer+5>>0]=HEAP8[$6+5>>0]|0;HEAP8[$vararg_buffer+6>>0]=HEAP8[$6+6>>0]|0;HEAP8[$vararg_buffer+7>>0]=HEAP8[$6+7>>0]|0;
-  $vararg_ptr1 = ((($vararg_buffer)) + 8|0);
-  ;HEAP8[$vararg_ptr1>>0]=HEAP8[$7>>0]|0;HEAP8[$vararg_ptr1+1>>0]=HEAP8[$7+1>>0]|0;HEAP8[$vararg_ptr1+2>>0]=HEAP8[$7+2>>0]|0;HEAP8[$vararg_ptr1+3>>0]=HEAP8[$7+3>>0]|0;HEAP8[$vararg_ptr1+4>>0]=HEAP8[$7+4>>0]|0;HEAP8[$vararg_ptr1+5>>0]=HEAP8[$7+5>>0]|0;HEAP8[$vararg_ptr1+6>>0]=HEAP8[$7+6>>0]|0;HEAP8[$vararg_ptr1+7>>0]=HEAP8[$7+7>>0]|0;
-  $vararg_ptr2 = ((($vararg_buffer)) + 16|0);
-  ;HEAP8[$vararg_ptr2>>0]=HEAP8[$8>>0]|0;HEAP8[$vararg_ptr2+1>>0]=HEAP8[$8+1>>0]|0;HEAP8[$vararg_ptr2+2>>0]=HEAP8[$8+2>>0]|0;HEAP8[$vararg_ptr2+3>>0]=HEAP8[$8+3>>0]|0;HEAP8[$vararg_ptr2+4>>0]=HEAP8[$8+4>>0]|0;HEAP8[$vararg_ptr2+5>>0]=HEAP8[$8+5>>0]|0;HEAP8[$vararg_ptr2+6>>0]=HEAP8[$8+6>>0]|0;HEAP8[$vararg_ptr2+7>>0]=HEAP8[$8+7>>0]|0;
-  _mrb_format($9,$21,56884,$vararg_buffer);
-  ;HEAP32[$5>>2]=HEAP32[$9>>2]|0;HEAP32[$5+4>>2]=HEAP32[$9+4>>2]|0;
-  $44 = $2;
-  $45 = $2;
-  $46 = (_mrb_class_get($45,69160)|0);
-  ;HEAP32[$$byval_copy>>2]=HEAP32[$5>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$5+4>>2]|0;
-  _mrb_exc_new_str($13,$44,$46,$$byval_copy);
-  ;HEAP32[$4>>2]=HEAP32[$13>>2]|0;HEAP32[$4+4>>2]=HEAP32[$13+4>>2]|0;
-  $47 = HEAP32[$4>>2]|0;
-  $48 = $2;
-  $49 = ((($48)) + 20|0);
-  HEAP32[$49>>2] = $47;
-  STACKTOP = sp;return;
- } else {
-  $37 = ((($22)) + 12|0);
-  $38 = HEAP32[$37>>2]|0;
-  $39 = ((($38)) + 16|0);
-  $40 = HEAP32[$39>>2]|0;
-  $41 = ((($40)) + 36|0);
-  $42 = HEAP32[$41>>2]|0;
-  _mrb_fixnum_value_421($10,$42);
-  $43 = $3;
-  _mrb_fixnum_value_421($11,$43);
-  ;HEAP8[$vararg_buffer3>>0]=HEAP8[$10>>0]|0;HEAP8[$vararg_buffer3+1>>0]=HEAP8[$10+1>>0]|0;HEAP8[$vararg_buffer3+2>>0]=HEAP8[$10+2>>0]|0;HEAP8[$vararg_buffer3+3>>0]=HEAP8[$10+3>>0]|0;HEAP8[$vararg_buffer3+4>>0]=HEAP8[$10+4>>0]|0;HEAP8[$vararg_buffer3+5>>0]=HEAP8[$10+5>>0]|0;HEAP8[$vararg_buffer3+6>>0]=HEAP8[$10+6>>0]|0;HEAP8[$vararg_buffer3+7>>0]=HEAP8[$10+7>>0]|0;
-  $vararg_ptr6 = ((($vararg_buffer3)) + 8|0);
-  ;HEAP8[$vararg_ptr6>>0]=HEAP8[$11>>0]|0;HEAP8[$vararg_ptr6+1>>0]=HEAP8[$11+1>>0]|0;HEAP8[$vararg_ptr6+2>>0]=HEAP8[$11+2>>0]|0;HEAP8[$vararg_ptr6+3>>0]=HEAP8[$11+3>>0]|0;HEAP8[$vararg_ptr6+4>>0]=HEAP8[$11+4>>0]|0;HEAP8[$vararg_ptr6+5>>0]=HEAP8[$11+5>>0]|0;HEAP8[$vararg_ptr6+6>>0]=HEAP8[$11+6>>0]|0;HEAP8[$vararg_ptr6+7>>0]=HEAP8[$11+7>>0]|0;
-  _mrb_format($12,$21,56928,$vararg_buffer3);
-  ;HEAP32[$5>>2]=HEAP32[$12>>2]|0;HEAP32[$5+4>>2]=HEAP32[$12+4>>2]|0;
-  $44 = $2;
-  $45 = $2;
-  $46 = (_mrb_class_get($45,69160)|0);
-  ;HEAP32[$$byval_copy>>2]=HEAP32[$5>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$5+4>>2]|0;
-  _mrb_exc_new_str($13,$44,$46,$$byval_copy);
-  ;HEAP32[$4>>2]=HEAP32[$13>>2]|0;HEAP32[$4+4>>2]=HEAP32[$13+4>>2]|0;
-  $47 = HEAP32[$4>>2]|0;
-  $48 = $2;
-  $49 = ((($48)) + 20|0);
-  HEAP32[$49>>2] = $47;
-  STACKTOP = sp;return;
- }
-}
-function _mrb_cptr_value($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $5 = sp;
- $3 = $1;
- $4 = $2;
- $6 = ((($5)) + 4|0);
- HEAP32[$6>>2] = 7;
- $7 = $4;
- HEAP32[$5>>2] = $7;
- ;HEAP32[$0>>2]=HEAP32[$5>>2]|0;HEAP32[$0+4>>2]=HEAP32[$5+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _top_env($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $3 = 0, $4 = 0;
- var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $0;
- $4 = $1;
- $6 = $4;
- $7 = ((($6)) + 20|0);
- $8 = HEAP32[$7>>2]|0;
- $5 = $8;
- $9 = $3;
- $10 = $5;
- $11 = (_is_strict($9,$10)|0);
- $12 = ($11<<24>>24)!=(0);
- if ($12) {
-  $13 = $5;
-  $2 = $13;
-  $26 = $2;
-  STACKTOP = sp;return ($26|0);
- }
- while(1) {
-  $14 = $5;
-  $15 = ((($14)) + 4|0);
-  $16 = HEAP32[$15>>2]|0;
-  $17 = ($16|0)!=(0|0);
-  $18 = $5;
-  if (!($17)) {
-   label = 6;
-   break;
-  }
-  $19 = ((($18)) + 4|0);
-  $20 = HEAP32[$19>>2]|0;
-  $5 = $20;
-  $21 = $3;
-  $22 = $5;
-  $23 = (_is_strict($21,$22)|0);
-  $24 = ($23<<24>>24)!=(0);
-  if ($24) {
-   label = 5;
-   break;
-  }
- }
- if ((label|0) == 5) {
-  $25 = $5;
-  $2 = $25;
-  $26 = $2;
-  STACKTOP = sp;return ($26|0);
- }
- else if ((label|0) == 6) {
-  $2 = $18;
-  $26 = $2;
-  STACKTOP = sp;return ($26|0);
- }
- return (0)|0;
-}
-function _localjump_error($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $$byval_copy2 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0;
- var $26 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, dest = 0, label = 0, sp = 0, src = 0, stop = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 112|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(112|0);
- $$byval_copy2 = sp + 72|0;
- $$byval_copy1 = sp + 64|0;
- $$byval_copy = sp + 56|0;
- $4 = sp + 83|0;
- $5 = sp + 80|0;
- $6 = sp + 40|0;
- $7 = sp + 32|0;
- $8 = sp + 24|0;
- $9 = sp + 16|0;
- $10 = sp + 8|0;
- $11 = sp;
- $2 = $0;
- $3 = $1;
- dest=$4; src=56848; stop=dest+21|0; do { HEAP8[dest>>0]=HEAP8[src>>0]|0; dest=dest+1|0; src=src+1|0; } while ((dest|0) < (stop|0));
- ;HEAP8[$5>>0]=HEAP8[56869>>0]|0;HEAP8[$5+1>>0]=HEAP8[56869+1>>0]|0;HEAP8[$5+2>>0]=HEAP8[56869+2>>0]|0;
- $12 = $2;
- _mrb_str_buf_new($8,$12,19);
- ;HEAP32[$6>>2]=HEAP32[$8>>2]|0;HEAP32[$6+4>>2]=HEAP32[$8+4>>2]|0;
- $13 = $2;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$6>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$6+4>>2]|0;
- _mrb_str_cat($9,$13,$$byval_copy,56872,11);
- $14 = $2;
- $15 = $3;
- $16 = (($4) + (($15*7)|0)|0);
- $17 = $3;
- $18 = (($5) + ($17)|0);
- $19 = HEAP8[$18>>0]|0;
- $20 = $19 << 24 >> 24;
- ;HEAP32[$$byval_copy1>>2]=HEAP32[$6>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$6+4>>2]|0;
- _mrb_str_cat($10,$14,$$byval_copy1,$16,$20);
- $21 = $2;
- $22 = $2;
- $23 = (_mrb_class_get($22,56833)|0);
- ;HEAP32[$$byval_copy2>>2]=HEAP32[$6>>2]|0;HEAP32[$$byval_copy2+4>>2]=HEAP32[$6+4>>2]|0;
- _mrb_exc_new_str($11,$21,$23,$$byval_copy2);
- ;HEAP32[$7>>2]=HEAP32[$11>>2]|0;HEAP32[$7+4>>2]=HEAP32[$11+4>>2]|0;
- $24 = HEAP32[$7>>2]|0;
- $25 = $2;
- $26 = ((($25)) + 20|0);
- HEAP32[$26>>2] = $24;
- STACKTOP = sp;return;
-}
-function _mrb_int_add_overflow_434($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$arith = 0, $$ispos = 0, $$negcheck = 0, $$negtemp = 0, $$poscheck = 0, $$postemp = 0, $$select = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $3 = 0, $4 = 0, $5 = 0;
- var $6 = 0, $7 = 0, $8 = 0, $9 = 0, $or$cond = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $3 = $0;
- $4 = $1;
- $5 = $2;
- $8 = $3;
- $9 = $4;
- $$arith = (($8) + ($9))|0;
- $$postemp = (($8) + -2147483648)|0;
- $$negtemp = (($8) + 2147483647)|0;
- $$poscheck = ($$arith|0)<($$postemp|0);
- $$negcheck = ($$arith|0)>($$negtemp|0);
- $$ispos = ($8|0)>=(0);
- $$select = $$ispos ? $$poscheck : $$negcheck;
- $7 = $$arith;
- $10 = $7;
- $11 = ($10|0)>(2147483647);
- $or$cond = $$select | $11;
- if ($or$cond) {
-  $15 = 1;
- } else {
-  $12 = $7;
-  $13 = ($12|0)<(-2147483648);
-  $15 = $13;
- }
- $14 = $15&1;
- $16 = $14&255;
- $6 = $16;
- $17 = $7;
- $18 = $5;
- HEAP32[$18>>2] = $17;
- $19 = $6;
- STACKTOP = sp;return ($19|0);
-}
-function _mrb_int_sub_overflow_435($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$arith = 0, $$ispos = 0, $$negcheck = 0, $$negtemp = 0, $$poscheck = 0, $$postemp = 0, $$select = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $3 = 0, $4 = 0, $5 = 0;
- var $6 = 0, $7 = 0, $8 = 0, $9 = 0, $or$cond = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $3 = $0;
- $4 = $1;
- $5 = $2;
- $8 = $3;
- $9 = $4;
- $$arith = (($8) - ($9))|0;
- $$postemp = (($8) + -2147483647)|0;
- $$negtemp = (($8) + -2147483648)|0;
- $$poscheck = ($$arith|0)<($$postemp|0);
- $$negcheck = ($$arith|0)>($$negtemp|0);
- $$ispos = ($8|0)>=(0);
- $$select = $$ispos ? $$poscheck : $$negcheck;
- $7 = $$arith;
- $10 = $7;
- $11 = ($10|0)>(2147483647);
- $or$cond = $$select | $11;
- if ($or$cond) {
-  $15 = 1;
- } else {
-  $12 = $7;
-  $13 = ($12|0)<(-2147483648);
-  $15 = $13;
- }
- $14 = $15&1;
- $16 = $14&255;
- $6 = $16;
- $17 = $7;
- $18 = $5;
- HEAP32[$18>>2] = $17;
- $19 = $6;
- STACKTOP = sp;return ($19|0);
-}
-function _is_strict($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;
- var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $0;
- $4 = $1;
- $6 = $4;
- $7 = ((($6)) + 20|0);
- $8 = HEAP32[$7>>2]|0;
- $5 = $8;
- $9 = $4;
- $10 = ((($9)) + 20|0);
- $11 = HEAP32[$10>>2]|0;
- $12 = ($11|0)>=(0);
- if ($12) {
-  $13 = $3;
-  $14 = ((($13)) + 12|0);
-  $15 = HEAP32[$14>>2]|0;
-  $16 = ((($15)) + 20|0);
-  $17 = HEAP32[$16>>2]|0;
-  $18 = $5;
-  $19 = (($17) + (($18*48)|0)|0);
-  $20 = ((($19)) + 4|0);
-  $21 = HEAP32[$20>>2]|0;
-  $22 = ($21|0)!=(0|0);
-  if ($22) {
-   $23 = $3;
-   $24 = ((($23)) + 12|0);
-   $25 = HEAP32[$24>>2]|0;
-   $26 = ((($25)) + 20|0);
-   $27 = HEAP32[$26>>2]|0;
-   $28 = $5;
-   $29 = (($27) + (($28*48)|0)|0);
-   $30 = ((($29)) + 4|0);
-   $31 = HEAP32[$30>>2]|0;
-   $32 = HEAP32[$31>>2]|0;
-   $33 = $32 >>> 11;
-   $34 = $33 & 256;
-   $35 = ($34|0)!=(0);
-   if ($35) {
-    $2 = 1;
-    $36 = $2;
-    STACKTOP = sp;return ($36|0);
-   }
-  }
- }
- $2 = 0;
- $36 = $2;
- STACKTOP = sp;return ($36|0);
-}
-function _stack_extend_alloc($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;
- var $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0;
- var $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0;
- var $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0;
- var $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $3 = $0;
- $4 = $1;
- $5 = $2;
- $9 = $3;
- $10 = ((($9)) + 12|0);
- $11 = HEAP32[$10>>2]|0;
- $12 = ((($11)) + 8|0);
- $13 = HEAP32[$12>>2]|0;
- $6 = $13;
- $14 = $3;
- $15 = ((($14)) + 12|0);
- $16 = HEAP32[$15>>2]|0;
- $17 = ((($16)) + 12|0);
- $18 = HEAP32[$17>>2]|0;
- $19 = $3;
- $20 = ((($19)) + 12|0);
- $21 = HEAP32[$20>>2]|0;
- $22 = ((($21)) + 8|0);
- $23 = HEAP32[$22>>2]|0;
- $24 = $18;
- $25 = $23;
- $26 = (($24) - ($25))|0;
- $27 = (($26|0) / 8)&-1;
- $7 = $27;
- $28 = $3;
- $29 = ((($28)) + 12|0);
- $30 = HEAP32[$29>>2]|0;
- $31 = ((($30)) + 4|0);
- $32 = HEAP32[$31>>2]|0;
- $33 = $3;
- $34 = ((($33)) + 12|0);
- $35 = HEAP32[$34>>2]|0;
- $36 = ((($35)) + 8|0);
- $37 = HEAP32[$36>>2]|0;
- $38 = $32;
- $39 = $37;
- $40 = (($38) - ($39))|0;
- $41 = (($40|0) / 8)&-1;
- $8 = $41;
- $42 = $4;
- $43 = ($42|0)<=(128);
- if ($43) {
-  $44 = $7;
-  $45 = (($44) + 128)|0;
-  $7 = $45;
- } else {
-  $46 = $4;
-  $47 = $7;
-  $48 = (($47) + ($46))|0;
-  $7 = $48;
- }
- $49 = $3;
- $50 = $3;
- $51 = ((($50)) + 12|0);
- $52 = HEAP32[$51>>2]|0;
- $53 = ((($52)) + 8|0);
- $54 = HEAP32[$53>>2]|0;
- $55 = $7;
- $56 = $55<<3;
- $57 = (_mrb_realloc($49,$54,$56)|0);
- $58 = $3;
- $59 = ((($58)) + 12|0);
- $60 = HEAP32[$59>>2]|0;
- $61 = ((($60)) + 8|0);
- HEAP32[$61>>2] = $57;
- $62 = $3;
- $63 = ((($62)) + 12|0);
- $64 = HEAP32[$63>>2]|0;
- $65 = ((($64)) + 8|0);
- $66 = HEAP32[$65>>2]|0;
- $67 = $8;
- $68 = (($66) + ($67<<3)|0);
- $69 = $3;
- $70 = ((($69)) + 12|0);
- $71 = HEAP32[$70>>2]|0;
- $72 = ((($71)) + 4|0);
- HEAP32[$72>>2] = $68;
- $73 = $3;
- $74 = ((($73)) + 12|0);
- $75 = HEAP32[$74>>2]|0;
- $76 = ((($75)) + 8|0);
- $77 = HEAP32[$76>>2]|0;
- $78 = $7;
- $79 = (($77) + ($78<<3)|0);
- $80 = $3;
- $81 = ((($80)) + 12|0);
- $82 = HEAP32[$81>>2]|0;
- $83 = ((($82)) + 12|0);
- HEAP32[$83>>2] = $79;
- $84 = $3;
- $85 = $6;
- $86 = $3;
- $87 = ((($86)) + 12|0);
- $88 = HEAP32[$87>>2]|0;
- $89 = ((($88)) + 8|0);
- $90 = HEAP32[$89>>2]|0;
- _envadjust($84,$85,$90);
- $91 = $7;
- $92 = ($91|0)>(262016);
- if ($92) {
-  $93 = $3;
-  $94 = $4;
-  $95 = $5;
-  _init_new_stack_space($93,$94,$95);
-  $96 = $3;
-  $97 = $3;
-  $98 = (_mrb_class_get($97,68052)|0);
-  _mrb_raise($96,$98,56966);
-  // unreachable;
- } else {
-  STACKTOP = sp;return;
- }
-}
-function _init_new_stack_space($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $0;
- $4 = $1;
- $5 = $2;
- $6 = $4;
- $7 = $5;
- $8 = ($6|0)>($7|0);
- if (!($8)) {
-  STACKTOP = sp;return;
- }
- $9 = $3;
- $10 = ((($9)) + 12|0);
- $11 = HEAP32[$10>>2]|0;
- $12 = ((($11)) + 4|0);
- $13 = HEAP32[$12>>2]|0;
- $14 = $5;
- $15 = (($13) + ($14<<3)|0);
- $16 = $4;
- $17 = $5;
- $18 = (($16) - ($17))|0;
- _stack_clear($15,$18);
- STACKTOP = sp;return;
-}
-function _stack_clear($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- while(1) {
-  $4 = $3;
-  $5 = (($4) + -1)|0;
-  $3 = $5;
-  $6 = ($4>>>0)>(0);
-  if (!($6)) {
-   break;
-  }
-  $7 = $2;
-  $8 = ((($7)) + 8|0);
-  $2 = $8;
-  ;HEAP32[$7>>2]=HEAP32[73452>>2]|0;HEAP32[$7+4>>2]=HEAP32[73452+4>>2]|0;
- }
- STACKTOP = sp;return;
-}
-function _envadjust($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;
- var $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0;
- var $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $3 = $0;
- $4 = $1;
- $5 = $2;
- $9 = $3;
- $10 = ((($9)) + 12|0);
- $11 = HEAP32[$10>>2]|0;
- $12 = ((($11)) + 20|0);
- $13 = HEAP32[$12>>2]|0;
- $6 = $13;
- $14 = $5;
- $15 = $4;
- $16 = ($14|0)==($15|0);
- if ($16) {
-  STACKTOP = sp;return;
- }
- while(1) {
-  $17 = $6;
-  $18 = $3;
-  $19 = ((($18)) + 12|0);
-  $20 = HEAP32[$19>>2]|0;
-  $21 = ((($20)) + 16|0);
-  $22 = HEAP32[$21>>2]|0;
-  $23 = ($17>>>0)<=($22>>>0);
-  if (!($23)) {
-   break;
-  }
-  $24 = $6;
-  $25 = ((($24)) + 24|0);
-  $26 = HEAP32[$25>>2]|0;
-  $7 = $26;
-  $27 = $7;
-  $28 = ($27|0)!=(0|0);
-  if ($28) {
-   $29 = $7;
-   $30 = ((($29)) + 20|0);
-   $31 = HEAP32[$30>>2]|0;
-   $32 = ($31|0)>=(0);
-   if ($32) {
-    $33 = $7;
-    $34 = ((($33)) + 12|0);
-    $35 = HEAP32[$34>>2]|0;
-    $36 = $4;
-    $37 = $35;
-    $38 = $36;
-    $39 = (($37) - ($38))|0;
-    $40 = (($39|0) / 8)&-1;
-    $8 = $40;
-    $41 = $5;
-    $42 = $8;
-    $43 = (($41) + ($42<<3)|0);
-    $44 = $7;
-    $45 = ((($44)) + 12|0);
-    HEAP32[$45>>2] = $43;
-   }
-  }
-  $46 = $5;
-  $47 = $6;
-  $48 = ((($47)) + 8|0);
-  $49 = HEAP32[$48>>2]|0;
-  $50 = $4;
-  $51 = $49;
-  $52 = $50;
-  $53 = (($51) - ($52))|0;
-  $54 = (($53|0) / 8)&-1;
-  $55 = (($46) + ($54<<3)|0);
-  $56 = $6;
-  $57 = ((($56)) + 8|0);
-  HEAP32[$57>>2] = $55;
-  $58 = $6;
-  $59 = ((($58)) + 48|0);
-  $6 = $59;
- }
- STACKTOP = sp;return;
-}
-function _mrb_f_send($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $$byval_copy4 = 0, $$byval_copy5 = 0, $$byval_copy6 = 0, $$byval_copy7 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0;
- var $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0;
- var $131 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0;
- var $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0;
- var $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0;
- var $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0;
- var $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $vararg_buffer = 0, $vararg_ptr1 = 0, $vararg_ptr2 = 0, $vararg_ptr3 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 112|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(112|0);
- $$byval_copy7 = sp + 104|0;
- $$byval_copy6 = sp + 96|0;
- $$byval_copy5 = sp + 88|0;
- $$byval_copy4 = sp + 80|0;
- $$byval_copy = sp + 72|0;
- $vararg_buffer = sp;
- $4 = sp + 64|0;
- $5 = sp + 56|0;
- $6 = sp + 52|0;
- $8 = sp + 44|0;
- $12 = sp + 28|0;
- $14 = sp + 16|0;
- $3 = $1;
- $15 = $3;
- HEAP32[$vararg_buffer>>2] = $4;
- $vararg_ptr1 = ((($vararg_buffer)) + 4|0);
- HEAP32[$vararg_ptr1>>2] = $6;
- $vararg_ptr2 = ((($vararg_buffer)) + 8|0);
- HEAP32[$vararg_ptr2>>2] = $8;
- $vararg_ptr3 = ((($vararg_buffer)) + 12|0);
- HEAP32[$vararg_ptr3>>2] = $5;
- (_mrb_get_args($15,57012,$vararg_buffer)|0);
- $16 = $3;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
- $17 = (_mrb_class_423($16,$$byval_copy)|0);
- HEAP32[$12>>2] = $17;
- $18 = $3;
- $19 = HEAP32[$4>>2]|0;
- $20 = (_mrb_method_search_vm($18,$12,$19)|0);
- $11 = $20;
- $21 = $11;
- $22 = ($21|0)!=(0|0);
- $23 = $3;
- if (!($22)) {
-  $24 = HEAP32[$4>>2]|0;
-  $25 = HEAP32[$8>>2]|0;
-  $26 = HEAP32[$6>>2]|0;
-  ;HEAP32[$$byval_copy4>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy4+4>>2]=HEAP32[$2+4>>2]|0;
-  ;HEAP32[$$byval_copy5>>2]=HEAP32[$5>>2]|0;HEAP32[$$byval_copy5+4>>2]=HEAP32[$5+4>>2]|0;
-  _mrb_funcall_with_block($0,$23,$$byval_copy4,$24,$25,$26,$$byval_copy5);
-  STACKTOP = sp;return;
- }
- $27 = ((($23)) + 12|0);
- $28 = HEAP32[$27>>2]|0;
- $29 = ((($28)) + 16|0);
- $30 = HEAP32[$29>>2]|0;
- $13 = $30;
- $31 = HEAP32[$4>>2]|0;
- $32 = $13;
- HEAP32[$32>>2] = $31;
- $33 = HEAP32[$12>>2]|0;
- $34 = $13;
- $35 = ((($34)) + 44|0);
- HEAP32[$35>>2] = $33;
- $36 = $11;
- $37 = $13;
- $38 = ((($37)) + 4|0);
- HEAP32[$38>>2] = $36;
- $39 = $3;
- $40 = ((($39)) + 12|0);
- $41 = HEAP32[$40>>2]|0;
- $42 = ((($41)) + 4|0);
- $43 = HEAP32[$42>>2]|0;
- $44 = ((($43)) + 8|0);
- $7 = $44;
- $45 = $13;
- $46 = ((($45)) + 36|0);
- $47 = HEAP32[$46>>2]|0;
- $48 = ($47|0)>=(0);
- if ($48) {
-  $9 = 0;
-  $49 = $13;
-  $50 = ((($49)) + 36|0);
-  $51 = HEAP32[$50>>2]|0;
-  $10 = $51;
-  while(1) {
-   $52 = $9;
-   $53 = $10;
-   $54 = ($52|0)<($53|0);
-   if (!($54)) {
-    break;
-   }
-   $55 = $7;
-   $56 = $9;
-   $57 = (($55) + ($56<<3)|0);
-   $58 = $7;
-   $59 = $9;
-   $60 = (($59) + 1)|0;
-   $61 = (($58) + ($60<<3)|0);
-   ;HEAP32[$57>>2]=HEAP32[$61>>2]|0;HEAP32[$57+4>>2]=HEAP32[$61+4>>2]|0;
-   $62 = $9;
-   $63 = (($62) + 1)|0;
-   $9 = $63;
-  }
-  $64 = $13;
-  $65 = ((($64)) + 36|0);
-  $66 = HEAP32[$65>>2]|0;
-  $67 = (($66) + -1)|0;
-  HEAP32[$65>>2] = $67;
- } else {
-  $68 = $3;
-  $69 = $7;
-  ;HEAP32[$$byval_copy6>>2]=HEAP32[$69>>2]|0;HEAP32[$$byval_copy6+4>>2]=HEAP32[$69+4>>2]|0;
-  _mrb_ary_shift($14,$68,$$byval_copy6);
- }
- $70 = $11;
- $71 = HEAP32[$70>>2]|0;
- $72 = $71 >>> 11;
- $73 = $72 & 128;
- $74 = ($73|0)!=(0);
- if ($74) {
-  $75 = $11;
-  $76 = ((($75)) + 12|0);
-  $77 = HEAP32[$76>>2]|0;
-  $78 = $3;
-  ;HEAP32[$$byval_copy7>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy7+4>>2]=HEAP32[$2+4>>2]|0;
-  FUNCTION_TABLE_viii[$77 & 511]($0,$78,$$byval_copy7);
-  STACKTOP = sp;return;
- }
- $79 = $13;
- $80 = ((($79)) + 36|0);
- $81 = HEAP32[$80>>2]|0;
- $82 = ($81|0)<(0);
- $83 = $3;
- $84 = $11;
- $85 = ((($84)) + 12|0);
- $86 = HEAP32[$85>>2]|0;
- $87 = ((($86)) + 2|0);
- $88 = HEAP16[$87>>1]|0;
- $89 = $88&65535;
- if ($82) {
-  $90 = ($89|0)<(3);
-  if ($90) {
-   $97 = 3;
-  } else {
-   $91 = $11;
-   $92 = ((($91)) + 12|0);
-   $93 = HEAP32[$92>>2]|0;
-   $94 = ((($93)) + 2|0);
-   $95 = HEAP16[$94>>1]|0;
-   $96 = $95&65535;
-   $97 = $96;
-  }
-  _stack_extend($83,$97,3);
- } else {
-  $98 = $13;
-  $99 = ((($98)) + 36|0);
-  $100 = HEAP32[$99>>2]|0;
-  $101 = (($100) + 2)|0;
-  _stack_extend($83,$89,$101);
- }
- $102 = $11;
- $103 = ((($102)) + 12|0);
- $104 = HEAP32[$103>>2]|0;
- $105 = ((($104)) + 2|0);
- $106 = HEAP16[$105>>1]|0;
- $107 = $106&65535;
- $108 = $13;
- $109 = ((($108)) + 12|0);
- HEAP32[$109>>2] = $107;
- $110 = $3;
- $111 = (_cipush($110)|0);
- $13 = $111;
- $112 = $13;
- $113 = ((($112)) + 12|0);
- HEAP32[$113>>2] = 0;
- $114 = $13;
- $115 = ((($114)) + 44|0);
- HEAP32[$115>>2] = 0;
- $116 = $11;
- $117 = ((($116)) + 12|0);
- $118 = HEAP32[$117>>2]|0;
- $119 = ((($118)) + 8|0);
- $120 = HEAP32[$119>>2]|0;
- $121 = $13;
- $122 = ((($121)) + 28|0);
- HEAP32[$122>>2] = $120;
- $123 = $3;
- $124 = ((($123)) + 12|0);
- $125 = HEAP32[$124>>2]|0;
- $126 = ((($125)) + 4|0);
- $127 = HEAP32[$126>>2]|0;
- $128 = $13;
- $129 = ((($128)) + 8|0);
- HEAP32[$129>>2] = $127;
- $130 = $13;
- $131 = ((($130)) + 40|0);
- HEAP32[$131>>2] = 0;
- ;HEAP32[$0>>2]=HEAP32[$2>>2]|0;HEAP32[$0+4>>2]=HEAP32[$2+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_mod_module_eval($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $$byval_copy2 = 0, $10 = 0, $11 = 0, $12 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, $vararg_ptr1 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);
- $$byval_copy2 = sp + 40|0;
- $$byval_copy = sp + 32|0;
- $vararg_buffer = sp;
- $4 = sp + 16|0;
- $5 = sp + 8|0;
- $3 = $1;
- $6 = $3;
- HEAP32[$vararg_buffer>>2] = $4;
- $vararg_ptr1 = ((($vararg_buffer)) + 4|0);
- HEAP32[$vararg_ptr1>>2] = $5;
- $7 = (_mrb_get_args($6,57016,$vararg_buffer)|0);
- $8 = ($7|0)==(1);
- $9 = $3;
- if ($8) {
-  $10 = $3;
-  $11 = (_mrb_class_get($10,65108)|0);
-  _mrb_raise($9,$11,57020);
-  // unreachable;
- } else {
-  $12 = HEAP32[$2>>2]|0;
-  ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
-  ;HEAP32[$$byval_copy2>>2]=HEAP32[$5>>2]|0;HEAP32[$$byval_copy2+4>>2]=HEAP32[$5+4>>2]|0;
-  _eval_under($0,$9,$$byval_copy,$$byval_copy2,$12);
-  STACKTOP = sp;return;
- }
-}
-function _eval_under($0,$1,$2,$3,$4) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- $4 = $4|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $$byval_copy2 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0;
- var $27 = 0, $28 = 0, $29 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0;
- var $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0;
- var $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);
- $$byval_copy2 = sp + 32|0;
- $$byval_copy1 = sp + 24|0;
- $$byval_copy = sp + 16|0;
- $5 = $1;
- $6 = $4;
- $9 = ((($3)) + 4|0);
- $10 = HEAP32[$9>>2]|0;
- $11 = ($10|0)==(0);
- if ($11) {
-  $12 = HEAP32[$3>>2]|0;
-  $13 = ($12|0)!=(0);
-  if (!($13)) {
-   $14 = $5;
-   $15 = $5;
-   $16 = (_mrb_class_get($15,69160)|0);
-   _mrb_raise($14,$16,68709);
-   // unreachable;
-  }
- }
- $17 = $5;
- $18 = ((($17)) + 12|0);
- $19 = HEAP32[$18>>2]|0;
- $20 = ((($19)) + 16|0);
- $21 = HEAP32[$20>>2]|0;
- $8 = $21;
- $22 = $8;
- $23 = ((($22)) + 40|0);
- $24 = HEAP32[$23>>2]|0;
- $25 = ($24|0)==(-2);
- if ($25) {
-  $26 = $5;
-  $27 = $6;
-  ;HEAP32[$$byval_copy>>2]=HEAP32[$3>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$3+4>>2]|0;
-  ;HEAP32[$$byval_copy1>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$2+4>>2]|0;
-  _mrb_yield_with_class($0,$26,$$byval_copy,0,0,$$byval_copy1,$27);
-  STACKTOP = sp;return;
- }
- $28 = $6;
- $29 = $8;
- $30 = ((($29)) + 44|0);
- HEAP32[$30>>2] = $28;
- $31 = HEAP32[$3>>2]|0;
- $7 = $31;
- $32 = $7;
- $33 = $8;
- $34 = ((($33)) + 4|0);
- HEAP32[$34>>2] = $32;
- $35 = $7;
- $36 = HEAP32[$35>>2]|0;
- $37 = $36 >>> 11;
- $38 = $37 & 128;
- $39 = ($38|0)!=(0);
- $40 = $7;
- $41 = ((($40)) + 12|0);
- if ($39) {
-  $42 = HEAP32[$41>>2]|0;
-  $43 = $5;
-  ;HEAP32[$$byval_copy2>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy2+4>>2]=HEAP32[$2+4>>2]|0;
-  FUNCTION_TABLE_viii[$42 & 511]($0,$43,$$byval_copy2);
-  STACKTOP = sp;return;
- } else {
-  $44 = HEAP32[$41>>2]|0;
-  $45 = ((($44)) + 2|0);
-  $46 = HEAP16[$45>>1]|0;
-  $47 = $46&65535;
-  $48 = $8;
-  $49 = ((($48)) + 12|0);
-  HEAP32[$49>>2] = $47;
-  $50 = $5;
-  $51 = (_cipush($50)|0);
-  $8 = $51;
-  $52 = $8;
-  $53 = ((($52)) + 12|0);
-  HEAP32[$53>>2] = 0;
-  $54 = $8;
-  $55 = ((($54)) + 44|0);
-  HEAP32[$55>>2] = 0;
-  $56 = $7;
-  $57 = ((($56)) + 12|0);
-  $58 = HEAP32[$57>>2]|0;
-  $59 = ((($58)) + 8|0);
-  $60 = HEAP32[$59>>2]|0;
-  $61 = $8;
-  $62 = ((($61)) + 28|0);
-  HEAP32[$62>>2] = $60;
-  $63 = $5;
-  $64 = ((($63)) + 12|0);
-  $65 = HEAP32[$64>>2]|0;
-  $66 = ((($65)) + 4|0);
-  $67 = HEAP32[$66>>2]|0;
-  $68 = $8;
-  $69 = ((($68)) + 8|0);
-  HEAP32[$69>>2] = $67;
-  $70 = $8;
-  $71 = ((($70)) + 40|0);
-  HEAP32[$71>>2] = 0;
-  ;HEAP32[$0>>2]=HEAP32[$2>>2]|0;HEAP32[$0+4>>2]=HEAP32[$2+4>>2]|0;
-  STACKTOP = sp;return;
- }
-}
-function _mrb_yield_with_class($0,$1,$2,$3,$4,$5,$6) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- $4 = $4|0;
- $5 = $5|0;
- $6 = $6|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0;
- var $116 = 0, $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0;
- var $134 = 0, $135 = 0, $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0;
- var $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $40 = 0;
- var $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $60 = 0;
- var $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0;
- var $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0;
- var $98 = 0, $99 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 80|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(80|0);
- $$byval_copy1 = sp + 72|0;
- $$byval_copy = sp + 64|0;
- $15 = sp + 24|0;
- $16 = sp + 16|0;
- $17 = sp + 8|0;
- $18 = sp;
- $7 = $1;
- $8 = $3;
- $9 = $4;
- $10 = $6;
- $19 = $7;
- $20 = ((($19)) + 12|0);
- $21 = HEAP32[$20>>2]|0;
- $22 = ((($21)) + 16|0);
- $23 = HEAP32[$22>>2]|0;
- $24 = HEAP32[$23>>2]|0;
- $12 = $24;
- $25 = $7;
- $26 = ((($25)) + 12|0);
- $27 = HEAP32[$26>>2]|0;
- $28 = ((($27)) + 16|0);
- $29 = HEAP32[$28>>2]|0;
- $30 = ((($29)) + 12|0);
- $31 = HEAP32[$30>>2]|0;
- $14 = $31;
- $32 = ((($2)) + 4|0);
- $33 = HEAP32[$32>>2]|0;
- $34 = ($33|0)==(0);
- if ($34) {
-  $35 = HEAP32[$2>>2]|0;
-  $36 = ($35|0)!=(0);
-  if (!($36)) {
-   $37 = $7;
-   $38 = $7;
-   $39 = (_mrb_class_get($38,69160)|0);
-   _mrb_raise($37,$39,68709);
-   // unreachable;
-  }
- }
- $40 = HEAP32[$2>>2]|0;
- $11 = $40;
- $41 = $7;
- $42 = (_cipush($41)|0);
- $13 = $42;
- $43 = $12;
- $44 = $13;
- HEAP32[$44>>2] = $43;
- $45 = $11;
- $46 = $13;
- $47 = ((($46)) + 4|0);
- HEAP32[$47>>2] = $45;
- $48 = $7;
- $49 = ((($48)) + 12|0);
- $50 = HEAP32[$49>>2]|0;
- $51 = ((($50)) + 4|0);
- $52 = HEAP32[$51>>2]|0;
- $53 = $13;
- $54 = ((($53)) + 8|0);
- HEAP32[$54>>2] = $52;
- $55 = $8;
- $56 = $13;
- $57 = ((($56)) + 36|0);
- HEAP32[$57>>2] = $55;
- $58 = $10;
- $59 = $13;
- $60 = ((($59)) + 44|0);
- HEAP32[$60>>2] = $58;
- $61 = $13;
- $62 = ((($61)) + 40|0);
- HEAP32[$62>>2] = -1;
- $63 = $7;
- $64 = ((($63)) + 12|0);
- $65 = HEAP32[$64>>2]|0;
- $66 = ((($65)) + 4|0);
- $67 = HEAP32[$66>>2]|0;
- $68 = $14;
- $69 = (($67) + ($68<<3)|0);
- $70 = $7;
- $71 = ((($70)) + 12|0);
- $72 = HEAP32[$71>>2]|0;
- $73 = ((($72)) + 4|0);
- HEAP32[$73>>2] = $69;
- $74 = $11;
- $75 = HEAP32[$74>>2]|0;
- $76 = $75 >>> 11;
- $77 = $76 & 128;
- $78 = ($77|0)!=(0);
- if ($78) {
-  $79 = $8;
-  $80 = (($79) + 2)|0;
-  $81 = $13;
-  $82 = ((($81)) + 12|0);
-  HEAP32[$82>>2] = $80;
-  $83 = $7;
-  $84 = $13;
-  $85 = ((($84)) + 12|0);
-  $86 = HEAP32[$85>>2]|0;
-  _stack_extend($83,$86,0);
- } else {
-  $87 = $11;
-  $88 = ((($87)) + 12|0);
-  $89 = HEAP32[$88>>2]|0;
-  $90 = ((($89)) + 2|0);
-  $91 = HEAP16[$90>>1]|0;
-  $92 = $91&65535;
-  $93 = $13;
-  $94 = ((($93)) + 12|0);
-  HEAP32[$94>>2] = $92;
-  $95 = $7;
-  $96 = $13;
-  $97 = ((($96)) + 12|0);
-  $98 = HEAP32[$97>>2]|0;
-  $99 = $8;
-  $100 = (($99) + 2)|0;
-  _stack_extend($95,$98,$100);
- }
- $101 = $7;
- $102 = ((($101)) + 12|0);
- $103 = HEAP32[$102>>2]|0;
- $104 = ((($103)) + 4|0);
- $105 = HEAP32[$104>>2]|0;
- ;HEAP32[$105>>2]=HEAP32[$5>>2]|0;HEAP32[$105+4>>2]=HEAP32[$5+4>>2]|0;
- $106 = $8;
- $107 = ($106|0)>(0);
- if ($107) {
-  $108 = $7;
-  $109 = ((($108)) + 12|0);
-  $110 = HEAP32[$109>>2]|0;
-  $111 = ((($110)) + 4|0);
-  $112 = HEAP32[$111>>2]|0;
-  $113 = ((($112)) + 8|0);
-  $114 = $9;
-  $115 = $8;
-  _stack_copy($113,$114,$115);
- }
- $116 = $7;
- $117 = ((($116)) + 12|0);
- $118 = HEAP32[$117>>2]|0;
- $119 = ((($118)) + 4|0);
- $120 = HEAP32[$119>>2]|0;
- $121 = $8;
- $122 = (($121) + 1)|0;
- $123 = (($120) + ($122<<3)|0);
- _mrb_nil_value_419($16);
- ;HEAP32[$123>>2]=HEAP32[$16>>2]|0;HEAP32[$123+4>>2]=HEAP32[$16+4>>2]|0;
- $124 = $11;
- $125 = HEAP32[$124>>2]|0;
- $126 = $125 >>> 11;
- $127 = $126 & 128;
- $128 = ($127|0)!=(0);
- if ($128) {
-  $129 = $11;
-  $130 = ((($129)) + 12|0);
-  $131 = HEAP32[$130>>2]|0;
-  $132 = $7;
-  ;HEAP32[$$byval_copy>>2]=HEAP32[$5>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$5+4>>2]|0;
-  FUNCTION_TABLE_viii[$131 & 511]($17,$132,$$byval_copy);
-  ;HEAP32[$15>>2]=HEAP32[$17>>2]|0;HEAP32[$15+4>>2]=HEAP32[$17+4>>2]|0;
-  $133 = $7;
-  $134 = ((($133)) + 12|0);
-  $135 = HEAP32[$134>>2]|0;
-  $136 = ((($135)) + 16|0);
-  $137 = HEAP32[$136>>2]|0;
-  $138 = ((($137)) + 8|0);
-  $139 = HEAP32[$138>>2]|0;
-  $140 = $7;
-  $141 = ((($140)) + 12|0);
-  $142 = HEAP32[$141>>2]|0;
-  $143 = ((($142)) + 4|0);
-  HEAP32[$143>>2] = $139;
-  $144 = $7;
-  _cipop($144);
-  ;HEAP32[$0>>2]=HEAP32[$15>>2]|0;HEAP32[$0+4>>2]=HEAP32[$15+4>>2]|0;
-  STACKTOP = sp;return;
- } else {
-  $145 = $7;
-  $146 = $11;
-  ;HEAP32[$$byval_copy1>>2]=HEAP32[$5>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$5+4>>2]|0;
-  _mrb_run($18,$145,$146,$$byval_copy1);
-  ;HEAP32[$15>>2]=HEAP32[$18>>2]|0;HEAP32[$15+4>>2]=HEAP32[$18+4>>2]|0;
-  ;HEAP32[$0>>2]=HEAP32[$15>>2]|0;HEAP32[$0+4>>2]=HEAP32[$15+4>>2]|0;
-  STACKTOP = sp;return;
- }
-}
-function _mrb_obj_instance_eval($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $$byval_copy2 = 0, $$byval_copy3 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0;
- var $9 = 0, $vararg_buffer = 0, $vararg_ptr1 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 80|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(80|0);
- $$byval_copy3 = sp + 72|0;
- $$byval_copy2 = sp + 64|0;
- $$byval_copy = sp + 56|0;
- $vararg_buffer = sp;
- $4 = sp + 40|0;
- $5 = sp + 32|0;
- $6 = sp + 24|0;
- $8 = sp + 8|0;
- $3 = $1;
- $9 = $3;
- HEAP32[$vararg_buffer>>2] = $4;
- $vararg_ptr1 = ((($vararg_buffer)) + 4|0);
- HEAP32[$vararg_ptr1>>2] = $5;
- $10 = (_mrb_get_args($9,57016,$vararg_buffer)|0);
- $11 = ($10|0)==(1);
- if ($11) {
-  $12 = $3;
-  $13 = $3;
-  $14 = (_mrb_class_get($13,65108)|0);
-  _mrb_raise($12,$14,57071);
-  // unreachable;
- }
- $15 = ((($2)) + 4|0);
- $16 = HEAP32[$15>>2]|0;
- switch ($16|0) {
- case 6: case 3: case 4:  {
-  $7 = 0;
-  break;
- }
- default: {
-  $17 = $3;
-  ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
-  _mrb_singleton_class($8,$17,$$byval_copy);
-  ;HEAP32[$6>>2]=HEAP32[$8>>2]|0;HEAP32[$6+4>>2]=HEAP32[$8+4>>2]|0;
-  $18 = HEAP32[$6>>2]|0;
-  $7 = $18;
- }
- }
- $19 = $3;
- $20 = $7;
- ;HEAP32[$$byval_copy2>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy2+4>>2]=HEAP32[$2+4>>2]|0;
- ;HEAP32[$$byval_copy3>>2]=HEAP32[$5>>2]|0;HEAP32[$$byval_copy3+4>>2]=HEAP32[$5+4>>2]|0;
- _eval_under($0,$19,$$byval_copy2,$$byval_copy3,$20);
- STACKTOP = sp;return;
-}
-function _mrb_toplevel_run_keep($0,$1,$2,$3) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;
- var $28 = 0, $29 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0;
- var $47 = 0, $48 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);
- $$byval_copy1 = sp + 56|0;
- $$byval_copy = sp + 48|0;
- $8 = sp + 24|0;
- $9 = sp + 16|0;
- $10 = sp + 8|0;
- $11 = sp;
- $4 = $1;
- $5 = $2;
- $6 = $3;
- $12 = $4;
- $13 = ((($12)) + 12|0);
- $14 = HEAP32[$13>>2]|0;
- $15 = ((($14)) + 20|0);
- $16 = HEAP32[$15>>2]|0;
- $17 = ($16|0)!=(0|0);
- if ($17) {
-  $18 = $4;
-  $19 = ((($18)) + 12|0);
-  $20 = HEAP32[$19>>2]|0;
-  $21 = ((($20)) + 16|0);
-  $22 = HEAP32[$21>>2]|0;
-  $23 = $4;
-  $24 = ((($23)) + 12|0);
-  $25 = HEAP32[$24>>2]|0;
-  $26 = ((($25)) + 20|0);
-  $27 = HEAP32[$26>>2]|0;
-  $28 = ($22|0)==($27|0);
-  if (!($28)) {
-   $33 = $4;
-   $34 = (_cipush($33)|0);
-   $7 = $34;
-   $35 = $7;
-   $36 = ((($35)) + 12|0);
-   HEAP32[$36>>2] = 1;
-   $37 = $7;
-   $38 = ((($37)) + 40|0);
-   HEAP32[$38>>2] = -1;
-   $39 = $4;
-   $40 = ((($39)) + 32|0);
-   $41 = HEAP32[$40>>2]|0;
-   $42 = $7;
-   $43 = ((($42)) + 44|0);
-   HEAP32[$43>>2] = $41;
-   $44 = $4;
-   $45 = $5;
-   $46 = $4;
-   _mrb_top_self($10,$46);
-   $47 = $6;
-   ;HEAP32[$$byval_copy1>>2]=HEAP32[$10>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$10+4>>2]|0;
-   _mrb_context_run($11,$44,$45,$$byval_copy1,$47);
-   ;HEAP32[$8>>2]=HEAP32[$11>>2]|0;HEAP32[$8+4>>2]=HEAP32[$11+4>>2]|0;
-   $48 = $4;
-   _cipop($48);
-   ;HEAP32[$0>>2]=HEAP32[$8>>2]|0;HEAP32[$0+4>>2]=HEAP32[$8+4>>2]|0;
-   STACKTOP = sp;return;
-  }
- }
- $29 = $4;
- $30 = $5;
- $31 = $4;
- _mrb_top_self($9,$31);
- $32 = $6;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$9>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$9+4>>2]|0;
- _mrb_context_run($0,$29,$30,$$byval_copy,$32);
- STACKTOP = sp;return;
-}
-function _mrb_parser_parse($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $$reg2mem24$0 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;
- var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0;
- var $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $cond = 0, $cond26 = 0, $cond27 = 0, $cond28 = 0, $cond29 = 0;
- var $cond30 = 0, $cond31 = 0, _setjmpTable = 0, _setjmpTableSize = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 160|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(160|0);
- _setjmpTableSize = 4;_setjmpTable = _malloc(40) | 0;HEAP32[_setjmpTable>>2]=0;
- $2 = sp;
- $3 = ((($0)) + 1404|0);
- HEAP32[$3>>2] = $2;
- $4 = ((($0)) + 1404|0);
- $5 = HEAP32[$4>>2]|0;
- _setjmpTable = _saveSetjmp($5,1,_setjmpTable|0,_setjmpTableSize|0)|0;_setjmpTableSize = tempRet0;
- __THREW__ = 0;
- $6 = __THREW__; __THREW__ = 0;
- if ((($6|0) != 0) & ((threwValue|0) != 0)) { $7 = _testSetjmp(HEAP32[$6>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($7|0) == 0) { _longjmp($6|0, threwValue|0); } tempRet0 = (threwValue); } else { $7 = -1; };
- $8 = tempRet0;
- $cond = ($7|0)==(1);
- if ($cond) {
-  $$reg2mem24$0 = $8;
- } else {
-  $$reg2mem24$0 = 0;
- }
- while(1) {
-  $9 = ($$reg2mem24$0|0)==(0);
-  if (!($9)) {
-   __THREW__ = 0;
-   invoke_vii(207,($0|0),(57113|0));
-   $49 = __THREW__; __THREW__ = 0;
-   if ((($49|0) != 0) & ((threwValue|0) != 0)) { $50 = _testSetjmp(HEAP32[$49>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($50|0) == 0) { _longjmp($49|0, threwValue|0); } tempRet0 = (threwValue); } else { $50 = -1; };
-   $51 = tempRet0;
-   $cond26 = ($50|0)==(1);
-   if ($cond26) {
-    $$reg2mem24$0 = $51;
-    continue;
-   } else {
-    label = 15;
-    break;
-   }
-  }
-  $10 = ((($0)) + 72|0);
-  $11 = HEAP8[$10>>0]|0;
-  $12 = $11 & -2;
-  $13 = $12 | 1;
-  HEAP8[$10>>0] = $13;
-  $14 = ((($0)) + 68|0);
-  HEAP32[$14>>2] = 0;
-  $15 = ((($0)) + 64|0);
-  HEAP32[$15>>2] = 0;
-  $16 = ((($0)) + 1140|0);
-  HEAP32[$16>>2] = 0;
-  $17 = ((($0)) + 1136|0);
-  HEAP32[$17>>2] = 0;
-  $18 = ((($0)) + 44|0);
-  HEAP32[$18>>2] = 0;
-  __THREW__ = 0;
-  invoke_vii(202,($0|0),($1|0));
-  $19 = __THREW__; __THREW__ = 0;
-  if ((($19|0) != 0) & ((threwValue|0) != 0)) { $20 = _testSetjmp(HEAP32[$19>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($20|0) == 0) { _longjmp($19|0, threwValue|0); } tempRet0 = (threwValue); } else { $20 = -1; };
-  $21 = tempRet0;
-  $cond27 = ($20|0)==(1);
-  if ($cond27) {
-   $$reg2mem24$0 = $21;
-   continue;
-  }
-  __THREW__ = 0;
-  (invoke_ii(203,($0|0))|0);
-  $22 = __THREW__; __THREW__ = 0;
-  if ((($22|0) != 0) & ((threwValue|0) != 0)) { $23 = _testSetjmp(HEAP32[$22>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($23|0) == 0) { _longjmp($22|0, threwValue|0); } tempRet0 = (threwValue); } else { $23 = -1; };
-  $24 = tempRet0;
-  $cond28 = ($23|0)==(1);
-  if ($cond28) {
-   $$reg2mem24$0 = $24;
-   continue;
-  }
-  $25 = ((($0)) + 1144|0);
-  $26 = HEAP32[$25>>2]|0;
-  $27 = ($26|0)!=(0|0);
-  if (!($27)) {
-   __THREW__ = 0;
-   $28 = (invoke_ii(204,($0|0))|0);
-   $29 = __THREW__; __THREW__ = 0;
-   if ((($29|0) != 0) & ((threwValue|0) != 0)) { $30 = _testSetjmp(HEAP32[$29>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($30|0) == 0) { _longjmp($29|0, threwValue|0); } tempRet0 = (threwValue); } else { $30 = -1; };
-   $31 = tempRet0;
-   $cond29 = ($30|0)==(1);
-   if ($cond29) {
-    $$reg2mem24$0 = $31;
-    continue;
-   }
-   $32 = ((($0)) + 1144|0);
-   HEAP32[$32>>2] = $28;
-  }
-  __THREW__ = 0;
-  invoke_vii(205,($0|0),($1|0));
-  $33 = __THREW__; __THREW__ = 0;
-  if ((($33|0) != 0) & ((threwValue|0) != 0)) { $34 = _testSetjmp(HEAP32[$33>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($34|0) == 0) { _longjmp($33|0, threwValue|0); } tempRet0 = (threwValue); } else { $34 = -1; };
-  $35 = tempRet0;
-  $cond30 = ($34|0)==(1);
-  if ($cond30) {
-   $$reg2mem24$0 = $35;
-   continue;
-  }
-  $36 = ($1|0)!=(0|0);
-  if (!($36)) {
-   label = 16;
-   break;
-  }
-  $37 = ((($1)) + 28|0);
-  $38 = HEAP8[$37>>0]|0;
-  $39 = ($38&255) >>> 1;
-  $40 = $39 & 1;
-  $41 = $40&255;
-  $42 = ($41|0)!=(0);
-  if (!($42)) {
-   label = 16;
-   break;
-  }
-  $43 = HEAP32[$0>>2]|0;
-  $44 = ((($0)) + 1144|0);
-  $45 = HEAP32[$44>>2]|0;
-  __THREW__ = 0;
-  invoke_viii(206,($43|0),($45|0),0);
-  $46 = __THREW__; __THREW__ = 0;
-  if ((($46|0) != 0) & ((threwValue|0) != 0)) { $47 = _testSetjmp(HEAP32[$46>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($47|0) == 0) { _longjmp($46|0, threwValue|0); } tempRet0 = (threwValue); } else { $47 = -1; };
-  $48 = tempRet0;
-  $cond31 = ($47|0)==(1);
-  if ($cond31) {
-   $$reg2mem24$0 = $48;
-  } else {
-   label = 13;
-   break;
-  }
- }
- if ((label|0) == 13) {
-  _free(_setjmpTable|0);
-  STACKTOP = sp;return;
- }
- else if ((label|0) == 15) {
-  $52 = ((($0)) + 1136|0);
-  $53 = HEAP32[$52>>2]|0;
-  $54 = (($53) + 1)|0;
-  HEAP32[$52>>2] = $54;
-  $55 = ((($0)) + 1144|0);
-  HEAP32[$55>>2] = 0;
-  _free(_setjmpTable|0);
-  STACKTOP = sp;return;
- }
- else if ((label|0) == 16) {
-  _free(_setjmpTable|0);
-  STACKTOP = sp;return;
- }
-}
-function _parser_init_cxt($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;
- var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0;
- var $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0;
- var $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $5 = $3;
- $6 = ($5|0)!=(0|0);
- if (!($6)) {
-  STACKTOP = sp;return;
- }
- $7 = $3;
- $8 = ((($7)) + 8|0);
- $9 = HEAP32[$8>>2]|0;
- $10 = ($9|0)!=(0|0);
- if ($10) {
-  $11 = $2;
-  $12 = $3;
-  $13 = ((($12)) + 8|0);
-  $14 = HEAP32[$13>>2]|0;
-  _mrb_parser_set_filename($11,$14);
- }
- $15 = $3;
- $16 = ((($15)) + 12|0);
- $17 = HEAP16[$16>>1]|0;
- $18 = ($17<<16>>16)!=(0);
- if ($18) {
-  $19 = $3;
-  $20 = ((($19)) + 12|0);
-  $21 = HEAP16[$20>>1]|0;
-  $22 = $21 << 16 >> 16;
-  $23 = $2;
-  $24 = ((($23)) + 32|0);
-  HEAP32[$24>>2] = $22;
- }
- $25 = $3;
- $26 = HEAP32[$25>>2]|0;
- $27 = ($26|0)!=(0|0);
- L10: do {
-  if ($27) {
-   $28 = $2;
-   $29 = (_cons_gen($28,0,0)|0);
-   $30 = $2;
-   $31 = ((($30)) + 76|0);
-   HEAP32[$31>>2] = $29;
-   $4 = 0;
-   while(1) {
-    $32 = $4;
-    $33 = $3;
-    $34 = ((($33)) + 4|0);
-    $35 = HEAP32[$34>>2]|0;
-    $36 = ($32|0)<($35|0);
-    if (!($36)) {
-     break L10;
-    }
-    $37 = $2;
-    $38 = $3;
-    $39 = HEAP32[$38>>2]|0;
-    $40 = $4;
-    $41 = (($39) + ($40<<2)|0);
-    $42 = HEAP32[$41>>2]|0;
-    _local_add_f($37,$42);
-    $43 = $4;
-    $44 = (($43) + 1)|0;
-    $4 = $44;
-   }
-  }
- } while(0);
- $45 = $3;
- $46 = ((($45)) + 28|0);
- $47 = HEAP8[$46>>0]|0;
- $48 = $47 & 1;
- $49 = $2;
- $50 = ((($49)) + 1148|0);
- $51 = HEAP8[$50>>0]|0;
- $52 = $48 & 1;
- $53 = ($52 << 1)&255;
- $54 = $51 & -3;
- $55 = $54 | $53;
- HEAP8[$50>>0] = $55;
- $56 = $3;
- $57 = ((($56)) + 28|0);
- $58 = HEAP8[$57>>0]|0;
- $59 = ($58&255) >>> 4;
- $60 = $59 & 1;
- $61 = $2;
- $62 = ((($61)) + 1148|0);
- $63 = HEAP8[$62>>0]|0;
- $64 = $60 & 1;
- $65 = $63 & -2;
- $66 = $65 | $64;
- HEAP8[$62>>0] = $66;
- $67 = $3;
- $68 = ((($67)) + 16|0);
- $69 = HEAP32[$68>>2]|0;
- $70 = ($69|0)!=(0|0);
- if (!($70)) {
-  STACKTOP = sp;return;
- }
- $71 = $3;
- $72 = $2;
- $73 = ((($72)) + 24|0);
- HEAP32[$73>>2] = $71;
- STACKTOP = sp;return;
-}
-function _yyparse($0) {
- $0 = $0|0;
- var $$ = 0, $$19 = 0, $$sink = 0, $$sink5 = 0, $$sink7 = 0, $$sink9 = 0, $1 = 0, $10 = 0, $100 = 0, $1000 = 0, $1001 = 0, $1002 = 0, $1003 = 0, $1004 = 0, $1005 = 0, $1006 = 0, $1007 = 0, $1008 = 0, $1009 = 0, $101 = 0;
- var $1010 = 0, $1011 = 0, $1012 = 0, $1013 = 0, $1014 = 0, $1015 = 0, $1016 = 0, $1017 = 0, $1018 = 0, $1019 = 0, $102 = 0, $1020 = 0, $1021 = 0, $1022 = 0, $1023 = 0, $1024 = 0, $1025 = 0, $1026 = 0, $1027 = 0, $1028 = 0;
- var $1029 = 0, $103 = 0, $1030 = 0, $1031 = 0, $1032 = 0, $1033 = 0, $1034 = 0, $1035 = 0, $1036 = 0, $1037 = 0, $1038 = 0, $1039 = 0, $104 = 0, $1040 = 0, $1041 = 0, $1042 = 0, $1043 = 0, $1044 = 0, $1045 = 0, $1046 = 0;
- var $1047 = 0, $1048 = 0, $1049 = 0, $105 = 0, $1050 = 0, $1051 = 0, $1052 = 0, $1053 = 0, $1054 = 0, $1055 = 0, $1056 = 0, $1057 = 0, $1058 = 0, $1059 = 0, $106 = 0, $1060 = 0, $1061 = 0, $1062 = 0, $1063 = 0, $1064 = 0;
- var $1065 = 0, $1066 = 0, $1067 = 0, $1068 = 0, $1069 = 0, $107 = 0, $1070 = 0, $1071 = 0, $1072 = 0, $1073 = 0, $1074 = 0, $1075 = 0, $1076 = 0, $1077 = 0, $1078 = 0, $1079 = 0, $108 = 0, $1080 = 0, $1081 = 0, $1082 = 0;
- var $1083 = 0, $1084 = 0, $1085 = 0, $1086 = 0, $1087 = 0, $1088 = 0, $1089 = 0, $109 = 0, $1090 = 0, $1091 = 0, $1092 = 0, $1093 = 0, $1094 = 0, $1095 = 0, $1096 = 0, $1097 = 0, $1098 = 0, $1099 = 0, $11 = 0, $110 = 0;
- var $1100 = 0, $1101 = 0, $1102 = 0, $1103 = 0, $1104 = 0, $1105 = 0, $1106 = 0, $1107 = 0, $1108 = 0, $1109 = 0, $111 = 0, $1110 = 0, $1111 = 0, $1112 = 0, $1113 = 0, $1114 = 0, $1115 = 0, $1116 = 0, $1117 = 0, $1118 = 0;
- var $1119 = 0, $112 = 0, $1120 = 0, $1121 = 0, $1122 = 0, $1123 = 0, $1124 = 0, $1125 = 0, $1126 = 0, $1127 = 0, $1128 = 0, $1129 = 0, $113 = 0, $1130 = 0, $1131 = 0, $1132 = 0, $1133 = 0, $1134 = 0, $1135 = 0, $1136 = 0;
- var $1137 = 0, $1138 = 0, $1139 = 0, $114 = 0, $1140 = 0, $1141 = 0, $1142 = 0, $1143 = 0, $1144 = 0, $1145 = 0, $1146 = 0, $1147 = 0, $1148 = 0, $1149 = 0, $115 = 0, $1150 = 0, $1151 = 0, $1152 = 0, $1153 = 0, $1154 = 0;
- var $1155 = 0, $1156 = 0, $1157 = 0, $1158 = 0, $1159 = 0, $116 = 0, $1160 = 0, $1161 = 0, $1162 = 0, $1163 = 0, $1164 = 0, $1165 = 0, $1166 = 0, $1167 = 0, $1168 = 0, $1169 = 0, $117 = 0, $1170 = 0, $1171 = 0, $1172 = 0;
- var $1173 = 0, $1174 = 0, $1175 = 0, $1176 = 0, $1177 = 0, $1178 = 0, $1179 = 0, $118 = 0, $1180 = 0, $1181 = 0, $1182 = 0, $1183 = 0, $1184 = 0, $1185 = 0, $1186 = 0, $1187 = 0, $1188 = 0, $1189 = 0, $119 = 0, $1190 = 0;
- var $1191 = 0, $1192 = 0, $1193 = 0, $1194 = 0, $1195 = 0, $1196 = 0, $1197 = 0, $1198 = 0, $1199 = 0, $12 = 0, $120 = 0, $1200 = 0, $1201 = 0, $1202 = 0, $1203 = 0, $1204 = 0, $1205 = 0, $1206 = 0, $1207 = 0, $1208 = 0;
- var $1209 = 0, $121 = 0, $1210 = 0, $1211 = 0, $1212 = 0, $1213 = 0, $1214 = 0, $1215 = 0, $1216 = 0, $1217 = 0, $1218 = 0, $1219 = 0, $122 = 0, $1220 = 0, $1221 = 0, $1222 = 0, $1223 = 0, $1224 = 0, $1225 = 0, $1226 = 0;
- var $1227 = 0, $1228 = 0, $1229 = 0, $123 = 0, $1230 = 0, $1231 = 0, $1232 = 0, $1233 = 0, $1234 = 0, $1235 = 0, $1236 = 0, $1237 = 0, $1238 = 0, $1239 = 0, $124 = 0, $1240 = 0, $1241 = 0, $1242 = 0, $1243 = 0, $1244 = 0;
- var $1245 = 0, $1246 = 0, $1247 = 0, $1248 = 0, $1249 = 0, $125 = 0, $1250 = 0, $1251 = 0, $1252 = 0, $1253 = 0, $1254 = 0, $1255 = 0, $1256 = 0, $1257 = 0, $1258 = 0, $1259 = 0, $126 = 0, $1260 = 0, $1261 = 0, $1262 = 0;
- var $1263 = 0, $1264 = 0, $1265 = 0, $1266 = 0, $1267 = 0, $1268 = 0, $1269 = 0, $127 = 0, $1270 = 0, $1271 = 0, $1272 = 0, $1273 = 0, $1274 = 0, $1275 = 0, $1276 = 0, $1277 = 0, $1278 = 0, $1279 = 0, $128 = 0, $1280 = 0;
- var $1281 = 0, $1282 = 0, $1283 = 0, $1284 = 0, $1285 = 0, $1286 = 0, $1287 = 0, $1288 = 0, $1289 = 0, $129 = 0, $1290 = 0, $1291 = 0, $1292 = 0, $1293 = 0, $1294 = 0, $1295 = 0, $1296 = 0, $1297 = 0, $1298 = 0, $1299 = 0;
- var $13 = 0, $130 = 0, $1300 = 0, $1301 = 0, $1302 = 0, $1303 = 0, $1304 = 0, $1305 = 0, $1306 = 0, $1307 = 0, $1308 = 0, $1309 = 0, $131 = 0, $1310 = 0, $1311 = 0, $1312 = 0, $1313 = 0, $1314 = 0, $1315 = 0, $1316 = 0;
- var $1317 = 0, $1318 = 0, $1319 = 0, $132 = 0, $1320 = 0, $1321 = 0, $1322 = 0, $1323 = 0, $1324 = 0, $1325 = 0, $1326 = 0, $1327 = 0, $1328 = 0, $1329 = 0, $133 = 0, $1330 = 0, $1331 = 0, $1332 = 0, $1333 = 0, $1334 = 0;
- var $1335 = 0, $1336 = 0, $1337 = 0, $1338 = 0, $1339 = 0, $134 = 0, $1340 = 0, $1341 = 0, $1342 = 0, $1343 = 0, $1344 = 0, $1345 = 0, $1346 = 0, $1347 = 0, $1348 = 0, $1349 = 0, $135 = 0, $1350 = 0, $1351 = 0, $1352 = 0;
- var $1353 = 0, $1354 = 0, $1355 = 0, $1356 = 0, $1357 = 0, $1358 = 0, $1359 = 0, $136 = 0, $1360 = 0, $1361 = 0, $1362 = 0, $1363 = 0, $1364 = 0, $1365 = 0, $1366 = 0, $1367 = 0, $1368 = 0, $1369 = 0, $137 = 0, $1370 = 0;
- var $1371 = 0, $1372 = 0, $1373 = 0, $1374 = 0, $1375 = 0, $1376 = 0, $1377 = 0, $1378 = 0, $1379 = 0, $138 = 0, $1380 = 0, $1381 = 0, $1382 = 0, $1383 = 0, $1384 = 0, $1385 = 0, $1386 = 0, $1387 = 0, $1388 = 0, $1389 = 0;
- var $139 = 0, $1390 = 0, $1391 = 0, $1392 = 0, $1393 = 0, $1394 = 0, $1395 = 0, $1396 = 0, $1397 = 0, $1398 = 0, $1399 = 0, $14 = 0, $140 = 0, $1400 = 0, $1401 = 0, $1402 = 0, $1403 = 0, $1404 = 0, $1405 = 0, $1406 = 0;
- var $1407 = 0, $1408 = 0, $1409 = 0, $141 = 0, $1410 = 0, $1411 = 0, $1412 = 0, $1413 = 0, $1414 = 0, $1415 = 0, $1416 = 0, $1417 = 0, $1418 = 0, $1419 = 0, $142 = 0, $1420 = 0, $1421 = 0, $1422 = 0, $1423 = 0, $1424 = 0;
- var $1425 = 0, $1426 = 0, $1427 = 0, $1428 = 0, $1429 = 0, $143 = 0, $1430 = 0, $1431 = 0, $1432 = 0, $1433 = 0, $1434 = 0, $1435 = 0, $1436 = 0, $1437 = 0, $1438 = 0, $1439 = 0, $144 = 0, $1440 = 0, $1441 = 0, $1442 = 0;
- var $1443 = 0, $1444 = 0, $1445 = 0, $1446 = 0, $1447 = 0, $1448 = 0, $1449 = 0, $145 = 0, $1450 = 0, $1451 = 0, $1452 = 0, $1453 = 0, $1454 = 0, $1455 = 0, $1456 = 0, $1457 = 0, $1458 = 0, $1459 = 0, $146 = 0, $1460 = 0;
- var $1461 = 0, $1462 = 0, $1463 = 0, $1464 = 0, $1465 = 0, $1466 = 0, $1467 = 0, $1468 = 0, $1469 = 0, $147 = 0, $1470 = 0, $1471 = 0, $1472 = 0, $1473 = 0, $1474 = 0, $1475 = 0, $1476 = 0, $1477 = 0, $1478 = 0, $1479 = 0;
- var $148 = 0, $1480 = 0, $1481 = 0, $1482 = 0, $1483 = 0, $1484 = 0, $1485 = 0, $1486 = 0, $1487 = 0, $1488 = 0, $1489 = 0, $149 = 0, $1490 = 0, $1491 = 0, $1492 = 0, $1493 = 0, $1494 = 0, $1495 = 0, $1496 = 0, $1497 = 0;
- var $1498 = 0, $1499 = 0, $15 = 0, $150 = 0, $1500 = 0, $1501 = 0, $1502 = 0, $1503 = 0, $1504 = 0, $1505 = 0, $1506 = 0, $1507 = 0, $1508 = 0, $1509 = 0, $151 = 0, $1510 = 0, $1511 = 0, $1512 = 0, $1513 = 0, $1514 = 0;
- var $1515 = 0, $1516 = 0, $1517 = 0, $1518 = 0, $1519 = 0, $152 = 0, $1520 = 0, $1521 = 0, $1522 = 0, $1523 = 0, $1524 = 0, $1525 = 0, $1526 = 0, $1527 = 0, $1528 = 0, $1529 = 0, $153 = 0, $1530 = 0, $1531 = 0, $1532 = 0;
- var $1533 = 0, $1534 = 0, $1535 = 0, $1536 = 0, $1537 = 0, $1538 = 0, $1539 = 0, $154 = 0, $1540 = 0, $1541 = 0, $1542 = 0, $1543 = 0, $1544 = 0, $1545 = 0, $1546 = 0, $1547 = 0, $1548 = 0, $1549 = 0, $155 = 0, $1550 = 0;
- var $1551 = 0, $1552 = 0, $1553 = 0, $1554 = 0, $1555 = 0, $1556 = 0, $1557 = 0, $1558 = 0, $1559 = 0, $156 = 0, $1560 = 0, $1561 = 0, $1562 = 0, $1563 = 0, $1564 = 0, $1565 = 0, $1566 = 0, $1567 = 0, $1568 = 0, $1569 = 0;
- var $157 = 0, $1570 = 0, $1571 = 0, $1572 = 0, $1573 = 0, $1574 = 0, $1575 = 0, $1576 = 0, $1577 = 0, $1578 = 0, $1579 = 0, $158 = 0, $1580 = 0, $1581 = 0, $1582 = 0, $1583 = 0, $1584 = 0, $1585 = 0, $1586 = 0, $1587 = 0;
- var $1588 = 0, $1589 = 0, $159 = 0, $1590 = 0, $1591 = 0, $1592 = 0, $1593 = 0, $1594 = 0, $1595 = 0, $1596 = 0, $1597 = 0, $1598 = 0, $1599 = 0, $16 = 0, $160 = 0, $1600 = 0, $1601 = 0, $1602 = 0, $1603 = 0, $1604 = 0;
- var $1605 = 0, $1606 = 0, $1607 = 0, $1608 = 0, $1609 = 0, $161 = 0, $1610 = 0, $1611 = 0, $1612 = 0, $1613 = 0, $1614 = 0, $1615 = 0, $1616 = 0, $1617 = 0, $1618 = 0, $1619 = 0, $162 = 0, $1620 = 0, $1621 = 0, $1622 = 0;
- var $1623 = 0, $1624 = 0, $1625 = 0, $1626 = 0, $1627 = 0, $1628 = 0, $1629 = 0, $163 = 0, $1630 = 0, $1631 = 0, $1632 = 0, $1633 = 0, $1634 = 0, $1635 = 0, $1636 = 0, $1637 = 0, $1638 = 0, $1639 = 0, $164 = 0, $1640 = 0;
- var $1641 = 0, $1642 = 0, $1643 = 0, $1644 = 0, $1645 = 0, $1646 = 0, $1647 = 0, $1648 = 0, $1649 = 0, $165 = 0, $1650 = 0, $1651 = 0, $1652 = 0, $1653 = 0, $1654 = 0, $1655 = 0, $1656 = 0, $1657 = 0, $1658 = 0, $1659 = 0;
- var $166 = 0, $1660 = 0, $1661 = 0, $1662 = 0, $1663 = 0, $1664 = 0, $1665 = 0, $1666 = 0, $1667 = 0, $1668 = 0, $1669 = 0, $167 = 0, $1670 = 0, $1671 = 0, $1672 = 0, $1673 = 0, $1674 = 0, $1675 = 0, $1676 = 0, $1677 = 0;
- var $1678 = 0, $1679 = 0, $168 = 0, $1680 = 0, $1681 = 0, $1682 = 0, $1683 = 0, $1684 = 0, $1685 = 0, $1686 = 0, $1687 = 0, $1688 = 0, $1689 = 0, $169 = 0, $1690 = 0, $1691 = 0, $1692 = 0, $1693 = 0, $1694 = 0, $1695 = 0;
- var $1696 = 0, $1697 = 0, $1698 = 0, $1699 = 0, $17 = 0, $170 = 0, $1700 = 0, $1701 = 0, $1702 = 0, $1703 = 0, $1704 = 0, $1705 = 0, $1706 = 0, $1707 = 0, $1708 = 0, $1709 = 0, $171 = 0, $1710 = 0, $1711 = 0, $1712 = 0;
- var $1713 = 0, $1714 = 0, $1715 = 0, $1716 = 0, $1717 = 0, $1718 = 0, $1719 = 0, $172 = 0, $1720 = 0, $1721 = 0, $1722 = 0, $1723 = 0, $1724 = 0, $1725 = 0, $1726 = 0, $1727 = 0, $1728 = 0, $1729 = 0, $173 = 0, $1730 = 0;
- var $1731 = 0, $1732 = 0, $1733 = 0, $1734 = 0, $1735 = 0, $1736 = 0, $1737 = 0, $1738 = 0, $1739 = 0, $174 = 0, $1740 = 0, $1741 = 0, $1742 = 0, $1743 = 0, $1744 = 0, $1745 = 0, $1746 = 0, $1747 = 0, $1748 = 0, $1749 = 0;
- var $175 = 0, $1750 = 0, $1751 = 0, $1752 = 0, $1753 = 0, $1754 = 0, $1755 = 0, $1756 = 0, $1757 = 0, $1758 = 0, $1759 = 0, $176 = 0, $1760 = 0, $1761 = 0, $1762 = 0, $1763 = 0, $1764 = 0, $1765 = 0, $1766 = 0, $1767 = 0;
- var $1768 = 0, $1769 = 0, $177 = 0, $1770 = 0, $1771 = 0, $1772 = 0, $1773 = 0, $1774 = 0, $1775 = 0, $1776 = 0, $1777 = 0, $1778 = 0, $1779 = 0, $178 = 0, $1780 = 0, $1781 = 0, $1782 = 0, $1783 = 0, $1784 = 0, $1785 = 0;
- var $1786 = 0, $1787 = 0, $1788 = 0, $1789 = 0, $179 = 0, $1790 = 0, $1791 = 0, $1792 = 0, $1793 = 0, $1794 = 0, $1795 = 0, $1796 = 0, $1797 = 0, $1798 = 0, $1799 = 0, $18 = 0, $180 = 0, $1800 = 0, $1801 = 0, $1802 = 0;
- var $1803 = 0, $1804 = 0, $1805 = 0, $1806 = 0, $1807 = 0, $1808 = 0, $1809 = 0, $181 = 0, $1810 = 0, $1811 = 0, $1812 = 0, $1813 = 0, $1814 = 0, $1815 = 0, $1816 = 0, $1817 = 0, $1818 = 0, $1819 = 0, $182 = 0, $1820 = 0;
- var $1821 = 0, $1822 = 0, $1823 = 0, $1824 = 0, $1825 = 0, $1826 = 0, $1827 = 0, $1828 = 0, $1829 = 0, $183 = 0, $1830 = 0, $1831 = 0, $1832 = 0, $1833 = 0, $1834 = 0, $1835 = 0, $1836 = 0, $1837 = 0, $1838 = 0, $1839 = 0;
- var $184 = 0, $1840 = 0, $1841 = 0, $1842 = 0, $1843 = 0, $1844 = 0, $1845 = 0, $1846 = 0, $1847 = 0, $1848 = 0, $1849 = 0, $185 = 0, $1850 = 0, $1851 = 0, $1852 = 0, $1853 = 0, $1854 = 0, $1855 = 0, $1856 = 0, $1857 = 0;
- var $1858 = 0, $1859 = 0, $186 = 0, $1860 = 0, $1861 = 0, $1862 = 0, $1863 = 0, $1864 = 0, $1865 = 0, $1866 = 0, $1867 = 0, $1868 = 0, $1869 = 0, $187 = 0, $1870 = 0, $1871 = 0, $1872 = 0, $1873 = 0, $1874 = 0, $1875 = 0;
- var $1876 = 0, $1877 = 0, $1878 = 0, $1879 = 0, $188 = 0, $1880 = 0, $1881 = 0, $1882 = 0, $1883 = 0, $1884 = 0, $1885 = 0, $1886 = 0, $1887 = 0, $1888 = 0, $1889 = 0, $189 = 0, $1890 = 0, $1891 = 0, $1892 = 0, $1893 = 0;
- var $1894 = 0, $1895 = 0, $1896 = 0, $1897 = 0, $1898 = 0, $1899 = 0, $19 = 0, $190 = 0, $1900 = 0, $1901 = 0, $1902 = 0, $1903 = 0, $1904 = 0, $1905 = 0, $1906 = 0, $1907 = 0, $1908 = 0, $1909 = 0, $191 = 0, $1910 = 0;
- var $1911 = 0, $1912 = 0, $1913 = 0, $1914 = 0, $1915 = 0, $1916 = 0, $1917 = 0, $1918 = 0, $1919 = 0, $192 = 0, $1920 = 0, $1921 = 0, $1922 = 0, $1923 = 0, $1924 = 0, $1925 = 0, $1926 = 0, $1927 = 0, $1928 = 0, $1929 = 0;
- var $193 = 0, $1930 = 0, $1931 = 0, $1932 = 0, $1933 = 0, $1934 = 0, $1935 = 0, $1936 = 0, $1937 = 0, $1938 = 0, $1939 = 0, $194 = 0, $1940 = 0, $1941 = 0, $1942 = 0, $1943 = 0, $1944 = 0, $1945 = 0, $1946 = 0, $1947 = 0;
- var $1948 = 0, $1949 = 0, $195 = 0, $1950 = 0, $1951 = 0, $1952 = 0, $1953 = 0, $1954 = 0, $1955 = 0, $1956 = 0, $1957 = 0, $1958 = 0, $1959 = 0, $196 = 0, $1960 = 0, $1961 = 0, $1962 = 0, $1963 = 0, $1964 = 0, $1965 = 0;
- var $1966 = 0, $1967 = 0, $1968 = 0, $1969 = 0, $197 = 0, $1970 = 0, $1971 = 0, $1972 = 0, $1973 = 0, $1974 = 0, $1975 = 0, $1976 = 0, $1977 = 0, $1978 = 0, $1979 = 0, $198 = 0, $1980 = 0, $1981 = 0, $1982 = 0, $1983 = 0;
- var $1984 = 0, $1985 = 0, $1986 = 0, $1987 = 0, $1988 = 0, $1989 = 0, $199 = 0, $1990 = 0, $1991 = 0, $1992 = 0, $1993 = 0, $1994 = 0, $1995 = 0, $1996 = 0, $1997 = 0, $1998 = 0, $1999 = 0, $2 = 0, $20 = 0, $200 = 0;
- var $2000 = 0, $2001 = 0, $2002 = 0, $2003 = 0, $2004 = 0, $2005 = 0, $2006 = 0, $2007 = 0, $2008 = 0, $2009 = 0, $201 = 0, $2010 = 0, $2011 = 0, $2012 = 0, $2013 = 0, $2014 = 0, $2015 = 0, $2016 = 0, $2017 = 0, $2018 = 0;
- var $2019 = 0, $202 = 0, $2020 = 0, $2021 = 0, $2022 = 0, $2023 = 0, $2024 = 0, $2025 = 0, $2026 = 0, $2027 = 0, $2028 = 0, $2029 = 0, $203 = 0, $2030 = 0, $2031 = 0, $2032 = 0, $2033 = 0, $2034 = 0, $2035 = 0, $2036 = 0;
- var $2037 = 0, $2038 = 0, $2039 = 0, $204 = 0, $2040 = 0, $2041 = 0, $2042 = 0, $2043 = 0, $2044 = 0, $2045 = 0, $2046 = 0, $2047 = 0, $2048 = 0, $2049 = 0, $205 = 0, $2050 = 0, $2051 = 0, $2052 = 0, $2053 = 0, $2054 = 0;
- var $2055 = 0, $2056 = 0, $2057 = 0, $2058 = 0, $2059 = 0, $206 = 0, $2060 = 0, $2061 = 0, $2062 = 0, $2063 = 0, $2064 = 0, $2065 = 0, $2066 = 0, $2067 = 0, $2068 = 0, $2069 = 0, $207 = 0, $2070 = 0, $2071 = 0, $2072 = 0;
- var $2073 = 0, $2074 = 0, $2075 = 0, $2076 = 0, $2077 = 0, $2078 = 0, $2079 = 0, $208 = 0, $2080 = 0, $2081 = 0, $2082 = 0, $2083 = 0, $2084 = 0, $2085 = 0, $2086 = 0, $2087 = 0, $2088 = 0, $2089 = 0, $209 = 0, $2090 = 0;
- var $2091 = 0, $2092 = 0, $2093 = 0, $2094 = 0, $2095 = 0, $2096 = 0, $2097 = 0, $2098 = 0, $2099 = 0, $21 = 0, $210 = 0, $2100 = 0, $2101 = 0, $2102 = 0, $2103 = 0, $2104 = 0, $2105 = 0, $2106 = 0, $2107 = 0, $2108 = 0;
- var $2109 = 0, $211 = 0, $2110 = 0, $2111 = 0, $2112 = 0, $2113 = 0, $2114 = 0, $2115 = 0, $2116 = 0, $2117 = 0, $2118 = 0, $2119 = 0, $212 = 0, $2120 = 0, $2121 = 0, $2122 = 0, $2123 = 0, $2124 = 0, $2125 = 0, $2126 = 0;
- var $2127 = 0, $2128 = 0, $2129 = 0, $213 = 0, $2130 = 0, $2131 = 0, $2132 = 0, $2133 = 0, $2134 = 0, $2135 = 0, $2136 = 0, $2137 = 0, $2138 = 0, $2139 = 0, $214 = 0, $2140 = 0, $2141 = 0, $2142 = 0, $2143 = 0, $2144 = 0;
- var $2145 = 0, $2146 = 0, $2147 = 0, $2148 = 0, $2149 = 0, $215 = 0, $2150 = 0, $2151 = 0, $2152 = 0, $2153 = 0, $2154 = 0, $2155 = 0, $2156 = 0, $2157 = 0, $2158 = 0, $2159 = 0, $216 = 0, $2160 = 0, $2161 = 0, $2162 = 0;
- var $2163 = 0, $2164 = 0, $2165 = 0, $2166 = 0, $2167 = 0, $2168 = 0, $2169 = 0, $217 = 0, $2170 = 0, $2171 = 0, $2172 = 0, $2173 = 0, $2174 = 0, $2175 = 0, $2176 = 0, $2177 = 0, $2178 = 0, $2179 = 0, $218 = 0, $2180 = 0;
- var $2181 = 0, $2182 = 0, $2183 = 0, $2184 = 0, $2185 = 0, $2186 = 0, $2187 = 0, $2188 = 0, $2189 = 0, $219 = 0, $2190 = 0, $2191 = 0, $2192 = 0, $2193 = 0, $2194 = 0, $2195 = 0, $2196 = 0, $2197 = 0, $2198 = 0, $2199 = 0;
- var $22 = 0, $220 = 0, $2200 = 0, $2201 = 0, $2202 = 0, $2203 = 0, $2204 = 0, $2205 = 0, $2206 = 0, $2207 = 0, $2208 = 0, $2209 = 0, $221 = 0, $2210 = 0, $2211 = 0, $2212 = 0, $2213 = 0, $2214 = 0, $2215 = 0, $2216 = 0;
- var $2217 = 0, $2218 = 0, $2219 = 0, $222 = 0, $2220 = 0, $2221 = 0, $2222 = 0, $2223 = 0, $2224 = 0, $2225 = 0, $2226 = 0, $2227 = 0, $2228 = 0, $2229 = 0, $223 = 0, $2230 = 0, $2231 = 0, $2232 = 0, $2233 = 0, $2234 = 0;
- var $2235 = 0, $2236 = 0, $2237 = 0, $2238 = 0, $2239 = 0, $224 = 0, $2240 = 0, $2241 = 0, $2242 = 0, $2243 = 0, $2244 = 0, $2245 = 0, $2246 = 0, $2247 = 0, $2248 = 0, $2249 = 0, $225 = 0, $2250 = 0, $2251 = 0, $2252 = 0;
- var $2253 = 0, $2254 = 0, $2255 = 0, $2256 = 0, $2257 = 0, $2258 = 0, $2259 = 0, $226 = 0, $2260 = 0, $2261 = 0, $2262 = 0, $2263 = 0, $2264 = 0, $2265 = 0, $2266 = 0, $2267 = 0, $2268 = 0, $2269 = 0, $227 = 0, $2270 = 0;
- var $2271 = 0, $2272 = 0, $2273 = 0, $2274 = 0, $2275 = 0, $2276 = 0, $2277 = 0, $2278 = 0, $2279 = 0, $228 = 0, $2280 = 0, $2281 = 0, $2282 = 0, $2283 = 0, $2284 = 0, $2285 = 0, $2286 = 0, $2287 = 0, $2288 = 0, $2289 = 0;
- var $229 = 0, $2290 = 0, $2291 = 0, $2292 = 0, $2293 = 0, $2294 = 0, $2295 = 0, $2296 = 0, $2297 = 0, $2298 = 0, $2299 = 0, $23 = 0, $230 = 0, $2300 = 0, $2301 = 0, $2302 = 0, $2303 = 0, $2304 = 0, $2305 = 0, $2306 = 0;
- var $2307 = 0, $2308 = 0, $2309 = 0, $231 = 0, $2310 = 0, $2311 = 0, $2312 = 0, $2313 = 0, $2314 = 0, $2315 = 0, $2316 = 0, $2317 = 0, $2318 = 0, $2319 = 0, $232 = 0, $2320 = 0, $2321 = 0, $2322 = 0, $2323 = 0, $2324 = 0;
- var $2325 = 0, $2326 = 0, $2327 = 0, $2328 = 0, $2329 = 0, $233 = 0, $2330 = 0, $2331 = 0, $2332 = 0, $2333 = 0, $2334 = 0, $2335 = 0, $2336 = 0, $2337 = 0, $2338 = 0, $2339 = 0, $234 = 0, $2340 = 0, $2341 = 0, $2342 = 0;
- var $2343 = 0, $2344 = 0, $2345 = 0, $2346 = 0, $2347 = 0, $2348 = 0, $2349 = 0, $235 = 0, $2350 = 0, $2351 = 0, $2352 = 0, $2353 = 0, $2354 = 0, $2355 = 0, $2356 = 0, $2357 = 0, $2358 = 0, $2359 = 0, $236 = 0, $2360 = 0;
- var $2361 = 0, $2362 = 0, $2363 = 0, $2364 = 0, $2365 = 0, $2366 = 0, $2367 = 0, $2368 = 0, $2369 = 0, $237 = 0, $2370 = 0, $2371 = 0, $2372 = 0, $2373 = 0, $2374 = 0, $2375 = 0, $2376 = 0, $2377 = 0, $2378 = 0, $2379 = 0;
- var $238 = 0, $2380 = 0, $2381 = 0, $2382 = 0, $2383 = 0, $2384 = 0, $2385 = 0, $2386 = 0, $2387 = 0, $2388 = 0, $2389 = 0, $239 = 0, $2390 = 0, $2391 = 0, $2392 = 0, $2393 = 0, $2394 = 0, $2395 = 0, $2396 = 0, $2397 = 0;
- var $2398 = 0, $2399 = 0, $24 = 0, $240 = 0, $2400 = 0, $2401 = 0, $2402 = 0, $2403 = 0, $2404 = 0, $2405 = 0, $2406 = 0, $2407 = 0, $2408 = 0, $2409 = 0, $241 = 0, $2410 = 0, $2411 = 0, $2412 = 0, $2413 = 0, $2414 = 0;
- var $2415 = 0, $2416 = 0, $2417 = 0, $2418 = 0, $2419 = 0, $242 = 0, $2420 = 0, $2421 = 0, $2422 = 0, $2423 = 0, $2424 = 0, $2425 = 0, $2426 = 0, $2427 = 0, $2428 = 0, $2429 = 0, $243 = 0, $2430 = 0, $2431 = 0, $2432 = 0;
- var $2433 = 0, $2434 = 0, $2435 = 0, $2436 = 0, $2437 = 0, $2438 = 0, $2439 = 0, $244 = 0, $2440 = 0, $2441 = 0, $2442 = 0, $2443 = 0, $2444 = 0, $2445 = 0, $2446 = 0, $2447 = 0, $2448 = 0, $2449 = 0, $245 = 0, $2450 = 0;
- var $2451 = 0, $2452 = 0, $2453 = 0, $2454 = 0, $2455 = 0, $2456 = 0, $2457 = 0, $2458 = 0, $2459 = 0, $246 = 0, $2460 = 0, $2461 = 0, $2462 = 0, $2463 = 0, $2464 = 0, $2465 = 0, $2466 = 0, $2467 = 0, $2468 = 0, $2469 = 0;
- var $247 = 0, $2470 = 0, $2471 = 0, $2472 = 0, $2473 = 0, $2474 = 0, $2475 = 0, $2476 = 0, $2477 = 0, $2478 = 0, $2479 = 0, $248 = 0, $2480 = 0, $2481 = 0, $2482 = 0, $2483 = 0, $2484 = 0, $2485 = 0, $2486 = 0, $2487 = 0;
- var $2488 = 0, $2489 = 0, $249 = 0, $2490 = 0, $2491 = 0, $2492 = 0, $2493 = 0, $2494 = 0, $2495 = 0, $2496 = 0, $2497 = 0, $2498 = 0, $2499 = 0, $25 = 0, $250 = 0, $2500 = 0, $2501 = 0, $2502 = 0, $2503 = 0, $2504 = 0;
- var $2505 = 0, $2506 = 0, $2507 = 0, $2508 = 0, $2509 = 0, $251 = 0, $2510 = 0, $2511 = 0, $2512 = 0, $2513 = 0, $2514 = 0, $2515 = 0, $2516 = 0, $2517 = 0, $2518 = 0, $2519 = 0, $252 = 0, $2520 = 0, $2521 = 0, $2522 = 0;
- var $2523 = 0, $2524 = 0, $2525 = 0, $2526 = 0, $2527 = 0, $2528 = 0, $2529 = 0, $253 = 0, $2530 = 0, $2531 = 0, $2532 = 0, $2533 = 0, $2534 = 0, $2535 = 0, $2536 = 0, $2537 = 0, $2538 = 0, $2539 = 0, $254 = 0, $2540 = 0;
- var $2541 = 0, $2542 = 0, $2543 = 0, $2544 = 0, $2545 = 0, $2546 = 0, $2547 = 0, $2548 = 0, $2549 = 0, $255 = 0, $2550 = 0, $2551 = 0, $2552 = 0, $2553 = 0, $2554 = 0, $2555 = 0, $2556 = 0, $2557 = 0, $2558 = 0, $2559 = 0;
- var $256 = 0, $2560 = 0, $2561 = 0, $2562 = 0, $2563 = 0, $2564 = 0, $2565 = 0, $2566 = 0, $2567 = 0, $2568 = 0, $2569 = 0, $257 = 0, $2570 = 0, $2571 = 0, $2572 = 0, $2573 = 0, $2574 = 0, $2575 = 0, $2576 = 0, $2577 = 0;
- var $2578 = 0, $2579 = 0, $258 = 0, $2580 = 0, $2581 = 0, $2582 = 0, $2583 = 0, $2584 = 0, $2585 = 0, $2586 = 0, $2587 = 0, $2588 = 0, $2589 = 0, $259 = 0, $2590 = 0, $2591 = 0, $2592 = 0, $2593 = 0, $2594 = 0, $2595 = 0;
- var $2596 = 0, $2597 = 0, $2598 = 0, $2599 = 0, $26 = 0, $260 = 0, $2600 = 0, $2601 = 0, $2602 = 0, $2603 = 0, $2604 = 0, $2605 = 0, $2606 = 0, $2607 = 0, $2608 = 0, $2609 = 0, $261 = 0, $2610 = 0, $2611 = 0, $2612 = 0;
- var $2613 = 0, $2614 = 0, $2615 = 0, $2616 = 0, $2617 = 0, $2618 = 0, $2619 = 0, $262 = 0, $2620 = 0, $2621 = 0, $2622 = 0, $2623 = 0, $2624 = 0, $2625 = 0, $2626 = 0, $2627 = 0, $2628 = 0, $2629 = 0, $263 = 0, $2630 = 0;
- var $2631 = 0, $2632 = 0, $2633 = 0, $2634 = 0, $2635 = 0, $2636 = 0, $2637 = 0, $2638 = 0, $2639 = 0, $264 = 0, $2640 = 0, $2641 = 0, $2642 = 0, $2643 = 0, $2644 = 0, $2645 = 0, $2646 = 0, $2647 = 0, $2648 = 0, $2649 = 0;
- var $265 = 0, $2650 = 0, $2651 = 0, $2652 = 0, $2653 = 0, $2654 = 0, $2655 = 0, $2656 = 0, $2657 = 0, $2658 = 0, $2659 = 0, $266 = 0, $2660 = 0, $2661 = 0, $2662 = 0, $2663 = 0, $2664 = 0, $2665 = 0, $2666 = 0, $2667 = 0;
- var $2668 = 0, $2669 = 0, $267 = 0, $2670 = 0, $2671 = 0, $2672 = 0, $2673 = 0, $2674 = 0, $2675 = 0, $2676 = 0, $2677 = 0, $2678 = 0, $2679 = 0, $268 = 0, $2680 = 0, $2681 = 0, $2682 = 0, $2683 = 0, $2684 = 0, $2685 = 0;
- var $2686 = 0, $2687 = 0, $2688 = 0, $2689 = 0, $269 = 0, $2690 = 0, $2691 = 0, $2692 = 0, $2693 = 0, $2694 = 0, $2695 = 0, $2696 = 0, $2697 = 0, $2698 = 0, $2699 = 0, $27 = 0, $270 = 0, $2700 = 0, $2701 = 0, $2702 = 0;
- var $2703 = 0, $2704 = 0, $2705 = 0, $2706 = 0, $2707 = 0, $2708 = 0, $2709 = 0, $271 = 0, $2710 = 0, $2711 = 0, $2712 = 0, $2713 = 0, $2714 = 0, $2715 = 0, $2716 = 0, $2717 = 0, $2718 = 0, $2719 = 0, $272 = 0, $2720 = 0;
- var $2721 = 0, $2722 = 0, $2723 = 0, $2724 = 0, $2725 = 0, $2726 = 0, $2727 = 0, $2728 = 0, $2729 = 0, $273 = 0, $2730 = 0, $2731 = 0, $2732 = 0, $2733 = 0, $2734 = 0, $2735 = 0, $2736 = 0, $2737 = 0, $2738 = 0, $2739 = 0;
- var $274 = 0, $2740 = 0, $2741 = 0, $2742 = 0, $2743 = 0, $2744 = 0, $2745 = 0, $2746 = 0, $2747 = 0, $2748 = 0, $2749 = 0, $275 = 0, $2750 = 0, $2751 = 0, $2752 = 0, $2753 = 0, $2754 = 0, $2755 = 0, $2756 = 0, $2757 = 0;
- var $2758 = 0, $2759 = 0, $276 = 0, $2760 = 0, $2761 = 0, $2762 = 0, $2763 = 0, $2764 = 0, $2765 = 0, $2766 = 0, $2767 = 0, $2768 = 0, $2769 = 0, $277 = 0, $2770 = 0, $2771 = 0, $2772 = 0, $2773 = 0, $2774 = 0, $2775 = 0;
- var $2776 = 0, $2777 = 0, $2778 = 0, $2779 = 0, $278 = 0, $2780 = 0, $2781 = 0, $2782 = 0, $2783 = 0, $2784 = 0, $2785 = 0, $2786 = 0, $2787 = 0, $2788 = 0, $2789 = 0, $279 = 0, $2790 = 0, $2791 = 0, $2792 = 0, $2793 = 0;
- var $2794 = 0, $2795 = 0, $2796 = 0, $2797 = 0, $2798 = 0, $2799 = 0, $28 = 0, $280 = 0, $2800 = 0, $2801 = 0, $2802 = 0, $2803 = 0, $2804 = 0, $2805 = 0, $2806 = 0, $2807 = 0, $2808 = 0, $2809 = 0, $281 = 0, $2810 = 0;
- var $2811 = 0, $2812 = 0, $2813 = 0, $2814 = 0, $2815 = 0, $2816 = 0, $2817 = 0, $2818 = 0, $2819 = 0, $282 = 0, $2820 = 0, $2821 = 0, $2822 = 0, $2823 = 0, $2824 = 0, $2825 = 0, $2826 = 0, $2827 = 0, $2828 = 0, $2829 = 0;
- var $283 = 0, $2830 = 0, $2831 = 0, $2832 = 0, $2833 = 0, $2834 = 0, $2835 = 0, $2836 = 0, $2837 = 0, $2838 = 0, $2839 = 0, $284 = 0, $2840 = 0, $2841 = 0, $2842 = 0, $2843 = 0, $2844 = 0, $2845 = 0, $2846 = 0, $2847 = 0;
- var $2848 = 0, $2849 = 0, $285 = 0, $2850 = 0, $2851 = 0, $2852 = 0, $2853 = 0, $2854 = 0, $2855 = 0, $2856 = 0, $2857 = 0, $2858 = 0, $2859 = 0, $286 = 0, $2860 = 0, $2861 = 0, $2862 = 0, $2863 = 0, $2864 = 0, $2865 = 0;
- var $2866 = 0, $2867 = 0, $2868 = 0, $2869 = 0, $287 = 0, $2870 = 0, $2871 = 0, $2872 = 0, $2873 = 0, $2874 = 0, $2875 = 0, $2876 = 0, $2877 = 0, $2878 = 0, $2879 = 0, $288 = 0, $2880 = 0, $2881 = 0, $2882 = 0, $2883 = 0;
- var $2884 = 0, $2885 = 0, $2886 = 0, $2887 = 0, $2888 = 0, $2889 = 0, $289 = 0, $2890 = 0, $2891 = 0, $2892 = 0, $2893 = 0, $2894 = 0, $2895 = 0, $2896 = 0, $2897 = 0, $2898 = 0, $2899 = 0, $29 = 0, $290 = 0, $2900 = 0;
- var $2901 = 0, $2902 = 0, $2903 = 0, $2904 = 0, $2905 = 0, $2906 = 0, $2907 = 0, $2908 = 0, $2909 = 0, $291 = 0, $2910 = 0, $2911 = 0, $2912 = 0, $2913 = 0, $2914 = 0, $2915 = 0, $2916 = 0, $2917 = 0, $2918 = 0, $2919 = 0;
- var $292 = 0, $2920 = 0, $2921 = 0, $2922 = 0, $2923 = 0, $2924 = 0, $2925 = 0, $2926 = 0, $2927 = 0, $2928 = 0, $2929 = 0, $293 = 0, $2930 = 0, $2931 = 0, $2932 = 0, $2933 = 0, $2934 = 0, $2935 = 0, $2936 = 0, $2937 = 0;
- var $2938 = 0, $2939 = 0, $294 = 0, $2940 = 0, $2941 = 0, $2942 = 0, $2943 = 0, $2944 = 0, $2945 = 0, $2946 = 0, $2947 = 0, $2948 = 0, $2949 = 0, $295 = 0, $2950 = 0, $2951 = 0, $2952 = 0, $2953 = 0, $2954 = 0, $2955 = 0;
- var $2956 = 0, $2957 = 0, $2958 = 0, $2959 = 0, $296 = 0, $2960 = 0, $2961 = 0, $2962 = 0, $2963 = 0, $2964 = 0, $2965 = 0, $2966 = 0, $2967 = 0, $2968 = 0, $2969 = 0, $297 = 0, $2970 = 0, $2971 = 0, $2972 = 0, $2973 = 0;
- var $2974 = 0, $2975 = 0, $2976 = 0, $2977 = 0, $2978 = 0, $2979 = 0, $298 = 0, $2980 = 0, $2981 = 0, $2982 = 0, $2983 = 0, $2984 = 0, $2985 = 0, $2986 = 0, $2987 = 0, $2988 = 0, $2989 = 0, $299 = 0, $2990 = 0, $2991 = 0;
- var $2992 = 0, $2993 = 0, $2994 = 0, $2995 = 0, $2996 = 0, $2997 = 0, $2998 = 0, $2999 = 0, $3 = 0, $30 = 0, $300 = 0, $3000 = 0, $3001 = 0, $3002 = 0, $3003 = 0, $3004 = 0, $3005 = 0, $3006 = 0, $3007 = 0, $3008 = 0;
- var $3009 = 0, $301 = 0, $3010 = 0, $3011 = 0, $3012 = 0, $3013 = 0, $3014 = 0, $3015 = 0, $3016 = 0, $3017 = 0, $3018 = 0, $3019 = 0, $302 = 0, $3020 = 0, $3021 = 0, $3022 = 0, $3023 = 0, $3024 = 0, $3025 = 0, $3026 = 0;
- var $3027 = 0, $3028 = 0, $3029 = 0, $303 = 0, $3030 = 0, $3031 = 0, $3032 = 0, $3033 = 0, $3034 = 0, $3035 = 0, $3036 = 0, $3037 = 0, $3038 = 0, $3039 = 0, $304 = 0, $3040 = 0, $3041 = 0, $3042 = 0, $3043 = 0, $3044 = 0;
- var $3045 = 0, $3046 = 0, $3047 = 0, $3048 = 0, $3049 = 0, $305 = 0, $3050 = 0, $3051 = 0, $3052 = 0, $3053 = 0, $3054 = 0, $3055 = 0, $3056 = 0, $3057 = 0, $3058 = 0, $3059 = 0, $306 = 0, $3060 = 0, $3061 = 0, $3062 = 0;
- var $3063 = 0, $3064 = 0, $3065 = 0, $3066 = 0, $3067 = 0, $3068 = 0, $3069 = 0, $307 = 0, $3070 = 0, $3071 = 0, $3072 = 0, $3073 = 0, $3074 = 0, $3075 = 0, $3076 = 0, $3077 = 0, $3078 = 0, $3079 = 0, $308 = 0, $3080 = 0;
- var $3081 = 0, $3082 = 0, $3083 = 0, $3084 = 0, $3085 = 0, $3086 = 0, $3087 = 0, $3088 = 0, $3089 = 0, $309 = 0, $3090 = 0, $3091 = 0, $3092 = 0, $3093 = 0, $3094 = 0, $3095 = 0, $3096 = 0, $3097 = 0, $3098 = 0, $3099 = 0;
- var $31 = 0, $310 = 0, $3100 = 0, $3101 = 0, $3102 = 0, $3103 = 0, $3104 = 0, $3105 = 0, $3106 = 0, $3107 = 0, $3108 = 0, $3109 = 0, $311 = 0, $3110 = 0, $3111 = 0, $3112 = 0, $3113 = 0, $3114 = 0, $3115 = 0, $3116 = 0;
- var $3117 = 0, $3118 = 0, $3119 = 0, $312 = 0, $3120 = 0, $3121 = 0, $3122 = 0, $3123 = 0, $3124 = 0, $3125 = 0, $3126 = 0, $3127 = 0, $3128 = 0, $3129 = 0, $313 = 0, $3130 = 0, $3131 = 0, $3132 = 0, $3133 = 0, $3134 = 0;
- var $3135 = 0, $3136 = 0, $3137 = 0, $3138 = 0, $3139 = 0, $314 = 0, $3140 = 0, $3141 = 0, $3142 = 0, $3143 = 0, $3144 = 0, $3145 = 0, $3146 = 0, $3147 = 0, $3148 = 0, $3149 = 0, $315 = 0, $3150 = 0, $3151 = 0, $3152 = 0;
- var $3153 = 0, $3154 = 0, $3155 = 0, $3156 = 0, $3157 = 0, $3158 = 0, $3159 = 0, $316 = 0, $3160 = 0, $3161 = 0, $3162 = 0, $3163 = 0, $3164 = 0, $3165 = 0, $3166 = 0, $3167 = 0, $3168 = 0, $3169 = 0, $317 = 0, $3170 = 0;
- var $3171 = 0, $3172 = 0, $3173 = 0, $3174 = 0, $3175 = 0, $3176 = 0, $3177 = 0, $3178 = 0, $3179 = 0, $318 = 0, $3180 = 0, $3181 = 0, $3182 = 0, $3183 = 0, $3184 = 0, $3185 = 0, $3186 = 0, $3187 = 0, $3188 = 0, $3189 = 0;
- var $319 = 0, $3190 = 0, $3191 = 0, $3192 = 0, $3193 = 0, $3194 = 0, $3195 = 0, $3196 = 0, $3197 = 0, $3198 = 0, $3199 = 0, $32 = 0, $320 = 0, $3200 = 0, $3201 = 0, $3202 = 0, $3203 = 0, $3204 = 0, $3205 = 0, $3206 = 0;
- var $3207 = 0, $3208 = 0, $3209 = 0, $321 = 0, $3210 = 0, $3211 = 0, $3212 = 0, $3213 = 0, $3214 = 0, $3215 = 0, $3216 = 0, $3217 = 0, $3218 = 0, $3219 = 0, $322 = 0, $3220 = 0, $3221 = 0, $3222 = 0, $3223 = 0, $3224 = 0;
- var $3225 = 0, $3226 = 0, $3227 = 0, $3228 = 0, $3229 = 0, $323 = 0, $3230 = 0, $3231 = 0, $3232 = 0, $3233 = 0, $3234 = 0, $3235 = 0, $3236 = 0, $3237 = 0, $3238 = 0, $3239 = 0, $324 = 0, $3240 = 0, $3241 = 0, $3242 = 0;
- var $3243 = 0, $3244 = 0, $3245 = 0, $3246 = 0, $3247 = 0, $3248 = 0, $3249 = 0, $325 = 0, $3250 = 0, $3251 = 0, $3252 = 0, $3253 = 0, $3254 = 0, $3255 = 0, $3256 = 0, $3257 = 0, $3258 = 0, $3259 = 0, $326 = 0, $3260 = 0;
- var $3261 = 0, $3262 = 0, $3263 = 0, $3264 = 0, $3265 = 0, $3266 = 0, $3267 = 0, $3268 = 0, $3269 = 0, $327 = 0, $3270 = 0, $3271 = 0, $3272 = 0, $3273 = 0, $3274 = 0, $3275 = 0, $3276 = 0, $3277 = 0, $3278 = 0, $3279 = 0;
- var $328 = 0, $3280 = 0, $3281 = 0, $3282 = 0, $3283 = 0, $3284 = 0, $3285 = 0, $3286 = 0, $3287 = 0, $3288 = 0, $3289 = 0, $329 = 0, $3290 = 0, $3291 = 0, $3292 = 0, $3293 = 0, $3294 = 0, $3295 = 0, $3296 = 0, $3297 = 0;
- var $3298 = 0, $3299 = 0, $33 = 0, $330 = 0, $3300 = 0, $3301 = 0, $3302 = 0, $3303 = 0, $3304 = 0, $3305 = 0, $3306 = 0, $3307 = 0, $3308 = 0, $3309 = 0, $331 = 0, $3310 = 0, $3311 = 0, $3312 = 0, $3313 = 0, $3314 = 0;
- var $3315 = 0, $3316 = 0, $3317 = 0, $3318 = 0, $3319 = 0, $332 = 0, $3320 = 0, $3321 = 0, $3322 = 0, $3323 = 0, $3324 = 0, $3325 = 0, $3326 = 0, $3327 = 0, $3328 = 0, $3329 = 0, $333 = 0, $3330 = 0, $3331 = 0, $3332 = 0;
- var $3333 = 0, $3334 = 0, $3335 = 0, $3336 = 0, $3337 = 0, $3338 = 0, $3339 = 0, $334 = 0, $3340 = 0, $3341 = 0, $3342 = 0, $3343 = 0, $3344 = 0, $3345 = 0, $3346 = 0, $3347 = 0, $3348 = 0, $3349 = 0, $335 = 0, $3350 = 0;
- var $3351 = 0, $3352 = 0, $3353 = 0, $3354 = 0, $3355 = 0, $3356 = 0, $3357 = 0, $3358 = 0, $3359 = 0, $336 = 0, $3360 = 0, $3361 = 0, $3362 = 0, $3363 = 0, $3364 = 0, $3365 = 0, $3366 = 0, $3367 = 0, $3368 = 0, $3369 = 0;
- var $337 = 0, $3370 = 0, $3371 = 0, $3372 = 0, $3373 = 0, $3374 = 0, $3375 = 0, $3376 = 0, $3377 = 0, $3378 = 0, $3379 = 0, $338 = 0, $3380 = 0, $3381 = 0, $3382 = 0, $3383 = 0, $3384 = 0, $3385 = 0, $3386 = 0, $3387 = 0;
- var $3388 = 0, $3389 = 0, $339 = 0, $3390 = 0, $3391 = 0, $3392 = 0, $3393 = 0, $3394 = 0, $3395 = 0, $3396 = 0, $3397 = 0, $3398 = 0, $3399 = 0, $34 = 0, $340 = 0, $3400 = 0, $3401 = 0, $3402 = 0, $3403 = 0, $3404 = 0;
- var $3405 = 0, $3406 = 0, $3407 = 0, $3408 = 0, $3409 = 0, $341 = 0, $3410 = 0, $3411 = 0, $3412 = 0, $3413 = 0, $3414 = 0, $3415 = 0, $3416 = 0, $3417 = 0, $3418 = 0, $3419 = 0, $342 = 0, $3420 = 0, $3421 = 0, $3422 = 0;
- var $3423 = 0, $3424 = 0, $3425 = 0, $3426 = 0, $3427 = 0, $3428 = 0, $3429 = 0, $343 = 0, $3430 = 0, $3431 = 0, $3432 = 0, $3433 = 0, $3434 = 0, $3435 = 0, $3436 = 0, $3437 = 0, $3438 = 0, $3439 = 0, $344 = 0, $3440 = 0;
- var $3441 = 0, $3442 = 0, $3443 = 0, $3444 = 0, $3445 = 0, $3446 = 0, $3447 = 0, $3448 = 0, $3449 = 0, $345 = 0, $3450 = 0, $3451 = 0, $3452 = 0, $3453 = 0, $3454 = 0, $3455 = 0, $3456 = 0, $3457 = 0, $3458 = 0, $3459 = 0;
- var $346 = 0, $3460 = 0, $3461 = 0, $3462 = 0, $3463 = 0, $3464 = 0, $3465 = 0, $3466 = 0, $3467 = 0, $3468 = 0, $3469 = 0, $347 = 0, $3470 = 0, $3471 = 0, $3472 = 0, $3473 = 0, $3474 = 0, $3475 = 0, $3476 = 0, $3477 = 0;
- var $3478 = 0, $3479 = 0, $348 = 0, $3480 = 0, $3481 = 0, $3482 = 0, $3483 = 0, $3484 = 0, $3485 = 0, $3486 = 0, $3487 = 0, $3488 = 0, $3489 = 0, $349 = 0, $3490 = 0, $3491 = 0, $3492 = 0, $3493 = 0, $3494 = 0, $3495 = 0;
- var $3496 = 0, $3497 = 0, $3498 = 0, $3499 = 0, $35 = 0, $350 = 0, $3500 = 0, $3501 = 0, $3502 = 0, $3503 = 0, $3504 = 0, $3505 = 0, $3506 = 0, $3507 = 0, $3508 = 0, $3509 = 0, $351 = 0, $3510 = 0, $3511 = 0, $3512 = 0;
- var $3513 = 0, $3514 = 0, $3515 = 0, $3516 = 0, $3517 = 0, $3518 = 0, $3519 = 0, $352 = 0, $3520 = 0, $3521 = 0, $3522 = 0, $3523 = 0, $3524 = 0, $3525 = 0, $3526 = 0, $3527 = 0, $3528 = 0, $3529 = 0, $353 = 0, $3530 = 0;
- var $3531 = 0, $3532 = 0, $3533 = 0, $3534 = 0, $3535 = 0, $3536 = 0, $3537 = 0, $3538 = 0, $3539 = 0, $354 = 0, $3540 = 0, $3541 = 0, $3542 = 0, $3543 = 0, $3544 = 0, $3545 = 0, $3546 = 0, $3547 = 0, $3548 = 0, $3549 = 0;
- var $355 = 0, $3550 = 0, $3551 = 0, $3552 = 0, $3553 = 0, $3554 = 0, $3555 = 0, $3556 = 0, $3557 = 0, $3558 = 0, $3559 = 0, $356 = 0, $3560 = 0, $3561 = 0, $3562 = 0, $3563 = 0, $3564 = 0, $3565 = 0, $3566 = 0, $3567 = 0;
- var $3568 = 0, $3569 = 0, $357 = 0, $3570 = 0, $3571 = 0, $3572 = 0, $3573 = 0, $3574 = 0, $3575 = 0, $3576 = 0, $358 = 0, $359 = 0, $36 = 0, $360 = 0, $361 = 0, $362 = 0, $363 = 0, $364 = 0, $365 = 0, $366 = 0;
- var $367 = 0, $368 = 0, $369 = 0, $37 = 0, $370 = 0, $371 = 0, $372 = 0, $373 = 0, $374 = 0, $375 = 0, $376 = 0, $377 = 0, $378 = 0, $379 = 0, $38 = 0, $380 = 0, $381 = 0, $382 = 0, $383 = 0, $384 = 0;
- var $385 = 0, $386 = 0, $387 = 0, $388 = 0, $389 = 0, $39 = 0, $390 = 0, $391 = 0, $392 = 0, $393 = 0, $394 = 0, $395 = 0, $396 = 0, $397 = 0, $398 = 0, $399 = 0, $4 = 0, $40 = 0, $400 = 0, $401 = 0;
- var $402 = 0, $403 = 0, $404 = 0, $405 = 0, $406 = 0, $407 = 0, $408 = 0, $409 = 0, $41 = 0, $410 = 0, $411 = 0, $412 = 0, $413 = 0, $414 = 0, $415 = 0, $416 = 0, $417 = 0, $418 = 0, $419 = 0, $42 = 0;
- var $420 = 0, $421 = 0, $422 = 0, $423 = 0, $424 = 0, $425 = 0, $426 = 0, $427 = 0, $428 = 0, $429 = 0, $43 = 0, $430 = 0, $431 = 0, $432 = 0, $433 = 0, $434 = 0, $435 = 0, $436 = 0, $437 = 0, $438 = 0;
- var $439 = 0, $44 = 0, $440 = 0, $441 = 0, $442 = 0, $443 = 0, $444 = 0, $445 = 0, $446 = 0, $447 = 0, $448 = 0, $449 = 0, $45 = 0, $450 = 0, $451 = 0, $452 = 0, $453 = 0, $454 = 0, $455 = 0, $456 = 0;
- var $457 = 0, $458 = 0, $459 = 0, $46 = 0, $460 = 0, $461 = 0, $462 = 0, $463 = 0, $464 = 0, $465 = 0, $466 = 0, $467 = 0, $468 = 0, $469 = 0, $47 = 0, $470 = 0, $471 = 0, $472 = 0, $473 = 0, $474 = 0;
- var $475 = 0, $476 = 0, $477 = 0, $478 = 0, $479 = 0, $48 = 0, $480 = 0, $481 = 0, $482 = 0, $483 = 0, $484 = 0, $485 = 0, $486 = 0, $487 = 0, $488 = 0, $489 = 0, $49 = 0, $490 = 0, $491 = 0, $492 = 0;
- var $493 = 0, $494 = 0, $495 = 0, $496 = 0, $497 = 0, $498 = 0, $499 = 0, $5 = 0, $50 = 0, $500 = 0, $501 = 0, $502 = 0, $503 = 0, $504 = 0, $505 = 0, $506 = 0, $507 = 0, $508 = 0, $509 = 0, $51 = 0;
- var $510 = 0, $511 = 0, $512 = 0, $513 = 0, $514 = 0, $515 = 0, $516 = 0, $517 = 0, $518 = 0, $519 = 0, $52 = 0, $520 = 0, $521 = 0, $522 = 0, $523 = 0, $524 = 0, $525 = 0, $526 = 0, $527 = 0, $528 = 0;
- var $529 = 0, $53 = 0, $530 = 0, $531 = 0, $532 = 0, $533 = 0, $534 = 0, $535 = 0, $536 = 0, $537 = 0, $538 = 0, $539 = 0, $54 = 0, $540 = 0, $541 = 0, $542 = 0, $543 = 0, $544 = 0, $545 = 0, $546 = 0;
- var $547 = 0, $548 = 0, $549 = 0, $55 = 0, $550 = 0, $551 = 0, $552 = 0, $553 = 0, $554 = 0, $555 = 0, $556 = 0, $557 = 0, $558 = 0, $559 = 0, $56 = 0, $560 = 0, $561 = 0, $562 = 0, $563 = 0, $564 = 0;
- var $565 = 0, $566 = 0, $567 = 0, $568 = 0, $569 = 0, $57 = 0, $570 = 0, $571 = 0, $572 = 0, $573 = 0, $574 = 0, $575 = 0, $576 = 0, $577 = 0, $578 = 0, $579 = 0, $58 = 0, $580 = 0, $581 = 0, $582 = 0;
- var $583 = 0, $584 = 0, $585 = 0, $586 = 0, $587 = 0, $588 = 0, $589 = 0, $59 = 0, $590 = 0, $591 = 0, $592 = 0, $593 = 0, $594 = 0, $595 = 0, $596 = 0, $597 = 0, $598 = 0, $599 = 0, $6 = 0, $60 = 0;
- var $600 = 0, $601 = 0, $602 = 0, $603 = 0, $604 = 0, $605 = 0, $606 = 0, $607 = 0, $608 = 0, $609 = 0, $61 = 0, $610 = 0, $611 = 0, $612 = 0, $613 = 0, $614 = 0, $615 = 0, $616 = 0, $617 = 0, $618 = 0;
- var $619 = 0, $62 = 0, $620 = 0, $621 = 0, $622 = 0, $623 = 0, $624 = 0, $625 = 0, $626 = 0, $627 = 0, $628 = 0, $629 = 0, $63 = 0, $630 = 0, $631 = 0, $632 = 0, $633 = 0, $634 = 0, $635 = 0, $636 = 0;
- var $637 = 0, $638 = 0, $639 = 0, $64 = 0, $640 = 0, $641 = 0, $642 = 0, $643 = 0, $644 = 0, $645 = 0, $646 = 0, $647 = 0, $648 = 0, $649 = 0, $65 = 0, $650 = 0, $651 = 0, $652 = 0, $653 = 0, $654 = 0;
- var $655 = 0, $656 = 0, $657 = 0, $658 = 0, $659 = 0, $66 = 0, $660 = 0, $661 = 0, $662 = 0, $663 = 0, $664 = 0, $665 = 0, $666 = 0, $667 = 0, $668 = 0, $669 = 0, $67 = 0, $670 = 0, $671 = 0, $672 = 0;
- var $673 = 0, $674 = 0, $675 = 0, $676 = 0, $677 = 0, $678 = 0, $679 = 0, $68 = 0, $680 = 0, $681 = 0, $682 = 0, $683 = 0, $684 = 0, $685 = 0, $686 = 0, $687 = 0, $688 = 0, $689 = 0, $69 = 0, $690 = 0;
- var $691 = 0, $692 = 0, $693 = 0, $694 = 0, $695 = 0, $696 = 0, $697 = 0, $698 = 0, $699 = 0, $7 = 0, $70 = 0, $700 = 0, $701 = 0, $702 = 0, $703 = 0, $704 = 0, $705 = 0, $706 = 0, $707 = 0, $708 = 0;
- var $709 = 0, $71 = 0, $710 = 0, $711 = 0, $712 = 0, $713 = 0, $714 = 0, $715 = 0, $716 = 0, $717 = 0, $718 = 0, $719 = 0, $72 = 0, $720 = 0, $721 = 0, $722 = 0, $723 = 0, $724 = 0, $725 = 0, $726 = 0;
- var $727 = 0, $728 = 0, $729 = 0, $73 = 0, $730 = 0, $731 = 0, $732 = 0, $733 = 0, $734 = 0, $735 = 0, $736 = 0, $737 = 0, $738 = 0, $739 = 0, $74 = 0, $740 = 0, $741 = 0, $742 = 0, $743 = 0, $744 = 0;
- var $745 = 0, $746 = 0, $747 = 0, $748 = 0, $749 = 0, $75 = 0, $750 = 0, $751 = 0, $752 = 0, $753 = 0, $754 = 0, $755 = 0, $756 = 0, $757 = 0, $758 = 0, $759 = 0, $76 = 0, $760 = 0, $761 = 0, $762 = 0;
- var $763 = 0, $764 = 0, $765 = 0, $766 = 0, $767 = 0, $768 = 0, $769 = 0, $77 = 0, $770 = 0, $771 = 0, $772 = 0, $773 = 0, $774 = 0, $775 = 0, $776 = 0, $777 = 0, $778 = 0, $779 = 0, $78 = 0, $780 = 0;
- var $781 = 0, $782 = 0, $783 = 0, $784 = 0, $785 = 0, $786 = 0, $787 = 0, $788 = 0, $789 = 0, $79 = 0, $790 = 0, $791 = 0, $792 = 0, $793 = 0, $794 = 0, $795 = 0, $796 = 0, $797 = 0, $798 = 0, $799 = 0;
- var $8 = 0, $80 = 0, $800 = 0, $801 = 0, $802 = 0, $803 = 0, $804 = 0, $805 = 0, $806 = 0, $807 = 0, $808 = 0, $809 = 0, $81 = 0, $810 = 0, $811 = 0, $812 = 0, $813 = 0, $814 = 0, $815 = 0, $816 = 0;
- var $817 = 0, $818 = 0, $819 = 0, $82 = 0, $820 = 0, $821 = 0, $822 = 0, $823 = 0, $824 = 0, $825 = 0, $826 = 0, $827 = 0, $828 = 0, $829 = 0, $83 = 0, $830 = 0, $831 = 0, $832 = 0, $833 = 0, $834 = 0;
- var $835 = 0, $836 = 0, $837 = 0, $838 = 0, $839 = 0, $84 = 0, $840 = 0, $841 = 0, $842 = 0, $843 = 0, $844 = 0, $845 = 0, $846 = 0, $847 = 0, $848 = 0, $849 = 0, $85 = 0, $850 = 0, $851 = 0, $852 = 0;
- var $853 = 0, $854 = 0, $855 = 0, $856 = 0, $857 = 0, $858 = 0, $859 = 0, $86 = 0, $860 = 0, $861 = 0, $862 = 0, $863 = 0, $864 = 0, $865 = 0, $866 = 0, $867 = 0, $868 = 0, $869 = 0, $87 = 0, $870 = 0;
- var $871 = 0, $872 = 0, $873 = 0, $874 = 0, $875 = 0, $876 = 0, $877 = 0, $878 = 0, $879 = 0, $88 = 0, $880 = 0, $881 = 0, $882 = 0, $883 = 0, $884 = 0, $885 = 0, $886 = 0, $887 = 0, $888 = 0, $889 = 0;
- var $89 = 0, $890 = 0, $891 = 0, $892 = 0, $893 = 0, $894 = 0, $895 = 0, $896 = 0, $897 = 0, $898 = 0, $899 = 0, $9 = 0, $90 = 0, $900 = 0, $901 = 0, $902 = 0, $903 = 0, $904 = 0, $905 = 0, $906 = 0;
- var $907 = 0, $908 = 0, $909 = 0, $91 = 0, $910 = 0, $911 = 0, $912 = 0, $913 = 0, $914 = 0, $915 = 0, $916 = 0, $917 = 0, $918 = 0, $919 = 0, $92 = 0, $920 = 0, $921 = 0, $922 = 0, $923 = 0, $924 = 0;
- var $925 = 0, $926 = 0, $927 = 0, $928 = 0, $929 = 0, $93 = 0, $930 = 0, $931 = 0, $932 = 0, $933 = 0, $934 = 0, $935 = 0, $936 = 0, $937 = 0, $938 = 0, $939 = 0, $94 = 0, $940 = 0, $941 = 0, $942 = 0;
- var $943 = 0, $944 = 0, $945 = 0, $946 = 0, $947 = 0, $948 = 0, $949 = 0, $95 = 0, $950 = 0, $951 = 0, $952 = 0, $953 = 0, $954 = 0, $955 = 0, $956 = 0, $957 = 0, $958 = 0, $959 = 0, $96 = 0, $960 = 0;
- var $961 = 0, $962 = 0, $963 = 0, $964 = 0, $965 = 0, $966 = 0, $967 = 0, $968 = 0, $969 = 0, $97 = 0, $970 = 0, $971 = 0, $972 = 0, $973 = 0, $974 = 0, $975 = 0, $976 = 0, $977 = 0, $978 = 0, $979 = 0;
- var $98 = 0, $980 = 0, $981 = 0, $982 = 0, $983 = 0, $984 = 0, $985 = 0, $986 = 0, $987 = 0, $988 = 0, $989 = 0, $99 = 0, $990 = 0, $991 = 0, $992 = 0, $993 = 0, $994 = 0, $995 = 0, $996 = 0, $997 = 0;
- var $998 = 0, $999 = 0, $or$cond = 0, $or$cond12 = 0, $or$cond14 = 0, $or$cond16 = 0, $or$cond18 = 0, $or$cond3 = 0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 1472|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(1472|0);
- $vararg_buffer = sp;
- $3 = sp + 908|0;
- $7 = sp + 920|0;
- $10 = sp + 88|0;
- $17 = sp + 56|0;
- $18 = sp + 1336|0;
- $30 = sp + 1320|0;
- $1 = $0;
- $19 = $18;
- $20 = 128;
- $21 = 0;
- $16 = 0;
- $8 = $7;
- $11 = $10;
- $13 = 200;
- $5 = 0;
- $6 = 0;
- $4 = 0;
- $2 = -2;
- $33 = $8;
- $9 = $33;
- $34 = $11;
- $12 = $34;
- L1: while(1) {
-  $37 = $5;
-  $38 = $37&65535;
-  $39 = $9;
-  HEAP16[$39>>1] = $38;
-  $40 = $8;
-  $41 = $13;
-  $42 = (($40) + ($41<<1)|0);
-  $43 = ((($42)) + -2|0);
-  $44 = $9;
-  $45 = ($43>>>0)<=($44>>>0);
-  if ($45) {
-   $46 = $9;
-   $47 = $8;
-   $48 = $46;
-   $49 = $47;
-   $50 = (($48) - ($49))|0;
-   $51 = (($50|0) / 2)&-1;
-   $52 = (($51) + 1)|0;
-   $22 = $52;
-   $53 = $13;
-   $54 = (10000)<=($53>>>0);
-   if ($54) {
-    label = 538;
-    break;
-   }
-   $55 = $13;
-   $56 = $55<<1;
-   $13 = $56;
-   $57 = $13;
-   $58 = (10000)<($57>>>0);
-   $$ = $58 ? 10000 : $56;
-   $13 = $$;
-   $59 = $8;
-   $23 = $59;
-   $60 = $1;
-   $61 = HEAP32[$60>>2]|0;
-   $62 = $13;
-   $63 = ($62*6)|0;
-   $64 = (($63) + 3)|0;
-   $65 = (_mrb_malloc($61,$64)|0);
-   $24 = $65;
-   $66 = $24;
-   $67 = ($66|0)!=(0|0);
-   if (!($67)) {
-    label = 538;
-    break;
-   }
-   $68 = $24;
-   $69 = $8;
-   $70 = $22;
-   $71 = $70<<1;
-   _memcpy(($68|0),($69|0),($71|0))|0;
-   $72 = $24;
-   $8 = $72;
-   $73 = $13;
-   $74 = $73<<1;
-   $75 = (($74) + 3)|0;
-   $25 = $75;
-   $76 = $25;
-   $77 = (($76>>>0) / 4)&-1;
-   $78 = $24;
-   $79 = (($78) + ($77<<2)|0);
-   $24 = $79;
-   $80 = $24;
-   $81 = $11;
-   $82 = $22;
-   $83 = $82<<2;
-   _memcpy(($80|0),($81|0),($83|0))|0;
-   $84 = $24;
-   $11 = $84;
-   $85 = $13;
-   $86 = $85<<2;
-   $87 = (($86) + 3)|0;
-   $26 = $87;
-   $88 = $26;
-   $89 = (($88>>>0) / 4)&-1;
-   $90 = $24;
-   $91 = (($90) + ($89<<2)|0);
-   $24 = $91;
-   $92 = $23;
-   $93 = ($92|0)!=($7|0);
-   if ($93) {
-    $94 = $1;
-    $95 = HEAP32[$94>>2]|0;
-    $96 = $23;
-    _mrb_free($95,$96);
-   }
-   $97 = $8;
-   $98 = $22;
-   $99 = (($97) + ($98<<1)|0);
-   $100 = ((($99)) + -2|0);
-   $9 = $100;
-   $101 = $11;
-   $102 = $22;
-   $103 = (($101) + ($102<<2)|0);
-   $104 = ((($103)) + -4|0);
-   $12 = $104;
-   $105 = $8;
-   $106 = $13;
-   $107 = (($105) + ($106<<1)|0);
-   $108 = ((($107)) + -2|0);
-   $109 = $9;
-   $110 = ($108>>>0)<=($109>>>0);
-   if ($110) {
-    label = 537;
-    break;
-   }
-  }
-  $111 = $5;
-  $112 = ($111|0)==(3);
-  if ($112) {
-   label = 536;
-   break;
-  }
-  $113 = $5;
-  $114 = (3344 + ($113<<1)|0);
-  $115 = HEAP16[$114>>1]|0;
-  $116 = $115 << 16 >> 16;
-  $14 = $116;
-  $117 = $14;
-  $118 = ($117|0)==(-771);
-  do {
-   if ($118) {
-    label = 26;
-   } else {
-    $119 = $2;
-    $120 = ($119|0)==(-2);
-    if ($120) {
-     $121 = $1;
-     $122 = (_yylex($3,$121)|0);
-     $2 = $122;
-    }
-    $123 = $2;
-    $124 = ($123|0)<=(0);
-    if ($124) {
-     $16 = 0;
-     $2 = 0;
-    } else {
-     $125 = $2;
-     $126 = ($125>>>0)<=(372);
-     if ($126) {
-      $127 = $2;
-      $128 = (58442 + ($127)|0);
-      $129 = HEAP8[$128>>0]|0;
-      $130 = $129&255;
-      $131 = $130;
-     } else {
-      $131 = 2;
-     }
-     $16 = $131;
-    }
-    $132 = $16;
-    $133 = $14;
-    $134 = (($133) + ($132))|0;
-    $14 = $134;
-    $135 = $14;
-    $136 = ($135|0)<(0);
-    $137 = $14;
-    $138 = (10639)<($137|0);
-    $or$cond = $136 | $138;
-    if ($or$cond) {
-     label = 26;
-    } else {
-     $139 = $14;
-     $140 = (5280 + ($139<<1)|0);
-     $141 = HEAP16[$140>>1]|0;
-     $142 = $141 << 16 >> 16;
-     $143 = $16;
-     $144 = ($142|0)!=($143|0);
-     if ($144) {
-      label = 26;
-     } else {
-      $145 = $14;
-      $146 = (26560 + ($145<<1)|0);
-      $147 = HEAP16[$146>>1]|0;
-      $148 = $147 << 16 >> 16;
-      $14 = $148;
-      $149 = $14;
-      $150 = ($149|0)<=(0);
-      if ($150) {
-       $151 = $14;
-       $152 = ($151|0)==(0);
-       $153 = $14;
-       $154 = ($153|0)==(-556);
-       $or$cond3 = $152 | $154;
-       if ($or$cond3) {
-        label = 513;
-        break;
-       }
-       $155 = $14;
-       $156 = (0 - ($155))|0;
-       $14 = $156;
-       label = 27;
-       break;
-      }
-      $157 = $6;
-      $158 = ($157|0)!=(0);
-      if ($158) {
-       $159 = $6;
-       $160 = (($159) + -1)|0;
-       $6 = $160;
-      }
-      $2 = -2;
-      $161 = $14;
-      $5 = $161;
-      $162 = $12;
-      $163 = ((($162)) + 4|0);
-      $12 = $163;
-      ;HEAP32[$163>>2]=HEAP32[$3>>2]|0;
-     }
-    }
-   }
-  } while(0);
-  if ((label|0) == 26) {
-   label = 0;
-   $164 = $5;
-   $165 = (47840 + ($164<<1)|0);
-   $166 = HEAP16[$165>>1]|0;
-   $167 = $166&65535;
-   $14 = $167;
-   $168 = $14;
-   $169 = ($168|0)==(0);
-   if ($169) {
-    label = 513;
-   } else {
-    label = 27;
-   }
-  }
-  do {
-   if ((label|0) == 27) {
-    label = 0;
-    $170 = $14;
-    $171 = (58815 + ($170)|0);
-    $172 = HEAP8[$171>>0]|0;
-    $173 = $172&255;
-    $21 = $173;
-    $174 = $12;
-    $175 = $21;
-    $176 = (1 - ($175))|0;
-    $177 = (($174) + ($176<<2)|0);
-    ;HEAP32[$17>>2]=HEAP32[$177>>2]|0;
-    $178 = $14;
-    do {
-     switch ($178|0) {
-     case 2:  {
-      $179 = $1;
-      $180 = ((($179)) + 40|0);
-      HEAP32[$180>>2] = 0;
-      $181 = $1;
-      $182 = ((($181)) + 76|0);
-      $183 = HEAP32[$182>>2]|0;
-      $184 = ($183|0)!=(0|0);
-      if (!($184)) {
-       $185 = $1;
-       $186 = (_cons_gen($185,0,0)|0);
-       $187 = $1;
-       $188 = ((($187)) + 76|0);
-       HEAP32[$188>>2] = $186;
-      }
-      break;
-     }
-     case 3:  {
-      $189 = $1;
-      $190 = $12;
-      $191 = HEAP32[$190>>2]|0;
-      $192 = (_new_scope($189,$191)|0);
-      $193 = $1;
-      $194 = ((($193)) + 1144|0);
-      HEAP32[$194>>2] = $192;
-      $195 = $12;
-      $196 = HEAP32[$195>>2]|0;
-      $197 = ($196|0)!=(0|0);
-      if ($197) {
-       $198 = $12;
-       $199 = HEAP32[$198>>2]|0;
-       $200 = ((($199)) + 10|0);
-       $201 = HEAP16[$200>>1]|0;
-       $202 = $1;
-       $203 = ((($202)) + 1144|0);
-       $204 = HEAP32[$203>>2]|0;
-       $205 = ((($204)) + 10|0);
-       HEAP16[$205>>1] = $201;
-       $206 = $12;
-       $207 = HEAP32[$206>>2]|0;
-       $208 = ((($207)) + 8|0);
-       $209 = HEAP16[$208>>1]|0;
-       $210 = $1;
-       $211 = ((($210)) + 1144|0);
-       $212 = HEAP32[$211>>2]|0;
-       $213 = ((($212)) + 8|0);
-       HEAP16[$213>>1] = $209;
-      }
-      break;
-     }
-     case 4:  {
-      $214 = $12;
-      $215 = ((($214)) + -4|0);
-      $216 = HEAP32[$215>>2]|0;
-      HEAP32[$17>>2] = $216;
-      break;
-     }
-     case 5:  {
-      $217 = $1;
-      $218 = (_new_begin($217,0)|0);
-      HEAP32[$17>>2] = $218;
-      break;
-     }
-     case 6:  {
-      $219 = $1;
-      $220 = $12;
-      $221 = HEAP32[$220>>2]|0;
-      $222 = (_new_begin($219,$221)|0);
-      HEAP32[$17>>2] = $222;
-      $223 = $12;
-      $224 = HEAP32[$223>>2]|0;
-      $225 = ($224|0)!=(0|0);
-      if ($225) {
-       $226 = $12;
-       $227 = HEAP32[$226>>2]|0;
-       $228 = ((($227)) + 10|0);
-       $229 = HEAP16[$228>>1]|0;
-       $230 = HEAP32[$17>>2]|0;
-       $231 = ((($230)) + 10|0);
-       HEAP16[$231>>1] = $229;
-       $232 = $12;
-       $233 = HEAP32[$232>>2]|0;
-       $234 = ((($233)) + 8|0);
-       $235 = HEAP16[$234>>1]|0;
-       $236 = HEAP32[$17>>2]|0;
-       $237 = ((($236)) + 8|0);
-       HEAP16[$237>>1] = $235;
-      }
-      break;
-     }
-     case 7:  {
-      $238 = $1;
-      $239 = $12;
-      $240 = ((($239)) + -8|0);
-      $241 = HEAP32[$240>>2]|0;
-      $242 = $1;
-      $243 = $12;
-      $244 = HEAP32[$243>>2]|0;
-      $245 = (_list1_gen($242,$244)|0);
-      $246 = (_append_gen($238,$241,$245)|0);
-      HEAP32[$17>>2] = $246;
-      break;
-     }
-     case 8:  {
-      $247 = $1;
-      $248 = (_new_begin($247,0)|0);
-      HEAP32[$17>>2] = $248;
-      break;
-     }
-     case 10:  {
-      $249 = $1;
-      $250 = (_local_switch($249)|0);
-      HEAP32[$17>>2] = $250;
-      break;
-     }
-     case 11:  {
-      $251 = $1;
-      _yyerror($251,59371);
-      $252 = $1;
-      $253 = $12;
-      $254 = ((($253)) + -12|0);
-      $255 = HEAP32[$254>>2]|0;
-      _local_resume($252,$255);
-      HEAP32[$17>>2] = 0;
-      break;
-     }
-     case 12:  {
-      $256 = $12;
-      $257 = ((($256)) + -8|0);
-      $258 = HEAP32[$257>>2]|0;
-      $259 = ($258|0)!=(0|0);
-      if ($259) {
-       $260 = $1;
-       $261 = $12;
-       $262 = ((($261)) + -12|0);
-       $263 = HEAP32[$262>>2]|0;
-       $264 = $12;
-       $265 = ((($264)) + -8|0);
-       $266 = HEAP32[$265>>2]|0;
-       $267 = $12;
-       $268 = ((($267)) + -4|0);
-       $269 = HEAP32[$268>>2]|0;
-       $270 = (_new_rescue($260,$263,$266,$269)|0);
-       HEAP32[$17>>2] = $270;
-       $271 = $12;
-       $272 = ((($271)) + -12|0);
-       $273 = HEAP32[$272>>2]|0;
-       $274 = ($273|0)!=(0|0);
-       if ($274) {
-        $275 = $12;
-        $276 = ((($275)) + -12|0);
-        $277 = HEAP32[$276>>2]|0;
-        $278 = ((($277)) + 10|0);
-        $279 = HEAP16[$278>>1]|0;
-        $280 = HEAP32[$17>>2]|0;
-        $281 = ((($280)) + 10|0);
-        HEAP16[$281>>1] = $279;
-        $282 = $12;
-        $283 = ((($282)) + -12|0);
-        $284 = HEAP32[$283>>2]|0;
-        $285 = ((($284)) + 8|0);
-        $286 = HEAP16[$285>>1]|0;
-        $287 = HEAP32[$17>>2]|0;
-        $288 = ((($287)) + 8|0);
-        HEAP16[$288>>1] = $286;
-       }
-      } else {
-       $289 = $12;
-       $290 = ((($289)) + -4|0);
-       $291 = HEAP32[$290>>2]|0;
-       $292 = ($291|0)!=(0|0);
-       if ($292) {
-        $293 = $1;
-        _yywarn($293,59391);
-        $294 = $1;
-        $295 = $12;
-        $296 = ((($295)) + -12|0);
-        $297 = HEAP32[$296>>2]|0;
-        $298 = $1;
-        $299 = $12;
-        $300 = ((($299)) + -4|0);
-        $301 = HEAP32[$300>>2]|0;
-        $302 = (_list1_gen($298,$301)|0);
-        $303 = (_append_gen($294,$297,$302)|0);
-        $$sink = $303;
-       } else {
-        $304 = $12;
-        $305 = ((($304)) + -12|0);
-        $306 = HEAP32[$305>>2]|0;
-        $$sink = $306;
-       }
-       HEAP32[$17>>2] = $$sink;
-      }
-      $307 = $12;
-      $308 = HEAP32[$307>>2]|0;
-      $309 = ($308|0)!=(0|0);
-      if ($309) {
-       $310 = HEAP32[$17>>2]|0;
-       $311 = ($310|0)!=(0|0);
-       $312 = $1;
-       if ($311) {
-        $313 = HEAP32[$17>>2]|0;
-        $314 = $12;
-        $315 = HEAP32[$314>>2]|0;
-        $316 = (_new_ensure($312,$313,$315)|0);
-        $$sink5 = $316;
-       } else {
-        $317 = $12;
-        $318 = HEAP32[$317>>2]|0;
-        $319 = $1;
-        $320 = $1;
-        $321 = (_new_nil($320)|0);
-        $322 = (_list1_gen($319,$321)|0);
-        $323 = (_append_gen($312,$318,$322)|0);
-        $$sink5 = $323;
-       }
-       HEAP32[$17>>2] = $$sink5;
-      }
-      break;
-     }
-     case 13:  {
-      $324 = $12;
-      $325 = ((($324)) + -4|0);
-      $326 = HEAP32[$325>>2]|0;
-      HEAP32[$17>>2] = $326;
-      break;
-     }
-     case 14:  {
-      $327 = $1;
-      $328 = (_new_begin($327,0)|0);
-      HEAP32[$17>>2] = $328;
-      break;
-     }
-     case 15:  {
-      $329 = $1;
-      $330 = $12;
-      $331 = HEAP32[$330>>2]|0;
-      $332 = (_new_begin($329,$331)|0);
-      HEAP32[$17>>2] = $332;
-      $333 = $12;
-      $334 = HEAP32[$333>>2]|0;
-      $335 = ($334|0)!=(0|0);
-      if ($335) {
-       $336 = $12;
-       $337 = HEAP32[$336>>2]|0;
-       $338 = ((($337)) + 10|0);
-       $339 = HEAP16[$338>>1]|0;
-       $340 = HEAP32[$17>>2]|0;
-       $341 = ((($340)) + 10|0);
-       HEAP16[$341>>1] = $339;
-       $342 = $12;
-       $343 = HEAP32[$342>>2]|0;
-       $344 = ((($343)) + 8|0);
-       $345 = HEAP16[$344>>1]|0;
-       $346 = HEAP32[$17>>2]|0;
-       $347 = ((($346)) + 8|0);
-       HEAP16[$347>>1] = $345;
-      }
-      break;
-     }
-     case 16:  {
-      $348 = $1;
-      $349 = $12;
-      $350 = ((($349)) + -8|0);
-      $351 = HEAP32[$350>>2]|0;
-      $352 = $1;
-      $353 = $12;
-      $354 = HEAP32[$353>>2]|0;
-      $355 = (_list1_gen($352,$354)|0);
-      $356 = (_append_gen($348,$351,$355)|0);
-      HEAP32[$17>>2] = $356;
-      break;
-     }
-     case 17:  {
-      $357 = $1;
-      $358 = $12;
-      $359 = HEAP32[$358>>2]|0;
-      $360 = (_new_begin($357,$359)|0);
-      HEAP32[$17>>2] = $360;
-      break;
-     }
-     case 18:  {
-      $361 = $1;
-      $362 = ((($361)) + 40|0);
-      HEAP32[$362>>2] = 7;
-      break;
-     }
-     case 19:  {
-      $363 = $1;
-      $364 = $12;
-      $365 = ((($364)) + -8|0);
-      $366 = HEAP32[$365>>2]|0;
-      $367 = $12;
-      $368 = HEAP32[$367>>2]|0;
-      $369 = (_new_alias($363,$366,$368)|0);
-      HEAP32[$17>>2] = $369;
-      break;
-     }
-     case 20:  {
-      $370 = $12;
-      $371 = HEAP32[$370>>2]|0;
-      HEAP32[$17>>2] = $371;
-      break;
-     }
-     case 21:  {
-      $372 = $1;
-      $373 = $12;
-      $374 = HEAP32[$373>>2]|0;
-      $375 = (_cond($374)|0);
-      $376 = $12;
-      $377 = ((($376)) + -8|0);
-      $378 = HEAP32[$377>>2]|0;
-      $379 = (_new_if($372,$375,$378,0)|0);
-      HEAP32[$17>>2] = $379;
-      break;
-     }
-     case 22:  {
-      $380 = $1;
-      $381 = $12;
-      $382 = HEAP32[$381>>2]|0;
-      $383 = (_cond($382)|0);
-      $384 = $12;
-      $385 = ((($384)) + -8|0);
-      $386 = HEAP32[$385>>2]|0;
-      $387 = (_new_unless($380,$383,$386,0)|0);
-      HEAP32[$17>>2] = $387;
-      break;
-     }
-     case 23:  {
-      $388 = $1;
-      $389 = $12;
-      $390 = HEAP32[$389>>2]|0;
-      $391 = (_cond($390)|0);
-      $392 = $12;
-      $393 = ((($392)) + -8|0);
-      $394 = HEAP32[$393>>2]|0;
-      $395 = (_new_while($388,$391,$394)|0);
-      HEAP32[$17>>2] = $395;
-      break;
-     }
-     case 24:  {
-      $396 = $1;
-      $397 = $12;
-      $398 = HEAP32[$397>>2]|0;
-      $399 = (_cond($398)|0);
-      $400 = $12;
-      $401 = ((($400)) + -8|0);
-      $402 = HEAP32[$401>>2]|0;
-      $403 = (_new_until($396,$399,$402)|0);
-      HEAP32[$17>>2] = $403;
-      break;
-     }
-     case 25:  {
-      $404 = $1;
-      $405 = $12;
-      $406 = ((($405)) + -8|0);
-      $407 = HEAP32[$406>>2]|0;
-      $408 = $1;
-      $409 = $1;
-      $410 = $12;
-      $411 = HEAP32[$410>>2]|0;
-      $412 = (_list3_gen($409,0,0,$411)|0);
-      $413 = (_list1_gen($408,$412)|0);
-      $414 = (_new_rescue($404,$407,$413,0)|0);
-      HEAP32[$17>>2] = $414;
-      break;
-     }
-     case 26:  {
-      $415 = $1;
-      _yyerror($415,59422);
-      $416 = $1;
-      $417 = $12;
-      $418 = ((($417)) + -4|0);
-      $419 = HEAP32[$418>>2]|0;
-      $420 = (_new_postexe($416,$419)|0);
-      HEAP32[$17>>2] = $420;
-      break;
-     }
-     case 28:  {
-      $421 = $1;
-      $422 = $12;
-      $423 = ((($422)) + -8|0);
-      $424 = HEAP32[$423>>2]|0;
-      $425 = $12;
-      $426 = HEAP32[$425>>2]|0;
-      $427 = (_new_masgn($421,$424,$426)|0);
-      HEAP32[$17>>2] = $427;
-      break;
-     }
-     case 29:  {
-      $428 = $1;
-      $429 = $12;
-      $430 = ((($429)) + -8|0);
-      $431 = HEAP32[$430>>2]|0;
-      $432 = $12;
-      $433 = ((($432)) + -4|0);
-      $434 = HEAP32[$433>>2]|0;
-      $435 = $12;
-      $436 = HEAP32[$435>>2]|0;
-      $437 = (_new_op_asgn($428,$431,$434,$436)|0);
-      HEAP32[$17>>2] = $437;
-      break;
-     }
-     case 30:  {
-      $438 = $1;
-      $439 = $1;
-      $440 = $12;
-      $441 = ((($440)) + -20|0);
-      $442 = HEAP32[$441>>2]|0;
-      $443 = $1;
-      $444 = (_intern_gen($443,69083,2)|0);
-      $445 = $12;
-      $446 = ((($445)) + -12|0);
-      $447 = HEAP32[$446>>2]|0;
-      $448 = (_new_call($439,$442,$444,$447)|0);
-      $449 = $12;
-      $450 = ((($449)) + -4|0);
-      $451 = HEAP32[$450>>2]|0;
-      $452 = $12;
-      $453 = HEAP32[$452>>2]|0;
-      $454 = (_new_op_asgn($438,$448,$451,$453)|0);
-      HEAP32[$17>>2] = $454;
-      break;
-     }
-     case 31:  {
-      $455 = $1;
-      $456 = $1;
-      $457 = $12;
-      $458 = ((($457)) + -16|0);
-      $459 = HEAP32[$458>>2]|0;
-      $460 = $12;
-      $461 = ((($460)) + -8|0);
-      $462 = HEAP32[$461>>2]|0;
-      $463 = (_new_call($456,$459,$462,0)|0);
-      $464 = $12;
-      $465 = ((($464)) + -4|0);
-      $466 = HEAP32[$465>>2]|0;
-      $467 = $12;
-      $468 = HEAP32[$467>>2]|0;
-      $469 = (_new_op_asgn($455,$463,$466,$468)|0);
-      HEAP32[$17>>2] = $469;
-      break;
-     }
-     case 32:  {
-      $470 = $1;
-      $471 = $1;
-      $472 = $12;
-      $473 = ((($472)) + -16|0);
-      $474 = HEAP32[$473>>2]|0;
-      $475 = $12;
-      $476 = ((($475)) + -8|0);
-      $477 = HEAP32[$476>>2]|0;
-      $478 = (_new_call($471,$474,$477,0)|0);
-      $479 = $12;
-      $480 = ((($479)) + -4|0);
-      $481 = HEAP32[$480>>2]|0;
-      $482 = $12;
-      $483 = HEAP32[$482>>2]|0;
-      $484 = (_new_op_asgn($470,$478,$481,$483)|0);
-      HEAP32[$17>>2] = $484;
-      break;
-     }
-     case 33:  {
-      $485 = $1;
-      _yyerror($485,59439);
-      HEAP32[$17>>2] = 0;
-      break;
-     }
-     case 34:  {
-      $486 = $1;
-      $487 = $1;
-      $488 = $12;
-      $489 = ((($488)) + -16|0);
-      $490 = HEAP32[$489>>2]|0;
-      $491 = $12;
-      $492 = ((($491)) + -8|0);
-      $493 = HEAP32[$492>>2]|0;
-      $494 = (_new_call($487,$490,$493,0)|0);
-      $495 = $12;
-      $496 = ((($495)) + -4|0);
-      $497 = HEAP32[$496>>2]|0;
-      $498 = $12;
-      $499 = HEAP32[$498>>2]|0;
-      $500 = (_new_op_asgn($486,$494,$497,$499)|0);
-      HEAP32[$17>>2] = $500;
-      break;
-     }
-     case 35:  {
-      $501 = $1;
-      $502 = $12;
-      $503 = ((($502)) + -8|0);
-      $504 = HEAP32[$503>>2]|0;
-      _backref_error($501,$504);
-      $505 = $1;
-      $506 = (_new_begin($505,0)|0);
-      HEAP32[$17>>2] = $506;
-      break;
-     }
-     case 36:  {
-      $507 = $1;
-      $508 = $12;
-      $509 = ((($508)) + -8|0);
-      $510 = HEAP32[$509>>2]|0;
-      $511 = $1;
-      $512 = $12;
-      $513 = HEAP32[$512>>2]|0;
-      $514 = (_new_array($511,$513)|0);
-      $515 = (_new_asgn($507,$510,$514)|0);
-      HEAP32[$17>>2] = $515;
-      break;
-     }
-     case 37:  {
-      $516 = $1;
-      $517 = $12;
-      $518 = ((($517)) + -8|0);
-      $519 = HEAP32[$518>>2]|0;
-      $520 = $12;
-      $521 = HEAP32[$520>>2]|0;
-      $522 = (_new_masgn($516,$519,$521)|0);
-      HEAP32[$17>>2] = $522;
-      break;
-     }
-     case 38:  {
-      $523 = $1;
-      $524 = $12;
-      $525 = ((($524)) + -8|0);
-      $526 = HEAP32[$525>>2]|0;
-      $527 = $1;
-      $528 = $12;
-      $529 = HEAP32[$528>>2]|0;
-      $530 = (_new_array($527,$529)|0);
-      $531 = (_new_masgn($523,$526,$530)|0);
-      HEAP32[$17>>2] = $531;
-      break;
-     }
-     case 40:  {
-      $532 = $1;
-      $533 = $12;
-      $534 = ((($533)) + -8|0);
-      $535 = HEAP32[$534>>2]|0;
-      $536 = $12;
-      $537 = HEAP32[$536>>2]|0;
-      $538 = (_new_asgn($532,$535,$537)|0);
-      HEAP32[$17>>2] = $538;
-      break;
-     }
-     case 41:  {
-      $539 = $1;
-      $540 = $12;
-      $541 = ((($540)) + -8|0);
-      $542 = HEAP32[$541>>2]|0;
-      $543 = $12;
-      $544 = HEAP32[$543>>2]|0;
-      $545 = (_new_asgn($539,$542,$544)|0);
-      HEAP32[$17>>2] = $545;
-      break;
-     }
-     case 43:  {
-      $546 = $1;
-      $547 = $12;
-      $548 = ((($547)) + -8|0);
-      $549 = HEAP32[$548>>2]|0;
-      $550 = $12;
-      $551 = HEAP32[$550>>2]|0;
-      $552 = (_new_and($546,$549,$551)|0);
-      HEAP32[$17>>2] = $552;
-      break;
-     }
-     case 44:  {
-      $553 = $1;
-      $554 = $12;
-      $555 = ((($554)) + -8|0);
-      $556 = HEAP32[$555>>2]|0;
-      $557 = $12;
-      $558 = HEAP32[$557>>2]|0;
-      $559 = (_new_or($553,$556,$558)|0);
-      HEAP32[$17>>2] = $559;
-      break;
-     }
-     case 45:  {
-      $560 = $1;
-      $561 = $12;
-      $562 = HEAP32[$561>>2]|0;
-      $563 = (_cond($562)|0);
-      $564 = (_call_uni_op($560,$563,65619)|0);
-      HEAP32[$17>>2] = $564;
-      break;
-     }
-     case 46:  {
-      $565 = $1;
-      $566 = $12;
-      $567 = HEAP32[$566>>2]|0;
-      $568 = (_cond($567)|0);
-      $569 = (_call_uni_op($565,$568,65619)|0);
-      HEAP32[$17>>2] = $569;
-      break;
-     }
-     case 48:  {
-      $570 = $12;
-      $571 = HEAP32[$570>>2]|0;
-      $572 = ($571|0)!=(0|0);
-      if ($572) {
-       $575 = $12;
-       $576 = HEAP32[$575>>2]|0;
-       $$sink7 = $576;
-      } else {
-       $573 = $1;
-       $574 = (_new_nil($573)|0);
-       $$sink7 = $574;
-      }
-      HEAP32[$17>>2] = $$sink7;
-      break;
-     }
-     case 53:  {
-      $577 = $1;
-      _local_nest($577);
-      break;
-     }
-     case 54:  {
-      $578 = $1;
-      $579 = $12;
-      $580 = ((($579)) + -8|0);
-      $581 = HEAP32[$580>>2]|0;
-      $582 = $12;
-      $583 = ((($582)) + -4|0);
-      $584 = HEAP32[$583>>2]|0;
-      $585 = (_new_block($578,$581,$584)|0);
-      HEAP32[$17>>2] = $585;
-      $586 = $1;
-      _local_unnest($586);
-      break;
-     }
-     case 55:  {
-      $587 = $1;
-      $588 = $12;
-      $589 = ((($588)) + -4|0);
-      $590 = HEAP32[$589>>2]|0;
-      $591 = $12;
-      $592 = HEAP32[$591>>2]|0;
-      $593 = (_new_fcall($587,$590,$592)|0);
-      HEAP32[$17>>2] = $593;
-      break;
-     }
-     case 56:  {
-      $594 = $1;
-      $595 = $12;
-      $596 = ((($595)) + -4|0);
-      $597 = HEAP32[$596>>2]|0;
-      $598 = $12;
-      $599 = HEAP32[$598>>2]|0;
-      _args_with_block($594,$597,$599);
-      $600 = $1;
-      $601 = $12;
-      $602 = ((($601)) + -8|0);
-      $603 = HEAP32[$602>>2]|0;
-      $604 = $12;
-      $605 = ((($604)) + -4|0);
-      $606 = HEAP32[$605>>2]|0;
-      $607 = (_new_fcall($600,$603,$606)|0);
-      HEAP32[$17>>2] = $607;
-      break;
-     }
-     case 57:  {
-      $608 = $1;
-      $609 = $12;
-      $610 = ((($609)) + -12|0);
-      $611 = HEAP32[$610>>2]|0;
-      $612 = $12;
-      $613 = ((($612)) + -4|0);
-      $614 = HEAP32[$613>>2]|0;
-      $615 = $12;
-      $616 = HEAP32[$615>>2]|0;
-      $617 = (_new_call($608,$611,$614,$616)|0);
-      HEAP32[$17>>2] = $617;
-      break;
-     }
-     case 58:  {
-      $618 = $1;
-      $619 = $12;
-      $620 = ((($619)) + -4|0);
-      $621 = HEAP32[$620>>2]|0;
-      $622 = $12;
-      $623 = HEAP32[$622>>2]|0;
-      _args_with_block($618,$621,$623);
-      $624 = $1;
-      $625 = $12;
-      $626 = ((($625)) + -16|0);
-      $627 = HEAP32[$626>>2]|0;
-      $628 = $12;
-      $629 = ((($628)) + -8|0);
-      $630 = HEAP32[$629>>2]|0;
-      $631 = $12;
-      $632 = ((($631)) + -4|0);
-      $633 = HEAP32[$632>>2]|0;
-      $634 = (_new_call($624,$627,$630,$633)|0);
-      HEAP32[$17>>2] = $634;
-      break;
-     }
-     case 59:  {
-      $635 = $1;
-      $636 = $12;
-      $637 = ((($636)) + -12|0);
-      $638 = HEAP32[$637>>2]|0;
-      $639 = $12;
-      $640 = ((($639)) + -4|0);
-      $641 = HEAP32[$640>>2]|0;
-      $642 = $12;
-      $643 = HEAP32[$642>>2]|0;
-      $644 = (_new_call($635,$638,$641,$643)|0);
-      HEAP32[$17>>2] = $644;
-      break;
-     }
-     case 60:  {
-      $645 = $1;
-      $646 = $12;
-      $647 = ((($646)) + -4|0);
-      $648 = HEAP32[$647>>2]|0;
-      $649 = $12;
-      $650 = HEAP32[$649>>2]|0;
-      _args_with_block($645,$648,$650);
-      $651 = $1;
-      $652 = $12;
-      $653 = ((($652)) + -16|0);
-      $654 = HEAP32[$653>>2]|0;
-      $655 = $12;
-      $656 = ((($655)) + -8|0);
-      $657 = HEAP32[$656>>2]|0;
-      $658 = $12;
-      $659 = ((($658)) + -4|0);
-      $660 = HEAP32[$659>>2]|0;
-      $661 = (_new_call($651,$654,$657,$660)|0);
-      HEAP32[$17>>2] = $661;
-      break;
-     }
-     case 61:  {
-      $662 = $1;
-      $663 = $12;
-      $664 = HEAP32[$663>>2]|0;
-      $665 = (_new_super($662,$664)|0);
-      HEAP32[$17>>2] = $665;
-      break;
-     }
-     case 62:  {
-      $666 = $1;
-      $667 = $12;
-      $668 = HEAP32[$667>>2]|0;
-      $669 = (_new_yield($666,$668)|0);
-      HEAP32[$17>>2] = $669;
-      break;
-     }
-     case 63:  {
-      $670 = $1;
-      $671 = $1;
-      $672 = $12;
-      $673 = HEAP32[$672>>2]|0;
-      $674 = (_ret_args($671,$673)|0);
-      $675 = (_new_return($670,$674)|0);
-      HEAP32[$17>>2] = $675;
-      break;
-     }
-     case 64:  {
-      $676 = $1;
-      $677 = $1;
-      $678 = $12;
-      $679 = HEAP32[$678>>2]|0;
-      $680 = (_ret_args($677,$679)|0);
-      $681 = (_new_break($676,$680)|0);
-      HEAP32[$17>>2] = $681;
-      break;
-     }
-     case 65:  {
-      $682 = $1;
-      $683 = $1;
-      $684 = $12;
-      $685 = HEAP32[$684>>2]|0;
-      $686 = (_ret_args($683,$685)|0);
-      $687 = (_new_next($682,$686)|0);
-      HEAP32[$17>>2] = $687;
-      break;
-     }
-     case 66:  {
-      $688 = $12;
-      $689 = HEAP32[$688>>2]|0;
-      HEAP32[$17>>2] = $689;
-      break;
-     }
-     case 67:  {
-      $690 = $12;
-      $691 = ((($690)) + -4|0);
-      $692 = HEAP32[$691>>2]|0;
-      HEAP32[$17>>2] = $692;
-      break;
-     }
-     case 69:  {
-      $693 = $12;
-      $694 = ((($693)) + -4|0);
-      $695 = HEAP32[$694>>2]|0;
-      HEAP32[$17>>2] = $695;
-      break;
-     }
-     case 70:  {
-      $696 = $1;
-      $697 = $12;
-      $698 = HEAP32[$697>>2]|0;
-      $699 = (_list1_gen($696,$698)|0);
-      HEAP32[$17>>2] = $699;
-      break;
-     }
-     case 71:  {
-      $700 = $1;
-      $701 = $1;
-      $702 = $12;
-      $703 = ((($702)) + -4|0);
-      $704 = HEAP32[$703>>2]|0;
-      $705 = $1;
-      $706 = $12;
-      $707 = HEAP32[$706>>2]|0;
-      $708 = (_list1_gen($705,$707)|0);
-      $709 = (_append_gen($701,$704,$708)|0);
-      $710 = (_list1_gen($700,$709)|0);
-      HEAP32[$17>>2] = $710;
-      break;
-     }
-     case 72:  {
-      $711 = $1;
-      $712 = $12;
-      $713 = ((($712)) + -8|0);
-      $714 = HEAP32[$713>>2]|0;
-      $715 = $12;
-      $716 = HEAP32[$715>>2]|0;
-      $717 = (_list2_gen($711,$714,$716)|0);
-      HEAP32[$17>>2] = $717;
-      break;
-     }
-     case 73:  {
-      $718 = $1;
-      $719 = $12;
-      $720 = ((($719)) + -16|0);
-      $721 = HEAP32[$720>>2]|0;
-      $722 = $12;
-      $723 = ((($722)) + -8|0);
-      $724 = HEAP32[$723>>2]|0;
-      $725 = $12;
-      $726 = HEAP32[$725>>2]|0;
-      $727 = (_list3_gen($718,$721,$724,$726)|0);
-      HEAP32[$17>>2] = $727;
-      break;
-     }
-     case 74:  {
-      $728 = $1;
-      $729 = $12;
-      $730 = ((($729)) + -4|0);
-      $731 = HEAP32[$730>>2]|0;
-      $732 = $1;
-      $733 = (_new_nil($732)|0);
-      $734 = (_list2_gen($728,$731,$733)|0);
-      HEAP32[$17>>2] = $734;
-      break;
-     }
-     case 75:  {
-      $735 = $1;
-      $736 = $12;
-      $737 = ((($736)) + -12|0);
-      $738 = HEAP32[$737>>2]|0;
-      $739 = $1;
-      $740 = (_new_nil($739)|0);
-      $741 = $12;
-      $742 = HEAP32[$741>>2]|0;
-      $743 = (_list3_gen($735,$738,$740,$742)|0);
-      HEAP32[$17>>2] = $743;
-      break;
-     }
-     case 76:  {
-      $744 = $1;
-      $745 = $12;
-      $746 = HEAP32[$745>>2]|0;
-      $747 = (_list2_gen($744,0,$746)|0);
-      HEAP32[$17>>2] = $747;
-      break;
-     }
-     case 77:  {
-      $748 = $1;
-      $749 = $12;
-      $750 = ((($749)) + -8|0);
-      $751 = HEAP32[$750>>2]|0;
-      $752 = $12;
-      $753 = HEAP32[$752>>2]|0;
-      $754 = (_list3_gen($748,0,$751,$753)|0);
-      HEAP32[$17>>2] = $754;
-      break;
-     }
-     case 78:  {
-      $755 = $1;
-      $756 = $1;
-      $757 = (_new_nil($756)|0);
-      $758 = (_list2_gen($755,0,$757)|0);
-      HEAP32[$17>>2] = $758;
-      break;
-     }
-     case 79:  {
-      $759 = $1;
-      $760 = $1;
-      $761 = (_new_nil($760)|0);
-      $762 = $12;
-      $763 = HEAP32[$762>>2]|0;
-      $764 = (_list3_gen($759,0,$761,$763)|0);
-      HEAP32[$17>>2] = $764;
-      break;
-     }
-     case 81:  {
-      $765 = $1;
-      $766 = $12;
-      $767 = ((($766)) + -4|0);
-      $768 = HEAP32[$767>>2]|0;
-      $769 = (_new_masgn($765,$768,0)|0);
-      HEAP32[$17>>2] = $769;
-      break;
-     }
-     case 82:  {
-      $770 = $1;
-      $771 = $12;
-      $772 = ((($771)) + -4|0);
-      $773 = HEAP32[$772>>2]|0;
-      $774 = (_list1_gen($770,$773)|0);
-      HEAP32[$17>>2] = $774;
-      break;
-     }
-     case 83:  {
-      $775 = $1;
-      $776 = $12;
-      $777 = ((($776)) + -8|0);
-      $778 = HEAP32[$777>>2]|0;
-      $779 = $1;
-      $780 = $12;
-      $781 = ((($780)) + -4|0);
-      $782 = HEAP32[$781>>2]|0;
-      $783 = (_list1_gen($779,$782)|0);
-      $784 = (_append_gen($775,$778,$783)|0);
-      HEAP32[$17>>2] = $784;
-      break;
-     }
-     case 84:  {
-      $785 = $1;
-      $786 = $12;
-      $787 = HEAP32[$786>>2]|0;
-      $788 = (_list1_gen($785,$787)|0);
-      HEAP32[$17>>2] = $788;
-      break;
-     }
-     case 85:  {
-      $789 = $1;
-      $790 = $12;
-      $791 = ((($790)) + -4|0);
-      $792 = HEAP32[$791>>2]|0;
-      $793 = $1;
-      $794 = $12;
-      $795 = HEAP32[$794>>2]|0;
-      $796 = (_list1_gen($793,$795)|0);
-      $797 = (_append_gen($789,$792,$796)|0);
-      HEAP32[$17>>2] = $797;
-      break;
-     }
-     case 86:  {
-      $798 = $1;
-      $799 = $12;
-      $800 = HEAP32[$799>>2]|0;
-      _assignable($798,$800);
-      break;
-     }
-     case 87:  {
-      $801 = $1;
-      $802 = $12;
-      $803 = ((($802)) + -12|0);
-      $804 = HEAP32[$803>>2]|0;
-      $805 = $1;
-      $806 = (_intern_gen($805,69083,2)|0);
-      $807 = $12;
-      $808 = ((($807)) + -4|0);
-      $809 = HEAP32[$808>>2]|0;
-      $810 = (_new_call($801,$804,$806,$809)|0);
-      HEAP32[$17>>2] = $810;
-      break;
-     }
-     case 88:  {
-      $811 = $1;
-      $812 = $12;
-      $813 = ((($812)) + -8|0);
-      $814 = HEAP32[$813>>2]|0;
-      $815 = $12;
-      $816 = HEAP32[$815>>2]|0;
-      $817 = (_new_call($811,$814,$816,0)|0);
-      HEAP32[$17>>2] = $817;
-      break;
-     }
-     case 89:  {
-      $818 = $1;
-      $819 = $12;
-      $820 = ((($819)) + -8|0);
-      $821 = HEAP32[$820>>2]|0;
-      $822 = $12;
-      $823 = HEAP32[$822>>2]|0;
-      $824 = (_new_call($818,$821,$823,0)|0);
-      HEAP32[$17>>2] = $824;
-      break;
-     }
-     case 90:  {
-      $825 = $1;
-      $826 = $12;
-      $827 = ((($826)) + -8|0);
-      $828 = HEAP32[$827>>2]|0;
-      $829 = $12;
-      $830 = HEAP32[$829>>2]|0;
-      $831 = (_new_call($825,$828,$830,0)|0);
-      HEAP32[$17>>2] = $831;
-      break;
-     }
-     case 91:  {
-      $832 = $1;
-      $833 = ((($832)) + 64|0);
-      $834 = HEAP32[$833>>2]|0;
-      $835 = ($834|0)!=(0);
-      if ($835) {
-       label = 126;
-      } else {
-       $836 = $1;
-       $837 = ((($836)) + 68|0);
-       $838 = HEAP32[$837>>2]|0;
-       $839 = ($838|0)!=(0);
-       if ($839) {
-        label = 126;
-       }
-      }
-      if ((label|0) == 126) {
-       label = 0;
-       $840 = $1;
-       _yyerror($840,59462);
-      }
-      $841 = $1;
-      $842 = $12;
-      $843 = ((($842)) + -8|0);
-      $844 = HEAP32[$843>>2]|0;
-      $845 = $12;
-      $846 = HEAP32[$845>>2]|0;
-      $847 = (_new_colon2($841,$844,$846)|0);
-      HEAP32[$17>>2] = $847;
-      break;
-     }
-     case 92:  {
-      $848 = $1;
-      $849 = ((($848)) + 64|0);
-      $850 = HEAP32[$849>>2]|0;
-      $851 = ($850|0)!=(0);
-      if ($851) {
-       label = 130;
-      } else {
-       $852 = $1;
-       $853 = ((($852)) + 68|0);
-       $854 = HEAP32[$853>>2]|0;
-       $855 = ($854|0)!=(0);
-       if ($855) {
-        label = 130;
-       }
-      }
-      if ((label|0) == 130) {
-       label = 0;
-       $856 = $1;
-       _yyerror($856,59462);
-      }
-      $857 = $1;
-      $858 = $12;
-      $859 = HEAP32[$858>>2]|0;
-      $860 = (_new_colon3($857,$859)|0);
-      HEAP32[$17>>2] = $860;
-      break;
-     }
-     case 93:  {
-      $861 = $1;
-      $862 = $12;
-      $863 = HEAP32[$862>>2]|0;
-      _backref_error($861,$863);
-      HEAP32[$17>>2] = 0;
-      break;
-     }
-     case 94:  {
-      $864 = $1;
-      $865 = $12;
-      $866 = HEAP32[$865>>2]|0;
-      _assignable($864,$866);
-      break;
-     }
-     case 95:  {
-      $867 = $1;
-      $868 = $12;
-      $869 = ((($868)) + -12|0);
-      $870 = HEAP32[$869>>2]|0;
-      $871 = $1;
-      $872 = (_intern_gen($871,69083,2)|0);
-      $873 = $12;
-      $874 = ((($873)) + -4|0);
-      $875 = HEAP32[$874>>2]|0;
-      $876 = (_new_call($867,$870,$872,$875)|0);
-      HEAP32[$17>>2] = $876;
-      break;
-     }
-     case 96:  {
-      $877 = $1;
-      $878 = $12;
-      $879 = ((($878)) + -8|0);
-      $880 = HEAP32[$879>>2]|0;
-      $881 = $12;
-      $882 = HEAP32[$881>>2]|0;
-      $883 = (_new_call($877,$880,$882,0)|0);
-      HEAP32[$17>>2] = $883;
-      break;
-     }
-     case 97:  {
-      $884 = $1;
-      $885 = $12;
-      $886 = ((($885)) + -8|0);
-      $887 = HEAP32[$886>>2]|0;
-      $888 = $12;
-      $889 = HEAP32[$888>>2]|0;
-      $890 = (_new_call($884,$887,$889,0)|0);
-      HEAP32[$17>>2] = $890;
-      break;
-     }
-     case 98:  {
-      $891 = $1;
-      $892 = $12;
-      $893 = ((($892)) + -8|0);
-      $894 = HEAP32[$893>>2]|0;
-      $895 = $12;
-      $896 = HEAP32[$895>>2]|0;
-      $897 = (_new_call($891,$894,$896,0)|0);
-      HEAP32[$17>>2] = $897;
-      break;
-     }
-     case 99:  {
-      $898 = $1;
-      $899 = ((($898)) + 64|0);
-      $900 = HEAP32[$899>>2]|0;
-      $901 = ($900|0)!=(0);
-      if ($901) {
-       label = 140;
-      } else {
-       $902 = $1;
-       $903 = ((($902)) + 68|0);
-       $904 = HEAP32[$903>>2]|0;
-       $905 = ($904|0)!=(0);
-       if ($905) {
-        label = 140;
-       }
-      }
-      if ((label|0) == 140) {
-       label = 0;
-       $906 = $1;
-       _yyerror($906,59462);
-      }
-      $907 = $1;
-      $908 = $12;
-      $909 = ((($908)) + -8|0);
-      $910 = HEAP32[$909>>2]|0;
-      $911 = $12;
-      $912 = HEAP32[$911>>2]|0;
-      $913 = (_new_colon2($907,$910,$912)|0);
-      HEAP32[$17>>2] = $913;
-      break;
-     }
-     case 100:  {
-      $914 = $1;
-      $915 = ((($914)) + 64|0);
-      $916 = HEAP32[$915>>2]|0;
-      $917 = ($916|0)!=(0);
-      if ($917) {
-       label = 144;
-      } else {
-       $918 = $1;
-       $919 = ((($918)) + 68|0);
-       $920 = HEAP32[$919>>2]|0;
-       $921 = ($920|0)!=(0);
-       if ($921) {
-        label = 144;
-       }
-      }
-      if ((label|0) == 144) {
-       label = 0;
-       $922 = $1;
-       _yyerror($922,59462);
-      }
-      $923 = $1;
-      $924 = $12;
-      $925 = HEAP32[$924>>2]|0;
-      $926 = (_new_colon3($923,$925)|0);
-      HEAP32[$17>>2] = $926;
-      break;
-     }
-     case 101:  {
-      $927 = $1;
-      $928 = $12;
-      $929 = HEAP32[$928>>2]|0;
-      _backref_error($927,$929);
-      HEAP32[$17>>2] = 0;
-      break;
-     }
-     case 102:  {
-      $930 = $1;
-      _yyerror($930,59490);
-      break;
-     }
-     case 104:  {
-      $931 = $1;
-      $932 = $12;
-      $933 = HEAP32[$932>>2]|0;
-      $934 = $933;
-      $935 = (_cons_gen($931,(1),$934)|0);
-      HEAP32[$17>>2] = $935;
-      break;
-     }
-     case 105:  {
-      $936 = $1;
-      $937 = $12;
-      $938 = HEAP32[$937>>2]|0;
-      $939 = $938;
-      $940 = (_cons_gen($936,0,$939)|0);
-      HEAP32[$17>>2] = $940;
-      break;
-     }
-     case 106:  {
-      $941 = $1;
-      $942 = $12;
-      $943 = ((($942)) + -8|0);
-      $944 = HEAP32[$943>>2]|0;
-      $945 = $12;
-      $946 = HEAP32[$945>>2]|0;
-      $947 = $946;
-      $948 = (_cons_gen($941,$944,$947)|0);
-      HEAP32[$17>>2] = $948;
-      break;
-     }
-     case 110:  {
-      $949 = $1;
-      $950 = ((($949)) + 40|0);
-      HEAP32[$950>>2] = 3;
-      $951 = $12;
-      $952 = HEAP32[$951>>2]|0;
-      HEAP32[$17>>2] = $952;
-      break;
-     }
-     case 111:  {
-      $953 = $1;
-      $954 = ((($953)) + 40|0);
-      HEAP32[$954>>2] = 3;
-      $955 = $12;
-      $956 = HEAP32[$955>>2]|0;
-      HEAP32[$17>>2] = $956;
-      break;
-     }
-     case 114:  {
-      $957 = $1;
-      $958 = $12;
-      $959 = HEAP32[$958>>2]|0;
-      $960 = (_new_undef($957,$959)|0);
-      HEAP32[$17>>2] = $960;
-      break;
-     }
-     case 115:  {
-      $961 = $1;
-      $962 = ((($961)) + 40|0);
-      HEAP32[$962>>2] = 7;
-      break;
-     }
-     case 116:  {
-      $963 = $1;
-      $964 = $12;
-      $965 = ((($964)) + -12|0);
-      $966 = HEAP32[$965>>2]|0;
-      $967 = $1;
-      $968 = $12;
-      $969 = HEAP32[$968>>2]|0;
-      $970 = $969;
-      $971 = (_list1_gen($967,$970)|0);
-      $972 = (_append_gen($963,$966,$971)|0);
-      HEAP32[$17>>2] = $972;
-      break;
-     }
-     case 117:  {
-      $973 = $1;
-      $974 = (_intern_gen_c($973,124)|0);
-      HEAP32[$17>>2] = $974;
-      break;
-     }
-     case 118:  {
-      $975 = $1;
-      $976 = (_intern_gen_c($975,94)|0);
-      HEAP32[$17>>2] = $976;
-      break;
-     }
-     case 119:  {
-      $977 = $1;
-      $978 = (_intern_gen_c($977,38)|0);
-      HEAP32[$17>>2] = $978;
-      break;
-     }
-     case 120:  {
-      $979 = $1;
-      $980 = (_intern_gen($979,69156,3)|0);
-      HEAP32[$17>>2] = $980;
-      break;
-     }
-     case 121:  {
-      $981 = $1;
-      $982 = (_intern_gen($981,69201,2)|0);
-      HEAP32[$17>>2] = $982;
-      break;
-     }
-     case 122:  {
-      $983 = $1;
-      $984 = (_intern_gen($983,69591,3)|0);
-      HEAP32[$17>>2] = $984;
-      break;
-     }
-     case 123:  {
-      $985 = $1;
-      $986 = (_intern_gen($985,59525,2)|0);
-      HEAP32[$17>>2] = $986;
-      break;
-     }
-     case 124:  {
-      $987 = $1;
-      $988 = (_intern_gen($987,59528,2)|0);
-      HEAP32[$17>>2] = $988;
-      break;
-     }
-     case 125:  {
-      $989 = $1;
-      $990 = (_intern_gen_c($989,62)|0);
-      HEAP32[$17>>2] = $990;
-      break;
-     }
-     case 126:  {
-      $991 = $1;
-      $992 = (_intern_gen($991,59531,2)|0);
-      HEAP32[$17>>2] = $992;
-      break;
-     }
-     case 127:  {
-      $993 = $1;
-      $994 = (_intern_gen_c($993,60)|0);
-      HEAP32[$17>>2] = $994;
-      break;
-     }
-     case 128:  {
-      $995 = $1;
-      $996 = (_intern_gen($995,59534,2)|0);
-      HEAP32[$17>>2] = $996;
-      break;
-     }
-     case 129:  {
-      $997 = $1;
-      $998 = (_intern_gen($997,68364,2)|0);
-      HEAP32[$17>>2] = $998;
-      break;
-     }
-     case 130:  {
-      $999 = $1;
-      $1000 = (_intern_gen($999,64616,2)|0);
-      HEAP32[$17>>2] = $1000;
-      break;
-     }
-     case 131:  {
-      $1001 = $1;
-      $1002 = (_intern_gen($1001,59537,2)|0);
-      HEAP32[$17>>2] = $1002;
-      break;
-     }
-     case 132:  {
-      $1003 = $1;
-      $1004 = (_intern_gen_c($1003,43)|0);
-      HEAP32[$17>>2] = $1004;
-      break;
-     }
-     case 133:  {
-      $1005 = $1;
-      $1006 = (_intern_gen_c($1005,45)|0);
-      HEAP32[$17>>2] = $1006;
-      break;
-     }
-     case 134:  {
-      $1007 = $1;
-      $1008 = (_intern_gen_c($1007,42)|0);
-      HEAP32[$17>>2] = $1008;
-      break;
-     }
-     case 135:  {
-      $1009 = $1;
-      $1010 = (_intern_gen_c($1009,42)|0);
-      HEAP32[$17>>2] = $1010;
-      break;
-     }
-     case 136:  {
-      $1011 = $1;
-      $1012 = (_intern_gen_c($1011,47)|0);
-      HEAP32[$17>>2] = $1012;
-      break;
-     }
-     case 137:  {
-      $1013 = $1;
-      $1014 = (_intern_gen_c($1013,37)|0);
-      HEAP32[$17>>2] = $1014;
-      break;
-     }
-     case 138:  {
-      $1015 = $1;
-      $1016 = (_intern_gen($1015,59540,2)|0);
-      HEAP32[$17>>2] = $1016;
-      break;
-     }
-     case 139:  {
-      $1017 = $1;
-      $1018 = (_intern_gen_c($1017,33)|0);
-      HEAP32[$17>>2] = $1018;
-      break;
-     }
-     case 140:  {
-      $1019 = $1;
-      $1020 = (_intern_gen_c($1019,126)|0);
-      HEAP32[$17>>2] = $1020;
-      break;
-     }
-     case 141:  {
-      $1021 = $1;
-      $1022 = (_intern_gen($1021,59543,2)|0);
-      HEAP32[$17>>2] = $1022;
-      break;
-     }
-     case 142:  {
-      $1023 = $1;
-      $1024 = (_intern_gen($1023,59546,2)|0);
-      HEAP32[$17>>2] = $1024;
-      break;
-     }
-     case 143:  {
-      $1025 = $1;
-      $1026 = (_intern_gen($1025,69083,2)|0);
-      HEAP32[$17>>2] = $1026;
-      break;
-     }
-     case 144:  {
-      $1027 = $1;
-      $1028 = (_intern_gen($1027,64619,3)|0);
-      HEAP32[$17>>2] = $1028;
-      break;
-     }
-     case 145:  {
-      $1029 = $1;
-      $1030 = (_intern_gen_c($1029,96)|0);
-      HEAP32[$17>>2] = $1030;
-      break;
-     }
-     case 186:  {
-      $1031 = $1;
-      $1032 = $12;
-      $1033 = ((($1032)) + -8|0);
-      $1034 = HEAP32[$1033>>2]|0;
-      $1035 = $12;
-      $1036 = HEAP32[$1035>>2]|0;
-      $1037 = (_new_asgn($1031,$1034,$1036)|0);
-      HEAP32[$17>>2] = $1037;
-      break;
-     }
-     case 187:  {
-      $1038 = $1;
-      $1039 = $12;
-      $1040 = ((($1039)) + -16|0);
-      $1041 = HEAP32[$1040>>2]|0;
-      $1042 = $1;
-      $1043 = $12;
-      $1044 = ((($1043)) + -8|0);
-      $1045 = HEAP32[$1044>>2]|0;
-      $1046 = $1;
-      $1047 = $1;
-      $1048 = $12;
-      $1049 = HEAP32[$1048>>2]|0;
-      $1050 = (_list3_gen($1047,0,0,$1049)|0);
-      $1051 = (_list1_gen($1046,$1050)|0);
-      $1052 = (_new_rescue($1042,$1045,$1051,0)|0);
-      $1053 = (_new_asgn($1038,$1041,$1052)|0);
-      HEAP32[$17>>2] = $1053;
-      break;
-     }
-     case 188:  {
-      $1054 = $1;
-      $1055 = $12;
-      $1056 = ((($1055)) + -8|0);
-      $1057 = HEAP32[$1056>>2]|0;
-      $1058 = $12;
-      $1059 = ((($1058)) + -4|0);
-      $1060 = HEAP32[$1059>>2]|0;
-      $1061 = $12;
-      $1062 = HEAP32[$1061>>2]|0;
-      $1063 = (_new_op_asgn($1054,$1057,$1060,$1062)|0);
-      HEAP32[$17>>2] = $1063;
-      break;
-     }
-     case 189:  {
-      $1064 = $1;
-      $1065 = $12;
-      $1066 = ((($1065)) + -16|0);
-      $1067 = HEAP32[$1066>>2]|0;
-      $1068 = $12;
-      $1069 = ((($1068)) + -12|0);
-      $1070 = HEAP32[$1069>>2]|0;
-      $1071 = $1;
-      $1072 = $12;
-      $1073 = ((($1072)) + -8|0);
-      $1074 = HEAP32[$1073>>2]|0;
-      $1075 = $1;
-      $1076 = $1;
-      $1077 = $12;
-      $1078 = HEAP32[$1077>>2]|0;
-      $1079 = (_list3_gen($1076,0,0,$1078)|0);
-      $1080 = (_list1_gen($1075,$1079)|0);
-      $1081 = (_new_rescue($1071,$1074,$1080,0)|0);
-      $1082 = (_new_op_asgn($1064,$1067,$1070,$1081)|0);
-      HEAP32[$17>>2] = $1082;
-      break;
-     }
-     case 190:  {
-      $1083 = $1;
-      $1084 = $1;
-      $1085 = $12;
-      $1086 = ((($1085)) + -20|0);
-      $1087 = HEAP32[$1086>>2]|0;
-      $1088 = $1;
-      $1089 = (_intern_gen($1088,69083,2)|0);
-      $1090 = $12;
-      $1091 = ((($1090)) + -12|0);
-      $1092 = HEAP32[$1091>>2]|0;
-      $1093 = (_new_call($1084,$1087,$1089,$1092)|0);
-      $1094 = $12;
-      $1095 = ((($1094)) + -4|0);
-      $1096 = HEAP32[$1095>>2]|0;
-      $1097 = $12;
-      $1098 = HEAP32[$1097>>2]|0;
-      $1099 = (_new_op_asgn($1083,$1093,$1096,$1098)|0);
-      HEAP32[$17>>2] = $1099;
-      break;
-     }
-     case 191:  {
-      $1100 = $1;
-      $1101 = $1;
-      $1102 = $12;
-      $1103 = ((($1102)) + -16|0);
-      $1104 = HEAP32[$1103>>2]|0;
-      $1105 = $12;
-      $1106 = ((($1105)) + -8|0);
-      $1107 = HEAP32[$1106>>2]|0;
-      $1108 = (_new_call($1101,$1104,$1107,0)|0);
-      $1109 = $12;
-      $1110 = ((($1109)) + -4|0);
-      $1111 = HEAP32[$1110>>2]|0;
-      $1112 = $12;
-      $1113 = HEAP32[$1112>>2]|0;
-      $1114 = (_new_op_asgn($1100,$1108,$1111,$1113)|0);
-      HEAP32[$17>>2] = $1114;
-      break;
-     }
-     case 192:  {
-      $1115 = $1;
-      $1116 = $1;
-      $1117 = $12;
-      $1118 = ((($1117)) + -16|0);
-      $1119 = HEAP32[$1118>>2]|0;
-      $1120 = $12;
-      $1121 = ((($1120)) + -8|0);
-      $1122 = HEAP32[$1121>>2]|0;
-      $1123 = (_new_call($1116,$1119,$1122,0)|0);
-      $1124 = $12;
-      $1125 = ((($1124)) + -4|0);
-      $1126 = HEAP32[$1125>>2]|0;
-      $1127 = $12;
-      $1128 = HEAP32[$1127>>2]|0;
-      $1129 = (_new_op_asgn($1115,$1123,$1126,$1128)|0);
-      HEAP32[$17>>2] = $1129;
-      break;
-     }
-     case 193:  {
-      $1130 = $1;
-      $1131 = $1;
-      $1132 = $12;
-      $1133 = ((($1132)) + -16|0);
-      $1134 = HEAP32[$1133>>2]|0;
-      $1135 = $12;
-      $1136 = ((($1135)) + -8|0);
-      $1137 = HEAP32[$1136>>2]|0;
-      $1138 = (_new_call($1131,$1134,$1137,0)|0);
-      $1139 = $12;
-      $1140 = ((($1139)) + -4|0);
-      $1141 = HEAP32[$1140>>2]|0;
-      $1142 = $12;
-      $1143 = HEAP32[$1142>>2]|0;
-      $1144 = (_new_op_asgn($1130,$1138,$1141,$1143)|0);
-      HEAP32[$17>>2] = $1144;
-      break;
-     }
-     case 194:  {
-      $1145 = $1;
-      _yyerror($1145,59439);
-      $1146 = $1;
-      $1147 = (_new_begin($1146,0)|0);
-      HEAP32[$17>>2] = $1147;
-      break;
-     }
-     case 195:  {
-      $1148 = $1;
-      _yyerror($1148,59439);
-      $1149 = $1;
-      $1150 = (_new_begin($1149,0)|0);
-      HEAP32[$17>>2] = $1150;
-      break;
-     }
-     case 196:  {
-      $1151 = $1;
-      $1152 = $12;
-      $1153 = ((($1152)) + -8|0);
-      $1154 = HEAP32[$1153>>2]|0;
-      _backref_error($1151,$1154);
-      $1155 = $1;
-      $1156 = (_new_begin($1155,0)|0);
-      HEAP32[$17>>2] = $1156;
-      break;
-     }
-     case 197:  {
-      $1157 = $1;
-      $1158 = $12;
-      $1159 = ((($1158)) + -8|0);
-      $1160 = HEAP32[$1159>>2]|0;
-      $1161 = $12;
-      $1162 = HEAP32[$1161>>2]|0;
-      $1163 = (_new_dot2($1157,$1160,$1162)|0);
-      HEAP32[$17>>2] = $1163;
-      break;
-     }
-     case 198:  {
-      $1164 = $1;
-      $1165 = $12;
-      $1166 = ((($1165)) + -8|0);
-      $1167 = HEAP32[$1166>>2]|0;
-      $1168 = $12;
-      $1169 = HEAP32[$1168>>2]|0;
-      $1170 = (_new_dot3($1164,$1167,$1169)|0);
-      HEAP32[$17>>2] = $1170;
-      break;
-     }
-     case 199:  {
-      $1171 = $1;
-      $1172 = $12;
-      $1173 = ((($1172)) + -8|0);
-      $1174 = HEAP32[$1173>>2]|0;
-      $1175 = $12;
-      $1176 = HEAP32[$1175>>2]|0;
-      $1177 = (_call_bin_op($1171,$1174,64614,$1176)|0);
-      HEAP32[$17>>2] = $1177;
-      break;
-     }
-     case 200:  {
-      $1178 = $1;
-      $1179 = $12;
-      $1180 = ((($1179)) + -8|0);
-      $1181 = HEAP32[$1180>>2]|0;
-      $1182 = $12;
-      $1183 = HEAP32[$1182>>2]|0;
-      $1184 = (_call_bin_op($1178,$1181,69660,$1183)|0);
-      HEAP32[$17>>2] = $1184;
-      break;
-     }
-     case 201:  {
-      $1185 = $1;
-      $1186 = $12;
-      $1187 = ((($1186)) + -8|0);
-      $1188 = HEAP32[$1187>>2]|0;
-      $1189 = $12;
-      $1190 = HEAP32[$1189>>2]|0;
-      $1191 = (_call_bin_op($1185,$1188,68856,$1190)|0);
-      HEAP32[$17>>2] = $1191;
-      break;
-     }
-     case 202:  {
-      $1192 = $1;
-      $1193 = $12;
-      $1194 = ((($1193)) + -8|0);
-      $1195 = HEAP32[$1194>>2]|0;
-      $1196 = $12;
-      $1197 = HEAP32[$1196>>2]|0;
-      $1198 = (_call_bin_op($1192,$1195,59549,$1197)|0);
-      HEAP32[$17>>2] = $1198;
-      break;
-     }
-     case 203:  {
-      $1199 = $1;
-      $1200 = $12;
-      $1201 = ((($1200)) + -8|0);
-      $1202 = HEAP32[$1201>>2]|0;
-      $1203 = $12;
-      $1204 = HEAP32[$1203>>2]|0;
-      $1205 = (_call_bin_op($1199,$1202,59551,$1204)|0);
-      HEAP32[$17>>2] = $1205;
-      break;
-     }
-     case 204:  {
-      $1206 = $1;
-      $1207 = $12;
-      $1208 = ((($1207)) + -8|0);
-      $1209 = HEAP32[$1208>>2]|0;
-      $1210 = $12;
-      $1211 = HEAP32[$1210>>2]|0;
-      $1212 = (_call_bin_op($1206,$1209,59540,$1211)|0);
-      HEAP32[$17>>2] = $1212;
-      break;
-     }
-     case 205:  {
-      $1213 = $1;
-      $1214 = $1;
-      $1215 = $12;
-      $1216 = ((($1215)) + -8|0);
-      $1217 = HEAP32[$1216>>2]|0;
-      $1218 = $12;
-      $1219 = HEAP32[$1218>>2]|0;
-      $1220 = (_call_bin_op($1214,$1217,59540,$1219)|0);
-      $1221 = (_call_uni_op($1213,$1220,59546)|0);
-      HEAP32[$17>>2] = $1221;
-      break;
-     }
-     case 206:  {
-      $1222 = $1;
-      $1223 = $1;
-      $1224 = $12;
-      $1225 = ((($1224)) + -8|0);
-      $1226 = HEAP32[$1225>>2]|0;
-      $1227 = $12;
-      $1228 = HEAP32[$1227>>2]|0;
-      $1229 = (_call_bin_op($1223,$1226,59540,$1228)|0);
-      $1230 = (_call_uni_op($1222,$1229,59546)|0);
-      HEAP32[$17>>2] = $1230;
-      break;
-     }
-     case 207:  {
-      $1231 = $1;
-      $1232 = $12;
-      $1233 = HEAP32[$1232>>2]|0;
-      $1234 = (_call_uni_op($1231,$1233,59543)|0);
-      HEAP32[$17>>2] = $1234;
-      break;
-     }
-     case 208:  {
-      $1235 = $1;
-      $1236 = $12;
-      $1237 = HEAP32[$1236>>2]|0;
-      $1238 = (_call_uni_op($1235,$1237,59546)|0);
-      HEAP32[$17>>2] = $1238;
-      break;
-     }
-     case 209:  {
-      $1239 = $1;
-      $1240 = $12;
-      $1241 = ((($1240)) + -8|0);
-      $1242 = HEAP32[$1241>>2]|0;
-      $1243 = $12;
-      $1244 = HEAP32[$1243>>2]|0;
-      $1245 = (_call_bin_op($1239,$1242,59553,$1244)|0);
-      HEAP32[$17>>2] = $1245;
-      break;
-     }
-     case 210:  {
-      $1246 = $1;
-      $1247 = $12;
-      $1248 = ((($1247)) + -8|0);
-      $1249 = HEAP32[$1248>>2]|0;
-      $1250 = $12;
-      $1251 = HEAP32[$1250>>2]|0;
-      $1252 = (_call_bin_op($1246,$1249,59555,$1251)|0);
-      HEAP32[$17>>2] = $1252;
-      break;
-     }
-     case 211:  {
-      $1253 = $1;
-      $1254 = $12;
-      $1255 = ((($1254)) + -8|0);
-      $1256 = HEAP32[$1255>>2]|0;
-      $1257 = $12;
-      $1258 = HEAP32[$1257>>2]|0;
-      $1259 = (_call_bin_op($1253,$1256,69093,$1258)|0);
-      HEAP32[$17>>2] = $1259;
-      break;
-     }
-     case 212:  {
-      $1260 = $1;
-      $1261 = $12;
-      $1262 = ((($1261)) + -8|0);
-      $1263 = HEAP32[$1262>>2]|0;
-      $1264 = $12;
-      $1265 = HEAP32[$1264>>2]|0;
-      $1266 = (_call_bin_op($1260,$1263,69156,$1265)|0);
-      HEAP32[$17>>2] = $1266;
-      break;
-     }
-     case 213:  {
-      $1267 = $1;
-      $1268 = $12;
-      $1269 = ((($1268)) + -8|0);
-      $1270 = HEAP32[$1269>>2]|0;
-      $1271 = $12;
-      $1272 = HEAP32[$1271>>2]|0;
-      $1273 = (_call_bin_op($1267,$1270,65540,$1272)|0);
-      HEAP32[$17>>2] = $1273;
-      break;
-     }
-     case 214:  {
-      $1274 = $1;
-      $1275 = $12;
-      $1276 = ((($1275)) + -8|0);
-      $1277 = HEAP32[$1276>>2]|0;
-      $1278 = $12;
-      $1279 = HEAP32[$1278>>2]|0;
-      $1280 = (_call_bin_op($1274,$1277,59531,$1279)|0);
-      HEAP32[$17>>2] = $1280;
-      break;
-     }
-     case 215:  {
-      $1281 = $1;
-      $1282 = $12;
-      $1283 = ((($1282)) + -8|0);
-      $1284 = HEAP32[$1283>>2]|0;
-      $1285 = $12;
-      $1286 = HEAP32[$1285>>2]|0;
-      $1287 = (_call_bin_op($1281,$1284,59557,$1286)|0);
-      HEAP32[$17>>2] = $1287;
-      break;
-     }
-     case 216:  {
-      $1288 = $1;
-      $1289 = $12;
-      $1290 = ((($1289)) + -8|0);
-      $1291 = HEAP32[$1290>>2]|0;
-      $1292 = $12;
-      $1293 = HEAP32[$1292>>2]|0;
-      $1294 = (_call_bin_op($1288,$1291,59534,$1293)|0);
-      HEAP32[$17>>2] = $1294;
-      break;
-     }
-     case 217:  {
-      $1295 = $1;
-      $1296 = $12;
-      $1297 = ((($1296)) + -8|0);
-      $1298 = HEAP32[$1297>>2]|0;
-      $1299 = $12;
-      $1300 = HEAP32[$1299>>2]|0;
-      $1301 = (_call_bin_op($1295,$1298,69201,$1300)|0);
-      HEAP32[$17>>2] = $1301;
-      break;
-     }
-     case 218:  {
-      $1302 = $1;
-      $1303 = $12;
-      $1304 = ((($1303)) + -8|0);
-      $1305 = HEAP32[$1304>>2]|0;
-      $1306 = $12;
-      $1307 = HEAP32[$1306>>2]|0;
-      $1308 = (_call_bin_op($1302,$1305,69591,$1307)|0);
-      HEAP32[$17>>2] = $1308;
-      break;
-     }
-     case 219:  {
-      $1309 = $1;
-      $1310 = $12;
-      $1311 = ((($1310)) + -8|0);
-      $1312 = HEAP32[$1311>>2]|0;
-      $1313 = $12;
-      $1314 = HEAP32[$1313>>2]|0;
-      $1315 = (_call_bin_op($1309,$1312,68364,$1314)|0);
-      HEAP32[$17>>2] = $1315;
-      break;
-     }
-     case 220:  {
-      $1316 = $1;
-      $1317 = $12;
-      $1318 = ((($1317)) + -8|0);
-      $1319 = HEAP32[$1318>>2]|0;
-      $1320 = $12;
-      $1321 = HEAP32[$1320>>2]|0;
-      $1322 = (_call_bin_op($1316,$1319,59525,$1321)|0);
-      HEAP32[$17>>2] = $1322;
-      break;
-     }
-     case 221:  {
-      $1323 = $1;
-      $1324 = $12;
-      $1325 = ((($1324)) + -8|0);
-      $1326 = HEAP32[$1325>>2]|0;
-      $1327 = $12;
-      $1328 = HEAP32[$1327>>2]|0;
-      $1329 = (_call_bin_op($1323,$1326,59528,$1328)|0);
-      HEAP32[$17>>2] = $1329;
-      break;
-     }
-     case 222:  {
-      $1330 = $1;
-      $1331 = $12;
-      $1332 = HEAP32[$1331>>2]|0;
-      $1333 = (_cond($1332)|0);
-      $1334 = (_call_uni_op($1330,$1333,65619)|0);
-      HEAP32[$17>>2] = $1334;
-      break;
-     }
-     case 223:  {
-      $1335 = $1;
-      $1336 = $12;
-      $1337 = HEAP32[$1336>>2]|0;
-      $1338 = (_cond($1337)|0);
-      $1339 = (_call_uni_op($1335,$1338,59559)|0);
-      HEAP32[$17>>2] = $1339;
-      break;
-     }
-     case 224:  {
-      $1340 = $1;
-      $1341 = $12;
-      $1342 = ((($1341)) + -8|0);
-      $1343 = HEAP32[$1342>>2]|0;
-      $1344 = $12;
-      $1345 = HEAP32[$1344>>2]|0;
-      $1346 = (_call_bin_op($1340,$1343,64616,$1345)|0);
-      HEAP32[$17>>2] = $1346;
-      break;
-     }
-     case 225:  {
-      $1347 = $1;
-      $1348 = $12;
-      $1349 = ((($1348)) + -8|0);
-      $1350 = HEAP32[$1349>>2]|0;
-      $1351 = $12;
-      $1352 = HEAP32[$1351>>2]|0;
-      $1353 = (_call_bin_op($1347,$1350,59537,$1352)|0);
-      HEAP32[$17>>2] = $1353;
-      break;
-     }
-     case 226:  {
-      $1354 = $1;
-      $1355 = $12;
-      $1356 = ((($1355)) + -8|0);
-      $1357 = HEAP32[$1356>>2]|0;
-      $1358 = $12;
-      $1359 = HEAP32[$1358>>2]|0;
-      $1360 = (_new_and($1354,$1357,$1359)|0);
-      HEAP32[$17>>2] = $1360;
-      break;
-     }
-     case 227:  {
-      $1361 = $1;
-      $1362 = $12;
-      $1363 = ((($1362)) + -8|0);
-      $1364 = HEAP32[$1363>>2]|0;
-      $1365 = $12;
-      $1366 = HEAP32[$1365>>2]|0;
-      $1367 = (_new_or($1361,$1364,$1366)|0);
-      HEAP32[$17>>2] = $1367;
-      break;
-     }
-     case 228:  {
-      $1368 = $1;
-      $1369 = $12;
-      $1370 = ((($1369)) + -20|0);
-      $1371 = HEAP32[$1370>>2]|0;
-      $1372 = (_cond($1371)|0);
-      $1373 = $12;
-      $1374 = ((($1373)) + -12|0);
-      $1375 = HEAP32[$1374>>2]|0;
-      $1376 = $12;
-      $1377 = HEAP32[$1376>>2]|0;
-      $1378 = (_new_if($1368,$1372,$1375,$1377)|0);
-      HEAP32[$17>>2] = $1378;
-      break;
-     }
-     case 229:  {
-      $1379 = $12;
-      $1380 = HEAP32[$1379>>2]|0;
-      HEAP32[$17>>2] = $1380;
-      break;
-     }
-     case 230:  {
-      $1381 = $12;
-      $1382 = HEAP32[$1381>>2]|0;
-      HEAP32[$17>>2] = $1382;
-      $1383 = HEAP32[$17>>2]|0;
-      $1384 = ($1383|0)!=(0|0);
-      if (!($1384)) {
-       $1385 = $1;
-       $1386 = (_new_nil($1385)|0);
-       HEAP32[$17>>2] = $1386;
-      }
-      break;
-     }
-     case 232:  {
-      $1387 = $12;
-      $1388 = ((($1387)) + -4|0);
-      $1389 = HEAP32[$1388>>2]|0;
-      HEAP32[$17>>2] = $1389;
-      $1390 = $12;
-      $1391 = ((($1390)) + -4|0);
-      $1392 = HEAP32[$1391>>2]|0;
-      $1393 = ($1392|0)!=(0|0);
-      if ($1393) {
-       $1394 = $12;
-       $1395 = ((($1394)) + -4|0);
-       $1396 = HEAP32[$1395>>2]|0;
-       $1397 = ((($1396)) + 10|0);
-       $1398 = HEAP16[$1397>>1]|0;
-       $1399 = HEAP32[$17>>2]|0;
-       $1400 = ((($1399)) + 10|0);
-       HEAP16[$1400>>1] = $1398;
-       $1401 = $12;
-       $1402 = ((($1401)) + -4|0);
-       $1403 = HEAP32[$1402>>2]|0;
-       $1404 = ((($1403)) + 8|0);
-       $1405 = HEAP16[$1404>>1]|0;
-       $1406 = HEAP32[$17>>2]|0;
-       $1407 = ((($1406)) + 8|0);
-       HEAP16[$1407>>1] = $1405;
-      }
-      break;
-     }
-     case 233:  {
-      $1408 = $1;
-      $1409 = $12;
-      $1410 = ((($1409)) + -12|0);
-      $1411 = HEAP32[$1410>>2]|0;
-      $1412 = $1;
-      $1413 = $1;
-      $1414 = $12;
-      $1415 = ((($1414)) + -4|0);
-      $1416 = HEAP32[$1415>>2]|0;
-      $1417 = (_new_hash($1413,$1416)|0);
-      $1418 = (_list1_gen($1412,$1417)|0);
-      $1419 = (_append_gen($1408,$1411,$1418)|0);
-      HEAP32[$17>>2] = $1419;
-      break;
-     }
-     case 234:  {
-      $1420 = $1;
-      $1421 = $1;
-      $1422 = $12;
-      $1423 = ((($1422)) + -4|0);
-      $1424 = HEAP32[$1423>>2]|0;
-      $1425 = (_new_hash($1421,$1424)|0);
-      $1426 = (_cons_gen($1420,$1425,0)|0);
-      HEAP32[$17>>2] = $1426;
-      $1427 = $12;
-      $1428 = ((($1427)) + -4|0);
-      $1429 = HEAP32[$1428>>2]|0;
-      $1430 = ($1429|0)!=(0|0);
-      if ($1430) {
-       $1431 = $12;
-       $1432 = ((($1431)) + -4|0);
-       $1433 = HEAP32[$1432>>2]|0;
-       $1434 = ((($1433)) + 10|0);
-       $1435 = HEAP16[$1434>>1]|0;
-       $1436 = HEAP32[$17>>2]|0;
-       $1437 = ((($1436)) + 10|0);
-       HEAP16[$1437>>1] = $1435;
-       $1438 = $12;
-       $1439 = ((($1438)) + -4|0);
-       $1440 = HEAP32[$1439>>2]|0;
-       $1441 = ((($1440)) + 8|0);
-       $1442 = HEAP16[$1441>>1]|0;
-       $1443 = HEAP32[$17>>2]|0;
-       $1444 = ((($1443)) + 8|0);
-       HEAP16[$1444>>1] = $1442;
-      }
-      break;
-     }
-     case 235:  {
-      $1445 = $12;
-      $1446 = ((($1445)) + -4|0);
-      $1447 = HEAP32[$1446>>2]|0;
-      HEAP32[$17>>2] = $1447;
-      break;
-     }
-     case 240:  {
-      $1448 = $1;
-      $1449 = $12;
-      $1450 = ((($1449)) + -4|0);
-      $1451 = HEAP32[$1450>>2]|0;
-      $1452 = (_cons_gen($1448,$1451,0)|0);
-      HEAP32[$17>>2] = $1452;
-      $1453 = $12;
-      $1454 = ((($1453)) + -4|0);
-      $1455 = HEAP32[$1454>>2]|0;
-      $1456 = ($1455|0)!=(0|0);
-      if ($1456) {
-       $1457 = $12;
-       $1458 = ((($1457)) + -4|0);
-       $1459 = HEAP32[$1458>>2]|0;
-       $1460 = ((($1459)) + 10|0);
-       $1461 = HEAP16[$1460>>1]|0;
-       $1462 = HEAP32[$17>>2]|0;
-       $1463 = ((($1462)) + 10|0);
-       HEAP16[$1463>>1] = $1461;
-       $1464 = $12;
-       $1465 = ((($1464)) + -4|0);
-       $1466 = HEAP32[$1465>>2]|0;
-       $1467 = ((($1466)) + 8|0);
-       $1468 = HEAP16[$1467>>1]|0;
-       $1469 = HEAP32[$17>>2]|0;
-       $1470 = ((($1469)) + 8|0);
-       HEAP16[$1470>>1] = $1468;
-      }
-      break;
-     }
-     case 241:  {
-      $1471 = $1;
-      $1472 = $1;
-      $1473 = $12;
-      $1474 = ((($1473)) + -12|0);
-      $1475 = HEAP32[$1474>>2]|0;
-      $1476 = $1;
-      $1477 = $1;
-      $1478 = $12;
-      $1479 = ((($1478)) + -4|0);
-      $1480 = HEAP32[$1479>>2]|0;
-      $1481 = (_new_hash($1477,$1480)|0);
-      $1482 = (_list1_gen($1476,$1481)|0);
-      $1483 = (_append_gen($1472,$1475,$1482)|0);
-      $1484 = (_cons_gen($1471,$1483,0)|0);
-      HEAP32[$17>>2] = $1484;
-      $1485 = $12;
-      $1486 = ((($1485)) + -12|0);
-      $1487 = HEAP32[$1486>>2]|0;
-      $1488 = ($1487|0)!=(0|0);
-      if ($1488) {
-       $1489 = $12;
-       $1490 = ((($1489)) + -12|0);
-       $1491 = HEAP32[$1490>>2]|0;
-       $1492 = ((($1491)) + 10|0);
-       $1493 = HEAP16[$1492>>1]|0;
-       $1494 = HEAP32[$17>>2]|0;
-       $1495 = ((($1494)) + 10|0);
-       HEAP16[$1495>>1] = $1493;
-       $1496 = $12;
-       $1497 = ((($1496)) + -12|0);
-       $1498 = HEAP32[$1497>>2]|0;
-       $1499 = ((($1498)) + 8|0);
-       $1500 = HEAP16[$1499>>1]|0;
-       $1501 = HEAP32[$17>>2]|0;
-       $1502 = ((($1501)) + 8|0);
-       HEAP16[$1502>>1] = $1500;
-      }
-      break;
-     }
-     case 242:  {
-      $1503 = $1;
-      $1504 = $1;
-      $1505 = $1;
-      $1506 = $12;
-      $1507 = ((($1506)) + -4|0);
-      $1508 = HEAP32[$1507>>2]|0;
-      $1509 = (_new_hash($1505,$1508)|0);
-      $1510 = (_list1_gen($1504,$1509)|0);
-      $1511 = (_cons_gen($1503,$1510,0)|0);
-      HEAP32[$17>>2] = $1511;
-      $1512 = $12;
-      $1513 = ((($1512)) + -4|0);
-      $1514 = HEAP32[$1513>>2]|0;
-      $1515 = ($1514|0)!=(0|0);
-      if ($1515) {
-       $1516 = $12;
-       $1517 = ((($1516)) + -4|0);
-       $1518 = HEAP32[$1517>>2]|0;
-       $1519 = ((($1518)) + 10|0);
-       $1520 = HEAP16[$1519>>1]|0;
-       $1521 = HEAP32[$17>>2]|0;
-       $1522 = ((($1521)) + 10|0);
-       HEAP16[$1522>>1] = $1520;
-       $1523 = $12;
-       $1524 = ((($1523)) + -4|0);
-       $1525 = HEAP32[$1524>>2]|0;
-       $1526 = ((($1525)) + 8|0);
-       $1527 = HEAP16[$1526>>1]|0;
-       $1528 = HEAP32[$17>>2]|0;
-       $1529 = ((($1528)) + 8|0);
-       HEAP16[$1529>>1] = $1527;
-      }
-      break;
-     }
-     case 243:  {
-      $1530 = $1;
-      $1531 = $1;
-      $1532 = $12;
-      $1533 = HEAP32[$1532>>2]|0;
-      $1534 = (_list1_gen($1531,$1533)|0);
-      $1535 = (_cons_gen($1530,$1534,0)|0);
-      HEAP32[$17>>2] = $1535;
-      $1536 = $12;
-      $1537 = HEAP32[$1536>>2]|0;
-      $1538 = ($1537|0)!=(0|0);
-      if ($1538) {
-       $1539 = $12;
-       $1540 = HEAP32[$1539>>2]|0;
-       $1541 = ((($1540)) + 10|0);
-       $1542 = HEAP16[$1541>>1]|0;
-       $1543 = HEAP32[$17>>2]|0;
-       $1544 = ((($1543)) + 10|0);
-       HEAP16[$1544>>1] = $1542;
-       $1545 = $12;
-       $1546 = HEAP32[$1545>>2]|0;
-       $1547 = ((($1546)) + 8|0);
-       $1548 = HEAP16[$1547>>1]|0;
-       $1549 = HEAP32[$17>>2]|0;
-       $1550 = ((($1549)) + 8|0);
-       HEAP16[$1550>>1] = $1548;
-      }
-      break;
-     }
-     case 244:  {
-      $1551 = $1;
-      $1552 = $12;
-      $1553 = ((($1552)) + -4|0);
-      $1554 = HEAP32[$1553>>2]|0;
-      $1555 = $12;
-      $1556 = HEAP32[$1555>>2]|0;
-      $1557 = (_cons_gen($1551,$1554,$1556)|0);
-      HEAP32[$17>>2] = $1557;
-      $1558 = $12;
-      $1559 = ((($1558)) + -4|0);
-      $1560 = HEAP32[$1559>>2]|0;
-      $1561 = ($1560|0)!=(0|0);
-      if ($1561) {
-       $1562 = $12;
-       $1563 = ((($1562)) + -4|0);
-       $1564 = HEAP32[$1563>>2]|0;
-       $1565 = ((($1564)) + 10|0);
-       $1566 = HEAP16[$1565>>1]|0;
-       $1567 = HEAP32[$17>>2]|0;
-       $1568 = ((($1567)) + 10|0);
-       HEAP16[$1568>>1] = $1566;
-       $1569 = $12;
-       $1570 = ((($1569)) + -4|0);
-       $1571 = HEAP32[$1570>>2]|0;
-       $1572 = ((($1571)) + 8|0);
-       $1573 = HEAP16[$1572>>1]|0;
-       $1574 = HEAP32[$17>>2]|0;
-       $1575 = ((($1574)) + 8|0);
-       HEAP16[$1575>>1] = $1573;
-      }
-      break;
-     }
-     case 245:  {
-      $1576 = $1;
-      $1577 = $1;
-      $1578 = $1;
-      $1579 = $12;
-      $1580 = ((($1579)) + -4|0);
-      $1581 = HEAP32[$1580>>2]|0;
-      $1582 = (_new_hash($1578,$1581)|0);
-      $1583 = (_list1_gen($1577,$1582)|0);
-      $1584 = $12;
-      $1585 = HEAP32[$1584>>2]|0;
-      $1586 = (_cons_gen($1576,$1583,$1585)|0);
-      HEAP32[$17>>2] = $1586;
-      $1587 = $12;
-      $1588 = ((($1587)) + -4|0);
-      $1589 = HEAP32[$1588>>2]|0;
-      $1590 = ($1589|0)!=(0|0);
-      if ($1590) {
-       $1591 = $12;
-       $1592 = ((($1591)) + -4|0);
-       $1593 = HEAP32[$1592>>2]|0;
-       $1594 = ((($1593)) + 10|0);
-       $1595 = HEAP16[$1594>>1]|0;
-       $1596 = HEAP32[$17>>2]|0;
-       $1597 = ((($1596)) + 10|0);
-       HEAP16[$1597>>1] = $1595;
-       $1598 = $12;
-       $1599 = ((($1598)) + -4|0);
-       $1600 = HEAP32[$1599>>2]|0;
-       $1601 = ((($1600)) + 8|0);
-       $1602 = HEAP16[$1601>>1]|0;
-       $1603 = HEAP32[$17>>2]|0;
-       $1604 = ((($1603)) + 8|0);
-       HEAP16[$1604>>1] = $1602;
-      }
-      break;
-     }
-     case 246:  {
-      $1605 = $1;
-      $1606 = $1;
-      $1607 = $12;
-      $1608 = ((($1607)) + -12|0);
-      $1609 = HEAP32[$1608>>2]|0;
-      $1610 = $1;
-      $1611 = $1;
-      $1612 = $12;
-      $1613 = ((($1612)) + -4|0);
-      $1614 = HEAP32[$1613>>2]|0;
-      $1615 = (_new_hash($1611,$1614)|0);
-      $1616 = (_list1_gen($1610,$1615)|0);
-      $1617 = (_append_gen($1606,$1609,$1616)|0);
-      $1618 = $12;
-      $1619 = HEAP32[$1618>>2]|0;
-      $1620 = (_cons_gen($1605,$1617,$1619)|0);
-      HEAP32[$17>>2] = $1620;
-      $1621 = $12;
-      $1622 = ((($1621)) + -12|0);
-      $1623 = HEAP32[$1622>>2]|0;
-      $1624 = ($1623|0)!=(0|0);
-      if ($1624) {
-       $1625 = $12;
-       $1626 = ((($1625)) + -12|0);
-       $1627 = HEAP32[$1626>>2]|0;
-       $1628 = ((($1627)) + 10|0);
-       $1629 = HEAP16[$1628>>1]|0;
-       $1630 = HEAP32[$17>>2]|0;
-       $1631 = ((($1630)) + 10|0);
-       HEAP16[$1631>>1] = $1629;
-       $1632 = $12;
-       $1633 = ((($1632)) + -12|0);
-       $1634 = HEAP32[$1633>>2]|0;
-       $1635 = ((($1634)) + 8|0);
-       $1636 = HEAP16[$1635>>1]|0;
-       $1637 = HEAP32[$17>>2]|0;
-       $1638 = ((($1637)) + 8|0);
-       HEAP16[$1638>>1] = $1636;
-      }
-      break;
-     }
-     case 247:  {
-      $1639 = $1;
-      $1640 = $12;
-      $1641 = HEAP32[$1640>>2]|0;
-      $1642 = (_cons_gen($1639,0,$1641)|0);
-      HEAP32[$17>>2] = $1642;
-      $1643 = $12;
-      $1644 = HEAP32[$1643>>2]|0;
-      $1645 = ($1644|0)!=(0|0);
-      if ($1645) {
-       $1646 = $12;
-       $1647 = HEAP32[$1646>>2]|0;
-       $1648 = ((($1647)) + 10|0);
-       $1649 = HEAP16[$1648>>1]|0;
-       $1650 = HEAP32[$17>>2]|0;
-       $1651 = ((($1650)) + 10|0);
-       HEAP16[$1651>>1] = $1649;
-       $1652 = $12;
-       $1653 = HEAP32[$1652>>2]|0;
-       $1654 = ((($1653)) + 8|0);
-       $1655 = HEAP16[$1654>>1]|0;
-       $1656 = HEAP32[$17>>2]|0;
-       $1657 = ((($1656)) + 8|0);
-       HEAP16[$1657>>1] = $1655;
-      }
-      break;
-     }
-     case 248:  {
-      $1658 = $1;
-      $1659 = ((($1658)) + 52|0);
-      $1660 = HEAP32[$1659>>2]|0;
-      HEAP32[$17>>2] = $1660;
-      $1661 = $1;
-      $1662 = ((($1661)) + 52|0);
-      $1663 = HEAP32[$1662>>2]|0;
-      $1664 = $1663 << 1;
-      $1665 = $1664 | 1;
-      $1666 = $1;
-      $1667 = ((($1666)) + 52|0);
-      HEAP32[$1667>>2] = $1665;
-      break;
-     }
-     case 249:  {
-      $1668 = $12;
-      $1669 = ((($1668)) + -4|0);
-      $1670 = HEAP32[$1669>>2]|0;
-      $1671 = $1;
-      $1672 = ((($1671)) + 52|0);
-      HEAP32[$1672>>2] = $1670;
-      $1673 = $12;
-      $1674 = HEAP32[$1673>>2]|0;
-      HEAP32[$17>>2] = $1674;
-      break;
-     }
-     case 250:  {
-      $1675 = $1;
-      $1676 = $12;
-      $1677 = HEAP32[$1676>>2]|0;
-      $1678 = (_new_block_arg($1675,$1677)|0);
-      HEAP32[$17>>2] = $1678;
-      break;
-     }
-     case 251:  {
-      $1679 = $12;
-      $1680 = HEAP32[$1679>>2]|0;
-      HEAP32[$17>>2] = $1680;
-      break;
-     }
-     case 252:  {
-      HEAP32[$17>>2] = 0;
-      break;
-     }
-     case 253:  {
-      $1681 = $1;
-      $1682 = $12;
-      $1683 = HEAP32[$1682>>2]|0;
-      $1684 = (_cons_gen($1681,$1683,0)|0);
-      HEAP32[$17>>2] = $1684;
-      $1685 = $12;
-      $1686 = HEAP32[$1685>>2]|0;
-      $1687 = ($1686|0)!=(0|0);
-      if ($1687) {
-       $1688 = $12;
-       $1689 = HEAP32[$1688>>2]|0;
-       $1690 = ((($1689)) + 10|0);
-       $1691 = HEAP16[$1690>>1]|0;
-       $1692 = HEAP32[$17>>2]|0;
-       $1693 = ((($1692)) + 10|0);
-       HEAP16[$1693>>1] = $1691;
-       $1694 = $12;
-       $1695 = HEAP32[$1694>>2]|0;
-       $1696 = ((($1695)) + 8|0);
-       $1697 = HEAP16[$1696>>1]|0;
-       $1698 = HEAP32[$17>>2]|0;
-       $1699 = ((($1698)) + 8|0);
-       HEAP16[$1699>>1] = $1697;
-      }
-      break;
-     }
-     case 254:  {
-      $1700 = $1;
-      $1701 = $1;
-      $1702 = $12;
-      $1703 = HEAP32[$1702>>2]|0;
-      $1704 = (_new_splat($1701,$1703)|0);
-      $1705 = (_cons_gen($1700,$1704,0)|0);
-      HEAP32[$17>>2] = $1705;
-      $1706 = $12;
-      $1707 = HEAP32[$1706>>2]|0;
-      $1708 = ($1707|0)!=(0|0);
-      if ($1708) {
-       $1709 = $12;
-       $1710 = HEAP32[$1709>>2]|0;
-       $1711 = ((($1710)) + 10|0);
-       $1712 = HEAP16[$1711>>1]|0;
-       $1713 = HEAP32[$17>>2]|0;
-       $1714 = ((($1713)) + 10|0);
-       HEAP16[$1714>>1] = $1712;
-       $1715 = $12;
-       $1716 = HEAP32[$1715>>2]|0;
-       $1717 = ((($1716)) + 8|0);
-       $1718 = HEAP16[$1717>>1]|0;
-       $1719 = HEAP32[$17>>2]|0;
-       $1720 = ((($1719)) + 8|0);
-       HEAP16[$1720>>1] = $1718;
-      }
-      break;
-     }
-     case 255:  {
-      $1721 = $1;
-      $1722 = $12;
-      $1723 = ((($1722)) + -8|0);
-      $1724 = HEAP32[$1723>>2]|0;
-      $1725 = $1;
-      $1726 = $12;
-      $1727 = HEAP32[$1726>>2]|0;
-      $1728 = (_list1_gen($1725,$1727)|0);
-      $1729 = (_append_gen($1721,$1724,$1728)|0);
-      HEAP32[$17>>2] = $1729;
-      break;
-     }
-     case 256:  {
-      $1730 = $1;
-      $1731 = $12;
-      $1732 = ((($1731)) + -12|0);
-      $1733 = HEAP32[$1732>>2]|0;
-      $1734 = $1;
-      $1735 = $1;
-      $1736 = $12;
-      $1737 = HEAP32[$1736>>2]|0;
-      $1738 = (_new_splat($1735,$1737)|0);
-      $1739 = (_list1_gen($1734,$1738)|0);
-      $1740 = (_append_gen($1730,$1733,$1739)|0);
-      HEAP32[$17>>2] = $1740;
-      break;
-     }
-     case 257:  {
-      $1741 = $1;
-      $1742 = $12;
-      $1743 = ((($1742)) + -12|0);
-      $1744 = HEAP32[$1743>>2]|0;
-      $1745 = $1;
-      $1746 = $12;
-      $1747 = HEAP32[$1746>>2]|0;
-      $1748 = (_list1_gen($1745,$1747)|0);
-      $1749 = (_append_gen($1741,$1744,$1748)|0);
-      HEAP32[$17>>2] = $1749;
-      break;
-     }
-     case 258:  {
-      $1750 = $1;
-      $1751 = $12;
-      $1752 = ((($1751)) + -16|0);
-      $1753 = HEAP32[$1752>>2]|0;
-      $1754 = $1;
-      $1755 = $1;
-      $1756 = $12;
-      $1757 = HEAP32[$1756>>2]|0;
-      $1758 = (_new_splat($1755,$1757)|0);
-      $1759 = (_list1_gen($1754,$1758)|0);
-      $1760 = (_append_gen($1750,$1753,$1759)|0);
-      HEAP32[$17>>2] = $1760;
-      break;
-     }
-     case 259:  {
-      $1761 = $1;
-      $1762 = $12;
-      $1763 = ((($1762)) + -8|0);
-      $1764 = HEAP32[$1763>>2]|0;
-      $1765 = $1;
-      $1766 = $12;
-      $1767 = HEAP32[$1766>>2]|0;
-      $1768 = (_list1_gen($1765,$1767)|0);
-      $1769 = (_append_gen($1761,$1764,$1768)|0);
-      HEAP32[$17>>2] = $1769;
-      break;
-     }
-     case 260:  {
-      $1770 = $1;
-      $1771 = $12;
-      $1772 = ((($1771)) + -12|0);
-      $1773 = HEAP32[$1772>>2]|0;
-      $1774 = $1;
-      $1775 = $1;
-      $1776 = $12;
-      $1777 = HEAP32[$1776>>2]|0;
-      $1778 = (_new_splat($1775,$1777)|0);
-      $1779 = (_list1_gen($1774,$1778)|0);
-      $1780 = (_append_gen($1770,$1773,$1779)|0);
-      HEAP32[$17>>2] = $1780;
-      break;
-     }
-     case 261:  {
-      $1781 = $1;
-      $1782 = $1;
-      $1783 = $12;
-      $1784 = HEAP32[$1783>>2]|0;
-      $1785 = (_new_splat($1782,$1784)|0);
-      $1786 = (_list1_gen($1781,$1785)|0);
-      HEAP32[$17>>2] = $1786;
-      break;
-     }
-     case 269:  {
-      $1787 = $1;
-      $1788 = $12;
-      $1789 = HEAP32[$1788>>2]|0;
-      $1790 = (_new_fcall($1787,$1789,0)|0);
-      HEAP32[$17>>2] = $1790;
-      break;
-     }
-     case 270:  {
-      $1791 = $1;
-      $1792 = ((($1791)) + 52|0);
-      $1793 = HEAP32[$1792>>2]|0;
-      HEAP32[$17>>2] = $1793;
-      $1794 = $1;
-      $1795 = ((($1794)) + 52|0);
-      HEAP32[$1795>>2] = 0;
-      break;
-     }
-     case 271:  {
-      $1796 = $12;
-      $1797 = ((($1796)) + -8|0);
-      $1798 = HEAP32[$1797>>2]|0;
-      $1799 = $1;
-      $1800 = ((($1799)) + 52|0);
-      HEAP32[$1800>>2] = $1798;
-      $1801 = $12;
-      $1802 = ((($1801)) + -4|0);
-      $1803 = HEAP32[$1802>>2]|0;
-      HEAP32[$17>>2] = $1803;
-      break;
-     }
-     case 272:  {
-      $1804 = $1;
-      $1805 = ((($1804)) + 52|0);
-      $1806 = HEAP32[$1805>>2]|0;
-      HEAP32[$17>>2] = $1806;
-      $1807 = $1;
-      $1808 = ((($1807)) + 52|0);
-      HEAP32[$1808>>2] = 0;
-      break;
-     }
-     case 273:  {
-      $1809 = $1;
-      $1810 = ((($1809)) + 40|0);
-      HEAP32[$1810>>2] = 2;
-      break;
-     }
-     case 274:  {
-      $1811 = $12;
-      $1812 = ((($1811)) + -12|0);
-      $1813 = HEAP32[$1812>>2]|0;
-      $1814 = $1;
-      $1815 = ((($1814)) + 52|0);
-      HEAP32[$1815>>2] = $1813;
-      $1816 = $12;
-      $1817 = ((($1816)) + -8|0);
-      $1818 = HEAP32[$1817>>2]|0;
-      HEAP32[$17>>2] = $1818;
-      break;
-     }
-     case 275:  {
-      $1819 = $1;
-      $1820 = ((($1819)) + 40|0);
-      HEAP32[$1820>>2] = 2;
-      break;
-     }
-     case 276:  {
-      HEAP32[$17>>2] = 0;
-      break;
-     }
-     case 277:  {
-      $1821 = $12;
-      $1822 = ((($1821)) + -4|0);
-      $1823 = HEAP32[$1822>>2]|0;
-      HEAP32[$17>>2] = $1823;
-      break;
-     }
-     case 278:  {
-      $1824 = $1;
-      $1825 = $12;
-      $1826 = ((($1825)) + -8|0);
-      $1827 = HEAP32[$1826>>2]|0;
-      $1828 = $12;
-      $1829 = HEAP32[$1828>>2]|0;
-      $1830 = (_new_colon2($1824,$1827,$1829)|0);
-      HEAP32[$17>>2] = $1830;
-      break;
-     }
-     case 279:  {
-      $1831 = $1;
-      $1832 = $12;
-      $1833 = HEAP32[$1832>>2]|0;
-      $1834 = (_new_colon3($1831,$1833)|0);
-      HEAP32[$17>>2] = $1834;
-      break;
-     }
-     case 280:  {
-      $1835 = $1;
-      $1836 = $12;
-      $1837 = ((($1836)) + -4|0);
-      $1838 = HEAP32[$1837>>2]|0;
-      $1839 = (_new_array($1835,$1838)|0);
-      HEAP32[$17>>2] = $1839;
-      $1840 = $12;
-      $1841 = ((($1840)) + -4|0);
-      $1842 = HEAP32[$1841>>2]|0;
-      $1843 = ($1842|0)!=(0|0);
-      if ($1843) {
-       $1844 = $12;
-       $1845 = ((($1844)) + -4|0);
-       $1846 = HEAP32[$1845>>2]|0;
-       $1847 = ((($1846)) + 10|0);
-       $1848 = HEAP16[$1847>>1]|0;
-       $1849 = HEAP32[$17>>2]|0;
-       $1850 = ((($1849)) + 10|0);
-       HEAP16[$1850>>1] = $1848;
-       $1851 = $12;
-       $1852 = ((($1851)) + -4|0);
-       $1853 = HEAP32[$1852>>2]|0;
-       $1854 = ((($1853)) + 8|0);
-       $1855 = HEAP16[$1854>>1]|0;
-       $1856 = HEAP32[$17>>2]|0;
-       $1857 = ((($1856)) + 8|0);
-       HEAP16[$1857>>1] = $1855;
-      }
-      break;
-     }
-     case 281:  {
-      $1858 = $1;
-      $1859 = $12;
-      $1860 = ((($1859)) + -4|0);
-      $1861 = HEAP32[$1860>>2]|0;
-      $1862 = (_new_hash($1858,$1861)|0);
-      HEAP32[$17>>2] = $1862;
-      $1863 = $12;
-      $1864 = ((($1863)) + -4|0);
-      $1865 = HEAP32[$1864>>2]|0;
-      $1866 = ($1865|0)!=(0|0);
-      if ($1866) {
-       $1867 = $12;
-       $1868 = ((($1867)) + -4|0);
-       $1869 = HEAP32[$1868>>2]|0;
-       $1870 = ((($1869)) + 10|0);
-       $1871 = HEAP16[$1870>>1]|0;
-       $1872 = HEAP32[$17>>2]|0;
-       $1873 = ((($1872)) + 10|0);
-       HEAP16[$1873>>1] = $1871;
-       $1874 = $12;
-       $1875 = ((($1874)) + -4|0);
-       $1876 = HEAP32[$1875>>2]|0;
-       $1877 = ((($1876)) + 8|0);
-       $1878 = HEAP16[$1877>>1]|0;
-       $1879 = HEAP32[$17>>2]|0;
-       $1880 = ((($1879)) + 8|0);
-       HEAP16[$1880>>1] = $1878;
-      }
-      break;
-     }
-     case 282:  {
-      $1881 = $1;
-      $1882 = (_new_return($1881,0)|0);
-      HEAP32[$17>>2] = $1882;
-      break;
-     }
-     case 283:  {
-      $1883 = $1;
-      $1884 = $12;
-      $1885 = ((($1884)) + -4|0);
-      $1886 = HEAP32[$1885>>2]|0;
-      $1887 = (_new_yield($1883,$1886)|0);
-      HEAP32[$17>>2] = $1887;
-      break;
-     }
-     case 284:  {
-      $1888 = $1;
-      $1889 = (_new_yield($1888,0)|0);
-      HEAP32[$17>>2] = $1889;
-      break;
-     }
-     case 285:  {
-      $1890 = $1;
-      $1891 = (_new_yield($1890,0)|0);
-      HEAP32[$17>>2] = $1891;
-      break;
-     }
-     case 286:  {
-      $1892 = $1;
-      $1893 = $12;
-      $1894 = ((($1893)) + -4|0);
-      $1895 = HEAP32[$1894>>2]|0;
-      $1896 = (_cond($1895)|0);
-      $1897 = (_call_uni_op($1892,$1896,65619)|0);
-      HEAP32[$17>>2] = $1897;
-      break;
-     }
-     case 287:  {
-      $1898 = $1;
-      $1899 = $1;
-      $1900 = (_new_nil($1899)|0);
-      $1901 = (_call_uni_op($1898,$1900,65619)|0);
-      HEAP32[$17>>2] = $1901;
-      break;
-     }
-     case 288:  {
-      $1902 = $1;
-      $1903 = $12;
-      $1904 = ((($1903)) + -4|0);
-      $1905 = HEAP32[$1904>>2]|0;
-      $1906 = $1;
-      $1907 = $12;
-      $1908 = HEAP32[$1907>>2]|0;
-      $1909 = (_cons_gen($1906,0,$1908)|0);
-      $1910 = (_new_fcall($1902,$1905,$1909)|0);
-      HEAP32[$17>>2] = $1910;
-      break;
-     }
-     case 290:  {
-      $1911 = $1;
-      $1912 = $12;
-      $1913 = ((($1912)) + -4|0);
-      $1914 = HEAP32[$1913>>2]|0;
-      $1915 = $12;
-      $1916 = HEAP32[$1915>>2]|0;
-      _call_with_block($1911,$1914,$1916);
-      $1917 = $12;
-      $1918 = ((($1917)) + -4|0);
-      $1919 = HEAP32[$1918>>2]|0;
-      HEAP32[$17>>2] = $1919;
-      break;
-     }
-     case 291:  {
-      $1920 = $1;
-      _local_nest($1920);
-      $1921 = $1;
-      $1922 = ((($1921)) + 60|0);
-      $1923 = HEAP32[$1922>>2]|0;
-      HEAP32[$17>>2] = $1923;
-      $1924 = $1;
-      $1925 = ((($1924)) + 56|0);
-      $1926 = HEAP32[$1925>>2]|0;
-      $1927 = (($1926) + 1)|0;
-      HEAP32[$1925>>2] = $1927;
-      $1928 = $1;
-      $1929 = ((($1928)) + 60|0);
-      HEAP32[$1929>>2] = $1927;
-      break;
-     }
-     case 292:  {
-      $1930 = $1;
-      $1931 = ((($1930)) + 52|0);
-      $1932 = HEAP32[$1931>>2]|0;
-      HEAP32[$17>>2] = $1932;
-      $1933 = $1;
-      $1934 = ((($1933)) + 52|0);
-      HEAP32[$1934>>2] = 0;
-      break;
-     }
-     case 293:  {
-      $1935 = $12;
-      $1936 = ((($1935)) + -12|0);
-      $1937 = HEAP32[$1936>>2]|0;
-      $1938 = $1;
-      $1939 = ((($1938)) + 60|0);
-      HEAP32[$1939>>2] = $1937;
-      $1940 = $1;
-      $1941 = $12;
-      $1942 = ((($1941)) + -8|0);
-      $1943 = HEAP32[$1942>>2]|0;
-      $1944 = $12;
-      $1945 = HEAP32[$1944>>2]|0;
-      $1946 = (_new_lambda($1940,$1943,$1945)|0);
-      HEAP32[$17>>2] = $1946;
-      $1947 = $1;
-      _local_unnest($1947);
-      $1948 = $12;
-      $1949 = ((($1948)) + -4|0);
-      $1950 = HEAP32[$1949>>2]|0;
-      $1951 = $1;
-      $1952 = ((($1951)) + 52|0);
-      HEAP32[$1952>>2] = $1950;
-      $1953 = $1;
-      $1954 = ((($1953)) + 52|0);
-      $1955 = HEAP32[$1954>>2]|0;
-      $1956 = $1955 >>> 1;
-      $1957 = $1;
-      $1958 = ((($1957)) + 52|0);
-      $1959 = HEAP32[$1958>>2]|0;
-      $1960 = $1959 & 1;
-      $1961 = $1956 | $1960;
-      $1962 = $1;
-      $1963 = ((($1962)) + 52|0);
-      HEAP32[$1963>>2] = $1961;
-      break;
-     }
-     case 294:  {
-      $1964 = $1;
-      $1965 = $12;
-      $1966 = ((($1965)) + -16|0);
-      $1967 = HEAP32[$1966>>2]|0;
-      $1968 = (_cond($1967)|0);
-      $1969 = $12;
-      $1970 = ((($1969)) + -8|0);
-      $1971 = HEAP32[$1970>>2]|0;
-      $1972 = $12;
-      $1973 = ((($1972)) + -4|0);
-      $1974 = HEAP32[$1973>>2]|0;
-      $1975 = (_new_if($1964,$1968,$1971,$1974)|0);
-      HEAP32[$17>>2] = $1975;
-      $1976 = $12;
-      $1977 = ((($1976)) + -20|0);
-      $1978 = HEAP32[$1977>>2]|0;
-      $1979 = $1978&65535;
-      $1980 = HEAP32[$17>>2]|0;
-      $1981 = ((($1980)) + 8|0);
-      HEAP16[$1981>>1] = $1979;
-      break;
-     }
-     case 295:  {
-      $1982 = $1;
-      $1983 = $12;
-      $1984 = ((($1983)) + -16|0);
-      $1985 = HEAP32[$1984>>2]|0;
-      $1986 = (_cond($1985)|0);
-      $1987 = $12;
-      $1988 = ((($1987)) + -8|0);
-      $1989 = HEAP32[$1988>>2]|0;
-      $1990 = $12;
-      $1991 = ((($1990)) + -4|0);
-      $1992 = HEAP32[$1991>>2]|0;
-      $1993 = (_new_unless($1982,$1986,$1989,$1992)|0);
-      HEAP32[$17>>2] = $1993;
-      $1994 = $12;
-      $1995 = ((($1994)) + -20|0);
-      $1996 = HEAP32[$1995>>2]|0;
-      $1997 = $1996&65535;
-      $1998 = HEAP32[$17>>2]|0;
-      $1999 = ((($1998)) + 8|0);
-      HEAP16[$1999>>1] = $1997;
-      break;
-     }
-     case 296:  {
-      $2000 = $1;
-      $2001 = ((($2000)) + 48|0);
-      $2002 = HEAP32[$2001>>2]|0;
-      $2003 = $2002 << 1;
-      $2004 = $2003 | 1;
-      $2005 = $1;
-      $2006 = ((($2005)) + 48|0);
-      HEAP32[$2006>>2] = $2004;
-      break;
-     }
-     case 297:  {
-      $2007 = $1;
-      $2008 = ((($2007)) + 48|0);
-      $2009 = HEAP32[$2008>>2]|0;
-      $2010 = $2009 >>> 1;
-      $2011 = $1;
-      $2012 = ((($2011)) + 48|0);
-      HEAP32[$2012>>2] = $2010;
-      break;
-     }
-     case 298:  {
-      $2013 = $1;
-      $2014 = $12;
-      $2015 = ((($2014)) + -16|0);
-      $2016 = HEAP32[$2015>>2]|0;
-      $2017 = (_cond($2016)|0);
-      $2018 = $12;
-      $2019 = ((($2018)) + -4|0);
-      $2020 = HEAP32[$2019>>2]|0;
-      $2021 = (_new_while($2013,$2017,$2020)|0);
-      HEAP32[$17>>2] = $2021;
-      $2022 = $12;
-      $2023 = ((($2022)) + -24|0);
-      $2024 = HEAP32[$2023>>2]|0;
-      $2025 = $2024&65535;
-      $2026 = HEAP32[$17>>2]|0;
-      $2027 = ((($2026)) + 8|0);
-      HEAP16[$2027>>1] = $2025;
-      break;
-     }
-     case 299:  {
-      $2028 = $1;
-      $2029 = ((($2028)) + 48|0);
-      $2030 = HEAP32[$2029>>2]|0;
-      $2031 = $2030 << 1;
-      $2032 = $2031 | 1;
-      $2033 = $1;
-      $2034 = ((($2033)) + 48|0);
-      HEAP32[$2034>>2] = $2032;
-      break;
-     }
-     case 300:  {
-      $2035 = $1;
-      $2036 = ((($2035)) + 48|0);
-      $2037 = HEAP32[$2036>>2]|0;
-      $2038 = $2037 >>> 1;
-      $2039 = $1;
-      $2040 = ((($2039)) + 48|0);
-      HEAP32[$2040>>2] = $2038;
-      break;
-     }
-     case 301:  {
-      $2041 = $1;
-      $2042 = $12;
-      $2043 = ((($2042)) + -16|0);
-      $2044 = HEAP32[$2043>>2]|0;
-      $2045 = (_cond($2044)|0);
-      $2046 = $12;
-      $2047 = ((($2046)) + -4|0);
-      $2048 = HEAP32[$2047>>2]|0;
-      $2049 = (_new_until($2041,$2045,$2048)|0);
-      HEAP32[$17>>2] = $2049;
-      $2050 = $12;
-      $2051 = ((($2050)) + -24|0);
-      $2052 = HEAP32[$2051>>2]|0;
-      $2053 = $2052&65535;
-      $2054 = HEAP32[$17>>2]|0;
-      $2055 = ((($2054)) + 8|0);
-      HEAP16[$2055>>1] = $2053;
-      break;
-     }
-     case 302:  {
-      $2056 = $1;
-      $2057 = $12;
-      $2058 = ((($2057)) + -12|0);
-      $2059 = HEAP32[$2058>>2]|0;
-      $2060 = $12;
-      $2061 = ((($2060)) + -4|0);
-      $2062 = HEAP32[$2061>>2]|0;
-      $2063 = (_new_case($2056,$2059,$2062)|0);
-      HEAP32[$17>>2] = $2063;
-      break;
-     }
-     case 303:  {
-      $2064 = $1;
-      $2065 = $12;
-      $2066 = ((($2065)) + -4|0);
-      $2067 = HEAP32[$2066>>2]|0;
-      $2068 = (_new_case($2064,0,$2067)|0);
-      HEAP32[$17>>2] = $2068;
-      break;
-     }
-     case 304:  {
-      $2069 = $1;
-      $2070 = ((($2069)) + 48|0);
-      $2071 = HEAP32[$2070>>2]|0;
-      $2072 = $2071 << 1;
-      $2073 = $2072 | 1;
-      $2074 = $1;
-      $2075 = ((($2074)) + 48|0);
-      HEAP32[$2075>>2] = $2073;
-      break;
-     }
-     case 305:  {
-      $2076 = $1;
-      $2077 = ((($2076)) + 48|0);
-      $2078 = HEAP32[$2077>>2]|0;
-      $2079 = $2078 >>> 1;
-      $2080 = $1;
-      $2081 = ((($2080)) + 48|0);
-      HEAP32[$2081>>2] = $2079;
-      break;
-     }
-     case 306:  {
-      $2082 = $1;
-      $2083 = $12;
-      $2084 = ((($2083)) + -28|0);
-      $2085 = HEAP32[$2084>>2]|0;
-      $2086 = $12;
-      $2087 = ((($2086)) + -16|0);
-      $2088 = HEAP32[$2087>>2]|0;
-      $2089 = $12;
-      $2090 = ((($2089)) + -4|0);
-      $2091 = HEAP32[$2090>>2]|0;
-      $2092 = (_new_for($2082,$2085,$2088,$2091)|0);
-      HEAP32[$17>>2] = $2092;
-      $2093 = $12;
-      $2094 = ((($2093)) + -32|0);
-      $2095 = HEAP32[$2094>>2]|0;
-      $2096 = $2095&65535;
-      $2097 = HEAP32[$17>>2]|0;
-      $2098 = ((($2097)) + 8|0);
-      HEAP16[$2098>>1] = $2096;
-      break;
-     }
-     case 307:  {
-      $2099 = $1;
-      $2100 = ((($2099)) + 64|0);
-      $2101 = HEAP32[$2100>>2]|0;
-      $2102 = ($2101|0)!=(0);
-      if ($2102) {
-       label = 310;
-      } else {
-       $2103 = $1;
-       $2104 = ((($2103)) + 68|0);
-       $2105 = HEAP32[$2104>>2]|0;
-       $2106 = ($2105|0)!=(0);
-       if ($2106) {
-        label = 310;
-       }
-      }
-      if ((label|0) == 310) {
-       label = 0;
-       $2107 = $1;
-       _yyerror($2107,59561);
-      }
-      $2108 = $1;
-      $2109 = (_local_switch($2108)|0);
-      HEAP32[$17>>2] = $2109;
-      break;
-     }
-     case 308:  {
-      $2110 = $1;
-      $2111 = $12;
-      $2112 = ((($2111)) + -16|0);
-      $2113 = HEAP32[$2112>>2]|0;
-      $2114 = $12;
-      $2115 = ((($2114)) + -12|0);
-      $2116 = HEAP32[$2115>>2]|0;
-      $2117 = $12;
-      $2118 = ((($2117)) + -4|0);
-      $2119 = HEAP32[$2118>>2]|0;
-      $2120 = (_new_class($2110,$2113,$2116,$2119)|0);
-      HEAP32[$17>>2] = $2120;
-      $2121 = $12;
-      $2122 = ((($2121)) + -20|0);
-      $2123 = HEAP32[$2122>>2]|0;
-      $2124 = $2123&65535;
-      $2125 = HEAP32[$17>>2]|0;
-      $2126 = ((($2125)) + 8|0);
-      HEAP16[$2126>>1] = $2124;
-      $2127 = $1;
-      $2128 = $12;
-      $2129 = ((($2128)) + -8|0);
-      $2130 = HEAP32[$2129>>2]|0;
-      _local_resume($2127,$2130);
-      break;
-     }
-     case 309:  {
-      $2131 = $1;
-      $2132 = ((($2131)) + 64|0);
-      $2133 = HEAP32[$2132>>2]|0;
-      HEAP32[$17>>2] = $2133;
-      $2134 = $1;
-      $2135 = ((($2134)) + 64|0);
-      HEAP32[$2135>>2] = 0;
-      break;
-     }
-     case 310:  {
-      $2136 = $1;
-      $2137 = $1;
-      $2138 = (_local_switch($2137)|0);
-      $2139 = $1;
-      $2140 = ((($2139)) + 68|0);
-      $2141 = HEAP32[$2140>>2]|0;
-      $2142 = $2141;
-      $2143 = (_cons_gen($2136,$2138,$2142)|0);
-      HEAP32[$17>>2] = $2143;
-      $2144 = $1;
-      $2145 = ((($2144)) + 68|0);
-      HEAP32[$2145>>2] = 0;
-      break;
-     }
-     case 311:  {
-      $2146 = $1;
-      $2147 = $12;
-      $2148 = ((($2147)) + -20|0);
-      $2149 = HEAP32[$2148>>2]|0;
-      $2150 = $12;
-      $2151 = ((($2150)) + -4|0);
-      $2152 = HEAP32[$2151>>2]|0;
-      $2153 = (_new_sclass($2146,$2149,$2152)|0);
-      HEAP32[$17>>2] = $2153;
-      $2154 = $12;
-      $2155 = ((($2154)) + -28|0);
-      $2156 = HEAP32[$2155>>2]|0;
-      $2157 = $2156&65535;
-      $2158 = HEAP32[$17>>2]|0;
-      $2159 = ((($2158)) + 8|0);
-      HEAP16[$2159>>1] = $2157;
-      $2160 = $1;
-      $2161 = $12;
-      $2162 = ((($2161)) + -8|0);
-      $2163 = HEAP32[$2162>>2]|0;
-      $2164 = HEAP32[$2163>>2]|0;
-      _local_resume($2160,$2164);
-      $2165 = $12;
-      $2166 = ((($2165)) + -16|0);
-      $2167 = HEAP32[$2166>>2]|0;
-      $2168 = $1;
-      $2169 = ((($2168)) + 64|0);
-      HEAP32[$2169>>2] = $2167;
-      $2170 = $12;
-      $2171 = ((($2170)) + -8|0);
-      $2172 = HEAP32[$2171>>2]|0;
-      $2173 = ((($2172)) + 4|0);
-      $2174 = HEAP32[$2173>>2]|0;
-      $2175 = $2174;
-      $2176 = $1;
-      $2177 = ((($2176)) + 68|0);
-      HEAP32[$2177>>2] = $2175;
-      break;
-     }
-     case 312:  {
-      $2178 = $1;
-      $2179 = ((($2178)) + 64|0);
-      $2180 = HEAP32[$2179>>2]|0;
-      $2181 = ($2180|0)!=(0);
-      if ($2181) {
-       label = 318;
-      } else {
-       $2182 = $1;
-       $2183 = ((($2182)) + 68|0);
-       $2184 = HEAP32[$2183>>2]|0;
-       $2185 = ($2184|0)!=(0);
-       if ($2185) {
-        label = 318;
-       }
-      }
-      if ((label|0) == 318) {
-       label = 0;
-       $2186 = $1;
-       _yyerror($2186,59593);
-      }
-      $2187 = $1;
-      $2188 = (_local_switch($2187)|0);
-      HEAP32[$17>>2] = $2188;
-      break;
-     }
-     case 313:  {
-      $2189 = $1;
-      $2190 = $12;
-      $2191 = ((($2190)) + -12|0);
-      $2192 = HEAP32[$2191>>2]|0;
-      $2193 = $12;
-      $2194 = ((($2193)) + -4|0);
-      $2195 = HEAP32[$2194>>2]|0;
-      $2196 = (_new_module($2189,$2192,$2195)|0);
-      HEAP32[$17>>2] = $2196;
-      $2197 = $12;
-      $2198 = ((($2197)) + -16|0);
-      $2199 = HEAP32[$2198>>2]|0;
-      $2200 = $2199&65535;
-      $2201 = HEAP32[$17>>2]|0;
-      $2202 = ((($2201)) + 8|0);
-      HEAP16[$2202>>1] = $2200;
-      $2203 = $1;
-      $2204 = $12;
-      $2205 = ((($2204)) + -8|0);
-      $2206 = HEAP32[$2205>>2]|0;
-      _local_resume($2203,$2206);
-      break;
-     }
-     case 314:  {
-      $2207 = $1;
-      $2208 = ((($2207)) + 52|0);
-      $2209 = HEAP32[$2208>>2]|0;
-      HEAP32[$17>>2] = $2209;
-      $2210 = $1;
-      $2211 = ((($2210)) + 52|0);
-      HEAP32[$2211>>2] = 0;
-      break;
-     }
-     case 315:  {
-      $2212 = $1;
-      $2213 = ((($2212)) + 64|0);
-      $2214 = HEAP32[$2213>>2]|0;
-      $2215 = (($2214) + 1)|0;
-      HEAP32[$2213>>2] = $2215;
-      $2216 = $1;
-      $2217 = (_local_switch($2216)|0);
-      HEAP32[$17>>2] = $2217;
-      break;
-     }
-     case 316:  {
-      $2218 = $1;
-      $2219 = $12;
-      $2220 = ((($2219)) + -20|0);
-      $2221 = HEAP32[$2220>>2]|0;
-      $2222 = $12;
-      $2223 = ((($2222)) + -8|0);
-      $2224 = HEAP32[$2223>>2]|0;
-      $2225 = $12;
-      $2226 = ((($2225)) + -4|0);
-      $2227 = HEAP32[$2226>>2]|0;
-      $2228 = (_new_def($2218,$2221,$2224,$2227)|0);
-      HEAP32[$17>>2] = $2228;
-      $2229 = $12;
-      $2230 = ((($2229)) + -24|0);
-      $2231 = HEAP32[$2230>>2]|0;
-      $2232 = $2231&65535;
-      $2233 = HEAP32[$17>>2]|0;
-      $2234 = ((($2233)) + 8|0);
-      HEAP16[$2234>>1] = $2232;
-      $2235 = $1;
-      $2236 = $12;
-      $2237 = ((($2236)) + -12|0);
-      $2238 = HEAP32[$2237>>2]|0;
-      _local_resume($2235,$2238);
-      $2239 = $1;
-      $2240 = ((($2239)) + 64|0);
-      $2241 = HEAP32[$2240>>2]|0;
-      $2242 = (($2241) + -1)|0;
-      HEAP32[$2240>>2] = $2242;
-      $2243 = $12;
-      $2244 = ((($2243)) + -16|0);
-      $2245 = HEAP32[$2244>>2]|0;
-      $2246 = $1;
-      $2247 = ((($2246)) + 52|0);
-      HEAP32[$2247>>2] = $2245;
-      break;
-     }
-     case 317:  {
-      $2248 = $1;
-      $2249 = ((($2248)) + 40|0);
-      HEAP32[$2249>>2] = 7;
-      $2250 = $1;
-      $2251 = ((($2250)) + 52|0);
-      $2252 = HEAP32[$2251>>2]|0;
-      HEAP32[$17>>2] = $2252;
-      $2253 = $1;
-      $2254 = ((($2253)) + 52|0);
-      HEAP32[$2254>>2] = 0;
-      break;
-     }
-     case 318:  {
-      $2255 = $1;
-      $2256 = ((($2255)) + 68|0);
-      $2257 = HEAP32[$2256>>2]|0;
-      $2258 = (($2257) + 1)|0;
-      HEAP32[$2256>>2] = $2258;
-      $2259 = $1;
-      $2260 = ((($2259)) + 40|0);
-      HEAP32[$2260>>2] = 3;
-      $2261 = $1;
-      $2262 = (_local_switch($2261)|0);
-      HEAP32[$17>>2] = $2262;
-      break;
-     }
-     case 319:  {
-      $2263 = $1;
-      $2264 = $12;
-      $2265 = ((($2264)) + -28|0);
-      $2266 = HEAP32[$2265>>2]|0;
-      $2267 = $12;
-      $2268 = ((($2267)) + -16|0);
-      $2269 = HEAP32[$2268>>2]|0;
-      $2270 = $12;
-      $2271 = ((($2270)) + -8|0);
-      $2272 = HEAP32[$2271>>2]|0;
-      $2273 = $12;
-      $2274 = ((($2273)) + -4|0);
-      $2275 = HEAP32[$2274>>2]|0;
-      $2276 = (_new_sdef($2263,$2266,$2269,$2272,$2275)|0);
-      HEAP32[$17>>2] = $2276;
-      $2277 = $12;
-      $2278 = ((($2277)) + -32|0);
-      $2279 = HEAP32[$2278>>2]|0;
-      $2280 = $2279&65535;
-      $2281 = HEAP32[$17>>2]|0;
-      $2282 = ((($2281)) + 8|0);
-      HEAP16[$2282>>1] = $2280;
-      $2283 = $1;
-      $2284 = $12;
-      $2285 = ((($2284)) + -12|0);
-      $2286 = HEAP32[$2285>>2]|0;
-      _local_resume($2283,$2286);
-      $2287 = $1;
-      $2288 = ((($2287)) + 68|0);
-      $2289 = HEAP32[$2288>>2]|0;
-      $2290 = (($2289) + -1)|0;
-      HEAP32[$2288>>2] = $2290;
-      $2291 = $12;
-      $2292 = ((($2291)) + -20|0);
-      $2293 = HEAP32[$2292>>2]|0;
-      $2294 = $1;
-      $2295 = ((($2294)) + 52|0);
-      HEAP32[$2295>>2] = $2293;
-      break;
-     }
-     case 320:  {
-      $2296 = $1;
-      $2297 = (_new_break($2296,0)|0);
-      HEAP32[$17>>2] = $2297;
-      break;
-     }
-     case 321:  {
-      $2298 = $1;
-      $2299 = (_new_next($2298,0)|0);
-      HEAP32[$17>>2] = $2299;
-      break;
-     }
-     case 322:  {
-      $2300 = $1;
-      $2301 = (_new_redo($2300)|0);
-      HEAP32[$17>>2] = $2301;
-      break;
-     }
-     case 323:  {
-      $2302 = $1;
-      $2303 = (_new_retry($2302)|0);
-      HEAP32[$17>>2] = $2303;
-      break;
-     }
-     case 324:  {
-      $2304 = $12;
-      $2305 = HEAP32[$2304>>2]|0;
-      HEAP32[$17>>2] = $2305;
-      $2306 = HEAP32[$17>>2]|0;
-      $2307 = ($2306|0)!=(0|0);
-      if (!($2307)) {
-       $2308 = $1;
-       $2309 = (_new_nil($2308)|0);
-       HEAP32[$17>>2] = $2309;
-      }
-      break;
-     }
-     case 331:  {
-      $2310 = $1;
-      $2311 = $12;
-      $2312 = ((($2311)) + -12|0);
-      $2313 = HEAP32[$2312>>2]|0;
-      $2314 = (_cond($2313)|0);
-      $2315 = $12;
-      $2316 = ((($2315)) + -4|0);
-      $2317 = HEAP32[$2316>>2]|0;
-      $2318 = $12;
-      $2319 = HEAP32[$2318>>2]|0;
-      $2320 = (_new_if($2310,$2314,$2317,$2319)|0);
-      HEAP32[$17>>2] = $2320;
-      break;
-     }
-     case 333:  {
-      $2321 = $12;
-      $2322 = HEAP32[$2321>>2]|0;
-      HEAP32[$17>>2] = $2322;
-      break;
-     }
-     case 334:  {
-      $2323 = $1;
-      $2324 = $1;
-      $2325 = $12;
-      $2326 = HEAP32[$2325>>2]|0;
-      $2327 = (_list1_gen($2324,$2326)|0);
-      $2328 = (_list1_gen($2323,$2327)|0);
-      HEAP32[$17>>2] = $2328;
-      break;
-     }
-     case 336:  {
-      $2329 = $1;
-      $2330 = $12;
-      $2331 = HEAP32[$2330>>2]|0;
-      $2332 = (_new_arg($2329,$2331)|0);
-      HEAP32[$17>>2] = $2332;
-      break;
-     }
-     case 337:  {
-      $2333 = $1;
-      $2334 = $12;
-      $2335 = ((($2334)) + -4|0);
-      $2336 = HEAP32[$2335>>2]|0;
-      $2337 = (_new_masgn($2333,$2336,0)|0);
-      HEAP32[$17>>2] = $2337;
-      break;
-     }
-     case 338:  {
-      $2338 = $1;
-      $2339 = $12;
-      $2340 = HEAP32[$2339>>2]|0;
-      $2341 = (_list1_gen($2338,$2340)|0);
-      HEAP32[$17>>2] = $2341;
-      break;
-     }
-     case 339:  {
-      $2342 = $1;
-      $2343 = $12;
-      $2344 = ((($2343)) + -8|0);
-      $2345 = HEAP32[$2344>>2]|0;
-      $2346 = $1;
-      $2347 = $12;
-      $2348 = HEAP32[$2347>>2]|0;
-      $2349 = (_list1_gen($2346,$2348)|0);
-      $2350 = (_append_gen($2342,$2345,$2349)|0);
-      HEAP32[$17>>2] = $2350;
-      break;
-     }
-     case 340:  {
-      $2351 = $1;
-      $2352 = $12;
-      $2353 = HEAP32[$2352>>2]|0;
-      $2354 = (_list3_gen($2351,$2353,0,0)|0);
-      HEAP32[$17>>2] = $2354;
-      break;
-     }
-     case 341:  {
-      $2355 = $1;
-      $2356 = $12;
-      $2357 = ((($2356)) + -12|0);
-      $2358 = HEAP32[$2357>>2]|0;
-      $2359 = $1;
-      $2360 = $12;
-      $2361 = HEAP32[$2360>>2]|0;
-      $2362 = (_new_arg($2359,$2361)|0);
-      $2363 = (_list3_gen($2355,$2358,$2362,0)|0);
-      HEAP32[$17>>2] = $2363;
-      break;
-     }
-     case 342:  {
-      $2364 = $1;
-      $2365 = $12;
-      $2366 = ((($2365)) + -20|0);
-      $2367 = HEAP32[$2366>>2]|0;
-      $2368 = $1;
-      $2369 = $12;
-      $2370 = ((($2369)) + -8|0);
-      $2371 = HEAP32[$2370>>2]|0;
-      $2372 = (_new_arg($2368,$2371)|0);
-      $2373 = $12;
-      $2374 = HEAP32[$2373>>2]|0;
-      $2375 = (_list3_gen($2364,$2367,$2372,$2374)|0);
-      HEAP32[$17>>2] = $2375;
-      break;
-     }
-     case 343:  {
-      $2376 = $1;
-      $2377 = $12;
-      $2378 = ((($2377)) + -8|0);
-      $2379 = HEAP32[$2378>>2]|0;
-      $2380 = (_list3_gen($2376,$2379,(-1),0)|0);
-      HEAP32[$17>>2] = $2380;
-      break;
-     }
-     case 344:  {
-      $2381 = $1;
-      $2382 = $12;
-      $2383 = ((($2382)) + -16|0);
-      $2384 = HEAP32[$2383>>2]|0;
-      $2385 = $12;
-      $2386 = HEAP32[$2385>>2]|0;
-      $2387 = (_list3_gen($2381,$2384,(-1),$2386)|0);
-      HEAP32[$17>>2] = $2387;
-      break;
-     }
-     case 345:  {
-      $2388 = $1;
-      $2389 = $1;
-      $2390 = $12;
-      $2391 = HEAP32[$2390>>2]|0;
-      $2392 = (_new_arg($2389,$2391)|0);
-      $2393 = (_list3_gen($2388,0,$2392,0)|0);
-      HEAP32[$17>>2] = $2393;
-      break;
-     }
-     case 346:  {
-      $2394 = $1;
-      $2395 = $1;
-      $2396 = $12;
-      $2397 = ((($2396)) + -8|0);
-      $2398 = HEAP32[$2397>>2]|0;
-      $2399 = (_new_arg($2395,$2398)|0);
-      $2400 = $12;
-      $2401 = HEAP32[$2400>>2]|0;
-      $2402 = (_list3_gen($2394,0,$2399,$2401)|0);
-      HEAP32[$17>>2] = $2402;
-      break;
-     }
-     case 347:  {
-      $2403 = $1;
-      $2404 = (_list3_gen($2403,0,(-1),0)|0);
-      HEAP32[$17>>2] = $2404;
-      break;
-     }
-     case 348:  {
-      $2405 = $1;
-      $2406 = $12;
-      $2407 = HEAP32[$2406>>2]|0;
-      $2408 = (_list3_gen($2405,0,(-1),$2407)|0);
-      HEAP32[$17>>2] = $2408;
-      break;
-     }
-     case 349:  {
-      $2409 = $1;
-      $2410 = $12;
-      $2411 = ((($2410)) + -20|0);
-      $2412 = HEAP32[$2411>>2]|0;
-      $2413 = $12;
-      $2414 = ((($2413)) + -12|0);
-      $2415 = HEAP32[$2414>>2]|0;
-      $2416 = $12;
-      $2417 = ((($2416)) + -4|0);
-      $2418 = HEAP32[$2417>>2]|0;
-      $2419 = $12;
-      $2420 = HEAP32[$2419>>2]|0;
-      $2421 = (_new_args($2409,$2412,$2415,$2418,0,$2420)|0);
-      HEAP32[$17>>2] = $2421;
-      break;
-     }
-     case 350:  {
-      $2422 = $1;
-      $2423 = $12;
-      $2424 = ((($2423)) + -28|0);
-      $2425 = HEAP32[$2424>>2]|0;
-      $2426 = $12;
-      $2427 = ((($2426)) + -20|0);
-      $2428 = HEAP32[$2427>>2]|0;
-      $2429 = $12;
-      $2430 = ((($2429)) + -12|0);
-      $2431 = HEAP32[$2430>>2]|0;
-      $2432 = $12;
-      $2433 = ((($2432)) + -4|0);
-      $2434 = HEAP32[$2433>>2]|0;
-      $2435 = $12;
-      $2436 = HEAP32[$2435>>2]|0;
-      $2437 = (_new_args($2422,$2425,$2428,$2431,$2434,$2436)|0);
-      HEAP32[$17>>2] = $2437;
-      break;
-     }
-     case 351:  {
-      $2438 = $1;
-      $2439 = $12;
-      $2440 = ((($2439)) + -12|0);
-      $2441 = HEAP32[$2440>>2]|0;
-      $2442 = $12;
-      $2443 = ((($2442)) + -4|0);
-      $2444 = HEAP32[$2443>>2]|0;
-      $2445 = $12;
-      $2446 = HEAP32[$2445>>2]|0;
-      $2447 = (_new_args($2438,$2441,$2444,0,0,$2446)|0);
-      HEAP32[$17>>2] = $2447;
-      break;
-     }
-     case 352:  {
-      $2448 = $1;
-      $2449 = $12;
-      $2450 = ((($2449)) + -20|0);
-      $2451 = HEAP32[$2450>>2]|0;
-      $2452 = $12;
-      $2453 = ((($2452)) + -12|0);
-      $2454 = HEAP32[$2453>>2]|0;
-      $2455 = $12;
-      $2456 = ((($2455)) + -4|0);
-      $2457 = HEAP32[$2456>>2]|0;
-      $2458 = $12;
-      $2459 = HEAP32[$2458>>2]|0;
-      $2460 = (_new_args($2448,$2451,$2454,0,$2457,$2459)|0);
-      HEAP32[$17>>2] = $2460;
-      break;
-     }
-     case 353:  {
-      $2461 = $1;
-      $2462 = $12;
-      $2463 = ((($2462)) + -12|0);
-      $2464 = HEAP32[$2463>>2]|0;
-      $2465 = $12;
-      $2466 = ((($2465)) + -4|0);
-      $2467 = HEAP32[$2466>>2]|0;
-      $2468 = $12;
-      $2469 = HEAP32[$2468>>2]|0;
-      $2470 = (_new_args($2461,$2464,0,$2467,0,$2469)|0);
-      HEAP32[$17>>2] = $2470;
-      break;
-     }
-     case 354:  {
-      $2471 = $1;
-      $2472 = $12;
-      $2473 = ((($2472)) + -4|0);
-      $2474 = HEAP32[$2473>>2]|0;
-      $2475 = (_new_args($2471,$2474,0,1,0,0)|0);
-      HEAP32[$17>>2] = $2475;
-      break;
-     }
-     case 355:  {
-      $2476 = $1;
-      $2477 = $12;
-      $2478 = ((($2477)) + -20|0);
-      $2479 = HEAP32[$2478>>2]|0;
-      $2480 = $12;
-      $2481 = ((($2480)) + -12|0);
-      $2482 = HEAP32[$2481>>2]|0;
-      $2483 = $12;
-      $2484 = ((($2483)) + -4|0);
-      $2485 = HEAP32[$2484>>2]|0;
-      $2486 = $12;
-      $2487 = HEAP32[$2486>>2]|0;
-      $2488 = (_new_args($2476,$2479,0,$2482,$2485,$2487)|0);
-      HEAP32[$17>>2] = $2488;
-      break;
-     }
-     case 356:  {
-      $2489 = $1;
-      $2490 = $12;
-      $2491 = ((($2490)) + -4|0);
-      $2492 = HEAP32[$2491>>2]|0;
-      $2493 = $12;
-      $2494 = HEAP32[$2493>>2]|0;
-      $2495 = (_new_args($2489,$2492,0,0,0,$2494)|0);
-      HEAP32[$17>>2] = $2495;
-      break;
-     }
-     case 357:  {
-      $2496 = $1;
-      $2497 = $12;
-      $2498 = ((($2497)) + -12|0);
-      $2499 = HEAP32[$2498>>2]|0;
-      $2500 = $12;
-      $2501 = ((($2500)) + -4|0);
-      $2502 = HEAP32[$2501>>2]|0;
-      $2503 = $12;
-      $2504 = HEAP32[$2503>>2]|0;
-      $2505 = (_new_args($2496,0,$2499,$2502,0,$2504)|0);
-      HEAP32[$17>>2] = $2505;
-      break;
-     }
-     case 358:  {
-      $2506 = $1;
-      $2507 = $12;
-      $2508 = ((($2507)) + -20|0);
-      $2509 = HEAP32[$2508>>2]|0;
-      $2510 = $12;
-      $2511 = ((($2510)) + -12|0);
-      $2512 = HEAP32[$2511>>2]|0;
-      $2513 = $12;
-      $2514 = ((($2513)) + -4|0);
-      $2515 = HEAP32[$2514>>2]|0;
-      $2516 = $12;
-      $2517 = HEAP32[$2516>>2]|0;
-      $2518 = (_new_args($2506,0,$2509,$2512,$2515,$2517)|0);
-      HEAP32[$17>>2] = $2518;
-      break;
-     }
-     case 359:  {
-      $2519 = $1;
-      $2520 = $12;
-      $2521 = ((($2520)) + -4|0);
-      $2522 = HEAP32[$2521>>2]|0;
-      $2523 = $12;
-      $2524 = HEAP32[$2523>>2]|0;
-      $2525 = (_new_args($2519,0,$2522,0,0,$2524)|0);
-      HEAP32[$17>>2] = $2525;
-      break;
-     }
-     case 360:  {
-      $2526 = $1;
-      $2527 = $12;
-      $2528 = ((($2527)) + -12|0);
-      $2529 = HEAP32[$2528>>2]|0;
-      $2530 = $12;
-      $2531 = ((($2530)) + -4|0);
-      $2532 = HEAP32[$2531>>2]|0;
-      $2533 = $12;
-      $2534 = HEAP32[$2533>>2]|0;
-      $2535 = (_new_args($2526,0,$2529,0,$2532,$2534)|0);
-      HEAP32[$17>>2] = $2535;
-      break;
-     }
-     case 361:  {
-      $2536 = $1;
-      $2537 = $12;
-      $2538 = ((($2537)) + -4|0);
-      $2539 = HEAP32[$2538>>2]|0;
-      $2540 = $12;
-      $2541 = HEAP32[$2540>>2]|0;
-      $2542 = (_new_args($2536,0,0,$2539,0,$2541)|0);
-      HEAP32[$17>>2] = $2542;
-      break;
-     }
-     case 362:  {
-      $2543 = $1;
-      $2544 = $12;
-      $2545 = ((($2544)) + -12|0);
-      $2546 = HEAP32[$2545>>2]|0;
-      $2547 = $12;
-      $2548 = ((($2547)) + -4|0);
-      $2549 = HEAP32[$2548>>2]|0;
-      $2550 = $12;
-      $2551 = HEAP32[$2550>>2]|0;
-      $2552 = (_new_args($2543,0,0,$2546,$2549,$2551)|0);
-      HEAP32[$17>>2] = $2552;
-      break;
-     }
-     case 363:  {
-      $2553 = $1;
-      $2554 = $12;
-      $2555 = HEAP32[$2554>>2]|0;
-      $2556 = (_new_args($2553,0,0,0,0,$2555)|0);
-      HEAP32[$17>>2] = $2556;
-      break;
-     }
-     case 365:  {
-      $2557 = $1;
-      $2558 = ((($2557)) + 72|0);
-      $2559 = HEAP8[$2558>>0]|0;
-      $2560 = $2559 & -2;
-      $2561 = $2560 | 1;
-      HEAP8[$2558>>0] = $2561;
-      $2562 = $12;
-      $2563 = HEAP32[$2562>>2]|0;
-      HEAP32[$17>>2] = $2563;
-      break;
-     }
-     case 366:  {
-      HEAP32[$17>>2] = 0;
-      break;
-     }
-     case 367:  {
-      HEAP32[$17>>2] = 0;
-      break;
-     }
-     case 368:  {
-      $2564 = $12;
-      $2565 = ((($2564)) + -8|0);
-      $2566 = HEAP32[$2565>>2]|0;
-      HEAP32[$17>>2] = $2566;
-      break;
-     }
-     case 369:  {
-      HEAP32[$17>>2] = 0;
-      break;
-     }
-     case 370:  {
-      HEAP32[$17>>2] = 0;
-      break;
-     }
-     case 373:  {
-      $2567 = $1;
-      $2568 = $12;
-      $2569 = HEAP32[$2568>>2]|0;
-      _local_add_f($2567,$2569);
-      $2570 = $1;
-      $2571 = $12;
-      $2572 = HEAP32[$2571>>2]|0;
-      _new_bv($2570,$2572);
-      break;
-     }
-     case 375:  {
-      $2573 = $12;
-      $2574 = ((($2573)) + -8|0);
-      $2575 = HEAP32[$2574>>2]|0;
-      HEAP32[$17>>2] = $2575;
-      break;
-     }
-     case 376:  {
-      $2576 = $12;
-      $2577 = HEAP32[$2576>>2]|0;
-      HEAP32[$17>>2] = $2577;
-      break;
-     }
-     case 377:  {
-      $2578 = $12;
-      $2579 = ((($2578)) + -4|0);
-      $2580 = HEAP32[$2579>>2]|0;
-      HEAP32[$17>>2] = $2580;
-      break;
-     }
-     case 378:  {
-      $2581 = $12;
-      $2582 = ((($2581)) + -4|0);
-      $2583 = HEAP32[$2582>>2]|0;
-      HEAP32[$17>>2] = $2583;
-      break;
-     }
-     case 379:  {
-      $2584 = $1;
-      _local_nest($2584);
-      break;
-     }
-     case 380:  {
-      $2585 = $1;
-      $2586 = $12;
-      $2587 = ((($2586)) + -8|0);
-      $2588 = HEAP32[$2587>>2]|0;
-      $2589 = $12;
-      $2590 = ((($2589)) + -4|0);
-      $2591 = HEAP32[$2590>>2]|0;
-      $2592 = (_new_block($2585,$2588,$2591)|0);
-      HEAP32[$17>>2] = $2592;
-      $2593 = $1;
-      _local_unnest($2593);
-      break;
-     }
-     case 381:  {
-      $2594 = $12;
-      $2595 = ((($2594)) + -4|0);
-      $2596 = HEAP32[$2595>>2]|0;
-      $2597 = HEAP32[$2596>>2]|0;
-      $2598 = ($2597|0)==((38)|0);
-      $2599 = $1;
-      if ($2598) {
-       _yyerror($2599,59626);
-      } else {
-       $2600 = $12;
-       $2601 = ((($2600)) + -4|0);
-       $2602 = HEAP32[$2601>>2]|0;
-       $2603 = $12;
-       $2604 = HEAP32[$2603>>2]|0;
-       _call_with_block($2599,$2602,$2604);
-      }
-      $2605 = $12;
-      $2606 = ((($2605)) + -4|0);
-      $2607 = HEAP32[$2606>>2]|0;
-      HEAP32[$17>>2] = $2607;
-      break;
-     }
-     case 382:  {
-      $2608 = $1;
-      $2609 = $12;
-      $2610 = ((($2609)) + -12|0);
-      $2611 = HEAP32[$2610>>2]|0;
-      $2612 = $12;
-      $2613 = ((($2612)) + -4|0);
-      $2614 = HEAP32[$2613>>2]|0;
-      $2615 = $12;
-      $2616 = HEAP32[$2615>>2]|0;
-      $2617 = (_new_call($2608,$2611,$2614,$2616)|0);
-      HEAP32[$17>>2] = $2617;
-      break;
-     }
-     case 383:  {
-      $2618 = $1;
-      $2619 = $12;
-      $2620 = ((($2619)) + -16|0);
-      $2621 = HEAP32[$2620>>2]|0;
-      $2622 = $12;
-      $2623 = ((($2622)) + -8|0);
-      $2624 = HEAP32[$2623>>2]|0;
-      $2625 = $12;
-      $2626 = ((($2625)) + -4|0);
-      $2627 = HEAP32[$2626>>2]|0;
-      $2628 = (_new_call($2618,$2621,$2624,$2627)|0);
-      HEAP32[$17>>2] = $2628;
-      $2629 = $1;
-      $2630 = HEAP32[$17>>2]|0;
-      $2631 = $12;
-      $2632 = HEAP32[$2631>>2]|0;
-      _call_with_block($2629,$2630,$2632);
-      break;
-     }
-     case 384:  {
-      $2633 = $1;
-      $2634 = $12;
-      $2635 = ((($2634)) + -16|0);
-      $2636 = HEAP32[$2635>>2]|0;
-      $2637 = $12;
-      $2638 = ((($2637)) + -8|0);
-      $2639 = HEAP32[$2638>>2]|0;
-      $2640 = $12;
-      $2641 = ((($2640)) + -4|0);
-      $2642 = HEAP32[$2641>>2]|0;
-      $2643 = (_new_call($2633,$2636,$2639,$2642)|0);
-      HEAP32[$17>>2] = $2643;
-      $2644 = $1;
-      $2645 = HEAP32[$17>>2]|0;
-      $2646 = $12;
-      $2647 = HEAP32[$2646>>2]|0;
-      _call_with_block($2644,$2645,$2647);
-      break;
-     }
-     case 385:  {
-      $2648 = $1;
-      $2649 = $12;
-      $2650 = ((($2649)) + -4|0);
-      $2651 = HEAP32[$2650>>2]|0;
-      $2652 = $12;
-      $2653 = HEAP32[$2652>>2]|0;
-      $2654 = (_new_fcall($2648,$2651,$2653)|0);
-      HEAP32[$17>>2] = $2654;
-      break;
-     }
-     case 386:  {
-      $2655 = $1;
-      $2656 = $12;
-      $2657 = ((($2656)) + -12|0);
-      $2658 = HEAP32[$2657>>2]|0;
-      $2659 = $12;
-      $2660 = ((($2659)) + -4|0);
-      $2661 = HEAP32[$2660>>2]|0;
-      $2662 = $12;
-      $2663 = HEAP32[$2662>>2]|0;
-      $2664 = (_new_call($2655,$2658,$2661,$2663)|0);
-      HEAP32[$17>>2] = $2664;
-      break;
-     }
-     case 387:  {
-      $2665 = $1;
-      $2666 = $12;
-      $2667 = ((($2666)) + -12|0);
-      $2668 = HEAP32[$2667>>2]|0;
-      $2669 = $12;
-      $2670 = ((($2669)) + -4|0);
-      $2671 = HEAP32[$2670>>2]|0;
-      $2672 = $12;
-      $2673 = HEAP32[$2672>>2]|0;
-      $2674 = (_new_call($2665,$2668,$2671,$2673)|0);
-      HEAP32[$17>>2] = $2674;
-      break;
-     }
-     case 388:  {
-      $2675 = $1;
-      $2676 = $12;
-      $2677 = ((($2676)) + -8|0);
-      $2678 = HEAP32[$2677>>2]|0;
-      $2679 = $12;
-      $2680 = HEAP32[$2679>>2]|0;
-      $2681 = (_new_call($2675,$2678,$2680,0)|0);
-      HEAP32[$17>>2] = $2681;
-      break;
-     }
-     case 389:  {
-      $2682 = $1;
-      $2683 = $12;
-      $2684 = ((($2683)) + -8|0);
-      $2685 = HEAP32[$2684>>2]|0;
-      $2686 = $1;
-      $2687 = (_intern_gen($2686,69604,4)|0);
-      $2688 = $12;
-      $2689 = HEAP32[$2688>>2]|0;
-      $2690 = (_new_call($2682,$2685,$2687,$2689)|0);
-      HEAP32[$17>>2] = $2690;
-      break;
-     }
-     case 390:  {
-      $2691 = $1;
-      $2692 = $12;
-      $2693 = ((($2692)) + -8|0);
-      $2694 = HEAP32[$2693>>2]|0;
-      $2695 = $1;
-      $2696 = (_intern_gen($2695,69604,4)|0);
-      $2697 = $12;
-      $2698 = HEAP32[$2697>>2]|0;
-      $2699 = (_new_call($2691,$2694,$2696,$2698)|0);
-      HEAP32[$17>>2] = $2699;
-      break;
-     }
-     case 391:  {
-      $2700 = $1;
-      $2701 = $12;
-      $2702 = HEAP32[$2701>>2]|0;
-      $2703 = (_new_super($2700,$2702)|0);
-      HEAP32[$17>>2] = $2703;
-      break;
-     }
-     case 392:  {
-      $2704 = $1;
-      $2705 = (_new_zsuper($2704)|0);
-      HEAP32[$17>>2] = $2705;
-      break;
-     }
-     case 393:  {
-      $2706 = $1;
-      $2707 = $12;
-      $2708 = ((($2707)) + -12|0);
-      $2709 = HEAP32[$2708>>2]|0;
-      $2710 = $1;
-      $2711 = (_intern_gen($2710,69083,2)|0);
-      $2712 = $12;
-      $2713 = ((($2712)) + -4|0);
-      $2714 = HEAP32[$2713>>2]|0;
-      $2715 = (_new_call($2706,$2709,$2711,$2714)|0);
-      HEAP32[$17>>2] = $2715;
-      break;
-     }
-     case 394:  {
-      $2716 = $1;
-      _local_nest($2716);
-      $2717 = $1;
-      $2718 = ((($2717)) + 32|0);
-      $2719 = HEAP32[$2718>>2]|0;
-      HEAP32[$17>>2] = $2719;
-      break;
-     }
-     case 395:  {
-      $2720 = $1;
-      $2721 = $12;
-      $2722 = ((($2721)) + -8|0);
-      $2723 = HEAP32[$2722>>2]|0;
-      $2724 = $12;
-      $2725 = ((($2724)) + -4|0);
-      $2726 = HEAP32[$2725>>2]|0;
-      $2727 = (_new_block($2720,$2723,$2726)|0);
-      HEAP32[$17>>2] = $2727;
-      $2728 = $12;
-      $2729 = ((($2728)) + -12|0);
-      $2730 = HEAP32[$2729>>2]|0;
-      $2731 = $2730&65535;
-      $2732 = HEAP32[$17>>2]|0;
-      $2733 = ((($2732)) + 8|0);
-      HEAP16[$2733>>1] = $2731;
-      $2734 = $1;
-      _local_unnest($2734);
-      break;
-     }
-     case 396:  {
-      $2735 = $1;
-      _local_nest($2735);
-      $2736 = $1;
-      $2737 = ((($2736)) + 32|0);
-      $2738 = HEAP32[$2737>>2]|0;
-      HEAP32[$17>>2] = $2738;
-      break;
-     }
-     case 397:  {
-      $2739 = $1;
-      $2740 = $12;
-      $2741 = ((($2740)) + -8|0);
-      $2742 = HEAP32[$2741>>2]|0;
-      $2743 = $12;
-      $2744 = ((($2743)) + -4|0);
-      $2745 = HEAP32[$2744>>2]|0;
-      $2746 = (_new_block($2739,$2742,$2745)|0);
-      HEAP32[$17>>2] = $2746;
-      $2747 = $12;
-      $2748 = ((($2747)) + -12|0);
-      $2749 = HEAP32[$2748>>2]|0;
-      $2750 = $2749&65535;
-      $2751 = HEAP32[$17>>2]|0;
-      $2752 = ((($2751)) + 8|0);
-      HEAP16[$2752>>1] = $2750;
-      $2753 = $1;
-      _local_unnest($2753);
-      break;
-     }
-     case 398:  {
-      $2754 = $1;
-      $2755 = $1;
-      $2756 = $12;
-      $2757 = ((($2756)) + -12|0);
-      $2758 = HEAP32[$2757>>2]|0;
-      $2759 = $12;
-      $2760 = ((($2759)) + -4|0);
-      $2761 = HEAP32[$2760>>2]|0;
-      $2762 = (_cons_gen($2755,$2758,$2761)|0);
-      $2763 = $12;
-      $2764 = HEAP32[$2763>>2]|0;
-      $2765 = (_cons_gen($2754,$2762,$2764)|0);
-      HEAP32[$17>>2] = $2765;
-      break;
-     }
-     case 399:  {
-      $2766 = $12;
-      $2767 = HEAP32[$2766>>2]|0;
-      $2768 = ($2767|0)!=(0|0);
-      if ($2768) {
-       $2769 = $1;
-       $2770 = $1;
-       $2771 = $12;
-       $2772 = HEAP32[$2771>>2]|0;
-       $2773 = (_cons_gen($2770,0,$2772)|0);
-       $2774 = (_cons_gen($2769,$2773,0)|0);
-       $$sink9 = $2774;
-      } else {
-       $$sink9 = 0;
-      }
-      HEAP32[$17>>2] = $$sink9;
-      break;
-     }
-     case 401:  {
-      $2775 = $1;
-      $2776 = $1;
-      $2777 = $12;
-      $2778 = ((($2777)) + -16|0);
-      $2779 = HEAP32[$2778>>2]|0;
-      $2780 = $12;
-      $2781 = ((($2780)) + -12|0);
-      $2782 = HEAP32[$2781>>2]|0;
-      $2783 = $12;
-      $2784 = ((($2783)) + -4|0);
-      $2785 = HEAP32[$2784>>2]|0;
-      $2786 = (_list3_gen($2776,$2779,$2782,$2785)|0);
-      $2787 = (_list1_gen($2775,$2786)|0);
-      HEAP32[$17>>2] = $2787;
-      $2788 = $12;
-      $2789 = HEAP32[$2788>>2]|0;
-      $2790 = ($2789|0)!=(0|0);
-      if ($2790) {
-       $2791 = $1;
-       $2792 = HEAP32[$17>>2]|0;
-       $2793 = $12;
-       $2794 = HEAP32[$2793>>2]|0;
-       $2795 = (_append_gen($2791,$2792,$2794)|0);
-       HEAP32[$17>>2] = $2795;
-      }
-      break;
-     }
-     case 403:  {
-      $2796 = $1;
-      $2797 = $12;
-      $2798 = HEAP32[$2797>>2]|0;
-      $2799 = (_list1_gen($2796,$2798)|0);
-      HEAP32[$17>>2] = $2799;
-      break;
-     }
-     case 406:  {
-      $2800 = $12;
-      $2801 = HEAP32[$2800>>2]|0;
-      HEAP32[$17>>2] = $2801;
-      break;
-     }
-     case 408:  {
-      $2802 = $12;
-      $2803 = HEAP32[$2802>>2]|0;
-      HEAP32[$17>>2] = $2803;
-      break;
-     }
-     case 416:  {
-      $2804 = $12;
-      $2805 = HEAP32[$2804>>2]|0;
-      HEAP32[$17>>2] = $2805;
-      break;
-     }
-     case 417:  {
-      $2806 = $1;
-      $2807 = $1;
-      $2808 = $12;
-      $2809 = ((($2808)) + -4|0);
-      $2810 = HEAP32[$2809>>2]|0;
-      $2811 = $1;
-      $2812 = $12;
-      $2813 = HEAP32[$2812>>2]|0;
-      $2814 = (_list1_gen($2811,$2813)|0);
-      $2815 = (_append_gen($2807,$2810,$2814)|0);
-      $2816 = (_new_dstr($2806,$2815)|0);
-      HEAP32[$17>>2] = $2816;
-      break;
-     }
-     case 419:  {
-      $2817 = $1;
-      $2818 = $12;
-      $2819 = ((($2818)) + -4|0);
-      $2820 = HEAP32[$2819>>2]|0;
-      $2821 = $12;
-      $2822 = HEAP32[$2821>>2]|0;
-      $2823 = (_append_gen($2817,$2820,$2822)|0);
-      HEAP32[$17>>2] = $2823;
-      break;
-     }
-     case 420:  {
-      $2824 = $1;
-      $2825 = $12;
-      $2826 = HEAP32[$2825>>2]|0;
-      $2827 = (_list1_gen($2824,$2826)|0);
-      HEAP32[$17>>2] = $2827;
-      break;
-     }
-     case 421:  {
-      $2828 = $1;
-      $2829 = ((($2828)) + 44|0);
-      $2830 = HEAP32[$2829>>2]|0;
-      HEAP32[$17>>2] = $2830;
-      $2831 = $1;
-      $2832 = ((($2831)) + 44|0);
-      HEAP32[$2832>>2] = 0;
-      break;
-     }
-     case 422:  {
-      $2833 = $12;
-      $2834 = ((($2833)) + -8|0);
-      $2835 = HEAP32[$2834>>2]|0;
-      $2836 = $1;
-      $2837 = ((($2836)) + 44|0);
-      HEAP32[$2837>>2] = $2835;
-      $2838 = $1;
-      $2839 = $12;
-      $2840 = ((($2839)) + -12|0);
-      $2841 = HEAP32[$2840>>2]|0;
-      $2842 = $12;
-      $2843 = ((($2842)) + -4|0);
-      $2844 = HEAP32[$2843>>2]|0;
-      $2845 = (_list2_gen($2838,$2841,$2844)|0);
-      HEAP32[$17>>2] = $2845;
-      break;
-     }
-     case 423:  {
-      $2846 = $1;
-      $2847 = $1;
-      $2848 = (_new_literal_delim($2847)|0);
-      $2849 = (_list1_gen($2846,$2848)|0);
-      HEAP32[$17>>2] = $2849;
-      break;
-     }
-     case 424:  {
-      $2850 = $1;
-      $2851 = $1;
-      $2852 = (_new_literal_delim($2851)|0);
-      $2853 = (_list1_gen($2850,$2852)|0);
-      HEAP32[$17>>2] = $2853;
-      break;
-     }
-     case 425:  {
-      $2854 = $12;
-      $2855 = HEAP32[$2854>>2]|0;
-      HEAP32[$17>>2] = $2855;
-      break;
-     }
-     case 426:  {
-      $2856 = $1;
-      $2857 = $1;
-      $2858 = $12;
-      $2859 = ((($2858)) + -4|0);
-      $2860 = HEAP32[$2859>>2]|0;
-      $2861 = $1;
-      $2862 = $12;
-      $2863 = HEAP32[$2862>>2]|0;
-      $2864 = (_list1_gen($2861,$2863)|0);
-      $2865 = (_append_gen($2857,$2860,$2864)|0);
-      $2866 = (_new_dxstr($2856,$2865)|0);
-      HEAP32[$17>>2] = $2866;
-      break;
-     }
-     case 427:  {
-      $2867 = $12;
-      $2868 = HEAP32[$2867>>2]|0;
-      HEAP32[$17>>2] = $2868;
-      break;
-     }
-     case 428:  {
-      $2869 = $1;
-      $2870 = $12;
-      $2871 = ((($2870)) + -4|0);
-      $2872 = HEAP32[$2871>>2]|0;
-      $2873 = $12;
-      $2874 = HEAP32[$2873>>2]|0;
-      $2875 = (_new_dregx($2869,$2872,$2874)|0);
-      HEAP32[$17>>2] = $2875;
-      break;
-     }
-     case 434:  {
-      $2876 = $1;
-      $2877 = (_parsing_heredoc_inf($2876)|0);
-      $27 = $2877;
-      $2878 = $1;
-      $2879 = $27;
-      $2880 = ((($2879)) + 16|0);
-      $2881 = HEAP32[$2880>>2]|0;
-      $2882 = $1;
-      $2883 = $1;
-      $2884 = (_new_str($2883,75764,0)|0);
-      $2885 = (_list1_gen($2882,$2884)|0);
-      $2886 = (_append_gen($2878,$2881,$2885)|0);
-      $2887 = $27;
-      $2888 = ((($2887)) + 16|0);
-      HEAP32[$2888>>2] = $2886;
-      $2889 = $1;
-      _heredoc_end($2889);
-      break;
-     }
-     case 435:  {
-      $2890 = $1;
-      _heredoc_end($2890);
-      break;
-     }
-     case 438:  {
-      $2891 = $1;
-      $2892 = (_parsing_heredoc_inf($2891)|0);
-      $28 = $2892;
-      $2893 = $1;
-      $2894 = $28;
-      $2895 = ((($2894)) + 16|0);
-      $2896 = HEAP32[$2895>>2]|0;
-      $2897 = $1;
-      $2898 = $12;
-      $2899 = HEAP32[$2898>>2]|0;
-      $2900 = (_list1_gen($2897,$2899)|0);
-      $2901 = (_append_gen($2893,$2896,$2900)|0);
-      $2902 = $28;
-      $2903 = ((($2902)) + 16|0);
-      HEAP32[$2903>>2] = $2901;
-      $2904 = $1;
-      _heredoc_treat_nextline($2904);
-      break;
-     }
-     case 439:  {
-      $2905 = $1;
-      $2906 = ((($2905)) + 44|0);
-      $2907 = HEAP32[$2906>>2]|0;
-      HEAP32[$17>>2] = $2907;
-      $2908 = $1;
-      $2909 = ((($2908)) + 44|0);
-      HEAP32[$2909>>2] = 0;
-      break;
-     }
-     case 440:  {
-      $2910 = $1;
-      $2911 = (_parsing_heredoc_inf($2910)|0);
-      $29 = $2911;
-      $2912 = $12;
-      $2913 = ((($2912)) + -8|0);
-      $2914 = HEAP32[$2913>>2]|0;
-      $2915 = $1;
-      $2916 = ((($2915)) + 44|0);
-      HEAP32[$2916>>2] = $2914;
-      $2917 = $1;
-      $2918 = $1;
-      $2919 = $29;
-      $2920 = ((($2919)) + 16|0);
-      $2921 = HEAP32[$2920>>2]|0;
-      $2922 = $1;
-      $2923 = $12;
-      $2924 = ((($2923)) + -12|0);
-      $2925 = HEAP32[$2924>>2]|0;
-      $2926 = (_list1_gen($2922,$2925)|0);
-      $2927 = (_append_gen($2918,$2921,$2926)|0);
-      $2928 = $1;
-      $2929 = $12;
-      $2930 = ((($2929)) + -4|0);
-      $2931 = HEAP32[$2930>>2]|0;
-      $2932 = (_list1_gen($2928,$2931)|0);
-      $2933 = (_append_gen($2917,$2927,$2932)|0);
-      $2934 = $29;
-      $2935 = ((($2934)) + 16|0);
-      HEAP32[$2935>>2] = $2933;
-      break;
-     }
-     case 441:  {
-      $2936 = $1;
-      $2937 = $1;
-      $2938 = $12;
-      $2939 = HEAP32[$2938>>2]|0;
-      $2940 = (_list1_gen($2937,$2939)|0);
-      $2941 = (_new_words($2936,$2940)|0);
-      HEAP32[$17>>2] = $2941;
-      break;
-     }
-     case 442:  {
-      $2942 = $1;
-      $2943 = $1;
-      $2944 = $12;
-      $2945 = ((($2944)) + -4|0);
-      $2946 = HEAP32[$2945>>2]|0;
-      $2947 = $1;
-      $2948 = $12;
-      $2949 = HEAP32[$2948>>2]|0;
-      $2950 = (_list1_gen($2947,$2949)|0);
-      $2951 = (_append_gen($2943,$2946,$2950)|0);
-      $2952 = (_new_words($2942,$2951)|0);
-      HEAP32[$17>>2] = $2952;
-      break;
-     }
-     case 443:  {
-      $2953 = $1;
-      $2954 = $12;
-      $2955 = HEAP32[$2954>>2]|0;
-      $2956 = (_new_sym($2953,$2955)|0);
-      HEAP32[$17>>2] = $2956;
-      break;
-     }
-     case 444:  {
-      $2957 = $1;
-      $2958 = ((($2957)) + 40|0);
-      HEAP32[$2958>>2] = 1;
-      $2959 = $1;
-      $2960 = $1;
-      $2961 = $12;
-      $2962 = ((($2961)) + -4|0);
-      $2963 = HEAP32[$2962>>2]|0;
-      $2964 = $1;
-      $2965 = $12;
-      $2966 = HEAP32[$2965>>2]|0;
-      $2967 = (_list1_gen($2964,$2966)|0);
-      $2968 = (_append_gen($2960,$2963,$2967)|0);
-      $2969 = (_new_dsym($2959,$2968)|0);
-      HEAP32[$17>>2] = $2969;
-      break;
-     }
-     case 445:  {
-      $2970 = $1;
-      $2971 = ((($2970)) + 40|0);
-      HEAP32[$2971>>2] = 1;
-      $2972 = $12;
-      $2973 = HEAP32[$2972>>2]|0;
-      HEAP32[$17>>2] = $2973;
-      break;
-     }
-     case 450:  {
-      $2974 = $1;
-      $2975 = $12;
-      $2976 = HEAP32[$2975>>2]|0;
-      $2977 = (_new_strsym($2974,$2976)|0);
-      HEAP32[$17>>2] = $2977;
-      break;
-     }
-     case 451:  {
-      $2978 = $1;
-      $2979 = $12;
-      $2980 = HEAP32[$2979>>2]|0;
-      $2981 = (_new_strsym($2978,$2980)|0);
-      HEAP32[$17>>2] = $2981;
-      break;
-     }
-     case 452:  {
-      $2982 = $1;
-      $2983 = $1;
-      $2984 = $12;
-      $2985 = HEAP32[$2984>>2]|0;
-      $2986 = (_list1_gen($2983,$2985)|0);
-      $2987 = (_new_symbols($2982,$2986)|0);
-      HEAP32[$17>>2] = $2987;
-      break;
-     }
-     case 453:  {
-      $2988 = $1;
-      $2989 = $1;
-      $2990 = $12;
-      $2991 = ((($2990)) + -4|0);
-      $2992 = HEAP32[$2991>>2]|0;
-      $2993 = $1;
-      $2994 = $12;
-      $2995 = HEAP32[$2994>>2]|0;
-      $2996 = (_list1_gen($2993,$2995)|0);
-      $2997 = (_append_gen($2989,$2992,$2996)|0);
-      $2998 = (_new_symbols($2988,$2997)|0);
-      HEAP32[$17>>2] = $2998;
-      break;
-     }
-     case 456:  {
-      $2999 = $1;
-      $3000 = $12;
-      $3001 = HEAP32[$3000>>2]|0;
-      $3002 = (_negate_lit($2999,$3001)|0);
-      HEAP32[$17>>2] = $3002;
-      break;
-     }
-     case 457:  {
-      $3003 = $1;
-      $3004 = $12;
-      $3005 = HEAP32[$3004>>2]|0;
-      $3006 = (_negate_lit($3003,$3005)|0);
-      HEAP32[$17>>2] = $3006;
-      break;
-     }
-     case 458:  {
-      $3007 = $1;
-      $3008 = $12;
-      $3009 = HEAP32[$3008>>2]|0;
-      $3010 = (_new_lvar($3007,$3009)|0);
-      HEAP32[$17>>2] = $3010;
-      break;
-     }
-     case 459:  {
-      $3011 = $1;
-      $3012 = $12;
-      $3013 = HEAP32[$3012>>2]|0;
-      $3014 = (_new_ivar($3011,$3013)|0);
-      HEAP32[$17>>2] = $3014;
-      break;
-     }
-     case 460:  {
-      $3015 = $1;
-      $3016 = $12;
-      $3017 = HEAP32[$3016>>2]|0;
-      $3018 = (_new_gvar($3015,$3017)|0);
-      HEAP32[$17>>2] = $3018;
-      break;
-     }
-     case 461:  {
-      $3019 = $1;
-      $3020 = $12;
-      $3021 = HEAP32[$3020>>2]|0;
-      $3022 = (_new_cvar($3019,$3021)|0);
-      HEAP32[$17>>2] = $3022;
-      break;
-     }
-     case 462:  {
-      $3023 = $1;
-      $3024 = $12;
-      $3025 = HEAP32[$3024>>2]|0;
-      $3026 = (_new_const($3023,$3025)|0);
-      HEAP32[$17>>2] = $3026;
-      break;
-     }
-     case 463:  {
-      $3027 = $1;
-      $3028 = $12;
-      $3029 = HEAP32[$3028>>2]|0;
-      _assignable($3027,$3029);
-      break;
-     }
-     case 464:  {
-      $3030 = $1;
-      $3031 = $12;
-      $3032 = HEAP32[$3031>>2]|0;
-      $3033 = (_var_reference($3030,$3032)|0);
-      HEAP32[$17>>2] = $3033;
-      break;
-     }
-     case 465:  {
-      $3034 = $1;
-      $3035 = (_new_nil($3034)|0);
-      HEAP32[$17>>2] = $3035;
-      break;
-     }
-     case 466:  {
-      $3036 = $1;
-      $3037 = (_new_self($3036)|0);
-      HEAP32[$17>>2] = $3037;
-      break;
-     }
-     case 467:  {
-      $3038 = $1;
-      $3039 = (_new_true($3038)|0);
-      HEAP32[$17>>2] = $3039;
-      break;
-     }
-     case 468:  {
-      $3040 = $1;
-      $3041 = (_new_false($3040)|0);
-      HEAP32[$17>>2] = $3041;
-      break;
-     }
-     case 469:  {
-      $3042 = $1;
-      $3043 = ((($3042)) + 28|0);
-      $3044 = HEAP32[$3043>>2]|0;
-      $3045 = ($3044|0)!=(0|0);
-      if (!($3045)) {
-       $3046 = $1;
-       $3047 = ((($3046)) + 28|0);
-       HEAP32[$3047>>2] = 70729;
-      }
-      $3048 = $1;
-      $3049 = $1;
-      $3050 = ((($3049)) + 28|0);
-      $3051 = HEAP32[$3050>>2]|0;
-      $3052 = $1;
-      $3053 = ((($3052)) + 28|0);
-      $3054 = HEAP32[$3053>>2]|0;
-      $3055 = (_strlen($3054)|0);
-      $3056 = (_new_str($3048,$3051,$3055)|0);
-      HEAP32[$17>>2] = $3056;
-      break;
-     }
-     case 470:  {
-      $3057 = $1;
-      $3058 = ((($3057)) + 32|0);
-      $3059 = HEAP32[$3058>>2]|0;
-      HEAP32[$vararg_buffer>>2] = $3059;
-      (_snprintf($30,16,59647,$vararg_buffer)|0);
-      $3060 = $1;
-      $3061 = (_new_int($3060,$30,10)|0);
-      HEAP32[$17>>2] = $3061;
-      break;
-     }
-     case 473:  {
-      HEAP32[$17>>2] = 0;
-      break;
-     }
-     case 474:  {
-      $3062 = $1;
-      $3063 = ((($3062)) + 40|0);
-      HEAP32[$3063>>2] = 0;
-      $3064 = $1;
-      $3065 = ((($3064)) + 72|0);
-      $3066 = HEAP8[$3065>>0]|0;
-      $3067 = $3066 & -2;
-      $3068 = $3067 | 1;
-      HEAP8[$3065>>0] = $3068;
-      break;
-     }
-     case 475:  {
-      $3069 = $12;
-      $3070 = ((($3069)) + -4|0);
-      $3071 = HEAP32[$3070>>2]|0;
-      HEAP32[$17>>2] = $3071;
-      break;
-     }
-     case 476:  {
-      $3072 = $12;
-      $3073 = ((($3072)) + -4|0);
-      $3074 = HEAP32[$3073>>2]|0;
-      HEAP32[$17>>2] = $3074;
-      $3075 = $1;
-      $3076 = ((($3075)) + 40|0);
-      HEAP32[$3076>>2] = 0;
-      $3077 = $1;
-      $3078 = ((($3077)) + 72|0);
-      $3079 = HEAP8[$3078>>0]|0;
-      $3080 = $3079 & -2;
-      $3081 = $3080 | 1;
-      HEAP8[$3078>>0] = $3081;
-      break;
-     }
-     case 477:  {
-      $3082 = $12;
-      $3083 = ((($3082)) + -4|0);
-      $3084 = HEAP32[$3083>>2]|0;
-      HEAP32[$17>>2] = $3084;
-      break;
-     }
-     case 478:  {
-      $3085 = $1;
-      $3086 = $12;
-      $3087 = ((($3086)) + -20|0);
-      $3088 = HEAP32[$3087>>2]|0;
-      $3089 = $12;
-      $3090 = ((($3089)) + -12|0);
-      $3091 = HEAP32[$3090>>2]|0;
-      $3092 = $12;
-      $3093 = ((($3092)) + -4|0);
-      $3094 = HEAP32[$3093>>2]|0;
-      $3095 = $12;
-      $3096 = HEAP32[$3095>>2]|0;
-      $3097 = (_new_args($3085,$3088,$3091,$3094,0,$3096)|0);
-      HEAP32[$17>>2] = $3097;
-      break;
-     }
-     case 479:  {
-      $3098 = $1;
-      $3099 = $12;
-      $3100 = ((($3099)) + -28|0);
-      $3101 = HEAP32[$3100>>2]|0;
-      $3102 = $12;
-      $3103 = ((($3102)) + -20|0);
-      $3104 = HEAP32[$3103>>2]|0;
-      $3105 = $12;
-      $3106 = ((($3105)) + -12|0);
-      $3107 = HEAP32[$3106>>2]|0;
-      $3108 = $12;
-      $3109 = ((($3108)) + -4|0);
-      $3110 = HEAP32[$3109>>2]|0;
-      $3111 = $12;
-      $3112 = HEAP32[$3111>>2]|0;
-      $3113 = (_new_args($3098,$3101,$3104,$3107,$3110,$3112)|0);
-      HEAP32[$17>>2] = $3113;
-      break;
-     }
-     case 480:  {
-      $3114 = $1;
-      $3115 = $12;
-      $3116 = ((($3115)) + -12|0);
-      $3117 = HEAP32[$3116>>2]|0;
-      $3118 = $12;
-      $3119 = ((($3118)) + -4|0);
-      $3120 = HEAP32[$3119>>2]|0;
-      $3121 = $12;
-      $3122 = HEAP32[$3121>>2]|0;
-      $3123 = (_new_args($3114,$3117,$3120,0,0,$3122)|0);
-      HEAP32[$17>>2] = $3123;
-      break;
-     }
-     case 481:  {
-      $3124 = $1;
-      $3125 = $12;
-      $3126 = ((($3125)) + -20|0);
-      $3127 = HEAP32[$3126>>2]|0;
-      $3128 = $12;
-      $3129 = ((($3128)) + -12|0);
-      $3130 = HEAP32[$3129>>2]|0;
-      $3131 = $12;
-      $3132 = ((($3131)) + -4|0);
-      $3133 = HEAP32[$3132>>2]|0;
-      $3134 = $12;
-      $3135 = HEAP32[$3134>>2]|0;
-      $3136 = (_new_args($3124,$3127,$3130,0,$3133,$3135)|0);
-      HEAP32[$17>>2] = $3136;
-      break;
-     }
-     case 482:  {
-      $3137 = $1;
-      $3138 = $12;
-      $3139 = ((($3138)) + -12|0);
-      $3140 = HEAP32[$3139>>2]|0;
-      $3141 = $12;
-      $3142 = ((($3141)) + -4|0);
-      $3143 = HEAP32[$3142>>2]|0;
-      $3144 = $12;
-      $3145 = HEAP32[$3144>>2]|0;
-      $3146 = (_new_args($3137,$3140,0,$3143,0,$3145)|0);
-      HEAP32[$17>>2] = $3146;
-      break;
-     }
-     case 483:  {
-      $3147 = $1;
-      $3148 = $12;
-      $3149 = ((($3148)) + -20|0);
-      $3150 = HEAP32[$3149>>2]|0;
-      $3151 = $12;
-      $3152 = ((($3151)) + -12|0);
-      $3153 = HEAP32[$3152>>2]|0;
-      $3154 = $12;
-      $3155 = ((($3154)) + -4|0);
-      $3156 = HEAP32[$3155>>2]|0;
-      $3157 = $12;
-      $3158 = HEAP32[$3157>>2]|0;
-      $3159 = (_new_args($3147,$3150,0,$3153,$3156,$3158)|0);
-      HEAP32[$17>>2] = $3159;
-      break;
-     }
-     case 484:  {
-      $3160 = $1;
-      $3161 = $12;
-      $3162 = ((($3161)) + -4|0);
-      $3163 = HEAP32[$3162>>2]|0;
-      $3164 = $12;
-      $3165 = HEAP32[$3164>>2]|0;
-      $3166 = (_new_args($3160,$3163,0,0,0,$3165)|0);
-      HEAP32[$17>>2] = $3166;
-      break;
-     }
-     case 485:  {
-      $3167 = $1;
-      $3168 = $12;
-      $3169 = ((($3168)) + -12|0);
-      $3170 = HEAP32[$3169>>2]|0;
-      $3171 = $12;
-      $3172 = ((($3171)) + -4|0);
-      $3173 = HEAP32[$3172>>2]|0;
-      $3174 = $12;
-      $3175 = HEAP32[$3174>>2]|0;
-      $3176 = (_new_args($3167,0,$3170,$3173,0,$3175)|0);
-      HEAP32[$17>>2] = $3176;
-      break;
-     }
-     case 486:  {
-      $3177 = $1;
-      $3178 = $12;
-      $3179 = ((($3178)) + -20|0);
-      $3180 = HEAP32[$3179>>2]|0;
-      $3181 = $12;
-      $3182 = ((($3181)) + -12|0);
-      $3183 = HEAP32[$3182>>2]|0;
-      $3184 = $12;
-      $3185 = ((($3184)) + -4|0);
-      $3186 = HEAP32[$3185>>2]|0;
-      $3187 = $12;
-      $3188 = HEAP32[$3187>>2]|0;
-      $3189 = (_new_args($3177,0,$3180,$3183,$3186,$3188)|0);
-      HEAP32[$17>>2] = $3189;
-      break;
-     }
-     case 487:  {
-      $3190 = $1;
-      $3191 = $12;
-      $3192 = ((($3191)) + -4|0);
-      $3193 = HEAP32[$3192>>2]|0;
-      $3194 = $12;
-      $3195 = HEAP32[$3194>>2]|0;
-      $3196 = (_new_args($3190,0,$3193,0,0,$3195)|0);
-      HEAP32[$17>>2] = $3196;
-      break;
-     }
-     case 488:  {
-      $3197 = $1;
-      $3198 = $12;
-      $3199 = ((($3198)) + -12|0);
-      $3200 = HEAP32[$3199>>2]|0;
-      $3201 = $12;
-      $3202 = ((($3201)) + -4|0);
-      $3203 = HEAP32[$3202>>2]|0;
-      $3204 = $12;
-      $3205 = HEAP32[$3204>>2]|0;
-      $3206 = (_new_args($3197,0,$3200,0,$3203,$3205)|0);
-      HEAP32[$17>>2] = $3206;
-      break;
-     }
-     case 489:  {
-      $3207 = $1;
-      $3208 = $12;
-      $3209 = ((($3208)) + -4|0);
-      $3210 = HEAP32[$3209>>2]|0;
-      $3211 = $12;
-      $3212 = HEAP32[$3211>>2]|0;
-      $3213 = (_new_args($3207,0,0,$3210,0,$3212)|0);
-      HEAP32[$17>>2] = $3213;
-      break;
-     }
-     case 490:  {
-      $3214 = $1;
-      $3215 = $12;
-      $3216 = ((($3215)) + -12|0);
-      $3217 = HEAP32[$3216>>2]|0;
-      $3218 = $12;
-      $3219 = ((($3218)) + -4|0);
-      $3220 = HEAP32[$3219>>2]|0;
-      $3221 = $12;
-      $3222 = HEAP32[$3221>>2]|0;
-      $3223 = (_new_args($3214,0,0,$3217,$3220,$3222)|0);
-      HEAP32[$17>>2] = $3223;
-      break;
-     }
-     case 491:  {
-      $3224 = $1;
-      $3225 = $12;
-      $3226 = HEAP32[$3225>>2]|0;
-      $3227 = (_new_args($3224,0,0,0,0,$3226)|0);
-      HEAP32[$17>>2] = $3227;
-      break;
-     }
-     case 492:  {
-      $3228 = $1;
-      _local_add_f($3228,0);
-      $3229 = $1;
-      $3230 = (_new_args($3229,0,0,0,0,0)|0);
-      HEAP32[$17>>2] = $3230;
-      break;
-     }
-     case 493:  {
-      $3231 = $1;
-      _yyerror($3231,59650);
-      HEAP32[$17>>2] = 0;
-      break;
-     }
-     case 494:  {
-      $3232 = $1;
-      _yyerror($3232,59687);
-      HEAP32[$17>>2] = 0;
-      break;
-     }
-     case 495:  {
-      $3233 = $1;
-      _yyerror($3233,59734);
-      HEAP32[$17>>2] = 0;
-      break;
-     }
-     case 496:  {
-      $3234 = $1;
-      _yyerror($3234,59778);
-      HEAP32[$17>>2] = 0;
-      break;
-     }
-     case 497:  {
-      HEAP32[$17>>2] = 0;
-      break;
-     }
-     case 498:  {
-      $3235 = $1;
-      $3236 = $12;
-      $3237 = HEAP32[$3236>>2]|0;
-      _local_add_f($3235,$3237);
-      $3238 = $12;
-      $3239 = HEAP32[$3238>>2]|0;
-      HEAP32[$17>>2] = $3239;
-      break;
-     }
-     case 499:  {
-      $3240 = $1;
-      $3241 = $12;
-      $3242 = HEAP32[$3241>>2]|0;
-      $3243 = (_new_arg($3240,$3242)|0);
-      HEAP32[$17>>2] = $3243;
-      break;
-     }
-     case 500:  {
-      $3244 = $1;
-      $3245 = $12;
-      $3246 = ((($3245)) + -4|0);
-      $3247 = HEAP32[$3246>>2]|0;
-      $3248 = (_new_masgn($3244,$3247,0)|0);
-      HEAP32[$17>>2] = $3248;
-      break;
-     }
-     case 501:  {
-      $3249 = $1;
-      $3250 = $12;
-      $3251 = HEAP32[$3250>>2]|0;
-      $3252 = (_list1_gen($3249,$3251)|0);
-      HEAP32[$17>>2] = $3252;
-      break;
-     }
-     case 502:  {
-      $3253 = $1;
-      $3254 = $12;
-      $3255 = ((($3254)) + -8|0);
-      $3256 = HEAP32[$3255>>2]|0;
-      $3257 = $1;
-      $3258 = $12;
-      $3259 = HEAP32[$3258>>2]|0;
-      $3260 = (_list1_gen($3257,$3259)|0);
-      $3261 = (_append_gen($3253,$3256,$3260)|0);
-      HEAP32[$17>>2] = $3261;
-      break;
-     }
-     case 503:  {
-      $3262 = $1;
-      $3263 = $12;
-      $3264 = ((($3263)) + -4|0);
-      $3265 = HEAP32[$3264>>2]|0;
-      _local_add_f($3262,$3265);
-      $3266 = $12;
-      $3267 = ((($3266)) + -4|0);
-      $3268 = HEAP32[$3267>>2]|0;
-      HEAP32[$17>>2] = $3268;
-      break;
-     }
-     case 504:  {
-      $3269 = $1;
-      $3270 = $12;
-      $3271 = ((($3270)) + -4|0);
-      $3272 = HEAP32[$3271>>2]|0;
-      $3273 = $3272;
-      $3274 = $12;
-      $3275 = HEAP32[$3274>>2]|0;
-      $3276 = (_cons_gen($3269,$3273,$3275)|0);
-      HEAP32[$17>>2] = $3276;
-      break;
-     }
-     case 505:  {
-      $3277 = $1;
-      $3278 = $12;
-      $3279 = ((($3278)) + -4|0);
-      $3280 = HEAP32[$3279>>2]|0;
-      $3281 = $3280;
-      $3282 = $12;
-      $3283 = HEAP32[$3282>>2]|0;
-      $3284 = (_cons_gen($3277,$3281,$3283)|0);
-      HEAP32[$17>>2] = $3284;
-      break;
-     }
-     case 506:  {
-      $3285 = $1;
-      $3286 = $12;
-      $3287 = HEAP32[$3286>>2]|0;
-      $3288 = (_list1_gen($3285,$3287)|0);
-      HEAP32[$17>>2] = $3288;
-      break;
-     }
-     case 507:  {
-      $3289 = $1;
-      $3290 = $12;
-      $3291 = ((($3290)) + -8|0);
-      $3292 = HEAP32[$3291>>2]|0;
-      $3293 = $1;
-      $3294 = $12;
-      $3295 = HEAP32[$3294>>2]|0;
-      $3296 = (_list1_gen($3293,$3295)|0);
-      $3297 = (_append_gen($3289,$3292,$3296)|0);
-      HEAP32[$17>>2] = $3297;
-      break;
-     }
-     case 508:  {
-      $3298 = $1;
-      $3299 = $12;
-      $3300 = HEAP32[$3299>>2]|0;
-      $3301 = (_list1_gen($3298,$3300)|0);
-      HEAP32[$17>>2] = $3301;
-      break;
-     }
-     case 509:  {
-      $3302 = $1;
-      $3303 = $12;
-      $3304 = ((($3303)) + -8|0);
-      $3305 = HEAP32[$3304>>2]|0;
-      $3306 = $1;
-      $3307 = $12;
-      $3308 = HEAP32[$3307>>2]|0;
-      $3309 = (_list1_gen($3306,$3308)|0);
-      $3310 = (_append_gen($3302,$3305,$3309)|0);
-      HEAP32[$17>>2] = $3310;
-      break;
-     }
-     case 512:  {
-      $3311 = $1;
-      $3312 = $12;
-      $3313 = HEAP32[$3312>>2]|0;
-      _local_add_f($3311,$3313);
-      $3314 = $12;
-      $3315 = HEAP32[$3314>>2]|0;
-      HEAP32[$17>>2] = $3315;
-      break;
-     }
-     case 513:  {
-      $3316 = $1;
-      _local_add_f($3316,0);
-      HEAP32[$17>>2] = -1;
-      break;
-     }
-     case 516:  {
-      $3317 = $1;
-      $3318 = $12;
-      $3319 = HEAP32[$3318>>2]|0;
-      _local_add_f($3317,$3319);
-      $3320 = $12;
-      $3321 = HEAP32[$3320>>2]|0;
-      HEAP32[$17>>2] = $3321;
-      break;
-     }
-     case 517:  {
-      $3322 = $12;
-      $3323 = HEAP32[$3322>>2]|0;
-      HEAP32[$17>>2] = $3323;
-      break;
-     }
-     case 518:  {
-      $3324 = $1;
-      _local_add_f($3324,0);
-      HEAP32[$17>>2] = 0;
-      break;
-     }
-     case 519:  {
-      $3325 = $12;
-      $3326 = HEAP32[$3325>>2]|0;
-      HEAP32[$17>>2] = $3326;
-      $3327 = HEAP32[$17>>2]|0;
-      $3328 = ($3327|0)!=(0|0);
-      if (!($3328)) {
-       $3329 = $1;
-       $3330 = (_new_nil($3329)|0);
-       HEAP32[$17>>2] = $3330;
-      }
-      break;
-     }
-     case 520:  {
-      $3331 = $1;
-      $3332 = ((($3331)) + 40|0);
-      HEAP32[$3332>>2] = 0;
-      break;
-     }
-     case 521:  {
-      $3333 = $12;
-      $3334 = ((($3333)) + -4|0);
-      $3335 = HEAP32[$3334>>2]|0;
-      $3336 = ($3335|0)==(0|0);
-      L556: do {
-       if ($3336) {
-        $3337 = $1;
-        _yyerror($3337,59821);
-       } else {
-        $3338 = $12;
-        $3339 = ((($3338)) + -4|0);
-        $3340 = HEAP32[$3339>>2]|0;
-        $3341 = HEAP32[$3340>>2]|0;
-        $3342 = $3341;
-        switch ($3342|0) {
-        case 99: case 34: case 51: case 47: case 60: case 58: case 57: case 56: case 55:  {
-         break;
-        }
-        default: {
-         break L556;
-        }
-        }
-        $3343 = $1;
-        _yyerror($3343,59859);
-       }
-      } while(0);
-      $3344 = $12;
-      $3345 = ((($3344)) + -4|0);
-      $3346 = HEAP32[$3345>>2]|0;
-      HEAP32[$17>>2] = $3346;
-      break;
-     }
-     case 523:  {
-      $3347 = $12;
-      $3348 = ((($3347)) + -4|0);
-      $3349 = HEAP32[$3348>>2]|0;
-      HEAP32[$17>>2] = $3349;
-      break;
-     }
-     case 524:  {
-      $3350 = $1;
-      $3351 = $12;
-      $3352 = HEAP32[$3351>>2]|0;
-      $3353 = (_list1_gen($3350,$3352)|0);
-      HEAP32[$17>>2] = $3353;
-      $3354 = $12;
-      $3355 = HEAP32[$3354>>2]|0;
-      $3356 = ($3355|0)!=(0|0);
-      if ($3356) {
-       $3357 = $12;
-       $3358 = HEAP32[$3357>>2]|0;
-       $3359 = ((($3358)) + 10|0);
-       $3360 = HEAP16[$3359>>1]|0;
-       $3361 = HEAP32[$17>>2]|0;
-       $3362 = ((($3361)) + 10|0);
-       HEAP16[$3362>>1] = $3360;
-       $3363 = $12;
-       $3364 = HEAP32[$3363>>2]|0;
-       $3365 = ((($3364)) + 8|0);
-       $3366 = HEAP16[$3365>>1]|0;
-       $3367 = HEAP32[$17>>2]|0;
-       $3368 = ((($3367)) + 8|0);
-       HEAP16[$3368>>1] = $3366;
-      }
-      break;
-     }
-     case 525:  {
-      $3369 = $1;
-      $3370 = $12;
-      $3371 = ((($3370)) + -8|0);
-      $3372 = HEAP32[$3371>>2]|0;
-      $3373 = $1;
-      $3374 = $12;
-      $3375 = HEAP32[$3374>>2]|0;
-      $3376 = (_list1_gen($3373,$3375)|0);
-      $3377 = (_append_gen($3369,$3372,$3376)|0);
-      HEAP32[$17>>2] = $3377;
-      break;
-     }
-     case 526:  {
-      $3378 = $1;
-      $3379 = $12;
-      $3380 = ((($3379)) + -8|0);
-      $3381 = HEAP32[$3380>>2]|0;
-      $3382 = $12;
-      $3383 = HEAP32[$3382>>2]|0;
-      $3384 = (_cons_gen($3378,$3381,$3383)|0);
-      HEAP32[$17>>2] = $3384;
-      break;
-     }
-     case 527:  {
-      $3385 = $1;
-      $3386 = $1;
-      $3387 = $12;
-      $3388 = ((($3387)) + -4|0);
-      $3389 = HEAP32[$3388>>2]|0;
-      $3390 = (_new_sym($3386,$3389)|0);
-      $3391 = $12;
-      $3392 = HEAP32[$3391>>2]|0;
-      $3393 = (_cons_gen($3385,$3390,$3392)|0);
-      HEAP32[$17>>2] = $3393;
-      break;
-     }
-     case 549:  {
-      $6 = 0;
-      break;
-     }
-     case 551:  {
-      $3394 = $1;
-      $3395 = ((($3394)) + 32|0);
-      $3396 = HEAP32[$3395>>2]|0;
-      $3397 = (($3396) + 1)|0;
-      HEAP32[$3395>>2] = $3397;
-      $3398 = $1;
-      $3399 = ((($3398)) + 36|0);
-      HEAP32[$3399>>2] = 0;
-      break;
-     }
-     case 554:  {
-      $6 = 0;
-      break;
-     }
-     case 555:  {
-      HEAP32[$17>>2] = 0;
-      break;
-     }
-     default: {
-     }
-     }
-    } while(0);
-    $3400 = $21;
-    $3401 = $12;
-    $3402 = (0 - ($3400))|0;
-    $3403 = (($3401) + ($3402<<2)|0);
-    $12 = $3403;
-    $3404 = $21;
-    $3405 = $9;
-    $3406 = (0 - ($3404))|0;
-    $3407 = (($3405) + ($3406<<1)|0);
-    $9 = $3407;
-    $21 = 0;
-    $3408 = $12;
-    $3409 = ((($3408)) + 4|0);
-    $12 = $3409;
-    ;HEAP32[$3409>>2]=HEAP32[$17>>2]|0;
-    $3410 = $14;
-    $3411 = (49776 + ($3410<<1)|0);
-    $3412 = HEAP16[$3411>>1]|0;
-    $3413 = $3412&65535;
-    $14 = $3413;
-    $3414 = $14;
-    $3415 = (($3414) - 144)|0;
-    $3416 = (50888 + ($3415<<1)|0);
-    $3417 = HEAP16[$3416>>1]|0;
-    $3418 = $3417 << 16 >> 16;
-    $3419 = $9;
-    $3420 = HEAP16[$3419>>1]|0;
-    $3421 = $3420 << 16 >> 16;
-    $3422 = (($3418) + ($3421))|0;
-    $5 = $3422;
-    $3423 = $5;
-    $3424 = (0)<=($3423|0);
-    $3425 = $5;
-    $3426 = ($3425|0)<=(10639);
-    $or$cond12 = $3424 & $3426;
-    if ($or$cond12) {
-     $3427 = $5;
-     $3428 = (5280 + ($3427<<1)|0);
-     $3429 = HEAP16[$3428>>1]|0;
-     $3430 = $3429 << 16 >> 16;
-     $3431 = $9;
-     $3432 = HEAP16[$3431>>1]|0;
-     $3433 = $3432 << 16 >> 16;
-     $3434 = ($3430|0)==($3433|0);
-     if ($3434) {
-      $3435 = $5;
-      $3436 = (26560 + ($3435<<1)|0);
-      $3437 = HEAP16[$3436>>1]|0;
-      $3438 = $3437 << 16 >> 16;
-      $5 = $3438;
-      break;
-     }
-    }
-    $3439 = $14;
-    $3440 = (($3439) - 144)|0;
-    $3441 = (51210 + ($3440<<1)|0);
-    $3442 = HEAP16[$3441>>1]|0;
-    $3443 = $3442 << 16 >> 16;
-    $5 = $3443;
-   }
-   else if ((label|0) == 513) {
-    label = 0;
-    $3444 = $6;
-    $3445 = ($3444|0)!=(0);
-    do {
-     if (!($3445)) {
-      $3446 = $4;
-      $3447 = (($3446) + 1)|0;
-      $4 = $3447;
-      $3448 = $5;
-      $3449 = $2;
-      $3450 = (_yysyntax_error(0,$3448,$3449)|0);
-      $31 = $3450;
-      $3451 = $20;
-      $3452 = $31;
-      $3453 = ($3451>>>0)<($3452>>>0);
-      $3454 = $20;
-      $3455 = ($3454>>>0)<(4294967295);
-      $or$cond14 = $3453 & $3455;
-      do {
-       if ($or$cond14) {
-        $3456 = $31;
-        $3457 = $3456<<1;
-        $32 = $3457;
-        $3458 = $31;
-        $3459 = $32;
-        $3460 = ($3458>>>0)<=($3459>>>0);
-        $3461 = $32;
-        $3462 = ($3461>>>0)<=(4294967295);
-        $or$cond16 = $3460 & $3462;
-        $$19 = $or$cond16 ? $3457 : -1;
-        $32 = $$19;
-        $3463 = $19;
-        $3464 = ($3463|0)!=($18|0);
-        if ($3464) {
-         $3465 = $1;
-         $3466 = HEAP32[$3465>>2]|0;
-         $3467 = $19;
-         _mrb_free($3466,$3467);
-        }
-        $3468 = $1;
-        $3469 = HEAP32[$3468>>2]|0;
-        $3470 = $32;
-        $3471 = (_mrb_malloc($3469,$3470)|0);
-        $19 = $3471;
-        $3472 = $19;
-        $3473 = ($3472|0)!=(0|0);
-        if ($3473) {
-         $3474 = $32;
-         $20 = $3474;
-         break;
-        } else {
-         $19 = $18;
-         $20 = 128;
-         break;
-        }
-       }
-      } while(0);
-      $3475 = $31;
-      $3476 = (0)<($3475>>>0);
-      if ($3476) {
-       $3477 = $31;
-       $3478 = $20;
-       $3479 = ($3477>>>0)<=($3478>>>0);
-       if ($3479) {
-        $3480 = $19;
-        $3481 = $5;
-        $3482 = $2;
-        (_yysyntax_error($3480,$3481,$3482)|0);
-        $3483 = $1;
-        $3484 = $19;
-        _yyerror($3483,$3484);
-        break;
-       }
-      }
-      $3485 = $1;
-      _yyerror($3485,59902);
-      $3486 = $31;
-      $3487 = ($3486|0)!=(0);
-      if ($3487) {
-       label = 538;
-       break L1;
-      }
-     }
-    } while(0);
-    $3488 = $6;
-    $3489 = ($3488|0)==(3);
-    do {
-     if ($3489) {
-      $3490 = $2;
-      $3491 = ($3490|0)<=(0);
-      if ($3491) {
-       $3492 = $2;
-       $3493 = ($3492|0)==(0);
-       if ($3493) {
-        label = 537;
-        break L1;
-       } else {
-        break;
-       }
-      } else {
-       $3494 = $16;
-       $3495 = $1;
-       _yydestruct(59915,$3494,$3,$3495);
-       $2 = -2;
-       break;
-      }
-     }
-    } while(0);
-    $6 = 3;
-    while(1) {
-     $3496 = $5;
-     $3497 = (3344 + ($3496<<1)|0);
-     $3498 = HEAP16[$3497>>1]|0;
-     $3499 = $3498 << 16 >> 16;
-     $14 = $3499;
-     $3500 = $14;
-     $3501 = ($3500|0)!=(-771);
-     if ($3501) {
-      $3502 = $14;
-      $3503 = (($3502) + 1)|0;
-      $14 = $3503;
-      $3504 = $14;
-      $3505 = (0)<=($3504|0);
-      $3506 = $14;
-      $3507 = ($3506|0)<=(10639);
-      $or$cond18 = $3505 & $3507;
-      if ($or$cond18) {
-       $3508 = $14;
-       $3509 = (5280 + ($3508<<1)|0);
-       $3510 = HEAP16[$3509>>1]|0;
-       $3511 = $3510 << 16 >> 16;
-       $3512 = ($3511|0)==(1);
-       if ($3512) {
-        $3513 = $14;
-        $3514 = (26560 + ($3513<<1)|0);
-        $3515 = HEAP16[$3514>>1]|0;
-        $3516 = $3515 << 16 >> 16;
-        $14 = $3516;
-        $3517 = $14;
-        $3518 = (0)<($3517|0);
-        if ($3518) {
-         break;
-        }
-       }
-      }
-     }
-     $3519 = $9;
-     $3520 = $8;
-     $3521 = ($3519|0)==($3520|0);
-     if ($3521) {
-      label = 537;
-      break L1;
-     }
-     $3522 = $5;
-     $3523 = (51532 + ($3522<<1)|0);
-     $3524 = HEAP16[$3523>>1]|0;
-     $3525 = $3524&65535;
-     $3526 = $12;
-     $3527 = $1;
-     _yydestruct(59933,$3525,$3526,$3527);
-     $3528 = $12;
-     $3529 = ((($3528)) + -4|0);
-     $12 = $3529;
-     $3530 = $9;
-     $3531 = ((($3530)) + -2|0);
-     $9 = $3531;
-     $3532 = $9;
-     $3533 = HEAP16[$3532>>1]|0;
-     $3534 = $3533 << 16 >> 16;
-     $5 = $3534;
-    }
-    $3535 = $12;
-    $3536 = ((($3535)) + 4|0);
-    $12 = $3536;
-    ;HEAP32[$3536>>2]=HEAP32[$3>>2]|0;
-    $3537 = $14;
-    $5 = $3537;
-   }
-  } while(0);
-  $35 = $9;
-  $36 = ((($35)) + 2|0);
-  $9 = $36;
- }
- if ((label|0) == 536) {
-  $15 = 0;
- }
- else if ((label|0) == 537) {
-  $15 = 1;
- }
- else if ((label|0) == 538) {
-  $3538 = $1;
-  _yyerror($3538,59948);
-  $15 = 2;
- }
- $3539 = $2;
- $3540 = ($3539|0)!=(-2);
- if ($3540) {
-  $3541 = $16;
-  $3542 = $1;
-  _yydestruct(59965,$3541,$3,$3542);
- }
- $3543 = $21;
- $3544 = $12;
- $3545 = (0 - ($3543))|0;
- $3546 = (($3544) + ($3545<<2)|0);
- $12 = $3546;
- $3547 = $21;
- $3548 = $9;
- $3549 = (0 - ($3547))|0;
- $3550 = (($3548) + ($3549<<1)|0);
- $9 = $3550;
- while(1) {
-  $3551 = $9;
-  $3552 = $8;
-  $3553 = ($3551|0)!=($3552|0);
-  if (!($3553)) {
-   break;
-  }
-  $3554 = $9;
-  $3555 = HEAP16[$3554>>1]|0;
-  $3556 = $3555 << 16 >> 16;
-  $3557 = (51532 + ($3556<<1)|0);
-  $3558 = HEAP16[$3557>>1]|0;
-  $3559 = $3558&65535;
-  $3560 = $12;
-  $3561 = $1;
-  _yydestruct(59995,$3559,$3560,$3561);
-  $3562 = $12;
-  $3563 = ((($3562)) + -4|0);
-  $12 = $3563;
-  $3564 = $9;
-  $3565 = ((($3564)) + -2|0);
-  $9 = $3565;
- }
- $3566 = $8;
- $3567 = ($3566|0)!=($7|0);
- if ($3567) {
-  $3568 = $1;
-  $3569 = HEAP32[$3568>>2]|0;
-  $3570 = $8;
-  _mrb_free($3569,$3570);
- }
- $3571 = $19;
- $3572 = ($3571|0)!=($18|0);
- if (!($3572)) {
-  $3576 = $15;
-  STACKTOP = sp;return ($3576|0);
- }
- $3573 = $1;
- $3574 = HEAP32[$3573>>2]|0;
- $3575 = $19;
- _mrb_free($3574,$3575);
- $3576 = $15;
- STACKTOP = sp;return ($3576|0);
-}
-function _new_nil($0) {
- $0 = $0|0;
- var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $1 = $0;
- $2 = $1;
- $3 = (_list1_gen($2,(86))|0);
- STACKTOP = sp;return ($3|0);
-}
-function _parser_update_cxt($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;
- var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0;
- var $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $2 = $0;
- $3 = $1;
- $6 = 0;
- $7 = $3;
- $8 = ($7|0)!=(0|0);
- if (!($8)) {
-  STACKTOP = sp;return;
- }
- $9 = $2;
- $10 = ((($9)) + 1144|0);
- $11 = HEAP32[$10>>2]|0;
- $12 = HEAP32[$11>>2]|0;
- $13 = $12;
- $14 = ($13|0)!=(3);
- if ($14) {
-  STACKTOP = sp;return;
- }
- $15 = $2;
- $16 = ((($15)) + 1144|0);
- $17 = HEAP32[$16>>2]|0;
- $18 = ((($17)) + 4|0);
- $19 = HEAP32[$18>>2]|0;
- $20 = HEAP32[$19>>2]|0;
- $4 = $20;
- $5 = $20;
- while(1) {
-  $21 = $4;
-  $22 = ($21|0)!=(0|0);
-  if (!($22)) {
-   break;
-  }
-  $23 = $6;
-  $24 = (($23) + 1)|0;
-  $6 = $24;
-  $25 = $4;
-  $26 = ((($25)) + 4|0);
-  $27 = HEAP32[$26>>2]|0;
-  $4 = $27;
- }
- $28 = $2;
- $29 = HEAP32[$28>>2]|0;
- $30 = $3;
- $31 = HEAP32[$30>>2]|0;
- $32 = $6;
- $33 = $32<<2;
- $34 = (_mrb_realloc($29,$31,$33)|0);
- $35 = $3;
- HEAP32[$35>>2] = $34;
- $36 = $6;
- $37 = $3;
- $38 = ((($37)) + 4|0);
- HEAP32[$38>>2] = $36;
- $6 = 0;
- $39 = $5;
- $4 = $39;
- while(1) {
-  $40 = $4;
-  $41 = ($40|0)!=(0|0);
-  if (!($41)) {
-   break;
-  }
-  $42 = $4;
-  $43 = HEAP32[$42>>2]|0;
-  $44 = $43;
-  $45 = $3;
-  $46 = HEAP32[$45>>2]|0;
-  $47 = $6;
-  $48 = (($46) + ($47<<2)|0);
-  HEAP32[$48>>2] = $44;
-  $49 = $6;
-  $50 = (($49) + 1)|0;
-  $6 = $50;
-  $51 = $4;
-  $52 = ((($51)) + 4|0);
-  $53 = HEAP32[$52>>2]|0;
-  $4 = $53;
- }
- STACKTOP = sp;return;
-}
-function _mrb_parser_dump($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $100 = 0, $1000 = 0, $1001 = 0, $1002 = 0, $1003 = 0, $1004 = 0, $1005 = 0, $1006 = 0, $1007 = 0, $1008 = 0, $1009 = 0, $101 = 0, $1010 = 0, $1011 = 0, $1012 = 0, $1013 = 0, $1014 = 0, $1015 = 0, $1016 = 0;
- var $1017 = 0, $1018 = 0, $1019 = 0, $102 = 0, $1020 = 0, $1021 = 0, $1022 = 0, $1023 = 0, $1024 = 0, $1025 = 0, $1026 = 0, $1027 = 0, $1028 = 0, $1029 = 0, $103 = 0, $1030 = 0, $1031 = 0, $1032 = 0, $1033 = 0, $1034 = 0;
- var $1035 = 0, $1036 = 0, $1037 = 0, $1038 = 0, $1039 = 0, $104 = 0, $1040 = 0, $1041 = 0, $1042 = 0, $1043 = 0, $1044 = 0, $1045 = 0, $1046 = 0, $1047 = 0, $1048 = 0, $1049 = 0, $105 = 0, $1050 = 0, $1051 = 0, $1052 = 0;
- var $1053 = 0, $1054 = 0, $1055 = 0, $1056 = 0, $1057 = 0, $1058 = 0, $1059 = 0, $106 = 0, $1060 = 0, $1061 = 0, $1062 = 0, $1063 = 0, $1064 = 0, $1065 = 0, $1066 = 0, $1067 = 0, $1068 = 0, $1069 = 0, $107 = 0, $1070 = 0;
- var $1071 = 0, $1072 = 0, $1073 = 0, $1074 = 0, $1075 = 0, $1076 = 0, $1077 = 0, $1078 = 0, $1079 = 0, $108 = 0, $1080 = 0, $1081 = 0, $1082 = 0, $1083 = 0, $1084 = 0, $1085 = 0, $1086 = 0, $1087 = 0, $1088 = 0, $1089 = 0;
- var $109 = 0, $1090 = 0, $1091 = 0, $1092 = 0, $1093 = 0, $1094 = 0, $1095 = 0, $1096 = 0, $1097 = 0, $1098 = 0, $1099 = 0, $11 = 0, $110 = 0, $1100 = 0, $1101 = 0, $1102 = 0, $1103 = 0, $1104 = 0, $1105 = 0, $1106 = 0;
- var $1107 = 0, $1108 = 0, $1109 = 0, $111 = 0, $1110 = 0, $1111 = 0, $1112 = 0, $1113 = 0, $1114 = 0, $1115 = 0, $1116 = 0, $1117 = 0, $1118 = 0, $1119 = 0, $112 = 0, $1120 = 0, $1121 = 0, $1122 = 0, $1123 = 0, $1124 = 0;
- var $1125 = 0, $1126 = 0, $1127 = 0, $1128 = 0, $1129 = 0, $113 = 0, $1130 = 0, $1131 = 0, $1132 = 0, $1133 = 0, $1134 = 0, $1135 = 0, $1136 = 0, $1137 = 0, $1138 = 0, $1139 = 0, $114 = 0, $1140 = 0, $1141 = 0, $1142 = 0;
- var $1143 = 0, $1144 = 0, $1145 = 0, $1146 = 0, $1147 = 0, $1148 = 0, $1149 = 0, $115 = 0, $1150 = 0, $1151 = 0, $1152 = 0, $1153 = 0, $1154 = 0, $1155 = 0, $1156 = 0, $1157 = 0, $1158 = 0, $1159 = 0, $116 = 0, $1160 = 0;
- var $1161 = 0, $1162 = 0, $1163 = 0, $1164 = 0, $1165 = 0, $1166 = 0, $1167 = 0, $1168 = 0, $1169 = 0, $117 = 0, $1170 = 0, $1171 = 0, $1172 = 0, $1173 = 0, $1174 = 0, $1175 = 0, $1176 = 0, $1177 = 0, $1178 = 0, $1179 = 0;
- var $118 = 0, $1180 = 0, $1181 = 0, $1182 = 0, $1183 = 0, $1184 = 0, $1185 = 0, $1186 = 0, $1187 = 0, $1188 = 0, $1189 = 0, $119 = 0, $1190 = 0, $1191 = 0, $1192 = 0, $1193 = 0, $1194 = 0, $1195 = 0, $1196 = 0, $1197 = 0;
- var $1198 = 0, $1199 = 0, $12 = 0, $120 = 0, $1200 = 0, $1201 = 0, $1202 = 0, $1203 = 0, $1204 = 0, $1205 = 0, $1206 = 0, $1207 = 0, $1208 = 0, $1209 = 0, $121 = 0, $1210 = 0, $1211 = 0, $1212 = 0, $1213 = 0, $1214 = 0;
- var $1215 = 0, $1216 = 0, $1217 = 0, $1218 = 0, $1219 = 0, $122 = 0, $1220 = 0, $1221 = 0, $1222 = 0, $1223 = 0, $1224 = 0, $1225 = 0, $1226 = 0, $1227 = 0, $1228 = 0, $1229 = 0, $123 = 0, $1230 = 0, $1231 = 0, $1232 = 0;
- var $1233 = 0, $1234 = 0, $1235 = 0, $1236 = 0, $1237 = 0, $1238 = 0, $1239 = 0, $124 = 0, $1240 = 0, $1241 = 0, $1242 = 0, $1243 = 0, $1244 = 0, $1245 = 0, $1246 = 0, $1247 = 0, $1248 = 0, $1249 = 0, $125 = 0, $1250 = 0;
- var $1251 = 0, $1252 = 0, $1253 = 0, $1254 = 0, $1255 = 0, $1256 = 0, $1257 = 0, $1258 = 0, $1259 = 0, $126 = 0, $1260 = 0, $1261 = 0, $1262 = 0, $1263 = 0, $1264 = 0, $1265 = 0, $1266 = 0, $1267 = 0, $1268 = 0, $1269 = 0;
- var $127 = 0, $1270 = 0, $1271 = 0, $1272 = 0, $1273 = 0, $1274 = 0, $1275 = 0, $1276 = 0, $1277 = 0, $1278 = 0, $1279 = 0, $128 = 0, $1280 = 0, $1281 = 0, $1282 = 0, $1283 = 0, $1284 = 0, $1285 = 0, $1286 = 0, $1287 = 0;
- var $1288 = 0, $1289 = 0, $129 = 0, $1290 = 0, $1291 = 0, $1292 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0, $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0;
- var $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0, $152 = 0, $153 = 0, $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0;
- var $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0, $170 = 0, $171 = 0, $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0;
- var $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0, $188 = 0, $189 = 0, $19 = 0, $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0;
- var $197 = 0, $198 = 0, $199 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0, $204 = 0, $205 = 0, $206 = 0, $207 = 0, $208 = 0, $209 = 0, $21 = 0, $210 = 0, $211 = 0, $212 = 0, $213 = 0, $214 = 0;
- var $215 = 0, $216 = 0, $217 = 0, $218 = 0, $219 = 0, $22 = 0, $220 = 0, $221 = 0, $222 = 0, $223 = 0, $224 = 0, $225 = 0, $226 = 0, $227 = 0, $228 = 0, $229 = 0, $23 = 0, $230 = 0, $231 = 0, $232 = 0;
- var $233 = 0, $234 = 0, $235 = 0, $236 = 0, $237 = 0, $238 = 0, $239 = 0, $24 = 0, $240 = 0, $241 = 0, $242 = 0, $243 = 0, $244 = 0, $245 = 0, $246 = 0, $247 = 0, $248 = 0, $249 = 0, $25 = 0, $250 = 0;
- var $251 = 0, $252 = 0, $253 = 0, $254 = 0, $255 = 0, $256 = 0, $257 = 0, $258 = 0, $259 = 0, $26 = 0, $260 = 0, $261 = 0, $262 = 0, $263 = 0, $264 = 0, $265 = 0, $266 = 0, $267 = 0, $268 = 0, $269 = 0;
- var $27 = 0, $270 = 0, $271 = 0, $272 = 0, $273 = 0, $274 = 0, $275 = 0, $276 = 0, $277 = 0, $278 = 0, $279 = 0, $28 = 0, $280 = 0, $281 = 0, $282 = 0, $283 = 0, $284 = 0, $285 = 0, $286 = 0, $287 = 0;
- var $288 = 0, $289 = 0, $29 = 0, $290 = 0, $291 = 0, $292 = 0, $293 = 0, $294 = 0, $295 = 0, $296 = 0, $297 = 0, $298 = 0, $299 = 0, $3 = 0, $30 = 0, $300 = 0, $301 = 0, $302 = 0, $303 = 0, $304 = 0;
- var $305 = 0, $306 = 0, $307 = 0, $308 = 0, $309 = 0, $31 = 0, $310 = 0, $311 = 0, $312 = 0, $313 = 0, $314 = 0, $315 = 0, $316 = 0, $317 = 0, $318 = 0, $319 = 0, $32 = 0, $320 = 0, $321 = 0, $322 = 0;
- var $323 = 0, $324 = 0, $325 = 0, $326 = 0, $327 = 0, $328 = 0, $329 = 0, $33 = 0, $330 = 0, $331 = 0, $332 = 0, $333 = 0, $334 = 0, $335 = 0, $336 = 0, $337 = 0, $338 = 0, $339 = 0, $34 = 0, $340 = 0;
- var $341 = 0, $342 = 0, $343 = 0, $344 = 0, $345 = 0, $346 = 0, $347 = 0, $348 = 0, $349 = 0, $35 = 0, $350 = 0, $351 = 0, $352 = 0, $353 = 0, $354 = 0, $355 = 0, $356 = 0, $357 = 0, $358 = 0, $359 = 0;
- var $36 = 0, $360 = 0, $361 = 0, $362 = 0, $363 = 0, $364 = 0, $365 = 0, $366 = 0, $367 = 0, $368 = 0, $369 = 0, $37 = 0, $370 = 0, $371 = 0, $372 = 0, $373 = 0, $374 = 0, $375 = 0, $376 = 0, $377 = 0;
- var $378 = 0, $379 = 0, $38 = 0, $380 = 0, $381 = 0, $382 = 0, $383 = 0, $384 = 0, $385 = 0, $386 = 0, $387 = 0, $388 = 0, $389 = 0, $39 = 0, $390 = 0, $391 = 0, $392 = 0, $393 = 0, $394 = 0, $395 = 0;
- var $396 = 0, $397 = 0, $398 = 0, $399 = 0, $4 = 0, $40 = 0, $400 = 0, $401 = 0, $402 = 0, $403 = 0, $404 = 0, $405 = 0, $406 = 0, $407 = 0, $408 = 0, $409 = 0, $41 = 0, $410 = 0, $411 = 0, $412 = 0;
- var $413 = 0, $414 = 0, $415 = 0, $416 = 0, $417 = 0, $418 = 0, $419 = 0, $42 = 0, $420 = 0, $421 = 0, $422 = 0, $423 = 0, $424 = 0, $425 = 0, $426 = 0, $427 = 0, $428 = 0, $429 = 0, $43 = 0, $430 = 0;
- var $431 = 0, $432 = 0, $433 = 0, $434 = 0, $435 = 0, $436 = 0, $437 = 0, $438 = 0, $439 = 0, $44 = 0, $440 = 0, $441 = 0, $442 = 0, $443 = 0, $444 = 0, $445 = 0, $446 = 0, $447 = 0, $448 = 0, $449 = 0;
- var $45 = 0, $450 = 0, $451 = 0, $452 = 0, $453 = 0, $454 = 0, $455 = 0, $456 = 0, $457 = 0, $458 = 0, $459 = 0, $46 = 0, $460 = 0, $461 = 0, $462 = 0, $463 = 0, $464 = 0, $465 = 0, $466 = 0, $467 = 0;
- var $468 = 0, $469 = 0, $47 = 0, $470 = 0, $471 = 0, $472 = 0, $473 = 0, $474 = 0, $475 = 0, $476 = 0, $477 = 0, $478 = 0, $479 = 0, $48 = 0, $480 = 0, $481 = 0, $482 = 0, $483 = 0, $484 = 0, $485 = 0;
- var $486 = 0, $487 = 0, $488 = 0, $489 = 0, $49 = 0, $490 = 0, $491 = 0, $492 = 0, $493 = 0, $494 = 0, $495 = 0, $496 = 0, $497 = 0, $498 = 0, $499 = 0, $5 = 0, $50 = 0, $500 = 0, $501 = 0, $502 = 0;
- var $503 = 0, $504 = 0, $505 = 0, $506 = 0, $507 = 0, $508 = 0, $509 = 0, $51 = 0, $510 = 0, $511 = 0, $512 = 0, $513 = 0, $514 = 0, $515 = 0, $516 = 0, $517 = 0, $518 = 0, $519 = 0, $52 = 0, $520 = 0;
- var $521 = 0, $522 = 0, $523 = 0, $524 = 0, $525 = 0, $526 = 0, $527 = 0, $528 = 0, $529 = 0, $53 = 0, $530 = 0, $531 = 0, $532 = 0, $533 = 0, $534 = 0, $535 = 0, $536 = 0, $537 = 0, $538 = 0, $539 = 0;
- var $54 = 0, $540 = 0, $541 = 0, $542 = 0, $543 = 0, $544 = 0, $545 = 0, $546 = 0, $547 = 0, $548 = 0, $549 = 0, $55 = 0, $550 = 0, $551 = 0, $552 = 0, $553 = 0, $554 = 0, $555 = 0, $556 = 0, $557 = 0;
- var $558 = 0, $559 = 0, $56 = 0, $560 = 0, $561 = 0, $562 = 0, $563 = 0, $564 = 0, $565 = 0, $566 = 0, $567 = 0, $568 = 0, $569 = 0, $57 = 0, $570 = 0, $571 = 0, $572 = 0, $573 = 0, $574 = 0, $575 = 0;
- var $576 = 0, $577 = 0, $578 = 0, $579 = 0, $58 = 0, $580 = 0, $581 = 0, $582 = 0, $583 = 0, $584 = 0, $585 = 0, $586 = 0, $587 = 0, $588 = 0, $589 = 0, $59 = 0, $590 = 0, $591 = 0, $592 = 0, $593 = 0;
- var $594 = 0, $595 = 0, $596 = 0, $597 = 0, $598 = 0, $599 = 0, $6 = 0, $60 = 0, $600 = 0, $601 = 0, $602 = 0, $603 = 0, $604 = 0, $605 = 0, $606 = 0, $607 = 0, $608 = 0, $609 = 0, $61 = 0, $610 = 0;
- var $611 = 0, $612 = 0, $613 = 0, $614 = 0, $615 = 0, $616 = 0, $617 = 0, $618 = 0, $619 = 0, $62 = 0, $620 = 0, $621 = 0, $622 = 0, $623 = 0, $624 = 0, $625 = 0, $626 = 0, $627 = 0, $628 = 0, $629 = 0;
- var $63 = 0, $630 = 0, $631 = 0, $632 = 0, $633 = 0, $634 = 0, $635 = 0, $636 = 0, $637 = 0, $638 = 0, $639 = 0, $64 = 0, $640 = 0, $641 = 0, $642 = 0, $643 = 0, $644 = 0, $645 = 0, $646 = 0, $647 = 0;
- var $648 = 0, $649 = 0, $65 = 0, $650 = 0, $651 = 0, $652 = 0, $653 = 0, $654 = 0, $655 = 0, $656 = 0, $657 = 0, $658 = 0, $659 = 0, $66 = 0, $660 = 0, $661 = 0, $662 = 0, $663 = 0, $664 = 0, $665 = 0;
- var $666 = 0, $667 = 0, $668 = 0, $669 = 0, $67 = 0, $670 = 0, $671 = 0, $672 = 0, $673 = 0, $674 = 0, $675 = 0, $676 = 0, $677 = 0, $678 = 0, $679 = 0, $68 = 0, $680 = 0, $681 = 0, $682 = 0, $683 = 0;
- var $684 = 0, $685 = 0, $686 = 0, $687 = 0, $688 = 0, $689 = 0, $69 = 0, $690 = 0, $691 = 0, $692 = 0, $693 = 0, $694 = 0, $695 = 0, $696 = 0, $697 = 0, $698 = 0, $699 = 0, $7 = 0, $70 = 0, $700 = 0;
- var $701 = 0, $702 = 0, $703 = 0, $704 = 0, $705 = 0, $706 = 0, $707 = 0, $708 = 0, $709 = 0, $71 = 0, $710 = 0, $711 = 0, $712 = 0, $713 = 0, $714 = 0, $715 = 0, $716 = 0, $717 = 0, $718 = 0, $719 = 0;
- var $72 = 0, $720 = 0, $721 = 0, $722 = 0, $723 = 0, $724 = 0, $725 = 0, $726 = 0, $727 = 0, $728 = 0, $729 = 0, $73 = 0, $730 = 0, $731 = 0, $732 = 0, $733 = 0, $734 = 0, $735 = 0, $736 = 0, $737 = 0;
- var $738 = 0, $739 = 0, $74 = 0, $740 = 0, $741 = 0, $742 = 0, $743 = 0, $744 = 0, $745 = 0, $746 = 0, $747 = 0, $748 = 0, $749 = 0, $75 = 0, $750 = 0, $751 = 0, $752 = 0, $753 = 0, $754 = 0, $755 = 0;
- var $756 = 0, $757 = 0, $758 = 0, $759 = 0, $76 = 0, $760 = 0, $761 = 0, $762 = 0, $763 = 0, $764 = 0, $765 = 0, $766 = 0, $767 = 0, $768 = 0, $769 = 0, $77 = 0, $770 = 0, $771 = 0, $772 = 0, $773 = 0;
- var $774 = 0, $775 = 0, $776 = 0, $777 = 0, $778 = 0, $779 = 0, $78 = 0, $780 = 0, $781 = 0, $782 = 0, $783 = 0, $784 = 0, $785 = 0, $786 = 0, $787 = 0, $788 = 0, $789 = 0, $79 = 0, $790 = 0, $791 = 0;
- var $792 = 0, $793 = 0, $794 = 0, $795 = 0, $796 = 0, $797 = 0, $798 = 0, $799 = 0, $8 = 0, $80 = 0, $800 = 0, $801 = 0, $802 = 0, $803 = 0, $804 = 0, $805 = 0, $806 = 0, $807 = 0, $808 = 0, $809 = 0;
- var $81 = 0, $810 = 0, $811 = 0, $812 = 0, $813 = 0, $814 = 0, $815 = 0, $816 = 0, $817 = 0, $818 = 0, $819 = 0, $82 = 0, $820 = 0, $821 = 0, $822 = 0, $823 = 0, $824 = 0, $825 = 0, $826 = 0, $827 = 0;
- var $828 = 0, $829 = 0, $83 = 0, $830 = 0, $831 = 0, $832 = 0, $833 = 0, $834 = 0, $835 = 0, $836 = 0, $837 = 0, $838 = 0, $839 = 0, $84 = 0, $840 = 0, $841 = 0, $842 = 0, $843 = 0, $844 = 0, $845 = 0;
- var $846 = 0, $847 = 0, $848 = 0, $849 = 0, $85 = 0, $850 = 0, $851 = 0, $852 = 0, $853 = 0, $854 = 0, $855 = 0, $856 = 0, $857 = 0, $858 = 0, $859 = 0, $86 = 0, $860 = 0, $861 = 0, $862 = 0, $863 = 0;
- var $864 = 0, $865 = 0, $866 = 0, $867 = 0, $868 = 0, $869 = 0, $87 = 0, $870 = 0, $871 = 0, $872 = 0, $873 = 0, $874 = 0, $875 = 0, $876 = 0, $877 = 0, $878 = 0, $879 = 0, $88 = 0, $880 = 0, $881 = 0;
- var $882 = 0, $883 = 0, $884 = 0, $885 = 0, $886 = 0, $887 = 0, $888 = 0, $889 = 0, $89 = 0, $890 = 0, $891 = 0, $892 = 0, $893 = 0, $894 = 0, $895 = 0, $896 = 0, $897 = 0, $898 = 0, $899 = 0, $9 = 0;
- var $90 = 0, $900 = 0, $901 = 0, $902 = 0, $903 = 0, $904 = 0, $905 = 0, $906 = 0, $907 = 0, $908 = 0, $909 = 0, $91 = 0, $910 = 0, $911 = 0, $912 = 0, $913 = 0, $914 = 0, $915 = 0, $916 = 0, $917 = 0;
- var $918 = 0, $919 = 0, $92 = 0, $920 = 0, $921 = 0, $922 = 0, $923 = 0, $924 = 0, $925 = 0, $926 = 0, $927 = 0, $928 = 0, $929 = 0, $93 = 0, $930 = 0, $931 = 0, $932 = 0, $933 = 0, $934 = 0, $935 = 0;
- var $936 = 0, $937 = 0, $938 = 0, $939 = 0, $94 = 0, $940 = 0, $941 = 0, $942 = 0, $943 = 0, $944 = 0, $945 = 0, $946 = 0, $947 = 0, $948 = 0, $949 = 0, $95 = 0, $950 = 0, $951 = 0, $952 = 0, $953 = 0;
- var $954 = 0, $955 = 0, $956 = 0, $957 = 0, $958 = 0, $959 = 0, $96 = 0, $960 = 0, $961 = 0, $962 = 0, $963 = 0, $964 = 0, $965 = 0, $966 = 0, $967 = 0, $968 = 0, $969 = 0, $97 = 0, $970 = 0, $971 = 0;
- var $972 = 0, $973 = 0, $974 = 0, $975 = 0, $976 = 0, $977 = 0, $978 = 0, $979 = 0, $98 = 0, $980 = 0, $981 = 0, $982 = 0, $983 = 0, $984 = 0, $985 = 0, $986 = 0, $987 = 0, $988 = 0, $989 = 0, $99 = 0;
- var $990 = 0, $991 = 0, $992 = 0, $993 = 0, $994 = 0, $995 = 0, $996 = 0, $997 = 0, $998 = 0, $999 = 0, $vararg_buffer = 0, $vararg_buffer1 = 0, $vararg_buffer102 = 0, $vararg_buffer104 = 0, $vararg_buffer106 = 0, $vararg_buffer108 = 0, $vararg_buffer11 = 0, $vararg_buffer110 = 0, $vararg_buffer112 = 0, $vararg_buffer115 = 0;
- var $vararg_buffer118 = 0, $vararg_buffer120 = 0, $vararg_buffer122 = 0, $vararg_buffer124 = 0, $vararg_buffer126 = 0, $vararg_buffer128 = 0, $vararg_buffer13 = 0, $vararg_buffer130 = 0, $vararg_buffer132 = 0, $vararg_buffer134 = 0, $vararg_buffer136 = 0, $vararg_buffer138 = 0, $vararg_buffer140 = 0, $vararg_buffer142 = 0, $vararg_buffer144 = 0, $vararg_buffer146 = 0, $vararg_buffer148 = 0, $vararg_buffer15 = 0, $vararg_buffer150 = 0, $vararg_buffer152 = 0;
- var $vararg_buffer156 = 0, $vararg_buffer158 = 0, $vararg_buffer160 = 0, $vararg_buffer162 = 0, $vararg_buffer164 = 0, $vararg_buffer166 = 0, $vararg_buffer168 = 0, $vararg_buffer17 = 0, $vararg_buffer170 = 0, $vararg_buffer172 = 0, $vararg_buffer174 = 0, $vararg_buffer176 = 0, $vararg_buffer179 = 0, $vararg_buffer182 = 0, $vararg_buffer185 = 0, $vararg_buffer188 = 0, $vararg_buffer19 = 0, $vararg_buffer191 = 0, $vararg_buffer193 = 0, $vararg_buffer195 = 0;
- var $vararg_buffer197 = 0, $vararg_buffer200 = 0, $vararg_buffer203 = 0, $vararg_buffer206 = 0, $vararg_buffer208 = 0, $vararg_buffer21 = 0, $vararg_buffer212 = 0, $vararg_buffer215 = 0, $vararg_buffer217 = 0, $vararg_buffer221 = 0, $vararg_buffer223 = 0, $vararg_buffer227 = 0, $vararg_buffer229 = 0, $vararg_buffer23 = 0, $vararg_buffer233 = 0, $vararg_buffer235 = 0, $vararg_buffer238 = 0, $vararg_buffer241 = 0, $vararg_buffer244 = 0, $vararg_buffer246 = 0;
- var $vararg_buffer248 = 0, $vararg_buffer25 = 0, $vararg_buffer250 = 0, $vararg_buffer252 = 0, $vararg_buffer256 = 0, $vararg_buffer258 = 0, $vararg_buffer261 = 0, $vararg_buffer263 = 0, $vararg_buffer265 = 0, $vararg_buffer268 = 0, $vararg_buffer27 = 0, $vararg_buffer271 = 0, $vararg_buffer274 = 0, $vararg_buffer276 = 0, $vararg_buffer278 = 0, $vararg_buffer280 = 0, $vararg_buffer283 = 0, $vararg_buffer286 = 0, $vararg_buffer289 = 0, $vararg_buffer29 = 0;
- var $vararg_buffer291 = 0, $vararg_buffer293 = 0, $vararg_buffer295 = 0, $vararg_buffer297 = 0, $vararg_buffer3 = 0, $vararg_buffer300 = 0, $vararg_buffer302 = 0, $vararg_buffer304 = 0, $vararg_buffer307 = 0, $vararg_buffer309 = 0, $vararg_buffer31 = 0, $vararg_buffer311 = 0, $vararg_buffer313 = 0, $vararg_buffer316 = 0, $vararg_buffer319 = 0, $vararg_buffer321 = 0, $vararg_buffer324 = 0, $vararg_buffer326 = 0, $vararg_buffer329 = 0, $vararg_buffer331 = 0;
- var $vararg_buffer333 = 0, $vararg_buffer336 = 0, $vararg_buffer339 = 0, $vararg_buffer34 = 0, $vararg_buffer341 = 0, $vararg_buffer344 = 0, $vararg_buffer346 = 0, $vararg_buffer348 = 0, $vararg_buffer36 = 0, $vararg_buffer39 = 0, $vararg_buffer41 = 0, $vararg_buffer43 = 0, $vararg_buffer45 = 0, $vararg_buffer47 = 0, $vararg_buffer49 = 0, $vararg_buffer5 = 0, $vararg_buffer51 = 0, $vararg_buffer53 = 0, $vararg_buffer55 = 0, $vararg_buffer57 = 0;
- var $vararg_buffer59 = 0, $vararg_buffer61 = 0, $vararg_buffer63 = 0, $vararg_buffer65 = 0, $vararg_buffer67 = 0, $vararg_buffer69 = 0, $vararg_buffer7 = 0, $vararg_buffer71 = 0, $vararg_buffer73 = 0, $vararg_buffer75 = 0, $vararg_buffer77 = 0, $vararg_buffer79 = 0, $vararg_buffer81 = 0, $vararg_buffer83 = 0, $vararg_buffer85 = 0, $vararg_buffer87 = 0, $vararg_buffer89 = 0, $vararg_buffer9 = 0, $vararg_buffer91 = 0, $vararg_buffer94 = 0;
- var $vararg_buffer96 = 0, $vararg_buffer98 = 0, $vararg_ptr101 = 0, $vararg_ptr155 = 0, $vararg_ptr211 = 0, $vararg_ptr220 = 0, $vararg_ptr226 = 0, $vararg_ptr232 = 0, $vararg_ptr255 = 0, $vararg_ptr351 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 1296|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(1296|0);
- $vararg_buffer348 = sp + 1208|0;
- $vararg_buffer346 = sp + 1200|0;
- $vararg_buffer344 = sp + 1192|0;
- $vararg_buffer341 = sp + 1184|0;
- $vararg_buffer339 = sp + 1176|0;
- $vararg_buffer336 = sp + 1168|0;
- $vararg_buffer333 = sp + 1160|0;
- $vararg_buffer331 = sp + 1152|0;
- $vararg_buffer329 = sp + 1144|0;
- $vararg_buffer326 = sp + 1136|0;
- $vararg_buffer324 = sp + 1128|0;
- $vararg_buffer321 = sp + 1120|0;
- $vararg_buffer319 = sp + 1112|0;
- $vararg_buffer316 = sp + 1104|0;
- $vararg_buffer313 = sp + 1096|0;
- $vararg_buffer311 = sp + 1088|0;
- $vararg_buffer309 = sp + 1080|0;
- $vararg_buffer307 = sp + 1072|0;
- $vararg_buffer304 = sp + 1064|0;
- $vararg_buffer302 = sp + 1056|0;
- $vararg_buffer300 = sp + 1048|0;
- $vararg_buffer297 = sp + 1040|0;
- $vararg_buffer295 = sp + 1032|0;
- $vararg_buffer293 = sp + 1024|0;
- $vararg_buffer291 = sp + 1016|0;
- $vararg_buffer289 = sp + 1008|0;
- $vararg_buffer286 = sp + 1000|0;
- $vararg_buffer283 = sp + 992|0;
- $vararg_buffer280 = sp + 984|0;
- $vararg_buffer278 = sp + 976|0;
- $vararg_buffer276 = sp + 968|0;
- $vararg_buffer274 = sp + 960|0;
- $vararg_buffer271 = sp + 952|0;
- $vararg_buffer268 = sp + 944|0;
- $vararg_buffer265 = sp + 936|0;
- $vararg_buffer263 = sp + 928|0;
- $vararg_buffer261 = sp + 920|0;
- $vararg_buffer258 = sp + 912|0;
- $vararg_buffer256 = sp + 904|0;
- $vararg_buffer252 = sp + 896|0;
- $vararg_buffer250 = sp + 888|0;
- $vararg_buffer248 = sp + 880|0;
- $vararg_buffer246 = sp + 872|0;
- $vararg_buffer244 = sp + 864|0;
- $vararg_buffer241 = sp + 856|0;
- $vararg_buffer238 = sp + 848|0;
- $vararg_buffer235 = sp + 840|0;
- $vararg_buffer233 = sp + 832|0;
- $vararg_buffer229 = sp + 824|0;
- $vararg_buffer227 = sp + 816|0;
- $vararg_buffer223 = sp + 808|0;
- $vararg_buffer221 = sp + 800|0;
- $vararg_buffer217 = sp + 792|0;
- $vararg_buffer215 = sp + 784|0;
- $vararg_buffer212 = sp + 776|0;
- $vararg_buffer208 = sp + 768|0;
- $vararg_buffer206 = sp + 760|0;
- $vararg_buffer203 = sp + 752|0;
- $vararg_buffer200 = sp + 744|0;
- $vararg_buffer197 = sp + 736|0;
- $vararg_buffer195 = sp + 728|0;
- $vararg_buffer193 = sp + 720|0;
- $vararg_buffer191 = sp + 712|0;
- $vararg_buffer188 = sp + 704|0;
- $vararg_buffer185 = sp + 696|0;
- $vararg_buffer182 = sp + 688|0;
- $vararg_buffer179 = sp + 680|0;
- $vararg_buffer176 = sp + 672|0;
- $vararg_buffer174 = sp + 664|0;
- $vararg_buffer172 = sp + 656|0;
- $vararg_buffer170 = sp + 648|0;
- $vararg_buffer168 = sp + 640|0;
- $vararg_buffer166 = sp + 632|0;
- $vararg_buffer164 = sp + 624|0;
- $vararg_buffer162 = sp + 616|0;
- $vararg_buffer160 = sp + 608|0;
- $vararg_buffer158 = sp + 600|0;
- $vararg_buffer156 = sp + 592|0;
- $vararg_buffer152 = sp + 584|0;
- $vararg_buffer150 = sp + 576|0;
- $vararg_buffer148 = sp + 568|0;
- $vararg_buffer146 = sp + 560|0;
- $vararg_buffer144 = sp + 552|0;
- $vararg_buffer142 = sp + 544|0;
- $vararg_buffer140 = sp + 536|0;
- $vararg_buffer138 = sp + 528|0;
- $vararg_buffer136 = sp + 520|0;
- $vararg_buffer134 = sp + 512|0;
- $vararg_buffer132 = sp + 504|0;
- $vararg_buffer130 = sp + 496|0;
- $vararg_buffer128 = sp + 488|0;
- $vararg_buffer126 = sp + 480|0;
- $vararg_buffer124 = sp + 472|0;
- $vararg_buffer122 = sp + 464|0;
- $vararg_buffer120 = sp + 456|0;
- $vararg_buffer118 = sp + 448|0;
- $vararg_buffer115 = sp + 440|0;
- $vararg_buffer112 = sp + 432|0;
- $vararg_buffer110 = sp + 424|0;
- $vararg_buffer108 = sp + 416|0;
- $vararg_buffer106 = sp + 408|0;
- $vararg_buffer104 = sp + 400|0;
- $vararg_buffer102 = sp + 392|0;
- $vararg_buffer98 = sp + 384|0;
- $vararg_buffer96 = sp + 376|0;
- $vararg_buffer94 = sp + 368|0;
- $vararg_buffer91 = sp + 360|0;
- $vararg_buffer89 = sp + 352|0;
- $vararg_buffer87 = sp + 344|0;
- $vararg_buffer85 = sp + 336|0;
- $vararg_buffer83 = sp + 328|0;
- $vararg_buffer81 = sp + 320|0;
- $vararg_buffer79 = sp + 312|0;
- $vararg_buffer77 = sp + 304|0;
- $vararg_buffer75 = sp + 296|0;
- $vararg_buffer73 = sp + 288|0;
- $vararg_buffer71 = sp + 280|0;
- $vararg_buffer69 = sp + 272|0;
- $vararg_buffer67 = sp + 264|0;
- $vararg_buffer65 = sp + 256|0;
- $vararg_buffer63 = sp + 248|0;
- $vararg_buffer61 = sp + 240|0;
- $vararg_buffer59 = sp + 232|0;
- $vararg_buffer57 = sp + 224|0;
- $vararg_buffer55 = sp + 216|0;
- $vararg_buffer53 = sp + 208|0;
- $vararg_buffer51 = sp + 200|0;
- $vararg_buffer49 = sp + 192|0;
- $vararg_buffer47 = sp + 184|0;
- $vararg_buffer45 = sp + 176|0;
- $vararg_buffer43 = sp + 168|0;
- $vararg_buffer41 = sp + 160|0;
- $vararg_buffer39 = sp + 152|0;
- $vararg_buffer36 = sp + 144|0;
- $vararg_buffer34 = sp + 136|0;
- $vararg_buffer31 = sp + 128|0;
- $vararg_buffer29 = sp + 120|0;
- $vararg_buffer27 = sp + 112|0;
- $vararg_buffer25 = sp + 104|0;
- $vararg_buffer23 = sp + 96|0;
- $vararg_buffer21 = sp + 88|0;
- $vararg_buffer19 = sp + 80|0;
- $vararg_buffer17 = sp + 72|0;
- $vararg_buffer15 = sp + 64|0;
- $vararg_buffer13 = sp + 56|0;
- $vararg_buffer11 = sp + 48|0;
- $vararg_buffer9 = sp + 40|0;
- $vararg_buffer7 = sp + 32|0;
- $vararg_buffer5 = sp + 24|0;
- $vararg_buffer3 = sp + 16|0;
- $vararg_buffer1 = sp + 8|0;
- $vararg_buffer = sp;
- $3 = $0;
- $4 = $1;
- $5 = $2;
- $22 = $4;
- $23 = ($22|0)!=(0|0);
- if (!($23)) {
-  STACKTOP = sp;return;
- }
- L3: while(1) {
-  $24 = $4;
-  $25 = $5;
-  _dump_prefix($24,$25);
-  $26 = $4;
-  $27 = HEAP32[$26>>2]|0;
-  $28 = $27;
-  $6 = $28;
-  $29 = $4;
-  $30 = ((($29)) + 4|0);
-  $31 = HEAP32[$30>>2]|0;
-  $4 = $31;
-  $32 = $6;
-  switch ($32|0) {
-  case 17:  {
-   label = 3;
-   break L3;
-   break;
-  }
-  case 18:  {
-   label = 4;
-   break L3;
-   break;
-  }
-  case 19:  {
-   label = 18;
-   break L3;
-   break;
-  }
-  case 53:  {
-   label = 19;
-   break L3;
-   break;
-  }
-  case 4:  {
-   break L3;
-   break;
-  }
-  case 5:  {
-   label = 34;
-   break L3;
-   break;
-  }
-  case 20:  {
-   label = 36;
-   break L3;
-   break;
-  }
-  case 21:  {
-   label = 37;
-   break L3;
-   break;
-  }
-  case 6:  {
-   label = 38;
-   break L3;
-   break;
-  }
-  case 9:  {
-   label = 43;
-   break L3;
-   break;
-  }
-  case 10:  {
-   label = 44;
-   break L3;
-   break;
-  }
-  case 12:  {
-   label = 45;
-   break L3;
-   break;
-  }
-  case 29: case 30:  {
-   label = 66;
-   break L3;
-   break;
-  }
-  case 80:  {
-   label = 69;
-   break L3;
-   break;
-  }
-  case 81:  {
-   label = 70;
-   break L3;
-   break;
-  }
-  case 77:  {
-   label = 71;
-   break L3;
-   break;
-  }
-  case 78:  {
-   label = 72;
-   break L3;
-   break;
-  }
-  case 34:  {
-   label = 73;
-   break L3;
-   break;
-  }
-  case 36:  {
-   label = 74;
-   break L3;
-   break;
-  }
-  case 66:  {
-   label = 77;
-   break L3;
-   break;
-  }
-  case 24:  {
-   label = 78;
-   break L3;
-   break;
-  }
-  case 23:  {
-   label = 79;
-   break L3;
-   break;
-  }
-  case 28:  {
-   label = 90;
-   break L3;
-   break;
-  }
-  case 32:  {
-   label = 91;
-   break L3;
-   break;
-  }
-  case 33:  {
-   label = 94;
-   break L3;
-   break;
-  }
-  case 37:  {
-   label = 95;
-   break L3;
-   break;
-  }
-  case 38:  {
-   label = 96;
-   break L3;
-   break;
-  }
-  case 13:  {
-   label = 97;
-   break L3;
-   break;
-  }
-  case 14:  {
-   label = 98;
-   break L3;
-   break;
-  }
-  case 15:  {
-   label = 99;
-   break L3;
-   break;
-  }
-  case 16:  {
-   label = 100;
-   break L3;
-   break;
-  }
-  case 39:  {
-   label = 101;
-   break L3;
-   break;
-  }
-  case 41:  {
-   label = 102;
-   break L3;
-   break;
-  }
-  case 42:  {
-   label = 103;
-   break L3;
-   break;
-  }
-  case 44:  {
-   label = 104;
-   break L3;
-   break;
-  }
-  case 43:  {
-   label = 105;
-   break L3;
-   break;
-  }
-  case 47:  {
-   label = 106;
-   break L3;
-   break;
-  }
-  case 46:  {
-   label = 107;
-   break L3;
-   break;
-  }
-  case 45:  {
-   label = 108;
-   break L3;
-   break;
-  }
-  case 63:  {
-   label = 109;
-   break L3;
-   break;
-  }
-  case 69:  {
-   label = 110;
-   break L3;
-   break;
-  }
-  case 50:  {
-   label = 111;
-   break L3;
-   break;
-  }
-  case 51:  {
-   label = 112;
-   break L3;
-   break;
-  }
-  case 52:  {
-   label = 113;
-   break L3;
-   break;
-  }
-  case 55:  {
-   label = 114;
-   break L3;
-   break;
-  }
-  case 56:  {
-   label = 115;
-   break L3;
-   break;
-  }
-  case 57:  {
-   label = 116;
-   break L3;
-   break;
-  }
-  case 58:  {
-   label = 117;
-   break L3;
-   break;
-  }
-  case 59:  {
-   label = 118;
-   break L3;
-   break;
-  }
-  case 60:  {
-   label = 119;
-   break L3;
-   break;
-  }
-  case 54:  {
-   label = 120;
-   break L3;
-   break;
-  }
-  case 85:  {
-   label = 121;
-   break L3;
-   break;
-  }
-  case 86:  {
-   label = 122;
-   break L3;
-   break;
-  }
-  case 87:  {
-   label = 123;
-   break L3;
-   break;
-  }
-  case 88:  {
-   label = 124;
-   break L3;
-   break;
-  }
-  case 72:  {
-   label = 125;
-   break L3;
-   break;
-  }
-  case 73:  {
-   label = 126;
-   break L3;
-   break;
-  }
-  case 74:  {
-   label = 130;
-   break L3;
-   break;
-  }
-  case 75:  {
-   label = 138;
-   break L3;
-   break;
-  }
-  case 76:  {
-   label = 144;
-   break L3;
-   break;
-  }
-  case 70:  {
-   label = 145;
-   break L3;
-   break;
-  }
-  case 71:  {
-   label = 170;
-   break L3;
-   break;
-  }
-  case 91:  {
-   label = 184;
-   break L3;
-   break;
-  }
-  case 99:  {
-   label = 185;
-   break L3;
-   break;
-  }
-  case 3:  {
-   break;
-  }
-  default: {
-   label = 186;
-   break L3;
-  }
-  }
-  (_printf(57509,$vararg_buffer85)|0);
-  $441 = $4;
-  $442 = HEAP32[$441>>2]|0;
-  $12 = $442;
-  $13 = 1;
-  $443 = $12;
-  $444 = ($443|0)!=(0|0);
-  do {
-   if ($444) {
-    $445 = $12;
-    $446 = HEAP32[$445>>2]|0;
-    $447 = ($446|0)!=(0|0);
-    if (!($447)) {
-     $448 = $12;
-     $449 = ((($448)) + 4|0);
-     $450 = HEAP32[$449>>2]|0;
-     $451 = ($450|0)!=(0|0);
-     if (!($451)) {
-      break;
-     }
-    }
-    $452 = $12;
-    $453 = $5;
-    $454 = (($453) + 1)|0;
-    _dump_prefix($452,$454);
-    (_printf(57522,$vararg_buffer87)|0);
-    $455 = $12;
-    $456 = $5;
-    $457 = (($456) + 2)|0;
-    _dump_prefix($455,$457);
-    while(1) {
-     $458 = $12;
-     $459 = ($458|0)!=(0|0);
-     if (!($459)) {
-      break;
-     }
-     $460 = $12;
-     $461 = HEAP32[$460>>2]|0;
-     $462 = ($461|0)!=(0|0);
-     if ($462) {
-      $463 = $13;
-      $464 = ($463<<24>>24)!=(0);
-      if (!($464)) {
-       (_printf(57540,$vararg_buffer89)|0);
-      }
-      $465 = $3;
-      $466 = $12;
-      $467 = HEAP32[$466>>2]|0;
-      $468 = $467;
-      $469 = (_mrb_sym2name($465,$468)|0);
-      HEAP32[$vararg_buffer91>>2] = $469;
-      (_printf(57543,$vararg_buffer91)|0);
-      $13 = 0;
-     }
-     $470 = $12;
-     $471 = ((($470)) + 4|0);
-     $472 = HEAP32[$471>>2]|0;
-     $12 = $472;
-    }
-    (_printf(67789,$vararg_buffer94)|0);
-   }
-  } while(0);
-  $473 = $4;
-  $474 = ((($473)) + 4|0);
-  $475 = HEAP32[$474>>2]|0;
-  $4 = $475;
-  $476 = $5;
-  $477 = (($476) + 1)|0;
-  $5 = $477;
- }
- switch (label|0) {
-  case 3: {
-   (_printf(57167,$vararg_buffer)|0);
-   $33 = $3;
-   $34 = $4;
-   $35 = $5;
-   $36 = (($35) + 1)|0;
-   _dump_recur($33,$34,$36);
-   STACKTOP = sp;return;
-   break;
-  }
-  case 4: {
-   (_printf(57180,$vararg_buffer1)|0);
-   $37 = $4;
-   $38 = HEAP32[$37>>2]|0;
-   $39 = ($38|0)!=(0|0);
-   if ($39) {
-    $40 = $4;
-    $41 = $5;
-    $42 = (($41) + 1)|0;
-    _dump_prefix($40,$42);
-    (_printf(57194,$vararg_buffer3)|0);
-    $43 = $3;
-    $44 = $4;
-    $45 = HEAP32[$44>>2]|0;
-    $46 = $5;
-    $47 = (($46) + 2)|0;
-    _mrb_parser_dump($43,$45,$47);
-   }
-   $48 = $4;
-   $49 = ((($48)) + 4|0);
-   $50 = HEAP32[$49>>2]|0;
-   $4 = $50;
-   $51 = $4;
-   $52 = HEAP32[$51>>2]|0;
-   $53 = ($52|0)!=(0|0);
-   L31: do {
-    if ($53) {
-     $54 = $4;
-     $55 = HEAP32[$54>>2]|0;
-     $7 = $55;
-     $56 = $7;
-     $57 = $5;
-     $58 = (($57) + 1)|0;
-     _dump_prefix($56,$58);
-     (_printf(57201,$vararg_buffer5)|0);
-     while(1) {
-      $59 = $7;
-      $60 = ($59|0)!=(0|0);
-      if (!($60)) {
-       break L31;
-      }
-      $61 = $7;
-      $62 = HEAP32[$61>>2]|0;
-      $8 = $62;
-      $63 = $8;
-      $64 = HEAP32[$63>>2]|0;
-      $65 = ($64|0)!=(0|0);
-      if ($65) {
-       $66 = $7;
-       $67 = $5;
-       $68 = (($67) + 2)|0;
-       _dump_prefix($66,$68);
-       (_printf(57210,$vararg_buffer7)|0);
-       $69 = $3;
-       $70 = $8;
-       $71 = HEAP32[$70>>2]|0;
-       $72 = $5;
-       $73 = (($72) + 3)|0;
-       _dump_recur($69,$71,$73);
-      }
-      $74 = $8;
-      $75 = ((($74)) + 4|0);
-      $76 = HEAP32[$75>>2]|0;
-      $77 = HEAP32[$76>>2]|0;
-      $78 = ($77|0)!=(0|0);
-      if ($78) {
-       $79 = $8;
-       $80 = $5;
-       $81 = (($80) + 2)|0;
-       _dump_prefix($79,$81);
-       (_printf(57227,$vararg_buffer9)|0);
-       $82 = $3;
-       $83 = $8;
-       $84 = ((($83)) + 4|0);
-       $85 = HEAP32[$84>>2]|0;
-       $86 = HEAP32[$85>>2]|0;
-       $87 = $5;
-       $88 = (($87) + 3)|0;
-       _mrb_parser_dump($82,$86,$88);
-      }
-      $89 = $8;
-      $90 = ((($89)) + 4|0);
-      $91 = HEAP32[$90>>2]|0;
-      $92 = ((($91)) + 4|0);
-      $93 = HEAP32[$92>>2]|0;
-      $94 = HEAP32[$93>>2]|0;
-      $95 = ($94|0)!=(0|0);
-      if ($95) {
-       $96 = $8;
-       $97 = $5;
-       $98 = (($97) + 2)|0;
-       _dump_prefix($96,$98);
-       (_printf(57237,$vararg_buffer11)|0);
-       $99 = $3;
-       $100 = $8;
-       $101 = ((($100)) + 4|0);
-       $102 = HEAP32[$101>>2]|0;
-       $103 = ((($102)) + 4|0);
-       $104 = HEAP32[$103>>2]|0;
-       $105 = HEAP32[$104>>2]|0;
-       $106 = $5;
-       $107 = (($106) + 3)|0;
-       _mrb_parser_dump($99,$105,$107);
-      }
-      $108 = $7;
-      $109 = ((($108)) + 4|0);
-      $110 = HEAP32[$109>>2]|0;
-      $7 = $110;
-     }
-    }
-   } while(0);
-   $111 = $4;
-   $112 = ((($111)) + 4|0);
-   $113 = HEAP32[$112>>2]|0;
-   $4 = $113;
-   $114 = $4;
-   $115 = HEAP32[$114>>2]|0;
-   $116 = ($115|0)!=(0|0);
-   if (!($116)) {
-    STACKTOP = sp;return;
-   }
-   $117 = $4;
-   $118 = $5;
-   $119 = (($118) + 1)|0;
-   _dump_prefix($117,$119);
-   (_printf(57251,$vararg_buffer13)|0);
-   $120 = $3;
-   $121 = $4;
-   $122 = HEAP32[$121>>2]|0;
-   $123 = $5;
-   $124 = (($123) + 2)|0;
-   _mrb_parser_dump($120,$122,$124);
-   STACKTOP = sp;return;
-   break;
-  }
-  case 18: {
-   (_printf(57258,$vararg_buffer15)|0);
-   $125 = $4;
-   $126 = $5;
-   $127 = (($126) + 1)|0;
-   _dump_prefix($125,$127);
-   (_printf(57194,$vararg_buffer17)|0);
-   $128 = $3;
-   $129 = $4;
-   $130 = HEAP32[$129>>2]|0;
-   $131 = $5;
-   $132 = (($131) + 2)|0;
-   _mrb_parser_dump($128,$130,$132);
-   $133 = $4;
-   $134 = $5;
-   $135 = (($134) + 1)|0;
-   _dump_prefix($133,$135);
-   (_printf(57272,$vararg_buffer19)|0);
-   $136 = $3;
-   $137 = $4;
-   $138 = ((($137)) + 4|0);
-   $139 = HEAP32[$138>>2]|0;
-   $140 = ((($139)) + 4|0);
-   $141 = HEAP32[$140>>2]|0;
-   $142 = $5;
-   $143 = (($142) + 2)|0;
-   _mrb_parser_dump($136,$141,$143);
-   STACKTOP = sp;return;
-   break;
-  }
-  case 19: {
-   (_printf(57281,$vararg_buffer21)|0);
-   break;
-  }
-  case 34: {
-   (_printf(57372,$vararg_buffer41)|0);
-   $243 = $4;
-   $244 = $5;
-   $245 = (($244) + 1)|0;
-   _dump_prefix($243,$245);
-   (_printf(57382,$vararg_buffer43)|0);
-   $246 = $3;
-   $247 = $4;
-   $248 = HEAP32[$247>>2]|0;
-   $249 = $5;
-   $250 = (($249) + 2)|0;
-   _mrb_parser_dump($246,$248,$250);
-   $251 = $4;
-   $252 = $5;
-   $253 = (($252) + 1)|0;
-   _dump_prefix($251,$253);
-   (_printf(57389,$vararg_buffer45)|0);
-   $254 = $3;
-   $255 = $4;
-   $256 = ((($255)) + 4|0);
-   $257 = HEAP32[$256>>2]|0;
-   $258 = HEAP32[$257>>2]|0;
-   $259 = $5;
-   $260 = (($259) + 2)|0;
-   _mrb_parser_dump($254,$258,$260);
-   $261 = $4;
-   $262 = ((($261)) + 4|0);
-   $263 = HEAP32[$262>>2]|0;
-   $264 = ((($263)) + 4|0);
-   $265 = HEAP32[$264>>2]|0;
-   $266 = HEAP32[$265>>2]|0;
-   $267 = ($266|0)!=(0|0);
-   if (!($267)) {
-    STACKTOP = sp;return;
-   }
-   $268 = $4;
-   $269 = $5;
-   $270 = (($269) + 1)|0;
-   _dump_prefix($268,$270);
-   (_printf(57251,$vararg_buffer47)|0);
-   $271 = $3;
-   $272 = $4;
-   $273 = ((($272)) + 4|0);
-   $274 = HEAP32[$273>>2]|0;
-   $275 = ((($274)) + 4|0);
-   $276 = HEAP32[$275>>2]|0;
-   $277 = HEAP32[$276>>2]|0;
-   $278 = $5;
-   $279 = (($278) + 2)|0;
-   _mrb_parser_dump($271,$277,$279);
-   STACKTOP = sp;return;
-   break;
-  }
-  case 36: {
-   (_printf(57396,$vararg_buffer49)|0);
-   $280 = $3;
-   $281 = $4;
-   $282 = HEAP32[$281>>2]|0;
-   $283 = $5;
-   $284 = (($283) + 1)|0;
-   _mrb_parser_dump($280,$282,$284);
-   $285 = $3;
-   $286 = $4;
-   $287 = ((($286)) + 4|0);
-   $288 = HEAP32[$287>>2]|0;
-   $289 = $5;
-   $290 = (($289) + 1)|0;
-   _mrb_parser_dump($285,$288,$290);
-   STACKTOP = sp;return;
-   break;
-  }
-  case 37: {
-   (_printf(57407,$vararg_buffer51)|0);
-   $291 = $3;
-   $292 = $4;
-   $293 = HEAP32[$292>>2]|0;
-   $294 = $5;
-   $295 = (($294) + 1)|0;
-   _mrb_parser_dump($291,$293,$295);
-   $296 = $3;
-   $297 = $4;
-   $298 = ((($297)) + 4|0);
-   $299 = HEAP32[$298>>2]|0;
-   $300 = $5;
-   $301 = (($300) + 1)|0;
-   _mrb_parser_dump($296,$299,$301);
-   STACKTOP = sp;return;
-   break;
-  }
-  case 38: {
-   (_printf(57417,$vararg_buffer53)|0);
-   $302 = $4;
-   $303 = HEAP32[$302>>2]|0;
-   $304 = ($303|0)!=(0|0);
-   if ($304) {
-    $305 = $3;
-    $306 = $4;
-    $307 = HEAP32[$306>>2]|0;
-    $308 = $5;
-    $309 = (($308) + 1)|0;
-    _mrb_parser_dump($305,$307,$309);
-   }
-   $310 = $4;
-   $311 = ((($310)) + 4|0);
-   $312 = HEAP32[$311>>2]|0;
-   $4 = $312;
-   while(1) {
-    $313 = $4;
-    $314 = ($313|0)!=(0|0);
-    if (!($314)) {
-     break;
-    }
-    $315 = $4;
-    $316 = $5;
-    $317 = (($316) + 1)|0;
-    _dump_prefix($315,$317);
-    (_printf(57429,$vararg_buffer55)|0);
-    $318 = $3;
-    $319 = $4;
-    $320 = HEAP32[$319>>2]|0;
-    $321 = HEAP32[$320>>2]|0;
-    $322 = $5;
-    $323 = (($322) + 2)|0;
-    _dump_recur($318,$321,$323);
-    $324 = $4;
-    $325 = $5;
-    $326 = (($325) + 1)|0;
-    _dump_prefix($324,$326);
-    (_printf(57194,$vararg_buffer57)|0);
-    $327 = $3;
-    $328 = $4;
-    $329 = HEAP32[$328>>2]|0;
-    $330 = ((($329)) + 4|0);
-    $331 = HEAP32[$330>>2]|0;
-    $332 = $5;
-    $333 = (($332) + 2)|0;
-    _mrb_parser_dump($327,$331,$333);
-    $334 = $4;
-    $335 = ((($334)) + 4|0);
-    $336 = HEAP32[$335>>2]|0;
-    $4 = $336;
-   }
-   STACKTOP = sp;return;
-   break;
-  }
-  case 43: {
-   (_printf(57436,$vararg_buffer59)|0);
-   $337 = $4;
-   $338 = $5;
-   $339 = (($338) + 1)|0;
-   _dump_prefix($337,$339);
-   (_printf(57382,$vararg_buffer61)|0);
-   $340 = $3;
-   $341 = $4;
-   $342 = HEAP32[$341>>2]|0;
-   $343 = $5;
-   $344 = (($343) + 2)|0;
-   _mrb_parser_dump($340,$342,$344);
-   $345 = $4;
-   $346 = $5;
-   $347 = (($346) + 1)|0;
-   _dump_prefix($345,$347);
-   (_printf(57194,$vararg_buffer63)|0);
-   $348 = $3;
-   $349 = $4;
-   $350 = ((($349)) + 4|0);
-   $351 = HEAP32[$350>>2]|0;
-   $352 = $5;
-   $353 = (($352) + 2)|0;
-   _mrb_parser_dump($348,$351,$353);
-   STACKTOP = sp;return;
-   break;
-  }
-  case 44: {
-   (_printf(57449,$vararg_buffer65)|0);
-   $354 = $4;
-   $355 = $5;
-   $356 = (($355) + 1)|0;
-   _dump_prefix($354,$356);
-   (_printf(57382,$vararg_buffer67)|0);
-   $357 = $3;
-   $358 = $4;
-   $359 = HEAP32[$358>>2]|0;
-   $360 = $5;
-   $361 = (($360) + 2)|0;
-   _mrb_parser_dump($357,$359,$361);
-   $362 = $4;
-   $363 = $5;
-   $364 = (($363) + 1)|0;
-   _dump_prefix($362,$364);
-   (_printf(57194,$vararg_buffer69)|0);
-   $365 = $3;
-   $366 = $4;
-   $367 = ((($366)) + 4|0);
-   $368 = HEAP32[$367>>2]|0;
-   $369 = $5;
-   $370 = (($369) + 2)|0;
-   _mrb_parser_dump($365,$368,$370);
-   STACKTOP = sp;return;
-   break;
-  }
-  case 45: {
-   (_printf(57462,$vararg_buffer71)|0);
-   $371 = $4;
-   $372 = $5;
-   $373 = (($372) + 1)|0;
-   _dump_prefix($371,$373);
-   (_printf(57473,$vararg_buffer73)|0);
-   $374 = $4;
-   $375 = HEAP32[$374>>2]|0;
-   $11 = $375;
-   $376 = $11;
-   $377 = HEAP32[$376>>2]|0;
-   $378 = ($377|0)!=(0|0);
-   if ($378) {
-    $379 = $11;
-    $380 = $5;
-    $381 = (($380) + 2)|0;
-    _dump_prefix($379,$381);
-    (_printf(57479,$vararg_buffer75)|0);
-    $382 = $3;
-    $383 = $11;
-    $384 = HEAP32[$383>>2]|0;
-    $385 = $5;
-    $386 = (($385) + 3)|0;
-    _dump_recur($382,$384,$386);
-   }
-   $387 = $11;
-   $388 = ((($387)) + 4|0);
-   $389 = HEAP32[$388>>2]|0;
-   $11 = $389;
-   $390 = $11;
-   $391 = ($390|0)!=(0|0);
-   if ($391) {
-    $392 = $11;
-    $393 = HEAP32[$392>>2]|0;
-    $394 = ($393|0)!=(0|0);
-    if ($394) {
-     $395 = $11;
-     $396 = $5;
-     $397 = (($396) + 2)|0;
-     _dump_prefix($395,$397);
-     (_printf(57485,$vararg_buffer77)|0);
-     $398 = $3;
-     $399 = $11;
-     $400 = HEAP32[$399>>2]|0;
-     $401 = $5;
-     $402 = (($401) + 3)|0;
-     _mrb_parser_dump($398,$400,$402);
-    }
-    $403 = $11;
-    $404 = ((($403)) + 4|0);
-    $405 = HEAP32[$404>>2]|0;
-    $11 = $405;
-    $406 = $11;
-    $407 = ($406|0)!=(0|0);
-    if ($407) {
-     $408 = $11;
-     $409 = HEAP32[$408>>2]|0;
-     $410 = ($409|0)!=(0|0);
-     if ($410) {
-      $411 = $11;
-      $412 = $5;
-      $413 = (($412) + 2)|0;
-      _dump_prefix($411,$413);
-      (_printf(57492,$vararg_buffer79)|0);
-      $414 = $3;
-      $415 = $11;
-      $416 = HEAP32[$415>>2]|0;
-      $417 = $5;
-      $418 = (($417) + 3)|0;
-      _dump_recur($414,$416,$418);
-     }
-    }
-   }
-   $419 = $4;
-   $420 = ((($419)) + 4|0);
-   $421 = HEAP32[$420>>2]|0;
-   $4 = $421;
-   $422 = $4;
-   $423 = $5;
-   $424 = (($423) + 1)|0;
-   _dump_prefix($422,$424);
-   (_printf(57499,$vararg_buffer81)|0);
-   $425 = $3;
-   $426 = $4;
-   $427 = HEAP32[$426>>2]|0;
-   $428 = $5;
-   $429 = (($428) + 2)|0;
-   _mrb_parser_dump($425,$427,$429);
-   $430 = $4;
-   $431 = ((($430)) + 4|0);
-   $432 = HEAP32[$431>>2]|0;
-   $4 = $432;
-   $433 = $4;
-   $434 = $5;
-   $435 = (($434) + 1)|0;
-   _dump_prefix($433,$435);
-   (_printf(57504,$vararg_buffer83)|0);
-   $436 = $3;
-   $437 = $4;
-   $438 = HEAP32[$437>>2]|0;
-   $439 = $5;
-   $440 = (($439) + 2)|0;
-   _mrb_parser_dump($436,$438,$440);
-   STACKTOP = sp;return;
-   break;
-  }
-  case 66: {
-   (_printf(57546,$vararg_buffer96)|0);
-   $478 = $3;
-   $479 = $4;
-   $480 = HEAP32[$479>>2]|0;
-   $481 = $5;
-   $482 = (($481) + 1)|0;
-   _mrb_parser_dump($478,$480,$482);
-   $483 = $4;
-   $484 = $5;
-   $485 = (($484) + 1)|0;
-   _dump_prefix($483,$485);
-   $486 = $3;
-   $487 = $4;
-   $488 = ((($487)) + 4|0);
-   $489 = HEAP32[$488>>2]|0;
-   $490 = HEAP32[$489>>2]|0;
-   $491 = $490;
-   $492 = (_mrb_sym2name($486,$491)|0);
-   $493 = $4;
-   $494 = ((($493)) + 4|0);
-   $495 = HEAP32[$494>>2]|0;
-   $496 = HEAP32[$495>>2]|0;
-   $497 = $496;
-   HEAP32[$vararg_buffer98>>2] = $492;
-   $vararg_ptr101 = ((($vararg_buffer98)) + 4|0);
-   HEAP32[$vararg_ptr101>>2] = $497;
-   (_printf(57558,$vararg_buffer98)|0);
-   $498 = $4;
-   $499 = ((($498)) + 4|0);
-   $500 = HEAP32[$499>>2]|0;
-   $501 = ((($500)) + 4|0);
-   $502 = HEAP32[$501>>2]|0;
-   $503 = HEAP32[$502>>2]|0;
-   $4 = $503;
-   $504 = $4;
-   $505 = ($504|0)!=(0|0);
-   if (!($505)) {
-    STACKTOP = sp;return;
-   }
-   $506 = $4;
-   $507 = $5;
-   $508 = (($507) + 1)|0;
-   _dump_prefix($506,$508);
-   (_printf(57576,$vararg_buffer102)|0);
-   $509 = $3;
-   $510 = $4;
-   $511 = HEAP32[$510>>2]|0;
-   $512 = $5;
-   $513 = (($512) + 2)|0;
-   _dump_recur($509,$511,$513);
-   $514 = $4;
-   $515 = ((($514)) + 4|0);
-   $516 = HEAP32[$515>>2]|0;
-   $517 = ($516|0)!=(0|0);
-   if (!($517)) {
-    STACKTOP = sp;return;
-   }
-   $518 = $4;
-   $519 = $5;
-   $520 = (($519) + 1)|0;
-   _dump_prefix($518,$520);
-   (_printf(57583,$vararg_buffer104)|0);
-   $521 = $3;
-   $522 = $4;
-   $523 = ((($522)) + 4|0);
-   $524 = HEAP32[$523>>2]|0;
-   $525 = $5;
-   $526 = (($525) + 2)|0;
-   _mrb_parser_dump($521,$524,$526);
-   STACKTOP = sp;return;
-   break;
-  }
-  case 69: {
-   (_printf(57591,$vararg_buffer106)|0);
-   $527 = $3;
-   $528 = $4;
-   $529 = HEAP32[$528>>2]|0;
-   $530 = $5;
-   $531 = (($530) + 1)|0;
-   _mrb_parser_dump($527,$529,$531);
-   $532 = $3;
-   $533 = $4;
-   $534 = ((($533)) + 4|0);
-   $535 = HEAP32[$534>>2]|0;
-   $536 = $5;
-   $537 = (($536) + 1)|0;
-   _mrb_parser_dump($532,$535,$537);
-   STACKTOP = sp;return;
-   break;
-  }
-  case 70: {
-   (_printf(57603,$vararg_buffer108)|0);
-   $538 = $3;
-   $539 = $4;
-   $540 = HEAP32[$539>>2]|0;
-   $541 = $5;
-   $542 = (($541) + 1)|0;
-   _mrb_parser_dump($538,$540,$542);
-   $543 = $3;
-   $544 = $4;
-   $545 = ((($544)) + 4|0);
-   $546 = HEAP32[$545>>2]|0;
-   $547 = $5;
-   $548 = (($547) + 1)|0;
-   _mrb_parser_dump($543,$546,$548);
-   STACKTOP = sp;return;
-   break;
-  }
-  case 71: {
-   (_printf(57615,$vararg_buffer110)|0);
-   $549 = $3;
-   $550 = $4;
-   $551 = HEAP32[$550>>2]|0;
-   $552 = $5;
-   $553 = (($552) + 1)|0;
-   _mrb_parser_dump($549,$551,$553);
-   $554 = $4;
-   $555 = $5;
-   $556 = (($555) + 1)|0;
-   _dump_prefix($554,$556);
-   $557 = $3;
-   $558 = $4;
-   $559 = ((($558)) + 4|0);
-   $560 = HEAP32[$559>>2]|0;
-   $561 = $560;
-   $562 = (_mrb_sym2name($557,$561)|0);
-   HEAP32[$vararg_buffer112>>2] = $562;
-   (_printf(57629,$vararg_buffer112)|0);
-   STACKTOP = sp;return;
-   break;
-  }
-  case 72: {
-   $563 = $3;
-   $564 = $4;
-   $565 = $564;
-   $566 = (_mrb_sym2name($563,$565)|0);
-   HEAP32[$vararg_buffer115>>2] = $566;
-   (_printf(57635,$vararg_buffer115)|0);
-   STACKTOP = sp;return;
-   break;
-  }
-  case 73: {
-   (_printf(57654,$vararg_buffer118)|0);
-   $567 = $3;
-   $568 = $4;
-   $569 = $5;
-   $570 = (($569) + 1)|0;
-   _dump_recur($567,$568,$570);
-   STACKTOP = sp;return;
-   break;
-  }
-  case 74: {
-   (_printf(57667,$vararg_buffer120)|0);
-   while(1) {
-    $571 = $4;
-    $572 = ($571|0)!=(0|0);
-    if (!($572)) {
-     break;
-    }
-    $573 = $4;
-    $574 = $5;
-    $575 = (($574) + 1)|0;
-    _dump_prefix($573,$575);
-    (_printf(57679,$vararg_buffer122)|0);
-    $576 = $3;
-    $577 = $4;
-    $578 = HEAP32[$577>>2]|0;
-    $579 = HEAP32[$578>>2]|0;
-    $580 = $5;
-    $581 = (($580) + 2)|0;
-    _mrb_parser_dump($576,$579,$581);
-    $582 = $4;
-    $583 = $5;
-    $584 = (($583) + 1)|0;
-    _dump_prefix($582,$584);
-    (_printf(57685,$vararg_buffer124)|0);
-    $585 = $3;
-    $586 = $4;
-    $587 = HEAP32[$586>>2]|0;
-    $588 = ((($587)) + 4|0);
-    $589 = HEAP32[$588>>2]|0;
-    $590 = $5;
-    $591 = (($590) + 2)|0;
-    _mrb_parser_dump($585,$589,$591);
-    $592 = $4;
-    $593 = ((($592)) + 4|0);
-    $594 = HEAP32[$593>>2]|0;
-    $4 = $594;
-   }
-   STACKTOP = sp;return;
-   break;
-  }
-  case 77: {
-   (_printf(57693,$vararg_buffer126)|0);
-   $595 = $3;
-   $596 = $4;
-   $597 = $5;
-   $598 = (($597) + 1)|0;
-   _mrb_parser_dump($595,$596,$598);
-   STACKTOP = sp;return;
-   break;
-  }
-  case 78: {
-   (_printf(57706,$vararg_buffer128)|0);
-   $599 = $4;
-   $600 = $5;
-   $601 = (($600) + 1)|0;
-   _dump_prefix($599,$601);
-   (_printf(57718,$vararg_buffer130)|0);
-   $602 = $3;
-   $603 = $4;
-   $604 = HEAP32[$603>>2]|0;
-   $605 = $5;
-   $606 = (($605) + 2)|0;
-   _mrb_parser_dump($602,$604,$606);
-   $607 = $4;
-   $608 = $5;
-   $609 = (($608) + 1)|0;
-   _dump_prefix($607,$609);
-   (_printf(57724,$vararg_buffer132)|0);
-   $610 = $3;
-   $611 = $4;
-   $612 = ((($611)) + 4|0);
-   $613 = HEAP32[$612>>2]|0;
-   $614 = $5;
-   $615 = (($614) + 2)|0;
-   _mrb_parser_dump($610,$613,$615);
-   STACKTOP = sp;return;
-   break;
-  }
-  case 79: {
-   (_printf(57730,$vararg_buffer134)|0);
-   $616 = $4;
-   $617 = $5;
-   $618 = (($617) + 1)|0;
-   _dump_prefix($616,$618);
-   (_printf(57743,$vararg_buffer136)|0);
-   $619 = $4;
-   $620 = HEAP32[$619>>2]|0;
-   $14 = $620;
-   $621 = $14;
-   $622 = HEAP32[$621>>2]|0;
-   $623 = ($622|0)!=(0|0);
-   if ($623) {
-    $624 = $4;
-    $625 = $5;
-    $626 = (($625) + 2)|0;
-    _dump_prefix($624,$626);
-    (_printf(57479,$vararg_buffer138)|0);
-    $627 = $3;
-    $628 = $14;
-    $629 = HEAP32[$628>>2]|0;
-    $630 = $5;
-    $631 = (($630) + 3)|0;
-    _dump_recur($627,$629,$631);
-   }
-   $632 = $14;
-   $633 = ((($632)) + 4|0);
-   $634 = HEAP32[$633>>2]|0;
-   $14 = $634;
-   $635 = $14;
-   $636 = ($635|0)!=(0|0);
-   if ($636) {
-    $637 = $14;
-    $638 = HEAP32[$637>>2]|0;
-    $639 = ($638|0)!=(0|0);
-    do {
-     if ($639) {
-      $640 = $14;
-      $641 = $5;
-      $642 = (($641) + 2)|0;
-      _dump_prefix($640,$642);
-      (_printf(57485,$vararg_buffer140)|0);
-      $643 = $14;
-      $644 = HEAP32[$643>>2]|0;
-      $645 = ($644|0)==((-1)|0);
-      if ($645) {
-       $646 = $14;
-       $647 = $5;
-       $648 = (($647) + 2)|0;
-       _dump_prefix($646,$648);
-       (_printf(57750,$vararg_buffer142)|0);
-       break;
-      } else {
-       $649 = $3;
-       $650 = $14;
-       $651 = HEAP32[$650>>2]|0;
-       $652 = $5;
-       $653 = (($652) + 3)|0;
-       _mrb_parser_dump($649,$651,$653);
-       break;
-      }
-     }
-    } while(0);
-    $654 = $14;
-    $655 = ((($654)) + 4|0);
-    $656 = HEAP32[$655>>2]|0;
-    $14 = $656;
-    $657 = $14;
-    $658 = ($657|0)!=(0|0);
-    if ($658) {
-     $659 = $14;
-     $660 = HEAP32[$659>>2]|0;
-     $661 = ($660|0)!=(0|0);
-     if ($661) {
-      $662 = $14;
-      $663 = $5;
-      $664 = (($663) + 2)|0;
-      _dump_prefix($662,$664);
-      (_printf(57492,$vararg_buffer144)|0);
-      $665 = $3;
-      $666 = $14;
-      $667 = HEAP32[$666>>2]|0;
-      $668 = $5;
-      $669 = (($668) + 3)|0;
-      _dump_recur($665,$667,$669);
-     }
-    }
-   }
-   $670 = $4;
-   $671 = $5;
-   $672 = (($671) + 1)|0;
-   _dump_prefix($670,$672);
-   (_printf(57724,$vararg_buffer146)|0);
-   $673 = $3;
-   $674 = $4;
-   $675 = ((($674)) + 4|0);
-   $676 = HEAP32[$675>>2]|0;
-   $677 = $5;
-   $678 = (($677) + 2)|0;
-   _mrb_parser_dump($673,$676,$678);
-   STACKTOP = sp;return;
-   break;
-  }
-  case 90: {
-   (_printf(57759,$vararg_buffer148)|0);
-   $679 = $4;
-   $680 = $5;
-   $681 = (($680) + 1)|0;
-   _dump_prefix($679,$681);
-   (_printf(57718,$vararg_buffer150)|0);
-   $682 = $3;
-   $683 = $4;
-   $684 = HEAP32[$683>>2]|0;
-   $685 = $5;
-   $686 = (($685) + 2)|0;
-   _mrb_parser_dump($682,$684,$686);
-   $687 = $4;
-   $688 = ((($687)) + 4|0);
-   $689 = HEAP32[$688>>2]|0;
-   $4 = $689;
-   $690 = $4;
-   $691 = $5;
-   $692 = (($691) + 1)|0;
-   _dump_prefix($690,$692);
-   $693 = $3;
-   $694 = $4;
-   $695 = HEAP32[$694>>2]|0;
-   $696 = $695;
-   $697 = (_mrb_sym2name($693,$696)|0);
-   $698 = $4;
-   $699 = HEAP32[$698>>2]|0;
-   $700 = $699;
-   HEAP32[$vararg_buffer152>>2] = $697;
-   $vararg_ptr155 = ((($vararg_buffer152)) + 4|0);
-   HEAP32[$vararg_ptr155>>2] = $700;
-   (_printf(57774,$vararg_buffer152)|0);
-   $701 = $4;
-   $702 = ((($701)) + 4|0);
-   $703 = HEAP32[$702>>2]|0;
-   $4 = $703;
-   $704 = $3;
-   $705 = $4;
-   $706 = HEAP32[$705>>2]|0;
-   $707 = $5;
-   $708 = (($707) + 1)|0;
-   _mrb_parser_dump($704,$706,$708);
-   STACKTOP = sp;return;
-   break;
-  }
-  case 91: {
-   (_printf(57788,$vararg_buffer156)|0);
-   $709 = $4;
-   $710 = ($709|0)!=(0|0);
-   if (!($710)) {
-    STACKTOP = sp;return;
-   }
-   $711 = $4;
-   $712 = $5;
-   $713 = (($712) + 1)|0;
-   _dump_prefix($711,$713);
-   (_printf(57576,$vararg_buffer158)|0);
-   $714 = $3;
-   $715 = $4;
-   $716 = HEAP32[$715>>2]|0;
-   $717 = $5;
-   $718 = (($717) + 2)|0;
-   _dump_recur($714,$716,$718);
-   $719 = $4;
-   $720 = ((($719)) + 4|0);
-   $721 = HEAP32[$720>>2]|0;
-   $722 = ($721|0)!=(0|0);
-   if (!($722)) {
-    STACKTOP = sp;return;
-   }
-   $723 = $4;
-   $724 = $5;
-   $725 = (($724) + 1)|0;
-   _dump_prefix($723,$725);
-   (_printf(57583,$vararg_buffer160)|0);
-   $726 = $3;
-   $727 = $4;
-   $728 = ((($727)) + 4|0);
-   $729 = HEAP32[$728>>2]|0;
-   $730 = $5;
-   $731 = (($730) + 2)|0;
-   _mrb_parser_dump($726,$729,$731);
-   STACKTOP = sp;return;
-   break;
-  }
-  case 94: {
-   (_printf(57801,$vararg_buffer162)|0);
-   STACKTOP = sp;return;
-   break;
-  }
-  case 95: {
-   (_printf(57814,$vararg_buffer164)|0);
-   $732 = $3;
-   $733 = $4;
-   $734 = $5;
-   $735 = (($734) + 1)|0;
-   _mrb_parser_dump($732,$733,$735);
-   STACKTOP = sp;return;
-   break;
-  }
-  case 96: {
-   (_printf(57828,$vararg_buffer166)|0);
-   $736 = $3;
-   $737 = $4;
-   $738 = $5;
-   $739 = (($738) + 1)|0;
-   _dump_recur($736,$737,$739);
-   STACKTOP = sp;return;
-   break;
-  }
-  case 97: {
-   (_printf(57841,$vararg_buffer168)|0);
-   $740 = $3;
-   $741 = $4;
-   $742 = $5;
-   $743 = (($742) + 1)|0;
-   _mrb_parser_dump($740,$741,$743);
-   STACKTOP = sp;return;
-   break;
-  }
-  case 98: {
-   (_printf(57854,$vararg_buffer170)|0);
-   $744 = $3;
-   $745 = $4;
-   $746 = $5;
-   $747 = (($746) + 1)|0;
-   _mrb_parser_dump($744,$745,$747);
-   STACKTOP = sp;return;
-   break;
-  }
-  case 99: {
-   (_printf(57866,$vararg_buffer172)|0);
-   STACKTOP = sp;return;
-   break;
-  }
-  case 100: {
-   (_printf(57877,$vararg_buffer174)|0);
-   STACKTOP = sp;return;
-   break;
-  }
-  case 101: {
-   $748 = $3;
-   $749 = $4;
-   $750 = $749;
-   $751 = (_mrb_sym2name($748,$750)|0);
-   HEAP32[$vararg_buffer176>>2] = $751;
-   (_printf(57889,$vararg_buffer176)|0);
-   STACKTOP = sp;return;
-   break;
-  }
-  case 102: {
-   $752 = $3;
-   $753 = $4;
-   $754 = $753;
-   $755 = (_mrb_sym2name($752,$754)|0);
-   HEAP32[$vararg_buffer179>>2] = $755;
-   (_printf(57903,$vararg_buffer179)|0);
-   STACKTOP = sp;return;
-   break;
-  }
-  case 103: {
-   $756 = $3;
-   $757 = $4;
-   $758 = $757;
-   $759 = (_mrb_sym2name($756,$758)|0);
-   HEAP32[$vararg_buffer182>>2] = $759;
-   (_printf(57917,$vararg_buffer182)|0);
-   STACKTOP = sp;return;
-   break;
-  }
-  case 104: {
-   $760 = $3;
-   $761 = $4;
-   $762 = $761;
-   $763 = (_mrb_sym2name($760,$762)|0);
-   HEAP32[$vararg_buffer185>>2] = $763;
-   (_printf(57931,$vararg_buffer185)|0);
-   STACKTOP = sp;return;
-   break;
-  }
-  case 105: {
-   $764 = $3;
-   $765 = $4;
-   $766 = $765;
-   $767 = (_mrb_sym2name($764,$766)|0);
-   HEAP32[$vararg_buffer188>>2] = $767;
-   (_printf(57945,$vararg_buffer188)|0);
-   STACKTOP = sp;return;
-   break;
-  }
-  case 106: {
-   (_printf(57960,$vararg_buffer191)|0);
-   $768 = $4;
-   $769 = $5;
-   $770 = (($769) + 1)|0;
-   _dump_prefix($768,$770);
-   (_printf(57718,$vararg_buffer193)|0);
-   $771 = $3;
-   $772 = $4;
-   $773 = HEAP32[$772>>2]|0;
-   $774 = $5;
-   $775 = (($774) + 2)|0;
-   _mrb_parser_dump($771,$773,$775);
-   $776 = $4;
-   $777 = $5;
-   $778 = (($777) + 1)|0;
-   _dump_prefix($776,$778);
-   (_printf(57724,$vararg_buffer195)|0);
-   $779 = $3;
-   $780 = $4;
-   $781 = ((($780)) + 4|0);
-   $782 = HEAP32[$781>>2]|0;
-   $783 = $5;
-   $784 = (($783) + 2)|0;
-   _mrb_parser_dump($779,$782,$784);
-   STACKTOP = sp;return;
-   break;
-  }
-  case 107: {
-   $785 = $4;
-   $786 = $785;
-   HEAP32[$vararg_buffer197>>2] = $786;
-   (_printf(57973,$vararg_buffer197)|0);
-   STACKTOP = sp;return;
-   break;
-  }
-  case 108: {
-   $787 = $4;
-   $788 = $787;
-   HEAP32[$vararg_buffer200>>2] = $788;
-   (_printf(57993,$vararg_buffer200)|0);
-   STACKTOP = sp;return;
-   break;
-  }
-  case 109: {
-   $789 = $3;
-   $790 = $4;
-   $791 = $790;
-   $792 = (_mrb_sym2name($789,$791)|0);
-   HEAP32[$vararg_buffer203>>2] = $792;
-   (_printf(58012,$vararg_buffer203)|0);
-   STACKTOP = sp;return;
-   break;
-  }
-  case 110: {
-   (_printf(58025,$vararg_buffer206)|0);
-   $793 = $3;
-   $794 = $4;
-   $795 = $5;
-   $796 = (($795) + 1)|0;
-   _mrb_parser_dump($793,$794,$796);
-   STACKTOP = sp;return;
-   break;
-  }
-  case 111: {
-   $797 = $4;
-   $798 = HEAP32[$797>>2]|0;
-   $799 = $4;
-   $800 = ((($799)) + 4|0);
-   $801 = HEAP32[$800>>2]|0;
-   $802 = HEAP32[$801>>2]|0;
-   $803 = $802;
-   HEAP32[$vararg_buffer208>>2] = $798;
-   $vararg_ptr211 = ((($vararg_buffer208)) + 4|0);
-   HEAP32[$vararg_ptr211>>2] = $803;
-   (_printf(58042,$vararg_buffer208)|0);
-   STACKTOP = sp;return;
-   break;
-  }
-  case 112: {
-   $804 = $4;
-   HEAP32[$vararg_buffer212>>2] = $804;
-   (_printf(58063,$vararg_buffer212)|0);
-   STACKTOP = sp;return;
-   break;
-  }
-  case 113: {
-   (_printf(58078,$vararg_buffer215)|0);
-   $805 = $3;
-   $806 = $4;
-   $807 = $5;
-   $808 = (($807) + 1)|0;
-   _mrb_parser_dump($805,$806,$808);
-   STACKTOP = sp;return;
-   break;
-  }
-  case 114: {
-   $809 = $4;
-   $810 = HEAP32[$809>>2]|0;
-   $811 = $4;
-   $812 = ((($811)) + 4|0);
-   $813 = HEAP32[$812>>2]|0;
-   $814 = $813;
-   HEAP32[$vararg_buffer217>>2] = $810;
-   $vararg_ptr220 = ((($vararg_buffer217)) + 4|0);
-   HEAP32[$vararg_ptr220>>2] = $814;
-   (_printf(58091,$vararg_buffer217)|0);
-   STACKTOP = sp;return;
-   break;
-  }
-  case 115: {
-   (_printf(58113,$vararg_buffer221)|0);
-   $815 = $3;
-   $816 = $4;
-   $817 = $5;
-   $818 = (($817) + 1)|0;
-   _dump_recur($815,$816,$818);
-   STACKTOP = sp;return;
-   break;
-  }
-  case 116: {
-   $819 = $4;
-   $820 = HEAP32[$819>>2]|0;
-   $821 = $4;
-   $822 = ((($821)) + 4|0);
-   $823 = HEAP32[$822>>2]|0;
-   $824 = $823;
-   HEAP32[$vararg_buffer223>>2] = $820;
-   $vararg_ptr226 = ((($vararg_buffer223)) + 4|0);
-   HEAP32[$vararg_ptr226>>2] = $824;
-   (_printf(58124,$vararg_buffer223)|0);
-   STACKTOP = sp;return;
-   break;
-  }
-  case 117: {
-   (_printf(58147,$vararg_buffer227)|0);
-   $825 = $3;
-   $826 = $4;
-   $827 = $5;
-   $828 = (($827) + 1)|0;
-   _dump_recur($825,$826,$828);
-   STACKTOP = sp;return;
-   break;
-  }
-  case 118: {
-   $829 = $4;
-   $830 = HEAP32[$829>>2]|0;
-   $831 = $4;
-   $832 = ((($831)) + 4|0);
-   $833 = HEAP32[$832>>2]|0;
-   HEAP32[$vararg_buffer229>>2] = $830;
-   $vararg_ptr232 = ((($vararg_buffer229)) + 4|0);
-   HEAP32[$vararg_ptr232>>2] = $833;
-   (_printf(58159,$vararg_buffer229)|0);
-   STACKTOP = sp;return;
-   break;
-  }
-  case 119: {
-   (_printf(58177,$vararg_buffer233)|0);
-   $834 = $3;
-   $835 = $4;
-   $836 = HEAP32[$835>>2]|0;
-   $837 = $5;
-   $838 = (($837) + 1)|0;
-   _dump_recur($834,$836,$838);
-   $839 = $4;
-   $840 = $5;
-   _dump_prefix($839,$840);
-   $841 = $4;
-   $842 = ((($841)) + 4|0);
-   $843 = HEAP32[$842>>2]|0;
-   $844 = ((($843)) + 4|0);
-   $845 = HEAP32[$844>>2]|0;
-   $846 = HEAP32[$845>>2]|0;
-   HEAP32[$vararg_buffer235>>2] = $846;
-   (_printf(58189,$vararg_buffer235)|0);
-   $847 = $4;
-   $848 = $5;
-   _dump_prefix($847,$848);
-   $849 = $4;
-   $850 = ((($849)) + 4|0);
-   $851 = HEAP32[$850>>2]|0;
-   $852 = ((($851)) + 4|0);
-   $853 = HEAP32[$852>>2]|0;
-   $854 = ((($853)) + 4|0);
-   $855 = HEAP32[$854>>2]|0;
-   HEAP32[$vararg_buffer238>>2] = $855;
-   (_printf(58199,$vararg_buffer238)|0);
-   STACKTOP = sp;return;
-   break;
-  }
-  case 120: {
-   $856 = $3;
-   $857 = $4;
-   $858 = $857;
-   $859 = (_mrb_sym2name($856,$858)|0);
-   HEAP32[$vararg_buffer241>>2] = $859;
-   (_printf(58208,$vararg_buffer241)|0);
-   STACKTOP = sp;return;
-   break;
-  }
-  case 121: {
-   (_printf(58222,$vararg_buffer244)|0);
-   STACKTOP = sp;return;
-   break;
-  }
-  case 122: {
-   (_printf(58233,$vararg_buffer246)|0);
-   STACKTOP = sp;return;
-   break;
-  }
-  case 123: {
-   (_printf(58243,$vararg_buffer248)|0);
-   STACKTOP = sp;return;
-   break;
-  }
-  case 124: {
-   (_printf(58254,$vararg_buffer250)|0);
-   STACKTOP = sp;return;
-   break;
-  }
-  case 125: {
-   $860 = $3;
-   $861 = $4;
-   $862 = HEAP32[$861>>2]|0;
-   $863 = $862;
-   $864 = (_mrb_sym2name($860,$863)|0);
-   $865 = $3;
-   $866 = $4;
-   $867 = ((($866)) + 4|0);
-   $868 = HEAP32[$867>>2]|0;
-   $869 = $868;
-   $870 = (_mrb_sym2name($865,$869)|0);
-   HEAP32[$vararg_buffer252>>2] = $864;
-   $vararg_ptr255 = ((($vararg_buffer252)) + 4|0);
-   HEAP32[$vararg_ptr255>>2] = $870;
-   (_printf(58266,$vararg_buffer252)|0);
-   STACKTOP = sp;return;
-   break;
-  }
-  case 126: {
-   (_printf(58285,$vararg_buffer256)|0);
-   $871 = $4;
-   $15 = $871;
-   while(1) {
-    $872 = $15;
-    $873 = ($872|0)!=(0|0);
-    if (!($873)) {
-     break;
-    }
-    $874 = $3;
-    $875 = $15;
-    $876 = HEAP32[$875>>2]|0;
-    $877 = $876;
-    $878 = (_mrb_sym2name($874,$877)|0);
-    HEAP32[$vararg_buffer258>>2] = $878;
-    (_printf(58296,$vararg_buffer258)|0);
-    $879 = $15;
-    $880 = ((($879)) + 4|0);
-    $881 = HEAP32[$880>>2]|0;
-    $15 = $881;
-   }
-   (_printf(58300,$vararg_buffer261)|0);
-   STACKTOP = sp;return;
-   break;
-  }
-  case 130: {
-   (_printf(58303,$vararg_buffer263)|0);
-   $882 = $4;
-   $883 = HEAP32[$882>>2]|0;
-   $884 = HEAP32[$883>>2]|0;
-   $885 = ($884|0)==(0|0);
-   $886 = $4;
-   do {
-    if ($885) {
-     $887 = $5;
-     $888 = (($887) + 1)|0;
-     _dump_prefix($886,$888);
-     $889 = $3;
-     $890 = $4;
-     $891 = HEAP32[$890>>2]|0;
-     $892 = ((($891)) + 4|0);
-     $893 = HEAP32[$892>>2]|0;
-     $894 = $893;
-     $895 = (_mrb_sym2name($889,$894)|0);
-     HEAP32[$vararg_buffer265>>2] = $895;
-     (_printf(58316,$vararg_buffer265)|0);
-    } else {
-     $896 = HEAP32[$886>>2]|0;
-     $897 = HEAP32[$896>>2]|0;
-     $898 = ($897|0)==((1)|0);
-     if ($898) {
-      $899 = $4;
-      $900 = $5;
-      $901 = (($900) + 1)|0;
-      _dump_prefix($899,$901);
-      $902 = $3;
-      $903 = $4;
-      $904 = HEAP32[$903>>2]|0;
-      $905 = ((($904)) + 4|0);
-      $906 = HEAP32[$905>>2]|0;
-      $907 = $906;
-      $908 = (_mrb_sym2name($902,$907)|0);
-      HEAP32[$vararg_buffer268>>2] = $908;
-      (_printf(57629,$vararg_buffer268)|0);
-      break;
-     } else {
-      $909 = $3;
-      $910 = $4;
-      $911 = HEAP32[$910>>2]|0;
-      $912 = HEAP32[$911>>2]|0;
-      $913 = $5;
-      $914 = (($913) + 1)|0;
-      _mrb_parser_dump($909,$912,$914);
-      $915 = $4;
-      $916 = $5;
-      $917 = (($916) + 1)|0;
-      _dump_prefix($915,$917);
-      $918 = $3;
-      $919 = $4;
-      $920 = HEAP32[$919>>2]|0;
-      $921 = ((($920)) + 4|0);
-      $922 = HEAP32[$921>>2]|0;
-      $923 = $922;
-      $924 = (_mrb_sym2name($918,$923)|0);
-      HEAP32[$vararg_buffer271>>2] = $924;
-      (_printf(57629,$vararg_buffer271)|0);
-      break;
-     }
-    }
-   } while(0);
-   $925 = $4;
-   $926 = ((($925)) + 4|0);
-   $927 = HEAP32[$926>>2]|0;
-   $928 = HEAP32[$927>>2]|0;
-   $929 = ($928|0)!=(0|0);
-   if ($929) {
-    $930 = $4;
-    $931 = $5;
-    $932 = (($931) + 1)|0;
-    _dump_prefix($930,$932);
-    (_printf(58321,$vararg_buffer274)|0);
-    $933 = $3;
-    $934 = $4;
-    $935 = ((($934)) + 4|0);
-    $936 = HEAP32[$935>>2]|0;
-    $937 = HEAP32[$936>>2]|0;
-    $938 = $5;
-    $939 = (($938) + 2)|0;
-    _mrb_parser_dump($933,$937,$939);
-   }
-   $940 = $4;
-   $941 = $5;
-   $942 = (($941) + 1)|0;
-   _dump_prefix($940,$942);
-   (_printf(57194,$vararg_buffer276)|0);
-   $943 = $3;
-   $944 = $4;
-   $945 = ((($944)) + 4|0);
-   $946 = HEAP32[$945>>2]|0;
-   $947 = ((($946)) + 4|0);
-   $948 = HEAP32[$947>>2]|0;
-   $949 = HEAP32[$948>>2]|0;
-   $950 = ((($949)) + 4|0);
-   $951 = HEAP32[$950>>2]|0;
-   $952 = $5;
-   $953 = (($952) + 2)|0;
-   _mrb_parser_dump($943,$951,$953);
-   STACKTOP = sp;return;
-   break;
-  }
-  case 138: {
-   (_printf(58329,$vararg_buffer278)|0);
-   $954 = $4;
-   $955 = HEAP32[$954>>2]|0;
-   $956 = HEAP32[$955>>2]|0;
-   $957 = ($956|0)==(0|0);
-   $958 = $4;
-   do {
-    if ($957) {
-     $959 = $5;
-     $960 = (($959) + 1)|0;
-     _dump_prefix($958,$960);
-     $961 = $3;
-     $962 = $4;
-     $963 = HEAP32[$962>>2]|0;
-     $964 = ((($963)) + 4|0);
-     $965 = HEAP32[$964>>2]|0;
-     $966 = $965;
-     $967 = (_mrb_sym2name($961,$966)|0);
-     HEAP32[$vararg_buffer280>>2] = $967;
-     (_printf(58316,$vararg_buffer280)|0);
-    } else {
-     $968 = HEAP32[$958>>2]|0;
-     $969 = HEAP32[$968>>2]|0;
-     $970 = ($969|0)==((1)|0);
-     if ($970) {
-      $971 = $4;
-      $972 = $5;
-      $973 = (($972) + 1)|0;
-      _dump_prefix($971,$973);
-      $974 = $3;
-      $975 = $4;
-      $976 = HEAP32[$975>>2]|0;
-      $977 = ((($976)) + 4|0);
-      $978 = HEAP32[$977>>2]|0;
-      $979 = $978;
-      $980 = (_mrb_sym2name($974,$979)|0);
-      HEAP32[$vararg_buffer283>>2] = $980;
-      (_printf(57629,$vararg_buffer283)|0);
-      break;
-     } else {
-      $981 = $3;
-      $982 = $4;
-      $983 = HEAP32[$982>>2]|0;
-      $984 = HEAP32[$983>>2]|0;
-      $985 = $5;
-      $986 = (($985) + 1)|0;
-      _mrb_parser_dump($981,$984,$986);
-      $987 = $4;
-      $988 = $5;
-      $989 = (($988) + 1)|0;
-      _dump_prefix($987,$989);
-      $990 = $3;
-      $991 = $4;
-      $992 = HEAP32[$991>>2]|0;
-      $993 = ((($992)) + 4|0);
-      $994 = HEAP32[$993>>2]|0;
-      $995 = $994;
-      $996 = (_mrb_sym2name($990,$995)|0);
-      HEAP32[$vararg_buffer286>>2] = $996;
-      (_printf(57629,$vararg_buffer286)|0);
-      break;
-     }
-    }
-   } while(0);
-   $997 = $4;
-   $998 = $5;
-   $999 = (($998) + 1)|0;
-   _dump_prefix($997,$999);
-   (_printf(57194,$vararg_buffer289)|0);
-   $1000 = $3;
-   $1001 = $4;
-   $1002 = ((($1001)) + 4|0);
-   $1003 = HEAP32[$1002>>2]|0;
-   $1004 = HEAP32[$1003>>2]|0;
-   $1005 = ((($1004)) + 4|0);
-   $1006 = HEAP32[$1005>>2]|0;
-   $1007 = $5;
-   $1008 = (($1007) + 2)|0;
-   _mrb_parser_dump($1000,$1006,$1008);
-   STACKTOP = sp;return;
-   break;
-  }
-  case 144: {
-   (_printf(58343,$vararg_buffer291)|0);
-   $1009 = $3;
-   $1010 = $4;
-   $1011 = HEAP32[$1010>>2]|0;
-   $1012 = $5;
-   $1013 = (($1012) + 1)|0;
-   _mrb_parser_dump($1009,$1011,$1013);
-   $1014 = $4;
-   $1015 = $5;
-   $1016 = (($1015) + 1)|0;
-   _dump_prefix($1014,$1016);
-   (_printf(57194,$vararg_buffer293)|0);
-   $1017 = $3;
-   $1018 = $4;
-   $1019 = ((($1018)) + 4|0);
-   $1020 = HEAP32[$1019>>2]|0;
-   $1021 = HEAP32[$1020>>2]|0;
-   $1022 = ((($1021)) + 4|0);
-   $1023 = HEAP32[$1022>>2]|0;
-   $1024 = $5;
-   $1025 = (($1024) + 2)|0;
-   _mrb_parser_dump($1017,$1023,$1025);
-   STACKTOP = sp;return;
-   break;
-  }
-  case 145: {
-   (_printf(58357,$vararg_buffer295)|0);
-   $1026 = $4;
-   $1027 = $5;
-   $1028 = (($1027) + 1)|0;
-   _dump_prefix($1026,$1028);
-   $1029 = $3;
-   $1030 = $4;
-   $1031 = HEAP32[$1030>>2]|0;
-   $1032 = $1031;
-   $1033 = (_mrb_sym2name($1029,$1032)|0);
-   HEAP32[$vararg_buffer297>>2] = $1033;
-   (_printf(58368,$vararg_buffer297)|0);
-   $1034 = $4;
-   $1035 = ((($1034)) + 4|0);
-   $1036 = HEAP32[$1035>>2]|0;
-   $4 = $1036;
-   $1037 = $4;
-   $1038 = HEAP32[$1037>>2]|0;
-   $16 = $1038;
-   $17 = 1;
-   $1039 = $16;
-   $1040 = ($1039|0)!=(0|0);
-   do {
-    if ($1040) {
-     $1041 = $16;
-     $1042 = HEAP32[$1041>>2]|0;
-     $1043 = ($1042|0)!=(0|0);
-     if (!($1043)) {
-      $1044 = $16;
-      $1045 = ((($1044)) + 4|0);
-      $1046 = HEAP32[$1045>>2]|0;
-      $1047 = ($1046|0)!=(0|0);
-      if (!($1047)) {
-       break;
-      }
-     }
-     $1048 = $16;
-     $1049 = $5;
-     $1050 = (($1049) + 1)|0;
-     _dump_prefix($1048,$1050);
-     (_printf(57522,$vararg_buffer300)|0);
-     $1051 = $16;
-     $1052 = $5;
-     $1053 = (($1052) + 2)|0;
-     _dump_prefix($1051,$1053);
-     while(1) {
-      $1054 = $16;
-      $1055 = ($1054|0)!=(0|0);
-      if (!($1055)) {
-       break;
-      }
-      $1056 = $16;
-      $1057 = HEAP32[$1056>>2]|0;
-      $1058 = ($1057|0)!=(0|0);
-      if ($1058) {
-       $1059 = $17;
-       $1060 = ($1059<<24>>24)!=(0);
-       if (!($1060)) {
-        (_printf(57540,$vararg_buffer302)|0);
-       }
-       $1061 = $3;
-       $1062 = $16;
-       $1063 = HEAP32[$1062>>2]|0;
-       $1064 = $1063;
-       $1065 = (_mrb_sym2name($1061,$1064)|0);
-       HEAP32[$vararg_buffer304>>2] = $1065;
-       (_printf(57543,$vararg_buffer304)|0);
-       $17 = 0;
-      }
-      $1066 = $16;
-      $1067 = ((($1066)) + 4|0);
-      $1068 = HEAP32[$1067>>2]|0;
-      $16 = $1068;
-     }
-     (_printf(67789,$vararg_buffer307)|0);
-    }
-   } while(0);
-   $1069 = $4;
-   $1070 = ((($1069)) + 4|0);
-   $1071 = HEAP32[$1070>>2]|0;
-   $4 = $1071;
-   $1072 = $4;
-   $1073 = HEAP32[$1072>>2]|0;
-   $1074 = ($1073|0)!=(0|0);
-   if ($1074) {
-    $1075 = $4;
-    $1076 = HEAP32[$1075>>2]|0;
-    $18 = $1076;
-    $1077 = $18;
-    $1078 = HEAP32[$1077>>2]|0;
-    $1079 = ($1078|0)!=(0|0);
-    if ($1079) {
-     $1080 = $18;
-     $1081 = $5;
-     $1082 = (($1081) + 1)|0;
-     _dump_prefix($1080,$1082);
-     (_printf(57294,$vararg_buffer309)|0);
-     $1083 = $3;
-     $1084 = $18;
-     $1085 = HEAP32[$1084>>2]|0;
-     $1086 = $5;
-     $1087 = (($1086) + 2)|0;
-     _dump_recur($1083,$1085,$1087);
-    }
-    $1088 = $18;
-    $1089 = ((($1088)) + 4|0);
-    $1090 = HEAP32[$1089>>2]|0;
-    $18 = $1090;
-    $1091 = $18;
-    $1092 = HEAP32[$1091>>2]|0;
-    $1093 = ($1092|0)!=(0|0);
-    L255: do {
-     if ($1093) {
-      $1094 = $18;
-      $1095 = $5;
-      $1096 = (($1095) + 1)|0;
-      _dump_prefix($1094,$1096);
-      (_printf(57311,$vararg_buffer311)|0);
-      $1097 = $18;
-      $1098 = HEAP32[$1097>>2]|0;
-      $19 = $1098;
-      while(1) {
-       $1099 = $19;
-       $1100 = ($1099|0)!=(0|0);
-       if (!($1100)) {
-        break L255;
-       }
-       $1101 = $19;
-       $1102 = $5;
-       $1103 = (($1102) + 2)|0;
-       _dump_prefix($1101,$1103);
-       $1104 = $3;
-       $1105 = $19;
-       $1106 = HEAP32[$1105>>2]|0;
-       $1107 = HEAP32[$1106>>2]|0;
-       $1108 = $1107;
-       $1109 = (_mrb_sym2name($1104,$1108)|0);
-       HEAP32[$vararg_buffer313>>2] = $1109;
-       (_printf(57327,$vararg_buffer313)|0);
-       $1110 = $3;
-       $1111 = $19;
-       $1112 = HEAP32[$1111>>2]|0;
-       $1113 = ((($1112)) + 4|0);
-       $1114 = HEAP32[$1113>>2]|0;
-       _mrb_parser_dump($1110,$1114,0);
-       $1115 = $19;
-       $1116 = ((($1115)) + 4|0);
-       $1117 = HEAP32[$1116>>2]|0;
-       $19 = $1117;
-      }
-     }
-    } while(0);
-    $1118 = $18;
-    $1119 = ((($1118)) + 4|0);
-    $1120 = HEAP32[$1119>>2]|0;
-    $18 = $1120;
-    $1121 = $18;
-    $1122 = HEAP32[$1121>>2]|0;
-    $1123 = ($1122|0)!=(0|0);
-    if ($1123) {
-     $1124 = $18;
-     $1125 = $5;
-     $1126 = (($1125) + 1)|0;
-     _dump_prefix($1124,$1126);
-     $1127 = $3;
-     $1128 = $18;
-     $1129 = HEAP32[$1128>>2]|0;
-     $1130 = $1129;
-     $1131 = (_mrb_sym2name($1127,$1130)|0);
-     HEAP32[$vararg_buffer316>>2] = $1131;
-     (_printf(57331,$vararg_buffer316)|0);
-    }
-    $1132 = $18;
-    $1133 = ((($1132)) + 4|0);
-    $1134 = HEAP32[$1133>>2]|0;
-    $18 = $1134;
-    $1135 = $18;
-    $1136 = HEAP32[$1135>>2]|0;
-    $1137 = ($1136|0)!=(0|0);
-    if ($1137) {
-     $1138 = $18;
-     $1139 = $5;
-     $1140 = (($1139) + 1)|0;
-     _dump_prefix($1138,$1140);
-     (_printf(57341,$vararg_buffer319)|0);
-     $1141 = $3;
-     $1142 = $18;
-     $1143 = HEAP32[$1142>>2]|0;
-     $1144 = $5;
-     $1145 = (($1144) + 2)|0;
-     _dump_recur($1141,$1143,$1145);
-    }
-    $1146 = $18;
-    $1147 = ((($1146)) + 4|0);
-    $1148 = HEAP32[$1147>>2]|0;
-    $1149 = ($1148|0)!=(0|0);
-    if ($1149) {
-     $1150 = $18;
-     $1151 = $5;
-     $1152 = (($1151) + 1)|0;
-     _dump_prefix($1150,$1152);
-     $1153 = $3;
-     $1154 = $18;
-     $1155 = ((($1154)) + 4|0);
-     $1156 = HEAP32[$1155>>2]|0;
-     $1157 = $1156;
-     $1158 = (_mrb_sym2name($1153,$1157)|0);
-     HEAP32[$vararg_buffer321>>2] = $1158;
-     (_printf(57363,$vararg_buffer321)|0);
-    }
-   }
-   $1159 = $3;
-   $1160 = $4;
-   $1161 = ((($1160)) + 4|0);
-   $1162 = HEAP32[$1161>>2]|0;
-   $1163 = HEAP32[$1162>>2]|0;
-   $1164 = $5;
-   $1165 = (($1164) + 1)|0;
-   _mrb_parser_dump($1159,$1163,$1165);
-   STACKTOP = sp;return;
-   break;
-  }
-  case 170: {
-   (_printf(58372,$vararg_buffer324)|0);
-   $1166 = $3;
-   $1167 = $4;
-   $1168 = HEAP32[$1167>>2]|0;
-   $1169 = $5;
-   $1170 = (($1169) + 1)|0;
-   _mrb_parser_dump($1166,$1168,$1170);
-   $1171 = $4;
-   $1172 = ((($1171)) + 4|0);
-   $1173 = HEAP32[$1172>>2]|0;
-   $4 = $1173;
-   $1174 = $4;
-   $1175 = $5;
-   $1176 = (($1175) + 1)|0;
-   _dump_prefix($1174,$1176);
-   $1177 = $3;
-   $1178 = $4;
-   $1179 = HEAP32[$1178>>2]|0;
-   $1180 = $1179;
-   $1181 = (_mrb_sym2name($1177,$1180)|0);
-   HEAP32[$vararg_buffer326>>2] = $1181;
-   (_printf(58316,$vararg_buffer326)|0);
-   $1182 = $4;
-   $1183 = ((($1182)) + 4|0);
-   $1184 = HEAP32[$1183>>2]|0;
-   $1185 = ((($1184)) + 4|0);
-   $1186 = HEAP32[$1185>>2]|0;
-   $4 = $1186;
-   $1187 = $4;
-   $1188 = HEAP32[$1187>>2]|0;
-   $1189 = ($1188|0)!=(0|0);
-   if ($1189) {
-    $1190 = $4;
-    $1191 = HEAP32[$1190>>2]|0;
-    $20 = $1191;
-    $1192 = $20;
-    $1193 = HEAP32[$1192>>2]|0;
-    $1194 = ($1193|0)!=(0|0);
-    if ($1194) {
-     $1195 = $20;
-     $1196 = $5;
-     $1197 = (($1196) + 1)|0;
-     _dump_prefix($1195,$1197);
-     (_printf(57294,$vararg_buffer329)|0);
-     $1198 = $3;
-     $1199 = $20;
-     $1200 = HEAP32[$1199>>2]|0;
-     $1201 = $5;
-     $1202 = (($1201) + 2)|0;
-     _dump_recur($1198,$1200,$1202);
-    }
-    $1203 = $20;
-    $1204 = ((($1203)) + 4|0);
-    $1205 = HEAP32[$1204>>2]|0;
-    $20 = $1205;
-    $1206 = $20;
-    $1207 = HEAP32[$1206>>2]|0;
-    $1208 = ($1207|0)!=(0|0);
-    L276: do {
-     if ($1208) {
-      $1209 = $20;
-      $1210 = $5;
-      $1211 = (($1210) + 1)|0;
-      _dump_prefix($1209,$1211);
-      (_printf(57311,$vararg_buffer331)|0);
-      $1212 = $20;
-      $1213 = HEAP32[$1212>>2]|0;
-      $21 = $1213;
-      while(1) {
-       $1214 = $21;
-       $1215 = ($1214|0)!=(0|0);
-       if (!($1215)) {
-        break L276;
-       }
-       $1216 = $21;
-       $1217 = $5;
-       $1218 = (($1217) + 2)|0;
-       _dump_prefix($1216,$1218);
-       $1219 = $3;
-       $1220 = $21;
-       $1221 = HEAP32[$1220>>2]|0;
-       $1222 = HEAP32[$1221>>2]|0;
-       $1223 = $1222;
-       $1224 = (_mrb_sym2name($1219,$1223)|0);
-       HEAP32[$vararg_buffer333>>2] = $1224;
-       (_printf(57327,$vararg_buffer333)|0);
-       $1225 = $3;
-       $1226 = $21;
-       $1227 = HEAP32[$1226>>2]|0;
-       $1228 = ((($1227)) + 4|0);
-       $1229 = HEAP32[$1228>>2]|0;
-       _mrb_parser_dump($1225,$1229,0);
-       $1230 = $21;
-       $1231 = ((($1230)) + 4|0);
-       $1232 = HEAP32[$1231>>2]|0;
-       $21 = $1232;
-      }
-     }
-    } while(0);
-    $1233 = $20;
-    $1234 = ((($1233)) + 4|0);
-    $1235 = HEAP32[$1234>>2]|0;
-    $20 = $1235;
-    $1236 = $20;
-    $1237 = HEAP32[$1236>>2]|0;
-    $1238 = ($1237|0)!=(0|0);
-    if ($1238) {
-     $1239 = $20;
-     $1240 = $5;
-     $1241 = (($1240) + 1)|0;
-     _dump_prefix($1239,$1241);
-     $1242 = $3;
-     $1243 = $20;
-     $1244 = HEAP32[$1243>>2]|0;
-     $1245 = $1244;
-     $1246 = (_mrb_sym2name($1242,$1245)|0);
-     HEAP32[$vararg_buffer336>>2] = $1246;
-     (_printf(57331,$vararg_buffer336)|0);
-    }
-    $1247 = $20;
-    $1248 = ((($1247)) + 4|0);
-    $1249 = HEAP32[$1248>>2]|0;
-    $20 = $1249;
-    $1250 = $20;
-    $1251 = HEAP32[$1250>>2]|0;
-    $1252 = ($1251|0)!=(0|0);
-    if ($1252) {
-     $1253 = $20;
-     $1254 = $5;
-     $1255 = (($1254) + 1)|0;
-     _dump_prefix($1253,$1255);
-     (_printf(57341,$vararg_buffer339)|0);
-     $1256 = $3;
-     $1257 = $20;
-     $1258 = HEAP32[$1257>>2]|0;
-     $1259 = $5;
-     $1260 = (($1259) + 2)|0;
-     _dump_recur($1256,$1258,$1260);
-    }
-    $1261 = $20;
-    $1262 = ((($1261)) + 4|0);
-    $1263 = HEAP32[$1262>>2]|0;
-    $20 = $1263;
-    $1264 = $20;
-    $1265 = ($1264|0)!=(0|0);
-    if ($1265) {
-     $1266 = $20;
-     $1267 = $5;
-     $1268 = (($1267) + 1)|0;
-     _dump_prefix($1266,$1268);
-     $1269 = $3;
-     $1270 = $20;
-     $1271 = $1270;
-     $1272 = (_mrb_sym2name($1269,$1271)|0);
-     HEAP32[$vararg_buffer341>>2] = $1272;
-     (_printf(57363,$vararg_buffer341)|0);
-    }
-   }
-   $1273 = $4;
-   $1274 = ((($1273)) + 4|0);
-   $1275 = HEAP32[$1274>>2]|0;
-   $4 = $1275;
-   $1276 = $3;
-   $1277 = $4;
-   $1278 = HEAP32[$1277>>2]|0;
-   $1279 = $5;
-   $1280 = (($1279) + 1)|0;
-   _mrb_parser_dump($1276,$1278,$1280);
-   STACKTOP = sp;return;
-   break;
-  }
-  case 184: {
-   (_printf(58384,$vararg_buffer344)|0);
-   $1281 = $3;
-   $1282 = $4;
-   $1283 = $5;
-   $1284 = (($1283) + 1)|0;
-   _mrb_parser_dump($1281,$1282,$1284);
-   STACKTOP = sp;return;
-   break;
-  }
-  case 185: {
-   (_printf(58399,$vararg_buffer346)|0);
-   $1285 = $3;
-   $1286 = $4;
-   $1287 = ((($1286)) + 16|0);
-   $1288 = HEAP32[$1287>>2]|0;
-   $1289 = $5;
-   $1290 = (($1289) + 1)|0;
-   _mrb_parser_dump($1285,$1288,$1290);
-   STACKTOP = sp;return;
-   break;
-  }
-  case 186: {
-   $1291 = $6;
-   $1292 = $6;
-   HEAP32[$vararg_buffer348>>2] = $1291;
-   $vararg_ptr351 = ((($vararg_buffer348)) + 4|0);
-   HEAP32[$vararg_ptr351>>2] = $1292;
-   (_printf(58414,$vararg_buffer348)|0);
-   STACKTOP = sp;return;
-   break;
-  }
- }
- (_printf(57281,$vararg_buffer23)|0);
- $144 = $4;
- $145 = ((($144)) + 4|0);
- $146 = HEAP32[$145>>2]|0;
- $4 = $146;
- $147 = $4;
- $148 = HEAP32[$147>>2]|0;
- $149 = ($148|0)!=(0|0);
- if ($149) {
-  $150 = $4;
-  $151 = HEAP32[$150>>2]|0;
-  $9 = $151;
-  $152 = $9;
-  $153 = HEAP32[$152>>2]|0;
-  $154 = ($153|0)!=(0|0);
-  if ($154) {
-   $155 = $9;
-   $156 = $5;
-   $157 = (($156) + 1)|0;
-   _dump_prefix($155,$157);
-   (_printf(57294,$vararg_buffer25)|0);
-   $158 = $3;
-   $159 = $9;
-   $160 = HEAP32[$159>>2]|0;
-   $161 = $5;
-   $162 = (($161) + 2)|0;
-   _dump_recur($158,$160,$162);
-  }
-  $163 = $9;
-  $164 = ((($163)) + 4|0);
-  $165 = HEAP32[$164>>2]|0;
-  $9 = $165;
-  $166 = $9;
-  $167 = HEAP32[$166>>2]|0;
-  $168 = ($167|0)!=(0|0);
-  L301: do {
-   if ($168) {
-    $169 = $9;
-    $170 = $5;
-    $171 = (($170) + 1)|0;
-    _dump_prefix($169,$171);
-    (_printf(57311,$vararg_buffer27)|0);
-    $172 = $9;
-    $173 = HEAP32[$172>>2]|0;
-    $10 = $173;
-    while(1) {
-     $174 = $10;
-     $175 = ($174|0)!=(0|0);
-     if (!($175)) {
-      break L301;
-     }
-     $176 = $10;
-     $177 = $5;
-     $178 = (($177) + 2)|0;
-     _dump_prefix($176,$178);
-     $179 = $3;
-     $180 = $10;
-     $181 = HEAP32[$180>>2]|0;
-     $182 = HEAP32[$181>>2]|0;
-     $183 = $182;
-     $184 = (_mrb_sym2name($179,$183)|0);
-     HEAP32[$vararg_buffer29>>2] = $184;
-     (_printf(57327,$vararg_buffer29)|0);
-     $185 = $3;
-     $186 = $10;
-     $187 = HEAP32[$186>>2]|0;
-     $188 = ((($187)) + 4|0);
-     $189 = HEAP32[$188>>2]|0;
-     _mrb_parser_dump($185,$189,0);
-     $190 = $10;
-     $191 = ((($190)) + 4|0);
-     $192 = HEAP32[$191>>2]|0;
-     $10 = $192;
-    }
-   }
-  } while(0);
-  $193 = $9;
-  $194 = ((($193)) + 4|0);
-  $195 = HEAP32[$194>>2]|0;
-  $9 = $195;
-  $196 = $9;
-  $197 = HEAP32[$196>>2]|0;
-  $198 = ($197|0)!=(0|0);
-  if ($198) {
-   $199 = $9;
-   $200 = $5;
-   $201 = (($200) + 1)|0;
-   _dump_prefix($199,$201);
-   $202 = $3;
-   $203 = $9;
-   $204 = HEAP32[$203>>2]|0;
-   $205 = $204;
-   $206 = (_mrb_sym2name($202,$205)|0);
-   HEAP32[$vararg_buffer31>>2] = $206;
-   (_printf(57331,$vararg_buffer31)|0);
-  }
-  $207 = $9;
-  $208 = ((($207)) + 4|0);
-  $209 = HEAP32[$208>>2]|0;
-  $9 = $209;
-  $210 = $9;
-  $211 = HEAP32[$210>>2]|0;
-  $212 = ($211|0)!=(0|0);
-  if ($212) {
-   $213 = $9;
-   $214 = $5;
-   $215 = (($214) + 1)|0;
-   _dump_prefix($213,$215);
-   (_printf(57341,$vararg_buffer34)|0);
-   $216 = $3;
-   $217 = $9;
-   $218 = HEAP32[$217>>2]|0;
-   $219 = $5;
-   $220 = (($219) + 2)|0;
-   _dump_recur($216,$218,$220);
-  }
-  $221 = $9;
-  $222 = ((($221)) + 4|0);
-  $223 = HEAP32[$222>>2]|0;
-  $9 = $223;
-  $224 = $9;
-  $225 = ($224|0)!=(0|0);
-  if ($225) {
-   $226 = $9;
-   $227 = $5;
-   $228 = (($227) + 1)|0;
-   _dump_prefix($226,$228);
-   $229 = $3;
-   $230 = $9;
-   $231 = $230;
-   $232 = (_mrb_sym2name($229,$231)|0);
-   HEAP32[$vararg_buffer36>>2] = $232;
-   (_printf(57363,$vararg_buffer36)|0);
-  }
- }
- $233 = $4;
- $234 = $5;
- $235 = (($234) + 1)|0;
- _dump_prefix($233,$235);
- (_printf(57194,$vararg_buffer39)|0);
- $236 = $3;
- $237 = $4;
- $238 = ((($237)) + 4|0);
- $239 = HEAP32[$238>>2]|0;
- $240 = HEAP32[$239>>2]|0;
- $241 = $5;
- $242 = (($241) + 2)|0;
- _mrb_parser_dump($236,$240,$242);
- STACKTOP = sp;return;
-}
-function _yyerror($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;
- var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0;
- var $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0;
- var $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, $vararg_buffer4 = 0, $vararg_ptr1 = 0, $vararg_ptr2 = 0, $vararg_ptr3 = 0;
- var $vararg_ptr7 = 0, $vararg_ptr8 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);
- $vararg_buffer4 = sp + 16|0;
- $vararg_buffer = sp;
- $2 = $0;
- $3 = $1;
- $6 = $2;
- $7 = ((($6)) + 1148|0);
- $8 = HEAP8[$7>>0]|0;
- $9 = ($8&255) >>> 1;
- $10 = $9 & 1;
- $11 = ($10<<24>>24)!=(0);
- $12 = $2;
- if ($11) {
-  $33 = ((($12)) + 1136|0);
-  $34 = HEAP32[$33>>2]|0;
-  $35 = ($34>>>0)<(10);
-  if (!($35)) {
-   $73 = $2;
-   $74 = ((($73)) + 1136|0);
-   $75 = HEAP32[$74>>2]|0;
-   $76 = (($75) + 1)|0;
-   HEAP32[$74>>2] = $76;
-   STACKTOP = sp;return;
-  }
-  $36 = $3;
-  $37 = (_strlen($36)|0);
-  $5 = $37;
-  $38 = $2;
-  $39 = $5;
-  $40 = (($39) + 1)|0;
-  $41 = (_parser_palloc($38,$40)|0);
-  $4 = $41;
-  $42 = $4;
-  $43 = $3;
-  $44 = $5;
-  $45 = (($44) + 1)|0;
-  _memcpy(($42|0),($43|0),($45|0))|0;
-  $46 = $4;
-  $47 = $2;
-  $48 = ((($47)) + 1152|0);
-  $49 = $2;
-  $50 = ((($49)) + 1136|0);
-  $51 = HEAP32[$50>>2]|0;
-  $52 = (($48) + (($51*12)|0)|0);
-  $53 = ((($52)) + 8|0);
-  HEAP32[$53>>2] = $46;
-  $54 = $2;
-  $55 = ((($54)) + 32|0);
-  $56 = HEAP32[$55>>2]|0;
-  $57 = $2;
-  $58 = ((($57)) + 1152|0);
-  $59 = $2;
-  $60 = ((($59)) + 1136|0);
-  $61 = HEAP32[$60>>2]|0;
-  $62 = (($58) + (($61*12)|0)|0);
-  HEAP32[$62>>2] = $56;
-  $63 = $2;
-  $64 = ((($63)) + 36|0);
-  $65 = HEAP32[$64>>2]|0;
-  $66 = $2;
-  $67 = ((($66)) + 1152|0);
-  $68 = $2;
-  $69 = ((($68)) + 1136|0);
-  $70 = HEAP32[$69>>2]|0;
-  $71 = (($67) + (($70*12)|0)|0);
-  $72 = ((($71)) + 4|0);
-  HEAP32[$72>>2] = $65;
-  $73 = $2;
-  $74 = ((($73)) + 1136|0);
-  $75 = HEAP32[$74>>2]|0;
-  $76 = (($75) + 1)|0;
-  HEAP32[$74>>2] = $76;
-  STACKTOP = sp;return;
- }
- $13 = ((($12)) + 28|0);
- $14 = HEAP32[$13>>2]|0;
- $15 = ($14|0)!=(0|0);
- $16 = HEAP32[637]|0;
- $17 = $2;
- if ($15) {
-  $18 = ((($17)) + 28|0);
-  $19 = HEAP32[$18>>2]|0;
-  $20 = $2;
-  $21 = ((($20)) + 32|0);
-  $22 = HEAP32[$21>>2]|0;
-  $23 = $2;
-  $24 = ((($23)) + 36|0);
-  $25 = HEAP32[$24>>2]|0;
-  $26 = $3;
-  HEAP32[$vararg_buffer>>2] = $19;
-  $vararg_ptr1 = ((($vararg_buffer)) + 4|0);
-  HEAP32[$vararg_ptr1>>2] = $22;
-  $vararg_ptr2 = ((($vararg_buffer)) + 8|0);
-  HEAP32[$vararg_ptr2>>2] = $25;
-  $vararg_ptr3 = ((($vararg_buffer)) + 12|0);
-  HEAP32[$vararg_ptr3>>2] = $26;
-  (_fprintf($16,57137,$vararg_buffer)|0);
-  $73 = $2;
-  $74 = ((($73)) + 1136|0);
-  $75 = HEAP32[$74>>2]|0;
-  $76 = (($75) + 1)|0;
-  HEAP32[$74>>2] = $76;
-  STACKTOP = sp;return;
- } else {
-  $27 = ((($17)) + 32|0);
-  $28 = HEAP32[$27>>2]|0;
-  $29 = $2;
-  $30 = ((($29)) + 36|0);
-  $31 = HEAP32[$30>>2]|0;
-  $32 = $3;
-  HEAP32[$vararg_buffer4>>2] = $28;
-  $vararg_ptr7 = ((($vararg_buffer4)) + 4|0);
-  HEAP32[$vararg_ptr7>>2] = $31;
-  $vararg_ptr8 = ((($vararg_buffer4)) + 8|0);
-  HEAP32[$vararg_ptr8>>2] = $32;
-  (_fprintf($16,57151,$vararg_buffer4)|0);
-  $73 = $2;
-  $74 = ((($73)) + 1136|0);
-  $75 = HEAP32[$74>>2]|0;
-  $76 = (($75) + 1)|0;
-  HEAP32[$74>>2] = $76;
-  STACKTOP = sp;return;
- }
-}
-function _parser_palloc($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $5 = $2;
- $6 = ((($5)) + 4|0);
- $7 = HEAP32[$6>>2]|0;
- $8 = $3;
- $9 = (_mrb_pool_alloc($7,$8)|0);
- $4 = $9;
- $10 = $4;
- $11 = ($10|0)!=(0|0);
- if ($11) {
-  $15 = $4;
-  STACKTOP = sp;return ($15|0);
- } else {
-  $12 = $2;
-  $13 = ((($12)) + 1404|0);
-  $14 = HEAP32[$13>>2]|0;
-  _longjmp(($14|0),1);
-  // unreachable;
- }
- return (0)|0;
-}
-function _dump_prefix($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $vararg_buffer = sp;
- $2 = $0;
- $3 = $1;
- $4 = $2;
- $5 = ((($4)) + 8|0);
- $6 = HEAP16[$5>>1]|0;
- $7 = $6&65535;
- HEAP32[$vararg_buffer>>2] = $7;
- (_printf(58436,$vararg_buffer)|0);
- while(1) {
-  $8 = $3;
-  $9 = (($8) + -1)|0;
-  $3 = $9;
-  $10 = ($8|0)!=(0);
-  if (!($10)) {
-   break;
-  }
-  $11 = HEAP32[762]|0;
-  (_putc(32,$11)|0);
-  $12 = HEAP32[762]|0;
-  (_putc(32,$12)|0);
- }
- STACKTOP = sp;return;
-}
-function _dump_recur($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $0;
- $4 = $1;
- $5 = $2;
- while(1) {
-  $6 = $4;
-  $7 = ($6|0)!=(0|0);
-  if (!($7)) {
-   break;
-  }
-  $8 = $3;
-  $9 = $4;
-  $10 = HEAP32[$9>>2]|0;
-  $11 = $5;
-  _mrb_parser_dump($8,$10,$11);
-  $12 = $4;
-  $13 = ((($12)) + 4|0);
-  $14 = HEAP32[$13>>2]|0;
-  $4 = $14;
- }
- STACKTOP = sp;return;
-}
-function _list1_gen($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $4 = $2;
- $5 = $3;
- $6 = (_cons_gen($4,$5,0)|0);
- STACKTOP = sp;return ($6|0);
-}
-function _cons_gen($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;
- var $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $0;
- $4 = $1;
- $5 = $2;
- $7 = $3;
- $8 = ((($7)) + 8|0);
- $9 = HEAP32[$8>>2]|0;
- $10 = ($9|0)!=(0|0);
- $11 = $3;
- if ($10) {
-  $12 = ((($11)) + 8|0);
-  $13 = HEAP32[$12>>2]|0;
-  $6 = $13;
-  $14 = $3;
-  $15 = ((($14)) + 8|0);
-  $16 = HEAP32[$15>>2]|0;
-  $17 = ((($16)) + 4|0);
-  $18 = HEAP32[$17>>2]|0;
-  $19 = $3;
-  $20 = ((($19)) + 8|0);
-  HEAP32[$20>>2] = $18;
- } else {
-  $21 = (_parser_palloc($11,12)|0);
-  $6 = $21;
- }
- $22 = $4;
- $23 = $6;
- HEAP32[$23>>2] = $22;
- $24 = $5;
- $25 = $6;
- $26 = ((($25)) + 4|0);
- HEAP32[$26>>2] = $24;
- $27 = $3;
- $28 = ((($27)) + 32|0);
- $29 = HEAP32[$28>>2]|0;
- $30 = $29&65535;
- $31 = $6;
- $32 = ((($31)) + 8|0);
- HEAP16[$32>>1] = $30;
- $33 = $3;
- $34 = ((($33)) + 1400|0);
- $35 = HEAP32[$34>>2]|0;
- $36 = $35&65535;
- $37 = $6;
- $38 = ((($37)) + 10|0);
- HEAP16[$38>>1] = $36;
- $39 = $6;
- STACKTOP = sp;return ($39|0);
-}
-function _yylex($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $4 = $2;
- $5 = $3;
- $6 = ((($5)) + 1132|0);
- HEAP32[$6>>2] = $4;
- $7 = $3;
- $8 = (_parser_yylex($7)|0);
- STACKTOP = sp;return ($8|0);
-}
-function _new_scope($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $4 = $2;
- $5 = $2;
- $6 = $2;
- $7 = (_locals_node($6)|0);
- $8 = $3;
- $9 = (_cons_gen($5,$7,$8)|0);
- $10 = (_cons_gen($4,(3),$9)|0);
- STACKTOP = sp;return ($10|0);
-}
-function _new_begin($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $0;
- $4 = $1;
- $5 = $4;
- $6 = ($5|0)!=(0|0);
- $7 = $3;
- if ($6) {
-  $8 = $4;
-  $9 = (_list2_gen($7,(17),$8)|0);
-  $2 = $9;
- } else {
-  $10 = (_cons_gen($7,(17),0)|0);
-  $2 = $10;
- }
- $11 = $2;
- STACKTOP = sp;return ($11|0);
-}
-function _append_gen($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0;
- var $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $4 = $0;
- $5 = $1;
- $6 = $2;
- $8 = $5;
- $7 = $8;
- $9 = $5;
- $10 = ($9|0)!=(0|0);
- if (!($10)) {
-  $11 = $6;
-  $3 = $11;
-  $25 = $3;
-  STACKTOP = sp;return ($25|0);
- }
- while(1) {
-  $12 = $7;
-  $13 = ((($12)) + 4|0);
-  $14 = HEAP32[$13>>2]|0;
-  $15 = ($14|0)!=(0|0);
-  if (!($15)) {
-   break;
-  }
-  $16 = $7;
-  $17 = ((($16)) + 4|0);
-  $18 = HEAP32[$17>>2]|0;
-  $7 = $18;
- }
- $19 = $6;
- $20 = ($19|0)!=(0|0);
- if ($20) {
-  $21 = $6;
-  $22 = $7;
-  $23 = ((($22)) + 4|0);
-  HEAP32[$23>>2] = $21;
- }
- $24 = $5;
- $3 = $24;
- $25 = $3;
- STACKTOP = sp;return ($25|0);
-}
-function _local_switch($0) {
- $0 = $0|0;
- var $1 = 0, $10 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $1 = $0;
- $3 = $1;
- $4 = ((($3)) + 76|0);
- $5 = HEAP32[$4>>2]|0;
- $2 = $5;
- $6 = $1;
- $7 = (_cons_gen($6,0,0)|0);
- $8 = $1;
- $9 = ((($8)) + 76|0);
- HEAP32[$9>>2] = $7;
- $10 = $2;
- STACKTOP = sp;return ($10|0);
-}
-function _local_resume($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $4 = $3;
- $5 = $2;
- $6 = ((($5)) + 76|0);
- HEAP32[$6>>2] = $4;
- STACKTOP = sp;return;
-}
-function _new_rescue($0,$1,$2,$3) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- var $10 = 0, $11 = 0, $12 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $4 = $0;
- $5 = $1;
- $6 = $2;
- $7 = $3;
- $8 = $4;
- $9 = $5;
- $10 = $6;
- $11 = $7;
- $12 = (_list4_gen($8,(18),$9,$10,$11)|0);
- STACKTOP = sp;return ($12|0);
-}
-function _yywarn($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;
- var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0;
- var $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0;
- var $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, $vararg_buffer4 = 0, $vararg_ptr1 = 0, $vararg_ptr2 = 0, $vararg_ptr3 = 0;
- var $vararg_ptr7 = 0, $vararg_ptr8 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);
- $vararg_buffer4 = sp + 16|0;
- $vararg_buffer = sp;
- $2 = $0;
- $3 = $1;
- $6 = $2;
- $7 = ((($6)) + 1148|0);
- $8 = HEAP8[$7>>0]|0;
- $9 = ($8&255) >>> 1;
- $10 = $9 & 1;
- $11 = ($10<<24>>24)!=(0);
- $12 = $2;
- if ($11) {
-  $33 = ((($12)) + 1140|0);
-  $34 = HEAP32[$33>>2]|0;
-  $35 = ($34>>>0)<(10);
-  if (!($35)) {
-   $73 = $2;
-   $74 = ((($73)) + 1140|0);
-   $75 = HEAP32[$74>>2]|0;
-   $76 = (($75) + 1)|0;
-   HEAP32[$74>>2] = $76;
-   STACKTOP = sp;return;
-  }
-  $36 = $3;
-  $37 = (_strlen($36)|0);
-  $5 = $37;
-  $38 = $2;
-  $39 = $5;
-  $40 = (($39) + 1)|0;
-  $41 = (_parser_palloc($38,$40)|0);
-  $4 = $41;
-  $42 = $4;
-  $43 = $3;
-  $44 = $5;
-  $45 = (($44) + 1)|0;
-  _memcpy(($42|0),($43|0),($45|0))|0;
-  $46 = $4;
-  $47 = $2;
-  $48 = ((($47)) + 1272|0);
-  $49 = $2;
-  $50 = ((($49)) + 1140|0);
-  $51 = HEAP32[$50>>2]|0;
-  $52 = (($48) + (($51*12)|0)|0);
-  $53 = ((($52)) + 8|0);
-  HEAP32[$53>>2] = $46;
-  $54 = $2;
-  $55 = ((($54)) + 32|0);
-  $56 = HEAP32[$55>>2]|0;
-  $57 = $2;
-  $58 = ((($57)) + 1272|0);
-  $59 = $2;
-  $60 = ((($59)) + 1140|0);
-  $61 = HEAP32[$60>>2]|0;
-  $62 = (($58) + (($61*12)|0)|0);
-  HEAP32[$62>>2] = $56;
-  $63 = $2;
-  $64 = ((($63)) + 36|0);
-  $65 = HEAP32[$64>>2]|0;
-  $66 = $2;
-  $67 = ((($66)) + 1272|0);
-  $68 = $2;
-  $69 = ((($68)) + 1140|0);
-  $70 = HEAP32[$69>>2]|0;
-  $71 = (($67) + (($70*12)|0)|0);
-  $72 = ((($71)) + 4|0);
-  HEAP32[$72>>2] = $65;
-  $73 = $2;
-  $74 = ((($73)) + 1140|0);
-  $75 = HEAP32[$74>>2]|0;
-  $76 = (($75) + 1)|0;
-  HEAP32[$74>>2] = $76;
-  STACKTOP = sp;return;
- }
- $13 = ((($12)) + 28|0);
- $14 = HEAP32[$13>>2]|0;
- $15 = ($14|0)!=(0|0);
- $16 = HEAP32[637]|0;
- $17 = $2;
- if ($15) {
-  $18 = ((($17)) + 28|0);
-  $19 = HEAP32[$18>>2]|0;
-  $20 = $2;
-  $21 = ((($20)) + 32|0);
-  $22 = HEAP32[$21>>2]|0;
-  $23 = $2;
-  $24 = ((($23)) + 36|0);
-  $25 = HEAP32[$24>>2]|0;
-  $26 = $3;
-  HEAP32[$vararg_buffer>>2] = $19;
-  $vararg_ptr1 = ((($vararg_buffer)) + 4|0);
-  HEAP32[$vararg_ptr1>>2] = $22;
-  $vararg_ptr2 = ((($vararg_buffer)) + 8|0);
-  HEAP32[$vararg_ptr2>>2] = $25;
-  $vararg_ptr3 = ((($vararg_buffer)) + 12|0);
-  HEAP32[$vararg_ptr3>>2] = $26;
-  (_fprintf($16,57137,$vararg_buffer)|0);
-  $73 = $2;
-  $74 = ((($73)) + 1140|0);
-  $75 = HEAP32[$74>>2]|0;
-  $76 = (($75) + 1)|0;
-  HEAP32[$74>>2] = $76;
-  STACKTOP = sp;return;
- } else {
-  $27 = ((($17)) + 32|0);
-  $28 = HEAP32[$27>>2]|0;
-  $29 = $2;
-  $30 = ((($29)) + 36|0);
-  $31 = HEAP32[$30>>2]|0;
-  $32 = $3;
-  HEAP32[$vararg_buffer4>>2] = $28;
-  $vararg_ptr7 = ((($vararg_buffer4)) + 4|0);
-  HEAP32[$vararg_ptr7>>2] = $31;
-  $vararg_ptr8 = ((($vararg_buffer4)) + 8|0);
-  HEAP32[$vararg_ptr8>>2] = $32;
-  (_fprintf($16,57151,$vararg_buffer4)|0);
-  $73 = $2;
-  $74 = ((($73)) + 1140|0);
-  $75 = HEAP32[$74>>2]|0;
-  $76 = (($75) + 1)|0;
-  HEAP32[$74>>2] = $76;
-  STACKTOP = sp;return;
- }
-}
-function _new_ensure($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $0;
- $4 = $1;
- $5 = $2;
- $6 = $3;
- $7 = $3;
- $8 = $4;
- $9 = $3;
- $10 = $5;
- $11 = (_cons_gen($9,0,$10)|0);
- $12 = (_cons_gen($7,$8,$11)|0);
- $13 = (_cons_gen($6,(19),$12)|0);
- STACKTOP = sp;return ($13|0);
-}
-function _new_alias($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $0;
- $4 = $1;
- $5 = $2;
- $6 = $3;
- $7 = $3;
- $8 = $4;
- $9 = $8;
- $10 = $5;
- $11 = $10;
- $12 = (_cons_gen($7,$9,$11)|0);
- $13 = (_cons_gen($6,(72),$12)|0);
- STACKTOP = sp;return ($13|0);
-}
-function _cond($0) {
- $0 = $0|0;
- var $1 = 0, $2 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $1 = $0;
- $2 = $1;
- STACKTOP = sp;return ($2|0);
-}
-function _new_if($0,$1,$2,$3) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- var $10 = 0, $11 = 0, $12 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $4 = $0;
- $5 = $1;
- $6 = $2;
- $7 = $3;
- $8 = $4;
- $9 = $5;
- $10 = $6;
- $11 = $7;
- $12 = (_list4_gen($8,(5),$9,$10,$11)|0);
- STACKTOP = sp;return ($12|0);
-}
-function _new_unless($0,$1,$2,$3) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- var $10 = 0, $11 = 0, $12 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $4 = $0;
- $5 = $1;
- $6 = $2;
- $7 = $3;
- $8 = $4;
- $9 = $5;
- $10 = $7;
- $11 = $6;
- $12 = (_list4_gen($8,(5),$9,$10,$11)|0);
- STACKTOP = sp;return ($12|0);
-}
-function _new_while($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $0;
- $4 = $1;
- $5 = $2;
- $6 = $3;
- $7 = $3;
- $8 = $4;
- $9 = $5;
- $10 = (_cons_gen($7,$8,$9)|0);
- $11 = (_cons_gen($6,(9),$10)|0);
- STACKTOP = sp;return ($11|0);
-}
-function _new_until($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $0;
- $4 = $1;
- $5 = $2;
- $6 = $3;
- $7 = $3;
- $8 = $4;
- $9 = $5;
- $10 = (_cons_gen($7,$8,$9)|0);
- $11 = (_cons_gen($6,(10),$10)|0);
- STACKTOP = sp;return ($11|0);
-}
-function _list3_gen($0,$1,$2,$3) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $4 = $0;
- $5 = $1;
- $6 = $2;
- $7 = $3;
- $8 = $4;
- $9 = $5;
- $10 = $4;
- $11 = $6;
- $12 = $4;
- $13 = $7;
- $14 = (_cons_gen($12,$13,0)|0);
- $15 = (_cons_gen($10,$11,$14)|0);
- $16 = (_cons_gen($8,$9,$15)|0);
- STACKTOP = sp;return ($16|0);
-}
-function _new_postexe($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $4 = $2;
- $5 = $3;
- $6 = (_cons_gen($4,(91),$5)|0);
- STACKTOP = sp;return ($6|0);
-}
-function _new_masgn($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $0;
- $4 = $1;
- $5 = $2;
- $6 = $3;
- $7 = $3;
- $8 = $4;
- $9 = $5;
- $10 = (_cons_gen($7,$8,$9)|0);
- $11 = (_cons_gen($6,(23),$10)|0);
- STACKTOP = sp;return ($11|0);
-}
-function _new_op_asgn($0,$1,$2,$3) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $4 = $0;
- $5 = $1;
- $6 = $2;
- $7 = $3;
- $8 = $4;
- $9 = $5;
- $10 = $6;
- $11 = $10;
- $12 = $7;
- $13 = (_list4_gen($8,(28),$9,$11,$12)|0);
- STACKTOP = sp;return ($13|0);
-}
-function _intern_gen($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $0;
- $4 = $1;
- $5 = $2;
- $6 = $3;
- $7 = HEAP32[$6>>2]|0;
- $8 = $4;
- $9 = $5;
- $10 = (_mrb_intern($7,$8,$9)|0);
- STACKTOP = sp;return ($10|0);
-}
-function _new_call($0,$1,$2,$3) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $4 = 0, $5 = 0;
- var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $4 = $0;
- $5 = $1;
- $6 = $2;
- $7 = $3;
- $9 = $4;
- $10 = $5;
- $11 = $6;
- $12 = $11;
- $13 = $7;
- $14 = (_list4_gen($9,(29),$10,$12,$13)|0);
- $8 = $14;
- $15 = $5;
- $16 = ($15|0)!=(0|0);
- if (!($16)) {
-  $27 = $8;
-  STACKTOP = sp;return ($27|0);
- }
- $17 = $5;
- $18 = ((($17)) + 10|0);
- $19 = HEAP16[$18>>1]|0;
- $20 = $8;
- $21 = ((($20)) + 10|0);
- HEAP16[$21>>1] = $19;
- $22 = $5;
- $23 = ((($22)) + 8|0);
- $24 = HEAP16[$23>>1]|0;
- $25 = $8;
- $26 = ((($25)) + 8|0);
- HEAP16[$26>>1] = $24;
- $27 = $8;
- STACKTOP = sp;return ($27|0);
-}
-function _backref_error($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0;
- var $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $vararg_buffer = sp;
- $5 = sp + 8|0;
- $2 = $0;
- $3 = $1;
- $6 = $3;
- $7 = HEAP32[$6>>2]|0;
- $8 = $7;
- $4 = $8;
- $9 = $4;
- $10 = ($9|0)==(45);
- if ($10) {
-  $11 = $2;
-  $12 = $3;
-  $13 = ((($12)) + 4|0);
-  $14 = HEAP32[$13>>2]|0;
-  $15 = $14;
-  _yyerror_i($11,62881,$15);
-  STACKTOP = sp;return;
- }
- $16 = $4;
- $17 = ($16|0)==(46);
- $18 = $2;
- if (!($17)) {
-  $23 = HEAP32[$18>>2]|0;
-  $24 = $4;
-  _mrb_fixnum_value_530($5,$24);
-  ;HEAP8[$vararg_buffer>>0]=HEAP8[$5>>0]|0;HEAP8[$vararg_buffer+1>>0]=HEAP8[$5+1>>0]|0;HEAP8[$vararg_buffer+2>>0]=HEAP8[$5+2>>0]|0;HEAP8[$vararg_buffer+3>>0]=HEAP8[$5+3>>0]|0;HEAP8[$vararg_buffer+4>>0]=HEAP8[$5+4>>0]|0;HEAP8[$vararg_buffer+5>>0]=HEAP8[$5+5>>0]|0;HEAP8[$vararg_buffer+6>>0]=HEAP8[$5+6>>0]|0;HEAP8[$vararg_buffer+7>>0]=HEAP8[$5+7>>0]|0;
-  _mrb_bug($23,62927,$vararg_buffer);
-  // unreachable;
- }
- $19 = $3;
- $20 = ((($19)) + 4|0);
- $21 = HEAP32[$20>>2]|0;
- $22 = $21;
- _yyerror_i($18,62904,$22);
- STACKTOP = sp;return;
-}
-function _new_array($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $4 = $2;
- $5 = $3;
- $6 = (_cons_gen($4,(34),$5)|0);
- STACKTOP = sp;return ($6|0);
-}
-function _new_asgn($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $0;
- $4 = $1;
- $5 = $2;
- $6 = $3;
- $7 = $3;
- $8 = $4;
- $9 = $5;
- $10 = (_cons_gen($7,$8,$9)|0);
- $11 = (_cons_gen($6,(24),$10)|0);
- STACKTOP = sp;return ($11|0);
-}
-function _new_and($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $0;
- $4 = $1;
- $5 = $2;
- $6 = $3;
- $7 = $3;
- $8 = $4;
- $9 = $5;
- $10 = (_cons_gen($7,$8,$9)|0);
- $11 = (_cons_gen($6,(20),$10)|0);
- STACKTOP = sp;return ($11|0);
-}
-function _new_or($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $0;
- $4 = $1;
- $5 = $2;
- $6 = $3;
- $7 = $3;
- $8 = $4;
- $9 = $5;
- $10 = (_cons_gen($7,$8,$9)|0);
- $11 = (_cons_gen($6,(21),$10)|0);
- STACKTOP = sp;return ($11|0);
-}
-function _call_uni_op($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $0;
- $4 = $1;
- $5 = $2;
- $6 = $3;
- $7 = $4;
- $8 = $3;
- $9 = $5;
- $10 = (_intern_cstr_gen($8,$9)|0);
- $11 = (_new_call($6,$7,$10,0)|0);
- STACKTOP = sp;return ($11|0);
-}
-function _local_nest($0) {
- $0 = $0|0;
- var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $1 = $0;
- $2 = $1;
- $3 = $1;
- $4 = ((($3)) + 76|0);
- $5 = HEAP32[$4>>2]|0;
- $6 = (_cons_gen($2,0,$5)|0);
- $7 = $1;
- $8 = ((($7)) + 76|0);
- HEAP32[$8>>2] = $6;
- STACKTOP = sp;return;
-}
-function _new_block($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $0;
- $4 = $1;
- $5 = $2;
- $6 = $3;
- $7 = $3;
- $8 = (_locals_node($7)|0);
- $9 = $4;
- $10 = $5;
- $11 = (_list4_gen($6,(4),$8,$9,$10)|0);
- STACKTOP = sp;return ($11|0);
-}
-function _local_unnest($0) {
- $0 = $0|0;
- var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $1 = $0;
- $2 = $1;
- $3 = ((($2)) + 76|0);
- $4 = HEAP32[$3>>2]|0;
- $5 = ($4|0)!=(0|0);
- if (!($5)) {
-  STACKTOP = sp;return;
- }
- $6 = $1;
- $7 = ((($6)) + 76|0);
- $8 = HEAP32[$7>>2]|0;
- $9 = ((($8)) + 4|0);
- $10 = HEAP32[$9>>2]|0;
- $11 = $1;
- $12 = ((($11)) + 76|0);
- HEAP32[$12>>2] = $10;
- STACKTOP = sp;return;
-}
-function _new_fcall($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;
- var $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $0;
- $4 = $1;
- $5 = $2;
- $7 = $3;
- $8 = (_new_self($7)|0);
- $6 = $8;
- $9 = $5;
- $10 = ($9|0)!=(0|0);
- if ($10) {
-  $11 = $5;
-  $12 = ((($11)) + 10|0);
-  $13 = HEAP16[$12>>1]|0;
-  $14 = $6;
-  $15 = ((($14)) + 10|0);
-  HEAP16[$15>>1] = $13;
-  $16 = $5;
-  $17 = ((($16)) + 8|0);
-  $18 = HEAP16[$17>>1]|0;
-  $19 = $6;
-  $20 = ((($19)) + 8|0);
-  HEAP16[$20>>1] = $18;
- }
- $21 = $3;
- $22 = $6;
- $23 = $4;
- $24 = $23;
- $25 = $5;
- $26 = (_list4_gen($21,(30),$22,$24,$25)|0);
- $6 = $26;
- $27 = $5;
- $28 = ($27|0)!=(0|0);
- if (!($28)) {
-  $39 = $6;
-  STACKTOP = sp;return ($39|0);
- }
- $29 = $5;
- $30 = ((($29)) + 10|0);
- $31 = HEAP16[$30>>1]|0;
- $32 = $6;
- $33 = ((($32)) + 10|0);
- HEAP16[$33>>1] = $31;
- $34 = $5;
- $35 = ((($34)) + 8|0);
- $36 = HEAP16[$35>>1]|0;
- $37 = $6;
- $38 = ((($37)) + 8|0);
- HEAP16[$38>>1] = $36;
- $39 = $6;
- STACKTOP = sp;return ($39|0);
-}
-function _args_with_block($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $0;
- $4 = $1;
- $5 = $2;
- $6 = $5;
- $7 = ($6|0)!=(0|0);
- if (!($7)) {
-  STACKTOP = sp;return;
- }
- $8 = $4;
- $9 = ((($8)) + 4|0);
- $10 = HEAP32[$9>>2]|0;
- $11 = ($10|0)!=(0|0);
- if ($11) {
-  $12 = $3;
-  _yyerror($12,62843);
- }
- $13 = $5;
- $14 = $4;
- $15 = ((($14)) + 4|0);
- HEAP32[$15>>2] = $13;
- STACKTOP = sp;return;
-}
-function _new_super($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $4 = $2;
- $5 = $3;
- $6 = (_cons_gen($4,(32),$5)|0);
- STACKTOP = sp;return ($6|0);
-}
-function _new_yield($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $0;
- $4 = $1;
- $5 = $4;
- $6 = ($5|0)!=(0|0);
- if (!($6)) {
-  $16 = $3;
-  $17 = (_cons_gen($16,(38),0)|0);
-  $2 = $17;
-  $18 = $2;
-  STACKTOP = sp;return ($18|0);
- }
- $7 = $4;
- $8 = ((($7)) + 4|0);
- $9 = HEAP32[$8>>2]|0;
- $10 = ($9|0)!=(0|0);
- if ($10) {
-  $11 = $3;
-  _yyerror($11,62843);
- }
- $12 = $3;
- $13 = $4;
- $14 = HEAP32[$13>>2]|0;
- $15 = (_cons_gen($12,(38),$14)|0);
- $2 = $15;
- $18 = $2;
- STACKTOP = sp;return ($18|0);
-}
-function _ret_args($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0;
- var $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $0;
- $4 = $1;
- $5 = $4;
- $6 = ((($5)) + 4|0);
- $7 = HEAP32[$6>>2]|0;
- $8 = ($7|0)!=(0|0);
- if ($8) {
-  $9 = $3;
-  _yyerror($9,62808);
-  $2 = 0;
-  $22 = $2;
-  STACKTOP = sp;return ($22|0);
- }
- $10 = $4;
- $11 = HEAP32[$10>>2]|0;
- $12 = ((($11)) + 4|0);
- $13 = HEAP32[$12>>2]|0;
- $14 = ($13|0)!=(0|0);
- if ($14) {
-  $18 = $3;
-  $19 = $4;
-  $20 = HEAP32[$19>>2]|0;
-  $21 = (_new_array($18,$20)|0);
-  $2 = $21;
-  $22 = $2;
-  STACKTOP = sp;return ($22|0);
- } else {
-  $15 = $4;
-  $16 = HEAP32[$15>>2]|0;
-  $17 = HEAP32[$16>>2]|0;
-  $2 = $17;
-  $22 = $2;
-  STACKTOP = sp;return ($22|0);
- }
- return (0)|0;
-}
-function _new_return($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $4 = $2;
- $5 = $3;
- $6 = (_cons_gen($4,(37),$5)|0);
- STACKTOP = sp;return ($6|0);
-}
-function _new_break($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $4 = $2;
- $5 = $3;
- $6 = (_cons_gen($4,(13),$5)|0);
- STACKTOP = sp;return ($6|0);
-}
-function _new_next($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $4 = $2;
- $5 = $3;
- $6 = (_cons_gen($4,(14),$5)|0);
- STACKTOP = sp;return ($6|0);
-}
-function _list2_gen($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $0;
- $4 = $1;
- $5 = $2;
- $6 = $3;
- $7 = $4;
- $8 = $3;
- $9 = $5;
- $10 = (_cons_gen($8,$9,0)|0);
- $11 = (_cons_gen($6,$7,$10)|0);
- STACKTOP = sp;return ($11|0);
-}
-function _assignable($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $4 = $3;
- $5 = HEAP32[$4>>2]|0;
- $6 = $5;
- $7 = ($6|0)==(39);
- if (!($7)) {
-  STACKTOP = sp;return;
- }
- $8 = $2;
- $9 = $3;
- $10 = ((($9)) + 4|0);
- $11 = HEAP32[$10>>2]|0;
- $12 = $11;
- _local_add($8,$12);
- STACKTOP = sp;return;
-}
-function _new_colon2($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $0;
- $4 = $1;
- $5 = $2;
- $6 = $3;
- $7 = $3;
- $8 = $4;
- $9 = $5;
- $10 = $9;
- $11 = (_cons_gen($7,$8,$10)|0);
- $12 = (_cons_gen($6,(77),$11)|0);
- STACKTOP = sp;return ($12|0);
-}
-function _new_colon3($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $4 = $2;
- $5 = $3;
- $6 = $5;
- $7 = (_cons_gen($4,(78),$6)|0);
- STACKTOP = sp;return ($7|0);
-}
-function _new_undef($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $4 = $2;
- $5 = $3;
- $6 = $5;
- $7 = (_list2_gen($4,(73),$6)|0);
- STACKTOP = sp;return ($7|0);
-}
-function _intern_gen_c($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = sp + 4|0;
- $2 = $0;
- HEAP8[$3>>0] = $1;
- $4 = $2;
- $5 = HEAP32[$4>>2]|0;
- $6 = (_mrb_intern($5,$3,1)|0);
- STACKTOP = sp;return ($6|0);
-}
-function _new_dot2($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $0;
- $4 = $1;
- $5 = $2;
- $6 = $3;
- $7 = $3;
- $8 = $4;
- $9 = $5;
- $10 = (_cons_gen($7,$8,$9)|0);
- $11 = (_cons_gen($6,(80),$10)|0);
- STACKTOP = sp;return ($11|0);
-}
-function _new_dot3($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $0;
- $4 = $1;
- $5 = $2;
- $6 = $3;
- $7 = $3;
- $8 = $4;
- $9 = $5;
- $10 = (_cons_gen($7,$8,$9)|0);
- $11 = (_cons_gen($6,(81),$10)|0);
- STACKTOP = sp;return ($11|0);
-}
-function _call_bin_op($0,$1,$2,$3) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $4 = $0;
- $5 = $1;
- $6 = $2;
- $7 = $3;
- $8 = $4;
- $9 = $5;
- $10 = $4;
- $11 = $6;
- $12 = (_intern_cstr_gen($10,$11)|0);
- $13 = $4;
- $14 = $4;
- $15 = $7;
- $16 = (_list1_gen($14,$15)|0);
- $17 = (_list1_gen($13,$16)|0);
- $18 = (_new_call($8,$9,$12,$17)|0);
- STACKTOP = sp;return ($18|0);
-}
-function _new_hash($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $4 = $2;
- $5 = $3;
- $6 = (_cons_gen($4,(36),$5)|0);
- STACKTOP = sp;return ($6|0);
-}
-function _new_block_arg($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $4 = $2;
- $5 = $3;
- $6 = (_cons_gen($4,(69),$5)|0);
- STACKTOP = sp;return ($6|0);
-}
-function _new_splat($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $4 = $2;
- $5 = $3;
- $6 = (_cons_gen($4,(66),$5)|0);
- STACKTOP = sp;return ($6|0);
-}
-function _call_with_block($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;
- var $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0;
- var label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $0;
- $4 = $1;
- $5 = $2;
- $7 = $4;
- $8 = HEAP32[$7>>2]|0;
- $9 = ($8|0)==((32)|0);
- if (!($9)) {
-  $10 = $4;
-  $11 = HEAP32[$10>>2]|0;
-  $12 = ($11|0)==((33)|0);
-  if (!($12)) {
-   $26 = $4;
-   $27 = ((($26)) + 4|0);
-   $28 = HEAP32[$27>>2]|0;
-   $29 = ((($28)) + 4|0);
-   $30 = HEAP32[$29>>2]|0;
-   $31 = ((($30)) + 4|0);
-   $32 = HEAP32[$31>>2]|0;
-   $6 = $32;
-   $33 = $6;
-   $34 = HEAP32[$33>>2]|0;
-   $35 = ($34|0)!=(0|0);
-   $36 = $3;
-   if ($35) {
-    $40 = $6;
-    $41 = HEAP32[$40>>2]|0;
-    $42 = $5;
-    _args_with_block($36,$41,$42);
-    STACKTOP = sp;return;
-   } else {
-    $37 = $5;
-    $38 = (_cons_gen($36,0,$37)|0);
-    $39 = $6;
-    HEAP32[$39>>2] = $38;
-    STACKTOP = sp;return;
-   }
-  }
- }
- $13 = $4;
- $14 = ((($13)) + 4|0);
- $15 = HEAP32[$14>>2]|0;
- $16 = ($15|0)!=(0|0);
- $17 = $3;
- if ($16) {
-  $22 = $4;
-  $23 = ((($22)) + 4|0);
-  $24 = HEAP32[$23>>2]|0;
-  $25 = $5;
-  _args_with_block($17,$24,$25);
-  STACKTOP = sp;return;
- } else {
-  $18 = $5;
-  $19 = (_cons_gen($17,0,$18)|0);
-  $20 = $4;
-  $21 = ((($20)) + 4|0);
-  HEAP32[$21>>2] = $19;
-  STACKTOP = sp;return;
- }
-}
-function _new_lambda($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $0;
- $4 = $1;
- $5 = $2;
- $6 = $3;
- $7 = $3;
- $8 = (_locals_node($7)|0);
- $9 = $4;
- $10 = $5;
- $11 = (_list4_gen($6,(53),$8,$9,$10)|0);
- STACKTOP = sp;return ($11|0);
-}
-function _new_case($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0;
- var label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $3 = $0;
- $4 = $1;
- $5 = $2;
- $8 = $3;
- $9 = $4;
- $10 = (_list2_gen($8,(6),$9)|0);
- $6 = $10;
- $11 = $6;
- $7 = $11;
- while(1) {
-  $12 = $7;
-  $13 = ((($12)) + 4|0);
-  $14 = HEAP32[$13>>2]|0;
-  $15 = ($14|0)!=(0|0);
-  if (!($15)) {
-   break;
-  }
-  $16 = $7;
-  $17 = ((($16)) + 4|0);
-  $18 = HEAP32[$17>>2]|0;
-  $7 = $18;
- }
- $19 = $5;
- $20 = $7;
- $21 = ((($20)) + 4|0);
- HEAP32[$21>>2] = $19;
- $22 = $6;
- STACKTOP = sp;return ($22|0);
-}
-function _new_for($0,$1,$2,$3) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- var $10 = 0, $11 = 0, $12 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $4 = $0;
- $5 = $1;
- $6 = $2;
- $7 = $3;
- $8 = $4;
- $9 = $5;
- $10 = $6;
- $11 = $7;
- $12 = (_list4_gen($8,(12),$9,$10,$11)|0);
- STACKTOP = sp;return ($12|0);
-}
-function _new_class($0,$1,$2,$3) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $4 = $0;
- $5 = $1;
- $6 = $2;
- $7 = $3;
- $8 = $4;
- $9 = $5;
- $10 = $6;
- $11 = $4;
- $12 = $4;
- $13 = (_locals_node($12)|0);
- $14 = $7;
- $15 = (_cons_gen($11,$13,$14)|0);
- $16 = (_list4_gen($8,(74),$9,$10,$15)|0);
- STACKTOP = sp;return ($16|0);
-}
-function _new_sclass($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $0;
- $4 = $1;
- $5 = $2;
- $6 = $3;
- $7 = $4;
- $8 = $3;
- $9 = $3;
- $10 = (_locals_node($9)|0);
- $11 = $5;
- $12 = (_cons_gen($8,$10,$11)|0);
- $13 = (_list3_gen($6,(76),$7,$12)|0);
- STACKTOP = sp;return ($13|0);
-}
-function _new_module($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $0;
- $4 = $1;
- $5 = $2;
- $6 = $3;
- $7 = $4;
- $8 = $3;
- $9 = $3;
- $10 = (_locals_node($9)|0);
- $11 = $5;
- $12 = (_cons_gen($8,$10,$11)|0);
- $13 = (_list3_gen($6,(75),$7,$12)|0);
- STACKTOP = sp;return ($13|0);
-}
-function _new_def($0,$1,$2,$3) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $4 = $0;
- $5 = $1;
- $6 = $2;
- $7 = $3;
- $8 = $4;
- $9 = $5;
- $10 = $9;
- $11 = $4;
- $12 = (_locals_node($11)|0);
- $13 = $6;
- $14 = $7;
- $15 = (_list5_gen($8,(70),$10,$12,$13,$14)|0);
- STACKTOP = sp;return ($15|0);
-}
-function _new_sdef($0,$1,$2,$3,$4) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- $4 = $4|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $5 = $0;
- $6 = $1;
- $7 = $2;
- $8 = $3;
- $9 = $4;
- $10 = $5;
- $11 = $6;
- $12 = $7;
- $13 = $12;
- $14 = $5;
- $15 = (_locals_node($14)|0);
- $16 = $8;
- $17 = $9;
- $18 = (_list6_gen($10,(71),$11,$13,$15,$16,$17)|0);
- STACKTOP = sp;return ($18|0);
-}
-function _new_redo($0) {
- $0 = $0|0;
- var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $1 = $0;
- $2 = $1;
- $3 = (_list1_gen($2,(15))|0);
- STACKTOP = sp;return ($3|0);
-}
-function _new_retry($0) {
- $0 = $0|0;
- var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $1 = $0;
- $2 = $1;
- $3 = (_list1_gen($2,(16))|0);
- STACKTOP = sp;return ($3|0);
-}
-function _new_arg($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $4 = $2;
- $5 = $3;
- $6 = $5;
- $7 = (_cons_gen($4,(63),$6)|0);
- STACKTOP = sp;return ($7|0);
-}
-function _new_args($0,$1,$2,$3,$4,$5) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- $4 = $4|0;
- $5 = $5|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;
- var $30 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $6 = $0;
- $7 = $1;
- $8 = $2;
- $9 = $3;
- $10 = $4;
- $11 = $5;
- $13 = $6;
- $14 = $10;
- $15 = $11;
- $16 = $15;
- $17 = (_cons_gen($13,$14,$16)|0);
- $12 = $17;
- $18 = $6;
- $19 = $9;
- $20 = $19;
- $21 = $12;
- $22 = (_cons_gen($18,$20,$21)|0);
- $12 = $22;
- $23 = $6;
- $24 = $8;
- $25 = $12;
- $26 = (_cons_gen($23,$24,$25)|0);
- $12 = $26;
- $27 = $6;
- $28 = $7;
- $29 = $12;
- $30 = (_cons_gen($27,$28,$29)|0);
- STACKTOP = sp;return ($30|0);
-}
-function _local_add_f($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0;
- var sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $4 = $2;
- $5 = ((($4)) + 76|0);
- $6 = HEAP32[$5>>2]|0;
- $7 = ($6|0)!=(0|0);
- if (!($7)) {
-  STACKTOP = sp;return;
- }
- $8 = $2;
- $9 = $2;
- $10 = ((($9)) + 76|0);
- $11 = HEAP32[$10>>2]|0;
- $12 = HEAP32[$11>>2]|0;
- $13 = $2;
- $14 = $3;
- $15 = $14;
- $16 = (_list1_gen($13,$15)|0);
- $17 = (_append_gen($8,$12,$16)|0);
- $18 = $2;
- $19 = ((($18)) + 76|0);
- $20 = HEAP32[$19>>2]|0;
- HEAP32[$20>>2] = $17;
- STACKTOP = sp;return;
-}
-function _new_bv($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $2 = 0, $3 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- STACKTOP = sp;return;
-}
-function _new_zsuper($0) {
- $0 = $0|0;
- var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $1 = $0;
- $2 = $1;
- $3 = (_list1_gen($2,(33))|0);
- STACKTOP = sp;return ($3|0);
-}
-function _new_dstr($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $4 = $2;
- $5 = $3;
- $6 = (_cons_gen($4,(56),$5)|0);
- STACKTOP = sp;return ($6|0);
-}
-function _new_literal_delim($0) {
- $0 = $0|0;
- var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $1 = $0;
- $2 = $1;
- $3 = (_cons_gen($2,(100),0)|0);
- STACKTOP = sp;return ($3|0);
-}
-function _new_dxstr($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $4 = $2;
- $5 = $3;
- $6 = (_cons_gen($4,(58),$5)|0);
- STACKTOP = sp;return ($6|0);
-}
-function _new_dregx($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $0;
- $4 = $1;
- $5 = $2;
- $6 = $3;
- $7 = $3;
- $8 = $4;
- $9 = $5;
- $10 = (_cons_gen($7,$8,$9)|0);
- $11 = (_cons_gen($6,(60),$10)|0);
- STACKTOP = sp;return ($11|0);
-}
-function _parsing_heredoc_inf($0) {
- $0 = $0|0;
- var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $4 = $2;
- $5 = ((($4)) + 1120|0);
- $6 = HEAP32[$5>>2]|0;
- $3 = $6;
- $7 = $3;
- $8 = ($7|0)==(0|0);
- if ($8) {
-  $1 = 0;
-  $13 = $1;
-  STACKTOP = sp;return ($13|0);
- } else {
-  $9 = $3;
-  $10 = HEAP32[$9>>2]|0;
-  $11 = ((($10)) + 4|0);
-  $12 = HEAP32[$11>>2]|0;
-  $1 = $12;
-  $13 = $1;
-  STACKTOP = sp;return ($13|0);
- }
- return (0)|0;
-}
-function _new_str($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $0;
- $4 = $1;
- $5 = $2;
- $6 = $3;
- $7 = $3;
- $8 = $3;
- $9 = $4;
- $10 = $5;
- $11 = (_parser_strndup($8,$9,$10)|0);
- $12 = $5;
- $13 = $12;
- $14 = (_cons_gen($7,$11,$13)|0);
- $15 = (_cons_gen($6,(55),$14)|0);
- STACKTOP = sp;return ($15|0);
-}
-function _heredoc_end($0) {
- $0 = $0|0;
- var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;
- var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0;
- var sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $1 = $0;
- $2 = $1;
- $3 = ((($2)) + 1120|0);
- $4 = HEAP32[$3>>2]|0;
- $5 = ((($4)) + 4|0);
- $6 = HEAP32[$5>>2]|0;
- $7 = $1;
- $8 = ((($7)) + 1120|0);
- HEAP32[$8>>2] = $6;
- $9 = $1;
- $10 = ((($9)) + 1120|0);
- $11 = HEAP32[$10>>2]|0;
- $12 = ($11|0)==(0|0);
- $13 = $1;
- if ($12) {
-  $14 = ((($13)) + 40|0);
-  HEAP32[$14>>2] = 0;
-  $15 = $1;
-  $16 = ((($15)) + 72|0);
-  $17 = HEAP8[$16>>0]|0;
-  $18 = $17 & -2;
-  $19 = $18 | 1;
-  HEAP8[$16>>0] = $19;
-  $20 = $1;
-  _end_strterm($20);
-  $21 = $1;
-  $22 = ((($21)) + 1124|0);
-  $23 = HEAP32[$22>>2]|0;
-  $24 = $1;
-  $25 = ((($24)) + 44|0);
-  HEAP32[$25>>2] = $23;
-  $26 = $1;
-  $27 = ((($26)) + 1124|0);
-  HEAP32[$27>>2] = 0;
-  $28 = $1;
-  $29 = ((($28)) + 1128|0);
-  $30 = HEAP8[$29>>0]|0;
-  $31 = $30 & -2;
-  $32 = $31 | 1;
-  HEAP8[$29>>0] = $32;
-  STACKTOP = sp;return;
- } else {
-  $33 = (_parsing_heredoc_inf($13)|0);
-  $34 = ((($33)) + 4|0);
-  $35 = HEAP32[$34>>2]|0;
-  $36 = $35;
-  $37 = $1;
-  $38 = ((($37)) + 44|0);
-  $39 = HEAP32[$38>>2]|0;
-  HEAP32[$39>>2] = $36;
-  STACKTOP = sp;return;
- }
-}
-function _heredoc_treat_nextline($0) {
- $0 = $0|0;
- var $$sink = 0, $$sink2 = 0, $1 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0;
- var $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0;
- var $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0;
- var $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0;
- var $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0;
- var $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $1 = $0;
- $5 = $1;
- $6 = ((($5)) + 1116|0);
- $7 = HEAP32[$6>>2]|0;
- $8 = ($7|0)==(0|0);
- if ($8) {
-  STACKTOP = sp;return;
- }
- $9 = $1;
- $10 = ((($9)) + 1120|0);
- $11 = HEAP32[$10>>2]|0;
- $12 = ($11|0)==(0|0);
- $13 = $1;
- $14 = ((($13)) + 1116|0);
- $15 = HEAP32[$14>>2]|0;
- do {
-  if ($12) {
-   $16 = $1;
-   $17 = ((($16)) + 1120|0);
-   HEAP32[$17>>2] = $15;
-   $18 = $1;
-   $19 = ((($18)) + 44|0);
-   $20 = HEAP32[$19>>2]|0;
-   $21 = $1;
-   $22 = ((($21)) + 1124|0);
-   HEAP32[$22>>2] = $20;
-   $23 = $1;
-   $24 = $1;
-   $25 = (_parsing_heredoc_inf($24)|0);
-   $26 = ((($25)) + 4|0);
-   $27 = HEAP32[$26>>2]|0;
-   $28 = (_new_strterm($23,$27,0,0)|0);
-   $29 = $1;
-   $30 = ((($29)) + 44|0);
-   HEAP32[$30>>2] = $28;
-   $31 = $1;
-   $32 = ((($31)) + 1112|0);
-   $33 = HEAP32[$32>>2]|0;
-   $2 = $33;
-   $34 = $2;
-   $35 = ($34|0)!=(0|0);
-   if (!($35)) {
-    $48 = $1;
-    $49 = ((($48)) + 1120|0);
-    $50 = HEAP32[$49>>2]|0;
-    $51 = $1;
-    $52 = ((($51)) + 1112|0);
-    HEAP32[$52>>2] = $50;
-    break;
-   }
-   while(1) {
-    $36 = $2;
-    $37 = ((($36)) + 4|0);
-    $38 = HEAP32[$37>>2]|0;
-    $39 = ($38|0)!=(0|0);
-    if (!($39)) {
-     break;
-    }
-    $40 = $2;
-    $41 = ((($40)) + 4|0);
-    $42 = HEAP32[$41>>2]|0;
-    $2 = $42;
-   }
-   $43 = $1;
-   $44 = ((($43)) + 1120|0);
-   $45 = HEAP32[$44>>2]|0;
-   $46 = $2;
-   $47 = ((($46)) + 4|0);
-   HEAP32[$47>>2] = $45;
-  } else {
-   $4 = $15;
-   while(1) {
-    $53 = $4;
-    $54 = ((($53)) + 4|0);
-    $55 = HEAP32[$54>>2]|0;
-    $56 = ($55|0)!=(0|0);
-    if (!($56)) {
-     break;
-    }
-    $57 = $4;
-    $58 = ((($57)) + 4|0);
-    $59 = HEAP32[$58>>2]|0;
-    $4 = $59;
-   }
-   $60 = $1;
-   $61 = ((($60)) + 1112|0);
-   $62 = HEAP32[$61>>2]|0;
-   $3 = $62;
-   $63 = $3;
-   $64 = $1;
-   $65 = ((($64)) + 1120|0);
-   $66 = HEAP32[$65>>2]|0;
-   $67 = ($63|0)==($66|0);
-   if ($67) {
-    $68 = $3;
-    $69 = $4;
-    $70 = ((($69)) + 4|0);
-    HEAP32[$70>>2] = $68;
-    $71 = $1;
-    $72 = ((($71)) + 1116|0);
-    $73 = HEAP32[$72>>2]|0;
-    $74 = $1;
-    $75 = ((($74)) + 1112|0);
-    HEAP32[$75>>2] = $73;
-    $76 = $1;
-    $77 = ((($76)) + 1116|0);
-    $78 = HEAP32[$77>>2]|0;
-    $79 = $1;
-    $$sink = $78;$$sink2 = $79;
-   } else {
-    while(1) {
-     $80 = $3;
-     $81 = ((($80)) + 4|0);
-     $82 = HEAP32[$81>>2]|0;
-     $83 = $1;
-     $84 = ((($83)) + 1120|0);
-     $85 = HEAP32[$84>>2]|0;
-     $86 = ($82|0)!=($85|0);
-     $87 = $3;
-     $88 = ((($87)) + 4|0);
-     $89 = HEAP32[$88>>2]|0;
-     if (!($86)) {
-      break;
-     }
-     $3 = $89;
-    }
-    $90 = $4;
-    $91 = ((($90)) + 4|0);
-    HEAP32[$91>>2] = $89;
-    $92 = $1;
-    $93 = ((($92)) + 1116|0);
-    $94 = HEAP32[$93>>2]|0;
-    $95 = $3;
-    $96 = ((($95)) + 4|0);
-    HEAP32[$96>>2] = $94;
-    $97 = $1;
-    $98 = ((($97)) + 1116|0);
-    $99 = HEAP32[$98>>2]|0;
-    $100 = $1;
-    $$sink = $99;$$sink2 = $100;
-   }
-   $101 = ((($$sink2)) + 1120|0);
-   HEAP32[$101>>2] = $$sink;
-  }
- } while(0);
- $102 = $1;
- $103 = ((($102)) + 1116|0);
- HEAP32[$103>>2] = 0;
- STACKTOP = sp;return;
-}
-function _new_words($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $4 = $2;
- $5 = $3;
- $6 = (_cons_gen($4,(101),$5)|0);
- STACKTOP = sp;return ($6|0);
-}
-function _new_sym($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $4 = $2;
- $5 = $3;
- $6 = $5;
- $7 = (_cons_gen($4,(54),$6)|0);
- STACKTOP = sp;return ($7|0);
-}
-function _new_dsym($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $4 = $2;
- $5 = $2;
- $6 = $3;
- $7 = (_new_dstr($5,$6)|0);
- $8 = (_cons_gen($4,(97),$7)|0);
- STACKTOP = sp;return ($8|0);
-}
-function _new_strsym($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0;
- var sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $6 = $3;
- $7 = ((($6)) + 4|0);
- $8 = HEAP32[$7>>2]|0;
- $9 = HEAP32[$8>>2]|0;
- $4 = $9;
- $10 = $3;
- $11 = ((($10)) + 4|0);
- $12 = HEAP32[$11>>2]|0;
- $13 = ((($12)) + 4|0);
- $14 = HEAP32[$13>>2]|0;
- $15 = $14;
- $5 = $15;
- $16 = $2;
- $17 = HEAP32[$16>>2]|0;
- $18 = $4;
- $19 = $5;
- $20 = (_mrb_intern($17,$18,$19)|0);
- STACKTOP = sp;return ($20|0);
-}
-function _new_symbols($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $4 = $2;
- $5 = $3;
- $6 = (_cons_gen($4,(102),$5)|0);
- STACKTOP = sp;return ($6|0);
-}
-function _negate_lit($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $4 = $2;
- $5 = $3;
- $6 = (_cons_gen($4,(52),$5)|0);
- STACKTOP = sp;return ($6|0);
-}
-function _new_lvar($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $4 = $2;
- $5 = $3;
- $6 = $5;
- $7 = (_cons_gen($4,(39),$6)|0);
- STACKTOP = sp;return ($7|0);
-}
-function _new_ivar($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $4 = $2;
- $5 = $3;
- $6 = $5;
- $7 = (_cons_gen($4,(42),$6)|0);
- STACKTOP = sp;return ($7|0);
-}
-function _new_gvar($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $4 = $2;
- $5 = $3;
- $6 = $5;
- $7 = (_cons_gen($4,(41),$6)|0);
- STACKTOP = sp;return ($7|0);
-}
-function _new_cvar($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $4 = $2;
- $5 = $3;
- $6 = $5;
- $7 = (_cons_gen($4,(44),$6)|0);
- STACKTOP = sp;return ($7|0);
-}
-function _new_const($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $4 = $2;
- $5 = $3;
- $6 = $5;
- $7 = (_cons_gen($4,(43),$6)|0);
- STACKTOP = sp;return ($7|0);
-}
-function _var_reference($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $3 = 0;
- var $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $0;
- $4 = $1;
- $6 = $4;
- $7 = HEAP32[$6>>2]|0;
- $8 = $7;
- $9 = ($8|0)==(39);
- if ($9) {
-  $10 = $3;
-  $11 = $4;
-  $12 = ((($11)) + 4|0);
-  $13 = HEAP32[$12>>2]|0;
-  $14 = $13;
-  $15 = (_local_var_p($10,$14)|0);
-  $16 = ($15<<24>>24)!=(0);
-  if (!($16)) {
-   $17 = $3;
-   $18 = $4;
-   $19 = ((($18)) + 4|0);
-   $20 = HEAP32[$19>>2]|0;
-   $21 = $20;
-   $22 = (_new_fcall($17,$21,0)|0);
-   $5 = $22;
-   $23 = $3;
-   $24 = $4;
-   _cons_free_gen($23,$24);
-   $25 = $5;
-   $2 = $25;
-   $27 = $2;
-   STACKTOP = sp;return ($27|0);
-  }
- }
- $26 = $4;
- $2 = $26;
- $27 = $2;
- STACKTOP = sp;return ($27|0);
-}
-function _new_self($0) {
- $0 = $0|0;
- var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $1 = $0;
- $2 = $1;
- $3 = (_list1_gen($2,(85))|0);
- STACKTOP = sp;return ($3|0);
-}
-function _new_true($0) {
- $0 = $0|0;
- var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $1 = $0;
- $2 = $1;
- $3 = (_list1_gen($2,(87))|0);
- STACKTOP = sp;return ($3|0);
-}
-function _new_false($0) {
- $0 = $0|0;
- var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $1 = $0;
- $2 = $1;
- $3 = (_list1_gen($2,(88))|0);
- STACKTOP = sp;return ($3|0);
-}
-function _new_int($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $0;
- $4 = $1;
- $5 = $2;
- $6 = $3;
- $7 = $3;
- $8 = $4;
- $9 = (_parser_strdup($7,$8)|0);
- $10 = $5;
- $11 = $10;
- $12 = (_list3_gen($6,(50),$9,$11)|0);
- STACKTOP = sp;return ($12|0);
-}
-function _yysyntax_error($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;
- var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0;
- var $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0, $16 = 0, $17 = 0;
- var $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0;
- var $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0;
- var $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0;
- var $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0;
- var $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $or$cond = 0, $or$cond3 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 160|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(160|0);
- $13 = sp + 40|0;
- $17 = sp + 100|0;
- $4 = $0;
- $5 = $1;
- $6 = $2;
- $25 = $5;
- $26 = (3344 + ($25<<1)|0);
- $27 = HEAP16[$26>>1]|0;
- $28 = $27 << 16 >> 16;
- $7 = $28;
- $29 = $7;
- $30 = (-771)<($29|0);
- $31 = $7;
- $32 = ($31|0)<=(10639);
- $or$cond = $30 & $32;
- if (!($or$cond)) {
-  $3 = 0;
-  $151 = $3;
-  STACKTOP = sp;return ($151|0);
- }
- $33 = $6;
- $34 = ($33>>>0)<=(372);
- if ($34) {
-  $35 = $6;
-  $36 = (58442 + ($35)|0);
-  $37 = HEAP8[$36>>0]|0;
-  $38 = $37&255;
-  $39 = $38;
- } else {
-  $39 = 2;
- }
- $8 = $39;
- $40 = $8;
- $41 = (504 + ($40<<2)|0);
- $42 = HEAP32[$41>>2]|0;
- $43 = (_yytnamerr(0,$42)|0);
- $9 = $43;
- $44 = $9;
- $10 = $44;
- $12 = 0;
- $18 = 60021;
- $45 = $7;
- $46 = ($45|0)<(0);
- $47 = $7;
- $48 = (0 - ($47))|0;
- $49 = $46 ? $48 : 0;
- $19 = $49;
- $50 = $7;
- $51 = (10639 - ($50))|0;
- $52 = (($51) + 1)|0;
- $20 = $52;
- $53 = $20;
- $54 = ($53|0)<(144);
- $55 = $20;
- $56 = $54 ? $55 : 144;
- $21 = $56;
- $22 = 1;
- $57 = $8;
- $58 = (504 + ($57<<2)|0);
- $59 = HEAP32[$58>>2]|0;
- HEAP32[$13>>2] = $59;
- $60 = (_yystpcpy($17,60036)|0);
- $15 = $60;
- $61 = $19;
- $14 = $61;
- while(1) {
-  $62 = $14;
-  $63 = $21;
-  $64 = ($62|0)<($63|0);
-  if (!($64)) {
-   break;
-  }
-  $65 = $14;
-  $66 = $7;
-  $67 = (($65) + ($66))|0;
-  $68 = (5280 + ($67<<1)|0);
-  $69 = HEAP16[$68>>1]|0;
-  $70 = $69 << 16 >> 16;
-  $71 = $14;
-  $72 = ($70|0)==($71|0);
-  $73 = $14;
-  $74 = ($73|0)!=(1);
-  $or$cond3 = $72 & $74;
-  if ($or$cond3) {
-   $75 = $22;
-   $76 = ($75|0)==(5);
-   if ($76) {
-    label = 9;
-    break;
-   }
-   $79 = $14;
-   $80 = (504 + ($79<<2)|0);
-   $81 = HEAP32[$80>>2]|0;
-   $82 = $22;
-   $83 = (($82) + 1)|0;
-   $22 = $83;
-   $84 = (($13) + ($82<<2)|0);
-   HEAP32[$84>>2] = $81;
-   $85 = $10;
-   $86 = $14;
-   $87 = (504 + ($86<<2)|0);
-   $88 = HEAP32[$87>>2]|0;
-   $89 = (_yytnamerr(0,$88)|0);
-   $90 = (($85) + ($89))|0;
-   $11 = $90;
-   $91 = $11;
-   $92 = $10;
-   $93 = ($91>>>0)<($92>>>0);
-   $94 = $93&1;
-   $95 = $12;
-   $96 = $95 | $94;
-   $12 = $96;
-   $97 = $11;
-   $10 = $97;
-   $98 = $15;
-   $99 = $18;
-   $100 = (_yystpcpy($98,$99)|0);
-   $15 = $100;
-   $18 = 60064;
-  }
-  $101 = $14;
-  $102 = (($101) + 1)|0;
-  $14 = $102;
- }
- if ((label|0) == 9) {
-  $22 = 1;
-  $77 = $9;
-  $10 = $77;
-  $78 = ((($17)) + 27|0);
-  HEAP8[$78>>0] = 0;
- }
- $16 = $17;
- $103 = $10;
- $104 = $16;
- $105 = (_yystrlen($104)|0);
- $106 = (($103) + ($105))|0;
- $11 = $106;
- $107 = $11;
- $108 = $10;
- $109 = ($107>>>0)<($108>>>0);
- $110 = $109&1;
- $111 = $12;
- $112 = $111 | $110;
- $12 = $112;
- $113 = $11;
- $10 = $113;
- $114 = $12;
- $115 = ($114|0)!=(0);
- if ($115) {
-  $3 = -1;
-  $151 = $3;
-  STACKTOP = sp;return ($151|0);
- }
- $116 = $4;
- $117 = ($116|0)!=(0|0);
- L22: do {
-  if ($117) {
-   $118 = $4;
-   $23 = $118;
-   $24 = 0;
-   while(1) {
-    $119 = $16;
-    $120 = HEAP8[$119>>0]|0;
-    $121 = $23;
-    HEAP8[$121>>0] = $120;
-    $122 = $120 << 24 >> 24;
-    $123 = ($122|0)!=(0);
-    if (!($123)) {
-     break L22;
-    }
-    $124 = $23;
-    $125 = HEAP8[$124>>0]|0;
-    $126 = $125 << 24 >> 24;
-    $127 = ($126|0)==(37);
-    if ($127) {
-     $128 = $16;
-     $129 = ((($128)) + 1|0);
-     $130 = HEAP8[$129>>0]|0;
-     $131 = $130 << 24 >> 24;
-     $132 = ($131|0)==(115);
-     if ($132) {
-      $133 = $24;
-      $134 = $22;
-      $135 = ($133|0)<($134|0);
-      if ($135) {
-       $136 = $23;
-       $137 = $24;
-       $138 = (($137) + 1)|0;
-       $24 = $138;
-       $139 = (($13) + ($137<<2)|0);
-       $140 = HEAP32[$139>>2]|0;
-       $141 = (_yytnamerr($136,$140)|0);
-       $142 = $23;
-       $143 = (($142) + ($141)|0);
-       $23 = $143;
-       $144 = $16;
-       $145 = ((($144)) + 2|0);
-       $16 = $145;
-       continue;
-      }
-     }
-    }
-    $146 = $23;
-    $147 = ((($146)) + 1|0);
-    $23 = $147;
-    $148 = $16;
-    $149 = ((($148)) + 1|0);
-    $16 = $149;
-   }
-  }
- } while(0);
- $150 = $10;
- $3 = $150;
- $151 = $3;
- STACKTOP = sp;return ($151|0);
-}
-function _yydestruct($0,$1,$2,$3) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- var $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $4 = $0;
- $5 = $1;
- $6 = $2;
- $7 = $3;
- $8 = $4;
- $9 = ($8|0)!=(0|0);
- if (!($9)) {
-  $4 = 60012;
- }
- STACKTOP = sp;return;
-}
-function _yytnamerr($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;
- var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0;
- var $47 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $3 = $0;
- $4 = $1;
- $7 = $4;
- $8 = HEAP8[$7>>0]|0;
- $9 = $8 << 24 >> 24;
- $10 = ($9|0)==(34);
- L1: do {
-  if ($10) {
-   $5 = 0;
-   $11 = $4;
-   $6 = $11;
-   L3: while(1) {
-    $12 = $6;
-    $13 = ((($12)) + 1|0);
-    $6 = $13;
-    $14 = HEAP8[$13>>0]|0;
-    $15 = $14 << 24 >> 24;
-    switch ($15|0) {
-    case 44: case 39:  {
-     break L1;
-     break;
-    }
-    case 34:  {
-     break L3;
-     break;
-    }
-    case 92:  {
-     $16 = $6;
-     $17 = ((($16)) + 1|0);
-     $6 = $17;
-     $18 = HEAP8[$17>>0]|0;
-     $19 = $18 << 24 >> 24;
-     $20 = ($19|0)!=(92);
-     if ($20) {
-      break L1;
-     }
-     break;
-    }
-    default: {
-    }
-    }
-    $21 = $3;
-    $22 = ($21|0)!=(0|0);
-    if ($22) {
-     $23 = $6;
-     $24 = HEAP8[$23>>0]|0;
-     $25 = $3;
-     $26 = $5;
-     $27 = (($25) + ($26)|0);
-     HEAP8[$27>>0] = $24;
-    }
-    $28 = $5;
-    $29 = (($28) + 1)|0;
-    $5 = $29;
-   }
-   $30 = $3;
-   $31 = ($30|0)!=(0|0);
-   if ($31) {
-    $32 = $3;
-    $33 = $5;
-    $34 = (($32) + ($33)|0);
-    HEAP8[$34>>0] = 0;
-   }
-   $35 = $5;
-   $2 = $35;
-   $47 = $2;
-   STACKTOP = sp;return ($47|0);
-  }
- } while(0);
- $36 = $3;
- $37 = ($36|0)!=(0|0);
- if ($37) {
-  $40 = $3;
-  $41 = $4;
-  $42 = (_yystpcpy($40,$41)|0);
-  $43 = $3;
-  $44 = $42;
-  $45 = $43;
-  $46 = (($44) - ($45))|0;
-  $2 = $46;
-  $47 = $2;
-  STACKTOP = sp;return ($47|0);
- } else {
-  $38 = $4;
-  $39 = (_yystrlen($38)|0);
-  $2 = $39;
-  $47 = $2;
-  STACKTOP = sp;return ($47|0);
- }
- return (0)|0;
-}
-function _yystpcpy($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $6 = $2;
- $4 = $6;
- $7 = $3;
- $5 = $7;
- while(1) {
-  $8 = $5;
-  $9 = ((($8)) + 1|0);
-  $5 = $9;
-  $10 = HEAP8[$8>>0]|0;
-  $11 = $4;
-  $12 = ((($11)) + 1|0);
-  $4 = $12;
-  HEAP8[$11>>0] = $10;
-  $13 = $10 << 24 >> 24;
-  $14 = ($13|0)!=(0);
-  if (!($14)) {
-   break;
-  }
- }
- $15 = $4;
- $16 = ((($15)) + -1|0);
- STACKTOP = sp;return ($16|0);
-}
-function _yystrlen($0) {
- $0 = $0|0;
- var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $1 = $0;
- $2 = 0;
- while(1) {
-  $3 = $1;
-  $4 = $2;
-  $5 = (($3) + ($4)|0);
-  $6 = HEAP8[$5>>0]|0;
-  $7 = ($6<<24>>24)!=(0);
-  $8 = $2;
-  if (!($7)) {
-   break;
-  }
-  $9 = (($8) + 1)|0;
-  $2 = $9;
- }
- STACKTOP = sp;return ($8|0);
-}
-function _parser_strdup($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $4 = $2;
- $5 = $3;
- $6 = $3;
- $7 = (_strlen($6)|0);
- $8 = (_parser_strndup($4,$5,$7)|0);
- STACKTOP = sp;return ($8|0);
-}
-function _parser_strndup($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $0;
- $4 = $1;
- $5 = $2;
- $7 = $3;
- $8 = $5;
- $9 = (($8) + 1)|0;
- $10 = (_parser_palloc($7,$9)|0);
- $6 = $10;
- $11 = $6;
- $12 = $4;
- $13 = $5;
- _memcpy(($11|0),($12|0),($13|0))|0;
- $14 = $6;
- $15 = $5;
- $16 = (($14) + ($15)|0);
- HEAP8[$16>>0] = 0;
- $17 = $6;
- STACKTOP = sp;return ($17|0);
-}
-function _local_var_p($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $3 = 0;
- var $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $3 = $0;
- $4 = $1;
- $7 = $3;
- $8 = ((($7)) + 76|0);
- $9 = HEAP32[$8>>2]|0;
- $5 = $9;
- L1: while(1) {
-  $10 = $5;
-  $11 = ($10|0)!=(0|0);
-  if (!($11)) {
-   label = 9;
-   break;
-  }
-  $12 = $5;
-  $13 = HEAP32[$12>>2]|0;
-  $6 = $13;
-  while(1) {
-   $14 = $6;
-   $15 = ($14|0)!=(0|0);
-   if (!($15)) {
-    break;
-   }
-   $16 = $6;
-   $17 = HEAP32[$16>>2]|0;
-   $18 = $17;
-   $19 = $4;
-   $20 = ($18|0)==($19|0);
-   if ($20) {
-    label = 6;
-    break L1;
-   }
-   $21 = $6;
-   $22 = ((($21)) + 4|0);
-   $23 = HEAP32[$22>>2]|0;
-   $6 = $23;
-  }
-  $24 = $5;
-  $25 = ((($24)) + 4|0);
-  $26 = HEAP32[$25>>2]|0;
-  $5 = $26;
- }
- if ((label|0) == 6) {
-  $2 = 1;
-  $27 = $2;
-  STACKTOP = sp;return ($27|0);
- }
- else if ((label|0) == 9) {
-  $2 = 0;
-  $27 = $2;
-  STACKTOP = sp;return ($27|0);
- }
- return (0)|0;
-}
-function _cons_free_gen($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $4 = $2;
- $5 = ((($4)) + 8|0);
- $6 = HEAP32[$5>>2]|0;
- $7 = $3;
- $8 = ((($7)) + 4|0);
- HEAP32[$8>>2] = $6;
- $9 = $3;
- $10 = $2;
- $11 = ((($10)) + 8|0);
- HEAP32[$11>>2] = $9;
- STACKTOP = sp;return;
-}
-function _new_strterm($0,$1,$2,$3) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $4 = $0;
- $5 = $1;
- $6 = $2;
- $7 = $3;
- $8 = $4;
- $9 = $5;
- $10 = $9;
- $11 = $4;
- $12 = $4;
- $13 = $7;
- $14 = $13;
- $15 = $6;
- $16 = $15;
- $17 = (_cons_gen($12,$14,$16)|0);
- $18 = (_cons_gen($11,0,$17)|0);
- $19 = (_cons_gen($8,$10,$18)|0);
- STACKTOP = sp;return ($19|0);
-}
-function _end_strterm($0) {
- $0 = $0|0;
- var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0;
- var $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $1 = $0;
- $2 = $1;
- $3 = $1;
- $4 = ((($3)) + 44|0);
- $5 = HEAP32[$4>>2]|0;
- $6 = ((($5)) + 4|0);
- $7 = HEAP32[$6>>2]|0;
- $8 = ((($7)) + 4|0);
- $9 = HEAP32[$8>>2]|0;
- _cons_free_gen($2,$9);
- $10 = $1;
- $11 = $1;
- $12 = ((($11)) + 44|0);
- $13 = HEAP32[$12>>2]|0;
- $14 = ((($13)) + 4|0);
- $15 = HEAP32[$14>>2]|0;
- _cons_free_gen($10,$15);
- $16 = $1;
- $17 = $1;
- $18 = ((($17)) + 44|0);
- $19 = HEAP32[$18>>2]|0;
- _cons_free_gen($16,$19);
- $20 = $1;
- $21 = ((($20)) + 44|0);
- HEAP32[$21>>2] = 0;
- STACKTOP = sp;return;
-}
-function _locals_node($0) {
- $0 = $0|0;
- var $1 = 0, $10 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $1 = $0;
- $2 = $1;
- $3 = ((($2)) + 76|0);
- $4 = HEAP32[$3>>2]|0;
- $5 = ($4|0)!=(0|0);
- if (!($5)) {
-  $10 = 0;
-  STACKTOP = sp;return ($10|0);
- }
- $6 = $1;
- $7 = ((($6)) + 76|0);
- $8 = HEAP32[$7>>2]|0;
- $9 = HEAP32[$8>>2]|0;
- $10 = $9;
- STACKTOP = sp;return ($10|0);
-}
-function _list6_gen($0,$1,$2,$3,$4,$5,$6) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- $4 = $4|0;
- $5 = $5|0;
- $6 = $6|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;
- var $30 = 0, $31 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $7 = $0;
- $8 = $1;
- $9 = $2;
- $10 = $3;
- $11 = $4;
- $12 = $5;
- $13 = $6;
- $14 = $7;
- $15 = $8;
- $16 = $7;
- $17 = $9;
- $18 = $7;
- $19 = $10;
- $20 = $7;
- $21 = $11;
- $22 = $7;
- $23 = $12;
- $24 = $7;
- $25 = $13;
- $26 = (_cons_gen($24,$25,0)|0);
- $27 = (_cons_gen($22,$23,$26)|0);
- $28 = (_cons_gen($20,$21,$27)|0);
- $29 = (_cons_gen($18,$19,$28)|0);
- $30 = (_cons_gen($16,$17,$29)|0);
- $31 = (_cons_gen($14,$15,$30)|0);
- STACKTOP = sp;return ($31|0);
-}
-function _list5_gen($0,$1,$2,$3,$4,$5) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- $4 = $4|0;
- $5 = $5|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $6 = 0, $7 = 0, $8 = 0;
- var $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $6 = $0;
- $7 = $1;
- $8 = $2;
- $9 = $3;
- $10 = $4;
- $11 = $5;
- $12 = $6;
- $13 = $7;
- $14 = $6;
- $15 = $8;
- $16 = $6;
- $17 = $9;
- $18 = $6;
- $19 = $10;
- $20 = $6;
- $21 = $11;
- $22 = (_cons_gen($20,$21,0)|0);
- $23 = (_cons_gen($18,$19,$22)|0);
- $24 = (_cons_gen($16,$17,$23)|0);
- $25 = (_cons_gen($14,$15,$24)|0);
- $26 = (_cons_gen($12,$13,$25)|0);
- STACKTOP = sp;return ($26|0);
-}
-function _list4_gen($0,$1,$2,$3,$4) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- $4 = $4|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $5 = $0;
- $6 = $1;
- $7 = $2;
- $8 = $3;
- $9 = $4;
- $10 = $5;
- $11 = $6;
- $12 = $5;
- $13 = $7;
- $14 = $5;
- $15 = $8;
- $16 = $5;
- $17 = $9;
- $18 = (_cons_gen($16,$17,0)|0);
- $19 = (_cons_gen($14,$15,$18)|0);
- $20 = (_cons_gen($12,$13,$19)|0);
- $21 = (_cons_gen($10,$11,$20)|0);
- STACKTOP = sp;return ($21|0);
-}
-function _intern_cstr_gen($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $4 = $2;
- $5 = HEAP32[$4>>2]|0;
- $6 = $3;
- $7 = (_mrb_intern_cstr($5,$6)|0);
- STACKTOP = sp;return ($7|0);
-}
-function _local_add($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $4 = $2;
- $5 = $3;
- $6 = (_local_var_p($4,$5)|0);
- $7 = ($6<<24>>24)!=(0);
- if ($7) {
-  STACKTOP = sp;return;
- }
- $8 = $2;
- $9 = $3;
- _local_add_f($8,$9);
- STACKTOP = sp;return;
-}
-function _yyerror_i($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 272|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(272|0);
- $vararg_buffer = sp;
- $6 = sp + 16|0;
- $3 = $0;
- $4 = $1;
- $5 = $2;
- $7 = $4;
- $8 = $5;
- HEAP32[$vararg_buffer>>2] = $8;
- (_snprintf($6,256,$7,$vararg_buffer)|0);
- $9 = $3;
- _yyerror($9,$6);
- STACKTOP = sp;return;
-}
-function _mrb_fixnum_value_530($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = sp;
- $2 = $1;
- $4 = ((($3)) + 4|0);
- HEAP32[$4>>2] = 3;
- $5 = $2;
- HEAP32[$3>>2] = $5;
- ;HEAP32[$0>>2]=HEAP32[$3>>2]|0;HEAP32[$0+4>>2]=HEAP32[$3+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _parser_yylex($0) {
- $0 = $0|0;
- var $$old = 0, $$old1 = 0, $$old104 = 0, $$old105 = 0, $$old110 = 0, $$old111 = 0, $$old113 = 0, $$old114 = 0, $$old127 = 0, $$old128 = 0, $$old130 = 0, $$old131 = 0, $$old136 = 0, $$old137 = 0, $$old139 = 0, $$old140 = 0, $$old15 = 0, $$old16 = 0, $$old2 = 0, $$old28 = 0;
- var $$old29 = 0, $$old3 = 0, $$old31 = 0, $$old32 = 0, $$old42 = 0, $$old43 = 0, $$old45 = 0, $$old46 = 0, $$old50 = 0, $$old51 = 0, $$old53 = 0, $$old54 = 0, $$sink = 0, $$sink103 = 0, $$sink118 = 0, $$sink12 = 0, $$sink120 = 0, $$sink121 = 0, $$sink123 = 0, $$sink124 = 0;
- var $$sink126 = 0, $$sink14 = 0, $$sink144 = 0, $$sink146 = 0, $$sink18 = 0, $$sink194 = 0, $$sink195 = 0, $$sink20 = 0, $$sink21 = 0, $$sink36 = 0, $$sink38 = 0, $$sink39 = 0, $$sink41 = 0, $$sink8 = 0, $1 = 0, $10 = 0, $100 = 0, $1000 = 0, $1001 = 0, $1002 = 0;
- var $1003 = 0, $1004 = 0, $1005 = 0, $1006 = 0, $1007 = 0, $1008 = 0, $1009 = 0, $101 = 0, $1010 = 0, $1011 = 0, $1012 = 0, $1013 = 0, $1014 = 0, $1015 = 0, $1016 = 0, $1017 = 0, $1018 = 0, $1019 = 0, $102 = 0, $1020 = 0;
- var $1021 = 0, $1022 = 0, $1023 = 0, $1024 = 0, $1025 = 0, $1026 = 0, $1027 = 0, $1028 = 0, $1029 = 0, $103 = 0, $1030 = 0, $1031 = 0.0, $1032 = 0.0, $1033 = 0, $1034 = 0, $1035 = 0, $1036 = 0, $1037 = 0, $1038 = 0, $1039 = 0;
- var $104 = 0, $1040 = 0, $1041 = 0, $1042 = 0, $1043 = 0, $1044 = 0, $1045 = 0, $1046 = 0, $1047 = 0, $1048 = 0, $1049 = 0, $105 = 0, $1050 = 0, $1051 = 0, $1052 = 0, $1053 = 0, $1054 = 0, $1055 = 0, $1056 = 0, $1057 = 0;
- var $1058 = 0, $1059 = 0, $106 = 0, $1060 = 0, $1061 = 0, $1062 = 0, $1063 = 0, $1064 = 0, $1065 = 0, $1066 = 0, $1067 = 0, $1068 = 0, $1069 = 0, $107 = 0, $1070 = 0, $1071 = 0, $1072 = 0, $1073 = 0, $1074 = 0, $1075 = 0;
- var $1076 = 0, $1077 = 0, $1078 = 0, $1079 = 0, $108 = 0, $1080 = 0, $1081 = 0, $1082 = 0, $1083 = 0, $1084 = 0, $1085 = 0, $1086 = 0, $1087 = 0, $1088 = 0, $1089 = 0, $109 = 0, $1090 = 0, $1091 = 0, $1092 = 0, $1093 = 0;
- var $1094 = 0, $1095 = 0, $1096 = 0, $1097 = 0, $1098 = 0, $1099 = 0, $11 = 0, $110 = 0, $1100 = 0, $1101 = 0, $1102 = 0, $1103 = 0, $1104 = 0, $1105 = 0, $1106 = 0, $1107 = 0, $1108 = 0, $1109 = 0, $111 = 0, $1110 = 0;
- var $1111 = 0, $1112 = 0, $1113 = 0, $1114 = 0, $1115 = 0, $1116 = 0, $1117 = 0, $1118 = 0, $1119 = 0, $112 = 0, $1120 = 0, $1121 = 0, $1122 = 0, $1123 = 0, $1124 = 0, $1125 = 0, $1126 = 0, $1127 = 0, $1128 = 0, $1129 = 0;
- var $113 = 0, $1130 = 0, $1131 = 0, $1132 = 0, $1133 = 0, $1134 = 0, $1135 = 0, $1136 = 0, $1137 = 0, $1138 = 0, $1139 = 0, $114 = 0, $1140 = 0, $1141 = 0, $1142 = 0, $1143 = 0, $1144 = 0, $1145 = 0, $1146 = 0, $1147 = 0;
- var $1148 = 0, $1149 = 0, $115 = 0, $1150 = 0, $1151 = 0, $1152 = 0, $1153 = 0, $1154 = 0, $1155 = 0, $1156 = 0, $1157 = 0, $1158 = 0, $1159 = 0, $116 = 0, $1160 = 0, $1161 = 0, $1162 = 0, $1163 = 0, $1164 = 0, $1165 = 0;
- var $1166 = 0, $1167 = 0, $1168 = 0, $1169 = 0, $117 = 0, $1170 = 0, $1171 = 0, $1172 = 0, $1173 = 0, $1174 = 0, $1175 = 0, $1176 = 0, $1177 = 0, $1178 = 0, $1179 = 0, $118 = 0, $1180 = 0, $1181 = 0, $1182 = 0, $1183 = 0;
- var $1184 = 0, $1185 = 0, $1186 = 0, $1187 = 0, $1188 = 0, $1189 = 0, $119 = 0, $1190 = 0, $1191 = 0, $1192 = 0, $1193 = 0, $1194 = 0, $1195 = 0, $1196 = 0, $1197 = 0, $1198 = 0, $1199 = 0, $12 = 0, $120 = 0, $1200 = 0;
- var $1201 = 0, $1202 = 0, $1203 = 0, $1204 = 0, $1205 = 0, $1206 = 0, $1207 = 0, $1208 = 0, $1209 = 0, $121 = 0, $1210 = 0, $1211 = 0, $1212 = 0, $1213 = 0, $1214 = 0, $1215 = 0, $1216 = 0, $1217 = 0, $1218 = 0, $1219 = 0;
- var $122 = 0, $1220 = 0, $1221 = 0, $1222 = 0, $1223 = 0, $1224 = 0, $1225 = 0, $1226 = 0, $1227 = 0, $1228 = 0, $1229 = 0, $123 = 0, $1230 = 0, $1231 = 0, $1232 = 0, $1233 = 0, $1234 = 0, $1235 = 0, $1236 = 0, $1237 = 0;
- var $1238 = 0, $1239 = 0, $124 = 0, $1240 = 0, $1241 = 0, $1242 = 0, $1243 = 0, $1244 = 0, $1245 = 0, $1246 = 0, $1247 = 0, $1248 = 0, $1249 = 0, $125 = 0, $1250 = 0, $1251 = 0, $1252 = 0, $1253 = 0, $1254 = 0, $1255 = 0;
- var $1256 = 0, $1257 = 0, $1258 = 0, $1259 = 0, $126 = 0, $1260 = 0, $1261 = 0, $1262 = 0, $1263 = 0, $1264 = 0, $1265 = 0, $1266 = 0, $1267 = 0, $1268 = 0, $1269 = 0, $127 = 0, $1270 = 0, $1271 = 0, $1272 = 0, $1273 = 0;
- var $1274 = 0, $1275 = 0, $1276 = 0, $1277 = 0, $1278 = 0, $1279 = 0, $128 = 0, $1280 = 0, $1281 = 0, $1282 = 0, $1283 = 0, $1284 = 0, $1285 = 0, $1286 = 0, $1287 = 0, $1288 = 0, $1289 = 0, $129 = 0, $1290 = 0, $1291 = 0;
- var $1292 = 0, $1293 = 0, $1294 = 0, $1295 = 0, $1296 = 0, $1297 = 0, $1298 = 0, $1299 = 0, $13 = 0, $130 = 0, $1300 = 0, $1301 = 0, $1302 = 0, $1303 = 0, $1304 = 0, $1305 = 0, $1306 = 0, $1307 = 0, $1308 = 0, $1309 = 0;
- var $131 = 0, $1310 = 0, $1311 = 0, $1312 = 0, $1313 = 0, $1314 = 0, $1315 = 0, $1316 = 0, $1317 = 0, $1318 = 0, $1319 = 0, $132 = 0, $1320 = 0, $1321 = 0, $1322 = 0, $1323 = 0, $1324 = 0, $1325 = 0, $1326 = 0, $1327 = 0;
- var $1328 = 0, $1329 = 0, $133 = 0, $1330 = 0, $1331 = 0, $1332 = 0, $1333 = 0, $1334 = 0, $1335 = 0, $1336 = 0, $1337 = 0, $1338 = 0, $1339 = 0, $134 = 0, $1340 = 0, $1341 = 0, $1342 = 0, $1343 = 0, $1344 = 0, $1345 = 0;
- var $1346 = 0, $1347 = 0, $1348 = 0, $1349 = 0, $135 = 0, $1350 = 0, $1351 = 0, $1352 = 0, $1353 = 0, $1354 = 0, $1355 = 0, $1356 = 0, $1357 = 0, $1358 = 0, $1359 = 0, $136 = 0, $1360 = 0, $1361 = 0, $1362 = 0, $1363 = 0;
- var $1364 = 0, $1365 = 0, $1366 = 0, $1367 = 0, $1368 = 0, $1369 = 0, $137 = 0, $1370 = 0, $1371 = 0, $1372 = 0, $1373 = 0, $1374 = 0, $1375 = 0, $1376 = 0, $1377 = 0, $1378 = 0, $1379 = 0, $138 = 0, $1380 = 0, $1381 = 0;
- var $1382 = 0, $1383 = 0, $1384 = 0, $1385 = 0, $1386 = 0, $1387 = 0, $1388 = 0, $1389 = 0, $139 = 0, $1390 = 0, $1391 = 0, $1392 = 0, $1393 = 0, $1394 = 0, $1395 = 0, $1396 = 0, $1397 = 0, $1398 = 0, $1399 = 0, $14 = 0;
- var $140 = 0, $1400 = 0, $1401 = 0, $1402 = 0, $1403 = 0, $1404 = 0, $1405 = 0, $1406 = 0, $1407 = 0, $1408 = 0, $1409 = 0, $141 = 0, $1410 = 0, $1411 = 0, $1412 = 0, $1413 = 0, $1414 = 0, $1415 = 0, $1416 = 0, $1417 = 0;
- var $1418 = 0, $1419 = 0, $142 = 0, $1420 = 0, $1421 = 0, $1422 = 0, $1423 = 0, $1424 = 0, $1425 = 0, $1426 = 0, $1427 = 0, $1428 = 0, $1429 = 0, $143 = 0, $1430 = 0, $1431 = 0, $1432 = 0, $1433 = 0, $1434 = 0, $1435 = 0;
- var $1436 = 0, $1437 = 0, $1438 = 0, $1439 = 0, $144 = 0, $1440 = 0, $1441 = 0, $1442 = 0, $1443 = 0, $1444 = 0, $1445 = 0, $1446 = 0, $1447 = 0, $1448 = 0, $1449 = 0, $145 = 0, $1450 = 0, $1451 = 0, $1452 = 0, $1453 = 0;
- var $1454 = 0, $1455 = 0, $1456 = 0, $1457 = 0, $1458 = 0, $1459 = 0, $146 = 0, $1460 = 0, $1461 = 0, $1462 = 0, $1463 = 0, $1464 = 0, $1465 = 0, $1466 = 0, $1467 = 0, $1468 = 0, $1469 = 0, $147 = 0, $1470 = 0, $1471 = 0;
- var $1472 = 0, $1473 = 0, $1474 = 0, $1475 = 0, $1476 = 0, $1477 = 0, $1478 = 0, $1479 = 0, $148 = 0, $1480 = 0, $1481 = 0, $1482 = 0, $1483 = 0, $1484 = 0, $1485 = 0, $1486 = 0, $1487 = 0, $1488 = 0, $1489 = 0, $149 = 0;
- var $1490 = 0, $1491 = 0, $1492 = 0, $1493 = 0, $1494 = 0, $1495 = 0, $1496 = 0, $1497 = 0, $1498 = 0, $1499 = 0, $15 = 0, $150 = 0, $1500 = 0, $1501 = 0, $1502 = 0, $1503 = 0, $1504 = 0, $1505 = 0, $1506 = 0, $1507 = 0;
- var $1508 = 0, $1509 = 0, $151 = 0, $1510 = 0, $1511 = 0, $1512 = 0, $1513 = 0, $1514 = 0, $1515 = 0, $1516 = 0, $1517 = 0, $1518 = 0, $1519 = 0, $152 = 0, $1520 = 0, $1521 = 0, $1522 = 0, $1523 = 0, $1524 = 0, $1525 = 0;
- var $1526 = 0, $1527 = 0, $1528 = 0, $1529 = 0, $153 = 0, $1530 = 0, $1531 = 0, $1532 = 0, $1533 = 0, $1534 = 0, $1535 = 0, $1536 = 0, $1537 = 0, $1538 = 0, $1539 = 0, $154 = 0, $1540 = 0, $1541 = 0, $1542 = 0, $1543 = 0;
- var $1544 = 0, $1545 = 0, $1546 = 0, $1547 = 0, $1548 = 0, $1549 = 0, $155 = 0, $1550 = 0, $1551 = 0, $1552 = 0, $1553 = 0, $1554 = 0, $1555 = 0, $1556 = 0, $1557 = 0, $1558 = 0, $1559 = 0, $156 = 0, $1560 = 0, $1561 = 0;
- var $1562 = 0, $1563 = 0, $1564 = 0, $1565 = 0, $1566 = 0, $1567 = 0, $1568 = 0, $1569 = 0, $157 = 0, $1570 = 0, $1571 = 0, $1572 = 0, $1573 = 0, $1574 = 0, $1575 = 0, $1576 = 0, $1577 = 0, $1578 = 0, $1579 = 0, $158 = 0;
- var $1580 = 0, $1581 = 0, $1582 = 0, $1583 = 0, $1584 = 0, $1585 = 0, $1586 = 0, $1587 = 0, $1588 = 0, $1589 = 0, $159 = 0, $1590 = 0, $1591 = 0, $1592 = 0, $1593 = 0, $1594 = 0, $1595 = 0, $1596 = 0, $1597 = 0, $1598 = 0;
- var $1599 = 0, $16 = 0, $160 = 0, $1600 = 0, $1601 = 0, $1602 = 0, $1603 = 0, $1604 = 0, $1605 = 0, $1606 = 0, $1607 = 0, $1608 = 0, $1609 = 0, $161 = 0, $1610 = 0, $1611 = 0, $1612 = 0, $1613 = 0, $1614 = 0, $1615 = 0;
- var $1616 = 0, $1617 = 0, $1618 = 0, $1619 = 0, $162 = 0, $1620 = 0, $1621 = 0, $1622 = 0, $1623 = 0, $1624 = 0, $1625 = 0, $1626 = 0, $1627 = 0, $1628 = 0, $1629 = 0, $163 = 0, $1630 = 0, $1631 = 0, $1632 = 0, $1633 = 0;
- var $1634 = 0, $1635 = 0, $1636 = 0, $1637 = 0, $1638 = 0, $1639 = 0, $164 = 0, $1640 = 0, $1641 = 0, $1642 = 0, $1643 = 0, $1644 = 0, $1645 = 0, $1646 = 0, $1647 = 0, $1648 = 0, $1649 = 0, $165 = 0, $1650 = 0, $1651 = 0;
- var $1652 = 0, $1653 = 0, $1654 = 0, $1655 = 0, $1656 = 0, $1657 = 0, $1658 = 0, $1659 = 0, $166 = 0, $1660 = 0, $1661 = 0, $1662 = 0, $1663 = 0, $1664 = 0, $1665 = 0, $1666 = 0, $1667 = 0, $1668 = 0, $1669 = 0, $167 = 0;
- var $1670 = 0, $1671 = 0, $1672 = 0, $1673 = 0, $1674 = 0, $1675 = 0, $1676 = 0, $1677 = 0, $1678 = 0, $1679 = 0, $168 = 0, $1680 = 0, $1681 = 0, $1682 = 0, $1683 = 0, $1684 = 0, $1685 = 0, $1686 = 0, $1687 = 0, $1688 = 0;
- var $1689 = 0, $169 = 0, $1690 = 0, $1691 = 0, $1692 = 0, $1693 = 0, $1694 = 0, $1695 = 0, $1696 = 0, $1697 = 0, $1698 = 0, $1699 = 0, $17 = 0, $170 = 0, $1700 = 0, $1701 = 0, $1702 = 0, $1703 = 0, $1704 = 0, $1705 = 0;
- var $1706 = 0, $1707 = 0, $1708 = 0, $1709 = 0, $171 = 0, $1710 = 0, $1711 = 0, $1712 = 0, $1713 = 0, $1714 = 0, $1715 = 0, $1716 = 0, $1717 = 0, $1718 = 0, $1719 = 0, $172 = 0, $1720 = 0, $1721 = 0, $1722 = 0, $1723 = 0;
- var $1724 = 0, $1725 = 0, $1726 = 0, $1727 = 0, $1728 = 0, $1729 = 0, $173 = 0, $1730 = 0, $1731 = 0, $1732 = 0, $1733 = 0, $1734 = 0, $1735 = 0, $1736 = 0, $1737 = 0, $1738 = 0, $1739 = 0, $174 = 0, $1740 = 0, $1741 = 0;
- var $1742 = 0, $1743 = 0, $1744 = 0, $1745 = 0, $1746 = 0, $1747 = 0, $1748 = 0, $1749 = 0, $175 = 0, $1750 = 0, $1751 = 0, $1752 = 0, $1753 = 0, $1754 = 0, $1755 = 0, $1756 = 0, $1757 = 0, $1758 = 0, $1759 = 0, $176 = 0;
- var $1760 = 0, $1761 = 0, $1762 = 0, $1763 = 0, $1764 = 0, $1765 = 0, $1766 = 0, $1767 = 0, $1768 = 0, $1769 = 0, $177 = 0, $1770 = 0, $1771 = 0, $1772 = 0, $1773 = 0, $1774 = 0, $1775 = 0, $1776 = 0, $1777 = 0, $1778 = 0;
- var $1779 = 0, $178 = 0, $1780 = 0, $1781 = 0, $1782 = 0, $1783 = 0, $1784 = 0, $1785 = 0, $1786 = 0, $1787 = 0, $1788 = 0, $1789 = 0, $179 = 0, $1790 = 0, $1791 = 0, $1792 = 0, $1793 = 0, $1794 = 0, $1795 = 0, $1796 = 0;
- var $1797 = 0, $1798 = 0, $1799 = 0, $18 = 0.0, $180 = 0, $1800 = 0, $1801 = 0, $1802 = 0, $1803 = 0, $1804 = 0, $1805 = 0, $1806 = 0, $1807 = 0, $1808 = 0, $1809 = 0, $181 = 0, $1810 = 0, $1811 = 0, $1812 = 0, $1813 = 0;
- var $1814 = 0, $1815 = 0, $1816 = 0, $1817 = 0, $1818 = 0, $1819 = 0, $182 = 0, $1820 = 0, $1821 = 0, $1822 = 0, $1823 = 0, $1824 = 0, $1825 = 0, $1826 = 0, $1827 = 0, $1828 = 0, $1829 = 0, $183 = 0, $1830 = 0, $1831 = 0;
- var $1832 = 0, $1833 = 0, $1834 = 0, $1835 = 0, $1836 = 0, $1837 = 0, $1838 = 0, $1839 = 0, $184 = 0, $1840 = 0, $1841 = 0, $1842 = 0, $1843 = 0, $1844 = 0, $1845 = 0, $1846 = 0, $1847 = 0, $1848 = 0, $1849 = 0, $185 = 0;
- var $1850 = 0, $1851 = 0, $1852 = 0, $1853 = 0, $1854 = 0, $1855 = 0, $1856 = 0, $1857 = 0, $1858 = 0, $1859 = 0, $186 = 0, $1860 = 0, $1861 = 0, $1862 = 0, $1863 = 0, $1864 = 0, $1865 = 0, $1866 = 0, $1867 = 0, $1868 = 0;
- var $1869 = 0, $187 = 0, $1870 = 0, $1871 = 0, $1872 = 0, $1873 = 0, $1874 = 0, $1875 = 0, $1876 = 0, $1877 = 0, $1878 = 0, $1879 = 0, $188 = 0, $1880 = 0, $1881 = 0, $1882 = 0, $1883 = 0, $1884 = 0, $1885 = 0, $1886 = 0;
- var $1887 = 0, $1888 = 0, $1889 = 0, $189 = 0, $1890 = 0, $1891 = 0, $1892 = 0, $1893 = 0, $1894 = 0, $1895 = 0, $1896 = 0, $1897 = 0, $1898 = 0, $1899 = 0, $19 = 0, $190 = 0, $1900 = 0, $1901 = 0, $1902 = 0, $1903 = 0;
- var $1904 = 0, $1905 = 0, $1906 = 0, $1907 = 0, $1908 = 0, $1909 = 0, $191 = 0, $1910 = 0, $1911 = 0, $1912 = 0, $1913 = 0, $1914 = 0, $1915 = 0, $1916 = 0, $1917 = 0, $1918 = 0, $1919 = 0, $192 = 0, $1920 = 0, $1921 = 0;
- var $1922 = 0, $1923 = 0, $1924 = 0, $1925 = 0, $1926 = 0, $1927 = 0, $1928 = 0, $1929 = 0, $193 = 0, $1930 = 0, $1931 = 0, $1932 = 0, $1933 = 0, $1934 = 0, $1935 = 0, $1936 = 0, $1937 = 0, $1938 = 0, $1939 = 0, $194 = 0;
- var $1940 = 0, $1941 = 0, $1942 = 0, $1943 = 0, $1944 = 0, $1945 = 0, $1946 = 0, $1947 = 0, $1948 = 0, $1949 = 0, $195 = 0, $1950 = 0, $1951 = 0, $1952 = 0, $1953 = 0, $1954 = 0, $1955 = 0, $1956 = 0, $1957 = 0, $1958 = 0;
- var $1959 = 0, $196 = 0, $1960 = 0, $1961 = 0, $1962 = 0, $1963 = 0, $1964 = 0, $1965 = 0, $1966 = 0, $1967 = 0, $1968 = 0, $1969 = 0, $197 = 0, $1970 = 0, $1971 = 0, $1972 = 0, $1973 = 0, $1974 = 0, $1975 = 0, $1976 = 0;
- var $1977 = 0, $1978 = 0, $1979 = 0, $198 = 0, $1980 = 0, $1981 = 0, $1982 = 0, $1983 = 0, $1984 = 0, $1985 = 0, $1986 = 0, $1987 = 0, $1988 = 0, $1989 = 0, $199 = 0, $1990 = 0, $1991 = 0, $1992 = 0, $1993 = 0, $1994 = 0;
- var $1995 = 0, $1996 = 0, $1997 = 0, $1998 = 0, $1999 = 0, $2 = 0, $20 = 0, $200 = 0, $2000 = 0, $2001 = 0, $2002 = 0, $2003 = 0, $2004 = 0, $2005 = 0, $2006 = 0, $2007 = 0, $2008 = 0, $2009 = 0, $201 = 0, $2010 = 0;
- var $2011 = 0, $2012 = 0, $2013 = 0, $2014 = 0, $2015 = 0, $2016 = 0, $2017 = 0, $2018 = 0, $2019 = 0, $202 = 0, $2020 = 0, $2021 = 0, $2022 = 0, $2023 = 0, $2024 = 0, $2025 = 0, $2026 = 0, $2027 = 0, $2028 = 0, $2029 = 0;
- var $203 = 0, $204 = 0, $205 = 0, $206 = 0, $207 = 0, $208 = 0, $209 = 0, $21 = 0, $210 = 0, $211 = 0, $212 = 0, $213 = 0, $214 = 0, $215 = 0, $216 = 0, $217 = 0, $218 = 0, $219 = 0, $22 = 0, $220 = 0;
- var $221 = 0, $222 = 0, $223 = 0, $224 = 0, $225 = 0, $226 = 0, $227 = 0, $228 = 0, $229 = 0, $23 = 0, $230 = 0, $231 = 0, $232 = 0, $233 = 0, $234 = 0, $235 = 0, $236 = 0, $237 = 0, $238 = 0, $239 = 0;
- var $24 = 0, $240 = 0, $241 = 0, $242 = 0, $243 = 0, $244 = 0, $245 = 0, $246 = 0, $247 = 0, $248 = 0, $249 = 0, $25 = 0, $250 = 0, $251 = 0, $252 = 0, $253 = 0, $254 = 0, $255 = 0, $256 = 0, $257 = 0;
- var $258 = 0, $259 = 0, $26 = 0, $260 = 0, $261 = 0, $262 = 0, $263 = 0, $264 = 0, $265 = 0, $266 = 0, $267 = 0, $268 = 0, $269 = 0, $27 = 0, $270 = 0, $271 = 0, $272 = 0, $273 = 0, $274 = 0, $275 = 0;
- var $276 = 0, $277 = 0, $278 = 0, $279 = 0, $28 = 0, $280 = 0, $281 = 0, $282 = 0, $283 = 0, $284 = 0, $285 = 0, $286 = 0, $287 = 0, $288 = 0, $289 = 0, $29 = 0, $290 = 0, $291 = 0, $292 = 0, $293 = 0;
- var $294 = 0, $295 = 0, $296 = 0, $297 = 0, $298 = 0, $299 = 0, $3 = 0, $30 = 0, $300 = 0, $301 = 0, $302 = 0, $303 = 0, $304 = 0, $305 = 0, $306 = 0, $307 = 0, $308 = 0, $309 = 0, $31 = 0, $310 = 0;
- var $311 = 0, $312 = 0, $313 = 0, $314 = 0, $315 = 0, $316 = 0, $317 = 0, $318 = 0, $319 = 0, $32 = 0, $320 = 0, $321 = 0, $322 = 0, $323 = 0, $324 = 0, $325 = 0, $326 = 0, $327 = 0, $328 = 0, $329 = 0;
- var $33 = 0, $330 = 0, $331 = 0, $332 = 0, $333 = 0, $334 = 0, $335 = 0, $336 = 0, $337 = 0, $338 = 0, $339 = 0, $34 = 0, $340 = 0, $341 = 0, $342 = 0, $343 = 0, $344 = 0, $345 = 0, $346 = 0, $347 = 0;
- var $348 = 0, $349 = 0, $35 = 0, $350 = 0, $351 = 0, $352 = 0, $353 = 0, $354 = 0, $355 = 0, $356 = 0, $357 = 0, $358 = 0, $359 = 0, $36 = 0, $360 = 0, $361 = 0, $362 = 0, $363 = 0, $364 = 0, $365 = 0;
- var $366 = 0, $367 = 0, $368 = 0, $369 = 0, $37 = 0, $370 = 0, $371 = 0, $372 = 0, $373 = 0, $374 = 0, $375 = 0, $376 = 0, $377 = 0, $378 = 0, $379 = 0, $38 = 0, $380 = 0, $381 = 0, $382 = 0, $383 = 0;
- var $384 = 0, $385 = 0, $386 = 0, $387 = 0, $388 = 0, $389 = 0, $39 = 0, $390 = 0, $391 = 0, $392 = 0, $393 = 0, $394 = 0, $395 = 0, $396 = 0, $397 = 0, $398 = 0, $399 = 0, $4 = 0, $40 = 0, $400 = 0;
- var $401 = 0, $402 = 0, $403 = 0, $404 = 0, $405 = 0, $406 = 0, $407 = 0, $408 = 0, $409 = 0, $41 = 0, $410 = 0, $411 = 0, $412 = 0, $413 = 0, $414 = 0, $415 = 0, $416 = 0, $417 = 0, $418 = 0, $419 = 0;
- var $42 = 0, $420 = 0, $421 = 0, $422 = 0, $423 = 0, $424 = 0, $425 = 0, $426 = 0, $427 = 0, $428 = 0, $429 = 0, $43 = 0, $430 = 0, $431 = 0, $432 = 0, $433 = 0, $434 = 0, $435 = 0, $436 = 0, $437 = 0;
- var $438 = 0, $439 = 0, $44 = 0, $440 = 0, $441 = 0, $442 = 0, $443 = 0, $444 = 0, $445 = 0, $446 = 0, $447 = 0, $448 = 0, $449 = 0, $45 = 0, $450 = 0, $451 = 0, $452 = 0, $453 = 0, $454 = 0, $455 = 0;
- var $456 = 0, $457 = 0, $458 = 0, $459 = 0, $46 = 0, $460 = 0, $461 = 0, $462 = 0, $463 = 0, $464 = 0, $465 = 0, $466 = 0, $467 = 0, $468 = 0, $469 = 0, $47 = 0, $470 = 0, $471 = 0, $472 = 0, $473 = 0;
- var $474 = 0, $475 = 0, $476 = 0, $477 = 0, $478 = 0, $479 = 0, $48 = 0, $480 = 0, $481 = 0, $482 = 0, $483 = 0, $484 = 0, $485 = 0, $486 = 0, $487 = 0, $488 = 0, $489 = 0, $49 = 0, $490 = 0, $491 = 0;
- var $492 = 0, $493 = 0, $494 = 0, $495 = 0, $496 = 0, $497 = 0, $498 = 0, $499 = 0, $5 = 0, $50 = 0, $500 = 0, $501 = 0, $502 = 0, $503 = 0, $504 = 0, $505 = 0, $506 = 0, $507 = 0, $508 = 0, $509 = 0;
- var $51 = 0, $510 = 0, $511 = 0, $512 = 0, $513 = 0, $514 = 0, $515 = 0, $516 = 0, $517 = 0, $518 = 0, $519 = 0, $52 = 0, $520 = 0, $521 = 0, $522 = 0, $523 = 0, $524 = 0, $525 = 0, $526 = 0, $527 = 0;
- var $528 = 0, $529 = 0, $53 = 0, $530 = 0, $531 = 0, $532 = 0, $533 = 0, $534 = 0, $535 = 0, $536 = 0, $537 = 0, $538 = 0, $539 = 0, $54 = 0, $540 = 0, $541 = 0, $542 = 0, $543 = 0, $544 = 0, $545 = 0;
- var $546 = 0, $547 = 0, $548 = 0, $549 = 0, $55 = 0, $550 = 0, $551 = 0, $552 = 0, $553 = 0, $554 = 0, $555 = 0, $556 = 0, $557 = 0, $558 = 0, $559 = 0, $56 = 0, $560 = 0, $561 = 0, $562 = 0, $563 = 0;
- var $564 = 0, $565 = 0, $566 = 0, $567 = 0, $568 = 0, $569 = 0, $57 = 0, $570 = 0, $571 = 0, $572 = 0, $573 = 0, $574 = 0, $575 = 0, $576 = 0, $577 = 0, $578 = 0, $579 = 0, $58 = 0, $580 = 0, $581 = 0;
- var $582 = 0, $583 = 0, $584 = 0, $585 = 0, $586 = 0, $587 = 0, $588 = 0, $589 = 0, $59 = 0, $590 = 0, $591 = 0, $592 = 0, $593 = 0, $594 = 0, $595 = 0, $596 = 0, $597 = 0, $598 = 0, $599 = 0, $6 = 0;
- var $60 = 0, $600 = 0, $601 = 0, $602 = 0, $603 = 0, $604 = 0, $605 = 0, $606 = 0, $607 = 0, $608 = 0, $609 = 0, $61 = 0, $610 = 0, $611 = 0, $612 = 0, $613 = 0, $614 = 0, $615 = 0, $616 = 0, $617 = 0;
- var $618 = 0, $619 = 0, $62 = 0, $620 = 0, $621 = 0, $622 = 0, $623 = 0, $624 = 0, $625 = 0, $626 = 0, $627 = 0, $628 = 0, $629 = 0, $63 = 0, $630 = 0, $631 = 0, $632 = 0, $633 = 0, $634 = 0, $635 = 0;
- var $636 = 0, $637 = 0, $638 = 0, $639 = 0, $64 = 0, $640 = 0, $641 = 0, $642 = 0, $643 = 0, $644 = 0, $645 = 0, $646 = 0, $647 = 0, $648 = 0, $649 = 0, $65 = 0, $650 = 0, $651 = 0, $652 = 0, $653 = 0;
- var $654 = 0, $655 = 0, $656 = 0, $657 = 0, $658 = 0, $659 = 0, $66 = 0, $660 = 0, $661 = 0, $662 = 0, $663 = 0, $664 = 0, $665 = 0, $666 = 0, $667 = 0, $668 = 0, $669 = 0, $67 = 0, $670 = 0, $671 = 0;
- var $672 = 0, $673 = 0, $674 = 0, $675 = 0, $676 = 0, $677 = 0, $678 = 0, $679 = 0, $68 = 0, $680 = 0, $681 = 0, $682 = 0, $683 = 0, $684 = 0, $685 = 0, $686 = 0, $687 = 0, $688 = 0, $689 = 0, $69 = 0;
- var $690 = 0, $691 = 0, $692 = 0, $693 = 0, $694 = 0, $695 = 0, $696 = 0, $697 = 0, $698 = 0, $699 = 0, $7 = 0, $70 = 0, $700 = 0, $701 = 0, $702 = 0, $703 = 0, $704 = 0, $705 = 0, $706 = 0, $707 = 0;
- var $708 = 0, $709 = 0, $71 = 0, $710 = 0, $711 = 0, $712 = 0, $713 = 0, $714 = 0, $715 = 0, $716 = 0, $717 = 0, $718 = 0, $719 = 0, $72 = 0, $720 = 0, $721 = 0, $722 = 0, $723 = 0, $724 = 0, $725 = 0;
- var $726 = 0, $727 = 0, $728 = 0, $729 = 0, $73 = 0, $730 = 0, $731 = 0, $732 = 0, $733 = 0, $734 = 0, $735 = 0, $736 = 0, $737 = 0, $738 = 0, $739 = 0, $74 = 0, $740 = 0, $741 = 0, $742 = 0, $743 = 0;
- var $744 = 0, $745 = 0, $746 = 0, $747 = 0, $748 = 0, $749 = 0, $75 = 0, $750 = 0, $751 = 0, $752 = 0, $753 = 0, $754 = 0, $755 = 0, $756 = 0, $757 = 0, $758 = 0, $759 = 0, $76 = 0, $760 = 0, $761 = 0;
- var $762 = 0, $763 = 0, $764 = 0, $765 = 0, $766 = 0, $767 = 0, $768 = 0, $769 = 0, $77 = 0, $770 = 0, $771 = 0, $772 = 0, $773 = 0, $774 = 0, $775 = 0, $776 = 0, $777 = 0, $778 = 0, $779 = 0, $78 = 0;
- var $780 = 0, $781 = 0, $782 = 0, $783 = 0, $784 = 0, $785 = 0, $786 = 0, $787 = 0, $788 = 0, $789 = 0, $79 = 0, $790 = 0, $791 = 0, $792 = 0, $793 = 0, $794 = 0, $795 = 0, $796 = 0, $797 = 0, $798 = 0;
- var $799 = 0, $8 = 0, $80 = 0, $800 = 0, $801 = 0, $802 = 0, $803 = 0, $804 = 0, $805 = 0, $806 = 0, $807 = 0, $808 = 0, $809 = 0, $81 = 0, $810 = 0, $811 = 0, $812 = 0, $813 = 0, $814 = 0, $815 = 0;
- var $816 = 0, $817 = 0, $818 = 0, $819 = 0, $82 = 0, $820 = 0, $821 = 0, $822 = 0, $823 = 0, $824 = 0, $825 = 0, $826 = 0, $827 = 0, $828 = 0, $829 = 0, $83 = 0, $830 = 0, $831 = 0, $832 = 0, $833 = 0;
- var $834 = 0, $835 = 0, $836 = 0, $837 = 0, $838 = 0, $839 = 0, $84 = 0, $840 = 0, $841 = 0, $842 = 0, $843 = 0, $844 = 0, $845 = 0, $846 = 0, $847 = 0, $848 = 0, $849 = 0, $85 = 0, $850 = 0, $851 = 0;
- var $852 = 0, $853 = 0, $854 = 0, $855 = 0, $856 = 0, $857 = 0, $858 = 0, $859 = 0, $86 = 0, $860 = 0, $861 = 0, $862 = 0, $863 = 0, $864 = 0, $865 = 0, $866 = 0, $867 = 0, $868 = 0, $869 = 0, $87 = 0;
- var $870 = 0, $871 = 0, $872 = 0, $873 = 0, $874 = 0, $875 = 0, $876 = 0, $877 = 0, $878 = 0, $879 = 0, $88 = 0, $880 = 0, $881 = 0, $882 = 0, $883 = 0, $884 = 0, $885 = 0, $886 = 0, $887 = 0, $888 = 0;
- var $889 = 0, $89 = 0, $890 = 0, $891 = 0, $892 = 0, $893 = 0, $894 = 0, $895 = 0, $896 = 0, $897 = 0, $898 = 0, $899 = 0, $9 = 0, $90 = 0, $900 = 0, $901 = 0, $902 = 0, $903 = 0, $904 = 0, $905 = 0;
- var $906 = 0, $907 = 0, $908 = 0, $909 = 0, $91 = 0, $910 = 0, $911 = 0, $912 = 0, $913 = 0, $914 = 0, $915 = 0, $916 = 0, $917 = 0, $918 = 0, $919 = 0, $92 = 0, $920 = 0, $921 = 0, $922 = 0, $923 = 0;
- var $924 = 0, $925 = 0, $926 = 0, $927 = 0, $928 = 0, $929 = 0, $93 = 0, $930 = 0, $931 = 0, $932 = 0, $933 = 0, $934 = 0, $935 = 0, $936 = 0, $937 = 0, $938 = 0, $939 = 0, $94 = 0, $940 = 0, $941 = 0;
- var $942 = 0, $943 = 0, $944 = 0, $945 = 0, $946 = 0, $947 = 0, $948 = 0, $949 = 0, $95 = 0, $950 = 0, $951 = 0, $952 = 0, $953 = 0, $954 = 0, $955 = 0, $956 = 0, $957 = 0, $958 = 0, $959 = 0, $96 = 0;
- var $960 = 0, $961 = 0, $962 = 0, $963 = 0, $964 = 0, $965 = 0, $966 = 0, $967 = 0, $968 = 0, $969 = 0, $97 = 0, $970 = 0, $971 = 0, $972 = 0, $973 = 0, $974 = 0, $975 = 0, $976 = 0, $977 = 0, $978 = 0;
- var $979 = 0, $98 = 0, $980 = 0, $981 = 0, $982 = 0, $983 = 0, $984 = 0, $985 = 0, $986 = 0, $987 = 0, $988 = 0, $989 = 0, $99 = 0, $990 = 0, $991 = 0, $992 = 0, $993 = 0, $994 = 0, $995 = 0, $996 = 0;
- var $997 = 0, $998 = 0, $999 = 0, $or$cond = 0, $or$cond$not = 0, $or$cond102 = 0, $or$cond106 = 0, $or$cond109 = 0, $or$cond11 = 0, $or$cond112 = 0, $or$cond112$not = 0, $or$cond115 = 0, $or$cond117 = 0, $or$cond129 = 0, $or$cond132 = 0, $or$cond135 = 0, $or$cond138 = 0, $or$cond138$not = 0, $or$cond141 = 0, $or$cond143 = 0;
- var $or$cond149 = 0, $or$cond149$not = 0, $or$cond152 = 0, $or$cond155 = 0, $or$cond155$not = 0, $or$cond158 = 0, $or$cond161 = 0, $or$cond161$not = 0, $or$cond164 = 0, $or$cond167 = 0, $or$cond167$not = 0, $or$cond17 = 0, $or$cond170 = 0, $or$cond173 = 0, $or$cond178 = 0, $or$cond181 = 0, $or$cond184 = 0, $or$cond187 = 0, $or$cond190 = 0, $or$cond193 = 0;
- var $or$cond198 = 0, $or$cond24 = 0, $or$cond27 = 0, $or$cond30 = 0, $or$cond30$not = 0, $or$cond33 = 0, $or$cond35 = 0, $or$cond4 = 0, $or$cond44 = 0, $or$cond44$not = 0, $or$cond47 = 0, $or$cond49 = 0, $or$cond52 = 0, $or$cond52$not = 0, $or$cond55 = 0, $or$cond57 = 0, $or$cond6 = 0, $or$cond60 = 0, $or$cond63 = 0, $or$cond66 = 0;
- var $or$cond69 = 0, $or$cond72 = 0, $or$cond75 = 0, $or$cond78 = 0, $or$cond81 = 0, $or$cond84 = 0, $or$cond87 = 0, $or$cond90 = 0, $or$cond93 = 0, $or$cond96 = 0, $or$cond99 = 0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 368|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(368|0);
- $vararg_buffer = sp + 8|0;
- $10 = sp + 112|0;
- $19 = sp + 40|0;
- $2 = $0;
- $4 = 0;
- $27 = $2;
- $28 = ((($27)) + 44|0);
- $29 = HEAP32[$28>>2]|0;
- $30 = ($29|0)!=(0|0);
- if ($30) {
-  $31 = $2;
-  $32 = ((($31)) + 44|0);
-  $33 = HEAP32[$32>>2]|0;
-  $34 = HEAP32[$33>>2]|0;
-  $35 = $34;
-  $36 = $35 & 64;
-  $37 = ($36|0)!=(0);
-  $38 = $2;
-  if (!($37)) {
-   $44 = (_parse_string($38)|0);
-   $1 = $44;
-   $2029 = $1;
-   STACKTOP = sp;return ($2029|0);
-  }
-  $39 = ((($38)) + 1120|0);
-  $40 = HEAP32[$39>>2]|0;
-  $41 = ($40|0)!=(0|0);
-  if ($41) {
-   $42 = $2;
-   $43 = (_parse_string($42)|0);
-   $1 = $43;
-   $2029 = $1;
-   STACKTOP = sp;return ($2029|0);
-  }
- }
- $45 = $2;
- $46 = ((($45)) + 72|0);
- $47 = HEAP8[$46>>0]|0;
- $48 = $47 & 1;
- $49 = $48&255;
- $5 = $49;
- $50 = $2;
- $51 = ((($50)) + 72|0);
- $52 = HEAP8[$51>>0]|0;
- $53 = $52 & -2;
- HEAP8[$51>>0] = $53;
- L10: while(1) {
-  $54 = $2;
-  $55 = ((($54)) + 40|0);
-  $56 = HEAP32[$55>>2]|0;
-  $6 = $56;
-  $57 = $2;
-  $58 = (_nextc($57)|0);
-  $3 = $58;
-  switch ($58|0) {
-  case 42:  {
-   label = 25;
-   break L10;
-   break;
-  }
-  case 33:  {
-   label = 47;
-   break L10;
-   break;
-  }
-  case 60:  {
-   label = 82;
-   break L10;
-   break;
-  }
-  case 62:  {
-   label = 107;
-   break L10;
-   break;
-  }
-  case 34:  {
-   label = 118;
-   break L10;
-   break;
-  }
-  case 39:  {
-   label = 119;
-   break L10;
-   break;
-  }
-  case 96:  {
-   label = 120;
-   break L10;
-   break;
-  }
-  case 63:  {
-   label = 125;
-   break L10;
-   break;
-  }
-  case 38:  {
-   label = 152;
-   break L10;
-   break;
-  }
-  case 124:  {
-   label = 174;
-   break L10;
-   break;
-  }
-  case 43:  {
-   label = 185;
-   break L10;
-   break;
-  }
-  case 45:  {
-   label = 206;
-   break L10;
-   break;
-  }
-  case 46:  {
-   label = 229;
-   break L10;
-   break;
-  }
-  case 57: case 56: case 55: case 54: case 53: case 52: case 51: case 50: case 49: case 48:  {
-   label = 237;
-   break L10;
-   break;
-  }
-  case 93: case 41:  {
-   label = 329;
-   break L10;
-   break;
-  }
-  case 125:  {
-   label = 330;
-   break L10;
-   break;
-  }
-  case 58:  {
-   label = 331;
-   break L10;
-   break;
-  }
-  case 47:  {
-   label = 348;
-   break L10;
-   break;
-  }
-  case 94:  {
-   label = 365;
-   break L10;
-   break;
-  }
-  case 59:  {
-   label = 372;
-   break L10;
-   break;
-  }
-  case 44:  {
-   label = 373;
-   break L10;
-   break;
-  }
-  case 126:  {
-   label = 374;
-   break L10;
-   break;
-  }
-  case 40:  {
-   label = 381;
-   break L10;
-   break;
-  }
-  case 91:  {
-   label = 391;
-   break L10;
-   break;
-  }
-  case 123:  {
-   label = 408;
-   break L10;
-   break;
-  }
-  case 37:  {
-   label = 423;
-   break L10;
-   break;
-  }
-  case 36:  {
-   label = 467;
-   break L10;
-   break;
-  }
-  case 64:  {
-   label = 491;
-   break L10;
-   break;
-  }
-  case 95:  {
-   label = 506;
-   break L10;
-   break;
-  }
-  case -1: case 0: case 26: case 4:  {
-   $59 = $2;
-   $60 = ((($59)) + 1116|0);
-   $61 = HEAP32[$60>>2]|0;
-   $62 = ($61|0)!=(0|0);
-   if (!($62)) {
-    label = 9;
-    break L10;
-   }
-   break;
-  }
-  case 11: case 13: case 12: case 9: case 32:  {
-   $4 = 1;
-   continue L10;
-   break;
-  }
-  case 35:  {
-   $63 = $2;
-   _skip($63,10);
-   break;
-  }
-  case 10: case -2:  {
-   break;
-  }
-  case 61:  {
-   $197 = $2;
-   $198 = ((($197)) + 36|0);
-   $199 = HEAP32[$198>>2]|0;
-   $200 = ($199|0)==(1);
-   if (!($200)) {
-    label = 69;
-    break L10;
-   }
-   $201 = $2;
-   $202 = (_peeks($201,69214)|0);
-   $203 = ($202<<24>>24)!=(0);
-   if (!($203)) {
-    label = 69;
-    break L10;
-   }
-   $204 = $2;
-   $205 = (_peekc_n($204,5)|0);
-   $3 = $205;
-   $206 = $3;
-   $207 = ($206|0)<(0);
-   $208 = $3;
-   $209 = ($208|0)==(32);
-   $or$cond11 = $207 | $209;
-   if (!($or$cond11)) {
-    $210 = $3;
-    $211 = (($210) - 9)|0;
-    $212 = ($211>>>0)<(5);
-    if (!($212)) {
-     label = 69;
-     break L10;
-    }
-   }
-   while(1) {
-    $213 = $2;
-    $214 = (_skips($213,63011)|0);
-    $215 = ($214<<24>>24)!=(0);
-    $216 = $2;
-    if (!($215)) {
-     label = 62;
-     break L10;
-    }
-    $217 = (_nextc($216)|0);
-    $3 = $217;
-    $218 = $3;
-    $219 = ($218|0)<(0);
-    $220 = $3;
-    $221 = ($220|0)==(32);
-    $or$cond198 = $219 | $221;
-    if ($or$cond198) {
-     $226 = 1;
-    } else {
-     $222 = $3;
-     $223 = (($222) - 9)|0;
-     $224 = ($223>>>0)<(5);
-     $226 = $224;
-    }
-    $225 = $226 ^ 1;
-    if (!($225)) {
-     break;
-    }
-   }
-   $227 = $3;
-   $228 = ($227|0)!=(10);
-   if ($228) {
-    $229 = $2;
-    _skip($229,10);
-   }
-   $230 = $2;
-   $231 = ((($230)) + 32|0);
-   $232 = HEAP32[$231>>2]|0;
-   $233 = (($232) + 1)|0;
-   HEAP32[$231>>2] = $233;
-   $234 = $2;
-   $235 = ((($234)) + 36|0);
-   HEAP32[$235>>2] = 0;
-   continue L10;
-   break;
-  }
-  case 92:  {
-   $1431 = $2;
-   $1432 = (_nextc($1431)|0);
-   $3 = $1432;
-   $1433 = $3;
-   $1434 = ($1433|0)==(10);
-   $1435 = $2;
-   if (!($1434)) {
-    label = 422;
-    break L10;
-   }
-   $1436 = ((($1435)) + 32|0);
-   $1437 = HEAP32[$1436>>2]|0;
-   $1438 = (($1437) + 1)|0;
-   HEAP32[$1436>>2] = $1438;
-   $1439 = $2;
-   $1440 = ((($1439)) + 36|0);
-   HEAP32[$1440>>2] = 0;
-   $4 = 1;
-   continue L10;
-   break;
-  }
-  default: {
-   $1731 = $3;
-   $1732 = $1731 | 32;
-   $1733 = (($1732) - 97)|0;
-   $1734 = ($1733>>>0)<(26);
-   if ($1734) {
-    label = 510;
-    break L10;
-   }
-   $1735 = $3;
-   $1736 = (($1735) - 48)|0;
-   $1737 = ($1736>>>0)<(10);
-   $1738 = $3;
-   $1739 = ($1738|0)==(95);
-   $or$cond167 = $1737 | $1739;
-   $or$cond167$not = $or$cond167 ^ 1;
-   $1740 = $3;
-   $1741 = ($1740>>>0)<=(127);
-   $or$cond170 = $or$cond167$not & $1741;
-   if (!($or$cond170)) {
-    label = 510;
-    break L10;
-   }
-   $1742 = $2;
-   $1743 = $3;
-   _yyerror_i($1742,63639,$1743);
-   continue L10;
-  }
-  }
-  $64 = $2;
-  _heredoc_treat_nextline($64);
-  $65 = $2;
-  $66 = ((($65)) + 40|0);
-  $67 = HEAP32[$66>>2]|0;
-  switch ($67|0) {
-  case 10: case 9: case 8: case 7: case 0:  {
-   $68 = $2;
-   $69 = ((($68)) + 32|0);
-   $70 = HEAP32[$69>>2]|0;
-   $71 = (($70) + 1)|0;
-   HEAP32[$69>>2] = $71;
-   $72 = $2;
-   $73 = ((($72)) + 36|0);
-   HEAP32[$73>>2] = 0;
-   $74 = $2;
-   $75 = ((($74)) + 1120|0);
-   $76 = HEAP32[$75>>2]|0;
-   $77 = ($76|0)!=(0|0);
-   if (!($77)) {
-    continue L10;
-   }
-   $78 = $2;
-   $79 = ((($78)) + 44|0);
-   $80 = HEAP32[$79>>2]|0;
-   $81 = ($80|0)!=(0|0);
-   if ($81) {
-    label = 15;
-    break L10;
-   } else {
-    continue L10;
-   }
-   break;
-  }
-  default: {
-  }
-  }
-  $84 = $2;
-  $85 = ((($84)) + 1120|0);
-  $86 = HEAP32[$85>>2]|0;
-  $87 = ($86|0)!=(0|0);
-  if ($87) {
-   label = 17;
-   break;
-  }
-  L41: while(1) {
-   $88 = $2;
-   $89 = (_nextc($88)|0);
-   $3 = $89;
-   $90 = ($89|0)!=(0);
-   if (!($90)) {
-    label = 24;
-    break L10;
-   }
-   $91 = $3;
-   switch ($91|0) {
-   case -2: case -1:  {
-    label = 24;
-    break L10;
-    break;
-   }
-   case 46:  {
-    break L41;
-    break;
-   }
-   case 11: case 13: case 12: case 9: case 32:  {
-    break;
-   }
-   default: {
-    label = 23;
-    break L10;
-   }
-   }
-   $4 = 1;
-  }
-  $92 = $2;
-  $93 = (_nextc($92)|0);
-  $3 = $93;
-  $94 = ($93|0)!=(46);
-  if (!($94)) {
-   label = 24;
-   break;
-  }
-  $95 = $2;
-  $96 = $3;
-  _pushback($95,$96);
-  $97 = $2;
-  _pushback($97,46);
- }
- L47:  switch (label|0) {
-  case 9: {
-   $1 = 0;
-   $2029 = $1;
-   STACKTOP = sp;return ($2029|0);
-   break;
-  }
-  case 15: {
-   $82 = $2;
-   $83 = (_parse_string($82)|0);
-   $1 = $83;
-   $2029 = $1;
-   STACKTOP = sp;return ($2029|0);
-   break;
-  }
-  case 17: {
-   $1 = 10;
-   $2029 = $1;
-   STACKTOP = sp;return ($2029|0);
-   break;
-  }
-  case 23: {
-   $98 = $2;
-   $99 = $3;
-   _pushback($98,$99);
-   label = 24;
-   break;
-  }
-  case 25: {
-   $107 = $2;
-   $108 = (_nextc($107)|0);
-   $3 = $108;
-   $109 = ($108|0)==(42);
-   do {
-    if ($109) {
-     $110 = $2;
-     $111 = (_nextc($110)|0);
-     $3 = $111;
-     $112 = ($111|0)==(61);
-     $113 = $2;
-     if (!($112)) {
-      $120 = $3;
-      _pushback($113,$120);
-      $3 = 326;
-      break;
-     }
-     $114 = (_intern_gen($113,59540,2)|0);
-     $115 = $2;
-     $116 = ((($115)) + 1132|0);
-     $117 = HEAP32[$116>>2]|0;
-     HEAP32[$117>>2] = $114;
-     $118 = $2;
-     $119 = ((($118)) + 40|0);
-     HEAP32[$119>>2] = 0;
-     $1 = 345;
-     $2029 = $1;
-     STACKTOP = sp;return ($2029|0);
-    } else {
-     $121 = $3;
-     $122 = ($121|0)==(61);
-     $123 = $2;
-     if ($122) {
-      $124 = (_intern_gen_c($123,42)|0);
-      $125 = $2;
-      $126 = ((($125)) + 1132|0);
-      $127 = HEAP32[$126>>2]|0;
-      HEAP32[$127>>2] = $124;
-      $128 = $2;
-      $129 = ((($128)) + 40|0);
-      HEAP32[$129>>2] = 0;
-      $1 = 345;
-      $2029 = $1;
-      STACKTOP = sp;return ($2029|0);
-     }
-     $130 = $3;
-     _pushback($123,$130);
-     $131 = $2;
-     $132 = ((($131)) + 40|0);
-     $133 = HEAP32[$132>>2]|0;
-     $134 = ($133|0)==(4);
-     if ($134) {
-      $$old = $4;
-      $$old1 = ($$old|0)==(0);
-      $$old2 = $3;
-      $$old3 = ($$old2|0)==(32);
-      $or$cond6 = $$old1 | $$old3;
-      if (!($or$cond6)) {
-       label = 34;
-      }
-     } else {
-      $135 = $2;
-      $136 = ((($135)) + 40|0);
-      $137 = HEAP32[$136>>2]|0;
-      $138 = ($137|0)==(5);
-      $139 = $4;
-      $140 = ($139|0)!=(0);
-      $or$cond = $138 & $140;
-      $or$cond$not = $or$cond ^ 1;
-      $141 = $3;
-      $142 = ($141|0)==(32);
-      $or$cond4 = $or$cond$not | $142;
-      if (!($or$cond4)) {
-       label = 34;
-      }
-     }
-     if ((label|0) == 34) {
-      $143 = $3;
-      $144 = (($143) - 9)|0;
-      $145 = ($144>>>0)<(5);
-      if (!($145)) {
-       $146 = $2;
-       _yywarning($146,62976);
-       $3 = 353;
-       break;
-      }
-     }
-     $147 = $2;
-     $148 = ((($147)) + 40|0);
-     $149 = HEAP32[$148>>2]|0;
-     $150 = ($149|0)==(0);
-     if (!($150)) {
-      $151 = $2;
-      $152 = ((($151)) + 40|0);
-      $153 = HEAP32[$152>>2]|0;
-      $154 = ($153|0)==(6);
-      if (!($154)) {
-       $155 = $2;
-       $156 = ((($155)) + 40|0);
-       $157 = HEAP32[$156>>2]|0;
-       $158 = ($157|0)==(10);
-       if (!($158)) {
-        $159 = $2;
-        $160 = ((($159)) + 40|0);
-        $161 = HEAP32[$160>>2]|0;
-        $162 = ($161|0)==(9);
-        if (!($162)) {
-         $3 = 42;
-         break;
-        }
-       }
-      }
-     }
-     $3 = 353;
-    }
-   } while(0);
-   $163 = $2;
-   $164 = ((($163)) + 40|0);
-   $165 = HEAP32[$164>>2]|0;
-   $166 = ($165|0)==(7);
-   if ($166) {
-    label = 44;
-   } else {
-    $167 = $2;
-    $168 = ((($167)) + 40|0);
-    $169 = HEAP32[$168>>2]|0;
-    $170 = ($169|0)==(8);
-    if ($170) {
-     label = 44;
-    } else {
-     $172 = $2;
-     $$sink = 0;$$sink8 = $172;
-    }
-   }
-   if ((label|0) == 44) {
-    $171 = $2;
-    $$sink = 4;$$sink8 = $171;
-   }
-   $173 = ((($$sink8)) + 40|0);
-   HEAP32[$173>>2] = $$sink;
-   $174 = $3;
-   $1 = $174;
-   $2029 = $1;
-   STACKTOP = sp;return ($2029|0);
-   break;
-  }
-  case 47: {
-   $175 = $2;
-   $176 = (_nextc($175)|0);
-   $3 = $176;
-   $177 = $2;
-   $178 = ((($177)) + 40|0);
-   $179 = HEAP32[$178>>2]|0;
-   $180 = ($179|0)==(7);
-   if ($180) {
-    label = 49;
-   } else {
-    $181 = $2;
-    $182 = ((($181)) + 40|0);
-    $183 = HEAP32[$182>>2]|0;
-    $184 = ($183|0)==(8);
-    if ($184) {
-     label = 49;
-    } else {
-     $189 = $2;
-     $190 = ((($189)) + 40|0);
-     HEAP32[$190>>2] = 0;
-    }
-   }
-   if ((label|0) == 49) {
-    $185 = $2;
-    $186 = ((($185)) + 40|0);
-    HEAP32[$186>>2] = 4;
-    $187 = $3;
-    $188 = ($187|0)==(64);
-    if ($188) {
-     $1 = 33;
-     $2029 = $1;
-     STACKTOP = sp;return ($2029|0);
-    }
-   }
-   $191 = $3;
-   $192 = ($191|0)==(61);
-   if ($192) {
-    $1 = 330;
-    $2029 = $1;
-    STACKTOP = sp;return ($2029|0);
-   }
-   $193 = $3;
-   $194 = ($193|0)==(126);
-   if ($194) {
-    $1 = 336;
-    $2029 = $1;
-    STACKTOP = sp;return ($2029|0);
-   } else {
-    $195 = $2;
-    $196 = $3;
-    _pushback($195,$196);
-    $1 = 33;
-    $2029 = $1;
-    STACKTOP = sp;return ($2029|0);
-   }
-   break;
-  }
-  case 62: {
-   _yyerror($216,63017);
-   $1 = 0;
-   $2029 = $1;
-   STACKTOP = sp;return ($2029|0);
-   break;
-  }
-  case 69: {
-   $236 = $2;
-   $237 = ((($236)) + 40|0);
-   $238 = HEAP32[$237>>2]|0;
-   $239 = ($238|0)==(7);
-   if ($239) {
-    label = 71;
-   } else {
-    $240 = $2;
-    $241 = ((($240)) + 40|0);
-    $242 = HEAP32[$241>>2]|0;
-    $243 = ($242|0)==(8);
-    if ($243) {
-     label = 71;
-    } else {
-     $245 = $2;
-     $$sink12 = 0;$$sink14 = $245;
-    }
-   }
-   if ((label|0) == 71) {
-    $244 = $2;
-    $$sink12 = 4;$$sink14 = $244;
-   }
-   $246 = ((($$sink14)) + 40|0);
-   HEAP32[$246>>2] = $$sink12;
-   $247 = $2;
-   $248 = (_nextc($247)|0);
-   $3 = $248;
-   $249 = ($248|0)==(61);
-   if ($249) {
-    $250 = $2;
-    $251 = (_nextc($250)|0);
-    $3 = $251;
-    $252 = ($251|0)==(61);
-    if ($252) {
-     $1 = 329;
-     $2029 = $1;
-     STACKTOP = sp;return ($2029|0);
-    } else {
-     $253 = $2;
-     $254 = $3;
-     _pushback($253,$254);
-     $1 = 328;
-     $2029 = $1;
-     STACKTOP = sp;return ($2029|0);
-    }
-   }
-   $255 = $3;
-   $256 = ($255|0)==(126);
-   if ($256) {
-    $1 = 335;
-    $2029 = $1;
-    STACKTOP = sp;return ($2029|0);
-   }
-   $257 = $3;
-   $258 = ($257|0)==(62);
-   if ($258) {
-    $1 = 346;
-    $2029 = $1;
-    STACKTOP = sp;return ($2029|0);
-   } else {
-    $259 = $2;
-    $260 = $3;
-    _pushback($259,$260);
-    $1 = 61;
-    $2029 = $1;
-    STACKTOP = sp;return ($2029|0);
-   }
-   break;
-  }
-  case 82: {
-   $261 = $2;
-   $262 = (_nextc($261)|0);
-   $3 = $262;
-   $263 = $3;
-   $264 = ($263|0)==(60);
-   do {
-    if ($264) {
-     $265 = $2;
-     $266 = ((($265)) + 40|0);
-     $267 = HEAP32[$266>>2]|0;
-     $268 = ($267|0)!=(8);
-     if ($268) {
-      $269 = $2;
-      $270 = ((($269)) + 40|0);
-      $271 = HEAP32[$270>>2]|0;
-      $272 = ($271|0)!=(9);
-      if ($272) {
-       $273 = $2;
-       $274 = ((($273)) + 40|0);
-       $275 = HEAP32[$274>>2]|0;
-       $276 = ($275|0)==(1);
-       if (!($276)) {
-        $277 = $2;
-        $278 = ((($277)) + 40|0);
-        $279 = HEAP32[$278>>2]|0;
-        $280 = ($279|0)==(2);
-        if (!($280)) {
-         $281 = $2;
-         $282 = ((($281)) + 40|0);
-         $283 = HEAP32[$282>>2]|0;
-         $284 = ($283|0)==(3);
-         if (!($284)) {
-          $285 = $2;
-          $286 = ((($285)) + 40|0);
-          $287 = HEAP32[$286>>2]|0;
-          $288 = ($287|0)==(4);
-          if ($288) {
-           $$old15 = $4;
-           $$old16 = ($$old15|0)!=(0);
-           if (!($$old16)) {
-            break;
-           }
-          } else {
-           $289 = $2;
-           $290 = ((($289)) + 40|0);
-           $291 = HEAP32[$290>>2]|0;
-           $292 = ($291|0)!=(5);
-           $293 = $4;
-           $294 = ($293|0)!=(0);
-           $or$cond17 = $292 | $294;
-           if (!($or$cond17)) {
-            break;
-           }
-          }
-          $295 = $2;
-          $296 = (_heredoc_identifier($295)|0);
-          $8 = $296;
-          $297 = $8;
-          $298 = ($297|0)!=(0);
-          if ($298) {
-           $299 = $8;
-           $1 = $299;
-           $2029 = $1;
-           STACKTOP = sp;return ($2029|0);
-          }
-         }
-        }
-       }
-      }
-     }
-    }
-   } while(0);
-   $300 = $2;
-   $301 = ((($300)) + 40|0);
-   $302 = HEAP32[$301>>2]|0;
-   $303 = ($302|0)==(7);
-   if ($303) {
-    label = 95;
-   } else {
-    $304 = $2;
-    $305 = ((($304)) + 40|0);
-    $306 = HEAP32[$305>>2]|0;
-    $307 = ($306|0)==(8);
-    if ($307) {
-     label = 95;
-    } else {
-     $310 = $2;
-     $311 = ((($310)) + 40|0);
-     HEAP32[$311>>2] = 0;
-     $312 = $2;
-     $313 = ((($312)) + 40|0);
-     $314 = HEAP32[$313>>2]|0;
-     $315 = ($314|0)==(9);
-     if ($315) {
-      $316 = $2;
-      $317 = ((($316)) + 72|0);
-      $318 = HEAP8[$317>>0]|0;
-      $319 = $318 & -2;
-      $320 = $319 | 1;
-      HEAP8[$317>>0] = $320;
-     }
-    }
-   }
-   if ((label|0) == 95) {
-    $308 = $2;
-    $309 = ((($308)) + 40|0);
-    HEAP32[$309>>2] = 4;
-   }
-   $321 = $3;
-   $322 = ($321|0)==(61);
-   if ($322) {
-    $323 = $2;
-    $324 = (_nextc($323)|0);
-    $3 = $324;
-    $325 = ($324|0)==(62);
-    if ($325) {
-     $1 = 327;
-     $2029 = $1;
-     STACKTOP = sp;return ($2029|0);
-    } else {
-     $326 = $2;
-     $327 = $3;
-     _pushback($326,$327);
-     $1 = 332;
-     $2029 = $1;
-     STACKTOP = sp;return ($2029|0);
-    }
-   }
-   $328 = $3;
-   $329 = ($328|0)==(60);
-   $330 = $2;
-   if (!($329)) {
-    $341 = $3;
-    _pushback($330,$341);
-    $1 = 60;
-    $2029 = $1;
-    STACKTOP = sp;return ($2029|0);
-   }
-   $331 = (_nextc($330)|0);
-   $3 = $331;
-   $332 = ($331|0)==(61);
-   $333 = $2;
-   if ($332) {
-    $334 = (_intern_gen($333,64616,2)|0);
-    $335 = $2;
-    $336 = ((($335)) + 1132|0);
-    $337 = HEAP32[$336>>2]|0;
-    HEAP32[$337>>2] = $334;
-    $338 = $2;
-    $339 = ((($338)) + 40|0);
-    HEAP32[$339>>2] = 0;
-    $1 = 345;
-    $2029 = $1;
-    STACKTOP = sp;return ($2029|0);
-   } else {
-    $340 = $3;
-    _pushback($333,$340);
-    $1 = 341;
-    $2029 = $1;
-    STACKTOP = sp;return ($2029|0);
-   }
-   break;
-  }
-  case 107: {
-   $342 = $2;
-   $343 = ((($342)) + 40|0);
-   $344 = HEAP32[$343>>2]|0;
-   $345 = ($344|0)==(7);
-   if ($345) {
-    label = 109;
-   } else {
-    $346 = $2;
-    $347 = ((($346)) + 40|0);
-    $348 = HEAP32[$347>>2]|0;
-    $349 = ($348|0)==(8);
-    if ($349) {
-     label = 109;
-    } else {
-     $351 = $2;
-     $$sink18 = 0;$$sink20 = $351;
-    }
-   }
-   if ((label|0) == 109) {
-    $350 = $2;
-    $$sink18 = 4;$$sink20 = $350;
-   }
-   $352 = ((($$sink20)) + 40|0);
-   HEAP32[$352>>2] = $$sink18;
-   $353 = $2;
-   $354 = (_nextc($353)|0);
-   $3 = $354;
-   $355 = ($354|0)==(61);
-   if ($355) {
-    $1 = 331;
-    $2029 = $1;
-    STACKTOP = sp;return ($2029|0);
-   }
-   $356 = $3;
-   $357 = ($356|0)==(62);
-   $358 = $2;
-   if (!($357)) {
-    $369 = $3;
-    _pushback($358,$369);
-    $1 = 62;
-    $2029 = $1;
-    STACKTOP = sp;return ($2029|0);
-   }
-   $359 = (_nextc($358)|0);
-   $3 = $359;
-   $360 = ($359|0)==(61);
-   $361 = $2;
-   if ($360) {
-    $362 = (_intern_gen($361,59537,2)|0);
-    $363 = $2;
-    $364 = ((($363)) + 1132|0);
-    $365 = HEAP32[$364>>2]|0;
-    HEAP32[$365>>2] = $362;
-    $366 = $2;
-    $367 = ((($366)) + 40|0);
-    HEAP32[$367>>2] = 0;
-    $1 = 345;
-    $2029 = $1;
-    STACKTOP = sp;return ($2029|0);
-   } else {
-    $368 = $3;
-    _pushback($361,$368);
-    $1 = 342;
-    $2029 = $1;
-    STACKTOP = sp;return ($2029|0);
-   }
-   break;
-  }
-  case 118: {
-   $370 = $2;
-   $371 = (_new_strterm($370,3,34,0)|0);
-   $372 = $2;
-   $373 = ((($372)) + 44|0);
-   HEAP32[$373>>2] = $371;
-   $1 = 360;
-   $2029 = $1;
-   STACKTOP = sp;return ($2029|0);
-   break;
-  }
-  case 119: {
-   $374 = $2;
-   $375 = (_new_strterm($374,1,39,0)|0);
-   $376 = $2;
-   $377 = ((($376)) + 44|0);
-   HEAP32[$377>>2] = $375;
-   $378 = $2;
-   $379 = (_parse_string($378)|0);
-   $1 = $379;
-   $2029 = $1;
-   STACKTOP = sp;return ($2029|0);
-   break;
-  }
-  case 120: {
-   $380 = $2;
-   $381 = ((($380)) + 40|0);
-   $382 = HEAP32[$381>>2]|0;
-   $383 = ($382|0)==(7);
-   $384 = $2;
-   $385 = ((($384)) + 40|0);
-   if ($383) {
-    HEAP32[$385>>2] = 3;
-    $1 = 96;
-    $2029 = $1;
-    STACKTOP = sp;return ($2029|0);
-   }
-   $386 = HEAP32[$385>>2]|0;
-   $387 = ($386|0)==(8);
-   if ($387) {
-    $388 = $5;
-    $389 = ($388|0)!=(0);
-    $390 = $2;
-    $391 = ((($390)) + 40|0);
-    $$sink21 = $389 ? 5 : 4;
-    HEAP32[$391>>2] = $$sink21;
-    $1 = 96;
-    $2029 = $1;
-    STACKTOP = sp;return ($2029|0);
-   } else {
-    $392 = $2;
-    $393 = (_new_strterm($392,131,96,0)|0);
-    $394 = $2;
-    $395 = ((($394)) + 44|0);
-    HEAP32[$395>>2] = $393;
-    $1 = 361;
-    $2029 = $1;
-    STACKTOP = sp;return ($2029|0);
-   }
-   break;
-  }
-  case 125: {
-   $396 = $2;
-   $397 = ((($396)) + 40|0);
-   $398 = HEAP32[$397>>2]|0;
-   $399 = ($398|0)==(1);
-   if (!($399)) {
-    $400 = $2;
-    $401 = ((($400)) + 40|0);
-    $402 = HEAP32[$401>>2]|0;
-    $403 = ($402|0)==(2);
-    if (!($403)) {
-     $404 = $2;
-     $405 = ((($404)) + 40|0);
-     $406 = HEAP32[$405>>2]|0;
-     $407 = ($406|0)==(3);
-     if (!($407)) {
-      $410 = $2;
-      $411 = (_nextc($410)|0);
-      $3 = $411;
-      $412 = $3;
-      $413 = ($412|0)<(0);
-      if ($413) {
-       $414 = $2;
-       _yyerror($414,63053);
-       $1 = 0;
-       $2029 = $1;
-       STACKTOP = sp;return ($2029|0);
-      }
-      $415 = $3;
-      $416 = ($415|0)==(32);
-      do {
-       if ($416) {
-        label = 133;
-       } else {
-        $417 = $3;
-        $418 = (($417) - 9)|0;
-        $419 = ($418>>>0)<(5);
-        if ($419) {
-         label = 133;
-        } else {
-         $437 = $2;
-         (_newtok($437)|0);
-         $438 = $3;
-         $439 = (_isalnum($438)|0);
-         $440 = ($439|0)!=(0);
-         $441 = $3;
-         $442 = ($441|0)==(95);
-         $or$cond24 = $440 | $442;
-         if ($or$cond24) {
-          $443 = $2;
-          $444 = (_nextc($443)|0);
-          $11 = $444;
-          $445 = $2;
-          $446 = $11;
-          _pushback($445,$446);
-          $447 = $11;
-          $448 = (_isalnum($447)|0);
-          $449 = ($448|0)!=(0);
-          $450 = $11;
-          $451 = ($450|0)==(95);
-          $or$cond27 = $449 | $451;
-          if ($or$cond27) {
-           break;
-          }
-         }
-         $452 = $3;
-         $453 = ($452|0)==(92);
-         $454 = $2;
-         if ($453) {
-          $455 = (_read_escape($454)|0);
-          $3 = $455;
-          $456 = $2;
-          $457 = $3;
-          _tokadd($456,$457);
-         } else {
-          $458 = $3;
-          _tokadd($454,$458);
-         }
-         $459 = $2;
-         _tokfix($459);
-         $460 = $2;
-         $461 = $2;
-         $462 = (_tok($461)|0);
-         $463 = $2;
-         $464 = (_toklen($463)|0);
-         $465 = (_new_str($460,$462,$464)|0);
-         $466 = $2;
-         $467 = ((($466)) + 1132|0);
-         $468 = HEAP32[$467>>2]|0;
-         HEAP32[$468>>2] = $465;
-         $469 = $2;
-         $470 = ((($469)) + 40|0);
-         HEAP32[$470>>2] = 1;
-         $1 = 315;
-         $2029 = $1;
-         STACKTOP = sp;return ($2029|0);
-        }
-       }
-      } while(0);
-      if ((label|0) == 133) {
-       $420 = $2;
-       $421 = ((($420)) + 40|0);
-       $422 = HEAP32[$421>>2]|0;
-       $423 = ($422|0)==(4);
-       if (!($423)) {
-        $424 = $2;
-        $425 = ((($424)) + 40|0);
-        $426 = HEAP32[$425>>2]|0;
-        $427 = ($426|0)==(5);
-        if (!($427)) {
-         $428 = $3;
-         switch ($428|0) {
-         case 32:  {
-          $9 = 115;
-          break;
-         }
-         case 10:  {
-          $9 = 110;
-          break;
-         }
-         case 9:  {
-          $9 = 116;
-          break;
-         }
-         case 11:  {
-          $9 = 118;
-          break;
-         }
-         case 13:  {
-          $9 = 114;
-          break;
-         }
-         case 12:  {
-          $9 = 102;
-          break;
-         }
-         default: {
-          $9 = 0;
-         }
-         }
-         $429 = $9;
-         $430 = ($429|0)!=(0);
-         if ($430) {
-          $431 = $9;
-          HEAP32[$vararg_buffer>>2] = $431;
-          (_snprintf($10,256,63081,$vararg_buffer)|0);
-          $432 = $2;
-          _yyerror($432,$10);
-         }
-        }
-       }
-      }
-      $433 = $2;
-      $434 = $3;
-      _pushback($433,$434);
-      $435 = $2;
-      $436 = ((($435)) + 40|0);
-      HEAP32[$436>>2] = 10;
-      $1 = 63;
-      $2029 = $1;
-      STACKTOP = sp;return ($2029|0);
-     }
-    }
-   }
-   $408 = $2;
-   $409 = ((($408)) + 40|0);
-   HEAP32[$409>>2] = 10;
-   $1 = 63;
-   $2029 = $1;
-   STACKTOP = sp;return ($2029|0);
-   break;
-  }
-  case 152: {
-   $471 = $2;
-   $472 = (_nextc($471)|0);
-   $3 = $472;
-   $473 = ($472|0)==(38);
-   if ($473) {
-    $474 = $2;
-    $475 = ((($474)) + 40|0);
-    HEAP32[$475>>2] = 0;
-    $476 = $2;
-    $477 = (_nextc($476)|0);
-    $3 = $477;
-    $478 = ($477|0)==(61);
-    $479 = $2;
-    if ($478) {
-     $480 = (_intern_gen($479,63116,2)|0);
-     $481 = $2;
-     $482 = ((($481)) + 1132|0);
-     $483 = HEAP32[$482>>2]|0;
-     HEAP32[$483>>2] = $480;
-     $484 = $2;
-     $485 = ((($484)) + 40|0);
-     HEAP32[$485>>2] = 0;
-     $1 = 345;
-     $2029 = $1;
-     STACKTOP = sp;return ($2029|0);
-    } else {
-     $486 = $3;
-     _pushback($479,$486);
-     $1 = 333;
-     $2029 = $1;
-     STACKTOP = sp;return ($2029|0);
-    }
-   }
-   $487 = $3;
-   $488 = ($487|0)==(61);
-   $489 = $2;
-   if ($488) {
-    $490 = (_intern_gen_c($489,38)|0);
-    $491 = $2;
-    $492 = ((($491)) + 1132|0);
-    $493 = HEAP32[$492>>2]|0;
-    HEAP32[$493>>2] = $490;
-    $494 = $2;
-    $495 = ((($494)) + 40|0);
-    HEAP32[$495>>2] = 0;
-    $1 = 345;
-    $2029 = $1;
-    STACKTOP = sp;return ($2029|0);
-   }
-   $496 = $3;
-   _pushback($489,$496);
-   $497 = $2;
-   $498 = ((($497)) + 40|0);
-   $499 = HEAP32[$498>>2]|0;
-   $500 = ($499|0)==(4);
-   if ($500) {
-    $$old28 = $4;
-    $$old29 = ($$old28|0)==(0);
-    $$old31 = $3;
-    $$old32 = ($$old31|0)==(32);
-    $or$cond35 = $$old29 | $$old32;
-    if ($or$cond35) {
-     label = 163;
-    } else {
-     label = 161;
-    }
-   } else {
-    $501 = $2;
-    $502 = ((($501)) + 40|0);
-    $503 = HEAP32[$502>>2]|0;
-    $504 = ($503|0)==(5);
-    $505 = $4;
-    $506 = ($505|0)!=(0);
-    $or$cond30 = $504 & $506;
-    $or$cond30$not = $or$cond30 ^ 1;
-    $507 = $3;
-    $508 = ($507|0)==(32);
-    $or$cond33 = $or$cond30$not | $508;
-    if ($or$cond33) {
-     label = 163;
-    } else {
-     label = 161;
-    }
-   }
-   if ((label|0) == 161) {
-    $509 = $3;
-    $510 = (($509) - 9)|0;
-    $511 = ($510>>>0)<(5);
-    if ($511) {
-     label = 163;
-    } else {
-     $512 = $2;
-     _yywarning($512,63119);
-     $3 = 354;
-    }
-   }
-   do {
-    if ((label|0) == 163) {
-     $513 = $2;
-     $514 = ((($513)) + 40|0);
-     $515 = HEAP32[$514>>2]|0;
-     $516 = ($515|0)==(0);
-     if (!($516)) {
-      $517 = $2;
-      $518 = ((($517)) + 40|0);
-      $519 = HEAP32[$518>>2]|0;
-      $520 = ($519|0)==(6);
-      if (!($520)) {
-       $521 = $2;
-       $522 = ((($521)) + 40|0);
-       $523 = HEAP32[$522>>2]|0;
-       $524 = ($523|0)==(10);
-       if (!($524)) {
-        $525 = $2;
-        $526 = ((($525)) + 40|0);
-        $527 = HEAP32[$526>>2]|0;
-        $528 = ($527|0)==(9);
-        if (!($528)) {
-         $3 = 38;
-         break;
-        }
-       }
-      }
-     }
-     $3 = 354;
-    }
-   } while(0);
-   $529 = $2;
-   $530 = ((($529)) + 40|0);
-   $531 = HEAP32[$530>>2]|0;
-   $532 = ($531|0)==(7);
-   if ($532) {
-    label = 171;
-   } else {
-    $533 = $2;
-    $534 = ((($533)) + 40|0);
-    $535 = HEAP32[$534>>2]|0;
-    $536 = ($535|0)==(8);
-    if ($536) {
-     label = 171;
-    } else {
-     $538 = $2;
-     $$sink36 = 0;$$sink38 = $538;
-    }
-   }
-   if ((label|0) == 171) {
-    $537 = $2;
-    $$sink36 = 4;$$sink38 = $537;
-   }
-   $539 = ((($$sink38)) + 40|0);
-   HEAP32[$539>>2] = $$sink36;
-   $540 = $3;
-   $1 = $540;
-   $2029 = $1;
-   STACKTOP = sp;return ($2029|0);
-   break;
-  }
-  case 174: {
-   $541 = $2;
-   $542 = (_nextc($541)|0);
-   $3 = $542;
-   $543 = ($542|0)==(124);
-   if ($543) {
-    $544 = $2;
-    $545 = ((($544)) + 40|0);
-    HEAP32[$545>>2] = 0;
-    $546 = $2;
-    $547 = (_nextc($546)|0);
-    $3 = $547;
-    $548 = ($547|0)==(61);
-    $549 = $2;
-    if ($548) {
-     $550 = (_intern_gen($549,63154,2)|0);
-     $551 = $2;
-     $552 = ((($551)) + 1132|0);
-     $553 = HEAP32[$552>>2]|0;
-     HEAP32[$553>>2] = $550;
-     $554 = $2;
-     $555 = ((($554)) + 40|0);
-     HEAP32[$555>>2] = 0;
-     $1 = 345;
-     $2029 = $1;
-     STACKTOP = sp;return ($2029|0);
-    } else {
-     $556 = $3;
-     _pushback($549,$556);
-     $1 = 334;
-     $2029 = $1;
-     STACKTOP = sp;return ($2029|0);
-    }
-   }
-   $557 = $3;
-   $558 = ($557|0)==(61);
-   $559 = $2;
-   if ($558) {
-    $560 = (_intern_gen_c($559,124)|0);
-    $561 = $2;
-    $562 = ((($561)) + 1132|0);
-    $563 = HEAP32[$562>>2]|0;
-    HEAP32[$563>>2] = $560;
-    $564 = $2;
-    $565 = ((($564)) + 40|0);
-    HEAP32[$565>>2] = 0;
-    $1 = 345;
-    $2029 = $1;
-    STACKTOP = sp;return ($2029|0);
-   }
-   $566 = ((($559)) + 40|0);
-   $567 = HEAP32[$566>>2]|0;
-   $568 = ($567|0)==(7);
-   if ($568) {
-    label = 182;
-   } else {
-    $569 = $2;
-    $570 = ((($569)) + 40|0);
-    $571 = HEAP32[$570>>2]|0;
-    $572 = ($571|0)==(8);
-    if ($572) {
-     label = 182;
-    } else {
-     $574 = $2;
-     $$sink39 = 0;$$sink41 = $574;
-    }
-   }
-   if ((label|0) == 182) {
-    $573 = $2;
-    $$sink39 = 4;$$sink41 = $573;
-   }
-   $575 = ((($$sink41)) + 40|0);
-   HEAP32[$575>>2] = $$sink39;
-   $576 = $2;
-   $577 = $3;
-   _pushback($576,$577);
-   $1 = 124;
-   $2029 = $1;
-   STACKTOP = sp;return ($2029|0);
-   break;
-  }
-  case 185: {
-   $578 = $2;
-   $579 = (_nextc($578)|0);
-   $3 = $579;
-   $580 = $2;
-   $581 = ((($580)) + 40|0);
-   $582 = HEAP32[$581>>2]|0;
-   $583 = ($582|0)==(7);
-   if (!($583)) {
-    $584 = $2;
-    $585 = ((($584)) + 40|0);
-    $586 = HEAP32[$585>>2]|0;
-    $587 = ($586|0)==(8);
-    if (!($587)) {
-     $594 = $3;
-     $595 = ($594|0)==(61);
-     $596 = $2;
-     if ($595) {
-      $597 = (_intern_gen_c($596,43)|0);
-      $598 = $2;
-      $599 = ((($598)) + 1132|0);
-      $600 = HEAP32[$599>>2]|0;
-      HEAP32[$600>>2] = $597;
-      $601 = $2;
-      $602 = ((($601)) + 40|0);
-      HEAP32[$602>>2] = 0;
-      $1 = 345;
-      $2029 = $1;
-      STACKTOP = sp;return ($2029|0);
-     }
-     $603 = ((($596)) + 40|0);
-     $604 = HEAP32[$603>>2]|0;
-     $605 = ($604|0)==(0);
-     do {
-      if (!($605)) {
-       $606 = $2;
-       $607 = ((($606)) + 40|0);
-       $608 = HEAP32[$607>>2]|0;
-       $609 = ($608|0)==(6);
-       if (!($609)) {
-        $610 = $2;
-        $611 = ((($610)) + 40|0);
-        $612 = HEAP32[$611>>2]|0;
-        $613 = ($612|0)==(10);
-        if (!($613)) {
-         $614 = $2;
-         $615 = ((($614)) + 40|0);
-         $616 = HEAP32[$615>>2]|0;
-         $617 = ($616|0)==(9);
-         if (!($617)) {
-          $618 = $2;
-          $619 = ((($618)) + 40|0);
-          $620 = HEAP32[$619>>2]|0;
-          $621 = ($620|0)==(4);
-          if ($621) {
-           $$old42 = $4;
-           $$old43 = ($$old42|0)==(0);
-           $$old45 = $3;
-           $$old46 = ($$old45|0)==(32);
-           $or$cond49 = $$old43 | $$old46;
-           if (!($or$cond49)) {
-            label = 199;
-           }
-          } else {
-           $622 = $2;
-           $623 = ((($622)) + 40|0);
-           $624 = HEAP32[$623>>2]|0;
-           $625 = ($624|0)==(5);
-           $626 = $4;
-           $627 = ($626|0)!=(0);
-           $or$cond44 = $625 & $627;
-           $or$cond44$not = $or$cond44 ^ 1;
-           $628 = $3;
-           $629 = ($628|0)==(32);
-           $or$cond47 = $or$cond44$not | $629;
-           if (!($or$cond47)) {
-            label = 199;
-           }
-          }
-          if ((label|0) == 199) {
-           $630 = $3;
-           $631 = (($630) - 9)|0;
-           $632 = ($631>>>0)<(5);
-           if (!($632)) {
-            $633 = $2;
-            $634 = (_arg_ambiguous($633)|0);
-            $635 = ($634|0)!=(0);
-            if ($635) {
-             break;
-            }
-           }
-          }
-          $645 = $2;
-          $646 = ((($645)) + 40|0);
-          HEAP32[$646>>2] = 0;
-          $647 = $2;
-          $648 = $3;
-          _pushback($647,$648);
-          $1 = 43;
-          $2029 = $1;
-          STACKTOP = sp;return ($2029|0);
-         }
-        }
-       }
-      }
-     } while(0);
-     $636 = $2;
-     $637 = ((($636)) + 40|0);
-     HEAP32[$637>>2] = 0;
-     $638 = $2;
-     $639 = $3;
-     _pushback($638,$639);
-     $640 = $3;
-     $641 = ($640|0)>=(0);
-     if ($641) {
-      $642 = $3;
-      $643 = (($642) - 48)|0;
-      $644 = ($643>>>0)<(10);
-      if ($644) {
-       $3 = 43;
-       label = 237;
-       break;
-      }
-     }
-     $1 = 324;
-     $2029 = $1;
-     STACKTOP = sp;return ($2029|0);
-    }
-   }
-   $588 = $2;
-   $589 = ((($588)) + 40|0);
-   HEAP32[$589>>2] = 4;
-   $590 = $3;
-   $591 = ($590|0)==(64);
-   if ($591) {
-    $1 = 324;
-    $2029 = $1;
-    STACKTOP = sp;return ($2029|0);
-   } else {
-    $592 = $2;
-    $593 = $3;
-    _pushback($592,$593);
-    $1 = 43;
-    $2029 = $1;
-    STACKTOP = sp;return ($2029|0);
-   }
-   break;
-  }
-  case 206: {
-   $649 = $2;
-   $650 = (_nextc($649)|0);
-   $3 = $650;
-   $651 = $2;
-   $652 = ((($651)) + 40|0);
-   $653 = HEAP32[$652>>2]|0;
-   $654 = ($653|0)==(7);
-   if (!($654)) {
-    $655 = $2;
-    $656 = ((($655)) + 40|0);
-    $657 = HEAP32[$656>>2]|0;
-    $658 = ($657|0)==(8);
-    if (!($658)) {
-     $665 = $3;
-     $666 = ($665|0)==(61);
-     if ($666) {
-      $667 = $2;
-      $668 = (_intern_gen_c($667,45)|0);
-      $669 = $2;
-      $670 = ((($669)) + 1132|0);
-      $671 = HEAP32[$670>>2]|0;
-      HEAP32[$671>>2] = $668;
-      $672 = $2;
-      $673 = ((($672)) + 40|0);
-      HEAP32[$673>>2] = 0;
-      $1 = 345;
-      $2029 = $1;
-      STACKTOP = sp;return ($2029|0);
-     }
-     $674 = $3;
-     $675 = ($674|0)==(62);
-     $676 = $2;
-     $677 = ((($676)) + 40|0);
-     if ($675) {
-      HEAP32[$677>>2] = 3;
-      $1 = 355;
-      $2029 = $1;
-      STACKTOP = sp;return ($2029|0);
-     }
-     $678 = HEAP32[$677>>2]|0;
-     $679 = ($678|0)==(0);
-     do {
-      if (!($679)) {
-       $680 = $2;
-       $681 = ((($680)) + 40|0);
-       $682 = HEAP32[$681>>2]|0;
-       $683 = ($682|0)==(6);
-       if (!($683)) {
-        $684 = $2;
-        $685 = ((($684)) + 40|0);
-        $686 = HEAP32[$685>>2]|0;
-        $687 = ($686|0)==(10);
-        if (!($687)) {
-         $688 = $2;
-         $689 = ((($688)) + 40|0);
-         $690 = HEAP32[$689>>2]|0;
-         $691 = ($690|0)==(9);
-         if (!($691)) {
-          $692 = $2;
-          $693 = ((($692)) + 40|0);
-          $694 = HEAP32[$693>>2]|0;
-          $695 = ($694|0)==(4);
-          if ($695) {
-           $$old50 = $4;
-           $$old51 = ($$old50|0)==(0);
-           $$old53 = $3;
-           $$old54 = ($$old53|0)==(32);
-           $or$cond57 = $$old51 | $$old54;
-           if (!($or$cond57)) {
-            label = 222;
-           }
-          } else {
-           $696 = $2;
-           $697 = ((($696)) + 40|0);
-           $698 = HEAP32[$697>>2]|0;
-           $699 = ($698|0)==(5);
-           $700 = $4;
-           $701 = ($700|0)!=(0);
-           $or$cond52 = $699 & $701;
-           $or$cond52$not = $or$cond52 ^ 1;
-           $702 = $3;
-           $703 = ($702|0)==(32);
-           $or$cond55 = $or$cond52$not | $703;
-           if (!($or$cond55)) {
-            label = 222;
-           }
-          }
-          if ((label|0) == 222) {
-           $704 = $3;
-           $705 = (($704) - 9)|0;
-           $706 = ($705>>>0)<(5);
-           if (!($706)) {
-            $707 = $2;
-            $708 = (_arg_ambiguous($707)|0);
-            $709 = ($708|0)!=(0);
-            if ($709) {
-             break;
-            }
-           }
-          }
-          $719 = $2;
-          $720 = ((($719)) + 40|0);
-          HEAP32[$720>>2] = 0;
-          $721 = $2;
-          $722 = $3;
-          _pushback($721,$722);
-          $1 = 45;
-          $2029 = $1;
-          STACKTOP = sp;return ($2029|0);
-         }
-        }
-       }
-      }
-     } while(0);
-     $710 = $2;
-     $711 = ((($710)) + 40|0);
-     HEAP32[$711>>2] = 0;
-     $712 = $2;
-     $713 = $3;
-     _pushback($712,$713);
-     $714 = $3;
-     $715 = ($714|0)>=(0);
-     if ($715) {
-      $716 = $3;
-      $717 = (($716) - 48)|0;
-      $718 = ($717>>>0)<(10);
-      if ($718) {
-       $1 = 371;
-       $2029 = $1;
-       STACKTOP = sp;return ($2029|0);
-      }
-     }
-     $1 = 325;
-     $2029 = $1;
-     STACKTOP = sp;return ($2029|0);
-    }
-   }
-   $659 = $2;
-   $660 = ((($659)) + 40|0);
-   HEAP32[$660>>2] = 4;
-   $661 = $3;
-   $662 = ($661|0)==(64);
-   if ($662) {
-    $1 = 325;
-    $2029 = $1;
-    STACKTOP = sp;return ($2029|0);
-   } else {
-    $663 = $2;
-    $664 = $3;
-    _pushback($663,$664);
-    $1 = 45;
-    $2029 = $1;
-    STACKTOP = sp;return ($2029|0);
-   }
-   break;
-  }
-  case 229: {
-   $723 = $2;
-   $724 = ((($723)) + 40|0);
-   HEAP32[$724>>2] = 0;
-   $725 = $2;
-   $726 = (_nextc($725)|0);
-   $3 = $726;
-   $727 = ($726|0)==(46);
-   $728 = $2;
-   if ($727) {
-    $729 = (_nextc($728)|0);
-    $3 = $729;
-    $730 = ($729|0)==(46);
-    if ($730) {
-     $1 = 338;
-     $2029 = $1;
-     STACKTOP = sp;return ($2029|0);
-    } else {
-     $731 = $2;
-     $732 = $3;
-     _pushback($731,$732);
-     $1 = 337;
-     $2029 = $1;
-     STACKTOP = sp;return ($2029|0);
-    }
-   } else {
-    $733 = $3;
-    _pushback($728,$733);
-    $734 = $3;
-    $735 = ($734|0)>=(0);
-    if ($735) {
-     $736 = $3;
-     $737 = (($736) - 48)|0;
-     $738 = ($737>>>0)<(10);
-     if ($738) {
-      $739 = $2;
-      _yyerror($739,63157);
-     }
-    }
-    $740 = $2;
-    $741 = ((($740)) + 40|0);
-    HEAP32[$741>>2] = 8;
-    $1 = 46;
-    $2029 = $1;
-    STACKTOP = sp;return ($2029|0);
-   }
-   break;
-  }
-  case 329: {
-   $1062 = $2;
-   $1063 = ((($1062)) + 56|0);
-   $1064 = HEAP32[$1063>>2]|0;
-   $1065 = (($1064) + -1)|0;
-   HEAP32[$1063>>2] = $1065;
-   label = 330;
-   break;
-  }
-  case 331: {
-   $1093 = $2;
-   $1094 = (_nextc($1093)|0);
-   $3 = $1094;
-   $1095 = $3;
-   $1096 = ($1095|0)==(58);
-   $1097 = $2;
-   $1098 = ((($1097)) + 40|0);
-   $1099 = HEAP32[$1098>>2]|0;
-   if (!($1096)) {
-    $1131 = ($1099|0)==(1);
-    if (!($1131)) {
-     $1132 = $2;
-     $1133 = ((($1132)) + 40|0);
-     $1134 = HEAP32[$1133>>2]|0;
-     $1135 = ($1134|0)==(2);
-     if (!($1135)) {
-      $1136 = $2;
-      $1137 = ((($1136)) + 40|0);
-      $1138 = HEAP32[$1137>>2]|0;
-      $1139 = ($1138|0)==(3);
-      $1140 = $3;
-      $1141 = ($1140|0)==(32);
-      $or$cond109 = $1139 | $1141;
-      if (!($or$cond109)) {
-       $1142 = $3;
-       $1143 = (($1142) - 9)|0;
-       $1144 = ($1143>>>0)<(5);
-       if (!($1144)) {
-        $1149 = $2;
-        $1150 = $3;
-        _pushback($1149,$1150);
-        $1151 = $2;
-        $1152 = ((($1151)) + 40|0);
-        HEAP32[$1152>>2] = 7;
-        $1 = 356;
-        $2029 = $1;
-        STACKTOP = sp;return ($2029|0);
-       }
-      }
-     }
-    }
-    $1145 = $2;
-    $1146 = $3;
-    _pushback($1145,$1146);
-    $1147 = $2;
-    $1148 = ((($1147)) + 40|0);
-    HEAP32[$1148>>2] = 0;
-    $1 = 58;
-    $2029 = $1;
-    STACKTOP = sp;return ($2029|0);
-   }
-   $1100 = ($1099|0)==(0);
-   do {
-    if (!($1100)) {
-     $1101 = $2;
-     $1102 = ((($1101)) + 40|0);
-     $1103 = HEAP32[$1102>>2]|0;
-     $1104 = ($1103|0)==(6);
-     if (!($1104)) {
-      $1105 = $2;
-      $1106 = ((($1105)) + 40|0);
-      $1107 = HEAP32[$1106>>2]|0;
-      $1108 = ($1107|0)==(10);
-      if (!($1108)) {
-       $1109 = $2;
-       $1110 = ((($1109)) + 40|0);
-       $1111 = HEAP32[$1110>>2]|0;
-       $1112 = ($1111|0)==(9);
-       if (!($1112)) {
-        $1113 = $2;
-        $1114 = ((($1113)) + 40|0);
-        $1115 = HEAP32[$1114>>2]|0;
-        $1116 = ($1115|0)==(9);
-        if (!($1116)) {
-         $1117 = $2;
-         $1118 = ((($1117)) + 40|0);
-         $1119 = HEAP32[$1118>>2]|0;
-         $1120 = ($1119|0)==(4);
-         if ($1120) {
-          $$old104 = $4;
-          $$old105 = ($$old104|0)!=(0);
-          if ($$old105) {
-           break;
-          }
-         } else {
-          $1121 = $2;
-          $1122 = ((($1121)) + 40|0);
-          $1123 = HEAP32[$1122>>2]|0;
-          $1124 = ($1123|0)==(5);
-          $1125 = $4;
-          $1126 = ($1125|0)!=(0);
-          $or$cond106 = $1124 & $1126;
-          if ($or$cond106) {
-           break;
-          }
-         }
-         $1129 = $2;
-         $1130 = ((($1129)) + 40|0);
-         HEAP32[$1130>>2] = 8;
-         $1 = 343;
-         $2029 = $1;
-         STACKTOP = sp;return ($2029|0);
-        }
-       }
-      }
-     }
-    }
-   } while(0);
-   $1127 = $2;
-   $1128 = ((($1127)) + 40|0);
-   HEAP32[$1128>>2] = 0;
-   $1 = 344;
-   $2029 = $1;
-   STACKTOP = sp;return ($2029|0);
-   break;
-  }
-  case 348: {
-   $1153 = $2;
-   $1154 = ((($1153)) + 40|0);
-   $1155 = HEAP32[$1154>>2]|0;
-   $1156 = ($1155|0)==(0);
-   if (!($1156)) {
-    $1157 = $2;
-    $1158 = ((($1157)) + 40|0);
-    $1159 = HEAP32[$1158>>2]|0;
-    $1160 = ($1159|0)==(6);
-    if (!($1160)) {
-     $1161 = $2;
-     $1162 = ((($1161)) + 40|0);
-     $1163 = HEAP32[$1162>>2]|0;
-     $1164 = ($1163|0)==(10);
-     if (!($1164)) {
-      $1165 = $2;
-      $1166 = ((($1165)) + 40|0);
-      $1167 = HEAP32[$1166>>2]|0;
-      $1168 = ($1167|0)==(9);
-      if (!($1168)) {
-       $1173 = $2;
-       $1174 = (_nextc($1173)|0);
-       $3 = $1174;
-       $1175 = ($1174|0)==(61);
-       $1176 = $2;
-       if ($1175) {
-        $1177 = (_intern_gen_c($1176,47)|0);
-        $1178 = $2;
-        $1179 = ((($1178)) + 1132|0);
-        $1180 = HEAP32[$1179>>2]|0;
-        HEAP32[$1180>>2] = $1177;
-        $1181 = $2;
-        $1182 = ((($1181)) + 40|0);
-        HEAP32[$1182>>2] = 0;
-        $1 = 345;
-        $2029 = $1;
-        STACKTOP = sp;return ($2029|0);
-       }
-       $1183 = $3;
-       _pushback($1176,$1183);
-       $1184 = $2;
-       $1185 = ((($1184)) + 40|0);
-       $1186 = HEAP32[$1185>>2]|0;
-       $1187 = ($1186|0)==(4);
-       if ($1187) {
-        $$old110 = $4;
-        $$old111 = ($$old110|0)==(0);
-        $$old113 = $3;
-        $$old114 = ($$old113|0)==(32);
-        $or$cond117 = $$old111 | $$old114;
-        if (!($or$cond117)) {
-         label = 358;
-        }
-       } else {
-        $1188 = $2;
-        $1189 = ((($1188)) + 40|0);
-        $1190 = HEAP32[$1189>>2]|0;
-        $1191 = ($1190|0)==(5);
-        $1192 = $4;
-        $1193 = ($1192|0)!=(0);
-        $or$cond112 = $1191 & $1193;
-        $or$cond112$not = $or$cond112 ^ 1;
-        $1194 = $3;
-        $1195 = ($1194|0)==(32);
-        $or$cond115 = $or$cond112$not | $1195;
-        if (!($or$cond115)) {
-         label = 358;
-        }
-       }
-       if ((label|0) == 358) {
-        $1196 = $3;
-        $1197 = (($1196) - 9)|0;
-        $1198 = ($1197>>>0)<(5);
-        if (!($1198)) {
-         $1199 = $2;
-         $1200 = (_new_strterm($1199,7,47,0)|0);
-         $1201 = $2;
-         $1202 = ((($1201)) + 44|0);
-         HEAP32[$1202>>2] = $1200;
-         $1 = 357;
-         $2029 = $1;
-         STACKTOP = sp;return ($2029|0);
-        }
-       }
-       $1203 = $2;
-       $1204 = ((($1203)) + 40|0);
-       $1205 = HEAP32[$1204>>2]|0;
-       $1206 = ($1205|0)==(7);
-       if ($1206) {
-        label = 362;
-       } else {
-        $1207 = $2;
-        $1208 = ((($1207)) + 40|0);
-        $1209 = HEAP32[$1208>>2]|0;
-        $1210 = ($1209|0)==(8);
-        if ($1210) {
-         label = 362;
-        } else {
-         $1212 = $2;
-         $$sink118 = 0;$$sink120 = $1212;
-        }
-       }
-       if ((label|0) == 362) {
-        $1211 = $2;
-        $$sink118 = 4;$$sink120 = $1211;
-       }
-       $1213 = ((($$sink120)) + 40|0);
-       HEAP32[$1213>>2] = $$sink118;
-       $1 = 47;
-       $2029 = $1;
-       STACKTOP = sp;return ($2029|0);
-      }
-     }
-    }
-   }
-   $1169 = $2;
-   $1170 = (_new_strterm($1169,7,47,0)|0);
-   $1171 = $2;
-   $1172 = ((($1171)) + 44|0);
-   HEAP32[$1172>>2] = $1170;
-   $1 = 357;
-   $2029 = $1;
-   STACKTOP = sp;return ($2029|0);
-   break;
-  }
-  case 365: {
-   $1214 = $2;
-   $1215 = (_nextc($1214)|0);
-   $3 = $1215;
-   $1216 = ($1215|0)==(61);
-   $1217 = $2;
-   if ($1216) {
-    $1218 = (_intern_gen_c($1217,94)|0);
-    $1219 = $2;
-    $1220 = ((($1219)) + 1132|0);
-    $1221 = HEAP32[$1220>>2]|0;
-    HEAP32[$1221>>2] = $1218;
-    $1222 = $2;
-    $1223 = ((($1222)) + 40|0);
-    HEAP32[$1223>>2] = 0;
-    $1 = 345;
-    $2029 = $1;
-    STACKTOP = sp;return ($2029|0);
-   }
-   $1224 = ((($1217)) + 40|0);
-   $1225 = HEAP32[$1224>>2]|0;
-   $1226 = ($1225|0)==(7);
-   if ($1226) {
-    label = 369;
-   } else {
-    $1227 = $2;
-    $1228 = ((($1227)) + 40|0);
-    $1229 = HEAP32[$1228>>2]|0;
-    $1230 = ($1229|0)==(8);
-    if ($1230) {
-     label = 369;
-    } else {
-     $1232 = $2;
-     $$sink121 = 0;$$sink123 = $1232;
-    }
-   }
-   if ((label|0) == 369) {
-    $1231 = $2;
-    $$sink121 = 4;$$sink123 = $1231;
-   }
-   $1233 = ((($$sink123)) + 40|0);
-   HEAP32[$1233>>2] = $$sink121;
-   $1234 = $2;
-   $1235 = $3;
-   _pushback($1234,$1235);
-   $1 = 94;
-   $2029 = $1;
-   STACKTOP = sp;return ($2029|0);
-   break;
-  }
-  case 372: {
-   $1236 = $2;
-   $1237 = ((($1236)) + 40|0);
-   HEAP32[$1237>>2] = 0;
-   $1 = 59;
-   $2029 = $1;
-   STACKTOP = sp;return ($2029|0);
-   break;
-  }
-  case 373: {
-   $1238 = $2;
-   $1239 = ((($1238)) + 40|0);
-   HEAP32[$1239>>2] = 0;
-   $1 = 44;
-   $2029 = $1;
-   STACKTOP = sp;return ($2029|0);
-   break;
-  }
-  case 374: {
-   $1240 = $2;
-   $1241 = ((($1240)) + 40|0);
-   $1242 = HEAP32[$1241>>2]|0;
-   $1243 = ($1242|0)==(7);
-   if ($1243) {
-    label = 376;
-   } else {
-    $1244 = $2;
-    $1245 = ((($1244)) + 40|0);
-    $1246 = HEAP32[$1245>>2]|0;
-    $1247 = ($1246|0)==(8);
-    if ($1247) {
-     label = 376;
-    } else {
-     $1254 = $2;
-     $$sink124 = 0;$$sink126 = $1254;
-    }
-   }
-   if ((label|0) == 376) {
-    $1248 = $2;
-    $1249 = (_nextc($1248)|0);
-    $3 = $1249;
-    $1250 = ($1249|0)!=(64);
-    if ($1250) {
-     $1251 = $2;
-     $1252 = $3;
-     _pushback($1251,$1252);
-    }
-    $1253 = $2;
-    $$sink124 = 4;$$sink126 = $1253;
-   }
-   $1255 = ((($$sink126)) + 40|0);
-   HEAP32[$1255>>2] = $$sink124;
-   $1 = 126;
-   $2029 = $1;
-   STACKTOP = sp;return ($2029|0);
-   break;
-  }
-  case 381: {
-   $1256 = $2;
-   $1257 = ((($1256)) + 40|0);
-   $1258 = HEAP32[$1257>>2]|0;
-   $1259 = ($1258|0)==(0);
-   do {
-    if ($1259) {
-     label = 385;
-    } else {
-     $1260 = $2;
-     $1261 = ((($1260)) + 40|0);
-     $1262 = HEAP32[$1261>>2]|0;
-     $1263 = ($1262|0)==(6);
-     if ($1263) {
-      label = 385;
-     } else {
-      $1264 = $2;
-      $1265 = ((($1264)) + 40|0);
-      $1266 = HEAP32[$1265>>2]|0;
-      $1267 = ($1266|0)==(10);
-      if ($1267) {
-       label = 385;
-      } else {
-       $1268 = $2;
-       $1269 = ((($1268)) + 40|0);
-       $1270 = HEAP32[$1269>>2]|0;
-       $1271 = ($1270|0)==(9);
-       if ($1271) {
-        label = 385;
-       } else {
-        $1272 = $2;
-        $1273 = ((($1272)) + 40|0);
-        $1274 = HEAP32[$1273>>2]|0;
-        $1275 = ($1274|0)==(4);
-        if ($1275) {
-         $$old127 = $4;
-         $$old128 = ($$old127|0)!=(0);
-         if (!($$old128)) {
-          break;
-         }
-        } else {
-         $1276 = $2;
-         $1277 = ((($1276)) + 40|0);
-         $1278 = HEAP32[$1277>>2]|0;
-         $1279 = ($1278|0)==(5);
-         $1280 = $4;
-         $1281 = ($1280|0)!=(0);
-         $or$cond129 = $1279 & $1281;
-         if (!($or$cond129)) {
-          break;
-         }
-        }
-        $3 = 348;
-       }
-      }
-     }
-    }
-   } while(0);
-   if ((label|0) == 385) {
-    $3 = 347;
-   }
-   $1282 = $2;
-   $1283 = ((($1282)) + 56|0);
-   $1284 = HEAP32[$1283>>2]|0;
-   $1285 = (($1284) + 1)|0;
-   HEAP32[$1283>>2] = $1285;
-   $1286 = $2;
-   $1287 = ((($1286)) + 48|0);
-   $1288 = HEAP32[$1287>>2]|0;
-   $1289 = $1288 << 1;
-   $1290 = $2;
-   $1291 = ((($1290)) + 48|0);
-   HEAP32[$1291>>2] = $1289;
-   $1292 = $2;
-   $1293 = ((($1292)) + 52|0);
-   $1294 = HEAP32[$1293>>2]|0;
-   $1295 = $1294 << 1;
-   $1296 = $2;
-   $1297 = ((($1296)) + 52|0);
-   HEAP32[$1297>>2] = $1295;
-   $1298 = $2;
-   $1299 = ((($1298)) + 40|0);
-   HEAP32[$1299>>2] = 0;
-   $1300 = $3;
-   $1 = $1300;
-   $2029 = $1;
-   STACKTOP = sp;return ($2029|0);
-   break;
-  }
-  case 391: {
-   $1301 = $2;
-   $1302 = ((($1301)) + 56|0);
-   $1303 = HEAP32[$1302>>2]|0;
-   $1304 = (($1303) + 1)|0;
-   HEAP32[$1302>>2] = $1304;
-   $1305 = $2;
-   $1306 = ((($1305)) + 40|0);
-   $1307 = HEAP32[$1306>>2]|0;
-   $1308 = ($1307|0)==(7);
-   if (!($1308)) {
-    $1309 = $2;
-    $1310 = ((($1309)) + 40|0);
-    $1311 = HEAP32[$1310>>2]|0;
-    $1312 = ($1311|0)==(8);
-    if (!($1312)) {
-     $1324 = $2;
-     $1325 = ((($1324)) + 40|0);
-     $1326 = HEAP32[$1325>>2]|0;
-     $1327 = ($1326|0)==(0);
-     do {
-      if ($1327) {
-       label = 402;
-      } else {
-       $1328 = $2;
-       $1329 = ((($1328)) + 40|0);
-       $1330 = HEAP32[$1329>>2]|0;
-       $1331 = ($1330|0)==(6);
-       if ($1331) {
-        label = 402;
-       } else {
-        $1332 = $2;
-        $1333 = ((($1332)) + 40|0);
-        $1334 = HEAP32[$1333>>2]|0;
-        $1335 = ($1334|0)==(10);
-        if ($1335) {
-         label = 402;
-        } else {
-         $1336 = $2;
-         $1337 = ((($1336)) + 40|0);
-         $1338 = HEAP32[$1337>>2]|0;
-         $1339 = ($1338|0)==(9);
-         if ($1339) {
-          label = 402;
-         } else {
-          $1340 = $2;
-          $1341 = ((($1340)) + 40|0);
-          $1342 = HEAP32[$1341>>2]|0;
-          $1343 = ($1342|0)==(4);
-          if ($1343) {
-           $$old130 = $4;
-           $$old131 = ($$old130|0)!=(0);
-           if (!($$old131)) {
-            break;
-           }
-          } else {
-           $1344 = $2;
-           $1345 = ((($1344)) + 40|0);
-           $1346 = HEAP32[$1345>>2]|0;
-           $1347 = ($1346|0)==(5);
-           $1348 = $4;
-           $1349 = ($1348|0)!=(0);
-           $or$cond132 = $1347 & $1349;
-           if (!($or$cond132)) {
-            break;
-           }
-          }
-          $3 = 350;
-         }
-        }
-       }
-      }
-     } while(0);
-     if ((label|0) == 402) {
-      $3 = 350;
-     }
-     $1350 = $2;
-     $1351 = ((($1350)) + 40|0);
-     HEAP32[$1351>>2] = 0;
-     $1352 = $2;
-     $1353 = ((($1352)) + 48|0);
-     $1354 = HEAP32[$1353>>2]|0;
-     $1355 = $1354 << 1;
-     $1356 = $2;
-     $1357 = ((($1356)) + 48|0);
-     HEAP32[$1357>>2] = $1355;
-     $1358 = $2;
-     $1359 = ((($1358)) + 52|0);
-     $1360 = HEAP32[$1359>>2]|0;
-     $1361 = $1360 << 1;
-     $1362 = $2;
-     $1363 = ((($1362)) + 52|0);
-     HEAP32[$1363>>2] = $1361;
-     $1364 = $3;
-     $1 = $1364;
-     $2029 = $1;
-     STACKTOP = sp;return ($2029|0);
-    }
-   }
-   $1313 = $2;
-   $1314 = ((($1313)) + 40|0);
-   HEAP32[$1314>>2] = 4;
-   $1315 = $2;
-   $1316 = (_nextc($1315)|0);
-   $3 = $1316;
-   $1317 = ($1316|0)==(93);
-   $1318 = $2;
-   if (!($1317)) {
-    $1323 = $3;
-    _pushback($1318,$1323);
-    $1 = 91;
-    $2029 = $1;
-    STACKTOP = sp;return ($2029|0);
-   }
-   $1319 = (_nextc($1318)|0);
-   $3 = $1319;
-   $1320 = ($1319|0)==(61);
-   if ($1320) {
-    $1 = 340;
-    $2029 = $1;
-    STACKTOP = sp;return ($2029|0);
-   } else {
-    $1321 = $2;
-    $1322 = $3;
-    _pushback($1321,$1322);
-    $1 = 339;
-    $2029 = $1;
-    STACKTOP = sp;return ($2029|0);
-   }
-   break;
-  }
-  case 408: {
-   $1365 = $2;
-   $1366 = ((($1365)) + 60|0);
-   $1367 = HEAP32[$1366>>2]|0;
-   $1368 = ($1367|0)!=(0);
-   if ($1368) {
-    $1369 = $2;
-    $1370 = ((($1369)) + 60|0);
-    $1371 = HEAP32[$1370>>2]|0;
-    $1372 = $2;
-    $1373 = ((($1372)) + 56|0);
-    $1374 = HEAP32[$1373>>2]|0;
-    $1375 = ($1371|0)==($1374|0);
-    if ($1375) {
-     $1376 = $2;
-     $1377 = ((($1376)) + 40|0);
-     HEAP32[$1377>>2] = 0;
-     $1378 = $2;
-     $1379 = ((($1378)) + 60|0);
-     HEAP32[$1379>>2] = 0;
-     $1380 = $2;
-     $1381 = ((($1380)) + 56|0);
-     $1382 = HEAP32[$1381>>2]|0;
-     $1383 = (($1382) + -1)|0;
-     HEAP32[$1381>>2] = $1383;
-     $1384 = $2;
-     $1385 = ((($1384)) + 48|0);
-     $1386 = HEAP32[$1385>>2]|0;
-     $1387 = $1386 << 1;
-     $1388 = $2;
-     $1389 = ((($1388)) + 48|0);
-     HEAP32[$1389>>2] = $1387;
-     $1390 = $2;
-     $1391 = ((($1390)) + 52|0);
-     $1392 = HEAP32[$1391>>2]|0;
-     $1393 = $1392 << 1;
-     $1394 = $2;
-     $1395 = ((($1394)) + 52|0);
-     HEAP32[$1395>>2] = $1393;
-     $1 = 363;
-     $2029 = $1;
-     STACKTOP = sp;return ($2029|0);
-    }
-   }
-   $1396 = $2;
-   $1397 = ((($1396)) + 40|0);
-   $1398 = HEAP32[$1397>>2]|0;
-   $1399 = ($1398|0)==(4);
-   do {
-    if ($1399) {
-     label = 415;
-    } else {
-     $1400 = $2;
-     $1401 = ((($1400)) + 40|0);
-     $1402 = HEAP32[$1401>>2]|0;
-     $1403 = ($1402|0)==(5);
-     if ($1403) {
-      label = 415;
-     } else {
-      $1404 = $2;
-      $1405 = ((($1404)) + 40|0);
-      $1406 = HEAP32[$1405>>2]|0;
-      $1407 = ($1406|0)==(1);
-      if ($1407) {
-       label = 415;
-      } else {
-       $1408 = $2;
-       $1409 = ((($1408)) + 40|0);
-       $1410 = HEAP32[$1409>>2]|0;
-       $1411 = ($1410|0)==(3);
-       if ($1411) {
-        label = 415;
-       } else {
-        $1412 = $2;
-        $1413 = ((($1412)) + 40|0);
-        $1414 = HEAP32[$1413>>2]|0;
-        $1415 = ($1414|0)==(2);
-        if ($1415) {
-         $3 = 352;
-         break;
-        } else {
-         $3 = 351;
-         break;
-        }
-       }
-      }
-     }
-    }
-   } while(0);
-   if ((label|0) == 415) {
-    $3 = 123;
-   }
-   $1416 = $2;
-   $1417 = ((($1416)) + 48|0);
-   $1418 = HEAP32[$1417>>2]|0;
-   $1419 = $1418 << 1;
-   $1420 = $2;
-   $1421 = ((($1420)) + 48|0);
-   HEAP32[$1421>>2] = $1419;
-   $1422 = $2;
-   $1423 = ((($1422)) + 52|0);
-   $1424 = HEAP32[$1423>>2]|0;
-   $1425 = $1424 << 1;
-   $1426 = $2;
-   $1427 = ((($1426)) + 52|0);
-   HEAP32[$1427>>2] = $1425;
-   $1428 = $2;
-   $1429 = ((($1428)) + 40|0);
-   HEAP32[$1429>>2] = 0;
-   $1430 = $3;
-   $1 = $1430;
-   $2029 = $1;
-   STACKTOP = sp;return ($2029|0);
-   break;
-  }
-  case 422: {
-   $1441 = $3;
-   _pushback($1435,$1441);
-   $1 = 92;
-   $2029 = $1;
-   STACKTOP = sp;return ($2029|0);
-   break;
-  }
-  case 423: {
-   $1442 = $2;
-   $1443 = ((($1442)) + 40|0);
-   $1444 = HEAP32[$1443>>2]|0;
-   $1445 = ($1444|0)==(0);
-   do {
-    if ($1445) {
-     label = 427;
-    } else {
-     $1446 = $2;
-     $1447 = ((($1446)) + 40|0);
-     $1448 = HEAP32[$1447>>2]|0;
-     $1449 = ($1448|0)==(6);
-     if ($1449) {
-      label = 427;
-     } else {
-      $1450 = $2;
-      $1451 = ((($1450)) + 40|0);
-      $1452 = HEAP32[$1451>>2]|0;
-      $1453 = ($1452|0)==(10);
-      if ($1453) {
-       label = 427;
-      } else {
-       $1454 = $2;
-       $1455 = ((($1454)) + 40|0);
-       $1456 = HEAP32[$1455>>2]|0;
-       $1457 = ($1456|0)==(9);
-       if ($1457) {
-        label = 427;
-       } else {
-        $1548 = $2;
-        $1549 = (_nextc($1548)|0);
-        $3 = $1549;
-        $1550 = ($1549|0)==(61);
-        $1551 = $2;
-        if ($1550) {
-         $1552 = (_intern_gen_c($1551,37)|0);
-         $1553 = $2;
-         $1554 = ((($1553)) + 1132|0);
-         $1555 = HEAP32[$1554>>2]|0;
-         HEAP32[$1555>>2] = $1552;
-         $1556 = $2;
-         $1557 = ((($1556)) + 40|0);
-         HEAP32[$1557>>2] = 0;
-         $1 = 345;
-         $2029 = $1;
-         STACKTOP = sp;return ($2029|0);
-        }
-        $1558 = ((($1551)) + 40|0);
-        $1559 = HEAP32[$1558>>2]|0;
-        $1560 = ($1559|0)==(4);
-        if ($1560) {
-         $$old136 = $4;
-         $$old137 = ($$old136|0)==(0);
-         $$old139 = $3;
-         $$old140 = ($$old139|0)==(32);
-         $or$cond143 = $$old137 | $$old140;
-         if (!($or$cond143)) {
-          label = 461;
-         }
-        } else {
-         $1561 = $2;
-         $1562 = ((($1561)) + 40|0);
-         $1563 = HEAP32[$1562>>2]|0;
-         $1564 = ($1563|0)==(5);
-         $1565 = $4;
-         $1566 = ($1565|0)!=(0);
-         $or$cond138 = $1564 & $1566;
-         $or$cond138$not = $or$cond138 ^ 1;
-         $1567 = $3;
-         $1568 = ($1567|0)==(32);
-         $or$cond141 = $or$cond138$not | $1568;
-         if (!($or$cond141)) {
-          label = 461;
-         }
-        }
-        if ((label|0) == 461) {
-         $1569 = $3;
-         $1570 = (($1569) - 9)|0;
-         $1571 = ($1570>>>0)<(5);
-         if (!($1571)) {
-          break;
-         }
-        }
-        $1572 = $2;
-        $1573 = ((($1572)) + 40|0);
-        $1574 = HEAP32[$1573>>2]|0;
-        $1575 = ($1574|0)==(7);
-        if ($1575) {
-         label = 464;
-        } else {
-         $1576 = $2;
-         $1577 = ((($1576)) + 40|0);
-         $1578 = HEAP32[$1577>>2]|0;
-         $1579 = ($1578|0)==(8);
-         if ($1579) {
-          label = 464;
-         } else {
-          $1581 = $2;
-          $$sink144 = 0;$$sink146 = $1581;
-         }
-        }
-        if ((label|0) == 464) {
-         $1580 = $2;
-         $$sink144 = 4;$$sink146 = $1580;
-        }
-        $1582 = ((($$sink146)) + 40|0);
-        HEAP32[$1582>>2] = $$sink144;
-        $1583 = $2;
-        $1584 = $3;
-        _pushback($1583,$1584);
-        $1 = 37;
-        $2029 = $1;
-        STACKTOP = sp;return ($2029|0);
-       }
-      }
-     }
-    }
-   } while(0);
-   if ((label|0) == 427) {
-    $1458 = $2;
-    $1459 = (_nextc($1458)|0);
-    $3 = $1459;
-   }
-   $1460 = $3;
-   $1461 = ($1460|0)<(0);
-   do {
-    if ($1461) {
-     label = 431;
-    } else {
-     $1462 = $3;
-     $1463 = $1462 | 32;
-     $1464 = (($1463) - 97)|0;
-     $1465 = ($1464>>>0)<(26);
-     if (!($1465)) {
-      $1466 = $3;
-      $1467 = (($1466) - 48)|0;
-      $1468 = ($1467>>>0)<(10);
-      if (!($1468)) {
-       label = 431;
-       break;
-      }
-     }
-     $1470 = $2;
-     $1471 = (_nextc($1470)|0);
-     $20 = $1471;
-     $1472 = $20;
-     $1473 = (_isalnum($1472)|0);
-     $1474 = ($1473|0)!=(0);
-     if ($1474) {
-      $1475 = $2;
-      _yyerror($1475,63336);
-      $1 = 0;
-      $2029 = $1;
-      STACKTOP = sp;return ($2029|0);
-     }
-    }
-   } while(0);
-   if ((label|0) == 431) {
-    $1469 = $3;
-    $20 = $1469;
-    $3 = 81;
-   }
-   $1476 = $3;
-   $1477 = ($1476|0)<(0);
-   $1478 = $20;
-   $1479 = ($1478|0)<(0);
-   $or$cond135 = $1477 | $1479;
-   if ($or$cond135) {
-    $1480 = $2;
-    _yyerror($1480,63360);
-    $1 = 0;
-    $2029 = $1;
-    STACKTOP = sp;return ($2029|0);
-   }
-   $1481 = $20;
-   $21 = $1481;
-   $1482 = $20;
-   $1483 = ($1482|0)==(40);
-   do {
-    if ($1483) {
-     $20 = 41;
-    } else {
-     $1484 = $20;
-     $1485 = ($1484|0)==(91);
-     if ($1485) {
-      $20 = 93;
-      break;
-     }
-     $1486 = $20;
-     $1487 = ($1486|0)==(123);
-     if ($1487) {
-      $20 = 125;
-      break;
-     }
-     $1488 = $20;
-     $1489 = ($1488|0)==(60);
-     if ($1489) {
-      $20 = 62;
-      break;
-     } else {
-      $21 = 0;
-      break;
-     }
-    }
-   } while(0);
-   $1490 = $3;
-   do {
-    switch ($1490|0) {
-    case 81:  {
-     $1491 = $2;
-     $1492 = $20;
-     $1493 = $21;
-     $1494 = (_new_strterm($1491,3,$1492,$1493)|0);
-     $1495 = $2;
-     $1496 = ((($1495)) + 44|0);
-     HEAP32[$1496>>2] = $1494;
-     $1 = 360;
-     $2029 = $1;
-     STACKTOP = sp;return ($2029|0);
-     break;
-    }
-    case 113:  {
-     $1497 = $2;
-     $1498 = $20;
-     $1499 = $21;
-     $1500 = (_new_strterm($1497,1,$1498,$1499)|0);
-     $1501 = $2;
-     $1502 = ((($1501)) + 44|0);
-     HEAP32[$1502>>2] = $1500;
-     $1503 = $2;
-     $1504 = (_parse_string($1503)|0);
-     $1 = $1504;
-     $2029 = $1;
-     STACKTOP = sp;return ($2029|0);
-     break;
-    }
-    case 87:  {
-     $1505 = $2;
-     $1506 = $20;
-     $1507 = $21;
-     $1508 = (_new_strterm($1505,43,$1506,$1507)|0);
-     $1509 = $2;
-     $1510 = ((($1509)) + 44|0);
-     HEAP32[$1510>>2] = $1508;
-     $1 = 358;
-     $2029 = $1;
-     STACKTOP = sp;return ($2029|0);
-     break;
-    }
-    case 119:  {
-     $1511 = $2;
-     $1512 = $20;
-     $1513 = $21;
-     $1514 = (_new_strterm($1511,41,$1512,$1513)|0);
-     $1515 = $2;
-     $1516 = ((($1515)) + 44|0);
-     HEAP32[$1516>>2] = $1514;
-     $1 = 358;
-     $2029 = $1;
-     STACKTOP = sp;return ($2029|0);
-     break;
-    }
-    case 120:  {
-     $1517 = $2;
-     $1518 = $20;
-     $1519 = $21;
-     $1520 = (_new_strterm($1517,131,$1518,$1519)|0);
-     $1521 = $2;
-     $1522 = ((($1521)) + 44|0);
-     HEAP32[$1522>>2] = $1520;
-     $1 = 361;
-     $2029 = $1;
-     STACKTOP = sp;return ($2029|0);
-     break;
-    }
-    case 114:  {
-     $1523 = $2;
-     $1524 = $20;
-     $1525 = $21;
-     $1526 = (_new_strterm($1523,7,$1524,$1525)|0);
-     $1527 = $2;
-     $1528 = ((($1527)) + 44|0);
-     HEAP32[$1528>>2] = $1526;
-     $1 = 357;
-     $2029 = $1;
-     STACKTOP = sp;return ($2029|0);
-     break;
-    }
-    case 115:  {
-     $1529 = $2;
-     $1530 = $20;
-     $1531 = $21;
-     $1532 = (_new_strterm($1529,17,$1530,$1531)|0);
-     $1533 = $2;
-     $1534 = ((($1533)) + 44|0);
-     HEAP32[$1534>>2] = $1532;
-     $1 = 356;
-     $2029 = $1;
-     STACKTOP = sp;return ($2029|0);
-     break;
-    }
-    case 73:  {
-     $1535 = $2;
-     $1536 = $20;
-     $1537 = $21;
-     $1538 = (_new_strterm($1535,51,$1536,$1537)|0);
-     $1539 = $2;
-     $1540 = ((($1539)) + 44|0);
-     HEAP32[$1540>>2] = $1538;
-     $1 = 359;
-     $2029 = $1;
-     STACKTOP = sp;return ($2029|0);
-     break;
-    }
-    case 105:  {
-     $1541 = $2;
-     $1542 = $20;
-     $1543 = $21;
-     $1544 = (_new_strterm($1541,49,$1542,$1543)|0);
-     $1545 = $2;
-     $1546 = ((($1545)) + 44|0);
-     HEAP32[$1546>>2] = $1544;
-     $1 = 359;
-     $2029 = $1;
-     STACKTOP = sp;return ($2029|0);
-     break;
-    }
-    default: {
-     $1547 = $2;
-     _yyerror($1547,63336);
-     $1 = 0;
-     $2029 = $1;
-     STACKTOP = sp;return ($2029|0);
-    }
-    }
-   } while(0);
-   break;
-  }
-  case 467: {
-   $1585 = $2;
-   $1586 = ((($1585)) + 40|0);
-   HEAP32[$1586>>2] = 1;
-   $1587 = $2;
-   $1588 = (_newtok($1587)|0);
-   $7 = $1588;
-   $1589 = $2;
-   $1590 = (_nextc($1589)|0);
-   $3 = $1590;
-   $1591 = $3;
-   $1592 = ($1591|0)<(0);
-   if ($1592) {
-    $1593 = $2;
-    _yyerror($1593,63405);
-    $1 = 0;
-    $2029 = $1;
-    STACKTOP = sp;return ($2029|0);
-   }
-   $1594 = $3;
-   L568: do {
-    switch ($1594|0) {
-    case 95:  {
-     $1595 = $2;
-     $1596 = (_nextc($1595)|0);
-     $3 = $1596;
-     $1597 = $3;
-     $1598 = ($1597|0)>=(0);
-     do {
-      if ($1598) {
-       $1599 = $3;
-       $1600 = $1599 | 32;
-       $1601 = (($1600) - 97)|0;
-       $1602 = ($1601>>>0)<(26);
-       if (!($1602)) {
-        $1603 = $3;
-        $1604 = (($1603) - 48)|0;
-        $1605 = ($1604>>>0)<(10);
-        $1606 = $3;
-        $1607 = ($1606|0)==(95);
-        $or$cond149 = $1605 | $1607;
-        $or$cond149$not = $or$cond149 ^ 1;
-        $1608 = $3;
-        $1609 = ($1608>>>0)<=(127);
-        $or$cond152 = $or$cond149$not & $1609;
-        if ($or$cond152) {
-         break;
-        }
-       }
-       $1610 = $2;
-       _tokadd($1610,36);
-       $1611 = $2;
-       $1612 = $3;
-       _tokadd($1611,$1612);
-       label = 511;
-       break L47;
-      }
-     } while(0);
-     $1613 = $2;
-     $1614 = $3;
-     _pushback($1613,$1614);
-     $3 = 95;
-     label = 475;
-     break;
-    }
-    case 34: case 62: case 60: case 58: case 61: case 46: case 44: case 59: case 92: case 47: case 64: case 33: case 63: case 36: case 42: case 126:  {
-     label = 475;
-     break;
-    }
-    case 45:  {
-     $1626 = $2;
-     _tokadd($1626,36);
-     $1627 = $2;
-     $1628 = $3;
-     _tokadd($1627,$1628);
-     $1629 = $2;
-     $1630 = (_nextc($1629)|0);
-     $3 = $1630;
-     $1631 = $2;
-     $1632 = $3;
-     _pushback($1631,$1632);
-     label = 477;
-     break;
-    }
-    case 43: case 39: case 96: case 38:  {
-     $1641 = $6;
-     $1642 = ($1641|0)==(7);
-     $1643 = $2;
-     if ($1642) {
-      _tokadd($1643,36);
-      $1644 = $2;
-      $1645 = $3;
-      _tokadd($1644,$1645);
-      label = 477;
-      break L568;
-     }
-     $1646 = $3;
-     $1647 = (_new_back_ref($1643,$1646)|0);
-     $1648 = $2;
-     $1649 = ((($1648)) + 1132|0);
-     $1650 = HEAP32[$1649>>2]|0;
-     HEAP32[$1650>>2] = $1647;
-     $1 = 322;
-     $2029 = $1;
-     STACKTOP = sp;return ($2029|0);
-     break;
-    }
-    case 57: case 56: case 55: case 54: case 53: case 52: case 51: case 50: case 49:  {
-     while(1) {
-      $1651 = $2;
-      $1652 = $3;
-      _tokadd($1651,$1652);
-      $1653 = $2;
-      $1654 = (_nextc($1653)|0);
-      $3 = $1654;
-      $1655 = $3;
-      $1656 = ($1655|0)>=(0);
-      if (!($1656)) {
-       break;
-      }
-      $1657 = $3;
-      $1658 = (_isdigit($1657)|0);
-      $1659 = ($1658|0)!=(0);
-      if (!($1659)) {
-       break;
-      }
-     }
-     $1660 = $2;
-     $1661 = $3;
-     _pushback($1660,$1661);
-     $1662 = $6;
-     $1663 = ($1662|0)==(7);
-     if ($1663) {
-      label = 477;
-     } else {
-      $1664 = $2;
-      _tokfix($1664);
-      $1665 = $2;
-      $1666 = (_tok($1665)|0);
-      $1667 = (_strtoul($1666,0,10)|0);
-      $22 = $1667;
-      $1668 = $22;
-      $1669 = ($1668>>>0)>(2147483647);
-      $1670 = $2;
-      if ($1669) {
-       _yyerror_i($1670,63439,2147483647);
-       $1 = 0;
-       $2029 = $1;
-       STACKTOP = sp;return ($2029|0);
-      } else {
-       $1671 = $22;
-       $1672 = (_new_nth_ref($1670,$1671)|0);
-       $1673 = $2;
-       $1674 = ((($1673)) + 1132|0);
-       $1675 = HEAP32[$1674>>2]|0;
-       HEAP32[$1675>>2] = $1672;
-       $1 = 321;
-       $2029 = $1;
-       STACKTOP = sp;return ($2029|0);
-      }
-     }
-     break;
-    }
-    case 48:  {
-     label = 490;
-     break;
-    }
-    default: {
-     $1676 = $3;
-     $1677 = $1676 | 32;
-     $1678 = (($1677) - 97)|0;
-     $1679 = ($1678>>>0)<(26);
-     if ($1679) {
-      label = 490;
-     } else {
-      $1680 = $3;
-      $1681 = (($1680) - 48)|0;
-      $1682 = ($1681>>>0)<(10);
-      $1683 = $3;
-      $1684 = ($1683|0)==(95);
-      $or$cond155 = $1682 | $1684;
-      $or$cond155$not = $or$cond155 ^ 1;
-      $1685 = $3;
-      $1686 = ($1685>>>0)<=(127);
-      $or$cond158 = $or$cond155$not & $1686;
-      if ($or$cond158) {
-       $1687 = $2;
-       $1688 = $3;
-       _pushback($1687,$1688);
-       $1 = 36;
-       $2029 = $1;
-       STACKTOP = sp;return ($2029|0);
-      } else {
-       label = 490;
-      }
-     }
-    }
-    }
-   } while(0);
-   if ((label|0) == 475) {
-    $1615 = $2;
-    _tokadd($1615,36);
-    $1616 = $2;
-    $1617 = $3;
-    _tokadd($1616,$1617);
-    $1618 = $2;
-    _tokfix($1618);
-    $1619 = $2;
-    $1620 = $2;
-    $1621 = (_tok($1620)|0);
-    $1622 = (_intern_cstr_gen($1619,$1621)|0);
-    $1623 = $2;
-    $1624 = ((($1623)) + 1132|0);
-    $1625 = HEAP32[$1624>>2]|0;
-    HEAP32[$1625>>2] = $1622;
-    $1 = 308;
-    $2029 = $1;
-    STACKTOP = sp;return ($2029|0);
-   }
-   else if ((label|0) == 477) {
-    $1633 = $2;
-    _tokfix($1633);
-    $1634 = $2;
-    $1635 = $2;
-    $1636 = (_tok($1635)|0);
-    $1637 = (_intern_cstr_gen($1634,$1636)|0);
-    $1638 = $2;
-    $1639 = ((($1638)) + 1132|0);
-    $1640 = HEAP32[$1639>>2]|0;
-    HEAP32[$1640>>2] = $1637;
-    $1 = 308;
-    $2029 = $1;
-    STACKTOP = sp;return ($2029|0);
-   }
-   else if ((label|0) == 490) {
-    $1689 = $2;
-    _tokadd($1689,36);
-    label = 511;
-    break;
-   }
-   break;
-  }
-  case 491: {
-   $1690 = $2;
-   $1691 = (_nextc($1690)|0);
-   $3 = $1691;
-   $1692 = $2;
-   $1693 = (_newtok($1692)|0);
-   $7 = $1693;
-   $1694 = $2;
-   _tokadd($1694,64);
-   $1695 = $3;
-   $1696 = ($1695|0)==(64);
-   if ($1696) {
-    $1697 = $2;
-    _tokadd($1697,64);
-    $1698 = $2;
-    $1699 = (_nextc($1698)|0);
-    $3 = $1699;
-   }
-   $1700 = $3;
-   $1701 = ($1700|0)<(0);
-   if ($1701) {
-    $1702 = $2;
-    $1703 = ((($1702)) + 1108|0);
-    $1704 = HEAP32[$1703>>2]|0;
-    $1705 = ($1704|0)==(1);
-    $1706 = $2;
-    if ($1705) {
-     _yyerror($1706,63473);
-    } else {
-     _yyerror($1706,63509);
-    }
-    $1 = 0;
-    $2029 = $1;
-    STACKTOP = sp;return ($2029|0);
-   }
-   $1707 = $3;
-   $1708 = (_isdigit($1707)|0);
-   $1709 = ($1708|0)!=(0);
-   if (!($1709)) {
-    $1716 = $3;
-    $1717 = $1716 | 32;
-    $1718 = (($1717) - 97)|0;
-    $1719 = ($1718>>>0)<(26);
-    if ($1719) {
-     label = 511;
-     break;
-    }
-    $1720 = $3;
-    $1721 = (($1720) - 48)|0;
-    $1722 = ($1721>>>0)<(10);
-    $1723 = $3;
-    $1724 = ($1723|0)==(95);
-    $or$cond161 = $1722 | $1724;
-    $or$cond161$not = $or$cond161 ^ 1;
-    $1725 = $3;
-    $1726 = ($1725>>>0)<=(127);
-    $or$cond164 = $or$cond161$not & $1726;
-    if (!($or$cond164)) {
-     label = 511;
-     break;
-    }
-    $1727 = $2;
-    $1728 = $3;
-    _pushback($1727,$1728);
-    $1 = 64;
-    $2029 = $1;
-    STACKTOP = sp;return ($2029|0);
-   }
-   $1710 = $2;
-   $1711 = ((($1710)) + 1108|0);
-   $1712 = HEAP32[$1711>>2]|0;
-   $1713 = ($1712|0)==(1);
-   $1714 = $2;
-   $1715 = $3;
-   if ($1713) {
-    _yyerror_i($1714,63542,$1715);
-   } else {
-    _yyerror_i($1714,63592,$1715);
-   }
-   $1 = 0;
-   $2029 = $1;
-   STACKTOP = sp;return ($2029|0);
-   break;
-  }
-  case 506: {
-   $1729 = $2;
-   $1730 = (_newtok($1729)|0);
-   $7 = $1730;
-   label = 511;
-   break;
-  }
-  case 510: {
-   $1744 = $2;
-   $1745 = (_newtok($1744)|0);
-   $7 = $1745;
-   label = 511;
-   break;
-  }
- }
- if ((label|0) == 24) {
-  $100 = $2;
-  $101 = ((($100)) + 72|0);
-  $102 = HEAP8[$101>>0]|0;
-  $103 = $102 & -2;
-  $104 = $103 | 1;
-  HEAP8[$101>>0] = $104;
-  $105 = $2;
-  $106 = ((($105)) + 40|0);
-  HEAP32[$106>>2] = 0;
-  $1 = 10;
-  $2029 = $1;
-  STACKTOP = sp;return ($2029|0);
- }
- else if ((label|0) == 237) {
-  $15 = 0;
-  $14 = 0;
-  $13 = 0;
-  $12 = 0;
-  $742 = $2;
-  $743 = ((($742)) + 40|0);
-  HEAP32[$743>>2] = 1;
-  $744 = $2;
-  (_newtok($744)|0);
-  $745 = $3;
-  $746 = ($745|0)==(45);
-  $747 = $3;
-  $748 = ($747|0)==(43);
-  $or$cond60 = $746 | $748;
-  if ($or$cond60) {
-   $749 = $2;
-   $750 = $3;
-   _tokadd($749,$750);
-   $751 = $2;
-   $752 = (_nextc($751)|0);
-   $3 = $752;
-  }
-  $753 = $3;
-  $754 = ($753|0)==(48);
-  L667: do {
-   if ($754) {
-    $755 = $2;
-    $756 = (_toklen($755)|0);
-    $16 = $756;
-    $757 = $2;
-    $758 = (_nextc($757)|0);
-    $3 = $758;
-    $759 = $3;
-    $760 = ($759|0)==(120);
-    $761 = $3;
-    $762 = ($761|0)==(88);
-    $or$cond63 = $760 | $762;
-    if ($or$cond63) {
-     $763 = $2;
-     $764 = (_nextc($763)|0);
-     $3 = $764;
-     $765 = $3;
-     $766 = ($765|0)>=(0);
-     L671: do {
-      if ($766) {
-       $767 = $3;
-       $768 = (($767) - 48)|0;
-       $769 = ($768>>>0)<(10);
-       if (!($769)) {
-        $770 = $3;
-        $771 = $770 | 32;
-        $772 = (($771) - 97)|0;
-        $773 = ($772>>>0)<(6);
-        if (!($773)) {
-         break;
-        }
-       }
-       while(1) {
-        $774 = $3;
-        $775 = ($774|0)==(95);
-        if ($775) {
-         $776 = $15;
-         $777 = ($776|0)!=(0);
-         if ($777) {
-          break L671;
-         }
-         $778 = $3;
-         $15 = $778;
-        } else {
-         $779 = $3;
-         $780 = (($779) - 48)|0;
-         $781 = ($780>>>0)<(10);
-         if (!($781)) {
-          $782 = $3;
-          $783 = $782 | 32;
-          $784 = (($783) - 97)|0;
-          $785 = ($784>>>0)<(6);
-          if (!($785)) {
-           break L671;
-          }
-         }
-         $15 = 0;
-         $786 = $2;
-         $787 = $3;
-         $788 = (_tolower($787)|0);
-         _tokadd($786,$788);
-        }
-        $789 = $2;
-        $790 = (_nextc($789)|0);
-        $3 = $790;
-        $791 = ($790|0)>=(0);
-        if (!($791)) {
-         break;
-        }
-       }
-      }
-     } while(0);
-     $792 = $2;
-     $793 = $3;
-     _pushback($792,$793);
-     $794 = $2;
-     _tokfix($794);
-     $795 = $2;
-     $796 = (_toklen($795)|0);
-     $797 = $16;
-     $798 = ($796|0)==($797|0);
-     if ($798) {
-      $799 = $2;
-      _yyerror($799,63212);
-      $1 = 0;
-      $2029 = $1;
-      STACKTOP = sp;return ($2029|0);
-     }
-     $800 = $15;
-     $801 = ($800|0)!=(0);
-     if ($801) {
-      label = 320;
-      break;
-     }
-     $802 = $2;
-     $803 = $2;
-     $804 = (_tok($803)|0);
-     $805 = (_new_int($802,$804,16)|0);
-     $806 = $2;
-     $807 = ((($806)) + 1132|0);
-     $808 = HEAP32[$807>>2]|0;
-     HEAP32[$808>>2] = $805;
-     $1 = 313;
-     $2029 = $1;
-     STACKTOP = sp;return ($2029|0);
-    }
-    $809 = $3;
-    $810 = ($809|0)==(98);
-    $811 = $3;
-    $812 = ($811|0)==(66);
-    $or$cond66 = $810 | $812;
-    if ($or$cond66) {
-     $813 = $2;
-     $814 = (_nextc($813)|0);
-     $3 = $814;
-     $815 = $3;
-     $816 = ($815|0)==(48);
-     $817 = $3;
-     $818 = ($817|0)==(49);
-     $or$cond69 = $816 | $818;
-     L695: do {
-      if ($or$cond69) {
-       while(1) {
-        $819 = $3;
-        $820 = ($819|0)==(95);
-        if ($820) {
-         $821 = $15;
-         $822 = ($821|0)!=(0);
-         if ($822) {
-          break L695;
-         }
-         $823 = $3;
-         $15 = $823;
-        } else {
-         $824 = $3;
-         $825 = ($824|0)!=(48);
-         $826 = $3;
-         $827 = ($826|0)!=(49);
-         $or$cond72 = $825 & $827;
-         if ($or$cond72) {
-          break L695;
-         }
-         $15 = 0;
-         $828 = $2;
-         $829 = $3;
-         _tokadd($828,$829);
-        }
-        $830 = $2;
-        $831 = (_nextc($830)|0);
-        $3 = $831;
-        $832 = ($831|0)>=(0);
-        if (!($832)) {
-         break;
-        }
-       }
-      }
-     } while(0);
-     $833 = $2;
-     $834 = $3;
-     _pushback($833,$834);
-     $835 = $2;
-     _tokfix($835);
-     $836 = $2;
-     $837 = (_toklen($836)|0);
-     $838 = $16;
-     $839 = ($837|0)==($838|0);
-     if ($839) {
-      $840 = $2;
-      _yyerror($840,63212);
-      $1 = 0;
-      $2029 = $1;
-      STACKTOP = sp;return ($2029|0);
-     }
-     $841 = $15;
-     $842 = ($841|0)!=(0);
-     if ($842) {
-      label = 320;
-      break;
-     }
-     $843 = $2;
-     $844 = $2;
-     $845 = (_tok($844)|0);
-     $846 = (_new_int($843,$845,2)|0);
-     $847 = $2;
-     $848 = ((($847)) + 1132|0);
-     $849 = HEAP32[$848>>2]|0;
-     HEAP32[$849>>2] = $846;
-     $1 = 313;
-     $2029 = $1;
-     STACKTOP = sp;return ($2029|0);
-    }
-    $850 = $3;
-    $851 = ($850|0)==(100);
-    $852 = $3;
-    $853 = ($852|0)==(68);
-    $or$cond75 = $851 | $853;
-    if ($or$cond75) {
-     $854 = $2;
-     $855 = (_nextc($854)|0);
-     $3 = $855;
-     $856 = $3;
-     $857 = ($856|0)>=(0);
-     L714: do {
-      if ($857) {
-       $858 = $3;
-       $859 = (($858) - 48)|0;
-       $860 = ($859>>>0)<(10);
-       if ($860) {
-        while(1) {
-         $861 = $3;
-         $862 = ($861|0)==(95);
-         if ($862) {
-          $863 = $15;
-          $864 = ($863|0)!=(0);
-          if ($864) {
-           break L714;
-          }
-          $865 = $3;
-          $15 = $865;
-         } else {
-          $866 = $3;
-          $867 = (($866) - 48)|0;
-          $868 = ($867>>>0)<(10);
-          if (!($868)) {
-           break L714;
-          }
-          $15 = 0;
-          $869 = $2;
-          $870 = $3;
-          _tokadd($869,$870);
-         }
-         $871 = $2;
-         $872 = (_nextc($871)|0);
-         $3 = $872;
-         $873 = ($872|0)>=(0);
-         if (!($873)) {
-          break;
-         }
-        }
-       }
-      }
-     } while(0);
-     $874 = $2;
-     $875 = $3;
-     _pushback($874,$875);
-     $876 = $2;
-     _tokfix($876);
-     $877 = $2;
-     $878 = (_toklen($877)|0);
-     $879 = $16;
-     $880 = ($878|0)==($879|0);
-     if ($880) {
-      $881 = $2;
-      _yyerror($881,63212);
-      $1 = 0;
-      $2029 = $1;
-      STACKTOP = sp;return ($2029|0);
-     }
-     $882 = $15;
-     $883 = ($882|0)!=(0);
-     if ($883) {
-      label = 320;
-      break;
-     }
-     $884 = $2;
-     $885 = $2;
-     $886 = (_tok($885)|0);
-     $887 = (_new_int($884,$886,10)|0);
-     $888 = $2;
-     $889 = ((($888)) + 1132|0);
-     $890 = HEAP32[$889>>2]|0;
-     HEAP32[$890>>2] = $887;
-     $1 = 313;
-     $2029 = $1;
-     STACKTOP = sp;return ($2029|0);
-    }
-    $891 = $3;
-    $892 = ($891|0)==(95);
-    if ($892) {
-     label = 286;
-    } else {
-     $893 = $3;
-     $894 = ($893|0)==(111);
-     $895 = $3;
-     $896 = ($895|0)==(79);
-     $or$cond78 = $894 | $896;
-     do {
-      if ($or$cond78) {
-       $897 = $2;
-       $898 = (_nextc($897)|0);
-       $3 = $898;
-       $899 = $3;
-       $900 = ($899|0)<(0);
-       $901 = $3;
-       $902 = ($901|0)==(95);
-       $or$cond81 = $900 | $902;
-       if (!($or$cond81)) {
-        $903 = $3;
-        $904 = (($903) - 48)|0;
-        $905 = ($904>>>0)<(10);
-        if ($905) {
-         break;
-        }
-       }
-       $906 = $2;
-       _yyerror($906,63212);
-       $1 = 0;
-       $2029 = $1;
-       STACKTOP = sp;return ($2029|0);
-      }
-     } while(0);
-     $907 = $3;
-     $908 = ($907|0)>=(48);
-     $909 = $3;
-     $910 = ($909|0)<=(55);
-     $or$cond84 = $908 & $910;
-     if ($or$cond84) {
-      label = 286;
-     } else {
-      label = 298;
-     }
-    }
-    L741: do {
-     if ((label|0) == 286) {
-      while(1) {
-       label = 0;
-       $911 = $3;
-       $912 = ($911|0)==(95);
-       if ($912) {
-        $913 = $15;
-        $914 = ($913|0)!=(0);
-        if ($914) {
-         break;
-        }
-        $915 = $3;
-        $15 = $915;
-       } else {
-        $916 = $3;
-        $917 = ($916|0)<(48);
-        $918 = $3;
-        $919 = ($918|0)>(57);
-        $or$cond87 = $917 | $919;
-        if ($or$cond87) {
-         break;
-        }
-        $920 = $3;
-        $921 = ($920|0)>(55);
-        if ($921) {
-         break L741;
-        }
-        $15 = 0;
-        $922 = $2;
-        $923 = $3;
-        _tokadd($922,$923);
-       }
-       $924 = $2;
-       $925 = (_nextc($924)|0);
-       $3 = $925;
-       $926 = ($925|0)>=(0);
-       if ($926) {
-        label = 286;
-       } else {
-        break;
-       }
-      }
-      $927 = $2;
-      $928 = (_toklen($927)|0);
-      $929 = $16;
-      $930 = ($928|0)>($929|0);
-      if (!($930)) {
-       $943 = $15;
-       $944 = ($943|0)!=(0);
-       if (!($944)) {
-        label = 298;
-        break;
-       }
-       $945 = $2;
-       $946 = $3;
-       _pushback($945,$946);
-       label = 320;
-       break L667;
-      }
-      $931 = $2;
-      $932 = $3;
-      _pushback($931,$932);
-      $933 = $2;
-      _tokfix($933);
-      $934 = $15;
-      $935 = ($934|0)!=(0);
-      if ($935) {
-       label = 320;
-       break L667;
-      }
-      $936 = $2;
-      $937 = $2;
-      $938 = (_tok($937)|0);
-      $939 = (_new_int($936,$938,8)|0);
-      $940 = $2;
-      $941 = ((($940)) + 1132|0);
-      $942 = HEAP32[$941>>2]|0;
-      HEAP32[$942>>2] = $939;
-      $1 = 313;
-      $2029 = $1;
-      STACKTOP = sp;return ($2029|0);
-     }
-    } while(0);
-    if ((label|0) == 298) {
-     $947 = $3;
-     $948 = ($947|0)>(55);
-     $949 = $3;
-     $950 = ($949|0)<=(57);
-     $or$cond90 = $948 & $950;
-     if (!($or$cond90)) {
-      $952 = $3;
-      $953 = ($952|0)==(46);
-      $954 = $3;
-      $955 = ($954|0)==(101);
-      $or$cond93 = $953 | $955;
-      $956 = $3;
-      $957 = ($956|0)==(69);
-      $or$cond96 = $or$cond93 | $957;
-      $958 = $2;
-      if ($or$cond96) {
-       _tokadd($958,48);
-       label = 303;
-       break;
-      }
-      $959 = $3;
-      _pushback($958,$959);
-      $960 = $2;
-      $961 = (_new_int($960,63263,10)|0);
-      $962 = $2;
-      $963 = ((($962)) + 1132|0);
-      $964 = HEAP32[$963>>2]|0;
-      HEAP32[$964>>2] = $961;
-      $1 = 313;
-      $2029 = $1;
-      STACKTOP = sp;return ($2029|0);
-     }
-    }
-    $951 = $2;
-    _yyerror($951,63243);
-    label = 303;
-   } else {
-    label = 303;
-   }
-  } while(0);
-  L766: do {
-   if ((label|0) == 303) {
-    L767: while(1) {
-     label = 0;
-     $965 = $3;
-     switch ($965|0) {
-     case 57: case 56: case 55: case 54: case 53: case 52: case 51: case 50: case 49: case 48:  {
-      $15 = 0;
-      $966 = $2;
-      $967 = $3;
-      _tokadd($966,$967);
-      break;
-     }
-     case 46:  {
-      $968 = $15;
-      $969 = ($968|0)!=(0);
-      if ($969) {
-       label = 320;
-       break L766;
-      }
-      $970 = $13;
-      $971 = ($970|0)!=(0);
-      $972 = $14;
-      $973 = ($972|0)!=(0);
-      $or$cond99 = $971 | $973;
-      if ($or$cond99) {
-       break L767;
-      }
-      $974 = $2;
-      $975 = (_nextc($974)|0);
-      $17 = $975;
-      $976 = $17;
-      $977 = ($976|0)<(0);
-      if ($977) {
-       label = 309;
-       break L767;
-      }
-      $978 = $17;
-      $979 = (($978) - 48)|0;
-      $980 = ($979>>>0)<(10);
-      if (!($980)) {
-       label = 309;
-       break L767;
-      }
-      $983 = $17;
-      $3 = $983;
-      $984 = $2;
-      _tokadd($984,46);
-      $985 = $2;
-      $986 = $3;
-      _tokadd($985,$986);
-      $987 = $12;
-      $988 = (($987) + 1)|0;
-      $12 = $988;
-      $989 = $13;
-      $990 = (($989) + 1)|0;
-      $13 = $990;
-      $15 = 0;
-      break;
-     }
-     case 69: case 101:  {
-      $991 = $15;
-      $992 = ($991|0)!=(0);
-      if ($992) {
-       label = 312;
-       break L767;
-      }
-      $996 = $14;
-      $997 = ($996|0)!=(0);
-      if ($997) {
-       break L767;
-      }
-      $998 = $2;
-      $999 = $3;
-      _tokadd($998,$999);
-      $1000 = $14;
-      $1001 = (($1000) + 1)|0;
-      $14 = $1001;
-      $1002 = $12;
-      $1003 = (($1002) + 1)|0;
-      $12 = $1003;
-      $1004 = $3;
-      $15 = $1004;
-      $1005 = $2;
-      $1006 = (_nextc($1005)|0);
-      $3 = $1006;
-      $1007 = $3;
-      $1008 = ($1007|0)!=(45);
-      $1009 = $3;
-      $1010 = ($1009|0)!=(43);
-      $or$cond102 = $1008 & $1010;
-      if ($or$cond102) {
-       label = 303;
-       continue L767;
-      }
-      $1011 = $2;
-      $1012 = $3;
-      _tokadd($1011,$1012);
-      $1013 = $3;
-      $15 = $1013;
-      break;
-     }
-     case 95:  {
-      $1014 = $15;
-      $1015 = ($1014|0)!=(0);
-      if ($1015) {
-       break L767;
-      }
-      $1016 = $3;
-      $15 = $1016;
-      break;
-     }
-     default: {
-      break L767;
-     }
-     }
-     $1017 = $2;
-     $1018 = (_nextc($1017)|0);
-     $3 = $1018;
-     label = 303;
-    }
-    if ((label|0) == 309) {
-     $981 = $2;
-     $982 = $17;
-     _pushback($981,$982);
-    }
-    else if ((label|0) == 312) {
-     $993 = $2;
-     $994 = $3;
-     _pushback($993,$994);
-     $995 = $15;
-     $3 = $995;
-    }
-    $1019 = $2;
-    $1020 = $3;
-    _pushback($1019,$1020);
-    $1021 = $15;
-    $1022 = ($1021|0)!=(0);
-    if ($1022) {
-     label = 320;
-    }
-   }
-  } while(0);
-  if ((label|0) == 320) {
-   $1023 = $2;
-   $1024 = $15;
-   _yyerror_i($1023,63265,$1024);
-  }
-  $1025 = $2;
-  _tokfix($1025);
-  $1026 = $12;
-  $1027 = ($1026|0)!=(0);
-  if (!($1027)) {
-   $1055 = $2;
-   $1056 = $2;
-   $1057 = (_tok($1056)|0);
-   $1058 = (_new_int($1055,$1057,10)|0);
-   $1059 = $2;
-   $1060 = ((($1059)) + 1132|0);
-   $1061 = HEAP32[$1060>>2]|0;
-   HEAP32[$1061>>2] = $1058;
-   $1 = 313;
-   $2029 = $1;
-   STACKTOP = sp;return ($2029|0);
-  }
-  $1028 = (___errno_location()|0);
-  HEAP32[$1028>>2] = 0;
-  $1029 = $2;
-  $1030 = (_tok($1029)|0);
-  $1031 = (+_strtod($1030,$19));
-  $18 = $1031;
-  $1032 = $18;
-  $1033 = $1032 == 0.0;
-  if ($1033) {
-   $1034 = HEAP32[$19>>2]|0;
-   $1035 = $2;
-   $1036 = (_tok($1035)|0);
-   $1037 = ($1034|0)==($1036|0);
-   if ($1037) {
-    $1038 = $2;
-    $1039 = $2;
-    $1040 = (_tok($1039)|0);
-    _yywarning_s($1038,63289,$1040);
-   } else {
-    label = 325;
-   }
-  } else {
-   label = 325;
-  }
-  if ((label|0) == 325) {
-   $1041 = (___errno_location()|0);
-   $1042 = HEAP32[$1041>>2]|0;
-   $1043 = ($1042|0)==(34);
-   if ($1043) {
-    $1044 = $2;
-    $1045 = $2;
-    $1046 = (_tok($1045)|0);
-    _yywarning_s($1044,63314,$1046);
-    $1047 = (___errno_location()|0);
-    HEAP32[$1047>>2] = 0;
-   }
-  }
-  $1048 = $2;
-  $1049 = $2;
-  $1050 = (_tok($1049)|0);
-  $1051 = (_new_float($1048,$1050)|0);
-  $1052 = $2;
-  $1053 = ((($1052)) + 1132|0);
-  $1054 = HEAP32[$1053>>2]|0;
-  HEAP32[$1054>>2] = $1051;
-  $1 = 314;
-  $2029 = $1;
-  STACKTOP = sp;return ($2029|0);
- }
- else if ((label|0) == 330) {
-  $1066 = $2;
-  $1067 = ((($1066)) + 48|0);
-  $1068 = HEAP32[$1067>>2]|0;
-  $1069 = $1068 >>> 1;
-  $1070 = $2;
-  $1071 = ((($1070)) + 48|0);
-  $1072 = HEAP32[$1071>>2]|0;
-  $1073 = $1072 & 1;
-  $1074 = $1069 | $1073;
-  $1075 = $2;
-  $1076 = ((($1075)) + 48|0);
-  HEAP32[$1076>>2] = $1074;
-  $1077 = $2;
-  $1078 = ((($1077)) + 52|0);
-  $1079 = HEAP32[$1078>>2]|0;
-  $1080 = $1079 >>> 1;
-  $1081 = $2;
-  $1082 = ((($1081)) + 52|0);
-  $1083 = HEAP32[$1082>>2]|0;
-  $1084 = $1083 & 1;
-  $1085 = $1080 | $1084;
-  $1086 = $2;
-  $1087 = ((($1086)) + 52|0);
-  HEAP32[$1087>>2] = $1085;
-  $1088 = $3;
-  $1089 = ($1088|0)==(41);
-  $1090 = $2;
-  $1091 = ((($1090)) + 40|0);
-  $$sink103 = $1089 ? 3 : 2;
-  HEAP32[$1091>>2] = $$sink103;
-  $1092 = $3;
-  $1 = $1092;
-  $2029 = $1;
-  STACKTOP = sp;return ($2029|0);
- }
- else if ((label|0) == 511) {
-  while(1) {
-   label = 0;
-   $1746 = $2;
-   $1747 = $3;
-   _tokadd($1746,$1747);
-   $1748 = $2;
-   $1749 = (_nextc($1748)|0);
-   $3 = $1749;
-   $1750 = $3;
-   $1751 = ($1750|0)<(0);
-   if ($1751) {
-    break;
-   }
-   $1752 = $3;
-   $1753 = $1752 | 32;
-   $1754 = (($1753) - 97)|0;
-   $1755 = ($1754>>>0)<(26);
-   if ($1755) {
-    label = 511;
-    continue;
-   }
-   $1756 = $3;
-   $1757 = (($1756) - 48)|0;
-   $1758 = ($1757>>>0)<(10);
-   $1759 = $3;
-   $1760 = ($1759|0)==(95);
-   $or$cond173 = $1758 | $1760;
-   if ($or$cond173) {
-    label = 511;
-    continue;
-   }
-   $1761 = $3;
-   $1762 = ($1761>>>0)<=(127);
-   $1763 = $1762 ^ 1;
-   if ($1763) {
-    label = 511;
-   } else {
-    break;
-   }
-  }
-  $1764 = $7;
-  $1765 = ($1764|0)==(0);
-  if ($1765) {
-   $1766 = $2;
-   $1767 = (_toklen($1766)|0);
-   $1768 = ($1767|0)==(7);
-   if ($1768) {
-    $1769 = $3;
-    $1770 = ($1769|0)<(0);
-    $1771 = $3;
-    $1772 = ($1771|0)==(10);
-    $or$cond178 = $1770 | $1772;
-    if ($or$cond178) {
-     $1773 = $2;
-     $1774 = (_tok($1773)|0);
-     $1775 = $2;
-     $1776 = (_toklen($1775)|0);
-     $1777 = (_strncmp($1774,63675,$1776)|0);
-     $1778 = ($1777|0)==(0);
-     if ($1778) {
-      $1 = -1;
-      $2029 = $1;
-      STACKTOP = sp;return ($2029|0);
-     }
-    }
-   }
-  }
-  $1779 = $2;
-  $1780 = (_tok($1779)|0);
-  $1781 = HEAP8[$1780>>0]|0;
-  $1782 = $1781 << 24 >> 24;
-  L817: do {
-   switch ($1782|0) {
-   case 36: case 64:  {
-    $1783 = $2;
-    $1784 = $3;
-    _pushback($1783,$1784);
-    break;
-   }
-   default: {
-    $1785 = $3;
-    $1786 = ($1785|0)==(33);
-    $1787 = $3;
-    $1788 = ($1787|0)==(63);
-    $or$cond181 = $1786 | $1788;
-    if ($or$cond181) {
-     $1789 = $2;
-     $1790 = (_peek_n($1789,61,0)|0);
-     $1791 = ($1790<<24>>24)!=(0);
-     if (!($1791)) {
-      $1792 = $2;
-      $1793 = $3;
-      _tokadd($1792,$1793);
-      break L817;
-     }
-    }
-    $1794 = $2;
-    $1795 = $3;
-    _pushback($1794,$1795);
-   }
-   }
-  } while(0);
-  $1796 = $2;
-  _tokfix($1796);
-  $23 = 0;
-  $1797 = $2;
-  $1798 = (_tok($1797)|0);
-  $1799 = HEAP8[$1798>>0]|0;
-  $1800 = $1799 << 24 >> 24;
-  L825: do {
-   switch ($1800|0) {
-   case 36:  {
-    $1801 = $2;
-    $1802 = ((($1801)) + 40|0);
-    HEAP32[$1802>>2] = 1;
-    $23 = 308;
-    break;
-   }
-   case 64:  {
-    $1803 = $2;
-    $1804 = ((($1803)) + 40|0);
-    HEAP32[$1804>>2] = 1;
-    $1805 = $2;
-    $1806 = (_tok($1805)|0);
-    $1807 = ((($1806)) + 1|0);
-    $1808 = HEAP8[$1807>>0]|0;
-    $1809 = $1808 << 24 >> 24;
-    $1810 = ($1809|0)==(64);
-    if ($1810) {
-     $23 = 311;
-     break L825;
-    } else {
-     $23 = 309;
-     break L825;
-    }
-    break;
-   }
-   default: {
-    $1811 = $2;
-    $1812 = (_toklast($1811)|0);
-    $1813 = ($1812|0)==(33);
-    do {
-     if ($1813) {
-      label = 533;
-     } else {
-      $1814 = $2;
-      $1815 = (_toklast($1814)|0);
-      $1816 = ($1815|0)==(63);
-      if ($1816) {
-       label = 533;
-      } else {
-       $1817 = $2;
-       $1818 = ((($1817)) + 40|0);
-       $1819 = HEAP32[$1818>>2]|0;
-       $1820 = ($1819|0)==(7);
-       L830: do {
-        if ($1820) {
-         $1821 = $2;
-         $1822 = (_nextc($1821)|0);
-         $3 = $1822;
-         $1823 = ($1822|0)==(61);
-         do {
-          if ($1823) {
-           $1824 = $2;
-           $1825 = (_peek_n($1824,126,0)|0);
-           $1826 = ($1825<<24>>24)!=(0);
-           if (!($1826)) {
-            $1827 = $2;
-            $1828 = (_peek_n($1827,62,0)|0);
-            $1829 = ($1828<<24>>24)!=(0);
-            if (!($1829)) {
-             $1830 = $2;
-             $1831 = (_peek_n($1830,61,0)|0);
-             $1832 = ($1831<<24>>24)!=(0);
-             if ($1832) {
-              $1833 = $2;
-              $1834 = (_peek_n($1833,62,1)|0);
-              $1835 = $1834&255;
-              $1836 = ($1835|0)!=(0);
-              if (!($1836)) {
-               break;
-              }
-             }
-             $23 = 306;
-             $1837 = $2;
-             $1838 = $3;
-             _tokadd($1837,$1838);
-             $1839 = $2;
-             _tokfix($1839);
-             break L830;
-            }
-           }
-          }
-         } while(0);
-         $1840 = $2;
-         $1841 = $3;
-         _pushback($1840,$1841);
-        }
-       } while(0);
-       $1842 = $23;
-       $1843 = ($1842|0)==(0);
-       if ($1843) {
-        $1844 = $2;
-        $1845 = (_tok($1844)|0);
-        $1846 = HEAP8[$1845>>0]|0;
-        $1847 = $1846 << 24 >> 24;
-        $1848 = (($1847) - 65)|0;
-        $1849 = ($1848>>>0)<(26);
-        if ($1849) {
-         $23 = 310;
-         break;
-        }
-       }
-       $23 = 306;
-      }
-     }
-    } while(0);
-    if ((label|0) == 533) {
-     $23 = 307;
-    }
-    $1850 = $2;
-    $1851 = ((($1850)) + 40|0);
-    $1852 = HEAP32[$1851>>2]|0;
-    $1853 = ($1852|0)!=(0);
-    $1854 = $5;
-    $1855 = ($1854|0)!=(0);
-    $or$cond184 = $1853 | $1855;
-    if ($or$cond184) {
-     $1856 = $2;
-     $1857 = ((($1856)) + 40|0);
-     $1858 = HEAP32[$1857>>2]|0;
-     $1859 = ($1858|0)==(4);
-     if ($1859) {
-      label = 549;
-     } else {
-      $1860 = $2;
-      $1861 = ((($1860)) + 40|0);
-      $1862 = HEAP32[$1861>>2]|0;
-      $1863 = ($1862|0)==(5);
-      if ($1863) {
-       label = 549;
-      }
-     }
-    } else {
-     label = 549;
-    }
-    if ((label|0) == 549) {
-     $1864 = $2;
-     $1865 = (_peek_n($1864,58,0)|0);
-     $1866 = $1865&255;
-     $1867 = ($1866|0)!=(0);
-     if ($1867) {
-      $1868 = $2;
-      $1869 = (_peek_n($1868,58,1)|0);
-      $1870 = ($1869<<24>>24)!=(0);
-      if (!($1870)) {
-       $1871 = $2;
-       $1872 = ((($1871)) + 40|0);
-       HEAP32[$1872>>2] = 0;
-       $1873 = $2;
-       (_nextc($1873)|0);
-       $1874 = $2;
-       _tokfix($1874);
-       $1875 = $2;
-       $1876 = $2;
-       $1877 = (_tok($1876)|0);
-       $1878 = (_intern_cstr_gen($1875,$1877)|0);
-       $1879 = $2;
-       $1880 = ((($1879)) + 1132|0);
-       $1881 = HEAP32[$1880>>2]|0;
-       HEAP32[$1881>>2] = $1878;
-       $1 = 312;
-       $2029 = $1;
-       STACKTOP = sp;return ($2029|0);
-      }
-     }
-    }
-    $1882 = $2;
-    $1883 = ((($1882)) + 40|0);
-    $1884 = HEAP32[$1883>>2]|0;
-    $1885 = ($1884|0)!=(8);
-    if ($1885) {
-     $1886 = $2;
-     $1887 = (_tok($1886)|0);
-     $1888 = $2;
-     $1889 = (_toklen($1888)|0);
-     $1890 = (_reserved_word($1887,$1889)|0);
-     $24 = $1890;
-     $1891 = $24;
-     $1892 = ($1891|0)!=(0|0);
-     if ($1892) {
-      $1893 = $2;
-      $1894 = ((($1893)) + 40|0);
-      $1895 = HEAP32[$1894>>2]|0;
-      $25 = $1895;
-      $1896 = $2;
-      $1897 = ((($1896)) + 32|0);
-      $1898 = HEAP32[$1897>>2]|0;
-      $1899 = $2;
-      $1900 = ((($1899)) + 1132|0);
-      $1901 = HEAP32[$1900>>2]|0;
-      HEAP32[$1901>>2] = $1898;
-      $1902 = $24;
-      $1903 = ((($1902)) + 12|0);
-      $1904 = HEAP32[$1903>>2]|0;
-      $1905 = $2;
-      $1906 = ((($1905)) + 40|0);
-      HEAP32[$1906>>2] = $1904;
-      $1907 = $25;
-      $1908 = ($1907|0)==(7);
-      $1909 = $2;
-      if ($1908) {
-       $1910 = $24;
-       $1911 = HEAP32[$1910>>2]|0;
-       $1912 = (_intern_cstr_gen($1909,$1911)|0);
-       $1913 = $2;
-       $1914 = ((($1913)) + 1132|0);
-       $1915 = HEAP32[$1914>>2]|0;
-       HEAP32[$1915>>2] = $1912;
-       $1916 = $24;
-       $1917 = ((($1916)) + 4|0);
-       $1918 = HEAP32[$1917>>2]|0;
-       $1 = $1918;
-       $2029 = $1;
-       STACKTOP = sp;return ($2029|0);
-      }
-      $1919 = ((($1909)) + 40|0);
-      $1920 = HEAP32[$1919>>2]|0;
-      $1921 = ($1920|0)==(0);
-      if ($1921) {
-       $1922 = $2;
-       $1923 = ((($1922)) + 72|0);
-       $1924 = HEAP8[$1923>>0]|0;
-       $1925 = $1924 & -2;
-       $1926 = $1925 | 1;
-       HEAP8[$1923>>0] = $1926;
-      }
-      $1927 = $24;
-      $1928 = ((($1927)) + 4|0);
-      $1929 = HEAP32[$1928>>2]|0;
-      $1930 = ($1929|0)==(281);
-      if (!($1930)) {
-       $1964 = $25;
-       $1965 = ($1964|0)==(0);
-       $1966 = $25;
-       $1967 = ($1966|0)==(10);
-       $or$cond193 = $1965 | $1967;
-       $1968 = $24;
-       $1969 = ((($1968)) + 4|0);
-       $1970 = HEAP32[$1969>>2]|0;
-       if ($or$cond193) {
-        $1 = $1970;
-        $2029 = $1;
-        STACKTOP = sp;return ($2029|0);
-       }
-       $1971 = $24;
-       $1972 = ((($1971)) + 4|0);
-       $1973 = ((($1972)) + 4|0);
-       $1974 = HEAP32[$1973>>2]|0;
-       $1975 = ($1970|0)!=($1974|0);
-       if ($1975) {
-        $1976 = $2;
-        $1977 = ((($1976)) + 40|0);
-        HEAP32[$1977>>2] = 0;
-       }
-       $1978 = $24;
-       $1979 = ((($1978)) + 4|0);
-       $1980 = ((($1979)) + 4|0);
-       $1981 = HEAP32[$1980>>2]|0;
-       $1 = $1981;
-       $2029 = $1;
-       STACKTOP = sp;return ($2029|0);
-      }
-      $1931 = $2;
-      $1932 = ((($1931)) + 60|0);
-      $1933 = HEAP32[$1932>>2]|0;
-      $1934 = ($1933|0)!=(0);
-      if ($1934) {
-       $1935 = $2;
-       $1936 = ((($1935)) + 60|0);
-       $1937 = HEAP32[$1936>>2]|0;
-       $1938 = $2;
-       $1939 = ((($1938)) + 56|0);
-       $1940 = HEAP32[$1939>>2]|0;
-       $1941 = ($1937|0)==($1940|0);
-       if ($1941) {
-        $1942 = $2;
-        $1943 = ((($1942)) + 60|0);
-        HEAP32[$1943>>2] = 0;
-        $1944 = $2;
-        $1945 = ((($1944)) + 56|0);
-        $1946 = HEAP32[$1945>>2]|0;
-        $1947 = (($1946) + -1)|0;
-        HEAP32[$1945>>2] = $1947;
-        $1 = 284;
-        $2029 = $1;
-        STACKTOP = sp;return ($2029|0);
-       }
-      }
-      $1948 = $2;
-      $1949 = ((($1948)) + 48|0);
-      $1950 = HEAP32[$1949>>2]|0;
-      $1951 = $1950 & 1;
-      $1952 = ($1951|0)!=(0);
-      if ($1952) {
-       $1 = 282;
-       $2029 = $1;
-       STACKTOP = sp;return ($2029|0);
-      }
-      $1953 = $2;
-      $1954 = ((($1953)) + 52|0);
-      $1955 = HEAP32[$1954>>2]|0;
-      $1956 = $1955 & 1;
-      $1957 = ($1956|0)!=(0);
-      $1958 = $25;
-      $1959 = ($1958|0)!=(5);
-      $or$cond187 = $1957 & $1959;
-      if ($or$cond187) {
-       $1 = 283;
-       $2029 = $1;
-       STACKTOP = sp;return ($2029|0);
-      }
-      $1960 = $25;
-      $1961 = ($1960|0)==(2);
-      $1962 = $25;
-      $1963 = ($1962|0)==(0);
-      $or$cond190 = $1961 | $1963;
-      if ($or$cond190) {
-       $1 = 283;
-       $2029 = $1;
-       STACKTOP = sp;return ($2029|0);
-      } else {
-       $1 = 281;
-       $2029 = $1;
-       STACKTOP = sp;return ($2029|0);
-      }
-     }
-    }
-    $1982 = $2;
-    $1983 = ((($1982)) + 40|0);
-    $1984 = HEAP32[$1983>>2]|0;
-    $1985 = ($1984|0)==(0);
-    if (!($1985)) {
-     $1986 = $2;
-     $1987 = ((($1986)) + 40|0);
-     $1988 = HEAP32[$1987>>2]|0;
-     $1989 = ($1988|0)==(6);
-     if (!($1989)) {
-      $1990 = $2;
-      $1991 = ((($1990)) + 40|0);
-      $1992 = HEAP32[$1991>>2]|0;
-      $1993 = ($1992|0)==(10);
-      if (!($1993)) {
-       $1994 = $2;
-       $1995 = ((($1994)) + 40|0);
-       $1996 = HEAP32[$1995>>2]|0;
-       $1997 = ($1996|0)==(9);
-       if (!($1997)) {
-        $1998 = $2;
-        $1999 = ((($1998)) + 40|0);
-        $2000 = HEAP32[$1999>>2]|0;
-        $2001 = ($2000|0)==(8);
-        if (!($2001)) {
-         $2002 = $2;
-         $2003 = ((($2002)) + 40|0);
-         $2004 = HEAP32[$2003>>2]|0;
-         $2005 = ($2004|0)==(4);
-         if (!($2005)) {
-          $2006 = $2;
-          $2007 = ((($2006)) + 40|0);
-          $2008 = HEAP32[$2007>>2]|0;
-          $2009 = ($2008|0)==(5);
-          if (!($2009)) {
-           $2014 = $2;
-           $2015 = ((($2014)) + 40|0);
-           $2016 = HEAP32[$2015>>2]|0;
-           $2017 = ($2016|0)==(7);
-           $2018 = $2;
-           $2019 = ((($2018)) + 40|0);
-           $$sink195 = $2017 ? 3 : 1;
-           HEAP32[$2019>>2] = $$sink195;
-           break L825;
-          }
-         }
-        }
-       }
-      }
-     }
-    }
-    $2010 = $5;
-    $2011 = ($2010|0)!=(0);
-    $2012 = $2;
-    $2013 = ((($2012)) + 40|0);
-    $$sink194 = $2011 ? 5 : 4;
-    HEAP32[$2013>>2] = $$sink194;
-   }
-   }
-  } while(0);
-  $2020 = $2;
-  $2021 = $2;
-  $2022 = (_tok($2021)|0);
-  $2023 = (_intern_cstr_gen($2020,$2022)|0);
-  $26 = $2023;
-  $2024 = $26;
-  $2025 = $2;
-  $2026 = ((($2025)) + 1132|0);
-  $2027 = HEAP32[$2026>>2]|0;
-  HEAP32[$2027>>2] = $2024;
-  $2028 = $23;
-  $1 = $2028;
-  $2029 = $1;
-  STACKTOP = sp;return ($2029|0);
- }
- return (0)|0;
-}
-function _parse_string($0) {
- $0 = $0|0;
- var $$old = 0, $$old4 = 0, $1 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0;
- var $115 = 0, $116 = 0, $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0;
- var $133 = 0, $134 = 0, $135 = 0, $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0;
- var $151 = 0, $152 = 0, $153 = 0, $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0;
- var $17 = 0, $170 = 0, $171 = 0, $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0;
- var $188 = 0, $189 = 0, $19 = 0, $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0, $197 = 0, $198 = 0, $199 = 0, $2 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0, $204 = 0;
- var $205 = 0, $206 = 0, $207 = 0, $208 = 0, $209 = 0, $21 = 0, $210 = 0, $211 = 0, $212 = 0, $213 = 0, $214 = 0, $215 = 0, $216 = 0, $217 = 0, $218 = 0, $219 = 0, $22 = 0, $220 = 0, $221 = 0, $222 = 0;
- var $223 = 0, $224 = 0, $225 = 0, $226 = 0, $227 = 0, $228 = 0, $229 = 0, $23 = 0, $230 = 0, $231 = 0, $232 = 0, $233 = 0, $234 = 0, $235 = 0, $236 = 0, $237 = 0, $238 = 0, $239 = 0, $24 = 0, $240 = 0;
- var $241 = 0, $242 = 0, $243 = 0, $244 = 0, $245 = 0, $246 = 0, $247 = 0, $248 = 0, $249 = 0, $25 = 0, $250 = 0, $251 = 0, $252 = 0, $253 = 0, $254 = 0, $255 = 0, $256 = 0, $257 = 0, $258 = 0, $259 = 0;
- var $26 = 0, $260 = 0, $261 = 0, $262 = 0, $263 = 0, $264 = 0, $265 = 0, $266 = 0, $267 = 0, $268 = 0, $269 = 0, $27 = 0, $270 = 0, $271 = 0, $272 = 0, $273 = 0, $274 = 0, $275 = 0, $276 = 0, $277 = 0;
- var $278 = 0, $279 = 0, $28 = 0, $280 = 0, $281 = 0, $282 = 0, $283 = 0, $284 = 0, $285 = 0, $286 = 0, $287 = 0, $288 = 0, $289 = 0, $29 = 0, $290 = 0, $291 = 0, $292 = 0, $293 = 0, $294 = 0, $295 = 0;
- var $296 = 0, $297 = 0, $298 = 0, $299 = 0, $3 = 0, $30 = 0, $300 = 0, $301 = 0, $302 = 0, $303 = 0, $304 = 0, $305 = 0, $306 = 0, $307 = 0, $308 = 0, $309 = 0, $31 = 0, $310 = 0, $311 = 0, $312 = 0;
- var $313 = 0, $314 = 0, $315 = 0, $316 = 0, $317 = 0, $318 = 0, $319 = 0, $32 = 0, $320 = 0, $321 = 0, $322 = 0, $323 = 0, $324 = 0, $325 = 0, $326 = 0, $327 = 0, $328 = 0, $329 = 0, $33 = 0, $330 = 0;
- var $331 = 0, $332 = 0, $333 = 0, $334 = 0, $335 = 0, $336 = 0, $337 = 0, $338 = 0, $339 = 0, $34 = 0, $340 = 0, $341 = 0, $342 = 0, $343 = 0, $344 = 0, $345 = 0, $346 = 0, $347 = 0, $348 = 0, $349 = 0;
- var $35 = 0, $350 = 0, $351 = 0, $352 = 0, $353 = 0, $354 = 0, $355 = 0, $356 = 0, $357 = 0, $358 = 0, $359 = 0, $36 = 0, $360 = 0, $361 = 0, $362 = 0, $363 = 0, $364 = 0, $365 = 0, $366 = 0, $367 = 0;
- var $368 = 0, $369 = 0, $37 = 0, $370 = 0, $371 = 0, $372 = 0, $373 = 0, $374 = 0, $375 = 0, $376 = 0, $377 = 0, $378 = 0, $379 = 0, $38 = 0, $380 = 0, $381 = 0, $382 = 0, $383 = 0, $384 = 0, $385 = 0;
- var $386 = 0, $387 = 0, $388 = 0, $389 = 0, $39 = 0, $390 = 0, $391 = 0, $392 = 0, $393 = 0, $394 = 0, $395 = 0, $396 = 0, $397 = 0, $398 = 0, $399 = 0, $4 = 0, $40 = 0, $400 = 0, $401 = 0, $402 = 0;
- var $403 = 0, $404 = 0, $405 = 0, $406 = 0, $407 = 0, $408 = 0, $409 = 0, $41 = 0, $410 = 0, $411 = 0, $412 = 0, $413 = 0, $414 = 0, $415 = 0, $416 = 0, $417 = 0, $418 = 0, $419 = 0, $42 = 0, $420 = 0;
- var $421 = 0, $422 = 0, $423 = 0, $424 = 0, $425 = 0, $426 = 0, $427 = 0, $428 = 0, $429 = 0, $43 = 0, $430 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0;
- var $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0;
- var $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0;
- var $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $or$cond = 0, $or$cond5 = 0, $vararg_buffer = 0, $vararg_buffer6 = 0, $vararg_ptr9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 480|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(480|0);
- $vararg_buffer6 = sp + 8|0;
- $vararg_buffer = sp;
- $12 = sp + 216|0;
- $16 = sp + 209|0;
- $18 = sp + 208|0;
- $21 = sp + 80|0;
- $2 = $0;
- $22 = $2;
- $23 = ((($22)) + 44|0);
- $24 = HEAP32[$23>>2]|0;
- $25 = HEAP32[$24>>2]|0;
- $26 = $25;
- $4 = $26;
- $27 = $2;
- $28 = ((($27)) + 44|0);
- $29 = HEAP32[$28>>2]|0;
- $30 = ((($29)) + 4|0);
- $31 = HEAP32[$30>>2]|0;
- $32 = HEAP32[$31>>2]|0;
- $33 = $32;
- $5 = $33;
- $34 = $2;
- $35 = ((($34)) + 44|0);
- $36 = HEAP32[$35>>2]|0;
- $37 = ((($36)) + 4|0);
- $38 = HEAP32[$37>>2]|0;
- $39 = ((($38)) + 4|0);
- $40 = HEAP32[$39>>2]|0;
- $41 = HEAP32[$40>>2]|0;
- $42 = $41;
- $6 = $42;
- $43 = $2;
- $44 = ((($43)) + 44|0);
- $45 = HEAP32[$44>>2]|0;
- $46 = ((($45)) + 4|0);
- $47 = HEAP32[$46>>2]|0;
- $48 = ((($47)) + 4|0);
- $49 = HEAP32[$48>>2]|0;
- $50 = ((($49)) + 4|0);
- $51 = HEAP32[$50>>2]|0;
- $52 = $51;
- $7 = $52;
- $53 = $4;
- $54 = $53 & 64;
- $55 = ($54|0)!=(0);
- if ($55) {
-  $56 = $2;
-  $57 = (_parsing_heredoc_inf($56)|0);
-  $58 = $57;
- } else {
-  $58 = 0;
- }
- $8 = $58;
- $59 = $2;
- (_newtok($59)|0);
- L4: while(1) {
-  $60 = $2;
-  $61 = (_nextc($60)|0);
-  $3 = $61;
-  $62 = $7;
-  $63 = ($61|0)!=($62|0);
-  $64 = $5;
-  $65 = ($64|0)!=(0);
-  $66 = $63 ? 1 : $65;
-  if (!($66)) {
-   label = 66;
-   break;
-  }
-  $67 = $8;
-  $68 = ($67|0)!=(0|0);
-  if ($68) {
-   $69 = $3;
-   $70 = ($69|0)==(10);
-   $71 = $3;
-   $72 = ($71|0)<(0);
-   $or$cond = $70 | $72;
-   if ($or$cond) {
-    label = 7;
-    break;
-   }
-  }
-  $143 = $3;
-  $144 = ($143|0)<(0);
-  if ($144) {
-   label = 20;
-   break;
-  }
-  $146 = $3;
-  $147 = $6;
-  $148 = ($146|0)==($147|0);
-  do {
-   if ($148) {
-    $149 = $5;
-    $150 = (($149) + 1)|0;
-    $5 = $150;
-    $151 = $5;
-    $152 = $151;
-    $153 = $2;
-    $154 = ((($153)) + 44|0);
-    $155 = HEAP32[$154>>2]|0;
-    $156 = ((($155)) + 4|0);
-    $157 = HEAP32[$156>>2]|0;
-    HEAP32[$157>>2] = $152;
-   } else {
-    $158 = $3;
-    $159 = $7;
-    $160 = ($158|0)==($159|0);
-    if ($160) {
-     $161 = $5;
-     $162 = (($161) + -1)|0;
-     $5 = $162;
-     $163 = $5;
-     $164 = $163;
-     $165 = $2;
-     $166 = ((($165)) + 44|0);
-     $167 = HEAP32[$166>>2]|0;
-     $168 = ((($167)) + 4|0);
-     $169 = HEAP32[$168>>2]|0;
-     HEAP32[$169>>2] = $164;
-     break;
-    }
-    $170 = $3;
-    $171 = ($170|0)==(92);
-    if (!($171)) {
-     $238 = $3;
-     $239 = ($238|0)==(35);
-     if (!($239)) {
-      break;
-     }
-     $240 = $4;
-     $241 = $240 & 2;
-     $242 = ($241|0)!=(0);
-     if (!($242)) {
-      break;
-     }
-     $243 = $2;
-     $244 = (_nextc($243)|0);
-     $3 = $244;
-     $245 = $3;
-     $246 = ($245|0)==(123);
-     $247 = $2;
-     if ($246) {
-      label = 50;
-      break L4;
-     }
-     _tokadd($247,35);
-     $269 = $2;
-     $270 = $3;
-     _pushback($269,$270);
-     continue L4;
-    }
-    $172 = $2;
-    $173 = (_nextc($172)|0);
-    $3 = $173;
-    $174 = $4;
-    $175 = $174 & 2;
-    $176 = ($175|0)!=(0);
-    $177 = $3;
-    if ($176) {
-     $178 = $7;
-     $179 = ($177|0)==($178|0);
-     if (!($179)) {
-      $180 = $3;
-      $181 = $6;
-      $182 = ($180|0)==($181|0);
-      if (!($182)) {
-       $185 = $3;
-       $186 = ($185|0)==(10);
-       if ($186) {
-        $187 = $2;
-        $188 = ((($187)) + 32|0);
-        $189 = HEAP32[$188>>2]|0;
-        $190 = (($189) + 1)|0;
-        HEAP32[$188>>2] = $190;
-        $191 = $2;
-        $192 = ((($191)) + 36|0);
-        HEAP32[$192>>2] = 0;
-        $193 = $4;
-        $194 = $193 & 32;
-        $195 = ($194|0)!=(0);
-        if (!($195)) {
-         continue L4;
-        }
-        $196 = $2;
-        _tokadd($196,10);
-        continue L4;
-       }
-       $197 = $4;
-       $198 = $197 & 4;
-       $199 = ($198|0)!=(0);
-       $200 = $2;
-       if ($199) {
-        _tokadd($200,92);
-        $201 = $2;
-        $202 = $3;
-        _tokadd($201,$202);
-        continue L4;
-       }
-       $203 = $3;
-       _pushback($200,$203);
-       $204 = $2;
-       $205 = $2;
-       $206 = (_read_escape($205)|0);
-       _tokadd($204,$206);
-       $207 = $8;
-       $208 = ($207|0)!=(0|0);
-       if (!($208)) {
-        continue L4;
-       }
-       $209 = $8;
-       $210 = HEAP8[$209>>0]|0;
-       $211 = $210 & -3;
-       HEAP8[$209>>0] = $211;
-       continue L4;
-      }
-     }
-     $183 = $2;
-     $184 = $3;
-     _tokadd($183,$184);
-     continue L4;
-    } else {
-     $212 = $6;
-     $213 = ($177|0)!=($212|0);
-     do {
-      if ($213) {
-       $214 = $3;
-       $215 = $7;
-       $216 = ($214|0)!=($215|0);
-       if ($216) {
-        $217 = $3;
-        $218 = ($217|0)==(10);
-        if ($218) {
-         $219 = $2;
-         $220 = ((($219)) + 32|0);
-         $221 = HEAP32[$220>>2]|0;
-         $222 = (($221) + 1)|0;
-         HEAP32[$220>>2] = $222;
-         $223 = $2;
-         $224 = ((($223)) + 36|0);
-         HEAP32[$224>>2] = 0;
-        }
-        $225 = $3;
-        $226 = ($225|0)==(92);
-        if (!($226)) {
-         $227 = $4;
-         $228 = $227 & 32;
-         $229 = ($228|0)!=(0);
-         if ($229) {
-          $230 = $3;
-          $231 = ($230|0)==(32);
-          if ($231) {
-           break;
-          }
-          $232 = $3;
-          $233 = (($232) - 9)|0;
-          $234 = ($233>>>0)<(5);
-          if ($234) {
-           break;
-          }
-         }
-         $235 = $2;
-         _tokadd($235,92);
-        }
-       }
-      }
-     } while(0);
-     $236 = $2;
-     $237 = $3;
-     _tokadd($236,$237);
-     continue L4;
-    }
-   }
-  } while(0);
-  $271 = $4;
-  $272 = $271 & 32;
-  $273 = ($272|0)!=(0);
-  if ($273) {
-   $274 = $3;
-   $275 = ($274|0)==(32);
-   if ($275) {
-    label = 57;
-    break;
-   }
-   $276 = $3;
-   $277 = (($276) - 9)|0;
-   $278 = ($277>>>0)<(5);
-   if ($278) {
-    label = 57;
-    break;
-   }
-  }
-  $316 = $2;
-  $317 = $3;
-  _tokadd($316,$317);
- }
- if ((label|0) == 7) {
-  $73 = $2;
-  _tokadd($73,10);
-  $74 = $2;
-  _tokfix($74);
-  $75 = $2;
-  $76 = ((($75)) + 32|0);
-  $77 = HEAP32[$76>>2]|0;
-  $78 = (($77) + 1)|0;
-  HEAP32[$76>>2] = $78;
-  $79 = $2;
-  $80 = ((($79)) + 36|0);
-  HEAP32[$80>>2] = 0;
-  $81 = $8;
-  $82 = HEAP8[$81>>0]|0;
-  $83 = ($82&255) >>> 1;
-  $84 = $83 & 1;
-  $9 = $84;
-  $85 = $8;
-  $86 = HEAP8[$85>>0]|0;
-  $87 = $86 & -3;
-  $88 = $87 | 2;
-  HEAP8[$85>>0] = $88;
-  $89 = $9;
-  $90 = ($89<<24>>24)!=(0);
-  if ($90) {
-   $91 = $2;
-   $92 = (_tok($91)|0);
-   $10 = $92;
-   $93 = $2;
-   $94 = (_toklen($93)|0);
-   $11 = $94;
-   $95 = $8;
-   $96 = HEAP8[$95>>0]|0;
-   $97 = $96 & 1;
-   $98 = ($97<<24>>24)!=(0);
-   L131: do {
-    if ($98) {
-     while(1) {
-      $99 = $10;
-      $100 = HEAP8[$99>>0]|0;
-      $101 = $100 << 24 >> 24;
-      $102 = ($101|0)==(32);
-      if ($102) {
-       $$old = $11;
-       $$old4 = ($$old|0)>(0);
-       if (!($$old4)) {
-        break L131;
-       }
-      } else {
-       $103 = $10;
-       $104 = HEAP8[$103>>0]|0;
-       $105 = $104 << 24 >> 24;
-       $106 = (($105) - 9)|0;
-       $107 = ($106>>>0)<(5);
-       $108 = $11;
-       $109 = ($108|0)>(0);
-       $or$cond5 = $107 & $109;
-       if (!($or$cond5)) {
-        break L131;
-       }
-      }
-      $110 = $10;
-      $111 = ((($110)) + 1|0);
-      $10 = $111;
-      $112 = $11;
-      $113 = (($112) + -1)|0;
-      $11 = $113;
-     }
-    }
-   } while(0);
-   $114 = $11;
-   $115 = (($114) - 1)|0;
-   $116 = $8;
-   $117 = ((($116)) + 12|0);
-   $118 = HEAP32[$117>>2]|0;
-   $119 = ($115|0)==($118|0);
-   if ($119) {
-    $120 = $10;
-    $121 = $8;
-    $122 = ((($121)) + 8|0);
-    $123 = HEAP32[$122>>2]|0;
-    $124 = $11;
-    $125 = (($124) - 1)|0;
-    $126 = (_strncmp($120,$123,$125)|0);
-    $127 = ($126|0)==(0);
-    if ($127) {
-     $1 = 365;
-     $430 = $1;
-     STACKTOP = sp;return ($430|0);
-    }
-   }
-  }
-  $128 = $3;
-  $129 = ($128|0)<(0);
-  if ($129) {
-   $130 = $8;
-   $131 = ((($130)) + 8|0);
-   $132 = HEAP32[$131>>2]|0;
-   HEAP32[$vararg_buffer>>2] = $132;
-   (_snprintf($12,256,64354,$vararg_buffer)|0);
-   $133 = $2;
-   _yyerror($133,$12);
-   $1 = 0;
-   $430 = $1;
-   STACKTOP = sp;return ($430|0);
-  } else {
-   $134 = $2;
-   $135 = $2;
-   $136 = (_tok($135)|0);
-   $137 = $2;
-   $138 = (_toklen($137)|0);
-   $139 = (_new_str($134,$136,$138)|0);
-   $140 = $2;
-   $141 = ((($140)) + 1132|0);
-   $142 = HEAP32[$141>>2]|0;
-   HEAP32[$142>>2] = $139;
-   $1 = 369;
-   $430 = $1;
-   STACKTOP = sp;return ($430|0);
-  }
- }
- else if ((label|0) == 20) {
-  $145 = $2;
-  _yyerror($145,64408);
-  $1 = 0;
-  $430 = $1;
-  STACKTOP = sp;return ($430|0);
- }
- else if ((label|0) == 50) {
-  _tokfix($247);
-  $248 = $2;
-  $249 = ((($248)) + 40|0);
-  HEAP32[$249>>2] = 0;
-  $250 = $2;
-  $251 = ((($250)) + 72|0);
-  $252 = HEAP8[$251>>0]|0;
-  $253 = $252 & -2;
-  $254 = $253 | 1;
-  HEAP8[$251>>0] = $254;
-  $255 = $2;
-  $256 = $2;
-  $257 = (_tok($256)|0);
-  $258 = $2;
-  $259 = (_toklen($258)|0);
-  $260 = (_new_str($255,$257,$259)|0);
-  $261 = $2;
-  $262 = ((($261)) + 1132|0);
-  $263 = HEAP32[$262>>2]|0;
-  HEAP32[$263>>2] = $260;
-  $264 = $8;
-  $265 = ($264|0)!=(0|0);
-  if ($265) {
-   $266 = $8;
-   $267 = HEAP8[$266>>0]|0;
-   $268 = $267 & -3;
-   HEAP8[$266>>0] = $268;
-   $1 = 368;
-   $430 = $1;
-   STACKTOP = sp;return ($430|0);
-  } else {
-   $1 = 319;
-   $430 = $1;
-   STACKTOP = sp;return ($430|0);
-  }
- }
- else if ((label|0) == 57) {
-  $279 = $2;
-  $280 = (_toklen($279)|0);
-  $281 = ($280|0)==(0);
-  if (!($281)) {
-   $304 = $2;
-   $305 = $3;
-   _pushback($304,$305);
-   $306 = $2;
-   _tokfix($306);
-   $307 = $2;
-   $308 = $2;
-   $309 = (_tok($308)|0);
-   $310 = $2;
-   $311 = (_toklen($310)|0);
-   $312 = (_new_str($307,$309,$311)|0);
-   $313 = $2;
-   $314 = ((($313)) + 1132|0);
-   $315 = HEAP32[$314>>2]|0;
-   HEAP32[$315>>2] = $312;
-   $1 = 320;
-   $430 = $1;
-   STACKTOP = sp;return ($430|0);
-  }
-  while(1) {
-   $282 = $3;
-   $283 = ($282|0)==(10);
-   if ($283) {
-    $284 = $2;
-    $285 = ((($284)) + 32|0);
-    $286 = HEAP32[$285>>2]|0;
-    $287 = (($286) + 1)|0;
-    HEAP32[$285>>2] = $287;
-    $288 = $2;
-    $289 = ((($288)) + 36|0);
-    HEAP32[$289>>2] = 0;
-    $290 = $2;
-    _heredoc_treat_nextline($290);
-    $291 = $2;
-    $292 = ((($291)) + 1120|0);
-    $293 = HEAP32[$292>>2]|0;
-    $294 = ($293|0)!=(0|0);
-    if ($294) {
-     label = 60;
-     break;
-    }
-   }
-   $295 = $2;
-   $296 = (_nextc($295)|0);
-   $3 = $296;
-   $297 = $3;
-   $298 = ($297|0)==(32);
-   if ($298) {
-    continue;
-   }
-   $299 = $3;
-   $300 = (($299) - 9)|0;
-   $301 = ($300>>>0)<(5);
-   if (!($301)) {
-    label = 63;
-    break;
-   }
-  }
-  if ((label|0) == 60) {
-   $1 = 367;
-   $430 = $1;
-   STACKTOP = sp;return ($430|0);
-  }
-  else if ((label|0) == 63) {
-   $302 = $2;
-   $303 = $3;
-   _pushback($302,$303);
-   $1 = 366;
-   $430 = $1;
-   STACKTOP = sp;return ($430|0);
-  }
- }
- else if ((label|0) == 66) {
-  $318 = $2;
-  _tokfix($318);
-  $319 = $2;
-  $320 = ((($319)) + 40|0);
-  HEAP32[$320>>2] = 1;
-  $321 = $2;
-  _end_strterm($321);
-  $322 = $4;
-  $323 = $322 & 128;
-  $324 = ($323|0)!=(0);
-  if ($324) {
-   $325 = $2;
-   $326 = $2;
-   $327 = (_tok($326)|0);
-   $328 = $2;
-   $329 = (_toklen($328)|0);
-   $330 = (_new_xstr($325,$327,$329)|0);
-   $331 = $2;
-   $332 = ((($331)) + 1132|0);
-   $333 = HEAP32[$332>>2]|0;
-   HEAP32[$333>>2] = $330;
-   $1 = 316;
-   $430 = $1;
-   STACKTOP = sp;return ($430|0);
-  }
-  $334 = $4;
-  $335 = $334 & 4;
-  $336 = ($335|0)!=(0);
-  if (!($336)) {
-   $421 = $2;
-   $422 = $2;
-   $423 = (_tok($422)|0);
-   $424 = $2;
-   $425 = (_toklen($424)|0);
-   $426 = (_new_str($421,$423,$425)|0);
-   $427 = $2;
-   $428 = ((($427)) + 1132|0);
-   $429 = HEAP32[$428>>2]|0;
-   HEAP32[$429>>2] = $426;
-   $1 = 318;
-   $430 = $1;
-   STACKTOP = sp;return ($430|0);
-  }
-  $13 = 0;
-  $337 = $2;
-  $338 = $2;
-  $339 = (_tok($338)|0);
-  $340 = $2;
-  $341 = (_toklen($340)|0);
-  $342 = (_parser_strndup($337,$339,$341)|0);
-  $15 = $342;
-  $17 = $16;
-  HEAP8[$18>>0] = 0;
-  $343 = $2;
-  (_newtok($343)|0);
-  L65: while(1) {
-   $344 = $2;
-   $345 = (_nextc($344)|0);
-   $14 = $345;
-   $346 = $14;
-   $347 = ($346|0)>=(0);
-   if (!($347)) {
-    break;
-   }
-   $348 = $14;
-   $349 = $348 | 32;
-   $350 = (($349) - 97)|0;
-   $351 = ($350>>>0)<(26);
-   if (!($351)) {
-    break;
-   }
-   $352 = $14;
-   switch ($352|0) {
-   case 105:  {
-    $353 = $13;
-    $354 = $353 | 1;
-    $13 = $354;
-    continue L65;
-    break;
-   }
-   case 120:  {
-    $355 = $13;
-    $356 = $355 | 2;
-    $13 = $356;
-    continue L65;
-    break;
-   }
-   case 109:  {
-    $357 = $13;
-    $358 = $357 | 4;
-    $13 = $358;
-    continue L65;
-    break;
-   }
-   case 117:  {
-    $359 = $13;
-    $360 = $359 | 16;
-    $13 = $360;
-    continue L65;
-    break;
-   }
-   case 110:  {
-    $361 = $13;
-    $362 = $361 | 32;
-    $13 = $362;
-    continue L65;
-    break;
-   }
-   default: {
-    $363 = $2;
-    $364 = $14;
-    _tokadd($363,$364);
-    continue L65;
-   }
-   }
-  }
-  $365 = $2;
-  $366 = $14;
-  _pushback($365,$366);
-  $367 = $2;
-  $368 = (_toklen($367)|0);
-  $369 = ($368|0)!=(0);
-  if ($369) {
-   $370 = $2;
-   _tokfix($370);
-   $371 = $2;
-   $372 = (_toklen($371)|0);
-   $373 = ($372|0)>(1);
-   $374 = $373 ? 64446 : 75764;
-   $375 = $2;
-   $376 = (_tok($375)|0);
-   HEAP32[$vararg_buffer6>>2] = $374;
-   $vararg_ptr9 = ((($vararg_buffer6)) + 4|0);
-   HEAP32[$vararg_ptr9>>2] = $376;
-   (_snprintf($21,128,64448,$vararg_buffer6)|0);
-   $377 = $2;
-   _yyerror($377,$21);
-  }
-  $378 = $13;
-  $379 = ($378|0)!=(0);
-  if ($379) {
-   $380 = $13;
-   $381 = $380 & 1;
-   $382 = ($381|0)!=(0);
-   if ($382) {
-    $383 = $17;
-    $384 = ((($383)) + 1|0);
-    $17 = $384;
-    HEAP8[$383>>0] = 105;
-   }
-   $385 = $13;
-   $386 = $385 & 2;
-   $387 = ($386|0)!=(0);
-   if ($387) {
-    $388 = $17;
-    $389 = ((($388)) + 1|0);
-    $17 = $389;
-    HEAP8[$388>>0] = 120;
-   }
-   $390 = $13;
-   $391 = $390 & 4;
-   $392 = ($391|0)!=(0);
-   if ($392) {
-    $393 = $17;
-    $394 = ((($393)) + 1|0);
-    $17 = $394;
-    HEAP8[$393>>0] = 109;
-   }
-   $395 = $13;
-   $396 = $395 & 16;
-   $397 = ($396|0)!=(0);
-   if ($397) {
-    HEAP8[$18>>0] = 117;
-   }
-   $398 = $13;
-   $399 = $398 & 32;
-   $400 = ($399|0)!=(0);
-   if ($400) {
-    HEAP8[$18>>0] = 110;
-   }
-  }
-  $401 = $17;
-  $402 = ($401>>>0)>($16>>>0);
-  if ($402) {
-   $403 = $2;
-   $404 = $17;
-   $405 = $404;
-   $406 = $16;
-   $407 = (($405) - ($406))|0;
-   $408 = (_parser_strndup($403,$16,$407)|0);
-   $20 = $408;
-  } else {
-   $20 = 0;
-  }
-  $409 = HEAP8[$18>>0]|0;
-  $410 = ($409<<24>>24)!=(0);
-  if ($410) {
-   $411 = $2;
-   $412 = (_parser_strndup($411,$18,1)|0);
-   $19 = $412;
-  } else {
-   $19 = 0;
-  }
-  $413 = $2;
-  $414 = $15;
-  $415 = $20;
-  $416 = $19;
-  $417 = (_new_regx($413,$414,$415,$416)|0);
-  $418 = $2;
-  $419 = ((($418)) + 1132|0);
-  $420 = HEAP32[$419>>2]|0;
-  HEAP32[$420>>2] = $417;
-  $1 = 317;
-  $430 = $1;
-  STACKTOP = sp;return ($430|0);
- }
- return (0)|0;
-}
-function _nextc($0) {
- $0 = $0|0;
- var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;
- var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0;
- var $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0;
- var $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0;
- var $82 = 0, $83 = 0, $84 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $5 = $2;
- $6 = ((($5)) + 80|0);
- $7 = HEAP32[$6>>2]|0;
- $8 = ($7|0)!=(0|0);
- $9 = $2;
- do {
-  if ($8) {
-   $10 = ((($9)) + 80|0);
-   $11 = HEAP32[$10>>2]|0;
-   $12 = HEAP32[$11>>2]|0;
-   $13 = $12;
-   $3 = $13;
-   $14 = $2;
-   $15 = ((($14)) + 80|0);
-   $16 = HEAP32[$15>>2]|0;
-   $4 = $16;
-   $17 = $2;
-   $18 = ((($17)) + 80|0);
-   $19 = HEAP32[$18>>2]|0;
-   $20 = ((($19)) + 4|0);
-   $21 = HEAP32[$20>>2]|0;
-   $22 = $2;
-   $23 = ((($22)) + 80|0);
-   HEAP32[$23>>2] = $21;
-   $24 = $2;
-   $25 = $4;
-   _cons_free_gen($24,$25);
-  } else {
-   $26 = ((($9)) + 20|0);
-   $27 = HEAP32[$26>>2]|0;
-   $28 = ($27|0)!=(0|0);
-   $29 = $2;
-   if ($28) {
-    $30 = ((($29)) + 20|0);
-    $31 = HEAP32[$30>>2]|0;
-    $32 = (_feof($31)|0);
-    $33 = ($32|0)!=(0);
-    if (!($33)) {
-     $34 = $2;
-     $35 = ((($34)) + 20|0);
-     $36 = HEAP32[$35>>2]|0;
-     $37 = (_fgetc($36)|0);
-     $3 = $37;
-     $38 = $3;
-     $39 = ($38|0)==(-1);
-     if (!($39)) {
-      break;
-     }
-    }
-   } else {
-    $40 = ((($29)) + 12|0);
-    $41 = HEAP32[$40>>2]|0;
-    $42 = ($41|0)!=(0|0);
-    if ($42) {
-     $43 = $2;
-     $44 = ((($43)) + 12|0);
-     $45 = HEAP32[$44>>2]|0;
-     $46 = $2;
-     $47 = ((($46)) + 16|0);
-     $48 = HEAP32[$47>>2]|0;
-     $49 = ($45>>>0)>=($48>>>0);
-     if (!($49)) {
-      $50 = $2;
-      $51 = ((($50)) + 12|0);
-      $52 = HEAP32[$51>>2]|0;
-      $53 = ((($52)) + 1|0);
-      HEAP32[$51>>2] = $53;
-      $54 = HEAP8[$52>>0]|0;
-      $55 = $54&255;
-      $3 = $55;
-      break;
-     }
-    }
-   }
-   $72 = $2;
-   $73 = ((($72)) + 24|0);
-   $74 = HEAP32[$73>>2]|0;
-   $75 = ($74|0)!=(0|0);
-   if (!($75)) {
-    $1 = -1;
-    $84 = $1;
-    STACKTOP = sp;return ($84|0);
-   }
-   $76 = $2;
-   $77 = ((($76)) + 24|0);
-   $78 = HEAP32[$77>>2]|0;
-   $79 = ((($78)) + 16|0);
-   $80 = HEAP32[$79>>2]|0;
-   $81 = $2;
-   $82 = (FUNCTION_TABLE_ii[$80 & 255]($81)|0);
-   $83 = ($82|0)<(0);
-   if ($83) {
-    $1 = -1;
-    $84 = $1;
-    STACKTOP = sp;return ($84|0);
-   } else {
-    $1 = -2;
-    $84 = $1;
-    STACKTOP = sp;return ($84|0);
-   }
-  }
- } while(0);
- $56 = $3;
- $57 = ($56|0)>=(0);
- if ($57) {
-  $58 = $2;
-  $59 = ((($58)) + 36|0);
-  $60 = HEAP32[$59>>2]|0;
-  $61 = (($60) + 1)|0;
-  HEAP32[$59>>2] = $61;
- }
- $62 = $3;
- $63 = ($62|0)==(13);
- if (!($63)) {
-  $71 = $3;
-  $1 = $71;
-  $84 = $1;
-  STACKTOP = sp;return ($84|0);
- }
- $64 = $2;
- $65 = (_nextc($64)|0);
- $3 = $65;
- $66 = $3;
- $67 = ($66|0)!=(10);
- if ($67) {
-  $68 = $2;
-  $69 = $3;
-  _pushback($68,$69);
-  $1 = 13;
-  $84 = $1;
-  STACKTOP = sp;return ($84|0);
- } else {
-  $70 = $3;
-  $1 = $70;
-  $84 = $1;
-  STACKTOP = sp;return ($84|0);
- }
- return (0)|0;
-}
-function _skip($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- while(1) {
-  $5 = $2;
-  $6 = (_nextc($5)|0);
-  $4 = $6;
-  $7 = $4;
-  $8 = ($7|0)<(0);
-  if ($8) {
-   label = 4;
-   break;
-  }
-  $9 = $4;
-  $10 = $3;
-  $11 = $10 << 24 >> 24;
-  $12 = ($9|0)==($11|0);
-  if ($12) {
-   label = 4;
-   break;
-  }
- }
- if ((label|0) == 4) {
-  STACKTOP = sp;return;
- }
-}
-function _pushback($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $4 = $3;
- $5 = ($4|0)>=(0);
- if ($5) {
-  $6 = $2;
-  $7 = ((($6)) + 36|0);
-  $8 = HEAP32[$7>>2]|0;
-  $9 = (($8) + -1)|0;
-  HEAP32[$7>>2] = $9;
- }
- $10 = $2;
- $11 = $3;
- $12 = $11;
- $13 = $2;
- $14 = ((($13)) + 80|0);
- $15 = HEAP32[$14>>2]|0;
- $16 = (_cons_gen($10,$12,$15)|0);
- $17 = $2;
- $18 = ((($17)) + 80|0);
- HEAP32[$18>>2] = $16;
- STACKTOP = sp;return;
-}
-function _yywarning($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $4 = $2;
- $5 = $3;
- _yywarn($4,$5);
- STACKTOP = sp;return;
-}
-function _peeks($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;
- var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $5 = 0;
- var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $3 = $0;
- $4 = $1;
- $7 = $4;
- $8 = (_strlen($7)|0);
- $5 = $8;
- $9 = $3;
- $10 = ((($9)) + 20|0);
- $11 = HEAP32[$10>>2]|0;
- $12 = ($11|0)!=(0|0);
- if ($12) {
-  $6 = 0;
-  while(1) {
-   $13 = $4;
-   $14 = HEAP8[$13>>0]|0;
-   $15 = ($14<<24>>24)!=(0);
-   if (!($15)) {
-    label = 6;
-    break;
-   }
-   $16 = $3;
-   $17 = $4;
-   $18 = ((($17)) + 1|0);
-   $4 = $18;
-   $19 = HEAP8[$17>>0]|0;
-   $20 = $19 << 24 >> 24;
-   $21 = $6;
-   $22 = (($21) + 1)|0;
-   $6 = $22;
-   $23 = (_peek_n($16,$20,$21)|0);
-   $24 = ($23<<24>>24)!=(0);
-   if (!($24)) {
-    label = 5;
-    break;
-   }
-  }
-  if ((label|0) == 5) {
-   $2 = 0;
-   $45 = $2;
-   STACKTOP = sp;return ($45|0);
-  }
-  else if ((label|0) == 6) {
-   $2 = 1;
-   $45 = $2;
-   STACKTOP = sp;return ($45|0);
-  }
- } else {
-  $25 = $3;
-  $26 = ((($25)) + 12|0);
-  $27 = HEAP32[$26>>2]|0;
-  $28 = ($27|0)!=(0|0);
-  if ($28) {
-   $29 = $3;
-   $30 = ((($29)) + 12|0);
-   $31 = HEAP32[$30>>2]|0;
-   $32 = $5;
-   $33 = (($31) + ($32)|0);
-   $34 = $3;
-   $35 = ((($34)) + 16|0);
-   $36 = HEAP32[$35>>2]|0;
-   $37 = ($33>>>0)<=($36>>>0);
-   if ($37) {
-    $38 = $3;
-    $39 = ((($38)) + 12|0);
-    $40 = HEAP32[$39>>2]|0;
-    $41 = $4;
-    $42 = $5;
-    $43 = (_memcmp($40,$41,$42)|0);
-    $44 = ($43|0)==(0);
-    if ($44) {
-     $2 = 1;
-     $45 = $2;
-     STACKTOP = sp;return ($45|0);
-    }
-   }
-  }
-  $2 = 0;
-  $45 = $2;
-  STACKTOP = sp;return ($45|0);
- }
- return (0)|0;
-}
-function _peekc_n($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $$sink = 0, $$sink2 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0;
- var $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $3 = $0;
- $4 = $1;
- $5 = 0;
- while(1) {
-  $7 = $3;
-  $8 = (_nextc($7)|0);
-  $6 = $8;
-  $9 = $6;
-  $10 = ($9|0)==(-1);
-  if ($10) {
-   label = 3;
-   break;
-  }
-  $12 = $3;
-  $13 = $5;
-  $14 = $3;
-  $15 = $6;
-  $16 = $15;
-  $17 = (_list1_gen($14,$16)|0);
-  $18 = (_append_gen($12,$13,$17)|0);
-  $5 = $18;
-  $19 = $4;
-  $20 = (($19) + -1)|0;
-  $4 = $20;
-  $21 = ($19|0)!=(0);
-  if (!($21)) {
-   break;
-  }
- }
- if ((label|0) == 3) {
-  $11 = $6;
-  $2 = $11;
-  $37 = $2;
-  STACKTOP = sp;return ($37|0);
- }
- $22 = $3;
- $23 = ((($22)) + 80|0);
- $24 = HEAP32[$23>>2]|0;
- $25 = ($24|0)!=(0|0);
- if ($25) {
-  $26 = $3;
-  $27 = $5;
-  $28 = $3;
-  $29 = ((($28)) + 80|0);
-  $30 = HEAP32[$29>>2]|0;
-  $31 = (_append_gen($26,$27,$30)|0);
-  $32 = $3;
-  $$sink = $31;$$sink2 = $32;
- } else {
-  $33 = $5;
-  $34 = $3;
-  $$sink = $33;$$sink2 = $34;
- }
- $35 = ((($$sink2)) + 80|0);
- HEAP32[$35>>2] = $$sink;
- $36 = $6;
- $2 = $36;
- $37 = $2;
- STACKTOP = sp;return ($37|0);
-}
-function _skips($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;
- var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0;
- var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $3 = $0;
- $4 = $1;
- L1: while(1) {
-  while(1) {
-   $7 = $3;
-   $8 = (_nextc($7)|0);
-   $5 = $8;
-   $9 = $5;
-   $10 = ($9|0)<(0);
-   $11 = $5;
-   if ($10) {
-    label = 4;
-    break L1;
-   }
-   $13 = ($11|0)==(10);
-   if ($13) {
-    $14 = $3;
-    $15 = ((($14)) + 32|0);
-    $16 = HEAP32[$15>>2]|0;
-    $17 = (($16) + 1)|0;
-    HEAP32[$15>>2] = $17;
-    $18 = $3;
-    $19 = ((($18)) + 36|0);
-    HEAP32[$19>>2] = 0;
-   }
-   $20 = $5;
-   $21 = $4;
-   $22 = HEAP8[$21>>0]|0;
-   $23 = $22 << 24 >> 24;
-   $24 = ($20|0)==($23|0);
-   if ($24) {
-    break;
-   }
-  }
-  $25 = $4;
-  $26 = ((($25)) + 1|0);
-  $4 = $26;
-  $27 = $3;
-  $28 = $4;
-  $29 = (_peeks($27,$28)|0);
-  $30 = ($29<<24>>24)!=(0);
-  $31 = $4;
-  if ($30) {
-   break;
-  }
-  $45 = ((($31)) + -1|0);
-  $4 = $45;
- }
- if ((label|0) == 4) {
-  $12 = $11&255;
-  $2 = $12;
-  $46 = $2;
-  STACKTOP = sp;return ($46|0);
- }
- $32 = (_strlen($31)|0);
- $6 = $32;
- while(1) {
-  $33 = $6;
-  $34 = (($33) + -1)|0;
-  $6 = $34;
-  $35 = ($33|0)!=(0);
-  if (!($35)) {
-   break;
-  }
-  $36 = $3;
-  $37 = (_nextc($36)|0);
-  $38 = ($37|0)==(10);
-  if (!($38)) {
-   continue;
-  }
-  $39 = $3;
-  $40 = ((($39)) + 32|0);
-  $41 = HEAP32[$40>>2]|0;
-  $42 = (($41) + 1)|0;
-  HEAP32[$40>>2] = $42;
-  $43 = $3;
-  $44 = ((($43)) + 36|0);
-  HEAP32[$44>>2] = 0;
- }
- $2 = 1;
- $46 = $2;
- STACKTOP = sp;return ($46|0);
-}
-function _heredoc_identifier($0) {
- $0 = $0|0;
- var $1 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0;
- var $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0;
- var $135 = 0, $136 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0;
- var $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0;
- var $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0;
- var $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0;
- var $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $or$cond = 0, $or$cond3 = 0, $or$cond5 = 0, $or$cond5$not = 0;
- var $or$cond7 = 0, $or$cond9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $2 = $0;
- $4 = 65;
- $5 = 0;
- $6 = 0;
- $10 = $2;
- $11 = (_nextc($10)|0);
- $3 = $11;
- $12 = $3;
- $13 = ($12|0)==(32);
- if (!($13)) {
-  $14 = $3;
-  $15 = (($14) - 9)|0;
-  $16 = ($15>>>0)<(5);
-  $17 = $3;
-  $18 = ($17|0)==(61);
-  $or$cond = $16 | $18;
-  if (!($or$cond)) {
-   $21 = $3;
-   $22 = ($21|0)==(45);
-   if ($22) {
-    $5 = 1;
-    $23 = $2;
-    $24 = (_nextc($23)|0);
-    $3 = $24;
-   }
-   $25 = $3;
-   $26 = ($25|0)==(39);
-   $27 = $3;
-   $28 = ($27|0)==(34);
-   $or$cond3 = $26 | $28;
-   $29 = $3;
-   if ($or$cond3) {
-    $9 = $29;
-    $30 = $3;
-    $31 = ($30|0)==(39);
-    if ($31) {
-     $6 = 1;
-    }
-    $32 = $2;
-    (_newtok($32)|0);
-    while(1) {
-     $33 = $2;
-     $34 = (_nextc($33)|0);
-     $3 = $34;
-     $35 = ($34|0)>=(0);
-     if (!($35)) {
-      break;
-     }
-     $36 = $3;
-     $37 = $9;
-     $38 = ($36|0)!=($37|0);
-     if (!($38)) {
-      break;
-     }
-     $39 = $3;
-     $40 = ($39|0)==(10);
-     if ($40) {
-      label = 13;
-      break;
-     }
-     $41 = $2;
-     $42 = $3;
-     _tokadd($41,$42);
-    }
-    if ((label|0) == 13) {
-     $3 = -1;
-    }
-    $43 = $3;
-    $44 = ($43|0)<(0);
-    if ($44) {
-     $45 = $2;
-     _yyerror($45,64316);
-     $1 = 0;
-     $136 = $1;
-     STACKTOP = sp;return ($136|0);
-    }
-   } else {
-    $46 = ($29|0)<(0);
-    if ($46) {
-     $1 = 0;
-     $136 = $1;
-     STACKTOP = sp;return ($136|0);
-    }
-    $47 = $3;
-    $48 = $47 | 32;
-    $49 = (($48) - 97)|0;
-    $50 = ($49>>>0)<(26);
-    if (!($50)) {
-     $51 = $3;
-     $52 = (($51) - 48)|0;
-     $53 = ($52>>>0)<(10);
-     $54 = $3;
-     $55 = ($54|0)==(95);
-     $or$cond5 = $53 | $55;
-     $or$cond5$not = $or$cond5 ^ 1;
-     $56 = $3;
-     $57 = ($56>>>0)<=(127);
-     $or$cond7 = $or$cond5$not & $57;
-     if ($or$cond7) {
-      $58 = $2;
-      $59 = $3;
-      _pushback($58,$59);
-      $60 = $5;
-      $61 = ($60<<24>>24)!=(0);
-      if ($61) {
-       $62 = $2;
-       _pushback($62,45);
-      }
-      $1 = 0;
-      $136 = $1;
-      STACKTOP = sp;return ($136|0);
-     }
-    }
-    $63 = $2;
-    (_newtok($63)|0);
-    while(1) {
-     $64 = $2;
-     $65 = $3;
-     _tokadd($64,$65);
-     $66 = $2;
-     $67 = (_nextc($66)|0);
-     $3 = $67;
-     $68 = ($67|0)>=(0);
-     if (!($68)) {
-      break;
-     }
-     $69 = $3;
-     $70 = $69 | 32;
-     $71 = (($70) - 97)|0;
-     $72 = ($71>>>0)<(26);
-     if ($72) {
-      continue;
-     }
-     $73 = $3;
-     $74 = (($73) - 48)|0;
-     $75 = ($74>>>0)<(10);
-     $76 = $3;
-     $77 = ($76|0)==(95);
-     $or$cond9 = $75 | $77;
-     if ($or$cond9) {
-      continue;
-     }
-     $78 = $3;
-     $79 = ($78>>>0)<=(127);
-     $80 = $79 ^ 1;
-     if (!($80)) {
-      break;
-     }
-    }
-    $81 = $2;
-    $82 = $3;
-    _pushback($81,$82);
-   }
-   $83 = $2;
-   _tokfix($83);
-   $84 = $2;
-   $85 = (_new_heredoc($84)|0);
-   $7 = $85;
-   $86 = $7;
-   $87 = ((($86)) + 4|0);
-   $88 = HEAP32[$87>>2]|0;
-   $8 = $88;
-   $89 = $2;
-   $90 = $2;
-   $91 = (_tok($90)|0);
-   $92 = $2;
-   $93 = (_toklen($92)|0);
-   $94 = (_parser_strndup($89,$91,$93)|0);
-   $95 = $8;
-   $96 = ((($95)) + 8|0);
-   HEAP32[$96>>2] = $94;
-   $97 = $2;
-   $98 = (_toklen($97)|0);
-   $99 = $8;
-   $100 = ((($99)) + 12|0);
-   HEAP32[$100>>2] = $98;
-   $101 = $6;
-   $102 = ($101<<24>>24)!=(0);
-   if (!($102)) {
-    $103 = $4;
-    $104 = $103 | 2;
-    $4 = $104;
-   }
-   $105 = $4;
-   $106 = $8;
-   $107 = ((($106)) + 4|0);
-   HEAP32[$107>>2] = $105;
-   $108 = $5;
-   $109 = $8;
-   $110 = HEAP8[$109>>0]|0;
-   $111 = $108 & 1;
-   $112 = $110 & -2;
-   $113 = $112 | $111;
-   HEAP8[$109>>0] = $113;
-   $114 = $8;
-   $115 = HEAP8[$114>>0]|0;
-   $116 = $115 & -3;
-   $117 = $116 | 2;
-   HEAP8[$114>>0] = $117;
-   $118 = $8;
-   $119 = ((($118)) + 16|0);
-   HEAP32[$119>>2] = 0;
-   $120 = $2;
-   $121 = $2;
-   $122 = ((($121)) + 1116|0);
-   $123 = HEAP32[$122>>2]|0;
-   $124 = $2;
-   $125 = $7;
-   $126 = (_list1_gen($124,$125)|0);
-   $127 = (_append_gen($120,$123,$126)|0);
-   $128 = $2;
-   $129 = ((($128)) + 1116|0);
-   HEAP32[$129>>2] = $127;
-   $130 = $2;
-   $131 = ((($130)) + 40|0);
-   HEAP32[$131>>2] = 1;
-   $132 = $7;
-   $133 = $2;
-   $134 = ((($133)) + 1132|0);
-   $135 = HEAP32[$134>>2]|0;
-   HEAP32[$135>>2] = $132;
-   $1 = 364;
-   $136 = $1;
-   STACKTOP = sp;return ($136|0);
-  }
- }
- $19 = $2;
- $20 = $3;
- _pushback($19,$20);
- $1 = 0;
- $136 = $1;
- STACKTOP = sp;return ($136|0);
-}
-function _newtok($0) {
- $0 = $0|0;
- var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $1 = $0;
- $2 = $1;
- $3 = ((($2)) + 1108|0);
- HEAP32[$3>>2] = 0;
- $4 = $1;
- $5 = ((($4)) + 36|0);
- $6 = HEAP32[$5>>2]|0;
- $7 = (($6) - 1)|0;
- STACKTOP = sp;return ($7|0);
-}
-function _read_escape($0) {
- $0 = $0|0;
- var $1 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0;
- var $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0;
- var $135 = 0, $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0, $152 = 0;
- var $153 = 0, $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0, $170 = 0;
- var $171 = 0, $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0, $188 = 0, $189 = 0;
- var $19 = 0, $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0, $197 = 0, $198 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;
- var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0;
- var $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0;
- var $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0;
- var $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $or$cond = 0, label = 0;
- var sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 96|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(96|0);
- $4 = sp + 60|0;
- $5 = sp + 56|0;
- $6 = sp + 48|0;
- $7 = sp + 40|0;
- $8 = sp + 4|0;
- $9 = sp;
- $2 = $0;
- $10 = $2;
- $11 = (_nextc($10)|0);
- $3 = $11;
- L1: do {
-  switch ($11|0) {
-  case 92:  {
-   $12 = $3;
-   $1 = $12;
-   break;
-  }
-  case 110:  {
-   $1 = 10;
-   break;
-  }
-  case 116:  {
-   $1 = 9;
-   break;
-  }
-  case 114:  {
-   $1 = 13;
-   break;
-  }
-  case 102:  {
-   $1 = 12;
-   break;
-  }
-  case 118:  {
-   $1 = 11;
-   break;
-  }
-  case 97:  {
-   $1 = 7;
-   break;
-  }
-  case 101:  {
-   $1 = 27;
-   break;
-  }
-  case 55: case 54: case 53: case 52: case 51: case 50: case 49: case 48:  {
-   $13 = $3;
-   HEAP32[$4>>2] = $13;
-   HEAP32[$5>>2] = 1;
-   while(1) {
-    $14 = HEAP32[$5>>2]|0;
-    $15 = ($14|0)<(3);
-    if (!($15)) {
-     break;
-    }
-    $16 = $2;
-    $17 = (_nextc($16)|0);
-    $18 = HEAP32[$5>>2]|0;
-    $19 = (($4) + ($18<<2)|0);
-    HEAP32[$19>>2] = $17;
-    $20 = HEAP32[$5>>2]|0;
-    $21 = (($4) + ($20<<2)|0);
-    $22 = HEAP32[$21>>2]|0;
-    $23 = ($22|0)<(0);
-    if ($23) {
-     label = 70;
-     break L1;
-    }
-    $24 = HEAP32[$5>>2]|0;
-    $25 = (($4) + ($24<<2)|0);
-    $26 = HEAP32[$25>>2]|0;
-    $27 = ($26|0)<(48);
-    if ($27) {
-     label = 15;
-     break;
-    }
-    $28 = HEAP32[$5>>2]|0;
-    $29 = (($4) + ($28<<2)|0);
-    $30 = HEAP32[$29>>2]|0;
-    $31 = (55)<($30|0);
-    if ($31) {
-     label = 15;
-     break;
-    }
-    $36 = HEAP32[$5>>2]|0;
-    $37 = (($36) + 1)|0;
-    HEAP32[$5>>2] = $37;
-   }
-   if ((label|0) == 15) {
-    $32 = $2;
-    $33 = HEAP32[$5>>2]|0;
-    $34 = (($4) + ($33<<2)|0);
-    $35 = HEAP32[$34>>2]|0;
-    _pushback($32,$35);
-   }
-   $38 = HEAP32[$5>>2]|0;
-   $39 = (_scan_oct($4,$38,$5)|0);
-   $3 = $39;
-   $40 = $3;
-   $1 = $40;
-   break;
-  }
-  case 120:  {
-   HEAP32[$7>>2] = 0;
-   while(1) {
-    $41 = HEAP32[$7>>2]|0;
-    $42 = ($41|0)<(2);
-    if (!($42)) {
-     break;
-    }
-    $43 = $2;
-    $44 = (_nextc($43)|0);
-    $45 = HEAP32[$7>>2]|0;
-    $46 = (($6) + ($45<<2)|0);
-    HEAP32[$46>>2] = $44;
-    $47 = HEAP32[$7>>2]|0;
-    $48 = (($6) + ($47<<2)|0);
-    $49 = HEAP32[$48>>2]|0;
-    $50 = ($49|0)<(0);
-    if ($50) {
-     label = 70;
-     break L1;
-    }
-    $51 = HEAP32[$7>>2]|0;
-    $52 = (($6) + ($51<<2)|0);
-    $53 = HEAP32[$52>>2]|0;
-    $54 = (($53) - 48)|0;
-    $55 = ($54>>>0)<(10);
-    if (!($55)) {
-     $56 = HEAP32[$7>>2]|0;
-     $57 = (($6) + ($56<<2)|0);
-     $58 = HEAP32[$57>>2]|0;
-     $59 = $58 | 32;
-     $60 = (($59) - 97)|0;
-     $61 = ($60>>>0)<(6);
-     if (!($61)) {
-      label = 23;
-      break;
-     }
-    }
-    $66 = HEAP32[$7>>2]|0;
-    $67 = (($66) + 1)|0;
-    HEAP32[$7>>2] = $67;
-   }
-   if ((label|0) == 23) {
-    $62 = $2;
-    $63 = HEAP32[$7>>2]|0;
-    $64 = (($6) + ($63<<2)|0);
-    $65 = HEAP32[$64>>2]|0;
-    _pushback($62,$65);
-   }
-   $68 = HEAP32[$7>>2]|0;
-   $69 = (_scan_hex($6,$68,$7)|0);
-   $3 = $69;
-   $70 = HEAP32[$7>>2]|0;
-   $71 = ($70|0)==(0);
-   if ($71) {
-    $72 = $2;
-    _yyerror($72,64224);
-    $1 = 0;
-    break L1;
-   } else {
-    $73 = $3;
-    $1 = $73;
-    break L1;
-   }
-   break;
-  }
-  case 117:  {
-   HEAP32[$9>>2] = 0;
-   $74 = $2;
-   $75 = (_nextc($74)|0);
-   HEAP32[$8>>2] = $75;
-   $76 = HEAP32[$8>>2]|0;
-   $77 = ($76|0)<(0);
-   if ($77) {
-    label = 70;
-   } else {
-    $78 = HEAP32[$8>>2]|0;
-    $79 = ($78|0)==(123);
-    L37: do {
-     if ($79) {
-      HEAP32[$9>>2] = 0;
-      while(1) {
-       $80 = HEAP32[$9>>2]|0;
-       $81 = ($80|0)<(9);
-       if (!($81)) {
-        break L37;
-       }
-       $82 = $2;
-       $83 = (_nextc($82)|0);
-       $84 = HEAP32[$9>>2]|0;
-       $85 = (($8) + ($84<<2)|0);
-       HEAP32[$85>>2] = $83;
-       $86 = HEAP32[$9>>2]|0;
-       $87 = (($8) + ($86<<2)|0);
-       $88 = HEAP32[$87>>2]|0;
-       $89 = ($88|0)<(0);
-       if ($89) {
-        label = 70;
-        break L1;
-       }
-       $90 = HEAP32[$9>>2]|0;
-       $91 = (($8) + ($90<<2)|0);
-       $92 = HEAP32[$91>>2]|0;
-       $93 = ($92|0)==(125);
-       if ($93) {
-        break L37;
-       }
-       $94 = HEAP32[$9>>2]|0;
-       $95 = (($8) + ($94<<2)|0);
-       $96 = HEAP32[$95>>2]|0;
-       $97 = (($96) - 48)|0;
-       $98 = ($97>>>0)<(10);
-       if (!($98)) {
-        $99 = HEAP32[$9>>2]|0;
-        $100 = (($8) + ($99<<2)|0);
-        $101 = HEAP32[$100>>2]|0;
-        $102 = $101 | 32;
-        $103 = (($102) - 97)|0;
-        $104 = ($103>>>0)<(6);
-        if (!($104)) {
-         break;
-        }
-       }
-       $110 = HEAP32[$9>>2]|0;
-       $111 = (($110) + 1)|0;
-       HEAP32[$9>>2] = $111;
-      }
-      $105 = $2;
-      _yyerror($105,64224);
-      $106 = $2;
-      $107 = HEAP32[$9>>2]|0;
-      $108 = (($8) + ($107<<2)|0);
-      $109 = HEAP32[$108>>2]|0;
-      _pushback($106,$109);
-      $1 = 0;
-      break L1;
-     } else {
-      $112 = HEAP32[$8>>2]|0;
-      $113 = (($112) - 48)|0;
-      $114 = ($113>>>0)<(10);
-      if (!($114)) {
-       $115 = HEAP32[$8>>2]|0;
-       $116 = $115 | 32;
-       $117 = (($116) - 97)|0;
-       $118 = ($117>>>0)<(6);
-       if (!($118)) {
-        $146 = $2;
-        $147 = HEAP32[$8>>2]|0;
-        _pushback($146,$147);
-        break;
-       }
-      }
-      HEAP32[$9>>2] = 1;
-      while(1) {
-       $119 = HEAP32[$9>>2]|0;
-       $120 = ($119|0)<(4);
-       if (!($120)) {
-        break L37;
-       }
-       $121 = $2;
-       $122 = (_nextc($121)|0);
-       $123 = HEAP32[$9>>2]|0;
-       $124 = (($8) + ($123<<2)|0);
-       HEAP32[$124>>2] = $122;
-       $125 = HEAP32[$9>>2]|0;
-       $126 = (($8) + ($125<<2)|0);
-       $127 = HEAP32[$126>>2]|0;
-       $128 = ($127|0)<(0);
-       if ($128) {
-        label = 70;
-        break L1;
-       }
-       $129 = HEAP32[$9>>2]|0;
-       $130 = (($8) + ($129<<2)|0);
-       $131 = HEAP32[$130>>2]|0;
-       $132 = (($131) - 48)|0;
-       $133 = ($132>>>0)<(10);
-       if (!($133)) {
-        $134 = HEAP32[$9>>2]|0;
-        $135 = (($8) + ($134<<2)|0);
-        $136 = HEAP32[$135>>2]|0;
-        $137 = $136 | 32;
-        $138 = (($137) - 97)|0;
-        $139 = ($138>>>0)<(6);
-        if (!($139)) {
-         break;
-        }
-       }
-       $144 = HEAP32[$9>>2]|0;
-       $145 = (($144) + 1)|0;
-       HEAP32[$9>>2] = $145;
-      }
-      $140 = $2;
-      $141 = HEAP32[$9>>2]|0;
-      $142 = (($8) + ($141<<2)|0);
-      $143 = HEAP32[$142>>2]|0;
-      _pushback($140,$143);
-     }
-    } while(0);
-    $148 = HEAP32[$9>>2]|0;
-    $149 = (_scan_hex($8,$148,$9)|0);
-    $3 = $149;
-    $150 = HEAP32[$9>>2]|0;
-    $151 = ($150|0)==(0);
-    if ($151) {
-     $152 = $2;
-     _yyerror($152,64224);
-     $1 = 0;
-     break L1;
-    }
-    $153 = $3;
-    $154 = ($153|0)<(0);
-    $155 = $3;
-    $156 = ($155|0)>(1114111);
-    $or$cond = $154 | $156;
-    if (!($or$cond)) {
-     $157 = $3;
-     $158 = $157 & -2048;
-     $159 = ($158|0)==(55296);
-     if (!($159)) {
-      $161 = $3;
-      $162 = (0 - ($161))|0;
-      $1 = $162;
-      break L1;
-     }
-    }
-    $160 = $2;
-    _yyerror($160,64256);
-    $1 = 0;
-   }
-   break;
-  }
-  case 98:  {
-   $1 = 8;
-   break;
-  }
-  case 115:  {
-   $1 = 32;
-   break;
-  }
-  case 77:  {
-   $163 = $2;
-   $164 = (_nextc($163)|0);
-   $3 = $164;
-   $165 = ($164|0)!=(45);
-   $166 = $2;
-   if ($165) {
-    _yyerror($166,64224);
-    $167 = $2;
-    $168 = $3;
-    _pushback($167,$168);
-    $1 = 0;
-    break L1;
-   }
-   $169 = (_nextc($166)|0);
-   $3 = $169;
-   $170 = ($169|0)==(92);
-   if ($170) {
-    $171 = $2;
-    $172 = (_read_escape($171)|0);
-    $173 = $172 | 128;
-    $1 = $173;
-    break L1;
-   }
-   $174 = $3;
-   $175 = ($174|0)<(0);
-   if ($175) {
-    label = 70;
-   } else {
-    $176 = $3;
-    $177 = $176 & 255;
-    $178 = $177 | 128;
-    $1 = $178;
-   }
-   break;
-  }
-  case 67:  {
-   $179 = $2;
-   $180 = (_nextc($179)|0);
-   $3 = $180;
-   $181 = ($180|0)!=(45);
-   if ($181) {
-    $182 = $2;
-    _yyerror($182,64224);
-    $183 = $2;
-    $184 = $3;
-    _pushback($183,$184);
-    $1 = 0;
-   } else {
-    label = 64;
-   }
-   break;
-  }
-  case 99:  {
-   label = 64;
-   break;
-  }
-  case -2: case -1:  {
-   label = 70;
-   break;
-  }
-  default: {
-   $197 = $3;
-   $1 = $197;
-  }
-  }
- } while(0);
- L81: do {
-  if ((label|0) == 64) {
-   $185 = $2;
-   $186 = (_nextc($185)|0);
-   $3 = $186;
-   $187 = ($186|0)==(92);
-   do {
-    if ($187) {
-     $188 = $2;
-     $189 = (_read_escape($188)|0);
-     $3 = $189;
-    } else {
-     $190 = $3;
-     $191 = ($190|0)==(63);
-     if ($191) {
-      $1 = 127;
-      break L81;
-     } else {
-      $192 = $3;
-      $193 = ($192|0)<(0);
-      if ($193) {
-       label = 70;
-       break L81;
-      } else {
-       break;
-      }
-     }
-    }
-   } while(0);
-   $194 = $3;
-   $195 = $194 & 159;
-   $1 = $195;
-  }
- } while(0);
- if ((label|0) == 70) {
-  $196 = $2;
-  _yyerror($196,64224);
-  $1 = 0;
- }
- $198 = $1;
- STACKTOP = sp;return ($198|0);
-}
-function _tokadd($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;
- var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0;
- var $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0;
- var $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0;
- var $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $4 = sp + 16|0;
- $2 = $0;
- $3 = $1;
- $7 = $3;
- $8 = ($7|0)>=(0);
- $9 = $3;
- do {
-  if ($8) {
-   $10 = $9&255;
-   HEAP8[$4>>0] = $10;
-   $5 = 1;
-  } else {
-   $11 = (0 - ($9))|0;
-   $3 = $11;
-   $12 = $3;
-   $13 = ($12|0)<(128);
-   $14 = $3;
-   if ($13) {
-    $15 = $14&255;
-    HEAP8[$4>>0] = $15;
-    $5 = 1;
-    break;
-   }
-   $16 = ($14|0)<(2048);
-   $17 = $3;
-   if ($16) {
-    $18 = $17 >> 6;
-    $19 = 192 | $18;
-    $20 = $19&255;
-    HEAP8[$4>>0] = $20;
-    $21 = $3;
-    $22 = $21 & 63;
-    $23 = 128 | $22;
-    $24 = $23&255;
-    $25 = ((($4)) + 1|0);
-    HEAP8[$25>>0] = $24;
-    $5 = 2;
-    break;
-   }
-   $26 = ($17|0)<(65536);
-   $27 = $3;
-   if ($26) {
-    $28 = $27 >> 12;
-    $29 = 224 | $28;
-    $30 = $29&255;
-    HEAP8[$4>>0] = $30;
-    $31 = $3;
-    $32 = $31 >> 6;
-    $33 = $32 & 63;
-    $34 = 128 | $33;
-    $35 = $34&255;
-    $36 = ((($4)) + 1|0);
-    HEAP8[$36>>0] = $35;
-    $37 = $3;
-    $38 = $37 & 63;
-    $39 = 128 | $38;
-    $40 = $39&255;
-    $41 = ((($4)) + 2|0);
-    HEAP8[$41>>0] = $40;
-    $5 = 3;
-    break;
-   } else {
-    $42 = $27 >> 18;
-    $43 = 240 | $42;
-    $44 = $43&255;
-    HEAP8[$4>>0] = $44;
-    $45 = $3;
-    $46 = $45 >> 12;
-    $47 = $46 & 63;
-    $48 = 128 | $47;
-    $49 = $48&255;
-    $50 = ((($4)) + 1|0);
-    HEAP8[$50>>0] = $49;
-    $51 = $3;
-    $52 = $51 >> 6;
-    $53 = $52 & 63;
-    $54 = 128 | $53;
-    $55 = $54&255;
-    $56 = ((($4)) + 2|0);
-    HEAP8[$56>>0] = $55;
-    $57 = $3;
-    $58 = $57 & 63;
-    $59 = 128 | $58;
-    $60 = $59&255;
-    $61 = ((($4)) + 3|0);
-    HEAP8[$61>>0] = $60;
-    $5 = 4;
-    break;
-   }
-  }
- } while(0);
- $62 = $2;
- $63 = ((($62)) + 1108|0);
- $64 = HEAP32[$63>>2]|0;
- $65 = $5;
- $66 = (($64) + ($65))|0;
- $67 = ($66>>>0)<=(1024);
- if (!($67)) {
-  STACKTOP = sp;return;
- }
- $6 = 0;
- while(1) {
-  $68 = $6;
-  $69 = $5;
-  $70 = ($68>>>0)<($69>>>0);
-  if (!($70)) {
-   break;
-  }
-  $71 = $6;
-  $72 = (($4) + ($71)|0);
-  $73 = HEAP8[$72>>0]|0;
-  $74 = $2;
-  $75 = ((($74)) + 84|0);
-  $76 = $2;
-  $77 = ((($76)) + 1108|0);
-  $78 = HEAP32[$77>>2]|0;
-  $79 = (($78) + 1)|0;
-  HEAP32[$77>>2] = $79;
-  $80 = (($75) + ($78)|0);
-  HEAP8[$80>>0] = $73;
-  $81 = $6;
-  $82 = (($81) + 1)|0;
-  $6 = $82;
- }
- STACKTOP = sp;return;
-}
-function _tokfix($0) {
- $0 = $0|0;
- var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $1 = $0;
- $4 = $1;
- $5 = ((($4)) + 1108|0);
- $6 = HEAP32[$5>>2]|0;
- $2 = $6;
- $3 = 1023;
- $7 = $2;
- $8 = $3;
- $9 = ($7|0)>($8|0);
- if ($9) {
-  $10 = $3;
-  $2 = $10;
-  $11 = $1;
-  _yyerror($11,64196);
- }
- $12 = $1;
- $13 = ((($12)) + 84|0);
- $14 = $2;
- $15 = (($13) + ($14)|0);
- HEAP8[$15>>0] = 0;
- STACKTOP = sp;return;
-}
-function _tok($0) {
- $0 = $0|0;
- var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $1 = $0;
- $2 = $1;
- $3 = ((($2)) + 84|0);
- STACKTOP = sp;return ($3|0);
-}
-function _toklen($0) {
- $0 = $0|0;
- var $1 = 0, $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $1 = $0;
- $2 = $1;
- $3 = ((($2)) + 1108|0);
- $4 = HEAP32[$3>>2]|0;
- STACKTOP = sp;return ($4|0);
-}
-function _arg_ambiguous($0) {
- $0 = $0|0;
- var $1 = 0, $2 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $1 = $0;
- $2 = $1;
- _yywarning($2,64139);
- STACKTOP = sp;return 1;
-}
-function _yywarning_s($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 272|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(272|0);
- $vararg_buffer = sp;
- $6 = sp + 16|0;
- $3 = $0;
- $4 = $1;
- $5 = $2;
- $7 = $4;
- $8 = $5;
- HEAP32[$vararg_buffer>>2] = $8;
- (_snprintf($6,256,$7,$vararg_buffer)|0);
- $9 = $3;
- _yywarning($9,$6);
- STACKTOP = sp;return;
-}
-function _new_float($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $4 = $2;
- $5 = $2;
- $6 = $3;
- $7 = (_parser_strdup($5,$6)|0);
- $8 = (_cons_gen($4,(51),$7)|0);
- STACKTOP = sp;return ($8|0);
-}
-function _new_back_ref($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $4 = $2;
- $5 = $3;
- $6 = $5;
- $7 = (_cons_gen($4,(46),$6)|0);
- STACKTOP = sp;return ($7|0);
-}
-function _new_nth_ref($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $4 = $2;
- $5 = $3;
- $6 = $5;
- $7 = (_cons_gen($4,(45),$6)|0);
- STACKTOP = sp;return ($7|0);
-}
-function _peek_n($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $0;
- $4 = $1;
- $5 = $2;
- $6 = $3;
- $7 = $5;
- $8 = (_peekc_n($6,$7)|0);
- $9 = $4;
- $10 = ($8|0)==($9|0);
- $11 = $4;
- $12 = ($11|0)>=(0);
- $13 = $10 ? $12 : 0;
- $14 = $13&1;
- $15 = $14&255;
- STACKTOP = sp;return ($15|0);
-}
-function _toklast($0) {
- $0 = $0|0;
- var $1 = 0, $10 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $1 = $0;
- $2 = $1;
- $3 = ((($2)) + 84|0);
- $4 = $1;
- $5 = ((($4)) + 1108|0);
- $6 = HEAP32[$5>>2]|0;
- $7 = (($6) - 1)|0;
- $8 = (($3) + ($7)|0);
- $9 = HEAP8[$8>>0]|0;
- $10 = $9 << 24 >> 24;
- STACKTOP = sp;return ($10|0);
-}
-function _reserved_word($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;
- var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $or$cond = 0, $or$cond3 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $3 = $0;
- $4 = $1;
- $7 = $4;
- $8 = ($7>>>0)<=(12);
- $9 = $4;
- $10 = ($9>>>0)>=(2);
- $or$cond = $8 & $10;
- if ($or$cond) {
-  $11 = $3;
-  $12 = $4;
-  $13 = (_hash($11,$12)|0);
-  $5 = $13;
-  $14 = $5;
-  $15 = ($14|0)<=(50);
-  $16 = $5;
-  $17 = ($16|0)>=(0);
-  $or$cond3 = $15 & $17;
-  if ($or$cond3) {
-   $18 = $5;
-   $19 = (1728 + ($18<<4)|0);
-   $20 = HEAP32[$19>>2]|0;
-   $6 = $20;
-   $21 = $3;
-   $22 = HEAP8[$21>>0]|0;
-   $23 = $22 << 24 >> 24;
-   $24 = $6;
-   $25 = HEAP8[$24>>0]|0;
-   $26 = $25 << 24 >> 24;
-   $27 = ($23|0)==($26|0);
-   if ($27) {
-    $28 = $3;
-    $29 = ((($28)) + 1|0);
-    $30 = $6;
-    $31 = ((($30)) + 1|0);
-    $32 = (_strcmp($29,$31)|0);
-    $33 = ($32|0)!=(0);
-    if (!($33)) {
-     $34 = $5;
-     $35 = (1728 + ($34<<4)|0);
-     $2 = $35;
-     $36 = $2;
-     STACKTOP = sp;return ($36|0);
-    }
-   }
-  }
- }
- $2 = 0;
- $36 = $2;
- STACKTOP = sp;return ($36|0);
-}
-function _hash($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $$off = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;
- var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $switch = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $5 = $3;
- $4 = $5;
- $6 = $4;
- $$off = (($6) + -1)|0;
- $switch = ($$off>>>0)<(2);
- if (!($switch)) {
-  $7 = $2;
-  $8 = ((($7)) + 2|0);
-  $9 = HEAP8[$8>>0]|0;
-  $10 = $9&255;
-  $11 = (63883 + ($10)|0);
-  $12 = HEAP8[$11>>0]|0;
-  $13 = $12&255;
-  $14 = $4;
-  $15 = (($14) + ($13))|0;
-  $4 = $15;
- }
- $16 = $2;
- $17 = HEAP8[$16>>0]|0;
- $18 = $17&255;
- $19 = (63883 + ($18)|0);
- $20 = HEAP8[$19>>0]|0;
- $21 = $20&255;
- $22 = $4;
- $23 = (($22) + ($21))|0;
- $4 = $23;
- $24 = $4;
- $25 = $2;
- $26 = $3;
- $27 = (($26) - 1)|0;
- $28 = (($25) + ($27)|0);
- $29 = HEAP8[$28>>0]|0;
- $30 = $29&255;
- $31 = (63883 + ($30)|0);
- $32 = HEAP8[$31>>0]|0;
- $33 = $32&255;
- $34 = (($24) + ($33))|0;
- STACKTOP = sp;return ($34|0);
-}
-function _scan_oct($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;
- var $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $3 = $0;
- $4 = $1;
- $5 = $2;
- $8 = $3;
- $6 = $8;
- $7 = 0;
- while(1) {
-  $9 = $4;
-  $10 = (($9) + -1)|0;
-  $4 = $10;
-  $11 = ($9|0)!=(0);
-  if (!($11)) {
-   break;
-  }
-  $12 = $6;
-  $13 = HEAP32[$12>>2]|0;
-  $14 = ($13|0)>=(48);
-  if (!($14)) {
-   break;
-  }
-  $15 = $6;
-  $16 = HEAP32[$15>>2]|0;
-  $17 = ($16|0)<=(55);
-  if (!($17)) {
-   break;
-  }
-  $18 = $7;
-  $19 = $18 << 3;
-  $7 = $19;
-  $20 = $6;
-  $21 = ((($20)) + 4|0);
-  $6 = $21;
-  $22 = HEAP32[$20>>2]|0;
-  $23 = (($22) - 48)|0;
-  $24 = $7;
-  $25 = $24 | $23;
-  $7 = $25;
- }
- $26 = $6;
- $27 = $3;
- $28 = $26;
- $29 = $27;
- $30 = (($28) - ($29))|0;
- $31 = (($30|0) / 4)&-1;
- $32 = $5;
- HEAP32[$32>>2] = $31;
- $33 = $7;
- STACKTOP = sp;return ($33|0);
-}
-function _scan_hex($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;
- var $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $3 = $0;
- $4 = $1;
- $5 = $2;
- $9 = $3;
- $6 = $9;
- $7 = 0;
- while(1) {
-  $10 = $4;
-  $11 = (($10) + -1)|0;
-  $4 = $11;
-  $12 = ($10|0)!=(0);
-  if (!($12)) {
-   break;
-  }
-  $13 = $6;
-  $14 = HEAP32[$13>>2]|0;
-  $15 = ($14|0)!=(0);
-  if (!($15)) {
-   break;
-  }
-  $16 = $6;
-  $17 = HEAP32[$16>>2]|0;
-  $18 = (_strchr(64283,$17)|0);
-  $8 = $18;
-  $19 = ($18|0)!=(0|0);
-  if (!($19)) {
-   break;
-  }
-  $20 = $7;
-  $21 = $20 << 4;
-  $7 = $21;
-  $22 = $8;
-  $23 = $22;
-  $24 = (($23) - (64283))|0;
-  $25 = $24 & 15;
-  $26 = $7;
-  $27 = $26 | $25;
-  $7 = $27;
-  $28 = $6;
-  $29 = ((($28)) + 4|0);
-  $6 = $29;
- }
- $30 = $6;
- $31 = $3;
- $32 = $30;
- $33 = $31;
- $34 = (($32) - ($33))|0;
- $35 = (($34|0) / 4)&-1;
- $36 = $5;
- HEAP32[$36>>2] = $35;
- $37 = $7;
- STACKTOP = sp;return ($37|0);
-}
-function _new_heredoc($0) {
- $0 = $0|0;
- var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $1 = $0;
- $3 = $1;
- $4 = (_parser_palloc($3,20)|0);
- $2 = $4;
- $5 = $1;
- $6 = $2;
- $7 = (_cons_gen($5,(99),$6)|0);
- STACKTOP = sp;return ($7|0);
-}
-function _new_xstr($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $0;
- $4 = $1;
- $5 = $2;
- $6 = $3;
- $7 = $3;
- $8 = $3;
- $9 = $4;
- $10 = $5;
- $11 = (_parser_strndup($8,$9,$10)|0);
- $12 = $5;
- $13 = $12;
- $14 = (_cons_gen($7,$11,$13)|0);
- $15 = (_cons_gen($6,(57),$14)|0);
- STACKTOP = sp;return ($15|0);
-}
-function _new_regx($0,$1,$2,$3) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $4 = $0;
- $5 = $1;
- $6 = $2;
- $7 = $3;
- $8 = $4;
- $9 = $4;
- $10 = $5;
- $11 = $4;
- $12 = $6;
- $13 = $7;
- $14 = (_cons_gen($11,$12,$13)|0);
- $15 = (_cons_gen($9,$10,$14)|0);
- $16 = (_cons_gen($8,(59),$15)|0);
- STACKTOP = sp;return ($16|0);
-}
-function _mrb_parser_set_filename($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;
- var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0;
- var $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0;
- var $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $2 = $0;
- $3 = $1;
- $7 = $2;
- $8 = HEAP32[$7>>2]|0;
- $9 = $3;
- $10 = (_mrb_intern_cstr($8,$9)|0);
- $4 = $10;
- $11 = $2;
- $12 = HEAP32[$11>>2]|0;
- $13 = $4;
- $14 = (_mrb_sym2name_len($12,$13,0)|0);
- $15 = $2;
- $16 = ((($15)) + 28|0);
- HEAP32[$16>>2] = $14;
- $17 = $2;
- $18 = ((($17)) + 1396|0);
- $19 = HEAP32[$18>>2]|0;
- $20 = ($19>>>0)>(0);
- $21 = $20 ? 0 : 1;
- $22 = $2;
- $23 = ((($22)) + 32|0);
- HEAP32[$23>>2] = $21;
- $5 = 0;
- while(1) {
-  $24 = $5;
-  $25 = $2;
-  $26 = ((($25)) + 1396|0);
-  $27 = HEAP32[$26>>2]|0;
-  $28 = ($24>>>0)<($27>>>0);
-  $29 = $2;
-  if (!($28)) {
-   break;
-  }
-  $30 = ((($29)) + 1392|0);
-  $31 = HEAP32[$30>>2]|0;
-  $32 = $5;
-  $33 = (($31) + ($32<<2)|0);
-  $34 = HEAP32[$33>>2]|0;
-  $35 = $4;
-  $36 = ($34|0)==($35|0);
-  $37 = $5;
-  if ($36) {
-   label = 4;
-   break;
-  }
-  $40 = (($37) + 1)|0;
-  $5 = $40;
- }
- if ((label|0) == 4) {
-  $38 = $2;
-  $39 = ((($38)) + 1400|0);
-  HEAP32[$39>>2] = $37;
-  STACKTOP = sp;return;
- }
- $41 = ((($29)) + 1396|0);
- $42 = HEAP32[$41>>2]|0;
- $43 = (($42) + 1)|0;
- HEAP32[$41>>2] = $43;
- $44 = $2;
- $45 = ((($44)) + 1400|0);
- HEAP32[$45>>2] = $42;
- $46 = $2;
- $47 = $2;
- $48 = ((($47)) + 1396|0);
- $49 = HEAP32[$48>>2]|0;
- $50 = $49<<2;
- $51 = (_parser_palloc($46,$50)|0);
- $6 = $51;
- $52 = $2;
- $53 = ((($52)) + 1392|0);
- $54 = HEAP32[$53>>2]|0;
- $55 = ($54|0)!=(0|0);
- if ($55) {
-  $56 = $6;
-  $57 = $2;
-  $58 = ((($57)) + 1392|0);
-  $59 = HEAP32[$58>>2]|0;
-  $60 = $2;
-  $61 = ((($60)) + 1396|0);
-  $62 = HEAP32[$61>>2]|0;
-  $63 = $62<<2;
-  _memmove(($56|0),($59|0),($63|0))|0;
- }
- $64 = $6;
- $65 = $2;
- $66 = ((($65)) + 1392|0);
- HEAP32[$66>>2] = $64;
- $67 = $4;
- $68 = $2;
- $69 = ((($68)) + 1392|0);
- $70 = HEAP32[$69>>2]|0;
- $71 = $2;
- $72 = ((($71)) + 1396|0);
- $73 = HEAP32[$72>>2]|0;
- $74 = (($73) - 1)|0;
- $75 = (($70) + ($74<<2)|0);
- HEAP32[$75>>2] = $67;
- STACKTOP = sp;return;
-}
-function _mrb_parser_new($0) {
- $0 = $0|0;
- var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;
- var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0;
- var $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $5 = $2;
- $6 = (_mrb_pool_open($5)|0);
- $3 = $6;
- $7 = $3;
- $8 = ($7|0)!=(0|0);
- if (!($8)) {
-  $1 = 0;
-  $57 = $1;
-  STACKTOP = sp;return ($57|0);
- }
- $9 = $3;
- $10 = (_mrb_pool_alloc($9,1408)|0);
- $4 = $10;
- $11 = $4;
- $12 = ($11|0)!=(0|0);
- if ($12) {
-  $13 = $4;
-  _memcpy(($13|0),(73460|0),1408)|0;
-  $14 = $2;
-  $15 = $4;
-  HEAP32[$15>>2] = $14;
-  $16 = $3;
-  $17 = $4;
-  $18 = ((($17)) + 4|0);
-  HEAP32[$18>>2] = $16;
-  $19 = $4;
-  $20 = ((($19)) + 16|0);
-  HEAP32[$20>>2] = 0;
-  $21 = $4;
-  $22 = ((($21)) + 12|0);
-  HEAP32[$22>>2] = 0;
-  $23 = $4;
-  $24 = ((($23)) + 20|0);
-  HEAP32[$24>>2] = 0;
-  $25 = $4;
-  $26 = ((($25)) + 72|0);
-  $27 = HEAP8[$26>>0]|0;
-  $28 = $27 & -2;
-  $29 = $28 | 1;
-  HEAP8[$26>>0] = $29;
-  $30 = $4;
-  $31 = ((($30)) + 68|0);
-  HEAP32[$31>>2] = 0;
-  $32 = $4;
-  $33 = ((($32)) + 64|0);
-  HEAP32[$33>>2] = 0;
-  $34 = $4;
-  $35 = ((($34)) + 1148|0);
-  $36 = HEAP8[$35>>0]|0;
-  $37 = $36 & -3;
-  HEAP8[$35>>0] = $37;
-  $38 = $4;
-  $39 = ((($38)) + 32|0);
-  HEAP32[$39>>2] = 1;
-  $40 = $4;
-  $41 = ((($40)) + 36|0);
-  HEAP32[$41>>2] = 0;
-  $42 = $4;
-  $43 = ((($42)) + 44|0);
-  HEAP32[$43>>2] = 0;
-  $44 = $4;
-  $45 = ((($44)) + 1120|0);
-  HEAP32[$45>>2] = 0;
-  $46 = $4;
-  $47 = ((($46)) + 1112|0);
-  HEAP32[$47>>2] = 0;
-  $48 = $4;
-  $49 = ((($48)) + 1124|0);
-  HEAP32[$49>>2] = 0;
-  $50 = $4;
-  $51 = ((($50)) + 1400|0);
-  HEAP32[$51>>2] = -1;
-  $52 = $4;
-  $53 = ((($52)) + 1392|0);
-  HEAP32[$53>>2] = 0;
-  $54 = $4;
-  $55 = ((($54)) + 1396|0);
-  HEAP32[$55>>2] = 0;
-  $56 = $4;
-  $1 = $56;
-  $57 = $1;
-  STACKTOP = sp;return ($57|0);
- } else {
-  $1 = 0;
-  $57 = $1;
-  STACKTOP = sp;return ($57|0);
- }
- return (0)|0;
-}
-function _mrb_parser_free($0) {
- $0 = $0|0;
- var $1 = 0, $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $1 = $0;
- $2 = $1;
- $3 = ((($2)) + 4|0);
- $4 = HEAP32[$3>>2]|0;
- _mrb_pool_close($4);
- STACKTOP = sp;return;
-}
-function _mrbc_context_new($0) {
- $0 = $0|0;
- var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $1 = $0;
- $2 = $1;
- $3 = (_mrb_calloc($2,1,32)|0);
- STACKTOP = sp;return ($3|0);
-}
-function _mrbc_context_free($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $4 = $2;
- $5 = $3;
- $6 = HEAP32[$5>>2]|0;
- _mrb_free($4,$6);
- $7 = $2;
- $8 = $3;
- _mrb_free($7,$8);
- STACKTOP = sp;return;
-}
-function _mrbc_filename($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0;
- var $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $3 = $0;
- $4 = $1;
- $5 = $2;
- $8 = $5;
- $9 = ($8|0)!=(0|0);
- if ($9) {
-  $10 = $5;
-  $11 = (_strlen($10)|0);
-  $6 = $11;
-  $12 = $3;
-  $13 = $6;
-  $14 = (($13) + 1)|0;
-  $15 = (_mrb_alloca($12,$14)|0);
-  $7 = $15;
-  $16 = $7;
-  $17 = $5;
-  $18 = $6;
-  $19 = (($18) + 1)|0;
-  _memcpy(($16|0),($17|0),($19|0))|0;
-  $20 = $7;
-  $21 = $4;
-  $22 = ((($21)) + 8|0);
-  HEAP32[$22>>2] = $20;
- }
- $23 = $4;
- $24 = ((($23)) + 8|0);
- $25 = HEAP32[$24>>2]|0;
- STACKTOP = sp;return ($25|0);
-}
-function _mrbc_partial_hook($0,$1,$2,$3) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $4 = $0;
- $5 = $1;
- $6 = $2;
- $7 = $3;
- $8 = $6;
- $9 = $5;
- $10 = ((($9)) + 16|0);
- HEAP32[$10>>2] = $8;
- $11 = $7;
- $12 = $5;
- $13 = ((($12)) + 20|0);
- HEAP32[$13>>2] = $11;
- STACKTOP = sp;return;
-}
-function _mrb_parser_get_filename($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0;
- var label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $0;
- $4 = $1;
- $5 = $4;
- $6 = $5&65535;
- $7 = $3;
- $8 = ((($7)) + 1396|0);
- $9 = HEAP32[$8>>2]|0;
- $10 = ($6>>>0)>=($9>>>0);
- if ($10) {
-  $2 = 0;
-  $21 = $2;
-  STACKTOP = sp;return ($21|0);
- } else {
-  $11 = $3;
-  $12 = HEAP32[$11>>2]|0;
-  $13 = $3;
-  $14 = ((($13)) + 1392|0);
-  $15 = HEAP32[$14>>2]|0;
-  $16 = $4;
-  $17 = $16&65535;
-  $18 = (($15) + ($17<<2)|0);
-  $19 = HEAP32[$18>>2]|0;
-  $20 = (_mrb_sym2name_len($12,$19,0)|0);
-  $2 = $20;
-  $21 = $2;
-  STACKTOP = sp;return ($21|0);
- }
- return (0)|0;
-}
-function _mrb_parse_file($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0;
- var label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $4 = $0;
- $5 = $1;
- $6 = $2;
- $8 = $4;
- $9 = (_mrb_parser_new($8)|0);
- $7 = $9;
- $10 = $7;
- $11 = ($10|0)!=(0|0);
- if ($11) {
-  $12 = $7;
-  $13 = ((($12)) + 16|0);
-  HEAP32[$13>>2] = 0;
-  $14 = $7;
-  $15 = ((($14)) + 12|0);
-  HEAP32[$15>>2] = 0;
-  $16 = $5;
-  $17 = $7;
-  $18 = ((($17)) + 20|0);
-  HEAP32[$18>>2] = $16;
-  $19 = $7;
-  $20 = $6;
-  _mrb_parser_parse($19,$20);
-  $21 = $7;
-  $3 = $21;
-  $22 = $3;
-  STACKTOP = sp;return ($22|0);
- } else {
-  $3 = 0;
-  $22 = $3;
-  STACKTOP = sp;return ($22|0);
- }
- return (0)|0;
-}
-function _mrb_load_file_cxt($0,$1,$2,$3) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- var $10 = 0, $11 = 0, $12 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $4 = $1;
- $5 = $2;
- $6 = $3;
- $7 = $4;
- $8 = $4;
- $9 = $5;
- $10 = $6;
- $11 = (_mrb_parse_file($8,$9,$10)|0);
- $12 = $6;
- _load_exec($0,$7,$11,$12);
- STACKTOP = sp;return;
-}
-function _load_exec($0,$1,$2,$3) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- var $$byval_copy = 0, $$byval_copy2 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0;
- var $116 = 0, $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0;
- var $134 = 0, $135 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $30 = 0, $31 = 0;
- var $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0;
- var $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0;
- var $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0;
- var $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $vararg_buffer = 0, $vararg_ptr1 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 368|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(368|0);
- $$byval_copy2 = sp + 104|0;
- $$byval_copy = sp + 96|0;
- $vararg_buffer = sp;
- $9 = sp + 64|0;
- $11 = sp + 112|0;
- $13 = sp + 48|0;
- $14 = sp + 40|0;
- $15 = sp + 32|0;
- $16 = sp + 24|0;
- $17 = sp + 16|0;
- $18 = sp + 8|0;
- $4 = $1;
- $5 = $2;
- $6 = $3;
- $19 = $4;
- $20 = ((($19)) + 32|0);
- $21 = HEAP32[$20>>2]|0;
- $7 = $21;
- $10 = 0;
- $22 = $5;
- $23 = ($22|0)!=(0|0);
- if (!($23)) {
-  _mrb_undef_value_544($0);
-  STACKTOP = sp;return;
- }
- $24 = $5;
- $25 = ((($24)) + 1144|0);
- $26 = HEAP32[$25>>2]|0;
- $27 = ($26|0)!=(0|0);
- if ($27) {
-  $28 = $5;
-  $29 = ((($28)) + 1136|0);
-  $30 = HEAP32[$29>>2]|0;
-  $31 = ($30|0)!=(0);
-  if (!($31)) {
-   $62 = $4;
-   $63 = $5;
-   $64 = (_mrb_generate_code($62,$63)|0);
-   $8 = $64;
-   $65 = $5;
-   _mrb_parser_free($65);
-   $66 = $8;
-   $67 = ($66|0)==(0|0);
-   if ($67) {
-    $68 = $4;
-    $69 = $4;
-    $70 = (_mrb_class_get($69,68028)|0);
-    $71 = $4;
-    _mrb_str_new_static($16,$71,64490,13);
-    ;HEAP32[$$byval_copy2>>2]=HEAP32[$16>>2]|0;HEAP32[$$byval_copy2+4>>2]=HEAP32[$16+4>>2]|0;
-    _mrb_exc_new_str($17,$68,$70,$$byval_copy2);
-    $72 = HEAP32[$17>>2]|0;
-    $73 = $4;
-    $74 = ((($73)) + 20|0);
-    HEAP32[$74>>2] = $72;
-    _mrb_undef_value_544($0);
-    STACKTOP = sp;return;
-   }
-   $75 = $6;
-   $76 = ($75|0)!=(0|0);
-   do {
-    if ($76) {
-     $77 = $6;
-     $78 = ((($77)) + 28|0);
-     $79 = HEAP8[$78>>0]|0;
-     $80 = ($79&255) >>> 1;
-     $81 = $80 & 1;
-     $82 = ($81<<24>>24)!=(0);
-     if ($82) {
-      $83 = $4;
-      $84 = $8;
-      _mrb_codedump_all($83,$84);
-     }
-     $85 = $6;
-     $86 = ((($85)) + 28|0);
-     $87 = HEAP8[$86>>0]|0;
-     $88 = ($87&255) >>> 2;
-     $89 = $88 & 1;
-     $90 = ($89<<24>>24)!=(0);
-     if ($90) {
-      $91 = $8;
-      _mrb_obj_value_545($0,$91);
-      STACKTOP = sp;return;
-     }
-     $92 = $6;
-     $93 = ((($92)) + 24|0);
-     $94 = HEAP32[$93>>2]|0;
-     $95 = ($94|0)!=(0|0);
-     if ($95) {
-      $96 = $6;
-      $97 = ((($96)) + 24|0);
-      $98 = HEAP32[$97>>2]|0;
-      $7 = $98;
-     }
-     $99 = $6;
-     $100 = ((($99)) + 28|0);
-     $101 = HEAP8[$100>>0]|0;
-     $102 = ($101&255) >>> 3;
-     $103 = $102 & 1;
-     $104 = ($103<<24>>24)!=(0);
-     $105 = $6;
-     if ($104) {
-      $106 = ((($105)) + 4|0);
-      $107 = HEAP32[$106>>2]|0;
-      $108 = (($107) + 1)|0;
-      $10 = $108;
-      break;
-     } else {
-      $109 = ((($105)) + 28|0);
-      $110 = HEAP8[$109>>0]|0;
-      $111 = $110 & -9;
-      $112 = $111 | 8;
-      HEAP8[$109>>0] = $112;
-      break;
-     }
-    }
-   } while(0);
-   $113 = $7;
-   $114 = $8;
-   $115 = ((($114)) + 16|0);
-   HEAP32[$115>>2] = $113;
-   $116 = $4;
-   $117 = ((($116)) + 12|0);
-   $118 = HEAP32[$117>>2]|0;
-   $119 = ((($118)) + 16|0);
-   $120 = HEAP32[$119>>2]|0;
-   $121 = ($120|0)!=(0|0);
-   if ($121) {
-    $122 = $7;
-    $123 = $4;
-    $124 = ((($123)) + 12|0);
-    $125 = HEAP32[$124>>2]|0;
-    $126 = ((($125)) + 16|0);
-    $127 = HEAP32[$126>>2]|0;
-    $128 = ((($127)) + 44|0);
-    HEAP32[$128>>2] = $122;
-   }
-   $129 = $4;
-   $130 = $8;
-   $131 = $10;
-   _mrb_toplevel_run_keep($18,$129,$130,$131);
-   ;HEAP32[$9>>2]=HEAP32[$18>>2]|0;HEAP32[$9+4>>2]=HEAP32[$18+4>>2]|0;
-   $132 = $4;
-   $133 = ((($132)) + 20|0);
-   $134 = HEAP32[$133>>2]|0;
-   $135 = ($134|0)!=(0|0);
-   if ($135) {
-    _mrb_nil_value_546($0);
-    STACKTOP = sp;return;
-   } else {
-    ;HEAP32[$0>>2]=HEAP32[$9>>2]|0;HEAP32[$0+4>>2]=HEAP32[$9+4>>2]|0;
-    STACKTOP = sp;return;
-   }
-  }
- }
- $32 = $5;
- $33 = ((($32)) + 1148|0);
- $34 = HEAP8[$33>>0]|0;
- $35 = ($34&255) >>> 1;
- $36 = $35 & 1;
- $37 = ($36<<24>>24)!=(0);
- if ($37) {
-  $38 = $5;
-  $39 = ((($38)) + 1152|0);
-  $40 = HEAP32[$39>>2]|0;
-  $41 = $5;
-  $42 = ((($41)) + 1152|0);
-  $43 = ((($42)) + 8|0);
-  $44 = HEAP32[$43>>2]|0;
-  HEAP32[$vararg_buffer>>2] = $40;
-  $vararg_ptr1 = ((($vararg_buffer)) + 4|0);
-  HEAP32[$vararg_ptr1>>2] = $44;
-  $45 = (_snprintf($11,256,64477,$vararg_buffer)|0);
-  $12 = $45;
-  $46 = $4;
-  $47 = $4;
-  $48 = (_mrb_class_get($47,68040)|0);
-  $49 = $12;
-  _mrb_exc_new($13,$46,$48,$11,$49);
-  $50 = HEAP32[$13>>2]|0;
-  $51 = $4;
-  $52 = ((($51)) + 20|0);
-  HEAP32[$52>>2] = $50;
-  $53 = $5;
-  _mrb_parser_free($53);
-  _mrb_undef_value_544($0);
-  STACKTOP = sp;return;
- } else {
-  $54 = $4;
-  $55 = $4;
-  $56 = (_mrb_class_get($55,68040)|0);
-  $57 = $4;
-  _mrb_str_new_static($14,$57,59902,12);
-  ;HEAP32[$$byval_copy>>2]=HEAP32[$14>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$14+4>>2]|0;
-  _mrb_exc_new_str($15,$54,$56,$$byval_copy);
-  $58 = HEAP32[$15>>2]|0;
-  $59 = $4;
-  $60 = ((($59)) + 20|0);
-  HEAP32[$60>>2] = $58;
-  $61 = $5;
-  _mrb_parser_free($61);
-  _mrb_undef_value_544($0);
-  STACKTOP = sp;return;
- }
-}
-function _mrb_undef_value_544($0) {
- $0 = $0|0;
- var $1 = 0, $2 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $1 = sp;
- $2 = ((($1)) + 4|0);
- HEAP32[$2>>2] = 5;
- HEAP32[$1>>2] = 0;
- ;HEAP32[$0>>2]=HEAP32[$1>>2]|0;HEAP32[$0+4>>2]=HEAP32[$1+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_obj_value_545($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = sp;
- $2 = $1;
- $4 = $2;
- $5 = HEAP32[$4>>2]|0;
- $6 = $5 & 255;
- $7 = ((($3)) + 4|0);
- HEAP32[$7>>2] = $6;
- $8 = $2;
- HEAP32[$3>>2] = $8;
- ;HEAP32[$0>>2]=HEAP32[$3>>2]|0;HEAP32[$0+4>>2]=HEAP32[$3+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_nil_value_546($0) {
- $0 = $0|0;
- var $1 = 0, $2 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $1 = sp;
- $2 = ((($1)) + 4|0);
- HEAP32[$2>>2] = 0;
- HEAP32[$1>>2] = 0;
- ;HEAP32[$0>>2]=HEAP32[$1>>2]|0;HEAP32[$0+4>>2]=HEAP32[$1+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_ary_new_capa($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $1;
- $4 = $2;
- $6 = $3;
- $7 = $4;
- $8 = (_ary_new_capa($6,$7)|0);
- $5 = $8;
- $9 = $5;
- _mrb_obj_value_549($0,$9);
- STACKTOP = sp;return;
-}
-function _ary_new_capa($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;
- var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $6 = $3;
- $7 = ($6|0)>(536870911);
- if ($7) {
-  $8 = $2;
-  $9 = $2;
-  $10 = (_mrb_class_get($9,69160)|0);
-  _mrb_raise($8,$10,64504);
-  // unreachable;
- }
- $11 = $3;
- $12 = $11<<3;
- $5 = $12;
- $13 = $5;
- $14 = $3;
- $15 = ($13|0)<($14|0);
- $16 = $2;
- $17 = $2;
- if ($15) {
-  $18 = (_mrb_class_get($17,69160)|0);
-  _mrb_raise($16,$18,64504);
-  // unreachable;
- } else {
-  $19 = ((($17)) + 52|0);
-  $20 = HEAP32[$19>>2]|0;
-  $21 = (_mrb_obj_alloc($16,14,$20)|0);
-  $4 = $21;
-  $22 = $2;
-  $23 = $5;
-  $24 = (_mrb_malloc($22,$23)|0);
-  $25 = $4;
-  $26 = ((($25)) + 20|0);
-  HEAP32[$26>>2] = $24;
-  $27 = $3;
-  $28 = $4;
-  $29 = ((($28)) + 16|0);
-  HEAP32[$29>>2] = $27;
-  $30 = $4;
-  $31 = ((($30)) + 12|0);
-  HEAP32[$31>>2] = 0;
-  $32 = $4;
-  STACKTOP = sp;return ($32|0);
- }
- return (0)|0;
-}
-function _mrb_obj_value_549($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = sp;
- $2 = $1;
- $4 = $2;
- $5 = HEAP32[$4>>2]|0;
- $6 = $5 & 255;
- $7 = ((($3)) + 4|0);
- HEAP32[$7>>2] = $6;
- $8 = $2;
- HEAP32[$3>>2] = $8;
- ;HEAP32[$0>>2]=HEAP32[$3>>2]|0;HEAP32[$0+4>>2]=HEAP32[$3+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_ary_new($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $2 = 0, $3 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $1;
- $3 = $2;
- _mrb_ary_new_capa($0,$3,0);
- STACKTOP = sp;return;
-}
-function _mrb_ary_new_from_values($0,$1,$2,$3) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $4 = $1;
- $5 = $2;
- $6 = $3;
- $8 = $4;
- $9 = $5;
- $10 = (_ary_new_capa($8,$9)|0);
- $7 = $10;
- $11 = $7;
- $12 = ((($11)) + 20|0);
- $13 = HEAP32[$12>>2]|0;
- $14 = $6;
- $15 = $5;
- _array_copy($13,$14,$15);
- $16 = $5;
- $17 = $7;
- $18 = ((($17)) + 12|0);
- HEAP32[$18>>2] = $16;
- $19 = $7;
- _mrb_obj_value_549($0,$19);
- STACKTOP = sp;return;
-}
-function _array_copy($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $0;
- $4 = $1;
- $5 = $2;
- $6 = 0;
- while(1) {
-  $7 = $6;
-  $8 = $5;
-  $9 = ($7|0)<($8|0);
-  if (!($9)) {
-   break;
-  }
-  $10 = $3;
-  $11 = $6;
-  $12 = (($10) + ($11<<3)|0);
-  $13 = $4;
-  $14 = $6;
-  $15 = (($13) + ($14<<3)|0);
-  ;HEAP32[$12>>2]=HEAP32[$15>>2]|0;HEAP32[$12+4>>2]=HEAP32[$15+4>>2]|0;
-  $16 = $6;
-  $17 = (($16) + 1)|0;
-  $6 = $17;
- }
- STACKTOP = sp;return;
-}
-function _mrb_assoc_new($0,$1,$2,$3) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $4 = $1;
- $6 = $4;
- $7 = (_ary_new_capa($6,2)|0);
- $5 = $7;
- $8 = $5;
- $9 = ((($8)) + 20|0);
- $10 = HEAP32[$9>>2]|0;
- ;HEAP32[$10>>2]=HEAP32[$2>>2]|0;HEAP32[$10+4>>2]=HEAP32[$2+4>>2]|0;
- $11 = $5;
- $12 = ((($11)) + 20|0);
- $13 = HEAP32[$12>>2]|0;
- $14 = ((($13)) + 8|0);
- ;HEAP32[$14>>2]=HEAP32[$3>>2]|0;HEAP32[$14+4>>2]=HEAP32[$3+4>>2]|0;
- $15 = $5;
- $16 = ((($15)) + 12|0);
- HEAP32[$16>>2] = 2;
- $17 = $5;
- _mrb_obj_value_549($0,$17);
- STACKTOP = sp;return;
-}
-function _ary_modify($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;
- var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0;
- var $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0;
- var $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $2 = $0;
- $3 = $1;
- $8 = $3;
- $9 = HEAP32[$8>>2]|0;
- $10 = $9 >>> 11;
- $11 = $10 & 256;
- $12 = ($11|0)!=(0);
- if (!($12)) {
-  STACKTOP = sp;return;
- }
- $13 = $3;
- $14 = ((($13)) + 16|0);
- $15 = HEAP32[$14>>2]|0;
- $4 = $15;
- $16 = $4;
- $17 = HEAP32[$16>>2]|0;
- $18 = ($17|0)==(1);
- if ($18) {
-  $19 = $3;
-  $20 = ((($19)) + 20|0);
-  $21 = HEAP32[$20>>2]|0;
-  $22 = $4;
-  $23 = ((($22)) + 8|0);
-  $24 = HEAP32[$23>>2]|0;
-  $25 = ($21|0)==($24|0);
-  if ($25) {
-   $26 = $4;
-   $27 = ((($26)) + 8|0);
-   $28 = HEAP32[$27>>2]|0;
-   $29 = $3;
-   $30 = ((($29)) + 20|0);
-   HEAP32[$30>>2] = $28;
-   $31 = $3;
-   $32 = ((($31)) + 12|0);
-   $33 = HEAP32[$32>>2]|0;
-   $34 = $3;
-   $35 = ((($34)) + 16|0);
-   HEAP32[$35>>2] = $33;
-   $36 = $2;
-   $37 = $4;
-   _mrb_free($36,$37);
-  } else {
-   label = 5;
-  }
- } else {
-  label = 5;
- }
- if ((label|0) == 5) {
-  $38 = $3;
-  $39 = ((($38)) + 20|0);
-  $40 = HEAP32[$39>>2]|0;
-  $6 = $40;
-  $41 = $3;
-  $42 = ((($41)) + 12|0);
-  $43 = HEAP32[$42>>2]|0;
-  $44 = $43<<3;
-  $7 = $44;
-  $45 = $2;
-  $46 = $7;
-  $47 = (_mrb_malloc($45,$46)|0);
-  $5 = $47;
-  $48 = $6;
-  $49 = ($48|0)!=(0|0);
-  if ($49) {
-   $50 = $5;
-   $51 = $6;
-   $52 = $3;
-   $53 = ((($52)) + 12|0);
-   $54 = HEAP32[$53>>2]|0;
-   _array_copy($50,$51,$54);
-  }
-  $55 = $5;
-  $56 = $3;
-  $57 = ((($56)) + 20|0);
-  HEAP32[$57>>2] = $55;
-  $58 = $3;
-  $59 = ((($58)) + 12|0);
-  $60 = HEAP32[$59>>2]|0;
-  $61 = $3;
-  $62 = ((($61)) + 16|0);
-  HEAP32[$62>>2] = $60;
-  $63 = $2;
-  $64 = $4;
-  _mrb_ary_decref($63,$64);
- }
- $65 = $3;
- $66 = HEAP32[$65>>2]|0;
- $67 = $66 >>> 11;
- $68 = $67 & -257;
- $69 = HEAP32[$65>>2]|0;
- $70 = $68 & 2097151;
- $71 = $70 << 11;
- $72 = $69 & 2047;
- $73 = $72 | $71;
- HEAP32[$65>>2] = $73;
- STACKTOP = sp;return;
-}
-function _mrb_ary_decref($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $4 = $3;
- $5 = HEAP32[$4>>2]|0;
- $6 = (($5) + -1)|0;
- HEAP32[$4>>2] = $6;
- $7 = $3;
- $8 = HEAP32[$7>>2]|0;
- $9 = ($8|0)==(0);
- if (!($9)) {
-  STACKTOP = sp;return;
- }
- $10 = $2;
- $11 = $3;
- $12 = ((($11)) + 8|0);
- $13 = HEAP32[$12>>2]|0;
- _mrb_free($10,$13);
- $14 = $2;
- $15 = $3;
- _mrb_free($14,$15);
- STACKTOP = sp;return;
-}
-function _ary_shrink_capa($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;
- var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0;
- var $47 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $5 = $3;
- $6 = ((($5)) + 16|0);
- $7 = HEAP32[$6>>2]|0;
- $4 = $7;
- $8 = $4;
- $9 = ($8|0)<(8);
- if ($9) {
-  STACKTOP = sp;return;
- }
- $10 = $4;
- $11 = $3;
- $12 = ((($11)) + 12|0);
- $13 = HEAP32[$12>>2]|0;
- $14 = ($13*5)|0;
- $15 = ($10|0)<=($14|0);
- if ($15) {
-  STACKTOP = sp;return;
- }
- while(1) {
-  $16 = $4;
-  $17 = (($16|0) / 2)&-1;
-  $4 = $17;
-  $18 = $4;
-  $19 = ($18|0)<(4);
-  if ($19) {
-   label = 4;
-   break;
-  }
-  $20 = $4;
-  $21 = $3;
-  $22 = ((($21)) + 12|0);
-  $23 = HEAP32[$22>>2]|0;
-  $24 = ($23*5)|0;
-  $25 = ($20|0)>($24|0);
-  if (!($25)) {
-   break;
-  }
- }
- if ((label|0) == 4) {
-  $4 = 4;
- }
- $26 = $4;
- $27 = $3;
- $28 = ((($27)) + 12|0);
- $29 = HEAP32[$28>>2]|0;
- $30 = ($26|0)>($29|0);
- if (!($30)) {
-  STACKTOP = sp;return;
- }
- $31 = $4;
- $32 = $3;
- $33 = ((($32)) + 16|0);
- $34 = HEAP32[$33>>2]|0;
- $35 = ($31|0)<($34|0);
- if (!($35)) {
-  STACKTOP = sp;return;
- }
- $36 = $4;
- $37 = $3;
- $38 = ((($37)) + 16|0);
- HEAP32[$38>>2] = $36;
- $39 = $2;
- $40 = $3;
- $41 = ((($40)) + 20|0);
- $42 = HEAP32[$41>>2]|0;
- $43 = $4;
- $44 = $43<<3;
- $45 = (_mrb_realloc($39,$42,$44)|0);
- $46 = $3;
- $47 = ((($46)) + 20|0);
- HEAP32[$47>>2] = $45;
- STACKTOP = sp;return;
-}
-function _ary_expand_capa($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;
- var $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0;
- var sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $3 = $0;
- $4 = $1;
- $5 = $2;
- $8 = $4;
- $9 = ((($8)) + 16|0);
- $10 = HEAP32[$9>>2]|0;
- $6 = $10;
- $11 = $5;
- $12 = ($11|0)>(536870911);
- if ($12) {
-  $13 = $3;
-  $14 = $3;
-  $15 = (_mrb_class_get($14,69160)|0);
-  _mrb_raise($13,$15,64504);
-  // unreachable;
- }
- $16 = $6;
- $17 = ($16|0)==(0);
- if ($17) {
-  $6 = 4;
- }
- while(1) {
-  $18 = $6;
-  $19 = $5;
-  $20 = ($18|0)<($19|0);
-  $21 = $6;
-  if (!($20)) {
-   break;
-  }
-  $22 = $21<<1;
-  $6 = $22;
- }
- $23 = ($21|0)>(536870911);
- if ($23) {
-  $6 = 536870911;
- }
- $24 = $6;
- $25 = $4;
- $26 = ((($25)) + 16|0);
- $27 = HEAP32[$26>>2]|0;
- $28 = ($24|0)>($27|0);
- if (!($28)) {
-  STACKTOP = sp;return;
- }
- $29 = $3;
- $30 = $4;
- $31 = ((($30)) + 20|0);
- $32 = HEAP32[$31>>2]|0;
- $33 = $6;
- $34 = $33<<3;
- $35 = (_mrb_realloc($29,$32,$34)|0);
- $7 = $35;
- $36 = $6;
- $37 = $4;
- $38 = ((($37)) + 16|0);
- HEAP32[$38>>2] = $36;
- $39 = $7;
- $40 = $4;
- $41 = ((($40)) + 20|0);
- HEAP32[$41>>2] = $39;
- STACKTOP = sp;return;
-}
-function _ary_fill_with_nil($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $4 = sp;
- $2 = $0;
- $3 = $1;
- _mrb_nil_value_562($4);
- while(1) {
-  $5 = $3;
-  $6 = (($5) + -1)|0;
-  $3 = $6;
-  $7 = ($5|0)!=(0);
-  if (!($7)) {
-   break;
-  }
-  $8 = $2;
-  $9 = ((($8)) + 8|0);
-  $2 = $9;
-  ;HEAP32[$8>>2]=HEAP32[$4>>2]|0;HEAP32[$8+4>>2]=HEAP32[$4+4>>2]|0;
- }
- STACKTOP = sp;return;
-}
-function _mrb_nil_value_562($0) {
- $0 = $0|0;
- var $1 = 0, $2 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $1 = sp;
- $2 = ((($1)) + 4|0);
- HEAP32[$2>>2] = 0;
- HEAP32[$1>>2] = 0;
- ;HEAP32[$0>>2]=HEAP32[$1>>2]|0;HEAP32[$0+4>>2]=HEAP32[$1+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_ary_concat($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $0;
- $5 = HEAP32[$2>>2]|0;
- $4 = $5;
- $6 = $3;
- $7 = HEAP32[$1>>2]|0;
- $8 = $4;
- $9 = ((($8)) + 20|0);
- $10 = HEAP32[$9>>2]|0;
- $11 = $4;
- $12 = ((($11)) + 12|0);
- $13 = HEAP32[$12>>2]|0;
- _ary_concat($6,$7,$10,$13);
- STACKTOP = sp;return;
-}
-function _ary_concat($0,$1,$2,$3) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;
- var $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $4 = $0;
- $5 = $1;
- $6 = $2;
- $7 = $3;
- $9 = $5;
- $10 = ((($9)) + 12|0);
- $11 = HEAP32[$10>>2]|0;
- $12 = $7;
- $13 = (($11) + ($12))|0;
- $8 = $13;
- $14 = $4;
- $15 = $5;
- _ary_modify($14,$15);
- $16 = $5;
- $17 = ((($16)) + 16|0);
- $18 = HEAP32[$17>>2]|0;
- $19 = $8;
- $20 = ($18|0)<($19|0);
- if ($20) {
-  $21 = $4;
-  $22 = $5;
-  $23 = $8;
-  _ary_expand_capa($21,$22,$23);
- }
- $24 = $5;
- $25 = ((($24)) + 20|0);
- $26 = HEAP32[$25>>2]|0;
- $27 = $5;
- $28 = ((($27)) + 12|0);
- $29 = HEAP32[$28>>2]|0;
- $30 = (($26) + ($29<<3)|0);
- $31 = $6;
- $32 = $7;
- _array_copy($30,$31,$32);
- $33 = $4;
- $34 = $5;
- _mrb_write_barrier($33,$34);
- $35 = $8;
- $36 = $5;
- $37 = ((($36)) + 12|0);
- HEAP32[$37>>2] = $35;
- STACKTOP = sp;return;
-}
-function _mrb_ary_replace($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $0;
- $5 = HEAP32[$2>>2]|0;
- $4 = $5;
- $6 = $3;
- $7 = HEAP32[$1>>2]|0;
- $8 = $4;
- $9 = ((($8)) + 20|0);
- $10 = HEAP32[$9>>2]|0;
- $11 = $4;
- $12 = ((($11)) + 12|0);
- $13 = HEAP32[$12>>2]|0;
- _ary_replace($6,$7,$10,$13);
- STACKTOP = sp;return;
-}
-function _ary_replace($0,$1,$2,$3) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $4 = 0, $5 = 0;
- var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $4 = $0;
- $5 = $1;
- $6 = $2;
- $7 = $3;
- $8 = $4;
- $9 = $5;
- _ary_modify($8,$9);
- $10 = $5;
- $11 = ((($10)) + 16|0);
- $12 = HEAP32[$11>>2]|0;
- $13 = $7;
- $14 = ($12|0)<($13|0);
- if ($14) {
-  $15 = $4;
-  $16 = $5;
-  $17 = $7;
-  _ary_expand_capa($15,$16,$17);
- }
- $18 = $5;
- $19 = ((($18)) + 20|0);
- $20 = HEAP32[$19>>2]|0;
- $21 = $6;
- $22 = $7;
- _array_copy($20,$21,$22);
- $23 = $4;
- $24 = $5;
- _mrb_write_barrier($23,$24);
- $25 = $7;
- $26 = $5;
- $27 = ((($26)) + 12|0);
- HEAP32[$27>>2] = $25;
- STACKTOP = sp;return;
-}
-function _mrb_ary_push($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;
- var $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $0;
- $5 = HEAP32[$1>>2]|0;
- $4 = $5;
- $6 = $3;
- $7 = $4;
- _ary_modify($6,$7);
- $8 = $4;
- $9 = ((($8)) + 12|0);
- $10 = HEAP32[$9>>2]|0;
- $11 = $4;
- $12 = ((($11)) + 16|0);
- $13 = HEAP32[$12>>2]|0;
- $14 = ($10|0)==($13|0);
- if ($14) {
-  $15 = $3;
-  $16 = $4;
-  $17 = $4;
-  $18 = ((($17)) + 12|0);
-  $19 = HEAP32[$18>>2]|0;
-  $20 = (($19) + 1)|0;
-  _ary_expand_capa($15,$16,$20);
- }
- $21 = $4;
- $22 = ((($21)) + 20|0);
- $23 = HEAP32[$22>>2]|0;
- $24 = $4;
- $25 = ((($24)) + 12|0);
- $26 = HEAP32[$25>>2]|0;
- $27 = (($26) + 1)|0;
- HEAP32[$25>>2] = $27;
- $28 = (($23) + ($26<<3)|0);
- ;HEAP32[$28>>2]=HEAP32[$2>>2]|0;HEAP32[$28+4>>2]=HEAP32[$2+4>>2]|0;
- $29 = ((($2)) + 4|0);
- $30 = HEAP32[$29>>2]|0;
- $31 = ($30>>>0)<(8);
- if ($31) {
-  STACKTOP = sp;return;
- }
- $32 = $3;
- $33 = $4;
- $34 = HEAP32[$2>>2]|0;
- _mrb_field_write_barrier($32,$33,$34);
- STACKTOP = sp;return;
-}
-function _mrb_ary_pop($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $1;
- $5 = HEAP32[$2>>2]|0;
- $4 = $5;
- $6 = $4;
- $7 = ((($6)) + 12|0);
- $8 = HEAP32[$7>>2]|0;
- $9 = ($8|0)==(0);
- if ($9) {
-  _mrb_nil_value_562($0);
-  STACKTOP = sp;return;
- } else {
-  $10 = $4;
-  $11 = ((($10)) + 20|0);
-  $12 = HEAP32[$11>>2]|0;
-  $13 = $4;
-  $14 = ((($13)) + 12|0);
-  $15 = HEAP32[$14>>2]|0;
-  $16 = (($15) + -1)|0;
-  HEAP32[$14>>2] = $16;
-  $17 = (($12) + ($16<<3)|0);
-  ;HEAP32[$0>>2]=HEAP32[$17>>2]|0;HEAP32[$0+4>>2]=HEAP32[$17+4>>2]|0;
-  STACKTOP = sp;return;
- }
-}
-function _mrb_ary_shift($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;
- var $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0;
- var $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $5 = sp + 8|0;
- $3 = $1;
- $8 = HEAP32[$2>>2]|0;
- $4 = $8;
- $9 = $4;
- $10 = ((($9)) + 12|0);
- $11 = HEAP32[$10>>2]|0;
- $12 = ($11|0)==(0);
- if ($12) {
-  _mrb_nil_value_562($0);
-  STACKTOP = sp;return;
- }
- $13 = $4;
- $14 = HEAP32[$13>>2]|0;
- $15 = $14 >>> 11;
- $16 = $15 & 256;
- $17 = ($16|0)!=(0);
- do {
-  if (!($17)) {
-   $29 = $4;
-   $30 = ((($29)) + 12|0);
-   $31 = HEAP32[$30>>2]|0;
-   $32 = ($31|0)>(10);
-   if ($32) {
-    $33 = $3;
-    $34 = $4;
-    _ary_make_shared($33,$34);
-    break;
-   }
-   $35 = $4;
-   $36 = ((($35)) + 20|0);
-   $37 = HEAP32[$36>>2]|0;
-   $6 = $37;
-   $38 = $4;
-   $39 = ((($38)) + 12|0);
-   $40 = HEAP32[$39>>2]|0;
-   $7 = $40;
-   $41 = $6;
-   ;HEAP32[$5>>2]=HEAP32[$41>>2]|0;HEAP32[$5+4>>2]=HEAP32[$41+4>>2]|0;
-   while(1) {
-    $42 = $7;
-    $43 = (($42) + -1)|0;
-    $7 = $43;
-    $44 = ($43|0)!=(0);
-    if (!($44)) {
-     break;
-    }
-    $45 = $6;
-    $46 = $6;
-    $47 = ((($46)) + 8|0);
-    ;HEAP32[$45>>2]=HEAP32[$47>>2]|0;HEAP32[$45+4>>2]=HEAP32[$47+4>>2]|0;
-    $48 = $6;
-    $49 = ((($48)) + 8|0);
-    $6 = $49;
-   }
-   $50 = $4;
-   $51 = ((($50)) + 12|0);
-   $52 = HEAP32[$51>>2]|0;
-   $53 = (($52) + -1)|0;
-   HEAP32[$51>>2] = $53;
-   ;HEAP32[$0>>2]=HEAP32[$5>>2]|0;HEAP32[$0+4>>2]=HEAP32[$5+4>>2]|0;
-   STACKTOP = sp;return;
-  }
- } while(0);
- $18 = $4;
- $19 = ((($18)) + 20|0);
- $20 = HEAP32[$19>>2]|0;
- ;HEAP32[$5>>2]=HEAP32[$20>>2]|0;HEAP32[$5+4>>2]=HEAP32[$20+4>>2]|0;
- $21 = $4;
- $22 = ((($21)) + 20|0);
- $23 = HEAP32[$22>>2]|0;
- $24 = ((($23)) + 8|0);
- HEAP32[$22>>2] = $24;
- $25 = $4;
- $26 = ((($25)) + 12|0);
- $27 = HEAP32[$26>>2]|0;
- $28 = (($27) + -1)|0;
- HEAP32[$26>>2] = $28;
- ;HEAP32[$0>>2]=HEAP32[$5>>2]|0;HEAP32[$0+4>>2]=HEAP32[$5+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _ary_make_shared($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;
- var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0;
- var $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $5 = $3;
- $6 = HEAP32[$5>>2]|0;
- $7 = $6 >>> 11;
- $8 = $7 & 256;
- $9 = ($8|0)!=(0);
- if ($9) {
-  STACKTOP = sp;return;
- }
- $10 = $2;
- $11 = (_mrb_malloc($10,12)|0);
- $4 = $11;
- $12 = $4;
- HEAP32[$12>>2] = 1;
- $13 = $3;
- $14 = ((($13)) + 16|0);
- $15 = HEAP32[$14>>2]|0;
- $16 = $3;
- $17 = ((($16)) + 12|0);
- $18 = HEAP32[$17>>2]|0;
- $19 = ($15|0)>($18|0);
- if ($19) {
-  $20 = $2;
-  $21 = $3;
-  $22 = ((($21)) + 20|0);
-  $23 = HEAP32[$22>>2]|0;
-  $24 = $3;
-  $25 = ((($24)) + 12|0);
-  $26 = HEAP32[$25>>2]|0;
-  $27 = $26<<3;
-  $28 = (($27) + 1)|0;
-  $29 = (_mrb_realloc($20,$23,$28)|0);
-  $30 = $4;
-  $31 = ((($30)) + 8|0);
-  HEAP32[$31>>2] = $29;
-  $32 = $3;
-  $33 = ((($32)) + 20|0);
-  HEAP32[$33>>2] = $29;
- } else {
-  $34 = $3;
-  $35 = ((($34)) + 20|0);
-  $36 = HEAP32[$35>>2]|0;
-  $37 = $4;
-  $38 = ((($37)) + 8|0);
-  HEAP32[$38>>2] = $36;
- }
- $39 = $3;
- $40 = ((($39)) + 12|0);
- $41 = HEAP32[$40>>2]|0;
- $42 = $4;
- $43 = ((($42)) + 4|0);
- HEAP32[$43>>2] = $41;
- $44 = $4;
- $45 = $3;
- $46 = ((($45)) + 16|0);
- HEAP32[$46>>2] = $44;
- $47 = $3;
- $48 = HEAP32[$47>>2]|0;
- $49 = $48 >>> 11;
- $50 = $49 | 256;
- $51 = HEAP32[$47>>2]|0;
- $52 = $50 & 2097151;
- $53 = $52 << 11;
- $54 = $51 & 2047;
- $55 = $54 | $53;
- HEAP32[$47>>2] = $55;
- STACKTOP = sp;return;
-}
-function _mrb_ary_unshift($0,$1,$2,$3) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;
- var $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0;
- var $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0;
- var $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $4 = $1;
- $6 = HEAP32[$2>>2]|0;
- $5 = $6;
- $7 = $5;
- $8 = HEAP32[$7>>2]|0;
- $9 = $8 >>> 11;
- $10 = $9 & 256;
- $11 = ($10|0)!=(0);
- if ($11) {
-  $12 = $5;
-  $13 = ((($12)) + 16|0);
-  $14 = HEAP32[$13>>2]|0;
-  $15 = HEAP32[$14>>2]|0;
-  $16 = ($15|0)==(1);
-  if ($16) {
-   $17 = $5;
-   $18 = ((($17)) + 20|0);
-   $19 = HEAP32[$18>>2]|0;
-   $20 = $5;
-   $21 = ((($20)) + 16|0);
-   $22 = HEAP32[$21>>2]|0;
-   $23 = ((($22)) + 8|0);
-   $24 = HEAP32[$23>>2]|0;
-   $25 = $19;
-   $26 = $24;
-   $27 = (($25) - ($26))|0;
-   $28 = (($27|0) / 8)&-1;
-   $29 = ($28|0)>=(1);
-   if ($29) {
-    $30 = $5;
-    $31 = ((($30)) + 20|0);
-    $32 = HEAP32[$31>>2]|0;
-    $33 = ((($32)) + -8|0);
-    HEAP32[$31>>2] = $33;
-    $34 = $5;
-    $35 = ((($34)) + 20|0);
-    $36 = HEAP32[$35>>2]|0;
-    ;HEAP32[$36>>2]=HEAP32[$3>>2]|0;HEAP32[$36+4>>2]=HEAP32[$3+4>>2]|0;
-   } else {
-    label = 5;
-   }
-  } else {
-   label = 5;
-  }
- } else {
-  label = 5;
- }
- if ((label|0) == 5) {
-  $37 = $4;
-  $38 = $5;
-  _ary_modify($37,$38);
-  $39 = $5;
-  $40 = ((($39)) + 16|0);
-  $41 = HEAP32[$40>>2]|0;
-  $42 = $5;
-  $43 = ((($42)) + 12|0);
-  $44 = HEAP32[$43>>2]|0;
-  $45 = (($44) + 1)|0;
-  $46 = ($41|0)<($45|0);
-  if ($46) {
-   $47 = $4;
-   $48 = $5;
-   $49 = $5;
-   $50 = ((($49)) + 12|0);
-   $51 = HEAP32[$50>>2]|0;
-   $52 = (($51) + 1)|0;
-   _ary_expand_capa($47,$48,$52);
-  }
-  $53 = $5;
-  $54 = ((($53)) + 20|0);
-  $55 = HEAP32[$54>>2]|0;
-  $56 = ((($55)) + 8|0);
-  $57 = $5;
-  $58 = ((($57)) + 20|0);
-  $59 = HEAP32[$58>>2]|0;
-  $60 = $5;
-  $61 = ((($60)) + 12|0);
-  $62 = HEAP32[$61>>2]|0;
-  _value_move_573($56,$59,$62);
-  $63 = $5;
-  $64 = ((($63)) + 20|0);
-  $65 = HEAP32[$64>>2]|0;
-  ;HEAP32[$65>>2]=HEAP32[$3>>2]|0;HEAP32[$65+4>>2]=HEAP32[$3+4>>2]|0;
- }
- $66 = $5;
- $67 = ((($66)) + 12|0);
- $68 = HEAP32[$67>>2]|0;
- $69 = (($68) + 1)|0;
- HEAP32[$67>>2] = $69;
- $70 = ((($3)) + 4|0);
- $71 = HEAP32[$70>>2]|0;
- $72 = ($71>>>0)<(8);
- if ($72) {
-  ;HEAP32[$0>>2]=HEAP32[$2>>2]|0;HEAP32[$0+4>>2]=HEAP32[$2+4>>2]|0;
-  STACKTOP = sp;return;
- }
- $73 = $4;
- $74 = $5;
- $75 = HEAP32[$3>>2]|0;
- _mrb_field_write_barrier($73,$74,$75);
- ;HEAP32[$0>>2]=HEAP32[$2>>2]|0;HEAP32[$0+4>>2]=HEAP32[$2+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _value_move_573($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;
- var $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $0;
- $4 = $1;
- $5 = $2;
- $6 = $3;
- $7 = $4;
- $8 = ($6>>>0)>($7>>>0);
- if ($8) {
-  $9 = $3;
-  $10 = $4;
-  $11 = $5;
-  $12 = (($10) + ($11<<3)|0);
-  $13 = ($9>>>0)<($12>>>0);
-  if ($13) {
-   $14 = $5;
-   $15 = $3;
-   $16 = (($15) + ($14<<3)|0);
-   $3 = $16;
-   $17 = $5;
-   $18 = $4;
-   $19 = (($18) + ($17<<3)|0);
-   $4 = $19;
-   while(1) {
-    $20 = $5;
-    $21 = (($20) + -1)|0;
-    $5 = $21;
-    $22 = ($20>>>0)>(0);
-    if (!($22)) {
-     break;
-    }
-    $23 = $3;
-    $24 = ((($23)) + -8|0);
-    $3 = $24;
-    $25 = $4;
-    $26 = ((($25)) + -8|0);
-    $4 = $26;
-    ;HEAP32[$24>>2]=HEAP32[$26>>2]|0;HEAP32[$24+4>>2]=HEAP32[$26+4>>2]|0;
-   }
-   STACKTOP = sp;return;
-  }
- }
- $27 = $3;
- $28 = $4;
- $29 = ($27|0)!=($28|0);
- if (!($29)) {
-  STACKTOP = sp;return;
- }
- while(1) {
-  $30 = $5;
-  $31 = (($30) + -1)|0;
-  $5 = $31;
-  $32 = ($30>>>0)>(0);
-  if (!($32)) {
-   break;
-  }
-  $33 = $3;
-  $34 = ((($33)) + 8|0);
-  $3 = $34;
-  $35 = $4;
-  $36 = ((($35)) + 8|0);
-  $4 = $36;
-  ;HEAP32[$33>>2]=HEAP32[$35>>2]|0;HEAP32[$33+4>>2]=HEAP32[$35+4>>2]|0;
- }
- STACKTOP = sp;return;
-}
-function _mrb_ary_ref($0,$1,$2,$3) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $4 = 0, $5 = 0, $6 = 0;
- var $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $4 = $1;
- $5 = $3;
- $7 = HEAP32[$2>>2]|0;
- $6 = $7;
- $8 = $5;
- $9 = ($8|0)<(0);
- if ($9) {
-  $10 = $6;
-  $11 = ((($10)) + 12|0);
-  $12 = HEAP32[$11>>2]|0;
-  $13 = $5;
-  $14 = (($13) + ($12))|0;
-  $5 = $14;
- }
- $15 = $5;
- $16 = ($15|0)<(0);
- if (!($16)) {
-  $17 = $6;
-  $18 = ((($17)) + 12|0);
-  $19 = HEAP32[$18>>2]|0;
-  $20 = $5;
-  $21 = ($19|0)<=($20|0);
-  if (!($21)) {
-   $22 = $6;
-   $23 = ((($22)) + 20|0);
-   $24 = HEAP32[$23>>2]|0;
-   $25 = $5;
-   $26 = (($24) + ($25<<3)|0);
-   ;HEAP32[$0>>2]=HEAP32[$26>>2]|0;HEAP32[$0+4>>2]=HEAP32[$26+4>>2]|0;
-   STACKTOP = sp;return;
-  }
- }
- _mrb_nil_value_562($0);
- STACKTOP = sp;return;
-}
-function _mrb_ary_set($0,$1,$2,$3) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;
- var $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0;
- var $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0;
- var $67 = 0, $68 = 0, $69 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $vararg_buffer = sp;
- $7 = sp + 8|0;
- $4 = $0;
- $5 = $2;
- $8 = HEAP32[$1>>2]|0;
- $6 = $8;
- $9 = $4;
- $10 = $6;
- _ary_modify($9,$10);
- $11 = $5;
- $12 = ($11|0)<(0);
- if ($12) {
-  $13 = $6;
-  $14 = ((($13)) + 12|0);
-  $15 = HEAP32[$14>>2]|0;
-  $16 = $5;
-  $17 = (($16) + ($15))|0;
-  $5 = $17;
-  $18 = $5;
-  $19 = ($18|0)<(0);
-  if ($19) {
-   $20 = $4;
-   $21 = $4;
-   $22 = (_mrb_class_get($21,69011)|0);
-   $23 = $5;
-   $24 = $6;
-   $25 = ((($24)) + 12|0);
-   $26 = HEAP32[$25>>2]|0;
-   $27 = (($23) - ($26))|0;
-   _mrb_fixnum_value_579($7,$27);
-   ;HEAP8[$vararg_buffer>>0]=HEAP8[$7>>0]|0;HEAP8[$vararg_buffer+1>>0]=HEAP8[$7+1>>0]|0;HEAP8[$vararg_buffer+2>>0]=HEAP8[$7+2>>0]|0;HEAP8[$vararg_buffer+3>>0]=HEAP8[$7+3>>0]|0;HEAP8[$vararg_buffer+4>>0]=HEAP8[$7+4>>0]|0;HEAP8[$vararg_buffer+5>>0]=HEAP8[$7+5>>0]|0;HEAP8[$vararg_buffer+6>>0]=HEAP8[$7+6>>0]|0;HEAP8[$vararg_buffer+7>>0]=HEAP8[$7+7>>0]|0;
-   _mrb_raisef($20,$22,64523,$vararg_buffer);
-   // unreachable;
-  }
- }
- $28 = $6;
- $29 = ((($28)) + 12|0);
- $30 = HEAP32[$29>>2]|0;
- $31 = $5;
- $32 = ($30|0)<=($31|0);
- if ($32) {
-  $33 = $6;
-  $34 = ((($33)) + 16|0);
-  $35 = HEAP32[$34>>2]|0;
-  $36 = $5;
-  $37 = ($35|0)<=($36|0);
-  if ($37) {
-   $38 = $4;
-   $39 = $6;
-   $40 = $5;
-   $41 = (($40) + 1)|0;
-   _ary_expand_capa($38,$39,$41);
-  }
-  $42 = $6;
-  $43 = ((($42)) + 20|0);
-  $44 = HEAP32[$43>>2]|0;
-  $45 = $6;
-  $46 = ((($45)) + 12|0);
-  $47 = HEAP32[$46>>2]|0;
-  $48 = (($44) + ($47<<3)|0);
-  $49 = $5;
-  $50 = (($49) + 1)|0;
-  $51 = $6;
-  $52 = ((($51)) + 12|0);
-  $53 = HEAP32[$52>>2]|0;
-  $54 = (($50) - ($53))|0;
-  _ary_fill_with_nil($48,$54);
-  $55 = $5;
-  $56 = (($55) + 1)|0;
-  $57 = $6;
-  $58 = ((($57)) + 12|0);
-  HEAP32[$58>>2] = $56;
- }
- $59 = $6;
- $60 = ((($59)) + 20|0);
- $61 = HEAP32[$60>>2]|0;
- $62 = $5;
- $63 = (($61) + ($62<<3)|0);
- ;HEAP32[$63>>2]=HEAP32[$3>>2]|0;HEAP32[$63+4>>2]=HEAP32[$3+4>>2]|0;
- $64 = ((($3)) + 4|0);
- $65 = HEAP32[$64>>2]|0;
- $66 = ($65>>>0)<(8);
- if ($66) {
-  STACKTOP = sp;return;
- }
- $67 = $4;
- $68 = $6;
- $69 = HEAP32[$3>>2]|0;
- _mrb_field_write_barrier($67,$68,$69);
- STACKTOP = sp;return;
-}
-function _mrb_fixnum_value_579($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = sp;
- $2 = $1;
- $4 = ((($3)) + 4|0);
- HEAP32[$4>>2] = 3;
- $5 = $2;
- HEAP32[$3>>2] = $5;
- ;HEAP32[$0>>2]=HEAP32[$3>>2]|0;HEAP32[$0+4>>2]=HEAP32[$3+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_ary_splice($0,$1,$2,$3,$4,$5) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- $4 = $4|0;
- $5 = $5|0;
- var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;
- var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0;
- var $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0, $152 = 0, $153 = 0;
- var $154 = 0, $155 = 0, $156 = 0, $157 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $30 = 0, $31 = 0;
- var $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $50 = 0, $51 = 0;
- var $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0;
- var $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0;
- var $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);
- $vararg_buffer = sp;
- $15 = sp + 8|0;
- $6 = $1;
- $7 = $3;
- $8 = $4;
- $16 = HEAP32[$2>>2]|0;
- $9 = $16;
- $17 = $6;
- $18 = $9;
- _ary_modify($17,$18);
- $19 = $8;
- $20 = ($19|0)<(0);
- if ($20) {
-  $21 = $6;
-  $22 = $6;
-  $23 = (_mrb_class_get($22,69011)|0);
-  $24 = $8;
-  _mrb_fixnum_value_579($15,$24);
-  ;HEAP8[$vararg_buffer>>0]=HEAP8[$15>>0]|0;HEAP8[$vararg_buffer+1>>0]=HEAP8[$15+1>>0]|0;HEAP8[$vararg_buffer+2>>0]=HEAP8[$15+2>>0]|0;HEAP8[$vararg_buffer+3>>0]=HEAP8[$15+3>>0]|0;HEAP8[$vararg_buffer+4>>0]=HEAP8[$15+4>>0]|0;HEAP8[$vararg_buffer+5>>0]=HEAP8[$15+5>>0]|0;HEAP8[$vararg_buffer+6>>0]=HEAP8[$15+6>>0]|0;HEAP8[$vararg_buffer+7>>0]=HEAP8[$15+7>>0]|0;
-  _mrb_raisef($21,$23,64545,$vararg_buffer);
-  // unreachable;
- }
- $25 = $7;
- $26 = ($25|0)<(0);
- if ($26) {
-  $27 = $9;
-  $28 = ((($27)) + 12|0);
-  $29 = HEAP32[$28>>2]|0;
-  $30 = $7;
-  $31 = (($30) + ($29))|0;
-  $7 = $31;
-  $32 = $7;
-  $33 = ($32|0)<(0);
-  if ($33) {
-   $34 = $6;
-   $35 = $6;
-   $36 = (_mrb_class_get($35,69011)|0);
-   _mrb_raise($34,$36,64566);
-   // unreachable;
-  }
- }
- $37 = $9;
- $38 = ((($37)) + 12|0);
- $39 = HEAP32[$38>>2]|0;
- $40 = $8;
- $41 = ($39|0)<($40|0);
- if ($41) {
-  label = 8;
- } else {
-  $42 = $9;
-  $43 = ((($42)) + 12|0);
-  $44 = HEAP32[$43>>2]|0;
-  $45 = $7;
-  $46 = $8;
-  $47 = (($45) + ($46))|0;
-  $48 = ($44|0)<($47|0);
-  if ($48) {
-   label = 8;
-  }
- }
- if ((label|0) == 8) {
-  $49 = $9;
-  $50 = ((($49)) + 12|0);
-  $51 = HEAP32[$50>>2]|0;
-  $52 = $7;
-  $53 = (($51) - ($52))|0;
-  $8 = $53;
- }
- $54 = $7;
- $55 = $8;
- $56 = (($54) + ($55))|0;
- $10 = $56;
- $57 = ((($5)) + 4|0);
- $58 = HEAP32[$57>>2]|0;
- $59 = ($58|0)==(14);
- if ($59) {
-  $60 = HEAP32[$5>>2]|0;
-  $61 = ((($60)) + 12|0);
-  $62 = HEAP32[$61>>2]|0;
-  $14 = $62;
-  $63 = HEAP32[$5>>2]|0;
-  $64 = ((($63)) + 20|0);
-  $65 = HEAP32[$64>>2]|0;
-  $12 = $65;
- } else {
-  $14 = 1;
-  $12 = $5;
- }
- $66 = $7;
- $67 = $14;
- $68 = (($66) + ($67))|0;
- $11 = $68;
- $69 = $10;
- $70 = $9;
- $71 = ((($70)) + 12|0);
- $72 = HEAP32[$71>>2]|0;
- $73 = ($69|0)<($72|0);
- if ($73) {
-  $74 = $9;
-  $75 = ((($74)) + 12|0);
-  $76 = HEAP32[$75>>2]|0;
-  $77 = $10;
-  $78 = (($76) - ($77))|0;
-  $79 = $11;
-  $80 = (($79) + ($78))|0;
-  $11 = $80;
- }
- $81 = $11;
- $82 = $9;
- $83 = ((($82)) + 16|0);
- $84 = HEAP32[$83>>2]|0;
- $85 = ($81|0)>($84|0);
- if ($85) {
-  $86 = $6;
-  $87 = $9;
-  $88 = $11;
-  _ary_expand_capa($86,$87,$88);
- }
- $89 = $7;
- $90 = $9;
- $91 = ((($90)) + 12|0);
- $92 = HEAP32[$91>>2]|0;
- $93 = ($89|0)>($92|0);
- if ($93) {
-  $94 = $9;
-  $95 = ((($94)) + 20|0);
-  $96 = HEAP32[$95>>2]|0;
-  $97 = $9;
-  $98 = ((($97)) + 12|0);
-  $99 = HEAP32[$98>>2]|0;
-  $100 = (($96) + ($99<<3)|0);
-  $101 = $7;
-  $102 = $9;
-  $103 = ((($102)) + 12|0);
-  $104 = HEAP32[$103>>2]|0;
-  $105 = (($101) - ($104))|0;
-  _ary_fill_with_nil($100,$105);
- } else {
-  $106 = $7;
-  $107 = $9;
-  $108 = ((($107)) + 12|0);
-  $109 = HEAP32[$108>>2]|0;
-  $110 = ($106|0)<($109|0);
-  if ($110) {
-   $111 = $9;
-   $112 = ((($111)) + 20|0);
-   $113 = HEAP32[$112>>2]|0;
-   $114 = $7;
-   $115 = (($113) + ($114<<3)|0);
-   $116 = $14;
-   $117 = (($115) + ($116<<3)|0);
-   $118 = $9;
-   $119 = ((($118)) + 20|0);
-   $120 = HEAP32[$119>>2]|0;
-   $121 = $10;
-   $122 = (($120) + ($121<<3)|0);
-   $123 = $9;
-   $124 = ((($123)) + 12|0);
-   $125 = HEAP32[$124>>2]|0;
-   $126 = $10;
-   $127 = (($125) - ($126))|0;
-   _value_move_573($117,$122,$127);
-  }
- }
- $13 = 0;
- while(1) {
-  $128 = $13;
-  $129 = $14;
-  $130 = ($128|0)<($129|0);
-  if (!($130)) {
-   break;
-  }
-  $131 = $9;
-  $132 = ((($131)) + 20|0);
-  $133 = HEAP32[$132>>2]|0;
-  $134 = $7;
-  $135 = (($133) + ($134<<3)|0);
-  $136 = $13;
-  $137 = (($135) + ($136<<3)|0);
-  $138 = $12;
-  $139 = $13;
-  $140 = (($138) + ($139<<3)|0);
-  ;HEAP32[$137>>2]=HEAP32[$140>>2]|0;HEAP32[$137+4>>2]=HEAP32[$140+4>>2]|0;
-  $141 = $12;
-  $142 = $13;
-  $143 = (($141) + ($142<<3)|0);
-  $144 = ((($143)) + 4|0);
-  $145 = HEAP32[$144>>2]|0;
-  $146 = ($145>>>0)<(8);
-  if (!($146)) {
-   $147 = $6;
-   $148 = $9;
-   $149 = $12;
-   $150 = $13;
-   $151 = (($149) + ($150<<3)|0);
-   $152 = HEAP32[$151>>2]|0;
-   _mrb_field_write_barrier($147,$148,$152);
-  }
-  $153 = $13;
-  $154 = (($153) + 1)|0;
-  $13 = $154;
- }
- $155 = $11;
- $156 = $9;
- $157 = ((($156)) + 12|0);
- HEAP32[$157>>2] = $155;
- ;HEAP32[$0>>2]=HEAP32[$2>>2]|0;HEAP32[$0+4>>2]=HEAP32[$2+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_ary_splat($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $10 = 0, $11 = 0, $12 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $$byval_copy1 = sp + 16|0;
- $$byval_copy = sp + 8|0;
- $vararg_buffer = sp;
- $3 = $1;
- $4 = ((($2)) + 4|0);
- $5 = HEAP32[$4>>2]|0;
- $6 = ($5|0)==(14);
- if ($6) {
-  ;HEAP32[$0>>2]=HEAP32[$2>>2]|0;HEAP32[$0+4>>2]=HEAP32[$2+4>>2]|0;
-  STACKTOP = sp;return;
- }
- $7 = $3;
- $8 = $3;
- $9 = (_mrb_intern_static($8,64588,4)|0);
- ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
- $10 = (_mrb_respond_to($7,$$byval_copy,$9)|0);
- $11 = ($10<<24>>24)!=(0);
- $12 = $3;
- if ($11) {
-  ;HEAP32[$$byval_copy1>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$2+4>>2]|0;
-  _mrb_funcall($0,$12,$$byval_copy1,64588,0,$vararg_buffer);
-  STACKTOP = sp;return;
- } else {
-  _mrb_ary_new_from_values($0,$12,1,$2);
-  STACKTOP = sp;return;
- }
-}
-function _mrb_ary_clear($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;
- var $3 = 0, $30 = 0, $31 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $1;
- $5 = HEAP32[$2>>2]|0;
- $4 = $5;
- $6 = $4;
- $7 = HEAP32[$6>>2]|0;
- $8 = $7 >>> 11;
- $9 = $8 & 256;
- $10 = ($9|0)!=(0);
- $11 = $3;
- $12 = $4;
- if ($10) {
-  $13 = ((($12)) + 16|0);
-  $14 = HEAP32[$13>>2]|0;
-  _mrb_ary_decref($11,$14);
-  $15 = $4;
-  $16 = HEAP32[$15>>2]|0;
-  $17 = $16 >>> 11;
-  $18 = $17 & -257;
-  $19 = HEAP32[$15>>2]|0;
-  $20 = $18 & 2097151;
-  $21 = $20 << 11;
-  $22 = $19 & 2047;
-  $23 = $22 | $21;
-  HEAP32[$15>>2] = $23;
- } else {
-  $24 = ((($12)) + 20|0);
-  $25 = HEAP32[$24>>2]|0;
-  _mrb_free($11,$25);
- }
- $26 = $4;
- $27 = ((($26)) + 12|0);
- HEAP32[$27>>2] = 0;
- $28 = $4;
- $29 = ((($28)) + 16|0);
- HEAP32[$29>>2] = 0;
- $30 = $4;
- $31 = ((($30)) + 20|0);
- HEAP32[$31>>2] = 0;
- ;HEAP32[$0>>2]=HEAP32[$2>>2]|0;HEAP32[$0+4>>2]=HEAP32[$2+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_ary_entry($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $10 = 0, $11 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $$byval_copy = sp + 8|0;
- $3 = $2;
- $4 = $3;
- $5 = ($4|0)<(0);
- if ($5) {
-  $6 = HEAP32[$1>>2]|0;
-  $7 = ((($6)) + 12|0);
-  $8 = HEAP32[$7>>2]|0;
-  $9 = $3;
-  $10 = (($9) + ($8))|0;
-  $3 = $10;
- }
- $11 = $3;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$1>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$1+4>>2]|0;
- _ary_elt($0,$$byval_copy,$11);
- STACKTOP = sp;return;
-}
-function _ary_elt($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $2;
- $4 = $3;
- $5 = ($4|0)<(0);
- if (!($5)) {
-  $6 = HEAP32[$1>>2]|0;
-  $7 = ((($6)) + 12|0);
-  $8 = HEAP32[$7>>2]|0;
-  $9 = $3;
-  $10 = ($8|0)<=($9|0);
-  if (!($10)) {
-   $11 = HEAP32[$1>>2]|0;
-   $12 = ((($11)) + 20|0);
-   $13 = HEAP32[$12>>2]|0;
-   $14 = $3;
-   $15 = (($13) + ($14<<3)|0);
-   ;HEAP32[$0>>2]=HEAP32[$15>>2]|0;HEAP32[$0+4>>2]=HEAP32[$15+4>>2]|0;
-   STACKTOP = sp;return;
-  }
- }
- _mrb_nil_value_562($0);
- STACKTOP = sp;return;
-}
-function _mrb_ary_join($0,$1,$2,$3) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $$byval_copy2 = 0, $$byval_copy3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);
- $$byval_copy3 = sp + 48|0;
- $$byval_copy2 = sp + 40|0;
- $$byval_copy1 = sp + 32|0;
- $$byval_copy = sp + 24|0;
- $5 = sp + 8|0;
- $6 = sp;
- $4 = $1;
- $7 = $4;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$3>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$3+4>>2]|0;
- _mrb_obj_as_string($5,$7,$$byval_copy);
- ;HEAP32[$3>>2]=HEAP32[$5>>2]|0;HEAP32[$3+4>>2]=HEAP32[$5+4>>2]|0;
- $8 = $4;
- $9 = $4;
- _mrb_ary_new($6,$9);
- ;HEAP32[$$byval_copy1>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$2+4>>2]|0;
- ;HEAP32[$$byval_copy2>>2]=HEAP32[$3>>2]|0;HEAP32[$$byval_copy2+4>>2]=HEAP32[$3+4>>2]|0;
- ;HEAP32[$$byval_copy3>>2]=HEAP32[$6>>2]|0;HEAP32[$$byval_copy3+4>>2]=HEAP32[$6+4>>2]|0;
- _join_ary($0,$8,$$byval_copy1,$$byval_copy2,$$byval_copy3);
- STACKTOP = sp;return;
-}
-function _join_ary($0,$1,$2,$3,$4) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- $4 = $4|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $$byval_copy10 = 0, $$byval_copy11 = 0, $$byval_copy12 = 0, $$byval_copy13 = 0, $$byval_copy14 = 0, $$byval_copy2 = 0, $$byval_copy3 = 0, $$byval_copy4 = 0, $$byval_copy5 = 0, $$byval_copy6 = 0, $$byval_copy7 = 0, $$byval_copy8 = 0, $$byval_copy9 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0;
- var $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0;
- var $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0;
- var $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0;
- var $72 = 0, $73 = 0, $74 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 224|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(224|0);
- $$byval_copy14 = sp + 208|0;
- $$byval_copy13 = sp + 200|0;
- $$byval_copy12 = sp + 192|0;
- $$byval_copy11 = sp + 184|0;
- $$byval_copy10 = sp + 176|0;
- $$byval_copy9 = sp + 168|0;
- $$byval_copy8 = sp + 160|0;
- $$byval_copy7 = sp + 152|0;
- $$byval_copy6 = sp + 144|0;
- $$byval_copy5 = sp + 136|0;
- $$byval_copy4 = sp + 128|0;
- $$byval_copy3 = sp + 120|0;
- $$byval_copy2 = sp + 112|0;
- $$byval_copy1 = sp + 104|0;
- $$byval_copy = sp + 96|0;
- $7 = sp + 80|0;
- $8 = sp + 72|0;
- $9 = sp + 64|0;
- $10 = sp + 56|0;
- $11 = sp + 48|0;
- $12 = sp + 40|0;
- $13 = sp + 32|0;
- $14 = sp + 24|0;
- $15 = sp + 16|0;
- $16 = sp + 8|0;
- $17 = sp;
- $5 = $1;
- $6 = 0;
- while(1) {
-  $18 = $6;
-  $19 = HEAP32[$4>>2]|0;
-  $20 = ((($19)) + 12|0);
-  $21 = HEAP32[$20>>2]|0;
-  $22 = ($18|0)<($21|0);
-  $23 = $5;
-  if (!($22)) {
-   break;
-  }
-  $24 = HEAP32[$4>>2]|0;
-  $25 = ((($24)) + 20|0);
-  $26 = HEAP32[$25>>2]|0;
-  $27 = $6;
-  $28 = (($26) + ($27<<3)|0);
-  ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
-  ;HEAP32[$$byval_copy1>>2]=HEAP32[$28>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$28+4>>2]|0;
-  $29 = (_mrb_obj_equal($23,$$byval_copy,$$byval_copy1)|0);
-  $30 = ($29<<24>>24)!=(0);
-  if ($30) {
-   label = 4;
-   break;
-  }
-  $34 = $6;
-  $35 = (($34) + 1)|0;
-  $6 = $35;
- }
- if ((label|0) == 4) {
-  $31 = $5;
-  $32 = $5;
-  $33 = (_mrb_class_get($32,69160)|0);
-  _mrb_raise($31,$33,64593);
-  // unreachable;
- }
- ;HEAP32[$$byval_copy2>>2]=HEAP32[$4>>2]|0;HEAP32[$$byval_copy2+4>>2]=HEAP32[$4+4>>2]|0;
- ;HEAP32[$$byval_copy3>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy3+4>>2]=HEAP32[$2+4>>2]|0;
- _mrb_ary_push($23,$$byval_copy2,$$byval_copy3);
- $36 = $5;
- _mrb_str_buf_new($10,$36,64);
- ;HEAP32[$7>>2]=HEAP32[$10>>2]|0;HEAP32[$7+4>>2]=HEAP32[$10+4>>2]|0;
- $6 = 0;
- while(1) {
-  $37 = $6;
-  $38 = HEAP32[$2>>2]|0;
-  $39 = ((($38)) + 12|0);
-  $40 = HEAP32[$39>>2]|0;
-  $41 = ($37|0)<($40|0);
-  if (!($41)) {
-   break;
-  }
-  $42 = $6;
-  $43 = ($42|0)>(0);
-  do {
-   if ($43) {
-    $44 = ((($3)) + 4|0);
-    $45 = HEAP32[$44>>2]|0;
-    $46 = ($45|0)==(0);
-    if ($46) {
-     $47 = HEAP32[$3>>2]|0;
-     $48 = ($47|0)!=(0);
-     if (!($48)) {
-      break;
-     }
-    }
-    $49 = $5;
-    ;HEAP32[$$byval_copy4>>2]=HEAP32[$7>>2]|0;HEAP32[$$byval_copy4+4>>2]=HEAP32[$7+4>>2]|0;
-    ;HEAP32[$$byval_copy5>>2]=HEAP32[$3>>2]|0;HEAP32[$$byval_copy5+4>>2]=HEAP32[$3+4>>2]|0;
-    _mrb_str_cat_str($11,$49,$$byval_copy4,$$byval_copy5);
-   }
-  } while(0);
-  $50 = HEAP32[$2>>2]|0;
-  $51 = ((($50)) + 20|0);
-  $52 = HEAP32[$51>>2]|0;
-  $53 = $6;
-  $54 = (($52) + ($53<<3)|0);
-  ;HEAP32[$8>>2]=HEAP32[$54>>2]|0;HEAP32[$8+4>>2]=HEAP32[$54+4>>2]|0;
-  $55 = ((($8)) + 4|0);
-  $56 = HEAP32[$55>>2]|0;
-  L17: do {
-   switch ($56|0) {
-   case 14:  {
-    label = 13;
-    break;
-   }
-   case 16:  {
-    break;
-   }
-   default: {
-    $61 = $5;
-    ;HEAP32[$$byval_copy11>>2]=HEAP32[$8>>2]|0;HEAP32[$$byval_copy11+4>>2]=HEAP32[$8+4>>2]|0;
-    _mrb_check_string_type($14,$61,$$byval_copy11);
-    ;HEAP32[$9>>2]=HEAP32[$14>>2]|0;HEAP32[$9+4>>2]=HEAP32[$14+4>>2]|0;
-    $62 = ((($9)) + 4|0);
-    $63 = HEAP32[$62>>2]|0;
-    $64 = ($63|0)==(0);
-    if ($64) {
-     $65 = HEAP32[$9>>2]|0;
-     $66 = ($65|0)!=(0);
-     if (!($66)) {
-      $67 = $5;
-      ;HEAP32[$$byval_copy12>>2]=HEAP32[$8>>2]|0;HEAP32[$$byval_copy12+4>>2]=HEAP32[$8+4>>2]|0;
-      _mrb_check_convert_type($15,$67,$$byval_copy12,14,65311,65317);
-      ;HEAP32[$9>>2]=HEAP32[$15>>2]|0;HEAP32[$9+4>>2]=HEAP32[$15+4>>2]|0;
-      $68 = ((($9)) + 4|0);
-      $69 = HEAP32[$68>>2]|0;
-      $70 = ($69|0)==(0);
-      if ($70) {
-       $71 = HEAP32[$9>>2]|0;
-       $72 = ($71|0)!=(0);
-       if (!($72)) {
-        $73 = $5;
-        ;HEAP32[$$byval_copy13>>2]=HEAP32[$8>>2]|0;HEAP32[$$byval_copy13+4>>2]=HEAP32[$8+4>>2]|0;
-        _mrb_obj_as_string($16,$73,$$byval_copy13);
-        ;HEAP32[$8>>2]=HEAP32[$16>>2]|0;HEAP32[$8+4>>2]=HEAP32[$16+4>>2]|0;
-        break L17;
-       }
-      }
-      ;HEAP32[$8>>2]=HEAP32[$9>>2]|0;HEAP32[$8+4>>2]=HEAP32[$9+4>>2]|0;
-      label = 13;
-      break L17;
-     }
-    }
-    ;HEAP32[$8>>2]=HEAP32[$9>>2]|0;HEAP32[$8+4>>2]=HEAP32[$9+4>>2]|0;
-   }
-   }
-  } while(0);
-  if ((label|0) == 13) {
-   label = 0;
-   $57 = $5;
-   ;HEAP32[$$byval_copy6>>2]=HEAP32[$8>>2]|0;HEAP32[$$byval_copy6+4>>2]=HEAP32[$8+4>>2]|0;
-   ;HEAP32[$$byval_copy7>>2]=HEAP32[$3>>2]|0;HEAP32[$$byval_copy7+4>>2]=HEAP32[$3+4>>2]|0;
-   ;HEAP32[$$byval_copy8>>2]=HEAP32[$4>>2]|0;HEAP32[$$byval_copy8+4>>2]=HEAP32[$4+4>>2]|0;
-   _join_ary($12,$57,$$byval_copy6,$$byval_copy7,$$byval_copy8);
-   ;HEAP32[$8>>2]=HEAP32[$12>>2]|0;HEAP32[$8+4>>2]=HEAP32[$12+4>>2]|0;
-  }
-  $58 = $5;
-  ;HEAP32[$$byval_copy9>>2]=HEAP32[$7>>2]|0;HEAP32[$$byval_copy9+4>>2]=HEAP32[$7+4>>2]|0;
-  ;HEAP32[$$byval_copy10>>2]=HEAP32[$8>>2]|0;HEAP32[$$byval_copy10+4>>2]=HEAP32[$8+4>>2]|0;
-  _mrb_str_cat_str($13,$58,$$byval_copy9,$$byval_copy10);
-  $59 = $6;
-  $60 = (($59) + 1)|0;
-  $6 = $60;
- }
- $74 = $5;
- ;HEAP32[$$byval_copy14>>2]=HEAP32[$4>>2]|0;HEAP32[$$byval_copy14+4>>2]=HEAP32[$4+4>>2]|0;
- _mrb_ary_pop($17,$74,$$byval_copy14);
- ;HEAP32[$0>>2]=HEAP32[$7>>2]|0;HEAP32[$0+4>>2]=HEAP32[$7+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_init_array($0) {
- $0 = $0|0;
- var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;
- var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0;
- var $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0;
- var $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $1 = $0;
- $3 = $1;
- $4 = $1;
- $5 = ((($4)) + 32|0);
- $6 = HEAP32[$5>>2]|0;
- $7 = (_mrb_define_class($3,65311,$6)|0);
- $2 = $7;
- $8 = $1;
- $9 = ((($8)) + 52|0);
- HEAP32[$9>>2] = $7;
- $10 = $2;
- $11 = HEAP32[$10>>2]|0;
- $12 = $11 >>> 11;
- $13 = $12 & -256;
- $14 = $13 | 14;
- $15 = $2;
- $16 = HEAP32[$15>>2]|0;
- $17 = $14 & 2097151;
- $18 = $17 << 11;
- $19 = $16 & 2047;
- $20 = $19 | $18;
- HEAP32[$15>>2] = $20;
- $21 = $1;
- $22 = $2;
- _mrb_define_class_method($21,$22,69083,208,4096);
- $23 = $1;
- $24 = $2;
- _mrb_define_method($23,$24,64614,209,262144);
- $25 = $1;
- $26 = $2;
- _mrb_define_method($25,$26,68856,210,262144);
- $27 = $1;
- $28 = $2;
- _mrb_define_method($27,$28,64616,211,262144);
- $29 = $1;
- $30 = $2;
- _mrb_define_method($29,$30,69083,212,4096);
- $31 = $1;
- $32 = $2;
- _mrb_define_method($31,$32,64619,213,4096);
- $33 = $1;
- $34 = $2;
- _mrb_define_method($33,$34,64623,214,0);
- $35 = $1;
- $36 = $2;
- _mrb_define_method($35,$36,64629,215,262144);
- $37 = $1;
- $38 = $2;
- _mrb_define_method($37,$38,64636,216,262144);
- $39 = $1;
- $40 = $2;
- _mrb_define_method($39,$40,64646,217,0);
- $41 = $1;
- $42 = $2;
- _mrb_define_method($41,$42,69237,218,8192);
- $43 = $1;
- $44 = $2;
- _mrb_define_method($43,$44,64653,219,262144);
- $45 = $1;
- $46 = $2;
- _mrb_define_method($45,$46,69294,220,262144);
- $47 = $1;
- $48 = $2;
- _mrb_define_method($47,$48,64659,221,4096);
- $49 = $1;
- $50 = $2;
- _mrb_define_method($49,$50,69263,222,4096);
- $51 = $1;
- $52 = $2;
- _mrb_define_method($51,$52,64664,223,0);
- $53 = $1;
- $54 = $2;
- _mrb_define_method($53,$54,64671,224,0);
- $55 = $1;
- $56 = $2;
- _mrb_define_method($55,$56,64675,211,4096);
- $57 = $1;
- $58 = $2;
- _mrb_define_method($57,$58,64680,220,262144);
- $59 = $1;
- $60 = $2;
- _mrb_define_method($59,$60,64688,225,0);
- $61 = $1;
- $62 = $2;
- _mrb_define_method($61,$62,64696,226,0);
- $63 = $1;
- $64 = $2;
- _mrb_define_method($63,$64,64705,227,262144);
- $65 = $1;
- $66 = $2;
- _mrb_define_method($65,$66,64712,228,0);
- $67 = $1;
- $68 = $2;
- _mrb_define_method($67,$68,64718,223,0);
- $69 = $1;
- $70 = $2;
- _mrb_define_method($69,$70,64723,212,4096);
- $71 = $1;
- $72 = $2;
- _mrb_define_method($71,$72,64729,229,4096);
- $73 = $1;
- $74 = $2;
- _mrb_define_method($73,$74,64737,230,262144);
- $75 = $1;
- $76 = $2;
- _mrb_define_method($75,$76,64746,231,262144);
- $77 = $1;
- $78 = $2;
- _mrb_define_method($77,$78,64756,219,262144);
- STACKTOP = sp;return;
-}
-function _mrb_ary_s_create($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, $vararg_ptr1 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $vararg_buffer = sp;
- $4 = sp + 12|0;
- $5 = sp + 8|0;
- $3 = $1;
- $6 = $3;
- HEAP32[$vararg_buffer>>2] = $4;
- $vararg_ptr1 = ((($vararg_buffer)) + 4|0);
- HEAP32[$vararg_ptr1>>2] = $5;
- (_mrb_get_args($6,68856,$vararg_buffer)|0);
- $7 = $3;
- $8 = HEAP32[$5>>2]|0;
- $9 = HEAP32[$4>>2]|0;
- _mrb_ary_new_from_values($0,$7,$8,$9);
- STACKTOP = sp;return;
-}
-function _mrb_ary_plus($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;
- var $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0;
- var $48 = 0, $49 = 0, $5 = 0, $50 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, $vararg_ptr1 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $vararg_buffer = sp;
- $6 = sp + 12|0;
- $7 = sp + 8|0;
- $3 = $1;
- $8 = HEAP32[$2>>2]|0;
- $4 = $8;
- $9 = $3;
- HEAP32[$vararg_buffer>>2] = $6;
- $vararg_ptr1 = ((($vararg_buffer)) + 4|0);
- HEAP32[$vararg_ptr1>>2] = $7;
- (_mrb_get_args($9,64799,$vararg_buffer)|0);
- $10 = HEAP32[$7>>2]|0;
- $11 = (536870911 - ($10))|0;
- $12 = $4;
- $13 = ((($12)) + 12|0);
- $14 = HEAP32[$13>>2]|0;
- $15 = ($11|0)<($14|0);
- $16 = $3;
- if ($15) {
-  $17 = $3;
-  $18 = (_mrb_class_get($17,69160)|0);
-  _mrb_raise($16,$18,64504);
-  // unreachable;
- } else {
-  $19 = $4;
-  $20 = ((($19)) + 12|0);
-  $21 = HEAP32[$20>>2]|0;
-  $22 = HEAP32[$7>>2]|0;
-  $23 = (($21) + ($22))|0;
-  $24 = (_ary_new_capa($16,$23)|0);
-  $5 = $24;
-  $25 = $5;
-  $26 = ((($25)) + 20|0);
-  $27 = HEAP32[$26>>2]|0;
-  $28 = $4;
-  $29 = ((($28)) + 20|0);
-  $30 = HEAP32[$29>>2]|0;
-  $31 = $4;
-  $32 = ((($31)) + 12|0);
-  $33 = HEAP32[$32>>2]|0;
-  _array_copy($27,$30,$33);
-  $34 = $5;
-  $35 = ((($34)) + 20|0);
-  $36 = HEAP32[$35>>2]|0;
-  $37 = $4;
-  $38 = ((($37)) + 12|0);
-  $39 = HEAP32[$38>>2]|0;
-  $40 = (($36) + ($39<<3)|0);
-  $41 = HEAP32[$6>>2]|0;
-  $42 = HEAP32[$7>>2]|0;
-  _array_copy($40,$41,$42);
-  $43 = $4;
-  $44 = ((($43)) + 12|0);
-  $45 = HEAP32[$44>>2]|0;
-  $46 = HEAP32[$7>>2]|0;
-  $47 = (($45) + ($46))|0;
-  $48 = $5;
-  $49 = ((($48)) + 12|0);
-  HEAP32[$49>>2] = $47;
-  $50 = $5;
-  _mrb_obj_value_549($0,$50);
-  STACKTOP = sp;return;
- }
-}
-function _mrb_ary_times($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;
- var $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0;
- var $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $vararg_buffer = sp;
- $7 = sp + 4|0;
- $3 = $1;
- $8 = HEAP32[$2>>2]|0;
- $4 = $8;
- $9 = $3;
- HEAP32[$vararg_buffer>>2] = $7;
- (_mrb_get_args($9,64797,$vararg_buffer)|0);
- $10 = HEAP32[$7>>2]|0;
- $11 = ($10|0)<(0);
- if ($11) {
-  $12 = $3;
-  $13 = $3;
-  $14 = (_mrb_class_get($13,69160)|0);
-  _mrb_raise($12,$14,64813);
-  // unreachable;
- }
- $15 = HEAP32[$7>>2]|0;
- $16 = ($15|0)==(0);
- if ($16) {
-  $17 = $3;
-  _mrb_ary_new($0,$17);
-  STACKTOP = sp;return;
- }
- $18 = HEAP32[$7>>2]|0;
- $19 = (536870911 / ($18|0))&-1;
- $20 = $4;
- $21 = ((($20)) + 12|0);
- $22 = HEAP32[$21>>2]|0;
- $23 = ($19|0)<($22|0);
- $24 = $3;
- if ($23) {
-  $25 = $3;
-  $26 = (_mrb_class_get($25,69160)|0);
-  _mrb_raise($24,$26,64504);
-  // unreachable;
- }
- $27 = $4;
- $28 = ((($27)) + 12|0);
- $29 = HEAP32[$28>>2]|0;
- $30 = HEAP32[$7>>2]|0;
- $31 = Math_imul($29, $30)|0;
- $32 = (_ary_new_capa($24,$31)|0);
- $5 = $32;
- $33 = $5;
- $34 = ((($33)) + 20|0);
- $35 = HEAP32[$34>>2]|0;
- $6 = $35;
- while(1) {
-  $36 = HEAP32[$7>>2]|0;
-  $37 = (($36) + -1)|0;
-  HEAP32[$7>>2] = $37;
-  $38 = ($36|0)!=(0);
-  if (!($38)) {
-   break;
-  }
-  $39 = $6;
-  $40 = $4;
-  $41 = ((($40)) + 20|0);
-  $42 = HEAP32[$41>>2]|0;
-  $43 = $4;
-  $44 = ((($43)) + 12|0);
-  $45 = HEAP32[$44>>2]|0;
-  _array_copy($39,$42,$45);
-  $46 = $4;
-  $47 = ((($46)) + 12|0);
-  $48 = HEAP32[$47>>2]|0;
-  $49 = $6;
-  $50 = (($49) + ($48<<3)|0);
-  $6 = $50;
-  $51 = $4;
-  $52 = ((($51)) + 12|0);
-  $53 = HEAP32[$52>>2]|0;
-  $54 = $5;
-  $55 = ((($54)) + 12|0);
-  $56 = HEAP32[$55>>2]|0;
-  $57 = (($56) + ($53))|0;
-  HEAP32[$55>>2] = $57;
- }
- $58 = $5;
- _mrb_obj_value_549($0,$58);
- STACKTOP = sp;return;
-}
-function _mrb_ary_push_m($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $$byval_copy2 = 0, $10 = 0, $11 = 0, $12 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, $vararg_ptr1 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);
- $$byval_copy2 = sp + 32|0;
- $$byval_copy = sp + 24|0;
- $vararg_buffer = sp;
- $4 = sp + 12|0;
- $5 = sp + 8|0;
- $3 = $1;
- $6 = $3;
- HEAP32[$vararg_buffer>>2] = $4;
- $vararg_ptr1 = ((($vararg_buffer)) + 4|0);
- HEAP32[$vararg_ptr1>>2] = $5;
- (_mrb_get_args($6,68856,$vararg_buffer)|0);
- while(1) {
-  $7 = HEAP32[$5>>2]|0;
-  $8 = (($7) + -1)|0;
-  HEAP32[$5>>2] = $8;
-  $9 = ($7|0)!=(0);
-  if (!($9)) {
-   break;
-  }
-  $10 = $3;
-  $11 = HEAP32[$4>>2]|0;
-  $12 = ((($11)) + 8|0);
-  HEAP32[$4>>2] = $12;
-  ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
-  ;HEAP32[$$byval_copy2>>2]=HEAP32[$11>>2]|0;HEAP32[$$byval_copy2+4>>2]=HEAP32[$11+4>>2]|0;
-  _mrb_ary_push($10,$$byval_copy,$$byval_copy2);
- }
- ;HEAP32[$0>>2]=HEAP32[$2>>2]|0;HEAP32[$0+4>>2]=HEAP32[$2+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_ary_aget($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $$byval_copy2 = 0, $$byval_copy3 = 0, $$byval_copy4 = 0, $$byval_copy5 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0;
- var $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0;
- var $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0;
- var $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, $vararg_ptr1 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 80|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(80|0);
- $$byval_copy5 = sp + 64|0;
- $$byval_copy4 = sp + 56|0;
- $$byval_copy3 = sp + 48|0;
- $$byval_copy2 = sp + 40|0;
- $$byval_copy = sp + 32|0;
- $vararg_buffer = sp;
- $5 = sp + 20|0;
- $6 = sp + 16|0;
- $7 = sp + 8|0;
- $3 = $1;
- $8 = HEAP32[$2>>2]|0;
- $4 = $8;
- $9 = $3;
- HEAP32[$vararg_buffer>>2] = $7;
- $vararg_ptr1 = ((($vararg_buffer)) + 4|0);
- HEAP32[$vararg_ptr1>>2] = $6;
- $10 = (_mrb_get_args($9,64809,$vararg_buffer)|0);
- $11 = ($10|0)==(1);
- if ($11) {
-  $12 = ((($7)) + 4|0);
-  $13 = HEAP32[$12>>2]|0;
-  switch ($13|0) {
-  case 17:  {
-   $14 = $3;
-   $15 = $4;
-   $16 = ((($15)) + 12|0);
-   $17 = HEAP32[$16>>2]|0;
-   ;HEAP32[$$byval_copy>>2]=HEAP32[$7>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$7+4>>2]|0;
-   $18 = (_mrb_range_beg_len($14,$$byval_copy,$5,$6,$17)|0);
-   $19 = ($18<<24>>24)!=(0);
-   if ($19) {
-    $20 = $3;
-    $21 = $4;
-    $22 = HEAP32[$5>>2]|0;
-    $23 = HEAP32[$6>>2]|0;
-    _ary_subseq($0,$20,$21,$22,$23);
-    STACKTOP = sp;return;
-   } else {
-    _mrb_nil_value_562($0);
-    STACKTOP = sp;return;
-   }
-   break;
-  }
-  case 3:  {
-   $24 = $3;
-   $25 = HEAP32[$7>>2]|0;
-   ;HEAP32[$$byval_copy2>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy2+4>>2]=HEAP32[$2+4>>2]|0;
-   _mrb_ary_ref($0,$24,$$byval_copy2,$25);
-   STACKTOP = sp;return;
-   break;
-  }
-  default: {
-   $26 = $3;
-   $27 = $3;
-   ;HEAP32[$$byval_copy3>>2]=HEAP32[$7>>2]|0;HEAP32[$$byval_copy3+4>>2]=HEAP32[$7+4>>2]|0;
-   $28 = (_aget_index($27,$$byval_copy3)|0);
-   ;HEAP32[$$byval_copy4>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy4+4>>2]=HEAP32[$2+4>>2]|0;
-   _mrb_ary_ref($0,$26,$$byval_copy4,$28);
-   STACKTOP = sp;return;
-  }
-  }
- }
- $29 = $3;
- ;HEAP32[$$byval_copy5>>2]=HEAP32[$7>>2]|0;HEAP32[$$byval_copy5+4>>2]=HEAP32[$7+4>>2]|0;
- $30 = (_aget_index($29,$$byval_copy5)|0);
- HEAP32[$5>>2] = $30;
- $31 = HEAP32[$5>>2]|0;
- $32 = ($31|0)<(0);
- if ($32) {
-  $33 = $4;
-  $34 = ((($33)) + 12|0);
-  $35 = HEAP32[$34>>2]|0;
-  $36 = HEAP32[$5>>2]|0;
-  $37 = (($36) + ($35))|0;
-  HEAP32[$5>>2] = $37;
- }
- $38 = HEAP32[$5>>2]|0;
- $39 = ($38|0)<(0);
- if (!($39)) {
-  $40 = $4;
-  $41 = ((($40)) + 12|0);
-  $42 = HEAP32[$41>>2]|0;
-  $43 = HEAP32[$5>>2]|0;
-  $44 = ($42|0)<($43|0);
-  if (!($44)) {
-   $45 = HEAP32[$6>>2]|0;
-   $46 = ($45|0)<(0);
-   if ($46) {
-    _mrb_nil_value_562($0);
-    STACKTOP = sp;return;
-   }
-   $47 = $4;
-   $48 = ((($47)) + 12|0);
-   $49 = HEAP32[$48>>2]|0;
-   $50 = HEAP32[$5>>2]|0;
-   $51 = ($49|0)==($50|0);
-   if ($51) {
-    $52 = $3;
-    _mrb_ary_new($0,$52);
-    STACKTOP = sp;return;
-   }
-   $53 = HEAP32[$6>>2]|0;
-   $54 = $4;
-   $55 = ((($54)) + 12|0);
-   $56 = HEAP32[$55>>2]|0;
-   $57 = HEAP32[$5>>2]|0;
-   $58 = (($56) - ($57))|0;
-   $59 = ($53|0)>($58|0);
-   if ($59) {
-    $60 = $4;
-    $61 = ((($60)) + 12|0);
-    $62 = HEAP32[$61>>2]|0;
-    $63 = HEAP32[$5>>2]|0;
-    $64 = (($62) - ($63))|0;
-    HEAP32[$6>>2] = $64;
-   }
-   $65 = $3;
-   $66 = $4;
-   $67 = HEAP32[$5>>2]|0;
-   $68 = HEAP32[$6>>2]|0;
-   _ary_subseq($0,$65,$66,$67,$68);
-   STACKTOP = sp;return;
-  }
- }
- _mrb_nil_value_562($0);
- STACKTOP = sp;return;
-}
-function _mrb_ary_aset($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $$byval_copy10 = 0, $$byval_copy11 = 0, $$byval_copy12 = 0, $$byval_copy13 = 0, $$byval_copy3 = 0, $$byval_copy4 = 0, $$byval_copy5 = 0, $$byval_copy6 = 0, $$byval_copy7 = 0, $$byval_copy8 = 0, $$byval_copy9 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0;
- var $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $4 = 0, $5 = 0;
- var $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, $vararg_ptr1 = 0, $vararg_ptr2 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 176|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(176|0);
- $$byval_copy13 = sp + 160|0;
- $$byval_copy12 = sp + 152|0;
- $$byval_copy11 = sp + 144|0;
- $$byval_copy10 = sp + 136|0;
- $$byval_copy9 = sp + 128|0;
- $$byval_copy8 = sp + 120|0;
- $$byval_copy7 = sp + 112|0;
- $$byval_copy6 = sp + 104|0;
- $$byval_copy5 = sp + 96|0;
- $$byval_copy4 = sp + 88|0;
- $$byval_copy3 = sp + 80|0;
- $$byval_copy = sp + 72|0;
- $vararg_buffer = sp;
- $4 = sp + 56|0;
- $5 = sp + 48|0;
- $6 = sp + 40|0;
- $7 = sp + 36|0;
- $8 = sp + 32|0;
- $9 = sp + 24|0;
- $10 = sp + 16|0;
- $3 = $1;
- $11 = $3;
- HEAP32[$vararg_buffer>>2] = $4;
- $vararg_ptr1 = ((($vararg_buffer)) + 4|0);
- HEAP32[$vararg_ptr1>>2] = $5;
- $vararg_ptr2 = ((($vararg_buffer)) + 8|0);
- HEAP32[$vararg_ptr2>>2] = $6;
- $12 = (_mrb_get_args($11,64801,$vararg_buffer)|0);
- $13 = ($12|0)==(2);
- if (!($13)) {
-  $30 = $3;
-  $31 = $3;
-  ;HEAP32[$$byval_copy10>>2]=HEAP32[$4>>2]|0;HEAP32[$$byval_copy10+4>>2]=HEAP32[$4+4>>2]|0;
-  $32 = (_aget_index($31,$$byval_copy10)|0);
-  $33 = $3;
-  ;HEAP32[$$byval_copy11>>2]=HEAP32[$5>>2]|0;HEAP32[$$byval_copy11+4>>2]=HEAP32[$5+4>>2]|0;
-  $34 = (_aget_index($33,$$byval_copy11)|0);
-  ;HEAP32[$$byval_copy12>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy12+4>>2]=HEAP32[$2+4>>2]|0;
-  ;HEAP32[$$byval_copy13>>2]=HEAP32[$6>>2]|0;HEAP32[$$byval_copy13+4>>2]=HEAP32[$6+4>>2]|0;
-  _mrb_ary_splice($10,$30,$$byval_copy12,$32,$34,$$byval_copy13);
-  ;HEAP32[$0>>2]=HEAP32[$6>>2]|0;HEAP32[$0+4>>2]=HEAP32[$6+4>>2]|0;
-  STACKTOP = sp;return;
- }
- $14 = ((($4)) + 4|0);
- $15 = HEAP32[$14>>2]|0;
- switch ($15|0) {
- case 17:  {
-  $16 = $3;
-  $17 = HEAP32[$2>>2]|0;
-  $18 = ((($17)) + 12|0);
-  $19 = HEAP32[$18>>2]|0;
-  ;HEAP32[$$byval_copy>>2]=HEAP32[$4>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$4+4>>2]|0;
-  $20 = (_mrb_range_beg_len($16,$$byval_copy,$7,$8,$19)|0);
-  $21 = ($20<<24>>24)!=(0);
-  if ($21) {
-   $22 = $3;
-   $23 = HEAP32[$7>>2]|0;
-   $24 = HEAP32[$8>>2]|0;
-   ;HEAP32[$$byval_copy3>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy3+4>>2]=HEAP32[$2+4>>2]|0;
-   ;HEAP32[$$byval_copy4>>2]=HEAP32[$5>>2]|0;HEAP32[$$byval_copy4+4>>2]=HEAP32[$5+4>>2]|0;
-   _mrb_ary_splice($9,$22,$$byval_copy3,$23,$24,$$byval_copy4);
-  }
-  break;
- }
- case 3:  {
-  $25 = $3;
-  $26 = HEAP32[$4>>2]|0;
-  ;HEAP32[$$byval_copy5>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy5+4>>2]=HEAP32[$2+4>>2]|0;
-  ;HEAP32[$$byval_copy6>>2]=HEAP32[$5>>2]|0;HEAP32[$$byval_copy6+4>>2]=HEAP32[$5+4>>2]|0;
-  _mrb_ary_set($25,$$byval_copy5,$26,$$byval_copy6);
-  break;
- }
- default: {
-  $27 = $3;
-  $28 = $3;
-  ;HEAP32[$$byval_copy7>>2]=HEAP32[$4>>2]|0;HEAP32[$$byval_copy7+4>>2]=HEAP32[$4+4>>2]|0;
-  $29 = (_aget_index($28,$$byval_copy7)|0);
-  ;HEAP32[$$byval_copy8>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy8+4>>2]=HEAP32[$2+4>>2]|0;
-  ;HEAP32[$$byval_copy9>>2]=HEAP32[$5>>2]|0;HEAP32[$$byval_copy9+4>>2]=HEAP32[$5+4>>2]|0;
-  _mrb_ary_set($27,$$byval_copy8,$29,$$byval_copy9);
- }
- }
- ;HEAP32[$0>>2]=HEAP32[$5>>2]|0;HEAP32[$0+4>>2]=HEAP32[$5+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_ary_concat_m($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, $vararg_ptr1 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $vararg_buffer = sp;
- $4 = sp + 12|0;
- $5 = sp + 8|0;
- $3 = $1;
- $6 = $3;
- HEAP32[$vararg_buffer>>2] = $4;
- $vararg_ptr1 = ((($vararg_buffer)) + 4|0);
- HEAP32[$vararg_ptr1>>2] = $5;
- (_mrb_get_args($6,64799,$vararg_buffer)|0);
- $7 = $3;
- $8 = HEAP32[$2>>2]|0;
- $9 = HEAP32[$4>>2]|0;
- $10 = HEAP32[$5>>2]|0;
- _ary_concat($7,$8,$9,$10);
- ;HEAP32[$0>>2]=HEAP32[$2>>2]|0;HEAP32[$0+4>>2]=HEAP32[$2+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_ary_delete_at($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;
- var $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0;
- var $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);
- $vararg_buffer = sp;
- $5 = sp + 24|0;
- $6 = sp + 16|0;
- $3 = $1;
- $9 = HEAP32[$2>>2]|0;
- $4 = $9;
- $10 = $3;
- HEAP32[$vararg_buffer>>2] = $5;
- (_mrb_get_args($10,64797,$vararg_buffer)|0);
- $11 = HEAP32[$5>>2]|0;
- $12 = ($11|0)<(0);
- if ($12) {
-  $13 = $4;
-  $14 = ((($13)) + 12|0);
-  $15 = HEAP32[$14>>2]|0;
-  $16 = HEAP32[$5>>2]|0;
-  $17 = (($16) + ($15))|0;
-  HEAP32[$5>>2] = $17;
- }
- $18 = HEAP32[$5>>2]|0;
- $19 = ($18|0)<(0);
- if (!($19)) {
-  $20 = $4;
-  $21 = ((($20)) + 12|0);
-  $22 = HEAP32[$21>>2]|0;
-  $23 = HEAP32[$5>>2]|0;
-  $24 = ($22|0)<=($23|0);
-  if (!($24)) {
-   $25 = $3;
-   $26 = $4;
-   _ary_modify($25,$26);
-   $27 = $4;
-   $28 = ((($27)) + 20|0);
-   $29 = HEAP32[$28>>2]|0;
-   $30 = HEAP32[$5>>2]|0;
-   $31 = (($29) + ($30<<3)|0);
-   ;HEAP32[$6>>2]=HEAP32[$31>>2]|0;HEAP32[$6+4>>2]=HEAP32[$31+4>>2]|0;
-   $32 = $4;
-   $33 = ((($32)) + 20|0);
-   $34 = HEAP32[$33>>2]|0;
-   $35 = HEAP32[$5>>2]|0;
-   $36 = (($34) + ($35<<3)|0);
-   $7 = $36;
-   $37 = $4;
-   $38 = ((($37)) + 12|0);
-   $39 = HEAP32[$38>>2]|0;
-   $40 = HEAP32[$5>>2]|0;
-   $41 = (($39) - ($40))|0;
-   $8 = $41;
-   while(1) {
-    $42 = $8;
-    $43 = (($42) + -1)|0;
-    $8 = $43;
-    $44 = ($43|0)!=(0);
-    if (!($44)) {
-     break;
-    }
-    $45 = $7;
-    $46 = $7;
-    $47 = ((($46)) + 8|0);
-    ;HEAP32[$45>>2]=HEAP32[$47>>2]|0;HEAP32[$45+4>>2]=HEAP32[$47+4>>2]|0;
-    $48 = $7;
-    $49 = ((($48)) + 8|0);
-    $7 = $49;
-   }
-   $50 = $4;
-   $51 = ((($50)) + 12|0);
-   $52 = HEAP32[$51>>2]|0;
-   $53 = (($52) + -1)|0;
-   HEAP32[$51>>2] = $53;
-   $54 = $3;
-   $55 = $4;
-   _ary_shrink_capa($54,$55);
-   ;HEAP32[$0>>2]=HEAP32[$6>>2]|0;HEAP32[$0+4>>2]=HEAP32[$6+4>>2]|0;
-   STACKTOP = sp;return;
-  }
- }
- _mrb_nil_value_562($0);
- STACKTOP = sp;return;
-}
-function _mrb_ary_empty_p($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $1;
- $5 = HEAP32[$2>>2]|0;
- $4 = $5;
- $6 = $4;
- $7 = ((($6)) + 12|0);
- $8 = HEAP32[$7>>2]|0;
- $9 = ($8|0)==(0);
- $10 = $9&1;
- $11 = $10&255;
- _mrb_bool_value_624($0,$11);
- STACKTOP = sp;return;
-}
-function _mrb_ary_first($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;
- var $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0;
- var label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $vararg_buffer = sp;
- $5 = sp + 4|0;
- $3 = $1;
- $6 = HEAP32[$2>>2]|0;
- $4 = $6;
- $7 = $3;
- HEAP32[$vararg_buffer>>2] = $5;
- $8 = (_mrb_get_args($7,64768,$vararg_buffer)|0);
- $9 = ($8|0)==(0);
- if ($9) {
-  $10 = $4;
-  $11 = ((($10)) + 12|0);
-  $12 = HEAP32[$11>>2]|0;
-  $13 = ($12|0)>(0);
-  if ($13) {
-   $14 = $4;
-   $15 = ((($14)) + 20|0);
-   $16 = HEAP32[$15>>2]|0;
-   ;HEAP32[$0>>2]=HEAP32[$16>>2]|0;HEAP32[$0+4>>2]=HEAP32[$16+4>>2]|0;
-   STACKTOP = sp;return;
-  } else {
-   _mrb_nil_value_562($0);
-   STACKTOP = sp;return;
-  }
- }
- $17 = HEAP32[$5>>2]|0;
- $18 = ($17|0)<(0);
- if ($18) {
-  $19 = $3;
-  $20 = $3;
-  $21 = (_mrb_class_get($20,69160)|0);
-  _mrb_raise($19,$21,64771);
-  // unreachable;
- }
- $22 = HEAP32[$5>>2]|0;
- $23 = $4;
- $24 = ((($23)) + 12|0);
- $25 = HEAP32[$24>>2]|0;
- $26 = ($22|0)>($25|0);
- if ($26) {
-  $27 = $4;
-  $28 = ((($27)) + 12|0);
-  $29 = HEAP32[$28>>2]|0;
-  HEAP32[$5>>2] = $29;
- }
- $30 = $4;
- $31 = HEAP32[$30>>2]|0;
- $32 = $31 >>> 11;
- $33 = $32 & 256;
- $34 = ($33|0)!=(0);
- $35 = $3;
- if ($34) {
-  $36 = $4;
-  $37 = HEAP32[$5>>2]|0;
-  _ary_subseq($0,$35,$36,0,$37);
-  STACKTOP = sp;return;
- } else {
-  $38 = HEAP32[$5>>2]|0;
-  $39 = $4;
-  $40 = ((($39)) + 20|0);
-  $41 = HEAP32[$40>>2]|0;
-  _mrb_ary_new_from_values($0,$35,$38,$41);
-  STACKTOP = sp;return;
- }
-}
-function _mrb_ary_index_m($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0;
- var $9 = 0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);
- $$byval_copy1 = sp + 32|0;
- $$byval_copy = sp + 24|0;
- $vararg_buffer = sp;
- $4 = sp + 8|0;
- $3 = $1;
- $6 = $3;
- HEAP32[$vararg_buffer>>2] = $4;
- (_mrb_get_args($6,69199,$vararg_buffer)|0);
- $5 = 0;
- while(1) {
-  $7 = $5;
-  $8 = HEAP32[$2>>2]|0;
-  $9 = ((($8)) + 12|0);
-  $10 = HEAP32[$9>>2]|0;
-  $11 = ($7|0)<($10|0);
-  if (!($11)) {
-   label = 6;
-   break;
-  }
-  $12 = $3;
-  $13 = HEAP32[$2>>2]|0;
-  $14 = ((($13)) + 20|0);
-  $15 = HEAP32[$14>>2]|0;
-  $16 = $5;
-  $17 = (($15) + ($16<<3)|0);
-  ;HEAP32[$$byval_copy>>2]=HEAP32[$17>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$17+4>>2]|0;
-  ;HEAP32[$$byval_copy1>>2]=HEAP32[$4>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$4+4>>2]|0;
-  $18 = (_mrb_equal($12,$$byval_copy,$$byval_copy1)|0);
-  $19 = ($18<<24>>24)!=(0);
-  $20 = $5;
-  if ($19) {
-   label = 4;
-   break;
-  }
-  $21 = (($20) + 1)|0;
-  $5 = $21;
- }
- if ((label|0) == 4) {
-  _mrb_fixnum_value_579($0,$20);
-  STACKTOP = sp;return;
- }
- else if ((label|0) == 6) {
-  _mrb_nil_value_562($0);
-  STACKTOP = sp;return;
- }
-}
-function _mrb_ary_replace_m($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);
- $$byval_copy1 = sp + 32|0;
- $$byval_copy = sp + 24|0;
- $vararg_buffer = sp;
- $4 = sp + 8|0;
- $3 = $1;
- $5 = $3;
- HEAP32[$vararg_buffer>>2] = $4;
- (_mrb_get_args($5,64795,$vararg_buffer)|0);
- $6 = $3;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
- ;HEAP32[$$byval_copy1>>2]=HEAP32[$4>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$4+4>>2]|0;
- _mrb_ary_replace($6,$$byval_copy,$$byval_copy1);
- ;HEAP32[$0>>2]=HEAP32[$2>>2]|0;HEAP32[$0+4>>2]=HEAP32[$2+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_ary_join_m($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);
- $$byval_copy1 = sp + 32|0;
- $$byval_copy = sp + 24|0;
- $vararg_buffer = sp;
- $4 = sp + 8|0;
- $3 = $1;
- _mrb_nil_value_562($4);
- $5 = $3;
- HEAP32[$vararg_buffer>>2] = $4;
- (_mrb_get_args($5,64791,$vararg_buffer)|0);
- $6 = $3;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
- ;HEAP32[$$byval_copy1>>2]=HEAP32[$4>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$4+4>>2]|0;
- _mrb_ary_join($0,$6,$$byval_copy,$$byval_copy1);
- STACKTOP = sp;return;
-}
-function _mrb_ary_last($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;
- var $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0;
- var $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $7 = 0, $8 = 0, $9 = 0, $or$cond = 0, $vararg_buffer = 0;
- var label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $vararg_buffer = sp;
- $5 = sp + 4|0;
- $3 = $1;
- $6 = HEAP32[$2>>2]|0;
- $4 = $6;
- $7 = $3;
- HEAP32[$vararg_buffer>>2] = $5;
- $8 = (_mrb_get_args($7,64768,$vararg_buffer)|0);
- $9 = ($8|0)==(0);
- if ($9) {
-  $10 = $4;
-  $11 = ((($10)) + 12|0);
-  $12 = HEAP32[$11>>2]|0;
-  $13 = ($12|0)>(0);
-  if ($13) {
-   $14 = $4;
-   $15 = ((($14)) + 20|0);
-   $16 = HEAP32[$15>>2]|0;
-   $17 = $4;
-   $18 = ((($17)) + 12|0);
-   $19 = HEAP32[$18>>2]|0;
-   $20 = (($19) - 1)|0;
-   $21 = (($16) + ($20<<3)|0);
-   ;HEAP32[$0>>2]=HEAP32[$21>>2]|0;HEAP32[$0+4>>2]=HEAP32[$21+4>>2]|0;
-   STACKTOP = sp;return;
-  } else {
-   _mrb_nil_value_562($0);
-   STACKTOP = sp;return;
-  }
- }
- $22 = HEAP32[$5>>2]|0;
- $23 = ($22|0)<(0);
- if ($23) {
-  $24 = $3;
-  $25 = $3;
-  $26 = (_mrb_class_get($25,69160)|0);
-  _mrb_raise($24,$26,64771);
-  // unreachable;
- }
- $27 = HEAP32[$5>>2]|0;
- $28 = $4;
- $29 = ((($28)) + 12|0);
- $30 = HEAP32[$29>>2]|0;
- $31 = ($27|0)>($30|0);
- if ($31) {
-  $32 = $4;
-  $33 = ((($32)) + 12|0);
-  $34 = HEAP32[$33>>2]|0;
-  HEAP32[$5>>2] = $34;
- }
- $35 = $4;
- $36 = HEAP32[$35>>2]|0;
- $37 = $36 >>> 11;
- $38 = $37 & 256;
- $39 = ($38|0)!=(0);
- $40 = HEAP32[$5>>2]|0;
- $41 = ($40|0)>(4);
- $or$cond = $39 | $41;
- $42 = $3;
- if ($or$cond) {
-  $43 = $4;
-  $44 = $4;
-  $45 = ((($44)) + 12|0);
-  $46 = HEAP32[$45>>2]|0;
-  $47 = HEAP32[$5>>2]|0;
-  $48 = (($46) - ($47))|0;
-  $49 = HEAP32[$5>>2]|0;
-  _ary_subseq($0,$42,$43,$48,$49);
-  STACKTOP = sp;return;
- } else {
-  $50 = HEAP32[$5>>2]|0;
-  $51 = $4;
-  $52 = ((($51)) + 20|0);
-  $53 = HEAP32[$52>>2]|0;
-  $54 = $4;
-  $55 = ((($54)) + 12|0);
-  $56 = HEAP32[$55>>2]|0;
-  $57 = (($53) + ($56<<3)|0);
-  $58 = HEAP32[$5>>2]|0;
-  $59 = (0 - ($58))|0;
-  $60 = (($57) + ($59<<3)|0);
-  _mrb_ary_new_from_values($0,$42,$50,$60);
-  STACKTOP = sp;return;
- }
-}
-function _mrb_ary_size($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $1;
- $5 = HEAP32[$2>>2]|0;
- $4 = $5;
- $6 = $4;
- $7 = ((($6)) + 12|0);
- $8 = HEAP32[$7>>2]|0;
- _mrb_fixnum_value_579($0,$8);
- STACKTOP = sp;return;
-}
-function _mrb_ary_reverse($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;
- var $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0;
- var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $3 = $1;
- $9 = HEAP32[$2>>2]|0;
- $4 = $9;
- $10 = $3;
- $11 = $4;
- $12 = ((($11)) + 12|0);
- $13 = HEAP32[$12>>2]|0;
- $14 = (_ary_new_capa($10,$13)|0);
- $5 = $14;
- $15 = $4;
- $16 = ((($15)) + 12|0);
- $17 = HEAP32[$16>>2]|0;
- $18 = ($17|0)>(0);
- if (!($18)) {
-  $47 = $5;
-  _mrb_obj_value_549($0,$47);
-  STACKTOP = sp;return;
- }
- $19 = $4;
- $20 = ((($19)) + 20|0);
- $21 = HEAP32[$20>>2]|0;
- $6 = $21;
- $22 = $6;
- $23 = $4;
- $24 = ((($23)) + 12|0);
- $25 = HEAP32[$24>>2]|0;
- $26 = (($22) + ($25<<3)|0);
- $8 = $26;
- $27 = $5;
- $28 = ((($27)) + 20|0);
- $29 = HEAP32[$28>>2]|0;
- $30 = $4;
- $31 = ((($30)) + 12|0);
- $32 = HEAP32[$31>>2]|0;
- $33 = (($29) + ($32<<3)|0);
- $34 = ((($33)) + -8|0);
- $7 = $34;
- while(1) {
-  $35 = $6;
-  $36 = $8;
-  $37 = ($35>>>0)<($36>>>0);
-  if (!($37)) {
-   break;
-  }
-  $38 = $7;
-  $39 = ((($38)) + -8|0);
-  $7 = $39;
-  $40 = $6;
-  $41 = ((($40)) + 8|0);
-  $6 = $41;
-  ;HEAP32[$38>>2]=HEAP32[$40>>2]|0;HEAP32[$38+4>>2]=HEAP32[$40+4>>2]|0;
- }
- $42 = $4;
- $43 = ((($42)) + 12|0);
- $44 = HEAP32[$43>>2]|0;
- $45 = $5;
- $46 = ((($45)) + 12|0);
- HEAP32[$46>>2] = $44;
- $47 = $5;
- _mrb_obj_value_549($0,$47);
- STACKTOP = sp;return;
-}
-function _mrb_ary_reverse_bang($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;
- var $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $7 = sp;
- $3 = $1;
- $8 = HEAP32[$2>>2]|0;
- $4 = $8;
- $9 = $4;
- $10 = ((($9)) + 12|0);
- $11 = HEAP32[$10>>2]|0;
- $12 = ($11|0)>(1);
- if (!($12)) {
-  ;HEAP32[$0>>2]=HEAP32[$2>>2]|0;HEAP32[$0+4>>2]=HEAP32[$2+4>>2]|0;
-  STACKTOP = sp;return;
- }
- $13 = $3;
- $14 = $4;
- _ary_modify($13,$14);
- $15 = $4;
- $16 = ((($15)) + 20|0);
- $17 = HEAP32[$16>>2]|0;
- $5 = $17;
- $18 = $4;
- $19 = ((($18)) + 20|0);
- $20 = HEAP32[$19>>2]|0;
- $21 = $4;
- $22 = ((($21)) + 12|0);
- $23 = HEAP32[$22>>2]|0;
- $24 = (($20) + ($23<<3)|0);
- $25 = ((($24)) + -8|0);
- $6 = $25;
- while(1) {
-  $26 = $5;
-  $27 = $6;
-  $28 = ($26>>>0)<($27>>>0);
-  if (!($28)) {
-   break;
-  }
-  $29 = $5;
-  ;HEAP32[$7>>2]=HEAP32[$29>>2]|0;HEAP32[$7+4>>2]=HEAP32[$29+4>>2]|0;
-  $30 = $5;
-  $31 = ((($30)) + 8|0);
-  $5 = $31;
-  $32 = $6;
-  ;HEAP32[$30>>2]=HEAP32[$32>>2]|0;HEAP32[$30+4>>2]=HEAP32[$32+4>>2]|0;
-  $33 = $6;
-  $34 = ((($33)) + -8|0);
-  $6 = $34;
-  ;HEAP32[$33>>2]=HEAP32[$7>>2]|0;HEAP32[$33+4>>2]=HEAP32[$7+4>>2]|0;
- }
- ;HEAP32[$0>>2]=HEAP32[$2>>2]|0;HEAP32[$0+4>>2]=HEAP32[$2+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_ary_rindex_m($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0;
- var $8 = 0, $9 = 0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);
- $$byval_copy1 = sp + 32|0;
- $$byval_copy = sp + 24|0;
- $vararg_buffer = sp;
- $4 = sp + 8|0;
- $3 = $1;
- $6 = $3;
- HEAP32[$vararg_buffer>>2] = $4;
- (_mrb_get_args($6,69199,$vararg_buffer)|0);
- $7 = HEAP32[$2>>2]|0;
- $8 = ((($7)) + 12|0);
- $9 = HEAP32[$8>>2]|0;
- $10 = (($9) - 1)|0;
- $5 = $10;
- while(1) {
-  $11 = $5;
-  $12 = ($11|0)>=(0);
-  if (!($12)) {
-   label = 6;
-   break;
-  }
-  $13 = $3;
-  $14 = HEAP32[$2>>2]|0;
-  $15 = ((($14)) + 20|0);
-  $16 = HEAP32[$15>>2]|0;
-  $17 = $5;
-  $18 = (($16) + ($17<<3)|0);
-  ;HEAP32[$$byval_copy>>2]=HEAP32[$18>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$18+4>>2]|0;
-  ;HEAP32[$$byval_copy1>>2]=HEAP32[$4>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$4+4>>2]|0;
-  $19 = (_mrb_equal($13,$$byval_copy,$$byval_copy1)|0);
-  $20 = ($19<<24>>24)!=(0);
-  $21 = $5;
-  if ($20) {
-   label = 4;
-   break;
-  }
-  $22 = (($21) + -1)|0;
-  $5 = $22;
- }
- if ((label|0) == 4) {
-  _mrb_fixnum_value_579($0,$21);
-  STACKTOP = sp;return;
- }
- else if ((label|0) == 6) {
-  _mrb_nil_value_562($0);
-  STACKTOP = sp;return;
- }
-}
-function _mrb_ary_unshift_m($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;
- var $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0;
- var $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0;
- var $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0;
- var $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $vararg_buffer = 0, $vararg_ptr1 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $vararg_buffer = sp;
- $5 = sp + 12|0;
- $6 = sp + 8|0;
- $3 = $1;
- $7 = HEAP32[$2>>2]|0;
- $4 = $7;
- $8 = $3;
- HEAP32[$vararg_buffer>>2] = $5;
- $vararg_ptr1 = ((($vararg_buffer)) + 4|0);
- HEAP32[$vararg_ptr1>>2] = $6;
- (_mrb_get_args($8,68856,$vararg_buffer)|0);
- $9 = $4;
- $10 = HEAP32[$9>>2]|0;
- $11 = $10 >>> 11;
- $12 = $11 & 256;
- $13 = ($12|0)!=(0);
- if ($13) {
-  $14 = $4;
-  $15 = ((($14)) + 16|0);
-  $16 = HEAP32[$15>>2]|0;
-  $17 = HEAP32[$16>>2]|0;
-  $18 = ($17|0)==(1);
-  if ($18) {
-   $19 = $4;
-   $20 = ((($19)) + 20|0);
-   $21 = HEAP32[$20>>2]|0;
-   $22 = $4;
-   $23 = ((($22)) + 16|0);
-   $24 = HEAP32[$23>>2]|0;
-   $25 = ((($24)) + 8|0);
-   $26 = HEAP32[$25>>2]|0;
-   $27 = $21;
-   $28 = $26;
-   $29 = (($27) - ($28))|0;
-   $30 = (($29|0) / 8)&-1;
-   $31 = HEAP32[$6>>2]|0;
-   $32 = ($30|0)>=($31|0);
-   if ($32) {
-    $33 = HEAP32[$6>>2]|0;
-    $34 = $4;
-    $35 = ((($34)) + 20|0);
-    $36 = HEAP32[$35>>2]|0;
-    $37 = (0 - ($33))|0;
-    $38 = (($36) + ($37<<3)|0);
-    HEAP32[$35>>2] = $38;
-   } else {
-    label = 5;
-   }
-  } else {
-   label = 5;
-  }
- } else {
-  label = 5;
- }
- if ((label|0) == 5) {
-  $39 = $3;
-  $40 = $4;
-  _ary_modify($39,$40);
-  $41 = HEAP32[$6>>2]|0;
-  $42 = ($41|0)==(0);
-  if ($42) {
-   ;HEAP32[$0>>2]=HEAP32[$2>>2]|0;HEAP32[$0+4>>2]=HEAP32[$2+4>>2]|0;
-   STACKTOP = sp;return;
-  }
-  $43 = $4;
-  $44 = ((($43)) + 16|0);
-  $45 = HEAP32[$44>>2]|0;
-  $46 = $4;
-  $47 = ((($46)) + 12|0);
-  $48 = HEAP32[$47>>2]|0;
-  $49 = HEAP32[$6>>2]|0;
-  $50 = (($48) + ($49))|0;
-  $51 = ($45|0)<($50|0);
-  if ($51) {
-   $52 = $3;
-   $53 = $4;
-   $54 = $4;
-   $55 = ((($54)) + 12|0);
-   $56 = HEAP32[$55>>2]|0;
-   $57 = HEAP32[$6>>2]|0;
-   $58 = (($56) + ($57))|0;
-   _ary_expand_capa($52,$53,$58);
-  }
-  $59 = $4;
-  $60 = ((($59)) + 20|0);
-  $61 = HEAP32[$60>>2]|0;
-  $62 = HEAP32[$6>>2]|0;
-  $63 = (($61) + ($62<<3)|0);
-  $64 = $4;
-  $65 = ((($64)) + 20|0);
-  $66 = HEAP32[$65>>2]|0;
-  $67 = $4;
-  $68 = ((($67)) + 12|0);
-  $69 = HEAP32[$68>>2]|0;
-  _value_move_573($63,$66,$69);
- }
- $70 = $4;
- $71 = ((($70)) + 20|0);
- $72 = HEAP32[$71>>2]|0;
- $73 = HEAP32[$5>>2]|0;
- $74 = HEAP32[$6>>2]|0;
- _array_copy($72,$73,$74);
- $75 = HEAP32[$6>>2]|0;
- $76 = $4;
- $77 = ((($76)) + 12|0);
- $78 = HEAP32[$77>>2]|0;
- $79 = (($78) + ($75))|0;
- HEAP32[$77>>2] = $79;
- while(1) {
-  $80 = HEAP32[$6>>2]|0;
-  $81 = (($80) + -1)|0;
-  HEAP32[$6>>2] = $81;
-  $82 = ($80|0)!=(0);
-  if (!($82)) {
-   break;
-  }
-  $83 = HEAP32[$5>>2]|0;
-  $84 = HEAP32[$6>>2]|0;
-  $85 = (($83) + ($84<<3)|0);
-  $86 = ((($85)) + 4|0);
-  $87 = HEAP32[$86>>2]|0;
-  $88 = ($87>>>0)<(8);
-  if ($88) {
-   continue;
-  }
-  $89 = $3;
-  $90 = $4;
-  $91 = HEAP32[$5>>2]|0;
-  $92 = HEAP32[$6>>2]|0;
-  $93 = (($91) + ($92<<3)|0);
-  $94 = HEAP32[$93>>2]|0;
-  _mrb_field_write_barrier($89,$90,$94);
- }
- ;HEAP32[$0>>2]=HEAP32[$2>>2]|0;HEAP32[$0+4>>2]=HEAP32[$2+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_ary_eq($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, label = 0;
- var sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);
- $$byval_copy1 = sp + 32|0;
- $$byval_copy = sp + 24|0;
- $vararg_buffer = sp;
- $4 = sp + 8|0;
- $3 = $1;
- $5 = $3;
- HEAP32[$vararg_buffer>>2] = $4;
- (_mrb_get_args($5,69199,$vararg_buffer)|0);
- $6 = $3;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
- ;HEAP32[$$byval_copy1>>2]=HEAP32[$4>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$4+4>>2]|0;
- $7 = (_mrb_obj_equal($6,$$byval_copy,$$byval_copy1)|0);
- $8 = ($7<<24>>24)!=(0);
- if ($8) {
-  _mrb_true_value_618($0);
-  STACKTOP = sp;return;
- }
- $9 = ((($4)) + 4|0);
- $10 = HEAP32[$9>>2]|0;
- $11 = ($10|0)==(14);
- if (!($11)) {
-  _mrb_false_value_619($0);
-  STACKTOP = sp;return;
- }
- $12 = HEAP32[$2>>2]|0;
- $13 = ((($12)) + 12|0);
- $14 = HEAP32[$13>>2]|0;
- $15 = HEAP32[$4>>2]|0;
- $16 = ((($15)) + 12|0);
- $17 = HEAP32[$16>>2]|0;
- $18 = ($14|0)!=($17|0);
- if ($18) {
-  _mrb_false_value_619($0);
-  STACKTOP = sp;return;
- } else {
-  ;HEAP32[$0>>2]=HEAP32[$4>>2]|0;HEAP32[$0+4>>2]=HEAP32[$4+4>>2]|0;
-  STACKTOP = sp;return;
- }
-}
-function _mrb_ary_cmp($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $10 = 0, $11 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);
- $$byval_copy1 = sp + 32|0;
- $$byval_copy = sp + 24|0;
- $vararg_buffer = sp;
- $4 = sp + 8|0;
- $3 = $1;
- $5 = $3;
- HEAP32[$vararg_buffer>>2] = $4;
- (_mrb_get_args($5,69199,$vararg_buffer)|0);
- $6 = $3;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
- ;HEAP32[$$byval_copy1>>2]=HEAP32[$4>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$4+4>>2]|0;
- $7 = (_mrb_obj_equal($6,$$byval_copy,$$byval_copy1)|0);
- $8 = ($7<<24>>24)!=(0);
- if ($8) {
-  _mrb_fixnum_value_579($0,0);
-  STACKTOP = sp;return;
- }
- $9 = ((($4)) + 4|0);
- $10 = HEAP32[$9>>2]|0;
- $11 = ($10|0)==(14);
- if ($11) {
-  ;HEAP32[$0>>2]=HEAP32[$4>>2]|0;HEAP32[$0+4>>2]=HEAP32[$4+4>>2]|0;
-  STACKTOP = sp;return;
- } else {
-  _mrb_nil_value_562($0);
-  STACKTOP = sp;return;
- }
-}
-function _mrb_true_value_618($0) {
- $0 = $0|0;
- var $1 = 0, $2 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $1 = sp;
- $2 = ((($1)) + 4|0);
- HEAP32[$2>>2] = 2;
- HEAP32[$1>>2] = 1;
- ;HEAP32[$0>>2]=HEAP32[$1>>2]|0;HEAP32[$0+4>>2]=HEAP32[$1+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_false_value_619($0) {
- $0 = $0|0;
- var $1 = 0, $2 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $1 = sp;
- $2 = ((($1)) + 4|0);
- HEAP32[$2>>2] = 0;
- HEAP32[$1>>2] = 1;
- ;HEAP32[$0>>2]=HEAP32[$1>>2]|0;HEAP32[$0+4>>2]=HEAP32[$1+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _ary_subseq($0,$1,$2,$3,$4) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- $4 = $4|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;
- var $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $5 = 0, $6 = 0, $7 = 0;
- var $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $5 = $1;
- $6 = $2;
- $7 = $3;
- $8 = $4;
- $10 = $5;
- $11 = $6;
- _ary_make_shared($10,$11);
- $12 = $5;
- $13 = $5;
- $14 = ((($13)) + 52|0);
- $15 = HEAP32[$14>>2]|0;
- $16 = (_mrb_obj_alloc($12,14,$15)|0);
- $9 = $16;
- $17 = $6;
- $18 = ((($17)) + 20|0);
- $19 = HEAP32[$18>>2]|0;
- $20 = $7;
- $21 = (($19) + ($20<<3)|0);
- $22 = $9;
- $23 = ((($22)) + 20|0);
- HEAP32[$23>>2] = $21;
- $24 = $8;
- $25 = $9;
- $26 = ((($25)) + 12|0);
- HEAP32[$26>>2] = $24;
- $27 = $6;
- $28 = ((($27)) + 16|0);
- $29 = HEAP32[$28>>2]|0;
- $30 = $9;
- $31 = ((($30)) + 16|0);
- HEAP32[$31>>2] = $29;
- $32 = $9;
- $33 = ((($32)) + 16|0);
- $34 = HEAP32[$33>>2]|0;
- $35 = HEAP32[$34>>2]|0;
- $36 = (($35) + 1)|0;
- HEAP32[$34>>2] = $36;
- $37 = $9;
- $38 = HEAP32[$37>>2]|0;
- $39 = $38 >>> 11;
- $40 = $39 | 256;
- $41 = HEAP32[$37>>2]|0;
- $42 = $40 & 2097151;
- $43 = $42 << 11;
- $44 = $41 & 2047;
- $45 = $44 | $43;
- HEAP32[$37>>2] = $45;
- $46 = $9;
- _mrb_obj_value_549($0,$46);
- STACKTOP = sp;return;
-}
-function _mrb_bool_value_624($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = sp;
- $2 = $1;
- $4 = $2;
- $5 = $4&255;
- $6 = ($5|0)!=(0);
- $7 = $6 ? 2 : 0;
- $8 = ((($3)) + 4|0);
- HEAP32[$8>>2] = $7;
- HEAP32[$3>>2] = 1;
- ;HEAP32[$0>>2]=HEAP32[$3>>2]|0;HEAP32[$0+4>>2]=HEAP32[$3+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _aget_index($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0.0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, $vararg_ptr1 = 0, $vararg_ptr2 = 0;
- var label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $vararg_buffer = sp;
- $4 = sp + 20|0;
- $5 = sp + 16|0;
- $6 = sp + 12|0;
- $3 = $0;
- $7 = ((($1)) + 4|0);
- $8 = HEAP32[$7>>2]|0;
- $9 = ($8|0)==(3);
- if ($9) {
-  $10 = HEAP32[$1>>2]|0;
-  $2 = $10;
-  $18 = $2;
-  STACKTOP = sp;return ($18|0);
- }
- $11 = ((($1)) + 4|0);
- $12 = HEAP32[$11>>2]|0;
- $13 = ($12|0)==(6);
- if ($13) {
-  $14 = +HEAPF32[$1>>2];
-  $15 = (~~(($14)));
-  $2 = $15;
-  $18 = $2;
-  STACKTOP = sp;return ($18|0);
- } else {
-  $16 = $3;
-  HEAP32[$vararg_buffer>>2] = $4;
-  $vararg_ptr1 = ((($vararg_buffer)) + 4|0);
-  HEAP32[$vararg_ptr1>>2] = $6;
-  $vararg_ptr2 = ((($vararg_buffer)) + 8|0);
-  HEAP32[$vararg_ptr2>>2] = $5;
-  (_mrb_get_args($16,64806,$vararg_buffer)|0);
-  $17 = HEAP32[$4>>2]|0;
-  $2 = $17;
-  $18 = $2;
-  STACKTOP = sp;return ($18|0);
- }
- return (0)|0;
-}
-function _mrb_obj_value_633($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = sp;
- $2 = $1;
- $4 = $2;
- $5 = HEAP32[$4>>2]|0;
- $6 = $5 & 255;
- $7 = ((($3)) + 4|0);
- HEAP32[$7>>2] = $6;
- $8 = $2;
- HEAP32[$3>>2] = $8;
- ;HEAP32[$0>>2]=HEAP32[$3>>2]|0;HEAP32[$0+4>>2]=HEAP32[$3+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _exc_output_backtrace($0,$1,$2,$3) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;
- var $30 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);
- $8 = sp + 24|0;
- $10 = sp + 8|0;
- $11 = sp;
- $4 = $0;
- $5 = $1;
- $6 = $2;
- $7 = $3;
- $12 = $4;
- $13 = $5;
- $14 = $4;
- $15 = (_mrb_intern_static($14,68279,6)|0);
- _mrb_obj_iv_get($10,$12,$13,$15);
- ;HEAP32[$8>>2]=HEAP32[$10>>2]|0;HEAP32[$8+4>>2]=HEAP32[$10+4>>2]|0;
- $16 = ((($8)) + 4|0);
- $17 = HEAP32[$16>>2]|0;
- $18 = ($17|0)==(0);
- if ($18) {
-  $19 = HEAP32[$8>>2]|0;
-  $20 = ($19|0)!=(0);
-  if ($20) {
-   label = 4;
-  } else {
-   $9 = 0;
-  }
- } else {
-  label = 4;
- }
- if ((label|0) == 4) {
-  $21 = HEAP32[$8>>2]|0;
-  $9 = $21;
- }
- $22 = $4;
- $23 = $4;
- $24 = $5;
- $25 = $4;
- $26 = (_mrb_intern_static($25,67804,5)|0);
- _mrb_obj_iv_get($11,$23,$24,$26);
- $27 = HEAP32[$11>>2]|0;
- $28 = $9;
- $29 = $6;
- $30 = $7;
- _output_backtrace($22,$27,$28,$29,$30);
- STACKTOP = sp;return;
-}
-function _output_backtrace($0,$1,$2,$3,$4) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- $4 = $4|0;
- var $$sink = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0;
- var $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0;
- var $135 = 0, $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0;
- var $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0;
- var $39 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0;
- var $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0;
- var $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0;
- var $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);
- $11 = sp + 16|0;
- $5 = $0;
- $6 = $1;
- $7 = $2;
- $8 = $3;
- $9 = $4;
- $15 = $6;
- $16 = $5;
- $17 = ((($16)) + 12|0);
- $18 = HEAP32[$17>>2]|0;
- $19 = ((($18)) + 24|0);
- $20 = HEAP32[$19>>2]|0;
- $21 = $5;
- $22 = ((($21)) + 12|0);
- $23 = HEAP32[$22>>2]|0;
- $24 = ((($23)) + 20|0);
- $25 = HEAP32[$24>>2]|0;
- $26 = $20;
- $27 = $25;
- $28 = (($26) - ($27))|0;
- $29 = (($28|0) / 48)&-1;
- $30 = ($15|0)>=($29|0);
- if ($30) {
-  $6 = 10;
- }
- $31 = $6;
- $10 = $31;
- while(1) {
-  $32 = $10;
-  $33 = ($32|0)>=(0);
-  if (!($33)) {
-   break;
-  }
-  $34 = $5;
-  $35 = ((($34)) + 12|0);
-  $36 = HEAP32[$35>>2]|0;
-  $37 = ((($36)) + 20|0);
-  $38 = HEAP32[$37>>2]|0;
-  $39 = $10;
-  $40 = (($38) + (($39*48)|0)|0);
-  $12 = $40;
-  $41 = $12;
-  $42 = ((($41)) + 4|0);
-  $43 = HEAP32[$42>>2]|0;
-  $44 = ($43|0)!=(0|0);
-  if ($44) {
-   $45 = $12;
-   $46 = ((($45)) + 4|0);
-   $47 = HEAP32[$46>>2]|0;
-   $48 = HEAP32[$47>>2]|0;
-   $49 = $48 >>> 11;
-   $50 = $49 & 128;
-   $51 = ($50|0)!=(0);
-   if (!($51)) {
-    $52 = $12;
-    $53 = ((($52)) + 4|0);
-    $54 = HEAP32[$53>>2]|0;
-    $55 = ((($54)) + 12|0);
-    $56 = HEAP32[$55>>2]|0;
-    $13 = $56;
-    $57 = $5;
-    $58 = ((($57)) + 12|0);
-    $59 = HEAP32[$58>>2]|0;
-    $60 = ((($59)) + 20|0);
-    $61 = HEAP32[$60>>2]|0;
-    $62 = $10;
-    $63 = (($61) + (($62*48)|0)|0);
-    $64 = ((($63)) + 32|0);
-    $65 = HEAP32[$64>>2]|0;
-    $66 = ($65|0)!=(0|0);
-    do {
-     if ($66) {
-      $67 = $5;
-      $68 = ((($67)) + 12|0);
-      $69 = HEAP32[$68>>2]|0;
-      $70 = ((($69)) + 20|0);
-      $71 = HEAP32[$70>>2]|0;
-      $72 = $10;
-      $73 = (($71) + (($72*48)|0)|0);
-      $74 = ((($73)) + 32|0);
-      $75 = HEAP32[$74>>2]|0;
-      $14 = $75;
-     } else {
-      $76 = $10;
-      $77 = (($76) + 1)|0;
-      $78 = $6;
-      $79 = ($77|0)<=($78|0);
-      if ($79) {
-       $80 = $5;
-       $81 = ((($80)) + 12|0);
-       $82 = HEAP32[$81>>2]|0;
-       $83 = ((($82)) + 20|0);
-       $84 = HEAP32[$83>>2]|0;
-       $85 = $10;
-       $86 = (($85) + 1)|0;
-       $87 = (($84) + (($86*48)|0)|0);
-       $88 = ((($87)) + 28|0);
-       $89 = HEAP32[$88>>2]|0;
-       $90 = ((($89)) + -4|0);
-       $14 = $90;
-       break;
-      } else {
-       $91 = $7;
-       $14 = $91;
-       break;
-      }
-     }
-    } while(0);
-    $92 = $13;
-    $93 = $14;
-    $94 = $13;
-    $95 = ((($94)) + 8|0);
-    $96 = HEAP32[$95>>2]|0;
-    $97 = $93;
-    $98 = $96;
-    $99 = (($97) - ($98))|0;
-    $100 = (($99|0) / 4)&-1;
-    $101 = (_mrb_debug_get_filename($92,$100)|0);
-    $102 = ((($11)) + 8|0);
-    HEAP32[$102>>2] = $101;
-    $103 = $13;
-    $104 = $14;
-    $105 = $13;
-    $106 = ((($105)) + 8|0);
-    $107 = HEAP32[$106>>2]|0;
-    $108 = $104;
-    $109 = $107;
-    $110 = (($108) - ($109))|0;
-    $111 = (($110|0) / 4)&-1;
-    $112 = (_mrb_debug_get_line($103,$111)|0);
-    $113 = ((($11)) + 4|0);
-    HEAP32[$113>>2] = $112;
-    $114 = ((($11)) + 4|0);
-    $115 = HEAP32[$114>>2]|0;
-    $116 = ($115|0)==(-1);
-    if (!($116)) {
-     $117 = $12;
-     $118 = ((($117)) + 44|0);
-     $119 = HEAP32[$118>>2]|0;
-     $120 = $12;
-     $121 = ((($120)) + 4|0);
-     $122 = HEAP32[$121>>2]|0;
-     $123 = ((($122)) + 16|0);
-     $124 = HEAP32[$123>>2]|0;
-     $125 = ($119|0)==($124|0);
-     $126 = ((($11)) + 16|0);
-     $$sink = $125 ? 70783 : 64831;
-     HEAP32[$126>>2] = $$sink;
-     $127 = ((($11)) + 8|0);
-     $128 = HEAP32[$127>>2]|0;
-     $129 = ($128|0)!=(0|0);
-     if (!($129)) {
-      $130 = ((($11)) + 8|0);
-      HEAP32[$130>>2] = 64833;
-     }
-     $131 = $5;
-     $132 = $12;
-     $133 = HEAP32[$132>>2]|0;
-     $134 = (_mrb_sym2name($131,$133)|0);
-     $135 = ((($11)) + 12|0);
-     HEAP32[$135>>2] = $134;
-     $136 = $5;
-     $137 = $12;
-     $138 = ((($137)) + 4|0);
-     $139 = HEAP32[$138>>2]|0;
-     $140 = ((($139)) + 16|0);
-     $141 = HEAP32[$140>>2]|0;
-     $142 = (_mrb_class_name($136,$141)|0);
-     $143 = ((($11)) + 20|0);
-     HEAP32[$143>>2] = $142;
-     $144 = $10;
-     HEAP32[$11>>2] = $144;
-     $145 = $8;
-     $146 = $5;
-     $147 = $9;
-     FUNCTION_TABLE_viii[$145 & 511]($146,$11,$147);
-    }
-   }
-  }
-  $148 = $10;
-  $149 = (($148) + -1)|0;
-  $10 = $149;
- }
- STACKTOP = sp;return;
-}
-function _mrb_exc_backtrace($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $4 = sp + 8|0;
- $5 = sp;
- $3 = $1;
- $6 = $3;
- _mrb_ary_new($5,$6);
- ;HEAP32[$4>>2]=HEAP32[$5>>2]|0;HEAP32[$4+4>>2]=HEAP32[$5+4>>2]|0;
- $7 = $3;
- $8 = HEAP32[$2>>2]|0;
- $9 = HEAP32[$4>>2]|0;
- _exc_output_backtrace($7,$8,232,$9);
- ;HEAP32[$0>>2]=HEAP32[$4>>2]|0;HEAP32[$0+4>>2]=HEAP32[$4+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _get_backtrace_i($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $$byval_copy2 = 0, $$byval_copy3 = 0, $$byval_copy4 = 0, $$byval_copy5 = 0, $$byval_copy6 = 0, $$byval_copy7 = 0, $$byval_copy8 = 0, $$byval_copy9 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0;
- var $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0;
- var $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $6 = 0, $7 = 0;
- var $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 192|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(192|0);
- $$byval_copy9 = sp + 184|0;
- $$byval_copy8 = sp + 176|0;
- $$byval_copy7 = sp + 168|0;
- $$byval_copy6 = sp + 160|0;
- $$byval_copy5 = sp + 152|0;
- $$byval_copy4 = sp + 144|0;
- $$byval_copy3 = sp + 136|0;
- $$byval_copy2 = sp + 128|0;
- $$byval_copy1 = sp + 120|0;
- $$byval_copy = sp + 112|0;
- $6 = sp + 88|0;
- $7 = sp + 80|0;
- $9 = sp + 64|0;
- $10 = sp + 56|0;
- $11 = sp + 48|0;
- $12 = sp + 40|0;
- $13 = sp + 32|0;
- $14 = sp + 24|0;
- $15 = sp + 16|0;
- $16 = sp + 8|0;
- $17 = sp;
- $3 = $0;
- $4 = $1;
- $5 = $2;
- $18 = $3;
- $19 = (_mrb_gc_arena_save($18)|0);
- $8 = $19;
- $20 = $5;
- _mrb_obj_value_633($9,$20);
- ;HEAP32[$6>>2]=HEAP32[$9>>2]|0;HEAP32[$6+4>>2]=HEAP32[$9+4>>2]|0;
- $21 = $3;
- $22 = $4;
- $23 = ((($22)) + 8|0);
- $24 = HEAP32[$23>>2]|0;
- _mrb_str_new_cstr($10,$21,$24);
- ;HEAP32[$7>>2]=HEAP32[$10>>2]|0;HEAP32[$7+4>>2]=HEAP32[$10+4>>2]|0;
- $25 = $3;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$7>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$7+4>>2]|0;
- _mrb_str_cat($11,$25,$$byval_copy,68074,1);
- $26 = $3;
- $27 = $3;
- $28 = $4;
- $29 = ((($28)) + 4|0);
- $30 = HEAP32[$29>>2]|0;
- _mrb_fixnum_value_646($13,$30);
- ;HEAP32[$$byval_copy1>>2]=HEAP32[$13>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$13+4>>2]|0;
- _mrb_fixnum_to_str($12,$27,$$byval_copy1,10);
- ;HEAP32[$$byval_copy2>>2]=HEAP32[$7>>2]|0;HEAP32[$$byval_copy2+4>>2]=HEAP32[$7+4>>2]|0;
- ;HEAP32[$$byval_copy3>>2]=HEAP32[$12>>2]|0;HEAP32[$$byval_copy3+4>>2]=HEAP32[$12+4>>2]|0;
- _mrb_str_concat($26,$$byval_copy2,$$byval_copy3);
- $31 = $4;
- $32 = ((($31)) + 12|0);
- $33 = HEAP32[$32>>2]|0;
- $34 = ($33|0)!=(0|0);
- if (!($34)) {
-  $52 = $3;
-  ;HEAP32[$$byval_copy8>>2]=HEAP32[$6>>2]|0;HEAP32[$$byval_copy8+4>>2]=HEAP32[$6+4>>2]|0;
-  ;HEAP32[$$byval_copy9>>2]=HEAP32[$7>>2]|0;HEAP32[$$byval_copy9+4>>2]=HEAP32[$7+4>>2]|0;
-  _mrb_ary_push($52,$$byval_copy8,$$byval_copy9);
-  $53 = $3;
-  $54 = $8;
-  _mrb_gc_arena_restore($53,$54);
-  STACKTOP = sp;return;
- }
- $35 = $3;
- ;HEAP32[$$byval_copy4>>2]=HEAP32[$7>>2]|0;HEAP32[$$byval_copy4+4>>2]=HEAP32[$7+4>>2]|0;
- _mrb_str_cat($14,$35,$$byval_copy4,64843,4);
- $36 = $4;
- $37 = ((($36)) + 20|0);
- $38 = HEAP32[$37>>2]|0;
- $39 = ($38|0)!=(0|0);
- if ($39) {
-  $40 = $3;
-  $41 = $4;
-  $42 = ((($41)) + 20|0);
-  $43 = HEAP32[$42>>2]|0;
-  ;HEAP32[$$byval_copy5>>2]=HEAP32[$7>>2]|0;HEAP32[$$byval_copy5+4>>2]=HEAP32[$7+4>>2]|0;
-  _mrb_str_cat_cstr($15,$40,$$byval_copy5,$43);
-  $44 = $3;
-  $45 = $4;
-  $46 = ((($45)) + 16|0);
-  $47 = HEAP32[$46>>2]|0;
-  ;HEAP32[$$byval_copy6>>2]=HEAP32[$7>>2]|0;HEAP32[$$byval_copy6+4>>2]=HEAP32[$7+4>>2]|0;
-  _mrb_str_cat_cstr($16,$44,$$byval_copy6,$47);
- }
- $48 = $3;
- $49 = $4;
- $50 = ((($49)) + 12|0);
- $51 = HEAP32[$50>>2]|0;
- ;HEAP32[$$byval_copy7>>2]=HEAP32[$7>>2]|0;HEAP32[$$byval_copy7+4>>2]=HEAP32[$7+4>>2]|0;
- _mrb_str_cat_cstr($17,$48,$$byval_copy7,$51);
- $52 = $3;
- ;HEAP32[$$byval_copy8>>2]=HEAP32[$6>>2]|0;HEAP32[$$byval_copy8+4>>2]=HEAP32[$6+4>>2]|0;
- ;HEAP32[$$byval_copy9>>2]=HEAP32[$7>>2]|0;HEAP32[$$byval_copy9+4>>2]=HEAP32[$7+4>>2]|0;
- _mrb_ary_push($52,$$byval_copy8,$$byval_copy9);
- $53 = $3;
- $54 = $8;
- _mrb_gc_arena_restore($53,$54);
- STACKTOP = sp;return;
-}
-function _mrb_fixnum_value_646($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = sp;
- $2 = $1;
- $4 = ((($3)) + 4|0);
- HEAP32[$4>>2] = 3;
- $5 = $2;
- HEAP32[$3>>2] = $5;
- ;HEAP32[$0>>2]=HEAP32[$3>>2]|0;HEAP32[$0+4>>2]=HEAP32[$3+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _kh_alloc_mt($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;
- var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0;
- var $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $2 = $0;
- $3 = $1;
- $7 = $3;
- $8 = HEAP32[$7>>2]|0;
- $4 = $8;
- $5 = 8;
- $9 = $2;
- $10 = $4;
- $11 = $10;
- $12 = (($11>>>0) / 4)&-1;
- $13 = $5;
- $14 = $4;
- $15 = Math_imul($13, $14)|0;
- $16 = (($12) + ($15))|0;
- $17 = (_mrb_malloc($9,$16)|0);
- $6 = $17;
- $18 = $3;
- $19 = ((($18)) + 8|0);
- HEAP32[$19>>2] = 0;
- $20 = $3;
- $21 = ((($20)) + 4|0);
- HEAP32[$21>>2] = 0;
- $22 = $6;
- $23 = $3;
- $24 = ((($23)) + 16|0);
- HEAP32[$24>>2] = $22;
- $25 = $6;
- $26 = $4;
- $27 = $26<<2;
- $28 = (($25) + ($27)|0);
- $29 = $3;
- $30 = ((($29)) + 20|0);
- HEAP32[$30>>2] = $28;
- $31 = $6;
- $32 = $5;
- $33 = $4;
- $34 = Math_imul($32, $33)|0;
- $35 = (($31) + ($34)|0);
- $36 = $3;
- $37 = ((($36)) + 12|0);
- HEAP32[$37>>2] = $35;
- $38 = $3;
- $39 = ((($38)) + 12|0);
- $40 = HEAP32[$39>>2]|0;
- $41 = $4;
- $42 = (($41>>>0) / 4)&-1;
- _kh_fill_flags_648($40,-86,$42);
- STACKTOP = sp;return;
-}
-function _kh_fill_flags_648($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $0;
- $4 = $1;
- $5 = $2;
- while(1) {
-  $6 = $5;
-  $7 = (($6) + -1)|0;
-  $5 = $7;
-  $8 = ($6>>>0)>(0);
-  if (!($8)) {
-   break;
-  }
-  $9 = $4;
-  $10 = $3;
-  $11 = ((($10)) + 1|0);
-  $3 = $11;
-  HEAP8[$10>>0] = $9;
- }
- STACKTOP = sp;return;
-}
-function _kh_init_mt_size($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;
- var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $5 = $2;
- $6 = (_mrb_calloc($5,1,24)|0);
- $4 = $6;
- $7 = $3;
- $8 = ($7>>>0)<(8);
- if ($8) {
-  $3 = 8;
- }
- $9 = $3;
- $10 = (($9) + -1)|0;
- $3 = $10;
- $11 = $3;
- $12 = $11 >>> 1;
- $13 = $3;
- $14 = $13 | $12;
- $3 = $14;
- $15 = $3;
- $16 = $15 >>> 2;
- $17 = $3;
- $18 = $17 | $16;
- $3 = $18;
- $19 = $3;
- $20 = $19 >>> 4;
- $21 = $3;
- $22 = $21 | $20;
- $3 = $22;
- $23 = $3;
- $24 = $23 >>> 8;
- $25 = $3;
- $26 = $25 | $24;
- $3 = $26;
- $27 = $3;
- $28 = $27 >>> 16;
- $29 = $3;
- $30 = $29 | $28;
- $3 = $30;
- $31 = $3;
- $32 = (($31) + 1)|0;
- $3 = $32;
- $33 = $3;
- $34 = $4;
- HEAP32[$34>>2] = $33;
- $35 = $2;
- $36 = $4;
- _kh_alloc_mt($35,$36);
- $37 = $4;
- STACKTOP = sp;return ($37|0);
-}
-function _kh_init_mt($0) {
- $0 = $0|0;
- var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $1 = $0;
- $2 = $1;
- $3 = (_kh_init_mt_size($2,8)|0);
- STACKTOP = sp;return ($3|0);
-}
-function _kh_destroy_mt($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $4 = $3;
- $5 = ($4|0)!=(0|0);
- if (!($5)) {
-  STACKTOP = sp;return;
- }
- $6 = $2;
- $7 = $3;
- $8 = ((($7)) + 16|0);
- $9 = HEAP32[$8>>2]|0;
- _mrb_free($6,$9);
- $10 = $2;
- $11 = $3;
- _mrb_free($10,$11);
- STACKTOP = sp;return;
-}
-function _kh_get_mt($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;
- var $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0;
- var $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0;
- var $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $4 = $0;
- $5 = $1;
- $6 = $2;
- $9 = $6;
- $10 = $6;
- $11 = $10 << 2;
- $12 = $9 ^ $11;
- $13 = $6;
- $14 = $13 >>> 2;
- $15 = $12 ^ $14;
- $16 = $5;
- $17 = HEAP32[$16>>2]|0;
- $18 = (($17) - 1)|0;
- $19 = $15 & $18;
- $7 = $19;
- $8 = 0;
- while(1) {
-  $20 = $5;
-  $21 = ((($20)) + 12|0);
-  $22 = HEAP32[$21>>2]|0;
-  $23 = $7;
-  $24 = (($23>>>0) / 4)&-1;
-  $25 = (($22) + ($24)|0);
-  $26 = HEAP8[$25>>0]|0;
-  $27 = $26&255;
-  $28 = $7;
-  $29 = (($28>>>0) % 4)&-1;
-  $30 = (64848 + ($29)|0);
-  $31 = HEAP8[$30>>0]|0;
-  $32 = $31&255;
-  $33 = $27 & $32;
-  $34 = ($33|0)!=(0);
-  $35 = $34 ^ 1;
-  $36 = $5;
-  if (!($35)) {
-   label = 7;
-   break;
-  }
-  $37 = ((($36)) + 12|0);
-  $38 = HEAP32[$37>>2]|0;
-  $39 = $7;
-  $40 = (($39>>>0) / 4)&-1;
-  $41 = (($38) + ($40)|0);
-  $42 = HEAP8[$41>>0]|0;
-  $43 = $42&255;
-  $44 = $7;
-  $45 = (($44>>>0) % 4)&-1;
-  $46 = (64852 + ($45)|0);
-  $47 = HEAP8[$46>>0]|0;
-  $48 = $47&255;
-  $49 = $43 & $48;
-  $50 = ($49|0)!=(0);
-  if (!($50)) {
-   $51 = $5;
-   $52 = ((($51)) + 16|0);
-   $53 = HEAP32[$52>>2]|0;
-   $54 = $7;
-   $55 = (($53) + ($54<<2)|0);
-   $56 = HEAP32[$55>>2]|0;
-   $57 = $6;
-   $58 = ($56|0)==($57|0);
-   if ($58) {
-    label = 5;
-    break;
-   }
-  }
-  $60 = $7;
-  $61 = $8;
-  $62 = (($61) + 1)|0;
-  $8 = $62;
-  $63 = (($60) + ($62))|0;
-  $64 = $5;
-  $65 = HEAP32[$64>>2]|0;
-  $66 = (($65) - 1)|0;
-  $67 = $63 & $66;
-  $7 = $67;
- }
- if ((label|0) == 5) {
-  $59 = $7;
-  $3 = $59;
-  $69 = $3;
-  STACKTOP = sp;return ($69|0);
- }
- else if ((label|0) == 7) {
-  $68 = HEAP32[$36>>2]|0;
-  $3 = $68;
-  $69 = $3;
-  STACKTOP = sp;return ($69|0);
- }
- return (0)|0;
-}
-function _kh_resize_mt($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$ = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;
- var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0;
- var $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0;
- var $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0;
- var $83 = 0, $84 = 0, $85 = 0, $86 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);
- $6 = sp + 24|0;
- $3 = $0;
- $4 = $1;
- $5 = $2;
- $13 = $5;
- $14 = ($13>>>0)<(8);
- $$ = $14 ? 8 : $2;
- $5 = $$;
- $15 = $5;
- $16 = (($15) + -1)|0;
- $5 = $16;
- $17 = $5;
- $18 = $17 >>> 1;
- $19 = $5;
- $20 = $19 | $18;
- $5 = $20;
- $21 = $5;
- $22 = $21 >>> 2;
- $23 = $5;
- $24 = $23 | $22;
- $5 = $24;
- $25 = $5;
- $26 = $25 >>> 4;
- $27 = $5;
- $28 = $27 | $26;
- $5 = $28;
- $29 = $5;
- $30 = $29 >>> 8;
- $31 = $5;
- $32 = $31 | $30;
- $5 = $32;
- $33 = $5;
- $34 = $33 >>> 16;
- $35 = $5;
- $36 = $35 | $34;
- $5 = $36;
- $37 = $5;
- $38 = (($37) + 1)|0;
- $5 = $38;
- $39 = $4;
- $40 = ((($39)) + 12|0);
- $41 = HEAP32[$40>>2]|0;
- $7 = $41;
- $42 = $4;
- $43 = ((($42)) + 16|0);
- $44 = HEAP32[$43>>2]|0;
- $8 = $44;
- $45 = $4;
- $46 = ((($45)) + 20|0);
- $47 = HEAP32[$46>>2]|0;
- $9 = $47;
- $48 = $4;
- $49 = HEAP32[$48>>2]|0;
- $10 = $49;
- $50 = $5;
- HEAP32[$6>>2] = $50;
- $51 = $3;
- _kh_alloc_mt($51,$6);
- $11 = 0;
- while(1) {
-  $52 = $11;
-  $53 = $10;
-  $54 = ($52>>>0)<($53>>>0);
-  if (!($54)) {
-   break;
-  }
-  $55 = $7;
-  $56 = $11;
-  $57 = (($56>>>0) / 4)&-1;
-  $58 = (($55) + ($57)|0);
-  $59 = HEAP8[$58>>0]|0;
-  $60 = $59&255;
-  $61 = $11;
-  $62 = (($61>>>0) % 4)&-1;
-  $63 = (64856 + ($62)|0);
-  $64 = HEAP8[$63>>0]|0;
-  $65 = $64&255;
-  $66 = $60 & $65;
-  $67 = ($66|0)!=(0);
-  if (!($67)) {
-   $68 = $3;
-   $69 = $8;
-   $70 = $11;
-   $71 = (($69) + ($70<<2)|0);
-   $72 = HEAP32[$71>>2]|0;
-   $73 = (_kh_put_mt($68,$6,$72,0)|0);
-   $12 = $73;
-   $74 = $9;
-   $75 = $11;
-   $76 = (($74) + ($75<<2)|0);
-   $77 = HEAP32[$76>>2]|0;
-   $78 = ((($6)) + 20|0);
-   $79 = HEAP32[$78>>2]|0;
-   $80 = $12;
-   $81 = (($79) + ($80<<2)|0);
-   HEAP32[$81>>2] = $77;
-  }
-  $82 = $11;
-  $83 = (($82) + 1)|0;
-  $11 = $83;
- }
- $84 = $4;
- ;HEAP32[$84>>2]=HEAP32[$6>>2]|0;HEAP32[$84+4>>2]=HEAP32[$6+4>>2]|0;HEAP32[$84+8>>2]=HEAP32[$6+8>>2]|0;HEAP32[$84+12>>2]=HEAP32[$6+12>>2]|0;HEAP32[$84+16>>2]=HEAP32[$6+16>>2]|0;HEAP32[$84+20>>2]=HEAP32[$6+20>>2]|0;
- $85 = $3;
- $86 = $8;
- _mrb_free($85,$86);
- STACKTOP = sp;return;
-}
-function _kh_put_mt($0,$1,$2,$3) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;
- var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0;
- var $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0, $152 = 0, $153 = 0;
- var $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;
- var $28 = 0, $29 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0;
- var $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0;
- var $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0;
- var $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $5 = $0;
- $6 = $1;
- $7 = $2;
- $8 = $3;
- $11 = 0;
- $12 = $6;
- $13 = ((($12)) + 8|0);
- $14 = HEAP32[$13>>2]|0;
- $15 = $6;
- $16 = HEAP32[$15>>2]|0;
- $17 = $16 >>> 2;
- $18 = $6;
- $19 = HEAP32[$18>>2]|0;
- $20 = $19 >>> 1;
- $21 = $17 | $20;
- $22 = ($14>>>0)>=($21>>>0);
- if ($22) {
-  $23 = $5;
-  $24 = $6;
-  $25 = $6;
-  $26 = HEAP32[$25>>2]|0;
-  $27 = $26<<1;
-  _kh_resize_mt($23,$24,$27);
- }
- $28 = $7;
- $29 = $7;
- $30 = $29 << 2;
- $31 = $28 ^ $30;
- $32 = $7;
- $33 = $32 >>> 2;
- $34 = $31 ^ $33;
- $35 = $6;
- $36 = HEAP32[$35>>2]|0;
- $37 = (($36) - 1)|0;
- $38 = $34 & $37;
- $9 = $38;
- $39 = $6;
- $40 = HEAP32[$39>>2]|0;
- $10 = $40;
- while(1) {
-  $41 = $6;
-  $42 = ((($41)) + 12|0);
-  $43 = HEAP32[$42>>2]|0;
-  $44 = $9;
-  $45 = (($44>>>0) / 4)&-1;
-  $46 = (($43) + ($45)|0);
-  $47 = HEAP8[$46>>0]|0;
-  $48 = $47&255;
-  $49 = $9;
-  $50 = (($49>>>0) % 4)&-1;
-  $51 = (64848 + ($50)|0);
-  $52 = HEAP8[$51>>0]|0;
-  $53 = $52&255;
-  $54 = $48 & $53;
-  $55 = ($54|0)!=(0);
-  $56 = $55 ^ 1;
-  if (!($56)) {
-   break;
-  }
-  $57 = $6;
-  $58 = ((($57)) + 12|0);
-  $59 = HEAP32[$58>>2]|0;
-  $60 = $9;
-  $61 = (($60>>>0) / 4)&-1;
-  $62 = (($59) + ($61)|0);
-  $63 = HEAP8[$62>>0]|0;
-  $64 = $63&255;
-  $65 = $9;
-  $66 = (($65>>>0) % 4)&-1;
-  $67 = (64852 + ($66)|0);
-  $68 = HEAP8[$67>>0]|0;
-  $69 = $68&255;
-  $70 = $64 & $69;
-  $71 = ($70|0)!=(0);
-  if ($71) {
-   $84 = $10;
-   $85 = $6;
-   $86 = HEAP32[$85>>2]|0;
-   $87 = ($84|0)==($86|0);
-   if ($87) {
-    $88 = $9;
-    $10 = $88;
-   }
-  } else {
-   $72 = $6;
-   $73 = ((($72)) + 16|0);
-   $74 = HEAP32[$73>>2]|0;
-   $75 = $9;
-   $76 = (($74) + ($75<<2)|0);
-   $77 = HEAP32[$76>>2]|0;
-   $78 = $7;
-   $79 = ($77|0)==($78|0);
-   if ($79) {
-    label = 7;
-    break;
-   }
-  }
-  $89 = $9;
-  $90 = $11;
-  $91 = (($90) + 1)|0;
-  $11 = $91;
-  $92 = (($89) + ($91))|0;
-  $93 = $6;
-  $94 = HEAP32[$93>>2]|0;
-  $95 = (($94) - 1)|0;
-  $96 = $92 & $95;
-  $9 = $96;
- }
- if ((label|0) == 7) {
-  $80 = $8;
-  $81 = ($80|0)!=(0|0);
-  if ($81) {
-   $82 = $8;
-   HEAP32[$82>>2] = 0;
-  }
-  $83 = $9;
-  $4 = $83;
-  $161 = $4;
-  STACKTOP = sp;return ($161|0);
- }
- $97 = $10;
- $98 = $6;
- $99 = HEAP32[$98>>2]|0;
- $100 = ($97|0)!=($99|0);
- $101 = $7;
- $102 = $6;
- $103 = ((($102)) + 16|0);
- $104 = HEAP32[$103>>2]|0;
- if ($100) {
-  $105 = $10;
-  $106 = (($104) + ($105<<2)|0);
-  HEAP32[$106>>2] = $101;
-  $107 = $10;
-  $108 = (($107>>>0) % 4)&-1;
-  $109 = (64852 + ($108)|0);
-  $110 = HEAP8[$109>>0]|0;
-  $111 = $110&255;
-  $112 = $111 ^ -1;
-  $113 = $6;
-  $114 = ((($113)) + 12|0);
-  $115 = HEAP32[$114>>2]|0;
-  $116 = $10;
-  $117 = (($116>>>0) / 4)&-1;
-  $118 = (($115) + ($117)|0);
-  $119 = HEAP8[$118>>0]|0;
-  $120 = $119&255;
-  $121 = $120 & $112;
-  $122 = $121&255;
-  HEAP8[$118>>0] = $122;
-  $123 = $6;
-  $124 = ((($123)) + 4|0);
-  $125 = HEAP32[$124>>2]|0;
-  $126 = (($125) + 1)|0;
-  HEAP32[$124>>2] = $126;
-  $127 = $8;
-  $128 = ($127|0)!=(0|0);
-  if ($128) {
-   $129 = $8;
-   HEAP32[$129>>2] = 2;
-  }
-  $130 = $10;
-  $4 = $130;
-  $161 = $4;
-  STACKTOP = sp;return ($161|0);
- } else {
-  $131 = $9;
-  $132 = (($104) + ($131<<2)|0);
-  HEAP32[$132>>2] = $101;
-  $133 = $9;
-  $134 = (($133>>>0) % 4)&-1;
-  $135 = (64848 + ($134)|0);
-  $136 = HEAP8[$135>>0]|0;
-  $137 = $136&255;
-  $138 = $137 ^ -1;
-  $139 = $6;
-  $140 = ((($139)) + 12|0);
-  $141 = HEAP32[$140>>2]|0;
-  $142 = $9;
-  $143 = (($142>>>0) / 4)&-1;
-  $144 = (($141) + ($143)|0);
-  $145 = HEAP8[$144>>0]|0;
-  $146 = $145&255;
-  $147 = $146 & $138;
-  $148 = $147&255;
-  HEAP8[$144>>0] = $148;
-  $149 = $6;
-  $150 = ((($149)) + 4|0);
-  $151 = HEAP32[$150>>2]|0;
-  $152 = (($151) + 1)|0;
-  HEAP32[$150>>2] = $152;
-  $153 = $6;
-  $154 = ((($153)) + 8|0);
-  $155 = HEAP32[$154>>2]|0;
-  $156 = (($155) + 1)|0;
-  HEAP32[$154>>2] = $156;
-  $157 = $8;
-  $158 = ($157|0)!=(0|0);
-  if ($158) {
-   $159 = $8;
-   HEAP32[$159>>2] = 1;
-  }
-  $160 = $9;
-  $4 = $160;
-  $161 = $4;
-  STACKTOP = sp;return ($161|0);
- }
- return (0)|0;
-}
-function _kh_del_mt($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0;
- var $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $0;
- $4 = $1;
- $5 = $2;
- $6 = $5;
- $7 = (($6>>>0) % 4)&-1;
- $8 = (64852 + ($7)|0);
- $9 = HEAP8[$8>>0]|0;
- $10 = $9&255;
- $11 = $4;
- $12 = ((($11)) + 12|0);
- $13 = HEAP32[$12>>2]|0;
- $14 = $5;
- $15 = (($14>>>0) / 4)&-1;
- $16 = (($13) + ($15)|0);
- $17 = HEAP8[$16>>0]|0;
- $18 = $17&255;
- $19 = $18 | $10;
- $20 = $19&255;
- HEAP8[$16>>0] = $20;
- $21 = $4;
- $22 = ((($21)) + 4|0);
- $23 = HEAP32[$22>>2]|0;
- $24 = (($23) + -1)|0;
- HEAP32[$22>>2] = $24;
- STACKTOP = sp;return;
-}
-function _kh_copy_mt($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;
- var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0;
- var $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $2 = $0;
- $3 = $1;
- $7 = $2;
- $8 = (_kh_init_mt($7)|0);
- $4 = $8;
- $5 = 0;
- while(1) {
-  $9 = $5;
-  $10 = $3;
-  $11 = HEAP32[$10>>2]|0;
-  $12 = ($9|0)!=($11|0);
-  if (!($12)) {
-   break;
-  }
-  $13 = $3;
-  $14 = ((($13)) + 12|0);
-  $15 = HEAP32[$14>>2]|0;
-  $16 = $5;
-  $17 = (($16>>>0) / 4)&-1;
-  $18 = (($15) + ($17)|0);
-  $19 = HEAP8[$18>>0]|0;
-  $20 = $19&255;
-  $21 = $5;
-  $22 = (($21>>>0) % 4)&-1;
-  $23 = (64856 + ($22)|0);
-  $24 = HEAP8[$23>>0]|0;
-  $25 = $24&255;
-  $26 = $20 & $25;
-  $27 = ($26|0)!=(0);
-  if (!($27)) {
-   $28 = $2;
-   $29 = $4;
-   $30 = $3;
-   $31 = ((($30)) + 16|0);
-   $32 = HEAP32[$31>>2]|0;
-   $33 = $5;
-   $34 = (($32) + ($33<<2)|0);
-   $35 = HEAP32[$34>>2]|0;
-   $36 = (_kh_put_mt($28,$29,$35,0)|0);
-   $6 = $36;
-   $37 = $3;
-   $38 = ((($37)) + 20|0);
-   $39 = HEAP32[$38>>2]|0;
-   $40 = $5;
-   $41 = (($39) + ($40<<2)|0);
-   $42 = HEAP32[$41>>2]|0;
-   $43 = $4;
-   $44 = ((($43)) + 20|0);
-   $45 = HEAP32[$44>>2]|0;
-   $46 = $6;
-   $47 = (($45) + ($46<<2)|0);
-   HEAP32[$47>>2] = $42;
-  }
-  $48 = $5;
-  $49 = (($48) + 1)|0;
-  $5 = $49;
- }
- $50 = $4;
- STACKTOP = sp;return ($50|0);
-}
-function _mrb_gc_mark_mt($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;
- var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0;
- var $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $2 = $0;
- $3 = $1;
- $7 = $3;
- $8 = ((($7)) + 16|0);
- $9 = HEAP32[$8>>2]|0;
- $5 = $9;
- $10 = $5;
- $11 = ($10|0)!=(0|0);
- if (!($11)) {
-  STACKTOP = sp;return;
- }
- $4 = 0;
- while(1) {
-  $12 = $4;
-  $13 = $5;
-  $14 = HEAP32[$13>>2]|0;
-  $15 = ($12|0)!=($14|0);
-  if (!($15)) {
-   break;
-  }
-  $16 = $5;
-  $17 = ((($16)) + 12|0);
-  $18 = HEAP32[$17>>2]|0;
-  $19 = $4;
-  $20 = (($19>>>0) / 4)&-1;
-  $21 = (($18) + ($20)|0);
-  $22 = HEAP8[$21>>0]|0;
-  $23 = $22&255;
-  $24 = $4;
-  $25 = (($24>>>0) % 4)&-1;
-  $26 = (64856 + ($25)|0);
-  $27 = HEAP8[$26>>0]|0;
-  $28 = $27&255;
-  $29 = $23 & $28;
-  $30 = ($29|0)!=(0);
-  if (!($30)) {
-   $31 = $5;
-   $32 = ((($31)) + 20|0);
-   $33 = HEAP32[$32>>2]|0;
-   $34 = $4;
-   $35 = (($33) + ($34<<2)|0);
-   $36 = HEAP32[$35>>2]|0;
-   $6 = $36;
-   $37 = $6;
-   $38 = ($37|0)!=(0|0);
-   if ($38) {
-    $39 = $2;
-    $40 = $6;
-    _mrb_gc_mark($39,$40);
-   }
-  }
-  $41 = $4;
-  $42 = (($41) + 1)|0;
-  $4 = $42;
- }
- STACKTOP = sp;return;
-}
-function _mrb_gc_mark_mt_size($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $0;
- $4 = $1;
- $6 = $4;
- $7 = ((($6)) + 16|0);
- $8 = HEAP32[$7>>2]|0;
- $5 = $8;
- $9 = $5;
- $10 = ($9|0)!=(0|0);
- if ($10) {
-  $11 = $5;
-  $12 = ((($11)) + 4|0);
-  $13 = HEAP32[$12>>2]|0;
-  $2 = $13;
-  $14 = $2;
-  STACKTOP = sp;return ($14|0);
- } else {
-  $2 = 0;
-  $14 = $2;
-  STACKTOP = sp;return ($14|0);
- }
- return (0)|0;
-}
-function _mrb_gc_free_mt($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $4 = $2;
- $5 = $3;
- $6 = ((($5)) + 16|0);
- $7 = HEAP32[$6>>2]|0;
- _kh_destroy_mt($4,$7);
- STACKTOP = sp;return;
-}
-function _mrb_class_outer_module($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $5 = sp + 8|0;
- $6 = sp;
- $3 = $0;
- $4 = $1;
- $7 = $3;
- $8 = $4;
- $9 = $3;
- $10 = (_mrb_intern_static($9,64860,9)|0);
- _mrb_obj_iv_get($6,$7,$8,$10);
- ;HEAP32[$5>>2]=HEAP32[$6>>2]|0;HEAP32[$5+4>>2]=HEAP32[$6+4>>2]|0;
- $11 = ((($5)) + 4|0);
- $12 = HEAP32[$11>>2]|0;
- $13 = ($12|0)==(0);
- if ($13) {
-  $14 = HEAP32[$5>>2]|0;
-  $15 = ($14|0)!=(0);
-  if (!($15)) {
-   $2 = 0;
-   $17 = $2;
-   STACKTOP = sp;return ($17|0);
-  }
- }
- $16 = HEAP32[$5>>2]|0;
- $2 = $16;
- $17 = $2;
- STACKTOP = sp;return ($17|0);
-}
-function _define_module($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0;
- var $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);
- $$byval_copy = sp + 32|0;
- $8 = sp;
- $4 = $0;
- $5 = $1;
- $6 = $2;
- $9 = $4;
- $10 = $6;
- _mrb_obj_value_661($8,$10);
- $11 = $5;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$8>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$8+4>>2]|0;
- $12 = (_mrb_const_defined_at($9,$$byval_copy,$11)|0);
- $13 = ($12<<24>>24)!=(0);
- $14 = $4;
- if ($13) {
-  $15 = $6;
-  $16 = $5;
-  $17 = (_module_from_sym($14,$15,$16)|0);
-  $3 = $17;
-  $24 = $3;
-  STACKTOP = sp;return ($24|0);
- } else {
-  $18 = (_mrb_module_new($14)|0);
-  $7 = $18;
-  $19 = $4;
-  $20 = $6;
-  $21 = $7;
-  $22 = $5;
-  _setup_class($19,$20,$21,$22);
-  $23 = $7;
-  $3 = $23;
-  $24 = $3;
-  STACKTOP = sp;return ($24|0);
- }
- return (0)|0;
-}
-function _mrb_obj_value_661($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = sp;
- $2 = $1;
- $4 = $2;
- $5 = HEAP32[$4>>2]|0;
- $6 = $5 & 255;
- $7 = ((($3)) + 4|0);
- HEAP32[$7>>2] = $6;
- $8 = $2;
- HEAP32[$3>>2] = $8;
- ;HEAP32[$0>>2]=HEAP32[$3>>2]|0;HEAP32[$0+4>>2]=HEAP32[$3+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _module_from_sym($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $10 = 0, $11 = 0, $12 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);
- $$byval_copy1 = sp + 40|0;
- $$byval_copy = sp + 32|0;
- $6 = sp + 8|0;
- $7 = sp;
- $3 = $0;
- $4 = $1;
- $5 = $2;
- $8 = $3;
- $9 = $4;
- _mrb_obj_value_661($7,$9);
- $10 = $5;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$7>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$7+4>>2]|0;
- _mrb_const_get($6,$8,$$byval_copy,$10);
- $11 = $3;
- ;HEAP32[$$byval_copy1>>2]=HEAP32[$6>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$6+4>>2]|0;
- _mrb_check_type($11,$$byval_copy1,10);
- $12 = HEAP32[$6>>2]|0;
- STACKTOP = sp;return ($12|0);
-}
-function _mrb_module_new($0) {
- $0 = $0|0;
- var $1 = 0, $10 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $1 = $0;
- $3 = $1;
- $4 = $1;
- $5 = ((($4)) + 40|0);
- $6 = HEAP32[$5>>2]|0;
- $7 = (_mrb_obj_alloc($3,10,$6)|0);
- $2 = $7;
- $8 = $1;
- $9 = $2;
- _boot_initmod($8,$9);
- $10 = $2;
- STACKTOP = sp;return ($10|0);
-}
-function _setup_class($0,$1,$2,$3) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $4 = 0;
- var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);
- $$byval_copy1 = sp + 40|0;
- $$byval_copy = sp + 32|0;
- $8 = sp + 8|0;
- $9 = sp;
- $4 = $0;
- $5 = $1;
- $6 = $2;
- $7 = $3;
- $10 = $4;
- $11 = $6;
- $12 = $7;
- _name_class($10,$11,$12);
- $13 = $4;
- $14 = $5;
- $15 = $7;
- $16 = $6;
- _mrb_obj_value_661($8,$16);
- ;HEAP32[$$byval_copy>>2]=HEAP32[$8>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$8+4>>2]|0;
- _mrb_obj_iv_set($13,$14,$15,$$byval_copy);
- $17 = $5;
- $18 = $4;
- $19 = ((($18)) + 32|0);
- $20 = HEAP32[$19>>2]|0;
- $21 = ($17|0)!=($20|0);
- if (!($21)) {
-  STACKTOP = sp;return;
- }
- $22 = $4;
- $23 = $6;
- $24 = $4;
- $25 = (_mrb_intern_static($24,64860,9)|0);
- $26 = $5;
- _mrb_obj_value_661($9,$26);
- ;HEAP32[$$byval_copy1>>2]=HEAP32[$9>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$9+4>>2]|0;
- _mrb_obj_iv_set($22,$23,$25,$$byval_copy1);
- STACKTOP = sp;return;
-}
-function _name_class($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $10 = 0, $11 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $$byval_copy = sp + 24|0;
- $6 = sp;
- $3 = $0;
- $4 = $1;
- $5 = $2;
- $7 = $3;
- $8 = $4;
- $9 = $3;
- $10 = (_mrb_intern_static($9,64870,11)|0);
- $11 = $5;
- _mrb_symbol_value_663($6,$11);
- ;HEAP32[$$byval_copy>>2]=HEAP32[$6>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$6+4>>2]|0;
- _mrb_obj_iv_set($7,$8,$10,$$byval_copy);
- STACKTOP = sp;return;
-}
-function _mrb_symbol_value_663($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = sp;
- $2 = $1;
- $4 = ((($3)) + 4|0);
- HEAP32[$4>>2] = 4;
- $5 = $2;
- HEAP32[$3>>2] = $5;
- ;HEAP32[$0>>2]=HEAP32[$3>>2]|0;HEAP32[$0+4>>2]=HEAP32[$3+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _boot_initmod($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $4 = $2;
- $5 = (_kh_init_mt($4)|0);
- $6 = $3;
- $7 = ((($6)) + 16|0);
- HEAP32[$7>>2] = $5;
- STACKTOP = sp;return;
-}
-function _mrb_define_module($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $4 = $2;
- $5 = $2;
- $6 = $3;
- $7 = (_mrb_intern_cstr($5,$6)|0);
- $8 = $2;
- $9 = ((($8)) + 32|0);
- $10 = HEAP32[$9>>2]|0;
- $11 = (_define_module($4,$7,$10)|0);
- STACKTOP = sp;return ($11|0);
-}
-function _mrb_vm_define_module($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $$byval_copy = sp + 8|0;
- $3 = $0;
- $4 = $2;
- $5 = $3;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$1>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$1+4>>2]|0;
- _check_if_class_or_module($5,$$byval_copy);
- $6 = $3;
- $7 = $4;
- $8 = HEAP32[$1>>2]|0;
- $9 = (_define_module($6,$7,$8)|0);
- STACKTOP = sp;return ($9|0);
-}
-function _check_if_class_or_module($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $$byval_copy = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $$byval_copy = sp + 24|0;
- $vararg_buffer = sp;
- $3 = sp + 8|0;
- $2 = $0;
- $4 = ((($1)) + 4|0);
- $5 = HEAP32[$4>>2]|0;
- switch ($5|0) {
- case 10: case 12: case 9:  {
-  STACKTOP = sp;return;
-  break;
- }
- default: {
-  $6 = $2;
-  $7 = $2;
-  $8 = (_mrb_class_get($7,69204)|0);
-  $9 = $2;
-  ;HEAP32[$$byval_copy>>2]=HEAP32[$1>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$1+4>>2]|0;
-  _mrb_inspect($3,$9,$$byval_copy);
-  ;HEAP8[$vararg_buffer>>0]=HEAP8[$3>>0]|0;HEAP8[$vararg_buffer+1>>0]=HEAP8[$3+1>>0]|0;HEAP8[$vararg_buffer+2>>0]=HEAP8[$3+2>>0]|0;HEAP8[$vararg_buffer+3>>0]=HEAP8[$3+3>>0]|0;HEAP8[$vararg_buffer+4>>0]=HEAP8[$3+4>>0]|0;HEAP8[$vararg_buffer+5>>0]=HEAP8[$3+5>>0]|0;HEAP8[$vararg_buffer+6>>0]=HEAP8[$3+6>>0]|0;HEAP8[$vararg_buffer+7>>0]=HEAP8[$3+7>>0]|0;
-  _mrb_raisef($6,$8,64882,$vararg_buffer);
-  // unreachable;
- }
- }
-}
-function _mrb_class_get($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $4 = $2;
- $5 = $2;
- $6 = ((($5)) + 32|0);
- $7 = HEAP32[$6>>2]|0;
- $8 = $3;
- $9 = (_mrb_class_get_under($4,$7,$8)|0);
- STACKTOP = sp;return ($9|0);
-}
-function _mrb_class_get_under($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $0;
- $4 = $1;
- $5 = $2;
- $6 = $3;
- $7 = $4;
- $8 = $3;
- $9 = $5;
- $10 = (_mrb_intern_cstr($8,$9)|0);
- $11 = (_class_from_sym($6,$7,$10)|0);
- STACKTOP = sp;return ($11|0);
-}
-function _class_from_sym($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $10 = 0, $11 = 0, $12 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);
- $$byval_copy1 = sp + 40|0;
- $$byval_copy = sp + 32|0;
- $6 = sp + 8|0;
- $7 = sp;
- $3 = $0;
- $4 = $1;
- $5 = $2;
- $8 = $3;
- $9 = $4;
- _mrb_obj_value_661($7,$9);
- $10 = $5;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$7>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$7+4>>2]|0;
- _mrb_const_get($6,$8,$$byval_copy,$10);
- $11 = $3;
- ;HEAP32[$$byval_copy1>>2]=HEAP32[$6>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$6+4>>2]|0;
- _mrb_check_type($11,$$byval_copy1,9);
- $12 = HEAP32[$6>>2]|0;
- STACKTOP = sp;return ($12|0);
-}
-function _mrb_define_class_id($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $vararg_buffer = sp;
- $6 = sp + 8|0;
- $3 = $0;
- $4 = $1;
- $5 = $2;
- $7 = $5;
- $8 = ($7|0)!=(0|0);
- if (!($8)) {
-  $9 = $3;
-  $10 = $3;
-  $11 = $4;
-  _mrb_sym2str($6,$10,$11);
-  ;HEAP8[$vararg_buffer>>0]=HEAP8[$6>>0]|0;HEAP8[$vararg_buffer+1>>0]=HEAP8[$6+1>>0]|0;HEAP8[$vararg_buffer+2>>0]=HEAP8[$6+2>>0]|0;HEAP8[$vararg_buffer+3>>0]=HEAP8[$6+3>>0]|0;HEAP8[$vararg_buffer+4>>0]=HEAP8[$6+4>>0]|0;HEAP8[$vararg_buffer+5>>0]=HEAP8[$6+5>>0]|0;HEAP8[$vararg_buffer+6>>0]=HEAP8[$6+6>>0]|0;HEAP8[$vararg_buffer+7>>0]=HEAP8[$6+7>>0]|0;
-  _mrb_warn($9,64907,$vararg_buffer);
- }
- $12 = $3;
- $13 = $4;
- $14 = $5;
- $15 = $3;
- $16 = ((($15)) + 32|0);
- $17 = HEAP32[$16>>2]|0;
- $18 = (_define_class($12,$13,$14,$17)|0);
- STACKTOP = sp;return ($18|0);
-}
-function _define_class($0,$1,$2,$3) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- var $$byval_copy = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;
- var $29 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0;
- var $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0;
- var $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, $vararg_ptr1 = 0, $vararg_ptr2 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 96|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(96|0);
- $$byval_copy = sp + 80|0;
- $vararg_buffer = sp;
- $10 = sp + 48|0;
- $11 = sp + 40|0;
- $12 = sp + 32|0;
- $13 = sp + 24|0;
- $5 = $0;
- $6 = $1;
- $7 = $2;
- $8 = $3;
- $14 = $5;
- $15 = $8;
- _mrb_obj_value_661($10,$15);
- $16 = $6;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$10>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$10+4>>2]|0;
- $17 = (_mrb_const_defined_at($14,$$byval_copy,$16)|0);
- $18 = ($17<<24>>24)!=(0);
- $19 = $5;
- if (!($18)) {
-  $58 = $7;
-  $59 = (_mrb_class_new($19,$58)|0);
-  $9 = $59;
-  $60 = $5;
-  $61 = $8;
-  $62 = $9;
-  $63 = $6;
-  _setup_class($60,$61,$62,$63);
-  $64 = $9;
-  $4 = $64;
-  $65 = $4;
-  STACKTOP = sp;return ($65|0);
- }
- $20 = $8;
- $21 = $6;
- $22 = (_class_from_sym($19,$20,$21)|0);
- $9 = $22;
- $23 = $9;
- $24 = HEAP32[$23>>2]|0;
- $25 = $24 >>> 11;
- $26 = $25 & 524288;
- $27 = ($26|0)!=(0);
- L5: do {
-  if ($27) {
-   $28 = $9;
-   $29 = ((($28)) + 20|0);
-   $30 = HEAP32[$29>>2]|0;
-   $9 = $30;
-   while(1) {
-    $31 = $9;
-    $32 = HEAP32[$31>>2]|0;
-    $33 = $32 >>> 11;
-    $34 = $33 & 1048576;
-    $35 = ($34|0)!=(0);
-    $36 = $35 ^ 1;
-    if (!($36)) {
-     break L5;
-    }
-    $37 = $9;
-    $38 = ((($37)) + 20|0);
-    $39 = HEAP32[$38>>2]|0;
-    $9 = $39;
-   }
-  }
- } while(0);
- $40 = $7;
- $41 = ($40|0)!=(0|0);
- if ($41) {
-  $42 = $9;
-  $43 = ((($42)) + 20|0);
-  $44 = HEAP32[$43>>2]|0;
-  $45 = (_mrb_class_real($44)|0);
-  $46 = $7;
-  $47 = ($45|0)!=($46|0);
-  if ($47) {
-   $48 = $5;
-   $49 = $5;
-   $50 = (_mrb_class_get($49,69204)|0);
-   $51 = $5;
-   $52 = $6;
-   _mrb_sym2str($11,$51,$52);
-   $53 = $9;
-   $54 = ((($53)) + 20|0);
-   $55 = HEAP32[$54>>2]|0;
-   _mrb_obj_value_661($12,$55);
-   $56 = $7;
-   _mrb_obj_value_661($13,$56);
-   ;HEAP8[$vararg_buffer>>0]=HEAP8[$11>>0]|0;HEAP8[$vararg_buffer+1>>0]=HEAP8[$11+1>>0]|0;HEAP8[$vararg_buffer+2>>0]=HEAP8[$11+2>>0]|0;HEAP8[$vararg_buffer+3>>0]=HEAP8[$11+3>>0]|0;HEAP8[$vararg_buffer+4>>0]=HEAP8[$11+4>>0]|0;HEAP8[$vararg_buffer+5>>0]=HEAP8[$11+5>>0]|0;HEAP8[$vararg_buffer+6>>0]=HEAP8[$11+6>>0]|0;HEAP8[$vararg_buffer+7>>0]=HEAP8[$11+7>>0]|0;
-   $vararg_ptr1 = ((($vararg_buffer)) + 8|0);
-   ;HEAP8[$vararg_ptr1>>0]=HEAP8[$12>>0]|0;HEAP8[$vararg_ptr1+1>>0]=HEAP8[$12+1>>0]|0;HEAP8[$vararg_ptr1+2>>0]=HEAP8[$12+2>>0]|0;HEAP8[$vararg_ptr1+3>>0]=HEAP8[$12+3>>0]|0;HEAP8[$vararg_ptr1+4>>0]=HEAP8[$12+4>>0]|0;HEAP8[$vararg_ptr1+5>>0]=HEAP8[$12+5>>0]|0;HEAP8[$vararg_ptr1+6>>0]=HEAP8[$12+6>>0]|0;HEAP8[$vararg_ptr1+7>>0]=HEAP8[$12+7>>0]|0;
-   $vararg_ptr2 = ((($vararg_buffer)) + 16|0);
-   ;HEAP8[$vararg_ptr2>>0]=HEAP8[$13>>0]|0;HEAP8[$vararg_ptr2+1>>0]=HEAP8[$13+1>>0]|0;HEAP8[$vararg_ptr2+2>>0]=HEAP8[$13+2>>0]|0;HEAP8[$vararg_ptr2+3>>0]=HEAP8[$13+3>>0]|0;HEAP8[$vararg_ptr2+4>>0]=HEAP8[$13+4>>0]|0;HEAP8[$vararg_ptr2+5>>0]=HEAP8[$13+5>>0]|0;HEAP8[$vararg_ptr2+6>>0]=HEAP8[$13+6>>0]|0;HEAP8[$vararg_ptr2+7>>0]=HEAP8[$13+7>>0]|0;
-   _mrb_raisef($48,$50,64947,$vararg_buffer);
-   // unreachable;
-  }
- }
- $57 = $9;
- $4 = $57;
- $65 = $4;
- STACKTOP = sp;return ($65|0);
-}
-function _mrb_class_real($0) {
- $0 = $0|0;
- var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $2;
- $4 = ($3|0)==(0|0);
- if ($4) {
-  $1 = 0;
-  $16 = $1;
-  STACKTOP = sp;return ($16|0);
- }
- while(1) {
-  $5 = $2;
-  $6 = HEAP32[$5>>2]|0;
-  $7 = $6 & 255;
-  $8 = ($7|0)==(12);
-  if ($8) {
-   $17 = 1;
-  } else {
-   $9 = $2;
-   $10 = HEAP32[$9>>2]|0;
-   $11 = $10 & 255;
-   $12 = ($11|0)==(11);
-   $17 = $12;
-  }
-  $13 = $2;
-  if (!($17)) {
-   break;
-  }
-  $14 = ((($13)) + 20|0);
-  $15 = HEAP32[$14>>2]|0;
-  $2 = $15;
- }
- $1 = $13;
- $16 = $1;
- STACKTOP = sp;return ($16|0);
-}
-function _mrb_class_new($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;
- var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $5 = $3;
- $6 = ($5|0)!=(0|0);
- if ($6) {
-  $7 = $2;
-  $8 = $3;
-  _mrb_check_inheritable($7,$8);
- }
- $9 = $2;
- $10 = $3;
- $11 = (_boot_defclass($9,$10)|0);
- $4 = $11;
- $12 = $3;
- $13 = ($12|0)!=(0|0);
- if (!($13)) {
-  $31 = $2;
-  $32 = $4;
-  _prepare_singleton_class($31,$32);
-  $33 = $4;
-  STACKTOP = sp;return ($33|0);
- }
- $14 = $4;
- $15 = HEAP32[$14>>2]|0;
- $16 = $15 >>> 11;
- $17 = $16 & -256;
- $18 = $3;
- $19 = HEAP32[$18>>2]|0;
- $20 = $19 >>> 11;
- $21 = $20 & 255;
- $22 = $21&255;
- $23 = $22 << 24 >> 24;
- $24 = $17 | $23;
- $25 = $4;
- $26 = HEAP32[$25>>2]|0;
- $27 = $24 & 2097151;
- $28 = $27 << 11;
- $29 = $26 & 2047;
- $30 = $29 | $28;
- HEAP32[$25>>2] = $30;
- $31 = $2;
- $32 = $4;
- _prepare_singleton_class($31,$32);
- $33 = $4;
- STACKTOP = sp;return ($33|0);
-}
-function _mrb_check_inheritable($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $3 = 0;
- var $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $vararg_buffer = sp;
- $4 = sp + 8|0;
- $2 = $0;
- $3 = $1;
- $5 = $3;
- $6 = HEAP32[$5>>2]|0;
- $7 = $6 & 255;
- $8 = ($7|0)!=(9);
- if ($8) {
-  $9 = $2;
-  $10 = $2;
-  $11 = (_mrb_class_get($10,69204)|0);
-  $12 = $3;
-  _mrb_obj_value_661($4,$12);
-  ;HEAP8[$vararg_buffer>>0]=HEAP8[$4>>0]|0;HEAP8[$vararg_buffer+1>>0]=HEAP8[$4+1>>0]|0;HEAP8[$vararg_buffer+2>>0]=HEAP8[$4+2>>0]|0;HEAP8[$vararg_buffer+3>>0]=HEAP8[$4+3>>0]|0;HEAP8[$vararg_buffer+4>>0]=HEAP8[$4+4>>0]|0;HEAP8[$vararg_buffer+5>>0]=HEAP8[$4+5>>0]|0;HEAP8[$vararg_buffer+6>>0]=HEAP8[$4+6>>0]|0;HEAP8[$vararg_buffer+7>>0]=HEAP8[$4+7>>0]|0;
-  _mrb_raisef($9,$11,64992,$vararg_buffer);
-  // unreachable;
- }
- $13 = $3;
- $14 = HEAP32[$13>>2]|0;
- $15 = $14 & 255;
- $16 = ($15|0)==(12);
- if ($16) {
-  $17 = $2;
-  $18 = $2;
-  $19 = (_mrb_class_get($18,69204)|0);
-  _mrb_raise($17,$19,65030);
-  // unreachable;
- }
- $20 = $3;
- $21 = $2;
- $22 = ((($21)) + 36|0);
- $23 = HEAP32[$22>>2]|0;
- $24 = ($20|0)==($23|0);
- if ($24) {
-  $25 = $2;
-  $26 = $2;
-  $27 = (_mrb_class_get($26,69204)|0);
-  _mrb_raise($25,$27,65069);
-  // unreachable;
- } else {
-  STACKTOP = sp;return;
- }
-}
-function _boot_defclass($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $3 = 0;
- var $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $5 = $2;
- $6 = $2;
- $7 = ((($6)) + 36|0);
- $8 = HEAP32[$7>>2]|0;
- $9 = (_mrb_obj_alloc($5,9,$8)|0);
- $4 = $9;
- $10 = $3;
- $11 = ($10|0)!=(0|0);
- if ($11) {
-  $12 = $3;
-  $13 = $4;
-  $14 = ((($13)) + 20|0);
-  HEAP32[$14>>2] = $12;
-  $15 = $2;
-  $16 = $4;
-  $17 = $3;
-  _mrb_field_write_barrier($15,$16,$17);
- } else {
-  $18 = $2;
-  $19 = ((($18)) + 32|0);
-  $20 = HEAP32[$19>>2]|0;
-  $21 = $4;
-  $22 = ((($21)) + 20|0);
-  HEAP32[$22>>2] = $20;
- }
- $23 = $2;
- $24 = (_kh_init_mt($23)|0);
- $25 = $4;
- $26 = ((($25)) + 16|0);
- HEAP32[$26>>2] = $24;
- $27 = $4;
- STACKTOP = sp;return ($27|0);
-}
-function _prepare_singleton_class($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $$byval_copy = 0, $$sink3$sink = 0, $$sink5$sink = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0;
- var $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0;
- var $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0;
- var $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0;
- var $80 = 0, $81 = 0, $82 = 0, $83 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $$byval_copy = sp + 24|0;
- $6 = sp;
- $2 = $0;
- $3 = $1;
- $7 = $3;
- $8 = ((($7)) + 4|0);
- $9 = HEAP32[$8>>2]|0;
- $10 = HEAP32[$9>>2]|0;
- $11 = $10 & 255;
- $12 = ($11|0)==(12);
- if ($12) {
-  STACKTOP = sp;return;
- }
- $13 = $2;
- $14 = $2;
- $15 = ((($14)) + 36|0);
- $16 = HEAP32[$15>>2]|0;
- $17 = (_mrb_obj_alloc($13,12,$16)|0);
- $4 = $17;
- $18 = $2;
- $19 = (_kh_init_mt($18)|0);
- $20 = $4;
- $21 = ((($20)) + 16|0);
- HEAP32[$21>>2] = $19;
- $22 = $4;
- $23 = ((($22)) + 12|0);
- HEAP32[$23>>2] = 0;
- $24 = $3;
- $25 = HEAP32[$24>>2]|0;
- $26 = $25 & 255;
- $27 = ($26|0)==(9);
- $28 = $3;
- do {
-  if ($27) {
-   $5 = $28;
-   $29 = $5;
-   $30 = ((($29)) + 20|0);
-   $31 = HEAP32[$30>>2]|0;
-   $32 = ($31|0)!=(0|0);
-   if ($32) {
-    $37 = $5;
-    $38 = ((($37)) + 20|0);
-    $39 = HEAP32[$38>>2]|0;
-    $40 = ((($39)) + 4|0);
-    $41 = HEAP32[$40>>2]|0;
-    $42 = $4;
-    $$sink3$sink = $41;$$sink5$sink = $42;
-    break;
-   } else {
-    $33 = $2;
-    $34 = ((($33)) + 36|0);
-    $35 = HEAP32[$34>>2]|0;
-    $36 = $4;
-    $$sink3$sink = $35;$$sink5$sink = $36;
-    break;
-   }
-  } else {
-   $43 = HEAP32[$28>>2]|0;
-   $44 = $43 & 255;
-   $45 = ($44|0)==(12);
-   $46 = $3;
-   if (!($45)) {
-    $66 = ((($46)) + 4|0);
-    $67 = HEAP32[$66>>2]|0;
-    $68 = $4;
-    $$sink3$sink = $67;$$sink5$sink = $68;
-    break;
-   }
-   $5 = $46;
-   while(1) {
-    $47 = $5;
-    $48 = ((($47)) + 20|0);
-    $49 = HEAP32[$48>>2]|0;
-    $50 = HEAP32[$49>>2]|0;
-    $51 = $50 & 255;
-    $52 = ($51|0)==(11);
-    if (!($52)) {
-     break;
-    }
-    $53 = $5;
-    $54 = ((($53)) + 20|0);
-    $55 = HEAP32[$54>>2]|0;
-    $5 = $55;
-   }
-   $56 = $2;
-   $57 = $5;
-   $58 = ((($57)) + 20|0);
-   $59 = HEAP32[$58>>2]|0;
-   _prepare_singleton_class($56,$59);
-   $60 = $5;
-   $61 = ((($60)) + 20|0);
-   $62 = HEAP32[$61>>2]|0;
-   $63 = ((($62)) + 4|0);
-   $64 = HEAP32[$63>>2]|0;
-   $65 = $4;
-   $$sink3$sink = $64;$$sink5$sink = $65;
-  }
- } while(0);
- $69 = ((($$sink5$sink)) + 20|0);
- HEAP32[$69>>2] = $$sink3$sink;
- $70 = $4;
- $71 = $3;
- $72 = ((($71)) + 4|0);
- HEAP32[$72>>2] = $70;
- $73 = $2;
- $74 = $3;
- $75 = $4;
- _mrb_field_write_barrier($73,$74,$75);
- $76 = $2;
- $77 = $4;
- $78 = $3;
- _mrb_field_write_barrier($76,$77,$78);
- $79 = $2;
- $80 = $4;
- $81 = $2;
- $82 = (_mrb_intern_static($81,68237,12)|0);
- $83 = $3;
- _mrb_obj_value_661($6,$83);
- ;HEAP32[$$byval_copy>>2]=HEAP32[$6>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$6+4>>2]|0;
- _mrb_obj_iv_set($79,$80,$82,$$byval_copy);
- STACKTOP = sp;return;
-}
-function _mrb_define_class($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $0;
- $4 = $1;
- $5 = $2;
- $6 = $3;
- $7 = $3;
- $8 = $4;
- $9 = (_mrb_intern_cstr($7,$8)|0);
- $10 = $5;
- $11 = (_mrb_define_class_id($6,$9,$10)|0);
- STACKTOP = sp;return ($11|0);
-}
-function _mrb_vm_define_class($0,$1,$2,$3) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- var $$byval_copy = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;
- var $29 = 0, $30 = 0, $31 = 0, $32 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $$byval_copy = sp + 24|0;
- $vararg_buffer = sp;
- $4 = $0;
- $5 = $3;
- $8 = ((($2)) + 4|0);
- $9 = HEAP32[$8>>2]|0;
- $10 = ($9|0)==(0);
- if ($10) {
-  $11 = HEAP32[$2>>2]|0;
-  $12 = ($11|0)!=(0);
-  if ($12) {
-   label = 3;
-  } else {
-   $6 = 0;
-  }
- } else {
-  label = 3;
- }
- do {
-  if ((label|0) == 3) {
-   $13 = ((($2)) + 4|0);
-   $14 = HEAP32[$13>>2]|0;
-   $15 = ($14|0)!=(9);
-   if ($15) {
-    $16 = $4;
-    $17 = $4;
-    $18 = (_mrb_class_get($17,69204)|0);
-    ;HEAP8[$vararg_buffer>>0]=HEAP8[$2>>0]|0;HEAP8[$vararg_buffer+1>>0]=HEAP8[$2+1>>0]|0;HEAP8[$vararg_buffer+2>>0]=HEAP8[$2+2>>0]|0;HEAP8[$vararg_buffer+3>>0]=HEAP8[$2+3>>0]|0;HEAP8[$vararg_buffer+4>>0]=HEAP8[$2+4>>0]|0;HEAP8[$vararg_buffer+5>>0]=HEAP8[$2+5>>0]|0;HEAP8[$vararg_buffer+6>>0]=HEAP8[$2+6>>0]|0;HEAP8[$vararg_buffer+7>>0]=HEAP8[$2+7>>0]|0;
-    _mrb_raisef($16,$18,64992,$vararg_buffer);
-    // unreachable;
-   } else {
-    $19 = HEAP32[$2>>2]|0;
-    $6 = $19;
-    break;
-   }
-  }
- } while(0);
- $20 = $4;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$1>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$1+4>>2]|0;
- _check_if_class_or_module($20,$$byval_copy);
- $21 = $4;
- $22 = $5;
- $23 = $6;
- $24 = HEAP32[$1>>2]|0;
- $25 = (_define_class($21,$22,$23,$24)|0);
- $7 = $25;
- $26 = $4;
- $27 = $7;
- $28 = ((($27)) + 20|0);
- $29 = HEAP32[$28>>2]|0;
- $30 = (_mrb_class_real($29)|0);
- $31 = $7;
- _mrb_class_inherited($26,$30,$31);
- $32 = $7;
- STACKTOP = sp;return ($32|0);
-}
-function _mrb_class_inherited($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);
- $$byval_copy = sp + 48|0;
- $vararg_buffer = sp;
- $6 = sp + 24|0;
- $7 = sp + 16|0;
- $8 = sp + 8|0;
- $3 = $0;
- $4 = $1;
- $5 = $2;
- $9 = $4;
- $10 = ($9|0)!=(0|0);
- if (!($10)) {
-  $11 = $3;
-  $12 = ((($11)) + 32|0);
-  $13 = HEAP32[$12>>2]|0;
-  $4 = $13;
- }
- $14 = $3;
- $15 = $4;
- _mrb_obj_value_661($6,$15);
- $16 = $5;
- _mrb_obj_value_661($7,$16);
- ;HEAP8[$vararg_buffer>>0]=HEAP8[$7>>0]|0;HEAP8[$vararg_buffer+1>>0]=HEAP8[$7+1>>0]|0;HEAP8[$vararg_buffer+2>>0]=HEAP8[$7+2>>0]|0;HEAP8[$vararg_buffer+3>>0]=HEAP8[$7+3>>0]|0;HEAP8[$vararg_buffer+4>>0]=HEAP8[$7+4>>0]|0;HEAP8[$vararg_buffer+5>>0]=HEAP8[$7+5>>0]|0;HEAP8[$vararg_buffer+6>>0]=HEAP8[$7+6>>0]|0;HEAP8[$vararg_buffer+7>>0]=HEAP8[$7+7>>0]|0;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$6>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$6+4>>2]|0;
- _mrb_funcall($8,$14,$$byval_copy,65098,1,$vararg_buffer);
- STACKTOP = sp;return;
-}
-function _mrb_class_defined($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $$byval_copy = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0;
- var label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);
- $$byval_copy = sp + 24|0;
- $5 = sp + 8|0;
- $6 = sp;
- $3 = $0;
- $4 = $1;
- $7 = $3;
- $8 = $4;
- _mrb_check_intern_cstr($5,$7,$8);
- $9 = ((($5)) + 4|0);
- $10 = HEAP32[$9>>2]|0;
- $11 = ($10|0)==(0);
- if ($11) {
-  $12 = HEAP32[$5>>2]|0;
-  $13 = ($12|0)!=(0);
-  if (!($13)) {
-   $2 = 0;
-   $20 = $2;
-   STACKTOP = sp;return ($20|0);
-  }
- }
- $14 = $3;
- $15 = $3;
- $16 = ((($15)) + 32|0);
- $17 = HEAP32[$16>>2]|0;
- _mrb_obj_value_661($6,$17);
- $18 = HEAP32[$5>>2]|0;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$6>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$6+4>>2]|0;
- $19 = (_mrb_const_defined($14,$$byval_copy,$18)|0);
- $2 = $19;
- $20 = $2;
- STACKTOP = sp;return ($20|0);
-}
-function _mrb_define_method_raw($0,$1,$2,$3) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;
- var $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0;
- var $49 = 0, $5 = 0, $50 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $4 = $0;
- $5 = $1;
- $6 = $2;
- $7 = $3;
- $10 = $5;
- $11 = HEAP32[$10>>2]|0;
- $12 = $11 >>> 11;
- $13 = $12 & 524288;
- $14 = ($13|0)!=(0);
- L1: do {
-  if ($14) {
-   $15 = $5;
-   $16 = ((($15)) + 20|0);
-   $17 = HEAP32[$16>>2]|0;
-   $5 = $17;
-   while(1) {
-    $18 = $5;
-    $19 = HEAP32[$18>>2]|0;
-    $20 = $19 >>> 11;
-    $21 = $20 & 1048576;
-    $22 = ($21|0)!=(0);
-    $23 = $22 ^ 1;
-    if (!($23)) {
-     break L1;
-    }
-    $24 = $5;
-    $25 = ((($24)) + 20|0);
-    $26 = HEAP32[$25>>2]|0;
-    $5 = $26;
-   }
-  }
- } while(0);
- $27 = $5;
- $28 = ((($27)) + 16|0);
- $29 = HEAP32[$28>>2]|0;
- $8 = $29;
- $30 = $8;
- $31 = ($30|0)!=(0|0);
- if (!($31)) {
-  $32 = $4;
-  $33 = (_kh_init_mt($32)|0);
-  $34 = $5;
-  $35 = ((($34)) + 16|0);
-  HEAP32[$35>>2] = $33;
-  $8 = $33;
- }
- $36 = $4;
- $37 = $8;
- $38 = $6;
- $39 = (_kh_put_mt($36,$37,$38,0)|0);
- $9 = $39;
- $40 = $7;
- $41 = $8;
- $42 = ((($41)) + 20|0);
- $43 = HEAP32[$42>>2]|0;
- $44 = $9;
- $45 = (($43) + ($44<<2)|0);
- HEAP32[$45>>2] = $40;
- $46 = $7;
- $47 = ($46|0)!=(0|0);
- if (!($47)) {
-  STACKTOP = sp;return;
- }
- $48 = $4;
- $49 = $5;
- $50 = $7;
- _mrb_field_write_barrier($48,$49,$50);
- STACKTOP = sp;return;
-}
-function _mrb_define_method_id($0,$1,$2,$3,$4) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- $4 = $4|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0;
- var $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $5 = $0;
- $6 = $1;
- $7 = $2;
- $8 = $3;
- $9 = $4;
- $12 = $5;
- $13 = (_mrb_gc_arena_save($12)|0);
- $11 = $13;
- $14 = $5;
- $15 = $8;
- $16 = (_mrb_proc_new_cfunc($14,$15)|0);
- $10 = $16;
- $17 = $6;
- $18 = $10;
- $19 = ((($18)) + 16|0);
- HEAP32[$19>>2] = $17;
- $20 = $5;
- $21 = $6;
- $22 = $7;
- $23 = $10;
- _mrb_define_method_raw($20,$21,$22,$23);
- $24 = $5;
- $25 = $11;
- _mrb_gc_arena_restore($24,$25);
- STACKTOP = sp;return;
-}
-function _mrb_define_method($0,$1,$2,$3,$4) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- $4 = $4|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $5 = $0;
- $6 = $1;
- $7 = $2;
- $8 = $3;
- $9 = $4;
- $10 = $5;
- $11 = $6;
- $12 = $5;
- $13 = $7;
- $14 = (_mrb_intern_cstr($12,$13)|0);
- $15 = $8;
- $16 = $9;
- _mrb_define_method_id($10,$11,$14,$15,$16);
- STACKTOP = sp;return;
-}
-function _mrb_nil_value_689($0) {
- $0 = $0|0;
- var $1 = 0, $2 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $1 = sp;
- $2 = ((($1)) + 4|0);
- HEAP32[$2>>2] = 0;
- HEAP32[$1>>2] = 0;
- ;HEAP32[$0>>2]=HEAP32[$1>>2]|0;HEAP32[$0+4>>2]=HEAP32[$1+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_get_args($0,$1,$varargs) {
- $0 = $0|0;
- $1 = $1|0;
- $varargs = $varargs|0;
- var $$byval_copy = 0, $$byval_copy10 = 0, $$byval_copy2 = 0, $$byval_copy3 = 0, $$byval_copy4 = 0, $$byval_copy5 = 0, $$byval_copy6 = 0, $$byval_copy7 = 0, $$byval_copy8 = 0, $$byval_copy9 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0;
- var $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0;
- var $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0, $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0;
- var $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0, $152 = 0, $153 = 0, $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0;
- var $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0, $170 = 0, $171 = 0, $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0;
- var $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0, $188 = 0, $189 = 0, $19 = 0, $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0, $197 = 0, $198 = 0, $199 = 0;
- var $2 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0, $204 = 0, $205 = 0, $206 = 0, $207 = 0, $208 = 0, $209 = 0, $21 = 0, $210 = 0, $211 = 0, $212 = 0, $213 = 0, $214 = 0, $215 = 0, $216 = 0;
- var $217 = 0, $218 = 0, $219 = 0, $22 = 0, $220 = 0, $221 = 0, $222 = 0, $223 = 0, $224 = 0, $225 = 0, $226 = 0, $227 = 0, $228 = 0, $229 = 0, $23 = 0, $230 = 0, $231 = 0, $232 = 0, $233 = 0, $234 = 0;
- var $235 = 0, $236 = 0, $237 = 0, $238 = 0, $239 = 0, $24 = 0, $240 = 0, $241 = 0, $242 = 0, $243 = 0, $244 = 0, $245 = 0, $246 = 0, $247 = 0, $248 = 0, $249 = 0, $25 = 0, $250 = 0, $251 = 0, $252 = 0;
- var $253 = 0, $254 = 0, $255 = 0, $256 = 0, $257 = 0, $258 = 0, $259 = 0, $26 = 0, $260 = 0, $261 = 0, $262 = 0, $263 = 0, $264 = 0, $265 = 0, $266 = 0, $267 = 0, $268 = 0, $269 = 0, $27 = 0, $270 = 0;
- var $271 = 0, $272 = 0, $273 = 0, $274 = 0, $275 = 0, $276 = 0, $277 = 0, $278 = 0, $279 = 0, $28 = 0, $280 = 0, $281 = 0, $282 = 0, $283 = 0, $284 = 0, $285 = 0, $286 = 0, $287 = 0, $288 = 0, $289 = 0;
- var $29 = 0, $290 = 0, $291 = 0, $292 = 0, $293 = 0, $294 = 0, $295 = 0, $296 = 0, $297 = 0, $298 = 0, $299 = 0, $3 = 0, $30 = 0, $300 = 0, $301 = 0, $302 = 0, $303 = 0, $304 = 0, $305 = 0, $306 = 0;
- var $307 = 0, $308 = 0, $309 = 0, $31 = 0, $310 = 0, $311 = 0, $312 = 0, $313 = 0, $314 = 0, $315 = 0, $316 = 0, $317 = 0, $318 = 0, $319 = 0, $32 = 0, $320 = 0, $321 = 0, $322 = 0, $323 = 0, $324 = 0;
- var $325 = 0, $326 = 0, $327 = 0, $328 = 0, $329 = 0, $33 = 0, $330 = 0, $331 = 0, $332 = 0, $333 = 0, $334 = 0, $335 = 0, $336 = 0, $337 = 0, $338 = 0, $339 = 0, $34 = 0, $340 = 0, $341 = 0, $342 = 0;
- var $343 = 0, $344 = 0, $345 = 0, $346 = 0, $347 = 0, $348 = 0, $349 = 0, $35 = 0, $350 = 0, $351 = 0, $352 = 0, $353 = 0, $354 = 0, $355 = 0, $356 = 0, $357 = 0, $358 = 0, $359 = 0, $36 = 0, $360 = 0;
- var $361 = 0, $362 = 0, $363 = 0, $364 = 0, $365 = 0, $366 = 0, $367 = 0, $368 = 0, $369 = 0, $37 = 0, $370 = 0, $371 = 0, $372 = 0, $373 = 0, $374 = 0, $375 = 0, $376 = 0, $377 = 0, $378 = 0, $379 = 0;
- var $38 = 0, $380 = 0, $381 = 0, $382 = 0, $383 = 0, $384 = 0, $385 = 0, $386 = 0, $387 = 0, $388 = 0, $389 = 0, $39 = 0, $390 = 0, $391 = 0, $392 = 0, $393 = 0, $394 = 0, $395 = 0, $396 = 0, $397 = 0;
- var $398 = 0, $399 = 0, $4 = 0, $40 = 0, $400 = 0, $401 = 0, $402 = 0, $403 = 0, $404 = 0, $405 = 0, $406 = 0, $407 = 0, $408 = 0, $409 = 0, $41 = 0, $410 = 0, $411 = 0, $412 = 0, $413 = 0, $414 = 0;
- var $415 = 0, $416 = 0, $417 = 0, $418 = 0, $419 = 0, $42 = 0, $420 = 0, $421 = 0, $422 = 0, $423 = 0, $424 = 0, $425 = 0, $426 = 0, $427 = 0, $428 = 0, $429 = 0, $43 = 0, $430 = 0, $431 = 0, $432 = 0;
- var $433 = 0, $434 = 0, $435 = 0, $436 = 0, $437 = 0, $438 = 0, $439 = 0, $44 = 0, $440 = 0, $441 = 0.0, $442 = 0, $443 = 0, $444 = 0, $445 = 0, $446 = 0, $447 = 0, $448 = 0, $449 = 0, $45 = 0, $450 = 0;
- var $451 = 0, $452 = 0, $453 = 0, $454 = 0, $455 = 0, $456 = 0, $457 = 0, $458 = 0, $459 = 0, $46 = 0, $460 = 0, $461 = 0, $462 = 0, $463 = 0, $464 = 0, $465 = 0.0, $466 = 0.0, $467 = 0, $468 = 0.0, $469 = 0;
- var $47 = 0.0, $470 = 0, $471 = 0, $472 = 0, $473 = 0.0, $474 = 0, $475 = 0, $476 = 0, $477 = 0, $478 = 0, $479 = 0, $48 = 0, $480 = 0, $481 = 0, $482 = 0, $483 = 0, $484 = 0, $485 = 0, $486 = 0, $487 = 0;
- var $488 = 0, $489 = 0, $49 = 0, $490 = 0, $491 = 0, $492 = 0, $493 = 0, $494 = 0, $495 = 0, $496 = 0, $497 = 0, $498 = 0, $499 = 0, $5 = 0, $50 = 0, $500 = 0, $501 = 0, $502 = 0, $503 = 0, $504 = 0;
- var $505 = 0, $506 = 0, $507 = 0, $508 = 0, $509 = 0, $51 = 0, $510 = 0, $511 = 0, $512 = 0, $513 = 0, $514 = 0, $515 = 0, $516 = 0, $517 = 0, $518 = 0, $519 = 0, $52 = 0, $520 = 0, $521 = 0, $522 = 0;
- var $523 = 0, $524 = 0, $525 = 0, $526 = 0, $527 = 0, $528 = 0, $529 = 0, $53 = 0, $530 = 0, $531 = 0, $532 = 0, $533 = 0, $534 = 0, $535 = 0, $536 = 0, $537 = 0, $538 = 0, $539 = 0, $54 = 0, $540 = 0;
- var $541 = 0, $542 = 0, $543 = 0, $544 = 0, $545 = 0, $546 = 0, $547 = 0, $548 = 0, $549 = 0, $55 = 0, $550 = 0, $551 = 0, $552 = 0, $553 = 0, $554 = 0, $555 = 0, $556 = 0, $557 = 0, $558 = 0, $559 = 0;
- var $56 = 0, $560 = 0, $561 = 0, $562 = 0, $563 = 0, $564 = 0, $565 = 0, $566 = 0, $567 = 0, $568 = 0, $569 = 0, $57 = 0, $570 = 0, $571 = 0, $572 = 0, $573 = 0, $574 = 0, $575 = 0, $576 = 0, $577 = 0;
- var $578 = 0, $579 = 0, $58 = 0, $580 = 0, $581 = 0, $582 = 0, $583 = 0, $584 = 0, $585 = 0, $586 = 0, $587 = 0, $588 = 0, $589 = 0, $59 = 0, $590 = 0, $591 = 0, $592 = 0, $593 = 0, $594 = 0, $595 = 0;
- var $596 = 0, $597 = 0, $598 = 0, $599 = 0, $6 = 0, $60 = 0, $600 = 0, $601 = 0, $602 = 0, $603 = 0, $604 = 0, $605 = 0, $606 = 0, $607 = 0, $608 = 0, $609 = 0, $61 = 0, $610 = 0, $611 = 0, $612 = 0;
- var $613 = 0, $614 = 0, $615 = 0, $616 = 0, $617 = 0, $618 = 0, $619 = 0, $62 = 0, $620 = 0, $621 = 0, $622 = 0, $623 = 0, $624 = 0, $625 = 0, $626 = 0, $627 = 0, $628 = 0, $629 = 0, $63 = 0, $630 = 0;
- var $631 = 0, $632 = 0, $633 = 0, $634 = 0, $635 = 0, $636 = 0, $637 = 0, $638 = 0, $639 = 0, $64 = 0, $640 = 0, $641 = 0, $642 = 0, $643 = 0, $644 = 0, $645 = 0, $646 = 0, $647 = 0, $648 = 0, $649 = 0;
- var $65 = 0, $650 = 0, $651 = 0, $652 = 0, $653 = 0, $654 = 0, $655 = 0, $656 = 0, $657 = 0, $658 = 0, $659 = 0, $66 = 0, $660 = 0, $661 = 0, $662 = 0, $663 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0;
- var $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0;
- var $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $arglist_current = 0, $arglist_current12 = 0, $arglist_current15 = 0, $arglist_current18 = 0, $arglist_current21 = 0, $arglist_current24 = 0, $arglist_current27 = 0, $arglist_current3 = 0;
- var $arglist_current30 = 0, $arglist_current33 = 0, $arglist_current36 = 0, $arglist_current39 = 0, $arglist_current42 = 0, $arglist_current45 = 0, $arglist_current48 = 0, $arglist_current51 = 0, $arglist_current54 = 0, $arglist_current57 = 0, $arglist_current6 = 0, $arglist_current9 = 0, $arglist_next = 0, $arglist_next10 = 0, $arglist_next13 = 0, $arglist_next16 = 0, $arglist_next19 = 0, $arglist_next22 = 0, $arglist_next25 = 0, $arglist_next28 = 0;
- var $arglist_next31 = 0, $arglist_next34 = 0, $arglist_next37 = 0, $arglist_next4 = 0, $arglist_next40 = 0, $arglist_next43 = 0, $arglist_next46 = 0, $arglist_next49 = 0, $arglist_next52 = 0, $arglist_next55 = 0, $arglist_next58 = 0, $arglist_next7 = 0, $expanded = 0, $expanded101 = 0, $expanded102 = 0, $expanded104 = 0, $expanded105 = 0, $expanded106 = 0, $expanded108 = 0, $expanded109 = 0;
- var $expanded11 = 0, $expanded111 = 0, $expanded112 = 0, $expanded113 = 0, $expanded115 = 0, $expanded116 = 0, $expanded118 = 0, $expanded119 = 0, $expanded120 = 0, $expanded122 = 0, $expanded123 = 0, $expanded125 = 0, $expanded126 = 0, $expanded127 = 0, $expanded129 = 0, $expanded13 = 0, $expanded130 = 0, $expanded132 = 0, $expanded133 = 0, $expanded134 = 0;
- var $expanded136 = 0, $expanded137 = 0, $expanded139 = 0, $expanded14 = 0, $expanded140 = 0, $expanded141 = 0, $expanded143 = 0, $expanded144 = 0, $expanded146 = 0, $expanded147 = 0, $expanded148 = 0, $expanded15 = 0, $expanded17 = 0, $expanded18 = 0, $expanded20 = 0, $expanded21 = 0, $expanded22 = 0, $expanded24 = 0, $expanded25 = 0, $expanded27 = 0;
- var $expanded28 = 0, $expanded29 = 0, $expanded31 = 0, $expanded32 = 0, $expanded34 = 0, $expanded35 = 0, $expanded36 = 0, $expanded38 = 0, $expanded39 = 0, $expanded41 = 0, $expanded42 = 0, $expanded43 = 0, $expanded45 = 0, $expanded46 = 0, $expanded48 = 0, $expanded49 = 0, $expanded50 = 0, $expanded52 = 0, $expanded53 = 0, $expanded55 = 0;
- var $expanded56 = 0, $expanded57 = 0, $expanded59 = 0, $expanded60 = 0, $expanded62 = 0, $expanded63 = 0, $expanded64 = 0, $expanded66 = 0, $expanded67 = 0, $expanded69 = 0, $expanded70 = 0, $expanded71 = 0, $expanded73 = 0, $expanded74 = 0, $expanded76 = 0, $expanded77 = 0, $expanded78 = 0, $expanded80 = 0, $expanded81 = 0, $expanded83 = 0;
- var $expanded84 = 0, $expanded85 = 0, $expanded87 = 0, $expanded88 = 0, $expanded90 = 0, $expanded91 = 0, $expanded92 = 0, $expanded94 = 0, $expanded95 = 0, $expanded97 = 0, $expanded98 = 0, $expanded99 = 0, $or$cond = 0, $vararg_buffer = 0, $vararg_buffer59 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 448|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(448|0);
- $$byval_copy10 = sp + 424|0;
- $$byval_copy9 = sp + 416|0;
- $$byval_copy8 = sp + 408|0;
- $$byval_copy7 = sp + 400|0;
- $$byval_copy6 = sp + 392|0;
- $$byval_copy5 = sp + 384|0;
- $$byval_copy4 = sp + 376|0;
- $$byval_copy3 = sp + 368|0;
- $$byval_copy2 = sp + 360|0;
- $$byval_copy = sp + 352|0;
- $vararg_buffer59 = sp + 8|0;
- $vararg_buffer = sp;
- $4 = sp + 434|0;
- $7 = sp + 320|0;
- $16 = sp + 288|0;
- $19 = sp + 272|0;
- $22 = sp + 256|0;
- $25 = sp + 240|0;
- $26 = sp + 232|0;
- $31 = sp + 208|0;
- $32 = sp + 200|0;
- $35 = sp + 184|0;
- $36 = sp + 176|0;
- $42 = sp + 144|0;
- $48 = sp + 112|0;
- $51 = sp + 96|0;
- $54 = sp + 80|0;
- $68 = sp + 16|0;
- $2 = $0;
- $3 = $1;
- $5 = 0;
- $69 = $2;
- $70 = ((($69)) + 12|0);
- $71 = HEAP32[$70>>2]|0;
- $72 = ((($71)) + 4|0);
- $73 = HEAP32[$72>>2]|0;
- $74 = ((($73)) + 8|0);
- $6 = $74;
- $75 = $2;
- $76 = ((($75)) + 12|0);
- $77 = HEAP32[$76>>2]|0;
- $78 = ((($77)) + 16|0);
- $79 = HEAP32[$78>>2]|0;
- $80 = ((($79)) + 36|0);
- $81 = HEAP32[$80>>2]|0;
- $8 = $81;
- $9 = 0;
- $10 = 1;
- HEAP32[$7>>2] = $varargs;
- $82 = $8;
- $83 = ($82|0)<(0);
- if ($83) {
-  $84 = $2;
-  $85 = ((($84)) + 12|0);
-  $86 = HEAP32[$85>>2]|0;
-  $87 = ((($86)) + 4|0);
-  $88 = HEAP32[$87>>2]|0;
-  $89 = ((($88)) + 8|0);
-  $90 = HEAP32[$89>>2]|0;
-  $11 = $90;
-  $91 = $11;
-  $92 = ((($91)) + 12|0);
-  $93 = HEAP32[$92>>2]|0;
-  $8 = $93;
-  $94 = $11;
-  $95 = ((($94)) + 20|0);
-  $96 = HEAP32[$95>>2]|0;
-  $6 = $96;
- }
- L3: while(1) {
-  $97 = $3;
-  $98 = ((($97)) + 1|0);
-  $3 = $98;
-  $99 = HEAP8[$97>>0]|0;
-  HEAP8[$4>>0] = $99;
-  $100 = ($99<<24>>24)!=(0);
-  $101 = HEAP8[$4>>0]|0;
-  if (!($100)) {
-   label = 98;
-   break;
-  }
-  $102 = $101 << 24 >> 24;
-  switch ($102|0) {
-  case 63: case 38: case 42: case 124:  {
-   break;
-  }
-  default: {
-   $103 = $8;
-   $104 = $5;
-   $105 = ($103|0)<=($104|0);
-   if ($105) {
-    $106 = $9;
-    $107 = ($106<<24>>24)!=(0);
-    if (!($107)) {
-     label = 8;
-     break L3;
-    }
-    $10 = 0;
-   }
-  }
-  }
-  $111 = HEAP8[$4>>0]|0;
-  $112 = $111 << 24 >> 24;
-  do {
-   switch ($112|0) {
-   case 111:  {
-    $arglist_current = HEAP32[$7>>2]|0;
-    $113 = $arglist_current;
-    $114 = ((0) + 4|0);
-    $expanded11 = $114;
-    $expanded = (($expanded11) - 1)|0;
-    $115 = (($113) + ($expanded))|0;
-    $116 = ((0) + 4|0);
-    $expanded15 = $116;
-    $expanded14 = (($expanded15) - 1)|0;
-    $expanded13 = $expanded14 ^ -1;
-    $117 = $115 & $expanded13;
-    $118 = $117;
-    $119 = HEAP32[$118>>2]|0;
-    $arglist_next = ((($118)) + 4|0);
-    HEAP32[$7>>2] = $arglist_next;
-    $13 = $119;
-    $120 = $13;
-    $12 = $120;
-    $121 = $5;
-    $122 = $8;
-    $123 = ($121|0)<($122|0);
-    if (!($123)) {
-     continue L3;
-    }
-    $124 = $12;
-    $125 = $6;
-    $126 = ((($125)) + 8|0);
-    $6 = $126;
-    ;HEAP32[$124>>2]=HEAP32[$125>>2]|0;HEAP32[$124+4>>2]=HEAP32[$125+4>>2]|0;
-    $127 = $5;
-    $128 = (($127) + 1)|0;
-    $5 = $128;
-    continue L3;
-    break;
-   }
-   case 67:  {
-    $arglist_current3 = HEAP32[$7>>2]|0;
-    $129 = $arglist_current3;
-    $130 = ((0) + 4|0);
-    $expanded18 = $130;
-    $expanded17 = (($expanded18) - 1)|0;
-    $131 = (($129) + ($expanded17))|0;
-    $132 = ((0) + 4|0);
-    $expanded22 = $132;
-    $expanded21 = (($expanded22) - 1)|0;
-    $expanded20 = $expanded21 ^ -1;
-    $133 = $131 & $expanded20;
-    $134 = $133;
-    $135 = HEAP32[$134>>2]|0;
-    $arglist_next4 = ((($134)) + 4|0);
-    HEAP32[$7>>2] = $arglist_next4;
-    $15 = $135;
-    $136 = $15;
-    $14 = $136;
-    $137 = $5;
-    $138 = $8;
-    $139 = ($137|0)<($138|0);
-    if (!($139)) {
-     continue L3;
-    }
-    $140 = $6;
-    $141 = ((($140)) + 8|0);
-    $6 = $141;
-    ;HEAP32[$16>>2]=HEAP32[$140>>2]|0;HEAP32[$16+4>>2]=HEAP32[$140+4>>2]|0;
-    $142 = ((($16)) + 4|0);
-    $143 = HEAP32[$142>>2]|0;
-    switch ($143|0) {
-    case 12: case 10: case 9:  {
-     break;
-    }
-    default: {
-     label = 14;
-     break L3;
-    }
-    }
-    $147 = $14;
-    ;HEAP32[$147>>2]=HEAP32[$16>>2]|0;HEAP32[$147+4>>2]=HEAP32[$16+4>>2]|0;
-    $148 = $5;
-    $149 = (($148) + 1)|0;
-    $5 = $149;
-    continue L3;
-    break;
-   }
-   case 83:  {
-    $arglist_current6 = HEAP32[$7>>2]|0;
-    $150 = $arglist_current6;
-    $151 = ((0) + 4|0);
-    $expanded25 = $151;
-    $expanded24 = (($expanded25) - 1)|0;
-    $152 = (($150) + ($expanded24))|0;
-    $153 = ((0) + 4|0);
-    $expanded29 = $153;
-    $expanded28 = (($expanded29) - 1)|0;
-    $expanded27 = $expanded28 ^ -1;
-    $154 = $152 & $expanded27;
-    $155 = $154;
-    $156 = HEAP32[$155>>2]|0;
-    $arglist_next7 = ((($155)) + 4|0);
-    HEAP32[$7>>2] = $arglist_next7;
-    $18 = $156;
-    $157 = $18;
-    $17 = $157;
-    $158 = $3;
-    $159 = HEAP8[$158>>0]|0;
-    $160 = $159 << 24 >> 24;
-    $161 = ($160|0)==(33);
-    if ($161) {
-     $162 = $3;
-     $163 = ((($162)) + 1|0);
-     $3 = $163;
-     $164 = $5;
-     $165 = $8;
-     $166 = ($164|0)<($165|0);
-     if ($166) {
-      $167 = $6;
-      $168 = ((($167)) + 4|0);
-      $169 = HEAP32[$168>>2]|0;
-      $170 = ($169|0)==(0);
-      if ($170) {
-       $171 = $6;
-       $172 = HEAP32[$171>>2]|0;
-       $173 = ($172|0)!=(0);
-       if (!($173)) {
-        $174 = $17;
-        $175 = $6;
-        $176 = ((($175)) + 8|0);
-        $6 = $176;
-        ;HEAP32[$174>>2]=HEAP32[$175>>2]|0;HEAP32[$174+4>>2]=HEAP32[$175+4>>2]|0;
-        $177 = $5;
-        $178 = (($177) + 1)|0;
-        $5 = $178;
-        continue L3;
-       }
-      }
-     }
-    }
-    $179 = $5;
-    $180 = $8;
-    $181 = ($179|0)<($180|0);
-    if (!($181)) {
-     continue L3;
-    }
-    $182 = $17;
-    $183 = $2;
-    $184 = $6;
-    $185 = ((($184)) + 8|0);
-    $6 = $185;
-    ;HEAP32[$$byval_copy>>2]=HEAP32[$184>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$184+4>>2]|0;
-    _to_str($19,$183,$$byval_copy);
-    ;HEAP32[$182>>2]=HEAP32[$19>>2]|0;HEAP32[$182+4>>2]=HEAP32[$19+4>>2]|0;
-    $186 = $5;
-    $187 = (($186) + 1)|0;
-    $5 = $187;
-    continue L3;
-    break;
-   }
-   case 65:  {
-    $arglist_current9 = HEAP32[$7>>2]|0;
-    $188 = $arglist_current9;
-    $189 = ((0) + 4|0);
-    $expanded32 = $189;
-    $expanded31 = (($expanded32) - 1)|0;
-    $190 = (($188) + ($expanded31))|0;
-    $191 = ((0) + 4|0);
-    $expanded36 = $191;
-    $expanded35 = (($expanded36) - 1)|0;
-    $expanded34 = $expanded35 ^ -1;
-    $192 = $190 & $expanded34;
-    $193 = $192;
-    $194 = HEAP32[$193>>2]|0;
-    $arglist_next10 = ((($193)) + 4|0);
-    HEAP32[$7>>2] = $arglist_next10;
-    $21 = $194;
-    $195 = $21;
-    $20 = $195;
-    $196 = $3;
-    $197 = HEAP8[$196>>0]|0;
-    $198 = $197 << 24 >> 24;
-    $199 = ($198|0)==(33);
-    if ($199) {
-     $200 = $3;
-     $201 = ((($200)) + 1|0);
-     $3 = $201;
-     $202 = $5;
-     $203 = $8;
-     $204 = ($202|0)<($203|0);
-     if ($204) {
-      $205 = $6;
-      $206 = ((($205)) + 4|0);
-      $207 = HEAP32[$206>>2]|0;
-      $208 = ($207|0)==(0);
-      if ($208) {
-       $209 = $6;
-       $210 = HEAP32[$209>>2]|0;
-       $211 = ($210|0)!=(0);
-       if (!($211)) {
-        $212 = $20;
-        $213 = $6;
-        $214 = ((($213)) + 8|0);
-        $6 = $214;
-        ;HEAP32[$212>>2]=HEAP32[$213>>2]|0;HEAP32[$212+4>>2]=HEAP32[$213+4>>2]|0;
-        $215 = $5;
-        $216 = (($215) + 1)|0;
-        $5 = $216;
-        continue L3;
-       }
-      }
-     }
-    }
-    $217 = $5;
-    $218 = $8;
-    $219 = ($217|0)<($218|0);
-    if (!($219)) {
-     continue L3;
-    }
-    $220 = $20;
-    $221 = $2;
-    $222 = $6;
-    $223 = ((($222)) + 8|0);
-    $6 = $223;
-    ;HEAP32[$$byval_copy2>>2]=HEAP32[$222>>2]|0;HEAP32[$$byval_copy2+4>>2]=HEAP32[$222+4>>2]|0;
-    _to_ary($22,$221,$$byval_copy2);
-    ;HEAP32[$220>>2]=HEAP32[$22>>2]|0;HEAP32[$220+4>>2]=HEAP32[$22+4>>2]|0;
-    $224 = $5;
-    $225 = (($224) + 1)|0;
-    $5 = $225;
-    continue L3;
-    break;
-   }
-   case 72:  {
-    $arglist_current12 = HEAP32[$7>>2]|0;
-    $226 = $arglist_current12;
-    $227 = ((0) + 4|0);
-    $expanded39 = $227;
-    $expanded38 = (($expanded39) - 1)|0;
-    $228 = (($226) + ($expanded38))|0;
-    $229 = ((0) + 4|0);
-    $expanded43 = $229;
-    $expanded42 = (($expanded43) - 1)|0;
-    $expanded41 = $expanded42 ^ -1;
-    $230 = $228 & $expanded41;
-    $231 = $230;
-    $232 = HEAP32[$231>>2]|0;
-    $arglist_next13 = ((($231)) + 4|0);
-    HEAP32[$7>>2] = $arglist_next13;
-    $24 = $232;
-    $233 = $24;
-    $23 = $233;
-    $234 = $3;
-    $235 = HEAP8[$234>>0]|0;
-    $236 = $235 << 24 >> 24;
-    $237 = ($236|0)==(33);
-    if ($237) {
-     $238 = $3;
-     $239 = ((($238)) + 1|0);
-     $3 = $239;
-     $240 = $5;
-     $241 = $8;
-     $242 = ($240|0)<($241|0);
-     if ($242) {
-      $243 = $6;
-      $244 = ((($243)) + 4|0);
-      $245 = HEAP32[$244>>2]|0;
-      $246 = ($245|0)==(0);
-      if ($246) {
-       $247 = $6;
-       $248 = HEAP32[$247>>2]|0;
-       $249 = ($248|0)!=(0);
-       if (!($249)) {
-        $250 = $23;
-        $251 = $6;
-        $252 = ((($251)) + 8|0);
-        $6 = $252;
-        ;HEAP32[$250>>2]=HEAP32[$251>>2]|0;HEAP32[$250+4>>2]=HEAP32[$251+4>>2]|0;
-        $253 = $5;
-        $254 = (($253) + 1)|0;
-        $5 = $254;
-        continue L3;
-       }
-      }
-     }
-    }
-    $255 = $5;
-    $256 = $8;
-    $257 = ($255|0)<($256|0);
-    if (!($257)) {
-     continue L3;
-    }
-    $258 = $23;
-    $259 = $2;
-    $260 = $6;
-    $261 = ((($260)) + 8|0);
-    $6 = $261;
-    ;HEAP32[$$byval_copy3>>2]=HEAP32[$260>>2]|0;HEAP32[$$byval_copy3+4>>2]=HEAP32[$260+4>>2]|0;
-    _to_hash($25,$259,$$byval_copy3);
-    ;HEAP32[$258>>2]=HEAP32[$25>>2]|0;HEAP32[$258+4>>2]=HEAP32[$25+4>>2]|0;
-    $262 = $5;
-    $263 = (($262) + 1)|0;
-    $5 = $263;
-    continue L3;
-    break;
-   }
-   case 115:  {
-    $27 = 0;
-    $28 = 0;
-    $arglist_current15 = HEAP32[$7>>2]|0;
-    $264 = $arglist_current15;
-    $265 = ((0) + 4|0);
-    $expanded46 = $265;
-    $expanded45 = (($expanded46) - 1)|0;
-    $266 = (($264) + ($expanded45))|0;
-    $267 = ((0) + 4|0);
-    $expanded50 = $267;
-    $expanded49 = (($expanded50) - 1)|0;
-    $expanded48 = $expanded49 ^ -1;
-    $268 = $266 & $expanded48;
-    $269 = $268;
-    $270 = HEAP32[$269>>2]|0;
-    $arglist_next16 = ((($269)) + 4|0);
-    HEAP32[$7>>2] = $arglist_next16;
-    $29 = $270;
-    $271 = $29;
-    $27 = $271;
-    $arglist_current18 = HEAP32[$7>>2]|0;
-    $272 = $arglist_current18;
-    $273 = ((0) + 4|0);
-    $expanded53 = $273;
-    $expanded52 = (($expanded53) - 1)|0;
-    $274 = (($272) + ($expanded52))|0;
-    $275 = ((0) + 4|0);
-    $expanded57 = $275;
-    $expanded56 = (($expanded57) - 1)|0;
-    $expanded55 = $expanded56 ^ -1;
-    $276 = $274 & $expanded55;
-    $277 = $276;
-    $278 = HEAP32[$277>>2]|0;
-    $arglist_next19 = ((($277)) + 4|0);
-    HEAP32[$7>>2] = $arglist_next19;
-    $30 = $278;
-    $279 = $30;
-    $28 = $279;
-    $280 = $3;
-    $281 = HEAP8[$280>>0]|0;
-    $282 = $281 << 24 >> 24;
-    $283 = ($282|0)==(33);
-    if ($283) {
-     $284 = $3;
-     $285 = ((($284)) + 1|0);
-     $3 = $285;
-     $286 = $5;
-     $287 = $8;
-     $288 = ($286|0)<($287|0);
-     if ($288) {
-      $289 = $6;
-      $290 = ((($289)) + 4|0);
-      $291 = HEAP32[$290>>2]|0;
-      $292 = ($291|0)==(0);
-      if ($292) {
-       $293 = $6;
-       $294 = HEAP32[$293>>2]|0;
-       $295 = ($294|0)!=(0);
-       if (!($295)) {
-        $296 = $27;
-        HEAP32[$296>>2] = 0;
-        $297 = $28;
-        HEAP32[$297>>2] = 0;
-        $298 = $5;
-        $299 = (($298) + 1)|0;
-        $5 = $299;
-        continue L3;
-       }
-      }
-     }
-    }
-    $300 = $5;
-    $301 = $8;
-    $302 = ($300|0)<($301|0);
-    if (!($302)) {
-     continue L3;
-    }
-    $303 = $2;
-    $304 = $6;
-    $305 = ((($304)) + 8|0);
-    $6 = $305;
-    ;HEAP32[$$byval_copy4>>2]=HEAP32[$304>>2]|0;HEAP32[$$byval_copy4+4>>2]=HEAP32[$304+4>>2]|0;
-    _to_str($31,$303,$$byval_copy4);
-    ;HEAP32[$26>>2]=HEAP32[$31>>2]|0;HEAP32[$26+4>>2]=HEAP32[$31+4>>2]|0;
-    $306 = HEAP32[$26>>2]|0;
-    $307 = HEAP32[$306>>2]|0;
-    $308 = $307 >>> 11;
-    $309 = $308 & 8;
-    $310 = ($309|0)!=(0);
-    $311 = HEAP32[$26>>2]|0;
-    $312 = ((($311)) + 12|0);
-    if ($310) {
-     $316 = $312;
-    } else {
-     $313 = ((($312)) + 8|0);
-     $314 = HEAP32[$313>>2]|0;
-     $316 = $314;
-    }
-    $315 = $27;
-    HEAP32[$315>>2] = $316;
-    $317 = HEAP32[$26>>2]|0;
-    $318 = HEAP32[$317>>2]|0;
-    $319 = $318 >>> 11;
-    $320 = $319 & 8;
-    $321 = ($320|0)!=(0);
-    $322 = HEAP32[$26>>2]|0;
-    if ($321) {
-     $323 = HEAP32[$322>>2]|0;
-     $324 = $323 >>> 11;
-     $325 = $324 & 496;
-     $326 = $325 >> 4;
-     $330 = $326;
-    } else {
-     $327 = ((($322)) + 12|0);
-     $328 = HEAP32[$327>>2]|0;
-     $330 = $328;
-    }
-    $329 = $28;
-    HEAP32[$329>>2] = $330;
-    $331 = $5;
-    $332 = (($331) + 1)|0;
-    $5 = $332;
-    continue L3;
-    break;
-   }
-   case 122:  {
-    $arglist_current21 = HEAP32[$7>>2]|0;
-    $333 = $arglist_current21;
-    $334 = ((0) + 4|0);
-    $expanded60 = $334;
-    $expanded59 = (($expanded60) - 1)|0;
-    $335 = (($333) + ($expanded59))|0;
-    $336 = ((0) + 4|0);
-    $expanded64 = $336;
-    $expanded63 = (($expanded64) - 1)|0;
-    $expanded62 = $expanded63 ^ -1;
-    $337 = $335 & $expanded62;
-    $338 = $337;
-    $339 = HEAP32[$338>>2]|0;
-    $arglist_next22 = ((($338)) + 4|0);
-    HEAP32[$7>>2] = $arglist_next22;
-    $34 = $339;
-    $340 = $34;
-    $33 = $340;
-    $341 = $3;
-    $342 = HEAP8[$341>>0]|0;
-    $343 = $342 << 24 >> 24;
-    $344 = ($343|0)==(33);
-    if ($344) {
-     $345 = $3;
-     $346 = ((($345)) + 1|0);
-     $3 = $346;
-     $347 = $5;
-     $348 = $8;
-     $349 = ($347|0)<($348|0);
-     if ($349) {
-      $350 = $6;
-      $351 = ((($350)) + 4|0);
-      $352 = HEAP32[$351>>2]|0;
-      $353 = ($352|0)==(0);
-      if ($353) {
-       $354 = $6;
-       $355 = HEAP32[$354>>2]|0;
-       $356 = ($355|0)!=(0);
-       if (!($356)) {
-        $357 = $33;
-        HEAP32[$357>>2] = 0;
-        $358 = $5;
-        $359 = (($358) + 1)|0;
-        $5 = $359;
-        $360 = $6;
-        $361 = ((($360)) + 8|0);
-        $6 = $361;
-        continue L3;
-       }
-      }
-     }
-    }
-    $362 = $5;
-    $363 = $8;
-    $364 = ($362|0)<($363|0);
-    if (!($364)) {
-     continue L3;
-    }
-    $365 = $2;
-    $366 = $6;
-    $367 = ((($366)) + 8|0);
-    $6 = $367;
-    ;HEAP32[$$byval_copy5>>2]=HEAP32[$366>>2]|0;HEAP32[$$byval_copy5+4>>2]=HEAP32[$366+4>>2]|0;
-    _to_str($35,$365,$$byval_copy5);
-    ;HEAP32[$32>>2]=HEAP32[$35>>2]|0;HEAP32[$32+4>>2]=HEAP32[$35+4>>2]|0;
-    $368 = $2;
-    $369 = (_mrb_string_value_cstr($368,$32)|0);
-    $370 = $33;
-    HEAP32[$370>>2] = $369;
-    $371 = $5;
-    $372 = (($371) + 1)|0;
-    $5 = $372;
-    continue L3;
-    break;
-   }
-   case 97:  {
-    $arglist_current24 = HEAP32[$7>>2]|0;
-    $373 = $arglist_current24;
-    $374 = ((0) + 4|0);
-    $expanded67 = $374;
-    $expanded66 = (($expanded67) - 1)|0;
-    $375 = (($373) + ($expanded66))|0;
-    $376 = ((0) + 4|0);
-    $expanded71 = $376;
-    $expanded70 = (($expanded71) - 1)|0;
-    $expanded69 = $expanded70 ^ -1;
-    $377 = $375 & $expanded69;
-    $378 = $377;
-    $379 = HEAP32[$378>>2]|0;
-    $arglist_next25 = ((($378)) + 4|0);
-    HEAP32[$7>>2] = $arglist_next25;
-    $40 = $379;
-    $380 = $40;
-    $38 = $380;
-    $arglist_current27 = HEAP32[$7>>2]|0;
-    $381 = $arglist_current27;
-    $382 = ((0) + 4|0);
-    $expanded74 = $382;
-    $expanded73 = (($expanded74) - 1)|0;
-    $383 = (($381) + ($expanded73))|0;
-    $384 = ((0) + 4|0);
-    $expanded78 = $384;
-    $expanded77 = (($expanded78) - 1)|0;
-    $expanded76 = $expanded77 ^ -1;
-    $385 = $383 & $expanded76;
-    $386 = $385;
-    $387 = HEAP32[$386>>2]|0;
-    $arglist_next28 = ((($386)) + 4|0);
-    HEAP32[$7>>2] = $arglist_next28;
-    $41 = $387;
-    $388 = $41;
-    $39 = $388;
-    $389 = $3;
-    $390 = HEAP8[$389>>0]|0;
-    $391 = $390 << 24 >> 24;
-    $392 = ($391|0)==(33);
-    if ($392) {
-     $393 = $3;
-     $394 = ((($393)) + 1|0);
-     $3 = $394;
-     $395 = $5;
-     $396 = $8;
-     $397 = ($395|0)<($396|0);
-     if ($397) {
-      $398 = $6;
-      $399 = ((($398)) + 4|0);
-      $400 = HEAP32[$399>>2]|0;
-      $401 = ($400|0)==(0);
-      if ($401) {
-       $402 = $6;
-       $403 = HEAP32[$402>>2]|0;
-       $404 = ($403|0)!=(0);
-       if (!($404)) {
-        $405 = $38;
-        HEAP32[$405>>2] = 0;
-        $406 = $39;
-        HEAP32[$406>>2] = 0;
-        $407 = $5;
-        $408 = (($407) + 1)|0;
-        $5 = $408;
-        $409 = $6;
-        $410 = ((($409)) + 8|0);
-        $6 = $410;
-        continue L3;
-       }
-      }
-     }
-    }
-    $411 = $5;
-    $412 = $8;
-    $413 = ($411|0)<($412|0);
-    if (!($413)) {
-     continue L3;
-    }
-    $414 = $2;
-    $415 = $6;
-    $416 = ((($415)) + 8|0);
-    $6 = $416;
-    ;HEAP32[$$byval_copy6>>2]=HEAP32[$415>>2]|0;HEAP32[$$byval_copy6+4>>2]=HEAP32[$415+4>>2]|0;
-    _to_ary($42,$414,$$byval_copy6);
-    ;HEAP32[$36>>2]=HEAP32[$42>>2]|0;HEAP32[$36+4>>2]=HEAP32[$42+4>>2]|0;
-    $417 = HEAP32[$36>>2]|0;
-    $37 = $417;
-    $418 = $37;
-    $419 = ((($418)) + 20|0);
-    $420 = HEAP32[$419>>2]|0;
-    $421 = $38;
-    HEAP32[$421>>2] = $420;
-    $422 = $37;
-    $423 = ((($422)) + 12|0);
-    $424 = HEAP32[$423>>2]|0;
-    $425 = $39;
-    HEAP32[$425>>2] = $424;
-    $426 = $5;
-    $427 = (($426) + 1)|0;
-    $5 = $427;
-    continue L3;
-    break;
-   }
-   case 102:  {
-    $arglist_current30 = HEAP32[$7>>2]|0;
-    $428 = $arglist_current30;
-    $429 = ((0) + 4|0);
-    $expanded81 = $429;
-    $expanded80 = (($expanded81) - 1)|0;
-    $430 = (($428) + ($expanded80))|0;
-    $431 = ((0) + 4|0);
-    $expanded85 = $431;
-    $expanded84 = (($expanded85) - 1)|0;
-    $expanded83 = $expanded84 ^ -1;
-    $432 = $430 & $expanded83;
-    $433 = $432;
-    $434 = HEAP32[$433>>2]|0;
-    $arglist_next31 = ((($433)) + 4|0);
-    HEAP32[$7>>2] = $arglist_next31;
-    $44 = $434;
-    $435 = $44;
-    $43 = $435;
-    $436 = $5;
-    $437 = $8;
-    $438 = ($436|0)<($437|0);
-    if (!($438)) {
-     continue L3;
-    }
-    $439 = $2;
-    $440 = $6;
-    ;HEAP32[$$byval_copy7>>2]=HEAP32[$440>>2]|0;HEAP32[$$byval_copy7+4>>2]=HEAP32[$440+4>>2]|0;
-    $441 = (+_mrb_to_flo($439,$$byval_copy7));
-    $442 = $43;
-    HEAPF32[$442>>2] = $441;
-    $443 = $6;
-    $444 = ((($443)) + 8|0);
-    $6 = $444;
-    $445 = $5;
-    $446 = (($445) + 1)|0;
-    $5 = $446;
-    continue L3;
-    break;
-   }
-   case 105:  {
-    $arglist_current33 = HEAP32[$7>>2]|0;
-    $447 = $arglist_current33;
-    $448 = ((0) + 4|0);
-    $expanded88 = $448;
-    $expanded87 = (($expanded88) - 1)|0;
-    $449 = (($447) + ($expanded87))|0;
-    $450 = ((0) + 4|0);
-    $expanded92 = $450;
-    $expanded91 = (($expanded92) - 1)|0;
-    $expanded90 = $expanded91 ^ -1;
-    $451 = $449 & $expanded90;
-    $452 = $451;
-    $453 = HEAP32[$452>>2]|0;
-    $arglist_next34 = ((($452)) + 4|0);
-    HEAP32[$7>>2] = $arglist_next34;
-    $46 = $453;
-    $454 = $46;
-    $45 = $454;
-    $455 = $5;
-    $456 = $8;
-    $457 = ($455|0)<($456|0);
-    if (!($457)) {
-     continue L3;
-    }
-    $458 = $6;
-    $459 = ((($458)) + 4|0);
-    $460 = HEAP32[$459>>2]|0;
-    switch ($460|0) {
-    case 16:  {
-     label = 72;
-     break L3;
-     break;
-    }
-    case 3:  {
-     $461 = $6;
-     $462 = HEAP32[$461>>2]|0;
-     $463 = $45;
-     HEAP32[$463>>2] = $462;
-     break;
-    }
-    case 6:  {
-     $464 = $6;
-     $465 = +HEAPF32[$464>>2];
-     $47 = $465;
-     $466 = $47;
-     $467 = $466 <= 2147483648.0;
-     $468 = $47;
-     $469 = $468 >= -2147483648.0;
-     $or$cond = $467 & $469;
-     if (!($or$cond)) {
-      label = 70;
-      break L3;
-     }
-     $473 = $47;
-     $474 = (~~(($473)));
-     $475 = $45;
-     HEAP32[$475>>2] = $474;
-     break;
-    }
-    default: {
-     $479 = $2;
-     $480 = $6;
-     ;HEAP32[$$byval_copy8>>2]=HEAP32[$480>>2]|0;HEAP32[$$byval_copy8+4>>2]=HEAP32[$480+4>>2]|0;
-     _mrb_Integer($48,$479,$$byval_copy8);
-     $481 = HEAP32[$48>>2]|0;
-     $482 = $45;
-     HEAP32[$482>>2] = $481;
-    }
-    }
-    $483 = $6;
-    $484 = ((($483)) + 8|0);
-    $6 = $484;
-    $485 = $5;
-    $486 = (($485) + 1)|0;
-    $5 = $486;
-    continue L3;
-    break;
-   }
-   case 98:  {
-    $arglist_current36 = HEAP32[$7>>2]|0;
-    $487 = $arglist_current36;
-    $488 = ((0) + 4|0);
-    $expanded95 = $488;
-    $expanded94 = (($expanded95) - 1)|0;
-    $489 = (($487) + ($expanded94))|0;
-    $490 = ((0) + 4|0);
-    $expanded99 = $490;
-    $expanded98 = (($expanded99) - 1)|0;
-    $expanded97 = $expanded98 ^ -1;
-    $491 = $489 & $expanded97;
-    $492 = $491;
-    $493 = HEAP32[$492>>2]|0;
-    $arglist_next37 = ((($492)) + 4|0);
-    HEAP32[$7>>2] = $arglist_next37;
-    $50 = $493;
-    $494 = $50;
-    $49 = $494;
-    $495 = $5;
-    $496 = $8;
-    $497 = ($495|0)<($496|0);
-    if (!($497)) {
-     continue L3;
-    }
-    $498 = $6;
-    $499 = ((($498)) + 8|0);
-    $6 = $499;
-    ;HEAP32[$51>>2]=HEAP32[$498>>2]|0;HEAP32[$51+4>>2]=HEAP32[$498+4>>2]|0;
-    $500 = ((($51)) + 4|0);
-    $501 = HEAP32[$500>>2]|0;
-    $502 = ($501|0)!=(0);
-    $503 = $502&1;
-    $504 = $503&255;
-    $505 = $49;
-    HEAP8[$505>>0] = $504;
-    $506 = $5;
-    $507 = (($506) + 1)|0;
-    $5 = $507;
-    continue L3;
-    break;
-   }
-   case 110:  {
-    $arglist_current39 = HEAP32[$7>>2]|0;
-    $508 = $arglist_current39;
-    $509 = ((0) + 4|0);
-    $expanded102 = $509;
-    $expanded101 = (($expanded102) - 1)|0;
-    $510 = (($508) + ($expanded101))|0;
-    $511 = ((0) + 4|0);
-    $expanded106 = $511;
-    $expanded105 = (($expanded106) - 1)|0;
-    $expanded104 = $expanded105 ^ -1;
-    $512 = $510 & $expanded104;
-    $513 = $512;
-    $514 = HEAP32[$513>>2]|0;
-    $arglist_next40 = ((($513)) + 4|0);
-    HEAP32[$7>>2] = $arglist_next40;
-    $53 = $514;
-    $515 = $53;
-    $52 = $515;
-    $516 = $5;
-    $517 = $8;
-    $518 = ($516|0)<($517|0);
-    if (!($518)) {
-     continue L3;
-    }
-    $519 = $6;
-    $520 = ((($519)) + 8|0);
-    $6 = $520;
-    ;HEAP32[$54>>2]=HEAP32[$519>>2]|0;HEAP32[$54+4>>2]=HEAP32[$519+4>>2]|0;
-    $521 = $2;
-    ;HEAP32[$$byval_copy9>>2]=HEAP32[$54>>2]|0;HEAP32[$$byval_copy9+4>>2]=HEAP32[$54+4>>2]|0;
-    $522 = (_to_sym($521,$$byval_copy9)|0);
-    $523 = $52;
-    HEAP32[$523>>2] = $522;
-    $524 = $5;
-    $525 = (($524) + 1)|0;
-    $5 = $525;
-    continue L3;
-    break;
-   }
-   case 100:  {
-    $arglist_current42 = HEAP32[$7>>2]|0;
-    $526 = $arglist_current42;
-    $527 = ((0) + 4|0);
-    $expanded109 = $527;
-    $expanded108 = (($expanded109) - 1)|0;
-    $528 = (($526) + ($expanded108))|0;
-    $529 = ((0) + 4|0);
-    $expanded113 = $529;
-    $expanded112 = (($expanded113) - 1)|0;
-    $expanded111 = $expanded112 ^ -1;
-    $530 = $528 & $expanded111;
-    $531 = $530;
-    $532 = HEAP32[$531>>2]|0;
-    $arglist_next43 = ((($531)) + 4|0);
-    HEAP32[$7>>2] = $arglist_next43;
-    $57 = $532;
-    $533 = $57;
-    $55 = $533;
-    $arglist_current45 = HEAP32[$7>>2]|0;
-    $534 = $arglist_current45;
-    $535 = ((0) + 4|0);
-    $expanded116 = $535;
-    $expanded115 = (($expanded116) - 1)|0;
-    $536 = (($534) + ($expanded115))|0;
-    $537 = ((0) + 4|0);
-    $expanded120 = $537;
-    $expanded119 = (($expanded120) - 1)|0;
-    $expanded118 = $expanded119 ^ -1;
-    $538 = $536 & $expanded118;
-    $539 = $538;
-    $540 = HEAP32[$539>>2]|0;
-    $arglist_next46 = ((($539)) + 4|0);
-    HEAP32[$7>>2] = $arglist_next46;
-    $58 = $540;
-    $541 = $58;
-    $56 = $541;
-    $542 = $3;
-    $543 = HEAP8[$542>>0]|0;
-    $544 = $543 << 24 >> 24;
-    $545 = ($544|0)==(33);
-    if ($545) {
-     $546 = $3;
-     $547 = ((($546)) + 1|0);
-     $3 = $547;
-     $548 = $5;
-     $549 = $8;
-     $550 = ($548|0)<($549|0);
-     if ($550) {
-      $551 = $6;
-      $552 = ((($551)) + 4|0);
-      $553 = HEAP32[$552>>2]|0;
-      $554 = ($553|0)==(0);
-      if ($554) {
-       $555 = $6;
-       $556 = HEAP32[$555>>2]|0;
-       $557 = ($556|0)!=(0);
-       if (!($557)) {
-        $558 = $55;
-        HEAP32[$558>>2] = 0;
-        $559 = $5;
-        $560 = (($559) + 1)|0;
-        $5 = $560;
-        $561 = $6;
-        $562 = ((($561)) + 8|0);
-        $6 = $562;
-        continue L3;
-       }
-      }
-     }
-    }
-    $563 = $5;
-    $564 = $8;
-    $565 = ($563|0)<($564|0);
-    if (!($565)) {
-     continue L3;
-    }
-    $566 = $2;
-    $567 = $6;
-    $568 = ((($567)) + 8|0);
-    $6 = $568;
-    $569 = $56;
-    ;HEAP32[$$byval_copy10>>2]=HEAP32[$567>>2]|0;HEAP32[$$byval_copy10+4>>2]=HEAP32[$567+4>>2]|0;
-    $570 = (_mrb_data_get_ptr($566,$$byval_copy10,$569)|0);
-    $571 = $55;
-    HEAP32[$571>>2] = $570;
-    $572 = $5;
-    $573 = (($572) + 1)|0;
-    $5 = $573;
-    continue L3;
-    break;
-   }
-   case 38:  {
-    $arglist_current48 = HEAP32[$7>>2]|0;
-    $574 = $arglist_current48;
-    $575 = ((0) + 4|0);
-    $expanded123 = $575;
-    $expanded122 = (($expanded123) - 1)|0;
-    $576 = (($574) + ($expanded122))|0;
-    $577 = ((0) + 4|0);
-    $expanded127 = $577;
-    $expanded126 = (($expanded127) - 1)|0;
-    $expanded125 = $expanded126 ^ -1;
-    $578 = $576 & $expanded125;
-    $579 = $578;
-    $580 = HEAP32[$579>>2]|0;
-    $arglist_next49 = ((($579)) + 4|0);
-    HEAP32[$7>>2] = $arglist_next49;
-    $61 = $580;
-    $581 = $61;
-    $59 = $581;
-    $582 = $2;
-    $583 = ((($582)) + 12|0);
-    $584 = HEAP32[$583>>2]|0;
-    $585 = ((($584)) + 16|0);
-    $586 = HEAP32[$585>>2]|0;
-    $587 = ((($586)) + 36|0);
-    $588 = HEAP32[$587>>2]|0;
-    $589 = ($588|0)<(0);
-    $590 = $2;
-    $591 = ((($590)) + 12|0);
-    $592 = HEAP32[$591>>2]|0;
-    $593 = ((($592)) + 4|0);
-    $594 = HEAP32[$593>>2]|0;
-    if ($589) {
-     $595 = ((($594)) + 16|0);
-     $60 = $595;
-    } else {
-     $596 = $2;
-     $597 = ((($596)) + 12|0);
-     $598 = HEAP32[$597>>2]|0;
-     $599 = ((($598)) + 16|0);
-     $600 = HEAP32[$599>>2]|0;
-     $601 = ((($600)) + 36|0);
-     $602 = HEAP32[$601>>2]|0;
-     $603 = (($594) + ($602<<3)|0);
-     $604 = ((($603)) + 8|0);
-     $60 = $604;
-    }
-    $605 = $59;
-    $606 = $60;
-    ;HEAP32[$605>>2]=HEAP32[$606>>2]|0;HEAP32[$605+4>>2]=HEAP32[$606+4>>2]|0;
-    continue L3;
-    break;
-   }
-   case 124:  {
-    $9 = 1;
-    continue L3;
-    break;
-   }
-   case 63:  {
-    $arglist_current51 = HEAP32[$7>>2]|0;
-    $607 = $arglist_current51;
-    $608 = ((0) + 4|0);
-    $expanded130 = $608;
-    $expanded129 = (($expanded130) - 1)|0;
-    $609 = (($607) + ($expanded129))|0;
-    $610 = ((0) + 4|0);
-    $expanded134 = $610;
-    $expanded133 = (($expanded134) - 1)|0;
-    $expanded132 = $expanded133 ^ -1;
-    $611 = $609 & $expanded132;
-    $612 = $611;
-    $613 = HEAP32[$612>>2]|0;
-    $arglist_next52 = ((($612)) + 4|0);
-    HEAP32[$7>>2] = $arglist_next52;
-    $63 = $613;
-    $614 = $63;
-    $62 = $614;
-    $615 = $10;
-    $616 = $62;
-    HEAP8[$616>>0] = $615;
-    continue L3;
-    break;
-   }
-   case 42:  {
-    $arglist_current54 = HEAP32[$7>>2]|0;
-    $617 = $arglist_current54;
-    $618 = ((0) + 4|0);
-    $expanded137 = $618;
-    $expanded136 = (($expanded137) - 1)|0;
-    $619 = (($617) + ($expanded136))|0;
-    $620 = ((0) + 4|0);
-    $expanded141 = $620;
-    $expanded140 = (($expanded141) - 1)|0;
-    $expanded139 = $expanded140 ^ -1;
-    $621 = $619 & $expanded139;
-    $622 = $621;
-    $623 = HEAP32[$622>>2]|0;
-    $arglist_next55 = ((($622)) + 4|0);
-    HEAP32[$7>>2] = $arglist_next55;
-    $66 = $623;
-    $624 = $66;
-    $64 = $624;
-    $arglist_current57 = HEAP32[$7>>2]|0;
-    $625 = $arglist_current57;
-    $626 = ((0) + 4|0);
-    $expanded144 = $626;
-    $expanded143 = (($expanded144) - 1)|0;
-    $627 = (($625) + ($expanded143))|0;
-    $628 = ((0) + 4|0);
-    $expanded148 = $628;
-    $expanded147 = (($expanded148) - 1)|0;
-    $expanded146 = $expanded147 ^ -1;
-    $629 = $627 & $expanded146;
-    $630 = $629;
-    $631 = HEAP32[$630>>2]|0;
-    $arglist_next58 = ((($630)) + 4|0);
-    HEAP32[$7>>2] = $arglist_next58;
-    $67 = $631;
-    $632 = $67;
-    $65 = $632;
-    $633 = $8;
-    $634 = $5;
-    $635 = ($633|0)>($634|0);
-    if (!($635)) {
-     $650 = $65;
-     HEAP32[$650>>2] = 0;
-     $651 = $64;
-     HEAP32[$651>>2] = 0;
-     continue L3;
-    }
-    $636 = $8;
-    $637 = $5;
-    $638 = (($636) - ($637))|0;
-    $639 = $65;
-    HEAP32[$639>>2] = $638;
-    $640 = $65;
-    $641 = HEAP32[$640>>2]|0;
-    $642 = ($641|0)>(0);
-    if ($642) {
-     $643 = $6;
-     $644 = $64;
-     HEAP32[$644>>2] = $643;
-    }
-    $645 = $8;
-    $5 = $645;
-    $646 = $65;
-    $647 = HEAP32[$646>>2]|0;
-    $648 = $6;
-    $649 = (($648) + ($647<<3)|0);
-    $6 = $649;
-    continue L3;
-    break;
-   }
-   default: {
-    label = 97;
-    break L3;
-   }
-   }
-  } while(0);
- }
- if ((label|0) == 8) {
-  $108 = $2;
-  $109 = $2;
-  $110 = (_mrb_class_get($109,69160)|0);
-  _mrb_raise($108,$110,65128);
-  // unreachable;
- }
- else if ((label|0) == 14) {
-  $144 = $2;
-  $145 = $2;
-  $146 = (_mrb_class_get($145,69204)|0);
-  ;HEAP8[$vararg_buffer>>0]=HEAP8[$16>>0]|0;HEAP8[$vararg_buffer+1>>0]=HEAP8[$16+1>>0]|0;HEAP8[$vararg_buffer+2>>0]=HEAP8[$16+2>>0]|0;HEAP8[$vararg_buffer+3>>0]=HEAP8[$16+3>>0]|0;HEAP8[$vararg_buffer+4>>0]=HEAP8[$16+4>>0]|0;HEAP8[$vararg_buffer+5>>0]=HEAP8[$16+5>>0]|0;HEAP8[$vararg_buffer+6>>0]=HEAP8[$16+6>>0]|0;HEAP8[$vararg_buffer+7>>0]=HEAP8[$16+7>>0]|0;
-  _mrb_raisef($144,$146,65154,$vararg_buffer);
-  // unreachable;
- }
- else if ((label|0) == 70) {
-  $470 = $2;
-  $471 = $2;
-  $472 = (_mrb_class_get($471,65177)|0);
-  _mrb_raise($470,$472,65188);
-  // unreachable;
- }
- else if ((label|0) == 72) {
-  $476 = $2;
-  $477 = $2;
-  $478 = (_mrb_class_get($477,69204)|0);
-  _mrb_raise($476,$478,65210);
-  // unreachable;
- }
- else if ((label|0) == 97) {
-  $652 = $2;
-  $653 = $2;
-  $654 = (_mrb_class_get($653,69160)|0);
-  $655 = $2;
-  _mrb_str_new($68,$655,$4,1);
-  ;HEAP8[$vararg_buffer59>>0]=HEAP8[$68>>0]|0;HEAP8[$vararg_buffer59+1>>0]=HEAP8[$68+1>>0]|0;HEAP8[$vararg_buffer59+2>>0]=HEAP8[$68+2>>0]|0;HEAP8[$vararg_buffer59+3>>0]=HEAP8[$68+3>>0]|0;HEAP8[$vararg_buffer59+4>>0]=HEAP8[$68+4>>0]|0;HEAP8[$vararg_buffer59+5>>0]=HEAP8[$68+5>>0]|0;HEAP8[$vararg_buffer59+6>>0]=HEAP8[$68+6>>0]|0;HEAP8[$vararg_buffer59+7>>0]=HEAP8[$68+7>>0]|0;
-  _mrb_raisef($652,$654,65256,$vararg_buffer59);
-  // unreachable;
- }
- else if ((label|0) == 98) {
-  $656 = ($101<<24>>24)!=(0);
-  if ($656) {
-   $663 = $5;
-   STACKTOP = sp;return ($663|0);
-  }
-  $657 = $8;
-  $658 = $5;
-  $659 = ($657|0)>($658|0);
-  if ($659) {
-   $660 = $2;
-   $661 = $2;
-   $662 = (_mrb_class_get($661,69160)|0);
-   _mrb_raise($660,$662,65128);
-   // unreachable;
-  } else {
-   $663 = $5;
-   STACKTOP = sp;return ($663|0);
-  }
- }
- return (0)|0;
-}
-function _to_str($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $3 = 0, $4 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $$byval_copy = sp + 8|0;
- $3 = $1;
- $4 = $3;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
- _check_type($0,$4,$$byval_copy,16,65324,65331);
- STACKTOP = sp;return;
-}
-function _to_ary($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $3 = 0, $4 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $$byval_copy = sp + 8|0;
- $3 = $1;
- $4 = $3;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
- _check_type($0,$4,$$byval_copy,14,65311,65317);
- STACKTOP = sp;return;
-}
-function _to_hash($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $3 = 0, $4 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $$byval_copy = sp + 8|0;
- $3 = $1;
- $4 = $3;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
- _check_type($0,$4,$$byval_copy,15,65286,65291);
- STACKTOP = sp;return;
-}
-function _to_sym($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $$byval_copy = 0, $$byval_copy3 = 0, $$byval_copy4 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0;
- var $9 = 0, $vararg_buffer = 0, $vararg_buffer1 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);
- $$byval_copy4 = sp + 56|0;
- $$byval_copy3 = sp + 48|0;
- $$byval_copy = sp + 40|0;
- $vararg_buffer1 = sp + 8|0;
- $vararg_buffer = sp;
- $4 = sp + 24|0;
- $5 = sp + 16|0;
- $3 = $0;
- $6 = ((($1)) + 4|0);
- $7 = HEAP32[$6>>2]|0;
- $8 = ($7|0)==(4);
- if ($8) {
-  $9 = HEAP32[$1>>2]|0;
-  $2 = $9;
-  $19 = $2;
-  STACKTOP = sp;return ($19|0);
- }
- $10 = ((($1)) + 4|0);
- $11 = HEAP32[$10>>2]|0;
- $12 = ($11|0)==(16);
- $13 = $3;
- if (!($12)) {
-  ;HEAP32[$$byval_copy4>>2]=HEAP32[$1>>2]|0;HEAP32[$$byval_copy4+4>>2]=HEAP32[$1+4>>2]|0;
-  _mrb_funcall($5,$13,$$byval_copy4,69281,0,$vararg_buffer);
-  $16 = $3;
-  $17 = $3;
-  $18 = (_mrb_class_get($17,69204)|0);
-  ;HEAP8[$vararg_buffer1>>0]=HEAP8[$5>>0]|0;HEAP8[$vararg_buffer1+1>>0]=HEAP8[$5+1>>0]|0;HEAP8[$vararg_buffer1+2>>0]=HEAP8[$5+2>>0]|0;HEAP8[$vararg_buffer1+3>>0]=HEAP8[$5+3>>0]|0;HEAP8[$vararg_buffer1+4>>0]=HEAP8[$5+4>>0]|0;HEAP8[$vararg_buffer1+5>>0]=HEAP8[$5+5>>0]|0;HEAP8[$vararg_buffer1+6>>0]=HEAP8[$5+6>>0]|0;HEAP8[$vararg_buffer1+7>>0]=HEAP8[$5+7>>0]|0;
-  _mrb_raisef($16,$18,68731,$vararg_buffer1);
-  // unreachable;
- }
- $14 = $3;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$1>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$1+4>>2]|0;
- _to_str($4,$14,$$byval_copy);
- ;HEAP32[$$byval_copy3>>2]=HEAP32[$4>>2]|0;HEAP32[$$byval_copy3+4>>2]=HEAP32[$4+4>>2]|0;
- $15 = (_mrb_intern_str($13,$$byval_copy3)|0);
- $2 = $15;
- $19 = $2;
- STACKTOP = sp;return ($19|0);
-}
-function _check_type($0,$1,$2,$3,$4,$5) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- $4 = $4|0;
- $5 = $5|0;
- var $$byval_copy = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $6 = 0, $7 = 0;
- var $8 = 0, $9 = 0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);
- $$byval_copy = sp + 48|0;
- $vararg_buffer = sp;
- $10 = sp + 24|0;
- $11 = sp + 16|0;
- $12 = sp + 8|0;
- $6 = $1;
- $7 = $3;
- $8 = $4;
- $9 = $5;
- $13 = $6;
- $14 = $7;
- $15 = $8;
- $16 = $9;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
- _mrb_check_convert_type($11,$13,$$byval_copy,$14,$15,$16);
- ;HEAP32[$10>>2]=HEAP32[$11>>2]|0;HEAP32[$10+4>>2]=HEAP32[$11+4>>2]|0;
- $17 = ((($10)) + 4|0);
- $18 = HEAP32[$17>>2]|0;
- $19 = ($18|0)==(0);
- if (!($19)) {
-  ;HEAP32[$0>>2]=HEAP32[$10>>2]|0;HEAP32[$0+4>>2]=HEAP32[$10+4>>2]|0;
-  STACKTOP = sp;return;
- }
- $20 = HEAP32[$10>>2]|0;
- $21 = ($20|0)!=(0);
- if ($21) {
-  ;HEAP32[$0>>2]=HEAP32[$10>>2]|0;HEAP32[$0+4>>2]=HEAP32[$10+4>>2]|0;
-  STACKTOP = sp;return;
- } else {
-  $22 = $6;
-  $23 = $6;
-  $24 = (_mrb_class_get($23,69204)|0);
-  $25 = $6;
-  $26 = $8;
-  _mrb_str_new_cstr($12,$25,$26);
-  ;HEAP8[$vararg_buffer>>0]=HEAP8[$12>>0]|0;HEAP8[$vararg_buffer+1>>0]=HEAP8[$12+1>>0]|0;HEAP8[$vararg_buffer+2>>0]=HEAP8[$12+2>>0]|0;HEAP8[$vararg_buffer+3>>0]=HEAP8[$12+3>>0]|0;HEAP8[$vararg_buffer+4>>0]=HEAP8[$12+4>>0]|0;HEAP8[$vararg_buffer+5>>0]=HEAP8[$12+5>>0]|0;HEAP8[$vararg_buffer+6>>0]=HEAP8[$12+6>>0]|0;HEAP8[$vararg_buffer+7>>0]=HEAP8[$12+7>>0]|0;
-  _mrb_raisef($22,$24,65299,$vararg_buffer);
-  // unreachable;
- }
-}
-function _mrb_include_module($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $0;
- $4 = $1;
- $5 = $2;
- $7 = $3;
- $8 = $4;
- $9 = $4;
- $10 = (_find_origin($9)|0);
- $11 = $5;
- $12 = (_include_module_at($7,$8,$10,$11,1)|0);
- $6 = $12;
- $13 = $6;
- $14 = ($13|0)<(0);
- if ($14) {
-  $15 = $3;
-  $16 = $3;
-  $17 = (_mrb_class_get($16,69160)|0);
-  _mrb_raise($15,$17,65338);
-  // unreachable;
- } else {
-  STACKTOP = sp;return;
- }
-}
-function _find_origin($0) {
- $0 = $0|0;
- var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0;
- var sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $1 = $0;
- $2 = $1;
- $3 = HEAP32[$2>>2]|0;
- $4 = $3 >>> 11;
- $5 = $4 & 524288;
- $6 = ($5|0)!=(0);
- if (!($6)) {
-  $19 = $1;
-  STACKTOP = sp;return ($19|0);
- }
- $7 = $1;
- $8 = ((($7)) + 20|0);
- $9 = HEAP32[$8>>2]|0;
- $1 = $9;
- while(1) {
-  $10 = $1;
-  $11 = HEAP32[$10>>2]|0;
-  $12 = $11 >>> 11;
-  $13 = $12 & 1048576;
-  $14 = ($13|0)!=(0);
-  $15 = $14 ^ 1;
-  if (!($15)) {
-   break;
-  }
-  $16 = $1;
-  $17 = ((($16)) + 20|0);
-  $18 = HEAP32[$17>>2]|0;
-  $1 = $18;
- }
- $19 = $1;
- STACKTOP = sp;return ($19|0);
-}
-function _include_module_at($0,$1,$2,$3,$4) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- $4 = $4|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;
- var $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0;
- var $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0;
- var $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);
- $6 = $0;
- $7 = $1;
- $8 = $2;
- $9 = $3;
- $10 = $4;
- $15 = $7;
- $16 = (_find_origin($15)|0);
- $17 = ((($16)) + 16|0);
- $18 = HEAP32[$17>>2]|0;
- $13 = $18;
- L1: while(1) {
-  $19 = $9;
-  $20 = ($19|0)!=(0|0);
-  if (!($20)) {
-   label = 19;
-   break;
-  }
-  $14 = 0;
-  $21 = $9;
-  $22 = HEAP32[$21>>2]|0;
-  $23 = $22 >>> 11;
-  $24 = $23 & 524288;
-  $25 = ($24|0)!=(0);
-  do {
-   if (!($25)) {
-    $26 = $13;
-    $27 = ($26|0)!=(0|0);
-    if ($27) {
-     $28 = $13;
-     $29 = $9;
-     $30 = ((($29)) + 16|0);
-     $31 = HEAP32[$30>>2]|0;
-     $32 = ($28|0)==($31|0);
-     if ($32) {
-      label = 6;
-      break L1;
-     }
-    }
-    $33 = $7;
-    $34 = ((($33)) + 20|0);
-    $35 = HEAP32[$34>>2]|0;
-    $11 = $35;
-    while(1) {
-     $36 = $11;
-     $37 = ($36|0)!=(0|0);
-     if (!($37)) {
-      label = 17;
-      break;
-     }
-     $38 = $11;
-     $39 = HEAP32[$38>>2]|0;
-     $40 = $39 & 255;
-     $41 = ($40|0)==(11);
-     $42 = $11;
-     if ($41) {
-      $43 = ((($42)) + 16|0);
-      $44 = HEAP32[$43>>2]|0;
-      $45 = $9;
-      $46 = ((($45)) + 16|0);
-      $47 = HEAP32[$46>>2]|0;
-      $48 = ($44|0)==($47|0);
-      if ($48) {
-       break;
-      }
-     } else {
-      $52 = HEAP32[$42>>2]|0;
-      $53 = $52 & 255;
-      $54 = ($53|0)==(9);
-      if ($54) {
-       $55 = $10;
-       $56 = ($55|0)!=(0);
-       if (!($56)) {
-        label = 17;
-        break;
-       }
-       $14 = 1;
-      }
-     }
-     $57 = $11;
-     $58 = ((($57)) + 20|0);
-     $59 = HEAP32[$58>>2]|0;
-     $11 = $59;
-    }
-    if ((label|0) == 17) {
-     label = 0;
-     $60 = $6;
-     $61 = $9;
-     $62 = $8;
-     $63 = ((($62)) + 20|0);
-     $64 = HEAP32[$63>>2]|0;
-     $65 = (_include_class_new($60,$61,$64)|0);
-     $12 = $65;
-     $66 = $12;
-     $67 = $8;
-     $68 = ((($67)) + 20|0);
-     HEAP32[$68>>2] = $66;
-     $69 = $6;
-     $70 = $8;
-     $71 = $8;
-     $72 = ((($71)) + 20|0);
-     $73 = HEAP32[$72>>2]|0;
-     _mrb_field_write_barrier($69,$70,$73);
-     $74 = $12;
-     $8 = $74;
-     break;
-    }
-    $49 = $14;
-    $50 = ($49|0)!=(0);
-    if (!($50)) {
-     $51 = $11;
-     $8 = $51;
-    }
-   }
-  } while(0);
-  $75 = $9;
-  $76 = ((($75)) + 20|0);
-  $77 = HEAP32[$76>>2]|0;
-  $9 = $77;
- }
- if ((label|0) == 6) {
-  $5 = -1;
-  $78 = $5;
-  STACKTOP = sp;return ($78|0);
- }
- else if ((label|0) == 19) {
-  $5 = 0;
-  $78 = $5;
-  STACKTOP = sp;return ($78|0);
- }
- return (0)|0;
-}
-function _include_class_new($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$sink = 0, $$sink2 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;
- var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0;
- var $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0;
- var sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $0;
- $4 = $1;
- $5 = $2;
- $7 = $3;
- $8 = $3;
- $9 = ((($8)) + 36|0);
- $10 = HEAP32[$9>>2]|0;
- $11 = (_mrb_obj_alloc($7,11,$10)|0);
- $6 = $11;
- $12 = $4;
- $13 = HEAP32[$12>>2]|0;
- $14 = $13 & 255;
- $15 = ($14|0)==(11);
- if ($15) {
-  $16 = $4;
-  $17 = ((($16)) + 4|0);
-  $18 = HEAP32[$17>>2]|0;
-  $4 = $18;
- }
- $19 = $4;
- $20 = HEAP32[$19>>2]|0;
- $21 = $20 >>> 11;
- $22 = $21 & 524288;
- $23 = ($22|0)!=(0);
- L4: do {
-  if ($23) {
-   $24 = $4;
-   $25 = ((($24)) + 20|0);
-   $26 = HEAP32[$25>>2]|0;
-   $4 = $26;
-   while(1) {
-    $27 = $4;
-    $28 = HEAP32[$27>>2]|0;
-    $29 = $28 >>> 11;
-    $30 = $29 & 1048576;
-    $31 = ($30|0)!=(0);
-    $32 = $31 ^ 1;
-    if (!($32)) {
-     break L4;
-    }
-    $33 = $4;
-    $34 = ((($33)) + 20|0);
-    $35 = HEAP32[$34>>2]|0;
-    $4 = $35;
-   }
-  }
- } while(0);
- $36 = $4;
- $37 = ((($36)) + 12|0);
- $38 = HEAP32[$37>>2]|0;
- $39 = $6;
- $40 = ((($39)) + 12|0);
- HEAP32[$40>>2] = $38;
- $41 = $4;
- $42 = ((($41)) + 16|0);
- $43 = HEAP32[$42>>2]|0;
- $44 = $6;
- $45 = ((($44)) + 16|0);
- HEAP32[$45>>2] = $43;
- $46 = $5;
- $47 = $6;
- $48 = ((($47)) + 20|0);
- HEAP32[$48>>2] = $46;
- $49 = $4;
- $50 = HEAP32[$49>>2]|0;
- $51 = $50 & 255;
- $52 = ($51|0)==(11);
- $53 = $4;
- if ($52) {
-  $54 = ((($53)) + 4|0);
-  $55 = HEAP32[$54>>2]|0;
-  $56 = $6;
-  $$sink = $55;$$sink2 = $56;
-  $58 = ((($$sink2)) + 4|0);
-  HEAP32[$58>>2] = $$sink;
-  $59 = $6;
-  STACKTOP = sp;return ($59|0);
- } else {
-  $57 = $6;
-  $$sink = $53;$$sink2 = $57;
-  $58 = ((($$sink2)) + 4|0);
-  HEAP32[$58>>2] = $$sink;
-  $59 = $6;
-  STACKTOP = sp;return ($59|0);
- }
- return (0)|0;
-}
-function _mrb_prepend_module($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;
- var $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0;
- var $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $7 = 0, $8 = 0;
- var $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $3 = $0;
- $4 = $1;
- $5 = $2;
- $7 = 0;
- $8 = $4;
- $9 = HEAP32[$8>>2]|0;
- $10 = $9 >>> 11;
- $11 = $10 & 524288;
- $12 = ($11|0)!=(0);
- if (!($12)) {
-  $13 = $3;
-  $14 = $4;
-  $15 = (_mrb_obj_alloc($13,11,$14)|0);
-  $6 = $15;
-  $16 = $6;
-  $17 = HEAP32[$16>>2]|0;
-  $18 = $17 >>> 11;
-  $19 = $18 | 1048576;
-  $20 = HEAP32[$16>>2]|0;
-  $21 = $19 & 2097151;
-  $22 = $21 << 11;
-  $23 = $20 & 2047;
-  $24 = $23 | $22;
-  HEAP32[$16>>2] = $24;
-  $25 = $4;
-  $26 = ((($25)) + 20|0);
-  $27 = HEAP32[$26>>2]|0;
-  $28 = $6;
-  $29 = ((($28)) + 20|0);
-  HEAP32[$29>>2] = $27;
-  $30 = $6;
-  $31 = $4;
-  $32 = ((($31)) + 20|0);
-  HEAP32[$32>>2] = $30;
-  $33 = $4;
-  $34 = ((($33)) + 16|0);
-  $35 = HEAP32[$34>>2]|0;
-  $36 = $6;
-  $37 = ((($36)) + 16|0);
-  HEAP32[$37>>2] = $35;
-  $38 = $3;
-  $39 = (_kh_init_mt($38)|0);
-  $40 = $4;
-  $41 = ((($40)) + 16|0);
-  HEAP32[$41>>2] = $39;
-  $42 = $3;
-  $43 = $4;
-  $44 = $6;
-  _mrb_field_write_barrier($42,$43,$44);
-  $45 = $4;
-  $46 = HEAP32[$45>>2]|0;
-  $47 = $46 >>> 11;
-  $48 = $47 | 524288;
-  $49 = HEAP32[$45>>2]|0;
-  $50 = $48 & 2097151;
-  $51 = $50 << 11;
-  $52 = $49 & 2047;
-  $53 = $52 | $51;
-  HEAP32[$45>>2] = $53;
- }
- $54 = $3;
- $55 = $4;
- $56 = $4;
- $57 = $5;
- $58 = (_include_module_at($54,$55,$56,$57,0)|0);
- $7 = $58;
- $59 = $7;
- $60 = ($59|0)<(0);
- if ($60) {
-  $61 = $3;
-  $62 = $3;
-  $63 = (_mrb_class_get($62,69160)|0);
-  _mrb_raise($61,$63,65362);
-  // unreachable;
- } else {
-  STACKTOP = sp;return;
- }
-}
-function _mrb_singleton_class($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;
- var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0;
- var $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0;
- var $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $$byval_copy = sp + 16|0;
- $5 = sp;
- $3 = $1;
- $6 = ((($2)) + 4|0);
- $7 = HEAP32[$6>>2]|0;
- switch ($7|0) {
- case 0:  {
-  $8 = ((($2)) + 4|0);
-  $9 = HEAP32[$8>>2]|0;
-  $10 = ($9|0)==(0);
-  if ($10) {
-   $11 = HEAP32[$2>>2]|0;
-   $12 = ($11|0)!=(0);
-   if (!($12)) {
-    $13 = $3;
-    $14 = ((($13)) + 76|0);
-    $15 = HEAP32[$14>>2]|0;
-    _mrb_obj_value_661($0,$15);
-    STACKTOP = sp;return;
-   }
-  }
-  $16 = $3;
-  $17 = ((($16)) + 72|0);
-  $18 = HEAP32[$17>>2]|0;
-  _mrb_obj_value_661($0,$18);
-  STACKTOP = sp;return;
-  break;
- }
- case 2:  {
-  $19 = $3;
-  $20 = ((($19)) + 68|0);
-  $21 = HEAP32[$20>>2]|0;
-  _mrb_obj_value_661($0,$21);
-  STACKTOP = sp;return;
-  break;
- }
- case 7:  {
-  $22 = $3;
-  $23 = ((($22)) + 32|0);
-  $24 = HEAP32[$23>>2]|0;
-  _mrb_obj_value_661($0,$24);
-  STACKTOP = sp;return;
-  break;
- }
- case 6: case 3: case 4:  {
-  $25 = $3;
-  $26 = $3;
-  $27 = (_mrb_class_get($26,69204)|0);
-  _mrb_raise($25,$27,65386);
-  // unreachable;
-  break;
- }
- default: {
-  $28 = HEAP32[$2>>2]|0;
-  $4 = $28;
-  $29 = $3;
-  $30 = $4;
-  _prepare_singleton_class($29,$30);
-  $31 = $3;
-  $32 = ((($31)) + 12|0);
-  $33 = HEAP32[$32>>2]|0;
-  $34 = ($33|0)!=(0|0);
-  if ($34) {
-   $35 = $3;
-   $36 = ((($35)) + 12|0);
-   $37 = HEAP32[$36>>2]|0;
-   $38 = ((($37)) + 16|0);
-   $39 = HEAP32[$38>>2]|0;
-   $40 = ($39|0)!=(0|0);
-   if ($40) {
-    $41 = $3;
-    $42 = ((($41)) + 12|0);
-    $43 = HEAP32[$42>>2]|0;
-    $44 = ((($43)) + 16|0);
-    $45 = HEAP32[$44>>2]|0;
-    $46 = ((($45)) + 44|0);
-    $47 = HEAP32[$46>>2]|0;
-    $48 = ($47|0)!=(0|0);
-    if ($48) {
-     $49 = $3;
-     $50 = $4;
-     $51 = ((($50)) + 4|0);
-     $52 = HEAP32[$51>>2]|0;
-     $53 = $3;
-     $54 = (_mrb_intern_static($53,64860,9)|0);
-     $55 = $3;
-     $56 = ((($55)) + 12|0);
-     $57 = HEAP32[$56>>2]|0;
-     $58 = ((($57)) + 16|0);
-     $59 = HEAP32[$58>>2]|0;
-     $60 = ((($59)) + 44|0);
-     $61 = HEAP32[$60>>2]|0;
-     _mrb_obj_value_661($5,$61);
-     ;HEAP32[$$byval_copy>>2]=HEAP32[$5>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$5+4>>2]|0;
-     _mrb_obj_iv_set($49,$52,$54,$$byval_copy);
-    }
-   }
-  }
-  $62 = $4;
-  $63 = ((($62)) + 4|0);
-  $64 = HEAP32[$63>>2]|0;
-  _mrb_obj_value_661($0,$64);
-  STACKTOP = sp;return;
- }
- }
-}
-function _mrb_define_singleton_method($0,$1,$2,$3,$4) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- $4 = $4|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $5 = $0;
- $6 = $1;
- $7 = $2;
- $8 = $3;
- $9 = $4;
- $10 = $5;
- $11 = $6;
- _prepare_singleton_class($10,$11);
- $12 = $5;
- $13 = $6;
- $14 = ((($13)) + 4|0);
- $15 = HEAP32[$14>>2]|0;
- $16 = $5;
- $17 = $7;
- $18 = (_mrb_intern_cstr($16,$17)|0);
- $19 = $8;
- $20 = $9;
- _mrb_define_method_id($12,$15,$18,$19,$20);
- STACKTOP = sp;return;
-}
-function _mrb_define_class_method($0,$1,$2,$3,$4) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- $4 = $4|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $5 = $0;
- $6 = $1;
- $7 = $2;
- $8 = $3;
- $9 = $4;
- $10 = $5;
- $11 = $6;
- $12 = $7;
- $13 = $8;
- $14 = $9;
- _mrb_define_singleton_method($10,$11,$12,$13,$14);
- STACKTOP = sp;return;
-}
-function _mrb_method_search_vm($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;
- var $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0;
- var label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $4 = $0;
- $5 = $1;
- $6 = $2;
- $11 = $5;
- $12 = HEAP32[$11>>2]|0;
- $9 = $12;
- while(1) {
-  $13 = $9;
-  $14 = ($13|0)!=(0|0);
-  if (!($14)) {
-   break;
-  }
-  $15 = $9;
-  $16 = ((($15)) + 16|0);
-  $17 = HEAP32[$16>>2]|0;
-  $10 = $17;
-  $18 = $10;
-  $19 = ($18|0)!=(0|0);
-  if ($19) {
-   $20 = $4;
-   $21 = $10;
-   $22 = $6;
-   $23 = (_kh_get_mt($20,$21,$22)|0);
-   $7 = $23;
-   $24 = $7;
-   $25 = $10;
-   $26 = HEAP32[$25>>2]|0;
-   $27 = ($24|0)!=($26|0);
-   if ($27) {
-    label = 5;
-    break;
-   }
-  }
-  $39 = $9;
-  $40 = ((($39)) + 20|0);
-  $41 = HEAP32[$40>>2]|0;
-  $9 = $41;
- }
- if ((label|0) == 5) {
-  $28 = $10;
-  $29 = ((($28)) + 20|0);
-  $30 = HEAP32[$29>>2]|0;
-  $31 = $7;
-  $32 = (($30) + ($31<<2)|0);
-  $33 = HEAP32[$32>>2]|0;
-  $8 = $33;
-  $34 = $8;
-  $35 = ($34|0)!=(0|0);
-  if ($35) {
-   $36 = $9;
-   $37 = $5;
-   HEAP32[$37>>2] = $36;
-   $38 = $8;
-   $3 = $38;
-   $42 = $3;
-   STACKTOP = sp;return ($42|0);
-  }
- }
- $3 = 0;
- $42 = $3;
- STACKTOP = sp;return ($42|0);
-}
-function _mrb_method_search($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $$byval_copy4 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;
- var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $5 = 0, $6 = 0, $7 = 0;
- var $8 = 0, $9 = 0, $vararg_buffer = 0, $vararg_buffer1 = 0, $vararg_ptr3 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 96|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(96|0);
- $$byval_copy4 = sp + 88|0;
- $$byval_copy = sp + 80|0;
- $vararg_buffer1 = sp + 8|0;
- $vararg_buffer = sp;
- $4 = sp + 72|0;
- $7 = sp + 56|0;
- $8 = sp + 48|0;
- $9 = sp + 40|0;
- $10 = sp + 32|0;
- $11 = sp + 24|0;
- $3 = $0;
- HEAP32[$4>>2] = $1;
- $5 = $2;
- $12 = $3;
- $13 = $5;
- $14 = (_mrb_method_search_vm($12,$4,$13)|0);
- $6 = $14;
- $15 = $6;
- $16 = ($15|0)!=(0|0);
- if ($16) {
-  $42 = $6;
-  STACKTOP = sp;return ($42|0);
- }
- $17 = $3;
- $18 = HEAP32[$4>>2]|0;
- _mrb_obj_value_661($8,$18);
- ;HEAP32[$$byval_copy>>2]=HEAP32[$8>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$8+4>>2]|0;
- _mrb_funcall($7,$17,$$byval_copy,69281,0,$vararg_buffer);
- $19 = ((($7)) + 4|0);
- $20 = HEAP32[$19>>2]|0;
- $21 = ($20|0)==(16);
- if ($21) {
-  $22 = HEAP32[$7>>2]|0;
-  $23 = HEAP32[$22>>2]|0;
-  $24 = $23 >>> 11;
-  $25 = $24 & 8;
-  $26 = ($25|0)!=(0);
-  $27 = HEAP32[$7>>2]|0;
-  if ($26) {
-   $28 = HEAP32[$27>>2]|0;
-   $29 = $28 >>> 11;
-   $30 = $29 & 496;
-   $31 = $30 >> 4;
-   $35 = $31;
-  } else {
-   $32 = ((($27)) + 12|0);
-   $33 = HEAP32[$32>>2]|0;
-   $35 = $33;
-  }
-  $34 = ($35|0)>(64);
-  if ($34) {
-   $36 = $3;
-   $37 = HEAP32[$4>>2]|0;
-   _mrb_obj_value_661($9,$37);
-   ;HEAP32[$$byval_copy4>>2]=HEAP32[$9>>2]|0;HEAP32[$$byval_copy4+4>>2]=HEAP32[$9+4>>2]|0;
-   _mrb_any_to_s($10,$36,$$byval_copy4);
-   ;HEAP32[$7>>2]=HEAP32[$10>>2]|0;HEAP32[$7+4>>2]=HEAP32[$10+4>>2]|0;
-  }
- }
- $38 = $3;
- $39 = $5;
- $40 = $3;
- $41 = $5;
- _mrb_sym2str($11,$40,$41);
- ;HEAP8[$vararg_buffer1>>0]=HEAP8[$11>>0]|0;HEAP8[$vararg_buffer1+1>>0]=HEAP8[$11+1>>0]|0;HEAP8[$vararg_buffer1+2>>0]=HEAP8[$11+2>>0]|0;HEAP8[$vararg_buffer1+3>>0]=HEAP8[$11+3>>0]|0;HEAP8[$vararg_buffer1+4>>0]=HEAP8[$11+4>>0]|0;HEAP8[$vararg_buffer1+5>>0]=HEAP8[$11+5>>0]|0;HEAP8[$vararg_buffer1+6>>0]=HEAP8[$11+6>>0]|0;HEAP8[$vararg_buffer1+7>>0]=HEAP8[$11+7>>0]|0;
- $vararg_ptr3 = ((($vararg_buffer1)) + 8|0);
- ;HEAP8[$vararg_ptr3>>0]=HEAP8[$7>>0]|0;HEAP8[$vararg_ptr3+1>>0]=HEAP8[$7+1>>0]|0;HEAP8[$vararg_ptr3+2>>0]=HEAP8[$7+2>>0]|0;HEAP8[$vararg_ptr3+3>>0]=HEAP8[$7+3>>0]|0;HEAP8[$vararg_ptr3+4>>0]=HEAP8[$7+4>>0]|0;HEAP8[$vararg_ptr3+5>>0]=HEAP8[$7+5>>0]|0;HEAP8[$vararg_ptr3+6>>0]=HEAP8[$7+6>>0]|0;HEAP8[$vararg_ptr3+7>>0]=HEAP8[$7+7>>0]|0;
- _mrb_name_error($38,$39,65409,$vararg_buffer1);
- // unreachable;
- return (0)|0;
-}
-function _mrb_instance_new($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $$byval_copy3 = 0, $$byval_copy4 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, $vararg_ptr1 = 0, $vararg_ptr2 = 0;
- var label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 96|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(96|0);
- $$byval_copy4 = sp + 80|0;
- $$byval_copy3 = sp + 72|0;
- $$byval_copy = sp + 64|0;
- $vararg_buffer = sp;
- $4 = sp + 48|0;
- $5 = sp + 40|0;
- $6 = sp + 36|0;
- $7 = sp + 32|0;
- $8 = sp + 24|0;
- $9 = sp + 16|0;
- $3 = $1;
- $10 = $3;
- HEAP32[$vararg_buffer>>2] = $6;
- $vararg_ptr1 = ((($vararg_buffer)) + 4|0);
- HEAP32[$vararg_ptr1>>2] = $7;
- $vararg_ptr2 = ((($vararg_buffer)) + 8|0);
- HEAP32[$vararg_ptr2>>2] = $5;
- (_mrb_get_args($10,65444,$vararg_buffer)|0);
- $11 = $3;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
- _mrb_instance_alloc($8,$11,$$byval_copy);
- ;HEAP32[$4>>2]=HEAP32[$8>>2]|0;HEAP32[$4+4>>2]=HEAP32[$8+4>>2]|0;
- $12 = $3;
- $13 = $3;
- $14 = (_mrb_intern_static($13,69252,10)|0);
- $15 = HEAP32[$7>>2]|0;
- $16 = HEAP32[$6>>2]|0;
- ;HEAP32[$$byval_copy3>>2]=HEAP32[$4>>2]|0;HEAP32[$$byval_copy3+4>>2]=HEAP32[$4+4>>2]|0;
- ;HEAP32[$$byval_copy4>>2]=HEAP32[$5>>2]|0;HEAP32[$$byval_copy4+4>>2]=HEAP32[$5+4>>2]|0;
- _mrb_funcall_with_block($9,$12,$$byval_copy3,$14,$15,$16,$$byval_copy4);
- ;HEAP32[$0>>2]=HEAP32[$4>>2]|0;HEAP32[$0+4>>2]=HEAP32[$4+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_instance_alloc($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0;
- var $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $1;
- $7 = HEAP32[$2>>2]|0;
- $4 = $7;
- $8 = $4;
- $9 = HEAP32[$8>>2]|0;
- $10 = $9 >>> 11;
- $11 = $10 & 255;
- $6 = $11;
- $12 = $4;
- $13 = HEAP32[$12>>2]|0;
- $14 = $13 & 255;
- $15 = ($14|0)==(12);
- if ($15) {
-  $16 = $3;
-  $17 = $3;
-  $18 = (_mrb_class_get($17,69204)|0);
-  _mrb_raise($16,$18,65447);
-  // unreachable;
- }
- $19 = $6;
- $20 = ($19|0)==(0);
- if ($20) {
-  $6 = 8;
- }
- $21 = $3;
- $22 = $6;
- $23 = $4;
- $24 = (_mrb_obj_alloc($21,$22,$23)|0);
- $5 = $24;
- $25 = $5;
- _mrb_obj_value_661($0,$25);
- STACKTOP = sp;return;
-}
-function _mrb_obj_new($0,$1,$2,$3,$4) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- $4 = $4|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);
- $$byval_copy1 = sp + 56|0;
- $$byval_copy = sp + 48|0;
- $9 = sp + 24|0;
- $10 = sp + 16|0;
- $11 = sp + 8|0;
- $12 = sp;
- $5 = $1;
- $6 = $2;
- $7 = $3;
- $8 = $4;
- $13 = $5;
- $14 = $6;
- _mrb_obj_value_661($10,$14);
- ;HEAP32[$$byval_copy>>2]=HEAP32[$10>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$10+4>>2]|0;
- _mrb_instance_alloc($11,$13,$$byval_copy);
- ;HEAP32[$9>>2]=HEAP32[$11>>2]|0;HEAP32[$9+4>>2]=HEAP32[$11+4>>2]|0;
- $15 = $5;
- $16 = $5;
- $17 = (_mrb_intern_static($16,69252,10)|0);
- $18 = $7;
- $19 = $8;
- ;HEAP32[$$byval_copy1>>2]=HEAP32[$9>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$9+4>>2]|0;
- _mrb_funcall_argv($12,$15,$$byval_copy1,$17,$18,$19);
- ;HEAP32[$0>>2]=HEAP32[$9>>2]|0;HEAP32[$0+4>>2]=HEAP32[$9+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_method_missing($0,$1,$2,$3) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- var $$byval_copy = 0, $$byval_copy2 = 0, $$byval_copy3 = 0, $$byval_copy4 = 0, $$byval_copy5 = 0, $$byval_copy6 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0;
- var $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0;
- var $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0;
- var $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0;
- var $8 = 0, $80 = 0, $9 = 0, $vararg_buffer = 0, $vararg_ptr1 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 128|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(128|0);
- $$byval_copy6 = sp + 120|0;
- $$byval_copy5 = sp + 112|0;
- $$byval_copy4 = sp + 104|0;
- $$byval_copy3 = sp + 96|0;
- $$byval_copy2 = sp + 88|0;
- $$byval_copy = sp + 80|0;
- $vararg_buffer = sp;
- $7 = sp + 56|0;
- $8 = sp + 48|0;
- $9 = sp + 40|0;
- $10 = sp + 32|0;
- $11 = sp + 24|0;
- $12 = sp + 16|0;
- $4 = $0;
- $5 = $1;
- $13 = $4;
- $14 = (_mrb_intern_static($13,69281,7)|0);
- $6 = $14;
- $15 = $4;
- $16 = ((($15)) + 12|0);
- $17 = HEAP32[$16>>2]|0;
- $18 = ((($17)) + 16|0);
- $19 = HEAP32[$18>>2]|0;
- $20 = $4;
- $21 = ((($20)) + 12|0);
- $22 = HEAP32[$21>>2]|0;
- $23 = ((($22)) + 20|0);
- $24 = HEAP32[$23>>2]|0;
- $25 = ($19>>>0)>($24>>>0);
- if ($25) {
-  $26 = $4;
-  $27 = ((($26)) + 12|0);
-  $28 = HEAP32[$27>>2]|0;
-  $29 = ((($28)) + 16|0);
-  $30 = HEAP32[$29>>2]|0;
-  $31 = ((($30)) + -48|0);
-  $32 = HEAP32[$31>>2]|0;
-  $33 = $6;
-  $34 = ($32|0)==($33|0);
-  if ($34) {
-   $35 = $4;
-   ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
-   _mrb_any_to_s($8,$35,$$byval_copy);
-   ;HEAP32[$7>>2]=HEAP32[$8>>2]|0;HEAP32[$7+4>>2]=HEAP32[$8+4>>2]|0;
-  } else {
-   label = 4;
-  }
- } else {
-  label = 4;
- }
- do {
-  if ((label|0) == 4) {
-   $36 = $4;
-   $37 = $6;
-   ;HEAP32[$$byval_copy2>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy2+4>>2]=HEAP32[$2+4>>2]|0;
-   $38 = (_mrb_respond_to($36,$$byval_copy2,$37)|0);
-   $39 = $38&255;
-   $40 = ($39|0)!=(0);
-   if ($40) {
-    $41 = $4;
-    $42 = ((($41)) + 12|0);
-    $43 = HEAP32[$42>>2]|0;
-    $44 = ((($43)) + 16|0);
-    $45 = HEAP32[$44>>2]|0;
-    $46 = $4;
-    $47 = ((($46)) + 12|0);
-    $48 = HEAP32[$47>>2]|0;
-    $49 = ((($48)) + 20|0);
-    $50 = HEAP32[$49>>2]|0;
-    $51 = $45;
-    $52 = $50;
-    $53 = (($51) - ($52))|0;
-    $54 = (($53|0) / 48)&-1;
-    $55 = ($54|0)<(64);
-    if ($55) {
-     $56 = $4;
-     $57 = $6;
-     ;HEAP32[$$byval_copy3>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy3+4>>2]=HEAP32[$2+4>>2]|0;
-     _mrb_funcall_argv($9,$56,$$byval_copy3,$57,0,0);
-     ;HEAP32[$7>>2]=HEAP32[$9>>2]|0;HEAP32[$7+4>>2]=HEAP32[$9+4>>2]|0;
-     $58 = ((($7)) + 4|0);
-     $59 = HEAP32[$58>>2]|0;
-     $60 = ($59|0)==(16);
-     if (!($60)) {
-      break;
-     }
-     $61 = HEAP32[$7>>2]|0;
-     $62 = HEAP32[$61>>2]|0;
-     $63 = $62 >>> 11;
-     $64 = $63 & 8;
-     $65 = ($64|0)!=(0);
-     $66 = HEAP32[$7>>2]|0;
-     if ($65) {
-      $67 = HEAP32[$66>>2]|0;
-      $68 = $67 >>> 11;
-      $69 = $68 & 496;
-      $70 = $69 >> 4;
-      $74 = $70;
-     } else {
-      $71 = ((($66)) + 12|0);
-      $72 = HEAP32[$71>>2]|0;
-      $74 = $72;
-     }
-     $73 = ($74|0)>(64);
-     if (!($73)) {
-      break;
-     }
-     $75 = $4;
-     ;HEAP32[$$byval_copy4>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy4+4>>2]=HEAP32[$2+4>>2]|0;
-     _mrb_any_to_s($10,$75,$$byval_copy4);
-     ;HEAP32[$7>>2]=HEAP32[$10>>2]|0;HEAP32[$7+4>>2]=HEAP32[$10+4>>2]|0;
-     break;
-    }
-   }
-   $76 = $4;
-   ;HEAP32[$$byval_copy5>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy5+4>>2]=HEAP32[$2+4>>2]|0;
-   _mrb_any_to_s($11,$76,$$byval_copy5);
-   ;HEAP32[$7>>2]=HEAP32[$11>>2]|0;HEAP32[$7+4>>2]=HEAP32[$11+4>>2]|0;
-  }
- } while(0);
- $77 = $4;
- $78 = $5;
- $79 = $4;
- $80 = $5;
- _mrb_sym2str($12,$79,$80);
- ;HEAP8[$vararg_buffer>>0]=HEAP8[$12>>0]|0;HEAP8[$vararg_buffer+1>>0]=HEAP8[$12+1>>0]|0;HEAP8[$vararg_buffer+2>>0]=HEAP8[$12+2>>0]|0;HEAP8[$vararg_buffer+3>>0]=HEAP8[$12+3>>0]|0;HEAP8[$vararg_buffer+4>>0]=HEAP8[$12+4>>0]|0;HEAP8[$vararg_buffer+5>>0]=HEAP8[$12+5>>0]|0;HEAP8[$vararg_buffer+6>>0]=HEAP8[$12+6>>0]|0;HEAP8[$vararg_buffer+7>>0]=HEAP8[$12+7>>0]|0;
- $vararg_ptr1 = ((($vararg_buffer)) + 8|0);
- ;HEAP8[$vararg_ptr1>>0]=HEAP8[$7>>0]|0;HEAP8[$vararg_ptr1+1>>0]=HEAP8[$7+1>>0]|0;HEAP8[$vararg_ptr1+2>>0]=HEAP8[$7+2>>0]|0;HEAP8[$vararg_ptr1+3>>0]=HEAP8[$7+3>>0]|0;HEAP8[$vararg_ptr1+4>>0]=HEAP8[$7+4>>0]|0;HEAP8[$vararg_ptr1+5>>0]=HEAP8[$7+5>>0]|0;HEAP8[$vararg_ptr1+6>>0]=HEAP8[$7+6>>0]|0;HEAP8[$vararg_ptr1+7>>0]=HEAP8[$7+7>>0]|0;
- ;HEAP32[$$byval_copy6>>2]=HEAP32[$3>>2]|0;HEAP32[$$byval_copy6+4>>2]=HEAP32[$3+4>>2]|0;
- _mrb_no_method_error($77,$78,$$byval_copy6,65488,$vararg_buffer);
- // unreachable;
-}
-function _mrb_respond_to($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $$byval_copy = sp + 8|0;
- $3 = $0;
- $4 = $2;
- $5 = $3;
- $6 = $3;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$1>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$1+4>>2]|0;
- $7 = (_mrb_class_728($6,$$byval_copy)|0);
- $8 = $4;
- $9 = (_mrb_obj_respond_to($5,$7,$8)|0);
- STACKTOP = sp;return ($9|0);
-}
-function _mrb_class_728($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;
- var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $0;
- $4 = ((($1)) + 4|0);
- $5 = HEAP32[$4>>2]|0;
- L1: do {
-  switch ($5|0) {
-  case 0:  {
-   $6 = HEAP32[$1>>2]|0;
-   $7 = ($6|0)!=(0);
-   $8 = $3;
-   if ($7) {
-    $9 = ((($8)) + 72|0);
-    $10 = HEAP32[$9>>2]|0;
-    $2 = $10;
-    break L1;
-   } else {
-    $11 = ((($8)) + 76|0);
-    $12 = HEAP32[$11>>2]|0;
-    $2 = $12;
-    break L1;
-   }
-   break;
-  }
-  case 2:  {
-   $13 = $3;
-   $14 = ((($13)) + 68|0);
-   $15 = HEAP32[$14>>2]|0;
-   $2 = $15;
-   break;
-  }
-  case 4:  {
-   $16 = $3;
-   $17 = ((($16)) + 80|0);
-   $18 = HEAP32[$17>>2]|0;
-   $2 = $18;
-   break;
-  }
-  case 3:  {
-   $19 = $3;
-   $20 = ((($19)) + 64|0);
-   $21 = HEAP32[$20>>2]|0;
-   $2 = $21;
-   break;
-  }
-  case 6:  {
-   $22 = $3;
-   $23 = ((($22)) + 60|0);
-   $24 = HEAP32[$23>>2]|0;
-   $2 = $24;
-   break;
-  }
-  case 7:  {
-   $25 = $3;
-   $26 = ((($25)) + 32|0);
-   $27 = HEAP32[$26>>2]|0;
-   $2 = $27;
-   break;
-  }
-  case 20:  {
-   $2 = 0;
-   break;
-  }
-  default: {
-   $28 = HEAP32[$1>>2]|0;
-   $29 = ((($28)) + 4|0);
-   $30 = HEAP32[$29>>2]|0;
-   $2 = $30;
-  }
-  }
- } while(0);
- $31 = $2;
- STACKTOP = sp;return ($31|0);
-}
-function _mrb_obj_respond_to($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;
- var $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $4 = $0;
- $5 = $1;
- $6 = $2;
- while(1) {
-  $9 = $5;
-  $10 = ($9|0)!=(0|0);
-  if (!($10)) {
-   label = 9;
-   break;
-  }
-  $11 = $5;
-  $12 = ((($11)) + 16|0);
-  $13 = HEAP32[$12>>2]|0;
-  $8 = $13;
-  $14 = $8;
-  $15 = ($14|0)!=(0|0);
-  if ($15) {
-   $16 = $4;
-   $17 = $8;
-   $18 = $6;
-   $19 = (_kh_get_mt($16,$17,$18)|0);
-   $7 = $19;
-   $20 = $7;
-   $21 = $8;
-   $22 = HEAP32[$21>>2]|0;
-   $23 = ($20|0)!=($22|0);
-   if ($23) {
-    break;
-   }
-  }
-  $31 = $5;
-  $32 = ((($31)) + 20|0);
-  $33 = HEAP32[$32>>2]|0;
-  $5 = $33;
- }
- if ((label|0) == 9) {
-  $3 = 0;
-  $34 = $3;
-  STACKTOP = sp;return ($34|0);
- }
- $24 = $8;
- $25 = ((($24)) + 20|0);
- $26 = HEAP32[$25>>2]|0;
- $27 = $7;
- $28 = (($26) + ($27<<2)|0);
- $29 = HEAP32[$28>>2]|0;
- $30 = ($29|0)!=(0|0);
- if ($30) {
-  $3 = 1;
-  $34 = $3;
-  STACKTOP = sp;return ($34|0);
- } else {
-  $3 = 0;
-  $34 = $3;
-  STACKTOP = sp;return ($34|0);
- }
- return (0)|0;
-}
-function _mrb_class_path($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $$byval_copy2 = 0, $$byval_copy3 = 0, $$byval_copy4 = 0, $$byval_copy5 = 0, $$byval_copy6 = 0, $$byval_copy7 = 0, $$byval_copy8 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0;
- var $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0;
- var $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0;
- var $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0;
- var $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 192|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(192|0);
- $$byval_copy8 = sp + 176|0;
- $$byval_copy7 = sp + 168|0;
- $$byval_copy6 = sp + 160|0;
- $$byval_copy5 = sp + 152|0;
- $$byval_copy4 = sp + 144|0;
- $$byval_copy3 = sp + 136|0;
- $$byval_copy2 = sp + 128|0;
- $$byval_copy1 = sp + 120|0;
- $$byval_copy = sp + 112|0;
- $5 = sp + 96|0;
- $8 = sp + 80|0;
- $11 = sp + 64|0;
- $12 = sp + 56|0;
- $13 = sp + 48|0;
- $14 = sp + 40|0;
- $15 = sp + 32|0;
- $16 = sp + 24|0;
- $17 = sp + 16|0;
- $18 = sp + 8|0;
- $19 = sp;
- $3 = $1;
- $4 = $2;
- $20 = $3;
- $21 = (_mrb_intern_static($20,65517,13)|0);
- $7 = $21;
- $22 = $3;
- $23 = $4;
- $24 = $7;
- _mrb_obj_iv_get($8,$22,$23,$24);
- ;HEAP32[$5>>2]=HEAP32[$8>>2]|0;HEAP32[$5+4>>2]=HEAP32[$8+4>>2]|0;
- $25 = ((($5)) + 4|0);
- $26 = HEAP32[$25>>2]|0;
- $27 = ($26|0)==(0);
- if ($27) {
-  $28 = HEAP32[$5>>2]|0;
-  $29 = ($28|0)!=(0);
-  if (!($29)) {
-   $30 = $3;
-   $31 = $4;
-   $32 = (_mrb_class_outer_module($30,$31)|0);
-   $9 = $32;
-   $33 = $3;
-   $34 = $4;
-   $35 = $9;
-   $36 = (_mrb_class_sym($33,$34,$35)|0);
-   $10 = $36;
-   $37 = $10;
-   $38 = ($37|0)==(0);
-   if ($38) {
-    _mrb_nil_value_689($0);
-    STACKTOP = sp;return;
-   }
-   $39 = $9;
-   $40 = ($39|0)!=(0|0);
-   if ($40) {
-    $41 = $9;
-    $42 = $3;
-    $43 = ((($42)) + 32|0);
-    $44 = HEAP32[$43>>2]|0;
-    $45 = ($41|0)!=($44|0);
-    if ($45) {
-     $46 = $3;
-     $47 = $9;
-     _mrb_class_path($12,$46,$47);
-     $48 = $3;
-     _mrb_str_buf_new($13,$48,0);
-     ;HEAP32[$5>>2]=HEAP32[$13>>2]|0;HEAP32[$5+4>>2]=HEAP32[$13+4>>2]|0;
-     $49 = ((($12)) + 4|0);
-     $50 = HEAP32[$49>>2]|0;
-     $51 = ($50|0)==(0);
-     if ($51) {
-      $52 = HEAP32[$12>>2]|0;
-      $53 = ($52|0)!=(0);
-      if ($53) {
-       label = 10;
-      } else {
-       $54 = $3;
-       ;HEAP32[$$byval_copy>>2]=HEAP32[$5>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$5+4>>2]|0;
-       _mrb_str_cat($14,$54,$$byval_copy,65531,8);
-       $55 = $3;
-       $56 = $3;
-       $57 = $9;
-       _mrb_ptr_to_str($15,$56,$57);
-       ;HEAP32[$$byval_copy1>>2]=HEAP32[$5>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$5+4>>2]|0;
-       ;HEAP32[$$byval_copy2>>2]=HEAP32[$15>>2]|0;HEAP32[$$byval_copy2+4>>2]=HEAP32[$15+4>>2]|0;
-       _mrb_str_concat($55,$$byval_copy1,$$byval_copy2);
-       $58 = $3;
-       ;HEAP32[$$byval_copy3>>2]=HEAP32[$5>>2]|0;HEAP32[$$byval_copy3+4>>2]=HEAP32[$5+4>>2]|0;
-       _mrb_str_cat($16,$58,$$byval_copy3,65540,1);
-      }
-     } else {
-      label = 10;
-     }
-     if ((label|0) == 10) {
-      $59 = $3;
-      ;HEAP32[$$byval_copy4>>2]=HEAP32[$5>>2]|0;HEAP32[$$byval_copy4+4>>2]=HEAP32[$5+4>>2]|0;
-      ;HEAP32[$$byval_copy5>>2]=HEAP32[$12>>2]|0;HEAP32[$$byval_copy5+4>>2]=HEAP32[$12+4>>2]|0;
-      _mrb_str_concat($59,$$byval_copy4,$$byval_copy5);
-     }
-     $60 = $3;
-     ;HEAP32[$$byval_copy6>>2]=HEAP32[$5>>2]|0;HEAP32[$$byval_copy6+4>>2]=HEAP32[$5+4>>2]|0;
-     _mrb_str_cat($17,$60,$$byval_copy6,65542,2);
-     $61 = $3;
-     $62 = $10;
-     $63 = (_mrb_sym2name_len($61,$62,$11)|0);
-     $6 = $63;
-     $64 = $3;
-     $65 = $6;
-     $66 = HEAP32[$11>>2]|0;
-     ;HEAP32[$$byval_copy7>>2]=HEAP32[$5>>2]|0;HEAP32[$$byval_copy7+4>>2]=HEAP32[$5+4>>2]|0;
-     _mrb_str_cat($18,$64,$$byval_copy7,$65,$66);
-    } else {
-     label = 12;
-    }
-   } else {
-    label = 12;
-   }
-   if ((label|0) == 12) {
-    $67 = $3;
-    $68 = $10;
-    $69 = (_mrb_sym2name_len($67,$68,$11)|0);
-    $6 = $69;
-    $70 = $3;
-    $71 = $6;
-    $72 = HEAP32[$11>>2]|0;
-    _mrb_str_new($19,$70,$71,$72);
-    ;HEAP32[$5>>2]=HEAP32[$19>>2]|0;HEAP32[$5+4>>2]=HEAP32[$19+4>>2]|0;
-   }
-   $73 = $3;
-   $74 = $4;
-   $75 = $7;
-   ;HEAP32[$$byval_copy8>>2]=HEAP32[$5>>2]|0;HEAP32[$$byval_copy8+4>>2]=HEAP32[$5+4>>2]|0;
-   _mrb_obj_iv_set($73,$74,$75,$$byval_copy8);
-  }
- }
- ;HEAP32[$0>>2]=HEAP32[$5>>2]|0;HEAP32[$0+4>>2]=HEAP32[$5+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_class_name($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $$byval_copy2 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0;
- var $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);
- $$byval_copy2 = sp + 56|0;
- $$byval_copy1 = sp + 48|0;
- $$byval_copy = sp + 40|0;
- $4 = sp + 24|0;
- $5 = sp + 16|0;
- $6 = sp + 8|0;
- $7 = sp;
- $2 = $0;
- $3 = $1;
- $8 = $2;
- $9 = $3;
- _mrb_class_path($4,$8,$9);
- $10 = ((($4)) + 4|0);
- $11 = HEAP32[$10>>2]|0;
- $12 = ($11|0)==(0);
- if ($12) {
-  $13 = HEAP32[$4>>2]|0;
-  $14 = ($13|0)!=(0);
-  if (!($14)) {
-   $15 = $2;
-   _mrb_str_new_static($5,$15,65531,8);
-   ;HEAP32[$4>>2]=HEAP32[$5>>2]|0;HEAP32[$4+4>>2]=HEAP32[$5+4>>2]|0;
-   $16 = $2;
-   $17 = $2;
-   $18 = $3;
-   _mrb_ptr_to_str($6,$17,$18);
-   ;HEAP32[$$byval_copy>>2]=HEAP32[$4>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$4+4>>2]|0;
-   ;HEAP32[$$byval_copy1>>2]=HEAP32[$6>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$6+4>>2]|0;
-   _mrb_str_concat($16,$$byval_copy,$$byval_copy1);
-   $19 = $2;
-   ;HEAP32[$$byval_copy2>>2]=HEAP32[$4>>2]|0;HEAP32[$$byval_copy2+4>>2]=HEAP32[$4+4>>2]|0;
-   _mrb_str_cat($7,$19,$$byval_copy2,65540,1);
-  }
- }
- $20 = HEAP32[$4>>2]|0;
- $21 = HEAP32[$20>>2]|0;
- $22 = $21 >>> 11;
- $23 = $22 & 8;
- $24 = ($23|0)!=(0);
- $25 = HEAP32[$4>>2]|0;
- $26 = ((($25)) + 12|0);
- if ($24) {
-  $29 = $26;
-  STACKTOP = sp;return ($29|0);
- } else {
-  $27 = ((($26)) + 8|0);
-  $28 = HEAP32[$27>>2]|0;
-  $29 = $28;
-  STACKTOP = sp;return ($29|0);
- }
- return (0)|0;
-}
-function _mrb_obj_classname($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $$byval_copy = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $$byval_copy = sp + 8|0;
- $2 = $0;
- $3 = $2;
- $4 = $2;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$1>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$1+4>>2]|0;
- $5 = (_mrb_obj_class($4,$$byval_copy)|0);
- $6 = (_mrb_class_name($3,$5)|0);
- STACKTOP = sp;return ($6|0);
-}
-function _mrb_obj_class($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $$byval_copy = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $$byval_copy = sp + 8|0;
- $2 = $0;
- $3 = $2;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$1>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$1+4>>2]|0;
- $4 = (_mrb_class_728($3,$$byval_copy)|0);
- $5 = (_mrb_class_real($4)|0);
- STACKTOP = sp;return ($5|0);
-}
-function _mrb_alias_method($0,$1,$2,$3) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $4 = $0;
- $5 = $1;
- $6 = $2;
- $7 = $3;
- $9 = $4;
- $10 = $5;
- $11 = $7;
- $12 = (_mrb_method_search($9,$10,$11)|0);
- $8 = $12;
- $13 = $4;
- $14 = $5;
- $15 = $6;
- $16 = $8;
- _mrb_define_method_raw($13,$14,$15,$16);
- STACKTOP = sp;return;
-}
-function _mrb_undef_method($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $0;
- $4 = $1;
- $5 = $2;
- $6 = $3;
- $7 = $4;
- $8 = $3;
- $9 = $5;
- $10 = (_mrb_intern_cstr($8,$9)|0);
- _undef_method($6,$7,$10);
- STACKTOP = sp;return;
-}
-function _undef_method($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, $vararg_ptr1 = 0, label = 0;
- var sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);
- $vararg_buffer = sp;
- $6 = sp + 24|0;
- $7 = sp + 16|0;
- $3 = $0;
- $4 = $1;
- $5 = $2;
- $8 = $3;
- $9 = $4;
- $10 = $5;
- $11 = (_mrb_obj_respond_to($8,$9,$10)|0);
- $12 = ($11<<24>>24)!=(0);
- $13 = $3;
- if ($12) {
-  $18 = $4;
-  $19 = $5;
-  _mrb_define_method_raw($13,$18,$19,0);
-  STACKTOP = sp;return;
- } else {
-  $14 = $5;
-  $15 = $3;
-  $16 = $5;
-  _mrb_sym2str($6,$15,$16);
-  $17 = $4;
-  _mrb_obj_value_661($7,$17);
-  ;HEAP8[$vararg_buffer>>0]=HEAP8[$6>>0]|0;HEAP8[$vararg_buffer+1>>0]=HEAP8[$6+1>>0]|0;HEAP8[$vararg_buffer+2>>0]=HEAP8[$6+2>>0]|0;HEAP8[$vararg_buffer+3>>0]=HEAP8[$6+3>>0]|0;HEAP8[$vararg_buffer+4>>0]=HEAP8[$6+4>>0]|0;HEAP8[$vararg_buffer+5>>0]=HEAP8[$6+5>>0]|0;HEAP8[$vararg_buffer+6>>0]=HEAP8[$6+6>>0]|0;HEAP8[$vararg_buffer+7>>0]=HEAP8[$6+7>>0]|0;
-  $vararg_ptr1 = ((($vararg_buffer)) + 8|0);
-  ;HEAP8[$vararg_ptr1>>0]=HEAP8[$7>>0]|0;HEAP8[$vararg_ptr1+1>>0]=HEAP8[$7+1>>0]|0;HEAP8[$vararg_ptr1+2>>0]=HEAP8[$7+2>>0]|0;HEAP8[$vararg_ptr1+3>>0]=HEAP8[$7+3>>0]|0;HEAP8[$vararg_ptr1+4>>0]=HEAP8[$7+4>>0]|0;HEAP8[$vararg_ptr1+5>>0]=HEAP8[$7+5>>0]|0;HEAP8[$vararg_ptr1+6>>0]=HEAP8[$7+6>>0]|0;HEAP8[$vararg_ptr1+7>>0]=HEAP8[$7+7>>0]|0;
-  _mrb_name_error($13,$14,65545,$vararg_buffer);
-  // unreachable;
- }
-}
-function _mrb_undef_class_method($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $10 = 0, $11 = 0, $12 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);
- $$byval_copy = sp + 32|0;
- $6 = sp + 8|0;
- $7 = sp;
- $3 = $0;
- $4 = $1;
- $5 = $2;
- $8 = $3;
- $9 = $3;
- $10 = $4;
- _mrb_obj_value_661($6,$10);
- ;HEAP32[$$byval_copy>>2]=HEAP32[$6>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$6+4>>2]|0;
- _mrb_singleton_class($7,$9,$$byval_copy);
- $11 = HEAP32[$7>>2]|0;
- $12 = $5;
- _mrb_undef_method($8,$11,$12);
- STACKTOP = sp;return;
-}
-function _mrb_mod_module_function($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $$byval_copy2 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;
- var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $5 = 0;
- var $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, $vararg_ptr1 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);
- $$byval_copy2 = sp + 48|0;
- $$byval_copy = sp + 40|0;
- $vararg_buffer = sp;
- $4 = sp + 32|0;
- $5 = sp + 28|0;
- $3 = $1;
- $11 = $3;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
- _mrb_check_type($11,$$byval_copy,10);
- $12 = $3;
- HEAP32[$vararg_buffer>>2] = $4;
- $vararg_ptr1 = ((($vararg_buffer)) + 4|0);
- HEAP32[$vararg_ptr1>>2] = $5;
- (_mrb_get_args($12,68856,$vararg_buffer)|0);
- $13 = HEAP32[$5>>2]|0;
- $14 = ($13|0)==(0);
- if ($14) {
-  ;HEAP32[$0>>2]=HEAP32[$2>>2]|0;HEAP32[$0+4>>2]=HEAP32[$2+4>>2]|0;
-  STACKTOP = sp;return;
- }
- $6 = 0;
- while(1) {
-  $15 = $6;
-  $16 = HEAP32[$5>>2]|0;
-  $17 = ($15|0)<($16|0);
-  if (!($17)) {
-   break;
-  }
-  $18 = $3;
-  $19 = HEAP32[$4>>2]|0;
-  $20 = $6;
-  $21 = (($19) + ($20<<3)|0);
-  ;HEAP32[$$byval_copy2>>2]=HEAP32[$21>>2]|0;HEAP32[$$byval_copy2+4>>2]=HEAP32[$21+4>>2]|0;
-  _mrb_check_type($18,$$byval_copy2,4);
-  $22 = HEAP32[$4>>2]|0;
-  $23 = $6;
-  $24 = (($22) + ($23<<3)|0);
-  $25 = HEAP32[$24>>2]|0;
-  $7 = $25;
-  $26 = HEAP32[$2>>2]|0;
-  $9 = $26;
-  $27 = $3;
-  $28 = $9;
-  $29 = $7;
-  $30 = (_mrb_method_search($27,$28,$29)|0);
-  $8 = $30;
-  $31 = $3;
-  $32 = $9;
-  _prepare_singleton_class($31,$32);
-  $33 = $3;
-  $34 = (_mrb_gc_arena_save($33)|0);
-  $10 = $34;
-  $35 = $3;
-  $36 = $9;
-  $37 = ((($36)) + 4|0);
-  $38 = HEAP32[$37>>2]|0;
-  $39 = $7;
-  $40 = $8;
-  _mrb_define_method_raw($35,$38,$39,$40);
-  $41 = $3;
-  $42 = $10;
-  _mrb_gc_arena_restore($41,$42);
-  $43 = $6;
-  $44 = (($43) + 1)|0;
-  $6 = $44;
- }
- ;HEAP32[$0>>2]=HEAP32[$2>>2]|0;HEAP32[$0+4>>2]=HEAP32[$2+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_init_class($0) {
- $0 = $0|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $$byval_copy2 = 0, $$byval_copy3 = 0, $$byval_copy4 = 0, $1 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0;
- var $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0;
- var $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0, $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0;
- var $149 = 0, $15 = 0, $150 = 0, $151 = 0, $152 = 0, $153 = 0, $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0;
- var $167 = 0, $168 = 0, $169 = 0, $17 = 0, $170 = 0, $171 = 0, $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0;
- var $185 = 0, $186 = 0, $187 = 0, $188 = 0, $189 = 0, $19 = 0, $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0, $197 = 0, $198 = 0, $199 = 0, $2 = 0, $20 = 0, $200 = 0, $201 = 0;
- var $202 = 0, $203 = 0, $204 = 0, $205 = 0, $206 = 0, $207 = 0, $208 = 0, $209 = 0, $21 = 0, $210 = 0, $211 = 0, $212 = 0, $213 = 0, $214 = 0, $215 = 0, $216 = 0, $217 = 0, $218 = 0, $219 = 0, $22 = 0;
- var $220 = 0, $221 = 0, $222 = 0, $223 = 0, $224 = 0, $225 = 0, $226 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0;
- var $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0;
- var $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0;
- var $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0;
- var $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 112|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(112|0);
- $$byval_copy4 = sp + 96|0;
- $$byval_copy3 = sp + 88|0;
- $$byval_copy2 = sp + 80|0;
- $$byval_copy1 = sp + 72|0;
- $$byval_copy = sp + 64|0;
- $6 = sp + 32|0;
- $7 = sp + 24|0;
- $8 = sp + 16|0;
- $9 = sp + 8|0;
- $10 = sp;
- $1 = $0;
- $11 = $1;
- $12 = (_boot_defclass($11,0)|0);
- $2 = $12;
- $13 = $1;
- $14 = $2;
- $15 = (_boot_defclass($13,$14)|0);
- $3 = $15;
- $16 = $3;
- $17 = $1;
- $18 = ((($17)) + 32|0);
- HEAP32[$18>>2] = $16;
- $19 = $1;
- $20 = $3;
- $21 = (_boot_defclass($19,$20)|0);
- $4 = $21;
- $22 = $4;
- $23 = $1;
- $24 = ((($23)) + 40|0);
- HEAP32[$24>>2] = $22;
- $25 = $1;
- $26 = $4;
- $27 = (_boot_defclass($25,$26)|0);
- $5 = $27;
- $28 = $5;
- $29 = $1;
- $30 = ((($29)) + 36|0);
- HEAP32[$30>>2] = $28;
- $31 = $5;
- $32 = $5;
- $33 = ((($32)) + 4|0);
- HEAP32[$33>>2] = $31;
- $34 = $4;
- $35 = ((($34)) + 4|0);
- HEAP32[$35>>2] = $31;
- $36 = $3;
- $37 = ((($36)) + 4|0);
- HEAP32[$37>>2] = $31;
- $38 = $2;
- $39 = ((($38)) + 4|0);
- HEAP32[$39>>2] = $31;
- $40 = $1;
- $41 = $2;
- _prepare_singleton_class($40,$41);
- $42 = $1;
- $43 = $3;
- _prepare_singleton_class($42,$43);
- $44 = $1;
- $45 = $4;
- _prepare_singleton_class($44,$45);
- $46 = $1;
- $47 = $5;
- _prepare_singleton_class($46,$47);
- $48 = $1;
- $49 = $2;
- $50 = $2;
- _mrb_obj_value_661($6,$50);
- ;HEAP32[$$byval_copy>>2]=HEAP32[$6>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$6+4>>2]|0;
- _mrb_define_const($48,$49,65582,$$byval_copy);
- $51 = $1;
- $52 = $3;
- $53 = $2;
- _mrb_obj_value_661($7,$53);
- ;HEAP32[$$byval_copy1>>2]=HEAP32[$7>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$7+4>>2]|0;
- _mrb_define_const($51,$52,65582,$$byval_copy1);
- $54 = $1;
- $55 = $3;
- $56 = $3;
- _mrb_obj_value_661($8,$56);
- ;HEAP32[$$byval_copy2>>2]=HEAP32[$8>>2]|0;HEAP32[$$byval_copy2+4>>2]=HEAP32[$8+4>>2]|0;
- _mrb_define_const($54,$55,65594,$$byval_copy2);
- $57 = $1;
- $58 = $3;
- $59 = $4;
- _mrb_obj_value_661($9,$59);
- ;HEAP32[$$byval_copy3>>2]=HEAP32[$9>>2]|0;HEAP32[$$byval_copy3+4>>2]=HEAP32[$9+4>>2]|0;
- _mrb_define_const($57,$58,65601,$$byval_copy3);
- $60 = $1;
- $61 = $3;
- $62 = $5;
- _mrb_obj_value_661($10,$62);
- ;HEAP32[$$byval_copy4>>2]=HEAP32[$10>>2]|0;HEAP32[$$byval_copy4+4>>2]=HEAP32[$10+4>>2]|0;
- _mrb_define_const($60,$61,65608,$$byval_copy4);
- $63 = $1;
- $64 = $2;
- $65 = $1;
- $66 = (_mrb_intern_static($65,65582,11)|0);
- _name_class($63,$64,$66);
- $67 = $1;
- $68 = $3;
- $69 = $1;
- $70 = (_mrb_intern_static($69,65594,6)|0);
- _name_class($67,$68,$70);
- $71 = $1;
- $72 = $4;
- $73 = $1;
- $74 = (_mrb_intern_static($73,65601,6)|0);
- _name_class($71,$72,$74);
- $75 = $1;
- $76 = $5;
- $77 = $1;
- $78 = (_mrb_intern_static($77,65608,5)|0);
- _name_class($75,$76,$78);
- $79 = $1;
- $80 = $1;
- $81 = ((($80)) + 32|0);
- $82 = HEAP32[$81>>2]|0;
- $83 = (_mrb_define_class($79,65614,$82)|0);
- $84 = $1;
- $85 = ((($84)) + 44|0);
- HEAP32[$85>>2] = $83;
- $86 = $1;
- $87 = ((($86)) + 44|0);
- $88 = HEAP32[$87>>2]|0;
- $89 = HEAP32[$88>>2]|0;
- $90 = $89 >>> 11;
- $91 = $90 & -256;
- $92 = $91 | 13;
- $93 = $1;
- $94 = ((($93)) + 44|0);
- $95 = HEAP32[$94>>2]|0;
- $96 = HEAP32[$95>>2]|0;
- $97 = $92 & 2097151;
- $98 = $97 << 11;
- $99 = $96 & 2047;
- $100 = $99 | $98;
- HEAP32[$95>>2] = $100;
- $101 = $5;
- $102 = HEAP32[$101>>2]|0;
- $103 = $102 >>> 11;
- $104 = $103 & -256;
- $105 = $104 | 9;
- $106 = $5;
- $107 = HEAP32[$106>>2]|0;
- $108 = $105 & 2097151;
- $109 = $108 << 11;
- $110 = $107 & 2047;
- $111 = $110 | $109;
- HEAP32[$106>>2] = $111;
- $112 = $1;
- $113 = $2;
- _mrb_define_method($112,$113,69252,233,0);
- $114 = $1;
- $115 = $2;
- _mrb_define_method($114,$115,65619,234,0);
- $116 = $1;
- $117 = $2;
- _mrb_define_method($116,$117,65621,235,4096);
- $118 = $1;
- $119 = $5;
- _mrb_define_class_method($118,$119,67982,236,8192);
- $120 = $1;
- $121 = $5;
- _mrb_define_method($120,$121,65636,237,0);
- $122 = $1;
- $123 = $5;
- _mrb_define_method($122,$123,67982,238,4096);
- $124 = $1;
- $125 = $5;
- _mrb_define_method($124,$125,69252,239,8192);
- $126 = $1;
- $127 = $5;
- _mrb_define_method($126,$127,65098,233,262144);
- $128 = $4;
- $129 = HEAP32[$128>>2]|0;
- $130 = $129 >>> 11;
- $131 = $130 & -256;
- $132 = $131 | 10;
- $133 = $4;
- $134 = HEAP32[$133>>2]|0;
- $135 = $132 & 2097151;
- $136 = $135 << 11;
- $137 = $134 & 2047;
- $138 = $137 | $136;
- HEAP32[$133>>2] = $138;
- $139 = $1;
- $140 = $4;
- _mrb_define_method($139,$140,65647,240,262144);
- $141 = $1;
- $142 = $4;
- _mrb_define_method($141,$142,65671,241,262144);
- $143 = $1;
- $144 = $4;
- _mrb_define_method($143,$144,65690,242,524288);
- $145 = $1;
- $146 = $4;
- _mrb_define_method($145,$146,68897,243,262144);
- $147 = $1;
- $148 = $4;
- _mrb_define_method($147,$148,68911,233,262144);
- $149 = $1;
- $150 = $4;
- _mrb_define_method($149,$150,65709,244,4096);
- $151 = $1;
- $152 = $4;
- _mrb_define_method($151,$152,65717,233,262144);
- $153 = $1;
- $154 = $4;
- _mrb_define_method($153,$154,65727,245,262144);
- $155 = $1;
- $156 = $4;
- _mrb_define_method($155,$156,65744,246,4096);
- $157 = $1;
- $158 = $4;
- _mrb_define_method($157,$158,69243,247,262144);
- $159 = $1;
- $160 = $4;
- _mrb_define_method($159,$160,65752,248,262144);
- $161 = $1;
- $162 = $4;
- _mrb_define_method($161,$162,65768,249,4096);
- $163 = $1;
- $164 = $4;
- _mrb_define_method($163,$164,65779,233,262144);
- $165 = $1;
- $166 = $4;
- _mrb_define_method($165,$166,65788,250,0);
- $167 = $1;
- $168 = $4;
- _mrb_define_method($167,$168,69252,251,0);
- $169 = $1;
- $170 = $4;
- _mrb_define_method($169,$170,65805,252,4096);
- $171 = $1;
- $172 = $4;
- _mrb_define_method($171,$172,65822,253,262144);
- $173 = $1;
- $174 = $4;
- _mrb_define_method($173,$174,65838,249,4096);
- $175 = $1;
- $176 = $4;
- _mrb_define_method($175,$176,65850,254,4096);
- $177 = $1;
- $178 = $4;
- _mrb_define_method($177,$178,65866,255,4096);
- $179 = $1;
- $180 = $4;
- _mrb_define_method($179,$180,65874,255,4096);
- $181 = $1;
- $182 = $4;
- _mrb_define_method($181,$182,65884,255,4096);
- $183 = $1;
- $184 = $4;
- _mrb_define_method($183,$184,65891,256,262144);
- $185 = $1;
- $186 = $4;
- _mrb_define_method($185,$186,65913,257,4096);
- $187 = $1;
- $188 = $4;
- _mrb_define_method($187,$188,65927,233,262144);
- $189 = $1;
- $190 = $4;
- _mrb_define_method($189,$190,65942,258,4096);
- $191 = $1;
- $192 = $4;
- _mrb_define_method($191,$192,65954,259,4096);
- $193 = $1;
- $194 = $4;
- _mrb_define_method($193,$194,69276,260,0);
- $195 = $1;
- $196 = $4;
- _mrb_define_method($195,$196,69281,260,0);
- $197 = $1;
- $198 = $4;
- _mrb_define_method($197,$198,69686,261,4096);
- $199 = $1;
- $200 = $4;
- _mrb_define_method($199,$200,65966,262,0);
- $201 = $1;
- $202 = $4;
- _mrb_define_method($201,$202,69699,263,4096);
- $203 = $1;
- $204 = $4;
- _mrb_define_method($203,$204,65976,264,270336);
- $205 = $1;
- $206 = $4;
- _mrb_define_method($205,$206,65991,265,262144);
- $207 = $1;
- $208 = $4;
- _mrb_define_method($207,$208,66001,266,524288);
- $209 = $1;
- $210 = $4;
- _mrb_define_method($209,$210,66011,267,8192);
- $211 = $1;
- $212 = $4;
- _mrb_define_method($211,$212,66021,268,262144);
- $213 = $1;
- $214 = $4;
- _mrb_define_method($213,$214,66034,269,262144);
- $215 = $1;
- $216 = $4;
- _mrb_define_method($215,$216,66048,270,262144);
- $217 = $1;
- $218 = $4;
- _mrb_define_method($217,$218,66062,271,0);
- $219 = $1;
- $220 = $4;
- _mrb_define_method($219,$220,69591,272,262144);
- $221 = $1;
- $222 = $4;
- _mrb_define_class_method($221,$222,66011,273,4096);
- $223 = $1;
- $224 = $5;
- _mrb_undef_method($223,$224,65752);
- $225 = $1;
- $226 = $5;
- _mrb_undef_method($225,$226,68897);
- STACKTOP = sp;return;
-}
-function _mrb_bob_init($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $3 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $1;
- _mrb_nil_value_689($0);
- STACKTOP = sp;return;
-}
-function _mrb_bob_not($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $1;
- $4 = ((($2)) + 4|0);
- $5 = HEAP32[$4>>2]|0;
- $6 = ($5|0)!=(0);
- $7 = $6 ^ 1;
- $8 = $7&1;
- $9 = $8&255;
- _mrb_bool_value_793($0,$9);
- STACKTOP = sp;return;
-}
-function _mrb_bob_missing($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $$byval_copy3 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, $vararg_ptr1 = 0, $vararg_ptr2 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);
- $$byval_copy3 = sp + 48|0;
- $$byval_copy = sp + 40|0;
- $vararg_buffer = sp;
- $4 = sp + 32|0;
- $5 = sp + 28|0;
- $6 = sp + 24|0;
- $7 = sp + 16|0;
- $3 = $1;
- $8 = $3;
- HEAP32[$vararg_buffer>>2] = $4;
- $vararg_ptr1 = ((($vararg_buffer)) + 4|0);
- HEAP32[$vararg_ptr1>>2] = $5;
- $vararg_ptr2 = ((($vararg_buffer)) + 8|0);
- HEAP32[$vararg_ptr2>>2] = $6;
- (_mrb_get_args($8,66388,$vararg_buffer)|0);
- $9 = $3;
- $10 = HEAP32[$4>>2]|0;
- $11 = $3;
- $12 = HEAP32[$6>>2]|0;
- $13 = HEAP32[$5>>2]|0;
- _mrb_ary_new_from_values($7,$11,$12,$13);
- ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
- ;HEAP32[$$byval_copy3>>2]=HEAP32[$7>>2]|0;HEAP32[$$byval_copy3+4>>2]=HEAP32[$7+4>>2]|0;
- _mrb_method_missing($9,$10,$$byval_copy,$$byval_copy3);
- _mrb_nil_value_689($0);
- STACKTOP = sp;return;
-}
-function _mrb_class_new_class($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $$byval_copy2 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;
- var $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, $vararg_ptr1 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 80|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(80|0);
- $$byval_copy2 = sp + 72|0;
- $$byval_copy = sp + 64|0;
- $vararg_buffer = sp;
- $5 = sp + 48|0;
- $6 = sp + 40|0;
- $7 = sp + 32|0;
- $8 = sp + 24|0;
- $9 = sp + 16|0;
- $10 = sp + 8|0;
- $3 = $1;
- $11 = $3;
- HEAP32[$vararg_buffer>>2] = $5;
- $vararg_ptr1 = ((($vararg_buffer)) + 4|0);
- HEAP32[$vararg_ptr1>>2] = $6;
- $12 = (_mrb_get_args($11,66384,$vararg_buffer)|0);
- $4 = $12;
- $13 = $4;
- $14 = ($13|0)==(0);
- if ($14) {
-  $15 = $3;
-  $16 = ((($15)) + 32|0);
-  $17 = HEAP32[$16>>2]|0;
-  _mrb_obj_value_661($8,$17);
-  ;HEAP32[$5>>2]=HEAP32[$8>>2]|0;HEAP32[$5+4>>2]=HEAP32[$8+4>>2]|0;
- }
- $18 = $3;
- $19 = HEAP32[$5>>2]|0;
- $20 = (_mrb_class_new($18,$19)|0);
- _mrb_obj_value_661($9,$20);
- ;HEAP32[$7>>2]=HEAP32[$9>>2]|0;HEAP32[$7+4>>2]=HEAP32[$9+4>>2]|0;
- $21 = $3;
- $22 = $3;
- $23 = (_mrb_intern_static($22,69252,10)|0);
- $24 = $4;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$7>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$7+4>>2]|0;
- ;HEAP32[$$byval_copy2>>2]=HEAP32[$6>>2]|0;HEAP32[$$byval_copy2+4>>2]=HEAP32[$6+4>>2]|0;
- _mrb_funcall_with_block($10,$21,$$byval_copy,$23,$24,$5,$$byval_copy2);
- $25 = $3;
- $26 = HEAP32[$5>>2]|0;
- $27 = HEAP32[$7>>2]|0;
- _mrb_class_inherited($25,$26,$27);
- ;HEAP32[$0>>2]=HEAP32[$7>>2]|0;HEAP32[$0+4>>2]=HEAP32[$7+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_class_superclass($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0;
- var label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $1;
- $5 = HEAP32[$2>>2]|0;
- $4 = $5;
- $6 = $4;
- $7 = (_find_origin($6)|0);
- $8 = ((($7)) + 20|0);
- $9 = HEAP32[$8>>2]|0;
- $4 = $9;
- while(1) {
-  $10 = $4;
-  $11 = ($10|0)!=(0|0);
-  if ($11) {
-   $12 = $4;
-   $13 = HEAP32[$12>>2]|0;
-   $14 = $13 & 255;
-   $15 = ($14|0)==(11);
-   $22 = $15;
-  } else {
-   $22 = 0;
-  }
-  $16 = $4;
-  if (!($22)) {
-   break;
-  }
-  $17 = (_find_origin($16)|0);
-  $18 = ((($17)) + 20|0);
-  $19 = HEAP32[$18>>2]|0;
-  $4 = $19;
- }
- $20 = ($16|0)!=(0|0);
- if ($20) {
-  $21 = $4;
-  _mrb_obj_value_661($0,$21);
-  STACKTOP = sp;return;
- } else {
-  _mrb_nil_value_689($0);
-  STACKTOP = sp;return;
- }
-}
-function _mrb_class_initialize($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $$byval_copy2 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, $vararg_ptr1 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);
- $$byval_copy2 = sp + 48|0;
- $$byval_copy = sp + 40|0;
- $vararg_buffer = sp;
- $4 = sp + 24|0;
- $5 = sp + 16|0;
- $6 = sp + 8|0;
- $3 = $1;
- $7 = $3;
- HEAP32[$vararg_buffer>>2] = $4;
- $vararg_ptr1 = ((($vararg_buffer)) + 4|0);
- HEAP32[$vararg_ptr1>>2] = $5;
- (_mrb_get_args($7,66384,$vararg_buffer)|0);
- $8 = ((($5)) + 4|0);
- $9 = HEAP32[$8>>2]|0;
- $10 = ($9|0)==(0);
- if ($10) {
-  $11 = HEAP32[$5>>2]|0;
-  $12 = ($11|0)!=(0);
-  if (!($12)) {
-   ;HEAP32[$0>>2]=HEAP32[$2>>2]|0;HEAP32[$0+4>>2]=HEAP32[$2+4>>2]|0;
-   STACKTOP = sp;return;
-  }
- }
- $13 = $3;
- $14 = HEAP32[$2>>2]|0;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$5>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$5+4>>2]|0;
- ;HEAP32[$$byval_copy2>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy2+4>>2]=HEAP32[$2+4>>2]|0;
- _mrb_yield_with_class($6,$13,$$byval_copy,1,$2,$$byval_copy2,$14);
- ;HEAP32[$0>>2]=HEAP32[$2>>2]|0;HEAP32[$0+4>>2]=HEAP32[$2+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_mod_cvar_defined($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $10 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $$byval_copy = sp + 16|0;
- $vararg_buffer = sp;
- $4 = sp + 4|0;
- $3 = $1;
- $5 = $3;
- HEAP32[$vararg_buffer>>2] = $4;
- (_mrb_get_args($5,68770,$vararg_buffer)|0);
- $6 = $3;
- $7 = HEAP32[$4>>2]|0;
- _check_cv_name_sym($6,$7);
- $8 = $3;
- $9 = HEAP32[$4>>2]|0;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
- $10 = (_mrb_cv_defined($8,$$byval_copy,$9)|0);
- _mrb_bool_value_793($0,$10);
- STACKTOP = sp;return;
-}
-function _mrb_mod_cvar_get($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $$byval_copy = sp + 16|0;
- $vararg_buffer = sp;
- $4 = sp + 4|0;
- $3 = $1;
- $5 = $3;
- HEAP32[$vararg_buffer>>2] = $4;
- (_mrb_get_args($5,68770,$vararg_buffer)|0);
- $6 = $3;
- $7 = HEAP32[$4>>2]|0;
- _check_cv_name_sym($6,$7);
- $8 = $3;
- $9 = HEAP32[$4>>2]|0;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
- _mrb_cv_get($0,$8,$$byval_copy,$9);
- STACKTOP = sp;return;
-}
-function _mrb_mod_cvar_set($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $$byval_copy2 = 0, $10 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, $vararg_ptr1 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);
- $$byval_copy2 = sp + 40|0;
- $$byval_copy = sp + 32|0;
- $vararg_buffer = sp;
- $4 = sp + 16|0;
- $5 = sp + 8|0;
- $3 = $1;
- $6 = $3;
- HEAP32[$vararg_buffer>>2] = $5;
- $vararg_ptr1 = ((($vararg_buffer)) + 4|0);
- HEAP32[$vararg_ptr1>>2] = $4;
- (_mrb_get_args($6,68807,$vararg_buffer)|0);
- $7 = $3;
- $8 = HEAP32[$5>>2]|0;
- _check_cv_name_sym($7,$8);
- $9 = $3;
- $10 = HEAP32[$5>>2]|0;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
- ;HEAP32[$$byval_copy2>>2]=HEAP32[$4>>2]|0;HEAP32[$$byval_copy2+4>>2]=HEAP32[$4+4>>2]|0;
- _mrb_cv_set($9,$$byval_copy,$10,$$byval_copy2);
- ;HEAP32[$0>>2]=HEAP32[$4>>2]|0;HEAP32[$0+4>>2]=HEAP32[$4+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_mod_extend_object($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $10 = 0, $11 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);
- $$byval_copy1 = sp + 40|0;
- $$byval_copy = sp + 32|0;
- $vararg_buffer = sp;
- $4 = sp + 16|0;
- $5 = sp + 8|0;
- $3 = $1;
- $6 = $3;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
- _mrb_check_type($6,$$byval_copy,10);
- $7 = $3;
- HEAP32[$vararg_buffer>>2] = $4;
- (_mrb_get_args($7,69199,$vararg_buffer)|0);
- $8 = $3;
- $9 = $3;
- ;HEAP32[$$byval_copy1>>2]=HEAP32[$4>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$4+4>>2]|0;
- _mrb_singleton_class($5,$9,$$byval_copy1);
- $10 = HEAP32[$5>>2]|0;
- $11 = HEAP32[$2>>2]|0;
- _mrb_include_module($8,$10,$11);
- ;HEAP32[$0>>2]=HEAP32[$2>>2]|0;HEAP32[$0+4>>2]=HEAP32[$2+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_mod_prepend($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $$byval_copy8 = 0, $$byval_copy9 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0;
- var $27 = 0, $28 = 0, $29 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, $vararg_buffer2 = 0, $vararg_buffer5 = 0, $vararg_ptr1 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 80|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(80|0);
- $$byval_copy9 = sp + 72|0;
- $$byval_copy8 = sp + 64|0;
- $$byval_copy = sp + 56|0;
- $vararg_buffer5 = sp + 16|0;
- $vararg_buffer2 = sp + 8|0;
- $vararg_buffer = sp;
- $4 = sp + 48|0;
- $5 = sp + 44|0;
- $7 = sp + 32|0;
- $8 = sp + 24|0;
- $3 = $1;
- $9 = $3;
- HEAP32[$vararg_buffer>>2] = $4;
- $vararg_ptr1 = ((($vararg_buffer)) + 4|0);
- HEAP32[$vararg_ptr1>>2] = $5;
- (_mrb_get_args($9,68856,$vararg_buffer)|0);
- $6 = 0;
- while(1) {
-  $10 = $6;
-  $11 = HEAP32[$5>>2]|0;
-  $12 = ($10|0)<($11|0);
-  if (!($12)) {
-   break;
-  }
-  $13 = $3;
-  $14 = HEAP32[$4>>2]|0;
-  $15 = $6;
-  $16 = (($14) + ($15<<3)|0);
-  ;HEAP32[$$byval_copy>>2]=HEAP32[$16>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$16+4>>2]|0;
-  _mrb_check_type($13,$$byval_copy,10);
-  $17 = $6;
-  $18 = (($17) + 1)|0;
-  $6 = $18;
- }
- while(1) {
-  $19 = HEAP32[$5>>2]|0;
-  $20 = (($19) + -1)|0;
-  HEAP32[$5>>2] = $20;
-  $21 = ($19|0)!=(0);
-  if (!($21)) {
-   break;
-  }
-  $22 = $3;
-  $23 = HEAP32[$4>>2]|0;
-  $24 = HEAP32[$5>>2]|0;
-  $25 = (($23) + ($24<<3)|0);
-  ;HEAP8[$vararg_buffer2>>0]=HEAP8[$2>>0]|0;HEAP8[$vararg_buffer2+1>>0]=HEAP8[$2+1>>0]|0;HEAP8[$vararg_buffer2+2>>0]=HEAP8[$2+2>>0]|0;HEAP8[$vararg_buffer2+3>>0]=HEAP8[$2+3>>0]|0;HEAP8[$vararg_buffer2+4>>0]=HEAP8[$2+4>>0]|0;HEAP8[$vararg_buffer2+5>>0]=HEAP8[$2+5>>0]|0;HEAP8[$vararg_buffer2+6>>0]=HEAP8[$2+6>>0]|0;HEAP8[$vararg_buffer2+7>>0]=HEAP8[$2+7>>0]|0;
-  ;HEAP32[$$byval_copy8>>2]=HEAP32[$25>>2]|0;HEAP32[$$byval_copy8+4>>2]=HEAP32[$25+4>>2]|0;
-  _mrb_funcall($7,$22,$$byval_copy8,65727,1,$vararg_buffer2);
-  $26 = $3;
-  $27 = HEAP32[$4>>2]|0;
-  $28 = HEAP32[$5>>2]|0;
-  $29 = (($27) + ($28<<3)|0);
-  ;HEAP8[$vararg_buffer5>>0]=HEAP8[$2>>0]|0;HEAP8[$vararg_buffer5+1>>0]=HEAP8[$2+1>>0]|0;HEAP8[$vararg_buffer5+2>>0]=HEAP8[$2+2>>0]|0;HEAP8[$vararg_buffer5+3>>0]=HEAP8[$2+3>>0]|0;HEAP8[$vararg_buffer5+4>>0]=HEAP8[$2+4>>0]|0;HEAP8[$vararg_buffer5+5>>0]=HEAP8[$2+5>>0]|0;HEAP8[$vararg_buffer5+6>>0]=HEAP8[$2+6>>0]|0;HEAP8[$vararg_buffer5+7>>0]=HEAP8[$2+7>>0]|0;
-  ;HEAP32[$$byval_copy9>>2]=HEAP32[$29>>2]|0;HEAP32[$$byval_copy9+4>>2]=HEAP32[$29+4>>2]|0;
-  _mrb_funcall($8,$26,$$byval_copy9,65717,1,$vararg_buffer5);
- }
- ;HEAP32[$0>>2]=HEAP32[$2>>2]|0;HEAP32[$0+4>>2]=HEAP32[$2+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_mod_prepend_features($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $$byval_copy = sp + 24|0;
- $vararg_buffer = sp;
- $4 = sp + 8|0;
- $3 = $1;
- $5 = $3;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
- _mrb_check_type($5,$$byval_copy,10);
- $6 = $3;
- HEAP32[$vararg_buffer>>2] = $4;
- (_mrb_get_args($6,68805,$vararg_buffer)|0);
- $7 = $3;
- $8 = HEAP32[$4>>2]|0;
- $9 = HEAP32[$2>>2]|0;
- _mrb_prepend_module($7,$8,$9);
- ;HEAP32[$0>>2]=HEAP32[$2>>2]|0;HEAP32[$0+4>>2]=HEAP32[$2+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_mod_include($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $$byval_copy8 = 0, $$byval_copy9 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0;
- var $27 = 0, $28 = 0, $29 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, $vararg_buffer2 = 0, $vararg_buffer5 = 0, $vararg_ptr1 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 80|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(80|0);
- $$byval_copy9 = sp + 72|0;
- $$byval_copy8 = sp + 64|0;
- $$byval_copy = sp + 56|0;
- $vararg_buffer5 = sp + 16|0;
- $vararg_buffer2 = sp + 8|0;
- $vararg_buffer = sp;
- $4 = sp + 48|0;
- $5 = sp + 44|0;
- $7 = sp + 32|0;
- $8 = sp + 24|0;
- $3 = $1;
- $9 = $3;
- HEAP32[$vararg_buffer>>2] = $4;
- $vararg_ptr1 = ((($vararg_buffer)) + 4|0);
- HEAP32[$vararg_ptr1>>2] = $5;
- (_mrb_get_args($9,68856,$vararg_buffer)|0);
- $6 = 0;
- while(1) {
-  $10 = $6;
-  $11 = HEAP32[$5>>2]|0;
-  $12 = ($10|0)<($11|0);
-  if (!($12)) {
-   break;
-  }
-  $13 = $3;
-  $14 = HEAP32[$4>>2]|0;
-  $15 = $6;
-  $16 = (($14) + ($15<<3)|0);
-  ;HEAP32[$$byval_copy>>2]=HEAP32[$16>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$16+4>>2]|0;
-  _mrb_check_type($13,$$byval_copy,10);
-  $17 = $6;
-  $18 = (($17) + 1)|0;
-  $6 = $18;
- }
- while(1) {
-  $19 = HEAP32[$5>>2]|0;
-  $20 = (($19) + -1)|0;
-  HEAP32[$5>>2] = $20;
-  $21 = ($19|0)!=(0);
-  if (!($21)) {
-   break;
-  }
-  $22 = $3;
-  $23 = HEAP32[$4>>2]|0;
-  $24 = HEAP32[$5>>2]|0;
-  $25 = (($23) + ($24<<3)|0);
-  ;HEAP8[$vararg_buffer2>>0]=HEAP8[$2>>0]|0;HEAP8[$vararg_buffer2+1>>0]=HEAP8[$2+1>>0]|0;HEAP8[$vararg_buffer2+2>>0]=HEAP8[$2+2>>0]|0;HEAP8[$vararg_buffer2+3>>0]=HEAP8[$2+3>>0]|0;HEAP8[$vararg_buffer2+4>>0]=HEAP8[$2+4>>0]|0;HEAP8[$vararg_buffer2+5>>0]=HEAP8[$2+5>>0]|0;HEAP8[$vararg_buffer2+6>>0]=HEAP8[$2+6>>0]|0;HEAP8[$vararg_buffer2+7>>0]=HEAP8[$2+7>>0]|0;
-  ;HEAP32[$$byval_copy8>>2]=HEAP32[$25>>2]|0;HEAP32[$$byval_copy8+4>>2]=HEAP32[$25+4>>2]|0;
-  _mrb_funcall($7,$22,$$byval_copy8,65752,1,$vararg_buffer2);
-  $26 = $3;
-  $27 = HEAP32[$4>>2]|0;
-  $28 = HEAP32[$5>>2]|0;
-  $29 = (($27) + ($28<<3)|0);
-  ;HEAP8[$vararg_buffer5>>0]=HEAP8[$2>>0]|0;HEAP8[$vararg_buffer5+1>>0]=HEAP8[$2+1>>0]|0;HEAP8[$vararg_buffer5+2>>0]=HEAP8[$2+2>>0]|0;HEAP8[$vararg_buffer5+3>>0]=HEAP8[$2+3>>0]|0;HEAP8[$vararg_buffer5+4>>0]=HEAP8[$2+4>>0]|0;HEAP8[$vararg_buffer5+5>>0]=HEAP8[$2+5>>0]|0;HEAP8[$vararg_buffer5+6>>0]=HEAP8[$2+6>>0]|0;HEAP8[$vararg_buffer5+7>>0]=HEAP8[$2+7>>0]|0;
-  ;HEAP32[$$byval_copy9>>2]=HEAP32[$29>>2]|0;HEAP32[$$byval_copy9+4>>2]=HEAP32[$29+4>>2]|0;
-  _mrb_funcall($8,$26,$$byval_copy9,65779,1,$vararg_buffer5);
- }
- ;HEAP32[$0>>2]=HEAP32[$2>>2]|0;HEAP32[$0+4>>2]=HEAP32[$2+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_mod_include_p($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0;
- var $9 = 0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $$byval_copy = sp + 24|0;
- $vararg_buffer = sp;
- $4 = sp + 8|0;
- $3 = $1;
- $6 = HEAP32[$2>>2]|0;
- $5 = $6;
- $7 = $3;
- HEAP32[$vararg_buffer>>2] = $4;
- (_mrb_get_args($7,68805,$vararg_buffer)|0);
- $8 = $3;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$4>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$4+4>>2]|0;
- _mrb_check_type($8,$$byval_copy,10);
- while(1) {
-  $9 = $5;
-  $10 = ($9|0)!=(0|0);
-  if (!($10)) {
-   label = 7;
-   break;
-  }
-  $11 = $5;
-  $12 = HEAP32[$11>>2]|0;
-  $13 = $12 & 255;
-  $14 = ($13|0)==(11);
-  if ($14) {
-   $15 = $5;
-   $16 = ((($15)) + 4|0);
-   $17 = HEAP32[$16>>2]|0;
-   $18 = HEAP32[$4>>2]|0;
-   $19 = ($17|0)==($18|0);
-   if ($19) {
-    label = 5;
-    break;
-   }
-  }
-  $20 = $5;
-  $21 = ((($20)) + 20|0);
-  $22 = HEAP32[$21>>2]|0;
-  $5 = $22;
- }
- if ((label|0) == 5) {
-  _mrb_true_value_815($0);
-  STACKTOP = sp;return;
- }
- else if ((label|0) == 7) {
-  _mrb_false_value_816($0);
-  STACKTOP = sp;return;
- }
-}
-function _mrb_mod_append_features($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $$byval_copy = sp + 24|0;
- $vararg_buffer = sp;
- $4 = sp + 8|0;
- $3 = $1;
- $5 = $3;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
- _mrb_check_type($5,$$byval_copy,10);
- $6 = $3;
- HEAP32[$vararg_buffer>>2] = $4;
- (_mrb_get_args($6,68805,$vararg_buffer)|0);
- $7 = $3;
- $8 = HEAP32[$4>>2]|0;
- $9 = HEAP32[$2>>2]|0;
- _mrb_include_module($7,$8,$9);
- ;HEAP32[$0>>2]=HEAP32[$2>>2]|0;HEAP32[$0+4>>2]=HEAP32[$2+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_mod_included_modules($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;
- var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0;
- var $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);
- $$byval_copy1 = sp + 48|0;
- $$byval_copy = sp + 40|0;
- $4 = sp + 24|0;
- $7 = sp + 8|0;
- $8 = sp;
- $3 = $1;
- $9 = HEAP32[$2>>2]|0;
- $5 = $9;
- $10 = $5;
- $6 = $10;
- $11 = $6;
- $12 = HEAP32[$11>>2]|0;
- $13 = $12 >>> 11;
- $14 = $13 & 524288;
- $15 = ($14|0)!=(0);
- L1: do {
-  if ($15) {
-   $16 = $6;
-   $17 = ((($16)) + 20|0);
-   $18 = HEAP32[$17>>2]|0;
-   $6 = $18;
-   while(1) {
-    $19 = $6;
-    $20 = HEAP32[$19>>2]|0;
-    $21 = $20 >>> 11;
-    $22 = $21 & 1048576;
-    $23 = ($22|0)!=(0);
-    $24 = $23 ^ 1;
-    if (!($24)) {
-     break L1;
-    }
-    $25 = $6;
-    $26 = ((($25)) + 20|0);
-    $27 = HEAP32[$26>>2]|0;
-    $6 = $27;
-   }
-  }
- } while(0);
- $28 = $3;
- _mrb_ary_new($7,$28);
- ;HEAP32[$4>>2]=HEAP32[$7>>2]|0;HEAP32[$4+4>>2]=HEAP32[$7+4>>2]|0;
- while(1) {
-  $29 = $5;
-  $30 = ($29|0)!=(0|0);
-  if (!($30)) {
-   break;
-  }
-  $31 = $5;
-  $32 = $6;
-  $33 = ($31|0)!=($32|0);
-  if ($33) {
-   $34 = $5;
-   $35 = HEAP32[$34>>2]|0;
-   $36 = $35 & 255;
-   $37 = ($36|0)==(11);
-   if ($37) {
-    $38 = $5;
-    $39 = ((($38)) + 4|0);
-    $40 = HEAP32[$39>>2]|0;
-    $41 = HEAP32[$40>>2]|0;
-    $42 = $41 & 255;
-    $43 = ($42|0)==(10);
-    if ($43) {
-     $44 = $3;
-     $45 = $5;
-     $46 = ((($45)) + 4|0);
-     $47 = HEAP32[$46>>2]|0;
-     _mrb_obj_value_661($8,$47);
-     ;HEAP32[$$byval_copy>>2]=HEAP32[$4>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$4+4>>2]|0;
-     ;HEAP32[$$byval_copy1>>2]=HEAP32[$8>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$8+4>>2]|0;
-     _mrb_ary_push($44,$$byval_copy,$$byval_copy1);
-    }
-   }
-  }
-  $48 = $5;
-  $49 = ((($48)) + 20|0);
-  $50 = HEAP32[$49>>2]|0;
-  $5 = $50;
- }
- ;HEAP32[$0>>2]=HEAP32[$4>>2]|0;HEAP32[$0+4>>2]=HEAP32[$4+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_mod_initialize($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);
- $$byval_copy1 = sp + 48|0;
- $$byval_copy = sp + 40|0;
- $vararg_buffer = sp;
- $4 = sp + 24|0;
- $6 = sp + 8|0;
- $3 = $1;
- $7 = HEAP32[$2>>2]|0;
- $5 = $7;
- $8 = $3;
- $9 = $5;
- _boot_initmod($8,$9);
- $10 = $3;
- HEAP32[$vararg_buffer>>2] = $4;
- (_mrb_get_args($10,66381,$vararg_buffer)|0);
- $11 = ((($4)) + 4|0);
- $12 = HEAP32[$11>>2]|0;
- $13 = ($12|0)==(0);
- if ($13) {
-  $14 = HEAP32[$4>>2]|0;
-  $15 = ($14|0)!=(0);
-  if (!($15)) {
-   ;HEAP32[$0>>2]=HEAP32[$2>>2]|0;HEAP32[$0+4>>2]=HEAP32[$2+4>>2]|0;
-   STACKTOP = sp;return;
-  }
- }
- $16 = $3;
- $17 = $5;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$4>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$4+4>>2]|0;
- ;HEAP32[$$byval_copy1>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$2+4>>2]|0;
- _mrb_yield_with_class($6,$16,$$byval_copy,1,$2,$$byval_copy1,$17);
- ;HEAP32[$0>>2]=HEAP32[$2>>2]|0;HEAP32[$0+4>>2]=HEAP32[$2+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_mod_instance_methods($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $vararg_buffer = sp;
- $5 = sp + 12|0;
- $3 = $1;
- $6 = HEAP32[$2>>2]|0;
- $4 = $6;
- HEAP8[$5>>0] = 1;
- $7 = $3;
- HEAP32[$vararg_buffer>>2] = $5;
- (_mrb_get_args($7,68724,$vararg_buffer)|0);
- $8 = $3;
- $9 = HEAP8[$5>>0]|0;
- $10 = $4;
- _mrb_class_instance_method_list($0,$8,$9,$10,0);
- STACKTOP = sp;return;
-}
-function _mrb_mod_method_defined($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $vararg_buffer = sp;
- $4 = sp + 4|0;
- $3 = $1;
- $5 = $3;
- HEAP32[$vararg_buffer>>2] = $4;
- (_mrb_get_args($5,68770,$vararg_buffer)|0);
- $6 = $3;
- $7 = HEAP32[$2>>2]|0;
- $8 = HEAP32[$4>>2]|0;
- $9 = (_mrb_obj_respond_to($6,$7,$8)|0);
- _mrb_bool_value_793($0,$9);
- STACKTOP = sp;return;
-}
-function _mrb_mod_dummy_visibility($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $3 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $1;
- ;HEAP32[$0>>2]=HEAP32[$2>>2]|0;HEAP32[$0+4>>2]=HEAP32[$2+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_mod_remove_cvar($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $$byval_copy9 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $3 = 0, $4 = 0, $5 = 0;
- var $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, $vararg_buffer1 = 0, $vararg_buffer5 = 0, $vararg_ptr4 = 0, $vararg_ptr8 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 112|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(112|0);
- $$byval_copy9 = sp + 96|0;
- $$byval_copy = sp + 88|0;
- $vararg_buffer5 = sp + 24|0;
- $vararg_buffer1 = sp + 8|0;
- $vararg_buffer = sp;
- $4 = sp + 72|0;
- $5 = sp + 64|0;
- $6 = sp + 56|0;
- $7 = sp + 48|0;
- $8 = sp + 40|0;
- $3 = $1;
- $9 = $3;
- HEAP32[$vararg_buffer>>2] = $5;
- (_mrb_get_args($9,68770,$vararg_buffer)|0);
- $10 = $3;
- $11 = HEAP32[$5>>2]|0;
- _check_cv_name_sym($10,$11);
- $12 = $3;
- $13 = HEAP32[$5>>2]|0;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
- _mrb_iv_remove($6,$12,$$byval_copy,$13);
- ;HEAP32[$4>>2]=HEAP32[$6>>2]|0;HEAP32[$4+4>>2]=HEAP32[$6+4>>2]|0;
- $14 = ((($4)) + 4|0);
- $15 = HEAP32[$14>>2]|0;
- $16 = ($15|0)==(5);
- if (!($16)) {
-  ;HEAP32[$0>>2]=HEAP32[$4>>2]|0;HEAP32[$0+4>>2]=HEAP32[$4+4>>2]|0;
-  STACKTOP = sp;return;
- }
- $17 = $3;
- $18 = HEAP32[$5>>2]|0;
- ;HEAP32[$$byval_copy9>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy9+4>>2]=HEAP32[$2+4>>2]|0;
- $19 = (_mrb_cv_defined($17,$$byval_copy9,$18)|0);
- $20 = ($19<<24>>24)!=(0);
- $21 = $3;
- $22 = HEAP32[$5>>2]|0;
- $23 = $3;
- $24 = HEAP32[$5>>2]|0;
- if ($20) {
-  _mrb_sym2str($7,$23,$24);
-  ;HEAP8[$vararg_buffer1>>0]=HEAP8[$7>>0]|0;HEAP8[$vararg_buffer1+1>>0]=HEAP8[$7+1>>0]|0;HEAP8[$vararg_buffer1+2>>0]=HEAP8[$7+2>>0]|0;HEAP8[$vararg_buffer1+3>>0]=HEAP8[$7+3>>0]|0;HEAP8[$vararg_buffer1+4>>0]=HEAP8[$7+4>>0]|0;HEAP8[$vararg_buffer1+5>>0]=HEAP8[$7+5>>0]|0;HEAP8[$vararg_buffer1+6>>0]=HEAP8[$7+6>>0]|0;HEAP8[$vararg_buffer1+7>>0]=HEAP8[$7+7>>0]|0;
-  $vararg_ptr4 = ((($vararg_buffer1)) + 8|0);
-  ;HEAP8[$vararg_ptr4>>0]=HEAP8[$2>>0]|0;HEAP8[$vararg_ptr4+1>>0]=HEAP8[$2+1>>0]|0;HEAP8[$vararg_ptr4+2>>0]=HEAP8[$2+2>>0]|0;HEAP8[$vararg_ptr4+3>>0]=HEAP8[$2+3>>0]|0;HEAP8[$vararg_ptr4+4>>0]=HEAP8[$2+4>>0]|0;HEAP8[$vararg_ptr4+5>>0]=HEAP8[$2+5>>0]|0;HEAP8[$vararg_ptr4+6>>0]=HEAP8[$2+6>>0]|0;HEAP8[$vararg_ptr4+7>>0]=HEAP8[$2+7>>0]|0;
-  _mrb_name_error($21,$22,66275,$vararg_buffer1);
-  // unreachable;
- } else {
-  _mrb_sym2str($8,$23,$24);
-  ;HEAP8[$vararg_buffer5>>0]=HEAP8[$8>>0]|0;HEAP8[$vararg_buffer5+1>>0]=HEAP8[$8+1>>0]|0;HEAP8[$vararg_buffer5+2>>0]=HEAP8[$8+2>>0]|0;HEAP8[$vararg_buffer5+3>>0]=HEAP8[$8+3>>0]|0;HEAP8[$vararg_buffer5+4>>0]=HEAP8[$8+4>>0]|0;HEAP8[$vararg_buffer5+5>>0]=HEAP8[$8+5>>0]|0;HEAP8[$vararg_buffer5+6>>0]=HEAP8[$8+6>>0]|0;HEAP8[$vararg_buffer5+7>>0]=HEAP8[$8+7>>0]|0;
-  $vararg_ptr8 = ((($vararg_buffer5)) + 8|0);
-  ;HEAP8[$vararg_ptr8>>0]=HEAP8[$2>>0]|0;HEAP8[$vararg_ptr8+1>>0]=HEAP8[$2+1>>0]|0;HEAP8[$vararg_ptr8+2>>0]=HEAP8[$2+2>>0]|0;HEAP8[$vararg_ptr8+3>>0]=HEAP8[$2+3>>0]|0;HEAP8[$vararg_ptr8+4>>0]=HEAP8[$2+4>>0]|0;HEAP8[$vararg_ptr8+5>>0]=HEAP8[$2+5>>0]|0;HEAP8[$vararg_ptr8+6>>0]=HEAP8[$2+6>>0]|0;HEAP8[$vararg_ptr8+7>>0]=HEAP8[$2+7>>0]|0;
-  _mrb_name_error($21,$22,66299,$vararg_buffer5);
-  // unreachable;
- }
-}
-function _mrb_mod_remove_method($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, $vararg_ptr1 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $$byval_copy = sp + 24|0;
- $vararg_buffer = sp;
- $4 = sp + 12|0;
- $5 = sp + 8|0;
- $3 = $1;
- $6 = $3;
- HEAP32[$vararg_buffer>>2] = $5;
- $vararg_ptr1 = ((($vararg_buffer)) + 4|0);
- HEAP32[$vararg_ptr1>>2] = $4;
- (_mrb_get_args($6,68856,$vararg_buffer)|0);
- while(1) {
-  $7 = HEAP32[$4>>2]|0;
-  $8 = (($7) + -1)|0;
-  HEAP32[$4>>2] = $8;
-  $9 = ($7|0)!=(0);
-  if (!($9)) {
-   break;
-  }
-  $10 = $3;
-  $11 = HEAP32[$5>>2]|0;
-  $12 = HEAP32[$11>>2]|0;
-  ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
-  _remove_method($10,$$byval_copy,$12);
-  $13 = HEAP32[$5>>2]|0;
-  $14 = ((($13)) + 8|0);
-  HEAP32[$5>>2] = $14;
- }
- ;HEAP32[$0>>2]=HEAP32[$2>>2]|0;HEAP32[$0+4>>2]=HEAP32[$2+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_mod_attr_reader($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $$byval_copy2 = 0, $$byval_copy3 = 0, $$byval_copy4 = 0, $$byval_copy5 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0;
- var $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0;
- var $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0;
- var $61 = 0, $62 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, $vararg_ptr1 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 144|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(144|0);
- $$byval_copy5 = sp + 128|0;
- $$byval_copy4 = sp + 120|0;
- $$byval_copy3 = sp + 112|0;
- $$byval_copy2 = sp + 104|0;
- $$byval_copy = sp + 96|0;
- $vararg_buffer = sp;
- $5 = sp + 84|0;
- $6 = sp + 80|0;
- $9 = sp + 64|0;
- $10 = sp + 56|0;
- $13 = sp + 40|0;
- $14 = sp + 32|0;
- $15 = sp + 24|0;
- $16 = sp + 16|0;
- $17 = sp + 8|0;
- $3 = $1;
- $18 = HEAP32[$2>>2]|0;
- $4 = $18;
- $19 = $3;
- HEAP32[$vararg_buffer>>2] = $5;
- $vararg_ptr1 = ((($vararg_buffer)) + 4|0);
- HEAP32[$vararg_ptr1>>2] = $6;
- (_mrb_get_args($19,68856,$vararg_buffer)|0);
- $20 = $3;
- $21 = (_mrb_gc_arena_save($20)|0);
- $8 = $21;
- $7 = 0;
- while(1) {
-  $22 = $7;
-  $23 = HEAP32[$6>>2]|0;
-  $24 = ($22|0)<($23|0);
-  if (!($24)) {
-   break;
-  }
-  $25 = $3;
-  $26 = HEAP32[$5>>2]|0;
-  $27 = $7;
-  $28 = (($26) + ($27<<3)|0);
-  ;HEAP32[$$byval_copy>>2]=HEAP32[$28>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$28+4>>2]|0;
-  $29 = (_to_sym($25,$$byval_copy)|0);
-  $11 = $29;
-  $30 = $3;
-  $31 = $11;
-  _mrb_sym2str($13,$30,$31);
-  ;HEAP32[$9>>2]=HEAP32[$13>>2]|0;HEAP32[$9+4>>2]=HEAP32[$13+4>>2]|0;
-  $32 = $3;
-  $33 = HEAP32[$9>>2]|0;
-  $34 = HEAP32[$33>>2]|0;
-  $35 = $34 >>> 11;
-  $36 = $35 & 8;
-  $37 = ($36|0)!=(0);
-  $38 = HEAP32[$9>>2]|0;
-  if ($37) {
-   $39 = HEAP32[$38>>2]|0;
-   $40 = $39 >>> 11;
-   $41 = $40 & 496;
-   $42 = $41 >> 4;
-   $46 = $42;
-  } else {
-   $43 = ((($38)) + 12|0);
-   $44 = HEAP32[$43>>2]|0;
-   $46 = $44;
-  }
-  $45 = (($46) + 1)|0;
-  _mrb_str_buf_new($14,$32,$45);
-  ;HEAP32[$10>>2]=HEAP32[$14>>2]|0;HEAP32[$10+4>>2]=HEAP32[$14+4>>2]|0;
-  $47 = $3;
-  ;HEAP32[$$byval_copy2>>2]=HEAP32[$10>>2]|0;HEAP32[$$byval_copy2+4>>2]=HEAP32[$10+4>>2]|0;
-  _mrb_str_cat($15,$47,$$byval_copy2,66241,1);
-  $48 = $3;
-  ;HEAP32[$$byval_copy3>>2]=HEAP32[$10>>2]|0;HEAP32[$$byval_copy3+4>>2]=HEAP32[$10+4>>2]|0;
-  ;HEAP32[$$byval_copy4>>2]=HEAP32[$9>>2]|0;HEAP32[$$byval_copy4+4>>2]=HEAP32[$9+4>>2]|0;
-  _mrb_str_cat_str($16,$48,$$byval_copy3,$$byval_copy4);
-  $49 = $3;
-  ;HEAP32[$$byval_copy5>>2]=HEAP32[$10>>2]|0;HEAP32[$$byval_copy5+4>>2]=HEAP32[$10+4>>2]|0;
-  $50 = (_mrb_intern_str($49,$$byval_copy5)|0);
-  $12 = $50;
-  $51 = $3;
-  $52 = $12;
-  _mrb_iv_check($51,$52);
-  $53 = $12;
-  _mrb_symbol_value_663($17,$53);
-  ;HEAP32[$9>>2]=HEAP32[$17>>2]|0;HEAP32[$9+4>>2]=HEAP32[$17+4>>2]|0;
-  $54 = $3;
-  $55 = $4;
-  $56 = $11;
-  $57 = $3;
-  $58 = (_mrb_proc_new_cfunc_with_env($57,274,1,$9)|0);
-  _mrb_define_method_raw($54,$55,$56,$58);
-  $59 = $3;
-  $60 = $8;
-  _mrb_gc_arena_restore($59,$60);
-  $61 = $7;
-  $62 = (($61) + 1)|0;
-  $7 = $62;
- }
- _mrb_nil_value_689($0);
- STACKTOP = sp;return;
-}
-function _mrb_mod_attr_writer($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $$byval_copy2 = 0, $$byval_copy3 = 0, $$byval_copy4 = 0, $$byval_copy5 = 0, $$byval_copy6 = 0, $$byval_copy7 = 0, $$byval_copy8 = 0, $$byval_copy9 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0;
- var $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0;
- var $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0;
- var $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0;
- var $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $9 = 0, $vararg_buffer = 0, $vararg_ptr1 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 208|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(208|0);
- $$byval_copy9 = sp + 192|0;
- $$byval_copy8 = sp + 184|0;
- $$byval_copy7 = sp + 176|0;
- $$byval_copy6 = sp + 168|0;
- $$byval_copy5 = sp + 160|0;
- $$byval_copy4 = sp + 152|0;
- $$byval_copy3 = sp + 144|0;
- $$byval_copy2 = sp + 136|0;
- $$byval_copy = sp + 128|0;
- $vararg_buffer = sp;
- $5 = sp + 116|0;
- $6 = sp + 112|0;
- $9 = sp + 96|0;
- $10 = sp + 88|0;
- $11 = sp + 80|0;
- $14 = sp + 64|0;
- $15 = sp + 56|0;
- $16 = sp + 48|0;
- $17 = sp + 40|0;
- $18 = sp + 32|0;
- $19 = sp + 24|0;
- $20 = sp + 16|0;
- $21 = sp + 8|0;
- $3 = $1;
- $22 = HEAP32[$2>>2]|0;
- $4 = $22;
- $23 = $3;
- HEAP32[$vararg_buffer>>2] = $5;
- $vararg_ptr1 = ((($vararg_buffer)) + 4|0);
- HEAP32[$vararg_ptr1>>2] = $6;
- (_mrb_get_args($23,68856,$vararg_buffer)|0);
- $24 = $3;
- $25 = (_mrb_gc_arena_save($24)|0);
- $8 = $25;
- $7 = 0;
- while(1) {
-  $26 = $7;
-  $27 = HEAP32[$6>>2]|0;
-  $28 = ($26|0)<($27|0);
-  if (!($28)) {
-   break;
-  }
-  $29 = $3;
-  $30 = HEAP32[$5>>2]|0;
-  $31 = $7;
-  $32 = (($30) + ($31<<3)|0);
-  ;HEAP32[$$byval_copy>>2]=HEAP32[$32>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$32+4>>2]|0;
-  $33 = (_to_sym($29,$$byval_copy)|0);
-  $12 = $33;
-  $34 = $3;
-  $35 = $12;
-  _mrb_sym2str($14,$34,$35);
-  ;HEAP32[$9>>2]=HEAP32[$14>>2]|0;HEAP32[$9+4>>2]=HEAP32[$14+4>>2]|0;
-  $36 = $3;
-  $37 = HEAP32[$9>>2]|0;
-  $38 = HEAP32[$37>>2]|0;
-  $39 = $38 >>> 11;
-  $40 = $39 & 8;
-  $41 = ($40|0)!=(0);
-  $42 = HEAP32[$9>>2]|0;
-  if ($41) {
-   $43 = HEAP32[$42>>2]|0;
-   $44 = $43 >>> 11;
-   $45 = $44 & 496;
-   $46 = $45 >> 4;
-   $50 = $46;
-  } else {
-   $47 = ((($42)) + 12|0);
-   $48 = HEAP32[$47>>2]|0;
-   $50 = $48;
-  }
-  $49 = (($50) + 1)|0;
-  _mrb_str_buf_new($15,$36,$49);
-  ;HEAP32[$10>>2]=HEAP32[$15>>2]|0;HEAP32[$10+4>>2]=HEAP32[$15+4>>2]|0;
-  $51 = $3;
-  ;HEAP32[$$byval_copy2>>2]=HEAP32[$10>>2]|0;HEAP32[$$byval_copy2+4>>2]=HEAP32[$10+4>>2]|0;
-  _mrb_str_cat($16,$51,$$byval_copy2,66241,1);
-  $52 = $3;
-  ;HEAP32[$$byval_copy3>>2]=HEAP32[$10>>2]|0;HEAP32[$$byval_copy3+4>>2]=HEAP32[$10+4>>2]|0;
-  ;HEAP32[$$byval_copy4>>2]=HEAP32[$9>>2]|0;HEAP32[$$byval_copy4+4>>2]=HEAP32[$9+4>>2]|0;
-  _mrb_str_cat_str($17,$52,$$byval_copy3,$$byval_copy4);
-  $53 = $3;
-  ;HEAP32[$$byval_copy5>>2]=HEAP32[$10>>2]|0;HEAP32[$$byval_copy5+4>>2]=HEAP32[$10+4>>2]|0;
-  $54 = (_mrb_intern_str($53,$$byval_copy5)|0);
-  $13 = $54;
-  $55 = $3;
-  $56 = $13;
-  _mrb_iv_check($55,$56);
-  $57 = $13;
-  _mrb_symbol_value_663($18,$57);
-  ;HEAP32[$11>>2]=HEAP32[$18>>2]|0;HEAP32[$11+4>>2]=HEAP32[$18+4>>2]|0;
-  $58 = $3;
-  $59 = HEAP32[$10>>2]|0;
-  $60 = HEAP32[$59>>2]|0;
-  $61 = $60 >>> 11;
-  $62 = $61 & 8;
-  $63 = ($62|0)!=(0);
-  $64 = HEAP32[$10>>2]|0;
-  if ($63) {
-   $65 = HEAP32[$64>>2]|0;
-   $66 = $65 >>> 11;
-   $67 = $66 & 496;
-   $68 = $67 >> 4;
-   $71 = $68;
-  } else {
-   $69 = ((($64)) + 12|0);
-   $70 = HEAP32[$69>>2]|0;
-   $71 = $70;
-  }
-  _mrb_str_buf_new($19,$58,$71);
-  ;HEAP32[$10>>2]=HEAP32[$19>>2]|0;HEAP32[$10+4>>2]=HEAP32[$19+4>>2]|0;
-  $72 = $3;
-  ;HEAP32[$$byval_copy6>>2]=HEAP32[$10>>2]|0;HEAP32[$$byval_copy6+4>>2]=HEAP32[$10+4>>2]|0;
-  ;HEAP32[$$byval_copy7>>2]=HEAP32[$9>>2]|0;HEAP32[$$byval_copy7+4>>2]=HEAP32[$9+4>>2]|0;
-  _mrb_str_cat_str($20,$72,$$byval_copy6,$$byval_copy7);
-  $73 = $3;
-  ;HEAP32[$$byval_copy8>>2]=HEAP32[$10>>2]|0;HEAP32[$$byval_copy8+4>>2]=HEAP32[$10+4>>2]|0;
-  _mrb_str_cat($21,$73,$$byval_copy8,66243,1);
-  $74 = $3;
-  ;HEAP32[$$byval_copy9>>2]=HEAP32[$10>>2]|0;HEAP32[$$byval_copy9+4>>2]=HEAP32[$10+4>>2]|0;
-  $75 = (_mrb_intern_str($74,$$byval_copy9)|0);
-  $12 = $75;
-  $76 = $3;
-  $77 = $4;
-  $78 = $12;
-  $79 = $3;
-  $80 = (_mrb_proc_new_cfunc_with_env($79,275,1,$11)|0);
-  _mrb_define_method_raw($76,$77,$78,$80);
-  $81 = $3;
-  $82 = $8;
-  _mrb_gc_arena_restore($81,$82);
-  $83 = $7;
-  $84 = (($83) + 1)|0;
-  $7 = $84;
- }
- _mrb_nil_value_689($0);
- STACKTOP = sp;return;
-}
-function _mrb_mod_to_s($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $$byval_copy10 = 0, $$byval_copy11 = 0, $$byval_copy12 = 0, $$byval_copy13 = 0, $$byval_copy2 = 0, $$byval_copy3 = 0, $$byval_copy4 = 0, $$byval_copy5 = 0, $$byval_copy6 = 0, $$byval_copy7 = 0, $$byval_copy8 = 0, $$byval_copy9 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0;
- var $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0;
- var $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0;
- var $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 240|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(240|0);
- $$byval_copy13 = sp + 232|0;
- $$byval_copy12 = sp + 224|0;
- $$byval_copy11 = sp + 216|0;
- $$byval_copy10 = sp + 208|0;
- $$byval_copy9 = sp + 200|0;
- $$byval_copy8 = sp + 192|0;
- $$byval_copy7 = sp + 184|0;
- $$byval_copy6 = sp + 176|0;
- $$byval_copy5 = sp + 168|0;
- $$byval_copy4 = sp + 160|0;
- $$byval_copy3 = sp + 152|0;
- $$byval_copy2 = sp + 144|0;
- $$byval_copy1 = sp + 136|0;
- $$byval_copy = sp + 128|0;
- $4 = sp + 112|0;
- $5 = sp + 104|0;
- $6 = sp + 96|0;
- $7 = sp + 88|0;
- $8 = sp + 80|0;
- $9 = sp + 72|0;
- $10 = sp + 64|0;
- $12 = sp + 48|0;
- $13 = sp + 40|0;
- $14 = sp + 32|0;
- $15 = sp + 24|0;
- $16 = sp + 16|0;
- $17 = sp + 8|0;
- $18 = sp;
- $3 = $1;
- $19 = ((($2)) + 4|0);
- $20 = HEAP32[$19>>2]|0;
- $21 = ($20|0)==(12);
- $22 = $3;
- if ($21) {
-  $23 = $3;
-  $24 = (_mrb_intern_static($23,68237,12)|0);
-  ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
-  _mrb_iv_get($5,$22,$$byval_copy,$24);
-  $25 = $3;
-  _mrb_str_new_static($6,$25,65531,8);
-  ;HEAP32[$4>>2]=HEAP32[$6>>2]|0;HEAP32[$4+4>>2]=HEAP32[$6+4>>2]|0;
-  $26 = ((($5)) + 4|0);
-  $27 = HEAP32[$26>>2]|0;
-  switch ($27|0) {
-  case 12: case 10: case 9:  {
-   $28 = $3;
-   $29 = $3;
-   ;HEAP32[$$byval_copy1>>2]=HEAP32[$5>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$5+4>>2]|0;
-   _mrb_inspect($7,$29,$$byval_copy1);
-   ;HEAP32[$$byval_copy2>>2]=HEAP32[$4>>2]|0;HEAP32[$$byval_copy2+4>>2]=HEAP32[$4+4>>2]|0;
-   ;HEAP32[$$byval_copy3>>2]=HEAP32[$7>>2]|0;HEAP32[$$byval_copy3+4>>2]=HEAP32[$7+4>>2]|0;
-   _mrb_str_cat_str($8,$28,$$byval_copy2,$$byval_copy3);
-   break;
-  }
-  default: {
-   $30 = $3;
-   $31 = $3;
-   ;HEAP32[$$byval_copy4>>2]=HEAP32[$5>>2]|0;HEAP32[$$byval_copy4+4>>2]=HEAP32[$5+4>>2]|0;
-   _mrb_any_to_s($9,$31,$$byval_copy4);
-   ;HEAP32[$$byval_copy5>>2]=HEAP32[$4>>2]|0;HEAP32[$$byval_copy5+4>>2]=HEAP32[$4+4>>2]|0;
-   ;HEAP32[$$byval_copy6>>2]=HEAP32[$9>>2]|0;HEAP32[$$byval_copy6+4>>2]=HEAP32[$9+4>>2]|0;
-   _mrb_str_cat_str($10,$30,$$byval_copy5,$$byval_copy6);
-  }
-  }
-  $32 = $3;
-  ;HEAP32[$$byval_copy7>>2]=HEAP32[$4>>2]|0;HEAP32[$$byval_copy7+4>>2]=HEAP32[$4+4>>2]|0;
-  _mrb_str_cat($0,$32,$$byval_copy7,65540,1);
-  STACKTOP = sp;return;
- }
- _mrb_str_buf_new($13,$22,32);
- ;HEAP32[$4>>2]=HEAP32[$13>>2]|0;HEAP32[$4+4>>2]=HEAP32[$13+4>>2]|0;
- $33 = HEAP32[$2>>2]|0;
- $11 = $33;
- $34 = $3;
- $35 = $11;
- _mrb_class_path($14,$34,$35);
- ;HEAP32[$12>>2]=HEAP32[$14>>2]|0;HEAP32[$12+4>>2]=HEAP32[$14+4>>2]|0;
- $36 = ((($12)) + 4|0);
- $37 = HEAP32[$36>>2]|0;
- $38 = ($37|0)==(0);
- if ($38) {
-  $39 = HEAP32[$12>>2]|0;
-  $40 = ($39|0)!=(0);
-  if (!($40)) {
-   $41 = ((($2)) + 4|0);
-   $42 = HEAP32[$41>>2]|0;
-   switch ($42|0) {
-   case 9:  {
-    $43 = $3;
-    ;HEAP32[$$byval_copy8>>2]=HEAP32[$4>>2]|0;HEAP32[$$byval_copy8+4>>2]=HEAP32[$4+4>>2]|0;
-    _mrb_str_cat($15,$43,$$byval_copy8,65531,8);
-    break;
-   }
-   case 10:  {
-    $44 = $3;
-    ;HEAP32[$$byval_copy9>>2]=HEAP32[$4>>2]|0;HEAP32[$$byval_copy9+4>>2]=HEAP32[$4+4>>2]|0;
-    _mrb_str_cat($16,$44,$$byval_copy9,66221,9);
-    break;
-   }
-   default: {
-    $45 = $3;
-    ;HEAP32[$$byval_copy10>>2]=HEAP32[$4>>2]|0;HEAP32[$$byval_copy10+4>>2]=HEAP32[$4+4>>2]|0;
-    _mrb_str_cat($17,$45,$$byval_copy10,66231,9);
-   }
-   }
-   $46 = $3;
-   $47 = $3;
-   $48 = $11;
-   _mrb_ptr_to_str($18,$47,$48);
-   ;HEAP32[$$byval_copy11>>2]=HEAP32[$4>>2]|0;HEAP32[$$byval_copy11+4>>2]=HEAP32[$4+4>>2]|0;
-   ;HEAP32[$$byval_copy12>>2]=HEAP32[$18>>2]|0;HEAP32[$$byval_copy12+4>>2]=HEAP32[$18+4>>2]|0;
-   _mrb_str_concat($46,$$byval_copy11,$$byval_copy12);
-   $49 = $3;
-   ;HEAP32[$$byval_copy13>>2]=HEAP32[$4>>2]|0;HEAP32[$$byval_copy13+4>>2]=HEAP32[$4+4>>2]|0;
-   _mrb_str_cat($0,$49,$$byval_copy13,65540,1);
-   STACKTOP = sp;return;
-  }
- }
- ;HEAP32[$0>>2]=HEAP32[$12>>2]|0;HEAP32[$0+4>>2]=HEAP32[$12+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_mod_alias($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, $vararg_ptr1 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $vararg_buffer = sp;
- $5 = sp + 12|0;
- $6 = sp + 8|0;
- $3 = $1;
- $7 = HEAP32[$2>>2]|0;
- $4 = $7;
- $8 = $3;
- HEAP32[$vararg_buffer>>2] = $5;
- $vararg_ptr1 = ((($vararg_buffer)) + 4|0);
- HEAP32[$vararg_ptr1>>2] = $6;
- (_mrb_get_args($8,66218,$vararg_buffer)|0);
- $9 = $3;
- $10 = $4;
- $11 = HEAP32[$5>>2]|0;
- $12 = HEAP32[$6>>2]|0;
- _mrb_alias_method($9,$10,$11,$12);
- _mrb_nil_value_689($0);
- STACKTOP = sp;return;
-}
-function _mrb_mod_ancestors($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $$byval_copy2 = 0, $$byval_copy3 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0;
- var $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 80|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(80|0);
- $$byval_copy3 = sp + 72|0;
- $$byval_copy2 = sp + 64|0;
- $$byval_copy1 = sp + 56|0;
- $$byval_copy = sp + 48|0;
- $4 = sp + 32|0;
- $6 = sp + 16|0;
- $7 = sp + 8|0;
- $8 = sp;
- $3 = $1;
- $9 = HEAP32[$2>>2]|0;
- $5 = $9;
- $10 = $3;
- _mrb_ary_new($6,$10);
- ;HEAP32[$4>>2]=HEAP32[$6>>2]|0;HEAP32[$4+4>>2]=HEAP32[$6+4>>2]|0;
- while(1) {
-  $11 = $5;
-  $12 = ($11|0)!=(0|0);
-  if (!($12)) {
-   break;
-  }
-  $13 = $5;
-  $14 = HEAP32[$13>>2]|0;
-  $15 = $14 & 255;
-  $16 = ($15|0)==(11);
-  if ($16) {
-   $17 = $3;
-   $18 = $5;
-   $19 = ((($18)) + 4|0);
-   $20 = HEAP32[$19>>2]|0;
-   _mrb_obj_value_661($7,$20);
-   ;HEAP32[$$byval_copy>>2]=HEAP32[$4>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$4+4>>2]|0;
-   ;HEAP32[$$byval_copy1>>2]=HEAP32[$7>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$7+4>>2]|0;
-   _mrb_ary_push($17,$$byval_copy,$$byval_copy1);
-  } else {
-   $21 = $5;
-   $22 = HEAP32[$21>>2]|0;
-   $23 = $22 >>> 11;
-   $24 = $23 & 524288;
-   $25 = ($24|0)!=(0);
-   if (!($25)) {
-    $26 = $3;
-    $27 = $5;
-    _mrb_obj_value_661($8,$27);
-    ;HEAP32[$$byval_copy2>>2]=HEAP32[$4>>2]|0;HEAP32[$$byval_copy2+4>>2]=HEAP32[$4+4>>2]|0;
-    ;HEAP32[$$byval_copy3>>2]=HEAP32[$8>>2]|0;HEAP32[$$byval_copy3+4>>2]=HEAP32[$8+4>>2]|0;
-    _mrb_ary_push($26,$$byval_copy2,$$byval_copy3);
-   }
-  }
-  $28 = $5;
-  $29 = ((($28)) + 20|0);
-  $30 = HEAP32[$29>>2]|0;
-  $5 = $30;
- }
- ;HEAP32[$0>>2]=HEAP32[$4>>2]|0;HEAP32[$0+4>>2]=HEAP32[$4+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_mod_undef($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, $vararg_ptr1 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $vararg_buffer = sp;
- $5 = sp + 12|0;
- $6 = sp + 8|0;
- $3 = $1;
- $7 = HEAP32[$2>>2]|0;
- $4 = $7;
- $8 = $3;
- HEAP32[$vararg_buffer>>2] = $6;
- $vararg_ptr1 = ((($vararg_buffer)) + 4|0);
- HEAP32[$vararg_ptr1>>2] = $5;
- (_mrb_get_args($8,68856,$vararg_buffer)|0);
- while(1) {
-  $9 = HEAP32[$5>>2]|0;
-  $10 = (($9) + -1)|0;
-  HEAP32[$5>>2] = $10;
-  $11 = ($9|0)!=(0);
-  if (!($11)) {
-   break;
-  }
-  $12 = $3;
-  $13 = $4;
-  $14 = HEAP32[$6>>2]|0;
-  $15 = HEAP32[$14>>2]|0;
-  _undef_method($12,$13,$15);
-  $16 = HEAP32[$6>>2]|0;
-  $17 = ((($16)) + 8|0);
-  HEAP32[$6>>2] = $17;
- }
- _mrb_nil_value_689($0);
- STACKTOP = sp;return;
-}
-function _mrb_mod_const_defined($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $10 = 0, $11 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, $vararg_ptr1 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $$byval_copy = sp + 16|0;
- $vararg_buffer = sp;
- $4 = sp + 8|0;
- $5 = sp + 24|0;
- $3 = $1;
- HEAP8[$5>>0] = 1;
- $6 = $3;
- HEAP32[$vararg_buffer>>2] = $4;
- $vararg_ptr1 = ((($vararg_buffer)) + 4|0);
- HEAP32[$vararg_ptr1>>2] = $5;
- (_mrb_get_args($6,66214,$vararg_buffer)|0);
- $7 = $3;
- $8 = HEAP32[$4>>2]|0;
- _check_const_name_sym($7,$8);
- $9 = $3;
- $10 = HEAP32[$4>>2]|0;
- $11 = HEAP8[$5>>0]|0;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
- _const_defined($0,$9,$$byval_copy,$10,$11);
- STACKTOP = sp;return;
-}
-function _mrb_mod_const_get($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $$byval_copy = sp + 16|0;
- $vararg_buffer = sp;
- $4 = sp + 4|0;
- $3 = $1;
- $5 = $3;
- HEAP32[$vararg_buffer>>2] = $4;
- (_mrb_get_args($5,68770,$vararg_buffer)|0);
- $6 = $3;
- $7 = HEAP32[$4>>2]|0;
- _check_const_name_sym($6,$7);
- $8 = $3;
- $9 = HEAP32[$4>>2]|0;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
- _mrb_const_get($0,$8,$$byval_copy,$9);
- STACKTOP = sp;return;
-}
-function _mrb_mod_const_set($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $$byval_copy2 = 0, $10 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, $vararg_ptr1 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);
- $$byval_copy2 = sp + 32|0;
- $$byval_copy = sp + 24|0;
- $vararg_buffer = sp;
- $4 = sp + 16|0;
- $5 = sp + 8|0;
- $3 = $1;
- $6 = $3;
- HEAP32[$vararg_buffer>>2] = $4;
- $vararg_ptr1 = ((($vararg_buffer)) + 4|0);
- HEAP32[$vararg_ptr1>>2] = $5;
- (_mrb_get_args($6,68807,$vararg_buffer)|0);
- $7 = $3;
- $8 = HEAP32[$4>>2]|0;
- _check_const_name_sym($7,$8);
- $9 = $3;
- $10 = HEAP32[$4>>2]|0;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
- ;HEAP32[$$byval_copy2>>2]=HEAP32[$5>>2]|0;HEAP32[$$byval_copy2+4>>2]=HEAP32[$5+4>>2]|0;
- _mrb_const_set($9,$$byval_copy,$10,$$byval_copy2);
- ;HEAP32[$0>>2]=HEAP32[$5>>2]|0;HEAP32[$0+4>>2]=HEAP32[$5+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_mod_remove_const($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, $vararg_buffer1 = 0;
- var label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);
- $$byval_copy = sp + 48|0;
- $vararg_buffer1 = sp + 8|0;
- $vararg_buffer = sp;
- $4 = sp + 40|0;
- $5 = sp + 32|0;
- $6 = sp + 24|0;
- $7 = sp + 16|0;
- $3 = $1;
- $8 = $3;
- HEAP32[$vararg_buffer>>2] = $4;
- (_mrb_get_args($8,68770,$vararg_buffer)|0);
- $9 = $3;
- $10 = HEAP32[$4>>2]|0;
- _check_const_name_sym($9,$10);
- $11 = $3;
- $12 = HEAP32[$4>>2]|0;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
- _mrb_iv_remove($6,$11,$$byval_copy,$12);
- ;HEAP32[$5>>2]=HEAP32[$6>>2]|0;HEAP32[$5+4>>2]=HEAP32[$6+4>>2]|0;
- $13 = ((($5)) + 4|0);
- $14 = HEAP32[$13>>2]|0;
- $15 = ($14|0)==(5);
- if ($15) {
-  $16 = $3;
-  $17 = HEAP32[$4>>2]|0;
-  $18 = $3;
-  $19 = HEAP32[$4>>2]|0;
-  _mrb_sym2str($7,$18,$19);
-  ;HEAP8[$vararg_buffer1>>0]=HEAP8[$7>>0]|0;HEAP8[$vararg_buffer1+1>>0]=HEAP8[$7+1>>0]|0;HEAP8[$vararg_buffer1+2>>0]=HEAP8[$7+2>>0]|0;HEAP8[$vararg_buffer1+3>>0]=HEAP8[$7+3>>0]|0;HEAP8[$vararg_buffer1+4>>0]=HEAP8[$7+4>>0]|0;HEAP8[$vararg_buffer1+5>>0]=HEAP8[$7+5>>0]|0;HEAP8[$vararg_buffer1+6>>0]=HEAP8[$7+6>>0]|0;HEAP8[$vararg_buffer1+7>>0]=HEAP8[$7+7>>0]|0;
-  _mrb_name_error($16,$17,66167,$vararg_buffer1);
-  // unreachable;
- } else {
-  ;HEAP32[$0>>2]=HEAP32[$5>>2]|0;HEAP32[$0+4>>2]=HEAP32[$5+4>>2]|0;
-  STACKTOP = sp;return;
- }
-}
-function _mrb_mod_const_missing($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, $vararg_buffer1 = 0, $vararg_buffer5 = 0, $vararg_ptr4 = 0, label = 0;
- var sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);
- $vararg_buffer5 = sp + 24|0;
- $vararg_buffer1 = sp + 8|0;
- $vararg_buffer = sp;
- $4 = sp + 48|0;
- $5 = sp + 40|0;
- $6 = sp + 32|0;
- $3 = $1;
- $7 = $3;
- HEAP32[$vararg_buffer>>2] = $4;
- (_mrb_get_args($7,68770,$vararg_buffer)|0);
- $8 = HEAP32[$2>>2]|0;
- $9 = (_mrb_class_real($8)|0);
- $10 = $3;
- $11 = ((($10)) + 32|0);
- $12 = HEAP32[$11>>2]|0;
- $13 = ($9|0)!=($12|0);
- $14 = $3;
- $15 = HEAP32[$4>>2]|0;
- $16 = $3;
- $17 = HEAP32[$4>>2]|0;
- if ($13) {
-  _mrb_sym2str($5,$16,$17);
-  ;HEAP8[$vararg_buffer1>>0]=HEAP8[$2>>0]|0;HEAP8[$vararg_buffer1+1>>0]=HEAP8[$2+1>>0]|0;HEAP8[$vararg_buffer1+2>>0]=HEAP8[$2+2>>0]|0;HEAP8[$vararg_buffer1+3>>0]=HEAP8[$2+3>>0]|0;HEAP8[$vararg_buffer1+4>>0]=HEAP8[$2+4>>0]|0;HEAP8[$vararg_buffer1+5>>0]=HEAP8[$2+5>>0]|0;HEAP8[$vararg_buffer1+6>>0]=HEAP8[$2+6>>0]|0;HEAP8[$vararg_buffer1+7>>0]=HEAP8[$2+7>>0]|0;
-  $vararg_ptr4 = ((($vararg_buffer1)) + 8|0);
-  ;HEAP8[$vararg_ptr4>>0]=HEAP8[$5>>0]|0;HEAP8[$vararg_ptr4+1>>0]=HEAP8[$5+1>>0]|0;HEAP8[$vararg_ptr4+2>>0]=HEAP8[$5+2>>0]|0;HEAP8[$vararg_ptr4+3>>0]=HEAP8[$5+3>>0]|0;HEAP8[$vararg_ptr4+4>>0]=HEAP8[$5+4>>0]|0;HEAP8[$vararg_ptr4+5>>0]=HEAP8[$5+5>>0]|0;HEAP8[$vararg_ptr4+6>>0]=HEAP8[$5+6>>0]|0;HEAP8[$vararg_ptr4+7>>0]=HEAP8[$5+7>>0]|0;
-  _mrb_name_error($14,$15,66111,$vararg_buffer1);
-  // unreachable;
- } else {
-  _mrb_sym2str($6,$16,$17);
-  ;HEAP8[$vararg_buffer5>>0]=HEAP8[$6>>0]|0;HEAP8[$vararg_buffer5+1>>0]=HEAP8[$6+1>>0]|0;HEAP8[$vararg_buffer5+2>>0]=HEAP8[$6+2>>0]|0;HEAP8[$vararg_buffer5+3>>0]=HEAP8[$6+3>>0]|0;HEAP8[$vararg_buffer5+4>>0]=HEAP8[$6+4>>0]|0;HEAP8[$vararg_buffer5+5>>0]=HEAP8[$6+5>>0]|0;HEAP8[$vararg_buffer5+6>>0]=HEAP8[$6+6>>0]|0;HEAP8[$vararg_buffer5+7>>0]=HEAP8[$6+7>>0]|0;
-  _mrb_name_error($14,$15,66141,$vararg_buffer5);
-  // unreachable;
- }
-}
-function _mod_define_method($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;
- var $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, $vararg_ptr1 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $vararg_buffer = sp;
- $6 = sp + 16|0;
- $7 = sp + 8|0;
- $3 = $1;
- $8 = HEAP32[$2>>2]|0;
- $4 = $8;
- $9 = $3;
- HEAP32[$vararg_buffer>>2] = $6;
- $vararg_ptr1 = ((($vararg_buffer)) + 4|0);
- HEAP32[$vararg_ptr1>>2] = $7;
- (_mrb_get_args($9,68706,$vararg_buffer)|0);
- $10 = ((($7)) + 4|0);
- $11 = HEAP32[$10>>2]|0;
- $12 = ($11|0)==(0);
- if ($12) {
-  $13 = HEAP32[$7>>2]|0;
-  $14 = ($13|0)!=(0);
-  if (!($14)) {
-   $15 = $3;
-   $16 = $3;
-   $17 = (_mrb_class_get($16,69160)|0);
-   _mrb_raise($15,$17,68709);
-   // unreachable;
-  }
- }
- $18 = $3;
- $19 = $3;
- $20 = ((($19)) + 44|0);
- $21 = HEAP32[$20>>2]|0;
- $22 = (_mrb_obj_alloc($18,13,$21)|0);
- $5 = $22;
- $23 = $5;
- $24 = HEAP32[$7>>2]|0;
- _mrb_proc_copy($23,$24);
- $25 = $5;
- $26 = HEAP32[$25>>2]|0;
- $27 = $26 >>> 11;
- $28 = $27 | 256;
- $29 = HEAP32[$25>>2]|0;
- $30 = $28 & 2097151;
- $31 = $30 << 11;
- $32 = $29 & 2047;
- $33 = $32 | $31;
- HEAP32[$25>>2] = $33;
- $34 = $3;
- $35 = $4;
- $36 = HEAP32[$6>>2]|0;
- $37 = $5;
- _mrb_define_method_raw($34,$35,$36,$37);
- $38 = HEAP32[$6>>2]|0;
- _mrb_symbol_value_663($0,$38);
- STACKTOP = sp;return;
-}
-function _mrb_mod_eqq($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $10 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);
- $$byval_copy = sp + 24|0;
- $vararg_buffer = sp;
- $4 = sp + 8|0;
- $3 = $1;
- $6 = $3;
- HEAP32[$vararg_buffer>>2] = $4;
- (_mrb_get_args($6,69199,$vararg_buffer)|0);
- $7 = $3;
- $8 = HEAP32[$2>>2]|0;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$4>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$4+4>>2]|0;
- $9 = (_mrb_obj_is_kind_of($7,$$byval_copy,$8)|0);
- $5 = $9;
- $10 = $5;
- _mrb_bool_value_793($0,$10);
- STACKTOP = sp;return;
-}
-function _mrb_mod_s_constants($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $3 = 0, $4 = 0, $5 = 0, $6 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $1;
- $4 = $3;
- $5 = $3;
- $6 = (_mrb_class_get($5,65108)|0);
- _mrb_raise($4,$6,66078);
- // unreachable;
-}
-function _mrb_bool_value_793($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = sp;
- $2 = $1;
- $4 = $2;
- $5 = $4&255;
- $6 = ($5|0)!=(0);
- $7 = $6 ? 2 : 0;
- $8 = ((($3)) + 4|0);
- HEAP32[$8>>2] = $7;
- HEAP32[$3>>2] = 1;
- ;HEAP32[$0>>2]=HEAP32[$3>>2]|0;HEAP32[$0+4>>2]=HEAP32[$3+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _check_const_name_sym($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $$byval_copy = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $$byval_copy = sp + 16|0;
- $4 = sp;
- $2 = $0;
- $3 = $1;
- $5 = $2;
- $6 = $2;
- $7 = $3;
- _mrb_sym2str($4,$6,$7);
- ;HEAP32[$$byval_copy>>2]=HEAP32[$4>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$4+4>>2]|0;
- _check_const_name_str($5,$$byval_copy);
- STACKTOP = sp;return;
-}
-function _check_const_name_str($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $$byval_copy = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;
- var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $$byval_copy = sp + 16|0;
- $vararg_buffer = sp;
- $2 = $0;
- $3 = HEAP32[$1>>2]|0;
- $4 = HEAP32[$3>>2]|0;
- $5 = $4 >>> 11;
- $6 = $5 & 8;
- $7 = ($6|0)!=(0);
- $8 = HEAP32[$1>>2]|0;
- if ($7) {
-  $9 = HEAP32[$8>>2]|0;
-  $10 = $9 >>> 11;
-  $11 = $10 & 496;
-  $12 = $11 >> 4;
-  $16 = $12;
- } else {
-  $13 = ((($8)) + 12|0);
-  $14 = HEAP32[$13>>2]|0;
-  $16 = $14;
- }
- $15 = ($16|0)<(1);
- if (!($15)) {
-  $17 = HEAP32[$1>>2]|0;
-  $18 = HEAP32[$17>>2]|0;
-  $19 = $18 >>> 11;
-  $20 = $19 & 8;
-  $21 = ($20|0)!=(0);
-  $22 = HEAP32[$1>>2]|0;
-  $23 = ((($22)) + 12|0);
-  if ($21) {
-   $27 = $23;
-  } else {
-   $24 = ((($23)) + 8|0);
-   $25 = HEAP32[$24>>2]|0;
-   $27 = $25;
-  }
-  $26 = HEAP8[$27>>0]|0;
-  $28 = $26 << 24 >> 24;
-  $29 = (($28) - 65)|0;
-  $30 = ($29>>>0)<(26);
-  if ($30) {
-   STACKTOP = sp;return;
-  }
- }
- $31 = $2;
- $32 = $2;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$1>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$1+4>>2]|0;
- $33 = (_mrb_intern_str($32,$$byval_copy)|0);
- ;HEAP8[$vararg_buffer>>0]=HEAP8[$1>>0]|0;HEAP8[$vararg_buffer+1>>0]=HEAP8[$1+1>>0]|0;HEAP8[$vararg_buffer+2>>0]=HEAP8[$1+2>>0]|0;HEAP8[$vararg_buffer+3>>0]=HEAP8[$1+3>>0]|0;HEAP8[$vararg_buffer+4>>0]=HEAP8[$1+4>>0]|0;HEAP8[$vararg_buffer+5>>0]=HEAP8[$1+5>>0]|0;HEAP8[$vararg_buffer+6>>0]=HEAP8[$1+6>>0]|0;HEAP8[$vararg_buffer+7>>0]=HEAP8[$1+7>>0]|0;
- _mrb_name_error($31,$33,66191,$vararg_buffer);
- // unreachable;
-}
-function _const_defined($0,$1,$2,$3,$4) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- $4 = $4|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $$byval_copy1 = sp + 16|0;
- $$byval_copy = sp + 8|0;
- $5 = $1;
- $6 = $3;
- $7 = $4;
- $8 = $7;
- $9 = ($8<<24>>24)!=(0);
- $10 = $5;
- $11 = $6;
- if ($9) {
-  ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
-  $12 = (_mrb_const_defined($10,$$byval_copy,$11)|0);
-  _mrb_bool_value_793($0,$12);
-  STACKTOP = sp;return;
- } else {
-  ;HEAP32[$$byval_copy1>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$2+4>>2]|0;
-  $13 = (_mrb_const_defined_at($10,$$byval_copy1,$11)|0);
-  _mrb_bool_value_793($0,$13);
-  STACKTOP = sp;return;
- }
-}
-function _attr_writer($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $$byval_copy2 = 0, $10 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);
- $$byval_copy2 = sp + 48|0;
- $$byval_copy1 = sp + 40|0;
- $$byval_copy = sp + 32|0;
- $vararg_buffer = sp;
- $4 = sp + 16|0;
- $5 = sp + 8|0;
- $3 = $1;
- $6 = $3;
- _mrb_proc_cfunc_env_get($4,$6,0);
- $7 = $3;
- HEAP32[$vararg_buffer>>2] = $5;
- (_mrb_get_args($7,69199,$vararg_buffer)|0);
- $8 = $3;
- $9 = $3;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$4>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$4+4>>2]|0;
- $10 = (_to_sym($9,$$byval_copy)|0);
- ;HEAP32[$$byval_copy1>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$2+4>>2]|0;
- ;HEAP32[$$byval_copy2>>2]=HEAP32[$5>>2]|0;HEAP32[$$byval_copy2+4>>2]=HEAP32[$5+4>>2]|0;
- _mrb_iv_set($8,$$byval_copy1,$10,$$byval_copy2);
- ;HEAP32[$0>>2]=HEAP32[$5>>2]|0;HEAP32[$0+4>>2]=HEAP32[$5+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _attr_reader($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $$byval_copy1 = sp + 24|0;
- $$byval_copy = sp + 16|0;
- $4 = sp;
- $3 = $1;
- $5 = $3;
- _mrb_proc_cfunc_env_get($4,$5,0);
- $6 = $3;
- $7 = $3;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$4>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$4+4>>2]|0;
- $8 = (_to_sym($7,$$byval_copy)|0);
- ;HEAP32[$$byval_copy1>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$2+4>>2]|0;
- _mrb_iv_get($0,$6,$$byval_copy1,$8);
- STACKTOP = sp;return;
-}
-function _remove_method($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;
- var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, $vararg_buffer1 = 0, $vararg_ptr4 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 80|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(80|0);
- $$byval_copy = sp + 72|0;
- $vararg_buffer1 = sp + 8|0;
- $vararg_buffer = sp;
- $8 = sp + 40|0;
- $9 = sp + 32|0;
- $10 = sp + 24|0;
- $3 = $0;
- $4 = $2;
- $11 = HEAP32[$1>>2]|0;
- $5 = $11;
- $12 = $5;
- $13 = (_find_origin($12)|0);
- $14 = ((($13)) + 16|0);
- $15 = HEAP32[$14>>2]|0;
- $6 = $15;
- $16 = $6;
- $17 = ($16|0)!=(0|0);
- if ($17) {
-  $18 = $3;
-  $19 = $6;
-  $20 = $4;
-  $21 = (_kh_get_mt($18,$19,$20)|0);
-  $7 = $21;
-  $22 = $7;
-  $23 = $6;
-  $24 = HEAP32[$23>>2]|0;
-  $25 = ($22|0)!=($24|0);
-  if ($25) {
-   $26 = $3;
-   $27 = $6;
-   $28 = $7;
-   _kh_del_mt($26,$27,$28);
-   $29 = $3;
-   $30 = $4;
-   _mrb_symbol_value_663($8,$30);
-   ;HEAP8[$vararg_buffer>>0]=HEAP8[$8>>0]|0;HEAP8[$vararg_buffer+1>>0]=HEAP8[$8+1>>0]|0;HEAP8[$vararg_buffer+2>>0]=HEAP8[$8+2>>0]|0;HEAP8[$vararg_buffer+3>>0]=HEAP8[$8+3>>0]|0;HEAP8[$vararg_buffer+4>>0]=HEAP8[$8+4>>0]|0;HEAP8[$vararg_buffer+5>>0]=HEAP8[$8+5>>0]|0;HEAP8[$vararg_buffer+6>>0]=HEAP8[$8+6>>0]|0;HEAP8[$vararg_buffer+7>>0]=HEAP8[$8+7>>0]|0;
-   ;HEAP32[$$byval_copy>>2]=HEAP32[$1>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$1+4>>2]|0;
-   _mrb_funcall($9,$29,$$byval_copy,65927,1,$vararg_buffer);
-   STACKTOP = sp;return;
-  }
- }
- $31 = $3;
- $32 = $4;
- $33 = $3;
- $34 = $4;
- _mrb_sym2str($10,$33,$34);
- ;HEAP8[$vararg_buffer1>>0]=HEAP8[$10>>0]|0;HEAP8[$vararg_buffer1+1>>0]=HEAP8[$10+1>>0]|0;HEAP8[$vararg_buffer1+2>>0]=HEAP8[$10+2>>0]|0;HEAP8[$vararg_buffer1+3>>0]=HEAP8[$10+3>>0]|0;HEAP8[$vararg_buffer1+4>>0]=HEAP8[$10+4>>0]|0;HEAP8[$vararg_buffer1+5>>0]=HEAP8[$10+5>>0]|0;HEAP8[$vararg_buffer1+6>>0]=HEAP8[$10+6>>0]|0;HEAP8[$vararg_buffer1+7>>0]=HEAP8[$10+7>>0]|0;
- $vararg_ptr4 = ((($vararg_buffer1)) + 8|0);
- ;HEAP8[$vararg_ptr4>>0]=HEAP8[$1>>0]|0;HEAP8[$vararg_ptr4+1>>0]=HEAP8[$1+1>>0]|0;HEAP8[$vararg_ptr4+2>>0]=HEAP8[$1+2>>0]|0;HEAP8[$vararg_ptr4+3>>0]=HEAP8[$1+3>>0]|0;HEAP8[$vararg_ptr4+4>>0]=HEAP8[$1+4>>0]|0;HEAP8[$vararg_ptr4+5>>0]=HEAP8[$1+5>>0]|0;HEAP8[$vararg_ptr4+6>>0]=HEAP8[$1+6>>0]|0;HEAP8[$vararg_ptr4+7>>0]=HEAP8[$1+7>>0]|0;
- _mrb_name_error($31,$32,66245,$vararg_buffer1);
- // unreachable;
-}
-function _check_cv_name_sym($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $$byval_copy = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $$byval_copy = sp + 16|0;
- $4 = sp;
- $2 = $0;
- $3 = $1;
- $5 = $2;
- $6 = $2;
- $7 = $3;
- _mrb_sym2str($4,$6,$7);
- ;HEAP32[$$byval_copy>>2]=HEAP32[$4>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$4+4>>2]|0;
- _check_cv_name_str($5,$$byval_copy);
- STACKTOP = sp;return;
-}
-function _check_cv_name_str($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $$byval_copy = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;
- var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0;
- var $9 = 0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $$byval_copy = sp + 24|0;
- $vararg_buffer = sp;
- $2 = $0;
- $5 = HEAP32[$1>>2]|0;
- $6 = HEAP32[$5>>2]|0;
- $7 = $6 >>> 11;
- $8 = $7 & 8;
- $9 = ($8|0)!=(0);
- $10 = HEAP32[$1>>2]|0;
- $11 = ((($10)) + 12|0);
- if ($9) {
-  $14 = $11;
- } else {
-  $12 = ((($11)) + 8|0);
-  $13 = HEAP32[$12>>2]|0;
-  $14 = $13;
- }
- $3 = $14;
- $15 = HEAP32[$1>>2]|0;
- $16 = HEAP32[$15>>2]|0;
- $17 = $16 >>> 11;
- $18 = $17 & 8;
- $19 = ($18|0)!=(0);
- $20 = HEAP32[$1>>2]|0;
- if ($19) {
-  $21 = HEAP32[$20>>2]|0;
-  $22 = $21 >>> 11;
-  $23 = $22 & 496;
-  $24 = $23 >> 4;
-  $27 = $24;
- } else {
-  $25 = ((($20)) + 12|0);
-  $26 = HEAP32[$25>>2]|0;
-  $27 = $26;
- }
- $4 = $27;
- $28 = $4;
- $29 = ($28|0)<(3);
- if (!($29)) {
-  $30 = $3;
-  $31 = HEAP8[$30>>0]|0;
-  $32 = $31 << 24 >> 24;
-  $33 = ($32|0)==(64);
-  if ($33) {
-   $34 = $3;
-   $35 = ((($34)) + 1|0);
-   $36 = HEAP8[$35>>0]|0;
-   $37 = $36 << 24 >> 24;
-   $38 = ($37|0)==(64);
-   if ($38) {
-    STACKTOP = sp;return;
-   }
-  }
- }
- $39 = $2;
- $40 = $2;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$1>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$1+4>>2]|0;
- $41 = (_mrb_intern_str($40,$$byval_copy)|0);
- ;HEAP8[$vararg_buffer>>0]=HEAP8[$1>>0]|0;HEAP8[$vararg_buffer+1>>0]=HEAP8[$1+1>>0]|0;HEAP8[$vararg_buffer+2>>0]=HEAP8[$1+2>>0]|0;HEAP8[$vararg_buffer+3>>0]=HEAP8[$1+3>>0]|0;HEAP8[$vararg_buffer+4>>0]=HEAP8[$1+4>>0]|0;HEAP8[$vararg_buffer+5>>0]=HEAP8[$1+5>>0]|0;HEAP8[$vararg_buffer+6>>0]=HEAP8[$1+6>>0]|0;HEAP8[$vararg_buffer+7>>0]=HEAP8[$1+7>>0]|0;
- _mrb_name_error($39,$41,66336,$vararg_buffer);
- // unreachable;
-}
-function _mrb_true_value_815($0) {
- $0 = $0|0;
- var $1 = 0, $2 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $1 = sp;
- $2 = ((($1)) + 4|0);
- HEAP32[$2>>2] = 2;
- HEAP32[$1>>2] = 1;
- ;HEAP32[$0>>2]=HEAP32[$1>>2]|0;HEAP32[$0+4>>2]=HEAP32[$1+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_false_value_816($0) {
- $0 = $0|0;
- var $1 = 0, $2 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $1 = sp;
- $2 = ((($1)) + 4|0);
- HEAP32[$2>>2] = 0;
- HEAP32[$1>>2] = 1;
- ;HEAP32[$0>>2]=HEAP32[$1>>2]|0;HEAP32[$0+4>>2]=HEAP32[$1+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_codedump_all($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $4 = $2;
- $5 = $3;
- $6 = ((($5)) + 12|0);
- $7 = HEAP32[$6>>2]|0;
- _codedump_recur($4,$7);
- STACKTOP = sp;return;
-}
-function _codedump_recur($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0;
- var sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $5 = $2;
- $6 = $3;
- _codedump($5,$6);
- $4 = 0;
- while(1) {
-  $7 = $4;
-  $8 = $3;
-  $9 = ((($8)) + 52|0);
-  $10 = HEAP32[$9>>2]|0;
-  $11 = ($7>>>0)<($10>>>0);
-  if (!($11)) {
-   break;
-  }
-  $12 = $2;
-  $13 = $3;
-  $14 = ((($13)) + 20|0);
-  $15 = HEAP32[$14>>2]|0;
-  $16 = $4;
-  $17 = (($15) + ($16<<2)|0);
-  $18 = HEAP32[$17>>2]|0;
-  _codedump_recur($12,$18);
-  $19 = $4;
-  $20 = (($19) + 1)|0;
-  $4 = $20;
- }
- STACKTOP = sp;return;
-}
-function _codedump($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $$byval_copy = 0, $$byval_copy321 = 0, $$byval_copy322 = 0, $10 = 0, $100 = 0, $1000 = 0, $1001 = 0, $1002 = 0, $1003 = 0, $1004 = 0, $1005 = 0, $1006 = 0, $1007 = 0, $1008 = 0, $1009 = 0, $101 = 0, $1010 = 0, $1011 = 0, $1012 = 0, $102 = 0;
- var $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0;
- var $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0, $136 = 0, $137 = 0, $138 = 0, $139 = 0;
- var $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0, $152 = 0, $153 = 0, $154 = 0, $155 = 0, $156 = 0, $157 = 0;
- var $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0, $170 = 0, $171 = 0, $172 = 0, $173 = 0, $174 = 0, $175 = 0;
- var $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0, $188 = 0, $189 = 0, $19 = 0, $190 = 0, $191 = 0, $192 = 0, $193 = 0;
- var $194 = 0, $195 = 0, $196 = 0, $197 = 0, $198 = 0, $199 = 0, $2 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0, $204 = 0, $205 = 0, $206 = 0, $207 = 0, $208 = 0, $209 = 0, $21 = 0, $210 = 0;
- var $211 = 0, $212 = 0, $213 = 0, $214 = 0, $215 = 0, $216 = 0, $217 = 0, $218 = 0, $219 = 0, $22 = 0, $220 = 0, $221 = 0, $222 = 0, $223 = 0, $224 = 0, $225 = 0, $226 = 0, $227 = 0, $228 = 0, $229 = 0;
- var $23 = 0, $230 = 0, $231 = 0, $232 = 0, $233 = 0, $234 = 0, $235 = 0, $236 = 0, $237 = 0, $238 = 0, $239 = 0, $24 = 0, $240 = 0, $241 = 0, $242 = 0, $243 = 0, $244 = 0, $245 = 0, $246 = 0, $247 = 0;
- var $248 = 0, $249 = 0, $25 = 0, $250 = 0, $251 = 0, $252 = 0, $253 = 0, $254 = 0, $255 = 0, $256 = 0, $257 = 0, $258 = 0, $259 = 0, $26 = 0, $260 = 0, $261 = 0, $262 = 0, $263 = 0, $264 = 0, $265 = 0;
- var $266 = 0, $267 = 0, $268 = 0, $269 = 0, $27 = 0, $270 = 0, $271 = 0, $272 = 0, $273 = 0, $274 = 0, $275 = 0, $276 = 0, $277 = 0, $278 = 0, $279 = 0, $28 = 0, $280 = 0, $281 = 0, $282 = 0, $283 = 0;
- var $284 = 0, $285 = 0, $286 = 0, $287 = 0, $288 = 0, $289 = 0, $29 = 0, $290 = 0, $291 = 0, $292 = 0, $293 = 0, $294 = 0, $295 = 0, $296 = 0, $297 = 0, $298 = 0, $299 = 0, $3 = 0, $30 = 0, $300 = 0;
- var $301 = 0, $302 = 0, $303 = 0, $304 = 0, $305 = 0, $306 = 0, $307 = 0, $308 = 0, $309 = 0, $31 = 0, $310 = 0, $311 = 0, $312 = 0, $313 = 0, $314 = 0, $315 = 0, $316 = 0, $317 = 0, $318 = 0, $319 = 0;
- var $32 = 0, $320 = 0, $321 = 0, $322 = 0, $323 = 0, $324 = 0, $325 = 0, $326 = 0, $327 = 0, $328 = 0, $329 = 0, $33 = 0, $330 = 0, $331 = 0, $332 = 0, $333 = 0, $334 = 0, $335 = 0, $336 = 0, $337 = 0;
- var $338 = 0, $339 = 0, $34 = 0, $340 = 0, $341 = 0, $342 = 0, $343 = 0, $344 = 0, $345 = 0, $346 = 0, $347 = 0, $348 = 0, $349 = 0, $35 = 0, $350 = 0, $351 = 0, $352 = 0, $353 = 0, $354 = 0, $355 = 0;
- var $356 = 0, $357 = 0, $358 = 0, $359 = 0, $36 = 0, $360 = 0, $361 = 0, $362 = 0, $363 = 0, $364 = 0, $365 = 0, $366 = 0, $367 = 0, $368 = 0, $369 = 0, $37 = 0, $370 = 0, $371 = 0, $372 = 0, $373 = 0;
- var $374 = 0, $375 = 0, $376 = 0, $377 = 0, $378 = 0, $379 = 0, $38 = 0, $380 = 0, $381 = 0, $382 = 0, $383 = 0, $384 = 0, $385 = 0, $386 = 0, $387 = 0, $388 = 0, $389 = 0, $39 = 0, $390 = 0, $391 = 0;
- var $392 = 0, $393 = 0, $394 = 0, $395 = 0, $396 = 0, $397 = 0, $398 = 0, $399 = 0, $4 = 0, $40 = 0, $400 = 0, $401 = 0, $402 = 0, $403 = 0, $404 = 0, $405 = 0, $406 = 0, $407 = 0, $408 = 0, $409 = 0;
- var $41 = 0, $410 = 0, $411 = 0, $412 = 0, $413 = 0, $414 = 0, $415 = 0, $416 = 0, $417 = 0, $418 = 0, $419 = 0, $42 = 0, $420 = 0, $421 = 0, $422 = 0, $423 = 0, $424 = 0, $425 = 0, $426 = 0, $427 = 0;
- var $428 = 0, $429 = 0, $43 = 0, $430 = 0, $431 = 0, $432 = 0, $433 = 0, $434 = 0, $435 = 0, $436 = 0, $437 = 0, $438 = 0, $439 = 0, $44 = 0, $440 = 0, $441 = 0, $442 = 0, $443 = 0, $444 = 0, $445 = 0;
- var $446 = 0, $447 = 0, $448 = 0, $449 = 0, $45 = 0, $450 = 0, $451 = 0, $452 = 0, $453 = 0, $454 = 0, $455 = 0, $456 = 0, $457 = 0, $458 = 0, $459 = 0, $46 = 0, $460 = 0, $461 = 0, $462 = 0, $463 = 0;
- var $464 = 0, $465 = 0, $466 = 0, $467 = 0, $468 = 0, $469 = 0, $47 = 0, $470 = 0, $471 = 0, $472 = 0, $473 = 0, $474 = 0, $475 = 0, $476 = 0, $477 = 0, $478 = 0, $479 = 0, $48 = 0, $480 = 0, $481 = 0;
- var $482 = 0, $483 = 0, $484 = 0, $485 = 0, $486 = 0, $487 = 0, $488 = 0, $489 = 0, $49 = 0, $490 = 0, $491 = 0, $492 = 0, $493 = 0, $494 = 0, $495 = 0, $496 = 0, $497 = 0, $498 = 0, $499 = 0, $5 = 0;
- var $50 = 0, $500 = 0, $501 = 0, $502 = 0, $503 = 0, $504 = 0, $505 = 0, $506 = 0, $507 = 0, $508 = 0, $509 = 0, $51 = 0, $510 = 0, $511 = 0, $512 = 0, $513 = 0, $514 = 0, $515 = 0, $516 = 0, $517 = 0;
- var $518 = 0, $519 = 0, $52 = 0, $520 = 0, $521 = 0, $522 = 0, $523 = 0, $524 = 0, $525 = 0, $526 = 0, $527 = 0, $528 = 0, $529 = 0, $53 = 0, $530 = 0, $531 = 0, $532 = 0, $533 = 0, $534 = 0, $535 = 0;
- var $536 = 0, $537 = 0, $538 = 0, $539 = 0, $54 = 0, $540 = 0, $541 = 0, $542 = 0, $543 = 0, $544 = 0, $545 = 0, $546 = 0, $547 = 0, $548 = 0, $549 = 0, $55 = 0, $550 = 0, $551 = 0, $552 = 0, $553 = 0;
- var $554 = 0, $555 = 0, $556 = 0, $557 = 0, $558 = 0, $559 = 0, $56 = 0, $560 = 0, $561 = 0, $562 = 0, $563 = 0, $564 = 0, $565 = 0, $566 = 0, $567 = 0, $568 = 0, $569 = 0, $57 = 0, $570 = 0, $571 = 0;
- var $572 = 0, $573 = 0, $574 = 0, $575 = 0, $576 = 0, $577 = 0, $578 = 0, $579 = 0, $58 = 0, $580 = 0, $581 = 0, $582 = 0, $583 = 0, $584 = 0, $585 = 0, $586 = 0, $587 = 0, $588 = 0, $589 = 0, $59 = 0;
- var $590 = 0, $591 = 0, $592 = 0, $593 = 0, $594 = 0, $595 = 0, $596 = 0, $597 = 0, $598 = 0, $599 = 0, $6 = 0, $60 = 0, $600 = 0, $601 = 0, $602 = 0, $603 = 0, $604 = 0, $605 = 0, $606 = 0, $607 = 0;
- var $608 = 0, $609 = 0, $61 = 0, $610 = 0, $611 = 0, $612 = 0, $613 = 0, $614 = 0, $615 = 0, $616 = 0, $617 = 0, $618 = 0, $619 = 0, $62 = 0, $620 = 0, $621 = 0, $622 = 0, $623 = 0, $624 = 0, $625 = 0;
- var $626 = 0, $627 = 0, $628 = 0, $629 = 0, $63 = 0, $630 = 0, $631 = 0, $632 = 0, $633 = 0, $634 = 0, $635 = 0, $636 = 0, $637 = 0, $638 = 0, $639 = 0, $64 = 0, $640 = 0, $641 = 0, $642 = 0, $643 = 0;
- var $644 = 0, $645 = 0, $646 = 0, $647 = 0, $648 = 0, $649 = 0, $65 = 0, $650 = 0, $651 = 0, $652 = 0, $653 = 0, $654 = 0, $655 = 0, $656 = 0, $657 = 0, $658 = 0, $659 = 0, $66 = 0, $660 = 0, $661 = 0;
- var $662 = 0, $663 = 0, $664 = 0, $665 = 0, $666 = 0, $667 = 0, $668 = 0, $669 = 0, $67 = 0, $670 = 0, $671 = 0, $672 = 0, $673 = 0, $674 = 0, $675 = 0, $676 = 0, $677 = 0, $678 = 0, $679 = 0, $68 = 0;
- var $680 = 0, $681 = 0, $682 = 0, $683 = 0, $684 = 0, $685 = 0, $686 = 0, $687 = 0, $688 = 0, $689 = 0, $69 = 0, $690 = 0, $691 = 0, $692 = 0, $693 = 0, $694 = 0, $695 = 0, $696 = 0, $697 = 0, $698 = 0;
- var $699 = 0, $7 = 0, $70 = 0, $700 = 0, $701 = 0, $702 = 0, $703 = 0, $704 = 0, $705 = 0, $706 = 0, $707 = 0, $708 = 0, $709 = 0, $71 = 0, $710 = 0, $711 = 0, $712 = 0, $713 = 0, $714 = 0, $715 = 0;
- var $716 = 0, $717 = 0, $718 = 0, $719 = 0, $72 = 0, $720 = 0, $721 = 0, $722 = 0, $723 = 0, $724 = 0, $725 = 0, $726 = 0, $727 = 0, $728 = 0, $729 = 0, $73 = 0, $730 = 0, $731 = 0, $732 = 0, $733 = 0;
- var $734 = 0, $735 = 0, $736 = 0, $737 = 0, $738 = 0, $739 = 0, $74 = 0, $740 = 0, $741 = 0, $742 = 0, $743 = 0, $744 = 0, $745 = 0, $746 = 0, $747 = 0, $748 = 0, $749 = 0, $75 = 0, $750 = 0, $751 = 0;
- var $752 = 0, $753 = 0, $754 = 0, $755 = 0, $756 = 0, $757 = 0, $758 = 0, $759 = 0, $76 = 0, $760 = 0, $761 = 0, $762 = 0, $763 = 0, $764 = 0, $765 = 0, $766 = 0, $767 = 0, $768 = 0, $769 = 0, $77 = 0;
- var $770 = 0, $771 = 0, $772 = 0, $773 = 0, $774 = 0, $775 = 0, $776 = 0, $777 = 0, $778 = 0, $779 = 0, $78 = 0, $780 = 0, $781 = 0, $782 = 0, $783 = 0, $784 = 0, $785 = 0, $786 = 0, $787 = 0, $788 = 0;
- var $789 = 0, $79 = 0, $790 = 0, $791 = 0, $792 = 0, $793 = 0, $794 = 0, $795 = 0, $796 = 0, $797 = 0, $798 = 0, $799 = 0, $8 = 0, $80 = 0, $800 = 0, $801 = 0, $802 = 0, $803 = 0, $804 = 0, $805 = 0;
- var $806 = 0, $807 = 0, $808 = 0, $809 = 0, $81 = 0, $810 = 0, $811 = 0, $812 = 0, $813 = 0, $814 = 0, $815 = 0, $816 = 0, $817 = 0, $818 = 0, $819 = 0, $82 = 0, $820 = 0, $821 = 0, $822 = 0, $823 = 0;
- var $824 = 0, $825 = 0, $826 = 0, $827 = 0, $828 = 0, $829 = 0, $83 = 0, $830 = 0, $831 = 0, $832 = 0, $833 = 0, $834 = 0, $835 = 0, $836 = 0, $837 = 0, $838 = 0, $839 = 0, $84 = 0, $840 = 0, $841 = 0;
- var $842 = 0, $843 = 0, $844 = 0, $845 = 0, $846 = 0, $847 = 0, $848 = 0, $849 = 0, $85 = 0, $850 = 0, $851 = 0, $852 = 0, $853 = 0, $854 = 0, $855 = 0, $856 = 0, $857 = 0, $858 = 0, $859 = 0, $86 = 0;
- var $860 = 0, $861 = 0, $862 = 0, $863 = 0, $864 = 0, $865 = 0, $866 = 0, $867 = 0, $868 = 0, $869 = 0, $87 = 0, $870 = 0, $871 = 0, $872 = 0, $873 = 0, $874 = 0, $875 = 0, $876 = 0, $877 = 0, $878 = 0;
- var $879 = 0, $88 = 0, $880 = 0, $881 = 0, $882 = 0, $883 = 0, $884 = 0, $885 = 0, $886 = 0, $887 = 0, $888 = 0, $889 = 0, $89 = 0, $890 = 0, $891 = 0, $892 = 0, $893 = 0, $894 = 0, $895 = 0, $896 = 0;
- var $897 = 0, $898 = 0, $899 = 0, $9 = 0, $90 = 0, $900 = 0, $901 = 0, $902 = 0, $903 = 0, $904 = 0, $905 = 0, $906 = 0, $907 = 0, $908 = 0, $909 = 0, $91 = 0, $910 = 0, $911 = 0, $912 = 0, $913 = 0;
- var $914 = 0, $915 = 0, $916 = 0, $917 = 0, $918 = 0, $919 = 0, $92 = 0, $920 = 0, $921 = 0, $922 = 0, $923 = 0, $924 = 0, $925 = 0, $926 = 0, $927 = 0, $928 = 0, $929 = 0, $93 = 0, $930 = 0, $931 = 0;
- var $932 = 0, $933 = 0, $934 = 0, $935 = 0, $936 = 0, $937 = 0, $938 = 0, $939 = 0, $94 = 0, $940 = 0, $941 = 0, $942 = 0, $943 = 0, $944 = 0, $945 = 0, $946 = 0, $947 = 0, $948 = 0, $949 = 0, $95 = 0;
- var $950 = 0, $951 = 0, $952 = 0, $953 = 0, $954 = 0, $955 = 0, $956 = 0, $957 = 0, $958 = 0, $959 = 0, $96 = 0, $960 = 0, $961 = 0, $962 = 0, $963 = 0, $964 = 0, $965 = 0, $966 = 0, $967 = 0, $968 = 0;
- var $969 = 0, $97 = 0, $970 = 0, $971 = 0, $972 = 0, $973 = 0, $974 = 0, $975 = 0, $976 = 0, $977 = 0, $978 = 0, $979 = 0, $98 = 0, $980 = 0, $981 = 0, $982 = 0, $983 = 0, $984 = 0, $985 = 0, $986 = 0;
- var $987 = 0, $988 = 0, $989 = 0, $99 = 0, $990 = 0, $991 = 0, $992 = 0, $993 = 0, $994 = 0, $995 = 0, $996 = 0, $997 = 0, $998 = 0, $999 = 0, $vararg_buffer = 0, $vararg_buffer100 = 0, $vararg_buffer103 = 0, $vararg_buffer107 = 0, $vararg_buffer11 = 0, $vararg_buffer111 = 0;
- var $vararg_buffer116 = 0, $vararg_buffer121 = 0, $vararg_buffer126 = 0, $vararg_buffer130 = 0, $vararg_buffer137 = 0, $vararg_buffer14 = 0, $vararg_buffer146 = 0, $vararg_buffer149 = 0, $vararg_buffer151 = 0, $vararg_buffer153 = 0, $vararg_buffer155 = 0, $vararg_buffer162 = 0, $vararg_buffer167 = 0, $vararg_buffer17 = 0, $vararg_buffer172 = 0, $vararg_buffer176 = 0, $vararg_buffer181 = 0, $vararg_buffer186 = 0, $vararg_buffer19 = 0, $vararg_buffer191 = 0;
- var $vararg_buffer196 = 0, $vararg_buffer201 = 0, $vararg_buffer206 = 0, $vararg_buffer211 = 0, $vararg_buffer216 = 0, $vararg_buffer221 = 0, $vararg_buffer226 = 0, $vararg_buffer23 = 0, $vararg_buffer231 = 0, $vararg_buffer233 = 0, $vararg_buffer238 = 0, $vararg_buffer242 = 0, $vararg_buffer246 = 0, $vararg_buffer251 = 0, $vararg_buffer256 = 0, $vararg_buffer261 = 0, $vararg_buffer265 = 0, $vararg_buffer270 = 0, $vararg_buffer273 = 0, $vararg_buffer277 = 0;
- var $vararg_buffer28 = 0, $vararg_buffer281 = 0, $vararg_buffer285 = 0, $vararg_buffer289 = 0, $vararg_buffer292 = 0, $vararg_buffer295 = 0, $vararg_buffer298 = 0, $vararg_buffer301 = 0, $vararg_buffer304 = 0, $vararg_buffer307 = 0, $vararg_buffer310 = 0, $vararg_buffer313 = 0, $vararg_buffer319 = 0, $vararg_buffer32 = 0, $vararg_buffer36 = 0, $vararg_buffer39 = 0, $vararg_buffer42 = 0, $vararg_buffer45 = 0, $vararg_buffer48 = 0, $vararg_buffer52 = 0;
- var $vararg_buffer56 = 0, $vararg_buffer6 = 0, $vararg_buffer60 = 0, $vararg_buffer64 = 0, $vararg_buffer69 = 0, $vararg_buffer74 = 0, $vararg_buffer78 = 0, $vararg_buffer82 = 0, $vararg_buffer87 = 0, $vararg_buffer9 = 0, $vararg_buffer92 = 0, $vararg_buffer96 = 0, $vararg_ptr1 = 0, $vararg_ptr106 = 0, $vararg_ptr110 = 0, $vararg_ptr114 = 0, $vararg_ptr115 = 0, $vararg_ptr119 = 0, $vararg_ptr120 = 0, $vararg_ptr124 = 0;
- var $vararg_ptr125 = 0, $vararg_ptr129 = 0, $vararg_ptr133 = 0, $vararg_ptr134 = 0, $vararg_ptr135 = 0, $vararg_ptr136 = 0, $vararg_ptr140 = 0, $vararg_ptr141 = 0, $vararg_ptr142 = 0, $vararg_ptr143 = 0, $vararg_ptr144 = 0, $vararg_ptr145 = 0, $vararg_ptr158 = 0, $vararg_ptr159 = 0, $vararg_ptr160 = 0, $vararg_ptr161 = 0, $vararg_ptr165 = 0, $vararg_ptr166 = 0, $vararg_ptr170 = 0, $vararg_ptr171 = 0;
- var $vararg_ptr175 = 0, $vararg_ptr179 = 0, $vararg_ptr180 = 0, $vararg_ptr184 = 0, $vararg_ptr185 = 0, $vararg_ptr189 = 0, $vararg_ptr190 = 0, $vararg_ptr194 = 0, $vararg_ptr195 = 0, $vararg_ptr199 = 0, $vararg_ptr2 = 0, $vararg_ptr200 = 0, $vararg_ptr204 = 0, $vararg_ptr205 = 0, $vararg_ptr209 = 0, $vararg_ptr210 = 0, $vararg_ptr214 = 0, $vararg_ptr215 = 0, $vararg_ptr219 = 0, $vararg_ptr22 = 0;
- var $vararg_ptr220 = 0, $vararg_ptr224 = 0, $vararg_ptr225 = 0, $vararg_ptr229 = 0, $vararg_ptr230 = 0, $vararg_ptr236 = 0, $vararg_ptr237 = 0, $vararg_ptr241 = 0, $vararg_ptr245 = 0, $vararg_ptr249 = 0, $vararg_ptr250 = 0, $vararg_ptr254 = 0, $vararg_ptr255 = 0, $vararg_ptr259 = 0, $vararg_ptr26 = 0, $vararg_ptr260 = 0, $vararg_ptr264 = 0, $vararg_ptr268 = 0, $vararg_ptr269 = 0, $vararg_ptr27 = 0;
- var $vararg_ptr276 = 0, $vararg_ptr280 = 0, $vararg_ptr284 = 0, $vararg_ptr288 = 0, $vararg_ptr3 = 0, $vararg_ptr31 = 0, $vararg_ptr316 = 0, $vararg_ptr317 = 0, $vararg_ptr318 = 0, $vararg_ptr35 = 0, $vararg_ptr4 = 0, $vararg_ptr5 = 0, $vararg_ptr51 = 0, $vararg_ptr55 = 0, $vararg_ptr59 = 0, $vararg_ptr63 = 0, $vararg_ptr67 = 0, $vararg_ptr68 = 0, $vararg_ptr72 = 0, $vararg_ptr73 = 0;
- var $vararg_ptr77 = 0, $vararg_ptr81 = 0, $vararg_ptr85 = 0, $vararg_ptr86 = 0, $vararg_ptr90 = 0, $vararg_ptr91 = 0, $vararg_ptr95 = 0, $vararg_ptr99 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 1040|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(1040|0);
- $$byval_copy322 = sp + 1024|0;
- $$byval_copy321 = sp + 1016|0;
- $$byval_copy = sp + 1008|0;
- $vararg_buffer319 = sp + 904|0;
- $vararg_buffer313 = sp + 888|0;
- $vararg_buffer310 = sp + 880|0;
- $vararg_buffer307 = sp + 872|0;
- $vararg_buffer304 = sp + 864|0;
- $vararg_buffer301 = sp + 856|0;
- $vararg_buffer298 = sp + 848|0;
- $vararg_buffer295 = sp + 840|0;
- $vararg_buffer292 = sp + 832|0;
- $vararg_buffer289 = sp + 824|0;
- $vararg_buffer285 = sp + 816|0;
- $vararg_buffer281 = sp + 808|0;
- $vararg_buffer277 = sp + 800|0;
- $vararg_buffer273 = sp + 792|0;
- $vararg_buffer270 = sp + 784|0;
- $vararg_buffer265 = sp + 768|0;
- $vararg_buffer261 = sp + 760|0;
- $vararg_buffer256 = sp + 744|0;
- $vararg_buffer251 = sp + 728|0;
- $vararg_buffer246 = sp + 712|0;
- $vararg_buffer242 = sp + 704|0;
- $vararg_buffer238 = sp + 696|0;
- $vararg_buffer233 = sp + 680|0;
- $vararg_buffer231 = sp + 672|0;
- $vararg_buffer226 = sp + 656|0;
- $vararg_buffer221 = sp + 640|0;
- $vararg_buffer216 = sp + 624|0;
- $vararg_buffer211 = sp + 608|0;
- $vararg_buffer206 = sp + 592|0;
- $vararg_buffer201 = sp + 576|0;
- $vararg_buffer196 = sp + 560|0;
- $vararg_buffer191 = sp + 544|0;
- $vararg_buffer186 = sp + 528|0;
- $vararg_buffer181 = sp + 512|0;
- $vararg_buffer176 = sp + 496|0;
- $vararg_buffer172 = sp + 488|0;
- $vararg_buffer167 = sp + 472|0;
- $vararg_buffer162 = sp + 456|0;
- $vararg_buffer155 = sp + 432|0;
- $vararg_buffer153 = sp + 424|0;
- $vararg_buffer151 = sp + 416|0;
- $vararg_buffer149 = sp + 408|0;
- $vararg_buffer146 = sp + 400|0;
- $vararg_buffer137 = sp + 368|0;
- $vararg_buffer130 = sp + 344|0;
- $vararg_buffer126 = sp + 336|0;
- $vararg_buffer121 = sp + 320|0;
- $vararg_buffer116 = sp + 304|0;
- $vararg_buffer111 = sp + 288|0;
- $vararg_buffer107 = sp + 280|0;
- $vararg_buffer103 = sp + 272|0;
- $vararg_buffer100 = sp + 264|0;
- $vararg_buffer96 = sp + 256|0;
- $vararg_buffer92 = sp + 248|0;
- $vararg_buffer87 = sp + 232|0;
- $vararg_buffer82 = sp + 216|0;
- $vararg_buffer78 = sp + 208|0;
- $vararg_buffer74 = sp + 200|0;
- $vararg_buffer69 = sp + 184|0;
- $vararg_buffer64 = sp + 168|0;
- $vararg_buffer60 = sp + 160|0;
- $vararg_buffer56 = sp + 152|0;
- $vararg_buffer52 = sp + 144|0;
- $vararg_buffer48 = sp + 136|0;
- $vararg_buffer45 = sp + 128|0;
- $vararg_buffer42 = sp + 120|0;
- $vararg_buffer39 = sp + 112|0;
- $vararg_buffer36 = sp + 104|0;
- $vararg_buffer32 = sp + 96|0;
- $vararg_buffer28 = sp + 88|0;
- $vararg_buffer23 = sp + 72|0;
- $vararg_buffer19 = sp + 64|0;
- $vararg_buffer17 = sp + 56|0;
- $vararg_buffer14 = sp + 48|0;
- $vararg_buffer11 = sp + 40|0;
- $vararg_buffer9 = sp + 32|0;
- $vararg_buffer6 = sp + 24|0;
- $vararg_buffer = sp;
- $10 = sp + 968|0;
- $11 = sp + 960|0;
- $12 = sp + 952|0;
- $13 = sp + 944|0;
- $14 = sp + 936|0;
- $15 = sp + 928|0;
- $16 = sp + 920|0;
- $17 = sp + 912|0;
- $2 = $0;
- $3 = $1;
- $7 = 0;
- $18 = $3;
- $19 = ($18|0)!=(0|0);
- if (!($19)) {
-  STACKTOP = sp;return;
- }
- $20 = $3;
- $21 = $3;
- $22 = ((($21)) + 2|0);
- $23 = HEAP16[$22>>1]|0;
- $24 = $23&65535;
- $25 = $3;
- $26 = HEAP16[$25>>1]|0;
- $27 = $26&65535;
- $28 = $3;
- $29 = ((($28)) + 44|0);
- $30 = HEAP32[$29>>2]|0;
- $31 = $3;
- $32 = ((($31)) + 48|0);
- $33 = HEAP32[$32>>2]|0;
- $34 = $3;
- $35 = ((($34)) + 52|0);
- $36 = HEAP32[$35>>2]|0;
- HEAP32[$vararg_buffer>>2] = $20;
- $vararg_ptr1 = ((($vararg_buffer)) + 4|0);
- HEAP32[$vararg_ptr1>>2] = $24;
- $vararg_ptr2 = ((($vararg_buffer)) + 8|0);
- HEAP32[$vararg_ptr2>>2] = $27;
- $vararg_ptr3 = ((($vararg_buffer)) + 12|0);
- HEAP32[$vararg_ptr3>>2] = $30;
- $vararg_ptr4 = ((($vararg_buffer)) + 16|0);
- HEAP32[$vararg_ptr4>>2] = $33;
- $vararg_ptr5 = ((($vararg_buffer)) + 20|0);
- HEAP32[$vararg_ptr5>>2] = $36;
- (_printf(66391,$vararg_buffer)|0);
- $4 = 0;
- while(1) {
-  $37 = $4;
-  $38 = $3;
-  $39 = ((($38)) + 40|0);
-  $40 = HEAP32[$39>>2]|0;
-  $41 = ($37|0)<($40|0);
-  if (!($41)) {
-   break;
-  }
-  $42 = $2;
-  $43 = (_mrb_gc_arena_save($42)|0);
-  $5 = $43;
-  $44 = $3;
-  $45 = $4;
-  $46 = (_mrb_debug_get_filename($44,$45)|0);
-  $8 = $46;
-  $47 = $8;
-  $48 = ($47|0)!=(0|0);
-  if ($48) {
-   $49 = $7;
-   $50 = $8;
-   $51 = ($49|0)!=($50|0);
-   if ($51) {
-    $52 = $8;
-    HEAP32[$vararg_buffer6>>2] = $52;
-    (_printf(66445,$vararg_buffer6)|0);
-    $53 = $8;
-    $7 = $53;
-   }
-  }
-  $54 = $3;
-  $55 = $4;
-  $56 = (_mrb_debug_get_line($54,$55)|0);
-  $9 = $56;
-  $57 = $9;
-  $58 = ($57|0)<(0);
-  if ($58) {
-   (_printf(66455,$vararg_buffer9)|0);
-  } else {
-   $59 = $9;
-   HEAP32[$vararg_buffer11>>2] = $59;
-   (_printf(66462,$vararg_buffer11)|0);
-  }
-  $60 = $4;
-  HEAP32[$vararg_buffer14>>2] = $60;
-  (_printf(66467,$vararg_buffer14)|0);
-  $61 = $3;
-  $62 = ((($61)) + 8|0);
-  $63 = HEAP32[$62>>2]|0;
-  $64 = $4;
-  $65 = (($63) + ($64<<2)|0);
-  $66 = HEAP32[$65>>2]|0;
-  $6 = $66;
-  $67 = $6;
-  $68 = $67 & 127;
-  do {
-   switch ($68|0) {
-   case 0:  {
-    (_printf(66473,$vararg_buffer17)|0);
-    break;
-   }
-   case 1:  {
-    $69 = $6;
-    $70 = $69 >>> 23;
-    $71 = $70 & 511;
-    $72 = $6;
-    $73 = $72 >>> 14;
-    $74 = $73 & 511;
-    HEAP32[$vararg_buffer19>>2] = $71;
-    $vararg_ptr22 = ((($vararg_buffer19)) + 4|0);
-    HEAP32[$vararg_ptr22>>2] = $74;
-    (_printf(66481,$vararg_buffer19)|0);
-    $75 = $2;
-    $76 = $3;
-    $77 = $6;
-    _print_lv($75,$76,$77,3);
-    break;
-   }
-   case 2:  {
-    $78 = $3;
-    $79 = ((($78)) + 12|0);
-    $80 = HEAP32[$79>>2]|0;
-    $81 = $6;
-    $82 = $81 >>> 7;
-    $83 = $82 & 65535;
-    $84 = (($80) + ($83<<3)|0);
-    ;HEAP32[$10>>2]=HEAP32[$84>>2]|0;HEAP32[$10+4>>2]=HEAP32[$84+4>>2]|0;
-    $85 = $2;
-    ;HEAP32[$$byval_copy>>2]=HEAP32[$10>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$10+4>>2]|0;
-    _mrb_inspect($11,$85,$$byval_copy);
-    $86 = $6;
-    $87 = $86 >>> 23;
-    $88 = $87 & 511;
-    $89 = $6;
-    $90 = $89 >>> 7;
-    $91 = $90 & 65535;
-    $92 = HEAP32[$11>>2]|0;
-    $93 = HEAP32[$92>>2]|0;
-    $94 = $93 >>> 11;
-    $95 = $94 & 8;
-    $96 = ($95|0)!=(0);
-    $97 = HEAP32[$11>>2]|0;
-    $98 = ((($97)) + 12|0);
-    if ($96) {
-     $101 = $98;
-    } else {
-     $99 = ((($98)) + 8|0);
-     $100 = HEAP32[$99>>2]|0;
-     $101 = $100;
-    }
-    HEAP32[$vararg_buffer23>>2] = $88;
-    $vararg_ptr26 = ((($vararg_buffer23)) + 4|0);
-    HEAP32[$vararg_ptr26>>2] = $91;
-    $vararg_ptr27 = ((($vararg_buffer23)) + 8|0);
-    HEAP32[$vararg_ptr27>>2] = $101;
-    (_printf(66498,$vararg_buffer23)|0);
-    $102 = $2;
-    $103 = $3;
-    $104 = $6;
-    _print_lv($102,$103,$104,1);
-    break;
-   }
-   case 3:  {
-    $105 = $6;
-    $106 = $105 >>> 23;
-    $107 = $106 & 511;
-    $108 = $6;
-    $109 = $108 >>> 7;
-    $110 = $109 & 65535;
-    $111 = (($110) - 32767)|0;
-    HEAP32[$vararg_buffer28>>2] = $107;
-    $vararg_ptr31 = ((($vararg_buffer28)) + 4|0);
-    HEAP32[$vararg_ptr31>>2] = $111;
-    (_printf(66522,$vararg_buffer28)|0);
-    $112 = $2;
-    $113 = $3;
-    $114 = $6;
-    _print_lv($112,$113,$114,1);
-    break;
-   }
-   case 4:  {
-    $115 = $6;
-    $116 = $115 >>> 23;
-    $117 = $116 & 511;
-    $118 = $2;
-    $119 = $3;
-    $120 = ((($119)) + 16|0);
-    $121 = HEAP32[$120>>2]|0;
-    $122 = $6;
-    $123 = $122 >>> 7;
-    $124 = $123 & 65535;
-    $125 = (($121) + ($124<<2)|0);
-    $126 = HEAP32[$125>>2]|0;
-    $127 = (_mrb_sym2name($118,$126)|0);
-    HEAP32[$vararg_buffer32>>2] = $117;
-    $vararg_ptr35 = ((($vararg_buffer32)) + 4|0);
-    HEAP32[$vararg_ptr35>>2] = $127;
-    (_printf(66539,$vararg_buffer32)|0);
-    $128 = $2;
-    $129 = $3;
-    $130 = $6;
-    _print_lv($128,$129,$130,1);
-    break;
-   }
-   case 5:  {
-    $131 = $6;
-    $132 = $131 >>> 23;
-    $133 = $132 & 511;
-    HEAP32[$vararg_buffer36>>2] = $133;
-    (_printf(66558,$vararg_buffer36)|0);
-    $134 = $2;
-    $135 = $3;
-    $136 = $6;
-    _print_lv($134,$135,$136,1);
-    break;
-   }
-   case 6:  {
-    $137 = $6;
-    $138 = $137 >>> 23;
-    $139 = $138 & 511;
-    HEAP32[$vararg_buffer39>>2] = $139;
-    (_printf(66575,$vararg_buffer39)|0);
-    $140 = $2;
-    $141 = $3;
-    $142 = $6;
-    _print_lv($140,$141,$142,1);
-    break;
-   }
-   case 7:  {
-    $143 = $6;
-    $144 = $143 >>> 23;
-    $145 = $144 & 511;
-    HEAP32[$vararg_buffer42>>2] = $145;
-    (_printf(66593,$vararg_buffer42)|0);
-    $146 = $2;
-    $147 = $3;
-    $148 = $6;
-    _print_lv($146,$147,$148,1);
-    break;
-   }
-   case 8:  {
-    $149 = $6;
-    $150 = $149 >>> 23;
-    $151 = $150 & 511;
-    HEAP32[$vararg_buffer45>>2] = $151;
-    (_printf(66608,$vararg_buffer45)|0);
-    $152 = $2;
-    $153 = $3;
-    $154 = $6;
-    _print_lv($152,$153,$154,1);
-    break;
-   }
-   case 9:  {
-    $155 = $6;
-    $156 = $155 >>> 23;
-    $157 = $156 & 511;
-    $158 = $2;
-    $159 = $3;
-    $160 = ((($159)) + 16|0);
-    $161 = HEAP32[$160>>2]|0;
-    $162 = $6;
-    $163 = $162 >>> 7;
-    $164 = $163 & 65535;
-    $165 = (($161) + ($164<<2)|0);
-    $166 = HEAP32[$165>>2]|0;
-    $167 = (_mrb_sym2name($158,$166)|0);
-    HEAP32[$vararg_buffer48>>2] = $157;
-    $vararg_ptr51 = ((($vararg_buffer48)) + 4|0);
-    HEAP32[$vararg_ptr51>>2] = $167;
-    (_printf(66623,$vararg_buffer48)|0);
-    $168 = $2;
-    $169 = $3;
-    $170 = $6;
-    _print_lv($168,$169,$170,1);
-    break;
-   }
-   case 10:  {
-    $171 = $2;
-    $172 = $3;
-    $173 = ((($172)) + 16|0);
-    $174 = HEAP32[$173>>2]|0;
-    $175 = $6;
-    $176 = $175 >>> 7;
-    $177 = $176 & 65535;
-    $178 = (($174) + ($177<<2)|0);
-    $179 = HEAP32[$178>>2]|0;
-    $180 = (_mrb_sym2name($171,$179)|0);
-    $181 = $6;
-    $182 = $181 >>> 23;
-    $183 = $182 & 511;
-    HEAP32[$vararg_buffer52>>2] = $180;
-    $vararg_ptr55 = ((($vararg_buffer52)) + 4|0);
-    HEAP32[$vararg_ptr55>>2] = $183;
-    (_printf(66644,$vararg_buffer52)|0);
-    $184 = $2;
-    $185 = $3;
-    $186 = $6;
-    _print_lv($184,$185,$186,1);
-    break;
-   }
-   case 17:  {
-    $187 = $6;
-    $188 = $187 >>> 23;
-    $189 = $188 & 511;
-    $190 = $2;
-    $191 = $3;
-    $192 = ((($191)) + 16|0);
-    $193 = HEAP32[$192>>2]|0;
-    $194 = $6;
-    $195 = $194 >>> 7;
-    $196 = $195 & 65535;
-    $197 = (($193) + ($196<<2)|0);
-    $198 = HEAP32[$197>>2]|0;
-    $199 = (_mrb_sym2name($190,$198)|0);
-    HEAP32[$vararg_buffer56>>2] = $189;
-    $vararg_ptr59 = ((($vararg_buffer56)) + 4|0);
-    HEAP32[$vararg_ptr59>>2] = $199;
-    (_printf(66666,$vararg_buffer56)|0);
-    $200 = $2;
-    $201 = $3;
-    $202 = $6;
-    _print_lv($200,$201,$202,1);
-    break;
-   }
-   case 18:  {
-    $203 = $2;
-    $204 = $3;
-    $205 = ((($204)) + 16|0);
-    $206 = HEAP32[$205>>2]|0;
-    $207 = $6;
-    $208 = $207 >>> 7;
-    $209 = $208 & 65535;
-    $210 = (($206) + ($209<<2)|0);
-    $211 = HEAP32[$210>>2]|0;
-    $212 = (_mrb_sym2name($203,$211)|0);
-    $213 = $6;
-    $214 = $213 >>> 23;
-    $215 = $214 & 511;
-    HEAP32[$vararg_buffer60>>2] = $212;
-    $vararg_ptr63 = ((($vararg_buffer60)) + 4|0);
-    HEAP32[$vararg_ptr63>>2] = $215;
-    (_printf(66686,$vararg_buffer60)|0);
-    $216 = $2;
-    $217 = $3;
-    $218 = $6;
-    _print_lv($216,$217,$218,1);
-    break;
-   }
-   case 19:  {
-    $219 = $6;
-    $220 = $219 >>> 23;
-    $221 = $220 & 511;
-    $222 = $6;
-    $223 = $222 >>> 23;
-    $224 = $223 & 511;
-    $225 = $2;
-    $226 = $3;
-    $227 = ((($226)) + 16|0);
-    $228 = HEAP32[$227>>2]|0;
-    $229 = $6;
-    $230 = $229 >>> 7;
-    $231 = $230 & 65535;
-    $232 = (($228) + ($231<<2)|0);
-    $233 = HEAP32[$232>>2]|0;
-    $234 = (_mrb_sym2name($225,$233)|0);
-    HEAP32[$vararg_buffer64>>2] = $221;
-    $vararg_ptr67 = ((($vararg_buffer64)) + 4|0);
-    HEAP32[$vararg_ptr67>>2] = $224;
-    $vararg_ptr68 = ((($vararg_buffer64)) + 8|0);
-    HEAP32[$vararg_ptr68>>2] = $234;
-    (_printf(66707,$vararg_buffer64)|0);
-    $235 = $2;
-    $236 = $3;
-    $237 = $6;
-    _print_lv($235,$236,$237,3);
-    break;
-   }
-   case 20:  {
-    $238 = $6;
-    $239 = $238 >>> 23;
-    $240 = $239 & 511;
-    $241 = (($240) + 1)|0;
-    $242 = $2;
-    $243 = $3;
-    $244 = ((($243)) + 16|0);
-    $245 = HEAP32[$244>>2]|0;
-    $246 = $6;
-    $247 = $246 >>> 7;
-    $248 = $247 & 65535;
-    $249 = (($245) + ($248<<2)|0);
-    $250 = HEAP32[$249>>2]|0;
-    $251 = (_mrb_sym2name($242,$250)|0);
-    $252 = $6;
-    $253 = $252 >>> 23;
-    $254 = $253 & 511;
-    HEAP32[$vararg_buffer69>>2] = $241;
-    $vararg_ptr72 = ((($vararg_buffer69)) + 4|0);
-    HEAP32[$vararg_ptr72>>2] = $251;
-    $vararg_ptr73 = ((($vararg_buffer69)) + 8|0);
-    HEAP32[$vararg_ptr73>>2] = $254;
-    (_printf(66731,$vararg_buffer69)|0);
-    $255 = $2;
-    $256 = $3;
-    $257 = $6;
-    _print_lv($255,$256,$257,1);
-    break;
-   }
-   case 13:  {
-    $258 = $6;
-    $259 = $258 >>> 23;
-    $260 = $259 & 511;
-    $261 = $2;
-    $262 = $3;
-    $263 = ((($262)) + 16|0);
-    $264 = HEAP32[$263>>2]|0;
-    $265 = $6;
-    $266 = $265 >>> 7;
-    $267 = $266 & 65535;
-    $268 = (($264) + ($267<<2)|0);
-    $269 = HEAP32[$268>>2]|0;
-    $270 = (_mrb_sym2name($261,$269)|0);
-    HEAP32[$vararg_buffer74>>2] = $260;
-    $vararg_ptr77 = ((($vararg_buffer74)) + 4|0);
-    HEAP32[$vararg_ptr77>>2] = $270;
-    (_printf(66755,$vararg_buffer74)|0);
-    $271 = $2;
-    $272 = $3;
-    $273 = $6;
-    _print_lv($271,$272,$273,1);
-    break;
-   }
-   case 14:  {
-    $274 = $2;
-    $275 = $3;
-    $276 = ((($275)) + 16|0);
-    $277 = HEAP32[$276>>2]|0;
-    $278 = $6;
-    $279 = $278 >>> 7;
-    $280 = $279 & 65535;
-    $281 = (($277) + ($280<<2)|0);
-    $282 = HEAP32[$281>>2]|0;
-    $283 = (_mrb_sym2name($274,$282)|0);
-    $284 = $6;
-    $285 = $284 >>> 23;
-    $286 = $285 & 511;
-    HEAP32[$vararg_buffer78>>2] = $283;
-    $vararg_ptr81 = ((($vararg_buffer78)) + 4|0);
-    HEAP32[$vararg_ptr81>>2] = $286;
-    (_printf(66771,$vararg_buffer78)|0);
-    $287 = $2;
-    $288 = $3;
-    $289 = $6;
-    _print_lv($287,$288,$289,1);
-    break;
-   }
-   case 21:  {
-    $290 = $6;
-    $291 = $290 >>> 23;
-    $292 = $291 & 511;
-    $293 = $6;
-    $294 = $293 >>> 14;
-    $295 = $294 & 511;
-    $296 = $6;
-    $297 = $296 >>> 7;
-    $298 = $297 & 127;
-    HEAP32[$vararg_buffer82>>2] = $292;
-    $vararg_ptr85 = ((($vararg_buffer82)) + 4|0);
-    HEAP32[$vararg_ptr85>>2] = $295;
-    $vararg_ptr86 = ((($vararg_buffer82)) + 8|0);
-    HEAP32[$vararg_ptr86>>2] = $298;
-    (_printf(66787,$vararg_buffer82)|0);
-    $299 = $2;
-    $300 = $3;
-    $301 = $6;
-    _print_lv($299,$300,$301,1);
-    break;
-   }
-   case 22:  {
-    $302 = $6;
-    $303 = $302 >>> 23;
-    $304 = $303 & 511;
-    $305 = $6;
-    $306 = $305 >>> 14;
-    $307 = $306 & 511;
-    $308 = $6;
-    $309 = $308 >>> 7;
-    $310 = $309 & 127;
-    HEAP32[$vararg_buffer87>>2] = $304;
-    $vararg_ptr90 = ((($vararg_buffer87)) + 4|0);
-    HEAP32[$vararg_ptr90>>2] = $307;
-    $vararg_ptr91 = ((($vararg_buffer87)) + 8|0);
-    HEAP32[$vararg_ptr91>>2] = $310;
-    (_printf(66809,$vararg_buffer87)|0);
-    $311 = $2;
-    $312 = $3;
-    $313 = $6;
-    _print_lv($311,$312,$313,1);
-    break;
-   }
-   case 15:  {
-    $314 = $6;
-    $315 = $314 >>> 23;
-    $316 = $315 & 511;
-    $317 = $2;
-    $318 = $3;
-    $319 = ((($318)) + 16|0);
-    $320 = HEAP32[$319>>2]|0;
-    $321 = $6;
-    $322 = $321 >>> 7;
-    $323 = $322 & 65535;
-    $324 = (($320) + ($323<<2)|0);
-    $325 = HEAP32[$324>>2]|0;
-    $326 = (_mrb_sym2name($317,$325)|0);
-    HEAP32[$vararg_buffer92>>2] = $316;
-    $vararg_ptr95 = ((($vararg_buffer92)) + 4|0);
-    HEAP32[$vararg_ptr95>>2] = $326;
-    (_printf(66831,$vararg_buffer92)|0);
-    $327 = $2;
-    $328 = $3;
-    $329 = $6;
-    _print_lv($327,$328,$329,1);
-    break;
-   }
-   case 16:  {
-    $330 = $2;
-    $331 = $3;
-    $332 = ((($331)) + 16|0);
-    $333 = HEAP32[$332>>2]|0;
-    $334 = $6;
-    $335 = $334 >>> 7;
-    $336 = $335 & 65535;
-    $337 = (($333) + ($336<<2)|0);
-    $338 = HEAP32[$337>>2]|0;
-    $339 = (_mrb_sym2name($330,$338)|0);
-    $340 = $6;
-    $341 = $340 >>> 23;
-    $342 = $341 & 511;
-    HEAP32[$vararg_buffer96>>2] = $339;
-    $vararg_ptr99 = ((($vararg_buffer96)) + 4|0);
-    HEAP32[$vararg_ptr99>>2] = $342;
-    (_printf(66847,$vararg_buffer96)|0);
-    $343 = $2;
-    $344 = $3;
-    $345 = $6;
-    _print_lv($343,$344,$345,1);
-    break;
-   }
-   case 23:  {
-    $346 = $4;
-    $347 = $6;
-    $348 = $347 >>> 7;
-    $349 = $348 & 65535;
-    $350 = (($349) - 32767)|0;
-    $351 = (($346) + ($350))|0;
-    HEAP32[$vararg_buffer100>>2] = $351;
-    (_printf(66863,$vararg_buffer100)|0);
-    break;
-   }
-   case 24:  {
-    $352 = $6;
-    $353 = $352 >>> 23;
-    $354 = $353 & 511;
-    $355 = $4;
-    $356 = $6;
-    $357 = $356 >>> 7;
-    $358 = $357 & 65535;
-    $359 = (($358) - 32767)|0;
-    $360 = (($355) + ($359))|0;
-    HEAP32[$vararg_buffer103>>2] = $354;
-    $vararg_ptr106 = ((($vararg_buffer103)) + 4|0);
-    HEAP32[$vararg_ptr106>>2] = $360;
-    (_printf(66876,$vararg_buffer103)|0);
-    break;
-   }
-   case 25:  {
-    $361 = $6;
-    $362 = $361 >>> 23;
-    $363 = $362 & 511;
-    $364 = $4;
-    $365 = $6;
-    $366 = $365 >>> 7;
-    $367 = $366 & 65535;
-    $368 = (($367) - 32767)|0;
-    $369 = (($364) + ($368))|0;
-    HEAP32[$vararg_buffer107>>2] = $363;
-    $vararg_ptr110 = ((($vararg_buffer107)) + 4|0);
-    HEAP32[$vararg_ptr110>>2] = $369;
-    (_printf(66895,$vararg_buffer107)|0);
-    break;
-   }
-   case 32:  {
-    $370 = $6;
-    $371 = $370 >>> 23;
-    $372 = $371 & 511;
-    $373 = $2;
-    $374 = $3;
-    $375 = ((($374)) + 16|0);
-    $376 = HEAP32[$375>>2]|0;
-    $377 = $6;
-    $378 = $377 >>> 14;
-    $379 = $378 & 511;
-    $380 = (($376) + ($379<<2)|0);
-    $381 = HEAP32[$380>>2]|0;
-    $382 = (_mrb_sym2name($373,$381)|0);
-    $383 = $6;
-    $384 = $383 >>> 7;
-    $385 = $384 & 127;
-    HEAP32[$vararg_buffer111>>2] = $372;
-    $vararg_ptr114 = ((($vararg_buffer111)) + 4|0);
-    HEAP32[$vararg_ptr114>>2] = $382;
-    $vararg_ptr115 = ((($vararg_buffer111)) + 8|0);
-    HEAP32[$vararg_ptr115>>2] = $385;
-    (_printf(66915,$vararg_buffer111)|0);
-    break;
-   }
-   case 33:  {
-    $386 = $6;
-    $387 = $386 >>> 23;
-    $388 = $387 & 511;
-    $389 = $2;
-    $390 = $3;
-    $391 = ((($390)) + 16|0);
-    $392 = HEAP32[$391>>2]|0;
-    $393 = $6;
-    $394 = $393 >>> 14;
-    $395 = $394 & 511;
-    $396 = (($392) + ($395<<2)|0);
-    $397 = HEAP32[$396>>2]|0;
-    $398 = (_mrb_sym2name($389,$397)|0);
-    $399 = $6;
-    $400 = $399 >>> 7;
-    $401 = $400 & 127;
-    HEAP32[$vararg_buffer116>>2] = $388;
-    $vararg_ptr119 = ((($vararg_buffer116)) + 4|0);
-    HEAP32[$vararg_ptr119>>2] = $398;
-    $vararg_ptr120 = ((($vararg_buffer116)) + 8|0);
-    HEAP32[$vararg_ptr120>>2] = $401;
-    (_printf(66935,$vararg_buffer116)|0);
-    break;
-   }
-   case 42:  {
-    $402 = $6;
-    $403 = $402 >>> 23;
-    $404 = $403 & 511;
-    $405 = $2;
-    $406 = $3;
-    $407 = ((($406)) + 16|0);
-    $408 = HEAP32[$407>>2]|0;
-    $409 = $6;
-    $410 = $409 >>> 14;
-    $411 = $410 & 511;
-    $412 = (($408) + ($411<<2)|0);
-    $413 = HEAP32[$412>>2]|0;
-    $414 = (_mrb_sym2name($405,$413)|0);
-    $415 = $6;
-    $416 = $415 >>> 7;
-    $417 = $416 & 127;
-    HEAP32[$vararg_buffer121>>2] = $404;
-    $vararg_ptr124 = ((($vararg_buffer121)) + 4|0);
-    HEAP32[$vararg_ptr124>>2] = $414;
-    $vararg_ptr125 = ((($vararg_buffer121)) + 8|0);
-    HEAP32[$vararg_ptr125>>2] = $417;
-    (_printf(66956,$vararg_buffer121)|0);
-    break;
-   }
-   case 36:  {
-    $418 = $6;
-    $419 = $418 >>> 23;
-    $420 = $419 & 511;
-    $421 = $6;
-    $422 = $421 >>> 7;
-    $423 = $422 & 127;
-    HEAP32[$vararg_buffer126>>2] = $420;
-    $vararg_ptr129 = ((($vararg_buffer126)) + 4|0);
-    HEAP32[$vararg_ptr129>>2] = $423;
-    (_printf(66980,$vararg_buffer126)|0);
-    break;
-   }
-   case 37:  {
-    $424 = $6;
-    $425 = $424 >>> 23;
-    $426 = $425 & 511;
-    $427 = $6;
-    $428 = $427 >>> 7;
-    $429 = $428 & 65535;
-    $430 = $429 >> 10;
-    $431 = $430 & 63;
-    $432 = $6;
-    $433 = $432 >>> 7;
-    $434 = $433 & 65535;
-    $435 = $434 >> 9;
-    $436 = $435 & 1;
-    $437 = $6;
-    $438 = $437 >>> 7;
-    $439 = $438 & 65535;
-    $440 = $439 >> 4;
-    $441 = $440 & 31;
-    $442 = $6;
-    $443 = $442 >>> 7;
-    $444 = $443 & 65535;
-    $445 = $444 >> 0;
-    $446 = $445 & 15;
-    HEAP32[$vararg_buffer130>>2] = $426;
-    $vararg_ptr133 = ((($vararg_buffer130)) + 4|0);
-    HEAP32[$vararg_ptr133>>2] = $431;
-    $vararg_ptr134 = ((($vararg_buffer130)) + 8|0);
-    HEAP32[$vararg_ptr134>>2] = $436;
-    $vararg_ptr135 = ((($vararg_buffer130)) + 12|0);
-    HEAP32[$vararg_ptr135>>2] = $441;
-    $vararg_ptr136 = ((($vararg_buffer130)) + 16|0);
-    HEAP32[$vararg_ptr136>>2] = $446;
-    (_printf(66997,$vararg_buffer130)|0);
-    $447 = $2;
-    $448 = $3;
-    $449 = $6;
-    _print_lv($447,$448,$449,1);
-    break;
-   }
-   case 38:  {
-    $450 = $6;
-    $451 = $450 >>> 7;
-    $452 = $451 & 33554431;
-    $453 = $452 >> 18;
-    $454 = $453 & 31;
-    $455 = $6;
-    $456 = $455 >>> 7;
-    $457 = $456 & 33554431;
-    $458 = $457 >> 13;
-    $459 = $458 & 31;
-    $460 = $6;
-    $461 = $460 >>> 7;
-    $462 = $461 & 33554431;
-    $463 = $462 >> 12;
-    $464 = $463 & 1;
-    $465 = $6;
-    $466 = $465 >>> 7;
-    $467 = $466 & 33554431;
-    $468 = $467 >> 7;
-    $469 = $468 & 31;
-    $470 = $6;
-    $471 = $470 >>> 7;
-    $472 = $471 & 33554431;
-    $473 = $472 >> 2;
-    $474 = $473 & 31;
-    $475 = $6;
-    $476 = $475 >>> 7;
-    $477 = $476 & 33554431;
-    $478 = $477 >> 1;
-    $479 = $478 & 1;
-    $480 = $6;
-    $481 = $480 >>> 7;
-    $482 = $481 & 33554431;
-    $483 = $482 & 1;
-    HEAP32[$vararg_buffer137>>2] = $454;
-    $vararg_ptr140 = ((($vararg_buffer137)) + 4|0);
-    HEAP32[$vararg_ptr140>>2] = $459;
-    $vararg_ptr141 = ((($vararg_buffer137)) + 8|0);
-    HEAP32[$vararg_ptr141>>2] = $464;
-    $vararg_ptr142 = ((($vararg_buffer137)) + 12|0);
-    HEAP32[$vararg_ptr142>>2] = $469;
-    $vararg_ptr143 = ((($vararg_buffer137)) + 16|0);
-    HEAP32[$vararg_ptr143>>2] = $474;
-    $vararg_ptr144 = ((($vararg_buffer137)) + 20|0);
-    HEAP32[$vararg_ptr144>>2] = $479;
-    $vararg_ptr145 = ((($vararg_buffer137)) + 24|0);
-    HEAP32[$vararg_ptr145>>2] = $483;
-    (_printf(67023,$vararg_buffer137)|0);
-    break;
-   }
-   case 41:  {
-    $484 = $6;
-    $485 = $484 >>> 23;
-    $486 = $485 & 511;
-    HEAP32[$vararg_buffer146>>2] = $486;
-    (_printf(67054,$vararg_buffer146)|0);
-    $487 = $6;
-    $488 = $487 >>> 14;
-    $489 = $488 & 511;
-    switch ($489|0) {
-    case 2: case 0:  {
-     (_printf(67068,$vararg_buffer149)|0);
-     break;
-    }
-    case 1:  {
-     (_printf(67077,$vararg_buffer151)|0);
-     break;
-    }
-    default: {
-     (_printf(67085,$vararg_buffer153)|0);
-    }
-    }
-    $490 = $2;
-    $491 = $3;
-    $492 = $6;
-    _print_lv($490,$491,$492,1);
-    break;
-   }
-   case 43:  {
-    $493 = $6;
-    $494 = $493 >>> 23;
-    $495 = $494 & 511;
-    $496 = $6;
-    $497 = $496 >>> 7;
-    $498 = $497 & 65535;
-    $499 = $498 >> 10;
-    $500 = $499 & 63;
-    $501 = $6;
-    $502 = $501 >>> 7;
-    $503 = $502 & 65535;
-    $504 = $503 >> 9;
-    $505 = $504 & 1;
-    $506 = $6;
-    $507 = $506 >>> 7;
-    $508 = $507 & 65535;
-    $509 = $508 >> 4;
-    $510 = $509 & 31;
-    $511 = $6;
-    $512 = $511 >>> 7;
-    $513 = $512 & 65535;
-    $514 = $513 >> 0;
-    $515 = $514 & 15;
-    HEAP32[$vararg_buffer155>>2] = $495;
-    $vararg_ptr158 = ((($vararg_buffer155)) + 4|0);
-    HEAP32[$vararg_ptr158>>2] = $500;
-    $vararg_ptr159 = ((($vararg_buffer155)) + 8|0);
-    HEAP32[$vararg_ptr159>>2] = $505;
-    $vararg_ptr160 = ((($vararg_buffer155)) + 12|0);
-    HEAP32[$vararg_ptr160>>2] = $510;
-    $vararg_ptr161 = ((($vararg_buffer155)) + 16|0);
-    HEAP32[$vararg_ptr161>>2] = $515;
-    (_printf(67094,$vararg_buffer155)|0);
-    $516 = $2;
-    $517 = $3;
-    $518 = $6;
-    _print_lv($516,$517,$518,1);
-    break;
-   }
-   case 64:  {
-    $519 = $6;
-    $520 = $519 >>> 23;
-    $521 = $520 & 511;
-    $522 = $6;
-    $523 = $522 >>> 9;
-    $524 = $523 & 16383;
-    $525 = (($524) + 1)|0;
-    $526 = $6;
-    $527 = $526 >>> 7;
-    $528 = $527 & 3;
-    HEAP32[$vararg_buffer162>>2] = $521;
-    $vararg_ptr165 = ((($vararg_buffer162)) + 4|0);
-    HEAP32[$vararg_ptr165>>2] = $525;
-    $vararg_ptr166 = ((($vararg_buffer162)) + 8|0);
-    HEAP32[$vararg_ptr166>>2] = $528;
-    (_printf(67121,$vararg_buffer162)|0);
-    $529 = $2;
-    $530 = $3;
-    $531 = $6;
-    _print_lv($529,$530,$531,1);
-    break;
-   }
-   case 65:  {
-    $532 = $6;
-    $533 = $532 >>> 23;
-    $534 = $533 & 511;
-    $535 = $6;
-    $536 = $535 >>> 14;
-    $537 = $536 & 511;
-    $538 = $6;
-    $539 = $538 >>> 7;
-    $540 = $539 & 127;
-    HEAP32[$vararg_buffer167>>2] = $534;
-    $vararg_ptr170 = ((($vararg_buffer167)) + 4|0);
-    HEAP32[$vararg_ptr170>>2] = $537;
-    $vararg_ptr171 = ((($vararg_buffer167)) + 8|0);
-    HEAP32[$vararg_ptr171>>2] = $540;
-    (_printf(67145,$vararg_buffer167)|0);
-    $541 = $2;
-    $542 = $3;
-    $543 = $6;
-    _print_lv($541,$542,$543,3);
-    break;
-   }
-   case 70:  {
-    $544 = $6;
-    $545 = $544 >>> 23;
-    $546 = $545 & 511;
-    $547 = $2;
-    $548 = $3;
-    $549 = ((($548)) + 16|0);
-    $550 = HEAP32[$549>>2]|0;
-    $551 = $6;
-    $552 = $551 >>> 14;
-    $553 = $552 & 511;
-    $554 = (($550) + ($553<<2)|0);
-    $555 = HEAP32[$554>>2]|0;
-    $556 = (_mrb_sym2name($547,$555)|0);
-    HEAP32[$vararg_buffer172>>2] = $546;
-    $vararg_ptr175 = ((($vararg_buffer172)) + 4|0);
-    HEAP32[$vararg_ptr175>>2] = $556;
-    (_printf(67165,$vararg_buffer172)|0);
-    $557 = $2;
-    $558 = $3;
-    $559 = $6;
-    _print_lv($557,$558,$559,1);
-    break;
-   }
-   case 44:  {
-    $560 = $6;
-    $561 = $560 >>> 23;
-    $562 = $561 & 511;
-    $563 = $2;
-    $564 = $3;
-    $565 = ((($564)) + 16|0);
-    $566 = HEAP32[$565>>2]|0;
-    $567 = $6;
-    $568 = $567 >>> 14;
-    $569 = $568 & 511;
-    $570 = (($566) + ($569<<2)|0);
-    $571 = HEAP32[$570>>2]|0;
-    $572 = (_mrb_sym2name($563,$571)|0);
-    $573 = $6;
-    $574 = $573 >>> 7;
-    $575 = $574 & 127;
-    HEAP32[$vararg_buffer176>>2] = $562;
-    $vararg_ptr179 = ((($vararg_buffer176)) + 4|0);
-    HEAP32[$vararg_ptr179>>2] = $572;
-    $vararg_ptr180 = ((($vararg_buffer176)) + 8|0);
-    HEAP32[$vararg_ptr180>>2] = $575;
-    (_printf(67183,$vararg_buffer176)|0);
-    break;
-   }
-   case 45:  {
-    $576 = $6;
-    $577 = $576 >>> 23;
-    $578 = $577 & 511;
-    $579 = $2;
-    $580 = $3;
-    $581 = ((($580)) + 16|0);
-    $582 = HEAP32[$581>>2]|0;
-    $583 = $6;
-    $584 = $583 >>> 14;
-    $585 = $584 & 511;
-    $586 = (($582) + ($585<<2)|0);
-    $587 = HEAP32[$586>>2]|0;
-    $588 = (_mrb_sym2name($579,$587)|0);
-    $589 = $6;
-    $590 = $589 >>> 7;
-    $591 = $590 & 127;
-    HEAP32[$vararg_buffer181>>2] = $578;
-    $vararg_ptr184 = ((($vararg_buffer181)) + 4|0);
-    HEAP32[$vararg_ptr184>>2] = $588;
-    $vararg_ptr185 = ((($vararg_buffer181)) + 8|0);
-    HEAP32[$vararg_ptr185>>2] = $591;
-    (_printf(67202,$vararg_buffer181)|0);
-    break;
-   }
-   case 46:  {
-    $592 = $6;
-    $593 = $592 >>> 23;
-    $594 = $593 & 511;
-    $595 = $2;
-    $596 = $3;
-    $597 = ((($596)) + 16|0);
-    $598 = HEAP32[$597>>2]|0;
-    $599 = $6;
-    $600 = $599 >>> 14;
-    $601 = $600 & 511;
-    $602 = (($598) + ($601<<2)|0);
-    $603 = HEAP32[$602>>2]|0;
-    $604 = (_mrb_sym2name($595,$603)|0);
-    $605 = $6;
-    $606 = $605 >>> 7;
-    $607 = $606 & 127;
-    HEAP32[$vararg_buffer186>>2] = $594;
-    $vararg_ptr189 = ((($vararg_buffer186)) + 4|0);
-    HEAP32[$vararg_ptr189>>2] = $604;
-    $vararg_ptr190 = ((($vararg_buffer186)) + 8|0);
-    HEAP32[$vararg_ptr190>>2] = $607;
-    (_printf(67222,$vararg_buffer186)|0);
-    break;
-   }
-   case 47:  {
-    $608 = $6;
-    $609 = $608 >>> 23;
-    $610 = $609 & 511;
-    $611 = $2;
-    $612 = $3;
-    $613 = ((($612)) + 16|0);
-    $614 = HEAP32[$613>>2]|0;
-    $615 = $6;
-    $616 = $615 >>> 14;
-    $617 = $616 & 511;
-    $618 = (($614) + ($617<<2)|0);
-    $619 = HEAP32[$618>>2]|0;
-    $620 = (_mrb_sym2name($611,$619)|0);
-    $621 = $6;
-    $622 = $621 >>> 7;
-    $623 = $622 & 127;
-    HEAP32[$vararg_buffer191>>2] = $610;
-    $vararg_ptr194 = ((($vararg_buffer191)) + 4|0);
-    HEAP32[$vararg_ptr194>>2] = $620;
-    $vararg_ptr195 = ((($vararg_buffer191)) + 8|0);
-    HEAP32[$vararg_ptr195>>2] = $623;
-    (_printf(67241,$vararg_buffer191)|0);
-    break;
-   }
-   case 48:  {
-    $624 = $6;
-    $625 = $624 >>> 23;
-    $626 = $625 & 511;
-    $627 = $2;
-    $628 = $3;
-    $629 = ((($628)) + 16|0);
-    $630 = HEAP32[$629>>2]|0;
-    $631 = $6;
-    $632 = $631 >>> 14;
-    $633 = $632 & 511;
-    $634 = (($630) + ($633<<2)|0);
-    $635 = HEAP32[$634>>2]|0;
-    $636 = (_mrb_sym2name($627,$635)|0);
-    $637 = $6;
-    $638 = $637 >>> 7;
-    $639 = $638 & 127;
-    HEAP32[$vararg_buffer196>>2] = $626;
-    $vararg_ptr199 = ((($vararg_buffer196)) + 4|0);
-    HEAP32[$vararg_ptr199>>2] = $636;
-    $vararg_ptr200 = ((($vararg_buffer196)) + 8|0);
-    HEAP32[$vararg_ptr200>>2] = $639;
-    (_printf(67261,$vararg_buffer196)|0);
-    break;
-   }
-   case 49:  {
-    $640 = $6;
-    $641 = $640 >>> 23;
-    $642 = $641 & 511;
-    $643 = $2;
-    $644 = $3;
-    $645 = ((($644)) + 16|0);
-    $646 = HEAP32[$645>>2]|0;
-    $647 = $6;
-    $648 = $647 >>> 14;
-    $649 = $648 & 511;
-    $650 = (($646) + ($649<<2)|0);
-    $651 = HEAP32[$650>>2]|0;
-    $652 = (_mrb_sym2name($643,$651)|0);
-    $653 = $6;
-    $654 = $653 >>> 7;
-    $655 = $654 & 127;
-    HEAP32[$vararg_buffer201>>2] = $642;
-    $vararg_ptr204 = ((($vararg_buffer201)) + 4|0);
-    HEAP32[$vararg_ptr204>>2] = $652;
-    $vararg_ptr205 = ((($vararg_buffer201)) + 8|0);
-    HEAP32[$vararg_ptr205>>2] = $655;
-    (_printf(67280,$vararg_buffer201)|0);
-    break;
-   }
-   case 51:  {
-    $656 = $6;
-    $657 = $656 >>> 23;
-    $658 = $657 & 511;
-    $659 = $2;
-    $660 = $3;
-    $661 = ((($660)) + 16|0);
-    $662 = HEAP32[$661>>2]|0;
-    $663 = $6;
-    $664 = $663 >>> 14;
-    $665 = $664 & 511;
-    $666 = (($662) + ($665<<2)|0);
-    $667 = HEAP32[$666>>2]|0;
-    $668 = (_mrb_sym2name($659,$667)|0);
-    $669 = $6;
-    $670 = $669 >>> 7;
-    $671 = $670 & 127;
-    HEAP32[$vararg_buffer206>>2] = $658;
-    $vararg_ptr209 = ((($vararg_buffer206)) + 4|0);
-    HEAP32[$vararg_ptr209>>2] = $668;
-    $vararg_ptr210 = ((($vararg_buffer206)) + 8|0);
-    HEAP32[$vararg_ptr210>>2] = $671;
-    (_printf(67299,$vararg_buffer206)|0);
-    break;
-   }
-   case 52:  {
-    $672 = $6;
-    $673 = $672 >>> 23;
-    $674 = $673 & 511;
-    $675 = $2;
-    $676 = $3;
-    $677 = ((($676)) + 16|0);
-    $678 = HEAP32[$677>>2]|0;
-    $679 = $6;
-    $680 = $679 >>> 14;
-    $681 = $680 & 511;
-    $682 = (($678) + ($681<<2)|0);
-    $683 = HEAP32[$682>>2]|0;
-    $684 = (_mrb_sym2name($675,$683)|0);
-    $685 = $6;
-    $686 = $685 >>> 7;
-    $687 = $686 & 127;
-    HEAP32[$vararg_buffer211>>2] = $674;
-    $vararg_ptr214 = ((($vararg_buffer211)) + 4|0);
-    HEAP32[$vararg_ptr214>>2] = $684;
-    $vararg_ptr215 = ((($vararg_buffer211)) + 8|0);
-    HEAP32[$vararg_ptr215>>2] = $687;
-    (_printf(67317,$vararg_buffer211)|0);
-    break;
-   }
-   case 53:  {
-    $688 = $6;
-    $689 = $688 >>> 23;
-    $690 = $689 & 511;
-    $691 = $2;
-    $692 = $3;
-    $693 = ((($692)) + 16|0);
-    $694 = HEAP32[$693>>2]|0;
-    $695 = $6;
-    $696 = $695 >>> 14;
-    $697 = $696 & 511;
-    $698 = (($694) + ($697<<2)|0);
-    $699 = HEAP32[$698>>2]|0;
-    $700 = (_mrb_sym2name($691,$699)|0);
-    $701 = $6;
-    $702 = $701 >>> 7;
-    $703 = $702 & 127;
-    HEAP32[$vararg_buffer216>>2] = $690;
-    $vararg_ptr219 = ((($vararg_buffer216)) + 4|0);
-    HEAP32[$vararg_ptr219>>2] = $700;
-    $vararg_ptr220 = ((($vararg_buffer216)) + 8|0);
-    HEAP32[$vararg_ptr220>>2] = $703;
-    (_printf(67335,$vararg_buffer216)|0);
-    break;
-   }
-   case 54:  {
-    $704 = $6;
-    $705 = $704 >>> 23;
-    $706 = $705 & 511;
-    $707 = $2;
-    $708 = $3;
-    $709 = ((($708)) + 16|0);
-    $710 = HEAP32[$709>>2]|0;
-    $711 = $6;
-    $712 = $711 >>> 14;
-    $713 = $712 & 511;
-    $714 = (($710) + ($713<<2)|0);
-    $715 = HEAP32[$714>>2]|0;
-    $716 = (_mrb_sym2name($707,$715)|0);
-    $717 = $6;
-    $718 = $717 >>> 7;
-    $719 = $718 & 127;
-    HEAP32[$vararg_buffer221>>2] = $706;
-    $vararg_ptr224 = ((($vararg_buffer221)) + 4|0);
-    HEAP32[$vararg_ptr224>>2] = $716;
-    $vararg_ptr225 = ((($vararg_buffer221)) + 8|0);
-    HEAP32[$vararg_ptr225>>2] = $719;
-    (_printf(67353,$vararg_buffer221)|0);
-    break;
-   }
-   case 50:  {
-    $720 = $6;
-    $721 = $720 >>> 23;
-    $722 = $721 & 511;
-    $723 = $2;
-    $724 = $3;
-    $725 = ((($724)) + 16|0);
-    $726 = HEAP32[$725>>2]|0;
-    $727 = $6;
-    $728 = $727 >>> 14;
-    $729 = $728 & 511;
-    $730 = (($726) + ($729<<2)|0);
-    $731 = HEAP32[$730>>2]|0;
-    $732 = (_mrb_sym2name($723,$731)|0);
-    $733 = $6;
-    $734 = $733 >>> 7;
-    $735 = $734 & 127;
-    HEAP32[$vararg_buffer226>>2] = $722;
-    $vararg_ptr229 = ((($vararg_buffer226)) + 4|0);
-    HEAP32[$vararg_ptr229>>2] = $732;
-    $vararg_ptr230 = ((($vararg_buffer226)) + 8|0);
-    HEAP32[$vararg_ptr230>>2] = $735;
-    (_printf(67371,$vararg_buffer226)|0);
-    break;
-   }
-   case 74:  {
-    (_printf(67389,$vararg_buffer231)|0);
-    break;
-   }
-   case 55:  {
-    $736 = $6;
-    $737 = $736 >>> 23;
-    $738 = $737 & 511;
-    $739 = $6;
-    $740 = $739 >>> 14;
-    $741 = $740 & 511;
-    $742 = $6;
-    $743 = $742 >>> 7;
-    $744 = $743 & 127;
-    HEAP32[$vararg_buffer233>>2] = $738;
-    $vararg_ptr236 = ((($vararg_buffer233)) + 4|0);
-    HEAP32[$vararg_ptr236>>2] = $741;
-    $vararg_ptr237 = ((($vararg_buffer233)) + 8|0);
-    HEAP32[$vararg_ptr237>>2] = $744;
-    (_printf(67398,$vararg_buffer233)|0);
-    $745 = $2;
-    $746 = $3;
-    $747 = $6;
-    _print_lv($745,$746,$747,3);
-    break;
-   }
-   case 56:  {
-    $748 = $6;
-    $749 = $748 >>> 23;
-    $750 = $749 & 511;
-    $751 = $6;
-    $752 = $751 >>> 14;
-    $753 = $752 & 511;
-    HEAP32[$vararg_buffer238>>2] = $750;
-    $vararg_ptr241 = ((($vararg_buffer238)) + 4|0);
-    HEAP32[$vararg_ptr241>>2] = $753;
-    (_printf(67418,$vararg_buffer238)|0);
-    $754 = $2;
-    $755 = $3;
-    $756 = $6;
-    _print_lv($754,$755,$756,3);
-    break;
-   }
-   case 57:  {
-    $757 = $6;
-    $758 = $757 >>> 23;
-    $759 = $758 & 511;
-    $760 = $6;
-    $761 = $760 >>> 14;
-    $762 = $761 & 511;
-    HEAP32[$vararg_buffer242>>2] = $759;
-    $vararg_ptr245 = ((($vararg_buffer242)) + 4|0);
-    HEAP32[$vararg_ptr245>>2] = $762;
-    (_printf(67437,$vararg_buffer242)|0);
-    $763 = $2;
-    $764 = $3;
-    $765 = $6;
-    _print_lv($763,$764,$765,3);
-    break;
-   }
-   case 58:  {
-    $766 = $6;
-    $767 = $766 >>> 23;
-    $768 = $767 & 511;
-    $769 = $6;
-    $770 = $769 >>> 14;
-    $771 = $770 & 511;
-    $772 = $6;
-    $773 = $772 >>> 7;
-    $774 = $773 & 127;
-    HEAP32[$vararg_buffer246>>2] = $768;
-    $vararg_ptr249 = ((($vararg_buffer246)) + 4|0);
-    HEAP32[$vararg_ptr249>>2] = $771;
-    $vararg_ptr250 = ((($vararg_buffer246)) + 8|0);
-    HEAP32[$vararg_ptr250>>2] = $774;
-    (_printf(67457,$vararg_buffer246)|0);
-    $775 = $2;
-    $776 = $3;
-    $777 = $6;
-    _print_lv($775,$776,$777,3);
-    break;
-   }
-   case 60:  {
-    $778 = $6;
-    $779 = $778 >>> 23;
-    $780 = $779 & 511;
-    $781 = $6;
-    $782 = $781 >>> 14;
-    $783 = $782 & 511;
-    $784 = $6;
-    $785 = $784 >>> 7;
-    $786 = $785 & 127;
-    HEAP32[$vararg_buffer251>>2] = $780;
-    $vararg_ptr254 = ((($vararg_buffer251)) + 4|0);
-    HEAP32[$vararg_ptr254>>2] = $783;
-    $vararg_ptr255 = ((($vararg_buffer251)) + 8|0);
-    HEAP32[$vararg_ptr255>>2] = $786;
-    (_printf(67476,$vararg_buffer251)|0);
-    $787 = $2;
-    $788 = $3;
-    $789 = $6;
-    _print_lv($787,$788,$789,1);
-    break;
-   }
-   case 61:  {
-    $790 = $3;
-    $791 = ((($790)) + 12|0);
-    $792 = HEAP32[$791>>2]|0;
-    $793 = $6;
-    $794 = $793 >>> 7;
-    $795 = $794 & 65535;
-    $796 = (($792) + ($795<<3)|0);
-    ;HEAP32[$12>>2]=HEAP32[$796>>2]|0;HEAP32[$12+4>>2]=HEAP32[$796+4>>2]|0;
-    $797 = $2;
-    $798 = $2;
-    $799 = HEAP32[$12>>2]|0;
-    $800 = HEAP32[$799>>2]|0;
-    $801 = $800 >>> 11;
-    $802 = $801 & 8;
-    $803 = ($802|0)!=(0);
-    $804 = HEAP32[$12>>2]|0;
-    $805 = ((($804)) + 12|0);
-    if ($803) {
-     $820 = $805;
-    } else {
-     $806 = ((($805)) + 8|0);
-     $807 = HEAP32[$806>>2]|0;
-     $820 = $807;
-    }
-    $808 = HEAP32[$12>>2]|0;
-    $809 = HEAP32[$808>>2]|0;
-    $810 = $809 >>> 11;
-    $811 = $810 & 8;
-    $812 = ($811|0)!=(0);
-    $813 = HEAP32[$12>>2]|0;
-    if ($812) {
-     $814 = HEAP32[$813>>2]|0;
-     $815 = $814 >>> 11;
-     $816 = $815 & 496;
-     $817 = $816 >> 4;
-     $821 = $817;
-    } else {
-     $818 = ((($813)) + 12|0);
-     $819 = HEAP32[$818>>2]|0;
-     $821 = $819;
-    }
-    _mrb_str_new($14,$798,$820,$821);
-    ;HEAP32[$$byval_copy321>>2]=HEAP32[$14>>2]|0;HEAP32[$$byval_copy321+4>>2]=HEAP32[$14+4>>2]|0;
-    _mrb_str_dump($13,$797,$$byval_copy321);
-    $822 = $6;
-    $823 = $822 >>> 23;
-    $824 = $823 & 511;
-    $825 = $6;
-    $826 = $825 >>> 7;
-    $827 = $826 & 65535;
-    $828 = HEAP32[$13>>2]|0;
-    $829 = HEAP32[$828>>2]|0;
-    $830 = $829 >>> 11;
-    $831 = $830 & 8;
-    $832 = ($831|0)!=(0);
-    $833 = HEAP32[$13>>2]|0;
-    $834 = ((($833)) + 12|0);
-    if ($832) {
-     $837 = $834;
-    } else {
-     $835 = ((($834)) + 8|0);
-     $836 = HEAP32[$835>>2]|0;
-     $837 = $836;
-    }
-    HEAP32[$vararg_buffer256>>2] = $824;
-    $vararg_ptr259 = ((($vararg_buffer256)) + 4|0);
-    HEAP32[$vararg_ptr259>>2] = $827;
-    $vararg_ptr260 = ((($vararg_buffer256)) + 8|0);
-    HEAP32[$vararg_ptr260>>2] = $837;
-    (_printf(67495,$vararg_buffer256)|0);
-    $838 = $2;
-    $839 = $3;
-    $840 = $6;
-    _print_lv($838,$839,$840,1);
-    break;
-   }
-   case 62:  {
-    $841 = $6;
-    $842 = $841 >>> 23;
-    $843 = $842 & 511;
-    $844 = $6;
-    $845 = $844 >>> 14;
-    $846 = $845 & 511;
-    HEAP32[$vararg_buffer261>>2] = $843;
-    $vararg_ptr264 = ((($vararg_buffer261)) + 4|0);
-    HEAP32[$vararg_ptr264>>2] = $846;
-    (_printf(67520,$vararg_buffer261)|0);
-    $847 = $2;
-    $848 = $3;
-    $849 = $6;
-    _print_lv($847,$848,$849,3);
-    break;
-   }
-   case 63:  {
-    $850 = $6;
-    $851 = $850 >>> 23;
-    $852 = $851 & 511;
-    $853 = $6;
-    $854 = $853 >>> 14;
-    $855 = $854 & 511;
-    $856 = $6;
-    $857 = $856 >>> 7;
-    $858 = $857 & 127;
-    HEAP32[$vararg_buffer265>>2] = $852;
-    $vararg_ptr268 = ((($vararg_buffer265)) + 4|0);
-    HEAP32[$vararg_ptr268>>2] = $855;
-    $vararg_ptr269 = ((($vararg_buffer265)) + 8|0);
-    HEAP32[$vararg_ptr269>>2] = $858;
-    (_printf(67539,$vararg_buffer265)|0);
-    $859 = $2;
-    $860 = $3;
-    $861 = $6;
-    _print_lv($859,$860,$861,3);
-    break;
-   }
-   case 66:  {
-    $862 = $6;
-    $863 = $862 >>> 23;
-    $864 = $863 & 511;
-    HEAP32[$vararg_buffer270>>2] = $864;
-    (_printf(67558,$vararg_buffer270)|0);
-    $865 = $2;
-    $866 = $3;
-    $867 = $6;
-    _print_lv($865,$866,$867,1);
-    break;
-   }
-   case 67:  {
-    $868 = $6;
-    $869 = $868 >>> 23;
-    $870 = $869 & 511;
-    $871 = $2;
-    $872 = $3;
-    $873 = ((($872)) + 16|0);
-    $874 = HEAP32[$873>>2]|0;
-    $875 = $6;
-    $876 = $875 >>> 14;
-    $877 = $876 & 511;
-    $878 = (($874) + ($877<<2)|0);
-    $879 = HEAP32[$878>>2]|0;
-    $880 = (_mrb_sym2name($871,$879)|0);
-    HEAP32[$vararg_buffer273>>2] = $870;
-    $vararg_ptr276 = ((($vararg_buffer273)) + 4|0);
-    HEAP32[$vararg_ptr276>>2] = $880;
-    (_printf(67574,$vararg_buffer273)|0);
-    $881 = $2;
-    $882 = $3;
-    $883 = $6;
-    _print_lv($881,$882,$883,1);
-    break;
-   }
-   case 68:  {
-    $884 = $6;
-    $885 = $884 >>> 23;
-    $886 = $885 & 511;
-    $887 = $2;
-    $888 = $3;
-    $889 = ((($888)) + 16|0);
-    $890 = HEAP32[$889>>2]|0;
-    $891 = $6;
-    $892 = $891 >>> 14;
-    $893 = $892 & 511;
-    $894 = (($890) + ($893<<2)|0);
-    $895 = HEAP32[$894>>2]|0;
-    $896 = (_mrb_sym2name($887,$895)|0);
-    HEAP32[$vararg_buffer277>>2] = $886;
-    $vararg_ptr280 = ((($vararg_buffer277)) + 4|0);
-    HEAP32[$vararg_ptr280>>2] = $896;
-    (_printf(67591,$vararg_buffer277)|0);
-    $897 = $2;
-    $898 = $3;
-    $899 = $6;
-    _print_lv($897,$898,$899,1);
-    break;
-   }
-   case 69:  {
-    $900 = $6;
-    $901 = $900 >>> 23;
-    $902 = $901 & 511;
-    $903 = $6;
-    $904 = $903 >>> 7;
-    $905 = $904 & 65535;
-    $906 = (($905) + 1)|0;
-    HEAP32[$vararg_buffer281>>2] = $902;
-    $vararg_ptr284 = ((($vararg_buffer281)) + 4|0);
-    HEAP32[$vararg_ptr284>>2] = $906;
-    (_printf(67609,$vararg_buffer281)|0);
-    $907 = $2;
-    $908 = $3;
-    $909 = $6;
-    _print_lv($907,$908,$909,1);
-    break;
-   }
-   case 71:  {
-    $910 = $6;
-    $911 = $910 >>> 23;
-    $912 = $911 & 511;
-    $913 = $6;
-    $914 = $913 >>> 14;
-    $915 = $914 & 511;
-    HEAP32[$vararg_buffer285>>2] = $912;
-    $vararg_ptr288 = ((($vararg_buffer285)) + 4|0);
-    HEAP32[$vararg_ptr288>>2] = $915;
-    (_printf(67628,$vararg_buffer285)|0);
-    $916 = $2;
-    $917 = $3;
-    $918 = $6;
-    _print_lv($916,$917,$918,3);
-    break;
-   }
-   case 72:  {
-    $919 = $6;
-    $920 = $919 >>> 23;
-    $921 = $920 & 511;
-    HEAP32[$vararg_buffer289>>2] = $921;
-    (_printf(67647,$vararg_buffer289)|0);
-    $922 = $2;
-    $923 = $3;
-    $924 = $6;
-    _print_lv($922,$923,$924,1);
-    break;
-   }
-   case 75:  {
-    $925 = $3;
-    $926 = ((($925)) + 12|0);
-    $927 = HEAP32[$926>>2]|0;
-    $928 = $6;
-    $929 = $928 >>> 7;
-    $930 = $929 & 65535;
-    $931 = (($927) + ($930<<3)|0);
-    ;HEAP32[$15>>2]=HEAP32[$931>>2]|0;HEAP32[$15+4>>2]=HEAP32[$931+4>>2]|0;
-    $932 = $2;
-    $933 = $2;
-    $934 = HEAP32[$15>>2]|0;
-    $935 = HEAP32[$934>>2]|0;
-    $936 = $935 >>> 11;
-    $937 = $936 & 8;
-    $938 = ($937|0)!=(0);
-    $939 = HEAP32[$15>>2]|0;
-    $940 = ((($939)) + 12|0);
-    if ($938) {
-     $955 = $940;
-    } else {
-     $941 = ((($940)) + 8|0);
-     $942 = HEAP32[$941>>2]|0;
-     $955 = $942;
-    }
-    $943 = HEAP32[$15>>2]|0;
-    $944 = HEAP32[$943>>2]|0;
-    $945 = $944 >>> 11;
-    $946 = $945 & 8;
-    $947 = ($946|0)!=(0);
-    $948 = HEAP32[$15>>2]|0;
-    if ($947) {
-     $949 = HEAP32[$948>>2]|0;
-     $950 = $949 >>> 11;
-     $951 = $950 & 496;
-     $952 = $951 >> 4;
-     $956 = $952;
-    } else {
-     $953 = ((($948)) + 12|0);
-     $954 = HEAP32[$953>>2]|0;
-     $956 = $954;
-    }
-    _mrb_str_new($17,$933,$955,$956);
-    ;HEAP32[$$byval_copy322>>2]=HEAP32[$17>>2]|0;HEAP32[$$byval_copy322+4>>2]=HEAP32[$17+4>>2]|0;
-    _mrb_str_dump($16,$932,$$byval_copy322);
-    $957 = HEAP32[$16>>2]|0;
-    $958 = HEAP32[$957>>2]|0;
-    $959 = $958 >>> 11;
-    $960 = $959 & 8;
-    $961 = ($960|0)!=(0);
-    $962 = HEAP32[$16>>2]|0;
-    $963 = ((($962)) + 12|0);
-    if ($961) {
-     $966 = $963;
-    } else {
-     $964 = ((($963)) + 8|0);
-     $965 = HEAP32[$964>>2]|0;
-     $966 = $965;
-    }
-    HEAP32[$vararg_buffer292>>2] = $966;
-    (_printf(67663,$vararg_buffer292)|0);
-    break;
-   }
-   case 30:  {
-    $967 = $6;
-    $968 = $967 >>> 7;
-    $969 = $968 & 65535;
-    $970 = (($969) + 1)|0;
-    HEAP32[$vararg_buffer295>>2] = $970;
-    (_printf(67674,$vararg_buffer295)|0);
-    break;
-   }
-   case 26:  {
-    $971 = $4;
-    $972 = $6;
-    $973 = $972 >>> 7;
-    $974 = $973 & 65535;
-    $975 = (($974) - 32767)|0;
-    $976 = (($971) + ($975))|0;
-    HEAP32[$vararg_buffer298>>2] = $976;
-    (_printf(67692,$vararg_buffer298)|0);
-    break;
-   }
-   case 27:  {
-    $977 = $6;
-    $978 = $977 >>> 23;
-    $979 = $978 & 511;
-    HEAP32[$vararg_buffer301>>2] = $979;
-    (_printf(67707,$vararg_buffer301)|0);
-    $980 = $2;
-    $981 = $3;
-    $982 = $6;
-    _print_lv($980,$981,$982,1);
-    break;
-   }
-   case 29:  {
-    $983 = $6;
-    $984 = $983 >>> 23;
-    $985 = $984 & 511;
-    HEAP32[$vararg_buffer304>>2] = $985;
-    (_printf(67723,$vararg_buffer304)|0);
-    $986 = $2;
-    $987 = $3;
-    $988 = $6;
-    _print_lv($986,$987,$988,1);
-    break;
-   }
-   case 28:  {
-    $989 = $6;
-    $990 = $989 >>> 23;
-    $991 = $990 & 511;
-    HEAP32[$vararg_buffer307>>2] = $991;
-    (_printf(67738,$vararg_buffer307)|0);
-    $992 = $2;
-    $993 = $3;
-    $994 = $6;
-    _print_lv($992,$993,$994,1);
-    break;
-   }
-   case 31:  {
-    $995 = $6;
-    $996 = $995 >>> 23;
-    $997 = $996 & 511;
-    HEAP32[$vararg_buffer310>>2] = $997;
-    (_printf(67753,$vararg_buffer310)|0);
-    break;
-   }
-   default: {
-    $998 = $6;
-    $999 = $998 & 127;
-    $1000 = $6;
-    $1001 = $1000 >>> 23;
-    $1002 = $1001 & 511;
-    $1003 = $6;
-    $1004 = $1003 >>> 14;
-    $1005 = $1004 & 511;
-    $1006 = $6;
-    $1007 = $1006 >>> 7;
-    $1008 = $1007 & 127;
-    HEAP32[$vararg_buffer313>>2] = $999;
-    $vararg_ptr316 = ((($vararg_buffer313)) + 4|0);
-    HEAP32[$vararg_ptr316>>2] = $1002;
-    $vararg_ptr317 = ((($vararg_buffer313)) + 8|0);
-    HEAP32[$vararg_ptr317>>2] = $1005;
-    $vararg_ptr318 = ((($vararg_buffer313)) + 12|0);
-    HEAP32[$vararg_ptr318>>2] = $1008;
-    (_printf(67765,$vararg_buffer313)|0);
-   }
-   }
-  } while(0);
-  $1009 = $2;
-  $1010 = $5;
-  _mrb_gc_arena_restore($1009,$1010);
-  $1011 = $4;
-  $1012 = (($1011) + 1)|0;
-  $4 = $1012;
- }
- (_printf(67789,$vararg_buffer319)|0);
- STACKTOP = sp;return;
-}
-function _print_lv($0,$1,$2,$3) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;
- var $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0;
- var $49 = 0, $5 = 0, $50 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, $vararg_buffer1 = 0, $vararg_buffer3 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);
- $vararg_buffer3 = sp + 16|0;
- $vararg_buffer1 = sp + 8|0;
- $vararg_buffer = sp;
- $4 = $0;
- $5 = $1;
- $6 = $2;
- $7 = $3;
- $8 = 0;
- $9 = $5;
- $10 = ((($9)) + 24|0);
- $11 = HEAP32[$10>>2]|0;
- $12 = ($11|0)!=(0|0);
- do {
-  if ($12) {
-   $13 = $7;
-   $14 = $13 & 1;
-   $15 = ($14|0)!=(0);
-   if ($15) {
-    $16 = $6;
-    $17 = $16 >>> 23;
-    $18 = $17 & 511;
-    $19 = $5;
-    $20 = HEAP16[$19>>1]|0;
-    $21 = $20&65535;
-    $22 = ($18|0)>=($21|0);
-    if ($22) {
-     label = 4;
-    }
-   } else {
-    label = 4;
-   }
-   if ((label|0) == 4) {
-    $23 = $7;
-    $24 = $23 & 2;
-    $25 = ($24|0)!=(0);
-    if (!($25)) {
-     break;
-    }
-    $26 = $6;
-    $27 = $26 >>> 14;
-    $28 = $27 & 511;
-    $29 = $5;
-    $30 = HEAP16[$29>>1]|0;
-    $31 = $30&65535;
-    $32 = ($28|0)>=($31|0);
-    if ($32) {
-     break;
-    }
-   }
-   (_printf(67791,$vararg_buffer1)|0);
-   $33 = $7;
-   $34 = $33 & 1;
-   $35 = ($34|0)!=(0);
-   if ($35) {
-    $36 = $4;
-    $37 = $5;
-    $38 = $6;
-    $39 = $38 >>> 23;
-    $40 = $39 & 511;
-    $41 = (_print_r($36,$37,$40,0)|0);
-    $8 = $41;
-   }
-   $42 = $7;
-   $43 = $42 & 2;
-   $44 = ($43|0)!=(0);
-   if ($44) {
-    $45 = $4;
-    $46 = $5;
-    $47 = $6;
-    $48 = $47 >>> 14;
-    $49 = $48 & 511;
-    $50 = $8;
-    (_print_r($45,$46,$49,$50)|0);
-   }
-   (_printf(67789,$vararg_buffer3)|0);
-   STACKTOP = sp;return;
-  }
- } while(0);
- (_printf(67789,$vararg_buffer)|0);
- STACKTOP = sp;return;
-}
-function _print_r($0,$1,$2,$3) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;
- var $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0;
- var $vararg_buffer = 0, $vararg_buffer1 = 0, $vararg_ptr3 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);
- $vararg_buffer1 = sp + 8|0;
- $vararg_buffer = sp;
- $5 = $0;
- $6 = $1;
- $7 = $2;
- $8 = $3;
- $11 = $7;
- $12 = ($11|0)==(0);
- if ($12) {
-  $4 = 0;
-  $43 = $4;
-  STACKTOP = sp;return ($43|0);
- }
- $9 = 0;
- while(1) {
-  $13 = $9;
-  $14 = (($13) + 1)|0;
-  $15 = $6;
-  $16 = HEAP16[$15>>1]|0;
-  $17 = $16&65535;
-  $18 = ($14>>>0)<($17>>>0);
-  if (!($18)) {
-   label = 10;
-   break;
-  }
-  $19 = $6;
-  $20 = ((($19)) + 24|0);
-  $21 = HEAP32[$20>>2]|0;
-  $22 = $9;
-  $23 = (($21) + ($22<<3)|0);
-  $24 = ((($23)) + 4|0);
-  $25 = HEAP16[$24>>1]|0;
-  $26 = $25&65535;
-  $27 = $7;
-  $28 = ($26|0)==($27|0);
-  if ($28) {
-   break;
-  }
-  $41 = $9;
-  $42 = (($41) + 1)|0;
-  $9 = $42;
- }
- if ((label|0) == 10) {
-  $4 = 0;
-  $43 = $4;
-  STACKTOP = sp;return ($43|0);
- }
- $29 = $6;
- $30 = ((($29)) + 24|0);
- $31 = HEAP32[$30>>2]|0;
- $32 = $9;
- $33 = (($31) + ($32<<3)|0);
- $34 = HEAP32[$33>>2]|0;
- $10 = $34;
- $35 = $8;
- $36 = ($35|0)!=(0);
- if ($36) {
-  (_printf(67795,$vararg_buffer)|0);
- }
- $37 = $7;
- $38 = $5;
- $39 = $10;
- $40 = (_mrb_sym2name($38,$39)|0);
- HEAP32[$vararg_buffer1>>2] = $37;
- $vararg_ptr3 = ((($vararg_buffer1)) + 4|0);
- HEAP32[$vararg_ptr3>>2] = $40;
- (_printf(67797,$vararg_buffer1)|0);
- $4 = 1;
- $43 = $4;
- STACKTOP = sp;return ($43|0);
-}
-function _calc_crc_16_ccitt($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;
- var $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $3 = $0;
- $4 = $1;
- $5 = $2;
- $9 = $5;
- $10 = $9&65535;
- $11 = $10 << 8;
- $8 = $11;
- $6 = 0;
- while(1) {
-  $12 = $6;
-  $13 = $4;
-  $14 = ($12>>>0)<($13>>>0);
-  if (!($14)) {
-   break;
-  }
-  $15 = $3;
-  $16 = ((($15)) + 1|0);
-  $3 = $16;
-  $17 = HEAP8[$15>>0]|0;
-  $18 = $17&255;
-  $19 = $8;
-  $20 = $19 | $18;
-  $8 = $20;
-  $7 = 0;
-  while(1) {
-   $21 = $7;
-   $22 = ($21>>>0)<(8);
-   if (!($22)) {
-    break;
-   }
-   $23 = $8;
-   $24 = $23 << 1;
-   $8 = $24;
-   $25 = $8;
-   $26 = $25 & 16777216;
-   $27 = ($26|0)!=(0);
-   if ($27) {
-    $28 = $8;
-    $29 = $28 ^ 17834240;
-    $8 = $29;
-   }
-   $30 = $7;
-   $31 = (($30) + 1)|0;
-   $7 = $31;
-  }
-  $32 = $6;
-  $33 = (($32) + 1)|0;
-  $6 = $33;
- }
- $34 = $8;
- $35 = $34 >>> 8;
- $36 = $35&65535;
- STACKTOP = sp;return ($36|0);
-}
-function _mrb_debug_get_filename($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;
- var $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $0;
- $4 = $1;
- $6 = $3;
- $7 = ($6|0)!=(0|0);
- if ($7) {
-  $8 = $4;
-  $9 = $3;
-  $10 = ((($9)) + 40|0);
-  $11 = HEAP32[$10>>2]|0;
-  $12 = ($8>>>0)<($11>>>0);
-  if ($12) {
-   $5 = 0;
-   $13 = $3;
-   $14 = ((($13)) + 36|0);
-   $15 = HEAP32[$14>>2]|0;
-   $16 = ($15|0)!=(0|0);
-   $17 = $3;
-   if (!($16)) {
-    $18 = ((($17)) + 28|0);
-    $19 = HEAP32[$18>>2]|0;
-    $2 = $19;
-    $28 = $2;
-    STACKTOP = sp;return ($28|0);
-   }
-   $20 = ((($17)) + 36|0);
-   $21 = HEAP32[$20>>2]|0;
-   $22 = $4;
-   $23 = (_get_file($21,$22)|0);
-   $5 = $23;
-   $24 = ($23|0)!=(0|0);
-   if ($24) {
-    $25 = $5;
-    $26 = ((($25)) + 4|0);
-    $27 = HEAP32[$26>>2]|0;
-    $2 = $27;
-    $28 = $2;
-    STACKTOP = sp;return ($28|0);
-   }
-  }
- }
- $2 = 0;
- $28 = $2;
- STACKTOP = sp;return ($28|0);
-}
-function _get_file($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;
- var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $5 = 0, $6 = 0, $7 = 0;
- var $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $3 = $0;
- $4 = $1;
- $9 = $4;
- $10 = $3;
- $11 = HEAP32[$10>>2]|0;
- $12 = ($9>>>0)>=($11>>>0);
- if ($12) {
-  $2 = 0;
-  $43 = $2;
-  STACKTOP = sp;return ($43|0);
- }
- $13 = $3;
- $14 = ((($13)) + 8|0);
- $15 = HEAP32[$14>>2]|0;
- $5 = $15;
- $16 = $3;
- $17 = ((($16)) + 4|0);
- $18 = HEAP16[$17>>1]|0;
- $19 = $18&65535;
- $6 = $19;
- while(1) {
-  $20 = $6;
-  $21 = ($20|0)>(0);
-  if (!($21)) {
-   break;
-  }
-  $22 = $6;
-  $23 = (($22|0) / 2)&-1;
-  $7 = $23;
-  $24 = $5;
-  $25 = $7;
-  $26 = (($24) + ($25<<2)|0);
-  $8 = $26;
-  $27 = $4;
-  $28 = $8;
-  $29 = HEAP32[$28>>2]|0;
-  $30 = HEAP32[$29>>2]|0;
-  $31 = ($27>>>0)<($30>>>0);
-  if ($31) {
-   $38 = $7;
-   $6 = $38;
-   continue;
-  } else {
-   $32 = $8;
-   $33 = ((($32)) + 4|0);
-   $5 = $33;
-   $34 = $7;
-   $35 = (($34) + 1)|0;
-   $36 = $6;
-   $37 = (($36) - ($35))|0;
-   $6 = $37;
-   continue;
-  }
- }
- $39 = $5;
- $40 = ((($39)) + -4|0);
- $5 = $40;
- $41 = $5;
- $42 = HEAP32[$41>>2]|0;
- $2 = $42;
- $43 = $2;
- STACKTOP = sp;return ($43|0);
-}
-function _mrb_debug_get_line($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;
- var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0;
- var $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0;
- var $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $9 = 0;
- var label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $3 = $0;
- $4 = $1;
- $10 = $3;
- $11 = ($10|0)!=(0|0);
- L1: do {
-  if ($11) {
-   $12 = $4;
-   $13 = $3;
-   $14 = ((($13)) + 40|0);
-   $15 = HEAP32[$14>>2]|0;
-   $16 = ($12>>>0)<($15>>>0);
-   if ($16) {
-    $5 = 0;
-    $17 = $3;
-    $18 = ((($17)) + 36|0);
-    $19 = HEAP32[$18>>2]|0;
-    $20 = ($19|0)!=(0|0);
-    $21 = $3;
-    if (!($20)) {
-     $22 = ((($21)) + 32|0);
-     $23 = HEAP32[$22>>2]|0;
-     $24 = ($23|0)!=(0|0);
-     if ($24) {
-      $25 = $3;
-      $26 = ((($25)) + 32|0);
-      $27 = HEAP32[$26>>2]|0;
-      $28 = $4;
-      $29 = (($27) + ($28<<1)|0);
-      $30 = HEAP16[$29>>1]|0;
-      $31 = $30&65535;
-      $32 = $31;
-     } else {
-      $32 = -1;
-     }
-     $2 = $32;
-     $81 = $2;
-     STACKTOP = sp;return ($81|0);
-    }
-    $33 = ((($21)) + 36|0);
-    $34 = HEAP32[$33>>2]|0;
-    $35 = $4;
-    $36 = (_get_file($34,$35)|0);
-    $5 = $36;
-    $37 = ($36|0)!=(0|0);
-    if ($37) {
-     $38 = $5;
-     $39 = ((($38)) + 16|0);
-     $40 = HEAP32[$39>>2]|0;
-     switch ($40|0) {
-     case 0:  {
-      $41 = $5;
-      $42 = ((($41)) + 20|0);
-      $43 = HEAP32[$42>>2]|0;
-      $44 = $4;
-      $45 = $5;
-      $46 = HEAP32[$45>>2]|0;
-      $47 = (($44) - ($46))|0;
-      $48 = (($43) + ($47<<1)|0);
-      $49 = HEAP16[$48>>1]|0;
-      $50 = $49&65535;
-      $2 = $50;
-      $81 = $2;
-      STACKTOP = sp;return ($81|0);
-      break;
-     }
-     case 1:  {
-      break;
-     }
-     default: {
-      break L1;
-     }
-     }
-     $51 = $5;
-     $52 = ((($51)) + 20|0);
-     $53 = HEAP32[$52>>2]|0;
-     $6 = $53;
-     $54 = $5;
-     $55 = ((($54)) + 12|0);
-     $56 = HEAP32[$55>>2]|0;
-     $7 = $56;
-     while(1) {
-      $57 = $7;
-      $58 = ($57>>>0)>(0);
-      if (!($58)) {
-       break;
-      }
-      $59 = $7;
-      $60 = (($59>>>0) / 2)&-1;
-      $8 = $60;
-      $61 = $6;
-      $62 = $8;
-      $63 = (($61) + ($62<<3)|0);
-      $9 = $63;
-      $64 = $4;
-      $65 = $9;
-      $66 = HEAP32[$65>>2]|0;
-      $67 = ($64>>>0)<($66>>>0);
-      if ($67) {
-       $74 = $8;
-       $7 = $74;
-       continue;
-      } else {
-       $68 = $9;
-       $69 = ((($68)) + 8|0);
-       $6 = $69;
-       $70 = $8;
-       $71 = (($70) + 1)|0;
-       $72 = $7;
-       $73 = (($72) - ($71))|0;
-       $7 = $73;
-       continue;
-      }
-     }
-     $75 = $6;
-     $76 = ((($75)) + -8|0);
-     $6 = $76;
-     $77 = $6;
-     $78 = ((($77)) + 4|0);
-     $79 = HEAP16[$78>>1]|0;
-     $80 = $79&65535;
-     $2 = $80;
-     $81 = $2;
-     STACKTOP = sp;return ($81|0);
-    }
-   }
-  }
- } while(0);
- $2 = -1;
- $81 = $2;
- STACKTOP = sp;return ($81|0);
-}
-function _mrb_debug_info_alloc($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $5 = $2;
- $6 = (_mrb_malloc($5,12)|0);
- $4 = $6;
- $7 = $4;
- ;HEAP32[$7>>2]=HEAP32[74868>>2]|0;HEAP32[$7+4>>2]=HEAP32[74868+4>>2]|0;HEAP32[$7+8>>2]=HEAP32[74868+8>>2]|0;
- $8 = $4;
- $9 = $3;
- $10 = ((($9)) + 36|0);
- HEAP32[$10>>2] = $8;
- $11 = $4;
- STACKTOP = sp;return ($11|0);
-}
-function _mrb_debug_info_append_file($0,$1,$2,$3) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;
- var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0;
- var $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0, $152 = 0, $153 = 0;
- var $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0, $170 = 0, $171 = 0;
- var $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0, $188 = 0, $189 = 0, $19 = 0;
- var $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0, $197 = 0, $198 = 0, $199 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0, $204 = 0, $205 = 0, $206 = 0, $207 = 0, $208 = 0;
- var $209 = 0, $21 = 0, $210 = 0, $211 = 0, $212 = 0, $213 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0;
- var $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0;
- var $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0;
- var $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0;
- var $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);
- $13 = sp + 12|0;
- $16 = sp;
- $5 = $0;
- $6 = $1;
- $7 = $2;
- $8 = $3;
- $17 = $6;
- $18 = ((($17)) + 36|0);
- $19 = HEAP32[$18>>2]|0;
- $20 = ($19|0)!=(0|0);
- if (!($20)) {
-  $4 = 0;
-  $213 = $4;
-  STACKTOP = sp;return ($213|0);
- }
- $21 = $6;
- $22 = ((($21)) + 36|0);
- $23 = HEAP32[$22>>2]|0;
- $9 = $23;
- $24 = $9;
- $25 = ((($24)) + 4|0);
- $26 = HEAP16[$25>>1]|0;
- $27 = $26&65535;
- $28 = ($27|0)>(0);
- if ($28) {
-  $29 = $6;
-  $30 = ((($29)) + 28|0);
-  $31 = HEAP32[$30>>2]|0;
-  $32 = $9;
-  $33 = ((($32)) + 8|0);
-  $34 = HEAP32[$33>>2]|0;
-  $35 = $9;
-  $36 = ((($35)) + 4|0);
-  $37 = HEAP16[$36>>1]|0;
-  $38 = $37&65535;
-  $39 = (($38) - 1)|0;
-  $40 = (($34) + ($39<<2)|0);
-  $41 = HEAP32[$40>>2]|0;
-  $42 = ((($41)) + 4|0);
-  $43 = HEAP32[$42>>2]|0;
-  $44 = (_strcmp($31,$43)|0);
-  $45 = ($44|0)==(0);
-  if ($45) {
-   $4 = 0;
-   $213 = $4;
-   STACKTOP = sp;return ($213|0);
-  }
- }
- $46 = $5;
- $47 = (_mrb_malloc($46,24)|0);
- $10 = $47;
- $48 = $9;
- $49 = ((($48)) + 8|0);
- $50 = HEAP32[$49>>2]|0;
- $51 = ($50|0)!=(0|0);
- $52 = $5;
- if ($51) {
-  $53 = $9;
-  $54 = ((($53)) + 8|0);
-  $55 = HEAP32[$54>>2]|0;
-  $56 = $9;
-  $57 = ((($56)) + 4|0);
-  $58 = HEAP16[$57>>1]|0;
-  $59 = $58&65535;
-  $60 = (($59) + 1)|0;
-  $61 = $60<<2;
-  $62 = (_mrb_realloc($52,$55,$61)|0);
-  $66 = $62;
- } else {
-  $63 = (_mrb_malloc($52,4)|0);
-  $66 = $63;
- }
- $64 = $9;
- $65 = ((($64)) + 8|0);
- HEAP32[$65>>2] = $66;
- $67 = $10;
- $68 = $9;
- $69 = ((($68)) + 8|0);
- $70 = HEAP32[$69>>2]|0;
- $71 = $9;
- $72 = ((($71)) + 4|0);
- $73 = HEAP16[$72>>1]|0;
- $74 = (($73) + 1)<<16>>16;
- HEAP16[$72>>1] = $74;
- $75 = $73&65535;
- $76 = (($70) + ($75<<2)|0);
- HEAP32[$76>>2] = $67;
- $77 = $8;
- $78 = $7;
- $79 = (($77) - ($78))|0;
- $11 = $79;
- $80 = $7;
- $81 = $10;
- HEAP32[$81>>2] = $80;
- $82 = $8;
- $83 = $9;
- HEAP32[$83>>2] = $82;
- $84 = $6;
- $85 = ((($84)) + 28|0);
- $86 = HEAP32[$85>>2]|0;
- $87 = (_strlen($86)|0);
- $12 = $87;
- $88 = $5;
- $89 = $6;
- $90 = ((($89)) + 28|0);
- $91 = HEAP32[$90>>2]|0;
- $92 = $12;
- $93 = (_mrb_intern($88,$91,$92)|0);
- $94 = $10;
- $95 = ((($94)) + 8|0);
- HEAP32[$95>>2] = $93;
- HEAP32[$13>>2] = 0;
- $96 = $5;
- $97 = $10;
- $98 = ((($97)) + 8|0);
- $99 = HEAP32[$98>>2]|0;
- $100 = (_mrb_sym2name_len($96,$99,$13)|0);
- $101 = $10;
- $102 = ((($101)) + 4|0);
- HEAP32[$102>>2] = $100;
- $103 = $6;
- $104 = ((($103)) + 32|0);
- $105 = HEAP32[$104>>2]|0;
- $106 = $7;
- $107 = (($105) + ($106<<1)|0);
- $108 = $8;
- $109 = $7;
- $110 = (($108) - ($109))|0;
- $111 = (_select_line_type($107,$110)|0);
- $112 = $10;
- $113 = ((($112)) + 16|0);
- HEAP32[$113>>2] = $111;
- $114 = $10;
- $115 = ((($114)) + 20|0);
- HEAP32[$115>>2] = 0;
- $116 = $10;
- $117 = ((($116)) + 16|0);
- $118 = HEAP32[$117>>2]|0;
- L14: do {
-  switch ($118|0) {
-  case 0:  {
-   $119 = $11;
-   $120 = $10;
-   $121 = ((($120)) + 12|0);
-   HEAP32[$121>>2] = $119;
-   $122 = $5;
-   $123 = $11;
-   $124 = $123<<1;
-   $125 = (_mrb_malloc($122,$124)|0);
-   $126 = $10;
-   $127 = ((($126)) + 20|0);
-   HEAP32[$127>>2] = $125;
-   $14 = 0;
-   while(1) {
-    $128 = $14;
-    $129 = $11;
-    $130 = ($128>>>0)<($129>>>0);
-    if (!($130)) {
-     break L14;
-    }
-    $131 = $6;
-    $132 = ((($131)) + 32|0);
-    $133 = HEAP32[$132>>2]|0;
-    $134 = $7;
-    $135 = $14;
-    $136 = (($134) + ($135))|0;
-    $137 = (($133) + ($136<<1)|0);
-    $138 = HEAP16[$137>>1]|0;
-    $139 = $10;
-    $140 = ((($139)) + 20|0);
-    $141 = HEAP32[$140>>2]|0;
-    $142 = $14;
-    $143 = (($141) + ($142<<1)|0);
-    HEAP16[$143>>1] = $138;
-    $144 = $14;
-    $145 = (($144) + 1)|0;
-    $14 = $145;
-   }
-   break;
-  }
-  case 1:  {
-   $15 = 0;
-   $146 = $5;
-   $147 = (_mrb_malloc($146,8)|0);
-   $148 = $10;
-   $149 = ((($148)) + 20|0);
-   HEAP32[$149>>2] = $147;
-   $150 = $10;
-   $151 = ((($150)) + 12|0);
-   HEAP32[$151>>2] = 0;
-   $14 = 0;
-   while(1) {
-    $152 = $14;
-    $153 = $11;
-    $154 = ($152>>>0)<($153>>>0);
-    if (!($154)) {
-     break L14;
-    }
-    $155 = $6;
-    $156 = ((($155)) + 32|0);
-    $157 = HEAP32[$156>>2]|0;
-    $158 = $7;
-    $159 = $14;
-    $160 = (($158) + ($159))|0;
-    $161 = (($157) + ($160<<1)|0);
-    $162 = HEAP16[$161>>1]|0;
-    $163 = $162&65535;
-    $164 = $15;
-    $165 = $164&65535;
-    $166 = ($163|0)==($165|0);
-    if (!($166)) {
-     $167 = $5;
-     $168 = $10;
-     $169 = ((($168)) + 20|0);
-     $170 = HEAP32[$169>>2]|0;
-     $171 = $10;
-     $172 = ((($171)) + 12|0);
-     $173 = HEAP32[$172>>2]|0;
-     $174 = (($173) + 1)|0;
-     $175 = $174<<3;
-     $176 = (_mrb_realloc($167,$170,$175)|0);
-     $177 = $10;
-     $178 = ((($177)) + 20|0);
-     HEAP32[$178>>2] = $176;
-     $179 = $7;
-     $180 = $14;
-     $181 = (($179) + ($180))|0;
-     HEAP32[$16>>2] = $181;
-     $182 = $6;
-     $183 = ((($182)) + 32|0);
-     $184 = HEAP32[$183>>2]|0;
-     $185 = $7;
-     $186 = $14;
-     $187 = (($185) + ($186))|0;
-     $188 = (($184) + ($187<<1)|0);
-     $189 = HEAP16[$188>>1]|0;
-     $190 = ((($16)) + 4|0);
-     HEAP16[$190>>1] = $189;
-     $191 = $10;
-     $192 = ((($191)) + 20|0);
-     $193 = HEAP32[$192>>2]|0;
-     $194 = $10;
-     $195 = ((($194)) + 12|0);
-     $196 = HEAP32[$195>>2]|0;
-     $197 = (($193) + ($196<<3)|0);
-     ;HEAP32[$197>>2]=HEAP32[$16>>2]|0;HEAP32[$197+4>>2]=HEAP32[$16+4>>2]|0;
-     $198 = $10;
-     $199 = ((($198)) + 12|0);
-     $200 = HEAP32[$199>>2]|0;
-     $201 = (($200) + 1)|0;
-     HEAP32[$199>>2] = $201;
-     $202 = $6;
-     $203 = ((($202)) + 32|0);
-     $204 = HEAP32[$203>>2]|0;
-     $205 = $7;
-     $206 = $14;
-     $207 = (($205) + ($206))|0;
-     $208 = (($204) + ($207<<1)|0);
-     $209 = HEAP16[$208>>1]|0;
-     $15 = $209;
-    }
-    $210 = $14;
-    $211 = (($210) + 1)|0;
-    $14 = $211;
-   }
-   break;
-  }
-  default: {
-  }
-  }
- } while(0);
- $212 = $10;
- $4 = $212;
- $213 = $4;
- STACKTOP = sp;return ($213|0);
-}
-function _select_line_type($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $3 = 0, $4 = 0;
- var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $2 = $0;
- $3 = $1;
- $4 = 0;
- $5 = -1;
- $6 = 0;
- while(1) {
-  $7 = $6;
-  $8 = $3;
-  $9 = ($7>>>0)<($8>>>0);
-  if (!($9)) {
-   break;
-  }
-  $10 = $2;
-  $11 = $6;
-  $12 = (($10) + ($11<<1)|0);
-  $13 = HEAP16[$12>>1]|0;
-  $14 = $13&65535;
-  $15 = $5;
-  $16 = ($14|0)!=($15|0);
-  if ($16) {
-   $17 = $4;
-   $18 = (($17) + 1)|0;
-   $4 = $18;
-  }
-  $19 = $6;
-  $20 = (($19) + 1)|0;
-  $6 = $20;
- }
- $21 = $3;
- $22 = $21<<1;
- $23 = $4;
- $24 = $23<<3;
- $25 = ($22>>>0)<=($24>>>0);
- $26 = $25 ? 0 : 1;
- STACKTOP = sp;return ($26|0);
-}
-function _mrb_debug_info_free($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;
- var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $5 = $3;
- $6 = ($5|0)!=(0|0);
- if (!($6)) {
-  STACKTOP = sp;return;
- }
- $4 = 0;
- while(1) {
-  $7 = $4;
-  $8 = $3;
-  $9 = ((($8)) + 4|0);
-  $10 = HEAP16[$9>>1]|0;
-  $11 = $10&65535;
-  $12 = ($7>>>0)<($11>>>0);
-  $13 = $2;
-  $14 = $3;
-  $15 = ((($14)) + 8|0);
-  $16 = HEAP32[$15>>2]|0;
-  if (!($12)) {
-   break;
-  }
-  $17 = $4;
-  $18 = (($16) + ($17<<2)|0);
-  $19 = HEAP32[$18>>2]|0;
-  $20 = ((($19)) + 20|0);
-  $21 = HEAP32[$20>>2]|0;
-  _mrb_free($13,$21);
-  $22 = $2;
-  $23 = $3;
-  $24 = ((($23)) + 8|0);
-  $25 = HEAP32[$24>>2]|0;
-  $26 = $4;
-  $27 = (($25) + ($26<<2)|0);
-  $28 = HEAP32[$27>>2]|0;
-  _mrb_free($22,$28);
-  $29 = $4;
-  $30 = (($29) + 1)|0;
-  $4 = $30;
- }
- _mrb_free($13,$16);
- $31 = $2;
- $32 = $3;
- _mrb_free($31,$32);
- STACKTOP = sp;return;
-}
-function _mrb_exc_new($0,$1,$2,$3,$4) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- $4 = $4|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $9 = sp;
- $5 = $1;
- $6 = $2;
- $7 = $3;
- $8 = $4;
- $10 = $5;
- $11 = $7;
- $12 = $8;
- _mrb_str_new($9,$10,$11,$12);
- $13 = $5;
- $14 = $6;
- _mrb_obj_new($0,$13,$14,1,$9);
- STACKTOP = sp;return;
-}
-function _mrb_exc_new_str($0,$1,$2,$3) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- var $$byval_copy = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $$byval_copy = sp + 16|0;
- $6 = sp;
- $4 = $1;
- $5 = $2;
- $7 = $4;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$3>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$3+4>>2]|0;
- _mrb_str_to_str($6,$7,$$byval_copy);
- ;HEAP32[$3>>2]=HEAP32[$6>>2]|0;HEAP32[$3+4>>2]=HEAP32[$6+4>>2]|0;
- $8 = $4;
- $9 = $5;
- _mrb_obj_new($0,$8,$9,1,$3);
- STACKTOP = sp;return;
-}
-function _mrb_exc_raise($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $$byval_copy = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0;
- var $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $$byval_copy = sp + 8|0;
- $2 = $0;
- $3 = HEAP32[$1>>2]|0;
- $4 = $2;
- $5 = ((($4)) + 20|0);
- HEAP32[$5>>2] = $3;
- $6 = $2;
- $7 = ((($6)) + 92|0);
- $8 = ((($7)) + 452|0);
- $9 = HEAP8[$8>>0]|0;
- $10 = ($9&255) >>> 3;
- $11 = $10 & 1;
- $12 = ($11<<24>>24)!=(0);
- if (!($12)) {
-  $13 = $2;
-  $14 = $2;
-  $15 = ((($14)) + 20|0);
-  $16 = HEAP32[$15>>2]|0;
-  _exc_debug_info($13,$16);
- }
- $17 = $2;
- $18 = HEAP32[$17>>2]|0;
- $19 = ($18|0)!=(0|0);
- $20 = $2;
- if ($19) {
-  $21 = HEAP32[$20>>2]|0;
-  _longjmp(($21|0),1);
-  // unreachable;
- } else {
-  ;HEAP32[$$byval_copy>>2]=HEAP32[$1>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$1+4>>2]|0;
-  _mrb_p($20,$$byval_copy);
-  _abort();
-  // unreachable;
- }
-}
-function _exc_debug_info($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $$byval_copy = 0, $$byval_copy4 = 0, $$byval_copy5 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0;
- var $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0;
- var $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0;
- var $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0;
- var $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0;
- var $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $or$cond = 0, $or$cond3 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 80|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(80|0);
- $$byval_copy5 = sp + 72|0;
- $$byval_copy4 = sp + 64|0;
- $$byval_copy = sp + 56|0;
- $6 = sp + 32|0;
- $11 = sp + 8|0;
- $12 = sp;
- $2 = $0;
- $3 = $1;
- $13 = $2;
- $14 = ((($13)) + 12|0);
- $15 = HEAP32[$14>>2]|0;
- $16 = ((($15)) + 16|0);
- $17 = HEAP32[$16>>2]|0;
- $4 = $17;
- $18 = $4;
- $19 = ((($18)) + 28|0);
- $20 = HEAP32[$19>>2]|0;
- $5 = $20;
- $21 = $2;
- $22 = $3;
- $23 = $2;
- $24 = (_mrb_intern_static($23,67804,5)|0);
- $25 = $4;
- $26 = $2;
- $27 = ((($26)) + 12|0);
- $28 = HEAP32[$27>>2]|0;
- $29 = ((($28)) + 20|0);
- $30 = HEAP32[$29>>2]|0;
- $31 = $25;
- $32 = $30;
- $33 = (($31) - ($32))|0;
- $34 = (($33|0) / 48)&-1;
- _mrb_fixnum_value_917($6,$34);
- ;HEAP32[$$byval_copy>>2]=HEAP32[$6>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$6+4>>2]|0;
- _mrb_obj_iv_set($21,$22,$24,$$byval_copy);
- while(1) {
-  $35 = $4;
-  $36 = $2;
-  $37 = ((($36)) + 12|0);
-  $38 = HEAP32[$37>>2]|0;
-  $39 = ((($38)) + 20|0);
-  $40 = HEAP32[$39>>2]|0;
-  $41 = ($35>>>0)>=($40>>>0);
-  if (!($41)) {
-   label = 11;
-   break;
-  }
-  $42 = $4;
-  $43 = ((($42)) + 32|0);
-  $44 = HEAP32[$43>>2]|0;
-  $7 = $44;
-  $45 = $7;
-  $46 = ($45|0)==(0|0);
-  $47 = $5;
-  $48 = ($47|0)!=(0|0);
-  $or$cond = $46 & $48;
-  if ($or$cond) {
-   $49 = $5;
-   $50 = ((($49)) + -4|0);
-   $7 = $50;
-  }
-  $51 = $7;
-  $52 = ($51|0)!=(0|0);
-  if ($52) {
-   $53 = $4;
-   $54 = ((($53)) + 4|0);
-   $55 = HEAP32[$54>>2]|0;
-   $56 = ($55|0)!=(0|0);
-   if ($56) {
-    $57 = $4;
-    $58 = ((($57)) + 4|0);
-    $59 = HEAP32[$58>>2]|0;
-    $60 = HEAP32[$59>>2]|0;
-    $61 = $60 >>> 11;
-    $62 = $61 & 128;
-    $63 = ($62|0)!=(0);
-    if (!($63)) {
-     $64 = $4;
-     $65 = ((($64)) + 4|0);
-     $66 = HEAP32[$65>>2]|0;
-     $67 = ((($66)) + 12|0);
-     $68 = HEAP32[$67>>2]|0;
-     $8 = $68;
-     $69 = $8;
-     $70 = $7;
-     $71 = $8;
-     $72 = ((($71)) + 8|0);
-     $73 = HEAP32[$72>>2]|0;
-     $74 = $70;
-     $75 = $73;
-     $76 = (($74) - ($75))|0;
-     $77 = (($76|0) / 4)&-1;
-     $78 = (_mrb_debug_get_line($69,$77)|0);
-     $9 = $78;
-     $79 = $8;
-     $80 = $7;
-     $81 = $8;
-     $82 = ((($81)) + 8|0);
-     $83 = HEAP32[$82>>2]|0;
-     $84 = $80;
-     $85 = $83;
-     $86 = (($84) - ($85))|0;
-     $87 = (($86|0) / 4)&-1;
-     $88 = (_mrb_debug_get_filename($79,$87)|0);
-     $10 = $88;
-     $89 = $9;
-     $90 = ($89|0)!=(-1);
-     $91 = $10;
-     $92 = ($91|0)!=(0|0);
-     $or$cond3 = $90 & $92;
-     if ($or$cond3) {
-      break;
-     }
-    }
-   }
-  }
-  $104 = $4;
-  $105 = ((($104)) + 28|0);
-  $106 = HEAP32[$105>>2]|0;
-  $5 = $106;
-  $107 = $4;
-  $108 = ((($107)) + -48|0);
-  $4 = $108;
- }
- if ((label|0) == 11) {
-  STACKTOP = sp;return;
- }
- $93 = $2;
- $94 = $3;
- $95 = $2;
- $96 = (_mrb_intern_static($95,67810,4)|0);
- $97 = $2;
- $98 = $10;
- _mrb_str_new_cstr($11,$97,$98);
- ;HEAP32[$$byval_copy4>>2]=HEAP32[$11>>2]|0;HEAP32[$$byval_copy4+4>>2]=HEAP32[$11+4>>2]|0;
- _mrb_obj_iv_set($93,$94,$96,$$byval_copy4);
- $99 = $2;
- $100 = $3;
- $101 = $2;
- $102 = (_mrb_intern_static($101,67815,4)|0);
- $103 = $9;
- _mrb_fixnum_value_917($12,$103);
- ;HEAP32[$$byval_copy5>>2]=HEAP32[$12>>2]|0;HEAP32[$$byval_copy5+4>>2]=HEAP32[$12+4>>2]|0;
- _mrb_obj_iv_set($99,$100,$102,$$byval_copy5);
- STACKTOP = sp;return;
-}
-function _mrb_fixnum_value_917($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = sp;
- $2 = $1;
- $4 = ((($3)) + 4|0);
- HEAP32[$4>>2] = 3;
- $5 = $2;
- HEAP32[$3>>2] = $5;
- ;HEAP32[$0>>2]=HEAP32[$3>>2]|0;HEAP32[$0+4>>2]=HEAP32[$3+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_raise($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);
- $$byval_copy1 = sp + 48|0;
- $$byval_copy = sp + 40|0;
- $6 = sp + 16|0;
- $7 = sp + 8|0;
- $8 = sp;
- $3 = $0;
- $4 = $1;
- $5 = $2;
- $9 = $3;
- $10 = $5;
- _mrb_str_new_cstr($7,$9,$10);
- ;HEAP32[$6>>2]=HEAP32[$7>>2]|0;HEAP32[$6+4>>2]=HEAP32[$7+4>>2]|0;
- $11 = $3;
- $12 = $3;
- $13 = $4;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$6>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$6+4>>2]|0;
- _mrb_exc_new_str($8,$12,$13,$$byval_copy);
- ;HEAP32[$$byval_copy1>>2]=HEAP32[$8>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$8+4>>2]|0;
- _mrb_exc_raise($11,$$byval_copy1);
- // unreachable;
-}
-function _mrb_vformat($0,$1,$2,$3) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- var $$byval_copy = 0, $$byval_copy10 = 0, $$byval_copy11 = 0, $$byval_copy12 = 0, $$byval_copy13 = 0, $$byval_copy14 = 0, $$byval_copy15 = 0, $$byval_copy16 = 0, $$byval_copy6 = 0, $$byval_copy7 = 0, $$byval_copy8 = 0, $$byval_copy9 = 0, $$field$field = 0.0, $$field2 = 0, $$index1 = 0, $$index5 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0;
- var $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0;
- var $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0;
- var $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0;
- var $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0;
- var $89 = 0, $9 = 0, $90 = 0, $91 = 0, $arglist_current = 0, $arglist_next = 0, $expanded = 0, $expanded17 = 0, $expanded19 = 0, $expanded20 = 0, $expanded21 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 192|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(192|0);
- $$byval_copy16 = sp + 176|0;
- $$byval_copy15 = sp + 168|0;
- $$byval_copy14 = sp + 160|0;
- $$byval_copy13 = sp + 152|0;
- $$byval_copy12 = sp + 144|0;
- $$byval_copy11 = sp + 136|0;
- $$byval_copy10 = sp + 128|0;
- $$byval_copy9 = sp + 120|0;
- $$byval_copy8 = sp + 112|0;
- $$byval_copy7 = sp + 104|0;
- $$byval_copy6 = sp + 96|0;
- $$byval_copy = sp + 88|0;
- $10 = sp + 56|0;
- $12 = sp + 48|0;
- $13 = sp + 40|0;
- $14 = sp + 32|0;
- $15 = sp + 24|0;
- $16 = sp + 16|0;
- $17 = sp + 8|0;
- $18 = sp;
- $4 = $1;
- $5 = $2;
- $6 = $3;
- $19 = $5;
- $7 = $19;
- $20 = $7;
- $8 = $20;
- $21 = $4;
- _mrb_ary_new_capa($10,$21,4);
- while(1) {
-  $22 = $7;
-  $23 = HEAP8[$22>>0]|0;
-  $24 = ($23<<24>>24)!=(0);
-  if (!($24)) {
-   break;
-  }
-  $25 = $7;
-  $26 = ((($25)) + 1|0);
-  $7 = $26;
-  $27 = HEAP8[$25>>0]|0;
-  $11 = $27;
-  $28 = $11;
-  $29 = $28 << 24 >> 24;
-  $30 = ($29|0)==(37);
-  if ($30) {
-   $31 = $7;
-   $32 = HEAP8[$31>>0]|0;
-   $33 = $32 << 24 >> 24;
-   $34 = ($33|0)==(83);
-   if (!($34)) {
-    continue;
-   }
-   $35 = $7;
-   $36 = $8;
-   $37 = $35;
-   $38 = $36;
-   $39 = (($37) - ($38))|0;
-   $40 = (($39) - 1)|0;
-   $9 = $40;
-   $41 = $4;
-   $42 = $4;
-   $43 = $8;
-   $44 = $9;
-   _mrb_str_new($12,$42,$43,$44);
-   ;HEAP32[$$byval_copy>>2]=HEAP32[$10>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$10+4>>2]|0;
-   ;HEAP32[$$byval_copy6>>2]=HEAP32[$12>>2]|0;HEAP32[$$byval_copy6+4>>2]=HEAP32[$12+4>>2]|0;
-   _mrb_ary_push($41,$$byval_copy,$$byval_copy6);
-   $45 = $4;
-   $46 = $6;
-   $arglist_current = HEAP32[$46>>2]|0;
-   $47 = $arglist_current;
-   $48 = ((0) + 4|0);
-   $expanded17 = $48;
-   $expanded = (($expanded17) - 1)|0;
-   $49 = (($47) + ($expanded))|0;
-   $50 = ((0) + 4|0);
-   $expanded21 = $50;
-   $expanded20 = (($expanded21) - 1)|0;
-   $expanded19 = $expanded20 ^ -1;
-   $51 = $49 & $expanded19;
-   $52 = $51;
-   $$field$field = +HEAPF32[$52>>2];
-   $$index1 = ((($52)) + 4|0);
-   $$field2 = HEAP32[$$index1>>2]|0;
-   $arglist_next = ((($52)) + 8|0);
-   HEAP32[$46>>2] = $arglist_next;
-   HEAPF32[$14>>2] = $$field$field;
-   $$index5 = ((($14)) + 4|0);
-   HEAP32[$$index5>>2] = $$field2;
-   ;HEAP32[$13>>2]=HEAP32[$14>>2]|0;HEAP32[$13+4>>2]=HEAP32[$14+4>>2]|0;
-   ;HEAP32[$$byval_copy7>>2]=HEAP32[$10>>2]|0;HEAP32[$$byval_copy7+4>>2]=HEAP32[$10+4>>2]|0;
-   ;HEAP32[$$byval_copy8>>2]=HEAP32[$13>>2]|0;HEAP32[$$byval_copy8+4>>2]=HEAP32[$13+4>>2]|0;
-   _mrb_ary_push($45,$$byval_copy7,$$byval_copy8);
-   $53 = $7;
-   $54 = ((($53)) + 1|0);
-   $8 = $54;
-   continue;
-  }
-  $55 = $11;
-  $56 = $55 << 24 >> 24;
-  $57 = ($56|0)==(92);
-  if (!($57)) {
-   continue;
-  }
-  $58 = $7;
-  $59 = HEAP8[$58>>0]|0;
-  $60 = ($59<<24>>24)!=(0);
-  if (!($60)) {
-   break;
-  }
-  $61 = $7;
-  $62 = $8;
-  $63 = $61;
-  $64 = $62;
-  $65 = (($63) - ($64))|0;
-  $66 = (($65) - 1)|0;
-  $9 = $66;
-  $67 = $4;
-  $68 = $4;
-  $69 = $8;
-  $70 = $9;
-  _mrb_str_new($15,$68,$69,$70);
-  ;HEAP32[$$byval_copy9>>2]=HEAP32[$10>>2]|0;HEAP32[$$byval_copy9+4>>2]=HEAP32[$10+4>>2]|0;
-  ;HEAP32[$$byval_copy10>>2]=HEAP32[$15>>2]|0;HEAP32[$$byval_copy10+4>>2]=HEAP32[$15+4>>2]|0;
-  _mrb_ary_push($67,$$byval_copy9,$$byval_copy10);
-  $71 = $4;
-  $72 = $4;
-  $73 = $7;
-  _mrb_str_new($16,$72,$73,1);
-  ;HEAP32[$$byval_copy11>>2]=HEAP32[$10>>2]|0;HEAP32[$$byval_copy11+4>>2]=HEAP32[$10+4>>2]|0;
-  ;HEAP32[$$byval_copy12>>2]=HEAP32[$16>>2]|0;HEAP32[$$byval_copy12+4>>2]=HEAP32[$16+4>>2]|0;
-  _mrb_ary_push($71,$$byval_copy11,$$byval_copy12);
-  $74 = $7;
-  $75 = ((($74)) + 1|0);
-  $7 = $75;
-  $8 = $75;
- }
- $76 = $8;
- $77 = $5;
- $78 = ($76|0)==($77|0);
- if ($78) {
-  $79 = $4;
-  $80 = $5;
-  _mrb_str_new_cstr($0,$79,$80);
-  STACKTOP = sp;return;
- } else {
-  $81 = $7;
-  $82 = $8;
-  $83 = $81;
-  $84 = $82;
-  $85 = (($83) - ($84))|0;
-  $9 = $85;
-  $86 = $4;
-  $87 = $4;
-  $88 = $8;
-  $89 = $9;
-  _mrb_str_new($17,$87,$88,$89);
-  ;HEAP32[$$byval_copy13>>2]=HEAP32[$10>>2]|0;HEAP32[$$byval_copy13+4>>2]=HEAP32[$10+4>>2]|0;
-  ;HEAP32[$$byval_copy14>>2]=HEAP32[$17>>2]|0;HEAP32[$$byval_copy14+4>>2]=HEAP32[$17+4>>2]|0;
-  _mrb_ary_push($86,$$byval_copy13,$$byval_copy14);
-  $90 = $4;
-  $91 = $4;
-  _mrb_str_new($18,$91,0,0);
-  ;HEAP32[$$byval_copy15>>2]=HEAP32[$10>>2]|0;HEAP32[$$byval_copy15+4>>2]=HEAP32[$10+4>>2]|0;
-  ;HEAP32[$$byval_copy16>>2]=HEAP32[$18>>2]|0;HEAP32[$$byval_copy16+4>>2]=HEAP32[$18+4>>2]|0;
-  _mrb_ary_join($0,$90,$$byval_copy15,$$byval_copy16);
-  STACKTOP = sp;return;
- }
-}
-function _mrb_format($0,$1,$2,$varargs) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $varargs = $varargs|0;
- var $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);
- $5 = sp + 16|0;
- $6 = sp + 8|0;
- $7 = sp;
- $3 = $1;
- $4 = $2;
- HEAP32[$5>>2] = $varargs;
- $8 = $3;
- $9 = $4;
- _mrb_vformat($7,$8,$9,$5);
- ;HEAP32[$6>>2]=HEAP32[$7>>2]|0;HEAP32[$6+4>>2]=HEAP32[$7+4>>2]|0;
- ;HEAP32[$0>>2]=HEAP32[$6>>2]|0;HEAP32[$0+4>>2]=HEAP32[$6+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_raisef($0,$1,$2,$varargs) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $varargs = $varargs|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 80|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(80|0);
- $$byval_copy1 = sp + 64|0;
- $$byval_copy = sp + 56|0;
- $6 = sp + 24|0;
- $7 = sp + 16|0;
- $8 = sp + 8|0;
- $9 = sp;
- $3 = $0;
- $4 = $1;
- $5 = $2;
- HEAP32[$6>>2] = $varargs;
- $10 = $3;
- $11 = $5;
- _mrb_vformat($8,$10,$11,$6);
- ;HEAP32[$7>>2]=HEAP32[$8>>2]|0;HEAP32[$7+4>>2]=HEAP32[$8+4>>2]|0;
- $12 = $3;
- $13 = $3;
- $14 = $4;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$7>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$7+4>>2]|0;
- _mrb_exc_new_str($9,$13,$14,$$byval_copy);
- ;HEAP32[$$byval_copy1>>2]=HEAP32[$9>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$9+4>>2]|0;
- _mrb_exc_raise($12,$$byval_copy1);
- // unreachable;
-}
-function _mrb_name_error($0,$1,$2,$varargs) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $varargs = $varargs|0;
- var $$byval_copy = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 96|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(96|0);
- $$byval_copy = sp + 80|0;
- $6 = sp + 56|0;
- $7 = sp + 40|0;
- $8 = sp + 24|0;
- $9 = sp + 16|0;
- $10 = sp + 8|0;
- $11 = sp;
- $3 = $0;
- $4 = $1;
- $5 = $2;
- HEAP32[$8>>2] = $varargs;
- $12 = $3;
- $13 = $5;
- _mrb_vformat($9,$12,$13,$8);
- ;HEAP32[$7>>2]=HEAP32[$9>>2]|0;HEAP32[$7+4>>2]=HEAP32[$9+4>>2]|0;
- $14 = ((($7)) + 8|0);
- $15 = $4;
- _mrb_symbol_value_928($10,$15);
- ;HEAP32[$14>>2]=HEAP32[$10>>2]|0;HEAP32[$14+4>>2]=HEAP32[$10+4>>2]|0;
- $16 = $3;
- $17 = $3;
- $18 = (_mrb_class_get($17,67820)|0);
- _mrb_obj_new($11,$16,$18,2,$7);
- ;HEAP32[$6>>2]=HEAP32[$11>>2]|0;HEAP32[$6+4>>2]=HEAP32[$11+4>>2]|0;
- $19 = $3;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$6>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$6+4>>2]|0;
- _mrb_exc_raise($19,$$byval_copy);
- // unreachable;
-}
-function _mrb_symbol_value_928($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = sp;
- $2 = $1;
- $4 = ((($3)) + 4|0);
- HEAP32[$4>>2] = 4;
- $5 = $2;
- HEAP32[$3>>2] = $5;
- ;HEAP32[$0>>2]=HEAP32[$3>>2]|0;HEAP32[$0+4>>2]=HEAP32[$3+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_warn($0,$1,$varargs) {
- $0 = $0|0;
- $1 = $1|0;
- $varargs = $varargs|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;
- var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);
- $4 = sp + 16|0;
- $5 = sp + 8|0;
- $6 = sp;
- $2 = $0;
- $3 = $1;
- HEAP32[$4>>2] = $varargs;
- $7 = $2;
- $8 = $3;
- _mrb_vformat($6,$7,$8,$4);
- ;HEAP32[$5>>2]=HEAP32[$6>>2]|0;HEAP32[$5+4>>2]=HEAP32[$6+4>>2]|0;
- $9 = HEAP32[637]|0;
- (_fputs(67830,$9)|0);
- $10 = HEAP32[$5>>2]|0;
- $11 = HEAP32[$10>>2]|0;
- $12 = $11 >>> 11;
- $13 = $12 & 8;
- $14 = ($13|0)!=(0);
- $15 = HEAP32[$5>>2]|0;
- $16 = ((($15)) + 12|0);
- if ($14) {
-  $32 = $16;
- } else {
-  $17 = ((($16)) + 8|0);
-  $18 = HEAP32[$17>>2]|0;
-  $32 = $18;
- }
- $19 = HEAP32[$5>>2]|0;
- $20 = HEAP32[$19>>2]|0;
- $21 = $20 >>> 11;
- $22 = $21 & 8;
- $23 = ($22|0)!=(0);
- $24 = HEAP32[$5>>2]|0;
- if ($23) {
-  $25 = HEAP32[$24>>2]|0;
-  $26 = $25 >>> 11;
-  $27 = $26 & 496;
-  $28 = $27 >> 4;
-  $33 = $28;
-  $31 = HEAP32[637]|0;
-  (_fwrite($32,$33,1,$31)|0);
-  STACKTOP = sp;return;
- } else {
-  $29 = ((($24)) + 12|0);
-  $30 = HEAP32[$29>>2]|0;
-  $33 = $30;
-  $31 = HEAP32[637]|0;
-  (_fwrite($32,$33,1,$31)|0);
-  STACKTOP = sp;return;
- }
-}
-function _mrb_bug($0,$1,$varargs) {
- $0 = $0|0;
- $1 = $1|0;
- $varargs = $varargs|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;
- var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);
- $4 = sp + 16|0;
- $5 = sp + 8|0;
- $6 = sp;
- $2 = $0;
- $3 = $1;
- HEAP32[$4>>2] = $varargs;
- $7 = $2;
- $8 = $3;
- _mrb_vformat($6,$7,$8,$4);
- ;HEAP32[$5>>2]=HEAP32[$6>>2]|0;HEAP32[$5+4>>2]=HEAP32[$6+4>>2]|0;
- $9 = HEAP32[637]|0;
- (_fputs(67840,$9)|0);
- $10 = HEAP32[$5>>2]|0;
- $11 = HEAP32[$10>>2]|0;
- $12 = $11 >>> 11;
- $13 = $12 & 8;
- $14 = ($13|0)!=(0);
- $15 = HEAP32[$5>>2]|0;
- $16 = ((($15)) + 12|0);
- if ($14) {
-  $32 = $16;
- } else {
-  $17 = ((($16)) + 8|0);
-  $18 = HEAP32[$17>>2]|0;
-  $32 = $18;
- }
- $19 = HEAP32[$5>>2]|0;
- $20 = HEAP32[$19>>2]|0;
- $21 = $20 >>> 11;
- $22 = $21 & 8;
- $23 = ($22|0)!=(0);
- $24 = HEAP32[$5>>2]|0;
- if ($23) {
-  $25 = HEAP32[$24>>2]|0;
-  $26 = $25 >>> 11;
-  $27 = $26 & 496;
-  $28 = $27 >> 4;
-  $33 = $28;
-  $31 = HEAP32[637]|0;
-  (_fwrite($32,$33,1,$31)|0);
-  _exit(1);
-  // unreachable;
- } else {
-  $29 = ((($24)) + 12|0);
-  $30 = HEAP32[$29>>2]|0;
-  $33 = $30;
-  $31 = HEAP32[637]|0;
-  (_fwrite($32,$33,1,$31)|0);
-  _exit(1);
-  // unreachable;
- }
-}
-function _mrb_make_exception($0,$1,$2,$3) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- var $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $4 = $1;
- $5 = $2;
- $6 = $3;
- $7 = $4;
- $8 = $5;
- $9 = $6;
- _make_exception($0,$7,$8,$9,1);
- STACKTOP = sp;return;
-}
-function _make_exception($0,$1,$2,$3,$4) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- $4 = $4|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $$byval_copy2 = 0, $$byval_copy3 = 0, $$byval_copy4 = 0, $$byval_copy5 = 0, $$byval_copy6 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0;
- var $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $40 = 0, $41 = 0, $42 = 0;
- var $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0;
- var $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 160|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(160|0);
- $$byval_copy6 = sp + 136|0;
- $$byval_copy5 = sp + 128|0;
- $$byval_copy4 = sp + 120|0;
- $$byval_copy3 = sp + 112|0;
- $$byval_copy2 = sp + 104|0;
- $$byval_copy1 = sp + 96|0;
- $$byval_copy = sp + 88|0;
- $vararg_buffer = sp;
- $9 = sp + 64|0;
- $11 = sp + 48|0;
- $12 = sp + 40|0;
- $13 = sp + 32|0;
- $15 = sp + 16|0;
- $16 = sp + 8|0;
- $5 = $1;
- $6 = $2;
- $7 = $3;
- $8 = $4;
- _mrb_nil_value_936($11);
- ;HEAP32[$9>>2]=HEAP32[$11>>2]|0;HEAP32[$9+4>>2]=HEAP32[$11+4>>2]|0;
- $17 = $6;
- L1: do {
-  switch ($17|0) {
-  case 0:  {
-   break;
-  }
-  case 1:  {
-   $18 = $7;
-   $19 = ((($18)) + 4|0);
-   $20 = HEAP32[$19>>2]|0;
-   $21 = ($20|0)==(0);
-   if ($21) {
-    $22 = $7;
-    $23 = HEAP32[$22>>2]|0;
-    $24 = ($23|0)!=(0);
-    if (!($24)) {
-     break L1;
-    }
-   }
-   $25 = $8;
-   $26 = ($25<<24>>24)!=(0);
-   do {
-    if ($26) {
-     $27 = $5;
-     $28 = $7;
-     ;HEAP32[$$byval_copy>>2]=HEAP32[$28>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$28+4>>2]|0;
-     _mrb_check_string_type($12,$27,$$byval_copy);
-     ;HEAP32[$9>>2]=HEAP32[$12>>2]|0;HEAP32[$9+4>>2]=HEAP32[$12+4>>2]|0;
-     $29 = ((($9)) + 4|0);
-     $30 = HEAP32[$29>>2]|0;
-     $31 = ($30|0)==(0);
-     if ($31) {
-      $32 = HEAP32[$9>>2]|0;
-      $33 = ($32|0)!=(0);
-      if (!($33)) {
-       break;
-      }
-     }
-     $34 = $5;
-     $35 = $5;
-     $36 = (_mrb_class_get($35,68266)|0);
-     ;HEAP32[$$byval_copy1>>2]=HEAP32[$9>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$9+4>>2]|0;
-     _mrb_exc_new_str($13,$34,$36,$$byval_copy1);
-     ;HEAP32[$9>>2]=HEAP32[$13>>2]|0;HEAP32[$9+4>>2]=HEAP32[$13+4>>2]|0;
-     break L1;
-    }
-   } while(0);
-   $10 = 0;
-   label = 10;
-   break;
-  }
-  case 3: case 2:  {
-   $10 = 1;
-   label = 10;
-   break;
-  }
-  default: {
-   $52 = $5;
-   $53 = $5;
-   $54 = (_mrb_class_get($53,69160)|0);
-   $55 = $6;
-   _mrb_fixnum_value_917($16,$55);
-   ;HEAP8[$vararg_buffer>>0]=HEAP8[$16>>0]|0;HEAP8[$vararg_buffer+1>>0]=HEAP8[$16+1>>0]|0;HEAP8[$vararg_buffer+2>>0]=HEAP8[$16+2>>0]|0;HEAP8[$vararg_buffer+3>>0]=HEAP8[$16+3>>0]|0;HEAP8[$vararg_buffer+4>>0]=HEAP8[$16+4>>0]|0;HEAP8[$vararg_buffer+5>>0]=HEAP8[$16+5>>0]|0;HEAP8[$vararg_buffer+6>>0]=HEAP8[$16+6>>0]|0;HEAP8[$vararg_buffer+7>>0]=HEAP8[$16+7>>0]|0;
-   _mrb_raisef($52,$54,67888,$vararg_buffer);
-   // unreachable;
-  }
-  }
- } while(0);
- do {
-  if ((label|0) == 10) {
-   $37 = $5;
-   $38 = (_mrb_intern_static($37,67846,9)|0);
-   $14 = $38;
-   $39 = $5;
-   $40 = $7;
-   $41 = $14;
-   ;HEAP32[$$byval_copy2>>2]=HEAP32[$40>>2]|0;HEAP32[$$byval_copy2+4>>2]=HEAP32[$40+4>>2]|0;
-   $42 = (_mrb_respond_to($39,$$byval_copy2,$41)|0);
-   $43 = ($42<<24>>24)!=(0);
-   $44 = $5;
-   if ($43) {
-    $45 = $7;
-    $46 = $14;
-    $47 = $10;
-    $48 = $7;
-    $49 = ((($48)) + 8|0);
-    ;HEAP32[$$byval_copy3>>2]=HEAP32[$45>>2]|0;HEAP32[$$byval_copy3+4>>2]=HEAP32[$45+4>>2]|0;
-    _mrb_funcall_argv($15,$44,$$byval_copy3,$46,$47,$49);
-    ;HEAP32[$9>>2]=HEAP32[$15>>2]|0;HEAP32[$9+4>>2]=HEAP32[$15+4>>2]|0;
-    break;
-   } else {
-    $50 = $5;
-    $51 = (_mrb_class_get($50,69204)|0);
-    _mrb_raise($44,$51,67856);
-    // unreachable;
-   }
-  }
- } while(0);
- $56 = $6;
- $57 = ($56|0)>(0);
- if (!($57)) {
-  ;HEAP32[$0>>2]=HEAP32[$9>>2]|0;HEAP32[$0+4>>2]=HEAP32[$9+4>>2]|0;
-  STACKTOP = sp;return;
- }
- $58 = $5;
- $59 = $5;
- $60 = ((($59)) + 568|0);
- $61 = HEAP32[$60>>2]|0;
- ;HEAP32[$$byval_copy4>>2]=HEAP32[$9>>2]|0;HEAP32[$$byval_copy4+4>>2]=HEAP32[$9+4>>2]|0;
- $62 = (_mrb_obj_is_kind_of($58,$$byval_copy4,$61)|0);
- $63 = ($62<<24>>24)!=(0);
- if (!($63)) {
-  $64 = $5;
-  $65 = $5;
-  $66 = (_mrb_class_get($65,69204)|0);
-  _mrb_raise($64,$66,67928);
-  // unreachable;
- }
- $67 = $6;
- $68 = ($67|0)>(2);
- if (!($68)) {
-  ;HEAP32[$0>>2]=HEAP32[$9>>2]|0;HEAP32[$0+4>>2]=HEAP32[$9+4>>2]|0;
-  STACKTOP = sp;return;
- }
- $69 = $5;
- $70 = $7;
- $71 = ((($70)) + 16|0);
- ;HEAP32[$$byval_copy5>>2]=HEAP32[$9>>2]|0;HEAP32[$$byval_copy5+4>>2]=HEAP32[$9+4>>2]|0;
- ;HEAP32[$$byval_copy6>>2]=HEAP32[$71>>2]|0;HEAP32[$$byval_copy6+4>>2]=HEAP32[$71+4>>2]|0;
- _set_backtrace($69,$$byval_copy5,$$byval_copy6);
- ;HEAP32[$0>>2]=HEAP32[$9>>2]|0;HEAP32[$0+4>>2]=HEAP32[$9+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_nil_value_936($0) {
- $0 = $0|0;
- var $1 = 0, $2 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $1 = sp;
- $2 = ((($1)) + 4|0);
- HEAP32[$2>>2] = 0;
- HEAP32[$1>>2] = 0;
- ;HEAP32[$0>>2]=HEAP32[$1>>2]|0;HEAP32[$0+4>>2]=HEAP32[$1+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _set_backtrace($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $3 = 0, $4 = 0, $5 = 0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $$byval_copy = sp + 24|0;
- $vararg_buffer = sp;
- $4 = sp + 8|0;
- $3 = $0;
- $5 = $3;
- ;HEAP8[$vararg_buffer>>0]=HEAP8[$2>>0]|0;HEAP8[$vararg_buffer+1>>0]=HEAP8[$2+1>>0]|0;HEAP8[$vararg_buffer+2>>0]=HEAP8[$2+2>>0]|0;HEAP8[$vararg_buffer+3>>0]=HEAP8[$2+3>>0]|0;HEAP8[$vararg_buffer+4>>0]=HEAP8[$2+4>>0]|0;HEAP8[$vararg_buffer+5>>0]=HEAP8[$2+5>>0]|0;HEAP8[$vararg_buffer+6>>0]=HEAP8[$2+6>>0]|0;HEAP8[$vararg_buffer+7>>0]=HEAP8[$2+7>>0]|0;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$1>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$1+4>>2]|0;
- _mrb_funcall($4,$5,$$byval_copy,67954,1,$vararg_buffer);
- STACKTOP = sp;return;
-}
-function _mrb_obj_value_946($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = sp;
- $2 = $1;
- $4 = $2;
- $5 = HEAP32[$4>>2]|0;
- $6 = $5 & 255;
- $7 = ((($3)) + 4|0);
- HEAP32[$7>>2] = $6;
- $8 = $2;
- HEAP32[$3>>2] = $8;
- ;HEAP32[$0>>2]=HEAP32[$3>>2]|0;HEAP32[$0+4>>2]=HEAP32[$3+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_no_method_error($0,$1,$2,$3,$varargs) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- $varargs = $varargs|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, $vararg_ptr1 = 0;
- var $vararg_ptr2 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 112|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(112|0);
- $$byval_copy1 = sp + 104|0;
- $$byval_copy = sp + 96|0;
- $vararg_buffer = sp;
- $7 = sp + 72|0;
- $8 = sp + 56|0;
- $9 = sp + 48|0;
- $10 = sp + 40|0;
- $11 = sp + 32|0;
- $12 = sp + 24|0;
- $4 = $0;
- $5 = $1;
- $6 = $3;
- HEAP32[$8>>2] = $varargs;
- $13 = $4;
- $14 = $4;
- $15 = (_mrb_class_get($14,67968)|0);
- _mrb_obj_value_946($9,$15);
- $16 = $4;
- $17 = $6;
- _mrb_vformat($10,$16,$17,$8);
- $18 = $5;
- _mrb_symbol_value_928($11,$18);
- ;HEAP8[$vararg_buffer>>0]=HEAP8[$10>>0]|0;HEAP8[$vararg_buffer+1>>0]=HEAP8[$10+1>>0]|0;HEAP8[$vararg_buffer+2>>0]=HEAP8[$10+2>>0]|0;HEAP8[$vararg_buffer+3>>0]=HEAP8[$10+3>>0]|0;HEAP8[$vararg_buffer+4>>0]=HEAP8[$10+4>>0]|0;HEAP8[$vararg_buffer+5>>0]=HEAP8[$10+5>>0]|0;HEAP8[$vararg_buffer+6>>0]=HEAP8[$10+6>>0]|0;HEAP8[$vararg_buffer+7>>0]=HEAP8[$10+7>>0]|0;
- $vararg_ptr1 = ((($vararg_buffer)) + 8|0);
- ;HEAP8[$vararg_ptr1>>0]=HEAP8[$11>>0]|0;HEAP8[$vararg_ptr1+1>>0]=HEAP8[$11+1>>0]|0;HEAP8[$vararg_ptr1+2>>0]=HEAP8[$11+2>>0]|0;HEAP8[$vararg_ptr1+3>>0]=HEAP8[$11+3>>0]|0;HEAP8[$vararg_ptr1+4>>0]=HEAP8[$11+4>>0]|0;HEAP8[$vararg_ptr1+5>>0]=HEAP8[$11+5>>0]|0;HEAP8[$vararg_ptr1+6>>0]=HEAP8[$11+6>>0]|0;HEAP8[$vararg_ptr1+7>>0]=HEAP8[$11+7>>0]|0;
- $vararg_ptr2 = ((($vararg_buffer)) + 16|0);
- ;HEAP8[$vararg_ptr2>>0]=HEAP8[$2>>0]|0;HEAP8[$vararg_ptr2+1>>0]=HEAP8[$2+1>>0]|0;HEAP8[$vararg_ptr2+2>>0]=HEAP8[$2+2>>0]|0;HEAP8[$vararg_ptr2+3>>0]=HEAP8[$2+3>>0]|0;HEAP8[$vararg_ptr2+4>>0]=HEAP8[$2+4>>0]|0;HEAP8[$vararg_ptr2+5>>0]=HEAP8[$2+5>>0]|0;HEAP8[$vararg_ptr2+6>>0]=HEAP8[$2+6>>0]|0;HEAP8[$vararg_ptr2+7>>0]=HEAP8[$2+7>>0]|0;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$9>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$9+4>>2]|0;
- _mrb_funcall($12,$13,$$byval_copy,67982,3,$vararg_buffer);
- ;HEAP32[$7>>2]=HEAP32[$12>>2]|0;HEAP32[$7+4>>2]=HEAP32[$12+4>>2]|0;
- $19 = $4;
- ;HEAP32[$$byval_copy1>>2]=HEAP32[$7>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$7+4>>2]|0;
- _mrb_exc_raise($19,$$byval_copy1);
- // unreachable;
-}
-function _mrb_init_exception($0) {
- $0 = $0|0;
- var $$byval_copy = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0;
- var $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0;
- var $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0;
- var $63 = 0, $64 = 0, $65 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);
- $$byval_copy = sp + 32|0;
- $5 = sp + 8|0;
- $6 = sp;
- $1 = $0;
- $7 = $1;
- $8 = $1;
- $9 = ((($8)) + 32|0);
- $10 = HEAP32[$9>>2]|0;
- $11 = (_mrb_define_class($7,67986,$10)|0);
- $2 = $11;
- $12 = $1;
- $13 = ((($12)) + 568|0);
- HEAP32[$13>>2] = $11;
- $14 = $2;
- $15 = HEAP32[$14>>2]|0;
- $16 = $15 >>> 11;
- $17 = $16 & -256;
- $18 = $17 | 18;
- $19 = $2;
- $20 = HEAP32[$19>>2]|0;
- $21 = $18 & 2097151;
- $22 = $21 << 11;
- $23 = $20 & 2047;
- $24 = $23 | $22;
- HEAP32[$19>>2] = $24;
- $25 = $1;
- $26 = $2;
- _mrb_define_class_method($25,$26,67846,238,4096);
- $27 = $1;
- $28 = $2;
- _mrb_define_method($27,$28,67846,276,4096);
- $29 = $1;
- $30 = $2;
- _mrb_define_method($29,$30,69252,277,4096);
- $31 = $1;
- $32 = $2;
- _mrb_define_method($31,$32,69276,278,0);
- $33 = $1;
- $34 = $2;
- _mrb_define_method($33,$34,67996,279,0);
- $35 = $1;
- $36 = $2;
- _mrb_define_method($35,$36,69281,280,0);
- $37 = $1;
- $38 = $2;
- _mrb_define_method($37,$38,68004,281,0);
- $39 = $1;
- $40 = $1;
- $41 = ((($40)) + 568|0);
- $42 = HEAP32[$41>>2]|0;
- $43 = (_mrb_define_class($39,69566,$42)|0);
- $44 = $1;
- $45 = ((($44)) + 572|0);
- HEAP32[$45>>2] = $43;
- $46 = $1;
- $47 = $1;
- $48 = ((($47)) + 572|0);
- $49 = HEAP32[$48>>2]|0;
- $50 = (_mrb_define_class($46,68266,$49)|0);
- $3 = $50;
- $51 = $1;
- $52 = $3;
- $53 = $1;
- _mrb_str_new_static($5,$53,68014,13);
- ;HEAP32[$$byval_copy>>2]=HEAP32[$5>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$5+4>>2]|0;
- _mrb_exc_new_str($6,$51,$52,$$byval_copy);
- $54 = HEAP32[$6>>2]|0;
- $55 = $1;
- $56 = ((($55)) + 576|0);
- HEAP32[$56>>2] = $54;
- $57 = $1;
- $58 = $1;
- $59 = ((($58)) + 568|0);
- $60 = HEAP32[$59>>2]|0;
- $61 = (_mrb_define_class($57,68028,$60)|0);
- $4 = $61;
- $62 = $1;
- $63 = $4;
- (_mrb_define_class($62,68040,$63)|0);
- $64 = $1;
- $65 = $2;
- (_mrb_define_class($64,68052,$65)|0);
- STACKTOP = sp;return;
-}
-function _exc_exception($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $$byval_copy2 = 0, $$byval_copy3 = 0, $$byval_copy4 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0;
- var $9 = 0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 96|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(96|0);
- $$byval_copy4 = sp + 80|0;
- $$byval_copy3 = sp + 72|0;
- $$byval_copy2 = sp + 64|0;
- $$byval_copy1 = sp + 56|0;
- $$byval_copy = sp + 48|0;
- $vararg_buffer = sp;
- $4 = sp + 32|0;
- $5 = sp + 24|0;
- $7 = sp + 8|0;
- $3 = $1;
- $8 = $3;
- HEAP32[$vararg_buffer>>2] = $5;
- $9 = (_mrb_get_args($8,68084,$vararg_buffer)|0);
- $6 = $9;
- $10 = $6;
- $11 = ($10|0)==(0);
- if ($11) {
-  ;HEAP32[$0>>2]=HEAP32[$2>>2]|0;HEAP32[$0+4>>2]=HEAP32[$2+4>>2]|0;
-  STACKTOP = sp;return;
- }
- $12 = $3;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
- ;HEAP32[$$byval_copy1>>2]=HEAP32[$5>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$5+4>>2]|0;
- $13 = (_mrb_obj_equal($12,$$byval_copy,$$byval_copy1)|0);
- $14 = ($13<<24>>24)!=(0);
- if ($14) {
-  ;HEAP32[$0>>2]=HEAP32[$2>>2]|0;HEAP32[$0+4>>2]=HEAP32[$2+4>>2]|0;
-  STACKTOP = sp;return;
- } else {
-  $15 = $3;
-  ;HEAP32[$$byval_copy2>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy2+4>>2]=HEAP32[$2+4>>2]|0;
-  _mrb_obj_clone($7,$15,$$byval_copy2);
-  ;HEAP32[$4>>2]=HEAP32[$7>>2]|0;HEAP32[$4+4>>2]=HEAP32[$7+4>>2]|0;
-  $16 = $3;
-  $17 = $3;
-  $18 = (_mrb_intern_static($17,68069,4)|0);
-  ;HEAP32[$$byval_copy3>>2]=HEAP32[$4>>2]|0;HEAP32[$$byval_copy3+4>>2]=HEAP32[$4+4>>2]|0;
-  ;HEAP32[$$byval_copy4>>2]=HEAP32[$5>>2]|0;HEAP32[$$byval_copy4+4>>2]=HEAP32[$5+4>>2]|0;
-  _mrb_iv_set($16,$$byval_copy3,$18,$$byval_copy4);
-  ;HEAP32[$0>>2]=HEAP32[$4>>2]|0;HEAP32[$0+4>>2]=HEAP32[$4+4>>2]|0;
-  STACKTOP = sp;return;
- }
-}
-function _exc_initialize($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $10 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);
- $$byval_copy1 = sp + 32|0;
- $$byval_copy = sp + 24|0;
- $vararg_buffer = sp;
- $4 = sp + 8|0;
- $3 = $1;
- $5 = $3;
- HEAP32[$vararg_buffer>>2] = $4;
- $6 = (_mrb_get_args($5,68084,$vararg_buffer)|0);
- $7 = ($6|0)==(1);
- if (!($7)) {
-  ;HEAP32[$0>>2]=HEAP32[$2>>2]|0;HEAP32[$0+4>>2]=HEAP32[$2+4>>2]|0;
-  STACKTOP = sp;return;
- }
- $8 = $3;
- $9 = $3;
- $10 = (_mrb_intern_static($9,68069,4)|0);
- ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
- ;HEAP32[$$byval_copy1>>2]=HEAP32[$4>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$4+4>>2]|0;
- _mrb_iv_set($8,$$byval_copy,$10,$$byval_copy1);
- ;HEAP32[$0>>2]=HEAP32[$2>>2]|0;HEAP32[$0+4>>2]=HEAP32[$2+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _exc_to_s($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $3 = 0, $4 = 0, $5 = 0;
- var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);
- $$byval_copy1 = sp + 32|0;
- $$byval_copy = sp + 24|0;
- $4 = sp + 8|0;
- $3 = $1;
- $6 = $3;
- $7 = $3;
- $8 = (_mrb_intern_static($7,68069,4)|0);
- ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
- _mrb_attr_get($4,$6,$$byval_copy,$8);
- $9 = ((($4)) + 4|0);
- $10 = HEAP32[$9>>2]|0;
- $11 = ($10|0)==(16);
- if (!($11)) {
-  $12 = $3;
-  $13 = $3;
-  ;HEAP32[$$byval_copy1>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$2+4>>2]|0;
-  $14 = (_mrb_obj_classname($13,$$byval_copy1)|0);
-  _mrb_str_new_cstr($0,$12,$14);
-  STACKTOP = sp;return;
- }
- $15 = HEAP32[$4>>2]|0;
- $5 = $15;
- $16 = $5;
- $17 = ((($16)) + 4|0);
- $18 = HEAP32[$17>>2]|0;
- $19 = ($18|0)!=(0|0);
- if (!($19)) {
-  $20 = $3;
-  $21 = ((($20)) + 48|0);
-  $22 = HEAP32[$21>>2]|0;
-  $23 = $5;
-  $24 = ((($23)) + 4|0);
-  HEAP32[$24>>2] = $22;
- }
- ;HEAP32[$0>>2]=HEAP32[$4>>2]|0;HEAP32[$0+4>>2]=HEAP32[$4+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _exc_message($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $3 = 0, $4 = 0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $$byval_copy = sp + 8|0;
- $vararg_buffer = sp;
- $3 = $1;
- $4 = $3;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
- _mrb_funcall($0,$4,$$byval_copy,69276,0,$vararg_buffer);
- STACKTOP = sp;return;
-}
-function _exc_inspect($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $$byval_copy10 = 0, $$byval_copy11 = 0, $$byval_copy12 = 0, $$byval_copy13 = 0, $$byval_copy14 = 0, $$byval_copy15 = 0, $$byval_copy16 = 0, $$byval_copy17 = 0, $$byval_copy18 = 0, $$byval_copy19 = 0, $$byval_copy2 = 0, $$byval_copy3 = 0, $$byval_copy4 = 0, $$byval_copy5 = 0, $$byval_copy6 = 0, $$byval_copy7 = 0, $$byval_copy8 = 0, $$byval_copy9 = 0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;
- var $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0;
- var $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0;
- var $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0;
- var $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 352|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(352|0);
- $$byval_copy19 = sp + 328|0;
- $$byval_copy18 = sp + 320|0;
- $$byval_copy17 = sp + 312|0;
- $$byval_copy16 = sp + 304|0;
- $$byval_copy15 = sp + 296|0;
- $$byval_copy14 = sp + 288|0;
- $$byval_copy13 = sp + 280|0;
- $$byval_copy12 = sp + 272|0;
- $$byval_copy11 = sp + 264|0;
- $$byval_copy10 = sp + 256|0;
- $$byval_copy9 = sp + 248|0;
- $$byval_copy8 = sp + 240|0;
- $$byval_copy7 = sp + 232|0;
- $$byval_copy6 = sp + 224|0;
- $$byval_copy5 = sp + 216|0;
- $$byval_copy4 = sp + 208|0;
- $$byval_copy3 = sp + 200|0;
- $$byval_copy2 = sp + 192|0;
- $$byval_copy1 = sp + 184|0;
- $$byval_copy = sp + 176|0;
- $4 = sp + 160|0;
- $5 = sp + 152|0;
- $6 = sp + 144|0;
- $7 = sp + 136|0;
- $9 = sp + 128|0;
- $10 = sp + 120|0;
- $11 = sp + 112|0;
- $12 = sp + 104|0;
- $13 = sp + 96|0;
- $14 = sp + 88|0;
- $15 = sp + 80|0;
- $16 = sp + 72|0;
- $17 = sp + 64|0;
- $18 = sp + 56|0;
- $19 = sp + 48|0;
- $20 = sp + 40|0;
- $22 = sp + 24|0;
- $23 = sp + 16|0;
- $24 = sp + 8|0;
- $25 = sp;
- $3 = $1;
- $26 = $3;
- $27 = $3;
- $28 = (_mrb_intern_static($27,68069,4)|0);
- ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
- _mrb_attr_get($9,$26,$$byval_copy,$28);
- ;HEAP32[$5>>2]=HEAP32[$9>>2]|0;HEAP32[$5+4>>2]=HEAP32[$9+4>>2]|0;
- $29 = $3;
- $30 = $3;
- $31 = (_mrb_intern_static($30,67810,4)|0);
- ;HEAP32[$$byval_copy1>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$2+4>>2]|0;
- _mrb_attr_get($10,$29,$$byval_copy1,$31);
- ;HEAP32[$6>>2]=HEAP32[$10>>2]|0;HEAP32[$6+4>>2]=HEAP32[$10+4>>2]|0;
- $32 = $3;
- $33 = $3;
- $34 = (_mrb_intern_static($33,67815,4)|0);
- ;HEAP32[$$byval_copy2>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy2+4>>2]=HEAP32[$2+4>>2]|0;
- _mrb_attr_get($11,$32,$$byval_copy2,$34);
- ;HEAP32[$7>>2]=HEAP32[$11>>2]|0;HEAP32[$7+4>>2]=HEAP32[$11+4>>2]|0;
- $35 = ((($5)) + 4|0);
- $36 = HEAP32[$35>>2]|0;
- $37 = ($36|0)==(0);
- if ($37) {
-  $38 = HEAP32[$5>>2]|0;
-  $39 = ($38|0)!=(0);
-  $40 = $39 ^ 1;
-  $42 = $40;
- } else {
-  $42 = 0;
- }
- $41 = $42 ^ 1;
- $43 = $41&1;
- $44 = $43&255;
- $8 = $44;
- $45 = $8;
- $46 = ($45<<24>>24)!=(0);
- if ($46) {
-  $47 = $3;
-  ;HEAP32[$$byval_copy3>>2]=HEAP32[$5>>2]|0;HEAP32[$$byval_copy3+4>>2]=HEAP32[$5+4>>2]|0;
-  _mrb_obj_as_string($12,$47,$$byval_copy3);
-  ;HEAP32[$5>>2]=HEAP32[$12>>2]|0;HEAP32[$5+4>>2]=HEAP32[$12+4>>2]|0;
-  $48 = HEAP32[$5>>2]|0;
-  $49 = HEAP32[$48>>2]|0;
-  $50 = $49 >>> 11;
-  $51 = $50 & 8;
-  $52 = ($51|0)!=(0);
-  $53 = HEAP32[$5>>2]|0;
-  if ($52) {
-   $54 = HEAP32[$53>>2]|0;
-   $55 = $54 >>> 11;
-   $56 = $55 & 496;
-   $57 = $56 >> 4;
-   $61 = $57;
-  } else {
-   $58 = ((($53)) + 12|0);
-   $59 = HEAP32[$58>>2]|0;
-   $61 = $59;
-  }
-  $60 = ($61|0)>(0);
-  $62 = $60&1;
-  $63 = $62&255;
-  $8 = $63;
- }
- $64 = ((($6)) + 4|0);
- $65 = HEAP32[$64>>2]|0;
- $66 = ($65|0)==(0);
- if ($66) {
-  $67 = HEAP32[$6>>2]|0;
-  $68 = ($67|0)!=(0);
-  if ($68) {
-   label = 10;
-  }
- } else {
-  label = 10;
- }
- do {
-  if ((label|0) == 10) {
-   $69 = ((($7)) + 4|0);
-   $70 = HEAP32[$69>>2]|0;
-   $71 = ($70|0)==(0);
-   if ($71) {
-    $72 = HEAP32[$7>>2]|0;
-    $73 = ($72|0)!=(0);
-    if (!($73)) {
-     break;
-    }
-   }
-   $74 = $3;
-   ;HEAP32[$$byval_copy4>>2]=HEAP32[$6>>2]|0;HEAP32[$$byval_copy4+4>>2]=HEAP32[$6+4>>2]|0;
-   _mrb_str_dup($13,$74,$$byval_copy4);
-   ;HEAP32[$4>>2]=HEAP32[$13>>2]|0;HEAP32[$4+4>>2]=HEAP32[$13+4>>2]|0;
-   $75 = $3;
-   ;HEAP32[$$byval_copy5>>2]=HEAP32[$4>>2]|0;HEAP32[$$byval_copy5+4>>2]=HEAP32[$4+4>>2]|0;
-   _mrb_str_cat($14,$75,$$byval_copy5,68074,1);
-   $76 = $3;
-   ;HEAP32[$$byval_copy6>>2]=HEAP32[$4>>2]|0;HEAP32[$$byval_copy6+4>>2]=HEAP32[$4+4>>2]|0;
-   ;HEAP32[$$byval_copy7>>2]=HEAP32[$7>>2]|0;HEAP32[$$byval_copy7+4>>2]=HEAP32[$7+4>>2]|0;
-   _mrb_str_append($15,$76,$$byval_copy6,$$byval_copy7);
-   $77 = $3;
-   ;HEAP32[$$byval_copy8>>2]=HEAP32[$4>>2]|0;HEAP32[$$byval_copy8+4>>2]=HEAP32[$4+4>>2]|0;
-   _mrb_str_cat($16,$77,$$byval_copy8,68076,2);
-   $78 = $8;
-   $79 = ($78<<24>>24)!=(0);
-   if ($79) {
-    $80 = $3;
-    ;HEAP32[$$byval_copy9>>2]=HEAP32[$4>>2]|0;HEAP32[$$byval_copy9+4>>2]=HEAP32[$4+4>>2]|0;
-    ;HEAP32[$$byval_copy10>>2]=HEAP32[$5>>2]|0;HEAP32[$$byval_copy10+4>>2]=HEAP32[$5+4>>2]|0;
-    _mrb_str_cat_str($17,$80,$$byval_copy9,$$byval_copy10);
-    $81 = $3;
-    ;HEAP32[$$byval_copy11>>2]=HEAP32[$4>>2]|0;HEAP32[$$byval_copy11+4>>2]=HEAP32[$4+4>>2]|0;
-    _mrb_str_cat($18,$81,$$byval_copy11,68079,2);
-   }
-   $82 = $3;
-   $83 = $3;
-   ;HEAP32[$$byval_copy12>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy12+4>>2]=HEAP32[$2+4>>2]|0;
-   $84 = (_mrb_obj_classname($83,$$byval_copy12)|0);
-   ;HEAP32[$$byval_copy13>>2]=HEAP32[$4>>2]|0;HEAP32[$$byval_copy13+4>>2]=HEAP32[$4+4>>2]|0;
-   _mrb_str_cat_cstr($19,$82,$$byval_copy13,$84);
-   $85 = $8;
-   $86 = ($85<<24>>24)!=(0);
-   if (!($86)) {
-    ;HEAP32[$0>>2]=HEAP32[$4>>2]|0;HEAP32[$0+4>>2]=HEAP32[$4+4>>2]|0;
-    STACKTOP = sp;return;
-   }
-   $87 = $3;
-   ;HEAP32[$$byval_copy14>>2]=HEAP32[$4>>2]|0;HEAP32[$$byval_copy14+4>>2]=HEAP32[$4+4>>2]|0;
-   _mrb_str_cat($20,$87,$$byval_copy14,68082,1);
-   ;HEAP32[$0>>2]=HEAP32[$4>>2]|0;HEAP32[$0+4>>2]=HEAP32[$4+4>>2]|0;
-   STACKTOP = sp;return;
-  }
- } while(0);
- $88 = $3;
- ;HEAP32[$$byval_copy15>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy15+4>>2]=HEAP32[$2+4>>2]|0;
- $89 = (_mrb_obj_classname($88,$$byval_copy15)|0);
- $21 = $89;
- $90 = $3;
- $91 = $21;
- _mrb_str_new_cstr($22,$90,$91);
- ;HEAP32[$4>>2]=HEAP32[$22>>2]|0;HEAP32[$4+4>>2]=HEAP32[$22+4>>2]|0;
- $92 = $3;
- ;HEAP32[$$byval_copy16>>2]=HEAP32[$4>>2]|0;HEAP32[$$byval_copy16+4>>2]=HEAP32[$4+4>>2]|0;
- _mrb_str_cat($23,$92,$$byval_copy16,68076,2);
- $93 = $8;
- $94 = ($93<<24>>24)!=(0);
- $95 = $3;
- if ($94) {
-  ;HEAP32[$$byval_copy17>>2]=HEAP32[$4>>2]|0;HEAP32[$$byval_copy17+4>>2]=HEAP32[$4+4>>2]|0;
-  ;HEAP32[$$byval_copy18>>2]=HEAP32[$5>>2]|0;HEAP32[$$byval_copy18+4>>2]=HEAP32[$5+4>>2]|0;
-  _mrb_str_cat_str($24,$95,$$byval_copy17,$$byval_copy18);
-  ;HEAP32[$0>>2]=HEAP32[$4>>2]|0;HEAP32[$0+4>>2]=HEAP32[$4+4>>2]|0;
-  STACKTOP = sp;return;
- } else {
-  $96 = $21;
-  ;HEAP32[$$byval_copy19>>2]=HEAP32[$4>>2]|0;HEAP32[$$byval_copy19+4>>2]=HEAP32[$4+4>>2]|0;
-  _mrb_str_cat_cstr($25,$95,$$byval_copy19,$96);
-  ;HEAP32[$0>>2]=HEAP32[$4>>2]|0;HEAP32[$0+4>>2]=HEAP32[$4+4>>2]|0;
-  STACKTOP = sp;return;
- }
-}
-function _mrb_data_check_type($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $$byval_copy6 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;
- var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0;
- var $9 = 0, $vararg_buffer = 0, $vararg_buffer2 = 0, $vararg_ptr1 = 0, $vararg_ptr5 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 112|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(112|0);
- $$byval_copy6 = sp + 96|0;
- $$byval_copy = sp + 88|0;
- $vararg_buffer2 = sp + 16|0;
- $vararg_buffer = sp;
- $6 = sp + 64|0;
- $7 = sp + 56|0;
- $9 = sp + 40|0;
- $10 = sp + 32|0;
- $3 = $0;
- $4 = $2;
- $11 = ((($1)) + 4|0);
- $12 = HEAP32[$11>>2]|0;
- $13 = ($12|0)!=(21);
- if ($13) {
-  $14 = $3;
-  ;HEAP32[$$byval_copy>>2]=HEAP32[$1>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$1+4>>2]|0;
-  _mrb_check_type($14,$$byval_copy,21);
- }
- $15 = HEAP32[$1>>2]|0;
- $16 = ((($15)) + 16|0);
- $17 = HEAP32[$16>>2]|0;
- $18 = $4;
- $19 = ($17|0)!=($18|0);
- if (!($19)) {
-  STACKTOP = sp;return;
- }
- $20 = HEAP32[$1>>2]|0;
- $21 = ((($20)) + 16|0);
- $22 = HEAP32[$21>>2]|0;
- $5 = $22;
- $23 = $5;
- $24 = ($23|0)!=(0|0);
- $25 = $3;
- if ($24) {
-  $26 = $3;
-  $27 = (_mrb_class_get($26,69204)|0);
-  $28 = $3;
-  $29 = $5;
-  $30 = HEAP32[$29>>2]|0;
-  _mrb_str_new_cstr($6,$28,$30);
-  $31 = $3;
-  $32 = $4;
-  $33 = HEAP32[$32>>2]|0;
-  _mrb_str_new_cstr($7,$31,$33);
-  ;HEAP8[$vararg_buffer>>0]=HEAP8[$6>>0]|0;HEAP8[$vararg_buffer+1>>0]=HEAP8[$6+1>>0]|0;HEAP8[$vararg_buffer+2>>0]=HEAP8[$6+2>>0]|0;HEAP8[$vararg_buffer+3>>0]=HEAP8[$6+3>>0]|0;HEAP8[$vararg_buffer+4>>0]=HEAP8[$6+4>>0]|0;HEAP8[$vararg_buffer+5>>0]=HEAP8[$6+5>>0]|0;HEAP8[$vararg_buffer+6>>0]=HEAP8[$6+6>>0]|0;HEAP8[$vararg_buffer+7>>0]=HEAP8[$6+7>>0]|0;
-  $vararg_ptr1 = ((($vararg_buffer)) + 8|0);
-  ;HEAP8[$vararg_ptr1>>0]=HEAP8[$7>>0]|0;HEAP8[$vararg_ptr1+1>>0]=HEAP8[$7+1>>0]|0;HEAP8[$vararg_ptr1+2>>0]=HEAP8[$7+2>>0]|0;HEAP8[$vararg_ptr1+3>>0]=HEAP8[$7+3>>0]|0;HEAP8[$vararg_ptr1+4>>0]=HEAP8[$7+4>>0]|0;HEAP8[$vararg_ptr1+5>>0]=HEAP8[$7+5>>0]|0;HEAP8[$vararg_ptr1+6>>0]=HEAP8[$7+6>>0]|0;HEAP8[$vararg_ptr1+7>>0]=HEAP8[$7+7>>0]|0;
-  _mrb_raisef($25,$27,68087,$vararg_buffer);
-  // unreachable;
- } else {
-  ;HEAP32[$$byval_copy6>>2]=HEAP32[$1>>2]|0;HEAP32[$$byval_copy6+4>>2]=HEAP32[$1+4>>2]|0;
-  $34 = (_mrb_class_971($25,$$byval_copy6)|0);
-  $8 = $34;
-  $35 = $3;
-  $36 = $3;
-  $37 = (_mrb_class_get($36,69204)|0);
-  $38 = $8;
-  _mrb_obj_value_972($9,$38);
-  $39 = $3;
-  $40 = $4;
-  $41 = HEAP32[$40>>2]|0;
-  _mrb_str_new_cstr($10,$39,$41);
-  ;HEAP8[$vararg_buffer2>>0]=HEAP8[$9>>0]|0;HEAP8[$vararg_buffer2+1>>0]=HEAP8[$9+1>>0]|0;HEAP8[$vararg_buffer2+2>>0]=HEAP8[$9+2>>0]|0;HEAP8[$vararg_buffer2+3>>0]=HEAP8[$9+3>>0]|0;HEAP8[$vararg_buffer2+4>>0]=HEAP8[$9+4>>0]|0;HEAP8[$vararg_buffer2+5>>0]=HEAP8[$9+5>>0]|0;HEAP8[$vararg_buffer2+6>>0]=HEAP8[$9+6>>0]|0;HEAP8[$vararg_buffer2+7>>0]=HEAP8[$9+7>>0]|0;
-  $vararg_ptr5 = ((($vararg_buffer2)) + 8|0);
-  ;HEAP8[$vararg_ptr5>>0]=HEAP8[$10>>0]|0;HEAP8[$vararg_ptr5+1>>0]=HEAP8[$10+1>>0]|0;HEAP8[$vararg_ptr5+2>>0]=HEAP8[$10+2>>0]|0;HEAP8[$vararg_ptr5+3>>0]=HEAP8[$10+3>>0]|0;HEAP8[$vararg_ptr5+4>>0]=HEAP8[$10+4>>0]|0;HEAP8[$vararg_ptr5+5>>0]=HEAP8[$10+5>>0]|0;HEAP8[$vararg_ptr5+6>>0]=HEAP8[$10+6>>0]|0;HEAP8[$vararg_ptr5+7>>0]=HEAP8[$10+7>>0]|0;
-  _mrb_raisef($35,$37,68124,$vararg_buffer2);
-  // unreachable;
- }
-}
-function _mrb_class_971($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;
- var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $0;
- $4 = ((($1)) + 4|0);
- $5 = HEAP32[$4>>2]|0;
- L1: do {
-  switch ($5|0) {
-  case 0:  {
-   $6 = HEAP32[$1>>2]|0;
-   $7 = ($6|0)!=(0);
-   $8 = $3;
-   if ($7) {
-    $9 = ((($8)) + 72|0);
-    $10 = HEAP32[$9>>2]|0;
-    $2 = $10;
-    break L1;
-   } else {
-    $11 = ((($8)) + 76|0);
-    $12 = HEAP32[$11>>2]|0;
-    $2 = $12;
-    break L1;
-   }
-   break;
-  }
-  case 2:  {
-   $13 = $3;
-   $14 = ((($13)) + 68|0);
-   $15 = HEAP32[$14>>2]|0;
-   $2 = $15;
-   break;
-  }
-  case 4:  {
-   $16 = $3;
-   $17 = ((($16)) + 80|0);
-   $18 = HEAP32[$17>>2]|0;
-   $2 = $18;
-   break;
-  }
-  case 3:  {
-   $19 = $3;
-   $20 = ((($19)) + 64|0);
-   $21 = HEAP32[$20>>2]|0;
-   $2 = $21;
-   break;
-  }
-  case 6:  {
-   $22 = $3;
-   $23 = ((($22)) + 60|0);
-   $24 = HEAP32[$23>>2]|0;
-   $2 = $24;
-   break;
-  }
-  case 7:  {
-   $25 = $3;
-   $26 = ((($25)) + 32|0);
-   $27 = HEAP32[$26>>2]|0;
-   $2 = $27;
-   break;
-  }
-  case 20:  {
-   $2 = 0;
-   break;
-  }
-  default: {
-   $28 = HEAP32[$1>>2]|0;
-   $29 = ((($28)) + 4|0);
-   $30 = HEAP32[$29>>2]|0;
-   $2 = $30;
-  }
-  }
- } while(0);
- $31 = $2;
- STACKTOP = sp;return ($31|0);
-}
-function _mrb_obj_value_972($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = sp;
- $2 = $1;
- $4 = $2;
- $5 = HEAP32[$4>>2]|0;
- $6 = $5 & 255;
- $7 = ((($3)) + 4|0);
- HEAP32[$7>>2] = $6;
- $8 = $2;
- HEAP32[$3>>2] = $8;
- ;HEAP32[$0>>2]=HEAP32[$3>>2]|0;HEAP32[$0+4>>2]=HEAP32[$3+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_data_get_ptr($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $$byval_copy = sp + 8|0;
- $3 = $0;
- $4 = $2;
- $5 = $3;
- $6 = $4;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$1>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$1+4>>2]|0;
- _mrb_data_check_type($5,$$byval_copy,$6);
- $7 = HEAP32[$1>>2]|0;
- $8 = ((($7)) + 20|0);
- $9 = HEAP32[$8>>2]|0;
- STACKTOP = sp;return ($9|0);
-}
-function _mrb_float_id($0) {
- $0 = +$0;
- var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0;
- var sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $1 = sp + 12|0;
- HEAPF32[$1>>2] = $0;
- $2 = $1;
- $3 = 4;
- $4 = 0;
- while(1) {
-  $5 = $3;
-  $6 = (($5) + -1)|0;
-  $3 = $6;
-  $7 = ($5|0)!=(0);
-  $8 = $4;
-  if (!($7)) {
-   break;
-  }
-  $9 = ($8*65599)|0;
-  $10 = $2;
-  $11 = HEAP8[$10>>0]|0;
-  $12 = $11 << 24 >> 24;
-  $13 = (($9) + ($12))|0;
-  $4 = $13;
-  $14 = $2;
-  $15 = ((($14)) + 1|0);
-  $2 = $15;
- }
- $16 = $4;
- $17 = $16 >> 5;
- $18 = (($8) + ($17))|0;
- $4 = $18;
- $19 = $4;
- STACKTOP = sp;return ($19|0);
-}
-function _mrb_obj_id($0) {
- $0 = $0|0;
- var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0.0, $24 = 0, $25 = 0, $26 = 0.0, $27 = 0;
- var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = ((($0)) + 4|0);
- $4 = HEAP32[$3>>2]|0;
- $2 = $4;
- $5 = $2;
- L1: do {
-  switch ($5|0) {
-  case 5: case 1:  {
-   $6 = $2;
-   $7 = 0 ^ $6;
-   $1 = $7;
-   break;
-  }
-  case 0:  {
-   $8 = ((($0)) + 4|0);
-   $9 = HEAP32[$8>>2]|0;
-   $10 = ($9|0)==(0);
-   if ($10) {
-    $11 = HEAP32[$0>>2]|0;
-    $12 = ($11|0)!=(0);
-    if (!($12)) {
-     $13 = $2;
-     $14 = 1 ^ $13;
-     $1 = $14;
-     break L1;
-    }
-   }
-   $15 = $2;
-   $16 = 0 ^ $15;
-   $1 = $16;
-   break;
-  }
-  case 2:  {
-   $17 = $2;
-   $18 = 1 ^ $17;
-   $1 = $18;
-   break;
-  }
-  case 4:  {
-   $19 = HEAP32[$0>>2]|0;
-   $20 = $2;
-   $21 = $19 ^ $20;
-   $1 = $21;
-   break;
-  }
-  case 3:  {
-   $22 = HEAP32[$0>>2]|0;
-   $23 = (+($22|0));
-   $24 = (_mrb_float_id($23)|0);
-   $25 = $24 ^ 6;
-   $1 = $25;
-   break;
-  }
-  case 6:  {
-   $26 = +HEAPF32[$0>>2];
-   $27 = (_mrb_float_id($26)|0);
-   $28 = $2;
-   $29 = $27 ^ $28;
-   $1 = $29;
-   break;
-  }
-  default: {
-   $30 = HEAP32[$0>>2]|0;
-   $31 = $30;
-   $32 = $2;
-   $33 = $31 ^ $32;
-   $1 = $33;
-  }
-  }
- } while(0);
- $34 = $1;
- STACKTOP = sp;return ($34|0);
-}
-function _mrb_regexp_p($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $$byval_copy = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $$byval_copy = sp + 8|0;
- $2 = $0;
- $3 = $2;
- $4 = (_mrb_class_defined($3,69671)|0);
- $5 = $4&255;
- $6 = ($5|0)!=(0);
- if (!($6)) {
-  $14 = 0;
-  $13 = $14&1;
-  $15 = $13&255;
-  STACKTOP = sp;return ($15|0);
- }
- $7 = $2;
- $8 = $2;
- $9 = (_mrb_class_get($8,69671)|0);
- ;HEAP32[$$byval_copy>>2]=HEAP32[$1>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$1+4>>2]|0;
- $10 = (_mrb_obj_is_kind_of($7,$$byval_copy,$9)|0);
- $11 = $10&255;
- $12 = ($11|0)!=(0);
- $14 = $12;
- $13 = $14&1;
- $15 = $13&255;
- STACKTOP = sp;return ($15|0);
-}
-function _mrb_init_core($0) {
- $0 = $0|0;
- var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;
- var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $1 = $0;
- $2 = $1;
- _mrb_init_symtbl($2);
- $3 = $1;
- _mrb_gc_arena_restore($3,0);
- $4 = $1;
- _mrb_init_class($4);
- $5 = $1;
- _mrb_gc_arena_restore($5,0);
- $6 = $1;
- _mrb_init_object($6);
- $7 = $1;
- _mrb_gc_arena_restore($7,0);
- $8 = $1;
- _mrb_init_kernel($8);
- $9 = $1;
- _mrb_gc_arena_restore($9,0);
- $10 = $1;
- _mrb_init_comparable($10);
- $11 = $1;
- _mrb_gc_arena_restore($11,0);
- $12 = $1;
- _mrb_init_enumerable($12);
- $13 = $1;
- _mrb_gc_arena_restore($13,0);
- $14 = $1;
- _mrb_init_symbol($14);
- $15 = $1;
- _mrb_gc_arena_restore($15,0);
- $16 = $1;
- _mrb_init_exception($16);
- $17 = $1;
- _mrb_gc_arena_restore($17,0);
- $18 = $1;
- _mrb_init_proc($18);
- $19 = $1;
- _mrb_gc_arena_restore($19,0);
- $20 = $1;
- _mrb_init_string($20);
- $21 = $1;
- _mrb_gc_arena_restore($21,0);
- $22 = $1;
- _mrb_init_array($22);
- $23 = $1;
- _mrb_gc_arena_restore($23,0);
- $24 = $1;
- _mrb_init_hash($24);
- $25 = $1;
- _mrb_gc_arena_restore($25,0);
- $26 = $1;
- _mrb_init_numeric($26);
- $27 = $1;
- _mrb_gc_arena_restore($27,0);
- $28 = $1;
- _mrb_init_range($28);
- $29 = $1;
- _mrb_gc_arena_restore($29,0);
- $30 = $1;
- _mrb_init_gc($30);
- $31 = $1;
- _mrb_gc_arena_restore($31,0);
- $32 = $1;
- _mrb_init_version($32);
- $33 = $1;
- _mrb_gc_arena_restore($33,0);
- $34 = $1;
- _mrb_init_mrblib($34);
- $35 = $1;
- _mrb_gc_arena_restore($35,0);
- STACKTOP = sp;return;
-}
-function _mrb_obj_inspect($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $$byval_copy1 = sp + 16|0;
- $$byval_copy = sp + 8|0;
- $3 = $1;
- $4 = ((($2)) + 4|0);
- $5 = HEAP32[$4>>2]|0;
- $6 = ($5|0)==(8);
- if ($6) {
-  $7 = $3;
-  ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
-  $8 = (_mrb_obj_basic_to_s_p($7,$$byval_copy)|0);
-  $9 = $8&255;
-  $10 = ($9|0)!=(0);
-  if ($10) {
-   $11 = $3;
-   $12 = HEAP32[$2>>2]|0;
-   _mrb_obj_iv_inspect($0,$11,$12);
-   STACKTOP = sp;return;
-  }
- }
- $13 = $3;
- ;HEAP32[$$byval_copy1>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$2+4>>2]|0;
- _mrb_any_to_s($0,$13,$$byval_copy1);
- STACKTOP = sp;return;
-}
-function _mrb_obj_basic_to_s_p($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $$byval_copy = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0;
- var label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $$byval_copy = sp + 8|0;
- $3 = $0;
- $5 = $3;
- $6 = $3;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$1>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$1+4>>2]|0;
- $7 = (_mrb_class_984($6,$$byval_copy)|0);
- $8 = $3;
- $9 = (_mrb_intern_static($8,69276,4)|0);
- $10 = (_mrb_method_search($5,$7,$9)|0);
- $4 = $10;
- $11 = $4;
- $12 = HEAP32[$11>>2]|0;
- $13 = $12 >>> 11;
- $14 = $13 & 128;
- $15 = ($14|0)!=(0);
- if ($15) {
-  $16 = $4;
-  $17 = ((($16)) + 12|0);
-  $18 = HEAP32[$17>>2]|0;
-  $19 = ($18|0)==(282|0);
-  if ($19) {
-   $2 = 1;
-   $20 = $2;
-   STACKTOP = sp;return ($20|0);
-  }
- }
- $2 = 0;
- $20 = $2;
- STACKTOP = sp;return ($20|0);
-}
-function _mrb_class_984($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;
- var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $0;
- $4 = ((($1)) + 4|0);
- $5 = HEAP32[$4>>2]|0;
- L1: do {
-  switch ($5|0) {
-  case 0:  {
-   $6 = HEAP32[$1>>2]|0;
-   $7 = ($6|0)!=(0);
-   $8 = $3;
-   if ($7) {
-    $9 = ((($8)) + 72|0);
-    $10 = HEAP32[$9>>2]|0;
-    $2 = $10;
-    break L1;
-   } else {
-    $11 = ((($8)) + 76|0);
-    $12 = HEAP32[$11>>2]|0;
-    $2 = $12;
-    break L1;
-   }
-   break;
-  }
-  case 2:  {
-   $13 = $3;
-   $14 = ((($13)) + 68|0);
-   $15 = HEAP32[$14>>2]|0;
-   $2 = $15;
-   break;
-  }
-  case 4:  {
-   $16 = $3;
-   $17 = ((($16)) + 80|0);
-   $18 = HEAP32[$17>>2]|0;
-   $2 = $18;
-   break;
-  }
-  case 3:  {
-   $19 = $3;
-   $20 = ((($19)) + 64|0);
-   $21 = HEAP32[$20>>2]|0;
-   $2 = $21;
-   break;
-  }
-  case 6:  {
-   $22 = $3;
-   $23 = ((($22)) + 60|0);
-   $24 = HEAP32[$23>>2]|0;
-   $2 = $24;
-   break;
-  }
-  case 7:  {
-   $25 = $3;
-   $26 = ((($25)) + 32|0);
-   $27 = HEAP32[$26>>2]|0;
-   $2 = $27;
-   break;
-  }
-  case 20:  {
-   $2 = 0;
-   break;
-  }
-  default: {
-   $28 = HEAP32[$1>>2]|0;
-   $29 = ((($28)) + 4|0);
-   $30 = HEAP32[$29>>2]|0;
-   $2 = $30;
-  }
-  }
- } while(0);
- $31 = $2;
- STACKTOP = sp;return ($31|0);
-}
-function _mrb_obj_clone($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $$byval_copy2 = 0, $$byval_copy3 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0;
- var $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);
- $$byval_copy3 = sp + 56|0;
- $$byval_copy2 = sp + 48|0;
- $$byval_copy1 = sp + 40|0;
- $$byval_copy = sp + 32|0;
- $vararg_buffer = sp;
- $5 = sp + 16|0;
- $6 = sp + 8|0;
- $3 = $1;
- $7 = ((($2)) + 4|0);
- $8 = HEAP32[$7>>2]|0;
- $9 = ($8>>>0)<(8);
- if ($9) {
-  $10 = $3;
-  $11 = $3;
-  $12 = (_mrb_class_get($11,69204)|0);
-  ;HEAP8[$vararg_buffer>>0]=HEAP8[$2>>0]|0;HEAP8[$vararg_buffer+1>>0]=HEAP8[$2+1>>0]|0;HEAP8[$vararg_buffer+2>>0]=HEAP8[$2+2>>0]|0;HEAP8[$vararg_buffer+3>>0]=HEAP8[$2+3>>0]|0;HEAP8[$vararg_buffer+4>>0]=HEAP8[$2+4>>0]|0;HEAP8[$vararg_buffer+5>>0]=HEAP8[$2+5>>0]|0;HEAP8[$vararg_buffer+6>>0]=HEAP8[$2+6>>0]|0;HEAP8[$vararg_buffer+7>>0]=HEAP8[$2+7>>0]|0;
-  _mrb_raisef($10,$12,68155,$vararg_buffer);
-  // unreachable;
- }
- $13 = ((($2)) + 4|0);
- $14 = HEAP32[$13>>2]|0;
- $15 = ($14|0)==(12);
- $16 = $3;
- if ($15) {
-  $17 = $3;
-  $18 = (_mrb_class_get($17,69204)|0);
-  _mrb_raise($16,$18,68170);
-  // unreachable;
- } else {
-  $19 = ((($2)) + 4|0);
-  $20 = HEAP32[$19>>2]|0;
-  $21 = $3;
-  ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
-  $22 = (_mrb_obj_class($21,$$byval_copy)|0);
-  $23 = (_mrb_obj_alloc($16,$20,$22)|0);
-  $4 = $23;
-  $24 = $3;
-  ;HEAP32[$$byval_copy1>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$2+4>>2]|0;
-  $25 = (_mrb_singleton_class_clone($24,$$byval_copy1)|0);
-  $26 = $4;
-  $27 = ((($26)) + 4|0);
-  HEAP32[$27>>2] = $25;
-  $28 = $4;
-  _mrb_obj_value_991($6,$28);
-  ;HEAP32[$5>>2]=HEAP32[$6>>2]|0;HEAP32[$5+4>>2]=HEAP32[$6+4>>2]|0;
-  $29 = $3;
-  ;HEAP32[$$byval_copy2>>2]=HEAP32[$5>>2]|0;HEAP32[$$byval_copy2+4>>2]=HEAP32[$5+4>>2]|0;
-  ;HEAP32[$$byval_copy3>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy3+4>>2]=HEAP32[$2+4>>2]|0;
-  _init_copy($29,$$byval_copy2,$$byval_copy3);
-  ;HEAP32[$0>>2]=HEAP32[$5>>2]|0;HEAP32[$0+4>>2]=HEAP32[$5+4>>2]|0;
-  STACKTOP = sp;return;
- }
-}
-function _mrb_singleton_class_clone($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $$byval_copy = 0, $$byval_copy6 = 0, $$byval_copy7 = 0, $$byval_copy8 = 0, $$sink = 0, $$sink2 = 0, $$sink3 = 0, $$sink5 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0;
- var $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0;
- var $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0;
- var $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $8 = 0, $9 = 0, label = 0;
- var sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 80|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(80|0);
- $$byval_copy8 = sp + 64|0;
- $$byval_copy7 = sp + 56|0;
- $$byval_copy6 = sp + 48|0;
- $$byval_copy = sp + 40|0;
- $6 = sp + 16|0;
- $7 = sp + 8|0;
- $8 = sp;
- $3 = $0;
- $9 = HEAP32[$1>>2]|0;
- $10 = ((($9)) + 4|0);
- $11 = HEAP32[$10>>2]|0;
- $4 = $11;
- $12 = $4;
- $13 = HEAP32[$12>>2]|0;
- $14 = $13 & 255;
- $15 = ($14|0)!=(12);
- if ($15) {
-  $16 = $4;
-  $2 = $16;
-  $72 = $2;
-  STACKTOP = sp;return ($72|0);
- }
- $17 = $3;
- $18 = $4;
- $19 = HEAP32[$18>>2]|0;
- $20 = $19 & 255;
- $21 = $3;
- $22 = ((($21)) + 36|0);
- $23 = HEAP32[$22>>2]|0;
- $24 = (_mrb_obj_alloc($17,$20,$23)|0);
- $5 = $24;
- $25 = ((($1)) + 4|0);
- $26 = HEAP32[$25>>2]|0;
- $27 = ($26|0)==(9);
- if ($27) {
-  label = 5;
- } else {
-  $28 = ((($1)) + 4|0);
-  $29 = HEAP32[$28>>2]|0;
-  $30 = ($29|0)==(12);
-  if ($30) {
-   label = 5;
-  } else {
-   $33 = $3;
-   $34 = $4;
-   _mrb_obj_value_991($6,$34);
-   ;HEAP32[$$byval_copy>>2]=HEAP32[$6>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$6+4>>2]|0;
-   $35 = (_mrb_singleton_class_clone($33,$$byval_copy)|0);
-   $36 = $5;
-   $$sink = $35;$$sink2 = $36;
-  }
- }
- if ((label|0) == 5) {
-  $31 = $5;
-  $32 = $5;
-  $$sink = $31;$$sink2 = $32;
- }
- $37 = ((($$sink2)) + 4|0);
- HEAP32[$37>>2] = $$sink;
- $38 = $4;
- $39 = ((($38)) + 20|0);
- $40 = HEAP32[$39>>2]|0;
- $41 = $5;
- $42 = ((($41)) + 20|0);
- HEAP32[$42>>2] = $40;
- $43 = $4;
- $44 = ((($43)) + 12|0);
- $45 = HEAP32[$44>>2]|0;
- $46 = ($45|0)!=(0|0);
- if ($46) {
-  $47 = $3;
-  $48 = $5;
-  _mrb_obj_value_991($7,$48);
-  $49 = $4;
-  _mrb_obj_value_991($8,$49);
-  ;HEAP32[$$byval_copy6>>2]=HEAP32[$7>>2]|0;HEAP32[$$byval_copy6+4>>2]=HEAP32[$7+4>>2]|0;
-  ;HEAP32[$$byval_copy7>>2]=HEAP32[$8>>2]|0;HEAP32[$$byval_copy7+4>>2]=HEAP32[$8+4>>2]|0;
-  _mrb_iv_copy($47,$$byval_copy6,$$byval_copy7);
-  $50 = $3;
-  $51 = $5;
-  $52 = $3;
-  $53 = (_mrb_intern_static($52,68237,12)|0);
-  ;HEAP32[$$byval_copy8>>2]=HEAP32[$1>>2]|0;HEAP32[$$byval_copy8+4>>2]=HEAP32[$1+4>>2]|0;
-  _mrb_obj_iv_set($50,$51,$53,$$byval_copy8);
- }
- $54 = $4;
- $55 = ((($54)) + 16|0);
- $56 = HEAP32[$55>>2]|0;
- $57 = ($56|0)!=(0|0);
- $58 = $3;
- if ($57) {
-  $59 = $4;
-  $60 = ((($59)) + 16|0);
-  $61 = HEAP32[$60>>2]|0;
-  $62 = (_kh_copy_mt($58,$61)|0);
-  $63 = $5;
-  $$sink3 = $62;$$sink5 = $63;
- } else {
-  $64 = (_kh_init_mt($58)|0);
-  $65 = $5;
-  $$sink3 = $64;$$sink5 = $65;
- }
- $66 = ((($$sink5)) + 16|0);
- HEAP32[$66>>2] = $$sink3;
- $67 = $5;
- $68 = HEAP32[$67>>2]|0;
- $69 = $68 & -256;
- $70 = $69 | 12;
- HEAP32[$67>>2] = $70;
- $71 = $5;
- $2 = $71;
- $72 = $2;
- STACKTOP = sp;return ($72|0);
-}
-function _mrb_obj_value_991($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = sp;
- $2 = $1;
- $4 = $2;
- $5 = HEAP32[$4>>2]|0;
- $6 = $5 & 255;
- $7 = ((($3)) + 4|0);
- HEAP32[$7>>2] = $6;
- $8 = $2;
- HEAP32[$3>>2] = $8;
- ;HEAP32[$0>>2]=HEAP32[$3>>2]|0;HEAP32[$0+4>>2]=HEAP32[$3+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _init_copy($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $$byval_copy2 = 0, $$byval_copy3 = 0, $$byval_copy4 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);
- $$byval_copy4 = sp + 56|0;
- $$byval_copy3 = sp + 48|0;
- $$byval_copy2 = sp + 40|0;
- $$byval_copy1 = sp + 32|0;
- $$byval_copy = sp + 24|0;
- $vararg_buffer = sp;
- $4 = sp + 8|0;
- $3 = $0;
- $5 = ((($2)) + 4|0);
- $6 = HEAP32[$5>>2]|0;
- switch ($6|0) {
- case 10: case 9:  {
-  $7 = $3;
-  ;HEAP32[$$byval_copy>>2]=HEAP32[$1>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$1+4>>2]|0;
-  ;HEAP32[$$byval_copy1>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$2+4>>2]|0;
-  _copy_class($7,$$byval_copy,$$byval_copy1);
-  label = 3;
-  break;
- }
- case 18: case 21: case 15: case 12: case 8:  {
-  label = 3;
-  break;
- }
- default: {
- }
- }
- if ((label|0) == 3) {
-  $8 = $3;
-  ;HEAP32[$$byval_copy2>>2]=HEAP32[$1>>2]|0;HEAP32[$$byval_copy2+4>>2]=HEAP32[$1+4>>2]|0;
-  ;HEAP32[$$byval_copy3>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy3+4>>2]=HEAP32[$2+4>>2]|0;
-  _mrb_iv_copy($8,$$byval_copy2,$$byval_copy3);
- }
- $9 = $3;
- ;HEAP8[$vararg_buffer>>0]=HEAP8[$2>>0]|0;HEAP8[$vararg_buffer+1>>0]=HEAP8[$2+1>>0]|0;HEAP8[$vararg_buffer+2>>0]=HEAP8[$2+2>>0]|0;HEAP8[$vararg_buffer+3>>0]=HEAP8[$2+3>>0]|0;HEAP8[$vararg_buffer+4>>0]=HEAP8[$2+4>>0]|0;HEAP8[$vararg_buffer+5>>0]=HEAP8[$2+5>>0]|0;HEAP8[$vararg_buffer+6>>0]=HEAP8[$2+6>>0]|0;HEAP8[$vararg_buffer+7>>0]=HEAP8[$2+7>>0]|0;
- ;HEAP32[$$byval_copy4>>2]=HEAP32[$1>>2]|0;HEAP32[$$byval_copy4+4>>2]=HEAP32[$1+4>>2]|0;
- _mrb_funcall($4,$9,$$byval_copy4,69294,1,$vararg_buffer);
- STACKTOP = sp;return;
-}
-function _copy_class($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;
- var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0;
- var $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0;
- var $64 = 0, $65 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 80|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(80|0);
- $$byval_copy1 = sp + 64|0;
- $$byval_copy = sp + 56|0;
- $8 = sp + 24|0;
- $9 = sp + 16|0;
- $10 = sp + 8|0;
- $11 = sp;
- $3 = $0;
- $12 = HEAP32[$1>>2]|0;
- $4 = $12;
- $13 = HEAP32[$2>>2]|0;
- $5 = $13;
- $14 = $5;
- $15 = HEAP32[$14>>2]|0;
- $16 = $15 >>> 11;
- $17 = $16 & 524288;
- $18 = ($17|0)!=(0);
- if (!($18)) {
-  $54 = $3;
-  $55 = $5;
-  $56 = ((($55)) + 16|0);
-  $57 = HEAP32[$56>>2]|0;
-  $58 = (_kh_copy_mt($54,$57)|0);
-  $59 = $4;
-  $60 = ((($59)) + 16|0);
-  HEAP32[$60>>2] = $58;
-  $61 = $5;
-  $62 = ((($61)) + 20|0);
-  $63 = HEAP32[$62>>2]|0;
-  $64 = $4;
-  $65 = ((($64)) + 20|0);
-  HEAP32[$65>>2] = $63;
-  STACKTOP = sp;return;
- }
- $19 = $5;
- $20 = ((($19)) + 20|0);
- $21 = HEAP32[$20>>2]|0;
- $6 = $21;
- $22 = $4;
- $7 = $22;
- while(1) {
-  $23 = $6;
-  $24 = HEAP32[$23>>2]|0;
-  $25 = $24 >>> 11;
-  $26 = $25 & 1048576;
-  $27 = ($26|0)!=(0);
-  $28 = $27 ^ 1;
-  $29 = $3;
-  $30 = $6;
-  if (!($28)) {
-   break;
-  }
-  _mrb_obj_value_991($8,$30);
-  ;HEAP32[$$byval_copy>>2]=HEAP32[$8>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$8+4>>2]|0;
-  _mrb_obj_dup($9,$29,$$byval_copy);
-  $31 = HEAP32[$9>>2]|0;
-  $32 = $7;
-  $33 = ((($32)) + 20|0);
-  HEAP32[$33>>2] = $31;
-  $34 = $7;
-  $35 = ((($34)) + 20|0);
-  $36 = HEAP32[$35>>2]|0;
-  $7 = $36;
-  $37 = $6;
-  $38 = ((($37)) + 20|0);
-  $39 = HEAP32[$38>>2]|0;
-  $6 = $39;
- }
- _mrb_obj_value_991($10,$30);
- ;HEAP32[$$byval_copy1>>2]=HEAP32[$10>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$10+4>>2]|0;
- _mrb_obj_dup($11,$29,$$byval_copy1);
- $40 = HEAP32[$11>>2]|0;
- $41 = $7;
- $42 = ((($41)) + 20|0);
- HEAP32[$42>>2] = $40;
- $43 = $7;
- $44 = ((($43)) + 20|0);
- $45 = HEAP32[$44>>2]|0;
- $46 = HEAP32[$45>>2]|0;
- $47 = $46 >>> 11;
- $48 = $47 | 1048576;
- $49 = HEAP32[$45>>2]|0;
- $50 = $48 & 2097151;
- $51 = $50 << 11;
- $52 = $49 & 2047;
- $53 = $52 | $51;
- HEAP32[$45>>2] = $53;
- $54 = $3;
- $55 = $5;
- $56 = ((($55)) + 16|0);
- $57 = HEAP32[$56>>2]|0;
- $58 = (_kh_copy_mt($54,$57)|0);
- $59 = $4;
- $60 = ((($59)) + 16|0);
- HEAP32[$60>>2] = $58;
- $61 = $5;
- $62 = ((($61)) + 20|0);
- $63 = HEAP32[$62>>2]|0;
- $64 = $4;
- $65 = ((($64)) + 20|0);
- HEAP32[$65>>2] = $63;
- STACKTOP = sp;return;
-}
-function _mrb_obj_dup($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $$byval_copy2 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $3 = 0;
- var $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);
- $$byval_copy2 = sp + 48|0;
- $$byval_copy1 = sp + 40|0;
- $$byval_copy = sp + 32|0;
- $vararg_buffer = sp;
- $5 = sp + 16|0;
- $6 = sp + 8|0;
- $3 = $1;
- $7 = ((($2)) + 4|0);
- $8 = HEAP32[$7>>2]|0;
- $9 = ($8>>>0)<(8);
- if ($9) {
-  $10 = $3;
-  $11 = $3;
-  $12 = (_mrb_class_get($11,69204)|0);
-  ;HEAP8[$vararg_buffer>>0]=HEAP8[$2>>0]|0;HEAP8[$vararg_buffer+1>>0]=HEAP8[$2+1>>0]|0;HEAP8[$vararg_buffer+2>>0]=HEAP8[$2+2>>0]|0;HEAP8[$vararg_buffer+3>>0]=HEAP8[$2+3>>0]|0;HEAP8[$vararg_buffer+4>>0]=HEAP8[$2+4>>0]|0;HEAP8[$vararg_buffer+5>>0]=HEAP8[$2+5>>0]|0;HEAP8[$vararg_buffer+6>>0]=HEAP8[$2+6>>0]|0;HEAP8[$vararg_buffer+7>>0]=HEAP8[$2+7>>0]|0;
-  _mrb_raisef($10,$12,68198,$vararg_buffer);
-  // unreachable;
- }
- $13 = ((($2)) + 4|0);
- $14 = HEAP32[$13>>2]|0;
- $15 = ($14|0)==(12);
- $16 = $3;
- if ($15) {
-  $17 = $3;
-  $18 = (_mrb_class_get($17,69204)|0);
-  _mrb_raise($16,$18,68211);
-  // unreachable;
- } else {
-  $19 = ((($2)) + 4|0);
-  $20 = HEAP32[$19>>2]|0;
-  $21 = $3;
-  ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
-  $22 = (_mrb_obj_class($21,$$byval_copy)|0);
-  $23 = (_mrb_obj_alloc($16,$20,$22)|0);
-  $4 = $23;
-  $24 = $4;
-  _mrb_obj_value_991($6,$24);
-  ;HEAP32[$5>>2]=HEAP32[$6>>2]|0;HEAP32[$5+4>>2]=HEAP32[$6+4>>2]|0;
-  $25 = $3;
-  ;HEAP32[$$byval_copy1>>2]=HEAP32[$5>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$5+4>>2]|0;
-  ;HEAP32[$$byval_copy2>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy2+4>>2]=HEAP32[$2+4>>2]|0;
-  _init_copy($25,$$byval_copy1,$$byval_copy2);
-  ;HEAP32[$0>>2]=HEAP32[$5>>2]|0;HEAP32[$0+4>>2]=HEAP32[$5+4>>2]|0;
-  STACKTOP = sp;return;
- }
-}
-function _mrb_obj_hash($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $3 = 0, $4 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $$byval_copy = sp + 8|0;
- $3 = $1;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
- $4 = (_mrb_obj_id($$byval_copy)|0);
- _mrb_fixnum_value_996($0,$4);
- STACKTOP = sp;return;
-}
-function _mrb_fixnum_value_996($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = sp;
- $2 = $1;
- $4 = ((($3)) + 4|0);
- HEAP32[$4>>2] = 3;
- $5 = $2;
- HEAP32[$3>>2] = $5;
- ;HEAP32[$0>>2]=HEAP32[$3>>2]|0;HEAP32[$0+4>>2]=HEAP32[$3+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_obj_is_instance_of($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $10 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $$byval_copy = sp + 8|0;
- $4 = $0;
- $5 = $2;
- $6 = $4;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$1>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$1+4>>2]|0;
- $7 = (_mrb_obj_class($6,$$byval_copy)|0);
- $8 = $5;
- $9 = ($7|0)==($8|0);
- if ($9) {
-  $3 = 1;
-  $10 = $3;
-  STACKTOP = sp;return ($10|0);
- } else {
-  $3 = 0;
-  $10 = $3;
-  STACKTOP = sp;return ($10|0);
- }
- return (0)|0;
-}
-function _kh_alloc_st($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;
- var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $2 = $0;
- $3 = $1;
- $7 = $3;
- $8 = HEAP32[$7>>2]|0;
- $4 = $8;
- $5 = 4;
- $9 = $2;
- $10 = $4;
- $11 = $10;
- $12 = (($11>>>0) / 4)&-1;
- $13 = $5;
- $14 = $4;
- $15 = Math_imul($13, $14)|0;
- $16 = (($12) + ($15))|0;
- $17 = (_mrb_malloc($9,$16)|0);
- $6 = $17;
- $18 = $3;
- $19 = ((($18)) + 8|0);
- HEAP32[$19>>2] = 0;
- $20 = $3;
- $21 = ((($20)) + 4|0);
- HEAP32[$21>>2] = 0;
- $22 = $6;
- $23 = $3;
- $24 = ((($23)) + 16|0);
- HEAP32[$24>>2] = $22;
- $25 = $3;
- $26 = ((($25)) + 20|0);
- HEAP32[$26>>2] = 0;
- $27 = $6;
- $28 = $5;
- $29 = $4;
- $30 = Math_imul($28, $29)|0;
- $31 = (($27) + ($30)|0);
- $32 = $3;
- $33 = ((($32)) + 12|0);
- HEAP32[$33>>2] = $31;
- $34 = $3;
- $35 = ((($34)) + 12|0);
- $36 = HEAP32[$35>>2]|0;
- $37 = $4;
- $38 = (($37>>>0) / 4)&-1;
- _kh_fill_flags_997($36,-86,$38);
- STACKTOP = sp;return;
-}
-function _kh_fill_flags_997($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $0;
- $4 = $1;
- $5 = $2;
- while(1) {
-  $6 = $5;
-  $7 = (($6) + -1)|0;
-  $5 = $7;
-  $8 = ($6>>>0)>(0);
-  if (!($8)) {
-   break;
-  }
-  $9 = $4;
-  $10 = $3;
-  $11 = ((($10)) + 1|0);
-  $3 = $11;
-  HEAP8[$10>>0] = $9;
- }
- STACKTOP = sp;return;
-}
-function _kh_init_st_size($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;
- var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $5 = $2;
- $6 = (_mrb_calloc($5,1,24)|0);
- $4 = $6;
- $7 = $3;
- $8 = ($7>>>0)<(8);
- if ($8) {
-  $3 = 8;
- }
- $9 = $3;
- $10 = (($9) + -1)|0;
- $3 = $10;
- $11 = $3;
- $12 = $11 >>> 1;
- $13 = $3;
- $14 = $13 | $12;
- $3 = $14;
- $15 = $3;
- $16 = $15 >>> 2;
- $17 = $3;
- $18 = $17 | $16;
- $3 = $18;
- $19 = $3;
- $20 = $19 >>> 4;
- $21 = $3;
- $22 = $21 | $20;
- $3 = $22;
- $23 = $3;
- $24 = $23 >>> 8;
- $25 = $3;
- $26 = $25 | $24;
- $3 = $26;
- $27 = $3;
- $28 = $27 >>> 16;
- $29 = $3;
- $30 = $29 | $28;
- $3 = $30;
- $31 = $3;
- $32 = (($31) + 1)|0;
- $3 = $32;
- $33 = $3;
- $34 = $4;
- HEAP32[$34>>2] = $33;
- $35 = $2;
- $36 = $4;
- _kh_alloc_st($35,$36);
- $37 = $4;
- STACKTOP = sp;return ($37|0);
-}
-function _kh_init_st($0) {
- $0 = $0|0;
- var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $1 = $0;
- $2 = $1;
- $3 = (_kh_init_st_size($2,8)|0);
- STACKTOP = sp;return ($3|0);
-}
-function _kh_destroy_st($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $4 = $3;
- $5 = ($4|0)!=(0|0);
- if (!($5)) {
-  STACKTOP = sp;return;
- }
- $6 = $2;
- $7 = $3;
- $8 = ((($7)) + 16|0);
- $9 = HEAP32[$8>>2]|0;
- _mrb_free($6,$9);
- $10 = $2;
- $11 = $3;
- _mrb_free($10,$11);
- STACKTOP = sp;return;
-}
-function _kh_resize_st($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$ = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;
- var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0;
- var $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0;
- var $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);
- $6 = sp + 24|0;
- $3 = $0;
- $4 = $1;
- $5 = $2;
- $13 = $5;
- $14 = ($13>>>0)<(8);
- $$ = $14 ? 8 : $2;
- $5 = $$;
- $15 = $5;
- $16 = (($15) + -1)|0;
- $5 = $16;
- $17 = $5;
- $18 = $17 >>> 1;
- $19 = $5;
- $20 = $19 | $18;
- $5 = $20;
- $21 = $5;
- $22 = $21 >>> 2;
- $23 = $5;
- $24 = $23 | $22;
- $5 = $24;
- $25 = $5;
- $26 = $25 >>> 4;
- $27 = $5;
- $28 = $27 | $26;
- $5 = $28;
- $29 = $5;
- $30 = $29 >>> 8;
- $31 = $5;
- $32 = $31 | $30;
- $5 = $32;
- $33 = $5;
- $34 = $33 >>> 16;
- $35 = $5;
- $36 = $35 | $34;
- $5 = $36;
- $37 = $5;
- $38 = (($37) + 1)|0;
- $5 = $38;
- $39 = $4;
- $40 = ((($39)) + 12|0);
- $41 = HEAP32[$40>>2]|0;
- $7 = $41;
- $42 = $4;
- $43 = ((($42)) + 16|0);
- $44 = HEAP32[$43>>2]|0;
- $8 = $44;
- $45 = $4;
- $46 = ((($45)) + 20|0);
- $47 = HEAP32[$46>>2]|0;
- $9 = $47;
- $48 = $4;
- $49 = HEAP32[$48>>2]|0;
- $10 = $49;
- $50 = $5;
- HEAP32[$6>>2] = $50;
- $51 = $3;
- _kh_alloc_st($51,$6);
- $11 = 0;
- while(1) {
-  $52 = $11;
-  $53 = $10;
-  $54 = ($52>>>0)<($53>>>0);
-  if (!($54)) {
-   break;
-  }
-  $55 = $7;
-  $56 = $11;
-  $57 = (($56>>>0) / 4)&-1;
-  $58 = (($55) + ($57)|0);
-  $59 = HEAP8[$58>>0]|0;
-  $60 = $59&255;
-  $61 = $11;
-  $62 = (($61>>>0) % 4)&-1;
-  $63 = (68258 + ($62)|0);
-  $64 = HEAP8[$63>>0]|0;
-  $65 = $64&255;
-  $66 = $60 & $65;
-  $67 = ($66|0)!=(0);
-  if (!($67)) {
-   $68 = $3;
-   $69 = $8;
-   $70 = $11;
-   $71 = (($69) + ($70<<2)|0);
-   $72 = HEAP32[$71>>2]|0;
-   $73 = (_kh_put_st($68,$6,$72,0)|0);
-   $12 = $73;
-  }
-  $74 = $11;
-  $75 = (($74) + 1)|0;
-  $11 = $75;
- }
- $76 = $4;
- ;HEAP32[$76>>2]=HEAP32[$6>>2]|0;HEAP32[$76+4>>2]=HEAP32[$6+4>>2]|0;HEAP32[$76+8>>2]=HEAP32[$6+8>>2]|0;HEAP32[$76+12>>2]=HEAP32[$6+12>>2]|0;HEAP32[$76+16>>2]=HEAP32[$6+16>>2]|0;HEAP32[$76+20>>2]=HEAP32[$6+20>>2]|0;
- $77 = $3;
- $78 = $8;
- _mrb_free($77,$78);
- STACKTOP = sp;return;
-}
-function _kh_put_st($0,$1,$2,$3) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;
- var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0;
- var $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0, $152 = 0, $153 = 0;
- var $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;
- var $28 = 0, $29 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0;
- var $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0;
- var $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0;
- var $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $5 = $0;
- $6 = $1;
- $7 = $2;
- $8 = $3;
- $11 = 0;
- $12 = $6;
- $13 = ((($12)) + 8|0);
- $14 = HEAP32[$13>>2]|0;
- $15 = $6;
- $16 = HEAP32[$15>>2]|0;
- $17 = $16 >>> 2;
- $18 = $6;
- $19 = HEAP32[$18>>2]|0;
- $20 = $19 >>> 1;
- $21 = $17 | $20;
- $22 = ($14>>>0)>=($21>>>0);
- if ($22) {
-  $23 = $5;
-  $24 = $6;
-  $25 = $6;
-  $26 = HEAP32[$25>>2]|0;
-  $27 = $26<<1;
-  _kh_resize_st($23,$24,$27);
- }
- $28 = $7;
- $29 = $7;
- $30 = $29 << 2;
- $31 = $28 ^ $30;
- $32 = $7;
- $33 = $32 >>> 2;
- $34 = $31 ^ $33;
- $35 = $6;
- $36 = HEAP32[$35>>2]|0;
- $37 = (($36) - 1)|0;
- $38 = $34 & $37;
- $9 = $38;
- $39 = $6;
- $40 = HEAP32[$39>>2]|0;
- $10 = $40;
- while(1) {
-  $41 = $6;
-  $42 = ((($41)) + 12|0);
-  $43 = HEAP32[$42>>2]|0;
-  $44 = $9;
-  $45 = (($44>>>0) / 4)&-1;
-  $46 = (($43) + ($45)|0);
-  $47 = HEAP8[$46>>0]|0;
-  $48 = $47&255;
-  $49 = $9;
-  $50 = (($49>>>0) % 4)&-1;
-  $51 = (68250 + ($50)|0);
-  $52 = HEAP8[$51>>0]|0;
-  $53 = $52&255;
-  $54 = $48 & $53;
-  $55 = ($54|0)!=(0);
-  $56 = $55 ^ 1;
-  if (!($56)) {
-   break;
-  }
-  $57 = $6;
-  $58 = ((($57)) + 12|0);
-  $59 = HEAP32[$58>>2]|0;
-  $60 = $9;
-  $61 = (($60>>>0) / 4)&-1;
-  $62 = (($59) + ($61)|0);
-  $63 = HEAP8[$62>>0]|0;
-  $64 = $63&255;
-  $65 = $9;
-  $66 = (($65>>>0) % 4)&-1;
-  $67 = (68254 + ($66)|0);
-  $68 = HEAP8[$67>>0]|0;
-  $69 = $68&255;
-  $70 = $64 & $69;
-  $71 = ($70|0)!=(0);
-  if ($71) {
-   $84 = $10;
-   $85 = $6;
-   $86 = HEAP32[$85>>2]|0;
-   $87 = ($84|0)==($86|0);
-   if ($87) {
-    $88 = $9;
-    $10 = $88;
-   }
-  } else {
-   $72 = $6;
-   $73 = ((($72)) + 16|0);
-   $74 = HEAP32[$73>>2]|0;
-   $75 = $9;
-   $76 = (($74) + ($75<<2)|0);
-   $77 = HEAP32[$76>>2]|0;
-   $78 = $7;
-   $79 = ($77|0)==($78|0);
-   if ($79) {
-    label = 7;
-    break;
-   }
-  }
-  $89 = $9;
-  $90 = $11;
-  $91 = (($90) + 1)|0;
-  $11 = $91;
-  $92 = (($89) + ($91))|0;
-  $93 = $6;
-  $94 = HEAP32[$93>>2]|0;
-  $95 = (($94) - 1)|0;
-  $96 = $92 & $95;
-  $9 = $96;
- }
- if ((label|0) == 7) {
-  $80 = $8;
-  $81 = ($80|0)!=(0|0);
-  if ($81) {
-   $82 = $8;
-   HEAP32[$82>>2] = 0;
-  }
-  $83 = $9;
-  $4 = $83;
-  $161 = $4;
-  STACKTOP = sp;return ($161|0);
- }
- $97 = $10;
- $98 = $6;
- $99 = HEAP32[$98>>2]|0;
- $100 = ($97|0)!=($99|0);
- $101 = $7;
- $102 = $6;
- $103 = ((($102)) + 16|0);
- $104 = HEAP32[$103>>2]|0;
- if ($100) {
-  $105 = $10;
-  $106 = (($104) + ($105<<2)|0);
-  HEAP32[$106>>2] = $101;
-  $107 = $10;
-  $108 = (($107>>>0) % 4)&-1;
-  $109 = (68254 + ($108)|0);
-  $110 = HEAP8[$109>>0]|0;
-  $111 = $110&255;
-  $112 = $111 ^ -1;
-  $113 = $6;
-  $114 = ((($113)) + 12|0);
-  $115 = HEAP32[$114>>2]|0;
-  $116 = $10;
-  $117 = (($116>>>0) / 4)&-1;
-  $118 = (($115) + ($117)|0);
-  $119 = HEAP8[$118>>0]|0;
-  $120 = $119&255;
-  $121 = $120 & $112;
-  $122 = $121&255;
-  HEAP8[$118>>0] = $122;
-  $123 = $6;
-  $124 = ((($123)) + 4|0);
-  $125 = HEAP32[$124>>2]|0;
-  $126 = (($125) + 1)|0;
-  HEAP32[$124>>2] = $126;
-  $127 = $8;
-  $128 = ($127|0)!=(0|0);
-  if ($128) {
-   $129 = $8;
-   HEAP32[$129>>2] = 2;
-  }
-  $130 = $10;
-  $4 = $130;
-  $161 = $4;
-  STACKTOP = sp;return ($161|0);
- } else {
-  $131 = $9;
-  $132 = (($104) + ($131<<2)|0);
-  HEAP32[$132>>2] = $101;
-  $133 = $9;
-  $134 = (($133>>>0) % 4)&-1;
-  $135 = (68250 + ($134)|0);
-  $136 = HEAP8[$135>>0]|0;
-  $137 = $136&255;
-  $138 = $137 ^ -1;
-  $139 = $6;
-  $140 = ((($139)) + 12|0);
-  $141 = HEAP32[$140>>2]|0;
-  $142 = $9;
-  $143 = (($142>>>0) / 4)&-1;
-  $144 = (($141) + ($143)|0);
-  $145 = HEAP8[$144>>0]|0;
-  $146 = $145&255;
-  $147 = $146 & $138;
-  $148 = $147&255;
-  HEAP8[$144>>0] = $148;
-  $149 = $6;
-  $150 = ((($149)) + 4|0);
-  $151 = HEAP32[$150>>2]|0;
-  $152 = (($151) + 1)|0;
-  HEAP32[$150>>2] = $152;
-  $153 = $6;
-  $154 = ((($153)) + 8|0);
-  $155 = HEAP32[$154>>2]|0;
-  $156 = (($155) + 1)|0;
-  HEAP32[$154>>2] = $156;
-  $157 = $8;
-  $158 = ($157|0)!=(0|0);
-  if ($158) {
-   $159 = $8;
-   HEAP32[$159>>2] = 1;
-  }
-  $160 = $9;
-  $4 = $160;
-  $161 = $4;
-  STACKTOP = sp;return ($161|0);
- }
- return (0)|0;
-}
-function _mrb_class_instance_method_list($0,$1,$2,$3,$4) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- $4 = $4|0;
- var $$byval_copy = 0, $$byval_copy4 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;
- var $28 = 0, $29 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0;
- var $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0;
- var $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0;
- var $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $or$cond = 0, $or$cond3 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 80|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(80|0);
- $$byval_copy4 = sp + 56|0;
- $$byval_copy = sp + 48|0;
- $10 = sp + 24|0;
- $14 = sp + 8|0;
- $15 = sp;
- $5 = $1;
- $6 = $2;
- $7 = $3;
- $8 = $4;
- $11 = 0;
- $16 = $5;
- $17 = (_kh_init_st($16)|0);
- $13 = $17;
- $18 = $6;
- $19 = ($18<<24>>24)!=(0);
- if (!($19)) {
-  $20 = $7;
-  $21 = HEAP32[$20>>2]|0;
-  $22 = $21 >>> 11;
-  $23 = $22 & 524288;
-  $24 = ($23|0)!=(0);
-  if ($24) {
-   $25 = $7;
-   $26 = HEAP32[$25>>2]|0;
-   $27 = $26 >>> 11;
-   $28 = $27 & 524288;
-   $29 = ($28|0)!=(0);
-   L4: do {
-    if ($29) {
-     $30 = $7;
-     $31 = ((($30)) + 20|0);
-     $32 = HEAP32[$31>>2]|0;
-     $7 = $32;
-     while(1) {
-      $33 = $7;
-      $34 = HEAP32[$33>>2]|0;
-      $35 = $34 >>> 11;
-      $36 = $35 & 1048576;
-      $37 = ($36|0)!=(0);
-      $38 = $37 ^ 1;
-      if (!($38)) {
-       break L4;
-      }
-      $39 = $7;
-      $40 = ((($39)) + 20|0);
-      $41 = HEAP32[$40>>2]|0;
-      $7 = $41;
-     }
-    }
-   } while(0);
-   $11 = 1;
-  }
- }
- $12 = 0;
- while(1) {
-  $42 = $7;
-  $43 = ($42|0)!=(0|0);
-  if (!($43)) {
-   break;
-  }
-  $44 = $7;
-  $45 = $12;
-  $46 = ($44|0)!=($45|0);
-  if (!($46)) {
-   break;
-  }
-  $47 = $5;
-  $48 = $7;
-  $49 = $13;
-  _method_entry_loop($47,$48,$49);
-  $50 = $7;
-  $51 = HEAP32[$50>>2]|0;
-  $52 = $51 & 255;
-  $53 = ($52|0)!=(11);
-  $54 = $11;
-  $55 = ($54<<24>>24)!=(0);
-  $or$cond = $53 | $55;
-  if ($or$cond) {
-   $56 = $7;
-   $57 = HEAP32[$56>>2]|0;
-   $58 = $57 & 255;
-   $59 = ($58|0)==(12);
-   $60 = $6;
-   $61 = ($60<<24>>24)!=(0);
-   $or$cond3 = $59 | $61;
-   if (!($or$cond3)) {
-    break;
-   }
-  }
-  $62 = $7;
-  $12 = $62;
-  $63 = $7;
-  $64 = ((($63)) + 20|0);
-  $65 = HEAP32[$64>>2]|0;
-  $7 = $65;
- }
- $66 = $5;
- _mrb_ary_new($14,$66);
- ;HEAP32[$10>>2]=HEAP32[$14>>2]|0;HEAP32[$10+4>>2]=HEAP32[$14+4>>2]|0;
- $9 = 0;
- while(1) {
-  $67 = $9;
-  $68 = $13;
-  $69 = HEAP32[$68>>2]|0;
-  $70 = ($67>>>0)<($69>>>0);
-  if (!($70)) {
-   break;
-  }
-  $71 = $13;
-  $72 = ((($71)) + 12|0);
-  $73 = HEAP32[$72>>2]|0;
-  $74 = $9;
-  $75 = (($74>>>0) / 4)&-1;
-  $76 = (($73) + ($75)|0);
-  $77 = HEAP8[$76>>0]|0;
-  $78 = $77&255;
-  $79 = $9;
-  $80 = (($79>>>0) % 4)&-1;
-  $81 = (68258 + ($80)|0);
-  $82 = HEAP8[$81>>0]|0;
-  $83 = $82&255;
-  $84 = $78 & $83;
-  $85 = ($84|0)!=(0);
-  if (!($85)) {
-   $86 = $5;
-   $87 = $13;
-   $88 = ((($87)) + 16|0);
-   $89 = HEAP32[$88>>2]|0;
-   $90 = $9;
-   $91 = (($89) + ($90<<2)|0);
-   $92 = HEAP32[$91>>2]|0;
-   _mrb_symbol_value_1003($15,$92);
-   ;HEAP32[$$byval_copy>>2]=HEAP32[$10>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$10+4>>2]|0;
-   ;HEAP32[$$byval_copy4>>2]=HEAP32[$15>>2]|0;HEAP32[$$byval_copy4+4>>2]=HEAP32[$15+4>>2]|0;
-   _mrb_ary_push($86,$$byval_copy,$$byval_copy4);
-  }
-  $93 = $9;
-  $94 = (($93) + 1)|0;
-  $9 = $94;
- }
- $95 = $5;
- $96 = $13;
- _kh_destroy_st($95,$96);
- ;HEAP32[$0>>2]=HEAP32[$10>>2]|0;HEAP32[$0+4>>2]=HEAP32[$10+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _method_entry_loop($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;
- var $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0;
- var $48 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $3 = $0;
- $4 = $1;
- $5 = $2;
- $8 = $4;
- $9 = ((($8)) + 16|0);
- $10 = HEAP32[$9>>2]|0;
- $7 = $10;
- $11 = $7;
- $12 = ($11|0)!=(0|0);
- if (!($12)) {
-  STACKTOP = sp;return;
- }
- $6 = 0;
- while(1) {
-  $13 = $6;
-  $14 = $7;
-  $15 = HEAP32[$14>>2]|0;
-  $16 = ($13>>>0)<($15>>>0);
-  if (!($16)) {
-   break;
-  }
-  $17 = $7;
-  $18 = ((($17)) + 12|0);
-  $19 = HEAP32[$18>>2]|0;
-  $20 = $6;
-  $21 = (($20>>>0) / 4)&-1;
-  $22 = (($19) + ($21)|0);
-  $23 = HEAP8[$22>>0]|0;
-  $24 = $23&255;
-  $25 = $6;
-  $26 = (($25>>>0) % 4)&-1;
-  $27 = (68258 + ($26)|0);
-  $28 = HEAP8[$27>>0]|0;
-  $29 = $28&255;
-  $30 = $24 & $29;
-  $31 = ($30|0)!=(0);
-  if (!($31)) {
-   $32 = $7;
-   $33 = ((($32)) + 20|0);
-   $34 = HEAP32[$33>>2]|0;
-   $35 = $6;
-   $36 = (($34) + ($35<<2)|0);
-   $37 = HEAP32[$36>>2]|0;
-   $38 = ($37|0)!=(0|0);
-   if ($38) {
-    $39 = $3;
-    $40 = $5;
-    $41 = $7;
-    $42 = ((($41)) + 16|0);
-    $43 = HEAP32[$42>>2]|0;
-    $44 = $6;
-    $45 = (($43) + ($44<<2)|0);
-    $46 = HEAP32[$45>>2]|0;
-    (_kh_put_st($39,$40,$46,0)|0);
-   }
-  }
-  $47 = $6;
-  $48 = (($47) + 1)|0;
-  $6 = $48;
- }
- STACKTOP = sp;return;
-}
-function _mrb_symbol_value_1003($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = sp;
- $2 = $1;
- $4 = ((($3)) + 4|0);
- HEAP32[$4>>2] = 4;
- $5 = $2;
- HEAP32[$3>>2] = $5;
- ;HEAP32[$0>>2]=HEAP32[$3>>2]|0;HEAP32[$0+4>>2]=HEAP32[$3+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_f_raise($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $$byval_copy2 = 0, $$byval_copy3 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0;
- var $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $5 = 0;
- var $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, $vararg_ptr1 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 112|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(112|0);
- $$byval_copy3 = sp + 96|0;
- $$byval_copy2 = sp + 88|0;
- $$byval_copy = sp + 80|0;
- $vararg_buffer = sp;
- $4 = sp + 56|0;
- $5 = sp + 48|0;
- $7 = sp + 32|0;
- $8 = sp + 24|0;
- $9 = sp + 16|0;
- $10 = sp + 8|0;
- $3 = $1;
- $11 = $3;
- $12 = ((($4)) + 8|0);
- HEAP32[$vararg_buffer>>2] = $4;
- $vararg_ptr1 = ((($vararg_buffer)) + 4|0);
- HEAP32[$vararg_ptr1>>2] = $12;
- $13 = (_mrb_get_args($11,68262,$vararg_buffer)|0);
- $6 = $13;
- $14 = $6;
- switch ($14|0) {
- case 0:  {
-  $15 = $3;
-  $16 = $3;
-  $17 = (_mrb_class_get($16,68266)|0);
-  _mrb_raise($15,$17,75764);
-  // unreachable;
-  break;
- }
- case 1:  {
-  label = 3;
-  break;
- }
- default: {
- }
- }
- do {
-  if ((label|0) == 3) {
-   $18 = ((($4)) + 8|0);
-   $19 = $3;
-   ;HEAP32[$$byval_copy>>2]=HEAP32[$4>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$4+4>>2]|0;
-   _mrb_check_string_type($7,$19,$$byval_copy);
-   ;HEAP32[$18>>2]=HEAP32[$7>>2]|0;HEAP32[$18+4>>2]=HEAP32[$7+4>>2]|0;
-   $20 = ((($4)) + 8|0);
-   $21 = ((($20)) + 4|0);
-   $22 = HEAP32[$21>>2]|0;
-   $23 = ($22|0)==(0);
-   if ($23) {
-    $24 = ((($4)) + 8|0);
-    $25 = HEAP32[$24>>2]|0;
-    $26 = ($25|0)!=(0);
-    if (!($26)) {
-     break;
-    }
-   }
-   $6 = 2;
-   $27 = $3;
-   $28 = (_mrb_class_get($27,68266)|0);
-   _mrb_obj_value_991($8,$28);
-   ;HEAP32[$4>>2]=HEAP32[$8>>2]|0;HEAP32[$4+4>>2]=HEAP32[$8+4>>2]|0;
-  }
- } while(0);
- $29 = $3;
- $30 = $6;
- _mrb_make_exception($9,$29,$30,$4);
- ;HEAP32[$5>>2]=HEAP32[$9>>2]|0;HEAP32[$5+4>>2]=HEAP32[$9+4>>2]|0;
- $31 = $3;
- $32 = HEAP32[$5>>2]|0;
- $33 = $3;
- $34 = (_mrb_intern_static($33,68279,6)|0);
- $35 = $3;
- $36 = $3;
- $37 = ((($36)) + 12|0);
- $38 = HEAP32[$37>>2]|0;
- $39 = ((($38)) + 16|0);
- $40 = HEAP32[$39>>2]|0;
- $41 = ((($40)) + 28|0);
- $42 = HEAP32[$41>>2]|0;
- _mrb_cptr_value_1008($10,$35,$42);
- ;HEAP32[$$byval_copy2>>2]=HEAP32[$10>>2]|0;HEAP32[$$byval_copy2+4>>2]=HEAP32[$10+4>>2]|0;
- _mrb_obj_iv_set($31,$32,$34,$$byval_copy2);
- $43 = $3;
- ;HEAP32[$$byval_copy3>>2]=HEAP32[$5>>2]|0;HEAP32[$$byval_copy3+4>>2]=HEAP32[$5+4>>2]|0;
- _mrb_exc_raise($43,$$byval_copy3);
- // unreachable;
-}
-function _mrb_cptr_value_1008($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $5 = sp;
- $3 = $1;
- $4 = $2;
- $6 = ((($5)) + 4|0);
- HEAP32[$6>>2] = 7;
- $7 = $4;
- HEAP32[$5>>2] = $7;
- ;HEAP32[$0>>2]=HEAP32[$5>>2]|0;HEAP32[$0+4>>2]=HEAP32[$5+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_init_kernel($0) {
- $0 = $0|0;
- var $1 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $12 = 0, $13 = 0, $14 = 0;
- var $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0;
- var $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0;
- var $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0;
- var $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0;
- var $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $1 = $0;
- $3 = $1;
- $4 = (_mrb_define_module($3,69662)|0);
- $2 = $4;
- $5 = $1;
- $6 = ((($5)) + 84|0);
- HEAP32[$6>>2] = $4;
- $7 = $1;
- $8 = $2;
- _mrb_define_class_method($7,$8,68286,283,0);
- $9 = $1;
- $10 = $2;
- _mrb_define_class_method($9,$10,68299,284,0);
- $11 = $1;
- $12 = $2;
- _mrb_define_class_method($11,$12,68316,283,0);
- $13 = $1;
- $14 = $2;
- _mrb_define_class_method($13,$14,68326,285,0);
- $15 = $1;
- $16 = $2;
- _mrb_define_class_method($15,$16,68342,286,16384);
- $17 = $1;
- $18 = $2;
- _mrb_define_method($17,$18,68348,199,0);
- $19 = $1;
- $20 = $2;
- _mrb_define_method($19,$20,69201,287,262144);
- $21 = $1;
- $22 = $2;
- _mrb_define_method($21,$22,68364,288,262144);
- $23 = $1;
- $24 = $2;
- _mrb_define_method($23,$24,69591,289,262144);
- $25 = $1;
- $26 = $2;
- _mrb_define_method($25,$26,68367,290,0);
- $27 = $1;
- $28 = $2;
- _mrb_define_method($27,$28,68374,291,4096);
- $29 = $1;
- $30 = $2;
- _mrb_define_method($29,$30,68286,283,0);
- $31 = $1;
- $32 = $2;
- _mrb_define_method($31,$32,68383,292,0);
- $33 = $1;
- $34 = $2;
- _mrb_define_method($33,$34,68389,293,0);
- $35 = $1;
- $36 = $2;
- _mrb_define_method($35,$36,68395,294,0);
- $37 = $1;
- $38 = $2;
- _mrb_define_method($37,$38,69289,287,262144);
- $39 = $1;
- $40 = $2;
- _mrb_define_method($39,$40,68399,287,262144);
- $41 = $1;
- $42 = $2;
- _mrb_define_method($41,$42,68406,295,4096);
- $43 = $1;
- $44 = $2;
- _mrb_define_method($43,$44,68299,284,0);
- $45 = $1;
- $46 = $2;
- _mrb_define_method($45,$46,68413,296,0);
- $47 = $1;
- $48 = $2;
- _mrb_define_method($47,$48,69294,297,262144);
- $49 = $1;
- $50 = $2;
- _mrb_define_method($49,$50,69281,298,0);
- $51 = $1;
- $52 = $2;
- _mrb_define_method($51,$52,68418,299,4096);
- $53 = $1;
- $54 = $2;
- _mrb_define_method($53,$54,68432,300,262144);
- $55 = $1;
- $56 = $2;
- _mrb_define_method($55,$56,68445,301,262144);
- $57 = $1;
- $58 = $2;
- _mrb_define_method($57,$58,68472,302,262144);
- $59 = $1;
- $60 = $2;
- _mrb_define_method($59,$60,68494,303,524288);
- $61 = $1;
- $62 = $2;
- _mrb_define_method($61,$62,68516,304,0);
- $63 = $1;
- $64 = $2;
- _mrb_define_method($63,$64,68535,305,262144);
- $65 = $1;
- $66 = $2;
- _mrb_define_method($65,$66,68316,283,0);
- $67 = $1;
- $68 = $2;
- _mrb_define_method($67,$68,68541,305,262144);
- $69 = $1;
- $70 = $2;
- _mrb_define_method($69,$70,68326,285,0);
- $71 = $1;
- $72 = $2;
- _mrb_define_method($71,$72,68550,306,8192);
- $73 = $1;
- $74 = $2;
- _mrb_define_method($73,$74,68558,307,0);
- $75 = $1;
- $76 = $2;
- _mrb_define_method($75,$76,68563,290,0);
- $77 = $1;
- $78 = $2;
- _mrb_define_method($77,$78,68573,308,8192);
- $79 = $1;
- $80 = $2;
- _mrb_define_method($79,$80,68589,309,8192);
- $81 = $1;
- $82 = $2;
- _mrb_define_method($81,$82,68607,310,8192);
- $83 = $1;
- $84 = $2;
- _mrb_define_method($83,$84,68342,286,4096);
- $85 = $1;
- $86 = $2;
- _mrb_define_method($85,$86,68622,311,262144);
- $87 = $1;
- $88 = $2;
- _mrb_define_method($87,$88,68647,312,4096);
- $89 = $1;
- $90 = $2;
- _mrb_define_method($89,$90,68659,291,4096);
- $91 = $1;
- $92 = $2;
- _mrb_define_method($91,$92,68664,313,8192);
- $93 = $1;
- $94 = $2;
- _mrb_define_method($93,$94,68682,314,4096);
- $95 = $1;
- $96 = $2;
- _mrb_define_method($95,$96,69276,282,0);
- $97 = $1;
- $98 = $2;
- _mrb_define_method($97,$98,69580,315,262144);
- $99 = $1;
- $100 = $1;
- $101 = ((($100)) + 32|0);
- $102 = HEAP32[$101>>2]|0;
- $103 = $1;
- $104 = ((($103)) + 84|0);
- $105 = HEAP32[$104>>2]|0;
- _mrb_include_module($99,$102,$105);
- $106 = $1;
- $107 = $1;
- $108 = ((($107)) + 40|0);
- $109 = HEAP32[$108>>2]|0;
- $110 = $1;
- $111 = (_mrb_intern_static($110,68395,3)|0);
- $112 = $1;
- $113 = (_mrb_intern_static($112,68389,5)|0);
- _mrb_alias_method($106,$109,$111,$113);
- STACKTOP = sp;return;
-}
-function _mrb_f_block_given_p_m($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;
- var $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0;
- var $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0;
- var $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0;
- var $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $3 = $1;
- $9 = $3;
- $10 = ((($9)) + 12|0);
- $11 = HEAP32[$10>>2]|0;
- $12 = ((($11)) + 16|0);
- $13 = HEAP32[$12>>2]|0;
- $4 = $13;
- $14 = $4;
- $15 = ((($14)) + 8|0);
- $16 = HEAP32[$15>>2]|0;
- $17 = ((($16)) + 8|0);
- $5 = $17;
- $18 = $4;
- $19 = ((($18)) + -48|0);
- $4 = $19;
- $20 = $4;
- $21 = $3;
- $22 = ((($21)) + 12|0);
- $23 = HEAP32[$22>>2]|0;
- $24 = ((($23)) + 20|0);
- $25 = HEAP32[$24>>2]|0;
- $26 = ($20>>>0)<=($25>>>0);
- if ($26) {
-  $6 = 0;
- } else {
-  $27 = $4;
-  $28 = ((($27)) + 4|0);
-  $29 = HEAP32[$28>>2]|0;
-  $30 = ((($29)) + 20|0);
-  $31 = HEAP32[$30>>2]|0;
-  $32 = ($31|0)!=(0|0);
-  do {
-   if ($32) {
-    $33 = $4;
-    $34 = ((($33)) + 4|0);
-    $35 = HEAP32[$34>>2]|0;
-    $36 = ((($35)) + 20|0);
-    $37 = HEAP32[$36>>2]|0;
-    $7 = $37;
-    while(1) {
-     $38 = $7;
-     $39 = ((($38)) + 4|0);
-     $40 = HEAP32[$39>>2]|0;
-     $41 = ($40|0)!=(0|0);
-     $42 = $7;
-     if (!($41)) {
-      break;
-     }
-     $43 = ((($42)) + 4|0);
-     $44 = HEAP32[$43>>2]|0;
-     $7 = $44;
-    }
-    $45 = ((($42)) + 12|0);
-    $46 = HEAP32[$45>>2]|0;
-    $8 = $46;
-    $47 = $8;
-    $48 = ($47|0)!=(0|0);
-    if ($48) {
-     $49 = $8;
-     $50 = $3;
-     $51 = ((($50)) + 12|0);
-     $52 = HEAP32[$51>>2]|0;
-     $53 = ((($52)) + 8|0);
-     $54 = HEAP32[$53>>2]|0;
-     $55 = ($49|0)==($54|0);
-     if (!($55)) {
-      $56 = $3;
-      $57 = ((($56)) + 12|0);
-      $58 = HEAP32[$57>>2]|0;
-      $59 = ((($58)) + 20|0);
-      $60 = HEAP32[$59>>2]|0;
-      $61 = $7;
-      $62 = ((($61)) + 20|0);
-      $63 = HEAP32[$62>>2]|0;
-      $64 = (($60) + (($63*48)|0)|0);
-      $4 = $64;
-      $65 = $4;
-      $66 = ((($65)) + 48|0);
-      $67 = ((($66)) + 8|0);
-      $68 = HEAP32[$67>>2]|0;
-      $69 = ((($68)) + 8|0);
-      $5 = $69;
-      break;
-     }
-     _mrb_false_value_1053($0);
-     STACKTOP = sp;return;
-    }
-   }
-  } while(0);
-  $70 = $4;
-  $71 = ((($70)) + 36|0);
-  $72 = HEAP32[$71>>2]|0;
-  $73 = ($72|0)>(0);
-  if ($73) {
-   $74 = $4;
-   $75 = ((($74)) + 36|0);
-   $76 = HEAP32[$75>>2]|0;
-   $77 = $5;
-   $78 = (($77) + ($76<<3)|0);
-   $5 = $78;
-  }
-  $79 = $5;
-  $80 = ((($79)) + 4|0);
-  $81 = HEAP32[$80>>2]|0;
-  $82 = ($81|0)==(0);
-  if ($82) {
-   $83 = $5;
-   $84 = HEAP32[$83>>2]|0;
-   $85 = ($84|0)!=(0);
-   $86 = $85 ^ 1;
-   $88 = $86;
-  } else {
-   $88 = 0;
-  }
-  $87 = $88 ^ 1;
-  $89 = $87&1;
-  $90 = $89&255;
-  $6 = $90;
- }
- $91 = $6;
- _mrb_bool_value_1062($0,$91);
- STACKTOP = sp;return;
-}
-function _mrb_local_variables($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $$byval_copy2 = 0, $$byval_copy3 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0;
- var $114 = 0, $115 = 0, $116 = 0, $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0;
- var $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0;
- var $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0;
- var $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0;
- var $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0;
- var $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 96|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(96|0);
- $$byval_copy3 = sp + 88|0;
- $$byval_copy2 = sp + 80|0;
- $$byval_copy1 = sp + 72|0;
- $$byval_copy = sp + 64|0;
- $4 = sp + 48|0;
- $8 = sp + 24|0;
- $9 = sp + 16|0;
- $11 = sp;
- $3 = $1;
- $12 = $3;
- $13 = ((($12)) + 12|0);
- $14 = HEAP32[$13>>2]|0;
- $15 = ((($14)) + 16|0);
- $16 = HEAP32[$15>>2]|0;
- $17 = ((($16)) + -48|0);
- $18 = ((($17)) + 4|0);
- $19 = HEAP32[$18>>2]|0;
- $5 = $19;
- $20 = $5;
- $21 = HEAP32[$20>>2]|0;
- $22 = $21 >>> 11;
- $23 = $22 & 128;
- $24 = ($23|0)!=(0);
- if ($24) {
-  $25 = $3;
-  _mrb_ary_new($0,$25);
-  STACKTOP = sp;return;
- }
- $26 = $5;
- $27 = ((($26)) + 12|0);
- $28 = HEAP32[$27>>2]|0;
- $6 = $28;
- $29 = $6;
- $30 = ((($29)) + 24|0);
- $31 = HEAP32[$30>>2]|0;
- $32 = ($31|0)!=(0|0);
- $33 = $3;
- if (!($32)) {
-  _mrb_ary_new($0,$33);
-  STACKTOP = sp;return;
- }
- $34 = $6;
- $35 = HEAP16[$34>>1]|0;
- $36 = $35&65535;
- $37 = (($36) - 1)|0;
- _mrb_ary_new_capa($8,$33,$37);
- ;HEAP32[$4>>2]=HEAP32[$8>>2]|0;HEAP32[$4+4>>2]=HEAP32[$8+4>>2]|0;
- $7 = 0;
- while(1) {
-  $38 = $7;
-  $39 = (($38) + 1)|0;
-  $40 = $6;
-  $41 = HEAP16[$40>>1]|0;
-  $42 = $41&65535;
-  $43 = ($39>>>0)<($42>>>0);
-  if (!($43)) {
-   break;
-  }
-  $44 = $6;
-  $45 = ((($44)) + 24|0);
-  $46 = HEAP32[$45>>2]|0;
-  $47 = $7;
-  $48 = (($46) + ($47<<3)|0);
-  $49 = HEAP32[$48>>2]|0;
-  $50 = ($49|0)!=(0);
-  if ($50) {
-   $51 = $3;
-   $52 = $6;
-   $53 = ((($52)) + 24|0);
-   $54 = HEAP32[$53>>2]|0;
-   $55 = $7;
-   $56 = (($54) + ($55<<3)|0);
-   $57 = HEAP32[$56>>2]|0;
-   _mrb_symbol_value_1003($9,$57);
-   ;HEAP32[$$byval_copy>>2]=HEAP32[$4>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$4+4>>2]|0;
-   ;HEAP32[$$byval_copy1>>2]=HEAP32[$9>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$9+4>>2]|0;
-   _mrb_ary_push($51,$$byval_copy,$$byval_copy1);
-  }
-  $58 = $7;
-  $59 = (($58) + 1)|0;
-  $7 = $59;
- }
- $60 = $5;
- $61 = ((($60)) + 20|0);
- $62 = HEAP32[$61>>2]|0;
- $63 = ($62|0)!=(0|0);
- L16: do {
-  if ($63) {
-   $64 = $5;
-   $65 = ((($64)) + 20|0);
-   $66 = HEAP32[$65>>2]|0;
-   $10 = $66;
-   while(1) {
-    $67 = $10;
-    $68 = ($67|0)!=(0|0);
-    if (!($68)) {
-     break L16;
-    }
-    $69 = $3;
-    $70 = ((($69)) + 12|0);
-    $71 = HEAP32[$70>>2]|0;
-    $72 = ((($71)) + 20|0);
-    $73 = HEAP32[$72>>2]|0;
-    $74 = $10;
-    $75 = ((($74)) + 20|0);
-    $76 = HEAP32[$75>>2]|0;
-    $77 = (($73) + (($76*48)|0)|0);
-    $78 = ((($77)) + 4|0);
-    $79 = HEAP32[$78>>2]|0;
-    $80 = HEAP32[$79>>2]|0;
-    $81 = $80 >>> 11;
-    $82 = $81 & 128;
-    $83 = ($82|0)!=(0);
-    L21: do {
-     if (!($83)) {
-      $84 = $3;
-      $85 = ((($84)) + 12|0);
-      $86 = HEAP32[$85>>2]|0;
-      $87 = ((($86)) + 20|0);
-      $88 = HEAP32[$87>>2]|0;
-      $89 = $10;
-      $90 = ((($89)) + 20|0);
-      $91 = HEAP32[$90>>2]|0;
-      $92 = (($88) + (($91*48)|0)|0);
-      $93 = ((($92)) + 4|0);
-      $94 = HEAP32[$93>>2]|0;
-      $95 = ((($94)) + 12|0);
-      $96 = HEAP32[$95>>2]|0;
-      $6 = $96;
-      $97 = $6;
-      $98 = ((($97)) + 24|0);
-      $99 = HEAP32[$98>>2]|0;
-      $100 = ($99|0)!=(0|0);
-      if ($100) {
-       $7 = 0;
-       while(1) {
-        $101 = $7;
-        $102 = (($101) + 1)|0;
-        $103 = $6;
-        $104 = HEAP16[$103>>1]|0;
-        $105 = $104&65535;
-        $106 = ($102>>>0)<($105>>>0);
-        if (!($106)) {
-         break L21;
-        }
-        $107 = $6;
-        $108 = ((($107)) + 24|0);
-        $109 = HEAP32[$108>>2]|0;
-        $110 = $7;
-        $111 = (($109) + ($110<<3)|0);
-        $112 = HEAP32[$111>>2]|0;
-        $113 = ($112|0)!=(0);
-        if ($113) {
-         $114 = $3;
-         $115 = $6;
-         $116 = ((($115)) + 24|0);
-         $117 = HEAP32[$116>>2]|0;
-         $118 = $7;
-         $119 = (($117) + ($118<<3)|0);
-         $120 = HEAP32[$119>>2]|0;
-         _mrb_symbol_value_1003($11,$120);
-         ;HEAP32[$$byval_copy2>>2]=HEAP32[$4>>2]|0;HEAP32[$$byval_copy2+4>>2]=HEAP32[$4+4>>2]|0;
-         ;HEAP32[$$byval_copy3>>2]=HEAP32[$11>>2]|0;HEAP32[$$byval_copy3+4>>2]=HEAP32[$11+4>>2]|0;
-         _mrb_ary_push($114,$$byval_copy2,$$byval_copy3);
-        }
-        $121 = $7;
-        $122 = (($121) + 1)|0;
-        $7 = $122;
-       }
-      }
-     }
-    } while(0);
-    $123 = $10;
-    $124 = ((($123)) + 4|0);
-    $125 = HEAP32[$124>>2]|0;
-    $10 = $125;
-   }
-  }
- } while(0);
- ;HEAP32[$0>>2]=HEAP32[$4>>2]|0;HEAP32[$0+4>>2]=HEAP32[$4+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_obj_equal_m($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);
- $$byval_copy1 = sp + 32|0;
- $$byval_copy = sp + 24|0;
- $vararg_buffer = sp;
- $4 = sp + 8|0;
- $3 = $1;
- $5 = $3;
- HEAP32[$vararg_buffer>>2] = $4;
- (_mrb_get_args($5,69199,$vararg_buffer)|0);
- $6 = $3;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
- ;HEAP32[$$byval_copy1>>2]=HEAP32[$4>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$4+4>>2]|0;
- $7 = (_mrb_obj_equal($6,$$byval_copy,$$byval_copy1)|0);
- _mrb_bool_value_1062($0,$7);
- STACKTOP = sp;return;
-}
-function _mrb_obj_not_equal_m($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $10 = 0, $11 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);
- $$byval_copy1 = sp + 32|0;
- $$byval_copy = sp + 24|0;
- $vararg_buffer = sp;
- $4 = sp + 8|0;
- $3 = $1;
- $5 = $3;
- HEAP32[$vararg_buffer>>2] = $4;
- (_mrb_get_args($5,69199,$vararg_buffer)|0);
- $6 = $3;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
- ;HEAP32[$$byval_copy1>>2]=HEAP32[$4>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$4+4>>2]|0;
- $7 = (_mrb_equal($6,$$byval_copy,$$byval_copy1)|0);
- $8 = ($7<<24>>24)!=(0);
- $9 = $8 ^ 1;
- $10 = $9&1;
- $11 = $10&255;
- _mrb_bool_value_1062($0,$11);
- STACKTOP = sp;return;
-}
-function _mrb_equal_m($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);
- $$byval_copy1 = sp + 32|0;
- $$byval_copy = sp + 24|0;
- $vararg_buffer = sp;
- $4 = sp + 8|0;
- $3 = $1;
- $5 = $3;
- HEAP32[$vararg_buffer>>2] = $4;
- (_mrb_get_args($5,69199,$vararg_buffer)|0);
- $6 = $3;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
- ;HEAP32[$$byval_copy1>>2]=HEAP32[$4>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$4+4>>2]|0;
- $7 = (_mrb_equal($6,$$byval_copy,$$byval_copy1)|0);
- _mrb_bool_value_1062($0,$7);
- STACKTOP = sp;return;
-}
-function _mrb_obj_id_m($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $3 = 0, $4 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $$byval_copy = sp + 8|0;
- $3 = $1;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
- $4 = (_mrb_obj_id($$byval_copy)|0);
- _mrb_fixnum_value_996($0,$4);
- STACKTOP = sp;return;
-}
-function _mrb_obj_class_m($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $$byval_copy = sp + 8|0;
- $3 = $1;
- $4 = $3;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
- $5 = (_mrb_obj_class($4,$$byval_copy)|0);
- _mrb_obj_value_991($0,$5);
- STACKTOP = sp;return;
-}
-function _mrb_obj_extend_m($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, $vararg_ptr1 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $$byval_copy = sp + 24|0;
- $vararg_buffer = sp;
- $4 = sp + 12|0;
- $5 = sp + 8|0;
- $3 = $1;
- $6 = $3;
- HEAP32[$vararg_buffer>>2] = $4;
- $vararg_ptr1 = ((($vararg_buffer)) + 4|0);
- HEAP32[$vararg_ptr1>>2] = $5;
- (_mrb_get_args($6,68856,$vararg_buffer)|0);
- $7 = $3;
- $8 = HEAP32[$5>>2]|0;
- $9 = HEAP32[$4>>2]|0;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
- _mrb_obj_extend($0,$7,$8,$9,$$byval_copy);
- STACKTOP = sp;return;
-}
-function _mrb_obj_init_copy($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $$byval_copy2 = 0, $$byval_copy3 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0;
- var $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);
- $$byval_copy3 = sp + 48|0;
- $$byval_copy2 = sp + 40|0;
- $$byval_copy1 = sp + 32|0;
- $$byval_copy = sp + 24|0;
- $vararg_buffer = sp;
- $4 = sp + 8|0;
- $3 = $1;
- $5 = $3;
- HEAP32[$vararg_buffer>>2] = $4;
- (_mrb_get_args($5,69199,$vararg_buffer)|0);
- $6 = $3;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
- ;HEAP32[$$byval_copy1>>2]=HEAP32[$4>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$4+4>>2]|0;
- $7 = (_mrb_obj_equal($6,$$byval_copy,$$byval_copy1)|0);
- $8 = ($7<<24>>24)!=(0);
- if ($8) {
-  ;HEAP32[$0>>2]=HEAP32[$2>>2]|0;HEAP32[$0+4>>2]=HEAP32[$2+4>>2]|0;
-  STACKTOP = sp;return;
- }
- $9 = ((($2)) + 4|0);
- $10 = HEAP32[$9>>2]|0;
- $11 = ((($4)) + 4|0);
- $12 = HEAP32[$11>>2]|0;
- $13 = ($10|0)!=($12|0);
- if ($13) {
-  $19 = $3;
-  $20 = $3;
-  $21 = (_mrb_class_get($20,69204)|0);
-  _mrb_raise($19,$21,68810);
-  // unreachable;
- }
- $14 = $3;
- ;HEAP32[$$byval_copy2>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy2+4>>2]=HEAP32[$2+4>>2]|0;
- $15 = (_mrb_obj_class($14,$$byval_copy2)|0);
- $16 = $3;
- ;HEAP32[$$byval_copy3>>2]=HEAP32[$4>>2]|0;HEAP32[$$byval_copy3+4>>2]=HEAP32[$4+4>>2]|0;
- $17 = (_mrb_obj_class($16,$$byval_copy3)|0);
- $18 = ($15|0)!=($17|0);
- if ($18) {
-  $19 = $3;
-  $20 = $3;
-  $21 = (_mrb_class_get($20,69204)|0);
-  _mrb_raise($19,$21,68810);
-  // unreachable;
- }
- ;HEAP32[$0>>2]=HEAP32[$2>>2]|0;HEAP32[$0+4>>2]=HEAP32[$2+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _obj_is_instance_of($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $$byval_copy = sp + 24|0;
- $vararg_buffer = sp;
- $4 = sp + 8|0;
- $3 = $1;
- $5 = $3;
- HEAP32[$vararg_buffer>>2] = $4;
- (_mrb_get_args($5,68805,$vararg_buffer)|0);
- $6 = $3;
- $7 = HEAP32[$4>>2]|0;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
- $8 = (_mrb_obj_is_instance_of($6,$$byval_copy,$7)|0);
- _mrb_bool_value_1062($0,$8);
- STACKTOP = sp;return;
-}
-function _mrb_obj_ivar_defined($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $10 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $$byval_copy = sp + 16|0;
- $vararg_buffer = sp;
- $4 = sp + 4|0;
- $3 = $1;
- $5 = $3;
- HEAP32[$vararg_buffer>>2] = $4;
- (_mrb_get_args($5,68770,$vararg_buffer)|0);
- $6 = $3;
- $7 = HEAP32[$4>>2]|0;
- _mrb_iv_check($6,$7);
- $8 = $3;
- $9 = HEAP32[$4>>2]|0;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
- $10 = (_mrb_iv_defined($8,$$byval_copy,$9)|0);
- _mrb_bool_value_1062($0,$10);
- STACKTOP = sp;return;
-}
-function _mrb_obj_ivar_get($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $$byval_copy = sp + 16|0;
- $vararg_buffer = sp;
- $4 = sp + 4|0;
- $3 = $1;
- $5 = $3;
- HEAP32[$vararg_buffer>>2] = $4;
- (_mrb_get_args($5,68770,$vararg_buffer)|0);
- $6 = $3;
- $7 = HEAP32[$4>>2]|0;
- _mrb_iv_check($6,$7);
- $8 = $3;
- $9 = HEAP32[$4>>2]|0;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
- _mrb_iv_get($0,$8,$$byval_copy,$9);
- STACKTOP = sp;return;
-}
-function _mrb_obj_ivar_set($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $$byval_copy2 = 0, $10 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, $vararg_ptr1 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);
- $$byval_copy2 = sp + 32|0;
- $$byval_copy = sp + 24|0;
- $vararg_buffer = sp;
- $4 = sp + 16|0;
- $5 = sp + 8|0;
- $3 = $1;
- $6 = $3;
- HEAP32[$vararg_buffer>>2] = $4;
- $vararg_ptr1 = ((($vararg_buffer)) + 4|0);
- HEAP32[$vararg_ptr1>>2] = $5;
- (_mrb_get_args($6,68807,$vararg_buffer)|0);
- $7 = $3;
- $8 = HEAP32[$4>>2]|0;
- _mrb_iv_check($7,$8);
- $9 = $3;
- $10 = HEAP32[$4>>2]|0;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
- ;HEAP32[$$byval_copy2>>2]=HEAP32[$5>>2]|0;HEAP32[$$byval_copy2+4>>2]=HEAP32[$5+4>>2]|0;
- _mrb_iv_set($9,$$byval_copy,$10,$$byval_copy2);
- ;HEAP32[$0>>2]=HEAP32[$5>>2]|0;HEAP32[$0+4>>2]=HEAP32[$5+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_obj_is_kind_of_m($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $$byval_copy = sp + 24|0;
- $vararg_buffer = sp;
- $4 = sp + 8|0;
- $3 = $1;
- $5 = $3;
- HEAP32[$vararg_buffer>>2] = $4;
- (_mrb_get_args($5,68805,$vararg_buffer)|0);
- $6 = $3;
- $7 = HEAP32[$4>>2]|0;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
- $8 = (_mrb_obj_is_kind_of($6,$$byval_copy,$7)|0);
- _mrb_bool_value_1062($0,$8);
- STACKTOP = sp;return;
-}
-function _mrb_obj_methods_m($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $$byval_copy = sp + 8|0;
- $vararg_buffer = sp;
- $4 = sp + 16|0;
- $3 = $1;
- HEAP8[$4>>0] = 1;
- $5 = $3;
- HEAP32[$vararg_buffer>>2] = $4;
- (_mrb_get_args($5,68724,$vararg_buffer)|0);
- $6 = $3;
- $7 = HEAP8[$4>>0]|0;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
- _mrb_obj_methods($0,$6,$7,$$byval_copy,0);
- STACKTOP = sp;return;
-}
-function _mrb_false($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $3 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $1;
- _mrb_false_value_1053($0);
- STACKTOP = sp;return;
-}
-function _mrb_obj_private_methods($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $$byval_copy = sp + 8|0;
- $vararg_buffer = sp;
- $4 = sp + 16|0;
- $3 = $1;
- HEAP8[$4>>0] = 1;
- $5 = $3;
- HEAP32[$vararg_buffer>>2] = $4;
- (_mrb_get_args($5,68724,$vararg_buffer)|0);
- $6 = $3;
- $7 = HEAP8[$4>>0]|0;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
- _mrb_obj_methods($0,$6,$7,$$byval_copy,2);
- STACKTOP = sp;return;
-}
-function _mrb_obj_protected_methods($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $$byval_copy = sp + 8|0;
- $vararg_buffer = sp;
- $4 = sp + 16|0;
- $3 = $1;
- HEAP8[$4>>0] = 1;
- $5 = $3;
- HEAP32[$vararg_buffer>>2] = $4;
- (_mrb_get_args($5,68724,$vararg_buffer)|0);
- $6 = $3;
- $7 = HEAP8[$4>>0]|0;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
- _mrb_obj_methods($0,$6,$7,$$byval_copy,4);
- STACKTOP = sp;return;
-}
-function _mrb_obj_public_methods($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $$byval_copy = sp + 8|0;
- $vararg_buffer = sp;
- $4 = sp + 16|0;
- $3 = $1;
- HEAP8[$4>>0] = 1;
- $5 = $3;
- HEAP32[$vararg_buffer>>2] = $4;
- (_mrb_get_args($5,68724,$vararg_buffer)|0);
- $6 = $3;
- $7 = HEAP8[$4>>0]|0;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
- _mrb_obj_methods($0,$6,$7,$$byval_copy,0);
- STACKTOP = sp;return;
-}
-function _mrb_obj_remove_instance_variable($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, $vararg_buffer1 = 0;
- var label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);
- $$byval_copy = sp + 48|0;
- $vararg_buffer1 = sp + 8|0;
- $vararg_buffer = sp;
- $4 = sp + 40|0;
- $5 = sp + 32|0;
- $6 = sp + 24|0;
- $7 = sp + 16|0;
- $3 = $1;
- $8 = $3;
- HEAP32[$vararg_buffer>>2] = $4;
- (_mrb_get_args($8,68770,$vararg_buffer)|0);
- $9 = $3;
- $10 = HEAP32[$4>>2]|0;
- _mrb_iv_check($9,$10);
- $11 = $3;
- $12 = HEAP32[$4>>2]|0;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
- _mrb_iv_remove($6,$11,$$byval_copy,$12);
- ;HEAP32[$5>>2]=HEAP32[$6>>2]|0;HEAP32[$5+4>>2]=HEAP32[$6+4>>2]|0;
- $13 = ((($5)) + 4|0);
- $14 = HEAP32[$13>>2]|0;
- $15 = ($14|0)==(5);
- if ($15) {
-  $16 = $3;
-  $17 = HEAP32[$4>>2]|0;
-  $18 = $3;
-  $19 = HEAP32[$4>>2]|0;
-  _mrb_sym2str($7,$18,$19);
-  ;HEAP8[$vararg_buffer1>>0]=HEAP8[$7>>0]|0;HEAP8[$vararg_buffer1+1>>0]=HEAP8[$7+1>>0]|0;HEAP8[$vararg_buffer1+2>>0]=HEAP8[$7+2>>0]|0;HEAP8[$vararg_buffer1+3>>0]=HEAP8[$7+3>>0]|0;HEAP8[$vararg_buffer1+4>>0]=HEAP8[$7+4>>0]|0;HEAP8[$vararg_buffer1+5>>0]=HEAP8[$7+5>>0]|0;HEAP8[$vararg_buffer1+6>>0]=HEAP8[$7+6>>0]|0;HEAP8[$vararg_buffer1+7>>0]=HEAP8[$7+7>>0]|0;
-  _mrb_name_error($16,$17,68772,$vararg_buffer1);
-  // unreachable;
- } else {
-  ;HEAP32[$0>>2]=HEAP32[$5>>2]|0;HEAP32[$0+4>>2]=HEAP32[$5+4>>2]|0;
-  STACKTOP = sp;return;
- }
-}
-function _obj_respond_to($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $$byval_copy5 = 0, $$byval_copy6 = 0, $$byval_copy7 = 0, $$byval_copy8 = 0, $$byval_copy9 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0;
- var $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0;
- var $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0;
- var $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, $vararg_buffer2 = 0, $vararg_ptr1 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 160|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(160|0);
- $$byval_copy9 = sp + 136|0;
- $$byval_copy8 = sp + 128|0;
- $$byval_copy7 = sp + 120|0;
- $$byval_copy6 = sp + 112|0;
- $$byval_copy5 = sp + 104|0;
- $$byval_copy = sp + 96|0;
- $vararg_buffer2 = sp + 8|0;
- $vararg_buffer = sp;
- $4 = sp + 80|0;
- $7 = sp + 145|0;
- $9 = sp + 64|0;
- $10 = sp + 56|0;
- $11 = sp + 48|0;
- $12 = sp + 40|0;
- $13 = sp + 24|0;
- $14 = sp + 16|0;
- $3 = $1;
- HEAP8[$7>>0] = 0;
- $8 = 1;
- $15 = $3;
- HEAP32[$vararg_buffer>>2] = $4;
- $vararg_ptr1 = ((($vararg_buffer)) + 4|0);
- HEAP32[$vararg_ptr1>>2] = $7;
- (_mrb_get_args($15,68727,$vararg_buffer)|0);
- $16 = ((($4)) + 4|0);
- $17 = HEAP32[$16>>2]|0;
- $18 = ($17|0)==(4);
- do {
-  if ($18) {
-   $19 = HEAP32[$4>>2]|0;
-   $5 = $19;
-  } else {
-   $20 = ((($4)) + 4|0);
-   $21 = HEAP32[$20>>2]|0;
-   $22 = ($21|0)==(16);
-   if (!($22)) {
-    $23 = $3;
-    ;HEAP32[$$byval_copy>>2]=HEAP32[$4>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$4+4>>2]|0;
-    _mrb_check_string_type($10,$23,$$byval_copy);
-    ;HEAP32[$9>>2]=HEAP32[$10>>2]|0;HEAP32[$9+4>>2]=HEAP32[$10+4>>2]|0;
-    $24 = ((($9)) + 4|0);
-    $25 = HEAP32[$24>>2]|0;
-    $26 = ($25|0)==(0);
-    if ($26) {
-     $27 = HEAP32[$9>>2]|0;
-     $28 = ($27|0)!=(0);
-     if (!($28)) {
-      $29 = $3;
-      ;HEAP32[$$byval_copy5>>2]=HEAP32[$4>>2]|0;HEAP32[$$byval_copy5+4>>2]=HEAP32[$4+4>>2]|0;
-      _mrb_inspect($11,$29,$$byval_copy5);
-      ;HEAP32[$9>>2]=HEAP32[$11>>2]|0;HEAP32[$9+4>>2]=HEAP32[$11+4>>2]|0;
-      $30 = $3;
-      $31 = $3;
-      $32 = (_mrb_class_get($31,69204)|0);
-      ;HEAP8[$vararg_buffer2>>0]=HEAP8[$9>>0]|0;HEAP8[$vararg_buffer2+1>>0]=HEAP8[$9+1>>0]|0;HEAP8[$vararg_buffer2+2>>0]=HEAP8[$9+2>>0]|0;HEAP8[$vararg_buffer2+3>>0]=HEAP8[$9+3>>0]|0;HEAP8[$vararg_buffer2+4>>0]=HEAP8[$9+4>>0]|0;HEAP8[$vararg_buffer2+5>>0]=HEAP8[$9+5>>0]|0;HEAP8[$vararg_buffer2+6>>0]=HEAP8[$9+6>>0]|0;HEAP8[$vararg_buffer2+7>>0]=HEAP8[$9+7>>0]|0;
-      _mrb_raisef($30,$32,68731,$vararg_buffer2);
-      // unreachable;
-     }
-    }
-   }
-   $33 = $3;
-   ;HEAP32[$$byval_copy6>>2]=HEAP32[$4>>2]|0;HEAP32[$$byval_copy6+4>>2]=HEAP32[$4+4>>2]|0;
-   _mrb_check_intern_str($12,$33,$$byval_copy6);
-   ;HEAP32[$9>>2]=HEAP32[$12>>2]|0;HEAP32[$9+4>>2]=HEAP32[$12+4>>2]|0;
-   $34 = ((($9)) + 4|0);
-   $35 = HEAP32[$34>>2]|0;
-   $36 = ($35|0)==(0);
-   if ($36) {
-    $37 = HEAP32[$9>>2]|0;
-    $38 = ($37|0)!=(0);
-    if (!($38)) {
-     $8 = 0;
-     break;
-    }
-   }
-   $39 = HEAP32[$9>>2]|0;
-   $5 = $39;
-  }
- } while(0);
- $40 = $8;
- $41 = ($40<<24>>24)!=(0);
- if ($41) {
-  $42 = $3;
-  $43 = $5;
-  $44 = HEAP8[$7>>0]|0;
-  $45 = ($44<<24>>24)!=(0);
-  $46 = $45 ^ 1;
-  $47 = $46&1;
-  ;HEAP32[$$byval_copy7>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy7+4>>2]=HEAP32[$2+4>>2]|0;
-  $48 = (_basic_obj_respond_to($42,$$byval_copy7,$43,$47)|0);
-  $8 = $48;
- }
- $49 = $8;
- $50 = ($49<<24>>24)!=(0);
- if (!($50)) {
-  $51 = $3;
-  $52 = (_mrb_intern_static($51,68750,19)|0);
-  $6 = $52;
-  $53 = $3;
-  $54 = $6;
-  $55 = HEAP8[$7>>0]|0;
-  $56 = ($55<<24>>24)!=(0);
-  $57 = $56 ^ 1;
-  $58 = $57&1;
-  ;HEAP32[$$byval_copy8>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy8+4>>2]=HEAP32[$2+4>>2]|0;
-  $59 = (_basic_obj_respond_to($53,$$byval_copy8,$54,$58)|0);
-  $60 = ($59<<24>>24)!=(0);
-  if ($60) {
-   ;HEAP32[$13>>2]=HEAP32[$4>>2]|0;HEAP32[$13+4>>2]=HEAP32[$4+4>>2]|0;
-   $61 = ((($13)) + 8|0);
-   $62 = HEAP8[$7>>0]|0;
-   _mrb_bool_value_1062($14,$62);
-   ;HEAP32[$61>>2]=HEAP32[$14>>2]|0;HEAP32[$61+4>>2]=HEAP32[$14+4>>2]|0;
-   $63 = $3;
-   $64 = $6;
-   ;HEAP32[$$byval_copy9>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy9+4>>2]=HEAP32[$2+4>>2]|0;
-   _mrb_funcall_argv($0,$63,$$byval_copy9,$64,2,$13);
-   STACKTOP = sp;return;
-  }
- }
- $65 = $8;
- _mrb_bool_value_1062($0,$65);
- STACKTOP = sp;return;
-}
-function _mrb_obj_singleton_methods_m($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $$byval_copy = sp + 8|0;
- $vararg_buffer = sp;
- $4 = sp + 16|0;
- $3 = $1;
- HEAP8[$4>>0] = 1;
- $5 = $3;
- HEAP32[$vararg_buffer>>2] = $4;
- (_mrb_get_args($5,68724,$vararg_buffer)|0);
- $6 = $3;
- $7 = HEAP8[$4>>0]|0;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
- _mrb_obj_singleton_methods($0,$6,$7,$$byval_copy);
- STACKTOP = sp;return;
-}
-function _mod_define_singleton_method($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;
- var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, $vararg_ptr1 = 0, label = 0;
- var sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);
- $$byval_copy = sp + 40|0;
- $vararg_buffer = sp;
- $5 = sp + 24|0;
- $6 = sp + 16|0;
- $7 = sp + 8|0;
- $3 = $1;
- _mrb_nil_value_1054($6);
- $8 = $3;
- HEAP32[$vararg_buffer>>2] = $5;
- $vararg_ptr1 = ((($vararg_buffer)) + 4|0);
- HEAP32[$vararg_ptr1>>2] = $6;
- (_mrb_get_args($8,68706,$vararg_buffer)|0);
- $9 = ((($6)) + 4|0);
- $10 = HEAP32[$9>>2]|0;
- $11 = ($10|0)==(0);
- if ($11) {
-  $12 = HEAP32[$6>>2]|0;
-  $13 = ($12|0)!=(0);
-  if (!($13)) {
-   $14 = $3;
-   $15 = $3;
-   $16 = (_mrb_class_get($15,69160)|0);
-   _mrb_raise($14,$16,68709);
-   // unreachable;
-  }
- }
- $17 = $3;
- $18 = $3;
- $19 = ((($18)) + 44|0);
- $20 = HEAP32[$19>>2]|0;
- $21 = (_mrb_obj_alloc($17,13,$20)|0);
- $4 = $21;
- $22 = $4;
- $23 = HEAP32[$6>>2]|0;
- _mrb_proc_copy($22,$23);
- $24 = $4;
- $25 = HEAP32[$24>>2]|0;
- $26 = $25 >>> 11;
- $27 = $26 | 256;
- $28 = HEAP32[$24>>2]|0;
- $29 = $27 & 2097151;
- $30 = $29 << 11;
- $31 = $28 & 2047;
- $32 = $31 | $30;
- HEAP32[$24>>2] = $32;
- $33 = $3;
- $34 = $3;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
- _mrb_singleton_class($7,$34,$$byval_copy);
- $35 = HEAP32[$7>>2]|0;
- $36 = HEAP32[$5>>2]|0;
- $37 = $4;
- _mrb_define_method_raw($33,$35,$36,$37);
- $38 = HEAP32[$5>>2]|0;
- _mrb_symbol_value_1003($0,$38);
- STACKTOP = sp;return;
-}
-function _mrb_obj_ceqq($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $$byval_copy2 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0;
- var $27 = 0, $28 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 96|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(96|0);
- $$byval_copy2 = sp + 80|0;
- $$byval_copy1 = sp + 72|0;
- $$byval_copy = sp + 64|0;
- $vararg_buffer = sp;
- $4 = sp + 48|0;
- $8 = sp + 24|0;
- $9 = sp + 16|0;
- $10 = sp + 8|0;
- $3 = $1;
- $11 = $3;
- $12 = (_mrb_intern_static($11,69591,3)|0);
- $7 = $12;
- $13 = $3;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
- _mrb_ary_splat($8,$13,$$byval_copy);
- $14 = $3;
- HEAP32[$vararg_buffer>>2] = $4;
- (_mrb_get_args($14,69199,$vararg_buffer)|0);
- $15 = HEAP32[$8>>2]|0;
- $16 = ((($15)) + 12|0);
- $17 = HEAP32[$16>>2]|0;
- $6 = $17;
- $5 = 0;
- while(1) {
-  $18 = $5;
-  $19 = $6;
-  $20 = ($18|0)<($19|0);
-  if (!($20)) {
-   label = 6;
-   break;
-  }
-  $21 = $3;
-  $22 = $5;
-  ;HEAP32[$$byval_copy1>>2]=HEAP32[$8>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$8+4>>2]|0;
-  _mrb_ary_entry($10,$$byval_copy1,$22);
-  $23 = $7;
-  ;HEAP32[$$byval_copy2>>2]=HEAP32[$10>>2]|0;HEAP32[$$byval_copy2+4>>2]=HEAP32[$10+4>>2]|0;
-  _mrb_funcall_argv($9,$21,$$byval_copy2,$23,1,$4);
-  $24 = ((($9)) + 4|0);
-  $25 = HEAP32[$24>>2]|0;
-  $26 = ($25|0)!=(0);
-  if ($26) {
-   label = 4;
-   break;
-  }
-  $27 = $5;
-  $28 = (($27) + 1)|0;
-  $5 = $28;
- }
- if ((label|0) == 4) {
-  _mrb_true_value_1052($0);
-  STACKTOP = sp;return;
- }
- else if ((label|0) == 6) {
-  _mrb_false_value_1053($0);
-  STACKTOP = sp;return;
- }
-}
-function _mrb_true_value_1052($0) {
- $0 = $0|0;
- var $1 = 0, $2 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $1 = sp;
- $2 = ((($1)) + 4|0);
- HEAP32[$2>>2] = 2;
- HEAP32[$1>>2] = 1;
- ;HEAP32[$0>>2]=HEAP32[$1>>2]|0;HEAP32[$0+4>>2]=HEAP32[$1+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_false_value_1053($0) {
- $0 = $0|0;
- var $1 = 0, $2 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $1 = sp;
- $2 = ((($1)) + 4|0);
- HEAP32[$2>>2] = 0;
- HEAP32[$1>>2] = 1;
- ;HEAP32[$0>>2]=HEAP32[$1>>2]|0;HEAP32[$0+4>>2]=HEAP32[$1+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_nil_value_1054($0) {
- $0 = $0|0;
- var $1 = 0, $2 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $1 = sp;
- $2 = ((($1)) + 4|0);
- HEAP32[$2>>2] = 0;
- HEAP32[$1>>2] = 0;
- ;HEAP32[$0>>2]=HEAP32[$1>>2]|0;HEAP32[$0+4>>2]=HEAP32[$1+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_obj_singleton_methods($0,$1,$2,$3) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- var $$byval_copy = 0, $$byval_copy3 = 0, $$byval_copy4 = 0, $$old = 0, $$old2 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0;
- var $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0;
- var $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0;
- var $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $8 = 0, $9 = 0, $or$cond = 0, label = 0;
- var sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 80|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(80|0);
- $$byval_copy4 = sp + 56|0;
- $$byval_copy3 = sp + 48|0;
- $$byval_copy = sp + 40|0;
- $7 = sp + 24|0;
- $10 = sp + 8|0;
- $11 = sp;
- $4 = $1;
- $5 = $2;
- $12 = $4;
- $13 = (_kh_init_st($12)|0);
- $9 = $13;
- $14 = $4;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$3>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$3+4>>2]|0;
- $15 = (_mrb_class_984($14,$$byval_copy)|0);
- $8 = $15;
- $16 = $8;
- $17 = ($16|0)!=(0|0);
- if ($17) {
-  $18 = $8;
-  $19 = HEAP32[$18>>2]|0;
-  $20 = $19 & 255;
-  $21 = ($20|0)==(12);
-  if ($21) {
-   $22 = $4;
-   $23 = $8;
-   $24 = $9;
-   _method_entry_loop($22,$23,$24);
-   $25 = $8;
-   $26 = ((($25)) + 20|0);
-   $27 = HEAP32[$26>>2]|0;
-   $8 = $27;
-  }
- }
- $28 = $5;
- $29 = ($28<<24>>24)!=(0);
- $30 = $8;
- $31 = ($30|0)!=(0|0);
- $or$cond = $29 & $31;
- L5: do {
-  if ($or$cond) {
-   while(1) {
-    $32 = $8;
-    $33 = HEAP32[$32>>2]|0;
-    $34 = $33 & 255;
-    $35 = ($34|0)==(12);
-    if (!($35)) {
-     $36 = $8;
-     $37 = HEAP32[$36>>2]|0;
-     $38 = $37 & 255;
-     $39 = ($38|0)==(11);
-     if (!($39)) {
-      break L5;
-     }
-    }
-    $40 = $4;
-    $41 = $8;
-    $42 = $9;
-    _method_entry_loop($40,$41,$42);
-    $43 = $8;
-    $44 = ((($43)) + 20|0);
-    $45 = HEAP32[$44>>2]|0;
-    $8 = $45;
-    $$old = $8;
-    $$old2 = ($$old|0)!=(0|0);
-    if (!($$old2)) {
-     break;
-    }
-   }
-  }
- } while(0);
- $46 = $4;
- _mrb_ary_new($10,$46);
- ;HEAP32[$7>>2]=HEAP32[$10>>2]|0;HEAP32[$7+4>>2]=HEAP32[$10+4>>2]|0;
- $6 = 0;
- while(1) {
-  $47 = $6;
-  $48 = $9;
-  $49 = HEAP32[$48>>2]|0;
-  $50 = ($47>>>0)<($49>>>0);
-  if (!($50)) {
-   break;
-  }
-  $51 = $9;
-  $52 = ((($51)) + 12|0);
-  $53 = HEAP32[$52>>2]|0;
-  $54 = $6;
-  $55 = (($54>>>0) / 4)&-1;
-  $56 = (($53) + ($55)|0);
-  $57 = HEAP8[$56>>0]|0;
-  $58 = $57&255;
-  $59 = $6;
-  $60 = (($59>>>0) % 4)&-1;
-  $61 = (68258 + ($60)|0);
-  $62 = HEAP8[$61>>0]|0;
-  $63 = $62&255;
-  $64 = $58 & $63;
-  $65 = ($64|0)!=(0);
-  if (!($65)) {
-   $66 = $4;
-   $67 = $9;
-   $68 = ((($67)) + 16|0);
-   $69 = HEAP32[$68>>2]|0;
-   $70 = $6;
-   $71 = (($69) + ($70<<2)|0);
-   $72 = HEAP32[$71>>2]|0;
-   _mrb_symbol_value_1003($11,$72);
-   ;HEAP32[$$byval_copy3>>2]=HEAP32[$7>>2]|0;HEAP32[$$byval_copy3+4>>2]=HEAP32[$7+4>>2]|0;
-   ;HEAP32[$$byval_copy4>>2]=HEAP32[$11>>2]|0;HEAP32[$$byval_copy4+4>>2]=HEAP32[$11+4>>2]|0;
-   _mrb_ary_push($66,$$byval_copy3,$$byval_copy4);
-  }
-  $73 = $6;
-  $74 = (($73) + 1)|0;
-  $6 = $74;
- }
- $75 = $4;
- $76 = $9;
- _kh_destroy_st($75,$76);
- ;HEAP32[$0>>2]=HEAP32[$7>>2]|0;HEAP32[$0+4>>2]=HEAP32[$7+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _basic_obj_respond_to($0,$1,$2,$3) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- var $$byval_copy = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $$byval_copy = sp + 16|0;
- $4 = $0;
- $5 = $2;
- $6 = $3;
- $7 = $4;
- $8 = $5;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$1>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$1+4>>2]|0;
- $9 = (_mrb_respond_to($7,$$byval_copy,$8)|0);
- STACKTOP = sp;return ($9|0);
-}
-function _mrb_bool_value_1062($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = sp;
- $2 = $1;
- $4 = $2;
- $5 = $4&255;
- $6 = ($5|0)!=(0);
- $7 = $6 ? 2 : 0;
- $8 = ((($3)) + 4|0);
- HEAP32[$8>>2] = $7;
- HEAP32[$3>>2] = 1;
- ;HEAP32[$0>>2]=HEAP32[$3>>2]|0;HEAP32[$0+4>>2]=HEAP32[$3+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_obj_methods($0,$1,$2,$3,$4) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- $4 = $4|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $$byval_copy1 = sp + 16|0;
- $$byval_copy = sp + 8|0;
- $5 = $1;
- $6 = $2;
- $7 = $4;
- $8 = $6;
- $9 = ($8<<24>>24)!=(0);
- $10 = $5;
- $11 = $6;
- if ($9) {
-  $12 = $5;
-  ;HEAP32[$$byval_copy>>2]=HEAP32[$3>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$3+4>>2]|0;
-  $13 = (_mrb_class_984($12,$$byval_copy)|0);
-  _mrb_class_instance_method_list($0,$10,$11,$13,0);
-  STACKTOP = sp;return;
- } else {
-  ;HEAP32[$$byval_copy1>>2]=HEAP32[$3>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$3+4>>2]|0;
-  _mrb_obj_singleton_methods($0,$10,$11,$$byval_copy1);
-  STACKTOP = sp;return;
- }
-}
-function _mrb_obj_extend($0,$1,$2,$3,$4) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- $4 = $4|0;
- var $$byval_copy = 0, $$byval_copy4 = 0, $$byval_copy5 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0;
- var $27 = 0, $28 = 0, $29 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, $vararg_buffer1 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 80|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(80|0);
- $$byval_copy5 = sp + 64|0;
- $$byval_copy4 = sp + 56|0;
- $$byval_copy = sp + 48|0;
- $vararg_buffer1 = sp + 8|0;
- $vararg_buffer = sp;
- $9 = sp + 24|0;
- $10 = sp + 16|0;
- $5 = $1;
- $6 = $2;
- $7 = $3;
- $11 = $6;
- $12 = ($11|0)==(0);
- if ($12) {
-  $13 = $5;
-  $14 = $5;
-  $15 = (_mrb_class_get($14,69160)|0);
-  _mrb_raise($13,$15,68858);
-  // unreachable;
- }
- $8 = 0;
- while(1) {
-  $16 = $8;
-  $17 = $6;
-  $18 = ($16|0)<($17|0);
-  if (!($18)) {
-   break;
-  }
-  $19 = $5;
-  $20 = $7;
-  $21 = $8;
-  $22 = (($20) + ($21<<3)|0);
-  ;HEAP32[$$byval_copy>>2]=HEAP32[$22>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$22+4>>2]|0;
-  _mrb_check_type($19,$$byval_copy,10);
-  $23 = $8;
-  $24 = (($23) + 1)|0;
-  $8 = $24;
- }
- while(1) {
-  $25 = $6;
-  $26 = (($25) + -1)|0;
-  $6 = $26;
-  $27 = ($25|0)!=(0);
-  if (!($27)) {
-   break;
-  }
-  $28 = $5;
-  $29 = $7;
-  $30 = $6;
-  $31 = (($29) + ($30<<3)|0);
-  ;HEAP8[$vararg_buffer>>0]=HEAP8[$4>>0]|0;HEAP8[$vararg_buffer+1>>0]=HEAP8[$4+1>>0]|0;HEAP8[$vararg_buffer+2>>0]=HEAP8[$4+2>>0]|0;HEAP8[$vararg_buffer+3>>0]=HEAP8[$4+3>>0]|0;HEAP8[$vararg_buffer+4>>0]=HEAP8[$4+4>>0]|0;HEAP8[$vararg_buffer+5>>0]=HEAP8[$4+5>>0]|0;HEAP8[$vararg_buffer+6>>0]=HEAP8[$4+6>>0]|0;HEAP8[$vararg_buffer+7>>0]=HEAP8[$4+7>>0]|0;
-  ;HEAP32[$$byval_copy4>>2]=HEAP32[$31>>2]|0;HEAP32[$$byval_copy4+4>>2]=HEAP32[$31+4>>2]|0;
-  _mrb_funcall($9,$28,$$byval_copy4,68897,1,$vararg_buffer);
-  $32 = $5;
-  $33 = $7;
-  $34 = $6;
-  $35 = (($33) + ($34<<3)|0);
-  ;HEAP8[$vararg_buffer1>>0]=HEAP8[$4>>0]|0;HEAP8[$vararg_buffer1+1>>0]=HEAP8[$4+1>>0]|0;HEAP8[$vararg_buffer1+2>>0]=HEAP8[$4+2>>0]|0;HEAP8[$vararg_buffer1+3>>0]=HEAP8[$4+3>>0]|0;HEAP8[$vararg_buffer1+4>>0]=HEAP8[$4+4>>0]|0;HEAP8[$vararg_buffer1+5>>0]=HEAP8[$4+5>>0]|0;HEAP8[$vararg_buffer1+6>>0]=HEAP8[$4+6>>0]|0;HEAP8[$vararg_buffer1+7>>0]=HEAP8[$4+7>>0]|0;
-  ;HEAP32[$$byval_copy5>>2]=HEAP32[$35>>2]|0;HEAP32[$$byval_copy5+4>>2]=HEAP32[$35+4>>2]|0;
-  _mrb_funcall($10,$32,$$byval_copy5,68911,1,$vararg_buffer1);
- }
- ;HEAP32[$0>>2]=HEAP32[$4>>2]|0;HEAP32[$0+4>>2]=HEAP32[$4+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_pool_open($0) {
- $0 = $0|0;
- var $1 = 0, $10 = 0, $11 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $1 = $0;
- $3 = $1;
- $4 = (_mrb_malloc_simple($3,8)|0);
- $2 = $4;
- $5 = $2;
- $6 = ($5|0)!=(0|0);
- if (!($6)) {
-  $11 = $2;
-  STACKTOP = sp;return ($11|0);
- }
- $7 = $1;
- $8 = $2;
- HEAP32[$8>>2] = $7;
- $9 = $2;
- $10 = ((($9)) + 4|0);
- HEAP32[$10>>2] = 0;
- $11 = $2;
- STACKTOP = sp;return ($11|0);
-}
-function _mrb_pool_close($0) {
- $0 = $0|0;
- var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0;
- var sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $1 = $0;
- $4 = $1;
- $5 = ($4|0)!=(0|0);
- if (!($5)) {
-  STACKTOP = sp;return;
- }
- $6 = $1;
- $7 = ((($6)) + 4|0);
- $8 = HEAP32[$7>>2]|0;
- $2 = $8;
- while(1) {
-  $9 = $2;
-  $10 = ($9|0)!=(0|0);
-  if (!($10)) {
-   break;
-  }
-  $11 = $2;
-  $3 = $11;
-  $12 = $2;
-  $13 = HEAP32[$12>>2]|0;
-  $2 = $13;
-  $14 = $1;
-  $15 = HEAP32[$14>>2]|0;
-  $16 = $3;
-  _mrb_free($15,$16);
- }
- $17 = $1;
- $18 = HEAP32[$17>>2]|0;
- $19 = $1;
- _mrb_free($18,$19);
- STACKTOP = sp;return;
-}
-function _mrb_pool_alloc($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;
- var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0;
- var $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0;
- var $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $3 = $0;
- $4 = $1;
- $7 = $3;
- $8 = ($7|0)!=(0|0);
- if (!($8)) {
-  $2 = 0;
-  $69 = $2;
-  STACKTOP = sp;return ($69|0);
- }
- $9 = $4;
- $10 = (-1 - ($9))|0;
- $11 = (($10) + 1)|0;
- $12 = $11 & 3;
- $13 = $4;
- $14 = (($13) + ($12))|0;
- $4 = $14;
- $15 = $3;
- $16 = ((($15)) + 4|0);
- $17 = HEAP32[$16>>2]|0;
- $5 = $17;
- while(1) {
-  $18 = $5;
-  $19 = ($18|0)!=(0|0);
-  if (!($19)) {
-   break;
-  }
-  $20 = $5;
-  $21 = ((($20)) + 4|0);
-  $22 = HEAP32[$21>>2]|0;
-  $23 = $4;
-  $24 = (($22) + ($23))|0;
-  $25 = $5;
-  $26 = ((($25)) + 8|0);
-  $27 = HEAP32[$26>>2]|0;
-  $28 = ($24>>>0)<=($27>>>0);
-  $29 = $5;
-  if ($28) {
-   label = 6;
-   break;
-  }
-  $46 = HEAP32[$29>>2]|0;
-  $5 = $46;
- }
- if ((label|0) == 6) {
-  $30 = ((($29)) + 4|0);
-  $31 = HEAP32[$30>>2]|0;
-  $6 = $31;
-  $32 = $4;
-  $33 = $5;
-  $34 = ((($33)) + 4|0);
-  $35 = HEAP32[$34>>2]|0;
-  $36 = (($35) + ($32))|0;
-  HEAP32[$34>>2] = $36;
-  $37 = $5;
-  $38 = ((($37)) + 16|0);
-  $39 = $6;
-  $40 = (($38) + ($39)|0);
-  $41 = $5;
-  $42 = ((($41)) + 12|0);
-  HEAP32[$42>>2] = $40;
-  $43 = $5;
-  $44 = ((($43)) + 12|0);
-  $45 = HEAP32[$44>>2]|0;
-  $2 = $45;
-  $69 = $2;
-  STACKTOP = sp;return ($69|0);
- }
- $47 = $3;
- $48 = $4;
- $49 = (_page_alloc($47,$48)|0);
- $5 = $49;
- $50 = $5;
- $51 = ($50|0)!=(0|0);
- if ($51) {
-  $52 = $4;
-  $53 = $5;
-  $54 = ((($53)) + 4|0);
-  HEAP32[$54>>2] = $52;
-  $55 = $3;
-  $56 = ((($55)) + 4|0);
-  $57 = HEAP32[$56>>2]|0;
-  $58 = $5;
-  HEAP32[$58>>2] = $57;
-  $59 = $5;
-  $60 = $3;
-  $61 = ((($60)) + 4|0);
-  HEAP32[$61>>2] = $59;
-  $62 = $5;
-  $63 = ((($62)) + 16|0);
-  $64 = $5;
-  $65 = ((($64)) + 12|0);
-  HEAP32[$65>>2] = $63;
-  $66 = $5;
-  $67 = ((($66)) + 12|0);
-  $68 = HEAP32[$67>>2]|0;
-  $2 = $68;
-  $69 = $2;
-  STACKTOP = sp;return ($69|0);
- } else {
-  $2 = 0;
-  $69 = $2;
-  STACKTOP = sp;return ($69|0);
- }
- return (0)|0;
-}
-function _page_alloc($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $$ = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0;
- var sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $5 = $3;
- $6 = ($5>>>0)<(4096);
- $$ = $6 ? 4096 : $1;
- $3 = $$;
- $7 = $2;
- $8 = HEAP32[$7>>2]|0;
- $9 = $3;
- $10 = (16 + ($9))|0;
- $11 = (_mrb_malloc_simple($8,$10)|0);
- $4 = $11;
- $12 = $4;
- $13 = ($12|0)!=(0|0);
- if (!($13)) {
-  $19 = $4;
-  STACKTOP = sp;return ($19|0);
- }
- $14 = $4;
- $15 = ((($14)) + 4|0);
- HEAP32[$15>>2] = 0;
- $16 = $3;
- $17 = $4;
- $18 = ((($17)) + 8|0);
- HEAP32[$18>>2] = $16;
- $19 = $4;
- STACKTOP = sp;return ($19|0);
-}
-function _mrb_proc_new($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;
- var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0;
- var $47 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $6 = $2;
- $7 = ((($6)) + 12|0);
- $8 = HEAP32[$7>>2]|0;
- $9 = ((($8)) + 16|0);
- $10 = HEAP32[$9>>2]|0;
- $5 = $10;
- $11 = $2;
- $12 = $2;
- $13 = ((($12)) + 44|0);
- $14 = HEAP32[$13>>2]|0;
- $15 = (_mrb_obj_alloc($11,13,$14)|0);
- $4 = $15;
- $16 = $4;
- $17 = ((($16)) + 16|0);
- HEAP32[$17>>2] = 0;
- $18 = $5;
- $19 = ($18|0)!=(0|0);
- if ($19) {
-  $20 = $5;
-  $21 = ((($20)) + 4|0);
-  $22 = HEAP32[$21>>2]|0;
-  $23 = ($22|0)!=(0|0);
-  if ($23) {
-   $24 = $5;
-   $25 = ((($24)) + 4|0);
-   $26 = HEAP32[$25>>2]|0;
-   $27 = ((($26)) + 16|0);
-   $28 = HEAP32[$27>>2]|0;
-   $29 = $4;
-   $30 = ((($29)) + 16|0);
-   HEAP32[$30>>2] = $28;
-  }
-  $31 = $4;
-  $32 = ((($31)) + 16|0);
-  $33 = HEAP32[$32>>2]|0;
-  $34 = ($33|0)!=(0|0);
-  if (!($34)) {
-   $35 = $5;
-   $36 = ((($35)) + 44|0);
-   $37 = HEAP32[$36>>2]|0;
-   $38 = $4;
-   $39 = ((($38)) + 16|0);
-   HEAP32[$39>>2] = $37;
-  }
- }
- $40 = $3;
- $41 = $4;
- $42 = ((($41)) + 12|0);
- HEAP32[$42>>2] = $40;
- $43 = $4;
- $44 = ((($43)) + 20|0);
- HEAP32[$44>>2] = 0;
- $45 = $2;
- $46 = $3;
- _mrb_irep_incref($45,$46);
- $47 = $4;
- STACKTOP = sp;return ($47|0);
-}
-function _mrb_closure_new($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0;
- var label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $5 = $2;
- $6 = $3;
- $7 = (_mrb_proc_new($5,$6)|0);
- $4 = $7;
- $8 = $2;
- $9 = $4;
- $10 = $2;
- $11 = ((($10)) + 12|0);
- $12 = HEAP32[$11>>2]|0;
- $13 = ((($12)) + 16|0);
- $14 = HEAP32[$13>>2]|0;
- $15 = ((($14)) + 4|0);
- $16 = HEAP32[$15>>2]|0;
- $17 = ((($16)) + 12|0);
- $18 = HEAP32[$17>>2]|0;
- $19 = HEAP16[$18>>1]|0;
- $20 = $19&65535;
- _closure_setup($8,$9,$20);
- $21 = $4;
- STACKTOP = sp;return ($21|0);
-}
-function _closure_setup($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;
- var $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $0;
- $4 = $1;
- $5 = $2;
- $7 = $3;
- $8 = ((($7)) + 12|0);
- $9 = HEAP32[$8>>2]|0;
- $10 = ((($9)) + 16|0);
- $11 = HEAP32[$10>>2]|0;
- $12 = ((($11)) + 24|0);
- $13 = HEAP32[$12>>2]|0;
- $14 = ($13|0)!=(0|0);
- $15 = $3;
- if ($14) {
-  $25 = ((($15)) + 12|0);
-  $26 = HEAP32[$25>>2]|0;
-  $27 = ((($26)) + 16|0);
-  $28 = HEAP32[$27>>2]|0;
-  $29 = ((($28)) + 24|0);
-  $30 = HEAP32[$29>>2]|0;
-  $6 = $30;
-  $31 = $6;
-  $32 = $4;
-  $33 = ((($32)) + 20|0);
-  HEAP32[$33>>2] = $31;
-  STACKTOP = sp;return;
- } else {
-  $16 = $5;
-  $17 = (_env_new($15,$16)|0);
-  $6 = $17;
-  $18 = $6;
-  $19 = $3;
-  $20 = ((($19)) + 12|0);
-  $21 = HEAP32[$20>>2]|0;
-  $22 = ((($21)) + 16|0);
-  $23 = HEAP32[$22>>2]|0;
-  $24 = ((($23)) + 24|0);
-  HEAP32[$24>>2] = $18;
-  $31 = $6;
-  $32 = $4;
-  $33 = ((($32)) + 20|0);
-  HEAP32[$33>>2] = $31;
-  STACKTOP = sp;return;
- }
-}
-function _env_new($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;
- var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0;
- var $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $5 = $2;
- $6 = $2;
- $7 = ((($6)) + 12|0);
- $8 = HEAP32[$7>>2]|0;
- $9 = ((($8)) + 16|0);
- $10 = HEAP32[$9>>2]|0;
- $11 = ((($10)) + 4|0);
- $12 = HEAP32[$11>>2]|0;
- $13 = ((($12)) + 20|0);
- $14 = HEAP32[$13>>2]|0;
- $15 = (_mrb_obj_alloc($5,20,$14)|0);
- $4 = $15;
- $16 = $3;
- $17 = $4;
- $18 = HEAP32[$17>>2]|0;
- $19 = $16 & 2097151;
- $20 = $19 << 11;
- $21 = $18 & 2047;
- $22 = $21 | $20;
- HEAP32[$17>>2] = $22;
- $23 = $2;
- $24 = ((($23)) + 12|0);
- $25 = HEAP32[$24>>2]|0;
- $26 = ((($25)) + 16|0);
- $27 = HEAP32[$26>>2]|0;
- $28 = HEAP32[$27>>2]|0;
- $29 = $4;
- $30 = ((($29)) + 16|0);
- HEAP32[$30>>2] = $28;
- $31 = $2;
- $32 = ((($31)) + 12|0);
- $33 = HEAP32[$32>>2]|0;
- $34 = ((($33)) + 16|0);
- $35 = HEAP32[$34>>2]|0;
- $36 = $2;
- $37 = ((($36)) + 12|0);
- $38 = HEAP32[$37>>2]|0;
- $39 = ((($38)) + 20|0);
- $40 = HEAP32[$39>>2]|0;
- $41 = $35;
- $42 = $40;
- $43 = (($41) - ($42))|0;
- $44 = (($43|0) / 48)&-1;
- $45 = $4;
- $46 = ((($45)) + 20|0);
- HEAP32[$46>>2] = $44;
- $47 = $2;
- $48 = ((($47)) + 12|0);
- $49 = HEAP32[$48>>2]|0;
- $50 = ((($49)) + 4|0);
- $51 = HEAP32[$50>>2]|0;
- $52 = $4;
- $53 = ((($52)) + 12|0);
- HEAP32[$53>>2] = $51;
- $54 = $4;
- STACKTOP = sp;return ($54|0);
-}
-function _mrb_proc_new_cfunc($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0;
- var $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $5 = $2;
- $6 = $2;
- $7 = ((($6)) + 44|0);
- $8 = HEAP32[$7>>2]|0;
- $9 = (_mrb_obj_alloc($5,13,$8)|0);
- $4 = $9;
- $10 = $3;
- $11 = $4;
- $12 = ((($11)) + 12|0);
- HEAP32[$12>>2] = $10;
- $13 = $4;
- $14 = HEAP32[$13>>2]|0;
- $15 = $14 >>> 11;
- $16 = $15 | 128;
- $17 = HEAP32[$13>>2]|0;
- $18 = $16 & 2097151;
- $19 = $18 << 11;
- $20 = $17 & 2047;
- $21 = $20 | $19;
- HEAP32[$13>>2] = $21;
- $22 = $4;
- $23 = ((($22)) + 20|0);
- HEAP32[$23>>2] = 0;
- $24 = $4;
- STACKTOP = sp;return ($24|0);
-}
-function _mrb_proc_new_cfunc_with_env($0,$1,$2,$3) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;
- var $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0;
- var $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $7 = 0, $8 = 0, $9 = 0;
- var label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $4 = $0;
- $5 = $1;
- $6 = $2;
- $7 = $3;
- $11 = $4;
- $12 = $5;
- $13 = (_mrb_proc_new_cfunc($11,$12)|0);
- $8 = $13;
- $14 = $4;
- $15 = $6;
- $16 = (_env_new($14,$15)|0);
- $9 = $16;
- $17 = $8;
- $18 = ((($17)) + 20|0);
- HEAP32[$18>>2] = $16;
- $19 = $4;
- $20 = $8;
- $21 = $8;
- $22 = ((($21)) + 20|0);
- $23 = HEAP32[$22>>2]|0;
- _mrb_field_write_barrier($19,$20,$23);
- $24 = $9;
- $25 = ((($24)) + 20|0);
- HEAP32[$25>>2] = -1;
- $26 = $4;
- $27 = $6;
- $28 = $27<<3;
- $29 = (_mrb_malloc($26,$28)|0);
- $30 = $9;
- $31 = ((($30)) + 12|0);
- HEAP32[$31>>2] = $29;
- $32 = $7;
- $33 = ($32|0)!=(0|0);
- $10 = 0;
- if ($33) {
-  while(1) {
-   $34 = $10;
-   $35 = $6;
-   $36 = ($34|0)<($35|0);
-   if (!($36)) {
-    break;
-   }
-   $37 = $9;
-   $38 = ((($37)) + 12|0);
-   $39 = HEAP32[$38>>2]|0;
-   $40 = $10;
-   $41 = (($39) + ($40<<3)|0);
-   $42 = $7;
-   $43 = $10;
-   $44 = (($42) + ($43<<3)|0);
-   ;HEAP32[$41>>2]=HEAP32[$44>>2]|0;HEAP32[$41+4>>2]=HEAP32[$44+4>>2]|0;
-   $45 = $10;
-   $46 = (($45) + 1)|0;
-   $10 = $46;
-  }
-  $63 = $8;
-  STACKTOP = sp;return ($63|0);
- } else {
-  while(1) {
-   $47 = $10;
-   $48 = $6;
-   $49 = ($47|0)<($48|0);
-   if (!($49)) {
-    break;
-   }
-   $50 = $9;
-   $51 = ((($50)) + 12|0);
-   $52 = HEAP32[$51>>2]|0;
-   $53 = $10;
-   $54 = (($52) + ($53<<3)|0);
-   $55 = ((($54)) + 4|0);
-   HEAP32[$55>>2] = 0;
-   $56 = $9;
-   $57 = ((($56)) + 12|0);
-   $58 = HEAP32[$57>>2]|0;
-   $59 = $10;
-   $60 = (($58) + ($59<<3)|0);
-   HEAP32[$60>>2] = 0;
-   $61 = $10;
-   $62 = (($61) + 1)|0;
-   $10 = $62;
-  }
-  $63 = $8;
-  STACKTOP = sp;return ($63|0);
- }
- return (0)|0;
-}
-function _mrb_proc_cfunc_env_get($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;
- var $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0;
- var $48 = 0, $49 = 0, $5 = 0, $50 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, $vararg_ptr1 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);
- $vararg_buffer = sp;
- $7 = sp + 24|0;
- $8 = sp + 16|0;
- $3 = $1;
- $4 = $2;
- $9 = $3;
- $10 = ((($9)) + 12|0);
- $11 = HEAP32[$10>>2]|0;
- $12 = ((($11)) + 16|0);
- $13 = HEAP32[$12>>2]|0;
- $14 = ((($13)) + 4|0);
- $15 = HEAP32[$14>>2]|0;
- $5 = $15;
- $16 = $5;
- $17 = ((($16)) + 20|0);
- $18 = HEAP32[$17>>2]|0;
- $6 = $18;
- $19 = $5;
- $20 = HEAP32[$19>>2]|0;
- $21 = $20 >>> 11;
- $22 = $21 & 128;
- $23 = ($22|0)!=(0);
- if (!($23)) {
-  $24 = $3;
-  $25 = $3;
-  $26 = (_mrb_class_get($25,69204)|0);
-  _mrb_raise($24,$26,68920);
-  // unreachable;
- }
- $27 = $6;
- $28 = ($27|0)!=(0|0);
- if (!($28)) {
-  $29 = $3;
-  $30 = $3;
-  $31 = (_mrb_class_get($30,69204)|0);
-  _mrb_raise($29,$31,68961);
-  // unreachable;
- }
- $32 = $4;
- $33 = ($32|0)<(0);
- if (!($33)) {
-  $34 = $6;
-  $35 = HEAP32[$34>>2]|0;
-  $36 = $35 >>> 11;
-  $37 = $4;
-  $38 = ($36|0)<=($37|0);
-  if (!($38)) {
-   $46 = $6;
-   $47 = ((($46)) + 12|0);
-   $48 = HEAP32[$47>>2]|0;
-   $49 = $4;
-   $50 = (($48) + ($49<<3)|0);
-   ;HEAP32[$0>>2]=HEAP32[$50>>2]|0;HEAP32[$0+4>>2]=HEAP32[$50+4>>2]|0;
-   STACKTOP = sp;return;
-  }
- }
- $39 = $3;
- $40 = $3;
- $41 = (_mrb_class_get($40,69011)|0);
- $42 = $4;
- _mrb_fixnum_value_1092($7,$42);
- $43 = $6;
- $44 = HEAP32[$43>>2]|0;
- $45 = $44 >>> 11;
- _mrb_fixnum_value_1092($8,$45);
- ;HEAP8[$vararg_buffer>>0]=HEAP8[$7>>0]|0;HEAP8[$vararg_buffer+1>>0]=HEAP8[$7+1>>0]|0;HEAP8[$vararg_buffer+2>>0]=HEAP8[$7+2>>0]|0;HEAP8[$vararg_buffer+3>>0]=HEAP8[$7+3>>0]|0;HEAP8[$vararg_buffer+4>>0]=HEAP8[$7+4>>0]|0;HEAP8[$vararg_buffer+5>>0]=HEAP8[$7+5>>0]|0;HEAP8[$vararg_buffer+6>>0]=HEAP8[$7+6>>0]|0;HEAP8[$vararg_buffer+7>>0]=HEAP8[$7+7>>0]|0;
- $vararg_ptr1 = ((($vararg_buffer)) + 8|0);
- ;HEAP8[$vararg_ptr1>>0]=HEAP8[$8>>0]|0;HEAP8[$vararg_ptr1+1>>0]=HEAP8[$8+1>>0]|0;HEAP8[$vararg_ptr1+2>>0]=HEAP8[$8+2>>0]|0;HEAP8[$vararg_ptr1+3>>0]=HEAP8[$8+3>>0]|0;HEAP8[$vararg_ptr1+4>>0]=HEAP8[$8+4>>0]|0;HEAP8[$vararg_ptr1+5>>0]=HEAP8[$8+5>>0]|0;HEAP8[$vararg_ptr1+6>>0]=HEAP8[$8+6>>0]|0;HEAP8[$vararg_ptr1+7>>0]=HEAP8[$8+7>>0]|0;
- _mrb_raisef($39,$41,69022,$vararg_buffer);
- // unreachable;
-}
-function _mrb_fixnum_value_1092($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = sp;
- $2 = $1;
- $4 = ((($3)) + 4|0);
- HEAP32[$4>>2] = 3;
- $5 = $2;
- HEAP32[$3>>2] = $5;
- ;HEAP32[$0>>2]=HEAP32[$3>>2]|0;HEAP32[$0+4>>2]=HEAP32[$3+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_proc_copy($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;
- var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $4 = $3;
- $5 = HEAP32[$4>>2]|0;
- $6 = $5 >>> 11;
- $7 = $2;
- $8 = HEAP32[$7>>2]|0;
- $9 = $6 & 2097151;
- $10 = $9 << 11;
- $11 = $8 & 2047;
- $12 = $11 | $10;
- HEAP32[$7>>2] = $12;
- $13 = $2;
- $14 = ((($13)) + 12|0);
- $15 = $3;
- $16 = ((($15)) + 12|0);
- ;HEAP32[$14>>2]=HEAP32[$16>>2]|0;
- $17 = $2;
- $18 = HEAP32[$17>>2]|0;
- $19 = $18 >>> 11;
- $20 = $19 & 128;
- $21 = ($20|0)!=(0);
- if (!($21)) {
-  $22 = $2;
-  $23 = ((($22)) + 12|0);
-  $24 = HEAP32[$23>>2]|0;
-  $25 = ((($24)) + 56|0);
-  $26 = HEAP32[$25>>2]|0;
-  $27 = (($26) + 1)|0;
-  HEAP32[$25>>2] = $27;
- }
- $28 = $3;
- $29 = ((($28)) + 16|0);
- $30 = HEAP32[$29>>2]|0;
- $31 = $2;
- $32 = ((($31)) + 16|0);
- HEAP32[$32>>2] = $30;
- $33 = $3;
- $34 = ((($33)) + 20|0);
- $35 = HEAP32[$34>>2]|0;
- $36 = $2;
- $37 = ((($36)) + 20|0);
- HEAP32[$37>>2] = $35;
- STACKTOP = sp;return;
-}
-function _mrb_proc_iseq($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $4 = $3;
- $5 = ((($4)) + 12|0);
- $6 = HEAP32[$5>>2]|0;
- $7 = ((($6)) + 8|0);
- $8 = HEAP32[$7>>2]|0;
- STACKTOP = sp;return ($8|0);
-}
-function _mrb_init_proc($0) {
- $0 = $0|0;
- var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;
- var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0;
- var $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, dest = 0, label = 0, sp = 0, src = 0, stop = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $1 = $0;
- $4 = $1;
- $5 = (_mrb_malloc($4,60)|0);
- $3 = $5;
- $6 = $3;
- dest=$6; src=74880; stop=dest+60|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0));
- $7 = $3;
- $8 = ((($7)) + 4|0);
- HEAP8[$8>>0] = 1;
- $9 = $3;
- $10 = ((($9)) + 8|0);
- HEAP32[$10>>2] = 2544;
- $11 = $3;
- $12 = ((($11)) + 40|0);
- HEAP32[$12>>2] = 1;
- $13 = $1;
- $14 = $1;
- $15 = ((($14)) + 44|0);
- $16 = HEAP32[$15>>2]|0;
- _mrb_define_method($13,$16,69252,316,0);
- $17 = $1;
- $18 = $1;
- $19 = ((($18)) + 44|0);
- $20 = HEAP32[$19>>2]|0;
- _mrb_define_method($17,$20,69294,317,262144);
- $21 = $1;
- $22 = $1;
- $23 = ((($22)) + 44|0);
- $24 = HEAP32[$23>>2]|0;
- _mrb_define_method($21,$24,69077,318,0);
- $25 = $1;
- $26 = $3;
- $27 = (_mrb_proc_new($25,$26)|0);
- $2 = $27;
- $28 = $1;
- $29 = $1;
- $30 = ((($29)) + 44|0);
- $31 = HEAP32[$30>>2]|0;
- $32 = $1;
- $33 = (_mrb_intern_static($32,69604,4)|0);
- $34 = $2;
- _mrb_define_method_raw($28,$31,$33,$34);
- $35 = $1;
- $36 = $1;
- $37 = ((($36)) + 44|0);
- $38 = HEAP32[$37>>2]|0;
- $39 = $1;
- $40 = (_mrb_intern_static($39,69083,2)|0);
- $41 = $2;
- _mrb_define_method_raw($35,$38,$40,$41);
- $42 = $1;
- $43 = $1;
- $44 = ((($43)) + 84|0);
- $45 = HEAP32[$44>>2]|0;
- _mrb_define_class_method($42,$45,69086,319,0);
- $46 = $1;
- $47 = $1;
- $48 = ((($47)) + 84|0);
- $49 = HEAP32[$48>>2]|0;
- _mrb_define_method($46,$49,69086,319,0);
- STACKTOP = sp;return;
-}
-function _mrb_proc_initialize($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $vararg_buffer = sp;
- $4 = sp + 8|0;
- $3 = $1;
- $5 = $3;
- HEAP32[$vararg_buffer>>2] = $4;
- (_mrb_get_args($5,69093,$vararg_buffer)|0);
- $6 = ((($4)) + 4|0);
- $7 = HEAP32[$6>>2]|0;
- $8 = ($7|0)==(0);
- if ($8) {
-  $9 = HEAP32[$4>>2]|0;
-  $10 = ($9|0)!=(0);
-  if (!($10)) {
-   $11 = $3;
-   $12 = $3;
-   $13 = (_mrb_class_get($12,69160)|0);
-   _mrb_raise($11,$13,69095);
-   // unreachable;
-  }
- }
- $14 = HEAP32[$2>>2]|0;
- $15 = HEAP32[$4>>2]|0;
- _mrb_proc_copy($14,$15);
- ;HEAP32[$0>>2]=HEAP32[$2>>2]|0;HEAP32[$0+4>>2]=HEAP32[$2+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_proc_init_copy($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $vararg_buffer = sp;
- $4 = sp + 8|0;
- $3 = $1;
- $5 = $3;
- HEAP32[$vararg_buffer>>2] = $4;
- (_mrb_get_args($5,69199,$vararg_buffer)|0);
- $6 = ((($4)) + 4|0);
- $7 = HEAP32[$6>>2]|0;
- $8 = ($7|0)!=(13);
- if ($8) {
-  $9 = $3;
-  $10 = $3;
-  $11 = (_mrb_class_get($10,69160)|0);
-  _mrb_raise($9,$11,69139);
-  // unreachable;
- } else {
-  $12 = HEAP32[$2>>2]|0;
-  $13 = HEAP32[$4>>2]|0;
-  _mrb_proc_copy($12,$13);
-  ;HEAP32[$0>>2]=HEAP32[$2>>2]|0;HEAP32[$0+4>>2]=HEAP32[$2+4>>2]|0;
-  STACKTOP = sp;return;
- }
-}
-function _mrb_proc_arity($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;
- var $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0;
- var $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $or$cond = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);
- $3 = $1;
- $12 = HEAP32[$2>>2]|0;
- $4 = $12;
- $13 = $3;
- $14 = $4;
- $15 = (_mrb_proc_iseq($13,$14)|0);
- $5 = $15;
- $16 = $4;
- $17 = HEAP32[$16>>2]|0;
- $18 = $17 >>> 11;
- $19 = $18 & 128;
- $20 = ($19|0)!=(0);
- if ($20) {
-  _mrb_fixnum_value_1092($0,-1);
-  STACKTOP = sp;return;
- }
- $21 = $5;
- $22 = HEAP32[$21>>2]|0;
- $23 = $22 & 127;
- $24 = ($23|0)!=(38);
- if ($24) {
-  _mrb_fixnum_value_1092($0,0);
-  STACKTOP = sp;return;
- }
- $25 = $5;
- $26 = HEAP32[$25>>2]|0;
- $27 = $26 >>> 7;
- $28 = $27 & 33554431;
- $6 = $28;
- $29 = $6;
- $30 = $29 >>> 18;
- $31 = $30 & 31;
- $7 = $31;
- $32 = $6;
- $33 = $32 >>> 13;
- $34 = $33 & 31;
- $8 = $34;
- $35 = $6;
- $36 = $35 >>> 12;
- $37 = $36 & 1;
- $9 = $37;
- $38 = $6;
- $39 = $38 >>> 7;
- $40 = $39 & 31;
- $10 = $40;
- $41 = $9;
- $42 = ($41|0)!=(0);
- if ($42) {
-  label = 7;
- } else {
-  $43 = $4;
-  $44 = HEAP32[$43>>2]|0;
-  $45 = $44 >>> 11;
-  $46 = $45 & 256;
-  $47 = ($46|0)!=(0);
-  $48 = $8;
-  $49 = ($48|0)!=(0);
-  $or$cond = $47 & $49;
-  if ($or$cond) {
-   label = 7;
-  } else {
-   $55 = $7;
-   $56 = $10;
-   $57 = (($55) + ($56))|0;
-   $58 = $57;
-  }
- }
- if ((label|0) == 7) {
-  $50 = $7;
-  $51 = $10;
-  $52 = (($50) + ($51))|0;
-  $53 = (($52) + 1)|0;
-  $54 = (0 - ($53))|0;
-  $58 = $54;
- }
- $11 = $58;
- $59 = $11;
- _mrb_fixnum_value_1092($0,$59);
- STACKTOP = sp;return;
-}
-function _proc_lambda($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;
- var $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $5 = 0, $6 = 0, $7 = 0;
- var $8 = 0, $9 = 0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $vararg_buffer = sp;
- $4 = sp + 16|0;
- $3 = $1;
- $7 = $3;
- HEAP32[$vararg_buffer>>2] = $4;
- (_mrb_get_args($7,69093,$vararg_buffer)|0);
- $8 = ((($4)) + 4|0);
- $9 = HEAP32[$8>>2]|0;
- $10 = ($9|0)==(0);
- if ($10) {
-  $11 = HEAP32[$4>>2]|0;
-  $12 = ($11|0)!=(0);
-  if (!($12)) {
-   $13 = $3;
-   $14 = $3;
-   $15 = (_mrb_class_get($14,69160)|0);
-   _mrb_raise($13,$15,69095);
-   // unreachable;
-  }
- }
- $16 = ((($4)) + 4|0);
- $17 = HEAP32[$16>>2]|0;
- $18 = ($17|0)!=(13);
- if ($18) {
-  $19 = $3;
-  $20 = $3;
-  $21 = (_mrb_class_get($20,69160)|0);
-  _mrb_raise($19,$21,69139);
-  // unreachable;
- }
- $22 = HEAP32[$4>>2]|0;
- $5 = $22;
- $23 = $5;
- $24 = HEAP32[$23>>2]|0;
- $25 = $24 >>> 11;
- $26 = $25 & 256;
- $27 = ($26|0)!=(0);
- if ($27) {
-  ;HEAP32[$0>>2]=HEAP32[$4>>2]|0;HEAP32[$0+4>>2]=HEAP32[$4+4>>2]|0;
-  STACKTOP = sp;return;
- } else {
-  $28 = $3;
-  $29 = $5;
-  $30 = ((($29)) + 4|0);
-  $31 = HEAP32[$30>>2]|0;
-  $32 = (_mrb_obj_alloc($28,13,$31)|0);
-  $6 = $32;
-  $33 = $6;
-  $34 = $5;
-  _mrb_proc_copy($33,$34);
-  $35 = $6;
-  $36 = HEAP32[$35>>2]|0;
-  $37 = $36 >>> 11;
-  $38 = $37 | 256;
-  $39 = HEAP32[$35>>2]|0;
-  $40 = $38 & 2097151;
-  $41 = $40 << 11;
-  $42 = $39 & 2047;
-  $43 = $42 | $41;
-  HEAP32[$35>>2] = $43;
-  $44 = $6;
-  _mrb_obj_value_1108($0,$44);
-  STACKTOP = sp;return;
- }
-}
-function _mrb_obj_value_1108($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = sp;
- $2 = $1;
- $4 = $2;
- $5 = HEAP32[$4>>2]|0;
- $6 = $5 & 255;
- $7 = ((($3)) + 4|0);
- HEAP32[$7>>2] = $6;
- $8 = $2;
- HEAP32[$3>>2] = $8;
- ;HEAP32[$0>>2]=HEAP32[$3>>2]|0;HEAP32[$0+4>>2]=HEAP32[$3+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_range_new($0,$1,$2,$3,$4) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- $4 = $4|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;
- var $28 = 0, $29 = 0, $30 = 0, $31 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $$byval_copy1 = sp + 16|0;
- $$byval_copy = sp + 8|0;
- $5 = $1;
- $6 = $4;
- $8 = $5;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
- ;HEAP32[$$byval_copy1>>2]=HEAP32[$3>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$3+4>>2]|0;
- _range_check($8,$$byval_copy,$$byval_copy1);
- $9 = $5;
- $10 = $5;
- $11 = (_mrb_class_get($10,69150)|0);
- $12 = (_mrb_obj_alloc($9,17,$11)|0);
- $7 = $12;
- $13 = $5;
- $14 = (_mrb_malloc($13,16)|0);
- $15 = $7;
- $16 = ((($15)) + 12|0);
- HEAP32[$16>>2] = $14;
- $17 = $7;
- $18 = ((($17)) + 12|0);
- $19 = HEAP32[$18>>2]|0;
- ;HEAP32[$19>>2]=HEAP32[$2>>2]|0;HEAP32[$19+4>>2]=HEAP32[$2+4>>2]|0;
- $20 = $7;
- $21 = ((($20)) + 12|0);
- $22 = HEAP32[$21>>2]|0;
- $23 = ((($22)) + 8|0);
- ;HEAP32[$23>>2]=HEAP32[$3>>2]|0;HEAP32[$23+4>>2]=HEAP32[$3+4>>2]|0;
- $24 = $6;
- $25 = $7;
- $26 = ((($25)) + 16|0);
- $27 = HEAP8[$26>>0]|0;
- $28 = $24 & 1;
- $29 = $27 & -2;
- $30 = $29 | $28;
- HEAP8[$26>>0] = $30;
- $31 = $7;
- _mrb_obj_value_1113($0,$31);
- STACKTOP = sp;return;
-}
-function _range_check($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;
- var $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $or$cond = 0, $or$cond3 = 0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);
- $$byval_copy = sp + 40|0;
- $vararg_buffer = sp;
- $4 = sp + 24|0;
- $7 = sp + 8|0;
- $3 = $0;
- $8 = ((($1)) + 4|0);
- $9 = HEAP32[$8>>2]|0;
- $5 = $9;
- $10 = ((($2)) + 4|0);
- $11 = HEAP32[$10>>2]|0;
- $6 = $11;
- $12 = $5;
- $13 = ($12|0)==(3);
- $14 = $5;
- $15 = ($14|0)==(6);
- $or$cond = $13 | $15;
- if ($or$cond) {
-  $16 = $6;
-  $17 = ($16|0)==(3);
-  $18 = $6;
-  $19 = ($18|0)==(6);
-  $or$cond3 = $17 | $19;
-  if ($or$cond3) {
-   STACKTOP = sp;return;
-  }
- }
- $20 = $3;
- ;HEAP8[$vararg_buffer>>0]=HEAP8[$2>>0]|0;HEAP8[$vararg_buffer+1>>0]=HEAP8[$2+1>>0]|0;HEAP8[$vararg_buffer+2>>0]=HEAP8[$2+2>>0]|0;HEAP8[$vararg_buffer+3>>0]=HEAP8[$2+3>>0]|0;HEAP8[$vararg_buffer+4>>0]=HEAP8[$2+4>>0]|0;HEAP8[$vararg_buffer+5>>0]=HEAP8[$2+5>>0]|0;HEAP8[$vararg_buffer+6>>0]=HEAP8[$2+6>>0]|0;HEAP8[$vararg_buffer+7>>0]=HEAP8[$2+7>>0]|0;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$1>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$1+4>>2]|0;
- _mrb_funcall($7,$20,$$byval_copy,69156,1,$vararg_buffer);
- ;HEAP32[$4>>2]=HEAP32[$7>>2]|0;HEAP32[$4+4>>2]=HEAP32[$7+4>>2]|0;
- $21 = ((($4)) + 4|0);
- $22 = HEAP32[$21>>2]|0;
- $23 = ($22|0)==(0);
- if (!($23)) {
-  STACKTOP = sp;return;
- }
- $24 = HEAP32[$4>>2]|0;
- $25 = ($24|0)!=(0);
- if ($25) {
-  STACKTOP = sp;return;
- } else {
-  $26 = $3;
-  $27 = $3;
-  $28 = (_mrb_class_get($27,69160)|0);
-  _mrb_raise($26,$28,69174);
-  // unreachable;
- }
-}
-function _mrb_obj_value_1113($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = sp;
- $2 = $1;
- $4 = $2;
- $5 = HEAP32[$4>>2]|0;
- $6 = $5 & 255;
- $7 = ((($3)) + 4|0);
- HEAP32[$7>>2] = $6;
- $8 = $2;
- HEAP32[$3>>2] = $8;
- ;HEAP32[$0>>2]=HEAP32[$3>>2]|0;HEAP32[$0+4>>2]=HEAP32[$3+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_range_beg($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $1;
- $5 = HEAP32[$2>>2]|0;
- $4 = $5;
- $6 = $4;
- $7 = ((($6)) + 12|0);
- $8 = HEAP32[$7>>2]|0;
- ;HEAP32[$0>>2]=HEAP32[$8>>2]|0;HEAP32[$0+4>>2]=HEAP32[$8+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_range_end($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $1;
- $5 = HEAP32[$2>>2]|0;
- $4 = $5;
- $6 = $4;
- $7 = ((($6)) + 12|0);
- $8 = HEAP32[$7>>2]|0;
- $9 = ((($8)) + 8|0);
- ;HEAP32[$0>>2]=HEAP32[$9>>2]|0;HEAP32[$0+4>>2]=HEAP32[$9+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_range_excl($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $1;
- $5 = HEAP32[$2>>2]|0;
- $4 = $5;
- $6 = $4;
- $7 = ((($6)) + 16|0);
- $8 = HEAP8[$7>>0]|0;
- $9 = $8 & 1;
- _mrb_bool_value_1117($0,$9);
- STACKTOP = sp;return;
-}
-function _mrb_bool_value_1117($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = sp;
- $2 = $1;
- $4 = $2;
- $5 = $4&255;
- $6 = ($5|0)!=(0);
- $7 = $6 ? 2 : 0;
- $8 = ((($3)) + 4|0);
- HEAP32[$8>>2] = $7;
- HEAP32[$3>>2] = 1;
- ;HEAP32[$0>>2]=HEAP32[$3>>2]|0;HEAP32[$0+4>>2]=HEAP32[$3+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_range_initialize($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $$byval_copy3 = 0, $$byval_copy4 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, $vararg_ptr1 = 0, $vararg_ptr2 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 80|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(80|0);
- $$byval_copy4 = sp + 56|0;
- $$byval_copy3 = sp + 48|0;
- $$byval_copy = sp + 40|0;
- $vararg_buffer = sp;
- $4 = sp + 24|0;
- $5 = sp + 16|0;
- $6 = sp + 64|0;
- $3 = $1;
- $8 = $3;
- HEAP32[$vararg_buffer>>2] = $4;
- $vararg_ptr1 = ((($vararg_buffer)) + 4|0);
- HEAP32[$vararg_ptr1>>2] = $5;
- $vararg_ptr2 = ((($vararg_buffer)) + 8|0);
- HEAP32[$vararg_ptr2>>2] = $6;
- $9 = (_mrb_get_args($8,69194,$vararg_buffer)|0);
- $7 = $9;
- $10 = $7;
- $11 = ($10|0)!=(3);
- if ($11) {
-  HEAP8[$6>>0] = 0;
- }
- $12 = $3;
- $13 = HEAP8[$6>>0]|0;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
- ;HEAP32[$$byval_copy3>>2]=HEAP32[$4>>2]|0;HEAP32[$$byval_copy3+4>>2]=HEAP32[$4+4>>2]|0;
- ;HEAP32[$$byval_copy4>>2]=HEAP32[$5>>2]|0;HEAP32[$$byval_copy4+4>>2]=HEAP32[$5+4>>2]|0;
- _range_init($12,$$byval_copy,$$byval_copy3,$$byval_copy4,$13);
- ;HEAP32[$0>>2]=HEAP32[$2>>2]|0;HEAP32[$0+4>>2]=HEAP32[$2+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _range_init($0,$1,$2,$3,$4) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- $4 = $4|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;
- var $28 = 0, $29 = 0, $30 = 0, $31 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $$byval_copy1 = sp + 16|0;
- $$byval_copy = sp + 8|0;
- $5 = $0;
- $6 = $4;
- $8 = HEAP32[$1>>2]|0;
- $7 = $8;
- $9 = $5;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
- ;HEAP32[$$byval_copy1>>2]=HEAP32[$3>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$3+4>>2]|0;
- _range_check($9,$$byval_copy,$$byval_copy1);
- $10 = $6;
- $11 = $7;
- $12 = ((($11)) + 16|0);
- $13 = HEAP8[$12>>0]|0;
- $14 = $10 & 1;
- $15 = $13 & -2;
- $16 = $15 | $14;
- HEAP8[$12>>0] = $16;
- $17 = $7;
- $18 = ((($17)) + 12|0);
- $19 = HEAP32[$18>>2]|0;
- $20 = ($19|0)!=(0|0);
- if (!($20)) {
-  $21 = $5;
-  $22 = (_mrb_malloc($21,16)|0);
-  $23 = $7;
-  $24 = ((($23)) + 12|0);
-  HEAP32[$24>>2] = $22;
- }
- $25 = $7;
- $26 = ((($25)) + 12|0);
- $27 = HEAP32[$26>>2]|0;
- ;HEAP32[$27>>2]=HEAP32[$2>>2]|0;HEAP32[$27+4>>2]=HEAP32[$2+4>>2]|0;
- $28 = $7;
- $29 = ((($28)) + 12|0);
- $30 = HEAP32[$29>>2]|0;
- $31 = ((($30)) + 8|0);
- ;HEAP32[$31>>2]=HEAP32[$3>>2]|0;HEAP32[$31+4>>2]=HEAP32[$3+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_range_eq($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $$byval_copy10 = 0, $$byval_copy11 = 0, $$byval_copy7 = 0, $$byval_copy8 = 0, $$byval_copy9 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0;
- var $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0;
- var $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, $vararg_buffer1 = 0, $vararg_buffer4 = 0, label = 0;
- var sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 112|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(112|0);
- $$byval_copy11 = sp + 104|0;
- $$byval_copy10 = sp + 96|0;
- $$byval_copy9 = sp + 88|0;
- $$byval_copy8 = sp + 80|0;
- $$byval_copy7 = sp + 72|0;
- $$byval_copy = sp + 64|0;
- $vararg_buffer4 = sp + 16|0;
- $vararg_buffer1 = sp + 8|0;
- $vararg_buffer = sp;
- $6 = sp + 40|0;
- $7 = sp + 32|0;
- $8 = sp + 24|0;
- $3 = $1;
- $9 = $3;
- HEAP32[$vararg_buffer>>2] = $6;
- (_mrb_get_args($9,69199,$vararg_buffer)|0);
- $10 = $3;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
- ;HEAP32[$$byval_copy7>>2]=HEAP32[$6>>2]|0;HEAP32[$$byval_copy7+4>>2]=HEAP32[$6+4>>2]|0;
- $11 = (_mrb_obj_equal($10,$$byval_copy,$$byval_copy7)|0);
- $12 = ($11<<24>>24)!=(0);
- if ($12) {
-  _mrb_true_value_1120($0);
-  STACKTOP = sp;return;
- }
- $13 = $3;
- $14 = $3;
- ;HEAP32[$$byval_copy8>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy8+4>>2]=HEAP32[$2+4>>2]|0;
- $15 = (_mrb_obj_class($14,$$byval_copy8)|0);
- ;HEAP32[$$byval_copy9>>2]=HEAP32[$6>>2]|0;HEAP32[$$byval_copy9+4>>2]=HEAP32[$6+4>>2]|0;
- $16 = (_mrb_obj_is_instance_of($13,$$byval_copy9,$15)|0);
- $17 = ($16<<24>>24)!=(0);
- if (!($17)) {
-  _mrb_false_value_1121($0);
-  STACKTOP = sp;return;
- }
- $18 = HEAP32[$2>>2]|0;
- $4 = $18;
- $19 = HEAP32[$6>>2]|0;
- $5 = $19;
- $20 = $3;
- $21 = $4;
- $22 = ((($21)) + 12|0);
- $23 = HEAP32[$22>>2]|0;
- $24 = $5;
- $25 = ((($24)) + 12|0);
- $26 = HEAP32[$25>>2]|0;
- ;HEAP8[$vararg_buffer1>>0]=HEAP8[$26>>0]|0;HEAP8[$vararg_buffer1+1>>0]=HEAP8[$26+1>>0]|0;HEAP8[$vararg_buffer1+2>>0]=HEAP8[$26+2>>0]|0;HEAP8[$vararg_buffer1+3>>0]=HEAP8[$26+3>>0]|0;HEAP8[$vararg_buffer1+4>>0]=HEAP8[$26+4>>0]|0;HEAP8[$vararg_buffer1+5>>0]=HEAP8[$26+5>>0]|0;HEAP8[$vararg_buffer1+6>>0]=HEAP8[$26+6>>0]|0;HEAP8[$vararg_buffer1+7>>0]=HEAP8[$26+7>>0]|0;
- ;HEAP32[$$byval_copy10>>2]=HEAP32[$23>>2]|0;HEAP32[$$byval_copy10+4>>2]=HEAP32[$23+4>>2]|0;
- _mrb_funcall($7,$20,$$byval_copy10,69201,1,$vararg_buffer1);
- $27 = ((($7)) + 4|0);
- $28 = HEAP32[$27>>2]|0;
- $29 = ($28|0)!=(0);
- if ($29) {
-  $30 = $3;
-  $31 = $4;
-  $32 = ((($31)) + 12|0);
-  $33 = HEAP32[$32>>2]|0;
-  $34 = ((($33)) + 8|0);
-  $35 = $5;
-  $36 = ((($35)) + 12|0);
-  $37 = HEAP32[$36>>2]|0;
-  $38 = ((($37)) + 8|0);
-  ;HEAP8[$vararg_buffer4>>0]=HEAP8[$38>>0]|0;HEAP8[$vararg_buffer4+1>>0]=HEAP8[$38+1>>0]|0;HEAP8[$vararg_buffer4+2>>0]=HEAP8[$38+2>>0]|0;HEAP8[$vararg_buffer4+3>>0]=HEAP8[$38+3>>0]|0;HEAP8[$vararg_buffer4+4>>0]=HEAP8[$38+4>>0]|0;HEAP8[$vararg_buffer4+5>>0]=HEAP8[$38+5>>0]|0;HEAP8[$vararg_buffer4+6>>0]=HEAP8[$38+6>>0]|0;HEAP8[$vararg_buffer4+7>>0]=HEAP8[$38+7>>0]|0;
-  ;HEAP32[$$byval_copy11>>2]=HEAP32[$34>>2]|0;HEAP32[$$byval_copy11+4>>2]=HEAP32[$34+4>>2]|0;
-  _mrb_funcall($8,$30,$$byval_copy11,69201,1,$vararg_buffer4);
-  $39 = ((($8)) + 4|0);
-  $40 = HEAP32[$39>>2]|0;
-  $41 = ($40|0)!=(0);
-  if ($41) {
-   $42 = $4;
-   $43 = ((($42)) + 16|0);
-   $44 = HEAP8[$43>>0]|0;
-   $45 = $44 & 1;
-   $46 = $45&255;
-   $47 = $5;
-   $48 = ((($47)) + 16|0);
-   $49 = HEAP8[$48>>0]|0;
-   $50 = $49 & 1;
-   $51 = $50&255;
-   $52 = ($46|0)!=($51|0);
-   if (!($52)) {
-    _mrb_true_value_1120($0);
-    STACKTOP = sp;return;
-   }
-  }
- }
- _mrb_false_value_1121($0);
- STACKTOP = sp;return;
-}
-function _mrb_true_value_1120($0) {
- $0 = $0|0;
- var $1 = 0, $2 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $1 = sp;
- $2 = ((($1)) + 4|0);
- HEAP32[$2>>2] = 2;
- HEAP32[$1>>2] = 1;
- ;HEAP32[$0>>2]=HEAP32[$1>>2]|0;HEAP32[$0+4>>2]=HEAP32[$1+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_false_value_1121($0) {
- $0 = $0|0;
- var $1 = 0, $2 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $1 = sp;
- $2 = ((($1)) + 4|0);
- HEAP32[$2>>2] = 0;
- HEAP32[$1>>2] = 1;
- ;HEAP32[$0>>2]=HEAP32[$1>>2]|0;HEAP32[$0+4>>2]=HEAP32[$1+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_range_include($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $$byval_copy2 = 0, $$byval_copy3 = 0, $$byval_copy4 = 0, $$byval_copy5 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0;
- var $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $5 = 0, $6 = 0;
- var $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 112|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(112|0);
- $$byval_copy5 = sp + 88|0;
- $$byval_copy4 = sp + 80|0;
- $$byval_copy3 = sp + 72|0;
- $$byval_copy2 = sp + 64|0;
- $$byval_copy1 = sp + 56|0;
- $$byval_copy = sp + 48|0;
- $vararg_buffer = sp;
- $4 = sp + 32|0;
- $6 = sp + 16|0;
- $7 = sp + 8|0;
- $3 = $1;
- $9 = HEAP32[$2>>2]|0;
- $5 = $9;
- $10 = $3;
- HEAP32[$vararg_buffer>>2] = $4;
- (_mrb_get_args($10,69199,$vararg_buffer)|0);
- $11 = $5;
- $12 = ((($11)) + 12|0);
- $13 = HEAP32[$12>>2]|0;
- ;HEAP32[$6>>2]=HEAP32[$13>>2]|0;HEAP32[$6+4>>2]=HEAP32[$13+4>>2]|0;
- $14 = $5;
- $15 = ((($14)) + 12|0);
- $16 = HEAP32[$15>>2]|0;
- $17 = ((($16)) + 8|0);
- ;HEAP32[$7>>2]=HEAP32[$17>>2]|0;HEAP32[$7+4>>2]=HEAP32[$17+4>>2]|0;
- $18 = $3;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$6>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$6+4>>2]|0;
- ;HEAP32[$$byval_copy1>>2]=HEAP32[$4>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$4+4>>2]|0;
- $19 = (_r_le($18,$$byval_copy,$$byval_copy1)|0);
- $20 = $19&255;
- $21 = ($20|0)!=(0);
- if (!($21)) {
-  $37 = 0;
-  $36 = $37&1;
-  $38 = $36&255;
-  $8 = $38;
-  $39 = $8;
-  _mrb_bool_value_1117($0,$39);
-  STACKTOP = sp;return;
- }
- $22 = $5;
- $23 = ((($22)) + 16|0);
- $24 = HEAP8[$23>>0]|0;
- $25 = $24 & 1;
- $26 = $25&255;
- $27 = ($26|0)!=(0);
- if ($27) {
-  $28 = $3;
-  ;HEAP32[$$byval_copy2>>2]=HEAP32[$7>>2]|0;HEAP32[$$byval_copy2+4>>2]=HEAP32[$7+4>>2]|0;
-  ;HEAP32[$$byval_copy3>>2]=HEAP32[$4>>2]|0;HEAP32[$$byval_copy3+4>>2]=HEAP32[$4+4>>2]|0;
-  $29 = (_r_gt($28,$$byval_copy2,$$byval_copy3)|0);
-  $30 = $29&255;
-  $31 = ($30|0)!=(0);
-  if ($31) {
-   $37 = 1;
-   $36 = $37&1;
-   $38 = $36&255;
-   $8 = $38;
-   $39 = $8;
-   _mrb_bool_value_1117($0,$39);
-   STACKTOP = sp;return;
-  }
- }
- $32 = $3;
- ;HEAP32[$$byval_copy4>>2]=HEAP32[$7>>2]|0;HEAP32[$$byval_copy4+4>>2]=HEAP32[$7+4>>2]|0;
- ;HEAP32[$$byval_copy5>>2]=HEAP32[$4>>2]|0;HEAP32[$$byval_copy5+4>>2]=HEAP32[$4+4>>2]|0;
- $33 = (_r_ge($32,$$byval_copy4,$$byval_copy5)|0);
- $34 = $33&255;
- $35 = ($34|0)!=(0);
- $37 = $35;
- $36 = $37&1;
- $38 = $36&255;
- $8 = $38;
- $39 = $8;
- _mrb_bool_value_1117($0,$39);
- STACKTOP = sp;return;
-}
-function _r_le($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $or$cond = 0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);
- $$byval_copy = sp + 32|0;
- $vararg_buffer = sp;
- $5 = sp + 16|0;
- $4 = $0;
- $7 = $4;
- ;HEAP8[$vararg_buffer>>0]=HEAP8[$2>>0]|0;HEAP8[$vararg_buffer+1>>0]=HEAP8[$2+1>>0]|0;HEAP8[$vararg_buffer+2>>0]=HEAP8[$2+2>>0]|0;HEAP8[$vararg_buffer+3>>0]=HEAP8[$2+3>>0]|0;HEAP8[$vararg_buffer+4>>0]=HEAP8[$2+4>>0]|0;HEAP8[$vararg_buffer+5>>0]=HEAP8[$2+5>>0]|0;HEAP8[$vararg_buffer+6>>0]=HEAP8[$2+6>>0]|0;HEAP8[$vararg_buffer+7>>0]=HEAP8[$2+7>>0]|0;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$1>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$1+4>>2]|0;
- _mrb_funcall($5,$7,$$byval_copy,69156,1,$vararg_buffer);
- $8 = ((($5)) + 4|0);
- $9 = HEAP32[$8>>2]|0;
- $10 = ($9|0)==(3);
- if ($10) {
-  $11 = HEAP32[$5>>2]|0;
-  $6 = $11;
-  $12 = $6;
-  $13 = ($12|0)==(0);
-  $14 = $6;
-  $15 = ($14|0)==(-1);
-  $or$cond = $13 | $15;
-  if ($or$cond) {
-   $3 = 1;
-   $16 = $3;
-   STACKTOP = sp;return ($16|0);
-  }
- }
- $3 = 0;
- $16 = $3;
- STACKTOP = sp;return ($16|0);
-}
-function _r_gt($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $$byval_copy = sp + 24|0;
- $vararg_buffer = sp;
- $4 = sp + 8|0;
- $3 = $0;
- $5 = $3;
- ;HEAP8[$vararg_buffer>>0]=HEAP8[$2>>0]|0;HEAP8[$vararg_buffer+1>>0]=HEAP8[$2+1>>0]|0;HEAP8[$vararg_buffer+2>>0]=HEAP8[$2+2>>0]|0;HEAP8[$vararg_buffer+3>>0]=HEAP8[$2+3>>0]|0;HEAP8[$vararg_buffer+4>>0]=HEAP8[$2+4>>0]|0;HEAP8[$vararg_buffer+5>>0]=HEAP8[$2+5>>0]|0;HEAP8[$vararg_buffer+6>>0]=HEAP8[$2+6>>0]|0;HEAP8[$vararg_buffer+7>>0]=HEAP8[$2+7>>0]|0;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$1>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$1+4>>2]|0;
- _mrb_funcall($4,$5,$$byval_copy,69156,1,$vararg_buffer);
- $6 = ((($4)) + 4|0);
- $7 = HEAP32[$6>>2]|0;
- $8 = ($7|0)==(3);
- $9 = HEAP32[$4>>2]|0;
- $10 = ($9|0)==(1);
- $11 = $8 ? $10 : 0;
- $12 = $11&1;
- $13 = $12&255;
- STACKTOP = sp;return ($13|0);
-}
-function _r_ge($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $or$cond = 0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);
- $$byval_copy = sp + 32|0;
- $vararg_buffer = sp;
- $5 = sp + 16|0;
- $4 = $0;
- $7 = $4;
- ;HEAP8[$vararg_buffer>>0]=HEAP8[$2>>0]|0;HEAP8[$vararg_buffer+1>>0]=HEAP8[$2+1>>0]|0;HEAP8[$vararg_buffer+2>>0]=HEAP8[$2+2>>0]|0;HEAP8[$vararg_buffer+3>>0]=HEAP8[$2+3>>0]|0;HEAP8[$vararg_buffer+4>>0]=HEAP8[$2+4>>0]|0;HEAP8[$vararg_buffer+5>>0]=HEAP8[$2+5>>0]|0;HEAP8[$vararg_buffer+6>>0]=HEAP8[$2+6>>0]|0;HEAP8[$vararg_buffer+7>>0]=HEAP8[$2+7>>0]|0;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$1>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$1+4>>2]|0;
- _mrb_funcall($5,$7,$$byval_copy,69156,1,$vararg_buffer);
- $8 = ((($5)) + 4|0);
- $9 = HEAP32[$8>>2]|0;
- $10 = ($9|0)==(3);
- if ($10) {
-  $11 = HEAP32[$5>>2]|0;
-  $6 = $11;
-  $12 = $6;
-  $13 = ($12|0)==(0);
-  $14 = $6;
-  $15 = ($14|0)==(1);
-  $or$cond = $13 | $15;
-  if ($or$cond) {
-   $3 = 1;
-   $16 = $3;
-   STACKTOP = sp;return ($16|0);
-  }
- }
- $3 = 0;
- $16 = $3;
- STACKTOP = sp;return ($16|0);
-}
-function _mrb_range_beg_len($0,$1,$2,$3,$4) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- $4 = $4|0;
- var $$byval_copy = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $$byval_copy = sp + 16|0;
- $5 = $0;
- $6 = $2;
- $7 = $3;
- $8 = $4;
- $9 = $5;
- $10 = $6;
- $11 = $7;
- $12 = $8;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$1>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$1+4>>2]|0;
- $13 = (_range_beg_len($9,$$byval_copy,$10,$11,$12,1)|0);
- STACKTOP = sp;return ($13|0);
-}
-function _range_beg_len($0,$1,$2,$3,$4,$5) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- $4 = $4|0;
- $5 = $5|0;
- var $$ = 0, $$byval_copy = 0, $$byval_copy1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0;
- var $27 = 0, $28 = 0, $29 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0;
- var $47 = 0, $48 = 0, $49 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0;
- var $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 80|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(80|0);
- $$byval_copy1 = sp + 56|0;
- $$byval_copy = sp + 48|0;
- $15 = sp + 8|0;
- $16 = sp;
- $7 = $0;
- $8 = $2;
- $9 = $3;
- $10 = $4;
- $11 = $5;
- $17 = HEAP32[$1>>2]|0;
- $14 = $17;
- $18 = ((($1)) + 4|0);
- $19 = HEAP32[$18>>2]|0;
- $20 = ($19|0)!=(17);
- if ($20) {
-  $6 = 0;
-  $74 = $6;
-  STACKTOP = sp;return ($74|0);
- }
- $21 = $7;
- $22 = $14;
- $23 = ((($22)) + 12|0);
- $24 = HEAP32[$23>>2]|0;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$24>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$24+4>>2]|0;
- _mrb_to_int($15,$21,$$byval_copy);
- $25 = HEAP32[$15>>2]|0;
- $12 = $25;
- $26 = $7;
- $27 = $14;
- $28 = ((($27)) + 12|0);
- $29 = HEAP32[$28>>2]|0;
- $30 = ((($29)) + 8|0);
- ;HEAP32[$$byval_copy1>>2]=HEAP32[$30>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$30+4>>2]|0;
- _mrb_to_int($16,$26,$$byval_copy1);
- $31 = HEAP32[$16>>2]|0;
- $13 = $31;
- $32 = $12;
- $33 = ($32|0)<(0);
- if ($33) {
-  $34 = $10;
-  $35 = $12;
-  $36 = (($35) + ($34))|0;
-  $12 = $36;
-  $37 = $12;
-  $38 = ($37|0)<(0);
-  if ($38) {
-   $6 = 0;
-   $74 = $6;
-   STACKTOP = sp;return ($74|0);
-  }
- }
- $39 = $11;
- $40 = ($39<<24>>24)!=(0);
- do {
-  if ($40) {
-   $41 = $12;
-   $42 = $10;
-   $43 = ($41|0)>($42|0);
-   if ($43) {
-    $6 = 0;
-    $74 = $6;
-    STACKTOP = sp;return ($74|0);
-   } else {
-    $44 = $13;
-    $45 = $10;
-    $46 = ($44|0)>($45|0);
-    if (!($46)) {
-     break;
-    }
-    $47 = $10;
-    $13 = $47;
-    break;
-   }
-  }
- } while(0);
- $48 = $13;
- $49 = ($48|0)<(0);
- if ($49) {
-  $50 = $10;
-  $51 = $13;
-  $52 = (($51) + ($50))|0;
-  $13 = $52;
- }
- $53 = $14;
- $54 = ((($53)) + 16|0);
- $55 = HEAP8[$54>>0]|0;
- $56 = $55 & 1;
- $57 = ($56<<24>>24)!=(0);
- do {
-  if (!($57)) {
-   $58 = $11;
-   $59 = ($58<<24>>24)!=(0);
-   if ($59) {
-    $60 = $13;
-    $61 = $10;
-    $62 = ($60|0)<($61|0);
-    if (!($62)) {
-     break;
-    }
-   }
-   $63 = $13;
-   $64 = (($63) + 1)|0;
-   $13 = $64;
-  }
- } while(0);
- $65 = $13;
- $66 = $12;
- $67 = (($65) - ($66))|0;
- $10 = $67;
- $68 = $10;
- $69 = ($68|0)<(0);
- $$ = $69 ? 0 : $67;
- $10 = $$;
- $70 = $12;
- $71 = $8;
- HEAP32[$71>>2] = $70;
- $72 = $10;
- $73 = $9;
- HEAP32[$73>>2] = $72;
- $6 = 1;
- $74 = $6;
- STACKTOP = sp;return ($74|0);
-}
-function _mrb_init_range($0) {
- $0 = $0|0;
- var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;
- var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0;
- var $46 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $1 = $0;
- $3 = $1;
- $4 = $1;
- $5 = ((($4)) + 32|0);
- $6 = HEAP32[$5>>2]|0;
- $7 = (_mrb_define_class($3,69150,$6)|0);
- $2 = $7;
- $8 = $2;
- $9 = HEAP32[$8>>2]|0;
- $10 = $9 >>> 11;
- $11 = $10 & -256;
- $12 = $11 | 17;
- $13 = $2;
- $14 = HEAP32[$13>>2]|0;
- $15 = $12 & 2097151;
- $16 = $15 << 11;
- $17 = $14 & 2047;
- $18 = $17 | $16;
- HEAP32[$13>>2] = $18;
- $19 = $1;
- $20 = $2;
- _mrb_define_method($19,$20,69214,320,0);
- $21 = $1;
- $22 = $2;
- _mrb_define_method($21,$22,69220,321,0);
- $23 = $1;
- $24 = $2;
- _mrb_define_method($23,$24,69201,322,262144);
- $25 = $1;
- $26 = $2;
- _mrb_define_method($25,$26,69591,323,262144);
- $27 = $1;
- $28 = $2;
- _mrb_define_method($27,$28,69224,324,0);
- $29 = $1;
- $30 = $2;
- _mrb_define_method($29,$30,69237,320,0);
- $31 = $1;
- $32 = $2;
- _mrb_define_method($31,$32,69243,323,262144);
- $33 = $1;
- $34 = $2;
- _mrb_define_method($33,$34,69252,325,4096);
- $35 = $1;
- $36 = $2;
- _mrb_define_method($35,$36,69263,321,0);
- $37 = $1;
- $38 = $2;
- _mrb_define_method($37,$38,69268,323,262144);
- $39 = $1;
- $40 = $2;
- _mrb_define_method($39,$40,69276,326,0);
- $41 = $1;
- $42 = $2;
- _mrb_define_method($41,$42,69281,327,0);
- $43 = $1;
- $44 = $2;
- _mrb_define_method($43,$44,69289,328,262144);
- $45 = $1;
- $46 = $2;
- _mrb_define_method($45,$46,69294,329,262144);
- STACKTOP = sp;return;
-}
-function _range_to_s($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $$byval_copy2 = 0, $$byval_copy3 = 0, $$byval_copy4 = 0, $$byval_copy5 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0;
- var $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 128|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(128|0);
- $$byval_copy5 = sp + 112|0;
- $$byval_copy4 = sp + 104|0;
- $$byval_copy3 = sp + 96|0;
- $$byval_copy2 = sp + 88|0;
- $$byval_copy1 = sp + 80|0;
- $$byval_copy = sp + 72|0;
- $4 = sp + 56|0;
- $5 = sp + 48|0;
- $7 = sp + 32|0;
- $8 = sp + 24|0;
- $9 = sp + 16|0;
- $10 = sp + 8|0;
- $11 = sp;
- $3 = $1;
- $12 = HEAP32[$2>>2]|0;
- $6 = $12;
- $13 = $3;
- $14 = $6;
- $15 = ((($14)) + 12|0);
- $16 = HEAP32[$15>>2]|0;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$16>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$16+4>>2]|0;
- _mrb_obj_as_string($7,$13,$$byval_copy);
- ;HEAP32[$4>>2]=HEAP32[$7>>2]|0;HEAP32[$4+4>>2]=HEAP32[$7+4>>2]|0;
- $17 = $3;
- $18 = $6;
- $19 = ((($18)) + 12|0);
- $20 = HEAP32[$19>>2]|0;
- $21 = ((($20)) + 8|0);
- ;HEAP32[$$byval_copy1>>2]=HEAP32[$21>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$21+4>>2]|0;
- _mrb_obj_as_string($8,$17,$$byval_copy1);
- ;HEAP32[$5>>2]=HEAP32[$8>>2]|0;HEAP32[$5+4>>2]=HEAP32[$8+4>>2]|0;
- $22 = $3;
- ;HEAP32[$$byval_copy2>>2]=HEAP32[$4>>2]|0;HEAP32[$$byval_copy2+4>>2]=HEAP32[$4+4>>2]|0;
- _mrb_str_dup($9,$22,$$byval_copy2);
- ;HEAP32[$4>>2]=HEAP32[$9>>2]|0;HEAP32[$4+4>>2]=HEAP32[$9+4>>2]|0;
- $23 = $3;
- $24 = $6;
- $25 = ((($24)) + 16|0);
- $26 = HEAP8[$25>>0]|0;
- $27 = $26 & 1;
- $28 = $27&255;
- $29 = ($28|0)!=(0);
- $30 = $29 ? 3 : 2;
- ;HEAP32[$$byval_copy3>>2]=HEAP32[$4>>2]|0;HEAP32[$$byval_copy3+4>>2]=HEAP32[$4+4>>2]|0;
- _mrb_str_cat($10,$23,$$byval_copy3,69331,$30);
- $31 = $3;
- ;HEAP32[$$byval_copy4>>2]=HEAP32[$4>>2]|0;HEAP32[$$byval_copy4+4>>2]=HEAP32[$4+4>>2]|0;
- ;HEAP32[$$byval_copy5>>2]=HEAP32[$5>>2]|0;HEAP32[$$byval_copy5+4>>2]=HEAP32[$5+4>>2]|0;
- _mrb_str_cat_str($11,$31,$$byval_copy4,$$byval_copy5);
- ;HEAP32[$0>>2]=HEAP32[$4>>2]|0;HEAP32[$0+4>>2]=HEAP32[$4+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _range_inspect($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $$byval_copy2 = 0, $$byval_copy3 = 0, $$byval_copy4 = 0, $$byval_copy5 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0;
- var $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 128|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(128|0);
- $$byval_copy5 = sp + 112|0;
- $$byval_copy4 = sp + 104|0;
- $$byval_copy3 = sp + 96|0;
- $$byval_copy2 = sp + 88|0;
- $$byval_copy1 = sp + 80|0;
- $$byval_copy = sp + 72|0;
- $4 = sp + 56|0;
- $5 = sp + 48|0;
- $7 = sp + 32|0;
- $8 = sp + 24|0;
- $9 = sp + 16|0;
- $10 = sp + 8|0;
- $11 = sp;
- $3 = $1;
- $12 = HEAP32[$2>>2]|0;
- $6 = $12;
- $13 = $3;
- $14 = $6;
- $15 = ((($14)) + 12|0);
- $16 = HEAP32[$15>>2]|0;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$16>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$16+4>>2]|0;
- _mrb_inspect($7,$13,$$byval_copy);
- ;HEAP32[$4>>2]=HEAP32[$7>>2]|0;HEAP32[$4+4>>2]=HEAP32[$7+4>>2]|0;
- $17 = $3;
- $18 = $6;
- $19 = ((($18)) + 12|0);
- $20 = HEAP32[$19>>2]|0;
- $21 = ((($20)) + 8|0);
- ;HEAP32[$$byval_copy1>>2]=HEAP32[$21>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$21+4>>2]|0;
- _mrb_inspect($8,$17,$$byval_copy1);
- ;HEAP32[$5>>2]=HEAP32[$8>>2]|0;HEAP32[$5+4>>2]=HEAP32[$8+4>>2]|0;
- $22 = $3;
- ;HEAP32[$$byval_copy2>>2]=HEAP32[$4>>2]|0;HEAP32[$$byval_copy2+4>>2]=HEAP32[$4+4>>2]|0;
- _mrb_str_dup($9,$22,$$byval_copy2);
- ;HEAP32[$4>>2]=HEAP32[$9>>2]|0;HEAP32[$4+4>>2]=HEAP32[$9+4>>2]|0;
- $23 = $3;
- $24 = $6;
- $25 = ((($24)) + 16|0);
- $26 = HEAP8[$25>>0]|0;
- $27 = $26 & 1;
- $28 = $27&255;
- $29 = ($28|0)!=(0);
- $30 = $29 ? 3 : 2;
- ;HEAP32[$$byval_copy3>>2]=HEAP32[$4>>2]|0;HEAP32[$$byval_copy3+4>>2]=HEAP32[$4+4>>2]|0;
- _mrb_str_cat($10,$23,$$byval_copy3,69331,$30);
- $31 = $3;
- ;HEAP32[$$byval_copy4>>2]=HEAP32[$4>>2]|0;HEAP32[$$byval_copy4+4>>2]=HEAP32[$4+4>>2]|0;
- ;HEAP32[$$byval_copy5>>2]=HEAP32[$5>>2]|0;HEAP32[$$byval_copy5+4>>2]=HEAP32[$5+4>>2]|0;
- _mrb_str_cat_str($11,$31,$$byval_copy4,$$byval_copy5);
- ;HEAP32[$0>>2]=HEAP32[$4>>2]|0;HEAP32[$0+4>>2]=HEAP32[$4+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _range_eql($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $$byval_copy2 = 0, $$byval_copy3 = 0, $$byval_copy4 = 0, $$byval_copy5 = 0, $$byval_copy6 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0;
- var $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0;
- var $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 96|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(96|0);
- $$byval_copy6 = sp + 80|0;
- $$byval_copy5 = sp + 72|0;
- $$byval_copy4 = sp + 64|0;
- $$byval_copy3 = sp + 56|0;
- $$byval_copy2 = sp + 48|0;
- $$byval_copy1 = sp + 40|0;
- $$byval_copy = sp + 32|0;
- $vararg_buffer = sp;
- $4 = sp + 16|0;
- $3 = $1;
- $7 = $3;
- HEAP32[$vararg_buffer>>2] = $4;
- (_mrb_get_args($7,69199,$vararg_buffer)|0);
- $8 = $3;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
- ;HEAP32[$$byval_copy1>>2]=HEAP32[$4>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$4+4>>2]|0;
- $9 = (_mrb_obj_equal($8,$$byval_copy,$$byval_copy1)|0);
- $10 = ($9<<24>>24)!=(0);
- if ($10) {
-  _mrb_true_value_1120($0);
-  STACKTOP = sp;return;
- }
- $11 = $3;
- $12 = $3;
- $13 = (_mrb_class_get($12,69150)|0);
- ;HEAP32[$$byval_copy2>>2]=HEAP32[$4>>2]|0;HEAP32[$$byval_copy2+4>>2]=HEAP32[$4+4>>2]|0;
- $14 = (_mrb_obj_is_kind_of($11,$$byval_copy2,$13)|0);
- $15 = ($14<<24>>24)!=(0);
- if (!($15)) {
-  _mrb_false_value_1121($0);
-  STACKTOP = sp;return;
- }
- $16 = ((($4)) + 4|0);
- $17 = HEAP32[$16>>2]|0;
- $18 = ($17|0)!=(17);
- if ($18) {
-  _mrb_false_value_1121($0);
-  STACKTOP = sp;return;
- }
- $19 = HEAP32[$2>>2]|0;
- $5 = $19;
- $20 = HEAP32[$4>>2]|0;
- $6 = $20;
- $21 = $3;
- $22 = $5;
- $23 = ((($22)) + 12|0);
- $24 = HEAP32[$23>>2]|0;
- $25 = $6;
- $26 = ((($25)) + 12|0);
- $27 = HEAP32[$26>>2]|0;
- ;HEAP32[$$byval_copy3>>2]=HEAP32[$24>>2]|0;HEAP32[$$byval_copy3+4>>2]=HEAP32[$24+4>>2]|0;
- ;HEAP32[$$byval_copy4>>2]=HEAP32[$27>>2]|0;HEAP32[$$byval_copy4+4>>2]=HEAP32[$27+4>>2]|0;
- $28 = (_mrb_eql($21,$$byval_copy3,$$byval_copy4)|0);
- $29 = ($28<<24>>24)!=(0);
- if ($29) {
-  $30 = $3;
-  $31 = $5;
-  $32 = ((($31)) + 12|0);
-  $33 = HEAP32[$32>>2]|0;
-  $34 = ((($33)) + 8|0);
-  $35 = $6;
-  $36 = ((($35)) + 12|0);
-  $37 = HEAP32[$36>>2]|0;
-  $38 = ((($37)) + 8|0);
-  ;HEAP32[$$byval_copy5>>2]=HEAP32[$34>>2]|0;HEAP32[$$byval_copy5+4>>2]=HEAP32[$34+4>>2]|0;
-  ;HEAP32[$$byval_copy6>>2]=HEAP32[$38>>2]|0;HEAP32[$$byval_copy6+4>>2]=HEAP32[$38+4>>2]|0;
-  $39 = (_mrb_eql($30,$$byval_copy5,$$byval_copy6)|0);
-  $40 = ($39<<24>>24)!=(0);
-  if ($40) {
-   $41 = $5;
-   $42 = ((($41)) + 16|0);
-   $43 = HEAP8[$42>>0]|0;
-   $44 = $43 & 1;
-   $45 = $44&255;
-   $46 = $6;
-   $47 = ((($46)) + 16|0);
-   $48 = HEAP8[$47>>0]|0;
-   $49 = $48 & 1;
-   $50 = $49&255;
-   $51 = ($45|0)!=($50|0);
-   if (!($51)) {
-    _mrb_true_value_1120($0);
-    STACKTOP = sp;return;
-   }
-  }
- }
- _mrb_false_value_1121($0);
- STACKTOP = sp;return;
-}
-function _range_initialize_copy($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $$byval_copy2 = 0, $$byval_copy3 = 0, $$byval_copy4 = 0, $$byval_copy5 = 0, $$byval_copy6 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0;
- var $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 80|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(80|0);
- $$byval_copy6 = sp + 72|0;
- $$byval_copy5 = sp + 64|0;
- $$byval_copy4 = sp + 56|0;
- $$byval_copy3 = sp + 48|0;
- $$byval_copy2 = sp + 40|0;
- $$byval_copy1 = sp + 32|0;
- $$byval_copy = sp + 24|0;
- $vararg_buffer = sp;
- $4 = sp + 8|0;
- $3 = $1;
- $6 = $3;
- HEAP32[$vararg_buffer>>2] = $4;
- (_mrb_get_args($6,69199,$vararg_buffer)|0);
- $7 = $3;
- ;HEAP32[$$byval_copy>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$2+4>>2]|0;
- ;HEAP32[$$byval_copy1>>2]=HEAP32[$4>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$4+4>>2]|0;
- $8 = (_mrb_obj_equal($7,$$byval_copy,$$byval_copy1)|0);
- $9 = ($8<<24>>24)!=(0);
- if ($9) {
-  ;HEAP32[$0>>2]=HEAP32[$2>>2]|0;HEAP32[$0+4>>2]=HEAP32[$2+4>>2]|0;
-  STACKTOP = sp;return;
- }
- $10 = $3;
- $11 = $3;
- ;HEAP32[$$byval_copy2>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy2+4>>2]=HEAP32[$2+4>>2]|0;
- $12 = (_mrb_obj_class($11,$$byval_copy2)|0);
- ;HEAP32[$$byval_copy3>>2]=HEAP32[$4>>2]|0;HEAP32[$$byval_copy3+4>>2]=HEAP32[$4+4>>2]|0;
- $13 = (_mrb_obj_is_instance_of($10,$$byval_copy3,$12)|0);
- $14 = ($13<<24>>24)!=(0);
- if (!($14)) {
-  $15 = $3;
-  $16 = $3;
-  $17 = (_mrb_class_get($16,69204)|0);
-  _mrb_raise($15,$17,69310);
-  // unreachable;
- }
- $18 = HEAP32[$4>>2]|0;
- $5 = $18;
- $19 = $3;
- $20 = $5;
- $21 = ((($20)) + 12|0);
- $22 = HEAP32[$21>>2]|0;
- $23 = $5;
- $24 = ((($23)) + 12|0);
- $25 = HEAP32[$24>>2]|0;
- $26 = ((($25)) + 8|0);
- $27 = $5;
- $28 = ((($27)) + 16|0);
- $29 = HEAP8[$28>>0]|0;
- $30 = $29 & 1;
- ;HEAP32[$$byval_copy4>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy4+4>>2]=HEAP32[$2+4>>2]|0;
- ;HEAP32[$$byval_copy5>>2]=HEAP32[$22>>2]|0;HEAP32[$$byval_copy5+4>>2]=HEAP32[$22+4>>2]|0;
- ;HEAP32[$$byval_copy6>>2]=HEAP32[$26>>2]|0;HEAP32[$$byval_copy6+4>>2]=HEAP32[$26+4>>2]|0;
- _range_init($19,$$byval_copy4,$$byval_copy5,$$byval_copy6,$30);
- ;HEAP32[$0>>2]=HEAP32[$2>>2]|0;HEAP32[$0+4>>2]=HEAP32[$2+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_init_version($0) {
- $0 = $0|0;
- var $$byval_copy = 0, $$byval_copy1 = 0, $$byval_copy2 = 0, $$byval_copy3 = 0, $$byval_copy4 = 0, $$byval_copy5 = 0, $$byval_copy6 = 0, $$byval_copy7 = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0;
- var $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 144|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(144|0);
- $$byval_copy7 = sp + 128|0;
- $$byval_copy6 = sp + 120|0;
- $$byval_copy5 = sp + 112|0;
- $$byval_copy4 = sp + 104|0;
- $$byval_copy3 = sp + 96|0;
- $$byval_copy2 = sp + 88|0;
- $$byval_copy1 = sp + 80|0;
- $$byval_copy = sp + 72|0;
- $2 = sp + 56|0;
- $3 = sp + 48|0;
- $4 = sp + 40|0;
- $5 = sp + 32|0;
- $6 = sp + 24|0;
- $7 = sp + 16|0;
- $8 = sp + 8|0;
- $9 = sp;
- $1 = $0;
- $10 = $1;
- _mrb_str_new_static($2,$10,69335,5);
- $11 = $1;
- $12 = $1;
- _mrb_str_new_static($3,$12,69341,3);
- ;HEAP32[$$byval_copy>>2]=HEAP32[$3>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$3+4>>2]|0;
- _mrb_define_global_const($11,69345,$$byval_copy);
- $13 = $1;
- $14 = $1;
- _mrb_str_new_static($4,$14,69358,5);
- ;HEAP32[$$byval_copy1>>2]=HEAP32[$4>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$4+4>>2]|0;
- _mrb_define_global_const($13,69364,$$byval_copy1);
- $15 = $1;
- ;HEAP32[$$byval_copy2>>2]=HEAP32[$2>>2]|0;HEAP32[$$byval_copy2+4>>2]=HEAP32[$2+4>>2]|0;
- _mrb_define_global_const($15,69376,$$byval_copy2);
- $16 = $1;
- $17 = $1;
- _mrb_str_new_static($5,$17,69335,5);
- ;HEAP32[$$byval_copy3>>2]=HEAP32[$5>>2]|0;HEAP32[$$byval_copy3+4>>2]=HEAP32[$5+4>>2]|0;
- _mrb_define_global_const($16,69396,$$byval_copy3);
- $18 = $1;
- _mrb_fixnum_value_1154($6,10200);
- ;HEAP32[$$byval_copy4>>2]=HEAP32[$6>>2]|0;HEAP32[$$byval_copy4+4>>2]=HEAP32[$6+4>>2]|0;
- _mrb_define_global_const($18,69410,$$byval_copy4);
- $19 = $1;
- $20 = $1;
- _mrb_str_new_static($7,$20,69427,10);
- ;HEAP32[$$byval_copy5>>2]=HEAP32[$7>>2]|0;HEAP32[$$byval_copy5+4>>2]=HEAP32[$7+4>>2]|0;
- _mrb_define_global_const($19,69438,$$byval_copy5);
- $21 = $1;
- $22 = $1;
- _mrb_str_new_static($8,$22,69457,25);
- ;HEAP32[$$byval_copy6>>2]=HEAP32[$8>>2]|0;HEAP32[$$byval_copy6+4>>2]=HEAP32[$8+4>>2]|0;
- _mrb_define_global_const($21,69483,$$byval_copy6);
- $23 = $1;
- $24 = $1;
- _mrb_str_new_static($9,$24,69501,48);
- ;HEAP32[$$byval_copy7>>2]=HEAP32[$9>>2]|0;HEAP32[$$byval_copy7+4>>2]=HEAP32[$9+4>>2]|0;
- _mrb_define_global_const($23,69550,$$byval_copy7);
- STACKTOP = sp;return;
-}
-function _mrb_fixnum_value_1154($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = sp;
- $2 = $1;
- $4 = ((($3)) + 4|0);
- HEAP32[$4>>2] = 3;
- $5 = $2;
- HEAP32[$3>>2] = $5;
- ;HEAP32[$0>>2]=HEAP32[$3>>2]|0;HEAP32[$0+4>>2]=HEAP32[$3+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _mrb_generate_code($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $$028 = 0, $$reg2mem26$0 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0;
- var $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0;
- var $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $7 = 0, $8 = 0;
- var $9 = 0, $cond = 0, $cond29 = 0, $cond30 = 0, $cond31 = 0, $cond32 = 0, $cond33 = 0, $cond34 = 0, $cond35 = 0, _setjmpTable = 0, _setjmpTableSize = 0, label = 0, sp = 0;
- sp = STACKTOP;
- _setjmpTableSize = 4;_setjmpTable = _malloc(40) | 0;HEAP32[_setjmpTable>>2]=0;
- __THREW__ = 0;
- $2 = (invoke_iiii(330,($0|0),(0|0),(0|0))|0);
- $3 = __THREW__; __THREW__ = 0;
- if ((($3|0) != 0) & ((threwValue|0) != 0)) { $4 = _testSetjmp(HEAP32[$3>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($4|0) == 0) { _longjmp($3|0, threwValue|0); } tempRet0 = (threwValue); } else { $4 = -1; };
- $5 = tempRet0;
- $cond = ($4|0)==(1);
- do {
-  if ($cond) {
-   $$reg2mem26$0 = $5;
-  } else {
-   $6 = ($2|0)!=(0|0);
-   if ($6) {
-    HEAP32[$2>>2] = $0;
-    $7 = ((($2)) + 248|0);
-    HEAP32[$7>>2] = $1;
-    $8 = ((($1)) + 28|0);
-    $9 = HEAP32[$8>>2]|0;
-    $10 = ((($2)) + 196|0);
-    HEAP32[$10>>2] = $9;
-    $11 = ((($1)) + 1400|0);
-    $12 = HEAP32[$11>>2]|0;
-    $13 = $12&65535;
-    $14 = ((($2)) + 244|0);
-    HEAP16[$14>>1] = $13;
-    $15 = ((($2)) + 8|0);
-    _setjmpTable = _saveSetjmp($15,1,_setjmpTable|0,_setjmpTableSize|0)|0;_setjmpTableSize = tempRet0;
-    __THREW__ = 0;
-    $16 = __THREW__; __THREW__ = 0;
-    if ((($16|0) != 0) & ((threwValue|0) != 0)) { $17 = _testSetjmp(HEAP32[$16>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($17|0) == 0) { _longjmp($16|0, threwValue|0); } tempRet0 = (threwValue); } else { $17 = -1; };
-    $18 = tempRet0;
-    $cond29 = ($17|0)==(1);
-    if ($cond29) {
-     $$reg2mem26$0 = $18;
-     break;
-    }
-    $$reg2mem26$0 = 0;
-    break;
-   } else {
-    $$028 = 0;
-    _free(_setjmpTable|0);
-    return ($$028|0);
-   }
-  }
- } while(0);
- while(1) {
-  $19 = ($$reg2mem26$0|0)==(0);
-  if ($19) {
-   $20 = ((($1)) + 1144|0);
-   $21 = HEAP32[$20>>2]|0;
-   __THREW__ = 0;
-   invoke_viii(331,($2|0),($21|0),0);
-   $22 = __THREW__; __THREW__ = 0;
-   if ((($22|0) != 0) & ((threwValue|0) != 0)) { $23 = _testSetjmp(HEAP32[$22>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($23|0) == 0) { _longjmp($22|0, threwValue|0); } tempRet0 = (threwValue); } else { $23 = -1; };
-   $24 = tempRet0;
-   $cond32 = ($23|0)==(1);
-   if ($cond32) {
-    $$reg2mem26$0 = $24;
-    continue;
-   }
-   $25 = ((($2)) + 216|0);
-   $26 = HEAP32[$25>>2]|0;
-   __THREW__ = 0;
-   $27 = (invoke_iii(195,($0|0),($26|0))|0);
-   $28 = __THREW__; __THREW__ = 0;
-   if ((($28|0) != 0) & ((threwValue|0) != 0)) { $29 = _testSetjmp(HEAP32[$28>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($29|0) == 0) { _longjmp($28|0, threwValue|0); } tempRet0 = (threwValue); } else { $29 = -1; };
-   $30 = tempRet0;
-   $cond33 = ($29|0)==(1);
-   if ($cond33) {
-    $$reg2mem26$0 = $30;
-    continue;
-   }
-   $31 = ((($2)) + 216|0);
-   $32 = HEAP32[$31>>2]|0;
-   __THREW__ = 0;
-   invoke_vii(332,($0|0),($32|0));
-   $33 = __THREW__; __THREW__ = 0;
-   if ((($33|0) != 0) & ((threwValue|0) != 0)) { $34 = _testSetjmp(HEAP32[$33>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($34|0) == 0) { _longjmp($33|0, threwValue|0); } tempRet0 = (threwValue); } else { $34 = -1; };
-   $35 = tempRet0;
-   $cond34 = ($34|0)==(1);
-   if ($cond34) {
-    $$reg2mem26$0 = $35;
-    continue;
-   }
-   $36 = ((($2)) + 4|0);
-   $37 = HEAP32[$36>>2]|0;
-   __THREW__ = 0;
-   invoke_vi(333,($37|0));
-   $38 = __THREW__; __THREW__ = 0;
-   if ((($38|0) != 0) & ((threwValue|0) != 0)) { $39 = _testSetjmp(HEAP32[$38>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($39|0) == 0) { _longjmp($38|0, threwValue|0); } tempRet0 = (threwValue); } else { $39 = -1; };
-   $40 = tempRet0;
-   $cond35 = ($39|0)==(1);
-   if ($cond35) {
-    $$reg2mem26$0 = $40;
-    continue;
-   } else {
-    label = 11;
-    break;
-   }
-  } else {
-   $41 = ((($2)) + 196|0);
-   $42 = HEAP32[$41>>2]|0;
-   $43 = ((($2)) + 216|0);
-   $44 = HEAP32[$43>>2]|0;
-   $45 = ((($44)) + 28|0);
-   $46 = HEAP32[$45>>2]|0;
-   $47 = ($42|0)==($46|0);
-   if ($47) {
-    $48 = ((($2)) + 216|0);
-    $49 = HEAP32[$48>>2]|0;
-    $50 = ((($49)) + 28|0);
-    HEAP32[$50>>2] = 0;
-   }
-   $51 = ((($2)) + 216|0);
-   $52 = HEAP32[$51>>2]|0;
-   __THREW__ = 0;
-   invoke_vii(332,($0|0),($52|0));
-   $53 = __THREW__; __THREW__ = 0;
-   if ((($53|0) != 0) & ((threwValue|0) != 0)) { $54 = _testSetjmp(HEAP32[$53>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($54|0) == 0) { _longjmp($53|0, threwValue|0); } tempRet0 = (threwValue); } else { $54 = -1; };
-   $55 = tempRet0;
-   $cond30 = ($54|0)==(1);
-   if ($cond30) {
-    $$reg2mem26$0 = $55;
-    continue;
-   }
-   $56 = ((($2)) + 4|0);
-   $57 = HEAP32[$56>>2]|0;
-   __THREW__ = 0;
-   invoke_vi(333,($57|0));
-   $58 = __THREW__; __THREW__ = 0;
-   if ((($58|0) != 0) & ((threwValue|0) != 0)) { $59 = _testSetjmp(HEAP32[$58>>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; if (($59|0) == 0) { _longjmp($58|0, threwValue|0); } tempRet0 = (threwValue); } else { $59 = -1; };
-   $60 = tempRet0;
-   $cond31 = ($59|0)==(1);
-   if ($cond31) {
-    $$reg2mem26$0 = $60;
-    continue;
-   } else {
-    label = 16;
-    break;
-   }
-  }
- }
- if ((label|0) == 11) {
-  $$028 = $27;
-  _free(_setjmpTable|0);
-  return ($$028|0);
- }
- else if ((label|0) == 16) {
-  $$028 = 0;
-  _free(_setjmpTable|0);
-  return ($$028|0);
- }
- return (0)|0;
-}
-function _scope_new($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$sink = 0, $$sink2 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0;
- var $116 = 0, $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0;
- var $134 = 0, $135 = 0, $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0;
- var $152 = 0, $153 = 0, $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0;
- var $170 = 0, $171 = 0, $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0, $188 = 0;
- var $189 = 0, $19 = 0, $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0, $197 = 0, $198 = 0, $199 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0, $204 = 0, $205 = 0, $206 = 0;
- var $207 = 0, $208 = 0, $209 = 0, $21 = 0, $210 = 0, $211 = 0, $212 = 0, $213 = 0, $214 = 0, $215 = 0, $216 = 0, $217 = 0, $218 = 0, $219 = 0, $22 = 0, $220 = 0, $221 = 0, $222 = 0, $223 = 0, $224 = 0;
- var $225 = 0, $226 = 0, $227 = 0, $228 = 0, $229 = 0, $23 = 0, $230 = 0, $231 = 0, $232 = 0, $233 = 0, $234 = 0, $235 = 0, $236 = 0, $237 = 0, $238 = 0, $239 = 0, $24 = 0, $240 = 0, $241 = 0, $242 = 0;
- var $243 = 0, $244 = 0, $245 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0;
- var $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0;
- var $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0;
- var $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0;
- var $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $4 = $0;
- $5 = $1;
- $6 = $2;
- $11 = $4;
- $12 = (_mrb_pool_open($11)|0);
- $7 = $12;
- $13 = $7;
- $14 = (_mrb_pool_alloc($13,252)|0);
- $8 = $14;
- $15 = $8;
- $16 = ($15|0)!=(0|0);
- if (!($16)) {
-  $3 = 0;
-  $245 = $3;
-  STACKTOP = sp;return ($245|0);
- }
- $17 = $8;
- _memcpy(($17|0),(74940|0),252)|0;
- $18 = $4;
- $19 = $8;
- HEAP32[$19>>2] = $18;
- $20 = $7;
- $21 = $8;
- $22 = ((($21)) + 4|0);
- HEAP32[$22>>2] = $20;
- $23 = $5;
- $24 = ($23|0)!=(0|0);
- if (!($24)) {
-  $25 = $8;
-  $3 = $25;
-  $245 = $3;
-  STACKTOP = sp;return ($245|0);
- }
- $26 = $5;
- $27 = $8;
- $28 = ((($27)) + 164|0);
- HEAP32[$28>>2] = $26;
- $29 = $8;
- $30 = ((($29)) + 184|0);
- $31 = HEAP16[$30>>1]|0;
- $32 = $31 & -32768;
- $33 = $32 | 32767;
- HEAP16[$30>>1] = $33;
- $34 = $8;
- $35 = ((($34)) + 184|0);
- $36 = HEAP16[$35>>1]|0;
- $37 = $36 & 32767;
- HEAP16[$35>>1] = $37;
- $38 = $4;
- $39 = (_mrb_add_irep($38)|0);
- $40 = $8;
- $41 = ((($40)) + 216|0);
- HEAP32[$41>>2] = $39;
- $42 = $5;
- $43 = $8;
- $44 = ((($43)) + 216|0);
- $45 = HEAP32[$44>>2]|0;
- _scope_add_irep($42,$45);
- $46 = $8;
- $47 = ((($46)) + 228|0);
- HEAP32[$47>>2] = 8;
- $48 = $4;
- $49 = $8;
- $50 = ((($49)) + 228|0);
- $51 = HEAP32[$50>>2]|0;
- $52 = $51<<2;
- $53 = (_mrb_malloc($48,$52)|0);
- $54 = $8;
- $55 = ((($54)) + 216|0);
- $56 = HEAP32[$55>>2]|0;
- $57 = ((($56)) + 20|0);
- HEAP32[$57>>2] = $53;
- $58 = $8;
- $59 = ((($58)) + 212|0);
- HEAP32[$59>>2] = 1024;
- $60 = $4;
- $61 = $8;
- $62 = ((($61)) + 212|0);
- $63 = HEAP32[$62>>2]|0;
- $64 = $63<<2;
- $65 = (_mrb_malloc($60,$64)|0);
- $66 = $8;
- $67 = ((($66)) + 204|0);
- HEAP32[$67>>2] = $65;
- $68 = $8;
- $69 = ((($68)) + 204|0);
- $70 = HEAP32[$69>>2]|0;
- $71 = $8;
- $72 = ((($71)) + 216|0);
- $73 = HEAP32[$72>>2]|0;
- $74 = ((($73)) + 8|0);
- HEAP32[$74>>2] = $70;
- $75 = $8;
- $76 = ((($75)) + 220|0);
- HEAP32[$76>>2] = 32;
- $77 = $4;
- $78 = $8;
- $79 = ((($78)) + 220|0);
- $80 = HEAP32[$79>>2]|0;
- $81 = $80<<3;
- $82 = (_mrb_malloc($77,$81)|0);
- $83 = $8;
- $84 = ((($83)) + 216|0);
- $85 = HEAP32[$84>>2]|0;
- $86 = ((($85)) + 12|0);
- HEAP32[$86>>2] = $82;
- $87 = $8;
- $88 = ((($87)) + 216|0);
- $89 = HEAP32[$88>>2]|0;
- $90 = ((($89)) + 44|0);
- HEAP32[$90>>2] = 0;
- $91 = $8;
- $92 = ((($91)) + 224|0);
- HEAP32[$92>>2] = 256;
- $93 = $4;
- $94 = $8;
- $95 = ((($94)) + 224|0);
- $96 = HEAP32[$95>>2]|0;
- $97 = $96<<2;
- $98 = (_mrb_malloc($93,$97)|0);
- $99 = $8;
- $100 = ((($99)) + 216|0);
- $101 = HEAP32[$100>>2]|0;
- $102 = ((($101)) + 16|0);
- HEAP32[$102>>2] = $98;
- $103 = $8;
- $104 = ((($103)) + 216|0);
- $105 = HEAP32[$104>>2]|0;
- $106 = ((($105)) + 48|0);
- HEAP32[$106>>2] = 0;
- $107 = $6;
- $108 = $8;
- $109 = ((($108)) + 168|0);
- HEAP32[$109>>2] = $107;
- $110 = $6;
- $111 = (_node_len($110)|0);
- $112 = (($111) + 1)|0;
- $113 = $8;
- $114 = ((($113)) + 172|0);
- $115 = HEAP32[$114>>2]|0;
- $116 = (($115) + ($112))|0;
- HEAP32[$114>>2] = $116;
- $117 = $8;
- $118 = ((($117)) + 172|0);
- $119 = HEAP32[$118>>2]|0;
- $120 = $119&65535;
- $121 = $8;
- $122 = ((($121)) + 232|0);
- HEAP16[$122>>1] = $120;
- $123 = $6;
- $124 = ($123|0)!=(0|0);
- L9: do {
-  if ($124) {
-   $125 = $6;
-   $9 = $125;
-   $10 = 0;
-   $126 = $4;
-   $127 = $8;
-   $128 = ((($127)) + 232|0);
-   $129 = HEAP16[$128>>1]|0;
-   $130 = $129&65535;
-   $131 = (($130) - 1)|0;
-   $132 = $131<<3;
-   $133 = (_mrb_malloc($126,$132)|0);
-   $134 = $8;
-   $135 = ((($134)) + 216|0);
-   $136 = HEAP32[$135>>2]|0;
-   $137 = ((($136)) + 24|0);
-   HEAP32[$137>>2] = $133;
-   $10 = 0;
-   $138 = $6;
-   $9 = $138;
-   while(1) {
-    $139 = $9;
-    $140 = ($139|0)!=(0|0);
-    if (!($140)) {
-     break L9;
-    }
-    $141 = $9;
-    $142 = HEAP32[$141>>2]|0;
-    $143 = $142;
-    $144 = $8;
-    $145 = ((($144)) + 216|0);
-    $146 = HEAP32[$145>>2]|0;
-    $147 = ((($146)) + 24|0);
-    $148 = HEAP32[$147>>2]|0;
-    $149 = $10;
-    $150 = (($148) + ($149<<3)|0);
-    HEAP32[$150>>2] = $143;
-    $151 = $9;
-    $152 = HEAP32[$151>>2]|0;
-    $153 = $152;
-    $154 = ($153|0)!=(0);
-    $155 = $8;
-    if ($154) {
-     $156 = $9;
-     $157 = HEAP32[$156>>2]|0;
-     $158 = $157;
-     $159 = (_lv_idx($155,$158)|0);
-     $160 = $159&65535;
-     $161 = $8;
-     $162 = ((($161)) + 216|0);
-     $163 = HEAP32[$162>>2]|0;
-     $164 = ((($163)) + 24|0);
-     $165 = HEAP32[$164>>2]|0;
-     $166 = $10;
-     $167 = (($165) + ($166<<3)|0);
-     $$sink = $160;$$sink2 = $167;
-    } else {
-     $168 = ((($155)) + 216|0);
-     $169 = HEAP32[$168>>2]|0;
-     $170 = ((($169)) + 24|0);
-     $171 = HEAP32[$170>>2]|0;
-     $172 = $10;
-     $173 = (($171) + ($172<<3)|0);
-     $$sink = 0;$$sink2 = $173;
-    }
-    $174 = ((($$sink2)) + 4|0);
-    HEAP16[$174>>1] = $$sink;
-    $175 = $10;
-    $176 = (($175) + 1)|0;
-    $10 = $176;
-    $177 = $9;
-    $178 = ((($177)) + 4|0);
-    $179 = HEAP32[$178>>2]|0;
-    $9 = $179;
-   }
-  }
- } while(0);
- $180 = $4;
- $181 = (_mrb_gc_arena_save($180)|0);
- $182 = $8;
- $183 = ((($182)) + 236|0);
- HEAP32[$183>>2] = $181;
- $184 = $5;
- $185 = ((($184)) + 196|0);
- $186 = HEAP32[$185>>2]|0;
- $187 = $8;
- $188 = ((($187)) + 196|0);
- HEAP32[$188>>2] = $186;
- $189 = $8;
- $190 = ((($189)) + 196|0);
- $191 = HEAP32[$190>>2]|0;
- $192 = ($191|0)!=(0|0);
- if ($192) {
-  $193 = $4;
-  $194 = $8;
-  $195 = ((($194)) + 212|0);
-  $196 = HEAP32[$195>>2]|0;
-  $197 = $196<<1;
-  $198 = (_mrb_malloc($193,$197)|0);
-  $199 = $8;
-  $200 = ((($199)) + 208|0);
-  HEAP32[$200>>2] = $198;
- }
- $201 = $5;
- $202 = ((($201)) + 200|0);
- $203 = HEAP16[$202>>1]|0;
- $204 = $8;
- $205 = ((($204)) + 200|0);
- HEAP16[$205>>1] = $203;
- $206 = $8;
- $207 = ((($206)) + 240|0);
- HEAP32[$207>>2] = 0;
- $208 = $8;
- $209 = ((($208)) + 196|0);
- $210 = HEAP32[$209>>2]|0;
- $211 = ($210|0)!=(0|0);
- if ($211) {
-  $212 = $4;
-  $213 = $8;
-  $214 = ((($213)) + 216|0);
-  $215 = HEAP32[$214>>2]|0;
-  (_mrb_debug_info_alloc($212,$215)|0);
-  $216 = $8;
-  $217 = ((($216)) + 196|0);
-  $218 = HEAP32[$217>>2]|0;
-  $219 = $8;
-  $220 = ((($219)) + 216|0);
-  $221 = HEAP32[$220>>2]|0;
-  $222 = ((($221)) + 28|0);
-  HEAP32[$222>>2] = $218;
-  $223 = $8;
-  $224 = ((($223)) + 208|0);
-  $225 = HEAP32[$224>>2]|0;
-  $226 = $8;
-  $227 = ((($226)) + 216|0);
-  $228 = HEAP32[$227>>2]|0;
-  $229 = ((($228)) + 32|0);
-  HEAP32[$229>>2] = $225;
- } else {
-  $230 = $8;
-  $231 = ((($230)) + 216|0);
-  $232 = HEAP32[$231>>2]|0;
-  $233 = ((($232)) + 36|0);
-  HEAP32[$233>>2] = 0;
- }
- $234 = $5;
- $235 = ((($234)) + 248|0);
- $236 = HEAP32[$235>>2]|0;
- $237 = $8;
- $238 = ((($237)) + 248|0);
- HEAP32[$238>>2] = $236;
- $239 = $5;
- $240 = ((($239)) + 244|0);
- $241 = HEAP16[$240>>1]|0;
- $242 = $8;
- $243 = ((($242)) + 244|0);
- HEAP16[$243>>1] = $241;
- $244 = $8;
- $3 = $244;
- $245 = $3;
- STACKTOP = sp;return ($245|0);
-}
-function _codegen($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$byval_copy = 0, $$byval_copy13 = 0, $$byval_copy14 = 0, $$byval_copy15 = 0, $$byval_copy16 = 0, $$byval_copy17 = 0, $$byval_copy18 = 0, $$byval_copy19 = 0, $$byval_copy20 = 0, $$byval_copy21 = 0, $$byval_copy22 = 0, $$byval_copy23 = 0, $$byval_copy24 = 0, $$byval_copy25 = 0, $$byval_copy26 = 0, $$byval_copy27 = 0, $$byval_copy28 = 0, $$byval_copy29 = 0, $$byval_copy30 = 0, $$sink12 = 0;
- var $10 = 0, $100 = 0, $1000 = 0, $1001 = 0, $1002 = 0, $1003 = 0, $1004 = 0, $1005 = 0, $1006 = 0, $1007 = 0, $1008 = 0, $1009 = 0, $101 = 0.0, $1010 = 0, $1011 = 0, $1012 = 0, $1013 = 0, $1014 = 0, $1015 = 0, $1016 = 0;
- var $1017 = 0, $1018 = 0, $1019 = 0, $102 = 0, $1020 = 0, $1021 = 0, $1022 = 0, $1023 = 0, $1024 = 0, $1025 = 0, $1026 = 0, $1027 = 0, $1028 = 0, $1029 = 0, $103 = 0, $1030 = 0, $1031 = 0, $1032 = 0, $1033 = 0, $1034 = 0;
- var $1035 = 0, $1036 = 0, $1037 = 0, $1038 = 0, $1039 = 0, $104 = 0, $1040 = 0, $1041 = 0, $1042 = 0, $1043 = 0, $1044 = 0, $1045 = 0, $1046 = 0, $1047 = 0, $1048 = 0, $1049 = 0, $105 = 0, $1050 = 0, $1051 = 0, $1052 = 0;
- var $1053 = 0, $1054 = 0, $1055 = 0, $1056 = 0, $1057 = 0, $1058 = 0, $1059 = 0, $106 = 0, $1060 = 0, $1061 = 0, $1062 = 0, $1063 = 0, $1064 = 0, $1065 = 0, $1066 = 0, $1067 = 0, $1068 = 0, $1069 = 0, $107 = 0, $1070 = 0;
- var $1071 = 0, $1072 = 0, $1073 = 0, $1074 = 0, $1075 = 0, $1076 = 0, $1077 = 0, $1078 = 0, $1079 = 0, $108 = 0, $1080 = 0, $1081 = 0, $1082 = 0, $1083 = 0, $1084 = 0, $1085 = 0, $1086 = 0, $1087 = 0, $1088 = 0, $1089 = 0;
- var $109 = 0.0, $1090 = 0, $1091 = 0, $1092 = 0, $1093 = 0, $1094 = 0, $1095 = 0, $1096 = 0, $1097 = 0, $1098 = 0, $1099 = 0, $11 = 0, $110 = 0, $1100 = 0, $1101 = 0, $1102 = 0, $1103 = 0, $1104 = 0, $1105 = 0, $1106 = 0;
- var $1107 = 0, $1108 = 0, $1109 = 0, $111 = 0, $1110 = 0, $1111 = 0, $1112 = 0, $1113 = 0, $1114 = 0, $1115 = 0, $1116 = 0, $1117 = 0, $1118 = 0, $1119 = 0, $112 = 0, $1120 = 0, $1121 = 0, $1122 = 0, $1123 = 0, $1124 = 0;
- var $1125 = 0, $1126 = 0, $1127 = 0, $1128 = 0, $1129 = 0, $113 = 0, $1130 = 0, $1131 = 0, $1132 = 0, $1133 = 0, $1134 = 0, $1135 = 0, $1136 = 0, $1137 = 0, $1138 = 0, $1139 = 0, $114 = 0, $1140 = 0, $1141 = 0, $1142 = 0;
- var $1143 = 0, $1144 = 0, $1145 = 0, $1146 = 0, $1147 = 0, $1148 = 0, $1149 = 0, $115 = 0, $1150 = 0, $1151 = 0, $1152 = 0, $1153 = 0, $1154 = 0, $1155 = 0, $1156 = 0, $1157 = 0, $1158 = 0, $1159 = 0, $116 = 0, $1160 = 0;
- var $1161 = 0, $1162 = 0, $1163 = 0, $1164 = 0, $1165 = 0, $1166 = 0, $1167 = 0, $1168 = 0, $1169 = 0, $117 = 0, $1170 = 0, $1171 = 0, $1172 = 0, $1173 = 0, $1174 = 0, $1175 = 0, $1176 = 0, $1177 = 0, $1178 = 0, $1179 = 0;
- var $118 = 0, $1180 = 0, $1181 = 0, $1182 = 0, $1183 = 0, $1184 = 0, $1185 = 0, $1186 = 0, $1187 = 0, $1188 = 0, $1189 = 0, $119 = 0, $1190 = 0, $1191 = 0, $1192 = 0, $1193 = 0, $1194 = 0, $1195 = 0, $1196 = 0, $1197 = 0;
- var $1198 = 0, $1199 = 0, $12 = 0, $120 = 0, $1200 = 0, $1201 = 0, $1202 = 0, $1203 = 0, $1204 = 0, $1205 = 0, $1206 = 0, $1207 = 0, $1208 = 0, $1209 = 0, $121 = 0, $1210 = 0, $1211 = 0, $1212 = 0, $1213 = 0, $1214 = 0;
- var $1215 = 0, $1216 = 0, $1217 = 0, $1218 = 0, $1219 = 0, $122 = 0, $1220 = 0, $1221 = 0, $1222 = 0, $1223 = 0, $1224 = 0, $1225 = 0, $1226 = 0, $1227 = 0, $1228 = 0, $1229 = 0, $123 = 0, $1230 = 0, $1231 = 0, $1232 = 0;
- var $1233 = 0, $1234 = 0, $1235 = 0, $1236 = 0, $1237 = 0, $1238 = 0, $1239 = 0, $124 = 0, $1240 = 0, $1241 = 0, $1242 = 0, $1243 = 0, $1244 = 0, $1245 = 0, $1246 = 0, $1247 = 0, $1248 = 0, $1249 = 0, $125 = 0, $1250 = 0;
- var $1251 = 0, $1252 = 0, $1253 = 0, $1254 = 0, $1255 = 0, $1256 = 0, $1257 = 0, $1258 = 0, $1259 = 0, $126 = 0, $1260 = 0, $1261 = 0, $1262 = 0, $1263 = 0, $1264 = 0, $1265 = 0, $1266 = 0, $1267 = 0, $1268 = 0, $1269 = 0;
- var $127 = 0, $1270 = 0, $1271 = 0, $1272 = 0, $1273 = 0, $1274 = 0, $1275 = 0, $1276 = 0, $1277 = 0, $1278 = 0, $1279 = 0, $128 = 0, $1280 = 0, $1281 = 0, $1282 = 0, $1283 = 0, $1284 = 0, $1285 = 0, $1286 = 0, $1287 = 0;
- var $1288 = 0, $1289 = 0, $129 = 0, $1290 = 0, $1291 = 0, $1292 = 0, $1293 = 0, $1294 = 0, $1295 = 0, $1296 = 0, $1297 = 0, $1298 = 0, $1299 = 0, $13 = 0, $130 = 0, $1300 = 0, $1301 = 0, $1302 = 0, $1303 = 0, $1304 = 0;
- var $1305 = 0, $1306 = 0, $1307 = 0, $1308 = 0, $1309 = 0, $131 = 0, $1310 = 0, $1311 = 0, $1312 = 0, $1313 = 0, $1314 = 0, $1315 = 0, $1316 = 0, $1317 = 0, $1318 = 0, $1319 = 0, $132 = 0, $1320 = 0, $1321 = 0, $1322 = 0;
- var $1323 = 0, $1324 = 0, $1325 = 0, $1326 = 0, $1327 = 0, $1328 = 0, $1329 = 0, $133 = 0, $1330 = 0, $1331 = 0, $1332 = 0, $1333 = 0, $1334 = 0, $1335 = 0, $1336 = 0, $1337 = 0, $1338 = 0, $1339 = 0, $134 = 0, $1340 = 0;
- var $1341 = 0, $1342 = 0, $1343 = 0, $1344 = 0, $1345 = 0, $1346 = 0, $1347 = 0, $1348 = 0, $1349 = 0, $135 = 0, $1350 = 0, $1351 = 0, $1352 = 0, $1353 = 0, $1354 = 0, $1355 = 0, $1356 = 0, $1357 = 0, $1358 = 0, $1359 = 0;
- var $136 = 0, $1360 = 0, $1361 = 0, $1362 = 0, $1363 = 0, $1364 = 0, $1365 = 0, $1366 = 0, $1367 = 0, $1368 = 0, $1369 = 0, $137 = 0, $1370 = 0, $1371 = 0, $1372 = 0, $1373 = 0, $1374 = 0, $1375 = 0, $1376 = 0, $1377 = 0;
- var $1378 = 0, $1379 = 0, $138 = 0, $1380 = 0, $1381 = 0, $1382 = 0, $1383 = 0, $1384 = 0, $1385 = 0, $1386 = 0, $1387 = 0, $1388 = 0, $1389 = 0, $139 = 0, $1390 = 0, $1391 = 0, $1392 = 0, $1393 = 0, $1394 = 0, $1395 = 0;
- var $1396 = 0, $1397 = 0, $1398 = 0, $1399 = 0, $14 = 0, $140 = 0, $1400 = 0, $1401 = 0, $1402 = 0, $1403 = 0, $1404 = 0, $1405 = 0, $1406 = 0, $1407 = 0, $1408 = 0, $1409 = 0, $141 = 0, $1410 = 0, $1411 = 0, $1412 = 0;
- var $1413 = 0, $1414 = 0, $1415 = 0, $1416 = 0, $1417 = 0, $1418 = 0, $1419 = 0, $142 = 0, $1420 = 0, $1421 = 0, $1422 = 0, $1423 = 0, $1424 = 0, $1425 = 0, $1426 = 0, $1427 = 0, $1428 = 0, $1429 = 0, $143 = 0, $1430 = 0;
- var $1431 = 0, $1432 = 0, $1433 = 0, $1434 = 0, $1435 = 0, $1436 = 0, $1437 = 0, $1438 = 0, $1439 = 0, $144 = 0, $1440 = 0, $1441 = 0, $1442 = 0, $1443 = 0, $1444 = 0, $1445 = 0, $1446 = 0, $1447 = 0, $1448 = 0, $1449 = 0;
- var $145 = 0, $1450 = 0, $1451 = 0, $1452 = 0, $1453 = 0, $1454 = 0, $1455 = 0, $1456 = 0, $1457 = 0, $1458 = 0, $1459 = 0, $146 = 0, $1460 = 0, $1461 = 0, $1462 = 0, $1463 = 0, $1464 = 0, $1465 = 0, $1466 = 0, $1467 = 0;
- var $1468 = 0, $1469 = 0, $147 = 0, $1470 = 0, $1471 = 0, $1472 = 0, $1473 = 0, $1474 = 0, $1475 = 0, $1476 = 0, $1477 = 0, $1478 = 0, $1479 = 0, $148 = 0, $1480 = 0, $1481 = 0, $1482 = 0, $1483 = 0, $1484 = 0, $1485 = 0;
- var $1486 = 0, $1487 = 0, $1488 = 0, $1489 = 0, $149 = 0, $1490 = 0, $1491 = 0, $1492 = 0, $1493 = 0, $1494 = 0, $1495 = 0, $1496 = 0, $1497 = 0, $1498 = 0, $1499 = 0, $15 = 0, $150 = 0, $1500 = 0, $1501 = 0, $1502 = 0;
- var $1503 = 0, $1504 = 0, $1505 = 0, $1506 = 0, $1507 = 0, $1508 = 0, $1509 = 0, $151 = 0, $1510 = 0, $1511 = 0, $1512 = 0, $1513 = 0, $1514 = 0, $1515 = 0, $1516 = 0, $1517 = 0, $1518 = 0, $1519 = 0, $152 = 0, $1520 = 0;
- var $1521 = 0, $1522 = 0, $1523 = 0, $1524 = 0, $1525 = 0, $1526 = 0, $1527 = 0, $1528 = 0, $1529 = 0, $153 = 0, $1530 = 0, $1531 = 0, $1532 = 0, $1533 = 0, $1534 = 0, $1535 = 0, $1536 = 0, $1537 = 0, $1538 = 0, $1539 = 0;
- var $154 = 0, $1540 = 0, $1541 = 0, $1542 = 0, $1543 = 0, $1544 = 0, $1545 = 0, $1546 = 0, $1547 = 0, $1548 = 0, $1549 = 0, $155 = 0, $1550 = 0, $1551 = 0, $1552 = 0, $1553 = 0, $1554 = 0, $1555 = 0, $1556 = 0, $1557 = 0;
- var $1558 = 0, $1559 = 0, $156 = 0, $1560 = 0, $1561 = 0, $1562 = 0, $1563 = 0, $1564 = 0, $1565 = 0, $1566 = 0, $1567 = 0, $1568 = 0, $1569 = 0, $157 = 0, $1570 = 0, $1571 = 0, $1572 = 0, $1573 = 0, $1574 = 0, $1575 = 0;
- var $1576 = 0, $1577 = 0, $1578 = 0, $1579 = 0, $158 = 0, $1580 = 0, $1581 = 0, $1582 = 0, $1583 = 0, $1584 = 0, $1585 = 0, $1586 = 0, $1587 = 0, $1588 = 0, $1589 = 0, $159 = 0, $1590 = 0, $1591 = 0, $1592 = 0, $1593 = 0;
- var $1594 = 0, $1595 = 0, $1596 = 0, $1597 = 0, $1598 = 0, $1599 = 0, $16 = 0, $160 = 0, $1600 = 0, $1601 = 0, $1602 = 0, $1603 = 0, $1604 = 0, $1605 = 0, $1606 = 0, $1607 = 0, $1608 = 0, $1609 = 0, $161 = 0, $1610 = 0;
- var $1611 = 0, $1612 = 0, $1613 = 0, $1614 = 0, $1615 = 0, $1616 = 0, $1617 = 0, $1618 = 0, $1619 = 0, $162 = 0, $1620 = 0, $1621 = 0, $1622 = 0, $1623 = 0, $1624 = 0, $1625 = 0, $1626 = 0, $1627 = 0, $1628 = 0, $1629 = 0;
- var $163 = 0, $1630 = 0, $1631 = 0, $1632 = 0, $1633 = 0, $1634 = 0, $1635 = 0, $1636 = 0, $1637 = 0, $1638 = 0, $1639 = 0, $164 = 0, $1640 = 0, $1641 = 0, $1642 = 0, $1643 = 0, $1644 = 0, $1645 = 0, $1646 = 0, $1647 = 0;
- var $1648 = 0, $1649 = 0, $165 = 0, $1650 = 0, $1651 = 0, $1652 = 0, $1653 = 0, $1654 = 0, $1655 = 0, $1656 = 0, $1657 = 0, $1658 = 0, $1659 = 0, $166 = 0, $1660 = 0, $1661 = 0, $1662 = 0, $1663 = 0, $1664 = 0, $1665 = 0;
- var $1666 = 0, $1667 = 0, $1668 = 0, $1669 = 0, $167 = 0, $1670 = 0, $1671 = 0, $1672 = 0, $1673 = 0, $1674 = 0, $1675 = 0, $1676 = 0, $1677 = 0, $1678 = 0, $1679 = 0, $168 = 0, $1680 = 0, $1681 = 0, $1682 = 0, $1683 = 0;
- var $1684 = 0, $1685 = 0, $1686 = 0, $1687 = 0, $1688 = 0, $1689 = 0, $169 = 0, $1690 = 0, $1691 = 0, $1692 = 0, $1693 = 0, $1694 = 0, $1695 = 0, $1696 = 0, $1697 = 0, $1698 = 0, $1699 = 0, $17 = 0, $170 = 0, $1700 = 0;
- var $1701 = 0, $1702 = 0, $1703 = 0, $1704 = 0, $1705 = 0, $1706 = 0, $1707 = 0, $1708 = 0, $1709 = 0, $171 = 0, $1710 = 0, $1711 = 0, $1712 = 0, $1713 = 0, $1714 = 0, $1715 = 0, $1716 = 0, $1717 = 0, $1718 = 0, $1719 = 0;
- var $172 = 0, $1720 = 0, $1721 = 0, $1722 = 0, $1723 = 0, $1724 = 0, $1725 = 0, $1726 = 0, $1727 = 0, $1728 = 0, $1729 = 0, $173 = 0, $1730 = 0, $1731 = 0, $1732 = 0, $1733 = 0, $1734 = 0, $1735 = 0, $1736 = 0, $1737 = 0;
- var $1738 = 0, $1739 = 0, $174 = 0, $1740 = 0, $1741 = 0, $1742 = 0, $1743 = 0, $1744 = 0, $1745 = 0, $1746 = 0, $1747 = 0, $1748 = 0, $1749 = 0, $175 = 0, $1750 = 0, $1751 = 0, $1752 = 0, $1753 = 0, $1754 = 0, $1755 = 0;
- var $1756 = 0, $1757 = 0, $1758 = 0, $1759 = 0, $176 = 0, $1760 = 0, $1761 = 0, $1762 = 0, $1763 = 0, $1764 = 0, $1765 = 0, $1766 = 0, $1767 = 0, $1768 = 0, $1769 = 0, $177 = 0, $1770 = 0, $1771 = 0, $1772 = 0, $1773 = 0;
- var $1774 = 0, $1775 = 0, $1776 = 0, $1777 = 0, $1778 = 0, $1779 = 0, $178 = 0, $1780 = 0, $1781 = 0, $1782 = 0, $1783 = 0, $1784 = 0, $1785 = 0, $1786 = 0, $1787 = 0, $1788 = 0, $1789 = 0, $179 = 0, $1790 = 0, $1791 = 0;
- var $1792 = 0, $1793 = 0, $1794 = 0, $1795 = 0, $1796 = 0, $1797 = 0, $1798 = 0, $1799 = 0, $18 = 0, $180 = 0, $1800 = 0, $1801 = 0, $1802 = 0, $1803 = 0, $1804 = 0, $1805 = 0, $1806 = 0, $1807 = 0, $1808 = 0, $1809 = 0;
- var $181 = 0, $1810 = 0, $1811 = 0, $1812 = 0, $1813 = 0, $1814 = 0, $1815 = 0, $1816 = 0, $1817 = 0, $1818 = 0, $1819 = 0, $182 = 0, $1820 = 0, $1821 = 0, $1822 = 0, $1823 = 0, $1824 = 0, $1825 = 0, $1826 = 0, $1827 = 0;
- var $1828 = 0, $1829 = 0, $183 = 0, $1830 = 0, $1831 = 0, $1832 = 0, $1833 = 0, $1834 = 0, $1835 = 0, $1836 = 0, $1837 = 0, $1838 = 0, $1839 = 0, $184 = 0, $1840 = 0, $1841 = 0, $1842 = 0, $1843 = 0, $1844 = 0, $1845 = 0;
- var $1846 = 0, $1847 = 0, $1848 = 0, $1849 = 0, $185 = 0, $1850 = 0, $1851 = 0, $1852 = 0, $1853 = 0, $1854 = 0, $1855 = 0, $1856 = 0, $1857 = 0, $1858 = 0, $1859 = 0, $186 = 0, $1860 = 0, $1861 = 0, $1862 = 0, $1863 = 0;
- var $1864 = 0, $1865 = 0, $1866 = 0, $1867 = 0, $1868 = 0, $1869 = 0, $187 = 0, $1870 = 0, $1871 = 0, $1872 = 0, $1873 = 0, $1874 = 0, $1875 = 0, $1876 = 0, $1877 = 0, $1878 = 0, $1879 = 0, $188 = 0, $1880 = 0, $1881 = 0;
- var $1882 = 0, $1883 = 0, $1884 = 0, $1885 = 0, $1886 = 0, $1887 = 0, $1888 = 0, $1889 = 0, $189 = 0, $1890 = 0, $1891 = 0, $1892 = 0, $1893 = 0, $1894 = 0, $1895 = 0, $1896 = 0, $1897 = 0, $1898 = 0, $1899 = 0, $19 = 0;
- var $190 = 0, $1900 = 0, $1901 = 0, $1902 = 0, $1903 = 0, $1904 = 0, $1905 = 0, $1906 = 0, $1907 = 0, $1908 = 0, $1909 = 0, $191 = 0, $1910 = 0, $1911 = 0, $1912 = 0, $1913 = 0, $1914 = 0, $1915 = 0, $1916 = 0, $1917 = 0;
- var $1918 = 0, $1919 = 0, $192 = 0, $1920 = 0, $1921 = 0, $1922 = 0, $1923 = 0, $1924 = 0, $1925 = 0, $1926 = 0, $1927 = 0, $1928 = 0, $1929 = 0, $193 = 0, $1930 = 0, $1931 = 0, $1932 = 0, $1933 = 0, $1934 = 0, $1935 = 0;
- var $1936 = 0, $1937 = 0, $1938 = 0, $1939 = 0, $194 = 0, $1940 = 0, $1941 = 0, $1942 = 0, $1943 = 0, $1944 = 0, $1945 = 0, $1946 = 0, $1947 = 0, $1948 = 0, $1949 = 0, $195 = 0, $1950 = 0, $1951 = 0, $1952 = 0, $1953 = 0;
- var $1954 = 0, $1955 = 0, $1956 = 0, $1957 = 0, $1958 = 0, $1959 = 0, $196 = 0, $1960 = 0, $1961 = 0, $1962 = 0, $1963 = 0, $1964 = 0, $1965 = 0, $1966 = 0, $1967 = 0, $1968 = 0, $1969 = 0, $197 = 0, $1970 = 0, $1971 = 0;
- var $1972 = 0, $1973 = 0, $1974 = 0, $1975 = 0, $1976 = 0, $1977 = 0, $1978 = 0, $1979 = 0, $198 = 0, $1980 = 0, $1981 = 0, $1982 = 0, $1983 = 0, $1984 = 0, $1985 = 0, $1986 = 0, $1987 = 0, $1988 = 0, $1989 = 0, $199 = 0;
- var $1990 = 0, $1991 = 0, $1992 = 0, $1993 = 0, $1994 = 0, $1995 = 0, $1996 = 0, $1997 = 0, $1998 = 0, $1999 = 0, $20 = 0, $200 = 0, $2000 = 0, $2001 = 0, $2002 = 0, $2003 = 0, $2004 = 0, $2005 = 0, $2006 = 0, $2007 = 0;
- var $2008 = 0, $2009 = 0, $201 = 0, $2010 = 0, $2011 = 0, $2012 = 0, $2013 = 0, $2014 = 0, $2015 = 0, $2016 = 0, $2017 = 0, $2018 = 0, $2019 = 0, $202 = 0, $2020 = 0, $2021 = 0, $2022 = 0, $2023 = 0, $2024 = 0, $2025 = 0;
- var $2026 = 0, $2027 = 0, $2028 = 0, $2029 = 0, $203 = 0, $2030 = 0, $2031 = 0, $2032 = 0, $2033 = 0, $2034 = 0, $2035 = 0, $2036 = 0, $2037 = 0, $2038 = 0, $2039 = 0, $204 = 0, $2040 = 0, $2041 = 0, $2042 = 0, $2043 = 0;
- var $2044 = 0, $2045 = 0, $2046 = 0, $2047 = 0, $2048 = 0, $2049 = 0, $205 = 0, $2050 = 0, $2051 = 0, $2052 = 0, $2053 = 0, $2054 = 0, $2055 = 0, $2056 = 0, $2057 = 0, $2058 = 0, $2059 = 0, $206 = 0, $2060 = 0, $2061 = 0;
- var $2062 = 0, $2063 = 0, $2064 = 0, $2065 = 0, $2066 = 0, $2067 = 0, $2068 = 0, $2069 = 0, $207 = 0, $2070 = 0, $2071 = 0, $2072 = 0, $2073 = 0, $2074 = 0, $2075 = 0, $2076 = 0, $2077 = 0, $2078 = 0, $2079 = 0, $208 = 0;
- var $2080 = 0, $2081 = 0, $2082 = 0, $2083 = 0, $2084 = 0, $2085 = 0, $2086 = 0, $2087 = 0, $2088 = 0, $2089 = 0, $209 = 0, $2090 = 0, $2091 = 0, $2092 = 0, $2093 = 0, $2094 = 0, $2095 = 0, $2096 = 0, $2097 = 0, $2098 = 0;
- var $2099 = 0, $21 = 0, $210 = 0, $2100 = 0, $2101 = 0, $2102 = 0, $2103 = 0, $2104 = 0, $2105 = 0, $2106 = 0, $2107 = 0, $2108 = 0, $2109 = 0, $211 = 0, $2110 = 0, $2111 = 0, $2112 = 0, $2113 = 0, $2114 = 0, $2115 = 0;
- var $2116 = 0, $2117 = 0, $2118 = 0, $2119 = 0, $212 = 0, $2120 = 0, $2121 = 0, $2122 = 0, $2123 = 0, $2124 = 0, $2125 = 0, $2126 = 0, $2127 = 0, $2128 = 0, $2129 = 0, $213 = 0, $2130 = 0, $2131 = 0, $2132 = 0, $2133 = 0;
- var $2134 = 0, $2135 = 0, $2136 = 0, $2137 = 0, $2138 = 0, $2139 = 0, $214 = 0, $2140 = 0, $2141 = 0, $2142 = 0, $2143 = 0, $2144 = 0, $2145 = 0, $2146 = 0, $2147 = 0, $2148 = 0, $2149 = 0, $215 = 0, $2150 = 0, $2151 = 0;
- var $2152 = 0, $2153 = 0, $2154 = 0, $2155 = 0, $2156 = 0, $2157 = 0, $2158 = 0, $2159 = 0, $216 = 0, $2160 = 0, $2161 = 0, $2162 = 0, $2163 = 0, $2164 = 0, $2165 = 0, $2166 = 0, $2167 = 0, $2168 = 0, $2169 = 0, $217 = 0;
- var $2170 = 0, $2171 = 0, $2172 = 0, $2173 = 0, $2174 = 0, $2175 = 0, $2176 = 0, $2177 = 0, $2178 = 0, $2179 = 0, $218 = 0, $2180 = 0, $2181 = 0, $2182 = 0, $2183 = 0, $2184 = 0, $2185 = 0, $2186 = 0, $2187 = 0, $2188 = 0;
- var $2189 = 0, $219 = 0, $2190 = 0, $2191 = 0, $2192 = 0, $2193 = 0, $2194 = 0, $2195 = 0, $2196 = 0, $2197 = 0, $2198 = 0, $2199 = 0, $22 = 0, $220 = 0, $2200 = 0, $2201 = 0, $2202 = 0, $2203 = 0, $2204 = 0, $2205 = 0;
- var $2206 = 0, $2207 = 0, $2208 = 0, $2209 = 0, $221 = 0, $2210 = 0, $2211 = 0, $2212 = 0, $2213 = 0, $2214 = 0, $2215 = 0, $2216 = 0, $2217 = 0, $2218 = 0, $2219 = 0, $222 = 0, $2220 = 0, $2221 = 0, $2222 = 0, $2223 = 0;
- var $2224 = 0, $2225 = 0, $2226 = 0, $2227 = 0, $2228 = 0, $2229 = 0, $223 = 0, $2230 = 0, $2231 = 0, $2232 = 0, $2233 = 0, $2234 = 0, $2235 = 0, $2236 = 0, $2237 = 0, $2238 = 0, $2239 = 0, $224 = 0, $2240 = 0, $2241 = 0;
- var $2242 = 0, $2243 = 0, $2244 = 0, $2245 = 0, $2246 = 0, $2247 = 0, $2248 = 0, $2249 = 0, $225 = 0, $2250 = 0, $2251 = 0, $2252 = 0, $2253 = 0, $2254 = 0, $2255 = 0, $2256 = 0, $2257 = 0, $2258 = 0, $2259 = 0, $226 = 0;
- var $2260 = 0, $2261 = 0, $2262 = 0, $2263 = 0, $2264 = 0, $2265 = 0, $2266 = 0, $2267 = 0, $2268 = 0, $2269 = 0, $227 = 0, $2270 = 0, $2271 = 0, $2272 = 0, $2273 = 0, $2274 = 0, $2275 = 0, $2276 = 0, $2277 = 0, $2278 = 0;
- var $2279 = 0, $228 = 0, $2280 = 0, $2281 = 0, $2282 = 0, $2283 = 0, $2284 = 0, $2285 = 0, $2286 = 0, $2287 = 0, $2288 = 0, $2289 = 0, $229 = 0, $2290 = 0, $2291 = 0, $2292 = 0, $2293 = 0, $2294 = 0, $2295 = 0, $2296 = 0;
- var $2297 = 0.0, $2298 = 0, $2299 = 0, $23 = 0, $230 = 0, $2300 = 0, $2301 = 0.0, $2302 = 0.0, $2303 = 0, $2304 = 0, $2305 = 0, $2306 = 0, $2307 = 0, $2308 = 0, $2309 = 0, $231 = 0, $2310 = 0, $2311 = 0, $2312 = 0, $2313 = 0;
- var $2314 = 0, $2315 = 0, $2316 = 0, $2317 = 0, $2318 = 0, $2319 = 0, $232 = 0, $2320 = 0, $2321 = 0, $2322 = 0, $2323 = 0, $2324 = 0, $2325 = 0, $2326 = 0, $2327 = 0, $2328 = 0, $2329 = 0, $233 = 0, $2330 = 0, $2331 = 0;
- var $2332 = 0, $2333 = 0, $2334 = 0, $2335 = 0, $2336 = 0, $2337 = 0, $2338 = 0, $2339 = 0, $234 = 0, $2340 = 0, $2341 = 0, $2342 = 0, $2343 = 0, $2344 = 0, $2345 = 0, $2346 = 0, $2347 = 0, $2348 = 0, $2349 = 0.0, $235 = 0;
- var $2350 = 0, $2351 = 0, $2352 = 0, $2353 = 0.0, $2354 = 0, $2355 = 0, $2356 = 0, $2357 = 0, $2358 = 0, $2359 = 0, $236 = 0, $2360 = 0, $2361 = 0, $2362 = 0, $2363 = 0, $2364 = 0, $2365 = 0, $2366 = 0, $2367 = 0, $2368 = 0;
- var $2369 = 0, $237 = 0, $2370 = 0, $2371 = 0, $2372 = 0, $2373 = 0, $2374 = 0, $2375 = 0, $2376 = 0.0, $2377 = 0, $2378 = 0, $2379 = 0, $238 = 0, $2380 = 0.0, $2381 = 0.0, $2382 = 0, $2383 = 0, $2384 = 0, $2385 = 0, $2386 = 0;
- var $2387 = 0, $2388 = 0, $2389 = 0, $239 = 0, $2390 = 0, $2391 = 0, $2392 = 0, $2393 = 0, $2394 = 0, $2395 = 0, $2396 = 0, $2397 = 0, $2398 = 0, $2399 = 0, $24 = 0, $240 = 0, $2400 = 0, $2401 = 0, $2402 = 0, $2403 = 0;
- var $2404 = 0, $2405 = 0, $2406 = 0, $2407 = 0, $2408 = 0, $2409 = 0, $241 = 0, $2410 = 0, $2411 = 0.0, $2412 = 0, $2413 = 0, $2414 = 0, $2415 = 0.0, $2416 = 0.0, $2417 = 0.0, $2418 = 0, $2419 = 0, $242 = 0, $2420 = 0, $2421 = 0;
- var $2422 = 0, $2423 = 0, $2424 = 0, $2425 = 0, $2426 = 0, $2427 = 0, $2428 = 0, $2429 = 0, $243 = 0, $2430 = 0, $2431 = 0, $2432 = 0, $2433 = 0, $2434 = 0, $2435 = 0, $2436 = 0, $2437 = 0, $2438 = 0, $2439 = 0, $244 = 0;
- var $2440 = 0, $2441 = 0, $2442 = 0, $2443 = 0, $2444 = 0, $2445 = 0, $2446 = 0, $2447 = 0, $2448 = 0, $2449 = 0, $245 = 0, $2450 = 0, $2451 = 0, $2452 = 0, $2453 = 0, $2454 = 0, $2455 = 0, $2456 = 0, $2457 = 0, $2458 = 0;
- var $2459 = 0, $246 = 0, $2460 = 0, $2461 = 0, $2462 = 0, $2463 = 0, $2464 = 0, $2465 = 0, $2466 = 0, $2467 = 0, $2468 = 0, $2469 = 0, $247 = 0, $2470 = 0, $2471 = 0, $2472 = 0, $2473 = 0, $2474 = 0, $2475 = 0, $2476 = 0;
- var $2477 = 0, $2478 = 0, $2479 = 0, $248 = 0, $2480 = 0, $2481 = 0, $2482 = 0, $2483 = 0, $2484 = 0, $2485 = 0, $2486 = 0, $2487 = 0, $2488 = 0, $2489 = 0, $249 = 0, $2490 = 0, $2491 = 0, $2492 = 0, $2493 = 0, $2494 = 0;
- var $2495 = 0, $2496 = 0, $2497 = 0, $2498 = 0, $2499 = 0, $25 = 0, $250 = 0, $2500 = 0, $2501 = 0, $2502 = 0, $2503 = 0, $2504 = 0, $2505 = 0, $2506 = 0, $2507 = 0, $2508 = 0, $2509 = 0, $251 = 0, $2510 = 0, $2511 = 0;
- var $2512 = 0, $2513 = 0, $2514 = 0, $2515 = 0, $2516 = 0, $2517 = 0, $2518 = 0, $2519 = 0, $252 = 0, $2520 = 0, $2521 = 0, $2522 = 0, $2523 = 0, $2524 = 0, $2525 = 0, $2526 = 0, $2527 = 0, $2528 = 0, $2529 = 0, $253 = 0;
- var $2530 = 0, $2531 = 0, $2532 = 0, $2533 = 0, $2534 = 0, $2535 = 0, $2536 = 0, $2537 = 0, $2538 = 0, $2539 = 0, $254 = 0, $2540 = 0, $2541 = 0, $2542 = 0, $2543 = 0, $2544 = 0, $2545 = 0, $2546 = 0, $2547 = 0, $2548 = 0;
- var $2549 = 0, $255 = 0, $2550 = 0, $2551 = 0, $2552 = 0, $2553 = 0, $2554 = 0, $2555 = 0, $2556 = 0, $2557 = 0, $2558 = 0, $2559 = 0, $256 = 0, $2560 = 0, $2561 = 0, $2562 = 0, $2563 = 0, $2564 = 0, $2565 = 0, $2566 = 0;
- var $2567 = 0, $2568 = 0, $2569 = 0, $257 = 0, $2570 = 0, $2571 = 0, $2572 = 0, $2573 = 0, $2574 = 0, $2575 = 0, $2576 = 0, $2577 = 0, $2578 = 0, $2579 = 0, $258 = 0, $2580 = 0, $2581 = 0, $2582 = 0, $2583 = 0, $2584 = 0;
- var $2585 = 0, $2586 = 0, $2587 = 0, $2588 = 0, $2589 = 0, $259 = 0, $2590 = 0, $2591 = 0, $2592 = 0, $2593 = 0, $2594 = 0, $2595 = 0, $2596 = 0, $2597 = 0, $2598 = 0, $2599 = 0, $26 = 0, $260 = 0, $2600 = 0, $2601 = 0;
- var $2602 = 0, $2603 = 0, $2604 = 0, $2605 = 0, $2606 = 0, $2607 = 0, $2608 = 0, $2609 = 0, $261 = 0, $2610 = 0, $2611 = 0, $2612 = 0, $2613 = 0, $2614 = 0, $2615 = 0, $2616 = 0, $2617 = 0, $2618 = 0, $2619 = 0, $262 = 0;
- var $2620 = 0, $2621 = 0, $2622 = 0, $2623 = 0, $2624 = 0, $2625 = 0, $2626 = 0, $2627 = 0, $2628 = 0, $2629 = 0, $263 = 0, $2630 = 0, $2631 = 0, $2632 = 0, $2633 = 0, $2634 = 0, $2635 = 0, $2636 = 0, $2637 = 0, $2638 = 0;
- var $2639 = 0, $264 = 0, $2640 = 0, $2641 = 0, $2642 = 0, $2643 = 0, $2644 = 0, $2645 = 0, $2646 = 0, $2647 = 0, $2648 = 0, $2649 = 0, $265 = 0, $2650 = 0, $2651 = 0, $2652 = 0, $2653 = 0, $2654 = 0, $2655 = 0, $2656 = 0;
- var $2657 = 0, $2658 = 0, $2659 = 0, $266 = 0, $2660 = 0, $2661 = 0, $2662 = 0, $2663 = 0, $2664 = 0, $2665 = 0, $2666 = 0, $2667 = 0, $2668 = 0, $2669 = 0, $267 = 0, $2670 = 0, $2671 = 0, $2672 = 0, $2673 = 0, $2674 = 0;
- var $2675 = 0, $2676 = 0, $2677 = 0, $2678 = 0, $2679 = 0, $268 = 0, $2680 = 0, $2681 = 0, $2682 = 0, $2683 = 0, $2684 = 0, $2685 = 0, $2686 = 0, $2687 = 0, $2688 = 0, $2689 = 0, $269 = 0, $2690 = 0, $2691 = 0, $2692 = 0;
- var $2693 = 0, $2694 = 0, $2695 = 0, $2696 = 0, $2697 = 0, $2698 = 0, $2699 = 0, $27 = 0, $270 = 0, $2700 = 0, $2701 = 0, $2702 = 0, $2703 = 0, $2704 = 0, $2705 = 0, $2706 = 0, $2707 = 0, $2708 = 0, $2709 = 0, $271 = 0;
- var $2710 = 0, $2711 = 0, $2712 = 0, $2713 = 0, $2714 = 0, $2715 = 0, $2716 = 0, $2717 = 0, $2718 = 0, $2719 = 0, $272 = 0, $2720 = 0, $2721 = 0, $2722 = 0, $2723 = 0, $2724 = 0, $2725 = 0, $2726 = 0, $2727 = 0, $2728 = 0;
- var $2729 = 0, $273 = 0, $2730 = 0, $2731 = 0, $2732 = 0, $2733 = 0, $2734 = 0, $2735 = 0, $2736 = 0, $2737 = 0, $2738 = 0, $2739 = 0, $274 = 0, $2740 = 0, $2741 = 0, $2742 = 0, $2743 = 0, $2744 = 0, $2745 = 0, $2746 = 0;
- var $2747 = 0, $2748 = 0, $2749 = 0, $275 = 0, $2750 = 0, $2751 = 0, $2752 = 0, $2753 = 0, $2754 = 0, $2755 = 0, $2756 = 0, $2757 = 0, $2758 = 0, $2759 = 0, $276 = 0, $2760 = 0, $2761 = 0, $2762 = 0, $2763 = 0, $2764 = 0;
- var $2765 = 0, $2766 = 0, $2767 = 0, $2768 = 0, $2769 = 0, $277 = 0, $2770 = 0, $2771 = 0, $2772 = 0, $2773 = 0, $2774 = 0, $2775 = 0, $2776 = 0, $2777 = 0, $2778 = 0, $2779 = 0, $278 = 0, $2780 = 0, $2781 = 0, $2782 = 0;
- var $2783 = 0, $2784 = 0, $2785 = 0, $2786 = 0, $2787 = 0, $2788 = 0, $2789 = 0, $279 = 0, $2790 = 0, $2791 = 0, $2792 = 0, $2793 = 0, $2794 = 0, $2795 = 0, $2796 = 0, $2797 = 0, $2798 = 0, $2799 = 0, $28 = 0, $280 = 0;
- var $2800 = 0, $2801 = 0, $2802 = 0, $2803 = 0, $2804 = 0, $2805 = 0, $2806 = 0, $2807 = 0, $2808 = 0, $2809 = 0, $281 = 0, $2810 = 0, $2811 = 0, $2812 = 0, $2813 = 0, $2814 = 0, $2815 = 0, $2816 = 0, $2817 = 0, $2818 = 0;
- var $2819 = 0, $282 = 0, $2820 = 0, $2821 = 0, $2822 = 0, $2823 = 0, $2824 = 0, $2825 = 0, $2826 = 0, $2827 = 0, $2828 = 0, $2829 = 0, $283 = 0, $2830 = 0, $2831 = 0, $2832 = 0, $2833 = 0, $2834 = 0, $2835 = 0, $2836 = 0;
- var $2837 = 0, $2838 = 0, $2839 = 0, $284 = 0, $2840 = 0, $2841 = 0, $2842 = 0, $2843 = 0, $2844 = 0, $2845 = 0, $2846 = 0, $2847 = 0, $2848 = 0, $2849 = 0, $285 = 0, $2850 = 0, $2851 = 0, $2852 = 0, $2853 = 0, $2854 = 0;
- var $2855 = 0, $2856 = 0, $2857 = 0, $2858 = 0, $2859 = 0, $286 = 0, $2860 = 0, $2861 = 0, $2862 = 0, $2863 = 0, $2864 = 0, $2865 = 0, $2866 = 0, $2867 = 0, $2868 = 0, $2869 = 0, $287 = 0, $2870 = 0, $2871 = 0, $2872 = 0;
- var $2873 = 0, $2874 = 0, $2875 = 0, $2876 = 0, $2877 = 0, $2878 = 0, $2879 = 0, $288 = 0, $2880 = 0, $2881 = 0, $2882 = 0, $2883 = 0, $2884 = 0, $2885 = 0, $2886 = 0, $2887 = 0, $2888 = 0, $2889 = 0, $289 = 0, $2890 = 0;
- var $2891 = 0, $2892 = 0, $2893 = 0, $2894 = 0, $2895 = 0, $2896 = 0, $2897 = 0, $2898 = 0, $2899 = 0, $29 = 0, $290 = 0, $2900 = 0, $2901 = 0, $2902 = 0, $2903 = 0, $2904 = 0, $2905 = 0, $2906 = 0, $2907 = 0, $2908 = 0;
- var $2909 = 0, $291 = 0, $2910 = 0, $2911 = 0, $2912 = 0, $2913 = 0, $2914 = 0, $2915 = 0, $2916 = 0, $2917 = 0, $2918 = 0, $2919 = 0, $292 = 0, $2920 = 0, $2921 = 0, $2922 = 0, $2923 = 0, $2924 = 0, $2925 = 0, $2926 = 0;
- var $2927 = 0, $2928 = 0, $2929 = 0, $293 = 0, $2930 = 0, $2931 = 0, $2932 = 0, $2933 = 0, $2934 = 0, $2935 = 0, $2936 = 0, $2937 = 0, $2938 = 0, $2939 = 0, $294 = 0, $2940 = 0, $2941 = 0, $2942 = 0, $2943 = 0, $2944 = 0;
- var $2945 = 0, $2946 = 0, $2947 = 0, $2948 = 0, $2949 = 0, $295 = 0, $2950 = 0, $2951 = 0, $2952 = 0, $2953 = 0, $2954 = 0, $2955 = 0, $2956 = 0, $2957 = 0, $2958 = 0, $2959 = 0, $296 = 0, $2960 = 0, $2961 = 0, $2962 = 0;
- var $2963 = 0, $2964 = 0, $2965 = 0, $2966 = 0, $2967 = 0, $2968 = 0, $2969 = 0, $297 = 0, $2970 = 0, $2971 = 0, $2972 = 0, $2973 = 0, $2974 = 0, $2975 = 0, $2976 = 0, $2977 = 0, $2978 = 0, $2979 = 0, $298 = 0, $2980 = 0;
- var $2981 = 0, $2982 = 0, $2983 = 0, $2984 = 0, $2985 = 0, $2986 = 0, $2987 = 0, $2988 = 0, $2989 = 0, $299 = 0, $2990 = 0, $2991 = 0, $2992 = 0, $2993 = 0, $2994 = 0, $2995 = 0, $2996 = 0, $2997 = 0, $2998 = 0, $2999 = 0;
- var $3 = 0, $30 = 0, $300 = 0, $3000 = 0, $3001 = 0, $3002 = 0, $3003 = 0, $3004 = 0, $3005 = 0, $3006 = 0, $3007 = 0, $3008 = 0, $3009 = 0, $301 = 0, $3010 = 0, $3011 = 0, $3012 = 0, $3013 = 0, $3014 = 0, $3015 = 0;
- var $3016 = 0, $3017 = 0, $3018 = 0, $3019 = 0, $302 = 0, $3020 = 0, $3021 = 0, $3022 = 0, $3023 = 0, $3024 = 0, $3025 = 0, $3026 = 0, $3027 = 0, $3028 = 0, $3029 = 0, $303 = 0, $3030 = 0, $3031 = 0, $3032 = 0, $3033 = 0;
- var $3034 = 0, $3035 = 0, $3036 = 0, $3037 = 0, $3038 = 0, $3039 = 0, $304 = 0, $3040 = 0, $3041 = 0, $3042 = 0, $3043 = 0, $3044 = 0, $3045 = 0, $3046 = 0, $3047 = 0, $3048 = 0, $3049 = 0, $305 = 0, $3050 = 0, $3051 = 0;
- var $3052 = 0, $3053 = 0, $3054 = 0, $3055 = 0, $3056 = 0, $3057 = 0, $3058 = 0, $3059 = 0, $306 = 0, $3060 = 0, $3061 = 0, $3062 = 0, $3063 = 0, $3064 = 0, $3065 = 0, $3066 = 0, $3067 = 0, $3068 = 0, $3069 = 0, $307 = 0;
- var $3070 = 0, $3071 = 0, $3072 = 0, $3073 = 0, $3074 = 0, $3075 = 0, $3076 = 0, $3077 = 0, $3078 = 0, $3079 = 0, $308 = 0, $3080 = 0, $3081 = 0, $3082 = 0, $3083 = 0, $3084 = 0, $3085 = 0, $3086 = 0, $3087 = 0, $3088 = 0;
- var $3089 = 0, $309 = 0, $3090 = 0, $3091 = 0, $3092 = 0, $3093 = 0, $3094 = 0, $3095 = 0, $3096 = 0, $3097 = 0, $3098 = 0, $3099 = 0, $31 = 0, $310 = 0, $3100 = 0, $3101 = 0, $3102 = 0, $3103 = 0, $3104 = 0, $3105 = 0;
- var $3106 = 0, $3107 = 0, $3108 = 0, $3109 = 0, $311 = 0, $3110 = 0, $3111 = 0, $3112 = 0, $3113 = 0, $3114 = 0, $3115 = 0, $3116 = 0, $3117 = 0, $3118 = 0, $3119 = 0, $312 = 0, $3120 = 0, $3121 = 0, $3122 = 0, $3123 = 0;
- var $3124 = 0, $3125 = 0, $3126 = 0, $3127 = 0, $3128 = 0, $3129 = 0, $313 = 0, $3130 = 0, $3131 = 0, $3132 = 0, $3133 = 0, $3134 = 0, $3135 = 0, $3136 = 0, $3137 = 0, $3138 = 0, $3139 = 0, $314 = 0, $3140 = 0, $3141 = 0;
- var $3142 = 0, $3143 = 0, $3144 = 0, $3145 = 0, $3146 = 0, $3147 = 0, $3148 = 0, $3149 = 0, $315 = 0, $3150 = 0, $3151 = 0, $3152 = 0, $3153 = 0, $3154 = 0, $3155 = 0, $3156 = 0, $3157 = 0, $3158 = 0, $3159 = 0, $316 = 0;
- var $3160 = 0, $3161 = 0, $3162 = 0, $3163 = 0, $3164 = 0, $3165 = 0, $3166 = 0, $3167 = 0, $3168 = 0, $3169 = 0, $317 = 0, $3170 = 0, $3171 = 0, $3172 = 0, $3173 = 0, $3174 = 0, $3175 = 0, $3176 = 0, $3177 = 0, $3178 = 0;
- var $3179 = 0, $318 = 0, $3180 = 0, $3181 = 0, $3182 = 0, $3183 = 0, $3184 = 0, $3185 = 0, $3186 = 0, $3187 = 0, $3188 = 0, $3189 = 0, $319 = 0, $3190 = 0, $3191 = 0, $3192 = 0, $3193 = 0, $3194 = 0, $3195 = 0, $3196 = 0;
- var $3197 = 0, $3198 = 0, $3199 = 0, $32 = 0, $320 = 0, $3200 = 0, $3201 = 0, $3202 = 0, $3203 = 0, $3204 = 0, $3205 = 0, $3206 = 0, $3207 = 0, $3208 = 0, $3209 = 0, $321 = 0, $3210 = 0, $3211 = 0, $3212 = 0, $3213 = 0;
- var $3214 = 0, $3215 = 0, $3216 = 0, $3217 = 0, $3218 = 0, $3219 = 0, $322 = 0, $3220 = 0, $3221 = 0, $3222 = 0, $3223 = 0, $3224 = 0, $3225 = 0, $3226 = 0, $3227 = 0, $3228 = 0, $3229 = 0, $323 = 0, $3230 = 0, $3231 = 0;
- var $3232 = 0, $3233 = 0, $3234 = 0, $3235 = 0, $3236 = 0, $3237 = 0, $3238 = 0, $3239 = 0, $324 = 0, $3240 = 0, $3241 = 0, $3242 = 0, $3243 = 0, $3244 = 0, $3245 = 0, $3246 = 0, $3247 = 0, $3248 = 0, $3249 = 0, $325 = 0;
- var $3250 = 0, $3251 = 0, $3252 = 0, $3253 = 0, $3254 = 0, $3255 = 0, $3256 = 0, $3257 = 0, $3258 = 0, $3259 = 0, $326 = 0, $3260 = 0, $3261 = 0, $3262 = 0, $3263 = 0, $3264 = 0, $3265 = 0, $3266 = 0, $3267 = 0, $3268 = 0;
- var $3269 = 0, $327 = 0, $3270 = 0, $3271 = 0, $3272 = 0, $3273 = 0, $3274 = 0, $3275 = 0, $3276 = 0, $3277 = 0, $3278 = 0, $3279 = 0, $328 = 0, $3280 = 0, $3281 = 0, $3282 = 0, $3283 = 0, $3284 = 0, $3285 = 0, $3286 = 0;
- var $3287 = 0, $3288 = 0, $3289 = 0, $329 = 0, $3290 = 0, $3291 = 0, $3292 = 0, $3293 = 0, $3294 = 0, $3295 = 0, $3296 = 0, $3297 = 0, $3298 = 0, $3299 = 0, $33 = 0, $330 = 0, $3300 = 0, $3301 = 0, $3302 = 0, $3303 = 0;
- var $3304 = 0, $3305 = 0, $3306 = 0, $3307 = 0, $3308 = 0, $3309 = 0, $331 = 0, $3310 = 0, $3311 = 0, $3312 = 0, $3313 = 0, $3314 = 0, $3315 = 0, $3316 = 0, $3317 = 0, $3318 = 0, $3319 = 0, $332 = 0, $3320 = 0, $3321 = 0;
- var $3322 = 0, $3323 = 0, $3324 = 0, $3325 = 0, $3326 = 0, $3327 = 0, $3328 = 0, $3329 = 0, $333 = 0, $3330 = 0, $3331 = 0, $3332 = 0, $3333 = 0, $3334 = 0, $3335 = 0, $3336 = 0, $3337 = 0, $3338 = 0, $3339 = 0, $334 = 0;
- var $3340 = 0, $3341 = 0, $3342 = 0, $3343 = 0, $3344 = 0, $3345 = 0, $3346 = 0, $3347 = 0, $3348 = 0, $3349 = 0, $335 = 0, $3350 = 0, $3351 = 0, $3352 = 0, $3353 = 0, $3354 = 0, $3355 = 0, $3356 = 0, $3357 = 0, $3358 = 0;
- var $3359 = 0, $336 = 0, $3360 = 0, $3361 = 0, $3362 = 0, $3363 = 0, $3364 = 0, $3365 = 0, $3366 = 0, $3367 = 0, $3368 = 0, $3369 = 0, $337 = 0, $3370 = 0, $3371 = 0, $3372 = 0, $3373 = 0, $3374 = 0, $3375 = 0, $3376 = 0;
- var $3377 = 0, $3378 = 0, $3379 = 0, $338 = 0, $3380 = 0, $3381 = 0, $3382 = 0, $3383 = 0, $3384 = 0, $3385 = 0, $3386 = 0, $3387 = 0, $3388 = 0, $3389 = 0, $339 = 0, $3390 = 0, $3391 = 0, $3392 = 0, $3393 = 0, $3394 = 0;
- var $3395 = 0, $3396 = 0, $3397 = 0, $3398 = 0, $3399 = 0, $34 = 0, $340 = 0, $3400 = 0, $3401 = 0, $3402 = 0, $3403 = 0, $3404 = 0, $3405 = 0, $3406 = 0, $3407 = 0, $3408 = 0, $3409 = 0, $341 = 0, $3410 = 0, $3411 = 0;
- var $3412 = 0, $3413 = 0, $3414 = 0, $3415 = 0, $3416 = 0, $3417 = 0, $3418 = 0, $3419 = 0, $342 = 0, $3420 = 0, $3421 = 0, $3422 = 0, $3423 = 0, $3424 = 0, $3425 = 0, $3426 = 0, $3427 = 0, $3428 = 0, $3429 = 0, $343 = 0;
- var $3430 = 0, $3431 = 0, $3432 = 0, $3433 = 0, $3434 = 0, $3435 = 0, $3436 = 0, $3437 = 0, $3438 = 0, $3439 = 0, $344 = 0, $3440 = 0, $3441 = 0, $3442 = 0, $3443 = 0, $3444 = 0, $3445 = 0, $3446 = 0, $3447 = 0, $3448 = 0;
- var $3449 = 0, $345 = 0, $3450 = 0, $3451 = 0, $3452 = 0, $3453 = 0, $3454 = 0, $3455 = 0, $3456 = 0, $3457 = 0, $3458 = 0, $3459 = 0, $346 = 0, $3460 = 0, $3461 = 0, $3462 = 0, $3463 = 0, $3464 = 0, $3465 = 0, $3466 = 0;
- var $3467 = 0, $3468 = 0, $3469 = 0, $347 = 0, $3470 = 0, $3471 = 0, $3472 = 0, $3473 = 0, $3474 = 0, $3475 = 0, $3476 = 0, $3477 = 0, $3478 = 0, $3479 = 0, $348 = 0, $3480 = 0, $3481 = 0, $3482 = 0, $3483 = 0, $3484 = 0;
- var $3485 = 0, $3486 = 0, $3487 = 0, $3488 = 0, $3489 = 0, $349 = 0, $3490 = 0, $3491 = 0, $3492 = 0, $3493 = 0, $3494 = 0, $3495 = 0, $3496 = 0, $3497 = 0, $3498 = 0, $3499 = 0, $35 = 0, $350 = 0, $3500 = 0, $3501 = 0;
- var $3502 = 0, $3503 = 0, $3504 = 0, $3505 = 0, $3506 = 0, $3507 = 0, $3508 = 0, $3509 = 0, $351 = 0, $3510 = 0, $3511 = 0, $3512 = 0, $3513 = 0, $3514 = 0, $3515 = 0, $3516 = 0, $3517 = 0, $3518 = 0, $3519 = 0, $352 = 0;
- var $3520 = 0, $3521 = 0, $3522 = 0, $3523 = 0, $3524 = 0, $3525 = 0, $3526 = 0, $3527 = 0, $3528 = 0, $3529 = 0, $353 = 0, $3530 = 0, $3531 = 0, $3532 = 0, $3533 = 0, $3534 = 0, $3535 = 0, $3536 = 0, $3537 = 0, $3538 = 0;
- var $3539 = 0, $354 = 0, $3540 = 0, $3541 = 0, $3542 = 0, $3543 = 0, $3544 = 0, $3545 = 0, $3546 = 0, $3547 = 0, $3548 = 0, $3549 = 0, $355 = 0, $3550 = 0, $3551 = 0, $3552 = 0, $3553 = 0, $3554 = 0, $3555 = 0, $3556 = 0;
- var $3557 = 0, $3558 = 0, $3559 = 0, $356 = 0, $3560 = 0, $3561 = 0, $3562 = 0, $3563 = 0, $3564 = 0, $3565 = 0, $3566 = 0, $3567 = 0, $3568 = 0, $3569 = 0, $357 = 0, $3570 = 0, $3571 = 0, $3572 = 0, $3573 = 0, $3574 = 0;
- var $3575 = 0, $3576 = 0, $3577 = 0, $3578 = 0, $3579 = 0, $358 = 0, $3580 = 0, $3581 = 0, $3582 = 0, $3583 = 0, $3584 = 0, $3585 = 0, $3586 = 0, $3587 = 0, $3588 = 0, $3589 = 0, $359 = 0, $3590 = 0, $3591 = 0, $3592 = 0;
- var $3593 = 0, $3594 = 0, $3595 = 0, $3596 = 0, $3597 = 0, $3598 = 0, $3599 = 0, $36 = 0, $360 = 0, $3600 = 0, $3601 = 0, $3602 = 0, $3603 = 0, $3604 = 0, $3605 = 0, $3606 = 0, $3607 = 0, $3608 = 0, $3609 = 0, $361 = 0;
- var $3610 = 0, $3611 = 0, $3612 = 0, $3613 = 0, $3614 = 0, $3615 = 0, $3616 = 0, $3617 = 0, $3618 = 0, $3619 = 0, $362 = 0, $3620 = 0, $3621 = 0, $3622 = 0, $3623 = 0, $3624 = 0, $3625 = 0, $3626 = 0, $3627 = 0, $3628 = 0;
- var $3629 = 0, $363 = 0, $3630 = 0, $3631 = 0, $3632 = 0, $3633 = 0, $3634 = 0, $3635 = 0, $3636 = 0, $3637 = 0, $3638 = 0, $3639 = 0, $364 = 0, $3640 = 0, $3641 = 0, $3642 = 0, $3643 = 0, $3644 = 0, $3645 = 0, $3646 = 0;
- var $3647 = 0, $3648 = 0, $3649 = 0, $365 = 0, $3650 = 0, $3651 = 0, $3652 = 0, $3653 = 0, $3654 = 0, $3655 = 0, $3656 = 0, $3657 = 0, $3658 = 0, $366 = 0, $367 = 0, $368 = 0, $369 = 0, $37 = 0, $370 = 0, $371 = 0;
- var $372 = 0, $373 = 0, $374 = 0, $375 = 0, $376 = 0, $377 = 0, $378 = 0, $379 = 0, $38 = 0, $380 = 0, $381 = 0, $382 = 0, $383 = 0, $384 = 0, $385 = 0, $386 = 0, $387 = 0, $388 = 0, $389 = 0, $39 = 0;
- var $390 = 0, $391 = 0, $392 = 0, $393 = 0, $394 = 0, $395 = 0, $396 = 0, $397 = 0, $398 = 0, $399 = 0, $4 = 0, $40 = 0, $400 = 0, $401 = 0, $402 = 0, $403 = 0, $404 = 0, $405 = 0, $406 = 0, $407 = 0;
- var $408 = 0, $409 = 0, $41 = 0, $410 = 0, $411 = 0, $412 = 0, $413 = 0, $414 = 0, $415 = 0, $416 = 0, $417 = 0, $418 = 0, $419 = 0, $42 = 0, $420 = 0, $421 = 0, $422 = 0, $423 = 0, $424 = 0, $425 = 0;
- var $426 = 0, $427 = 0, $428 = 0, $429 = 0, $43 = 0, $430 = 0, $431 = 0, $432 = 0, $433 = 0, $434 = 0, $435 = 0, $436 = 0, $437 = 0, $438 = 0, $439 = 0, $44 = 0, $440 = 0, $441 = 0, $442 = 0, $443 = 0;
- var $444 = 0, $445 = 0, $446 = 0, $447 = 0, $448 = 0, $449 = 0, $45 = 0, $450 = 0, $451 = 0, $452 = 0, $453 = 0, $454 = 0, $455 = 0, $456 = 0, $457 = 0, $458 = 0, $459 = 0, $46 = 0, $460 = 0, $461 = 0;
- var $462 = 0, $463 = 0, $464 = 0, $465 = 0, $466 = 0, $467 = 0, $468 = 0, $469 = 0, $47 = 0, $470 = 0, $471 = 0, $472 = 0, $473 = 0, $474 = 0, $475 = 0, $476 = 0, $477 = 0, $478 = 0, $479 = 0, $48 = 0;
- var $480 = 0, $481 = 0, $482 = 0, $483 = 0, $484 = 0, $485 = 0, $486 = 0, $487 = 0, $488 = 0, $489 = 0, $49 = 0, $490 = 0, $491 = 0, $492 = 0, $493 = 0, $494 = 0, $495 = 0, $496 = 0, $497 = 0, $498 = 0;
- var $499 = 0, $5 = 0, $50 = 0, $500 = 0, $501 = 0, $502 = 0, $503 = 0, $504 = 0, $505 = 0, $506 = 0, $507 = 0, $508 = 0, $509 = 0, $51 = 0, $510 = 0, $511 = 0, $512 = 0, $513 = 0, $514 = 0, $515 = 0;
- var $516 = 0, $517 = 0, $518 = 0, $519 = 0, $52 = 0, $520 = 0, $521 = 0, $522 = 0, $523 = 0, $524 = 0, $525 = 0, $526 = 0, $527 = 0, $528 = 0, $529 = 0, $53 = 0, $530 = 0, $531 = 0, $532 = 0, $533 = 0;
- var $534 = 0, $535 = 0, $536 = 0, $537 = 0, $538 = 0, $539 = 0, $54 = 0, $540 = 0, $541 = 0, $542 = 0, $543 = 0, $544 = 0, $545 = 0, $546 = 0, $547 = 0, $548 = 0, $549 = 0, $55 = 0, $550 = 0, $551 = 0;
- var $552 = 0, $553 = 0, $554 = 0, $555 = 0, $556 = 0, $557 = 0, $558 = 0, $559 = 0, $56 = 0, $560 = 0, $561 = 0, $562 = 0, $563 = 0, $564 = 0, $565 = 0, $566 = 0, $567 = 0, $568 = 0, $569 = 0, $57 = 0;
- var $570 = 0, $571 = 0, $572 = 0, $573 = 0, $574 = 0, $575 = 0, $576 = 0, $577 = 0, $578 = 0, $579 = 0, $58 = 0, $580 = 0, $581 = 0, $582 = 0, $583 = 0, $584 = 0, $585 = 0, $586 = 0, $587 = 0, $588 = 0;
- var $589 = 0, $59 = 0, $590 = 0, $591 = 0, $592 = 0, $593 = 0, $594 = 0, $595 = 0, $596 = 0, $597 = 0, $598 = 0, $599 = 0, $6 = 0, $60 = 0, $600 = 0, $601 = 0, $602 = 0, $603 = 0, $604 = 0, $605 = 0;
- var $606 = 0, $607 = 0, $608 = 0, $609 = 0, $61 = 0, $610 = 0, $611 = 0, $612 = 0, $613 = 0, $614 = 0, $615 = 0, $616 = 0, $617 = 0, $618 = 0, $619 = 0, $62 = 0, $620 = 0, $621 = 0, $622 = 0, $623 = 0;
- var $624 = 0, $625 = 0, $626 = 0, $627 = 0, $628 = 0, $629 = 0, $63 = 0, $630 = 0, $631 = 0, $632 = 0, $633 = 0, $634 = 0, $635 = 0, $636 = 0, $637 = 0, $638 = 0, $639 = 0, $64 = 0, $640 = 0, $641 = 0;
- var $642 = 0, $643 = 0, $644 = 0, $645 = 0, $646 = 0, $647 = 0, $648 = 0, $649 = 0, $65 = 0, $650 = 0, $651 = 0, $652 = 0, $653 = 0, $654 = 0, $655 = 0, $656 = 0, $657 = 0, $658 = 0, $659 = 0, $66 = 0;
- var $660 = 0, $661 = 0, $662 = 0, $663 = 0, $664 = 0, $665 = 0, $666 = 0, $667 = 0, $668 = 0, $669 = 0, $67 = 0, $670 = 0, $671 = 0, $672 = 0, $673 = 0, $674 = 0, $675 = 0, $676 = 0, $677 = 0, $678 = 0;
- var $679 = 0, $68 = 0, $680 = 0, $681 = 0, $682 = 0, $683 = 0, $684 = 0, $685 = 0, $686 = 0, $687 = 0, $688 = 0, $689 = 0, $69 = 0, $690 = 0, $691 = 0, $692 = 0, $693 = 0, $694 = 0, $695 = 0, $696 = 0;
- var $697 = 0, $698 = 0, $699 = 0, $7 = 0, $70 = 0, $700 = 0, $701 = 0, $702 = 0, $703 = 0, $704 = 0, $705 = 0, $706 = 0, $707 = 0, $708 = 0, $709 = 0, $71 = 0, $710 = 0, $711 = 0, $712 = 0, $713 = 0;
- var $714 = 0, $715 = 0, $716 = 0, $717 = 0, $718 = 0, $719 = 0, $72 = 0, $720 = 0, $721 = 0, $722 = 0, $723 = 0, $724 = 0, $725 = 0, $726 = 0, $727 = 0, $728 = 0, $729 = 0, $73 = 0, $730 = 0, $731 = 0;
- var $732 = 0, $733 = 0, $734 = 0, $735 = 0, $736 = 0, $737 = 0, $738 = 0, $739 = 0, $74 = 0, $740 = 0, $741 = 0, $742 = 0, $743 = 0, $744 = 0, $745 = 0, $746 = 0, $747 = 0, $748 = 0, $749 = 0, $75 = 0;
- var $750 = 0, $751 = 0, $752 = 0, $753 = 0, $754 = 0, $755 = 0, $756 = 0, $757 = 0, $758 = 0, $759 = 0, $76 = 0, $760 = 0, $761 = 0, $762 = 0, $763 = 0, $764 = 0, $765 = 0, $766 = 0, $767 = 0, $768 = 0;
- var $769 = 0, $77 = 0, $770 = 0, $771 = 0, $772 = 0, $773 = 0, $774 = 0, $775 = 0, $776 = 0, $777 = 0, $778 = 0, $779 = 0, $78 = 0, $780 = 0, $781 = 0, $782 = 0, $783 = 0, $784 = 0, $785 = 0, $786 = 0;
- var $787 = 0, $788 = 0, $789 = 0, $79 = 0, $790 = 0, $791 = 0, $792 = 0, $793 = 0, $794 = 0, $795 = 0, $796 = 0, $797 = 0, $798 = 0, $799 = 0, $8 = 0, $80 = 0, $800 = 0, $801 = 0, $802 = 0, $803 = 0;
- var $804 = 0, $805 = 0, $806 = 0, $807 = 0, $808 = 0, $809 = 0, $81 = 0, $810 = 0, $811 = 0, $812 = 0, $813 = 0, $814 = 0, $815 = 0, $816 = 0, $817 = 0, $818 = 0, $819 = 0, $82 = 0, $820 = 0, $821 = 0;
- var $822 = 0, $823 = 0, $824 = 0, $825 = 0, $826 = 0, $827 = 0, $828 = 0, $829 = 0, $83 = 0, $830 = 0, $831 = 0, $832 = 0, $833 = 0, $834 = 0, $835 = 0, $836 = 0, $837 = 0, $838 = 0, $839 = 0, $84 = 0;
- var $840 = 0, $841 = 0, $842 = 0, $843 = 0, $844 = 0, $845 = 0, $846 = 0, $847 = 0, $848 = 0, $849 = 0, $85 = 0, $850 = 0, $851 = 0, $852 = 0, $853 = 0, $854 = 0, $855 = 0, $856 = 0, $857 = 0, $858 = 0;
- var $859 = 0, $86 = 0, $860 = 0, $861 = 0, $862 = 0, $863 = 0, $864 = 0, $865 = 0, $866 = 0, $867 = 0, $868 = 0, $869 = 0, $87 = 0, $870 = 0, $871 = 0, $872 = 0, $873 = 0, $874 = 0, $875 = 0, $876 = 0;
- var $877 = 0, $878 = 0, $879 = 0, $88 = 0, $880 = 0, $881 = 0, $882 = 0, $883 = 0, $884 = 0, $885 = 0, $886 = 0, $887 = 0, $888 = 0, $889 = 0, $89 = 0, $890 = 0, $891 = 0, $892 = 0, $893 = 0, $894 = 0;
- var $895 = 0, $896 = 0, $897 = 0, $898 = 0, $899 = 0, $9 = 0, $90 = 0, $900 = 0, $901 = 0, $902 = 0, $903 = 0, $904 = 0, $905 = 0, $906 = 0, $907 = 0, $908 = 0, $909 = 0, $91 = 0.0, $910 = 0, $911 = 0;
- var $912 = 0, $913 = 0, $914 = 0, $915 = 0, $916 = 0, $917 = 0, $918 = 0, $919 = 0, $92 = 0, $920 = 0, $921 = 0, $922 = 0, $923 = 0, $924 = 0, $925 = 0, $926 = 0, $927 = 0, $928 = 0, $929 = 0, $93 = 0;
- var $930 = 0, $931 = 0, $932 = 0, $933 = 0, $934 = 0, $935 = 0, $936 = 0, $937 = 0, $938 = 0, $939 = 0, $94 = 0, $940 = 0, $941 = 0, $942 = 0, $943 = 0, $944 = 0, $945 = 0, $946 = 0, $947 = 0, $948 = 0;
- var $949 = 0, $95 = 0, $950 = 0, $951 = 0, $952 = 0, $953 = 0, $954 = 0, $955 = 0, $956 = 0, $957 = 0, $958 = 0, $959 = 0, $96 = 0, $960 = 0, $961 = 0, $962 = 0, $963 = 0, $964 = 0, $965 = 0, $966 = 0;
- var $967 = 0, $968 = 0, $969 = 0, $97 = 0.0, $970 = 0, $971 = 0, $972 = 0, $973 = 0, $974 = 0, $975 = 0, $976 = 0, $977 = 0, $978 = 0, $979 = 0, $98 = 0, $980 = 0, $981 = 0, $982 = 0, $983 = 0, $984 = 0;
- var $985 = 0, $986 = 0, $987 = 0, $988 = 0, $989 = 0, $99 = 0, $990 = 0, $991 = 0, $992 = 0, $993 = 0, $994 = 0, $995 = 0, $996 = 0, $997 = 0, $998 = 0, $999 = 0, $or$cond = 0, $or$cond11 = 0, $or$cond3 = 0, $or$cond7 = 0;
- var $or$cond9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 944|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(944|0);
- $$byval_copy30 = sp + 920|0;
- $$byval_copy29 = sp + 912|0;
- $$byval_copy28 = sp + 904|0;
- $$byval_copy27 = sp + 896|0;
- $$byval_copy26 = sp + 888|0;
- $$byval_copy25 = sp + 880|0;
- $$byval_copy24 = sp + 872|0;
- $$byval_copy23 = sp + 864|0;
- $$byval_copy22 = sp + 856|0;
- $$byval_copy21 = sp + 848|0;
- $$byval_copy20 = sp + 840|0;
- $$byval_copy19 = sp + 832|0;
- $$byval_copy18 = sp + 824|0;
- $$byval_copy17 = sp + 816|0;
- $$byval_copy16 = sp + 808|0;
- $$byval_copy15 = sp + 800|0;
- $$byval_copy14 = sp + 792|0;
- $$byval_copy13 = sp + 784|0;
- $$byval_copy = sp + 776|0;
- $49 = sp + 588|0;
- $75 = sp + 930|0;
- $76 = sp + 480|0;
- $78 = sp + 464|0;
- $81 = sp + 448|0;
- $82 = sp + 440|0;
- $83 = sp + 432|0;
- $84 = sp + 424|0;
- $85 = sp + 416|0;
- $90 = sp + 929|0;
- $93 = sp + 384|0;
- $95 = sp + 368|0;
- $99 = sp + 344|0;
- $103 = sp + 320|0;
- $108 = sp + 928|0;
- $111 = sp + 288|0;
- $113 = sp + 272|0;
- $119 = sp + 240|0;
- $130 = sp + 192|0;
- $137 = sp + 160|0;
- $139 = sp + 144|0;
- $140 = sp + 136|0;
- $147 = sp + 104|0;
- $149 = sp + 88|0;
- $3 = $0;
- $4 = $1;
- $5 = $2;
- $167 = $4;
- $168 = ($167|0)!=(0|0);
- if (!($168)) {
-  STACKTOP = sp;return;
- }
- $169 = $3;
- $170 = ((($169)) + 216|0);
- $171 = HEAP32[$170>>2]|0;
- $172 = ($171|0)!=(0|0);
- if ($172) {
-  $173 = $3;
-  $174 = ((($173)) + 244|0);
-  $175 = HEAP16[$174>>1]|0;
-  $176 = $175&65535;
-  $177 = $4;
-  $178 = ((($177)) + 10|0);
-  $179 = HEAP16[$178>>1]|0;
-  $180 = $179&65535;
-  $181 = ($176|0)!=($180|0);
-  if ($181) {
-   $182 = $3;
-   $183 = ((($182)) + 248|0);
-   $184 = HEAP32[$183>>2]|0;
-   $185 = $3;
-   $186 = ((($185)) + 244|0);
-   $187 = HEAP16[$186>>1]|0;
-   $188 = (_mrb_parser_get_filename($184,$187)|0);
-   $189 = $3;
-   $190 = ((($189)) + 216|0);
-   $191 = HEAP32[$190>>2]|0;
-   $192 = ((($191)) + 28|0);
-   HEAP32[$192>>2] = $188;
-   $193 = $3;
-   $194 = HEAP32[$193>>2]|0;
-   $195 = $3;
-   $196 = ((($195)) + 216|0);
-   $197 = HEAP32[$196>>2]|0;
-   $198 = $3;
-   $199 = ((($198)) + 240|0);
-   $200 = HEAP32[$199>>2]|0;
-   $201 = $3;
-   $202 = ((($201)) + 176|0);
-   $203 = HEAP32[$202>>2]|0;
-   (_mrb_debug_info_append_file($194,$197,$200,$203)|0);
-   $204 = $3;
-   $205 = ((($204)) + 176|0);
-   $206 = HEAP32[$205>>2]|0;
-   $207 = $3;
-   $208 = ((($207)) + 240|0);
-   HEAP32[$208>>2] = $206;
-   $209 = $4;
-   $210 = ((($209)) + 10|0);
-   $211 = HEAP16[$210>>1]|0;
-   $212 = $3;
-   $213 = ((($212)) + 244|0);
-   HEAP16[$213>>1] = $211;
-   $214 = $3;
-   $215 = ((($214)) + 248|0);
-   $216 = HEAP32[$215>>2]|0;
-   $217 = $4;
-   $218 = ((($217)) + 10|0);
-   $219 = HEAP16[$218>>1]|0;
-   $220 = (_mrb_parser_get_filename($216,$219)|0);
-   $221 = $3;
-   $222 = ((($221)) + 196|0);
-   HEAP32[$222>>2] = $220;
-  }
- }
- $223 = $4;
- $224 = HEAP32[$223>>2]|0;
- $225 = $224;
- $6 = $225;
- $226 = $4;
- $227 = ((($226)) + 8|0);
- $228 = HEAP16[$227>>1]|0;
- $229 = $3;
- $230 = ((($229)) + 200|0);
- HEAP16[$230>>1] = $228;
- $231 = $4;
- $232 = ((($231)) + 4|0);
- $233 = HEAP32[$232>>2]|0;
- $4 = $233;
- $234 = $6;
- do {
-  switch ($234|0) {
-  case 17:  {
-   $235 = $5;
-   $236 = ($235|0)==(0);
-   $237 = $4;
-   $238 = ($237|0)!=(0|0);
-   $or$cond = $236 | $238;
-   if (!($or$cond)) {
-    $239 = $3;
-    $240 = $3;
-    $241 = ((($240)) + 172|0);
-    $242 = HEAP32[$241>>2]|0;
-    $243 = $242 & 511;
-    $244 = $243 << 23;
-    $245 = 5 | $244;
-    (_genop($239,$245)|0);
-    $246 = $3;
-    _push_($246);
-   }
-   while(1) {
-    $247 = $4;
-    $248 = ($247|0)!=(0|0);
-    if (!($248)) {
-     break;
-    }
-    $249 = $3;
-    $250 = $4;
-    $251 = HEAP32[$250>>2]|0;
-    $252 = $4;
-    $253 = ((($252)) + 4|0);
-    $254 = HEAP32[$253>>2]|0;
-    $255 = ($254|0)!=(0|0);
-    $256 = $5;
-    $257 = $255 ? 0 : $256;
-    _codegen($249,$251,$257);
-    $258 = $4;
-    $259 = ((($258)) + 4|0);
-    $260 = HEAP32[$259>>2]|0;
-    $4 = $260;
-   }
-   STACKTOP = sp;return;
-   break;
-  }
-  case 18:  {
-   $261 = $3;
-   $262 = (_genop($261,26)|0);
-   $7 = $262;
-   $263 = $3;
-   $264 = (_loop_push($263,3)|0);
-   $13 = $264;
-   $265 = $7;
-   $266 = $13;
-   $267 = ((($266)) + 4|0);
-   HEAP32[$267>>2] = $265;
-   $268 = $4;
-   $269 = HEAP32[$268>>2]|0;
-   $270 = ($269|0)!=(0|0);
-   if ($270) {
-    $271 = $3;
-    $272 = $4;
-    $273 = HEAP32[$272>>2]|0;
-    $274 = $5;
-    _codegen($271,$273,$274);
-    $275 = $5;
-    $276 = ($275|0)!=(0);
-    if ($276) {
-     $277 = $3;
-     $278 = ((($277)) + 172|0);
-     $279 = HEAP32[$278>>2]|0;
-     $280 = (($279) + -1)|0;
-     HEAP32[$278>>2] = $280;
-    }
-   }
-   $281 = $13;
-   HEAP32[$281>>2] = 4;
-   $282 = $3;
-   $283 = (_genop($282,23)|0);
-   $8 = $283;
-   $284 = $3;
-   $285 = $7;
-   _dispatch($284,$285);
-   $286 = $4;
-   $287 = ((($286)) + 4|0);
-   $288 = HEAP32[$287>>2]|0;
-   $4 = $288;
-   $9 = 0;
-   $10 = 0;
-   $289 = $4;
-   $290 = HEAP32[$289>>2]|0;
-   $291 = ($290|0)!=(0|0);
-   if ($291) {
-    $292 = $4;
-    $293 = HEAP32[$292>>2]|0;
-    $14 = $293;
-    $294 = $3;
-    $295 = ((($294)) + 172|0);
-    $296 = HEAP32[$295>>2]|0;
-    $15 = $296;
-    $297 = $3;
-    $298 = $15;
-    $299 = $298 & 511;
-    $300 = $299 << 23;
-    $301 = 27 | $300;
-    (_genop($297,$301)|0);
-    $302 = $3;
-    _push_($302);
-    while(1) {
-     $303 = $14;
-     $304 = ($303|0)!=(0|0);
-     if (!($304)) {
-      break;
-     }
-     $305 = $14;
-     $306 = HEAP32[$305>>2]|0;
-     $16 = $306;
-     $307 = $16;
-     $308 = HEAP32[$307>>2]|0;
-     $17 = $308;
-     $309 = $10;
-     $310 = ($309|0)!=(0);
-     if ($310) {
-      $311 = $3;
-      $312 = $10;
-      _dispatch($311,$312);
-     }
-     $11 = 0;
-     while(1) {
-      $313 = $17;
-      $314 = ($313|0)!=(0|0);
-      $315 = $3;
-      if ($314) {
-       $316 = $17;
-       $317 = HEAP32[$316>>2]|0;
-       _codegen($315,$317,1);
-      } else {
-       $318 = $3;
-       $319 = ((($318)) + 172|0);
-       $320 = HEAP32[$319>>2]|0;
-       $321 = $320 & 511;
-       $322 = $321 << 23;
-       $323 = 17 | $322;
-       $324 = $3;
-       $325 = $3;
-       $326 = HEAP32[$325>>2]|0;
-       $327 = (_mrb_intern_static($326,69566,13)|0);
-       $328 = (_new_msym($324,$327)|0);
-       $329 = $328 & 65535;
-       $330 = $329 << 7;
-       $331 = $323 | $330;
-       (_genop($315,$331)|0);
-       $332 = $3;
-       _push_($332);
-      }
-      $333 = $3;
-      $334 = $3;
-      $335 = ((($334)) + 172|0);
-      $336 = HEAP32[$335>>2]|0;
-      $337 = $336 & 511;
-      $338 = $337 << 23;
-      $339 = 1 | $338;
-      $340 = $15;
-      $341 = $340 & 511;
-      $342 = $341 << 14;
-      $343 = $339 | $342;
-      (_genop($333,$343)|0);
-      $344 = $3;
-      $345 = ((($344)) + 172|0);
-      $346 = HEAP32[$345>>2]|0;
-      $347 = (($346) + -1)|0;
-      HEAP32[$345>>2] = $347;
-      $348 = $17;
-      $349 = ($348|0)!=(0|0);
-      if ($349) {
-       $350 = $17;
-       $351 = HEAP32[$350>>2]|0;
-       $352 = ($351|0)!=(0|0);
-       if ($352) {
-        $353 = $17;
-        $354 = HEAP32[$353>>2]|0;
-        $355 = HEAP32[$354>>2]|0;
-        $356 = $355;
-        $357 = ($356|0)==(66);
-        if ($357) {
-         $358 = $3;
-         $359 = $3;
-         $360 = ((($359)) + 172|0);
-         $361 = HEAP32[$360>>2]|0;
-         $362 = $361 & 511;
-         $363 = $362 << 23;
-         $364 = 32 | $363;
-         $365 = $3;
-         $366 = $3;
-         $367 = HEAP32[$366>>2]|0;
-         $368 = (_mrb_intern_static($367,69580,10)|0);
-         $369 = (_new_msym($365,$368)|0);
-         $370 = $369 & 511;
-         $371 = $370 << 14;
-         $372 = $364 | $371;
-         $373 = $372 | 128;
-         (_genop($358,$373)|0);
-        } else {
-         label = 26;
-        }
-       } else {
-        label = 26;
-       }
-      } else {
-       label = 26;
-      }
-      if ((label|0) == 26) {
-       label = 0;
-       $374 = $3;
-       $375 = $3;
-       $376 = ((($375)) + 172|0);
-       $377 = HEAP32[$376>>2]|0;
-       $378 = $377 & 511;
-       $379 = $378 << 23;
-       $380 = 32 | $379;
-       $381 = $3;
-       $382 = $3;
-       $383 = HEAP32[$382>>2]|0;
-       $384 = (_mrb_intern_static($383,69591,3)|0);
-       $385 = (_new_msym($381,$384)|0);
-       $386 = $385 & 511;
-       $387 = $386 << 14;
-       $388 = $380 | $387;
-       $389 = $388 | 128;
-       (_genop($374,$389)|0);
-      }
-      $390 = $3;
-      $391 = $3;
-      $392 = ((($391)) + 172|0);
-      $393 = HEAP32[$392>>2]|0;
-      $394 = $393 & 511;
-      $395 = $394 << 23;
-      $396 = 24 | $395;
-      $397 = $11;
-      $398 = (($397) + 32767)|0;
-      $399 = $398 & 65535;
-      $400 = $399 << 7;
-      $401 = $396 | $400;
-      $402 = (_genop($390,$401)|0);
-      $12 = $402;
-      $403 = $12;
-      $11 = $403;
-      $404 = $17;
-      $405 = ($404|0)!=(0|0);
-      if ($405) {
-       $406 = $17;
-       $407 = ((($406)) + 4|0);
-       $408 = HEAP32[$407>>2]|0;
-       $17 = $408;
-      }
-      $409 = $17;
-      $410 = ($409|0)!=(0|0);
-      if (!($410)) {
-       break;
-      }
-     }
-     $411 = $3;
-     $412 = (_genop($411,4194199)|0);
-     $10 = $412;
-     $413 = $3;
-     $414 = $11;
-     _dispatch_linked($413,$414);
-     $415 = $3;
-     $416 = ((($415)) + 172|0);
-     $417 = HEAP32[$416>>2]|0;
-     $418 = (($417) + -1)|0;
-     HEAP32[$416>>2] = $418;
-     $419 = $16;
-     $420 = ((($419)) + 4|0);
-     $421 = HEAP32[$420>>2]|0;
-     $422 = HEAP32[$421>>2]|0;
-     $423 = ($422|0)!=(0|0);
-     if ($423) {
-      $424 = $3;
-      $425 = $16;
-      $426 = ((($425)) + 4|0);
-      $427 = HEAP32[$426>>2]|0;
-      $428 = HEAP32[$427>>2]|0;
-      $429 = $15;
-      _gen_assignment($424,$428,$429,0);
-     }
-     $430 = $16;
-     $431 = ((($430)) + 4|0);
-     $432 = HEAP32[$431>>2]|0;
-     $433 = ((($432)) + 4|0);
-     $434 = HEAP32[$433>>2]|0;
-     $435 = HEAP32[$434>>2]|0;
-     $436 = ($435|0)!=(0|0);
-     if ($436) {
-      $437 = $3;
-      $438 = $16;
-      $439 = ((($438)) + 4|0);
-      $440 = HEAP32[$439>>2]|0;
-      $441 = ((($440)) + 4|0);
-      $442 = HEAP32[$441>>2]|0;
-      $443 = HEAP32[$442>>2]|0;
-      $444 = $5;
-      _codegen($437,$443,$444);
-      $445 = $5;
-      $446 = ($445|0)!=(0);
-      if ($446) {
-       $447 = $3;
-       $448 = ((($447)) + 172|0);
-       $449 = HEAP32[$448>>2]|0;
-       $450 = (($449) + -1)|0;
-       HEAP32[$448>>2] = $450;
-      }
-     }
-     $451 = $3;
-     $452 = $9;
-     $453 = (($452) + 32767)|0;
-     $454 = $453 & 65535;
-     $455 = $454 << 7;
-     $456 = 23 | $455;
-     $457 = (_genop($451,$456)|0);
-     $12 = $457;
-     $458 = $12;
-     $9 = $458;
-     $459 = $14;
-     $460 = ((($459)) + 4|0);
-     $461 = HEAP32[$460>>2]|0;
-     $14 = $461;
-     $462 = $3;
-     _push_($462);
-    }
-    $463 = $10;
-    $464 = ($463|0)!=(0);
-    if ($464) {
-     $465 = $3;
-     $466 = $10;
-     _dispatch($465,$466);
-     $467 = $3;
-     $468 = $15;
-     $469 = $468 & 511;
-     $470 = $469 << 23;
-     $471 = 29 | $470;
-     (_genop($467,$471)|0);
-    }
-   }
-   $472 = $3;
-   $473 = ((($472)) + 172|0);
-   $474 = HEAP32[$473>>2]|0;
-   $475 = (($474) + -1)|0;
-   HEAP32[$473>>2] = $475;
-   $476 = $4;
-   $477 = ((($476)) + 4|0);
-   $478 = HEAP32[$477>>2]|0;
-   $4 = $478;
-   $479 = $3;
-   $480 = $8;
-   _dispatch($479,$480);
-   $481 = $3;
-   (_genop($481,8388636)|0);
-   $482 = $4;
-   $483 = HEAP32[$482>>2]|0;
-   $484 = ($483|0)!=(0|0);
-   if ($484) {
-    $485 = $3;
-    $486 = $4;
-    $487 = HEAP32[$486>>2]|0;
-    $488 = $5;
-    _codegen($485,$487,$488);
-   } else {
-    $489 = $5;
-    $490 = ($489|0)!=(0);
-    if ($490) {
-     $491 = $3;
-     _push_($491);
-    }
-   }
-   $492 = $3;
-   $493 = $9;
-   _dispatch_linked($492,$493);
-   $494 = $3;
-   _loop_pop($494,0);
-   STACKTOP = sp;return;
-   break;
-  }
-  case 19:  {
-   $495 = $3;
-   $496 = ((($495)) + 176|0);
-   $497 = HEAP32[$496>>2]|0;
-   $19 = $497;
-   $498 = $3;
-   (_genop($498,30)|0);
-   $499 = $3;
-   $500 = ((($499)) + 192|0);
-   $501 = HEAP32[$500>>2]|0;
-   $502 = (($501) + 1)|0;
-   HEAP32[$500>>2] = $502;
-   $503 = $3;
-   $504 = $4;
-   $505 = HEAP32[$504>>2]|0;
-   $506 = $5;
-   _codegen($503,$505,$506);
-   $507 = $3;
-   $508 = $4;
-   $509 = ((($508)) + 4|0);
-   $510 = HEAP32[$509>>2]|0;
-   $511 = (_scope_body($507,$510,0)|0);
-   $18 = $511;
-   $512 = $18;
-   $513 = $512 & 65535;
-   $514 = $513 << 7;
-   $515 = 30 | $514;
-   $516 = $3;
-   $517 = ((($516)) + 204|0);
-   $518 = HEAP32[$517>>2]|0;
-   $519 = $19;
-   $520 = (($518) + ($519<<2)|0);
-   HEAP32[$520>>2] = $515;
-   $521 = $3;
-   $522 = ((($521)) + 192|0);
-   $523 = HEAP32[$522>>2]|0;
-   $524 = (($523) + -1)|0;
-   HEAP32[$522>>2] = $524;
-   $525 = $3;
-   (_genop_peep($525,8388639,0)|0);
-   STACKTOP = sp;return;
-   break;
-  }
-  case 53:  {
-   $526 = $3;
-   $527 = $4;
-   $528 = (_lambda_body($526,$527,1)|0);
-   $20 = $528;
-   $529 = $3;
-   $530 = $3;
-   $531 = ((($530)) + 172|0);
-   $532 = HEAP32[$531>>2]|0;
-   $533 = $532 & 511;
-   $534 = $533 << 23;
-   $535 = 64 | $534;
-   $536 = $20;
-   $537 = $536 & 16383;
-   $538 = $537 << 9;
-   $539 = $538 | 384;
-   $540 = $535 | $539;
-   (_genop($529,$540)|0);
-   $541 = $3;
-   _push_($541);
-   STACKTOP = sp;return;
-   break;
-  }
-  case 4:  {
-   $542 = $3;
-   $543 = $4;
-   $544 = (_lambda_body($542,$543,1)|0);
-   $21 = $544;
-   $545 = $3;
-   $546 = $3;
-   $547 = ((($546)) + 172|0);
-   $548 = HEAP32[$547>>2]|0;
-   $549 = $548 & 511;
-   $550 = $549 << 23;
-   $551 = 64 | $550;
-   $552 = $21;
-   $553 = $552 & 16383;
-   $554 = $553 << 9;
-   $555 = $554 | 256;
-   $556 = $551 | $555;
-   (_genop($545,$556)|0);
-   $557 = $3;
-   _push_($557);
-   STACKTOP = sp;return;
-   break;
-  }
-  case 5:  {
-   $558 = $4;
-   $559 = ((($558)) + 4|0);
-   $560 = HEAP32[$559>>2]|0;
-   $561 = ((($560)) + 4|0);
-   $562 = HEAP32[$561>>2]|0;
-   $563 = HEAP32[$562>>2]|0;
-   $24 = $563;
-   $564 = $4;
-   $565 = HEAP32[$564>>2]|0;
-   $566 = HEAP32[$565>>2]|0;
-   $567 = $566;
-   switch ($567|0) {
-   case 55: case 50: case 87:  {
-    $568 = $3;
-    $569 = $4;
-    $570 = ((($569)) + 4|0);
-    $571 = HEAP32[$570>>2]|0;
-    $572 = HEAP32[$571>>2]|0;
-    $573 = $5;
-    _codegen($568,$572,$573);
-    STACKTOP = sp;return;
-    break;
-   }
-   case 86: case 88:  {
-    $574 = $3;
-    $575 = $24;
-    $576 = $5;
-    _codegen($574,$575,$576);
-    STACKTOP = sp;return;
-    break;
-   }
-   default: {
-    $577 = $3;
-    $578 = $4;
-    $579 = HEAP32[$578>>2]|0;
-    _codegen($577,$579,1);
-    $580 = $3;
-    $581 = ((($580)) + 172|0);
-    $582 = HEAP32[$581>>2]|0;
-    $583 = (($582) + -1)|0;
-    HEAP32[$581>>2] = $583;
-    $584 = $3;
-    $585 = $3;
-    $586 = ((($585)) + 172|0);
-    $587 = HEAP32[$586>>2]|0;
-    $588 = $587 & 511;
-    $589 = $588 << 23;
-    $590 = 25 | $589;
-    $591 = $590 | 4194176;
-    $592 = (_genop_peep($584,$591,0)|0);
-    $22 = $592;
-    $593 = $3;
-    $594 = $4;
-    $595 = ((($594)) + 4|0);
-    $596 = HEAP32[$595>>2]|0;
-    $597 = HEAP32[$596>>2]|0;
-    $598 = $5;
-    _codegen($593,$597,$598);
-    $599 = $5;
-    $600 = ($599|0)!=(0);
-    if ($600) {
-     $601 = $4;
-     $602 = ((($601)) + 4|0);
-     $603 = HEAP32[$602>>2]|0;
-     $604 = HEAP32[$603>>2]|0;
-     $605 = ($604|0)!=(0|0);
-     if (!($605)) {
-      $606 = $3;
-      $607 = $3;
-      $608 = ((($607)) + 172|0);
-      $609 = HEAP32[$608>>2]|0;
-      $610 = $609 & 511;
-      $611 = $610 << 23;
-      $612 = 5 | $611;
-      (_genop($606,$612)|0);
-      $613 = $3;
-      _push_($613);
-     }
-    }
-    $614 = $24;
-    $615 = ($614|0)!=(0|0);
-    $616 = $5;
-    $617 = ($616|0)!=(0);
-    if ($615) {
-     if ($617) {
-      $618 = $3;
-      $619 = ((($618)) + 172|0);
-      $620 = HEAP32[$619>>2]|0;
-      $621 = (($620) + -1)|0;
-      HEAP32[$619>>2] = $621;
-     }
-     $622 = $3;
-     $623 = (_genop($622,4194199)|0);
-     $23 = $623;
-     $624 = $3;
-     $625 = $22;
-     _dispatch($624,$625);
-     $626 = $3;
-     $627 = $24;
-     $628 = $5;
-     _codegen($626,$627,$628);
-     $629 = $3;
-     $630 = $23;
-     _dispatch($629,$630);
-     STACKTOP = sp;return;
-    }
-    $631 = $3;
-    if ($617) {
-     $632 = ((($631)) + 172|0);
-     $633 = HEAP32[$632>>2]|0;
-     $634 = (($633) + -1)|0;
-     HEAP32[$632>>2] = $634;
-     $635 = $3;
-     $636 = (_genop($635,4194199)|0);
-     $23 = $636;
-     $637 = $3;
-     $638 = $22;
-     _dispatch($637,$638);
-     $639 = $3;
-     $640 = $3;
-     $641 = ((($640)) + 172|0);
-     $642 = HEAP32[$641>>2]|0;
-     $643 = $642 & 511;
-     $644 = $643 << 23;
-     $645 = 5 | $644;
-     (_genop($639,$645)|0);
-     $646 = $3;
-     $647 = $23;
-     _dispatch($646,$647);
-     $648 = $3;
-     _push_($648);
-     STACKTOP = sp;return;
-    } else {
-     $649 = $22;
-     _dispatch($631,$649);
-     STACKTOP = sp;return;
-    }
-   }
-   }
-   break;
-  }
-  case 20:  {
-   $650 = $3;
-   $651 = $4;
-   $652 = HEAP32[$651>>2]|0;
-   _codegen($650,$652,1);
-   $653 = $3;
-   $654 = ((($653)) + 172|0);
-   $655 = HEAP32[$654>>2]|0;
-   $656 = (($655) + -1)|0;
-   HEAP32[$654>>2] = $656;
-   $657 = $3;
-   $658 = $3;
-   $659 = ((($658)) + 172|0);
-   $660 = HEAP32[$659>>2]|0;
-   $661 = $660 & 511;
-   $662 = $661 << 23;
-   $663 = 25 | $662;
-   $664 = $663 | 4194176;
-   $665 = (_genop($657,$664)|0);
-   $25 = $665;
-   $666 = $3;
-   $667 = $4;
-   $668 = ((($667)) + 4|0);
-   $669 = HEAP32[$668>>2]|0;
-   $670 = $5;
-   _codegen($666,$669,$670);
-   $671 = $3;
-   $672 = $25;
-   _dispatch($671,$672);
-   STACKTOP = sp;return;
-   break;
-  }
-  case 21:  {
-   $673 = $3;
-   $674 = $4;
-   $675 = HEAP32[$674>>2]|0;
-   _codegen($673,$675,1);
-   $676 = $3;
-   $677 = ((($676)) + 172|0);
-   $678 = HEAP32[$677>>2]|0;
-   $679 = (($678) + -1)|0;
-   HEAP32[$677>>2] = $679;
-   $680 = $3;
-   $681 = $3;
-   $682 = ((($681)) + 172|0);
-   $683 = HEAP32[$682>>2]|0;
-   $684 = $683 & 511;
-   $685 = $684 << 23;
-   $686 = 24 | $685;
-   $687 = $686 | 4194176;
-   $688 = (_genop($680,$687)|0);
-   $26 = $688;
-   $689 = $3;
-   $690 = $4;
-   $691 = ((($690)) + 4|0);
-   $692 = HEAP32[$691>>2]|0;
-   $693 = $5;
-   _codegen($689,$692,$693);
-   $694 = $3;
-   $695 = $26;
-   _dispatch($694,$695);
-   STACKTOP = sp;return;
-   break;
-  }
-  case 9:  {
-   $696 = $3;
-   $697 = (_loop_push($696,0)|0);
-   $27 = $697;
-   $698 = $3;
-   $699 = (_genop($698,4194199)|0);
-   $700 = $27;
-   $701 = ((($700)) + 4|0);
-   HEAP32[$701>>2] = $699;
-   $702 = $3;
-   $703 = (_new_label($702)|0);
-   $704 = $27;
-   $705 = ((($704)) + 8|0);
-   HEAP32[$705>>2] = $703;
-   $706 = $3;
-   $707 = $4;
-   $708 = ((($707)) + 4|0);
-   $709 = HEAP32[$708>>2]|0;
-   _codegen($706,$709,0);
-   $710 = $3;
-   $711 = $27;
-   $712 = ((($711)) + 4|0);
-   $713 = HEAP32[$712>>2]|0;
-   _dispatch($710,$713);
-   $714 = $3;
-   $715 = $4;
-   $716 = HEAP32[$715>>2]|0;
-   _codegen($714,$716,1);
-   $717 = $3;
-   $718 = ((($717)) + 172|0);
-   $719 = HEAP32[$718>>2]|0;
-   $720 = (($719) + -1)|0;
-   HEAP32[$718>>2] = $720;
-   $721 = $3;
-   $722 = $3;
-   $723 = ((($722)) + 172|0);
-   $724 = HEAP32[$723>>2]|0;
-   $725 = $724 & 511;
-   $726 = $725 << 23;
-   $727 = 24 | $726;
-   $728 = $27;
-   $729 = ((($728)) + 8|0);
-   $730 = HEAP32[$729>>2]|0;
-   $731 = $3;
-   $732 = ((($731)) + 176|0);
-   $733 = HEAP32[$732>>2]|0;
-   $734 = (($730) - ($733))|0;
-   $735 = (($734) + 32767)|0;
-   $736 = $735 & 65535;
-   $737 = $736 << 7;
-   $738 = $727 | $737;
-   (_genop($721,$738)|0);
-   $739 = $3;
-   $740 = $5;
-   _loop_pop($739,$740);
-   STACKTOP = sp;return;
-   break;
-  }
-  case 10:  {
-   $741 = $3;
-   $742 = (_loop_push($741,0)|0);
-   $28 = $742;
-   $743 = $3;
-   $744 = (_genop($743,4194199)|0);
-   $745 = $28;
-   $746 = ((($745)) + 4|0);
-   HEAP32[$746>>2] = $744;
-   $747 = $3;
-   $748 = (_new_label($747)|0);
-   $749 = $28;
-   $750 = ((($749)) + 8|0);
-   HEAP32[$750>>2] = $748;
-   $751 = $3;
-   $752 = $4;
-   $753 = ((($752)) + 4|0);
-   $754 = HEAP32[$753>>2]|0;
-   _codegen($751,$754,0);
-   $755 = $3;
-   $756 = $28;
-   $757 = ((($756)) + 4|0);
-   $758 = HEAP32[$757>>2]|0;
-   _dispatch($755,$758);
-   $759 = $3;
-   $760 = $4;
-   $761 = HEAP32[$760>>2]|0;
-   _codegen($759,$761,1);
-   $762 = $3;
-   $763 = ((($762)) + 172|0);
-   $764 = HEAP32[$763>>2]|0;
-   $765 = (($764) + -1)|0;
-   HEAP32[$763>>2] = $765;
-   $766 = $3;
-   $767 = $3;
-   $768 = ((($767)) + 172|0);
-   $769 = HEAP32[$768>>2]|0;
-   $770 = $769 & 511;
-   $771 = $770 << 23;
-   $772 = 25 | $771;
-   $773 = $28;
-   $774 = ((($773)) + 8|0);
-   $775 = HEAP32[$774>>2]|0;
-   $776 = $3;
-   $777 = ((($776)) + 176|0);
-   $778 = HEAP32[$777>>2]|0;
-   $779 = (($775) - ($778))|0;
-   $780 = (($779) + 32767)|0;
-   $781 = $780 & 65535;
-   $782 = $781 << 7;
-   $783 = $772 | $782;
-   (_genop($766,$783)|0);
-   $784 = $3;
-   $785 = $5;
-   _loop_pop($784,$785);
-   STACKTOP = sp;return;
-   break;
-  }
-  case 12:  {
-   $786 = $3;
-   $787 = $4;
-   _for_body($786,$787);
-   $788 = $5;
-   $789 = ($788|0)!=(0);
-   if (!($789)) {
-    STACKTOP = sp;return;
-   }
-   $790 = $3;
-   _push_($790);
-   STACKTOP = sp;return;
-   break;
-  }
-  case 6:  {
-   $29 = 0;
-   $32 = 0;
-   $791 = $4;
-   $792 = HEAP32[$791>>2]|0;
-   $793 = ($792|0)!=(0|0);
-   if ($793) {
-    $794 = $3;
-    $795 = ((($794)) + 172|0);
-    $796 = HEAP32[$795>>2]|0;
-    $29 = $796;
-    $797 = $3;
-    $798 = $4;
-    $799 = HEAP32[$798>>2]|0;
-    _codegen($797,$799,1);
-   }
-   $800 = $4;
-   $801 = ((($800)) + 4|0);
-   $802 = HEAP32[$801>>2]|0;
-   $4 = $802;
-   while(1) {
-    $803 = $4;
-    $804 = ($803|0)!=(0|0);
-    if (!($804)) {
-     break;
-    }
-    $805 = $4;
-    $806 = HEAP32[$805>>2]|0;
-    $807 = HEAP32[$806>>2]|0;
-    $34 = $807;
-    $31 = 0;
-    $30 = 0;
-    while(1) {
-     $808 = $34;
-     $809 = ($808|0)!=(0|0);
-     if (!($809)) {
-      break;
-     }
-     $810 = $3;
-     $811 = $34;
-     $812 = HEAP32[$811>>2]|0;
-     _codegen($810,$812,1);
-     $813 = $29;
-     $814 = ($813|0)!=(0);
-     $815 = $3;
-     do {
-      if ($814) {
-       $816 = $3;
-       $817 = ((($816)) + 172|0);
-       $818 = HEAP32[$817>>2]|0;
-       $819 = $818 & 511;
-       $820 = $819 << 23;
-       $821 = 1 | $820;
-       $822 = $29;
-       $823 = $822 & 511;
-       $824 = $823 << 14;
-       $825 = $821 | $824;
-       (_genop($815,$825)|0);
-       $826 = $3;
-       $827 = ((($826)) + 172|0);
-       $828 = HEAP32[$827>>2]|0;
-       $829 = (($828) + -1)|0;
-       HEAP32[$827>>2] = $829;
-       $830 = $34;
-       $831 = HEAP32[$830>>2]|0;
-       $832 = HEAP32[$831>>2]|0;
-       $833 = $832;
-       $834 = ($833|0)==(66);
-       $835 = $3;
-       $836 = $3;
-       $837 = ((($836)) + 172|0);
-       $838 = HEAP32[$837>>2]|0;
-       $839 = $838 & 511;
-       $840 = $839 << 23;
-       $841 = 32 | $840;
-       $842 = $3;
-       $843 = $3;
-       $844 = HEAP32[$843>>2]|0;
-       if ($834) {
-        $845 = (_mrb_intern_static($844,69580,10)|0);
-        $846 = (_new_msym($842,$845)|0);
-        $847 = $846 & 511;
-        $848 = $847 << 14;
-        $849 = $841 | $848;
-        $850 = $849 | 128;
-        (_genop($835,$850)|0);
-        break;
-       } else {
-        $851 = (_mrb_intern_static($844,69591,3)|0);
-        $852 = (_new_msym($842,$851)|0);
-        $853 = $852 & 511;
-        $854 = $853 << 14;
-        $855 = $841 | $854;
-        $856 = $855 | 128;
-        (_genop($835,$856)|0);
-        break;
-       }
-      } else {
-       $857 = ((($815)) + 172|0);
-       $858 = HEAP32[$857>>2]|0;
-       $859 = (($858) + -1)|0;
-       HEAP32[$857>>2] = $859;
-      }
-     } while(0);
-     $860 = $3;
-     $861 = $3;
-     $862 = ((($861)) + 172|0);
-     $863 = HEAP32[$862>>2]|0;
-     $864 = $863 & 511;
-     $865 = $864 << 23;
-     $866 = 24 | $865;
-     $867 = $31;
-     $868 = (($867) + 32767)|0;
-     $869 = $868 & 65535;
-     $870 = $869 << 7;
-     $871 = $866 | $870;
-     $872 = (_genop($860,$871)|0);
-     $33 = $872;
-     $873 = $33;
-     $31 = $873;
-     $874 = $34;
-     $875 = ((($874)) + 4|0);
-     $876 = HEAP32[$875>>2]|0;
-     $34 = $876;
-    }
-    $877 = $4;
-    $878 = HEAP32[$877>>2]|0;
-    $879 = HEAP32[$878>>2]|0;
-    $880 = ($879|0)!=(0|0);
-    if ($880) {
-     $881 = $3;
-     $882 = (_genop($881,4194199)|0);
-     $30 = $882;
-     $883 = $3;
-     $884 = $31;
-     _dispatch_linked($883,$884);
-    }
-    $885 = $3;
-    $886 = $4;
-    $887 = HEAP32[$886>>2]|0;
-    $888 = ((($887)) + 4|0);
-    $889 = HEAP32[$888>>2]|0;
-    $890 = $5;
-    _codegen($885,$889,$890);
-    $891 = $5;
-    $892 = ($891|0)!=(0);
-    if ($892) {
-     $893 = $3;
-     $894 = ((($893)) + 172|0);
-     $895 = HEAP32[$894>>2]|0;
-     $896 = (($895) + -1)|0;
-     HEAP32[$894>>2] = $896;
-    }
-    $897 = $3;
-    $898 = $32;
-    $899 = (($898) + 32767)|0;
-    $900 = $899 & 65535;
-    $901 = $900 << 7;
-    $902 = 23 | $901;
-    $903 = (_genop($897,$902)|0);
-    $33 = $903;
-    $904 = $33;
-    $32 = $904;
-    $905 = $30;
-    $906 = ($905|0)!=(0);
-    if ($906) {
-     $907 = $3;
-     $908 = $30;
-     _dispatch($907,$908);
-    }
-    $909 = $4;
-    $910 = ((($909)) + 4|0);
-    $911 = HEAP32[$910>>2]|0;
-    $4 = $911;
-   }
-   $912 = $5;
-   $913 = ($912|0)!=(0);
-   if ($913) {
-    $914 = $3;
-    $915 = ((($914)) + 172|0);
-    $916 = HEAP32[$915>>2]|0;
-    $35 = $916;
-    $917 = $3;
-    $918 = $3;
-    $919 = ((($918)) + 172|0);
-    $920 = HEAP32[$919>>2]|0;
-    $921 = $920 & 511;
-    $922 = $921 << 23;
-    $923 = 5 | $922;
-    (_genop($917,$923)|0);
-    $924 = $32;
-    $925 = ($924|0)!=(0);
-    if ($925) {
-     $926 = $3;
-     $927 = $32;
-     _dispatch_linked($926,$927);
-    }
-    $928 = $29;
-    $929 = ($928|0)!=(0);
-    if ($929) {
-     $930 = $3;
-     $931 = ((($930)) + 172|0);
-     $932 = HEAP32[$931>>2]|0;
-     $933 = (($932) + -1)|0;
-     HEAP32[$931>>2] = $933;
-    }
-    $934 = $3;
-    $935 = $3;
-    $936 = ((($935)) + 172|0);
-    $937 = HEAP32[$936>>2]|0;
-    $938 = $937 & 511;
-    $939 = $938 << 23;
-    $940 = 1 | $939;
-    $941 = $35;
-    $942 = $941 & 511;
-    $943 = $942 << 14;
-    $944 = $940 | $943;
-    (_genop($934,$944)|0);
-    $945 = $3;
-    _push_($945);
-    STACKTOP = sp;return;
-   } else {
-    $946 = $32;
-    $947 = ($946|0)!=(0);
-    if ($947) {
-     $948 = $3;
-     $949 = $32;
-     _dispatch_linked($948,$949);
-    }
-    $950 = $29;
-    $951 = ($950|0)!=(0);
-    if (!($951)) {
-     STACKTOP = sp;return;
-    }
-    $952 = $3;
-    $953 = ((($952)) + 172|0);
-    $954 = HEAP32[$953>>2]|0;
-    $955 = (($954) + -1)|0;
-    HEAP32[$953>>2] = $955;
-    STACKTOP = sp;return;
-   }
-   break;
-  }
-  case 3:  {
-   $956 = $3;
-   $957 = $4;
-   (_scope_body($956,$957,0)|0);
-   STACKTOP = sp;return;
-   break;
-  }
-  case 29: case 30:  {
-   $958 = $3;
-   $959 = $4;
-   $960 = $5;
-   _gen_call($958,$959,0,0,$960);
-   STACKTOP = sp;return;
-   break;
-  }
-  case 80:  {
-   $961 = $3;
-   $962 = $4;
-   $963 = HEAP32[$962>>2]|0;
-   $964 = $5;
-   _codegen($961,$963,$964);
-   $965 = $3;
-   $966 = $4;
-   $967 = ((($966)) + 4|0);
-   $968 = HEAP32[$967>>2]|0;
-   $969 = $5;
-   _codegen($965,$968,$969);
-   $970 = $5;
-   $971 = ($970|0)!=(0);
-   if (!($971)) {
-    STACKTOP = sp;return;
-   }
-   $972 = $3;
-   $973 = ((($972)) + 172|0);
-   $974 = HEAP32[$973>>2]|0;
-   $975 = (($974) + -1)|0;
-   HEAP32[$973>>2] = $975;
-   $976 = $3;
-   $977 = ((($976)) + 172|0);
-   $978 = HEAP32[$977>>2]|0;
-   $979 = (($978) + -1)|0;
-   HEAP32[$977>>2] = $979;
-   $980 = $3;
-   $981 = $3;
-   $982 = ((($981)) + 172|0);
-   $983 = HEAP32[$982>>2]|0;
-   $984 = $983 & 511;
-   $985 = $984 << 23;
-   $986 = 65 | $985;
-   $987 = $3;
-   $988 = ((($987)) + 172|0);
-   $989 = HEAP32[$988>>2]|0;
-   $990 = $989 & 511;
-   $991 = $990 << 14;
-   $992 = $986 | $991;
-   (_genop($980,$992)|0);
-   $993 = $3;
-   _push_($993);
-   STACKTOP = sp;return;
-   break;
-  }
-  case 81:  {
-   $994 = $3;
-   $995 = $4;
-   $996 = HEAP32[$995>>2]|0;
-   $997 = $5;
-   _codegen($994,$996,$997);
-   $998 = $3;
-   $999 = $4;
-   $1000 = ((($999)) + 4|0);
-   $1001 = HEAP32[$1000>>2]|0;
-   $1002 = $5;
-   _codegen($998,$1001,$1002);
-   $1003 = $5;
-   $1004 = ($1003|0)!=(0);
-   if (!($1004)) {
-    STACKTOP = sp;return;
-   }
-   $1005 = $3;
-   $1006 = ((($1005)) + 172|0);
-   $1007 = HEAP32[$1006>>2]|0;
-   $1008 = (($1007) + -1)|0;
-   HEAP32[$1006>>2] = $1008;
-   $1009 = $3;
-   $1010 = ((($1009)) + 172|0);
-   $1011 = HEAP32[$1010>>2]|0;
-   $1012 = (($1011) + -1)|0;
-   HEAP32[$1010>>2] = $1012;
-   $1013 = $3;
-   $1014 = $3;
-   $1015 = ((($1014)) + 172|0);
-   $1016 = HEAP32[$1015>>2]|0;
-   $1017 = $1016 & 511;
-   $1018 = $1017 << 23;
-   $1019 = 65 | $1018;
-   $1020 = $3;
-   $1021 = ((($1020)) + 172|0);
-   $1022 = HEAP32[$1021>>2]|0;
-   $1023 = $1022 & 511;
-   $1024 = $1023 << 14;
-   $1025 = $1019 | $1024;
-   $1026 = $1025 | 128;
-   (_genop($1013,$1026)|0);
-   $1027 = $3;
-   _push_($1027);
-   STACKTOP = sp;return;
-   break;
-  }
-  case 77:  {
-   $1028 = $3;
-   $1029 = $4;
-   $1030 = ((($1029)) + 4|0);
-   $1031 = HEAP32[$1030>>2]|0;
-   $1032 = $1031;
-   $1033 = (_new_sym_1167($1028,$1032)|0);
-   $36 = $1033;
-   $1034 = $3;
-   $1035 = $4;
-   $1036 = HEAP32[$1035>>2]|0;
-   _codegen($1034,$1036,1);
-   $1037 = $3;
-   $1038 = ((($1037)) + 172|0);
-   $1039 = HEAP32[$1038>>2]|0;
-   $1040 = (($1039) + -1)|0;
-   HEAP32[$1038>>2] = $1040;
-   $1041 = $3;
-   $1042 = $3;
-   $1043 = ((($1042)) + 172|0);
-   $1044 = HEAP32[$1043>>2]|0;
-   $1045 = $1044 & 511;
-   $1046 = $1045 << 23;
-   $1047 = 19 | $1046;
-   $1048 = $36;
-   $1049 = $1048 & 65535;
-   $1050 = $1049 << 7;
-   $1051 = $1047 | $1050;
-   (_genop($1041,$1051)|0);
-   $1052 = $5;
-   $1053 = ($1052|0)!=(0);
-   if (!($1053)) {
-    STACKTOP = sp;return;
-   }
-   $1054 = $3;
-   _push_($1054);
-   STACKTOP = sp;return;
-   break;
-  }
-  case 78:  {
-   $1055 = $3;
-   $1056 = $4;
-   $1057 = $1056;
-   $1058 = (_new_sym_1167($1055,$1057)|0);
-   $37 = $1058;
-   $1059 = $3;
-   $1060 = $3;
-   $1061 = ((($1060)) + 172|0);
-   $1062 = HEAP32[$1061>>2]|0;
-   $1063 = $1062 & 511;
-   $1064 = $1063 << 23;
-   $1065 = 66 | $1064;
-   (_genop($1059,$1065)|0);
-   $1066 = $3;
-   $1067 = $3;
-   $1068 = ((($1067)) + 172|0);
-   $1069 = HEAP32[$1068>>2]|0;
-   $1070 = $1069 & 511;
-   $1071 = $1070 << 23;
-   $1072 = 19 | $1071;
-   $1073 = $37;
-   $1074 = $1073 & 65535;
-   $1075 = $1074 << 7;
-   $1076 = $1072 | $1075;
-   (_genop($1066,$1076)|0);
-   $1077 = $5;
-   $1078 = ($1077|0)!=(0);
-   if (!($1078)) {
-    STACKTOP = sp;return;
-   }
-   $1079 = $3;
-   _push_($1079);
-   STACKTOP = sp;return;
-   break;
-  }
-  case 34:  {
-   $1080 = $3;
-   $1081 = $4;
-   $1082 = $5;
-   $1083 = (_gen_values($1080,$1081,$1082)|0);
-   $38 = $1083;
-   $1084 = $38;
-   $1085 = ($1084|0)>=(0);
-   $1086 = $5;
-   $1087 = ($1086|0)!=(0);
-   if ($1085) {
-    if (!($1087)) {
-     STACKTOP = sp;return;
-    }
-    $1088 = $38;
-    $1089 = $3;
-    $1090 = ((($1089)) + 172|0);
-    $1091 = HEAP32[$1090>>2]|0;
-    $1092 = (($1091) - ($1088))|0;
-    HEAP32[$1090>>2] = $1092;
-    $1093 = $3;
-    $1094 = $3;
-    $1095 = ((($1094)) + 172|0);
-    $1096 = HEAP32[$1095>>2]|0;
-    $1097 = $1096 & 511;
-    $1098 = $1097 << 23;
-    $1099 = 55 | $1098;
-    $1100 = $3;
-    $1101 = ((($1100)) + 172|0);
-    $1102 = HEAP32[$1101>>2]|0;
-    $1103 = $1102 & 511;
-    $1104 = $1103 << 14;
-    $1105 = $1099 | $1104;
-    $1106 = $38;
-    $1107 = $1106 & 127;
-    $1108 = $1107 << 7;
-    $1109 = $1105 | $1108;
-    (_genop($1093,$1109)|0);
-    $1110 = $3;
-    _push_($1110);
-    STACKTOP = sp;return;
-   } else {
-    if (!($1087)) {
-     STACKTOP = sp;return;
-    }
-    $1111 = $3;
-    _push_($1111);
-    STACKTOP = sp;return;
-   }
-   break;
-  }
-  case 36:  {
-   $39 = 0;
-   $40 = 0;
-   while(1) {
-    $1112 = $4;
-    $1113 = ($1112|0)!=(0|0);
-    if (!($1113)) {
-     break;
-    }
-    $1114 = $3;
-    $1115 = $4;
-    $1116 = HEAP32[$1115>>2]|0;
-    $1117 = HEAP32[$1116>>2]|0;
-    $1118 = $5;
-    _codegen($1114,$1117,$1118);
-    $1119 = $3;
-    $1120 = $4;
-    $1121 = HEAP32[$1120>>2]|0;
-    $1122 = ((($1121)) + 4|0);
-    $1123 = HEAP32[$1122>>2]|0;
-    $1124 = $5;
-    _codegen($1119,$1123,$1124);
-    $1125 = $39;
-    $1126 = (($1125) + 1)|0;
-    $39 = $1126;
-    $1127 = $4;
-    $1128 = ((($1127)) + 4|0);
-    $1129 = HEAP32[$1128>>2]|0;
-    $4 = $1129;
-    $1130 = $5;
-    $1131 = ($1130|0)!=(0);
-    $1132 = $39;
-    $1133 = ($1132|0)==(126);
-    $or$cond3 = $1131 & $1133;
-    if (!($or$cond3)) {
-     continue;
-    }
-    $1134 = $39;
-    $1135 = $1134<<1;
-    $1136 = $3;
-    $1137 = ((($1136)) + 172|0);
-    $1138 = HEAP32[$1137>>2]|0;
-    $1139 = (($1138) - ($1135))|0;
-    HEAP32[$1137>>2] = $1139;
-    $1140 = $3;
-    $1141 = $3;
-    $1142 = ((($1141)) + 172|0);
-    $1143 = HEAP32[$1142>>2]|0;
-    $1144 = $1143 & 511;
-    $1145 = $1144 << 23;
-    $1146 = 63 | $1145;
-    $1147 = $3;
-    $1148 = ((($1147)) + 172|0);
-    $1149 = HEAP32[$1148>>2]|0;
-    $1150 = $1149 & 511;
-    $1151 = $1150 << 14;
-    $1152 = $1146 | $1151;
-    $1153 = $39;
-    $1154 = $1153 & 127;
-    $1155 = $1154 << 7;
-    $1156 = $1152 | $1155;
-    (_genop($1140,$1156)|0);
-    $1157 = $40;
-    $1158 = ($1157<<24>>24)!=(0);
-    if ($1158) {
-     $1159 = $3;
-     $1160 = ((($1159)) + 172|0);
-     $1161 = HEAP32[$1160>>2]|0;
-     $1162 = (($1161) + -1)|0;
-     HEAP32[$1160>>2] = $1162;
-     $1163 = $3;
-     $1164 = $3;
-     $1165 = ((($1164)) + 172|0);
-     $1166 = HEAP32[$1165>>2]|0;
-     $1167 = $1166 & 511;
-     $1168 = $1167 << 23;
-     $1169 = 32 | $1168;
-     $1170 = $3;
-     $1171 = $3;
-     $1172 = HEAP32[$1171>>2]|0;
-     $1173 = (_mrb_intern_static($1172,69595,8)|0);
-     $1174 = (_new_msym($1170,$1173)|0);
-     $1175 = $1174 & 511;
-     $1176 = $1175 << 14;
-     $1177 = $1169 | $1176;
-     $1178 = $1177 | 128;
-     (_genop($1163,$1178)|0);
-    }
-    $1179 = $3;
-    _push_($1179);
-    $40 = 1;
-    $39 = 0;
-   }
-   $1180 = $5;
-   $1181 = ($1180|0)!=(0);
-   if (!($1181)) {
-    STACKTOP = sp;return;
-   }
-   $1182 = $39;
-   $1183 = $1182<<1;
-   $1184 = $3;
-   $1185 = ((($1184)) + 172|0);
-   $1186 = HEAP32[$1185>>2]|0;
-   $1187 = (($1186) - ($1183))|0;
-   HEAP32[$1185>>2] = $1187;
-   $1188 = $3;
-   $1189 = $3;
-   $1190 = ((($1189)) + 172|0);
-   $1191 = HEAP32[$1190>>2]|0;
-   $1192 = $1191 & 511;
-   $1193 = $1192 << 23;
-   $1194 = 63 | $1193;
-   $1195 = $3;
-   $1196 = ((($1195)) + 172|0);
-   $1197 = HEAP32[$1196>>2]|0;
-   $1198 = $1197 & 511;
-   $1199 = $1198 << 14;
-   $1200 = $1194 | $1199;
-   $1201 = $39;
-   $1202 = $1201 & 127;
-   $1203 = $1202 << 7;
-   $1204 = $1200 | $1203;
-   (_genop($1188,$1204)|0);
-   $1205 = $40;
-   $1206 = ($1205<<24>>24)!=(0);
-   if ($1206) {
-    $1207 = $3;
-    $1208 = ((($1207)) + 172|0);
-    $1209 = HEAP32[$1208>>2]|0;
-    $1210 = (($1209) + -1)|0;
-    HEAP32[$1208>>2] = $1210;
-    $1211 = $3;
-    $1212 = $3;
-    $1213 = ((($1212)) + 172|0);
-    $1214 = HEAP32[$1213>>2]|0;
-    $1215 = $1214 & 511;
-    $1216 = $1215 << 23;
-    $1217 = 32 | $1216;
-    $1218 = $3;
-    $1219 = $3;
-    $1220 = HEAP32[$1219>>2]|0;
-    $1221 = (_mrb_intern_static($1220,69595,8)|0);
-    $1222 = (_new_msym($1218,$1221)|0);
-    $1223 = $1222 & 511;
-    $1224 = $1223 << 14;
-    $1225 = $1217 | $1224;
-    $1226 = $1225 | 128;
-    (_genop($1211,$1226)|0);
-   }
-   $1227 = $3;
-   _push_($1227);
-   STACKTOP = sp;return;
-   break;
-  }
-  case 66:  {
-   $1228 = $3;
-   $1229 = $4;
-   _codegen($1228,$1229,1);
-   STACKTOP = sp;return;
-   break;
-  }
-  case 24:  {
-   $1230 = $3;
-   $1231 = $4;
-   $1232 = ((($1231)) + 4|0);
-   $1233 = HEAP32[$1232>>2]|0;
-   _codegen($1230,$1233,1);
-   $1234 = $3;
-   $1235 = ((($1234)) + 172|0);
-   $1236 = HEAP32[$1235>>2]|0;
-   $1237 = (($1236) + -1)|0;
-   HEAP32[$1235>>2] = $1237;
-   $1238 = $3;
-   $1239 = $4;
-   $1240 = HEAP32[$1239>>2]|0;
-   $1241 = $3;
-   $1242 = ((($1241)) + 172|0);
-   $1243 = HEAP32[$1242>>2]|0;
-   $1244 = $5;
-   _gen_assignment($1238,$1240,$1243,$1244);
-   STACKTOP = sp;return;
-   break;
-  }
-  case 23:  {
-   $41 = 0;
-   $42 = 0;
-   $43 = 0;
-   $1245 = $4;
-   $1246 = ((($1245)) + 4|0);
-   $1247 = HEAP32[$1246>>2]|0;
-   $44 = $1247;
-   $1248 = $3;
-   $1249 = ((($1248)) + 172|0);
-   $1250 = HEAP32[$1249>>2]|0;
-   $46 = $1250;
-   $1251 = $44;
-   $1252 = HEAP32[$1251>>2]|0;
-   $1253 = $1252;
-   $1254 = ($1253|0)==(34);
-   if ($1254) {
-    $1255 = $44;
-    $1256 = ((($1255)) + 4|0);
-    $1257 = HEAP32[$1256>>2]|0;
-    $1258 = (_nosplat($1257)|0);
-    $1259 = $1258&255;
-    $1260 = ($1259|0)!=(0);
-    if ($1260) {
-     $1261 = $44;
-     $1262 = ((($1261)) + 4|0);
-     $1263 = HEAP32[$1262>>2]|0;
-     $44 = $1263;
-     while(1) {
-      $1264 = $44;
-      $1265 = ($1264|0)!=(0|0);
-      if (!($1265)) {
-       break;
-      }
-      $1266 = $3;
-      $1267 = $44;
-      $1268 = HEAP32[$1267>>2]|0;
-      _codegen($1266,$1268,1);
-      $1269 = $41;
-      $1270 = (($1269) + 1)|0;
-      $41 = $1270;
-      $1271 = $44;
-      $1272 = ((($1271)) + 4|0);
-      $1273 = HEAP32[$1272>>2]|0;
-      $44 = $1273;
-     }
-     $1274 = $4;
-     $1275 = HEAP32[$1274>>2]|0;
-     $4 = $1275;
-     $1276 = $4;
-     $1277 = HEAP32[$1276>>2]|0;
-     $1278 = ($1277|0)!=(0|0);
-     L213: do {
-      if ($1278) {
-       $1279 = $4;
-       $1280 = HEAP32[$1279>>2]|0;
-       $44 = $1280;
-       $42 = 0;
-       while(1) {
-        $1281 = $44;
-        $1282 = ($1281|0)!=(0|0);
-        if (!($1282)) {
-         break L213;
-        }
-        $1283 = $3;
-        $1284 = $44;
-        $1285 = HEAP32[$1284>>2]|0;
-        $1286 = $46;
-        $1287 = $42;
-        $1288 = (($1286) + ($1287))|0;
-        _gen_assignment($1283,$1285,$1288,0);
-        $1289 = $42;
-        $1290 = (($1289) + 1)|0;
-        $42 = $1290;
-        $1291 = $44;
-        $1292 = ((($1291)) + 4|0);
-        $1293 = HEAP32[$1292>>2]|0;
-        $44 = $1293;
-       }
-      }
-     } while(0);
-     $1294 = $4;
-     $1295 = ((($1294)) + 4|0);
-     $1296 = HEAP32[$1295>>2]|0;
-     $44 = $1296;
-     $1297 = $44;
-     $1298 = ($1297|0)!=(0|0);
-     L219: do {
-      if ($1298) {
-       $1299 = $44;
-       $1300 = ((($1299)) + 4|0);
-       $1301 = HEAP32[$1300>>2]|0;
-       $1302 = ($1301|0)!=(0|0);
-       L221: do {
-        if ($1302) {
-         $1303 = $44;
-         $1304 = ((($1303)) + 4|0);
-         $1305 = HEAP32[$1304>>2]|0;
-         $1306 = HEAP32[$1305>>2]|0;
-         $45 = $1306;
-         while(1) {
-          $1307 = $45;
-          $1308 = ($1307|0)!=(0|0);
-          if (!($1308)) {
-           break L221;
-          }
-          $1309 = $43;
-          $1310 = (($1309) + 1)|0;
-          $43 = $1310;
-          $1311 = $45;
-          $1312 = ((($1311)) + 4|0);
-          $1313 = HEAP32[$1312>>2]|0;
-          $45 = $1313;
-         }
-        }
-       } while(0);
-       $1314 = $44;
-       $1315 = HEAP32[$1314>>2]|0;
-       $1316 = ($1315|0)!=(0|0);
-       if ($1316) {
-        $1317 = $41;
-        $1318 = $43;
-        $1319 = $42;
-        $1320 = (($1318) + ($1319))|0;
-        $1321 = ($1317|0)<($1320|0);
-        if ($1321) {
-         $47 = 0;
-        } else {
-         $1322 = $41;
-         $1323 = $43;
-         $1324 = (($1322) - ($1323))|0;
-         $1325 = $42;
-         $1326 = (($1324) - ($1325))|0;
-         $47 = $1326;
-        }
-        $1327 = $3;
-        $1328 = $3;
-        $1329 = ((($1328)) + 172|0);
-        $1330 = HEAP32[$1329>>2]|0;
-        $1331 = $1330 & 511;
-        $1332 = $1331 << 23;
-        $1333 = 55 | $1332;
-        $1334 = $46;
-        $1335 = $42;
-        $1336 = (($1334) + ($1335))|0;
-        $1337 = $1336 & 511;
-        $1338 = $1337 << 14;
-        $1339 = $1333 | $1338;
-        $1340 = $47;
-        $1341 = $1340 & 127;
-        $1342 = $1341 << 7;
-        $1343 = $1339 | $1342;
-        (_genop($1327,$1343)|0);
-        $1344 = $3;
-        $1345 = $44;
-        $1346 = HEAP32[$1345>>2]|0;
-        $1347 = $3;
-        $1348 = ((($1347)) + 172|0);
-        $1349 = HEAP32[$1348>>2]|0;
-        _gen_assignment($1344,$1346,$1349,0);
-        $1350 = $47;
-        $1351 = $42;
-        $1352 = (($1351) + ($1350))|0;
-        $42 = $1352;
-       }
-       $1353 = $44;
-       $1354 = ((($1353)) + 4|0);
-       $1355 = HEAP32[$1354>>2]|0;
-       $1356 = ($1355|0)!=(0|0);
-       if ($1356) {
-        $1357 = $44;
-        $1358 = ((($1357)) + 4|0);
-        $1359 = HEAP32[$1358>>2]|0;
-        $1360 = HEAP32[$1359>>2]|0;
-        $1361 = ($1360|0)!=(0|0);
-        if ($1361) {
-         $1362 = $44;
-         $1363 = ((($1362)) + 4|0);
-         $1364 = HEAP32[$1363>>2]|0;
-         $1365 = HEAP32[$1364>>2]|0;
-         $44 = $1365;
-         while(1) {
-          $1366 = $42;
-          $1367 = $41;
-          $1368 = ($1366|0)<($1367|0);
-          if (!($1368)) {
-           break L219;
-          }
-          $1369 = $3;
-          $1370 = $44;
-          $1371 = HEAP32[$1370>>2]|0;
-          $1372 = $46;
-          $1373 = $42;
-          $1374 = (($1372) + ($1373))|0;
-          _gen_assignment($1369,$1371,$1374,0);
-          $1375 = $44;
-          $1376 = ((($1375)) + 4|0);
-          $1377 = HEAP32[$1376>>2]|0;
-          $44 = $1377;
-          $1378 = $42;
-          $1379 = (($1378) + 1)|0;
-          $42 = $1379;
-         }
-        }
-       }
-      }
-     } while(0);
-     $1380 = $41;
-     $1381 = $3;
-     $1382 = ((($1381)) + 172|0);
-     $1383 = HEAP32[$1382>>2]|0;
-     $1384 = (($1383) - ($1380))|0;
-     HEAP32[$1382>>2] = $1384;
-     $1385 = $5;
-     $1386 = ($1385|0)!=(0);
-     if (!($1386)) {
-      STACKTOP = sp;return;
-     }
-     $1387 = $3;
-     $1388 = $46;
-     $1389 = $1388 & 511;
-     $1390 = $1389 << 23;
-     $1391 = 55 | $1390;
-     $1392 = $46;
-     $1393 = $1392 & 511;
-     $1394 = $1393 << 14;
-     $1395 = $1391 | $1394;
-     $1396 = $41;
-     $1397 = $1396 & 127;
-     $1398 = $1397 << 7;
-     $1399 = $1395 | $1398;
-     (_genop($1387,$1399)|0);
-     $1400 = $3;
-     _push_($1400);
-     STACKTOP = sp;return;
-    }
-   }
-   $1401 = $3;
-   $1402 = $44;
-   _codegen($1401,$1402,1);
-   $1403 = $3;
-   $1404 = $4;
-   $1405 = HEAP32[$1404>>2]|0;
-   $1406 = $46;
-   $1407 = $5;
-   _gen_vmassignment($1403,$1405,$1406,$1407);
-   $1408 = $5;
-   $1409 = ($1408|0)!=(0);
-   if ($1409) {
-    STACKTOP = sp;return;
-   }
-   $1410 = $3;
-   $1411 = ((($1410)) + 172|0);
-   $1412 = HEAP32[$1411>>2]|0;
-   $1413 = (($1412) + -1)|0;
-   HEAP32[$1411>>2] = $1413;
-   STACKTOP = sp;return;
-   break;
-  }
-  case 28:  {
-   $1414 = $4;
-   $1415 = ((($1414)) + 4|0);
-   $1416 = HEAP32[$1415>>2]|0;
-   $1417 = HEAP32[$1416>>2]|0;
-   $1418 = $1417;
-   $48 = $1418;
-   $1419 = $3;
-   $1420 = HEAP32[$1419>>2]|0;
-   $1421 = $48;
-   $1422 = (_mrb_sym2name_len($1420,$1421,$49)|0);
-   $50 = $1422;
-   $1423 = $3;
-   $1424 = $4;
-   $1425 = HEAP32[$1424>>2]|0;
-   _codegen($1423,$1425,1);
-   $1426 = HEAP32[$49>>2]|0;
-   $1427 = ($1426|0)==(2);
-   do {
-    if ($1427) {
-     $1428 = $50;
-     $1429 = HEAP8[$1428>>0]|0;
-     $1430 = $1429 << 24 >> 24;
-     $1431 = ($1430|0)==(124);
-     if ($1431) {
-      $1432 = $50;
-      $1433 = ((($1432)) + 1|0);
-      $1434 = HEAP8[$1433>>0]|0;
-      $1435 = $1434 << 24 >> 24;
-      $1436 = ($1435|0)==(124);
-      if (!($1436)) {
-       label = 152;
-      }
-     } else {
-      label = 152;
-     }
-     if ((label|0) == 152) {
-      $1437 = $50;
-      $1438 = HEAP8[$1437>>0]|0;
-      $1439 = $1438 << 24 >> 24;
-      $1440 = ($1439|0)==(38);
-      if (!($1440)) {
-       break;
-      }
-      $1441 = $50;
-      $1442 = ((($1441)) + 1|0);
-      $1443 = HEAP8[$1442>>0]|0;
-      $1444 = $1443 << 24 >> 24;
-      $1445 = ($1444|0)==(38);
-      if (!($1445)) {
-       break;
-      }
-     }
-     $1446 = $3;
-     $1447 = ((($1446)) + 172|0);
-     $1448 = HEAP32[$1447>>2]|0;
-     $1449 = (($1448) + -1)|0;
-     HEAP32[$1447>>2] = $1449;
-     $1450 = $3;
-     $1451 = $50;
-     $1452 = HEAP8[$1451>>0]|0;
-     $1453 = $1452 << 24 >> 24;
-     $1454 = ($1453|0)==(124);
-     $1455 = $1454 ? 24 : 25;
-     $1456 = $1455 & 127;
-     $1457 = $3;
-     $1458 = ((($1457)) + 172|0);
-     $1459 = HEAP32[$1458>>2]|0;
-     $1460 = $1459 & 511;
-     $1461 = $1460 << 23;
-     $1462 = $1456 | $1461;
-     $1463 = $1462 | 4194176;
-     $1464 = (_genop_peep($1450,$1463,0)|0);
-     $52 = $1464;
-     $1465 = $3;
-     $1466 = $4;
-     $1467 = ((($1466)) + 4|0);
-     $1468 = HEAP32[$1467>>2]|0;
-     $1469 = ((($1468)) + 4|0);
-     $1470 = HEAP32[$1469>>2]|0;
-     $1471 = HEAP32[$1470>>2]|0;
-     _codegen($1465,$1471,1);
-     $1472 = $3;
-     $1473 = ((($1472)) + 172|0);
-     $1474 = HEAP32[$1473>>2]|0;
-     $1475 = (($1474) + -1)|0;
-     HEAP32[$1473>>2] = $1475;
-     $1476 = $3;
-     $1477 = $4;
-     $1478 = HEAP32[$1477>>2]|0;
-     $1479 = $3;
-     $1480 = ((($1479)) + 172|0);
-     $1481 = HEAP32[$1480>>2]|0;
-     $1482 = $5;
-     _gen_assignment($1476,$1478,$1481,$1482);
-     $1483 = $3;
-     $1484 = $52;
-     _dispatch($1483,$1484);
-     STACKTOP = sp;return;
-    }
-   } while(0);
-   $1485 = $3;
-   $1486 = $4;
-   $1487 = ((($1486)) + 4|0);
-   $1488 = HEAP32[$1487>>2]|0;
-   $1489 = ((($1488)) + 4|0);
-   $1490 = HEAP32[$1489>>2]|0;
-   $1491 = HEAP32[$1490>>2]|0;
-   _codegen($1485,$1491,1);
-   $1492 = $3;
-   _push_($1492);
-   $1493 = $3;
-   $1494 = ((($1493)) + 172|0);
-   $1495 = HEAP32[$1494>>2]|0;
-   $1496 = (($1495) + -1)|0;
-   HEAP32[$1494>>2] = $1496;
-   $1497 = $3;
-   $1498 = ((($1497)) + 172|0);
-   $1499 = HEAP32[$1498>>2]|0;
-   $1500 = (($1499) + -1)|0;
-   HEAP32[$1498>>2] = $1500;
-   $1501 = $3;
-   $1502 = ((($1501)) + 172|0);
-   $1503 = HEAP32[$1502>>2]|0;
-   $1504 = (($1503) + -1)|0;
-   HEAP32[$1502>>2] = $1504;
-   $1505 = $3;
-   $1506 = $48;
-   $1507 = (_new_msym($1505,$1506)|0);
-   $51 = $1507;
-   $1508 = HEAP32[$49>>2]|0;
-   $1509 = ($1508|0)==(1);
-   if ($1509) {
-    $1510 = $50;
-    $1511 = HEAP8[$1510>>0]|0;
-    $1512 = $1511 << 24 >> 24;
-    $1513 = ($1512|0)==(43);
-    if ($1513) {
-     $1514 = $3;
-     $1515 = $3;
-     $1516 = ((($1515)) + 172|0);
-     $1517 = HEAP32[$1516>>2]|0;
-     $1518 = $1517 & 511;
-     $1519 = $1518 << 23;
-     $1520 = 44 | $1519;
-     $1521 = $51;
-     $1522 = $1521 & 511;
-     $1523 = $1522 << 14;
-     $1524 = $1520 | $1523;
-     $1525 = $1524 | 128;
-     $1526 = $5;
-     (_genop_peep($1514,$1525,$1526)|0);
-    } else {
-     label = 158;
-    }
-   } else {
-    label = 158;
-   }
-   do {
-    if ((label|0) == 158) {
-     $1527 = HEAP32[$49>>2]|0;
-     $1528 = ($1527|0)==(1);
-     if ($1528) {
-      $1529 = $50;
-      $1530 = HEAP8[$1529>>0]|0;
-      $1531 = $1530 << 24 >> 24;
-      $1532 = ($1531|0)==(45);
-      if ($1532) {
-       $1533 = $3;
-       $1534 = $3;
-       $1535 = ((($1534)) + 172|0);
-       $1536 = HEAP32[$1535>>2]|0;
-       $1537 = $1536 & 511;
-       $1538 = $1537 << 23;
-       $1539 = 46 | $1538;
-       $1540 = $51;
-       $1541 = $1540 & 511;
-       $1542 = $1541 << 14;
-       $1543 = $1539 | $1542;
-       $1544 = $1543 | 128;
-       $1545 = $5;
-       (_genop_peep($1533,$1544,$1545)|0);
-       break;
-      }
-     }
-     $1546 = HEAP32[$49>>2]|0;
-     $1547 = ($1546|0)==(1);
-     if ($1547) {
-      $1548 = $50;
-      $1549 = HEAP8[$1548>>0]|0;
-      $1550 = $1549 << 24 >> 24;
-      $1551 = ($1550|0)==(42);
-      if ($1551) {
-       $1552 = $3;
-       $1553 = $3;
-       $1554 = ((($1553)) + 172|0);
-       $1555 = HEAP32[$1554>>2]|0;
-       $1556 = $1555 & 511;
-       $1557 = $1556 << 23;
-       $1558 = 48 | $1557;
-       $1559 = $51;
-       $1560 = $1559 & 511;
-       $1561 = $1560 << 14;
-       $1562 = $1558 | $1561;
-       $1563 = $1562 | 128;
-       (_genop($1552,$1563)|0);
-       break;
-      }
-     }
-     $1564 = HEAP32[$49>>2]|0;
-     $1565 = ($1564|0)==(1);
-     if ($1565) {
-      $1566 = $50;
-      $1567 = HEAP8[$1566>>0]|0;
-      $1568 = $1567 << 24 >> 24;
-      $1569 = ($1568|0)==(47);
-      if ($1569) {
-       $1570 = $3;
-       $1571 = $3;
-       $1572 = ((($1571)) + 172|0);
-       $1573 = HEAP32[$1572>>2]|0;
-       $1574 = $1573 & 511;
-       $1575 = $1574 << 23;
-       $1576 = 49 | $1575;
-       $1577 = $51;
-       $1578 = $1577 & 511;
-       $1579 = $1578 << 14;
-       $1580 = $1576 | $1579;
-       $1581 = $1580 | 128;
-       (_genop($1570,$1581)|0);
-       break;
-      }
-     }
-     $1582 = HEAP32[$49>>2]|0;
-     $1583 = ($1582|0)==(1);
-     if ($1583) {
-      $1584 = $50;
-      $1585 = HEAP8[$1584>>0]|0;
-      $1586 = $1585 << 24 >> 24;
-      $1587 = ($1586|0)==(60);
-      if ($1587) {
-       $1588 = $3;
-       $1589 = $3;
-       $1590 = ((($1589)) + 172|0);
-       $1591 = HEAP32[$1590>>2]|0;
-       $1592 = $1591 & 511;
-       $1593 = $1592 << 23;
-       $1594 = 51 | $1593;
-       $1595 = $51;
-       $1596 = $1595 & 511;
-       $1597 = $1596 << 14;
-       $1598 = $1594 | $1597;
-       $1599 = $1598 | 128;
-       (_genop($1588,$1599)|0);
-       break;
-      }
-     }
-     $1600 = HEAP32[$49>>2]|0;
-     $1601 = ($1600|0)==(2);
-     if ($1601) {
-      $1602 = $50;
-      $1603 = HEAP8[$1602>>0]|0;
-      $1604 = $1603 << 24 >> 24;
-      $1605 = ($1604|0)==(60);
-      if ($1605) {
-       $1606 = $50;
-       $1607 = ((($1606)) + 1|0);
-       $1608 = HEAP8[$1607>>0]|0;
-       $1609 = $1608 << 24 >> 24;
-       $1610 = ($1609|0)==(61);
-       if ($1610) {
-        $1611 = $3;
-        $1612 = $3;
-        $1613 = ((($1612)) + 172|0);
-        $1614 = HEAP32[$1613>>2]|0;
-        $1615 = $1614 & 511;
-        $1616 = $1615 << 23;
-        $1617 = 52 | $1616;
-        $1618 = $51;
-        $1619 = $1618 & 511;
-        $1620 = $1619 << 14;
-        $1621 = $1617 | $1620;
-        $1622 = $1621 | 128;
-        (_genop($1611,$1622)|0);
-        break;
-       }
-      }
-     }
-     $1623 = HEAP32[$49>>2]|0;
-     $1624 = ($1623|0)==(1);
-     if ($1624) {
-      $1625 = $50;
-      $1626 = HEAP8[$1625>>0]|0;
-      $1627 = $1626 << 24 >> 24;
-      $1628 = ($1627|0)==(62);
-      if ($1628) {
-       $1629 = $3;
-       $1630 = $3;
-       $1631 = ((($1630)) + 172|0);
-       $1632 = HEAP32[$1631>>2]|0;
-       $1633 = $1632 & 511;
-       $1634 = $1633 << 23;
-       $1635 = 53 | $1634;
-       $1636 = $51;
-       $1637 = $1636 & 511;
-       $1638 = $1637 << 14;
-       $1639 = $1635 | $1638;
-       $1640 = $1639 | 128;
-       (_genop($1629,$1640)|0);
-       break;
-      }
-     }
-     $1641 = HEAP32[$49>>2]|0;
-     $1642 = ($1641|0)==(2);
-     if ($1642) {
-      $1643 = $50;
-      $1644 = HEAP8[$1643>>0]|0;
-      $1645 = $1644 << 24 >> 24;
-      $1646 = ($1645|0)==(62);
-      if ($1646) {
-       $1647 = $50;
-       $1648 = ((($1647)) + 1|0);
-       $1649 = HEAP8[$1648>>0]|0;
-       $1650 = $1649 << 24 >> 24;
-       $1651 = ($1650|0)==(61);
-       if ($1651) {
-        $1652 = $3;
-        $1653 = $3;
-        $1654 = ((($1653)) + 172|0);
-        $1655 = HEAP32[$1654>>2]|0;
-        $1656 = $1655 & 511;
-        $1657 = $1656 << 23;
-        $1658 = 54 | $1657;
-        $1659 = $51;
-        $1660 = $1659 & 511;
-        $1661 = $1660 << 14;
-        $1662 = $1658 | $1661;
-        $1663 = $1662 | 128;
-        (_genop($1652,$1663)|0);
-        break;
-       }
-      }
-     }
-     $1664 = $3;
-     $1665 = $3;
-     $1666 = ((($1665)) + 172|0);
-     $1667 = HEAP32[$1666>>2]|0;
-     $1668 = $1667 & 511;
-     $1669 = $1668 << 23;
-     $1670 = 32 | $1669;
-     $1671 = $51;
-     $1672 = $1671 & 511;
-     $1673 = $1672 << 14;
-     $1674 = $1670 | $1673;
-     $1675 = $1674 | 128;
-     (_genop($1664,$1675)|0);
-    }
-   } while(0);
-   $1676 = $3;
-   $1677 = $4;
-   $1678 = HEAP32[$1677>>2]|0;
-   $1679 = $3;
-   $1680 = ((($1679)) + 172|0);
-   $1681 = HEAP32[$1680>>2]|0;
-   $1682 = $5;
-   _gen_assignment($1676,$1678,$1681,$1682);
-   STACKTOP = sp;return;
-   break;
-  }
-  case 32:  {
-   $53 = 0;
-   $54 = 0;
-   $55 = 0;
-   $1683 = $3;
-   _push_($1683);
-   $1684 = $4;
-   $1685 = ($1684|0)!=(0|0);
-   if ($1685) {
-    $1686 = $4;
-    $1687 = HEAP32[$1686>>2]|0;
-    $56 = $1687;
-    $1688 = $56;
-    $1689 = ($1688|0)!=(0|0);
-    if ($1689) {
-     $1690 = $3;
-     $1691 = $56;
-     $1692 = (_gen_values($1690,$1691,1)|0);
-     $53 = $1692;
-     $1693 = $53;
-     $1694 = ($1693|0)<(0);
-     if ($1694) {
-      $55 = 1;
-      $54 = 1;
-      $53 = 1;
-      $1695 = $3;
-      _push_($1695);
-     }
-    }
-   }
-   $1696 = $4;
-   $1697 = ($1696|0)!=(0|0);
-   if ($1697) {
-    $1698 = $4;
-    $1699 = ((($1698)) + 4|0);
-    $1700 = HEAP32[$1699>>2]|0;
-    $1701 = ($1700|0)!=(0|0);
-    if ($1701) {
-     $1702 = $3;
-     $1703 = $4;
-     $1704 = ((($1703)) + 4|0);
-     $1705 = HEAP32[$1704>>2]|0;
-     _codegen($1702,$1705,1);
-     $1706 = $3;
-     $$sink12 = $1706;
-    } else {
-     label = 190;
-    }
-   } else {
-    label = 190;
-   }
-   if ((label|0) == 190) {
-    $1707 = $3;
-    $1708 = $3;
-    $1709 = ((($1708)) + 172|0);
-    $1710 = HEAP32[$1709>>2]|0;
-    $1711 = $1710 & 511;
-    $1712 = $1711 << 23;
-    $1713 = 5 | $1712;
-    (_genop($1707,$1713)|0);
-    $1714 = $3;
-    _push_($1714);
-    $1715 = $3;
-    $$sink12 = $1715;
-   }
-   $1716 = ((($$sink12)) + 172|0);
-   $1717 = HEAP32[$1716>>2]|0;
-   $1718 = (($1717) + -1)|0;
-   HEAP32[$1716>>2] = $1718;
-   $1719 = $53;
-   $1720 = (($1719) + 1)|0;
-   $1721 = $3;
-   $1722 = ((($1721)) + 172|0);
-   $1723 = HEAP32[$1722>>2]|0;
-   $1724 = (($1723) - ($1720))|0;
-   HEAP32[$1722>>2] = $1724;
-   $1725 = $55;
-   $1726 = ($1725|0)!=(0);
-   if ($1726) {
-    $53 = 127;
-   }
-   $1727 = $3;
-   $1728 = $3;
-   $1729 = ((($1728)) + 172|0);
-   $1730 = HEAP32[$1729>>2]|0;
-   $1731 = $1730 & 511;
-   $1732 = $1731 << 23;
-   $1733 = 36 | $1732;
-   $1734 = $53;
-   $1735 = $1734 & 127;
-   $1736 = $1735 << 7;
-   $1737 = $1733 | $1736;
-   (_genop($1727,$1737)|0);
-   $1738 = $5;
-   $1739 = ($1738|0)!=(0);
-   if (!($1739)) {
-    STACKTOP = sp;return;
-   }
-   $1740 = $3;
-   _push_($1740);
-   STACKTOP = sp;return;
-   break;
-  }
-  case 33:  {
-   $1741 = $3;
-   $57 = $1741;
-   $58 = 0;
-   $59 = 0;
-   $1742 = $3;
-   _push_($1742);
-   while(1) {
-    $1743 = $57;
-    $1744 = ((($1743)) + 184|0);
-    $1745 = HEAP16[$1744>>1]|0;
-    $1746 = ($1745&65535) >>> 15;
-    $1747 = $1746&255;
-    $1748 = ($1747<<24>>24)!=(0);
-    $1749 = $1748 ^ 1;
-    if (!($1749)) {
-     break;
-    }
-    $1750 = $58;
-    $1751 = (($1750) + 1)|0;
-    $58 = $1751;
-    $1752 = $57;
-    $1753 = ((($1752)) + 164|0);
-    $1754 = HEAP32[$1753>>2]|0;
-    $57 = $1754;
-    $1755 = $57;
-    $1756 = ($1755|0)!=(0|0);
-    if (!($1756)) {
-     break;
-    }
-   }
-   $1757 = $57;
-   $1758 = ($1757|0)!=(0|0);
-   if ($1758) {
-    $1759 = $57;
-    $1760 = ((($1759)) + 184|0);
-    $1761 = HEAP16[$1760>>1]|0;
-    $1762 = ($1761 << 1)&65535;
-    $1763 = ($1762<<16>>16) >> 1;
-    $1764 = $1763 << 16 >> 16;
-    $59 = $1764;
-   }
-   $1765 = $3;
-   $1766 = $3;
-   $1767 = ((($1766)) + 172|0);
-   $1768 = HEAP32[$1767>>2]|0;
-   $1769 = $1768 & 511;
-   $1770 = $1769 << 23;
-   $1771 = 37 | $1770;
-   $1772 = $59;
-   $1773 = $1772 << 4;
-   $1774 = $58;
-   $1775 = $1774 & 15;
-   $1776 = $1773 | $1775;
-   $1777 = $1776 & 65535;
-   $1778 = $1777 << 7;
-   $1779 = $1771 | $1778;
-   (_genop($1765,$1779)|0);
-   $1780 = $3;
-   _push_($1780);
-   $1781 = $3;
-   _push_($1781);
-   $1782 = $3;
-   $1783 = ((($1782)) + 172|0);
-   $1784 = HEAP32[$1783>>2]|0;
-   $1785 = (($1784) + -1)|0;
-   HEAP32[$1783>>2] = $1785;
-   $1786 = $4;
-   $1787 = ($1786|0)!=(0|0);
-   if ($1787) {
-    $1788 = $4;
-    $1789 = ((($1788)) + 4|0);
-    $1790 = HEAP32[$1789>>2]|0;
-    $1791 = ($1790|0)!=(0|0);
-    if ($1791) {
-     $1792 = $3;
-     $1793 = $4;
-     $1794 = ((($1793)) + 4|0);
-     $1795 = HEAP32[$1794>>2]|0;
-     _codegen($1792,$1795,1);
-     $1796 = $3;
-     $1797 = ((($1796)) + 172|0);
-     $1798 = HEAP32[$1797>>2]|0;
-     $1799 = (($1798) + -1)|0;
-     HEAP32[$1797>>2] = $1799;
-    }
-   }
-   $1800 = $3;
-   $1801 = ((($1800)) + 172|0);
-   $1802 = HEAP32[$1801>>2]|0;
-   $1803 = (($1802) + -1)|0;
-   HEAP32[$1801>>2] = $1803;
-   $1804 = $3;
-   $1805 = ((($1804)) + 172|0);
-   $1806 = HEAP32[$1805>>2]|0;
-   $1807 = (($1806) + -1)|0;
-   HEAP32[$1805>>2] = $1807;
-   $1808 = $3;
-   $1809 = $3;
-   $1810 = ((($1809)) + 172|0);
-   $1811 = HEAP32[$1810>>2]|0;
-   $1812 = $1811 & 511;
-   $1813 = $1812 << 23;
-   $1814 = 36 | $1813;
-   $1815 = $1814 | 16256;
-   (_genop($1808,$1815)|0);
-   $1816 = $5;
-   $1817 = ($1816|0)!=(0);
-   if (!($1817)) {
-    STACKTOP = sp;return;
-   }
-   $1818 = $3;
-   _push_($1818);
-   STACKTOP = sp;return;
-   break;
-  }
-  case 37:  {
-   $1819 = $4;
-   $1820 = ($1819|0)!=(0|0);
-   $1821 = $3;
-   if ($1820) {
-    $1822 = $4;
-    _codegen($1821,$1822,1);
-    $1823 = $3;
-    $1824 = ((($1823)) + 172|0);
-    $1825 = HEAP32[$1824>>2]|0;
-    $1826 = (($1825) + -1)|0;
-    HEAP32[$1824>>2] = $1826;
-   } else {
-    $1827 = $3;
-    $1828 = ((($1827)) + 172|0);
-    $1829 = HEAP32[$1828>>2]|0;
-    $1830 = $1829 & 511;
-    $1831 = $1830 << 23;
-    $1832 = 5 | $1831;
-    (_genop($1821,$1832)|0);
-   }
-   $1833 = $3;
-   $1834 = ((($1833)) + 188|0);
-   $1835 = HEAP32[$1834>>2]|0;
-   $1836 = ($1835|0)!=(0|0);
-   $1837 = $3;
-   $1838 = $3;
-   $1839 = ((($1838)) + 172|0);
-   $1840 = HEAP32[$1839>>2]|0;
-   $1841 = $1840 & 511;
-   $1842 = $1841 << 23;
-   $1843 = 41 | $1842;
-   if ($1836) {
-    $1844 = $1843 | 32768;
-    (_genop($1837,$1844)|0);
-   } else {
-    (_genop_peep($1837,$1843,0)|0);
-   }
-   $1845 = $5;
-   $1846 = ($1845|0)!=(0);
-   if (!($1846)) {
-    STACKTOP = sp;return;
-   }
-   $1847 = $3;
-   _push_($1847);
-   STACKTOP = sp;return;
-   break;
-  }
-  case 38:  {
-   $1848 = $3;
-   $60 = $1848;
-   $61 = 0;
-   $62 = 0;
-   $63 = 0;
-   $64 = 0;
-   while(1) {
-    $1849 = $60;
-    $1850 = ((($1849)) + 184|0);
-    $1851 = HEAP16[$1850>>1]|0;
-    $1852 = ($1851&65535) >>> 15;
-    $1853 = $1852&255;
-    $1854 = ($1853<<24>>24)!=(0);
-    $1855 = $1854 ^ 1;
-    if (!($1855)) {
-     break;
-    }
-    $1856 = $61;
-    $1857 = (($1856) + 1)|0;
-    $61 = $1857;
-    $1858 = $60;
-    $1859 = ((($1858)) + 164|0);
-    $1860 = HEAP32[$1859>>2]|0;
-    $60 = $1860;
-    $1861 = $60;
-    $1862 = ($1861|0)!=(0|0);
-    if (!($1862)) {
-     break;
-    }
-   }
-   $1863 = $60;
-   $1864 = ($1863|0)!=(0|0);
-   if ($1864) {
-    $1865 = $60;
-    $1866 = ((($1865)) + 184|0);
-    $1867 = HEAP16[$1866>>1]|0;
-    $1868 = ($1867 << 1)&65535;
-    $1869 = ($1868<<16>>16) >> 1;
-    $1870 = $1869 << 16 >> 16;
-    $62 = $1870;
-   }
-   $1871 = $3;
-   $1872 = $3;
-   $1873 = ((($1872)) + 172|0);
-   $1874 = HEAP32[$1873>>2]|0;
-   $1875 = $1874 & 511;
-   $1876 = $1875 << 23;
-   $1877 = 43 | $1876;
-   $1878 = $62;
-   $1879 = $1878 << 4;
-   $1880 = $61;
-   $1881 = $1880 & 15;
-   $1882 = $1879 | $1881;
-   $1883 = $1882 & 65535;
-   $1884 = $1883 << 7;
-   $1885 = $1877 | $1884;
-   (_genop($1871,$1885)|0);
-   $1886 = $3;
-   _push_($1886);
-   $1887 = $4;
-   $1888 = ($1887|0)!=(0|0);
-   if ($1888) {
-    $1889 = $3;
-    $1890 = $4;
-    $1891 = (_gen_values($1889,$1890,1)|0);
-    $63 = $1891;
-    $1892 = $63;
-    $1893 = ($1892|0)<(0);
-    if ($1893) {
-     $64 = 1;
-     $63 = 1;
-     $1894 = $3;
-     _push_($1894);
-    }
-   }
-   $1895 = $63;
-   $1896 = (($1895) + 1)|0;
-   $1897 = $3;
-   $1898 = ((($1897)) + 172|0);
-   $1899 = HEAP32[$1898>>2]|0;
-   $1900 = (($1899) - ($1896))|0;
-   HEAP32[$1898>>2] = $1900;
-   $1901 = $64;
-   $1902 = ($1901|0)!=(0);
-   if ($1902) {
-    $63 = 127;
-   }
-   $1903 = $3;
-   $1904 = $3;
-   $1905 = ((($1904)) + 172|0);
-   $1906 = HEAP32[$1905>>2]|0;
-   $1907 = $1906 & 511;
-   $1908 = $1907 << 23;
-   $1909 = 32 | $1908;
-   $1910 = $3;
-   $1911 = $3;
-   $1912 = HEAP32[$1911>>2]|0;
-   $1913 = (_mrb_intern_static($1912,69604,4)|0);
-   $1914 = (_new_msym($1910,$1913)|0);
-   $1915 = $1914 & 511;
-   $1916 = $1915 << 14;
-   $1917 = $1909 | $1916;
-   $1918 = $63;
-   $1919 = $1918 & 127;
-   $1920 = $1919 << 7;
-   $1921 = $1917 | $1920;
-   (_genop($1903,$1921)|0);
-   $1922 = $5;
-   $1923 = ($1922|0)!=(0);
-   if (!($1923)) {
-    STACKTOP = sp;return;
-   }
-   $1924 = $3;
-   _push_($1924);
-   STACKTOP = sp;return;
-   break;
-  }
-  case 13:  {
-   $1925 = $3;
-   $1926 = $4;
-   _loop_break($1925,$1926);
-   $1927 = $5;
-   $1928 = ($1927|0)!=(0);
-   if (!($1928)) {
-    STACKTOP = sp;return;
-   }
-   $1929 = $3;
-   _push_($1929);
-   STACKTOP = sp;return;
-   break;
-  }
-  case 14:  {
-   $1930 = $3;
-   $1931 = ((($1930)) + 188|0);
-   $1932 = HEAP32[$1931>>2]|0;
-   $1933 = ($1932|0)!=(0|0);
-   $1934 = $3;
-   do {
-    if ($1933) {
-     $1935 = ((($1934)) + 188|0);
-     $1936 = HEAP32[$1935>>2]|0;
-     $1937 = HEAP32[$1936>>2]|0;
-     $1938 = ($1937|0)==(0);
-     if ($1938) {
-      $1939 = $3;
-      $1940 = ((($1939)) + 192|0);
-      $1941 = HEAP32[$1940>>2]|0;
-      $1942 = $3;
-      $1943 = ((($1942)) + 188|0);
-      $1944 = HEAP32[$1943>>2]|0;
-      $1945 = ((($1944)) + 20|0);
-      $1946 = HEAP32[$1945>>2]|0;
-      $1947 = ($1941|0)>($1946|0);
-      if ($1947) {
-       $1948 = $3;
-       $1949 = $3;
-       $1950 = ((($1949)) + 192|0);
-       $1951 = HEAP32[$1950>>2]|0;
-       $1952 = $3;
-       $1953 = ((($1952)) + 188|0);
-       $1954 = HEAP32[$1953>>2]|0;
-       $1955 = ((($1954)) + 20|0);
-       $1956 = HEAP32[$1955>>2]|0;
-       $1957 = (($1951) - ($1956))|0;
-       $1958 = $1957 & 511;
-       $1959 = $1958 << 23;
-       $1960 = 31 | $1959;
-       (_genop_peep($1948,$1960,0)|0);
-      }
-      $1961 = $3;
-      $1962 = $4;
-      _codegen($1961,$1962,0);
-      $1963 = $3;
-      $1964 = $3;
-      $1965 = ((($1964)) + 188|0);
-      $1966 = HEAP32[$1965>>2]|0;
-      $1967 = ((($1966)) + 4|0);
-      $1968 = HEAP32[$1967>>2]|0;
-      $1969 = $3;
-      $1970 = ((($1969)) + 176|0);
-      $1971 = HEAP32[$1970>>2]|0;
-      $1972 = (($1968) - ($1971))|0;
-      $1973 = (($1972) + 32767)|0;
-      $1974 = $1973 & 65535;
-      $1975 = $1974 << 7;
-      $1976 = 23 | $1975;
-      (_genop($1963,$1976)|0);
-      break;
-     }
-     $1977 = $4;
-     $1978 = ($1977|0)!=(0|0);
-     $1979 = $3;
-     if ($1978) {
-      $1980 = $4;
-      _codegen($1979,$1980,1);
-      $1981 = $3;
-      $1982 = ((($1981)) + 172|0);
-      $1983 = HEAP32[$1982>>2]|0;
-      $1984 = (($1983) + -1)|0;
-      HEAP32[$1982>>2] = $1984;
-     } else {
-      $1985 = $3;
-      $1986 = ((($1985)) + 172|0);
-      $1987 = HEAP32[$1986>>2]|0;
-      $1988 = $1987 & 511;
-      $1989 = $1988 << 23;
-      $1990 = 5 | $1989;
-      (_genop($1979,$1990)|0);
-     }
-     $1991 = $3;
-     $1992 = $3;
-     $1993 = ((($1992)) + 172|0);
-     $1994 = HEAP32[$1993>>2]|0;
-     $1995 = $1994 & 511;
-     $1996 = $1995 << 23;
-     $1997 = 41 | $1996;
-     (_genop_peep($1991,$1997,0)|0);
-    } else {
-     _raise_error($1934,69609);
-    }
-   } while(0);
-   $1998 = $5;
-   $1999 = ($1998|0)!=(0);
-   if (!($1999)) {
-    STACKTOP = sp;return;
-   }
-   $2000 = $3;
-   _push_($2000);
-   STACKTOP = sp;return;
-   break;
-  }
-  case 15:  {
-   $2001 = $3;
-   $2002 = ((($2001)) + 188|0);
-   $2003 = HEAP32[$2002>>2]|0;
-   $2004 = ($2003|0)!=(0|0);
-   $2005 = $3;
-   if (!($2004)) {
-    _raise_error($2005,69625);
-    STACKTOP = sp;return;
-   }
-   $2006 = ((($2005)) + 192|0);
-   $2007 = HEAP32[$2006>>2]|0;
-   $2008 = $3;
-   $2009 = ((($2008)) + 188|0);
-   $2010 = HEAP32[$2009>>2]|0;
-   $2011 = ((($2010)) + 20|0);
-   $2012 = HEAP32[$2011>>2]|0;
-   $2013 = ($2007|0)>($2012|0);
-   if ($2013) {
-    $2014 = $3;
-    $2015 = $3;
-    $2016 = ((($2015)) + 192|0);
-    $2017 = HEAP32[$2016>>2]|0;
-    $2018 = $3;
-    $2019 = ((($2018)) + 188|0);
-    $2020 = HEAP32[$2019>>2]|0;
-    $2021 = ((($2020)) + 20|0);
-    $2022 = HEAP32[$2021>>2]|0;
-    $2023 = (($2017) - ($2022))|0;
-    $2024 = $2023 & 511;
-    $2025 = $2024 << 23;
-    $2026 = 31 | $2025;
-    (_genop_peep($2014,$2026,0)|0);
-   }
-   $2027 = $3;
-   $2028 = $3;
-   $2029 = ((($2028)) + 188|0);
-   $2030 = HEAP32[$2029>>2]|0;
-   $2031 = ((($2030)) + 8|0);
-   $2032 = HEAP32[$2031>>2]|0;
-   $2033 = $3;
-   $2034 = ((($2033)) + 176|0);
-   $2035 = HEAP32[$2034>>2]|0;
-   $2036 = (($2032) - ($2035))|0;
-   $2037 = (($2036) + 32767)|0;
-   $2038 = $2037 & 65535;
-   $2039 = $2038 << 7;
-   $2040 = 23 | $2039;
-   (_genop($2027,$2040)|0);
-   STACKTOP = sp;return;
-   break;
-  }
-  case 16:  {
-   $65 = 69641;
-   $2041 = $3;
-   $2042 = ((($2041)) + 188|0);
-   $2043 = HEAP32[$2042>>2]|0;
-   $2044 = ($2043|0)!=(0|0);
-   $2045 = $3;
-   if (!($2044)) {
-    $2046 = $65;
-    _raise_error($2045,$2046);
-    STACKTOP = sp;return;
-   }
-   $2047 = ((($2045)) + 188|0);
-   $2048 = HEAP32[$2047>>2]|0;
-   $66 = $2048;
-   $67 = 0;
-   while(1) {
-    $2049 = $66;
-    $2050 = ($2049|0)!=(0|0);
-    if ($2050) {
-     $2051 = $66;
-     $2052 = HEAP32[$2051>>2]|0;
-     $2053 = ($2052|0)!=(4);
-     $3658 = $2053;
-    } else {
-     $3658 = 0;
-    }
-    $2054 = $66;
-    if (!($3658)) {
-     break;
-    }
-    $2055 = HEAP32[$2054>>2]|0;
-    $2056 = ($2055|0)==(3);
-    if ($2056) {
-     $2057 = $67;
-     $2058 = (($2057) + 1)|0;
-     $67 = $2058;
-    }
-    $2059 = $66;
-    $2060 = ((($2059)) + 24|0);
-    $2061 = HEAP32[$2060>>2]|0;
-    $66 = $2061;
-   }
-   $2062 = ($2054|0)!=(0|0);
-   if (!($2062)) {
-    $2063 = $3;
-    $2064 = $65;
-    _raise_error($2063,$2064);
-    STACKTOP = sp;return;
-   }
-   $2065 = $67;
-   $2066 = ($2065|0)>(0);
-   L416: do {
-    if ($2066) {
-     while(1) {
-      $2067 = $67;
-      $2068 = (($2067) + -1)|0;
-      $67 = $2068;
-      $2069 = ($2067|0)!=(0);
-      if (!($2069)) {
-       break L416;
-      }
-      $2070 = $3;
-      (_genop_peep($2070,8388636,0)|0);
-     }
-    }
-   } while(0);
-   $2071 = $3;
-   $2072 = ((($2071)) + 192|0);
-   $2073 = HEAP32[$2072>>2]|0;
-   $2074 = $66;
-   $2075 = ((($2074)) + 20|0);
-   $2076 = HEAP32[$2075>>2]|0;
-   $2077 = ($2073|0)>($2076|0);
-   if ($2077) {
-    $2078 = $3;
-    $2079 = $3;
-    $2080 = ((($2079)) + 192|0);
-    $2081 = HEAP32[$2080>>2]|0;
-    $2082 = $66;
-    $2083 = ((($2082)) + 20|0);
-    $2084 = HEAP32[$2083>>2]|0;
-    $2085 = (($2081) - ($2084))|0;
-    $2086 = $2085 & 511;
-    $2087 = $2086 << 23;
-    $2088 = 31 | $2087;
-    (_genop_peep($2078,$2088,0)|0);
-   }
-   $2089 = $3;
-   $2090 = $66;
-   $2091 = ((($2090)) + 4|0);
-   $2092 = HEAP32[$2091>>2]|0;
-   $2093 = $3;
-   $2094 = ((($2093)) + 176|0);
-   $2095 = HEAP32[$2094>>2]|0;
-   $2096 = (($2092) - ($2095))|0;
-   $2097 = (($2096) + 32767)|0;
-   $2098 = $2097 & 65535;
-   $2099 = $2098 << 7;
-   $2100 = 23 | $2099;
-   (_genop($2089,$2100)|0);
-   STACKTOP = sp;return;
-   break;
-  }
-  case 39:  {
-   $2101 = $5;
-   $2102 = ($2101|0)!=(0);
-   if (!($2102)) {
-    STACKTOP = sp;return;
-   }
-   $2103 = $3;
-   $2104 = $4;
-   $2105 = $2104;
-   $2106 = (_lv_idx($2103,$2105)|0);
-   $68 = $2106;
-   $2107 = $68;
-   $2108 = ($2107|0)>(0);
-   L429: do {
-    if ($2108) {
-     $2109 = $3;
-     $2110 = $3;
-     $2111 = ((($2110)) + 172|0);
-     $2112 = HEAP32[$2111>>2]|0;
-     $2113 = $2112 & 511;
-     $2114 = $2113 << 23;
-     $2115 = 1 | $2114;
-     $2116 = $68;
-     $2117 = $2116 & 511;
-     $2118 = $2117 << 14;
-     $2119 = $2115 | $2118;
-     (_genop_peep($2109,$2119,0)|0);
-    } else {
-     $69 = 0;
-     $2120 = $3;
-     $2121 = ((($2120)) + 164|0);
-     $2122 = HEAP32[$2121>>2]|0;
-     $70 = $2122;
-     while(1) {
-      $2123 = $70;
-      $2124 = ($2123|0)!=(0|0);
-      if (!($2124)) {
-       break L429;
-      }
-      $2125 = $70;
-      $2126 = $4;
-      $2127 = $2126;
-      $2128 = (_lv_idx($2125,$2127)|0);
-      $68 = $2128;
-      $2129 = $68;
-      $2130 = ($2129|0)>(0);
-      if ($2130) {
-       break;
-      }
-      $2146 = $69;
-      $2147 = (($2146) + 1)|0;
-      $69 = $2147;
-      $2148 = $70;
-      $2149 = ((($2148)) + 164|0);
-      $2150 = HEAP32[$2149>>2]|0;
-      $70 = $2150;
-     }
-     $2131 = $3;
-     $2132 = $3;
-     $2133 = ((($2132)) + 172|0);
-     $2134 = HEAP32[$2133>>2]|0;
-     $2135 = $2134 & 511;
-     $2136 = $2135 << 23;
-     $2137 = 21 | $2136;
-     $2138 = $68;
-     $2139 = $2138 & 511;
-     $2140 = $2139 << 14;
-     $2141 = $2137 | $2140;
-     $2142 = $69;
-     $2143 = $2142 & 127;
-     $2144 = $2143 << 7;
-     $2145 = $2141 | $2144;
-     (_genop($2131,$2145)|0);
-    }
-   } while(0);
-   $2151 = $3;
-   _push_($2151);
-   STACKTOP = sp;return;
-   break;
-  }
-  case 41:  {
-   $2152 = $5;
-   $2153 = ($2152|0)!=(0);
-   if (!($2153)) {
-    STACKTOP = sp;return;
-   }
-   $2154 = $3;
-   $2155 = $4;
-   $2156 = $2155;
-   $2157 = (_new_sym_1167($2154,$2156)|0);
-   $71 = $2157;
-   $2158 = $3;
-   $2159 = $3;
-   $2160 = ((($2159)) + 172|0);
-   $2161 = HEAP32[$2160>>2]|0;
-   $2162 = $2161 & 511;
-   $2163 = $2162 << 23;
-   $2164 = 9 | $2163;
-   $2165 = $71;
-   $2166 = $2165 & 65535;
-   $2167 = $2166 << 7;
-   $2168 = $2164 | $2167;
-   (_genop($2158,$2168)|0);
-   $2169 = $3;
-   _push_($2169);
-   STACKTOP = sp;return;
-   break;
-  }
-  case 42:  {
-   $2170 = $5;
-   $2171 = ($2170|0)!=(0);
-   if (!($2171)) {
-    STACKTOP = sp;return;
-   }
-   $2172 = $3;
-   $2173 = $4;
-   $2174 = $2173;
-   $2175 = (_new_sym_1167($2172,$2174)|0);
-   $72 = $2175;
-   $2176 = $3;
-   $2177 = $3;
-   $2178 = ((($2177)) + 172|0);
-   $2179 = HEAP32[$2178>>2]|0;
-   $2180 = $2179 & 511;
-   $2181 = $2180 << 23;
-   $2182 = 13 | $2181;
-   $2183 = $72;
-   $2184 = $2183 & 65535;
-   $2185 = $2184 << 7;
-   $2186 = $2182 | $2185;
-   (_genop($2176,$2186)|0);
-   $2187 = $3;
-   _push_($2187);
-   STACKTOP = sp;return;
-   break;
-  }
-  case 44:  {
-   $2188 = $5;
-   $2189 = ($2188|0)!=(0);
-   if (!($2189)) {
-    STACKTOP = sp;return;
-   }
-   $2190 = $3;
-   $2191 = $4;
-   $2192 = $2191;
-   $2193 = (_new_sym_1167($2190,$2192)|0);
-   $73 = $2193;
-   $2194 = $3;
-   $2195 = $3;
-   $2196 = ((($2195)) + 172|0);
-   $2197 = HEAP32[$2196>>2]|0;
-   $2198 = $2197 & 511;
-   $2199 = $2198 << 23;
-   $2200 = 15 | $2199;
-   $2201 = $73;
-   $2202 = $2201 & 65535;
-   $2203 = $2202 << 7;
-   $2204 = $2200 | $2203;
-   (_genop($2194,$2204)|0);
-   $2205 = $3;
-   _push_($2205);
-   STACKTOP = sp;return;
-   break;
-  }
-  case 43:  {
-   $2206 = $3;
-   $2207 = $4;
-   $2208 = $2207;
-   $2209 = (_new_sym_1167($2206,$2208)|0);
-   $74 = $2209;
-   $2210 = $3;
-   $2211 = $3;
-   $2212 = ((($2211)) + 172|0);
-   $2213 = HEAP32[$2212>>2]|0;
-   $2214 = $2213 & 511;
-   $2215 = $2214 << 23;
-   $2216 = 17 | $2215;
-   $2217 = $74;
-   $2218 = $2217 & 65535;
-   $2219 = $2218 << 7;
-   $2220 = $2216 | $2219;
-   (_genop($2210,$2220)|0);
-   $2221 = $5;
-   $2222 = ($2221|0)!=(0);
-   if (!($2222)) {
-    STACKTOP = sp;return;
-   }
-   $2223 = $3;
-   _push_($2223);
-   STACKTOP = sp;return;
-   break;
-  }
-  case 89:  {
-   $2224 = $3;
-   $2225 = $4;
-   _codegen($2224,$2225,1);
-   STACKTOP = sp;return;
-   break;
-  }
-  case 46:  {
-   $2226 = $5;
-   $2227 = ($2226|0)!=(0);
-   if (!($2227)) {
-    STACKTOP = sp;return;
-   }
-   ;HEAP8[$75>>0]=HEAP8[69658>>0]|0;HEAP8[$75+1>>0]=HEAP8[69658+1>>0]|0;
-   $2228 = $4;
-   $2229 = $2228;
-   $2230 = $2229&255;
-   $2231 = ((($75)) + 1|0);
-   HEAP8[$2231>>0] = $2230;
-   $2232 = $3;
-   $2233 = HEAP32[$2232>>2]|0;
-   _mrb_str_new($78,$2233,$75,2);
-   ;HEAP32[$76>>2]=HEAP32[$78>>2]|0;HEAP32[$76+4>>2]=HEAP32[$78+4>>2]|0;
-   $2234 = $3;
-   $2235 = $3;
-   $2236 = HEAP32[$2235>>2]|0;
-   ;HEAP32[$$byval_copy>>2]=HEAP32[$76>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$76+4>>2]|0;
-   $2237 = (_mrb_intern_str($2236,$$byval_copy)|0);
-   $2238 = (_new_sym_1167($2234,$2237)|0);
-   $77 = $2238;
-   $2239 = $3;
-   $2240 = $3;
-   $2241 = ((($2240)) + 172|0);
-   $2242 = HEAP32[$2241>>2]|0;
-   $2243 = $2242 & 511;
-   $2244 = $2243 << 23;
-   $2245 = 9 | $2244;
-   $2246 = $77;
-   $2247 = $2246 & 65535;
-   $2248 = $2247 << 7;
-   $2249 = $2245 | $2248;
-   (_genop($2239,$2249)|0);
-   $2250 = $3;
-   _push_($2250);
-   STACKTOP = sp;return;
-   break;
-  }
-  case 45:  {
-   $2251 = $5;
-   $2252 = ($2251|0)!=(0);
-   if (!($2252)) {
-    STACKTOP = sp;return;
-   }
-   $2253 = $3;
-   $2254 = HEAP32[$2253>>2]|0;
-   $80 = $2254;
-   $2255 = $4;
-   $2256 = $2255;
-   _mrb_fixnum_value_1173($81,$2256);
-   $2257 = $80;
-   _mrb_str_buf_new($82,$2257,4);
-   $2258 = $80;
-   ;HEAP32[$$byval_copy13>>2]=HEAP32[$82>>2]|0;HEAP32[$$byval_copy13+4>>2]=HEAP32[$82+4>>2]|0;
-   _mrb_str_cat($83,$2258,$$byval_copy13,69658,1);
-   $2259 = $80;
-   $2260 = $80;
-   ;HEAP32[$$byval_copy14>>2]=HEAP32[$81>>2]|0;HEAP32[$$byval_copy14+4>>2]=HEAP32[$81+4>>2]|0;
-   _mrb_fixnum_to_str($84,$2260,$$byval_copy14,10);
-   ;HEAP32[$$byval_copy15>>2]=HEAP32[$82>>2]|0;HEAP32[$$byval_copy15+4>>2]=HEAP32[$82+4>>2]|0;
-   ;HEAP32[$$byval_copy16>>2]=HEAP32[$84>>2]|0;HEAP32[$$byval_copy16+4>>2]=HEAP32[$84+4>>2]|0;
-   _mrb_str_cat_str($85,$2259,$$byval_copy15,$$byval_copy16);
-   $2261 = $3;
-   $2262 = $80;
-   ;HEAP32[$$byval_copy17>>2]=HEAP32[$82>>2]|0;HEAP32[$$byval_copy17+4>>2]=HEAP32[$82+4>>2]|0;
-   $2263 = (_mrb_intern_str($2262,$$byval_copy17)|0);
-   $2264 = (_new_sym_1167($2261,$2263)|0);
-   $79 = $2264;
-   $2265 = $3;
-   $2266 = $3;
-   $2267 = ((($2266)) + 172|0);
-   $2268 = HEAP32[$2267>>2]|0;
-   $2269 = $2268 & 511;
-   $2270 = $2269 << 23;
-   $2271 = 9 | $2270;
-   $2272 = $79;
-   $2273 = $2272 & 65535;
-   $2274 = $2273 << 7;
-   $2275 = $2271 | $2274;
-   (_genop($2265,$2275)|0);
-   $2276 = $3;
-   _push_($2276);
-   STACKTOP = sp;return;
-   break;
-  }
-  case 91:  {
-   $3656 = $3;
-   $3657 = $4;
-   _codegen($3656,$3657,0);
-   STACKTOP = sp;return;
-   break;
-  }
-  case 69:  {
-   $2277 = $3;
-   $2278 = $4;
-   _codegen($2277,$2278,1);
-   STACKTOP = sp;return;
-   break;
-  }
-  case 50:  {
-   $2279 = $5;
-   $2280 = ($2279|0)!=(0);
-   if (!($2280)) {
-    STACKTOP = sp;return;
-   }
-   $2281 = $4;
-   $2282 = HEAP32[$2281>>2]|0;
-   $86 = $2282;
-   $2283 = $4;
-   $2284 = ((($2283)) + 4|0);
-   $2285 = HEAP32[$2284>>2]|0;
-   $2286 = HEAP32[$2285>>2]|0;
-   $2287 = $2286;
-   $87 = $2287;
-   $2288 = $3;
-   $2289 = $86;
-   $2290 = $87;
-   $2291 = (_readint_mrb_int($2288,$2289,$2290,0,$90)|0);
-   $88 = $2291;
-   $2292 = HEAP8[$90>>0]|0;
-   $2293 = ($2292<<24>>24)!=(0);
-   if ($2293) {
-    $2294 = $3;
-    $2295 = $86;
-    $2296 = $87;
-    $2297 = (+_readint_float($2294,$2295,$2296));
-    $91 = $2297;
-    $2298 = $3;
-    $2299 = $3;
-    $2300 = HEAP32[$2299>>2]|0;
-    $2301 = $91;
-    $2302 = $2301;
-    _mrb_float_value_1175($93,$2300,$2302);
-    ;HEAP32[$$byval_copy18>>2]=HEAP32[$93>>2]|0;HEAP32[$$byval_copy18+4>>2]=HEAP32[$93+4>>2]|0;
-    $2303 = (_new_lit($2298,$$byval_copy18)|0);
-    $92 = $2303;
-    $2304 = $3;
-    $2305 = $3;
-    $2306 = ((($2305)) + 172|0);
-    $2307 = HEAP32[$2306>>2]|0;
-    $2308 = $2307 & 511;
-    $2309 = $2308 << 23;
-    $2310 = 2 | $2309;
-    $2311 = $92;
-    $2312 = $2311 & 65535;
-    $2313 = $2312 << 7;
-    $2314 = $2310 | $2313;
-    (_genop($2304,$2314)|0);
-   } else {
-    $2315 = $88;
-    $2316 = ($2315|0)<(32767);
-    $2317 = $88;
-    $2318 = ($2317|0)>(-32767);
-    $or$cond7 = $2316 & $2318;
-    $2319 = $3;
-    if ($or$cond7) {
-     $2320 = ((($2319)) + 172|0);
-     $2321 = HEAP32[$2320>>2]|0;
-     $2322 = $2321 & 511;
-     $2323 = $2322 << 23;
-     $2324 = 3 | $2323;
-     $2325 = $88;
-     $2326 = (($2325) + 32767)|0;
-     $2327 = $2326 & 65535;
-     $2328 = $2327 << 7;
-     $2329 = $2324 | $2328;
-     $89 = $2329;
-    } else {
-     $2330 = $88;
-     _mrb_fixnum_value_1173($95,$2330);
-     ;HEAP32[$$byval_copy19>>2]=HEAP32[$95>>2]|0;HEAP32[$$byval_copy19+4>>2]=HEAP32[$95+4>>2]|0;
-     $2331 = (_new_lit($2319,$$byval_copy19)|0);
-     $94 = $2331;
-     $2332 = $3;
-     $2333 = ((($2332)) + 172|0);
-     $2334 = HEAP32[$2333>>2]|0;
-     $2335 = $2334 & 511;
-     $2336 = $2335 << 23;
-     $2337 = 2 | $2336;
-     $2338 = $94;
-     $2339 = $2338 & 65535;
-     $2340 = $2339 << 7;
-     $2341 = $2337 | $2340;
-     $89 = $2341;
-    }
-    $2342 = $3;
-    $2343 = $89;
-    (_genop($2342,$2343)|0);
-   }
-   $2344 = $3;
-   _push_($2344);
-   STACKTOP = sp;return;
-   break;
-  }
-  case 51:  {
-   $2345 = $5;
-   $2346 = ($2345|0)!=(0);
-   if (!($2346)) {
-    STACKTOP = sp;return;
-   }
-   $2347 = $4;
-   $96 = $2347;
-   $2348 = $96;
-   $2349 = (+_strtof($2348,0));
-   $97 = $2349;
-   $2350 = $3;
-   $2351 = $3;
-   $2352 = HEAP32[$2351>>2]|0;
-   $2353 = $97;
-   _mrb_float_value_1175($99,$2352,$2353);
-   ;HEAP32[$$byval_copy20>>2]=HEAP32[$99>>2]|0;HEAP32[$$byval_copy20+4>>2]=HEAP32[$99+4>>2]|0;
-   $2354 = (_new_lit($2350,$$byval_copy20)|0);
-   $98 = $2354;
-   $2355 = $3;
-   $2356 = $3;
-   $2357 = ((($2356)) + 172|0);
-   $2358 = HEAP32[$2357>>2]|0;
-   $2359 = $2358 & 511;
-   $2360 = $2359 << 23;
-   $2361 = 2 | $2360;
-   $2362 = $98;
-   $2363 = $2362 & 65535;
-   $2364 = $2363 << 7;
-   $2365 = $2361 | $2364;
-   (_genop($2355,$2365)|0);
-   $2366 = $3;
-   _push_($2366);
-   STACKTOP = sp;return;
-   break;
-  }
-  case 52:  {
-   $2367 = $4;
-   $2368 = HEAP32[$2367>>2]|0;
-   $2369 = $2368;
-   $6 = $2369;
-   $2370 = $4;
-   $2371 = ((($2370)) + 4|0);
-   $2372 = HEAP32[$2371>>2]|0;
-   $4 = $2372;
-   $2373 = $6;
-   switch ($2373|0) {
-   case 51:  {
-    $2374 = $4;
-    $100 = $2374;
-    $2375 = $100;
-    $2376 = (+_strtof($2375,0));
-    $101 = $2376;
-    $2377 = $3;
-    $2378 = $3;
-    $2379 = HEAP32[$2378>>2]|0;
-    $2380 = $101;
-    $2381 = -$2380;
-    _mrb_float_value_1175($103,$2379,$2381);
-    ;HEAP32[$$byval_copy21>>2]=HEAP32[$103>>2]|0;HEAP32[$$byval_copy21+4>>2]=HEAP32[$103+4>>2]|0;
-    $2382 = (_new_lit($2377,$$byval_copy21)|0);
-    $102 = $2382;
-    $2383 = $3;
-    $2384 = $3;
-    $2385 = ((($2384)) + 172|0);
-    $2386 = HEAP32[$2385>>2]|0;
-    $2387 = $2386 & 511;
-    $2388 = $2387 << 23;
-    $2389 = 2 | $2388;
-    $2390 = $102;
-    $2391 = $2390 & 65535;
-    $2392 = $2391 << 7;
-    $2393 = $2389 | $2392;
-    (_genop($2383,$2393)|0);
-    $2394 = $3;
-    _push_($2394);
-    STACKTOP = sp;return;
-    break;
-   }
-   case 50:  {
-    $2395 = $4;
-    $2396 = HEAP32[$2395>>2]|0;
-    $104 = $2396;
-    $2397 = $4;
-    $2398 = ((($2397)) + 4|0);
-    $2399 = HEAP32[$2398>>2]|0;
-    $2400 = HEAP32[$2399>>2]|0;
-    $2401 = $2400;
-    $105 = $2401;
-    $2402 = $3;
-    $2403 = $104;
-    $2404 = $105;
-    $2405 = (_readint_mrb_int($2402,$2403,$2404,1,$108)|0);
-    $106 = $2405;
-    $2406 = HEAP8[$108>>0]|0;
-    $2407 = ($2406<<24>>24)!=(0);
-    if ($2407) {
-     $2408 = $3;
-     $2409 = $104;
-     $2410 = $105;
-     $2411 = (+_readint_float($2408,$2409,$2410));
-     $109 = $2411;
-     $2412 = $3;
-     $2413 = $3;
-     $2414 = HEAP32[$2413>>2]|0;
-     $2415 = $109;
-     $2416 = -$2415;
-     $2417 = $2416;
-     _mrb_float_value_1175($111,$2414,$2417);
-     ;HEAP32[$$byval_copy22>>2]=HEAP32[$111>>2]|0;HEAP32[$$byval_copy22+4>>2]=HEAP32[$111+4>>2]|0;
-     $2418 = (_new_lit($2412,$$byval_copy22)|0);
-     $110 = $2418;
-     $2419 = $3;
-     $2420 = $3;
-     $2421 = ((($2420)) + 172|0);
-     $2422 = HEAP32[$2421>>2]|0;
-     $2423 = $2422 & 511;
-     $2424 = $2423 << 23;
-     $2425 = 2 | $2424;
-     $2426 = $110;
-     $2427 = $2426 & 65535;
-     $2428 = $2427 << 7;
-     $2429 = $2425 | $2428;
-     (_genop($2419,$2429)|0);
-    } else {
-     $2430 = $106;
-     $2431 = ($2430|0)<(32767);
-     $2432 = $106;
-     $2433 = ($2432|0)>(-32767);
-     $or$cond9 = $2431 & $2433;
-     $2434 = $3;
-     if ($or$cond9) {
-      $2435 = ((($2434)) + 172|0);
-      $2436 = HEAP32[$2435>>2]|0;
-      $2437 = $2436 & 511;
-      $2438 = $2437 << 23;
-      $2439 = 3 | $2438;
-      $2440 = $106;
-      $2441 = (($2440) + 32767)|0;
-      $2442 = $2441 & 65535;
-      $2443 = $2442 << 7;
-      $2444 = $2439 | $2443;
-      $107 = $2444;
-     } else {
-      $2445 = $106;
-      _mrb_fixnum_value_1173($113,$2445);
-      ;HEAP32[$$byval_copy23>>2]=HEAP32[$113>>2]|0;HEAP32[$$byval_copy23+4>>2]=HEAP32[$113+4>>2]|0;
-      $2446 = (_new_lit($2434,$$byval_copy23)|0);
-      $112 = $2446;
-      $2447 = $3;
-      $2448 = ((($2447)) + 172|0);
-      $2449 = HEAP32[$2448>>2]|0;
-      $2450 = $2449 & 511;
-      $2451 = $2450 << 23;
-      $2452 = 2 | $2451;
-      $2453 = $112;
-      $2454 = $2453 & 65535;
-      $2455 = $2454 << 7;
-      $2456 = $2452 | $2455;
-      $107 = $2456;
-     }
-     $2457 = $3;
-     $2458 = $107;
-     (_genop($2457,$2458)|0);
-    }
-    $2459 = $3;
-    _push_($2459);
-    STACKTOP = sp;return;
-    break;
-   }
-   default: {
-    $2460 = $3;
-    $2461 = $3;
-    $2462 = HEAP32[$2461>>2]|0;
-    $2463 = (_mrb_intern_static($2462,69660,1)|0);
-    $2464 = (_new_msym($2460,$2463)|0);
-    $114 = $2464;
-    $2465 = $3;
-    $2466 = $3;
-    $2467 = ((($2466)) + 172|0);
-    $2468 = HEAP32[$2467>>2]|0;
-    $2469 = $2468 & 511;
-    $2470 = $2469 << 23;
-    $2471 = 3 | $2470;
-    (_genop($2465,$2471)|0);
-    $2472 = $3;
-    _push_($2472);
-    $2473 = $3;
-    $2474 = $4;
-    _codegen($2473,$2474,1);
-    $2475 = $3;
-    $2476 = ((($2475)) + 172|0);
-    $2477 = HEAP32[$2476>>2]|0;
-    $2478 = (($2477) + -1)|0;
-    HEAP32[$2476>>2] = $2478;
-    $2479 = $3;
-    $2480 = ((($2479)) + 172|0);
-    $2481 = HEAP32[$2480>>2]|0;
-    $2482 = (($2481) + -1)|0;
-    HEAP32[$2480>>2] = $2482;
-    $2483 = $3;
-    $2484 = $3;
-    $2485 = ((($2484)) + 172|0);
-    $2486 = HEAP32[$2485>>2]|0;
-    $2487 = $2486 & 511;
-    $2488 = $2487 << 23;
-    $2489 = 46 | $2488;
-    $2490 = $114;
-    $2491 = $2490 & 511;
-    $2492 = $2491 << 14;
-    $2493 = $2489 | $2492;
-    $2494 = $2493 | 256;
-    (_genop($2483,$2494)|0);
-    STACKTOP = sp;return;
-   }
-   }
-   break;
-  }
-  case 55:  {
-   $2495 = $5;
-   $2496 = ($2495|0)!=(0);
-   if (!($2496)) {
-    STACKTOP = sp;return;
-   }
-   $2497 = $4;
-   $2498 = HEAP32[$2497>>2]|0;
-   $115 = $2498;
-   $2499 = $4;
-   $2500 = ((($2499)) + 4|0);
-   $2501 = HEAP32[$2500>>2]|0;
-   $2502 = $2501;
-   $116 = $2502;
-   $2503 = $3;
-   $2504 = HEAP32[$2503>>2]|0;
-   $2505 = (_mrb_gc_arena_save($2504)|0);
-   $117 = $2505;
-   $2506 = $3;
-   $2507 = $3;
-   $2508 = HEAP32[$2507>>2]|0;
-   $2509 = $115;
-   $2510 = $116;
-   _mrb_str_new($119,$2508,$2509,$2510);
-   ;HEAP32[$$byval_copy24>>2]=HEAP32[$119>>2]|0;HEAP32[$$byval_copy24+4>>2]=HEAP32[$119+4>>2]|0;
-   $2511 = (_new_lit($2506,$$byval_copy24)|0);
-   $118 = $2511;
-   $2512 = $3;
-   $2513 = HEAP32[$2512>>2]|0;
-   $2514 = $117;
-   _mrb_gc_arena_restore($2513,$2514);
-   $2515 = $3;
-   $2516 = $3;
-   $2517 = ((($2516)) + 172|0);
-   $2518 = HEAP32[$2517>>2]|0;
-   $2519 = $2518 & 511;
-   $2520 = $2519 << 23;
-   $2521 = 61 | $2520;
-   $2522 = $118;
-   $2523 = $2522 & 65535;
-   $2524 = $2523 << 7;
-   $2525 = $2521 | $2524;
-   (_genop($2515,$2525)|0);
-   $2526 = $3;
-   _push_($2526);
-   STACKTOP = sp;return;
-   break;
-  }
-  case 99:  {
-   $2527 = $4;
-   $2528 = ((($2527)) + 16|0);
-   $2529 = HEAP32[$2528>>2]|0;
-   $4 = $2529;
-   break;
-  }
-  case 56:  {
-   break;
-  }
-  case 101:  {
-   $2585 = $3;
-   $2586 = $4;
-   $2587 = $5;
-   _gen_literal_array($2585,$2586,0,$2587);
-   STACKTOP = sp;return;
-   break;
-  }
-  case 102:  {
-   $2588 = $3;
-   $2589 = $4;
-   $2590 = $5;
-   _gen_literal_array($2588,$2589,1,$2590);
-   STACKTOP = sp;return;
-   break;
-  }
-  case 58:  {
-   $2591 = $3;
-   $2592 = HEAP32[$2591>>2]|0;
-   $2593 = (_mrb_gc_arena_save($2592)|0);
-   $123 = $2593;
-   $2594 = $3;
-   $2595 = $3;
-   $2596 = HEAP32[$2595>>2]|0;
-   $2597 = (_mrb_intern_static($2596,69662,6)|0);
-   $2598 = (_new_sym_1167($2594,$2597)|0);
-   $124 = $2598;
-   $2599 = $5;
-   $2600 = ($2599|0)==(0);
-   if ($2600) {
-    $2601 = $3;
-    _push_($2601);
-   }
-   $2602 = $3;
-   $2603 = $3;
-   $2604 = ((($2603)) + 172|0);
-   $2605 = HEAP32[$2604>>2]|0;
-   $2606 = $2605 & 511;
-   $2607 = $2606 << 23;
-   $2608 = 66 | $2607;
-   (_genop($2602,$2608)|0);
-   $2609 = $3;
-   $2610 = $3;
-   $2611 = ((($2610)) + 172|0);
-   $2612 = HEAP32[$2611>>2]|0;
-   $2613 = $2612 & 511;
-   $2614 = $2613 << 23;
-   $2615 = 19 | $2614;
-   $2616 = $124;
-   $2617 = $2616 & 65535;
-   $2618 = $2617 << 7;
-   $2619 = $2615 | $2618;
-   (_genop($2609,$2619)|0);
-   $2620 = $3;
-   _push_($2620);
-   $2621 = $3;
-   $2622 = $4;
-   $2623 = HEAP32[$2622>>2]|0;
-   _codegen($2621,$2623,1);
-   $2624 = $4;
-   $2625 = ((($2624)) + 4|0);
-   $2626 = HEAP32[$2625>>2]|0;
-   $122 = $2626;
-   while(1) {
-    $2627 = $122;
-    $2628 = ($2627|0)!=(0|0);
-    if (!($2628)) {
-     break;
-    }
-    $2629 = $122;
-    $2630 = HEAP32[$2629>>2]|0;
-    $2631 = HEAP32[$2630>>2]|0;
-    $2632 = $2631;
-    $2633 = ($2632|0)==(57);
-    if ($2633) {
-     $2634 = $122;
-     $2635 = HEAP32[$2634>>2]|0;
-     HEAP32[$2635>>2] = (55);
-    }
-    $2636 = $3;
-    $2637 = $122;
-    $2638 = HEAP32[$2637>>2]|0;
-    _codegen($2636,$2638,1);
-    $2639 = $3;
-    $2640 = ((($2639)) + 172|0);
-    $2641 = HEAP32[$2640>>2]|0;
-    $2642 = (($2641) + -1)|0;
-    HEAP32[$2640>>2] = $2642;
-    $2643 = $3;
-    $2644 = ((($2643)) + 172|0);
-    $2645 = HEAP32[$2644>>2]|0;
-    $2646 = (($2645) + -1)|0;
-    HEAP32[$2644>>2] = $2646;
-    $2647 = $3;
-    $2648 = $3;
-    $2649 = ((($2648)) + 172|0);
-    $2650 = HEAP32[$2649>>2]|0;
-    $2651 = $2650 & 511;
-    $2652 = $2651 << 23;
-    $2653 = 62 | $2652;
-    $2654 = $3;
-    $2655 = ((($2654)) + 172|0);
-    $2656 = HEAP32[$2655>>2]|0;
-    $2657 = (($2656) + 1)|0;
-    $2658 = $2657 & 511;
-    $2659 = $2658 << 14;
-    $2660 = $2653 | $2659;
-    (_genop_peep($2647,$2660,1)|0);
-    $2661 = $3;
-    _push_($2661);
-    $2662 = $122;
-    $2663 = ((($2662)) + 4|0);
-    $2664 = HEAP32[$2663>>2]|0;
-    $122 = $2664;
-   }
-   $2665 = $3;
-   $2666 = ((($2665)) + 172|0);
-   $2667 = HEAP32[$2666>>2]|0;
-   $2668 = (($2667) + -1)|0;
-   HEAP32[$2666>>2] = $2668;
-   $2669 = $3;
-   $2670 = ((($2669)) + 172|0);
-   $2671 = HEAP32[$2670>>2]|0;
-   $2672 = (($2671) + -1)|0;
-   HEAP32[$2670>>2] = $2672;
-   $2673 = $3;
-   $2674 = $3;
-   $2675 = HEAP32[$2674>>2]|0;
-   $2676 = (_mrb_intern_static($2675,69669,1)|0);
-   $2677 = (_new_sym_1167($2673,$2676)|0);
-   $124 = $2677;
-   $2678 = $3;
-   $2679 = $3;
-   $2680 = ((($2679)) + 172|0);
-   $2681 = HEAP32[$2680>>2]|0;
-   $2682 = $2681 & 511;
-   $2683 = $2682 << 23;
-   $2684 = 32 | $2683;
-   $2685 = $124;
-   $2686 = $2685 & 511;
-   $2687 = $2686 << 14;
-   $2688 = $2684 | $2687;
-   $2689 = $2688 | 128;
-   (_genop($2678,$2689)|0);
-   $2690 = $5;
-   $2691 = ($2690|0)==(0);
-   $2692 = $3;
-   if ($2691) {
-    $2693 = ((($2692)) + 172|0);
-    $2694 = HEAP32[$2693>>2]|0;
-    $2695 = (($2694) + -1)|0;
-    HEAP32[$2693>>2] = $2695;
-   } else {
-    _push_($2692);
-   }
-   $2696 = $3;
-   $2697 = HEAP32[$2696>>2]|0;
-   $2698 = $123;
-   _mrb_gc_arena_restore($2697,$2698);
-   STACKTOP = sp;return;
-   break;
-  }
-  case 57:  {
-   $2699 = $4;
-   $2700 = HEAP32[$2699>>2]|0;
-   $125 = $2700;
-   $2701 = $4;
-   $2702 = ((($2701)) + 4|0);
-   $2703 = HEAP32[$2702>>2]|0;
-   $2704 = $2703;
-   $126 = $2704;
-   $2705 = $3;
-   $2706 = HEAP32[$2705>>2]|0;
-   $2707 = (_mrb_gc_arena_save($2706)|0);
-   $127 = $2707;
-   $2708 = $3;
-   $2709 = $3;
-   $2710 = HEAP32[$2709>>2]|0;
-   $2711 = (_mrb_intern_static($2710,69662,6)|0);
-   $2712 = (_new_sym_1167($2708,$2711)|0);
-   $128 = $2712;
-   $2713 = $3;
-   $2714 = $3;
-   $2715 = HEAP32[$2714>>2]|0;
-   $2716 = $125;
-   $2717 = $126;
-   _mrb_str_new($130,$2715,$2716,$2717);
-   ;HEAP32[$$byval_copy25>>2]=HEAP32[$130>>2]|0;HEAP32[$$byval_copy25+4>>2]=HEAP32[$130+4>>2]|0;
-   $2718 = (_new_lit($2713,$$byval_copy25)|0);
-   $129 = $2718;
-   $2719 = $5;
-   $2720 = ($2719|0)==(0);
-   if ($2720) {
-    $2721 = $3;
-    _push_($2721);
-   }
-   $2722 = $3;
-   $2723 = $3;
-   $2724 = ((($2723)) + 172|0);
-   $2725 = HEAP32[$2724>>2]|0;
-   $2726 = $2725 & 511;
-   $2727 = $2726 << 23;
-   $2728 = 66 | $2727;
-   (_genop($2722,$2728)|0);
-   $2729 = $3;
-   $2730 = $3;
-   $2731 = ((($2730)) + 172|0);
-   $2732 = HEAP32[$2731>>2]|0;
-   $2733 = $2732 & 511;
-   $2734 = $2733 << 23;
-   $2735 = 19 | $2734;
-   $2736 = $128;
-   $2737 = $2736 & 65535;
-   $2738 = $2737 << 7;
-   $2739 = $2735 | $2738;
-   (_genop($2729,$2739)|0);
-   $2740 = $3;
-   _push_($2740);
-   $2741 = $3;
-   $2742 = $3;
-   $2743 = ((($2742)) + 172|0);
-   $2744 = HEAP32[$2743>>2]|0;
-   $2745 = $2744 & 511;
-   $2746 = $2745 << 23;
-   $2747 = 61 | $2746;
-   $2748 = $129;
-   $2749 = $2748 & 65535;
-   $2750 = $2749 << 7;
-   $2751 = $2747 | $2750;
-   (_genop($2741,$2751)|0);
-   $2752 = $3;
-   $2753 = ((($2752)) + 172|0);
-   $2754 = HEAP32[$2753>>2]|0;
-   $2755 = (($2754) + -1)|0;
-   HEAP32[$2753>>2] = $2755;
-   $2756 = $3;
-   $2757 = $3;
-   $2758 = HEAP32[$2757>>2]|0;
-   $2759 = (_mrb_intern_static($2758,69669,1)|0);
-   $2760 = (_new_sym_1167($2756,$2759)|0);
-   $128 = $2760;
-   $2761 = $3;
-   $2762 = $3;
-   $2763 = ((($2762)) + 172|0);
-   $2764 = HEAP32[$2763>>2]|0;
-   $2765 = $2764 & 511;
-   $2766 = $2765 << 23;
-   $2767 = 32 | $2766;
-   $2768 = $128;
-   $2769 = $2768 & 511;
-   $2770 = $2769 << 14;
-   $2771 = $2767 | $2770;
-   $2772 = $2771 | 128;
-   (_genop($2761,$2772)|0);
-   $2773 = $5;
-   $2774 = ($2773|0)==(0);
-   $2775 = $3;
-   if ($2774) {
-    $2776 = ((($2775)) + 172|0);
-    $2777 = HEAP32[$2776>>2]|0;
-    $2778 = (($2777) + -1)|0;
-    HEAP32[$2776>>2] = $2778;
-   } else {
-    _push_($2775);
-   }
-   $2779 = $3;
-   $2780 = HEAP32[$2779>>2]|0;
-   $2781 = $127;
-   _mrb_gc_arena_restore($2780,$2781);
-   STACKTOP = sp;return;
-   break;
-  }
-  case 59:  {
-   $2782 = $5;
-   $2783 = ($2782|0)!=(0);
-   if (!($2783)) {
-    STACKTOP = sp;return;
-   }
-   $2784 = $4;
-   $2785 = HEAP32[$2784>>2]|0;
-   $131 = $2785;
-   $2786 = $4;
-   $2787 = ((($2786)) + 4|0);
-   $2788 = HEAP32[$2787>>2]|0;
-   $2789 = HEAP32[$2788>>2]|0;
-   $132 = $2789;
-   $2790 = $4;
-   $2791 = ((($2790)) + 4|0);
-   $2792 = HEAP32[$2791>>2]|0;
-   $2793 = ((($2792)) + 4|0);
-   $2794 = HEAP32[$2793>>2]|0;
-   $133 = $2794;
-   $2795 = $3;
-   $2796 = HEAP32[$2795>>2]|0;
-   $2797 = (_mrb_gc_arena_save($2796)|0);
-   $134 = $2797;
-   $2798 = $3;
-   $2799 = $3;
-   $2800 = HEAP32[$2799>>2]|0;
-   $2801 = (_mrb_intern_static($2800,69671,6)|0);
-   $2802 = (_new_sym_1167($2798,$2801)|0);
-   $135 = $2802;
-   $2803 = $3;
-   $2804 = $3;
-   $2805 = HEAP32[$2804>>2]|0;
-   $2806 = $131;
-   _mrb_str_new_cstr($137,$2805,$2806);
-   ;HEAP32[$$byval_copy26>>2]=HEAP32[$137>>2]|0;HEAP32[$$byval_copy26+4>>2]=HEAP32[$137+4>>2]|0;
-   $2807 = (_new_lit($2803,$$byval_copy26)|0);
-   $136 = $2807;
-   $138 = 1;
-   $2808 = $3;
-   $2809 = $3;
-   $2810 = ((($2809)) + 172|0);
-   $2811 = HEAP32[$2810>>2]|0;
-   $2812 = $2811 & 511;
-   $2813 = $2812 << 23;
-   $2814 = 66 | $2813;
-   (_genop($2808,$2814)|0);
-   $2815 = $3;
-   $2816 = $3;
-   $2817 = ((($2816)) + 172|0);
-   $2818 = HEAP32[$2817>>2]|0;
-   $2819 = $2818 & 511;
-   $2820 = $2819 << 23;
-   $2821 = 19 | $2820;
-   $2822 = $135;
-   $2823 = $2822 & 65535;
-   $2824 = $2823 << 7;
-   $2825 = $2821 | $2824;
-   (_genop($2815,$2825)|0);
-   $2826 = $3;
-   _push_($2826);
-   $2827 = $3;
-   $2828 = $3;
-   $2829 = ((($2828)) + 172|0);
-   $2830 = HEAP32[$2829>>2]|0;
-   $2831 = $2830 & 511;
-   $2832 = $2831 << 23;
-   $2833 = 61 | $2832;
-   $2834 = $136;
-   $2835 = $2834 & 65535;
-   $2836 = $2835 << 7;
-   $2837 = $2833 | $2836;
-   (_genop($2827,$2837)|0);
-   $2838 = $132;
-   $2839 = ($2838|0)!=(0|0);
-   $2840 = $133;
-   $2841 = ($2840|0)!=(0|0);
-   $or$cond11 = $2839 | $2841;
-   if ($or$cond11) {
-    $2842 = $3;
-    _push_($2842);
-    $2843 = $132;
-    $2844 = ($2843|0)!=(0|0);
-    $2845 = $3;
-    $2846 = $3;
-    if ($2844) {
-     $2847 = HEAP32[$2846>>2]|0;
-     $2848 = $132;
-     _mrb_str_new_cstr($139,$2847,$2848);
-     ;HEAP32[$$byval_copy27>>2]=HEAP32[$139>>2]|0;HEAP32[$$byval_copy27+4>>2]=HEAP32[$139+4>>2]|0;
-     $2849 = (_new_lit($2845,$$byval_copy27)|0);
-     $136 = $2849;
-     $2850 = $3;
-     $2851 = $3;
-     $2852 = ((($2851)) + 172|0);
-     $2853 = HEAP32[$2852>>2]|0;
-     $2854 = $2853 & 511;
-     $2855 = $2854 << 23;
-     $2856 = 61 | $2855;
-     $2857 = $136;
-     $2858 = $2857 & 65535;
-     $2859 = $2858 << 7;
-     $2860 = $2856 | $2859;
-     (_genop($2850,$2860)|0);
-    } else {
-     $2861 = ((($2846)) + 172|0);
-     $2862 = HEAP32[$2861>>2]|0;
-     $2863 = $2862 & 511;
-     $2864 = $2863 << 23;
-     $2865 = 5 | $2864;
-     (_genop($2845,$2865)|0);
-    }
-    $2866 = $138;
-    $2867 = (($2866) + 1)|0;
-    $138 = $2867;
-    $2868 = $133;
-    $2869 = ($2868|0)!=(0|0);
-    if ($2869) {
-     $2870 = $3;
-     _push_($2870);
-     $2871 = $3;
-     $2872 = $3;
-     $2873 = HEAP32[$2872>>2]|0;
-     $2874 = $133;
-     _mrb_str_new($140,$2873,$2874,1);
-     ;HEAP32[$$byval_copy28>>2]=HEAP32[$140>>2]|0;HEAP32[$$byval_copy28+4>>2]=HEAP32[$140+4>>2]|0;
-     $2875 = (_new_lit($2871,$$byval_copy28)|0);
-     $136 = $2875;
-     $2876 = $3;
-     $2877 = $3;
-     $2878 = ((($2877)) + 172|0);
-     $2879 = HEAP32[$2878>>2]|0;
-     $2880 = $2879 & 511;
-     $2881 = $2880 << 23;
-     $2882 = 61 | $2881;
-     $2883 = $136;
-     $2884 = $2883 & 65535;
-     $2885 = $2884 << 7;
-     $2886 = $2882 | $2885;
-     (_genop($2876,$2886)|0);
-     $2887 = $138;
-     $2888 = (($2887) + 1)|0;
-     $138 = $2888;
-     $2889 = $3;
-     $2890 = ((($2889)) + 172|0);
-     $2891 = HEAP32[$2890>>2]|0;
-     $2892 = (($2891) + -1)|0;
-     HEAP32[$2890>>2] = $2892;
-    }
-    $2893 = $3;
-    $2894 = ((($2893)) + 172|0);
-    $2895 = HEAP32[$2894>>2]|0;
-    $2896 = (($2895) + -1)|0;
-    HEAP32[$2894>>2] = $2896;
-   }
-   $2897 = $3;
-   $2898 = ((($2897)) + 172|0);
-   $2899 = HEAP32[$2898>>2]|0;
-   $2900 = (($2899) + -1)|0;
-   HEAP32[$2898>>2] = $2900;
-   $2901 = $3;
-   $2902 = $3;
-   $2903 = HEAP32[$2902>>2]|0;
-   $2904 = (_mrb_intern_static($2903,69678,7)|0);
-   $2905 = (_new_sym_1167($2901,$2904)|0);
-   $135 = $2905;
-   $2906 = $3;
-   $2907 = $3;
-   $2908 = ((($2907)) + 172|0);
-   $2909 = HEAP32[$2908>>2]|0;
-   $2910 = $2909 & 511;
-   $2911 = $2910 << 23;
-   $2912 = 32 | $2911;
-   $2913 = $135;
-   $2914 = $2913 & 511;
-   $2915 = $2914 << 14;
-   $2916 = $2912 | $2915;
-   $2917 = $138;
-   $2918 = $2917 & 127;
-   $2919 = $2918 << 7;
-   $2920 = $2916 | $2919;
-   (_genop($2906,$2920)|0);
-   $2921 = $3;
-   $2922 = HEAP32[$2921>>2]|0;
-   $2923 = $134;
-   _mrb_gc_arena_restore($2922,$2923);
-   $2924 = $3;
-   _push_($2924);
-   STACKTOP = sp;return;
-   break;
-  }
-  case 60:  {
-   $2925 = $5;
-   $2926 = ($2925|0)!=(0);
-   $2927 = $4;
-   $2928 = HEAP32[$2927>>2]|0;
-   if (!($2926)) {
-    $150 = $2928;
-    while(1) {
-     $3098 = $150;
-     $3099 = ($3098|0)!=(0|0);
-     if (!($3099)) {
-      break;
-     }
-     $3100 = $150;
-     $3101 = HEAP32[$3100>>2]|0;
-     $3102 = HEAP32[$3101>>2]|0;
-     $3103 = $3102;
-     $3104 = ($3103|0)!=(55);
-     if ($3104) {
-      $3105 = $3;
-      $3106 = $150;
-      $3107 = HEAP32[$3106>>2]|0;
-      _codegen($3105,$3107,0);
-     }
-     $3108 = $150;
-     $3109 = ((($3108)) + 4|0);
-     $3110 = HEAP32[$3109>>2]|0;
-     $150 = $3110;
-    }
-    STACKTOP = sp;return;
-   }
-   $141 = $2928;
-   $2929 = $3;
-   $2930 = HEAP32[$2929>>2]|0;
-   $2931 = (_mrb_gc_arena_save($2930)|0);
-   $142 = $2931;
-   $2932 = $3;
-   $2933 = $3;
-   $2934 = HEAP32[$2933>>2]|0;
-   $2935 = (_mrb_intern_static($2934,69671,6)|0);
-   $2936 = (_new_sym_1167($2932,$2935)|0);
-   $143 = $2936;
-   $144 = 1;
-   $2937 = $3;
-   $2938 = $3;
-   $2939 = ((($2938)) + 172|0);
-   $2940 = HEAP32[$2939>>2]|0;
-   $2941 = $2940 & 511;
-   $2942 = $2941 << 23;
-   $2943 = 66 | $2942;
-   (_genop($2937,$2943)|0);
-   $2944 = $3;
-   $2945 = $3;
-   $2946 = ((($2945)) + 172|0);
-   $2947 = HEAP32[$2946>>2]|0;
-   $2948 = $2947 & 511;
-   $2949 = $2948 << 23;
-   $2950 = 19 | $2949;
-   $2951 = $143;
-   $2952 = $2951 & 65535;
-   $2953 = $2952 << 7;
-   $2954 = $2950 | $2953;
-   (_genop($2944,$2954)|0);
-   $2955 = $3;
-   _push_($2955);
-   $2956 = $3;
-   $2957 = $141;
-   $2958 = HEAP32[$2957>>2]|0;
-   _codegen($2956,$2958,1);
-   $2959 = $141;
-   $2960 = ((($2959)) + 4|0);
-   $2961 = HEAP32[$2960>>2]|0;
-   $141 = $2961;
-   while(1) {
-    $2962 = $141;
-    $2963 = ($2962|0)!=(0|0);
-    if (!($2963)) {
-     break;
-    }
-    $2964 = $3;
-    $2965 = $141;
-    $2966 = HEAP32[$2965>>2]|0;
-    _codegen($2964,$2966,1);
-    $2967 = $3;
-    $2968 = ((($2967)) + 172|0);
-    $2969 = HEAP32[$2968>>2]|0;
-    $2970 = (($2969) + -1)|0;
-    HEAP32[$2968>>2] = $2970;
-    $2971 = $3;
-    $2972 = ((($2971)) + 172|0);
-    $2973 = HEAP32[$2972>>2]|0;
-    $2974 = (($2973) + -1)|0;
-    HEAP32[$2972>>2] = $2974;
-    $2975 = $3;
-    $2976 = $3;
-    $2977 = ((($2976)) + 172|0);
-    $2978 = HEAP32[$2977>>2]|0;
-    $2979 = $2978 & 511;
-    $2980 = $2979 << 23;
-    $2981 = 62 | $2980;
-    $2982 = $3;
-    $2983 = ((($2982)) + 172|0);
-    $2984 = HEAP32[$2983>>2]|0;
-    $2985 = (($2984) + 1)|0;
-    $2986 = $2985 & 511;
-    $2987 = $2986 << 14;
-    $2988 = $2981 | $2987;
-    (_genop_peep($2975,$2988,1)|0);
-    $2989 = $3;
-    _push_($2989);
-    $2990 = $141;
-    $2991 = ((($2990)) + 4|0);
-    $2992 = HEAP32[$2991>>2]|0;
-    $141 = $2992;
-   }
-   $2993 = $4;
-   $2994 = ((($2993)) + 4|0);
-   $2995 = HEAP32[$2994>>2]|0;
-   $2996 = ((($2995)) + 4|0);
-   $2997 = HEAP32[$2996>>2]|0;
-   $141 = $2997;
-   $2998 = $141;
-   $2999 = HEAP32[$2998>>2]|0;
-   $3000 = ($2999|0)!=(0|0);
-   if ($3000) {
-    $3001 = $141;
-    $3002 = HEAP32[$3001>>2]|0;
-    $146 = $3002;
-    $3003 = $3;
-    $3004 = $3;
-    $3005 = HEAP32[$3004>>2]|0;
-    $3006 = $146;
-    _mrb_str_new_cstr($147,$3005,$3006);
-    ;HEAP32[$$byval_copy29>>2]=HEAP32[$147>>2]|0;HEAP32[$$byval_copy29+4>>2]=HEAP32[$147+4>>2]|0;
-    $3007 = (_new_lit($3003,$$byval_copy29)|0);
-    $145 = $3007;
-    $3008 = $3;
-    $3009 = $4;
-    $3010 = HEAP32[$3009>>2]|0;
-    _codegen($3008,$3010,1);
-    $3011 = $3;
-    $3012 = $3;
-    $3013 = ((($3012)) + 172|0);
-    $3014 = HEAP32[$3013>>2]|0;
-    $3015 = $3014 & 511;
-    $3016 = $3015 << 23;
-    $3017 = 61 | $3016;
-    $3018 = $145;
-    $3019 = $3018 & 65535;
-    $3020 = $3019 << 7;
-    $3021 = $3017 | $3020;
-    (_genop($3011,$3021)|0);
-    $3022 = $3;
-    $3023 = ((($3022)) + 172|0);
-    $3024 = HEAP32[$3023>>2]|0;
-    $3025 = (($3024) + -1)|0;
-    HEAP32[$3023>>2] = $3025;
-    $3026 = $3;
-    $3027 = $3;
-    $3028 = ((($3027)) + 172|0);
-    $3029 = HEAP32[$3028>>2]|0;
-    $3030 = $3029 & 511;
-    $3031 = $3030 << 23;
-    $3032 = 62 | $3031;
-    $3033 = $3;
-    $3034 = ((($3033)) + 172|0);
-    $3035 = HEAP32[$3034>>2]|0;
-    $3036 = (($3035) + 1)|0;
-    $3037 = $3036 & 511;
-    $3038 = $3037 << 14;
-    $3039 = $3032 | $3038;
-    (_genop_peep($3026,$3039,1)|0);
-   }
-   $3040 = $141;
-   $3041 = ((($3040)) + 4|0);
-   $3042 = HEAP32[$3041>>2]|0;
-   $3043 = ($3042|0)!=(0|0);
-   if ($3043) {
-    $3044 = $141;
-    $3045 = ((($3044)) + 4|0);
-    $3046 = HEAP32[$3045>>2]|0;
-    $148 = $3046;
-    $3047 = $3;
-    _push_($3047);
-    $3048 = $3;
-    $3049 = $3;
-    $3050 = HEAP32[$3049>>2]|0;
-    $3051 = $148;
-    _mrb_str_new_cstr($149,$3050,$3051);
-    ;HEAP32[$$byval_copy30>>2]=HEAP32[$149>>2]|0;HEAP32[$$byval_copy30+4>>2]=HEAP32[$149+4>>2]|0;
-    $3052 = (_new_lit($3048,$$byval_copy30)|0);
-    $145 = $3052;
-    $3053 = $3;
-    $3054 = $3;
-    $3055 = ((($3054)) + 172|0);
-    $3056 = HEAP32[$3055>>2]|0;
-    $3057 = $3056 & 511;
-    $3058 = $3057 << 23;
-    $3059 = 61 | $3058;
-    $3060 = $145;
-    $3061 = $3060 & 65535;
-    $3062 = $3061 << 7;
-    $3063 = $3059 | $3062;
-    (_genop($3053,$3063)|0);
-    $3064 = $144;
-    $3065 = (($3064) + 1)|0;
-    $144 = $3065;
-    $3066 = $3;
-    $3067 = ((($3066)) + 172|0);
-    $3068 = HEAP32[$3067>>2]|0;
-    $3069 = (($3068) + -1)|0;
-    HEAP32[$3067>>2] = $3069;
-   }
-   $3070 = $3;
-   $3071 = ((($3070)) + 172|0);
-   $3072 = HEAP32[$3071>>2]|0;
-   $3073 = (($3072) + -1)|0;
-   HEAP32[$3071>>2] = $3073;
-   $3074 = $3;
-   $3075 = $3;
-   $3076 = HEAP32[$3075>>2]|0;
-   $3077 = (_mrb_intern_static($3076,69678,7)|0);
-   $3078 = (_new_sym_1167($3074,$3077)|0);
-   $143 = $3078;
-   $3079 = $3;
-   $3080 = $3;
-   $3081 = ((($3080)) + 172|0);
-   $3082 = HEAP32[$3081>>2]|0;
-   $3083 = $3082 & 511;
-   $3084 = $3083 << 23;
-   $3085 = 32 | $3084;
-   $3086 = $143;
-   $3087 = $3086 & 511;
-   $3088 = $3087 << 14;
-   $3089 = $3085 | $3088;
-   $3090 = $144;
-   $3091 = $3090 & 127;
-   $3092 = $3091 << 7;
-   $3093 = $3089 | $3092;
-   (_genop($3079,$3093)|0);
-   $3094 = $3;
-   $3095 = HEAP32[$3094>>2]|0;
-   $3096 = $142;
-   _mrb_gc_arena_restore($3095,$3096);
-   $3097 = $3;
-   _push_($3097);
-   STACKTOP = sp;return;
-   break;
-  }
-  case 54:  {
-   $3111 = $5;
-   $3112 = ($3111|0)!=(0);
-   if (!($3112)) {
-    STACKTOP = sp;return;
-   }
-   $3113 = $3;
-   $3114 = $4;
-   $3115 = $3114;
-   $3116 = (_new_sym_1167($3113,$3115)|0);
-   $151 = $3116;
-   $3117 = $3;
-   $3118 = $3;
-   $3119 = ((($3118)) + 172|0);
-   $3120 = HEAP32[$3119>>2]|0;
-   $3121 = $3120 & 511;
-   $3122 = $3121 << 23;
-   $3123 = 4 | $3122;
-   $3124 = $151;
-   $3125 = $3124 & 65535;
-   $3126 = $3125 << 7;
-   $3127 = $3123 | $3126;
-   (_genop($3117,$3127)|0);
-   $3128 = $3;
-   _push_($3128);
-   STACKTOP = sp;return;
-   break;
-  }
-  case 97:  {
-   $3129 = $3;
-   $3130 = $4;
-   $3131 = $5;
-   _codegen($3129,$3130,$3131);
-   $3132 = $5;
-   $3133 = ($3132|0)!=(0);
-   if (!($3133)) {
-    STACKTOP = sp;return;
-   }
-   $3134 = $3;
-   _gen_send_intern($3134);
-   STACKTOP = sp;return;
-   break;
-  }
-  case 85:  {
-   $3135 = $5;
-   $3136 = ($3135|0)!=(0);
-   if (!($3136)) {
-    STACKTOP = sp;return;
-   }
-   $3137 = $3;
-   $3138 = $3;
-   $3139 = ((($3138)) + 172|0);
-   $3140 = HEAP32[$3139>>2]|0;
-   $3141 = $3140 & 511;
-   $3142 = $3141 << 23;
-   $3143 = 6 | $3142;
-   (_genop($3137,$3143)|0);
-   $3144 = $3;
-   _push_($3144);
-   STACKTOP = sp;return;
-   break;
-  }
-  case 86:  {
-   $3145 = $5;
-   $3146 = ($3145|0)!=(0);
-   if (!($3146)) {
-    STACKTOP = sp;return;
-   }
-   $3147 = $3;
-   $3148 = $3;
-   $3149 = ((($3148)) + 172|0);
-   $3150 = HEAP32[$3149>>2]|0;
-   $3151 = $3150 & 511;
-   $3152 = $3151 << 23;
-   $3153 = 5 | $3152;
-   (_genop($3147,$3153)|0);
-   $3154 = $3;
-   _push_($3154);
-   STACKTOP = sp;return;
-   break;
-  }
-  case 87:  {
-   $3155 = $5;
-   $3156 = ($3155|0)!=(0);
-   if (!($3156)) {
-    STACKTOP = sp;return;
-   }
-   $3157 = $3;
-   $3158 = $3;
-   $3159 = ((($3158)) + 172|0);
-   $3160 = HEAP32[$3159>>2]|0;
-   $3161 = $3160 & 511;
-   $3162 = $3161 << 23;
-   $3163 = 7 | $3162;
-   (_genop($3157,$3163)|0);
-   $3164 = $3;
-   _push_($3164);
-   STACKTOP = sp;return;
-   break;
-  }
-  case 88:  {
-   $3165 = $5;
-   $3166 = ($3165|0)!=(0);
-   if (!($3166)) {
-    STACKTOP = sp;return;
-   }
-   $3167 = $3;
-   $3168 = $3;
-   $3169 = ((($3168)) + 172|0);
-   $3170 = HEAP32[$3169>>2]|0;
-   $3171 = $3170 & 511;
-   $3172 = $3171 << 23;
-   $3173 = 8 | $3172;
-   (_genop($3167,$3173)|0);
-   $3174 = $3;
-   _push_($3174);
-   STACKTOP = sp;return;
-   break;
-  }
-  case 72:  {
-   $3175 = $3;
-   $3176 = $4;
-   $3177 = HEAP32[$3176>>2]|0;
-   $3178 = $3177;
-   $3179 = (_new_msym($3175,$3178)|0);
-   $152 = $3179;
-   $3180 = $3;
-   $3181 = $4;
-   $3182 = ((($3181)) + 4|0);
-   $3183 = HEAP32[$3182>>2]|0;
-   $3184 = $3183;
-   $3185 = (_new_msym($3180,$3184)|0);
-   $153 = $3185;
-   $3186 = $3;
-   $3187 = $3;
-   $3188 = HEAP32[$3187>>2]|0;
-   $3189 = (_mrb_intern_static($3188,69686,12)|0);
-   $3190 = (_new_msym($3186,$3189)|0);
-   $154 = $3190;
-   $3191 = $3;
-   $3192 = $3;
-   $3193 = ((($3192)) + 172|0);
-   $3194 = HEAP32[$3193>>2]|0;
-   $3195 = $3194 & 511;
-   $3196 = $3195 << 23;
-   $3197 = 72 | $3196;
-   (_genop($3191,$3197)|0);
-   $3198 = $3;
-   _push_($3198);
-   $3199 = $3;
-   $3200 = $3;
-   $3201 = ((($3200)) + 172|0);
-   $3202 = HEAP32[$3201>>2]|0;
-   $3203 = $3202 & 511;
-   $3204 = $3203 << 23;
-   $3205 = 4 | $3204;
-   $3206 = $152;
-   $3207 = $3206 & 65535;
-   $3208 = $3207 << 7;
-   $3209 = $3205 | $3208;
-   (_genop($3199,$3209)|0);
-   $3210 = $3;
-   _push_($3210);
-   $3211 = $3;
-   $3212 = $3;
-   $3213 = ((($3212)) + 172|0);
-   $3214 = HEAP32[$3213>>2]|0;
-   $3215 = $3214 & 511;
-   $3216 = $3215 << 23;
-   $3217 = 4 | $3216;
-   $3218 = $153;
-   $3219 = $3218 & 65535;
-   $3220 = $3219 << 7;
-   $3221 = $3217 | $3220;
-   (_genop($3211,$3221)|0);
-   $3222 = $3;
-   _push_($3222);
-   $3223 = $3;
-   $3224 = $3;
-   $3225 = ((($3224)) + 172|0);
-   $3226 = HEAP32[$3225>>2]|0;
-   $3227 = $3226 & 511;
-   $3228 = $3227 << 23;
-   $3229 = 5 | $3228;
-   (_genop($3223,$3229)|0);
-   $3230 = $3;
-   $3231 = ((($3230)) + 172|0);
-   $3232 = HEAP32[$3231>>2]|0;
-   $3233 = (($3232) - 3)|0;
-   HEAP32[$3231>>2] = $3233;
-   $3234 = $3;
-   $3235 = $3;
-   $3236 = ((($3235)) + 172|0);
-   $3237 = HEAP32[$3236>>2]|0;
-   $3238 = $3237 & 511;
-   $3239 = $3238 << 23;
-   $3240 = 32 | $3239;
-   $3241 = $154;
-   $3242 = $3241 & 511;
-   $3243 = $3242 << 14;
-   $3244 = $3240 | $3243;
-   $3245 = $3244 | 256;
-   (_genop($3234,$3245)|0);
-   $3246 = $5;
-   $3247 = ($3246|0)!=(0);
-   if (!($3247)) {
-    STACKTOP = sp;return;
-   }
-   $3248 = $3;
-   _push_($3248);
-   STACKTOP = sp;return;
-   break;
-  }
-  case 73:  {
-   $3249 = $3;
-   $3250 = $3;
-   $3251 = HEAP32[$3250>>2]|0;
-   $3252 = (_mrb_intern_static($3251,69699,12)|0);
-   $3253 = (_new_msym($3249,$3252)|0);
-   $155 = $3253;
-   $156 = 0;
-   $3254 = $4;
-   $157 = $3254;
-   $3255 = $3;
-   $3256 = $3;
-   $3257 = ((($3256)) + 172|0);
-   $3258 = HEAP32[$3257>>2]|0;
-   $3259 = $3258 & 511;
-   $3260 = $3259 << 23;
-   $3261 = 72 | $3260;
-   (_genop($3255,$3261)|0);
-   $3262 = $3;
-   _push_($3262);
-   while(1) {
-    $3263 = $157;
-    $3264 = ($3263|0)!=(0|0);
-    if (!($3264)) {
-     break;
-    }
-    $3265 = $3;
-    $3266 = $157;
-    $3267 = HEAP32[$3266>>2]|0;
-    $3268 = $3267;
-    $3269 = (_new_msym($3265,$3268)|0);
-    $158 = $3269;
-    $3270 = $3;
-    $3271 = $3;
-    $3272 = ((($3271)) + 172|0);
-    $3273 = HEAP32[$3272>>2]|0;
-    $3274 = $3273 & 511;
-    $3275 = $3274 << 23;
-    $3276 = 4 | $3275;
-    $3277 = $158;
-    $3278 = $3277 & 65535;
-    $3279 = $3278 << 7;
-    $3280 = $3276 | $3279;
-    (_genop($3270,$3280)|0);
-    $3281 = $3;
-    _push_($3281);
-    $3282 = $157;
-    $3283 = ((($3282)) + 4|0);
-    $3284 = HEAP32[$3283>>2]|0;
-    $157 = $3284;
-    $3285 = $156;
-    $3286 = (($3285) + 1)|0;
-    $156 = $3286;
-   }
-   $3287 = $156;
-   $3288 = (($3287) + 1)|0;
-   $3289 = $3;
-   $3290 = ((($3289)) + 172|0);
-   $3291 = HEAP32[$3290>>2]|0;
-   $3292 = (($3291) - ($3288))|0;
-   HEAP32[$3290>>2] = $3292;
-   $3293 = $3;
-   $3294 = $3;
-   $3295 = ((($3294)) + 172|0);
-   $3296 = HEAP32[$3295>>2]|0;
-   $3297 = $3296 & 511;
-   $3298 = $3297 << 23;
-   $3299 = 32 | $3298;
-   $3300 = $155;
-   $3301 = $3300 & 511;
-   $3302 = $3301 << 14;
-   $3303 = $3299 | $3302;
-   $3304 = $156;
-   $3305 = $3304 & 127;
-   $3306 = $3305 << 7;
-   $3307 = $3303 | $3306;
-   (_genop($3293,$3307)|0);
-   $3308 = $5;
-   $3309 = ($3308|0)!=(0);
-   if (!($3309)) {
-    STACKTOP = sp;return;
-   }
-   $3310 = $3;
-   _push_($3310);
-   STACKTOP = sp;return;
-   break;
-  }
-  case 74:  {
-   $3311 = $4;
-   $3312 = HEAP32[$3311>>2]|0;
-   $3313 = HEAP32[$3312>>2]|0;
-   $3314 = ($3313|0)==(0|0);
-   do {
-    if ($3314) {
-     $3315 = $3;
-     $3316 = $3;
-     $3317 = ((($3316)) + 172|0);
-     $3318 = HEAP32[$3317>>2]|0;
-     $3319 = $3318 & 511;
-     $3320 = $3319 << 23;
-     $3321 = 5 | $3320;
-     (_genop($3315,$3321)|0);
-     $3322 = $3;
-     _push_($3322);
-    } else {
-     $3323 = $4;
-     $3324 = HEAP32[$3323>>2]|0;
-     $3325 = HEAP32[$3324>>2]|0;
-     $3326 = ($3325|0)==((1)|0);
-     $3327 = $3;
-     if ($3326) {
-      $3328 = $3;
-      $3329 = ((($3328)) + 172|0);
-      $3330 = HEAP32[$3329>>2]|0;
-      $3331 = $3330 & 511;
-      $3332 = $3331 << 23;
-      $3333 = 66 | $3332;
-      (_genop($3327,$3333)|0);
-      $3334 = $3;
-      _push_($3334);
-      break;
-     } else {
-      $3335 = $4;
-      $3336 = HEAP32[$3335>>2]|0;
-      $3337 = HEAP32[$3336>>2]|0;
-      _codegen($3327,$3337,1);
-      break;
-     }
-    }
-   } while(0);
-   $3338 = $4;
-   $3339 = ((($3338)) + 4|0);
-   $3340 = HEAP32[$3339>>2]|0;
-   $3341 = HEAP32[$3340>>2]|0;
-   $3342 = ($3341|0)!=(0|0);
-   $3343 = $3;
-   if ($3342) {
-    $3344 = $4;
-    $3345 = ((($3344)) + 4|0);
-    $3346 = HEAP32[$3345>>2]|0;
-    $3347 = HEAP32[$3346>>2]|0;
-    _codegen($3343,$3347,1);
-   } else {
-    $3348 = $3;
-    $3349 = ((($3348)) + 172|0);
-    $3350 = HEAP32[$3349>>2]|0;
-    $3351 = $3350 & 511;
-    $3352 = $3351 << 23;
-    $3353 = 5 | $3352;
-    (_genop($3343,$3353)|0);
-    $3354 = $3;
-    _push_($3354);
-   }
-   $3355 = $3;
-   $3356 = ((($3355)) + 172|0);
-   $3357 = HEAP32[$3356>>2]|0;
-   $3358 = (($3357) + -1)|0;
-   HEAP32[$3356>>2] = $3358;
-   $3359 = $3;
-   $3360 = ((($3359)) + 172|0);
-   $3361 = HEAP32[$3360>>2]|0;
-   $3362 = (($3361) + -1)|0;
-   HEAP32[$3360>>2] = $3362;
-   $3363 = $3;
-   $3364 = $4;
-   $3365 = HEAP32[$3364>>2]|0;
-   $3366 = ((($3365)) + 4|0);
-   $3367 = HEAP32[$3366>>2]|0;
-   $3368 = $3367;
-   $3369 = (_new_msym($3363,$3368)|0);
-   $159 = $3369;
-   $3370 = $3;
-   $3371 = $3;
-   $3372 = ((($3371)) + 172|0);
-   $3373 = HEAP32[$3372>>2]|0;
-   $3374 = $3373 & 511;
-   $3375 = $3374 << 23;
-   $3376 = 67 | $3375;
-   $3377 = $159;
-   $3378 = $3377 & 511;
-   $3379 = $3378 << 14;
-   $3380 = $3376 | $3379;
-   (_genop($3370,$3380)|0);
-   $3381 = $3;
-   $3382 = $4;
-   $3383 = ((($3382)) + 4|0);
-   $3384 = HEAP32[$3383>>2]|0;
-   $3385 = ((($3384)) + 4|0);
-   $3386 = HEAP32[$3385>>2]|0;
-   $3387 = HEAP32[$3386>>2]|0;
-   $3388 = $5;
-   $3389 = (_scope_body($3381,$3387,$3388)|0);
-   $159 = $3389;
-   $3390 = $3;
-   $3391 = $3;
-   $3392 = ((($3391)) + 172|0);
-   $3393 = HEAP32[$3392>>2]|0;
-   $3394 = $3393 & 511;
-   $3395 = $3394 << 23;
-   $3396 = 69 | $3395;
-   $3397 = $159;
-   $3398 = $3397 & 65535;
-   $3399 = $3398 << 7;
-   $3400 = $3396 | $3399;
-   (_genop($3390,$3400)|0);
-   $3401 = $5;
-   $3402 = ($3401|0)!=(0);
-   if (!($3402)) {
-    STACKTOP = sp;return;
-   }
-   $3403 = $3;
-   _push_($3403);
-   STACKTOP = sp;return;
-   break;
-  }
-  case 75:  {
-   $3404 = $4;
-   $3405 = HEAP32[$3404>>2]|0;
-   $3406 = HEAP32[$3405>>2]|0;
-   $3407 = ($3406|0)==(0|0);
-   do {
-    if ($3407) {
-     $3408 = $3;
-     $3409 = $3;
-     $3410 = ((($3409)) + 172|0);
-     $3411 = HEAP32[$3410>>2]|0;
-     $3412 = $3411 & 511;
-     $3413 = $3412 << 23;
-     $3414 = 5 | $3413;
-     (_genop($3408,$3414)|0);
-     $3415 = $3;
-     _push_($3415);
-    } else {
-     $3416 = $4;
-     $3417 = HEAP32[$3416>>2]|0;
-     $3418 = HEAP32[$3417>>2]|0;
-     $3419 = ($3418|0)==((1)|0);
-     $3420 = $3;
-     if ($3419) {
-      $3421 = $3;
-      $3422 = ((($3421)) + 172|0);
-      $3423 = HEAP32[$3422>>2]|0;
-      $3424 = $3423 & 511;
-      $3425 = $3424 << 23;
-      $3426 = 66 | $3425;
-      (_genop($3420,$3426)|0);
-      $3427 = $3;
-      _push_($3427);
-      break;
-     } else {
-      $3428 = $4;
-      $3429 = HEAP32[$3428>>2]|0;
-      $3430 = HEAP32[$3429>>2]|0;
-      _codegen($3420,$3430,1);
-      break;
-     }
-    }
-   } while(0);
-   $3431 = $3;
-   $3432 = ((($3431)) + 172|0);
-   $3433 = HEAP32[$3432>>2]|0;
-   $3434 = (($3433) + -1)|0;
-   HEAP32[$3432>>2] = $3434;
-   $3435 = $3;
-   $3436 = $4;
-   $3437 = HEAP32[$3436>>2]|0;
-   $3438 = ((($3437)) + 4|0);
-   $3439 = HEAP32[$3438>>2]|0;
-   $3440 = $3439;
-   $3441 = (_new_msym($3435,$3440)|0);
-   $160 = $3441;
-   $3442 = $3;
-   $3443 = $3;
-   $3444 = ((($3443)) + 172|0);
-   $3445 = HEAP32[$3444>>2]|0;
-   $3446 = $3445 & 511;
-   $3447 = $3446 << 23;
-   $3448 = 68 | $3447;
-   $3449 = $160;
-   $3450 = $3449 & 511;
-   $3451 = $3450 << 14;
-   $3452 = $3448 | $3451;
-   (_genop($3442,$3452)|0);
-   $3453 = $3;
-   $3454 = $4;
-   $3455 = ((($3454)) + 4|0);
-   $3456 = HEAP32[$3455>>2]|0;
-   $3457 = HEAP32[$3456>>2]|0;
-   $3458 = $5;
-   $3459 = (_scope_body($3453,$3457,$3458)|0);
-   $160 = $3459;
-   $3460 = $3;
-   $3461 = $3;
-   $3462 = ((($3461)) + 172|0);
-   $3463 = HEAP32[$3462>>2]|0;
-   $3464 = $3463 & 511;
-   $3465 = $3464 << 23;
-   $3466 = 69 | $3465;
-   $3467 = $160;
-   $3468 = $3467 & 65535;
-   $3469 = $3468 << 7;
-   $3470 = $3466 | $3469;
-   (_genop($3460,$3470)|0);
-   $3471 = $5;
-   $3472 = ($3471|0)!=(0);
-   if (!($3472)) {
-    STACKTOP = sp;return;
-   }
-   $3473 = $3;
-   _push_($3473);
-   STACKTOP = sp;return;
-   break;
-  }
-  case 76:  {
-   $3474 = $3;
-   $3475 = $4;
-   $3476 = HEAP32[$3475>>2]|0;
-   _codegen($3474,$3476,1);
-   $3477 = $3;
-   $3478 = ((($3477)) + 172|0);
-   $3479 = HEAP32[$3478>>2]|0;
-   $3480 = (($3479) + -1)|0;
-   HEAP32[$3478>>2] = $3480;
-   $3481 = $3;
-   $3482 = $3;
-   $3483 = ((($3482)) + 172|0);
-   $3484 = HEAP32[$3483>>2]|0;
-   $3485 = $3484 & 511;
-   $3486 = $3485 << 23;
-   $3487 = 71 | $3486;
-   $3488 = $3;
-   $3489 = ((($3488)) + 172|0);
-   $3490 = HEAP32[$3489>>2]|0;
-   $3491 = $3490 & 511;
-   $3492 = $3491 << 14;
-   $3493 = $3487 | $3492;
-   (_genop($3481,$3493)|0);
-   $3494 = $3;
-   $3495 = $4;
-   $3496 = ((($3495)) + 4|0);
-   $3497 = HEAP32[$3496>>2]|0;
-   $3498 = HEAP32[$3497>>2]|0;
-   $3499 = $5;
-   $3500 = (_scope_body($3494,$3498,$3499)|0);
-   $161 = $3500;
-   $3501 = $3;
-   $3502 = $3;
-   $3503 = ((($3502)) + 172|0);
-   $3504 = HEAP32[$3503>>2]|0;
-   $3505 = $3504 & 511;
-   $3506 = $3505 << 23;
-   $3507 = 69 | $3506;
-   $3508 = $161;
-   $3509 = $3508 & 65535;
-   $3510 = $3509 << 7;
-   $3511 = $3507 | $3510;
-   (_genop($3501,$3511)|0);
-   $3512 = $5;
-   $3513 = ($3512|0)!=(0);
-   if (!($3513)) {
-    STACKTOP = sp;return;
-   }
-   $3514 = $3;
-   _push_($3514);
-   STACKTOP = sp;return;
-   break;
-  }
-  case 70:  {
-   $3515 = $3;
-   $3516 = $4;
-   $3517 = HEAP32[$3516>>2]|0;
-   $3518 = $3517;
-   $3519 = (_new_msym($3515,$3518)|0);
-   $162 = $3519;
-   $3520 = $3;
-   $3521 = $4;
-   $3522 = ((($3521)) + 4|0);
-   $3523 = HEAP32[$3522>>2]|0;
-   $3524 = (_lambda_body($3520,$3523,0)|0);
-   $163 = $3524;
-   $3525 = $3;
-   $3526 = $3;
-   $3527 = ((($3526)) + 172|0);
-   $3528 = HEAP32[$3527>>2]|0;
-   $3529 = $3528 & 511;
-   $3530 = $3529 << 23;
-   $3531 = 72 | $3530;
-   (_genop($3525,$3531)|0);
-   $3532 = $3;
-   _push_($3532);
-   $3533 = $3;
-   $3534 = $3;
-   $3535 = ((($3534)) + 172|0);
-   $3536 = HEAP32[$3535>>2]|0;
-   $3537 = $3536 & 511;
-   $3538 = $3537 << 23;
-   $3539 = 64 | $3538;
-   $3540 = $163;
-   $3541 = $3540 & 16383;
-   $3542 = $3541 << 9;
-   $3543 = $3542 | 128;
-   $3544 = $3539 | $3543;
-   (_genop($3533,$3544)|0);
-   $3545 = $3;
-   _push_($3545);
-   $3546 = $3;
-   $3547 = ((($3546)) + 172|0);
-   $3548 = HEAP32[$3547>>2]|0;
-   $3549 = (($3548) + -1)|0;
-   HEAP32[$3547>>2] = $3549;
-   $3550 = $3;
-   $3551 = ((($3550)) + 172|0);
-   $3552 = HEAP32[$3551>>2]|0;
-   $3553 = (($3552) + -1)|0;
-   HEAP32[$3551>>2] = $3553;
-   $3554 = $3;
-   $3555 = $3;
-   $3556 = ((($3555)) + 172|0);
-   $3557 = HEAP32[$3556>>2]|0;
-   $3558 = $3557 & 511;
-   $3559 = $3558 << 23;
-   $3560 = 70 | $3559;
-   $3561 = $162;
-   $3562 = $3561 & 511;
-   $3563 = $3562 << 14;
-   $3564 = $3560 | $3563;
-   (_genop($3554,$3564)|0);
-   $3565 = $5;
-   $3566 = ($3565|0)!=(0);
-   if (!($3566)) {
-    STACKTOP = sp;return;
-   }
-   $3567 = $3;
-   $3568 = $3;
-   $3569 = ((($3568)) + 172|0);
-   $3570 = HEAP32[$3569>>2]|0;
-   $3571 = $3570 & 511;
-   $3572 = $3571 << 23;
-   $3573 = 4 | $3572;
-   $3574 = $162;
-   $3575 = $3574 & 65535;
-   $3576 = $3575 << 7;
-   $3577 = $3573 | $3576;
-   (_genop($3567,$3577)|0);
-   $3578 = $3;
-   _push_($3578);
-   STACKTOP = sp;return;
-   break;
-  }
-  case 71:  {
-   $3579 = $4;
-   $3580 = HEAP32[$3579>>2]|0;
-   $164 = $3580;
-   $3581 = $3;
-   $3582 = $4;
-   $3583 = ((($3582)) + 4|0);
-   $3584 = HEAP32[$3583>>2]|0;
-   $3585 = HEAP32[$3584>>2]|0;
-   $3586 = $3585;
-   $3587 = (_new_msym($3581,$3586)|0);
-   $165 = $3587;
-   $3588 = $3;
-   $3589 = $4;
-   $3590 = ((($3589)) + 4|0);
-   $3591 = HEAP32[$3590>>2]|0;
-   $3592 = ((($3591)) + 4|0);
-   $3593 = HEAP32[$3592>>2]|0;
-   $3594 = (_lambda_body($3588,$3593,0)|0);
-   $166 = $3594;
-   $3595 = $3;
-   $3596 = $164;
-   _codegen($3595,$3596,1);
-   $3597 = $3;
-   $3598 = ((($3597)) + 172|0);
-   $3599 = HEAP32[$3598>>2]|0;
-   $3600 = (($3599) + -1)|0;
-   HEAP32[$3598>>2] = $3600;
-   $3601 = $3;
-   $3602 = $3;
-   $3603 = ((($3602)) + 172|0);
-   $3604 = HEAP32[$3603>>2]|0;
-   $3605 = $3604 & 511;
-   $3606 = $3605 << 23;
-   $3607 = 71 | $3606;
-   $3608 = $3;
-   $3609 = ((($3608)) + 172|0);
-   $3610 = HEAP32[$3609>>2]|0;
-   $3611 = $3610 & 511;
-   $3612 = $3611 << 14;
-   $3613 = $3607 | $3612;
-   (_genop($3601,$3613)|0);
-   $3614 = $3;
-   _push_($3614);
-   $3615 = $3;
-   $3616 = $3;
-   $3617 = ((($3616)) + 172|0);
-   $3618 = HEAP32[$3617>>2]|0;
-   $3619 = $3618 & 511;
-   $3620 = $3619 << 23;
-   $3621 = 64 | $3620;
-   $3622 = $166;
-   $3623 = $3622 & 16383;
-   $3624 = $3623 << 9;
-   $3625 = $3624 | 128;
-   $3626 = $3621 | $3625;
-   (_genop($3615,$3626)|0);
-   $3627 = $3;
-   $3628 = ((($3627)) + 172|0);
-   $3629 = HEAP32[$3628>>2]|0;
-   $3630 = (($3629) + -1)|0;
-   HEAP32[$3628>>2] = $3630;
-   $3631 = $3;
-   $3632 = $3;
-   $3633 = ((($3632)) + 172|0);
-   $3634 = HEAP32[$3633>>2]|0;
-   $3635 = $3634 & 511;
-   $3636 = $3635 << 23;
-   $3637 = 70 | $3636;
-   $3638 = $165;
-   $3639 = $3638 & 511;
-   $3640 = $3639 << 14;
-   $3641 = $3637 | $3640;
-   (_genop($3631,$3641)|0);
-   $3642 = $5;
-   $3643 = ($3642|0)!=(0);
-   if (!($3643)) {
-    STACKTOP = sp;return;
-   }
-   $3644 = $3;
-   $3645 = $3;
-   $3646 = ((($3645)) + 172|0);
-   $3647 = HEAP32[$3646>>2]|0;
-   $3648 = $3647 & 511;
-   $3649 = $3648 << 23;
-   $3650 = 4 | $3649;
-   $3651 = $165;
-   $3652 = $3651 & 65535;
-   $3653 = $3652 << 7;
-   $3654 = $3650 | $3653;
-   (_genop($3644,$3654)|0);
-   $3655 = $3;
-   _push_($3655);
-   STACKTOP = sp;return;
-   break;
-  }
-  default: {
-   STACKTOP = sp;return;
-  }
-  }
- } while(0);
- $2530 = $5;
- $2531 = ($2530|0)!=(0);
- $2532 = $4;
- if ($2531) {
-  $120 = $2532;
-  $2533 = $120;
-  $2534 = ($2533|0)!=(0|0);
-  if (!($2534)) {
-   STACKTOP = sp;return;
-  }
-  $2535 = $3;
-  $2536 = $120;
-  $2537 = HEAP32[$2536>>2]|0;
-  _codegen($2535,$2537,1);
-  $2538 = $120;
-  $2539 = ((($2538)) + 4|0);
-  $2540 = HEAP32[$2539>>2]|0;
-  $120 = $2540;
-  while(1) {
-   $2541 = $120;
-   $2542 = ($2541|0)!=(0|0);
-   if (!($2542)) {
-    break;
-   }
-   $2543 = $3;
-   $2544 = $120;
-   $2545 = HEAP32[$2544>>2]|0;
-   _codegen($2543,$2545,1);
-   $2546 = $3;
-   $2547 = ((($2546)) + 172|0);
-   $2548 = HEAP32[$2547>>2]|0;
-   $2549 = (($2548) + -1)|0;
-   HEAP32[$2547>>2] = $2549;
-   $2550 = $3;
-   $2551 = ((($2550)) + 172|0);
-   $2552 = HEAP32[$2551>>2]|0;
-   $2553 = (($2552) + -1)|0;
-   HEAP32[$2551>>2] = $2553;
-   $2554 = $3;
-   $2555 = $3;
-   $2556 = ((($2555)) + 172|0);
-   $2557 = HEAP32[$2556>>2]|0;
-   $2558 = $2557 & 511;
-   $2559 = $2558 << 23;
-   $2560 = 62 | $2559;
-   $2561 = $3;
-   $2562 = ((($2561)) + 172|0);
-   $2563 = HEAP32[$2562>>2]|0;
-   $2564 = (($2563) + 1)|0;
-   $2565 = $2564 & 511;
-   $2566 = $2565 << 14;
-   $2567 = $2560 | $2566;
-   (_genop_peep($2554,$2567,1)|0);
-   $2568 = $3;
-   _push_($2568);
-   $2569 = $120;
-   $2570 = ((($2569)) + 4|0);
-   $2571 = HEAP32[$2570>>2]|0;
-   $120 = $2571;
-  }
-  STACKTOP = sp;return;
- } else {
-  $121 = $2532;
-  while(1) {
-   $2572 = $121;
-   $2573 = ($2572|0)!=(0|0);
-   if (!($2573)) {
-    break;
-   }
-   $2574 = $121;
-   $2575 = HEAP32[$2574>>2]|0;
-   $2576 = HEAP32[$2575>>2]|0;
-   $2577 = $2576;
-   $2578 = ($2577|0)!=(55);
-   if ($2578) {
-    $2579 = $3;
-    $2580 = $121;
-    $2581 = HEAP32[$2580>>2]|0;
-    _codegen($2579,$2581,0);
-   }
-   $2582 = $121;
-   $2583 = ((($2582)) + 4|0);
-   $2584 = HEAP32[$2583>>2]|0;
-   $121 = $2584;
-  }
-  STACKTOP = sp;return;
- }
-}
-function _genop($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;
- var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0;
- var $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0;
- var $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $4 = $2;
- $5 = ((($4)) + 176|0);
- $6 = HEAP32[$5>>2]|0;
- $7 = $2;
- $8 = ((($7)) + 212|0);
- $9 = HEAP32[$8>>2]|0;
- $10 = ($6|0)==($9|0);
- if ($10) {
-  $11 = $2;
-  $12 = ((($11)) + 212|0);
-  $13 = HEAP32[$12>>2]|0;
-  $14 = $13<<1;
-  HEAP32[$12>>2] = $14;
-  $15 = $2;
-  $16 = $2;
-  $17 = ((($16)) + 204|0);
-  $18 = HEAP32[$17>>2]|0;
-  $19 = $2;
-  $20 = ((($19)) + 212|0);
-  $21 = HEAP32[$20>>2]|0;
-  $22 = $21<<2;
-  $23 = (_codegen_realloc($15,$18,$22)|0);
-  $24 = $2;
-  $25 = ((($24)) + 204|0);
-  HEAP32[$25>>2] = $23;
-  $26 = $2;
-  $27 = ((($26)) + 208|0);
-  $28 = HEAP32[$27>>2]|0;
-  $29 = ($28|0)!=(0|0);
-  if ($29) {
-   $30 = $2;
-   $31 = $2;
-   $32 = ((($31)) + 208|0);
-   $33 = HEAP32[$32>>2]|0;
-   $34 = $2;
-   $35 = ((($34)) + 212|0);
-   $36 = HEAP32[$35>>2]|0;
-   $37 = $36<<1;
-   $38 = (_codegen_realloc($30,$33,$37)|0);
-   $39 = $2;
-   $40 = ((($39)) + 208|0);
-   HEAP32[$40>>2] = $38;
-   $41 = $2;
-   $42 = ((($41)) + 208|0);
-   $43 = HEAP32[$42>>2]|0;
-   $44 = $2;
-   $45 = ((($44)) + 216|0);
-   $46 = HEAP32[$45>>2]|0;
-   $47 = ((($46)) + 32|0);
-   HEAP32[$47>>2] = $43;
-  }
- }
- $48 = $3;
- $49 = $2;
- $50 = ((($49)) + 204|0);
- $51 = HEAP32[$50>>2]|0;
- $52 = $2;
- $53 = ((($52)) + 176|0);
- $54 = HEAP32[$53>>2]|0;
- $55 = (($51) + ($54<<2)|0);
- HEAP32[$55>>2] = $48;
- $56 = $2;
- $57 = ((($56)) + 208|0);
- $58 = HEAP32[$57>>2]|0;
- $59 = ($58|0)!=(0|0);
- if (!($59)) {
-  $70 = $2;
-  $71 = ((($70)) + 176|0);
-  $72 = HEAP32[$71>>2]|0;
-  $73 = (($72) + 1)|0;
-  HEAP32[$71>>2] = $73;
-  STACKTOP = sp;return ($72|0);
- }
- $60 = $2;
- $61 = ((($60)) + 200|0);
- $62 = HEAP16[$61>>1]|0;
- $63 = $2;
- $64 = ((($63)) + 208|0);
- $65 = HEAP32[$64>>2]|0;
- $66 = $2;
- $67 = ((($66)) + 176|0);
- $68 = HEAP32[$67>>2]|0;
- $69 = (($65) + ($68<<1)|0);
- HEAP16[$69>>1] = $62;
- $70 = $2;
- $71 = ((($70)) + 176|0);
- $72 = HEAP32[$71>>2]|0;
- $73 = (($72) + 1)|0;
- HEAP32[$71>>2] = $73;
- STACKTOP = sp;return ($72|0);
-}
-function _push_($0) {
- $0 = $0|0;
- var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $3 = 0, $4 = 0, $5 = 0;
- var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $1 = $0;
- $2 = $1;
- $3 = ((($2)) + 172|0);
- $4 = HEAP32[$3>>2]|0;
- $5 = ($4|0)>(511);
- if ($5) {
-  $6 = $1;
-  _codegen_error($6,69816);
- }
- $7 = $1;
- $8 = ((($7)) + 172|0);
- $9 = HEAP32[$8>>2]|0;
- $10 = (($9) + 1)|0;
- HEAP32[$8>>2] = $10;
- $11 = $1;
- $12 = ((($11)) + 172|0);
- $13 = HEAP32[$12>>2]|0;
- $14 = $1;
- $15 = ((($14)) + 234|0);
- $16 = HEAP16[$15>>1]|0;
- $17 = $16&65535;
- $18 = ($13|0)>($17|0);
- if (!($18)) {
-  STACKTOP = sp;return;
- }
- $19 = $1;
- $20 = ((($19)) + 172|0);
- $21 = HEAP32[$20>>2]|0;
- $22 = $21&65535;
- $23 = $1;
- $24 = ((($23)) + 234|0);
- HEAP16[$24>>1] = $22;
- STACKTOP = sp;return;
-}
-function _loop_push($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;
- var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $5 = $2;
- $6 = (_codegen_palloc($5,28)|0);
- $4 = $6;
- $7 = $3;
- $8 = $4;
- HEAP32[$8>>2] = $7;
- $9 = $4;
- $10 = ((($9)) + 12|0);
- HEAP32[$10>>2] = 0;
- $11 = $4;
- $12 = ((($11)) + 8|0);
- HEAP32[$12>>2] = 0;
- $13 = $4;
- $14 = ((($13)) + 4|0);
- HEAP32[$14>>2] = 0;
- $15 = $2;
- $16 = ((($15)) + 188|0);
- $17 = HEAP32[$16>>2]|0;
- $18 = $4;
- $19 = ((($18)) + 24|0);
- HEAP32[$19>>2] = $17;
- $20 = $2;
- $21 = ((($20)) + 192|0);
- $22 = HEAP32[$21>>2]|0;
- $23 = $4;
- $24 = ((($23)) + 20|0);
- HEAP32[$24>>2] = $22;
- $25 = $2;
- $26 = ((($25)) + 172|0);
- $27 = HEAP32[$26>>2]|0;
- $28 = $4;
- $29 = ((($28)) + 16|0);
- HEAP32[$29>>2] = $27;
- $30 = $4;
- $31 = $2;
- $32 = ((($31)) + 188|0);
- HEAP32[$32>>2] = $30;
- $33 = $4;
- STACKTOP = sp;return ($33|0);
-}
-function _dispatch($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $$off = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;
- var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0;
- var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $switch = 0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $vararg_buffer = sp;
- $2 = $0;
- $3 = $1;
- $7 = $2;
- $8 = ((($7)) + 176|0);
- $9 = HEAP32[$8>>2]|0;
- $10 = $3;
- $11 = (($9) - ($10))|0;
- $4 = $11;
- $12 = $2;
- $13 = ((($12)) + 204|0);
- $14 = HEAP32[$13>>2]|0;
- $15 = $3;
- $16 = (($14) + ($15<<2)|0);
- $17 = HEAP32[$16>>2]|0;
- $5 = $17;
- $18 = $5;
- $19 = $18 & 127;
- $6 = $19;
- $20 = $2;
- $21 = ((($20)) + 176|0);
- $22 = HEAP32[$21>>2]|0;
- $23 = $2;
- $24 = ((($23)) + 180|0);
- HEAP32[$24>>2] = $22;
- $25 = $6;
- $$off = (($25) + -23)|0;
- $switch = ($$off>>>0)<(4);
- if (!($switch)) {
-  $26 = HEAP32[637]|0;
-  (_fprintf($26,69938,$vararg_buffer)|0);
-  $27 = $2;
-  _scope_error($27);
- }
- $28 = $6;
- $29 = $28 & 127;
- $30 = $5;
- $31 = $30 >>> 23;
- $32 = $31 & 511;
- $33 = $32 & 511;
- $34 = $33 << 23;
- $35 = $29 | $34;
- $36 = $4;
- $37 = (($36) + 32767)|0;
- $38 = $37 & 65535;
- $39 = $38 << 7;
- $40 = $35 | $39;
- $41 = $2;
- $42 = ((($41)) + 204|0);
- $43 = HEAP32[$42>>2]|0;
- $44 = $3;
- $45 = (($43) + ($44<<2)|0);
- HEAP32[$45>>2] = $40;
- STACKTOP = sp;return;
-}
-function _new_msym($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $$ = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;
- var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0;
- var $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0;
- var $64 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $3 = $0;
- $4 = $1;
- $7 = $3;
- $8 = ((($7)) + 216|0);
- $9 = HEAP32[$8>>2]|0;
- $10 = ((($9)) + 48|0);
- $11 = HEAP32[$10>>2]|0;
- $6 = $11;
- $12 = $6;
- $13 = ($12>>>0)>(256);
- $$ = $13 ? 256 : $11;
- $6 = $$;
- $5 = 0;
- while(1) {
-  $14 = $5;
-  $15 = $6;
-  $16 = ($14>>>0)<($15>>>0);
-  if (!($16)) {
-   break;
-  }
-  $17 = $3;
-  $18 = ((($17)) + 216|0);
-  $19 = HEAP32[$18>>2]|0;
-  $20 = ((($19)) + 16|0);
-  $21 = HEAP32[$20>>2]|0;
-  $22 = $5;
-  $23 = (($21) + ($22<<2)|0);
-  $24 = HEAP32[$23>>2]|0;
-  $25 = $4;
-  $26 = ($24|0)==($25|0);
-  if ($26) {
-   label = 4;
-   break;
-  }
-  $28 = $3;
-  $29 = ((($28)) + 216|0);
-  $30 = HEAP32[$29>>2]|0;
-  $31 = ((($30)) + 16|0);
-  $32 = HEAP32[$31>>2]|0;
-  $33 = $5;
-  $34 = (($32) + ($33<<2)|0);
-  $35 = HEAP32[$34>>2]|0;
-  $36 = ($35|0)==(0);
-  if ($36) {
-   break;
-  }
-  $37 = $5;
-  $38 = (($37) + 1)|0;
-  $5 = $38;
- }
- if ((label|0) == 4) {
-  $27 = $5;
-  $2 = $27;
-  $64 = $2;
-  STACKTOP = sp;return ($64|0);
- }
- $39 = $5;
- $40 = ($39|0)==(256);
- if ($40) {
-  $41 = $3;
-  _codegen_error($41,69911);
- }
- $42 = $4;
- $43 = $3;
- $44 = ((($43)) + 216|0);
- $45 = HEAP32[$44>>2]|0;
- $46 = ((($45)) + 16|0);
- $47 = HEAP32[$46>>2]|0;
- $48 = $5;
- $49 = (($47) + ($48<<2)|0);
- HEAP32[$49>>2] = $42;
- $50 = $5;
- $51 = $3;
- $52 = ((($51)) + 216|0);
- $53 = HEAP32[$52>>2]|0;
- $54 = ((($53)) + 48|0);
- $55 = HEAP32[$54>>2]|0;
- $56 = ($50|0)==($55|0);
- if ($56) {
-  $57 = $3;
-  $58 = ((($57)) + 216|0);
-  $59 = HEAP32[$58>>2]|0;
-  $60 = ((($59)) + 48|0);
-  $61 = HEAP32[$60>>2]|0;
-  $62 = (($61) + 1)|0;
-  HEAP32[$60>>2] = $62;
- }
- $63 = $5;
- $2 = $63;
- $64 = $2;
- STACKTOP = sp;return ($64|0);
-}
-function _dispatch_linked($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0;
- var $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $6 = $3;
- $7 = ($6|0)!=(0);
- if (!($7)) {
-  STACKTOP = sp;return;
- }
- while(1) {
-  $8 = $2;
-  $9 = ((($8)) + 204|0);
-  $10 = HEAP32[$9>>2]|0;
-  $11 = $3;
-  $12 = (($10) + ($11<<2)|0);
-  $13 = HEAP32[$12>>2]|0;
-  $4 = $13;
-  $14 = $4;
-  $15 = $14 >>> 7;
-  $16 = $15 & 65535;
-  $17 = (($16) - 32767)|0;
-  $5 = $17;
-  $18 = $2;
-  $19 = $3;
-  _dispatch($18,$19);
-  $20 = $5;
-  $21 = ($20|0)!=(0);
-  if (!($21)) {
-   break;
-  }
-  $22 = $5;
-  $3 = $22;
- }
- STACKTOP = sp;return;
-}
-function _gen_assignment($0,$1,$2,$3) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;
- var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0;
- var $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0, $152 = 0, $153 = 0;
- var $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0, $170 = 0, $171 = 0;
- var $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0, $188 = 0, $189 = 0, $19 = 0;
- var $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0, $197 = 0, $198 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $30 = 0;
- var $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0;
- var $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0;
- var $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0;
- var $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);
- $vararg_buffer = sp;
- $4 = $0;
- $5 = $1;
- $6 = $2;
- $7 = $3;
- $12 = $5;
- $13 = HEAP32[$12>>2]|0;
- $14 = $13;
- $9 = $14;
- $15 = $5;
- $16 = ((($15)) + 4|0);
- $17 = HEAP32[$16>>2]|0;
- $5 = $17;
- $18 = $9;
- L1: do {
-  switch ($18|0) {
-  case 41:  {
-   $19 = $4;
-   $20 = $5;
-   $21 = $20;
-   $22 = (_new_sym_1167($19,$21)|0);
-   $8 = $22;
-   $23 = $4;
-   $24 = $6;
-   $25 = $24 & 511;
-   $26 = $25 << 23;
-   $27 = 10 | $26;
-   $28 = $8;
-   $29 = $28 & 65535;
-   $30 = $29 << 7;
-   $31 = $27 | $30;
-   $32 = $7;
-   (_genop_peep($23,$31,$32)|0);
-   break;
-  }
-  case 39:  {
-   $33 = $4;
-   $34 = $5;
-   $35 = $34;
-   $36 = (_lv_idx($33,$35)|0);
-   $8 = $36;
-   $37 = $8;
-   $38 = ($37|0)>(0);
-   if ($38) {
-    $39 = $8;
-    $40 = $6;
-    $41 = ($39|0)!=($40|0);
-    if (!($41)) {
-     break L1;
-    }
-    $42 = $4;
-    $43 = $8;
-    $44 = $43 & 511;
-    $45 = $44 << 23;
-    $46 = 1 | $45;
-    $47 = $6;
-    $48 = $47 & 511;
-    $49 = $48 << 14;
-    $50 = $46 | $49;
-    $51 = $7;
-    (_genop_peep($42,$50,$51)|0);
-    break L1;
-   }
-   $10 = 0;
-   $52 = $4;
-   $53 = ((($52)) + 164|0);
-   $54 = HEAP32[$53>>2]|0;
-   $11 = $54;
-   while(1) {
-    $55 = $11;
-    $56 = ($55|0)!=(0|0);
-    if (!($56)) {
-     break L1;
-    }
-    $57 = $11;
-    $58 = $5;
-    $59 = $58;
-    $60 = (_lv_idx($57,$59)|0);
-    $8 = $60;
-    $61 = $8;
-    $62 = ($61|0)>(0);
-    if ($62) {
-     break;
-    }
-    $77 = $10;
-    $78 = (($77) + 1)|0;
-    $10 = $78;
-    $79 = $11;
-    $80 = ((($79)) + 164|0);
-    $81 = HEAP32[$80>>2]|0;
-    $11 = $81;
-   }
-   $63 = $4;
-   $64 = $6;
-   $65 = $64 & 511;
-   $66 = $65 << 23;
-   $67 = 22 | $66;
-   $68 = $8;
-   $69 = $68 & 511;
-   $70 = $69 << 14;
-   $71 = $67 | $70;
-   $72 = $10;
-   $73 = $72 & 127;
-   $74 = $73 << 7;
-   $75 = $71 | $74;
-   $76 = $7;
-   (_genop_peep($63,$75,$76)|0);
-   break;
-  }
-  case 42:  {
-   $82 = $4;
-   $83 = $5;
-   $84 = $83;
-   $85 = (_new_sym_1167($82,$84)|0);
-   $8 = $85;
-   $86 = $4;
-   $87 = $6;
-   $88 = $87 & 511;
-   $89 = $88 << 23;
-   $90 = 14 | $89;
-   $91 = $8;
-   $92 = $91 & 65535;
-   $93 = $92 << 7;
-   $94 = $90 | $93;
-   $95 = $7;
-   (_genop_peep($86,$94,$95)|0);
-   break;
-  }
-  case 44:  {
-   $96 = $4;
-   $97 = $5;
-   $98 = $97;
-   $99 = (_new_sym_1167($96,$98)|0);
-   $8 = $99;
-   $100 = $4;
-   $101 = $6;
-   $102 = $101 & 511;
-   $103 = $102 << 23;
-   $104 = 16 | $103;
-   $105 = $8;
-   $106 = $105 & 65535;
-   $107 = $106 << 7;
-   $108 = $104 | $107;
-   $109 = $7;
-   (_genop_peep($100,$108,$109)|0);
-   break;
-  }
-  case 43:  {
-   $110 = $4;
-   $111 = $5;
-   $112 = $111;
-   $113 = (_new_sym_1167($110,$112)|0);
-   $8 = $113;
-   $114 = $4;
-   $115 = $6;
-   $116 = $115 & 511;
-   $117 = $116 << 23;
-   $118 = 18 | $117;
-   $119 = $8;
-   $120 = $119 & 65535;
-   $121 = $120 << 7;
-   $122 = $118 | $121;
-   $123 = $7;
-   (_genop_peep($114,$122,$123)|0);
-   break;
-  }
-  case 77:  {
-   $124 = $4;
-   $125 = $5;
-   $126 = ((($125)) + 4|0);
-   $127 = HEAP32[$126>>2]|0;
-   $128 = $127;
-   $129 = (_new_sym_1167($124,$128)|0);
-   $8 = $129;
-   $130 = $4;
-   $131 = $4;
-   $132 = ((($131)) + 172|0);
-   $133 = HEAP32[$132>>2]|0;
-   $134 = $133 & 511;
-   $135 = $134 << 23;
-   $136 = 1 | $135;
-   $137 = $6;
-   $138 = $137 & 511;
-   $139 = $138 << 14;
-   $140 = $136 | $139;
-   (_genop_peep($130,$140,0)|0);
-   $141 = $4;
-   _push_($141);
-   $142 = $4;
-   $143 = $5;
-   $144 = HEAP32[$143>>2]|0;
-   _codegen($142,$144,1);
-   $145 = $4;
-   $146 = ((($145)) + 172|0);
-   $147 = HEAP32[$146>>2]|0;
-   $148 = (($147) - 2)|0;
-   HEAP32[$146>>2] = $148;
-   $149 = $4;
-   $150 = $4;
-   $151 = ((($150)) + 172|0);
-   $152 = HEAP32[$151>>2]|0;
-   $153 = $152 & 511;
-   $154 = $153 << 23;
-   $155 = 20 | $154;
-   $156 = $8;
-   $157 = $156 & 65535;
-   $158 = $157 << 7;
-   $159 = $155 | $158;
-   $160 = $7;
-   (_genop_peep($149,$159,$160)|0);
-   break;
-  }
-  case 29:  {
-   $161 = $4;
-   _push_($161);
-   $162 = $4;
-   $163 = $5;
-   $164 = $4;
-   $165 = $5;
-   $166 = ((($165)) + 4|0);
-   $167 = HEAP32[$166>>2]|0;
-   $168 = HEAP32[$167>>2]|0;
-   $169 = $168;
-   $170 = (_attrsym($164,$169)|0);
-   $171 = $6;
-   _gen_call($162,$163,$170,$171,0);
-   $172 = $4;
-   $173 = ((($172)) + 172|0);
-   $174 = HEAP32[$173>>2]|0;
-   $175 = (($174) + -1)|0;
-   HEAP32[$173>>2] = $175;
-   $176 = $7;
-   $177 = ($176|0)!=(0);
-   if ($177) {
-    $178 = $4;
-    $179 = $4;
-    $180 = ((($179)) + 172|0);
-    $181 = HEAP32[$180>>2]|0;
-    $182 = $181 & 511;
-    $183 = $182 << 23;
-    $184 = 1 | $183;
-    $185 = $6;
-    $186 = $185 & 511;
-    $187 = $186 << 14;
-    $188 = $184 | $187;
-    $189 = $7;
-    (_genop_peep($178,$188,$189)|0);
-   }
-   break;
-  }
-  case 23:  {
-   $190 = $4;
-   $191 = $5;
-   $192 = HEAP32[$191>>2]|0;
-   $193 = $6;
-   $194 = $7;
-   _gen_vmassignment($190,$192,$193,$194);
-   break;
-  }
-  case 86:  {
-   break;
-  }
-  default: {
-   $195 = $9;
-   HEAP32[$vararg_buffer>>2] = $195;
-   (_printf(69872,$vararg_buffer)|0);
-  }
-  }
- } while(0);
- $196 = $7;
- $197 = ($196|0)!=(0);
- if (!($197)) {
-  STACKTOP = sp;return;
- }
- $198 = $4;
- _push_($198);
- STACKTOP = sp;return;
-}
-function _loop_pop($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;
- var $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $4 = $3;
- $5 = ($4|0)!=(0);
- if ($5) {
-  $6 = $2;
-  $7 = $2;
-  $8 = ((($7)) + 172|0);
-  $9 = HEAP32[$8>>2]|0;
-  $10 = $9 & 511;
-  $11 = $10 << 23;
-  $12 = 5 | $11;
-  (_genop($6,$12)|0);
- }
- $13 = $2;
- $14 = $2;
- $15 = ((($14)) + 188|0);
- $16 = HEAP32[$15>>2]|0;
- $17 = ((($16)) + 12|0);
- $18 = HEAP32[$17>>2]|0;
- _dispatch_linked($13,$18);
- $19 = $2;
- $20 = ((($19)) + 188|0);
- $21 = HEAP32[$20>>2]|0;
- $22 = ((($21)) + 24|0);
- $23 = HEAP32[$22>>2]|0;
- $24 = $2;
- $25 = ((($24)) + 188|0);
- HEAP32[$25>>2] = $23;
- $26 = $3;
- $27 = ($26|0)!=(0);
- if (!($27)) {
-  STACKTOP = sp;return;
- }
- $28 = $2;
- _push_($28);
- STACKTOP = sp;return;
-}
-function _scope_body($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;
- var $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0;
- var $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $4 = $0;
- $5 = $1;
- $6 = $2;
- $8 = $4;
- $9 = HEAP32[$8>>2]|0;
- $10 = $4;
- $11 = $5;
- $12 = HEAP32[$11>>2]|0;
- $13 = (_scope_new($9,$10,$12)|0);
- $7 = $13;
- $14 = $7;
- $15 = ($14|0)==(0|0);
- if ($15) {
-  $16 = $4;
-  _raise_error($16,69839);
- }
- $17 = $7;
- $18 = $5;
- $19 = ((($18)) + 4|0);
- $20 = HEAP32[$19>>2]|0;
- _codegen($17,$20,1);
- $21 = $4;
- $22 = ((($21)) + 204|0);
- $23 = HEAP32[$22>>2]|0;
- $24 = ($23|0)!=(0|0);
- do {
-  if ($24) {
-   $26 = $6;
-   $27 = ($26|0)!=(0);
-   $28 = $7;
-   if (!($27)) {
-    (_genop($28,41)|0);
-    break;
-   }
-   $29 = ((($28)) + 234|0);
-   $30 = HEAP16[$29>>1]|0;
-   $31 = $30&65535;
-   $32 = ($31|0)==(0);
-   $33 = $7;
-   if ($32) {
-    (_genop($33,5)|0);
-    $34 = $7;
-    (_genop($34,41)|0);
-    break;
-   } else {
-    $35 = $7;
-    $36 = ((($35)) + 172|0);
-    $37 = HEAP32[$36>>2]|0;
-    $38 = (($37) - 1)|0;
-    $39 = $38 & 511;
-    $40 = $39 << 23;
-    $41 = 41 | $40;
-    (_genop_peep($33,$41,0)|0);
-    break;
-   }
-  } else {
-   $25 = $7;
-   (_genop($25,74)|0);
-  }
- } while(0);
- $42 = $7;
- _scope_finish($42);
- $43 = $4;
- $44 = ((($43)) + 216|0);
- $45 = HEAP32[$44>>2]|0;
- $46 = ($45|0)!=(0|0);
- if ($46) {
-  $47 = $4;
-  $48 = ((($47)) + 216|0);
-  $49 = HEAP32[$48>>2]|0;
-  $50 = ((($49)) + 52|0);
-  $51 = HEAP32[$50>>2]|0;
-  $52 = (($51) - 1)|0;
-  $3 = $52;
-  $53 = $3;
-  STACKTOP = sp;return ($53|0);
- } else {
-  $3 = 0;
-  $53 = $3;
-  STACKTOP = sp;return ($53|0);
- }
- return (0)|0;
-}
-function _genop_peep($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$sink = 0, $$sink3 = 0, $$sink7 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0;
- var $115 = 0, $116 = 0, $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0;
- var $133 = 0, $134 = 0, $135 = 0, $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0;
- var $151 = 0, $152 = 0, $153 = 0, $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0;
- var $17 = 0, $170 = 0, $171 = 0, $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0;
- var $188 = 0, $189 = 0, $19 = 0, $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0, $197 = 0, $198 = 0, $199 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0, $204 = 0, $205 = 0;
- var $206 = 0, $207 = 0, $208 = 0, $209 = 0, $21 = 0, $210 = 0, $211 = 0, $212 = 0, $213 = 0, $214 = 0, $215 = 0, $216 = 0, $217 = 0, $218 = 0, $219 = 0, $22 = 0, $220 = 0, $221 = 0, $222 = 0, $223 = 0;
- var $224 = 0, $225 = 0, $226 = 0, $227 = 0, $228 = 0, $229 = 0, $23 = 0, $230 = 0, $231 = 0, $232 = 0, $233 = 0, $234 = 0, $235 = 0, $236 = 0, $237 = 0, $238 = 0, $239 = 0, $24 = 0, $240 = 0, $241 = 0;
- var $242 = 0, $243 = 0, $244 = 0, $245 = 0, $246 = 0, $247 = 0, $248 = 0, $249 = 0, $25 = 0, $250 = 0, $251 = 0, $252 = 0, $253 = 0, $254 = 0, $255 = 0, $256 = 0, $257 = 0, $258 = 0, $259 = 0, $26 = 0;
- var $260 = 0, $261 = 0, $262 = 0, $263 = 0, $264 = 0, $265 = 0, $266 = 0, $267 = 0, $268 = 0, $269 = 0, $27 = 0, $270 = 0, $271 = 0, $272 = 0, $273 = 0, $274 = 0, $275 = 0, $276 = 0, $277 = 0, $278 = 0;
- var $279 = 0, $28 = 0, $280 = 0, $281 = 0, $282 = 0, $283 = 0, $284 = 0, $285 = 0, $286 = 0, $287 = 0, $288 = 0, $289 = 0, $29 = 0, $290 = 0, $291 = 0, $292 = 0, $293 = 0, $294 = 0, $295 = 0, $296 = 0;
- var $297 = 0, $298 = 0, $299 = 0, $3 = 0, $30 = 0, $300 = 0, $301 = 0, $302 = 0, $303 = 0, $304 = 0, $305 = 0, $306 = 0, $307 = 0, $308 = 0, $309 = 0, $31 = 0, $310 = 0, $311 = 0, $312 = 0, $313 = 0;
- var $314 = 0, $315 = 0, $316 = 0, $317 = 0, $318 = 0, $319 = 0, $32 = 0, $320 = 0, $321 = 0, $322 = 0, $323 = 0, $324 = 0, $325 = 0, $326 = 0, $327 = 0, $328 = 0, $329 = 0, $33 = 0, $330 = 0, $331 = 0;
- var $332 = 0, $333 = 0, $334 = 0, $335 = 0, $336 = 0, $337 = 0, $338 = 0, $339 = 0, $34 = 0, $340 = 0, $341 = 0, $342 = 0, $343 = 0, $344 = 0, $345 = 0, $346 = 0, $347 = 0, $348 = 0, $349 = 0, $35 = 0;
- var $350 = 0, $351 = 0, $352 = 0, $353 = 0, $354 = 0, $355 = 0, $356 = 0, $357 = 0, $358 = 0, $359 = 0, $36 = 0, $360 = 0, $361 = 0, $362 = 0, $363 = 0, $364 = 0, $365 = 0, $366 = 0, $367 = 0, $368 = 0;
- var $369 = 0, $37 = 0, $370 = 0, $371 = 0, $372 = 0, $373 = 0, $374 = 0, $375 = 0, $376 = 0, $377 = 0, $378 = 0, $379 = 0, $38 = 0, $380 = 0, $381 = 0, $382 = 0, $383 = 0, $384 = 0, $385 = 0, $386 = 0;
- var $387 = 0, $388 = 0, $389 = 0, $39 = 0, $390 = 0, $391 = 0, $392 = 0, $393 = 0, $394 = 0, $395 = 0, $396 = 0, $397 = 0, $398 = 0, $399 = 0, $4 = 0, $40 = 0, $400 = 0, $401 = 0, $402 = 0, $403 = 0;
- var $404 = 0, $405 = 0, $406 = 0, $407 = 0, $408 = 0, $409 = 0, $41 = 0, $410 = 0, $411 = 0, $412 = 0, $413 = 0, $414 = 0, $415 = 0, $416 = 0, $417 = 0, $418 = 0, $419 = 0, $42 = 0, $420 = 0, $421 = 0;
- var $422 = 0, $423 = 0, $424 = 0, $425 = 0, $426 = 0, $427 = 0, $428 = 0, $429 = 0, $43 = 0, $430 = 0, $431 = 0, $432 = 0, $433 = 0, $434 = 0, $435 = 0, $436 = 0, $437 = 0, $438 = 0, $439 = 0, $44 = 0;
- var $440 = 0, $441 = 0, $442 = 0, $443 = 0, $444 = 0, $445 = 0, $446 = 0, $447 = 0, $448 = 0, $449 = 0, $45 = 0, $450 = 0, $451 = 0, $452 = 0, $453 = 0, $454 = 0, $455 = 0, $456 = 0, $457 = 0, $458 = 0;
- var $459 = 0, $46 = 0, $460 = 0, $461 = 0, $462 = 0, $463 = 0, $464 = 0, $465 = 0, $466 = 0, $467 = 0, $468 = 0, $469 = 0, $47 = 0, $470 = 0, $471 = 0, $472 = 0, $473 = 0, $474 = 0, $475 = 0, $476 = 0;
- var $477 = 0, $478 = 0, $479 = 0, $48 = 0, $480 = 0, $481 = 0, $482 = 0, $483 = 0, $484 = 0, $485 = 0, $486 = 0, $487 = 0, $488 = 0, $489 = 0, $49 = 0, $490 = 0, $491 = 0, $492 = 0, $493 = 0, $494 = 0;
- var $495 = 0, $496 = 0, $497 = 0, $498 = 0, $499 = 0, $5 = 0, $50 = 0, $500 = 0, $501 = 0, $502 = 0, $503 = 0, $504 = 0, $505 = 0, $506 = 0, $507 = 0, $508 = 0, $509 = 0, $51 = 0, $510 = 0, $511 = 0;
- var $512 = 0, $513 = 0, $514 = 0, $515 = 0, $516 = 0, $517 = 0, $518 = 0, $519 = 0, $52 = 0, $520 = 0, $521 = 0, $522 = 0, $523 = 0, $524 = 0, $525 = 0, $526 = 0, $527 = 0, $528 = 0, $529 = 0, $53 = 0;
- var $530 = 0, $531 = 0, $532 = 0, $533 = 0, $534 = 0, $535 = 0, $536 = 0, $537 = 0, $538 = 0, $539 = 0, $54 = 0, $540 = 0, $541 = 0, $542 = 0, $543 = 0, $544 = 0, $545 = 0, $546 = 0, $547 = 0, $548 = 0;
- var $549 = 0, $55 = 0, $550 = 0, $551 = 0, $552 = 0, $553 = 0, $554 = 0, $555 = 0, $556 = 0, $557 = 0, $558 = 0, $559 = 0, $56 = 0, $560 = 0, $561 = 0, $562 = 0, $563 = 0, $564 = 0, $565 = 0, $566 = 0;
- var $567 = 0, $568 = 0, $569 = 0, $57 = 0, $570 = 0, $571 = 0, $572 = 0, $573 = 0, $574 = 0, $575 = 0, $576 = 0, $577 = 0, $578 = 0, $579 = 0, $58 = 0, $580 = 0, $581 = 0, $582 = 0, $583 = 0, $584 = 0;
- var $585 = 0, $586 = 0, $587 = 0, $588 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0;
- var $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0;
- var $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $or$cond = 0, $or$cond11 = 0, $or$cond9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);
- $11 = sp;
- $4 = $0;
- $5 = $1;
- $6 = $2;
- $12 = $4;
- $13 = (_no_optimize($12)|0);
- $14 = ($13<<24>>24)!=(0);
- L1: do {
-  if (!($14)) {
-   $15 = $4;
-   $16 = ((($15)) + 180|0);
-   $17 = HEAP32[$16>>2]|0;
-   $18 = $4;
-   $19 = ((($18)) + 176|0);
-   $20 = HEAP32[$19>>2]|0;
-   $21 = ($17|0)!=($20|0);
-   if ($21) {
-    $22 = $4;
-    $23 = ((($22)) + 176|0);
-    $24 = HEAP32[$23>>2]|0;
-    $25 = ($24|0)>(0);
-    if ($25) {
-     $26 = $4;
-     $27 = ((($26)) + 204|0);
-     $28 = HEAP32[$27>>2]|0;
-     $29 = $4;
-     $30 = ((($29)) + 176|0);
-     $31 = HEAP32[$30>>2]|0;
-     $32 = (($31) - 1)|0;
-     $33 = (($28) + ($32<<2)|0);
-     $34 = HEAP32[$33>>2]|0;
-     $7 = $34;
-     $35 = $5;
-     $36 = $35 & 127;
-     $8 = $36;
-     $37 = $7;
-     $38 = $37 & 127;
-     $9 = $38;
-     $39 = $8;
-     switch ($39|0) {
-     case 1:  {
-      $40 = $5;
-      $41 = $40 >>> 23;
-      $42 = $41 & 511;
-      $43 = $5;
-      $44 = $43 >>> 14;
-      $45 = $44 & 511;
-      $46 = ($42|0)==($45|0);
-      if ($46) {
-       $3 = 0;
-       $588 = $3;
-       STACKTOP = sp;return ($588|0);
-      }
-      $47 = $6;
-      $48 = ($47|0)!=(0);
-      if ($48) {
-       break L1;
-      }
-      $49 = $9;
-      switch ($49|0) {
-      case 1:  {
-       $50 = $5;
-       $51 = $50 >>> 23;
-       $52 = $51 & 511;
-       $53 = $7;
-       $54 = $53 >>> 23;
-       $55 = $54 & 511;
-       $56 = ($52|0)==($55|0);
-       if ($56) {
-        $57 = $4;
-        $58 = ((($57)) + 176|0);
-        $59 = HEAP32[$58>>2]|0;
-        $60 = (($59) + -1)|0;
-        HEAP32[$58>>2] = $60;
-        $61 = $5;
-        $62 = $4;
-        $63 = ((($62)) + 204|0);
-        $64 = HEAP32[$63>>2]|0;
-        $65 = $4;
-        $66 = ((($65)) + 176|0);
-        $67 = HEAP32[$66>>2]|0;
-        $68 = (($64) + ($67<<2)|0);
-        HEAP32[$68>>2] = $61;
-       }
-       $69 = $5;
-       $70 = $69 >>> 14;
-       $71 = $70 & 511;
-       $72 = $7;
-       $73 = $72 >>> 23;
-       $74 = $73 & 511;
-       $75 = ($71|0)==($74|0);
-       if ($75) {
-        $76 = $5;
-        $77 = $76 >>> 23;
-        $78 = $77 & 511;
-        $79 = $7;
-        $80 = $79 >>> 14;
-        $81 = $80 & 511;
-        $82 = ($78|0)==($81|0);
-        if ($82) {
-         $3 = 0;
-         $588 = $3;
-         STACKTOP = sp;return ($588|0);
-        }
-       }
-       $83 = $5;
-       $84 = $83 >>> 14;
-       $85 = $84 & 511;
-       $86 = $7;
-       $87 = $86 >>> 23;
-       $88 = $87 & 511;
-       $89 = ($85|0)==($88|0);
-       if (!($89)) {
-        break L1;
-       }
-       $90 = $7;
-       $91 = $90 >>> 23;
-       $92 = $91 & 511;
-       $93 = $4;
-       $94 = ((($93)) + 232|0);
-       $95 = HEAP16[$94>>1]|0;
-       $96 = $95&65535;
-       $97 = ($92|0)>=($96|0);
-       if (!($97)) {
-        break L1;
-       }
-       $98 = $4;
-       $99 = ((($98)) + 176|0);
-       $100 = HEAP32[$99>>2]|0;
-       $101 = (($100) + -1)|0;
-       HEAP32[$99>>2] = $101;
-       $102 = $4;
-       $103 = $5;
-       $104 = $103 >>> 23;
-       $105 = $104 & 511;
-       $106 = $105 & 511;
-       $107 = $106 << 23;
-       $108 = 1 | $107;
-       $109 = $7;
-       $110 = $109 >>> 14;
-       $111 = $110 & 511;
-       $112 = $111 & 511;
-       $113 = $112 << 14;
-       $114 = $108 | $113;
-       $115 = $6;
-       $116 = (_genop_peep($102,$114,$115)|0);
-       $3 = $116;
-       $588 = $3;
-       STACKTOP = sp;return ($588|0);
-       break;
-      }
-      case 3:  {
-       $117 = $5;
-       $118 = $117 >>> 14;
-       $119 = $118 & 511;
-       $120 = $7;
-       $121 = $120 >>> 23;
-       $122 = $121 & 511;
-       $123 = ($119|0)==($122|0);
-       if (!($123)) {
-        break L1;
-       }
-       $124 = $7;
-       $125 = $124 >>> 23;
-       $126 = $125 & 511;
-       $127 = $4;
-       $128 = ((($127)) + 232|0);
-       $129 = HEAP16[$128>>1]|0;
-       $130 = $129&65535;
-       $131 = ($126|0)>=($130|0);
-       if (!($131)) {
-        break L1;
-       }
-       $132 = $5;
-       $133 = $132 >>> 23;
-       $134 = $133 & 511;
-       $135 = $134 & 511;
-       $136 = $135 << 23;
-       $137 = 3 | $136;
-       $138 = $7;
-       $139 = $138 >>> 7;
-       $140 = $139 & 65535;
-       $141 = (($140) - 32767)|0;
-       $142 = (($141) + 32767)|0;
-       $143 = $142 & 65535;
-       $144 = $143 << 7;
-       $145 = $137 | $144;
-       $146 = $4;
-       $147 = ((($146)) + 204|0);
-       $148 = HEAP32[$147>>2]|0;
-       $149 = $4;
-       $150 = ((($149)) + 176|0);
-       $151 = HEAP32[$150>>2]|0;
-       $152 = (($151) - 1)|0;
-       $153 = (($148) + ($152<<2)|0);
-       HEAP32[$153>>2] = $145;
-       $3 = 0;
-       $588 = $3;
-       STACKTOP = sp;return ($588|0);
-       break;
-      }
-      case 21: case 58: case 65: case 63: case 55:  {
-       $154 = $5;
-       $155 = $154 >>> 14;
-       $156 = $155 & 511;
-       $157 = $7;
-       $158 = $157 >>> 23;
-       $159 = $158 & 511;
-       $160 = ($156|0)==($159|0);
-       if (!($160)) {
-        break L1;
-       }
-       $161 = $7;
-       $162 = $161 >>> 23;
-       $163 = $162 & 511;
-       $164 = $4;
-       $165 = ((($164)) + 232|0);
-       $166 = HEAP16[$165>>1]|0;
-       $167 = $166&65535;
-       $168 = ($163|0)>=($167|0);
-       if (!($168)) {
-        break L1;
-       }
-       $169 = $9;
-       $170 = $169 & 127;
-       $171 = $5;
-       $172 = $171 >>> 23;
-       $173 = $172 & 511;
-       $174 = $173 & 511;
-       $175 = $174 << 23;
-       $176 = $170 | $175;
-       $177 = $7;
-       $178 = $177 >>> 14;
-       $179 = $178 & 511;
-       $180 = $179 & 511;
-       $181 = $180 << 14;
-       $182 = $176 | $181;
-       $183 = $7;
-       $184 = $183 >>> 7;
-       $185 = $184 & 127;
-       $186 = $185 & 127;
-       $187 = $186 << 7;
-       $188 = $182 | $187;
-       $189 = $4;
-       $190 = ((($189)) + 204|0);
-       $191 = HEAP32[$190>>2]|0;
-       $192 = $4;
-       $193 = ((($192)) + 176|0);
-       $194 = HEAP32[$193>>2]|0;
-       $195 = (($194) - 1)|0;
-       $196 = (($191) + ($195<<2)|0);
-       HEAP32[$196>>2] = $188;
-       $3 = 0;
-       $588 = $3;
-       STACKTOP = sp;return ($588|0);
-       break;
-      }
-      case 61: case 2: case 11: case 17: case 15: case 13: case 9: case 4:  {
-       $197 = $5;
-       $198 = $197 >>> 14;
-       $199 = $198 & 511;
-       $200 = $7;
-       $201 = $200 >>> 23;
-       $202 = $201 & 511;
-       $203 = ($199|0)==($202|0);
-       if (!($203)) {
-        break L1;
-       }
-       $204 = $7;
-       $205 = $204 >>> 23;
-       $206 = $205 & 511;
-       $207 = $4;
-       $208 = ((($207)) + 232|0);
-       $209 = HEAP16[$208>>1]|0;
-       $210 = $209&65535;
-       $211 = ($206|0)>=($210|0);
-       if (!($211)) {
-        break L1;
-       }
-       $212 = $9;
-       $213 = $212 & 127;
-       $214 = $5;
-       $215 = $214 >>> 23;
-       $216 = $215 & 511;
-       $217 = $216 & 511;
-       $218 = $217 << 23;
-       $219 = $213 | $218;
-       $220 = $7;
-       $221 = $220 >>> 7;
-       $222 = $221 & 65535;
-       $223 = $222 & 65535;
-       $224 = $223 << 7;
-       $225 = $219 | $224;
-       $226 = $4;
-       $227 = ((($226)) + 204|0);
-       $228 = HEAP32[$227>>2]|0;
-       $229 = $4;
-       $230 = ((($229)) + 176|0);
-       $231 = HEAP32[$230>>2]|0;
-       $232 = (($231) - 1)|0;
-       $233 = (($228) + ($232<<2)|0);
-       HEAP32[$233>>2] = $225;
-       $3 = 0;
-       $588 = $3;
-       STACKTOP = sp;return ($588|0);
-       break;
-      }
-      case 71:  {
-       $234 = $5;
-       $235 = $234 >>> 14;
-       $236 = $235 & 511;
-       $237 = $7;
-       $238 = $237 >>> 23;
-       $239 = $238 & 511;
-       $240 = ($236|0)==($239|0);
-       if (!($240)) {
-        break L1;
-       }
-       $241 = $7;
-       $242 = $241 >>> 23;
-       $243 = $242 & 511;
-       $244 = $4;
-       $245 = ((($244)) + 232|0);
-       $246 = HEAP16[$245>>1]|0;
-       $247 = $246&65535;
-       $248 = ($243|0)>=($247|0);
-       if (!($248)) {
-        break L1;
-       }
-       $249 = $9;
-       $250 = $249 & 127;
-       $251 = $5;
-       $252 = $251 >>> 23;
-       $253 = $252 & 511;
-       $254 = $253 & 511;
-       $255 = $254 << 23;
-       $256 = $250 | $255;
-       $257 = $7;
-       $258 = $257 >>> 14;
-       $259 = $258 & 511;
-       $260 = $259 & 511;
-       $261 = $260 << 14;
-       $262 = $256 | $261;
-       $263 = $4;
-       $264 = ((($263)) + 204|0);
-       $265 = HEAP32[$264>>2]|0;
-       $266 = $4;
-       $267 = ((($266)) + 176|0);
-       $268 = HEAP32[$267>>2]|0;
-       $269 = (($268) - 1)|0;
-       $270 = (($265) + ($269<<2)|0);
-       HEAP32[$270>>2] = $262;
-       $3 = 0;
-       $588 = $3;
-       STACKTOP = sp;return ($588|0);
-       break;
-      }
-      case 66: case 8: case 7: case 6: case 5:  {
-       $271 = $5;
-       $272 = $271 >>> 14;
-       $273 = $272 & 511;
-       $274 = $7;
-       $275 = $274 >>> 23;
-       $276 = $275 & 511;
-       $277 = ($273|0)==($276|0);
-       if (!($277)) {
-        break L1;
-       }
-       $278 = $7;
-       $279 = $278 >>> 23;
-       $280 = $279 & 511;
-       $281 = $4;
-       $282 = ((($281)) + 232|0);
-       $283 = HEAP16[$282>>1]|0;
-       $284 = $283&65535;
-       $285 = ($280|0)>=($284|0);
-       if (!($285)) {
-        break L1;
-       }
-       $286 = $9;
-       $287 = $286 & 127;
-       $288 = $5;
-       $289 = $288 >>> 23;
-       $290 = $289 & 511;
-       $291 = $290 & 511;
-       $292 = $291 << 23;
-       $293 = $287 | $292;
-       $294 = $4;
-       $295 = ((($294)) + 204|0);
-       $296 = HEAP32[$295>>2]|0;
-       $297 = $4;
-       $298 = ((($297)) + 176|0);
-       $299 = HEAP32[$298>>2]|0;
-       $300 = (($299) - 1)|0;
-       $301 = (($296) + ($300<<2)|0);
-       HEAP32[$301>>2] = $293;
-       $3 = 0;
-       $588 = $3;
-       STACKTOP = sp;return ($588|0);
-       break;
-      }
-      default: {
-       break L1;
-      }
-      }
-      break;
-     }
-     case 10: case 20: case 18: case 16: case 14:  {
-      $302 = $6;
-      $303 = ($302|0)==(0);
-      $304 = $9;
-      $305 = ($304|0)==(1);
-      $or$cond9 = $303 & $305;
-      if (!($or$cond9)) {
-       break L1;
-      }
-      $306 = $5;
-      $307 = $306 >>> 23;
-      $308 = $307 & 511;
-      $309 = $7;
-      $310 = $309 >>> 23;
-      $311 = $310 & 511;
-      $312 = ($308|0)==($311|0);
-      if (!($312)) {
-       break L1;
-      }
-      $313 = $8;
-      $314 = $313 & 127;
-      $315 = $7;
-      $316 = $315 >>> 14;
-      $317 = $316 & 511;
-      $318 = $317 & 511;
-      $319 = $318 << 23;
-      $320 = $314 | $319;
-      $321 = $5;
-      $322 = $321 >>> 7;
-      $323 = $322 & 65535;
-      $324 = $323 & 65535;
-      $325 = $324 << 7;
-      $326 = $320 | $325;
-      $327 = $4;
-      $328 = ((($327)) + 204|0);
-      $329 = HEAP32[$328>>2]|0;
-      $330 = $4;
-      $331 = ((($330)) + 176|0);
-      $332 = HEAP32[$331>>2]|0;
-      $333 = (($332) - 1)|0;
-      $334 = (($329) + ($333<<2)|0);
-      HEAP32[$334>>2] = $326;
-      $3 = 0;
-      $588 = $3;
-      STACKTOP = sp;return ($588|0);
-      break;
-     }
-     case 22:  {
-      $335 = $6;
-      $336 = ($335|0)==(0);
-      $337 = $9;
-      $338 = ($337|0)==(1);
-      $or$cond11 = $336 & $338;
-      if (!($or$cond11)) {
-       break L1;
-      }
-      $339 = $5;
-      $340 = $339 >>> 23;
-      $341 = $340 & 511;
-      $342 = $7;
-      $343 = $342 >>> 23;
-      $344 = $343 & 511;
-      $345 = ($341|0)==($344|0);
-      if (!($345)) {
-       break L1;
-      }
-      $346 = $8;
-      $347 = $346 & 127;
-      $348 = $7;
-      $349 = $348 >>> 14;
-      $350 = $349 & 511;
-      $351 = $350 & 511;
-      $352 = $351 << 23;
-      $353 = $347 | $352;
-      $354 = $5;
-      $355 = $354 >>> 14;
-      $356 = $355 & 511;
-      $357 = $356 & 511;
-      $358 = $357 << 14;
-      $359 = $353 | $358;
-      $360 = $5;
-      $361 = $360 >>> 7;
-      $362 = $361 & 127;
-      $363 = $362 & 127;
-      $364 = $363 << 7;
-      $365 = $359 | $364;
-      $366 = $4;
-      $367 = ((($366)) + 204|0);
-      $368 = HEAP32[$367>>2]|0;
-      $369 = $4;
-      $370 = ((($369)) + 176|0);
-      $371 = HEAP32[$370>>2]|0;
-      $372 = (($371) - 1)|0;
-      $373 = (($368) + ($372<<2)|0);
-      HEAP32[$373>>2] = $365;
-      $3 = 0;
-      $588 = $3;
-      STACKTOP = sp;return ($588|0);
-      break;
-     }
-     case 31:  {
-      $374 = $9;
-      $375 = ($374|0)==(31);
-      if (!($375)) {
-       break L1;
-      }
-      $376 = $7;
-      $377 = $376 >>> 23;
-      $378 = $377 & 511;
-      $379 = $5;
-      $380 = $379 >>> 23;
-      $381 = $380 & 511;
-      $382 = (($378) + ($381))|0;
-      $383 = $382 & 511;
-      $384 = $383 << 23;
-      $385 = 31 | $384;
-      $386 = $4;
-      $387 = ((($386)) + 204|0);
-      $388 = HEAP32[$387>>2]|0;
-      $389 = $4;
-      $390 = ((($389)) + 176|0);
-      $391 = HEAP32[$390>>2]|0;
-      $392 = (($391) - 1)|0;
-      $393 = (($388) + ($392<<2)|0);
-      HEAP32[$393>>2] = $385;
-      $3 = 0;
-      $588 = $3;
-      STACKTOP = sp;return ($588|0);
-      break;
-     }
-     case 28:  {
-      $394 = $9;
-      $395 = ($394|0)==(28);
-      if (!($395)) {
-       break L1;
-      }
-      $396 = $7;
-      $397 = $396 >>> 23;
-      $398 = $397 & 511;
-      $399 = $5;
-      $400 = $399 >>> 23;
-      $401 = $400 & 511;
-      $402 = (($398) + ($401))|0;
-      $403 = $402 & 511;
-      $404 = $403 << 23;
-      $405 = 28 | $404;
-      $406 = $4;
-      $407 = ((($406)) + 204|0);
-      $408 = HEAP32[$407>>2]|0;
-      $409 = $4;
-      $410 = ((($409)) + 176|0);
-      $411 = HEAP32[$410>>2]|0;
-      $412 = (($411) - 1)|0;
-      $413 = (($408) + ($412<<2)|0);
-      HEAP32[$413>>2] = $405;
-      $3 = 0;
-      $588 = $3;
-      STACKTOP = sp;return ($588|0);
-      break;
-     }
-     case 41:  {
-      $414 = $9;
-      switch ($414|0) {
-      case 41:  {
-       $3 = 0;
-       $588 = $3;
-       STACKTOP = sp;return ($588|0);
-       break;
-      }
-      case 1:  {
-       $415 = $7;
-       $416 = $415 >>> 23;
-       $417 = $416 & 511;
-       $418 = $4;
-       $419 = ((($418)) + 232|0);
-       $420 = HEAP16[$419>>1]|0;
-       $421 = $420&65535;
-       $422 = ($417|0)>=($421|0);
-       if (!($422)) {
-        break L1;
-       }
-       $423 = $7;
-       $424 = $423 >>> 14;
-       $425 = $424 & 511;
-       $426 = $425 & 511;
-       $427 = $426 << 23;
-       $428 = 41 | $427;
-       $429 = $4;
-       $430 = ((($429)) + 204|0);
-       $431 = HEAP32[$430>>2]|0;
-       $432 = $4;
-       $433 = ((($432)) + 176|0);
-       $434 = HEAP32[$433>>2]|0;
-       $435 = (($434) - 1)|0;
-       $436 = (($431) + ($435<<2)|0);
-       HEAP32[$436>>2] = $428;
-       $3 = 0;
-       $588 = $3;
-       STACKTOP = sp;return ($588|0);
-       break;
-      }
-      case 10: case 22: case 20: case 18: case 16: case 14:  {
-       $437 = $4;
-       $438 = ((($437)) + 176|0);
-       $439 = HEAP32[$438>>2]|0;
-       $440 = (($439) + -1)|0;
-       HEAP32[$438>>2] = $440;
-       $441 = $4;
-       $442 = $7;
-       (_genop_peep($441,$442,0)|0);
-       $443 = $4;
-       $444 = ((($443)) + 204|0);
-       $445 = HEAP32[$444>>2]|0;
-       $446 = $4;
-       $447 = ((($446)) + 176|0);
-       $448 = HEAP32[$447>>2]|0;
-       $449 = (($448) - 1)|0;
-       $450 = (($445) + ($449<<2)|0);
-       $451 = HEAP32[$450>>2]|0;
-       $7 = $451;
-       $452 = $4;
-       $453 = $7;
-       $454 = $453 >>> 23;
-       $455 = $454 & 511;
-       $456 = $455 & 511;
-       $457 = $456 << 23;
-       $458 = 41 | $457;
-       $459 = (_genop($452,$458)|0);
-       $3 = $459;
-       $588 = $3;
-       STACKTOP = sp;return ($588|0);
-       break;
-      }
-      default: {
-       break L1;
-      }
-      }
-      break;
-     }
-     case 46: case 44:  {
-      $460 = $9;
-      $461 = ($460|0)==(3);
-      if ($461) {
-       $462 = $7;
-       $463 = $462 >>> 7;
-       $464 = $463 & 65535;
-       $465 = (($464) - 32767)|0;
-       $10 = $465;
-       $466 = $8;
-       $467 = ($466|0)==(46);
-       if ($467) {
-        $468 = $10;
-        $469 = (0 - ($468))|0;
-        $10 = $469;
-       }
-       $470 = $10;
-       $471 = ($470|0)>(127);
-       $472 = $10;
-       $473 = ($472|0)<(-127);
-       $or$cond = $471 | $473;
-       if ($or$cond) {
-        break L1;
-       }
-       $474 = $10;
-       $475 = (0)<=($474|0);
-       $476 = $5;
-       $477 = $476 >>> 23;
-       $478 = $477 & 511;
-       $479 = $478 & 511;
-       $480 = $479 << 23;
-       if ($475) {
-        $481 = 45 | $480;
-        $482 = $5;
-        $483 = $482 >>> 14;
-        $484 = $483 & 511;
-        $485 = $484 & 511;
-        $486 = $485 << 14;
-        $487 = $481 | $486;
-        $488 = $10;
-        $489 = $488 & 127;
-        $490 = $489 << 7;
-        $491 = $487 | $490;
-        $492 = $4;
-        $493 = ((($492)) + 204|0);
-        $494 = HEAP32[$493>>2]|0;
-        $495 = $4;
-        $$sink = $491;$$sink3 = $494;$$sink7 = $495;
-       } else {
-        $496 = 47 | $480;
-        $497 = $5;
-        $498 = $497 >>> 14;
-        $499 = $498 & 511;
-        $500 = $499 & 511;
-        $501 = $500 << 14;
-        $502 = $496 | $501;
-        $503 = $10;
-        $504 = (0 - ($503))|0;
-        $505 = $504 & 127;
-        $506 = $505 << 7;
-        $507 = $502 | $506;
-        $508 = $4;
-        $509 = ((($508)) + 204|0);
-        $510 = HEAP32[$509>>2]|0;
-        $511 = $4;
-        $$sink = $507;$$sink3 = $510;$$sink7 = $511;
-       }
-       $512 = ((($$sink7)) + 176|0);
-       $513 = HEAP32[$512>>2]|0;
-       $514 = (($513) - 1)|0;
-       $515 = (($$sink3) + ($514<<2)|0);
-       HEAP32[$515>>2] = $$sink;
-       $3 = 0;
-       $588 = $3;
-       STACKTOP = sp;return ($588|0);
-      }
-      break;
-     }
-     case 62:  {
-      break;
-     }
-     case 25: case 24:  {
-      $548 = $9;
-      $549 = ($548|0)==(1);
-      if (!($549)) {
-       break L1;
-      }
-      $550 = $5;
-      $551 = $550 >>> 23;
-      $552 = $551 & 511;
-      $553 = $7;
-      $554 = $553 >>> 23;
-      $555 = $554 & 511;
-      $556 = ($552|0)==($555|0);
-      if (!($556)) {
-       break L1;
-      }
-      $557 = $8;
-      $558 = $557 & 127;
-      $559 = $7;
-      $560 = $559 >>> 14;
-      $561 = $560 & 511;
-      $562 = $561 & 511;
-      $563 = $562 << 23;
-      $564 = $558 | $563;
-      $565 = $5;
-      $566 = $565 >>> 7;
-      $567 = $566 & 65535;
-      $568 = (($567) - 32767)|0;
-      $569 = (($568) + 32767)|0;
-      $570 = $569 & 65535;
-      $571 = $570 << 7;
-      $572 = $564 | $571;
-      $573 = $4;
-      $574 = ((($573)) + 204|0);
-      $575 = HEAP32[$574>>2]|0;
-      $576 = $4;
-      $577 = ((($576)) + 176|0);
-      $578 = HEAP32[$577>>2]|0;
-      $579 = (($578) - 1)|0;
-      $580 = (($575) + ($579<<2)|0);
-      HEAP32[$580>>2] = $572;
-      $581 = $4;
-      $582 = ((($581)) + 176|0);
-      $583 = HEAP32[$582>>2]|0;
-      $584 = (($583) - 1)|0;
-      $3 = $584;
-      $588 = $3;
-      STACKTOP = sp;return ($588|0);
-      break;
-     }
-     default: {
-      break L1;
-     }
-     }
-     $516 = $9;
-     $517 = ($516|0)==(61);
-     if ($517) {
-      $518 = $4;
-      $519 = ((($518)) + 216|0);
-      $520 = HEAP32[$519>>2]|0;
-      $521 = ((($520)) + 12|0);
-      $522 = HEAP32[$521>>2]|0;
-      $523 = $7;
-      $524 = $523 >>> 7;
-      $525 = $524 & 65535;
-      $526 = (($522) + ($525<<3)|0);
-      ;HEAP32[$11>>2]=HEAP32[$526>>2]|0;HEAP32[$11+4>>2]=HEAP32[$526+4>>2]|0;
-      $527 = ((($11)) + 4|0);
-      $528 = HEAP32[$527>>2]|0;
-      $529 = ($528|0)==(16);
-      if ($529) {
-       $530 = HEAP32[$11>>2]|0;
-       $531 = HEAP32[$530>>2]|0;
-       $532 = $531 >>> 11;
-       $533 = $532 & 8;
-       $534 = ($533|0)!=(0);
-       $535 = HEAP32[$11>>2]|0;
-       if ($534) {
-        $536 = HEAP32[$535>>2]|0;
-        $537 = $536 >>> 11;
-        $538 = $537 & 496;
-        $539 = $538 >> 4;
-        $543 = $539;
-       } else {
-        $540 = ((($535)) + 12|0);
-        $541 = HEAP32[$540>>2]|0;
-        $543 = $541;
-       }
-       $542 = ($543|0)==(0);
-       if ($542) {
-        $544 = $4;
-        $545 = ((($544)) + 176|0);
-        $546 = HEAP32[$545>>2]|0;
-        $547 = (($546) + -1)|0;
-        HEAP32[$545>>2] = $547;
-        $3 = 0;
-        $588 = $3;
-        STACKTOP = sp;return ($588|0);
-       }
-      }
-     }
-    }
-   }
-  }
- } while(0);
- $585 = $4;
- $586 = $5;
- $587 = (_genop($585,$586)|0);
- $3 = $587;
- $588 = $3;
- STACKTOP = sp;return ($588|0);
-}
-function _lambda_body($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;
- var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0;
- var $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0, $152 = 0, $153 = 0;
- var $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0, $170 = 0, $171 = 0;
- var $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0, $188 = 0, $189 = 0, $19 = 0;
- var $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0, $197 = 0, $198 = 0, $199 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0, $204 = 0, $205 = 0, $206 = 0, $207 = 0, $208 = 0;
- var $209 = 0, $21 = 0, $210 = 0, $211 = 0, $212 = 0, $213 = 0, $214 = 0, $215 = 0, $216 = 0, $217 = 0, $218 = 0, $219 = 0, $22 = 0, $220 = 0, $221 = 0, $222 = 0, $223 = 0, $224 = 0, $225 = 0, $226 = 0;
- var $227 = 0, $228 = 0, $229 = 0, $23 = 0, $230 = 0, $231 = 0, $232 = 0, $233 = 0, $234 = 0, $235 = 0, $236 = 0, $237 = 0, $238 = 0, $239 = 0, $24 = 0, $240 = 0, $241 = 0, $242 = 0, $243 = 0, $244 = 0;
- var $245 = 0, $246 = 0, $247 = 0, $248 = 0, $249 = 0, $25 = 0, $250 = 0, $251 = 0, $252 = 0, $253 = 0, $254 = 0, $255 = 0, $256 = 0, $257 = 0, $258 = 0, $259 = 0, $26 = 0, $260 = 0, $261 = 0, $262 = 0;
- var $263 = 0, $264 = 0, $265 = 0, $266 = 0, $267 = 0, $268 = 0, $269 = 0, $27 = 0, $270 = 0, $271 = 0, $272 = 0, $273 = 0, $274 = 0, $275 = 0, $276 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0;
- var $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0;
- var $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0;
- var $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0;
- var $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 80|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(80|0);
- $3 = $0;
- $4 = $1;
- $5 = $2;
- $22 = $3;
- $7 = $22;
- $23 = $3;
- $24 = HEAP32[$23>>2]|0;
- $25 = $3;
- $26 = $4;
- $27 = HEAP32[$26>>2]|0;
- $28 = (_scope_new($24,$25,$27)|0);
- $3 = $28;
- $29 = $3;
- $30 = ($29|0)==(0|0);
- if ($30) {
-  $31 = $7;
-  _raise_error($31,69839);
- }
- $32 = $5;
- $33 = ($32|0)!=(0);
- $34 = $33 ^ 1;
- $35 = $34&1;
- $36 = $35&255;
- $37 = $3;
- $38 = ((($37)) + 184|0);
- $39 = $36&255;
- $40 = HEAP16[$38>>1]|0;
- $41 = $39 & 1;
- $42 = ($41 << 15)&65535;
- $43 = $40 & 32767;
- $44 = $43 | $42;
- HEAP16[$38>>1] = $44;
- $45 = $5;
- $46 = ($45|0)!=(0);
- if ($46) {
-  $47 = $3;
-  $48 = (_loop_push($47,1)|0);
-  $8 = $48;
-  $49 = $3;
-  $50 = (_new_label($49)|0);
-  $51 = $8;
-  $52 = ((($51)) + 4|0);
-  HEAP32[$52>>2] = $50;
- }
- $53 = $4;
- $54 = ((($53)) + 4|0);
- $55 = HEAP32[$54>>2]|0;
- $4 = $55;
- $56 = $4;
- $57 = HEAP32[$56>>2]|0;
- $58 = ($57|0)!=(0|0);
- if ($58) {
-  $59 = $4;
-  $60 = HEAP32[$59>>2]|0;
-  $61 = HEAP32[$60>>2]|0;
-  $62 = (_node_len($61)|0);
-  $10 = $62;
-  $63 = $4;
-  $64 = HEAP32[$63>>2]|0;
-  $65 = HEAP32[$64>>2]|0;
-  $19 = $65;
-  while(1) {
-   $66 = $19;
-   $67 = ($66|0)!=(0|0);
-   if (!($67)) {
-    break;
-   }
-   $68 = $19;
-   $69 = ((($68)) + 4|0);
-   $70 = HEAP32[$69>>2]|0;
-   $19 = $70;
-  }
-  $71 = $4;
-  $72 = HEAP32[$71>>2]|0;
-  $73 = ((($72)) + 4|0);
-  $74 = HEAP32[$73>>2]|0;
-  $75 = HEAP32[$74>>2]|0;
-  $76 = (_node_len($75)|0);
-  $11 = $76;
-  $77 = $4;
-  $78 = HEAP32[$77>>2]|0;
-  $79 = ((($78)) + 4|0);
-  $80 = HEAP32[$79>>2]|0;
-  $81 = ((($80)) + 4|0);
-  $82 = HEAP32[$81>>2]|0;
-  $83 = HEAP32[$82>>2]|0;
-  $84 = ($83|0)!=(0|0);
-  $85 = $84 ? 1 : 0;
-  $12 = $85;
-  $86 = $4;
-  $87 = HEAP32[$86>>2]|0;
-  $88 = ((($87)) + 4|0);
-  $89 = HEAP32[$88>>2]|0;
-  $90 = ((($89)) + 4|0);
-  $91 = HEAP32[$90>>2]|0;
-  $92 = ((($91)) + 4|0);
-  $93 = HEAP32[$92>>2]|0;
-  $94 = HEAP32[$93>>2]|0;
-  $95 = (_node_len($94)|0);
-  $13 = $95;
-  $15 = 0;
-  $14 = 0;
-  $96 = $4;
-  $97 = HEAP32[$96>>2]|0;
-  $98 = ((($97)) + 4|0);
-  $99 = HEAP32[$98>>2]|0;
-  $100 = ((($99)) + 4|0);
-  $101 = HEAP32[$100>>2]|0;
-  $102 = ((($101)) + 4|0);
-  $103 = HEAP32[$102>>2]|0;
-  $104 = ((($103)) + 4|0);
-  $105 = HEAP32[$104>>2]|0;
-  $106 = ($105|0)!=(0|0);
-  $107 = $106 ? 1 : 0;
-  $16 = $107;
-  $108 = $10;
-  $109 = $108 & 31;
-  $110 = $109 << 18;
-  $111 = $11;
-  $112 = $111 & 31;
-  $113 = $112 << 13;
-  $114 = $110 | $113;
-  $115 = $12;
-  $116 = $115 & 1;
-  $117 = $116 << 12;
-  $118 = $114 | $117;
-  $119 = $13;
-  $120 = $119 & 31;
-  $121 = $120 << 7;
-  $122 = $118 | $121;
-  $123 = $14;
-  $124 = $123 & 31;
-  $125 = $124 << 2;
-  $126 = $122 | $125;
-  $127 = $15;
-  $128 = $127 & 1;
-  $129 = $128 << 1;
-  $130 = $126 | $129;
-  $131 = $16;
-  $132 = $131 & 1;
-  $133 = $130 | $132;
-  $9 = $133;
-  $134 = $10;
-  $135 = $11;
-  $136 = (($134) + ($135))|0;
-  $137 = $136 & 63;
-  $138 = $137 << 6;
-  $139 = $12;
-  $140 = $139 & 1;
-  $141 = $140 << 5;
-  $142 = $138 | $141;
-  $143 = $13;
-  $144 = $143 & 31;
-  $145 = $142 | $144;
-  $146 = $3;
-  $147 = ((($146)) + 184|0);
-  $148 = $145&65535;
-  $149 = HEAP16[$147>>1]|0;
-  $150 = $148 & 32767;
-  $151 = $149 & -32768;
-  $152 = $151 | $150;
-  HEAP16[$147>>1] = $152;
-  $153 = $3;
-  $154 = $9;
-  $155 = $154 & 33554431;
-  $156 = $155 << 7;
-  $157 = 38 | $156;
-  (_genop($153,$157)|0);
-  $158 = $3;
-  $159 = (_new_label($158)|0);
-  $17 = $159;
-  $18 = 0;
-  while(1) {
-   $160 = $18;
-   $161 = $11;
-   $162 = ($160|0)<($161|0);
-   if (!($162)) {
-    break;
-   }
-   $163 = $3;
-   (_new_label($163)|0);
-   $164 = $3;
-   (_genop($164,4194199)|0);
-   $165 = $18;
-   $166 = (($165) + 1)|0;
-   $18 = $166;
-  }
-  $167 = $11;
-  $168 = ($167|0)>(0);
-  if ($168) {
-   $169 = $3;
-   (_genop($169,4194199)|0);
-  }
-  $170 = $4;
-  $171 = HEAP32[$170>>2]|0;
-  $172 = ((($171)) + 4|0);
-  $173 = HEAP32[$172>>2]|0;
-  $174 = HEAP32[$173>>2]|0;
-  $20 = $174;
-  $18 = 0;
-  while(1) {
-   $175 = $20;
-   $176 = ($175|0)!=(0|0);
-   if (!($176)) {
-    break;
-   }
-   $177 = $3;
-   $178 = $17;
-   $179 = $18;
-   $180 = (($178) + ($179))|0;
-   _dispatch($177,$180);
-   $181 = $3;
-   $182 = $20;
-   $183 = HEAP32[$182>>2]|0;
-   $184 = ((($183)) + 4|0);
-   $185 = HEAP32[$184>>2]|0;
-   _codegen($181,$185,1);
-   $186 = $3;
-   $187 = $20;
-   $188 = HEAP32[$187>>2]|0;
-   $189 = HEAP32[$188>>2]|0;
-   $190 = $189;
-   $191 = (_lv_idx($186,$190)|0);
-   $21 = $191;
-   $192 = $3;
-   $193 = ((($192)) + 172|0);
-   $194 = HEAP32[$193>>2]|0;
-   $195 = (($194) + -1)|0;
-   HEAP32[$193>>2] = $195;
-   $196 = $3;
-   $197 = $21;
-   $198 = $197 & 511;
-   $199 = $198 << 23;
-   $200 = 1 | $199;
-   $201 = $3;
-   $202 = ((($201)) + 172|0);
-   $203 = HEAP32[$202>>2]|0;
-   $204 = $203 & 511;
-   $205 = $204 << 14;
-   $206 = $200 | $205;
-   (_genop_peep($196,$206,0)|0);
-   $207 = $18;
-   $208 = (($207) + 1)|0;
-   $18 = $208;
-   $209 = $20;
-   $210 = ((($209)) + 4|0);
-   $211 = HEAP32[$210>>2]|0;
-   $20 = $211;
-  }
-  $212 = $11;
-  $213 = ($212|0)>(0);
-  if ($213) {
-   $214 = $3;
-   $215 = $17;
-   $216 = $18;
-   $217 = (($215) + ($216))|0;
-   _dispatch($214,$217);
-  }
- }
- $218 = $3;
- $219 = $4;
- $220 = ((($219)) + 4|0);
- $221 = HEAP32[$220>>2]|0;
- $222 = HEAP32[$221>>2]|0;
- _codegen($218,$222,1);
- $223 = $3;
- $224 = ((($223)) + 172|0);
- $225 = HEAP32[$224>>2]|0;
- $226 = (($225) + -1)|0;
- HEAP32[$224>>2] = $226;
- $227 = $3;
- $228 = ((($227)) + 176|0);
- $229 = HEAP32[$228>>2]|0;
- $230 = ($229|0)>(0);
- do {
-  if ($230) {
-   $231 = $3;
-   $232 = ((($231)) + 204|0);
-   $233 = HEAP32[$232>>2]|0;
-   $234 = $3;
-   $235 = ((($234)) + 176|0);
-   $236 = HEAP32[$235>>2]|0;
-   $237 = (($236) - 1)|0;
-   $238 = (($233) + ($237<<2)|0);
-   $239 = HEAP32[$238>>2]|0;
-   $6 = $239;
-   $240 = $6;
-   $241 = $240 & 127;
-   $242 = ($241|0)!=(41);
-   if (!($242)) {
-    $243 = $6;
-    $244 = $243 >>> 14;
-    $245 = $244 & 511;
-    $246 = ($245|0)!=(0);
-    if (!($246)) {
-     $247 = $3;
-     $248 = ((($247)) + 176|0);
-     $249 = HEAP32[$248>>2]|0;
-     $250 = $3;
-     $251 = ((($250)) + 180|0);
-     $252 = HEAP32[$251>>2]|0;
-     $253 = ($249|0)==($252|0);
-     if (!($253)) {
-      break;
-     }
-    }
-   }
-   $254 = $3;
-   $255 = ((($254)) + 234|0);
-   $256 = HEAP16[$255>>1]|0;
-   $257 = $256&65535;
-   $258 = ($257|0)==(0);
-   $259 = $3;
-   if ($258) {
-    (_genop($259,5)|0);
-    $260 = $3;
-    (_genop($260,41)|0);
-    break;
-   } else {
-    $261 = $3;
-    $262 = ((($261)) + 172|0);
-    $263 = HEAP32[$262>>2]|0;
-    $264 = $263 & 511;
-    $265 = $264 << 23;
-    $266 = 41 | $265;
-    (_genop_peep($259,$266,0)|0);
-    break;
-   }
-  }
- } while(0);
- $267 = $5;
- $268 = ($267|0)!=(0);
- if (!($268)) {
-  $270 = $3;
-  _scope_finish($270);
-  $271 = $7;
-  $272 = ((($271)) + 216|0);
-  $273 = HEAP32[$272>>2]|0;
-  $274 = ((($273)) + 52|0);
-  $275 = HEAP32[$274>>2]|0;
-  $276 = (($275) - 1)|0;
-  STACKTOP = sp;return ($276|0);
- }
- $269 = $3;
- _loop_pop($269,0);
- $270 = $3;
- _scope_finish($270);
- $271 = $7;
- $272 = ((($271)) + 216|0);
- $273 = HEAP32[$272>>2]|0;
- $274 = ((($273)) + 52|0);
- $275 = HEAP32[$274>>2]|0;
- $276 = (($275) - 1)|0;
- STACKTOP = sp;return ($276|0);
-}
-function _new_label($0) {
- $0 = $0|0;
- var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $1 = $0;
- $2 = $1;
- $3 = ((($2)) + 176|0);
- $4 = HEAP32[$3>>2]|0;
- $5 = $1;
- $6 = ((($5)) + 180|0);
- HEAP32[$6>>2] = $4;
- $7 = $1;
- $8 = ((($7)) + 176|0);
- $9 = HEAP32[$8>>2]|0;
- STACKTOP = sp;return ($9|0);
-}
-function _for_body($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;
- var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $14 = 0;
- var $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0;
- var $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0;
- var $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0;
- var $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0;
- var $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $2 = $0;
- $3 = $1;
- $9 = $2;
- $4 = $9;
- $10 = $2;
- $11 = $3;
- $12 = ((($11)) + 4|0);
- $13 = HEAP32[$12>>2]|0;
- $14 = HEAP32[$13>>2]|0;
- _codegen($10,$14,1);
- $15 = $2;
- $16 = HEAP32[$15>>2]|0;
- $17 = $2;
- $18 = (_scope_new($16,$17,0)|0);
- $2 = $18;
- $19 = $2;
- $20 = ($19|0)==(0|0);
- if ($20) {
-  $21 = $4;
-  _raise_error($21,69839);
- }
- $22 = $2;
- _push_($22);
- $23 = $2;
- $24 = (_loop_push($23,2)|0);
- $6 = $24;
- $25 = $2;
- $26 = (_new_label($25)|0);
- $27 = $6;
- $28 = ((($27)) + 4|0);
- HEAP32[$28>>2] = $26;
- $29 = $3;
- $30 = HEAP32[$29>>2]|0;
- $7 = $30;
- $31 = $2;
- (_genop($31,33554470)|0);
- $32 = $7;
- $33 = HEAP32[$32>>2]|0;
- $34 = ($33|0)!=(0|0);
- if ($34) {
-  $35 = $7;
-  $36 = HEAP32[$35>>2]|0;
-  $37 = ((($36)) + 4|0);
-  $38 = HEAP32[$37>>2]|0;
-  $39 = ($38|0)!=(0|0);
-  if ($39) {
-   label = 7;
-  } else {
-   $40 = $7;
-   $41 = ((($40)) + 4|0);
-   $42 = HEAP32[$41>>2]|0;
-   $43 = ($42|0)!=(0|0);
-   if ($43) {
-    label = 7;
-   } else {
-    $44 = $2;
-    $45 = $7;
-    $46 = HEAP32[$45>>2]|0;
-    $47 = HEAP32[$46>>2]|0;
-    _gen_assignment($44,$47,1,0);
-   }
-  }
- } else {
-  label = 7;
- }
- if ((label|0) == 7) {
-  $48 = $2;
-  $49 = $7;
-  _gen_vmassignment($48,$49,1,1);
- }
- $50 = $2;
- $51 = $3;
- $52 = ((($51)) + 4|0);
- $53 = HEAP32[$52>>2]|0;
- $54 = ((($53)) + 4|0);
- $55 = HEAP32[$54>>2]|0;
- $56 = HEAP32[$55>>2]|0;
- _codegen($50,$56,1);
- $57 = $2;
- $58 = ((($57)) + 172|0);
- $59 = HEAP32[$58>>2]|0;
- $60 = (($59) + -1)|0;
- HEAP32[$58>>2] = $60;
- $61 = $2;
- $62 = ((($61)) + 176|0);
- $63 = HEAP32[$62>>2]|0;
- $64 = ($63|0)>(0);
- do {
-  if ($64) {
-   $65 = $2;
-   $66 = ((($65)) + 204|0);
-   $67 = HEAP32[$66>>2]|0;
-   $68 = $2;
-   $69 = ((($68)) + 176|0);
-   $70 = HEAP32[$69>>2]|0;
-   $71 = (($70) - 1)|0;
-   $72 = (($67) + ($71<<2)|0);
-   $73 = HEAP32[$72>>2]|0;
-   $8 = $73;
-   $74 = $8;
-   $75 = $74 & 127;
-   $76 = ($75|0)!=(41);
-   if (!($76)) {
-    $77 = $8;
-    $78 = $77 >>> 14;
-    $79 = $78 & 511;
-    $80 = ($79|0)!=(0);
-    if (!($80)) {
-     $81 = $2;
-     $82 = ((($81)) + 176|0);
-     $83 = HEAP32[$82>>2]|0;
-     $84 = $2;
-     $85 = ((($84)) + 180|0);
-     $86 = HEAP32[$85>>2]|0;
-     $87 = ($83|0)==($86|0);
-     if (!($87)) {
-      break;
-     }
-    }
-   }
-   $88 = $2;
-   $89 = $2;
-   $90 = ((($89)) + 172|0);
-   $91 = HEAP32[$90>>2]|0;
-   $92 = $91 & 511;
-   $93 = $92 << 23;
-   $94 = 41 | $93;
-   (_genop_peep($88,$94,0)|0);
-  }
- } while(0);
- $95 = $2;
- _loop_pop($95,0);
- $96 = $2;
- _scope_finish($96);
- $97 = $4;
- $2 = $97;
- $98 = $2;
- $99 = $2;
- $100 = ((($99)) + 172|0);
- $101 = HEAP32[$100>>2]|0;
- $102 = $101 & 511;
- $103 = $102 << 23;
- $104 = 64 | $103;
- $105 = $2;
- $106 = ((($105)) + 216|0);
- $107 = HEAP32[$106>>2]|0;
- $108 = ((($107)) + 52|0);
- $109 = HEAP32[$108>>2]|0;
- $110 = (($109) - 1)|0;
- $111 = $110 & 16383;
- $112 = $111 << 9;
- $113 = $112 | 256;
- $114 = $104 | $113;
- (_genop($98,$114)|0);
- $115 = $2;
- $116 = ((($115)) + 172|0);
- $117 = HEAP32[$116>>2]|0;
- $118 = (($117) + -1)|0;
- HEAP32[$116>>2] = $118;
- $119 = $2;
- $120 = $2;
- $121 = HEAP32[$120>>2]|0;
- $122 = (_mrb_intern_static($121,69856,4)|0);
- $123 = (_new_msym($119,$122)|0);
- $5 = $123;
- $124 = $2;
- $125 = $2;
- $126 = ((($125)) + 172|0);
- $127 = HEAP32[$126>>2]|0;
- $128 = $127 & 511;
- $129 = $128 << 23;
- $130 = 33 | $129;
- $131 = $5;
- $132 = $131 & 511;
- $133 = $132 << 14;
- $134 = $130 | $133;
- (_genop($124,$134)|0);
- STACKTOP = sp;return;
-}
-function _gen_call($0,$1,$2,$3,$4) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- $4 = $4|0;
- var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;
- var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0;
- var $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0, $152 = 0, $153 = 0;
- var $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0, $170 = 0, $171 = 0;
- var $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0, $188 = 0, $189 = 0, $19 = 0;
- var $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0, $197 = 0, $198 = 0, $199 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0, $204 = 0, $205 = 0, $206 = 0, $207 = 0, $208 = 0;
- var $209 = 0, $21 = 0, $210 = 0, $211 = 0, $212 = 0, $213 = 0, $214 = 0, $215 = 0, $216 = 0, $217 = 0, $218 = 0, $219 = 0, $22 = 0, $220 = 0, $221 = 0, $222 = 0, $223 = 0, $224 = 0, $225 = 0, $226 = 0;
- var $227 = 0, $228 = 0, $229 = 0, $23 = 0, $230 = 0, $231 = 0, $232 = 0, $233 = 0, $234 = 0, $235 = 0, $236 = 0, $237 = 0, $238 = 0, $239 = 0, $24 = 0, $240 = 0, $241 = 0, $242 = 0, $243 = 0, $244 = 0;
- var $245 = 0, $246 = 0, $247 = 0, $248 = 0, $249 = 0, $25 = 0, $250 = 0, $251 = 0, $252 = 0, $253 = 0, $254 = 0, $255 = 0, $256 = 0, $257 = 0, $258 = 0, $259 = 0, $26 = 0, $260 = 0, $261 = 0, $262 = 0;
- var $263 = 0, $264 = 0, $265 = 0, $266 = 0, $267 = 0, $268 = 0, $269 = 0, $27 = 0, $270 = 0, $271 = 0, $272 = 0, $273 = 0, $274 = 0, $275 = 0, $276 = 0, $277 = 0, $278 = 0, $279 = 0, $28 = 0, $280 = 0;
- var $281 = 0, $282 = 0, $283 = 0, $284 = 0, $285 = 0, $286 = 0, $287 = 0, $288 = 0, $289 = 0, $29 = 0, $290 = 0, $291 = 0, $292 = 0, $293 = 0, $294 = 0, $295 = 0, $296 = 0, $297 = 0, $298 = 0, $299 = 0;
- var $30 = 0, $300 = 0, $301 = 0, $302 = 0, $303 = 0, $304 = 0, $305 = 0, $306 = 0, $307 = 0, $308 = 0, $309 = 0, $31 = 0, $310 = 0, $311 = 0, $312 = 0, $313 = 0, $314 = 0, $315 = 0, $316 = 0, $317 = 0;
- var $318 = 0, $319 = 0, $32 = 0, $320 = 0, $321 = 0, $322 = 0, $323 = 0, $324 = 0, $325 = 0, $326 = 0, $327 = 0, $328 = 0, $329 = 0, $33 = 0, $330 = 0, $331 = 0, $332 = 0, $333 = 0, $334 = 0, $335 = 0;
- var $336 = 0, $337 = 0, $338 = 0, $339 = 0, $34 = 0, $340 = 0, $341 = 0, $342 = 0, $343 = 0, $344 = 0, $345 = 0, $346 = 0, $347 = 0, $348 = 0, $349 = 0, $35 = 0, $350 = 0, $351 = 0, $352 = 0, $353 = 0;
- var $354 = 0, $355 = 0, $356 = 0, $357 = 0, $358 = 0, $359 = 0, $36 = 0, $360 = 0, $361 = 0, $362 = 0, $363 = 0, $364 = 0, $365 = 0, $366 = 0, $367 = 0, $37 = 0, $38 = 0, $39 = 0, $40 = 0, $41 = 0;
- var $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0;
- var $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0;
- var $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0;
- var $97 = 0, $98 = 0, $99 = 0, $or$cond = 0, $or$cond11 = 0, $or$cond13 = 0, $or$cond15 = 0, $or$cond17 = 0, $or$cond3 = 0, $or$cond5 = 0, $or$cond7 = 0, $or$cond9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);
- $16 = sp + 4|0;
- $5 = $0;
- $6 = $1;
- $7 = $2;
- $8 = $3;
- $9 = $4;
- $18 = $7;
- $19 = ($18|0)!=(0);
- if ($19) {
-  $20 = $7;
-  $26 = $20;
- } else {
-  $21 = $6;
-  $22 = ((($21)) + 4|0);
-  $23 = HEAP32[$22>>2]|0;
-  $24 = HEAP32[$23>>2]|0;
-  $25 = $24;
-  $26 = $25;
- }
- $10 = $26;
- $12 = 0;
- $13 = 0;
- $14 = 0;
- $15 = 0;
- $27 = $5;
- $28 = $6;
- $29 = HEAP32[$28>>2]|0;
- _codegen($27,$29,1);
- $30 = $5;
- $31 = $10;
- $32 = (_new_msym($30,$31)|0);
- $11 = $32;
- $33 = $6;
- $34 = ((($33)) + 4|0);
- $35 = HEAP32[$34>>2]|0;
- $36 = ((($35)) + 4|0);
- $37 = HEAP32[$36>>2]|0;
- $38 = HEAP32[$37>>2]|0;
- $6 = $38;
- $39 = $6;
- $40 = ($39|0)!=(0|0);
- if ($40) {
-  $41 = $5;
-  $42 = $6;
-  $43 = HEAP32[$42>>2]|0;
-  $44 = (_gen_values($41,$43,1)|0);
-  $12 = $44;
-  $45 = $12;
-  $46 = ($45|0)<(0);
-  if ($46) {
-   $14 = 1;
-   $13 = 1;
-   $12 = 1;
-   $47 = $5;
-   _push_($47);
-  }
- }
- $48 = $8;
- $49 = ($48|0)!=(0);
- do {
-  if ($49) {
-   $50 = $14;
-   $51 = ($50|0)!=(0);
-   $52 = $5;
-   if ($51) {
-    $53 = ((($52)) + 172|0);
-    $54 = HEAP32[$53>>2]|0;
-    $55 = (($54) + -1)|0;
-    HEAP32[$53>>2] = $55;
-    $56 = $5;
-    $57 = $5;
-    $58 = ((($57)) + 172|0);
-    $59 = HEAP32[$58>>2]|0;
-    $60 = $59 & 511;
-    $61 = $60 << 23;
-    $62 = 57 | $61;
-    $63 = $8;
-    $64 = $63 & 511;
-    $65 = $64 << 14;
-    $66 = $62 | $65;
-    (_genop($56,$66)|0);
-    $67 = $5;
-    _push_($67);
-    break;
-   } else {
-    $68 = $5;
-    $69 = ((($68)) + 172|0);
-    $70 = HEAP32[$69>>2]|0;
-    $71 = $70 & 511;
-    $72 = $71 << 23;
-    $73 = 1 | $72;
-    $74 = $8;
-    $75 = $74 & 511;
-    $76 = $75 << 14;
-    $77 = $73 | $76;
-    (_genop($52,$77)|0);
-    $78 = $5;
-    _push_($78);
-    $79 = $12;
-    $80 = (($79) + 1)|0;
-    $12 = $80;
-    break;
-   }
-  }
- } while(0);
- $81 = $6;
- $82 = ($81|0)!=(0|0);
- if ($82) {
-  $83 = $6;
-  $84 = ((($83)) + 4|0);
-  $85 = HEAP32[$84>>2]|0;
-  $86 = ($85|0)!=(0|0);
-  if ($86) {
-   $13 = 1;
-   $87 = $5;
-   $88 = $6;
-   $89 = ((($88)) + 4|0);
-   $90 = HEAP32[$89>>2]|0;
-   _codegen($87,$90,1);
-   $91 = $5;
-   $92 = ((($91)) + 172|0);
-   $93 = HEAP32[$92>>2]|0;
-   $94 = (($93) + -1)|0;
-   HEAP32[$92>>2] = $94;
-  } else {
-   label = 14;
-  }
- } else {
-  label = 14;
- }
- if ((label|0) == 14) {
-  $95 = $5;
-  $96 = ((($95)) + 172|0);
-  $97 = HEAP32[$96>>2]|0;
-  $15 = $97;
- }
- $98 = $5;
- _push_($98);
- $99 = $5;
- $100 = ((($99)) + 172|0);
- $101 = HEAP32[$100>>2]|0;
- $102 = (($101) + -1)|0;
- HEAP32[$100>>2] = $102;
- $103 = $12;
- $104 = (($103) + 1)|0;
- $105 = $5;
- $106 = ((($105)) + 172|0);
- $107 = HEAP32[$106>>2]|0;
- $108 = (($107) - ($104))|0;
- HEAP32[$106>>2] = $108;
- $109 = $5;
- $110 = HEAP32[$109>>2]|0;
- $111 = $10;
- $112 = (_mrb_sym2name_len($110,$111,$16)|0);
- $17 = $112;
- $113 = $13;
- $114 = ($113|0)==(0);
- $115 = HEAP32[$16>>2]|0;
- $116 = ($115|0)==(1);
- $or$cond = $114 & $116;
- if ($or$cond) {
-  $117 = $17;
-  $118 = HEAP8[$117>>0]|0;
-  $119 = $118 << 24 >> 24;
-  $120 = ($119|0)==(43);
-  if ($120) {
-   $121 = $5;
-   $122 = $5;
-   $123 = ((($122)) + 172|0);
-   $124 = HEAP32[$123>>2]|0;
-   $125 = $124 & 511;
-   $126 = $125 << 23;
-   $127 = 44 | $126;
-   $128 = $11;
-   $129 = $128 & 511;
-   $130 = $129 << 14;
-   $131 = $127 | $130;
-   $132 = $12;
-   $133 = $132 & 127;
-   $134 = $133 << 7;
-   $135 = $131 | $134;
-   $136 = $9;
-   (_genop_peep($121,$135,$136)|0);
-  } else {
-   label = 18;
-  }
- } else {
-  label = 18;
- }
- do {
-  if ((label|0) == 18) {
-   $137 = $13;
-   $138 = ($137|0)==(0);
-   $139 = HEAP32[$16>>2]|0;
-   $140 = ($139|0)==(1);
-   $or$cond3 = $138 & $140;
-   if ($or$cond3) {
-    $141 = $17;
-    $142 = HEAP8[$141>>0]|0;
-    $143 = $142 << 24 >> 24;
-    $144 = ($143|0)==(45);
-    if ($144) {
-     $145 = $5;
-     $146 = $5;
-     $147 = ((($146)) + 172|0);
-     $148 = HEAP32[$147>>2]|0;
-     $149 = $148 & 511;
-     $150 = $149 << 23;
-     $151 = 46 | $150;
-     $152 = $11;
-     $153 = $152 & 511;
-     $154 = $153 << 14;
-     $155 = $151 | $154;
-     $156 = $12;
-     $157 = $156 & 127;
-     $158 = $157 << 7;
-     $159 = $155 | $158;
-     $160 = $9;
-     (_genop_peep($145,$159,$160)|0);
-     break;
-    }
-   }
-   $161 = $13;
-   $162 = ($161|0)==(0);
-   $163 = HEAP32[$16>>2]|0;
-   $164 = ($163|0)==(1);
-   $or$cond5 = $162 & $164;
-   if ($or$cond5) {
-    $165 = $17;
-    $166 = HEAP8[$165>>0]|0;
-    $167 = $166 << 24 >> 24;
-    $168 = ($167|0)==(42);
-    if ($168) {
-     $169 = $5;
-     $170 = $5;
-     $171 = ((($170)) + 172|0);
-     $172 = HEAP32[$171>>2]|0;
-     $173 = $172 & 511;
-     $174 = $173 << 23;
-     $175 = 48 | $174;
-     $176 = $11;
-     $177 = $176 & 511;
-     $178 = $177 << 14;
-     $179 = $175 | $178;
-     $180 = $12;
-     $181 = $180 & 127;
-     $182 = $181 << 7;
-     $183 = $179 | $182;
-     (_genop($169,$183)|0);
-     break;
-    }
-   }
-   $184 = $13;
-   $185 = ($184|0)==(0);
-   $186 = HEAP32[$16>>2]|0;
-   $187 = ($186|0)==(1);
-   $or$cond7 = $185 & $187;
-   if ($or$cond7) {
-    $188 = $17;
-    $189 = HEAP8[$188>>0]|0;
-    $190 = $189 << 24 >> 24;
-    $191 = ($190|0)==(47);
-    if ($191) {
-     $192 = $5;
-     $193 = $5;
-     $194 = ((($193)) + 172|0);
-     $195 = HEAP32[$194>>2]|0;
-     $196 = $195 & 511;
-     $197 = $196 << 23;
-     $198 = 49 | $197;
-     $199 = $11;
-     $200 = $199 & 511;
-     $201 = $200 << 14;
-     $202 = $198 | $201;
-     $203 = $12;
-     $204 = $203 & 127;
-     $205 = $204 << 7;
-     $206 = $202 | $205;
-     (_genop($192,$206)|0);
-     break;
-    }
-   }
-   $207 = $13;
-   $208 = ($207|0)==(0);
-   $209 = HEAP32[$16>>2]|0;
-   $210 = ($209|0)==(1);
-   $or$cond9 = $208 & $210;
-   if ($or$cond9) {
-    $211 = $17;
-    $212 = HEAP8[$211>>0]|0;
-    $213 = $212 << 24 >> 24;
-    $214 = ($213|0)==(60);
-    if ($214) {
-     $215 = $5;
-     $216 = $5;
-     $217 = ((($216)) + 172|0);
-     $218 = HEAP32[$217>>2]|0;
-     $219 = $218 & 511;
-     $220 = $219 << 23;
-     $221 = 51 | $220;
-     $222 = $11;
-     $223 = $222 & 511;
-     $224 = $223 << 14;
-     $225 = $221 | $224;
-     $226 = $12;
-     $227 = $226 & 127;
-     $228 = $227 << 7;
-     $229 = $225 | $228;
-     (_genop($215,$229)|0);
-     break;
-    }
-   }
-   $230 = $13;
-   $231 = ($230|0)==(0);
-   $232 = HEAP32[$16>>2]|0;
-   $233 = ($232|0)==(2);
-   $or$cond11 = $231 & $233;
-   if ($or$cond11) {
-    $234 = $17;
-    $235 = HEAP8[$234>>0]|0;
-    $236 = $235 << 24 >> 24;
-    $237 = ($236|0)==(60);
-    if ($237) {
-     $238 = $17;
-     $239 = ((($238)) + 1|0);
-     $240 = HEAP8[$239>>0]|0;
-     $241 = $240 << 24 >> 24;
-     $242 = ($241|0)==(61);
-     if ($242) {
-      $243 = $5;
-      $244 = $5;
-      $245 = ((($244)) + 172|0);
-      $246 = HEAP32[$245>>2]|0;
-      $247 = $246 & 511;
-      $248 = $247 << 23;
-      $249 = 52 | $248;
-      $250 = $11;
-      $251 = $250 & 511;
-      $252 = $251 << 14;
-      $253 = $249 | $252;
-      $254 = $12;
-      $255 = $254 & 127;
-      $256 = $255 << 7;
-      $257 = $253 | $256;
-      (_genop($243,$257)|0);
-      break;
-     }
-    }
-   }
-   $258 = $13;
-   $259 = ($258|0)==(0);
-   $260 = HEAP32[$16>>2]|0;
-   $261 = ($260|0)==(1);
-   $or$cond13 = $259 & $261;
-   if ($or$cond13) {
-    $262 = $17;
-    $263 = HEAP8[$262>>0]|0;
-    $264 = $263 << 24 >> 24;
-    $265 = ($264|0)==(62);
-    if ($265) {
-     $266 = $5;
-     $267 = $5;
-     $268 = ((($267)) + 172|0);
-     $269 = HEAP32[$268>>2]|0;
-     $270 = $269 & 511;
-     $271 = $270 << 23;
-     $272 = 53 | $271;
-     $273 = $11;
-     $274 = $273 & 511;
-     $275 = $274 << 14;
-     $276 = $272 | $275;
-     $277 = $12;
-     $278 = $277 & 127;
-     $279 = $278 << 7;
-     $280 = $276 | $279;
-     (_genop($266,$280)|0);
-     break;
-    }
-   }
-   $281 = $13;
-   $282 = ($281|0)==(0);
-   $283 = HEAP32[$16>>2]|0;
-   $284 = ($283|0)==(2);
-   $or$cond15 = $282 & $284;
-   if ($or$cond15) {
-    $285 = $17;
-    $286 = HEAP8[$285>>0]|0;
-    $287 = $286 << 24 >> 24;
-    $288 = ($287|0)==(62);
-    if ($288) {
-     $289 = $17;
-     $290 = ((($289)) + 1|0);
-     $291 = HEAP8[$290>>0]|0;
-     $292 = $291 << 24 >> 24;
-     $293 = ($292|0)==(61);
-     if ($293) {
-      $294 = $5;
-      $295 = $5;
-      $296 = ((($295)) + 172|0);
-      $297 = HEAP32[$296>>2]|0;
-      $298 = $297 & 511;
-      $299 = $298 << 23;
-      $300 = 54 | $299;
-      $301 = $11;
-      $302 = $301 & 511;
-      $303 = $302 << 14;
-      $304 = $300 | $303;
-      $305 = $12;
-      $306 = $305 & 127;
-      $307 = $306 << 7;
-      $308 = $304 | $307;
-      (_genop($294,$308)|0);
-      break;
-     }
-    }
-   }
-   $309 = $13;
-   $310 = ($309|0)==(0);
-   $311 = HEAP32[$16>>2]|0;
-   $312 = ($311|0)==(2);
-   $or$cond17 = $310 & $312;
-   if ($or$cond17) {
-    $313 = $17;
-    $314 = HEAP8[$313>>0]|0;
-    $315 = $314 << 24 >> 24;
-    $316 = ($315|0)==(61);
-    if ($316) {
-     $317 = $17;
-     $318 = ((($317)) + 1|0);
-     $319 = HEAP8[$318>>0]|0;
-     $320 = $319 << 24 >> 24;
-     $321 = ($320|0)==(61);
-     if ($321) {
-      $322 = $5;
-      $323 = $5;
-      $324 = ((($323)) + 172|0);
-      $325 = HEAP32[$324>>2]|0;
-      $326 = $325 & 511;
-      $327 = $326 << 23;
-      $328 = 50 | $327;
-      $329 = $11;
-      $330 = $329 & 511;
-      $331 = $330 << 14;
-      $332 = $328 | $331;
-      $333 = $12;
-      $334 = $333 & 127;
-      $335 = $334 << 7;
-      $336 = $332 | $335;
-      (_genop($322,$336)|0);
-      break;
-     }
-    }
-   }
-   $337 = $14;
-   $338 = ($337|0)!=(0);
-   if ($338) {
-    $12 = 127;
-   }
-   $339 = $15;
-   $340 = ($339|0)>(0);
-   $341 = $5;
-   $342 = $5;
-   $343 = ((($342)) + 172|0);
-   $344 = HEAP32[$343>>2]|0;
-   $345 = $344 & 511;
-   $346 = $345 << 23;
-   if ($340) {
-    $347 = 32 | $346;
-    $348 = $11;
-    $349 = $348 & 511;
-    $350 = $349 << 14;
-    $351 = $347 | $350;
-    $352 = $12;
-    $353 = $352 & 127;
-    $354 = $353 << 7;
-    $355 = $351 | $354;
-    (_genop($341,$355)|0);
-    break;
-   } else {
-    $356 = 33 | $346;
-    $357 = $11;
-    $358 = $357 & 511;
-    $359 = $358 << 14;
-    $360 = $356 | $359;
-    $361 = $12;
-    $362 = $361 & 127;
-    $363 = $362 << 7;
-    $364 = $360 | $363;
-    (_genop($341,$364)|0);
-    break;
-   }
-  }
- } while(0);
- $365 = $9;
- $366 = ($365|0)!=(0);
- if (!($366)) {
-  STACKTOP = sp;return;
- }
- $367 = $5;
- _push_($367);
- STACKTOP = sp;return;
-}
-function _new_sym_1167($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;
- var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0;
- var $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0;
- var $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0;
- var $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $0;
- $4 = $1;
- $5 = 0;
- while(1) {
-  $6 = $5;
-  $7 = $3;
-  $8 = ((($7)) + 216|0);
-  $9 = HEAP32[$8>>2]|0;
-  $10 = ((($9)) + 48|0);
-  $11 = HEAP32[$10>>2]|0;
-  $12 = ($6>>>0)<($11>>>0);
-  $13 = $3;
-  $14 = ((($13)) + 216|0);
-  $15 = HEAP32[$14>>2]|0;
-  if (!($12)) {
-   break;
-  }
-  $16 = ((($15)) + 16|0);
-  $17 = HEAP32[$16>>2]|0;
-  $18 = $5;
-  $19 = (($17) + ($18<<2)|0);
-  $20 = HEAP32[$19>>2]|0;
-  $21 = $4;
-  $22 = ($20|0)==($21|0);
-  $23 = $5;
-  if ($22) {
-   label = 4;
-   break;
-  }
-  $24 = (($23) + 1)|0;
-  $5 = $24;
- }
- if ((label|0) == 4) {
-  $2 = $23;
-  $87 = $2;
-  STACKTOP = sp;return ($87|0);
- }
- $25 = ((($15)) + 48|0);
- $26 = HEAP32[$25>>2]|0;
- $27 = ($26>>>0)>(125);
- if ($27) {
-  $28 = $3;
-  $29 = ((($28)) + 216|0);
-  $30 = HEAP32[$29>>2]|0;
-  $31 = ((($30)) + 48|0);
-  $32 = HEAP32[$31>>2]|0;
-  $33 = ($32>>>0)<(256);
-  if ($33) {
-   $34 = $3;
-   $35 = $3;
-   $36 = ((($35)) + 216|0);
-   $37 = HEAP32[$36>>2]|0;
-   $38 = ((($37)) + 16|0);
-   $39 = HEAP32[$38>>2]|0;
-   $40 = (_codegen_realloc($34,$39,262144)|0);
-   $41 = $3;
-   $42 = ((($41)) + 216|0);
-   $43 = HEAP32[$42>>2]|0;
-   $44 = ((($43)) + 16|0);
-   HEAP32[$44>>2] = $40;
-   $5 = 0;
-   while(1) {
-    $45 = $5;
-    $46 = $3;
-    $47 = ((($46)) + 216|0);
-    $48 = HEAP32[$47>>2]|0;
-    $49 = ((($48)) + 48|0);
-    $50 = HEAP32[$49>>2]|0;
-    $51 = (256 - ($50))|0;
-    $52 = ($45>>>0)<($51>>>0);
-    $53 = $3;
-    $54 = ((($53)) + 216|0);
-    $55 = HEAP32[$54>>2]|0;
-    if (!($52)) {
-     break;
-    }
-    $56 = ((($55)) + 16|0);
-    $57 = HEAP32[$56>>2]|0;
-    $58 = $5;
-    $59 = $3;
-    $60 = ((($59)) + 216|0);
-    $61 = HEAP32[$60>>2]|0;
-    $62 = ((($61)) + 48|0);
-    $63 = HEAP32[$62>>2]|0;
-    $64 = (($58) + ($63))|0;
-    $65 = (($57) + ($64<<2)|0);
-    HEAP32[$65>>2] = 0;
-    $66 = $5;
-    $67 = (($66) + 1)|0;
-    $5 = $67;
-   }
-   $68 = ((($55)) + 48|0);
-   HEAP32[$68>>2] = 256;
-  }
- }
- $69 = $4;
- $70 = $3;
- $71 = ((($70)) + 216|0);
- $72 = HEAP32[$71>>2]|0;
- $73 = ((($72)) + 16|0);
- $74 = HEAP32[$73>>2]|0;
- $75 = $3;
- $76 = ((($75)) + 216|0);
- $77 = HEAP32[$76>>2]|0;
- $78 = ((($77)) + 48|0);
- $79 = HEAP32[$78>>2]|0;
- $80 = (($74) + ($79<<2)|0);
- HEAP32[$80>>2] = $69;
- $81 = $3;
- $82 = ((($81)) + 216|0);
- $83 = HEAP32[$82>>2]|0;
- $84 = ((($83)) + 48|0);
- $85 = HEAP32[$84>>2]|0;
- $86 = (($85) + 1)|0;
- HEAP32[$84>>2] = $86;
- $2 = $85;
- $87 = $2;
- STACKTOP = sp;return ($87|0);
-}
-function _gen_values($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;
- var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0;
- var $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0, $152 = 0, $153 = 0;
- var $154 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0;
- var $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0;
- var $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0;
- var $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0;
- var $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $or$cond = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $4 = $0;
- $5 = $1;
- $6 = $2;
- $7 = 0;
- while(1) {
-  $9 = $5;
-  $10 = ($9|0)!=(0|0);
-  if (!($10)) {
-   label = 19;
-   break;
-  }
-  $11 = $5;
-  $12 = HEAP32[$11>>2]|0;
-  $13 = HEAP32[$12>>2]|0;
-  $14 = $13;
-  $15 = ($14|0)==(66);
-  $16 = $15&1;
-  $8 = $16;
-  $17 = $7;
-  $18 = ($17|0)>=(127);
-  $19 = $8;
-  $20 = ($19|0)!=(0);
-  $or$cond = $18 | $20;
-  if ($or$cond) {
-   break;
-  }
-  $144 = $4;
-  $145 = $5;
-  $146 = HEAP32[$145>>2]|0;
-  $147 = $6;
-  _codegen($144,$146,$147);
-  $148 = $7;
-  $149 = (($148) + 1)|0;
-  $7 = $149;
-  $150 = $5;
-  $151 = ((($150)) + 4|0);
-  $152 = HEAP32[$151>>2]|0;
-  $5 = $152;
- }
- if ((label|0) == 19) {
-  $153 = $7;
-  $3 = $153;
-  $154 = $3;
-  STACKTOP = sp;return ($154|0);
- }
- $21 = $6;
- $22 = ($21|0)!=(0);
- L9: do {
-  if ($22) {
-   $23 = $7;
-   $24 = $4;
-   $25 = ((($24)) + 172|0);
-   $26 = HEAP32[$25>>2]|0;
-   $27 = (($26) - ($23))|0;
-   HEAP32[$25>>2] = $27;
-   $28 = $4;
-   $29 = $4;
-   $30 = ((($29)) + 172|0);
-   $31 = HEAP32[$30>>2]|0;
-   $32 = $31 & 511;
-   $33 = $32 << 23;
-   $34 = 55 | $33;
-   $35 = $4;
-   $36 = ((($35)) + 172|0);
-   $37 = HEAP32[$36>>2]|0;
-   $38 = $37 & 511;
-   $39 = $38 << 14;
-   $40 = $34 | $39;
-   $41 = $7;
-   $42 = $41 & 127;
-   $43 = $42 << 7;
-   $44 = $40 | $43;
-   (_genop($28,$44)|0);
-   $45 = $4;
-   _push_($45);
-   $46 = $4;
-   $47 = $5;
-   $48 = HEAP32[$47>>2]|0;
-   _codegen($46,$48,1);
-   $49 = $4;
-   $50 = ((($49)) + 172|0);
-   $51 = HEAP32[$50>>2]|0;
-   $52 = (($51) + -1)|0;
-   HEAP32[$50>>2] = $52;
-   $53 = $4;
-   $54 = ((($53)) + 172|0);
-   $55 = HEAP32[$54>>2]|0;
-   $56 = (($55) + -1)|0;
-   HEAP32[$54>>2] = $56;
-   $57 = $8;
-   $58 = ($57|0)!=(0);
-   $59 = $4;
-   $60 = $4;
-   $61 = ((($60)) + 172|0);
-   $62 = HEAP32[$61>>2]|0;
-   $63 = $62 & 511;
-   $64 = $63 << 23;
-   if ($58) {
-    $65 = 56 | $64;
-    $66 = $4;
-    $67 = ((($66)) + 172|0);
-    $68 = HEAP32[$67>>2]|0;
-    $69 = (($68) + 1)|0;
-    $70 = $69 & 511;
-    $71 = $70 << 14;
-    $72 = $65 | $71;
-    (_genop($59,$72)|0);
-   } else {
-    $73 = 57 | $64;
-    $74 = $4;
-    $75 = ((($74)) + 172|0);
-    $76 = HEAP32[$75>>2]|0;
-    $77 = (($76) + 1)|0;
-    $78 = $77 & 511;
-    $79 = $78 << 14;
-    $80 = $73 | $79;
-    (_genop($59,$80)|0);
-   }
-   $81 = $5;
-   $82 = ((($81)) + 4|0);
-   $83 = HEAP32[$82>>2]|0;
-   $5 = $83;
-   while(1) {
-    $84 = $5;
-    $85 = ($84|0)!=(0|0);
-    if (!($85)) {
-     break L9;
-    }
-    $86 = $4;
-    _push_($86);
-    $87 = $4;
-    $88 = $5;
-    $89 = HEAP32[$88>>2]|0;
-    _codegen($87,$89,1);
-    $90 = $4;
-    $91 = ((($90)) + 172|0);
-    $92 = HEAP32[$91>>2]|0;
-    $93 = (($92) + -1)|0;
-    HEAP32[$91>>2] = $93;
-    $94 = $4;
-    $95 = ((($94)) + 172|0);
-    $96 = HEAP32[$95>>2]|0;
-    $97 = (($96) + -1)|0;
-    HEAP32[$95>>2] = $97;
-    $98 = $5;
-    $99 = HEAP32[$98>>2]|0;
-    $100 = HEAP32[$99>>2]|0;
-    $101 = $100;
-    $102 = ($101|0)==(66);
-    $103 = $4;
-    $104 = $4;
-    $105 = ((($104)) + 172|0);
-    $106 = HEAP32[$105>>2]|0;
-    $107 = $106 & 511;
-    $108 = $107 << 23;
-    if ($102) {
-     $109 = 56 | $108;
-     $110 = $4;
-     $111 = ((($110)) + 172|0);
-     $112 = HEAP32[$111>>2]|0;
-     $113 = (($112) + 1)|0;
-     $114 = $113 & 511;
-     $115 = $114 << 14;
-     $116 = $109 | $115;
-     (_genop($103,$116)|0);
-    } else {
-     $117 = 57 | $108;
-     $118 = $4;
-     $119 = ((($118)) + 172|0);
-     $120 = HEAP32[$119>>2]|0;
-     $121 = (($120) + 1)|0;
-     $122 = $121 & 511;
-     $123 = $122 << 14;
-     $124 = $117 | $123;
-     (_genop($103,$124)|0);
-    }
-    $125 = $5;
-    $126 = ((($125)) + 4|0);
-    $127 = HEAP32[$126>>2]|0;
-    $5 = $127;
-   }
-  } else {
-   $128 = $4;
-   $129 = $5;
-   $130 = HEAP32[$129>>2]|0;
-   $131 = ((($130)) + 4|0);
-   $132 = HEAP32[$131>>2]|0;
-   _codegen($128,$132,0);
-   $133 = $5;
-   $134 = ((($133)) + 4|0);
-   $135 = HEAP32[$134>>2]|0;
-   $5 = $135;
-   while(1) {
-    $136 = $5;
-    $137 = ($136|0)!=(0|0);
-    if (!($137)) {
-     break L9;
-    }
-    $138 = $4;
-    $139 = $5;
-    $140 = HEAP32[$139>>2]|0;
-    _codegen($138,$140,0);
-    $141 = $5;
-    $142 = ((($141)) + 4|0);
-    $143 = HEAP32[$142>>2]|0;
-    $5 = $143;
-   }
-  }
- } while(0);
- $3 = -1;
- $154 = $3;
- STACKTOP = sp;return ($154|0);
-}
-function _nosplat($0) {
- $0 = $0|0;
- var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- while(1) {
-  $3 = $2;
-  $4 = ($3|0)!=(0|0);
-  if (!($4)) {
-   label = 6;
-   break;
-  }
-  $5 = $2;
-  $6 = HEAP32[$5>>2]|0;
-  $7 = HEAP32[$6>>2]|0;
-  $8 = $7;
-  $9 = ($8|0)==(66);
-  if ($9) {
-   label = 4;
-   break;
-  }
-  $10 = $2;
-  $11 = ((($10)) + 4|0);
-  $12 = HEAP32[$11>>2]|0;
-  $2 = $12;
- }
- if ((label|0) == 4) {
-  $1 = 0;
-  $13 = $1;
-  STACKTOP = sp;return ($13|0);
- }
- else if ((label|0) == 6) {
-  $1 = 1;
-  $13 = $1;
-  STACKTOP = sp;return ($13|0);
- }
- return (0)|0;
-}
-function _gen_vmassignment($0,$1,$2,$3) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;
- var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0;
- var $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;
- var $29 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0;
- var $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0;
- var $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0;
- var $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $4 = $0;
- $5 = $1;
- $6 = $2;
- $7 = $3;
- $8 = 0;
- $9 = 0;
- $12 = $5;
- $13 = HEAP32[$12>>2]|0;
- $14 = ($13|0)!=(0|0);
- L1: do {
-  if ($14) {
-   $15 = $5;
-   $16 = HEAP32[$15>>2]|0;
-   $10 = $16;
-   $8 = 0;
-   while(1) {
-    $17 = $10;
-    $18 = ($17|0)!=(0|0);
-    if (!($18)) {
-     break L1;
-    }
-    $19 = $4;
-    $20 = $4;
-    $21 = ((($20)) + 172|0);
-    $22 = HEAP32[$21>>2]|0;
-    $23 = $22 & 511;
-    $24 = $23 << 23;
-    $25 = 58 | $24;
-    $26 = $6;
-    $27 = $26 & 511;
-    $28 = $27 << 14;
-    $29 = $25 | $28;
-    $30 = $8;
-    $31 = $30 & 127;
-    $32 = $31 << 7;
-    $33 = $29 | $32;
-    (_genop($19,$33)|0);
-    $34 = $4;
-    $35 = $10;
-    $36 = HEAP32[$35>>2]|0;
-    $37 = $4;
-    $38 = ((($37)) + 172|0);
-    $39 = HEAP32[$38>>2]|0;
-    _gen_assignment($34,$36,$39,0);
-    $40 = $8;
-    $41 = (($40) + 1)|0;
-    $8 = $41;
-    $42 = $10;
-    $43 = ((($42)) + 4|0);
-    $44 = HEAP32[$43>>2]|0;
-    $10 = $44;
-   }
-  }
- } while(0);
- $45 = $5;
- $46 = ((($45)) + 4|0);
- $47 = HEAP32[$46>>2]|0;
- $10 = $47;
- $48 = $10;
- $49 = ($48|0)!=(0|0);
- if (!($49)) {
-  STACKTOP = sp;return;
- }
- $50 = $10;
- $51 = ((($50)) + 4|0);
- $52 = HEAP32[$51>>2]|0;
- $53 = ($52|0)!=(0|0);
- L10: do {
-  if ($53) {
-   $54 = $10;
-   $55 = ((($54)) + 4|0);
-   $56 = HEAP32[$55>>2]|0;
-   $57 = HEAP32[$56>>2]|0;
-   $11 = $57;
-   while(1) {
-    $58 = $11;
-    $59 = ($58|0)!=(0|0);
-    if (!($59)) {
-     break L10;
-    }
-    $60 = $9;
-    $61 = (($60) + 1)|0;
-    $9 = $61;
-    $62 = $11;
-    $63 = ((($62)) + 4|0);
-    $64 = HEAP32[$63>>2]|0;
-    $11 = $64;
-   }
-  }
- } while(0);
- $65 = $7;
- $66 = ($65|0)!=(0);
- $67 = $4;
- if ($66) {
-  $68 = $4;
-  $69 = ((($68)) + 172|0);
-  $70 = HEAP32[$69>>2]|0;
-  $71 = $70 & 511;
-  $72 = $71 << 23;
-  $73 = 1 | $72;
-  $74 = $6;
-  $75 = $74 & 511;
-  $76 = $75 << 14;
-  $77 = $73 | $76;
-  (_genop($67,$77)|0);
- } else {
-  $78 = ((($67)) + 172|0);
-  $79 = HEAP32[$78>>2]|0;
-  $80 = (($79) + -1)|0;
-  HEAP32[$78>>2] = $80;
- }
- $81 = $4;
- $82 = $9;
- _push_n_($81,$82);
- $83 = $9;
- $84 = $4;
- $85 = ((($84)) + 172|0);
- $86 = HEAP32[$85>>2]|0;
- $87 = (($86) - ($83))|0;
- HEAP32[$85>>2] = $87;
- $88 = $4;
- $89 = $4;
- $90 = ((($89)) + 172|0);
- $91 = HEAP32[$90>>2]|0;
- $92 = $91 & 511;
- $93 = $92 << 23;
- $94 = 60 | $93;
- $95 = $8;
- $96 = $95 & 511;
- $97 = $96 << 14;
- $98 = $94 | $97;
- $99 = $9;
- $100 = $99 & 127;
- $101 = $100 << 7;
- $102 = $98 | $101;
- (_genop($88,$102)|0);
- $8 = 1;
- $103 = $10;
- $104 = HEAP32[$103>>2]|0;
- $105 = ($104|0)!=(0|0);
- if ($105) {
-  $106 = $4;
-  $107 = $10;
-  $108 = HEAP32[$107>>2]|0;
-  $109 = $4;
-  $110 = ((($109)) + 172|0);
-  $111 = HEAP32[$110>>2]|0;
-  _gen_assignment($106,$108,$111,0);
- }
- $112 = $10;
- $113 = ((($112)) + 4|0);
- $114 = HEAP32[$113>>2]|0;
- $115 = ($114|0)!=(0|0);
- L23: do {
-  if ($115) {
-   $116 = $10;
-   $117 = ((($116)) + 4|0);
-   $118 = HEAP32[$117>>2]|0;
-   $119 = HEAP32[$118>>2]|0;
-   $120 = ($119|0)!=(0|0);
-   if ($120) {
-    $121 = $10;
-    $122 = ((($121)) + 4|0);
-    $123 = HEAP32[$122>>2]|0;
-    $124 = HEAP32[$123>>2]|0;
-    $10 = $124;
-    while(1) {
-     $125 = $10;
-     $126 = ($125|0)!=(0|0);
-     if (!($126)) {
-      break L23;
-     }
-     $127 = $4;
-     $128 = $10;
-     $129 = HEAP32[$128>>2]|0;
-     $130 = $4;
-     $131 = ((($130)) + 172|0);
-     $132 = HEAP32[$131>>2]|0;
-     $133 = $8;
-     $134 = (($132) + ($133))|0;
-     _gen_assignment($127,$129,$134,0);
-     $135 = $10;
-     $136 = ((($135)) + 4|0);
-     $137 = HEAP32[$136>>2]|0;
-     $10 = $137;
-     $138 = $8;
-     $139 = (($138) + 1)|0;
-     $8 = $139;
-    }
-   }
-  }
- } while(0);
- $140 = $4;
- _push_($140);
- STACKTOP = sp;return;
-}
-function _loop_break($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0;
- var $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0;
- var $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0;
- var $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0;
- var $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0;
- var $99 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $6 = $2;
- $7 = ((($6)) + 188|0);
- $8 = HEAP32[$7>>2]|0;
- $9 = ($8|0)!=(0|0);
- if (!($9)) {
-  $10 = $2;
-  $11 = $3;
-  _codegen($10,$11,0);
-  $12 = $2;
-  _raise_error($12,69799);
-  STACKTOP = sp;return;
- }
- $13 = $3;
- $14 = ($13|0)!=(0|0);
- if ($14) {
-  $15 = $2;
-  $16 = $3;
-  _codegen($15,$16,1);
-  $17 = $2;
-  $18 = ((($17)) + 172|0);
-  $19 = HEAP32[$18>>2]|0;
-  $20 = (($19) + -1)|0;
-  HEAP32[$18>>2] = $20;
- }
- $21 = $2;
- $22 = ((($21)) + 188|0);
- $23 = HEAP32[$22>>2]|0;
- $4 = $23;
- while(1) {
-  $24 = $4;
-  $25 = ($24|0)!=(0|0);
-  if (!($25)) {
-   break;
-  }
-  $26 = $4;
-  $27 = HEAP32[$26>>2]|0;
-  $28 = ($27|0)==(3);
-  if (!($28)) {
-   break;
-  }
-  $29 = $2;
-  (_genop_peep($29,8388636,0)|0);
-  $30 = $4;
-  $31 = ((($30)) + 24|0);
-  $32 = HEAP32[$31>>2]|0;
-  $4 = $32;
- }
- while(1) {
-  $33 = $4;
-  $34 = ($33|0)!=(0|0);
-  if ($34) {
-   $35 = $4;
-   $36 = HEAP32[$35>>2]|0;
-   $37 = ($36|0)==(4);
-   $102 = $37;
-  } else {
-   $102 = 0;
-  }
-  $38 = $4;
-  if (!($102)) {
-   break;
-  }
-  $39 = ((($38)) + 24|0);
-  $40 = HEAP32[$39>>2]|0;
-  $4 = $40;
- }
- $41 = ($38|0)!=(0|0);
- if (!($41)) {
-  $42 = $2;
-  _codegen_error($42,69799);
- }
- $43 = $4;
- $44 = HEAP32[$43>>2]|0;
- $45 = ($44|0)==(0);
- $46 = $2;
- if (!($45)) {
-  $95 = $2;
-  $96 = ((($95)) + 172|0);
-  $97 = HEAP32[$96>>2]|0;
-  $98 = $97 & 511;
-  $99 = $98 << 23;
-  $100 = 41 | $99;
-  $101 = $100 | 16384;
-  (_genop($46,$101)|0);
-  STACKTOP = sp;return;
- }
- $47 = ((($46)) + 192|0);
- $48 = HEAP32[$47>>2]|0;
- $49 = $2;
- $50 = ((($49)) + 188|0);
- $51 = HEAP32[$50>>2]|0;
- $52 = ((($51)) + 20|0);
- $53 = HEAP32[$52>>2]|0;
- $54 = ($48|0)>($53|0);
- if ($54) {
-  $55 = $2;
-  $56 = $2;
-  $57 = ((($56)) + 192|0);
-  $58 = HEAP32[$57>>2]|0;
-  $59 = $2;
-  $60 = ((($59)) + 188|0);
-  $61 = HEAP32[$60>>2]|0;
-  $62 = ((($61)) + 20|0);
-  $63 = HEAP32[$62>>2]|0;
-  $64 = (($58) - ($63))|0;
-  $65 = $64 & 511;
-  $66 = $65 << 23;
-  $67 = 31 | $66;
-  (_genop_peep($55,$67,0)|0);
- }
- $68 = $3;
- $69 = ($68|0)!=(0|0);
- if ($69) {
-  $70 = $2;
-  $71 = $4;
-  $72 = ((($71)) + 16|0);
-  $73 = HEAP32[$72>>2]|0;
-  $74 = $73 & 511;
-  $75 = $74 << 23;
-  $76 = 1 | $75;
-  $77 = $2;
-  $78 = ((($77)) + 172|0);
-  $79 = HEAP32[$78>>2]|0;
-  $80 = $79 & 511;
-  $81 = $80 << 14;
-  $82 = $76 | $81;
-  (_genop_peep($70,$82,0)|0);
- }
- $83 = $2;
- $84 = $4;
- $85 = ((($84)) + 12|0);
- $86 = HEAP32[$85>>2]|0;
- $87 = (($86) + 32767)|0;
- $88 = $87 & 65535;
- $89 = $88 << 7;
- $90 = 23 | $89;
- $91 = (_genop($83,$90)|0);
- $5 = $91;
- $92 = $5;
- $93 = $4;
- $94 = ((($93)) + 12|0);
- HEAP32[$94>>2] = $92;
- STACKTOP = sp;return;
-}
-function _raise_error($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $$byval_copy = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $$byval_copy = sp + 24|0;
- $5 = sp;
- $2 = $0;
- $3 = $1;
- $6 = $2;
- $7 = $2;
- $8 = HEAP32[$7>>2]|0;
- $9 = $3;
- _mrb_str_new_cstr($5,$8,$9);
- ;HEAP32[$$byval_copy>>2]=HEAP32[$5>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$5+4>>2]|0;
- $10 = (_new_lit($6,$$byval_copy)|0);
- $4 = $10;
- $11 = $2;
- $12 = $4;
- $13 = $12 & 65535;
- $14 = $13 << 7;
- $15 = 8388683 | $14;
- (_genop($11,$15)|0);
- STACKTOP = sp;return;
-}
-function _lv_idx($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0;
- var $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $3 = $0;
- $4 = $1;
- $7 = $3;
- $8 = ((($7)) + 168|0);
- $9 = HEAP32[$8>>2]|0;
- $5 = $9;
- $6 = 1;
- while(1) {
-  $10 = $5;
-  $11 = ($10|0)!=(0|0);
-  if (!($11)) {
-   label = 6;
-   break;
-  }
-  $12 = $5;
-  $13 = HEAP32[$12>>2]|0;
-  $14 = $13;
-  $15 = $4;
-  $16 = ($14|0)==($15|0);
-  $17 = $6;
-  if ($16) {
-   label = 4;
-   break;
-  }
-  $18 = (($17) + 1)|0;
-  $6 = $18;
-  $19 = $5;
-  $20 = ((($19)) + 4|0);
-  $21 = HEAP32[$20>>2]|0;
-  $5 = $21;
- }
- if ((label|0) == 4) {
-  $2 = $17;
-  $22 = $2;
-  STACKTOP = sp;return ($22|0);
- }
- else if ((label|0) == 6) {
-  $2 = 0;
-  $22 = $2;
-  STACKTOP = sp;return ($22|0);
- }
- return (0)|0;
-}
-function _mrb_fixnum_value_1173($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = sp;
- $2 = $1;
- $4 = ((($3)) + 4|0);
- HEAP32[$4>>2] = 3;
- $5 = $2;
- HEAP32[$3>>2] = $5;
- ;HEAP32[$0>>2]=HEAP32[$3>>2]|0;HEAP32[$0+4>>2]=HEAP32[$3+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _readint_mrb_int($0,$1,$2,$3,$4) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- $4 = $4|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;
- var $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0;
- var $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0;
- var $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);
- $6 = $0;
- $7 = $1;
- $8 = $2;
- $9 = $3;
- $10 = $4;
- $15 = $7;
- $16 = $7;
- $17 = (_strlen($16)|0);
- $18 = (($15) + ($17)|0);
- $11 = $18;
- $12 = 0;
- $19 = $7;
- $20 = HEAP8[$19>>0]|0;
- $21 = $20 << 24 >> 24;
- $22 = ($21|0)==(43);
- if ($22) {
-  $23 = $7;
-  $24 = ((($23)) + 1|0);
-  $7 = $24;
- }
- while(1) {
-  $25 = $7;
-  $26 = $11;
-  $27 = ($25>>>0)<($26>>>0);
-  if (!($27)) {
-   label = 18;
-   break;
-  }
-  $28 = $7;
-  $29 = HEAP8[$28>>0]|0;
-  $14 = $29;
-  $30 = $14;
-  $31 = $30&255;
-  $32 = (_tolower($31)|0);
-  $33 = $32&255;
-  $14 = $33;
-  $13 = 0;
-  while(1) {
-   $34 = $13;
-   $35 = $8;
-   $36 = ($34|0)<($35|0);
-   if (!($36)) {
-    break;
-   }
-   $37 = $13;
-   $38 = (55645 + ($37)|0);
-   $39 = HEAP8[$38>>0]|0;
-   $40 = $39 << 24 >> 24;
-   $41 = $14;
-   $42 = $41 << 24 >> 24;
-   $43 = ($40|0)==($42|0);
-   if ($43) {
-    break;
-   }
-   $44 = $13;
-   $45 = (($44) + 1)|0;
-   $13 = $45;
-  }
-  $46 = $13;
-  $47 = $8;
-  $48 = ($46|0)==($47|0);
-  if ($48) {
-   $49 = $6;
-   _codegen_error($49,69775);
-  }
-  $50 = $9;
-  $51 = ($50<<24>>24)!=(0);
-  $52 = $13;
-  if ($51) {
-   $53 = (-2147483648 + ($52))|0;
-   $54 = $8;
-   $55 = (($53|0) / ($54|0))&-1;
-   $56 = $12;
-   $57 = ($55|0)>($56|0);
-   if ($57) {
-    label = 12;
-    break;
-   }
-   $59 = $8;
-   $60 = $12;
-   $61 = Math_imul($60, $59)|0;
-   $12 = $61;
-   $62 = $13;
-   $63 = $12;
-   $64 = (($63) - ($62))|0;
-   $12 = $64;
-  } else {
-   $65 = (2147483647 - ($52))|0;
-   $66 = $8;
-   $67 = (($65|0) / ($66|0))&-1;
-   $68 = $12;
-   $69 = ($67|0)<($68|0);
-   if ($69) {
-    label = 15;
-    break;
-   }
-   $71 = $8;
-   $72 = $12;
-   $73 = Math_imul($72, $71)|0;
-   $12 = $73;
-   $74 = $13;
-   $75 = $12;
-   $76 = (($75) + ($74))|0;
-   $12 = $76;
-  }
-  $77 = $7;
-  $78 = ((($77)) + 1|0);
-  $7 = $78;
- }
- if ((label|0) == 12) {
-  $58 = $10;
-  HEAP8[$58>>0] = 1;
-  $5 = 0;
-  $81 = $5;
-  STACKTOP = sp;return ($81|0);
- }
- else if ((label|0) == 15) {
-  $70 = $10;
-  HEAP8[$70>>0] = 1;
-  $5 = 0;
-  $81 = $5;
-  STACKTOP = sp;return ($81|0);
- }
- else if ((label|0) == 18) {
-  $79 = $10;
-  HEAP8[$79>>0] = 0;
-  $80 = $12;
-  $5 = $80;
-  $81 = $5;
-  STACKTOP = sp;return ($81|0);
- }
- return (0)|0;
-}
-function _readint_float($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;
- var $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0.0, $41 = 0.0, $42 = 0.0, $43 = 0, $44 = 0.0, $45 = 0.0, $46 = 0.0, $47 = 0;
- var $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0.0, $6 = 0, $7 = 0.0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $3 = $0;
- $4 = $1;
- $5 = $2;
- $10 = $4;
- $11 = $4;
- $12 = (_strlen($11)|0);
- $13 = (($10) + ($12)|0);
- $6 = $13;
- $7 = 0.0;
- $14 = $4;
- $15 = HEAP8[$14>>0]|0;
- $16 = $15 << 24 >> 24;
- $17 = ($16|0)==(43);
- if ($17) {
-  $18 = $4;
-  $19 = ((($18)) + 1|0);
-  $4 = $19;
- }
- while(1) {
-  $20 = $4;
-  $21 = $6;
-  $22 = ($20>>>0)<($21>>>0);
-  if (!($22)) {
-   break;
-  }
-  $23 = $4;
-  $24 = HEAP8[$23>>0]|0;
-  $9 = $24;
-  $25 = $9;
-  $26 = $25&255;
-  $27 = (_tolower($26)|0);
-  $28 = $27&255;
-  $9 = $28;
-  $8 = 0;
-  while(1) {
-   $29 = $8;
-   $30 = $5;
-   $31 = ($29|0)<($30|0);
-   if (!($31)) {
-    break;
-   }
-   $32 = $8;
-   $33 = (55645 + ($32)|0);
-   $34 = HEAP8[$33>>0]|0;
-   $35 = $34 << 24 >> 24;
-   $36 = $9;
-   $37 = $36 << 24 >> 24;
-   $38 = ($35|0)==($37|0);
-   if ($38) {
-    label = 7;
-    break;
-   }
-   $47 = $8;
-   $48 = (($47) + 1)|0;
-   $8 = $48;
-  }
-  if ((label|0) == 7) {
-   label = 0;
-   $39 = $5;
-   $40 = (+($39|0));
-   $41 = $7;
-   $42 = $41 * $40;
-   $7 = $42;
-   $43 = $8;
-   $44 = (+($43|0));
-   $45 = $7;
-   $46 = $45 + $44;
-   $7 = $46;
-  }
-  $49 = $8;
-  $50 = $5;
-  $51 = ($49|0)==($50|0);
-  if ($51) {
-   $52 = $3;
-   _codegen_error($52,69775);
-  }
-  $53 = $4;
-  $54 = ((($53)) + 1|0);
-  $4 = $54;
- }
- $55 = $7;
- STACKTOP = sp;return (+$55);
-}
-function _mrb_float_value_1175($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = +$2;
- var $3 = 0, $4 = 0.0, $5 = 0, $6 = 0, $7 = 0.0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $5 = sp;
- $3 = $1;
- $4 = $2;
- $6 = ((($5)) + 4|0);
- HEAP32[$6>>2] = 6;
- $7 = $4;
- HEAPF32[$5>>2] = $7;
- ;HEAP32[$0>>2]=HEAP32[$5>>2]|0;HEAP32[$0+4>>2]=HEAP32[$5+4>>2]|0;
- STACKTOP = sp;return;
-}
-function _new_lit($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $$byval_copy = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0.0, $105 = 0.0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0;
- var $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0;
- var $135 = 0, $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0, $152 = 0;
- var $153 = 0, $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0, $170 = 0;
- var $171 = 0, $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0, $19 = 0, $2 = 0;
- var $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0;
- var $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0;
- var $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0;
- var $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0;
- var $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);
- $$byval_copy = sp + 32|0;
- $7 = sp;
- $3 = $0;
- $8 = ((($1)) + 4|0);
- $9 = HEAP32[$8>>2]|0;
- L1: do {
-  switch ($9|0) {
-  case 16:  {
-   $4 = 0;
-   while(1) {
-    $10 = $4;
-    $11 = $3;
-    $12 = ((($11)) + 216|0);
-    $13 = HEAP32[$12>>2]|0;
-    $14 = ((($13)) + 44|0);
-    $15 = HEAP32[$14>>2]|0;
-    $16 = ($10>>>0)<($15>>>0);
-    if (!($16)) {
-     break L1;
-    }
-    $17 = $3;
-    $18 = ((($17)) + 216|0);
-    $19 = HEAP32[$18>>2]|0;
-    $20 = ((($19)) + 12|0);
-    $21 = HEAP32[$20>>2]|0;
-    $22 = $4;
-    $23 = (($21) + ($22<<3)|0);
-    $5 = $23;
-    $24 = $5;
-    $25 = ((($24)) + 4|0);
-    $26 = HEAP32[$25>>2]|0;
-    $27 = ($26|0)!=(16);
-    if (!($27)) {
-     $28 = $5;
-     $29 = HEAP32[$28>>2]|0;
-     $30 = HEAP32[$29>>2]|0;
-     $31 = $30 >>> 11;
-     $32 = $31 & 8;
-     $33 = ($32|0)!=(0);
-     $34 = $5;
-     $35 = HEAP32[$34>>2]|0;
-     if ($33) {
-      $36 = HEAP32[$35>>2]|0;
-      $37 = $36 >>> 11;
-      $38 = $37 & 496;
-      $39 = $38 >> 4;
-      $42 = $39;
-     } else {
-      $40 = ((($35)) + 12|0);
-      $41 = HEAP32[$40>>2]|0;
-      $42 = $41;
-     }
-     $6 = $42;
-     $43 = HEAP32[$1>>2]|0;
-     $44 = HEAP32[$43>>2]|0;
-     $45 = $44 >>> 11;
-     $46 = $45 & 8;
-     $47 = ($46|0)!=(0);
-     $48 = HEAP32[$1>>2]|0;
-     if ($47) {
-      $49 = HEAP32[$48>>2]|0;
-      $50 = $49 >>> 11;
-      $51 = $50 & 496;
-      $52 = $51 >> 4;
-      $56 = $52;
-     } else {
-      $53 = ((($48)) + 12|0);
-      $54 = HEAP32[$53>>2]|0;
-      $56 = $54;
-     }
-     $55 = ($42|0)!=($56|0);
-     if (!($55)) {
-      $57 = $5;
-      $58 = HEAP32[$57>>2]|0;
-      $59 = HEAP32[$58>>2]|0;
-      $60 = $59 >>> 11;
-      $61 = $60 & 8;
-      $62 = ($61|0)!=(0);
-      $63 = $5;
-      $64 = HEAP32[$63>>2]|0;
-      $65 = ((($64)) + 12|0);
-      if ($62) {
-       $78 = $65;
-      } else {
-       $66 = ((($65)) + 8|0);
-       $67 = HEAP32[$66>>2]|0;
-       $78 = $67;
-      }
-      $68 = HEAP32[$1>>2]|0;
-      $69 = HEAP32[$68>>2]|0;
-      $70 = $69 >>> 11;
-      $71 = $70 & 8;
-      $72 = ($71|0)!=(0);
-      $73 = HEAP32[$1>>2]|0;
-      $74 = ((($73)) + 12|0);
-      if ($72) {
-       $79 = $74;
-      } else {
-       $75 = ((($74)) + 8|0);
-       $76 = HEAP32[$75>>2]|0;
-       $79 = $76;
-      }
-      $77 = $6;
-      $80 = (_memcmp($78,$79,$77)|0);
-      $81 = ($80|0)==(0);
-      if ($81) {
-       break;
-      }
-     }
-    }
-    $83 = $4;
-    $84 = (($83) + 1)|0;
-    $4 = $84;
-   }
-   $82 = $4;
-   $2 = $82;
-   $187 = $2;
-   STACKTOP = sp;return ($187|0);
-   break;
-  }
-  case 6:  {
-   $4 = 0;
-   while(1) {
-    $85 = $4;
-    $86 = $3;
-    $87 = ((($86)) + 216|0);
-    $88 = HEAP32[$87>>2]|0;
-    $89 = ((($88)) + 44|0);
-    $90 = HEAP32[$89>>2]|0;
-    $91 = ($85>>>0)<($90>>>0);
-    if (!($91)) {
-     break L1;
-    }
-    $92 = $3;
-    $93 = ((($92)) + 216|0);
-    $94 = HEAP32[$93>>2]|0;
-    $95 = ((($94)) + 12|0);
-    $96 = HEAP32[$95>>2]|0;
-    $97 = $4;
-    $98 = (($96) + ($97<<3)|0);
-    $5 = $98;
-    $99 = $5;
-    $100 = ((($99)) + 4|0);
-    $101 = HEAP32[$100>>2]|0;
-    $102 = ($101|0)!=(6);
-    if (!($102)) {
-     $103 = $5;
-     $104 = +HEAPF32[$103>>2];
-     $105 = +HEAPF32[$1>>2];
-     $106 = $104 == $105;
-     if ($106) {
-      break;
-     }
-    }
-    $108 = $4;
-    $109 = (($108) + 1)|0;
-    $4 = $109;
-   }
-   $107 = $4;
-   $2 = $107;
-   $187 = $2;
-   STACKTOP = sp;return ($187|0);
-   break;
-  }
-  case 3:  {
-   $4 = 0;
-   while(1) {
-    $110 = $4;
-    $111 = $3;
-    $112 = ((($111)) + 216|0);
-    $113 = HEAP32[$112>>2]|0;
-    $114 = ((($113)) + 44|0);
-    $115 = HEAP32[$114>>2]|0;
-    $116 = ($110>>>0)<($115>>>0);
-    if (!($116)) {
-     break L1;
-    }
-    $117 = $3;
-    $118 = ((($117)) + 216|0);
-    $119 = HEAP32[$118>>2]|0;
-    $120 = ((($119)) + 12|0);
-    $121 = HEAP32[$120>>2]|0;
-    $122 = $4;
-    $123 = (($121) + ($122<<3)|0);
-    $5 = $123;
-    $124 = $5;
-    $125 = ((($124)) + 4|0);
-    $126 = HEAP32[$125>>2]|0;
-    $127 = ($126|0)==(3);
-    if ($127) {
-     $128 = $5;
-     $129 = HEAP32[$128>>2]|0;
-     $130 = HEAP32[$1>>2]|0;
-     $131 = ($129|0)==($130|0);
-     if ($131) {
-      break;
-     }
-    }
-    $133 = $4;
-    $134 = (($133) + 1)|0;
-    $4 = $134;
-   }
-   $132 = $4;
-   $2 = $132;
-   $187 = $2;
-   STACKTOP = sp;return ($187|0);
-   break;
-  }
-  default: {
-   $2 = 0;
-   $187 = $2;
-   STACKTOP = sp;return ($187|0);
-  }
-  }
- } while(0);
- $135 = $3;
- $136 = ((($135)) + 216|0);
- $137 = HEAP32[$136>>2]|0;
- $138 = ((($137)) + 44|0);
- $139 = HEAP32[$138>>2]|0;
- $140 = $3;
- $141 = ((($140)) + 220|0);
- $142 = HEAP32[$141>>2]|0;
- $143 = ($139|0)==($142|0);
- if ($143) {
-  $144 = $3;
-  $145 = ((($144)) + 220|0);
-  $146 = HEAP32[$145>>2]|0;
-  $147 = $146<<1;
-  HEAP32[$145>>2] = $147;
-  $148 = $3;
-  $149 = $3;
-  $150 = ((($149)) + 216|0);
-  $151 = HEAP32[$150>>2]|0;
-  $152 = ((($151)) + 12|0);
-  $153 = HEAP32[$152>>2]|0;
-  $154 = $3;
-  $155 = ((($154)) + 220|0);
-  $156 = HEAP32[$155>>2]|0;
-  $157 = $156<<3;
-  $158 = (_codegen_realloc($148,$153,$157)|0);
-  $159 = $3;
-  $160 = ((($159)) + 216|0);
-  $161 = HEAP32[$160>>2]|0;
-  $162 = ((($161)) + 12|0);
-  HEAP32[$162>>2] = $158;
- }
- $163 = $3;
- $164 = ((($163)) + 216|0);
- $165 = HEAP32[$164>>2]|0;
- $166 = ((($165)) + 12|0);
- $167 = HEAP32[$166>>2]|0;
- $168 = $3;
- $169 = ((($168)) + 216|0);
- $170 = HEAP32[$169>>2]|0;
- $171 = ((($170)) + 44|0);
- $172 = HEAP32[$171>>2]|0;
- $173 = (($167) + ($172<<3)|0);
- $5 = $173;
- $174 = $3;
- $175 = ((($174)) + 216|0);
- $176 = HEAP32[$175>>2]|0;
- $177 = ((($176)) + 44|0);
- $178 = HEAP32[$177>>2]|0;
- $179 = (($178) + 1)|0;
- HEAP32[$177>>2] = $179;
- $4 = $178;
- $180 = ((($1)) + 4|0);
- $181 = HEAP32[$180>>2]|0;
- switch ($181|0) {
- case 16:  {
-  $182 = $5;
-  $183 = $3;
-  $184 = HEAP32[$183>>2]|0;
-  ;HEAP32[$$byval_copy>>2]=HEAP32[$1>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$1+4>>2]|0;
-  _mrb_str_pool($7,$184,$$byval_copy);
-  ;HEAP32[$182>>2]=HEAP32[$7>>2]|0;HEAP32[$182+4>>2]=HEAP32[$7+4>>2]|0;
-  break;
- }
- case 3: case 6:  {
-  $185 = $5;
-  ;HEAP32[$185>>2]=HEAP32[$1>>2]|0;HEAP32[$185+4>>2]=HEAP32[$1+4>>2]|0;
-  break;
- }
- default: {
- }
- }
- $186 = $4;
- $2 = $186;
- $187 = $2;
- STACKTOP = sp;return ($187|0);
-}
-function _gen_literal_array($0,$1,$2,$3) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0;
- var $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0;
- var $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0;
- var $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0;
- var $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0;
- var $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $4 = $0;
- $5 = $1;
- $6 = $2;
- $7 = $3;
- $10 = $7;
- $11 = ($10|0)!=(0);
- if (!($11)) {
-  while(1) {
-   $100 = $5;
-   $101 = ($100|0)!=(0|0);
-   if (!($101)) {
-    break;
-   }
-   $102 = $5;
-   $103 = HEAP32[$102>>2]|0;
-   $104 = HEAP32[$103>>2]|0;
-   $105 = $104;
-   switch ($105|0) {
-   case 4: case 17:  {
-    $106 = $4;
-    $107 = $5;
-    $108 = HEAP32[$107>>2]|0;
-    _codegen($106,$108,0);
-    break;
-   }
-   default: {
-   }
-   }
-   $109 = $5;
-   $110 = ((($109)) + 4|0);
-   $111 = HEAP32[$110>>2]|0;
-   $5 = $111;
-  }
-  STACKTOP = sp;return;
- }
- $8 = 0;
- $9 = 0;
- while(1) {
-  $12 = $5;
-  $13 = ($12|0)!=(0|0);
-  if (!($13)) {
-   break;
-  }
-  $14 = $5;
-  $15 = HEAP32[$14>>2]|0;
-  $16 = HEAP32[$15>>2]|0;
-  $17 = $16;
-  switch ($17|0) {
-  case 55:  {
-   $18 = $5;
-   $19 = ((($18)) + 4|0);
-   $20 = HEAP32[$19>>2]|0;
-   $21 = ($20|0)==(0|0);
-   if ($21) {
-    $22 = $5;
-    $23 = HEAP32[$22>>2]|0;
-    $24 = ((($23)) + 4|0);
-    $25 = HEAP32[$24>>2]|0;
-    $26 = ((($25)) + 4|0);
-    $27 = HEAP32[$26>>2]|0;
-    $28 = $27;
-    $29 = ($28|0)==(0);
-    if (!($29)) {
-     label = 7;
-    }
-   } else {
-    label = 7;
-   }
-   break;
-  }
-  case 17:  {
-   label = 7;
-   break;
-  }
-  case 100:  {
-   $35 = $9;
-   $36 = ($35|0)>(0);
-   if ($36) {
-    $9 = 0;
-    $37 = $8;
-    $38 = (($37) + 1)|0;
-    $8 = $38;
-    $39 = $6;
-    $40 = ($39<<24>>24)!=(0);
-    if ($40) {
-     $41 = $4;
-     _gen_send_intern($41);
-    }
-   }
-   break;
-  }
-  default: {
-  }
-  }
-  if ((label|0) == 7) {
-   label = 0;
-   $30 = $4;
-   $31 = $5;
-   $32 = HEAP32[$31>>2]|0;
-   _codegen($30,$32,1);
-   $33 = $9;
-   $34 = (($33) + 1)|0;
-   $9 = $34;
-  }
-  $42 = $9;
-  $43 = ($42|0)>=(2);
-  if ($43) {
-   $44 = $4;
-   $45 = ((($44)) + 172|0);
-   $46 = HEAP32[$45>>2]|0;
-   $47 = (($46) + -1)|0;
-   HEAP32[$45>>2] = $47;
-   $48 = $4;
-   $49 = ((($48)) + 172|0);
-   $50 = HEAP32[$49>>2]|0;
-   $51 = (($50) + -1)|0;
-   HEAP32[$49>>2] = $51;
-   $52 = $4;
-   $53 = $4;
-   $54 = ((($53)) + 172|0);
-   $55 = HEAP32[$54>>2]|0;
-   $56 = $55 & 511;
-   $57 = $56 << 23;
-   $58 = 62 | $57;
-   $59 = $4;
-   $60 = ((($59)) + 172|0);
-   $61 = HEAP32[$60>>2]|0;
-   $62 = (($61) + 1)|0;
-   $63 = $62 & 511;
-   $64 = $63 << 14;
-   $65 = $58 | $64;
-   (_genop_peep($52,$65,1)|0);
-   $66 = $4;
-   _push_($66);
-   $9 = 1;
-  }
-  $67 = $5;
-  $68 = ((($67)) + 4|0);
-  $69 = HEAP32[$68>>2]|0;
-  $5 = $69;
- }
- $70 = $9;
- $71 = ($70|0)>(0);
- if ($71) {
-  $72 = $8;
-  $73 = (($72) + 1)|0;
-  $8 = $73;
-  $74 = $6;
-  $75 = ($74<<24>>24)!=(0);
-  if ($75) {
-   $76 = $4;
-   _gen_send_intern($76);
-  }
- }
- $77 = $8;
- $78 = $4;
- $79 = ((($78)) + 172|0);
- $80 = HEAP32[$79>>2]|0;
- $81 = (($80) - ($77))|0;
- HEAP32[$79>>2] = $81;
- $82 = $4;
- $83 = $4;
- $84 = ((($83)) + 172|0);
- $85 = HEAP32[$84>>2]|0;
- $86 = $85 & 511;
- $87 = $86 << 23;
- $88 = 55 | $87;
- $89 = $4;
- $90 = ((($89)) + 172|0);
- $91 = HEAP32[$90>>2]|0;
- $92 = $91 & 511;
- $93 = $92 << 14;
- $94 = $88 | $93;
- $95 = $8;
- $96 = $95 & 127;
- $97 = $96 << 7;
- $98 = $94 | $97;
- (_genop($82,$98)|0);
- $99 = $4;
- _push_($99);
- STACKTOP = sp;return;
-}
-function _gen_send_intern($0) {
- $0 = $0|0;
- var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0;
- var $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $1 = $0;
- $2 = $1;
- $3 = ((($2)) + 172|0);
- $4 = HEAP32[$3>>2]|0;
- $5 = (($4) + -1)|0;
- HEAP32[$3>>2] = $5;
- $6 = $1;
- $7 = $1;
- $8 = ((($7)) + 172|0);
- $9 = HEAP32[$8>>2]|0;
- $10 = $9 & 511;
- $11 = $10 << 23;
- $12 = 32 | $11;
- $13 = $1;
- $14 = $1;
- $15 = HEAP32[$14>>2]|0;
- $16 = (_mrb_intern_static($15,69712,6)|0);
- $17 = (_new_msym($13,$16)|0);
- $18 = $17 & 511;
- $19 = $18 << 14;
- $20 = $12 | $19;
- (_genop($6,$20)|0);
- $21 = $1;
- _push_($21);
- STACKTOP = sp;return;
-}
-function _codegen_realloc($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $or$cond = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = $0;
- $4 = $1;
- $5 = $2;
- $6 = $3;
- $7 = HEAP32[$6>>2]|0;
- $8 = $4;
- $9 = $5;
- $10 = (_mrb_realloc_simple($7,$8,$9)|0);
- $4 = $10;
- $11 = $4;
- $12 = ($11|0)==(0|0);
- $13 = $5;
- $14 = ($13>>>0)>(0);
- $or$cond = $12 & $14;
- if (!($or$cond)) {
-  $16 = $4;
-  STACKTOP = sp;return ($16|0);
- }
- $15 = $3;
- _codegen_error($15,69719);
- $16 = $4;
- STACKTOP = sp;return ($16|0);
-}
-function _codegen_error($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;
- var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, $vararg_buffer3 = 0, $vararg_ptr1 = 0;
- var $vararg_ptr2 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $vararg_buffer3 = sp + 16|0;
- $vararg_buffer = sp;
- $2 = $0;
- $3 = $1;
- $5 = $2;
- $6 = ($5|0)!=(0|0);
- if (!($6)) {
-  STACKTOP = sp;return;
- }
- while(1) {
-  $7 = $2;
-  $8 = ((($7)) + 164|0);
-  $9 = HEAP32[$8>>2]|0;
-  $10 = ($9|0)!=(0|0);
-  $11 = $2;
-  if (!($10)) {
-   break;
-  }
-  $12 = ((($11)) + 164|0);
-  $13 = HEAP32[$12>>2]|0;
-  $4 = $13;
-  $14 = $2;
-  $15 = ((($14)) + 4|0);
-  $16 = HEAP32[$15>>2]|0;
-  _mrb_pool_close($16);
-  $17 = $4;
-  $2 = $17;
- }
- $18 = ((($11)) + 196|0);
- $19 = HEAP32[$18>>2]|0;
- $20 = ($19|0)!=(0|0);
- if ($20) {
-  $21 = $2;
-  $22 = ((($21)) + 200|0);
-  $23 = HEAP16[$22>>1]|0;
-  $24 = $23&65535;
-  $25 = ($24|0)!=(0);
-  if ($25) {
-   $26 = HEAP32[637]|0;
-   $27 = $2;
-   $28 = ((($27)) + 196|0);
-   $29 = HEAP32[$28>>2]|0;
-   $30 = $2;
-   $31 = ((($30)) + 200|0);
-   $32 = HEAP16[$31>>1]|0;
-   $33 = $32&65535;
-   $34 = $3;
-   HEAP32[$vararg_buffer>>2] = $29;
-   $vararg_ptr1 = ((($vararg_buffer)) + 4|0);
-   HEAP32[$vararg_ptr1>>2] = $33;
-   $vararg_ptr2 = ((($vararg_buffer)) + 8|0);
-   HEAP32[$vararg_ptr2>>2] = $34;
-   (_fprintf($26,69731,$vararg_buffer)|0);
-   $37 = $2;
-   $38 = ((($37)) + 8|0);
-   _longjmp(($38|0),1);
-   // unreachable;
-  }
- }
- $35 = HEAP32[637]|0;
- $36 = $3;
- HEAP32[$vararg_buffer3>>2] = $36;
- (_fprintf($35,69756,$vararg_buffer3)|0);
- $37 = $2;
- $38 = ((($37)) + 8|0);
- _longjmp(($38|0),1);
- // unreachable;
-}
-function _push_n_($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;
- var $29 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $4 = $2;
- $5 = ((($4)) + 172|0);
- $6 = HEAP32[$5>>2]|0;
- $7 = $3;
- $8 = (($6) + ($7))|0;
- $9 = ($8>>>0)>(511);
- if ($9) {
-  $10 = $2;
-  _codegen_error($10,69816);
- }
- $11 = $3;
- $12 = $2;
- $13 = ((($12)) + 172|0);
- $14 = HEAP32[$13>>2]|0;
- $15 = (($14) + ($11))|0;
- HEAP32[$13>>2] = $15;
- $16 = $2;
- $17 = ((($16)) + 172|0);
- $18 = HEAP32[$17>>2]|0;
- $19 = $2;
- $20 = ((($19)) + 234|0);
- $21 = HEAP16[$20>>1]|0;
- $22 = $21&65535;
- $23 = ($18|0)>($22|0);
- if (!($23)) {
-  STACKTOP = sp;return;
- }
- $24 = $2;
- $25 = ((($24)) + 172|0);
- $26 = HEAP32[$25>>2]|0;
- $27 = $26&65535;
- $28 = $2;
- $29 = ((($28)) + 234|0);
- HEAP16[$29>>1] = $27;
- STACKTOP = sp;return;
-}
-function _scope_finish($0) {
- $0 = $0|0;
- var $$sink = 0, $$sink2 = 0, $1 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0;
- var $115 = 0, $116 = 0, $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0;
- var $133 = 0, $134 = 0, $135 = 0, $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0;
- var $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0;
- var $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0;
- var $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0;
- var $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0;
- var $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $1 = $0;
- $6 = $1;
- $7 = HEAP32[$6>>2]|0;
- $2 = $7;
- $8 = $1;
- $9 = ((($8)) + 216|0);
- $10 = HEAP32[$9>>2]|0;
- $3 = $10;
- $11 = $3;
- $12 = ((($11)) + 4|0);
- HEAP8[$12>>0] = 0;
- $13 = $1;
- $14 = ((($13)) + 204|0);
- $15 = HEAP32[$14>>2]|0;
- $16 = ($15|0)!=(0|0);
- if ($16) {
-  $17 = $1;
-  $18 = $1;
-  $19 = ((($18)) + 204|0);
-  $20 = HEAP32[$19>>2]|0;
-  $21 = $1;
-  $22 = ((($21)) + 176|0);
-  $23 = HEAP32[$22>>2]|0;
-  $24 = $23<<2;
-  $25 = (_codegen_realloc($17,$20,$24)|0);
-  $26 = $3;
-  $27 = ((($26)) + 8|0);
-  HEAP32[$27>>2] = $25;
-  $28 = $1;
-  $29 = ((($28)) + 176|0);
-  $30 = HEAP32[$29>>2]|0;
-  $31 = $3;
-  $32 = ((($31)) + 40|0);
-  HEAP32[$32>>2] = $30;
-  $33 = $1;
-  $34 = ((($33)) + 208|0);
-  $35 = HEAP32[$34>>2]|0;
-  $36 = ($35|0)!=(0|0);
-  if ($36) {
-   $37 = $1;
-   $38 = $1;
-   $39 = ((($38)) + 208|0);
-   $40 = HEAP32[$39>>2]|0;
-   $41 = $1;
-   $42 = ((($41)) + 176|0);
-   $43 = HEAP32[$42>>2]|0;
-   $44 = $43<<1;
-   $45 = (_codegen_realloc($37,$40,$44)|0);
-   $46 = $3;
-   $$sink = $45;$$sink2 = $46;
-  } else {
-   $47 = $3;
-   $$sink = 0;$$sink2 = $47;
-  }
-  $48 = ((($$sink2)) + 32|0);
-  HEAP32[$48>>2] = $$sink;
- }
- $49 = $1;
- $50 = $3;
- $51 = ((($50)) + 12|0);
- $52 = HEAP32[$51>>2]|0;
- $53 = $3;
- $54 = ((($53)) + 44|0);
- $55 = HEAP32[$54>>2]|0;
- $56 = $55<<3;
- $57 = (_codegen_realloc($49,$52,$56)|0);
- $58 = $3;
- $59 = ((($58)) + 12|0);
- HEAP32[$59>>2] = $57;
- $60 = $1;
- $61 = $3;
- $62 = ((($61)) + 16|0);
- $63 = HEAP32[$62>>2]|0;
- $64 = $3;
- $65 = ((($64)) + 48|0);
- $66 = HEAP32[$65>>2]|0;
- $67 = $66<<2;
- $68 = (_codegen_realloc($60,$63,$67)|0);
- $69 = $3;
- $70 = ((($69)) + 16|0);
- HEAP32[$70>>2] = $68;
- $71 = $1;
- $72 = $3;
- $73 = ((($72)) + 20|0);
- $74 = HEAP32[$73>>2]|0;
- $75 = $3;
- $76 = ((($75)) + 52|0);
- $77 = HEAP32[$76>>2]|0;
- $78 = $77<<2;
- $79 = (_codegen_realloc($71,$74,$78)|0);
- $80 = $3;
- $81 = ((($80)) + 20|0);
- HEAP32[$81>>2] = $79;
- $82 = $1;
- $83 = ((($82)) + 196|0);
- $84 = HEAP32[$83>>2]|0;
- $85 = ($84|0)!=(0|0);
- if (!($85)) {
-  $126 = $1;
-  $127 = ((($126)) + 232|0);
-  $128 = HEAP16[$127>>1]|0;
-  $129 = $3;
-  HEAP16[$129>>1] = $128;
-  $130 = $1;
-  $131 = ((($130)) + 234|0);
-  $132 = HEAP16[$131>>1]|0;
-  $133 = $3;
-  $134 = ((($133)) + 2|0);
-  HEAP16[$134>>1] = $132;
-  $135 = $2;
-  $136 = $1;
-  $137 = ((($136)) + 236|0);
-  $138 = HEAP32[$137>>2]|0;
-  _mrb_gc_arena_restore($135,$138);
-  $139 = $1;
-  $140 = ((($139)) + 4|0);
-  $141 = HEAP32[$140>>2]|0;
-  _mrb_pool_close($141);
-  STACKTOP = sp;return;
- }
- $86 = $1;
- $87 = ((($86)) + 248|0);
- $88 = HEAP32[$87>>2]|0;
- $89 = $1;
- $90 = ((($89)) + 244|0);
- $91 = HEAP16[$90>>1]|0;
- $92 = (_mrb_parser_get_filename($88,$91)|0);
- $93 = $1;
- $94 = ((($93)) + 216|0);
- $95 = HEAP32[$94>>2]|0;
- $96 = ((($95)) + 28|0);
- HEAP32[$96>>2] = $92;
- $97 = $2;
- $98 = $1;
- $99 = ((($98)) + 216|0);
- $100 = HEAP32[$99>>2]|0;
- $101 = $1;
- $102 = ((($101)) + 240|0);
- $103 = HEAP32[$102>>2]|0;
- $104 = $1;
- $105 = ((($104)) + 176|0);
- $106 = HEAP32[$105>>2]|0;
- (_mrb_debug_info_append_file($97,$100,$103,$106)|0);
- $107 = $1;
- $108 = ((($107)) + 196|0);
- $109 = HEAP32[$108>>2]|0;
- $110 = (_strlen($109)|0);
- $4 = $110;
- $111 = $1;
- $112 = $4;
- $113 = (($112) + 1)|0;
- $114 = (_codegen_malloc($111,$113)|0);
- $5 = $114;
- $115 = $5;
- $116 = $1;
- $117 = ((($116)) + 196|0);
- $118 = HEAP32[$117>>2]|0;
- $119 = $4;
- _memcpy(($115|0),($118|0),($119|0))|0;
- $120 = $5;
- $121 = $4;
- $122 = (($120) + ($121)|0);
- HEAP8[$122>>0] = 0;
- $123 = $5;
- $124 = $3;
- $125 = ((($124)) + 28|0);
- HEAP32[$125>>2] = $123;
- $126 = $1;
- $127 = ((($126)) + 232|0);
- $128 = HEAP16[$127>>1]|0;
- $129 = $3;
- HEAP16[$129>>1] = $128;
- $130 = $1;
- $131 = ((($130)) + 234|0);
- $132 = HEAP16[$131>>1]|0;
- $133 = $3;
- $134 = ((($133)) + 2|0);
- HEAP16[$134>>1] = $132;
- $135 = $2;
- $136 = $1;
- $137 = ((($136)) + 236|0);
- $138 = HEAP32[$137>>2]|0;
- _mrb_gc_arena_restore($135,$138);
- $139 = $1;
- $140 = ((($139)) + 4|0);
- $141 = HEAP32[$140>>2]|0;
- _mrb_pool_close($141);
- STACKTOP = sp;return;
-}
-function _codegen_malloc($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $5 = $2;
- $6 = HEAP32[$5>>2]|0;
- $7 = $3;
- $8 = (_mrb_malloc_simple($6,$7)|0);
- $4 = $8;
- $9 = $4;
- $10 = ($9|0)!=(0|0);
- if ($10) {
-  $12 = $4;
-  STACKTOP = sp;return ($12|0);
- }
- $11 = $2;
- _codegen_error($11,69861);
- $12 = $4;
- STACKTOP = sp;return ($12|0);
-}
-function _node_len($0) {
- $0 = $0|0;
- var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $1 = $0;
- $2 = 0;
- while(1) {
-  $3 = $1;
-  $4 = ($3|0)!=(0|0);
-  $5 = $2;
-  if (!($4)) {
-   break;
-  }
-  $6 = (($5) + 1)|0;
-  $2 = $6;
-  $7 = $1;
-  $8 = ((($7)) + 4|0);
-  $9 = HEAP32[$8>>2]|0;
-  $1 = $9;
- }
- STACKTOP = sp;return ($5|0);
-}
-function _no_optimize($0) {
- $0 = $0|0;
- var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $2;
- $4 = ($3|0)!=(0|0);
- if ($4) {
-  $5 = $2;
-  $6 = ((($5)) + 248|0);
-  $7 = HEAP32[$6>>2]|0;
-  $8 = ($7|0)!=(0|0);
-  if ($8) {
-   $9 = $2;
-   $10 = ((($9)) + 248|0);
-   $11 = HEAP32[$10>>2]|0;
-   $12 = ((($11)) + 1148|0);
-   $13 = HEAP8[$12>>0]|0;
-   $14 = $13 & 1;
-   $15 = $14&255;
-   $16 = ($15|0)!=(0);
-   if ($16) {
-    $1 = 1;
-    $17 = $1;
-    STACKTOP = sp;return ($17|0);
-   }
-  }
- }
- $1 = 0;
- $17 = $1;
- STACKTOP = sp;return ($17|0);
-}
-function _attrsym($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;
- var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $5 = sp + 4|0;
- $2 = $0;
- $3 = $1;
- $7 = $2;
- $8 = HEAP32[$7>>2]|0;
- $9 = $3;
- $10 = (_mrb_sym2name_len($8,$9,$5)|0);
- $4 = $10;
- $11 = $2;
- $12 = HEAP32[$5>>2]|0;
- $13 = (($12) + 1)|0;
- $14 = (($13) + 1)|0;
- $15 = (_codegen_palloc($11,$14)|0);
- $6 = $15;
- $16 = $6;
- $17 = $4;
- $18 = HEAP32[$5>>2]|0;
- _memcpy(($16|0),($17|0),($18|0))|0;
- $19 = $6;
- $20 = HEAP32[$5>>2]|0;
- $21 = (($19) + ($20)|0);
- HEAP8[$21>>0] = 61;
- $22 = $6;
- $23 = HEAP32[$5>>2]|0;
- $24 = (($23) + 1)|0;
- $25 = (($22) + ($24)|0);
- HEAP8[$25>>0] = 0;
- $26 = $2;
- $27 = HEAP32[$26>>2]|0;
- $28 = $6;
- $29 = HEAP32[$5>>2]|0;
- $30 = (($29) + 1)|0;
- $31 = (_mrb_intern($27,$28,$30)|0);
- STACKTOP = sp;return ($31|0);
-}
-function _codegen_palloc($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $5 = $2;
- $6 = ((($5)) + 4|0);
- $7 = HEAP32[$6>>2]|0;
- $8 = $3;
- $9 = (_mrb_pool_alloc($7,$8)|0);
- $4 = $9;
- $10 = $4;
- $11 = ($10|0)!=(0|0);
- if ($11) {
-  $13 = $4;
-  STACKTOP = sp;return ($13|0);
- }
- $12 = $2;
- _codegen_error($12,69888);
- $13 = $4;
- STACKTOP = sp;return ($13|0);
-}
-function _scope_error($0) {
- $0 = $0|0;
- var $1 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $1 = $0;
- _exit(1);
- // unreachable;
-}
-function _scope_add_irep($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;
- var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0;
- var $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = $0;
- $3 = $1;
- $4 = $2;
- $5 = ((($4)) + 216|0);
- $6 = HEAP32[$5>>2]|0;
- $7 = ($6|0)==(0|0);
- if ($7) {
-  $8 = $3;
-  $9 = $2;
-  $10 = ((($9)) + 216|0);
-  HEAP32[$10>>2] = $8;
-  STACKTOP = sp;return;
- }
- $11 = $2;
- $12 = ((($11)) + 216|0);
- $13 = HEAP32[$12>>2]|0;
- $14 = ((($13)) + 52|0);
- $15 = HEAP32[$14>>2]|0;
- $16 = $2;
- $17 = ((($16)) + 228|0);
- $18 = HEAP32[$17>>2]|0;
- $19 = ($15|0)==($18|0);
- if ($19) {
-  $20 = $2;
-  $21 = ((($20)) + 228|0);
-  $22 = HEAP32[$21>>2]|0;
-  $23 = $22<<1;
-  HEAP32[$21>>2] = $23;
-  $24 = $2;
-  $25 = $2;
-  $26 = ((($25)) + 216|0);
-  $27 = HEAP32[$26>>2]|0;
-  $28 = ((($27)) + 20|0);
-  $29 = HEAP32[$28>>2]|0;
-  $30 = $2;
-  $31 = ((($30)) + 228|0);
-  $32 = HEAP32[$31>>2]|0;
-  $33 = $32<<2;
-  $34 = (_codegen_realloc($24,$29,$33)|0);
-  $35 = $2;
-  $36 = ((($35)) + 216|0);
-  $37 = HEAP32[$36>>2]|0;
-  $38 = ((($37)) + 20|0);
-  HEAP32[$38>>2] = $34;
- }
- $39 = $3;
- $40 = $2;
- $41 = ((($40)) + 216|0);
- $42 = HEAP32[$41>>2]|0;
- $43 = ((($42)) + 20|0);
- $44 = HEAP32[$43>>2]|0;
- $45 = $2;
- $46 = ((($45)) + 216|0);
- $47 = HEAP32[$46>>2]|0;
- $48 = ((($47)) + 52|0);
- $49 = HEAP32[$48>>2]|0;
- $50 = (($44) + ($49<<2)|0);
- HEAP32[$50>>2] = $39;
- $51 = $2;
- $52 = ((($51)) + 216|0);
- $53 = HEAP32[$52>>2]|0;
- $54 = ((($53)) + 52|0);
- $55 = HEAP32[$54>>2]|0;
- $56 = (($55) + 1)|0;
- HEAP32[$54>>2] = $56;
- STACKTOP = sp;return;
-}
-function _mrb_init_comparable($0) {
- $0 = $0|0;
- var $1 = 0, $2 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $1 = $0;
- $2 = $1;
- (_mrb_define_module($2,69967)|0);
- STACKTOP = sp;return;
-}
-function _mrb_init_enumerable($0) {
- $0 = $0|0;
- var $1 = 0, $2 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $1 = $0;
- $2 = $1;
- (_mrb_define_module($2,69978)|0);
- STACKTOP = sp;return;
-}
-function _emscripten_get_global_libc() {
- var label = 0, sp = 0;
- sp = STACKTOP;
- return (75192|0);
-}
-function ___stdio_close($0) {
- $0 = $0|0;
- var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $vararg_buffer = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $vararg_buffer = sp;
- $1 = ((($0)) + 60|0);
- $2 = HEAP32[$1>>2]|0;
- $3 = (_dummy_738($2)|0);
- HEAP32[$vararg_buffer>>2] = $3;
- $4 = (___syscall6(6,($vararg_buffer|0))|0);
- $5 = (___syscall_ret($4)|0);
- STACKTOP = sp;return ($5|0);
-}
-function ___stdio_write($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$0 = 0, $$04756 = 0, $$04855 = 0, $$04954 = 0, $$051 = 0, $$1 = 0, $$150 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0;
- var $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0;
- var $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, $vararg_buffer3 = 0, $vararg_ptr1 = 0, $vararg_ptr2 = 0, $vararg_ptr6 = 0;
- var $vararg_ptr7 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);
- $vararg_buffer3 = sp + 16|0;
- $vararg_buffer = sp;
- $3 = sp + 32|0;
- $4 = ((($0)) + 28|0);
- $5 = HEAP32[$4>>2]|0;
- HEAP32[$3>>2] = $5;
- $6 = ((($3)) + 4|0);
- $7 = ((($0)) + 20|0);
- $8 = HEAP32[$7>>2]|0;
- $9 = (($8) - ($5))|0;
- HEAP32[$6>>2] = $9;
- $10 = ((($3)) + 8|0);
- HEAP32[$10>>2] = $1;
- $11 = ((($3)) + 12|0);
- HEAP32[$11>>2] = $2;
- $12 = (($9) + ($2))|0;
- $13 = ((($0)) + 60|0);
- $14 = HEAP32[$13>>2]|0;
- $15 = $3;
- HEAP32[$vararg_buffer>>2] = $14;
- $vararg_ptr1 = ((($vararg_buffer)) + 4|0);
- HEAP32[$vararg_ptr1>>2] = $15;
- $vararg_ptr2 = ((($vararg_buffer)) + 8|0);
- HEAP32[$vararg_ptr2>>2] = 2;
- $16 = (___syscall146(146,($vararg_buffer|0))|0);
- $17 = (___syscall_ret($16)|0);
- $18 = ($12|0)==($17|0);
- L1: do {
-  if ($18) {
-   label = 3;
-  } else {
-   $$04756 = 2;$$04855 = $12;$$04954 = $3;$26 = $17;
-   while(1) {
-    $25 = ($26|0)<(0);
-    if ($25) {
-     break;
-    }
-    $34 = (($$04855) - ($26))|0;
-    $35 = ((($$04954)) + 4|0);
-    $36 = HEAP32[$35>>2]|0;
-    $37 = ($26>>>0)>($36>>>0);
-    $38 = ((($$04954)) + 8|0);
-    $$150 = $37 ? $38 : $$04954;
-    $39 = $37 << 31 >> 31;
-    $$1 = (($39) + ($$04756))|0;
-    $40 = $37 ? $36 : 0;
-    $$0 = (($26) - ($40))|0;
-    $41 = HEAP32[$$150>>2]|0;
-    $42 = (($41) + ($$0)|0);
-    HEAP32[$$150>>2] = $42;
-    $43 = ((($$150)) + 4|0);
-    $44 = HEAP32[$43>>2]|0;
-    $45 = (($44) - ($$0))|0;
-    HEAP32[$43>>2] = $45;
-    $46 = HEAP32[$13>>2]|0;
-    $47 = $$150;
-    HEAP32[$vararg_buffer3>>2] = $46;
-    $vararg_ptr6 = ((($vararg_buffer3)) + 4|0);
-    HEAP32[$vararg_ptr6>>2] = $47;
-    $vararg_ptr7 = ((($vararg_buffer3)) + 8|0);
-    HEAP32[$vararg_ptr7>>2] = $$1;
-    $48 = (___syscall146(146,($vararg_buffer3|0))|0);
-    $49 = (___syscall_ret($48)|0);
-    $50 = ($34|0)==($49|0);
-    if ($50) {
-     label = 3;
-     break L1;
-    } else {
-     $$04756 = $$1;$$04855 = $34;$$04954 = $$150;$26 = $49;
-    }
-   }
-   $27 = ((($0)) + 16|0);
-   HEAP32[$27>>2] = 0;
-   HEAP32[$4>>2] = 0;
-   HEAP32[$7>>2] = 0;
-   $28 = HEAP32[$0>>2]|0;
-   $29 = $28 | 32;
-   HEAP32[$0>>2] = $29;
-   $30 = ($$04756|0)==(2);
-   if ($30) {
-    $$051 = 0;
-   } else {
-    $31 = ((($$04954)) + 4|0);
-    $32 = HEAP32[$31>>2]|0;
-    $33 = (($2) - ($32))|0;
-    $$051 = $33;
-   }
-  }
- } while(0);
- if ((label|0) == 3) {
-  $19 = ((($0)) + 44|0);
-  $20 = HEAP32[$19>>2]|0;
-  $21 = ((($0)) + 48|0);
-  $22 = HEAP32[$21>>2]|0;
-  $23 = (($20) + ($22)|0);
-  $24 = ((($0)) + 16|0);
-  HEAP32[$24>>2] = $23;
-  HEAP32[$4>>2] = $20;
-  HEAP32[$7>>2] = $20;
-  $$051 = $2;
- }
- STACKTOP = sp;return ($$051|0);
-}
-function ___stdio_seek($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$pre = 0, $10 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, $vararg_ptr1 = 0, $vararg_ptr2 = 0, $vararg_ptr3 = 0, $vararg_ptr4 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $vararg_buffer = sp;
- $3 = sp + 20|0;
- $4 = ((($0)) + 60|0);
- $5 = HEAP32[$4>>2]|0;
- $6 = $3;
- HEAP32[$vararg_buffer>>2] = $5;
- $vararg_ptr1 = ((($vararg_buffer)) + 4|0);
- HEAP32[$vararg_ptr1>>2] = 0;
- $vararg_ptr2 = ((($vararg_buffer)) + 8|0);
- HEAP32[$vararg_ptr2>>2] = $1;
- $vararg_ptr3 = ((($vararg_buffer)) + 12|0);
- HEAP32[$vararg_ptr3>>2] = $6;
- $vararg_ptr4 = ((($vararg_buffer)) + 16|0);
- HEAP32[$vararg_ptr4>>2] = $2;
- $7 = (___syscall140(140,($vararg_buffer|0))|0);
- $8 = (___syscall_ret($7)|0);
- $9 = ($8|0)<(0);
- if ($9) {
-  HEAP32[$3>>2] = -1;
-  $10 = -1;
- } else {
-  $$pre = HEAP32[$3>>2]|0;
-  $10 = $$pre;
- }
- STACKTOP = sp;return ($10|0);
-}
-function ___syscall_ret($0) {
- $0 = $0|0;
- var $$0 = 0, $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- $1 = ($0>>>0)>(4294963200);
- if ($1) {
-  $2 = (0 - ($0))|0;
-  $3 = (___errno_location()|0);
-  HEAP32[$3>>2] = $2;
-  $$0 = -1;
- } else {
-  $$0 = $0;
- }
- return ($$0|0);
-}
-function ___errno_location() {
- var $0 = 0, $1 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- $0 = (___pthread_self_108()|0);
- $1 = ((($0)) + 64|0);
- return ($1|0);
-}
-function ___pthread_self_108() {
- var $0 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- $0 = (_pthread_self()|0);
- return ($0|0);
-}
-function _pthread_self() {
- var label = 0, sp = 0;
- sp = STACKTOP;
- return (2676|0);
-}
-function _dummy_738($0) {
- $0 = $0|0;
- var label = 0, sp = 0;
- sp = STACKTOP;
- return ($0|0);
-}
-function ___stdio_read($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$0 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;
- var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, $vararg_ptr1 = 0, $vararg_ptr2 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $vararg_buffer = sp;
- $3 = sp + 16|0;
- HEAP32[$3>>2] = $1;
- $4 = ((($3)) + 4|0);
- $5 = ((($0)) + 48|0);
- $6 = HEAP32[$5>>2]|0;
- $7 = ($6|0)!=(0);
- $8 = $7&1;
- $9 = (($2) - ($8))|0;
- HEAP32[$4>>2] = $9;
- $10 = ((($3)) + 8|0);
- $11 = ((($0)) + 44|0);
- $12 = HEAP32[$11>>2]|0;
- HEAP32[$10>>2] = $12;
- $13 = ((($3)) + 12|0);
- HEAP32[$13>>2] = $6;
- $14 = ((($0)) + 60|0);
- $15 = HEAP32[$14>>2]|0;
- $16 = $3;
- HEAP32[$vararg_buffer>>2] = $15;
- $vararg_ptr1 = ((($vararg_buffer)) + 4|0);
- HEAP32[$vararg_ptr1>>2] = $16;
- $vararg_ptr2 = ((($vararg_buffer)) + 8|0);
- HEAP32[$vararg_ptr2>>2] = 2;
- $17 = (___syscall145(145,($vararg_buffer|0))|0);
- $18 = (___syscall_ret($17)|0);
- $19 = ($18|0)<(1);
- if ($19) {
-  $20 = $18 & 48;
-  $21 = $20 ^ 16;
-  $22 = HEAP32[$0>>2]|0;
-  $23 = $22 | $21;
-  HEAP32[$0>>2] = $23;
-  $$0 = $18;
- } else {
-  $24 = HEAP32[$4>>2]|0;
-  $25 = ($18>>>0)>($24>>>0);
-  if ($25) {
-   $26 = (($18) - ($24))|0;
-   $27 = HEAP32[$11>>2]|0;
-   $28 = ((($0)) + 4|0);
-   HEAP32[$28>>2] = $27;
-   $29 = (($27) + ($26)|0);
-   $30 = ((($0)) + 8|0);
-   HEAP32[$30>>2] = $29;
-   $31 = HEAP32[$5>>2]|0;
-   $32 = ($31|0)==(0);
-   if ($32) {
-    $$0 = $2;
-   } else {
-    $33 = ((($27)) + 1|0);
-    HEAP32[$28>>2] = $33;
-    $34 = HEAP8[$27>>0]|0;
-    $35 = (($2) + -1)|0;
-    $36 = (($1) + ($35)|0);
-    HEAP8[$36>>0] = $34;
-    $$0 = $2;
-   }
-  } else {
-   $$0 = $18;
-  }
- }
- STACKTOP = sp;return ($$0|0);
-}
-function ___stdout_write($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, $vararg_ptr1 = 0, $vararg_ptr2 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);
- $vararg_buffer = sp;
- $3 = sp + 16|0;
- $4 = ((($0)) + 36|0);
- HEAP32[$4>>2] = 2;
- $5 = HEAP32[$0>>2]|0;
- $6 = $5 & 64;
- $7 = ($6|0)==(0);
- if ($7) {
-  $8 = ((($0)) + 60|0);
-  $9 = HEAP32[$8>>2]|0;
-  $10 = $3;
-  HEAP32[$vararg_buffer>>2] = $9;
-  $vararg_ptr1 = ((($vararg_buffer)) + 4|0);
-  HEAP32[$vararg_ptr1>>2] = 21523;
-  $vararg_ptr2 = ((($vararg_buffer)) + 8|0);
-  HEAP32[$vararg_ptr2>>2] = $10;
-  $11 = (___syscall54(54,($vararg_buffer|0))|0);
-  $12 = ($11|0)==(0);
-  if (!($12)) {
-   $13 = ((($0)) + 75|0);
-   HEAP8[$13>>0] = -1;
-  }
- }
- $14 = (___stdio_write($0,$1,$2)|0);
- STACKTOP = sp;return ($14|0);
-}
-function _tolower($0) {
- $0 = $0|0;
- var $$0 = 0, $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- $1 = (_isupper($0)|0);
- $2 = ($1|0)==(0);
- $3 = $0 | 32;
- $$0 = $2 ? $0 : $3;
- return ($$0|0);
-}
-function _isupper($0) {
- $0 = $0|0;
- var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- $1 = (($0) + -65)|0;
- $2 = ($1>>>0)<(26);
- $3 = $2&1;
- return ($3|0);
-}
-function _strtox_768($0,$1,$2,$3,$4) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- $4 = $4|0;
- var $$sink = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 128|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(128|0);
- $5 = sp;
- HEAP32[$5>>2] = 0;
- $6 = ((($5)) + 4|0);
- HEAP32[$6>>2] = $0;
- $7 = ((($5)) + 44|0);
- HEAP32[$7>>2] = $0;
- $8 = ($0|0)<(0|0);
- $9 = ((($0)) + 2147483647|0);
- $$sink = $8 ? (-1) : $9;
- $10 = ((($5)) + 8|0);
- HEAP32[$10>>2] = $$sink;
- $11 = ((($5)) + 76|0);
- HEAP32[$11>>2] = -1;
- ___shlim($5,0);
- $12 = (___intscan($5,$2,1,$3,$4)|0);
- $13 = tempRet0;
- $14 = ($1|0)==(0|0);
- if (!($14)) {
-  $15 = ((($5)) + 108|0);
-  $16 = HEAP32[$15>>2]|0;
-  $17 = HEAP32[$6>>2]|0;
-  $18 = HEAP32[$10>>2]|0;
-  $19 = (($17) + ($16))|0;
-  $20 = (($19) - ($18))|0;
-  $21 = (($0) + ($20)|0);
-  HEAP32[$1>>2] = $21;
- }
- tempRet0 = ($13);
- STACKTOP = sp;return ($12|0);
-}
-function ___shlim($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $$sink = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $or$cond = 0, label = 0, sp = 0;
- sp = STACKTOP;
- $2 = ((($0)) + 104|0);
- HEAP32[$2>>2] = $1;
- $3 = ((($0)) + 8|0);
- $4 = HEAP32[$3>>2]|0;
- $5 = ((($0)) + 4|0);
- $6 = HEAP32[$5>>2]|0;
- $7 = $4;
- $8 = $6;
- $9 = (($7) - ($8))|0;
- $10 = ((($0)) + 108|0);
- HEAP32[$10>>2] = $9;
- $11 = ($1|0)!=(0);
- $12 = ($9|0)>($1|0);
- $or$cond = $11 & $12;
- $13 = (($6) + ($1)|0);
- $$sink = $or$cond ? $13 : $4;
- $14 = ((($0)) + 100|0);
- HEAP32[$14>>2] = $$sink;
- return;
-}
-function ___intscan($0,$1,$2,$3,$4) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- $4 = $4|0;
- var $$0154222 = 0, $$0157 = 0, $$0157$ = 0, $$0159 = 0, $$1155192 = 0, $$1158 = 0, $$1160 = 0, $$1160169 = 0, $$1165 = 0, $$1165167 = 0, $$1165168 = 0, $$166 = 0, $$2156210 = 0, $$2161$be = 0, $$2161$lcssa = 0, $$3162$be = 0, $$3162215 = 0, $$4163$be = 0, $$4163$lcssa = 0, $$5$be = 0;
- var $$6$be = 0, $$6$lcssa = 0, $$7$be = 0, $$7198 = 0, $$8 = 0, $$9$be = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0;
- var $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0;
- var $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0, $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0;
- var $149 = 0, $15 = 0, $150 = 0, $151 = 0, $152 = 0, $153 = 0, $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0;
- var $167 = 0, $168 = 0, $169 = 0, $17 = 0, $170 = 0, $171 = 0, $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0;
- var $185 = 0, $186 = 0, $187 = 0, $188 = 0, $189 = 0, $19 = 0, $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0, $197 = 0, $198 = 0, $199 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0;
- var $203 = 0, $204 = 0, $205 = 0, $206 = 0, $207 = 0, $208 = 0, $209 = 0, $21 = 0, $210 = 0, $211 = 0, $212 = 0, $213 = 0, $214 = 0, $215 = 0, $216 = 0, $217 = 0, $218 = 0, $219 = 0, $22 = 0, $220 = 0;
- var $221 = 0, $222 = 0, $223 = 0, $224 = 0, $225 = 0, $226 = 0, $227 = 0, $228 = 0, $229 = 0, $23 = 0, $230 = 0, $231 = 0, $232 = 0, $233 = 0, $234 = 0, $235 = 0, $236 = 0, $237 = 0, $238 = 0, $239 = 0;
- var $24 = 0, $240 = 0, $241 = 0, $242 = 0, $243 = 0, $244 = 0, $245 = 0, $246 = 0, $247 = 0, $248 = 0, $249 = 0, $25 = 0, $250 = 0, $251 = 0, $252 = 0, $253 = 0, $254 = 0, $255 = 0, $256 = 0, $257 = 0;
- var $258 = 0, $259 = 0, $26 = 0, $260 = 0, $261 = 0, $262 = 0, $263 = 0, $264 = 0, $265 = 0, $266 = 0, $267 = 0, $268 = 0, $269 = 0, $27 = 0, $270 = 0, $271 = 0, $272 = 0, $273 = 0, $274 = 0, $275 = 0;
- var $276 = 0, $277 = 0, $278 = 0, $279 = 0, $28 = 0, $280 = 0, $281 = 0, $282 = 0, $283 = 0, $284 = 0, $285 = 0, $286 = 0, $287 = 0, $288 = 0, $289 = 0, $29 = 0, $290 = 0, $291 = 0, $292 = 0, $293 = 0;
- var $294 = 0, $295 = 0, $296 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0;
- var $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0;
- var $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0;
- var $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $or$cond = 0, $or$cond12 = 0;
- var $or$cond187 = 0, $or$cond5 = 0, $or$cond7 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- $5 = ($1>>>0)>(36);
- L1: do {
-  if ($5) {
-   $8 = (___errno_location()|0);
-   HEAP32[$8>>2] = 22;
-   $289 = 0;$290 = 0;
-  } else {
-   $6 = ((($0)) + 4|0);
-   $7 = ((($0)) + 100|0);
-   while(1) {
-    $9 = HEAP32[$6>>2]|0;
-    $10 = HEAP32[$7>>2]|0;
-    $11 = ($9>>>0)<($10>>>0);
-    if ($11) {
-     $12 = ((($9)) + 1|0);
-     HEAP32[$6>>2] = $12;
-     $13 = HEAP8[$9>>0]|0;
-     $14 = $13&255;
-     $16 = $14;
-    } else {
-     $15 = (___shgetc($0)|0);
-     $16 = $15;
-    }
-    $17 = (_isspace($16)|0);
-    $18 = ($17|0)==(0);
-    if ($18) {
-     break;
-    }
-   }
-   L11: do {
-    switch ($16|0) {
-    case 43: case 45:  {
-     $19 = ($16|0)==(45);
-     $20 = $19 << 31 >> 31;
-     $21 = HEAP32[$6>>2]|0;
-     $22 = HEAP32[$7>>2]|0;
-     $23 = ($21>>>0)<($22>>>0);
-     if ($23) {
-      $24 = ((($21)) + 1|0);
-      HEAP32[$6>>2] = $24;
-      $25 = HEAP8[$21>>0]|0;
-      $26 = $25&255;
-      $$0157 = $20;$$0159 = $26;
-      break L11;
-     } else {
-      $27 = (___shgetc($0)|0);
-      $$0157 = $20;$$0159 = $27;
-      break L11;
-     }
-     break;
-    }
-    default: {
-     $$0157 = 0;$$0159 = $16;
-    }
-    }
-   } while(0);
-   $28 = ($1|0)==(0);
-   $29 = $1 | 16;
-   $30 = ($29|0)==(16);
-   $31 = ($$0159|0)==(48);
-   $or$cond5 = $30 & $31;
-   do {
-    if ($or$cond5) {
-     $32 = HEAP32[$6>>2]|0;
-     $33 = HEAP32[$7>>2]|0;
-     $34 = ($32>>>0)<($33>>>0);
-     if ($34) {
-      $35 = ((($32)) + 1|0);
-      HEAP32[$6>>2] = $35;
-      $36 = HEAP8[$32>>0]|0;
-      $37 = $36&255;
-      $40 = $37;
-     } else {
-      $38 = (___shgetc($0)|0);
-      $40 = $38;
-     }
-     $39 = $40 | 32;
-     $41 = ($39|0)==(120);
-     if (!($41)) {
-      if ($28) {
-       $$1160169 = $40;$$1165168 = 8;
-       label = 46;
-       break;
-      } else {
-       $$1160 = $40;$$1165 = $1;
-       label = 32;
-       break;
-      }
-     }
-     $42 = HEAP32[$6>>2]|0;
-     $43 = HEAP32[$7>>2]|0;
-     $44 = ($42>>>0)<($43>>>0);
-     if ($44) {
-      $45 = ((($42)) + 1|0);
-      HEAP32[$6>>2] = $45;
-      $46 = HEAP8[$42>>0]|0;
-      $47 = $46&255;
-      $50 = $47;
-     } else {
-      $48 = (___shgetc($0)|0);
-      $50 = $48;
-     }
-     $49 = ((69990) + ($50)|0);
-     $51 = HEAP8[$49>>0]|0;
-     $52 = ($51&255)>(15);
-     if ($52) {
-      $53 = HEAP32[$7>>2]|0;
-      $54 = ($53|0)!=(0|0);
-      if ($54) {
-       $55 = HEAP32[$6>>2]|0;
-       $56 = ((($55)) + -1|0);
-       HEAP32[$6>>2] = $56;
-      }
-      $57 = ($2|0)==(0);
-      if ($57) {
-       ___shlim($0,0);
-       $289 = 0;$290 = 0;
-       break L1;
-      }
-      if (!($54)) {
-       $289 = 0;$290 = 0;
-       break L1;
-      }
-      $58 = HEAP32[$6>>2]|0;
-      $59 = ((($58)) + -1|0);
-      HEAP32[$6>>2] = $59;
-      $289 = 0;$290 = 0;
-      break L1;
-     } else {
-      $$1160169 = $50;$$1165168 = 16;
-      label = 46;
-     }
-    } else {
-     $$166 = $28 ? 10 : $1;
-     $60 = ((69990) + ($$0159)|0);
-     $61 = HEAP8[$60>>0]|0;
-     $62 = $61&255;
-     $63 = ($62>>>0)<($$166>>>0);
-     if ($63) {
-      $$1160 = $$0159;$$1165 = $$166;
-      label = 32;
-     } else {
-      $64 = HEAP32[$7>>2]|0;
-      $65 = ($64|0)==(0|0);
-      if (!($65)) {
-       $66 = HEAP32[$6>>2]|0;
-       $67 = ((($66)) + -1|0);
-       HEAP32[$6>>2] = $67;
-      }
-      ___shlim($0,0);
-      $68 = (___errno_location()|0);
-      HEAP32[$68>>2] = 22;
-      $289 = 0;$290 = 0;
-      break L1;
-     }
-    }
-   } while(0);
-   L43: do {
-    if ((label|0) == 32) {
-     $69 = ($$1165|0)==(10);
-     if ($69) {
-      $70 = (($$1160) + -48)|0;
-      $71 = ($70>>>0)<(10);
-      if ($71) {
-       $$0154222 = 0;$74 = $70;
-       while(1) {
-        $72 = ($$0154222*10)|0;
-        $73 = (($72) + ($74))|0;
-        $75 = HEAP32[$6>>2]|0;
-        $76 = HEAP32[$7>>2]|0;
-        $77 = ($75>>>0)<($76>>>0);
-        if ($77) {
-         $78 = ((($75)) + 1|0);
-         HEAP32[$6>>2] = $78;
-         $79 = HEAP8[$75>>0]|0;
-         $80 = $79&255;
-         $$2161$be = $80;
-        } else {
-         $81 = (___shgetc($0)|0);
-         $$2161$be = $81;
-        }
-        $82 = (($$2161$be) + -48)|0;
-        $83 = ($82>>>0)<(10);
-        $84 = ($73>>>0)<(429496729);
-        $85 = $83 & $84;
-        if ($85) {
-         $$0154222 = $73;$74 = $82;
-        } else {
-         break;
-        }
-       }
-       $$2161$lcssa = $$2161$be;$291 = $73;$292 = 0;
-      } else {
-       $$2161$lcssa = $$1160;$291 = 0;$292 = 0;
-      }
-      $86 = (($$2161$lcssa) + -48)|0;
-      $87 = ($86>>>0)<(10);
-      if ($87) {
-       $$3162215 = $$2161$lcssa;$88 = $291;$89 = $292;$93 = $86;
-       while(1) {
-        $90 = (___muldi3(($88|0),($89|0),10,0)|0);
-        $91 = tempRet0;
-        $92 = ($93|0)<(0);
-        $94 = $92 << 31 >> 31;
-        $95 = $93 ^ -1;
-        $96 = $94 ^ -1;
-        $97 = ($91>>>0)>($96>>>0);
-        $98 = ($90>>>0)>($95>>>0);
-        $99 = ($91|0)==($96|0);
-        $100 = $99 & $98;
-        $101 = $97 | $100;
-        if ($101) {
-         $$1165167 = 10;$$8 = $$3162215;$293 = $88;$294 = $89;
-         label = 72;
-         break L43;
-        }
-        $102 = (_i64Add(($90|0),($91|0),($93|0),($94|0))|0);
-        $103 = tempRet0;
-        $104 = HEAP32[$6>>2]|0;
-        $105 = HEAP32[$7>>2]|0;
-        $106 = ($104>>>0)<($105>>>0);
-        if ($106) {
-         $107 = ((($104)) + 1|0);
-         HEAP32[$6>>2] = $107;
-         $108 = HEAP8[$104>>0]|0;
-         $109 = $108&255;
-         $$3162$be = $109;
-        } else {
-         $110 = (___shgetc($0)|0);
-         $$3162$be = $110;
-        }
-        $111 = (($$3162$be) + -48)|0;
-        $112 = ($111>>>0)<(10);
-        $113 = ($103>>>0)<(429496729);
-        $114 = ($102>>>0)<(2576980378);
-        $115 = ($103|0)==(429496729);
-        $116 = $115 & $114;
-        $117 = $113 | $116;
-        $or$cond7 = $112 & $117;
-        if ($or$cond7) {
-         $$3162215 = $$3162$be;$88 = $102;$89 = $103;$93 = $111;
-        } else {
-         break;
-        }
-       }
-       $118 = ($111>>>0)>(9);
-       if ($118) {
-        $$1158 = $$0157;$263 = $103;$265 = $102;
-       } else {
-        $$1165167 = 10;$$8 = $$3162$be;$293 = $102;$294 = $103;
-        label = 72;
-       }
-      } else {
-       $$1158 = $$0157;$263 = $292;$265 = $291;
-      }
-     } else {
-      $$1160169 = $$1160;$$1165168 = $$1165;
-      label = 46;
-     }
-    }
-   } while(0);
-   L63: do {
-    if ((label|0) == 46) {
-     $119 = (($$1165168) + -1)|0;
-     $120 = $119 & $$1165168;
-     $121 = ($120|0)==(0);
-     if ($121) {
-      $126 = ($$1165168*23)|0;
-      $127 = $126 >>> 5;
-      $128 = $127 & 7;
-      $129 = (70246 + ($128)|0);
-      $130 = HEAP8[$129>>0]|0;
-      $131 = $130 << 24 >> 24;
-      $132 = ((69990) + ($$1160169)|0);
-      $133 = HEAP8[$132>>0]|0;
-      $134 = $133&255;
-      $135 = ($134>>>0)<($$1165168>>>0);
-      if ($135) {
-       $$1155192 = 0;$138 = $134;
-       while(1) {
-        $136 = $$1155192 << $131;
-        $137 = $138 | $136;
-        $139 = HEAP32[$6>>2]|0;
-        $140 = HEAP32[$7>>2]|0;
-        $141 = ($139>>>0)<($140>>>0);
-        if ($141) {
-         $142 = ((($139)) + 1|0);
-         HEAP32[$6>>2] = $142;
-         $143 = HEAP8[$139>>0]|0;
-         $144 = $143&255;
-         $$4163$be = $144;
-        } else {
-         $145 = (___shgetc($0)|0);
-         $$4163$be = $145;
-        }
-        $146 = ((69990) + ($$4163$be)|0);
-        $147 = HEAP8[$146>>0]|0;
-        $148 = $147&255;
-        $149 = ($148>>>0)<($$1165168>>>0);
-        $150 = ($137>>>0)<(134217728);
-        $151 = $150 & $149;
-        if ($151) {
-         $$1155192 = $137;$138 = $148;
-        } else {
-         break;
-        }
-       }
-       $$4163$lcssa = $$4163$be;$155 = $147;$158 = 0;$160 = $137;
-      } else {
-       $$4163$lcssa = $$1160169;$155 = $133;$158 = 0;$160 = 0;
-      }
-      $152 = (_bitshift64Lshr(-1,-1,($131|0))|0);
-      $153 = tempRet0;
-      $154 = $155&255;
-      $156 = ($154>>>0)>=($$1165168>>>0);
-      $157 = ($158>>>0)>($153>>>0);
-      $159 = ($160>>>0)>($152>>>0);
-      $161 = ($158|0)==($153|0);
-      $162 = $161 & $159;
-      $163 = $157 | $162;
-      $or$cond187 = $156 | $163;
-      if ($or$cond187) {
-       $$1165167 = $$1165168;$$8 = $$4163$lcssa;$293 = $160;$294 = $158;
-       label = 72;
-       break;
-      } else {
-       $164 = $160;$165 = $158;$169 = $155;
-      }
-      while(1) {
-       $166 = (_bitshift64Shl(($164|0),($165|0),($131|0))|0);
-       $167 = tempRet0;
-       $168 = $169&255;
-       $170 = $168 | $166;
-       $171 = HEAP32[$6>>2]|0;
-       $172 = HEAP32[$7>>2]|0;
-       $173 = ($171>>>0)<($172>>>0);
-       if ($173) {
-        $174 = ((($171)) + 1|0);
-        HEAP32[$6>>2] = $174;
-        $175 = HEAP8[$171>>0]|0;
-        $176 = $175&255;
-        $$5$be = $176;
-       } else {
-        $177 = (___shgetc($0)|0);
-        $$5$be = $177;
-       }
-       $178 = ((69990) + ($$5$be)|0);
-       $179 = HEAP8[$178>>0]|0;
-       $180 = $179&255;
-       $181 = ($180>>>0)>=($$1165168>>>0);
-       $182 = ($167>>>0)>($153>>>0);
-       $183 = ($170>>>0)>($152>>>0);
-       $184 = ($167|0)==($153|0);
-       $185 = $184 & $183;
-       $186 = $182 | $185;
-       $or$cond = $181 | $186;
-       if ($or$cond) {
-        $$1165167 = $$1165168;$$8 = $$5$be;$293 = $170;$294 = $167;
-        label = 72;
-        break L63;
-       } else {
-        $164 = $170;$165 = $167;$169 = $179;
-       }
-      }
-     }
-     $122 = ((69990) + ($$1160169)|0);
-     $123 = HEAP8[$122>>0]|0;
-     $124 = $123&255;
-     $125 = ($124>>>0)<($$1165168>>>0);
-     if ($125) {
-      $$2156210 = 0;$189 = $124;
-      while(1) {
-       $187 = Math_imul($$2156210, $$1165168)|0;
-       $188 = (($189) + ($187))|0;
-       $190 = HEAP32[$6>>2]|0;
-       $191 = HEAP32[$7>>2]|0;
-       $192 = ($190>>>0)<($191>>>0);
-       if ($192) {
-        $193 = ((($190)) + 1|0);
-        HEAP32[$6>>2] = $193;
-        $194 = HEAP8[$190>>0]|0;
-        $195 = $194&255;
-        $$6$be = $195;
-       } else {
-        $196 = (___shgetc($0)|0);
-        $$6$be = $196;
-       }
-       $197 = ((69990) + ($$6$be)|0);
-       $198 = HEAP8[$197>>0]|0;
-       $199 = $198&255;
-       $200 = ($199>>>0)<($$1165168>>>0);
-       $201 = ($188>>>0)<(119304647);
-       $202 = $201 & $200;
-       if ($202) {
-        $$2156210 = $188;$189 = $199;
-       } else {
-        break;
-       }
-      }
-      $$6$lcssa = $$6$be;$204 = $198;$295 = $188;$296 = 0;
-     } else {
-      $$6$lcssa = $$1160169;$204 = $123;$295 = 0;$296 = 0;
-     }
-     $203 = $204&255;
-     $205 = ($203>>>0)<($$1165168>>>0);
-     if ($205) {
-      $206 = (___udivdi3(-1,-1,($$1165168|0),0)|0);
-      $207 = tempRet0;
-      $$7198 = $$6$lcssa;$209 = $296;$211 = $295;$218 = $204;
-      while(1) {
-       $208 = ($209>>>0)>($207>>>0);
-       $210 = ($211>>>0)>($206>>>0);
-       $212 = ($209|0)==($207|0);
-       $213 = $212 & $210;
-       $214 = $208 | $213;
-       if ($214) {
-        $$1165167 = $$1165168;$$8 = $$7198;$293 = $211;$294 = $209;
-        label = 72;
-        break L63;
-       }
-       $215 = (___muldi3(($211|0),($209|0),($$1165168|0),0)|0);
-       $216 = tempRet0;
-       $217 = $218&255;
-       $219 = $217 ^ -1;
-       $220 = ($216>>>0)>(4294967295);
-       $221 = ($215>>>0)>($219>>>0);
-       $222 = ($216|0)==(-1);
-       $223 = $222 & $221;
-       $224 = $220 | $223;
-       if ($224) {
-        $$1165167 = $$1165168;$$8 = $$7198;$293 = $211;$294 = $209;
-        label = 72;
-        break L63;
-       }
-       $225 = (_i64Add(($217|0),0,($215|0),($216|0))|0);
-       $226 = tempRet0;
-       $227 = HEAP32[$6>>2]|0;
-       $228 = HEAP32[$7>>2]|0;
-       $229 = ($227>>>0)<($228>>>0);
-       if ($229) {
-        $230 = ((($227)) + 1|0);
-        HEAP32[$6>>2] = $230;
-        $231 = HEAP8[$227>>0]|0;
-        $232 = $231&255;
-        $$7$be = $232;
-       } else {
-        $233 = (___shgetc($0)|0);
-        $$7$be = $233;
-       }
-       $234 = ((69990) + ($$7$be)|0);
-       $235 = HEAP8[$234>>0]|0;
-       $236 = $235&255;
-       $237 = ($236>>>0)<($$1165168>>>0);
-       if ($237) {
-        $$7198 = $$7$be;$209 = $226;$211 = $225;$218 = $235;
-       } else {
-        $$1165167 = $$1165168;$$8 = $$7$be;$293 = $225;$294 = $226;
-        label = 72;
-        break;
-       }
-      }
-     } else {
-      $$1165167 = $$1165168;$$8 = $$6$lcssa;$293 = $295;$294 = $296;
-      label = 72;
-     }
-    }
-   } while(0);
-   if ((label|0) == 72) {
-    $238 = ((69990) + ($$8)|0);
-    $239 = HEAP8[$238>>0]|0;
-    $240 = $239&255;
-    $241 = ($240>>>0)<($$1165167>>>0);
-    if ($241) {
-     while(1) {
-      $242 = HEAP32[$6>>2]|0;
-      $243 = HEAP32[$7>>2]|0;
-      $244 = ($242>>>0)<($243>>>0);
-      if ($244) {
-       $245 = ((($242)) + 1|0);
-       HEAP32[$6>>2] = $245;
-       $246 = HEAP8[$242>>0]|0;
-       $247 = $246&255;
-       $$9$be = $247;
-      } else {
-       $248 = (___shgetc($0)|0);
-       $$9$be = $248;
-      }
-      $249 = ((69990) + ($$9$be)|0);
-      $250 = HEAP8[$249>>0]|0;
-      $251 = $250&255;
-      $252 = ($251>>>0)<($$1165167>>>0);
-      if (!($252)) {
-       break;
-      }
-     }
-     $253 = (___errno_location()|0);
-     HEAP32[$253>>2] = 34;
-     $254 = $3 & 1;
-     $255 = ($254|0)==(0);
-     $256 = (0)==(0);
-     $257 = $255 & $256;
-     $$0157$ = $257 ? $$0157 : 0;
-     $$1158 = $$0157$;$263 = $4;$265 = $3;
-    } else {
-     $$1158 = $$0157;$263 = $294;$265 = $293;
-    }
-   }
-   $258 = HEAP32[$7>>2]|0;
-   $259 = ($258|0)==(0|0);
-   if (!($259)) {
-    $260 = HEAP32[$6>>2]|0;
-    $261 = ((($260)) + -1|0);
-    HEAP32[$6>>2] = $261;
-   }
-   $262 = ($263>>>0)<($4>>>0);
-   $264 = ($265>>>0)<($3>>>0);
-   $266 = ($263|0)==($4|0);
-   $267 = $266 & $264;
-   $268 = $262 | $267;
-   if (!($268)) {
-    $269 = $3 & 1;
-    $270 = ($269|0)!=(0);
-    $271 = (0)!=(0);
-    $272 = $270 | $271;
-    $273 = ($$1158|0)!=(0);
-    $or$cond12 = $272 | $273;
-    if (!($or$cond12)) {
-     $274 = (___errno_location()|0);
-     HEAP32[$274>>2] = 34;
-     $275 = (_i64Add(($3|0),($4|0),-1,-1)|0);
-     $276 = tempRet0;
-     $289 = $276;$290 = $275;
-     break;
-    }
-    $277 = ($263>>>0)>($4>>>0);
-    $278 = ($265>>>0)>($3>>>0);
-    $279 = ($263|0)==($4|0);
-    $280 = $279 & $278;
-    $281 = $277 | $280;
-    if ($281) {
-     $282 = (___errno_location()|0);
-     HEAP32[$282>>2] = 34;
-     $289 = $4;$290 = $3;
-     break;
-    }
-   }
-   $283 = ($$1158|0)<(0);
-   $284 = $283 << 31 >> 31;
-   $285 = $265 ^ $$1158;
-   $286 = $263 ^ $284;
-   $287 = (_i64Subtract(($285|0),($286|0),($$1158|0),($284|0))|0);
-   $288 = tempRet0;
-   $289 = $288;$290 = $287;
-  }
- } while(0);
- tempRet0 = ($289);
- return ($290|0);
-}
-function ___shgetc($0) {
- $0 = $0|0;
- var $$0 = 0, $$phi$trans$insert = 0, $$phi$trans$insert28$phi$trans$insert = 0, $$pre = 0, $$pre$phi34Z2D = 0, $$pre29$pre = 0, $$pre35 = 0, $$sink = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0;
- var $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0;
- var $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- $1 = ((($0)) + 104|0);
- $2 = HEAP32[$1>>2]|0;
- $3 = ($2|0)==(0);
- if ($3) {
-  label = 3;
- } else {
-  $4 = ((($0)) + 108|0);
-  $5 = HEAP32[$4>>2]|0;
-  $6 = ($5|0)<($2|0);
-  if ($6) {
-   label = 3;
-  } else {
-   label = 4;
-  }
- }
- if ((label|0) == 3) {
-  $7 = (___uflow($0)|0);
-  $8 = ($7|0)<(0);
-  if ($8) {
-   label = 4;
-  } else {
-   $10 = HEAP32[$1>>2]|0;
-   $11 = ($10|0)==(0);
-   $$phi$trans$insert = ((($0)) + 8|0);
-   if ($11) {
-    $$pre = HEAP32[$$phi$trans$insert>>2]|0;
-    $$phi$trans$insert28$phi$trans$insert = ((($0)) + 4|0);
-    $$pre29$pre = HEAP32[$$phi$trans$insert28$phi$trans$insert>>2]|0;
-    $$pre35 = ((($0)) + 108|0);
-    $$pre$phi34Z2D = $$pre35;$$sink = $$pre;$26 = $$pre;$29 = $$pre29$pre;
-   } else {
-    $12 = HEAP32[$$phi$trans$insert>>2]|0;
-    $13 = ((($0)) + 4|0);
-    $14 = HEAP32[$13>>2]|0;
-    $15 = $14;
-    $16 = (($12) - ($15))|0;
-    $17 = ((($0)) + 108|0);
-    $18 = HEAP32[$17>>2]|0;
-    $19 = (($10) - ($18))|0;
-    $20 = ($16|0)<($19|0);
-    $21 = $12;
-    if ($20) {
-     $$pre$phi34Z2D = $17;$$sink = $21;$26 = $21;$29 = $14;
-    } else {
-     $22 = (($19) + -1)|0;
-     $23 = (($14) + ($22)|0);
-     $$pre$phi34Z2D = $17;$$sink = $23;$26 = $21;$29 = $14;
-    }
-   }
-   $24 = ((($0)) + 100|0);
-   HEAP32[$24>>2] = $$sink;
-   $25 = ($26|0)==(0|0);
-   if (!($25)) {
-    $27 = $26;
-    $28 = $29;
-    $30 = HEAP32[$$pre$phi34Z2D>>2]|0;
-    $31 = (($27) + 1)|0;
-    $32 = (($31) - ($28))|0;
-    $33 = (($32) + ($30))|0;
-    HEAP32[$$pre$phi34Z2D>>2] = $33;
-   }
-   $34 = ((($29)) + -1|0);
-   $35 = HEAP8[$34>>0]|0;
-   $36 = $35&255;
-   $37 = ($36|0)==($7|0);
-   if ($37) {
-    $$0 = $7;
-   } else {
-    $38 = $7&255;
-    HEAP8[$34>>0] = $38;
-    $$0 = $7;
-   }
-  }
- }
- if ((label|0) == 4) {
-  $9 = ((($0)) + 100|0);
-  HEAP32[$9>>2] = 0;
-  $$0 = -1;
- }
- return ($$0|0);
-}
-function _isspace($0) {
- $0 = $0|0;
- var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- $1 = ($0|0)==(32);
- $2 = (($0) + -9)|0;
- $3 = ($2>>>0)<(5);
- $4 = $1 | $3;
- $5 = $4&1;
- return ($5|0);
-}
-function ___uflow($0) {
- $0 = $0|0;
- var $$0 = 0, $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $1 = sp;
- $2 = (___toread($0)|0);
- $3 = ($2|0)==(0);
- if ($3) {
-  $4 = ((($0)) + 32|0);
-  $5 = HEAP32[$4>>2]|0;
-  $6 = (FUNCTION_TABLE_iiii[$5 & 511]($0,$1,1)|0);
-  $7 = ($6|0)==(1);
-  if ($7) {
-   $8 = HEAP8[$1>>0]|0;
-   $9 = $8&255;
-   $$0 = $9;
-  } else {
-   $$0 = -1;
-  }
- } else {
-  $$0 = -1;
- }
- STACKTOP = sp;return ($$0|0);
-}
-function ___toread($0) {
- $0 = $0|0;
- var $$0 = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0;
- var $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $sext = 0, label = 0, sp = 0;
- sp = STACKTOP;
- $1 = ((($0)) + 74|0);
- $2 = HEAP8[$1>>0]|0;
- $3 = $2 << 24 >> 24;
- $4 = (($3) + 255)|0;
- $5 = $4 | $3;
- $6 = $5&255;
- HEAP8[$1>>0] = $6;
- $7 = ((($0)) + 20|0);
- $8 = HEAP32[$7>>2]|0;
- $9 = ((($0)) + 28|0);
- $10 = HEAP32[$9>>2]|0;
- $11 = ($8>>>0)>($10>>>0);
- if ($11) {
-  $12 = ((($0)) + 36|0);
-  $13 = HEAP32[$12>>2]|0;
-  (FUNCTION_TABLE_iiii[$13 & 511]($0,0,0)|0);
- }
- $14 = ((($0)) + 16|0);
- HEAP32[$14>>2] = 0;
- HEAP32[$9>>2] = 0;
- HEAP32[$7>>2] = 0;
- $15 = HEAP32[$0>>2]|0;
- $16 = $15 & 4;
- $17 = ($16|0)==(0);
- if ($17) {
-  $19 = ((($0)) + 44|0);
-  $20 = HEAP32[$19>>2]|0;
-  $21 = ((($0)) + 48|0);
-  $22 = HEAP32[$21>>2]|0;
-  $23 = (($20) + ($22)|0);
-  $24 = ((($0)) + 8|0);
-  HEAP32[$24>>2] = $23;
-  $25 = ((($0)) + 4|0);
-  HEAP32[$25>>2] = $23;
-  $26 = $15 << 27;
-  $sext = $26 >> 31;
-  $$0 = $sext;
- } else {
-  $18 = $15 | 32;
-  HEAP32[$0>>2] = $18;
-  $$0 = -1;
- }
- return ($$0|0);
-}
-function _strtoul($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $3 = 0, $4 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- $3 = (_strtox_768($0,$1,$2,-1,0)|0);
- $4 = tempRet0;
- return ($3|0);
-}
-function _copysign($0,$1) {
- $0 = +$0;
- $1 = +$1;
- var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0.0, label = 0, sp = 0;
- sp = STACKTOP;
- HEAPF64[tempDoublePtr>>3] = $0;$2 = HEAP32[tempDoublePtr>>2]|0;
- $3 = HEAP32[tempDoublePtr+4>>2]|0;
- HEAPF64[tempDoublePtr>>3] = $1;$4 = HEAP32[tempDoublePtr>>2]|0;
- $5 = HEAP32[tempDoublePtr+4>>2]|0;
- $6 = $3 & 2147483647;
- $7 = $5 & -2147483648;
- $8 = $7 | $6;
- HEAP32[tempDoublePtr>>2] = $2;HEAP32[tempDoublePtr+4>>2] = $8;$9 = +HEAPF64[tempDoublePtr>>3];
- return (+$9);
-}
-function _strcmp($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $$011 = 0, $$0710 = 0, $$lcssa = 0, $$lcssa8 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $or$cond = 0, $or$cond9 = 0, label = 0;
- var sp = 0;
- sp = STACKTOP;
- $2 = HEAP8[$0>>0]|0;
- $3 = HEAP8[$1>>0]|0;
- $4 = ($2<<24>>24)!=($3<<24>>24);
- $5 = ($2<<24>>24)==(0);
- $or$cond9 = $5 | $4;
- if ($or$cond9) {
-  $$lcssa = $3;$$lcssa8 = $2;
- } else {
-  $$011 = $1;$$0710 = $0;
-  while(1) {
-   $6 = ((($$0710)) + 1|0);
-   $7 = ((($$011)) + 1|0);
-   $8 = HEAP8[$6>>0]|0;
-   $9 = HEAP8[$7>>0]|0;
-   $10 = ($8<<24>>24)!=($9<<24>>24);
-   $11 = ($8<<24>>24)==(0);
-   $or$cond = $11 | $10;
-   if ($or$cond) {
-    $$lcssa = $9;$$lcssa8 = $8;
-    break;
-   } else {
-    $$011 = $7;$$0710 = $6;
-   }
-  }
- }
- $12 = $$lcssa8&255;
- $13 = $$lcssa&255;
- $14 = (($12) - ($13))|0;
- return ($14|0);
-}
-function _memcmp($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$01318 = 0, $$01417 = 0, $$019 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- $3 = ($2|0)==(0);
- L1: do {
-  if ($3) {
-   $14 = 0;
-  } else {
-   $$01318 = $0;$$01417 = $2;$$019 = $1;
-   while(1) {
-    $4 = HEAP8[$$01318>>0]|0;
-    $5 = HEAP8[$$019>>0]|0;
-    $6 = ($4<<24>>24)==($5<<24>>24);
-    if (!($6)) {
-     break;
-    }
-    $7 = (($$01417) + -1)|0;
-    $8 = ((($$01318)) + 1|0);
-    $9 = ((($$019)) + 1|0);
-    $10 = ($7|0)==(0);
-    if ($10) {
-     $14 = 0;
-     break L1;
-    } else {
-     $$01318 = $8;$$01417 = $7;$$019 = $9;
-    }
-   }
-   $11 = $4&255;
-   $12 = $5&255;
-   $13 = (($11) - ($12))|0;
-   $14 = $13;
-  }
- } while(0);
- return ($14|0);
-}
-function _strncmp($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$01824 = 0, $$01926 = 0, $$01926$in = 0, $$020 = 0, $$025 = 0, $$lcssa = 0, $$lcssa22 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0;
- var $23 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $or$cond = 0, $or$cond21 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- $3 = ($2|0)==(0);
- if ($3) {
-  $$020 = 0;
- } else {
-  $4 = HEAP8[$0>>0]|0;
-  $5 = $4&255;
-  $6 = ($4<<24>>24)==(0);
-  $7 = HEAP8[$1>>0]|0;
-  $8 = $7&255;
-  L3: do {
-   if ($6) {
-    $$lcssa = $8;$$lcssa22 = $5;
-   } else {
-    $$01824 = $0;$$01926$in = $2;$$025 = $1;$10 = $7;$13 = $4;$22 = $8;$23 = $5;
-    while(1) {
-     $$01926 = (($$01926$in) + -1)|0;
-     $9 = ($10<<24>>24)!=(0);
-     $11 = ($$01926|0)!=(0);
-     $or$cond = $11 & $9;
-     $12 = ($13<<24>>24)==($10<<24>>24);
-     $or$cond21 = $12 & $or$cond;
-     if (!($or$cond21)) {
-      $$lcssa = $22;$$lcssa22 = $23;
-      break L3;
-     }
-     $14 = ((($$01824)) + 1|0);
-     $15 = ((($$025)) + 1|0);
-     $16 = HEAP8[$14>>0]|0;
-     $17 = $16&255;
-     $18 = ($16<<24>>24)==(0);
-     $19 = HEAP8[$15>>0]|0;
-     $20 = $19&255;
-     if ($18) {
-      $$lcssa = $20;$$lcssa22 = $17;
-      break;
-     } else {
-      $$01824 = $14;$$01926$in = $$01926;$$025 = $15;$10 = $19;$13 = $16;$22 = $20;$23 = $17;
-     }
-    }
-   }
-  } while(0);
-  $21 = (($$lcssa22) - ($$lcssa))|0;
-  $$020 = $21;
- }
- return ($$020|0);
-}
-function _vsnprintf($0,$1,$2,$3) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- var $$$015 = 0, $$0 = 0, $$014 = 0, $$015 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0;
- var $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, dest = 0, label = 0, sp = 0, src = 0, stop = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 128|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(128|0);
- $4 = sp + 124|0;
- $5 = sp;
- dest=$5; src=3180; stop=dest+124|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0));
- $6 = (($1) + -1)|0;
- $7 = ($6>>>0)>(2147483646);
- if ($7) {
-  $8 = ($1|0)==(0);
-  if ($8) {
-   $$014 = $4;$$015 = 1;
-   label = 4;
-  } else {
-   $9 = (___errno_location()|0);
-   HEAP32[$9>>2] = 75;
-   $$0 = -1;
-  }
- } else {
-  $$014 = $0;$$015 = $1;
-  label = 4;
- }
- if ((label|0) == 4) {
-  $10 = $$014;
-  $11 = (-2 - ($10))|0;
-  $12 = ($$015>>>0)>($11>>>0);
-  $$$015 = $12 ? $11 : $$015;
-  $13 = ((($5)) + 48|0);
-  HEAP32[$13>>2] = $$$015;
-  $14 = ((($5)) + 20|0);
-  HEAP32[$14>>2] = $$014;
-  $15 = ((($5)) + 44|0);
-  HEAP32[$15>>2] = $$014;
-  $16 = (($$014) + ($$$015)|0);
-  $17 = ((($5)) + 16|0);
-  HEAP32[$17>>2] = $16;
-  $18 = ((($5)) + 28|0);
-  HEAP32[$18>>2] = $16;
-  $19 = (_vfprintf($5,$2,$3)|0);
-  $20 = ($$$015|0)==(0);
-  if ($20) {
-   $$0 = $19;
-  } else {
-   $21 = HEAP32[$14>>2]|0;
-   $22 = HEAP32[$17>>2]|0;
-   $23 = ($21|0)==($22|0);
-   $24 = $23 << 31 >> 31;
-   $25 = (($21) + ($24)|0);
-   HEAP8[$25>>0] = 0;
-   $$0 = $19;
-  }
- }
- STACKTOP = sp;return ($$0|0);
-}
-function _vfprintf($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$ = 0, $$0 = 0, $$1 = 0, $$1$ = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0;
- var $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $5 = 0, $6 = 0, $7 = 0;
- var $8 = 0, $9 = 0, $vacopy_currentptr = 0, dest = 0, label = 0, sp = 0, stop = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 224|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(224|0);
- $3 = sp + 120|0;
- $4 = sp + 80|0;
- $5 = sp;
- $6 = sp + 136|0;
- dest=$4; stop=dest+40|0; do { HEAP32[dest>>2]=0|0; dest=dest+4|0; } while ((dest|0) < (stop|0));
- $vacopy_currentptr = HEAP32[$2>>2]|0;
- HEAP32[$3>>2] = $vacopy_currentptr;
- $7 = (_printf_core(0,$1,$3,$5,$4)|0);
- $8 = ($7|0)<(0);
- if ($8) {
-  $$0 = -1;
- } else {
-  $9 = ((($0)) + 76|0);
-  $10 = HEAP32[$9>>2]|0;
-  $11 = ($10|0)>(-1);
-  if ($11) {
-   $12 = (___lockfile($0)|0);
-   $40 = $12;
-  } else {
-   $40 = 0;
-  }
-  $13 = HEAP32[$0>>2]|0;
-  $14 = $13 & 32;
-  $15 = ((($0)) + 74|0);
-  $16 = HEAP8[$15>>0]|0;
-  $17 = ($16<<24>>24)<(1);
-  if ($17) {
-   $18 = $13 & -33;
-   HEAP32[$0>>2] = $18;
-  }
-  $19 = ((($0)) + 48|0);
-  $20 = HEAP32[$19>>2]|0;
-  $21 = ($20|0)==(0);
-  if ($21) {
-   $23 = ((($0)) + 44|0);
-   $24 = HEAP32[$23>>2]|0;
-   HEAP32[$23>>2] = $6;
-   $25 = ((($0)) + 28|0);
-   HEAP32[$25>>2] = $6;
-   $26 = ((($0)) + 20|0);
-   HEAP32[$26>>2] = $6;
-   HEAP32[$19>>2] = 80;
-   $27 = ((($6)) + 80|0);
-   $28 = ((($0)) + 16|0);
-   HEAP32[$28>>2] = $27;
-   $29 = (_printf_core($0,$1,$3,$5,$4)|0);
-   $30 = ($24|0)==(0|0);
-   if ($30) {
-    $$1 = $29;
-   } else {
-    $31 = ((($0)) + 36|0);
-    $32 = HEAP32[$31>>2]|0;
-    (FUNCTION_TABLE_iiii[$32 & 511]($0,0,0)|0);
-    $33 = HEAP32[$26>>2]|0;
-    $34 = ($33|0)==(0|0);
-    $$ = $34 ? -1 : $29;
-    HEAP32[$23>>2] = $24;
-    HEAP32[$19>>2] = 0;
-    HEAP32[$28>>2] = 0;
-    HEAP32[$25>>2] = 0;
-    HEAP32[$26>>2] = 0;
-    $$1 = $$;
-   }
-  } else {
-   $22 = (_printf_core($0,$1,$3,$5,$4)|0);
-   $$1 = $22;
-  }
-  $35 = HEAP32[$0>>2]|0;
-  $36 = $35 & 32;
-  $37 = ($36|0)==(0);
-  $$1$ = $37 ? $$1 : -1;
-  $38 = $35 | $14;
-  HEAP32[$0>>2] = $38;
-  $39 = ($40|0)==(0);
-  if (!($39)) {
-   ___unlockfile($0);
-  }
-  $$0 = $$1$;
- }
- STACKTOP = sp;return ($$0|0);
-}
-function _printf_core($0,$1,$2,$3,$4) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- $4 = $4|0;
- var $$ = 0, $$$ = 0, $$$0259 = 0, $$$0262 = 0, $$$0269 = 0, $$$4266 = 0, $$$5 = 0, $$0 = 0, $$0228 = 0, $$0228$ = 0, $$0229322 = 0, $$0232 = 0, $$0235 = 0, $$0237 = 0, $$0240$lcssa = 0, $$0240$lcssa357 = 0, $$0240321 = 0, $$0243 = 0, $$0247 = 0, $$0249$lcssa = 0;
- var $$0249306 = 0, $$0252 = 0, $$0253 = 0, $$0254 = 0, $$0254$$0254$ = 0, $$0259 = 0, $$0262$lcssa = 0, $$0262311 = 0, $$0269 = 0, $$0269$phi = 0, $$1 = 0, $$1230333 = 0, $$1233 = 0, $$1236 = 0, $$1238 = 0, $$1241332 = 0, $$1244320 = 0, $$1248 = 0, $$1250 = 0, $$1255 = 0;
- var $$1260 = 0, $$1263 = 0, $$1263$ = 0, $$1270 = 0, $$2 = 0, $$2234 = 0, $$2239 = 0, $$2242305 = 0, $$2245 = 0, $$2251 = 0, $$2256 = 0, $$2256$ = 0, $$2256$$$2256 = 0, $$2261 = 0, $$2271 = 0, $$284$ = 0, $$289 = 0, $$290 = 0, $$3257 = 0, $$3265 = 0;
- var $$3272 = 0, $$3303 = 0, $$377 = 0, $$4258355 = 0, $$4266 = 0, $$5 = 0, $$6268 = 0, $$lcssa295 = 0, $$pre = 0, $$pre346 = 0, $$pre347 = 0, $$pre347$pre = 0, $$pre349 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0;
- var $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0;
- var $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0, $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0;
- var $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0, $152 = 0, $153 = 0, $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0;
- var $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0, $170 = 0, $171 = 0, $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0;
- var $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0, $188 = 0, $189 = 0, $19 = 0, $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0;
- var $197 = 0, $198 = 0, $199 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0, $204 = 0, $205 = 0, $206 = 0, $207 = 0, $208 = 0, $209 = 0, $21 = 0, $210 = 0, $211 = 0, $212 = 0, $213 = 0, $214 = 0;
- var $215 = 0, $216 = 0, $217 = 0, $218 = 0, $219 = 0, $22 = 0, $220 = 0, $221 = 0, $222 = 0, $223 = 0, $224 = 0, $225 = 0, $226 = 0, $227 = 0, $228 = 0, $229 = 0, $23 = 0, $230 = 0, $231 = 0, $232 = 0;
- var $233 = 0, $234 = 0, $235 = 0, $236 = 0, $237 = 0, $238 = 0, $239 = 0, $24 = 0, $240 = 0, $241 = 0, $242 = 0, $243 = 0, $244 = 0, $245 = 0, $246 = 0, $247 = 0, $248 = 0, $249 = 0, $25 = 0, $250 = 0;
- var $251 = 0, $252 = 0, $253 = 0, $254 = 0, $255 = 0, $256 = 0, $257 = 0, $258 = 0, $259 = 0, $26 = 0, $260 = 0, $261 = 0, $262 = 0, $263 = 0, $264 = 0, $265 = 0, $266 = 0, $267 = 0, $268 = 0, $269 = 0;
- var $27 = 0, $270 = 0, $271 = 0, $272 = 0, $273 = 0, $274 = 0, $275 = 0, $276 = 0, $277 = 0, $278 = 0, $279 = 0, $28 = 0, $280 = 0, $281 = 0, $282 = 0, $283 = 0, $284 = 0, $285 = 0, $286 = 0, $287 = 0;
- var $288 = 0, $289 = 0, $29 = 0, $290 = 0, $291 = 0, $292 = 0, $293 = 0, $294 = 0, $295 = 0, $296 = 0, $297 = 0, $298 = 0, $299 = 0, $30 = 0, $300 = 0, $301 = 0, $302 = 0, $303 = 0, $304 = 0, $305 = 0;
- var $306 = 0.0, $307 = 0, $308 = 0, $309 = 0, $31 = 0, $310 = 0, $311 = 0, $312 = 0, $313 = 0, $314 = 0, $315 = 0, $316 = 0, $317 = 0, $318 = 0, $319 = 0, $32 = 0, $320 = 0, $321 = 0, $322 = 0, $323 = 0;
- var $324 = 0, $325 = 0, $326 = 0, $327 = 0, $328 = 0, $329 = 0, $33 = 0, $330 = 0, $331 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0;
- var $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0;
- var $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0;
- var $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0;
- var $arglist_current = 0, $arglist_current2 = 0, $arglist_next = 0, $arglist_next3 = 0, $expanded = 0, $expanded10 = 0, $expanded11 = 0, $expanded13 = 0, $expanded14 = 0, $expanded15 = 0, $expanded4 = 0, $expanded6 = 0, $expanded7 = 0, $expanded8 = 0, $isdigit = 0, $isdigit275 = 0, $isdigit277 = 0, $isdigittmp = 0, $isdigittmp$ = 0, $isdigittmp274 = 0;
- var $isdigittmp276 = 0, $narrow = 0, $or$cond = 0, $or$cond281 = 0, $or$cond283 = 0, $or$cond286 = 0, $storemerge = 0, $storemerge273310 = 0, $storemerge278 = 0, $trunc = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);
- $5 = sp + 16|0;
- $6 = sp;
- $7 = sp + 24|0;
- $8 = sp + 8|0;
- $9 = sp + 20|0;
- HEAP32[$5>>2] = $1;
- $10 = ($0|0)!=(0|0);
- $11 = ((($7)) + 40|0);
- $12 = $11;
- $13 = ((($7)) + 39|0);
- $14 = ((($8)) + 4|0);
- $$0243 = 0;$$0247 = 0;$$0269 = 0;$21 = $1;
- L1: while(1) {
-  $15 = ($$0247|0)>(-1);
-  do {
-   if ($15) {
-    $16 = (2147483647 - ($$0247))|0;
-    $17 = ($$0243|0)>($16|0);
-    if ($17) {
-     $18 = (___errno_location()|0);
-     HEAP32[$18>>2] = 75;
-     $$1248 = -1;
-     break;
-    } else {
-     $19 = (($$0243) + ($$0247))|0;
-     $$1248 = $19;
-     break;
-    }
-   } else {
-    $$1248 = $$0247;
-   }
-  } while(0);
-  $20 = HEAP8[$21>>0]|0;
-  $22 = ($20<<24>>24)==(0);
-  if ($22) {
-   label = 87;
-   break;
-  } else {
-   $23 = $20;$25 = $21;
-  }
-  L9: while(1) {
-   switch ($23<<24>>24) {
-   case 37:  {
-    $$0249306 = $25;$27 = $25;
-    label = 9;
-    break L9;
-    break;
-   }
-   case 0:  {
-    $$0249$lcssa = $25;$39 = $25;
-    break L9;
-    break;
-   }
-   default: {
-   }
-   }
-   $24 = ((($25)) + 1|0);
-   HEAP32[$5>>2] = $24;
-   $$pre = HEAP8[$24>>0]|0;
-   $23 = $$pre;$25 = $24;
-  }
-  L12: do {
-   if ((label|0) == 9) {
-    while(1) {
-     label = 0;
-     $26 = ((($27)) + 1|0);
-     $28 = HEAP8[$26>>0]|0;
-     $29 = ($28<<24>>24)==(37);
-     if (!($29)) {
-      $$0249$lcssa = $$0249306;$39 = $27;
-      break L12;
-     }
-     $30 = ((($$0249306)) + 1|0);
-     $31 = ((($27)) + 2|0);
-     HEAP32[$5>>2] = $31;
-     $32 = HEAP8[$31>>0]|0;
-     $33 = ($32<<24>>24)==(37);
-     if ($33) {
-      $$0249306 = $30;$27 = $31;
-      label = 9;
-     } else {
-      $$0249$lcssa = $30;$39 = $31;
-      break;
-     }
-    }
-   }
-  } while(0);
-  $34 = $$0249$lcssa;
-  $35 = $21;
-  $36 = (($34) - ($35))|0;
-  if ($10) {
-   _out_1229($0,$21,$36);
-  }
-  $37 = ($36|0)==(0);
-  if (!($37)) {
-   $$0269$phi = $$0269;$$0243 = $36;$$0247 = $$1248;$21 = $39;$$0269 = $$0269$phi;
-   continue;
-  }
-  $38 = ((($39)) + 1|0);
-  $40 = HEAP8[$38>>0]|0;
-  $41 = $40 << 24 >> 24;
-  $isdigittmp = (($41) + -48)|0;
-  $isdigit = ($isdigittmp>>>0)<(10);
-  if ($isdigit) {
-   $42 = ((($39)) + 2|0);
-   $43 = HEAP8[$42>>0]|0;
-   $44 = ($43<<24>>24)==(36);
-   $45 = ((($39)) + 3|0);
-   $$377 = $44 ? $45 : $38;
-   $$$0269 = $44 ? 1 : $$0269;
-   $isdigittmp$ = $44 ? $isdigittmp : -1;
-   $$0253 = $isdigittmp$;$$1270 = $$$0269;$storemerge = $$377;
-  } else {
-   $$0253 = -1;$$1270 = $$0269;$storemerge = $38;
-  }
-  HEAP32[$5>>2] = $storemerge;
-  $46 = HEAP8[$storemerge>>0]|0;
-  $47 = $46 << 24 >> 24;
-  $48 = (($47) + -32)|0;
-  $49 = ($48>>>0)<(32);
-  L24: do {
-   if ($49) {
-    $$0262311 = 0;$329 = $46;$51 = $48;$storemerge273310 = $storemerge;
-    while(1) {
-     $50 = 1 << $51;
-     $52 = $50 & 75913;
-     $53 = ($52|0)==(0);
-     if ($53) {
-      $$0262$lcssa = $$0262311;$$lcssa295 = $329;$62 = $storemerge273310;
-      break L24;
-     }
-     $54 = $50 | $$0262311;
-     $55 = ((($storemerge273310)) + 1|0);
-     HEAP32[$5>>2] = $55;
-     $56 = HEAP8[$55>>0]|0;
-     $57 = $56 << 24 >> 24;
-     $58 = (($57) + -32)|0;
-     $59 = ($58>>>0)<(32);
-     if ($59) {
-      $$0262311 = $54;$329 = $56;$51 = $58;$storemerge273310 = $55;
-     } else {
-      $$0262$lcssa = $54;$$lcssa295 = $56;$62 = $55;
-      break;
-     }
-    }
-   } else {
-    $$0262$lcssa = 0;$$lcssa295 = $46;$62 = $storemerge;
-   }
-  } while(0);
-  $60 = ($$lcssa295<<24>>24)==(42);
-  if ($60) {
-   $61 = ((($62)) + 1|0);
-   $63 = HEAP8[$61>>0]|0;
-   $64 = $63 << 24 >> 24;
-   $isdigittmp276 = (($64) + -48)|0;
-   $isdigit277 = ($isdigittmp276>>>0)<(10);
-   if ($isdigit277) {
-    $65 = ((($62)) + 2|0);
-    $66 = HEAP8[$65>>0]|0;
-    $67 = ($66<<24>>24)==(36);
-    if ($67) {
-     $68 = (($4) + ($isdigittmp276<<2)|0);
-     HEAP32[$68>>2] = 10;
-     $69 = HEAP8[$61>>0]|0;
-     $70 = $69 << 24 >> 24;
-     $71 = (($70) + -48)|0;
-     $72 = (($3) + ($71<<3)|0);
-     $73 = $72;
-     $74 = $73;
-     $75 = HEAP32[$74>>2]|0;
-     $76 = (($73) + 4)|0;
-     $77 = $76;
-     $78 = HEAP32[$77>>2]|0;
-     $79 = ((($62)) + 3|0);
-     $$0259 = $75;$$2271 = 1;$storemerge278 = $79;
-    } else {
-     label = 23;
-    }
-   } else {
-    label = 23;
-   }
-   if ((label|0) == 23) {
-    label = 0;
-    $80 = ($$1270|0)==(0);
-    if (!($80)) {
-     $$0 = -1;
-     break;
-    }
-    if ($10) {
-     $arglist_current = HEAP32[$2>>2]|0;
-     $81 = $arglist_current;
-     $82 = ((0) + 4|0);
-     $expanded4 = $82;
-     $expanded = (($expanded4) - 1)|0;
-     $83 = (($81) + ($expanded))|0;
-     $84 = ((0) + 4|0);
-     $expanded8 = $84;
-     $expanded7 = (($expanded8) - 1)|0;
-     $expanded6 = $expanded7 ^ -1;
-     $85 = $83 & $expanded6;
-     $86 = $85;
-     $87 = HEAP32[$86>>2]|0;
-     $arglist_next = ((($86)) + 4|0);
-     HEAP32[$2>>2] = $arglist_next;
-     $$0259 = $87;$$2271 = 0;$storemerge278 = $61;
-    } else {
-     $$0259 = 0;$$2271 = 0;$storemerge278 = $61;
-    }
-   }
-   HEAP32[$5>>2] = $storemerge278;
-   $88 = ($$0259|0)<(0);
-   $89 = $$0262$lcssa | 8192;
-   $90 = (0 - ($$0259))|0;
-   $$$0262 = $88 ? $89 : $$0262$lcssa;
-   $$$0259 = $88 ? $90 : $$0259;
-   $$1260 = $$$0259;$$1263 = $$$0262;$$3272 = $$2271;$94 = $storemerge278;
-  } else {
-   $91 = (_getint($5)|0);
-   $92 = ($91|0)<(0);
-   if ($92) {
-    $$0 = -1;
-    break;
-   }
-   $$pre346 = HEAP32[$5>>2]|0;
-   $$1260 = $91;$$1263 = $$0262$lcssa;$$3272 = $$1270;$94 = $$pre346;
-  }
-  $93 = HEAP8[$94>>0]|0;
-  $95 = ($93<<24>>24)==(46);
-  do {
-   if ($95) {
-    $96 = ((($94)) + 1|0);
-    $97 = HEAP8[$96>>0]|0;
-    $98 = ($97<<24>>24)==(42);
-    if (!($98)) {
-     $125 = ((($94)) + 1|0);
-     HEAP32[$5>>2] = $125;
-     $126 = (_getint($5)|0);
-     $$pre347$pre = HEAP32[$5>>2]|0;
-     $$0254 = $126;$$pre347 = $$pre347$pre;
-     break;
-    }
-    $99 = ((($94)) + 2|0);
-    $100 = HEAP8[$99>>0]|0;
-    $101 = $100 << 24 >> 24;
-    $isdigittmp274 = (($101) + -48)|0;
-    $isdigit275 = ($isdigittmp274>>>0)<(10);
-    if ($isdigit275) {
-     $102 = ((($94)) + 3|0);
-     $103 = HEAP8[$102>>0]|0;
-     $104 = ($103<<24>>24)==(36);
-     if ($104) {
-      $105 = (($4) + ($isdigittmp274<<2)|0);
-      HEAP32[$105>>2] = 10;
-      $106 = HEAP8[$99>>0]|0;
-      $107 = $106 << 24 >> 24;
-      $108 = (($107) + -48)|0;
-      $109 = (($3) + ($108<<3)|0);
-      $110 = $109;
-      $111 = $110;
-      $112 = HEAP32[$111>>2]|0;
-      $113 = (($110) + 4)|0;
-      $114 = $113;
-      $115 = HEAP32[$114>>2]|0;
-      $116 = ((($94)) + 4|0);
-      HEAP32[$5>>2] = $116;
-      $$0254 = $112;$$pre347 = $116;
-      break;
-     }
-    }
-    $117 = ($$3272|0)==(0);
-    if (!($117)) {
-     $$0 = -1;
-     break L1;
-    }
-    if ($10) {
-     $arglist_current2 = HEAP32[$2>>2]|0;
-     $118 = $arglist_current2;
-     $119 = ((0) + 4|0);
-     $expanded11 = $119;
-     $expanded10 = (($expanded11) - 1)|0;
-     $120 = (($118) + ($expanded10))|0;
-     $121 = ((0) + 4|0);
-     $expanded15 = $121;
-     $expanded14 = (($expanded15) - 1)|0;
-     $expanded13 = $expanded14 ^ -1;
-     $122 = $120 & $expanded13;
-     $123 = $122;
-     $124 = HEAP32[$123>>2]|0;
-     $arglist_next3 = ((($123)) + 4|0);
-     HEAP32[$2>>2] = $arglist_next3;
-     $330 = $124;
-    } else {
-     $330 = 0;
-    }
-    HEAP32[$5>>2] = $99;
-    $$0254 = $330;$$pre347 = $99;
-   } else {
-    $$0254 = -1;$$pre347 = $94;
-   }
-  } while(0);
-  $$0252 = 0;$128 = $$pre347;
-  while(1) {
-   $127 = HEAP8[$128>>0]|0;
-   $129 = $127 << 24 >> 24;
-   $130 = (($129) + -65)|0;
-   $131 = ($130>>>0)>(57);
-   if ($131) {
-    $$0 = -1;
-    break L1;
-   }
-   $132 = ((($128)) + 1|0);
-   HEAP32[$5>>2] = $132;
-   $133 = HEAP8[$128>>0]|0;
-   $134 = $133 << 24 >> 24;
-   $135 = (($134) + -65)|0;
-   $136 = ((70255 + (($$0252*58)|0)|0) + ($135)|0);
-   $137 = HEAP8[$136>>0]|0;
-   $138 = $137&255;
-   $139 = (($138) + -1)|0;
-   $140 = ($139>>>0)<(8);
-   if ($140) {
-    $$0252 = $138;$128 = $132;
-   } else {
-    break;
-   }
-  }
-  $141 = ($137<<24>>24)==(0);
-  if ($141) {
-   $$0 = -1;
-   break;
-  }
-  $142 = ($137<<24>>24)==(19);
-  $143 = ($$0253|0)>(-1);
-  do {
-   if ($142) {
-    if ($143) {
-     $$0 = -1;
-     break L1;
-    } else {
-     label = 49;
-    }
-   } else {
-    if ($143) {
-     $144 = (($4) + ($$0253<<2)|0);
-     HEAP32[$144>>2] = $138;
-     $145 = (($3) + ($$0253<<3)|0);
-     $146 = $145;
-     $147 = $146;
-     $148 = HEAP32[$147>>2]|0;
-     $149 = (($146) + 4)|0;
-     $150 = $149;
-     $151 = HEAP32[$150>>2]|0;
-     $152 = $6;
-     $153 = $152;
-     HEAP32[$153>>2] = $148;
-     $154 = (($152) + 4)|0;
-     $155 = $154;
-     HEAP32[$155>>2] = $151;
-     label = 49;
-     break;
-    }
-    if (!($10)) {
-     $$0 = 0;
-     break L1;
-    }
-    _pop_arg($6,$138,$2);
-   }
-  } while(0);
-  if ((label|0) == 49) {
-   label = 0;
-   if (!($10)) {
-    $$0243 = 0;$$0247 = $$1248;$$0269 = $$3272;$21 = $132;
-    continue;
-   }
-  }
-  $156 = HEAP8[$128>>0]|0;
-  $157 = $156 << 24 >> 24;
-  $158 = ($$0252|0)!=(0);
-  $159 = $157 & 15;
-  $160 = ($159|0)==(3);
-  $or$cond281 = $158 & $160;
-  $161 = $157 & -33;
-  $$0235 = $or$cond281 ? $161 : $157;
-  $162 = $$1263 & 8192;
-  $163 = ($162|0)==(0);
-  $164 = $$1263 & -65537;
-  $$1263$ = $163 ? $$1263 : $164;
-  L71: do {
-   switch ($$0235|0) {
-   case 110:  {
-    $trunc = $$0252&255;
-    switch ($trunc<<24>>24) {
-    case 0:  {
-     $171 = HEAP32[$6>>2]|0;
-     HEAP32[$171>>2] = $$1248;
-     $$0243 = 0;$$0247 = $$1248;$$0269 = $$3272;$21 = $132;
-     continue L1;
-     break;
-    }
-    case 1:  {
-     $172 = HEAP32[$6>>2]|0;
-     HEAP32[$172>>2] = $$1248;
-     $$0243 = 0;$$0247 = $$1248;$$0269 = $$3272;$21 = $132;
-     continue L1;
-     break;
-    }
-    case 2:  {
-     $173 = ($$1248|0)<(0);
-     $174 = $173 << 31 >> 31;
-     $175 = HEAP32[$6>>2]|0;
-     $176 = $175;
-     $177 = $176;
-     HEAP32[$177>>2] = $$1248;
-     $178 = (($176) + 4)|0;
-     $179 = $178;
-     HEAP32[$179>>2] = $174;
-     $$0243 = 0;$$0247 = $$1248;$$0269 = $$3272;$21 = $132;
-     continue L1;
-     break;
-    }
-    case 3:  {
-     $180 = $$1248&65535;
-     $181 = HEAP32[$6>>2]|0;
-     HEAP16[$181>>1] = $180;
-     $$0243 = 0;$$0247 = $$1248;$$0269 = $$3272;$21 = $132;
-     continue L1;
-     break;
-    }
-    case 4:  {
-     $182 = $$1248&255;
-     $183 = HEAP32[$6>>2]|0;
-     HEAP8[$183>>0] = $182;
-     $$0243 = 0;$$0247 = $$1248;$$0269 = $$3272;$21 = $132;
-     continue L1;
-     break;
-    }
-    case 6:  {
-     $184 = HEAP32[$6>>2]|0;
-     HEAP32[$184>>2] = $$1248;
-     $$0243 = 0;$$0247 = $$1248;$$0269 = $$3272;$21 = $132;
-     continue L1;
-     break;
-    }
-    case 7:  {
-     $185 = ($$1248|0)<(0);
-     $186 = $185 << 31 >> 31;
-     $187 = HEAP32[$6>>2]|0;
-     $188 = $187;
-     $189 = $188;
-     HEAP32[$189>>2] = $$1248;
-     $190 = (($188) + 4)|0;
-     $191 = $190;
-     HEAP32[$191>>2] = $186;
-     $$0243 = 0;$$0247 = $$1248;$$0269 = $$3272;$21 = $132;
-     continue L1;
-     break;
-    }
-    default: {
-     $$0243 = 0;$$0247 = $$1248;$$0269 = $$3272;$21 = $132;
-     continue L1;
-    }
-    }
-    break;
-   }
-   case 112:  {
-    $192 = ($$0254>>>0)>(8);
-    $193 = $192 ? $$0254 : 8;
-    $194 = $$1263$ | 8;
-    $$1236 = 120;$$1255 = $193;$$3265 = $194;
-    label = 61;
-    break;
-   }
-   case 88: case 120:  {
-    $$1236 = $$0235;$$1255 = $$0254;$$3265 = $$1263$;
-    label = 61;
-    break;
-   }
-   case 111:  {
-    $210 = $6;
-    $211 = $210;
-    $212 = HEAP32[$211>>2]|0;
-    $213 = (($210) + 4)|0;
-    $214 = $213;
-    $215 = HEAP32[$214>>2]|0;
-    $216 = (_fmt_o($212,$215,$11)|0);
-    $217 = $$1263$ & 8;
-    $218 = ($217|0)==(0);
-    $219 = $216;
-    $220 = (($12) - ($219))|0;
-    $221 = ($$0254|0)>($220|0);
-    $222 = (($220) + 1)|0;
-    $223 = $218 | $221;
-    $$0254$$0254$ = $223 ? $$0254 : $222;
-    $$0228 = $216;$$1233 = 0;$$1238 = 70719;$$2256 = $$0254$$0254$;$$4266 = $$1263$;$248 = $212;$250 = $215;
-    label = 67;
-    break;
-   }
-   case 105: case 100:  {
-    $224 = $6;
-    $225 = $224;
-    $226 = HEAP32[$225>>2]|0;
-    $227 = (($224) + 4)|0;
-    $228 = $227;
-    $229 = HEAP32[$228>>2]|0;
-    $230 = ($229|0)<(0);
-    if ($230) {
-     $231 = (_i64Subtract(0,0,($226|0),($229|0))|0);
-     $232 = tempRet0;
-     $233 = $6;
-     $234 = $233;
-     HEAP32[$234>>2] = $231;
-     $235 = (($233) + 4)|0;
-     $236 = $235;
-     HEAP32[$236>>2] = $232;
-     $$0232 = 1;$$0237 = 70719;$242 = $231;$243 = $232;
-     label = 66;
-     break L71;
-    } else {
-     $237 = $$1263$ & 2048;
-     $238 = ($237|0)==(0);
-     $239 = $$1263$ & 1;
-     $240 = ($239|0)==(0);
-     $$ = $240 ? 70719 : (70721);
-     $$$ = $238 ? $$ : (70720);
-     $241 = $$1263$ & 2049;
-     $narrow = ($241|0)!=(0);
-     $$284$ = $narrow&1;
-     $$0232 = $$284$;$$0237 = $$$;$242 = $226;$243 = $229;
-     label = 66;
-     break L71;
-    }
-    break;
-   }
-   case 117:  {
-    $165 = $6;
-    $166 = $165;
-    $167 = HEAP32[$166>>2]|0;
-    $168 = (($165) + 4)|0;
-    $169 = $168;
-    $170 = HEAP32[$169>>2]|0;
-    $$0232 = 0;$$0237 = 70719;$242 = $167;$243 = $170;
-    label = 66;
-    break;
-   }
-   case 99:  {
-    $259 = $6;
-    $260 = $259;
-    $261 = HEAP32[$260>>2]|0;
-    $262 = (($259) + 4)|0;
-    $263 = $262;
-    $264 = HEAP32[$263>>2]|0;
-    $265 = $261&255;
-    HEAP8[$13>>0] = $265;
-    $$2 = $13;$$2234 = 0;$$2239 = 70719;$$2251 = $11;$$5 = 1;$$6268 = $164;
-    break;
-   }
-   case 109:  {
-    $266 = (___errno_location()|0);
-    $267 = HEAP32[$266>>2]|0;
-    $268 = (_strerror($267)|0);
-    $$1 = $268;
-    label = 71;
-    break;
-   }
-   case 115:  {
-    $269 = HEAP32[$6>>2]|0;
-    $270 = ($269|0)!=(0|0);
-    $271 = $270 ? $269 : 70729;
-    $$1 = $271;
-    label = 71;
-    break;
-   }
-   case 67:  {
-    $278 = $6;
-    $279 = $278;
-    $280 = HEAP32[$279>>2]|0;
-    $281 = (($278) + 4)|0;
-    $282 = $281;
-    $283 = HEAP32[$282>>2]|0;
-    HEAP32[$8>>2] = $280;
-    HEAP32[$14>>2] = 0;
-    HEAP32[$6>>2] = $8;
-    $$4258355 = -1;$331 = $8;
-    label = 75;
-    break;
-   }
-   case 83:  {
-    $$pre349 = HEAP32[$6>>2]|0;
-    $284 = ($$0254|0)==(0);
-    if ($284) {
-     _pad_674($0,32,$$1260,0,$$1263$);
-     $$0240$lcssa357 = 0;
-     label = 84;
-    } else {
-     $$4258355 = $$0254;$331 = $$pre349;
-     label = 75;
-    }
-    break;
-   }
-   case 65: case 71: case 70: case 69: case 97: case 103: case 102: case 101:  {
-    $306 = +HEAPF64[$6>>3];
-    $307 = (_fmt_fp_1233($0,$306,$$1260,$$0254,$$1263$,$$0235)|0);
-    $$0243 = $307;$$0247 = $$1248;$$0269 = $$3272;$21 = $132;
-    continue L1;
-    break;
-   }
-   default: {
-    $$2 = $21;$$2234 = 0;$$2239 = 70719;$$2251 = $11;$$5 = $$0254;$$6268 = $$1263$;
-   }
-   }
-  } while(0);
-  L95: do {
-   if ((label|0) == 61) {
-    label = 0;
-    $195 = $6;
-    $196 = $195;
-    $197 = HEAP32[$196>>2]|0;
-    $198 = (($195) + 4)|0;
-    $199 = $198;
-    $200 = HEAP32[$199>>2]|0;
-    $201 = $$1236 & 32;
-    $202 = (_fmt_x($197,$200,$11,$201)|0);
-    $203 = ($197|0)==(0);
-    $204 = ($200|0)==(0);
-    $205 = $203 & $204;
-    $206 = $$3265 & 8;
-    $207 = ($206|0)==(0);
-    $or$cond283 = $207 | $205;
-    $208 = $$1236 >> 4;
-    $209 = (70719 + ($208)|0);
-    $$289 = $or$cond283 ? 70719 : $209;
-    $$290 = $or$cond283 ? 0 : 2;
-    $$0228 = $202;$$1233 = $$290;$$1238 = $$289;$$2256 = $$1255;$$4266 = $$3265;$248 = $197;$250 = $200;
-    label = 67;
-   }
-   else if ((label|0) == 66) {
-    label = 0;
-    $244 = (_fmt_u_1230($242,$243,$11)|0);
-    $$0228 = $244;$$1233 = $$0232;$$1238 = $$0237;$$2256 = $$0254;$$4266 = $$1263$;$248 = $242;$250 = $243;
-    label = 67;
-   }
-   else if ((label|0) == 71) {
-    label = 0;
-    $272 = (_memchr($$1,0,$$0254)|0);
-    $273 = ($272|0)==(0|0);
-    $274 = $272;
-    $275 = $$1;
-    $276 = (($274) - ($275))|0;
-    $277 = (($$1) + ($$0254)|0);
-    $$3257 = $273 ? $$0254 : $276;
-    $$1250 = $273 ? $277 : $272;
-    $$2 = $$1;$$2234 = 0;$$2239 = 70719;$$2251 = $$1250;$$5 = $$3257;$$6268 = $164;
-   }
-   else if ((label|0) == 75) {
-    label = 0;
-    $$0229322 = $331;$$0240321 = 0;$$1244320 = 0;
-    while(1) {
-     $285 = HEAP32[$$0229322>>2]|0;
-     $286 = ($285|0)==(0);
-     if ($286) {
-      $$0240$lcssa = $$0240321;$$2245 = $$1244320;
-      break;
-     }
-     $287 = (_wctomb($9,$285)|0);
-     $288 = ($287|0)<(0);
-     $289 = (($$4258355) - ($$0240321))|0;
-     $290 = ($287>>>0)>($289>>>0);
-     $or$cond286 = $288 | $290;
-     if ($or$cond286) {
-      $$0240$lcssa = $$0240321;$$2245 = $287;
-      break;
-     }
-     $291 = ((($$0229322)) + 4|0);
-     $292 = (($287) + ($$0240321))|0;
-     $293 = ($$4258355>>>0)>($292>>>0);
-     if ($293) {
-      $$0229322 = $291;$$0240321 = $292;$$1244320 = $287;
-     } else {
-      $$0240$lcssa = $292;$$2245 = $287;
-      break;
-     }
-    }
-    $294 = ($$2245|0)<(0);
-    if ($294) {
-     $$0 = -1;
-     break L1;
-    }
-    _pad_674($0,32,$$1260,$$0240$lcssa,$$1263$);
-    $295 = ($$0240$lcssa|0)==(0);
-    if ($295) {
-     $$0240$lcssa357 = 0;
-     label = 84;
-    } else {
-     $$1230333 = $331;$$1241332 = 0;
-     while(1) {
-      $296 = HEAP32[$$1230333>>2]|0;
-      $297 = ($296|0)==(0);
-      if ($297) {
-       $$0240$lcssa357 = $$0240$lcssa;
-       label = 84;
-       break L95;
-      }
-      $298 = (_wctomb($9,$296)|0);
-      $299 = (($298) + ($$1241332))|0;
-      $300 = ($299|0)>($$0240$lcssa|0);
-      if ($300) {
-       $$0240$lcssa357 = $$0240$lcssa;
-       label = 84;
-       break L95;
-      }
-      $301 = ((($$1230333)) + 4|0);
-      _out_1229($0,$9,$298);
-      $302 = ($299>>>0)<($$0240$lcssa>>>0);
-      if ($302) {
-       $$1230333 = $301;$$1241332 = $299;
-      } else {
-       $$0240$lcssa357 = $$0240$lcssa;
-       label = 84;
-       break;
-      }
-     }
-    }
-   }
-  } while(0);
-  if ((label|0) == 67) {
-   label = 0;
-   $245 = ($$2256|0)>(-1);
-   $246 = $$4266 & -65537;
-   $$$4266 = $245 ? $246 : $$4266;
-   $247 = ($248|0)!=(0);
-   $249 = ($250|0)!=(0);
-   $251 = $247 | $249;
-   $252 = ($$2256|0)!=(0);
-   $or$cond = $252 | $251;
-   $253 = $$0228;
-   $254 = (($12) - ($253))|0;
-   $255 = $251 ^ 1;
-   $256 = $255&1;
-   $257 = (($256) + ($254))|0;
-   $258 = ($$2256|0)>($257|0);
-   $$2256$ = $258 ? $$2256 : $257;
-   $$2256$$$2256 = $or$cond ? $$2256$ : $$2256;
-   $$0228$ = $or$cond ? $$0228 : $11;
-   $$2 = $$0228$;$$2234 = $$1233;$$2239 = $$1238;$$2251 = $11;$$5 = $$2256$$$2256;$$6268 = $$$4266;
-  }
-  else if ((label|0) == 84) {
-   label = 0;
-   $303 = $$1263$ ^ 8192;
-   _pad_674($0,32,$$1260,$$0240$lcssa357,$303);
-   $304 = ($$1260|0)>($$0240$lcssa357|0);
-   $305 = $304 ? $$1260 : $$0240$lcssa357;
-   $$0243 = $305;$$0247 = $$1248;$$0269 = $$3272;$21 = $132;
-   continue;
-  }
-  $308 = $$2251;
-  $309 = $$2;
-  $310 = (($308) - ($309))|0;
-  $311 = ($$5|0)<($310|0);
-  $$$5 = $311 ? $310 : $$5;
-  $312 = (($$$5) + ($$2234))|0;
-  $313 = ($$1260|0)<($312|0);
-  $$2261 = $313 ? $312 : $$1260;
-  _pad_674($0,32,$$2261,$312,$$6268);
-  _out_1229($0,$$2239,$$2234);
-  $314 = $$6268 ^ 65536;
-  _pad_674($0,48,$$2261,$312,$314);
-  _pad_674($0,48,$$$5,$310,0);
-  _out_1229($0,$$2,$310);
-  $315 = $$6268 ^ 8192;
-  _pad_674($0,32,$$2261,$312,$315);
-  $$0243 = $$2261;$$0247 = $$1248;$$0269 = $$3272;$21 = $132;
- }
- L114: do {
-  if ((label|0) == 87) {
-   $316 = ($0|0)==(0|0);
-   if ($316) {
-    $317 = ($$0269|0)==(0);
-    if ($317) {
-     $$0 = 0;
-    } else {
-     $$2242305 = 1;
-     while(1) {
-      $318 = (($4) + ($$2242305<<2)|0);
-      $319 = HEAP32[$318>>2]|0;
-      $320 = ($319|0)==(0);
-      if ($320) {
-       $$3303 = $$2242305;
-       break;
-      }
-      $321 = (($3) + ($$2242305<<3)|0);
-      _pop_arg($321,$319,$2);
-      $322 = (($$2242305) + 1)|0;
-      $323 = ($322|0)<(10);
-      if ($323) {
-       $$2242305 = $322;
-      } else {
-       $$0 = 1;
-       break L114;
-      }
-     }
-     while(1) {
-      $326 = (($4) + ($$3303<<2)|0);
-      $327 = HEAP32[$326>>2]|0;
-      $328 = ($327|0)==(0);
-      $325 = (($$3303) + 1)|0;
-      if (!($328)) {
-       $$0 = -1;
-       break L114;
-      }
-      $324 = ($325|0)<(10);
-      if ($324) {
-       $$3303 = $325;
-      } else {
-       $$0 = 1;
-       break;
-      }
-     }
-    }
-   } else {
-    $$0 = $$1248;
-   }
-  }
- } while(0);
- STACKTOP = sp;return ($$0|0);
-}
-function ___lockfile($0) {
- $0 = $0|0;
- var label = 0, sp = 0;
- sp = STACKTOP;
- return 0;
-}
-function ___unlockfile($0) {
- $0 = $0|0;
- var label = 0, sp = 0;
- sp = STACKTOP;
- return;
-}
-function _out_1229($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- $3 = HEAP32[$0>>2]|0;
- $4 = $3 & 32;
- $5 = ($4|0)==(0);
- if ($5) {
-  (___fwritex($1,$2,$0)|0);
- }
- return;
-}
-function _getint($0) {
- $0 = $0|0;
- var $$0$lcssa = 0, $$06 = 0, $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $isdigit = 0, $isdigit5 = 0, $isdigittmp = 0, $isdigittmp4 = 0, $isdigittmp7 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- $1 = HEAP32[$0>>2]|0;
- $2 = HEAP8[$1>>0]|0;
- $3 = $2 << 24 >> 24;
- $isdigittmp4 = (($3) + -48)|0;
- $isdigit5 = ($isdigittmp4>>>0)<(10);
- if ($isdigit5) {
-  $$06 = 0;$7 = $1;$isdigittmp7 = $isdigittmp4;
-  while(1) {
-   $4 = ($$06*10)|0;
-   $5 = (($isdigittmp7) + ($4))|0;
-   $6 = ((($7)) + 1|0);
-   HEAP32[$0>>2] = $6;
-   $8 = HEAP8[$6>>0]|0;
-   $9 = $8 << 24 >> 24;
-   $isdigittmp = (($9) + -48)|0;
-   $isdigit = ($isdigittmp>>>0)<(10);
-   if ($isdigit) {
-    $$06 = $5;$7 = $6;$isdigittmp7 = $isdigittmp;
-   } else {
-    $$0$lcssa = $5;
-    break;
-   }
-  }
- } else {
-  $$0$lcssa = 0;
- }
- return ($$0$lcssa|0);
-}
-function _pop_arg($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$mask = 0, $$mask31 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0.0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0;
- var $116 = 0.0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0;
- var $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0;
- var $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0;
- var $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0;
- var $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $arglist_current = 0, $arglist_current11 = 0, $arglist_current14 = 0, $arglist_current17 = 0;
- var $arglist_current2 = 0, $arglist_current20 = 0, $arglist_current23 = 0, $arglist_current26 = 0, $arglist_current5 = 0, $arglist_current8 = 0, $arglist_next = 0, $arglist_next12 = 0, $arglist_next15 = 0, $arglist_next18 = 0, $arglist_next21 = 0, $arglist_next24 = 0, $arglist_next27 = 0, $arglist_next3 = 0, $arglist_next6 = 0, $arglist_next9 = 0, $expanded = 0, $expanded28 = 0, $expanded30 = 0, $expanded31 = 0;
- var $expanded32 = 0, $expanded34 = 0, $expanded35 = 0, $expanded37 = 0, $expanded38 = 0, $expanded39 = 0, $expanded41 = 0, $expanded42 = 0, $expanded44 = 0, $expanded45 = 0, $expanded46 = 0, $expanded48 = 0, $expanded49 = 0, $expanded51 = 0, $expanded52 = 0, $expanded53 = 0, $expanded55 = 0, $expanded56 = 0, $expanded58 = 0, $expanded59 = 0;
- var $expanded60 = 0, $expanded62 = 0, $expanded63 = 0, $expanded65 = 0, $expanded66 = 0, $expanded67 = 0, $expanded69 = 0, $expanded70 = 0, $expanded72 = 0, $expanded73 = 0, $expanded74 = 0, $expanded76 = 0, $expanded77 = 0, $expanded79 = 0, $expanded80 = 0, $expanded81 = 0, $expanded83 = 0, $expanded84 = 0, $expanded86 = 0, $expanded87 = 0;
- var $expanded88 = 0, $expanded90 = 0, $expanded91 = 0, $expanded93 = 0, $expanded94 = 0, $expanded95 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- $3 = ($1>>>0)>(20);
- L1: do {
-  if (!($3)) {
-   do {
-    switch ($1|0) {
-    case 9:  {
-     $arglist_current = HEAP32[$2>>2]|0;
-     $4 = $arglist_current;
-     $5 = ((0) + 4|0);
-     $expanded28 = $5;
-     $expanded = (($expanded28) - 1)|0;
-     $6 = (($4) + ($expanded))|0;
-     $7 = ((0) + 4|0);
-     $expanded32 = $7;
-     $expanded31 = (($expanded32) - 1)|0;
-     $expanded30 = $expanded31 ^ -1;
-     $8 = $6 & $expanded30;
-     $9 = $8;
-     $10 = HEAP32[$9>>2]|0;
-     $arglist_next = ((($9)) + 4|0);
-     HEAP32[$2>>2] = $arglist_next;
-     HEAP32[$0>>2] = $10;
-     break L1;
-     break;
-    }
-    case 10:  {
-     $arglist_current2 = HEAP32[$2>>2]|0;
-     $11 = $arglist_current2;
-     $12 = ((0) + 4|0);
-     $expanded35 = $12;
-     $expanded34 = (($expanded35) - 1)|0;
-     $13 = (($11) + ($expanded34))|0;
-     $14 = ((0) + 4|0);
-     $expanded39 = $14;
-     $expanded38 = (($expanded39) - 1)|0;
-     $expanded37 = $expanded38 ^ -1;
-     $15 = $13 & $expanded37;
-     $16 = $15;
-     $17 = HEAP32[$16>>2]|0;
-     $arglist_next3 = ((($16)) + 4|0);
-     HEAP32[$2>>2] = $arglist_next3;
-     $18 = ($17|0)<(0);
-     $19 = $18 << 31 >> 31;
-     $20 = $0;
-     $21 = $20;
-     HEAP32[$21>>2] = $17;
-     $22 = (($20) + 4)|0;
-     $23 = $22;
-     HEAP32[$23>>2] = $19;
-     break L1;
-     break;
-    }
-    case 11:  {
-     $arglist_current5 = HEAP32[$2>>2]|0;
-     $24 = $arglist_current5;
-     $25 = ((0) + 4|0);
-     $expanded42 = $25;
-     $expanded41 = (($expanded42) - 1)|0;
-     $26 = (($24) + ($expanded41))|0;
-     $27 = ((0) + 4|0);
-     $expanded46 = $27;
-     $expanded45 = (($expanded46) - 1)|0;
-     $expanded44 = $expanded45 ^ -1;
-     $28 = $26 & $expanded44;
-     $29 = $28;
-     $30 = HEAP32[$29>>2]|0;
-     $arglist_next6 = ((($29)) + 4|0);
-     HEAP32[$2>>2] = $arglist_next6;
-     $31 = $0;
-     $32 = $31;
-     HEAP32[$32>>2] = $30;
-     $33 = (($31) + 4)|0;
-     $34 = $33;
-     HEAP32[$34>>2] = 0;
-     break L1;
-     break;
-    }
-    case 12:  {
-     $arglist_current8 = HEAP32[$2>>2]|0;
-     $35 = $arglist_current8;
-     $36 = ((0) + 8|0);
-     $expanded49 = $36;
-     $expanded48 = (($expanded49) - 1)|0;
-     $37 = (($35) + ($expanded48))|0;
-     $38 = ((0) + 8|0);
-     $expanded53 = $38;
-     $expanded52 = (($expanded53) - 1)|0;
-     $expanded51 = $expanded52 ^ -1;
-     $39 = $37 & $expanded51;
-     $40 = $39;
-     $41 = $40;
-     $42 = $41;
-     $43 = HEAP32[$42>>2]|0;
-     $44 = (($41) + 4)|0;
-     $45 = $44;
-     $46 = HEAP32[$45>>2]|0;
-     $arglist_next9 = ((($40)) + 8|0);
-     HEAP32[$2>>2] = $arglist_next9;
-     $47 = $0;
-     $48 = $47;
-     HEAP32[$48>>2] = $43;
-     $49 = (($47) + 4)|0;
-     $50 = $49;
-     HEAP32[$50>>2] = $46;
-     break L1;
-     break;
-    }
-    case 13:  {
-     $arglist_current11 = HEAP32[$2>>2]|0;
-     $51 = $arglist_current11;
-     $52 = ((0) + 4|0);
-     $expanded56 = $52;
-     $expanded55 = (($expanded56) - 1)|0;
-     $53 = (($51) + ($expanded55))|0;
-     $54 = ((0) + 4|0);
-     $expanded60 = $54;
-     $expanded59 = (($expanded60) - 1)|0;
-     $expanded58 = $expanded59 ^ -1;
-     $55 = $53 & $expanded58;
-     $56 = $55;
-     $57 = HEAP32[$56>>2]|0;
-     $arglist_next12 = ((($56)) + 4|0);
-     HEAP32[$2>>2] = $arglist_next12;
-     $58 = $57&65535;
-     $59 = $58 << 16 >> 16;
-     $60 = ($59|0)<(0);
-     $61 = $60 << 31 >> 31;
-     $62 = $0;
-     $63 = $62;
-     HEAP32[$63>>2] = $59;
-     $64 = (($62) + 4)|0;
-     $65 = $64;
-     HEAP32[$65>>2] = $61;
-     break L1;
-     break;
-    }
-    case 14:  {
-     $arglist_current14 = HEAP32[$2>>2]|0;
-     $66 = $arglist_current14;
-     $67 = ((0) + 4|0);
-     $expanded63 = $67;
-     $expanded62 = (($expanded63) - 1)|0;
-     $68 = (($66) + ($expanded62))|0;
-     $69 = ((0) + 4|0);
-     $expanded67 = $69;
-     $expanded66 = (($expanded67) - 1)|0;
-     $expanded65 = $expanded66 ^ -1;
-     $70 = $68 & $expanded65;
-     $71 = $70;
-     $72 = HEAP32[$71>>2]|0;
-     $arglist_next15 = ((($71)) + 4|0);
-     HEAP32[$2>>2] = $arglist_next15;
-     $$mask31 = $72 & 65535;
-     $73 = $0;
-     $74 = $73;
-     HEAP32[$74>>2] = $$mask31;
-     $75 = (($73) + 4)|0;
-     $76 = $75;
-     HEAP32[$76>>2] = 0;
-     break L1;
-     break;
-    }
-    case 15:  {
-     $arglist_current17 = HEAP32[$2>>2]|0;
-     $77 = $arglist_current17;
-     $78 = ((0) + 4|0);
-     $expanded70 = $78;
-     $expanded69 = (($expanded70) - 1)|0;
-     $79 = (($77) + ($expanded69))|0;
-     $80 = ((0) + 4|0);
-     $expanded74 = $80;
-     $expanded73 = (($expanded74) - 1)|0;
-     $expanded72 = $expanded73 ^ -1;
-     $81 = $79 & $expanded72;
-     $82 = $81;
-     $83 = HEAP32[$82>>2]|0;
-     $arglist_next18 = ((($82)) + 4|0);
-     HEAP32[$2>>2] = $arglist_next18;
-     $84 = $83&255;
-     $85 = $84 << 24 >> 24;
-     $86 = ($85|0)<(0);
-     $87 = $86 << 31 >> 31;
-     $88 = $0;
-     $89 = $88;
-     HEAP32[$89>>2] = $85;
-     $90 = (($88) + 4)|0;
-     $91 = $90;
-     HEAP32[$91>>2] = $87;
-     break L1;
-     break;
-    }
-    case 16:  {
-     $arglist_current20 = HEAP32[$2>>2]|0;
-     $92 = $arglist_current20;
-     $93 = ((0) + 4|0);
-     $expanded77 = $93;
-     $expanded76 = (($expanded77) - 1)|0;
-     $94 = (($92) + ($expanded76))|0;
-     $95 = ((0) + 4|0);
-     $expanded81 = $95;
-     $expanded80 = (($expanded81) - 1)|0;
-     $expanded79 = $expanded80 ^ -1;
-     $96 = $94 & $expanded79;
-     $97 = $96;
-     $98 = HEAP32[$97>>2]|0;
-     $arglist_next21 = ((($97)) + 4|0);
-     HEAP32[$2>>2] = $arglist_next21;
-     $$mask = $98 & 255;
-     $99 = $0;
-     $100 = $99;
-     HEAP32[$100>>2] = $$mask;
-     $101 = (($99) + 4)|0;
-     $102 = $101;
-     HEAP32[$102>>2] = 0;
-     break L1;
-     break;
-    }
-    case 17:  {
-     $arglist_current23 = HEAP32[$2>>2]|0;
-     $103 = $arglist_current23;
-     $104 = ((0) + 8|0);
-     $expanded84 = $104;
-     $expanded83 = (($expanded84) - 1)|0;
-     $105 = (($103) + ($expanded83))|0;
-     $106 = ((0) + 8|0);
-     $expanded88 = $106;
-     $expanded87 = (($expanded88) - 1)|0;
-     $expanded86 = $expanded87 ^ -1;
-     $107 = $105 & $expanded86;
-     $108 = $107;
-     $109 = +HEAPF64[$108>>3];
-     $arglist_next24 = ((($108)) + 8|0);
-     HEAP32[$2>>2] = $arglist_next24;
-     HEAPF64[$0>>3] = $109;
-     break L1;
-     break;
-    }
-    case 18:  {
-     $arglist_current26 = HEAP32[$2>>2]|0;
-     $110 = $arglist_current26;
-     $111 = ((0) + 8|0);
-     $expanded91 = $111;
-     $expanded90 = (($expanded91) - 1)|0;
-     $112 = (($110) + ($expanded90))|0;
-     $113 = ((0) + 8|0);
-     $expanded95 = $113;
-     $expanded94 = (($expanded95) - 1)|0;
-     $expanded93 = $expanded94 ^ -1;
-     $114 = $112 & $expanded93;
-     $115 = $114;
-     $116 = +HEAPF64[$115>>3];
-     $arglist_next27 = ((($115)) + 8|0);
-     HEAP32[$2>>2] = $arglist_next27;
-     HEAPF64[$0>>3] = $116;
-     break L1;
-     break;
-    }
-    default: {
-     break L1;
-    }
-    }
-   } while(0);
-  }
- } while(0);
- return;
-}
-function _fmt_x($0,$1,$2,$3) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- var $$05$lcssa = 0, $$056 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0;
- var sp = 0;
- sp = STACKTOP;
- $4 = ($0|0)==(0);
- $5 = ($1|0)==(0);
- $6 = $4 & $5;
- if ($6) {
-  $$05$lcssa = $2;
- } else {
-  $$056 = $2;$15 = $1;$8 = $0;
-  while(1) {
-   $7 = $8 & 15;
-   $9 = (70767 + ($7)|0);
-   $10 = HEAP8[$9>>0]|0;
-   $11 = $10&255;
-   $12 = $11 | $3;
-   $13 = $12&255;
-   $14 = ((($$056)) + -1|0);
-   HEAP8[$14>>0] = $13;
-   $16 = (_bitshift64Lshr(($8|0),($15|0),4)|0);
-   $17 = tempRet0;
-   $18 = ($16|0)==(0);
-   $19 = ($17|0)==(0);
-   $20 = $18 & $19;
-   if ($20) {
-    $$05$lcssa = $14;
-    break;
-   } else {
-    $$056 = $14;$15 = $17;$8 = $16;
-   }
-  }
- }
- return ($$05$lcssa|0);
-}
-function _fmt_o($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$0$lcssa = 0, $$06 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- $3 = ($0|0)==(0);
- $4 = ($1|0)==(0);
- $5 = $3 & $4;
- if ($5) {
-  $$0$lcssa = $2;
- } else {
-  $$06 = $2;$11 = $1;$7 = $0;
-  while(1) {
-   $6 = $7&255;
-   $8 = $6 & 7;
-   $9 = $8 | 48;
-   $10 = ((($$06)) + -1|0);
-   HEAP8[$10>>0] = $9;
-   $12 = (_bitshift64Lshr(($7|0),($11|0),3)|0);
-   $13 = tempRet0;
-   $14 = ($12|0)==(0);
-   $15 = ($13|0)==(0);
-   $16 = $14 & $15;
-   if ($16) {
-    $$0$lcssa = $10;
-    break;
-   } else {
-    $$06 = $10;$11 = $13;$7 = $12;
-   }
-  }
- }
- return ($$0$lcssa|0);
-}
-function _fmt_u_1230($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$010$lcssa$off0 = 0, $$012 = 0, $$09$lcssa = 0, $$0914 = 0, $$1$lcssa = 0, $$111 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0;
- var $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- $3 = ($1>>>0)>(0);
- $4 = ($0>>>0)>(4294967295);
- $5 = ($1|0)==(0);
- $6 = $5 & $4;
- $7 = $3 | $6;
- if ($7) {
-  $$0914 = $2;$8 = $0;$9 = $1;
-  while(1) {
-   $10 = (___uremdi3(($8|0),($9|0),10,0)|0);
-   $11 = tempRet0;
-   $12 = $10&255;
-   $13 = $12 | 48;
-   $14 = ((($$0914)) + -1|0);
-   HEAP8[$14>>0] = $13;
-   $15 = (___udivdi3(($8|0),($9|0),10,0)|0);
-   $16 = tempRet0;
-   $17 = ($9>>>0)>(9);
-   $18 = ($8>>>0)>(4294967295);
-   $19 = ($9|0)==(9);
-   $20 = $19 & $18;
-   $21 = $17 | $20;
-   if ($21) {
-    $$0914 = $14;$8 = $15;$9 = $16;
-   } else {
-    break;
-   }
-  }
-  $$010$lcssa$off0 = $15;$$09$lcssa = $14;
- } else {
-  $$010$lcssa$off0 = $0;$$09$lcssa = $2;
- }
- $22 = ($$010$lcssa$off0|0)==(0);
- if ($22) {
-  $$1$lcssa = $$09$lcssa;
- } else {
-  $$012 = $$010$lcssa$off0;$$111 = $$09$lcssa;
-  while(1) {
-   $23 = (($$012>>>0) % 10)&-1;
-   $24 = $23 | 48;
-   $25 = $24&255;
-   $26 = ((($$111)) + -1|0);
-   HEAP8[$26>>0] = $25;
-   $27 = (($$012>>>0) / 10)&-1;
-   $28 = ($$012>>>0)<(10);
-   if ($28) {
-    $$1$lcssa = $26;
-    break;
-   } else {
-    $$012 = $27;$$111 = $26;
-   }
-  }
- }
- return ($$1$lcssa|0);
-}
-function _strerror($0) {
- $0 = $0|0;
- var $1 = 0, $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- $1 = (___pthread_self_105()|0);
- $2 = ((($1)) + 188|0);
- $3 = HEAP32[$2>>2]|0;
- $4 = (___strerror_l($0,$3)|0);
- return ($4|0);
-}
-function _memchr($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$0$lcssa = 0, $$035$lcssa = 0, $$035$lcssa65 = 0, $$03555 = 0, $$036$lcssa = 0, $$036$lcssa64 = 0, $$03654 = 0, $$046 = 0, $$137$lcssa = 0, $$13745 = 0, $$140 = 0, $$2 = 0, $$23839 = 0, $$3 = 0, $$lcssa = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0;
- var $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0;
- var $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $or$cond = 0, $or$cond53 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- $3 = $1 & 255;
- $4 = $0;
- $5 = $4 & 3;
- $6 = ($5|0)!=(0);
- $7 = ($2|0)!=(0);
- $or$cond53 = $7 & $6;
- L1: do {
-  if ($or$cond53) {
-   $8 = $1&255;
-   $$03555 = $0;$$03654 = $2;
-   while(1) {
-    $9 = HEAP8[$$03555>>0]|0;
-    $10 = ($9<<24>>24)==($8<<24>>24);
-    if ($10) {
-     $$035$lcssa65 = $$03555;$$036$lcssa64 = $$03654;
-     label = 6;
-     break L1;
-    }
-    $11 = ((($$03555)) + 1|0);
-    $12 = (($$03654) + -1)|0;
-    $13 = $11;
-    $14 = $13 & 3;
-    $15 = ($14|0)!=(0);
-    $16 = ($12|0)!=(0);
-    $or$cond = $16 & $15;
-    if ($or$cond) {
-     $$03555 = $11;$$03654 = $12;
-    } else {
-     $$035$lcssa = $11;$$036$lcssa = $12;$$lcssa = $16;
-     label = 5;
-     break;
-    }
-   }
-  } else {
-   $$035$lcssa = $0;$$036$lcssa = $2;$$lcssa = $7;
-   label = 5;
-  }
- } while(0);
- if ((label|0) == 5) {
-  if ($$lcssa) {
-   $$035$lcssa65 = $$035$lcssa;$$036$lcssa64 = $$036$lcssa;
-   label = 6;
-  } else {
-   $$2 = $$035$lcssa;$$3 = 0;
-  }
- }
- L8: do {
-  if ((label|0) == 6) {
-   $17 = HEAP8[$$035$lcssa65>>0]|0;
-   $18 = $1&255;
-   $19 = ($17<<24>>24)==($18<<24>>24);
-   if ($19) {
-    $$2 = $$035$lcssa65;$$3 = $$036$lcssa64;
-   } else {
-    $20 = Math_imul($3, 16843009)|0;
-    $21 = ($$036$lcssa64>>>0)>(3);
-    L11: do {
-     if ($21) {
-      $$046 = $$035$lcssa65;$$13745 = $$036$lcssa64;
-      while(1) {
-       $22 = HEAP32[$$046>>2]|0;
-       $23 = $22 ^ $20;
-       $24 = (($23) + -16843009)|0;
-       $25 = $23 & -2139062144;
-       $26 = $25 ^ -2139062144;
-       $27 = $26 & $24;
-       $28 = ($27|0)==(0);
-       if (!($28)) {
-        break;
-       }
-       $29 = ((($$046)) + 4|0);
-       $30 = (($$13745) + -4)|0;
-       $31 = ($30>>>0)>(3);
-       if ($31) {
-        $$046 = $29;$$13745 = $30;
-       } else {
-        $$0$lcssa = $29;$$137$lcssa = $30;
-        label = 11;
-        break L11;
-       }
-      }
-      $$140 = $$046;$$23839 = $$13745;
-     } else {
-      $$0$lcssa = $$035$lcssa65;$$137$lcssa = $$036$lcssa64;
-      label = 11;
-     }
-    } while(0);
-    if ((label|0) == 11) {
-     $32 = ($$137$lcssa|0)==(0);
-     if ($32) {
-      $$2 = $$0$lcssa;$$3 = 0;
-      break;
-     } else {
-      $$140 = $$0$lcssa;$$23839 = $$137$lcssa;
-     }
-    }
-    while(1) {
-     $33 = HEAP8[$$140>>0]|0;
-     $34 = ($33<<24>>24)==($18<<24>>24);
-     if ($34) {
-      $$2 = $$140;$$3 = $$23839;
-      break L8;
-     }
-     $35 = ((($$140)) + 1|0);
-     $36 = (($$23839) + -1)|0;
-     $37 = ($36|0)==(0);
-     if ($37) {
-      $$2 = $35;$$3 = 0;
-      break;
-     } else {
-      $$140 = $35;$$23839 = $36;
-     }
-    }
-   }
-  }
- } while(0);
- $38 = ($$3|0)!=(0);
- $39 = $38 ? $$2 : 0;
- return ($39|0);
-}
-function _pad_674($0,$1,$2,$3,$4) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- $4 = $4|0;
- var $$0$lcssa = 0, $$011 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $or$cond = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 256|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(256|0);
- $5 = sp;
- $6 = $4 & 73728;
- $7 = ($6|0)==(0);
- $8 = ($2|0)>($3|0);
- $or$cond = $8 & $7;
- if ($or$cond) {
-  $9 = (($2) - ($3))|0;
-  $10 = ($9>>>0)<(256);
-  $11 = $10 ? $9 : 256;
-  _memset(($5|0),($1|0),($11|0))|0;
-  $12 = ($9>>>0)>(255);
-  if ($12) {
-   $13 = (($2) - ($3))|0;
-   $$011 = $9;
-   while(1) {
-    _out_1229($0,$5,256);
-    $14 = (($$011) + -256)|0;
-    $15 = ($14>>>0)>(255);
-    if ($15) {
-     $$011 = $14;
-    } else {
-     break;
-    }
-   }
-   $16 = $13 & 255;
-   $$0$lcssa = $16;
-  } else {
-   $$0$lcssa = $9;
-  }
-  _out_1229($0,$5,$$0$lcssa);
- }
- STACKTOP = sp;return;
-}
-function _wctomb($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $$0 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- $2 = ($0|0)==(0|0);
- if ($2) {
-  $$0 = 0;
- } else {
-  $3 = (_wcrtomb($0,$1,0)|0);
-  $$0 = $3;
- }
- return ($$0|0);
-}
-function _fmt_fp_1233($0,$1,$2,$3,$4,$5) {
- $0 = $0|0;
- $1 = +$1;
- $2 = $2|0;
- $3 = $3|0;
- $4 = $4|0;
- $5 = $5|0;
- var $$ = 0, $$$ = 0, $$$$559 = 0.0, $$$3484 = 0, $$$3484691 = 0, $$$3484692 = 0, $$$3501 = 0, $$$4502 = 0, $$$542 = 0.0, $$$559 = 0.0, $$0 = 0, $$0463$lcssa = 0, $$0463584 = 0, $$0464594 = 0, $$0471 = 0.0, $$0479 = 0, $$0487642 = 0, $$0488 = 0, $$0488653 = 0, $$0488655 = 0;
- var $$0496$$9 = 0, $$0497654 = 0, $$0498 = 0, $$0509582 = 0.0, $$0510 = 0, $$0511 = 0, $$0514637 = 0, $$0520 = 0, $$0521 = 0, $$0521$ = 0, $$0523 = 0, $$0525 = 0, $$0527 = 0, $$0527629 = 0, $$0527631 = 0, $$0530636 = 0, $$1465 = 0, $$1467 = 0.0, $$1469 = 0.0, $$1472 = 0.0;
- var $$1480 = 0, $$1482$lcssa = 0, $$1482661 = 0, $$1489641 = 0, $$1499$lcssa = 0, $$1499660 = 0, $$1508583 = 0, $$1512$lcssa = 0, $$1512607 = 0, $$1515 = 0, $$1524 = 0, $$1526 = 0, $$1528614 = 0, $$1531$lcssa = 0, $$1531630 = 0, $$1598 = 0, $$2 = 0, $$2473 = 0.0, $$2476 = 0, $$2476$$547 = 0;
- var $$2476$$549 = 0, $$2483$ph = 0, $$2500 = 0, $$2513 = 0, $$2516618 = 0, $$2529 = 0, $$2532617 = 0, $$3 = 0.0, $$3477 = 0, $$3484$lcssa = 0, $$3484648 = 0, $$3501$lcssa = 0, $$3501647 = 0, $$3533613 = 0, $$4 = 0.0, $$4478$lcssa = 0, $$4478590 = 0, $$4492 = 0, $$4502 = 0, $$4518 = 0;
- var $$5$lcssa = 0, $$534$ = 0, $$539 = 0, $$539$ = 0, $$542 = 0.0, $$546 = 0, $$548 = 0, $$5486$lcssa = 0, $$5486623 = 0, $$5493597 = 0, $$5519$ph = 0, $$555 = 0, $$556 = 0, $$559 = 0.0, $$5602 = 0, $$6 = 0, $$6494589 = 0, $$7495601 = 0, $$7505 = 0, $$7505$ = 0;
- var $$7505$ph = 0, $$8 = 0, $$9$ph = 0, $$lcssa673 = 0, $$neg = 0, $$neg567 = 0, $$pn = 0, $$pn566 = 0, $$pr = 0, $$pr564 = 0, $$pre = 0, $$pre$phi690Z2D = 0, $$pre689 = 0, $$sink545$lcssa = 0, $$sink545622 = 0, $$sink562 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0;
- var $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0.0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0.0, $117 = 0.0, $118 = 0.0, $119 = 0, $12 = 0, $120 = 0;
- var $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0, $136 = 0, $137 = 0, $138 = 0, $139 = 0;
- var $14 = 0.0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0, $152 = 0, $153 = 0, $154 = 0, $155 = 0, $156 = 0, $157 = 0;
- var $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0, $170 = 0, $171 = 0, $172 = 0, $173 = 0, $174 = 0, $175 = 0;
- var $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0, $188 = 0, $189 = 0, $19 = 0, $190 = 0, $191 = 0, $192 = 0, $193 = 0;
- var $194 = 0, $195 = 0, $196 = 0, $197 = 0, $198 = 0, $199 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0, $204 = 0, $205 = 0, $206 = 0, $207 = 0, $208 = 0, $209 = 0, $21 = 0, $210 = 0, $211 = 0;
- var $212 = 0, $213 = 0, $214 = 0, $215 = 0, $216 = 0, $217 = 0, $218 = 0, $219 = 0, $22 = 0, $220 = 0, $221 = 0, $222 = 0, $223 = 0, $224 = 0, $225 = 0, $226 = 0, $227 = 0, $228 = 0.0, $229 = 0.0, $23 = 0;
- var $230 = 0, $231 = 0.0, $232 = 0, $233 = 0, $234 = 0, $235 = 0, $236 = 0, $237 = 0, $238 = 0, $239 = 0, $24 = 0, $240 = 0, $241 = 0, $242 = 0, $243 = 0, $244 = 0, $245 = 0, $246 = 0, $247 = 0, $248 = 0;
- var $249 = 0, $25 = 0, $250 = 0, $251 = 0, $252 = 0, $253 = 0, $254 = 0, $255 = 0, $256 = 0, $257 = 0, $258 = 0, $259 = 0, $26 = 0, $260 = 0, $261 = 0, $262 = 0, $263 = 0, $264 = 0, $265 = 0, $266 = 0;
- var $267 = 0, $268 = 0, $269 = 0, $27 = 0, $270 = 0, $271 = 0, $272 = 0, $273 = 0, $274 = 0, $275 = 0, $276 = 0, $277 = 0, $278 = 0, $279 = 0, $28 = 0, $280 = 0, $281 = 0, $282 = 0, $283 = 0, $284 = 0;
- var $285 = 0, $286 = 0, $287 = 0, $288 = 0, $289 = 0, $29 = 0, $290 = 0, $291 = 0, $292 = 0, $293 = 0, $294 = 0, $295 = 0, $296 = 0, $297 = 0, $298 = 0, $299 = 0, $30 = 0, $300 = 0, $301 = 0, $302 = 0;
- var $303 = 0, $304 = 0, $305 = 0, $306 = 0, $307 = 0, $308 = 0, $309 = 0, $31 = 0, $310 = 0, $311 = 0, $312 = 0, $313 = 0, $314 = 0, $315 = 0, $316 = 0, $317 = 0, $318 = 0, $319 = 0, $32 = 0, $320 = 0;
- var $321 = 0, $322 = 0, $323 = 0, $324 = 0, $325 = 0, $326 = 0, $327 = 0, $328 = 0, $329 = 0, $33 = 0, $330 = 0, $331 = 0, $332 = 0, $333 = 0, $334 = 0, $335 = 0, $336 = 0, $337 = 0, $338 = 0, $339 = 0;
- var $34 = 0, $340 = 0, $341 = 0, $342 = 0, $343 = 0, $344 = 0, $345 = 0, $346 = 0, $347 = 0, $348 = 0, $349 = 0, $35 = 0.0, $350 = 0, $351 = 0, $352 = 0, $353 = 0, $354 = 0, $355 = 0, $356 = 0, $357 = 0;
- var $358 = 0, $359 = 0, $36 = 0.0, $360 = 0, $361 = 0, $362 = 0, $363 = 0, $364 = 0, $365 = 0, $366 = 0, $367 = 0, $368 = 0, $369 = 0, $37 = 0, $370 = 0, $371 = 0, $372 = 0, $373 = 0, $374 = 0, $375 = 0;
- var $376 = 0, $377 = 0, $378 = 0, $379 = 0, $38 = 0, $380 = 0, $381 = 0, $382 = 0, $383 = 0, $384 = 0, $385 = 0, $386 = 0, $387 = 0, $388 = 0, $39 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0;
- var $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $50 = 0, $51 = 0.0, $52 = 0, $53 = 0, $54 = 0, $55 = 0.0, $56 = 0.0, $57 = 0.0, $58 = 0.0, $59 = 0.0, $6 = 0, $60 = 0.0, $61 = 0, $62 = 0, $63 = 0;
- var $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0;
- var $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0.0, $88 = 0.0, $89 = 0.0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $exitcond = 0;
- var $narrow = 0, $not$ = 0, $notlhs = 0, $notrhs = 0, $or$cond = 0, $or$cond3$not = 0, $or$cond537 = 0, $or$cond541 = 0, $or$cond544 = 0, $or$cond554 = 0, $or$cond6 = 0, $scevgep684 = 0, $scevgep684685 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 560|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(560|0);
- $6 = sp + 8|0;
- $7 = sp;
- $8 = sp + 524|0;
- $9 = $8;
- $10 = sp + 512|0;
- HEAP32[$7>>2] = 0;
- $11 = ((($10)) + 12|0);
- (___DOUBLE_BITS_675($1)|0);
- $12 = tempRet0;
- $13 = ($12|0)<(0);
- if ($13) {
-  $14 = -$1;
-  $$0471 = $14;$$0520 = 1;$$0521 = 70736;
- } else {
-  $15 = $4 & 2048;
-  $16 = ($15|0)==(0);
-  $17 = $4 & 1;
-  $18 = ($17|0)==(0);
-  $$ = $18 ? (70737) : (70742);
-  $$$ = $16 ? $$ : (70739);
-  $19 = $4 & 2049;
-  $narrow = ($19|0)!=(0);
-  $$534$ = $narrow&1;
-  $$0471 = $1;$$0520 = $$534$;$$0521 = $$$;
- }
- (___DOUBLE_BITS_675($$0471)|0);
- $20 = tempRet0;
- $21 = $20 & 2146435072;
- $22 = ($21>>>0)<(2146435072);
- $23 = (0)<(0);
- $24 = ($21|0)==(2146435072);
- $25 = $24 & $23;
- $26 = $22 | $25;
- do {
-  if ($26) {
-   $35 = (+_frexpl($$0471,$7));
-   $36 = $35 * 2.0;
-   $37 = $36 != 0.0;
-   if ($37) {
-    $38 = HEAP32[$7>>2]|0;
-    $39 = (($38) + -1)|0;
-    HEAP32[$7>>2] = $39;
-   }
-   $40 = $5 | 32;
-   $41 = ($40|0)==(97);
-   if ($41) {
-    $42 = $5 & 32;
-    $43 = ($42|0)==(0);
-    $44 = ((($$0521)) + 9|0);
-    $$0521$ = $43 ? $$0521 : $44;
-    $45 = $$0520 | 2;
-    $46 = ($3>>>0)>(11);
-    $47 = (12 - ($3))|0;
-    $48 = ($47|0)==(0);
-    $49 = $46 | $48;
-    do {
-     if ($49) {
-      $$1472 = $36;
-     } else {
-      $$0509582 = 8.0;$$1508583 = $47;
-      while(1) {
-       $50 = (($$1508583) + -1)|0;
-       $51 = $$0509582 * 16.0;
-       $52 = ($50|0)==(0);
-       if ($52) {
-        break;
-       } else {
-        $$0509582 = $51;$$1508583 = $50;
-       }
-      }
-      $53 = HEAP8[$$0521$>>0]|0;
-      $54 = ($53<<24>>24)==(45);
-      if ($54) {
-       $55 = -$36;
-       $56 = $55 - $51;
-       $57 = $51 + $56;
-       $58 = -$57;
-       $$1472 = $58;
-       break;
-      } else {
-       $59 = $36 + $51;
-       $60 = $59 - $51;
-       $$1472 = $60;
-       break;
-      }
-     }
-    } while(0);
-    $61 = HEAP32[$7>>2]|0;
-    $62 = ($61|0)<(0);
-    $63 = (0 - ($61))|0;
-    $64 = $62 ? $63 : $61;
-    $65 = ($64|0)<(0);
-    $66 = $65 << 31 >> 31;
-    $67 = (_fmt_u_1230($64,$66,$11)|0);
-    $68 = ($67|0)==($11|0);
-    if ($68) {
-     $69 = ((($10)) + 11|0);
-     HEAP8[$69>>0] = 48;
-     $$0511 = $69;
-    } else {
-     $$0511 = $67;
-    }
-    $70 = $61 >> 31;
-    $71 = $70 & 2;
-    $72 = (($71) + 43)|0;
-    $73 = $72&255;
-    $74 = ((($$0511)) + -1|0);
-    HEAP8[$74>>0] = $73;
-    $75 = (($5) + 15)|0;
-    $76 = $75&255;
-    $77 = ((($$0511)) + -2|0);
-    HEAP8[$77>>0] = $76;
-    $notrhs = ($3|0)<(1);
-    $78 = $4 & 8;
-    $79 = ($78|0)==(0);
-    $$0523 = $8;$$2473 = $$1472;
-    while(1) {
-     $80 = (~~(($$2473)));
-     $81 = (70767 + ($80)|0);
-     $82 = HEAP8[$81>>0]|0;
-     $83 = $82&255;
-     $84 = $83 | $42;
-     $85 = $84&255;
-     $86 = ((($$0523)) + 1|0);
-     HEAP8[$$0523>>0] = $85;
-     $87 = (+($80|0));
-     $88 = $$2473 - $87;
-     $89 = $88 * 16.0;
-     $90 = $86;
-     $91 = (($90) - ($9))|0;
-     $92 = ($91|0)==(1);
-     if ($92) {
-      $notlhs = $89 == 0.0;
-      $or$cond3$not = $notrhs & $notlhs;
-      $or$cond = $79 & $or$cond3$not;
-      if ($or$cond) {
-       $$1524 = $86;
-      } else {
-       $93 = ((($$0523)) + 2|0);
-       HEAP8[$86>>0] = 46;
-       $$1524 = $93;
-      }
-     } else {
-      $$1524 = $86;
-     }
-     $94 = $89 != 0.0;
-     if ($94) {
-      $$0523 = $$1524;$$2473 = $89;
-     } else {
-      break;
-     }
-    }
-    $95 = ($3|0)!=(0);
-    $96 = $77;
-    $97 = $11;
-    $98 = $$1524;
-    $99 = (($98) - ($9))|0;
-    $100 = (($97) - ($96))|0;
-    $101 = (($99) + -2)|0;
-    $102 = ($101|0)<($3|0);
-    $or$cond537 = $95 & $102;
-    $103 = (($3) + 2)|0;
-    $$pn = $or$cond537 ? $103 : $99;
-    $$0525 = (($100) + ($45))|0;
-    $104 = (($$0525) + ($$pn))|0;
-    _pad_674($0,32,$2,$104,$4);
-    _out_1229($0,$$0521$,$45);
-    $105 = $4 ^ 65536;
-    _pad_674($0,48,$2,$104,$105);
-    _out_1229($0,$8,$99);
-    $106 = (($$pn) - ($99))|0;
-    _pad_674($0,48,$106,0,0);
-    _out_1229($0,$77,$100);
-    $107 = $4 ^ 8192;
-    _pad_674($0,32,$2,$104,$107);
-    $$sink562 = $104;
-    break;
-   }
-   $108 = ($3|0)<(0);
-   $$539 = $108 ? 6 : $3;
-   if ($37) {
-    $109 = $36 * 268435456.0;
-    $110 = HEAP32[$7>>2]|0;
-    $111 = (($110) + -28)|0;
-    HEAP32[$7>>2] = $111;
-    $$3 = $109;$$pr = $111;
-   } else {
-    $$pre = HEAP32[$7>>2]|0;
-    $$3 = $36;$$pr = $$pre;
-   }
-   $112 = ($$pr|0)<(0);
-   $113 = ((($6)) + 288|0);
-   $$556 = $112 ? $6 : $113;
-   $$0498 = $$556;$$4 = $$3;
-   while(1) {
-    $114 = (~~(($$4))>>>0);
-    HEAP32[$$0498>>2] = $114;
-    $115 = ((($$0498)) + 4|0);
-    $116 = (+($114>>>0));
-    $117 = $$4 - $116;
-    $118 = $117 * 1.0E+9;
-    $119 = $118 != 0.0;
-    if ($119) {
-     $$0498 = $115;$$4 = $118;
-    } else {
-     break;
-    }
-   }
-   $120 = ($$pr|0)>(0);
-   if ($120) {
-    $$1482661 = $$556;$$1499660 = $115;$122 = $$pr;
-    while(1) {
-     $121 = ($122|0)<(29);
-     $123 = $121 ? $122 : 29;
-     $$0488653 = ((($$1499660)) + -4|0);
-     $124 = ($$0488653>>>0)<($$1482661>>>0);
-     if ($124) {
-      $$2483$ph = $$1482661;
-     } else {
-      $$0488655 = $$0488653;$$0497654 = 0;
-      while(1) {
-       $125 = HEAP32[$$0488655>>2]|0;
-       $126 = (_bitshift64Shl(($125|0),0,($123|0))|0);
-       $127 = tempRet0;
-       $128 = (_i64Add(($126|0),($127|0),($$0497654|0),0)|0);
-       $129 = tempRet0;
-       $130 = (___uremdi3(($128|0),($129|0),1000000000,0)|0);
-       $131 = tempRet0;
-       HEAP32[$$0488655>>2] = $130;
-       $132 = (___udivdi3(($128|0),($129|0),1000000000,0)|0);
-       $133 = tempRet0;
-       $$0488 = ((($$0488655)) + -4|0);
-       $134 = ($$0488>>>0)<($$1482661>>>0);
-       if ($134) {
-        break;
-       } else {
-        $$0488655 = $$0488;$$0497654 = $132;
-       }
-      }
-      $135 = ($132|0)==(0);
-      if ($135) {
-       $$2483$ph = $$1482661;
-      } else {
-       $136 = ((($$1482661)) + -4|0);
-       HEAP32[$136>>2] = $132;
-       $$2483$ph = $136;
-      }
-     }
-     $$2500 = $$1499660;
-     while(1) {
-      $137 = ($$2500>>>0)>($$2483$ph>>>0);
-      if (!($137)) {
-       break;
-      }
-      $138 = ((($$2500)) + -4|0);
-      $139 = HEAP32[$138>>2]|0;
-      $140 = ($139|0)==(0);
-      if ($140) {
-       $$2500 = $138;
-      } else {
-       break;
-      }
-     }
-     $141 = HEAP32[$7>>2]|0;
-     $142 = (($141) - ($123))|0;
-     HEAP32[$7>>2] = $142;
-     $143 = ($142|0)>(0);
-     if ($143) {
-      $$1482661 = $$2483$ph;$$1499660 = $$2500;$122 = $142;
-     } else {
-      $$1482$lcssa = $$2483$ph;$$1499$lcssa = $$2500;$$pr564 = $142;
-      break;
-     }
-    }
-   } else {
-    $$1482$lcssa = $$556;$$1499$lcssa = $115;$$pr564 = $$pr;
-   }
-   $144 = ($$pr564|0)<(0);
-   if ($144) {
-    $145 = (($$539) + 25)|0;
-    $146 = (($145|0) / 9)&-1;
-    $147 = (($146) + 1)|0;
-    $148 = ($40|0)==(102);
-    $$3484648 = $$1482$lcssa;$$3501647 = $$1499$lcssa;$150 = $$pr564;
-    while(1) {
-     $149 = (0 - ($150))|0;
-     $151 = ($149|0)<(9);
-     $152 = $151 ? $149 : 9;
-     $153 = ($$3484648>>>0)<($$3501647>>>0);
-     if ($153) {
-      $157 = 1 << $152;
-      $158 = (($157) + -1)|0;
-      $159 = 1000000000 >>> $152;
-      $$0487642 = 0;$$1489641 = $$3484648;
-      while(1) {
-       $160 = HEAP32[$$1489641>>2]|0;
-       $161 = $160 & $158;
-       $162 = $160 >>> $152;
-       $163 = (($162) + ($$0487642))|0;
-       HEAP32[$$1489641>>2] = $163;
-       $164 = Math_imul($161, $159)|0;
-       $165 = ((($$1489641)) + 4|0);
-       $166 = ($165>>>0)<($$3501647>>>0);
-       if ($166) {
-        $$0487642 = $164;$$1489641 = $165;
-       } else {
-        break;
-       }
-      }
-      $167 = HEAP32[$$3484648>>2]|0;
-      $168 = ($167|0)==(0);
-      $169 = ((($$3484648)) + 4|0);
-      $$$3484 = $168 ? $169 : $$3484648;
-      $170 = ($164|0)==(0);
-      if ($170) {
-       $$$3484692 = $$$3484;$$4502 = $$3501647;
-      } else {
-       $171 = ((($$3501647)) + 4|0);
-       HEAP32[$$3501647>>2] = $164;
-       $$$3484692 = $$$3484;$$4502 = $171;
-      }
-     } else {
-      $154 = HEAP32[$$3484648>>2]|0;
-      $155 = ($154|0)==(0);
-      $156 = ((($$3484648)) + 4|0);
-      $$$3484691 = $155 ? $156 : $$3484648;
-      $$$3484692 = $$$3484691;$$4502 = $$3501647;
-     }
-     $172 = $148 ? $$556 : $$$3484692;
-     $173 = $$4502;
-     $174 = $172;
-     $175 = (($173) - ($174))|0;
-     $176 = $175 >> 2;
-     $177 = ($176|0)>($147|0);
-     $178 = (($172) + ($147<<2)|0);
-     $$$4502 = $177 ? $178 : $$4502;
-     $179 = HEAP32[$7>>2]|0;
-     $180 = (($179) + ($152))|0;
-     HEAP32[$7>>2] = $180;
-     $181 = ($180|0)<(0);
-     if ($181) {
-      $$3484648 = $$$3484692;$$3501647 = $$$4502;$150 = $180;
-     } else {
-      $$3484$lcssa = $$$3484692;$$3501$lcssa = $$$4502;
-      break;
-     }
-    }
-   } else {
-    $$3484$lcssa = $$1482$lcssa;$$3501$lcssa = $$1499$lcssa;
-   }
-   $182 = ($$3484$lcssa>>>0)<($$3501$lcssa>>>0);
-   $183 = $$556;
-   if ($182) {
-    $184 = $$3484$lcssa;
-    $185 = (($183) - ($184))|0;
-    $186 = $185 >> 2;
-    $187 = ($186*9)|0;
-    $188 = HEAP32[$$3484$lcssa>>2]|0;
-    $189 = ($188>>>0)<(10);
-    if ($189) {
-     $$1515 = $187;
-    } else {
-     $$0514637 = $187;$$0530636 = 10;
-     while(1) {
-      $190 = ($$0530636*10)|0;
-      $191 = (($$0514637) + 1)|0;
-      $192 = ($188>>>0)<($190>>>0);
-      if ($192) {
-       $$1515 = $191;
-       break;
-      } else {
-       $$0514637 = $191;$$0530636 = $190;
-      }
-     }
-    }
-   } else {
-    $$1515 = 0;
-   }
-   $193 = ($40|0)!=(102);
-   $194 = $193 ? $$1515 : 0;
-   $195 = (($$539) - ($194))|0;
-   $196 = ($40|0)==(103);
-   $197 = ($$539|0)!=(0);
-   $198 = $197 & $196;
-   $$neg = $198 << 31 >> 31;
-   $199 = (($195) + ($$neg))|0;
-   $200 = $$3501$lcssa;
-   $201 = (($200) - ($183))|0;
-   $202 = $201 >> 2;
-   $203 = ($202*9)|0;
-   $204 = (($203) + -9)|0;
-   $205 = ($199|0)<($204|0);
-   if ($205) {
-    $206 = ((($$556)) + 4|0);
-    $207 = (($199) + 9216)|0;
-    $208 = (($207|0) / 9)&-1;
-    $209 = (($208) + -1024)|0;
-    $210 = (($206) + ($209<<2)|0);
-    $211 = (($207|0) % 9)&-1;
-    $$0527629 = (($211) + 1)|0;
-    $212 = ($$0527629|0)<(9);
-    if ($212) {
-     $$0527631 = $$0527629;$$1531630 = 10;
-     while(1) {
-      $213 = ($$1531630*10)|0;
-      $$0527 = (($$0527631) + 1)|0;
-      $exitcond = ($$0527|0)==(9);
-      if ($exitcond) {
-       $$1531$lcssa = $213;
-       break;
-      } else {
-       $$0527631 = $$0527;$$1531630 = $213;
-      }
-     }
-    } else {
-     $$1531$lcssa = 10;
-    }
-    $214 = HEAP32[$210>>2]|0;
-    $215 = (($214>>>0) % ($$1531$lcssa>>>0))&-1;
-    $216 = ($215|0)==(0);
-    $217 = ((($210)) + 4|0);
-    $218 = ($217|0)==($$3501$lcssa|0);
-    $or$cond541 = $218 & $216;
-    if ($or$cond541) {
-     $$4492 = $210;$$4518 = $$1515;$$8 = $$3484$lcssa;
-    } else {
-     $219 = (($214>>>0) / ($$1531$lcssa>>>0))&-1;
-     $220 = $219 & 1;
-     $221 = ($220|0)==(0);
-     $$542 = $221 ? 9007199254740992.0 : 9007199254740994.0;
-     $222 = (($$1531$lcssa|0) / 2)&-1;
-     $223 = ($215>>>0)<($222>>>0);
-     $224 = ($215|0)==($222|0);
-     $or$cond544 = $218 & $224;
-     $$559 = $or$cond544 ? 1.0 : 1.5;
-     $$$559 = $223 ? 0.5 : $$559;
-     $225 = ($$0520|0)==(0);
-     if ($225) {
-      $$1467 = $$$559;$$1469 = $$542;
-     } else {
-      $226 = HEAP8[$$0521>>0]|0;
-      $227 = ($226<<24>>24)==(45);
-      $228 = -$$542;
-      $229 = -$$$559;
-      $$$542 = $227 ? $228 : $$542;
-      $$$$559 = $227 ? $229 : $$$559;
-      $$1467 = $$$$559;$$1469 = $$$542;
-     }
-     $230 = (($214) - ($215))|0;
-     HEAP32[$210>>2] = $230;
-     $231 = $$1469 + $$1467;
-     $232 = $231 != $$1469;
-     if ($232) {
-      $233 = (($230) + ($$1531$lcssa))|0;
-      HEAP32[$210>>2] = $233;
-      $234 = ($233>>>0)>(999999999);
-      if ($234) {
-       $$5486623 = $$3484$lcssa;$$sink545622 = $210;
-       while(1) {
-        $235 = ((($$sink545622)) + -4|0);
-        HEAP32[$$sink545622>>2] = 0;
-        $236 = ($235>>>0)<($$5486623>>>0);
-        if ($236) {
-         $237 = ((($$5486623)) + -4|0);
-         HEAP32[$237>>2] = 0;
-         $$6 = $237;
-        } else {
-         $$6 = $$5486623;
-        }
-        $238 = HEAP32[$235>>2]|0;
-        $239 = (($238) + 1)|0;
-        HEAP32[$235>>2] = $239;
-        $240 = ($239>>>0)>(999999999);
-        if ($240) {
-         $$5486623 = $$6;$$sink545622 = $235;
-        } else {
-         $$5486$lcssa = $$6;$$sink545$lcssa = $235;
-         break;
-        }
-       }
-      } else {
-       $$5486$lcssa = $$3484$lcssa;$$sink545$lcssa = $210;
-      }
-      $241 = $$5486$lcssa;
-      $242 = (($183) - ($241))|0;
-      $243 = $242 >> 2;
-      $244 = ($243*9)|0;
-      $245 = HEAP32[$$5486$lcssa>>2]|0;
-      $246 = ($245>>>0)<(10);
-      if ($246) {
-       $$4492 = $$sink545$lcssa;$$4518 = $244;$$8 = $$5486$lcssa;
-      } else {
-       $$2516618 = $244;$$2532617 = 10;
-       while(1) {
-        $247 = ($$2532617*10)|0;
-        $248 = (($$2516618) + 1)|0;
-        $249 = ($245>>>0)<($247>>>0);
-        if ($249) {
-         $$4492 = $$sink545$lcssa;$$4518 = $248;$$8 = $$5486$lcssa;
-         break;
-        } else {
-         $$2516618 = $248;$$2532617 = $247;
-        }
-       }
-      }
-     } else {
-      $$4492 = $210;$$4518 = $$1515;$$8 = $$3484$lcssa;
-     }
-    }
-    $250 = ((($$4492)) + 4|0);
-    $251 = ($$3501$lcssa>>>0)>($250>>>0);
-    $$$3501 = $251 ? $250 : $$3501$lcssa;
-    $$5519$ph = $$4518;$$7505$ph = $$$3501;$$9$ph = $$8;
-   } else {
-    $$5519$ph = $$1515;$$7505$ph = $$3501$lcssa;$$9$ph = $$3484$lcssa;
-   }
-   $$7505 = $$7505$ph;
-   while(1) {
-    $252 = ($$7505>>>0)>($$9$ph>>>0);
-    if (!($252)) {
-     $$lcssa673 = 0;
-     break;
-    }
-    $253 = ((($$7505)) + -4|0);
-    $254 = HEAP32[$253>>2]|0;
-    $255 = ($254|0)==(0);
-    if ($255) {
-     $$7505 = $253;
-    } else {
-     $$lcssa673 = 1;
-     break;
-    }
-   }
-   $256 = (0 - ($$5519$ph))|0;
-   do {
-    if ($196) {
-     $not$ = $197 ^ 1;
-     $257 = $not$&1;
-     $$539$ = (($257) + ($$539))|0;
-     $258 = ($$539$|0)>($$5519$ph|0);
-     $259 = ($$5519$ph|0)>(-5);
-     $or$cond6 = $258 & $259;
-     if ($or$cond6) {
-      $260 = (($5) + -1)|0;
-      $$neg567 = (($$539$) + -1)|0;
-      $261 = (($$neg567) - ($$5519$ph))|0;
-      $$0479 = $260;$$2476 = $261;
-     } else {
-      $262 = (($5) + -2)|0;
-      $263 = (($$539$) + -1)|0;
-      $$0479 = $262;$$2476 = $263;
-     }
-     $264 = $4 & 8;
-     $265 = ($264|0)==(0);
-     if ($265) {
-      if ($$lcssa673) {
-       $266 = ((($$7505)) + -4|0);
-       $267 = HEAP32[$266>>2]|0;
-       $268 = ($267|0)==(0);
-       if ($268) {
-        $$2529 = 9;
-       } else {
-        $269 = (($267>>>0) % 10)&-1;
-        $270 = ($269|0)==(0);
-        if ($270) {
-         $$1528614 = 0;$$3533613 = 10;
-         while(1) {
-          $271 = ($$3533613*10)|0;
-          $272 = (($$1528614) + 1)|0;
-          $273 = (($267>>>0) % ($271>>>0))&-1;
-          $274 = ($273|0)==(0);
-          if ($274) {
-           $$1528614 = $272;$$3533613 = $271;
-          } else {
-           $$2529 = $272;
-           break;
-          }
-         }
-        } else {
-         $$2529 = 0;
-        }
-       }
-      } else {
-       $$2529 = 9;
-      }
-      $275 = $$0479 | 32;
-      $276 = ($275|0)==(102);
-      $277 = $$7505;
-      $278 = (($277) - ($183))|0;
-      $279 = $278 >> 2;
-      $280 = ($279*9)|0;
-      $281 = (($280) + -9)|0;
-      if ($276) {
-       $282 = (($281) - ($$2529))|0;
-       $283 = ($282|0)>(0);
-       $$546 = $283 ? $282 : 0;
-       $284 = ($$2476|0)<($$546|0);
-       $$2476$$547 = $284 ? $$2476 : $$546;
-       $$1480 = $$0479;$$3477 = $$2476$$547;$$pre$phi690Z2D = 0;
-       break;
-      } else {
-       $285 = (($281) + ($$5519$ph))|0;
-       $286 = (($285) - ($$2529))|0;
-       $287 = ($286|0)>(0);
-       $$548 = $287 ? $286 : 0;
-       $288 = ($$2476|0)<($$548|0);
-       $$2476$$549 = $288 ? $$2476 : $$548;
-       $$1480 = $$0479;$$3477 = $$2476$$549;$$pre$phi690Z2D = 0;
-       break;
-      }
-     } else {
-      $$1480 = $$0479;$$3477 = $$2476;$$pre$phi690Z2D = $264;
-     }
-    } else {
-     $$pre689 = $4 & 8;
-     $$1480 = $5;$$3477 = $$539;$$pre$phi690Z2D = $$pre689;
-    }
-   } while(0);
-   $289 = $$3477 | $$pre$phi690Z2D;
-   $290 = ($289|0)!=(0);
-   $291 = $290&1;
-   $292 = $$1480 | 32;
-   $293 = ($292|0)==(102);
-   if ($293) {
-    $294 = ($$5519$ph|0)>(0);
-    $295 = $294 ? $$5519$ph : 0;
-    $$2513 = 0;$$pn566 = $295;
-   } else {
-    $296 = ($$5519$ph|0)<(0);
-    $297 = $296 ? $256 : $$5519$ph;
-    $298 = ($297|0)<(0);
-    $299 = $298 << 31 >> 31;
-    $300 = (_fmt_u_1230($297,$299,$11)|0);
-    $301 = $11;
-    $302 = $300;
-    $303 = (($301) - ($302))|0;
-    $304 = ($303|0)<(2);
-    if ($304) {
-     $$1512607 = $300;
-     while(1) {
-      $305 = ((($$1512607)) + -1|0);
-      HEAP8[$305>>0] = 48;
-      $306 = $305;
-      $307 = (($301) - ($306))|0;
-      $308 = ($307|0)<(2);
-      if ($308) {
-       $$1512607 = $305;
-      } else {
-       $$1512$lcssa = $305;
-       break;
-      }
-     }
-    } else {
-     $$1512$lcssa = $300;
-    }
-    $309 = $$5519$ph >> 31;
-    $310 = $309 & 2;
-    $311 = (($310) + 43)|0;
-    $312 = $311&255;
-    $313 = ((($$1512$lcssa)) + -1|0);
-    HEAP8[$313>>0] = $312;
-    $314 = $$1480&255;
-    $315 = ((($$1512$lcssa)) + -2|0);
-    HEAP8[$315>>0] = $314;
-    $316 = $315;
-    $317 = (($301) - ($316))|0;
-    $$2513 = $315;$$pn566 = $317;
-   }
-   $318 = (($$0520) + 1)|0;
-   $319 = (($318) + ($$3477))|0;
-   $$1526 = (($319) + ($291))|0;
-   $320 = (($$1526) + ($$pn566))|0;
-   _pad_674($0,32,$2,$320,$4);
-   _out_1229($0,$$0521,$$0520);
-   $321 = $4 ^ 65536;
-   _pad_674($0,48,$2,$320,$321);
-   if ($293) {
-    $322 = ($$9$ph>>>0)>($$556>>>0);
-    $$0496$$9 = $322 ? $$556 : $$9$ph;
-    $323 = ((($8)) + 9|0);
-    $324 = $323;
-    $325 = ((($8)) + 8|0);
-    $$5493597 = $$0496$$9;
-    while(1) {
-     $326 = HEAP32[$$5493597>>2]|0;
-     $327 = (_fmt_u_1230($326,0,$323)|0);
-     $328 = ($$5493597|0)==($$0496$$9|0);
-     if ($328) {
-      $334 = ($327|0)==($323|0);
-      if ($334) {
-       HEAP8[$325>>0] = 48;
-       $$1465 = $325;
-      } else {
-       $$1465 = $327;
-      }
-     } else {
-      $329 = ($327>>>0)>($8>>>0);
-      if ($329) {
-       $330 = $327;
-       $331 = (($330) - ($9))|0;
-       _memset(($8|0),48,($331|0))|0;
-       $$0464594 = $327;
-       while(1) {
-        $332 = ((($$0464594)) + -1|0);
-        $333 = ($332>>>0)>($8>>>0);
-        if ($333) {
-         $$0464594 = $332;
-        } else {
-         $$1465 = $332;
-         break;
-        }
-       }
-      } else {
-       $$1465 = $327;
-      }
-     }
-     $335 = $$1465;
-     $336 = (($324) - ($335))|0;
-     _out_1229($0,$$1465,$336);
-     $337 = ((($$5493597)) + 4|0);
-     $338 = ($337>>>0)>($$556>>>0);
-     if ($338) {
-      break;
-     } else {
-      $$5493597 = $337;
-     }
-    }
-    $339 = ($289|0)==(0);
-    if (!($339)) {
-     _out_1229($0,70783,1);
-    }
-    $340 = ($337>>>0)<($$7505>>>0);
-    $341 = ($$3477|0)>(0);
-    $342 = $340 & $341;
-    if ($342) {
-     $$4478590 = $$3477;$$6494589 = $337;
-     while(1) {
-      $343 = HEAP32[$$6494589>>2]|0;
-      $344 = (_fmt_u_1230($343,0,$323)|0);
-      $345 = ($344>>>0)>($8>>>0);
-      if ($345) {
-       $346 = $344;
-       $347 = (($346) - ($9))|0;
-       _memset(($8|0),48,($347|0))|0;
-       $$0463584 = $344;
-       while(1) {
-        $348 = ((($$0463584)) + -1|0);
-        $349 = ($348>>>0)>($8>>>0);
-        if ($349) {
-         $$0463584 = $348;
-        } else {
-         $$0463$lcssa = $348;
-         break;
-        }
-       }
-      } else {
-       $$0463$lcssa = $344;
-      }
-      $350 = ($$4478590|0)<(9);
-      $351 = $350 ? $$4478590 : 9;
-      _out_1229($0,$$0463$lcssa,$351);
-      $352 = ((($$6494589)) + 4|0);
-      $353 = (($$4478590) + -9)|0;
-      $354 = ($352>>>0)<($$7505>>>0);
-      $355 = ($$4478590|0)>(9);
-      $356 = $354 & $355;
-      if ($356) {
-       $$4478590 = $353;$$6494589 = $352;
-      } else {
-       $$4478$lcssa = $353;
-       break;
-      }
-     }
-    } else {
-     $$4478$lcssa = $$3477;
-    }
-    $357 = (($$4478$lcssa) + 9)|0;
-    _pad_674($0,48,$357,9,0);
-   } else {
-    $358 = ((($$9$ph)) + 4|0);
-    $$7505$ = $$lcssa673 ? $$7505 : $358;
-    $359 = ($$3477|0)>(-1);
-    if ($359) {
-     $360 = ((($8)) + 9|0);
-     $361 = ($$pre$phi690Z2D|0)==(0);
-     $362 = $360;
-     $363 = (0 - ($9))|0;
-     $364 = ((($8)) + 8|0);
-     $$5602 = $$3477;$$7495601 = $$9$ph;
-     while(1) {
-      $365 = HEAP32[$$7495601>>2]|0;
-      $366 = (_fmt_u_1230($365,0,$360)|0);
-      $367 = ($366|0)==($360|0);
-      if ($367) {
-       HEAP8[$364>>0] = 48;
-       $$0 = $364;
-      } else {
-       $$0 = $366;
-      }
-      $368 = ($$7495601|0)==($$9$ph|0);
-      do {
-       if ($368) {
-        $372 = ((($$0)) + 1|0);
-        _out_1229($0,$$0,1);
-        $373 = ($$5602|0)<(1);
-        $or$cond554 = $361 & $373;
-        if ($or$cond554) {
-         $$2 = $372;
-         break;
-        }
-        _out_1229($0,70783,1);
-        $$2 = $372;
-       } else {
-        $369 = ($$0>>>0)>($8>>>0);
-        if (!($369)) {
-         $$2 = $$0;
-         break;
-        }
-        $scevgep684 = (($$0) + ($363)|0);
-        $scevgep684685 = $scevgep684;
-        _memset(($8|0),48,($scevgep684685|0))|0;
-        $$1598 = $$0;
-        while(1) {
-         $370 = ((($$1598)) + -1|0);
-         $371 = ($370>>>0)>($8>>>0);
-         if ($371) {
-          $$1598 = $370;
-         } else {
-          $$2 = $370;
-          break;
-         }
-        }
-       }
-      } while(0);
-      $374 = $$2;
-      $375 = (($362) - ($374))|0;
-      $376 = ($$5602|0)>($375|0);
-      $377 = $376 ? $375 : $$5602;
-      _out_1229($0,$$2,$377);
-      $378 = (($$5602) - ($375))|0;
-      $379 = ((($$7495601)) + 4|0);
-      $380 = ($379>>>0)<($$7505$>>>0);
-      $381 = ($378|0)>(-1);
-      $382 = $380 & $381;
-      if ($382) {
-       $$5602 = $378;$$7495601 = $379;
-      } else {
-       $$5$lcssa = $378;
-       break;
-      }
-     }
-    } else {
-     $$5$lcssa = $$3477;
-    }
-    $383 = (($$5$lcssa) + 18)|0;
-    _pad_674($0,48,$383,18,0);
-    $384 = $11;
-    $385 = $$2513;
-    $386 = (($384) - ($385))|0;
-    _out_1229($0,$$2513,$386);
-   }
-   $387 = $4 ^ 8192;
-   _pad_674($0,32,$2,$320,$387);
-   $$sink562 = $320;
-  } else {
-   $27 = $5 & 32;
-   $28 = ($27|0)!=(0);
-   $29 = $28 ? 70755 : 70759;
-   $30 = ($$0471 != $$0471) | (0.0 != 0.0);
-   $31 = $28 ? 72686 : 70763;
-   $$0510 = $30 ? $31 : $29;
-   $32 = (($$0520) + 3)|0;
-   $33 = $4 & -65537;
-   _pad_674($0,32,$2,$32,$33);
-   _out_1229($0,$$0521,$$0520);
-   _out_1229($0,$$0510,3);
-   $34 = $4 ^ 8192;
-   _pad_674($0,32,$2,$32,$34);
-   $$sink562 = $32;
-  }
- } while(0);
- $388 = ($$sink562|0)<($2|0);
- $$555 = $388 ? $2 : $$sink562;
- STACKTOP = sp;return ($$555|0);
-}
-function ___DOUBLE_BITS_675($0) {
- $0 = +$0;
- var $1 = 0, $2 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- HEAPF64[tempDoublePtr>>3] = $0;$1 = HEAP32[tempDoublePtr>>2]|0;
- $2 = HEAP32[tempDoublePtr+4>>2]|0;
- tempRet0 = ($2);
- return ($1|0);
-}
-function _frexpl($0,$1) {
- $0 = +$0;
- $1 = $1|0;
- var $2 = 0.0, label = 0, sp = 0;
- sp = STACKTOP;
- $2 = (+_frexp($0,$1));
- return (+$2);
-}
-function _frexp($0,$1) {
- $0 = +$0;
- $1 = $1|0;
- var $$0 = 0.0, $$016 = 0.0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0.0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0.0, $9 = 0.0, $storemerge = 0, $trunc$clear = 0, label = 0;
- var sp = 0;
- sp = STACKTOP;
- HEAPF64[tempDoublePtr>>3] = $0;$2 = HEAP32[tempDoublePtr>>2]|0;
- $3 = HEAP32[tempDoublePtr+4>>2]|0;
- $4 = (_bitshift64Lshr(($2|0),($3|0),52)|0);
- $5 = tempRet0;
- $6 = $4&65535;
- $trunc$clear = $6 & 2047;
- switch ($trunc$clear<<16>>16) {
- case 0:  {
-  $7 = $0 != 0.0;
-  if ($7) {
-   $8 = $0 * 1.8446744073709552E+19;
-   $9 = (+_frexp($8,$1));
-   $10 = HEAP32[$1>>2]|0;
-   $11 = (($10) + -64)|0;
-   $$016 = $9;$storemerge = $11;
-  } else {
-   $$016 = $0;$storemerge = 0;
-  }
-  HEAP32[$1>>2] = $storemerge;
-  $$0 = $$016;
-  break;
- }
- case 2047:  {
-  $$0 = $0;
-  break;
- }
- default: {
-  $12 = $4 & 2047;
-  $13 = (($12) + -1022)|0;
-  HEAP32[$1>>2] = $13;
-  $14 = $3 & -2146435073;
-  $15 = $14 | 1071644672;
-  HEAP32[tempDoublePtr>>2] = $2;HEAP32[tempDoublePtr+4>>2] = $15;$16 = +HEAPF64[tempDoublePtr>>3];
-  $$0 = $16;
- }
- }
- return (+$$0);
-}
-function _wcrtomb($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$0 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;
- var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0;
- var $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $not$ = 0, $or$cond = 0, label = 0, sp = 0;
- sp = STACKTOP;
- $3 = ($0|0)==(0|0);
- do {
-  if ($3) {
-   $$0 = 1;
-  } else {
-   $4 = ($1>>>0)<(128);
-   if ($4) {
-    $5 = $1&255;
-    HEAP8[$0>>0] = $5;
-    $$0 = 1;
-    break;
-   }
-   $6 = (___pthread_self_448()|0);
-   $7 = ((($6)) + 188|0);
-   $8 = HEAP32[$7>>2]|0;
-   $9 = HEAP32[$8>>2]|0;
-   $not$ = ($9|0)==(0|0);
-   if ($not$) {
-    $10 = $1 & -128;
-    $11 = ($10|0)==(57216);
-    if ($11) {
-     $13 = $1&255;
-     HEAP8[$0>>0] = $13;
-     $$0 = 1;
-     break;
-    } else {
-     $12 = (___errno_location()|0);
-     HEAP32[$12>>2] = 84;
-     $$0 = -1;
-     break;
-    }
-   }
-   $14 = ($1>>>0)<(2048);
-   if ($14) {
-    $15 = $1 >>> 6;
-    $16 = $15 | 192;
-    $17 = $16&255;
-    $18 = ((($0)) + 1|0);
-    HEAP8[$0>>0] = $17;
-    $19 = $1 & 63;
-    $20 = $19 | 128;
-    $21 = $20&255;
-    HEAP8[$18>>0] = $21;
-    $$0 = 2;
-    break;
-   }
-   $22 = ($1>>>0)<(55296);
-   $23 = $1 & -8192;
-   $24 = ($23|0)==(57344);
-   $or$cond = $22 | $24;
-   if ($or$cond) {
-    $25 = $1 >>> 12;
-    $26 = $25 | 224;
-    $27 = $26&255;
-    $28 = ((($0)) + 1|0);
-    HEAP8[$0>>0] = $27;
-    $29 = $1 >>> 6;
-    $30 = $29 & 63;
-    $31 = $30 | 128;
-    $32 = $31&255;
-    $33 = ((($0)) + 2|0);
-    HEAP8[$28>>0] = $32;
-    $34 = $1 & 63;
-    $35 = $34 | 128;
-    $36 = $35&255;
-    HEAP8[$33>>0] = $36;
-    $$0 = 3;
-    break;
-   }
-   $37 = (($1) + -65536)|0;
-   $38 = ($37>>>0)<(1048576);
-   if ($38) {
-    $39 = $1 >>> 18;
-    $40 = $39 | 240;
-    $41 = $40&255;
-    $42 = ((($0)) + 1|0);
-    HEAP8[$0>>0] = $41;
-    $43 = $1 >>> 12;
-    $44 = $43 & 63;
-    $45 = $44 | 128;
-    $46 = $45&255;
-    $47 = ((($0)) + 2|0);
-    HEAP8[$42>>0] = $46;
-    $48 = $1 >>> 6;
-    $49 = $48 & 63;
-    $50 = $49 | 128;
-    $51 = $50&255;
-    $52 = ((($0)) + 3|0);
-    HEAP8[$47>>0] = $51;
-    $53 = $1 & 63;
-    $54 = $53 | 128;
-    $55 = $54&255;
-    HEAP8[$52>>0] = $55;
-    $$0 = 4;
-    break;
-   } else {
-    $56 = (___errno_location()|0);
-    HEAP32[$56>>2] = 84;
-    $$0 = -1;
-    break;
-   }
-  }
- } while(0);
- return ($$0|0);
-}
-function ___pthread_self_448() {
- var $0 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- $0 = (_pthread_self()|0);
- return ($0|0);
-}
-function ___pthread_self_105() {
- var $0 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- $0 = (_pthread_self()|0);
- return ($0|0);
-}
-function ___strerror_l($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $$012$lcssa = 0, $$01214 = 0, $$016 = 0, $$113 = 0, $$115 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0;
- var label = 0, sp = 0;
- sp = STACKTOP;
- $$016 = 0;
- while(1) {
-  $3 = (70785 + ($$016)|0);
-  $4 = HEAP8[$3>>0]|0;
-  $5 = $4&255;
-  $6 = ($5|0)==($0|0);
-  if ($6) {
-   label = 2;
-   break;
-  }
-  $7 = (($$016) + 1)|0;
-  $8 = ($7|0)==(87);
-  if ($8) {
-   $$01214 = 70873;$$115 = 87;
-   label = 5;
-   break;
-  } else {
-   $$016 = $7;
-  }
- }
- if ((label|0) == 2) {
-  $2 = ($$016|0)==(0);
-  if ($2) {
-   $$012$lcssa = 70873;
-  } else {
-   $$01214 = 70873;$$115 = $$016;
-   label = 5;
-  }
- }
- if ((label|0) == 5) {
-  while(1) {
-   label = 0;
-   $$113 = $$01214;
-   while(1) {
-    $9 = HEAP8[$$113>>0]|0;
-    $10 = ($9<<24>>24)==(0);
-    $11 = ((($$113)) + 1|0);
-    if ($10) {
-     break;
-    } else {
-     $$113 = $11;
-    }
-   }
-   $12 = (($$115) + -1)|0;
-   $13 = ($12|0)==(0);
-   if ($13) {
-    $$012$lcssa = $11;
-    break;
-   } else {
-    $$01214 = $11;$$115 = $12;
-    label = 5;
-   }
-  }
- }
- $14 = ((($1)) + 20|0);
- $15 = HEAP32[$14>>2]|0;
- $16 = (___lctrans($$012$lcssa,$15)|0);
- return ($16|0);
-}
-function ___lctrans($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $2 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- $2 = (___lctrans_impl($0,$1)|0);
- return ($2|0);
-}
-function ___lctrans_impl($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $$0 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- $2 = ($1|0)==(0|0);
- if ($2) {
-  $$0 = 0;
- } else {
-  $3 = HEAP32[$1>>2]|0;
-  $4 = ((($1)) + 4|0);
-  $5 = HEAP32[$4>>2]|0;
-  $6 = (___mo_lookup($3,$5,$0)|0);
-  $$0 = $6;
- }
- $7 = ($$0|0)!=(0|0);
- $8 = $7 ? $$0 : $0;
- return ($8|0);
-}
-function ___mo_lookup($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$ = 0, $$090 = 0, $$094 = 0, $$191 = 0, $$195 = 0, $$4 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0;
- var $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0;
- var $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0;
- var $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $7 = 0, $8 = 0, $9 = 0, $or$cond = 0, $or$cond102 = 0, $or$cond104 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- $3 = HEAP32[$0>>2]|0;
- $4 = (($3) + 1794895138)|0;
- $5 = ((($0)) + 8|0);
- $6 = HEAP32[$5>>2]|0;
- $7 = (_swapc($6,$4)|0);
- $8 = ((($0)) + 12|0);
- $9 = HEAP32[$8>>2]|0;
- $10 = (_swapc($9,$4)|0);
- $11 = ((($0)) + 16|0);
- $12 = HEAP32[$11>>2]|0;
- $13 = (_swapc($12,$4)|0);
- $14 = $1 >>> 2;
- $15 = ($7>>>0)<($14>>>0);
- L1: do {
-  if ($15) {
-   $16 = $7 << 2;
-   $17 = (($1) - ($16))|0;
-   $18 = ($10>>>0)<($17>>>0);
-   $19 = ($13>>>0)<($17>>>0);
-   $or$cond = $18 & $19;
-   if ($or$cond) {
-    $20 = $13 | $10;
-    $21 = $20 & 3;
-    $22 = ($21|0)==(0);
-    if ($22) {
-     $23 = $10 >>> 2;
-     $24 = $13 >>> 2;
-     $$090 = 0;$$094 = $7;
-     while(1) {
-      $25 = $$094 >>> 1;
-      $26 = (($$090) + ($25))|0;
-      $27 = $26 << 1;
-      $28 = (($27) + ($23))|0;
-      $29 = (($0) + ($28<<2)|0);
-      $30 = HEAP32[$29>>2]|0;
-      $31 = (_swapc($30,$4)|0);
-      $32 = (($28) + 1)|0;
-      $33 = (($0) + ($32<<2)|0);
-      $34 = HEAP32[$33>>2]|0;
-      $35 = (_swapc($34,$4)|0);
-      $36 = ($35>>>0)<($1>>>0);
-      $37 = (($1) - ($35))|0;
-      $38 = ($31>>>0)<($37>>>0);
-      $or$cond102 = $36 & $38;
-      if (!($or$cond102)) {
-       $$4 = 0;
-       break L1;
-      }
-      $39 = (($35) + ($31))|0;
-      $40 = (($0) + ($39)|0);
-      $41 = HEAP8[$40>>0]|0;
-      $42 = ($41<<24>>24)==(0);
-      if (!($42)) {
-       $$4 = 0;
-       break L1;
-      }
-      $43 = (($0) + ($35)|0);
-      $44 = (_strcmp($2,$43)|0);
-      $45 = ($44|0)==(0);
-      if ($45) {
-       break;
-      }
-      $62 = ($$094|0)==(1);
-      $63 = ($44|0)<(0);
-      $64 = (($$094) - ($25))|0;
-      $$195 = $63 ? $25 : $64;
-      $$191 = $63 ? $$090 : $26;
-      if ($62) {
-       $$4 = 0;
-       break L1;
-      } else {
-       $$090 = $$191;$$094 = $$195;
-      }
-     }
-     $46 = (($27) + ($24))|0;
-     $47 = (($0) + ($46<<2)|0);
-     $48 = HEAP32[$47>>2]|0;
-     $49 = (_swapc($48,$4)|0);
-     $50 = (($46) + 1)|0;
-     $51 = (($0) + ($50<<2)|0);
-     $52 = HEAP32[$51>>2]|0;
-     $53 = (_swapc($52,$4)|0);
-     $54 = ($53>>>0)<($1>>>0);
-     $55 = (($1) - ($53))|0;
-     $56 = ($49>>>0)<($55>>>0);
-     $or$cond104 = $54 & $56;
-     if ($or$cond104) {
-      $57 = (($0) + ($53)|0);
-      $58 = (($53) + ($49))|0;
-      $59 = (($0) + ($58)|0);
-      $60 = HEAP8[$59>>0]|0;
-      $61 = ($60<<24>>24)==(0);
-      $$ = $61 ? $57 : 0;
-      $$4 = $$;
-     } else {
-      $$4 = 0;
-     }
-    } else {
-     $$4 = 0;
-    }
-   } else {
-    $$4 = 0;
-   }
-  } else {
-   $$4 = 0;
-  }
- } while(0);
- return ($$4|0);
-}
-function _swapc($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $$ = 0, $2 = 0, $3 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- $2 = ($1|0)==(0);
- $3 = (_llvm_bswap_i32(($0|0))|0);
- $$ = $2 ? $0 : $3;
- return ($$|0);
-}
-function ___fwritex($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$038 = 0, $$042 = 0, $$1 = 0, $$139 = 0, $$141 = 0, $$143 = 0, $$pre = 0, $$pre47 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0;
- var $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0;
- var label = 0, sp = 0;
- sp = STACKTOP;
- $3 = ((($2)) + 16|0);
- $4 = HEAP32[$3>>2]|0;
- $5 = ($4|0)==(0|0);
- if ($5) {
-  $7 = (___towrite($2)|0);
-  $8 = ($7|0)==(0);
-  if ($8) {
-   $$pre = HEAP32[$3>>2]|0;
-   $12 = $$pre;
-   label = 5;
-  } else {
-   $$1 = 0;
-  }
- } else {
-  $6 = $4;
-  $12 = $6;
-  label = 5;
- }
- L5: do {
-  if ((label|0) == 5) {
-   $9 = ((($2)) + 20|0);
-   $10 = HEAP32[$9>>2]|0;
-   $11 = (($12) - ($10))|0;
-   $13 = ($11>>>0)<($1>>>0);
-   $14 = $10;
-   if ($13) {
-    $15 = ((($2)) + 36|0);
-    $16 = HEAP32[$15>>2]|0;
-    $17 = (FUNCTION_TABLE_iiii[$16 & 511]($2,$0,$1)|0);
-    $$1 = $17;
-    break;
-   }
-   $18 = ((($2)) + 75|0);
-   $19 = HEAP8[$18>>0]|0;
-   $20 = ($19<<24>>24)>(-1);
-   L10: do {
-    if ($20) {
-     $$038 = $1;
-     while(1) {
-      $21 = ($$038|0)==(0);
-      if ($21) {
-       $$139 = 0;$$141 = $0;$$143 = $1;$31 = $14;
-       break L10;
-      }
-      $22 = (($$038) + -1)|0;
-      $23 = (($0) + ($22)|0);
-      $24 = HEAP8[$23>>0]|0;
-      $25 = ($24<<24>>24)==(10);
-      if ($25) {
-       break;
-      } else {
-       $$038 = $22;
-      }
-     }
-     $26 = ((($2)) + 36|0);
-     $27 = HEAP32[$26>>2]|0;
-     $28 = (FUNCTION_TABLE_iiii[$27 & 511]($2,$0,$$038)|0);
-     $29 = ($28>>>0)<($$038>>>0);
-     if ($29) {
-      $$1 = $28;
-      break L5;
-     }
-     $30 = (($0) + ($$038)|0);
-     $$042 = (($1) - ($$038))|0;
-     $$pre47 = HEAP32[$9>>2]|0;
-     $$139 = $$038;$$141 = $30;$$143 = $$042;$31 = $$pre47;
-    } else {
-     $$139 = 0;$$141 = $0;$$143 = $1;$31 = $14;
-    }
-   } while(0);
-   _memcpy(($31|0),($$141|0),($$143|0))|0;
-   $32 = HEAP32[$9>>2]|0;
-   $33 = (($32) + ($$143)|0);
-   HEAP32[$9>>2] = $33;
-   $34 = (($$139) + ($$143))|0;
-   $$1 = $34;
-  }
- } while(0);
- return ($$1|0);
-}
-function ___towrite($0) {
- $0 = $0|0;
- var $$0 = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0;
- var $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- $1 = ((($0)) + 74|0);
- $2 = HEAP8[$1>>0]|0;
- $3 = $2 << 24 >> 24;
- $4 = (($3) + 255)|0;
- $5 = $4 | $3;
- $6 = $5&255;
- HEAP8[$1>>0] = $6;
- $7 = HEAP32[$0>>2]|0;
- $8 = $7 & 8;
- $9 = ($8|0)==(0);
- if ($9) {
-  $11 = ((($0)) + 8|0);
-  HEAP32[$11>>2] = 0;
-  $12 = ((($0)) + 4|0);
-  HEAP32[$12>>2] = 0;
-  $13 = ((($0)) + 44|0);
-  $14 = HEAP32[$13>>2]|0;
-  $15 = ((($0)) + 28|0);
-  HEAP32[$15>>2] = $14;
-  $16 = ((($0)) + 20|0);
-  HEAP32[$16>>2] = $14;
-  $17 = ((($0)) + 48|0);
-  $18 = HEAP32[$17>>2]|0;
-  $19 = (($14) + ($18)|0);
-  $20 = ((($0)) + 16|0);
-  HEAP32[$20>>2] = $19;
-  $$0 = 0;
- } else {
-  $10 = $7 | 32;
-  HEAP32[$0>>2] = $10;
-  $$0 = -1;
- }
- return ($$0|0);
-}
-function _sn_write($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$ = 0, $10 = 0, $11 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- $3 = ((($0)) + 16|0);
- $4 = HEAP32[$3>>2]|0;
- $5 = ((($0)) + 20|0);
- $6 = HEAP32[$5>>2]|0;
- $7 = $6;
- $8 = (($4) - ($7))|0;
- $9 = ($8>>>0)>($2>>>0);
- $$ = $9 ? $2 : $8;
- _memcpy(($6|0),($1|0),($$|0))|0;
- $10 = HEAP32[$5>>2]|0;
- $11 = (($10) + ($$)|0);
- HEAP32[$5>>2] = $11;
- return ($2|0);
-}
-function _isalnum($0) {
- $0 = $0|0;
- var $1 = 0, $2 = 0, $3 = 0, $isdigit = 0, $isdigittmp = 0, $not$ = 0, label = 0, sp = 0;
- sp = STACKTOP;
- $1 = (_isalpha($0)|0);
- $isdigittmp = (($0) + -48)|0;
- $isdigit = ($isdigittmp>>>0)<(10);
- $not$ = ($1|0)!=(0);
- $2 = $isdigit | $not$;
- $3 = $2&1;
- return ($3|0);
-}
-function _isalpha($0) {
- $0 = $0|0;
- var $1 = 0, $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- $1 = $0 | 32;
- $2 = (($1) + -97)|0;
- $3 = ($2>>>0)<(26);
- $4 = $3&1;
- return ($4|0);
-}
-function _isdigit($0) {
- $0 = $0|0;
- var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- $1 = (($0) + -48)|0;
- $2 = ($1>>>0)<(10);
- $3 = $2&1;
- return ($3|0);
-}
-function ___floatscan($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$0 = 0, $$0105$ph = 0, $$0106$ph = 0, $$0107$lcssa = 0, $$0107127 = 0, $$0113 = 0, $$0114 = 0.0, $$1$lcssa = 0, $$1108 = 0, $$1128 = 0, $$2 = 0, $$2109125 = 0, $$3110 = 0, $$3126 = 0, $$4 = 0, $$4111 = 0, $$5 = 0, $$6 = 0, $$in = 0, $$old8 = 0;
- var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;
- var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0.0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0.0, $14 = 0, $15 = 0;
- var $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0;
- var $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0;
- var $53 = 0.0, $54 = 0.0, $55 = 0.0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0;
- var $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0;
- var $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $or$cond = 0, $or$cond5 = 0, $or$cond7 = 0, $or$cond9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- switch ($1|0) {
- case 0:  {
-  $$0105$ph = -149;$$0106$ph = 24;
-  label = 4;
-  break;
- }
- case 1:  {
-  $$0105$ph = -1074;$$0106$ph = 53;
-  label = 4;
-  break;
- }
- case 2:  {
-  $$0105$ph = -1074;$$0106$ph = 53;
-  label = 4;
-  break;
- }
- default: {
-  $$0114 = 0.0;
- }
- }
- L4: do {
-  if ((label|0) == 4) {
-   $3 = ((($0)) + 4|0);
-   $4 = ((($0)) + 100|0);
-   while(1) {
-    $5 = HEAP32[$3>>2]|0;
-    $6 = HEAP32[$4>>2]|0;
-    $7 = ($5>>>0)<($6>>>0);
-    if ($7) {
-     $8 = ((($5)) + 1|0);
-     HEAP32[$3>>2] = $8;
-     $9 = HEAP8[$5>>0]|0;
-     $10 = $9&255;
-     $12 = $10;
-    } else {
-     $11 = (___shgetc($0)|0);
-     $12 = $11;
-    }
-    $13 = (_isspace($12)|0);
-    $14 = ($13|0)==(0);
-    if ($14) {
-     break;
-    }
-   }
-   L13: do {
-    switch ($12|0) {
-    case 43: case 45:  {
-     $15 = ($12|0)==(45);
-     $16 = $15&1;
-     $17 = $16 << 1;
-     $18 = (1 - ($17))|0;
-     $19 = HEAP32[$3>>2]|0;
-     $20 = HEAP32[$4>>2]|0;
-     $21 = ($19>>>0)<($20>>>0);
-     if ($21) {
-      $22 = ((($19)) + 1|0);
-      HEAP32[$3>>2] = $22;
-      $23 = HEAP8[$19>>0]|0;
-      $24 = $23&255;
-      $$0 = $24;$$0113 = $18;
-      break L13;
-     } else {
-      $25 = (___shgetc($0)|0);
-      $$0 = $25;$$0113 = $18;
-      break L13;
-     }
-     break;
-    }
-    default: {
-     $$0 = $12;$$0113 = 1;
-    }
-    }
-   } while(0);
-   $$0107127 = 0;$$1128 = $$0;
-   while(1) {
-    $26 = $$1128 | 32;
-    $27 = (72677 + ($$0107127)|0);
-    $28 = HEAP8[$27>>0]|0;
-    $29 = $28 << 24 >> 24;
-    $30 = ($26|0)==($29|0);
-    if (!($30)) {
-     $$0107$lcssa = $$0107127;$$1$lcssa = $$1128;
-     break;
-    }
-    $31 = ($$0107127>>>0)<(7);
-    do {
-     if ($31) {
-      $32 = HEAP32[$3>>2]|0;
-      $33 = HEAP32[$4>>2]|0;
-      $34 = ($32>>>0)<($33>>>0);
-      if ($34) {
-       $35 = ((($32)) + 1|0);
-       HEAP32[$3>>2] = $35;
-       $36 = HEAP8[$32>>0]|0;
-       $37 = $36&255;
-       $$2 = $37;
-       break;
-      } else {
-       $38 = (___shgetc($0)|0);
-       $$2 = $38;
-       break;
-      }
-     } else {
-      $$2 = $$1128;
-     }
-    } while(0);
-    $39 = (($$0107127) + 1)|0;
-    $40 = ($39>>>0)<(8);
-    if ($40) {
-     $$0107127 = $39;$$1128 = $$2;
-    } else {
-     $$0107$lcssa = $39;$$1$lcssa = $$2;
-     break;
-    }
-   }
-   L29: do {
-    switch ($$0107$lcssa|0) {
-    case 8:  {
-     break;
-    }
-    case 3:  {
-     label = 23;
-     break;
-    }
-    default: {
-     $41 = ($$0107$lcssa>>>0)>(3);
-     $42 = ($2|0)!=(0);
-     $or$cond5 = $42 & $41;
-     if ($or$cond5) {
-      $43 = ($$0107$lcssa|0)==(8);
-      if ($43) {
-       break L29;
-      } else {
-       label = 23;
-       break L29;
-      }
-     }
-     $56 = ($$0107$lcssa|0)==(0);
-     L34: do {
-      if ($56) {
-       $$2109125 = 0;$$3126 = $$1$lcssa;
-       while(1) {
-        $57 = $$3126 | 32;
-        $58 = (72686 + ($$2109125)|0);
-        $59 = HEAP8[$58>>0]|0;
-        $60 = $59 << 24 >> 24;
-        $61 = ($57|0)==($60|0);
-        if (!($61)) {
-         $$3110 = $$2109125;$$5 = $$3126;
-         break L34;
-        }
-        $62 = ($$2109125>>>0)<(2);
-        do {
-         if ($62) {
-          $63 = HEAP32[$3>>2]|0;
-          $64 = HEAP32[$4>>2]|0;
-          $65 = ($63>>>0)<($64>>>0);
-          if ($65) {
-           $66 = ((($63)) + 1|0);
-           HEAP32[$3>>2] = $66;
-           $67 = HEAP8[$63>>0]|0;
-           $68 = $67&255;
-           $$4 = $68;
-           break;
-          } else {
-           $69 = (___shgetc($0)|0);
-           $$4 = $69;
-           break;
-          }
-         } else {
-          $$4 = $$3126;
-         }
-        } while(0);
-        $70 = (($$2109125) + 1)|0;
-        $71 = ($70>>>0)<(3);
-        if ($71) {
-         $$2109125 = $70;$$3126 = $$4;
-        } else {
-         $$3110 = $70;$$5 = $$4;
-         break;
-        }
-       }
-      } else {
-       $$3110 = $$0107$lcssa;$$5 = $$1$lcssa;
-      }
-     } while(0);
-     switch ($$3110|0) {
-     case 3:  {
-      $72 = HEAP32[$3>>2]|0;
-      $73 = HEAP32[$4>>2]|0;
-      $74 = ($72>>>0)<($73>>>0);
-      if ($74) {
-       $75 = ((($72)) + 1|0);
-       HEAP32[$3>>2] = $75;
-       $76 = HEAP8[$72>>0]|0;
-       $77 = $76&255;
-       $80 = $77;
-      } else {
-       $78 = (___shgetc($0)|0);
-       $80 = $78;
-      }
-      $79 = ($80|0)==(40);
-      if ($79) {
-       $$4111 = 1;
-      } else {
-       $81 = HEAP32[$4>>2]|0;
-       $82 = ($81|0)==(0|0);
-       if ($82) {
-        $$0114 = nan;
-        break L4;
-       }
-       $83 = HEAP32[$3>>2]|0;
-       $84 = ((($83)) + -1|0);
-       HEAP32[$3>>2] = $84;
-       $$0114 = nan;
-       break L4;
-      }
-      while(1) {
-       $85 = HEAP32[$3>>2]|0;
-       $86 = HEAP32[$4>>2]|0;
-       $87 = ($85>>>0)<($86>>>0);
-       if ($87) {
-        $88 = ((($85)) + 1|0);
-        HEAP32[$3>>2] = $88;
-        $89 = HEAP8[$85>>0]|0;
-        $90 = $89&255;
-        $93 = $90;
-       } else {
-        $91 = (___shgetc($0)|0);
-        $93 = $91;
-       }
-       $92 = (($93) + -48)|0;
-       $94 = ($92>>>0)<(10);
-       $95 = (($93) + -65)|0;
-       $96 = ($95>>>0)<(26);
-       $or$cond = $94 | $96;
-       if (!($or$cond)) {
-        $97 = (($93) + -97)|0;
-        $98 = ($97>>>0)<(26);
-        $99 = ($93|0)==(95);
-        $or$cond7 = $99 | $98;
-        if (!($or$cond7)) {
-         break;
-        }
-       }
-       $111 = (($$4111) + 1)|0;
-       $$4111 = $111;
-      }
-      $100 = ($93|0)==(41);
-      if ($100) {
-       $$0114 = nan;
-       break L4;
-      }
-      $101 = HEAP32[$4>>2]|0;
-      $102 = ($101|0)==(0|0);
-      if (!($102)) {
-       $103 = HEAP32[$3>>2]|0;
-       $104 = ((($103)) + -1|0);
-       HEAP32[$3>>2] = $104;
-      }
-      if (!($42)) {
-       $106 = (___errno_location()|0);
-       HEAP32[$106>>2] = 22;
-       ___shlim($0,0);
-       $$0114 = 0.0;
-       break L4;
-      }
-      $105 = ($$4111|0)==(0);
-      if ($105) {
-       $$0114 = nan;
-       break L4;
-      } else {
-       $$in = $$4111;
-      }
-      while(1) {
-       $107 = (($$in) + -1)|0;
-       if (!($102)) {
-        $108 = HEAP32[$3>>2]|0;
-        $109 = ((($108)) + -1|0);
-        HEAP32[$3>>2] = $109;
-       }
-       $110 = ($107|0)==(0);
-       if ($110) {
-        $$0114 = nan;
-        break L4;
-       } else {
-        $$in = $107;
-       }
-      }
-      break;
-     }
-     case 0:  {
-      $117 = ($$5|0)==(48);
-      if ($117) {
-       $118 = HEAP32[$3>>2]|0;
-       $119 = HEAP32[$4>>2]|0;
-       $120 = ($118>>>0)<($119>>>0);
-       if ($120) {
-        $121 = ((($118)) + 1|0);
-        HEAP32[$3>>2] = $121;
-        $122 = HEAP8[$118>>0]|0;
-        $123 = $122&255;
-        $126 = $123;
-       } else {
-        $124 = (___shgetc($0)|0);
-        $126 = $124;
-       }
-       $125 = $126 | 32;
-       $127 = ($125|0)==(120);
-       if ($127) {
-        $128 = (+_hexfloat($0,$$0106$ph,$$0105$ph,$$0113,$2));
-        $$0114 = $128;
-        break L4;
-       }
-       $129 = HEAP32[$4>>2]|0;
-       $130 = ($129|0)==(0|0);
-       if ($130) {
-        $$6 = 48;
-       } else {
-        $131 = HEAP32[$3>>2]|0;
-        $132 = ((($131)) + -1|0);
-        HEAP32[$3>>2] = $132;
-        $$6 = 48;
-       }
-      } else {
-       $$6 = $$5;
-      }
-      $133 = (+_decfloat($0,$$6,$$0106$ph,$$0105$ph,$$0113,$2));
-      $$0114 = $133;
-      break L4;
-      break;
-     }
-     default: {
-      $112 = HEAP32[$4>>2]|0;
-      $113 = ($112|0)==(0|0);
-      if (!($113)) {
-       $114 = HEAP32[$3>>2]|0;
-       $115 = ((($114)) + -1|0);
-       HEAP32[$3>>2] = $115;
-      }
-      $116 = (___errno_location()|0);
-      HEAP32[$116>>2] = 22;
-      ___shlim($0,0);
-      $$0114 = 0.0;
-      break L4;
-     }
-     }
-    }
-    }
-   } while(0);
-   if ((label|0) == 23) {
-    $44 = HEAP32[$4>>2]|0;
-    $45 = ($44|0)==(0|0);
-    if (!($45)) {
-     $46 = HEAP32[$3>>2]|0;
-     $47 = ((($46)) + -1|0);
-     HEAP32[$3>>2] = $47;
-    }
-    $48 = ($2|0)!=(0);
-    $49 = ($$0107$lcssa>>>0)>(3);
-    $or$cond9 = $48 & $49;
-    if ($or$cond9) {
-     $$1108 = $$0107$lcssa;
-     while(1) {
-      if (!($45)) {
-       $50 = HEAP32[$3>>2]|0;
-       $51 = ((($50)) + -1|0);
-       HEAP32[$3>>2] = $51;
-      }
-      $52 = (($$1108) + -1)|0;
-      $$old8 = ($52>>>0)>(3);
-      if ($$old8) {
-       $$1108 = $52;
-      } else {
-       break;
-      }
-     }
-    }
-   }
-   $53 = (+($$0113|0));
-   $54 = $53 * inf;
-   $55 = $54;
-   $$0114 = $55;
-  }
- } while(0);
- return (+$$0114);
-}
-function _hexfloat($0,$1,$2,$3,$4) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- $4 = $4|0;
- var $$0 = 0, $$0133 = 0, $$0142 = 0, $$0146 = 0, $$0148 = 0, $$0148$ = 0, $$0151 = 0.0, $$0152 = 0.0, $$0155 = 0.0, $$0155$ = 0.0, $$0159 = 0, $$0165 = 0.0, $$0166 = 0, $$0166169 = 0, $$0166170 = 0, $$1$ph = 0, $$1147 = 0, $$1149 = 0, $$1153 = 0.0, $$1156 = 0.0;
- var $$1160 = 0, $$2 = 0, $$2$lcssa = 0, $$2144 = 0, $$2150 = 0, $$2154 = 0.0, $$2157 = 0.0, $$2161 = 0, $$3145 = 0, $$3158$lcssa = 0.0, $$3158179 = 0.0, $$3162$lcssa = 0, $$3162183 = 0, $$4 = 0.0, $$4163$lcssa = 0, $$4163178 = 0, $$5 = 0.0, $$5164 = 0, $$6 = 0, $$pn = 0.0;
- var $$pre = 0.0, $$pre$phiZ2D = 0.0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0;
- var $116 = 0, $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0;
- var $134 = 0, $135 = 0, $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0.0, $143 = 0.0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0;
- var $152 = 0, $153 = 0.0, $154 = 0.0, $155 = 0.0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0.0, $167 = 0.0, $168 = 0.0, $169 = 0, $17 = 0;
- var $170 = 0, $171 = 0.0, $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0, $188 = 0;
- var $189 = 0, $19 = 0, $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0.0, $197 = 0, $198 = 0.0, $199 = 0.0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0, $204 = 0, $205 = 0.0, $206 = 0.0;
- var $207 = 0.0, $208 = 0.0, $209 = 0.0, $21 = 0, $210 = 0.0, $211 = 0, $212 = 0, $213 = 0.0, $214 = 0, $215 = 0, $216 = 0, $217 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;
- var $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0;
- var $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0.0, $67 = 0.0;
- var $68 = 0.0, $69 = 0.0, $7 = 0, $70 = 0, $71 = 0, $72 = 0.0, $73 = 0.0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0;
- var $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0.0, $96 = 0.0, $97 = 0, $98 = 0, $99 = 0, $not$ = 0, $or$cond = 0, $or$cond168 = 0, $or$cond206 = 0, $or$cond4 = 0;
- var $or$cond6 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- $5 = ((($0)) + 4|0);
- $6 = HEAP32[$5>>2]|0;
- $7 = ((($0)) + 100|0);
- $8 = HEAP32[$7>>2]|0;
- $9 = ($6>>>0)<($8>>>0);
- if ($9) {
-  $10 = ((($6)) + 1|0);
-  HEAP32[$5>>2] = $10;
-  $11 = HEAP8[$6>>0]|0;
-  $12 = $11&255;
-  $$0 = $12;$$0142 = 0;
- } else {
-  $13 = (___shgetc($0)|0);
-  $$0 = $13;$$0142 = 0;
- }
- L4: while(1) {
-  switch ($$0|0) {
-  case 46:  {
-   label = 8;
-   break L4;
-   break;
-  }
-  case 48:  {
-   break;
-  }
-  default: {
-   $$0146 = 0;$$0148 = 0;$$0152 = 1.0;$$0155 = 0.0;$$0159 = 0;$$2 = $$0;$$2144 = $$0142;$101 = 0;$53 = 0;$55 = 0;$99 = 0;
-   break L4;
-  }
-  }
-  $14 = HEAP32[$5>>2]|0;
-  $15 = HEAP32[$7>>2]|0;
-  $16 = ($14>>>0)<($15>>>0);
-  if ($16) {
-   $17 = ((($14)) + 1|0);
-   HEAP32[$5>>2] = $17;
-   $18 = HEAP8[$14>>0]|0;
-   $19 = $18&255;
-   $$0 = $19;$$0142 = 1;
-   continue;
-  } else {
-   $20 = (___shgetc($0)|0);
-   $$0 = $20;$$0142 = 1;
-   continue;
-  }
- }
- if ((label|0) == 8) {
-  $21 = HEAP32[$5>>2]|0;
-  $22 = HEAP32[$7>>2]|0;
-  $23 = ($21>>>0)<($22>>>0);
-  if ($23) {
-   $24 = ((($21)) + 1|0);
-   HEAP32[$5>>2] = $24;
-   $25 = HEAP8[$21>>0]|0;
-   $26 = $25&255;
-   $$1$ph = $26;
-  } else {
-   $27 = (___shgetc($0)|0);
-   $$1$ph = $27;
-  }
-  $28 = ($$1$ph|0)==(48);
-  if ($28) {
-   $36 = 0;$37 = 0;
-   while(1) {
-    $29 = HEAP32[$5>>2]|0;
-    $30 = HEAP32[$7>>2]|0;
-    $31 = ($29>>>0)<($30>>>0);
-    if ($31) {
-     $32 = ((($29)) + 1|0);
-     HEAP32[$5>>2] = $32;
-     $33 = HEAP8[$29>>0]|0;
-     $34 = $33&255;
-     $41 = $34;
-    } else {
-     $35 = (___shgetc($0)|0);
-     $41 = $35;
-    }
-    $38 = (_i64Add(($36|0),($37|0),-1,-1)|0);
-    $39 = tempRet0;
-    $40 = ($41|0)==(48);
-    if ($40) {
-     $36 = $38;$37 = $39;
-    } else {
-     $$0146 = 1;$$0148 = 0;$$0152 = 1.0;$$0155 = 0.0;$$0159 = 0;$$2 = $41;$$2144 = 1;$101 = $39;$53 = 0;$55 = 0;$99 = $38;
-     break;
-    }
-   }
-  } else {
-   $$0146 = 1;$$0148 = 0;$$0152 = 1.0;$$0155 = 0.0;$$0159 = 0;$$2 = $$1$ph;$$2144 = $$0142;$101 = 0;$53 = 0;$55 = 0;$99 = 0;
-  }
- }
- while(1) {
-  $42 = (($$2) + -48)|0;
-  $43 = ($42>>>0)<(10);
-  $44 = ($$2|0)==(46);
-  if (!($43)) {
-   $45 = $$2 | 32;
-   $46 = (($45) + -97)|0;
-   $47 = ($46>>>0)<(6);
-   $or$cond6 = $44 | $47;
-   if (!($or$cond6)) {
-    $$2$lcssa = $$2;
-    break;
-   }
-  }
-  if ($44) {
-   $48 = ($$0146|0)==(0);
-   if ($48) {
-    $$1147 = 1;$$2150 = $$0148;$$2154 = $$0152;$$2157 = $$0155;$$2161 = $$0159;$$3145 = $$2144;$214 = $55;$215 = $53;$216 = $55;$217 = $53;
-   } else {
-    $$2$lcssa = 46;
-    break;
-   }
-  } else {
-   $49 = ($$2|0)>(57);
-   $50 = $$2 | 32;
-   $51 = (($50) + -87)|0;
-   $$0133 = $49 ? $51 : $42;
-   $52 = ($53|0)<(0);
-   $54 = ($55>>>0)<(8);
-   $56 = ($53|0)==(0);
-   $57 = $56 & $54;
-   $58 = $52 | $57;
-   do {
-    if ($58) {
-     $59 = $$0159 << 4;
-     $60 = (($$0133) + ($59))|0;
-     $$1149 = $$0148;$$1153 = $$0152;$$1156 = $$0155;$$1160 = $60;
-    } else {
-     $61 = ($53|0)<(0);
-     $62 = ($55>>>0)<(14);
-     $63 = ($53|0)==(0);
-     $64 = $63 & $62;
-     $65 = $61 | $64;
-     if ($65) {
-      $66 = (+($$0133|0));
-      $67 = $$0152 * 0.0625;
-      $68 = $67 * $66;
-      $69 = $$0155 + $68;
-      $$1149 = $$0148;$$1153 = $67;$$1156 = $69;$$1160 = $$0159;
-      break;
-     } else {
-      $70 = ($$0133|0)==(0);
-      $71 = ($$0148|0)!=(0);
-      $or$cond = $71 | $70;
-      $72 = $$0152 * 0.5;
-      $73 = $$0155 + $72;
-      $$0155$ = $or$cond ? $$0155 : $73;
-      $$0148$ = $or$cond ? $$0148 : 1;
-      $$1149 = $$0148$;$$1153 = $$0152;$$1156 = $$0155$;$$1160 = $$0159;
-      break;
-     }
-    }
-   } while(0);
-   $74 = (_i64Add(($55|0),($53|0),1,0)|0);
-   $75 = tempRet0;
-   $$1147 = $$0146;$$2150 = $$1149;$$2154 = $$1153;$$2157 = $$1156;$$2161 = $$1160;$$3145 = 1;$214 = $99;$215 = $101;$216 = $74;$217 = $75;
-  }
-  $76 = HEAP32[$5>>2]|0;
-  $77 = HEAP32[$7>>2]|0;
-  $78 = ($76>>>0)<($77>>>0);
-  if ($78) {
-   $79 = ((($76)) + 1|0);
-   HEAP32[$5>>2] = $79;
-   $80 = HEAP8[$76>>0]|0;
-   $81 = $80&255;
-   $$0146 = $$1147;$$0148 = $$2150;$$0152 = $$2154;$$0155 = $$2157;$$0159 = $$2161;$$2 = $81;$$2144 = $$3145;$101 = $215;$53 = $217;$55 = $216;$99 = $214;
-   continue;
-  } else {
-   $82 = (___shgetc($0)|0);
-   $$0146 = $$1147;$$0148 = $$2150;$$0152 = $$2154;$$0155 = $$2157;$$0159 = $$2161;$$2 = $82;$$2144 = $$3145;$101 = $215;$53 = $217;$55 = $216;$99 = $214;
-   continue;
-  }
- }
- $83 = ($$2144|0)==(0);
- do {
-  if ($83) {
-   $84 = HEAP32[$7>>2]|0;
-   $85 = ($84|0)!=(0|0);
-   if ($85) {
-    $86 = HEAP32[$5>>2]|0;
-    $87 = ((($86)) + -1|0);
-    HEAP32[$5>>2] = $87;
-   }
-   $88 = ($4|0)==(0);
-   if ($88) {
-    ___shlim($0,0);
-   } else {
-    if ($85) {
-     $89 = HEAP32[$5>>2]|0;
-     $90 = ((($89)) + -1|0);
-     HEAP32[$5>>2] = $90;
-    }
-    $91 = ($$0146|0)==(0);
-    $92 = ($84|0)==(0|0);
-    $or$cond206 = $91 | $92;
-    if (!($or$cond206)) {
-     $93 = HEAP32[$5>>2]|0;
-     $94 = ((($93)) + -1|0);
-     HEAP32[$5>>2] = $94;
-    }
-   }
-   $95 = (+($3|0));
-   $96 = $95 * 0.0;
-   $$0165 = $96;
-  } else {
-   $97 = ($$0146|0)==(0);
-   $98 = $97 ? $55 : $99;
-   $100 = $97 ? $53 : $101;
-   $102 = ($53|0)<(0);
-   $103 = ($55>>>0)<(8);
-   $104 = ($53|0)==(0);
-   $105 = $104 & $103;
-   $106 = $102 | $105;
-   if ($106) {
-    $$3162183 = $$0159;$108 = $55;$109 = $53;
-    while(1) {
-     $107 = $$3162183 << 4;
-     $110 = (_i64Add(($108|0),($109|0),1,0)|0);
-     $111 = tempRet0;
-     $112 = ($111|0)<(0);
-     $113 = ($110>>>0)<(8);
-     $114 = ($111|0)==(0);
-     $115 = $114 & $113;
-     $116 = $112 | $115;
-     if ($116) {
-      $$3162183 = $107;$108 = $110;$109 = $111;
-     } else {
-      $$3162$lcssa = $107;
-      break;
-     }
-    }
-   } else {
-    $$3162$lcssa = $$0159;
-   }
-   $117 = $$2$lcssa | 32;
-   $118 = ($117|0)==(112);
-   if ($118) {
-    $119 = (_scanexp($0,$4)|0);
-    $120 = tempRet0;
-    $121 = ($119|0)==(0);
-    $122 = ($120|0)==(-2147483648);
-    $123 = $121 & $122;
-    if ($123) {
-     $124 = ($4|0)==(0);
-     if ($124) {
-      ___shlim($0,0);
-      $$0165 = 0.0;
-      break;
-     }
-     $125 = HEAP32[$7>>2]|0;
-     $126 = ($125|0)==(0|0);
-     if ($126) {
-      $137 = 0;$138 = 0;
-     } else {
-      $127 = HEAP32[$5>>2]|0;
-      $128 = ((($127)) + -1|0);
-      HEAP32[$5>>2] = $128;
-      $137 = 0;$138 = 0;
-     }
-    } else {
-     $137 = $119;$138 = $120;
-    }
-   } else {
-    $129 = HEAP32[$7>>2]|0;
-    $130 = ($129|0)==(0|0);
-    if ($130) {
-     $137 = 0;$138 = 0;
-    } else {
-     $131 = HEAP32[$5>>2]|0;
-     $132 = ((($131)) + -1|0);
-     HEAP32[$5>>2] = $132;
-     $137 = 0;$138 = 0;
-    }
-   }
-   $133 = (_bitshift64Shl(($98|0),($100|0),2)|0);
-   $134 = tempRet0;
-   $135 = (_i64Add(($133|0),($134|0),-32,-1)|0);
-   $136 = tempRet0;
-   $139 = (_i64Add(($135|0),($136|0),($137|0),($138|0))|0);
-   $140 = tempRet0;
-   $141 = ($$3162$lcssa|0)==(0);
-   if ($141) {
-    $142 = (+($3|0));
-    $143 = $142 * 0.0;
-    $$0165 = $143;
-    break;
-   }
-   $144 = (0 - ($2))|0;
-   $145 = ($144|0)<(0);
-   $146 = $145 << 31 >> 31;
-   $147 = ($140|0)>($146|0);
-   $148 = ($139>>>0)>($144>>>0);
-   $149 = ($140|0)==($146|0);
-   $150 = $149 & $148;
-   $151 = $147 | $150;
-   if ($151) {
-    $152 = (___errno_location()|0);
-    HEAP32[$152>>2] = 34;
-    $153 = (+($3|0));
-    $154 = $153 * 1.7976931348623157E+308;
-    $155 = $154 * 1.7976931348623157E+308;
-    $$0165 = $155;
-    break;
-   }
-   $156 = (($2) + -106)|0;
-   $157 = ($156|0)<(0);
-   $158 = $157 << 31 >> 31;
-   $159 = ($140|0)<($158|0);
-   $160 = ($139>>>0)<($156>>>0);
-   $161 = ($140|0)==($158|0);
-   $162 = $161 & $160;
-   $163 = $159 | $162;
-   if ($163) {
-    $165 = (___errno_location()|0);
-    HEAP32[$165>>2] = 34;
-    $166 = (+($3|0));
-    $167 = $166 * 2.2250738585072014E-308;
-    $168 = $167 * 2.2250738585072014E-308;
-    $$0165 = $168;
-    break;
-   }
-   $164 = ($$3162$lcssa|0)>(-1);
-   if ($164) {
-    $$3158179 = $$0155;$$4163178 = $$3162$lcssa;$173 = $139;$174 = $140;
-    while(1) {
-     $169 = !($$3158179 >= 0.5);
-     $170 = $$4163178 << 1;
-     $171 = $$3158179 + -1.0;
-     $not$ = $169 ^ 1;
-     $172 = $not$&1;
-     $$5164 = $170 | $172;
-     $$pn = $169 ? $$3158179 : $171;
-     $$4 = $$3158179 + $$pn;
-     $175 = (_i64Add(($173|0),($174|0),-1,-1)|0);
-     $176 = tempRet0;
-     $177 = ($$5164|0)>(-1);
-     if ($177) {
-      $$3158179 = $$4;$$4163178 = $$5164;$173 = $175;$174 = $176;
-     } else {
-      $$3158$lcssa = $$4;$$4163$lcssa = $$5164;$184 = $175;$185 = $176;
-      break;
-     }
-    }
-   } else {
-    $$3158$lcssa = $$0155;$$4163$lcssa = $$3162$lcssa;$184 = $139;$185 = $140;
-   }
-   $178 = ($1|0)<(0);
-   $179 = $178 << 31 >> 31;
-   $180 = ($2|0)<(0);
-   $181 = $180 << 31 >> 31;
-   $182 = (_i64Subtract(32,0,($2|0),($181|0))|0);
-   $183 = tempRet0;
-   $186 = (_i64Add(($182|0),($183|0),($184|0),($185|0))|0);
-   $187 = tempRet0;
-   $188 = ($179|0)>($187|0);
-   $189 = ($1>>>0)>($186>>>0);
-   $190 = ($179|0)==($187|0);
-   $191 = $190 & $189;
-   $192 = $188 | $191;
-   if ($192) {
-    $193 = ($186|0)>(0);
-    if ($193) {
-     $$0166 = $186;
-     label = 59;
-    } else {
-     $$0166170 = 0;$197 = 84;
-     label = 61;
-    }
-   } else {
-    $$0166 = $1;
-    label = 59;
-   }
-   if ((label|0) == 59) {
-    $194 = ($$0166|0)<(53);
-    $195 = (84 - ($$0166))|0;
-    if ($194) {
-     $$0166170 = $$0166;$197 = $195;
-     label = 61;
-    } else {
-     $$pre = (+($3|0));
-     $$0151 = 0.0;$$0166169 = $$0166;$$pre$phiZ2D = $$pre;
-    }
-   }
-   if ((label|0) == 61) {
-    $196 = (+($3|0));
-    $198 = (+_scalbn(1.0,$197));
-    $199 = (+_copysignl($198,$196));
-    $$0151 = $199;$$0166169 = $$0166170;$$pre$phiZ2D = $196;
-   }
-   $200 = ($$0166169|0)<(32);
-   $201 = $$3158$lcssa != 0.0;
-   $or$cond4 = $201 & $200;
-   $202 = $$4163$lcssa & 1;
-   $203 = ($202|0)==(0);
-   $or$cond168 = $203 & $or$cond4;
-   $204 = $or$cond168&1;
-   $$6 = (($204) + ($$4163$lcssa))|0;
-   $$5 = $or$cond168 ? 0.0 : $$3158$lcssa;
-   $205 = (+($$6>>>0));
-   $206 = $$pre$phiZ2D * $205;
-   $207 = $$0151 + $206;
-   $208 = $$pre$phiZ2D * $$5;
-   $209 = $208 + $207;
-   $210 = $209 - $$0151;
-   $211 = $210 != 0.0;
-   if (!($211)) {
-    $212 = (___errno_location()|0);
-    HEAP32[$212>>2] = 34;
-   }
-   $213 = (+_scalbnl($210,$184));
-   $$0165 = $213;
-  }
- } while(0);
- return (+$$0165);
-}
-function _decfloat($0,$1,$2,$3,$4,$5) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- $4 = $4|0;
- $5 = $5|0;
- var $$ = 0, $$$0345 = 0, $$$0350 = 0, $$$0385 = 0, $$$0401 = 0, $$$5355 = 0, $$$5390 = 0, $$0329 = 0, $$0332490 = 0, $$0333 = 0, $$0334 = 0, $$0336486 = 0, $$0340496 = 0, $$0341$lcssa = 0, $$0341463 = 0, $$0341464 = 0, $$0341465 = 0, $$0341513 = 0, $$0345$lcssa = 0, $$0345467 = 0;
- var $$0345468 = 0, $$0345469 = 0, $$0345512 = 0, $$0350$lcssa554 = 0, $$0350494 = 0, $$0360 = 0.0, $$0361 = 0.0, $$0365484 = 0.0, $$0372 = 0, $$0380 = 0, $$0380$ph = 0, $$0385$lcssa553 = 0, $$0385493 = 0, $$0393 = 0, $$0396 = 0, $$0401$lcssa = 0, $$0401473 = 0, $$0401474 = 0, $$0401475 = 0, $$0401509 = 0;
- var $$1 = 0.0, $$10 = 0, $$1330$be = 0, $$1330$ph = 0, $$1335 = 0, $$1337 = 0, $$1362 = 0.0, $$1366 = 0.0, $$1373 = 0, $$1373$ph448 = 0, $$1381 = 0, $$1381$ph = 0, $$1381$ph558 = 0, $$1394$lcssa = 0, $$1394511 = 0, $$2 = 0, $$2343 = 0, $$2347 = 0, $$2352$ph449 = 0, $$2367 = 0.0;
- var $$2371$v = 0, $$2374 = 0, $$2387$ph447 = 0, $$2395 = 0, $$2398 = 0, $$2403 = 0, $$3$be = 0, $$3$lcssa = 0, $$3344503 = 0, $$3348 = 0, $$3364 = 0.0, $$3368 = 0.0, $$3375 = 0, $$3383 = 0, $$3399$lcssa = 0, $$3399510 = 0, $$3514 = 0, $$413 = 0, $$425 = 0, $$4349495 = 0;
- var $$4354 = 0, $$4354$ph = 0, $$4354$ph559 = 0, $$4376 = 0, $$4384 = 0, $$4389$ph = 0, $$4389$ph445 = 0, $$4400 = 0, $$4485 = 0, $$5 = 0, $$5$in = 0, $$5355488 = 0, $$5390487 = 0, $$6378$ph = 0, $$6489 = 0, $$9483 = 0, $$neg442 = 0, $$neg443 = 0, $$pre = 0, $$promoted = 0;
- var $$sink = 0, $$sink421$off0 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0.0, $103 = 0.0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0;
- var $116 = 0, $117 = 0, $118 = 0, $119 = 0.0, $12 = 0, $120 = 0.0, $121 = 0.0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0.0, $132 = 0.0, $133 = 0.0;
- var $134 = 0, $135 = 0, $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0.0, $144 = 0.0, $145 = 0.0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0;
- var $152 = 0, $153 = 0, $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0.0, $159 = 0.0, $16 = 0, $160 = 0.0, $161 = 0, $162 = 0.0, $163 = 0.0, $164 = 0.0, $165 = 0, $166 = 0, $167 = 0, $168 = 0.0, $169 = 0.0, $17 = 0;
- var $170 = 0, $171 = 0, $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0.0, $177 = 0.0, $178 = 0.0, $179 = 0, $18 = 0, $180 = 0.0, $181 = 0.0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0, $188 = 0;
- var $189 = 0, $19 = 0, $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0, $197 = 0, $198 = 0, $199 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0, $204 = 0, $205 = 0, $206 = 0;
- var $207 = 0, $208 = 0, $209 = 0, $21 = 0, $210 = 0, $211 = 0, $212 = 0, $213 = 0, $214 = 0, $215 = 0, $216 = 0, $217 = 0, $218 = 0, $219 = 0, $22 = 0, $220 = 0, $221 = 0, $222 = 0, $223 = 0, $224 = 0;
- var $225 = 0, $226 = 0, $227 = 0, $228 = 0, $229 = 0, $23 = 0, $230 = 0, $231 = 0, $232 = 0, $233 = 0, $234 = 0, $235 = 0, $236 = 0, $237 = 0, $238 = 0, $239 = 0, $24 = 0, $240 = 0, $241 = 0, $242 = 0;
- var $243 = 0, $244 = 0, $245 = 0, $246 = 0, $247 = 0, $248 = 0, $249 = 0, $25 = 0, $250 = 0, $251 = 0, $252 = 0, $253 = 0, $254 = 0, $255 = 0, $256 = 0, $257 = 0, $258 = 0, $259 = 0, $26 = 0, $260 = 0;
- var $261 = 0, $262 = 0, $263 = 0, $264 = 0, $265 = 0, $266 = 0, $267 = 0, $268 = 0, $269 = 0, $27 = 0, $270 = 0, $271 = 0, $272 = 0, $273 = 0, $274 = 0, $275 = 0, $276 = 0, $277 = 0, $278 = 0, $279 = 0;
- var $28 = 0, $280 = 0, $281 = 0, $282 = 0, $283 = 0, $284 = 0, $285 = 0, $286 = 0, $287 = 0, $288 = 0, $289 = 0, $29 = 0, $290 = 0, $291 = 0, $292 = 0, $293 = 0, $294 = 0, $295 = 0, $296 = 0, $297 = 0;
- var $298 = 0, $299 = 0, $30 = 0, $300 = 0, $301 = 0, $302 = 0, $303 = 0.0, $304 = 0, $305 = 0, $306 = 0.0, $307 = 0.0, $308 = 0, $309 = 0.0, $31 = 0, $310 = 0.0, $311 = 0, $312 = 0, $313 = 0, $314 = 0, $315 = 0;
- var $316 = 0, $317 = 0.0, $318 = 0.0, $319 = 0, $32 = 0, $320 = 0.0, $321 = 0.0, $322 = 0.0, $323 = 0.0, $324 = 0, $325 = 0, $326 = 0, $327 = 0, $328 = 0, $329 = 0, $33 = 0, $330 = 0, $331 = 0, $332 = 0, $333 = 0;
- var $334 = 0.0, $335 = 0.0, $336 = 0, $337 = 0.0, $338 = 0.0, $339 = 0, $34 = 0, $340 = 0, $341 = 0, $342 = 0.0, $343 = 0.0, $344 = 0.0, $345 = 0.0, $346 = 0, $347 = 0, $348 = 0.0, $349 = 0, $35 = 0, $350 = 0.0, $351 = 0.0;
- var $352 = 0.0, $353 = 0, $354 = 0, $355 = 0, $356 = 0.0, $357 = 0, $358 = 0.0, $359 = 0, $36 = 0, $360 = 0, $361 = 0, $362 = 0, $363 = 0, $364 = 0, $365 = 0.0, $366 = 0, $367 = 0, $368 = 0, $369 = 0, $37 = 0;
- var $370 = 0, $371 = 0, $372 = 0, $373 = 0, $374 = 0, $375 = 0, $376 = 0, $377 = 0, $378 = 0, $379 = 0, $38 = 0, $380 = 0, $381 = 0, $382 = 0, $383 = 0, $384 = 0, $385 = 0, $39 = 0, $40 = 0, $41 = 0;
- var $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0;
- var $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0;
- var $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0;
- var $98 = 0, $99 = 0, $cond = 0, $exitcond = 0, $exitcond551 = 0, $narrow = 0, $not$ = 0, $or$cond = 0, $or$cond11 = 0, $or$cond14 = 0, $or$cond415 = 0, $or$cond417 = 0, $or$cond419 = 0, $or$cond420 = 0, $or$cond422 = 0, $or$cond422$not = 0, $or$cond423 = 0, $or$cond426 = 0, $or$cond5 = 0, $sum = 0;
- var label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 512|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(512|0);
- $6 = sp;
- $sum = (($3) + ($2))|0;
- $7 = (0 - ($sum))|0;
- $8 = ((($0)) + 4|0);
- $9 = ((($0)) + 100|0);
- $$0329 = $1;$$0396 = 0;
- L1: while(1) {
-  switch ($$0329|0) {
-  case 46:  {
-   label = 6;
-   break L1;
-   break;
-  }
-  case 48:  {
-   break;
-  }
-  default: {
-   $$0393 = 0;$$2 = $$0329;$$2398 = $$0396;$366 = 0;$367 = 0;
-   break L1;
-  }
-  }
-  $10 = HEAP32[$8>>2]|0;
-  $11 = HEAP32[$9>>2]|0;
-  $12 = ($10>>>0)<($11>>>0);
-  if ($12) {
-   $13 = ((($10)) + 1|0);
-   HEAP32[$8>>2] = $13;
-   $14 = HEAP8[$10>>0]|0;
-   $15 = $14&255;
-   $$0329 = $15;$$0396 = 1;
-   continue;
-  } else {
-   $16 = (___shgetc($0)|0);
-   $$0329 = $16;$$0396 = 1;
-   continue;
-  }
- }
- if ((label|0) == 6) {
-  $17 = HEAP32[$8>>2]|0;
-  $18 = HEAP32[$9>>2]|0;
-  $19 = ($17>>>0)<($18>>>0);
-  if ($19) {
-   $20 = ((($17)) + 1|0);
-   HEAP32[$8>>2] = $20;
-   $21 = HEAP8[$17>>0]|0;
-   $22 = $21&255;
-   $$1330$ph = $22;
-  } else {
-   $23 = (___shgetc($0)|0);
-   $$1330$ph = $23;
-  }
-  $24 = ($$1330$ph|0)==(48);
-  if ($24) {
-   $25 = 0;$26 = 0;
-   while(1) {
-    $27 = (_i64Add(($25|0),($26|0),-1,-1)|0);
-    $28 = tempRet0;
-    $29 = HEAP32[$8>>2]|0;
-    $30 = HEAP32[$9>>2]|0;
-    $31 = ($29>>>0)<($30>>>0);
-    if ($31) {
-     $32 = ((($29)) + 1|0);
-     HEAP32[$8>>2] = $32;
-     $33 = HEAP8[$29>>0]|0;
-     $34 = $33&255;
-     $$1330$be = $34;
-    } else {
-     $35 = (___shgetc($0)|0);
-     $$1330$be = $35;
-    }
-    $36 = ($$1330$be|0)==(48);
-    if ($36) {
-     $25 = $27;$26 = $28;
-    } else {
-     $$0393 = 1;$$2 = $$1330$be;$$2398 = 1;$366 = $27;$367 = $28;
-     break;
-    }
-   }
-  } else {
-   $$0393 = 1;$$2 = $$1330$ph;$$2398 = $$0396;$366 = 0;$367 = 0;
-  }
- }
- HEAP32[$6>>2] = 0;
- $37 = (($$2) + -48)|0;
- $38 = ($37>>>0)<(10);
- $39 = ($$2|0)==(46);
- $40 = $39 | $38;
- L20: do {
-  if ($40) {
-   $41 = ((($6)) + 496|0);
-   $$0341513 = 0;$$0345512 = 0;$$0401509 = 0;$$1394511 = $$0393;$$3399510 = $$2398;$$3514 = $$2;$368 = $39;$369 = $37;$370 = $366;$371 = $367;$44 = 0;$45 = 0;
-   L22: while(1) {
-    do {
-     if ($368) {
-      $cond = ($$1394511|0)==(0);
-      if ($cond) {
-       $$2343 = $$0341513;$$2347 = $$0345512;$$2395 = 1;$$2403 = $$0401509;$$4400 = $$3399510;$372 = $44;$373 = $45;$374 = $44;$375 = $45;
-      } else {
-       break L22;
-      }
-     } else {
-      $43 = ($$0345512|0)<(125);
-      $46 = (_i64Add(($44|0),($45|0),1,0)|0);
-      $47 = tempRet0;
-      $48 = ($$3514|0)!=(48);
-      if (!($43)) {
-       if (!($48)) {
-        $$2343 = $$0341513;$$2347 = $$0345512;$$2395 = $$1394511;$$2403 = $$0401509;$$4400 = $$3399510;$372 = $370;$373 = $371;$374 = $46;$375 = $47;
-        break;
-       }
-       $57 = HEAP32[$41>>2]|0;
-       $58 = $57 | 1;
-       HEAP32[$41>>2] = $58;
-       $$2343 = $$0341513;$$2347 = $$0345512;$$2395 = $$1394511;$$2403 = $$0401509;$$4400 = $$3399510;$372 = $370;$373 = $371;$374 = $46;$375 = $47;
-       break;
-      }
-      $$$0401 = $48 ? $46 : $$0401509;
-      $49 = ($$0341513|0)==(0);
-      $$pre = (($6) + ($$0345512<<2)|0);
-      if ($49) {
-       $$sink = $369;
-      } else {
-       $50 = HEAP32[$$pre>>2]|0;
-       $51 = ($50*10)|0;
-       $52 = (($$3514) + -48)|0;
-       $53 = (($52) + ($51))|0;
-       $$sink = $53;
-      }
-      HEAP32[$$pre>>2] = $$sink;
-      $54 = (($$0341513) + 1)|0;
-      $55 = ($54|0)==(9);
-      $56 = $55&1;
-      $$$0345 = (($56) + ($$0345512))|0;
-      $$413 = $55 ? 0 : $54;
-      $$2343 = $$413;$$2347 = $$$0345;$$2395 = $$1394511;$$2403 = $$$0401;$$4400 = 1;$372 = $370;$373 = $371;$374 = $46;$375 = $47;
-     }
-    } while(0);
-    $59 = HEAP32[$8>>2]|0;
-    $60 = HEAP32[$9>>2]|0;
-    $61 = ($59>>>0)<($60>>>0);
-    if ($61) {
-     $62 = ((($59)) + 1|0);
-     HEAP32[$8>>2] = $62;
-     $63 = HEAP8[$59>>0]|0;
-     $64 = $63&255;
-     $$3$be = $64;
-    } else {
-     $65 = (___shgetc($0)|0);
-     $$3$be = $65;
-    }
-    $66 = (($$3$be) + -48)|0;
-    $67 = ($66>>>0)<(10);
-    $68 = ($$3$be|0)==(46);
-    $69 = $68 | $67;
-    if ($69) {
-     $$0341513 = $$2343;$$0345512 = $$2347;$$0401509 = $$2403;$$1394511 = $$2395;$$3399510 = $$4400;$$3514 = $$3$be;$368 = $68;$369 = $66;$370 = $372;$371 = $373;$44 = $374;$45 = $375;
-    } else {
-     $$0341$lcssa = $$2343;$$0345$lcssa = $$2347;$$0401$lcssa = $$2403;$$1394$lcssa = $$2395;$$3$lcssa = $$3$be;$$3399$lcssa = $$4400;$72 = $372;$73 = $374;$75 = $373;$76 = $375;
-     label = 29;
-     break L20;
-    }
-   }
-   $42 = ($$3399510|0)!=(0);
-   $$0341465 = $$0341513;$$0345469 = $$0345512;$$0401475 = $$0401509;$376 = $44;$377 = $45;$378 = $370;$379 = $371;$380 = $42;
-   label = 37;
-  } else {
-   $$0341$lcssa = 0;$$0345$lcssa = 0;$$0401$lcssa = 0;$$1394$lcssa = $$0393;$$3$lcssa = $$2;$$3399$lcssa = $$2398;$72 = $366;$73 = 0;$75 = $367;$76 = 0;
-   label = 29;
-  }
- } while(0);
- do {
-  if ((label|0) == 29) {
-   $70 = ($$1394$lcssa|0)==(0);
-   $71 = $70 ? $73 : $72;
-   $74 = $70 ? $76 : $75;
-   $77 = ($$3399$lcssa|0)!=(0);
-   $78 = $$3$lcssa | 32;
-   $79 = ($78|0)==(101);
-   $or$cond415 = $77 & $79;
-   if (!($or$cond415)) {
-    $94 = ($$3$lcssa|0)>(-1);
-    if ($94) {
-     $$0341465 = $$0341$lcssa;$$0345469 = $$0345$lcssa;$$0401475 = $$0401$lcssa;$376 = $73;$377 = $76;$378 = $71;$379 = $74;$380 = $77;
-     label = 37;
-     break;
-    } else {
-     $$0341464 = $$0341$lcssa;$$0345468 = $$0345$lcssa;$$0401474 = $$0401$lcssa;$381 = $73;$382 = $76;$383 = $77;$384 = $71;$385 = $74;
-     label = 39;
-     break;
-    }
-   }
-   $80 = (_scanexp($0,$5)|0);
-   $81 = tempRet0;
-   $82 = ($80|0)==(0);
-   $83 = ($81|0)==(-2147483648);
-   $84 = $82 & $83;
-   if ($84) {
-    $85 = ($5|0)==(0);
-    if ($85) {
-     ___shlim($0,0);
-     $$1 = 0.0;
-     break;
-    }
-    $86 = HEAP32[$9>>2]|0;
-    $87 = ($86|0)==(0|0);
-    if ($87) {
-     $90 = 0;$91 = 0;
-    } else {
-     $88 = HEAP32[$8>>2]|0;
-     $89 = ((($88)) + -1|0);
-     HEAP32[$8>>2] = $89;
-     $90 = 0;$91 = 0;
-    }
-   } else {
-    $90 = $80;$91 = $81;
-   }
-   $92 = (_i64Add(($90|0),($91|0),($71|0),($74|0))|0);
-   $93 = tempRet0;
-   $$0341463 = $$0341$lcssa;$$0345467 = $$0345$lcssa;$$0401473 = $$0401$lcssa;$105 = $92;$106 = $73;$108 = $93;$109 = $76;
-   label = 41;
-  }
- } while(0);
- if ((label|0) == 37) {
-  $95 = HEAP32[$9>>2]|0;
-  $96 = ($95|0)==(0|0);
-  if ($96) {
-   $$0341464 = $$0341465;$$0345468 = $$0345469;$$0401474 = $$0401475;$381 = $376;$382 = $377;$383 = $380;$384 = $378;$385 = $379;
-   label = 39;
-  } else {
-   $97 = HEAP32[$8>>2]|0;
-   $98 = ((($97)) + -1|0);
-   HEAP32[$8>>2] = $98;
-   if ($380) {
-    $$0341463 = $$0341465;$$0345467 = $$0345469;$$0401473 = $$0401475;$105 = $378;$106 = $376;$108 = $379;$109 = $377;
-    label = 41;
-   } else {
-    label = 40;
-   }
-  }
- }
- if ((label|0) == 39) {
-  if ($383) {
-   $$0341463 = $$0341464;$$0345467 = $$0345468;$$0401473 = $$0401474;$105 = $384;$106 = $381;$108 = $385;$109 = $382;
-   label = 41;
-  } else {
-   label = 40;
-  }
- }
- do {
-  if ((label|0) == 40) {
-   $99 = (___errno_location()|0);
-   HEAP32[$99>>2] = 22;
-   ___shlim($0,0);
-   $$1 = 0.0;
-  }
-  else if ((label|0) == 41) {
-   $100 = HEAP32[$6>>2]|0;
-   $101 = ($100|0)==(0);
-   if ($101) {
-    $102 = (+($4|0));
-    $103 = $102 * 0.0;
-    $$1 = $103;
-    break;
-   }
-   $104 = ($105|0)==($106|0);
-   $107 = ($108|0)==($109|0);
-   $110 = $104 & $107;
-   $111 = ($109|0)<(0);
-   $112 = ($106>>>0)<(10);
-   $113 = ($109|0)==(0);
-   $114 = $113 & $112;
-   $115 = $111 | $114;
-   $or$cond = $115 & $110;
-   if ($or$cond) {
-    $116 = ($2|0)>(30);
-    $117 = $100 >>> $2;
-    $118 = ($117|0)==(0);
-    $or$cond417 = $116 | $118;
-    if ($or$cond417) {
-     $119 = (+($4|0));
-     $120 = (+($100>>>0));
-     $121 = $119 * $120;
-     $$1 = $121;
-     break;
-    }
-   }
-   $122 = (($3|0) / -2)&-1;
-   $123 = ($122|0)<(0);
-   $124 = $123 << 31 >> 31;
-   $125 = ($108|0)>($124|0);
-   $126 = ($105>>>0)>($122>>>0);
-   $127 = ($108|0)==($124|0);
-   $128 = $127 & $126;
-   $129 = $125 | $128;
-   if ($129) {
-    $130 = (___errno_location()|0);
-    HEAP32[$130>>2] = 34;
-    $131 = (+($4|0));
-    $132 = $131 * 1.7976931348623157E+308;
-    $133 = $132 * 1.7976931348623157E+308;
-    $$1 = $133;
-    break;
-   }
-   $134 = (($3) + -106)|0;
-   $135 = ($134|0)<(0);
-   $136 = $135 << 31 >> 31;
-   $137 = ($108|0)<($136|0);
-   $138 = ($105>>>0)<($134>>>0);
-   $139 = ($108|0)==($136|0);
-   $140 = $139 & $138;
-   $141 = $137 | $140;
-   if ($141) {
-    $142 = (___errno_location()|0);
-    HEAP32[$142>>2] = 34;
-    $143 = (+($4|0));
-    $144 = $143 * 2.2250738585072014E-308;
-    $145 = $144 * 2.2250738585072014E-308;
-    $$1 = $145;
-    break;
-   }
-   $146 = ($$0341463|0)==(0);
-   if ($146) {
-    $$3348 = $$0345467;
-   } else {
-    $147 = ($$0341463|0)<(9);
-    if ($147) {
-     $148 = (($6) + ($$0345467<<2)|0);
-     $$promoted = HEAP32[$148>>2]|0;
-     $$3344503 = $$0341463;$150 = $$promoted;
-     while(1) {
-      $149 = ($150*10)|0;
-      $151 = (($$3344503) + 1)|0;
-      $exitcond551 = ($151|0)==(9);
-      if ($exitcond551) {
-       break;
-      } else {
-       $$3344503 = $151;$150 = $149;
-      }
-     }
-     HEAP32[$148>>2] = $149;
-    }
-    $152 = (($$0345467) + 1)|0;
-    $$3348 = $152;
-   }
-   $153 = ($$0401473|0)<(9);
-   if ($153) {
-    $154 = ($$0401473|0)<=($105|0);
-    $155 = ($105|0)<(18);
-    $or$cond5 = $154 & $155;
-    if ($or$cond5) {
-     $156 = ($105|0)==(9);
-     $157 = HEAP32[$6>>2]|0;
-     if ($156) {
-      $158 = (+($4|0));
-      $159 = (+($157>>>0));
-      $160 = $158 * $159;
-      $$1 = $160;
-      break;
-     }
-     $161 = ($105|0)<(9);
-     if ($161) {
-      $162 = (+($4|0));
-      $163 = (+($157>>>0));
-      $164 = $162 * $163;
-      $165 = (8 - ($105))|0;
-      $166 = (3304 + ($165<<2)|0);
-      $167 = HEAP32[$166>>2]|0;
-      $168 = (+($167|0));
-      $169 = $164 / $168;
-      $$1 = $169;
-      break;
-     }
-     $$neg442 = Math_imul($105, -3)|0;
-     $$neg443 = (($2) + 27)|0;
-     $170 = (($$neg443) + ($$neg442))|0;
-     $171 = ($170|0)>(30);
-     $172 = $157 >>> $170;
-     $173 = ($172|0)==(0);
-     $or$cond419 = $171 | $173;
-     if ($or$cond419) {
-      $174 = (($105) + -10)|0;
-      $175 = (3304 + ($174<<2)|0);
-      $176 = (+($4|0));
-      $177 = (+($157>>>0));
-      $178 = $176 * $177;
-      $179 = HEAP32[$175>>2]|0;
-      $180 = (+($179|0));
-      $181 = $178 * $180;
-      $$1 = $181;
-      break;
-     }
-    }
-   }
-   $182 = (($105|0) % 9)&-1;
-   $183 = ($182|0)==(0);
-   if ($183) {
-    $$0380$ph = 0;$$1373$ph448 = $$3348;$$2352$ph449 = 0;$$2387$ph447 = $105;
-   } else {
-    $184 = ($105|0)>(-1);
-    $185 = (($182) + 9)|0;
-    $186 = $184 ? $182 : $185;
-    $187 = (8 - ($186))|0;
-    $188 = (3304 + ($187<<2)|0);
-    $189 = HEAP32[$188>>2]|0;
-    $190 = ($$3348|0)==(0);
-    if ($190) {
-     $$0350$lcssa554 = 0;$$0372 = 0;$$0385$lcssa553 = $105;
-    } else {
-     $191 = (1000000000 / ($189|0))&-1;
-     $$0340496 = 0;$$0350494 = 0;$$0385493 = $105;$$4349495 = 0;
-     while(1) {
-      $192 = (($6) + ($$4349495<<2)|0);
-      $193 = HEAP32[$192>>2]|0;
-      $194 = (($193>>>0) % ($189>>>0))&-1;
-      $195 = (($193>>>0) / ($189>>>0))&-1;
-      $196 = (($195) + ($$0340496))|0;
-      HEAP32[$192>>2] = $196;
-      $197 = Math_imul($191, $194)|0;
-      $198 = ($$4349495|0)==($$0350494|0);
-      $199 = ($196|0)==(0);
-      $or$cond420 = $198 & $199;
-      $200 = (($$0350494) + 1)|0;
-      $201 = $200 & 127;
-      $202 = (($$0385493) + -9)|0;
-      $$$0385 = $or$cond420 ? $202 : $$0385493;
-      $$$0350 = $or$cond420 ? $201 : $$0350494;
-      $203 = (($$4349495) + 1)|0;
-      $204 = ($203|0)==($$3348|0);
-      if ($204) {
-       break;
-      } else {
-       $$0340496 = $197;$$0350494 = $$$0350;$$0385493 = $$$0385;$$4349495 = $203;
-      }
-     }
-     $205 = ($197|0)==(0);
-     if ($205) {
-      $$0350$lcssa554 = $$$0350;$$0372 = $$3348;$$0385$lcssa553 = $$$0385;
-     } else {
-      $206 = (($6) + ($$3348<<2)|0);
-      $207 = (($$3348) + 1)|0;
-      HEAP32[$206>>2] = $197;
-      $$0350$lcssa554 = $$$0350;$$0372 = $207;$$0385$lcssa553 = $$$0385;
-     }
-    }
-    $208 = (9 - ($186))|0;
-    $209 = (($208) + ($$0385$lcssa553))|0;
-    $$0380$ph = 0;$$1373$ph448 = $$0372;$$2352$ph449 = $$0350$lcssa554;$$2387$ph447 = $209;
-   }
-   L101: while(1) {
-    $210 = ($$2387$ph447|0)<(18);
-    $211 = ($$2387$ph447|0)==(18);
-    $212 = (($6) + ($$2352$ph449<<2)|0);
-    $$0380 = $$0380$ph;$$1373 = $$1373$ph448;
-    while(1) {
-     if (!($210)) {
-      if (!($211)) {
-       $$1381$ph = $$0380;$$4354$ph = $$2352$ph449;$$4389$ph445 = $$2387$ph447;$$6378$ph = $$1373;
-       break L101;
-      }
-      $213 = HEAP32[$212>>2]|0;
-      $214 = ($213>>>0)<(9007199);
-      if (!($214)) {
-       $$1381$ph = $$0380;$$4354$ph = $$2352$ph449;$$4389$ph445 = 18;$$6378$ph = $$1373;
-       break L101;
-      }
-     }
-     $215 = (($$1373) + 127)|0;
-     $$0334 = 0;$$2374 = $$1373;$$5$in = $215;
-     while(1) {
-      $$5 = $$5$in & 127;
-      $216 = (($6) + ($$5<<2)|0);
-      $217 = HEAP32[$216>>2]|0;
-      $218 = (_bitshift64Shl(($217|0),0,29)|0);
-      $219 = tempRet0;
-      $220 = (_i64Add(($218|0),($219|0),($$0334|0),0)|0);
-      $221 = tempRet0;
-      $222 = ($221>>>0)>(0);
-      $223 = ($220>>>0)>(1000000000);
-      $224 = ($221|0)==(0);
-      $225 = $224 & $223;
-      $226 = $222 | $225;
-      if ($226) {
-       $227 = (___udivdi3(($220|0),($221|0),1000000000,0)|0);
-       $228 = tempRet0;
-       $229 = (___uremdi3(($220|0),($221|0),1000000000,0)|0);
-       $230 = tempRet0;
-       $$1335 = $227;$$sink421$off0 = $229;
-      } else {
-       $$1335 = 0;$$sink421$off0 = $220;
-      }
-      HEAP32[$216>>2] = $$sink421$off0;
-      $231 = (($$2374) + 127)|0;
-      $232 = $231 & 127;
-      $233 = ($$5|0)!=($232|0);
-      $234 = ($$5|0)==($$2352$ph449|0);
-      $or$cond422 = $233 | $234;
-      $or$cond422$not = $or$cond422 ^ 1;
-      $235 = ($$sink421$off0|0)==(0);
-      $or$cond423 = $235 & $or$cond422$not;
-      $$3375 = $or$cond423 ? $$5 : $$2374;
-      $236 = (($$5) + -1)|0;
-      if ($234) {
-       break;
-      } else {
-       $$0334 = $$1335;$$2374 = $$3375;$$5$in = $236;
-      }
-     }
-     $237 = (($$0380) + -29)|0;
-     $238 = ($$1335|0)==(0);
-     if ($238) {
-      $$0380 = $237;$$1373 = $$3375;
-     } else {
-      break;
-     }
-    }
-    $239 = (($$2387$ph447) + 9)|0;
-    $240 = (($$2352$ph449) + 127)|0;
-    $241 = $240 & 127;
-    $242 = ($241|0)==($$3375|0);
-    $243 = (($$3375) + 127)|0;
-    $244 = $243 & 127;
-    $245 = (($$3375) + 126)|0;
-    $246 = $245 & 127;
-    $247 = (($6) + ($246<<2)|0);
-    if ($242) {
-     $248 = (($6) + ($244<<2)|0);
-     $249 = HEAP32[$248>>2]|0;
-     $250 = HEAP32[$247>>2]|0;
-     $251 = $250 | $249;
-     HEAP32[$247>>2] = $251;
-     $$4376 = $244;
-    } else {
-     $$4376 = $$3375;
-    }
-    $252 = (($6) + ($241<<2)|0);
-    HEAP32[$252>>2] = $$1335;
-    $$0380$ph = $237;$$1373$ph448 = $$4376;$$2352$ph449 = $241;$$2387$ph447 = $239;
-   }
-   L119: while(1) {
-    $289 = (($$6378$ph) + 1)|0;
-    $287 = $289 & 127;
-    $290 = (($$6378$ph) + 127)|0;
-    $291 = $290 & 127;
-    $292 = (($6) + ($291<<2)|0);
-    $$1381$ph558 = $$1381$ph;$$4354$ph559 = $$4354$ph;$$4389$ph = $$4389$ph445;
-    while(1) {
-     $265 = ($$4389$ph|0)==(18);
-     $293 = ($$4389$ph|0)>(27);
-     $$425 = $293 ? 9 : 1;
-     $$1381 = $$1381$ph558;$$4354 = $$4354$ph559;
-     while(1) {
-      $$0336486 = 0;
-      while(1) {
-       $253 = (($$0336486) + ($$4354))|0;
-       $254 = $253 & 127;
-       $255 = ($254|0)==($$6378$ph|0);
-       if ($255) {
-        $$1337 = 2;
-        label = 88;
-        break;
-       }
-       $256 = (($6) + ($254<<2)|0);
-       $257 = HEAP32[$256>>2]|0;
-       $258 = (3336 + ($$0336486<<2)|0);
-       $259 = HEAP32[$258>>2]|0;
-       $260 = ($257>>>0)<($259>>>0);
-       if ($260) {
-        $$1337 = 2;
-        label = 88;
-        break;
-       }
-       $261 = ($257>>>0)>($259>>>0);
-       if ($261) {
-        break;
-       }
-       $262 = (($$0336486) + 1)|0;
-       $263 = ($262|0)<(2);
-       if ($263) {
-        $$0336486 = $262;
-       } else {
-        $$1337 = $262;
-        label = 88;
-        break;
-       }
-      }
-      if ((label|0) == 88) {
-       label = 0;
-       $264 = ($$1337|0)==(2);
-       $or$cond11 = $265 & $264;
-       if ($or$cond11) {
-        $$0365484 = 0.0;$$4485 = 0;$$9483 = $$6378$ph;
-        break L119;
-       }
-      }
-      $266 = (($$425) + ($$1381))|0;
-      $267 = ($$4354|0)==($$6378$ph|0);
-      if ($267) {
-       $$1381 = $266;$$4354 = $$6378$ph;
-      } else {
-       break;
-      }
-     }
-     $268 = 1 << $$425;
-     $269 = (($268) + -1)|0;
-     $270 = 1000000000 >>> $$425;
-     $$0332490 = 0;$$5355488 = $$4354;$$5390487 = $$4389$ph;$$6489 = $$4354;
-     while(1) {
-      $271 = (($6) + ($$6489<<2)|0);
-      $272 = HEAP32[$271>>2]|0;
-      $273 = $272 & $269;
-      $274 = $272 >>> $$425;
-      $275 = (($274) + ($$0332490))|0;
-      HEAP32[$271>>2] = $275;
-      $276 = Math_imul($273, $270)|0;
-      $277 = ($$6489|0)==($$5355488|0);
-      $278 = ($275|0)==(0);
-      $or$cond426 = $277 & $278;
-      $279 = (($$5355488) + 1)|0;
-      $280 = $279 & 127;
-      $281 = (($$5390487) + -9)|0;
-      $$$5390 = $or$cond426 ? $281 : $$5390487;
-      $$$5355 = $or$cond426 ? $280 : $$5355488;
-      $282 = (($$6489) + 1)|0;
-      $283 = $282 & 127;
-      $284 = ($283|0)==($$6378$ph|0);
-      if ($284) {
-       break;
-      } else {
-       $$0332490 = $276;$$5355488 = $$$5355;$$5390487 = $$$5390;$$6489 = $283;
-      }
-     }
-     $285 = ($276|0)==(0);
-     if ($285) {
-      $$1381$ph558 = $266;$$4354$ph559 = $$$5355;$$4389$ph = $$$5390;
-      continue;
-     }
-     $286 = ($287|0)==($$$5355|0);
-     if (!($286)) {
-      break;
-     }
-     $294 = HEAP32[$292>>2]|0;
-     $295 = $294 | 1;
-     HEAP32[$292>>2] = $295;
-     $$1381$ph558 = $266;$$4354$ph559 = $$$5355;$$4389$ph = $$$5390;
-    }
-    $288 = (($6) + ($$6378$ph<<2)|0);
-    HEAP32[$288>>2] = $276;
-    $$1381$ph = $266;$$4354$ph = $$$5355;$$4389$ph445 = $$$5390;$$6378$ph = $287;
-   }
-   while(1) {
-    $296 = (($$4485) + ($$4354))|0;
-    $297 = $296 & 127;
-    $298 = ($297|0)==($$9483|0);
-    $299 = (($$9483) + 1)|0;
-    $300 = $299 & 127;
-    if ($298) {
-     $301 = (($300) + -1)|0;
-     $302 = (($6) + ($301<<2)|0);
-     HEAP32[$302>>2] = 0;
-     $$10 = $300;
-    } else {
-     $$10 = $$9483;
-    }
-    $303 = $$0365484 * 1.0E+9;
-    $304 = (($6) + ($297<<2)|0);
-    $305 = HEAP32[$304>>2]|0;
-    $306 = (+($305>>>0));
-    $307 = $303 + $306;
-    $308 = (($$4485) + 1)|0;
-    $exitcond = ($308|0)==(2);
-    if ($exitcond) {
-     break;
-    } else {
-     $$0365484 = $307;$$4485 = $308;$$9483 = $$10;
-    }
-   }
-   $309 = (+($4|0));
-   $310 = $309 * $307;
-   $311 = (($$1381) + 53)|0;
-   $312 = (($311) - ($3))|0;
-   $313 = ($312|0)<($2|0);
-   $314 = ($312|0)>(0);
-   $$ = $314 ? $312 : 0;
-   $$0333 = $313 ? $$ : $2;
-   $315 = ($$0333|0)<(53);
-   if ($315) {
-    $316 = (105 - ($$0333))|0;
-    $317 = (+_scalbn(1.0,$316));
-    $318 = (+_copysignl($317,$310));
-    $319 = (53 - ($$0333))|0;
-    $320 = (+_scalbn(1.0,$319));
-    $321 = (+_fmodl($310,$320));
-    $322 = $310 - $321;
-    $323 = $318 + $322;
-    $$0360 = $318;$$0361 = $321;$$1366 = $323;
-   } else {
-    $$0360 = 0.0;$$0361 = 0.0;$$1366 = $310;
-   }
-   $324 = (($$4354) + 2)|0;
-   $325 = $324 & 127;
-   $326 = ($325|0)==($$10|0);
-   if ($326) {
-    $$3364 = $$0361;
-   } else {
-    $327 = (($6) + ($325<<2)|0);
-    $328 = HEAP32[$327>>2]|0;
-    $329 = ($328>>>0)<(500000000);
-    do {
-     if ($329) {
-      $330 = ($328|0)==(0);
-      if ($330) {
-       $331 = (($$4354) + 3)|0;
-       $332 = $331 & 127;
-       $333 = ($332|0)==($$10|0);
-       if ($333) {
-        $$1362 = $$0361;
-        break;
-       }
-      }
-      $334 = $309 * 0.25;
-      $335 = $334 + $$0361;
-      $$1362 = $335;
-     } else {
-      $336 = ($328|0)==(500000000);
-      if (!($336)) {
-       $337 = $309 * 0.75;
-       $338 = $337 + $$0361;
-       $$1362 = $338;
-       break;
-      }
-      $339 = (($$4354) + 3)|0;
-      $340 = $339 & 127;
-      $341 = ($340|0)==($$10|0);
-      if ($341) {
-       $342 = $309 * 0.5;
-       $343 = $342 + $$0361;
-       $$1362 = $343;
-       break;
-      } else {
-       $344 = $309 * 0.75;
-       $345 = $344 + $$0361;
-       $$1362 = $345;
-       break;
-      }
-     }
-    } while(0);
-    $346 = (53 - ($$0333))|0;
-    $347 = ($346|0)>(1);
-    if ($347) {
-     $348 = (+_fmodl($$1362,1.0));
-     $349 = $348 != 0.0;
-     if ($349) {
-      $$3364 = $$1362;
-     } else {
-      $350 = $$1362 + 1.0;
-      $$3364 = $350;
-     }
-    } else {
-     $$3364 = $$1362;
-    }
-   }
-   $351 = $$1366 + $$3364;
-   $352 = $351 - $$0360;
-   $353 = $311 & 2147483647;
-   $354 = (-2 - ($sum))|0;
-   $355 = ($353|0)>($354|0);
-   do {
-    if ($355) {
-     $356 = (+Math_abs((+$352)));
-     $357 = !($356 >= 9007199254740992.0);
-     $358 = $352 * 0.5;
-     $not$ = $357 ^ 1;
-     $359 = $not$&1;
-     $$3383 = (($359) + ($$1381))|0;
-     $$2367 = $357 ? $352 : $358;
-     $360 = (($$3383) + 50)|0;
-     $361 = ($360|0)>($7|0);
-     if (!($361)) {
-      $362 = ($$0333|0)!=($312|0);
-      $narrow = $362 | $357;
-      $$2371$v = $313 & $narrow;
-      $363 = $$3364 != 0.0;
-      $or$cond14 = $363 & $$2371$v;
-      if (!($or$cond14)) {
-       $$3368 = $$2367;$$4384 = $$3383;
-       break;
-      }
-     }
-     $364 = (___errno_location()|0);
-     HEAP32[$364>>2] = 34;
-     $$3368 = $$2367;$$4384 = $$3383;
-    } else {
-     $$3368 = $352;$$4384 = $$1381;
-    }
-   } while(0);
-   $365 = (+_scalbnl($$3368,$$4384));
-   $$1 = $365;
-  }
- } while(0);
- STACKTOP = sp;return (+$$1);
-}
-function _scanexp($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $$0 = 0, $$04861 = 0, $$049 = 0, $$1$be = 0, $$160 = 0, $$2$be = 0, $$2$lcssa = 0, $$254 = 0, $$3$be = 0, $$lcssa = 0, $$pre = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0;
- var $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0;
- var $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0;
- var $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0;
- var $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0;
- var $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $or$cond3 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- $2 = ((($0)) + 4|0);
- $3 = HEAP32[$2>>2]|0;
- $4 = ((($0)) + 100|0);
- $5 = HEAP32[$4>>2]|0;
- $6 = ($3>>>0)<($5>>>0);
- if ($6) {
-  $7 = ((($3)) + 1|0);
-  HEAP32[$2>>2] = $7;
-  $8 = HEAP8[$3>>0]|0;
-  $9 = $8&255;
-  $11 = $9;
- } else {
-  $10 = (___shgetc($0)|0);
-  $11 = $10;
- }
- switch ($11|0) {
- case 43: case 45:  {
-  $12 = ($11|0)==(45);
-  $13 = $12&1;
-  $14 = HEAP32[$2>>2]|0;
-  $15 = HEAP32[$4>>2]|0;
-  $16 = ($14>>>0)<($15>>>0);
-  if ($16) {
-   $17 = ((($14)) + 1|0);
-   HEAP32[$2>>2] = $17;
-   $18 = HEAP8[$14>>0]|0;
-   $19 = $18&255;
-   $22 = $19;
-  } else {
-   $20 = (___shgetc($0)|0);
-   $22 = $20;
-  }
-  $21 = (($22) + -48)|0;
-  $23 = ($21>>>0)>(9);
-  $24 = ($1|0)!=(0);
-  $or$cond3 = $24 & $23;
-  if ($or$cond3) {
-   $25 = HEAP32[$4>>2]|0;
-   $26 = ($25|0)==(0|0);
-   if ($26) {
-    $$0 = $13;$$049 = $22;
-   } else {
-    $27 = HEAP32[$2>>2]|0;
-    $28 = ((($27)) + -1|0);
-    HEAP32[$2>>2] = $28;
-    $$0 = $13;$$049 = $22;
-   }
-  } else {
-   $$0 = $13;$$049 = $22;
-  }
-  break;
- }
- default: {
-  $$0 = 0;$$049 = $11;
- }
- }
- $29 = (($$049) + -48)|0;
- $30 = ($29>>>0)>(9);
- if ($30) {
-  $31 = HEAP32[$4>>2]|0;
-  $32 = ($31|0)==(0|0);
-  if ($32) {
-   $100 = -2147483648;$101 = 0;
-  } else {
-   $33 = HEAP32[$2>>2]|0;
-   $34 = ((($33)) + -1|0);
-   HEAP32[$2>>2] = $34;
-   $100 = -2147483648;$101 = 0;
-  }
- } else {
-  $$04861 = 0;$$160 = $$049;
-  while(1) {
-   $35 = ($$04861*10)|0;
-   $36 = (($$160) + -48)|0;
-   $37 = (($36) + ($35))|0;
-   $38 = HEAP32[$2>>2]|0;
-   $39 = HEAP32[$4>>2]|0;
-   $40 = ($38>>>0)<($39>>>0);
-   if ($40) {
-    $41 = ((($38)) + 1|0);
-    HEAP32[$2>>2] = $41;
-    $42 = HEAP8[$38>>0]|0;
-    $43 = $42&255;
-    $$1$be = $43;
-   } else {
-    $44 = (___shgetc($0)|0);
-    $$1$be = $44;
-   }
-   $45 = (($$1$be) + -48)|0;
-   $46 = ($45>>>0)<(10);
-   $47 = ($37|0)<(214748364);
-   $48 = $46 & $47;
-   if ($48) {
-    $$04861 = $37;$$160 = $$1$be;
-   } else {
-    break;
-   }
-  }
-  $49 = ($37|0)<(0);
-  $50 = $49 << 31 >> 31;
-  $51 = (($$1$be) + -48)|0;
-  $52 = ($51>>>0)<(10);
-  if ($52) {
-   $$254 = $$1$be;$56 = $37;$57 = $50;
-   while(1) {
-    $58 = (___muldi3(($56|0),($57|0),10,0)|0);
-    $59 = tempRet0;
-    $60 = ($$254|0)<(0);
-    $61 = $60 << 31 >> 31;
-    $62 = (_i64Add(($$254|0),($61|0),-48,-1)|0);
-    $63 = tempRet0;
-    $64 = (_i64Add(($62|0),($63|0),($58|0),($59|0))|0);
-    $65 = tempRet0;
-    $66 = HEAP32[$2>>2]|0;
-    $67 = HEAP32[$4>>2]|0;
-    $68 = ($66>>>0)<($67>>>0);
-    if ($68) {
-     $69 = ((($66)) + 1|0);
-     HEAP32[$2>>2] = $69;
-     $70 = HEAP8[$66>>0]|0;
-     $71 = $70&255;
-     $$2$be = $71;
-    } else {
-     $72 = (___shgetc($0)|0);
-     $$2$be = $72;
-    }
-    $73 = (($$2$be) + -48)|0;
-    $74 = ($73>>>0)<(10);
-    $75 = ($65|0)<(21474836);
-    $76 = ($64>>>0)<(2061584302);
-    $77 = ($65|0)==(21474836);
-    $78 = $77 & $76;
-    $79 = $75 | $78;
-    $80 = $74 & $79;
-    if ($80) {
-     $$254 = $$2$be;$56 = $64;$57 = $65;
-    } else {
-     $$2$lcssa = $$2$be;$94 = $64;$95 = $65;
-     break;
-    }
-   }
-  } else {
-   $$2$lcssa = $$1$be;$94 = $37;$95 = $50;
-  }
-  $53 = (($$2$lcssa) + -48)|0;
-  $54 = ($53>>>0)<(10);
-  $55 = HEAP32[$4>>2]|0;
-  if ($54) {
-   $83 = $55;
-   while(1) {
-    $81 = HEAP32[$2>>2]|0;
-    $82 = ($81>>>0)<($83>>>0);
-    if ($82) {
-     $84 = ((($81)) + 1|0);
-     HEAP32[$2>>2] = $84;
-     $85 = HEAP8[$81>>0]|0;
-     $86 = $85&255;
-     $$3$be = $86;$102 = $83;
-    } else {
-     $87 = (___shgetc($0)|0);
-     $$pre = HEAP32[$4>>2]|0;
-     $$3$be = $87;$102 = $$pre;
-    }
-    $88 = (($$3$be) + -48)|0;
-    $89 = ($88>>>0)<(10);
-    if ($89) {
-     $83 = $102;
-    } else {
-     $$lcssa = $102;
-     break;
-    }
-   }
-  } else {
-   $$lcssa = $55;
-  }
-  $90 = ($$lcssa|0)==(0|0);
-  if (!($90)) {
-   $91 = HEAP32[$2>>2]|0;
-   $92 = ((($91)) + -1|0);
-   HEAP32[$2>>2] = $92;
-  }
-  $93 = ($$0|0)!=(0);
-  $96 = (_i64Subtract(0,0,($94|0),($95|0))|0);
-  $97 = tempRet0;
-  $98 = $93 ? $96 : $94;
-  $99 = $93 ? $97 : $95;
-  $100 = $99;$101 = $98;
- }
- tempRet0 = ($100);
- return ($101|0);
-}
-function _scalbn($0,$1) {
- $0 = +$0;
- $1 = $1|0;
- var $$ = 0, $$$ = 0, $$0 = 0.0, $$020 = 0, $$1 = 0, $$1$ = 0, $$21 = 0.0, $$22 = 0.0, $10 = 0.0, $11 = 0, $12 = 0, $13 = 0.0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0.0, $2 = 0, $20 = 0.0;
- var $3 = 0.0, $4 = 0, $5 = 0, $6 = 0.0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- $2 = ($1|0)>(1023);
- if ($2) {
-  $3 = $0 * 8.9884656743115795E+307;
-  $4 = (($1) + -1023)|0;
-  $5 = ($4|0)>(1023);
-  $6 = $3 * 8.9884656743115795E+307;
-  $7 = (($1) + -2046)|0;
-  $8 = ($7|0)<(1023);
-  $$ = $8 ? $7 : 1023;
-  $$$ = $5 ? $$ : $4;
-  $$21 = $5 ? $6 : $3;
-  $$0 = $$21;$$020 = $$$;
- } else {
-  $9 = ($1|0)<(-1022);
-  if ($9) {
-   $10 = $0 * 2.2250738585072014E-308;
-   $11 = (($1) + 1022)|0;
-   $12 = ($11|0)<(-1022);
-   $13 = $10 * 2.2250738585072014E-308;
-   $14 = (($1) + 2044)|0;
-   $15 = ($14|0)>(-1022);
-   $$1 = $15 ? $14 : -1022;
-   $$1$ = $12 ? $$1 : $11;
-   $$22 = $12 ? $13 : $10;
-   $$0 = $$22;$$020 = $$1$;
-  } else {
-   $$0 = $0;$$020 = $1;
-  }
- }
- $16 = (($$020) + 1023)|0;
- $17 = (_bitshift64Shl(($16|0),0,52)|0);
- $18 = tempRet0;
- HEAP32[tempDoublePtr>>2] = $17;HEAP32[tempDoublePtr+4>>2] = $18;$19 = +HEAPF64[tempDoublePtr>>3];
- $20 = $$0 * $19;
- return (+$20);
-}
-function _copysignl($0,$1) {
- $0 = +$0;
- $1 = +$1;
- var $2 = 0.0, label = 0, sp = 0;
- sp = STACKTOP;
- $2 = (+_copysign($0,$1));
- return (+$2);
-}
-function _fmodl($0,$1) {
- $0 = +$0;
- $1 = +$1;
- var $2 = 0.0, label = 0, sp = 0;
- sp = STACKTOP;
- $2 = (+_fmod($0,$1));
- return (+$2);
-}
-function _scalbnl($0,$1) {
- $0 = +$0;
- $1 = $1|0;
- var $2 = 0.0, label = 0, sp = 0;
- sp = STACKTOP;
- $2 = (+_scalbn($0,$1));
- return (+$2);
-}
-function _fmod($0,$1) {
- $0 = +$0;
- $1 = +$1;
- var $$ = 0.0, $$070 = 0.0, $$071$lcssa = 0, $$07194 = 0, $$073$lcssa = 0, $$073100 = 0, $$172$ph = 0, $$174 = 0, $$275$lcssa = 0, $$27586 = 0, $$376$lcssa = 0, $$37683 = 0, $$lcssa = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0.0, $104 = 0, $105 = 0;
- var $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0;
- var $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0.0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0, $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0;
- var $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0, $152 = 0, $153 = 0, $154 = 0.0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0;
- var $160 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0.0, $28 = 0.0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0;
- var $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0.0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0;
- var $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0;
- var $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0;
- var $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $or$cond = 0, label = 0, sp = 0;
- sp = STACKTOP;
- HEAPF64[tempDoublePtr>>3] = $0;$2 = HEAP32[tempDoublePtr>>2]|0;
- $3 = HEAP32[tempDoublePtr+4>>2]|0;
- HEAPF64[tempDoublePtr>>3] = $1;$4 = HEAP32[tempDoublePtr>>2]|0;
- $5 = HEAP32[tempDoublePtr+4>>2]|0;
- $6 = (_bitshift64Lshr(($2|0),($3|0),52)|0);
- $7 = tempRet0;
- $8 = $6 & 2047;
- $9 = (_bitshift64Lshr(($4|0),($5|0),52)|0);
- $10 = tempRet0;
- $11 = $9 & 2047;
- $12 = $3 & -2147483648;
- $13 = (_bitshift64Shl(($4|0),($5|0),1)|0);
- $14 = tempRet0;
- $15 = ($13|0)==(0);
- $16 = ($14|0)==(0);
- $17 = $15 & $16;
- L1: do {
-  if ($17) {
-   label = 3;
-  } else {
-   $18 = (___DOUBLE_BITS_272($1)|0);
-   $19 = tempRet0;
-   $20 = $19 & 2147483647;
-   $21 = ($20>>>0)>(2146435072);
-   $22 = ($18>>>0)>(0);
-   $23 = ($20|0)==(2146435072);
-   $24 = $23 & $22;
-   $25 = $21 | $24;
-   $26 = ($8|0)==(2047);
-   $or$cond = $26 | $25;
-   if ($or$cond) {
-    label = 3;
-   } else {
-    $29 = (_bitshift64Shl(($2|0),($3|0),1)|0);
-    $30 = tempRet0;
-    $31 = ($30>>>0)>($14>>>0);
-    $32 = ($29>>>0)>($13>>>0);
-    $33 = ($30|0)==($14|0);
-    $34 = $33 & $32;
-    $35 = $31 | $34;
-    if (!($35)) {
-     $36 = ($29|0)==($13|0);
-     $37 = ($30|0)==($14|0);
-     $38 = $36 & $37;
-     $39 = $0 * 0.0;
-     $$ = $38 ? $39 : $0;
-     return (+$$);
-    }
-    $40 = ($8|0)==(0);
-    if ($40) {
-     $41 = (_bitshift64Shl(($2|0),($3|0),12)|0);
-     $42 = tempRet0;
-     $43 = ($42|0)>(-1);
-     $44 = ($41>>>0)>(4294967295);
-     $45 = ($42|0)==(-1);
-     $46 = $45 & $44;
-     $47 = $43 | $46;
-     if ($47) {
-      $$073100 = 0;$49 = $41;$50 = $42;
-      while(1) {
-       $48 = (($$073100) + -1)|0;
-       $51 = (_bitshift64Shl(($49|0),($50|0),1)|0);
-       $52 = tempRet0;
-       $53 = ($52|0)>(-1);
-       $54 = ($51>>>0)>(4294967295);
-       $55 = ($52|0)==(-1);
-       $56 = $55 & $54;
-       $57 = $53 | $56;
-       if ($57) {
-        $$073100 = $48;$49 = $51;$50 = $52;
-       } else {
-        $$073$lcssa = $48;
-        break;
-       }
-      }
-     } else {
-      $$073$lcssa = 0;
-     }
-     $58 = (1 - ($$073$lcssa))|0;
-     $59 = (_bitshift64Shl(($2|0),($3|0),($58|0))|0);
-     $60 = tempRet0;
-     $$174 = $$073$lcssa;$87 = $59;$88 = $60;
-    } else {
-     $61 = $3 & 1048575;
-     $62 = $61 | 1048576;
-     $$174 = $8;$87 = $2;$88 = $62;
-    }
-    $63 = ($11|0)==(0);
-    if ($63) {
-     $64 = (_bitshift64Shl(($4|0),($5|0),12)|0);
-     $65 = tempRet0;
-     $66 = ($65|0)>(-1);
-     $67 = ($64>>>0)>(4294967295);
-     $68 = ($65|0)==(-1);
-     $69 = $68 & $67;
-     $70 = $66 | $69;
-     if ($70) {
-      $$07194 = 0;$72 = $64;$73 = $65;
-      while(1) {
-       $71 = (($$07194) + -1)|0;
-       $74 = (_bitshift64Shl(($72|0),($73|0),1)|0);
-       $75 = tempRet0;
-       $76 = ($75|0)>(-1);
-       $77 = ($74>>>0)>(4294967295);
-       $78 = ($75|0)==(-1);
-       $79 = $78 & $77;
-       $80 = $76 | $79;
-       if ($80) {
-        $$07194 = $71;$72 = $74;$73 = $75;
-       } else {
-        $$071$lcssa = $71;
-        break;
-       }
-      }
-     } else {
-      $$071$lcssa = 0;
-     }
-     $81 = (1 - ($$071$lcssa))|0;
-     $82 = (_bitshift64Shl(($4|0),($5|0),($81|0))|0);
-     $83 = tempRet0;
-     $$172$ph = $$071$lcssa;$89 = $82;$90 = $83;
-    } else {
-     $84 = $5 & 1048575;
-     $85 = $84 | 1048576;
-     $$172$ph = $11;$89 = $4;$90 = $85;
-    }
-    $86 = ($$174|0)>($$172$ph|0);
-    $91 = (_i64Subtract(($87|0),($88|0),($89|0),($90|0))|0);
-    $92 = tempRet0;
-    $93 = ($92|0)>(-1);
-    $94 = ($91>>>0)>(4294967295);
-    $95 = ($92|0)==(-1);
-    $96 = $95 & $94;
-    $97 = $93 | $96;
-    L23: do {
-     if ($86) {
-      $$27586 = $$174;$101 = $92;$156 = $97;$157 = $87;$158 = $88;$99 = $91;
-      while(1) {
-       if ($156) {
-        $98 = ($99|0)==(0);
-        $100 = ($101|0)==(0);
-        $102 = $98 & $100;
-        if ($102) {
-         break;
-        } else {
-         $104 = $99;$105 = $101;
-        }
-       } else {
-        $104 = $157;$105 = $158;
-       }
-       $106 = (_bitshift64Shl(($104|0),($105|0),1)|0);
-       $107 = tempRet0;
-       $108 = (($$27586) + -1)|0;
-       $109 = ($108|0)>($$172$ph|0);
-       $110 = (_i64Subtract(($106|0),($107|0),($89|0),($90|0))|0);
-       $111 = tempRet0;
-       $112 = ($111|0)>(-1);
-       $113 = ($110>>>0)>(4294967295);
-       $114 = ($111|0)==(-1);
-       $115 = $114 & $113;
-       $116 = $112 | $115;
-       if ($109) {
-        $$27586 = $108;$101 = $111;$156 = $116;$157 = $106;$158 = $107;$99 = $110;
-       } else {
-        $$275$lcssa = $108;$$lcssa = $116;$118 = $110;$120 = $111;$159 = $106;$160 = $107;
-        break L23;
-       }
-      }
-      $103 = $0 * 0.0;
-      $$070 = $103;
-      break L1;
-     } else {
-      $$275$lcssa = $$174;$$lcssa = $97;$118 = $91;$120 = $92;$159 = $87;$160 = $88;
-     }
-    } while(0);
-    if ($$lcssa) {
-     $117 = ($118|0)==(0);
-     $119 = ($120|0)==(0);
-     $121 = $117 & $119;
-     if ($121) {
-      $129 = $0 * 0.0;
-      $$070 = $129;
-      break;
-     } else {
-      $123 = $120;$125 = $118;
-     }
-    } else {
-     $123 = $160;$125 = $159;
-    }
-    $122 = ($123>>>0)<(1048576);
-    $124 = ($125>>>0)<(0);
-    $126 = ($123|0)==(1048576);
-    $127 = $126 & $124;
-    $128 = $122 | $127;
-    if ($128) {
-     $$37683 = $$275$lcssa;$130 = $125;$131 = $123;
-     while(1) {
-      $132 = (_bitshift64Shl(($130|0),($131|0),1)|0);
-      $133 = tempRet0;
-      $134 = (($$37683) + -1)|0;
-      $135 = ($133>>>0)<(1048576);
-      $136 = ($132>>>0)<(0);
-      $137 = ($133|0)==(1048576);
-      $138 = $137 & $136;
-      $139 = $135 | $138;
-      if ($139) {
-       $$37683 = $134;$130 = $132;$131 = $133;
-      } else {
-       $$376$lcssa = $134;$141 = $132;$142 = $133;
-       break;
-      }
-     }
-    } else {
-     $$376$lcssa = $$275$lcssa;$141 = $125;$142 = $123;
-    }
-    $140 = ($$376$lcssa|0)>(0);
-    if ($140) {
-     $143 = (_i64Add(($141|0),($142|0),0,-1048576)|0);
-     $144 = tempRet0;
-     $145 = (_bitshift64Shl(($$376$lcssa|0),0,52)|0);
-     $146 = tempRet0;
-     $147 = $143 | $145;
-     $148 = $144 | $146;
-     $153 = $148;$155 = $147;
-    } else {
-     $149 = (1 - ($$376$lcssa))|0;
-     $150 = (_bitshift64Lshr(($141|0),($142|0),($149|0))|0);
-     $151 = tempRet0;
-     $153 = $151;$155 = $150;
-    }
-    $152 = $153 | $12;
-    HEAP32[tempDoublePtr>>2] = $155;HEAP32[tempDoublePtr+4>>2] = $152;$154 = +HEAPF64[tempDoublePtr>>3];
-    $$070 = $154;
-   }
-  }
- } while(0);
- if ((label|0) == 3) {
-  $27 = $0 * $1;
-  $28 = $27 / $27;
-  $$070 = $28;
- }
- return (+$$070);
-}
-function ___DOUBLE_BITS_272($0) {
- $0 = +$0;
- var $1 = 0, $2 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- HEAPF64[tempDoublePtr>>3] = $0;$1 = HEAP32[tempDoublePtr>>2]|0;
- $2 = HEAP32[tempDoublePtr+4>>2]|0;
- tempRet0 = ($2);
- return ($1|0);
-}
-function _strlen($0) {
- $0 = $0|0;
- var $$0 = 0, $$015$lcssa = 0, $$01519 = 0, $$1$lcssa = 0, $$pn = 0, $$pre = 0, $$sink = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0;
- var $21 = 0, $22 = 0, $23 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- $1 = $0;
- $2 = $1 & 3;
- $3 = ($2|0)==(0);
- L1: do {
-  if ($3) {
-   $$015$lcssa = $0;
-   label = 4;
-  } else {
-   $$01519 = $0;$23 = $1;
-   while(1) {
-    $4 = HEAP8[$$01519>>0]|0;
-    $5 = ($4<<24>>24)==(0);
-    if ($5) {
-     $$sink = $23;
-     break L1;
-    }
-    $6 = ((($$01519)) + 1|0);
-    $7 = $6;
-    $8 = $7 & 3;
-    $9 = ($8|0)==(0);
-    if ($9) {
-     $$015$lcssa = $6;
-     label = 4;
-     break;
-    } else {
-     $$01519 = $6;$23 = $7;
-    }
-   }
-  }
- } while(0);
- if ((label|0) == 4) {
-  $$0 = $$015$lcssa;
-  while(1) {
-   $10 = HEAP32[$$0>>2]|0;
-   $11 = (($10) + -16843009)|0;
-   $12 = $10 & -2139062144;
-   $13 = $12 ^ -2139062144;
-   $14 = $13 & $11;
-   $15 = ($14|0)==(0);
-   $16 = ((($$0)) + 4|0);
-   if ($15) {
-    $$0 = $16;
-   } else {
-    break;
-   }
-  }
-  $17 = $10&255;
-  $18 = ($17<<24>>24)==(0);
-  if ($18) {
-   $$1$lcssa = $$0;
-  } else {
-   $$pn = $$0;
-   while(1) {
-    $19 = ((($$pn)) + 1|0);
-    $$pre = HEAP8[$19>>0]|0;
-    $20 = ($$pre<<24>>24)==(0);
-    if ($20) {
-     $$1$lcssa = $19;
-     break;
-    } else {
-     $$pn = $19;
-    }
-   }
-  }
-  $21 = $$1$lcssa;
-  $$sink = $21;
- }
- $22 = (($$sink) - ($1))|0;
- return ($22|0);
-}
-function _strchr($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- $2 = (___strchrnul($0,$1)|0);
- $3 = HEAP8[$2>>0]|0;
- $4 = $1&255;
- $5 = ($3<<24>>24)==($4<<24>>24);
- $6 = $5 ? $2 : 0;
- return ($6|0);
-}
-function ___strchrnul($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $$0 = 0, $$029$lcssa = 0, $$02936 = 0, $$030$lcssa = 0, $$03039 = 0, $$1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0;
- var $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0;
- var $41 = 0, $42 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $or$cond = 0, $or$cond33 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- $2 = $1 & 255;
- $3 = ($2|0)==(0);
- L1: do {
-  if ($3) {
-   $8 = (_strlen($0)|0);
-   $9 = (($0) + ($8)|0);
-   $$0 = $9;
-  } else {
-   $4 = $0;
-   $5 = $4 & 3;
-   $6 = ($5|0)==(0);
-   if ($6) {
-    $$030$lcssa = $0;
-   } else {
-    $7 = $1&255;
-    $$03039 = $0;
-    while(1) {
-     $10 = HEAP8[$$03039>>0]|0;
-     $11 = ($10<<24>>24)==(0);
-     $12 = ($10<<24>>24)==($7<<24>>24);
-     $or$cond = $11 | $12;
-     if ($or$cond) {
-      $$0 = $$03039;
-      break L1;
-     }
-     $13 = ((($$03039)) + 1|0);
-     $14 = $13;
-     $15 = $14 & 3;
-     $16 = ($15|0)==(0);
-     if ($16) {
-      $$030$lcssa = $13;
-      break;
-     } else {
-      $$03039 = $13;
-     }
-    }
-   }
-   $17 = Math_imul($2, 16843009)|0;
-   $18 = HEAP32[$$030$lcssa>>2]|0;
-   $19 = (($18) + -16843009)|0;
-   $20 = $18 & -2139062144;
-   $21 = $20 ^ -2139062144;
-   $22 = $21 & $19;
-   $23 = ($22|0)==(0);
-   L10: do {
-    if ($23) {
-     $$02936 = $$030$lcssa;$25 = $18;
-     while(1) {
-      $24 = $25 ^ $17;
-      $26 = (($24) + -16843009)|0;
-      $27 = $24 & -2139062144;
-      $28 = $27 ^ -2139062144;
-      $29 = $28 & $26;
-      $30 = ($29|0)==(0);
-      if (!($30)) {
-       $$029$lcssa = $$02936;
-       break L10;
-      }
-      $31 = ((($$02936)) + 4|0);
-      $32 = HEAP32[$31>>2]|0;
-      $33 = (($32) + -16843009)|0;
-      $34 = $32 & -2139062144;
-      $35 = $34 ^ -2139062144;
-      $36 = $35 & $33;
-      $37 = ($36|0)==(0);
-      if ($37) {
-       $$02936 = $31;$25 = $32;
-      } else {
-       $$029$lcssa = $31;
-       break;
-      }
-     }
-    } else {
-     $$029$lcssa = $$030$lcssa;
-    }
-   } while(0);
-   $38 = $1&255;
-   $$1 = $$029$lcssa;
-   while(1) {
-    $39 = HEAP8[$$1>>0]|0;
-    $40 = ($39<<24>>24)==(0);
-    $41 = ($39<<24>>24)==($38<<24>>24);
-    $or$cond33 = $40 | $41;
-    $42 = ((($$1)) + 1|0);
-    if ($or$cond33) {
-     $$0 = $$1;
-     break;
-    } else {
-     $$1 = $42;
-    }
-   }
-  }
- } while(0);
- return ($$0|0);
-}
-function _snprintf($0,$1,$2,$varargs) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $varargs = $varargs|0;
- var $3 = 0, $4 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $3 = sp;
- HEAP32[$3>>2] = $varargs;
- $4 = (_vsnprintf($0,$1,$2,$3)|0);
- STACKTOP = sp;return ($4|0);
-}
-function _fmodf($0,$1) {
- $0 = +$0;
- $1 = +$1;
- var $$ = 0.0, $$0 = 0, $$068101 = 0, $$070 = 0.0, $$071$lcssa = 0, $$07194 = 0, $$073$lcssa = 0, $$073100 = 0, $$1$lcssa = 0, $$16995 = 0, $$172$ph = 0, $$174 = 0, $$187 = 0, $$2 = 0, $$275$lcssa = 0, $$27586 = 0, $$3$lcssa = 0, $$3$ph = 0, $$376$lcssa = 0, $$37683 = 0;
- var $$384 = 0, $$4 = 0, $$lcssa = 0, $$lcssa79 = 0, $$sroa$0$0$ph = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0.0, $16 = 0.0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0.0, $21 = 0, $22 = 0, $23 = 0;
- var $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0;
- var $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0.0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0.0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0;
- var $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0.0, $66 = 0, $7 = 0, $8 = 0, $9 = 0, $or$cond = 0, label = 0, sp = 0;
- sp = STACKTOP;
- $2 = (HEAPF32[tempDoublePtr>>2]=$0,HEAP32[tempDoublePtr>>2]|0);
- $3 = (HEAPF32[tempDoublePtr>>2]=$1,HEAP32[tempDoublePtr>>2]|0);
- $4 = $2 >>> 23;
- $5 = $4 & 255;
- $6 = $3 >>> 23;
- $7 = $6 & 255;
- $8 = $2 & -2147483648;
- $9 = $3 << 1;
- $10 = ($9|0)==(0);
- L1: do {
-  if ($10) {
-   label = 3;
-  } else {
-   $11 = (___FLOAT_BITS_273($1)|0);
-   $12 = $11 & 2147483647;
-   $13 = ($12>>>0)>(2139095040);
-   $14 = ($5|0)==(255);
-   $or$cond = $14 | $13;
-   if ($or$cond) {
-    label = 3;
-   } else {
-    $17 = $2 << 1;
-    $18 = ($17>>>0)>($9>>>0);
-    if (!($18)) {
-     $19 = ($17|0)==($9|0);
-     $20 = $0 * 0.0;
-     $$ = $19 ? $20 : $0;
-     return (+$$);
-    }
-    $21 = ($5|0)==(0);
-    if ($21) {
-     $22 = $2 << 9;
-     $23 = ($22|0)>(-1);
-     if ($23) {
-      $$068101 = $22;$$073100 = 0;
-      while(1) {
-       $24 = (($$073100) + -1)|0;
-       $25 = $$068101 << 1;
-       $26 = ($25|0)>(-1);
-       if ($26) {
-        $$068101 = $25;$$073100 = $24;
-       } else {
-        $$073$lcssa = $24;
-        break;
-       }
-      }
-     } else {
-      $$073$lcssa = 0;
-     }
-     $27 = (1 - ($$073$lcssa))|0;
-     $28 = $2 << $27;
-     $$0 = $28;$$174 = $$073$lcssa;
-    } else {
-     $29 = $2 & 8388607;
-     $30 = $29 | 8388608;
-     $$0 = $30;$$174 = $5;
-    }
-    $31 = ($7|0)==(0);
-    if ($31) {
-     $32 = $3 << 9;
-     $33 = ($32|0)>(-1);
-     if ($33) {
-      $$07194 = 0;$$16995 = $32;
-      while(1) {
-       $34 = (($$07194) + -1)|0;
-       $35 = $$16995 << 1;
-       $36 = ($35|0)>(-1);
-       if ($36) {
-        $$07194 = $34;$$16995 = $35;
-       } else {
-        $$071$lcssa = $34;
-        break;
-       }
-      }
-     } else {
-      $$071$lcssa = 0;
-     }
-     $37 = (1 - ($$071$lcssa))|0;
-     $38 = $3 << $37;
-     $$172$ph = $$071$lcssa;$$sroa$0$0$ph = $38;
-    } else {
-     $39 = $3 & 8388607;
-     $40 = $39 | 8388608;
-     $$172$ph = $7;$$sroa$0$0$ph = $40;
-    }
-    $41 = ($$174|0)>($$172$ph|0);
-    $42 = (($$0) - ($$sroa$0$0$ph))|0;
-    $43 = ($42|0)>(-1);
-    L23: do {
-     if ($41) {
-      $$187 = $$0;$$27586 = $$174;$45 = $42;$66 = $43;
-      while(1) {
-       if ($66) {
-        $44 = ($45|0)==(0);
-        if ($44) {
-         break;
-        } else {
-         $$2 = $45;
-        }
-       } else {
-        $$2 = $$187;
-       }
-       $47 = $$2 << 1;
-       $48 = (($$27586) + -1)|0;
-       $49 = ($48|0)>($$172$ph|0);
-       $50 = (($47) - ($$sroa$0$0$ph))|0;
-       $51 = ($50|0)>(-1);
-       if ($49) {
-        $$187 = $47;$$27586 = $48;$45 = $50;$66 = $51;
-       } else {
-        $$1$lcssa = $47;$$275$lcssa = $48;$$lcssa = $51;$$lcssa79 = $50;
-        break L23;
-       }
-      }
-      $46 = $0 * 0.0;
-      $$070 = $46;
-      break L1;
-     } else {
-      $$1$lcssa = $$0;$$275$lcssa = $$174;$$lcssa = $43;$$lcssa79 = $42;
-     }
-    } while(0);
-    if ($$lcssa) {
-     $52 = ($$lcssa79|0)==(0);
-     if ($52) {
-      $54 = $0 * 0.0;
-      $$070 = $54;
-      break;
-     } else {
-      $$3$ph = $$lcssa79;
-     }
-    } else {
-     $$3$ph = $$1$lcssa;
-    }
-    $53 = ($$3$ph>>>0)<(8388608);
-    if ($53) {
-     $$37683 = $$275$lcssa;$$384 = $$3$ph;
-     while(1) {
-      $55 = $$384 << 1;
-      $56 = (($$37683) + -1)|0;
-      $57 = ($55>>>0)<(8388608);
-      if ($57) {
-       $$37683 = $56;$$384 = $55;
-      } else {
-       $$3$lcssa = $55;$$376$lcssa = $56;
-       break;
-      }
-     }
-    } else {
-     $$3$lcssa = $$3$ph;$$376$lcssa = $$275$lcssa;
-    }
-    $58 = ($$376$lcssa|0)>(0);
-    if ($58) {
-     $59 = (($$3$lcssa) + -8388608)|0;
-     $60 = $$376$lcssa << 23;
-     $61 = $59 | $60;
-     $$4 = $61;
-    } else {
-     $62 = (1 - ($$376$lcssa))|0;
-     $63 = $$3$lcssa >>> $62;
-     $$4 = $63;
-    }
-    $64 = $$4 | $8;
-    $65 = (HEAP32[tempDoublePtr>>2]=$64,+HEAPF32[tempDoublePtr>>2]);
-    $$070 = $65;
-   }
-  }
- } while(0);
- if ((label|0) == 3) {
-  $15 = $0 * $1;
-  $16 = $15 / $15;
-  $$070 = $16;
- }
- return (+$$070);
-}
-function ___FLOAT_BITS_273($0) {
- $0 = +$0;
- var $1 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- $1 = (HEAPF32[tempDoublePtr>>2]=$0,HEAP32[tempDoublePtr>>2]|0);
- return ($1|0);
-}
-function ___fpclassify($0) {
- $0 = +$0;
- var $$0 = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $trunc$clear = 0, label = 0, sp = 0;
- sp = STACKTOP;
- HEAPF64[tempDoublePtr>>3] = $0;$1 = HEAP32[tempDoublePtr>>2]|0;
- $2 = HEAP32[tempDoublePtr+4>>2]|0;
- $3 = (_bitshift64Lshr(($1|0),($2|0),52)|0);
- $4 = tempRet0;
- $5 = $3&65535;
- $trunc$clear = $5 & 2047;
- switch ($trunc$clear<<16>>16) {
- case 0:  {
-  $6 = $2 & 2147483647;
-  $7 = ($1|0)!=(0);
-  $8 = ($6|0)!=(0);
-  $9 = $7 | $8;
-  $10 = $9 ? 3 : 2;
-  $$0 = $10;
-  break;
- }
- case 2047:  {
-  $11 = $2 & 1048575;
-  $12 = ($1|0)==(0);
-  $13 = ($11|0)==(0);
-  $14 = $12 & $13;
-  $15 = $14&1;
-  $$0 = $15;
-  break;
- }
- default: {
-  $$0 = 4;
- }
- }
- return ($$0|0);
-}
-function ___fpclassifyl($0) {
- $0 = +$0;
- var $1 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- $1 = (___fpclassify($0)|0);
- return ($1|0);
-}
-function ___signbit($0) {
- $0 = +$0;
- var $1 = 0, $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- HEAPF64[tempDoublePtr>>3] = $0;$1 = HEAP32[tempDoublePtr>>2]|0;
- $2 = HEAP32[tempDoublePtr+4>>2]|0;
- $3 = (_bitshift64Lshr(($1|0),($2|0),63)|0);
- $4 = tempRet0;
- return ($3|0);
-}
-function ___signbitl($0) {
- $0 = +$0;
- var $1 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- $1 = (___signbit($0)|0);
- return ($1|0);
-}
-function _fputs($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $2 = 0, $3 = 0, $4 = 0, $not$ = 0, label = 0, sp = 0;
- sp = STACKTOP;
- $2 = (_strlen($0)|0);
- $3 = (_fwrite($0,1,$2,$1)|0);
- $not$ = ($3|0)!=($2|0);
- $4 = $not$ << 31 >> 31;
- return ($4|0);
-}
-function _fwrite($0,$1,$2,$3) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- $3 = $3|0;
- var $$ = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $phitmp = 0, label = 0, sp = 0;
- sp = STACKTOP;
- $4 = Math_imul($2, $1)|0;
- $5 = ($1|0)==(0);
- $$ = $5 ? 0 : $2;
- $6 = ((($3)) + 76|0);
- $7 = HEAP32[$6>>2]|0;
- $8 = ($7|0)>(-1);
- if ($8) {
-  $10 = (___lockfile($3)|0);
-  $phitmp = ($10|0)==(0);
-  $11 = (___fwritex($0,$4,$3)|0);
-  if ($phitmp) {
-   $13 = $11;
-  } else {
-   ___unlockfile($3);
-   $13 = $11;
-  }
- } else {
-  $9 = (___fwritex($0,$4,$3)|0);
-  $13 = $9;
- }
- $12 = ($13|0)==($4|0);
- if ($12) {
-  $15 = $$;
- } else {
-  $14 = (($13>>>0) / ($1>>>0))&-1;
-  $15 = $14;
- }
- return ($15|0);
-}
-function _putc($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $$0 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;
- var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- $2 = ((($1)) + 76|0);
- $3 = HEAP32[$2>>2]|0;
- $4 = ($3|0)<(0);
- $5 = $0&255;
- $6 = $0 & 255;
- if ($4) {
-  label = 3;
- } else {
-  $7 = (___lockfile($1)|0);
-  $8 = ($7|0)==(0);
-  if ($8) {
-   label = 3;
-  } else {
-   $20 = ((($1)) + 75|0);
-   $21 = HEAP8[$20>>0]|0;
-   $22 = $21 << 24 >> 24;
-   $23 = ($6|0)==($22|0);
-   if ($23) {
-    label = 10;
-   } else {
-    $24 = ((($1)) + 20|0);
-    $25 = HEAP32[$24>>2]|0;
-    $26 = ((($1)) + 16|0);
-    $27 = HEAP32[$26>>2]|0;
-    $28 = ($25>>>0)<($27>>>0);
-    if ($28) {
-     $29 = ((($25)) + 1|0);
-     HEAP32[$24>>2] = $29;
-     HEAP8[$25>>0] = $5;
-     $31 = $6;
-    } else {
-     label = 10;
-    }
-   }
-   if ((label|0) == 10) {
-    $30 = (___overflow($1,$0)|0);
-    $31 = $30;
-   }
-   ___unlockfile($1);
-   $$0 = $31;
-  }
- }
- do {
-  if ((label|0) == 3) {
-   $9 = ((($1)) + 75|0);
-   $10 = HEAP8[$9>>0]|0;
-   $11 = $10 << 24 >> 24;
-   $12 = ($6|0)==($11|0);
-   if (!($12)) {
-    $13 = ((($1)) + 20|0);
-    $14 = HEAP32[$13>>2]|0;
-    $15 = ((($1)) + 16|0);
-    $16 = HEAP32[$15>>2]|0;
-    $17 = ($14>>>0)<($16>>>0);
-    if ($17) {
-     $18 = ((($14)) + 1|0);
-     HEAP32[$13>>2] = $18;
-     HEAP8[$14>>0] = $5;
-     $$0 = $6;
-     break;
-    }
-   }
-   $19 = (___overflow($1,$0)|0);
-   $$0 = $19;
-  }
- } while(0);
- return ($$0|0);
-}
-function ___unlist_locked_file($0) {
- $0 = $0|0;
- var $$pre = 0, $$sink = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- $1 = ((($0)) + 68|0);
- $2 = HEAP32[$1>>2]|0;
- $3 = ($2|0)==(0);
- if (!($3)) {
-  $4 = ((($0)) + 116|0);
-  $5 = HEAP32[$4>>2]|0;
-  $6 = ($5|0)==(0|0);
-  $$pre = ((($0)) + 112|0);
-  if (!($6)) {
-   $7 = HEAP32[$$pre>>2]|0;
-   $8 = ((($5)) + 112|0);
-   HEAP32[$8>>2] = $7;
-  }
-  $9 = HEAP32[$$pre>>2]|0;
-  $10 = ($9|0)==(0|0);
-  if ($10) {
-   $12 = (___pthread_self_607()|0);
-   $13 = ((($12)) + 232|0);
-   $$sink = $13;
-  } else {
-   $11 = ((($9)) + 116|0);
-   $$sink = $11;
-  }
-  HEAP32[$$sink>>2] = $5;
- }
- return;
-}
-function ___pthread_self_607() {
- var $0 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- $0 = (_pthread_self()|0);
- return ($0|0);
-}
-function ___overflow($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $$0 = 0, $$pre = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $3 = 0, $4 = 0;
- var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = sp;
- $3 = $1&255;
- HEAP8[$2>>0] = $3;
- $4 = ((($0)) + 16|0);
- $5 = HEAP32[$4>>2]|0;
- $6 = ($5|0)==(0|0);
- if ($6) {
-  $7 = (___towrite($0)|0);
-  $8 = ($7|0)==(0);
-  if ($8) {
-   $$pre = HEAP32[$4>>2]|0;
-   $12 = $$pre;
-   label = 4;
-  } else {
-   $$0 = -1;
-  }
- } else {
-  $12 = $5;
-  label = 4;
- }
- do {
-  if ((label|0) == 4) {
-   $9 = ((($0)) + 20|0);
-   $10 = HEAP32[$9>>2]|0;
-   $11 = ($10>>>0)<($12>>>0);
-   if ($11) {
-    $13 = $1 & 255;
-    $14 = ((($0)) + 75|0);
-    $15 = HEAP8[$14>>0]|0;
-    $16 = $15 << 24 >> 24;
-    $17 = ($13|0)==($16|0);
-    if (!($17)) {
-     $18 = ((($10)) + 1|0);
-     HEAP32[$9>>2] = $18;
-     HEAP8[$10>>0] = $3;
-     $$0 = $13;
-     break;
-    }
-   }
-   $19 = ((($0)) + 36|0);
-   $20 = HEAP32[$19>>2]|0;
-   $21 = (FUNCTION_TABLE_iiii[$20 & 511]($0,$2,1)|0);
-   $22 = ($21|0)==(1);
-   if ($22) {
-    $23 = HEAP8[$2>>0]|0;
-    $24 = $23&255;
-    $$0 = $24;
-   } else {
-    $$0 = -1;
-   }
-  }
- } while(0);
- STACKTOP = sp;return ($$0|0);
-}
-function _fopen($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $$0 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $memchr = 0, $vararg_buffer = 0, $vararg_buffer3 = 0, $vararg_buffer8 = 0, $vararg_ptr1 = 0;
- var $vararg_ptr2 = 0, $vararg_ptr6 = 0, $vararg_ptr7 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);
- $vararg_buffer8 = sp + 32|0;
- $vararg_buffer3 = sp + 16|0;
- $vararg_buffer = sp;
- $2 = HEAP8[$1>>0]|0;
- $3 = $2 << 24 >> 24;
- $memchr = (_memchr(72690,$3,4)|0);
- $4 = ($memchr|0)==(0|0);
- if ($4) {
-  $5 = (___errno_location()|0);
-  HEAP32[$5>>2] = 22;
-  $$0 = 0;
- } else {
-  $6 = (___fmodeflags($1)|0);
-  $7 = $0;
-  $8 = $6 | 32768;
-  HEAP32[$vararg_buffer>>2] = $7;
-  $vararg_ptr1 = ((($vararg_buffer)) + 4|0);
-  HEAP32[$vararg_ptr1>>2] = $8;
-  $vararg_ptr2 = ((($vararg_buffer)) + 8|0);
-  HEAP32[$vararg_ptr2>>2] = 438;
-  $9 = (___syscall5(5,($vararg_buffer|0))|0);
-  $10 = (___syscall_ret($9)|0);
-  $11 = ($10|0)<(0);
-  if ($11) {
-   $$0 = 0;
-  } else {
-   $12 = $6 & 524288;
-   $13 = ($12|0)==(0);
-   if (!($13)) {
-    HEAP32[$vararg_buffer3>>2] = $10;
-    $vararg_ptr6 = ((($vararg_buffer3)) + 4|0);
-    HEAP32[$vararg_ptr6>>2] = 2;
-    $vararg_ptr7 = ((($vararg_buffer3)) + 8|0);
-    HEAP32[$vararg_ptr7>>2] = 1;
-    (___syscall221(221,($vararg_buffer3|0))|0);
-   }
-   $14 = (___fdopen($10,$1)|0);
-   $15 = ($14|0)==(0|0);
-   if ($15) {
-    HEAP32[$vararg_buffer8>>2] = $10;
-    (___syscall6(6,($vararg_buffer8|0))|0);
-    $$0 = 0;
-   } else {
-    $$0 = $14;
-   }
-  }
- }
- STACKTOP = sp;return ($$0|0);
-}
-function ___fmodeflags($0) {
- $0 = $0|0;
- var $$ = 0, $$$4 = 0, $$0 = 0, $$0$ = 0, $$2 = 0, $$2$ = 0, $$4 = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0;
- var $8 = 0, $9 = 0, $not$ = 0, label = 0, sp = 0;
- sp = STACKTOP;
- $1 = (_strchr($0,43)|0);
- $2 = ($1|0)==(0|0);
- $3 = HEAP8[$0>>0]|0;
- $not$ = ($3<<24>>24)!=(114);
- $$ = $not$&1;
- $$0 = $2 ? $$ : 2;
- $4 = (_strchr($0,120)|0);
- $5 = ($4|0)==(0|0);
- $6 = $$0 | 128;
- $$0$ = $5 ? $$0 : $6;
- $7 = (_strchr($0,101)|0);
- $8 = ($7|0)==(0|0);
- $9 = $$0$ | 524288;
- $$2 = $8 ? $$0$ : $9;
- $10 = ($3<<24>>24)==(114);
- $11 = $$2 | 64;
- $$2$ = $10 ? $$2 : $11;
- $12 = ($3<<24>>24)==(119);
- $13 = $$2$ | 512;
- $$4 = $12 ? $13 : $$2$;
- $14 = ($3<<24>>24)==(97);
- $15 = $$4 | 1024;
- $$$4 = $14 ? $15 : $$4;
- return ($$$4|0);
-}
-function ___fdopen($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $$0 = 0, $$pre = 0, $$pre31 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0;
- var $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $5 = 0, $6 = 0;
- var $7 = 0, $8 = 0, $9 = 0, $memchr = 0, $vararg_buffer = 0, $vararg_buffer12 = 0, $vararg_buffer3 = 0, $vararg_buffer7 = 0, $vararg_ptr1 = 0, $vararg_ptr10 = 0, $vararg_ptr11 = 0, $vararg_ptr15 = 0, $vararg_ptr16 = 0, $vararg_ptr2 = 0, $vararg_ptr6 = 0, dest = 0, label = 0, sp = 0, stop = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);
- $vararg_buffer12 = sp + 40|0;
- $vararg_buffer7 = sp + 24|0;
- $vararg_buffer3 = sp + 16|0;
- $vararg_buffer = sp;
- $2 = sp + 56|0;
- $3 = HEAP8[$1>>0]|0;
- $4 = $3 << 24 >> 24;
- $memchr = (_memchr(72690,$4,4)|0);
- $5 = ($memchr|0)==(0|0);
- if ($5) {
-  $6 = (___errno_location()|0);
-  HEAP32[$6>>2] = 22;
-  $$0 = 0;
- } else {
-  $7 = (_malloc(1156)|0);
-  $8 = ($7|0)==(0|0);
-  if ($8) {
-   $$0 = 0;
-  } else {
-   dest=$7; stop=dest+124|0; do { HEAP32[dest>>2]=0|0; dest=dest+4|0; } while ((dest|0) < (stop|0));
-   $9 = (_strchr($1,43)|0);
-   $10 = ($9|0)==(0|0);
-   if ($10) {
-    $11 = ($3<<24>>24)==(114);
-    $12 = $11 ? 8 : 4;
-    HEAP32[$7>>2] = $12;
-   }
-   $13 = (_strchr($1,101)|0);
-   $14 = ($13|0)==(0|0);
-   if ($14) {
-    $16 = $3;
-   } else {
-    HEAP32[$vararg_buffer>>2] = $0;
-    $vararg_ptr1 = ((($vararg_buffer)) + 4|0);
-    HEAP32[$vararg_ptr1>>2] = 2;
-    $vararg_ptr2 = ((($vararg_buffer)) + 8|0);
-    HEAP32[$vararg_ptr2>>2] = 1;
-    (___syscall221(221,($vararg_buffer|0))|0);
-    $$pre = HEAP8[$1>>0]|0;
-    $16 = $$pre;
-   }
-   $15 = ($16<<24>>24)==(97);
-   if ($15) {
-    HEAP32[$vararg_buffer3>>2] = $0;
-    $vararg_ptr6 = ((($vararg_buffer3)) + 4|0);
-    HEAP32[$vararg_ptr6>>2] = 3;
-    $17 = (___syscall221(221,($vararg_buffer3|0))|0);
-    $18 = $17 & 1024;
-    $19 = ($18|0)==(0);
-    if ($19) {
-     $20 = $17 | 1024;
-     HEAP32[$vararg_buffer7>>2] = $0;
-     $vararg_ptr10 = ((($vararg_buffer7)) + 4|0);
-     HEAP32[$vararg_ptr10>>2] = 4;
-     $vararg_ptr11 = ((($vararg_buffer7)) + 8|0);
-     HEAP32[$vararg_ptr11>>2] = $20;
-     (___syscall221(221,($vararg_buffer7|0))|0);
-    }
-    $21 = HEAP32[$7>>2]|0;
-    $22 = $21 | 128;
-    HEAP32[$7>>2] = $22;
-    $29 = $22;
-   } else {
-    $$pre31 = HEAP32[$7>>2]|0;
-    $29 = $$pre31;
-   }
-   $23 = ((($7)) + 60|0);
-   HEAP32[$23>>2] = $0;
-   $24 = ((($7)) + 132|0);
-   $25 = ((($7)) + 44|0);
-   HEAP32[$25>>2] = $24;
-   $26 = ((($7)) + 48|0);
-   HEAP32[$26>>2] = 1024;
-   $27 = ((($7)) + 75|0);
-   HEAP8[$27>>0] = -1;
-   $28 = $29 & 8;
-   $30 = ($28|0)==(0);
-   if ($30) {
-    $31 = $2;
-    HEAP32[$vararg_buffer12>>2] = $0;
-    $vararg_ptr15 = ((($vararg_buffer12)) + 4|0);
-    HEAP32[$vararg_ptr15>>2] = 21523;
-    $vararg_ptr16 = ((($vararg_buffer12)) + 8|0);
-    HEAP32[$vararg_ptr16>>2] = $31;
-    $32 = (___syscall54(54,($vararg_buffer12|0))|0);
-    $33 = ($32|0)==(0);
-    if ($33) {
-     HEAP8[$27>>0] = 10;
-    }
-   }
-   $34 = ((($7)) + 32|0);
-   HEAP32[$34>>2] = 4;
-   $35 = ((($7)) + 36|0);
-   HEAP32[$35>>2] = 2;
-   $36 = ((($7)) + 40|0);
-   HEAP32[$36>>2] = 3;
-   $37 = ((($7)) + 12|0);
-   HEAP32[$37>>2] = 1;
-   $38 = HEAP32[(75196)>>2]|0;
-   $39 = ($38|0)==(0);
-   if ($39) {
-    $40 = ((($7)) + 76|0);
-    HEAP32[$40>>2] = -1;
-   }
-   $41 = (___ofl_add($7)|0);
-   $$0 = $7;
-  }
- }
- STACKTOP = sp;return ($$0|0);
-}
-function ___ofl_add($0) {
- $0 = $0|0;
- var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- $1 = (___ofl_lock()|0);
- $2 = HEAP32[$1>>2]|0;
- $3 = ((($0)) + 56|0);
- HEAP32[$3>>2] = $2;
- $4 = HEAP32[$1>>2]|0;
- $5 = ($4|0)==(0|0);
- if (!($5)) {
-  $6 = ((($4)) + 52|0);
-  HEAP32[$6>>2] = $0;
- }
- HEAP32[$1>>2] = $0;
- ___ofl_unlock();
- return ($0|0);
-}
-function ___ofl_lock() {
- var label = 0, sp = 0;
- sp = STACKTOP;
- ___lock((75256|0));
- return (75264|0);
-}
-function ___ofl_unlock() {
- var label = 0, sp = 0;
- sp = STACKTOP;
- ___unlock((75256|0));
- return;
-}
-function _fclose($0) {
- $0 = $0|0;
- var $$pre = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0;
- var $27 = 0, $28 = 0, $29 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- $1 = ((($0)) + 76|0);
- $2 = HEAP32[$1>>2]|0;
- $3 = ($2|0)>(-1);
- if ($3) {
-  $4 = (___lockfile($0)|0);
-  $29 = $4;
- } else {
-  $29 = 0;
- }
- ___unlist_locked_file($0);
- $5 = HEAP32[$0>>2]|0;
- $6 = $5 & 1;
- $7 = ($6|0)!=(0);
- if (!($7)) {
-  $8 = (___ofl_lock()|0);
-  $9 = ((($0)) + 52|0);
-  $10 = HEAP32[$9>>2]|0;
-  $11 = ($10|0)==(0|0);
-  $12 = $10;
-  $$pre = ((($0)) + 56|0);
-  if (!($11)) {
-   $13 = HEAP32[$$pre>>2]|0;
-   $14 = ((($10)) + 56|0);
-   HEAP32[$14>>2] = $13;
-  }
-  $15 = HEAP32[$$pre>>2]|0;
-  $16 = ($15|0)==(0|0);
-  if (!($16)) {
-   $17 = ((($15)) + 52|0);
-   HEAP32[$17>>2] = $12;
-  }
-  $18 = HEAP32[$8>>2]|0;
-  $19 = ($18|0)==($0|0);
-  if ($19) {
-   HEAP32[$8>>2] = $15;
-  }
-  ___ofl_unlock();
- }
- $20 = (_fflush($0)|0);
- $21 = ((($0)) + 12|0);
- $22 = HEAP32[$21>>2]|0;
- $23 = (FUNCTION_TABLE_ii[$22 & 255]($0)|0);
- $24 = $23 | $20;
- $25 = ((($0)) + 92|0);
- $26 = HEAP32[$25>>2]|0;
- $27 = ($26|0)==(0|0);
- if (!($27)) {
-  _free($26);
- }
- if ($7) {
-  $28 = ($29|0)==(0);
-  if (!($28)) {
-   ___unlockfile($0);
-  }
- } else {
-  _free($0);
- }
- return ($24|0);
-}
-function _fflush($0) {
- $0 = $0|0;
- var $$0 = 0, $$023 = 0, $$02325 = 0, $$02327 = 0, $$024$lcssa = 0, $$02426 = 0, $$1 = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0;
- var $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $phitmp = 0, label = 0, sp = 0;
- sp = STACKTOP;
- $1 = ($0|0)==(0|0);
- do {
-  if ($1) {
-   $8 = HEAP32[794]|0;
-   $9 = ($8|0)==(0|0);
-   if ($9) {
-    $29 = 0;
-   } else {
-    $10 = HEAP32[794]|0;
-    $11 = (_fflush($10)|0);
-    $29 = $11;
-   }
-   $12 = (___ofl_lock()|0);
-   $$02325 = HEAP32[$12>>2]|0;
-   $13 = ($$02325|0)==(0|0);
-   if ($13) {
-    $$024$lcssa = $29;
-   } else {
-    $$02327 = $$02325;$$02426 = $29;
-    while(1) {
-     $14 = ((($$02327)) + 76|0);
-     $15 = HEAP32[$14>>2]|0;
-     $16 = ($15|0)>(-1);
-     if ($16) {
-      $17 = (___lockfile($$02327)|0);
-      $26 = $17;
-     } else {
-      $26 = 0;
-     }
-     $18 = ((($$02327)) + 20|0);
-     $19 = HEAP32[$18>>2]|0;
-     $20 = ((($$02327)) + 28|0);
-     $21 = HEAP32[$20>>2]|0;
-     $22 = ($19>>>0)>($21>>>0);
-     if ($22) {
-      $23 = (___fflush_unlocked($$02327)|0);
-      $24 = $23 | $$02426;
-      $$1 = $24;
-     } else {
-      $$1 = $$02426;
-     }
-     $25 = ($26|0)==(0);
-     if (!($25)) {
-      ___unlockfile($$02327);
-     }
-     $27 = ((($$02327)) + 56|0);
-     $$023 = HEAP32[$27>>2]|0;
-     $28 = ($$023|0)==(0|0);
-     if ($28) {
-      $$024$lcssa = $$1;
-      break;
-     } else {
-      $$02327 = $$023;$$02426 = $$1;
-     }
-    }
-   }
-   ___ofl_unlock();
-   $$0 = $$024$lcssa;
-  } else {
-   $2 = ((($0)) + 76|0);
-   $3 = HEAP32[$2>>2]|0;
-   $4 = ($3|0)>(-1);
-   if (!($4)) {
-    $5 = (___fflush_unlocked($0)|0);
-    $$0 = $5;
-    break;
-   }
-   $6 = (___lockfile($0)|0);
-   $phitmp = ($6|0)==(0);
-   $7 = (___fflush_unlocked($0)|0);
-   if ($phitmp) {
-    $$0 = $7;
-   } else {
-    ___unlockfile($0);
-    $$0 = $7;
-   }
-  }
- } while(0);
- return ($$0|0);
-}
-function ___fflush_unlocked($0) {
- $0 = $0|0;
- var $$0 = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0;
- var $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- $1 = ((($0)) + 20|0);
- $2 = HEAP32[$1>>2]|0;
- $3 = ((($0)) + 28|0);
- $4 = HEAP32[$3>>2]|0;
- $5 = ($2>>>0)>($4>>>0);
- if ($5) {
-  $6 = ((($0)) + 36|0);
-  $7 = HEAP32[$6>>2]|0;
-  (FUNCTION_TABLE_iiii[$7 & 511]($0,0,0)|0);
-  $8 = HEAP32[$1>>2]|0;
-  $9 = ($8|0)==(0|0);
-  if ($9) {
-   $$0 = -1;
-  } else {
-   label = 3;
-  }
- } else {
-  label = 3;
- }
- if ((label|0) == 3) {
-  $10 = ((($0)) + 4|0);
-  $11 = HEAP32[$10>>2]|0;
-  $12 = ((($0)) + 8|0);
-  $13 = HEAP32[$12>>2]|0;
-  $14 = ($11>>>0)<($13>>>0);
-  if ($14) {
-   $15 = $11;
-   $16 = $13;
-   $17 = (($15) - ($16))|0;
-   $18 = ((($0)) + 40|0);
-   $19 = HEAP32[$18>>2]|0;
-   (FUNCTION_TABLE_iiii[$19 & 511]($0,$17,1)|0);
-  }
-  $20 = ((($0)) + 16|0);
-  HEAP32[$20>>2] = 0;
-  HEAP32[$3>>2] = 0;
-  HEAP32[$1>>2] = 0;
-  HEAP32[$12>>2] = 0;
-  HEAP32[$10>>2] = 0;
-  $$0 = 0;
- }
- return ($$0|0);
-}
-function _feof($0) {
- $0 = $0|0;
- var $$lobit = 0, $$lobit8 = 0, $$lobit9 = 0, $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $phitmp = 0, label = 0, sp = 0;
- sp = STACKTOP;
- $1 = ((($0)) + 76|0);
- $2 = HEAP32[$1>>2]|0;
- $3 = ($2|0)>(-1);
- if ($3) {
-  $6 = (___lockfile($0)|0);
-  $phitmp = ($6|0)==(0);
-  $7 = HEAP32[$0>>2]|0;
-  $8 = $7 >>> 4;
-  $$lobit = $8 & 1;
-  if ($phitmp) {
-   $$lobit9 = $$lobit;
-  } else {
-   ___unlockfile($0);
-   $$lobit9 = $$lobit;
-  }
- } else {
-  $4 = HEAP32[$0>>2]|0;
-  $5 = $4 >>> 4;
-  $$lobit8 = $5 & 1;
-  $$lobit9 = $$lobit8;
- }
- return ($$lobit9|0);
-}
-function _fprintf($0,$1,$varargs) {
- $0 = $0|0;
- $1 = $1|0;
- $varargs = $varargs|0;
- var $2 = 0, $3 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $2 = sp;
- HEAP32[$2>>2] = $varargs;
- $3 = (_vfprintf($0,$1,$2)|0);
- STACKTOP = sp;return ($3|0);
-}
-function _strrchr($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- $2 = (_strlen($0)|0);
- $3 = (($2) + 1)|0;
- $4 = (___memrchr($0,$1,$3)|0);
- return ($4|0);
-}
-function ___memrchr($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $$0 = 0, $$09 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- $3 = $1&255;
- $$09 = $2;
- while(1) {
-  $4 = (($$09) + -1)|0;
-  $5 = ($$09|0)==(0);
-  if ($5) {
-   $$0 = 0;
-   break;
-  }
-  $6 = (($0) + ($4)|0);
-  $7 = HEAP8[$6>>0]|0;
-  $8 = ($7<<24>>24)==($3<<24>>24);
-  if ($8) {
-   $$0 = $6;
-   break;
-  } else {
-   $$09 = $4;
-  }
- }
- return ($$0|0);
-}
-function _fgetc($0) {
- $0 = $0|0;
- var $$0 = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $3 = 0, $4 = 0;
- var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- $1 = ((($0)) + 76|0);
- $2 = HEAP32[$1>>2]|0;
- $3 = ($2|0)<(0);
- if ($3) {
-  label = 3;
- } else {
-  $4 = (___lockfile($0)|0);
-  $5 = ($4|0)==(0);
-  if ($5) {
-   label = 3;
-  } else {
-   $15 = ((($0)) + 4|0);
-   $16 = HEAP32[$15>>2]|0;
-   $17 = ((($0)) + 8|0);
-   $18 = HEAP32[$17>>2]|0;
-   $19 = ($16>>>0)<($18>>>0);
-   if ($19) {
-    $20 = ((($16)) + 1|0);
-    HEAP32[$15>>2] = $20;
-    $21 = HEAP8[$16>>0]|0;
-    $22 = $21&255;
-    $24 = $22;
-   } else {
-    $23 = (___uflow($0)|0);
-    $24 = $23;
-   }
-   ___unlockfile($0);
-   $$0 = $24;
-  }
- }
- do {
-  if ((label|0) == 3) {
-   $6 = ((($0)) + 4|0);
-   $7 = HEAP32[$6>>2]|0;
-   $8 = ((($0)) + 8|0);
-   $9 = HEAP32[$8>>2]|0;
-   $10 = ($7>>>0)<($9>>>0);
-   if ($10) {
-    $11 = ((($7)) + 1|0);
-    HEAP32[$6>>2] = $11;
-    $12 = HEAP8[$7>>0]|0;
-    $13 = $12&255;
-    $$0 = $13;
-    break;
-   } else {
-    $14 = (___uflow($0)|0);
-    $$0 = $14;
-    break;
-   }
-  }
- } while(0);
- return ($$0|0);
-}
-function _printf($0,$varargs) {
- $0 = $0|0;
- $varargs = $varargs|0;
- var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $1 = sp;
- HEAP32[$1>>2] = $varargs;
- $2 = HEAP32[762]|0;
- $3 = (_vfprintf($2,$0,$1)|0);
- STACKTOP = sp;return ($3|0);
-}
-function _strtod($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $2 = 0.0, label = 0, sp = 0;
- sp = STACKTOP;
- $2 = (+_strtox($0,$1,1));
- return (+$2);
-}
-function _strtox($0,$1,$2) {
- $0 = $0|0;
- $1 = $1|0;
- $2 = $2|0;
- var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0.0, $9 = 0, dest = 0, label = 0, sp = 0, stop = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 128|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(128|0);
- $3 = sp;
- dest=$3; stop=dest+124|0; do { HEAP32[dest>>2]=0|0; dest=dest+4|0; } while ((dest|0) < (stop|0));
- $4 = ((($3)) + 4|0);
- HEAP32[$4>>2] = $0;
- $5 = ((($3)) + 8|0);
- HEAP32[$5>>2] = (-1);
- $6 = ((($3)) + 44|0);
- HEAP32[$6>>2] = $0;
- $7 = ((($3)) + 76|0);
- HEAP32[$7>>2] = -1;
- ___shlim($3,0);
- $8 = (+___floatscan($3,$2,1));
- $9 = ((($3)) + 108|0);
- $10 = HEAP32[$9>>2]|0;
- $11 = HEAP32[$4>>2]|0;
- $12 = HEAP32[$5>>2]|0;
- $13 = (($11) - ($12))|0;
- $14 = (($13) + ($10))|0;
- $15 = ($1|0)==(0|0);
- if (!($15)) {
-  $16 = ($14|0)!=(0);
-  $17 = (($0) + ($14)|0);
-  $18 = $16 ? $17 : $0;
-  HEAP32[$1>>2] = $18;
- }
- STACKTOP = sp;return (+$8);
-}
-function _strtof($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $2 = 0.0, $3 = 0.0, label = 0, sp = 0;
- sp = STACKTOP;
- $2 = (+_strtox($0,$1,0));
- $3 = $2;
- return (+$3);
-}
-function _malloc($0) {
- $0 = $0|0;
- var $$$0192$i = 0, $$$0193$i = 0, $$$4236$i = 0, $$$4351$i = 0, $$$i = 0, $$0 = 0, $$0$i$i = 0, $$0$i$i$i = 0, $$0$i18$i = 0, $$01$i$i = 0, $$0189$i = 0, $$0192$lcssa$i = 0, $$01928$i = 0, $$0193$lcssa$i = 0, $$01937$i = 0, $$0197 = 0, $$0199 = 0, $$0206$i$i = 0, $$0207$i$i = 0, $$0211$i$i = 0;
- var $$0212$i$i = 0, $$024371$i = 0, $$0287$i$i = 0, $$0288$i$i = 0, $$0289$i$i = 0, $$0295$i$i = 0, $$0296$i$i = 0, $$0342$i = 0, $$0344$i = 0, $$0345$i = 0, $$0347$i = 0, $$0353$i = 0, $$0358$i = 0, $$0359$$i = 0, $$0359$i = 0, $$0361$i = 0, $$0362$i = 0, $$0368$i = 0, $$1196$i = 0, $$1198$i = 0;
- var $$124470$i = 0, $$1291$i$i = 0, $$1293$i$i = 0, $$1343$i = 0, $$1348$i = 0, $$1363$i = 0, $$1370$i = 0, $$1374$i = 0, $$2234253237$i = 0, $$2247$ph$i = 0, $$2253$ph$i = 0, $$2355$i = 0, $$3$i = 0, $$3$i$i = 0, $$3$i201 = 0, $$3350$i = 0, $$3372$i = 0, $$4$lcssa$i = 0, $$4$ph$i = 0, $$415$i = 0;
- var $$4236$i = 0, $$4351$lcssa$i = 0, $$435114$i = 0, $$4357$$4$i = 0, $$4357$ph$i = 0, $$435713$i = 0, $$723948$i = 0, $$749$i = 0, $$pre = 0, $$pre$i = 0, $$pre$i$i = 0, $$pre$i19$i = 0, $$pre$i210 = 0, $$pre$i212 = 0, $$pre$phi$i$iZ2D = 0, $$pre$phi$i20$iZ2D = 0, $$pre$phi$i211Z2D = 0, $$pre$phi$iZ2D = 0, $$pre$phi11$i$iZ2D = 0, $$pre$phiZ2D = 0;
- var $$pre10$i$i = 0, $$sink1$i = 0, $$sink1$i$i = 0, $$sink16$i = 0, $$sink2$i = 0, $$sink2$i204 = 0, $$sink3$i = 0, $1 = 0, $10 = 0, $100 = 0, $1000 = 0, $1001 = 0, $1002 = 0, $1003 = 0, $1004 = 0, $1005 = 0, $1006 = 0, $1007 = 0, $1008 = 0, $1009 = 0;
- var $101 = 0, $1010 = 0, $1011 = 0, $1012 = 0, $1013 = 0, $1014 = 0, $1015 = 0, $1016 = 0, $1017 = 0, $1018 = 0, $1019 = 0, $102 = 0, $1020 = 0, $1021 = 0, $1022 = 0, $1023 = 0, $1024 = 0, $1025 = 0, $1026 = 0, $1027 = 0;
- var $1028 = 0, $1029 = 0, $103 = 0, $1030 = 0, $1031 = 0, $1032 = 0, $1033 = 0, $1034 = 0, $1035 = 0, $1036 = 0, $1037 = 0, $1038 = 0, $1039 = 0, $104 = 0, $1040 = 0, $1041 = 0, $1042 = 0, $1043 = 0, $1044 = 0, $1045 = 0;
- var $1046 = 0, $1047 = 0, $1048 = 0, $1049 = 0, $105 = 0, $1050 = 0, $1051 = 0, $1052 = 0, $1053 = 0, $1054 = 0, $1055 = 0, $1056 = 0, $1057 = 0, $1058 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0;
- var $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0;
- var $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0, $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0;
- var $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0, $152 = 0, $153 = 0, $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0;
- var $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0, $170 = 0, $171 = 0, $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0;
- var $184 = 0, $185 = 0, $186 = 0, $187 = 0, $188 = 0, $189 = 0, $19 = 0, $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0, $197 = 0, $198 = 0, $199 = 0, $2 = 0, $20 = 0, $200 = 0;
- var $201 = 0, $202 = 0, $203 = 0, $204 = 0, $205 = 0, $206 = 0, $207 = 0, $208 = 0, $209 = 0, $21 = 0, $210 = 0, $211 = 0, $212 = 0, $213 = 0, $214 = 0, $215 = 0, $216 = 0, $217 = 0, $218 = 0, $219 = 0;
- var $22 = 0, $220 = 0, $221 = 0, $222 = 0, $223 = 0, $224 = 0, $225 = 0, $226 = 0, $227 = 0, $228 = 0, $229 = 0, $23 = 0, $230 = 0, $231 = 0, $232 = 0, $233 = 0, $234 = 0, $235 = 0, $236 = 0, $237 = 0;
- var $238 = 0, $239 = 0, $24 = 0, $240 = 0, $241 = 0, $242 = 0, $243 = 0, $244 = 0, $245 = 0, $246 = 0, $247 = 0, $248 = 0, $249 = 0, $25 = 0, $250 = 0, $251 = 0, $252 = 0, $253 = 0, $254 = 0, $255 = 0;
- var $256 = 0, $257 = 0, $258 = 0, $259 = 0, $26 = 0, $260 = 0, $261 = 0, $262 = 0, $263 = 0, $264 = 0, $265 = 0, $266 = 0, $267 = 0, $268 = 0, $269 = 0, $27 = 0, $270 = 0, $271 = 0, $272 = 0, $273 = 0;
- var $274 = 0, $275 = 0, $276 = 0, $277 = 0, $278 = 0, $279 = 0, $28 = 0, $280 = 0, $281 = 0, $282 = 0, $283 = 0, $284 = 0, $285 = 0, $286 = 0, $287 = 0, $288 = 0, $289 = 0, $29 = 0, $290 = 0, $291 = 0;
- var $292 = 0, $293 = 0, $294 = 0, $295 = 0, $296 = 0, $297 = 0, $298 = 0, $299 = 0, $3 = 0, $30 = 0, $300 = 0, $301 = 0, $302 = 0, $303 = 0, $304 = 0, $305 = 0, $306 = 0, $307 = 0, $308 = 0, $309 = 0;
- var $31 = 0, $310 = 0, $311 = 0, $312 = 0, $313 = 0, $314 = 0, $315 = 0, $316 = 0, $317 = 0, $318 = 0, $319 = 0, $32 = 0, $320 = 0, $321 = 0, $322 = 0, $323 = 0, $324 = 0, $325 = 0, $326 = 0, $327 = 0;
- var $328 = 0, $329 = 0, $33 = 0, $330 = 0, $331 = 0, $332 = 0, $333 = 0, $334 = 0, $335 = 0, $336 = 0, $337 = 0, $338 = 0, $339 = 0, $34 = 0, $340 = 0, $341 = 0, $342 = 0, $343 = 0, $344 = 0, $345 = 0;
- var $346 = 0, $347 = 0, $348 = 0, $349 = 0, $35 = 0, $350 = 0, $351 = 0, $352 = 0, $353 = 0, $354 = 0, $355 = 0, $356 = 0, $357 = 0, $358 = 0, $359 = 0, $36 = 0, $360 = 0, $361 = 0, $362 = 0, $363 = 0;
- var $364 = 0, $365 = 0, $366 = 0, $367 = 0, $368 = 0, $369 = 0, $37 = 0, $370 = 0, $371 = 0, $372 = 0, $373 = 0, $374 = 0, $375 = 0, $376 = 0, $377 = 0, $378 = 0, $379 = 0, $38 = 0, $380 = 0, $381 = 0;
- var $382 = 0, $383 = 0, $384 = 0, $385 = 0, $386 = 0, $387 = 0, $388 = 0, $389 = 0, $39 = 0, $390 = 0, $391 = 0, $392 = 0, $393 = 0, $394 = 0, $395 = 0, $396 = 0, $397 = 0, $398 = 0, $399 = 0, $4 = 0;
- var $40 = 0, $400 = 0, $401 = 0, $402 = 0, $403 = 0, $404 = 0, $405 = 0, $406 = 0, $407 = 0, $408 = 0, $409 = 0, $41 = 0, $410 = 0, $411 = 0, $412 = 0, $413 = 0, $414 = 0, $415 = 0, $416 = 0, $417 = 0;
- var $418 = 0, $419 = 0, $42 = 0, $420 = 0, $421 = 0, $422 = 0, $423 = 0, $424 = 0, $425 = 0, $426 = 0, $427 = 0, $428 = 0, $429 = 0, $43 = 0, $430 = 0, $431 = 0, $432 = 0, $433 = 0, $434 = 0, $435 = 0;
- var $436 = 0, $437 = 0, $438 = 0, $439 = 0, $44 = 0, $440 = 0, $441 = 0, $442 = 0, $443 = 0, $444 = 0, $445 = 0, $446 = 0, $447 = 0, $448 = 0, $449 = 0, $45 = 0, $450 = 0, $451 = 0, $452 = 0, $453 = 0;
- var $454 = 0, $455 = 0, $456 = 0, $457 = 0, $458 = 0, $459 = 0, $46 = 0, $460 = 0, $461 = 0, $462 = 0, $463 = 0, $464 = 0, $465 = 0, $466 = 0, $467 = 0, $468 = 0, $469 = 0, $47 = 0, $470 = 0, $471 = 0;
- var $472 = 0, $473 = 0, $474 = 0, $475 = 0, $476 = 0, $477 = 0, $478 = 0, $479 = 0, $48 = 0, $480 = 0, $481 = 0, $482 = 0, $483 = 0, $484 = 0, $485 = 0, $486 = 0, $487 = 0, $488 = 0, $489 = 0, $49 = 0;
- var $490 = 0, $491 = 0, $492 = 0, $493 = 0, $494 = 0, $495 = 0, $496 = 0, $497 = 0, $498 = 0, $499 = 0, $5 = 0, $50 = 0, $500 = 0, $501 = 0, $502 = 0, $503 = 0, $504 = 0, $505 = 0, $506 = 0, $507 = 0;
- var $508 = 0, $509 = 0, $51 = 0, $510 = 0, $511 = 0, $512 = 0, $513 = 0, $514 = 0, $515 = 0, $516 = 0, $517 = 0, $518 = 0, $519 = 0, $52 = 0, $520 = 0, $521 = 0, $522 = 0, $523 = 0, $524 = 0, $525 = 0;
- var $526 = 0, $527 = 0, $528 = 0, $529 = 0, $53 = 0, $530 = 0, $531 = 0, $532 = 0, $533 = 0, $534 = 0, $535 = 0, $536 = 0, $537 = 0, $538 = 0, $539 = 0, $54 = 0, $540 = 0, $541 = 0, $542 = 0, $543 = 0;
- var $544 = 0, $545 = 0, $546 = 0, $547 = 0, $548 = 0, $549 = 0, $55 = 0, $550 = 0, $551 = 0, $552 = 0, $553 = 0, $554 = 0, $555 = 0, $556 = 0, $557 = 0, $558 = 0, $559 = 0, $56 = 0, $560 = 0, $561 = 0;
- var $562 = 0, $563 = 0, $564 = 0, $565 = 0, $566 = 0, $567 = 0, $568 = 0, $569 = 0, $57 = 0, $570 = 0, $571 = 0, $572 = 0, $573 = 0, $574 = 0, $575 = 0, $576 = 0, $577 = 0, $578 = 0, $579 = 0, $58 = 0;
- var $580 = 0, $581 = 0, $582 = 0, $583 = 0, $584 = 0, $585 = 0, $586 = 0, $587 = 0, $588 = 0, $589 = 0, $59 = 0, $590 = 0, $591 = 0, $592 = 0, $593 = 0, $594 = 0, $595 = 0, $596 = 0, $597 = 0, $598 = 0;
- var $599 = 0, $6 = 0, $60 = 0, $600 = 0, $601 = 0, $602 = 0, $603 = 0, $604 = 0, $605 = 0, $606 = 0, $607 = 0, $608 = 0, $609 = 0, $61 = 0, $610 = 0, $611 = 0, $612 = 0, $613 = 0, $614 = 0, $615 = 0;
- var $616 = 0, $617 = 0, $618 = 0, $619 = 0, $62 = 0, $620 = 0, $621 = 0, $622 = 0, $623 = 0, $624 = 0, $625 = 0, $626 = 0, $627 = 0, $628 = 0, $629 = 0, $63 = 0, $630 = 0, $631 = 0, $632 = 0, $633 = 0;
- var $634 = 0, $635 = 0, $636 = 0, $637 = 0, $638 = 0, $639 = 0, $64 = 0, $640 = 0, $641 = 0, $642 = 0, $643 = 0, $644 = 0, $645 = 0, $646 = 0, $647 = 0, $648 = 0, $649 = 0, $65 = 0, $650 = 0, $651 = 0;
- var $652 = 0, $653 = 0, $654 = 0, $655 = 0, $656 = 0, $657 = 0, $658 = 0, $659 = 0, $66 = 0, $660 = 0, $661 = 0, $662 = 0, $663 = 0, $664 = 0, $665 = 0, $666 = 0, $667 = 0, $668 = 0, $669 = 0, $67 = 0;
- var $670 = 0, $671 = 0, $672 = 0, $673 = 0, $674 = 0, $675 = 0, $676 = 0, $677 = 0, $678 = 0, $679 = 0, $68 = 0, $680 = 0, $681 = 0, $682 = 0, $683 = 0, $684 = 0, $685 = 0, $686 = 0, $687 = 0, $688 = 0;
- var $689 = 0, $69 = 0, $690 = 0, $691 = 0, $692 = 0, $693 = 0, $694 = 0, $695 = 0, $696 = 0, $697 = 0, $698 = 0, $699 = 0, $7 = 0, $70 = 0, $700 = 0, $701 = 0, $702 = 0, $703 = 0, $704 = 0, $705 = 0;
- var $706 = 0, $707 = 0, $708 = 0, $709 = 0, $71 = 0, $710 = 0, $711 = 0, $712 = 0, $713 = 0, $714 = 0, $715 = 0, $716 = 0, $717 = 0, $718 = 0, $719 = 0, $72 = 0, $720 = 0, $721 = 0, $722 = 0, $723 = 0;
- var $724 = 0, $725 = 0, $726 = 0, $727 = 0, $728 = 0, $729 = 0, $73 = 0, $730 = 0, $731 = 0, $732 = 0, $733 = 0, $734 = 0, $735 = 0, $736 = 0, $737 = 0, $738 = 0, $739 = 0, $74 = 0, $740 = 0, $741 = 0;
- var $742 = 0, $743 = 0, $744 = 0, $745 = 0, $746 = 0, $747 = 0, $748 = 0, $749 = 0, $75 = 0, $750 = 0, $751 = 0, $752 = 0, $753 = 0, $754 = 0, $755 = 0, $756 = 0, $757 = 0, $758 = 0, $759 = 0, $76 = 0;
- var $760 = 0, $761 = 0, $762 = 0, $763 = 0, $764 = 0, $765 = 0, $766 = 0, $767 = 0, $768 = 0, $769 = 0, $77 = 0, $770 = 0, $771 = 0, $772 = 0, $773 = 0, $774 = 0, $775 = 0, $776 = 0, $777 = 0, $778 = 0;
- var $779 = 0, $78 = 0, $780 = 0, $781 = 0, $782 = 0, $783 = 0, $784 = 0, $785 = 0, $786 = 0, $787 = 0, $788 = 0, $789 = 0, $79 = 0, $790 = 0, $791 = 0, $792 = 0, $793 = 0, $794 = 0, $795 = 0, $796 = 0;
- var $797 = 0, $798 = 0, $799 = 0, $8 = 0, $80 = 0, $800 = 0, $801 = 0, $802 = 0, $803 = 0, $804 = 0, $805 = 0, $806 = 0, $807 = 0, $808 = 0, $809 = 0, $81 = 0, $810 = 0, $811 = 0, $812 = 0, $813 = 0;
- var $814 = 0, $815 = 0, $816 = 0, $817 = 0, $818 = 0, $819 = 0, $82 = 0, $820 = 0, $821 = 0, $822 = 0, $823 = 0, $824 = 0, $825 = 0, $826 = 0, $827 = 0, $828 = 0, $829 = 0, $83 = 0, $830 = 0, $831 = 0;
- var $832 = 0, $833 = 0, $834 = 0, $835 = 0, $836 = 0, $837 = 0, $838 = 0, $839 = 0, $84 = 0, $840 = 0, $841 = 0, $842 = 0, $843 = 0, $844 = 0, $845 = 0, $846 = 0, $847 = 0, $848 = 0, $849 = 0, $85 = 0;
- var $850 = 0, $851 = 0, $852 = 0, $853 = 0, $854 = 0, $855 = 0, $856 = 0, $857 = 0, $858 = 0, $859 = 0, $86 = 0, $860 = 0, $861 = 0, $862 = 0, $863 = 0, $864 = 0, $865 = 0, $866 = 0, $867 = 0, $868 = 0;
- var $869 = 0, $87 = 0, $870 = 0, $871 = 0, $872 = 0, $873 = 0, $874 = 0, $875 = 0, $876 = 0, $877 = 0, $878 = 0, $879 = 0, $88 = 0, $880 = 0, $881 = 0, $882 = 0, $883 = 0, $884 = 0, $885 = 0, $886 = 0;
- var $887 = 0, $888 = 0, $889 = 0, $89 = 0, $890 = 0, $891 = 0, $892 = 0, $893 = 0, $894 = 0, $895 = 0, $896 = 0, $897 = 0, $898 = 0, $899 = 0, $9 = 0, $90 = 0, $900 = 0, $901 = 0, $902 = 0, $903 = 0;
- var $904 = 0, $905 = 0, $906 = 0, $907 = 0, $908 = 0, $909 = 0, $91 = 0, $910 = 0, $911 = 0, $912 = 0, $913 = 0, $914 = 0, $915 = 0, $916 = 0, $917 = 0, $918 = 0, $919 = 0, $92 = 0, $920 = 0, $921 = 0;
- var $922 = 0, $923 = 0, $924 = 0, $925 = 0, $926 = 0, $927 = 0, $928 = 0, $929 = 0, $93 = 0, $930 = 0, $931 = 0, $932 = 0, $933 = 0, $934 = 0, $935 = 0, $936 = 0, $937 = 0, $938 = 0, $939 = 0, $94 = 0;
- var $940 = 0, $941 = 0, $942 = 0, $943 = 0, $944 = 0, $945 = 0, $946 = 0, $947 = 0, $948 = 0, $949 = 0, $95 = 0, $950 = 0, $951 = 0, $952 = 0, $953 = 0, $954 = 0, $955 = 0, $956 = 0, $957 = 0, $958 = 0;
- var $959 = 0, $96 = 0, $960 = 0, $961 = 0, $962 = 0, $963 = 0, $964 = 0, $965 = 0, $966 = 0, $967 = 0, $968 = 0, $969 = 0, $97 = 0, $970 = 0, $971 = 0, $972 = 0, $973 = 0, $974 = 0, $975 = 0, $976 = 0;
- var $977 = 0, $978 = 0, $979 = 0, $98 = 0, $980 = 0, $981 = 0, $982 = 0, $983 = 0, $984 = 0, $985 = 0, $986 = 0, $987 = 0, $988 = 0, $989 = 0, $99 = 0, $990 = 0, $991 = 0, $992 = 0, $993 = 0, $994 = 0;
- var $995 = 0, $996 = 0, $997 = 0, $998 = 0, $999 = 0, $cond$i = 0, $cond$i$i = 0, $cond$i208 = 0, $exitcond$i$i = 0, $not$$i = 0, $not$$i$i = 0, $not$$i17$i = 0, $not$$i209 = 0, $not$$i216 = 0, $not$1$i = 0, $not$1$i203 = 0, $not$5$i = 0, $not$7$i$i = 0, $not$8$i = 0, $not$9$i = 0;
- var $or$cond$i = 0, $or$cond$i214 = 0, $or$cond1$i = 0, $or$cond10$i = 0, $or$cond11$i = 0, $or$cond11$not$i = 0, $or$cond12$i = 0, $or$cond2$i = 0, $or$cond2$i215 = 0, $or$cond5$i = 0, $or$cond50$i = 0, $or$cond51$i = 0, $or$cond7$i = 0, label = 0, sp = 0;
- sp = STACKTOP;
- STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);
- $1 = sp;
- $2 = ($0>>>0)<(245);
- do {
-  if ($2) {
-   $3 = ($0>>>0)<(11);
-   $4 = (($0) + 11)|0;
-   $5 = $4 & -8;
-   $6 = $3 ? 16 : $5;
-   $7 = $6 >>> 3;
-   $8 = HEAP32[18817]|0;
-   $9 = $8 >>> $7;
-   $10 = $9 & 3;
-   $11 = ($10|0)==(0);
-   if (!($11)) {
-    $12 = $9 & 1;
-    $13 = $12 ^ 1;
-    $14 = (($13) + ($7))|0;
-    $15 = $14 << 1;
-    $16 = (75308 + ($15<<2)|0);
-    $17 = ((($16)) + 8|0);
-    $18 = HEAP32[$17>>2]|0;
-    $19 = ((($18)) + 8|0);
-    $20 = HEAP32[$19>>2]|0;
-    $21 = ($16|0)==($20|0);
-    do {
-     if ($21) {
-      $22 = 1 << $14;
-      $23 = $22 ^ -1;
-      $24 = $8 & $23;
-      HEAP32[18817] = $24;
-     } else {
-      $25 = HEAP32[(75284)>>2]|0;
-      $26 = ($20>>>0)<($25>>>0);
-      if ($26) {
-       _abort();
-       // unreachable;
-      }
-      $27 = ((($20)) + 12|0);
-      $28 = HEAP32[$27>>2]|0;
-      $29 = ($28|0)==($18|0);
-      if ($29) {
-       HEAP32[$27>>2] = $16;
-       HEAP32[$17>>2] = $20;
-       break;
-      } else {
-       _abort();
-       // unreachable;
-      }
-     }
-    } while(0);
-    $30 = $14 << 3;
-    $31 = $30 | 3;
-    $32 = ((($18)) + 4|0);
-    HEAP32[$32>>2] = $31;
-    $33 = (($18) + ($30)|0);
-    $34 = ((($33)) + 4|0);
-    $35 = HEAP32[$34>>2]|0;
-    $36 = $35 | 1;
-    HEAP32[$34>>2] = $36;
-    $$0 = $19;
-    STACKTOP = sp;return ($$0|0);
-   }
-   $37 = HEAP32[(75276)>>2]|0;
-   $38 = ($6>>>0)>($37>>>0);
-   if ($38) {
-    $39 = ($9|0)==(0);
-    if (!($39)) {
-     $40 = $9 << $7;
-     $41 = 2 << $7;
-     $42 = (0 - ($41))|0;
-     $43 = $41 | $42;
-     $44 = $40 & $43;
-     $45 = (0 - ($44))|0;
-     $46 = $44 & $45;
-     $47 = (($46) + -1)|0;
-     $48 = $47 >>> 12;
-     $49 = $48 & 16;
-     $50 = $47 >>> $49;
-     $51 = $50 >>> 5;
-     $52 = $51 & 8;
-     $53 = $52 | $49;
-     $54 = $50 >>> $52;
-     $55 = $54 >>> 2;
-     $56 = $55 & 4;
-     $57 = $53 | $56;
-     $58 = $54 >>> $56;
-     $59 = $58 >>> 1;
-     $60 = $59 & 2;
-     $61 = $57 | $60;
-     $62 = $58 >>> $60;
-     $63 = $62 >>> 1;
-     $64 = $63 & 1;
-     $65 = $61 | $64;
-     $66 = $62 >>> $64;
-     $67 = (($65) + ($66))|0;
-     $68 = $67 << 1;
-     $69 = (75308 + ($68<<2)|0);
-     $70 = ((($69)) + 8|0);
-     $71 = HEAP32[$70>>2]|0;
-     $72 = ((($71)) + 8|0);
-     $73 = HEAP32[$72>>2]|0;
-     $74 = ($69|0)==($73|0);
-     do {
-      if ($74) {
-       $75 = 1 << $67;
-       $76 = $75 ^ -1;
-       $77 = $8 & $76;
-       HEAP32[18817] = $77;
-       $98 = $77;
-      } else {
-       $78 = HEAP32[(75284)>>2]|0;
-       $79 = ($73>>>0)<($78>>>0);
-       if ($79) {
-        _abort();
-        // unreachable;
-       }
-       $80 = ((($73)) + 12|0);
-       $81 = HEAP32[$80>>2]|0;
-       $82 = ($81|0)==($71|0);
-       if ($82) {
-        HEAP32[$80>>2] = $69;
-        HEAP32[$70>>2] = $73;
-        $98 = $8;
-        break;
-       } else {
-        _abort();
-        // unreachable;
-       }
-      }
-     } while(0);
-     $83 = $67 << 3;
-     $84 = (($83) - ($6))|0;
-     $85 = $6 | 3;
-     $86 = ((($71)) + 4|0);
-     HEAP32[$86>>2] = $85;
-     $87 = (($71) + ($6)|0);
-     $88 = $84 | 1;
-     $89 = ((($87)) + 4|0);
-     HEAP32[$89>>2] = $88;
-     $90 = (($87) + ($84)|0);
-     HEAP32[$90>>2] = $84;
-     $91 = ($37|0)==(0);
-     if (!($91)) {
-      $92 = HEAP32[(75288)>>2]|0;
-      $93 = $37 >>> 3;
-      $94 = $93 << 1;
-      $95 = (75308 + ($94<<2)|0);
-      $96 = 1 << $93;
-      $97 = $98 & $96;
-      $99 = ($97|0)==(0);
-      if ($99) {
-       $100 = $98 | $96;
-       HEAP32[18817] = $100;
-       $$pre = ((($95)) + 8|0);
-       $$0199 = $95;$$pre$phiZ2D = $$pre;
-      } else {
-       $101 = ((($95)) + 8|0);
-       $102 = HEAP32[$101>>2]|0;
-       $103 = HEAP32[(75284)>>2]|0;
-       $104 = ($102>>>0)<($103>>>0);
-       if ($104) {
-        _abort();
-        // unreachable;
-       } else {
-        $$0199 = $102;$$pre$phiZ2D = $101;
-       }
-      }
-      HEAP32[$$pre$phiZ2D>>2] = $92;
-      $105 = ((($$0199)) + 12|0);
-      HEAP32[$105>>2] = $92;
-      $106 = ((($92)) + 8|0);
-      HEAP32[$106>>2] = $$0199;
-      $107 = ((($92)) + 12|0);
-      HEAP32[$107>>2] = $95;
-     }
-     HEAP32[(75276)>>2] = $84;
-     HEAP32[(75288)>>2] = $87;
-     $$0 = $72;
-     STACKTOP = sp;return ($$0|0);
-    }
-    $108 = HEAP32[(75272)>>2]|0;
-    $109 = ($108|0)==(0);
-    if ($109) {
-     $$0197 = $6;
-    } else {
-     $110 = (0 - ($108))|0;
-     $111 = $108 & $110;
-     $112 = (($111) + -1)|0;
-     $113 = $112 >>> 12;
-     $114 = $113 & 16;
-     $115 = $112 >>> $114;
-     $116 = $115 >>> 5;
-     $117 = $116 & 8;
-     $118 = $117 | $114;
-     $119 = $115 >>> $117;
-     $120 = $119 >>> 2;
-     $121 = $120 & 4;
-     $122 = $118 | $121;
-     $123 = $119 >>> $121;
-     $124 = $123 >>> 1;
-     $125 = $124 & 2;
-     $126 = $122 | $125;
-     $127 = $123 >>> $125;
-     $128 = $127 >>> 1;
-     $129 = $128 & 1;
-     $130 = $126 | $129;
-     $131 = $127 >>> $129;
-     $132 = (($130) + ($131))|0;
-     $133 = (75572 + ($132<<2)|0);
-     $134 = HEAP32[$133>>2]|0;
-     $135 = ((($134)) + 4|0);
-     $136 = HEAP32[$135>>2]|0;
-     $137 = $136 & -8;
-     $138 = (($137) - ($6))|0;
-     $139 = ((($134)) + 16|0);
-     $140 = HEAP32[$139>>2]|0;
-     $not$5$i = ($140|0)==(0|0);
-     $$sink16$i = $not$5$i&1;
-     $141 = (((($134)) + 16|0) + ($$sink16$i<<2)|0);
-     $142 = HEAP32[$141>>2]|0;
-     $143 = ($142|0)==(0|0);
-     if ($143) {
-      $$0192$lcssa$i = $134;$$0193$lcssa$i = $138;
-     } else {
-      $$01928$i = $134;$$01937$i = $138;$145 = $142;
-      while(1) {
-       $144 = ((($145)) + 4|0);
-       $146 = HEAP32[$144>>2]|0;
-       $147 = $146 & -8;
-       $148 = (($147) - ($6))|0;
-       $149 = ($148>>>0)<($$01937$i>>>0);
-       $$$0193$i = $149 ? $148 : $$01937$i;
-       $$$0192$i = $149 ? $145 : $$01928$i;
-       $150 = ((($145)) + 16|0);
-       $151 = HEAP32[$150>>2]|0;
-       $not$$i = ($151|0)==(0|0);
-       $$sink1$i = $not$$i&1;
-       $152 = (((($145)) + 16|0) + ($$sink1$i<<2)|0);
-       $153 = HEAP32[$152>>2]|0;
-       $154 = ($153|0)==(0|0);
-       if ($154) {
-        $$0192$lcssa$i = $$$0192$i;$$0193$lcssa$i = $$$0193$i;
-        break;
-       } else {
-        $$01928$i = $$$0192$i;$$01937$i = $$$0193$i;$145 = $153;
-       }
-      }
-     }
-     $155 = HEAP32[(75284)>>2]|0;
-     $156 = ($$0192$lcssa$i>>>0)<($155>>>0);
-     if ($156) {
-      _abort();
-      // unreachable;
-     }
-     $157 = (($$0192$lcssa$i) + ($6)|0);
-     $158 = ($$0192$lcssa$i>>>0)<($157>>>0);
-     if (!($158)) {
-      _abort();
-      // unreachable;
-     }
-     $159 = ((($$0192$lcssa$i)) + 24|0);
-     $160 = HEAP32[$159>>2]|0;
-     $161 = ((($$0192$lcssa$i)) + 12|0);
-     $162 = HEAP32[$161>>2]|0;
-     $163 = ($162|0)==($$0192$lcssa$i|0);
-     do {
-      if ($163) {
-       $173 = ((($$0192$lcssa$i)) + 20|0);
-       $174 = HEAP32[$173>>2]|0;
-       $175 = ($174|0)==(0|0);
-       if ($175) {
-        $176 = ((($$0192$lcssa$i)) + 16|0);
-        $177 = HEAP32[$176>>2]|0;
-        $178 = ($177|0)==(0|0);
-        if ($178) {
-         $$3$i = 0;
-         break;
-        } else {
-         $$1196$i = $177;$$1198$i = $176;
-        }
-       } else {
-        $$1196$i = $174;$$1198$i = $173;
-       }
-       while(1) {
-        $179 = ((($$1196$i)) + 20|0);
-        $180 = HEAP32[$179>>2]|0;
-        $181 = ($180|0)==(0|0);
-        if (!($181)) {
-         $$1196$i = $180;$$1198$i = $179;
-         continue;
-        }
-        $182 = ((($$1196$i)) + 16|0);
-        $183 = HEAP32[$182>>2]|0;
-        $184 = ($183|0)==(0|0);
-        if ($184) {
-         break;
-        } else {
-         $$1196$i = $183;$$1198$i = $182;
-        }
-       }
-       $185 = ($$1198$i>>>0)<($155>>>0);
-       if ($185) {
-        _abort();
-        // unreachable;
-       } else {
-        HEAP32[$$1198$i>>2] = 0;
-        $$3$i = $$1196$i;
-        break;
-       }
-      } else {
-       $164 = ((($$0192$lcssa$i)) + 8|0);
-       $165 = HEAP32[$164>>2]|0;
-       $166 = ($165>>>0)<($155>>>0);
-       if ($166) {
-        _abort();
-        // unreachable;
-       }
-       $167 = ((($165)) + 12|0);
-       $168 = HEAP32[$167>>2]|0;
-       $169 = ($168|0)==($$0192$lcssa$i|0);
-       if (!($169)) {
-        _abort();
-        // unreachable;
-       }
-       $170 = ((($162)) + 8|0);
-       $171 = HEAP32[$170>>2]|0;
-       $172 = ($171|0)==($$0192$lcssa$i|0);
-       if ($172) {
-        HEAP32[$167>>2] = $162;
-        HEAP32[$170>>2] = $165;
-        $$3$i = $162;
-        break;
-       } else {
-        _abort();
-        // unreachable;
-       }
-      }
-     } while(0);
-     $186 = ($160|0)==(0|0);
-     L73: do {
-      if (!($186)) {
-       $187 = ((($$0192$lcssa$i)) + 28|0);
-       $188 = HEAP32[$187>>2]|0;
-       $189 = (75572 + ($188<<2)|0);
-       $190 = HEAP32[$189>>2]|0;
-       $191 = ($$0192$lcssa$i|0)==($190|0);
-       do {
-        if ($191) {
-         HEAP32[$189>>2] = $$3$i;
-         $cond$i = ($$3$i|0)==(0|0);
-         if ($cond$i) {
-          $192 = 1 << $188;
-          $193 = $192 ^ -1;
-          $194 = $108 & $193;
-          HEAP32[(75272)>>2] = $194;
-          break L73;
-         }
-        } else {
-         $195 = HEAP32[(75284)>>2]|0;
-         $196 = ($160>>>0)<($195>>>0);
-         if ($196) {
-          _abort();
-          // unreachable;
-         } else {
-          $197 = ((($160)) + 16|0);
-          $198 = HEAP32[$197>>2]|0;
-          $not$1$i = ($198|0)!=($$0192$lcssa$i|0);
-          $$sink2$i = $not$1$i&1;
-          $199 = (((($160)) + 16|0) + ($$sink2$i<<2)|0);
-          HEAP32[$199>>2] = $$3$i;
-          $200 = ($$3$i|0)==(0|0);
-          if ($200) {
-           break L73;
-          } else {
-           break;
-          }
-         }
-        }
-       } while(0);
-       $201 = HEAP32[(75284)>>2]|0;
-       $202 = ($$3$i>>>0)<($201>>>0);
-       if ($202) {
-        _abort();
-        // unreachable;
-       }
-       $203 = ((($$3$i)) + 24|0);
-       HEAP32[$203>>2] = $160;
-       $204 = ((($$0192$lcssa$i)) + 16|0);
-       $205 = HEAP32[$204>>2]|0;
-       $206 = ($205|0)==(0|0);
-       do {
-        if (!($206)) {
-         $207 = ($205>>>0)<($201>>>0);
-         if ($207) {
-          _abort();
-          // unreachable;
-         } else {
-          $208 = ((($$3$i)) + 16|0);
-          HEAP32[$208>>2] = $205;
-          $209 = ((($205)) + 24|0);
-          HEAP32[$209>>2] = $$3$i;
-          break;
-         }
-        }
-       } while(0);
-       $210 = ((($$0192$lcssa$i)) + 20|0);
-       $211 = HEAP32[$210>>2]|0;
-       $212 = ($211|0)==(0|0);
-       if (!($212)) {
-        $213 = HEAP32[(75284)>>2]|0;
-        $214 = ($211>>>0)<($213>>>0);
-        if ($214) {
-         _abort();
-         // unreachable;
-        } else {
-         $215 = ((($$3$i)) + 20|0);
-         HEAP32[$215>>2] = $211;
-         $216 = ((($211)) + 24|0);
-         HEAP32[$216>>2] = $$3$i;
-         break;
-        }
-       }
-      }
-     } while(0);
-     $217 = ($$0193$lcssa$i>>>0)<(16);
-     if ($217) {
-      $218 = (($$0193$lcssa$i) + ($6))|0;
-      $219 = $218 | 3;
-      $220 = ((($$0192$lcssa$i)) + 4|0);
-      HEAP32[$220>>2] = $219;
-      $221 = (($$0192$lcssa$i) + ($218)|0);
-      $222 = ((($221)) + 4|0);
-      $223 = HEAP32[$222>>2]|0;
-      $224 = $223 | 1;
-      HEAP32[$222>>2] = $224;
-     } else {
-      $225 = $6 | 3;
-      $226 = ((($$0192$lcssa$i)) + 4|0);
-      HEAP32[$226>>2] = $225;
-      $227 = $$0193$lcssa$i | 1;
-      $228 = ((($157)) + 4|0);
-      HEAP32[$228>>2] = $227;
-      $229 = (($157) + ($$0193$lcssa$i)|0);
-      HEAP32[$229>>2] = $$0193$lcssa$i;
-      $230 = ($37|0)==(0);
-      if (!($230)) {
-       $231 = HEAP32[(75288)>>2]|0;
-       $232 = $37 >>> 3;
-       $233 = $232 << 1;
-       $234 = (75308 + ($233<<2)|0);
-       $235 = 1 << $232;
-       $236 = $8 & $235;
-       $237 = ($236|0)==(0);
-       if ($237) {
-        $238 = $8 | $235;
-        HEAP32[18817] = $238;
-        $$pre$i = ((($234)) + 8|0);
-        $$0189$i = $234;$$pre$phi$iZ2D = $$pre$i;
-       } else {
-        $239 = ((($234)) + 8|0);
-        $240 = HEAP32[$239>>2]|0;
-        $241 = HEAP32[(75284)>>2]|0;
-        $242 = ($240>>>0)<($241>>>0);
-        if ($242) {
-         _abort();
-         // unreachable;
-        } else {
-         $$0189$i = $240;$$pre$phi$iZ2D = $239;
-        }
-       }
-       HEAP32[$$pre$phi$iZ2D>>2] = $231;
-       $243 = ((($$0189$i)) + 12|0);
-       HEAP32[$243>>2] = $231;
-       $244 = ((($231)) + 8|0);
-       HEAP32[$244>>2] = $$0189$i;
-       $245 = ((($231)) + 12|0);
-       HEAP32[$245>>2] = $234;
-      }
-      HEAP32[(75276)>>2] = $$0193$lcssa$i;
-      HEAP32[(75288)>>2] = $157;
-     }
-     $246 = ((($$0192$lcssa$i)) + 8|0);
-     $$0 = $246;
-     STACKTOP = sp;return ($$0|0);
-    }
-   } else {
-    $$0197 = $6;
-   }
-  } else {
-   $247 = ($0>>>0)>(4294967231);
-   if ($247) {
-    $$0197 = -1;
-   } else {
-    $248 = (($0) + 11)|0;
-    $249 = $248 & -8;
-    $250 = HEAP32[(75272)>>2]|0;
-    $251 = ($250|0)==(0);
-    if ($251) {
-     $$0197 = $249;
-    } else {
-     $252 = (0 - ($249))|0;
-     $253 = $248 >>> 8;
-     $254 = ($253|0)==(0);
-     if ($254) {
-      $$0358$i = 0;
-     } else {
-      $255 = ($249>>>0)>(16777215);
-      if ($255) {
-       $$0358$i = 31;
-      } else {
-       $256 = (($253) + 1048320)|0;
-       $257 = $256 >>> 16;
-       $258 = $257 & 8;
-       $259 = $253 << $258;
-       $260 = (($259) + 520192)|0;
-       $261 = $260 >>> 16;
-       $262 = $261 & 4;
-       $263 = $262 | $258;
-       $264 = $259 << $262;
-       $265 = (($264) + 245760)|0;
-       $266 = $265 >>> 16;
-       $267 = $266 & 2;
-       $268 = $263 | $267;
-       $269 = (14 - ($268))|0;
-       $270 = $264 << $267;
-       $271 = $270 >>> 15;
-       $272 = (($269) + ($271))|0;
-       $273 = $272 << 1;
-       $274 = (($272) + 7)|0;
-       $275 = $249 >>> $274;
-       $276 = $275 & 1;
-       $277 = $276 | $273;
-       $$0358$i = $277;
-      }
-     }
-     $278 = (75572 + ($$0358$i<<2)|0);
-     $279 = HEAP32[$278>>2]|0;
-     $280 = ($279|0)==(0|0);
-     L117: do {
-      if ($280) {
-       $$2355$i = 0;$$3$i201 = 0;$$3350$i = $252;
-       label = 81;
-      } else {
-       $281 = ($$0358$i|0)==(31);
-       $282 = $$0358$i >>> 1;
-       $283 = (25 - ($282))|0;
-       $284 = $281 ? 0 : $283;
-       $285 = $249 << $284;
-       $$0342$i = 0;$$0347$i = $252;$$0353$i = $279;$$0359$i = $285;$$0362$i = 0;
-       while(1) {
-        $286 = ((($$0353$i)) + 4|0);
-        $287 = HEAP32[$286>>2]|0;
-        $288 = $287 & -8;
-        $289 = (($288) - ($249))|0;
-        $290 = ($289>>>0)<($$0347$i>>>0);
-        if ($290) {
-         $291 = ($289|0)==(0);
-         if ($291) {
-          $$415$i = $$0353$i;$$435114$i = 0;$$435713$i = $$0353$i;
-          label = 85;
-          break L117;
-         } else {
-          $$1343$i = $$0353$i;$$1348$i = $289;
-         }
-        } else {
-         $$1343$i = $$0342$i;$$1348$i = $$0347$i;
-        }
-        $292 = ((($$0353$i)) + 20|0);
-        $293 = HEAP32[$292>>2]|0;
-        $294 = $$0359$i >>> 31;
-        $295 = (((($$0353$i)) + 16|0) + ($294<<2)|0);
-        $296 = HEAP32[$295>>2]|0;
-        $297 = ($293|0)==(0|0);
-        $298 = ($293|0)==($296|0);
-        $or$cond2$i = $297 | $298;
-        $$1363$i = $or$cond2$i ? $$0362$i : $293;
-        $299 = ($296|0)==(0|0);
-        $not$8$i = $299 ^ 1;
-        $300 = $not$8$i&1;
-        $$0359$$i = $$0359$i << $300;
-        if ($299) {
-         $$2355$i = $$1363$i;$$3$i201 = $$1343$i;$$3350$i = $$1348$i;
-         label = 81;
-         break;
-        } else {
-         $$0342$i = $$1343$i;$$0347$i = $$1348$i;$$0353$i = $296;$$0359$i = $$0359$$i;$$0362$i = $$1363$i;
-        }
-       }
-      }
-     } while(0);
-     if ((label|0) == 81) {
-      $301 = ($$2355$i|0)==(0|0);
-      $302 = ($$3$i201|0)==(0|0);
-      $or$cond$i = $301 & $302;
-      if ($or$cond$i) {
-       $303 = 2 << $$0358$i;
-       $304 = (0 - ($303))|0;
-       $305 = $303 | $304;
-       $306 = $250 & $305;
-       $307 = ($306|0)==(0);
-       if ($307) {
-        $$0197 = $249;
-        break;
-       }
-       $308 = (0 - ($306))|0;
-       $309 = $306 & $308;
-       $310 = (($309) + -1)|0;
-       $311 = $310 >>> 12;
-       $312 = $311 & 16;
-       $313 = $310 >>> $312;
-       $314 = $313 >>> 5;
-       $315 = $314 & 8;
-       $316 = $315 | $312;
-       $317 = $313 >>> $315;
-       $318 = $317 >>> 2;
-       $319 = $318 & 4;
-       $320 = $316 | $319;
-       $321 = $317 >>> $319;
-       $322 = $321 >>> 1;
-       $323 = $322 & 2;
-       $324 = $320 | $323;
-       $325 = $321 >>> $323;
-       $326 = $325 >>> 1;
-       $327 = $326 & 1;
-       $328 = $324 | $327;
-       $329 = $325 >>> $327;
-       $330 = (($328) + ($329))|0;
-       $331 = (75572 + ($330<<2)|0);
-       $332 = HEAP32[$331>>2]|0;
-       $$4$ph$i = 0;$$4357$ph$i = $332;
-      } else {
-       $$4$ph$i = $$3$i201;$$4357$ph$i = $$2355$i;
-      }
-      $333 = ($$4357$ph$i|0)==(0|0);
-      if ($333) {
-       $$4$lcssa$i = $$4$ph$i;$$4351$lcssa$i = $$3350$i;
-      } else {
-       $$415$i = $$4$ph$i;$$435114$i = $$3350$i;$$435713$i = $$4357$ph$i;
-       label = 85;
-      }
-     }
-     if ((label|0) == 85) {
-      while(1) {
-       label = 0;
-       $334 = ((($$435713$i)) + 4|0);
-       $335 = HEAP32[$334>>2]|0;
-       $336 = $335 & -8;
-       $337 = (($336) - ($249))|0;
-       $338 = ($337>>>0)<($$435114$i>>>0);
-       $$$4351$i = $338 ? $337 : $$435114$i;
-       $$4357$$4$i = $338 ? $$435713$i : $$415$i;
-       $339 = ((($$435713$i)) + 16|0);
-       $340 = HEAP32[$339>>2]|0;
-       $not$1$i203 = ($340|0)==(0|0);
-       $$sink2$i204 = $not$1$i203&1;
-       $341 = (((($$435713$i)) + 16|0) + ($$sink2$i204<<2)|0);
-       $342 = HEAP32[$341>>2]|0;
-       $343 = ($342|0)==(0|0);
-       if ($343) {
-        $$4$lcssa$i = $$4357$$4$i;$$4351$lcssa$i = $$$4351$i;
-        break;
-       } else {
-        $$415$i = $$4357$$4$i;$$435114$i = $$$4351$i;$$435713$i = $342;
-        label = 85;
-       }
-      }
-     }
-     $344 = ($$4$lcssa$i|0)==(0|0);
-     if ($344) {
-      $$0197 = $249;
-     } else {
-      $345 = HEAP32[(75276)>>2]|0;
-      $346 = (($345) - ($249))|0;
-      $347 = ($$4351$lcssa$i>>>0)<($346>>>0);
-      if ($347) {
-       $348 = HEAP32[(75284)>>2]|0;
-       $349 = ($$4$lcssa$i>>>0)<($348>>>0);
-       if ($349) {
-        _abort();
-        // unreachable;
-       }
-       $350 = (($$4$lcssa$i) + ($249)|0);
-       $351 = ($$4$lcssa$i>>>0)<($350>>>0);
-       if (!($351)) {
-        _abort();
-        // unreachable;
-       }
-       $352 = ((($$4$lcssa$i)) + 24|0);
-       $353 = HEAP32[$352>>2]|0;
-       $354 = ((($$4$lcssa$i)) + 12|0);
-       $355 = HEAP32[$354>>2]|0;
-       $356 = ($355|0)==($$4$lcssa$i|0);
-       do {
-        if ($356) {
-         $366 = ((($$4$lcssa$i)) + 20|0);
-         $367 = HEAP32[$366>>2]|0;
-         $368 = ($367|0)==(0|0);
-         if ($368) {
-          $369 = ((($$4$lcssa$i)) + 16|0);
-          $370 = HEAP32[$369>>2]|0;
-          $371 = ($370|0)==(0|0);
-          if ($371) {
-           $$3372$i = 0;
-           break;
-          } else {
-           $$1370$i = $370;$$1374$i = $369;
-          }
-         } else {
-          $$1370$i = $367;$$1374$i = $366;
-         }
-         while(1) {
-          $372 = ((($$1370$i)) + 20|0);
-          $373 = HEAP32[$372>>2]|0;
-          $374 = ($373|0)==(0|0);
-          if (!($374)) {
-           $$1370$i = $373;$$1374$i = $372;
-           continue;
-          }
-          $375 = ((($$1370$i)) + 16|0);
-          $376 = HEAP32[$375>>2]|0;
-          $377 = ($376|0)==(0|0);
-          if ($377) {
-           break;
-          } else {
-           $$1370$i = $376;$$1374$i = $375;
-          }
-         }
-         $378 = ($$1374$i>>>0)<($348>>>0);
-         if ($378) {
-          _abort();
-          // unreachable;
-         } else {
-          HEAP32[$$1374$i>>2] = 0;
-          $$3372$i = $$1370$i;
-          break;
-         }
-        } else {
-         $357 = ((($$4$lcssa$i)) + 8|0);
-         $358 = HEAP32[$357>>2]|0;
-         $359 = ($358>>>0)<($348>>>0);
-         if ($359) {
-          _abort();
-          // unreachable;
-         }
-         $360 = ((($358)) + 12|0);
-         $361 = HEAP32[$360>>2]|0;
-         $362 = ($361|0)==($$4$lcssa$i|0);
-         if (!($362)) {
-          _abort();
-          // unreachable;
-         }
-         $363 = ((($355)) + 8|0);
-         $364 = HEAP32[$363>>2]|0;
-         $365 = ($364|0)==($$4$lcssa$i|0);
-         if ($365) {
-          HEAP32[$360>>2] = $355;
-          HEAP32[$363>>2] = $358;
-          $$3372$i = $355;
-          break;
-         } else {
-          _abort();
-          // unreachable;
-         }
-        }
-       } while(0);
-       $379 = ($353|0)==(0|0);
-       L164: do {
-        if ($379) {
-         $470 = $250;
-        } else {
-         $380 = ((($$4$lcssa$i)) + 28|0);
-         $381 = HEAP32[$380>>2]|0;
-         $382 = (75572 + ($381<<2)|0);
-         $383 = HEAP32[$382>>2]|0;
-         $384 = ($$4$lcssa$i|0)==($383|0);
-         do {
-          if ($384) {
-           HEAP32[$382>>2] = $$3372$i;
-           $cond$i208 = ($$3372$i|0)==(0|0);
-           if ($cond$i208) {
-            $385 = 1 << $381;
-            $386 = $385 ^ -1;
-            $387 = $250 & $386;
-            HEAP32[(75272)>>2] = $387;
-            $470 = $387;
-            break L164;
-           }
-          } else {
-           $388 = HEAP32[(75284)>>2]|0;
-           $389 = ($353>>>0)<($388>>>0);
-           if ($389) {
-            _abort();
-            // unreachable;
-           } else {
-            $390 = ((($353)) + 16|0);
-            $391 = HEAP32[$390>>2]|0;
-            $not$$i209 = ($391|0)!=($$4$lcssa$i|0);
-            $$sink3$i = $not$$i209&1;
-            $392 = (((($353)) + 16|0) + ($$sink3$i<<2)|0);
-            HEAP32[$392>>2] = $$3372$i;
-            $393 = ($$3372$i|0)==(0|0);
-            if ($393) {
-             $470 = $250;
-             break L164;
-            } else {
-             break;
-            }
-           }
-          }
-         } while(0);
-         $394 = HEAP32[(75284)>>2]|0;
-         $395 = ($$3372$i>>>0)<($394>>>0);
-         if ($395) {
-          _abort();
-          // unreachable;
-         }
-         $396 = ((($$3372$i)) + 24|0);
-         HEAP32[$396>>2] = $353;
-         $397 = ((($$4$lcssa$i)) + 16|0);
-         $398 = HEAP32[$397>>2]|0;
-         $399 = ($398|0)==(0|0);
-         do {
-          if (!($399)) {
-           $400 = ($398>>>0)<($394>>>0);
-           if ($400) {
-            _abort();
-            // unreachable;
-           } else {
-            $401 = ((($$3372$i)) + 16|0);
-            HEAP32[$401>>2] = $398;
-            $402 = ((($398)) + 24|0);
-            HEAP32[$402>>2] = $$3372$i;
-            break;
-           }
-          }
-         } while(0);
-         $403 = ((($$4$lcssa$i)) + 20|0);
-         $404 = HEAP32[$403>>2]|0;
-         $405 = ($404|0)==(0|0);
-         if ($405) {
-          $470 = $250;
-         } else {
-          $406 = HEAP32[(75284)>>2]|0;
-          $407 = ($404>>>0)<($406>>>0);
-          if ($407) {
-           _abort();
-           // unreachable;
-          } else {
-           $408 = ((($$3372$i)) + 20|0);
-           HEAP32[$408>>2] = $404;
-           $409 = ((($404)) + 24|0);
-           HEAP32[$409>>2] = $$3372$i;
-           $470 = $250;
-           break;
-          }
-         }
-        }
-       } while(0);
-       $410 = ($$4351$lcssa$i>>>0)<(16);
-       do {
-        if ($410) {
-         $411 = (($$4351$lcssa$i) + ($249))|0;
-         $412 = $411 | 3;
-         $413 = ((($$4$lcssa$i)) + 4|0);
-         HEAP32[$413>>2] = $412;
-         $414 = (($$4$lcssa$i) + ($411)|0);
-         $415 = ((($414)) + 4|0);
-         $416 = HEAP32[$415>>2]|0;
-         $417 = $416 | 1;
-         HEAP32[$415>>2] = $417;
-        } else {
-         $418 = $249 | 3;
-         $419 = ((($$4$lcssa$i)) + 4|0);
-         HEAP32[$419>>2] = $418;
-         $420 = $$4351$lcssa$i | 1;
-         $421 = ((($350)) + 4|0);
-         HEAP32[$421>>2] = $420;
-         $422 = (($350) + ($$4351$lcssa$i)|0);
-         HEAP32[$422>>2] = $$4351$lcssa$i;
-         $423 = $$4351$lcssa$i >>> 3;
-         $424 = ($$4351$lcssa$i>>>0)<(256);
-         if ($424) {
-          $425 = $423 << 1;
-          $426 = (75308 + ($425<<2)|0);
-          $427 = HEAP32[18817]|0;
-          $428 = 1 << $423;
-          $429 = $427 & $428;
-          $430 = ($429|0)==(0);
-          if ($430) {
-           $431 = $427 | $428;
-           HEAP32[18817] = $431;
-           $$pre$i210 = ((($426)) + 8|0);
-           $$0368$i = $426;$$pre$phi$i211Z2D = $$pre$i210;
-          } else {
-           $432 = ((($426)) + 8|0);
-           $433 = HEAP32[$432>>2]|0;
-           $434 = HEAP32[(75284)>>2]|0;
-           $435 = ($433>>>0)<($434>>>0);
-           if ($435) {
-            _abort();
-            // unreachable;
-           } else {
-            $$0368$i = $433;$$pre$phi$i211Z2D = $432;
-           }
-          }
-          HEAP32[$$pre$phi$i211Z2D>>2] = $350;
-          $436 = ((($$0368$i)) + 12|0);
-          HEAP32[$436>>2] = $350;
-          $437 = ((($350)) + 8|0);
-          HEAP32[$437>>2] = $$0368$i;
-          $438 = ((($350)) + 12|0);
-          HEAP32[$438>>2] = $426;
-          break;
-         }
-         $439 = $$4351$lcssa$i >>> 8;
-         $440 = ($439|0)==(0);
-         if ($440) {
-          $$0361$i = 0;
-         } else {
-          $441 = ($$4351$lcssa$i>>>0)>(16777215);
-          if ($441) {
-           $$0361$i = 31;
-          } else {
-           $442 = (($439) + 1048320)|0;
-           $443 = $442 >>> 16;
-           $444 = $443 & 8;
-           $445 = $439 << $444;
-           $446 = (($445) + 520192)|0;
-           $447 = $446 >>> 16;
-           $448 = $447 & 4;
-           $449 = $448 | $444;
-           $450 = $445 << $448;
-           $451 = (($450) + 245760)|0;
-           $452 = $451 >>> 16;
-           $453 = $452 & 2;
-           $454 = $449 | $453;
-           $455 = (14 - ($454))|0;
-           $456 = $450 << $453;
-           $457 = $456 >>> 15;
-           $458 = (($455) + ($457))|0;
-           $459 = $458 << 1;
-           $460 = (($458) + 7)|0;
-           $461 = $$4351$lcssa$i >>> $460;
-           $462 = $461 & 1;
-           $463 = $462 | $459;
-           $$0361$i = $463;
-          }
-         }
-         $464 = (75572 + ($$0361$i<<2)|0);
-         $465 = ((($350)) + 28|0);
-         HEAP32[$465>>2] = $$0361$i;
-         $466 = ((($350)) + 16|0);
-         $467 = ((($466)) + 4|0);
-         HEAP32[$467>>2] = 0;
-         HEAP32[$466>>2] = 0;
-         $468 = 1 << $$0361$i;
-         $469 = $470 & $468;
-         $471 = ($469|0)==(0);
-         if ($471) {
-          $472 = $470 | $468;
-          HEAP32[(75272)>>2] = $472;
-          HEAP32[$464>>2] = $350;
-          $473 = ((($350)) + 24|0);
-          HEAP32[$473>>2] = $464;
-          $474 = ((($350)) + 12|0);
-          HEAP32[$474>>2] = $350;
-          $475 = ((($350)) + 8|0);
-          HEAP32[$475>>2] = $350;
-          break;
-         }
-         $476 = HEAP32[$464>>2]|0;
-         $477 = ($$0361$i|0)==(31);
-         $478 = $$0361$i >>> 1;
-         $479 = (25 - ($478))|0;
-         $480 = $477 ? 0 : $479;
-         $481 = $$4351$lcssa$i << $480;
-         $$0344$i = $481;$$0345$i = $476;
-         while(1) {
-          $482 = ((($$0345$i)) + 4|0);
-          $483 = HEAP32[$482>>2]|0;
-          $484 = $483 & -8;
-          $485 = ($484|0)==($$4351$lcssa$i|0);
-          if ($485) {
-           label = 139;
-           break;
-          }
-          $486 = $$0344$i >>> 31;
-          $487 = (((($$0345$i)) + 16|0) + ($486<<2)|0);
-          $488 = $$0344$i << 1;
-          $489 = HEAP32[$487>>2]|0;
-          $490 = ($489|0)==(0|0);
-          if ($490) {
-           label = 136;
-           break;
-          } else {
-           $$0344$i = $488;$$0345$i = $489;
-          }
-         }
-         if ((label|0) == 136) {
-          $491 = HEAP32[(75284)>>2]|0;
-          $492 = ($487>>>0)<($491>>>0);
-          if ($492) {
-           _abort();
-           // unreachable;
-          } else {
-           HEAP32[$487>>2] = $350;
-           $493 = ((($350)) + 24|0);
-           HEAP32[$493>>2] = $$0345$i;
-           $494 = ((($350)) + 12|0);
-           HEAP32[$494>>2] = $350;
-           $495 = ((($350)) + 8|0);
-           HEAP32[$495>>2] = $350;
-           break;
-          }
-         }
-         else if ((label|0) == 139) {
-          $496 = ((($$0345$i)) + 8|0);
-          $497 = HEAP32[$496>>2]|0;
-          $498 = HEAP32[(75284)>>2]|0;
-          $499 = ($497>>>0)>=($498>>>0);
-          $not$9$i = ($$0345$i>>>0)>=($498>>>0);
-          $500 = $499 & $not$9$i;
-          if ($500) {
-           $501 = ((($497)) + 12|0);
-           HEAP32[$501>>2] = $350;
-           HEAP32[$496>>2] = $350;
-           $502 = ((($350)) + 8|0);
-           HEAP32[$502>>2] = $497;
-           $503 = ((($350)) + 12|0);
-           HEAP32[$503>>2] = $$0345$i;
-           $504 = ((($350)) + 24|0);
-           HEAP32[$504>>2] = 0;
-           break;
-          } else {
-           _abort();
-           // unreachable;
-          }
-         }
-        }
-       } while(0);
-       $505 = ((($$4$lcssa$i)) + 8|0);
-       $$0 = $505;
-       STACKTOP = sp;return ($$0|0);
-      } else {
-       $$0197 = $249;
-      }
-     }
-    }
-   }
-  }
- } while(0);
- $506 = HEAP32[(75276)>>2]|0;
- $507 = ($506>>>0)<($$0197>>>0);
- if (!($507)) {
-  $508 = (($506) - ($$0197))|0;
-  $509 = HEAP32[(75288)>>2]|0;
-  $510 = ($508>>>0)>(15);
-  if ($510) {
-   $511 = (($509) + ($$0197)|0);
-   HEAP32[(75288)>>2] = $511;
-   HEAP32[(75276)>>2] = $508;
-   $512 = $508 | 1;
-   $513 = ((($511)) + 4|0);
-   HEAP32[$513>>2] = $512;
-   $514 = (($511) + ($508)|0);
-   HEAP32[$514>>2] = $508;
-   $515 = $$0197 | 3;
-   $516 = ((($509)) + 4|0);
-   HEAP32[$516>>2] = $515;
-  } else {
-   HEAP32[(75276)>>2] = 0;
-   HEAP32[(75288)>>2] = 0;
-   $517 = $506 | 3;
-   $518 = ((($509)) + 4|0);
-   HEAP32[$518>>2] = $517;
-   $519 = (($509) + ($506)|0);
-   $520 = ((($519)) + 4|0);
-   $521 = HEAP32[$520>>2]|0;
-   $522 = $521 | 1;
-   HEAP32[$520>>2] = $522;
-  }
-  $523 = ((($509)) + 8|0);
-  $$0 = $523;
-  STACKTOP = sp;return ($$0|0);
- }
- $524 = HEAP32[(75280)>>2]|0;
- $525 = ($524>>>0)>($$0197>>>0);
- if ($525) {
-  $526 = (($524) - ($$0197))|0;
-  HEAP32[(75280)>>2] = $526;
-  $527 = HEAP32[(75292)>>2]|0;
-  $528 = (($527) + ($$0197)|0);
-  HEAP32[(75292)>>2] = $528;
-  $529 = $526 | 1;
-  $530 = ((($528)) + 4|0);
-  HEAP32[$530>>2] = $529;
-  $531 = $$0197 | 3;
-  $532 = ((($527)) + 4|0);
-  HEAP32[$532>>2] = $531;
-  $533 = ((($527)) + 8|0);
-  $$0 = $533;
-  STACKTOP = sp;return ($$0|0);
- }
- $534 = HEAP32[18935]|0;
- $535 = ($534|0)==(0);
- if ($535) {
-  HEAP32[(75748)>>2] = 4096;
-  HEAP32[(75744)>>2] = 4096;
-  HEAP32[(75752)>>2] = -1;
-  HEAP32[(75756)>>2] = -1;
-  HEAP32[(75760)>>2] = 0;
-  HEAP32[(75712)>>2] = 0;
-  $536 = $1;
-  $537 = $536 & -16;
-  $538 = $537 ^ 1431655768;
-  HEAP32[$1>>2] = $538;
-  HEAP32[18935] = $538;
-  $542 = 4096;
- } else {
-  $$pre$i212 = HEAP32[(75748)>>2]|0;
-  $542 = $$pre$i212;
- }
- $539 = (($$0197) + 48)|0;
- $540 = (($$0197) + 47)|0;
- $541 = (($542) + ($540))|0;
- $543 = (0 - ($542))|0;
- $544 = $541 & $543;
- $545 = ($544>>>0)>($$0197>>>0);
- if (!($545)) {
-  $$0 = 0;
-  STACKTOP = sp;return ($$0|0);
- }
- $546 = HEAP32[(75708)>>2]|0;
- $547 = ($546|0)==(0);
- if (!($547)) {
-  $548 = HEAP32[(75700)>>2]|0;
-  $549 = (($548) + ($544))|0;
-  $550 = ($549>>>0)<=($548>>>0);
-  $551 = ($549>>>0)>($546>>>0);
-  $or$cond1$i = $550 | $551;
-  if ($or$cond1$i) {
-   $$0 = 0;
-   STACKTOP = sp;return ($$0|0);
-  }
- }
- $552 = HEAP32[(75712)>>2]|0;
- $553 = $552 & 4;
- $554 = ($553|0)==(0);
- L244: do {
-  if ($554) {
-   $555 = HEAP32[(75292)>>2]|0;
-   $556 = ($555|0)==(0|0);
-   L246: do {
-    if ($556) {
-     label = 163;
-    } else {
-     $$0$i$i = (75716);
-     while(1) {
-      $557 = HEAP32[$$0$i$i>>2]|0;
-      $558 = ($557>>>0)>($555>>>0);
-      if (!($558)) {
-       $559 = ((($$0$i$i)) + 4|0);
-       $560 = HEAP32[$559>>2]|0;
-       $561 = (($557) + ($560)|0);
-       $562 = ($561>>>0)>($555>>>0);
-       if ($562) {
-        break;
-       }
-      }
-      $563 = ((($$0$i$i)) + 8|0);
-      $564 = HEAP32[$563>>2]|0;
-      $565 = ($564|0)==(0|0);
-      if ($565) {
-       label = 163;
-       break L246;
-      } else {
-       $$0$i$i = $564;
-      }
-     }
-     $588 = (($541) - ($524))|0;
-     $589 = $588 & $543;
-     $590 = ($589>>>0)<(2147483647);
-     if ($590) {
-      $591 = (_sbrk(($589|0))|0);
-      $592 = HEAP32[$$0$i$i>>2]|0;
-      $593 = HEAP32[$559>>2]|0;
-      $594 = (($592) + ($593)|0);
-      $595 = ($591|0)==($594|0);
-      if ($595) {
-       $596 = ($591|0)==((-1)|0);
-       if ($596) {
-        $$2234253237$i = $589;
-       } else {
-        $$723948$i = $589;$$749$i = $591;
-        label = 180;
-        break L244;
-       }
-      } else {
-       $$2247$ph$i = $591;$$2253$ph$i = $589;
-       label = 171;
-      }
-     } else {
-      $$2234253237$i = 0;
-     }
-    }
-   } while(0);
-   do {
-    if ((label|0) == 163) {
-     $566 = (_sbrk(0)|0);
-     $567 = ($566|0)==((-1)|0);
-     if ($567) {
-      $$2234253237$i = 0;
-     } else {
-      $568 = $566;
-      $569 = HEAP32[(75744)>>2]|0;
-      $570 = (($569) + -1)|0;
-      $571 = $570 & $568;
-      $572 = ($571|0)==(0);
-      $573 = (($570) + ($568))|0;
-      $574 = (0 - ($569))|0;
-      $575 = $573 & $574;
-      $576 = (($575) - ($568))|0;
-      $577 = $572 ? 0 : $576;
-      $$$i = (($577) + ($544))|0;
-      $578 = HEAP32[(75700)>>2]|0;
-      $579 = (($$$i) + ($578))|0;
-      $580 = ($$$i>>>0)>($$0197>>>0);
-      $581 = ($$$i>>>0)<(2147483647);
-      $or$cond$i214 = $580 & $581;
-      if ($or$cond$i214) {
-       $582 = HEAP32[(75708)>>2]|0;
-       $583 = ($582|0)==(0);
-       if (!($583)) {
-        $584 = ($579>>>0)<=($578>>>0);
-        $585 = ($579>>>0)>($582>>>0);
-        $or$cond2$i215 = $584 | $585;
-        if ($or$cond2$i215) {
-         $$2234253237$i = 0;
-         break;
-        }
-       }
-       $586 = (_sbrk(($$$i|0))|0);
-       $587 = ($586|0)==($566|0);
-       if ($587) {
-        $$723948$i = $$$i;$$749$i = $566;
-        label = 180;
-        break L244;
-       } else {
-        $$2247$ph$i = $586;$$2253$ph$i = $$$i;
-        label = 171;
-       }
-      } else {
-       $$2234253237$i = 0;
-      }
-     }
-    }
-   } while(0);
-   do {
-    if ((label|0) == 171) {
-     $597 = (0 - ($$2253$ph$i))|0;
-     $598 = ($$2247$ph$i|0)!=((-1)|0);
-     $599 = ($$2253$ph$i>>>0)<(2147483647);
-     $or$cond7$i = $599 & $598;
-     $600 = ($539>>>0)>($$2253$ph$i>>>0);
-     $or$cond10$i = $600 & $or$cond7$i;
-     if (!($or$cond10$i)) {
-      $610 = ($$2247$ph$i|0)==((-1)|0);
-      if ($610) {
-       $$2234253237$i = 0;
-       break;
-      } else {
-       $$723948$i = $$2253$ph$i;$$749$i = $$2247$ph$i;
-       label = 180;
-       break L244;
-      }
-     }
-     $601 = HEAP32[(75748)>>2]|0;
-     $602 = (($540) - ($$2253$ph$i))|0;
-     $603 = (($602) + ($601))|0;
-     $604 = (0 - ($601))|0;
-     $605 = $603 & $604;
-     $606 = ($605>>>0)<(2147483647);
-     if (!($606)) {
-      $$723948$i = $$2253$ph$i;$$749$i = $$2247$ph$i;
-      label = 180;
-      break L244;
-     }
-     $607 = (_sbrk(($605|0))|0);
-     $608 = ($607|0)==((-1)|0);
-     if ($608) {
-      (_sbrk(($597|0))|0);
-      $$2234253237$i = 0;
-      break;
-     } else {
-      $609 = (($605) + ($$2253$ph$i))|0;
-      $$723948$i = $609;$$749$i = $$2247$ph$i;
-      label = 180;
-      break L244;
-     }
-    }
-   } while(0);
-   $611 = HEAP32[(75712)>>2]|0;
-   $612 = $611 | 4;
-   HEAP32[(75712)>>2] = $612;
-   $$4236$i = $$2234253237$i;
-   label = 178;
-  } else {
-   $$4236$i = 0;
-   label = 178;
-  }
- } while(0);
- if ((label|0) == 178) {
-  $613 = ($544>>>0)<(2147483647);
-  if ($613) {
-   $614 = (_sbrk(($544|0))|0);
-   $615 = (_sbrk(0)|0);
-   $616 = ($614|0)!=((-1)|0);
-   $617 = ($615|0)!=((-1)|0);
-   $or$cond5$i = $616 & $617;
-   $618 = ($614>>>0)<($615>>>0);
-   $or$cond11$i = $618 & $or$cond5$i;
-   $619 = $615;
-   $620 = $614;
-   $621 = (($619) - ($620))|0;
-   $622 = (($$0197) + 40)|0;
-   $623 = ($621>>>0)>($622>>>0);
-   $$$4236$i = $623 ? $621 : $$4236$i;
-   $or$cond11$not$i = $or$cond11$i ^ 1;
-   $624 = ($614|0)==((-1)|0);
-   $not$$i216 = $623 ^ 1;
-   $625 = $624 | $not$$i216;
-   $or$cond50$i = $625 | $or$cond11$not$i;
-   if (!($or$cond50$i)) {
-    $$723948$i = $$$4236$i;$$749$i = $614;
-    label = 180;
-   }
-  }
- }
- if ((label|0) == 180) {
-  $626 = HEAP32[(75700)>>2]|0;
-  $627 = (($626) + ($$723948$i))|0;
-  HEAP32[(75700)>>2] = $627;
-  $628 = HEAP32[(75704)>>2]|0;
-  $629 = ($627>>>0)>($628>>>0);
-  if ($629) {
-   HEAP32[(75704)>>2] = $627;
-  }
-  $630 = HEAP32[(75292)>>2]|0;
-  $631 = ($630|0)==(0|0);
-  do {
-   if ($631) {
-    $632 = HEAP32[(75284)>>2]|0;
-    $633 = ($632|0)==(0|0);
-    $634 = ($$749$i>>>0)<($632>>>0);
-    $or$cond12$i = $633 | $634;
-    if ($or$cond12$i) {
-     HEAP32[(75284)>>2] = $$749$i;
-    }
-    HEAP32[(75716)>>2] = $$749$i;
-    HEAP32[(75720)>>2] = $$723948$i;
-    HEAP32[(75728)>>2] = 0;
-    $635 = HEAP32[18935]|0;
-    HEAP32[(75304)>>2] = $635;
-    HEAP32[(75300)>>2] = -1;
-    $$01$i$i = 0;
-    while(1) {
-     $636 = $$01$i$i << 1;
-     $637 = (75308 + ($636<<2)|0);
-     $638 = ((($637)) + 12|0);
-     HEAP32[$638>>2] = $637;
-     $639 = ((($637)) + 8|0);
-     HEAP32[$639>>2] = $637;
-     $640 = (($$01$i$i) + 1)|0;
-     $exitcond$i$i = ($640|0)==(32);
-     if ($exitcond$i$i) {
-      break;
-     } else {
-      $$01$i$i = $640;
-     }
-    }
-    $641 = (($$723948$i) + -40)|0;
-    $642 = ((($$749$i)) + 8|0);
-    $643 = $642;
-    $644 = $643 & 7;
-    $645 = ($644|0)==(0);
-    $646 = (0 - ($643))|0;
-    $647 = $646 & 7;
-    $648 = $645 ? 0 : $647;
-    $649 = (($$749$i) + ($648)|0);
-    $650 = (($641) - ($648))|0;
-    HEAP32[(75292)>>2] = $649;
-    HEAP32[(75280)>>2] = $650;
-    $651 = $650 | 1;
-    $652 = ((($649)) + 4|0);
-    HEAP32[$652>>2] = $651;
-    $653 = (($649) + ($650)|0);
-    $654 = ((($653)) + 4|0);
-    HEAP32[$654>>2] = 40;
-    $655 = HEAP32[(75756)>>2]|0;
-    HEAP32[(75296)>>2] = $655;
-   } else {
-    $$024371$i = (75716);
-    while(1) {
-     $656 = HEAP32[$$024371$i>>2]|0;
-     $657 = ((($$024371$i)) + 4|0);
-     $658 = HEAP32[$657>>2]|0;
-     $659 = (($656) + ($658)|0);
-     $660 = ($$749$i|0)==($659|0);
-     if ($660) {
-      label = 190;
-      break;
-     }
-     $661 = ((($$024371$i)) + 8|0);
-     $662 = HEAP32[$661>>2]|0;
-     $663 = ($662|0)==(0|0);
-     if ($663) {
-      break;
-     } else {
-      $$024371$i = $662;
-     }
-    }
-    if ((label|0) == 190) {
-     $664 = ((($$024371$i)) + 12|0);
-     $665 = HEAP32[$664>>2]|0;
-     $666 = $665 & 8;
-     $667 = ($666|0)==(0);
-     if ($667) {
-      $668 = ($630>>>0)>=($656>>>0);
-      $669 = ($630>>>0)<($$749$i>>>0);
-      $or$cond51$i = $669 & $668;
-      if ($or$cond51$i) {
-       $670 = (($658) + ($$723948$i))|0;
-       HEAP32[$657>>2] = $670;
-       $671 = HEAP32[(75280)>>2]|0;
-       $672 = ((($630)) + 8|0);
-       $673 = $672;
-       $674 = $673 & 7;
-       $675 = ($674|0)==(0);
-       $676 = (0 - ($673))|0;
-       $677 = $676 & 7;
-       $678 = $675 ? 0 : $677;
-       $679 = (($630) + ($678)|0);
-       $680 = (($$723948$i) - ($678))|0;
-       $681 = (($671) + ($680))|0;
-       HEAP32[(75292)>>2] = $679;
-       HEAP32[(75280)>>2] = $681;
-       $682 = $681 | 1;
-       $683 = ((($679)) + 4|0);
-       HEAP32[$683>>2] = $682;
-       $684 = (($679) + ($681)|0);
-       $685 = ((($684)) + 4|0);
-       HEAP32[$685>>2] = 40;
-       $686 = HEAP32[(75756)>>2]|0;
-       HEAP32[(75296)>>2] = $686;
-       break;
-      }
-     }
-    }
-    $687 = HEAP32[(75284)>>2]|0;
-    $688 = ($$749$i>>>0)<($687>>>0);
-    if ($688) {
-     HEAP32[(75284)>>2] = $$749$i;
-     $752 = $$749$i;
-    } else {
-     $752 = $687;
-    }
-    $689 = (($$749$i) + ($$723948$i)|0);
-    $$124470$i = (75716);
-    while(1) {
-     $690 = HEAP32[$$124470$i>>2]|0;
-     $691 = ($690|0)==($689|0);
-     if ($691) {
-      label = 198;
-      break;
-     }
-     $692 = ((($$124470$i)) + 8|0);
-     $693 = HEAP32[$692>>2]|0;
-     $694 = ($693|0)==(0|0);
-     if ($694) {
-      break;
-     } else {
-      $$124470$i = $693;
-     }
-    }
-    if ((label|0) == 198) {
-     $695 = ((($$124470$i)) + 12|0);
-     $696 = HEAP32[$695>>2]|0;
-     $697 = $696 & 8;
-     $698 = ($697|0)==(0);
-     if ($698) {
-      HEAP32[$$124470$i>>2] = $$749$i;
-      $699 = ((($$124470$i)) + 4|0);
-      $700 = HEAP32[$699>>2]|0;
-      $701 = (($700) + ($$723948$i))|0;
-      HEAP32[$699>>2] = $701;
-      $702 = ((($$749$i)) + 8|0);
-      $703 = $702;
-      $704 = $703 & 7;
-      $705 = ($704|0)==(0);
-      $706 = (0 - ($703))|0;
-      $707 = $706 & 7;
-      $708 = $705 ? 0 : $707;
-      $709 = (($$749$i) + ($708)|0);
-      $710 = ((($689)) + 8|0);
-      $711 = $710;
-      $712 = $711 & 7;
-      $713 = ($712|0)==(0);
-      $714 = (0 - ($711))|0;
-      $715 = $714 & 7;
-      $716 = $713 ? 0 : $715;
-      $717 = (($689) + ($716)|0);
-      $718 = $717;
-      $719 = $709;
-      $720 = (($718) - ($719))|0;
-      $721 = (($709) + ($$0197)|0);
-      $722 = (($720) - ($$0197))|0;
-      $723 = $$0197 | 3;
-      $724 = ((($709)) + 4|0);
-      HEAP32[$724>>2] = $723;
-      $725 = ($717|0)==($630|0);
-      do {
-       if ($725) {
-        $726 = HEAP32[(75280)>>2]|0;
-        $727 = (($726) + ($722))|0;
-        HEAP32[(75280)>>2] = $727;
-        HEAP32[(75292)>>2] = $721;
-        $728 = $727 | 1;
-        $729 = ((($721)) + 4|0);
-        HEAP32[$729>>2] = $728;
-       } else {
-        $730 = HEAP32[(75288)>>2]|0;
-        $731 = ($717|0)==($730|0);
-        if ($731) {
-         $732 = HEAP32[(75276)>>2]|0;
-         $733 = (($732) + ($722))|0;
-         HEAP32[(75276)>>2] = $733;
-         HEAP32[(75288)>>2] = $721;
-         $734 = $733 | 1;
-         $735 = ((($721)) + 4|0);
-         HEAP32[$735>>2] = $734;
-         $736 = (($721) + ($733)|0);
-         HEAP32[$736>>2] = $733;
-         break;
-        }
-        $737 = ((($717)) + 4|0);
-        $738 = HEAP32[$737>>2]|0;
-        $739 = $738 & 3;
-        $740 = ($739|0)==(1);
-        if ($740) {
-         $741 = $738 & -8;
-         $742 = $738 >>> 3;
-         $743 = ($738>>>0)<(256);
-         L314: do {
-          if ($743) {
-           $744 = ((($717)) + 8|0);
-           $745 = HEAP32[$744>>2]|0;
-           $746 = ((($717)) + 12|0);
-           $747 = HEAP32[$746>>2]|0;
-           $748 = $742 << 1;
-           $749 = (75308 + ($748<<2)|0);
-           $750 = ($745|0)==($749|0);
-           do {
-            if (!($750)) {
-             $751 = ($745>>>0)<($752>>>0);
-             if ($751) {
-              _abort();
-              // unreachable;
-             }
-             $753 = ((($745)) + 12|0);
-             $754 = HEAP32[$753>>2]|0;
-             $755 = ($754|0)==($717|0);
-             if ($755) {
-              break;
-             }
-             _abort();
-             // unreachable;
-            }
-           } while(0);
-           $756 = ($747|0)==($745|0);
-           if ($756) {
-            $757 = 1 << $742;
-            $758 = $757 ^ -1;
-            $759 = HEAP32[18817]|0;
-            $760 = $759 & $758;
-            HEAP32[18817] = $760;
-            break;
-           }
-           $761 = ($747|0)==($749|0);
-           do {
-            if ($761) {
-             $$pre10$i$i = ((($747)) + 8|0);
-             $$pre$phi11$i$iZ2D = $$pre10$i$i;
-            } else {
-             $762 = ($747>>>0)<($752>>>0);
-             if ($762) {
-              _abort();
-              // unreachable;
-             }
-             $763 = ((($747)) + 8|0);
-             $764 = HEAP32[$763>>2]|0;
-             $765 = ($764|0)==($717|0);
-             if ($765) {
-              $$pre$phi11$i$iZ2D = $763;
-              break;
-             }
-             _abort();
-             // unreachable;
-            }
-           } while(0);
-           $766 = ((($745)) + 12|0);
-           HEAP32[$766>>2] = $747;
-           HEAP32[$$pre$phi11$i$iZ2D>>2] = $745;
-          } else {
-           $767 = ((($717)) + 24|0);
-           $768 = HEAP32[$767>>2]|0;
-           $769 = ((($717)) + 12|0);
-           $770 = HEAP32[$769>>2]|0;
-           $771 = ($770|0)==($717|0);
-           do {
-            if ($771) {
-             $781 = ((($717)) + 16|0);
-             $782 = ((($781)) + 4|0);
-             $783 = HEAP32[$782>>2]|0;
-             $784 = ($783|0)==(0|0);
-             if ($784) {
-              $785 = HEAP32[$781>>2]|0;
-              $786 = ($785|0)==(0|0);
-              if ($786) {
-               $$3$i$i = 0;
-               break;
-              } else {
-               $$1291$i$i = $785;$$1293$i$i = $781;
-              }
-             } else {
-              $$1291$i$i = $783;$$1293$i$i = $782;
-             }
-             while(1) {
-              $787 = ((($$1291$i$i)) + 20|0);
-              $788 = HEAP32[$787>>2]|0;
-              $789 = ($788|0)==(0|0);
-              if (!($789)) {
-               $$1291$i$i = $788;$$1293$i$i = $787;
-               continue;
-              }
-              $790 = ((($$1291$i$i)) + 16|0);
-              $791 = HEAP32[$790>>2]|0;
-              $792 = ($791|0)==(0|0);
-              if ($792) {
-               break;
-              } else {
-               $$1291$i$i = $791;$$1293$i$i = $790;
-              }
-             }
-             $793 = ($$1293$i$i>>>0)<($752>>>0);
-             if ($793) {
-              _abort();
-              // unreachable;
-             } else {
-              HEAP32[$$1293$i$i>>2] = 0;
-              $$3$i$i = $$1291$i$i;
-              break;
-             }
-            } else {
-             $772 = ((($717)) + 8|0);
-             $773 = HEAP32[$772>>2]|0;
-             $774 = ($773>>>0)<($752>>>0);
-             if ($774) {
-              _abort();
-              // unreachable;
-             }
-             $775 = ((($773)) + 12|0);
-             $776 = HEAP32[$775>>2]|0;
-             $777 = ($776|0)==($717|0);
-             if (!($777)) {
-              _abort();
-              // unreachable;
-             }
-             $778 = ((($770)) + 8|0);
-             $779 = HEAP32[$778>>2]|0;
-             $780 = ($779|0)==($717|0);
-             if ($780) {
-              HEAP32[$775>>2] = $770;
-              HEAP32[$778>>2] = $773;
-              $$3$i$i = $770;
-              break;
-             } else {
-              _abort();
-              // unreachable;
-             }
-            }
-           } while(0);
-           $794 = ($768|0)==(0|0);
-           if ($794) {
-            break;
-           }
-           $795 = ((($717)) + 28|0);
-           $796 = HEAP32[$795>>2]|0;
-           $797 = (75572 + ($796<<2)|0);
-           $798 = HEAP32[$797>>2]|0;
-           $799 = ($717|0)==($798|0);
-           do {
-            if ($799) {
-             HEAP32[$797>>2] = $$3$i$i;
-             $cond$i$i = ($$3$i$i|0)==(0|0);
-             if (!($cond$i$i)) {
-              break;
-             }
-             $800 = 1 << $796;
-             $801 = $800 ^ -1;
-             $802 = HEAP32[(75272)>>2]|0;
-             $803 = $802 & $801;
-             HEAP32[(75272)>>2] = $803;
-             break L314;
-            } else {
-             $804 = HEAP32[(75284)>>2]|0;
-             $805 = ($768>>>0)<($804>>>0);
-             if ($805) {
-              _abort();
-              // unreachable;
-             } else {
-              $806 = ((($768)) + 16|0);
-              $807 = HEAP32[$806>>2]|0;
-              $not$$i17$i = ($807|0)!=($717|0);
-              $$sink1$i$i = $not$$i17$i&1;
-              $808 = (((($768)) + 16|0) + ($$sink1$i$i<<2)|0);
-              HEAP32[$808>>2] = $$3$i$i;
-              $809 = ($$3$i$i|0)==(0|0);
-              if ($809) {
-               break L314;
-              } else {
-               break;
-              }
-             }
-            }
-           } while(0);
-           $810 = HEAP32[(75284)>>2]|0;
-           $811 = ($$3$i$i>>>0)<($810>>>0);
-           if ($811) {
-            _abort();
-            // unreachable;
-           }
-           $812 = ((($$3$i$i)) + 24|0);
-           HEAP32[$812>>2] = $768;
-           $813 = ((($717)) + 16|0);
-           $814 = HEAP32[$813>>2]|0;
-           $815 = ($814|0)==(0|0);
-           do {
-            if (!($815)) {
-             $816 = ($814>>>0)<($810>>>0);
-             if ($816) {
-              _abort();
-              // unreachable;
-             } else {
-              $817 = ((($$3$i$i)) + 16|0);
-              HEAP32[$817>>2] = $814;
-              $818 = ((($814)) + 24|0);
-              HEAP32[$818>>2] = $$3$i$i;
-              break;
-             }
-            }
-           } while(0);
-           $819 = ((($813)) + 4|0);
-           $820 = HEAP32[$819>>2]|0;
-           $821 = ($820|0)==(0|0);
-           if ($821) {
-            break;
-           }
-           $822 = HEAP32[(75284)>>2]|0;
-           $823 = ($820>>>0)<($822>>>0);
-           if ($823) {
-            _abort();
-            // unreachable;
-           } else {
-            $824 = ((($$3$i$i)) + 20|0);
-            HEAP32[$824>>2] = $820;
-            $825 = ((($820)) + 24|0);
-            HEAP32[$825>>2] = $$3$i$i;
-            break;
-           }
-          }
-         } while(0);
-         $826 = (($717) + ($741)|0);
-         $827 = (($741) + ($722))|0;
-         $$0$i18$i = $826;$$0287$i$i = $827;
-        } else {
-         $$0$i18$i = $717;$$0287$i$i = $722;
-        }
-        $828 = ((($$0$i18$i)) + 4|0);
-        $829 = HEAP32[$828>>2]|0;
-        $830 = $829 & -2;
-        HEAP32[$828>>2] = $830;
-        $831 = $$0287$i$i | 1;
-        $832 = ((($721)) + 4|0);
-        HEAP32[$832>>2] = $831;
-        $833 = (($721) + ($$0287$i$i)|0);
-        HEAP32[$833>>2] = $$0287$i$i;
-        $834 = $$0287$i$i >>> 3;
-        $835 = ($$0287$i$i>>>0)<(256);
-        if ($835) {
-         $836 = $834 << 1;
-         $837 = (75308 + ($836<<2)|0);
-         $838 = HEAP32[18817]|0;
-         $839 = 1 << $834;
-         $840 = $838 & $839;
-         $841 = ($840|0)==(0);
-         do {
-          if ($841) {
-           $842 = $838 | $839;
-           HEAP32[18817] = $842;
-           $$pre$i19$i = ((($837)) + 8|0);
-           $$0295$i$i = $837;$$pre$phi$i20$iZ2D = $$pre$i19$i;
-          } else {
-           $843 = ((($837)) + 8|0);
-           $844 = HEAP32[$843>>2]|0;
-           $845 = HEAP32[(75284)>>2]|0;
-           $846 = ($844>>>0)<($845>>>0);
-           if (!($846)) {
-            $$0295$i$i = $844;$$pre$phi$i20$iZ2D = $843;
-            break;
-           }
-           _abort();
-           // unreachable;
-          }
-         } while(0);
-         HEAP32[$$pre$phi$i20$iZ2D>>2] = $721;
-         $847 = ((($$0295$i$i)) + 12|0);
-         HEAP32[$847>>2] = $721;
-         $848 = ((($721)) + 8|0);
-         HEAP32[$848>>2] = $$0295$i$i;
-         $849 = ((($721)) + 12|0);
-         HEAP32[$849>>2] = $837;
-         break;
-        }
-        $850 = $$0287$i$i >>> 8;
-        $851 = ($850|0)==(0);
-        do {
-         if ($851) {
-          $$0296$i$i = 0;
-         } else {
-          $852 = ($$0287$i$i>>>0)>(16777215);
-          if ($852) {
-           $$0296$i$i = 31;
-           break;
-          }
-          $853 = (($850) + 1048320)|0;
-          $854 = $853 >>> 16;
-          $855 = $854 & 8;
-          $856 = $850 << $855;
-          $857 = (($856) + 520192)|0;
-          $858 = $857 >>> 16;
-          $859 = $858 & 4;
-          $860 = $859 | $855;
-          $861 = $856 << $859;
-          $862 = (($861) + 245760)|0;
-          $863 = $862 >>> 16;
-          $864 = $863 & 2;
-          $865 = $860 | $864;
-          $866 = (14 - ($865))|0;
-          $867 = $861 << $864;
-          $868 = $867 >>> 15;
-          $869 = (($866) + ($868))|0;
-          $870 = $869 << 1;
-          $871 = (($869) + 7)|0;
-          $872 = $$0287$i$i >>> $871;
-          $873 = $872 & 1;
-          $874 = $873 | $870;
-          $$0296$i$i = $874;
-         }
-        } while(0);
-        $875 = (75572 + ($$0296$i$i<<2)|0);
-        $876 = ((($721)) + 28|0);
-        HEAP32[$876>>2] = $$0296$i$i;
-        $877 = ((($721)) + 16|0);
-        $878 = ((($877)) + 4|0);
-        HEAP32[$878>>2] = 0;
-        HEAP32[$877>>2] = 0;
-        $879 = HEAP32[(75272)>>2]|0;
-        $880 = 1 << $$0296$i$i;
-        $881 = $879 & $880;
-        $882 = ($881|0)==(0);
-        if ($882) {
-         $883 = $879 | $880;
-         HEAP32[(75272)>>2] = $883;
-         HEAP32[$875>>2] = $721;
-         $884 = ((($721)) + 24|0);
-         HEAP32[$884>>2] = $875;
-         $885 = ((($721)) + 12|0);
-         HEAP32[$885>>2] = $721;
-         $886 = ((($721)) + 8|0);
-         HEAP32[$886>>2] = $721;
-         break;
-        }
-        $887 = HEAP32[$875>>2]|0;
-        $888 = ($$0296$i$i|0)==(31);
-        $889 = $$0296$i$i >>> 1;
-        $890 = (25 - ($889))|0;
-        $891 = $888 ? 0 : $890;
-        $892 = $$0287$i$i << $891;
-        $$0288$i$i = $892;$$0289$i$i = $887;
-        while(1) {
-         $893 = ((($$0289$i$i)) + 4|0);
-         $894 = HEAP32[$893>>2]|0;
-         $895 = $894 & -8;
-         $896 = ($895|0)==($$0287$i$i|0);
-         if ($896) {
-          label = 265;
-          break;
-         }
-         $897 = $$0288$i$i >>> 31;
-         $898 = (((($$0289$i$i)) + 16|0) + ($897<<2)|0);
-         $899 = $$0288$i$i << 1;
-         $900 = HEAP32[$898>>2]|0;
-         $901 = ($900|0)==(0|0);
-         if ($901) {
-          label = 262;
-          break;
-         } else {
-          $$0288$i$i = $899;$$0289$i$i = $900;
-         }
-        }
-        if ((label|0) == 262) {
-         $902 = HEAP32[(75284)>>2]|0;
-         $903 = ($898>>>0)<($902>>>0);
-         if ($903) {
-          _abort();
-          // unreachable;
-         } else {
-          HEAP32[$898>>2] = $721;
-          $904 = ((($721)) + 24|0);
-          HEAP32[$904>>2] = $$0289$i$i;
-          $905 = ((($721)) + 12|0);
-          HEAP32[$905>>2] = $721;
-          $906 = ((($721)) + 8|0);
-          HEAP32[$906>>2] = $721;
-          break;
-         }
-        }
-        else if ((label|0) == 265) {
-         $907 = ((($$0289$i$i)) + 8|0);
-         $908 = HEAP32[$907>>2]|0;
-         $909 = HEAP32[(75284)>>2]|0;
-         $910 = ($908>>>0)>=($909>>>0);
-         $not$7$i$i = ($$0289$i$i>>>0)>=($909>>>0);
-         $911 = $910 & $not$7$i$i;
-         if ($911) {
-          $912 = ((($908)) + 12|0);
-          HEAP32[$912>>2] = $721;
-          HEAP32[$907>>2] = $721;
-          $913 = ((($721)) + 8|0);
-          HEAP32[$913>>2] = $908;
-          $914 = ((($721)) + 12|0);
-          HEAP32[$914>>2] = $$0289$i$i;
-          $915 = ((($721)) + 24|0);
-          HEAP32[$915>>2] = 0;
-          break;
-         } else {
-          _abort();
-          // unreachable;
-         }
-        }
-       }
-      } while(0);
-      $1047 = ((($709)) + 8|0);
-      $$0 = $1047;
-      STACKTOP = sp;return ($$0|0);
-     }
-    }
-    $$0$i$i$i = (75716);
-    while(1) {
-     $916 = HEAP32[$$0$i$i$i>>2]|0;
-     $917 = ($916>>>0)>($630>>>0);
-     if (!($917)) {
-      $918 = ((($$0$i$i$i)) + 4|0);
-      $919 = HEAP32[$918>>2]|0;
-      $920 = (($916) + ($919)|0);
-      $921 = ($920>>>0)>($630>>>0);
-      if ($921) {
-       break;
-      }
-     }
-     $922 = ((($$0$i$i$i)) + 8|0);
-     $923 = HEAP32[$922>>2]|0;
-     $$0$i$i$i = $923;
-    }
-    $924 = ((($920)) + -47|0);
-    $925 = ((($924)) + 8|0);
-    $926 = $925;
-    $927 = $926 & 7;
-    $928 = ($927|0)==(0);
-    $929 = (0 - ($926))|0;
-    $930 = $929 & 7;
-    $931 = $928 ? 0 : $930;
-    $932 = (($924) + ($931)|0);
-    $933 = ((($630)) + 16|0);
-    $934 = ($932>>>0)<($933>>>0);
-    $935 = $934 ? $630 : $932;
-    $936 = ((($935)) + 8|0);
-    $937 = ((($935)) + 24|0);
-    $938 = (($$723948$i) + -40)|0;
-    $939 = ((($$749$i)) + 8|0);
-    $940 = $939;
-    $941 = $940 & 7;
-    $942 = ($941|0)==(0);
-    $943 = (0 - ($940))|0;
-    $944 = $943 & 7;
-    $945 = $942 ? 0 : $944;
-    $946 = (($$749$i) + ($945)|0);
-    $947 = (($938) - ($945))|0;
-    HEAP32[(75292)>>2] = $946;
-    HEAP32[(75280)>>2] = $947;
-    $948 = $947 | 1;
-    $949 = ((($946)) + 4|0);
-    HEAP32[$949>>2] = $948;
-    $950 = (($946) + ($947)|0);
-    $951 = ((($950)) + 4|0);
-    HEAP32[$951>>2] = 40;
-    $952 = HEAP32[(75756)>>2]|0;
-    HEAP32[(75296)>>2] = $952;
-    $953 = ((($935)) + 4|0);
-    HEAP32[$953>>2] = 27;
-    ;HEAP32[$936>>2]=HEAP32[(75716)>>2]|0;HEAP32[$936+4>>2]=HEAP32[(75716)+4>>2]|0;HEAP32[$936+8>>2]=HEAP32[(75716)+8>>2]|0;HEAP32[$936+12>>2]=HEAP32[(75716)+12>>2]|0;
-    HEAP32[(75716)>>2] = $$749$i;
-    HEAP32[(75720)>>2] = $$723948$i;
-    HEAP32[(75728)>>2] = 0;
-    HEAP32[(75724)>>2] = $936;
-    $955 = $937;
-    while(1) {
-     $954 = ((($955)) + 4|0);
-     HEAP32[$954>>2] = 7;
-     $956 = ((($955)) + 8|0);
-     $957 = ($956>>>0)<($920>>>0);
-     if ($957) {
-      $955 = $954;
-     } else {
-      break;
-     }
-    }
-    $958 = ($935|0)==($630|0);
-    if (!($958)) {
-     $959 = $935;
-     $960 = $630;
-     $961 = (($959) - ($960))|0;
-     $962 = HEAP32[$953>>2]|0;
-     $963 = $962 & -2;
-     HEAP32[$953>>2] = $963;
-     $964 = $961 | 1;
-     $965 = ((($630)) + 4|0);
-     HEAP32[$965>>2] = $964;
-     HEAP32[$935>>2] = $961;
-     $966 = $961 >>> 3;
-     $967 = ($961>>>0)<(256);
-     if ($967) {
-      $968 = $966 << 1;
-      $969 = (75308 + ($968<<2)|0);
-      $970 = HEAP32[18817]|0;
-      $971 = 1 << $966;
-      $972 = $970 & $971;
-      $973 = ($972|0)==(0);
-      if ($973) {
-       $974 = $970 | $971;
-       HEAP32[18817] = $974;
-       $$pre$i$i = ((($969)) + 8|0);
-       $$0211$i$i = $969;$$pre$phi$i$iZ2D = $$pre$i$i;
-      } else {
-       $975 = ((($969)) + 8|0);
-       $976 = HEAP32[$975>>2]|0;
-       $977 = HEAP32[(75284)>>2]|0;
-       $978 = ($976>>>0)<($977>>>0);
-       if ($978) {
-        _abort();
-        // unreachable;
-       } else {
-        $$0211$i$i = $976;$$pre$phi$i$iZ2D = $975;
-       }
-      }
-      HEAP32[$$pre$phi$i$iZ2D>>2] = $630;
-      $979 = ((($$0211$i$i)) + 12|0);
-      HEAP32[$979>>2] = $630;
-      $980 = ((($630)) + 8|0);
-      HEAP32[$980>>2] = $$0211$i$i;
-      $981 = ((($630)) + 12|0);
-      HEAP32[$981>>2] = $969;
-      break;
-     }
-     $982 = $961 >>> 8;
-     $983 = ($982|0)==(0);
-     if ($983) {
-      $$0212$i$i = 0;
-     } else {
-      $984 = ($961>>>0)>(16777215);
-      if ($984) {
-       $$0212$i$i = 31;
-      } else {
-       $985 = (($982) + 1048320)|0;
-       $986 = $985 >>> 16;
-       $987 = $986 & 8;
-       $988 = $982 << $987;
-       $989 = (($988) + 520192)|0;
-       $990 = $989 >>> 16;
-       $991 = $990 & 4;
-       $992 = $991 | $987;
-       $993 = $988 << $991;
-       $994 = (($993) + 245760)|0;
-       $995 = $994 >>> 16;
-       $996 = $995 & 2;
-       $997 = $992 | $996;
-       $998 = (14 - ($997))|0;
-       $999 = $993 << $996;
-       $1000 = $999 >>> 15;
-       $1001 = (($998) + ($1000))|0;
-       $1002 = $1001 << 1;
-       $1003 = (($1001) + 7)|0;
-       $1004 = $961 >>> $1003;
-       $1005 = $1004 & 1;
-       $1006 = $1005 | $1002;
-       $$0212$i$i = $1006;
-      }
-     }
-     $1007 = (75572 + ($$0212$i$i<<2)|0);
-     $1008 = ((($630)) + 28|0);
-     HEAP32[$1008>>2] = $$0212$i$i;
-     $1009 = ((($630)) + 20|0);
-     HEAP32[$1009>>2] = 0;
-     HEAP32[$933>>2] = 0;
-     $1010 = HEAP32[(75272)>>2]|0;
-     $1011 = 1 << $$0212$i$i;
-     $1012 = $1010 & $1011;
-     $1013 = ($1012|0)==(0);
-     if ($1013) {
-      $1014 = $1010 | $1011;
-      HEAP32[(75272)>>2] = $1014;
-      HEAP32[$1007>>2] = $630;
-      $1015 = ((($630)) + 24|0);
-      HEAP32[$1015>>2] = $1007;
-      $1016 = ((($630)) + 12|0);
-      HEAP32[$1016>>2] = $630;
-      $1017 = ((($630)) + 8|0);
-      HEAP32[$1017>>2] = $630;
-      break;
-     }
-     $1018 = HEAP32[$1007>>2]|0;
-     $1019 = ($$0212$i$i|0)==(31);
-     $1020 = $$0212$i$i >>> 1;
-     $1021 = (25 - ($1020))|0;
-     $1022 = $1019 ? 0 : $1021;
-     $1023 = $961 << $1022;
-     $$0206$i$i = $1023;$$0207$i$i = $1018;
-     while(1) {
-      $1024 = ((($$0207$i$i)) + 4|0);
-      $1025 = HEAP32[$1024>>2]|0;
-      $1026 = $1025 & -8;
-      $1027 = ($1026|0)==($961|0);
-      if ($1027) {
-       label = 292;
-       break;
-      }
-      $1028 = $$0206$i$i >>> 31;
-      $1029 = (((($$0207$i$i)) + 16|0) + ($1028<<2)|0);
-      $1030 = $$0206$i$i << 1;
-      $1031 = HEAP32[$1029>>2]|0;
-      $1032 = ($1031|0)==(0|0);
-      if ($1032) {
-       label = 289;
-       break;
-      } else {
-       $$0206$i$i = $1030;$$0207$i$i = $1031;
-      }
-     }
-     if ((label|0) == 289) {
-      $1033 = HEAP32[(75284)>>2]|0;
-      $1034 = ($1029>>>0)<($1033>>>0);
-      if ($1034) {
-       _abort();
-       // unreachable;
-      } else {
-       HEAP32[$1029>>2] = $630;
-       $1035 = ((($630)) + 24|0);
-       HEAP32[$1035>>2] = $$0207$i$i;
-       $1036 = ((($630)) + 12|0);
-       HEAP32[$1036>>2] = $630;
-       $1037 = ((($630)) + 8|0);
-       HEAP32[$1037>>2] = $630;
-       break;
-      }
-     }
-     else if ((label|0) == 292) {
-      $1038 = ((($$0207$i$i)) + 8|0);
-      $1039 = HEAP32[$1038>>2]|0;
-      $1040 = HEAP32[(75284)>>2]|0;
-      $1041 = ($1039>>>0)>=($1040>>>0);
-      $not$$i$i = ($$0207$i$i>>>0)>=($1040>>>0);
-      $1042 = $1041 & $not$$i$i;
-      if ($1042) {
-       $1043 = ((($1039)) + 12|0);
-       HEAP32[$1043>>2] = $630;
-       HEAP32[$1038>>2] = $630;
-       $1044 = ((($630)) + 8|0);
-       HEAP32[$1044>>2] = $1039;
-       $1045 = ((($630)) + 12|0);
-       HEAP32[$1045>>2] = $$0207$i$i;
-       $1046 = ((($630)) + 24|0);
-       HEAP32[$1046>>2] = 0;
-       break;
-      } else {
-       _abort();
-       // unreachable;
-      }
-     }
-    }
-   }
-  } while(0);
-  $1048 = HEAP32[(75280)>>2]|0;
-  $1049 = ($1048>>>0)>($$0197>>>0);
-  if ($1049) {
-   $1050 = (($1048) - ($$0197))|0;
-   HEAP32[(75280)>>2] = $1050;
-   $1051 = HEAP32[(75292)>>2]|0;
-   $1052 = (($1051) + ($$0197)|0);
-   HEAP32[(75292)>>2] = $1052;
-   $1053 = $1050 | 1;
-   $1054 = ((($1052)) + 4|0);
-   HEAP32[$1054>>2] = $1053;
-   $1055 = $$0197 | 3;
-   $1056 = ((($1051)) + 4|0);
-   HEAP32[$1056>>2] = $1055;
-   $1057 = ((($1051)) + 8|0);
-   $$0 = $1057;
-   STACKTOP = sp;return ($$0|0);
-  }
- }
- $1058 = (___errno_location()|0);
- HEAP32[$1058>>2] = 12;
- $$0 = 0;
- STACKTOP = sp;return ($$0|0);
-}
-function _free($0) {
- $0 = $0|0;
- var $$0212$i = 0, $$0212$in$i = 0, $$0383 = 0, $$0384 = 0, $$0396 = 0, $$0403 = 0, $$1 = 0, $$1382 = 0, $$1387 = 0, $$1390 = 0, $$1398 = 0, $$1402 = 0, $$2 = 0, $$3 = 0, $$3400 = 0, $$pre = 0, $$pre$phi443Z2D = 0, $$pre$phi445Z2D = 0, $$pre$phiZ2D = 0, $$pre442 = 0;
- var $$pre444 = 0, $$sink3 = 0, $$sink5 = 0, $1 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0;
- var $114 = 0, $115 = 0, $116 = 0, $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0;
- var $132 = 0, $133 = 0, $134 = 0, $135 = 0, $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0;
- var $150 = 0, $151 = 0, $152 = 0, $153 = 0, $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0;
- var $169 = 0, $17 = 0, $170 = 0, $171 = 0, $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0;
- var $187 = 0, $188 = 0, $189 = 0, $19 = 0, $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0, $197 = 0, $198 = 0, $199 = 0, $2 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0;
- var $204 = 0, $205 = 0, $206 = 0, $207 = 0, $208 = 0, $209 = 0, $21 = 0, $210 = 0, $211 = 0, $212 = 0, $213 = 0, $214 = 0, $215 = 0, $216 = 0, $217 = 0, $218 = 0, $219 = 0, $22 = 0, $220 = 0, $221 = 0;
- var $222 = 0, $223 = 0, $224 = 0, $225 = 0, $226 = 0, $227 = 0, $228 = 0, $229 = 0, $23 = 0, $230 = 0, $231 = 0, $232 = 0, $233 = 0, $234 = 0, $235 = 0, $236 = 0, $237 = 0, $238 = 0, $239 = 0, $24 = 0;
- var $240 = 0, $241 = 0, $242 = 0, $243 = 0, $244 = 0, $245 = 0, $246 = 0, $247 = 0, $248 = 0, $249 = 0, $25 = 0, $250 = 0, $251 = 0, $252 = 0, $253 = 0, $254 = 0, $255 = 0, $256 = 0, $257 = 0, $258 = 0;
- var $259 = 0, $26 = 0, $260 = 0, $261 = 0, $262 = 0, $263 = 0, $264 = 0, $265 = 0, $266 = 0, $267 = 0, $268 = 0, $269 = 0, $27 = 0, $270 = 0, $271 = 0, $272 = 0, $273 = 0, $274 = 0, $275 = 0, $276 = 0;
- var $277 = 0, $278 = 0, $279 = 0, $28 = 0, $280 = 0, $281 = 0, $282 = 0, $283 = 0, $284 = 0, $285 = 0, $286 = 0, $287 = 0, $288 = 0, $289 = 0, $29 = 0, $290 = 0, $291 = 0, $292 = 0, $293 = 0, $294 = 0;
- var $295 = 0, $296 = 0, $297 = 0, $298 = 0, $299 = 0, $3 = 0, $30 = 0, $300 = 0, $301 = 0, $302 = 0, $303 = 0, $304 = 0, $305 = 0, $306 = 0, $307 = 0, $308 = 0, $309 = 0, $31 = 0, $310 = 0, $311 = 0;
- var $312 = 0, $313 = 0, $314 = 0, $315 = 0, $316 = 0, $317 = 0, $318 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0;
- var $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0;
- var $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0;
- var $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0;
- var $99 = 0, $cond421 = 0, $cond422 = 0, $not$ = 0, $not$405 = 0, $not$437 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- $1 = ($0|0)==(0|0);
- if ($1) {
-  return;
- }
- $2 = ((($0)) + -8|0);
- $3 = HEAP32[(75284)>>2]|0;
- $4 = ($2>>>0)<($3>>>0);
- if ($4) {
-  _abort();
-  // unreachable;
- }
- $5 = ((($0)) + -4|0);
- $6 = HEAP32[$5>>2]|0;
- $7 = $6 & 3;
- $8 = ($7|0)==(1);
- if ($8) {
-  _abort();
-  // unreachable;
- }
- $9 = $6 & -8;
- $10 = (($2) + ($9)|0);
- $11 = $6 & 1;
- $12 = ($11|0)==(0);
- L10: do {
-  if ($12) {
-   $13 = HEAP32[$2>>2]|0;
-   $14 = ($7|0)==(0);
-   if ($14) {
-    return;
-   }
-   $15 = (0 - ($13))|0;
-   $16 = (($2) + ($15)|0);
-   $17 = (($13) + ($9))|0;
-   $18 = ($16>>>0)<($3>>>0);
-   if ($18) {
-    _abort();
-    // unreachable;
-   }
-   $19 = HEAP32[(75288)>>2]|0;
-   $20 = ($16|0)==($19|0);
-   if ($20) {
-    $104 = ((($10)) + 4|0);
-    $105 = HEAP32[$104>>2]|0;
-    $106 = $105 & 3;
-    $107 = ($106|0)==(3);
-    if (!($107)) {
-     $$1 = $16;$$1382 = $17;$113 = $16;
-     break;
-    }
-    $108 = (($16) + ($17)|0);
-    $109 = ((($16)) + 4|0);
-    $110 = $17 | 1;
-    $111 = $105 & -2;
-    HEAP32[(75276)>>2] = $17;
-    HEAP32[$104>>2] = $111;
-    HEAP32[$109>>2] = $110;
-    HEAP32[$108>>2] = $17;
-    return;
-   }
-   $21 = $13 >>> 3;
-   $22 = ($13>>>0)<(256);
-   if ($22) {
-    $23 = ((($16)) + 8|0);
-    $24 = HEAP32[$23>>2]|0;
-    $25 = ((($16)) + 12|0);
-    $26 = HEAP32[$25>>2]|0;
-    $27 = $21 << 1;
-    $28 = (75308 + ($27<<2)|0);
-    $29 = ($24|0)==($28|0);
-    if (!($29)) {
-     $30 = ($24>>>0)<($3>>>0);
-     if ($30) {
-      _abort();
-      // unreachable;
-     }
-     $31 = ((($24)) + 12|0);
-     $32 = HEAP32[$31>>2]|0;
-     $33 = ($32|0)==($16|0);
-     if (!($33)) {
-      _abort();
-      // unreachable;
-     }
-    }
-    $34 = ($26|0)==($24|0);
-    if ($34) {
-     $35 = 1 << $21;
-     $36 = $35 ^ -1;
-     $37 = HEAP32[18817]|0;
-     $38 = $37 & $36;
-     HEAP32[18817] = $38;
-     $$1 = $16;$$1382 = $17;$113 = $16;
-     break;
-    }
-    $39 = ($26|0)==($28|0);
-    if ($39) {
-     $$pre444 = ((($26)) + 8|0);
-     $$pre$phi445Z2D = $$pre444;
-    } else {
-     $40 = ($26>>>0)<($3>>>0);
-     if ($40) {
-      _abort();
-      // unreachable;
-     }
-     $41 = ((($26)) + 8|0);
-     $42 = HEAP32[$41>>2]|0;
-     $43 = ($42|0)==($16|0);
-     if ($43) {
-      $$pre$phi445Z2D = $41;
-     } else {
-      _abort();
-      // unreachable;
-     }
-    }
-    $44 = ((($24)) + 12|0);
-    HEAP32[$44>>2] = $26;
-    HEAP32[$$pre$phi445Z2D>>2] = $24;
-    $$1 = $16;$$1382 = $17;$113 = $16;
-    break;
-   }
-   $45 = ((($16)) + 24|0);
-   $46 = HEAP32[$45>>2]|0;
-   $47 = ((($16)) + 12|0);
-   $48 = HEAP32[$47>>2]|0;
-   $49 = ($48|0)==($16|0);
-   do {
-    if ($49) {
-     $59 = ((($16)) + 16|0);
-     $60 = ((($59)) + 4|0);
-     $61 = HEAP32[$60>>2]|0;
-     $62 = ($61|0)==(0|0);
-     if ($62) {
-      $63 = HEAP32[$59>>2]|0;
-      $64 = ($63|0)==(0|0);
-      if ($64) {
-       $$3 = 0;
-       break;
-      } else {
-       $$1387 = $63;$$1390 = $59;
-      }
-     } else {
-      $$1387 = $61;$$1390 = $60;
-     }
-     while(1) {
-      $65 = ((($$1387)) + 20|0);
-      $66 = HEAP32[$65>>2]|0;
-      $67 = ($66|0)==(0|0);
-      if (!($67)) {
-       $$1387 = $66;$$1390 = $65;
-       continue;
-      }
-      $68 = ((($$1387)) + 16|0);
-      $69 = HEAP32[$68>>2]|0;
-      $70 = ($69|0)==(0|0);
-      if ($70) {
-       break;
-      } else {
-       $$1387 = $69;$$1390 = $68;
-      }
-     }
-     $71 = ($$1390>>>0)<($3>>>0);
-     if ($71) {
-      _abort();
-      // unreachable;
-     } else {
-      HEAP32[$$1390>>2] = 0;
-      $$3 = $$1387;
-      break;
-     }
-    } else {
-     $50 = ((($16)) + 8|0);
-     $51 = HEAP32[$50>>2]|0;
-     $52 = ($51>>>0)<($3>>>0);
-     if ($52) {
-      _abort();
-      // unreachable;
-     }
-     $53 = ((($51)) + 12|0);
-     $54 = HEAP32[$53>>2]|0;
-     $55 = ($54|0)==($16|0);
-     if (!($55)) {
-      _abort();
-      // unreachable;
-     }
-     $56 = ((($48)) + 8|0);
-     $57 = HEAP32[$56>>2]|0;
-     $58 = ($57|0)==($16|0);
-     if ($58) {
-      HEAP32[$53>>2] = $48;
-      HEAP32[$56>>2] = $51;
-      $$3 = $48;
-      break;
-     } else {
-      _abort();
-      // unreachable;
-     }
-    }
-   } while(0);
-   $72 = ($46|0)==(0|0);
-   if ($72) {
-    $$1 = $16;$$1382 = $17;$113 = $16;
-   } else {
-    $73 = ((($16)) + 28|0);
-    $74 = HEAP32[$73>>2]|0;
-    $75 = (75572 + ($74<<2)|0);
-    $76 = HEAP32[$75>>2]|0;
-    $77 = ($16|0)==($76|0);
-    do {
-     if ($77) {
-      HEAP32[$75>>2] = $$3;
-      $cond421 = ($$3|0)==(0|0);
-      if ($cond421) {
-       $78 = 1 << $74;
-       $79 = $78 ^ -1;
-       $80 = HEAP32[(75272)>>2]|0;
-       $81 = $80 & $79;
-       HEAP32[(75272)>>2] = $81;
-       $$1 = $16;$$1382 = $17;$113 = $16;
-       break L10;
-      }
-     } else {
-      $82 = HEAP32[(75284)>>2]|0;
-      $83 = ($46>>>0)<($82>>>0);
-      if ($83) {
-       _abort();
-       // unreachable;
-      } else {
-       $84 = ((($46)) + 16|0);
-       $85 = HEAP32[$84>>2]|0;
-       $not$405 = ($85|0)!=($16|0);
-       $$sink3 = $not$405&1;
-       $86 = (((($46)) + 16|0) + ($$sink3<<2)|0);
-       HEAP32[$86>>2] = $$3;
-       $87 = ($$3|0)==(0|0);
-       if ($87) {
-        $$1 = $16;$$1382 = $17;$113 = $16;
-        break L10;
-       } else {
-        break;
-       }
-      }
-     }
-    } while(0);
-    $88 = HEAP32[(75284)>>2]|0;
-    $89 = ($$3>>>0)<($88>>>0);
-    if ($89) {
-     _abort();
-     // unreachable;
-    }
-    $90 = ((($$3)) + 24|0);
-    HEAP32[$90>>2] = $46;
-    $91 = ((($16)) + 16|0);
-    $92 = HEAP32[$91>>2]|0;
-    $93 = ($92|0)==(0|0);
-    do {
-     if (!($93)) {
-      $94 = ($92>>>0)<($88>>>0);
-      if ($94) {
-       _abort();
-       // unreachable;
-      } else {
-       $95 = ((($$3)) + 16|0);
-       HEAP32[$95>>2] = $92;
-       $96 = ((($92)) + 24|0);
-       HEAP32[$96>>2] = $$3;
-       break;
-      }
-     }
-    } while(0);
-    $97 = ((($91)) + 4|0);
-    $98 = HEAP32[$97>>2]|0;
-    $99 = ($98|0)==(0|0);
-    if ($99) {
-     $$1 = $16;$$1382 = $17;$113 = $16;
-    } else {
-     $100 = HEAP32[(75284)>>2]|0;
-     $101 = ($98>>>0)<($100>>>0);
-     if ($101) {
-      _abort();
-      // unreachable;
-     } else {
-      $102 = ((($$3)) + 20|0);
-      HEAP32[$102>>2] = $98;
-      $103 = ((($98)) + 24|0);
-      HEAP32[$103>>2] = $$3;
-      $$1 = $16;$$1382 = $17;$113 = $16;
-      break;
-     }
-    }
-   }
-  } else {
-   $$1 = $2;$$1382 = $9;$113 = $2;
-  }
- } while(0);
- $112 = ($113>>>0)<($10>>>0);
- if (!($112)) {
-  _abort();
-  // unreachable;
- }
- $114 = ((($10)) + 4|0);
- $115 = HEAP32[$114>>2]|0;
- $116 = $115 & 1;
- $117 = ($116|0)==(0);
- if ($117) {
-  _abort();
-  // unreachable;
- }
- $118 = $115 & 2;
- $119 = ($118|0)==(0);
- if ($119) {
-  $120 = HEAP32[(75292)>>2]|0;
-  $121 = ($10|0)==($120|0);
-  $122 = HEAP32[(75288)>>2]|0;
-  if ($121) {
-   $123 = HEAP32[(75280)>>2]|0;
-   $124 = (($123) + ($$1382))|0;
-   HEAP32[(75280)>>2] = $124;
-   HEAP32[(75292)>>2] = $$1;
-   $125 = $124 | 1;
-   $126 = ((($$1)) + 4|0);
-   HEAP32[$126>>2] = $125;
-   $127 = ($$1|0)==($122|0);
-   if (!($127)) {
-    return;
-   }
-   HEAP32[(75288)>>2] = 0;
-   HEAP32[(75276)>>2] = 0;
-   return;
-  }
-  $128 = ($10|0)==($122|0);
-  if ($128) {
-   $129 = HEAP32[(75276)>>2]|0;
-   $130 = (($129) + ($$1382))|0;
-   HEAP32[(75276)>>2] = $130;
-   HEAP32[(75288)>>2] = $113;
-   $131 = $130 | 1;
-   $132 = ((($$1)) + 4|0);
-   HEAP32[$132>>2] = $131;
-   $133 = (($113) + ($130)|0);
-   HEAP32[$133>>2] = $130;
-   return;
-  }
-  $134 = $115 & -8;
-  $135 = (($134) + ($$1382))|0;
-  $136 = $115 >>> 3;
-  $137 = ($115>>>0)<(256);
-  L108: do {
-   if ($137) {
-    $138 = ((($10)) + 8|0);
-    $139 = HEAP32[$138>>2]|0;
-    $140 = ((($10)) + 12|0);
-    $141 = HEAP32[$140>>2]|0;
-    $142 = $136 << 1;
-    $143 = (75308 + ($142<<2)|0);
-    $144 = ($139|0)==($143|0);
-    if (!($144)) {
-     $145 = HEAP32[(75284)>>2]|0;
-     $146 = ($139>>>0)<($145>>>0);
-     if ($146) {
-      _abort();
-      // unreachable;
-     }
-     $147 = ((($139)) + 12|0);
-     $148 = HEAP32[$147>>2]|0;
-     $149 = ($148|0)==($10|0);
-     if (!($149)) {
-      _abort();
-      // unreachable;
-     }
-    }
-    $150 = ($141|0)==($139|0);
-    if ($150) {
-     $151 = 1 << $136;
-     $152 = $151 ^ -1;
-     $153 = HEAP32[18817]|0;
-     $154 = $153 & $152;
-     HEAP32[18817] = $154;
-     break;
-    }
-    $155 = ($141|0)==($143|0);
-    if ($155) {
-     $$pre442 = ((($141)) + 8|0);
-     $$pre$phi443Z2D = $$pre442;
-    } else {
-     $156 = HEAP32[(75284)>>2]|0;
-     $157 = ($141>>>0)<($156>>>0);
-     if ($157) {
-      _abort();
-      // unreachable;
-     }
-     $158 = ((($141)) + 8|0);
-     $159 = HEAP32[$158>>2]|0;
-     $160 = ($159|0)==($10|0);
-     if ($160) {
-      $$pre$phi443Z2D = $158;
-     } else {
-      _abort();
-      // unreachable;
-     }
-    }
-    $161 = ((($139)) + 12|0);
-    HEAP32[$161>>2] = $141;
-    HEAP32[$$pre$phi443Z2D>>2] = $139;
-   } else {
-    $162 = ((($10)) + 24|0);
-    $163 = HEAP32[$162>>2]|0;
-    $164 = ((($10)) + 12|0);
-    $165 = HEAP32[$164>>2]|0;
-    $166 = ($165|0)==($10|0);
-    do {
-     if ($166) {
-      $177 = ((($10)) + 16|0);
-      $178 = ((($177)) + 4|0);
-      $179 = HEAP32[$178>>2]|0;
-      $180 = ($179|0)==(0|0);
-      if ($180) {
-       $181 = HEAP32[$177>>2]|0;
-       $182 = ($181|0)==(0|0);
-       if ($182) {
-        $$3400 = 0;
-        break;
-       } else {
-        $$1398 = $181;$$1402 = $177;
-       }
-      } else {
-       $$1398 = $179;$$1402 = $178;
-      }
-      while(1) {
-       $183 = ((($$1398)) + 20|0);
-       $184 = HEAP32[$183>>2]|0;
-       $185 = ($184|0)==(0|0);
-       if (!($185)) {
-        $$1398 = $184;$$1402 = $183;
-        continue;
-       }
-       $186 = ((($$1398)) + 16|0);
-       $187 = HEAP32[$186>>2]|0;
-       $188 = ($187|0)==(0|0);
-       if ($188) {
-        break;
-       } else {
-        $$1398 = $187;$$1402 = $186;
-       }
-      }
-      $189 = HEAP32[(75284)>>2]|0;
-      $190 = ($$1402>>>0)<($189>>>0);
-      if ($190) {
-       _abort();
-       // unreachable;
-      } else {
-       HEAP32[$$1402>>2] = 0;
-       $$3400 = $$1398;
-       break;
-      }
-     } else {
-      $167 = ((($10)) + 8|0);
-      $168 = HEAP32[$167>>2]|0;
-      $169 = HEAP32[(75284)>>2]|0;
-      $170 = ($168>>>0)<($169>>>0);
-      if ($170) {
-       _abort();
-       // unreachable;
-      }
-      $171 = ((($168)) + 12|0);
-      $172 = HEAP32[$171>>2]|0;
-      $173 = ($172|0)==($10|0);
-      if (!($173)) {
-       _abort();
-       // unreachable;
-      }
-      $174 = ((($165)) + 8|0);
-      $175 = HEAP32[$174>>2]|0;
-      $176 = ($175|0)==($10|0);
-      if ($176) {
-       HEAP32[$171>>2] = $165;
-       HEAP32[$174>>2] = $168;
-       $$3400 = $165;
-       break;
-      } else {
-       _abort();
-       // unreachable;
-      }
-     }
-    } while(0);
-    $191 = ($163|0)==(0|0);
-    if (!($191)) {
-     $192 = ((($10)) + 28|0);
-     $193 = HEAP32[$192>>2]|0;
-     $194 = (75572 + ($193<<2)|0);
-     $195 = HEAP32[$194>>2]|0;
-     $196 = ($10|0)==($195|0);
-     do {
-      if ($196) {
-       HEAP32[$194>>2] = $$3400;
-       $cond422 = ($$3400|0)==(0|0);
-       if ($cond422) {
-        $197 = 1 << $193;
-        $198 = $197 ^ -1;
-        $199 = HEAP32[(75272)>>2]|0;
-        $200 = $199 & $198;
-        HEAP32[(75272)>>2] = $200;
-        break L108;
-       }
-      } else {
-       $201 = HEAP32[(75284)>>2]|0;
-       $202 = ($163>>>0)<($201>>>0);
-       if ($202) {
-        _abort();
-        // unreachable;
-       } else {
-        $203 = ((($163)) + 16|0);
-        $204 = HEAP32[$203>>2]|0;
-        $not$ = ($204|0)!=($10|0);
-        $$sink5 = $not$&1;
-        $205 = (((($163)) + 16|0) + ($$sink5<<2)|0);
-        HEAP32[$205>>2] = $$3400;
-        $206 = ($$3400|0)==(0|0);
-        if ($206) {
-         break L108;
-        } else {
-         break;
-        }
-       }
-      }
-     } while(0);
-     $207 = HEAP32[(75284)>>2]|0;
-     $208 = ($$3400>>>0)<($207>>>0);
-     if ($208) {
-      _abort();
-      // unreachable;
-     }
-     $209 = ((($$3400)) + 24|0);
-     HEAP32[$209>>2] = $163;
-     $210 = ((($10)) + 16|0);
-     $211 = HEAP32[$210>>2]|0;
-     $212 = ($211|0)==(0|0);
-     do {
-      if (!($212)) {
-       $213 = ($211>>>0)<($207>>>0);
-       if ($213) {
-        _abort();
-        // unreachable;
-       } else {
-        $214 = ((($$3400)) + 16|0);
-        HEAP32[$214>>2] = $211;
-        $215 = ((($211)) + 24|0);
-        HEAP32[$215>>2] = $$3400;
-        break;
-       }
-      }
-     } while(0);
-     $216 = ((($210)) + 4|0);
-     $217 = HEAP32[$216>>2]|0;
-     $218 = ($217|0)==(0|0);
-     if (!($218)) {
-      $219 = HEAP32[(75284)>>2]|0;
-      $220 = ($217>>>0)<($219>>>0);
-      if ($220) {
-       _abort();
-       // unreachable;
-      } else {
-       $221 = ((($$3400)) + 20|0);
-       HEAP32[$221>>2] = $217;
-       $222 = ((($217)) + 24|0);
-       HEAP32[$222>>2] = $$3400;
-       break;
-      }
-     }
-    }
-   }
-  } while(0);
-  $223 = $135 | 1;
-  $224 = ((($$1)) + 4|0);
-  HEAP32[$224>>2] = $223;
-  $225 = (($113) + ($135)|0);
-  HEAP32[$225>>2] = $135;
-  $226 = HEAP32[(75288)>>2]|0;
-  $227 = ($$1|0)==($226|0);
-  if ($227) {
-   HEAP32[(75276)>>2] = $135;
-   return;
-  } else {
-   $$2 = $135;
-  }
- } else {
-  $228 = $115 & -2;
-  HEAP32[$114>>2] = $228;
-  $229 = $$1382 | 1;
-  $230 = ((($$1)) + 4|0);
-  HEAP32[$230>>2] = $229;
-  $231 = (($113) + ($$1382)|0);
-  HEAP32[$231>>2] = $$1382;
-  $$2 = $$1382;
- }
- $232 = $$2 >>> 3;
- $233 = ($$2>>>0)<(256);
- if ($233) {
-  $234 = $232 << 1;
-  $235 = (75308 + ($234<<2)|0);
-  $236 = HEAP32[18817]|0;
-  $237 = 1 << $232;
-  $238 = $236 & $237;
-  $239 = ($238|0)==(0);
-  if ($239) {
-   $240 = $236 | $237;
-   HEAP32[18817] = $240;
-   $$pre = ((($235)) + 8|0);
-   $$0403 = $235;$$pre$phiZ2D = $$pre;
-  } else {
-   $241 = ((($235)) + 8|0);
-   $242 = HEAP32[$241>>2]|0;
-   $243 = HEAP32[(75284)>>2]|0;
-   $244 = ($242>>>0)<($243>>>0);
-   if ($244) {
-    _abort();
-    // unreachable;
-   } else {
-    $$0403 = $242;$$pre$phiZ2D = $241;
-   }
-  }
-  HEAP32[$$pre$phiZ2D>>2] = $$1;
-  $245 = ((($$0403)) + 12|0);
-  HEAP32[$245>>2] = $$1;
-  $246 = ((($$1)) + 8|0);
-  HEAP32[$246>>2] = $$0403;
-  $247 = ((($$1)) + 12|0);
-  HEAP32[$247>>2] = $235;
-  return;
- }
- $248 = $$2 >>> 8;
- $249 = ($248|0)==(0);
- if ($249) {
-  $$0396 = 0;
- } else {
-  $250 = ($$2>>>0)>(16777215);
-  if ($250) {
-   $$0396 = 31;
-  } else {
-   $251 = (($248) + 1048320)|0;
-   $252 = $251 >>> 16;
-   $253 = $252 & 8;
-   $254 = $248 << $253;
-   $255 = (($254) + 520192)|0;
-   $256 = $255 >>> 16;
-   $257 = $256 & 4;
-   $258 = $257 | $253;
-   $259 = $254 << $257;
-   $260 = (($259) + 245760)|0;
-   $261 = $260 >>> 16;
-   $262 = $261 & 2;
-   $263 = $258 | $262;
-   $264 = (14 - ($263))|0;
-   $265 = $259 << $262;
-   $266 = $265 >>> 15;
-   $267 = (($264) + ($266))|0;
-   $268 = $267 << 1;
-   $269 = (($267) + 7)|0;
-   $270 = $$2 >>> $269;
-   $271 = $270 & 1;
-   $272 = $271 | $268;
-   $$0396 = $272;
-  }
- }
- $273 = (75572 + ($$0396<<2)|0);
- $274 = ((($$1)) + 28|0);
- HEAP32[$274>>2] = $$0396;
- $275 = ((($$1)) + 16|0);
- $276 = ((($$1)) + 20|0);
- HEAP32[$276>>2] = 0;
- HEAP32[$275>>2] = 0;
- $277 = HEAP32[(75272)>>2]|0;
- $278 = 1 << $$0396;
- $279 = $277 & $278;
- $280 = ($279|0)==(0);
- do {
-  if ($280) {
-   $281 = $277 | $278;
-   HEAP32[(75272)>>2] = $281;
-   HEAP32[$273>>2] = $$1;
-   $282 = ((($$1)) + 24|0);
-   HEAP32[$282>>2] = $273;
-   $283 = ((($$1)) + 12|0);
-   HEAP32[$283>>2] = $$1;
-   $284 = ((($$1)) + 8|0);
-   HEAP32[$284>>2] = $$1;
-  } else {
-   $285 = HEAP32[$273>>2]|0;
-   $286 = ($$0396|0)==(31);
-   $287 = $$0396 >>> 1;
-   $288 = (25 - ($287))|0;
-   $289 = $286 ? 0 : $288;
-   $290 = $$2 << $289;
-   $$0383 = $290;$$0384 = $285;
-   while(1) {
-    $291 = ((($$0384)) + 4|0);
-    $292 = HEAP32[$291>>2]|0;
-    $293 = $292 & -8;
-    $294 = ($293|0)==($$2|0);
-    if ($294) {
-     label = 124;
-     break;
-    }
-    $295 = $$0383 >>> 31;
-    $296 = (((($$0384)) + 16|0) + ($295<<2)|0);
-    $297 = $$0383 << 1;
-    $298 = HEAP32[$296>>2]|0;
-    $299 = ($298|0)==(0|0);
-    if ($299) {
-     label = 121;
-     break;
-    } else {
-     $$0383 = $297;$$0384 = $298;
-    }
-   }
-   if ((label|0) == 121) {
-    $300 = HEAP32[(75284)>>2]|0;
-    $301 = ($296>>>0)<($300>>>0);
-    if ($301) {
-     _abort();
-     // unreachable;
-    } else {
-     HEAP32[$296>>2] = $$1;
-     $302 = ((($$1)) + 24|0);
-     HEAP32[$302>>2] = $$0384;
-     $303 = ((($$1)) + 12|0);
-     HEAP32[$303>>2] = $$1;
-     $304 = ((($$1)) + 8|0);
-     HEAP32[$304>>2] = $$1;
-     break;
-    }
-   }
-   else if ((label|0) == 124) {
-    $305 = ((($$0384)) + 8|0);
-    $306 = HEAP32[$305>>2]|0;
-    $307 = HEAP32[(75284)>>2]|0;
-    $308 = ($306>>>0)>=($307>>>0);
-    $not$437 = ($$0384>>>0)>=($307>>>0);
-    $309 = $308 & $not$437;
-    if ($309) {
-     $310 = ((($306)) + 12|0);
-     HEAP32[$310>>2] = $$1;
-     HEAP32[$305>>2] = $$1;
-     $311 = ((($$1)) + 8|0);
-     HEAP32[$311>>2] = $306;
-     $312 = ((($$1)) + 12|0);
-     HEAP32[$312>>2] = $$0384;
-     $313 = ((($$1)) + 24|0);
-     HEAP32[$313>>2] = 0;
-     break;
-    } else {
-     _abort();
-     // unreachable;
-    }
-   }
-  }
- } while(0);
- $314 = HEAP32[(75300)>>2]|0;
- $315 = (($314) + -1)|0;
- HEAP32[(75300)>>2] = $315;
- $316 = ($315|0)==(0);
- if ($316) {
-  $$0212$in$i = (75724);
- } else {
-  return;
- }
- while(1) {
-  $$0212$i = HEAP32[$$0212$in$i>>2]|0;
-  $317 = ($$0212$i|0)==(0|0);
-  $318 = ((($$0212$i)) + 8|0);
-  if ($317) {
-   break;
-  } else {
-   $$0212$in$i = $318;
-  }
- }
- HEAP32[(75300)>>2] = -1;
- return;
-}
-function _realloc($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $$1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $3 = 0, $4 = 0, $5 = 0;
- var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- $2 = ($0|0)==(0|0);
- if ($2) {
-  $3 = (_malloc($1)|0);
-  $$1 = $3;
-  return ($$1|0);
- }
- $4 = ($1>>>0)>(4294967231);
- if ($4) {
-  $5 = (___errno_location()|0);
-  HEAP32[$5>>2] = 12;
-  $$1 = 0;
-  return ($$1|0);
- }
- $6 = ($1>>>0)<(11);
- $7 = (($1) + 11)|0;
- $8 = $7 & -8;
- $9 = $6 ? 16 : $8;
- $10 = ((($0)) + -8|0);
- $11 = (_try_realloc_chunk($10,$9)|0);
- $12 = ($11|0)==(0|0);
- if (!($12)) {
-  $13 = ((($11)) + 8|0);
-  $$1 = $13;
-  return ($$1|0);
- }
- $14 = (_malloc($1)|0);
- $15 = ($14|0)==(0|0);
- if ($15) {
-  $$1 = 0;
-  return ($$1|0);
- }
- $16 = ((($0)) + -4|0);
- $17 = HEAP32[$16>>2]|0;
- $18 = $17 & -8;
- $19 = $17 & 3;
- $20 = ($19|0)==(0);
- $21 = $20 ? 8 : 4;
- $22 = (($18) - ($21))|0;
- $23 = ($22>>>0)<($1>>>0);
- $24 = $23 ? $22 : $1;
- _memcpy(($14|0),($0|0),($24|0))|0;
- _free($0);
- $$1 = $14;
- return ($$1|0);
-}
-function _try_realloc_chunk($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $$1272 = 0, $$1275 = 0, $$2 = 0, $$3 = 0, $$pre = 0, $$pre$phiZ2D = 0, $$sink1 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0;
- var $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0;
- var $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0, $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0;
- var $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0, $152 = 0, $153 = 0, $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0;
- var $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0, $170 = 0, $171 = 0, $172 = 0, $173 = 0, $174 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0;
- var $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0;
- var $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0;
- var $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0;
- var $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0;
- var $cond = 0, $not$ = 0, $notlhs = 0, $notrhs = 0, $or$cond$not = 0, $or$cond3 = 0, $storemerge = 0, $storemerge1 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- $2 = ((($0)) + 4|0);
- $3 = HEAP32[$2>>2]|0;
- $4 = $3 & -8;
- $5 = (($0) + ($4)|0);
- $6 = HEAP32[(75284)>>2]|0;
- $7 = $3 & 3;
- $notlhs = ($0>>>0)>=($6>>>0);
- $notrhs = ($7|0)!=(1);
- $or$cond$not = $notrhs & $notlhs;
- $8 = ($0>>>0)<($5>>>0);
- $or$cond3 = $or$cond$not & $8;
- if (!($or$cond3)) {
-  _abort();
-  // unreachable;
- }
- $9 = ((($5)) + 4|0);
- $10 = HEAP32[$9>>2]|0;
- $11 = $10 & 1;
- $12 = ($11|0)==(0);
- if ($12) {
-  _abort();
-  // unreachable;
- }
- $13 = ($7|0)==(0);
- if ($13) {
-  $14 = ($1>>>0)<(256);
-  if ($14) {
-   $$2 = 0;
-   return ($$2|0);
-  }
-  $15 = (($1) + 4)|0;
-  $16 = ($4>>>0)<($15>>>0);
-  if (!($16)) {
-   $17 = (($4) - ($1))|0;
-   $18 = HEAP32[(75748)>>2]|0;
-   $19 = $18 << 1;
-   $20 = ($17>>>0)>($19>>>0);
-   if (!($20)) {
-    $$2 = $0;
-    return ($$2|0);
-   }
-  }
-  $$2 = 0;
-  return ($$2|0);
- }
- $21 = ($4>>>0)<($1>>>0);
- if (!($21)) {
-  $22 = (($4) - ($1))|0;
-  $23 = ($22>>>0)>(15);
-  if (!($23)) {
-   $$2 = $0;
-   return ($$2|0);
-  }
-  $24 = (($0) + ($1)|0);
-  $25 = $3 & 1;
-  $26 = $25 | $1;
-  $27 = $26 | 2;
-  HEAP32[$2>>2] = $27;
-  $28 = ((($24)) + 4|0);
-  $29 = $22 | 3;
-  HEAP32[$28>>2] = $29;
-  $30 = (($24) + ($22)|0);
-  $31 = ((($30)) + 4|0);
-  $32 = HEAP32[$31>>2]|0;
-  $33 = $32 | 1;
-  HEAP32[$31>>2] = $33;
-  _dispose_chunk($24,$22);
-  $$2 = $0;
-  return ($$2|0);
- }
- $34 = HEAP32[(75292)>>2]|0;
- $35 = ($5|0)==($34|0);
- if ($35) {
-  $36 = HEAP32[(75280)>>2]|0;
-  $37 = (($36) + ($4))|0;
-  $38 = ($37>>>0)>($1>>>0);
-  $39 = (($37) - ($1))|0;
-  $40 = (($0) + ($1)|0);
-  if (!($38)) {
-   $$2 = 0;
-   return ($$2|0);
-  }
-  $41 = $39 | 1;
-  $42 = ((($40)) + 4|0);
-  $43 = $3 & 1;
-  $44 = $43 | $1;
-  $45 = $44 | 2;
-  HEAP32[$2>>2] = $45;
-  HEAP32[$42>>2] = $41;
-  HEAP32[(75292)>>2] = $40;
-  HEAP32[(75280)>>2] = $39;
-  $$2 = $0;
-  return ($$2|0);
- }
- $46 = HEAP32[(75288)>>2]|0;
- $47 = ($5|0)==($46|0);
- if ($47) {
-  $48 = HEAP32[(75276)>>2]|0;
-  $49 = (($48) + ($4))|0;
-  $50 = ($49>>>0)<($1>>>0);
-  if ($50) {
-   $$2 = 0;
-   return ($$2|0);
-  }
-  $51 = (($49) - ($1))|0;
-  $52 = ($51>>>0)>(15);
-  $53 = $3 & 1;
-  if ($52) {
-   $54 = (($0) + ($1)|0);
-   $55 = (($54) + ($51)|0);
-   $56 = $53 | $1;
-   $57 = $56 | 2;
-   HEAP32[$2>>2] = $57;
-   $58 = ((($54)) + 4|0);
-   $59 = $51 | 1;
-   HEAP32[$58>>2] = $59;
-   HEAP32[$55>>2] = $51;
-   $60 = ((($55)) + 4|0);
-   $61 = HEAP32[$60>>2]|0;
-   $62 = $61 & -2;
-   HEAP32[$60>>2] = $62;
-   $storemerge = $54;$storemerge1 = $51;
-  } else {
-   $63 = $53 | $49;
-   $64 = $63 | 2;
-   HEAP32[$2>>2] = $64;
-   $65 = (($0) + ($49)|0);
-   $66 = ((($65)) + 4|0);
-   $67 = HEAP32[$66>>2]|0;
-   $68 = $67 | 1;
-   HEAP32[$66>>2] = $68;
-   $storemerge = 0;$storemerge1 = 0;
-  }
-  HEAP32[(75276)>>2] = $storemerge1;
-  HEAP32[(75288)>>2] = $storemerge;
-  $$2 = $0;
-  return ($$2|0);
- }
- $69 = $10 & 2;
- $70 = ($69|0)==(0);
- if (!($70)) {
-  $$2 = 0;
-  return ($$2|0);
- }
- $71 = $10 & -8;
- $72 = (($71) + ($4))|0;
- $73 = ($72>>>0)<($1>>>0);
- if ($73) {
-  $$2 = 0;
-  return ($$2|0);
- }
- $74 = (($72) - ($1))|0;
- $75 = $10 >>> 3;
- $76 = ($10>>>0)<(256);
- L49: do {
-  if ($76) {
-   $77 = ((($5)) + 8|0);
-   $78 = HEAP32[$77>>2]|0;
-   $79 = ((($5)) + 12|0);
-   $80 = HEAP32[$79>>2]|0;
-   $81 = $75 << 1;
-   $82 = (75308 + ($81<<2)|0);
-   $83 = ($78|0)==($82|0);
-   if (!($83)) {
-    $84 = ($78>>>0)<($6>>>0);
-    if ($84) {
-     _abort();
-     // unreachable;
-    }
-    $85 = ((($78)) + 12|0);
-    $86 = HEAP32[$85>>2]|0;
-    $87 = ($86|0)==($5|0);
-    if (!($87)) {
-     _abort();
-     // unreachable;
-    }
-   }
-   $88 = ($80|0)==($78|0);
-   if ($88) {
-    $89 = 1 << $75;
-    $90 = $89 ^ -1;
-    $91 = HEAP32[18817]|0;
-    $92 = $91 & $90;
-    HEAP32[18817] = $92;
-    break;
-   }
-   $93 = ($80|0)==($82|0);
-   if ($93) {
-    $$pre = ((($80)) + 8|0);
-    $$pre$phiZ2D = $$pre;
-   } else {
-    $94 = ($80>>>0)<($6>>>0);
-    if ($94) {
-     _abort();
-     // unreachable;
-    }
-    $95 = ((($80)) + 8|0);
-    $96 = HEAP32[$95>>2]|0;
-    $97 = ($96|0)==($5|0);
-    if ($97) {
-     $$pre$phiZ2D = $95;
-    } else {
-     _abort();
-     // unreachable;
-    }
-   }
-   $98 = ((($78)) + 12|0);
-   HEAP32[$98>>2] = $80;
-   HEAP32[$$pre$phiZ2D>>2] = $78;
-  } else {
-   $99 = ((($5)) + 24|0);
-   $100 = HEAP32[$99>>2]|0;
-   $101 = ((($5)) + 12|0);
-   $102 = HEAP32[$101>>2]|0;
-   $103 = ($102|0)==($5|0);
-   do {
-    if ($103) {
-     $113 = ((($5)) + 16|0);
-     $114 = ((($113)) + 4|0);
-     $115 = HEAP32[$114>>2]|0;
-     $116 = ($115|0)==(0|0);
-     if ($116) {
-      $117 = HEAP32[$113>>2]|0;
-      $118 = ($117|0)==(0|0);
-      if ($118) {
-       $$3 = 0;
-       break;
-      } else {
-       $$1272 = $117;$$1275 = $113;
-      }
-     } else {
-      $$1272 = $115;$$1275 = $114;
-     }
-     while(1) {
-      $119 = ((($$1272)) + 20|0);
-      $120 = HEAP32[$119>>2]|0;
-      $121 = ($120|0)==(0|0);
-      if (!($121)) {
-       $$1272 = $120;$$1275 = $119;
-       continue;
-      }
-      $122 = ((($$1272)) + 16|0);
-      $123 = HEAP32[$122>>2]|0;
-      $124 = ($123|0)==(0|0);
-      if ($124) {
-       break;
-      } else {
-       $$1272 = $123;$$1275 = $122;
-      }
-     }
-     $125 = ($$1275>>>0)<($6>>>0);
-     if ($125) {
-      _abort();
-      // unreachable;
-     } else {
-      HEAP32[$$1275>>2] = 0;
-      $$3 = $$1272;
-      break;
-     }
-    } else {
-     $104 = ((($5)) + 8|0);
-     $105 = HEAP32[$104>>2]|0;
-     $106 = ($105>>>0)<($6>>>0);
-     if ($106) {
-      _abort();
-      // unreachable;
-     }
-     $107 = ((($105)) + 12|0);
-     $108 = HEAP32[$107>>2]|0;
-     $109 = ($108|0)==($5|0);
-     if (!($109)) {
-      _abort();
-      // unreachable;
-     }
-     $110 = ((($102)) + 8|0);
-     $111 = HEAP32[$110>>2]|0;
-     $112 = ($111|0)==($5|0);
-     if ($112) {
-      HEAP32[$107>>2] = $102;
-      HEAP32[$110>>2] = $105;
-      $$3 = $102;
-      break;
-     } else {
-      _abort();
-      // unreachable;
-     }
-    }
-   } while(0);
-   $126 = ($100|0)==(0|0);
-   if (!($126)) {
-    $127 = ((($5)) + 28|0);
-    $128 = HEAP32[$127>>2]|0;
-    $129 = (75572 + ($128<<2)|0);
-    $130 = HEAP32[$129>>2]|0;
-    $131 = ($5|0)==($130|0);
-    do {
-     if ($131) {
-      HEAP32[$129>>2] = $$3;
-      $cond = ($$3|0)==(0|0);
-      if ($cond) {
-       $132 = 1 << $128;
-       $133 = $132 ^ -1;
-       $134 = HEAP32[(75272)>>2]|0;
-       $135 = $134 & $133;
-       HEAP32[(75272)>>2] = $135;
-       break L49;
-      }
-     } else {
-      $136 = HEAP32[(75284)>>2]|0;
-      $137 = ($100>>>0)<($136>>>0);
-      if ($137) {
-       _abort();
-       // unreachable;
-      } else {
-       $138 = ((($100)) + 16|0);
-       $139 = HEAP32[$138>>2]|0;
-       $not$ = ($139|0)!=($5|0);
-       $$sink1 = $not$&1;
-       $140 = (((($100)) + 16|0) + ($$sink1<<2)|0);
-       HEAP32[$140>>2] = $$3;
-       $141 = ($$3|0)==(0|0);
-       if ($141) {
-        break L49;
-       } else {
-        break;
-       }
-      }
-     }
-    } while(0);
-    $142 = HEAP32[(75284)>>2]|0;
-    $143 = ($$3>>>0)<($142>>>0);
-    if ($143) {
-     _abort();
-     // unreachable;
-    }
-    $144 = ((($$3)) + 24|0);
-    HEAP32[$144>>2] = $100;
-    $145 = ((($5)) + 16|0);
-    $146 = HEAP32[$145>>2]|0;
-    $147 = ($146|0)==(0|0);
-    do {
-     if (!($147)) {
-      $148 = ($146>>>0)<($142>>>0);
-      if ($148) {
-       _abort();
-       // unreachable;
-      } else {
-       $149 = ((($$3)) + 16|0);
-       HEAP32[$149>>2] = $146;
-       $150 = ((($146)) + 24|0);
-       HEAP32[$150>>2] = $$3;
-       break;
-      }
-     }
-    } while(0);
-    $151 = ((($145)) + 4|0);
-    $152 = HEAP32[$151>>2]|0;
-    $153 = ($152|0)==(0|0);
-    if (!($153)) {
-     $154 = HEAP32[(75284)>>2]|0;
-     $155 = ($152>>>0)<($154>>>0);
-     if ($155) {
-      _abort();
-      // unreachable;
-     } else {
-      $156 = ((($$3)) + 20|0);
-      HEAP32[$156>>2] = $152;
-      $157 = ((($152)) + 24|0);
-      HEAP32[$157>>2] = $$3;
-      break;
-     }
-    }
-   }
-  }
- } while(0);
- $158 = ($74>>>0)<(16);
- $159 = $3 & 1;
- if ($158) {
-  $160 = $72 | $159;
-  $161 = $160 | 2;
-  HEAP32[$2>>2] = $161;
-  $162 = (($0) + ($72)|0);
-  $163 = ((($162)) + 4|0);
-  $164 = HEAP32[$163>>2]|0;
-  $165 = $164 | 1;
-  HEAP32[$163>>2] = $165;
-  $$2 = $0;
-  return ($$2|0);
- } else {
-  $166 = (($0) + ($1)|0);
-  $167 = $159 | $1;
-  $168 = $167 | 2;
-  HEAP32[$2>>2] = $168;
-  $169 = ((($166)) + 4|0);
-  $170 = $74 | 3;
-  HEAP32[$169>>2] = $170;
-  $171 = (($166) + ($74)|0);
-  $172 = ((($171)) + 4|0);
-  $173 = HEAP32[$172>>2]|0;
-  $174 = $173 | 1;
-  HEAP32[$172>>2] = $174;
-  _dispose_chunk($166,$74);
-  $$2 = $0;
-  return ($$2|0);
- }
- return (0)|0;
-}
-function _dispose_chunk($0,$1) {
- $0 = $0|0;
- $1 = $1|0;
- var $$0419 = 0, $$0420 = 0, $$0431 = 0, $$0438 = 0, $$1 = 0, $$1418 = 0, $$1426 = 0, $$1429 = 0, $$1433 = 0, $$1437 = 0, $$2 = 0, $$3 = 0, $$3435 = 0, $$pre = 0, $$pre$phi24Z2D = 0, $$pre$phi26Z2D = 0, $$pre$phiZ2D = 0, $$pre23 = 0, $$pre25 = 0, $$sink2 = 0;
- var $$sink4 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0;
- var $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0;
- var $135 = 0, $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0, $152 = 0;
- var $153 = 0, $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0, $170 = 0;
- var $171 = 0, $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0, $188 = 0, $189 = 0;
- var $19 = 0, $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0, $197 = 0, $198 = 0, $199 = 0, $2 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0, $204 = 0, $205 = 0, $206 = 0;
- var $207 = 0, $208 = 0, $209 = 0, $21 = 0, $210 = 0, $211 = 0, $212 = 0, $213 = 0, $214 = 0, $215 = 0, $216 = 0, $217 = 0, $218 = 0, $219 = 0, $22 = 0, $220 = 0, $221 = 0, $222 = 0, $223 = 0, $224 = 0;
- var $225 = 0, $226 = 0, $227 = 0, $228 = 0, $229 = 0, $23 = 0, $230 = 0, $231 = 0, $232 = 0, $233 = 0, $234 = 0, $235 = 0, $236 = 0, $237 = 0, $238 = 0, $239 = 0, $24 = 0, $240 = 0, $241 = 0, $242 = 0;
- var $243 = 0, $244 = 0, $245 = 0, $246 = 0, $247 = 0, $248 = 0, $249 = 0, $25 = 0, $250 = 0, $251 = 0, $252 = 0, $253 = 0, $254 = 0, $255 = 0, $256 = 0, $257 = 0, $258 = 0, $259 = 0, $26 = 0, $260 = 0;
- var $261 = 0, $262 = 0, $263 = 0, $264 = 0, $265 = 0, $266 = 0, $267 = 0, $268 = 0, $269 = 0, $27 = 0, $270 = 0, $271 = 0, $272 = 0, $273 = 0, $274 = 0, $275 = 0, $276 = 0, $277 = 0, $278 = 0, $279 = 0;
- var $28 = 0, $280 = 0, $281 = 0, $282 = 0, $283 = 0, $284 = 0, $285 = 0, $286 = 0, $287 = 0, $288 = 0, $289 = 0, $29 = 0, $290 = 0, $291 = 0, $292 = 0, $293 = 0, $294 = 0, $295 = 0, $296 = 0, $297 = 0;
- var $298 = 0, $299 = 0, $3 = 0, $30 = 0, $300 = 0, $301 = 0, $302 = 0, $303 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0;
- var $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0;
- var $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0;
- var $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0;
- var $97 = 0, $98 = 0, $99 = 0, $cond = 0, $cond17 = 0, $not$ = 0, $not$1 = 0, $not$19 = 0, label = 0, sp = 0;
- sp = STACKTOP;
- $2 = (($0) + ($1)|0);
- $3 = ((($0)) + 4|0);
- $4 = HEAP32[$3>>2]|0;
- $5 = $4 & 1;
- $6 = ($5|0)==(0);
- L1: do {
-  if ($6) {
-   $7 = HEAP32[$0>>2]|0;
-   $8 = $4 & 3;
-   $9 = ($8|0)==(0);
-   if ($9) {
-    return;
-   }
-   $10 = (0 - ($7))|0;
-   $11 = (($0) + ($10)|0);
-   $12 = (($7) + ($1))|0;
-   $13 = HEAP32[(75284)>>2]|0;
-   $14 = ($11>>>0)<($13>>>0);
-   if ($14) {
-    _abort();
-    // unreachable;
-   }
-   $15 = HEAP32[(75288)>>2]|0;
-   $16 = ($11|0)==($15|0);
-   if ($16) {
-    $100 = ((($2)) + 4|0);
-    $101 = HEAP32[$100>>2]|0;
-    $102 = $101 & 3;
-    $103 = ($102|0)==(3);
-    if (!($103)) {
-     $$1 = $11;$$1418 = $12;
-     break;
-    }
-    $104 = (($11) + ($12)|0);
-    $105 = ((($11)) + 4|0);
-    $106 = $12 | 1;
-    $107 = $101 & -2;
-    HEAP32[(75276)>>2] = $12;
-    HEAP32[$100>>2] = $107;
-    HEAP32[$105>>2] = $106;
-    HEAP32[$104>>2] = $12;
-    return;
-   }
-   $17 = $7 >>> 3;
-   $18 = ($7>>>0)<(256);
-   if ($18) {
-    $19 = ((($11)) + 8|0);
-    $20 = HEAP32[$19>>2]|0;
-    $21 = ((($11)) + 12|0);
-    $22 = HEAP32[$21>>2]|0;
-    $23 = $17 << 1;
-    $24 = (75308 + ($23<<2)|0);
-    $25 = ($20|0)==($24|0);
-    if (!($25)) {
-     $26 = ($20>>>0)<($13>>>0);
-     if ($26) {
-      _abort();
-      // unreachable;
-     }
-     $27 = ((($20)) + 12|0);
-     $28 = HEAP32[$27>>2]|0;
-     $29 = ($28|0)==($11|0);
-     if (!($29)) {
-      _abort();
-      // unreachable;
-     }
-    }
-    $30 = ($22|0)==($20|0);
-    if ($30) {
-     $31 = 1 << $17;
-     $32 = $31 ^ -1;
-     $33 = HEAP32[18817]|0;
-     $34 = $33 & $32;
-     HEAP32[18817] = $34;
-     $$1 = $11;$$1418 = $12;
-     break;
-    }
-    $35 = ($22|0)==($24|0);
-    if ($35) {
-     $$pre25 = ((($22)) + 8|0);
-     $$pre$phi26Z2D = $$pre25;
-    } else {
-     $36 = ($22>>>0)<($13>>>0);
-     if ($36) {
-      _abort();
-      // unreachable;
-     }
-     $37 = ((($22)) + 8|0);
-     $38 = HEAP32[$37>>2]|0;
-     $39 = ($38|0)==($11|0);
-     if ($39) {
-      $$pre$phi26Z2D = $37;
-     } else {
-      _abort();
-      // unreachable;
-     }
-    }
-    $40 = ((($20)) + 12|0);
-    HEAP32[$40>>2] = $22;
-    HEAP32[$$pre$phi26Z2D>>2] = $20;
-    $$1 = $11;$$1418 = $12;
-    break;
-   }
-   $41 = ((($11)) + 24|0);
-   $42 = HEAP32[$41>>2]|0;
-   $43 = ((($11)) + 12|0);
-   $44 = HEAP32[$43>>2]|0;
-   $45 = ($44|0)==($11|0);
-   do {
-    if ($45) {
-     $55 = ((($11)) + 16|0);
-     $56 = ((($55)) + 4|0);
-     $57 = HEAP32[$56>>2]|0;
-     $58 = ($57|0)==(0|0);
-     if ($58) {
-      $59 = HEAP32[$55>>2]|0;
-      $60 = ($59|0)==(0|0);
-      if ($60) {
-       $$3 = 0;
-       break;
-      } else {
-       $$1426 = $59;$$1429 = $55;
-      }
-     } else {
-      $$1426 = $57;$$1429 = $56;
-     }
-     while(1) {
-      $61 = ((($$1426)) + 20|0);
-      $62 = HEAP32[$61>>2]|0;
-      $63 = ($62|0)==(0|0);
-      if (!($63)) {
-       $$1426 = $62;$$1429 = $61;
-       continue;
-      }
-      $64 = ((($$1426)) + 16|0);
-      $65 = HEAP32[$64>>2]|0;
-      $66 = ($65|0)==(0|0);
-      if ($66) {
-       break;
-      } else {
-       $$1426 = $65;$$1429 = $64;
-      }
-     }
-     $67 = ($$1429>>>0)<($13>>>0);
-     if ($67) {
-      _abort();
-      // unreachable;
-     } else {
-      HEAP32[$$1429>>2] = 0;
-      $$3 = $$1426;
-      break;
-     }
-    } else {
-     $46 = ((($11)) + 8|0);
-     $47 = HEAP32[$46>>2]|0;
-     $48 = ($47>>>0)<($13>>>0);
-     if ($48) {
-      _abort();
-      // unreachable;
-     }
-     $49 = ((($47)) + 12|0);
-     $50 = HEAP32[$49>>2]|0;
-     $51 = ($50|0)==($11|0);
-     if (!($51)) {
-      _abort();
-      // unreachable;
-     }
-     $52 = ((($44)) + 8|0);
-     $53 = HEAP32[$52>>2]|0;
-     $54 = ($53|0)==($11|0);
-     if ($54) {
-      HEAP32[$49>>2] = $44;
-      HEAP32[$52>>2] = $47;
-      $$3 = $44;
-      break;
-     } else {
-      _abort();
-      // unreachable;
-     }
-    }
-   } while(0);
-   $68 = ($42|0)==(0|0);
-   if ($68) {
-    $$1 = $11;$$1418 = $12;
-   } else {
-    $69 = ((($11)) + 28|0);
-    $70 = HEAP32[$69>>2]|0;
-    $71 = (75572 + ($70<<2)|0);
-    $72 = HEAP32[$71>>2]|0;
-    $73 = ($11|0)==($72|0);
-    do {
-     if ($73) {
-      HEAP32[$71>>2] = $$3;
-      $cond = ($$3|0)==(0|0);
-      if ($cond) {
-       $74 = 1 << $70;
-       $75 = $74 ^ -1;
-       $76 = HEAP32[(75272)>>2]|0;
-       $77 = $76 & $75;
-       HEAP32[(75272)>>2] = $77;
-       $$1 = $11;$$1418 = $12;
-       break L1;
-      }
-     } else {
-      $78 = HEAP32[(75284)>>2]|0;
-      $79 = ($42>>>0)<($78>>>0);
-      if ($79) {
-       _abort();
-       // unreachable;
-      } else {
-       $80 = ((($42)) + 16|0);
-       $81 = HEAP32[$80>>2]|0;
-       $not$1 = ($81|0)!=($11|0);
-       $$sink2 = $not$1&1;
-       $82 = (((($42)) + 16|0) + ($$sink2<<2)|0);
-       HEAP32[$82>>2] = $$3;
-       $83 = ($$3|0)==(0|0);
-       if ($83) {
-        $$1 = $11;$$1418 = $12;
-        break L1;
-       } else {
-        break;
-       }
-      }
-     }
-    } while(0);
-    $84 = HEAP32[(75284)>>2]|0;
-    $85 = ($$3>>>0)<($84>>>0);
-    if ($85) {
-     _abort();
-     // unreachable;
-    }
-    $86 = ((($$3)) + 24|0);
-    HEAP32[$86>>2] = $42;
-    $87 = ((($11)) + 16|0);
-    $88 = HEAP32[$87>>2]|0;
-    $89 = ($88|0)==(0|0);
-    do {
-     if (!($89)) {
-      $90 = ($88>>>0)<($84>>>0);
-      if ($90) {
-       _abort();
-       // unreachable;
-      } else {
-       $91 = ((($$3)) + 16|0);
-       HEAP32[$91>>2] = $88;
-       $92 = ((($88)) + 24|0);
-       HEAP32[$92>>2] = $$3;
-       break;
-      }
-     }
-    } while(0);
-    $93 = ((($87)) + 4|0);
-    $94 = HEAP32[$93>>2]|0;
-    $95 = ($94|0)==(0|0);
-    if ($95) {
-     $$1 = $11;$$1418 = $12;
-    } else {
-     $96 = HEAP32[(75284)>>2]|0;
-     $97 = ($94>>>0)<($96>>>0);
-     if ($97) {
-      _abort();
-      // unreachable;
-     } else {
-      $98 = ((($$3)) + 20|0);
-      HEAP32[$98>>2] = $94;
-      $99 = ((($94)) + 24|0);
-      HEAP32[$99>>2] = $$3;
-      $$1 = $11;$$1418 = $12;
-      break;
-     }
-    }
-   }
-  } else {
-   $$1 = $0;$$1418 = $1;
-  }
- } while(0);
- $108 = HEAP32[(75284)>>2]|0;
- $109 = ($2>>>0)<($108>>>0);
- if ($109) {
-  _abort();
-  // unreachable;
- }
- $110 = ((($2)) + 4|0);
- $111 = HEAP32[$110>>2]|0;
- $112 = $111 & 2;
- $113 = ($112|0)==(0);
- if ($113) {
-  $114 = HEAP32[(75292)>>2]|0;
-  $115 = ($2|0)==($114|0);
-  $116 = HEAP32[(75288)>>2]|0;
-  if ($115) {
-   $117 = HEAP32[(75280)>>2]|0;
-   $118 = (($117) + ($$1418))|0;
-   HEAP32[(75280)>>2] = $118;
-   HEAP32[(75292)>>2] = $$1;
-   $119 = $118 | 1;
-   $120 = ((($$1)) + 4|0);
-   HEAP32[$120>>2] = $119;
-   $121 = ($$1|0)==($116|0);
-   if (!($121)) {
-    return;
-   }
-   HEAP32[(75288)>>2] = 0;
-   HEAP32[(75276)>>2] = 0;
-   return;
-  }
-  $122 = ($2|0)==($116|0);
-  if ($122) {
-   $123 = HEAP32[(75276)>>2]|0;
-   $124 = (($123) + ($$1418))|0;
-   HEAP32[(75276)>>2] = $124;
-   HEAP32[(75288)>>2] = $$1;
-   $125 = $124 | 1;
-   $126 = ((($$1)) + 4|0);
-   HEAP32[$126>>2] = $125;
-   $127 = (($$1) + ($124)|0);
-   HEAP32[$127>>2] = $124;
-   return;
-  }
-  $128 = $111 & -8;
-  $129 = (($128) + ($$1418))|0;
-  $130 = $111 >>> 3;
-  $131 = ($111>>>0)<(256);
-  L96: do {
-   if ($131) {
-    $132 = ((($2)) + 8|0);
-    $133 = HEAP32[$132>>2]|0;
-    $134 = ((($2)) + 12|0);
-    $135 = HEAP32[$134>>2]|0;
-    $136 = $130 << 1;
-    $137 = (75308 + ($136<<2)|0);
-    $138 = ($133|0)==($137|0);
-    if (!($138)) {
-     $139 = ($133>>>0)<($108>>>0);
-     if ($139) {
-      _abort();
-      // unreachable;
-     }
-     $140 = ((($133)) + 12|0);
-     $141 = HEAP32[$140>>2]|0;
-     $142 = ($141|0)==($2|0);
-     if (!($142)) {
-      _abort();
-      // unreachable;
-     }
-    }
-    $143 = ($135|0)==($133|0);
-    if ($143) {
-     $144 = 1 << $130;
-     $145 = $144 ^ -1;
-     $146 = HEAP32[18817]|0;
-     $147 = $146 & $145;
-     HEAP32[18817] = $147;
-     break;
-    }
-    $148 = ($135|0)==($137|0);
-    if ($148) {
-     $$pre23 = ((($135)) + 8|0);
-     $$pre$phi24Z2D = $$pre23;
-    } else {
-     $149 = ($135>>>0)<($108>>>0);
-     if ($149) {
-      _abort();
-      // unreachable;
-     }
-     $150 = ((($135)) + 8|0);
-     $151 = HEAP32[$150>>2]|0;
-     $152 = ($151|0)==($2|0);
-     if ($152) {
-      $$pre$phi24Z2D = $150;
-     } else {
-      _abort();
-      // unreachable;
-     }
-    }
-    $153 = ((($133)) + 12|0);
-    HEAP32[$153>>2] = $135;
-    HEAP32[$$pre$phi24Z2D>>2] = $133;
-   } else {
-    $154 = ((($2)) + 24|0);
-    $155 = HEAP32[$154>>2]|0;
-    $156 = ((($2)) + 12|0);
-    $157 = HEAP32[$156>>2]|0;
-    $158 = ($157|0)==($2|0);
-    do {
-     if ($158) {
-      $168 = ((($2)) + 16|0);
-      $169 = ((($168)) + 4|0);
-      $170 = HEAP32[$169>>2]|0;
-      $171 = ($170|0)==(0|0);
-      if ($171) {
-       $172 = HEAP32[$168>>2]|0;
-       $173 = ($172|0)==(0|0);
-       if ($173) {
-        $$3435 = 0;
-        break;
-       } else {
-        $$1433 = $172;$$1437 = $168;
-       }
-      } else {
-       $$1433 = $170;$$1437 = $169;
-      }
-      while(1) {
-       $174 = ((($$1433)) + 20|0);
-       $175 = HEAP32[$174>>2]|0;
-       $176 = ($175|0)==(0|0);
-       if (!($176)) {
-        $$1433 = $175;$$1437 = $174;
-        continue;
-       }
-       $177 = ((($$1433)) + 16|0);
-       $178 = HEAP32[$177>>2]|0;
-       $179 = ($178|0)==(0|0);
-       if ($179) {
-        break;
-       } else {
-        $$1433 = $178;$$1437 = $177;
-       }
-      }
-      $180 = ($$1437>>>0)<($108>>>0);
-      if ($180) {
-       _abort();
-       // unreachable;
-      } else {
-       HEAP32[$$1437>>2] = 0;
-       $$3435 = $$1433;
-       break;
-      }
-     } else {
-      $159 = ((($2)) + 8|0);
-      $160 = HEAP32[$159>>2]|0;
-      $161 = ($160>>>0)<($108>>>0);
-      if ($161) {
-       _abort();
-       // unreachable;
-      }
-      $162 = ((($160)) + 12|0);
-      $163 = HEAP32[$162>>2]|0;
-      $164 = ($163|0)==($2|0);
-      if (!($164)) {
-       _abort();
-       // unreachable;
-      }
-      $165 = ((($157)) + 8|0);
-      $166 = HEAP32[$165>>2]|0;
-      $167 = ($166|0)==($2|0);
-      if ($167) {
-       HEAP32[$162>>2] = $157;
-       HEAP32[$165>>2] = $160;
-       $$3435 = $157;
-       break;
-      } else {
-       _abort();
-       // unreachable;
-      }
-     }
-    } while(0);
-    $181 = ($155|0)==(0|0);
-    if (!($181)) {
-     $182 = ((($2)) + 28|0);
-     $183 = HEAP32[$182>>2]|0;
-     $184 = (75572 + ($183<<2)|0);
-     $185 = HEAP32[$184>>2]|0;
-     $186 = ($2|0)==($185|0);
-     do {
-      if ($186) {
-       HEAP32[$184>>2] = $$3435;
-       $cond17 = ($$3435|0)==(0|0);
-       if ($cond17) {
-        $187 = 1 << $183;
-        $188 = $187 ^ -1;
-        $189 = HEAP32[(75272)>>2]|0;
-        $190 = $189 & $188;
-        HEAP32[(75272)>>2] = $190;
-        break L96;
-       }
-      } else {
-       $191 = HEAP32[(75284)>>2]|0;
-       $192 = ($155>>>0)<($191>>>0);
-       if ($192) {
-        _abort();
-        // unreachable;
-       } else {
-        $193 = ((($155)) + 16|0);
-        $194 = HEAP32[$193>>2]|0;
-        $not$ = ($194|0)!=($2|0);
-        $$sink4 = $not$&1;
-        $195 = (((($155)) + 16|0) + ($$sink4<<2)|0);
-        HEAP32[$195>>2] = $$3435;
-        $196 = ($$3435|0)==(0|0);
-        if ($196) {
-         break L96;
-        } else {
-         break;
-        }
-       }
-      }
-     } while(0);
-     $197 = HEAP32[(75284)>>2]|0;
-     $198 = ($$3435>>>0)<($197>>>0);
-     if ($198) {
-      _abort();
-      // unreachable;
-     }
-     $199 = ((($$3435)) + 24|0);
-     HEAP32[$199>>2] = $155;
-     $200 = ((($2)) + 16|0);
-     $201 = HEAP32[$200>>2]|0;
-     $202 = ($201|0)==(0|0);
-     do {
-      if (!($202)) {
-       $203 = ($201>>>0)<($197>>>0);
-       if ($203) {
-        _abort();
-        // unreachable;
-       } else {
-        $204 = ((($$3435)) + 16|0);
-        HEAP32[$204>>2] = $201;
-        $205 = ((($201)) + 24|0);
-        HEAP32[$205>>2] = $$3435;
-        break;
-       }
-      }
-     } while(0);
-     $206 = ((($200)) + 4|0);
-     $207 = HEAP32[$206>>2]|0;
-     $208 = ($207|0)==(0|0);
-     if (!($208)) {
-      $209 = HEAP32[(75284)>>2]|0;
-      $210 = ($207>>>0)<($209>>>0);
-      if ($210) {
-       _abort();
-       // unreachable;
-      } else {
-       $211 = ((($$3435)) + 20|0);
-       HEAP32[$211>>2] = $207;
-       $212 = ((($207)) + 24|0);
-       HEAP32[$212>>2] = $$3435;
-       break;
-      }
-     }
-    }
-   }
-  } while(0);
-  $213 = $129 | 1;
-  $214 = ((($$1)) + 4|0);
-  HEAP32[$214>>2] = $213;
-  $215 = (($$1) + ($129)|0);
-  HEAP32[$215>>2] = $129;
-  $216 = HEAP32[(75288)>>2]|0;
-  $217 = ($$1|0)==($216|0);
-  if ($217) {
-   HEAP32[(75276)>>2] = $129;
-   return;
-  } else {
-   $$2 = $129;
-  }
- } else {
-  $218 = $111 & -2;
-  HEAP32[$110>>2] = $218;
-  $219 = $$1418 | 1;
-  $220 = ((($$1)) + 4|0);
-  HEAP32[$220>>2] = $219;
-  $221 = (($$1) + ($$1418)|0);
-  HEAP32[$221>>2] = $$1418;
-  $$2 = $$1418;
- }
- $222 = $$2 >>> 3;
- $223 = ($$2>>>0)<(256);
- if ($223) {
-  $224 = $222 << 1;
-  $225 = (75308 + ($224<<2)|0);
-  $226 = HEAP32[18817]|0;
-  $227 = 1 << $222;
-  $228 = $226 & $227;
-  $229 = ($228|0)==(0);
-  if ($229) {
-   $230 = $226 | $227;
-   HEAP32[18817] = $230;
-   $$pre = ((($225)) + 8|0);
-   $$0438 = $225;$$pre$phiZ2D = $$pre;
-  } else {
-   $231 = ((($225)) + 8|0);
-   $232 = HEAP32[$231>>2]|0;
-   $233 = HEAP32[(75284)>>2]|0;
-   $234 = ($232>>>0)<($233>>>0);
-   if ($234) {
-    _abort();
-    // unreachable;
-   } else {
-    $$0438 = $232;$$pre$phiZ2D = $231;
-   }
-  }
-  HEAP32[$$pre$phiZ2D>>2] = $$1;
-  $235 = ((($$0438)) + 12|0);
-  HEAP32[$235>>2] = $$1;
-  $236 = ((($$1)) + 8|0);
-  HEAP32[$236>>2] = $$0438;
-  $237 = ((($$1)) + 12|0);
-  HEAP32[$237>>2] = $225;
-  return;
- }
- $238 = $$2 >>> 8;
- $239 = ($238|0)==(0);
- if ($239) {
-  $$0431 = 0;
- } else {
-  $240 = ($$2>>>0)>(16777215);
-  if ($240) {
-   $$0431 = 31;
-  } else {
-   $241 = (($238) + 1048320)|0;
-   $242 = $241 >>> 16;
-   $243 = $242 & 8;
-   $244 = $238 << $243;
-   $245 = (($244) + 520192)|0;
-   $246 = $245 >>> 16;
-   $247 = $246 & 4;
-   $248 = $247 | $243;
-   $249 = $244 << $247;
-   $250 = (($249) + 245760)|0;
-   $251 = $250 >>> 16;
-   $252 = $251 & 2;
-   $253 = $248 | $252;
-   $254 = (14 - ($253))|0;
-   $255 = $249 << $252;
-   $256 = $255 >>> 15;
-   $257 = (($254) + ($256))|0;
-   $258 = $257 << 1;
-   $259 = (($257) + 7)|0;
-   $260 = $$2 >>> $259;
-   $261 = $260 & 1;
-   $262 = $261 | $258;
-   $$0431 = $262;
-  }
- }
- $263 = (75572 + ($$0431<<2)|0);
- $264 = ((($$1)) + 28|0);
- HEAP32[$264>>2] = $$0431;
- $265 = ((($$1)) + 16|0);
- $266 = ((($$1)) + 20|0);
- HEAP32[$266>>2] = 0;
- HEAP32[$265>>2] = 0;
- $267 = HEAP32[(75272)>>2]|0;
- $268 = 1 << $$0431;
- $269 = $267 & $268;
- $270 = ($269|0)==(0);
- if ($270) {
-  $271 = $267 | $268;
-  HEAP32[(75272)>>2] = $271;
-  HEAP32[$263>>2] = $$1;
-  $272 = ((($$1)) + 24|0);
-  HEAP32[$272>>2] = $263;
-  $273 = ((($$1)) + 12|0);
-  HEAP32[$273>>2] = $$1;
-  $274 = ((($$1)) + 8|0);
-  HEAP32[$274>>2] = $$1;
-  return;
- }
- $275 = HEAP32[$263>>2]|0;
- $276 = ($$0431|0)==(31);
- $277 = $$0431 >>> 1;
- $278 = (25 - ($277))|0;
- $279 = $276 ? 0 : $278;
- $280 = $$2 << $279;
- $$0419 = $280;$$0420 = $275;
- while(1) {
-  $281 = ((($$0420)) + 4|0);
-  $282 = HEAP32[$281>>2]|0;
-  $283 = $282 & -8;
-  $284 = ($283|0)==($$2|0);
-  if ($284) {
-   label = 121;
-   break;
-  }
-  $285 = $$0419 >>> 31;
-  $286 = (((($$0420)) + 16|0) + ($285<<2)|0);
-  $287 = $$0419 << 1;
-  $288 = HEAP32[$286>>2]|0;
-  $289 = ($288|0)==(0|0);
-  if ($289) {
-   label = 118;
-   break;
-  } else {
-   $$0419 = $287;$$0420 = $288;
-  }
- }
- if ((label|0) == 118) {
-  $290 = HEAP32[(75284)>>2]|0;
-  $291 = ($286>>>0)<($290>>>0);
-  if ($291) {
-   _abort();
-   // unreachable;
-  }
-  HEAP32[$286>>2] = $$1;
-  $292 = ((($$1)) + 24|0);
-  HEAP32[$292>>2] = $$0420;
-  $293 = ((($$1)) + 12|0);
-  HEAP32[$293>>2] = $$1;
-  $294 = ((($$1)) + 8|0);
-  HEAP32[$294>>2] = $$1;
-  return;
- }
- else if ((label|0) == 121) {
-  $295 = ((($$0420)) + 8|0);
-  $296 = HEAP32[$295>>2]|0;
-  $297 = HEAP32[(75284)>>2]|0;
-  $298 = ($296>>>0)>=($297>>>0);
-  $not$19 = ($$0420>>>0)>=($297>>>0);
-  $299 = $298 & $not$19;
-  if (!($299)) {
-   _abort();
-   // unreachable;
-  }
-  $300 = ((($296)) + 12|0);
-  HEAP32[$300>>2] = $$1;
-  HEAP32[$295>>2] = $$1;
-  $301 = ((($$1)) + 8|0);
-  HEAP32[$301>>2] = $296;
-  $302 = ((($$1)) + 12|0);
-  HEAP32[$302>>2] = $$0420;
-  $303 = ((($$1)) + 24|0);
-  HEAP32[$303>>2] = 0;
-  return;
- }
-}
-function runPostSets() {
-}
-function _i64Subtract(a, b, c, d) {
-    a = a|0; b = b|0; c = c|0; d = d|0;
-    var l = 0, h = 0;
-    l = (a - c)>>>0;
-    h = (b - d)>>>0;
-    h = (b - d - (((c>>>0) > (a>>>0))|0))>>>0; // Borrow one from high word to low word on underflow.
-    return ((tempRet0 = h,l|0)|0);
-}
-function _i64Add(a, b, c, d) {
-    /*
-      x = a + b*2^32
-      y = c + d*2^32
-      result = l + h*2^32
-    */
-    a = a|0; b = b|0; c = c|0; d = d|0;
-    var l = 0, h = 0;
-    l = (a + c)>>>0;
-    h = (b + d + (((l>>>0) < (a>>>0))|0))>>>0; // Add carry from low word to high word on overflow.
-    return ((tempRet0 = h,l|0)|0);
-}
-function _memset(ptr, value, num) {
-    ptr = ptr|0; value = value|0; num = num|0;
-    var end = 0, aligned_end = 0, block_aligned_end = 0, value4 = 0;
-    end = (ptr + num)|0;
-
-    value = value & 0xff;
-    if ((num|0) >= 67 /* 64 bytes for an unrolled loop + 3 bytes for unaligned head*/) {
-      while ((ptr&3) != 0) {
-        HEAP8[((ptr)>>0)]=value;
-        ptr = (ptr+1)|0;
-      }
-
-      aligned_end = (end & -4)|0;
-      block_aligned_end = (aligned_end - 64)|0;
-      value4 = value | (value << 8) | (value << 16) | (value << 24);
-
-      while((ptr|0) <= (block_aligned_end|0)) {
-        HEAP32[((ptr)>>2)]=value4;
-        HEAP32[(((ptr)+(4))>>2)]=value4;
-        HEAP32[(((ptr)+(8))>>2)]=value4;
-        HEAP32[(((ptr)+(12))>>2)]=value4;
-        HEAP32[(((ptr)+(16))>>2)]=value4;
-        HEAP32[(((ptr)+(20))>>2)]=value4;
-        HEAP32[(((ptr)+(24))>>2)]=value4;
-        HEAP32[(((ptr)+(28))>>2)]=value4;
-        HEAP32[(((ptr)+(32))>>2)]=value4;
-        HEAP32[(((ptr)+(36))>>2)]=value4;
-        HEAP32[(((ptr)+(40))>>2)]=value4;
-        HEAP32[(((ptr)+(44))>>2)]=value4;
-        HEAP32[(((ptr)+(48))>>2)]=value4;
-        HEAP32[(((ptr)+(52))>>2)]=value4;
-        HEAP32[(((ptr)+(56))>>2)]=value4;
-        HEAP32[(((ptr)+(60))>>2)]=value4;
-        ptr = (ptr + 64)|0;
-      }
-
-      while ((ptr|0) < (aligned_end|0) ) {
-        HEAP32[((ptr)>>2)]=value4;
-        ptr = (ptr+4)|0;
-      }
-    }
-    // The remaining bytes.
-    while ((ptr|0) < (end|0)) {
-      HEAP8[((ptr)>>0)]=value;
-      ptr = (ptr+1)|0;
-    }
-    return (end-num)|0;
-}
-function _bitshift64Lshr(low, high, bits) {
-    low = low|0; high = high|0; bits = bits|0;
-    var ander = 0;
-    if ((bits|0) < 32) {
-      ander = ((1 << bits) - 1)|0;
-      tempRet0 = high >>> bits;
-      return (low >>> bits) | ((high&ander) << (32 - bits));
-    }
-    tempRet0 = 0;
-    return (high >>> (bits - 32))|0;
-}
-function _saveSetjmp(env, label, table, size) {
-    // Not particularly fast: slow table lookup of setjmpId to label. But setjmp
-    // prevents relooping anyhow, so slowness is to be expected. And typical case
-    // is 1 setjmp per invocation, or less.
-    env = env|0;
-    label = label|0;
-    table = table|0;
-    size = size|0;
-    var i = 0;
-    setjmpId = (setjmpId+1)|0;
-    HEAP32[((env)>>2)]=setjmpId;
-    while ((i|0) < (size|0)) {
-      if (((HEAP32[(((table)+((i<<3)))>>2)])|0) == 0) {
-        HEAP32[(((table)+((i<<3)))>>2)]=setjmpId;
-        HEAP32[(((table)+((i<<3)+4))>>2)]=label;
-        // prepare next slot
-        HEAP32[(((table)+((i<<3)+8))>>2)]=0;
-        tempRet0 = size;
-        return table | 0;
-      }
-      i = i+1|0;
-    }
-    // grow the table
-    size = (size*2)|0;
-    table = _realloc(table|0, 8*(size+1|0)|0) | 0;
-    table = _saveSetjmp(env|0, label|0, table|0, size|0) | 0;
-    tempRet0 = size;
-    return table | 0;
-}
-function _testSetjmp(id, table, size) {
-    id = id|0;
-    table = table|0;
-    size = size|0;
-    var i = 0, curr = 0;
-    while ((i|0) < (size|0)) {
-      curr = ((HEAP32[(((table)+((i<<3)))>>2)])|0);
-      if ((curr|0) == 0) break;
-      if ((curr|0) == (id|0)) {
-        return ((HEAP32[(((table)+((i<<3)+4))>>2)])|0);
-      }
-      i = i+1|0;
-    }
-    return 0;
-}
-function _bitshift64Shl(low, high, bits) {
-    low = low|0; high = high|0; bits = bits|0;
-    var ander = 0;
-    if ((bits|0) < 32) {
-      ander = ((1 << bits) - 1)|0;
-      tempRet0 = (high << bits) | ((low&(ander << (32 - bits))) >>> (32 - bits));
-      return low << bits;
-    }
-    tempRet0 = low << (bits - 32);
-    return 0;
-}
-function _llvm_bswap_i32(x) {
-    x = x|0;
-    return (((x&0xff)<<24) | (((x>>8)&0xff)<<16) | (((x>>16)&0xff)<<8) | (x>>>24))|0;
-}
-function _llvm_cttz_i32(x) {
-    x = x|0;
-    var ret = 0;
-    ret = ((HEAP8[(((cttz_i8)+(x & 0xff))>>0)])|0);
-    if ((ret|0) < 8) return ret|0;
-    ret = ((HEAP8[(((cttz_i8)+((x >> 8)&0xff))>>0)])|0);
-    if ((ret|0) < 8) return (ret + 8)|0;
-    ret = ((HEAP8[(((cttz_i8)+((x >> 16)&0xff))>>0)])|0);
-    if ((ret|0) < 8) return (ret + 16)|0;
-    return (((HEAP8[(((cttz_i8)+(x >>> 24))>>0)])|0) + 24)|0;
-}
-function ___udivmoddi4($a$0, $a$1, $b$0, $b$1, $rem) {
-    $a$0 = $a$0 | 0;
-    $a$1 = $a$1 | 0;
-    $b$0 = $b$0 | 0;
-    $b$1 = $b$1 | 0;
-    $rem = $rem | 0;
-    var $n_sroa_0_0_extract_trunc = 0, $n_sroa_1_4_extract_shift$0 = 0, $n_sroa_1_4_extract_trunc = 0, $d_sroa_0_0_extract_trunc = 0, $d_sroa_1_4_extract_shift$0 = 0, $d_sroa_1_4_extract_trunc = 0, $4 = 0, $17 = 0, $37 = 0, $49 = 0, $51 = 0, $57 = 0, $58 = 0, $66 = 0, $78 = 0, $86 = 0, $88 = 0, $89 = 0, $91 = 0, $92 = 0, $95 = 0, $105 = 0, $117 = 0, $119 = 0, $125 = 0, $126 = 0, $130 = 0, $q_sroa_1_1_ph = 0, $q_sroa_0_1_ph = 0, $r_sroa_1_1_ph = 0, $r_sroa_0_1_ph = 0, $sr_1_ph = 0, $d_sroa_0_0_insert_insert99$0 = 0, $d_sroa_0_0_insert_insert99$1 = 0, $137$0 = 0, $137$1 = 0, $carry_0203 = 0, $sr_1202 = 0, $r_sroa_0_1201 = 0, $r_sroa_1_1200 = 0, $q_sroa_0_1199 = 0, $q_sroa_1_1198 = 0, $147 = 0, $149 = 0, $r_sroa_0_0_insert_insert42$0 = 0, $r_sroa_0_0_insert_insert42$1 = 0, $150$1 = 0, $151$0 = 0, $152 = 0, $154$0 = 0, $r_sroa_0_0_extract_trunc = 0, $r_sroa_1_4_extract_trunc = 0, $155 = 0, $carry_0_lcssa$0 = 0, $carry_0_lcssa$1 = 0, $r_sroa_0_1_lcssa = 0, $r_sroa_1_1_lcssa = 0, $q_sroa_0_1_lcssa = 0, $q_sroa_1_1_lcssa = 0, $q_sroa_0_0_insert_ext75$0 = 0, $q_sroa_0_0_insert_ext75$1 = 0, $q_sroa_0_0_insert_insert77$1 = 0, $_0$0 = 0, $_0$1 = 0;
-    $n_sroa_0_0_extract_trunc = $a$0;
-    $n_sroa_1_4_extract_shift$0 = $a$1;
-    $n_sroa_1_4_extract_trunc = $n_sroa_1_4_extract_shift$0;
-    $d_sroa_0_0_extract_trunc = $b$0;
-    $d_sroa_1_4_extract_shift$0 = $b$1;
-    $d_sroa_1_4_extract_trunc = $d_sroa_1_4_extract_shift$0;
-    if (($n_sroa_1_4_extract_trunc | 0) == 0) {
-      $4 = ($rem | 0) != 0;
-      if (($d_sroa_1_4_extract_trunc | 0) == 0) {
-        if ($4) {
-          HEAP32[$rem >> 2] = ($n_sroa_0_0_extract_trunc >>> 0) % ($d_sroa_0_0_extract_trunc >>> 0);
-          HEAP32[$rem + 4 >> 2] = 0;
-        }
-        $_0$1 = 0;
-        $_0$0 = ($n_sroa_0_0_extract_trunc >>> 0) / ($d_sroa_0_0_extract_trunc >>> 0) >>> 0;
-        return (tempRet0 = $_0$1, $_0$0) | 0;
-      } else {
-        if (!$4) {
-          $_0$1 = 0;
-          $_0$0 = 0;
-          return (tempRet0 = $_0$1, $_0$0) | 0;
-        }
-        HEAP32[$rem >> 2] = $a$0 & -1;
-        HEAP32[$rem + 4 >> 2] = $a$1 & 0;
-        $_0$1 = 0;
-        $_0$0 = 0;
-        return (tempRet0 = $_0$1, $_0$0) | 0;
-      }
-    }
-    $17 = ($d_sroa_1_4_extract_trunc | 0) == 0;
-    do {
-      if (($d_sroa_0_0_extract_trunc | 0) == 0) {
-        if ($17) {
-          if (($rem | 0) != 0) {
-            HEAP32[$rem >> 2] = ($n_sroa_1_4_extract_trunc >>> 0) % ($d_sroa_0_0_extract_trunc >>> 0);
-            HEAP32[$rem + 4 >> 2] = 0;
-          }
-          $_0$1 = 0;
-          $_0$0 = ($n_sroa_1_4_extract_trunc >>> 0) / ($d_sroa_0_0_extract_trunc >>> 0) >>> 0;
-          return (tempRet0 = $_0$1, $_0$0) | 0;
-        }
-        if (($n_sroa_0_0_extract_trunc | 0) == 0) {
-          if (($rem | 0) != 0) {
-            HEAP32[$rem >> 2] = 0;
-            HEAP32[$rem + 4 >> 2] = ($n_sroa_1_4_extract_trunc >>> 0) % ($d_sroa_1_4_extract_trunc >>> 0);
-          }
-          $_0$1 = 0;
-          $_0$0 = ($n_sroa_1_4_extract_trunc >>> 0) / ($d_sroa_1_4_extract_trunc >>> 0) >>> 0;
-          return (tempRet0 = $_0$1, $_0$0) | 0;
-        }
-        $37 = $d_sroa_1_4_extract_trunc - 1 | 0;
-        if (($37 & $d_sroa_1_4_extract_trunc | 0) == 0) {
-          if (($rem | 0) != 0) {
-            HEAP32[$rem >> 2] = 0 | $a$0 & -1;
-            HEAP32[$rem + 4 >> 2] = $37 & $n_sroa_1_4_extract_trunc | $a$1 & 0;
-          }
-          $_0$1 = 0;
-          $_0$0 = $n_sroa_1_4_extract_trunc >>> ((_llvm_cttz_i32($d_sroa_1_4_extract_trunc | 0) | 0) >>> 0);
-          return (tempRet0 = $_0$1, $_0$0) | 0;
-        }
-        $49 = Math_clz32($d_sroa_1_4_extract_trunc | 0) | 0;
-        $51 = $49 - (Math_clz32($n_sroa_1_4_extract_trunc | 0) | 0) | 0;
-        if ($51 >>> 0 <= 30) {
-          $57 = $51 + 1 | 0;
-          $58 = 31 - $51 | 0;
-          $sr_1_ph = $57;
-          $r_sroa_0_1_ph = $n_sroa_1_4_extract_trunc << $58 | $n_sroa_0_0_extract_trunc >>> ($57 >>> 0);
-          $r_sroa_1_1_ph = $n_sroa_1_4_extract_trunc >>> ($57 >>> 0);
-          $q_sroa_0_1_ph = 0;
-          $q_sroa_1_1_ph = $n_sroa_0_0_extract_trunc << $58;
-          break;
-        }
-        if (($rem | 0) == 0) {
-          $_0$1 = 0;
-          $_0$0 = 0;
-          return (tempRet0 = $_0$1, $_0$0) | 0;
-        }
-        HEAP32[$rem >> 2] = 0 | $a$0 & -1;
-        HEAP32[$rem + 4 >> 2] = $n_sroa_1_4_extract_shift$0 | $a$1 & 0;
-        $_0$1 = 0;
-        $_0$0 = 0;
-        return (tempRet0 = $_0$1, $_0$0) | 0;
-      } else {
-        if (!$17) {
-          $117 = Math_clz32($d_sroa_1_4_extract_trunc | 0) | 0;
-          $119 = $117 - (Math_clz32($n_sroa_1_4_extract_trunc | 0) | 0) | 0;
-          if ($119 >>> 0 <= 31) {
-            $125 = $119 + 1 | 0;
-            $126 = 31 - $119 | 0;
-            $130 = $119 - 31 >> 31;
-            $sr_1_ph = $125;
-            $r_sroa_0_1_ph = $n_sroa_0_0_extract_trunc >>> ($125 >>> 0) & $130 | $n_sroa_1_4_extract_trunc << $126;
-            $r_sroa_1_1_ph = $n_sroa_1_4_extract_trunc >>> ($125 >>> 0) & $130;
-            $q_sroa_0_1_ph = 0;
-            $q_sroa_1_1_ph = $n_sroa_0_0_extract_trunc << $126;
-            break;
-          }
-          if (($rem | 0) == 0) {
-            $_0$1 = 0;
-            $_0$0 = 0;
-            return (tempRet0 = $_0$1, $_0$0) | 0;
-          }
-          HEAP32[$rem >> 2] = 0 | $a$0 & -1;
-          HEAP32[$rem + 4 >> 2] = $n_sroa_1_4_extract_shift$0 | $a$1 & 0;
-          $_0$1 = 0;
-          $_0$0 = 0;
-          return (tempRet0 = $_0$1, $_0$0) | 0;
-        }
-        $66 = $d_sroa_0_0_extract_trunc - 1 | 0;
-        if (($66 & $d_sroa_0_0_extract_trunc | 0) != 0) {
-          $86 = (Math_clz32($d_sroa_0_0_extract_trunc | 0) | 0) + 33 | 0;
-          $88 = $86 - (Math_clz32($n_sroa_1_4_extract_trunc | 0) | 0) | 0;
-          $89 = 64 - $88 | 0;
-          $91 = 32 - $88 | 0;
-          $92 = $91 >> 31;
-          $95 = $88 - 32 | 0;
-          $105 = $95 >> 31;
-          $sr_1_ph = $88;
-          $r_sroa_0_1_ph = $91 - 1 >> 31 & $n_sroa_1_4_extract_trunc >>> ($95 >>> 0) | ($n_sroa_1_4_extract_trunc << $91 | $n_sroa_0_0_extract_trunc >>> ($88 >>> 0)) & $105;
-          $r_sroa_1_1_ph = $105 & $n_sroa_1_4_extract_trunc >>> ($88 >>> 0);
-          $q_sroa_0_1_ph = $n_sroa_0_0_extract_trunc << $89 & $92;
-          $q_sroa_1_1_ph = ($n_sroa_1_4_extract_trunc << $89 | $n_sroa_0_0_extract_trunc >>> ($95 >>> 0)) & $92 | $n_sroa_0_0_extract_trunc << $91 & $88 - 33 >> 31;
-          break;
-        }
-        if (($rem | 0) != 0) {
-          HEAP32[$rem >> 2] = $66 & $n_sroa_0_0_extract_trunc;
-          HEAP32[$rem + 4 >> 2] = 0;
-        }
-        if (($d_sroa_0_0_extract_trunc | 0) == 1) {
-          $_0$1 = $n_sroa_1_4_extract_shift$0 | $a$1 & 0;
-          $_0$0 = 0 | $a$0 & -1;
-          return (tempRet0 = $_0$1, $_0$0) | 0;
-        } else {
-          $78 = _llvm_cttz_i32($d_sroa_0_0_extract_trunc | 0) | 0;
-          $_0$1 = 0 | $n_sroa_1_4_extract_trunc >>> ($78 >>> 0);
-          $_0$0 = $n_sroa_1_4_extract_trunc << 32 - $78 | $n_sroa_0_0_extract_trunc >>> ($78 >>> 0) | 0;
-          return (tempRet0 = $_0$1, $_0$0) | 0;
-        }
-      }
-    } while (0);
-    if (($sr_1_ph | 0) == 0) {
-      $q_sroa_1_1_lcssa = $q_sroa_1_1_ph;
-      $q_sroa_0_1_lcssa = $q_sroa_0_1_ph;
-      $r_sroa_1_1_lcssa = $r_sroa_1_1_ph;
-      $r_sroa_0_1_lcssa = $r_sroa_0_1_ph;
-      $carry_0_lcssa$1 = 0;
-      $carry_0_lcssa$0 = 0;
-    } else {
-      $d_sroa_0_0_insert_insert99$0 = 0 | $b$0 & -1;
-      $d_sroa_0_0_insert_insert99$1 = $d_sroa_1_4_extract_shift$0 | $b$1 & 0;
-      $137$0 = _i64Add($d_sroa_0_0_insert_insert99$0 | 0, $d_sroa_0_0_insert_insert99$1 | 0, -1, -1) | 0;
-      $137$1 = tempRet0;
-      $q_sroa_1_1198 = $q_sroa_1_1_ph;
-      $q_sroa_0_1199 = $q_sroa_0_1_ph;
-      $r_sroa_1_1200 = $r_sroa_1_1_ph;
-      $r_sroa_0_1201 = $r_sroa_0_1_ph;
-      $sr_1202 = $sr_1_ph;
-      $carry_0203 = 0;
-      while (1) {
-        $147 = $q_sroa_0_1199 >>> 31 | $q_sroa_1_1198 << 1;
-        $149 = $carry_0203 | $q_sroa_0_1199 << 1;
-        $r_sroa_0_0_insert_insert42$0 = 0 | ($r_sroa_0_1201 << 1 | $q_sroa_1_1198 >>> 31);
-        $r_sroa_0_0_insert_insert42$1 = $r_sroa_0_1201 >>> 31 | $r_sroa_1_1200 << 1 | 0;
-        _i64Subtract($137$0 | 0, $137$1 | 0, $r_sroa_0_0_insert_insert42$0 | 0, $r_sroa_0_0_insert_insert42$1 | 0) | 0;
-        $150$1 = tempRet0;
-        $151$0 = $150$1 >> 31 | (($150$1 | 0) < 0 ? -1 : 0) << 1;
-        $152 = $151$0 & 1;
-        $154$0 = _i64Subtract($r_sroa_0_0_insert_insert42$0 | 0, $r_sroa_0_0_insert_insert42$1 | 0, $151$0 & $d_sroa_0_0_insert_insert99$0 | 0, ((($150$1 | 0) < 0 ? -1 : 0) >> 31 | (($150$1 | 0) < 0 ? -1 : 0) << 1) & $d_sroa_0_0_insert_insert99$1 | 0) | 0;
-        $r_sroa_0_0_extract_trunc = $154$0;
-        $r_sroa_1_4_extract_trunc = tempRet0;
-        $155 = $sr_1202 - 1 | 0;
-        if (($155 | 0) == 0) {
-          break;
-        } else {
-          $q_sroa_1_1198 = $147;
-          $q_sroa_0_1199 = $149;
-          $r_sroa_1_1200 = $r_sroa_1_4_extract_trunc;
-          $r_sroa_0_1201 = $r_sroa_0_0_extract_trunc;
-          $sr_1202 = $155;
-          $carry_0203 = $152;
-        }
-      }
-      $q_sroa_1_1_lcssa = $147;
-      $q_sroa_0_1_lcssa = $149;
-      $r_sroa_1_1_lcssa = $r_sroa_1_4_extract_trunc;
-      $r_sroa_0_1_lcssa = $r_sroa_0_0_extract_trunc;
-      $carry_0_lcssa$1 = 0;
-      $carry_0_lcssa$0 = $152;
-    }
-    $q_sroa_0_0_insert_ext75$0 = $q_sroa_0_1_lcssa;
-    $q_sroa_0_0_insert_ext75$1 = 0;
-    $q_sroa_0_0_insert_insert77$1 = $q_sroa_1_1_lcssa | $q_sroa_0_0_insert_ext75$1;
-    if (($rem | 0) != 0) {
-      HEAP32[$rem >> 2] = 0 | $r_sroa_0_1_lcssa;
-      HEAP32[$rem + 4 >> 2] = $r_sroa_1_1_lcssa | 0;
-    }
-    $_0$1 = (0 | $q_sroa_0_0_insert_ext75$0) >>> 31 | $q_sroa_0_0_insert_insert77$1 << 1 | ($q_sroa_0_0_insert_ext75$1 << 1 | $q_sroa_0_0_insert_ext75$0 >>> 31) & 0 | $carry_0_lcssa$1;
-    $_0$0 = ($q_sroa_0_0_insert_ext75$0 << 1 | 0 >>> 31) & -2 | $carry_0_lcssa$0;
-    return (tempRet0 = $_0$1, $_0$0) | 0;
-}
-function ___udivdi3($a$0, $a$1, $b$0, $b$1) {
-    $a$0 = $a$0 | 0;
-    $a$1 = $a$1 | 0;
-    $b$0 = $b$0 | 0;
-    $b$1 = $b$1 | 0;
-    var $1$0 = 0;
-    $1$0 = ___udivmoddi4($a$0, $a$1, $b$0, $b$1, 0) | 0;
-    return $1$0 | 0;
-}
-function ___muldsi3($a, $b) {
-    $a = $a | 0;
-    $b = $b | 0;
-    var $1 = 0, $2 = 0, $3 = 0, $6 = 0, $8 = 0, $11 = 0, $12 = 0;
-    $1 = $a & 65535;
-    $2 = $b & 65535;
-    $3 = Math_imul($2, $1) | 0;
-    $6 = $a >>> 16;
-    $8 = ($3 >>> 16) + (Math_imul($2, $6) | 0) | 0;
-    $11 = $b >>> 16;
-    $12 = Math_imul($11, $1) | 0;
-    return (tempRet0 = (($8 >>> 16) + (Math_imul($11, $6) | 0) | 0) + ((($8 & 65535) + $12 | 0) >>> 16) | 0, 0 | ($8 + $12 << 16 | $3 & 65535)) | 0;
-}
-function ___muldi3($a$0, $a$1, $b$0, $b$1) {
-    $a$0 = $a$0 | 0;
-    $a$1 = $a$1 | 0;
-    $b$0 = $b$0 | 0;
-    $b$1 = $b$1 | 0;
-    var $x_sroa_0_0_extract_trunc = 0, $y_sroa_0_0_extract_trunc = 0, $1$0 = 0, $1$1 = 0, $2 = 0;
-    $x_sroa_0_0_extract_trunc = $a$0;
-    $y_sroa_0_0_extract_trunc = $b$0;
-    $1$0 = ___muldsi3($x_sroa_0_0_extract_trunc, $y_sroa_0_0_extract_trunc) | 0;
-    $1$1 = tempRet0;
-    $2 = Math_imul($a$1, $y_sroa_0_0_extract_trunc) | 0;
-    return (tempRet0 = ((Math_imul($b$1, $x_sroa_0_0_extract_trunc) | 0) + $2 | 0) + $1$1 | $1$1 & 0, 0 | $1$0 & -1) | 0;
-}
-function _sbrk(increment) {
-    increment = increment|0;
-    var oldDynamicTop = 0;
-    var oldDynamicTopOnChange = 0;
-    var newDynamicTop = 0;
-    var totalMemory = 0;
-    increment = ((increment + 15) & -16)|0;
-    oldDynamicTop = HEAP32[DYNAMICTOP_PTR>>2]|0;
-    newDynamicTop = oldDynamicTop + increment | 0;
-
-    if (((increment|0) > 0 & (newDynamicTop|0) < (oldDynamicTop|0)) // Detect and fail if we would wrap around signed 32-bit int.
-      | (newDynamicTop|0) < 0) { // Also underflow, sbrk() should be able to be used to subtract.
-      abortOnCannotGrowMemory()|0;
-      ___setErrNo(12);
-      return -1;
-    }
-
-    HEAP32[DYNAMICTOP_PTR>>2] = newDynamicTop;
-    totalMemory = getTotalMemory()|0;
-    if ((newDynamicTop|0) > (totalMemory|0)) {
-      if ((enlargeMemory()|0) == 0) {
-        ___setErrNo(12);
-        HEAP32[DYNAMICTOP_PTR>>2] = oldDynamicTop;
-        return -1;
-      }
-    }
-    return oldDynamicTop|0;
-}
-function _memcpy(dest, src, num) {
-    dest = dest|0; src = src|0; num = num|0;
-    var ret = 0;
-    var aligned_dest_end = 0;
-    var block_aligned_dest_end = 0;
-    var dest_end = 0;
-    // Test against a benchmarked cutoff limit for when HEAPU8.set() becomes faster to use.
-    if ((num|0) >=
-      8192
-    ) {
-      return _emscripten_memcpy_big(dest|0, src|0, num|0)|0;
-    }
-
-    ret = dest|0;
-    dest_end = (dest + num)|0;
-    if ((dest&3) == (src&3)) {
-      // The initial unaligned < 4-byte front.
-      while (dest & 3) {
-        if ((num|0) == 0) return ret|0;
-        HEAP8[((dest)>>0)]=((HEAP8[((src)>>0)])|0);
-        dest = (dest+1)|0;
-        src = (src+1)|0;
-        num = (num-1)|0;
-      }
-      aligned_dest_end = (dest_end & -4)|0;
-      block_aligned_dest_end = (aligned_dest_end - 64)|0;
-      while ((dest|0) <= (block_aligned_dest_end|0) ) {
-        HEAP32[((dest)>>2)]=((HEAP32[((src)>>2)])|0);
-        HEAP32[(((dest)+(4))>>2)]=((HEAP32[(((src)+(4))>>2)])|0);
-        HEAP32[(((dest)+(8))>>2)]=((HEAP32[(((src)+(8))>>2)])|0);
-        HEAP32[(((dest)+(12))>>2)]=((HEAP32[(((src)+(12))>>2)])|0);
-        HEAP32[(((dest)+(16))>>2)]=((HEAP32[(((src)+(16))>>2)])|0);
-        HEAP32[(((dest)+(20))>>2)]=((HEAP32[(((src)+(20))>>2)])|0);
-        HEAP32[(((dest)+(24))>>2)]=((HEAP32[(((src)+(24))>>2)])|0);
-        HEAP32[(((dest)+(28))>>2)]=((HEAP32[(((src)+(28))>>2)])|0);
-        HEAP32[(((dest)+(32))>>2)]=((HEAP32[(((src)+(32))>>2)])|0);
-        HEAP32[(((dest)+(36))>>2)]=((HEAP32[(((src)+(36))>>2)])|0);
-        HEAP32[(((dest)+(40))>>2)]=((HEAP32[(((src)+(40))>>2)])|0);
-        HEAP32[(((dest)+(44))>>2)]=((HEAP32[(((src)+(44))>>2)])|0);
-        HEAP32[(((dest)+(48))>>2)]=((HEAP32[(((src)+(48))>>2)])|0);
-        HEAP32[(((dest)+(52))>>2)]=((HEAP32[(((src)+(52))>>2)])|0);
-        HEAP32[(((dest)+(56))>>2)]=((HEAP32[(((src)+(56))>>2)])|0);
-        HEAP32[(((dest)+(60))>>2)]=((HEAP32[(((src)+(60))>>2)])|0);
-        dest = (dest+64)|0;
-        src = (src+64)|0;
-      }
-      while ((dest|0) < (aligned_dest_end|0) ) {
-        HEAP32[((dest)>>2)]=((HEAP32[((src)>>2)])|0);
-        dest = (dest+4)|0;
-        src = (src+4)|0;
-      }
-    } else {
-      // In the unaligned copy case, unroll a bit as well.
-      aligned_dest_end = (dest_end - 4)|0;
-      while ((dest|0) < (aligned_dest_end|0) ) {
-        HEAP8[((dest)>>0)]=((HEAP8[((src)>>0)])|0);
-        HEAP8[(((dest)+(1))>>0)]=((HEAP8[(((src)+(1))>>0)])|0);
-        HEAP8[(((dest)+(2))>>0)]=((HEAP8[(((src)+(2))>>0)])|0);
-        HEAP8[(((dest)+(3))>>0)]=((HEAP8[(((src)+(3))>>0)])|0);
-        dest = (dest+4)|0;
-        src = (src+4)|0;
-      }
-    }
-    // The remaining unaligned < 4 byte tail.
-    while ((dest|0) < (dest_end|0)) {
-      HEAP8[((dest)>>0)]=((HEAP8[((src)>>0)])|0);
-      dest = (dest+1)|0;
-      src = (src+1)|0;
-    }
-    return ret|0;
-}
-function _memmove(dest, src, num) {
-    dest = dest|0; src = src|0; num = num|0;
-    var ret = 0;
-    if (((src|0) < (dest|0)) & ((dest|0) < ((src + num)|0))) {
-      // Unlikely case: Copy backwards in a safe manner
-      ret = dest;
-      src = (src + num)|0;
-      dest = (dest + num)|0;
-      while ((num|0) > 0) {
-        dest = (dest - 1)|0;
-        src = (src - 1)|0;
-        num = (num - 1)|0;
-        HEAP8[((dest)>>0)]=((HEAP8[((src)>>0)])|0);
-      }
-      dest = ret;
-    } else {
-      _memcpy(dest, src, num) | 0;
-    }
-    return dest | 0;
-}
-function ___uremdi3($a$0, $a$1, $b$0, $b$1) {
-    $a$0 = $a$0 | 0;
-    $a$1 = $a$1 | 0;
-    $b$0 = $b$0 | 0;
-    $b$1 = $b$1 | 0;
-    var $rem = 0, __stackBase__ = 0;
-    __stackBase__ = STACKTOP;
-    STACKTOP = STACKTOP + 16 | 0;
-    $rem = __stackBase__ | 0;
-    ___udivmoddi4($a$0, $a$1, $b$0, $b$1, $rem) | 0;
-    STACKTOP = __stackBase__;
-    return (tempRet0 = HEAP32[$rem + 4 >> 2] | 0, HEAP32[$rem >> 2] | 0) | 0;
-}
-
-  
-function dynCall_iiii(index,a1,a2,a3) {
-  index = index|0;
-  a1=a1|0; a2=a2|0; a3=a3|0;
-  return FUNCTION_TABLE_iiii[index&511](a1|0,a2|0,a3|0)|0;
-}
-
-
-function dynCall_viiiiiii(index,a1,a2,a3,a4,a5,a6,a7) {
-  index = index|0;
-  a1=a1|0; a2=a2|0; a3=a3|0; a4=a4|0; a5=a5|0; a6=a6|0; a7=a7|0;
-  FUNCTION_TABLE_viiiiiii[index&255](a1|0,a2|0,a3|0,a4|0,a5|0,a6|0,a7|0);
-}
-
-
-function dynCall_viiiii(index,a1,a2,a3,a4,a5) {
-  index = index|0;
-  a1=a1|0; a2=a2|0; a3=a3|0; a4=a4|0; a5=a5|0;
-  FUNCTION_TABLE_viiiii[index&255](a1|0,a2|0,a3|0,a4|0,a5|0);
-}
-
-
-function dynCall_vi(index,a1) {
-  index = index|0;
-  a1=a1|0;
-  FUNCTION_TABLE_vi[index&511](a1|0);
-}
-
-
-function dynCall_vii(index,a1,a2) {
-  index = index|0;
-  a1=a1|0; a2=a2|0;
-  FUNCTION_TABLE_vii[index&511](a1|0,a2|0);
-}
-
-
-function dynCall_ii(index,a1) {
-  index = index|0;
-  a1=a1|0;
-  return FUNCTION_TABLE_ii[index&255](a1|0)|0;
-}
-
-
-function dynCall_viii(index,a1,a2,a3) {
-  index = index|0;
-  a1=a1|0; a2=a2|0; a3=a3|0;
-  FUNCTION_TABLE_viii[index&511](a1|0,a2|0,a3|0);
-}
-
-
-function dynCall_iiiii(index,a1,a2,a3,a4) {
-  index = index|0;
-  a1=a1|0; a2=a2|0; a3=a3|0; a4=a4|0;
-  return FUNCTION_TABLE_iiiii[index&255](a1|0,a2|0,a3|0,a4|0)|0;
-}
-
-
-function dynCall_viiiiii(index,a1,a2,a3,a4,a5,a6) {
-  index = index|0;
-  a1=a1|0; a2=a2|0; a3=a3|0; a4=a4|0; a5=a5|0; a6=a6|0;
-  FUNCTION_TABLE_viiiiii[index&255](a1|0,a2|0,a3|0,a4|0,a5|0,a6|0);
-}
-
-
-function dynCall_iii(index,a1,a2) {
-  index = index|0;
-  a1=a1|0; a2=a2|0;
-  return FUNCTION_TABLE_iii[index&255](a1|0,a2|0)|0;
-}
-
-
-function dynCall_viiii(index,a1,a2,a3,a4) {
-  index = index|0;
-  a1=a1|0; a2=a2|0; a3=a3|0; a4=a4|0;
-  FUNCTION_TABLE_viiii[index&255](a1|0,a2|0,a3|0,a4|0);
-}
-
-function b0(p0,p1,p2) {
- p0 = p0|0;p1 = p1|0;p2 = p2|0; nullFunc_iiii(0);return 0;
-}
-function b1(p0,p1,p2,p3,p4,p5,p6) {
- p0 = p0|0;p1 = p1|0;p2 = p2|0;p3 = p3|0;p4 = p4|0;p5 = p5|0;p6 = p6|0; nullFunc_viiiiiii(1);
-}
-function b2(p0,p1,p2,p3,p4) {
- p0 = p0|0;p1 = p1|0;p2 = p2|0;p3 = p3|0;p4 = p4|0; nullFunc_viiiii(2);
-}
-function b3(p0) {
- p0 = p0|0; nullFunc_vi(3);
-}
-function b4(p0,p1) {
- p0 = p0|0;p1 = p1|0; nullFunc_vii(4);
-}
-function _emscripten_longjmp__wrapper(p0,p1) {
- p0 = p0|0;p1 = p1|0; _emscripten_longjmp(p0|0,p1|0);
-}
-function b5(p0) {
- p0 = p0|0; nullFunc_ii(5);return 0;
-}
-function b6(p0,p1,p2) {
- p0 = p0|0;p1 = p1|0;p2 = p2|0; nullFunc_viii(6);
-}
-function b7(p0,p1,p2,p3) {
- p0 = p0|0;p1 = p1|0;p2 = p2|0;p3 = p3|0; nullFunc_iiiii(7);return 0;
-}
-function b8(p0,p1,p2,p3,p4,p5) {
- p0 = p0|0;p1 = p1|0;p2 = p2|0;p3 = p3|0;p4 = p4|0;p5 = p5|0; nullFunc_viiiiii(8);
-}
-function b9(p0,p1) {
- p0 = p0|0;p1 = p1|0; nullFunc_iii(9);return 0;
-}
-function b10(p0,p1,p2,p3) {
- p0 = p0|0;p1 = p1|0;p2 = p2|0;p3 = p3|0; nullFunc_viiii(10);
-}
-
-// EMSCRIPTEN_END_FUNCS
-var FUNCTION_TABLE_iiii = [b0,b0,___stdio_write,___stdio_seek,___stdio_read,___stdout_write,_sn_write,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0
-,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0
-,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0
-,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0
-,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,_mrb_method_search_vm,_mrb_intern_static,b0,b0,b0,b0,b0,b0,b0,b0
-,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,_mrb_realloc,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0
-,b0,b0,_mrb_int_add_overflow_434,b0,_mrb_int_sub_overflow_435,b0,_mrb_obj_eq,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,_mrb_vm_define_module,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0
-,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0
-,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0
-,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0
-,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0
-,b0,_scope_new,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0
-,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0
-,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0
-,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0
-,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0
-,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0
-,b0,b0,b0];
-var FUNCTION_TABLE_viiiiiii = [b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1
-,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1
-,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1
-,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1
-,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,_mrb_funcall_with_block,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1
-,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1
-,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1
-,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1
-,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1];
-var FUNCTION_TABLE_viiiii = [b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2
-,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2
-,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2
-,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2
-,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2
-,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2
-,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,_mrb_range_new,b2,b2,b2,b2,b2,b2,b2,b2
-,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2
-,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2];
-var FUNCTION_TABLE_vi = [b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3
-,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3
-,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3
-,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3
-,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,_cipop,b3,_stack_init,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3
-,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,_mrb_nil_value_419,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3
-,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3
-,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3
-,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3
-,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3
-,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3
-,b3,b3,b3,b3,_mrb_pool_close,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3
-,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3
-,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3
-,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3
-,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3
-,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3
-,b3,b3,b3];
-var FUNCTION_TABLE_vii = [b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4
-,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4
-,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4
-,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4
-,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,_mrb_obj_value_420,b4,b4,_mrb_fixnum_value_421,b4,b4,b4,b4,b4,b4,_mrb_symbol_value_425,b4,b4,_mrb_gc_arena_restore,b4,_mrb_gc_protect
-,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,_mrb_write_barrier,b4,b4,_ecall,b4,b4,b4,b4,b4,b4,b4,b4,_argnum_error,b4,b4,_emscripten_longjmp__wrapper,b4,_localjump_error,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,_parser_init_cxt,b4,b4,_parser_update_cxt,b4,_yyerror,b4
-,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4
-,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4
-,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4
-,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4
-,b4,b4,b4,_mrb_irep_decref,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4
-,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4
-,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4
-,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4
-,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4
-,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4
-,b4,b4,b4];
-var FUNCTION_TABLE_ii = [b5,___stdio_close,b5,b5,b5,b5,b5,_partial_hook,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5
-,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5
-,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5
-,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5
-,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,_cipush,b5,b5,b5,_mrb_gc_arena_save,b5,b5,b5
-,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5
-,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,_yyparse,_new_nil,b5,b5,b5,b5
-,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5
-,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5];
-var FUNCTION_TABLE_viii = [b6,b6,b6,b6,b6,b6,b6,b6,_gc_start,_gc_enable,_gc_disable,_gc_interval_ratio_get,_gc_interval_ratio_set,_gc_step_ratio_get,_gc_step_ratio_set,_gc_generational_mode_set,_gc_generational_mode_get,_mrb_hash_aget,_mrb_hash_aset,_mrb_hash_clear,_mrb_hash_default,_mrb_hash_set_default,_mrb_hash_default_proc,_mrb_hash_set_default_proc,_mrb_hash_delete,_mrb_hash_empty_p,_mrb_hash_has_key,_mrb_hash_has_value,_mrb_hash_init
-,_mrb_hash_keys,_mrb_hash_size_m,_mrb_hash_shift,_mrb_hash_dup,_mrb_hash_values,_mrb_hash_to_hash,_num_pow,_num_div,_num_cmp,_int_to_i,_fix_plus,_fix_minus,_fix_mul,_fix_mod,_fix_equal,_fix_rev,_fix_and,_fix_or,_fix_xor,_fix_lshift,_fix_rshift,_fix_eql,_flo_hash,_fix_to_f,_fix_to_s,_fix_divmod,_flo_plus,_flo_minus,_flo_mul,_flo_mod
-,_flo_eq,_flo_ceil,_flo_finite_p,_flo_floor,_flo_infinite_p,_flo_round,_flo_to_f,_flo_truncate,_flo_divmod,_flo_eql,_flo_to_s,_flo_nan_p,_false_and,_false_xor,_false_or,_mrb_true,_nil_to_s,_nil_inspect,_true_and,_true_xor,_true_to_s,_true_or,_false_to_s,b6,_inspect_main,_mrb_str_bytesize,_mrb_str_cmp_m,_mrb_str_equal_m,_mrb_str_plus_m,_mrb_str_times
-,_mrb_str_aref_m,_mrb_str_capitalize,_mrb_str_capitalize_bang,_mrb_str_chomp,_mrb_str_chomp_bang,_mrb_str_chop,_mrb_str_chop_bang,_mrb_str_downcase,_mrb_str_downcase_bang,_mrb_str_empty_p,_mrb_str_eql,_mrb_str_hash_m,_mrb_str_include,_mrb_str_index,_mrb_str_init,_mrb_str_replace,_mrb_str_intern,_mrb_str_size,_mrb_str_reverse,_mrb_str_reverse_bang,_mrb_str_rindex,_mrb_str_split_m,_mrb_str_to_f,_mrb_str_to_i,_mrb_str_to_s,_mrb_str_upcase,_mrb_str_upcase_bang,_mrb_str_inspect,_mrb_str_bytes,_mrb_str_freeze
-,_sym_equal,_mrb_sym_to_s,_sym_to_sym,_sym_inspect,_sym_cmp,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,_stack_extend,b6,_stack_copy,b6,b6,b6,b6
-,_mrb_gv_get,_mrb_gv_set,_mrb_vm_special_get,_mrb_vm_special_set,_mrb_vm_iv_get,_mrb_vm_iv_set,_mrb_vm_cv_get,_mrb_vm_cv_set,_mrb_vm_const_get,_mrb_vm_const_set,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,_value_move,b6,b6,_mrb_ary_new_capa,b6,b6,_mrb_cptr_value,b6,b6
-,b6,b6,b6,b6,b6,b6,b6,_mrb_ary_splat,_mrb_ary_concat,_mrb_ary_push,b6,b6,_mrb_str_dup,_mrb_str_concat,_mrb_hash_new_capa,b6,b6,b6,b6,b6,_mrb_singleton_class,b6,b6,b6,b6,b6,b6,_mrb_parser_dump,b6,_mrb_ary_s_create
-,_mrb_ary_plus,_mrb_ary_times,_mrb_ary_push_m,_mrb_ary_aget,_mrb_ary_aset,_mrb_ary_clear,_mrb_ary_concat_m,_mrb_ary_delete_at,_mrb_ary_empty_p,_mrb_ary_first,_mrb_ary_index_m,_mrb_ary_replace_m,_mrb_ary_join_m,_mrb_ary_last,_mrb_ary_size,_mrb_ary_pop,_mrb_ary_reverse,_mrb_ary_reverse_bang,_mrb_ary_rindex_m,_mrb_ary_shift,_mrb_ary_unshift_m,_mrb_ary_eq,_mrb_ary_cmp,_get_backtrace_i,_mrb_bob_init,_mrb_bob_not,_mrb_bob_missing,_mrb_class_new_class,_mrb_class_superclass,_mrb_instance_new
-,_mrb_class_initialize,_mrb_mod_cvar_defined,_mrb_mod_cvar_get,_mrb_mod_cvar_set,_mrb_mod_extend_object,_mrb_mod_prepend,_mrb_mod_prepend_features,_mrb_mod_include,_mrb_mod_include_p,_mrb_mod_append_features,_mrb_mod_module_eval,_mrb_mod_included_modules,_mrb_mod_initialize,_mrb_mod_instance_methods,_mrb_mod_method_defined,_mrb_mod_module_function,_mrb_mod_dummy_visibility,_mrb_mod_remove_cvar,_mrb_mod_remove_method,_mrb_mod_attr_reader,_mrb_mod_attr_writer,_mrb_mod_to_s,_mrb_mod_alias,_mrb_mod_ancestors,_mrb_mod_undef,_mrb_mod_const_defined,_mrb_mod_const_get,_mrb_mod_const_set,_mrb_mod_constants,_mrb_mod_remove_const
-,_mrb_mod_const_missing,_mod_define_method,_mrb_mod_class_variables,_mrb_mod_eqq,_mrb_mod_s_constants,_attr_reader,_attr_writer,_exc_exception,_exc_initialize,_exc_to_s,_exc_message,_exc_inspect,_mrb_exc_backtrace,_mrb_any_to_s,_mrb_f_block_given_p_m,_mrb_f_global_variables,_mrb_local_variables,_mrb_f_raise,_mrb_obj_equal_m,_mrb_obj_not_equal_m,_mrb_equal_m,_mrb_obj_id_m,_mrb_f_send,_mrb_obj_class_m,_mrb_obj_clone,_mrb_obj_dup,_mrb_obj_extend_m,_mrb_obj_hash,_mrb_obj_init_copy,_mrb_obj_inspect
-,_mrb_obj_instance_eval,_obj_is_instance_of,_mrb_obj_ivar_defined,_mrb_obj_ivar_get,_mrb_obj_ivar_set,_mrb_obj_instance_variables,_mrb_obj_is_kind_of_m,_mrb_obj_methods_m,_mrb_false,_mrb_obj_private_methods,_mrb_obj_protected_methods,_mrb_obj_public_methods,_mrb_obj_remove_instance_variable,_obj_respond_to,_mrb_obj_singleton_methods_m,_mod_define_singleton_method,_mrb_obj_ceqq,_mrb_proc_initialize,_mrb_proc_init_copy,_mrb_proc_arity,_proc_lambda,_mrb_range_beg,_mrb_range_end,_mrb_range_eq,_mrb_range_include,_mrb_range_excl,_mrb_range_initialize,_range_to_s,_range_inspect,_range_eql
-,_range_initialize_copy,b6,_codegen,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6
-,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6
-,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6
-,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6
-,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6
-,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6
-,b6,b6,b6];
-var FUNCTION_TABLE_iiiii = [b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7
-,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7
-,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,_mrb_default_allocf,b7,b7,b7,b7,b7,b7
-,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7
-,b7,b7,b7,b7,b7,_iv_mark_i,_inspect_i,_iv_i,_cv_i,_const_i,_gv_i,_csym_i,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7
-,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7
-,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,_mrb_vm_define_class,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7
-,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7
-,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7];
-var FUNCTION_TABLE_viiiiii = [b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8
-,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8
-,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8
-,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8
-,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8
-,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,_mrb_convert_type,b8,b8,b8,b8
-,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8
-,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8
-,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8];
-var FUNCTION_TABLE_iii = [b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9
-,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9
-,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9
-,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9
-,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,_mrb_class_get,b9,b9,_mrb_class_423,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9
-,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,_uvenv,b9,b9,b9,_mrb_closure_new,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9
-,_top_env,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,_mrb_proc_new,b9,b9,b9,b9,b9,_printf,b9,b9,b9,b9,b9,b9,b9
-,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9
-,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9];
-var FUNCTION_TABLE_viiii = [b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10
-,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10
-,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10
-,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10
-,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,_mrb_raisef,b10,b10,b10,b10,b10,b10,b10,b10,b10,_mrb_run,b10
-,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,_mrb_const_get,_mrb_const_set,b10,b10,b10,b10,b10,b10,_mrb_ary_new_from_values,_mrb_method_missing,_mrb_ary_unshift,b10,_mrb_str_new_static,_mrb_exc_new_str,b10,b10,b10,b10,_mrb_obj_iv_ifnone,b10
-,b10,b10,b10,_mrb_str_plus,b10,_mrb_fixnum_mul,b10,b10,b10,b10,_mrb_ary_ref,_mrb_ary_set,b10,b10,b10,_mrb_hash_set,b10,b10,b10,_mrb_define_method_raw,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10
-,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10
-,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10];
-
-  return { _main: _main, _llvm_cttz_i32: _llvm_cttz_i32, _bitshift64Lshr: _bitshift64Lshr, _bitshift64Shl: _bitshift64Shl, _fflush: _fflush, _memset: _memset, _sbrk: _sbrk, _memcpy: _memcpy, _llvm_bswap_i32: _llvm_bswap_i32, ___muldi3: ___muldi3, ___uremdi3: ___uremdi3, _i64Subtract: _i64Subtract, ___udivmoddi4: ___udivmoddi4, _realloc: _realloc, _i64Add: _i64Add, _emscripten_get_global_libc: _emscripten_get_global_libc, ___udivdi3: ___udivdi3, ___errno_location: ___errno_location, ___muldsi3: ___muldsi3, _testSetjmp: _testSetjmp, _saveSetjmp: _saveSetjmp, _free: _free, _memmove: _memmove, _malloc: _malloc, runPostSets: runPostSets, stackAlloc: stackAlloc, stackSave: stackSave, stackRestore: stackRestore, establishStackSpace: establishStackSpace, setTempRet0: setTempRet0, getTempRet0: getTempRet0, setThrew: setThrew, stackAlloc: stackAlloc, stackSave: stackSave, stackRestore: stackRestore, establishStackSpace: establishStackSpace, setThrew: setThrew, setTempRet0: setTempRet0, getTempRet0: getTempRet0, dynCall_iiii: dynCall_iiii, dynCall_viiiiiii: dynCall_viiiiiii, dynCall_viiiii: dynCall_viiiii, dynCall_vi: dynCall_vi, dynCall_vii: dynCall_vii, dynCall_ii: dynCall_ii, dynCall_viii: dynCall_viii, dynCall_iiiii: dynCall_iiiii, dynCall_viiiiii: dynCall_viiiiii, dynCall_iii: dynCall_iii, dynCall_viiii: dynCall_viiii };
-})
-// EMSCRIPTEN_END_ASM
-(Module.asmGlobalArg, Module.asmLibraryArg, buffer);
-
-var real__main = asm["_main"]; asm["_main"] = function() {
-assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');
-assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');
-return real__main.apply(null, arguments);
-};
-
-var real_stackSave = asm["stackSave"]; asm["stackSave"] = function() {
-assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');
-assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');
-return real_stackSave.apply(null, arguments);
-};
-
-var real_getTempRet0 = asm["getTempRet0"]; asm["getTempRet0"] = function() {
-assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');
-assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');
-return real_getTempRet0.apply(null, arguments);
-};
-
-var real__llvm_cttz_i32 = asm["_llvm_cttz_i32"]; asm["_llvm_cttz_i32"] = function() {
-assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');
-assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');
-return real__llvm_cttz_i32.apply(null, arguments);
-};
-
-var real_setThrew = asm["setThrew"]; asm["setThrew"] = function() {
-assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');
-assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');
-return real_setThrew.apply(null, arguments);
-};
-
-var real__bitshift64Lshr = asm["_bitshift64Lshr"]; asm["_bitshift64Lshr"] = function() {
-assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');
-assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');
-return real__bitshift64Lshr.apply(null, arguments);
-};
-
-var real__bitshift64Shl = asm["_bitshift64Shl"]; asm["_bitshift64Shl"] = function() {
-assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');
-assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');
-return real__bitshift64Shl.apply(null, arguments);
-};
-
-var real__fflush = asm["_fflush"]; asm["_fflush"] = function() {
-assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');
-assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');
-return real__fflush.apply(null, arguments);
-};
-
-var real__sbrk = asm["_sbrk"]; asm["_sbrk"] = function() {
-assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');
-assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');
-return real__sbrk.apply(null, arguments);
-};
-
-var real__llvm_bswap_i32 = asm["_llvm_bswap_i32"]; asm["_llvm_bswap_i32"] = function() {
-assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');
-assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');
-return real__llvm_bswap_i32.apply(null, arguments);
-};
-
-var real____muldi3 = asm["___muldi3"]; asm["___muldi3"] = function() {
-assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');
-assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');
-return real____muldi3.apply(null, arguments);
-};
-
-var real____uremdi3 = asm["___uremdi3"]; asm["___uremdi3"] = function() {
-assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');
-assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');
-return real____uremdi3.apply(null, arguments);
-};
-
-var real_stackAlloc = asm["stackAlloc"]; asm["stackAlloc"] = function() {
-assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');
-assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');
-return real_stackAlloc.apply(null, arguments);
-};
-
-var real__i64Subtract = asm["_i64Subtract"]; asm["_i64Subtract"] = function() {
-assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');
-assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');
-return real__i64Subtract.apply(null, arguments);
-};
-
-var real____udivmoddi4 = asm["___udivmoddi4"]; asm["___udivmoddi4"] = function() {
-assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');
-assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');
-return real____udivmoddi4.apply(null, arguments);
-};
-
-var real_setTempRet0 = asm["setTempRet0"]; asm["setTempRet0"] = function() {
-assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');
-assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');
-return real_setTempRet0.apply(null, arguments);
-};
-
-var real__realloc = asm["_realloc"]; asm["_realloc"] = function() {
-assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');
-assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');
-return real__realloc.apply(null, arguments);
-};
-
-var real__i64Add = asm["_i64Add"]; asm["_i64Add"] = function() {
-assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');
-assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');
-return real__i64Add.apply(null, arguments);
-};
-
-var real__emscripten_get_global_libc = asm["_emscripten_get_global_libc"]; asm["_emscripten_get_global_libc"] = function() {
-assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');
-assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');
-return real__emscripten_get_global_libc.apply(null, arguments);
-};
-
-var real____udivdi3 = asm["___udivdi3"]; asm["___udivdi3"] = function() {
-assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');
-assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');
-return real____udivdi3.apply(null, arguments);
-};
-
-var real____errno_location = asm["___errno_location"]; asm["___errno_location"] = function() {
-assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');
-assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');
-return real____errno_location.apply(null, arguments);
-};
-
-var real____muldsi3 = asm["___muldsi3"]; asm["___muldsi3"] = function() {
-assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');
-assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');
-return real____muldsi3.apply(null, arguments);
-};
-
-var real__testSetjmp = asm["_testSetjmp"]; asm["_testSetjmp"] = function() {
-assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');
-assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');
-return real__testSetjmp.apply(null, arguments);
-};
-
-var real__saveSetjmp = asm["_saveSetjmp"]; asm["_saveSetjmp"] = function() {
-assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');
-assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');
-return real__saveSetjmp.apply(null, arguments);
-};
-
-var real__free = asm["_free"]; asm["_free"] = function() {
-assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');
-assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');
-return real__free.apply(null, arguments);
-};
-
-var real_establishStackSpace = asm["establishStackSpace"]; asm["establishStackSpace"] = function() {
-assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');
-assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');
-return real_establishStackSpace.apply(null, arguments);
-};
-
-var real__memmove = asm["_memmove"]; asm["_memmove"] = function() {
-assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');
-assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');
-return real__memmove.apply(null, arguments);
-};
-
-var real_stackRestore = asm["stackRestore"]; asm["stackRestore"] = function() {
-assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');
-assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');
-return real_stackRestore.apply(null, arguments);
-};
-
-var real__malloc = asm["_malloc"]; asm["_malloc"] = function() {
-assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');
-assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');
-return real__malloc.apply(null, arguments);
-};
-var _main = Module["_main"] = asm["_main"];
-var stackSave = Module["stackSave"] = asm["stackSave"];
-var getTempRet0 = Module["getTempRet0"] = asm["getTempRet0"];
-var _llvm_cttz_i32 = Module["_llvm_cttz_i32"] = asm["_llvm_cttz_i32"];
-var setThrew = Module["setThrew"] = asm["setThrew"];
-var _bitshift64Lshr = Module["_bitshift64Lshr"] = asm["_bitshift64Lshr"];
-var _bitshift64Shl = Module["_bitshift64Shl"] = asm["_bitshift64Shl"];
-var _fflush = Module["_fflush"] = asm["_fflush"];
-var _memset = Module["_memset"] = asm["_memset"];
-var _sbrk = Module["_sbrk"] = asm["_sbrk"];
-var _memcpy = Module["_memcpy"] = asm["_memcpy"];
-var _llvm_bswap_i32 = Module["_llvm_bswap_i32"] = asm["_llvm_bswap_i32"];
-var ___muldi3 = Module["___muldi3"] = asm["___muldi3"];
-var ___uremdi3 = Module["___uremdi3"] = asm["___uremdi3"];
-var stackAlloc = Module["stackAlloc"] = asm["stackAlloc"];
-var _i64Subtract = Module["_i64Subtract"] = asm["_i64Subtract"];
-var ___udivmoddi4 = Module["___udivmoddi4"] = asm["___udivmoddi4"];
-var setTempRet0 = Module["setTempRet0"] = asm["setTempRet0"];
-var _realloc = Module["_realloc"] = asm["_realloc"];
-var _i64Add = Module["_i64Add"] = asm["_i64Add"];
-var _emscripten_get_global_libc = Module["_emscripten_get_global_libc"] = asm["_emscripten_get_global_libc"];
-var ___udivdi3 = Module["___udivdi3"] = asm["___udivdi3"];
-var ___errno_location = Module["___errno_location"] = asm["___errno_location"];
-var ___muldsi3 = Module["___muldsi3"] = asm["___muldsi3"];
-var _testSetjmp = Module["_testSetjmp"] = asm["_testSetjmp"];
-var _saveSetjmp = Module["_saveSetjmp"] = asm["_saveSetjmp"];
-var _free = Module["_free"] = asm["_free"];
-var runPostSets = Module["runPostSets"] = asm["runPostSets"];
-var establishStackSpace = Module["establishStackSpace"] = asm["establishStackSpace"];
-var _memmove = Module["_memmove"] = asm["_memmove"];
-var stackRestore = Module["stackRestore"] = asm["stackRestore"];
-var _malloc = Module["_malloc"] = asm["_malloc"];
-var dynCall_iiii = Module["dynCall_iiii"] = asm["dynCall_iiii"];
-var dynCall_viiiiiii = Module["dynCall_viiiiiii"] = asm["dynCall_viiiiiii"];
-var dynCall_viiiii = Module["dynCall_viiiii"] = asm["dynCall_viiiii"];
-var dynCall_vi = Module["dynCall_vi"] = asm["dynCall_vi"];
-var dynCall_vii = Module["dynCall_vii"] = asm["dynCall_vii"];
-var dynCall_ii = Module["dynCall_ii"] = asm["dynCall_ii"];
-var dynCall_viii = Module["dynCall_viii"] = asm["dynCall_viii"];
-var dynCall_iiiii = Module["dynCall_iiiii"] = asm["dynCall_iiiii"];
-var dynCall_viiiiii = Module["dynCall_viiiiii"] = asm["dynCall_viiiiii"];
-var dynCall_iii = Module["dynCall_iii"] = asm["dynCall_iii"];
-var dynCall_viiii = Module["dynCall_viiii"] = asm["dynCall_viiii"];
-;
-
-Runtime.stackAlloc = Module['stackAlloc'];
-Runtime.stackSave = Module['stackSave'];
-Runtime.stackRestore = Module['stackRestore'];
-Runtime.establishStackSpace = Module['establishStackSpace'];
-
-Runtime.setTempRet0 = Module['setTempRet0'];
-Runtime.getTempRet0 = Module['getTempRet0'];
+    stackRestore(sp);
+    if (e !== e+0 && e !== 'longjmp') throw e;
+    _setThrew(1, 0);
+  }
+}
+
 
 
@@ -111221,59 +5634,195 @@
 // === Auto-generated postamble setup entry stuff ===
 
-Module['asm'] = asm;
-
-
-
-
-
+
+if (!Object.getOwnPropertyDescriptor(Module, "intArrayFromString")) Module["intArrayFromString"] = function() { abort("'intArrayFromString' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Object.getOwnPropertyDescriptor(Module, "intArrayToString")) Module["intArrayToString"] = function() { abort("'intArrayToString' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Object.getOwnPropertyDescriptor(Module, "ccall")) Module["ccall"] = function() { abort("'ccall' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Object.getOwnPropertyDescriptor(Module, "cwrap")) Module["cwrap"] = function() { abort("'cwrap' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Object.getOwnPropertyDescriptor(Module, "setValue")) Module["setValue"] = function() { abort("'setValue' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Object.getOwnPropertyDescriptor(Module, "getValue")) Module["getValue"] = function() { abort("'getValue' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Object.getOwnPropertyDescriptor(Module, "allocate")) Module["allocate"] = function() { abort("'allocate' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+Module["getMemory"] = getMemory;
+if (!Object.getOwnPropertyDescriptor(Module, "UTF8ArrayToString")) Module["UTF8ArrayToString"] = function() { abort("'UTF8ArrayToString' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Object.getOwnPropertyDescriptor(Module, "UTF8ToString")) Module["UTF8ToString"] = function() { abort("'UTF8ToString' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Object.getOwnPropertyDescriptor(Module, "stringToUTF8Array")) Module["stringToUTF8Array"] = function() { abort("'stringToUTF8Array' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Object.getOwnPropertyDescriptor(Module, "stringToUTF8")) Module["stringToUTF8"] = function() { abort("'stringToUTF8' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Object.getOwnPropertyDescriptor(Module, "lengthBytesUTF8")) Module["lengthBytesUTF8"] = function() { abort("'lengthBytesUTF8' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Object.getOwnPropertyDescriptor(Module, "stackTrace")) Module["stackTrace"] = function() { abort("'stackTrace' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Object.getOwnPropertyDescriptor(Module, "addOnPreRun")) Module["addOnPreRun"] = function() { abort("'addOnPreRun' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Object.getOwnPropertyDescriptor(Module, "addOnInit")) Module["addOnInit"] = function() { abort("'addOnInit' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Object.getOwnPropertyDescriptor(Module, "addOnPreMain")) Module["addOnPreMain"] = function() { abort("'addOnPreMain' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Object.getOwnPropertyDescriptor(Module, "addOnExit")) Module["addOnExit"] = function() { abort("'addOnExit' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Object.getOwnPropertyDescriptor(Module, "addOnPostRun")) Module["addOnPostRun"] = function() { abort("'addOnPostRun' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Object.getOwnPropertyDescriptor(Module, "writeStringToMemory")) Module["writeStringToMemory"] = function() { abort("'writeStringToMemory' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Object.getOwnPropertyDescriptor(Module, "writeArrayToMemory")) Module["writeArrayToMemory"] = function() { abort("'writeArrayToMemory' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Object.getOwnPropertyDescriptor(Module, "writeAsciiToMemory")) Module["writeAsciiToMemory"] = function() { abort("'writeAsciiToMemory' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+Module["addRunDependency"] = addRunDependency;
+Module["removeRunDependency"] = removeRunDependency;
+Module["FS_createFolder"] = FS.createFolder;
+Module["FS_createPath"] = FS.createPath;
+Module["FS_createDataFile"] = FS.createDataFile;
+Module["FS_createPreloadedFile"] = FS.createPreloadedFile;
+Module["FS_createLazyFile"] = FS.createLazyFile;
+Module["FS_createLink"] = FS.createLink;
+Module["FS_createDevice"] = FS.createDevice;
+Module["FS_unlink"] = FS.unlink;
+if (!Object.getOwnPropertyDescriptor(Module, "dynamicAlloc")) Module["dynamicAlloc"] = function() { abort("'dynamicAlloc' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Object.getOwnPropertyDescriptor(Module, "loadDynamicLibrary")) Module["loadDynamicLibrary"] = function() { abort("'loadDynamicLibrary' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Object.getOwnPropertyDescriptor(Module, "loadWebAssemblyModule")) Module["loadWebAssemblyModule"] = function() { abort("'loadWebAssemblyModule' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Object.getOwnPropertyDescriptor(Module, "getLEB")) Module["getLEB"] = function() { abort("'getLEB' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Object.getOwnPropertyDescriptor(Module, "getFunctionTables")) Module["getFunctionTables"] = function() { abort("'getFunctionTables' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Object.getOwnPropertyDescriptor(Module, "alignFunctionTables")) Module["alignFunctionTables"] = function() { abort("'alignFunctionTables' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Object.getOwnPropertyDescriptor(Module, "registerFunctions")) Module["registerFunctions"] = function() { abort("'registerFunctions' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Object.getOwnPropertyDescriptor(Module, "addFunction")) Module["addFunction"] = function() { abort("'addFunction' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Object.getOwnPropertyDescriptor(Module, "removeFunction")) Module["removeFunction"] = function() { abort("'removeFunction' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Object.getOwnPropertyDescriptor(Module, "getFuncWrapper")) Module["getFuncWrapper"] = function() { abort("'getFuncWrapper' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Object.getOwnPropertyDescriptor(Module, "prettyPrint")) Module["prettyPrint"] = function() { abort("'prettyPrint' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Object.getOwnPropertyDescriptor(Module, "makeBigInt")) Module["makeBigInt"] = function() { abort("'makeBigInt' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Object.getOwnPropertyDescriptor(Module, "dynCall")) Module["dynCall"] = function() { abort("'dynCall' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Object.getOwnPropertyDescriptor(Module, "getCompilerSetting")) Module["getCompilerSetting"] = function() { abort("'getCompilerSetting' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Object.getOwnPropertyDescriptor(Module, "print")) Module["print"] = function() { abort("'print' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Object.getOwnPropertyDescriptor(Module, "printErr")) Module["printErr"] = function() { abort("'printErr' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Object.getOwnPropertyDescriptor(Module, "getTempRet0")) Module["getTempRet0"] = function() { abort("'getTempRet0' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Object.getOwnPropertyDescriptor(Module, "setTempRet0")) Module["setTempRet0"] = function() { abort("'setTempRet0' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Object.getOwnPropertyDescriptor(Module, "callMain")) Module["callMain"] = function() { abort("'callMain' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Object.getOwnPropertyDescriptor(Module, "abort")) Module["abort"] = function() { abort("'abort' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Object.getOwnPropertyDescriptor(Module, "stringToNewUTF8")) Module["stringToNewUTF8"] = function() { abort("'stringToNewUTF8' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Object.getOwnPropertyDescriptor(Module, "abortOnCannotGrowMemory")) Module["abortOnCannotGrowMemory"] = function() { abort("'abortOnCannotGrowMemory' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Object.getOwnPropertyDescriptor(Module, "emscripten_realloc_buffer")) Module["emscripten_realloc_buffer"] = function() { abort("'emscripten_realloc_buffer' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Object.getOwnPropertyDescriptor(Module, "ENV")) Module["ENV"] = function() { abort("'ENV' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Object.getOwnPropertyDescriptor(Module, "ERRNO_CODES")) Module["ERRNO_CODES"] = function() { abort("'ERRNO_CODES' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Object.getOwnPropertyDescriptor(Module, "ERRNO_MESSAGES")) Module["ERRNO_MESSAGES"] = function() { abort("'ERRNO_MESSAGES' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Object.getOwnPropertyDescriptor(Module, "setErrNo")) Module["setErrNo"] = function() { abort("'setErrNo' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Object.getOwnPropertyDescriptor(Module, "DNS")) Module["DNS"] = function() { abort("'DNS' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Object.getOwnPropertyDescriptor(Module, "GAI_ERRNO_MESSAGES")) Module["GAI_ERRNO_MESSAGES"] = function() { abort("'GAI_ERRNO_MESSAGES' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Object.getOwnPropertyDescriptor(Module, "Protocols")) Module["Protocols"] = function() { abort("'Protocols' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Object.getOwnPropertyDescriptor(Module, "Sockets")) Module["Sockets"] = function() { abort("'Sockets' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Object.getOwnPropertyDescriptor(Module, "UNWIND_CACHE")) Module["UNWIND_CACHE"] = function() { abort("'UNWIND_CACHE' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Object.getOwnPropertyDescriptor(Module, "readAsmConstArgs")) Module["readAsmConstArgs"] = function() { abort("'readAsmConstArgs' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Object.getOwnPropertyDescriptor(Module, "jstoi_q")) Module["jstoi_q"] = function() { abort("'jstoi_q' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Object.getOwnPropertyDescriptor(Module, "jstoi_s")) Module["jstoi_s"] = function() { abort("'jstoi_s' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Object.getOwnPropertyDescriptor(Module, "listenOnce")) Module["listenOnce"] = function() { abort("'listenOnce' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Object.getOwnPropertyDescriptor(Module, "autoResumeAudioContext")) Module["autoResumeAudioContext"] = function() { abort("'autoResumeAudioContext' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Object.getOwnPropertyDescriptor(Module, "abortStackOverflow")) Module["abortStackOverflow"] = function() { abort("'abortStackOverflow' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Object.getOwnPropertyDescriptor(Module, "reallyNegative")) Module["reallyNegative"] = function() { abort("'reallyNegative' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Object.getOwnPropertyDescriptor(Module, "formatString")) Module["formatString"] = function() { abort("'formatString' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Object.getOwnPropertyDescriptor(Module, "PATH")) Module["PATH"] = function() { abort("'PATH' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Object.getOwnPropertyDescriptor(Module, "PATH_FS")) Module["PATH_FS"] = function() { abort("'PATH_FS' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Object.getOwnPropertyDescriptor(Module, "SYSCALLS")) Module["SYSCALLS"] = function() { abort("'SYSCALLS' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Object.getOwnPropertyDescriptor(Module, "syscallMmap2")) Module["syscallMmap2"] = function() { abort("'syscallMmap2' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Object.getOwnPropertyDescriptor(Module, "syscallMunmap")) Module["syscallMunmap"] = function() { abort("'syscallMunmap' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Object.getOwnPropertyDescriptor(Module, "JSEvents")) Module["JSEvents"] = function() { abort("'JSEvents' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Object.getOwnPropertyDescriptor(Module, "specialHTMLTargets")) Module["specialHTMLTargets"] = function() { abort("'specialHTMLTargets' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Object.getOwnPropertyDescriptor(Module, "demangle")) Module["demangle"] = function() { abort("'demangle' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Object.getOwnPropertyDescriptor(Module, "demangleAll")) Module["demangleAll"] = function() { abort("'demangleAll' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Object.getOwnPropertyDescriptor(Module, "jsStackTrace")) Module["jsStackTrace"] = function() { abort("'jsStackTrace' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Object.getOwnPropertyDescriptor(Module, "stackTrace")) Module["stackTrace"] = function() { abort("'stackTrace' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Object.getOwnPropertyDescriptor(Module, "getEnvStrings")) Module["getEnvStrings"] = function() { abort("'getEnvStrings' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Object.getOwnPropertyDescriptor(Module, "checkWasiClock")) Module["checkWasiClock"] = function() { abort("'checkWasiClock' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Object.getOwnPropertyDescriptor(Module, "writeI53ToI64")) Module["writeI53ToI64"] = function() { abort("'writeI53ToI64' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Object.getOwnPropertyDescriptor(Module, "writeI53ToI64Clamped")) Module["writeI53ToI64Clamped"] = function() { abort("'writeI53ToI64Clamped' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Object.getOwnPropertyDescriptor(Module, "writeI53ToI64Signaling")) Module["writeI53ToI64Signaling"] = function() { abort("'writeI53ToI64Signaling' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Object.getOwnPropertyDescriptor(Module, "writeI53ToU64Clamped")) Module["writeI53ToU64Clamped"] = function() { abort("'writeI53ToU64Clamped' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Object.getOwnPropertyDescriptor(Module, "writeI53ToU64Signaling")) Module["writeI53ToU64Signaling"] = function() { abort("'writeI53ToU64Signaling' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Object.getOwnPropertyDescriptor(Module, "readI53FromI64")) Module["readI53FromI64"] = function() { abort("'readI53FromI64' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Object.getOwnPropertyDescriptor(Module, "readI53FromU64")) Module["readI53FromU64"] = function() { abort("'readI53FromU64' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Object.getOwnPropertyDescriptor(Module, "convertI32PairToI53")) Module["convertI32PairToI53"] = function() { abort("'convertI32PairToI53' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Object.getOwnPropertyDescriptor(Module, "convertU32PairToI53")) Module["convertU32PairToI53"] = function() { abort("'convertU32PairToI53' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Object.getOwnPropertyDescriptor(Module, "Browser")) Module["Browser"] = function() { abort("'Browser' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Object.getOwnPropertyDescriptor(Module, "FS")) Module["FS"] = function() { abort("'FS' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Object.getOwnPropertyDescriptor(Module, "MEMFS")) Module["MEMFS"] = function() { abort("'MEMFS' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Object.getOwnPropertyDescriptor(Module, "TTY")) Module["TTY"] = function() { abort("'TTY' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Object.getOwnPropertyDescriptor(Module, "PIPEFS")) Module["PIPEFS"] = function() { abort("'PIPEFS' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Object.getOwnPropertyDescriptor(Module, "SOCKFS")) Module["SOCKFS"] = function() { abort("'SOCKFS' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Object.getOwnPropertyDescriptor(Module, "GL")) Module["GL"] = function() { abort("'GL' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Object.getOwnPropertyDescriptor(Module, "emscriptenWebGLGet")) Module["emscriptenWebGLGet"] = function() { abort("'emscriptenWebGLGet' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Object.getOwnPropertyDescriptor(Module, "emscriptenWebGLGetTexPixelData")) Module["emscriptenWebGLGetTexPixelData"] = function() { abort("'emscriptenWebGLGetTexPixelData' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Object.getOwnPropertyDescriptor(Module, "emscriptenWebGLGetUniform")) Module["emscriptenWebGLGetUniform"] = function() { abort("'emscriptenWebGLGetUniform' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Object.getOwnPropertyDescriptor(Module, "emscriptenWebGLGetVertexAttrib")) Module["emscriptenWebGLGetVertexAttrib"] = function() { abort("'emscriptenWebGLGetVertexAttrib' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Object.getOwnPropertyDescriptor(Module, "writeGLArray")) Module["writeGLArray"] = function() { abort("'writeGLArray' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Object.getOwnPropertyDescriptor(Module, "AL")) Module["AL"] = function() { abort("'AL' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Object.getOwnPropertyDescriptor(Module, "SDL_unicode")) Module["SDL_unicode"] = function() { abort("'SDL_unicode' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Object.getOwnPropertyDescriptor(Module, "SDL_ttfContext")) Module["SDL_ttfContext"] = function() { abort("'SDL_ttfContext' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Object.getOwnPropertyDescriptor(Module, "SDL_audio")) Module["SDL_audio"] = function() { abort("'SDL_audio' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Object.getOwnPropertyDescriptor(Module, "SDL")) Module["SDL"] = function() { abort("'SDL' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Object.getOwnPropertyDescriptor(Module, "SDL_gfx")) Module["SDL_gfx"] = function() { abort("'SDL_gfx' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Object.getOwnPropertyDescriptor(Module, "GLUT")) Module["GLUT"] = function() { abort("'GLUT' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Object.getOwnPropertyDescriptor(Module, "EGL")) Module["EGL"] = function() { abort("'EGL' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Object.getOwnPropertyDescriptor(Module, "GLFW_Window")) Module["GLFW_Window"] = function() { abort("'GLFW_Window' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Object.getOwnPropertyDescriptor(Module, "GLFW")) Module["GLFW"] = function() { abort("'GLFW' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Object.getOwnPropertyDescriptor(Module, "GLEW")) Module["GLEW"] = function() { abort("'GLEW' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Object.getOwnPropertyDescriptor(Module, "IDBStore")) Module["IDBStore"] = function() { abort("'IDBStore' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Object.getOwnPropertyDescriptor(Module, "runAndAbortIfError")) Module["runAndAbortIfError"] = function() { abort("'runAndAbortIfError' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Object.getOwnPropertyDescriptor(Module, "warnOnce")) Module["warnOnce"] = function() { abort("'warnOnce' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Object.getOwnPropertyDescriptor(Module, "stackSave")) Module["stackSave"] = function() { abort("'stackSave' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Object.getOwnPropertyDescriptor(Module, "stackRestore")) Module["stackRestore"] = function() { abort("'stackRestore' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Object.getOwnPropertyDescriptor(Module, "stackAlloc")) Module["stackAlloc"] = function() { abort("'stackAlloc' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Object.getOwnPropertyDescriptor(Module, "AsciiToString")) Module["AsciiToString"] = function() { abort("'AsciiToString' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Object.getOwnPropertyDescriptor(Module, "stringToAscii")) Module["stringToAscii"] = function() { abort("'stringToAscii' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Object.getOwnPropertyDescriptor(Module, "UTF16ToString")) Module["UTF16ToString"] = function() { abort("'UTF16ToString' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Object.getOwnPropertyDescriptor(Module, "stringToUTF16")) Module["stringToUTF16"] = function() { abort("'stringToUTF16' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Object.getOwnPropertyDescriptor(Module, "lengthBytesUTF16")) Module["lengthBytesUTF16"] = function() { abort("'lengthBytesUTF16' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Object.getOwnPropertyDescriptor(Module, "UTF32ToString")) Module["UTF32ToString"] = function() { abort("'UTF32ToString' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Object.getOwnPropertyDescriptor(Module, "stringToUTF32")) Module["stringToUTF32"] = function() { abort("'stringToUTF32' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Object.getOwnPropertyDescriptor(Module, "lengthBytesUTF32")) Module["lengthBytesUTF32"] = function() { abort("'lengthBytesUTF32' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Object.getOwnPropertyDescriptor(Module, "allocateUTF8")) Module["allocateUTF8"] = function() { abort("'allocateUTF8' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+if (!Object.getOwnPropertyDescriptor(Module, "allocateUTF8OnStack")) Module["allocateUTF8OnStack"] = function() { abort("'allocateUTF8OnStack' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };
+Module["writeStackCookie"] = writeStackCookie;
+Module["checkStackCookie"] = checkStackCookie;if (!Object.getOwnPropertyDescriptor(Module, "ALLOC_NORMAL")) Object.defineProperty(Module, "ALLOC_NORMAL", { configurable: true, get: function() { abort("'ALLOC_NORMAL' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") } });
+if (!Object.getOwnPropertyDescriptor(Module, "ALLOC_STACK")) Object.defineProperty(Module, "ALLOC_STACK", { configurable: true, get: function() { abort("'ALLOC_STACK' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") } });
+if (!Object.getOwnPropertyDescriptor(Module, "ALLOC_DYNAMIC")) Object.defineProperty(Module, "ALLOC_DYNAMIC", { configurable: true, get: function() { abort("'ALLOC_DYNAMIC' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") } });
+if (!Object.getOwnPropertyDescriptor(Module, "ALLOC_NONE")) Object.defineProperty(Module, "ALLOC_NONE", { configurable: true, get: function() { abort("'ALLOC_NONE' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") } });
+
+
+
+var calledRun;
+
+/**
+ * @constructor
+ * @this {ExitStatus}
+ */
 function ExitStatus(status) {
   this.name = "ExitStatus";
   this.message = "Program terminated with exit(" + status + ")";
   this.status = status;
-};
-ExitStatus.prototype = new Error();
-ExitStatus.prototype.constructor = ExitStatus;
-
-var initialStackTop;
-var preloadStartTime = null;
+}
+
 var calledMain = false;
+
 
 dependenciesFulfilled = function runCaller() {
   // If run has never been called, and we should call run (INVOKE_RUN is true, and Module.noInitialRun is not false)
-  if (!Module['calledRun']) run();
-  if (!Module['calledRun']) dependenciesFulfilled = runCaller; // try this again later, after new deps are fulfilled
-}
-
-Module['callMain'] = Module.callMain = function callMain(args) {
-  assert(runDependencies == 0, 'cannot call main when async dependencies remain! (listen on __ATMAIN__)');
+  if (!calledRun) run();
+  if (!calledRun) dependenciesFulfilled = runCaller; // try this again later, after new deps are fulfilled
+};
+
+function callMain(args) {
+  assert(runDependencies == 0, 'cannot call main when async dependencies remain! (listen on Module["onRuntimeInitialized"])');
   assert(__ATPRERUN__.length == 0, 'cannot call main when preRun functions remain to be called');
 
+  var entryFunction = Module['_main'];
+
+
   args = args || [];
 
-  ensureInitRuntime();
-
   var argc = args.length+1;
-  function pad() {
-    for (var i = 0; i < 4-1; i++) {
-      argv.push(0);
-    }
-  }
-  var argv = [allocate(intArrayFromString(Module['thisProgram']), 'i8', ALLOC_NORMAL) ];
-  pad();
-  for (var i = 0; i < argc-1; i = i + 1) {
-    argv.push(allocate(intArrayFromString(args[i]), 'i8', ALLOC_NORMAL));
-    pad();
-  }
-  argv.push(0);
-  argv = allocate(argv, 'i32', ALLOC_NORMAL);
-
+  var argv = stackAlloc((argc + 1) * 4);
+  HEAP32[argv >> 2] = allocateUTF8OnStack(thisProgram);
+  for (var i = 1; i < argc; i++) {
+    HEAP32[(argv >> 2) + i] = allocateUTF8OnStack(args[i - 1]);
+  }
+  HEAP32[(argv >> 2) + argc] = 0;
 
   try {
 
-    var ret = Module['_main'](argc, argv, 0);
-
-
+    Module['___set_stack_limit'](STACK_MAX);
+
+    var ret = entryFunction(argc, argv);
+
+
+    // In PROXY_TO_PTHREAD builds, we should never exit the runtime below, as execution is asynchronously handed
+    // off to a pthread.
     // if we're not running an evented main loop, it's time to exit
-    exit(ret, /* implicit = */ true);
+      exit(ret, /* implicit = */ true);
   }
   catch(e) {
@@ -111282,7 +5831,7 @@
       // has been stopped completely
       return;
-    } else if (e == 'SimulateInfiniteLoop') {
+    } else if (e == 'unwind') {
       // running an evented main loop, don't immediately exit
-      Module['noExitRuntime'] = true;
+      noExitRuntime = true;
       return;
     } else {
@@ -111291,6 +5840,6 @@
         toLog = [e, e.stack];
       }
-      Module.printErr('exception thrown: ' + toLog);
-      Module['quit'](1, e);
+      err('exception thrown: ' + toLog);
+      quit_(1, e);
     }
   } finally {
@@ -111302,11 +5851,9 @@
 
 
+/** @type {function(Array=)} */
 function run(args) {
-  args = args || Module['arguments'];
-
-  if (preloadStartTime === null) preloadStartTime = Date.now();
+  args = args || arguments_;
 
   if (runDependencies > 0) {
-    Module.printErr('run() called, but dependencies remain, so not running');
     return;
   }
@@ -111317,23 +5864,21 @@
 
   if (runDependencies > 0) return; // a preRun added a dependency, run will be called later
-  if (Module['calledRun']) return; // run may have just been called through dependencies being fulfilled just in this very frame
 
   function doRun() {
-    if (Module['calledRun']) return; // run may have just been called while the async setStatus time below was happening
+    // run may have just been called through dependencies being fulfilled just in this very frame,
+    // or while the async setStatus time below was happening
+    if (calledRun) return;
+    calledRun = true;
     Module['calledRun'] = true;
 
     if (ABORT) return;
 
-    ensureInitRuntime();
+    initRuntime();
 
     preMain();
 
-    if (ENVIRONMENT_IS_WEB && preloadStartTime !== null) {
-      Module.printErr('pre-main prep time: ' + (Date.now() - preloadStartTime) + ' ms');
-    }
-
     if (Module['onRuntimeInitialized']) Module['onRuntimeInitialized']();
 
-    if (Module['_main'] && shouldRunNow) Module['callMain'](args);
+    if (shouldRunNow) callMain(args);
 
     postRun();
@@ -111348,24 +5893,74 @@
       doRun();
     }, 1);
-  } else {
+  } else
+  {
     doRun();
   }
   checkStackCookie();
 }
-Module['run'] = Module.run = run;
-
+Module['run'] = run;
+
+function checkUnflushedContent() {
+  // Compiler settings do not allow exiting the runtime, so flushing
+  // the streams is not possible. but in ASSERTIONS mode we check
+  // if there was something to flush, and if so tell the user they
+  // should request that the runtime be exitable.
+  // Normally we would not even include flush() at all, but in ASSERTIONS
+  // builds we do so just for this check, and here we see if there is any
+  // content to flush, that is, we check if there would have been
+  // something a non-ASSERTIONS build would have not seen.
+  // How we flush the streams depends on whether we are in SYSCALLS_REQUIRE_FILESYSTEM=0
+  // mode (which has its own special function for this; otherwise, all
+  // the code is inside libc)
+  var print = out;
+  var printErr = err;
+  var has = false;
+  out = err = function(x) {
+    has = true;
+  }
+  try { // it doesn't matter if it fails
+    var flush = Module['_fflush'];
+    if (flush) flush(0);
+    // also flush in the JS FS layer
+    ['stdout', 'stderr'].forEach(function(name) {
+      var info = FS.analyzePath('/dev/' + name);
+      if (!info) return;
+      var stream = info.object;
+      var rdev = stream.rdev;
+      var tty = TTY.ttys[rdev];
+      if (tty && tty.output && tty.output.length) {
+        has = true;
+      }
+    });
+  } catch(e) {}
+  out = print;
+  err = printErr;
+  if (has) {
+    warnOnce('stdio streams had content in them that was not flushed. you should set EXIT_RUNTIME to 1 (see the FAQ), or make sure to emit a newline when you printf etc.');
+  }
+}
+
+/** @param {boolean|number=} implicit */
 function exit(status, implicit) {
-  if (implicit && Module['noExitRuntime']) {
-    Module.printErr('exit(' + status + ') implicitly called by end of main(), but noExitRuntime, so not exiting the runtime (you can use emscripten_force_exit, if you want to force a true shutdown)');
+  checkUnflushedContent();
+
+  // if this is just main exit-ing implicitly, and the status is 0, then we
+  // don't need to do anything here and can just leave. if the status is
+  // non-zero, though, then we need to report it.
+  // (we may have warned about this earlier, if a situation justifies doing so)
+  if (implicit && noExitRuntime && status === 0) {
     return;
   }
 
-  if (Module['noExitRuntime']) {
-    Module.printErr('exit(' + status + ') called, but noExitRuntime, so halting execution but not exiting the runtime or preventing further async execution (you can use emscripten_force_exit, if you want to force a true shutdown)');
+  if (noExitRuntime) {
+    // if exit() was called, we may warn the user if the runtime isn't actually being shut down
+    if (!implicit) {
+      var msg = 'program exited (with status: ' + status + '), but EXIT_RUNTIME is not set, so halting execution but not exiting the runtime or preventing further async execution (build with EXIT_RUNTIME=1, if you want a true shutdown)';
+      err(msg);
+    }
   } else {
 
     ABORT = true;
     EXITSTATUS = status;
-    STACKTOP = initialStackTop;
 
     exitRuntime();
@@ -111374,38 +5969,6 @@
   }
 
-  if (ENVIRONMENT_IS_NODE) {
-    process['exit'](status);
-  }
-  Module['quit'](status, new ExitStatus(status));
-}
-Module['exit'] = Module.exit = exit;
-
-var abortDecorators = [];
-
-function abort(what) {
-  if (what !== undefined) {
-    Module.print(what);
-    Module.printErr(what);
-    what = JSON.stringify(what)
-  } else {
-    what = '';
-  }
-
-  ABORT = true;
-  EXITSTATUS = 1;
-
-  var extra = '';
-
-  var output = 'abort(' + what + ') at ' + stackTrace() + extra;
-  if (abortDecorators) {
-    abortDecorators.forEach(function(decorator) {
-      output = decorator(output, what);
-    });
-  }
-  throw output;
-}
-Module['abort'] = Module.abort = abort;
-
-// {{PRE_RUN_ADDITIONS}}
+  quit_(status, new ExitStatus(status));
+}
 
 if (Module['preInit']) {
@@ -111418,12 +5981,12 @@
 // shouldRunNow refers to calling main(), not run().
 var shouldRunNow = true;
-if (Module['noInitialRun']) {
-  shouldRunNow = false;
-}
-
+
+if (Module['noInitialRun']) shouldRunNow = false;
+
+
+  noExitRuntime = true;
 
 run();
 
-// {{POST_RUN_ADDITIONS}}
 
 
Index: /EcnlProtoTool/trunk/webapp/webmrbc/mrbc.min.js
===================================================================
--- /EcnlProtoTool/trunk/webapp/webmrbc/mrbc.min.js	(revision 438)
+++ /EcnlProtoTool/trunk/webapp/webmrbc/mrbc.min.js	(revision 439)
@@ -1,1 +1,1 @@
-var mrbc=function(Module){function globalEval(a){eval.call(null,a)}function assert(a,b){a||abort("Assertion failed: "+b)}function getCFunc(ident){var func=Module["_"+ident];if(!func)try{func=eval("_"+ident)}catch(a){}return assert(func,"Cannot call unknown function "+ident+" (perhaps LLVM optimizations or closure removed it?)"),func}function setValue(a,b,c,d){switch(c=c||"i8","*"===c.charAt(c.length-1)&&(c="i32"),c){case"i1":case"i8":HEAP8[a>>0]=b;break;case"i16":HEAP16[a>>1]=b;break;case"i32":HEAP32[a>>2]=b;break;case"i64":tempI64=[b>>>0,(tempDouble=b,+Math_abs(tempDouble)>=1?tempDouble>0?(0|Math_min(+Math_floor(tempDouble/4294967296),4294967295))>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[a>>2]=tempI64[0],HEAP32[a+4>>2]=tempI64[1];break;case"float":HEAPF32[a>>2]=b;break;case"double":HEAPF64[a>>3]=b;break;default:abort("invalid type for setValue: "+c)}}function getValue(a,b,c){switch(b=b||"i8","*"===b.charAt(b.length-1)&&(b="i32"),b){case"i1":case"i8":return HEAP8[a>>0];case"i16":return HEAP16[a>>1];case"i32":case"i64":return HEAP32[a>>2];case"float":return HEAPF32[a>>2];case"double":return HEAPF64[a>>3];default:abort("invalid type for setValue: "+b)}return null}function allocate(a,b,c,d){var e,f;"number"==typeof a?(e=!0,f=a):(e=!1,f=a.length);var h,g="string"==typeof b?b:null;if(h=c==ALLOC_NONE?d:["function"==typeof _malloc?_malloc:Runtime.staticAlloc,Runtime.stackAlloc,Runtime.staticAlloc,Runtime.dynamicAlloc][void 0===c?ALLOC_STATIC:c](Math.max(f,g?1:b.length)),e){var i,d=h;for(assert(0==(3&h)),i=h+(-4&f);d<i;d+=4)HEAP32[d>>2]=0;for(i=h+f;d<i;)HEAP8[d++>>0]=0;return h}if("i8"===g)return a.subarray||a.slice?HEAPU8.set(a,h):HEAPU8.set(new Uint8Array(a),h),h;for(var k,l,m,j=0;j<f;){var n=a[j];"function"==typeof n&&(n=Runtime.getFunctionIndex(n)),k=g||b[j],0!==k?(assert(k,"Must know what type to store in allocate!"),"i64"==k&&(k="i32"),setValue(h+j,n,k),m!==k&&(l=Runtime.getNativeTypeSize(k),m=k),j+=l):j++}return h}function getMemory(a){return staticSealed?runtimeInitialized?_malloc(a):Runtime.dynamicAlloc(a):Runtime.staticAlloc(a)}function Pointer_stringify(a,b){if(0===b||!a)return"";for(var d,c=0,e=0;;){if(assert(a+e<TOTAL_MEMORY),d=HEAPU8[a+e>>0],c|=d,0==d&&!b)break;if(e++,b&&e==b)break}b||(b=e);var f="";if(c<128){for(var h,g=1024;b>0;)h=String.fromCharCode.apply(String,HEAPU8.subarray(a,a+Math.min(b,g))),f=f?f+h:h,a+=g,b-=g;return f}return Module.UTF8ToString(a)}function AsciiToString(a){for(var b="";;){var c=HEAP8[a++>>0];if(!c)return b;b+=String.fromCharCode(c)}}function stringToAscii(a,b){return writeAsciiToMemory(a,b,!1)}function UTF8ArrayToString(a,b){for(var c=b;a[c];)++c;if(c-b>16&&a.subarray&&UTF8Decoder)return UTF8Decoder.decode(a.subarray(b,c));for(var d,e,f,g,h,i,j="";;){if(!(d=a[b++]))return j;if(128&d)if(e=63&a[b++],192!=(224&d))if(f=63&a[b++],224==(240&d)?d=(15&d)<<12|e<<6|f:(g=63&a[b++],240==(248&d)?d=(7&d)<<18|e<<12|f<<6|g:(h=63&a[b++],248==(252&d)?d=(3&d)<<24|e<<18|f<<12|g<<6|h:(i=63&a[b++],d=(1&d)<<30|e<<24|f<<18|g<<12|h<<6|i))),d<65536)j+=String.fromCharCode(d);else{var k=d-65536;j+=String.fromCharCode(55296|k>>10,56320|1023&k)}else j+=String.fromCharCode((31&d)<<6|e);else j+=String.fromCharCode(d)}}function UTF8ToString(a){return UTF8ArrayToString(HEAPU8,a)}function stringToUTF8Array(a,b,c,d){if(!(d>0))return 0;for(var e=c,f=c+d-1,g=0;g<a.length;++g){var h=a.charCodeAt(g);if(h>=55296&&h<=57343&&(h=65536+((1023&h)<<10)|1023&a.charCodeAt(++g)),h<=127){if(c>=f)break;b[c++]=h}else if(h<=2047){if(c+1>=f)break;b[c++]=192|h>>6,b[c++]=128|63&h}else if(h<=65535){if(c+2>=f)break;b[c++]=224|h>>12,b[c++]=128|h>>6&63,b[c++]=128|63&h}else if(h<=2097151){if(c+3>=f)break;b[c++]=240|h>>18,b[c++]=128|h>>12&63,b[c++]=128|h>>6&63,b[c++]=128|63&h}else if(h<=67108863){if(c+4>=f)break;b[c++]=248|h>>24,b[c++]=128|h>>18&63,b[c++]=128|h>>12&63,b[c++]=128|h>>6&63,b[c++]=128|63&h}else{if(c+5>=f)break;b[c++]=252|h>>30,b[c++]=128|h>>24&63,b[c++]=128|h>>18&63,b[c++]=128|h>>12&63,b[c++]=128|h>>6&63,b[c++]=128|63&h}}return b[c]=0,c-e}function stringToUTF8(a,b,c){return assert("number"==typeof c,"stringToUTF8(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!"),stringToUTF8Array(a,HEAPU8,b,c)}function lengthBytesUTF8(a){for(var b=0,c=0;c<a.length;++c){var d=a.charCodeAt(c);d>=55296&&d<=57343&&(d=65536+((1023&d)<<10)|1023&a.charCodeAt(++c)),d<=127?++b:b+=d<=2047?2:d<=65535?3:d<=2097151?4:d<=67108863?5:6}return b}function UTF16ToString(a){assert(a%2==0,"Pointer passed to UTF16ToString must be aligned to two bytes!");for(var b=a,c=b>>1;HEAP16[c];)++c;if((b=c<<1)-a>32&&UTF16Decoder)return UTF16Decoder.decode(HEAPU8.subarray(a,b));for(var d=0,e="";;){var f=HEAP16[a+2*d>>1];if(0==f)return e;++d,e+=String.fromCharCode(f)}}function stringToUTF16(a,b,c){if(assert(b%2==0,"Pointer passed to stringToUTF16 must be aligned to two bytes!"),assert("number"==typeof c,"stringToUTF16(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!"),void 0===c&&(c=2147483647),c<2)return 0;c-=2;for(var d=b,e=c<2*a.length?c/2:a.length,f=0;f<e;++f){var g=a.charCodeAt(f);HEAP16[b>>1]=g,b+=2}return HEAP16[b>>1]=0,b-d}function lengthBytesUTF16(a){return 2*a.length}function UTF32ToString(a){assert(a%4==0,"Pointer passed to UTF32ToString must be aligned to four bytes!");for(var b=0,c="";;){var d=HEAP32[a+4*b>>2];if(0==d)return c;if(++b,d>=65536){var e=d-65536;c+=String.fromCharCode(55296|e>>10,56320|1023&e)}else c+=String.fromCharCode(d)}}function stringToUTF32(a,b,c){if(assert(b%4==0,"Pointer passed to stringToUTF32 must be aligned to four bytes!"),assert("number"==typeof c,"stringToUTF32(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!"),void 0===c&&(c=2147483647),c<4)return 0;for(var d=b,e=d+c-4,f=0;f<a.length;++f){var g=a.charCodeAt(f);if(g>=55296&&g<=57343){g=65536+((1023&g)<<10)|1023&a.charCodeAt(++f)}if(HEAP32[b>>2]=g,(b+=4)+4>e)break}return HEAP32[b>>2]=0,b-d}function lengthBytesUTF32(a){for(var b=0,c=0;c<a.length;++c){var d=a.charCodeAt(c);d>=55296&&d<=57343&&++c,b+=4}return b}function demangle(a){var b=Module.___cxa_demangle||Module.__cxa_demangle;if(b){try{var c=a.substr(1),d=lengthBytesUTF8(c)+1,e=_malloc(d);stringToUTF8(c,e,d);var f=_malloc(4),g=b(e,0,0,f);if(0===getValue(f,"i32")&&g)return Pointer_stringify(g)}catch(a){}finally{e&&_free(e),f&&_free(f),g&&_free(g)}return a}return Runtime.warnOnce("warning: build with  -s DEMANGLE_SUPPORT=1  to link in libcxxabi demangling"),a}function demangleAll(a){var b=/__Z[\w\d_]+/g;return a.replace(b,function(a){var b=demangle(a);return a===b?a:a+" ["+b+"]"})}function jsStackTrace(){var a=new Error;if(!a.stack){try{throw new Error(0)}catch(b){a=b}if(!a.stack)return"(no stack trace available)"}return a.stack.toString()}function stackTrace(){var a=jsStackTrace();return Module.extraStackTrace&&(a+="\n"+Module.extraStackTrace()),demangleAll(a)}function alignUp(a,b){return a%b>0&&(a+=b-a%b),a}function updateGlobalBuffer(a){Module.buffer=buffer=a}function updateGlobalBufferViews(){Module.HEAP8=HEAP8=new Int8Array(buffer),Module.HEAP16=HEAP16=new Int16Array(buffer),Module.HEAP32=HEAP32=new Int32Array(buffer),Module.HEAPU8=HEAPU8=new Uint8Array(buffer),Module.HEAPU16=HEAPU16=new Uint16Array(buffer),Module.HEAPU32=HEAPU32=new Uint32Array(buffer),Module.HEAPF32=HEAPF32=new Float32Array(buffer),Module.HEAPF64=HEAPF64=new Float64Array(buffer)}function writeStackCookie(){assert(0==(3&STACK_MAX)),HEAPU32[(STACK_MAX>>2)-1]=34821223,HEAPU32[(STACK_MAX>>2)-2]=2310721022}function checkStackCookie(){if(34821223==HEAPU32[(STACK_MAX>>2)-1]&&2310721022==HEAPU32[(STACK_MAX>>2)-2]||abort("Stack overflow! Stack cookie has been overwritten, expected hex dwords 0x89BACDFE and 0x02135467, but received 0x"+HEAPU32[(STACK_MAX>>2)-2].toString(16)+" "+HEAPU32[(STACK_MAX>>2)-1].toString(16)),1668509029!==HEAP32[0])throw"Runtime error: The application has corrupted its heap memory area (address zero)!"}function abortStackOverflow(a){abort("Stack overflow! Attempted to allocate "+a+" bytes on the stack, but stack has only "+(STACK_MAX-asm.stackSave()+a)+" bytes available!")}function abortOnCannotGrowMemory(){abort("Cannot enlarge memory arrays. Either (1) compile with  -s TOTAL_MEMORY=X  with X higher than the current value "+TOTAL_MEMORY+", (2) compile with  -s ALLOW_MEMORY_GROWTH=1  which adjusts the size at runtime but prevents some optimizations, (3) set Module.TOTAL_MEMORY to a higher value before the program runs, or if you want malloc to return NULL (0) instead of this abort, compile with  -s ABORTING_MALLOC=0 ")}function enlargeMemory(){abortOnCannotGrowMemory()}function getTotalMemory(){return TOTAL_MEMORY}function callRuntimeCallbacks(a){for(;a.length>0;){var b=a.shift();if("function"!=typeof b){var c=b.func;"number"==typeof c?void 0===b.arg?Module.dynCall_v(c):Module.dynCall_vi(c,b.arg):c(void 0===b.arg?null:b.arg)}else b()}}function preRun(){if(Module.preRun)for("function"==typeof Module.preRun&&(Module.preRun=[Module.preRun]);Module.preRun.length;)addOnPreRun(Module.preRun.shift());callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){checkStackCookie(),runtimeInitialized||(runtimeInitialized=!0,callRuntimeCallbacks(__ATINIT__))}function preMain(){checkStackCookie(),callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){checkStackCookie(),callRuntimeCallbacks(__ATEXIT__),runtimeExited=!0}function postRun(){if(checkStackCookie(),Module.postRun)for("function"==typeof Module.postRun&&(Module.postRun=[Module.postRun]);Module.postRun.length;)addOnPostRun(Module.postRun.shift());callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(a){__ATPRERUN__.unshift(a)}function addOnInit(a){__ATINIT__.unshift(a)}function addOnPreMain(a){__ATMAIN__.unshift(a)}function addOnExit(a){__ATEXIT__.unshift(a)}function addOnPostRun(a){__ATPOSTRUN__.unshift(a)}function intArrayFromString(a,b,c){var d=c>0?c:lengthBytesUTF8(a)+1,e=new Array(d),f=stringToUTF8Array(a,e,0,e.length);return b&&(e.length=f),e}function intArrayToString(a){for(var b=[],c=0;c<a.length;c++){var d=a[c];d>255&&(assert(!1,"Character code "+d+" ("+String.fromCharCode(d)+")  at offset "+c+" not in 0x00-0xFF."),d&=255),b.push(String.fromCharCode(d))}return b.join("")}function writeStringToMemory(a,b,c){Runtime.warnOnce("writeStringToMemory is deprecated and should not be called! Use stringToUTF8() instead!");var d,e;c&&(e=b+lengthBytesUTF8(a),d=HEAP8[e]),stringToUTF8(a,b,1/0),c&&(HEAP8[e]=d)}function writeArrayToMemory(a,b){assert(a.length>=0,"writeArrayToMemory array must have a length (should be an array or typed array)"),HEAP8.set(a,b)}function writeAsciiToMemory(a,b,c){for(var d=0;d<a.length;++d)assert(a.charCodeAt(d)===a.charCodeAt(d)&255),HEAP8[b++>>0]=a.charCodeAt(d);c||(HEAP8[b>>0]=0)}function unSign(a,b,c){return a>=0?a:b<=32?2*Math.abs(1<<b-1)+a:Math.pow(2,b)+a}function reSign(a,b,c){if(a<=0)return a;var d=b<=32?Math.abs(1<<b-1):Math.pow(2,b-1);return a>=d&&(b<=32||a>d)&&(a=-2*d+a),a}function getUniqueRunDependency(a){for(var b=a;;){if(!runDependencyTracking[a])return a;a=b+Math.random()}return a}function addRunDependency(a){runDependencies++,Module.monitorRunDependencies&&Module.monitorRunDependencies(runDependencies),a?(assert(!runDependencyTracking[a]),runDependencyTracking[a]=1,null===runDependencyWatcher&&"undefined"!=typeof setInterval&&(runDependencyWatcher=setInterval(function(){if(ABORT)return clearInterval(runDependencyWatcher),void(runDependencyWatcher=null);var a=!1;for(var b in runDependencyTracking)a||(a=!0,Module.printErr("still waiting on run dependencies:")),Module.printErr("dependency: "+b);a&&Module.printErr("(end of list)")},1e4))):Module.printErr("warning: run dependency added without ID")}function removeRunDependency(a){if(runDependencies--,Module.monitorRunDependencies&&Module.monitorRunDependencies(runDependencies),a?(assert(runDependencyTracking[a]),delete runDependencyTracking[a]):Module.printErr("warning: run dependency removed without ID"),0==runDependencies&&(null!==runDependencyWatcher&&(clearInterval(runDependencyWatcher),runDependencyWatcher=null),dependenciesFulfilled)){var b=dependenciesFulfilled;dependenciesFulfilled=null,b()}}function copyTempFloat(a){HEAP8[tempDoublePtr]=HEAP8[a],HEAP8[tempDoublePtr+1]=HEAP8[a+1],HEAP8[tempDoublePtr+2]=HEAP8[a+2],HEAP8[tempDoublePtr+3]=HEAP8[a+3]}function copyTempDouble(a){HEAP8[tempDoublePtr]=HEAP8[a],HEAP8[tempDoublePtr+1]=HEAP8[a+1],HEAP8[tempDoublePtr+2]=HEAP8[a+2],HEAP8[tempDoublePtr+3]=HEAP8[a+3],HEAP8[tempDoublePtr+4]=HEAP8[a+4],HEAP8[tempDoublePtr+5]=HEAP8[a+5],HEAP8[tempDoublePtr+6]=HEAP8[a+6],HEAP8[tempDoublePtr+7]=HEAP8[a+7]}function _realloc(){throw"bad"}function _longjmp(a,b){throw Module.setThrew(a,b||1),"longjmp"}function _emscripten_longjmp(a,b){_longjmp(a,b)}function _abort(){Module.abort()}function ___setErrNo(a){return Module.___errno_location?HEAP32[Module.___errno_location()>>2]=a:Module.printErr("failed to set errno from JS"),a}function ___syscall5(a,b){SYSCALLS.varargs=b;try{var c=SYSCALLS.getStr(),d=SYSCALLS.get(),e=SYSCALLS.get();return FS.open(c,d,e).fd}catch(a){return void 0!==FS&&a instanceof FS.ErrnoError||abort(a),-a.errno}}function ___lock(){}function ___unlock(){}function ___syscall6(a,b){SYSCALLS.varargs=b;try{var c=SYSCALLS.getStreamFromFD();return FS.close(c),0}catch(a){return void 0!==FS&&a instanceof FS.ErrnoError||abort(a),-a.errno}}function _emscripten_memcpy_big(a,b,c){return HEAPU8.set(HEAPU8.subarray(b,b+c),a),a}function __exit(a){Module.exit(a)}function _exit(a){__exit(a)}function _emscripten_set_main_loop_timing(a,b){function e(a){a.source===window&&a.data===d&&(a.stopPropagation(),c.shift()())}if(Browser.mainLoop.timingMode=a,Browser.mainLoop.timingValue=b,!Browser.mainLoop.func)return console.error("emscripten_set_main_loop_timing: Cannot set timing mode for main loop since a main loop does not exist! Call emscripten_set_main_loop first to set one up."),1;if(0==a)Browser.mainLoop.scheduler=function(){var c=0|Math.max(0,Browser.mainLoop.tickStartTime+b-_emscripten_get_now());setTimeout(Browser.mainLoop.runner,c)},Browser.mainLoop.method="timeout";else if(1==a)Browser.mainLoop.scheduler=function(){Browser.requestAnimationFrame(Browser.mainLoop.runner)},Browser.mainLoop.method="rAF";else if(2==a){if(!window.setImmediate){var c=[],d="setimmediate";window.addEventListener("message",e,!0),window.setImmediate=function(b){c.push(b),ENVIRONMENT_IS_WORKER?(void 0===Module.setImmediates&&(Module.setImmediates=[]),Module.setImmediates.push(b),window.postMessage({target:d})):window.postMessage(d,"*")}}Browser.mainLoop.scheduler=function(){window.setImmediate(Browser.mainLoop.runner)},Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(a,b,c,d,e){Module.noExitRuntime=!0,assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters."),Browser.mainLoop.func=a,Browser.mainLoop.arg=d;var f;f=void 0!==d?function(){Module.dynCall_vi(a,d)}:function(){Module.dynCall_v(a)};var g=Browser.mainLoop.currentlyRunningMainloop;if(Browser.mainLoop.runner=function(){if(!ABORT){if(Browser.mainLoop.queue.length>0){var b=Date.now(),c=Browser.mainLoop.queue.shift();if(c.func(c.arg),Browser.mainLoop.remainingBlockers){var d=Browser.mainLoop.remainingBlockers,e=d%1==0?d-1:Math.floor(d);c.counted?Browser.mainLoop.remainingBlockers=e:(e+=.5,Browser.mainLoop.remainingBlockers=(8*d+e)/9)}if(console.log('main loop blocker "'+c.name+'" took '+(Date.now()-b)+" ms"),Browser.mainLoop.updateStatus(),g<Browser.mainLoop.currentlyRunningMainloop)return;return void setTimeout(Browser.mainLoop.runner,0)}if(!(g<Browser.mainLoop.currentlyRunningMainloop)){if(Browser.mainLoop.currentFrameNumber=Browser.mainLoop.currentFrameNumber+1|0,1==Browser.mainLoop.timingMode&&Browser.mainLoop.timingValue>1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0)return void Browser.mainLoop.scheduler();0==Browser.mainLoop.timingMode&&(Browser.mainLoop.tickStartTime=_emscripten_get_now()),"timeout"===Browser.mainLoop.method&&Module.ctx&&(Module.printErr("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!"),Browser.mainLoop.method=""),Browser.mainLoop.runIter(f),checkStackCookie(),g<Browser.mainLoop.currentlyRunningMainloop||("object"==typeof SDL&&SDL.audio&&SDL.audio.queueNewAudioData&&SDL.audio.queueNewAudioData(),Browser.mainLoop.scheduler())}}},e||(b&&b>0?_emscripten_set_main_loop_timing(0,1e3/b):_emscripten_set_main_loop_timing(1,1),Browser.mainLoop.scheduler()),c)throw"SimulateInfiniteLoop"}function ___syscall140(a,b){SYSCALLS.varargs=b;try{var c=SYSCALLS.getStreamFromFD(),d=SYSCALLS.get(),e=SYSCALLS.get(),f=SYSCALLS.get(),g=SYSCALLS.get(),h=e;return assert(0===d),FS.llseek(c,h,g),HEAP32[f>>2]=c.position,c.getdents&&0===h&&0===g&&(c.getdents=null),0}catch(a){return void 0!==FS&&a instanceof FS.ErrnoError||abort(a),-a.errno}}function ___syscall146(a,b){SYSCALLS.varargs=b;try{var c=SYSCALLS.getStreamFromFD(),d=SYSCALLS.get(),e=SYSCALLS.get();return SYSCALLS.doWritev(c,d,e)}catch(a){return void 0!==FS&&a instanceof FS.ErrnoError||abort(a),-a.errno}}function ___syscall54(a,b){SYSCALLS.varargs=b;try{var c=SYSCALLS.getStreamFromFD(),d=SYSCALLS.get();switch(d){case 21505:case 21506:return c.tty?0:-ERRNO_CODES.ENOTTY;case 21519:if(!c.tty)return-ERRNO_CODES.ENOTTY;var e=SYSCALLS.get();return HEAP32[e>>2]=0,0;case 21520:return c.tty?-ERRNO_CODES.EINVAL:-ERRNO_CODES.ENOTTY;case 21531:var e=SYSCALLS.get();return FS.ioctl(c,d,e);case 21523:return c.tty?0:-ERRNO_CODES.ENOTTY;default:abort("bad ioctl syscall "+d)}}catch(a){return void 0!==FS&&a instanceof FS.ErrnoError||abort(a),-a.errno}}function ___syscall221(a,b){SYSCALLS.varargs=b;try{var c=SYSCALLS.getStreamFromFD();switch(SYSCALLS.get()){case 0:var e=SYSCALLS.get();if(e<0)return-ERRNO_CODES.EINVAL;var f;return f=FS.open(c.path,c.flags,0,e),f.fd;case 1:case 2:return 0;case 3:return c.flags;case 4:var e=SYSCALLS.get();return c.flags|=e,0;case 12:case 12:var e=SYSCALLS.get();return HEAP16[e+0>>1]=2,0;case 13:case 14:case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:return ___setErrNo(ERRNO_CODES.EINVAL),-1;default:return-ERRNO_CODES.EINVAL}}catch(a){return void 0!==FS&&a instanceof FS.ErrnoError||abort(a),-a.errno}}function ___syscall145(a,b){SYSCALLS.varargs=b;try{var c=SYSCALLS.getStreamFromFD(),d=SYSCALLS.get(),e=SYSCALLS.get();return SYSCALLS.doReadv(c,d,e)}catch(a){return void 0!==FS&&a instanceof FS.ErrnoError||abort(a),-a.errno}}function nullFunc_iiii(a){Module.printErr("Invalid function pointer called with signature 'iiii'. Perhaps this is an invalid value (e.g. caused by calling a virtual method on a NULL pointer)? Or calling a function with an incorrect type, which will fail? (it is worth building your source files with -Werror (warnings are errors), as warnings can indicate undefined behavior which can cause this)"),Module.printErr("Build with ASSERTIONS=2 for more info."),abort(a)}function nullFunc_viiiiiii(a){Module.printErr("Invalid function pointer called with signature 'viiiiiii'. Perhaps this is an invalid value (e.g. caused by calling a virtual method on a NULL pointer)? Or calling a function with an incorrect type, which will fail? (it is worth building your source files with -Werror (warnings are errors), as warnings can indicate undefined behavior which can cause this)"),Module.printErr("Build with ASSERTIONS=2 for more info."),abort(a)}function nullFunc_viiiii(a){Module.printErr("Invalid function pointer called with signature 'viiiii'. Perhaps this is an invalid value (e.g. caused by calling a virtual method on a NULL pointer)? Or calling a function with an incorrect type, which will fail? (it is worth building your source files with -Werror (warnings are errors), as warnings can indicate undefined behavior which can cause this)"),Module.printErr("Build with ASSERTIONS=2 for more info."),abort(a)}function nullFunc_vi(a){Module.printErr("Invalid function pointer called with signature 'vi'. Perhaps this is an invalid value (e.g. caused by calling a virtual method on a NULL pointer)? Or calling a function with an incorrect type, which will fail? (it is worth building your source files with -Werror (warnings are errors), as warnings can indicate undefined behavior which can cause this)"),Module.printErr("Build with ASSERTIONS=2 for more info."),abort(a)}function nullFunc_vii(a){Module.printErr("Invalid function pointer called with signature 'vii'. Perhaps this is an invalid value (e.g. caused by calling a virtual method on a NULL pointer)? Or calling a function with an incorrect type, which will fail? (it is worth building your source files with -Werror (warnings are errors), as warnings can indicate undefined behavior which can cause this)"),Module.printErr("Build with ASSERTIONS=2 for more info."),abort(a)}function nullFunc_ii(a){Module.printErr("Invalid function pointer called with signature 'ii'. Perhaps this is an invalid value (e.g. caused by calling a virtual method on a NULL pointer)? Or calling a function with an incorrect type, which will fail? (it is worth building your source files with -Werror (warnings are errors), as warnings can indicate undefined behavior which can cause this)"),Module.printErr("Build with ASSERTIONS=2 for more info."),abort(a)}function nullFunc_viii(a){Module.printErr("Invalid function pointer called with signature 'viii'. Perhaps this is an invalid value (e.g. caused by calling a virtual method on a NULL pointer)? Or calling a function with an incorrect type, which will fail? (it is worth building your source files with -Werror (warnings are errors), as warnings can indicate undefined behavior which can cause this)"),Module.printErr("Build with ASSERTIONS=2 for more info."),abort(a)}function nullFunc_iiiii(a){Module.printErr("Invalid function pointer called with signature 'iiiii'. Perhaps this is an invalid value (e.g. caused by calling a virtual method on a NULL pointer)? Or calling a function with an incorrect type, which will fail? (it is worth building your source files with -Werror (warnings are errors), as warnings can indicate undefined behavior which can cause this)"),Module.printErr("Build with ASSERTIONS=2 for more info."),abort(a)}function nullFunc_viiiiii(a){Module.printErr("Invalid function pointer called with signature 'viiiiii'. Perhaps this is an invalid value (e.g. caused by calling a virtual method on a NULL pointer)? Or calling a function with an incorrect type, which will fail? (it is worth building your source files with -Werror (warnings are errors), as warnings can indicate undefined behavior which can cause this)"),Module.printErr("Build with ASSERTIONS=2 for more info."),abort(a)}function nullFunc_iii(a){Module.printErr("Invalid function pointer called with signature 'iii'. Perhaps this is an invalid value (e.g. caused by calling a virtual method on a NULL pointer)? Or calling a function with an incorrect type, which will fail? (it is worth building your source files with -Werror (warnings are errors), as warnings can indicate undefined behavior which can cause this)"),Module.printErr("Build with ASSERTIONS=2 for more info."),abort(a)}function nullFunc_viiii(a){Module.printErr("Invalid function pointer called with signature 'viiii'. Perhaps this is an invalid value (e.g. caused by calling a virtual method on a NULL pointer)? Or calling a function with an incorrect type, which will fail? (it is worth building your source files with -Werror (warnings are errors), as warnings can indicate undefined behavior which can cause this)"),Module.printErr("Build with ASSERTIONS=2 for more info."),abort(a)}function invoke_iiii(a,b,c,d){try{return Module.dynCall_iiii(a,b,c,d)}catch(a){if("number"!=typeof a&&"longjmp"!==a)throw a;Module.setThrew(1,0)}}function invoke_viiiiiii(a,b,c,d,e,f,g,h){try{Module.dynCall_viiiiiii(a,b,c,d,e,f,g,h)}catch(a){if("number"!=typeof a&&"longjmp"!==a)throw a;Module.setThrew(1,0)}}function invoke_viiiii(a,b,c,d,e,f){try{Module.dynCall_viiiii(a,b,c,d,e,f)}catch(a){if("number"!=typeof a&&"longjmp"!==a)throw a;Module.setThrew(1,0)}}function invoke_vi(a,b){try{Module.dynCall_vi(a,b)}catch(a){if("number"!=typeof a&&"longjmp"!==a)throw a;Module.setThrew(1,0)}}function invoke_vii(a,b,c){try{Module.dynCall_vii(a,b,c)}catch(a){if("number"!=typeof a&&"longjmp"!==a)throw a;Module.setThrew(1,0)}}function invoke_ii(a,b){try{return Module.dynCall_ii(a,b)}catch(a){if("number"!=typeof a&&"longjmp"!==a)throw a;Module.setThrew(1,0)}}function invoke_viii(a,b,c,d){try{Module.dynCall_viii(a,b,c,d)}catch(a){if("number"!=typeof a&&"longjmp"!==a)throw a;Module.setThrew(1,0)}}function invoke_iiiii(a,b,c,d,e){try{return Module.dynCall_iiiii(a,b,c,d,e)}catch(a){if("number"!=typeof a&&"longjmp"!==a)throw a;Module.setThrew(1,0)}}function invoke_viiiiii(a,b,c,d,e,f,g){try{Module.dynCall_viiiiii(a,b,c,d,e,f,g)}catch(a){if("number"!=typeof a&&"longjmp"!==a)throw a;Module.setThrew(1,0)}}function invoke_iii(a,b,c){try{return Module.dynCall_iii(a,b,c)}catch(a){if("number"!=typeof a&&"longjmp"!==a)throw a;Module.setThrew(1,0)}}function invoke_viiii(a,b,c,d,e){try{Module.dynCall_viiii(a,b,c,d,e)}catch(a){if("number"!=typeof a&&"longjmp"!==a)throw a;Module.setThrew(1,0)}}function ExitStatus(a){this.name="ExitStatus",this.message="Program terminated with exit("+a+")",this.status=a}function run(a){function b(){Module.calledRun||(Module.calledRun=!0,ABORT||(ensureInitRuntime(),preMain(),ENVIRONMENT_IS_WEB&&null!==preloadStartTime&&Module.printErr("pre-main prep time: "+(Date.now()-preloadStartTime)+" ms"),Module.onRuntimeInitialized&&Module.onRuntimeInitialized(),Module._main&&shouldRunNow&&Module.callMain(a),postRun()))}if(a=a||Module.arguments,null===preloadStartTime&&(preloadStartTime=Date.now()),runDependencies>0)return void Module.printErr("run() called, but dependencies remain, so not running");writeStackCookie(),preRun(),runDependencies>0||Module.calledRun||(Module.setStatus?(Module.setStatus("Running..."),setTimeout(function(){setTimeout(function(){Module.setStatus("")},1),b()},1)):b(),checkStackCookie())}function exit(a,b){if(b&&Module.noExitRuntime)return void Module.printErr("exit("+a+") implicitly called by end of main(), but noExitRuntime, so not exiting the runtime (you can use emscripten_force_exit, if you want to force a true shutdown)");Module.noExitRuntime?Module.printErr("exit("+a+") called, but noExitRuntime, so halting execution but not exiting the runtime or preventing further async execution (you can use emscripten_force_exit, if you want to force a true shutdown)"):(ABORT=!0,EXITSTATUS=a,STACKTOP=initialStackTop,exitRuntime(),Module.onExit&&Module.onExit(a)),ENVIRONMENT_IS_NODE&&process.exit(a),Module.quit(a,new ExitStatus(a))}function abort(a){void 0!==a?(Module.print(a),Module.printErr(a),a=JSON.stringify(a)):a="",ABORT=!0,EXITSTATUS=1;var b="",c="abort("+a+") at "+stackTrace()+b;throw abortDecorators&&abortDecorators.forEach(function(b){c=b(c,a)}),c}Module.preRun.push(function(){Module.FS=FS});var Module;Module||(Module=(void 0!==Module?Module:null)||{});var moduleOverrides={};for(var key in Module)Module.hasOwnProperty(key)&&(moduleOverrides[key]=Module[key]);var ENVIRONMENT_IS_WEB=!1,ENVIRONMENT_IS_WORKER=!1,ENVIRONMENT_IS_NODE=!1,ENVIRONMENT_IS_SHELL=!1;if(Module.ENVIRONMENT)if("WEB"===Module.ENVIRONMENT)ENVIRONMENT_IS_WEB=!0;else if("WORKER"===Module.ENVIRONMENT)ENVIRONMENT_IS_WORKER=!0;else if("NODE"===Module.ENVIRONMENT)ENVIRONMENT_IS_NODE=!0;else{if("SHELL"!==Module.ENVIRONMENT)throw new Error("The provided Module['ENVIRONMENT'] value is not valid. It must be one of: WEB|WORKER|NODE|SHELL.");ENVIRONMENT_IS_SHELL=!0}else ENVIRONMENT_IS_WEB="object"==typeof window,ENVIRONMENT_IS_WORKER="function"==typeof importScripts,ENVIRONMENT_IS_NODE="object"==typeof process&&"function"==typeof require&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER,ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;if(ENVIRONMENT_IS_NODE){Module.print||(Module.print=console.log),Module.printErr||(Module.printErr=console.warn);var nodeFS,nodePath;Module.read=function(b,c){nodeFS||(nodeFS=require("fs")),nodePath||(nodePath=require("path")),b=nodePath.normalize(b);var d=nodeFS.readFileSync(b);return c?d:d.toString()},Module.readBinary=function(b){var c=Module.read(b,!0);return c.buffer||(c=new Uint8Array(c)),assert(c.buffer),c},Module.load=function(b){globalEval(read(b))},Module.thisProgram||(process.argv.length>1?Module.thisProgram=process.argv[1].replace(/\\/g,"/"):Module.thisProgram="unknown-program"),Module.arguments=process.argv.slice(2),"undefined"!=typeof module&&(module.exports=Module),process.on("uncaughtException",function(a){if(!(a instanceof ExitStatus))throw a}),Module.inspect=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL)Module.print||(Module.print=print),"undefined"!=typeof printErr&&(Module.printErr=printErr),"undefined"!=typeof read?Module.read=read:Module.read=function(){throw"no read() available"},Module.readBinary=function(b){if("function"==typeof readbuffer)return new Uint8Array(readbuffer(b));var c=read(b,"binary");return assert("object"==typeof c),c},"undefined"!=typeof scriptArgs?Module.arguments=scriptArgs:void 0!==arguments&&(Module.arguments=arguments),"function"==typeof quit&&(Module.quit=function(a,b){quit(a)});else{if(!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER)throw"Unknown runtime environment. Where are we?";if(Module.read=function(b){var c=new XMLHttpRequest;return c.open("GET",b,!1),c.send(null),c.responseText},ENVIRONMENT_IS_WORKER&&(Module.readBinary=function(b){var c=new XMLHttpRequest;return c.open("GET",b,!1),c.responseType="arraybuffer",c.send(null),c.response}),Module.readAsync=function(b,c,d){var e=new XMLHttpRequest;e.open("GET",b,!0),e.responseType="arraybuffer",e.onload=function(){200==e.status||0==e.status&&e.response?c(e.response):d()},e.onerror=d,e.send(null)},void 0!==arguments&&(Module.arguments=arguments),"undefined"!=typeof console)Module.print||(Module.print=function(b){console.log(b)}),Module.printErr||(Module.printErr=function(b){console.warn(b)});else{var TRY_USE_DUMP=!1;Module.print||(Module.print=TRY_USE_DUMP&&"undefined"!=typeof dump?function(a){dump(a)}:function(a){})}ENVIRONMENT_IS_WORKER&&(Module.load=importScripts),void 0===Module.setWindowTitle&&(Module.setWindowTitle=function(a){document.title=a})}!Module.load&&Module.read&&(Module.load=function(b){globalEval(Module.read(b))}),Module.print||(Module.print=function(){}),Module.printErr||(Module.printErr=Module.print),Module.arguments||(Module.arguments=[]),Module.thisProgram||(Module.thisProgram="./this.program"),Module.quit||(Module.quit=function(a,b){throw b}),Module.print=Module.print,Module.printErr=Module.printErr,Module.preRun=[],Module.postRun=[];for(var key in moduleOverrides)moduleOverrides.hasOwnProperty(key)&&(Module[key]=moduleOverrides[key]);moduleOverrides=void 0;var Runtime={setTempRet0:function(a){return tempRet0=a,a},getTempRet0:function(){return tempRet0},stackSave:function(){return STACKTOP},stackRestore:function(a){STACKTOP=a},getNativeTypeSize:function(a){switch(a){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:if("*"===a[a.length-1])return Runtime.QUANTUM_SIZE;if("i"===a[0]){var b=parseInt(a.substr(1));return assert(b%8==0),b/8}return 0}},getNativeFieldSize:function(a){return Math.max(Runtime.getNativeTypeSize(a),Runtime.QUANTUM_SIZE)},STACK_ALIGN:16,prepVararg:function(a,b){return"double"===b||"i64"===b?7&a&&(assert(4==(7&a)),a+=4):assert(0==(3&a)),a},getAlignSize:function(a,b,c){return c||"i64"!=a&&"double"!=a?a?Math.min(b||(a?Runtime.getNativeFieldSize(a):0),Runtime.QUANTUM_SIZE):Math.min(b,8):8},dynCall:function(a,b,c){return c&&c.length?(assert(c.length==a.length-1),assert("dynCall_"+a in Module,"bad function pointer type - no table for sig '"+a+"'"),Module["dynCall_"+a].apply(null,[b].concat(c))):(assert(1==a.length),assert("dynCall_"+a in Module,"bad function pointer type - no table for sig '"+a+"'"),Module["dynCall_"+a].call(null,b))},functionPointers:[],addFunction:function(a){for(var b=0;b<Runtime.functionPointers.length;b++)if(!Runtime.functionPointers[b])return Runtime.functionPointers[b]=a,2*(1+b);throw"Finished up all reserved function pointers. Use a higher value for RESERVED_FUNCTION_POINTERS."},removeFunction:function(a){Runtime.functionPointers[(a-2)/2]=null},warnOnce:function(a){Runtime.warnOnce.shown||(Runtime.warnOnce.shown={}),Runtime.warnOnce.shown[a]||(Runtime.warnOnce.shown[a]=1,Module.printErr(a))},funcWrappers:{},getFuncWrapper:function(a,b){assert(b),Runtime.funcWrappers[b]||(Runtime.funcWrappers[b]={});var c=Runtime.funcWrappers[b];return c[a]||(1===b.length?c[a]=function(){return Runtime.dynCall(b,a)}:2===b.length?c[a]=function(d){return Runtime.dynCall(b,a,[d])}:c[a]=function(){return Runtime.dynCall(b,a,Array.prototype.slice.call(arguments))}),c[a]},getCompilerSetting:function(a){throw"You must build with -s RETAIN_COMPILER_SETTINGS=1 for Runtime.getCompilerSetting or emscripten_get_compiler_setting to work"},stackAlloc:function(a){var b=STACKTOP;return STACKTOP=STACKTOP+a|0,STACKTOP=STACKTOP+15&-16,assert((0|STACKTOP)<(0|STACK_MAX)|0),b},staticAlloc:function(a){var b=STATICTOP;return STATICTOP=STATICTOP+(assert(!staticSealed),a)|0,STATICTOP=STATICTOP+15&-16,b},dynamicAlloc:function(a){assert(DYNAMICTOP_PTR);var b=HEAP32[DYNAMICTOP_PTR>>2],c=-16&(b+a+15|0);if(HEAP32[DYNAMICTOP_PTR>>2]=c,c>=TOTAL_MEMORY){if(!enlargeMemory())return HEAP32[DYNAMICTOP_PTR>>2]=b,0}return b},alignMemory:function(a,b){return a=Math.ceil(a/(b||16))*(b||16)},makeBigInt:function(a,b,c){return c?+(a>>>0)+4294967296*+(b>>>0):+(a>>>0)+4294967296*+(0|b)},GLOBAL_BASE:8,QUANTUM_SIZE:4,__dummy__:0};Module.Runtime=Runtime;var ABORT=0,EXITSTATUS=0,globalScope=this,cwrap,ccall;!function(){function parseJSFunc(a){var b=a.toString().match(sourceRegex).slice(1);return{arguments:b[0],body:b[1],returnValue:b[2]}}function ensureJSsource(){if(!JSsource){JSsource={};for(var a in JSfuncs)JSfuncs.hasOwnProperty(a)&&(JSsource[a]=parseJSFunc(JSfuncs[a]))}}var JSfuncs={stackSave:function(){Runtime.stackSave()},stackRestore:function(){Runtime.stackRestore()},arrayToC:function(a){var b=Runtime.stackAlloc(a.length);return writeArrayToMemory(a,b),b},stringToC:function(a){var b=0;if(null!==a&&void 0!==a&&0!==a){var c=1+(a.length<<2);b=Runtime.stackAlloc(c),stringToUTF8(a,b,c)}return b}},toC={string:JSfuncs.stringToC,array:JSfuncs.arrayToC};ccall=function(b,c,d,e,f){var g=getCFunc(b),h=[],i=0;if(assert("array"!==c,'Return type should not be "array".'),e)for(var j=0;j<e.length;j++){var k=toC[d[j]];k?(0===i&&(i=Runtime.stackSave()),h[j]=k(e[j])):h[j]=e[j]}var l=g.apply(null,h);if(f&&f.async||"object"!=typeof EmterpreterAsync||assert(!EmterpreterAsync.state,"cannot start async op with normal JS calling ccall"),f&&f.async&&assert(!c,"async ccalls cannot return values"),"string"===c&&(l=Pointer_stringify(l)),0!==i){if(f&&f.async)return void EmterpreterAsync.asyncFinalizers.push(function(){Runtime.stackRestore(i)});Runtime.stackRestore(i)}return l};var sourceRegex=/^function\s*[a-zA-Z$_0-9]*\s*\(([^)]*)\)\s*{\s*([^*]*?)[\s;]*(?:return\s*(.*?)[;\s]*)?}$/,JSsource=null;cwrap=function cwrap(ident,returnType,argTypes){argTypes=argTypes||[];var cfunc=getCFunc(ident),numericArgs=argTypes.every(function(a){return"number"===a}),numericRet="string"!==returnType;if(numericRet&&numericArgs)return cfunc;var argNames=argTypes.map(function(a,b){return"$"+b}),funcstr="(function("+argNames.join(",")+") {",nargs=argTypes.length;if(!numericArgs){ensureJSsource(),funcstr+="var stack = "+JSsource.stackSave.body+";";for(var i=0;i<nargs;i++){var arg=argNames[i],type=argTypes[i];if("number"!==type){var convertCode=JSsource[type+"ToC"];funcstr+="var "+convertCode.arguments+" = "+arg+";",funcstr+=convertCode.body+";",funcstr+=arg+"=("+convertCode.returnValue+");"}}}var cfuncname=parseJSFunc(function(){return cfunc}).returnValue;if(funcstr+="var ret = "+cfuncname+"("+argNames.join(",")+");",!numericRet){var strgfy=parseJSFunc(function(){return Pointer_stringify}).returnValue;funcstr+="ret = "+strgfy+"(ret);"}return funcstr+="if (typeof EmterpreterAsync === 'object') { assert(!EmterpreterAsync.state, 'cannot start async op with normal JS calling cwrap') }",numericArgs||(ensureJSsource(),funcstr+=JSsource.stackRestore.body.replace("()","(stack)")+";"),funcstr+="return ret})",eval(funcstr)}}(),Module.ccall=ccall,Module.cwrap=cwrap,Module.setValue=setValue,Module.getValue=getValue;var ALLOC_NORMAL=0,ALLOC_STACK=1,ALLOC_STATIC=2,ALLOC_DYNAMIC=3,ALLOC_NONE=4;Module.ALLOC_NORMAL=ALLOC_NORMAL,Module.ALLOC_STACK=ALLOC_STACK,Module.ALLOC_STATIC=ALLOC_STATIC,Module.ALLOC_DYNAMIC=ALLOC_DYNAMIC,Module.ALLOC_NONE=ALLOC_NONE,Module.allocate=allocate,Module.getMemory=getMemory,Module.Pointer_stringify=Pointer_stringify,Module.AsciiToString=AsciiToString,Module.stringToAscii=stringToAscii;var UTF8Decoder="undefined"!=typeof TextDecoder?new TextDecoder("utf8"):void 0;Module.UTF8ArrayToString=UTF8ArrayToString,Module.UTF8ToString=UTF8ToString,Module.stringToUTF8Array=stringToUTF8Array,Module.stringToUTF8=stringToUTF8,Module.lengthBytesUTF8=lengthBytesUTF8;var UTF16Decoder="undefined"!=typeof TextDecoder?new TextDecoder("utf-16le"):void 0;Module.stackTrace=stackTrace;var PAGE_SIZE=16384,WASM_PAGE_SIZE=65536,ASMJS_PAGE_SIZE=16777216,MIN_TOTAL_MEMORY=16777216,HEAP,buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64,STATIC_BASE,STATICTOP,staticSealed,STACK_BASE,STACKTOP,STACK_MAX,DYNAMIC_BASE,DYNAMICTOP_PTR;STATIC_BASE=STATICTOP=STACK_BASE=STACKTOP=STACK_MAX=DYNAMIC_BASE=DYNAMICTOP_PTR=0,staticSealed=!1;var TOTAL_STACK=Module.TOTAL_STACK||5242880,TOTAL_MEMORY=Module.TOTAL_MEMORY||16777216;if(TOTAL_MEMORY<TOTAL_STACK&&Module.printErr("TOTAL_MEMORY should be larger than TOTAL_STACK, was "+TOTAL_MEMORY+"! (TOTAL_STACK="+TOTAL_STACK+")"),assert("undefined"!=typeof Int32Array&&"undefined"!=typeof Float64Array&&!!new Int32Array(1).subarray&&!!new Int32Array(1).set,"JS engine does not provide full typed array support"),Module.buffer?(buffer=Module.buffer,assert(buffer.byteLength===TOTAL_MEMORY,"provided buffer should be "+TOTAL_MEMORY+" bytes, but it is "+buffer.byteLength)):(buffer=new ArrayBuffer(TOTAL_MEMORY),assert(buffer.byteLength===TOTAL_MEMORY)),updateGlobalBufferViews(),HEAP32[0]=1668509029,HEAP16[1]=25459,115!==HEAPU8[2]||99!==HEAPU8[3])throw"Runtime error: expected the system to be little-endian!";Module.HEAP=HEAP,Module.buffer=buffer,Module.HEAP8=HEAP8,Module.HEAP16=HEAP16,Module.HEAP32=HEAP32,Module.HEAPU8=HEAPU8,Module.HEAPU16=HEAPU16,Module.HEAPU32=HEAPU32,Module.HEAPF32=HEAPF32,Module.HEAPF64=HEAPF64;var __ATPRERUN__=[],__ATINIT__=[],__ATMAIN__=[],__ATEXIT__=[],__ATPOSTRUN__=[],runtimeInitialized=!1,runtimeExited=!1;Module.addOnPreRun=addOnPreRun,Module.addOnInit=addOnInit,Module.addOnPreMain=addOnPreMain,Module.addOnExit=addOnExit,Module.addOnPostRun=addOnPostRun,Module.intArrayFromString=intArrayFromString,Module.intArrayToString=intArrayToString,Module.writeStringToMemory=writeStringToMemory,Module.writeArrayToMemory=writeArrayToMemory,Module.writeAsciiToMemory=writeAsciiToMemory,Math.imul&&-5===Math.imul(4294967295,5)||(Math.imul=function(b,c){var d=b>>>16,e=65535&b,f=c>>>16,g=65535&c;return e*g+(d*g+e*f<<16)|0}),Math.imul=Math.imul,Math.clz32||(Math.clz32=function(a){a>>>=0;for(var b=0;b<32;b++)if(a&1<<31-b)return b;return 32}),Math.clz32=Math.clz32,Math.trunc||(Math.trunc=function(a){return a<0?Math.ceil(a):Math.floor(a)}),Math.trunc=Math.trunc;var Math_abs=Math.abs,Math_cos=Math.cos,Math_sin=Math.sin,Math_tan=Math.tan,Math_acos=Math.acos,Math_asin=Math.asin,Math_atan=Math.atan,Math_atan2=Math.atan2,Math_exp=Math.exp,Math_log=Math.log,Math_sqrt=Math.sqrt,Math_ceil=Math.ceil,Math_floor=Math.floor,Math_pow=Math.pow,Math_imul=Math.imul,Math_fround=Math.fround,Math_round=Math.round,Math_min=Math.min,Math_clz32=Math.clz32,Math_trunc=Math.trunc,runDependencies=0,runDependencyWatcher=null,dependenciesFulfilled=null,runDependencyTracking={};Module.addRunDependency=addRunDependency,Module.removeRunDependency=removeRunDependency,Module.preloadedImages={},Module.preloadedAudios={};var memoryInitializer=null,ASM_CONSTS=[];STATIC_BASE=8,STATICTOP=STATIC_BASE+77840,__ATINIT__.push(),allocate([108,210,0,0,118,210,0,0,149,210,0,0,194,210,0,0,255,210,0,0,42,211,0,0,99,211,0,0,145,211,0,0,188,211,0,0,221,211,0,0,252,211,0,0,0,0,0,0,0,0,0,0,221,248,0,0,2,0,0,0,245,248,0,0,3,0,0,0,133,216,0,0,4,0,0,0,164,220,0,0,10,0,0,0,65,0,1,0,8,0,0,0,58,0,1,0,9,0,0,0,72,0,1,0,11,0,0,0,167,216,0,0,12,0,0,0,174,216,0,0,13,0,0,0,78,0,1,0,6,0,0,0,181,216,0,0,14,0,0,0,31,255,0,0,15,0,0,0,6,255,0,0,16,0,0,0,44,255,0,0,17,0,0,0,30,14,1,0,19,0,0,0,187,216,0,0,21,0,0,0,192,216,0,0,255,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,4,0,0,0,5,0,0,0,6,0,0,0,7,0,0,0,8,0,0,0,9,0,0,0,10,0,0,0,11,0,0,0,12,0,0,0,13,0,0,0,14,0,0,0,15,0,0,0,16,0,0,0,17,0,0,0,18,0,0,0,19,0,0,0,20,0,0,0,21,0,0,0,22,0,0,0,23,0,0,0,24,0,0,0,25,0,0,0,26,0,0,0,27,0,0,0,28,0,0,0,29,0,0,0,30,0,0,0,31,0,0,0,32,0,0,0,33,0,0,0,33,0,0,0,35,0,0,0,36,0,0,0,37,0,0,0,38,0,0,0,39,0,0,0,40,0,0,0,41,0,0,0,42,0,0,0,43,0,0,0,44,0,0,0,45,0,0,0,46,0,0,0,47,0,0,0,48,0,0,0,49,0,0,0,50,0,0,0,51,0,0,0,52,0,0,0,53,0,0,0,54,0,0,0,55,0,0,0,56,0,0,0,57,0,0,0,58,0,0,0,59,0,0,0,60,0,0,0,61,0,0,0,62,0,0,0,63,0,0,0,64,0,0,0,65,0,0,0,66,0,0,0,67,0,0,0,68,0,0,0,69,0,0,0,70,0,0,0,71,0,0,0,72,0,0,0,73,0,0,0,74,0,0,0,75,0,0,0,34,0,0,0,167,234,0,0,172,234,0,0,178,234,0,0,189,234,0,0,203,234,0,0,218,234,0,0,230,234,0,0,244,234,0,0,255,234,0,0,14,235,0,0,28,235,0,0,42,235,0,0,54,235,0,0,68,235,0,0,83,235,0,0,98,235,0,0,110,235,0,0,123,235,0,0,137,235,0,0,150,235,0,0,163,235,0,0,176,235,0,0,190,235,0,0,203,235,0,0,216,235,0,0,230,235,0,0,241,235,0,0,252,235,0,0,12,236,0,0,29,236,0,0,47,236,0,0,62,236,0,0,76,236,0,0,90,236,0,0,103,236,0,0,115,236,0,0,128,236,0,0,142,236,0,0,154,236,0,0,165,236,0,0,177,236,0,0,189,236,0,0,205,236,0,0,220,236,0,0,235,236,0,0,251,236,0,0,9,237,0,0,23,237,0,0,35,237,0,0,51,237,0,0,67,237,0,0,87,237,0,0,99,237,0,0,104,237,0,0,110,237,0,0,116,237,0,0,126,237,0,0,132,237,0,0,139,237,0,0,148,237,0,0,155,237,0,0,161,237,0,0,170,237,0,0,178,237,0,0,186,237,0,0,199,237,0,0,211,237,0,0,220,237,0,0,230,237,0,0,242,237,0,0,249,237,0,0,1,238,0,0,6,238,0,0,11,238,0,0,15,238,0,0,20,238,0,0,25,238,0,0,30,238,0,0,35,238,0,0,42,238,0,0,48,238,0,0,55,238,0,0,63,238,0,0,69,238,0,0,75,238,0,0,81,238,0,0,87,238,0,0,94,238,0,0,101,238,0,0,109,238,0,0,117,238,0,0,126,238,0,0,133,238,0,0,141,238,0,0,153,238,0,0,161,238,0,0,169,238,0,0,177,238,0,0,189,238,0,0,195,238,0,0,202,238,0,0,210,238,0,0,218,238,0,0,230,238,0,0,241,238,0,0,254,238,0,0,10,239,0,0,23,239,0,0,36,239,0,0,44,239,0,0,57,239,0,0,70,239,0,0,85,239,0,0,103,239,0,0,119,239,0,0,134,239,0,0,142,239,0,0,146,239,0,0,150,239,0,0,154,239,0,0,158,239,0,0,162,239,0,0,166,239,0,0,170,239,0,0,174,239,0,0,178,239,0,0,182,239,0,0,186,239,0,0,190,239,0,0,194,239,0,0,206,239,0,0,210,239,0,0,214,239,0,0,226,239,0,0,230,239,0,0,234,239,0,0,238,239,0,0,242,239,0,0,246,239,0,0,250,239,0,0,254,239,0,0,2,240,0,0,6,240,0,0,10,240,0,0,15,240,0,0,23,240,0,0,31,240,0,0,35,240,0,0,48,240,0,0,58,240,0,0,67,240,0,0,70,240,0,0,79,240,0,0,88,240,0,0,94,240,0,0,99,240,0,0,103,240,0,0,116,240,0,0,121,240,0,0,132,240,0,0,145,240,0,0,159,240,0,0,175,240,0,0,179,240,0,0,187,240,0,0,192,240,0,0,203,240,0,0,214,240,0,0,224,240,0,0,234,240,0,0,244,240,0,0,254,240,0,0,2,241,0,0,8,241,0,0,14,241,0,0,20,241,0,0,25,241,0,0,36,241,0,0,40,241,0,0,43,241,0,0,52,241,0,0,56,241,0,0,66,241,0,0,76,241,0,0,87,241,0,0,102,241,0,0,116,241,0,0,126,241,0,0,139,241,0,0,142,241,0,0,152,241,0,0,166,241,0,0,171,241,0,0,176,241,0,0,184,241,0,0,187,241,0,0,190,241,0,0,194,241,0,0,199,241,0,0,203,241,0,0,207,241,0,0,212,241,0,0,217,241,0,0,222,241,0,0,227,241,0,0,232,241,0,0,237,241,0,0,241,241,0,0,245,241,0,0,249,241,0,0,253,241,0,0,1,242,0,0,5,242,0,0,9,242,0,0,13,242,0,0,27,242,0,0,32,242,0,0,35,242,0,0,43,242,0,0,52,242,0,0,60,242,0,0,67,242,0,0,79,242,0,0,87,242,0,0,99,242,0,0,115,242,0,0,131,242,0,0,143,242,0,0,152,242,0,0,157,242,0,0,168,242,0,0,180,242,0,0,189,242,0,0,194,242,0,0,205,242,0,0,217,242,0,0,229,242,0,0,233,242,0,0,237,242,0,0,247,242,0,0,253,242,0,0,8,243,0,0,17,243,0,0,25,243,0,0,36,243,0,0,44,243,0,0,51,243,0,0,62,243,0,0,76,243,0,0,80,243,0,0,88,243,0,0,95,243,0,0,103,243,0,0,122,243,0,0,137,243,0,0,150,243,0,0,169,243,0,0,191,243,0,0,195,243,0,0,201,243,0,0,208,243,0,0,221,243,0,0,225,243,0,0,233,243,0,0,241,243,0,0,250,243,0,0,2,244,0,0,10,244,0,0,100,0,1,0,18,244,0,0,23,244,0,0,33,244,0,0,40,244,0,0,50,244,0,0,61,244,0,0,72,244,0,0,78,244,0,0,89,244,0,0,95,244,0,0,107,244,0,0,122,244,0,0,131,244,0,0,144,244,0,0,155,244,0,0,167,244,0,0,179,244,0,0,195,244,0,0,205,244,0,0,210,244,0,0,221,244,0,0,228,244,0,0,234,244,0,0,244,244,0,0,255,244,0,0,10,245,0,0,23,245,0,0,33,245,0,0,40,245,0,0,47,245,0,0,56,245,0,0,64,245,0,0,69,245,0,0,72,245,0,0,77,245,0,0,83,245,0,0,0,0,0,0,244,39,1,0,0,0,0,0,0,0,0,0,0,0,0,0,244,39,1,0,0,0,0,0,0,0,0,0,0,0,0,0,244,39,1,0,0,0,0,0,0,0,0,0,0,0,0,0,244,39,1,0,0,0,0,0,0,0,0,0,0,0,0,0,244,39,1,0,0,0,0,0,0,0,0,0,0,0,0,0,244,39,1,0,0,0,0,0,0,0,0,0,0,0,0,0,244,39,1,0,0,0,0,0,0,0,0,0,0,0,0,0,244,39,1,0,0,0,0,0,0,0,0,0,0,0,0,0,195,248,0,0,20,1,0,0,20,1,0,0,6,0,0,0,201,248,0,0,17,1,0,0,17,1,0,0,0,0,0,0,206,248,0,0,33,1,0,0,33,1,0,0,1,0,0,0,210,248,0,0,13,1,0,0,13,1,0,0,0,0,0,0,100,14,1,0,14,1,0,0,14,1,0,0,1,0,0,0,27,242,0,0,15,1,0,0,15,1,0,0,0,0,0,0,217,248,0,0,38,1,0,0,38,1,0,0,4,0,0,0,221,248,0,0,35,1,0,0,35,1,0,0,1,0,0,0,227,248,0,0,32,1,0,0,32,1,0,0,1,0,0,0,232,248,0,0,16,1,0,0,16,1,0,0,10,0,0,0,238,248,0,0,12,1,0,0,43,1,0,0,6,0,0,0,245,248,0,0,34,1,0,0,34,1,0,0,1,0,0,0,250,248,0,0,9,1,0,0,42,1,0,0,10,0,0,0,0,249,0,0,7,1,0,0,40,1,0,0,10,0,0,0,7,249,0,0,29,1,0,0,29,1,0,0,6,0,0,0,14,249,0,0,4,1,0,0,4,1,0,0,7,0,0,0,18,249,0,0,36,1,0,0,36,1,0,0,10,0,0,0,32,242,0,0,25,1,0,0,25,1,0,0,0,0,0,0,22,249,0,0,30,1,0,0,30,1,0,0,4,0,0,0,28,249,0,0,10,1,0,0,10,1,0,0,10,0,0,0,32,249,0,0,11,1,0,0,11,1,0,0,7,0,0,0,38,249,0,0,37,1,0,0,37,1,0,0,10,0,0,0,41,249,0,0,24,1,0,0,24,1,0,0,10,0,0,0,44,249,0,0,19,1,0,0,19,1,0,0,10,0,0,0,49,249,0,0,23,1,0,0,23,1,0,0,1,0,0,0,55,249,0,0,6,1,0,0,39,1,0,0,10,0,0,0,58,249,0,0,18,1,0,0,18,1,0,0,10,0,0,0,63,249,0,0,22,1,0,0,22,1,0,0,1,0,0,0,68,249,0,0,21,1,0,0,21,1,0,0,6,0,0,0,73,249,0,0,31,1,0,0,31,1,0,0,4,0,0,0,79,249,0,0,3,1,0,0,3,1,0,0,10,0,0,0,94,14,1,0,5,1,0,0,5,1,0,0,0,0,0,0,86,249,0,0,47,1,0,0,47,1,0,0,1,0,0,0,95,249,0,0,48,1,0,0,48,1,0,0,1,0,0,0,104,249,0,0,49,1,0,0,49,1,0,0,1,0,0,0,117,249,0,0,46,1,0,0,46,1,0,0,1,0,0,0,121,249,0,0,44,1,0,0,44,1,0,0,7,0,0,0,127,249,0,0,45,1,0,0,45,1,0,0,1,0,0,0,244,39,1,0,0,0,0,0,0,0,0,0,0,0,0,0,31,11,1,0,2,1,0,0,2,1,0,0,9,0,0,0,244,39,1,0,0,0,0,0,0,0,0,0,0,0,0,0,244,39,1,0,0,0,0,0,0,0,0,0,0,0,0,0,133,249,0,0,8,1,0,0,41,1,0,0,10,0,0,0,35,0,0,0,248,9,0,0,5,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,3,0,0,0,253,39,1,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,224,37,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,108,11,0,0,9,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,3,0,0,0,5,40,1,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,236,11,0,0,5,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,3,0,0,0,13,44,1,0,0,4,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,236,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,0,0,0,100,0,0,0,232,3,0,0,16,39,0,0,160,134,1,0,64,66,15,0,128,150,152,0,0,225,245,5,95,112,137,0,255,9,47,15,253,252,126,0,160,9,253,252,84,27,100,34,171,35,250,20,253,252,17,33,17,33,253,252,253,252,209,34,249,24,25,19,250,29,250,29,253,252,253,252,250,29,13,12,132,10,253,252,253,252,253,252,253,252,181,0,249,24,253,252,230,255,253,252,253,252,131,21,7,11,253,252,253,252,12,22,253,252,253,252,253,252,253,252,253,252,253,252,253,252,130,33,130,33,90,0,194,16,215,255,107,30,77,31,9,26,253,252,233,23,115,2,98,3,105,3,115,3,193,1,253,252,235,0,243,33,130,33,253,252,246,0,253,252,185,4,253,252,123,1,253,252,253,252,101,0,37,0,253,252,36,0,62,35,253,252,117,0,117,11,7,0,87,0,13,0,66,0,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,14,0,92,0,253,252,49,0,51,0,253,252,253,252,253,252,253,252,253,252,31,0,53,0,141,0,133,1,144,1,17,33,75,1,52,17,115,1,253,252,175,0,253,252,213,0,253,252,253,252,51,0,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,45,0,74,0,83,0,100,0,253,252,253,252,253,252,253,252,253,252,253,252,129,0,187,0,253,252,204,0,253,252,214,0,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,13,0,162,13,26,1,123,1,109,0,20,1,139,1,25,0,48,1,50,0,109,0,17,33,17,33,86,1,253,252,253,252,167,1,121,1,54,0,95,0,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,113,24,253,252,253,252,19,1,253,252,253,252,253,252,246,0,151,1,253,252,253,252,43,1,130,33,130,33,130,33,130,33,253,252,117,11,110,1,253,252,253,252,68,1,70,1,253,252,253,252,253,252,167,18,253,252,250,29,250,29,253,252,253,252,139,19,17,33,253,252,253,252,79,1,166,17,253,252,26,2,146,1,106,1,54,28,194,16,83,1,246,0,185,4,72,1,103,1,253,252,17,33,72,1,89,1,94,0,106,0,253,252,110,1,100,1,106,0,253,252,186,1,24,36,99,1,39,2,133,2,137,2,246,2,253,252,253,252,253,252,253,252,169,3,253,252,253,252,253,252,253,252,253,252,253,252,125,1,44,3,253,252,253,252,179,3,253,252,187,3,253,252,201,3,253,252,78,2,174,1,178,1,253,252,253,252,253,252,253,252,253,19,17,33,17,33,17,33,17,33,54,28,17,33,17,33,253,252,253,252,190,31,253,252,194,16,118,26,113,1,190,31,130,33,130,33,130,33,130,33,130,33,130,33,130,33,130,33,130,33,130,33,130,33,130,33,130,33,130,33,130,33,130,33,130,33,130,33,130,33,130,33,130,33,130,33,130,33,130,33,130,33,130,33,235,8,250,29,47,37,253,252,253,252,251,40,253,252,253,252,253,252,243,33,243,33,253,252,156,1,253,252,123,1,253,252,9,3,253,252,253,252,253,252,253,252,253,252,128,37,250,29,209,37,162,13,17,33,253,252,253,252,245,1,250,1,67,0,253,252,49,14,249,1,130,33,34,38,250,29,115,38,130,33,130,33,79,15,55,0,55,0,103,0,196,38,250,29,21,39,253,252,204,1,253,252,125,1,151,1,47,32,2,2,253,252,253,252,253,252,253,252,130,33,227,26,253,252,253,252,220,30,253,252,72,1,136,1,253,252,253,252,72,1,253,252,162,1,163,1,253,252,71,0,253,252,253,252,249,24,193,15,184,1,34,38,115,38,130,33,185,4,72,1,253,252,253,252,110,20,171,1,123,1,253,252,253,252,197,27,253,252,253,252,77,31,253,252,253,252,253,252,9,3,36,0,24,36,253,252,24,36,102,39,250,29,183,39,194,1,253,252,253,252,253,252,253,252,132,4,253,252,253,252,253,252,253,252,50,4,253,252,253,252,253,252,253,252,253,252,182,1,130,33,253,252,190,1,23,2,195,1,28,2,253,252,253,252,14,2,166,17,253,252,253,252,253,252,125,1,253,252,181,1,253,252,253,252,253,252,253,252,253,252,253,252,253,252,130,33,130,33,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,33,0,130,33,253,252,199,1,202,1,253,252,72,1,24,36,203,1,253,252,253,252,253,252,226,1,111,10,253,252,253,252,146,1,240,36,240,36,240,36,240,36,40,4,40,4,15,41,249,12,240,36,240,36,248,11,248,11,85,2,85,2,119,12,40,4,40,4,224,2,224,2,158,2,52,0,52,0,146,1,146,1,146,1,144,12,239,22,19,13,96,23,253,252,53,0,253,252,72,1,208,1,253,252,44,2,253,252,253,252,138,11,253,252,253,252,160,8,33,0,33,0,253,252,236,9,253,252,117,11,253,252,253,252,246,0,17,33,162,13,176,1,229,0,253,252,53,0,72,1,53,0,77,2,71,0,148,3,129,25,253,252,160,32,104,2,253,252,150,0,253,252,242,10,125,22,1,10,72,1,244,0,13,1,104,2,253,252,253,252,253,252,253,252,139,0,152,0,72,1,107,0,123,0,17,33,249,24,253,252,125,1,122,2,69,0,253,252,253,252,130,33,110,1,253,252,167,28,70,1,253,252,253,252,253,252,253,252,227,26,220,30,253,252,253,252,4,2,253,252,117,11,18,1,185,4,72,1,106,0,113,1,253,252,176,1,229,0,72,1,66,1,71,1,253,252,253,252,132,4,231,1,253,252,8,2,72,1,253,252,72,1,61,0,50,4,253,252,253,252,253,252,50,4,253,252,253,252,142,2,253,252,253,252,253,252,13,2,166,17,253,252,253,252,253,252,146,1,146,1,253,252,68,3,53,18,253,252,253,252,21,2,24,29,253,252,253,252,24,36,243,33,130,33,49,2,243,33,243,33,253,252,156,1,32,2,50,2,243,33,243,33,253,252,253,252,156,1,253,252,66,0,101,0,53,18,166,17,130,33,33,0,253,252,246,0,149,2,253,252,253,252,253,252,50,4,162,13,246,0,253,252,199,1,253,252,93,2,253,252,80,16,155,2,253,252,17,33,161,2,253,252,130,33,130,33,21,1,130,33,130,33,179,2,53,18,53,18,130,0,55,0,253,252,253,252,137,29,192,14,253,252,130,33,253,252,253,252,62,2,253,252,253,252,253,252,200,0,72,1,182,2,65,2,146,4,253,252,63,2,66,2,53,18,166,17,253,252,253,252,67,2,68,2,253,252,81,2,253,252,82,2,81,2,253,252,86,2,72,1,103,2,102,2,133,36,253,252,110,2,112,2,253,252,200,2,130,33,117,2,253,252,117,11,130,33,253,252,117,11,253,252,117,11,253,252,253,252,243,33,253,252,117,11,253,252,117,11,253,252,253,252,253,252,237,2,121,2,117,11,166,17,162,13,253,252,253,252,72,1,243,2,253,252,148,3,242,36,109,0,253,252,253,252,53,18,253,252,253,252,109,0,253,252,130,33,253,252,248,2,249,2,253,252,253,252,138,0,253,252,220,30,253,252,129,2,182,2,46,2,253,252,253,252,236,2,4,3,145,2,50,4,253,252,142,2,253,252,142,2,253,252,142,2,253,252,253,252,253,252,167,2,253,252,50,4,253,252,238,2,22,3,50,4,253,252,142,2,253,252,253,252,159,2,117,11,253,252,117,11,253,252,253,252,164,2,32,3,253,252,253,252,162,13,250,2,253,252,40,3,133,2,137,2,162,13,253,252,49,14,253,252,253,252,53,18,253,252,253,252,253,252,182,2,129,2,182,2,171,2,253,252,237,0,253,252,253,252,253,252,253,252,81,2,175,2,81,2,81,2,253,252,177,2,178,2,253,252,8,40,81,2,253,252,181,2,81,2,253,252,253,252,33,3,9,3,89,40,250,29,170,40,250,1,150,0,49,3,129,2,182,2,236,2,253,252,253,252,142,2,253,252,253,252,253,252,50,4,253,252,142,2,253,252,183,2,185,2,253,252,142,2,253,252,253,252,253,252,82,0,229,0,72,1,119,0,121,0,253,252,253,252,253,252,129,2,253,252,81,2,81,2,188,2,81,2,81,2,128,0,253,252,253,252,142,2,253,252,253,252,253,252,81,2,253,252,2,0,170,1,27,0,16,0,17,0,62,0,83,0,20,0,132,1,248,0,15,0,7,0,36,1,28,0,14,0,5,0,6,0,80,1,76,0,150,1,36,1,16,0,17,0,13,0,4,0,20,0,208,0,48,0,28,0,82,2,108,1,159,1,65,0,202,1,22,0,24,1,52,0,31,1,110,0,28,1,107,1,90,2,109,1,80,1,97,2,112,1,16,0,17,0,50,0,51,0,20,0,100,2,130,1,159,2,107,2,50,0,51,0,210,1,54,0,2,0,65,0,4,0,52,0,15,0,131,1,155,2,144,1,65,0,244,1,248,2,167,1,67,2,68,2,170,1,250,2,153,1,143,1,26,0,145,1,25,0,50,0,174,2,27,0,174,2,219,1,16,0,76,0,154,1,74,3,142,2,29,0,93,3,26,0,16,0,17,0,88,0,13,1,20,0,16,0,140,0,22,0,88,0,143,0,48,1,90,0,9,0,10,0,133,0,37,0,38,0,98,0,15,0,79,0,65,0,107,1,90,0,109,1,105,0,15,2,112,1,25,0,188,1,10,0,71,0,48,0,16,0,0,0,15,0,25,0,28,0,116,0,119,0,25,0,88,0,212,1,16,0,129,1,16,0,131,1,90,0,90,0,116,0,135,0,136,0,16,0,55,0,213,1,70,3,25,0,136,0,143,1,137,0,145,1,116,0,121,0,25,0,18,0,90,0,20,0,152,1,77,1,154,1,88,0,165,3,25,0,116,0,116,0,17,0,18,0,108,0,139,0,88,0,158,3,137,0,11,3,88,0,98,0,25,0,126,0,127,0,128,0,136,0,90,0,116,0,133,0,155,2,137,0,111,0,88,0,159,2,139,0,137,0,139,0,113,2,187,1,188,1,179,1,142,0,143,0,133,0,224,1,121,2,125,3,123,3,174,2,109,0,137,0,203,2,224,1,77,2,136,0,142,0,143,0,158,1,143,0,128,2,210,1,88,0,211,1,136,0,213,1,139,0,135,0,136,0,142,0,143,0,26,0,77,3,233,0,31,1,226,0,137,0,137,0,116,0,157,3,233,0,136,0,143,0,15,1,252,0,137,0,254,0,255,0,137,0,137,0,247,0,248,0,81,3,13,1,143,0,202,0,142,0,143,0,255,0,89,3,89,3,208,0,252,0,93,3,254,0,137,0,142,0,143,0,142,0,143,0,136,0,15,1,137,0,147,2,148,2,142,0,143,0,65,3,15,1,75,1,88,0,137,0,15,2,139,0,80,1,139,0,233,0,252,0,189,2,254,0,182,2,127,2,128,2,88,0,137,0,196,2,139,0,88,0,58,0,59,0,120,0,2,0,31,1,4,0,5,0,6,0,88,0,88,0,9,0,10,0,209,0,210,0,13,0,89,2,15,0,16,0,17,0,77,1,129,1,20,0,116,1,117,1,88,0,78,1,15,1,139,0,209,0,210,0,136,0,143,0,12,1,86,2,23,1,24,1,252,0,165,3,254,0,28,1,133,0,90,0,135,0,136,0,55,0,2,1,7,1,136,0,65,1,48,0,211,2,78,1,13,1,52,0,25,0,135,0,136,0,136,0,108,1,25,0,17,1,2,1,3,1,62,0,21,1,233,2,90,0,116,0,75,1,108,1,77,3,135,0,136,0,80,1,90,0,139,0,248,2,76,0,250,2,20,1,130,1,137,0,89,3,183,2,109,1,65,1,93,3,143,0,178,3,51,0,70,1,130,1,116,0,55,0,144,1,142,0,143,0,116,0,137,1,116,0,116,0,90,0,122,2,153,1,55,0,144,1,131,1,149,1,150,1,25,0,109,0,137,2,111,0,208,1,153,1,210,1,77,1,67,3,137,0,137,0,145,1,174,2,26,0,37,0,38,0,66,1,67,1,68,1,69,1,154,1,71,1,72,1,184,1,26,0,20,0,167,1,58,0,59,0,43,3,178,1,179,1,66,1,67,1,68,1,69,1,116,0,185,1,184,1,142,0,210,2,116,0,182,2,115,2,160,1,70,3,71,3,65,3,210,2,165,3,90,0,149,1,150,1,212,1,188,1,91,0,26,0,137,0,199,1,137,0,140,0,137,0,137,0,143,0,212,1,140,0,133,0,15,2,143,0,143,0,140,1,71,0,208,1,116,0,210,1,88,0,116,0,140,0,148,1,213,1,67,3,88,0,230,1,133,1,141,0,233,1,88,0,235,1,134,0,110,0,137,0,199,0,113,0,114,0,108,3,55,0,185,1,137,0,123,3,71,0,125,3,209,0,210,0,71,0,137,0,194,1,172,1,97,0,61,0,88,0,176,1,64,0,65,0,242,2,15,0,181,1,8,2,13,0,88,0,16,0,133,0,63,0,135,0,136,0,39,2,191,1,139,0,15,0,135,0,136,0,140,0,133,0,157,3,135,0,136,0,15,2,51,0,139,0,53,0,54,0,55,0,56,0,57,2,49,3,252,0,110,0,254,0,255,0,113,0,114,0,2,1,3,1,90,0,137,0,137,0,7,1,135,0,136,0,111,0,112,0,12,1,13,1,137,0,133,0,116,0,135,0,136,0,82,2,20,1,139,0,240,1,63,2,134,0,137,0,66,2,67,2,68,2,55,2,116,0,31,1,75,2,137,0,97,2,151,3,51,0,63,2,137,0,63,0,66,2,51,0,137,0,83,2,107,2,137,0,137,0,152,3,116,0,89,2,90,2,137,0,92,2,87,2,15,0,81,2,14,2,83,2,111,2,51,0,100,2,53,0,54,0,55,0,56,0,65,1,66,1,67,1,68,1,69,1,70,1,71,1,72,1,111,2,137,0,75,1,88,0,77,1,78,1,142,2,80,1,89,2,122,2,198,2,18,0,75,2,182,2,51,3,183,2,88,0,153,2,186,2,187,2,57,3,127,2,55,2,90,0,192,2,193,2,15,0,134,0,61,0,90,0,63,2,64,0,65,0,66,2,137,0,108,1,134,0,141,3,174,2,56,0,57,0,58,0,59,0,116,1,117,1,71,0,150,3,137,0,152,3,116,0,135,0,136,0,115,2,15,0,85,2,116,0,118,0,130,1,14,0,132,1,133,1,76,2,141,0,135,0,136,0,15,0,62,0,140,1,64,0,65,0,137,0,144,1,137,0,91,0,137,2,148,1,137,0,76,2,111,0,112,0,153,1,182,2,51,0,15,0,53,0,54,0,55,0,56,0,137,0,205,2,203,2,137,0,140,0,137,0,137,0,110,2,212,2,142,0,124,0,125,0,126,0,127,0,128,0,216,2,15,0,136,2,219,2,137,0,137,0,134,0,88,0,110,2,185,1,121,0,88,0,111,0,112,0,233,2,71,0,31,3,151,2,194,1,51,0,92,0,53,0,54,0,55,0,56,0,137,0,242,2,99,0,11,3,167,2,86,0,87,0,208,1,137,0,210,1,137,0,212,1,175,2,15,0,205,2,137,0,134,0,2,3,3,3,15,0,5,3,212,2,7,3,8,3,15,0,15,0,123,0,137,0,13,3,135,0,136,0,16,3,17,3,135,0,136,0,92,0,15,0,200,2,201,2,240,1,134,0,14,3,233,2,124,0,125,0,126,0,127,0,128,0,51,0,121,0,53,0,54,0,55,0,56,0,55,0,218,2,71,0,137,0,51,0,134,0,53,0,54,0,55,0,56,0,15,0,15,0,55,0,230,2,231,2,137,0,15,2,86,0,87,0,137,0,237,2,137,0,137,0,50,3,221,2,137,0,65,3,15,0,2,0,139,0,4,0,139,0,137,0,185,1,247,2,9,0,10,0,254,2,255,2,6,0,221,2,15,0,16,0,17,0,66,2,92,0,20,0,233,1,13,0,235,1,159,2,98,0,99,0,162,2,123,0,124,0,125,0,126,0,127,0,128,0,88,0,154,3,51,3,147,2,199,2,174,2,128,3,158,3,57,3,62,0,153,3,64,0,65,0,88,0,48,0,246,1,123,0,76,2,77,2,126,0,7,0,42,3,51,0,155,2,53,0,54,0,55,0,56,0,62,0,46,3,89,3,88,0,139,0,54,3,133,3,134,3,135,3,136,3,49,3,138,3,139,3,151,3,198,0,142,3,255,255,144,3,145,3,135,0,136,0,255,255,255,255,110,2,151,3,255,255,153,3,154,3,178,3,255,255,111,0,112,0,135,0,136,0,255,255,92,0,63,0,64,0,65,0,152,3,255,255,98,0,99,0,63,0,64,0,65,0,255,255,109,0,255,255,111,0,135,0,136,0,255,255,63,0,64,0,65,0,255,255,255,255,255,255,186,3,187,3,188,3,189,3,190,3,255,255,114,3,123,0,116,3,255,255,126,0,119,3,198,3,255,255,255,255,51,0,255,255,53,0,54,0,55,0,56,0,167,2,255,255,255,255,255,255,111,0,112,0,143,0,255,255,175,2,255,255,255,255,111,0,112,0,255,255,255,255,182,2,183,2,255,255,255,255,186,2,187,2,111,0,112,0,255,255,255,255,192,2,193,2,63,0,64,0,65,0,255,255,255,255,255,255,200,2,201,2,92,0,255,255,63,0,64,0,65,0,255,255,98,0,99,0,255,255,211,2,63,0,64,0,65,0,255,255,16,0,17,0,218,2,255,255,20,0,221,2,255,255,77,3,199,0,79,3,63,0,64,0,65,0,83,3,230,2,231,2,255,255,123,0,209,0,210,0,126,0,237,2,255,255,93,3,255,255,95,3,111,0,112,0,255,255,45,0,46,0,255,255,255,255,139,0,50,0,51,0,111,0,112,0,254,2,255,2,41,1,255,255,255,255,255,255,111,0,112,0,62,0,63,0,49,1,255,255,255,255,52,1,255,255,54,1,14,3,56,1,255,255,58,1,111,0,112,0,255,255,252,0,255,255,254,0,255,0,255,255,255,255,2,1,3,1,255,255,255,255,31,3,7,1,255,255,255,255,255,255,255,255,12,1,13,1,255,255,255,255,255,255,42,3,43,3,255,255,20,1,255,255,255,255,255,255,255,255,50,3,161,3,255,255,255,255,54,3,165,3,255,255,167,3,255,255,255,255,255,255,255,255,172,3,51,0,255,255,53,0,54,0,55,0,56,0,255,255,255,255,2,3,3,3,71,0,5,3,255,255,7,3,8,3,255,255,255,255,255,255,255,255,13,3,255,255,194,3,16,3,17,3,255,255,86,0,87,0,65,1,66,1,67,1,68,1,69,1,70,1,71,1,72,1,255,255,255,255,75,1,255,255,77,1,255,255,92,0,80,1,255,255,255,255,108,3,255,255,98,0,99,0,255,255,255,255,114,3,255,255,116,3,255,255,255,255,119,3,255,255,255,255,255,255,121,0,122,0,123,0,124,0,125,0,126,0,127,0,128,0,255,255,255,255,108,1,255,255,123,0,255,255,255,255,126,0,255,255,255,255,116,1,117,1,255,255,255,255,51,0,255,255,53,0,54,0,55,0,56,0,151,3,255,255,255,255,255,255,130,1,255,255,132,1,133,1,51,0,255,255,53,0,54,0,55,0,56,0,140,1,255,255,255,255,255,255,144,1,255,255,255,255,255,255,148,1,255,255,255,255,255,255,255,255,153,1,255,255,255,255,255,255,238,0,239,0,240,0,241,0,92,0,40,0,41,0,42,0,43,0,44,0,98,0,255,255,255,255,255,255,252,0,255,255,254,0,255,0,92,0,255,255,133,3,134,3,135,3,136,3,98,0,138,3,139,3,255,255,185,1,142,3,255,255,144,3,145,3,255,255,255,255,255,255,255,255,194,1,255,255,255,255,255,255,2,0,255,255,4,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,13,0,255,255,255,255,212,1,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,186,3,187,3,188,3,189,3,190,3,255,255,255,255,255,255,255,255,255,255,240,1,255,255,198,3,255,255,48,0,255,255,255,255,255,255,255,255,255,255,75,1,255,255,255,255,255,255,255,255,80,1,81,1,82,1,83,1,84,1,85,1,86,1,87,1,88,1,89,1,90,1,91,1,92,1,93,1,94,1,95,1,96,1,97,1,98,1,99,1,100,1,101,1,102,1,103,1,104,1,105,1,106,1,255,255,108,1,255,255,255,255,255,255,255,255,255,255,255,255,255,255,116,1,117,1,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,130,1,255,255,111,0,255,255,255,255,2,0,255,255,4,0,255,255,255,255,255,255,255,255,142,1,255,255,144,1,255,255,146,1,147,1,255,255,255,255,255,255,255,255,255,255,153,1,255,255,255,255,255,255,76,2,77,2,255,255,160,1,255,255,255,255,255,255,255,255,255,255,166,1,167,1,255,255,255,255,170,1,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,48,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,189,1,255,255,110,2,255,255,255,255,255,255,255,255,255,255,255,255,255,255,199,1,255,255,255,255,202,1,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,212,1,255,255,255,255,255,255,255,255,255,255,255,255,51,0,199,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,2,0,231,1,4,0,5,0,6,0,7,0,255,255,255,255,255,255,255,255,255,255,13,0,255,255,255,255,111,0,255,255,255,255,255,255,167,2,255,255,255,255,255,255,255,255,255,255,254,1,255,1,175,2,255,255,255,255,255,255,255,255,255,255,255,255,255,255,183,2,9,2,255,255,186,2,187,2,255,255,255,255,255,255,255,255,192,2,193,2,255,255,48,0,255,255,255,255,255,255,52,0,200,2,201,2,255,255,7,1,255,255,255,255,255,255,255,255,12,1,13,1,255,255,211,2,255,255,255,255,255,255,255,255,255,255,255,255,218,2,255,255,255,255,221,2,255,255,76,0,255,255,255,255,255,255,255,255,255,255,255,255,230,2,231,2,255,255,255,255,255,255,255,255,255,255,237,2,2,0,255,255,4,0,5,0,6,0,255,255,255,255,255,255,255,255,255,255,255,255,13,0,255,255,199,0,255,255,255,255,254,2,255,2,255,255,255,255,111,0,255,255,255,255,65,1,255,255,255,255,89,2,255,255,70,1,255,255,255,255,255,255,255,255,255,255,255,255,77,1,255,255,255,255,80,1,255,255,255,255,255,255,255,255,255,255,255,255,255,255,48,0,255,255,255,255,31,3,52,0,255,255,255,255,255,255,255,255,118,2,255,255,255,255,121,2,255,255,42,3,43,3,255,255,255,255,127,2,128,2,255,255,255,255,255,255,255,255,255,255,255,255,54,3,255,255,76,0,255,255,255,255,7,1,255,255,255,255,255,255,255,255,12,1,13,1,255,255,255,255,255,255,238,0,239,0,240,0,132,1,255,255,255,255,255,255,255,255,255,255,255,255,255,255,140,1,255,255,255,255,255,255,255,255,255,255,255,255,255,255,148,1,255,255,199,0,111,0,255,255,255,255,255,255,255,255,255,255,255,255,179,2,255,255,255,255,255,255,183,2,184,2,255,255,186,2,187,2,255,255,108,3,255,255,255,255,192,2,193,2,255,255,114,3,255,255,116,3,65,1,255,255,119,3,255,255,202,2,70,1,255,255,255,255,185,1,255,255,255,255,255,255,77,1,255,255,255,255,255,255,255,255,194,1,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,224,2,225,2,255,255,227,2,228,2,255,255,255,255,255,255,151,3,255,255,255,255,7,1,236,2,255,255,255,255,239,2,12,1,13,1,255,255,75,1,255,255,255,255,255,255,255,255,80,1,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,31,1,199,0,240,1,255,255,255,255,255,255,132,1,255,255,255,255,255,255,255,255,255,255,255,255,255,255,140,1,255,255,255,255,20,3,255,255,255,255,255,255,24,3,148,1,255,255,255,255,255,255,255,255,255,255,31,3,255,255,255,255,255,255,255,255,255,255,65,1,255,255,255,255,255,255,255,255,70,1,255,255,255,255,255,255,255,255,255,255,255,255,77,1,78,1,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,59,3,255,255,255,255,185,1,255,255,255,255,255,255,255,255,67,3,7,1,255,255,255,255,194,1,160,1,12,1,13,1,255,255,255,255,255,255,166,1,167,1,255,255,255,255,170,1,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,31,1,255,255,255,255,255,255,255,255,255,255,77,2,255,255,255,255,255,255,255,255,255,255,132,1,255,255,255,255,255,255,255,255,255,255,255,255,199,1,140,1,255,255,202,1,255,255,255,255,240,1,255,255,255,255,148,1,255,255,255,255,255,255,255,255,255,255,65,1,255,255,255,255,255,255,255,255,70,1,255,255,255,255,255,255,255,255,255,255,255,255,77,1,78,1,255,255,255,255,255,255,231,1,255,255,255,255,255,255,255,255,255,255,255,255,255,255,151,3,255,255,255,255,255,255,255,255,255,255,185,1,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,194,1,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,9,2,255,255,255,255,208,1,255,255,210,1,255,255,255,255,255,255,255,255,255,255,167,2,255,255,255,255,255,255,255,255,132,1,255,255,255,255,175,2,255,255,255,255,255,255,255,255,140,1,255,255,255,255,183,2,255,255,255,255,255,255,255,255,148,1,77,2,255,255,240,1,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,200,2,201,2,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,211,2,255,255,255,255,255,255,255,255,255,255,255,255,218,2,255,255,255,255,255,255,15,2,255,255,255,255,185,1,255,255,255,255,255,255,255,255,230,2,231,2,255,255,255,255,194,1,255,255,89,2,237,2,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,208,1,255,255,210,1,255,255,255,255,255,255,254,2,255,2,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,118,2,255,255,255,255,121,2,255,255,255,255,255,255,255,255,255,255,127,2,128,2,255,255,255,255,255,255,167,2,240,1,255,255,255,255,255,255,77,2,255,255,255,255,175,2,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,42,3,43,3,255,255,255,255,255,255,255,255,255,255,255,255,50,3,255,255,255,255,255,255,54,3,15,2,200,2,201,2,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,211,2,255,255,255,255,179,2,255,255,255,255,255,255,218,2,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,230,2,231,2,255,255,255,255,255,255,255,255,255,255,237,2,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,108,3,255,255,254,2,255,2,255,255,255,255,114,3,255,255,116,3,77,2,167,2,119,3,255,255,255,255,255,255,255,255,255,255,255,255,175,2,236,2,255,255,255,255,239,2,255,255,255,255,182,2,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,200,2,201,2,255,255,42,3,43,3,255,255,0,0,255,255,255,255,255,255,255,255,211,2,255,255,255,255,255,255,54,3,20,3,255,255,218,2,13,0,14,0,15,0,16,0,17,0,18,0,255,255,20,0,255,255,255,255,255,255,230,2,231,2,26,0,27,0,255,255,255,255,255,255,237,2,255,255,255,255,255,255,255,255,255,255,37,0,38,0,255,255,40,0,41,0,42,0,43,0,44,0,255,255,255,255,255,255,254,2,255,2,167,2,255,255,255,255,255,255,255,255,255,255,255,255,67,3,175,2,255,255,255,255,255,255,255,255,108,3,14,3,182,2,255,255,255,255,255,255,114,3,255,255,116,3,255,255,255,255,119,3,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,200,2,201,2,255,255,255,255,255,255,88,0,255,255,255,255,255,255,42,3,43,3,211,2,255,255,255,255,255,255,255,255,255,255,50,3,218,2,255,255,255,255,54,3,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,230,2,231,2,255,255,255,255,255,255,255,255,255,255,237,2,255,255,255,255,255,255,255,255,255,255,51,0,52,0,255,255,255,255,55,0,255,255,255,255,133,0,134,0,255,255,136,0,254,2,255,2,139,0,140,0,255,255,142,0,143,0,69,0,70,0,71,0,72,0,73,0,74,0,75,0,76,0,77,0,14,3,255,255,80,0,81,0,255,255,108,3,84,0,85,0,86,0,87,0,255,255,114,3,255,255,116,3,255,255,255,255,119,3,255,255,255,255,255,255,98,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,42,3,43,3,255,255,255,255,255,255,255,255,255,255,255,255,50,3,255,255,255,255,255,255,54,3,119,0,120,0,121,0,122,0,123,0,124,0,125,0,126,0,127,0,128,0,255,255,130,0,131,0,255,255,255,255,255,255,255,255,255,255,255,255,138,0,139,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,108,3,255,255,255,255,255,255,255,255,255,255,114,3,255,255,116,3,0,0,1,0,119,3,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,255,255,255,255,255,255,255,255,255,255,255,255,19],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE),allocate([255,255,21,0,22,0,23,0,24,0,255,255,255,255,255,255,255,255,255,255,30,0,31,0,32,0,33,0,34,0,35,0,36,0,255,255,255,255,39,0,255,255,255,255,255,255,255,255,255,255,45,0,46,0,47,0,48,0,49,0,255,255,51,0,52,0,53,0,54,0,55,0,56,0,255,255,58,0,59,0,60,0,255,255,255,255,63,0,255,255,255,255,66,0,67,0,255,255,69,0,70,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,89,0,255,255,255,255,92,0,93,0,255,255,95,0,96,0,0,0,98,0,255,255,100,0,101,0,102,0,103,0,104,0,105,0,106,0,255,255,255,255,109,0,13,0,14,0,15,0,16,0,17,0,18,0,255,255,20,0,255,255,255,255,44,0,255,255,255,255,255,255,27,0,28,0,29,0,255,255,255,255,129,0,130,0,131,0,255,255,255,255,37,0,38,0,255,255,40,0,41,0,42,0,43,0,44,0,142,0,143,0,255,255,255,255,255,255,71,0,72,0,73,0,74,0,75,0,76,0,77,0,78,0,79,0,80,0,81,0,82,0,83,0,255,255,255,255,86,0,87,0,255,255,255,255,255,255,255,255,71,0,72,0,73,0,74,0,75,0,76,0,77,0,78,0,79,0,80,0,81,0,82,0,83,0,255,255,255,255,86,0,87,0,88,0,255,255,90,0,91,0,255,255,255,255,255,255,255,255,117,0,97,0,119,0,120,0,121,0,122,0,123,0,124,0,125,0,126,0,127,0,128,0,108,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,116,0,117,0,118,0,119,0,120,0,121,0,122,0,123,0,124,0,125,0,126,0,127,0,128,0,255,255,255,255,0,0,255,255,255,255,134,0,135,0,136,0,137,0,255,255,255,255,140,0,141,0,142,0,143,0,13,0,14,0,15,0,16,0,17,0,18,0,255,255,20,0,255,255,255,255,44,0,255,255,255,255,26,0,27,0,28,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,37,0,38,0,255,255,40,0,41,0,42,0,43,0,44,0,255,255,255,255,255,255,255,255,255,255,71,0,72,0,73,0,74,0,75,0,76,0,77,0,78,0,79,0,80,0,81,0,82,0,83,0,255,255,255,255,86,0,87,0,255,255,255,255,255,255,255,255,71,0,72,0,73,0,74,0,75,0,76,0,77,0,78,0,79,0,80,0,81,0,82,0,83,0,255,255,255,255,86,0,87,0,88,0,255,255,255,255,91,0,255,255,255,255,255,255,255,255,117,0,97,0,119,0,120,0,121,0,122,0,123,0,124,0,125,0,126,0,127,0,128,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,137,0,117,0,255,255,119,0,120,0,121,0,122,0,123,0,124,0,125,0,126,0,127,0,128,0,255,255,255,255,0,0,255,255,133,0,134,0,135,0,136,0,137,0,255,255,139,0,140,0,141,0,142,0,143,0,13,0,14,0,15,0,16,0,17,0,18,0,255,255,20,0,255,255,255,255,44,0,255,255,255,255,255,255,27,0,28,0,29,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,37,0,38,0,255,255,40,0,41,0,42,0,43,0,44,0,255,255,255,255,255,255,255,255,255,255,71,0,72,0,73,0,74,0,75,0,76,0,77,0,78,0,79,0,80,0,81,0,82,0,83,0,255,255,255,255,86,0,87,0,255,255,255,255,255,255,255,255,71,0,72,0,73,0,74,0,75,0,76,0,77,0,78,0,79,0,80,0,81,0,82,0,83,0,255,255,255,255,86,0,87,0,88,0,255,255,255,255,91,0,255,255,255,255,255,255,255,255,117,0,97,0,119,0,120,0,121,0,122,0,123,0,124,0,125,0,126,0,127,0,128,0,108,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,117,0,118,0,119,0,120,0,121,0,122,0,123,0,124,0,125,0,126,0,127,0,128,0,255,255,255,255,0,0,255,255,255,255,134,0,135,0,136,0,137,0,255,255,255,255,140,0,141,0,142,0,143,0,13,0,14,0,15,0,16,0,17,0,18,0,255,255,20,0,255,255,255,255,255,255,255,255,255,255,26,0,27,0,28,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,37,0,38,0,255,255,40,0,41,0,42,0,43,0,44,0,255,255,255,255,255,255,255,255,255,255,71,0,72,0,73,0,74,0,75,0,76,0,77,0,78,0,79,0,80,0,81,0,82,0,83,0,255,255,255,255,86,0,87,0,255,255,255,255,255,255,255,255,71,0,72,0,73,0,74,0,75,0,76,0,77,0,78,0,79,0,80,0,81,0,82,0,83,0,255,255,255,255,86,0,87,0,88,0,255,255,255,255,91,0,255,255,255,255,255,255,255,255,117,0,97,0,119,0,120,0,121,0,122,0,123,0,124,0,125,0,126,0,127,0,128,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,117,0,255,255,119,0,120,0,121,0,122,0,123,0,124,0,125,0,126,0,127,0,128,0,255,255,255,255,0,0,255,255,133,0,134,0,135,0,136,0,137,0,255,255,139,0,140,0,141,0,142,0,143,0,13,0,14,0,15,0,16,0,17,0,18,0,255,255,20,0,255,255,255,255,255,255,255,255,255,255,255,255,27,0,28,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,37,0,38,0,255,255,40,0,41,0,42,0,43,0,44,0,255,255,255,255,255,255,255,255,255,255,71,0,72,0,73,0,74,0,75,0,76,0,77,0,78,0,79,0,80,0,81,0,82,0,83,0,255,255,255,255,86,0,87,0,255,255,255,255,255,255,255,255,71,0,72,0,73,0,74,0,75,0,76,0,77,0,78,0,79,0,80,0,81,0,82,0,83,0,255,255,255,255,86,0,87,0,88,0,255,255,255,255,91,0,255,255,255,255,255,255,255,255,255,255,97,0,119,0,120,0,121,0,122,0,123,0,124,0,125,0,126,0,127,0,128,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,117,0,255,255,119,0,120,0,121,0,122,0,123,0,124,0,125,0,126,0,127,0,128,0,255,255,255,255,0,0,255,255,255,255,134,0,135,0,136,0,137,0,255,255,139,0,140,0,141,0,142,0,143,0,13,0,14,0,15,0,255,255,17,0,18,0,255,255,20,0,255,255,255,255,255,255,255,255,255,255,26,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,37,0,38,0,255,255,40,0,41,0,42,0,43,0,44,0,255,255,71,0,72,0,73,0,74,0,75,0,76,0,77,0,78,0,79,0,80,0,81,0,82,0,83,0,255,255,255,255,86,0,87,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,71,0,72,0,73,0,74,0,75,0,76,0,77,0,78,0,79,0,80,0,81,0,82,0,83,0,255,255,255,255,86,0,87,0,88,0,255,255,90,0,255,255,117,0,255,255,119,0,120,0,121,0,122,0,123,0,124,0,125,0,126,0,127,0,128,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,116,0,117,0,143,0,119,0,120,0,121,0,122,0,123,0,124,0,125,0,126,0,127,0,128,0,255,255,255,255,0,0,255,255,133,0,134,0,135,0,136,0,137,0,255,255,255,255,140,0,255,255,142,0,143,0,13,0,14,0,15,0,255,255,17,0,18,0,255,255,20,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,37,0,38,0,255,255,40,0,41,0,42,0,43,0,44,0,71,0,72,0,73,0,74,0,75,0,76,0,77,0,78,0,255,255,80,0,81,0,255,255,255,255,255,255,255,255,86,0,87,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,71,0,72,0,73,0,74,0,75,0,76,0,77,0,78,0,79,0,80,0,81,0,82,0,83,0,255,255,255,255,86,0,87,0,88,0,255,255,90,0,255,255,255,255,119,0,120,0,121,0,122,0,123,0,124,0,125,0,126,0,127,0,128,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,116,0,117,0,255,255,119,0,120,0,121,0,122,0,123,0,124,0,125,0,126,0,127,0,128,0,255,255,255,255,255,255,255,255,255,255,134,0,135,0,136,0,137,0,255,255,255,255,140,0,255,255,142,0,143,0,1,0,255,255,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,14,0,15,0,255,255,255,255,18,0,19,0,255,255,21,0,22,0,23,0,24,0,255,255,255,255,255,255,255,255,255,255,30,0,31,0,32,0,33,0,34,0,35,0,36,0,255,255,255,255,39,0,255,255,255,255,255,255,255,255,255,255,45,0,255,255,47,0,48,0,49,0,255,255,51,0,52,0,53,0,54,0,55,0,56,0,255,255,58,0,59,0,60,0,255,255,255,255,63,0,255,255,255,255,66,0,67,0,255,255,69,0,70,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,89,0,255,255,255,255,92,0,93,0,255,255,95,0,96,0,255,255,98,0,255,255,100,0,101,0,102,0,103,0,104,0,105,0,106,0,255,255,255,255,109,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,129,0,130,0,131,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,142,0,143,0,1,0,255,255,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,255,255,255,255,15,0,255,255,17,0,18,0,19,0,255,255,21,0,22,0,23,0,24,0,255,255,255,255,255,255,255,255,255,255,30,0,31,0,32,0,33,0,34,0,35,0,36,0,255,255,255,255,39,0,255,255,255,255,255,255,255,255,255,255,45,0,255,255,47,0,48,0,49,0,255,255,51,0,52,0,53,0,54,0,55,0,56,0,255,255,58,0,59,0,60,0,255,255,255,255,63,0,255,255,255,255,66,0,67,0,255,255,69,0,70,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,89,0,255,255,255,255,92,0,93,0,255,255,95,0,96,0,255,255,98,0,255,255,100,0,101,0,102,0,103,0,104,0,105,0,106,0,255,255,255,255,109,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,129,0,130,0,131,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,142,0,143,0,1,0,255,255,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,255,255,255,255,15,0,255,255,255,255,18,0,19,0,20,0,21,0,22,0,23,0,24,0,255,255,255,255,255,255,255,255,255,255,30,0,31,0,32,0,33,0,34,0,35,0,36,0,255,255,255,255,39,0,255,255,255,255,255,255,255,255,255,255,45,0,255,255,47,0,48,0,49,0,255,255,51,0,52,0,53,0,54,0,55,0,56,0,255,255,58,0,59,0,60,0,255,255,255,255,63,0,255,255,255,255,66,0,67,0,255,255,69,0,70,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,89,0,255,255,255,255,92,0,93,0,255,255,95,0,96,0,255,255,98,0,255,255,100,0,101,0,102,0,103,0,104,0,105,0,106,0,255,255,255,255,109,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,129,0,130,0,131,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,142,0,143,0,1,0,255,255,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,255,255,255,255,15,0,255,255,255,255,18,0,19,0,255,255,21,0,22,0,23,0,24,0,255,255,255,255,255,255,255,255,255,255,30,0,31,0,32,0,33,0,34,0,35,0,36,0,255,255,255,255,39,0,255,255,255,255,255,255,255,255,255,255,45,0,255,255,47,0,48,0,49,0,255,255,51,0,52,0,53,0,54,0,55,0,56,0,255,255,58,0,59,0,60,0,255,255,255,255,63,0,255,255,255,255,66,0,67,0,255,255,69,0,70,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,89,0,255,255,255,255,92,0,93,0,255,255,95,0,96,0,255,255,98,0,255,255,100,0,101,0,102,0,103,0,104,0,105,0,106,0,255,255,255,255,109,0,255,255,255,255,255,255,255,255,255,255,1,0,255,255,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,255,255,255,255,129,0,130,0,131,0,255,255,19,0,255,255,21,0,22,0,23,0,24,0,255,255,255,255,255,255,142,0,143,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,255,255,255,255,39,0,255,255,255,255,255,255,255,255,255,255,45,0,46,0,47,0,48,0,49,0,255,255,51,0,52,0,53,0,54,0,55,0,56,0,255,255,58,0,59,0,60,0,255,255,255,255,63,0,255,255,255,255,66,0,67,0,255,255,69,0,70,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,89,0,255,255,255,255,92,0,93,0,255,255,95,0,96,0,255,255,98,0,255,255,100,0,101,0,102,0,103,0,104,0,105,0,106,0,255,255,255,255,109,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,129,0,130,0,131,0,255,255,255,255,134,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,142,0,143,0,1,0,255,255,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,255,255,14,0,15,0,255,255,255,255,255,255,19,0,255,255,21,0,22,0,23,0,24,0,255,255,255,255,255,255,255,255,255,255,30,0,31,0,32,0,33,0,34,0,35,0,36,0,255,255,255,255,39,0,255,255,255,255,255,255,255,255,255,255,45,0,255,255,47,0,48,0,49,0,255,255,51,0,52,0,53,0,54,0,55,0,56,0,255,255,58,0,59,0,60,0,255,255,255,255,63,0,255,255,255,255,66,0,67,0,255,255,69,0,70,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,89,0,255,255,255,255,92,0,93,0,255,255,95,0,96,0,255,255,98,0,255,255,100,0,101,0,102,0,103,0,104,0,105,0,106,0,255,255,255,255,109,0,255,255,255,255,255,255,255,255,255,255,1,0,255,255,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,255,255,255,255,129,0,130,0,131,0,255,255,19,0,255,255,21,0,22,0,23,0,24,0,255,255,255,255,255,255,142,0,143,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,255,255,255,255,39,0,255,255,255,255,255,255,255,255,255,255,45,0,255,255,47,0,48,0,49,0,255,255,51,0,52,0,53,0,54,0,55,0,56,0,255,255,58,0,59,0,60,0,255,255,255,255,63,0,255,255,255,255,66,0,67,0,255,255,69,0,70,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,89,0,255,255,255,255,92,0,93,0,255,255,95,0,96,0,255,255,98,0,255,255,100,0,101,0,102,0,103,0,104,0,105,0,106,0,255,255,255,255,109,0,255,255,255,255,255,255,255,255,255,255,1,0,255,255,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,255,255,255,255,129,0,130,0,131,0,255,255,19,0,255,255,21,0,22,0,23,0,24,0,255,255,140,0,255,255,142,0,143,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,255,255,255,255,39,0,255,255,255,255,255,255,255,255,255,255,45,0,255,255,47,0,48,0,49,0,255,255,51,0,52,0,53,0,54,0,55,0,56,0,255,255,58,0,59,0,60,0,255,255,255,255,63,0,255,255,255,255,66,0,67,0,255,255,69,0,70,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,89,0,255,255,255,255,92,0,93,0,255,255,95,0,96,0,255,255,98,0,255,255,100,0,101,0,102,0,103,0,104,0,105,0,106,0,255,255,255,255,109,0,255,255,255,255,255,255,255,255,255,255,1,0,255,255,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,255,255,255,255,129,0,130,0,131,0,255,255,19,0,255,255,21,0,22,0,23,0,24,0,255,255,140,0,255,255,142,0,143,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,255,255,255,255,39,0,255,255,255,255,255,255,255,255,255,255,45,0,255,255,47,0,48,0,49,0,255,255,51,0,52,0,53,0,54,0,55,0,56,0,255,255,58,0,59,0,60,0,255,255,255,255,63,0,255,255,255,255,66,0,67,0,255,255,69,0,70,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,89,0,255,255,255,255,92,0,93,0,255,255,95,0,96,0,255,255,98,0,255,255,100,0,101,0,102,0,103,0,104,0,105,0,106,0,255,255,255,255,109,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,129,0,130,0,131,0,255,255,255,255,134,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,142,0,143,0,1,0,255,255,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,255,255,255,255,15,0,255,255,255,255,255,255,19,0,255,255,21,0,22,0,23,0,24,0,255,255,255,255,255,255,255,255,255,255,30,0,31,0,32,0,33,0,34,0,35,0,36,0,255,255,255,255,39,0,255,255,255,255,255,255,255,255,255,255,45,0,255,255,47,0,48,0,49,0,255,255,51,0,52,0,53,0,54,0,55,0,56,0,255,255,58,0,59,0,60,0,255,255,255,255,63,0,255,255,255,255,66,0,67,0,255,255,69,0,70,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,89,0,255,255,255,255,92,0,93,0,255,255,95,0,96,0,255,255,98,0,255,255,100,0,101,0,102,0,103,0,104,0,105,0,106,0,255,255,255,255,109,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,255,255,255,255,255,255,129,0,130,0,131,0,255,255,19,0,255,255,21,0,22,0,23,0,24,0,255,255,255,255,255,255,142,0,143,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,255,255,255,255,39,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,48,0,49,0,255,255,51,0,52,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,60,0,255,255,255,255,63,0,255,255,255,255,66,0,67,0,255,255,69,0,70,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,89,0,255,255,255,255,92,0,93,0,255,255,95,0,96,0,255,255,98,0,99,0,100,0,101,0,102,0,103,0,104,0,105,0,106,0,255,255,255,255,109,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,255,255,255,255,255,255,129,0,130,0,131,0,255,255,19,0,255,255,21,0,22,0,23,0,24,0,255,255,255,255,255,255,255,255,143,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,255,255,255,255,39,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,48,0,49,0,255,255,51,0,52,0,53,0,54,0,55,0,56,0,255,255,58,0,59,0,60,0,255,255,255,255,63,0,255,255,255,255,66,0,67,0,255,255,69,0,70,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,89,0,255,255,255,255,92,0,93,0,255,255,95,0,96,0,255,255,255,255,255,255,100,0,101,0,102,0,103,0,104,0,105,0,106,0,255,255,255,255,109,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,255,255,255,255,255,255,129,0,130,0,131,0,255,255,19,0,255,255,21,0,22,0,23,0,24,0,255,255,255,255,255,255,142,0,143,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,255,255,255,255,39,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,48,0,49,0,255,255,51,0,52,0,53,0,54,0,55,0,56,0,255,255,58,0,59,0,60,0,255,255,255,255,63,0,255,255,255,255,66,0,67,0,255,255,69,0,70,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,89,0,255,255,255,255,92,0,93,0,255,255,95,0,96,0,255,255,255,255,255,255,100,0,101,0,102,0,103,0,104,0,105,0,106,0,255,255,255,255,109,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,255,255,255,255,129,0,130,0,131,0,255,255,19,0,255,255,21,0,22,0,23,0,24,0,255,255,255,255,255,255,255,255,143,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,255,255,255,255,39,0,255,255,255,255,255,255,255,255,255,255,45,0,46,0,47,0,48,0,49,0,255,255,51,0,52,0,53,0,54,0,55,0,56,0,255,255,58,0,59,0,60,0,255,255,255,255,63,0,255,255,255,255,66,0,67,0,255,255,69,0,70,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,89,0,255,255,255,255,92,0,93,0,255,255,95,0,96,0,255,255,98,0,255,255,100,0,101,0,102,0,103,0,104,0,105,0,106,0,255,255,255,255,109,0,255,255,255,255,255,255,255,255,255,255,255,255,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,255,255,255,255,255,255,129,0,130,0,131,0,19,0,255,255,21,0,22,0,23,0,24,0,255,255,255,255,255,255,255,255,142,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,255,255,255,255,39,0,255,255,255,255,255,255,255,255,255,255,45,0,255,255,47,0,48,0,49,0,255,255,51,0,52,0,53,0,54,0,55,0,56,0,255,255,58,0,59,0,60,0,255,255,255,255,63,0,255,255,255,255,66,0,67,0,255,255,69,0,70,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,89,0,255,255,255,255,92,0,93,0,255,255,95,0,96,0,255,255,98,0,255,255,100,0,101,0,102,0,103,0,104,0,105,0,106,0,255,255,255,255,109,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,129,0,130,0,131,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,142,0,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,255,255,255,255,255,255,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0,38,0,39,0,255,255,255,255,255,255,255,255,255,255,45,0,46,0,47,0,48,0,49,0,50,0,51,0,52,0,53,0,54,0,55,0,56,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,69,0,70,0,71,0,72,0,73,0,74,0,75,0,76,0,77,0,255,255,255,255,80,0,81,0,255,255,255,255,84,0,85,0,86,0,87,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,98,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,119,0,120,0,121,0,122,0,123,0,124,0,125,0,126,0,127,0,128,0,255,255,130,0,131,0,255,255,255,255,255,255,255,255,255,255,255,255,138,0,139,0,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,19,0,255,255,21,0,22,0,23,0,24,0,255,255,26,0,255,255,255,255,255,255,30,0,31,0,32,0,33,0,34,0,35,0,36,0,255,255,255,255,39,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,48,0,49,0,255,255,51,0,52,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,60,0,255,255,255,255,63,0,255,255,255,255,66,0,67,0,255,255,69,0,70,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,89,0,255,255,255,255,92,0,93,0,255,255,95,0,96,0,255,255,98,0,99,0,100,0,101,0,102,0,103,0,104,0,105,0,106,0,255,255,255,255,109,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,129,0,130,0,131,0,255,255,133,0,255,255,255,255,255,255,255,255,255,255,139,0,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,19,0,255,255,21,0,22,0,23,0,24,0,255,255,26,0,255,255,255,255,255,255,30,0,31,0,32,0,33,0,34,0,35,0,36,0,255,255,255,255,39,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,48,0,49,0,255,255,51,0,52,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,60,0,255,255,255,255,63,0,255,255,255,255,66,0,67,0,255,255,69,0,70,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,89,0,255,255,255,255,92,0,93,0,255,255,95,0,96,0,255,255,98,0,99,0,100,0,101,0,102,0,103,0,104,0,105,0,106,0,255,255,255,255,109,0,255,255,255,255,255,255,255,255,255,255,255,255,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,255,255,255,255,255,255,255,255,129,0,130,0,131,0,19,0,133,0,21,0,22,0,23,0,24,0,255,255,139,0,255,255,255,255,255,255,30,0,31,0,32,0,33,0,34,0,35,0,36,0,255,255,255,255,39,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,48,0,49,0,255,255,51,0,52,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,60,0,255,255,255,255,63,0,255,255,255,255,66,0,67,0,255,255,69,0,70,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,89,0,90,0,255,255,92,0,93,0,255,255,95,0,96,0,255,255,98,0,99,0,100,0,101,0,102,0,103,0,104,0,105,0,106,0,255,255,255,255,109,0,255,255,255,255,255,255,255,255,255,255,255,255,116,0,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,255,255,255,255,255,255,129,0,130,0,131,0,255,255,19,0,255,255,21,0,22,0,23,0,24,0,139,0,255,255,255,255,255,255,255,255,30,0,31,0,32,0,33,0,34,0,35,0,36,0,255,255,255,255,39,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,48,0,49,0,255,255,51,0,52,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,60,0,255,255,255,255,63,0,255,255,255,255,66,0,67,0,255,255,69,0,70,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,89,0,255,255,255,255,92,0,93,0,255,255,95,0,96,0,255,255,98,0,99,0,100,0,101,0,102,0,103,0,104,0,105,0,106,0,255,255,255,255,109,0,255,255,255,255,255,255,255,255,255,255,255,255,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,255,255,255,255,255,255,255,255,129,0,130,0,131,0,19,0,255,255,21,0,22,0,23,0,24,0,255,255,139,0,255,255,255,255,255,255,30,0,31,0,32,0,33,0,34,0,35,0,36,0,255,255,255,255,39,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,48,0,49,0,255,255,51,0,52,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,60,0,255,255,255,255,63,0,255,255,255,255,66,0,67,0,255,255,69,0,70,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,89,0,255,255,255,255,92,0,93,0,255,255,95,0,96,0,255,255,98,0,99,0,100,0,101,0,102,0,103,0,104,0,105,0,106,0,255,255,255,255,109,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,129,0,130,0,131,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,139,0,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,255,255,255,255,255,255,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0,38,0,39,0,255,255,255,255,255,255,255,255,255,255,45,0,46,0,47,0,48,0,49,0,50,0,51,0,52,0,53,0,54,0,55,0,56,0,255,255,255,255,255,255,255,255,255,255,255,255,63,0,255,255,255,255,255,255,255,255,255,255,69,0,70,0,71,0,72,0,73,0,74,0,75,0,76,0,77,0,255,255,255,255,80,0,81,0,255,255,255,255,84,0,85,0,86,0,87,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,98,0,255,255,255,255,255,255,255,255,255,255,255,255,105,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,119,0,120,0,121,0,122,0,123,0,124,0,125,0,126,0,127,0,128,0,255,255,130,0,131,0,255,255,255,255,255,255,255,255,255,255,255,255,138,0,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,255,255,255,255,255,255,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0,38,0,39,0,255,255,255,255,255,255,255,255,255,255,45,0,46,0,47,0,48,0,49,0,50,0,51,0,52,0,53,0,54,0,55,0,56,0,255,255,255,255,255,255,255,255,255,255,255,255,63,0,255,255,255,255,255,255,255,255,255,255,69,0,70,0,71,0,72,0,73,0,74,0,75,0,76,0,77,0,255,255,255,255,80,0,81,0,255,255,255,255,84,0,85,0,86,0,87,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,98,0,255,255,255,255,255,255,255,255,255,255,255,255,105,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,119,0,120,0,121,0,122,0,123,0,124,0,125,0,126,0,127,0,128,0,255,255,130,0,131,0,255,255,255,255,255,255,255,255,255,255,255,255,138,0,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,255,255,255,255,255,255,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0,38,0,39,0,255,255,255,255,255,255,255,255,255,255,45,0,46,0,47,0,48,0,49,0,50,0,51,0,52,0,255,255,255,255,55,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,69,0,70,0,71,0,72,0,73,0,74,0,75,0,76,0,77,0,255,255,255,255,80,0,81,0,255,255,255,255,84,0,85,0,86,0,87,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,98,0,255,255,255,255,101,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,119,0,120,0,121,0,122,0,123,0,124,0,125,0,126,0,127,0,128,0,255,255,130,0,131,0,255,255,255,255,255,255,255,255,255,255,255,255,138,0,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,255,255,255,255,255,255,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0,38,0,39,0,255,255,255,255,255,255,255,255,255,255,45,0,46,0,47,0,48,0,49,0,50,0,51,0,52,0,255,255,255,255,55,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,69,0,70,0,71,0,72,0,73,0,74,0,75,0,76,0,77,0,255,255,255,255,80,0,81,0,255,255,255,255,84,0,85,0,86,0,87,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,98,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,119,0,120,0,121,0,122,0,123,0,124,0,125,0,126,0,127,0,128,0,255,255,130,0,131,0,255,255,255,255,255,255,255,255,255,255,255,255,138,0,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,19,0,255,255,21,0,22,0,23,0,24,0,255,255,255,255,255,255,255,255,255,255,30,0,31,0,32,0,33,0,34,0,35,0,36,0,255,255,255,255,39,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,48,0,49,0,255,255,51,0,52,0,53,0,54,0,55,0,56,0,255,255,58,0,59,0,60,0,255,255,255,255,63,0,255,255,255,255,66,0,67,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,89,0,255,255,255,255,92,0,93,0,255,255,95,0,96,0,255,255,255,255,255,255,100,0,101,0,102,0,103,0,104,0,105,0,106,0,255,255,255,255,109,0,255,255,255,255,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,19,0,129,0,21,0,22,0,23,0,24,0,255,255,255,255,255,255,137,0,255,255,30,0,31,0,32,0,33,0,34,0,35,0,36,0,255,255,255,255,39,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,48,0,49,0,255,255,51,0,52,0,53,0,54,0,55,0,56,0,255,255,58,0,59,0,60,0,255,255,255,255,63,0,255,255,255,255,66,0,67,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,89,0,255,255,255,255,92,0,93,0,255,255,95,0,96,0,255,255,255,255,255,255,100,0,101,0,102,0,103,0,104,0,105,0,106,0,255,255,255,255,109,0,255,255,255,255,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,19,0,129,0,21,0,22,0,23,0,24,0,255,255,255,255,255,255,137,0,255,255,30,0,31,0,32,0,33,0,34,0,35,0,36,0,255,255,255,255,39,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,48,0,49,0,255,255,51,0,52,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,60,0,255,255,255,255,63,0,255,255,255,255,66,0,67,0,255,255,69,0,70,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,89,0,255,255,255,255,92,0,93,0,255,255,95,0,96,0,255,255,98,0,99,0,100,0,101,0,102,0,103,0,104,0,105,0,106,0,255,255,255,255,109,0,110,0,255,255,255,255,113,0,114,0,255,255,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,255,255,255,255,255,255,129,0,130,0,131,0,19,0,255,255,21,0,22,0,23,0,24,0,255,255,255,255,255,255,255,255,255,255,30,0,31,0,32,0,33,0,34,0,35,0,36,0,255,255,255,255,39,0,255,255,255,255,255,255,255,255,255,255,45,0,46,0,47,0,48,0,49,0,255,255,51,0,52,0,53,0,54,0,55,0,56,0,255,255,58,0,59,0,60,0,255,255,255,255,63,0,255,255,255,255,66,0,67,0,255,255,69,0,70,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,89,0,255,255,255,255,92,0,93,0,255,255,95,0,96,0,255,255,98,0,255,255,100,0,101,0,102,0,103,0,104,0,105,0,106,0,255,255,255,255,109,0,255,255,255,255,255,255,255,255,255,255,255,255,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,255,255,255,255,255,255,255,255,129,0,130,0,131,0,19,0,255,255,21,0,22,0,23,0,24,0,255,255,255,255,255,255,255,255,255,255,30,0,31,0,32,0,33,0,34,0,35,0,36,0,255,255,255,255,39,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,48,0,49,0,255,255,51,0,52,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,60,0,255,255,255,255,63,0,255,255,255,255,66,0,67,0,255,255,69,0,70,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,89,0,255,255,255,255,92,0,93,0,255,255,95,0,96,0,255,255,98,0,255,255,100,0,101,0,102,0,103,0,104,0,105,0,106,0,255,255,255,255,109,0,110,0,255,255,255,255,113,0,114,0,255,255,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,255,255,255,255,255,255,129,0,130,0,131,0,19,0,255,255,21,0,22,0,23,0,24,0,255,255,255,255,255,255,255,255,255,255,30,0,31,0,32,0,33,0,34,0,35,0,36,0,255,255,255,255,39,0,255,255,255,255,255,255,255,255,255,255,45,0,255,255,47,0,48,0,49,0,255,255,51,0,52,0,53,0,54,0,55,0,56,0,255,255,58,0,59,0,60,0,255,255,255,255,63,0,255,255,255,255,66,0,67,0,255,255,69,0,70,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,89,0,255,255,255,255,92,0,93,0,255,255,95,0,96,0,255,255,98,0,255,255,100,0,101,0,102,0,103,0,104,0,105,0,106,0,255,255,255,255,109,0,255,255,255,255,255,255,255,255,255,255,255,255,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,255,255,255,255,255,255,255,255,129,0,130,0,131,0,19,0,255,255,21,0,22,0,23,0,24,0,255,255,255,255,255,255,255,255,255,255,30,0,31,0,32,0,33,0,34,0,35,0,36,0,255,255,255,255,39,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,48,0,49,0,255,255,51,0,52,0,53,0,54,0,55,0,56,0,255,255,58,0,59,0,60,0,255,255,255,255,63,0,255,255,255,255,66,0,67,0,255,255,69,0,70,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,89,0,255,255,255,255,92,0,93,0,255,255,95,0,96,0,255,255,98,0,255,255,100,0,101,0,102,0,103,0,104,0,105,0,106,0,255,255,255,255,109,0,110,0,255,255,255,255,113,0,114,0,255,255,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,255,255,255,255,255,255,255,255,129,0,130,0,131,0,19,0,255,255,21,0,22,0,23,0,24,0,255,255,255,255,255,255,255,255,255,255,30,0,31,0,32,0,33,0,34,0,35,0,36,0,255,255,255,255,39,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,48,0,49,0,255,255,51,0,52,0,53,0,54,0,55,0,56,0,255,255,58,0,59,0,60,0,255,255,255,255,63,0,255,255,255,255,66,0,67,0,255,255,69,0,70,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,89,0,255,255,255,255,92,0,93,0,255,255,95,0,96,0,255,255,98,0,255,255,100,0,101,0,102,0,103,0,104,0,105,0,106,0,255,255,255,255,109,0,110,0,255,255,255,255,113,0,114,0,255,255,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,255,255,255,255,255,255,255,255,129,0,130,0,131,0,19,0,255,255,21,0,22,0,23,0,24,0,255,255,255,255,255,255,255,255,255,255,30,0,31,0,32,0,33,0,34,0,35,0,36,0,255,255,255,255,39,0,255,255,255,255,255,255],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE+10240),allocate([255,255,255,255,255,255,255,255,255,255,48,0,49,0,255,255,51,0,52,0,53,0,54,0,55,0,56,0,255,255,58,0,59,0,60,0,255,255,255,255,63,0,255,255,255,255,66,0,67,0,255,255,69,0,70,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,89,0,255,255,255,255,92,0,93,0,255,255,95,0,96,0,255,255,98,0,255,255,100,0,101,0,102,0,103,0,104,0,105,0,106,0,255,255,255,255,109,0,110,0,255,255,255,255,113,0,114,0,255,255,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,255,255,255,255,255,255,255,255,129,0,130,0,131,0,19,0,255,255,21,0,22,0,23,0,24,0,255,255,255,255,255,255,255,255,255,255,30,0,31,0,32,0,33,0,34,0,35,0,36,0,255,255,255,255,39,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,48,0,49,0,255,255,51,0,52,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,60,0,255,255,255,255,63,0,255,255,255,255,66,0,67,0,255,255,69,0,70,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,89,0,255,255,255,255,92,0,93,0,255,255,95,0,96,0,255,255,98,0,99,0,100,0,101,0,102,0,103,0,104,0,105,0,106,0,255,255,255,255,109,0,255,255,255,255,255,255,255,255,255,255,255,255,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,255,255,255,255,255,255,255,255,129,0,130,0,131,0,19,0,255,255,21,0,22,0,23,0,24,0,255,255,255,255,255,255,255,255,255,255,30,0,31,0,32,0,33,0,34,0,35,0,36,0,255,255,255,255,39,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,48,0,49,0,255,255,51,0,52,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,60,0,255,255,255,255,63,0,255,255,255,255,66,0,67,0,255,255,69,0,70,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,89,0,255,255,255,255,92,0,93,0,255,255,95,0,96,0,255,255,98,0,255,255,100,0,101,0,102,0,103,0,104,0,105,0,106,0,255,255,255,255,109,0,255,255,255,255,255,255,255,255,255,255,255,255,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,255,255,255,255,255,255,255,255,129,0,130,0,131,0,19,0,255,255,21,0,22,0,23,0,24,0,255,255,255,255,255,255,255,255,255,255,30,0,31,0,32,0,33,0,34,0,35,0,36,0,255,255,255,255,39,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,48,0,49,0,255,255,51,0,52,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,60,0,255,255,255,255,63,0,255,255,255,255,66,0,67,0,255,255,69,0,70,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,89,0,255,255,255,255,92,0,93,0,255,255,95,0,96,0,255,255,255,255,99,0,100,0,101,0,102,0,103,0,104,0,105,0,106,0,255,255,255,255,109,0,255,255,255,255,255,255,255,255,255,255,255,255,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,255,255,255,255,255,255,255,255,129,0,130,0,131,0,19,0,255,255,21,0,22,0,23,0,24,0,255,255,255,255,255,255,255,255,255,255,30,0,31,0,32,0,33,0,34,0,35,0,36,0,255,255,255,255,39,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,48,0,49,0,255,255,51,0,52,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,60,0,255,255,255,255,63,0,255,255,255,255,66,0,67,0,255,255,69,0,70,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,89,0,255,255,255,255,92,0,93,0,255,255,95,0,96,0,255,255,255,255,255,255,100,0,101,0,102,0,103,0,104,0,105,0,106,0,255,255,255,255,109,0,255,255,255,255,255,255,255,255,255,255,255,255,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,255,255,255,255,255,255,255,255,129,0,130,0,131,0,19,0,255,255,21,0,22,0,23,0,24,0,255,255,255,255,255,255,255,255,255,255,30,0,31,0,32,0,33,0,34,0,35,0,36,0,255,255,255,255,39,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,48,0,49,0,255,255,51,0,52,0,53,0,54,0,55,0,56,0,255,255,58,0,59,0,60,0,255,255,255,255,63,0,255,255,255,255,66,0,67,0,255,255,69,0,70,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,89,0,255,255,255,255,92,0,93,0,255,255,95,0,96,0,255,255,98,0,255,255,100,0,101,0,102,0,103,0,104,0,105,0,106,0,255,255,255,255,109,0,255,255,255,255,255,255,255,255,255,255,255,255,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,255,255,255,255,255,255,255,255,129,0,130,0,131,0,19,0,255,255,21,0,22,0,23,0,24,0,255,255,255,255,255,255,255,255,255,255,30,0,31,0,32,0,33,0,34,0,35,0,36,0,255,255,255,255,39,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,48,0,49,0,255,255,51,0,52,0,53,0,54,0,55,0,56,0,255,255,58,0,59,0,60,0,255,255,255,255,63,0,255,255,255,255,66,0,67,0,255,255,69,0,70,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,89,0,255,255,255,255,92,0,93,0,255,255,95,0,96,0,255,255,98,0,255,255,100,0,101,0,102,0,103,0,104,0,105,0,106,0,255,255,255,255,109,0,255,255,255,255,255,255,255,255,255,255,255,255,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,255,255,255,255,255,255,255,255,129,0,130,0,131,0,19,0,255,255,21,0,22,0,23,0,24,0,255,255,255,255,255,255,255,255,255,255,30,0,31,0,32,0,33,0,34,0,35,0,36,0,255,255,255,255,39,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,48,0,49,0,255,255,51,0,52,0,53,0,54,0,55,0,56,0,255,255,58,0,59,0,60,0,255,255,255,255,63,0,255,255,255,255,66,0,67,0,255,255,69,0,70,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,89,0,255,255,255,255,92,0,93,0,255,255,95,0,96,0,255,255,98,0,255,255,100,0,101,0,102,0,103,0,104,0,105,0,106,0,255,255,255,255,109,0,255,255,255,255,255,255,255,255,255,255,255,255,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,255,255,255,255,255,255,255,255,129,0,130,0,131,0,19,0,255,255,21,0,22,0,23,0,24,0,255,255,255,255,255,255,255,255,255,255,30,0,31,0,32,0,33,0,34,0,35,0,36,0,255,255,255,255,39,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,48,0,49,0,255,255,51,0,52,0,53,0,54,0,55,0,56,0,255,255,58,0,59,0,60,0,255,255,255,255,63,0,255,255,255,255,66,0,67,0,255,255,69,0,70,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,89,0,255,255,255,255,92,0,93,0,255,255,95,0,96,0,255,255,255,255,255,255,100,0,101,0,102,0,103,0,104,0,105,0,106,0,255,255,255,255,109,0,255,255,255,255,255,255,255,255,255,255,255,255,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,255,255,255,255,255,255,255,255,129,0,130,0,131,0,19,0,255,255,21,0,22,0,23,0,24,0,255,255,255,255,255,255,255,255,255,255,30,0,31,0,32,0,33,0,34,0,35,0,36,0,255,255,255,255,39,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,48,0,49,0,255,255,51,0,52,0,53,0,54,0,55,0,56,0,255,255,58,0,59,0,60,0,255,255,255,255,63,0,255,255,255,255,66,0,67,0,255,255,69,0,70,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,89,0,255,255,255,255,92,0,93,0,255,255,95,0,96,0,255,255,255,255,255,255,100,0,101,0,102,0,103,0,104,0,105,0,106,0,255,255,255,255,109,0,255,255,255,255,255,255,255,255,255,255,255,255,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,255,255,255,255,255,255,255,255,129,0,130,0,131,0,19,0,255,255,21,0,22,0,23,0,24,0,255,255,255,255,255,255,255,255,255,255,30,0,31,0,32,0,33,0,34,0,35,0,36,0,255,255,255,255,39,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,48,0,49,0,255,255,51,0,52,0,53,0,54,0,55,0,56,0,255,255,58,0,59,0,60,0,255,255,255,255,63,0,255,255,255,255,66,0,67,0,255,255,69,0,70,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,89,0,255,255,255,255,92,0,93,0,255,255,95,0,96,0,255,255,255,255,255,255,100,0,101,0,102,0,103,0,104,0,105,0,106,0,255,255,255,255,109,0,255,255,255,255,255,255,255,255,255,255,255,255,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,255,255,255,255,255,255,255,255,129,0,130,0,131,0,19,0,255,255,21,0,22,0,23,0,24,0,255,255,255,255,255,255,255,255,255,255,30,0,31,0,32,0,33,0,34,0,35,0,36,0,255,255,255,255,39,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,48,0,49,0,255,255,51,0,52,0,53,0,54,0,55,0,56,0,255,255,58,0,59,0,60,0,255,255,255,255,63,0,255,255,255,255,66,0,67,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,86,0,255,255,255,255,89,0,255,255,255,255,92,0,93,0,255,255,95,0,96,0,255,255,255,255,255,255,100,0,101,0,102,0,103,0,104,0,105,0,106,0,255,255,255,255,109,0,255,255,255,255,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,19,0,129,0,21,0,22,0,23,0,24,0,255,255,255,255,255,255,255,255,255,255,30,0,31,0,32,0,33,0,34,0,35,0,36,0,255,255,255,255,39,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,48,0,49,0,255,255,51,0,52,0,53,0,54,0,55,0,56,0,255,255,58,0,59,0,60,0,255,255,255,255,63,0,255,255,255,255,66,0,67,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,89,0,255,255,255,255,92,0,93,0,255,255,95,0,96,0,255,255,98,0,255,255,100,0,101,0,102,0,103,0,104,0,105,0,106,0,255,255,255,255,109,0,255,255,255,255,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,19,0,129,0,21,0,22,0,23,0,24,0,255,255,255,255,255,255,255,255,255,255,30,0,31,0,32,0,33,0,34,0,35,0,36,0,255,255,255,255,39,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,48,0,49,0,255,255,51,0,52,0,53,0,54,0,55,0,56,0,255,255,58,0,59,0,60,0,255,255,255,255,63,0,255,255,255,255,66,0,67,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,89,0,255,255,255,255,92,0,93,0,255,255,95,0,96,0,255,255,98,0,255,255,100,0,101,0,102,0,103,0,104,0,105,0,106,0,255,255,255,255,109,0,255,255,255,255,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,19,0,129,0,21,0,22,0,23,0,24,0,255,255,255,255,255,255,255,255,255,255,30,0,31,0,32,0,33,0,34,0,35,0,36,0,255,255,255,255,39,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,48,0,49,0,255,255,51,0,52,0,53,0,54,0,55,0,56,0,255,255,58,0,59,0,60,0,255,255,255,255,63,0,255,255,255,255,66,0,67,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,89,0,255,255,255,255,92,0,93,0,255,255,95,0,96,0,255,255,255,255,255,255,100,0,101,0,102,0,103,0,104,0,105,0,106,0,255,255,255,255,109,0,255,255,255,255,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,19,0,129,0,21,0,22,0,23,0,24,0,255,255,255,255,255,255,255,255,255,255,30,0,31,0,32,0,33,0,34,0,35,0,36,0,255,255,255,255,39,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,48,0,49,0,255,255,51,0,52,0,53,0,54,0,55,0,56,0,255,255,58,0,59,0,60,0,255,255,255,255,63,0,255,255,255,255,66,0,67,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,89,0,255,255,255,255,92,0,93,0,255,255,95,0,96,0,255,255,255,255,255,255,100,0,101,0,102,0,103,0,104,0,105,0,106,0,255,255,255,255,109,0,255,255,255,255,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,19,0,129,0,21,0,22,0,23,0,24,0,255,255,255,255,255,255,255,255,255,255,30,0,31,0,32,0,33,0,34,0,35,0,36,0,255,255,255,255,39,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,48,0,49,0,255,255,51,0,52,0,53,0,54,0,55,0,56,0,255,255,58,0,59,0,60,0,255,255,255,255,63,0,255,255,255,255,66,0,67,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,89,0,255,255,255,255,92,0,93,0,255,255,95,0,96,0,255,255,255,255,255,255,100,0,101,0,102,0,103,0,104,0,105,0,106,0,255,255,255,255,109,0,255,255,255,255,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,19,0,129,0,21,0,22,0,23,0,24,0,255,255,255,255,255,255,255,255,255,255,30,0,31,0,32,0,33,0,34,0,35,0,36,0,255,255,255,255,39,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,48,0,49,0,255,255,51,0,52,0,53,0,54,0,55,0,56,0,255,255,58,0,59,0,60,0,255,255,255,255,63,0,255,255,255,255,66,0,67,0,255,255,71,0,72,0,73,0,74,0,75,0,76,0,77,0,255,255,255,255,80,0,81,0,255,255,255,255,255,255,255,255,86,0,87,0,255,255,255,255,255,255,89,0,255,255,255,255,92,0,93,0,255,255,95,0,96,0,255,255,255,255,255,255,100,0,101,0,102,0,103,0,104,0,105,0,106,0,255,255,255,255,109,0,255,255,255,255,51,0,52,0,255,255,255,255,55,0,119,0,120,0,121,0,122,0,123,0,124,0,125,0,126,0,127,0,128,0,255,255,255,255,129,0,69,0,70,0,71,0,72,0,73,0,74,0,75,0,76,0,77,0,255,255,255,255,80,0,81,0,255,255,255,255,84,0,85,0,86,0,87,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,98,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,119,0,120,0,121,0,122,0,123,0,124,0,125,0,126,0,127,0,128,0,255,255,130,0,131,0,51,0,52,0,255,255,255,255,55,0,255,255,138,0,139,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,69,0,70,0,71,0,72,0,73,0,74,0,75,0,76,0,77,0,255,255,255,255,80,0,81,0,255,255,255,255,84,0,85,0,86,0,87,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,98,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,119,0,120,0,121,0,122,0,123,0,124,0,125,0,126,0,127,0,128,0,255,255,130,0,131,0,51,0,52,0,255,255,255,255,55,0,255,255,138,0,139,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,69,0,70,0,71,0,72,0,73,0,74,0,75,0,76,0,77,0,255,255,255,255,80,0,81,0,255,255,255,255,84,0,85,0,86,0,87,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,98,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,119,0,120,0,121,0,122,0,123,0,124,0,125,0,126,0,127,0,128,0,255,255,130,0,131,0,51,0,52,0,255,255,255,255,55,0,255,255,138,0,139,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,69,0,70,0,71,0,72,0,73,0,74,0,75,0,76,0,77,0,255,255,255,255,80,0,81,0,255,255,255,255,84,0,85,0,86,0,87,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,98,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,119,0,120,0,121,0,122,0,123,0,124,0,125,0,126,0,127,0,128,0,255,255,130,0,131,0,51,0,52,0,255,255,255,255,55,0,255,255,138,0,139,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,69,0,70,0,71,0,72,0,73,0,74,0,75,0,76,0,77,0,255,255,255,255,80,0,81,0,255,255,255,255,84,0,85,0,86,0,87,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,98,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,119,0,120,0,121,0,122,0,123,0,124,0,125,0,126,0,127,0,128,0,255,255,130,0,131,0,51,0,52,0,255,255,255,255,55,0,255,255,138,0,139,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,69,0,70,0,71,0,72,0,73,0,74,0,75,0,76,0,77,0,255,255,255,255,80,0,81,0,255,255,255,255,84,0,85,0,86,0,87,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,98,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,119,0,120,0,121,0,122,0,123,0,124,0,125,0,126,0,127,0,128,0,255,255,130,0,131,0,51,0,52,0,255,255,255,255,55,0,255,255,138,0,139,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,69,0,70,0,71,0,72,0,73,0,74,0,75,0,76,0,77,0,255,255,255,255,80,0,81,0,255,255,255,255,84,0,85,0,86,0,87,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,98,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,119,0,120,0,121,0,122,0,123,0,124,0,125,0,126,0,127,0,128,0,255,255,130,0,131,0,51,0,52,0,255,255,255,255,55,0,255,255,138,0,139,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,69,0,70,0,71,0,72,0,73,0,74,0,75,0,76,0,77,0,255,255,255,255,80,0,81,0,255,255,255,255,84,0,85,0,86,0,87,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,98,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,119,0,120,0,121,0,122,0,123,0,124,0,125,0,126,0,127,0,128,0,255,255,130,0,131,0,51,0,52,0,255,255,255,255,55,0,255,255,138,0,139,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,69,0,70,0,71,0,72,0,73,0,74,0,75,0,76,0,77,0,255,255,255,255,80,0,81,0,255,255,255,255,84,0,85,0,86,0,87,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,98,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,119,0,120,0,121,0,122,0,123,0,124,0,125,0,126,0,127,0,128,0,255,255,130,0,131,0,51,0,52,0,255,255,255,255,55,0,255,255,138,0,139,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,69,0,70,0,71,0,72,0,73,0,74,0,75,0,76,0,77,0,255,255,255,255,80,0,81,0,255,255,255,255,84,0,85,0,86,0,87,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,98,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,119,0,120,0,121,0,122,0,123,0,124,0,125,0,126,0,127,0,128,0,255,255,130,0,131,0,51,0,52,0,255,255,255,255,55,0,255,255,138,0,139,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,69,0,70,0,71,0,72,0,73,0,74,0,75,0,76,0,77,0,255,255,255,255,80,0,81,0,255,255,255,255,84,0,85,0,86,0,87,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,98,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,119,0,120,0,121,0,122,0,123,0,124,0,125,0,126,0,127,0,128,0,255,255,130,0,131,0,51,0,52,0,255,255,255,255,55,0,255,255,138,0,139,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,69,0,70,0,71,0,72,0,73,0,74,0,75,0,76,0,77,0,255,255,255,255,80,0,81,0,255,255,255,255,84,0,85,0,86,0,87,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,98,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,119,0,120,0,121,0,122,0,123,0,124,0,125,0,126,0,127,0,128,0,255,255,130,0,131,0,51,0,52,0,255,255,255,255,55,0,255,255,138,0,139,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,69,0,70,0,71,0,72,0,73,0,74,0,75,0,76,0,77,0,255,255,255,255,80,0,81,0,255,255,255,255,84,0,85,0,86,0,87,0,255,255,255,255,255,255,71,0,72,0,73,0,74,0,75,0,76,0,77,0,98,0,255,255,80,0,81,0,255,255,255,255,255,255,255,255,86,0,87,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,119,0,120,0,121,0,122,0,123,0,124,0,125,0,126,0,127,0,128,0,255,255,130,0,131,0,255,255,255,255,255,255,255,255,255,255,255,255,138,0,119,0,120,0,121,0,122,0,123,0,124,0,125,0,126,0,127,0,128,0,99,0,123,2,3,1,242,0,242,0,61,1,115,1,242,0,84,2,171,1,235,0,194,0,226,1,5,1,230,0,115,0,115,0,18,2,79,1,104,2,237,1,248,0,248,0,115,0,100,0,248,0,148,1,18,1,230,0,207,2,57,2,114,2,65,1,123,2,0,1,203,1,32,1,208,1,124,1,205,1,55,2,219,2,63,2,23,2,226,2,66,2,247,0,247,0,25,1,29,1,247,0,229,2,82,2,6,3,232,2,24,1,28,1,139,2,42,1,67,0,235,0,67,0,115,0,236,0,83,2,1,3,97,2,64,1,168,2,69,3,120,2,200,2,201,2,120,2,72,3,107,2,55,2,113,1,63,2,162,255,23,1,12,3,101,2,14,3,152,2,139,1,115,0,83,2,130,3,246,2,254,2,143,3,113,1,245,0,250,0,188,254,191,1,251,0,159,255,237,254,1,1,110,1,237,254,244,1,49,254,201,0,201,0,7,1,71,1,72,1,118,1,201,0,173,2,236,0,53,2,49,254,61,2,0,1,181,2,61,2,155,255,83,2,208,0,81,1,14,1,139,1,3,0,233,0,156,255,73,1,162,255,118,1,160,255,46,254,142,2,160,255,53,2,158,255,61,2,117,1,147,1,162,255,188,254,188,254,161,255,11,1,83,2,124,3,158,255,111,1,53,2,170,255,61,2,75,1,174,2,161,255,218,2,189,1,160,1,53,2,14,2,61,2,47,254,143,3,159,255,155,255,155,255,221,2,218,2,255,2,252,0,45,254,130,3,76,1,87,3,107,1,119,1,157,255,104,1,105,1,106,1,46,254,116,1,156,255,114,1,3,3,163,255,14,1,44,254,7,3,255,0,170,255,255,0,168,2,53,2,61,2,171,1,231,0,232,0,114,1,153,2,168,2,156,3,72,3,17,3,121,1,236,2,42,3,237,1,206,2,47,254,231,0,232,0,113,2,232,0,123,2,208,1,42,254,53,2,45,254,61,2,237,253,108,1,109,1,159,255,159,255,119,254,6,3,235,0,207,1,42,1,199,1,163,255,80,1,184,3,159,1,44,254,232,0,194,1,242,0,164,255,242,0,242,0,202,1,168,255,169,1,169,1,1,3,18,1,232,0,236,0,231,0,232,0,180,1,14,3,1,3,236,0,248,0,14,3,248,0,166,255,160,255,160,255,158,255,158,255,42,254,235,0,169,255,152,2,249,2,161,255,161,255,120,3,193,1,10,2,43,254,167,255,208,1,237,253,19,2,2,1,236,0,247,0,29,3,247,0,22,3,120,2,120,2,119,254,165,255,36,3,236,253,54,254,59,1,60,1,127,1,81,0,115,0,81,0,116,0,116,0,129,1,50,254,204,0,204,0,201,0,201,0,214,0,215,2,204,0,204,0,204,0,18,1,80,2,204,0,69,2,71,2,234,254,16,2,236,0,2,1,149,1,150,1,43,254,232,0,190,1,237,1,201,1,201,1,172,1,14,3,175,1,201,1,119,254,227,2,119,254,119,254,138,1,182,1,186,1,54,254,0,2,81,0,47,3,115,0,14,1,33,1,168,255,130,1,131,1,50,254,242,0,166,255,195,1,181,1,183,1,204,0,197,1,63,3,228,2,160,255,12,2,180,1,134,3,234,254,234,254,12,2,59,3,236,253,152,2,33,1,152,2,196,1,242,0,158,3,139,3,18,2,62,2,67,0,144,3,232,0,191,3,122,1,5,2,180,1,158,255,123,1,242,0,231,0,232,0,189,255,91,2,142,1,161,255,146,1,241,2,242,0,151,1,180,1,62,2,103,2,103,2,155,1,204,0,245,2,81,0,138,2,180,1,207,1,14,1,123,2,175,255,157,1,62,2,18,3,240,253,71,1,72,1,201,0,201,0,201,0,201,0,62,2,6,2,7,2,130,2,239,253,160,1,122,2,125,1,126,1,105,3,169,1,169,1,1,2,2,2,3,2,4,2,168,255,99,0,230,0,162,1,46,3,166,255,208,1,237,2,115,2,152,2,126,3,121,3,237,1,188,3,189,1,236,0,236,0,242,0,62,2,166,1,233,253,168,255,137,2,167,1,168,255,170,1,166,255,168,255,180,1,166,255,185,1,207,1,166,255,232,0,92,2,81,1,115,0,190,255,115,0,54,254,156,255,192,1,100,2,62,2,120,2,143,1,157,2,85,2,198,1,157,2,50,254,157,2,204,1,241,1,210,1,81,0,242,1,243,1,148,3,206,1,67,0,164,255,152,2,254,1,152,2,204,0,204,0,255,1,17,2,135,2,124,2,73,2,57,1,152,1,126,2,45,1,46,1,241,2,88,2,129,2,177,2,89,2,233,253,93,2,240,253,238,1,54,254,54,254,185,2,134,2,240,253,116,2,144,1,145,1,125,2,239,253,152,2,50,254,50,254,115,0,146,2,239,253,215,1,216,1,217,1,218,1,190,2,237,1,204,0,169,2,204,0,204,0,242,1,243,1,204,0,204,0,192,2,127,2,128,2,81,0,153,1,154,1,47,1,48,1,81,0,81,0,175,255,233,253,145,2,233,253,233,253,190,2,204,0,237,253,166,2,197,2,132,2,155,2,197,2,177,2,177,2,188,2,160,255,33,1,204,2,159,2,190,2,178,3,161,2,194,2,162,2,165,2,194,2,164,2,3,255,197,2,190,2,179,2,182,2,83,2,183,2,217,2,220,2,168,255,220,2,213,2,208,2,188,2,180,2,194,2,234,2,146,2,220,2,215,1,216,1,217,1,218,1,81,0,204,0,204,0,204,0,204,0,81,0,204,0,204,0,230,0,248,2,204,0,187,1,81,0,33,1,190,2,204,0,12,2,169,1,37,3,218,2,236,0,207,1,114,3,19,2,211,1,253,2,25,3,27,3,116,3,242,2,189,2,193,2,32,3,34,3,235,2,243,2,253,1,31,3,196,2,45,1,46,1,199,2,250,2,204,0,9,3,53,2,253,2,52,1,54,1,56,1,58,1,204,0,204,0,81,1,53,2,2,255,61,2,158,255,144,1,188,1,236,0,45,3,209,2,161,255,24,3,204,0,54,3,81,0,204,0,201,0,30,3,212,1,213,1,58,3,44,1,81,0,45,1,46,1,166,255,204,0,125,3,50,3,201,1,81,0,169,255,205,2,47,1,48,1,204,0,115,0,146,2,60,3,215,1,216,1,217,1,218,1,67,3,44,3,177,2,70,3,73,3,77,3,79,3,201,0,48,3,74,3,102,1,103,1,104,1,105,1,106,1,52,3,97,3,244,2,56,3,81,3,83,3,86,3,48,254,233,2,81,0,88,3,244,254,47,1,48,1,103,2,81,1,100,3,251,2,81,0,146,2,219,1,215,1,216,1,217,1,218,1,89,3,169,1,221,1,253,2,10,3,94,1,95,1,33,1,93,3,33,1,95,3,204,0,19,3,102,3,236,0,1,255,103,3,157,2,157,2,107,3,157,2,236,0,157,2,157,2,117,3,118,3,222,1,123,3,157,2,48,254,48,254,157,2,157,2,244,254,244,254,147,2,131,3,39,3,40,3,81,0,132,3,115,0,236,0,102,1,103,1,104,1,105,1,106,1,127,3,137,3,215,1,216,1,217,1,218,1,140,3,53,3,81,1,0,255,214,1,146,3,215,1,216,1,217,1,218,1,147,3,175,3,149,3,61,3,62,3,157,3,33,1,94,1,95,1,161,3,65,3,165,3,167,3,115,0,201,0,172,3,220,2,183,3,98,0,237,253,98,0,236,253,194,3,131,2,68,3,98,0,98,0,75,3,76,3,120,0,57,3,98,0,98,0,98,0,198,2,219,1,98,0,160,2,212,0,163,2,5,3,220,1,221,1,8,3,101,1,102,1,103,1,104,1,105,1,106,1,233,254,182,3,236,0,247,2,38,3,13,3,159,3,185,3,236,0,248,1,181,3,45,1,46,1,141,3,98,0,170,2,222,1,204,0,81,0,223,1,197,0,104,3,214,1,2,3,215,1,216,1,217,1,218,1,98,0,106,3,138,3,150,3,224,1,115,3,157,2,157,2,157,2,157,2,108,3,157,2,157,2,242,0,135,1,157,2,0,0,157,2,157,2,233,254,233,254,0,0,0,0,204,0,180,1,0,0,91,2,220,2,190,2,0,0,47,1,48,1,130,1,131,1,0,0,219,1,51,1,45,1,46,1,62,2,0,0,220,1,221,1,53,1,45,1,46,1,0,0,98,0,0,0,98,0,151,3,152,3,0,0,55,1,45,1,46,1,0,0,0,0,0,0,157,2,157,2,157,2,157,2,157,2,0,0,153,3,222,1,154,3,0,0,223,1,155,3,157,2,0,0,0,0,214,1,0,0,215,1,216,1,217,1,218,1,81,0,0,0,0,0,0,0,47,1,48,1,232,0,0,0,81,0,0,0,0,0,47,1,48,1,0,0,0,0,33,1,204,0,0,0,0,0,204,0,204,0,47,1,48,1,0,0,0,0,204,0,204,0,238,1,45,1,46,1,0,0,0,0,0,0,81,0,81,0,219,1,0,0,250,1,45,1,46,1,0,0,220,1,221,1,0,0,81,0,251,1,45,1,46,1,0,0,243,0,243,0,81,0,0,0,243,0,204,0,0,0,133,3,98,0,135,3,252,1,45,1,46,1,136,3,81,0,81,0,0,0,222,1,98,0,98,0,223,1,81,0,0,0,142,3,0,0,145,3,47,1,48,1,0,0,8,1,10,1,0,0,0,0,210,2,243,0,243,0,47,1,48,1,81,0,81,0,239,1,0,0,0,0,0,0,47,1,48,1,62,1,63,1,249,1,0,0,0,0,249,1,0,0,249,1,92,3,249,1,0,0,249,1,47,1,48,1,0,0,98,0,0,0,98,0,98,0,0,0,0,0,98,0,98,0,0,0,0,0,204,0,98,0,0,0,0,0,0,0,0,0,98,0,98,0,0,0,0,0,0,0,81,0,81,0,0,0,98,0,0,0,0,0,0,0,0,0,111,3,186,3,0,0,0,0,81,0,187,3,0,0,189,3,0,0,0,0,0,0,0,0,190,3,214,1,0,0,215,1,216,1,217,1,218,1,0,0,0,0,78,3,80,3,81,1,82,3,0,0,84,3,85,3,0,0,0,0,0,0,0,0,90,3,0,0,198,3,94,3,96,3,0,0,94,1,95,1,98,0,98,0,98,0,98,0,98,0,98,0,98,0,98,0,0,0,0,0,98,0,0,0,98,0,0,0,219,1,98,0,0,0,0,0,81,0,0,0,220,1,221,1,0,0,0,0,81,0,0,0,81,0,0,0,0,0,81,0,0,0,0,0,0,0,99,1,100,1,101,1,102,1,103,1,104,1,105,1,106,1,0,0,0,0,98,0,0,0,222,1,0,0,0,0,223,1,0,0,0,0,98,0,98,0,0,0,0,0,146,2,0,0,215,1,216,1,217,1,218,1,204,0,0,0,0,0,0,0,98,0,0,0,98,0,98,0,146,2,0,0,215,1,216,1,217,1,218,1,98,0,0,0,0,0,0,0,98,0,0,0,0,0,0,0,98,0,0,0,0,0,0,0,0,0,98,0,0,0,0,0,0,0,243,0,243,0,243,0,62,1,147,2,66,1,67,1,68,1,69,1,70,1,148,2,0,0,0,0,0,0,243,0,0,0,243,0,243,0,147,2,0,0,160,3,162,3,163,3,164,3,71,3,166,3,168,3,0,0,98,0,171,3,0,0,173,3,174,3,0,0,0,0,0,0,0,0,98,0,0,0,0,0,0,0,78,0,0,0,78,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,213,0,0,0,0,0,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,3,193,3,195,3,196,3,197,3,0,0,0,0,0,0,0,0,0,0,98,0,0,0,199,3,0,0,78,0,0,0,0,0,0,0,0,0,0,0,243,0,0,0,0,0,0,0,0,0,21,2,24,2,25,2,26,2,27,2,28,2,29,2,30,2,31,2,32,2,33,2,34,2,35,2,36,2,37,2,38,2,39,2,40,2,41,2,42,2,43,2,44,2,45,2,46,2,47,2,48,2,49,2,0,0,243,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,2,72,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,243,0,0,0,78,0,0,0,0,0,95,0,0,0,95,0,0,0,0,0,0,0,0,0,94,2,0,0,243,0,0,0,70,2,72,2,0,0,0,0,0,0,0,0,0,0,243,0,0,0,0,0,0,0,98,0,98,0,0,0,243,0,0,0,0,0,0,0,0,0,0,0,243,0,243,0,0,0,0,0,243,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,95,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,2,0,0,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,243,0,0,0,0,0,243,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,243,0,0,0,0,0,0,0,0,0,0,0,0,0,26,1,78,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,94,0,243,0,94,0,117,0,117,0,117,0,0,0,0,0,0,0,0,0,0,0,216,0,0,0,0,0,95,0,0,0,0,0,0,0,98,0,0,0,0,0,0,0,0,0,0,0,171,2,172,2,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,0,243,0,0,0,98,0,98,0,0,0,0,0,0,0,0,0,98,0,98,0,0,0,94,0,0,0,0,0,0,0,34,1,98,0,98,0,0,0,78,0,0,0,0,0,0,0,0,0,78,0,78,0,0,0,98,0,0,0,0,0,0,0,0,0,0,0,0,0,98,0,0,0,0,0,98,0,0,0,34,1,0,0,0,0,0,0,0,0,0,0,0,0,98,0,98,0,0,0,0,0,0,0,0,0,0,0,98,0,97,0,0,0,97,0,118,0,118,0,0,0,0,0,0,0,0,0,0,0,0,0,217,0,0,0,95,0,0,0,0,0,98,0,98,0,0,0,0,0,94,0,0,0,0,0,78,0,0,0,0,0,243,0,0,0,78,0,0,0,0,0,0,0,0,0,0,0,0,0,78,0,0,0,0,0,20,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,97,0,0,0,0,0,98,0,35,1,0,0,0,0,0,0,0,0,243,0,0,0,0,0,243,0,0,0,98,0,98,0,0,0,0,0,243,0,243,0,0,0,0,0,0,0,0,0,0,0,0,0,98,0,0,0,35,1,0,0,0,0,95,0,0,0,0,0,0,0,0,0,95,0,95,0,0,0,0,0,0,0,163,1,164,1,165,1,78,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,78,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,78,0,0,0,94,0,97,0,0,0,0,0,0,0,0,0,0,0,0,0,243,0,0,0,0,0,0,0,94,2,23,3,0,0,26,3,28,3,0,0,98,0,0,0,0,0,33,3,35,3,0,0,98,0,0,0,98,0,95,0,0,0,98,0,0,0,41,3,95,0,0,0,0,0,78,0,0,0,0,0,0,0,95,0,0,0,0,0,0,0,0,0,78,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26,3,28,3,0,0,33,3,35,3,0,0,0,0,0,0,98,0,0,0,0,0,94,0,243,0,0,0,0,0,243,0,94,0,94,0,0,0,11,2,0,0,0,0,0,0,0,0,22,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,1,97,0,78,0,0,0,0,0,0,0,95,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,95,0,0,0,0,0,243,0,0,0,0,0,0,0,99,3,95,0,0,0,0,0,0,0,0,0,0,0,101,3,0,0,0,0,0,0,0,0,0,0,94,0,0,0,0,0,0,0,0,0,94,0,0,0,0,0,0,0,0,0,0,0,0,0,94,0,34,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,101,3,0,0,0,0,95,0,0,0,0,0,0,0,0,0,243,0,97,0,0,0,0,0,95,0,22,2,97,0,97,0,0,0,0,0,0,0,117,2,119,2,0,0,0,0,26,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35,1,0,0,0,0,0,0,0,0,0,0,78,0,0,0,0,0,0,0,0,0,0,0,94,0,0,0,0,0,0,0,0,0,0,0,0,0,119,2,94,0,0,0,26,1,0,0,0,0,95,0,0,0,0,0,94,0,0,0,0,0,0,0,0,0,0,0,97,0,0,0,0,0,0,0,0,0,97,0,0,0,0,0,0,0,0,0,0,0,0,0,97,0,35,1,0,0,0,0,0,0,158,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,243,0,0,0,0,0,0,0,0,0,0,0,94,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,94,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,178,2,0,0,0,0,34,1,0,0,34,1,0,0,0,0,0,0,0,0,0,0,78,0,0,0,0,0,0,0,0,0,97,0,0,0,0,0,78,0,0,0,0,0,0,0,0,0,97,0,0,0,0,0,20,2,0,0,0,0,0,0,0,0,97,0,95,0,0,0,94,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,78,0,78,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,78,0,0,0,0,0,0,0,0,0,0,0,0,0,78,0,0,0,0,0,0,0,34,1,0,0,0,0,97,0,0,0,0,0,0,0,0,0,78,0,78,0,0,0,0,0,97,0,0,0,214,2,78,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35,1,0,0,35,1,0,0,0,0,0,0,78,0,78,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,238,2,0,0,0,0,240,2,0,0,0,0,0,0,0,0,0,0,119,2,26,1,0,0,0,0,0,0,95,0,97,0,0,0,0,0,0,0,94,0,0,0,0,0,95],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE+20480),allocate([78,0,78,0,0,0,0,0,0,0,0,0,0,0,0,0,110,3,0,0,0,0,0,0,78,0,35,1,95,0,95,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,95,0,0,0,0,0,21,3,0,0,0,0,0,0,95,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,95,0,95,0,0,0,0,0,0,0,0,0,0,0,95,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,78,0,0,0,95,0,95,0,0,0,0,0,78,0,0,0,78,0,97,0,94,0,78,0,0,0,0,0,0,0,0,0,0,0,0,0,94,0,64,3,0,0,0,0,66,3,0,0,0,0,34,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,94,0,94,0,0,0,95,0,95,0,0,0,213,253,0,0,0,0,0,0,0,0,94,0,0,0,0,0,0,0,95,0,98,3,0,0,94,0,213,253,213,253,213,253,213,253,213,253,213,253,0,0,213,253,0,0,0,0,0,0,94,0,94,0,213,253,213,253,0,0,0,0,0,0,94,0,0,0,0,0,0,0,0,0,0,0,213,253,213,253,0,0,213,253,213,253,213,253,213,253,213,253,0,0,0,0,0,0,94,0,94,0,97,0,0,0,0,0,0,0,0,0,0,0,0,0,26,1,97,0,0,0,0,0,0,0,0,0,95,0,117,0,35,1,0,0,0,0,0,0,95,0,0,0,95,0,0,0,0,0,95,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,97,0,97,0,0,0,0,0,0,0,213,253,0,0,0,0,0,0,94,0,94,0,97,0,0,0,0,0,0,0,0,0,0,0,112,3,97,0,0,0,0,0,94,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,97,0,97,0,0,0,0,0,0,0,0,0,0,0,97,0,0,0,0,0,0,0,0,0,0,0,50,2,51,2,0,0,0,0,52,2,0,0,0,0,213,253,213,253,0,0,213,253,97,0,97,0,255,0,213,253,0,0,213,253,213,253,164,0,165,0,166,0,167,0,168,0,169,0,170,0,171,0,172,0,118,0,0,0,173,0,174,0,0,0,94,0,175,0,176,0,177,0,178,0,0,0,94,0,0,0,94,0,0,0,0,0,94,0,0,0,0,0,0,0,179,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,97,0,97,0,0,0,0,0,0,0,0,0,0,0,0,0,113,3,0,0,0,0,0,0,97,0,180,0,181,0,182,0,183,0,184,0,185,0,186,0,187,0,188,0,189,0,0,0,190,0,191,0,0,0,0,0,0,0,0,0,0,0,0,0,192,0,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,97,0,0,0,0,0,0,0,0,0,0,0,97,0,0,0,97,0,213,253,4,0,97,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,15,0,0,0,16,0,17,0,18,0,19,0,0,0,0,0,0,0,0,0,0,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,0,0,0,0,27,0,0,0,0,0,0,0,0,0,0,0,28,0,29,0,30,0,31,0,32,0,0,0,33,0,34,0,35,0,36,0,37,0,38,0,0,0,39,0,40,0,41,0,0,0,0,0,42,0,0,0,0,0,43,0,44,0,0,0,45,0,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,47,0,0,0,0,0,48,0,49,0,0,0,50,0,51,0,234,254,52,0,0,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,0,0,0,0,60,0,234,254,234,254,234,254,234,254,234,254,234,254,0,0,234,254,0,0,0,0,202,2,0,0,0,0,0,0,234,254,234,254,234,254,0,0,0,0,61,0,62,0,63,0,0,0,0,0,234,254,234,254,0,0,234,254,234,254,234,254,234,254,234,254,213,253,213,253,0,0,0,0,0,0,81,1,82,1,83,1,84,1,85,1,86,1,87,1,88,1,89,1,90,1,91,1,92,1,93,1,0,0,0,0,94,1,95,1,0,0,0,0,0,0,0,0,234,254,234,254,234,254,234,254,234,254,234,254,234,254,234,254,234,254,234,254,234,254,234,254,234,254,0,0,0,0,234,254,234,254,234,254,0,0,225,2,234,254,0,0,0,0,0,0,0,0,96,1,234,254,97,1,98,1,99,1,100,1,101,1,102,1,103,1,104,1,105,1,106,1,234,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,157,255,234,254,234,254,234,254,234,254,234,254,234,254,234,254,234,254,234,254,234,254,234,254,234,254,0,0,0,0,120,254,0,0,0,0,234,254,234,254,234,254,234,254,0,0,0,0,234,254,234,254,234,254,234,254,120,254,120,254,120,254,120,254,120,254,120,254,0,0,120,254,0,0,0,0,184,2,0,0,0,0,120,254,120,254,120,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,120,254,120,254,0,0,120,254,120,254,120,254,120,254,120,254,0,0,0,0,0,0,0,0,0,0,81,1,82,1,83,1,84,1,85,1,86,1,87,1,88,1,89,1,90,1,91,1,92,1,93,1,0,0,0,0,94,1,95,1,0,0,0,0,0,0,0,0,120,254,120,254,120,254,120,254,120,254,120,254,120,254,120,254,120,254,120,254,120,254,120,254,120,254,0,0,0,0,120,254,120,254,120,254,0,0,0,0,120,254,0,0,0,0,0,0,0,0,96,1,120,254,97,1,98,1,99,1,100,1,101,1,102,1,103,1,104,1,105,1,106,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26,255,120,254,0,0,120,254,120,254,120,254,120,254,120,254,120,254,120,254,120,254,120,254,120,254,0,0,0,0,243,254,0,0,120,254,120,254,120,254,120,254,120,254,0,0,255,0,120,254,120,254,120,254,120,254,243,254,243,254,243,254,243,254,243,254,243,254,0,0,243,254,0,0,0,0,184,2,0,0,0,0,0,0,243,254,243,254,243,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,243,254,243,254,0,0,243,254,243,254,243,254,243,254,243,254,0,0,0,0,0,0,0,0,0,0,81,1,82,1,83,1,84,1,85,1,86,1,87,1,88,1,89,1,90,1,91,1,92,1,93,1,0,0,0,0,94,1,95,1,0,0,0,0,0,0,0,0,243,254,243,254,243,254,243,254,243,254,243,254,243,254,243,254,243,254,243,254,243,254,243,254,243,254,0,0,0,0,243,254,243,254,243,254,0,0,0,0,243,254,0,0,0,0,0,0,0,0,96,1,243,254,97,1,98,1,99,1,100,1,101,1,102,1,103,1,104,1,105,1,106,1,243,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,243,254,243,254,243,254,243,254,243,254,243,254,243,254,243,254,243,254,243,254,243,254,243,254,0,0,0,0,213,253,0,0,0,0,243,254,243,254,243,254,243,254,0,0,0,0,243,254,243,254,243,254,243,254,213,253,213,253,213,253,213,253,213,253,213,253,0,0,213,253,0,0,0,0,0,0,0,0,0,0,213,253,213,253,213,253,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,213,253,213,253,0,0,213,253,213,253,213,253,213,253,213,253,0,0,0,0,0,0,0,0,0,0,81,1,82,1,83,1,84,1,85,1,86,1,87,1,88,1,89,1,90,1,91,1,92,1,93,1,0,0,0,0,94,1,95,1,0,0,0,0,0,0,0,0,213,253,213,253,213,253,213,253,213,253,213,253,213,253,213,253,213,253,213,253,213,253,213,253,213,253,0,0,0,0,213,253,213,253,213,253,0,0,0,0,213,253,0,0,0,0,0,0,0,0,96,1,213,253,97,1,98,1,99,1,100,1,101,1,102,1,103,1,104,1,105,1,106,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,213,253,0,0,213,253,213,253,213,253,213,253,213,253,213,253,213,253,213,253,213,253,213,253,0,0,0,0,227,254,0,0,213,253,213,253,213,253,213,253,213,253,0,0,255,0,213,253,213,253,213,253,213,253,227,254,227,254,227,254,227,254,227,254,227,254,0,0,227,254,0,0,0,0,0,0,0,0,0,0,0,0,227,254,227,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,227,254,227,254,0,0,227,254,227,254,227,254,227,254,227,254,0,0,0,0,0,0,0,0,0,0,81,1,82,1,83,1,84,1,85,1,86,1,87,1,88,1,89,1,90,1,91,1,212,253,212,253,0,0,0,0,94,1,95,1,0,0,0,0,0,0,0,0,227,254,227,254,227,254,227,254,227,254,227,254,227,254,227,254,227,254,227,254,227,254,227,254,227,254,0,0,0,0,227,254,227,254,227,254,0,0,0,0,227,254,0,0,0,0,0,0,0,0,0,0,227,254,97,1,98,1,99,1,100,1,101,1,102,1,103,1,104,1,105,1,106,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,227,254,0,0,227,254,227,254,227,254,227,254,227,254,227,254,227,254,227,254,227,254,227,254,0,0,0,0,233,253,0,0,0,0,227,254,227,254,227,254,227,254,0,0,252,0,227,254,227,254,227,254,227,254,233,253,233,253,233,253,0,0,233,253,233,253,0,0,233,253,0,0,0,0,0,0,0,0,0,0,233,253,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,233,253,233,253,0,0,233,253,233,253,233,253,233,253,233,253,0,0,81,1,82,1,83,1,84,1,85,1,86,1,87,1,88,1,89,1,90,1,91,1,92,1,93,1,0,0,0,0,94,1,95,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,233,253,233,253,233,253,233,253,233,253,233,253,233,253,233,253,233,253,233,253,233,253,233,253,233,253,0,0,0,0,233,253,233,253,233,253,0,0,186,2,0,0,96,1,0,0,97,1,98,1,99,1,100,1,101,1,102,1,103,1,104,1,105,1,106,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,159,255,233,253,232,0,233,253,233,253,233,253,233,253,233,253,233,253,233,253,233,253,233,253,233,253,0,0,0,0,234,254,0,0,233,253,233,253,233,253,233,253,167,255,0,0,0,0,233,253,0,0,233,253,233,253,234,254,234,254,234,254,0,0,234,254,234,254,0,0,234,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,234,254,234,254,0,0,234,254,234,254,234,254,234,254,234,254,81,1,82,1,83,1,84,1,85,1,86,1,87,1,88,1,0,0,90,1,91,1,0,0,0,0,0,0,0,0,94,1,95,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,234,254,234,254,234,254,234,254,234,254,234,254,234,254,234,254,234,254,234,254,234,254,234,254,234,254,0,0,0,0,234,254,234,254,234,254,0,0,187,2,0,0,0,0,97,1,98,1,99,1,100,1,101,1,102,1,103,1,104,1,105,1,106,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,157,255,234,254,0,0,234,254,234,254,234,254,234,254,234,254,234,254,234,254,234,254,234,254,234,254,0,0,0,0,0,0,0,0,0,0,234,254,234,254,234,254,165,255,0,0,0,0,234,254,0,0,234,254,234,254,12,1,0,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,14,0,213,253,213,253,213,253,0,0,0,0,213,253,15,0,0,0,16,0,17,0,18,0,19,0,0,0,0,0,0,0,0,0,0,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,0,0,0,0,27,0,0,0,0,0,0,0,0,0,0,0,28,0,0,0,30,0,31,0,32,0,0,0,33,0,34,0,35,0,36,0,37,0,38,0,0,0,39,0,40,0,41,0,0,0,0,0,42,0,0,0,0,0,43,0,44,0,0,0,45,0,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,47,0,0,0,0,0,48,0,49,0,0,0,50,0,51,0,0,0,52,0,0,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,0,0,0,0,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,61,0,62,0,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,213,253,213,253,12,1,0,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,14,0,0,0,0,0,213,253,0,0,213,253,213,253,15,0,0,0,16,0,17,0,18,0,19,0,0,0,0,0,0,0,0,0,0,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,0,0,0,0,27,0,0,0,0,0,0,0,0,0,0,0,28,0,0,0,30,0,31,0,32,0,0,0,33,0,34,0,35,0,36,0,37,0,38,0,0,0,39,0,40,0,41,0,0,0,0,0,42,0,0,0,0,0,43,0,44,0,0,0,45,0,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,47,0,0,0,0,0,48,0,49,0,0,0,50,0,51,0,0,0,52,0,0,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,0,0,0,0,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,61,0,62,0,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,213,253,213,253,12,1,0,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,14,0,0,0,0,0,213,253,0,0,0,0,213,253,15,0,213,253,16,0,17,0,18,0,19,0,0,0,0,0,0,0,0,0,0,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,0,0,0,0,27,0,0,0,0,0,0,0,0,0,0,0,28,0,0,0,30,0,31,0,32,0,0,0,33,0,34,0,35,0,36,0,37,0,38,0,0,0,39,0,40,0,41,0,0,0,0,0,42,0,0,0,0,0,43,0,44,0,0,0,45,0,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,47,0,0,0,0,0,48,0,49,0,0,0,50,0,51,0,0,0,52,0,0,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,0,0,0,0,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,61,0,62,0,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,213,253,213,253,12,1,0,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,14,0,0,0,0,0,213,253,0,0,0,0,213,253,15,0,0,0,16,0,17,0,18,0,19,0,0,0,0,0,0,0,0,0,0,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,0,0,0,0,27,0,0,0,0,0,0,0,0,0,0,0,28,0,0,0,30,0,31,0,32,0,0,0,33,0,34,0,35,0,36,0,37,0,38,0,0,0,39,0,40,0,41,0,0,0,0,0,42,0,0,0,0,0,43,0,44,0,0,0,45,0,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,47,0,0,0,0,0,48,0,49,0,0,0,50,0,51,0,0,0,52,0,0,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,0,0,0,0,60,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,14,0,0,0,0,0,61,0,62,0,63,0,0,0,15,0,0,0,16,0,17,0,18,0,19,0,0,0,0,0,0,0,213,253,213,253,20,0,21,0,22,0,23,0,24,0,25,0,26,0,0,0,0,0,27,0,0,0,0,0,0,0,0,0,0,0,28,0,29,0,30,0,31,0,32,0,0,0,33,0,34,0,35,0,36,0,37,0,38,0,0,0,39,0,40,0,41,0,0,0,0,0,42,0,0,0,0,0,43,0,44,0,0,0,45,0,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,47,0,0,0,0,0,48,0,49,0,0,0,50,0,51,0,0,0,52,0,0,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,0,0,0,0,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,61,0,62,0,63,0,0,0,0,0,213,253,0,0,0,0,0,0,0,0,0,0,0,0,0,0,213,253,213,253,12,1,0,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,14,0,0,0,213,253,213,253,0,0,0,0,0,0,15,0,0,0,16,0,17,0,18,0,19,0,0,0,0,0,0,0,0,0,0,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,0,0,0,0,27,0,0,0,0,0,0,0,0,0,0,0,28,0,0,0,30,0,31,0,32,0,0,0,33,0,34,0,35,0,36,0,37,0,38,0,0,0,39,0,40,0,41,0,0,0,0,0,42,0,0,0,0,0,43,0,44,0,0,0,45,0,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,47,0,0,0,0,0,48,0,49,0,0,0,50,0,51,0,0,0,52,0,0,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,0,0,0,0,60,0,0,0,0,0,0,0,0,0,0,0,12,1,0,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,14,0,0,0,0,0,61,0,62,0,63,0,0,0,15,0,0,0,16,0,17,0,18,0,19,0,0,0,0,0,0,0,213,253,213,253,20,0,21,0,22,0,23,0,24,0,25,0,26,0,0,0,0,0,27,0,0,0,0,0,0,0,0,0,0,0,28,0,0,0,30,0,31,0,32,0,0,0,33,0,34,0,35,0,36,0,37,0,38,0,0,0,39,0,40,0,41,0,0,0,0,0,42,0,0,0,0,0,43,0,44,0,0,0,45,0,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,47,0,0,0,0,0,13,1,49,0,0,0,50,0,51,0,0,0,52,0,0,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,0,0,0,0,60,0,0,0,0,0,0,0,0,0,0,0,12,1,0,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,14,0,0,0,0,0,61,0,62,0,63,0,0,0,15,0,0,0,16,0,17,0,18,0,19,0,0,0,213,253,0,0,213,253,213,253,20,0,21,0,22,0,23,0,24,0,25,0,26,0,0,0,0,0,27,0,0,0,0,0,0,0,0,0,0,0,28,0,0,0,30,0,31,0,32,0,0,0,33,0,34,0,35,0,36,0,37,0,38,0,0,0,39,0,40,0,41,0,0,0,0,0,42,0,0,0,0,0,43,0,44,0,0,0,45,0,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,47,0,0,0,0,0,48,0,49,0,0,0,50,0,51,0,0,0,52,0,0,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,0,0,0,0,60,0,0,0,0,0,0,0,0,0,0,0,12,1,0,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,14,0,0,0,0,0,61,0,62,0,63,0,0,0,15,0,0,0,16,0,17,0,18,0,19,0,0,0,213,253,0,0,213,253,213,253,20,0,21,0,22,0,23,0,24,0,25,0,26,0,0,0,0,0,27,0,0,0,0,0,0,0,0,0,0,0,28,0,0,0,30,0,31,0,32,0,0,0,33,0,34,0,35,0,36,0,37,0,38,0,0,0,39,0,40,0,41,0,0,0,0,0,42,0,0,0,0,0,43,0,44,0,0,0,45,0,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,47,0,0,0,0,0,48,0,49,0,0,0,50,0,51,0,0,0,52,0,0,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,0,0,0,0,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,61,0,62,0,63,0,0,0,0,0,213,253,0,0,0,0,0,0,0,0,0,0,0,0,0,0,213,253,213,253,12,1,0,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,14,0,0,0,0,0,213,253,0,0,0,0,0,0,15,0,0,0,16,0,17,0,18,0,19,0,0,0,0,0,0,0,0,0,0,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,0,0,0,0,27,0,0,0,0,0,0,0,0,0,0,0,28,0,0,0,30,0,31,0,32,0,0,0,33,0,34,0,35,0,36,0,37,0,38,0,0,0,39,0,40,0,41,0,0,0,0,0,42,0,0,0,0,0,43,0,44,0,0,0,45,0,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,47,0,0,0,0,0,48,0,49,0,0,0,50,0,51,0,0,0,52,0,0,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,0,0,0,0,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,0,0,0,0,0,0,61,0,62,0,63,0,0,0,15,0,0,0,16,0,17,0,18,0,19,0,0,0,0,0,0,0,213,253,213,253,20,0,21,0,22,0,23,0,24,0,25,0,26,0,0,0,0,0,106,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,0,32,0,0,0,33,0,34,0,35,0,36,0,37,0,38,0,238,0,39,0,40,0,41,0,0,0,0,0,42,0,0,0,0,0,43,0,44,0,0,0,45,0,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,200,0,0,0,0,0,111,0,49,0,0,0,50,0,51,0,0,0,239,0,240,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,0,0,0,0,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,0,0,0,0,0,0,61,0,241,0,63,0,0,0,15,0,0,0,16,0,17,0,18,0,19,0,0,0,0,0,0,0,0,0,232,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,0,0,0,0,27,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,0,32,0,0,0,33,0,34,0,35,0,36,0,37,0,38,0,0,0,39,0,40,0,41,0,0,0,0,0,42,0,0,0,0,0,43,0,44,0,0,0,45,0,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,200,0,0,0,0,0,111,0,49,0,0,0,50,0,51,0,0,0,0,0,0,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,0,0,0,0,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,0,0,0,0,0,0,61,0,62,0,63,0,0,0,15,0,0,0,16,0,17,0,18,0,19,0,0,0,0,0,0,0,231,0,232,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,0,0,0,0,27,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,0,32,0,0,0,33,0,34,0,35,0,36,0,37,0,38,0,0,0,39,0,40,0,41,0,0,0,0,0,42,0,0,0,0,0,43,0,44,0,0,0,45,0,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,200,0,0,0,0,0,111,0,49,0,0,0,50,0,51,0,0,0,0,0,0,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,0,0,0,0,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,14,0,0,0,0,0,61,0,62,0,63,0,0,0,15,0,0,0,16,0,17,0,18,0,19,0,0,0,0,0,0,0,0,0,232,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,0,0,0,0,27,0,0,0,0,0,0,0,0,0,0,0,28,0,29,0,30,0,31,0,32,0,0,0,33,0,34,0,35,0,36,0,37,0,38,0,0,0,39,0,40,0,41,0,0,0,0,0,42,0,0,0,0,0,43,0,44,0,0,0,45,0,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,47,0,0,0,0,0,48,0,49,0,0,0,50,0,51,0,0,0,52,0,0,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,0,0,0,0,60,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,14,0,0,0,0,0,0,0,61,0,62,0,63,0,15,0,0,0,16,0,17,0,18,0,19,0,0,0,0,0,0,0,0,0,162,1,20,0,21,0,22,0,23,0,24,0,25,0,26,0,0,0,0,0,27,0,0,0,0,0,0,0,0,0,0,0,28,0,0,0,30,0,31,0,32,0,0,0,33,0,34,0,35,0,36,0,37,0,38,0,0,0,39,0,40,0,41,0,0,0,0,0,42,0,0,0,0,0,43,0,44,0,0,0,45,0,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,47,0,0,0,0,0,48,0,49,0,0,0,50,0,51,0,0,0,52,0,0,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,0,0,0,0,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,61,0,62,0,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,162,1,121,0,122,0,123,0,124,0,125,0,126,0,127,0,128,0,129,0,130,0,131,0,132,0,133,0,134,0,135,0,136,0,137,0,138,0,139,0,140,0,141,0,142,0,143,0,144,0,0,0,0,0,0,0,145,0,146,0,147,0,148,0,149,0,150,0,151,0,152,0,153,0,154,0,0,0,0,0,0,0,0,0,0,0,155,0,156,0,157,0,158,0,159,0,160,0,161,0,162,0,35,0,36,0,163,0,38,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,164,0,165,0,166,0,167,0,168,0,169,0,170,0,171,0,172,0,0,0,0,0,173,0,174,0,0,0,0,0,175,0,176,0,177,0,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,179,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,180,0,181,0,182,0,183,0,184,0,185,0,186,0,187,0,188,0,189,0,0,0,190,0,191,0,0,0,0,0,0,0,0,0,0,0,0,0,192,0,193,0,240,253,240,253,240,253,240,253,240,253,240,253,240,253,240,253,240,253,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,253,0,0,240,253,240,253,240,253,240,253,0,0,240,253,0,0,0,0,0,0,240,253,240,253,240,253,240,253,240,253,240,253,240,253,0,0,0,0,240,253,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,253,240,253,0,0,240,253,240,253,240,253,240,253,240,253,240,253,240,253,240,253,240,253,240,253,0,0,0,0,240,253,0,0,0,0,240,253,240,253,0,0,240,253,240,253,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,253,0,0,0,0,240,253,240,253,0,0,240,253,240,253,0,0,240,253,240,253,240,253,240,253,240,253,240,253,240,253,240,253,240,253,0,0,0,0,240,253,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,253,240,253,240,253,0,0,240,253,0,0,0,0,0,0,0,0,0,0,240,253,239,253,239,253,239,253,239,253,239,253,239,253,239,253,239,253,239,253,0,0,0,0,0,0,0,0,0,0,0,0,0,0,239,253,0,0,239,253,239,253,239,253,239,253,0,0,239,253,0,0,0,0,0,0,239,253,239,253,239,253,239,253,239,253,239,253,239,253,0,0,0,0,239,253,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,239,253,239,253,0,0,239,253,239,253,239,253,239,253,239,253,239,253,239,253,239,253,239,253,239,253,0,0,0,0,239,253,0,0,0,0,239,253,239,253,0,0,239,253,239,253,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,239,253,0,0,0,0,239,253,239,253,0,0,239,253,239,253,0,0,239,253,239,253,239,253,239,253,239,253,239,253,239,253,239,253,239,253,0,0,0,0,239,253,0,0,0,0,0,0,0,0,0,0,0,0,237,253,237,253,237,253,237,253,237,253,237,253,237,253,237,253,237,253,0,0,0,0,0,0,0,0,239,253,239,253,239,253,237,253,239,253,237,253,237,253,237,253,237,253,0,0,239,253,0,0,0,0,0,0,237,253,237,253,237,253,237,253,237,253,237,253,237,253,0,0,0,0,237,253,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,237,253,237,253,0,0,237,253,237,253,237,253,237,253,237,253,237,253,237,253,237,253,237,253,237,253,0,0,0,0,237,253,0,0,0,0,237,253,237,253,0,0,237,253,237,253,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,237,253,224,2,0,0,237,253,237,253,0,0,237,253,237,253,0,0,237,253,237,253,237,253,237,253,237,253,237,253,237,253,237,253,237,253,0,0,0,0,237,253,0,0,0,0,0,0,0,0,0,0,0,0,159,255,235,253,235,253,235,253,235,253,235,253,235,253,235,253,235,253,235,253,0,0,0,0,0,0,237,253,237,253,237,253,0,0,235,253,0,0,235,253,235,253,235,253,235,253,237,253,0,0,0,0,0,0,0,0,235,253,235,253,235,253,235,253,235,253,235,253,235,253,0,0,0,0,235,253,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,235,253,235,253,0,0,235,253,235,253,235,253,235,253,235,253,235,253,235,253,235,253,235,253,235,253,0,0,0,0,235,253,0,0,0,0,235,253,235,253,0,0,235,253,235,253,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,235,253,0,0,0,0,235,253,235,253,0,0,235,253,235,253,0,0,235,253,235,253,235,253,235,253,235,253,235,253,235,253,235,253,235,253,0,0,0,0,235,253,0,0,0,0,0,0,0,0,0,0,0,0,234,253,234,253,234,253,234,253,234,253,234,253,234,253,234,253,234,253,0,0,0,0,0,0,0,0,235,253,235,253,235,253,234,253,0,0,234,253,234,253,234,253,234,253,0,0,235,253,0,0,0,0,0,0,234,253,234,253,234,253,234,253,234,253,234,253,234,253,0,0,0,0,234,253,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,234,253,234,253,0,0,234,253,234,253,234,253,234,253,234,253,234,253,234,253,234,253,234,253,234,253,0,0,0,0,234,253,0,0,0,0,234,253,234,253,0,0,234,253,234,253,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,234,253,0,0,0,0,234,253,234,253,0,0,234,253,234,253,0,0,234,253,234,253,234,253,234,253,234,253,234,253,234,253,234,253,234,253,0,0,0,0,234,253,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,234,253,234,253,234,253,0,0,0,0,0,0,0,0,0,0,0,0,0,0,234,253,121,0,122,0,123,0,124,0,125,0,126,0,127,0,128,0,129,0,130,0,131,0,132,0,133,0,134,0,135,0,136,0,137,0,138,0,139,0,140,0,141,0,142,0,143,0,144,0,0,0,0,0,0,0,145,0,146,0,147,0,218,0,219,0,220,0,221,0,152,0,153,0,154,0,0,0,0,0,0,0,0,0,0,0,155,0,156,0,157,0,222,0,223,0,160,0,224,0,162,0,37,1,38,1,225,0,39,1,0,0,0,0,0,0,0,0,0,0,0,0,40,1,0,0,0,0,0,0,0,0,0,0,164,0,165,0,166,0,167,0,168,0,169,0,170,0,171,0,172,0,0,0,0,0,173,0,174,0,0,0,0,0,175,0,176,0,177,0,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,179,0,0,0,0,0,0,0,0,0,0,0,0,0,41,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,180,0,181,0,182,0,183,0,184,0,185,0,186,0,187,0,188,0,189,0,0,0,190,0,191,0,0,0,0,0,0,0,0,0,0,0,0,0,192,0,121,0,122,0,123,0,124,0,125,0,126,0,127,0,128,0,129,0,130,0,131,0,132,0,133,0,134,0,135,0,136,0,137,0,138,0,139,0,140,0,141,0,142,0,143,0,144,0,0,0,0,0,0,0,145,0,146,0,147,0,218,0,219,0,220,0,221,0,152,0,153,0,154,0,0,0,0,0,0,0,0,0,0,0,155,0,156,0,157,0,222,0,223,0,160,0,224,0,162,0,37,1,38,1,225,0,39,1,0,0,0,0,0,0,0,0,0,0,0,0,40,1,0,0,0,0,0,0,0,0,0,0,164,0,165,0,166,0,167,0,168,0,169,0,170,0,171,0,172,0,0,0,0,0,173,0,174,0,0,0,0,0,175,0,176,0,177,0,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,179,0,0,0,0,0,0,0,0,0,0,0,0,0,156,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,180,0,181,0,182,0,183,0,184,0,185,0,186,0,187,0,188,0,189,0,0,0,190,0,191,0,0,0,0,0,0,0,0,0,0,0,0,0,192,0,121,0,122,0,123,0,124,0,125,0,126,0,127,0,128,0,129,0,130,0,131,0,132,0,133,0,134,0,135,0,136,0,137,0,138,0,139,0,140,0,141,0,142,0,143,0,144,0,0,0,0,0,0,0,145,0,146,0,147,0,218,0,219,0,220,0,221,0,152,0,153,0,154,0,0,0,0,0,0,0,0,0,0,0,155,0,156,0,157,0,222,0,223,0,160,0,224,0,162,0,0,0,0,0,225,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,164,0,165,0,166,0,167,0,168,0,169,0,170,0,171,0,172,0,0,0,0,0,173,0,174,0,0,0,0,0,175,0,176,0,177,0,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,179,0,0,0,0,0,226,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,180,0,181,0,182,0,183,0,184,0,185,0,186,0,187,0,188,0,189,0,0,0,190,0,191,0,0,0,0,0,0,0,0,0,0,0,0,0,192,0,121,0,122,0,123,0,124,0,125,0,126,0,127,0,128,0,129,0,130,0,131,0,132,0,133,0,134,0,135,0,136,0,137,0,138,0,139,0,140,0,141,0,142,0,143,0,144,0,0,0,0,0,0,0,145,0,146,0,147,0,218,0,219,0,220,0,221,0,152,0,153,0,154,0,0,0,0,0,0,0,0,0,0,0,155,0,156,0,157,0,222,0,223,0,160,0,224,0,162,0,0,0,0,0,225,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,164,0,165,0,166,0,167,0,168,0,169,0,170,0,171,0,172,0,0,0,0,0,173,0,174,0,0,0,0,0,175,0,176,0,177,0,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,179,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,180,0,181,0,182,0,183,0,184,0,185,0,186,0,187,0,188,0,189,0,0,0,190,0,191,0,0,0,0,0,0,0,0,0,0,0,0,0,192,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,0,0,0,101,0,102,0,18,0,19,0,0,0,0,0,0,0,0,0,0,0,103,0,104,0,105,0,23,0,24,0,25,0,26,0,0,0,0,0,106,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,0,32,0,0,0,33,0,34,0,35,0,36,0,37,0,38,0,0,0,39,0,40,0,41,0,0,0,0,0,42,0,0,0,0,0,43,0,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30,1,0,0,0,0,111,0,49,0,0,0,50,0,51,0,0,0,0,0,0,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,0,0,0,0,60,0,0,0,0,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,0,112,0,101,0,102,0,18,0,19,0,0,0,0,0,0,0,31,1,0,0,103,0,104,0,105,0,23,0,24,0,25,0,26,0,0,0,0,0,106,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,0,32,0,0,0,33,0,34,0,35,0,36,0,37,0,38,0,0,0,39,0,40,0,41,0,0,0,0,0,42,0,0,0,0,0,43,0,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30,1,0,0,0,0,111,0,49,0,0,0,50,0,51,0,0,0,0,0,0,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,0,0,0,0,60,0,0,0,0,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,0,112,0,101,0,102,0,18,0,19,0,0,0,0,0,0,0,15,2,0,0,103,0,104,0,105,0,23,0,24,0,25,0,26,0,0,0,0,0,106,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,0,32,0,0,0,33,0,34,0,35,0,36,0,37,0,38,0,238,0,39,0,40,0,41,0,0,0,0,0,42,0,0,0,0,0,43,0,44,0,0,0,45,0,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,200,0,0,0,0,0,111,0,49,0,0,0,50,0,51,0,0,0,118,2,240,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,0,0,0,0,60,0,241,1,0,0,0,0,242,1,243,1,0,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,14,0,0,0,0,0,0,0,61,0,241,0,63,0,15,0,0,0,16,0,17,0,18,0,19,0,0,0,0,0,0,0,0,0,0,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,0,0,0,0,27,0,0,0,0,0,0,0,0,0,0,0,28,0,29,0,30,0,31,0,32,0,0,0,33,0,34,0,35,0,36,0,37,0,38,0,0,0,39,0,40,0,41,0,0,0,0,0,42,0,0,0,0,0,43,0,44,0,0,0,45,0,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,47,0,0,0,0,0,48,0,49,0,0,0,50,0,51,0,0,0,52,0,0,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,0,0,0,0,60,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,0,0,0,0,0,0,0,0,61,0,62,0,63,0,15,0,0,0,101,0,102,0,18,0,19,0,0,0,0,0,0,0,0,0,0,0,103,0,104,0,105,0,23,0,24,0,25,0,26,0,0,0,0,0,106,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,0,32,0,0,0,33,0,34,0,35,0,36,0,37,0,38,0,238,0,39,0,40,0,41,0,0,0,0,0,42,0,0,0,0,0,43,0,44,0,0,0,45,0,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,200,0,0,0,0,0,111,0,49,0,0,0,50,0,51,0,0,0,118,2,0,0,53,0,54,0,55,0,56],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE+30738),allocate([57,0,58,0,59,0,0,0,0,0,60,0,241,1,0,0,0,0,242,1,243,1,0,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,14,0,0,0,0,0,0,0,61,0,241,0,63,0,15,0,0,0,16,0,17,0,18,0,19,0,0,0,0,0,0,0,0,0,0,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,0,0,0,0,27,0,0,0,0,0,0,0,0,0,0,0,28,0,0,0,30,0,31,0,32,0,0,0,33,0,34,0,35,0,36,0,37,0,38,0,0,0,39,0,40,0,41,0,0,0,0,0,42,0,0,0,0,0,43,0,44,0,0,0,45,0,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,47,0,0,0,0,0,48,0,49,0,0,0,50,0,51,0,0,0,52,0,0,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,0,0,0,0,60,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,0,0,0,0,0,0,0,0,61,0,62,0,63,0,15,0,0,0,101,0,102,0,18,0,19,0,0,0,0,0,0,0,0,0,0,0,103,0,104,0,105,0,23,0,24,0,25,0,26,0,0,0,0,0,106,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,0,32,0,0,0,33,0,34,0,35,0,36,0,37,0,38,0,0,0,39,0,40,0,41,0,0,0,0,0,42,0,0,0,0,0,43,0,44,0,0,0,45,0,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,200,0,0,0,0,0,111,0,49,0,0,0,50,0,51,0,0,0,239,2,0,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,0,0,0,0,60,0,241,1,0,0,0,0,242,1,243,1,0,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,0,0,0,0,0,0,0,0,61,0,241,0,63,0,15,0,0,0,101,0,102,0,18,0,19,0,0,0,0,0,0,0,0,0,0,0,103,0,104,0,105,0,23,0,24,0,25,0,26,0,0,0,0,0,106,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,0,32,0,0,0,33,0,34,0,35,0,36,0,37,0,38,0,0,0,39,0,40,0,41,0,0,0,0,0,42,0,0,0,0,0,43,0,44,0,0,0,45,0,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,200,0,0,0,0,0,111,0,49,0,0,0,50,0,51,0,0,0,20,3,0,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,0,0,0,0,60,0,241,1,0,0,0,0,242,1,243,1,0,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,0,0,0,0,0,0,0,0,61,0,241,0,63,0,15,0,0,0,101,0,102,0,18,0,19,0,0,0,0,0,0,0,0,0,0,0,103,0,104,0,105,0,23,0,24,0,25,0,26,0,0,0,0,0,106,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,0,32,0,0,0,33,0,34,0,35,0,36,0,37,0,38,0,0,0,39,0,40,0,41,0,0,0,0,0,42,0,0,0,0,0,43,0,44,0,0,0,45,0,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,200,0,0,0,0,0,111,0,49,0,0,0,50,0,51,0,0,0,118,2,0,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,0,0,0,0,60,0,241,1,0,0,0,0,242,1,243,1,0,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,0,0,0,0,0,0,0,0,61,0,241,0,63,0,15,0,0,0,16,0,17,0,18,0,19,0,0,0,0,0,0,0,0,0,0,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,0,0,0,0,106,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,0,32,0,0,0,33,0,34,0,35,0,36,0,37,0,38,0,238,0,39,0,40,0,41,0,0,0,0,0,42,0,0,0,0,0,43,0,44,0,0,0,45,0,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,200,0,0,0,0,0,111,0,49,0,0,0,50,0,51,0,0,0,239,0,240,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,0,0,0,0,60,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,0,0,0,0,0,0,0,0,61,0,241,0,63,0,15,0,0,0,101,0,102,0,18,0,19,0,0,0,0,0,0,0,0,0,0,0,103,0,104,0,105,0,23,0,24,0,25,0,26,0,0,0,0,0,106,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,0,32,0,0,0,33,0,34,0,35,0,36,0,37,0,38,0,238,0,39,0,40,0,41,0,0,0,0,0,42,0,0,0,0,0,43,0,44,0,0,0,45,0,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,200,0,0,0,0,0,111,0,49,0,0,0,50,0,51,0,0,0,239,0,0,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,0,0,0,0,60,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,0,0,0,0,0,0,0,0,61,0,241,0,63,0,15,0,0,0,101,0,102,0,18,0,19,0,0,0,0,0,0,0,0,0,0,0,103,0,104,0,105,0,23,0,24,0,25,0,26,0,0,0,0,0,106,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,0,32,0,0,0,33,0,34,0,35,0,36,0,37,0,38,0,238,0,39,0,40,0,41,0,0,0,0,0,42,0,0,0,0,0,43,0,44,0,0,0,45,0,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,200,0,0,0,0,0,111,0,49,0,0,0,50,0,51,0,0,0,0,0,240,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,0,0,0,0,60,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,0,0,0,0,0,0,0,0,61,0,241,0,63,0,15,0,0,0,101,0,102,0,18,0,19,0,0,0,0,0,0,0,0,0,0,0,103,0,104,0,105,0,23,0,24,0,25,0,26,0,0,0,0,0,106,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,0,32,0,0,0,33,0,34,0,35,0,36,0,37,0,38,0,238,0,39,0,40,0,41,0,0,0,0,0,42,0,0,0,0,0,43,0,44,0,0,0,45,0,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,200,0,0,0,0,0,111,0,49,0,0,0,50,0,51,0,0,0,0,0,0,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,0,0,0,0,60,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,0,0,0,0,0,0,0,0,61,0,241,0,63,0,15,0,0,0,16,0,17,0,18,0,19,0,0,0,0,0,0,0,0,0,0,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,0,0,0,0,106,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,0,32,0,0,0,33,0,34,0,35,0,36,0,37,0,38,0,0,0,39,0,40,0,41,0,0,0,0,0,42,0,0,0,0,0,43,0,44,0,0,0,45,0,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,200,0,0,0,0,0,111,0,49,0,0,0,50,0,51,0,0,0,9,2,0,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,0,0,0,0,60,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,0,0,0,0,0,0,0,0,61,0,241,0,63,0,15,0,0,0,101,0,102,0,18,0,19,0,0,0,0,0,0,0,0,0,0,0,103,0,104,0,105,0,23,0,24,0,25,0,26,0,0,0,0,0,106,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,0,32,0,0,0,33,0,34,0,35,0,36,0,37,0,38,0,0,0,39,0,40,0,41,0,0,0,0,0,42,0,0,0,0,0,43,0,44,0,0,0,45,0,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,200,0,0,0,0,0,111,0,49,0,0,0,50,0,51,0,0,0,239,0,0,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,0,0,0,0,60,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,0,0,0,0,0,0,0,0,61,0,241,0,63,0,15,0,0,0,101,0,102,0,18,0,19,0,0,0,0,0,0,0,0,0,0,0,103,0,104,0,105,0,23,0,24,0,25,0,26,0,0,0,0,0,106,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,0,32,0,0,0,33,0,34,0,35,0,36,0,37,0,38,0,0,0,39,0,40,0,41,0,0,0,0,0,42,0,0,0,0,0,43,0,44,0,0,0,45,0,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,200,0,0,0,0,0,111,0,49,0,0,0,50,0,51,0,0,0,9,2,0,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,0,0,0,0,60,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,0,0,0,0,0,0,0,0,61,0,241,0,63,0,15,0,0,0,16,0,17,0,18,0,19,0,0,0,0,0,0,0,0,0,0,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,0,0,0,0,27,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,0,32,0,0,0,33,0,34,0,35,0,36,0,37,0,38,0,0,0,39,0,40,0,41,0,0,0,0,0,42,0,0,0,0,0,43,0,44,0,0,0,45,0,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,200,0,0,0,0,0,111,0,49,0,0,0,50,0,51,0,0,0,0,0,0,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,0,0,0,0,60,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,0,0,0,0,0,0,0,0,61,0,62,0,63,0,15,0,0,0,101,0,102,0,18,0,19,0,0,0,0,0,0,0,0,0,0,0,103,0,104,0,105,0,23,0,24,0,25,0,26,0,0,0,0,0,106,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,0,32,0,0,0,33,0,34,0,35,0,36,0,37,0,38,0,0,0,39,0,40,0,41,0,0,0,0,0,42,0,0,0,0,0,43,0,44,0,0,0,45,0,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,200,0,0,0,0,0,111,0,49,0,0,0,50,0,51,0,0,0,0,0,0,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,0,0,0,0,60,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,0,0,0,0,0,0,0,0,61,0,241,0,63,0,15,0,0,0,16,0,17,0,18,0,19,0,0,0,0,0,0,0,0,0,0,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,0,0,0,0,106,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,0,32,0,0,0,33,0,34,0,35,0,36,0,37,0,38,0,0,0,39,0,40,0,41,0,0,0,0,0,42,0,0,0,0,0,43,0,44,0,0,0,45,0,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,200,0,0,0,0,0,111,0,49,0,0,0,50,0,51,0,0,0,0,0,0,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,0,0,0,0,60,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,0,0,0,0,0,0,0,0,61,0,241,0,63,0,15,0,0,0,101,0,102,0,18,0,19,0,0,0,0,0,0,0,0,0,0,0,103,0,104,0,105,0,23,0,24,0,25,0,26,0,0,0,0,0,106,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,0,32,0,0,0,107,0,34,0,35,0,36,0,108,0,38,0,0,0,39,0,40,0,41,0,0,0,0,0,42,0,0,0,0,0,43,0,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,0,0,0,0,0,110,0,0,0,0,0,111,0,49,0,0,0,50,0,51,0,0,0,0,0,0,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,0,0,0,0,60,0,0,0,0,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,0,112,0,101,0,102,0,18,0,19,0,0,0,0,0,0,0,0,0,0,0,103,0,104,0,105,0,23,0,24,0,25,0,26,0,0,0,0,0,106,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,0,32,0,0,0,33,0,34,0,35,0,36,0,37,0,38,0,0,0,39,0,40,0,41,0,0,0,0,0,42,0,0,0,0,0,43,0,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,211,0,0,0,0,0,48,0,49,0,0,0,50,0,51,0,0,0,52,0,0,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,0,0,0,0,60,0,0,0,0,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,0,112,0,101,0,102,0,18,0,19,0,0,0,0,0,0,0,0,0,0,0,103,0,104,0,105,0,23,0,24,0,25,0,26,0,0,0,0,0,106,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,0,32,0,0,0,33,0,34,0,35,0,36,0,37,0,38,0,0,0,39,0,40,0,41,0,0,0,0,0,42,0,0,0,0,0,43,0,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30,1,0,0,0,0,77,1,49,0,0,0,50,0,51,0,0,0,78,1,0,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,0,0,0,0,60,0,0,0,0,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,0,112,0,101,0,102,0,18,0,19,0,0,0,0,0,0,0,0,0,0,0,103,0,104,0,105,0,23,0,24,0,25,0,26,0,0,0,0,0,106,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,0,32,0,0,0,107,0,34,0,35,0,36,0,108,0,38,0,0,0,39,0,40,0,41,0,0,0,0,0,42,0,0,0,0,0,43,0,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,110,0,0,0,0,0,111,0,49,0,0,0,50,0,51,0,0,0,0,0,0,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,0,0,0,0,60,0,0,0,0,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,0,112,0,101,0,102,0,18,0,19,0,0,0,0,0,0,0,0,0,0,0,103,0,104,0,105,0,23,0,24,0,25,0,26,0,0,0,0,0,106,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,0,32,0,0,0,33,0,34,0,35,0,36,0,37,0,38,0,0,0,39,0,40,0,41,0,0,0,0,0,42,0,0,0,0,0,43,0,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30,1,0,0,0,0,77,1,49,0,0,0,50,0,51,0,0,0,0,0,0,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,0,0,0,0,60,0,0,0,0,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,0,112,0,101,0,102,0,18,0,19,0,0,0,0,0,0,0,0,0,0,0,103,0,104,0,105,0,23,0,24,0,25,0,26,0,0,0,0,0,106,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,0,32,0,0,0,33,0,34,0,35,0,36,0,37,0,38,0,0,0,39,0,40,0,41,0,0,0,0,0,42,0,0,0,0,0,43,0,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,91,3,0,0,0,0,111,0,49,0,0,0,50,0,51,0,0,0,0,0,0,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,0,0,0,0,60,0,0,0,0,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,0,112,0,101,0,102,0,18,0,19,0,0,0,0,0,0,0,0,0,0,0,103,0,104,0,105,0,23,0,24,0,25,0,26,0,0,0,0,0,106,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,0,32,0,0,0,33,0,34,0,35,0,36,0,37,0,38,0,0,0,39,0,40,0,41,0,0,0,0,0,42,0,0,0,0,0,43,0,44,0,0,0,81,1,212,253,212,253,212,253,212,253,86,1,87,1,0,0,0,0,212,253,212,253,0,0,0,0,0,0,0,0,94,1,95,1,0,0,0,0,0,0,109,3,0,0,0,0,111,0,49,0,0,0,50,0,51,0,0,0,0,0,0,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,0,0,0,0,60,0,0,0,0,0,58,2,59,2,0,0,0,0,60,2,97,1,98,1,99,1,100,1,101,1,102,1,103,1,104,1,105,1,106,1,0,0,0,0,112,0,164,0,165,0,166,0,167,0,168,0,169,0,170,0,171,0,172,0,0,0,0,0,173,0,174,0,0,0,0,0,175,0,176,0,177,0,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,179,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,180,0,181,0,182,0,183,0,184,0,185,0,186,0,187,0,188,0,189,0,0,0,190,0,191,0,78,2,51,2,0,0,0,0,79,2,0,0,192,0,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,164,0,165,0,166,0,167,0,168,0,169,0,170,0,171,0,172,0,0,0,0,0,173,0,174,0,0,0,0,0,175,0,176,0,177,0,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,179,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,180,0,181,0,182,0,183,0,184,0,185,0,186,0,187,0,188,0,189,0,0,0,190,0,191,0,64,2,59,2,0,0,0,0,65,2,0,0,192,0,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,164,0,165,0,166,0,167,0,168,0,169,0,170,0,171,0,172,0,0,0,0,0,173,0,174,0,0,0,0,0,175,0,176,0,177,0,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,179,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,180,0,181,0,182,0,183,0,184,0,185,0,186,0,187,0,188,0,189,0,0,0,190,0,191,0,95,2,51,2,0,0,0,0,96,2,0,0,192,0,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,164,0,165,0,166,0,167,0,168,0,169,0,170,0,171,0,172,0,0,0,0,0,173,0,174,0,0,0,0,0,175,0,176,0,177,0,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,179,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,180,0,181,0,182,0,183,0,184,0,185,0,186,0,187,0,188,0,189,0,0,0,190,0,191,0,98,2,59,2,0,0,0,0,99,2,0,0,192,0,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,164,0,165,0,166,0,167,0,168,0,169,0,170,0,171,0,172,0,0,0,0,0,173,0,174,0,0,0,0,0,175,0,176,0,177,0,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,179,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,180,0,181,0,182,0,183,0,184,0,185,0,186,0,187,0,188,0,189,0,0,0,190,0,191,0,105,2,51,2,0,0,0,0,106,2,0,0,192,0,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,164,0,165,0,166,0,167,0,168,0,169,0,170,0,171,0,172,0,0,0,0,0,173,0,174,0,0,0,0,0,175,0,176,0,177,0,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,179,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,180,0,181,0,182,0,183,0,184,0,185,0,186,0,187,0,188,0,189,0,0,0,190,0,191,0,108,2,59,2,0,0,0,0,109,2,0,0,192,0,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,164,0,165,0,166,0,167,0,168,0,169,0,170,0,171,0,172,0,0,0,0,0,173,0,174,0,0,0,0,0,175,0,176,0,177,0,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,179,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,180,0,181,0,182,0,183,0,184,0,185,0,186,0,187,0,188,0,189,0,0,0,190,0,191,0,140,2,51,2,0,0,0,0,141,2,0,0,192,0,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,164,0,165,0,166,0,167,0,168,0,169,0,170,0,171,0,172,0,0,0,0,0,173,0,174,0,0,0,0,0,175,0,176,0,177,0,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,179,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,180,0,181,0,182,0,183,0,184,0,185,0,186,0,187,0,188,0,189,0,0,0,190,0,191,0,143,2,59,2,0,0,0,0,144,2,0,0,192,0,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,164,0,165,0,166,0,167,0,168,0,169,0,170,0,171,0,172,0,0,0,0,0,173,0,174,0,0,0,0,0,175,0,176,0,177,0,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,179,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,180,0,181,0,182,0,183,0,184,0,185,0,186,0,187,0,188,0,189,0,0,0,190,0,191,0,169,3,51,2,0,0,0,0,170,3,0,0,192,0,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,164,0,165,0,166,0,167,0,168,0,169,0,170,0,171,0,172,0,0,0,0,0,173,0,174,0,0,0,0,0,175,0,176,0,177,0,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,179,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,180,0,181,0,182,0,183,0,184,0,185,0,186,0,187,0,188,0,189,0,0,0,190,0,191,0,176,3,51,2,0,0,0,0,177,3,0,0,192,0,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,164,0,165,0,166,0,167,0,168,0,169,0,170,0,171,0,172,0,0,0,0,0,173,0,174,0,0,0,0,0,175,0,176,0,177,0,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,179,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,180,0,181,0,182,0,183,0,184,0,185,0,186,0,187,0,188,0,189,0,0,0,190,0,191,0,179,3,59,2,0,0,0,0,180,3,0,0,192,0,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,164,0,165,0,166,0,167,0,168,0,169,0,170,0,171,0,172,0,0,0,0,0,173,0,174,0,0,0,0,0,175,0,176,0,177,0,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,179,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,180,0,181,0,182,0,183,0,184,0,185,0,186,0,187,0,188,0,189,0,0,0,190,0,191,0,64,2,59,2,0,0,0,0,65,2,0,0,192,0,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,164,0,165,0,166,0,167,0,168,0,169,0,170,0,171,0,172,0,0,0,0,0,173,0,174,0,0,0,0,0,175,0,176,0,177,0,178,0,0,0,0,0,0,0,81,1,82,1,83,1,84,1,85,1,86,1,87,1,179,0,0,0,90,1,91,1,0,0,0,0,0,0,0,0,94,1,95,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,180,0,181,0,182,0,183,0,184,0,185,0,186,0,187,0,188,0,189,0,0,0,190,0,191,0,0,0,0,0,0,0,0,0,0,0,0,0,192,0,97,1,98,1,99,1,100,1,101,1,102,1,103,1,104,1,105,1,106,1,2,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,14,1,0,0,0,0,40,1,43,1,0,0,0,0,28,2,64,1,65,1,66,1,67,1,26,1,248,0,248,0,210,1,209,1,211,1,212,1,30,2,0,0,10,0,0,0,214,1,213,1,202,1,18,2,204,1,203,1,206,1,205,1,198,1,199,1,158,1,159,1,215,1,216,1,0,0,0,0,0,0,0,0,16,1,43,2,43,2,78,0,35,1,0,0,0,0,0,0,0,0,0,0,0,0,173,1,0,0,0,0,0,0,3,0,28,2,6,0,9,0,27,0,39,0,42,0,50,0,49,0,0,0,66,0,0,0,70,0,80,0,0,0,47,0,229,0,0,0,51,0,33,1,6,1,7,1,8,1,9,1,10,1,156,1,155,1,187,1,157,1,154,1,208,1,0,0,11,1,12,1,248,0,5,0,8,0,64,1,65,1,26,1,29,1,136,1,0,0,102,0,103,0,0,0,0,0,0,0,0,0,105,0,217,1,68,1,0,0,208,1,12,1,0,0,56,1,156,0,166,0,157,0,153,0,182,0,183,0,184,0,185,0,164,0,179,0,172,0,162,0,161,0,177,0,160,0,159,0,155,0,180,0,154,0,167,0,171,0,173,0,165,0,158,0,174,0,181,0,176,0,175,0,168,0,178,0,163,0,152,0,170,0,169,0,151,0,149,0,150,0,146,0,147,0,148,0,107,0,109,0,108,0,141,0,142,0,138,0,120,0,121,0,122,0,129,0,126,0,128,0,123,0,124,0,143,0,144,0,130,0,131,0,135,0,125,0,127,0,117,0,118,0,119,0,132,0,133,0,134,0,136,0,137,0,139,0,140,0,145,0,8,2,58,1,110,0,111,0,7,2,0,0,0,0,0,0,48,0,0,0,0,0,0,0,208,1,0,0,12,1,0,0,0,0,0,0,0,0,79,1,78,1,0,0,0,0,208,1,12,1,175,0,168,0,178,0,163,0,146,0,147,0,107,0,108,0,0,0,112,0,114,0,20,0,113,0,37,2,39,2,28,2,0,0,41,2,38,2,29,2,0,0,0,0,0,0,0,0,243,0,230,0,253,0,64,0,247,0,43,2,43,2,12,2,65,0,63,0,30,2,62,0,0,0,43,2,135,1,61,0,30,2,0,0,31,2,18,0,0,0,0,0,207,0,0,0,208,0,23,1,0,0,0,0,0,0,28,2,15,0,30,2,68,0,14,0,0,0,30,2,0,0,34,2,34,2,231,0,0,0,0,0,34,2,10,2,0,0,0,0,76,0,0,0,86,0,93,0,236,1,192,1,191,1,193,1,194,1,0,0,190,1,189,1,171,1,165,1,164,1,167,1,0,0,0,0,162,1,185,1,0,0,196,1,0,0,160,1,0,0,169,1,0,0,200,1,201,1,46,0,222,0,223,0,4,0,29,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,123,1,125,1,0,0,82,0,0,0,74,0,71,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,43,2,0,0,27,2,26,2,0,0,140,1,138,1,34,1,0,0,0,0,129,1,55,0,32,1,53,1,102,0,103,0,104,0,200,1,201,1,218,1,51,1,0,0,43,2,0,0,0,0,0,0,59,1,61,1,0,0,43,2,23,1,70,1,0,0,69,1,0,0,0,0,43,2,0,0,0,0,0,0,0,0,0,0,0,0,23,1,0,0,43,2,0,0,48,1,0,0,115,0,174,1,0,0,0,0,0,0,42,2,15,2,254,0,250,0,0,0,0,0,244,0,252,0,0,0,245,0,30,2,0,0,28,1,249,0,30,2,239,0,43,2,43,2,238,0,30,2,31,1,45,0,0,0,0,0,0,0,0,0,0,0,0,0,17,0,30,2,21,1,13,0,29,2,67,0,17,1,20,1,24,1,36,2,232,0,35,2,36,2,234,0,25,1,11,2,92,0,84,0,0,0,79,0,0,0,0,0,43,2,0,0,242,1,239,1,238,1,237,1,240,1,0,0,255,1,3,2,2,2,254,1,236,1,36,1,120,1,241,1,243,1,245,1,43,2,0,0,252,1,43,2,1,2,43,2,0,0,235,1,195,1,0,0,0,0,178,1,183,1,182,1,168,1,176,1,0,0,180,1,172,1,163,1,186,1,197,1,161,1,170,1,0,0,0,0,7,0,21,0,22,0,23,0,24,0,25,0,43,0,44,0,43,2,0,0,28,0,37,0,0,0,38,0,30,2,0,0,72,0,83,0,41,0,40,0,0,0,186,0,253,0,36,0,204,0,212,0,217,0,218,0,219,0,214,0,216,0,226,0,227,0,220,0,221,0,197,0,198,0,224,0,225,0,30,2,213,0,215,0,209,0,210,0,211,0,199,0,200,0,201,0,202,0,203,0,19,2,24,2,20,2,25,2,134,1,248,0,132,1,30,2,19,2,21,2,20,2,22,2,133,1,248,0,19,2,20,2,248,0,43,2,43,2,29,0,188,0,35,0,196,0,53,0,56,0,0,0,0,0,0,0,102,0,103,0,106,0,0,0,30,2,43,2,0,0,30,2,236,1,0,0,15,1,43,2,43,2,146,1,43,2,71,1,186,0,23,2,20,2,30,2,19,2,20,2,43,2,73,1,41,1,72,1,44,1,23,2,22,1,30,2,19,2,20,2,0,0,0,0,40,2,175,1,0,0,0,0,47,1,14,2,0,0,255,0,251,0,0,0,43,2,13,2,27,1,32,2,235,0,240,0,242,0,30,1,19,0,0,0,26,0,195,0,69,0,16,0,30,2,34,2,85,0,77,0,89,0,91,0,30,2,19,2,20,2,247,1,242,1,0,0,91,1,82,1,84,1,30,2,80,1,30,2,0,0,0,0,228,1,6,2,248,1,0,0,231,1,0,2,0,0,233,1,4,2,188,1,0,0,0,0,177,1,179,1,181,1,205,0,206,0,111,1,30,2,0,0,109,1,108,1,5,1,0,0,81,0,75,0,0,0,0,0,0,0,0,0,0,0,0,0,131,1,59,0,0,0,137,1,0,0,0,0,237,0,130,1,57,0,236,0,126,1,52,0,0,0,0,0,0,0,43,2,54,1,0,0,0,0,137,1,57,1,9,2,236,1,0,0,0,0,62,1,147,1,148,1,43,2,149,1,0,0,43,2,76,1,0,0,0,0,74,1,0,0,0,0,137,1,0,0,0,0,0,0,0,0,0,0,137,1,0,0,116,0,46,1,0,0,0,0,0,1,0,0,1,1,246,0,43,2,11,0,18,1,233,0,87,0,30,2,0,0,89,1,0,0,244,1,0,0,113,1,0,0,0,0,37,1,246,1,43,2,43,2,5,2,43,2,253,1,43,2,43,2,166,1,0,0,30,2,0,0,43,2,0,0,250,1,43,2,43,2,107,1,0,0,0,0,3,1,73,0,187,0,0,0,34,0,193,0,33,0,194,0,60,0,33,2,0,0,31,0,191,0,32,0,192,0,58,0,127,1,128,1,0,0,0,0,189,0,0,0,0,0,219,1,52,1,30,2,0,0,221,1,236,1,0,0,0,0,151,1,77,1,0,0,12,0,153,1,0,0,38,1,0,0,39,1,0,0,0,0,49,1,255,0,43,2,2,1,241,0,81,1,92,1,0,0,87,1,83,1,119,1,0,0,0,0,0,0,0,0,224,1,0,0,226,1,0,0,232,1,0,0,229,1,234,1,184,1,0,0,110,1,98,1,100,1,0,0,249,1,0,0,103,1,0,0,105,1,124,1,4,1,228,0,30,0,190,0,141,1,139,1,0,0,0,0,220,1,60,1,0,0,0,0,150,1,0,0,94,0,101,0,0,0,152,1,0,0,42,1,45,1,0,0,143,1,144,1,142,1,0,0,90,1,0,0,85,1,117,1,30,2,115,1,118,1,122,1,121,1,43,2,43,2,43,2,43,2,112,1,43,2,43,2,23,1,0,0,43,2,251,1,43,2,43,2,54,0,55,1,0,0,100,0,0,0,43,2,0,0,43,2,43,2,0,0,88,1,0,0,0,0,114,1,225,1,0,0,222,1,227,1,230,1,0,0,95,1,0,0,97,1,23,2,22,1,104,1,0,0,101,1,106,1,63,1,23,2,99,0,30,2,19,2,20,2,145,1,75,1,50,1,86,1,116,1,43,2,43,2,43,2,43,2,43,2,137,1,223,1,96,1,0,0,93,1,99,1,102,1,43,2,94,1,0,0,144,0,146,0,145,0,147,0,148,0,148,0,148,0,148,0,149,0,150,0,149,0,151,0,152,0,153,0,153,0,153,0,153,0,155,0,154,0,154,0,154,0,154,0,154,0,154,0,154,0,154,0,154,0,154,0,154,0,154,0,154,0,154,0,154,0,154,0,154,0,154,0,154,0,154,0,154,0,156,0,156,0,157,0,157,0,157,0,157,0,157,0,157,0,158,0,159,0,159,0,160,0,160,0,162,0,161,0,163,0,163,0,163,0,163,0,163,0,163,0,163,0,163,0,163,0,163,0,163,0,164,0,164,0,165,0,165,0,166,0,166,0,166,0,166,0,166,0,166,0,166,0,166,0,166,0,166,0,167,0,167,0,168,0,168,0,169,0,169,0,170,0,170,0,170,0,170,0,170,0,170,0,170,0,170,0,171,0,171,0,171,0,171,0,171,0,171,0,171,0,171,0,172,0,172,0,173,0,173,0,173,0,174,0,174,0,174,0,174,0,174,0,175,0,175,0,176,0,177,0,176,0,178,0,178,0,178,0,178,0,178,0,178,0,178,0,178,0,178,0,178,0,178,0,178,0,178,0,178,0,178,0,178,0,178,0,178,0,178,0,178,0,178,0,178,0,178,0,178,0,178,0,178,0,178,0,178,0,178,0,179,0,179,0,179,0,179,0,179,0,179,0,179,0,179,0,179,0,179,0,179,0,179,0,179,0,179,0,179,0,179,0,179,0,179,0,179,0,179,0,179,0,179,0,179,0,179,0,179,0,179,0,179,0,179,0,179,0,179,0,179,0,179,0,179,0,179,0,179,0,179,0,179,0,179,0,179,0,179,0,180,0,180,0,180,0,180,0,180,0,180,0,180,0,180,0,180,0,180,0,180,0,180,0,180,0,180,0,180,0,180,0,180,0,180,0,180,0,180,0,180,0,180,0,180,0,180,0,180,0,180,0,180,0,180,0,180,0,180,0,180,0,180,0,180,0,180,0,180,0,180,0,180,0,180,0,180,0,180,0,180,0,180,0,180,0,180,0,181,0,182,0,182,0,182,0,182,0,183,0,184,0,184,0,185,0,185,0,185,0,185,0,185,0,186,0,186,0,186,0,186,0,186,0,188,0,187,0,189,0,190,0,190,0,191,0,191,0,191,0,191,0,191,0,191,0,192,0,192,0,192,0,193,0,193,0,193,0,193,0,193,0,193,0,193,0,193,0,194,0,193,0,195,0,196,0,193,0,197,0,193,0,193,0,193,0,193,0,193,0,193,0,193,0,193,0,193,0,193,0,193,0,193,0,193,0,193,0,193,0,198,0,199,0,193,0,193,0,193,0,200,0,201,0,193,0,202,0,203,0,193,0,193,0,193,0,204,0,205,0,193,0,206,0,193,0,207,0,208,0,193,0,209,0,193,0,210,0,211,0,193,0,212,0,213,0,193,0,193,0,193,0,193,0,193,0,214,0,215,0,215,0,215,0,216,0,216,0,217,0,217,0,218,0,218,0,219,0,219,0,220,0,220,0,221,0,221,0,222,0,222,0,222,0,222,0,222,0,222,0,222,0,222,0,222,0,223,0,223,0,223,0,223,0,223,0,223,0,223,0,223,0,223,0,223,0,223,0,223,0,223,0,223,0,223,0,224,0,224,0,225,0,225,0,225,0,226,0,226,0,227,0,227,0,228,0,228,0,229,0,229,0,230,0,230,0,232,0,231,0,233,0,233,0,233,0,233,0,234,0,234,0,234,0,234,0,234,0,234,0,234,0,234,0,234,0,236,0,235,0,237,0,235,0,238,0,239,0,239,0,240,0,240,0,241,0,241,0,241,0,242,0,242,0,243,0,243,0,244,0,244,0,244,0,244,0,245,0,245,0,245,0,245,0,246,0,246,0,247,0,248,0,247,0,247,0,247,0,249,0,249,0,250,0,250,0,251,0,252,0,252,0,253,0,253,0,254,0,254,0,255,0,255,0,0,1,1,1,0,1,2,1,2,1,3,1,3,1,4,1,5,1,5,1,5,1,5,1,5,1,5,1,6,1,6,1,7,1,7,1,7,1,7,1,8,1,8,1,8,1,8,1,8,1,9,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,11,1,11,1,12,1,13,1,12,1,14,1,14,1,15,1,15,1,15,1,15,1,15,1,15,1,15,1,15,1,15,1,15,1,15,1,15,1,15,1,15,1,15,1,16,1,16,1,16,1,16,1,17,1,17,1,18,1,18,1,19,1,19,1,20,1,21,1,22,1,23,1,23,1,24,1,24,1,25,1,25,1,26,1,26,1,27,1,27,1,28,1,29,1,29,1,30,1,31,1,30,1,32,1,32,1,33,1,33,1,34,1,34,1,35,1,35,1,35,1,36,1,36,1,36,1,36,1,37,1,37,1,37,1,38,1,38,1,39,1,39,1,40,1,40,1,41,1,42,1,43,1,43,1,43,1,44,1,44,1,46,1,45,1,47,1,47,1,48,1,253,252,253,252,253,252,141,1,253,252,20,0,253,252,132,254,76,0,253,252,57,0,253,252,193,254,96,0,112,0,199,255,253,252,94,254,253,252,243,255,72,3,83,255,235,255,198,255,6,255,103,254,240,255,3,5,184,255,70,3,4,0,241,255,253,252,253,252,7,255,253,252,238,3,150,5,253,252,12,0,15,1,178,254,77,0,78,0,253,252,159,254,17,255,30,0,219,254,10,0,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,253,252,38,1,74,255,125,254,200,255,207,253,253,252,80,253,77,253,209,0,253,252,4,254,253,252,163,253,253,252,202,255,253,252,253,252,158,0,253,252,253,252,253,252,179,255,253,252,253,252,128,254,253,252,210,255,253,252,253,252,253,252,253,252,253,252,94,2,253,2,253,252,253,252,253,252,253,252,253,252,55,255,80,254,253,252,122,1,253,252,253,252,253,252,0,0,253,252,253,252,253,252,210,5,115,5,110,3,43,6,253,252,253,252,86,0,232,254,14,253,121,254,166,253,184,0,165,253,150,253,254,252,38,0,221,0,253,252,30,254,253,252,240,254,107,1,253,252,253,252,253,252,5,0,87,254,63,3,189,254,253,252,197,2,2,0,231,255,80,0,203,253,11,255,251,255,48,0,253,252,223,255,254,255,255,255,1,0,2,0,64,0,65,0,66,0,6,1,136,1],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE+40978),allocate([137,1,15,1,16,1,184,1,68,0,69,0,202,0,70,0,71,0,74,2,203,2,72,0,73,0,17,1,74,0,75,0,76,0,209,1,77,0,203,0,113,0,114,0,227,0,228,0,229,0,111,2,195,0,196,0,79,0,244,0,22,1,54,2,195,2,176,1,177,1,253,0,254,0,246,0,168,1,178,1,13,2,80,0,199,0,20,1,136,2,21,1,36,1,154,2,209,0,230,2,210,0,231,2,110,2,119,3,77,2,75,2,43,3,132,1,134,1,86,2,87,2,49,3,9,1,140,1,102,2,222,2,223,2,215,0,149,2,150,2,151,2,11,3,175,2,176,2,252,2,128,3,129,3,225,1,0,3,74,1,8,2,82,0,83,0,120,1,68,2,67,2,161,1,122,3,90,2,216,2,51,3,55,3,84,0,85,0,49,1,50,1,240,1,86,0,87,0,88,0,112,2,121,2,245,1,246,1,247,1,167,2,89,0,90,0,91,0,43,1,92,0,93,0,205,0,206,0,96,0,207,0,128,1,76,2,211,2,212,2,227,1,228,1,229,1,230,1,231,1,232,1,15,3,16,3,233,1,234,1,235,1,236,1,4,3,156,2,198,0,133,1,27,1,179,1,249,0,119,0,81,2,56,2,112,1,234,0,173,1,174,1,191,2,200,1,141,1,4,1,158,1,237,0,19,1,0,0,145,0,146,0,0,0,1,0,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,19,0,21,0,22,0,23,0,24,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,39,0,45,0,46,0,47,0,48,0,49,0,51,0,52,0,53,0,54,0,55,0,56,0,58,0,59,0,60,0,63,0,66,0,67,0,69,0,70,0,89,0,92,0,93,0,95,0,96,0,98,0,100,0,101,0,102,0,103,0,104,0,105,0,106,0,109,0,129,0,130,0,131,0,147,0,148,0,149,0,154,0,156,0,157,0,159,0,160,0,163,0,164,0,166,0,167,0,168,0,170,0,171,0,180,0,193,0,214,0,233,0,234,0,244,0,245,0,249,0,250,0,251,0,2,1,3,1,4,1,6,1,7,1,8,1,9,1,10,1,11,1,35,1,48,1,149,0,21,0,22,0,30,0,31,0,32,0,39,0,51,0,55,0,86,0,89,0,92,0,129,0,172,0,173,0,193,0,214,0,8,1,11,1,35,1,173,0,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0,38,0,39,0,45,0,46,0,47,0,48,0,49,0,50,0,51,0,52,0,55,0,69,0,70,0,71,0,72,0,73,0,74,0,75,0,76,0,77,0,80,0,81,0,84,0,85,0,86,0,87,0,98,0,119,0,120,0,121,0,122,0,123,0,124,0,125,0,126,0,127,0,128,0,130,0,131,0,138,0,139,0,174,0,178,0,179,0,10,1,30,1,194,0,89,0,157,0,158,0,171,0,214,0,8,1,9,1,11,1,158,0,200,0,202,0,89,0,164,0,171,0,214,0,219,0,8,1,11,1,33,0,34,0,35,0,36,0,48,0,49,0,51,0,55,0,101,0,174,0,175,0,176,0,4,1,142,0,143,0,158,0,39,1,44,1,45,1,47,1,57,0,98,0,99,0,130,0,163,0,180,0,181,0,186,0,189,0,191,0,33,1,34,1,186,0,186,0,139,0,187,0,188,0,139,0,183,0,187,0,139,0,40,1,45,1,175,0,150,0,133,0,180,0,214,0,180,0,55,0,1,0,92,0,152,0,153,0,154,0,165,0,166,0,48,1,195,0,197,0,182,0,191,0,33,1,48,1,181,0,32,1,33,1,48,1,89,0,137,0,170,0,214,0,8,1,11,1,198,0,53,0,54,0,56,0,63,0,105,0,174,0,5,1,62,0,64,0,65,0,111,0,112,0,246,0,247,0,63,0,246,0,63,0,246,0,63,0,246,0,61,0,246,0,58,0,59,0,159,0,180,0,180,0,39,1,47,1,40,0,41,0,42,0,43,0,44,0,37,0,38,0,28,0,231,0,116,0,137,0,92,0,98,0,167,0,116,0,71,0,72,0,73,0,74,0,75,0,76,0,77,0,78,0,79,0,80,0,81,0,82,0,83,0,86,0,87,0,117,0,119,0,120,0,121,0,122,0,123,0,124,0,125,0,126,0,127,0,128,0,88,0,135,0,136,0,88,0,136,0,38,1,26,0,133,0,235,0,90,0,90,0,183,0,187,0,235,0,157,0,51,0,55,0,172,0,58,0,59,0,120,0,12,1,88,0,135,0,136,0,209,0,31,1,210,0,38,1,151,0,152,0,55,0,16,0,215,0,44,1,116,0,88,0,135,0,136,0,90,0,90,0,215,0,158,0,158,0,55,0,88,0,135,0,136,0,25,0,105,0,137,0,46,1,39,1,20,0,238,0,142,0,181,0,181,0,181,0,91,0,137,0,190,0,48,1,137,0,190,0,186,0,40,1,41,1,186,0,185,0,186,0,191,0,33,1,48,1,157,0,41,1,157,0,155,0,133,0,152,0,88,0,136,0,90,0,154,0,165,0,140,0,39,1,47,1,41,1,157,0,41,1,141,0,137,0,43,1,45,1,137,0,43,1,134,0,43,1,55,0,167,0,168,0,169,0,137,0,88,0,135,0,136,0,51,0,53,0,54,0,55,0,56,0,92,0,98,0,99,0,123,0,126,0,139,0,229,0,15,1,16,1,17,1,18,1,19,1,20,1,21,1,24,1,25,1,26,1,27,1,28,1,63,0,247,0,248,0,110,0,113,0,114,0,253,0,254,0,255,0,0,1,62,0,247,0,63,0,63,0,63,0,61,0,71,0,71,0,149,0,158,0,158,0,158,0,158,0,154,0,157,0,157,0,232,0,98,0,159,0,181,0,191,0,192,0,165,0,137,0,170,0,137,0,156,0,159,0,171,0,180,0,181,0,192,0,180,0,180,0,180,0,180,0,180,0,180,0,180,0,180,0,180,0,180,0,180,0,180,0,180,0,180,0,180,0,180,0,180,0,180,0,180,0,180,0,180,0,180,0,180,0,180,0,180,0,180,0,51,0,52,0,55,0,178,0,183,0,36,1,37,1,185,0,51,0,52,0,55,0,178,0,183,0,36,1,51,0,55,0,36,1,237,0,236,0,159,0,180,0,159,0,180,0,97,0,161,0,207,0,13,1,206,0,51,0,55,0,172,0,36,1,185,0,36,1,151,0,157,0,211,0,212,0,15,0,13,0,240,0,48,1,152,0,16,0,180,0,51,0,55,0,185,0,51,0,55,0,152,0,27,0,216,0,44,1,216,0,51,0,55,0,185,0,51,0,55,0,204,0,177,0,252,0,253,0,238,0,191,0,15,0,181,0,98,0,181,0,189,0,253,0,33,1,34,1,41,1,140,0,41,1,137,0,137,0,41,1,175,0,147,0,134,0,180,0,41,1,154,0,196,0,33,1,167,0,169,0,51,0,55,0,185,0,51,0,55,0,116,0,51,0,92,0,98,0,220,0,221,0,222,0,17,1,15,1,199,0,137,0,29,1,48,1,181,0,137,0,29,1,51,0,137,0,29,1,51,0,63,0,152,0,1,1,254,0,110,0,0,1,180,0,180,0,79,0,121,0,224,0,225,0,48,1,181,0,137,0,41,1,169,0,137,0,116,0,44,0,40,1,90,0,90,0,183,0,187,0,40,1,42,1,90,0,90,0,183,0,184,0,187,0,48,1,184,0,187,0,224,0,224,0,44,0,162,0,44,1,158,0,151,0,42,1,15,0,41,1,139,0,14,1,15,1,174,0,181,0,192,0,241,0,48,1,18,0,218,0,48,1,17,0,217,0,218,0,90,0,90,0,42,1,90,0,90,0,218,0,201,0,203,0,42,1,158,0,175,0,15,0,137,0,215,0,181,0,98,0,181,0,190,0,33,1,134,0,41,1,43,1,42,1,222,0,137,0,17,1,137,0,41,1,226,0,40,1,29,0,108,0,230,0,18,1,24,1,26,1,28,1,19,1,21,1,26,1,19,1,134,0,152,0,223,0,226,0,19,1,20,1,22,1,23,1,26,1,28,1,152,0,98,0,181,0,169,0,180,0,118,0,159,0,180,0,159,0,180,0,161,0,141,0,90,0,159,0,180,0,159,0,180,0,161,0,235,0,231,0,152,0,152,0,180,0,224,0,208,0,44,1,15,0,15,1,151,0,44,1,213,0,91,0,242,0,48,1,152,0,14,0,243,0,48,1,158,0,15,0,90,0,15,0,152,0,152,0,216,0,181,0,152,0,181,0,137,0,41,1,221,0,137,0,98,0,220,0,140,0,142,0,152,0,152,0,137,0,29,1,137,0,29,1,137,0,29,1,137,0,29,1,29,1,134,0,226,0,121,0,137,0,29,1,89,0,214,0,137,0,29,1,137,0,29,1,15,0,181,0,180,0,159,0,180,0,15,0,134,0,152,0,151,0,41,1,15,0,14,1,89,0,171,0,214,0,8,1,11,1,215,0,152,0,215,0,15,0,15,0,205,0,218,0,238,0,239,0,137,0,221,0,137,0,17,1,51,0,227,0,228,0,16,1,15,0,134,0,19,1,26,1,19,1,19,1,121,0,23,1,26,1,55,0,88,0,19,1,22,1,26,1,19,1,134,0,15,0,151,0,55,0,88,0,135,0,136,0,152,0,152,0,152,0,221,0,137,0,137,0,40,1,29,1,137,0,29,1,29,1,29,1,137,0,29,1,137,0,29,1,51,0,55,0,29,1,137,0,29,1,29,1,15,0,51,0,55,0,185,0,51,0,55,0,240,0,217,0,15,0,221,0,228,0,19,1,19,1,26,1,19,1,19,1,42,1,29,1,29,1,137,0,29,1,29,1,29,1,19,1,29,1,73,110,118,97,108,105,100,32,109,114,98,95,115,116,97,116,101,44,32,101,120,105,116,105,110,103,32,109,114,98,99,10,0,37,115,58,32,110,111,32,112,114,111,103,114,97,109,32,102,105,108,101,32,103,105,118,101,110,10,0,46,99,0,46,109,114,98,0,37,115,58,32,111,117,116,112,117,116,32,102,105,108,101,32,115,104,111,117,108,100,32,98,101,32,115,112,101,99,105,102,105,101,100,32,116,111,32,99,111,109,112,105,108,101,32,109,117,108,116,105,112,108,101,32,102,105,108,101,115,10,0,37,115,58,37,115,58,83,121,110,116,97,120,32,79,75,10,0,119,98,0,37,115,58,32,99,97,110,110,111,116,32,111,112,101,110,32,111,117,116,112,117,116,32,102,105,108,101,58,40,37,115,41,10,0,79,117,116,112,117,116,32,102,105,108,101,32,105,115,32,114,101,113,117,105,114,101,100,10,0,37,115,58,32,97,110,32,111,117,116,112,117,116,32,102,105,108,101,32,105,115,32,97,108,114,101,97,100,121,32,115,112,101,99,105,102,105,101,100,46,32,40,37,115,41,10,0,37,115,58,32,102,117,110,99,116,105,111,110,32,110,97,109,101,32,105,115,32,110,111,116,32,115,112,101,99,105,102,105,101,100,46,10,0,118,101,114,115,105,111,110,0,118,101,114,98,111,115,101,0,99,111,112,121,114,105,103,104,116,0,37,115,58,32,103,101,110,101,114,97,116,105,110,103,32,37,115,32,101,110,100,105,97,110,32,67,32,102,105,108,101,46,32,115,112,101,99,105,102,121,32,45,101,47,45,69,32,102,111,114,32,99,114,111,115,115,32,99,111,109,112,105,108,105,110,103,46,10,0,98,105,103,0,108,105,116,116,108,101,0,115,119,105,116,99,104,101,115,58,0,45,99,32,32,32,32,32,32,32,32,32,32,32,99,104,101,99,107,32,115,121,110,116,97,120,32,111,110,108,121,0,45,111,60,111,117,116,102,105,108,101,62,32,32,112,108,97,99,101,32,116,104,101,32,111,117,116,112,117,116,32,105,110,116,111,32,60,111,117,116,102,105,108,101,62,0,45,118,32,32,32,32,32,32,32,32,32,32,32,112,114,105,110,116,32,118,101,114,115,105,111,110,32,110,117,109,98,101,114,44,32,116,104,101,110,32,116,117,114,110,32,111,110,32,118,101,114,98,111,115,101,32,109,111,100,101,0,45,103,32,32,32,32,32,32,32,32,32,32,32,112,114,111,100,117,99,101,32,100,101,98,117,103,103,105,110,103,32,105,110,102,111,114,109,97,116,105,111,110,0,45,66,60,115,121,109,98,111,108,62,32,32,32,98,105,110,97,114,121,32,60,115,121,109,98,111,108,62,32,111,117,116,112,117,116,32,105,110,32,67,32,108,97,110,103,117,97,103,101,32,102,111,114,109,97,116,0,45,101,32,32,32,32,32,32,32,32,32,32,32,103,101,110,101,114,97,116,101,32,108,105,116,116,108,101,32,101,110,100,105,97,110,32,105,115,101,113,32,100,97,116,97,0,45,69,32,32,32,32,32,32,32,32,32,32,32,103,101,110,101,114,97,116,101,32,98,105,103,32,101,110,100,105,97,110,32,105,115,101,113,32,100,97,116,97,0,45,45,118,101,114,98,111,115,101,32,32,32,32,114,117,110,32,97,116,32,118,101,114,98,111,115,101,32,109,111,100,101,0,45,45,118,101,114,115,105,111,110,32,32,32,32,112,114,105,110,116,32,116,104,101,32,118,101,114,115,105,111,110,0,45,45,99,111,112,121,114,105,103,104,116,32,32,112,114,105,110,116,32,116,104,101,32,99,111,112,121,114,105,103,104,116,0,85,115,97,103,101,58,32,37,115,32,91,115,119,105,116,99,104,101,115,93,32,112,114,111,103,114,97,109,102,105,108,101,10,0,32,32,37,115,10,0,114,0,37,115,58,32,99,97,110,110,111,116,32,111,112,101,110,32,112,114,111,103,114,97,109,32,102,105,108,101,46,32,40,37,115,41,10,0,37,115,58,32,105,110,118,97,108,105,100,32,67,32,108,97,110,103,117,97,103,101,32,115,121,109,98,111,108,32,110,97,109,101,10,0,37,115,58,32,101,114,114,111,114,32,105,110,32,109,114,98,32,100,117,109,112,32,40,37,115,41,32,37,100,10,0,82,73,84,69,0,69,84,73,82,0,48,48,48,51,0,77,65,84,90,0,48,48,48,48,0,69,78,68,0,0,76,86,65,82,0,76,73,78,69,0,68,66,71,0,0,73,82,69,80,0,37,46,56,101,0,47,42,32,100,117,109,112,101,100,32,105,110,32,108,105,116,116,108,101,32,101,110,100,105,97,110,32,111,114,100,101,114,46,10,32,32,32,117,115,101,32,96,109,114,98,99,32,45,69,96,32,111,112,116,105,111,110,32,102,111,114,32,98,105,103,32,101,110,100,105,97,110,32,67,80,85,46,32,42,47,10,0,47,42,32,100,117,109,112,101,100,32,105,110,32,98,105,103,32,101,110,100,105,97,110,32,111,114,100,101,114,46,10,32,32,32,117,115,101,32,96,109,114,98,99,32,45,101,96,32,111,112,116,105,111,110,32,102,111,114,32,98,101,116,116,101,114,32,112,101,114,102,111,114,109,97,110,99,101,32,111,110,32,108,105,116,116,108,101,32,101,110,100,105,97,110,32,67,80,85,46,32,42,47,10,0,35,105,110,99,108,117,100,101,32,60,115,116,100,105,110,116,46,104,62,10,0,99,111,110,115,116,32,117,105,110,116,56,95,116,10,35,105,102,32,100,101,102,105,110,101,100,32,95,95,71,78,85,67,95,95,10,95,95,97,116,116,114,105,98,117,116,101,95,95,40,40,97,108,105,103,110,101,100,40,37,117,41,41,41,10,35,101,108,105,102,32,100,101,102,105,110,101,100,32,95,77,83,67,95,86,69,82,10,95,95,100,101,99,108,115,112,101,99,40,97,108,105,103,110,40,37,117,41,41,10,35,101,110,100,105,102,10,37,115,91,93,32,61,32,123,0,48,120,37,48,50,120,44,0,10,125,59,10,0,105,110,118,97,108,105,100,32,102,111,114,109,97,116,32,115,116,114,105,110,103,0,97,114,101,110,97,32,111,118,101,114,102,108,111,119,32,101,114,114,111,114,0,71,67,0,115,116,97,114,116,0,101,110,97,98,108,101,0,100,105,115,97,98,108,101,0,105,110,116,101,114,118,97,108,95,114,97,116,105,111,0,105,110,116,101,114,118,97,108,95,114,97,116,105,111,61,0,115,116,101,112,95,114,97,116,105,111,0,115,116,101,112,95,114,97,116,105,111,61,0,103,101,110,101,114,97,116,105,111,110,97,108,95,109,111,100,101,61,0,103,101,110,101,114,97,116,105,111,110,97,108,95,109,111,100,101,0,2,8,32,128,1,4,16,64,3,12,48,192,105,102,110,111,110,101,0,100,101,102,97,117,108,116,0,100,101,102,97,117,108,116,61,0,100,101,102,97,117,108,116,95,112,114,111,99,0,100,101,102,97,117,108,116,95,112,114,111,99,61,0,95,95,100,101,108,101,116,101,0,104,97,115,95,107,101,121,63,0,104,97,115,95,118,97,108,117,101,63,0,107,101,121,63,0,107,101,121,115,0,115,116,111,114,101,0,118,97,108,117,101,63,0,118,97,108,117,101,115,0,38,124,111,63,0,124,111,63,0,111,111,0,110,111,110,32,102,108,111,97,116,32,118,97,108,117,101,0,70,108,111,97,116,68,111,109,97,105,110,69,114,114,111,114,0,45,73,110,102,105,110,105,116,121,0,73,110,102,105,110,105,116,121,0,78,97,78,0,105,110,118,97,108,105,100,32,114,97,100,105,120,32,37,83,0,78,117,109,101,114,105,99,0,113,117,111,0,100,105,118,109,111,100,0,99,101,105,108,0,102,105,110,105,116,101,63,0,102,108,111,111,114,0,105,110,102,105,110,105,116,101,63,0,114,111,117,110,100,0,116,114,117,110,99,97,116,101,0,110,97,110,63,0,73,78,70,73,78,73,84,89,0,37,46,55,103,0,99,97,110,39,116,32,99,111,110,118,101,114,116,32,70,108,111,97,116,32,105,110,116,111,32,73,110,116,101,103,101,114,0,102,0,78,105,108,67,108,97,115,115,0,84,114,117,101,67,108,97,115,115,0,70,97,108,115,101,67,108,97,115,115,0,98,0,73,110,116,101,103,101,114,0,99,97,110,39,116,32,99,111,110,118,101,114,116,32,37,83,32,105,110,116,111,32,37,83,0,37,83,32,99,97,110,110,111,116,32,98,101,32,99,111,110,118,101,114,116,101,100,32,116,111,32,37,83,32,98,121,32,35,37,83,0,70,105,120,110,117,109,0,117,110,107,110,111,119,110,32,116,121,112,101,32,37,83,32,40,37,83,32,103,105,118,101,110,41,0,105,67,108,97,115,115,0,83,67,108,97,115,115,0,70,108,111,97,116,0,70,105,108,101,0,68,97,116,97,0,35,60,0,99,108,97,115,115,32,111,114,32,109,111,100,117,108,101,32,114,101,113,117,105,114,101,100,0,116,111,95,105,110,116,0,99,97,110,39,116,32,99,111,110,118,101,114,116,32,37,83,32,116,111,32,73,110,116,101,103,101,114,32,40,37,83,35,37,83,32,103,105,118,101,115,32,37,83,41,0,99,97,110,39,116,32,99,111,110,118,101,114,116,32,110,105,108,32,105,110,116,111,32,73,110,116,101,103,101,114,0,98,97,115,101,32,115,112,101,99,105,102,105,101,100,32,102,111,114,32,110,111,110,32,115,116,114,105,110,103,32,118,97,108,117,101,0,109,97,105,110,0,48,49,50,51,52,53,54,55,56,57,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,0,115,116,114,105,110,103,32,99,97,112,97,99,105,116,121,32,115,105,122,101,32,116,111,111,32,98,105,103,0,115,116,114,105,110,103,32,115,105,122,101,32,116,111,111,32,98,105,103,0,115,116,114,105,110,103,32,99,111,110,116,97,105,110,115,32,110,117,108,108,32,98,121,116,101,0,99,97,110,39,116,32,109,111,100,105,102,121,32,102,114,111,122,101,110,32,115,116,114,105,110,103,0,82,101,103,101,120,112,32,99,108,97,115,115,32,110,111,116,32,105,109,112,108,101,109,101,110,116,101,100,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,1,1,1,1,1,1,1,1,1,1,1,105,108,108,101,103,97,108,32,114,97,100,105,120,32,37,83,0,115,116,114,105,110,103,32,40,37,83,41,32,116,111,111,32,98,105,103,32,102,111,114,32,105,110,116,101,103,101,114,0,105,110,118,97,108,105,100,32,115,116,114,105,110,103,32,102,111,114,32,110,117,109,98,101,114,40,37,83,41,0,105,110,118,97,108,105,100,32,115,116,114,105,110,103,32,102,111,114,32,102,108,111,97,116,40,37,83,41,0,115,116,114,105,110,103,32,102,111,114,32,70,108,111,97,116,32,99,111,110,116,97,105,110,115,32,110,117,108,108,32,98,121,116,101,0,34,0,98,121,116,101,115,105,122,101,0,99,97,112,105,116,97,108,105,122,101,0,99,97,112,105,116,97,108,105,122,101,33,0,99,104,111,109,112,0,99,104,111,109,112,33,0,99,104,111,112,0,99,104,111,112,33,0,100,111,119,110,99,97,115,101,0,100,111,119,110,99,97,115,101,33,0,115,112,108,105,116,0,116,111,95,102,0,116,111,95,105,0,117,112,99,97,115,101,0,117,112,99,97,115,101,33,0,98,121,116,101,115,0,102,114,101,101,122,101,0,124,111,105,0,116,121,112,101,32,109,105,115,109,97,116,99,104,58,32,37,83,32,103,105,118,101,110,0,83,0,124,83,0,111,124,111,0,119,114,111,110,103,32,110,117,109,98,101,114,32,111,102,32,97,114,103,117,109,101,110,116,115,32,40,37,83,32,102,111,114,32,49,41,0,99,97,110,39,116,32,99,111,110,118,101,114,116,32,116,111,32,70,105,120,110,117,109,0,97,114,103,117,109,101,110,116,32,116,111,111,32,98,105,103,0,2,8,32,128,1,4,16,64,3,12,48,192,115,121,109,98,111,108,32,108,101,110,103,116,104,32,116,111,111,32,108,111,110,103,0,83,121,109,98,111,108,0,105,100,50,110,97,109,101,0,116,111,95,115,121,109,0,99,97,110,110,111,116,32,115,101,116,32,105,110,115,116,97,110,99,101,32,118,97,114,105,97,98,108,101,0,39,37,83,39,32,105,115,32,110,111,116,32,97,108,108,111,119,101,100,32,97,115,32,97,110,32,105,110,115,116,97,110,99,101,32,118,97,114,105,97,98,108,101,32,110,97,109,101,0,45,60,0,117,110,105,110,105,116,105,97,108,105,122,101,100,32,99,108,97,115,115,32,118,97,114,105,97,98,108,101,32,37,83,32,105,110,32,37,83,0,99,111,110,115,116,97,110,116,32,108,111,111,107,45,117,112,32,102,111,114,32,110,111,110,32,99,108,97,115,115,47,109,111,100,117,108,101,0,84,111,111,32,108,111,110,103,32,97,114,103,117,109,101,110,116,115,46,32,40,108,105,109,105,116,61,56,41,0,110,101,103,97,116,105,118,101,32,97,114,103,99,32,102,111,114,32,102,117,110,99,97,108,108,32,40,37,83,41,0,115,117,112,101,114,32,99,97,108,108,101,100,32,111,117,116,115,105,100,101,32,111,102,32,109,101,116,104,111,100,0,116,111,95,112,114,111,99,0,70,105,98,101,114,69,114,114,111,114,0,100,111,117,98,108,101,32,114,101,115,117,109,101,0,110,111,32,116,97,114,103,101,116,32,99,108,97,115,115,32,111,114,32,109,111,100,117,108,101,0,79,80,95,68,69,66,85,71,32,37,100,32,37,100,32,37,100,10,0,76,111,99,97,108,74,117,109,112,69,114,114,111,114,0,114,101,116,117,114,110,0,98,114,101,97,107,0,0,121,105,101,108,100,0,0,6,5,5,117,110,101,120,112,101,99,116,101,100,32,0,39,37,83,39,58,32,119,114,111,110,103,32,110,117,109,98,101,114,32,111,102,32,97,114,103,117,109,101,110,116,115,32,40,37,83,32,102,111,114,32,37,83,41,0,119,114,111,110,103,32,110,117,109,98,101,114,32,111,102,32,97,114,103,117,109,101,110,116,115,32,40,37,83,32,102,111,114,32,37,83,41,0,115,116,97,99,107,32,108,101,118,101,108,32,116,111,111,32,100,101,101,112,46,32,40,108,105,109,105,116,61,40,48,120,52,48,48,48,48,32,45,32,49,50,56,41,41,0,110,42,38,0,124,83,38,0,109,111,100,117,108,101,95,101,118,97,108,47,99,108,97,115,115,95,101,118,97,108,32,119,105,116,104,32,115,116,114,105,110,103,32,110,111,116,32,105,109,112,108,101,109,101,110,116,101,100,0,105,110,115,116,97,110,99,101,95,101,118,97,108,32,119,105,116,104,32,115,116,114,105,110,103,32,110,111,116,32,105,109,112,108,101,109,101,110,116,101,100,0,109,101,109,111,114,121,32,97,108,108,111,99,97,116,105,111,110,32,101,114,114,111,114,0,37,115,58,37,100,58,37,100,58,32,37,115,10,0,108,105,110,101,32,37,100,58,37,100,58,32,37,115,10,0,78,79,68,69,95,66,69,71,73,78,58,10,0,78,79,68,69,95,82,69,83,67,85,69,58,10,0,98,111,100,121,58,10,0,114,101,115,99,117,101,58,10,0,104,97,110,100,108,101,32,99,108,97,115,115,101,115,58,10,0,101,120,99,95,118,97,114,58,10,0,114,101,115,99,117,101,32,98,111,100,121,58,10,0,101,108,115,101,58,10,0,78,79,68,69,95,69,78,83,85,82,69,58,10,0,101,110,115,117,114,101,58,10,0,78,79,68,69,95,66,76,79,67,75,58,10,0,109,97,110,100,97,116,111,114,121,32,97,114,103,115,58,10,0,111,112,116,105,111,110,97,108,32,97,114,103,115,58,10,0,37,115,61,0,114,101,115,116,61,42,37,115,10,0,112,111,115,116,32,109,97,110,100,97,116,111,114,121,32,97,114,103,115,58,10,0,98,108,107,61,38,37,115,10,0,78,79,68,69,95,73,70,58,10,0,99,111,110,100,58,10,0,116,104,101,110,58,10,0,78,79,68,69,95,65,78,68,58,10,0,78,79,68,69,95,79,82,58,10,0,78,79,68,69,95,67,65,83,69,58,10,0,99,97,115,101,58,10,0,78,79,68,69,95,87,72,73,76,69,58,10,0,78,79,68,69,95,85,78,84,73,76,58,10,0,78,79,68,69,95,70,79,82,58,10,0,118,97,114,58,10,0,112,114,101,58,10,0,114,101,115,116,58,10,0,112,111,115,116,58,10,0,105,110,58,10,0,100,111,58,10,0,78,79,68,69,95,83,67,79,80,69,58,10,0,108,111,99,97,108,32,118,97,114,105,97,98,108,101,115,58,10,0,44,32,0,37,115,0,78,79,68,69,95,67,65,76,76,58,10,0,109,101,116,104,111,100,61,39,37,115,39,32,40,37,100,41,10,0,97,114,103,115,58,10,0,98,108,111,99,107,58,10,0,78,79,68,69,95,68,79,84,50,58,10,0,78,79,68,69,95,68,79,84,51,58,10,0,78,79,68,69,95,67,79,76,79,78,50,58,10,0,58,58,37,115,10,0,78,79,68,69,95,67,79,76,79,78,51,58,32,58,58,37,115,10,0,78,79,68,69,95,65,82,82,65,89,58,10,0,78,79,68,69,95,72,65,83,72,58,10,0,107,101,121,58,10,0,118,97,108,117,101,58,10,0,78,79,68,69,95,83,80,76,65,84,58,10,0,78,79,68,69,95,65,83,71,78,58,10,0,108,104,115,58,10,0,114,104,115,58,10,0,78,79,68,69,95,77,65,83,71,78,58,10,0,109,108,104,115,58,10,0,40,101,109,112,116,121,41,10,0,78,79,68,69,95,79,80,95,65,83,71,78,58,10,0,111,112,61,39,37,115,39,32,40,37,100,41,10,0,78,79,68,69,95,83,85,80,69,82,58,10,0,78,79,68,69,95,90,83,85,80,69,82,10,0,78,79,68,69,95,82,69,84,85,82,78,58,10,0,78,79,68,69,95,89,73,69,76,68,58,10,0,78,79,68,69,95,66,82,69,65,75,58,10,0,78,79,68,69,95,78,69,88,84,58,10,0,78,79,68,69,95,82,69,68,79,10,0,78,79,68,69,95,82,69,84,82,89,10,0,78,79,68,69,95,76,86,65,82,32,37,115,10,0,78,79,68,69,95,71,86,65,82,32,37,115,10,0,78,79,68,69,95,73,86,65,82,32,37,115,10,0,78,79,68,69,95,67,86,65,82,32,37,115,10,0,78,79,68,69,95,67,79,78,83,84,32,37,115,10,0,78,79,68,69,95,77,65,84,67,72,58,10,0,78,79,68,69,95,66,65,67,75,95,82,69,70,58,32,36,37,99,10,0,78,79,68,69,95,78,84,72,95,82,69,70,58,32,36,37,100,10,0,78,79,68,69,95,65,82,71,32,37,115,10,0,78,79,68,69,95,66,76,79,67,75,95,65,82,71,58,10,0,78,79,68,69,95,73,78,84,32,37,115,32,98,97,115,101,32,37,100,10,0,78,79,68,69,95,70,76,79,65,84,32,37,115,10,0,78,79,68,69,95,78,69,71,65,84,69,10,0,78,79,68,69,95,83,84,82,32,34,37,115,34,32,108,101,110,32,37,100,10,0,78,79,68,69,95,68,83,84,82,10,0,78,79,68,69,95,88,83,84,82,32,34,37,115,34,32,108,101,110,32,37,100,10,0,78,79,68,69,95,68,88,83,84,82,10,0,78,79,68,69,95,82,69,71,88,32,47,37,115,47,37,115,10,0,78,79,68,69,95,68,82,69,71,88,10,0,116,97,105,108,58,32,37,115,10,0,111,112,116,58,32,37,115,10,0,78,79,68,69,95,83,89,77,32,58,37,115,10,0,78,79,68,69,95,83,69,76,70,10,0,78,79,68,69,95,78,73,76,10,0,78,79,68,69,95,84,82,85,69,10,0,78,79,68,69,95,70,65,76,83,69,10,0,78,79,68,69,95,65,76,73,65,83,32,37,115,32,37,115,58,10,0,78,79,68,69,95,85,78,68,69,70,0,32,37,115,0,58,10,0,78,79,68,69,95,67,76,65,83,83,58,10,0,58,37,115,10,0,115,117,112,101,114,58,10,0,78,79,68,69,95,77,79,68,85,76,69,58,10,0,78,79,68,69,95,83,67,76,65,83,83,58,10,0,78,79,68,69,95,68,69,70,58,10,0,37,115,10,0,78,79,68,69,95,83,68,69,70,58,10,0,78,79,68,69,95,80,79,83,84,69,88,69,58,10,0,78,79,68,69,95,72,69,82,69,68,79,67,58,10,0,110,111,100,101,32,116,121,112,101,58,32,37,100,32,40,48,120,37,120,41,10,0,37,48,53,100,32,0,0,2,2,2,2,2,2,2,2,2,143,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,130,2,2,2,128,123,2,139,140,126,124,137,125,136,127,2,2,2,2,2,2,2,2,2,2,118,142,120,116,119,117,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,135,2,141,122,2,138,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,133,121,134,131,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,129,132,0,2,0,2,2,1,1,3,2,1,0,5,4,2,1,1,3,2,0,4,2,3,3,3,3,3,4,1,3,3,6,5,5,5,5,3,3,3,3,1,3,3,1,3,3,3,2,1,1,1,1,1,4,0,5,2,3,4,5,4,5,2,2,2,2,2,1,3,1,3,1,2,3,5,2,4,2,4,1,3,1,3,2,3,1,2,1,4,3,3,3,3,2,1,1,4,3,3,3,3,2,1,1,1,2,1,3,1,1,1,1,1,1,1,1,0,4,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,5,3,5,6,5,5,5,5,4,3,3,3,3,3,3,3,3,3,4,4,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,3,3,3,6,1,1,1,2,4,2,3,1,1,1,1,2,4,2,1,2,2,4,1,0,2,2,2,1,1,2,3,4,4,5,3,4,2,1,1,1,1,1,1,1,1,0,4,0,0,5,0,3,3,3,2,3,3,1,4,3,1,4,3,2,1,2,0,0,5,6,6,0,0,7,0,0,7,5,4,0,0,9,0,6,0,0,8,0,5,0,0,7,0,0,9,1,1,1,1,1,1,1,2,1,1,1,5,1,2,1,1,1,3,1,3,1,4,6,3,5,2,4,1,3,6,8,4,6,4,2,6,2,4,6,2,4,2,4,1,1,1,3,1,4,1,4,1,3,1,1,4,1,3,3,0,5,2,4,5,5,2,4,4,3,3,3,2,1,4,0,5,0,5,5,1,1,6,1,1,1,1,2,1,2,1,1,1,1,1,1,1,2,3,1,2,1,0,4,1,2,2,3,2,3,1,0,1,1,2,1,2,1,2,1,0,4,2,3,1,4,2,1,1,1,1,1,2,2,3,1,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,4,3,2,6,8,4,6,4,6,2,4,6,2,4,2,4,1,0,1,1,1,1,1,1,1,3,1,3,2,2,2,1,3,1,3,1,1,2,1,1,1,2,2,1,1,0,4,1,2,1,3,3,2,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,2,2,0,1,1,1,1,0,3,1,2,0,66,69,71,73,78,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,101,108,115,101,32,119,105,116,104,111,117,116,32,114,101,115,99,117,101,32,105,115,32,117,115,101,108,101,115,115,0,69,78,68,32,110,111,116,32,115,117,112,111,114,116,101,100,0,99,111,110,115,116,97,110,116,32,114,101,45,97,115,115,105,103,110,109,101,110,116,0,100,121,110,97,109,105,99,32,99,111,110,115,116,97,110,116,32,97,115,115,105,103,110,109,101,110,116,0,99,108,97,115,115,47,109,111,100,117,108,101,32,110,97,109,101,32,109,117,115,116,32,98,101,32,67,79,78,83,84,65,78,84,0,61,126,0,33,126,0,62,61,0,60,61,0,62,62,0,42,42,0,43,64,0,45,64,0,47,0,37,0,124,0,94,0,60,0,126,0,99,108,97,115,115,32,100,101,102,105,110,105,116,105,111,110,32,105,110,32,109,101,116,104,111,100,32,98,111,100,121,0,109,111,100,117,108,101,32,100,101,102,105,110,105,116,105,111,110,32,105,110,32,109,101,116,104,111,100,32,98,111,100,121,0,98,108,111,99,107,32,103,105,118,101,110,32,116,111,32,121,105,101,108,100,0,37,100,0,102,111,114,109,97,108,32,97,114,103,117,109,101,110,116,32,99,97,110,110,111,116,32,98,101,32,97,32,99,111,110,115,116,97,110,116,0,102,111,114,109,97,108,32,97,114,103,117,109,101,110,116,32,99,97,110,110,111,116,32,98,101,32,97,110,32,105,110,115,116,97,110,99,101,32,118,97,114,105,97,98,108,101,0,102,111,114,109,97,108,32,97,114,103,117,109,101,110,116,32,99,97,110,110,111,116,32,98,101,32,97,32,103,108,111,98,97,108,32,118,97,114,105,97,98,108,101,0,102,111,114,109,97,108,32,97,114,103,117,109,101,110,116,32,99,97,110,110,111,116,32,98,101,32,97,32,99,108,97,115,115,32,118,97,114,105,97,98,108,101,0,99,97,110,39,116,32,100,101,102,105,110,101,32,115,105,110,103,108,101,116,111,110,32,109,101,116,104,111,100,32,102,111,114,32,40,41,46,0,99,97,110,39,116,32,100,101,102,105,110,101,32,115,105,110,103,108,101,116,111,110,32,109,101,116,104,111,100,32,102,111,114,32,108,105,116,101,114,97,108,115,0,115,121,110,116,97,120,32,101,114,114,111,114,0,69,114,114,111,114,58,32,100,105,115,99,97,114,100,105,110,103,0,69,114,114,111,114,58,32,112,111,112,112,105,110,103,0,109,101,109,111,114,121,32,101,120,104,97,117,115,116,101,100,0,67,108,101,97,110,117,112,58,32,100,105,115,99,97,114,100,105,110,103,32,108,111,111,107,97,104,101,97,100,0,67,108,101,97,110,117,112,58,32,112,111,112,112,105,110,103,0,68,101,108,101,116,105,110,103,0,44,32,101,120,112,101,99,116,105,110,103,32,37,115,0,115,121,110,116,97,120,32,101,114,114,111,114,44,32,117,110,101,120,112,101,99,116,101,100,32,37,115,0,32,111,114,32,37,115,0,36,101,110,100,0,101,114,114,111,114,0,36,117,110,100,101,102,105,110,101,100,0,107,101,121,119,111,114,100,95,99,108,97,115,115,0,107,101,121,119,111,114,100,95,109,111,100,117,108,101,0,107,101,121,119,111,114,100,95,100,101,102,0,107,101,121,119,111,114,100,95,98,101,103,105,110,0,107,101,121,119,111,114,100,95,105,102,0,107,101,121,119,111,114,100,95,117,110,108,101,115,115,0,107,101,121,119,111,114,100,95,119,104,105,108,101,0,107,101,121,119,111,114,100,95,117,110,116,105,108,0,107,101,121,119,111,114,100,95,102,111,114,0,107,101,121,119,111,114,100,95,117,110,100,101,102,0,107,101,121,119,111,114,100,95,114,101,115,99,117,101,0,107,101,121,119,111,114,100,95,101,110,115,117,114,101,0,107,101,121,119,111,114,100,95,101,110,100,0,107,101,121,119,111,114,100,95,116,104,101,110,0,107,101,121,119,111,114,100,95,101,108,115,105,102,0,107,101,121,119,111,114,100,95,101,108,115,101,0,107,101,121,119,111,114,100,95,99,97,115,101,0,107,101,121,119,111,114,100,95,119,104,101,110,0,107,101,121,119,111,114,100,95,98,114,101,97,107,0,107,101,121,119,111,114,100,95,110,101,120,116,0,107,101,121,119,111,114,100,95,114,101,100,111,0,107,101,121,119,111,114,100,95,114,101,116,114,121,0,107,101,121,119,111,114,100,95,105,110,0,107,101,121,119,111,114,100,95,100,111,0,107,101,121,119,111,114,100,95,100,111,95,99,111,110,100,0,107,101,121,119,111,114,100,95,100,111,95,98,108,111,99,107,0,107,101,121,119,111,114,100,95,100,111,95,76,65,77,66,68,65,0,107,101,121,119,111,114,100,95,114,101,116,117,114,110,0,107,101,121,119,111,114,100,95,121,105,101,108,100,0,107,101,121,119,111,114,100,95,115,117,112,101,114,0,107,101,121,119,111,114,100,95,115,101,108,102,0,107,101,121,119,111,114,100,95,110,105,108,0,107,101,121,119,111,114,100,95,116,114,117,101,0,107,101,121,119,111,114,100,95,102,97,108,115,101,0,107,101,121,119,111,114,100,95,97,110,100,0,107,101,121,119,111,114,100,95,111,114,0,107,101,121,119,111,114,100,95,110,111,116,0,109,111,100,105,102,105,101,114,95,105,102,0,109,111,100,105,102,105,101,114,95,117,110,108,101,115,115,0,109,111,100,105,102,105,101,114,95,119,104,105,108,101,0,109,111,100,105,102,105,101,114,95,117,110,116,105,108,0,109,111,100,105,102,105,101,114,95,114,101,115,99,117,101,0,107,101,121,119,111,114,100,95,97,108,105,97,115,0,107,101,121,119,111,114,100,95,66,69,71,73,78,0,107,101,121,119,111,114,100,95,69,78,68,0,107,101,121,119,111,114,100,95,95,76,73,78,69,95,95,0,107,101,121,119,111,114,100,95,95,70,73,76,69,95,95,0,107,101,121,119,111,114,100,95,95,69,78,67,79,68,73,78,71,95,95,0,116,73,68,69,78,84,73,70,73,69,82,0,116,70,73,68,0,116,71,86,65,82,0,116,73,86,65,82,0,116,67,79,78,83,84,65,78,84,0,116,67,86,65,82,0,116,76,65,66,69,76,0,116,73,78,84,69,71,69,82,0,116,70,76,79,65,84,0,116,67,72,65,82,0,116,88,83,84,82,73,78,71,0,116,82,69,71,69,88,80,0,116,83,84,82,73,78,71,0,116,83,84,82,73,78,71,95,80,65,82,84,0,116,83,84,82,73,78,71,95,77,73,68,0,116,78,84,72,95,82,69,70,0,116,66,65,67,75,95,82,69,70,0,116,82,69,71,69,88,80,95,69,78,68,0,116,85,80,76,85,83,0,116,85,77,73,78,85,83,0,116,80,79,87,0,116,67,77,80,0,116,69,81,0,116,69,81,81,0,116,78,69,81,0,116,71,69,81,0,116,76,69,81,0,116,65,78,68,79,80,0,116,79,82,79,80,0,116,77,65,84,67,72,0,116,78,77,65,84,67,72,0,116,68,79,84,50,0,116,68,79,84,51,0,116,65,82,69,70,0,116,65,83,69,84,0,116,76,83,72,70,84,0,116,82,83,72,70,84,0,116,67,79,76,79,78,50,0,116,67,79,76,79,78,51,0,116,79,80,95,65,83,71,78,0,116,65,83,83,79,67,0,116,76,80,65,82,69,78,0,116,76,80,65,82,69,78,95,65,82,71,0,116,82,80,65,82,69,78,0,116,76,66,82,65,67,75,0,116,76,66,82,65,67,69,0,116,76,66,82,65,67,69,95,65,82,71,0,116,83,84,65,82,0,116,65,77,80,69,82,0,116,76,65,77,66,68,65,0,116,83,89,77,66,69,71,0,116,82,69,71,69,88,80,95,66,69,71,0,116,87,79,82,68,83,95,66,69,71,0,116,83,89,77,66,79,76,83,95,66,69,71,0,116,83,84,82,73,78,71,95,66,69,71,0,116,88,83,84,82,73,78,71,95,66,69,71,0,116,83,84,82,73,78,71,95,68,86,65,82,0,116,76,65,77,66,69,71,0,116,72,69,82,69,68,79,67,95,66,69,71,0,116,72,69,82,69,68,79,67,95,69,78,68,0,116,76,73,84,69,82,65,76,95,68,69,76,73,77,0,116,72,68,95,76,73,84,69,82,65,76,95,68,69,76,73,77,0,116,72,68,95,83,84,82,73,78,71,95,80,65,82,84,0,116,72,68,95,83,84,82,73,78,71,95,77,73,68,0,116,76,79,87,69,83,84,0,39,61,39,0,39,63,39,0,39,58,39,0,39,62,39,0,39,60,39,0,39,124,39,0,39,94,39,0,39,38,39,0,39,43,39,0,39,45,39,0,39,42,39,0,39,47,39,0,39,37,39,0,116,85,77,73,78,85,83,95,78,85,77,0,39,33,39,0,39,126,39,0,116,76,65,83,84,95,84,79,75,69,78,0,39,123,39,0,39,125,39,0,39,91,39,0,39,46,39,0,39,44,39,0,39,96,39,0,39,40,39,0,39,41,39,0,39,93,39,0,39,59,39,0,39,92,110,39,0,36,97,99,99,101,112,116,0,112,114,111],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE+51218),allocate([103,114,97,109,0,36,64,49,0,116,111,112,95,99,111,109,112,115,116,109,116,0,116,111,112,95,115,116,109,116,115,0,116,111,112,95,115,116,109,116,0,64,50,0,98,111,100,121,115,116,109,116,0,99,111,109,112,115,116,109,116,0,115,116,109,116,115,0,115,116,109,116,0,36,64,51,0,99,111,109,109,97,110,100,95,97,115,103,110,0,101,120,112,114,0,101,120,112,114,95,118,97,108,117,101,0,99,111,109,109,97,110,100,95,99,97,108,108,0,98,108,111,99,107,95,99,111,109,109,97,110,100,0,99,109,100,95,98,114,97,99,101,95,98,108,111,99,107,0,36,64,52,0,99,111,109,109,97,110,100,0,109,108,104,115,0,109,108,104,115,95,105,110,110,101,114,0,109,108,104,115,95,98,97,115,105,99,0,109,108,104,115,95,105,116,101,109,0,109,108,104,115,95,108,105,115,116,0,109,108,104,115,95,112,111,115,116,0,109,108,104,115,95,110,111,100,101,0,108,104,115,0,99,110,97,109,101,0,99,112,97,116,104,0,102,110,97,109,101,0,102,115,121,109,0,117,110,100,101,102,95,108,105,115,116,0,36,64,53,0,111,112,0,114,101,115,119,111,114,100,115,0,97,114,103,0,97,114,103,95,118,97,108,117,101,0,97,114,101,102,95,97,114,103,115,0,112,97,114,101,110,95,97,114,103,115,0,111,112,116,95,112,97,114,101,110,95,97,114,103,115,0,111,112,116,95,99,97,108,108,95,97,114,103,115,0,99,97,108,108,95,97,114,103,115,0,99,111,109,109,97,110,100,95,97,114,103,115,0,64,54,0,98,108,111,99,107,95,97,114,103,0,111,112,116,95,98,108,111,99,107,95,97,114,103,0,97,114,103,115,0,109,114,104,115,0,112,114,105,109,97,114,121,0,64,55,0,64,56,0,36,64,57,0,36,64,49,48,0,64,49,49,0,64,49,50,0,36,64,49,51,0,36,64,49,52,0,36,64,49,53,0,36,64,49,54,0,36,64,49,55,0,36,64,49,56,0,64,49,57,0,64,50,48,0,64,50,49,0,64,50,50,0,64,50,51,0,64,50,52,0,64,50,53,0,64,50,54,0,112,114,105,109,97,114,121,95,118,97,108,117,101,0,116,104,101,110,0,100,111,0,105,102,95,116,97,105,108,0,111,112,116,95,101,108,115,101,0,102,111,114,95,118,97,114,0,102,95,109,97,114,103,0,102,95,109,97,114,103,95,108,105,115,116,0,102,95,109,97,114,103,115,0,98,108,111,99,107,95,112,97,114,97,109,0,111,112,116,95,98,108,111,99,107,95,112,97,114,97,109,0,98,108,111,99,107,95,112,97,114,97,109,95,100,101,102,0,111,112,116,95,98,118,95,100,101,99,108,0,98,118,95,100,101,99,108,115,0,98,118,97,114,0,102,95,108,97,114,103,108,105,115,116,0,108,97,109,98,100,97,95,98,111,100,121,0,100,111,95,98,108,111,99,107,0,36,64,50,55,0,98,108,111,99,107,95,99,97,108,108,0,109,101,116,104,111,100,95,99,97,108,108,0,98,114,97,99,101,95,98,108,111,99,107,0,64,50,56,0,64,50,57,0,99,97,115,101,95,98,111,100,121,0,99,97,115,101,115,0,111,112,116,95,114,101,115,99,117,101,0,101,120,99,95,108,105,115,116,0,101,120,99,95,118,97,114,0,111,112,116,95,101,110,115,117,114,101,0,108,105,116,101,114,97,108,0,115,116,114,105,110,103,0,115,116,114,105,110,103,95,114,101,112,0,115,116,114,105,110,103,95,105,110,116,101,114,112,0,64,51,48,0,120,115,116,114,105,110,103,0,114,101,103,101,120,112,0,104,101,114,101,100,111,99,0,111,112,116,95,104,101,114,101,100,111,99,95,98,111,100,105,101,115,0,104,101,114,101,100,111,99,95,98,111,100,105,101,115,0,104,101,114,101,100,111,99,95,98,111,100,121,0,104,101,114,101,100,111,99,95,115,116,114,105,110,103,95,114,101,112,0,104,101,114,101,100,111,99,95,115,116,114,105,110,103,95,105,110,116,101,114,112,0,64,51,49,0,119,111,114,100,115,0,115,121,109,98,111,108,0,98,97,115,105,99,95,115,121,109,98,111,108,0,115,121,109,0,115,121,109,98,111,108,115,0,110,117,109,101,114,105,99,0,118,97,114,105,97,98,108,101,0,118,97,114,95,108,104,115,0,118,97,114,95,114,101,102,0,98,97,99,107,114,101,102,0,36,64,51,50,0,102,95,97,114,103,108,105,115,116,0,102,95,97,114,103,115,0,102,95,98,97,100,95,97,114,103,0,102,95,110,111,114,109,95,97,114,103,0,102,95,97,114,103,95,105,116,101,109,0,102,95,97,114,103,0,102,95,111,112,116,95,97,115,103,110,0,102,95,111,112,116,0,102,95,98,108,111,99,107,95,111,112,116,0,102,95,98,108,111,99,107,95,111,112,116,97,114,103,0,102,95,111,112,116,97,114,103,0,114,101,115,116,97,114,103,95,109,97,114,107,0,102,95,114,101,115,116,95,97,114,103,0,98,108,107,97,114,103,95,109,97,114,107,0,102,95,98,108,111,99,107,95,97,114,103,0,111,112,116,95,102,95,98,108,111,99,107,95,97,114,103,0,115,105,110,103,108,101,116,111,110,0,36,64,51,51,0,97,115,115,111,99,95,108,105,115,116,0,97,115,115,111,99,115,0,97,115,115,111,99,0,111,112,101,114,97,116,105,111,110,0,111,112,101,114,97,116,105,111,110,50,0,111,112,101,114,97,116,105,111,110,51,0,100,111,116,95,111,114,95,99,111,108,111,110,0,111,112,116,95,116,101,114,109,115,0,111,112,116,95,110,108,0,114,112,97,114,101,110,0,114,98,114,97,99,107,101,116,0,116,114,97,105,108,101,114,0,116,101,114,109,0,110,108,0,36,64,51,52,0,116,101,114,109,115,0,110,111,110,101,0,98,108,111,99,107,32,97,114,103,117,109,101,110,116,32,115,104,111,117,108,100,32,110,111,116,32,98,101,32,103,105,118,101,110,0,98,111,116,104,32,98,108,111,99,107,32,97,114,103,32,97,110,100,32,97,99,116,117,97,108,32,98,108,111,99,107,32,103,105,118,101,110,0,99,97,110,39,116,32,115,101,116,32,118,97,114,105,97,98,108,101,32,36,37,100,0,99,97,110,39,116,32,115,101,116,32,118,97,114,105,97,98,108,101,32,36,37,99,0,73,110,116,101,114,110,97,108,32,101,114,114,111,114,32,105,110,32,98,97,99,107,114,101,102,95,101,114,114,111,114,40,41,32,58,32,110,61,62,99,97,114,32,61,61,32,37,83,0,39,42,39,32,105,110,116,101,114,112,114,101,116,101,100,32,97,115,32,97,114,103,117,109,101,110,116,32,112,114,101,102,105,120,0,10,61,101,110,100,0,101,109,98,101,100,100,101,100,32,100,111,99,117,109,101,110,116,32,109,101,101,116,115,32,101,110,100,32,111,102,32,102,105,108,101,0,105,110,99,111,109,112,108,101,116,101,32,99,104,97,114,97,99,116,101,114,32,115,121,110,116,97,120,0,105,110,118,97,108,105,100,32,99,104,97,114,97,99,116,101,114,32,115,121,110,116,97,120,59,32,117,115,101,32,63,92,37,99,0,38,38,0,39,38,39,32,105,110,116,101,114,112,114,101,116,101,100,32,97,115,32,97,114,103,117,109,101,110,116,32,112,114,101,102,105,120,0,124,124,0,110,111,32,46,60,100,105,103,105,116,62,32,102,108,111,97,116,105,110,103,32,108,105,116,101,114,97,108,32,97,110,121,109,111,114,101,59,32,112,117,116,32,48,32,98,101,102,111,114,101,32,100,111,116,0,110,117,109,101,114,105,99,32,108,105,116,101,114,97,108,32,119,105,116,104,111,117,116,32,100,105,103,105,116,115,0,73,110,118,97,108,105,100,32,111,99,116,97,108,32,100,105,103,105,116,0,48,0,116,114,97,105,108,105,110,103,32,39,37,99,39,32,105,110,32,110,117,109,98,101,114,0,99,111,114,114,117,112,116,101,100,32,102,108,111,97,116,32,118,97,108,117,101,32,37,115,0,102,108,111,97,116,32,37,115,32,111,117,116,32,111,102,32,114,97,110,103,101,0,117,110,107,110,111,119,110,32,116,121,112,101,32,111,102,32,37,115,116,114,105,110,103,0,117,110,116,101,114,109,105,110,97,116,101,100,32,113,117,111,116,101,100,32,115,116,114,105,110,103,32,109,101,101,116,115,32,101,110,100,32,111,102,32,102,105,108,101,0,105,110,99,111,109,112,108,101,116,101,32,103,108,111,98,97,108,32,118,97,114,105,97,98,108,101,32,115,121,110,116,97,120,0,99,97,112,116,117,114,101,32,103,114,111,117,112,32,105,110,100,101,120,32,109,117,115,116,32,98,101,32,60,61,32,37,100,0,105,110,99,111,109,112,108,101,116,101,32,105,110,115,116,97,110,99,101,32,118,97,114,105,97,98,108,101,32,115,121,110,116,97,120,0,105,110,99,111,109,112,108,101,116,101,32,99,108,97,115,115,32,118,97,114,105,97,98,108,101,32,115,121,110,116,97,120,0,39,64,37,99,39,32,105,115,32,110,111,116,32,97,108,108,111,119,101,100,32,97,115,32,97,110,32,105,110,115,116,97,110,99,101,32,118,97,114,105,97,98,108,101,32,110,97,109,101,0,39,64,64,37,99,39,32,105,115,32,110,111,116,32,97,108,108,111,119,101,100,32,97,115,32,97,32,99,108,97,115,115,32,118,97,114,105,97,98,108,101,32,110,97,109,101,0,73,110,118,97,108,105,100,32,99,104,97,114,32,39,92,120,37,48,50,88,39,32,105,110,32,101,120,112,114,101,115,115,105,111,110,0,95,95,69,78,68,95,95,0,98,114,101,97,107,0,101,108,115,101,0,110,105,108,0,101,110,115,117,114,101,0,110,111,116,0,102,97,108,115,101,0,115,101,108,102,0,101,108,115,105,102,0,114,101,115,99,117,101,0,116,114,117,101,0,117,110,116,105,108,0,117,110,108,101,115,115,0,114,101,116,117,114,110,0,100,101,102,0,97,110,100,0,121,105,101,108,100,0,102,111,114,0,117,110,100,101,102,0,111,114,0,105,110,0,119,104,101,110,0,114,101,116,114,121,0,105,102,0,99,97,115,101,0,114,101,100,111,0,110,101,120,116,0,115,117,112,101,114,0,109,111,100,117,108,101,0,95,95,76,73,78,69,95,95,0,95,95,70,73,76,69,95,95,0,95,95,69,78,67,79,68,73,78,71,95,95,0,69,78,68,0,97,108,105,97,115,0,66,69,71,73,78,0,119,104,105,108,101,0,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,14,51,16,8,11,13,51,51,51,51,10,51,13,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,11,51,13,1,26,4,1,8,28,51,23,51,1,1,27,5,19,21,51,8,3,3,11,51,21,24,16,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,97,109,98,105,103,117,111,117,115,32,102,105,114,115,116,32,97,114,103,117,109,101,110,116,59,32,112,117,116,32,112,97,114,101,110,116,104,101,115,101,115,32,111,114,32,101,118,101,110,32,115,112,97,99,101,115,0,115,116,114,105,110,103,32,116,111,111,32,108,111,110,103,32,40,116,114,117,110,99,97,116,101,100,41,0,73,110,118,97,108,105,100,32,101,115,99,97,112,101,32,99,104,97,114,97,99,116,101,114,32,115,121,110,116,97,120,0,73,110,118,97,108,105,100,32,85,110,105,99,111,100,101,32,99,111,100,101,32,112,111,105,110,116,0,48,49,50,51,52,53,54,55,56,57,97,98,99,100,101,102,48,49,50,51,52,53,54,55,56,57,65,66,67,68,69,70,0,117,110,116,101,114,109,105,110,97,116,101,100,32,104,101,114,101,32,100,111,99,117,109,101,110,116,32,105,100,101,110,116,105,102,105,101,114,0,99,97,110,39,116,32,102,105,110,100,32,104,101,114,101,100,111,99,32,100,101,108,105,109,105,116,101,114,32,34,37,115,34,32,97,110,121,119,104,101,114,101,32,98,101,102,111,114,101,32,69,79,70,0,117,110,116,101,114,109,105,110,97,116,101,100,32,115,116,114,105,110,103,32,109,101,101,116,115,32,101,110,100,32,111,102,32,102,105,108,101,0,115,0,117,110,107,110,111,119,110,32,114,101,103,101,120,112,32,111,112,116,105,111,110,37,115,32,45,32,37,115,0,108,105,110,101,32,37,100,58,32,37,115,10,0,99,111,100,101,103,101,110,32,101,114,114,111,114,0,97,114,114,97,121,32,115,105,122,101,32,116,111,111,32,98,105,103,0,105,110,100,101,120,32,37,83,32,111,117,116,32,111,102,32,97,114,114,97,121,0,110,101,103,97,116,105,118,101,32,108,101,110,103,116,104,32,40,37,83,41,0,105,110,100,101,120,32,105,115,32,111,117,116,32,111,102,32,97,114,114,97,121,0,116,111,95,97,0,114,101,99,117,114,115,105,118,101,32,97,114,114,97,121,32,106,111,105,110,0,43,0,60,60,0,91,93,61,0,99,108,101,97,114,0,99,111,110,99,97,116,0,100,101,108,101,116,101,95,97,116,0,101,109,112,116,121,63,0,105,110,100,101,120,0,106,111,105,110,0,108,101,110,103,116,104,0,112,111,112,0,112,117,115,104,0,114,101,112,108,97,99,101,0,114,101,118,101,114,115,101,0,114,101,118,101,114,115,101,33,0,114,105,110,100,101,120,0,115,104,105,102,116,0,115,105,122,101,0,115,108,105,99,101,0,117,110,115,104,105,102,116,0,95,95,97,114,121,95,101,113,0,95,95,97,114,121,95,99,109,112,0,95,95,97,114,121,95,105,110,100,101,120,0,124,105,0,110,101,103,97,116,105,118,101,32,97,114,114,97,121,32,115,105,122,101,0,124,83,33,0,65,0,105,0,97,0,111,111,124,111,0,105,42,0,111,124,105,0,110,101,103,97,116,105,118,101,32,97,114,103,117,109,101,110,116,0,35,0,40,117,110,107,110,111,119,110,41,0,58,105,110,32,0,2,8,32,128,1,4,16,64,3,12,48,192,95,95,111,117,116,101,114,95,95,0,95,95,99,108,97,115,115,105,100,95,95,0,37,83,32,105,115,32,110,111,116,32,97,32,99,108,97,115,115,47,109,111,100,117,108,101,0,110,111,32,115,117,112,101,114,32,99,108,97,115,115,32,102,111,114,32,39,37,83,39,44,32,79,98,106,101,99,116,32,97,115,115,117,109,101,100,0,115,117,112,101,114,99,108,97,115,115,32,109,105,115,109,97,116,99,104,32,102,111,114,32,67,108,97,115,115,32,37,83,32,40,37,83,32,110,111,116,32,37,83,41,0,115,117,112,101,114,99,108,97,115,115,32,109,117,115,116,32,98,101,32,97,32,67,108,97,115,115,32,40,37,83,32,103,105,118,101,110,41,0,99,97,110,39,116,32,109,97,107,101,32,115,117,98,99,108,97,115,115,32,111,102,32,115,105,110,103,108,101,116,111,110,32,99,108,97,115,115,0,99,97,110,39,116,32,109,97,107,101,32,115,117,98,99,108,97,115,115,32,111,102,32,67,108,97,115,115,0,105,110,104,101,114,105,116,101,100,0,78,111,116,73,109,112,108,101,109,101,110,116,101,100,69,114,114,111,114,0,119,114,111,110,103,32,110,117,109,98,101,114,32,111,102,32,97,114,103,117,109,101,110,116,115,0,37,83,32,105,115,32,110,111,116,32,99,108,97,115,115,47,109,111,100,117,108,101,0,82,97,110,103,101,69,114,114,111,114,0,102,108,111,97,116,32,116,111,111,32,98,105,103,32,102,111,114,32,105,110,116,0,110,111,32,105,109,112,108,105,99,105,116,32,99,111,110,118,101,114,115,105,111,110,32,111,102,32,83,116,114,105,110,103,32,105,110,116,111,32,73,110,116,101,103,101,114,0,105,110,118,97,108,105,100,32,97,114,103,117,109,101,110,116,32,115,112,101,99,105,102,105,101,114,32,37,83,0,72,97,115,104,0,116,111,95,104,97,115,104,0,101,120,112,101,99,116,101,100,32,37,83,0,65,114,114,97,121,0,116,111,95,97,114,121,0,83,116,114,105,110,103,0,116,111,95,115,116,114,0,99,121,99,108,105,99,32,105,110,99,108,117,100,101,32,100,101,116,101,99,116,101,100,0,99,121,99,108,105,99,32,112,114,101,112,101,110,100,32,100,101,116,101,99,116,101,100,0,99,97,110,39,116,32,100,101,102,105,110,101,32,115,105,110,103,108,101,116,111,110,0,117,110,100,101,102,105,110,101,100,32,109,101,116,104,111,100,32,39,37,83,39,32,102,111,114,32,99,108,97,115,115,32,37,83,0,42,38,0,99,97,110,39,116,32,99,114,101,97,116,101,32,105,110,115,116,97,110,99,101,32,111,102,32,115,105,110,103,108,101,116,111,110,32,99,108,97,115,115,0,117,110,100,101,102,105,110,101,100,32,109,101,116,104,111,100,32,39,37,83,39,32,102,111,114,32,37,83,0,95,95,99,108,97,115,115,112,97,116,104,95,95,0,35,60,67,108,97,115,115,58,0,62,0,58,58,0,117,110,100,101,102,105,110,101,100,32,109,101,116,104,111,100,32,39,37,83,39,32,102,111,114,32,99,108,97,115,115,32,39,37,83,39,0,66,97,115,105,99,79,98,106,101,99,116,0,79,98,106,101,99,116,0,77,111,100,117,108,101,0,67,108,97,115,115,0,80,114,111,99,0,33,0,109,101,116,104,111,100,95,109,105,115,115,105,110,103,0,115,117,112,101,114,99,108,97,115,115,0,99,108,97,115,115,95,118,97,114,105,97,98,108,101,95,100,101,102,105,110,101,100,63,0,99,108,97,115,115,95,118,97,114,105,97,98,108,101,95,103,101,116,0,99,108,97,115,115,95,118,97,114,105,97,98,108,101,95,115,101,116,0,112,114,101,112,101,110,100,0,112,114,101,112,101,110,100,101,100,0,112,114,101,112,101,110,100,95,102,101,97,116,117,114,101,115,0,105,110,99,108,117,100,101,0,97,112,112,101,110,100,95,102,101,97,116,117,114,101,115,0,99,108,97,115,115,95,101,118,97,108,0,105,110,99,108,117,100,101,100,0,105,110,99,108,117,100,101,100,95,109,111,100,117,108,101,115,0,105,110,115,116,97,110,99,101,95,109,101,116,104,111,100,115,0,109,101,116,104,111,100,95,100,101,102,105,110,101,100,63,0,109,111,100,117,108,101,95,101,118,97,108,0,109,111,100,117,108,101,95,102,117,110,99,116,105,111,110,0,112,114,105,118,97,116,101,0,112,114,111,116,101,99,116,101,100,0,112,117,98,108,105,99,0,114,101,109,111,118,101,95,99,108,97,115,115,95,118,97,114,105,97,98,108,101,0,114,101,109,111,118,101,95,109,101,116,104,111,100,0,109,101,116,104,111,100,95,114,101,109,111,118,101,100,0,97,116,116,114,95,114,101,97,100,101,114,0,97,116,116,114,95,119,114,105,116,101,114,0,97,110,99,101,115,116,111,114,115,0,99,111,110,115,116,95,100,101,102,105,110,101,100,63,0,99,111,110,115,116,95,103,101,116,0,99,111,110,115,116,95,115,101,116,0,99,111,110,115,116,97,110,116,115,0,114,101,109,111,118,101,95,99,111,110,115,116,0,99,111,110,115,116,95,109,105,115,115,105,110,103,0,100,101,102,105,110,101,95,109,101,116,104,111,100,0,99,108,97,115,115,95,118,97,114,105,97,98,108,101,115,0,77,111,100,117,108,101,46,99,111,110,115,116,97,110,116,115,32,110,111,116,32,105,109,112,108,101,109,101,110,116,101,100,0,117,110,105,110,105,116,105,97,108,105,122,101,100,32,99,111,110,115,116,97,110,116,32,37,83,58,58,37,83,0,117,110,105,110,105,116,105,97,108,105,122,101,100,32,99,111,110,115,116,97,110,116,32,37,83,0,99,111,110,115,116,97,110,116,32,37,83,32,110,111,116,32,100,101,102,105,110,101,100,0,119,114,111,110,103,32,99,111,110,115,116,97,110,116,32,110,97,109,101,32,37,83,0,110,124,98,0,110,110,0,35,60,77,111,100,117,108,101,58,0,35,60,63,63,63,63,63,63,58,0,64,0,61,0,109,101,116,104,111,100,32,39,37,83,39,32,110,111,116,32,100,101,102,105,110,101,100,32,105,110,32,37,83,0,99,97,110,110,111,116,32,114,101,109,111,118,101,32,37,83,32,102,111,114,32,37,83,0,99,108,97,115,115,32,118,97,114,105,97,98,108,101,32,37,83,32,110,111,116,32,100,101,102,105,110,101,100,32,102,111,114,32,37,83,0,39,37,83,39,32,105,115,32,110,111,116,32,97,108,108,111,119,101,100,32,97,115,32,97,32,99,108,97,115,115,32,118,97,114,105,97,98,108,101,32,110,97,109,101,0,124,38,0,124,67,38,0,110,42,0,105,114,101,112,32,37,112,32,110,114,101,103,115,61,37,100,32,110,108,111,99,97,108,115,61,37,100,32,112,111,111,108,115,61,37,100,32,115,121,109,115,61,37,100,32,114,101,112,115,61,37,100,10,0,102,105,108,101,58,32,37,115,10,0,32,32,32,32,32,32,0,37,53,100,32,0,37,48,51,100,32,0,79,80,95,78,79,80,10,0,79,80,95,77,79,86,69,9,82,37,100,9,82,37,100,9,0,79,80,95,76,79,65,68,76,9,82,37,100,9,76,40,37,100,41,9,59,32,37,115,0,79,80,95,76,79,65,68,73,9,82,37,100,9,37,100,9,0,79,80,95,76,79,65,68,83,89,77,9,82,37,100,9,58,37,115,0,79,80,95,76,79,65,68,78,73,76,9,82,37,100,9,9,0,79,80,95,76,79,65,68,83,69,76,70,9,82,37,100,9,9,0,79,80,95,76,79,65,68,84,9,82,37,100,9,9,0,79,80,95,76,79,65,68,70,9,82,37,100,9,9,0,79,80,95,71,69,84,71,76,79,66,65,76,9,82,37,100,9,58,37,115,0,79,80,95,83,69,84,71,76,79,66,65,76,9,58,37,115,9,82,37,100,9,0,79,80,95,71,69,84,67,79,78,83,84,9,82,37,100,9,58,37,115,0,79,80,95,83,69,84,67,79,78,83,84,9,58,37,115,9,82,37,100,9,0,79,80,95,71,69,84,77,67,78,83,84,9,82,37,100,9,82,37,100,58,58,37,115,0,79,80,95,83,69,84,77,67,78,83,84,9,82,37,100,58,58,37,115,9,82,37,100,0,79,80,95,71,69,84,73,86,9,82,37,100,9,37,115,0,79,80,95,83,69,84,73,86,9,37,115,9,82,37,100,0,79,80,95,71,69,84,85,80,86,65,82,9,82,37,100,9,37,100,9,37,100,0,79,80,95,83,69,84,85,80,86,65,82,9,82,37,100,9,37,100,9,37,100,0,79,80,95,71,69,84,67,86,9,82,37,100,9,37,115,0,79,80,95,83,69,84,67,86,9,37,115,9,82,37,100,0,79,80,95,74,77,80,9,37,48,51,100,10,0,79,80,95,74,77,80,73,70,9,82,37,100,9,37,48,51,100,10,0,79,80,95,74,77,80,78,79,84,9,82,37,100,9,37,48,51,100,10,0,79,80,95,83,69,78,68,9,82,37,100,9,58,37,115,9,37,100,10,0,79,80,95,83,69,78,68,66,9,82,37,100,9,58,37,115,9,37,100,10,0,79,80,95,84,65,73,76,67,65,76,76,9,82,37,100,9,58,37,115,9,37,100,10,0,79,80,95,83,85,80,69,82,9,82,37,100,9,37,100,10,0,79,80,95,65,82,71,65,82,89,9,82,37,100,9,37,100,58,37,100,58,37,100,58,37,100,0,79,80,95,69,78,84,69,82,9,37,100,58,37,100,58,37,100,58,37,100,58,37,100,58,37,100,58,37,100,10,0,79,80,95,82,69,84,85,82,78,9,82,37,100,0,9,114,101,116,117,114,110,9,0,9,98,114,101,97,107,9,0,9,98,114,111,107,101,110,9,0,79,80,95,66,76,75,80,85,83,72,9,82,37,100,9,37,100,58,37,100,58,37,100,58,37,100,0,79,80,95,76,65,77,66,68,65,9,82,37,100,9,73,40,37,43,100,41,9,37,100,0,79,80,95,82,65,78,71,69,9,82,37,100,9,82,37,100,9,37,100,0,79,80,95,77,69,84,72,79,68,9,82,37,100,9,58,37,115,0,79,80,95,65,68,68,9,82,37,100,9,58,37,115,9,37,100,10,0,79,80,95,65,68,68,73,9,82,37,100,9,58,37,115,9,37,100,10,0,79,80,95,83,85,66,9,82,37,100,9,58,37,115,9,37,100,10,0,79,80,95,83,85,66,73,9,82,37,100,9,58,37,115,9,37,100,10,0,79,80,95,77,85,76,9,82,37,100,9,58,37,115,9,37,100,10,0,79,80,95,68,73,86,9,82,37,100,9,58,37,115,9,37,100,10,0,79,80,95,76,84,9,82,37,100,9,58,37,115,9,37,100,10,0,79,80,95,76,69,9,82,37,100,9,58,37,115,9,37,100,10,0,79,80,95,71,84,9,82,37,100,9,58,37,115,9,37,100,10,0,79,80,95,71,69,9,82,37,100,9,58,37,115,9,37,100,10,0,79,80,95,69,81,9,82,37,100,9,58,37,115,9,37,100,10,0,79,80,95,83,84,79,80,10,0,79,80,95,65,82,82,65,89,9,82,37,100,9,82,37,100,9,37,100,0,79,80,95,65,82,89,67,65,84,9,82,37,100,9,82,37,100,9,0,79,80,95,65,82,89,80,85,83,72,9,82,37,100,9,82,37,100,9,0,79,80,95,65,82,69,70,9,82,37,100,9,82,37,100,9,37,100,0,79,80,95,65,80,79,83,84,9,82,37,100,9,37,100,9,37,100,0,79,80,95,83,84,82,73,78,71,9,82,37,100,9,76,40,37,100,41,9,59,32,37,115,0,79,80,95,83,84,82,67,65,84,9,82,37,100,9,82,37,100,9,0,79,80,95,72,65,83,72,9,82,37,100,9,82,37,100,9,37,100,0,79,80,95,79,67,76,65,83,83,9,82,37,100,9,9,0,79,80,95,67,76,65,83,83,9,82,37,100,9,58,37,115,0,79,80,95,77,79,68,85,76,69,9,82,37,100,9,58,37,115,0,79,80,95,69,88,69,67,9,82,37,100,9,73,40,37,43,100,41,0,79,80,95,83,67,76,65,83,83,9,82,37,100,9,82,37,100,9,0,79,80,95,84,67,76,65,83,83,9,82,37,100,9,9,0,79,80,95,69,82,82,9,37,115,10,0,79,80,95,69,80,85,83,72,9,58,73,40,37,43,100,41,10,0,79,80,95,79,78,69,82,82,9,37,48,51,100,10,0,79,80,95,82,69,83,67,85,69,9,82,37,100,9,9,0,79,80,95,82,65,73,83,69,9,82,37,100,9,9,0,79,80,95,80,79,80,69,82,82,9,37,100,9,9,0,79,80,95,69,80,79,80,9,37,100,10,0,79,80,95,117,110,107,110,111,119,110,32,37,100,9,37,100,9,37,100,9,37,100,10,0,10,0,9,59,32,0,32,0,82,37,100,58,37,115,0,99,105,105,100,120,0,102,105,108,101,0,108,105,110,101,0,78,97,109,101,69,114,114,111,114,0,119,97,114,110,105,110,103,58,32,0,98,117,103,58,32,0,101,120,99,101,112,116,105,111,110,0,101,120,99,101,112,116,105,111,110,32,99,108,97,115,115,47,111,98,106,101,99,116,32,101,120,112,101,99,116,101,100,0,119,114,111,110,103,32,110,117,109,98,101,114,32,111,102,32,97,114,103,117,109,101,110,116,115,32,40,37,83,32,102,111,114,32,48,46,46,51,41,0,101,120,99,101,112,116,105,111,110,32,111,98,106,101,99,116,32,101,120,112,101,99,116,101,100,0,115,101,116,95,98,97,99,107,116,114,97,99,101,0,78,111,77,101,116,104,111,100,69,114,114,111,114,0,110,101,119,0,69,120,99,101,112,116,105,111,110,0,109,101,115,115,97,103,101,0,98,97,99,107,116,114,97,99,101,0,79,117,116,32,111,102,32,109,101,109,111,114,121,0,83,99,114,105,112,116,69,114,114,111,114,0,83,121,110,116,97,120,69,114,114,111,114,0,83,121,115,116,101,109,83,116,97,99,107,69,114,114,111,114,0,109,101,115,103,0,58,0,58,32,0,32,40,0,41,0,124,111,0,119,114,111,110,103,32,97,114,103,117,109,101,110,116,32,116,121,112,101,32,37,83,32,40,101,120,112,101,99,116,101,100,32,37,83,41,0,117,110,105,110,105,116,105,97,108,105,122,101,100,32,37,83,32,40,101,120,112,101,99,116,101,100,32,37,83,41,0,99,97,110,39,116,32,99,108,111,110,101,32,37,83,0,99,97,110,39,116,32,99,108,111,110,101,32,115,105,110,103,108,101,116,111,110,32,99,108,97,115,115,0,99,97,110,39,116,32,100,117,112,32,37,83,0,99,97,110,39,116,32,100,117,112,32,115,105,110,103,108,101,116,111,110,32,99,108,97,115,115,0,95,95,97,116,116,97,99,104,101,100,95,95,0,2,8,32,128,1,4,16,64,3,12,48,192,124,111,111,0,82,117,110,116,105,109,101,69,114,114,111,114,0,108,97,115,116,112,99,0,98,108,111,99,107,95,103,105,118,101,110,63,0,103,108,111,98,97,108,95,118,97,114,105,97,98,108,101,115,0,105,116,101,114,97,116,111,114,63,0,108,111,99,97,108,95,118,97,114,105,97,98,108,101,115,0,114,97,105,115,101,0,115,105,110,103,108,101,116,111,110,95,99,108,97,115,115,0,33,61,0,95,95,105,100,95,95,0,95,95,115,101,110,100,95,95,0,99,108,97,115,115,0,99,108,111,110,101,0,100,117,112,0,101,113,117,97,108,63,0,101,120,116,101,110,100,0,104,97,115,104,0,105,110,115,116,97,110,99,101,95,101,118,97,108,0,105,110,115,116,97,110,99,101,95,111,102,63,0,105,110,115,116,97,110,99,101,95,118,97,114,105,97,98,108,101,95,100,101,102,105,110,101,100,63,0,105,110,115,116,97,110,99,101,95,118,97,114,105,97,98,108,101,95,103,101,116,0,105,110,115,116,97,110,99,101,95,118,97,114,105,97,98,108,101,95,115,101,116,0,105,110,115,116,97,110,99,101,95,118,97,114,105,97,98,108,101,115,0,105,115,95,97,63,0,107,105,110,100,95,111,102,63,0,109,101,116,104,111,100,115,0,110,105,108,63,0,111,98,106,101,99,116,95,105,100,0,112,114,105,118,97,116,101,95,109,101,116,104,111,100,115,0,112,114,111,116,101,99,116,101,100,95,109,101,116,104,111,100,115,0,112,117,98,108,105,99,95,109,101,116,104,111,100,115,0,114,101,109,111,118,101,95,105,110,115,116,97,110,99,101,95,118,97,114,105,97,98,108,101,0,114,101,115,112,111,110,100,95,116,111,63,0,115,101,110,100,0,115,105,110,103,108,101,116,111,110,95,109,101,116,104,111,100,115,0,100,101,102,105,110,101,95,115,105,110,103,108,101,116,111,110,95,109,101,116,104,111,100,0,110,38,0,110,111,32,98,108,111,99,107,32,103,105,118,101,110,0,124,98,0,111,124,98,0,37,83,32,105,115,32,110,111,116,32,97,32,115,121,109,98,111,108,0,114,101,115,112,111,110,100,95,116,111,95,109,105,115,115,105,110,103,63,0,110,0,105,110,115,116,97,110,99,101,32,118,97,114,105,97,98,108,101,32,37,83,32,110,111,116,32,100,101,102,105,110,101,100,0,67,0,110,111,0,105,110,105,116,105,97,108,105,122,101,95,99,111,112,121,32,115,104,111,117,108,100,32,116,97,107,101,32,115,97,109,101,32,99,108,97,115,115,32,111,98,106,101,99,116,0,42,0,119,114,111,110,103,32,110,117,109,98,101,114,32,111,102,32,97,114,103,117,109,101,110,116,115,32,40,97,116,32,108,101,97,115,116,32,49,41,0,101,120,116,101,110,100,95,111,98,106,101,99,116,0,101,120,116,101,110,100,101,100,0,67,97,110,39,116,32,103,101,116,32,99,102,117,110,99,32,101,110,118,32,102,114,111,109,32,110,111,110,45,99,102,117,110,99,32,112,114,111,99,46,0,67,97,110,39,116,32,103,101,116,32,99,102,117,110,99,32,101,110,118,32,102,114,111,109,32,99,102,117,110,99,32,80,114,111,99,32,119,105,116,104,111,117,116,32,82,69,110,118,46,0,73,110,100,101,120,69,114,114,111,114,0,69,110,118,32,105,110,100,101,120,32,111,117,116,32,111,102,32,114,97,110,103,101,58,32,37,83,32,40,101,120,112,101,99,116,101,100,58,32,48,32,60,61,32,105,110,100,101,120,32,60,32,37,83,41,0,97,114,105,116,121,0,91,93,0,108,97,109,98,100,97,0,38,0,116,114,105,101,100,32,116,111,32,99,114,101,97,116,101,32,80,114,111,99,32,111,98,106,101,99,116,32,119,105,116,104,111,117,116,32,97,32,98,108,111,99,107,0,110,111,116,32,97,32,112,114,111,99,0,82,97,110,103,101,0,60,61,62,0,65,114,103,117,109,101,110,116,69,114,114,111,114,0,98,97,100,32,118,97,108,117,101,32,102,111,114,32,114,97,110,103,101,0,111,111,124,98,0,111,0,61,61,0,84,121,112,101,69,114,114,111,114,0,98,101,103,105,110,0,101,110,100,0,101,120,99,108,117,100,101,95,101,110,100,63,0,102,105,114,115,116,0,105,110,99,108,117,100,101,63,0,105,110,105,116,105,97,108,105,122,101,0,108,97,115,116,0,109,101,109,98,101,114,63,0,116,111,95,115,0,105,110,115,112,101,99,116,0,101,113,108,63,0,105,110,105,116,105,97,108,105,122,101,95,99,111,112,121,0,119,114,111,110,103,32,97,114,103,117,109,101,110,116,32,99,108,97,115,115,0,46,46,46,0,49,46,50,46,48,0,49,46,57,0,82,85,66,89,95,86,69,82,83,73,79,78,0,109,114,117,98,121,0,82,85,66,89,95,69,78,71,73,78,69,0,82,85,66,89,95,69,78,71,73,78,69,95,86,69,82,83,73,79,78,0,77,82,85,66,89,95,86,69,82,83,73,79,78,0,77,82,85,66,89,95,82,69,76,69,65,83,69,95,78,79,0,50,48,49,53,45,49,49,45,49,55,0,77,82,85,66,89,95,82,69,76,69,65,83,69,95,68,65,84,69,0,109,114,117,98,121,32,49,46,50,46,48,32,40,50,48,49,53,45,49,49,45,49,55,41,32,0,77,82,85,66,89,95,68,69,83,67,82,73,80,84,73,79,78,0,109,114,117,98,121,32,45,32,67,111,112,121,114,105,103,104,116,32,40,99,41,32,50,48,49,48,45,50,48,49,53,32,109,114,117,98,121,32,100,101,118,101,108,111,112,101,114,115,0,77,82,85,66,89,95,67,79,80,89,82,73,71,72,84,0,83,116,97,110,100,97,114,100,69,114,114,111,114,0,95,95,99,97,115,101,95,101,113,113,0,61,61,61,0,95,95,117,112,100,97,116,101,0,99,97,108,108,0,117,110,101,120,112,101,99,116,101,100,32,110,101,120,116,0,117,110,101,120,112,101,99,116,101,100,32,114,101,100,111,0,117,110,101,120,112,101,99,116,101,100,32,114,101,116,114,121,0,36,0,45,0,75,101,114,110,101,108,0,96,0,82,101,103,101,120,112,0,99,111,109,112,105,108,101,0,97,108,105,97,115,95,109,101,116,104,111,100,0,117,110,100,101,102,95,109,101,116,104,111,100,0,105,110,116,101,114,110,0,109,114,98,95,114,101,97,108,108,111,99,0,99,111,100,101,103,101,110,32,101,114,114,111,114,58,37,115,58,37,100,58,32,37,115,10,0,99,111,100,101,103,101,110,32,101,114,114,111,114,58,32,37,115,10,0,109,97,108,102,111,114,109,101,100,32,114,101,97,100,105,110,116,32,105,110,112,117,116,0,117,110,101,120,112,101,99,116,101,100,32,98,114,101,97,107,0,116,111,111,32,99,111,109,112,108,101,120,32,101,120,112,114,101,115,115,105,111,110,0,117,110,101,120,112,101,99,116,101,100,32,115,99,111,112,101,0,101,97,99,104,0,109,114,98,95,109,97,108,108,111,99,0,117,110,107,110,111,119,110,32,108,104,115,32,37,100,10,0,112,111,111,108,32,109,101,109,111,114,121,32,97,108,108,111,99,97,116,105,111,110,0,116,111,111,32,109,97,110,121,32,115,121,109,98,111,108,115,32,40,109,97,120,32,50,53,54,41,0,98,117,103,58,32,100,105,115,112,97,116,99,104,32,111,110,32,110,111,110,32,74,77,80,32,111,112,10,0,67,111,109,112,97,114,97,98,108,101,0,69,110,117,109,101,114,97,98,108,101,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,1,2,3,4,5,6,7,8,9,255,255,255,255,255,255,255,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,255,255,255,255,255,255,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,1,2,4,7,3,6,5,0,17,0,10,0,17,17,17,0,0,0,0,5,0,0,0,0,0,0,9,0,0,0,0,11,0,0,0,0,0,0,0,0,17,0,15,10,17,17,17,3,10,7,0,1,19,9,11,11,0,0,9,6,11,0,0,11,0,6,17,0,0,0,17,17,17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,17,0,10,10,17,17,17,0,10,0,0,2,0,9,11,0,0,0,9,0,11,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,12,0,0,0,0,9,12,0,0,0,0,0,12,0,0,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,0,0,0,0,0,0,0,0,0,0,0,13,0,0,0,4,13,0,0,0,0,9,14,0,0,0,0,0,14,0,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,15,0,0,0,0,15,0,0,0,0,9,16,0,0,0,0,0,16,0,0,16,0,0,18,0,0,0,18,18,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,0,0,0,18,18,18,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,0,0,0,10,0,0,0,0,10,0,0,0,0,9,11,0,0,0,0,0,11,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,12,0,0,0,0,9,12,0,0,0,0,0,12,0,0,12,0,0,45,43,32,32,32,48,88,48,120,0,40,110,117,108,108,41,0,45,48,88,43,48,88,32,48,88,45,48,120,43,48,120,32,48,120,0,105,110,102,0,73,78,70,0,78,65,78,0,48,49,50,51,52,53,54,55,56,57,65,66,67,68,69,70,46,0,84,33,34,25,13,1,2,3,17,75,28,12,16,4,11,29,18,30,39,104,110,111,112,113,98,32,5,6,15,19,20,21,26,8,22,7,40,36,23,24,9,10,14,27,31,37,35,131,130,125,38,42,43,60,61,62,63,67,71,74,77,88,89,90,91,92,93,94,95,96,97,99,100,101,102,103,105,106,107,108,114,115,116,121,122,123,124,0,73,108,108,101,103,97,108,32,98,121,116,101,32,115,101,113,117,101,110,99,101,0,68,111,109,97,105,110,32,101,114,114,111,114,0,82,101,115,117,108,116,32,110,111,116,32,114,101,112,114,101,115,101,110,116,97,98,108,101,0,78,111,116,32,97,32,116,116,121,0,80,101,114,109,105,115,115,105,111,110,32,100,101,110,105,101,100,0,79,112,101,114,97,116,105,111,110,32,110,111,116,32,112,101,114,109,105,116,116,101,100,0,78,111,32,115,117,99,104,32,102,105,108,101,32,111,114,32,100,105,114,101,99,116,111,114,121,0,78,111,32,115,117,99,104,32,112,114,111,99,101,115,115,0,70,105,108,101,32,101,120,105,115,116,115,0,86,97,108,117,101,32,116,111,111,32,108,97,114,103,101,32,102,111,114,32,100,97,116,97,32,116,121,112,101,0,78,111,32,115,112,97,99,101,32,108,101,102,116,32,111,110,32,100,101,118,105,99,101,0,79,117,116,32,111,102,32,109,101,109,111,114,121,0,82,101,115,111,117,114,99,101,32,98,117,115,121,0,73,110,116,101,114,114,117,112,116,101,100,32,115,121,115,116,101,109,32,99,97,108,108,0,82,101,115,111,117,114,99,101,32,116,101,109,112,111,114,97,114,105,108,121,32,117,110,97,118,97,105,108,97,98,108,101,0,73,110,118,97,108,105,100,32,115,101,101,107,0,67,114,111,115,115,45,100,101,118,105,99,101,32,108,105,110,107,0,82,101,97,100,45,111,110,108,121,32,102,105,108,101,32,115,121,115,116,101,109,0,68,105,114,101,99,116,111,114,121,32,110,111,116,32,101,109,112,116,121,0,67,111,110,110,101,99,116,105,111,110,32,114,101,115,101,116,32,98,121,32,112,101,101,114,0,79,112,101,114,97,116,105,111,110,32,116,105,109,101,100,32,111,117,116,0,67,111,110,110,101,99,116,105,111,110,32,114,101,102,117,115,101,100,0,72,111,115,116,32,105,115,32,100,111,119,110,0,72,111,115,116,32,105,115,32,117,110,114,101,97,99,104,97,98,108,101,0,65,100,100,114,101,115,115,32,105,110,32,117,115,101,0,66,114,111,107,101,110,32,112,105,112,101,0,73,47,79,32,101,114,114,111,114,0,78,111,32,115,117,99,104,32,100,101,118,105,99,101,32,111,114,32,97,100,100,114,101,115,115,0,66,108,111,99,107,32,100,101,118,105,99,101,32,114,101,113,117,105,114,101,100,0,78,111,32,115,117,99,104,32,100,101,118,105,99,101,0,78,111,116,32,97,32,100,105,114,101,99,116,111,114,121,0,73,115,32,97,32,100,105,114,101,99,116,111,114,121,0,84,101,120,116,32,102,105,108,101,32,98,117,115,121,0,69,120,101,99,32,102,111,114,109,97,116,32,101,114,114,111,114,0,73,110,118,97,108,105,100,32,97,114,103,117,109,101,110,116,0,65,114,103,117,109,101,110,116,32,108,105,115,116,32,116,111,111,32,108,111,110,103,0,83,121,109,98,111,108,105,99,32,108,105,110,107,32,108,111,111,112,0,70,105,108,101,110,97,109,101,32,116,111,111,32,108,111,110,103,0,84,111,111,32,109,97,110,121,32,111,112,101,110,32,102,105,108,101,115,32,105,110,32,115,121,115,116,101,109,0,78,111,32,102,105,108,101,32,100,101,115,99,114,105,112,116,111,114,115,32,97,118,97,105,108,97,98,108,101,0,66,97,100,32,102,105,108,101,32,100,101,115,99,114,105,112,116,111,114,0,78,111,32,99,104,105,108,100,32,112,114,111,99,101,115,115,0,66,97,100,32,97,100,100,114,101,115,115,0,70,105,108,101,32,116,111,111],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE+61458),allocate([32,108,97,114,103,101,0,84,111,111,32,109,97,110,121,32,108,105,110,107,115,0,78,111,32,108,111,99,107,115,32,97,118,97,105,108,97,98,108,101,0,82,101,115,111,117,114,99,101,32,100,101,97,100,108,111,99,107,32,119,111,117,108,100,32,111,99,99,117,114,0,83,116,97,116,101,32,110,111,116,32,114,101,99,111,118,101,114,97,98,108,101,0,80,114,101,118,105,111,117,115,32,111,119,110,101,114,32,100,105,101,100,0,79,112,101,114,97,116,105,111,110,32,99,97,110,99,101,108,101,100,0,70,117,110,99,116,105,111,110,32,110,111,116,32,105,109,112,108,101,109,101,110,116,101,100,0,78,111,32,109,101,115,115,97,103,101,32,111,102,32,100,101,115,105,114,101,100,32,116,121,112,101,0,73,100,101,110,116,105,102,105,101,114,32,114,101,109,111,118,101,100,0,68,101,118,105,99,101,32,110,111,116,32,97,32,115,116,114,101,97,109,0,78,111,32,100,97,116,97,32,97,118,97,105,108,97,98,108,101,0,68,101,118,105,99,101,32,116,105,109,101,111,117,116,0,79,117,116,32,111,102,32,115,116,114,101,97,109,115,32,114,101,115,111,117,114,99,101,115,0,76,105,110,107,32,104,97,115,32,98,101,101,110,32,115,101,118,101,114,101,100,0,80,114,111,116,111,99,111,108,32,101,114,114,111,114,0,66,97,100,32,109,101,115,115,97,103,101,0,70,105,108,101,32,100,101,115,99,114,105,112,116,111,114,32,105,110,32,98,97,100,32,115,116,97,116,101,0,78,111,116,32,97,32,115,111,99,107,101,116,0,68,101,115,116,105,110,97,116,105,111,110,32,97,100,100,114,101,115,115,32,114,101,113,117,105,114,101,100,0,77,101,115,115,97,103,101,32,116,111,111,32,108,97,114,103,101,0,80,114,111,116,111,99,111,108,32,119,114,111,110,103,32,116,121,112,101,32,102,111,114,32,115,111,99,107,101,116,0,80,114,111,116,111,99,111,108,32,110,111,116,32,97,118,97,105,108,97,98,108,101,0,80,114,111,116,111,99,111,108,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,83,111,99,107,101,116,32,116,121,112,101,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,78,111,116,32,115,117,112,112,111,114,116,101,100,0,80,114,111,116,111,99,111,108,32,102,97,109,105,108,121,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,65,100,100,114,101,115,115,32,102,97,109,105,108,121,32,110,111,116,32,115,117,112,112,111,114,116,101,100,32,98,121,32,112,114,111,116,111,99,111,108,0,65,100,100,114,101,115,115,32,110,111,116,32,97,118,97,105,108,97,98,108,101,0,78,101,116,119,111,114,107,32,105,115,32,100,111,119,110,0,78,101,116,119,111,114,107,32,117,110,114,101,97,99,104,97,98,108,101,0,67,111,110,110,101,99,116,105,111,110,32,114,101,115,101,116,32,98,121,32,110,101,116,119,111,114,107,0,67,111,110,110,101,99,116,105,111,110,32,97,98,111,114,116,101,100,0,78,111,32,98,117,102,102,101,114,32,115,112,97,99,101,32,97,118,97,105,108,97,98,108,101,0,83,111,99,107,101,116,32,105,115,32,99,111,110,110,101,99,116,101,100,0,83,111,99,107,101,116,32,110,111,116,32,99,111,110,110,101,99,116,101,100,0,67,97,110,110,111,116,32,115,101,110,100,32,97,102,116,101,114,32,115,111,99,107,101,116,32,115,104,117,116,100,111,119,110,0,79,112,101,114,97,116,105,111,110,32,97,108,114,101,97,100,121,32,105,110,32,112,114,111,103,114,101,115,115,0,79,112,101,114,97,116,105,111,110,32,105,110,32,112,114,111,103,114,101,115,115,0,83,116,97,108,101,32,102,105,108,101,32,104,97,110,100,108,101,0,82,101,109,111,116,101,32,73,47,79,32,101,114,114,111,114,0,81,117,111,116,97,32,101,120,99,101,101,100,101,100,0,78,111,32,109,101,100,105,117,109,32,102,111,117,110,100,0,87,114,111,110,103,32,109,101,100,105,117,109,32,116,121,112,101,0,78,111,32,101,114,114,111,114,32,105,110,102,111,114,109,97,116,105,111,110,0,0,105,110,102,105,110,105,116,121,0,110,97,110,0,114,119,97,0],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE+71698);var tempDoublePtr=STATICTOP;STATICTOP+=16,assert(tempDoublePtr%8==0),Module._i64Subtract=_i64Subtract,Module._i64Add=_i64Add,Module._memset=_memset,Module._bitshift64Lshr=_bitshift64Lshr,Module._realloc=_realloc,Module._saveSetjmp=_saveSetjmp,Module._testSetjmp=_testSetjmp,Module._bitshift64Shl=_bitshift64Shl;var ERRNO_CODES={EPERM:1,ENOENT:2,ESRCH:3,EINTR:4,EIO:5,ENXIO:6,E2BIG:7,ENOEXEC:8,EBADF:9,ECHILD:10,EAGAIN:11,EWOULDBLOCK:11,ENOMEM:12,EACCES:13,EFAULT:14,ENOTBLK:15,EBUSY:16,EEXIST:17,EXDEV:18,ENODEV:19,ENOTDIR:20,EISDIR:21,EINVAL:22,ENFILE:23,EMFILE:24,ENOTTY:25,ETXTBSY:26,EFBIG:27,ENOSPC:28,ESPIPE:29,EROFS:30,EMLINK:31,EPIPE:32,EDOM:33,ERANGE:34,ENOMSG:42,EIDRM:43,ECHRNG:44,EL2NSYNC:45,EL3HLT:46,EL3RST:47,ELNRNG:48,EUNATCH:49,ENOCSI:50,EL2HLT:51,EDEADLK:35,ENOLCK:37,EBADE:52,EBADR:53,EXFULL:54,ENOANO:55,EBADRQC:56,EBADSLT:57,EDEADLOCK:35,EBFONT:59,ENOSTR:60,ENODATA:61,ETIME:62,ENOSR:63,ENONET:64,ENOPKG:65,EREMOTE:66,ENOLINK:67,EADV:68,ESRMNT:69,ECOMM:70,EPROTO:71,EMULTIHOP:72,EDOTDOT:73,EBADMSG:74,ENOTUNIQ:76,EBADFD:77,EREMCHG:78,ELIBACC:79,ELIBBAD:80,ELIBSCN:81,ELIBMAX:82,ELIBEXEC:83,ENOSYS:38,ENOTEMPTY:39,ENAMETOOLONG:36,ELOOP:40,EOPNOTSUPP:95,EPFNOSUPPORT:96,ECONNRESET:104,ENOBUFS:105,EAFNOSUPPORT:97,EPROTOTYPE:91,ENOTSOCK:88,ENOPROTOOPT:92,ESHUTDOWN:108,ECONNREFUSED:111,EADDRINUSE:98,ECONNABORTED:103,ENETUNREACH:101,ENETDOWN:100,ETIMEDOUT:110,EHOSTDOWN:112,EHOSTUNREACH:113,EINPROGRESS:115,EALREADY:114,EDESTADDRREQ:89,EMSGSIZE:90,EPROTONOSUPPORT:93,ESOCKTNOSUPPORT:94,EADDRNOTAVAIL:99,ENETRESET:102,EISCONN:106,ENOTCONN:107,ETOOMANYREFS:109,EUSERS:87,EDQUOT:122,ESTALE:116,ENOTSUP:95,ENOMEDIUM:123,EILSEQ:84,EOVERFLOW:75,ECANCELED:125,ENOTRECOVERABLE:131,EOWNERDEAD:130,ESTRPIPE:86},ERRNO_MESSAGES={0:"Success",1:"Not super-user",2:"No such file or directory",3:"No such process",4:"Interrupted system call",5:"I/O error",6:"No such device or address",7:"Arg list too long",8:"Exec format error",9:"Bad file number",10:"No children",11:"No more processes",12:"Not enough core",13:"Permission denied",14:"Bad address",15:"Block device required",16:"Mount device busy",17:"File exists",18:"Cross-device link",19:"No such device",20:"Not a directory",21:"Is a directory",22:"Invalid argument",23:"Too many open files in system",24:"Too many open files",25:"Not a typewriter",26:"Text file busy",27:"File too large",28:"No space left on device",29:"Illegal seek",30:"Read only file system",31:"Too many links",32:"Broken pipe",33:"Math arg out of domain of func",34:"Math result not representable",35:"File locking deadlock error",36:"File or path name too long",37:"No record locks available",38:"Function not implemented",39:"Directory not empty",40:"Too many symbolic links",42:"No message of desired type",43:"Identifier removed",44:"Channel number out of range",45:"Level 2 not synchronized",46:"Level 3 halted",47:"Level 3 reset",48:"Link number out of range",49:"Protocol driver not attached",50:"No CSI structure available",51:"Level 2 halted",52:"Invalid exchange",53:"Invalid request descriptor",54:"Exchange full",55:"No anode",56:"Invalid request code",57:"Invalid slot",59:"Bad font file fmt",60:"Device not a stream",61:"No data (for no delay io)",62:"Timer expired",63:"Out of streams resources",64:"Machine is not on the network",65:"Package not installed",66:"The object is remote",67:"The link has been severed",68:"Advertise error",69:"Srmount error",70:"Communication error on send",71:"Protocol error",72:"Multihop attempted",73:"Cross mount point (not really error)",74:"Trying to read unreadable message",75:"Value too large for defined data type",76:"Given log. name not unique",77:"f.d. invalid for this operation",78:"Remote address changed",79:"Can   access a needed shared lib",80:"Accessing a corrupted shared lib",81:".lib section in a.out corrupted",82:"Attempting to link in too many libs",83:"Attempting to exec a shared library",84:"Illegal byte sequence",86:"Streams pipe error",87:"Too many users",88:"Socket operation on non-socket",89:"Destination address required",90:"Message too long",91:"Protocol wrong type for socket",92:"Protocol not available",93:"Unknown protocol",94:"Socket type not supported",95:"Not supported",96:"Protocol family not supported",97:"Address family not supported by protocol family",98:"Address already in use",99:"Address not available",100:"Network interface is not configured",101:"Network is unreachable",102:"Connection reset by network",103:"Connection aborted",104:"Connection reset by peer",105:"No buffer space available",106:"Socket is already connected",107:"Socket is not connected",108:"Can't send after socket shutdown",109:"Too many references",110:"Connection timed out",111:"Connection refused",112:"Host is down",113:"Host is unreachable",114:"Socket already connected",115:"Connection already in progress",116:"Stale file handle",122:"Quota exceeded",123:"No medium (in tape drive)",125:"Operation canceled",130:"Previous owner died",131:"State not recoverable"},PATH={splitPath:function(a){return/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/.exec(a).slice(1)},normalizeArray:function(a,b){for(var c=0,d=a.length-1;d>=0;d--){var e=a[d];"."===e?a.splice(d,1):".."===e?(a.splice(d,1),c++):c&&(a.splice(d,1),c--)}if(b)for(;c--;c)a.unshift("..");return a},normalize:function(a){var b="/"===a.charAt(0),c="/"===a.substr(-1);return a=PATH.normalizeArray(a.split("/").filter(function(a){return!!a}),!b).join("/"),a||b||(a="."),a&&c&&(a+="/"),(b?"/":"")+a},dirname:function(a){var b=PATH.splitPath(a),c=b[0],d=b[1];return c||d?(d&&(d=d.substr(0,d.length-1)),c+d):"."},basename:function(a){if("/"===a)return"/";var b=a.lastIndexOf("/");return-1===b?a:a.substr(b+1)},extname:function(a){return PATH.splitPath(a)[3]},join:function(){var a=Array.prototype.slice.call(arguments,0);return PATH.normalize(a.join("/"))},join2:function(a,b){return PATH.normalize(a+"/"+b)},resolve:function(){for(var a="",b=!1,c=arguments.length-1;c>=-1&&!b;c--){var d=c>=0?arguments[c]:FS.cwd();if("string"!=typeof d)throw new TypeError("Arguments to path.resolve must be strings");if(!d)return"";a=d+"/"+a,b="/"===d.charAt(0)}return a=PATH.normalizeArray(a.split("/").filter(function(a){return!!a}),!b).join("/"),(b?"/":"")+a||"."},relative:function(a,b){function c(a){for(var b=0;b<a.length&&""===a[b];b++);for(var c=a.length-1;c>=0&&""===a[c];c--);return b>c?[]:a.slice(b,c-b+1)}a=PATH.resolve(a).substr(1),b=PATH.resolve(b).substr(1);for(var d=c(a.split("/")),e=c(b.split("/")),f=Math.min(d.length,e.length),g=f,h=0;h<f;h++)if(d[h]!==e[h]){g=h;break}for(var i=[],h=g;h<d.length;h++)i.push("..");return i=i.concat(e.slice(g)),i.join("/")}},TTY={ttys:[],init:function(){},shutdown:function(){},register:function(a,b){TTY.ttys[a]={input:[],output:[],ops:b},FS.registerDevice(a,TTY.stream_ops)},stream_ops:{open:function(a){var b=TTY.ttys[a.node.rdev];if(!b)throw new FS.ErrnoError(ERRNO_CODES.ENODEV);a.tty=b,a.seekable=!1},close:function(a){a.tty.ops.flush(a.tty)},flush:function(a){a.tty.ops.flush(a.tty)},read:function(a,b,c,d,e){if(!a.tty||!a.tty.ops.get_char)throw new FS.ErrnoError(ERRNO_CODES.ENXIO);for(var f=0,g=0;g<d;g++){var h;try{h=a.tty.ops.get_char(a.tty)}catch(a){throw new FS.ErrnoError(ERRNO_CODES.EIO)}if(void 0===h&&0===f)throw new FS.ErrnoError(ERRNO_CODES.EAGAIN);if(null===h||void 0===h)break;f++,b[c+g]=h}return f&&(a.node.timestamp=Date.now()),f},write:function(a,b,c,d,e){if(!a.tty||!a.tty.ops.put_char)throw new FS.ErrnoError(ERRNO_CODES.ENXIO);for(var f=0;f<d;f++)try{a.tty.ops.put_char(a.tty,b[c+f])}catch(a){throw new FS.ErrnoError(ERRNO_CODES.EIO)}return d&&(a.node.timestamp=Date.now()),f}},default_tty_ops:{get_char:function(a){if(!a.input.length){var b=null;if(ENVIRONMENT_IS_NODE){var c=256,d=new Buffer(c),e=0,f="win32"!=process.platform,g=process.stdin.fd;if(f){var h=!1;try{g=fs.openSync("/dev/stdin","r"),h=!0}catch(a){}}try{e=fs.readSync(g,d,0,c,null)}catch(a){if(-1==a.toString().indexOf("EOF"))throw a;e=0}h&&fs.closeSync(g),b=e>0?d.slice(0,e).toString("utf-8"):null}else"undefined"!=typeof window&&"function"==typeof window.prompt?null!==(b=window.prompt("Input: "))&&(b+="\n"):"function"==typeof readline&&null!==(b=readline())&&(b+="\n");if(!b)return null;a.input=intArrayFromString(b,!0)}return a.input.shift()},put_char:function(a,b){null===b||10===b?(Module.print(UTF8ArrayToString(a.output,0)),a.output=[]):0!=b&&a.output.push(b)},flush:function(a){a.output&&a.output.length>0&&(Module.print(UTF8ArrayToString(a.output,0)),a.output=[])}},default_tty1_ops:{put_char:function(a,b){null===b||10===b?(Module.printErr(UTF8ArrayToString(a.output,0)),a.output=[]):0!=b&&a.output.push(b)},flush:function(a){a.output&&a.output.length>0&&(Module.printErr(UTF8ArrayToString(a.output,0)),a.output=[])}}},MEMFS={ops_table:null,mount:function(a){return MEMFS.createNode(null,"/",16895,0)},createNode:function(a,b,c,d){if(FS.isBlkdev(c)||FS.isFIFO(c))throw new FS.ErrnoError(ERRNO_CODES.EPERM);MEMFS.ops_table||(MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}});var e=FS.createNode(a,b,c,d);return FS.isDir(e.mode)?(e.node_ops=MEMFS.ops_table.dir.node,e.stream_ops=MEMFS.ops_table.dir.stream,e.contents={}):FS.isFile(e.mode)?(e.node_ops=MEMFS.ops_table.file.node,e.stream_ops=MEMFS.ops_table.file.stream,e.usedBytes=0,e.contents=null):FS.isLink(e.mode)?(e.node_ops=MEMFS.ops_table.link.node,e.stream_ops=MEMFS.ops_table.link.stream):FS.isChrdev(e.mode)&&(e.node_ops=MEMFS.ops_table.chrdev.node,e.stream_ops=MEMFS.ops_table.chrdev.stream),e.timestamp=Date.now(),a&&(a.contents[b]=e),e},getFileDataAsRegularArray:function(a){if(a.contents&&a.contents.subarray){for(var b=[],c=0;c<a.usedBytes;++c)b.push(a.contents[c]);return b}return a.contents},getFileDataAsTypedArray:function(a){return a.contents?a.contents.subarray?a.contents.subarray(0,a.usedBytes):new Uint8Array(a.contents):new Uint8Array},expandFileStorage:function(a,b){if(a.contents&&a.contents.subarray&&b>a.contents.length&&(a.contents=MEMFS.getFileDataAsRegularArray(a),a.usedBytes=a.contents.length),!a.contents||a.contents.subarray){var c=a.contents?a.contents.length:0;if(c>=b)return;b=Math.max(b,c*(c<1048576?2:1.125)|0),0!=c&&(b=Math.max(b,256));var e=a.contents;return a.contents=new Uint8Array(b),void(a.usedBytes>0&&a.contents.set(e.subarray(0,a.usedBytes),0))}for(!a.contents&&b>0&&(a.contents=[]);a.contents.length<b;)a.contents.push(0)},resizeFileStorage:function(a,b){if(a.usedBytes!=b){if(0==b)return a.contents=null,void(a.usedBytes=0);if(!a.contents||a.contents.subarray){var c=a.contents;return a.contents=new Uint8Array(new ArrayBuffer(b)),c&&a.contents.set(c.subarray(0,Math.min(b,a.usedBytes))),void(a.usedBytes=b)}if(a.contents||(a.contents=[]),a.contents.length>b)a.contents.length=b;else for(;a.contents.length<b;)a.contents.push(0);a.usedBytes=b}},node_ops:{getattr:function(a){var b={};return b.dev=FS.isChrdev(a.mode)?a.id:1,b.ino=a.id,b.mode=a.mode,b.nlink=1,b.uid=0,b.gid=0,b.rdev=a.rdev,FS.isDir(a.mode)?b.size=4096:FS.isFile(a.mode)?b.size=a.usedBytes:FS.isLink(a.mode)?b.size=a.link.length:b.size=0,b.atime=new Date(a.timestamp),b.mtime=new Date(a.timestamp),b.ctime=new Date(a.timestamp),b.blksize=4096,b.blocks=Math.ceil(b.size/b.blksize),b},setattr:function(a,b){void 0!==b.mode&&(a.mode=b.mode),void 0!==b.timestamp&&(a.timestamp=b.timestamp),void 0!==b.size&&MEMFS.resizeFileStorage(a,b.size)},lookup:function(a,b){throw FS.genericErrors[ERRNO_CODES.ENOENT]},mknod:function(a,b,c,d){return MEMFS.createNode(a,b,c,d)},rename:function(a,b,c){if(FS.isDir(a.mode)){var d;try{d=FS.lookupNode(b,c)}catch(a){}if(d)for(var e in d.contents)throw new FS.ErrnoError(ERRNO_CODES.ENOTEMPTY)}delete a.parent.contents[a.name],a.name=c,b.contents[c]=a,a.parent=b},unlink:function(a,b){delete a.contents[b]},rmdir:function(a,b){var c=FS.lookupNode(a,b);for(var d in c.contents)throw new FS.ErrnoError(ERRNO_CODES.ENOTEMPTY);delete a.contents[b]},readdir:function(a){var b=[".",".."];for(var c in a.contents)a.contents.hasOwnProperty(c)&&b.push(c);return b},symlink:function(a,b,c){var d=MEMFS.createNode(a,b,41471,0);return d.link=c,d},readlink:function(a){if(!FS.isLink(a.mode))throw new FS.ErrnoError(ERRNO_CODES.EINVAL);return a.link}},stream_ops:{read:function(a,b,c,d,e){var f=a.node.contents;if(e>=a.node.usedBytes)return 0;var g=Math.min(a.node.usedBytes-e,d);if(assert(g>=0),g>8&&f.subarray)b.set(f.subarray(e,e+g),c);else for(var h=0;h<g;h++)b[c+h]=f[e+h];return g},write:function(a,b,c,d,e,f){if(!d)return 0;var g=a.node;if(g.timestamp=Date.now(),b.subarray&&(!g.contents||g.contents.subarray)){if(f)return assert(0===e,"canOwn must imply no weird position inside the file"),g.contents=b.subarray(c,c+d),g.usedBytes=d,d;if(0===g.usedBytes&&0===e)return g.contents=new Uint8Array(b.subarray(c,c+d)),g.usedBytes=d,d;if(e+d<=g.usedBytes)return g.contents.set(b.subarray(c,c+d),e),d}if(MEMFS.expandFileStorage(g,e+d),g.contents.subarray&&b.subarray)g.contents.set(b.subarray(c,c+d),e);else for(var h=0;h<d;h++)g.contents[e+h]=b[c+h];return g.usedBytes=Math.max(g.usedBytes,e+d),d},llseek:function(a,b,c){var d=b;if(1===c?d+=a.position:2===c&&FS.isFile(a.node.mode)&&(d+=a.node.usedBytes),d<0)throw new FS.ErrnoError(ERRNO_CODES.EINVAL);return d},allocate:function(a,b,c){MEMFS.expandFileStorage(a.node,b+c),a.node.usedBytes=Math.max(a.node.usedBytes,b+c)},mmap:function(a,b,c,d,e,f,g){if(!FS.isFile(a.node.mode))throw new FS.ErrnoError(ERRNO_CODES.ENODEV);var h,i,j=a.node.contents;if(2&g||j.buffer!==b&&j.buffer!==b.buffer){if((e>0||e+d<a.node.usedBytes)&&(j=j.subarray?j.subarray(e,e+d):Array.prototype.slice.call(j,e,e+d)),i=!0,!(h=_malloc(d)))throw new FS.ErrnoError(ERRNO_CODES.ENOMEM);b.set(j,h)}else i=!1,h=j.byteOffset;return{ptr:h,allocated:i}},msync:function(a,b,c,d,e){if(!FS.isFile(a.node.mode))throw new FS.ErrnoError(ERRNO_CODES.ENODEV);if(2&e)return 0;MEMFS.stream_ops.write(a,b,0,d,c,!1);return 0}}},IDBFS={dbs:{},indexedDB:function(){if("undefined"!=typeof indexedDB)return indexedDB;var a=null;return"object"==typeof window&&(a=window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB),assert(a,"IDBFS used, but indexedDB not supported"),a},DB_VERSION:21,DB_STORE_NAME:"FILE_DATA",mount:function(a){return MEMFS.mount.apply(null,arguments)},syncfs:function(a,b,c){IDBFS.getLocalSet(a,function(d,e){if(d)return c(d);IDBFS.getRemoteSet(a,function(a,d){if(a)return c(a);var f=b?d:e,g=b?e:d;IDBFS.reconcile(f,g,c)})})},getDB:function(a,b){var c=IDBFS.dbs[a];if(c)return b(null,c);var d;try{d=IDBFS.indexedDB().open(a,IDBFS.DB_VERSION)}catch(a){return b(a)}if(!d)return b("Unable to connect to IndexedDB");d.onupgradeneeded=function(a){var d,b=a.target.result,c=a.target.transaction;d=b.objectStoreNames.contains(IDBFS.DB_STORE_NAME)?c.objectStore(IDBFS.DB_STORE_NAME):b.createObjectStore(IDBFS.DB_STORE_NAME),d.indexNames.contains("timestamp")||d.createIndex("timestamp","timestamp",{unique:!1})},d.onsuccess=function(){c=d.result,IDBFS.dbs[a]=c,b(null,c)},d.onerror=function(a){b(this.error),a.preventDefault()}},getLocalSet:function(a,b){function d(a){return"."!==a&&".."!==a}function e(a){return function(b){return PATH.join2(a,b)}}for(var c={},f=FS.readdir(a.mountpoint).filter(d).map(e(a.mountpoint));f.length;){var h,g=f.pop();try{h=FS.stat(g)}catch(a){return b(a)}FS.isDir(h.mode)&&f.push.apply(f,FS.readdir(g).filter(d).map(e(g))),c[g]={timestamp:h.mtime}}return b(null,{type:"local",entries:c})},getRemoteSet:function(a,b){var c={};IDBFS.getDB(a.mountpoint,function(a,d){if(a)return b(a);var e=d.transaction([IDBFS.DB_STORE_NAME],"readonly");e.onerror=function(a){b(this.error),a.preventDefault()},e.objectStore(IDBFS.DB_STORE_NAME).index("timestamp").openKeyCursor().onsuccess=function(a){var e=a.target.result;if(!e)return b(null,{type:"remote",db:d,entries:c});c[e.primaryKey]={timestamp:e.key},e.continue()}})},loadLocalEntry:function(a,b){var c,d;try{d=FS.lookupPath(a).node,c=FS.stat(a)}catch(a){return b(a)}return FS.isDir(c.mode)?b(null,{timestamp:c.mtime,mode:c.mode}):FS.isFile(c.mode)?(d.contents=MEMFS.getFileDataAsTypedArray(d),b(null,{timestamp:c.mtime,mode:c.mode,contents:d.contents})):b(new Error("node type not supported"))},storeLocalEntry:function(a,b,c){try{if(FS.isDir(b.mode))FS.mkdir(a,b.mode);else{if(!FS.isFile(b.mode))return c(new Error("node type not supported"));FS.writeFile(a,b.contents,{encoding:"binary",canOwn:!0})}FS.chmod(a,b.mode),FS.utime(a,b.timestamp,b.timestamp)}catch(a){return c(a)}c(null)},removeLocalEntry:function(a,b){try{var d=(FS.lookupPath(a),FS.stat(a));FS.isDir(d.mode)?FS.rmdir(a):FS.isFile(d.mode)&&FS.unlink(a)}catch(a){return b(a)}b(null)},loadRemoteEntry:function(a,b,c){var d=a.get(b);d.onsuccess=function(a){c(null,a.target.result)},d.onerror=function(a){c(this.error),a.preventDefault()}},storeRemoteEntry:function(a,b,c,d){var e=a.put(c,b);e.onsuccess=function(){d(null)},e.onerror=function(a){d(this.error),a.preventDefault()}},removeRemoteEntry:function(a,b,c){var d=a.delete(b);d.onsuccess=function(){c(null)},d.onerror=function(a){c(this.error),a.preventDefault()}},reconcile:function(a,b,c){function l(a){if(a){if(!l.errored)return l.errored=!0,c(a)}else if(++h>=d)return c(null)}var d=0,e=[];Object.keys(a.entries).forEach(function(c){var f=a.entries[c],g=b.entries[c];(!g||f.timestamp>g.timestamp)&&(e.push(c),d++)});var f=[];if(Object.keys(b.entries).forEach(function(c){b.entries[c];a.entries[c]||(f.push(c),d++)}),!d)return c(null);var h=0,i="remote"===a.type?a.db:b.db,j=i.transaction([IDBFS.DB_STORE_NAME],"readwrite"),k=j.objectStore(IDBFS.DB_STORE_NAME);j.onerror=function(a){l(this.error),a.preventDefault()},e.sort().forEach(function(a){"local"===b.type?IDBFS.loadRemoteEntry(k,a,function(b,c){if(b)return l(b);IDBFS.storeLocalEntry(a,c,l)}):IDBFS.loadLocalEntry(a,function(b,c){if(b)return l(b);IDBFS.storeRemoteEntry(k,a,c,l)})}),f.sort().reverse().forEach(function(a){"local"===b.type?IDBFS.removeLocalEntry(a,l):IDBFS.removeRemoteEntry(k,a,l)})}},NODEFS={isWindows:!1,staticInit:function(){NODEFS.isWindows=!!process.platform.match(/^win/)},mount:function(a){return assert(ENVIRONMENT_IS_NODE),NODEFS.createNode(null,"/",NODEFS.getMode(a.opts.root),0)},createNode:function(a,b,c,d){if(!FS.isDir(c)&&!FS.isFile(c)&&!FS.isLink(c))throw new FS.ErrnoError(ERRNO_CODES.EINVAL);var e=FS.createNode(a,b,c);return e.node_ops=NODEFS.node_ops,e.stream_ops=NODEFS.stream_ops,e},getMode:function(a){var b;try{b=fs.lstatSync(a),NODEFS.isWindows&&(b.mode=b.mode|(146&b.mode)>>1)}catch(a){if(!a.code)throw a;throw new FS.ErrnoError(ERRNO_CODES[a.code])}return b.mode},realPath:function(a){for(var b=[];a.parent!==a;)b.push(a.name),a=a.parent;return b.push(a.mount.opts.root),b.reverse(),PATH.join.apply(null,b)},flagsToPermissionStringMap:{0:"r",1:"r+",2:"r+",64:"r",65:"r+",66:"r+",129:"rx+",193:"rx+",514:"w+",577:"w",578:"w+",705:"wx",706:"wx+",1024:"a",1025:"a",1026:"a+",1089:"a",1090:"a+",1153:"ax",1154:"ax+",1217:"ax",1218:"ax+",4096:"rs",4098:"rs+"},flagsToPermissionString:function(a){if(a&=-2097153,a&=-2049,a&=-32769,(a&=-524289)in NODEFS.flagsToPermissionStringMap)return NODEFS.flagsToPermissionStringMap[a];throw new FS.ErrnoError(ERRNO_CODES.EINVAL)},node_ops:{getattr:function(a){var c,b=NODEFS.realPath(a);try{c=fs.lstatSync(b)}catch(a){if(!a.code)throw a;throw new FS.ErrnoError(ERRNO_CODES[a.code])}return NODEFS.isWindows&&!c.blksize&&(c.blksize=4096),NODEFS.isWindows&&!c.blocks&&(c.blocks=(c.size+c.blksize-1)/c.blksize|0),{dev:c.dev,ino:c.ino,mode:c.mode,nlink:c.nlink,uid:c.uid,gid:c.gid,rdev:c.rdev,size:c.size,atime:c.atime,mtime:c.mtime,ctime:c.ctime,blksize:c.blksize,blocks:c.blocks}},setattr:function(a,b){var c=NODEFS.realPath(a);try{if(void 0!==b.mode&&(fs.chmodSync(c,b.mode),a.mode=b.mode),void 0!==b.timestamp){var d=new Date(b.timestamp);fs.utimesSync(c,d,d)}void 0!==b.size&&fs.truncateSync(c,b.size)}catch(a){if(!a.code)throw a;throw new FS.ErrnoError(ERRNO_CODES[a.code])}},lookup:function(a,b){var c=PATH.join2(NODEFS.realPath(a),b),d=NODEFS.getMode(c);return NODEFS.createNode(a,b,d)},mknod:function(a,b,c,d){var e=NODEFS.createNode(a,b,c,d),f=NODEFS.realPath(e);try{FS.isDir(e.mode)?fs.mkdirSync(f,e.mode):fs.writeFileSync(f,"",{mode:e.mode})}catch(a){if(!a.code)throw a;throw new FS.ErrnoError(ERRNO_CODES[a.code])}return e},rename:function(a,b,c){var d=NODEFS.realPath(a),e=PATH.join2(NODEFS.realPath(b),c);try{fs.renameSync(d,e)}catch(a){if(!a.code)throw a;throw new FS.ErrnoError(ERRNO_CODES[a.code])}},unlink:function(a,b){var c=PATH.join2(NODEFS.realPath(a),b);try{fs.unlinkSync(c)}catch(a){if(!a.code)throw a;throw new FS.ErrnoError(ERRNO_CODES[a.code])}},rmdir:function(a,b){var c=PATH.join2(NODEFS.realPath(a),b);try{fs.rmdirSync(c)}catch(a){if(!a.code)throw a;throw new FS.ErrnoError(ERRNO_CODES[a.code])}},readdir:function(a){var b=NODEFS.realPath(a);try{return fs.readdirSync(b)}catch(a){if(!a.code)throw a;throw new FS.ErrnoError(ERRNO_CODES[a.code])}},symlink:function(a,b,c){var d=PATH.join2(NODEFS.realPath(a),b);try{fs.symlinkSync(c,d)}catch(a){if(!a.code)throw a;throw new FS.ErrnoError(ERRNO_CODES[a.code])}},readlink:function(a){var b=NODEFS.realPath(a);try{return b=fs.readlinkSync(b),b=NODEJS_PATH.relative(NODEJS_PATH.resolve(a.mount.opts.root),b)}catch(a){if(!a.code)throw a;throw new FS.ErrnoError(ERRNO_CODES[a.code])}}},stream_ops:{open:function(a){var b=NODEFS.realPath(a.node);try{FS.isFile(a.node.mode)&&(a.nfd=fs.openSync(b,NODEFS.flagsToPermissionString(a.flags)))}catch(a){if(!a.code)throw a;throw new FS.ErrnoError(ERRNO_CODES[a.code])}},close:function(a){try{FS.isFile(a.node.mode)&&a.nfd&&fs.closeSync(a.nfd)}catch(a){if(!a.code)throw a;throw new FS.ErrnoError(ERRNO_CODES[a.code])}},read:function(a,b,c,d,e){if(0===d)return 0;var g,f=new Buffer(d);try{g=fs.readSync(a.nfd,f,0,d,e)}catch(a){throw new FS.ErrnoError(ERRNO_CODES[a.code])}if(g>0)for(var h=0;h<g;h++)b[c+h]=f[h];return g},write:function(a,b,c,d,e){var g,f=new Buffer(b.subarray(c,c+d));try{g=fs.writeSync(a.nfd,f,0,d,e)}catch(a){throw new FS.ErrnoError(ERRNO_CODES[a.code])}return g},llseek:function(a,b,c){var d=b;if(1===c)d+=a.position;else if(2===c&&FS.isFile(a.node.mode))try{var e=fs.fstatSync(a.nfd);d+=e.size}catch(a){throw new FS.ErrnoError(ERRNO_CODES[a.code])}if(d<0)throw new FS.ErrnoError(ERRNO_CODES.EINVAL);return d}}},WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function(a){function d(a){for(var d=a.split("/"),e=b,f=0;f<d.length-1;f++){var g=d.slice(0,f+1).join("/");c[g]||(c[g]=WORKERFS.createNode(e,d[f],WORKERFS.DIR_MODE,0)),e=c[g]}return e}function e(a){var b=a.split("/");return b[b.length-1]}assert(ENVIRONMENT_IS_WORKER),WORKERFS.reader||(WORKERFS.reader=new FileReaderSync);var b=WORKERFS.createNode(null,"/",WORKERFS.DIR_MODE,0),c={};return Array.prototype.forEach.call(a.opts.files||[],function(a){WORKERFS.createNode(d(a.name),e(a.name),WORKERFS.FILE_MODE,0,a,a.lastModifiedDate)}),(a.opts.blobs||[]).forEach(function(a){WORKERFS.createNode(d(a.name),e(a.name),WORKERFS.FILE_MODE,0,a.data)}),(a.opts.packages||[]).forEach(function(a){a.metadata.files.forEach(function(b){var c=b.filename.substr(1);WORKERFS.createNode(d(c),e(c),WORKERFS.FILE_MODE,0,a.blob.slice(b.start,b.end))})}),b},createNode:function(a,b,c,d,e,f){var g=FS.createNode(a,b,c);return g.mode=c,g.node_ops=WORKERFS.node_ops,g.stream_ops=WORKERFS.stream_ops,g.timestamp=(f||new Date).getTime(),assert(WORKERFS.FILE_MODE!==WORKERFS.DIR_MODE),c===WORKERFS.FILE_MODE?(g.size=e.size,g.contents=e):(g.size=4096,g.contents={}),a&&(a.contents[b]=g),g},node_ops:{getattr:function(a){return{dev:1,ino:void 0,mode:a.mode,nlink:1,uid:0,gid:0,rdev:void 0,size:a.size,atime:new Date(a.timestamp),mtime:new Date(a.timestamp),ctime:new Date(a.timestamp),blksize:4096,blocks:Math.ceil(a.size/4096)}},setattr:function(a,b){void 0!==b.mode&&(a.mode=b.mode),void 0!==b.timestamp&&(a.timestamp=b.timestamp)},lookup:function(a,b){throw new FS.ErrnoError(ERRNO_CODES.ENOENT)},mknod:function(a,b,c,d){throw new FS.ErrnoError(ERRNO_CODES.EPERM)},rename:function(a,b,c){throw new FS.ErrnoError(ERRNO_CODES.EPERM)},unlink:function(a,b){throw new FS.ErrnoError(ERRNO_CODES.EPERM)},rmdir:function(a,b){throw new FS.ErrnoError(ERRNO_CODES.EPERM)},readdir:function(a){var b=[".",".."];for(var c in a.contents)a.contents.hasOwnProperty(c)&&b.push(c);return b},symlink:function(a,b,c){throw new FS.ErrnoError(ERRNO_CODES.EPERM)},readlink:function(a){throw new FS.ErrnoError(ERRNO_CODES.EPERM)}},stream_ops:{read:function(a,b,c,d,e){if(e>=a.node.size)return 0;var f=a.node.contents.slice(e,e+d),g=WORKERFS.reader.readAsArrayBuffer(f);return b.set(new Uint8Array(g),c),f.size},write:function(a,b,c,d,e){throw new FS.ErrnoError(ERRNO_CODES.EIO)},llseek:function(a,b,c){var d=b;if(1===c?d+=a.position:2===c&&FS.isFile(a.node.mode)&&(d+=a.node.size),d<0)throw new FS.ErrnoError(ERRNO_CODES.EINVAL);return d}}},_stdin=STATICTOP;STATICTOP+=16;var _stdout=STATICTOP;STATICTOP+=16;var _stderr=STATICTOP;STATICTOP+=16;var FS={root:null,mounts:[],devices:[null],streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:!1,ignorePermissions:!0,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function(a){if(!(a instanceof FS.ErrnoError))throw a+" : "+stackTrace();return ___setErrNo(a.errno)},lookupPath:function(a,b){if(a=PATH.resolve(FS.cwd(),a),b=b||{},!a)return{path:"",node:null};var c={follow_mount:!0,recurse_count:0};for(var d in c)void 0===b[d]&&(b[d]=c[d]);if(b.recurse_count>8)throw new FS.ErrnoError(ERRNO_CODES.ELOOP);for(var e=PATH.normalizeArray(a.split("/").filter(function(a){return!!a}),!1),f=FS.root,g="/",h=0;h<e.length;h++){var i=h===e.length-1;if(i&&b.parent)break;if(f=FS.lookupNode(f,e[h]),g=PATH.join2(g,e[h]),FS.isMountpoint(f)&&(!i||i&&b.follow_mount)&&(f=f.mounted.root),!i||b.follow)for(var j=0;FS.isLink(f.mode);){var k=FS.readlink(g);g=PATH.resolve(PATH.dirname(g),k);var l=FS.lookupPath(g,{recurse_count:b.recurse_count});if(f=l.node,j++>40)throw new FS.ErrnoError(ERRNO_CODES.ELOOP)}}return{path:g,node:f}},getPath:function(a){for(var b;;){if(FS.isRoot(a)){var c=a.mount.mountpoint;return b?"/"!==c[c.length-1]?c+"/"+b:c+b:c}b=b?a.name+"/"+b:a.name,a=a.parent}},hashName:function(a,b){for(var c=0,d=0;d<b.length;d++)c=(c<<5)-c+b.charCodeAt(d)|0;return(a+c>>>0)%FS.nameTable.length},hashAddNode:function(a){var b=FS.hashName(a.parent.id,a.name);a.name_next=FS.nameTable[b],FS.nameTable[b]=a},hashRemoveNode:function(a){var b=FS.hashName(a.parent.id,a.name);if(FS.nameTable[b]===a)FS.nameTable[b]=a.name_next;else for(var c=FS.nameTable[b];c;){if(c.name_next===a){c.name_next=a.name_next;break}c=c.name_next}},lookupNode:function(a,b){var c=FS.mayLookup(a);if(c)throw new FS.ErrnoError(c,a);for(var d=FS.hashName(a.id,b),e=FS.nameTable[d];e;e=e.name_next){var f=e.name;if(e.parent.id===a.id&&f===b)return e}return FS.lookup(a,b)},createNode:function(a,b,c,d){if(!FS.FSNode){FS.FSNode=function(a,b,c,d){a||(a=this),this.parent=a,this.mount=a.mount,this.mounted=null,this.id=FS.nextInode++,this.name=b,this.mode=c,this.node_ops={},this.stream_ops={},this.rdev=d},FS.FSNode.prototype={};var e=365,f=146;Object.defineProperties(FS.FSNode.prototype,{read:{get:function(){return(this.mode&e)===e},set:function(a){a?this.mode|=e:this.mode&=~e}},write:{get:function(){return(this.mode&f)===f},set:function(a){a?this.mode|=f:this.mode&=~f}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}})}var g=new FS.FSNode(a,b,c,d);return FS.hashAddNode(g),g},destroyNode:function(a){FS.hashRemoveNode(a)},isRoot:function(a){return a===a.parent},isMountpoint:function(a){return!!a.mounted},isFile:function(a){return 32768==(61440&a)},isDir:function(a){return 16384==(61440&a)},isLink:function(a){return 40960==(61440&a)},isChrdev:function(a){return 8192==(61440&a)},isBlkdev:function(a){return 24576==(61440&a)},isFIFO:function(a){return 4096==(61440&a)},isSocket:function(a){return 49152==(49152&a)},flagModes:{r:0,rs:1052672,"r+":2,w:577,wx:705,xw:705,"w+":578,"wx+":706,"xw+":706,a:1089,ax:1217,xa:1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function(a){var b=FS.flagModes[a];if(void 0===b)throw new Error("Unknown file open mode: "+a);return b},flagsToPermissionString:function(a){var b=["r","w","rw"][3&a];return 512&a&&(b+="w"),b},nodePermissions:function(a,b){return FS.ignorePermissions?0:(-1===b.indexOf("r")||292&a.mode)&&(-1===b.indexOf("w")||146&a.mode)&&(-1===b.indexOf("x")||73&a.mode)?0:ERRNO_CODES.EACCES},mayLookup:function(a){var b=FS.nodePermissions(a,"x");return b||(a.node_ops.lookup?0:ERRNO_CODES.EACCES)},mayCreate:function(a,b){try{FS.lookupNode(a,b);return ERRNO_CODES.EEXIST}catch(a){}return FS.nodePermissions(a,"wx")},mayDelete:function(a,b,c){var d;try{d=FS.lookupNode(a,b)}catch(a){return a.errno}var e=FS.nodePermissions(a,"wx");if(e)return e;if(c){if(!FS.isDir(d.mode))return ERRNO_CODES.ENOTDIR;if(FS.isRoot(d)||FS.getPath(d)===FS.cwd())return ERRNO_CODES.EBUSY}else if(FS.isDir(d.mode))return ERRNO_CODES.EISDIR;return 0},mayOpen:function(a,b){return a?FS.isLink(a.mode)?ERRNO_CODES.ELOOP:FS.isDir(a.mode)&&("r"!==FS.flagsToPermissionString(b)||512&b)?ERRNO_CODES.EISDIR:FS.nodePermissions(a,FS.flagsToPermissionString(b)):ERRNO_CODES.ENOENT},MAX_OPEN_FDS:4096,nextfd:function(a,b){a=a||0,b=b||FS.MAX_OPEN_FDS;for(var c=a;c<=b;c++)if(!FS.streams[c])return c;throw new FS.ErrnoError(ERRNO_CODES.EMFILE)},getStream:function(a){return FS.streams[a]},createStream:function(a,b,c){FS.FSStream||(FS.FSStream=function(){},FS.FSStream.prototype={},Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(a){this.node=a}},isRead:{get:function(){return 1!=(2097155&this.flags)}},isWrite:{get:function(){return 0!=(2097155&this.flags)}},isAppend:{get:function(){return 1024&this.flags}}}));var d=new FS.FSStream;for(var e in a)d[e]=a[e];a=d;var f=FS.nextfd(b,c);return a.fd=f,FS.streams[f]=a,a},closeStream:function(a){FS.streams[a]=null},chrdev_stream_ops:{open:function(a){var b=FS.getDevice(a.node.rdev);a.stream_ops=b.stream_ops,a.stream_ops.open&&a.stream_ops.open(a)},llseek:function(){throw new FS.ErrnoError(ERRNO_CODES.ESPIPE)}},major:function(a){return a>>8},minor:function(a){return 255&a},makedev:function(a,b){return a<<8|b},registerDevice:function(a,b){FS.devices[a]={stream_ops:b}},getDevice:function(a){return FS.devices[a]},getMounts:function(a){for(var b=[],c=[a];c.length;){var d=c.pop();b.push(d),c.push.apply(c,d.mounts)}return b},syncfs:function(a,b){function e(a){return assert(FS.syncFSRequests>0),FS.syncFSRequests--,b(a)}function f(a){if(a){if(!f.errored)return f.errored=!0,e(a)}else++d>=c.length&&e(null)}"function"==typeof a&&(b=a,a=!1),++FS.syncFSRequests>1&&console.log("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work");var c=FS.getMounts(FS.root.mount),d=0;c.forEach(function(b){if(!b.type.syncfs)return f(null);b.type.syncfs(b,a,f)})},mount:function(a,b,c){var f,d="/"===c,e=!c;if(d&&FS.root)throw new FS.ErrnoError(ERRNO_CODES.EBUSY);if(!d&&!e){var g=FS.lookupPath(c,{follow_mount:!1});if(c=g.path,f=g.node,FS.isMountpoint(f))throw new FS.ErrnoError(ERRNO_CODES.EBUSY);if(!FS.isDir(f.mode))throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR)}var h={type:a,opts:b,mountpoint:c,mounts:[]},i=a.mount(h);return i.mount=h,h.root=i,d?FS.root=i:f&&(f.mounted=h,f.mount&&f.mount.mounts.push(h)),i},unmount:function(a){var b=FS.lookupPath(a,{follow_mount:!1});if(!FS.isMountpoint(b.node))throw new FS.ErrnoError(ERRNO_CODES.EINVAL);var c=b.node,d=c.mounted,e=FS.getMounts(d);Object.keys(FS.nameTable).forEach(function(a){for(var b=FS.nameTable[a];b;){var c=b.name_next;-1!==e.indexOf(b.mount)&&FS.destroyNode(b),b=c}}),c.mounted=null;var f=c.mount.mounts.indexOf(d);assert(-1!==f),c.mount.mounts.splice(f,1)},lookup:function(a,b){return a.node_ops.lookup(a,b)},mknod:function(a,b,c){var d=FS.lookupPath(a,{parent:!0}),e=d.node,f=PATH.basename(a);if(!f||"."===f||".."===f)throw new FS.ErrnoError(ERRNO_CODES.EINVAL);var g=FS.mayCreate(e,f);if(g)throw new FS.ErrnoError(g);if(!e.node_ops.mknod)throw new FS.ErrnoError(ERRNO_CODES.EPERM);return e.node_ops.mknod(e,f,b,c)},create:function(a,b){return b=void 0!==b?b:438,b&=4095,b|=32768,FS.mknod(a,b,0)},mkdir:function(a,b){return b=void 0!==b?b:511,b&=1023,b|=16384,FS.mknod(a,b,0)},mkdirTree:function(a,b){for(var c=a.split("/"),d="",e=0;e<c.length;++e)if(c[e]){d+="/"+c[e];try{FS.mkdir(d,b)}catch(a){if(a.errno!=ERRNO_CODES.EEXIST)throw a}}},mkdev:function(a,b,c){return void 0===c&&(c=b,b=438),b|=8192,FS.mknod(a,b,c)},symlink:function(a,b){if(!PATH.resolve(a))throw new FS.ErrnoError(ERRNO_CODES.ENOENT);var c=FS.lookupPath(b,{parent:!0}),d=c.node;if(!d)throw new FS.ErrnoError(ERRNO_CODES.ENOENT);var e=PATH.basename(b),f=FS.mayCreate(d,e);if(f)throw new FS.ErrnoError(f);if(!d.node_ops.symlink)throw new FS.ErrnoError(ERRNO_CODES.EPERM);return d.node_ops.symlink(d,e,a)},rename:function(a,b){var g,h,i,c=PATH.dirname(a),d=PATH.dirname(b),e=PATH.basename(a),f=PATH.basename(b);try{g=FS.lookupPath(a,{parent:!0}),h=g.node,g=FS.lookupPath(b,{parent:!0}),i=g.node}catch(a){throw new FS.ErrnoError(ERRNO_CODES.EBUSY)}if(!h||!i)throw new FS.ErrnoError(ERRNO_CODES.ENOENT);if(h.mount!==i.mount)throw new FS.ErrnoError(ERRNO_CODES.EXDEV);var j=FS.lookupNode(h,e),k=PATH.relative(a,d);if("."!==k.charAt(0))throw new FS.ErrnoError(ERRNO_CODES.EINVAL);if(k=PATH.relative(b,c),"."!==k.charAt(0))throw new FS.ErrnoError(ERRNO_CODES.ENOTEMPTY);var l;try{l=FS.lookupNode(i,f)}catch(a){}if(j!==l){var m=FS.isDir(j.mode),n=FS.mayDelete(h,e,m);if(n)throw new FS.ErrnoError(n);if(n=l?FS.mayDelete(i,f,m):FS.mayCreate(i,f))throw new FS.ErrnoError(n);if(!h.node_ops.rename)throw new FS.ErrnoError(ERRNO_CODES.EPERM);if(FS.isMountpoint(j)||l&&FS.isMountpoint(l))throw new FS.ErrnoError(ERRNO_CODES.EBUSY);if(i!==h&&(n=FS.nodePermissions(h,"w")))throw new FS.ErrnoError(n);try{FS.trackingDelegate.willMovePath&&FS.trackingDelegate.willMovePath(a,b)}catch(c){console.log("FS.trackingDelegate['willMovePath']('"+a+"', '"+b+"') threw an exception: "+c.message)}FS.hashRemoveNode(j);try{h.node_ops.rename(j,i,f)}catch(a){throw a}finally{FS.hashAddNode(j)}try{FS.trackingDelegate.onMovePath&&FS.trackingDelegate.onMovePath(a,b)}catch(c){console.log("FS.trackingDelegate['onMovePath']('"+a+"', '"+b+"') threw an exception: "+c.message)}}},rmdir:function(a){var b=FS.lookupPath(a,{parent:!0}),c=b.node,d=PATH.basename(a),e=FS.lookupNode(c,d),f=FS.mayDelete(c,d,!0);if(f)throw new FS.ErrnoError(f);if(!c.node_ops.rmdir)throw new FS.ErrnoError(ERRNO_CODES.EPERM);if(FS.isMountpoint(e))throw new FS.ErrnoError(ERRNO_CODES.EBUSY);try{FS.trackingDelegate.willDeletePath&&FS.trackingDelegate.willDeletePath(a)}catch(b){console.log("FS.trackingDelegate['willDeletePath']('"+a+"') threw an exception: "+b.message)}c.node_ops.rmdir(c,d),FS.destroyNode(e);try{FS.trackingDelegate.onDeletePath&&FS.trackingDelegate.onDeletePath(a)}catch(b){console.log("FS.trackingDelegate['onDeletePath']('"+a+"') threw an exception: "+b.message)}},readdir:function(a){var b=FS.lookupPath(a,{follow:!0}),c=b.node;if(!c.node_ops.readdir)throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR);return c.node_ops.readdir(c)},unlink:function(a){var b=FS.lookupPath(a,{parent:!0}),c=b.node,d=PATH.basename(a),e=FS.lookupNode(c,d),f=FS.mayDelete(c,d,!1);if(f)throw new FS.ErrnoError(f);if(!c.node_ops.unlink)throw new FS.ErrnoError(ERRNO_CODES.EPERM);if(FS.isMountpoint(e))throw new FS.ErrnoError(ERRNO_CODES.EBUSY);try{FS.trackingDelegate.willDeletePath&&FS.trackingDelegate.willDeletePath(a)}catch(b){console.log("FS.trackingDelegate['willDeletePath']('"+a+"') threw an exception: "+b.message)}c.node_ops.unlink(c,d),FS.destroyNode(e);try{FS.trackingDelegate.onDeletePath&&FS.trackingDelegate.onDeletePath(a)}catch(b){console.log("FS.trackingDelegate['onDeletePath']('"+a+"') threw an exception: "+b.message)}},readlink:function(a){var b=FS.lookupPath(a),c=b.node;if(!c)throw new FS.ErrnoError(ERRNO_CODES.ENOENT);if(!c.node_ops.readlink)throw new FS.ErrnoError(ERRNO_CODES.EINVAL);return PATH.resolve(FS.getPath(c.parent),c.node_ops.readlink(c))},stat:function(a,b){var c=FS.lookupPath(a,{follow:!b}),d=c.node;if(!d)throw new FS.ErrnoError(ERRNO_CODES.ENOENT);if(!d.node_ops.getattr)throw new FS.ErrnoError(ERRNO_CODES.EPERM);return d.node_ops.getattr(d)},lstat:function(a){return FS.stat(a,!0)},chmod:function(a,b,c){var d;if("string"==typeof a){d=FS.lookupPath(a,{follow:!c}).node}else d=a;if(!d.node_ops.setattr)throw new FS.ErrnoError(ERRNO_CODES.EPERM);d.node_ops.setattr(d,{mode:4095&b|-4096&d.mode,timestamp:Date.now()})},lchmod:function(a,b){FS.chmod(a,b,!0)},fchmod:function(a,b){var c=FS.getStream(a);if(!c)throw new FS.ErrnoError(ERRNO_CODES.EBADF);FS.chmod(c.node,b)},chown:function(a,b,c,d){var e;if("string"==typeof a){e=FS.lookupPath(a,{follow:!d}).node}else e=a;if(!e.node_ops.setattr)throw new FS.ErrnoError(ERRNO_CODES.EPERM);e.node_ops.setattr(e,{timestamp:Date.now()})},lchown:function(a,b,c){FS.chown(a,b,c,!0)},fchown:function(a,b,c){var d=FS.getStream(a);if(!d)throw new FS.ErrnoError(ERRNO_CODES.EBADF);FS.chown(d.node,b,c)},truncate:function(a,b){if(b<0)throw new FS.ErrnoError(ERRNO_CODES.EINVAL);var c;if("string"==typeof a){c=FS.lookupPath(a,{follow:!0}).node}else c=a;if(!c.node_ops.setattr)throw new FS.ErrnoError(ERRNO_CODES.EPERM);if(FS.isDir(c.mode))throw new FS.ErrnoError(ERRNO_CODES.EISDIR);if(!FS.isFile(c.mode))throw new FS.ErrnoError(ERRNO_CODES.EINVAL);var e=FS.nodePermissions(c,"w");if(e)throw new FS.ErrnoError(e);c.node_ops.setattr(c,{size:b,timestamp:Date.now()})},ftruncate:function(a,b){var c=FS.getStream(a);if(!c)throw new FS.ErrnoError(ERRNO_CODES.EBADF);if(0==(2097155&c.flags))throw new FS.ErrnoError(ERRNO_CODES.EINVAL);FS.truncate(c.node,b)},utime:function(a,b,c){var d=FS.lookupPath(a,{follow:!0}),e=d.node;e.node_ops.setattr(e,{timestamp:Math.max(b,c)})},open:function(a,b,c,d,e){if(""===a)throw new FS.ErrnoError(ERRNO_CODES.ENOENT);b="string"==typeof b?FS.modeStringToFlags(b):b,c=void 0===c?438:c,c=64&b?4095&c|32768:0;var f;if("object"==typeof a)f=a;else{a=PATH.normalize(a);try{f=FS.lookupPath(a,{follow:!(131072&b)}).node}catch(a){}}var h=!1;if(64&b)if(f){if(128&b)throw new FS.ErrnoError(ERRNO_CODES.EEXIST)}else f=FS.mknod(a,c,0),h=!0;if(!f)throw new FS.ErrnoError(ERRNO_CODES.ENOENT);if(FS.isChrdev(f.mode)&&(b&=-513),65536&b&&!FS.isDir(f.mode))throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR);if(!h){var i=FS.mayOpen(f,b);if(i)throw new FS.ErrnoError(i)}512&b&&FS.truncate(f,0),b&=-641;var j=FS.createStream({node:f,path:FS.getPath(f),flags:b,seekable:!0,position:0,stream_ops:f.stream_ops,ungotten:[],error:!1},d,e);j.stream_ops.open&&j.stream_ops.open(j),!Module.logReadFiles||1&b||(FS.readFiles||(FS.readFiles={}),a in FS.readFiles||(FS.readFiles[a]=1,Module.printErr("read file: "+a)));try{if(FS.trackingDelegate.onOpenFile){var k=0;1!=(2097155&b)&&(k|=FS.tracking.openFlags.READ),0!=(2097155&b)&&(k|=FS.tracking.openFlags.WRITE),FS.trackingDelegate.onOpenFile(a,k)}}catch(b){console.log("FS.trackingDelegate['onOpenFile']('"+a+"', flags) threw an exception: "+b.message)}return j},close:function(a){a.getdents&&(a.getdents=null);try{a.stream_ops.close&&a.stream_ops.close(a)}catch(a){throw a}finally{FS.closeStream(a.fd)}},llseek:function(a,b,c){if(!a.seekable||!a.stream_ops.llseek)throw new FS.ErrnoError(ERRNO_CODES.ESPIPE);return a.position=a.stream_ops.llseek(a,b,c),a.ungotten=[],a.position},read:function(a,b,c,d,e){if(d<0||e<0)throw new FS.ErrnoError(ERRNO_CODES.EINVAL);if(1==(2097155&a.flags))throw new FS.ErrnoError(ERRNO_CODES.EBADF);if(FS.isDir(a.node.mode))throw new FS.ErrnoError(ERRNO_CODES.EISDIR);if(!a.stream_ops.read)throw new FS.ErrnoError(ERRNO_CODES.EINVAL);var f=!0;if(void 0===e)e=a.position,f=!1;else if(!a.seekable)throw new FS.ErrnoError(ERRNO_CODES.ESPIPE);var g=a.stream_ops.read(a,b,c,d,e);return f||(a.position+=g),g},write:function(a,b,c,d,e,f){if(d<0||e<0)throw new FS.ErrnoError(ERRNO_CODES.EINVAL);if(0==(2097155&a.flags))throw new FS.ErrnoError(ERRNO_CODES.EBADF);if(FS.isDir(a.node.mode))throw new FS.ErrnoError(ERRNO_CODES.EISDIR);if(!a.stream_ops.write)throw new FS.ErrnoError(ERRNO_CODES.EINVAL);1024&a.flags&&FS.llseek(a,0,2);var g=!0;if(void 0===e)e=a.position,g=!1;else if(!a.seekable)throw new FS.ErrnoError(ERRNO_CODES.ESPIPE);var h=a.stream_ops.write(a,b,c,d,e,f);g||(a.position+=h);try{a.path&&FS.trackingDelegate.onWriteToFile&&FS.trackingDelegate.onWriteToFile(a.path)}catch(a){console.log("FS.trackingDelegate['onWriteToFile']('"+path+"') threw an exception: "+a.message)}return h},allocate:function(a,b,c){if(b<0||c<=0)throw new FS.ErrnoError(ERRNO_CODES.EINVAL);if(0==(2097155&a.flags))throw new FS.ErrnoError(ERRNO_CODES.EBADF);if(!FS.isFile(a.node.mode)&&!FS.isDir(node.mode))throw new FS.ErrnoError(ERRNO_CODES.ENODEV);if(!a.stream_ops.allocate)throw new FS.ErrnoError(ERRNO_CODES.EOPNOTSUPP);a.stream_ops.allocate(a,b,c)},mmap:function(a,b,c,d,e,f,g){if(1==(2097155&a.flags))throw new FS.ErrnoError(ERRNO_CODES.EACCES);if(!a.stream_ops.mmap)throw new FS.ErrnoError(ERRNO_CODES.ENODEV);return a.stream_ops.mmap(a,b,c,d,e,f,g)},msync:function(a,b,c,d,e){return a&&a.stream_ops.msync?a.stream_ops.msync(a,b,c,d,e):0},munmap:function(a){return 0},ioctl:function(a,b,c){if(!a.stream_ops.ioctl)throw new FS.ErrnoError(ERRNO_CODES.ENOTTY);return a.stream_ops.ioctl(a,b,c)},readFile:function(a,b){if(b=b||{},b.flags=b.flags||"r",b.encoding=b.encoding||"binary","utf8"!==b.encoding&&"binary"!==b.encoding)throw new Error('Invalid encoding type "'+b.encoding+'"');var c,d=FS.open(a,b.flags),e=FS.stat(a),f=e.size,g=new Uint8Array(f);return FS.read(d,g,0,f,0),"utf8"===b.encoding?c=UTF8ArrayToString(g,0):"binary"===b.encoding&&(c=g),FS.close(d),c},writeFile:function(a,b,c){if(c=c||{},c.flags=c.flags||"w",c.encoding=c.encoding||"utf8","utf8"!==c.encoding&&"binary"!==c.encoding)throw new Error('Invalid encoding type "'+c.encoding+'"');var d=FS.open(a,c.flags,c.mode);if("utf8"===c.encoding){var e=new Uint8Array(lengthBytesUTF8(b)+1),f=stringToUTF8Array(b,e,0,e.length);FS.write(d,e,0,f,0,c.canOwn)}else"binary"===c.encoding&&FS.write(d,b,0,b.length,0,c.canOwn);FS.close(d)},cwd:function(){return FS.currentPath},chdir:function(a){var b=FS.lookupPath(a,{follow:!0});if(null===b.node)throw new FS.ErrnoError(ERRNO_CODES.ENOENT);if(!FS.isDir(b.node.mode))throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR);var c=FS.nodePermissions(b.node,"x");if(c)throw new FS.ErrnoError(c);FS.currentPath=b.path},createDefaultDirectories:function(){FS.mkdir("/tmp"),FS.mkdir("/home"),FS.mkdir("/home/web_user")},createDefaultDevices:function(){FS.mkdir("/dev"),FS.registerDevice(FS.makedev(1,3),{read:function(){return 0},write:function(a,b,c,d,e){return d}}),FS.mkdev("/dev/null",FS.makedev(1,3)),TTY.register(FS.makedev(5,0),TTY.default_tty_ops),TTY.register(FS.makedev(6,0),TTY.default_tty1_ops),FS.mkdev("/dev/tty",FS.makedev(5,0)),FS.mkdev("/dev/tty1",FS.makedev(6,0));var a;if("undefined"!=typeof crypto){var b=new Uint8Array(1);a=function(){return crypto.getRandomValues(b),b[0]}}else a=ENVIRONMENT_IS_NODE?function(){return require("crypto").randomBytes(1)[0]}:function(){return 256*Math.random()|0};FS.createDevice("/dev","random",a),FS.createDevice("/dev","urandom",a),FS.mkdir("/dev/shm"),FS.mkdir("/dev/shm/tmp")},createSpecialDirectories:function(){FS.mkdir("/proc"),FS.mkdir("/proc/self"),FS.mkdir("/proc/self/fd"),FS.mount({mount:function(){var a=FS.createNode("/proc/self","fd",16895,73);return a.node_ops={lookup:function(a,b){var c=+b,d=FS.getStream(c);if(!d)throw new FS.ErrnoError(ERRNO_CODES.EBADF);var e={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:function(){return d.path}}};return e.parent=e,e}},a}},{},"/proc/self/fd")},createStandardStreams:function(){Module.stdin?FS.createDevice("/dev","stdin",Module.stdin):FS.symlink("/dev/tty","/dev/stdin"),Module.stdout?FS.createDevice("/dev","stdout",null,Module.stdout):FS.symlink("/dev/tty","/dev/stdout"),Module.stderr?FS.createDevice("/dev","stderr",null,Module.stderr):FS.symlink("/dev/tty1","/dev/stderr");var a=FS.open("/dev/stdin","r");assert(0===a.fd,"invalid handle for stdin ("+a.fd+")");var b=FS.open("/dev/stdout","w");assert(1===b.fd,"invalid handle for stdout ("+b.fd+")");var c=FS.open("/dev/stderr","w");assert(2===c.fd,"invalid handle for stderr ("+c.fd+")")},ensureErrnoError:function(){FS.ErrnoError||(FS.ErrnoError=function(b,c){this.node=c,this.setErrno=function(a){this.errno=a;for(var b in ERRNO_CODES)if(ERRNO_CODES[b]===a){this.code=b;break}},this.setErrno(b),this.message=ERRNO_MESSAGES[b],this.stack&&(this.stack=demangleAll(this.stack))},FS.ErrnoError.prototype=new Error,FS.ErrnoError.prototype.constructor=FS.ErrnoError,[ERRNO_CODES.ENOENT].forEach(function(a){FS.genericErrors[a]=new FS.ErrnoError(a),FS.genericErrors[a].stack="<generic error, no stack>"}))},staticInit:function(){FS.ensureErrnoError(),FS.nameTable=new Array(4096),FS.mount(MEMFS,{},"/"),FS.createDefaultDirectories(),FS.createDefaultDevices(),FS.createSpecialDirectories(),FS.filesystems={MEMFS:MEMFS,IDBFS:IDBFS,NODEFS:NODEFS,WORKERFS:WORKERFS}},init:function(a,b,c){assert(!FS.init.initialized,"FS.init was previously called. If you want to initialize later with custom parameters, remove any earlier calls (note that one is automatically added to the generated code)"),FS.init.initialized=!0,FS.ensureErrnoError(),Module.stdin=a||Module.stdin,Module.stdout=b||Module.stdout,Module.stderr=c||Module.stderr,FS.createStandardStreams()},quit:function(){FS.init.initialized=!1;var a=Module._fflush;a&&a(0);for(var b=0;b<FS.streams.length;b++){var c=FS.streams[b];c&&FS.close(c)}},getMode:function(a,b){var c=0;return a&&(c|=365),b&&(c|=146),c},joinPath:function(a,b){var c=PATH.join.apply(null,a);return b&&"/"==c[0]&&(c=c.substr(1)),c},absolutePath:function(a,b){return PATH.resolve(b,a)},standardizePath:function(a){return PATH.normalize(a)},findObject:function(a,b){var c=FS.analyzePath(a,b);return c.exists?c.object:(___setErrNo(c.error),null)},analyzePath:function(a,b){try{var c=FS.lookupPath(a,{follow:!b});a=c.path}catch(a){}var d={isRoot:!1,exists:!1,error:0,name:null,path:null,object:null,parentExists:!1,parentPath:null,parentObject:null};try{var c=FS.lookupPath(a,{parent:!0});d.parentExists=!0,d.parentPath=c.path,d.parentObject=c.node,d.name=PATH.basename(a),c=FS.lookupPath(a,{follow:!b}),d.exists=!0,d.path=c.path,d.object=c.node,d.name=c.node.name,d.isRoot="/"===c.path}catch(a){d.error=a.errno}return d},createFolder:function(a,b,c,d){var e=PATH.join2("string"==typeof a?a:FS.getPath(a),b),f=FS.getMode(c,d);return FS.mkdir(e,f)},createPath:function(a,b,c,d){a="string"==typeof a?a:FS.getPath(a);for(var e=b.split("/").reverse();e.length;){var f=e.pop();if(f){var g=PATH.join2(a,f);try{FS.mkdir(g)}catch(a){}a=g}}return g},createFile:function(a,b,c,d,e){var f=PATH.join2("string"==typeof a?a:FS.getPath(a),b),g=FS.getMode(d,e);return FS.create(f,g)},createDataFile:function(a,b,c,d,e,f){var g=b?PATH.join2("string"==typeof a?a:FS.getPath(a),b):a,h=FS.getMode(d,e),i=FS.create(g,h);if(c){if("string"==typeof c){for(var j=new Array(c.length),k=0,l=c.length;k<l;++k)j[k]=c.charCodeAt(k);c=j}FS.chmod(i,146|h);var m=FS.open(i,"w");FS.write(m,c,0,c.length,0,f),FS.close(m),FS.chmod(i,h)}return i},createDevice:function(a,b,c,d){var e=PATH.join2("string"==typeof a?a:FS.getPath(a),b),f=FS.getMode(!!c,!!d);FS.createDevice.major||(FS.createDevice.major=64);var g=FS.makedev(FS.createDevice.major++,0);return FS.registerDevice(g,{open:function(a){a.seekable=!1},close:function(a){d&&d.buffer&&d.buffer.length&&d(10)},read:function(a,b,d,e,f){for(var g=0,h=0;h<e;h++){var i;try{i=c()}catch(a){throw new FS.ErrnoError(ERRNO_CODES.EIO)}if(void 0===i&&0===g)throw new FS.ErrnoError(ERRNO_CODES.EAGAIN);if(null===i||void 0===i)break;g++,b[d+h]=i}return g&&(a.node.timestamp=Date.now()),g},write:function(a,b,c,e,f){for(var g=0;g<e;g++)try{d(b[c+g])}catch(a){throw new FS.ErrnoError(ERRNO_CODES.EIO)}return e&&(a.node.timestamp=Date.now()),g}}),FS.mkdev(e,f,g)},createLink:function(a,b,c,d,e){var f=PATH.join2("string"==typeof a?a:FS.getPath(a),b);return FS.symlink(c,f)},forceLoadFile:function(a){if(a.isDevice||a.isFolder||a.link||a.contents)return!0;var b=!0;if("undefined"!=typeof XMLHttpRequest)throw new Error("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.");if(!Module.read)throw new Error("Cannot load without read() or XMLHttpRequest.");try{a.contents=intArrayFromString(Module.read(a.url),!0),a.usedBytes=a.contents.length}catch(a){b=!1}return b||___setErrNo(ERRNO_CODES.EIO),b},createLazyFile:function(a,b,c,d,e){function f(){this.lengthKnown=!1,this.chunks=[]}if(f.prototype.get=function(b){if(!(b>this.length-1||b<0)){var c=b%this.chunkSize,d=b/this.chunkSize|0;return this.getter(d)[c]}},f.prototype.setDataGetter=function(b){this.getter=b},f.prototype.cacheLength=function(){var b=new XMLHttpRequest;if(b.open("HEAD",c,!1),b.send(null),!(b.status>=200&&b.status<300||304===b.status))throw new Error("Couldn't load "+c+". Status: "+b.status);var e,d=Number(b.getResponseHeader("Content-length")),f=(e=b.getResponseHeader("Accept-Ranges"))&&"bytes"===e,g=(e=b.getResponseHeader("Content-Encoding"))&&"gzip"===e,h=1048576;f||(h=d);var i=function(a,b){if(a>b)throw new Error("invalid range ("+a+", "+b+") or no bytes requested!");if(b>d-1)throw new Error("only "+d+" bytes available! programmer error!");var e=new XMLHttpRequest;if(e.open("GET",c,!1),d!==h&&e.setRequestHeader("Range","bytes="+a+"-"+b),"undefined"!=typeof Uint8Array&&(e.responseType="arraybuffer"),e.overrideMimeType&&e.overrideMimeType("text/plain; charset=x-user-defined"),e.send(null),!(e.status>=200&&e.status<300||304===e.status))throw new Error("Couldn't load "+c+". Status: "+e.status);return void 0!==e.response?new Uint8Array(e.response||[]):intArrayFromString(e.responseText||"",!0)},j=this;j.setDataGetter(function(a){var b=a*h,c=(a+1)*h-1;if(c=Math.min(c,d-1),void 0===j.chunks[a]&&(j.chunks[a]=i(b,c)),void 0===j.chunks[a])throw new Error("doXHR failed!");return j.chunks[a]}),!g&&d||(h=d=1,d=this.getter(0).length,h=d,console.log("LazyFiles on gzip forces download of the whole file when length is accessed")),this._length=d,this._chunkSize=h,this.lengthKnown=!0},"undefined"!=typeof XMLHttpRequest){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var g=new f;Object.defineProperties(g,{length:{get:function(){return this.lengthKnown||this.cacheLength(),this._length}},chunkSize:{get:function(){return this.lengthKnown||this.cacheLength(),this._chunkSize}}});var h={isDevice:!1,contents:g}}else var h={isDevice:!1,url:c};var i=FS.createFile(a,b,h,d,e);h.contents?i.contents=h.contents:h.url&&(i.contents=null,i.url=h.url),Object.defineProperties(i,{usedBytes:{get:function(){return this.contents.length}}});var j={};return Object.keys(i.stream_ops).forEach(function(a){var b=i.stream_ops[a];j[a]=function(){if(!FS.forceLoadFile(i))throw new FS.ErrnoError(ERRNO_CODES.EIO);return b.apply(null,arguments)}}),j.read=function(b,c,d,e,f){if(!FS.forceLoadFile(i))throw new FS.ErrnoError(ERRNO_CODES.EIO);var g=b.node.contents;if(f>=g.length)return 0;var h=Math.min(g.length-f,e);if(assert(h>=0),g.slice)for(var j=0;j<h;j++)c[d+j]=g[f+j];else for(var j=0;j<h;j++)c[d+j]=g.get(f+j);return h},i.stream_ops=j,i},createPreloadedFile:function(a,b,c,d,e,f,g,h,i,j){function m(c){function m(c){j&&j(),h||FS.createDataFile(a,b,c,d,e,i),f&&f(),removeRunDependency(l)}var n=!1;Module.preloadPlugins.forEach(function(a){n||a.canHandle(k)&&(a.handle(c,k,m,function(){g&&g(),removeRunDependency(l)}),n=!0)}),n||m(c)}Browser.init();var k=b?PATH.resolve(PATH.join2(a,b)):a,l=getUniqueRunDependency("cp "+k);addRunDependency(l),"string"==typeof c?Browser.asyncLoad(c,function(a){m(a)},g):m(c)},indexedDB:function(){return window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB},DB_NAME:function(){return"EM_FS_"+window.location.pathname},DB_VERSION:20,DB_STORE_NAME:"FILE_DATA",saveFilesToDB:function(a,b,c){b=b||function(){},c=c||function(){};var d=FS.indexedDB();try{var e=d.open(FS.DB_NAME(),FS.DB_VERSION)}catch(a){return c(a)}e.onupgradeneeded=function(){console.log("creating db"),e.result.createObjectStore(FS.DB_STORE_NAME)},e.onsuccess=function(){function l(){0==j?b():c()}var f=e.result,g=f.transaction([FS.DB_STORE_NAME],"readwrite"),h=g.objectStore(FS.DB_STORE_NAME),i=0,j=0,k=a.length;a.forEach(function(a){var b=h.put(FS.analyzePath(a).object.contents,a);b.onsuccess=function(){++i+j==k&&l()},b.onerror=function(){j++,i+j==k&&l()}}),g.onerror=c},e.onerror=c},loadFilesFromDB:function(a,b,c){b=b||function(){},c=c||function(){};var d=FS.indexedDB();try{var e=d.open(FS.DB_NAME(),FS.DB_VERSION)}catch(a){return c(a)}e.onupgradeneeded=c,e.onsuccess=function(){function l(){0==j?b():c()}var f=e.result;try{var g=f.transaction([FS.DB_STORE_NAME],"readonly")}catch(a){return void c(a)}var h=g.objectStore(FS.DB_STORE_NAME),i=0,j=0,k=a.length;a.forEach(function(a){var b=h.get(a);b.onsuccess=function(){FS.analyzePath(a).exists&&FS.unlink(a),FS.createDataFile(PATH.dirname(a),PATH.basename(a),b.result,!0,!0,!0),++i+j==k&&l()},b.onerror=function(){j++,i+j==k&&l()}}),g.onerror=c},e.onerror=c}},SYSCALLS={DEFAULT_POLLMASK:5,mappings:{},umask:511,calculateAt:function(a,b){if("/"!==b[0]){var c;if(-100===a)c=FS.cwd();else{var d=FS.getStream(a);if(!d)throw new FS.ErrnoError(ERRNO_CODES.EBADF);c=d.path}b=PATH.join2(c,b)}return b},doStat:function(a,b,c){try{var d=a(b)}catch(a){if(a&&a.node&&PATH.normalize(b)!==PATH.normalize(FS.getPath(a.node)))return-ERRNO_CODES.ENOTDIR;throw a}return HEAP32[c>>2]=d.dev,HEAP32[c+4>>2]=0,HEAP32[c+8>>2]=d.ino,HEAP32[c+12>>2]=d.mode,HEAP32[c+16>>2]=d.nlink,HEAP32[c+20>>2]=d.uid,HEAP32[c+24>>2]=d.gid,HEAP32[c+28>>2]=d.rdev,HEAP32[c+32>>2]=0,HEAP32[c+36>>2]=d.size,HEAP32[c+40>>2]=4096,HEAP32[c+44>>2]=d.blocks,HEAP32[c+48>>2]=d.atime.getTime()/1e3|0,HEAP32[c+52>>2]=0,HEAP32[c+56>>2]=d.mtime.getTime()/1e3|0,HEAP32[c+60>>2]=0,HEAP32[c+64>>2]=d.ctime.getTime()/1e3|0,HEAP32[c+68>>2]=0,HEAP32[c+72>>2]=d.ino,0},doMsync:function(a,b,c,d){var e=new Uint8Array(HEAPU8.subarray(a,a+c));FS.msync(b,e,0,c,d)},doMkdir:function(a,b){return a=PATH.normalize(a),"/"===a[a.length-1]&&(a=a.substr(0,a.length-1)),FS.mkdir(a,b,0),0},doMknod:function(a,b,c){switch(61440&b){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-ERRNO_CODES.EINVAL}return FS.mknod(a,b,c),0},doReadlink:function(a,b,c){if(c<=0)return-ERRNO_CODES.EINVAL;var d=FS.readlink(a),e=Math.min(c,lengthBytesUTF8(d)),f=HEAP8[b+e];return stringToUTF8(d,b,c+1),HEAP8[b+e]=f,e},doAccess:function(a,b){if(-8&b)return-ERRNO_CODES.EINVAL;var c;c=FS.lookupPath(a,{follow:!0}).node;var e="";return 4&b&&(e+="r"),2&b&&(e+="w"),1&b&&(e+="x"),e&&FS.nodePermissions(c,e)?-ERRNO_CODES.EACCES:0},doDup:function(a,b,c){var d=FS.getStream(c);return d&&FS.close(d),FS.open(a,b,0,c,c).fd},doReadv:function(a,b,c,d){for(var e=0,f=0;f<c;f++){var g=HEAP32[b+8*f>>2],h=HEAP32[b+(8*f+4)>>2],i=FS.read(a,HEAP8,g,h,d);if(i<0)return-1;if(e+=i,i<h)break}return e},doWritev:function(a,b,c,d){for(var e=0,f=0;f<c;f++){var g=HEAP32[b+8*f>>2],h=HEAP32[b+(8*f+4)>>2],i=FS.write(a,HEAP8,g,h,d);if(i<0)return-1;e+=i}return e},varargs:0,get:function(a){return SYSCALLS.varargs+=4,HEAP32[SYSCALLS.varargs-4>>2]},getStr:function(){return Pointer_stringify(SYSCALLS.get())},getStreamFromFD:function(){var a=FS.getStream(SYSCALLS.get());if(!a)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return a},getSocketFromFD:function(){var a=SOCKFS.getSocket(SYSCALLS.get());if(!a)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return a},getSocketAddress:function(a){var b=SYSCALLS.get(),c=SYSCALLS.get();if(a&&0===b)return null;var d=__read_sockaddr(b,c);if(d.errno)throw new FS.ErrnoError(d.errno);return d.addr=DNS.lookup_addr(d.addr)||d.addr,d},get64:function(){var a=SYSCALLS.get(),b=SYSCALLS.get();return assert(a>=0?0===b:-1===b),a},getZero:function(){assert(0===SYSCALLS.get())}};Module._llvm_bswap_i32=_llvm_bswap_i32;var cttz_i8=allocate([8,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,7,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0],"i8",ALLOC_STATIC);Module._llvm_cttz_i32=_llvm_cttz_i32,Module.___udivmoddi4=___udivmoddi4,Module.___udivdi3=___udivdi3,Module.___muldsi3=___muldsi3,Module.___muldi3=___muldi3;var _llvm_pow_f64=Math_pow;Module._sbrk=_sbrk,Module._memcpy=_memcpy,Module._memmove=_memmove,Module.___uremdi3=___uremdi3;var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null,Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var a=Browser.mainLoop.timingMode,b=Browser.mainLoop.timingValue,c=Browser.mainLoop.func;Browser.mainLoop.func=null,_emscripten_set_main_loop(c,0,!1,Browser.mainLoop.arg,!0),_emscripten_set_main_loop_timing(a,b),Browser.mainLoop.scheduler()},updateStatus:function(){if(Module.setStatus){var a=Module.statusMessage||"Please wait...",b=Browser.mainLoop.remainingBlockers,c=Browser.mainLoop.expectedBlockers;b?b<c?Module.setStatus(a+" ("+(c-b)+"/"+c+")"):Module.setStatus(a):Module.setStatus("")}},runIter:function(a){if(!ABORT){if(Module.preMainLoop){if(!1===Module.preMainLoop())return}try{a()}catch(a){if(a instanceof ExitStatus)return;throw a&&"object"==typeof a&&a.stack&&Module.printErr("exception thrown: "+[a,a.stack]),a}Module.postMainLoop&&Module.postMainLoop()}}},isFullscreen:!1,pointerLock:!1,moduleContextCreatedCallbacks:[],workers:[],init:function(){function c(){Browser.pointerLock=document.pointerLockElement===Module.canvas||document.mozPointerLockElement===Module.canvas||document.webkitPointerLockElement===Module.canvas||document.msPointerLockElement===Module.canvas}if(Module.preloadPlugins||(Module.preloadPlugins=[]),!Browser.initted){Browser.initted=!0;try{new Blob,Browser.hasBlobConstructor=!0}catch(a){Browser.hasBlobConstructor=!1,console.log("warning: no blob constructor, cannot create blobs with mimetypes")}Browser.BlobBuilder="undefined"!=typeof MozBlobBuilder?MozBlobBuilder:"undefined"!=typeof WebKitBlobBuilder?WebKitBlobBuilder:Browser.hasBlobConstructor?null:console.log("warning: no BlobBuilder"),Browser.URLObject="undefined"!=typeof window?window.URL?window.URL:window.webkitURL:void 0,Module.noImageDecoding||void 0!==Browser.URLObject||(console.log("warning: Browser does not support creating object URLs. Built-in browser image decoding will not be available."),Module.noImageDecoding=!0);var a={};a.canHandle=function(b){return!Module.noImageDecoding&&/\.(jpg|jpeg|png|bmp)$/i.test(b)},a.handle=function(b,c,d,e){var f=null;if(Browser.hasBlobConstructor)try{f=new Blob([b],{type:Browser.getMimetype(c)}),f.size!==b.length&&(f=new Blob([new Uint8Array(b).buffer],{type:Browser.getMimetype(c)}))}catch(a){Runtime.warnOnce("Blob constructor present but fails: "+a+"; falling back to blob builder")}if(!f){var g=new Browser.BlobBuilder;g.append(new Uint8Array(b).buffer),f=g.getBlob()}var h=Browser.URLObject.createObjectURL(f);assert("string"==typeof h,"createObjectURL must return a url as a string");var i=new Image;i.onload=function(){assert(i.complete,"Image "+c+" could not be decoded");var e=document.createElement("canvas");e.width=i.width,e.height=i.height,e.getContext("2d").drawImage(i,0,0),Module.preloadedImages[c]=e,Browser.URLObject.revokeObjectURL(h),d&&d(b)},i.onerror=function(b){console.log("Image "+h+" could not be decoded"),e&&e()},i.src=h},Module.preloadPlugins.push(a);var b={};b.canHandle=function(b){return!Module.noAudioDecoding&&b.substr(-4)in{".ogg":1,".wav":1,".mp3":1}},b.handle=function(b,c,d,e){function g(a){f||(f=!0,Module.preloadedAudios[c]=a,d&&d(b))}function h(){f||(f=!0,Module.preloadedAudios[c]=new Audio,e&&e())}var f=!1;if(!Browser.hasBlobConstructor)return h();try{var i=new Blob([b],{type:Browser.getMimetype(c)})}catch(a){return h()}var j=Browser.URLObject.createObjectURL(i);assert("string"==typeof j,"createObjectURL must return a url as a string");var k=new Audio;k.addEventListener("canplaythrough",function(){g(k)},!1),k.onerror=function(d){function e(a){for(var b="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",c="=",d="",e=0,f=0,g=0;g<a.length;g++)for(e=e<<8|a[g],f+=8;f>=6;){var h=e>>f-6&63;f-=6,d+=b[h]}return 2==f?(d+=b[(3&e)<<4],d+=c+c):4==f&&(d+=b[(15&e)<<2],d+=c),d}f||(console.log("warning: browser could not fully decode audio "+c+", trying slower base64 approach"),k.src="data:audio/x-"+c.substr(-3)+";base64,"+e(b),g(k))},k.src=j,Browser.safeSetTimeout(function(){g(k)},1e4)},Module.preloadPlugins.push(b);var d=Module.canvas;d&&(d.requestPointerLock=d.requestPointerLock||d.mozRequestPointerLock||d.webkitRequestPointerLock||d.msRequestPointerLock||function(){},d.exitPointerLock=document.exitPointerLock||document.mozExitPointerLock||document.webkitExitPointerLock||document.msExitPointerLock||function(){},d.exitPointerLock=d.exitPointerLock.bind(document),document.addEventListener("pointerlockchange",c,!1),document.addEventListener("mozpointerlockchange",c,!1),document.addEventListener("webkitpointerlockchange",c,!1),document.addEventListener("mspointerlockchange",c,!1),Module.elementPointerLock&&d.addEventListener("click",function(a){!Browser.pointerLock&&Module.canvas.requestPointerLock&&(Module.canvas.requestPointerLock(),a.preventDefault())},!1))}},createContext:function(a,b,c,d){if(b&&Module.ctx&&a==Module.canvas)return Module.ctx;var e,f;if(b){var g={antialias:!1,alpha:!1};if(d)for(var h in d)g[h]=d[h];f=GL.createContext(a,g),f&&(e=GL.getContext(f).GLctx)}else e=a.getContext("2d");return e?(c&&(b||assert("undefined"==typeof GLctx,"cannot set in module if GLctx is used, but we are a non-GL context that would replace it"),Module.ctx=e,b&&GL.makeContextCurrent(f),Module.useWebGL=b,Browser.moduleContextCreatedCallbacks.forEach(function(a){a()}),Browser.init()),e):null},destroyContext:function(a,b,c){},fullscreenHandlersInstalled:!1,lockPointer:void 0,resizeCanvas:void 0,requestFullscreen:function(a,b,c){function e(){Browser.isFullscreen=!1;var a=d.parentNode;(document.fullscreenElement||document.mozFullScreenElement||document.msFullscreenElement||document.webkitFullscreenElement||document.webkitCurrentFullScreenElement)===a?(d.exitFullscreen=document.exitFullscreen||document.cancelFullScreen||document.mozCancelFullScreen||document.msExitFullscreen||document.webkitCancelFullScreen||function(){},d.exitFullscreen=d.exitFullscreen.bind(document),Browser.lockPointer&&d.requestPointerLock(),Browser.isFullscreen=!0,Browser.resizeCanvas&&Browser.setFullscreenCanvasSize()):(a.parentNode.insertBefore(d,a),a.parentNode.removeChild(a),Browser.resizeCanvas&&Browser.setWindowedCanvasSize()),Module.onFullScreen&&Module.onFullScreen(Browser.isFullscreen),Module.onFullscreen&&Module.onFullscreen(Browser.isFullscreen),Browser.updateCanvasDimensions(d)}Browser.lockPointer=a,Browser.resizeCanvas=b,Browser.vrDevice=c,void 0===Browser.lockPointer&&(Browser.lockPointer=!0),void 0===Browser.resizeCanvas&&(Browser.resizeCanvas=!1),void 0===Browser.vrDevice&&(Browser.vrDevice=null);var d=Module.canvas;Browser.fullscreenHandlersInstalled||(Browser.fullscreenHandlersInstalled=!0,document.addEventListener("fullscreenchange",e,!1),document.addEventListener("mozfullscreenchange",e,!1),document.addEventListener("webkitfullscreenchange",e,!1),document.addEventListener("MSFullscreenChange",e,!1));var f=document.createElement("div");d.parentNode.insertBefore(f,d),f.appendChild(d),f.requestFullscreen=f.requestFullscreen||f.mozRequestFullScreen||f.msRequestFullscreen||(f.webkitRequestFullscreen?function(){f.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT)}:null)||(f.webkitRequestFullScreen?function(){f.webkitRequestFullScreen(Element.ALLOW_KEYBOARD_INPUT)}:null),c?f.requestFullscreen({vrDisplay:c}):f.requestFullscreen()},requestFullScreen:function(a,b,c){return Module.printErr("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead."),Browser.requestFullScreen=function(a,b,c){return Browser.requestFullscreen(a,b,c)},Browser.requestFullscreen(a,b,c)},nextRAF:0,fakeRequestAnimationFrame:function(a){var b=Date.now();if(0===Browser.nextRAF)Browser.nextRAF=b+1e3/60;else for(;b+2>=Browser.nextRAF;)Browser.nextRAF+=1e3/60;var c=Math.max(Browser.nextRAF-b,0);setTimeout(a,c)},requestAnimationFrame:function(b){"undefined"==typeof window?Browser.fakeRequestAnimationFrame(b):(window.requestAnimationFrame||(window.requestAnimationFrame=window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.msRequestAnimationFrame||window.oRequestAnimationFrame||Browser.fakeRequestAnimationFrame),window.requestAnimationFrame(b))},safeCallback:function(a){return function(){if(!ABORT)return a.apply(null,arguments)}},allowAsyncCallbacks:!0,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=!1},resumeAsyncCallbacks:function(){if(Browser.allowAsyncCallbacks=!0,Browser.queuedAsyncCallbacks.length>0){var a=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[],a.forEach(function(a){a()})}},safeRequestAnimationFrame:function(a){return Browser.requestAnimationFrame(function(){ABORT||(Browser.allowAsyncCallbacks?a():Browser.queuedAsyncCallbacks.push(a))})},safeSetTimeout:function(a,b){return Module.noExitRuntime=!0,setTimeout(function(){ABORT||(Browser.allowAsyncCallbacks?a():Browser.queuedAsyncCallbacks.push(a))},b)},safeSetInterval:function(a,b){return Module.noExitRuntime=!0,setInterval(function(){ABORT||Browser.allowAsyncCallbacks&&a()},b)},getMimetype:function(a){return{jpg:"image/jpeg",jpeg:"image/jpeg",png:"image/png",bmp:"image/bmp",ogg:"audio/ogg",wav:"audio/wav",mp3:"audio/mpeg"}[a.substr(a.lastIndexOf(".")+1)]},getUserMedia:function(a){window.getUserMedia||(window.getUserMedia=navigator.getUserMedia||navigator.mozGetUserMedia),window.getUserMedia(a)},getMovementX:function(a){return a.movementX||a.mozMovementX||a.webkitMovementX||0},getMovementY:function(a){return a.movementY||a.mozMovementY||a.webkitMovementY||0},getMouseWheelDelta:function(a){var b=0;switch(a.type){case"DOMMouseScroll":b=a.detail;break;case"mousewheel":b=a.wheelDelta;break;case"wheel":b=a.deltaY;break;default:throw"unrecognized mouse wheel event: "+a.type}return b},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(a){if(Browser.pointerLock)"mousemove"!=a.type&&"mozMovementX"in a?Browser.mouseMovementX=Browser.mouseMovementY=0:(Browser.mouseMovementX=Browser.getMovementX(a),Browser.mouseMovementY=Browser.getMovementY(a)),"undefined"!=typeof SDL?(Browser.mouseX=SDL.mouseX+Browser.mouseMovementX,Browser.mouseY=SDL.mouseY+Browser.mouseMovementY):(Browser.mouseX+=Browser.mouseMovementX,Browser.mouseY+=Browser.mouseMovementY);else{var b=Module.canvas.getBoundingClientRect(),c=Module.canvas.width,d=Module.canvas.height,e=void 0!==window.scrollX?window.scrollX:window.pageXOffset,f=void 0!==window.scrollY?window.scrollY:window.pageYOffset;if(assert(void 0!==e&&void 0!==f,"Unable to retrieve scroll position, mouse positions likely broken."),"touchstart"===a.type||"touchend"===a.type||"touchmove"===a.type){var g=a.touch;if(void 0===g)return;var h=g.pageX-(e+b.left),i=g.pageY-(f+b.top);h*=c/b.width,i*=d/b.height;var j={x:h,y:i};if("touchstart"===a.type)Browser.lastTouches[g.identifier]=j,Browser.touches[g.identifier]=j;else if("touchend"===a.type||"touchmove"===a.type){var k=Browser.touches[g.identifier];k||(k=j),Browser.lastTouches[g.identifier]=k,Browser.touches[g.identifier]=j}return}var l=a.pageX-(e+b.left),m=a.pageY-(f+b.top);l*=c/b.width,m*=d/b.height,Browser.mouseMovementX=l-Browser.mouseX,Browser.mouseMovementY=m-Browser.mouseY,Browser.mouseX=l,Browser.mouseY=m}},asyncLoad:function(a,b,c,d){var e=d?"":getUniqueRunDependency("al "+a);Module.readAsync(a,function(c){assert(c,'Loading data file "'+a+'" failed (no arrayBuffer).'),b(new Uint8Array(c)),e&&removeRunDependency(e)},function(b){if(!c)throw'Loading data file "'+a+'" failed.';c()}),e&&addRunDependency(e)},resizeListeners:[],updateResizeListeners:function(){var a=Module.canvas;Browser.resizeListeners.forEach(function(b){b(a.width,a.height)})},setCanvasSize:function(a,b,c){var d=Module.canvas;Browser.updateCanvasDimensions(d,a,b),c||Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if("undefined"!=typeof SDL){var a=HEAPU32[SDL.screen+0*Runtime.QUANTUM_SIZE>>2];a|=8388608,HEAP32[SDL.screen+0*Runtime.QUANTUM_SIZE>>2]=a}Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if("undefined"!=typeof SDL){var a=HEAPU32[SDL.screen+0*Runtime.QUANTUM_SIZE>>2];a&=-8388609,HEAP32[SDL.screen+0*Runtime.QUANTUM_SIZE>>2]=a}Browser.updateResizeListeners()},updateCanvasDimensions:function(a,b,c){b&&c?(a.widthNative=b,a.heightNative=c):(b=a.widthNative,c=a.heightNative);var d=b,e=c;if(Module.forcedAspectRatio&&Module.forcedAspectRatio>0&&(d/e<Module.forcedAspectRatio?d=Math.round(e*Module.forcedAspectRatio):e=Math.round(d/Module.forcedAspectRatio)),(document.fullscreenElement||document.mozFullScreenElement||document.msFullscreenElement||document.webkitFullscreenElement||document.webkitCurrentFullScreenElement)===a.parentNode&&"undefined"!=typeof screen){var f=Math.min(screen.width/d,screen.height/e);d=Math.round(d*f),e=Math.round(e*f)}Browser.resizeCanvas?(a.width!=d&&(a.width=d),a.height!=e&&(a.height=e),void 0!==a.style&&(a.style.removeProperty("width"),a.style.removeProperty("height"))):(a.width!=b&&(a.width=b),a.height!=c&&(a.height=c),void 0!==a.style&&(d!=b||e!=c?(a.style.setProperty("width",d+"px","important"),a.style.setProperty("height",e+"px","important")):(a.style.removeProperty("width"),a.style.removeProperty("height"))))},wgetRequests:{},nextWgetRequestHandle:0,getNextWgetRequestHandle:function(){var a=Browser.nextWgetRequestHandle;return Browser.nextWgetRequestHandle++,a}};if(FS.staticInit(),__ATINIT__.unshift(function(){Module.noFSInit||FS.init.initialized||FS.init()}),__ATMAIN__.push(function(){FS.ignorePermissions=!1}),__ATEXIT__.push(function(){FS.quit()}),Module.FS_createFolder=FS.createFolder,Module.FS_createPath=FS.createPath,Module.FS_createDataFile=FS.createDataFile,Module.FS_createPreloadedFile=FS.createPreloadedFile,Module.FS_createLazyFile=FS.createLazyFile,Module.FS_createLink=FS.createLink,Module.FS_createDevice=FS.createDevice,Module.FS_unlink=FS.unlink,__ATINIT__.unshift(function(){TTY.init()}),__ATEXIT__.push(function(){TTY.shutdown()}),ENVIRONMENT_IS_NODE){var fs=require("fs"),NODEJS_PATH=require("path");NODEFS.staticInit()}Module.requestFullScreen=function(b,c,d){Module.printErr("Module.requestFullScreen is deprecated. Please call Module.requestFullscreen instead."),Module.requestFullScreen=Module.requestFullscreen,Browser.requestFullScreen(b,c,d)},Module.requestFullscreen=function(b,c,d){Browser.requestFullscreen(b,c,d)},Module.requestAnimationFrame=function(b){Browser.requestAnimationFrame(b)},Module.setCanvasSize=function(b,c,d){Browser.setCanvasSize(b,c,d)},Module.pauseMainLoop=function(){Browser.mainLoop.pause()},Module.resumeMainLoop=function(){Browser.mainLoop.resume()},Module.getUserMedia=function(){Browser.getUserMedia()},Module.createContext=function(b,c,d,e){return Browser.createContext(b,c,d,e)},_emscripten_get_now=ENVIRONMENT_IS_NODE?function(){var b=process.hrtime();return 1e3*b[0]+b[1]/1e6}:"undefined"!=typeof dateNow?dateNow:"object"==typeof self&&self.performance&&"function"==typeof self.performance.now?function(){return self.performance.now()}:"object"==typeof performance&&"function"==typeof performance.now?function(){return performance.now()}:Date.now,DYNAMICTOP_PTR=allocate(1,"i32",ALLOC_STATIC),STACK_BASE=STACKTOP=Runtime.alignMemory(STATICTOP),STACK_MAX=STACK_BASE+TOTAL_STACK,DYNAMIC_BASE=Runtime.alignMemory(STACK_MAX),HEAP32[DYNAMICTOP_PTR>>2]=DYNAMIC_BASE,staticSealed=!0,assert(DYNAMIC_BASE<TOTAL_MEMORY,"TOTAL_MEMORY not big enough for stack"),Module.asmGlobalArg={Math:Math,Int8Array:Int8Array,Int16Array:Int16Array,Int32Array:Int32Array,Uint8Array:Uint8Array,Uint16Array:Uint16Array,Uint32Array:Uint32Array,Float32Array:Float32Array,Float64Array:Float64Array,NaN:NaN,Infinity:1/0},Module.asmLibraryArg={abort:abort,assert:assert,enlargeMemory:enlargeMemory,getTotalMemory:getTotalMemory,abortOnCannotGrowMemory:abortOnCannotGrowMemory,abortStackOverflow:abortStackOverflow,nullFunc_iiii:nullFunc_iiii,nullFunc_viiiiiii:nullFunc_viiiiiii,nullFunc_viiiii:nullFunc_viiiii,nullFunc_vi:nullFunc_vi,nullFunc_vii:nullFunc_vii,nullFunc_ii:nullFunc_ii,nullFunc_viii:nullFunc_viii,nullFunc_iiiii:nullFunc_iiiii,nullFunc_viiiiii:nullFunc_viiiiii,nullFunc_iii:nullFunc_iii,nullFunc_viiii:nullFunc_viiii,invoke_iiii:invoke_iiii,invoke_viiiiiii:invoke_viiiiiii,invoke_viiiii:invoke_viiiii,invoke_vi:invoke_vi,invoke_vii:invoke_vii,invoke_ii:invoke_ii,invoke_viii:invoke_viii,invoke_iiiii:invoke_iiiii,invoke_viiiiii:invoke_viiiiii,invoke_iii:invoke_iii,invoke_viiii:invoke_viiii,___syscall221:___syscall221,_longjmp:_longjmp,___syscall146:___syscall146,_llvm_pow_f64:_llvm_pow_f64,_emscripten_set_main_loop:_emscripten_set_main_loop,___lock:___lock,___syscall6:___syscall6,___syscall5:___syscall5,_abort:_abort,___syscall140:___syscall140,_emscripten_longjmp:_emscripten_longjmp,___setErrNo:___setErrNo,_emscripten_memcpy_big:_emscripten_memcpy_big,___syscall54:___syscall54,___unlock:___unlock,_exit:_exit,_emscripten_set_main_loop_timing:_emscripten_set_main_loop_timing,__exit:__exit,___syscall145:___syscall145,_emscripten_get_now:_emscripten_get_now,DYNAMICTOP_PTR:DYNAMICTOP_PTR,tempDoublePtr:tempDoublePtr,ABORT:ABORT,STACKTOP:STACKTOP,STACK_MAX:STACK_MAX,cttz_i8:cttz_i8};var asm=function(a,b,c){"almost asm";function Ua(a){a|=0;var b=0;return b=o,o=o+a|0,o=o+15&-16,(0|o)>=(0|p)&&ca(0|a),0|b}function Va(){return 0|o}function Wa(a){a|=0,o=a}function Xa(a,b){a|=0,b|=0,o=a,p=b}function Ya(a,b){a|=0,b|=0,0==(0|r)&&(r=a,s=b)}function Za(a){a|=0,G=a}function $a(){return 0|G}function _a(a,b){a|=0,b|=0;var c=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,T=0,U=0,V=0,W=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,ta=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,La=0,Ma=0,Na=0,Oa=0,Qa=0,Ra=0,Sa=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,$a=0,_a=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,ub=0;if(ub=o,o=o+112|0,(0|o)>=(0|p)&&ca(112),ob=ub+32|0,qb=ub+24|0,pb=ub+16|0,nb=ub+8|0,mb=ub,Ma=ub+60|0,c=ub+48|0,q=ub+40|0,z=0,K=a,V=b,r=0|Zf(),fa=r,s=fa,0==(0|s))return u=0|f[637],iw(53468,u),z=1,n=z,o=ub,0|n;if(v=fa,w=K,x=V,y=0|ab(v,w,x,Ma),qa=y,A=qa,(0|A)<0)return C=fa,bb(C,Ma),D=V,E=0|f[D>>2],cb(E),z=1,n=z,o=ub,0|n;if(F=qa,G=K,(0|F)==(0|G))return I=0|f[637],J=Ma+12|0,L=0|f[J>>2],f[mb>>2]=L,yw(I,53501,mb),z=1,n=z,o=ub,0|n;M=Ma+16|0,N=0|f[M>>2],O=0==(0|N);do{if(O&&(P=Ma+24|0,Q=0|d[P>>0],R=1&Q,!(R<<24>>24!=0))){if(T=qa,U=T+1|0,W=K,(0|U)==(0|W)){Y=fa,Z=V,$=qa,_=Z+($<<2)|0,aa=0|f[_>>2],ba=Ma+20|0,da=0|f[ba>>2],ea=0!=(0|da),ga=ea?53528:53531,ha=0|db(Y,aa,ga),ia=Ma+16|0,f[ia>>2]=ha;break}return ja=0|f[637],ka=Ma+12|0,la=0|f[ka>>2],f[nb>>2]=la,yw(ja,53536,nb),z=1,n=z,o=ub,0|n}}while(0);if(ma=qa,na=Ma+8|0,f[na>>2]=ma,oa=fa,eb(q,oa,Ma),f[c>>2]=0|f[q>>2],f[c+4>>2]=0|f[q+4>>2],pa=c+4|0,ra=0|f[pa>>2],0==(0|ra)&&(ta=0|f[c>>2],!(0!=(0|ta))))return va=fa,bb(va,Ma),z=1,n=z,o=ub,0|n;if(wa=Ma+24|0,xa=0|d[wa>>0],ya=1&xa,za=ya<<24>>24!=0,za&&(Aa=Ma+12|0,Ca=0|f[Aa>>2],Da=V,Ea=qa,Fa=Da+(Ea<<2)|0,Ga=0|f[Fa>>2],f[pb>>2]=Ca,sb=pb+4|0,f[sb>>2]=Ga,Cw(53599,pb)),Ha=Ma+24|0,Ia=0|d[Ha>>0],Ja=1&Ia,Ja<<24>>24!=0)return La=fa,bb(La,Ma),z=0,n=z,o=ub,0|n;if(Na=Ma+16|0,Oa=0|f[Na>>2],!(0!=(0|Oa)))return jb=0|f[637],yw(jb,53653,ob),z=1,n=z,o=ub,0|n;if(Qa=Ma+16|0,Ra=0|f[Qa>>2],Sa=0|gv(69660,Ra),0==(0|Sa))Ua=0|f[762],Xa=Ua;else if(Va=Ma+16|0,Wa=0|f[Va>>2],Ya=0|ow(Wa,53616),Xa=Ya,0==(0|Ya))return $a=0|f[637],_a=Ma+12|0,gb=0|f[_a>>2],hb=Ma+16|0,ib=0|f[hb>>2],f[qb>>2]=gb,rb=qb+4|0,f[rb>>2]=ib,yw($a,53619,qb),z=1,n=z,o=ub,0|n;return kb=fa,lb=Xa,e=Ma+16|0,g=0|f[e>>2],h=0|f[c>>2],i=0|fb(kb,lb,g,h,Ma),Ba=i,j=Xa,uw(j),k=fa,bb(k,Ma),l=Ba,m=0!=(0|l),m?(z=1,n=z,o=ub,0|n):(z=0,n=z,o=ub,0|n)}function ab(a,b,c,e){a|=0,b|=0,c|=0,e|=0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,$a=0,_a=0,ab=0,cb=0,eb=0,fb=0,gb=0,hb=0,jb=0,kb=0,lb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,$b=0,_b=0,ac=0,bc=0,cc=0,dc=0,ec=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,wc=0,xc=0,yc=0,zc=0,Ac=0,Bc=0,Dc=0,Ec=0,Fc=0,Gc=0,Ic=0,Jc=0,Kc=0,Lc=0,Mc=0,Nc=0,Oc=0,Pc=0,Qc=0,Rc=0,Sc=0,Tc=0,Uc=0,Vc=0,Wc=0,Xc=0,Yc=0,Zc=0,$c=0,_c=0,ad=0,bd=0,cd=0,dd=0,ed=0,fd=0,gd=0,hd=0,id=0,jd=0,kd=0,ld=0,md=0,nd=0,od=0,pd=0,qd=0,rd=0,sd=0,td=0,ud=0,vd=0,wd=0,xd=0,yd=0,zd=0,Ad=0,Bd=0,Cd=0,Dd=0,Ed=0,Fd=0,Gd=0,Hd=0,Id=0,Jd=0,Kd=0,Ld=0,Md=0,Nd=0,Od=0,Pd=0,Qd=0,Rd=0,Sd=0,Td=0,Ud=0,Vd=0,Wd=0,Xd=0;Xd=o,o=o+64|0,(0|o)>=(0|p)&&ca(64),Sd=Xd+16|0,Td=Xd+8|0,Rd=Xd,Qc=a,_c=b,kd=c,vd=e,Gd=0,x=vd,f[x>>2]=0|f[18174],f[x+4>>2]=0|f[18175],f[x+8>>2]=0|f[18176],f[x+12>>2]=0|f[18177],f[x+16>>2]=0|f[18178],f[x+20>>2]=0|f[18179],f[x+24>>2]=0|f[18180],I=_c,T=vd,f[T>>2]=I,da=kd,oa=vd,za=oa+4|0,f[za>>2]=da,Ka=kd,Wa=0|f[Ka>>2],gb=vd,sb=gb+12|0,f[sb>>2]=Wa,k=1;a:for(;;){if(Db=k,Ob=_c,!((0|Db)<(0|Ob))){Wd=37;break}if(ic=kd,qc=k,rc=ic+(qc<<2)|0,sc=0|f[rc>>2],tc=0|d[sc>>0],uc=tc<<24>>24,!(45==(0|uc))){Wd=37;break}switch(wc=kd,xc=k,yc=wc+(xc<<2)|0,zc=0|f[yc>>2],Ac=zc+1|0,Bc=0|d[Ac>>0],0|Bc<<24>>24){case 104:Wd=25;break a;case 111:if(Dc=vd,Ec=Dc+16|0,Gc=0|f[Ec>>2],0!=(0|Gc)){Wd=6;break a}Nc=kd,Oc=k,Pc=Nc+(Oc<<2)|0,Rc=0|f[Pc>>2],Sc=Rc+2|0,Tc=0|d[Sc>>0],Uc=Tc<<24>>24,Vc=0==(0|Uc),Vc?(Wc=kd,Xc=k,Yc=Xc+1|0,Zc=Wc+(Yc<<2)|0,$c=0|f[Zc>>2],ad=0!=(0|$c),ad?(bd=k,cd=bd+1|0,k=cd,dd=Qc,ed=kd,fd=k,gd=ed+(fd<<2)|0,hd=0|f[gd>>2],id=0|db(dd,hd,75764),jd=vd,g=id,h=jd):Wd=10):Wd=10,10==(0|Wd)&&(Wd=0,ld=Qc,md=kd,nd=k,od=md+(nd<<2)|0,pd=0|f[od>>2],qd=pd+2|0,rd=0|db(ld,qd,75764),sd=vd,g=rd,h=sd),td=h+16|0,f[td>>2]=g;break;case 66:if(ud=kd,wd=k,xd=ud+(wd<<2)|0,yd=0|f[xd>>2],zd=yd+2|0,Ad=0|d[zd>>0],Bd=Ad<<24>>24,Cd=0==(0|Bd),Cd?(Dd=kd,Ed=k,Fd=Ed+1|0,Hd=Dd+(Fd<<2)|0,Id=0|f[Hd>>2],Jd=0!=(0|Id),Jd?(Kd=k,Ld=Kd+1|0,k=Ld,Md=kd,Nd=k,Od=Md+(Nd<<2)|0,Pd=0|f[Od>>2],Qd=vd,i=Pd,j=Qd):Wd=15):Wd=15,15==(0|Wd)&&(Wd=0,l=kd,m=k,n=l+(m<<2)|0,q=0|f[n>>2],r=q+2|0,s=vd,i=r,j=s),t=j+20|0,f[t>>2]=i,u=vd,v=u+20|0,w=0|f[v>>2],y=0|d[w>>0],z=y<<24>>24,0==(0|z)){Wd=17;break a}break;case 99:F=vd,G=F+24|0,H=0|d[G>>0],J=-2&H,K=1|J,d[G>>0]=K;break;case 118:L=vd,M=L+24|0,N=0|d[M>>0],O=(255&N)>>>1,P=1&O,Q=P<<24>>24!=0,Q||(R=Qc,Uf(R)),S=vd,U=S+24|0,V=0|d[U>>0],W=-3&V,X=2|W,d[U>>0]=X;break;case 103:Y=vd,Z=Y+24|0,$=0|d[Z>>0],_=(255&$)>>>2,aa=15&_,ba=255&aa,ea=1|ba,fa=255&ea,ga=0|d[Z>>0],ha=15&fa,ia=ha<<2&255,ja=-61&ga,ka=ja|ia,d[Z>>0]=ka;break;case 69:la=vd,ma=la+24|0,na=0|d[ma>>0],pa=(255&na)>>>2,qa=15&pa,ra=255&qa,sa=-7&ra,ta=2|sa,ua=vd,va=ua+24|0,wa=255&ta,xa=0|d[va>>0],ya=15&wa,Aa=ya<<2&255,Ba=-61&xa,Ca=Ba|Aa,d[va>>0]=Ca;break;case 101:Da=vd,Ea=Da+24|0,Fa=0|d[Ea>>0],Ga=(255&Fa)>>>2,Ha=15&Ga,Ia=255&Ha,Ja=-7&Ia,La=4|Ja,Ma=vd,Na=Ma+24|0,Pa=255&La,Qa=0|d[Na>>0],Ra=15&Pa,Sa=Ra<<2&255,Ta=-61&Qa,Ua=Ta|Sa,d[Na>>0]=Ua;break;case 45:if(Va=kd,Xa=k,Ya=Va+(Xa<<2)|0,Za=0|f[Ya>>2],$a=Za+1|0,_a=0|d[$a>>0],ab=_a<<24>>24,10==(0|ab)){Wd=27;break a}if(eb=kd,fb=k,hb=eb+(fb<<2)|0,jb=0|f[hb>>2],kb=jb+2|0,lb=0|gv(kb,53762),0==(0|lb)){Wd=29;break a}if(ob=kd,pb=k,qb=ob+(pb<<2)|0,rb=0|f[qb>>2],tb=rb+2|0,ub=0|gv(tb,53770),!(0==(0|ub))){Wd=32;break a}wb=vd,xb=wb+24|0,yb=0|d[xb>>0],zb=-3&yb,Ab=2|zb,d[xb>>0]=Ab;break;default:Wd=35;break a}Lb=k,Mb=Lb+1|0,k=Mb}if(6==(0|Wd))return Ic=0|f[637],Jc=vd,Kc=Jc+12|0,Lc=0|f[Kc>>2],Mc=Gd,f[Rd>>2]=Lc,Vd=Rd+4|0,f[Vd>>2]=Mc,yw(Ic,53678,Rd),Fc=-1,pc=Fc,o=Xd,0|pc;if(17==(0|Wd))return B=0|f[637],C=vd,D=C+12|0,E=0|f[D>>2],f[Td>>2]=E,yw(B,53725,Td),Fc=-1,pc=Fc,o=Xd,0|pc;if(25==(0|Wd))return Fc=-1,pc=Fc,o=Xd,0|pc;if(27==(0|Wd))return cb=k,Fc=cb,pc=Fc,o=Xd,0|pc;if(29==(0|Wd))nb=Qc,Uf(nb),Oa(0);else{if(32==(0|Wd))return Bb=kd,Cb=k,Eb=Bb+(Cb<<2)|0,Fb=0|f[Eb>>2],Gb=Fb+2|0,Hb=0|gv(Gb,53778),Ib=0==(0|Hb),Ib&&(Jb=Qc,Vf(Jb),Oa(0)),Fc=-1,pc=Fc,o=Xd,0|pc;if(35==(0|Wd))return Kb=k,Fc=Kb,pc=Fc,o=Xd,0|pc;if(37==(0|Wd))return Nb=vd,Pb=Nb+24|0,Qb=0|d[Pb>>0],Rb=(255&Qb)>>>1,Sb=1&Rb,Tb=255&Sb,Ub=0!=(0|Tb),Ub&&(Vb=vd,Wb=Vb+20|0,Xb=0|f[Wb>>2],0!=(0|Xb)&&($b=vd,_b=$b+24|0,ac=0|d[_b>>0],bc=(255&ac)>>>2,cc=15&bc,dc=255&cc,ec=6&dc,0==(0|ec)&&(gc=0|f[637],hc=vd,jc=hc+12|0,kc=0|f[jc>>2],lc=0|ib(),mc=0!=(0|lc),nc=mc?53857:53861,f[Sd>>2]=kc,Ud=Sd+4|0,f[Ud>>2]=nc,yw(gc,53788,Sd)))),oc=k,Fc=oc,pc=Fc,o=Xd,0|pc}return 0}function bb(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,l=0;l=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),c=a,d=b,e=c,g=d,h=g+16|0,i=0|f[h>>2],xc(e,i),j=c,fg(j),o=l}function cb(a){a|=0;var b=0,c=0,d=0,e=0,g=0,i=0,j=0,k=0,l=0,m=0,q=0;for(q=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),m=q+8|0,l=q,b=a,c=8,d=b,f[l>>2]=d,Cw(54301,l);;){if(e=c,g=0|f[e>>2],!(0!=(0|g)))break;i=c,j=i+4|0,c=j,k=0|f[i>>2],f[m>>2]=k,Cw(54335,m)}o=q}function db(a,b,c){a|=0,b|=0,c|=0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,Q=0;return Q=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),A=a,J=b,K=c,e=J,f=0|$v(e),L=f,g=K,h=0|$v(g),M=h,i=A,j=L,k=M,l=j+k|0,m=l+1|0,n=0|Jc(i,m),N=n,q=N,r=J,s=L,t=s+1|0,$w(0|q,0|r,0|t),u=K,v=0|d[u>>0],v<<24>>24!=0?(x=N,y=0|zw(x,46),O=y,z=0==(0|y),z&&(B=N,C=L,D=B+C|0,O=D),E=O,F=K,G=M,H=G+1|0,$w(0|E,0|F,0|H),I=N,o=Q,0|I):(I=N,o=Q,0|I)}function eb(a,b,c){a|=0,b|=0,c|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0;return Ka=o,o=o+48|0,(0|o)>=(0|p)&&ca(48),Ha=Ka,ha=Ka+24|0,e=Ka+8|0,B=b,M=c,g=M,h=g+4|0,i=0|f[h>>2],j=M,k=j+8|0,l=0|f[k>>2],m=i+(l<<2)|0,n=0|f[m>>2],sa=n,Ga=0,q=B,r=0|xn(q),X=r,s=M,t=s+24|0,u=0|d[t>>0],v=(255&u)>>>1,w=1&v,x=w<<24>>24!=0,x&&(y=X,z=y+28|0,A=0|d[z>>0],C=-3&A,D=2|C,d[z>>0]=D),E=X,F=E+28|0,G=0|d[F>>0],H=-5&G,I=4|H,d[F>>0]=I,J=sa,K=0|d[J>>0],L=K<<24>>24,N=45==(0|L),N?(O=sa,P=O+1|0,Q=0|d[P>>0],R=Q<<24>>24,S=0==(0|R),S?(T=0|f[730],Da=T):Ja=6):Ja=6,6==(0|Ja)&&(Ga=1,U=sa,V=0|ow(U,54341),Da=V,0==(0|V))?(Y=0|f[637],Z=M,$=Z+12|0,_=0|f[$>>2],aa=sa,f[Ha>>2]=_,Ia=Ha+4|0,f[Ia>>2]=aa,yw(Y,54343,Ha),jb(a),void(o=Ka)):(ba=B,da=X,ea=sa,zn(ba,da,ea),fa=M,ga=fa+8|0,ia=0|f[ga>>2],ja=ia+1|0,f[ga>>2]=ja,ka=M,la=ka+8|0,ma=0|f[la>>2],na=M,oa=0|f[na>>2],pa=(0|ma)<(0|oa),pa&&(Ga=0,qa=B,ra=X,ta=M,An(qa,ra,7,ta)),ua=B,va=Da,wa=X,Dn(e,ua,va,wa),f[ha>>2]=0|f[e>>2],f[ha+4>>2]=0|f[e+4>>2],xa=Ga,ya=xa<<24>>24!=0,ya&&(za=Da,uw(za)),Aa=B,Ba=X,yn(Aa,Ba),Ca=ha+4|0,Ea=0|f[Ca>>2],Fa=5==(0|Ea),Fa?(jb(a),void(o=Ka)):(f[a>>2]=0|f[ha>>2],f[a+4>>2]=0|f[ha+4>>2],void(o=Ka)))}function fb(a,b,c,e,g){a|=0,b|=0,c|=0,e|=0,g|=0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,I=0,J=0,K=0,L=0,M=0,N=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,fa=0;return fa=o,o=o+48|0,(0|o)>=(0|p)&&ca(48),aa=fa+8|0,_=fa,W=a,X=b,Y=c,Z=e,$=g,h=0,j=Z,k=j+12|0,l=0|f[k>>2],i=l,m=$,n=m+20|0,q=0|f[n>>2],r=0!=(0|q),s=W,t=i,u=$,v=u+24|0,w=0|d[v>>0],x=(255&w)>>>2,y=15&x,z=255&y,A=255&z,B=X,r?(C=$,D=C+20|0,E=0|f[D>>2],F=0|ac(s,t,A,B,E),h=F,G=h,-7==(0|G)&&(I=0|f[637],J=$,K=J+20|0,L=0|f[K>>2],f[_>>2]=L,yw(I,54379,_))):(M=0|_b(s,t,A,B),h=M),N=h,0!=(0|N)?(P=0|f[637],Q=$,R=Q+12|0,S=0|f[R>>2],T=Y,U=h,f[aa>>2]=S,ba=aa+4|0,f[ba>>2]=T,da=aa+8|0,f[da>>2]=U,yw(P,54415,aa),V=h,o=fa,0|V):(V=h,o=fa,0|V)}function gb(a){a|=0;var d=0;d=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),o=d}function hb(a){a|=0;var d=0;d=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),o=d}function ib(){var a=0,b=0,c=0,e=0,g=0,h=0,i=0,k=0;return k=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),a=k+4|0,f[a>>2]=1,b=a,c=b,e=0|d[c>>0],g=e<<24>>24,h=0!=(0|g),i=h?0:1,o=k,0|i}function jb(a){a|=0;var b=0,c=0,e=0;e=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),b=e,c=b+4|0,f[c>>2]=0,f[b>>2]=0,f[a>>2]=0|f[b>>2],f[a+4>>2]=0|f[b+4>>2],o=e}function kb(a){a|=0;var b=0,c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,fa=0;return fa=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),ba=fa,n=a,Z=n,$=Z+24|0,_=0|f[$>>2],A=_,aa=A,c=aa+20|0,d=0|f[c>>2],L=d,e=n,g=e+20|0,h=0|f[g>>2],i=0!=(0|h),i&&(j=n,k=j+20|0,l=0|f[k>>2],uw(l)),m=L,q=m+8|0,r=0|f[q>>2],s=L,t=0|f[s>>2],(0|r)>=(0|t)?(v=n,w=v+20|0,f[w>>2]=0,b=-1,Y=b,o=fa,0|Y):(x=L,y=x+4|0,z=0|f[y>>2],B=L,C=B+8|0,D=0|f[C>>2],E=D+1|0,f[C>>2]=E,F=z+(D<<2)|0,G=0|f[F>>2],W=G,H=W,I=0|ow(H,54341),J=n,K=J+20|0,f[K>>2]=I,M=n,N=M+20|0,O=0|f[N>>2],P=0==(0|O),P?(Q=0|f[637],R=L,S=R+12|0,T=0|f[S>>2],U=W,f[ba>>2]=T,da=ba+4|0,f[da>>2]=U,yw(Q,54343,ba),b=-1,Y=b,o=fa,0|Y):(V=n,X=W,un(V,X),b=0,Y=b,o=fa,0|Y))}function lb(a,b){a|=0,b|=0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,z=0;z=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),r=a,s=b,t=s,u=255&t,v=2==(0|u),w=r,x=255&w,c=6&x,d=0==(0|c),e=r;do{if(v){if(d){f=255&e,g=1&f,h=6|g,i=255&h,m=i;break}m=e;break}if(d){j=255&e,k=1&j,l=2|k,n=255&l,m=n;break}m=e;break}while(0);return q=m,o=z,0|q}function mb(a,b,c,d,g){a|=0,b|=0,c|=0,d|=0,g|=0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,F=0,G=0,H=0,I=0,J=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,$a=0,_a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,$b=0,_b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,oc=0;if(oc=o,o=o+64|0,(0|o)>=(0|p)&&ca(64),Q=oc+24|0,va=oc+8|0,wa=oc+4|0,xa=oc,ya=oc+56|0,jb=a,Ib=b,Tb=c,cc=d,h=g,u=-1,_=0,la=0,sa=0,za=Ib,Aa=0|nb(za),ta=Aa,Ba=Ib,Ca=0|ob(Ba),ua=Ca,f[va>>2]=0,f[wa>>2]=0,f[xa>>2]=0,e[ya>>1]=0,Da=jb,0==(0|Da))return Fa=cc,f[Fa>>2]=0,$a=-1,ra=$a,o=oc,0|ra;f[Q>>2]=12,Ga=jb,Ha=Ib,Ia=0|pb(Ga,Ha),Ja=0|f[Q>>2],Ka=Ja+Ia|0,f[Q>>2]=Ka,La=Tb,Ma=255&La,Na=1&Ma,Oa=0!=(0|Na);do{if(Oa){if(Pa=ta,Qa=Pa<<24>>24!=0,Ra=_,Sa=Ra+8|0,_=Sa,Ta=jb,Qa){Ua=0|Jc(Ta,5),f[xa>>2]=Ua,Va=_,Wa=Va+2|0,_=Wa,Xa=jb,Ya=Ib,Za=0|qb(Xa,Ya,xa,ya),_a=_,ab=_a+Za|0,_=ab,bb=jb,cb=Ib,db=0|rb(bb,cb),eb=_,fb=eb+db|0,_=fb;break}gb=Ib,hb=0|sb(Ta,gb),ib=_,kb=ib+hb|0,_=kb;break}}while(0);lb=ua,mb=lb<<24>>24!=0,mb&&(Bb=la,Cb=Bb+8|0,la=Cb,Db=jb,Eb=Ib,tb(Db,Eb,va,wa),Fb=jb,Gb=Ib,Hb=0|f[va>>2],Jb=0|f[wa>>2],Kb=0|ub(Fb,Gb,Hb,Jb),Lb=la,Mb=Lb+Kb|0,la=Mb),Nb=0|f[Q>>2],Ob=22+Nb|0,Pb=_,Qb=Ob+Pb|0,Rb=la,Sb=Qb+Rb|0,Ub=Sb+8|0,F=Ub,Vb=jb,Wb=F,Xb=0|Jc(Vb,Wb),Yb=cc,f[Yb>>2]=Xb,sa=Xb,Zb=sa,$b=Zb+22|0,sa=$b,_b=jb,ac=Ib,bc=sa,dc=Tb,ec=0|vb(_b,ac,bc,Q,dc),u=ec,fc=u,gc=0!=(0|fc);do{if(!gc){if(hc=0|f[Q>>2],ic=sa,jc=ic+hc|0,sa=jc,kc=0|f[Q>>2],lc=22+kc|0,mc=_,i=lc+mc|0,j=la,k=i+j|0,l=k+8|0,m=h,f[m>>2]=l,n=Tb,q=255&n,r=1&q,0!=(0|r)){if(t=ta,v=t<<24>>24!=0,w=jb,x=Ib,y=sa,v?(z=0|f[xa>>2],A=0|e[ya>>1],B=0|wb(w,x,y,z,A),u=B):(C=0|xb(w,x,y),u=C),D=u,0!=(0|D))break;G=_,H=sa,I=H+G|0,sa=I}if(J=ua,J<<24>>24!=0){if(L=jb,M=Ib,N=sa,O=0|f[va>>2],P=0|f[wa>>2],R=0|yb(L,M,N,O,P),u=R,S=u,0!=(0|S))break;U=la,V=sa,W=V+U|0,sa=W}X=jb,Y=sa,zb(X,Y),Z=jb,$=h,aa=0|f[$>>2],ba=cc,da=0|f[ba>>2],ea=Tb,Ab(Z,aa,da,ea)}}while(0);return fa=u,ga=0!=(0|fa),ga&&(ha=jb,ia=cc,ja=0|f[ia>>2],xc(ha,ja),ka=cc,f[ka>>2]=0),ma=jb,na=0|f[va>>2],xc(ma,na),oa=jb,pa=0|f[xa>>2],xc(oa,pa),qa=u,$a=qa,ra=$a,o=oc,0|ra}function nb(a){a|=0;var b=0,c=0,d=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,z=0,A=0,B=0,C=0;if(C=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),n=a,v=n,w=v+36|0,x=0|f[w>>2],!(0!=(0|x)))return b=0,t=b,o=C,0|t;for(u=0;;){if(z=u,A=n,c=A+52|0,d=0|f[c>>2],!(z>>>0<d>>>0)){B=8;break}if(g=n,h=g+20|0,i=0|f[h>>2],j=u,k=i+(j<<2)|0,l=0|f[k>>2],m=0|nb(l),!(m<<24>>24!=0)){B=6;break}r=u,s=r+1|0,u=s}return 6==(0|B)?(b=0,t=b,o=C,0|t):8==(0|B)?(b=1,t=b,o=C,0|t):0}function ob(a){a|=0;var b=0,c=0,d=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,z=0,A=0,B=0,C=0;if(C=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),n=a,v=n,w=v+24|0,x=0|f[w>>2],0!=(0|x))return b=1,t=b,o=C,0|t;for(u=0;;){if(z=u,A=n,c=A+52|0,d=0|f[c>>2],!(z>>>0<d>>>0)){B=8;break}if(g=n,h=g+20|0,i=0|f[h>>2],j=u,k=i+(j<<2)|0,l=0|f[k>>2],m=0|ob(l),m<<24>>24!=0){B=6;break}r=u,s=r+1|0,u=s}return 6==(0|B)?(b=1,t=b,o=C,0|t):8==(0|B)?(b=0,t=b,o=C,0|t):0}function pb(a,b){a|=0,b|=0;var c=0,d=0,e=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,F=0;for(F=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),n=a,x=b,y=0,A=n,B=x,C=0|Pb(A,B),y=C,z=0;;){if(D=z,c=x,d=c+52|0,e=0|f[d>>2],!(D>>>0<e>>>0))break;h=n,i=x,j=i+20|0,k=0|f[j>>2],l=z,m=k+(l<<2)|0,q=0|f[m>>2],r=0|pb(h,q),s=y,t=s+r|0,y=t,u=z,v=u+1|0,z=v}return w=y,o=F,0|w}function qb(a,b,c,d){a|=0,b|=0,c|=0,d|=0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Sa=0;for(Sa=o,o=o+48|0,(0|o)>=(0|p)&&ca(48),j=Sa,M=a,X=b,ha=c,sa=d,k=ha,l=0|f[k>>2],Da=l,g=0,m=X,n=m+36|0,q=0|f[n>>2],h=q,Oa=0;;){if(r=Oa,s=h,t=s+4|0,u=0|e[t>>1],v=65535&u,!(r>>>0<v>>>0))break;x=h,y=x+8|0,z=0|f[y>>2],A=Oa,B=z+(A<<2)|0,C=0|f[B>>2],i=C,D=Da,E=sa,F=0|e[E>>1],G=65535&F,H=i,I=H+8|0,J=0|f[I>>2],K=0|Gb(D,G,J),L=-1==(0|K),L&&(N=sa,O=0|e[N>>1],P=65535&O,Q=P+1|0,R=65535&Q,e[N>>1]=R,S=M,T=Da,U=sa,V=0|e[U>>1],W=65535&V,Y=W<<2,Z=0|Hc(S,T,Y),Da=Z,$=ha,f[$>>2]=Z,_=i,aa=_+8|0,ba=0|f[aa>>2],da=Da,ea=sa,fa=0|e[ea>>1],ga=65535&fa,ia=ga-1|0,ja=da+(ia<<2)|0,f[ja>>2]=ba,ka=M,la=i,ma=la+8|0,na=0|f[ma>>2],ri(ka,na,j),oa=0|f[j>>2],pa=2+oa|0,qa=g,ra=qa+pa|0,g=ra),ta=Oa,ua=ta+1|0,Oa=ua}for(Oa=0;;){if(va=Oa,wa=X,xa=wa+52|0,ya=0|f[xa>>2],!(va>>>0<ya>>>0))break;Aa=M,Ba=X,Ca=Ba+20|0,Ea=0|f[Ca>>2],Fa=Oa,Ga=Ea+(Fa<<2)|0,Ha=0|f[Ga>>2],Ia=ha,Ja=sa,Ka=0|qb(Aa,Ha,Ia,Ja),La=g,Ma=La+Ka|0,g=Ma,Na=Oa,Pa=Na+1|0,Oa=Pa}return Qa=g,o=Sa,0|Qa}function rb(a,b){a|=0,b|=0;var c=0,d=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,za=0;for(za=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),q=a,B=b,M=0,wa=M,xa=wa+4|0,M=xa,c=M,d=c+2|0,M=d,X=0;;){if(g=X,h=65535&g,i=B,j=i+36|0,k=0|f[j>>2],l=k+4|0,m=0|e[l>>1],n=65535&m,!((0|h)<(0|n)))break;switch(s=B,t=s+36|0,u=0|f[t>>2],v=u+8|0,w=0|f[v>>2],x=X,y=65535&x,z=w+(y<<2)|0,A=0|f[z>>2],sa=A,C=M,D=C+4|0,M=D,E=M,F=E+2|0,M=F,G=M,H=G+4|0,M=H,I=M,J=I+1|0,M=J,K=sa,L=K+16|0,0|(0|f[L>>2])){case 0:O=sa,P=O+12|0,Q=0|f[P>>2],R=Q<<1,S=M,T=S+R|0,M=T;break;case 1:U=sa,V=U+12|0,W=0|f[V>>2],Y=6*W|0,Z=M,$=Z+Y|0,M=$}_=X,aa=_+1<<16>>16,X=aa}for(ha=0;;){if(ba=ha,da=B,ea=da+52|0,fa=0|f[ea>>2],!(ba>>>0<fa>>>0))break;ia=q,ja=B,ka=ja+20|0,la=0|f[ka>>2],ma=ha,na=la+(ma<<2)|0,oa=0|f[na>>2],pa=0|rb(ia,oa),qa=M,ra=qa+pa|0,M=ra,ta=ha,ua=ta+1|0,ha=ua}return va=M,o=za,0|va}function sb(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,K=0;return K=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),a,A=b,D=0,E=D,F=E+4|0,D=F,G=D,H=G+2|0,D=H,I=A,c=I+28|0,d=0|f[c>>2],e=0!=(0|d),e&&(g=A,h=g+28|0,i=0|f[h>>2],j=0|$v(i),k=D,l=k+j|0,D=l),m=D,q=m+4|0,D=q,r=A,s=r+32|0,t=0|f[s>>2],0!=(0|t)?(v=A,w=v+40|0,x=0|f[w>>2],y=x<<1,z=D,B=z+y|0,D=B,C=D,o=K,0|C):(C=D,o=K,0|C)}function tb(a,b,c,d){a|=0,b|=0,c|=0,d|=0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,za=0;for(za=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),M=a,X=b,ha=c,sa=d,g=ha,h=0|f[g>>2],i=0==(0|h),i&&(j=M,k=0|Jc(j,4),l=ha,f[l>>2]=k),wa=0;;){if(m=wa,n=m+1|0,q=X,r=0|e[q>>1],s=65535&r,!(n>>>0<s>>>0))break;u=X,v=u+24|0,w=0|f[v>>2],x=wa,y=w+(x<<3)|0,z=0|f[y>>2],xa=z,A=xa,B=0==(0|A),B||(C=ha,D=0|f[C>>2],E=sa,F=0|f[E>>2],G=xa,H=0|Gb(D,F,G),-1!=(0|H)||(J=sa,K=0|f[J>>2],L=K+1|0,f[J>>2]=L,N=M,O=ha,P=0|f[O>>2],Q=sa,R=0|f[Q>>2],S=R<<2,T=0|Hc(N,P,S),U=ha,f[U>>2]=T,V=xa,W=ha,Y=0|f[W>>2],Z=sa,$=0|f[Z>>2],_=$-1|0,aa=Y+(_<<2)|0,f[aa>>2]=V)),ba=wa,da=ba+1|0,wa=da}for(wa=0;;){if(ea=wa,fa=X,ga=fa+52|0,ia=0|f[ga>>2],!(ea>>>0<ia>>>0))break;ka=M,la=X,ma=la+20|0,na=0|f[ma>>2],oa=wa,pa=na+(oa<<2)|0,qa=0|f[pa>>2],ra=ha,ta=sa,tb(ka,qa,ra,ta),ua=wa,va=ua+1|0,wa=va}o=za}function ub(a,b,c,d){a|=0,b|=0,c|=0,d|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0;for(N=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),e=N,G=a,H=b,I=c,J=d,K=0,g=K,h=g+4|0,K=h,i=J,j=i<<1,k=K,l=k+j|0,K=l,L=0;;){if(m=L,n=J,q=m>>>0<n>>>0,r=G,!q)break;s=I,t=L,u=s+(t<<2)|0,v=0|f[u>>2],ri(r,v,e),w=0|f[e>>2],x=K,y=x+w|0,K=y,z=L,A=z+1|0,L=A}return B=H,C=0|$b(r,B),D=K,E=D+C|0,K=E,F=K,o=N,0|F}function vb(a,b,c,d,e){a|=0,b|=0,c|=0,d|=0,e|=0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,V=0;return V=o,o=o+48|0,(0|o)>=(0|p)&&ca(48),i=V+4|0,P=a,Q=b,R=c,S=d,g=e,f[i>>2]=0,k=R,j=k,l=P,m=0==(0|l),n=R,q=0==(0|n),m|q?(O=-7,N=O,o=V,0|N):(r=j,s=r+12|0,j=s,t=P,u=Q,v=j,w=g,x=0|Nb(t,u,v,i,w),h=x,y=h,z=0!=(0|y),z?(A=h,O=A,N=O,o=V,0|N):(B=j,C=R,D=B,E=C,F=D-E|0,G=0|f[i>>2],H=F+G|0,I=S,f[I>>2]=H,J=P,K=S,L=0|f[K>>2],M=R,Ob(J,L,M),O=0,N=O,o=V,0|N))}function wb(a,b,c,e,g){a|=0,b|=0,c|=0,e|=0,g|=0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Fa=0;if(Fa=o,o=o+48|0,(0|o)>=(0|p)&&ca(48),q=Fa,ha=a,sa=b,Ba=c,Ca=e,h=g,i=0,r=Ba,j=r,s=ha,t=0==(0|s),u=Ba,v=0==(0|u),t|v)return X=-7,Aa=X,o=Fa,0|Aa;for(w=j,k=w,x=Ba,y=x+8|0,Ba=y,z=i,A=z+8|0,i=A,B=h,C=Ba,D=0|Db(B,C),E=Ba,F=E+D|0,Ba=F,G=i,H=G+2|0,i=H,m=0;;){if(I=m,J=65535&I,K=h,L=65535&K,M=(0|J)<(0|L),N=ha,!M)break;O=Ca,P=m,Q=65535&P,R=O+(Q<<2)|0,S=0|f[R>>2],T=0|ri(N,S,q),n=T,U=0|f[q>>2],V=65535&U,W=Ba,Y=0|Db(V,W),Z=Ba,$=Z+Y|0,Ba=$,_=Ba,aa=n,ba=0|f[q>>2],$w(0|_,0|aa,0|ba),da=0|f[q>>2],ea=Ba,fa=ea+da|0,Ba=fa,ga=0|f[q>>2],ia=2+ga|0,ja=i,ka=ja+ia|0,i=ka,la=m,ma=la+1<<16>>16,m=ma}return na=sa,oa=Ba,pa=Ca,qa=h,ra=0|Kb(N,na,oa,pa,qa),l=ra,ta=l,ua=i,va=ua+ta|0,i=va,wa=k,d[wa>>0]=0|d[54486],d[wa+1>>0]=0|d[54487],d[wa+2>>0]=0|d[54488],d[wa+3>>0]=0|d[54489],xa=i,ya=k,za=ya+4|0,Cb(xa,za),X=0,Aa=X,o=Fa,0|Aa}function xb(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,I=0;return I=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),A=a,B=b,C=c,D=0,E=0,d=C,F=d,e=A,f=0==(0|e),g=C,h=0==(0|g),G=f|h,G?(z=-7,y=z,o=I,0|y):(i=F,j=i+8|0,F=j,k=D,l=k+8|0,D=l,m=A,n=B,q=F,r=0|Hb(m,n,q),E=r,s=E,t=D,u=t+s|0,D=u,v=A,w=D,x=C,Ib(v,w,x),z=0,y=z,o=I,0|y)}function yb(a,b,c,e,g){a|=0,b|=0,c|=0,e|=0,g|=0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,_=0;return _=o,o=o+48|0,(0|o)>=(0|p)&&ca(48),i=_+12|0,V=a,W=b,X=c,Y=e,h=g,m=X,f[i>>2]=m,l=0,n=V,q=0==(0|n),r=0|f[i>>2],s=0==(0|r),q|s?(U=-7,T=U,o=_,0|T):(t=0|f[i>>2],j=t,u=0|f[i>>2],v=u+8|0,f[i>>2]=v,w=V,x=Y,y=h,z=0|Eb(w,i,x,y),l=z,A=l,B=0!=(0|A),B||(C=V,D=W,E=Y,F=h,G=0|Fb(C,D,i,E,F),l=G,H=l,0!=(0|H)||(J=j,d[J>>0]=0|d[54476],d[J+1>>0]=0|d[54477],d[J+2>>0]=0|d[54478],d[J+3>>0]=0|d[54479],K=0|f[i>>2],L=X,M=K,N=L,O=M-N|0,k=O,P=k,Q=j,R=Q+4|0,Cb(P,R))),S=l,U=S,T=U,o=_,0|T)}function zb(a,b){a|=0,b|=0;var e=0,f=0,g=0,h=0,j=0;return j=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),f=j+8|0,a,e=b,d[f>>0]=0|d[54471],d[f+1>>0]=0|d[54472],d[f+2>>0]=0|d[54473],d[f+3>>0]=0|d[54474],g=f+4|0,Cb(8,g),h=e,d[h>>0]=0|d[f>>0],d[h+1>>0]=0|d[f+1>>0],d[h+2>>0]=0|d[f+2>>0],d[h+3>>0]=0|d[f+3>>0],d[h+4>>0]=0|d[f+4>>0],d[h+5>>0]=0|d[f+5>>0],d[h+6>>0]=0|d[f+6>>0],d[h+7>>0]=0|d[f+7>>0],o=j,8}function Ab(a,b,c,e){a|=0,b|=0,c|=0,e|=0;var f=0,g=0,h=0,i=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0;switch(X=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),a,R=b,S=c,T=e,g=S,U=g,h=T,i=255&h,0|6&i){case 2:W=2;break;case 4:W=3;break;case 6:m=0|Bb(),n=0!=(0|m),W=n?2:3}return 2==(0|W)?(k=U,d[k>>0]=0|d[54446],d[k+1>>0]=0|d[54447],d[k+2>>0]=0|d[54448],d[k+3>>0]=0|d[54449]):3==(0|W)&&(l=U,d[l>>0]=0|d[54451],d[l+1>>0]=0|d[54452],d[l+2>>0]=0|d[54453],d[l+3>>0]=0|d[54454]),q=U,r=q+4|0,d[r>>0]=0|d[54456],d[r+1>>0]=0|d[54457],d[r+2>>0]=0|d[54458],d[r+3>>0]=0|d[54459],s=U,t=s+14|0,d[t>>0]=0|d[54461],d[t+1>>0]=0|d[54462],d[t+2>>0]=0|d[54463],d[t+3>>0]=0|d[54464],u=U,v=u+18|0,d[v>>0]=0|d[54466],d[v+1>>0]=0|d[54467],d[v+2>>0]=0|d[54468],d[v+3>>0]=0|d[54469],w=R,x=U,y=x+10|0,Cb(w,y),z=U,A=z+8|0,B=S,C=A,D=B,E=C-D|0,F=E+2|0,f=F,G=S,H=f,I=G+H|0,J=R,K=f,M=J-K|0,N=0|nr(I,M,0),V=N,O=V,P=U,Q=P+8|0,Db(O,Q),o=X,0}function Bb(){var a=0,b=0,c=0,e=0,g=0,h=0,i=0,k=0;return k=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),a=k+4|0,f[a>>2]=1,b=a,c=b,e=0|d[c>>0],g=e<<24>>24,h=0!=(0|g),i=h?0:1,o=k,0|i}function Cb(a,b){a|=0,b|=0;var c=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,E=0;return E=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),n=a,w=b,x=n,y=x>>>24,z=255&y,A=255&z,B=w,C=B+1|0,w=C,d[B>>0]=A,c=n,e=c>>>16,f=255&e,g=255&f,h=w,i=h+1|0,w=i,d[h>>0]=g,j=n,k=j>>>8,l=255&k,m=255&l,q=w,r=q+1|0,w=r,d[q>>0]=m,s=n,t=255&s,u=255&t,v=w,d[v>>0]=u,o=E,4}function Db(a,b){a|=0,b|=0;var c=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,u=0;return u=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),j=a,k=b,l=j,m=65535&l,n=m>>8,q=255&n,r=255&q,s=k,c=s+1|0,k=c,d[s>>0]=r,e=j,f=65535&e,g=255&f,h=255&g,i=k,d[i>>0]=h,o=u,2}function Eb(a,b,c,d){a|=0,b|=0,c|=0,d|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,W=0;for(W=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),g=W,L=a,Q=b,R=c,S=d,h=Q,i=0|f[h>>2],T=i,j=S,k=T,l=0|Cb(j,k),m=T,n=m+l|0,T=n,U=0;;){if(q=U,r=S,!(q>>>0<r>>>0))break;t=L,u=R,v=U,w=u+(v<<2)|0,x=0|f[w>>2],y=0|ri(t,x,g),e=y,z=0|f[g>>2],A=65535&z,B=T,C=0|Db(A,B),D=T,E=D+C|0,T=E,F=T,G=e,H=0|f[g>>2],$w(0|F,0|G,0|H),I=0|f[g>>2],J=T,K=J+I|0,T=K,M=U,N=M+1|0,U=N}return O=T,P=Q,f[P>>2]=O,o=W,0}function Fb(a,b,c,d,g){a|=0,b|=0,c|=0,d|=0,g|=0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ia=0;for(Ia=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),h=Ia+8|0,X=a,ha=b,sa=c,Da=d,Ga=g,k=sa,l=0|f[k>>2],f[h>>2]=l,i=0;;){if(m=i,n=m+1|0,q=ha,r=0|e[q>>1],s=65535&r,!(n>>>0<s>>>0))break;u=ha,v=u+24|0,w=0|f[v>>2],x=i,y=w+(x<<3)|0,z=0|f[y>>2],A=0==(0|z),A?(B=0|f[h>>2],C=0|Db(-1,B),D=0|f[h>>2],E=D+C|0,f[h>>2]=E,F=0|f[h>>2],G=0|Db(0,F),H=0|f[h>>2],I=H+G|0,f[h>>2]=I):(J=Da,K=Ga,L=ha,M=L+24|0,N=0|f[M>>2],O=i,P=N+(O<<3)|0,Q=0|f[P>>2],R=0|Gb(J,K,Q),j=R,S=j,T=65535&S,U=0|f[h>>2],V=0|Db(T,U),W=0|f[h>>2],Y=W+V|0,f[h>>2]=Y,Z=ha,$=Z+24|0,_=0|f[$>>2],aa=i,ba=_+(aa<<3)|0,da=ba+4|0,ea=0|e[da>>1],fa=0|f[h>>2],ga=0|Db(ea,fa),ia=0|f[h>>2],ja=ia+ga|0,f[h>>2]=ja),ka=i,la=ka+1|0,i=la}for(i=0;;){if(ma=i,na=ha,oa=na+52|0,pa=0|f[oa>>2],!(ma>>>0<pa>>>0))break;ra=X,ta=ha,ua=ta+20|0,va=0|f[ua>>2],wa=i,xa=va+(wa<<2)|0,ya=0|f[xa>>2],za=Da,Aa=Ga,Fb(ra,ya,h,za,Aa),Ba=i,Ca=Ba+1|0,i=Ca}return Ea=0|f[h>>2],Fa=sa,f[Fa>>2]=Ea,o=Ia,0}function Gb(a,b,c){a|=0,b|=0,c|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;for(y=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),r=a,s=b,t=c,u=0;;){if(v=u,w=s,!((0|v)<(0|w))){x=6;break}if(e=r,g=u,h=e+(g<<2)|0,i=0|f[h>>2],j=t,k=(0|i)==(0|j),l=u,k){x=4;break}m=l+1|0,u=m}return 4==(0|x)?(q=l,n=q,o=y,0|n):6==(0|x)?(q=-1,n=q,o=y,0|n):0}function Hb(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,P=0;for(P=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),A=a,I=b,J=c,M=0,N=A,d=I,e=J,g=0|Jb(N,d,e),L=g,h=L,i=J,j=i+h|0,J=j,k=L,l=M,m=l+k|0,M=m,K=0;;){if(n=K,q=I,r=q+52|0,s=0|f[r>>2],!(n>>>0<s>>>0))break;u=A,v=I,w=J,x=0|Hb(u,v,w),L=x,y=L,z=J,B=z+y|0,J=B,C=L,D=M,E=D+C|0,M=E,F=K,G=F+1|0,K=G}return H=M,o=P,0|H}function Ib(a,b,c){a|=0,b|=0,c|=0;var e=0,f=0,h=0,i=0,j=0,k=0,l=0,m=0,q=0;return q=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),a,h=b,i=c,k=i,j=k,l=j,d[l>>0]=0|d[54481],d[l+1>>0]=0|d[54482],d[l+2>>0]=0|d[54483],d[l+3>>0]=0|d[54484],m=h,e=j,f=e+4|0,Cb(m,f),o=q,0}function Jb(a,b,c){a|=0,b|=0,c|=0;var d=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Da=0;if(Da=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),a,M=b,X=c,d=X,ha=d,g=ha,h=g+4|0,ha=h,i=M,j=i+28|0,k=0|f[j>>2],l=0!=(0|k),l?(m=M,n=m+28|0,q=0|f[n>>2],r=0|$v(q),Aa=r):Aa=0,s=Aa,t=65535&s,u=ha,v=0|Db(t,u),w=ha,x=w+v|0,ha=x,y=Aa,z=0!=(0|y),z&&(A=ha,C=M,D=C+28|0,E=0|f[D>>2],F=Aa,$w(0|A,0|E,0|F),G=Aa,H=ha,I=H+G|0,ha=I),J=M,K=J+32|0,L=0|f[K>>2],!(0!=(0|L)))return na=ha,oa=0|Cb(0,na),pa=ha,qa=pa+oa|0,ha=qa,ra=ha,ta=X,ua=ra,va=ta,wa=ua-va|0,Ba=wa,xa=Ba,ya=X,Cb(xa,ya),za=Ba,o=Da,0|za;for(O=M,P=O+40|0,Q=0|f[P>>2],R=ha,S=0|Cb(Q,R),T=ha,U=T+S|0,ha=U,sa=0;;){if(V=sa,W=M,Y=W+40|0,Z=0|f[Y>>2],!(V>>>0<Z>>>0))break;_=M,aa=_+32|0,ba=0|f[aa>>2],da=sa,ea=ba+(da<<1)|0,fa=0|e[ea>>1],ga=ha,ia=0|Db(fa,ga),ja=ha,ka=ja+ia|0,ha=ka,la=sa,ma=la+1|0,sa=ma}return ra=ha,ta=X,ua=ra,va=ta,wa=ua-va|0,Ba=wa,xa=Ba,ya=X,Cb(xa,ya),za=Ba,o=Da,0|za}function Kb(a,b,c,d,e){a|=0,b|=0,c|=0,d|=0,e|=0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Z=0;for(Z=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),T=a,U=b,V=c,W=d,X=e,j=T,k=U,l=V,m=W,n=X,q=0|Lb(j,k,l,m,n),h=q,g=q,r=h,s=V,t=s+r|0,V=t,i=0;;){if(u=i,v=U,w=v+52|0,x=0|f[w>>2],!(u>>>0<x>>>0))break;z=T,A=U,B=A+20|0,C=0|f[B>>2],D=i,E=C+(D<<2)|0,F=0|f[E>>2],G=V,H=W,I=X,J=0|Kb(z,F,G,H,I),h=J,K=h,L=V,M=L+K|0,V=M,N=h,O=g,P=O+N|0,g=P,Q=i,R=Q+1|0,i=R}return S=g,o=Z,0|S}function Lb(a,b,c,d,g){a|=0,b|=0,c|=0,d|=0,g|=0;var h=0,i=0,j=0,k=0,l=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,$a=0,_a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Eb=0,Fb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Ob=0;for(Ob=o,o=o+48|0,(0|o)>=(0|p)&&ca(48),a,Ta=b,cb=c,nb=d,yb=g,aa=cb,ba=aa+4|0,h=ba,da=Ta,ea=da+36|0,fa=0|f[ea>>2],ga=fa+4|0,ha=0|e[ga>>1],ia=h,ja=0|Db(ha,ia),ka=h,la=ka+ja|0,h=la,u=0;;){if(ma=u,na=65535&ma,oa=Ta,pa=oa+36|0,qa=0|f[pa>>2],ra=qa+4|0,sa=0|e[ra>>1],ta=65535&sa,!((0|na)<(0|ta)))break;va=Ta,wa=va+36|0,xa=0|f[wa>>2],ya=xa+8|0,za=0|f[ya>>2],Aa=u,Ba=65535&Aa,Ca=za+(Ba<<2)|0,Da=0|f[Ca>>2],Z=Da,Ea=Z,Fa=0|f[Ea>>2],Ga=h,Ha=0|Cb(Fa,Ga),Ja=h,Ka=Ja+Ha|0,h=Ka,La=nb,Ma=yb,Na=65535&Ma,Oa=Z,Pa=Oa+8|0,Qa=0|f[Pa>>2],Ra=0|Gb(La,Na,Qa),Q=Ra,Sa=Q,Ua=65535&Sa,Va=h,Wa=0|Db(Ua,Va),Xa=h,Ya=Xa+Wa|0,h=Ya,Za=Z,$a=Za+12|0,_a=0|f[$a>>2],ab=h,bb=0|Cb(_a,ab),db=h,eb=db+bb|0,h=eb,fb=Z,gb=fb+16|0,hb=0|f[gb>>2],ib=255&hb,jb=h,kb=0|Mb(ib,jb),lb=h,mb=lb+kb|0,h=mb,ob=Z,pb=ob+16|0,qb=0|f[pb>>2];a:switch(0|qb){case 0:for($=0;;){if(rb=$,sb=Z,tb=sb+12|0,ub=0|f[tb>>2],!(rb>>>0<ub>>>0))break a;wb=Z,xb=wb+20|0,zb=0|f[xb>>2],Ab=$,Bb=zb+(Ab<<1)|0,Eb=0|e[Bb>>1],Fb=h,Hb=0|Db(Eb,Fb),Ib=h,Jb=Ib+Hb|0,h=Jb,Kb=$,Lb=Kb+1|0,$=Lb}break;case 1:for(_=0;;){if(i=_,j=Z,k=j+12|0,l=0|f[k>>2],!(i>>>0<l>>>0))break a;n=Z,q=n+20|0,r=0|f[q>>2],s=_,t=r+(s<<3)|0,v=0|f[t>>2],w=h,x=0|Cb(v,w),y=h,z=y+x|0,h=z,A=Z,B=A+20|0,C=0|f[B>>2],D=_,E=C+(D<<3)|0,G=E+4|0,H=0|e[G>>1],I=h,J=0|Db(H,I),K=h,L=K+J|0,h=L,M=_,N=M+1|0,_=N}}O=u,P=O+1<<16>>16,u=P}return R=h,S=cb,T=R,U=S,V=T-U|0,F=V,W=F,X=cb,Cb(W,X),Y=F,o=Ob,0|Y}function Mb(a,b){a|=0,b|=0;var c=0,e=0,f=0,g=0,i=0;return i=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),c=a,e=b,f=c,g=e,d[g>>0]=f,o=i,1}function Nb(a,b,c,d,e){a|=0,b|=0,c|=0,d|=0,e|=0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,q=0,r=0,s=0,t=0,u=0,v=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0;if(Fa=o,o=o+48|0,(0|o)>=(0|p)&&ca(48),k=Fa,ga=a,ra=b,Ca=c,Da=d,g=e,l=Ca,i=l,m=ra,0==(0|m))return W=-6,Ba=W,o=Fa,0|Ba;if(q=ga,r=ra,s=0|Pb(q,r),t=Da,f[t>>2]=s,u=Da,v=0|f[u>>2],0==(0|v))return W=-1,Ba=W,o=Fa,0|Ba;for(x=ga,y=ra,z=Ca,A=0|Qb(x,y,z),B=Ca,C=B+A|0,Ca=C,D=ga,E=ra,F=Ca,G=g,H=0|Rb(D,E,F,G),I=Ca,J=I+H|0,Ca=J,K=ga,L=ra,M=Ca,N=0|Sb(K,L,M),O=Ca,P=O+N|0,Ca=P,Q=ga,R=ra,S=Ca,T=0|Tb(Q,R,S),U=Ca,V=U+T|0,Ca=V,h=0;;){if(X=h,Y=ra,Z=Y+52|0,$=0|f[Z>>2],!(X>>>0<$>>>0)){Ea=10;break}if(aa=ga,ba=ra,da=ba+20|0,ea=0|f[da>>2],fa=h,ha=ea+(fa<<2)|0,ia=0|f[ha>>2],ja=Ca,ka=g,la=0|Nb(aa,ia,ja,k,ka),j=la,ma=j,0!=(0|ma)){Ea=8;break}pa=0|f[k>>2],qa=Ca,sa=qa+pa|0,Ca=sa,ta=h,ua=ta+1|0,h=ua}return 8==(0|Ea)?(oa=j,W=oa,Ba=W,o=Fa,0|Ba):10==(0|Ea)?(va=Ca,wa=i,xa=va,ya=wa,za=xa-ya|0,Aa=Da,f[Aa>>2]=za,W=0,Ba=W,o=Fa,0|Ba):0}function Ob(a,b,c){a|=0,b|=0,c|=0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,q=0,s=0;return s=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),a,j=b,k=c,m=k,l=m,n=l,d[n>>0]=0|d[54491],d[n+1>>0]=0|d[54492],d[n+2>>0]=0|d[54493],d[n+3>>0]=0|d[54494],q=j,e=l,f=e+4|0,Cb(q,f),g=l,h=g+8|0,d[h>>0]=0|d[54466],d[h+1>>0]=0|d[54467],d[h+2>>0]=0|d[54468],d[h+3>>0]=0|d[54469],o=s,0}function Pb(a,b){a|=0,b|=0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;return C=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),m=a,u=b,v=0,w=m,x=0|Wb(w),y=v,z=y+x|0,v=z,A=m,c=u,d=0|Xb(A,c),e=v,f=e+d|0,v=f,g=m,h=u,i=0|Yb(g,h),j=v,k=j+i|0,v=k,l=m,n=u,q=0|Zb(l,n),r=v,s=r+q|0,v=s,t=v,o=C,0|t}function Qb(a,b,c){a|=0,b|=0,c|=0;var d=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,U=0;return U=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),B=a,M=b,O=c,Q=O,P=Q,R=B,S=M,d=0|Pb(R,S),g=P,h=0|Cb(d,g),i=P,j=i+h|0,P=j,k=M,l=0|e[k>>1],m=P,n=0|Db(l,m),q=P,r=q+n|0,P=r,s=M,t=s+2|0,u=0|e[t>>1],v=P,w=0|Db(u,v),x=P,y=x+w|0,P=y,z=M,A=z+52|0,C=0|f[A>>2],D=65535&C,E=P,F=0|Db(D,E),G=P,H=G+F|0,P=H,I=P,J=O,K=I,L=J,N=K-L|0,o=U,0|N}function Rb(a,b,c,d){a|=0,b|=0,c|=0,d|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,w=0,y=0,z=0,A=0,B=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,S=0,T=0,U=0,V=0,W=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ha=0;switch(Ha=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),a,W=b,ga=c,ra=d,e=ga,Ca=e,g=W,h=g+40|0,i=0|f[h>>2],j=Ca,k=0|Cb(i,j),l=Ca,m=l+k|0,Ca=m,n=Ca,q=0|Ub(n),r=Ca,s=r+q|0,Ca=s,t=ra,u=255&t,0|6&u){case 2:if(w=0|Bb(),!(0!=(0|w))){for(Fa=0;;){if(y=Fa,z=W,A=z+40|0,B=0|f[A>>2],!(y>>>0<B>>>0))break;D=W,E=D+8|0,F=0|f[E>>2],G=Fa,H=F+(G<<2)|0,I=0|f[H>>2],J=Ca,K=0|Cb(I,J),M=Ca,N=M+K|0,Ca=N,O=Fa,P=O+1|0,Fa=P}return za=Ca,Aa=ga,Ba=za,Da=Aa,Ea=Ba-Da|0,o=Ha,0|Ea}break;case 4:if(Q=0|Bb(),0!=(0|Q)){for(Fa=0;;){if(S=Fa,T=W,U=T+40|0,V=0|f[U>>2],!(S>>>0<V>>>0))break;Y=W,Z=Y+8|0,$=0|f[Z>>2],_=Fa,aa=$+(_<<2)|0,ba=0|f[aa>>2],da=Ca,ea=0|Vb(ba,da),fa=Ca,ha=fa+ea|0,Ca=ha,ia=Fa,ja=ia+1|0,Fa=ja}return za=Ca,Aa=ga,Ba=za,Da=Aa,Ea=Ba-Da|0,o=Ha,0|Ea}break;case 6:break;default:return za=Ca,Aa=ga,Ba=za,Da=Aa,Ea=Ba-Da|0,o=Ha,0|Ea}return ka=Ca,la=W,ma=la+8|0,na=0|f[ma>>2],oa=W,pa=oa+40|0,qa=0|f[pa>>2],sa=qa<<2,$w(0|ka,0|na,0|sa),ta=W,ua=ta+40|0,va=0|f[ua>>2],wa=va<<2,xa=Ca,ya=xa+wa|0,Ca=ya,za=Ca,Aa=ga,Ba=za,Da=Aa,Ea=Ba-Da|0,o=Ha,0|Ea}function Sb(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,$a=0,_a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0;for(mb=o,o=o+96|0,(0|o)>=(0|p)&&ca(96),e=mb+72|0,d=mb+64|0,ab=mb+32|0,x=mb+16|0,y=mb+8|0,P=a,$=b,ka=c,A=ka,Ga=A,B=$,C=B+44|0,D=0|f[C>>2],E=Ga,F=0|Cb(D,E),G=Ga,H=G+F|0,Ga=H,va=0;;){if(I=va,J=$,K=J+44|0,L=0|f[K>>2],!(I>>>0<L>>>0))break;switch(N=P,O=0|Wc(N),t=O,Q=$,R=Q+12|0,S=0|f[R>>2],T=va,U=S+(T<<3)|0,V=U+4|0,0|(0|f[V>>2])){case 3:X=Ga,Y=0|Mb(1,X),Z=Ga,_=Z+Y|0,Ga=_,aa=P,ba=$,da=ba+12|0,ea=0|f[da>>2],fa=va,ga=ea+(fa<<3)|0,f[d>>2]=0|f[ga>>2],f[d+4>>2]=0|f[ga+4>>2],pe(x,aa,d,10),f[ab>>2]=0|f[x>>2],f[ab+4>>2]=0|f[x+4>>2],lb=7;break;case 6:ha=Ga,ia=0|Mb(2,ha),ja=Ga,la=ja+ia|0,Ga=la,ma=P,na=$,oa=na+12|0,pa=0|f[oa>>2],qa=va,ra=pa+(qa<<3)|0,f[e>>2]=0|f[ra>>2],f[e+4>>2]=0|f[ra+4>>2],cc(y,ma,e,54496),f[ab>>2]=0|f[y>>2],f[ab+4>>2]=0|f[y+4>>2],lb=7;break;case 16:sa=Ga,ta=0|Mb(0,sa),ua=Ga,wa=ua+ta|0,Ga=wa,xa=$,ya=xa+12|0,za=0|f[ya>>2],Aa=va,Ba=za+(Aa<<3)|0,f[ab>>2]=0|f[Ba>>2],f[ab+4>>2]=0|f[Ba+4>>2],lb=7}7==(0|lb)&&(lb=0,Ca=0|f[ab>>2],Da=0|f[Ca>>2],Ea=Da>>>11,Fa=8&Ea,Ha=0!=(0|Fa),Ia=0|f[ab>>2],Ja=Ia+12|0,Ha?Ma=Ja:(Ka=Ja+8|0,La=0|f[Ka>>2],Ma=La),g=Ma,Na=0|f[ab>>2],Oa=0|f[Na>>2],Pa=Oa>>>11,Qa=8&Pa,Sa=0!=(0|Qa),Ta=0|f[ab>>2],Sa?(Ua=0|f[Ta>>2],Va=Ua>>>11,Wa=496&Va,Xa=Wa>>4,$a=Xa):(Ya=Ta+12|0,Za=0|f[Ya>>2],$a=Za),z=$a,_a=z,bb=65535&_a,Ra=bb,cb=Ra,db=Ga,eb=0|Db(cb,db),fb=Ga,gb=fb+eb|0,Ga=gb,hb=Ga,ib=g,jb=Ra,kb=65535&jb,$w(0|hb,0|ib,0|kb),h=Ra,i=65535&h,j=Ga,k=j+i|0,Ga=k,l=P,m=t,Xc(l,m)),n=va,q=n+1|0,va=q}return r=Ga,s=ka,u=r,v=s,w=u-v|0,o=mb,0|w}function Tb(a,b,c){a|=0,b|=0,c|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,ra=0;for(ra=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),pa=ra,B=a,M=b,X=c,e=X,na=e,g=M,h=g+48|0,i=0|f[h>>2],j=na,k=0|Cb(i,j),l=na,m=l+k|0,na=m,ha=0;;){if(n=ha,q=M,r=q+48|0,s=0|f[r>>2],!(n>>>0<s>>>0))break;u=M,v=u+16|0,w=0|f[v>>2],x=ha,y=w+(x<<2)|0,z=0|f[y>>2],A=0!=(0|z),A?(C=B,D=M,E=D+16|0,F=0|f[E>>2],G=ha,H=F+(G<<2)|0,I=0|f[H>>2],J=0|ri(C,I,pa),oa=J,K=0|f[pa>>2],L=65535&K,N=na,O=0|Db(L,N),P=na,Q=P+O|0,na=Q,R=na,S=oa,T=0|f[pa>>2],$w(0|R,0|S,0|T),U=0|f[pa>>2],V=65535&U,W=65535&V,Y=na,Z=Y+W|0,na=Z,$=na,_=$+1|0,na=_,d[$>>0]=0):(aa=na,ba=0|Db(-1,aa),da=na,ea=da+ba|0,na=ea),fa=ha,ga=fa+1|0,ha=ga}return ia=na,ja=X,ka=ia,la=ja,ma=ka-la|0,o=ra,0|ma}function Ub(a){a|=0;var b=0,c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,q=0;return q=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),b=a,4,h=b,i=h,j=0-i|0,k=3&j,g=k,l=g,m=l>>>0>0,m&&(c=b,d=g,Ow(0|c,0,0|d)),e=g,o=q,0|e}function Vb(a,b){a|=0,b|=0;var c=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,E=0;return E=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),n=a,w=b,x=n,y=x>>>24,z=255&y,A=255&z,B=w,C=B+3|0,d[C>>0]=A,c=n,e=c>>>16,f=255&e,g=255&f,h=w,i=h+2|0,d[i>>0]=g,j=n,k=j>>>8,l=255&k,m=255&l,q=w,r=q+1|0,d[r>>0]=m,s=n,t=255&s,u=255&t,v=w,d[v>>0]=u,o=E,4}function Wb(a){a|=0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0;return j=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),a,c=0,d=c,e=d+4|0,c=e,f=c,g=f+6|0,c=g,h=c,o=j,0|h}function Xb(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,u=0;return u=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),a,k=b,l=0,m=l,n=m+4|0,l=n,q=l,r=q+4|0,l=r,s=k,c=s+40|0,d=0|f[c>>2],e=d<<2,g=l,h=g+e|0,l=h,i=l,o=u,0|i}function Yb(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,$a=0,_a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,jb=0;for(jb=o,o=o+80|0,(0|o)>=(0|p)&&ca(80),d=jb+72|0,c=jb+64|0,sa=jb+40|0,Oa=jb+24|0,e=jb+8|0,B=a,M=b,X=0,u=X,v=u+4|0,X=v,w=M,x=w+44|0,y=0|f[x>>2],z=3*y|0,A=X,C=A+z|0,X=C,ha=0;;){if(D=ha,E=M,F=E+44|0,G=0|f[F>>2],!(D>>>0<G>>>0))break;switch(I=B,J=0|Wc(I),Da=J,K=M,L=K+12|0,N=0|f[L>>2],O=ha,P=N+(O<<3)|0,Q=P+4|0,0|(0|f[Q>>2])){case 3:S=B,T=M,U=T+12|0,V=0|f[U>>2],W=ha,Y=V+(W<<3)|0,f[c>>2]=0|f[Y>>2],f[c+4>>2]=0|f[Y+4>>2],pe(Oa,S,c,10),f[sa>>2]=0|f[Oa>>2],f[sa+4>>2]=0|f[Oa+4>>2],Z=0|f[sa>>2],$=0|f[Z>>2],_=$>>>11,aa=8&_,ba=0!=(0|aa),da=0|f[sa>>2],ba?(ea=0|f[da>>2],fa=ea>>>11,ga=496&fa,ia=ga>>4,la=ia):(ja=da+12|0,ka=0|f[ja>>2],la=ka),Za=la,ma=Za,na=X,oa=na+ma|0,X=oa;break;case 6:pa=B,qa=M,ra=qa+12|0,ta=0|f[ra>>2],ua=ha,va=ta+(ua<<3)|0,f[d>>2]=0|f[va>>2],f[d+4>>2]=0|f[va+4>>2],cc(e,pa,d,54496),f[sa>>2]=0|f[e>>2],f[sa+4>>2]=0|f[e+4>>2],wa=0|f[sa>>2],xa=0|f[wa>>2],ya=xa>>>11,za=8&ya,Aa=0!=(0|za),Ba=0|f[sa>>2],Aa?(Ca=0|f[Ba>>2],Ea=Ca>>>11,Fa=496&Ea,Ga=Fa>>4,Ja=Ga):(Ha=Ba+12|0,Ia=0|f[Ha>>2],Ja=Ia),s=Ja,Ka=s,La=X,Ma=La+Ka|0,X=Ma;break;case 16:Na=M,Pa=Na+12|0,Qa=0|f[Pa>>2],Ra=ha,Sa=Qa+(Ra<<3)|0,Ta=0|f[Sa>>2],Ua=0|f[Ta>>2],Va=Ua>>>11,Wa=8&Va,Xa=0!=(0|Wa),Ya=M,$a=Ya+12|0,_a=0|f[$a>>2],ab=ha,bb=_a+(ab<<3)|0,cb=0|f[bb>>2],Xa?(db=0|f[cb>>2],eb=db>>>11,fb=496&eb,gb=fb>>4,h=gb):(hb=cb+12|0,g=0|f[hb>>2],h=g),t=h,i=t,j=X,k=j+i|0,X=k}l=B,m=Da,Xc(l,m),n=ha,q=n+1|0,ha=q}return r=X,o=jb,0|r}function Zb(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,O=0;for(O=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),J=O,n=a,A=b,H=0,K=H,L=K+4|0,H=L,I=0;;){if(M=I,c=A,d=c+48|0,e=0|f[d>>2],g=M>>>0<e>>>0,h=H,!g)break;i=h+2|0,H=i,j=A,k=j+16|0,l=0|f[k>>2],m=I,q=l+(m<<2)|0,r=0|f[q>>2],s=0!=(0|r),s&&(t=n,u=A,v=u+16|0,w=0|f[v>>2],x=I,y=w+(x<<2)|0,z=0|f[y>>2],ri(t,z,J),B=0|f[J>>2],C=B+1|0,D=H,E=D+C|0,H=E),F=I,G=F+1|0,I=G}return o=O,0|h}function $b(a,b){a|=0,b|=0;var c=0,d=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,K=0;for(K=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),q=a,B=b,D=0,F=B,G=0|e[F>>1],H=65535&G,I=H-1|0,c=I<<2,d=D,g=d+c|0,D=g,E=0;;){if(h=E,i=B,j=i+52|0,k=0|f[j>>2],!(h>>>0<k>>>0))break;m=q,n=B,r=n+20|0,s=0|f[r>>2],t=E,u=s+(t<<2)|0,v=0|f[u>>2],w=0|$b(m,v),x=D,y=x+w|0,D=y,z=E,A=z+1|0,E=A}return C=D,o=K,0|C}function _b(a,b,c,d){a|=0,b|=0,c|=0,d|=0;var e=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,J=0;return J=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),H=J+8|0,e=J+4|0,D=a,E=b,F=c,G=d,f[H>>2]=0,f[e>>2]=0,h=G,0==(0|h)?(C=-7,B=C,o=J,0|B):(j=D,k=E,l=F,m=0|lb(l,0),n=0|mb(j,k,m,H,e),g=n,q=g,r=0==(0|q),r&&(s=0|f[H>>2],t=0|f[e>>2],u=G,v=0|jw(s,1,t,u),w=0|f[e>>2],(0|v)!=(0|w)&&(g=-2)),y=D,z=0|f[H>>2],xc(y,z),A=g,C=A,B=C,o=J,0|B)}function ac(a,b,c,e,g){a|=0,b|=0,c|=0,e|=0,g|=0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,K=0,L=0,M=0,O=0,P=0,Q=0,R=0,T=0,U=0,V=0,W=0,X=0,Y=0,$=0,_=0,aa=0,ba=0,ea=0,fa=0,ha=0,ia=0,ja=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,xa=0,ya=0,za=0,Aa=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0;if(Ta=o,o=o+96|0,(0|o)>=(0|p)&&ca(96),Ma=Ta+40|0,Pa=Ta+24|0,Oa=Ta+16|0,Na=Ta+8|0,La=Ta,i=Ta+56|0,j=Ta+52|0,ha=a,sa=b,Da=c,Ja=e,h=g,f[i>>2]=0,f[j>>2]=0,k=0,m=Ja,n=0==(0|m),q=h,r=0==(0|q),!(n|r||(s=h,t=0|d[s>>0],u=t<<24>>24,0==(0|u)))){w=Da,x=0|lb(w,2),Da=x,y=ha,z=sa,A=Da,B=0|mb(y,z,A,i,j),l=B,C=l,D=0==(0|C);do{if(D){if(E=Da,F=0|bc(E),G=F<<24>>24!=0,H=Ja,G){if(M=0|yw(H,54583,Na),(0|M)<0)return O=ha,P=0|f[i>>2],xc(O,P),X=-2,Ia=X,o=Ta,0|Ia}else if(I=0|yw(H,54501,La),(0|I)<0)return K=ha,L=0|f[i>>2],xc(K,L),X=-2,Ia=X,o=Ta,0|Ia;if(Q=Ja,R=0|yw(Q,54687,Oa),(0|R)<0)return T=ha,U=0|f[i>>2],xc(T,U),X=-2,Ia=X,o=Ta,0|Ia;if(V=Ja,W=h,f[Pa>>2]=4,Qa=Pa+4|0,f[Qa>>2]=4,Ra=Pa+8|0,f[Ra>>2]=W,Y=0|yw(V,54708,Pa),(0|Y)<0)return $=ha,_=0|f[i>>2],xc($,_),X=-2,Ia=X,o=Ta,0|Ia;for(;;){if(aa=k,ba=0|f[j>>2],!(aa>>>0<ba>>>0)){Sa=20;break}if(ea=k,fa=(ea>>>0)%16&-1,0==(0|fa)&&(ia=Ja,ja=0|iw(67789,ia),-1==(0|ja))){Sa=17;break}if(na=Ja,oa=0|f[i>>2],pa=k,qa=pa+1|0,k=qa,ra=oa+pa|0,ta=0|d[ra>>0],ua=255&ta,f[Ma>>2]=ua,va=0|yw(na,54833,Ma),(0|va)<0){Sa=19;break}}if(17==(0|Sa))return la=ha,ma=0|f[i>>2],xc(la,ma),X=-2,Ia=X,o=Ta,0|Ia;if(19==(0|Sa))return xa=ha,ya=0|f[i>>2],xc(xa,ya),X=-2,Ia=X,o=Ta,0|Ia;if(20==(0|Sa)){if(za=Ja,Aa=0|iw(54841,za),!(-1==(0|Aa)))break;return Ca=ha,Ea=0|f[i>>2],xc(Ca,Ea),X=-2,Ia=X,o=Ta,0|Ia}}}while(0);return Fa=ha,Ga=0|f[i>>2],xc(Fa,Ga),Ha=l,X=Ha,Ia=X,o=Ta,0|Ia}return X=-7,Ia=X,o=Ta,0|Ia}function bc(a){a|=0;var b=0,c=0,d=0,e=0,g=0,h=0,i=0,k=0;switch(k=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),c=a,d=c,e=255&d,0|6&e){case 2:b=1;break;case 4:b=0;break;default:g=0|Bb(),h=255&g,b=h}return i=b,o=k,0|i}function cc(a,b,c,d){a|=0,b|=0,c|=0,d|=0;var e=0,g=0,h=0,i=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,y=0;if(y=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),t=y+8|0,u=y,r=b,s=d,v=r,f[t>>2]=v,w=t+4|0,e=r,kg(u,e,24),f[w>>2]=0|f[u>>2],f[w+4>>2]=0|f[u+4>>2],g=s,h=+j[c>>2],i=0|dc(t,g,h),!((0|i)<0))return q=t+4|0,f[a>>2]=0|f[q>>2],f[a+4>>2]=0|f[q+4>>2],void(o=y);l=r,m=r,n=0|sp(m,69160),Ar(l,n,54846)}function dc(a,b,c){a|=0,b|=0,c=+c;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,Y=0;if(Y=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),L=a,S=b,T=c,V=S,W=0|d[V>>0],e=W<<24>>24,37!=(0|e))return A=-1,R=A,o=Y,0|R;g=S,h=g+1|0,S=h,i=S,j=0|d[i>>0],k=j<<24>>24,l=46==(0|k);a:if(l)for(m=S,n=m+1|0,S=n,U=0;;){if(q=S,r=0|d[q>>0],s=r<<24>>24,t=s-48|0,!(t>>>0<10))break a;v=U,w=10*v|0,x=S,y=0|d[x>>0],z=y<<24>>24,B=z-48|0,C=w+B|0,U=C,D=S,E=D+1|0,S=E}else U=-1;switch(F=S,G=0|d[F>>0],0|G<<24>>24){case 65:case 71:case 70:case 69:case 97:case 103:case 102:case 101:return I=L,J=T,K=J,M=U,N=S,O=0|d[N>>0],P=O<<24>>24,Q=0|ec(I,K,0,M,0,P),A=Q,R=A,o=Y,0|R;default:return A=-1,R=A,o=Y,0|R}return 0}function ec(a,b,c,e,g,h){a|=0,b=+b,c|=0,e|=0,g|=0,h|=0;var i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,fa=0,ga=0,ha=0,ia=0,ja=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,$a=0,_a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Gb=0,Hb=0,Ib=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,$b=0,_b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,yc=0,zc=0,Ac=0,Bc=0,Cc=0,Dc=0,Ec=0,Fc=0,Gc=0,Hc=0,Ic=0,Jc=0,Kc=0,Lc=0,Mc=0,Nc=0,Oc=0,Pc=0,Qc=0,Rc=0,Sc=0,Tc=0,Uc=0,Vc=0,Wc=0,Xc=0,Yc=0,Zc=0,$c=0,_c=0,ad=0,bd=0,cd=0,dd=0,ed=0,fd=0,gd=0,hd=0,id=0,jd=0,kd=0,ld=0,md=0,nd=0,od=0,pd=0,qd=0,rd=0,sd=0,td=0,ud=0,vd=0,wd=0,xd=0,yd=0,zd=0,Ad=0,Bd=0,Cd=0,Dd=0,Ed=0,Fd=0,Gd=0,Hd=0,Id=0,Jd=0,Kd=0,Ld=0,Md=0,Nd=0,Od=0,Pd=0,Qd=0,Rd=0,Sd=0,Td=0,Ud=0,Vd=0,Wd=0,Xd=0,Yd=0,Zd=0,_d=0,ae=0,ce=0,de=0,ee=0,fe=0,ge=0,he=0,ie=0,je=0,le=0,me=0,ne=0,oe=0,pe=0,qe=0,re=0,se=0,te=0,ue=0,ve=0,we=0,xe=0,ye=0,ze=0,Ae=0,Be=0,Ce=0,De=0,Ee=0,Fe=0,He=0,Ie=0,Je=0,Ke=0,Le=0,Me=0,Ne=0,Oe=0,Pe=0,Re=0,Se=0,Te=0,Ue=0,Ve=0,We=0,Xe=0,Ye=0,Ze=0,$e=0,af=0,bf=0,cf=0,df=0,ef=0,gf=0,hf=0,jf=0,kf=0,lf=0,mf=0,nf=0,pf=0,qf=0,rf=0,sf=0,tf=0,uf=0,vf=0,wf=0,xf=0,yf=0,zf=0,Af=0,Bf=0,Cf=0,Df=0,Ff=0,Gf=0,Hf=0,If=0,Jf=0,Kf=0,Lf=0,Mf=0,Nf=0,Of=0,Pf=0,Qf=0,Rf=0,Sf=0,Tf=0,Uf=0,Vf=0,Wf=0,Xf=0,Yf=0,Zf=0,$f=0,_f=0,ag=0,bg=0,cg=0,dg=0,eg=0,fg=0,gg=0,hg=0,ig=0,jg=0,kg=0,lg=0,mg=0,ng=0,og=0,pg=0,qg=0,rg=0,sg=0,tg=0,ug=0,vg=0,wg=0,xg=0,yg=0,zg=0,Ag=0,Bg=0,Cg=0,Dg=0,Eg=0,Fg=0,Gg=0,Hg=0,Ig=0,Jg=0,Kg=0,Lg=0,Mg=0,Ng=0,Og=0,Pg=0,Qg=0,Rg=0,Sg=0,Ug=0,Vg=0,Wg=0,Xg=0,Yg=0,Zg=0,$g=0,_g=0,ah=0,bh=0,ch=0,dh=0,eh=0,fh=0,gh=0,hh=0,ih=0,jh=0,kh=0,lh=0,mh=0,nh=0,oh=0,ph=0,qh=0,rh=0,sh=0,th=0,uh=0,vh=0,wh=0,xh=0,zh=0,Ah=0,Bh=0,Ch=0,Dh=0,Eh=0,Fh=0,Gh=0,Hh=0,Ih=0,Jh=0,Kh=0,Lh=0,Mh=0,Nh=0,Oh=0,Qh=0,Rh=0,Sh=0,Th=0,Uh=0,Vh=0,Wh=0,Xh=0,Yh=0,Zh=0,$h=0,_h=0,ai=0,bi=0,di=0,ei=0,gi=0,hi=0,ii=0,ji=0,ki=0,li=0,mi=0,ni=0,oi=0,pi=0,qi=0,ri=0,si=0,ti=0,vi=0,wi=0,xi=0,zi=0,Ai=0,Bi=0,Ci=0,Di=0,Ei=0,Gi=0,Hi=0,Ii=0,Ji=0,Ki=0,Li=0,Mi=0,Ni=0,Oi=0,Pi=0,Qi=0,Ri=0,Si=0,Ui=0,Vi=0,Wi=0,Xi=0,Yi=0,Zi=0,$i=0,_i=0,bj=0,cj=0,dj=0,ej=0,fj=0,gj=0,hj=0,ij=0,jj=0,kj=0,lj=0,mj=0,nj=0,oj=0,pj=0,qj=0,sj=0,tj=0,uj=0,vj=0,wj=0,yj=0,zj=0,Aj=0,Bj=0,Cj=0,Dj=0,Ej=0,Fj=0,Gj=0,Hj=0,Ij=0,Jj=0,Kj=0,Lj=0,Nj=0,Oj=0,Pj=0,Qj=0,Rj=0,Tj=0,Uj=0,Vj=0,Wj=0,Xj=0,Yj=0,Zj=0,$j=0,_j=0,ak=0,bk=0,ck=0,dk=0,ek=0,fk=0,gk=0,hk=0,ik=0,jk=0,kk=0,lk=0,mk=0,nk=0,ok=0,pk=0,qk=0,rk=0,tk=0,uk=0,vk=0,wk=0,xk=0,yk=0,zk=0,Bk=0,Ck=0,Dk=0,Ek=0,Fk=0,Gk=0,Ik=0,Jk=0,Kk=0,Lk=0,Mk=0,Nk=0,Ok=0,Pk=0,Qk=0,Rk=0,Sk=0,Tk=0,Uk=0,Vk=0,Wk=0,Xk=0,Yk=0,Zk=0,$k=0,_k=0,al=0,bl=0,cl=0,dl=0,el=0,fl=0,gl=0,hl=0,il=0,jl=0,kl=0,ll=0,ml=0,nl=0,ol=0,pl=0,ql=0,rl=0,sl=0,tl=0,ul=0,vl=0,wl=0,xl=0,yl=0,zl=0,Bl=0,Cl=0,Dl=0,El=0,Fl=0,Gl=0,Hl=0,Il=0,Jl=0,Kl=0,Ll=0,Ml=0,Nl=0,Ol=0,Pl=0,Ql=0,Rl=0,Sl=0,Tl=0,Ul=0,Vl=0,Wl=0,Xl=0,Yl=0,Zl=0,$l=0,_l=0,am=0,bm=0,cm=0,dm=0,em=0,fm=0,gm=0,hm=0,im=0,jm=0,km=0,lm=0,mm=0,nm=0,om=0,pm=0,qm=0,rm=0,sm=0,tm=0,um=0,wm=0,xm=0,ym=0,zm=0,Am=0,Bm=0,Cm=0,Dm=0,Em=0,Fm=0,Gm=0,Hm=0,Im=0,Jm=0,Km=0,Lm=0,Mm=0,Nm=0,Om=0,Pm=0,Qm=0,Rm=0,Tm=0,Um=0,Vm=0,Wm=0,Xm=0,Ym=0,Zm=0,_m=0,an=0,bn=0,cn=0,dn=0,en=0,fn=0,gn=0,hn=0,jn=0,kn=0,ln=0,mn=0,nn=0,on=0,pn=0,rn=0,sn=0,tn=0,un=0,vn=0,wn=0,xn=0,yn=0,zn=0,An=0,Bn=0,Cn=0,Dn=0,En=0,Fn=0,Gn=0,Hn=0,In=0,Jn=0,Kn=0,Ln=0,Mn=0,Nn=0,On=0,Pn=0,Qn=0,Rn=0,Sn=0,Tn=0,Un=0,Vn=0,Wn=0,Xn=0,Yn=0,Zn=0,$n=0,_n=0,ao=0,bo=0,co=0,eo=0,fo=0,ho=0,io=0,jo=0,ko=0,lo=0,mo=0,no=0,po=0,qo=0,ro=0,so=0,to=0,uo=0,vo=0,wo=0,xo=0,zo=0,Ao=0,Bo=0,Co=0,Do=0,Fo=0,Go=0,Ho=0,Io=0,Jo=0,Ko=0,Lo=0,Mo=0,No=0,Oo=0,Po=0,Qo=0,Ro=0,So=0,To=0,Uo=0,Wo=0,Xo=0,Yo=0,Zo=0,$o=0,_o=0,ap=0,cp=0,dp=0,ep=0,fp=0,gp=0,hp=0,jp=0,kp=0,lp=0,mp=0,np=0,op=0,pp=0,qp=0,rp=0,sp=0,tp=0,up=0,vp=0,wp=0,xp=0,yp=0,zp=0,Ap=0,Bp=0,Cp=0,Dp=0,Ep=0,Fp=0,Gp=0,Hp=0,Ip=0,Jp=0,Kp=0,Mp=0,Np=0,Op=0,Pp=0,Qp=0,Rp=0,Sp=0,Tp=0,Up=0,Vp=0,Wp=0,Xp=0,Yp=0,Zp=0,$p=0,_p=0,bq=0,cq=0,dq=0,eq=0,fq=0,gq=0,iq=0,jq=0,kq=0,mq=0,nq=0,oq=0,pq=0,qq=0,rq=0,sq=0,tq=0,uq=0,vq=0,wq=0,xq=0,yq=0,zq=0,Aq=0,Bq=0,Cq=0,Dq=0,Eq=0,Fq=0,Gq=0,Hq=0,Iq=0,Jq=0,Kq=0,Lq=0,Mq=0,Nq=0,Oq=0,Pq=0,Qq=0,Rq=0,Sq=0,Tq=0,Uq=0,Vq=0,Wq=0,Xq=0,Yq=0,Zq=0,$q=0,_q=0,ar=0,br=0,cr=0,dr=0,er=0,fr=0,gr=0,hr=0,ir=0,jr=0,kr=0,lr=0,mr=0,nr=0,or=0,pr=0,qr=0,rr=0,sr=0,tr=0,vr=0,wr=0,xr=0;xr=o,o=o+720|0,(0|o)>=(0|p)&&ca(720),S=xr+152|0,eb=xr+128|0,Wb=xr+692|0,Qc=xr+680|0,He=xr+16|0,Fl=a,Jn=b,Np=c,i=e,v=g,H=h,f[eb>>2]=0,uc=70736,eh=Qc+12|0,_c=eh,Fc=1,ph=Jn,Ah=0|gc(ph),Lh=G,Wh=0|Pw(0|Ah,0|Lh,63),qi=0!=(0|Wh);do{if(!qi){if(Xi=v,gj=2048&Xi,0!=(0|gj)){Dj=uc,Oj=Dj+3|0,uc=Oj;break}if(Zj=v,ik=1&Zj,tk=0!=(0|ik),Ek=uc,tk){Pk=Ek+6|0,uc=Pk;break}$k=Ek+1|0,uc=$k,Fc=0;break}Bi=Jn,Mi=-Bi,Jn=Mi}while(0);if(jl=Jn,ul=0|gc(jl),Gl=G,Rl=2147483647&Gl,am=Rl>>>0<2146435072,lm=ul>>>0<0,wm=2146435072==(0|Rl),Hm=wm&lm,!(am|Hm))return bn=H,nn=32&bn,yn=0!=(0|nn),Kn=yn?70755:70759,vd=Kn,Vn=Jn,fo=Jn,qo=Vn!=fo,qo&&(Bo=H,Mo=32&Bo,Xo=0!=(0|Mo),gp=Xo?72686:70763,vd=gp),rp=Fl,Cp=Np,Op=Fc,Zp=3+Op|0,iq=v,tq=-65537&iq,hc(rp,32,Cp,Zp,tq),Eq=Fl,Pq=uc,$q=Fc,ic(Eq,Pq,$q),jr=Fl,rr=vd,ic(jr,rr,3),sr=Fl,j=Np,k=Fc,l=3+k|0,m=v,n=8192^m,hc(sr,32,j,l,n),q=Np,r=Fc,s=3+r|0,t=(0|q)>(0|s),u=Np,w=Fc,x=3+w|0,y=t?u:x,Cj=y,qr=Cj,o=xr,0|qr;if(z=Jn,A=+Bv(z,eb),B=2*A,Jn=B,C=Jn,D=0!=C,D&&(E=0|f[eb>>2],F=E+-1|0,f[eb>>2]=F),I=H,J=32|I,97==(0|J)){Gd=8,L=H,M=32&L,N=0!=(0|M),N&&(O=uc,P=O+9|0,uc=P),Q=Fc,R=Q+2|0,Fc=R,T=i,U=(0|T)<0,W=i,X=(0|W)>=12,tr=U|X,tr?Rd=0:(Y=i,Z=12-Y|0,Rd=Z),$=Rd,_=0!=(0|$);do{if(_){for(;;){if(aa=Rd,ba=aa+-1|0,Rd=ba,!(0!=(0|aa)))break;fa=Gd,ga=16*fa,Gd=ga}if(ha=uc,ia=0|d[ha>>0],ja=ia<<24>>24,45==(0|ja)){la=Jn,ma=-la,Jn=ma,na=Gd,pa=Jn,qa=pa-na,Jn=qa,ra=Gd,sa=Jn,ta=sa+ra,Jn=ta,ua=Jn,va=-ua,Jn=va;break}wa=Gd,xa=Jn,ya=xa+wa,Jn=ya,Aa=Gd,Ba=Jn,Ca=Ba-Aa,Jn=Ca;break}}while(0);for(Da=0|f[eb>>2],Ea=(0|Da)<0,Fa=0|f[eb>>2],Ga=0-Fa|0,Ha=Ea?Ga:Fa,Ia=_c,Ja=0|jc(Ha,Ia),kd=Ja,La=kd,Ma=_c,Na=(0|La)==(0|Ma),Na&&(Oa=kd,Pa=Oa+-1|0,kd=Pa,d[Pa>>0]=48),Qa=0|f[eb>>2],Ra=(0|Qa)<0,Sa=Ra?45:43,Ta=255&Sa,Ua=kd,Wa=Ua+-1|0,kd=Wa,d[Wa>>0]=Ta,Xa=H,Ya=Xa+15|0,Za=255&Ya,$a=kd,_a=$a+-1|0,kd=_a,d[_a>>0]=Za,fc=Wb;;){ab=Jn,bb=~~ab,ae=bb,cb=ae,db=70767+cb|0,fb=0|d[db>>0],gb=fb<<24>>24,hb=H,ib=32&hb,jb=gb|ib,kb=255&jb,lb=fc,mb=lb+1|0,fc=mb,d[lb>>0]=kb,nb=Jn,ob=ae,qb=+(0|ob),rb=nb-qb,sb=16*rb,Jn=sb,tb=fc,ub=tb,vb=Wb,wb=ub-vb|0,xb=1==(0|wb);do{if(xb){if(yb=Jn,zb=0!=yb,Bb=i,Cb=(0|Bb)>0,!(zb|Cb||(Db=v,Eb=8&Db,0!=(0|Eb))))break;Gb=fc,Hb=Gb+1|0,fc=Hb,d[Gb>>0]=46}}while(0);if(Ib=Jn,!(0!=Ib))break}return Kb=i,Mb=0!=(0|Kb),Mb?(Nb=fc,Ob=Nb,Pb=Wb,Qb=Ob-Pb|0,Rb=Qb-2|0,Sb=i,Tb=(0|Rb)<(0|Sb),Tb?(Ub=i,Vb=Ub+2|0,Xb=_c,Yb=kd,Zb=Xb,$b=Yb,_b=Zb-$b|0,ac=Vb+_b|0,Lb=ac):wr=37):wr=37,37==(0|wr)&&(bc=fc,cc=bc,dc=Wb,ec=cc-dc|0,kc=_c,lc=kd,mc=kc,nc=lc,oc=mc-nc|0,pc=ec+oc|0,Lb=pc),qc=Fl,rc=Np,sc=Fc,tc=Lb,vc=sc+tc|0,wc=v,hc(qc,32,rc,vc,wc),xc=Fl,yc=uc,zc=Fc,ic(xc,yc,zc),Ac=Fl,Bc=Np,Cc=Fc,Dc=Lb,Ec=Cc+Dc|0,Gc=v,Hc=65536^Gc,hc(Ac,48,Bc,Ec,Hc),Ic=Fl,Jc=fc,Kc=Jc,Lc=Wb,Mc=Kc-Lc|0,ic(Ic,Wb,Mc),Nc=Fl,Oc=Lb,Pc=_c,Rc=kd,Sc=Pc,Tc=Rc,Uc=Sc-Tc|0,Vc=Oc-Uc|0,Wc=fc,Xc=Wc,Yc=Wb,Zc=Xc-Yc|0,$c=Vc-Zc|0,hc(Nc,48,$c,0,0),ad=Fl,bd=kd,cd=_c,dd=kd,ed=cd,fd=dd,gd=ed-fd|0,ic(ad,bd,gd),hd=Fl,id=Np,jd=Fc,ld=Lb,md=jd+ld|0,nd=v,od=8192^nd,hc(hd,32,id,md,od),pd=Np,qd=Fc,rd=Lb,sd=qd+rd|0,td=(0|pd)>(0|sd),td?(ud=Np,zd=ud):(wd=Fc,xd=Lb,yd=wd+xd|0,zd=yd),Cj=zd,qr=Cj,o=xr,0|qr}for(Ad=i,Bd=(0|Ad)<0,Bd&&(i=6),Cd=Jn,Dd=0!=Cd,Dd&&(Ed=Jn,Fd=268435456*Ed,Jn=Fd,Hd=0|f[eb>>2],Id=Hd-28|0,f[eb>>2]=Id),Jd=0|f[eb>>2],Kd=(0|Jd)<0,Kd?(Ka=S,za=S,da=S):(Ld=S+504|0,Md=Ld+-212|0,Nd=Md+-4|0,Ka=Nd,za=Nd,da=Nd);;)if(Od=Jn,Pd=~~Od>>>0,Qd=Ka,f[Qd>>2]=Pd,Sd=Jn,Td=Ka,Ud=Td+4|0,Ka=Ud,Vd=0|f[Td>>2],Wd=+(Vd>>>0),Xd=Sd-Wd,Yd=1e9*Xd,Jn=Yd,Zd=Jn,!(0!=Zd))break;for(;;){if(_d=0|f[eb>>2],!((0|_d)>0))break;for(le=0,ce=0|f[eb>>2],de=29<(0|ce),ee=0|f[eb>>2],fe=de?29:ee,we=fe,ge=Ka,he=ge+-4|0,oa=he;;){if(ie=oa,je=da,!(ie>>>0>=je>>>0))break;me=oa,ne=0|f[me>>2],oe=we,pe=0|Sw(0|ne,0,0|oe),qe=G,re=le,se=0|Nw(0|pe,0|qe,0|re,0),te=G,ue=He,ve=ue,f[ve>>2]=se,xe=ue+4|0,ye=xe,f[ye>>2]=te,ze=He,Ae=ze,Be=0|f[Ae>>2],Ce=ze+4|0,De=Ce,Ee=0|f[De>>2],Fe=0|ax(0|Be,0|Ee,1e9,0),G,Ie=oa,f[Ie>>2]=Fe,Je=He,Ke=Je,Le=0|f[Ke>>2],Me=Je+4|0,Ne=Me,Oe=0|f[Ne>>2],Pe=0|Ww(0|Le,0|Oe,1e9,0),G,le=Pe,Re=oa,Te=Re+-4|0,oa=Te}for(Ue=le,Ve=0!=(0|Ue),Ve&&(We=le,Xe=da,Ye=Xe+-4|0,da=Ye,f[Ye>>2]=We);;){if(Ze=Ka,$e=da,!(Ze>>>0>$e>>>0))break;if(af=Ka,cf=af+-4|0,df=0|f[cf>>2],ef=0!=(0|df),!(1^ef))break;gf=Ka,hf=gf+-4|0,Ka=hf}jf=we,kf=0|f[eb>>2],lf=kf-jf|0,f[eb>>2]=lf}for(;;){if(mf=0|f[eb>>2],!((0|mf)<0))break;for(Se=0,pf=0|f[eb>>2],qf=0-pf|0,rf=9<(0|qf),sf=0|f[eb>>2],tf=0-sf|0,uf=rf?9:tf,nf=uf,vf=i,wf=vf+17|0,xf=wf+8|0,zf=(0|xf)/9&-1,Af=1+zf|0,yf=Af,Bf=da,oa=Bf;;){if(Cf=oa,Df=Ka,!(Cf>>>0<Df>>>0))break;Ff=oa,Gf=0|f[Ff>>2],Hf=nf,If=1<<Hf,Kf=If-1|0,Lf=Gf&Kf,Jf=Lf,Mf=oa,Nf=0|f[Mf>>2],Of=nf,Pf=Nf>>>Of,Qf=Se,Rf=Pf+Qf|0,Sf=oa,f[Sf>>2]=Rf,Tf=nf,Vf=1e9>>Tf,Wf=Jf,Xf=0|V(Vf,Wf),Se=Xf,Yf=oa,Zf=Yf+4|0,oa=Zf}$f=da,_f=0|f[$f>>2],ag=0!=(0|_f),ag||(bg=da,cg=bg+4|0,da=cg),eg=Se,fg=0!=(0|eg),fg&&(gg=Se,hg=Ka,ig=hg+4|0,Ka=ig,f[hg>>2]=gg),jg=H,kg=32|jg,lg=102==(0|kg),mg=za,ng=da,pg=lg?mg:ng,bf=pg,qg=Ka,rg=bf,sg=qg,tg=rg,ug=sg-tg|0,vg=(0|ug)/4&-1,wg=yf,xg=(0|vg)>(0|wg),xg&&(yg=bf,Ag=yf,Bg=yg+(Ag<<2)|0,Ka=Bg),Cg=nf,Dg=0|f[eb>>2],Eg=Dg+Cg|0,f[eb>>2]=Eg}Fg=da,Gg=Ka,Hg=Fg>>>0<Gg>>>0;a:if(Hg)for(Va=10,Ig=za,Jg=da,Lg=Ig,Mg=Jg,Ng=Lg-Mg|0,Og=(0|Ng)/4&-1,Pg=9*Og|0,pb=Pg;;){if(Qg=da,Rg=0|f[Qg>>2],Sg=Va,!(Rg>>>0>=Sg>>>0))break a;Ug=Va,Wg=10*Ug|0,Va=Wg,Xg=pb,Yg=Xg+1|0,pb=Yg}else pb=0;if(Zg=i,$g=H,_g=32|$g,ah=102!=(0|_g),bh=1&ah,ch=pb,dh=0|V(bh,ch),fh=Zg-dh|0,gh=H,hh=32|gh,ih=103==(0|hh),jh=i,kh=0!=(0|jh),lh=ih?kh:0,mh=1&lh,nh=fh-mh|0,Ab=nh,oh=Ab,qh=Ka,rh=za,sh=qh,th=rh,uh=sh-th|0,vh=(0|uh)/4&-1,wh=vh-1|0,xh=9*wh|0,(0|oh)<(0|xh)){for(zh=za,Bh=zh+4|0,Ch=Ab,Dh=Ch+9216|0,Eh=(0|Dh)/9&-1,Fh=Eh-1024|0,Gh=Bh+(Fh<<2)|0,oa=Gh,Hh=Ab,Ih=Hh+9216|0,Ab=Ih,Jh=Ab,Kh=(0|Jh)%9&-1,Ab=Kh,Va=10,Mh=Ab,Nh=Mh+1|0,Ab=Nh;;){if(Oh=Ab,!((0|Oh)<9))break;Qh=Va,Rh=10*Qh|0,Va=Rh,Sh=Ab,Th=Sh+1|0,Ab=Th}Uh=oa,Vh=0|f[Uh>>2],Xh=Va,Yh=(Vh>>>0)%(Xh>>>0)&-1,Uf=Yh,Zh=Uf,$h=0!=(0|Zh),$h?wr=82:(_h=oa,ai=_h+4|0,bi=Ka,(0|ai)!=(0|bi)&&(wr=82));a:if(82==(0|wr)){dg=9007199254740992,di=oa,ei=0|f[di>>2],gi=Va,hi=(ei>>>0)/(gi>>>0)&-1,ii=1&hi,ji=0!=(0|ii),ji&&(ki=dg,li=ki+2,dg=li),mi=Uf,ni=Va,oi=(ni>>>0)/2&-1,pi=mi>>>0<oi>>>0;do{if(pi)og=.5;else{if(ri=Uf,si=Va,ti=(si>>>0)/2&-1,(0|ri)==(0|ti)&&(vi=oa,wi=vi+4|0,xi=Ka,(0|wi)==(0|xi))){og=1;break}og=1.5}}while(0);if(zi=Fc,Ai=0!=(0|zi),Ai&&(Ci=uc,Di=0|d[Ci>>0],Ei=Di<<24>>24,45==(0|Ei)&&(Gi=dg,Hi=-1*Gi,dg=Hi,Ii=og,Ji=-1*Ii,og=Ji)),Ki=Uf,Li=oa,Ni=0|f[Li>>2],Oi=Ni-Ki|0,f[Li>>2]=Oi,Pi=dg,Qi=og,Ri=Pi+Qi,Si=dg,Ri!=Si){for(Ui=oa,Vi=0|f[Ui>>2],Wi=Va,Yi=Vi+Wi|0,Zi=oa,f[Zi>>2]=Yi;;){if($i=oa,_i=0|f[$i>>2],!(_i>>>0>999999999))break;bj=oa,cj=bj+-4|0,oa=cj,f[bj>>2]=0,dj=oa,ej=da,fj=dj>>>0<ej>>>0,fj&&(hj=da,ij=hj+-4|0,da=ij,f[ij>>2]=0),jj=oa,kj=0|f[jj>>2],lj=kj+1|0,f[jj>>2]=lj}for(Va=10,mj=za,nj=da,oj=mj,pj=nj,qj=oj-pj|0,sj=(0|qj)/4&-1,tj=9*sj|0,pb=tj;;){if(uj=da,vj=0|f[uj>>2],wj=Va,!(vj>>>0>=wj>>>0))break a;yj=Va,zj=10*yj|0,Va=zj,Aj=pb,Bj=Aj+1|0,pb=Bj}}}Ej=Ka,Fj=oa,Gj=Fj+4|0,Hj=Ej>>>0>Gj>>>0,Hj&&(Ij=oa,Jj=Ij+4|0,Ka=Jj)}for(;;){if(Kj=Ka,Lj=da,!(Kj>>>0>Lj>>>0))break;if(Nj=Ka,Pj=Nj+-4|0,Qj=0|f[Pj>>2],Rj=0!=(0|Qj),!(1^Rj))break;Tj=Ka,Uj=Tj+-4|0,Ka=Uj}Vj=H,Wj=32|Vj,Xj=103==(0|Wj);do{if(Xj&&(Yj=i,$j=0!=(0|Yj),$j||(_j=i,ak=_j+1|0,i=ak),bk=i,ck=pb,dk=(0|bk)>(0|ck),ek=pb,fk=(0|ek)>=-4,vr=dk&fk,gk=H,vr?(hk=gk+-1|0,H=hk,jk=pb,kk=jk+1|0,lk=i,mk=lk-kk|0,i=mk):(nk=gk-2|0,H=nk,ok=i,pk=ok+-1|0,i=pk),qk=v,rk=8&qk,!(0!=(0|rk)))){uk=Ka,vk=da,wk=uk>>>0>vk>>>0;a:if(wk)if(xk=Ka,yk=xk+-4|0,zk=0|f[yk>>2],0!=(0|zk))for(Va=10,Ab=0;;){if(Bk=Ka,Ck=Bk+-4|0,Dk=0|f[Ck>>2],Fk=Va,Gk=(Dk>>>0)%(Fk>>>0)&-1,!(0==(0|Gk)))break a;Ik=Va,Jk=10*Ik|0,Va=Jk,Kk=Ab,Lk=Kk+1|0,Ab=Lk}else wr=119;else wr=119;if(119==(0|wr)&&(Ab=9),Mk=H,Nk=32|Mk,Ok=102==(0|Nk),Qk=i,Rk=Ka,Sk=za,Tk=Rk,Uk=Sk,Vk=Tk-Uk|0,Wk=(0|Vk)/4&-1,Xk=Wk-1|0,Yk=9*Xk|0,Ok){Zk=Ab,_k=Yk-Zk|0,al=0>(0|_k),al?nl=0:(bl=Ka,cl=za,dl=bl,el=cl,fl=dl-el|0,gl=(0|fl)/4&-1,hl=gl-1|0,il=9*hl|0,kl=Ab,ll=il-kl|0,nl=ll),ml=(0|Qk)<(0|nl);do{if(ml)ol=i,Nl=ol;else{if(pl=Ka,ql=za,rl=pl,sl=ql,tl=rl-sl|0,vl=(0|tl)/4&-1,wl=vl-1|0,xl=9*wl|0,yl=Ab,zl=xl-yl|0,0>(0|zl)){Nl=0;break}Bl=Ka,Cl=za,Dl=Bl,El=Cl,Hl=Dl-El|0,Il=(0|Hl)/4&-1,Jl=Il-1|0,Kl=9*Jl|0,Ll=Ab,Ml=Kl-Ll|0,Nl=Ml}}while(0);i=Nl;break}Ol=pb,Pl=Yk+Ol|0,Ql=Ab,Sl=Pl-Ql|0,Tl=0>(0|Sl),Tl?gm=0:(Ul=Ka,Vl=za,Wl=Ul,Xl=Vl,Yl=Wl-Xl|0,Zl=(0|Yl)/4&-1,$l=Zl-1|0,_l=9*$l|0,bm=pb,cm=_l+bm|0,dm=Ab,em=cm-dm|0,gm=em),fm=(0|Qk)<(0|gm);do{if(fm)hm=i,Km=hm;else{if(im=Ka,jm=za,km=im,mm=jm,nm=km-mm|0,om=(0|nm)/4&-1,pm=om-1|0,qm=9*pm|0,rm=pb,sm=qm+rm|0,tm=Ab,um=sm-tm|0,0>(0|um)){Km=0;break}xm=Ka,ym=za,zm=xm,Am=ym,Bm=zm-Am|0,Cm=(0|Bm)/4&-1,Dm=Cm-1|0,Em=9*Dm|0,Fm=pb,Gm=Em+Fm|0,Im=Ab,Jm=Gm-Im|0,Km=Jm}}while(0);i=Km;break}}while(0);if(Lm=i,Mm=1+Lm|0,Nm=i,Om=0!=(0|Nm),Om?Um=1:(Pm=v,Qm=8&Pm,Rm=0!=(0|Qm),Um=Rm),Tm=1&Um,Vm=Mm+Tm|0,Lb=Vm,Wm=H,Xm=32|Wm,Ym=102==(0|Xm),Zm=pb,Ym)(0|Zm)>0&&(_m=pb,an=Lb,cn=an+_m|0,Lb=cn);else{for(dn=(0|Zm)<0,en=pb,fn=0-en|0,gn=dn?fn:en,hn=_c,jn=0|jc(gn,hn),kd=jn;;){if(kn=_c,ln=kd,mn=kn,on=ln,pn=mn-on|0,!((0|pn)<2))break;rn=kd,sn=rn+-1|0,kd=sn,d[sn>>0]=48}tn=pb,un=(0|tn)<0,vn=un?45:43,wn=255&vn,xn=kd,zn=xn+-1|0,kd=zn,d[zn>>0]=wn,An=H,Bn=255&An,Cn=kd,Dn=Cn+-1|0,kd=Dn,d[Dn>>0]=Bn,En=_c,Fn=kd,Gn=En,Hn=Fn,In=Gn-Hn|0,Ln=Lb,Mn=Ln+In|0,Lb=Mn}if(Nn=Fl,On=Np,Pn=Fc,Qn=Lb,Rn=Pn+Qn|0,Sn=v,hc(Nn,32,On,Rn,Sn),Tn=Fl,Un=uc,Wn=Fc,ic(Tn,Un,Wn),Xn=Fl,Yn=Np,Zn=Fc,$n=Lb,_n=Zn+$n|0,ao=v,bo=65536^ao,hc(Xn,48,Yn,_n,bo),co=H,eo=32|co,102==(0|eo)){for(ho=da,io=za,jo=ho>>>0>io>>>0,jo&&(ko=za,da=ko),lo=da,oa=lo;;){if(mo=oa,no=za,!(mo>>>0<=no>>>0))break;po=oa,ro=0|f[po>>2],so=Wb+9|0,to=0|jc(ro,so),zg=to,uo=oa,vo=da,wo=(0|uo)!=(0|vo);a:if(wo)for(;;){if(xo=zg,!(xo>>>0>Wb>>>0))break a;zo=zg,Ao=zo+-1|0,zg=Ao,d[Ao>>0]=48}else Co=zg,Do=Wb+9|0,(0|Co)==(0|Do)&&(Fo=zg,Go=Fo+-1|0,zg=Go,d[Go>>0]=48);Ho=Fl,Io=zg,Jo=Wb+9|0,Ko=zg,Lo=Jo,No=Ko,Oo=Lo-No|0,ic(Ho,Io,Oo),Po=oa,Qo=Po+4|0,oa=Qo}for(Ro=i,So=0!=(0|Ro),So?wr=157:(To=v,Uo=8&To,0!=(0|Uo)&&(wr=157)),157==(0|wr)&&(Wo=Fl,ic(Wo,70783,1));;){if(Yo=oa,Zo=Ka,$o=Yo>>>0<Zo>>>0,_o=i,ap=(0|_o)>0,!($o?ap:0))break;for(cp=oa,dp=0|f[cp>>2],ep=Wb+9|0,fp=0|jc(dp,ep),Kg=fp;;){if(hp=Kg,!(hp>>>0>Wb>>>0))break;jp=Kg,kp=jp+-1|0,Kg=kp,d[kp>>0]=48}lp=Fl,mp=Kg,np=i,op=9<(0|np),pp=i,qp=op?9:pp,ic(lp,mp,qp),sp=oa,tp=sp+4|0,oa=tp,up=i,vp=up-9|0,i=vp}wp=Fl,xp=i,yp=xp+9|0,hc(wp,48,yp,9,0)}else{for(zp=Ka,Ap=da,Bp=zp>>>0<=Ap>>>0,Bp&&(Dp=da,Ep=Dp+4|0,Ka=Ep),Fp=da,oa=Fp;;){if(Gp=oa,Hp=Ka,Ip=Gp>>>0<Hp>>>0,Jp=i,Kp=(0|Jp)>=0,!(Ip?Kp:0))break;Mp=oa,Pp=0|f[Mp>>2],Qp=Wb+9|0,Rp=0|jc(Pp,Qp),Vg=Rp,Sp=Vg,Tp=Wb+9|0,Up=(0|Sp)==(0|Tp),Up&&(Vp=Vg,Wp=Vp+-1|0,Vg=Wp,d[Wp>>0]=48),Xp=oa,Yp=da,$p=(0|Xp)!=(0|Yp);a:do{if($p)for(;;){if(_p=Vg,!(_p>>>0>Wb>>>0))break a;bq=Vg,cq=bq+-1|0,Vg=cq,d[cq>>0]=48}else{if(dq=Fl,eq=Vg,fq=eq+1|0,Vg=fq,ic(dq,eq,1),gq=i,!((0|gq)>0||(jq=v,kq=8&jq,0!=(0|kq))))break;mq=Fl,ic(mq,70783,1)}}while(0);nq=Fl,oq=Vg,pq=Wb+9|0,qq=Vg,rq=pq,sq=qq,uq=rq-sq|0,vq=i,wq=(0|uq)<(0|vq),wq?(xq=Wb+9|0,yq=Vg,zq=xq,Aq=yq,Bq=zq-Aq|0,Dq=Bq):(Cq=i,Dq=Cq),ic(nq,oq,Dq),Fq=Wb+9|0,Gq=Vg,Hq=Fq,Iq=Gq,Jq=Hq-Iq|0,Kq=i,Lq=Kq-Jq|0,i=Lq,Mq=oa,Nq=Mq+4|0,oa=Nq}Oq=Fl,Qq=i,Rq=Qq+18|0,hc(Oq,48,Rq,18,0),Sq=Fl,Tq=kd,Uq=_c,Vq=kd,Wq=Uq,Xq=Vq,Yq=Wq-Xq|0,ic(Sq,Tq,Yq)}return Zq=Fl,_q=Np,ar=Fc,br=Lb,cr=ar+br|0,dr=v,er=8192^dr,hc(Zq,32,_q,cr,er),fr=Np,gr=Fc,hr=Lb,ir=gr+hr|0,kr=(0|fr)>(0|ir),kr?(lr=Np,pr=lr):(mr=Fc,nr=Lb,or=mr+nr|0,pr=or),Cj=pr,qr=Cj,o=xr,0|qr}function gc(a){a=+a;var b=0,c=0,d=0,e=0,g=0,h=0,i=0,j=0,l=0,n=0;return n=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),c=n,b=a,d=b,k[c>>3]=d,e=c,g=e,h=0|f[g>>2],i=e+4|0,j=i,l=0|f[j>>2],G=l,o=n,0|h}function hc(a,b,c,d,e){a|=0,b|=0,c|=0,d|=0,e|=0;var f=0,g=0,h=0,j=0,k=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,K=0;if(K=o,o=o+288|0,(0|o)>=(0|p)&&ca(288),f=K+16|0,E=a,F=b,G=c,H=d,I=e,g=I,h=73728&g,0!=(0|h))return void(o=K);if(j=H,k=G,(0|j)>=(0|k))return void(o=K);for(m=G,n=H,q=m-n|0,H=q,r=F,s=r<<24>>24,t=255&s,u=H,v=(0|u)>256,w=H,x=v?256:w,Ow(0|f,0|t,0|x);;){if(y=H,z=(0|y)>=256,A=E,!z)break;ic(A,f,256),B=H,C=B-256|0,H=C}D=H,ic(A,f,D),o=K}function ic(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,s=0;s=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),d=s+24|0,l=s,i=a,j=b,k=c,m=i,n=0|f[m>>2],q=i,e=q+4|0,g=j,h=k,f[d>>2]=0|f[e>>2],f[d+4>>2]=0|f[e+4>>2],ch(l,n,d,g,h),o=s}function jc(a,b){a|=0,b|=0;var c=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,q=0,r=0,t=0;for(t=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),i=a,j=b;;){if(k=i,!(0!=(0|k)))break;m=i,n=(m>>>0)%10&-1,q=48+n|0,r=255&q,c=j,e=c+-1|0,j=e,d[e>>0]=r,f=i,g=(f>>>0)/10&-1,i=g}return h=j,o=t,0|h}function kc(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,Q=0;return Q=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),A=a,I=b,J=c,L=A,M=L+4|0,N=0|f[M>>2],d=A,e=I,g=J,h=A,i=h+8|0,j=0|f[i>>2],k=0|Fx[255&N](d,e,g,j),K=k,l=K,m=0==(0|l),n=J,q=n>>>0>0,m&q?(r=A,s=r+92|0,t=0|f[s>>2],0!=(0|t)?(v=A,lc(v),w=A,x=w+4|0,y=0|f[x>>2],z=A,B=I,C=J,D=A,E=D+8|0,F=0|f[E>>2],G=0|Fx[255&y](z,B,C,F),K=G,H=K,o=Q,0|H):(H=K,o=Q,0|H)):(H=K,o=Q,0|H)}function lc(a){a|=0;var b=0,c=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,U=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,la=0;return la=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),b=a,B=b,M=B+92|0,q=M,Y=q,ga=Y+452|0,ha=0|d[ga>>0],ia=1&ha,ia<<24>>24!=0?void(o=la):(c=q,e=c+452|0,g=0|d[e>>0],h=(255&g)>>>2,i=1&h,j=i<<24>>24!=0,j?(k=b,l=q,mc(k,l),m=q,n=m+452|0,r=0|d[n>>0],s=-3&r,t=2|s,d[n>>0]=t):(u=q,v=u+420|0,w=0|f[v>>2],0!=(0|w)&&(y=b,z=q,nc(y,z,0))),A=b,C=q,nc(A,C,0),D=q,E=D+436|0,F=0|f[E>>2],G=(F>>>0)/100&-1,H=q,I=H+444|0,J=0|f[I>>2],K=0|V(G,J),L=q,N=L+440|0,f[N>>2]=K,O=q,P=O+452|0,Q=0|d[P>>0],R=(255&Q)>>>2,S=1&R,S<<24>>24!=0?(U=q,W=U+436|0,X=0|f[W>>2],Z=(X>>>0)/100&-1,$=200*Z|0,_=q,aa=_+456|0,f[aa>>2]=$,ba=q,da=ba+452|0,ea=0|d[da>>0],fa=-3&ea,d[da>>0]=fa,void(o=la)):void(o=la))}function mc(a,b){a|=0,b|=0;var c=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Z=0;Z=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),q=a,B=b,T=B,U=T+452|0,V=0|d[U>>0],W=(255&V)>>>2,X=1&W,M=X,c=B,e=c+452|0,g=0|d[e>>0],h=(255&g)>>>2,i=1&h,j=255&i,k=0!=(0|j),k&&(l=B,m=l+452|0,n=0|d[m>>0],r=(255&n)>>>1,s=1&r,t=255&s,0!=(0|t)&&(v=q,w=B,nc(v,w,0))),x=B,y=x+452|0,z=0|d[y>>0],A=-5&z,d[y>>0]=A,C=q,D=B,sc(C,D),E=q,F=B,nc(E,F,0),G=M,H=B,I=H+452|0,J=0|d[I>>0],K=1&G,L=K<<2&255,N=-5&J,O=N|L,d[I>>0]=O,P=B,Q=P+428|0,f[Q>>2]=0,R=B,S=R+432|0,f[S>>2]=0,o=Z}function nc(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,r=0;for(r=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),h=a,i=b,j=c;;)if(k=h,l=i,oc(k,l,-1),m=i,n=m+420|0,d=0|f[n>>2],e=j,!((0|d)!=(0|e)))break;o=r}function oc(a,b,c){a|=0,b|=0,c|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,T=0;switch(T=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),L=a,N=b,O=c,Q=N,R=Q+420|0,0|(0|f[R>>2])){case 0:return e=L,g=N,pc(e,g),h=N,i=h+420|0,f[i>>2]=1,j=N,k=j+424|0,l=0|f[k>>2],m=3^l,n=N,q=n+424|0,f[q>>2]=m,A=0,M=A,o=T,0|M;case 1:return r=N,s=r+428|0,t=0|f[s>>2],u=0!=(0|t),v=L,w=N,u?(x=O,y=0|qc(v,w,x),A=y,M=A,o=T,0|M):(rc(v,w),z=L,B=N,sc(z,B),A=0,M=A,o=T,0|M);case 2:return P=0,C=L,D=N,E=O,F=0|tc(C,D,E),P=F,G=P,H=0==(0|G),H&&(I=N,J=I+420|0,f[J>>2]=0),K=P,A=K,M=A,o=T,0|M;default:return A=0,M=A,o=T,0|M}return 0}function pc(a,b){a|=0,b|=0;var c=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0;for(Ga=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),q=a,B=b,ha=B,sa=ha+452|0,Da=0|d[sa>>0],Ea=(255&Da)>>>2,c=1&Ea,e=255&c,g=0!=(0|e),g?(h=B,i=h+452|0,j=0|d[i>>0],k=(255&j)>>>1,l=1&k,l<<24>>24!=0&&(Fa=3)):Fa=3,3==(0|Fa)&&(n=B,r=n+428|0,f[r>>2]=0,s=B,t=s+432|0,f[t>>2]=0),u=q,Hi(u),M=0,v=B,w=v+416|0,x=0|f[w>>2],X=x;;){if(y=M,z=X,A=y>>>0<z>>>0,C=q,!A)break;D=B,E=D+16|0,F=M,G=E+(F<<2)|0,H=0|f[G>>2],Cc(C,H),I=M,J=I+1|0,M=J}if(K=q,L=K+32|0,N=0|f[L>>2],Cc(C,N),O=q,P=q,Q=P+28|0,R=0|f[Q>>2],Cc(O,R),S=q,T=q,U=T+20|0,V=0|f[U>>2],Cc(S,V),W=q,Y=q,Z=Y+576|0,$=0|f[Z>>2],Cc(W,$),_=q,aa=q,ba=aa+16|0,da=0|f[ba>>2],Dc(_,da),ea=q,fa=ea+16|0,ga=0|f[fa>>2],ia=ga+48|0,ja=0|f[ia>>2],ka=0!=(0|ja),ka&&(la=q,ma=q,na=ma+16|0,oa=0|f[na>>2],pa=oa+48|0,qa=0|f[pa>>2],Cc(la,qa)),ra=q,ta=ra+16|0,ua=0|f[ta>>2],va=q,wa=va+12|0,xa=0|f[wa>>2],!((0|ua)!=(0|xa)))return void(o=Ga);za=q,Aa=q,Ba=Aa+12|0,Ca=0|f[Ba>>2],Dc(za,Ca),o=Ga}function qc(a,b,c){a|=0,b|=0,c|=0;var e=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;for(B=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),t=a,u=b,v=c,w=0;;){if(x=u,y=x+428|0,z=0|f[y>>2],!(0!=(0|z))){A=5;break}if(e=w,g=v,!(e>>>0<g>>>0)){A=5;break}i=t,j=u,k=u,l=k+428|0,m=0|f[l>>2],n=0|Gc(i,j,m),q=w,r=q+n|0,w=r}return 5==(0|A)?(s=w,o=B,0|s):0}function rc(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,x=0;x=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),m=a,n=b,q=m,r=m,s=r+16|0,t=0|f[s>>2],zc(q,t),u=m,v=n,Ac(u,v),c=n,d=c+432|0,e=0|f[d>>2],g=n,h=g+428|0,f[h>>2]=e,i=n,j=i+432|0,f[j>>2]=0,k=m,l=n,Ac(k,l),o=x}function sc(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,t=0;t=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),j=b,k=j,l=k+420|0,f[l>>2]=2,m=j,n=0|f[m>>2],q=j,r=q+4|0,f[r>>2]=n,c=j,d=c+12|0,e=0|f[d>>2],g=j,h=g+436|0,f[h>>2]=e,o=t}function tc(a,b,c){a|=0,b|=0,c|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,$a=0,_a=0,ab=0,cb=0,db=0,eb=0,fb=0,gb=0,ib=0,jb=0,kb=0,lb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,$b=0,_b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0;for(mc=o,o=o+48|0,(0|o)>=(0|p)&&ca(48),Oa=a,Za=b,ib=c,Z=Za,ja=Z+4|0,ua=0|f[ja>>2],tb=ua,Eb=0;;){if(Ba=tb,Ca=0!=(0|Ba),Ca?(Da=Eb,Ea=ib,Fa=Da>>>0<Ea>>>0,Aa=Fa):Aa=0,Ga=tb,!Aa)break;for(Ha=Ga+24|0,Pb=Ha,Ia=Pb,Ja=Ia+1536|0,$b=Ja,e=0,s=1,Ka=tb,La=0|f[Ka>>2],Ma=0==(0|La),Na=1&Ma,Pa=255&Na,D=Pa,Qa=Za,Ra=Qa+452|0,Sa=0|d[Ra>>0],Ta=(255&Sa)>>>2,Ua=1&Ta,Va=255&Ua,Wa=0!=(0|Va),Wa&&(Xa=Za,Ya=Xa+452|0,$a=0|d[Ya>>0],_a=(255&$a)>>>1,ab=1&_a,ab<<24>>24!=0||(cb=tb,db=cb+20|0,eb=0|d[db>>0],fb=1&eb,gb=255&fb,0!=(0|gb)&&(jb=$b,Pb=jb,s=0)));;){if(kb=Pb,lb=$b,!(kb>>>0<lb>>>0))break;nb=Pb,ob=0|f[nb>>2],pb=ob>>>8,qb=7&pb,rb=Za,sb=rb+424|0,ub=0|f[sb>>2],vb=3^ub,wb=qb&vb,xb=3&wb,yb=0!=(0|xb),yb?lc=12:(zb=Pb,Ab=0|f[zb>>2],Bb=255&Ab,Cb=1==(0|Bb),Cb?lc=12:(Tb=Za,Ub=Tb+452|0,Vb=0|d[Ub>>0],Wb=(255&Vb)>>>2,Xb=1&Wb,Yb=Xb<<24>>24!=0,Yb||(Zb=Za,_b=Zb+424|0,ac=0|f[_b>>2],bc=Pb,cc=0|f[bc>>2],dc=7&ac,ec=dc<<8,fc=-1793&cc,gc=fc|ec,f[bc>>2]=gc),s=0)),12==(0|lc)&&(lc=0,Db=Pb,Fb=0|f[Db>>2],Gb=255&Fb,1!=(0|Gb)&&(Ib=Oa,Jb=Pb,uc(Ib,Jb),Kb=tb,Lb=0|f[Kb>>2],Mb=Pb,Nb=Mb+12|0,f[Nb>>2]=Lb,Ob=Pb,Qb=tb,f[Qb>>2]=Ob,Rb=e,Sb=Rb+1|0,e=Sb)),hc=Pb,ic=hc+24|0,Pb=ic}g=s,h=255&g,i=0!=(0|h),j=e,k=j>>>0<64,jc=i&k,jc?(l=tb,m=l+8|0,n=0|f[m>>2],O=n,q=Za,r=tb,vc(q,r),t=Za,u=tb,wc(t,u),v=Oa,w=tb,xc(v,w),x=O,tb=x):(y=D,z=255&y,A=0!=(0|z),B=e,C=B>>>0>0,kc=A&C,kc&&(E=Za,F=tb,yc(E,F)),G=tb,H=0|f[G>>2],I=0==(0|H),I?(J=Za,K=J+452|0,L=0|d[K>>0],M=(255&L)>>>2,N=1&M,P=255&N,Q=0!=(0|P),Q?(R=Za,S=R+452|0,T=0|d[S>>0],U=(255&T)>>>1,V=1&U,W=V<<24>>24!=0,W?lc=26:(X=tb,Y=X+20|0,$=0|d[Y>>0],_=-2&$,aa=1|_,d[Y>>0]=aa)):lc=26):lc=26,26==(0|lc)&&(lc=0,ba=tb,da=ba+20|0,ea=0|d[da>>0],fa=-2&ea,d[da>>0]=fa),ga=tb,ha=ga+8|0,ia=0|f[ha>>2],tb=ia),ka=Eb,la=ka+64|0,Eb=la,ma=e,na=Za,oa=na+12|0,pa=0|f[oa>>2],qa=pa-ma|0,f[oa>>2]=qa,ra=e,sa=Za,ta=sa+436|0,va=0|f[ta>>2],wa=va-ra|0,f[ta>>2]=wa}return xa=Za,ya=xa+4|0,f[ya>>2]=Ga,za=Eb,o=mc,0|za}function uc(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,$a=0,_a=0,ab=0,bb=0,db=0;db=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),v=a,G=b,Ia=G,Ta=0|f[Ia>>2],c=255&Ta;a:switch(0|c){case 18:case 8:k=v,l=G,Qi(k,l);break;case 12:case 10:case 9:m=v,n=G,fp(m,n),q=v,r=G,Qi(q,r);break;case 11:s=G,t=0|f[s>>2],u=t>>>11,w=1048576&u,x=0!=(0|w),x&&(y=v,z=G,fp(y,z));break;case 20:A=G,R=A,B=R,C=B+20|0,D=0|f[C>>2],E=(0|D)>=0,E||(F=v,H=R,I=H+12|0,J=0|f[I>>2],xc(F,J),K=R,L=K+12|0,f[L>>2]=0);break;case 22:M=G,N=M+12|0,O=0|f[N>>2],aa=O,P=aa,Q=v,S=Q+16|0,T=0|f[S>>2],U=(0|P)!=(0|T),U&&(V=v,W=aa,eg(V,W));break;case 14:if(X=G,Y=0|f[X>>2],Z=Y>>>11,$=256&Z,_=0!=(0|$),ba=v,da=G,_){ea=da+16|0,fa=0|f[ea>>2],Qn(ba,fa);break a}ga=da+20|0,ha=0|f[ga>>2],xc(ba,ha);break a;case 15:ia=v,ja=G,Qi(ia,ja),ka=v,la=G,zd(ka,la);break;case 16:na=v,oa=G,rg(na,oa);break;case 13:pa=G,ma=pa,qa=ma,ra=0|f[qa>>2],sa=ra>>>11,ta=128&sa,ua=0!=(0|ta),ua||(va=ma,wa=va+12|0,ya=0|f[wa>>2],0!=(0|ya)&&(Aa=v,Ba=ma,Ca=Ba+12|0,Da=0|f[Ca>>2],ag(Aa,Da)));break;case 17:Ea=v,Fa=G,Ga=Fa+12|0,Ha=0|f[Ga>>2],xc(Ea,Ha);break;case 21:Ja=G,xa=Ja,Ka=xa,La=Ka+16|0,Ma=0|f[La>>2],Na=0!=(0|Ma),Na&&(Oa=xa,Pa=Oa+16|0,Qa=0|f[Pa>>2],Ra=Qa+4|0,Sa=0|f[Ra>>2],0!=(0|Sa)&&(Va=xa,Wa=Va+16|0,Xa=0|f[Wa>>2],Ya=Xa+4|0,Za=0|f[Ya>>2],$a=v,_a=xa,ab=_a+20|0,bb=0|f[ab>>2],Cx[511&Za]($a,bb))),d=v,e=G,Qi(d,e);break;case 6:case 4:case 3:case 2:return void(o=db)}g=G,h=0|f[g>>2],i=-256&h,j=1|i,f[g>>2]=j,o=db}function vc(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,Q=0;if(Q=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),n=a,A=b,J=A,K=J+4|0,L=0|f[K>>2],M=0!=(0|L),M&&(N=A,O=N+8|0,c=0|f[O>>2],d=A,e=d+4|0,g=0|f[e>>2],h=g+8|0,f[h>>2]=c),i=A,j=i+8|0,k=0|f[j>>2],l=0!=(0|k),l&&(m=A,q=m+4|0,r=0|f[q>>2],s=A,t=s+8|0,u=0|f[t>>2],v=u+4|0,f[v>>2]=r),w=n,x=0|f[w>>2],y=A,!((0|x)==(0|y)))return F=A,G=F+4|0,f[G>>2]=0,H=A,I=H+8|0,f[I>>2]=0,void(o=Q);B=A,C=B+8|0,D=0|f[C>>2],E=n,f[E>>2]=D,F=A,G=F+4|0,f[G>>2]=0,H=A,I=H+8|0,f[I>>2]=0,o=Q}function wc(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,S=0;if(S=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),n=a,A=b,L=A,M=L+16|0,N=0|f[M>>2],O=0!=(0|N),O&&(P=A,Q=P+12|0,c=0|f[Q>>2],d=A,e=d+16|0,g=0|f[e>>2],h=g+12|0,f[h>>2]=c),i=A,j=i+12|0,k=0|f[j>>2],l=0!=(0|k),l&&(m=A,q=m+16|0,r=0|f[q>>2],s=A,t=s+12|0,u=0|f[t>>2],v=u+16|0,f[v>>2]=r),w=n,x=w+8|0,y=0|f[x>>2],z=A,!((0|y)==(0|z)))return H=A,I=H+16|0,f[I>>2]=0,J=A,K=J+12|0,f[K>>2]=0,void(o=S);C=A,D=C+12|0,E=0|f[D>>2],F=n,G=F+8|0,f[G>>2]=E,H=A,I=H+16|0,f[I>>2]=0,J=A,K=J+12|0,f[K>>2]=0,o=S}function xc(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,q=0;q=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),e=a,g=b,h=e,i=h+4|0,j=0|f[i>>2],k=e,l=g,m=e,c=m+8|0,d=0|f[c>>2],Fx[255&j](k,l,0,d),o=q}function yc(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,z=0;z=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),n=a,r=b,s=n,t=s+8|0,u=0|f[t>>2],v=r,w=v+12|0,f[w>>2]=u,x=n,c=x+8|0,d=0|f[c>>2],e=0!=(0|d),e&&(g=r,h=n,i=h+8|0,j=0|f[i>>2],k=j+16|0,f[k>>2]=g),l=r,m=n,q=m+8|0,f[q>>2]=l,o=z}function zc(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,xa=0;for(xa=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),ga=xa+8|0,ra=xa,n=a,A=b,ua=A,va=ua+4|0,c=0|f[va>>2],d=A,e=d+8|0,g=0|f[e>>2],h=c,i=g,j=h-i|0,k=(0|j)/8&-1,W=k,l=A,m=l+16|0,q=0|f[m>>2],r=0!=(0|q),r&&(s=A,t=s+16|0,u=0|f[t>>2],v=u+12|0,w=0|f[v>>2],x=W,y=x+w|0,W=y),z=A,B=z+8|0,C=0|f[B>>2],D=W,E=C+(D<<3)|0,F=A,G=F+12|0,H=0|f[G>>2],I=E>>>0>H>>>0,I&&(J=A,K=J+12|0,M=0|f[K>>2],N=A,O=N+8|0,P=0|f[O>>2],Q=M,R=P,S=Q-R|0,T=(0|S)/8&-1,W=T),L=0;;){if(U=L,V=W,!(U>>>0<V>>>0))break;Y=A,Z=Y+8|0,$=0|f[Z>>2],_=L,aa=$+(_<<3)|0,f[ga>>2]=0|f[aa>>2],f[ga+4>>2]=0|f[aa+4>>2],ba=ga+4|0,da=0|f[ba>>2],ea=da>>>0<8;do{if(!ea){if(fa=0|f[ga>>2],ha=0|f[fa>>2],ia=255&ha,1==(0|ia)){ka=A,la=ka+8|0,ma=0|f[la>>2],na=L,oa=ma+(na<<3)|0,Fc(ra),f[oa>>2]=0|f[ra>>2],f[oa+4>>2]=0|f[ra+4>>2];break}pa=n,qa=0|f[ga>>2],Cc(pa,qa);break}}while(0);sa=L,ta=sa+1|0,L=ta}o=xa}function Ac(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,F=0;for(F=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),n=a,x=b;;){if(y=x,z=y+428|0,A=0|f[z>>2],!(0!=(0|A)))break;C=x,D=C+428|0,c=0|f[D>>2],d=0|f[c>>2],e=d>>>8,g=7&e,h=0==(0|g),h?(i=n,j=x,k=x,l=k+428|0,m=0|f[l>>2],Bc(i,j,m)):(q=x,r=q+428|0,s=0|f[r>>2],t=s+8|0,u=0|f[t>>2],v=x,w=v+428|0,f[w>>2]=u)}o=F}function Bc(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,$a=0,_a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Vb=0,Wb=0,Xb=0,Yb=0,$b=0;switch($b=o,o=o+64|0,(0|o)>=(0|p)&&ca(64),Ca=a,Na=b,Ya=c,pa=Ya,qa=0|f[pa>>2],ra=-1793&qa,sa=1024|ra,f[pa>>2]=sa,ta=Ya,ua=ta+8|0,va=0|f[ua>>2],wa=Na,xa=wa+428|0,f[xa>>2]=va,ya=Ca,za=Ya,Aa=za+4|0,Ba=0|f[Aa>>2],Cc(ya,Ba),Da=Ya,Ea=0|f[Da>>2],0|255&Ea){case 11:return Ga=Ya,hb=Ga,Ha=hb,Ia=0|f[Ha>>2],Ja=Ia>>>11,Ka=1048576&Ja,La=0!=(0|Ka),La&&(Ma=Ca,Oa=hb,dp(Ma,Oa)),Pa=Ca,Qa=Ya,Ra=Qa+20|0,Sa=0|f[Ra>>2],Cc(Pa,Sa),void(o=$b);case 12:case 10:case 9:Ta=Ya,sb=Ta,Ua=Ca,Va=sb,dp(Ua,Va),Wa=Ca,Xa=sb,Za=Xa+20|0,$a=0|f[Za>>2],Cc(Wa,$a);break;case 18:case 21:case 8:break;case 13:return bb=Ya,Db=bb,cb=Ca,db=Db,eb=db+20|0,fb=0|f[eb>>2],Cc(cb,fb),gb=Ca,ib=Db,jb=ib+16|0,kb=0|f[jb>>2],Cc(gb,kb),void(o=$b);case 20:if(lb=Ya,Ob=lb,mb=Ob,nb=mb+20|0,ob=0|f[nb>>2],(0|ob)>=0)return void(o=$b);for(qb=Ob,rb=0|f[qb>>2],tb=rb>>>11,r=tb,d=0;;){if(ub=d,vb=r,!((0|ub)<(0|vb)))break;xb=Ob,yb=xb+12|0,zb=0|f[yb>>2],Ab=d,Bb=zb+(Ab<<3)|0,Cb=Bb+4|0,Eb=0|f[Cb>>2],Fb=Eb>>>0<8,Fb||(Gb=Ca,Hb=Ob,Ib=Hb+12|0,Jb=0|f[Ib>>2],Kb=d,Lb=Jb+(Kb<<3)|0,Mb=0|f[Lb>>2],Cc(Gb,Mb)),Nb=d,Pb=Nb+1|0,d=Pb}return void(o=$b);case 22:return Qb=Ya,Rb=Qb+12|0,Sb=0|f[Rb>>2],C=Sb,Tb=C,0!=(0|Tb)?(Vb=Ca,Wb=C,Dc(Vb,Wb),void(o=$b)):void(o=$b);case 14:for(Xb=Ya,N=Xb,Y=0,Yb=N,e=Yb+12|0,g=0|f[e>>2],ia=g;;){if(h=Y,i=ia,!(h>>>0<i>>>0))break;k=N,l=k+20|0,m=0|f[l>>2],n=Y,q=m+(n<<3)|0,s=q+4|0,t=0|f[s>>2],u=t>>>0<8,u||(v=Ca,w=N,x=w+20|0,y=0|f[x>>2],z=Y,A=y+(z<<3)|0,B=0|f[A>>2],Cc(v,B)),D=Y,E=D+1|0,Y=E}return void(o=$b);case 15:return F=Ca,G=Ya,Ni(F,G),H=Ca,I=Ya,xd(H,I),void(o=$b);case 17:return J=Ya,oa=J,K=oa,L=K+12|0,M=0|f[L>>2],0!=(0|M)?(P=oa,Q=P+12|0,R=0|f[Q>>2],S=R+4|0,T=0|f[S>>2],U=T>>>0<8,U||(V=Ca,W=oa,X=W+12|0,Z=0|f[X>>2],$=0|f[Z>>2],Cc(V,$)),_=oa,aa=_+12|0,ba=0|f[aa>>2],da=ba+8|0,ea=da+4|0,fa=0|f[ea>>2],fa>>>0<8?void(o=$b):(ha=Ca,ja=oa,ka=ja+12|0,la=0|f[ka>>2],ma=la+8|0,na=0|f[ma>>2],Cc(ha,na),void(o=$b))):void(o=$b);default:return void(o=$b)}_a=Ca,ab=Ya,Ni(_a,ab),o=$b}function Cc(a,b){a|=0,b|=0;var c=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,n=0,q=0,r=0,s=0,u=0;return u=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),j=a,k=b,l=k,0==(0|l)?void(o=u):(n=k,q=0|f[n>>2],r=q>>>8,s=7&r,c=3&s,0!=(0|c)?(e=j,g=j,h=g+92|0,i=k,Ec(e,h,i),void(o=u)):void(o=u))}function Dc(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,ea=0,fa=0,ga=0,ha=0,ia=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,ta=0;ta=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),n=a,A=b,W=0,pa=n,qa=A,zc(pa,qa),ra=A,c=ra+20|0,d=0|f[c>>2],e=0!=(0|d);a:if(e)for(g=A,h=g+20|0,i=0|f[h>>2],ga=i;;){if(j=ga,k=A,l=k+16|0,m=0|f[l>>2],!(j>>>0<=m>>>0))break a;r=ga,s=r+20|0,t=0|f[s>>2],u=W,v=(0|t)>(0|u),v&&(w=ga,x=w+20|0,y=0|f[x>>2],W=y),z=n,B=ga,C=B+24|0,D=0|f[C>>2],Cc(z,D),E=n,F=ga,G=F+4|0,H=0|f[G>>2],Cc(E,H),I=n,J=ga,K=J+44|0,M=0|f[K>>2],Cc(I,M),N=ga,O=N+48|0,ga=O}for(L=0;;){if(P=L,Q=W,!((0|P)<(0|Q)))break;S=n,T=A,U=T+36|0,V=0|f[U>>2],X=L,Y=V+(X<<2)|0,Z=0|f[Y>>2],Cc(S,Z),$=L,_=$+1|0,L=_}return aa=A,ba=0|f[aa>>2],0!=(0|ba)?(ea=A,fa=0|f[ea>>2],ha=fa+48|0,ia=0|f[ha>>2],0!=(0|ia)?(ka=n,la=A,ma=0|f[la>>2],na=ma+48|0,oa=0|f[na>>2],Cc(ka,oa),void(o=ta)):void(o=ta)):void(o=ta)}function Ec(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,q=0,r=0,s=0,t=0,v=0;v=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),m=b,n=c,q=n,r=0|f[q>>2],s=-1793&r,f[q>>2]=s,t=m,d=t+428|0,e=0|f[d>>2],g=n,h=g+8|0,f[h>>2]=e,i=n,j=m,k=j+428|0,f[k>>2]=i,o=v}function Fc(a){a|=0;var b=0,c=0,e=0;e=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),b=e,c=b+4|0,f[c>>2]=0,f[b>>2]=0,f[a>>2]=0|f[b>>2],f[a+4>>2]=0|f[b+4>>2],o=e}function Gc(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,$a=0,_a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Mb=0;switch(Mb=o,o=o+48|0,(0|o)>=(0|p)&&ca(48),oa=a,za=b,Ka=c,Va=0,C=oa,N=za,Y=Ka,Bc(C,N,Y),$=Ka,_=0|f[$>>2],0|255&_){case 11:return ba=Va,da=ba+1|0,Va=da,Z=Va,o=Mb,0|Z;case 10:case 12:case 9:return ea=Ka,eb=ea,fa=oa,ga=Ka,ha=0|Oi(fa,ga),ia=Va,ja=ia+ha|0,Va=ja,ka=oa,la=eb,ma=0|ep(ka,la),na=Va,pa=na+ma|0,Va=pa,qa=Va,ra=qa+1|0,Va=ra,Z=Va,o=Mb,0|Z;case 18:case 21:case 8:return sa=oa,ta=Ka,ua=0|Oi(sa,ta),va=Va,wa=va+ua|0,Va=wa,Z=Va,o=Mb,0|Z;case 20:return xa=Ka,ya=0|f[xa>>2],Aa=ya>>>11,Ba=Va,Ca=Ba+Aa|0,Va=Ca,Z=Va,o=Mb,0|Z;case 22:if(Da=Ka,Ea=Da+12|0,Fa=0|f[Ea>>2],pb=Fa,Ga=pb,!(0!=(0|Ga)))return Z=Va,o=Mb,0|Z;Ia=pb,Ja=Ia+4|0,La=0|f[Ja>>2],Ma=pb,Na=Ma+8|0,Oa=0|f[Na>>2],Pa=La,Qa=Oa,Ra=Pa-Qa|0,Sa=(0|Ra)/8&-1,Ab=Sa,Ta=pb,Ua=Ta+16|0,Wa=0|f[Ua>>2],Xa=0!=(0|Wa),Xa&&(Ya=pb,Za=Ya+16|0,$a=0|f[Za>>2],_a=$a+12|0,ab=0|f[_a>>2],bb=Ab,cb=bb+ab|0,Ab=cb),db=pb,fb=db+8|0,gb=0|f[fb>>2],hb=Ab,ib=gb+(hb<<3)|0,jb=pb,kb=jb+12|0,lb=0|f[kb>>2],mb=ib>>>0>lb>>>0,mb&&(nb=pb,ob=nb+12|0,qb=0|f[ob>>2],rb=pb,sb=rb+8|0,tb=0|f[sb>>2],ub=qb,vb=tb,wb=ub-vb|0,xb=(0|wb)/8&-1,Ab=xb),yb=Ab,zb=Va,Bb=zb+yb|0,Va=Bb,Cb=pb,Db=Cb+16|0,Eb=0|f[Db>>2],Fb=0!=(0|Eb),Fb?(Gb=pb,Hb=Gb+16|0,Ib=0|f[Hb>>2],Jb=Ib+20|0,Kb=0|f[Jb>>2],h=Kb):h=0,e=Va,g=e+h|0,Va=g,i=pb,j=i+20|0,k=0|f[j>>2],l=0!=(0|k);a:if(l)for(Ab=0,m=pb,n=m+20|0,q=0|f[n>>2],d=q;;){if(s=d,t=pb,u=t+16|0,v=0|f[u>>2],!(s>>>0<=v>>>0))break a;x=Ab,y=x+1|0,Ab=y,z=d,A=z+48|0,d=A}return B=Ab,D=Va,E=D+B|0,Va=E,Z=Va,o=Mb,0|Z;case 14:return F=Ka,r=F,G=r,H=G+12|0,I=0|f[H>>2],J=Va,K=J+I|0,Va=K,Z=Va,o=Mb,0|Z;case 15:return L=oa,M=Ka,O=0|Oi(L,M),P=Va,Q=P+O|0,Va=Q,R=oa,S=Ka,T=0|yd(R,S),U=Va,V=U+T|0,Va=V,Z=Va,o=Mb,0|Z;case 17:case 13:return W=Va,X=W+2|0,Va=X,Z=Va,o=Mb,0|Z;default:return Z=Va,o=Mb,0|Z}return 0}function Hc(a,b,c){a|=0,b|=0,c|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,Q=0;return Q=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),e=Q+24|0,L=Q,C=a,I=b,J=c,M=C,N=I,g=J,h=0|kc(M,N,g),K=h,i=K,j=0==(0|i),k=J,l=0!=(0|k),O=j&l,m=C,n=m+92|0,q=n+452|0,r=0|d[q>>0],O?(s=(255&r)>>>3,t=1&s,t<<24>>24!=0?(H=K,o=Q,0|H):(v=C,w=v+92|0,x=w+452|0,y=0|d[x>>0],z=-9&y,A=8|z,d[x>>0]=A,B=C,D=C,E=D+576|0,F=0|f[E>>2],Ic(L,F),f[e>>2]=0|f[L>>2],f[e+4>>2]=0|f[L+4>>2],xr(B,e),0)):(G=-9&r,d[q>>0]=G,H=K,o=Q,0|H)}function Ic(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,l=0;l=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),d=l,c=b,e=c,g=0|f[e>>2],h=255&g,i=d+4|0,f[i>>2]=h,j=c,f[d>>2]=j,f[a>>2]=0|f[d>>2],f[a+4>>2]=0|f[d+4>>2],o=l}function Jc(a,b){a|=0,b|=0;var c=0,d=0,e=0,f=0,g=0,i=0;return i=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),c=a,d=b,e=c,f=d,g=0|Hc(e,0,f),o=i,0|g}function Kc(a,b){a|=0,b|=0;var c=0,d=0,e=0,f=0,g=0,i=0;return i=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),c=a,d=b,e=c,f=d,g=0|kc(e,0,f),o=i,0|g}function Lc(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,D=0;return D=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),u=a,v=b,w=c,z=v,A=z>>>0>0,d=w,e=d>>>0>0,A&e&&(f=v,g=w,h=4294967295/(g>>>0)&-1,f>>>0<=h>>>0)?(j=v,k=w,l=0|V(j,k),y=l,m=u,n=y,q=0|Jc(m,n),x=q,r=x,s=y,Ow(0|r,0,0|s),t=x,o=D,0|t):(x=0,t=x,o=D,0|t)}function Mc(a,b){a|=0,b|=0;var c=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,E=0;E=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),q=a,w=b,x=w,y=x+424|0,f[y>>2]=1,z=w,f[z>>2]=0,A=w,B=A+8|0,f[B>>2]=0,C=q,c=w,Nc(C,c),e=w,g=e+444|0,f[g>>2]=200,h=w,i=h+448|0,f[i>>2]=200,j=w,k=j+452|0,l=0|d[k>>0],m=-5&l,n=4|m,d[k>>0]=n,r=w,s=r+452|0,t=0|d[s>>0],u=-3&t,v=2|u,d[s>>0]=v,o=E}function Nc(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,L=0;for(L=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),n=a,A=b,I=n,J=0|Lc(I,1,1560),E=J,H=0,c=E,d=c+24|0,F=d,e=F,g=e+1536|0,G=g;;){if(h=F,i=G,!(h>>>0<i>>>0))break;k=F,l=0|f[k>>2],m=-256&l,q=1|m,f[k>>2]=q,r=H,s=F,t=s+12|0,f[t>>2]=r,u=F,H=u,v=F,w=v+24|0,F=w}x=H,y=E,f[y>>2]=x,z=A,B=E,Oc(z,B),C=A,D=E,yc(C,D),o=L}function Oc(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,v=0;v=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),k=a,l=b,m=k,n=0|f[m>>2],q=l,r=q+8|0,f[r>>2]=n,s=k,t=0|f[s>>2],c=0!=(0|t),c&&(d=l,e=k,g=0|f[e>>2],h=g+4|0,f[h>>2]=d),i=l,j=k,f[j>>2]=i,o=v}function Pc(a,b){a|=0,b|=0;var c=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,L=0;for(L=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),n=a,A=b,I=A,J=0|f[I>>2],E=J;;){if(c=E,!(0!=(0|c)))break;for(e=E,F=e,g=E,h=g+8|0,i=0|f[h>>2],E=i,j=F,k=j+24|0,G=k,l=G,m=l+1536|0,H=m;;){if(q=G,r=H,!(q>>>0<r>>>0))break;t=G,u=0|f[t>>2],v=255&u,w=1!=(0|v),w&&(x=n,y=G,uc(x,y)),z=G,B=z+24|0,G=B}C=n,D=F,xc(C,D)}o=L}function Qc(a,b){a|=0,b|=0;var c=0,d=0,e=0,f=0,h=0;h=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),c=a,d=b,e=c,f=d,Pc(e,f),o=h}function Rc(a,b){a|=0,b|=0;var c=0,d=0,e=0,h=0,i=0,j=0,k=0,m=0;if(m=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),c=a,d=b+4|0,e=0|f[d>>2],e>>>0<8)return void(o=m);h=c,i=c,j=i+92|0,k=0|f[b>>2],Sc(h,j,k),o=m}function Sc(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,B=0;if(B=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),t=a,u=b,v=c,w=u,x=w+416|0,y=0|f[x>>2],!((0|y)>=100))return j=v,k=u,l=k+16|0,m=u,n=m+416|0,q=0|f[n>>2],r=q+1|0,f[n>>2]=r,s=l+(q<<2)|0,f[s>>2]=j,void(o=B);d=u,e=d+416|0,f[e>>2]=96,g=t,h=t,i=0|sp(h,68266),Ar(g,i,54868)}function Tc(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,va=0;return va=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),A=a,L=b,W=c,sa=A,ta=sa+92|0,ra=ta,d=ra,e=d+440|0,g=0|f[e>>2],h=ra,i=h+12|0,j=0|f[i>>2],k=g>>>0<j>>>0,k&&(l=A,Uc(l)),m=ra,n=m+8|0,q=0|f[n>>2],r=0==(0|q),r&&(s=A,t=ra,Nc(s,t)),u=ra,v=u+8|0,w=0|f[v>>2],x=0|f[w>>2],ga=x,y=ga,z=y+12|0,B=0|f[z>>2],C=ra,D=C+8|0,E=0|f[D>>2],f[E>>2]=B,F=ra,G=F+8|0,H=0|f[G>>2],I=0|f[H>>2],J=0==(0|I),J&&(K=ra,M=ra,N=M+8|0,O=0|f[N>>2],wc(K,O)),P=ra,Q=P+12|0,R=0|f[Q>>2],S=R+1|0,f[Q>>2]=S,T=A,U=ra,V=ga,Sc(T,U,V),X=ga,f[X>>2]=0|f[18181],f[X+4>>2]=0|f[18182],f[X+8>>2]=0|f[18183],f[X+12>>2]=0|f[18184],f[X+16>>2]=0|f[18185],f[X+20>>2]=0|f[18186],Y=L,Z=ga,$=0|f[Z>>2],_=255&Y,aa=-256&$,ba=aa|_,f[Z>>2]=ba,da=W,ea=ga,fa=ea+4|0,f[fa>>2]=da,ha=ra,ia=ha+424|0,ja=0|f[ia>>2],ka=ga,la=0|f[ka>>2],ma=7&ja,na=ma<<8,oa=-1793&la,pa=oa|na,f[ka>>2]=pa,qa=ga,o=va,0|qa}function Uc(a){a|=0;var b=0,c=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,W=0,X=0,Y=0,Z=0,$=0,_=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Qa=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,$a=0;return $a=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),b=a,B=b,M=B+92|0,q=M,Y=q,ia=Y+452|0,ta=0|d[ia>>0],Ea=1&ta,Ea<<24>>24!=0?void(o=$a):(c=q,e=c+452|0,g=0|d[e>>0],h=(255&g)>>>2,i=1&h,j=255&i,k=0!=(0|j),k?(l=q,m=l+452|0,n=0|d[m>>0],r=(255&n)>>>1,s=1&r,t=s<<24>>24!=0,t?Za=5:(u=b,v=q,nc(u,v,0))):Za=5,5==(0|Za)&&(w=b,x=q,Vc(w,x)),y=q,z=y+420|0,A=0|f[z>>2],0==(0|A)?(D=q,E=D+436|0,F=0|f[E>>2],G=(F>>>0)/100&-1,H=q,I=H+444|0,J=0|f[I>>2],K=0|V(G,J),L=q,N=L+440|0,f[N>>2]=K,O=q,P=O+440|0,Q=0|f[P>>2],R=Q>>>0<1024,R&&(S=q,T=S+440|0,f[T>>2]=1024),U=q,W=U+452|0,X=0|d[W>>0],Z=(255&X)>>>2,$=1&Z,_=255&$,0!=(0|_)&&(ba=q,da=ba+452|0,ea=0|d[da>>0],fa=(255&ea)>>>1,ga=1&fa,ha=255&ga,0!=(0|ha))?(ka=q,la=ka+436|0,ma=0|f[la>>2],na=(ma>>>0)/100&-1,oa=200*na|0,pa=q,qa=pa+456|0,f[qa>>2]=oa,ra=q,sa=ra+452|0,ua=0|d[sa>>0],va=-3&ua,d[sa>>0]=va,void(o=$a)):(wa=q,xa=wa+452|0,ya=0|d[xa>>0],za=(255&ya)>>>2,Aa=1&za,Ba=255&Aa,0!=(0|Ba)?(Da=q,Fa=Da+452|0,Ga=0|d[Fa>>0],Ha=(255&Ga)>>>1,Ia=1&Ha,Ia<<24>>24!=0?void(o=$a):(Ka=q,La=Ka+12|0,Ma=0|f[La>>2],Na=q,Oa=Na+456|0,Qa=0|f[Oa>>2],Ma>>>0>Qa>>>0?(Sa=b,Ta=q,mc(Sa,Ta),Ua=q,Va=Ua+452|0,Wa=0|d[Va>>0],Xa=-3&Wa,Ya=2|Xa,d[Va>>0]=Ya,void(o=$a)):void(o=$a))):void(o=$a))):void(o=$a))}function Vc(a,b){a|=0,b|=0;var c=0,d=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0;for(H=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),n=a,z=b,A=0,B=0,C=z,D=C+448|0,E=0|f[D>>2],F=10*E|0,A=F;;){if(c=B,d=A,!(c>>>0<d>>>0))break;if(g=n,h=z,i=A,j=0|oc(g,h,i),k=B,l=k+j|0,B=l,m=z,q=m+420|0,r=0|f[q>>2],0==(0|r))break}t=z,u=t+12|0,v=0|f[u>>2],w=v+1024|0,x=z,y=x+440|0,f[y>>2]=w,o=H}function Wc(a){a|=0;var b=0,c=0,d=0,e=0,g=0,i=0;return i=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),b=a,c=b,d=c+92|0,e=d+416|0,g=0|f[e>>2],o=i,0|g}function Xc(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,m=0;m=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),c=a,d=b,g=c,h=g+92|0,e=h,i=d,j=e,k=j+416|0,f[k>>2]=i,o=m}function Yc(a,b,c){a|=0,b|=0,c|=0;var e=0,g=0,h=0,i=0,k=0,l=0,m=0,n=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,z=0,A=0,B=0,C=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,X=0;return X=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),B=a,M=b,R=c,T=B,U=T+92|0,S=U,V=M,e=0|f[V>>2],g=e>>>8,h=7&g,i=4&h,0!=(0|i)?(k=R,l=0|f[k>>2],m=l>>>8,n=7&m,q=3&n,0!=(0|q)?(s=S,t=s+452|0,u=0|d[t>>0],v=(255&u)>>>2,w=1&v,x=255&w,0!=(0|x)||(z=S,A=z+420|0,C=0|f[A>>2],1==(0|C))?(E=B,F=S,G=R,Ec(E,F,G),void(o=X)):(H=S,I=H+424|0,J=0|f[I>>2],K=M,L=0|f[K>>2],N=7&J,O=N<<8,P=-1793&L,Q=P|O,f[K>>2]=Q,void(o=X))):void(o=X)):void(o=X)}function Zc(a,b){a|=0,b|=0;var c=0,d=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;if(C=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),n=a,u=b,w=n,x=w+92|0,v=x,y=u,z=0|f[y>>2],A=z>>>8,c=7&A,d=4&c,!(0!=(0|d)))return void(o=C);g=u,h=0|f[g>>2],i=-1793&h,f[g>>2]=i,j=v,k=j+432|0,l=0|f[k>>2],m=u,q=m+8|0,f[q>>2]=l,r=u,s=v,t=s+432|0,f[t>>2]=r,o=C}function $c(a){a|=0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,A=0;A=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),b=a,s=b,t=0|pp(s,54889),m=t,u=b,v=m,Xp(u,v,54892,8,0),w=b,x=m,Xp(w,x,54898,9,0),y=b,c=m,Xp(y,c,54905,10,0),d=b,e=m,Xp(d,e,54913,11,0),f=b,g=m,Xp(f,g,54928,12,262144),h=b,i=m,Xp(h,i,54944,13,0),j=b,k=m,Xp(j,k,54955,14,262144),l=b,n=m,Xp(l,n,54967,15,262144),q=b,r=m,Xp(q,r,54986,16,0),o=A}function _c(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0;g=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),d=b,e=d,lc(e),Fc(a),o=g}function ad(a,b,c){a|=0,b|=0,c|=0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,u=0;u=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),k=b,m=k,n=m+92|0,q=n+452|0,r=0|d[q>>0],s=1&r,l=s,e=k,f=e+92|0,g=f+452|0,h=0|d[g>>0],i=-2&h,d[g>>0]=i,j=l,id(a,j),o=u}function bd(a,b,c){a|=0,b|=0,c|=0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,v=0;v=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),l=b,n=l,q=n+92|0,r=q+452|0,s=0|d[r>>0],t=1&s,m=t,e=l,f=e+92|0,g=f+452|0,h=0|d[g>>0],i=-2&h,j=1|i,d[g>>0]=j,k=m,id(a,k),o=v}function cd(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,k=0;k=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),d=b,e=d,g=e+92|0,h=g+444|0,i=0|f[h>>2],kd(a,i),o=k}function dd(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,n=0;n=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),l=n,e=n+4|0,d=b,g=d,f[l>>2]=e,Kp(g,64797,l),h=0|f[e>>2],i=d,j=i+92|0,k=j+444|0,f[k>>2]=h,Fc(a),o=n}function ed(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,k=0;k=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),d=b,e=d,g=e+92|0,h=g+448|0,i=0|f[h>>2],kd(a,i),o=k}function fd(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,n=0;n=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),l=n,e=n+4|0,d=b,g=d,f[l>>2]=e,Kp(g,64797,l),h=0|f[e>>2],i=d,j=i+92|0,k=j+448|0,f[k>>2]=h,Fc(a),o=n}function gd(a,b,c){a|=0,b|=0,c|=0;var e=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,B=0;if(B=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),z=B,t=B+8|0,s=b,u=s,f[z>>2]=t,Kp(u,55358,z),v=s,w=v+92|0,x=w+452|0,y=0|d[x>>0],e=(255&y)>>>2,g=1&e,h=255&g,i=0|d[t>>0],j=255&i,!((0|h)!=(0|j)))return r=0|d[t>>0],id(a,r),void(o=B);l=s,m=s,n=m+92|0,q=0|d[t>>0],jd(l,n,q),r=0|d[t>>0],id(a,r),o=B}function hd(a,b,c){a|=0,b|=0,c|=0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0;m=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),e=b,f=e,g=f+92|0,h=g+452|0,i=0|d[h>>0],j=(255&i)>>>2,k=1&j,id(a,k),o=m}function id(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,l=0;l=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),d=l,c=b,e=c,g=255&e,h=0!=(0|g),i=h?2:0,j=d+4|0,f[j>>2]=i,f[d>>2]=1,f[a>>2]=0|f[d>>2],f[a+4>>2]=0|f[d+4>>2],o=l}function jd(a,b,c){a|=0,b|=0,c|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,ea=0;ea=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),B=a,M=b,X=c,Z=M,$=Z+452|0,_=0|d[$>>0],aa=(255&_)>>>2,e=1&aa,g=255&e,h=0==(0|g),i=X,j=i<<24>>24!=0,ba=h|j,ba?(s=M,t=s+452|0,u=0|d[t>>0],v=(255&u)>>>2,w=1&v,w<<24>>24!=0||(y=X,z=255&y,0!=(0|z)&&(C=B,D=M,nc(C,D,0),E=M,F=E+436|0,G=0|f[F>>2],H=(G>>>0)/100&-1,I=200*H|0,J=M,K=J+456|0,f[K>>2]=I,L=M,N=L+452|0,O=0|d[N>>0],P=-3&O,d[N>>0]=P))):(k=B,l=M,mc(k,l),m=M,n=m+452|0,q=0|d[n>>0],r=-3&q,d[n>>0]=r),Q=X,R=M,S=R+452|0,T=0|d[S>>0],U=1&Q,V=U<<2&255,W=-5&T,Y=W|V,d[S>>0]=Y,o=ea}function kd(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,i=0;i=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),d=i,c=b,e=d+4|0,f[e>>2]=3,g=c,f[d>>2]=g,f[a>>2]=0|f[d>>2],f[a+4>>2]=0|f[d+4>>2],o=i}function ld(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,W=0;W=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),n=a,A=b,R=A,S=0|f[R>>2],L=S,P=20,T=n,c=L,d=c,e=(d>>>0)/4&-1,g=P,h=L,i=0|V(g,h),j=e+i|0,k=0|Jc(T,j),Q=k,l=A,m=l+8|0,f[m>>2]=0,q=A,r=q+4|0,f[r>>2]=0,s=Q,t=A,u=t+16|0,f[u>>2]=s,v=Q,w=L,x=w<<3,y=v+x|0,z=A,B=z+20|0,f[B>>2]=y,C=Q,D=P,E=L,F=0|V(D,E),G=C+F|0,H=A,I=H+12|0,f[I>>2]=G,J=A,K=J+12|0,M=0|f[K>>2],N=L,O=(N>>>0)/4&-1,md(M,-86,O),o=W}function md(a,b,c){a|=0,b|=0,c|=0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,q=0;for(q=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),g=a,h=b,i=c;;){if(j=i,k=j+-1|0,i=k,!(j>>>0>0))break;m=h,e=g,f=e+1|0,g=f,d[e>>0]=m}o=q}function nd(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,Q=0;return Q=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),n=a,A=b,K=n,L=0|Lc(K,1,24),J=L,M=A,N=M>>>0<8,N&&(A=8),O=A,c=O+-1|0,A=c,d=A,e=d>>>1,g=A,h=g|e,A=h,i=A,j=i>>>2,k=A,l=k|j,A=l,m=A,q=m>>>4,r=A,s=r|q,A=s,t=A,u=t>>>8,v=A,w=v|u,A=w,x=A,y=x>>>16,z=A,B=z|y,A=B,C=A,D=C+1|0,A=D,E=A,F=J,f[F>>2]=E,G=n,H=J,ld(G,H),I=J,o=Q,0|I}function od(a){a|=0;var b=0,c=0,d=0,f=0;return f=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),b=a,c=b,d=0|nd(c,8),o=f,0|d}function pd(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,j=0,k=0,l=0,m=0,q=0;if(q=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),e=a,g=b,h=g,!(0!=(0|h)))return void(o=q);j=e,k=g,l=k+16|0,m=0|f[l>>2],xc(j,m),c=e,d=g,xc(c,d),o=q}function qd(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,q=0,r=0,t=0,u=0,v=0,y=0;return y=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),a,q=b,r=q,0!=(0|r)?(t=q,u=t+12|0,v=0|f[u>>2],0!=(0|v)?(c=q,d=c+12|0,e=0|f[d>>2],g=q,h=0|f[g>>2],i=(h>>>0)/4&-1,md(e,-86,i),j=q,k=j+8|0,f[k>>2]=0,l=q,m=l+4|0,f[m>>2]=0,void(o=y)):void(o=y)):void(o=y)}function rd(a,b,c){a|=0,b|=0,c|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0;for(ta=o,o=o+48|0,(0|o)>=(0|p)&&ca(48),h=ta+40|0,g=ta+32|0,e=ta+24|0,P=a,$=b,qa=P,f[e>>2]=0|f[c>>2],f[e+4>>2]=0|f[c+4>>2],ra=0|sd(qa,e),i=$,j=0|f[i>>2],k=j-1|0,l=ra&k,ka=l,pa=0;;){if(m=$,n=m+12|0,q=0|f[n>>2],r=ka,s=(r>>>0)/4&-1,t=q+s|0,u=0|d[t>>0],v=255&u,w=ka,x=(w>>>0)%4&-1,y=55004+x|0,z=0|d[y>>0],A=255&z,B=v&A,C=0!=(0|B),D=1^C,F=$,!D){sa=7;break}if(G=F+12|0,H=0|f[G>>2],I=ka,J=(I>>>0)/4&-1,K=H+J|0,L=0|d[K>>0],M=255&L,N=ka,O=(N>>>0)%4&-1,Q=55008+O|0,R=0|d[Q>>0],S=255&R,T=M&S,!(0!=(0|T))&&(V=P,W=$,X=W+16|0,Y=0|f[X>>2],Z=ka,_=Y+(Z<<3)|0,f[g>>2]=0|f[_>>2],f[g+4>>2]=0|f[_+4>>2],f[h>>2]=0|f[c>>2],f[h+4>>2]=0|f[c+4>>2],aa=0|td(V,g,h),0!=(0|aa))){sa=5;break}ea=ka,fa=pa,ga=fa+1|0,pa=ga,ha=ea+ga|0,ia=$,ja=0|f[ia>>2],la=ja-1|0,ma=ha&la,ka=ma}return 5==(0|sa)?(da=ka,E=da,oa=E,o=ta,0|oa):7==(0|sa)?(na=0|f[F>>2],E=na,oa=E,o=ta,0|oa):0}function sd(a,b){a|=0,b|=0;var c=0,e=0,g=0,h=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Ta=0;switch(Ta=o,o=o+64|0,(0|o)>=(0|p)&&ca(64),c=Ta+56|0,Ra=Ta,Z=Ta+32|0,e=Ta+8|0,D=a,g=b+4|0,h=0|f[g>>2],O=h,0|O){case 16:for(k=0|f[b>>2],l=0|f[k>>2],m=l>>>11,n=8&m,q=0!=(0|n),r=0|f[b>>2],t=r+12|0,q?w=t:(u=t+8|0,v=0|f[u>>2],w=v),ja=w,x=0|f[b>>2],y=0|f[x>>2],z=y>>>11,A=8&z,B=0!=(0|A),C=0|f[b>>2],B?(E=0|f[C>>2],F=E>>>11,G=496&F,H=G>>4,K=H):(I=C+12|0,J=0|f[I>>2],K=J),Fa=K,Qa=0,ua=0;;){if(L=ua,M=Fa,N=(0|L)<(0|M),P=Qa,!N)break;Q=P<<5,R=Qa,S=Q-R|0,T=ja,U=T+1|0,ja=U,V=0|d[T>>0],W=V<<24>>24,X=S+W|0,Qa=X,Y=ua,$=Y+1|0,ua=$}return s=P,Pa=s,o=Ta,0|Pa;case 4:return _=0|f[b>>2],Qa=_,aa=Qa,ba=Qa,da=ba<<2,ea=aa^da,fa=Qa,ga=fa>>>2,ha=ea^ga,s=ha,Pa=s,o=Ta,0|Pa;case 3:return ia=0|f[b>>2],ka=+(0|ia),la=0|Yr(ka),Qa=la,ma=Qa,na=Qa,oa=na<<2,pa=ma^oa,qa=Qa,ra=qa>>>2,sa=pa^ra,s=sa,Pa=s,o=Ta,0|Pa;case 6:return ta=+j[b>>2],va=0|Yr(ta),Qa=va,wa=Qa,xa=Qa,ya=xa<<2,za=wa^ya,Aa=Qa,Ba=Aa>>>2,Ca=za^Ba,s=Ca,Pa=s,o=Ta,0|Pa;default:return Da=D,f[c>>2]=0|f[b>>2],f[c+4>>2]=0|f[b+4>>2],Xj(e,Da,c,68413,0,Ra),f[Z>>2]=0|f[e>>2],f[Z+4>>2]=0|f[e+4>>2],Ea=O,Ga=0|f[Z>>2],Ha=Ea^Ga,Qa=Ha,Ia=Qa,Ja=Qa,Ka=Ja<<2,La=Ia^Ka,Ma=Qa,Na=Ma>>>2,Oa=La^Na,s=Oa,Pa=s,o=Ta,0|Pa}return 0}function td(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,k=0,l=0,m=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,aa=0;aa=o,o=o+48|0,(0|o)>=(0|p)&&ca(48),h=aa+40|0,g=aa+32|0,e=aa+24|0,d=aa+16|0,Q=a,X=b+4|0,Y=0|f[X>>2],W=Y,Z=W;a:switch(0|Z){case 16:$=Q,f[d>>2]=0|f[b>>2],f[d+4>>2]=0|f[b+4>>2],f[e>>2]=0|f[c>>2],f[e+4>>2]=0|f[c+4>>2],i=0|Bg($,d,e),k=255&i,F=k;break;case 4:if(l=c+4|0,m=0|f[l>>2],4!=(0|m)){F=0;break a}q=0|f[b>>2],r=0|f[c>>2],s=(0|q)==(0|r),t=1&s,F=t;break a;case 3:switch(u=c+4|0,0|(0|f[u>>2])){case 3:w=0|f[b>>2],x=0|f[c>>2],y=(0|w)==(0|x),z=1&y,F=z;break a;case 6:A=0|f[b>>2],B=+(0|A),C=+j[c>>2],D=B==C,E=1&D,F=E;break a;default:F=0;break a}break;case 6:switch(G=c+4|0,0|(0|f[G>>2])){case 3:I=+j[b>>2],J=0|f[c>>2],K=+(0|J),L=I==K,M=1&L,F=M;break a;case 6:N=+j[b>>2],O=+j[c>>2],P=N==O,R=1&P,F=R;break a;default:F=0;break a}break;default:S=Q,f[g>>2]=0|f[b>>2],f[g+4>>2]=0|f[b+4>>2],f[h>>2]=0|f[c>>2],f[h+4>>2]=0|f[c+4>>2],T=0|Qf(S,g,h),U=255&T,F=U}return V=F,o=aa,0|V}function ud(a,b,c){a|=0,b|=0,c|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Na=0;for(Na=o,o=o+80|0,(0|o)>=(0|p)&&ca(80),g=Na+64|0,ja=Na+24|0,D=a,O=b,Z=c,k=Z,l=k>>>0<8,e=l?8:c,Z=e,m=Z,n=m+-1|0,Z=n,q=Z,r=q>>>1,s=Z,t=s|r,Z=t,u=Z,v=u>>>2,w=Z,x=w|v,Z=x,y=Z,z=y>>>4,A=Z,B=A|z,Z=B,C=Z,E=C>>>8,F=Z,G=F|E,Z=G,H=Z,I=H>>>16,J=Z,K=J|I,Z=K,L=Z,M=L+1|0,Z=M,N=O,P=N+12|0,Q=0|f[P>>2],ua=Q,R=O,S=R+16|0,T=0|f[S>>2],Fa=T,U=O,V=U+20|0,W=0|f[V>>2],La=W,X=O,Y=0|f[X>>2],h=Y,$=Z,f[ja>>2]=$,_=D,ld(_,ja),i=0;;){if(aa=i,ba=h,!(aa>>>0<ba>>>0))break;ea=ua,fa=i,ga=(fa>>>0)/4&-1,ha=ea+ga|0,ia=0|d[ha>>0],ka=255&ia,la=i,ma=(la>>>0)%4&-1,na=55012+ma|0,oa=0|d[na>>0],pa=255&oa,qa=ka&pa,ra=0!=(0|qa),ra||(sa=D,ta=Fa,va=i,wa=ta+(va<<3)|0,f[g>>2]=0|f[wa>>2],f[g+4>>2]=0|f[wa+4>>2],xa=0|vd(sa,ja,g,0),j=xa,ya=ja+20|0,za=0|f[ya>>2],Aa=j,Ba=za+(12*Aa|0)|0,Ca=La,Da=i,Ea=Ca+(12*Da|0)|0,f[Ba>>2]=0|f[Ea>>2],f[Ba+4>>2]=0|f[Ea+4>>2],f[Ba+8>>2]=0|f[Ea+8>>2]),Ga=i,Ha=Ga+1|0,i=Ha}Ia=O,f[Ia>>2]=0|f[ja>>2],f[Ia+4>>2]=0|f[ja+4>>2],f[Ia+8>>2]=0|f[ja+8>>2],f[Ia+12>>2]=0|f[ja+12>>2],f[Ia+16>>2]=0|f[ja+16>>2],f[Ia+20>>2]=0|f[ja+20>>2],Ja=D,Ka=Fa,xc(Ja,Ka),o=Na}function vd(a,b,c,e){a|=0,b|=0,c|=0,e|=0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,$a=0,_a=0,ab=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,$b=0,_b=0,ac=0,bc=0,cc=0;for(cc=o,o=o+64|0,(0|o)>=(0|p)&&ca(64),i=cc+48|0,h=cc+40|0,g=cc+32|0,ab=a,lb=b,wb=e,j=0,w=lb,H=w+8|0,S=0|f[H>>2],ba=lb,na=0|f[ba>>2],ta=na>>>2,ua=lb,va=0|f[ua>>2],wa=va>>>1,xa=ta|wa,ya=S>>>0>=xa>>>0,ya&&(za=ab,Aa=lb,Ba=lb,Ca=0|f[Ba>>2],Da=Ca<<1,ud(za,Aa,Da)),Ea=ab,f[g>>2]=0|f[c>>2],f[g+4>>2]=0|f[c+4>>2],Fa=0|sd(Ea,g),Ga=lb,Ha=0|f[Ga>>2],Ia=Ha-1|0,Ja=Fa&Ia,Hb=Ja,Ka=lb,La=0|f[Ka>>2],Sb=La;;){if(Ma=lb,Na=Ma+12|0,Oa=0|f[Na>>2],Pa=Hb,Qa=(Pa>>>0)/4&-1,Sa=Oa+Qa|0,Ta=0|d[Sa>>0],Ua=255&Ta,Va=Hb,Wa=(Va>>>0)%4&-1,Xa=55004+Wa|0,Ya=0|d[Xa>>0],Za=255&Ya,$a=Ua&Za,_a=0!=(0|$a),!(1^_a))break;if(cb=lb,db=cb+12|0,eb=0|f[db>>2],fb=Hb,gb=(fb>>>0)/4&-1,hb=eb+gb|0,ib=0|d[hb>>0],jb=255&ib,kb=Hb,mb=(kb>>>0)%4&-1,nb=55008+mb|0,ob=0|d[nb>>0],pb=255&ob,qb=jb&pb,0!=(0|qb))Fb=Sb,Gb=lb,Ib=0|f[Gb>>2],(0|Fb)==(0|Ib)&&(Kb=Hb,Sb=Kb);else if(sb=ab,tb=lb,ub=tb+16|0,vb=0|f[ub>>2],xb=Hb,yb=vb+(xb<<3)|0,f[h>>2]=0|f[yb>>2],f[h+4>>2]=0|f[yb+4>>2],f[i>>2]=0|f[c>>2],f[i+4>>2]=0|f[c+4>>2],zb=0|td(sb,h,i),0!=(0|zb)){bc=7;break}Lb=Hb,Mb=j,Nb=Mb+1|0,j=Nb,Ob=Lb+Nb|0,Pb=lb,Qb=0|f[Pb>>2],Rb=Qb-1|0,Tb=Ob&Rb,Hb=Tb}return 7==(0|bc)?(Bb=wb,Cb=0!=(0|Bb),Cb&&(Db=wb,f[Db>>2]=0),Eb=Hb,Ra=Eb,sa=Ra,o=cc,0|sa):(Ub=Sb,Vb=lb,Wb=0|f[Vb>>2],Xb=(0|Ub)!=(0|Wb),Yb=lb,Zb=Yb+16|0,$b=0|f[Zb>>2],Xb?(_b=Sb,ac=$b+(_b<<3)|0,f[ac>>2]=0|f[c>>2],f[ac+4>>2]=0|f[c+4>>2],k=Sb,l=(k>>>0)%4&-1,m=55008+l|0,n=0|d[m>>0],q=255&n,r=-1^q,s=lb,t=s+12|0,u=0|f[t>>2],v=Sb,x=(v>>>0)/4&-1,y=u+x|0,z=0|d[y>>0],A=255&z,B=A&r,C=255&B,d[y>>0]=C,D=lb,E=D+4|0,F=0|f[E>>2],G=F+1|0,f[E>>2]=G,I=wb,J=0!=(0|I),J&&(K=wb,f[K>>2]=2),L=Sb,Ra=L,sa=Ra,o=cc,0|sa):(M=Hb,N=$b+(M<<3)|0,f[N>>2]=0|f[c>>2],f[N+4>>2]=0|f[c+4>>2],O=Hb,P=(O>>>0)%4&-1,Q=55004+P|0,R=0|d[Q>>0],T=255&R,U=-1^T,V=lb,W=V+12|0,X=0|f[W>>2],Y=Hb,Z=(Y>>>0)/4&-1,$=X+Z|0,_=0|d[$>>0],aa=255&_,da=aa&U,ea=255&da,d[$>>0]=ea,fa=lb,ga=fa+4|0,ha=0|f[ga>>2],ia=ha+1|0,f[ga>>2]=ia,ja=lb,ka=ja+8|0,la=0|f[ka>>2],ma=la+1|0,f[ka>>2]=ma,oa=wb,pa=0!=(0|oa),pa&&(qa=wb,f[qa>>2]=1),ra=Hb,Ra=ra,sa=Ra,o=cc,0|sa))}function wd(a,b,c){a|=0,b|=0,c|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,x=0,y=0,z=0,A=0,B=0,C=0,E=0;E=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),x=b,y=c,z=y,A=(z>>>0)%4&-1,B=55008+A|0,C=0|d[B>>0],e=255&C,g=x,h=g+12|0,i=0|f[h>>2],j=y,k=(j>>>0)/4&-1,l=i+k|0,m=0|d[l>>0],n=255&m,q=n|e,r=255&q,d[l>>0]=r,s=x,t=s+4|0,u=0|f[t>>2],v=u+-1|0,f[t>>2]=v,o=E}function xd(a,b){a|=0,b|=0;var c=0,e=0,h=0,i=0,j=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,ga=0;if(ga=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),aa=ga+8|0,ba=ga,q=a,B=b,da=B,ea=da+16|0,c=0|f[ea>>2],X=c,e=X,!(0!=(0|e)))return void(o=ga);for(M=0;;){if(h=M,i=X,j=0|f[i>>2],!((0|h)!=(0|j)))break;l=X,m=l+12|0,n=0|f[m>>2],r=M,s=(r>>>0)/4&-1,t=n+s|0,u=0|d[t>>0],v=255&u,w=M,x=(w>>>0)%4&-1,y=55012+x|0,z=0|d[y>>0],A=255&z,C=v&A,D=0!=(0|C),D||(E=X,F=E+16|0,G=0|f[F>>2],H=M,I=G+(H<<3)|0,f[aa>>2]=0|f[I>>2],f[aa+4>>2]=0|f[I+4>>2],J=X,K=J+20|0,L=0|f[K>>2],N=M,O=L+(12*N|0)|0,f[ba>>2]=0|f[O>>2],f[ba+4>>2]=0|f[O+4>>2],P=aa+4|0,Q=0|f[P>>2],R=Q>>>0<8,R||(S=q,T=0|f[aa>>2],Cc(S,T)),U=ba+4|0,V=0|f[U>>2],V>>>0<8||(Y=q,Z=0|f[ba>>2],Cc(Y,Z))),$=M,_=$+1|0,M=_}o=ga}function yd(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,q=0,r=0,s=0,u=0;return u=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),a,l=b,m=l,n=m+16|0,q=0|f[n>>2],r=0!=(0|q),r?(s=l,c=s+16|0,d=0|f[c>>2],e=d+4|0,g=0|f[e>>2],h=g<<1,j=h,i=j,o=u,0|i):(j=0,i=j,o=u,0|i)}function zd(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,l=0,m=0,q=0;if(q=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),e=a,g=b,h=g,i=h+16|0,j=0|f[i>>2],!(0!=(0|j)))return void(o=q);l=e,m=g,c=m+16|0,d=0|f[c>>2],pd(l,d),o=q}function Ad(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,D=0;D=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),v=b,w=c,y=v,z=v,A=z+56|0,B=0|f[A>>2],d=0|Tc(y,15,B),x=d,e=v,g=0|od(e),h=x,i=h+16|0,f[i>>2]=g,j=w,k=(0|j)>0,k&&(l=v,m=x,n=m+16|0,q=0|f[n>>2],r=w,ud(l,q,r)),s=x,t=s+12|0,f[t>>2]=0,u=x,Bd(a,u),o=D}function Bd(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,l=0;l=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),d=l,c=b,e=c,g=0|f[e>>2],h=255&g,i=d+4|0,f[i>>2]=h,j=c,f[d>>2]=j,f[a>>2]=0|f[d>>2],f[a+4>>2]=0|f[d+4>>2],o=l}function Cd(a,b,c,e){a|=0,b|=0,c|=0,e|=0;var g=0,h=0,i=0,j=0,k=0,l=0,n=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,U=0;return U=o,o=o+80|0,(0|o)>=(0|p)&&ca(80),j=U+64|0,i=U+56|0,h=U+48|0,g=U+40|0,R=U,O=U+16|0,L=b,P=0|f[c>>2],Q=P+16|0,k=0|f[Q>>2],M=k,l=M,0!=(0|l)&&(n=L,q=M,f[g>>2]=0|f[e>>2],f[g+4>>2]=0|f[e+4>>2],r=0|rd(n,q,g),N=r,s=N,t=M,u=0|f[t>>2],(0|s)!=(0|u))?(w=M,x=w+20|0,y=0|f[x>>2],z=N,A=y+(12*z|0)|0,f[a>>2]=0|f[A>>2],f[a+4>>2]=0|f[A+4>>2],void(o=U)):(B=0|f[c>>2],C=0|f[B>>2],D=C>>>11,E=256&D,F=0!=(0|E),G=L,H=L,F?(I=L,J=0|ji(I,55016,6),f[h>>2]=0|f[c>>2],f[h+4>>2]=0|f[c+4>>2],Xi(O,H,h,J),d[R>>0]=0|d[c>>0],d[R+1>>0]=0|d[c+1>>0],d[R+2>>0]=0|d[c+2>>0],d[R+3>>0]=0|d[c+3>>0],d[R+4>>0]=0|d[c+4>>0],d[R+5>>0]=0|d[c+5>>0],d[R+6>>0]=0|d[c+6>>0],d[R+7>>0]=0|d[c+7>>0],S=R+8|0,d[S>>0]=0|d[e>>0],d[S+1>>0]=0|d[e+1>>0],d[S+2>>0]=0|d[e+2>>0],d[S+3>>0]=0|d[e+3>>0],d[S+4>>0]=0|d[e+4>>0],d[S+5>>0]=0|d[e+5>>0],d[S+6>>0]=0|d[e+6>>0],d[S+7>>0]=0|d[e+7>>0],f[i>>2]=0|f[O>>2],f[i+4>>2]=0|f[O+4>>2],Xj(a,G,i,69604,2,R),void(o=U)):(K=0|ji(H,55016,6),f[j>>2]=0|f[c>>2],f[j+4>>2]=0|f[c+4>>2],Xi(a,G,j,K),void(o=U)))}function Dd(a,b,c,d){a|=0,b|=0,c|=0,d|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,qa=0;if(qa=o,o=o+64|0,(0|o)>=(0|p)&&ca(64),h=qa+48|0,g=qa+40|0,e=qa+32|0,ma=qa+12|0,oa=qa,O=a,i=O,f[e>>2]=0|f[b>>2],f[e+4>>2]=0|f[b+4>>2],Ed(i,e),j=0|f[b>>2],k=j+16|0,l=0|f[k>>2],Z=l,m=Z,n=0!=(0|m),n||(q=O,r=0|od(q),s=0|f[b>>2],t=s+16|0,f[t>>2]=r,Z=r),u=O,v=Z,f[g>>2]=0|f[c>>2],f[g+4>>2]=0|f[c+4>>2],w=0|vd(u,v,g,ma),ja=w,x=Z,y=x+20|0,z=0|f[y>>2],A=ja,B=z+(12*A|0)|0,f[B>>2]=0|f[d>>2],f[B+4>>2]=0|f[d+4>>2],C=0|f[ma>>2],D=0!=(0|C),D&&(E=O,F=0|Wc(E),na=F,G=Z,H=G+16|0,I=0|f[H>>2],J=ja,K=I+(J<<3)|0,L=O,f[h>>2]=0|f[c>>2],f[h+4>>2]=0|f[c+4>>2],Fd(oa,L,h),f[K>>2]=0|f[oa>>2],f[K+4>>2]=0|f[oa+4>>2],f[c>>2]=0|f[K>>2],f[c+4>>2]=0|f[K+4>>2],M=O,N=na,Xc(M,N),P=Z,Q=P+4|0,R=0|f[Q>>2],S=R-1|0,T=Z,U=T+20|0,V=0|f[U>>2],W=ja,X=V+(12*W|0)|0,Y=X+8|0,f[Y>>2]=S),$=c+4|0,_=0|f[$>>2],aa=_>>>0<8,aa||(ba=O,da=0|f[b>>2],ea=0|f[c>>2],Yc(ba,da,ea)),fa=d+4|0,ga=0|f[fa>>2],ga>>>0<8)return void(o=qa);ia=O,ka=0|f[b>>2],la=0|f[d>>2],Yc(ia,ka,la),o=qa}function Ed(a,b){a|=0,b|=0;var c=0,d=0,e=0,h=0;h=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),c=h+8|0,d=a,e=d,f[c>>2]=0|f[b>>2],f[c+4>>2]=0|f[b+4>>2],Gd(e,c),o=h}function Fd(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;C=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),d=C+16|0,v=C,u=b,w=c+4|0,x=0|f[w>>2],y=16==(0|x),y&&(z=0|f[c>>2],A=0|f[z>>2],e=A>>>11,g=4&e,0!=(0|g)||(i=u,f[d>>2]=0|f[c>>2],f[d+4>>2]=0|f[c+4>>2],Gg(v,i,d),f[c>>2]=0|f[v>>2],f[c+4>>2]=0|f[v+4>>2],j=0|f[c>>2],k=0|f[j>>2],l=k>>>11,m=4|l,n=0|f[j>>2],q=2097151&m,r=q<<11,s=2047&n,t=s|r,f[j>>2]=t)),f[a>>2]=0|f[c>>2],f[a+4>>2]=0|f[c+4>>2],o=C}function Gd(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,u=0;return u=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),k=a,m=0|f[b>>2],n=m+16|0,q=0|f[n>>2],l=q,r=l,s=0!=(0|r),s?(h=l,j=h,i=j,o=u,0|i):(c=k,d=0|od(c),e=0|f[b>>2],g=e+16|0,f[g>>2]=d,j=d,i=j,o=u,0|i)}function Hd(a,b,c,e){a|=0,b|=0,c|=0,e|=0;var g=0,h=0,i=0,j=0,l=0,m=0,n=0,q=0,r=0,s=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Ba=0;if(Ba=o,o=o+48|0,(0|o)>=(0|p)&&ca(48),g=Ba+32|0,ta=Ba+8|0,N=b,za=0|f[c>>2],h=za+16|0,i=0|f[h>>2],Y=i,j=Y,0!=(0|j)&&(l=N,m=Y,f[g>>2]=0|f[e>>2],f[g+4>>2]=0|f[e+4>>2],n=0|rd(l,m,g),ia=n,q=ia,r=Y,s=0|f[r>>2],(0|q)!=(0|s))){for(u=Y,v=u+20|0,w=0|f[v>>2],x=ia,y=w+(12*x|0)|0,f[ta>>2]=0|f[y>>2],f[ta+4>>2]=0|f[y+4>>2],z=Y,A=z+20|0,B=0|f[A>>2],C=ia,D=B+(12*C|0)|0,E=D+8|0,F=0|f[E>>2],ya=F,G=N,H=Y,I=ia,wd(G,H,I),ia=0;;){if(J=ia,K=Y,L=0|f[K>>2],!((0|J)!=(0|L)))break;O=Y,P=O+12|0,Q=0|f[P>>2],R=ia,S=(R>>>0)/4&-1,T=Q+S|0,U=0|d[T>>0],V=255&U,W=ia,X=(W>>>0)%4&-1,Z=55012+X|0,$=0|d[Z>>0],_=255&$,aa=V&_,ba=0!=(0|aa),ba||(da=Y,ea=da+20|0,fa=0|f[ea>>2],ga=ia,ha=fa+(12*ga|0)|0,ja=ha+8|0,ka=0|f[ja>>2],la=ya,(0|ka)>(0|la)&&(na=Y,oa=na+20|0,pa=0|f[oa>>2],qa=ia,ra=pa+(12*qa|0)|0,sa=ra+8|0,ua=0|f[sa>>2],va=ua+-1|0,f[sa>>2]=va)),wa=ia,xa=wa+1|0,ia=xa}return f[a>>2]=0|f[ta>>2],f[a+4>>2]=0|f[ta+4>>2],void(o=Ba)}Id(a),o=Ba}function Id(a){a|=0;var b=0,c=0,e=0;e=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),b=e,c=b+4|0,f[c>>2]=0,f[b>>2]=0,f[a>>2]=0|f[b>>2],f[a+4>>2]=0|f[b+4>>2],o=e}function Jd(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,q=0;q=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),g=b,i=0|f[c>>2],j=i+16|0,k=0|f[j>>2],h=k,l=h,m=0!=(0|l),m&&(d=g,e=h,qd(d,e)),f[a>>2]=0|f[c>>2],f[a+4>>2]=0|f[c+4>>2],o=q}function Kd(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,q=0,r=0,s=0,u=0;return u=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),b,m=0|f[c>>2],n=m+16|0,q=0|f[n>>2],l=q,r=l,s=0!=(0|r),s?(d=l,e=d+4|0,g=0|f[e>>2],h=0==(0|g),i=1&h,j=255&i,Ld(a,j),void(o=u)):(Md(a),void(o=u))}function Ld(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,l=0;l=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),d=l,c=b,e=c,g=255&e,h=0!=(0|g),i=h?2:0,j=d+4|0,f[j>>2]=i,f[d>>2]=1,f[a>>2]=0|f[d>>2],f[a+4>>2]=0|f[d+4>>2],o=l}function Md(a){a|=0;var b=0,c=0,e=0;e=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),b=e,c=b+4|0,f[c>>2]=2,f[b>>2]=1,f[a>>2]=0|f[b>>2],f[a+4>>2]=0|f[b+4>>2],o=e}function Nd(a,b,c){a|=0,b|=0,c|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,q=0,r=0,s=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,xa=0;if(xa=o,o=o+96|0,(0|o)>=(0|p)&&ca(96),g=xa+80|0,e=xa+72|0,ja=xa+48|0,ua=xa+32|0,va=xa+24|0,h=xa+16|0,i=xa,D=b,j=0|f[c>>2],k=j+16|0,l=0|f[k>>2],O=l,m=O,0!=(0|m)&&(q=O,r=q+4|0,s=0|f[r>>2],!(0==(0|s)))){for(v=D,w=O,x=w+4|0,y=0|f[x>>2],In(ua,v,y),f[ja>>2]=0|f[ua>>2],f[ja+4>>2]=0|f[ua+4>>2],z=D,A=O,B=A+4|0,C=0|f[B>>2],E=C-1|0,Id(va),f[e>>2]=0|f[ja>>2],f[e+4>>2]=0|f[ja+4>>2],f[g>>2]=0|f[va>>2],f[g+4>>2]=0|f[va+4>>2],fo(z,e,E,g),F=0|f[ja>>2],G=F+20|0,H=0|f[G>>2],ta=H,Z=0;;){if(I=Z,J=O,K=0|f[J>>2],!((0|I)!=(0|K)))break;M=O,N=M+12|0,P=0|f[N>>2],Q=Z,R=(Q>>>0)/4&-1,S=P+R|0,T=0|d[S>>0],U=255&T,V=Z,W=(V>>>0)%4&-1,X=55012+W|0,Y=0|d[X>>0],$=255&Y,_=U&$,aa=0!=(0|_),aa||(ba=O,da=ba+16|0,ea=0|f[da>>2],fa=Z,ga=ea+(fa<<3)|0,f[h>>2]=0|f[ga>>2],f[h+4>>2]=0|f[ga+4>>2],ha=O,ia=ha+20|0,ka=0|f[ia>>2],la=Z,ma=ka+(12*la|0)|0,f[i>>2]=0|f[ma>>2],f[i+4>>2]=0|f[ma+4>>2],f[i+8>>2]=0|f[ma+8>>2],na=ta,oa=i+8|0,pa=0|f[oa>>2],qa=na+(pa<<3)|0,f[qa>>2]=0|f[h>>2],f[qa+4>>2]=0|f[h+4>>2]),ra=Z,sa=ra+1|0,Z=sa}return f[a>>2]=0|f[ja>>2],f[a+4>>2]=0|f[ja+4>>2],void(o=xa)}u=D,Ln(a,u),o=xa}function Od(a){a|=0;var b=0,c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ua=0;ua=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),b=a,A=b,L=b,W=L+32|0,ga=0|f[W>>2],qa=0|Cp(A,65286,ga),n=qa,ra=b,sa=ra+56|0,f[sa>>2]=qa,c=n,d=0|f[c>>2],e=d>>>11,g=-256&e,h=15|g,i=n,j=0|f[i>>2],k=2097151&h,l=k<<11,m=2047&j,q=m|l,f[i>>2]=q,r=b,s=n,Ip(r,s,69083,17,262144),t=b,u=n,Ip(t,u,64619,18,524288),v=b,w=n,Ip(v,w,64623,19,0),x=b,y=n,Ip(x,y,55023,20,4096),z=b,B=n,Ip(z,B,55031,21,262144),C=b,D=n,Ip(C,D,55040,22,0),E=b,F=n,Ip(E,F,55053,23,262144),G=b,H=n,Ip(G,H,55067,24,262144),I=b,J=n,Ip(I,J,64646,25,0),K=b,M=n,Ip(K,M,55076,26,262144),N=b,O=n,Ip(N,O,55085,27,262144),P=b,Q=n,Ip(P,Q,69243,26,262144),R=b,S=n,Ip(R,S,69252,28,8192),T=b,U=n,Ip(T,U,55096,26,262144),V=b,X=n,Ip(V,X,55101,29,0),Y=b,Z=n,Ip(Y,Z,64664,30,0),$=b,_=n,Ip($,_,69268,26,262144),aa=b,ba=n,Ip(aa,ba,64712,31,0),da=b,ea=n,Ip(da,ea,68395,32,0),fa=b,ha=n,Ip(fa,ha,64718,30,0),ia=b,ja=n,Ip(ia,ja,55106,18,524288),ka=b,la=n,Ip(ka,la,55112,27,262144),ma=b,na=n,Ip(ma,na,55119,33,0),oa=b,pa=n,Ip(oa,pa,65291,34,0),o=ua}function Pd(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,m=0;m=o,o=o+48|0,(0|o)>=(0|p)&&ca(48),e=m+32|0,d=m+24|0,k=m,h=m+8|0,g=b,i=g,f[k>>2]=h,Kp(i,69199,k),j=g,f[d>>2]=0|f[c>>2],f[d+4>>2]=0|f[c+4>>2],f[e>>2]=0|f[h>>2],f[e+4>>2]=0|f[h+4>>2],Cd(a,j,d,e),o=m}function Qd(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,r=0;r=o,o=o+64|0,(0|o)>=(0|p)&&ca(64),g=r+48|0,e=r+40|0,d=r+32|0,m=r,i=r+16|0,j=r+8|0,h=b,k=h,f[m>>2]=i,n=m+4|0,f[n>>2]=j,Kp(k,55135,m),l=h,f[d>>2]=0|f[c>>2],f[d+4>>2]=0|f[c+4>>2],f[e>>2]=0|f[i>>2],f[e+4>>2]=0|f[i+4>>2],f[g>>2]=0|f[j>>2],f[g+4>>2]=0|f[j+4>>2],Dd(l,d,e,g),f[a>>2]=0|f[j>>2],f[a+4>>2]=0|f[j+4>>2],o=r}function Rd(a,b,c){a|=0,b|=0,c|=0;var e=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,I=0;return I=o,o=o+80|0,(0|o)>=(0|p)&&ca(80),h=I+64|0,g=I+56|0,e=I+48|0,E=I+8|0,D=I,x=I+32|0,y=I+72|0,z=I+24|0,w=b,A=w,f[D>>2]=x,F=D+4|0,f[F>>2]=y,Kp(A,55131,D),B=0|f[c>>2],C=0|f[B>>2],i=C>>>11,j=256&i,0!=(0|j)?(l=0|d[y>>0],m=l<<24>>24!=0,m?(n=w,q=w,r=w,s=0|ji(r,55016,6),f[e>>2]=0|f[c>>2],f[e+4>>2]=0|f[c+4>>2],Xi(z,q,e,s),d[E>>0]=0|d[c>>0],d[E+1>>0]=0|d[c+1>>0],d[E+2>>0]=0|d[c+2>>0],d[E+3>>0]=0|d[c+3>>0],d[E+4>>0]=0|d[c+4>>0],d[E+5>>0]=0|d[c+5>>0],d[E+6>>0]=0|d[c+6>>0],d[E+7>>0]=0|d[c+7>>0],G=E+8|0,d[G>>0]=0|d[x>>0],d[G+1>>0]=0|d[x+1>>0],d[G+2>>0]=0|d[x+2>>0],d[G+3>>0]=0|d[x+3>>0],d[G+4>>0]=0|d[x+4>>0],d[G+5>>0]=0|d[x+5>>0],d[G+6>>0]=0|d[x+6>>0],d[G+7>>0]=0|d[x+7>>0],f[g>>2]=0|f[z>>2],f[g+4>>2]=0|f[z+4>>2],Xj(a,n,g,69604,2,E),void(o=I)):(Id(a),void(o=I))):(t=w,u=w,v=0|ji(u,55016,6),f[h>>2]=0|f[c>>2],f[h+4>>2]=0|f[c+4>>2],Xi(a,t,h,v),void(o=I))}function Sd(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,B=0;B=o,o=o+48|0,(0|o)>=(0|p)&&ca(48),g=B+40|0,e=B+32|0,d=B+24|0,z=B,t=B+8|0,s=b,u=s,f[z>>2]=t,Kp(u,69199,z),v=s,f[d>>2]=0|f[c>>2],f[d+4>>2]=0|f[c+4>>2],Ed(v,d),w=s,x=s,y=0|ji(x,55016,6),f[e>>2]=0|f[c>>2],f[e+4>>2]=0|f[c+4>>2],f[g>>2]=0|f[t>>2],f[g+4>>2]=0|f[t+4>>2],bj(w,e,y,g),h=0|f[c>>2],i=0|f[h>>2],j=i>>>11,k=-257&j,l=0|f[h>>2],m=2097151&k,n=m<<11,q=2047&l,r=q|n,f[h>>2]=r,f[a>>2]=0|f[t>>2],f[a+4>>2]=0|f[t+4>>2],o=B}function Td(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,r=0;return r=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),d=r+8|0,h=b,i=0|f[c>>2],j=0|f[i>>2],k=j>>>11,l=256&k,m=0!=(0|l),m?(n=h,e=h,g=0|ji(e,55016,6),f[d>>2]=0|f[c>>2],f[d+4>>2]=0|f[c+4>>2],Xi(a,n,d,g),void(o=r)):(Id(a),void(o=r))}function Ud(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,B=0;B=o,o=o+48|0,(0|o)>=(0|p)&&ca(48),g=B+40|0,e=B+32|0,d=B+24|0,z=B,t=B+8|0,s=b,u=s,f[z>>2]=t,Kp(u,69199,z),v=s,f[d>>2]=0|f[c>>2],f[d+4>>2]=0|f[c+4>>2],Ed(v,d),w=s,x=s,y=0|ji(x,55016,6),f[e>>2]=0|f[c>>2],f[e+4>>2]=0|f[c+4>>2],f[g>>2]=0|f[t>>2],f[g+4>>2]=0|f[t+4>>2],bj(w,e,y,g),h=0|f[c>>2],i=0|f[h>>2],j=i>>>11,k=256|j,l=0|f[h>>2],m=2097151&k,n=m<<11,q=2047&l,r=q|n,f[h>>2]=r,f[a>>2]=0|f[t>>2],f[a+4>>2]=0|f[t+4>>2],o=B}function Vd(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,m=0;m=o,o=o+48|0,(0|o)>=(0|p)&&ca(48),e=m+32|0,d=m+24|0,k=m,h=m+8|0,g=b,i=g,f[k>>2]=h,Kp(i,69199,k),j=g,f[d>>2]=0|f[c>>2],f[d+4>>2]=0|f[c+4>>2],f[e>>2]=0|f[h>>2],f[e+4>>2]=0|f[h+4>>2],Hd(a,j,d,e),o=m}function Wd(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;return C=o,o=o+48|0,(0|o)>=(0|p)&&ca(48),d=C+32|0,A=C,u=C+16|0,t=b,x=t,f[A>>2]=u,Kp(x,69199,A),y=0|f[c>>2],z=y+16|0,e=0|f[z>>2],v=e,g=v,h=0!=(0|g),h?(i=t,j=v,f[d>>2]=0|f[u>>2],f[d+4>>2]=0|f[u+4>>2],k=0|rd(i,j,d),w=k,l=w,m=v,n=0|f[m>>2],q=(0|l)!=(0|n),r=1&q,s=255&r,Ld(a,s),void(o=C)):(de(a),void(o=C))}function Xd(a,b,c){a|=0,b|=0,c|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,Y=0;Y=o,o=o+48|0,(0|o)>=(0|p)&&ca(48),g=Y+40|0,e=Y+32|0,W=Y,O=Y+16|0,D=b,T=D,f[W>>2]=O,Kp(T,69199,W),U=0|f[c>>2],V=U+16|0,h=0|f[V>>2],R=h,i=R,j=0!=(0|i);a:if(j){for(S=0;;){if(k=S,l=R,m=0|f[l>>2],!((0|k)!=(0|m)))break a;if(q=R,r=q+12|0,s=0|f[r>>2],t=S,u=(t>>>0)/4&-1,v=s+u|0,w=0|d[v>>0],x=255&w,y=S,z=(y>>>0)%4&-1,A=55012+z|0,B=0|d[A>>0],C=255&B,E=x&C,!(0!=(0|E))&&(G=D,H=R,I=H+20|0,J=0|f[I>>2],K=S,L=J+(12*K|0)|0,f[e>>2]=0|f[L>>2],f[e+4>>2]=0|f[L+4>>2],f[g>>2]=0|f[O>>2],f[g+4>>2]=0|f[O+4>>2],M=0|lf(G,e,g),M<<24>>24!=0))break;P=S,Q=P+1|0,S=Q}return Md(a),void(o=Y)}de(a),o=Y}function Yd(a,b,c){a|=0,b|=0,c|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,n=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0;R=o,o=o+80|0,(0|o)>=(0|p)&&ca(80),h=R+64|0,g=R+56|0,e=R+48|0,N=R,H=R+32|0,I=R+24|0,J=R+72|0,K=R+16|0,E=b,Id(K),f[I>>2]=0|f[K>>2],f[I+4>>2]=0|f[K+4>>2],L=E,f[N>>2]=H,O=N+4|0,f[O>>2]=I,P=N+8|0,f[P>>2]=J,Kp(L,55126,N),M=E,f[e>>2]=0|f[c>>2],f[e+4>>2]=0|f[c+4>>2],Ed(M,e),i=H+4|0,j=0|f[i>>2],k=0==(0|j),k?(l=0|f[H>>2],0!=(0|l)&&(Q=3)):Q=3;do{if(3==(0|Q)){if(n=0|d[J>>0],!(n<<24>>24!=0)){u=0|f[c>>2],v=0|f[u>>2],w=v>>>11,x=256|w,y=0|f[u>>2],z=2097151&x,A=z<<11,B=2047&y,C=B|A,f[u>>2]=C,f[I>>2]=0|f[H>>2],f[I+4>>2]=0|f[H+4>>2];break}r=E,s=E,t=0|sp(s,69160),Ar(r,t,65128)}}while(0);D=E,F=E,G=0|ji(F,55016,6),f[g>>2]=0|f[c>>2],f[g+4>>2]=0|f[c+4>>2],f[h>>2]=0|f[I>>2],f[h+4>>2]=0|f[I+4>>2],bj(D,g,G,h),f[a>>2]=0|f[c>>2],f[a+4>>2]=0|f[c+4>>2],o=R}function Zd(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,r=0;return r=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),b,j=0|f[c>>2],k=j+16|0,l=0|f[k>>2],i=l,m=i,n=0!=(0|m),n?(d=i,e=d+4|0,g=0|f[e>>2],ce(a,g),void(o=r)):(ce(a,0),void(o=r))}function $d(a,b,c){a|=0,b|=0,c|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,za=0;za=o,o=o+160|0,(0|o)>=(0|p)&&ca(160),g=za+144|0,q=za+136|0,n=za+128|0,m=za+120|0,l=za+112|0,k=za+104|0,j=za+96|0,i=za+88|0,h=za+80|0,e=za+72|0,wa=za,ra=za+48|0,ta=za+40|0,ua=za+32|0,va=za+24|0,r=za+16|0,L=b,s=0|f[c>>2],t=s+16|0,u=0|f[t>>2],W=u,v=L,f[e>>2]=0|f[c>>2],f[e+4>>2]=0|f[c+4>>2],Ed(v,e),w=W,x=0!=(0|w);a:if(x&&(y=W,z=y+4|0,A=0|f[z>>2],A>>>0>0)){for(ga=0;;){if(C=ga,D=W,E=0|f[D>>2],!((0|C)!=(0|E)))break a;if(G=W,H=G+12|0,I=0|f[H>>2],J=ga,K=(J>>>0)/4&-1,M=I+K|0,N=0|d[M>>0],O=255&N,P=ga,Q=(P>>>0)%4&-1,R=55012+Q|0,S=0|d[R>>0],T=255&S,U=O&T,!(0!=(0|U)))break;fa=ga,ha=fa+1|0,ga=ha}return X=W,Y=X+16|0,Z=0|f[Y>>2],$=ga,_=Z+($<<3)|0,f[ra>>2]=0|f[_>>2],f[ra+4>>2]=0|f[_+4>>2],aa=L,f[h>>2]=0|f[ra>>2],f[h+4>>2]=0|f[ra+4>>2],Rc(aa,h),ba=L,f[i>>2]=0|f[c>>2],f[i+4>>2]=0|f[c+4>>2],f[j>>2]=0|f[ra>>2],f[j+4>>2]=0|f[ra+4>>2],Hd(ua,ba,i,j),f[ta>>2]=0|f[ua>>2],f[ta+4>>2]=0|f[ua+4>>2],da=L,f[k>>2]=0|f[ta>>2],f[k+4>>2]=0|f[ta+4>>2],Rc(da,k),ea=L,f[l>>2]=0|f[ra>>2],f[l+4>>2]=0|f[ra+4>>2],f[m>>2]=0|f[ta>>2],f[m+4>>2]=0|f[ta+4>>2],On(a,ea,l,m),void(o=za)}return ia=0|f[c>>2],ja=0|f[ia>>2],ka=ja>>>11,la=256&ka,ma=0!=(0|la),na=L,oa=L,ma?(pa=L,qa=0|ji(pa,55016,6),f[n>>2]=0|f[c>>2],f[n+4>>2]=0|f[c+4>>2],Xi(va,oa,n,qa),Id(r),d[wa>>0]=0|d[c>>0],d[wa+1>>0]=0|d[c+1>>0],d[wa+2>>0]=0|d[c+2>>0],d[wa+3>>0]=0|d[c+3>>0],d[wa+4>>0]=0|d[c+4>>0],d[wa+5>>0]=0|d[c+5>>0],d[wa+6>>0]=0|d[c+6>>0],d[wa+7>>0]=0|d[c+7>>0],xa=wa+8|0,d[xa>>0]=0|d[r>>0],d[xa+1>>0]=0|d[r+1>>0],d[xa+2>>0]=0|d[r+2>>0],d[xa+3>>0]=0|d[r+3>>0],d[xa+4>>0]=0|d[r+4>>0],d[xa+5>>0]=0|d[r+5>>0],d[xa+6>>0]=0|d[r+6>>0],d[xa+7>>0]=0|d[r+7>>0],f[q>>2]=0|f[va>>2],f[q+4>>2]=0|f[va+4>>2],Xj(a,na,q,69604,2,wa),void(o=za)):(sa=0|ji(oa,55016,6),f[g>>2]=0|f[c>>2],f[g+4>>2]=0|f[c+4>>2],Xi(a,na,g,sa),void(o=za))}function _d(a,b,c){a|=0,b|=0,c|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Da=0;if(Da=o,o=o+64|0,(0|o)>=(0|p)&&ca(64),g=Da+48|0,e=Da+40|0,h=Da,D=b,i=0|f[c>>2],j=i+16|0,k=0|f[j>>2],Z=k,l=D,m=D,n=m+56|0,q=0|f[n>>2],r=0|Tc(l,15,q),O=r,s=D,t=0|od(s),u=O,v=u+16|0,f[v>>2]=t,w=Z,x=w+4|0,y=0|f[x>>2],!(y>>>0>0))return za=O,Bd(a,za),void(o=Da);for(A=O,B=A+16|0,C=0|f[B>>2],ja=C,ua=0;;){if(E=ua,F=Z,G=0|f[F>>2],!((0|E)!=(0|G)))break;I=Z,J=I+12|0,K=0|f[J>>2],L=ua,M=(L>>>0)/4&-1,N=K+M|0,P=0|d[N>>0],Q=255&P,R=ua,S=(R>>>0)%4&-1,T=55012+S|0,U=0|d[T>>0],V=255&U,W=Q&V,X=0!=(0|W),X||(Y=D,$=0|Wc(Y),Ba=$,_=D,aa=ja,ba=D,da=Z,ea=da+16|0,fa=0|f[ea>>2],ga=ua,ha=fa+(ga<<3)|0,f[e>>2]=0|f[ha>>2],f[e+4>>2]=0|f[ha+4>>2],Fd(h,ba,e),f[g>>2]=0|f[h>>2],f[g+4>>2]=0|f[h+4>>2],ia=0|vd(_,aa,g,0),Aa=ia,ka=D,la=Ba,Xc(ka,la),ma=ja,na=ma+20|0,oa=0|f[na>>2],pa=Aa,qa=oa+(12*pa|0)|0,ra=Z,sa=ra+20|0,ta=0|f[sa>>2],va=ua,wa=ta+(12*va|0)|0,f[qa>>2]=0|f[wa>>2],f[qa+4>>2]=0|f[wa+4>>2],f[qa+8>>2]=0|f[wa+8>>2]),xa=ua,ya=xa+1|0,ua=ya}za=O,Bd(a,za),o=Da}function ae(a,b,c){a|=0,b|=0,c|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,aa=0;if(aa=o,o=o+64|0,(0|o)>=(0|p)&&ca(64),g=aa+56|0,e=aa+48|0,X=aa+24|0,Y=aa+16|0,Z=aa,D=b,$=0|f[c>>2],h=$+16|0,i=0|f[h>>2],O=i,j=O,k=0!=(0|j),l=D,!k)return Ln(a,l),void(o=aa);for(m=O,n=m+4|0,q=0|f[n>>2],In(Y,l,q),f[X>>2]=0|f[Y>>2],f[X+4>>2]=0|f[Y+4>>2],W=0;;){if(r=W,s=O,t=0|f[s>>2],!((0|r)!=(0|t)))break;v=O,w=v+12|0,x=0|f[w>>2],y=W,z=(y>>>0)/4&-1,A=x+z|0,B=0|d[A>>0],C=255&B,E=W,F=(E>>>0)%4&-1,G=55012+F|0,H=0|d[G>>0],I=255&H,J=C&I,K=0!=(0|J),K||(L=O,M=L+20|0,N=0|f[M>>2],P=W,Q=N+(12*P|0)|0,f[Z>>2]=0|f[Q>>2],f[Z+4>>2]=0|f[Q+4>>2],f[Z+8>>2]=0|f[Q+8>>2],R=D,S=Z+8|0,T=0|f[S>>2],f[e>>2]=0|f[X>>2],f[e+4>>2]=0|f[X+4>>2],f[g>>2]=0|f[Z>>2],f[g+4>>2]=0|f[Z+4>>2],fo(R,e,T,g)),U=W,V=U+1|0,W=V}f[a>>2]=0|f[X>>2],f[a+4>>2]=0|f[X+4>>2],o=aa}function be(a,b,c){a|=0,b|=0,c|=0;var g=0;g=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),f[a>>2]=0|f[c>>2],f[a+4>>2]=0|f[c+4>>2],o=g}function ce(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,i=0;i=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),d=i,c=b,e=d+4|0,f[e>>2]=3,g=c,f[d>>2]=g,f[a>>2]=0|f[d>>2],f[a+4>>2]=0|f[d+4>>2],o=i}function de(a){a|=0;var b=0,c=0,e=0;e=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),b=e,c=b+4|0,f[c>>2]=0,f[b>>2]=1,f[a>>2]=0|f[b>>2],f[a+4>>2]=0|f[b+4>>2],o=e}function ee(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,l=0,m=0,n=0,q=0,s=0;switch(s=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),h=a,i=b+4|0,0|(0|f[i>>2])){case 3:return l=0|f[b>>2],m=+(0|l),g=m,e=g,o=s,+e;case 6:return d=+j[b>>2],g=d,e=g,o=s,+e;default:n=h,q=h,c=0|sp(q,69204),Ar(n,c,55138)}return 0}function fe(a,b,c){a|=0,b|=0,c=+c;var e=0,g=0,h=0,i=0,l=0;l=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),g=l,e=c,h=g+4|0,f[h>>2]=6,i=e,j[g>>2]=i,f[a>>2]=0|f[g>>2],f[a+4>>2]=0|f[g+4>>2],o=l}function ge(a,b,c,d){a|=0,b|=0,c|=0,d|=0;var e=0,g=0,h=0,i=0,j=0,l=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0;return qa=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),e=qa+16|0,P=b,ha=0|f[c>>2],_=ha,ia=d+4|0,j=0|f[ia>>2],3==(0|j)?(l=_,0==(0|l)?(f[a>>2]=0|f[c>>2],f[a+4>>2]=0|f[c+4>>2],void(o=qa)):(n=0|f[d>>2],ga=n,q=_,r=(0|q)<32768,s=_,t=(0|s)>=-32768,ja=r&t,u=ga,v=(0|u)<32768,ma=ja&v,w=ga,x=(0|w)>=-32768,na=ma&x,y=_,z=ga,A=0|V(y,z),na?(he(a,A),void(o=qa)):(B=+(0|A),fa=B,C=_,D=0!=(0|C),E=fa,D?(F=_,G=+(0|F),H=E/G,I=ga,J=+(0|I),K=H==J,L=fa,M=L<=2147483648,oa=K&M,N=fa,O=N>=-2147483648,ka=oa&O,pa=ka?10:9):(g=E<=2147483648,h=fa,i=h>=-2147483648,la=g&i,pa=la?10:9),9==(0|pa)?(Q=P,R=_,S=+(0|R),T=ga,U=+(0|T),W=S*U,fe(a,Q,W),void(o=qa)):10==(0|pa)?(X=fa,Y=~~X,he(a,Y),void(o=qa)):void 0))):(Z=P,$=_,aa=+(0|$),ba=P,f[e>>2]=0|f[d>>2],f[e+4>>2]=0|f[d+4>>2],da=+ee(ba,e),ea=aa*da,fe(a,Z,ea),void(o=qa))}function he(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,i=0;i=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),d=i,c=b,e=d+4|0,f[e>>2]=3,g=c,f[d>>2]=g,f[a>>2]=0|f[d>>2],f[a+4>>2]=0|f[d+4>>2],o=i}function ie(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0;if(M=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),B=b,H=c+4|0,I=0|f[H>>2],J=6==(0|I),J||(K=B,d=B,e=0|sp(d,69204),Ar(K,e,55138)),g=+j[c>>2],G=g,h=G,i=0|je(h),k=2147483647&i,l=2139095040==(0|k),l&&(m=B,n=B,q=0|sp(n,55154),r=G,s=r<0,t=s?55171:55181,Ar(m,q,t)),u=G,v=0|je(u),w=2147483647&v,!(w>>>0>2139095040))return C=G,D=~~C,F=D,E=F,he(a,E),void(o=M);y=B,z=B,A=0|sp(z,55154),Ar(y,A,55190)}function je(a){a=+a;var b=0,c=0,d=0,e=0,h=0;return h=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),c=h,b=a,d=b,j[c>>2]=d,e=0|f[c>>2],o=h,0|e}function ke(a){a=+a;var b=0,c=0,d=0,e=0,g=0,h=0,i=0,j=0,l=0,n=0;return n=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),c=n,b=a,d=b,k[c>>3]=d,e=c,g=e,h=0|f[g>>2],i=e+4|0,j=i,l=0|f[j>>2],G=l,o=n,0|h}function le(a,b,c,d){a|=0,b|=0,c|=0,d|=0;var e=0,g=0,i=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,L=0;return L=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),e=L+16|0,H=L,E=b,I=0|f[c>>2],F=I,J=d+4|0,g=0|f[J>>2],3==(0|g)?(i=F,0==(0|i)?(f[a>>2]=0|f[d>>2],f[a+4>>2]=0|f[d+4>>2],void(o=L)):(k=0|f[d>>2],G=k,l=F,m=G,n=0|me(l,m,H),q=n<<24>>24!=0,q?(r=E,s=F,t=+(0|s),u=G,v=+(0|u),w=t+v,fe(a,r,w),void(o=L)):(x=0|f[H>>2],he(a,x),void(o=L)))):(y=E,z=F,A=+(0|z),B=E,f[e>>2]=0|f[d>>2],f[e+4>>2]=0|f[d+4>>2],C=+ee(B,e),D=A+C,fe(a,y,D),void(o=L))}function me(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,G=0;return G=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),x=a,y=b,z=c,C=x,D=y,d=C+D|0,j=C+-2147483648|0,h=C+2147483647|0,i=(0|d)<(0|j),g=(0|d)>(0|h),e=(0|C)>=0,k=e?i:g,B=d,l=B,m=(0|l)>2147483647,E=k|m,E?s=1:(n=B,q=(0|n)<-2147483648,s=q),r=1&s,t=255&r,A=t,u=B,v=z,f[v>>2]=u,w=A,o=G,0|w}function ne(a,b,c,d){a|=0,b|=0,c|=0,d|=0;var e=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,J=0;return J=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),e=J+16|0,F=J,C=b,G=0|f[c>>2],D=G,H=d+4|0,g=0|f[H>>2],3==(0|g)?(i=0|f[d>>2],E=i,j=D,k=E,l=0|oe(j,k,F),m=l<<24>>24!=0,m?(n=C,q=D,r=+(0|q),s=E,t=+(0|s),u=r-t,fe(a,n,u),void(o=J)):(v=0|f[F>>2],he(a,v),void(o=J))):(w=C,x=D,y=+(0|x),z=C,f[e>>2]=0|f[d>>2],f[e+4>>2]=0|f[d+4>>2],A=+ee(z,e),B=y-A,fe(a,w,B),void(o=J))}function oe(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,G=0;return G=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),x=a,y=b,z=c,C=x,D=y,d=C-D|0,j=C+-2147483647|0,h=C+-2147483648|0,i=(0|d)<(0|j),g=(0|d)>(0|h),e=(0|C)>=0,k=e?i:g,B=d,l=B,m=(0|l)>2147483647,E=k|m,E?s=1:(n=B,q=(0|n)<-2147483648,s=q),r=1&s,t=255&r,A=t,u=B,v=z,f[v>>2]=u,w=A,o=G,0|w}function pe(a,b,c,e){a|=0,b|=0,c|=0,e|=0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,ma=0;if(ma=o,o=o+80|0,(0|o)>=(0|p)&&ca(80),ka=ma,fa=ma+32|0,ia=ma+8|0,M=b,X=e,g=fa+33|0,ga=g,h=0|f[c>>2],ha=h,i=X,j=(0|i)<2,k=X,l=36<(0|k),ja=j|l,ja&&(m=M,n=M,q=0|sp(n,69160),r=X,he(ia,r),d[ka>>0]=0|d[ia>>0],d[ka+1>>0]=0|d[ia+1>>0],d[ka+2>>0]=0|d[ia+2>>0],d[ka+3>>0]=0|d[ia+3>>0],d[ka+4>>0]=0|d[ia+4>>0],d[ka+5>>0]=0|d[ia+5>>0],d[ka+6>>0]=0|d[ia+6>>0],d[ka+7>>0]=0|d[ia+7>>0],Dr(m,q,55194,ka)),s=ha,0==(0|s))return u=ga,v=u+-1|0,ga=v,d[v>>0]=48,Z=M,$=ga,_=fa+33|0,aa=ga,ba=_,da=aa,ea=ba-da|0,mg(a,Z,$,ea),void(o=ma);if(w=ha,!((0|w)<0)){for(;;)if(N=ha,O=X,P=(0|N)%(0|O)&-1,Q=55645+P|0,R=0|d[Q>>0],S=ga,T=S+-1|0,ga=T,d[T>>0]=R,U=X,V=ha,W=(0|V)/(0|U)&-1,ha=W,!(0!=(0|W)))break;return Z=M,$=ga,_=fa+33|0,aa=ga,ba=_,da=aa,ea=ba-da|0,mg(a,Z,$,ea),void(o=ma)}for(;;)if(y=ha,z=X,A=(0|y)%(0|z)&-1,B=0-A|0,C=55645+B|0,D=0|d[C>>0],E=ga,F=E+-1|0,ga=F,d[F>>0]=D,G=X,H=ha,I=(0|H)/(0|G)&-1,ha=I,!(0!=(0|I)))break;K=ga,L=K+-1|0,ga=L,d[L>>0]=45,Z=M,$=ga,_=fa+33|0,aa=ga,ba=_,da=aa,ea=ba-da|0,mg(a,Z,$,ea),o=ma}function qe(a){a|=0;var b=0,c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,$a=0,_a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,vb=0;vb=o,o=o+64|0,(0|o)>=(0|p)&&ca(64),c=vb+48|0,b=vb+40|0,Ea=vb+8|0,Pa=vb,d=a,$a=d,jb=d,e=jb+32|0,s=0|f[e>>2],F=0|Cp($a,55211,s),N=F,G=d,H=N,Ip(G,H,59540,35,262144),I=d,J=N,Ip(I,J,59549,36,262144),K=d,L=N,Ip(K,L,55219,36,262144),M=d,O=N,Ip(M,O,69156,37,262144),P=d,Q=N,R=0|Cp(P,55360,Q),Y=R,S=d,T=Y,mq(S,T,67982),U=d,V=Y,Ip(U,V,56301,38,0),W=d,X=Y,Ip(W,X,55521,38,0),Z=d,$=Y,_=0|Cp(Z,55429,$),ia=_,aa=d,ba=aa+64|0,f[ba>>2]=_,da=d,ea=ia,Ip(da,ea,64614,39,262144),fa=d,ga=ia,Ip(fa,ga,69660,40,262144),ha=d,ja=ia,Ip(ha,ja,68856,41,262144),ka=d,la=ia,Ip(ka,la,59551,42,262144),ma=d,na=ia,Ip(ma,na,69201,43,262144),oa=d,pa=ia,Ip(oa,pa,59559,44,0),qa=d,ra=ia,Ip(qa,ra,69093,45,262144),sa=d,ua=ia,Ip(sa,ua,59553,46,262144),va=d,wa=ia,Ip(va,wa,59555,47,262144),xa=d,ya=ia,Ip(xa,ya,64616,48,262144),za=d,Aa=ia,Ip(za,Aa,59537,49,262144),Ba=d,Ca=ia,Ip(Ba,Ca,69289,50,262144),Da=d,Fa=ia,Ip(Da,Fa,68413,51,0),Ga=d,Ha=ia,Ip(Ga,Ha,56296,52,0),Ia=d,Ja=ia,Ip(Ia,Ja,69276,53,0),Ka=d,La=ia,Ip(Ka,La,69281,53,0),Ma=d,Na=ia,Ip(Ma,Na,55223,54,262144),Oa=d,Qa=N,Ra=0|Cp(Oa,55477,Qa),ta=Ra,Sa=d,Ta=Sa+60|0,f[Ta>>2]=Ra,Ua=d,Va=ta,mq(Ua,Va,67982),Wa=d,Xa=ta,Ip(Wa,Xa,64614,55,262144),Ya=d,Za=ta,Ip(Ya,Za,69660,56,262144),_a=d,ab=ta,Ip(_a,ab,68856,57,262144),bb=d,cb=ta,Ip(bb,cb,59551,58,262144),db=d,eb=ta,Ip(db,eb,69201,59,262144),fb=d,gb=ta,Ip(fb,gb,55230,60,0),hb=d,ib=ta,Ip(hb,ib,55235,61,0),kb=d,lb=ta,Ip(kb,lb,55243,62,0),mb=d,nb=ta,Ip(mb,nb,55249,63,0),ob=d,pb=ta,Ip(ob,pb,55259,64,8192),qb=d,rb=ta,Ip(qb,rb,56296,65,0),sb=d,tb=ta,Ip(sb,tb,56301,66,0),g=d,h=ta,Ip(g,h,55521,66,0),i=d,j=ta,Ip(i,j,55265,66,0),k=d,l=ta,Ip(k,l,55223,67,262144),m=d,n=ta,Ip(m,n,69289,68,262144),q=d,r=ta,Ip(q,r,69276,69,0),t=d,u=ta,Ip(t,u,69281,69,0),x=d,y=ta,Ip(x,y,55274,70,0),z=d,A=ta,B=d,fe(Ea,B,w),f[b>>2]=0|f[Ea>>2],f[b+4>>2]=0|f[Ea+4>>2],Jj(z,A,55279,b),C=d,D=ta,E=d,fe(Pa,E,v),f[c>>2]=0|f[Pa>>2],f[c+4>>2]=0|f[Pa+4>>2],Jj(C,D,70763,c),o=vb}function re(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,E=0,G=0,H=0,J=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,X=0,Z=0;Z=o,o=o+48|0,(0|o)>=(0|p)&&ca(48),e=Z+40|0,d=Z+32|0,X=Z,O=Z+16|0,C=b,R=C,f[X>>2]=O,Kp(R,69199,X),S=C,f[d>>2]=0|f[O>>2],f[d+4>>2]=0|f[O+4>>2],T=+ee(S,d),Q=T,g=C,f[e>>2]=0|f[c>>2],f[e+4>>2]=0|f[c+4>>2],h=+ee(g,e),i=h,j=Q,k=j,l=+K(+i,+k),m=l,P=m,n=c+4|0,q=0|f[n>>2],r=3==(0|q);do{if(r&&(s=O+4|0,t=0|f[s>>2],u=3==(0|t),v=P,w=v<=2147483648,U=u&w,x=P,y=x>=-2147483648,V=U&y,z=Q,A=z>0,V&A)){if(B=P,!(B<0)){if(E=P,!(E>0))break;if(G=P,H=~~G,!((0|H)>0))break}return J=P,L=~~J,he(a,L),void(o=Z)}}while(0);M=C,N=P,fe(a,M,N),o=Z}function se(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,k=0,l=0,m=0,n=0,q=0,s=0;s=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),d=s+16|0,q=s,h=s+4|0,g=b,i=g,f[q>>2]=h,Kp(i,55326,q),k=g,l=g,f[d>>2]=0|f[c>>2],f[d+4>>2]=0|f[c+4>>2],m=+ee(l,d),n=+j[h>>2],e=m/n,fe(a,k,e),o=s}function te(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,h=0,i=0,k=0,l=0,m=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;switch(C=o,o=o+48|0,(0|o)>=(0|p)&&ca(48),d=C+32|0,A=C,u=C+16|0,t=b,x=t,f[A>>2]=u,Kp(x,69199,A),y=t,f[d>>2]=0|f[c>>2],f[d+4>>2]=0|f[c+4>>2],z=+ee(y,d),v=z,e=u+4|0,0|(0|f[e>>2])){case 3:h=0|f[u>>2],i=+(0|h),w=i;break;case 6:k=+j[u>>2],w=k;break;default:return cf(a),void(o=C)}return l=v,m=w,l>m?(he(a,1),void(o=C)):(q=v,r=w,s=q<r,s?(he(a,-1),void(o=C)):(he(a,0),void(o=C)))}function ue(a,b,c){a|=0,b|=0,c|=0;var g=0;g=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),f[a>>2]=0|f[c>>2],f[a+4>>2]=0|f[c+4>>2],o=g}function ve(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,m=0;m=o,o=o+48|0,(0|o)>=(0|p)&&ca(48),e=m+32|0,d=m+24|0,k=m,h=m+8|0,g=b,i=g,f[k>>2]=h,Kp(i,69199,k),j=g,f[d>>2]=0|f[c>>2],f[d+4>>2]=0|f[c+4>>2],f[e>>2]=0|f[h>>2],f[e+4>>2]=0|f[h+4>>2],le(a,j,d,e),o=m}function we(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,m=0;m=o,o=o+48|0,(0|o)>=(0|p)&&ca(48),e=m+32|0,d=m+24|0,k=m,h=m+8|0,g=b,i=g,f[k>>2]=h,Kp(i,69199,k),j=g,f[d>>2]=0|f[c>>2],f[d+4>>2]=0|f[c+4>>2],f[e>>2]=0|f[h>>2],f[e+4>>2]=0|f[h+4>>2],ne(a,j,d,e),o=m}function xe(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,m=0;m=o,o=o+48|0,(0|o)>=(0|p)&&ca(48),e=m+32|0,d=m+24|0,k=m,h=m+8|0,g=b,i=g,f[k>>2]=h,Kp(i,69199,k),j=g,f[d>>2]=0|f[c>>2],f[d+4>>2]=0|f[c+4>>2],f[e>>2]=0|f[h>>2],f[e+4>>2]=0|f[h+4>>2],ge(a,j,d,e),o=m}function ye(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,J=0;return J=o,o=o+48|0,(0|o)>=(0|p)&&ca(48),d=J+40|0,H=J,B=J+24|0,E=J+8|0,F=J+4|0,A=b,G=A,f[H>>2]=B,Kp(G,69199,H),e=0|f[c>>2],C=e,g=B+4|0,h=0|f[g>>2],3==(0|h)?(k=0|f[B>>2],D=k,l=0==(0|k),m=A,l?(fe(a,m,v),void(o=J)):(n=C,q=D,df(m,n,q,0,E),r=0|f[E>>2],he(a,r),void(o=J))):(s=A,t=C,u=+(0|t),w=A,f[d>>2]=0|f[B>>2],f[d+4>>2]=0|f[B+4>>2],x=+ee(w,d),bf(s,u,x,0,F),y=A,z=+j[F>>2],fe(a,y,z),void(o=J))}function ze(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,z=0;switch(z=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),x=z,r=z+8|0,q=b,s=q,f[x>>2]=r,Kp(s,69199,x),t=r+4|0,0|(0|f[t>>2])){case 3:return v=0|f[c>>2],w=0|f[r>>2],d=(0|v)==(0|w),e=1&d,g=255&e,_e(a,g),void(o=z);case 6:return h=0|f[c>>2],i=+(0|h),k=+j[r>>2],l=i==k,m=1&l,n=255&m,_e(a,n),void(o=z);default:return af(a),void(o=z)}}function Ae(a,b,c){a|=0,b|=0,c|=0;var e=0,g=0,h=0,i=0,k=0;k=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),g=0|f[c>>2],e=g,h=e,i=-1^h,he(a,i),o=k}function Be(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,r=0;r=o,o=o+48|0,(0|o)>=(0|p)&&ca(48),d=r+32|0,n=r,h=r+16|0,i=r+8|0,g=b,j=g,f[n>>2]=h,Kp(j,69199,n),k=g,f[d>>2]=0|f[h>>2],f[d+4>>2]=0|f[h+4>>2],hf(i,k,d),f[h>>2]=0|f[i>>2],f[h+4>>2]=0|f[i+4>>2],l=0|f[c>>2],m=0|f[h>>2],e=l&m,he(a,e),o=r}function Ce(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,r=0;r=o,o=o+48|0,(0|o)>=(0|p)&&ca(48),d=r+32|0,n=r,h=r+16|0,i=r+8|0,g=b,j=g,f[n>>2]=h,Kp(j,69199,n),k=g,f[d>>2]=0|f[h>>2],f[d+4>>2]=0|f[h+4>>2],hf(i,k,d),f[h>>2]=0|f[i>>2],f[h+4>>2]=0|f[i+4>>2],l=0|f[c>>2],m=0|f[h>>2],e=l|m,he(a,e),o=r}function De(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,r=0;r=o,o=o+48|0,(0|o)>=(0|p)&&ca(48),d=r+32|0,n=r,h=r+16|0,i=r+8|0,g=b,j=g,f[n>>2]=h,Kp(j,69199,n),k=g,f[d>>2]=0|f[h>>2],f[d+4>>2]=0|f[h+4>>2],hf(i,k,d),f[h>>2]=0|f[i>>2],f[h+4>>2]=0|f[i+4>>2],l=0|f[c>>2],m=0|f[h>>2],e=l^m,he(a,e),o=r}function Ee(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,u=0,w=0;return w=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),n=w+4|0,m=b,r=m,ef(r,n),s=0|f[n>>2],0==(0|s)?(f[a>>2]=0|f[c>>2],f[a+4>>2]=0|f[c+4>>2],void(o=w)):(u=0|f[c>>2],q=u,d=0|f[n>>2],e=(0|d)<0,e?(g=q,h=0|f[n>>2],i=0-h|0,gf(a,g,i),void(o=w)):(j=m,k=q,l=0|f[n>>2],ff(a,j,k,l),void(o=w)))}function Fe(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,u=0,w=0;return w=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),n=w+4|0,m=b,r=m,ef(r,n),s=0|f[n>>2],0==(0|s)?(f[a>>2]=0|f[c>>2],f[a+4>>2]=0|f[c+4>>2],void(o=w)):(u=0|f[c>>2],q=u,d=0|f[n>>2],e=(0|d)<0,e?(g=m,h=q,i=0|f[n>>2],j=0-i|0,ff(a,g,h,j),void(o=w)):(k=q,l=0|f[n>>2],gf(a,k,l),void(o=w)))}function Ge(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,t=0;return t=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),r=t,j=t+8|0,i=b,k=i,f[r>>2]=j,Kp(k,69199,r),l=j+4|0,m=0|f[l>>2],n=3==(0|m),n?(q=0|f[c>>2],d=0|f[j>>2],e=(0|q)==(0|d),g=1&e,h=255&g,_e(a,h),void(o=t)):(af(a),void(o=t))}function He(a,b,c){a|=0,b|=0,c|=0;var e=0,g=0,h=0,i=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,x=0,y=0,z=0,B=0,C=0,D=0,E=0,F=0,G=0,I=0;for(I=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),B=I+12|0,b,F=0|f[c>>2],G=+(0|F),j[B>>2]=G,e=+j[B>>2],g=0==e,g&&(j[B>>2]=0),C=B,E=0,D=0;;){if(h=D,i=h>>>0<4,k=E,!i)break;l=971*k|0,m=C,n=D,q=m+n|0,r=0|d[q>>0],s=255&r,t=l^s,E=t,u=D,v=u+1|0,D=v}if(!((0|k)<0))return z=E,he(a,z),void(o=I);x=E,y=0-x|0,E=y,z=E,he(a,z),o=I}function Ie(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,j=0;j=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),d=b,e=d,g=0|f[c>>2],h=+(0|g),fe(a,e,h),o=j}function Je(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,m=0;m=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),d=m+16|0,k=m,g=m+4|0,e=b,f[g>>2]=10,h=e,f[k>>2]=g,Kp(h,64768,k),i=e,j=0|f[g>>2],f[d>>2]=0|f[c>>2],f[d+4>>2]=0|f[c+4>>2],pe(a,i,d,j),o=m}function Ke(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,x=0,y=0,z=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,fa=0;return fa=o,o=o+160|0,(0|o)>=(0|p)&&ca(160),l=fa+152|0,k=fa+144|0,i=fa+136|0,h=fa+128|0,g=fa+120|0,e=fa+112|0,d=fa+104|0,da=fa,V=fa+88|0,Z=fa+84|0,$=fa+80|0,_=fa+72|0,aa=fa+64|0,ba=fa+56|0,m=fa+48|0,n=fa+44|0,q=fa+40|0,r=fa+32|0,s=fa+24|0,t=fa+16|0,u=fa+8|0,K=b,x=K,f[da>>2]=V,Kp(x,69199,da),y=V+4|0,z=0|f[y>>2],3==(0|z)?(B=0|f[V>>2],C=0==(0|B),D=K,C?(E=K,fe(_,E,w),F=K,fe(aa,F,v),f[d>>2]=0|f[_>>2],f[d+4>>2]=0|f[_+4>>2],f[e>>2]=0|f[aa>>2],f[e+4>>2]=0|f[aa+4>>2],On(a,D,d,e),void(o=fa)):(G=0|f[c>>2],H=0|f[V>>2],df(D,G,H,Z,$),I=K,J=0|f[Z>>2],he(ba,J),L=0|f[$>>2],he(m,L),f[g>>2]=0|f[ba>>2],f[g+4>>2]=0|f[ba+4>>2],f[h>>2]=0|f[m>>2],f[h+4>>2]=0|f[m+4>>2],On(a,I,g,h),void(o=fa))):(M=K,N=0|f[c>>2],O=+(0|N),P=K,f[i>>2]=0|f[V>>2],f[i+4>>2]=0|f[V+4>>2],Q=+ee(P,i),bf(M,O,Q,n,q),R=K,S=+j[n>>2],T=~~S,U=+(0|T),fe(t,R,U),f[r>>2]=0|f[t>>2],f[r+4>>2]=0|f[t+4>>2],W=K,X=+j[q>>2],fe(u,W,X),f[s>>2]=0|f[u>>2],f[s+4>>2]=0|f[u+4>>2],Y=K,f[k>>2]=0|f[r>>2],f[k+4>>2]=0|f[r+4>>2],f[l>>2]=0|f[s>>2],f[l+4>>2]=0|f[s+4>>2],On(a,Y,k,l),void(o=fa))}function Le(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,k=0,l=0,m=0,n=0,q=0,s=0;s=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),d=s+24|0,q=s,h=s+8|0,g=b,i=g,f[q>>2]=h,Kp(i,69199,q),k=g,l=+j[c>>2],m=g,f[d>>2]=0|f[h>>2],f[d+4>>2]=0|f[h+4>>2],n=+ee(m,d),e=l+n,fe(a,k,e),o=s}function Me(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,k=0,l=0,m=0,n=0,q=0,s=0;s=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),d=s+24|0,q=s,h=s+8|0,g=b,i=g,f[q>>2]=h,Kp(i,69199,q),k=g,l=+j[c>>2],m=g,f[d>>2]=0|f[h>>2],f[d+4>>2]=0|f[h+4>>2],n=+ee(m,d),e=l-n,fe(a,k,e),o=s}function Ne(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,k=0,l=0,m=0,n=0,q=0,s=0;s=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),d=s+24|0,q=s,h=s+8|0,g=b,i=g,f[q>>2]=h,Kp(i,69199,q),k=g,l=+j[c>>2],m=g,f[d>>2]=0|f[h>>2],f[d+4>>2]=0|f[h+4>>2],n=+ee(m,d),e=l*n,fe(a,k,e),o=s}function Oe(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,u=0;u=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),d=u+24|0,s=u,k=u+8|0,l=u+4|0,i=b,m=i,f[s>>2]=k,Kp(m,69199,s),n=i,q=+j[c>>2],r=i,f[d>>2]=0|f[k>>2],f[d+4>>2]=0|f[k+4>>2],e=+ee(r,d),bf(n,q,e,0,l),g=i,h=+j[l>>2],fe(a,g,h),o=u}function Pe(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,z=0;switch(z=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),x=z,r=z+8|0,q=b,s=q,f[x>>2]=r,Kp(s,69199,x),t=r+4|0,0|(0|f[t>>2])){case 3:return v=+j[c>>2],w=0|f[r>>2],d=+(0|w),e=v==d,g=1&e,h=255&g,_e(a,h),void(o=z);case 6:return i=+j[c>>2],k=+j[r>>2],l=i==k,m=1&l,n=255&m,_e(a,n),void(o=z);default:return af(a),void(o=z)}}function Qe(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,f=0,g=0,h=0,i=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,u=0;return u=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),i=b,l=+j[c>>2],m=+U(+l),k=m,n=k,q=n<=2147483648,r=k,d=r>=-2147483648,s=q&d,s?(g=k,h=~~g,he(a,h),void(o=u)):(e=i,f=k,fe(a,e,f),void(o=u))}function Re(a,b,c){a|=0,b|=0,c|=0;var e=0,f=0,g=0,h=0,i=0,k=0,m=0;m=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),e=+j[c>>2],f=0|je(e),g=2147483647&f,h=g>>>0<2139095040,i=1&h,k=255&i,_e(a,k),o=m}function Se(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,f=0,g=0,h=0,i=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,u=0;return u=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),i=b,l=+j[c>>2],m=+H(+l),k=m,n=k,q=n<=2147483648,r=k,d=r>=-2147483648,s=q&d,s?(g=k,h=~~g,he(a,h),void(o=u)):(e=i,f=k,fe(a,e,f),void(o=u))}function Te(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,f=0,h=0,i=0,k=0,l=0,m=0,n=0,r=0;return r=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),b,i=+j[c>>2],h=i,k=h,l=0|je(k),m=2147483647&l,n=2139095040==(0|m),n?(d=h,e=d<0,f=e?-1:1,he(a,f),void(o=r)):(cf(a),void(o=r))}function Ue(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,B=0,C=0,D=0,E=0,F=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,$a=0,_a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,nb=0;if(nb=o,o=o+48|0,(0|o)>=(0|p)&&ca(48),lb=nb+24|0,va=nb+32|0,O=b,f[va>>2]=0,ab=O,f[lb>>2]=va,Kp(ab,64768,lb),d=+j[c>>2],s=d,$=s,u=$,v=0|ke(u),w=G,x=2147483647&w,y=0==(0|v),z=2146435072==(0|x),y&z)return B=0|f[va>>2],C=0<(0|B),C||(D=O,E=O,F=0|sp(E,55154),I=$,J=I<0,K=J?55171:55181,Ar(D,F,K)),f[a>>2]=0|f[c>>2],f[a+4>>2]=0|f[c+4>>2],void(o=nb);if(L=$,M=0|ke(L),N=G,P=2147483647&N,Q=P>>>0>2146435072,R=M>>>0>0,S=2146435072==(0|P),T=S&R,Q|T)return W=0|f[va>>2],X=0<(0|W),X||(Y=O,Z=O,_=0|sp(Z,55154),Ar(Y,_,55190)),f[a>>2]=0|f[c>>2],f[a+4>>2]=0|f[c+4>>2],void(o=nb);for(ka=1,aa=0|f[va>>2],ba=(0|aa)>=0,da=0|f[va>>2],ea=0-da|0,fa=ba?da:ea,Ga=fa;;){if(ga=Ga,ha=ga+-1|0,Ga=ha,ia=(0|ha)>=0,ja=ka,!ia)break;la=10*ja,ka=la}ma=0|ke(ja),na=G,oa=2147483647&na,pa=0==(0|ma),qa=2146435072==(0|oa),ra=pa&qa,sa=0|f[va>>2],ta=(0|sa)<0;do{if(!ra){if(ua=ka,wa=$,ta?(xa=wa/ua,$=xa):(ya=wa*ua,$=ya),za=$,Aa=za>0,Ba=$,Aa?(Ca=Ba,Da=+H(+Ca),Ea=Da,Ra=Ea,Fa=Ra,Ha=$,Ia=Ra,Ja=Ha-Ia,Ka=Ja>=.5,La=1&Ka,Ma=+(0|La),Na=Fa+Ma,$=Na):Ba<0&&(Pa=$,Qa=Pa,Sa=+U(+Qa),Ta=Sa,Ra=Ta,Ua=Ra,Va=Ra,Wa=$,Xa=Va-Wa,Ya=Xa>=.5,Za=1&Ya,$a=+(0|Za),_a=Ua-$a,$=_a),bb=0|f[va>>2],cb=(0|bb)<0,db=ka,eb=$,cb){fb=eb*db,$=fb;break}gb=eb/db,$=gb;break}ta&&($=0)}while(0);return hb=0|f[va>>2],ib=(0|hb)>0,jb=$,ib?(kb=0|ke(jb),e=G,g=2147483647&e,h=g>>>0<2146435072,i=kb>>>0<0,k=2146435072==(0|g),l=k&i,m=h|l,m?(n=O,q=$,r=q,fe(a,n,r),void(o=nb)):(f[a>>2]=0|f[c>>2],f[a+4>>2]=0|f[c+4>>2],void(o=nb))):(t=~~jb,he(a,t),void(o=nb))}function Ve(a,b,c){a|=0,b|=0,c|=0;var g=0;g=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),f[a>>2]=0|f[c>>2],f[a+4>>2]=0|f[c+4>>2],o=g}function We(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,f=0,g=0,h=0,i=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,D=0;return D=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),u=b,w=+j[c>>2],v=w,x=v,y=x,z=y>0,z&&(A=v,d=+H(+A),v=d),e=v,f=e,g=f<0,g&&(h=v,i=+U(+h),v=i),k=v,l=k<=2147483648,m=v,n=m>=-2147483648,B=l&n,B?(s=v,t=~~s,he(a,t),void(o=D)):(q=u,r=v,fe(a,q,r),void(o=D))}function Xe(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,G=0;G=o,o=o+96|0,(0|o)>=(0|p)&&ca(96),g=G+80|0,e=G+72|0,d=G+64|0,E=G,y=G+48|0,z=G+44|0,A=G+40|0,B=G+32|0,C=G+24|0,D=G+16|0,h=G+8|0,x=b,i=x,f[E>>2]=y,Kp(i,69199,E),k=x,l=+j[c>>2],m=x,f[d>>2]=0|f[y>>2],f[d+4>>2]=0|f[y+4>>2],n=+ee(m,d),bf(k,l,n,z,A),q=x,r=+j[z>>2],s=~~r,t=+(0|s),fe(D,q,t),f[B>>2]=0|f[D>>2],f[B+4>>2]=0|f[D+4>>2],u=x,v=+j[A>>2],fe(h,u,v),f[C>>2]=0|f[h>>2],f[C+4>>2]=0|f[h+4>>2],w=x,f[e>>2]=0|f[B>>2],f[e+4>>2]=0|f[B+4>>2],f[g>>2]=0|f[C>>2],f[g+4>>2]=0|f[C+4>>2],On(a,w,e,g),o=G}function Ye(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,v=0;return v=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),t=v,l=v+8|0,k=b,m=k,f[t>>2]=l,Kp(m,69199,t),n=l+4|0,q=0|f[n>>2],r=6==(0|q),r?(s=+j[c>>2],d=0|f[l>>2],e=+(0|d),g=s==e,h=1&g,i=255&h,_e(a,i),void(o=v)):(af(a),void(o=v))}function Ze(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,k=0,l=0,n=0;return n=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),d=n+8|0,e=b,g=+j[c>>2],h=0|je(g),i=2147483647&h,k=i>>>0>2139095040,l=e,k?(qg(a,l,55190,3),void(o=n)):(f[d>>2]=0|f[c>>2],f[d+4>>2]=0|f[c+4>>2],cc(a,l,d,55288),void(o=n))}function $e(a,b,c){a|=0,b|=0,c|=0;var e=0,f=0,g=0,h=0,i=0,k=0,m=0;m=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),e=+j[c>>2],f=0|je(e),g=2147483647&f,h=g>>>0>2139095040,i=1&h,k=255&i,_e(a,k),o=m}function _e(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,l=0;l=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),d=l,c=b,e=c,g=255&e,h=0!=(0|g),i=h?2:0,j=d+4|0,f[j>>2]=i,f[d>>2]=1,f[a>>2]=0|f[d>>2],f[a+4>>2]=0|f[d+4>>2],o=l}function af(a){a|=0;var b=0,c=0,e=0;e=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),b=e,c=b+4|0,f[c>>2]=0,f[b>>2]=1,f[a>>2]=0|f[b>>2],f[a+4>>2]=0|f[b+4>>2],o=e}function bf(a,b,c,d,e){a|=0,b=+b,c=+c,d|=0,e|=0;var f=0,g=0,h=0,i=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,X=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0;if(ea=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),a,$=b,_=c,aa=d,ba=e,h=_,i=h,k=0==i,k?(f=w,g=v):(l=$,m=_,n=+cw(l,m),g=n,q=$,r=0|je(q),s=2147483647&r,t=2139095040==(0|s),t?(u=_,x=0|je(u),y=2147483647&x,z=y>>>0<2139095040,z?(A=$,f=A):da=6):da=6,6==(0|da)&&(B=$,C=g,D=B-C,E=_,F=D/E,f=F),G=_,H=g,I=G*H,I<0&&(K=_,L=g,M=L+K,g=M,N=f,O=N,P=O-1,Q=P,f=Q)),R=ba,S=0!=(0|R),S&&(T=g,U=ba,j[U>>2]=T),V=aa,!(0!=(0|V)))return void(o=ea);X=f,Z=aa,j[Z>>2]=X,o=ea}function cf(a){a|=0;var b=0,c=0,e=0;e=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),b=e,c=b+4|0,f[c>>2]=0,f[b>>2]=0,f[a>>2]=0|f[b>>2],f[a+4>>2]=0|f[b+4>>2],o=e}function df(a,b,c,d,e){a|=0,b|=0,c|=0,d|=0,e|=0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,W=0,Y=0,Z=0,$=0,_=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ka=0,la=0;la=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),ea=b,fa=c,ga=d,ha=e,i=fa,j=(0|i)<0,k=ea,l=(0|k)<0,m=ea;do{if(j){if(l){n=0-m|0,q=fa,r=0-q|0,s=(0|n)/(0|r)&-1,g=s;break}t=fa,u=0-t|0,v=(0|m)/(0|u)&-1,w=0-v|0,g=w;break}if(l){x=0-m|0,y=fa,z=(0|x)/(0|y)&-1,A=0-z|0,g=A;break}B=fa,C=(0|m)/(0|B)&-1,g=C;break}while(0);if(D=ea,E=g,F=fa,G=0|V(E,F),H=D-G|0,h=H,I=h,J=(0|I)<0,K=fa,L=(0|K)>0,ia=J&L,ia?ka=10:(M=h,N=(0|M)>0,O=fa,P=(0|O)<0,N&P&&(ka=10)),10==(0|ka)&&(Q=fa,R=h,S=R+Q|0,h=S,T=g,U=T-1|0,g=U),W=ga,Y=0!=(0|W),Y&&(Z=g,$=ga,f[$>>2]=Z),_=ha,!(0!=(0|_)))return void(o=la);ba=h,da=ha,f[da>>2]=ba,o=la}function ef(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,q=0;q=o,o=o+48|0,(0|o)>=(0|p)&&ca(48),c=q+32|0,m=q,g=q+16|0,h=q+8|0,d=a,e=b,i=d,f[m>>2]=g,Kp(i,69199,m),j=d,f[c>>2]=0|f[g>>2],f[c+4>>2]=0|f[g+4>>2],hf(h,j,c),k=0|f[h>>2],l=e,f[l>>2]=k,o=q}function ff(a,b,c,d){a|=0,b|=0,c|=0,d|=0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,y=0;if(y=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),r=b,s=c,t=d,v=t,w=(0|v)>31,e=s,!w)return n=t,q=e<<n,he(a,q),void(o=y);for(f=+(0|e),u=f;;){if(g=t,h=g+-1|0,t=h,!(0!=(0|g)))break;j=u,k=2*j,u=k}l=r,m=u,fe(a,l,m),o=y}function gf(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,f=0,g=0,h=0,i=0,k=0,m=0;m=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),e=b,f=c,g=f,h=(0|g)>=31,i=e;do{if(h){if((0|i)<0){he(a,-1);break}he(a,0);break}k=f,d=i>>k,he(a,d)}while(0);o=m}function hf(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,s=0,t=0,u=0;for(u=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),d=u+16|0,l=u,k=b;;){if(m=c+4|0,n=0|f[m>>2],q=3==(0|n),!(1^q)){t=6;break}if(s=c+4|0,e=0|f[s>>2],g=6==(0|e),h=k,g){t=4;break}f[d>>2]=0|f[c>>2],f[d+4>>2]=0|f[c+4>>2],Mf(l,h,d),f[c>>2]=0|f[l>>2],f[c+4>>2]=0|f[l+4>>2]}if(4==(0|t))i=k,j=0|sp(i,69204),Ar(h,j,55293);else if(6==(0|t))return f[a>>2]=0|f[c>>2],f[a+4>>2]=0|f[c+4>>2],void(o=u)}function jf(a,b,c){a|=0,b|=0,c|=0;var d=0,g=0,h=0,i=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,G=0,H=0,I=0,J=0,K=0,M=0;M=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),G=b+4|0,H=0|f[G>>2],I=c+4|0,J=0|f[I>>2],K=(0|H)!=(0|J);a:if(K)B=0;else switch(d=b+4|0,0|(0|f[d>>2])){case 2:B=1;break a;case 3:case 0:g=0|f[b>>2],h=0|f[c>>2],i=(0|g)==(0|h),k=1&i,l=255&k,B=l;break a;case 4:m=0|f[b>>2],n=0|f[c>>2],q=(0|m)==(0|n),r=1&q,s=255&r,B=s;break a;case 6:t=+j[b>>2],u=+j[c>>2],v=t==u,w=1&v,x=255&w,B=x;break a;default:y=0|f[b>>2],z=0|f[c>>2],A=(0|y)==(0|z),C=1&A,D=255&C,B=D;break a}return E=B,o=M,0|E}function kf(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,k=0;return k=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),e=k+16|0,d=k+8|0,g=a,h=g,f[d>>2]=0|f[b>>2],f[d+4>>2]=0|f[b+4>>2],f[e>>2]=0|f[c>>2],f[e+4>>2]=0|f[c+4>>2],i=0|jf(h,d,e),o=k,0|i}function lf(a,b,c){a|=0,b|=0,c|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,w=0,y=0;return y=o,o=o+64|0,(0|o)>=(0|p)&&ca(64),h=y+48|0,g=y+40|0,e=y+32|0,w=y,r=y+16|0,s=y+8|0,q=a,t=q,f[e>>2]=0|f[b>>2],f[e+4>>2]=0|f[b+4>>2],f[g>>2]=0|f[c>>2],f[g+4>>2]=0|f[c+4>>2],u=0|jf(t,e,g),u<<24>>24!=0?(n=1,m=n,o=y,0|m):(i=q,d[w>>0]=0|d[c>>0],d[w+1>>0]=0|d[c+1>>0],d[w+2>>0]=0|d[c+2>>0],d[w+3>>0]=0|d[c+3>>0],d[w+4>>0]=0|d[c+4>>0],d[w+5>>0]=0|d[c+5>>0],d[w+6>>0]=0|d[c+6>>0],d[w+7>>0]=0|d[c+7>>0],f[h>>2]=0|f[b>>2],f[h+4>>2]=0|f[b+4>>2],Xj(s,i,h,69201,1,w),f[r>>2]=0|f[s>>2],f[r+4>>2]=0|f[s+4>>2],j=r+4|0,k=0|f[j>>2],l=0!=(0|k),l?(n=1,m=n,o=y,0|m):(n=0,m=n,o=y,0|m))}function mf(a){a|=0;var b=0,c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,pa=0;pa=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),b=a,W=b,ga=b,la=ga+32|0,ma=0|f[la>>2],na=0|Cp(W,55328,ma),n=na,c=b,d=c+76|0,f[d>>2]=na,e=b,g=n,mq(e,g,67982),h=b,i=n,Ip(h,i,69093,71,262144),j=b,k=n,Ip(j,k,59555,72,262144),l=b,m=n,Ip(l,m,59553,73,262144),q=b,r=n,Ip(q,r,68558,74,0),s=b,t=n,Ip(s,t,69276,75,0),u=b,v=n,Ip(u,v,69281,76,0),w=b,x=b,y=x+32|0,z=0|f[y>>2],B=0|Cp(w,55337,z),A=B,C=b,D=C+68|0,f[D>>2]=B,E=b,F=A,mq(E,F,67982),G=b,H=A,Ip(G,H,69093,77,262144),I=b,J=A,Ip(I,J,59555,78,262144),K=b,M=A,Ip(K,M,69276,79,0),N=b,O=A,Ip(N,O,59553,80,262144),P=b,Q=A,Ip(P,Q,69281,79,0),R=b,S=b,T=S+32|0,U=0|f[T>>2],V=0|Cp(R,55347,U),L=V,X=b,Y=X+72|0,f[Y>>2]=V,Z=b,$=L,mq(Z,$,67982),_=b,aa=L,Ip(_,aa,69093,71,262144),ba=b,da=L,Ip(ba,da,59555,72,262144),ea=b,fa=L,Ip(ea,fa,69276,81,0),ha=b,ia=L,Ip(ha,ia,59553,73,262144),ja=b,ka=L,Ip(ja,ka,69281,81,0),o=pa}function nf(a,b,c){a|=0,b|=0,c|=0;var f=0;f=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),Af(a),o=f}function of(a,b,c){a|=0,b|=0,c|=0;var e=0,g=0,h=0,i=0,j=0,l=0;l=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),j=l,g=l+8|0,e=b,h=e,f[j>>2]=g,Kp(h,55358,j),i=0|d[g>>0],zf(a,i),o=l}function pf(a,b,c){a|=0,b|=0,c|=0;var e=0,g=0,h=0,i=0,j=0,l=0;l=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),j=l,g=l+8|0,e=b,h=e,f[j>>2]=g,Kp(h,55358,j),i=0|d[g>>0],zf(a,i),o=l}function qf(a,b,c){a|=0,b|=0,c|=0;var f=0;f=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),yf(a),o=f}function rf(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0;g=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),d=b,e=d,mg(a,e,0,0),o=g}function sf(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0;g=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),d=b,e=d,qg(a,e,63694,3),o=g}function tf(a,b,c){a|=0,b|=0,c|=0;var e=0,g=0,h=0,i=0,j=0,l=0;l=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),j=l,g=l+8|0,e=b,h=e,f[j>>2]=g,Kp(h,55358,j),i=0|d[g>>0],zf(a,i),o=l}function uf(a,b,c){a|=0,b|=0,c|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,r=0;r=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),n=r,h=r+8|0,g=b,i=g,f[n>>2]=h,Kp(i,55358,n),j=0|d[h>>0],k=j<<24>>24!=0,l=1^k,m=1&l,e=255&m,zf(a,e),o=r}function vf(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0;g=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),d=b,e=d,qg(a,e,63733,4),o=g}function wf(a,b,c){a|=0,b|=0,c|=0;var f=0;f=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),yf(a),o=f}function xf(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0;g=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),d=b,e=d,qg(a,e,63709,5),o=g}function yf(a){a|=0;var b=0,c=0,e=0;e=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),b=e,c=b+4|0,f[c>>2]=2,f[b>>2]=1,f[a>>2]=0|f[b>>2],f[a+4>>2]=0|f[b+4>>2],o=e}function zf(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,l=0;l=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),d=l,c=b,e=c,g=255&e,h=0!=(0|g),i=h?2:0,j=d+4|0,f[j>>2]=i,f[d>>2]=1,f[a>>2]=0|f[d>>2],f[a+4>>2]=0|f[d+4>>2],o=l}function Af(a){a|=0;var b=0,c=0,e=0;e=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),b=e,c=b+4|0,f[c>>2]=0,f[b>>2]=1,f[a>>2]=0|f[b>>2],f[a+4>>2]=0|f[b+4>>2],o=e}function Bf(a,b,c,e,g,h){a|=0,b|=0,c|=0,e|=0,g|=0,h|=0;var i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,O=0;if(O=o,o=o+80|0,(0|o)>=(0|p)&&ca(80),k=O+64|0,j=O+56|0,i=O+48|0,L=O,m=O+24|0,n=O+16|0,H=b,I=e,J=g,K=h,l=0,q=H,r=J,s=0|ki(q,r),l=s,t=H,u=l,f[i>>2]=0|f[c>>2],f[i+4>>2]=0|f[c+4>>2],v=0|cq(t,i,u),v<<24>>24!=0)return F=H,G=l,f[k>>2]=0|f[c>>2],f[k+4>>2]=0|f[c+4>>2],Yj(a,F,k,G,0,0),void(o=O);x=K,y=x<<24>>24!=0,y&&(z=H,A=H,B=0|sp(A,69204),C=H,f[j>>2]=0|f[c>>2],f[j+4>>2]=0|f[c+4>>2],Df(m,C,j),D=H,E=I,pg(n,D,E),d[L>>0]=0|d[m>>0],d[L+1>>0]=0|d[m+1>>0],d[L+2>>0]=0|d[m+2>>0],d[L+3>>0]=0|d[m+3>>0],d[L+4>>0]=0|d[m+4>>0],d[L+5>>0]=0|d[m+5>>0],d[L+6>>0]=0|d[m+6>>0],d[L+7>>0]=0|d[m+7>>0],M=L+8|0,d[M>>0]=0|d[n>>0],d[M+1>>0]=0|d[n+1>>0],d[M+2>>0]=0|d[n+2>>0],d[M+3>>0]=0|d[n+3>>0],d[M+4>>0]=0|d[n+4>>0],d[M+5>>0]=0|d[n+5>>0],d[M+6>>0]=0|d[n+6>>0],d[M+7>>0]=0|d[n+7>>0],Dr(z,B,55368,L)),Cf(a),o=O}function Cf(a){a|=0;var b=0,c=0,e=0;e=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),b=e,c=b+4|0,f[c>>2]=0,f[b>>2]=0,f[a>>2]=0|f[b>>2],f[a+4>>2]=0|f[b+4>>2],o=e}function Df(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,q=0,r=0,u=0;if(u=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),e=u+16|0,d=u+8|0,k=b,l=c+4|0,m=0|f[l>>2],!(0==(0|m)||(q=c+4|0,r=0|f[q>>2],2==(0|r))))return h=k,i=k,f[e>>2]=0|f[c>>2],f[e+4>>2]=0|f[c+4>>2],j=0|hq(i,e),pg(a,h,j),void(o=u);g=k,f[d>>2]=0|f[c>>2],f[d+4>>2]=0|f[c+4>>2],Ef(a,g,d),o=u}function Ef(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,m=0;m=o,o=o+48|0,(0|o)>=(0|p)&&ca(48),e=m+32|0,d=m+24|0,k=m,h=m+8|0,g=b,i=g,j=g,f[d>>2]=0|f[c>>2],f[d+4>>2]=0|f[c+4>>2],Xj(h,j,d,69281,0,k),f[e>>2]=0|f[h>>2],f[e+4>>2]=0|f[h+4>>2],Ug(a,i,e),o=m}function Ff(a,b,c,e,g,h){a|=0,b|=0,c|=0,e|=0,g|=0,h|=0;var i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,P=0;if(P=o,o=o+80|0,(0|o)>=(0|p)&&ca(80),i=P+72|0,L=P,j=P+48|0,k=P+40|0,l=P+32|0,m=P+24|0,H=b,I=e,J=g,K=h,n=c+4|0,q=0|f[n>>2],r=I,(0|q)==(0|r))return f[a>>2]=0|f[c>>2],f[a+4>>2]=0|f[c+4>>2],void(o=P);t=H,u=J,v=K,f[i>>2]=0|f[c>>2],f[i+4>>2]=0|f[c+4>>2],Bf(k,t,i,u,v,1),f[j>>2]=0|f[k>>2],f[j+4>>2]=0|f[k+4>>2],w=j+4|0,x=0|f[w>>2],y=I,z=(0|x)!=(0|y),z&&(A=H,B=H,C=0|sp(B,69204),D=H,E=J,pg(l,D,E),F=H,G=K,pg(m,F,G),d[L>>0]=0|d[c>>0],d[L+1>>0]=0|d[c+1>>0],d[L+2>>0]=0|d[c+2>>0],d[L+3>>0]=0|d[c+3>>0],d[L+4>>0]=0|d[c+4>>0],d[L+5>>0]=0|d[c+5>>0],d[L+6>>0]=0|d[c+6>>0],d[L+7>>0]=0|d[c+7>>0],M=L+8|0,d[M>>0]=0|d[l>>0],d[M+1>>0]=0|d[l+1>>0],d[M+2>>0]=0|d[l+2>>0],d[M+3>>0]=0|d[l+3>>0],d[M+4>>0]=0|d[l+4>>0],d[M+5>>0]=0|d[l+5>>0],d[M+6>>0]=0|d[l+6>>0],d[M+7>>0]=0|d[l+7>>0],N=L+16|0,d[N>>0]=0|d[m>>0],d[N+1>>0]=0|d[m+1>>0],d[N+2>>0]=0|d[m+2>>0],d[N+3>>0]=0|d[m+3>>0],d[N+4>>0]=0|d[m+4>>0],d[N+5>>0]=0|d[m+5>>0],d[N+6>>0]=0|d[m+6>>0],d[N+7>>0]=0|d[m+7>>0],Dr(A,C,55393,L)),f[a>>2]=0|f[j>>2],f[a+4>>2]=0|f[j+4>>2],o=P}function Gf(a,b,c,d,e,g){a|=0,b|=0,c|=0,d|=0,e|=0,g|=0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,A=0,B=0,C=0,E=0,F=0,G=0,H=0,J=0,K=0;return K=o,o=o+48|0,(0|o)>=(0|p)&&ca(48),h=K+32|0,i=K+8|0,j=K,E=b,F=d,G=e,H=g,k=c+4|0,l=0|f[k>>2],m=F,n=(0|l)==(0|m),q=F,r=21!=(0|q),n&r?(f[a>>2]=0|f[c>>2],f[a+4>>2]=0|f[c+4>>2],void(o=K)):(s=E,t=G,u=H,f[h>>2]=0|f[c>>2],f[h+4>>2]=0|f[c+4>>2],Bf(j,s,h,t,u,0),f[i>>2]=0|f[j>>2],f[i+4>>2]=0|f[j+4>>2],v=i+4|0,w=0|f[v>>2],x=0==(0|w),x?(y=0|f[i>>2],0!=(0|y)&&(J=5)):J=5,5!=(0|J)||(A=i+4|0,B=0|f[A>>2],C=F,(0|B)!=(0|C))?(Cf(a),void(o=K)):(f[a>>2]=0|f[i>>2],f[a+4>>2]=0|f[i+4>>2],void(o=K)))}function Hf(a,b,c){a|=0,b|=0,c|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,P=0,Q=0,R=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0;if(Ma=o,o=o+144|0,(0|o)>=(0|p)&&ca(144),i=Ma+136|0,h=Ma+128|0,g=Ma+120|0,e=Ma+112|0,Ia=Ma+16|0,Ha=Ma,Ea=Ma+80|0,Fa=Ma+72|0,j=Ma+64|0,k=Ma+56|0,l=Ma+48|0,m=Ma+40|0,n=Ma+32|0,F=a,Q=c,_=56,q=b+4|0,r=0|f[q>>2],la=r,s=la,t=Q,u=(0|s)!=(0|t),v=la,w=21==(0|v),!(u|w))return void(o=Ma);for(;;){if(x=_,y=0|d[x>>0],z=255&y,!((0|z)<23)){La=19;break}if(B=_,C=0|d[B>>0],D=255&C,E=Q,(0|D)==(0|E))break;va=_,xa=va+8|0,_=xa}19==(0|La)&&(ya=F,za=F,Aa=0|sp(za,69204),Ba=Q,If(m,Ba),Ca=b+4|0,Da=0|f[Ca>>2],If(n,Da),d[Ia>>0]=0|d[m>>0],d[Ia+1>>0]=0|d[m+1>>0],d[Ia+2>>0]=0|d[m+2>>0],d[Ia+3>>0]=0|d[m+3>>0],d[Ia+4>>0]=0|d[m+4>>0],d[Ia+5>>0]=0|d[m+5>>0],d[Ia+6>>0]=0|d[m+6>>0],d[Ia+7>>0]=0|d[m+7>>0],Ka=Ia+8|0,d[Ka>>0]=0|d[n>>0],d[Ka+1>>0]=0|d[n+1>>0],d[Ka+2>>0]=0|d[n+2>>0],d[Ka+3>>0]=0|d[n+3>>0],d[Ka+4>>0]=0|d[n+4>>0],d[Ka+5>>0]=0|d[n+5>>0],d[Ka+6>>0]=0|d[n+6>>0],d[Ka+7>>0]=0|d[n+7>>0],Dr(ya,Aa,55436,Ia)),H=b+4|0,I=0|f[H>>2],J=0==(0|I),J?(K=0|f[b>>2],L=0!=(0|K),L?La=7:wa=63694):La=7;do{if(7==(0|La)){if(M=b+4|0,N=0|f[M>>2],3==(0|N)){wa=55429;break}if(P=b+4|0,R=0|f[P>>2],4==(0|R)){wa=56484;break}if(T=b+4|0,U=0|f[T>>2],V=U>>>0<8,W=F,!V){f[i>>2]=0|f[b>>2],f[i+4>>2]=0|f[b+4>>2],ka=0|hq(W,i),wa=ka;break}f[e>>2]=0|f[b>>2],f[e+4>>2]=0|f[b+4>>2],Ug(Ea,W,e),X=0|f[Ea>>2],Y=0|f[X>>2],Z=Y>>>11,$=8&Z,aa=0!=(0|$),ba=F,aa?(f[g>>2]=0|f[b>>2],f[g+4>>2]=0|f[b+4>>2],Ug(Fa,ba,g),da=0|f[Fa>>2],ea=da+12|0,ja=ea):(f[h>>2]=0|f[b>>2],f[h+4>>2]=0|f[b+4>>2],Ug(j,ba,h),fa=0|f[j>>2],ga=fa+12|0,ha=ga+8|0,ia=0|f[ha>>2],ja=ia),wa=ja}}while(0);ma=F,na=F,oa=0|sp(na,69204),pa=F,qa=wa,pg(k,pa,qa),ra=F,sa=_,ta=sa+4|0,ua=0|f[ta>>2],pg(l,ra,ua),d[Ha>>0]=0|d[k>>0],d[Ha+1>>0]=0|d[k+1>>0],d[Ha+2>>0]=0|d[k+2>>0],d[Ha+3>>0]=0|d[k+3>>0],d[Ha+4>>0]=0|d[k+4>>0],d[Ha+5>>0]=0|d[k+5>>0],d[Ha+6>>0]=0|d[k+6>>0],d[Ha+7>>0]=0|d[k+7>>0],Ja=Ha+8|0,d[Ja>>0]=0|d[l>>0],d[Ja+1>>0]=0|d[l+1>>0],d[Ja+2>>0]=0|d[l+2>>0],d[Ja+3>>0]=0|d[l+3>>0],d[Ja+4>>0]=0|d[l+4>>0],d[Ja+5>>0]=0|d[l+5>>0],d[Ja+6>>0]=0|d[l+6>>0],d[Ja+7>>0]=0|d[l+7>>0],Dr(ma,oa,68087,Ha)}function If(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,i=0;i=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),d=i,c=b,e=d+4|0,f[e>>2]=3,g=c,f[d>>2]=g,f[a>>2]=0|f[d>>2],f[a+4>>2]=0|f[d+4>>2],o=i}function Jf(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0;H=o,o=o+128|0,(0|o)>=(0|p)&&ca(128),k=H+112|0,j=H+104|0,i=H+96|0,h=H+88|0,g=H+80|0,e=H+72|0,d=H+64|0,A=H+48|0,C=H+32|0,D=H+24|0,E=H+16|0,F=H+8|0,l=H,z=b,m=z,kg(A,m,20),n=z,f[d>>2]=0|f[c>>2],f[d+4>>2]=0|f[c+4>>2],q=0|hq(n,d),B=q,r=z,f[e>>2]=0|f[A>>2],f[e+4>>2]=0|f[A+4>>2],ch(C,r,e,55493,2),s=z,t=B,f[g>>2]=0|f[A>>2],f[g+4>>2]=0|f[A+4>>2],eh(D,s,g,t),u=z,f[h>>2]=0|f[A>>2],f[h+4>>2]=0|f[A+4>>2],ch(E,u,h,68074,1),v=z,w=z,x=0|f[c>>2],Vg(F,w,x),f[i>>2]=0|f[A>>2],f[i+4>>2]=0|f[A+4>>2],f[j>>2]=0|f[F>>2],f[j+4>>2]=0|f[F+4>>2],xg(v,i,j),y=z,f[k>>2]=0|f[A>>2],f[k+4>>2]=0|f[A+4>>2],ch(l,y,k,65540,1),f[a>>2]=0|f[A>>2],f[a+4>>2]=0|f[A+4>>2],o=H}function Kf(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0;ba=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),d=ba+16|0,N=a,W=c,Y=N,f[d>>2]=0|f[b>>2],f[d+4>>2]=0|f[b+4>>2],Z=0|Lf(Y,d),X=Z,$=W,g=0|f[$>>2],h=255&g,e=h+-9|0,_=e>>>0<3,_||(i=N,j=N,k=0|sp(j,69204),Ar(i,k,55496)),l=W,m=0|f[l>>2],n=m>>>11,q=524288&n,r=0!=(0|q);a:if(r)for(s=W,t=s+20|0,u=0|f[t>>2],W=u;;){if(v=W,w=0|f[v>>2],x=w>>>11,y=1048576&x,z=0!=(0|y),!(1^z))break a;B=W,D=B+20|0,E=0|f[D>>2],W=E}for(;;){if(F=X,!(0!=(0|F))){aa=12;break}if(H=X,I=W,(0|H)==(0|I)){aa=10;break}if(K=X,L=K+16|0,M=0|f[L>>2],O=W,P=O+16|0,Q=0|f[P>>2],(0|M)==(0|Q)){aa=10;break}S=X,T=S+20|0,U=0|f[T>>2],X=U}return 10==(0|aa)?(C=1,V=C,o=ba,0|V):12==(0|aa)?(C=0,V=C,o=ba,0|V):0}function Lf(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,K=0;K=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),A=a,D=b+4|0,E=0|f[D>>2];a:switch(0|E){case 0:if(F=0|f[b>>2],G=0!=(0|F),H=A,G){I=H+72|0,c=0|f[I>>2],n=c;break a}d=H+76|0,e=0|f[d>>2],n=e;break a;case 2:g=A,h=g+68|0,i=0|f[h>>2],n=i;break;case 4:j=A,k=j+80|0,l=0|f[k>>2],n=l;break;case 3:m=A,q=m+64|0,r=0|f[q>>2],n=r;break;case 6:s=A,t=s+60|0,u=0|f[t>>2],n=u;break;case 7:v=A,w=v+32|0,x=0|f[w>>2],n=x;break;case 20:n=0;break;default:y=0|f[b>>2],z=y+4|0,B=0|f[z>>2],n=B}return C=n,o=K,0|C}function Mf(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,i=0;i=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),d=i+8|0,e=b,g=e,f[d>>2]=0|f[c>>2],f[d+4>>2]=0|f[c+4>>2],Nf(a,g,d,55521),o=i}function Nf(a,b,c,e){a|=0,b|=0,c|=0,e|=0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,Q=0;if(Q=o,o=o+112|0,(0|o)>=(0|p)&&ca(112),j=Q+104|0,i=Q+96|0,h=Q+88|0,g=Q+80|0,L=Q,H=Q+64|0,I=Q+56|0,J=Q+48|0,K=Q+40|0,k=Q+32|0,F=b,G=e,l=c+4|0,m=0|f[l>>2],3==(0|m))return f[a>>2]=0|f[c>>2],f[a+4>>2]=0|f[c+4>>2],void(o=Q);q=F,r=G,f[g>>2]=0|f[c>>2],f[g+4>>2]=0|f[c+4>>2],Bf(I,q,g,55360,r,1),f[H>>2]=0|f[I>>2],f[H+4>>2]=0|f[I+4>>2],s=F,t=F,u=t+64|0,v=0|f[u>>2],f[h>>2]=0|f[H>>2],f[h+4>>2]=0|f[H+4>>2],w=0|Kf(s,h,v),x=w<<24>>24!=0,x||(y=F,f[i>>2]=0|f[c>>2],f[i+4>>2]=0|f[c+4>>2],Df(J,y,i),z=F,A=F,B=0|sp(A,69204),C=F,D=G,pg(K,C,D),E=F,f[j>>2]=0|f[H>>2],f[j+4>>2]=0|f[H+4>>2],Df(k,E,j),d[L>>0]=0|d[J>>0],d[L+1>>0]=0|d[J+1>>0],d[L+2>>0]=0|d[J+2>>0],d[L+3>>0]=0|d[J+3>>0],d[L+4>>0]=0|d[J+4>>0],d[L+5>>0]=0|d[J+5>>0],d[L+6>>0]=0|d[J+6>>0],d[L+7>>0]=0|d[J+7>>0],M=L+8|0,d[M>>0]=0|d[J>>0],d[M+1>>0]=0|d[J+1>>0],d[M+2>>0]=0|d[J+2>>0],d[M+3>>0]=0|d[J+3>>0],d[M+4>>0]=0|d[J+4>>0],d[M+5>>0]=0|d[J+5>>0],d[M+6>>0]=0|d[J+6>>0],d[M+7>>0]=0|d[J+7>>0],N=L+16|0,d[N>>0]=0|d[K>>0],d[N+1>>0]=0|d[K+1>>0],d[N+2>>0]=0|d[K+2>>0],d[N+3>>0]=0|d[K+3>>0],d[N+4>>0]=0|d[K+4>>0],d[N+5>>0]=0|d[K+5>>0],d[N+6>>0]=0|d[K+6>>0],d[N+7>>0]=0|d[K+7>>0],O=L+24|0,d[O>>0]=0|d[k>>0],d[O+1>>0]=0|d[k+1>>0],d[O+2>>0]=0|d[k+2>>0],d[O+3>>0]=0|d[k+3>>0],d[O+4>>0]=0|d[k+4>>0],d[O+5>>0]=0|d[k+5>>0],d[O+6>>0]=0|d[k+6>>0],d[O+7>>0]=0|d[k+7>>0],Dr(z,B,55528,L)),f[a>>2]=0|f[H>>2],f[a+4>>2]=0|f[H+4>>2],o=Q}function Of(a,b,c,d){a|=0,b|=0,c|=0,d|=0;var e=0,g=0,h=0,i=0,k=0,l=0,m=0,n=0,r=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,C=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,Y=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0;switch(ga=o,o=o+80|0,(0|o)>=(0|p)&&ca(80),k=ga+64|0,i=ga+56|0,h=ga+48|0,g=ga+40|0,e=ga+32|0,aa=ga+16|0,ba=ga+8|0,da=ga,R=b,_=d,ea=c+4|0,l=0|f[ea>>2],m=0==(0|l),m&&(n=0|f[c>>2],0!=(0|n)||(r=_,s=0!=(0|r),s?(S=R,T=R,U=0|sp(T,69160),Ar(S,U,55604)):(t=R,u=R,v=0|sp(u,69204),Ar(t,v,55573)))),w=c+4|0,0|(0|f[w>>2])){case 6:fa=6;break;case 3:return F=_,G=0!=(0|F),G&&(S=R,T=R,U=0|sp(T,69160),Ar(S,U,55604)),f[a>>2]=0|f[c>>2],f[a+4>>2]=0|f[c+4>>2],void(o=ga);case 16:break;default:fa=13}do{if(6==(0|fa)){if(y=_,z=0!=(0|y),z&&(S=R,T=R,U=0|sp(T,69160),Ar(S,U,55604)),A=+j[c>>2],A<=2147483648&&(C=+j[c>>2],C>=-2147483648)){fa=13;break}return E=R,f[e>>2]=0|f[c>>2],f[e+4>>2]=0|f[c+4>>2],ie(a,E,e),void(o=ga)}}while(0);do{if(13==(0|fa)){if(J=_,K=0!=(0|J),L=R,K){if(f[h>>2]=0|f[c>>2],f[h+4>>2]=0|f[c+4>>2],Wg(ba,L,h),f[aa>>2]=0|f[ba>>2],f[aa+4>>2]=0|f[ba+4>>2],M=aa+4|0,N=0|f[M>>2],!(0==(0|N)))break;if(P=0|f[aa>>2],0!=(0|P))break;S=R,T=R,U=0|sp(T,69160),Ar(S,U,55604)}return f[i>>2]=0|f[c>>2],(f[i+4>>2]=0|f[c+4>>2],Bf(da,L,i,55360,55521,0),f[aa>>2]=0|f[da>>2],f[aa+4>>2]=0|f[da+4>>2],V=aa+4|0,W=0|f[V>>2],!(0==(0|W))||(Y=0|f[aa>>2],0!=(0|Y)))?(f[a>>2]=0|f[aa>>2],f[a+4>>2]=0|f[aa+4>>2],void(o=ga)):($=R,f[k>>2]=0|f[c>>2],f[k+4>>2]=0|f[c+4>>2],Nf(a,$,k,56301),void(o=ga))}}while(0);H=R,I=_,f[g>>2]=0|f[c>>2],f[g+4>>2]=0|f[c+4>>2],$g(a,H,g,I,1),o=ga}function Pf(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,i=0;i=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),d=i+8|0,e=b,g=e,f[d>>2]=0|f[c>>2],f[d+4>>2]=0|f[c+4>>2],Of(a,g,d,0),o=i}function Qf(a,b,c){a|=0,b|=0,c|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,z=0;return z=o,o=o+64|0,(0|o)>=(0|p)&&ca(64),h=z+40|0,g=z+32|0,e=z+24|0,x=z,s=z+8|0,r=a,t=r,f[e>>2]=0|f[b>>2],f[e+4>>2]=0|f[b+4>>2],f[g>>2]=0|f[c>>2],f[g+4>>2]=0|f[c+4>>2],u=0|jf(t,e,g),v=u<<24>>24!=0,v?(q=1,n=q,o=z,0|n):(w=r,d[x>>0]=0|d[c>>0],d[x+1>>0]=0|d[c+1>>0],d[x+2>>0]=0|d[c+2>>0],d[x+3>>0]=0|d[c+3>>0],d[x+4>>0]=0|d[c+4>>0],d[x+5>>0]=0|d[c+5>>0],d[x+6>>0]=0|d[c+6>>0],d[x+7>>0]=0|d[c+7>>0],f[h>>2]=0|f[b>>2],f[h+4>>2]=0|f[b+4>>2],Xj(s,w,h,69289,1,x),i=s+4|0,j=0|f[i>>2],k=0!=(0|j),l=1&k,m=255&l,q=m,n=q,o=z,0|n)}function Rf(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,k=0;k=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),d=k+24|0,c=k+16|0,g=k,e=a,h=e,f[c>>2]=0|f[b>>2],f[c+4>>2]=0|f[b+4>>2],Ef(g,h,c),i=0|f[762],f[d>>2]=0|f[g>>2],f[d+4>>2]=0|f[g+4>>2],Sf(d,i),o=k}function Sf(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,E=0,F=0,G=0,H=0,J=0;if(J=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),n=b,A=a+4|0,C=0|f[A>>2],!(16==(0|C)))return void(o=J);E=0|f[a>>2],F=0|f[E>>2],G=F>>>11,H=8&G,c=0!=(0|H),d=0|f[a>>2],e=d+12|0,c?y=e:(g=e+8|0,h=0|f[g>>2],y=h),i=0|f[a>>2],j=0|f[i>>2],k=j>>>11,l=8&k,m=0!=(0|l),q=0|f[a>>2],m?(r=0|f[q>>2],s=r>>>11,t=496&s,u=t>>4,z=u):(v=q+12|0,w=0|f[v>>2],z=w),x=n,jw(y,z,1,x),B=n,kw(10,B),o=J}function Tf(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,l=0;l=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),d=l,c=b,e=c,g=0|f[e>>2],h=255&g,i=d+4|0,f[i>>2]=h,j=c,f[d>>2]=j,f[a>>2]=0|f[d>>2],f[a+4>>2]=0|f[d+4>>2],o=l}function Uf(a){a|=0;var b=0,c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,r=0;r=o,o=o+48|0,(0|o)>=(0|p)&&ca(48),c=r+32|0,b=r+24|0,g=r+8|0,h=r,d=a,i=d,j=d,k=j+32|0,l=0|f[k>>2],Tf(h,l),m=d,n=0|ji(m,69483,17),f[b>>2]=0|f[h>>2],f[b+4>>2]=0|f[h+4>>2],Dj(g,i,b,n),e=0|f[762],f[c>>2]=0|f[g>>2],f[c+4>>2]=0|f[g+4>>2],Sf(c,e),o=r}function Vf(a){a|=0;var b=0,c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,r=0;r=o,o=o+48|0,(0|o)>=(0|p)&&ca(48),c=r+32|0,b=r+24|0,g=r+8|0,h=r,d=a,i=d,j=d,k=j+32|0,l=0|f[k>>2],Tf(h,l),m=d,n=0|ji(m,69550,15),f[b>>2]=0|f[h>>2],f[b+4>>2]=0|f[h+4>>2],Dj(g,i,b,n),e=0|f[762],f[c>>2]=0|f[g>>2],f[c+4>>2]=0|f[g+4>>2],Sf(c,e),o=r}function Wf(a,b){a|=0,b|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0;if(R=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),A=a,J=b,L=A,M=J,N=0|Fx[255&L](0,0,592,M),K=N,O=K,0==(0|O))return n=0,I=n,o=R,0|I;d=K,$w(0|d,72748,592),e=J,g=K,h=g+8|0,f[h>>2]=e,i=A,j=K,k=j+4|0,f[k>>2]=i,l=K,m=l+588|0,f[m>>2]=0,q=K,r=K,s=r+92|0,Mc(q,s),t=K,u=0|Jc(t,52),v=K,w=v+12|0,f[w>>2]=u,x=K,y=x+12|0,z=0|f[y>>2],P=z,S=73340,T=P+52|0;do{f[P>>2]=0|f[S>>2],P=P+4|0,S=S+4|0}while((0|P)<(0|T));return B=K,C=B+12|0,D=0|f[C>>2],E=K,F=E+16|0,f[F>>2]=D,G=K,_r(G),H=K,n=H,I=n,o=R,0|I}function Xf(a,b,c,d){a|=0,b|=0,c|=0,d|=0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,q=0,s=0;return s=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),a,l=b,m=c,d,q=m,e=0==(0|q),f=l,e?(Hw(f),j=0):(g=m,h=0|Iw(f,g),j=h),i=j,o=s,0|i}function Yf(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,w=0;return w=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),l=a,m=b,q=l,r=m,s=4+r|0,t=0|Jc(q,s),n=t,u=l,c=u+88|0,d=0|f[c>>2],e=n,f[e>>2]=d,g=n,h=l,i=h+88|0,f[i>>2]=g,j=n,k=j+4|0,o=w,0|k}function Zf(){var a=0,b=0,c=0,e=0;return e=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),b=0|$f(82,0,0),a=b,c=a,o=e,0|c}function $f(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,w=0;return w=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),n=a,q=b,r=c,t=n,u=q,d=0|Wf(t,u),s=d,e=s,0==(0|e)?(m=0,l=m,o=w,0|l):(g=r,h=g<<24>>24!=0,h||(i=s,hb(i),j=s,Xc(j,0)),k=s,m=k,l=m,o=w,0|l)}function _f(a,b){a|=0,b|=0;var d=0,e=0,g=0,h=0,i=0,k=0;k=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),d=b,e=d,g=e+56|0,h=0|f[g>>2],i=h+1|0,f[g>>2]=i,o=k}function ag(a,b){a|=0,b|=0;var c=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,s=0;if(s=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),h=a,i=b,j=i,k=j+56|0,l=0|f[k>>2],m=l+-1|0,f[k>>2]=m,n=i,q=n+56|0,c=0|f[q>>2],!(0==(0|c)))return void(o=s);e=h,g=i,bg(e,g),o=s}function bg(a,b){a|=0,b|=0;var c=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ka=0;for(Ka=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),q=a,B=b,X=B,ha=X+4|0,sa=0|d[ha>>0],Da=255&sa,Ia=1&Da,c=0!=(0|Ia),c||(e=q,g=B,h=g+8|0,i=0|f[h>>2],xc(e,i)),M=0;;){if(j=M,k=B,l=k+44|0,m=0|f[l>>2],!(j>>>0<m>>>0))break;r=B,s=r+12|0,t=0|f[s>>2],u=M,v=t+(u<<3)|0,w=v+4|0,x=0|f[w>>2],y=16==(0|x),y&&(z=q,A=B,C=A+12|0,D=0|f[C>>2],E=M,F=D+(E<<3)|0,G=0|f[F>>2],rg(z,G),H=q,I=B,J=I+12|0,K=0|f[J>>2],L=M,N=K+(L<<3)|0,O=0|f[N>>2],xc(H,O)),P=M,Q=P+1|0,M=Q}for(R=q,S=B,T=S+12|0,U=0|f[T>>2],xc(R,U),V=q,W=B,Y=W+16|0,Z=0|f[Y>>2],xc(V,Z),M=0;;){if($=M,_=B,aa=_+52|0,ba=0|f[aa>>2],da=$>>>0<ba>>>0,ea=q,fa=B,ga=fa+20|0,ia=0|f[ga>>2],!da)break;ja=M,ka=ia+(ja<<2)|0,la=0|f[ka>>2],ag(ea,la),ma=M,na=ma+1|0,M=na}xc(ea,ia),oa=q,pa=B,qa=pa+24|0,ra=0|f[qa>>2],xc(oa,ra),ta=q,ua=B,va=ua+28|0,wa=0|f[va>>2],xc(ta,wa),xa=q,ya=B,za=ya+32|0,Aa=0|f[za>>2],xc(xa,Aa),Ba=q,Ca=B,Ea=Ca+36|0,Fa=0|f[Ea>>2],ur(Ba,Fa),Ga=q,Ha=B,xc(Ga,Ha),o=Ka}function cg(a,b,c){a|=0,b|=0,c|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,$a=0,_a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Gb=0;if(Gb=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),ia=b,ub=0|f[c>>2],ta=ub,g=ia,t=0|Jc(g,24),Ea=t,E=Ea,P=0|f[E>>2],T=-256&P,U=16|T,f[E>>2]=U,V=ia,W=V+48|0,X=0|f[W>>2],Y=Ea,Z=Y+4|0,f[Z>>2]=X,$=ta,_=0|f[$>>2],aa=_>>>11,ba=2&aa,da=0!=(0|ba),ea=Ea,fa=0|f[ea>>2],ga=2047&fa,da)return ha=4096|ga,f[ea>>2]=ha,ja=ta,ka=ja+12|0,la=ka+8|0,ma=0|f[la>>2],na=Ea,oa=na+12|0,pa=oa+8|0,f[pa>>2]=ma,qa=ta,ra=qa+12|0,sa=0|f[ra>>2],ua=Ea,va=ua+12|0,f[va>>2]=sa,wa=Ea,xa=wa+12|0,ya=xa+4|0,f[ya>>2]=0,S=Ea,dg(a,S),void(o=Gb);f[ea>>2]=ga,za=ta,Aa=0|f[za>>2],Ba=Aa>>>11,Ca=8&Ba,Da=0!=(0|Ca),Fa=ta,Ga=Fa+12|0,Da?(Pa=Ga,Ha=ta,Ia=0|f[Ha>>2],Ja=Ia>>>11,Ka=496&Ja,La=Ka>>4,$a=La):(Ma=Ga+8|0,Na=0|f[Ma>>2],Pa=Na,Oa=ta,Qa=Oa+12|0,Ra=0|f[Qa>>2],$a=Ra),Sa=$a,Ta=(0|Sa)<11,Ta?(Ua=Ea,Va=0|f[Ua>>2],Wa=Va>>>11,Xa=8|Wa,Ya=0|f[Ua>>2],Za=2097151&Xa,_a=Za<<11,ab=2047&Ya,bb=ab|_a,f[Ua>>2]=bb,cb=$a,jb=cb,db=Ea,eb=0|f[db>>2],fb=eb>>>11,gb=-497&fb,hb=0|f[db>>2],ib=2097151&gb,kb=ib<<11,lb=2047&hb,mb=lb|kb,f[db>>2]=mb,nb=jb,ob=nb<<4,pb=Ea,qb=0|f[pb>>2],rb=qb>>>11,sb=rb|ob,tb=0|f[pb>>2],vb=2097151&sb,wb=vb<<11,xb=2047&tb,yb=xb|wb,f[pb>>2]=yb,zb=Pa,Ab=0!=(0|zb),Ab&&(Bb=Ea,Cb=Bb+12|0,Db=Pa,Eb=$a,$w(0|Cb,0|Db,0|Eb)),h=Ea,i=h+12|0,j=$a,k=i+j|0,e=k):(l=ia,m=$a,n=m+1|0,q=0|Jc(l,n),r=Ea,s=r+12|0,u=s+8|0,f[u>>2]=q,v=$a,w=Ea,x=w+12|0,f[x>>2]=v,y=$a,z=Ea,A=z+12|0,B=A+4|0,f[B>>2]=y,C=Pa,D=0!=(0|C),D&&(F=Ea,G=F+12|0,H=G+8|0,I=0|f[H>>2],J=Pa,K=$a,$w(0|I,0|J,0|K)),L=Ea,M=L+12|0,N=M+8|0,O=0|f[N>>2],Q=$a,R=O+Q|0,e=R),d[e>>0]=0,S=Ea,dg(a,S),o=Gb}function dg(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,l=0;l=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),d=l,c=b,e=c,g=0|f[e>>2],h=255&g,i=d+4|0,f[i>>2]=h,j=c,f[d>>2]=j,f[a>>2]=0|f[d>>2],f[a+4>>2]=0|f[d+4>>2],o=l}function eg(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,x=0,y=0,z=0,A=0,C=0;if(C=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),n=a,u=b,v=u,!(0!=(0|v)))return void(o=C);x=n,y=u,z=y+8|0,A=0|f[z>>2],xc(x,A),c=n,d=u,e=d+20|0,g=0|f[e>>2],xc(c,g),h=n,i=u,j=i+28|0,k=0|f[j>>2],xc(h,k),l=n,m=u,q=m+36|0,r=0|f[q>>2],xc(l,r),s=n,t=u,xc(s,t),o=C}function fg(a){a|=0;var b=0,c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,L=0,M=0,N=0,P=0,R=0;if(R=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),b=a,A=b,!(0!=(0|A)))return void(o=R);if(L=b,M=L+588|0,N=0|f[M>>2],(0|N)>0){for(P=b,c=P+588|0,d=0|f[c>>2],n=d;;){if(e=n,g=(0|e)>0,h=b,!g)break;i=h+584|0,j=0|f[i>>2],k=n,l=k-1|0,m=j+(l<<2)|0,q=0|f[m>>2],r=b,Bx[511&q](r),s=n,t=s+-1|0,n=t}u=b,v=u+584|0,w=0|f[v>>2],xc(h,w)}x=b,Li(x),y=b,z=b,B=z+16|0,C=0|f[B>>2],eg(y,C),D=b,si(D),E=b,gg(E),F=b,G=b,H=G+92|0,Qc(F,H),I=b,J=b,xc(I,J),o=R}function gg(a){a|=0;var b=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,n=0,q=0,r=0,s=0,u=0;if(u=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),b=a,l=b,0==(0|l))return void(o=u);for(n=b,q=n+88|0,r=0|f[q>>2],j=r;;){if(s=j,!(0!=(0|s)))break;d=j,k=d,e=j,g=0|f[e>>2],j=g,h=b,i=k,xc(h,i)}o=u}function hg(a){a|=0;var b=0,c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,q=0;m=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),b=a,d=b,e=0|Jc(d,60),c=e,g=c,k=g,n=73392,q=k+60|0;do{f[k>>2]=0|f[n>>2],k=k+4|0,n=n+4|0}while((0|k)<(0|q));return h=c,i=h+56|0,f[i>>2]=1,j=c,o=m,0|j}function ig(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,z=0,A=0,B=0,D=0;if(D=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),n=b,v=n,w=v+28|0,x=0|f[w>>2],0!=(0|x))return s=n,t=s+28|0,u=0|f[t>>2],dg(a,u),void(o=D);z=n,A=n,B=A+32|0,c=0|f[B>>2],d=0|Tc(z,8,c),e=n,g=e+28|0,f[g>>2]=d,h=n,i=n,j=i+28|0,k=0|f[j>>2],Wp(h,k,69281,83,0),l=n,m=n,q=m+28|0,r=0|f[q>>2],Wp(l,r,69276,83,0),s=n,t=s+28|0,u=0|f[t>>2],dg(a,u),o=D}function jg(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0;g=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),d=b,e=d,qg(a,e,55640,4),o=g}function kg(a,b,c){a|=0,b|=0,c|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,V=0;return V=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),B=b,M=c,Q=B,R=B,S=R+48|0,T=0|f[S>>2],e=0|Tc(Q,16,T),P=e,g=M,h=g>>>0>=2147483647,h&&(i=B,j=B,k=0|sp(j,69160),Ar(i,k,55682)),l=M,m=l>>>0<20,m&&(M=20),n=P,q=n+12|0,f[q>>2]=0,r=M,s=P,t=s+12|0,u=t+4|0,f[u>>2]=r,v=B,w=M,x=w+1|0,y=0|Jc(v,x),z=P,A=z+12|0,C=A+8|0,f[C>>2]=y,D=P,E=0|f[D>>2],F=E>>>11,G=8&F,H=0!=(0|G),I=P,J=I+12|0,H?(N=J,d[N>>0]=0,O=P,lg(a,O),void(o=V)):(K=J+8|0,L=0|f[K>>2],N=L,d[N>>0]=0,O=P,lg(a,O),void(o=V))}function lg(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,l=0;l=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),d=l,c=b,e=c,g=0|f[e>>2],h=255&g,i=d+4|0,f[i>>2]=h,j=c,f[d>>2]=j,f[a>>2]=0|f[d>>2],f[a+4>>2]=0|f[d+4>>2],o=l}function mg(a,b,c,d){a|=0,b|=0,c|=0,d|=0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0;m=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),f=b,g=c,h=d,i=f,j=g,k=h,e=0|ng(i,j,k),lg(a,e),o=m}function ng(a,b,c){a|=0,b|=0,c|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Ta=0;return Ta=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),M=a,X=b,ha=c,Oa=M,e=M,g=e+48|0,h=0|f[g>>2],i=0|Tc(Oa,16,h),sa=i,j=ha,k=j>>>0<11,k?(l=sa,m=0|f[l>>2],n=m>>>11,q=8|n,r=0|f[l>>2],s=2097151&q,t=s<<11,u=2047&r,v=u|t,f[l>>2]=v,w=ha,Da=w,x=sa,y=0|f[x>>2],z=y>>>11,A=-497&z,C=0|f[x>>2],D=2097151&A,E=D<<11,F=2047&C,G=F|E,f[x>>2]=G,H=Da,I=H<<4,J=sa,K=0|f[J>>2],L=K>>>11,N=L|I,O=0|f[J>>2],P=2097151&N,Q=P<<11,R=2047&O,S=R|Q,f[J>>2]=S,T=X,0!=(0|T)&&(V=sa,W=V+12|0,Y=X,Z=ha,$w(0|W,0|Y,0|Z))):($=ha,_=$>>>0>=2147483647,_&&(aa=M,ba=M,da=0|sp(ba,69160),Ar(aa,da,55711)),ea=ha,fa=sa,ga=fa+12|0,f[ga>>2]=ea,ia=ha,ja=sa,ka=ja+12|0,la=ka+4|0,f[la>>2]=ia,ma=M,na=ha,oa=na+1|0,pa=0|Jc(ma,oa),qa=sa,ra=qa+12|0,ta=ra+8|0,f[ta>>2]=pa,ua=X,0!=(0|ua)&&(wa=sa,xa=wa+12|0,ya=xa+8|0,za=0|f[ya>>2],Aa=X,Ba=ha,$w(0|za,0|Aa,0|Ba))),Ca=sa,Ea=0|f[Ca>>2],Fa=Ea>>>11,Ga=8&Fa,Ha=0!=(0|Ga),Ia=sa,Ja=Ia+12|0,Ha?(Pa=Ja,Ma=ha,Na=Pa+Ma|0,d[Na>>0]=0,Qa=sa,B=Qa,Ra=B,o=Ta,0|Ra):(Ka=Ja+8|0,La=0|f[Ka>>2],Pa=La,Ma=ha,Na=Pa+Ma|0,d[Na>>0]=0,Qa=sa,B=Qa,Ra=B,o=Ta,0|Ra)}function og(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,I=0;return I=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),A=a,B=b,C=c,E=C,F=E>>>0>=2147483647,G=A,d=A,F?(e=0|sp(d,69160),Ar(G,e,55711),0):(g=d+48|0,h=0|f[g>>2],i=0|Tc(G,16,h),D=i,j=C,k=D,l=k+12|0,f[l>>2]=j,m=D,n=m+12|0,q=n+4|0,f[q>>2]=0,r=B,s=D,t=s+12|0,u=t+8|0,f[u>>2]=r,v=D,w=0|f[v>>2],x=2047&w,y=4096|x,f[v>>2]=y,z=D,o=I,0|z)}function pg(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,t=0;t=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),j=b,k=c,n=k,q=0!=(0|n),q?(r=k,d=0|$v(r),m=d):m=0,e=j,f=k,g=m,h=0|ng(e,f,g),l=h,i=l,lg(a,i),o=t}function qg(a,b,c,d){a|=0,b|=0,c|=0,d|=0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,q=0;q=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),h=b,i=c,j=d,l=h,m=i,e=j,f=0|og(l,m,e),k=f,g=k,lg(a,g),o=q}function rg(a,b){a|=0,b|=0;var c=0,d=0,e=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,F=0,H=0;return H=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),n=a,z=b,A=z,B=0|f[A>>2],C=B>>>11,D=8&C,0!=(0|D)?void(o=H):(F=z,c=0|f[F>>2],d=c>>>11,e=1&d,0!=(0|e)?(h=n,i=z,j=i+12|0,k=j+4|0,l=0|f[k>>2],sg(h,l),void(o=H)):(m=z,q=0|f[m>>2],r=q>>>11,s=2&r,0!=(0|s)?void(o=H):(u=n,v=z,w=v+12|0,x=w+8|0,y=0|f[x>>2],xc(u,y),void(o=H))))}function sg(a,b){a|=0,b|=0;var c=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,B=0;if(B=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),q=a,t=b,u=t,v=u+4|0,w=0|f[v>>2],x=w+-1|0,f[v>>2]=x,y=t,z=y+4|0,c=0|f[z>>2],!(0==(0|c)))return void(o=B);g=t,h=0|d[g>>0],i=1&h,j=i<<24>>24!=0,j||(k=q,l=t,m=l+8|0,n=0|f[m>>2],xc(k,n)),r=q,s=t,xc(r,s),o=B}function tg(a,b){a|=0,b|=0;var c=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,F=0,G=0,I=0,J=0,K=0,L=0,M=0,N=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0;if(aa=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),B=a,M=b,Z=M,$=0|f[Z>>2],c=$>>>11,e=8&c,g=0!=(0|e),h=M,g?(i=0|f[h>>2],j=i>>>11,k=496&j,l=k>>4,r=l):(m=h+12|0,n=0|f[m>>2],r=n),X=r,s=M,t=0|f[s>>2],u=t>>>11,v=8&u,w=0!=(0|v),x=M,y=x+12|0,w?C=y:(z=y+8|0,A=0|f[z>>2],C=A),Y=C,D=Y,!(0!=(0|D)))return q=0,V=q,o=aa,0|V;for(W=0;;){if(F=W,G=X,!((0|F)<(0|G)))break;if(I=Y,J=W,K=I+J|0,L=0|d[K>>0],N=L<<24>>24,0==(0|N)){_=12;break}S=W,T=S+1|0,W=T}return 12==(0|_)&&(P=B,Q=B,R=0|sp(Q,69160),Ar(P,R,55731)),U=X,q=U,V=q,o=aa,0|V}function ug(a,b){a|=0,b|=0;var c=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,$a=0,_a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,$b=0,_b=0,ac=0,bc=0,dc=0,ec=0;if(ec=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),xa=a,Ia=b,Ub=xa,g=Ia,vg(Ub,g),t=Ia,E=0|f[t>>2],P=E>>>11,$=1&P,ka=0!=(0|$),ta=Ia,ka)ua=ta+12|0,va=ua+4|0,wa=0|f[va>>2],Ta=wa,ya=Ta,za=ya+4|0,Aa=0|f[za>>2],Ba=1==(0|Aa),Ba?(Ca=Ia,Da=Ca+12|0,Ea=Da+8|0,Fa=0|f[Ea>>2],Ga=Ta,Ha=Ga+8|0,Ja=0|f[Ha>>2],Ka=(0|Fa)==(0|Ja),Ka?(La=Ta,Ma=La+8|0,Na=0|f[Ma>>2],Oa=Ia,Pa=Oa+12|0,Qa=Pa+8|0,f[Qa>>2]=Na,Ra=Ta,Sa=Ra+12|0,Ua=0|f[Sa>>2],Va=Ia,Wa=Va+12|0,Xa=Wa+4|0,f[Xa>>2]=Ua,Ya=Ia,Za=0|f[Ya>>2],$a=Za>>>11,_a=8&$a,ab=0!=(0|_a),bb=Ia,db=bb+12|0,ab?kb=db:(eb=db+8|0,fb=0|f[eb>>2],kb=fb),gb=Ia,hb=gb+12|0,ib=0|f[hb>>2],jb=kb+ib|0,d[jb>>0]=0,lb=xa,mb=Ta,xc(lb,mb)):dc=8):dc=8,8==(0|dc)&&(ob=Ia,pb=0|f[ob>>2],qb=pb>>>11,rb=8&qb,sb=0!=(0|rb),tb=Ia,ub=tb+12|0,sb?xb=ub:(vb=ub+8|0,wb=0|f[vb>>2],xb=wb),nb=xb,zb=Ia,Ab=zb+12|0,Bb=0|f[Ab>>2],yb=Bb,Cb=xa,Db=yb,Eb=Db+1|0,Fb=0|Jc(Cb,Eb),cb=Fb,Gb=nb,Hb=0!=(0|Gb),Hb&&(Ib=cb,Kb=nb,Lb=yb,$w(0|Ib,0|Kb,0|Lb)),Mb=cb,Nb=yb,Ob=Mb+Nb|0,d[Ob>>0]=0,Pb=cb,Qb=Ia,Rb=Qb+12|0,Sb=Rb+8|0,f[Sb>>2]=Pb,Tb=yb,Vb=Ia,Wb=Vb+12|0,Xb=Wb+4|0,f[Xb>>2]=Tb,Yb=xa,Zb=Ta,sg(Yb,Zb)),$b=Ia,c=-2,e=$b;else{if(_b=0|f[ta>>2],ac=_b>>>11,bc=2&ac,!(0!=(0|bc)))return void(o=ec);h=Ia,i=h+12|0,j=i+8|0,k=0|f[j>>2],Jb=k,l=xa,m=Ia,n=m+12|0,q=0|f[n>>2],r=q+1|0,s=0|Jc(l,r),u=Ia,v=u+12|0,w=v+8|0,f[w>>2]=s,x=Jb,y=0!=(0|x),y&&(z=Ia,A=0|f[z>>2],B=A>>>11,C=8&B,D=0!=(0|C),F=Ia,G=F+12|0,D?N=G:(H=G+8|0,I=0|f[H>>2],N=I),J=Jb,K=Ia,L=K+12|0,M=0|f[L>>2],$w(0|N,0|J,0|M)),O=Ia,Q=0|f[O>>2],R=Q>>>11,S=8&R,T=0!=(0|S),U=Ia,V=U+12|0,T?ba=V:(W=V+8|0,X=0|f[W>>2],ba=X),Y=Ia,Z=Y+12|0,_=0|f[Z>>2],aa=ba+_|0,d[aa>>0]=0,da=Ia,ea=da+12|0,fa=0|f[ea>>2],ga=Ia,ha=ga+12|0,ia=ha+4|0,f[ia>>2]=fa,ja=Ia,c=-3,e=ja}la=0|f[e>>2],ma=la>>>11,na=ma&c,oa=0|f[e>>2],pa=2097151&na,qa=pa<<11,ra=2047&oa,sa=ra|qa,f[e>>2]=sa,o=ec}function vg(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,m=0,q=0;if(q=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),e=a,g=b,h=g,i=0|f[h>>2],j=i>>>11,k=4&j,!(0!=(0|k)))return void(o=q);m=e,c=e,d=0|sp(c,68266),Ar(m,d,55757)}function wg(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ua=0;ua=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),C=a,N=b,Y=c,ra=N,sa=0|f[ra>>2],g=sa>>>11,h=8&g,i=0!=(0|h);do{if(i){if(j=Y,11<(0|j)){l=C,m=Y,n=m+1|0,q=0|Jc(l,n),ia=q,r=N,s=0|f[r>>2],t=s>>>11,u=496&t,v=u>>4,qa=v,w=ia,x=N,y=x+12|0,z=qa,$w(0|w,0|y,0|z),A=N,B=0|f[A>>2],D=B>>>11,E=-505&D,F=0|f[A>>2],G=2097151&E,H=G<<11,I=2047&F,J=I|H,f[A>>2]=J,K=ia,L=N,M=L+12|0,O=M+8|0,f[O>>2]=K,P=qa,Q=N,R=Q+12|0,f[R>>2]=P,S=Y,T=N,d=S,e=T;break}return void(o=ua)}U=C,V=N,W=0|f[V>>2],X=W>>>11,Z=8&X,$=0!=(0|Z),_=N,aa=_+12|0,$?ga=aa:(ba=aa+8|0,da=0|f[ba>>2],ga=da),ea=Y,fa=ea+1|0,ha=0|Hc(U,ga,fa),ja=N,ka=ja+12|0,la=ka+8|0,f[la>>2]=ha,ma=Y,na=N,d=ma,e=na}while(0);oa=e+12|0,pa=oa+4|0,f[pa>>2]=d,o=ua}function xg(a,b,c){a|=0,b|=0,c|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,$a=0,_a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Tb=0;return Tb=o,o=o+48|0,(0|o)>=(0|p)&&ca(48),e=Tb+32|0,lb=Tb+8|0,va=a,Hb=0|f[b>>2],Ga=Hb,g=va,t=Ga,ug(g,t),E=c+4|0,P=0|f[E>>2],$=16==(0|P),$||(ga=va,f[e>>2]=0|f[c>>2],f[e+4>>2]=0|f[c+4>>2],yg(lb,ga,e),f[c>>2]=0|f[lb>>2],f[c+4>>2]=0|f[lb+4>>2]),ha=0|f[c>>2],Ra=ha,ia=Ga,ja=0|f[ia>>2],ka=ja>>>11,la=8&ka,ma=0!=(0|la),na=Ga,ma?(oa=0|f[na>>2],pa=oa>>>11,qa=496&pa,ra=qa>>4,Ka=ra):(sa=na+12|0,ta=0|f[sa>>2],Ka=ta),ua=Ra,wa=0|f[ua>>2],xa=wa>>>11,ya=8&xa,za=0!=(0|ya),Aa=Ra,za?(Ba=0|f[Aa>>2],Ca=Ba>>>11,Da=496&Ca,Ea=Da>>4,Ja=Ea):(Fa=Aa+12|0,Ha=0|f[Fa>>2],Ja=Ha),Ia=Ka+Ja|0,ab=Ia,La=0|f[b>>2],Ma=0|f[La>>2],Na=Ma>>>11,Oa=8&Na,Pa=0!=(0|Oa),Pa?Xa=11:(Qa=0|f[b>>2],Sa=Qa+12|0,Ta=Sa+4|0,Ua=0|f[Ta>>2],Xa=Ua),Va=ab,Wa=(0|Xa)<(0|Va),Wa&&(Ya=va,Za=Ga,$a=ab,wg(Ya,Za,$a)),_a=Ga,bb=0|f[_a>>2],cb=bb>>>11,db=8&cb,eb=0!=(0|db),fb=Ga,gb=fb+12|0,eb?yb=gb:(hb=gb+8|0,ib=0|f[hb>>2],yb=ib),jb=Ga,kb=0|f[jb>>2],mb=kb>>>11,nb=8&mb,ob=0!=(0|nb),pb=Ga,ob?(qb=0|f[pb>>2],rb=qb>>>11,sb=496&rb,tb=sb>>4,zb=tb):(ub=pb+12|0,vb=0|f[ub>>2],zb=vb),xb=yb+zb|0,Ab=Ra,Bb=0|f[Ab>>2],Cb=Bb>>>11,Db=8&Cb,Eb=0!=(0|Db),Fb=Ra,Gb=Fb+12|0,Eb?l=Gb:(Ib=Gb+8|0,Jb=0|f[Ib>>2],l=Jb),Kb=Ra,Lb=0|f[Kb>>2],Mb=Lb>>>11,Nb=8&Mb,Ob=0!=(0|Nb),Pb=Ra,Ob?(Qb=0|f[Pb>>2],Rb=Qb>>>11,h=496&Rb,i=h>>4,m=i):(j=Pb+12|0,k=0|f[j>>2],m=k),$w(0|xb,0|l,0|m),n=Ga,q=0|f[n>>2],r=q>>>11,s=8&r,u=0!=(0|s),v=ab,u?(wb=v,w=Ga,x=0|f[w>>2],y=x>>>11,z=-497&y,A=0|f[w>>2],B=2097151&z,C=B<<11,D=2047&A,F=D|C,f[w>>2]=F,G=wb,H=G<<4,I=Ga,J=0|f[I>>2],K=J>>>11,L=K|H,M=0|f[I>>2],N=2097151&L,O=N<<11,Q=2047&M,R=Q|O,f[I>>2]=R):(S=Ga,T=S+12|0,f[T>>2]=v),U=Ga,V=0|f[U>>2],W=V>>>11,X=8&W,Y=0!=(0|X),Z=Ga,_=Z+12|0,Y?(fa=_,da=ab,ea=fa+da|0,d[ea>>0]=0,void(o=Tb)):(aa=_+8|0,ba=0|f[aa>>2],fa=ba,da=ab,ea=fa+da|0,d[ea>>0]=0,void(o=Tb))}function yg(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,x=0;if(x=o,o=o+48|0,(0|o)>=(0|p)&&ca(48),e=x+40|0,d=x+32|0,q=x+16|0,r=x+8|0,s=x,n=b,t=c+4|0,u=0|f[t>>2],16==(0|u))return f[a>>2]=0|f[c>>2],f[a+4>>2]=0|f[c+4>>2],void(o=x);g=n,f[d>>2]=0|f[c>>2],f[d+4>>2]=0|f[c+4>>2],Gf(r,g,d,16,65324,65331),f[q>>2]=0|f[r>>2],f[q+4>>2]=0|f[r+4>>2],h=q+4|0,i=0|f[h>>2],j=0==(0|i),j&&(k=0|f[q>>2],0!=(0|k)||(m=n,f[e>>2]=0|f[c>>2],f[e+4>>2]=0|f[c+4>>2],Ff(s,m,e,16,65324,69276),f[q>>2]=0|f[s>>2],f[q+4>>2]=0|f[s+4>>2])),f[a>>2]=0|f[q>>2],f[a+4>>2]=0|f[q+4>>2],o=x}function zg(a,b,c,d){a|=0,b|=0,c|=0,d|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,$a=0,_a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,rb=0;return rb=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),ea=b,Wa=0|f[c>>2],pa=Wa,fb=0|f[d>>2],Aa=fb,e=ea,s=pa,D=0|f[s>>2],E=D>>>11,F=8&E,G=0!=(0|F),H=pa,G?(I=0|f[H>>2],J=I>>>11,K=496&J,L=K>>4,aa=L):(M=H+12|0,N=0|f[M>>2],aa=N),O=Aa,P=0|f[O>>2],Q=P>>>11,R=8&Q,S=0!=(0|R),T=Aa,S?(U=0|f[T>>2],V=U>>>11,W=496&V,X=W>>4,_=X):(Y=T+12|0,Z=0|f[Y>>2],_=Z),$=aa+_|0,ba=0|ng(e,0,$),La=ba,da=La,fa=0|f[da>>2],ga=fa>>>11,ha=8&ga,ia=0!=(0|ha),ja=La,ka=ja+12|0,ia?Ka=ka:(la=ka+8|0,ma=0|f[la>>2],Ka=ma),na=pa,oa=0|f[na>>2],qa=oa>>>11,ra=8&qa,sa=0!=(0|ra),ta=pa,ua=ta+12|0,sa?Ma=ua:(va=ua+8|0,wa=0|f[va>>2],Ma=wa),xa=pa,ya=0|f[xa>>2],za=ya>>>11,Ba=8&za,Ca=0!=(0|Ba),Da=pa,Ca?(Ea=0|f[Da>>2],Fa=Ea>>>11,Ga=496&Fa,Ha=Ga>>4,Na=Ha):(Ia=Da+12|0,Ja=0|f[Ia>>2],Na=Ja),$w(0|Ka,0|Ma,0|Na),Oa=La,Pa=0|f[Oa>>2],Qa=Pa>>>11,Ra=8&Qa,Sa=0!=(0|Ra),Ta=La,Ua=Ta+12|0,Sa?kb=Ua:(Va=Ua+8|0,Xa=0|f[Va>>2],kb=Xa),Ya=pa,Za=0|f[Ya>>2],$a=Za>>>11,_a=8&$a,ab=0!=(0|_a),bb=pa,ab?(cb=0|f[bb>>2],db=cb>>>11,eb=496&db,gb=eb>>4,lb=gb):(hb=bb+12|0,ib=0|f[hb>>2],lb=ib),jb=kb+lb|0,mb=Aa,nb=0|f[mb>>2],ob=nb>>>11,pb=8&ob,g=0!=(0|pb),h=Aa,i=h+12|0,g?A=i:(j=i+8|0,k=0|f[j>>2],A=k),l=Aa,m=0|f[l>>2],n=m>>>11,q=8&n,r=0!=(0|q),t=Aa,r?(u=0|f[t>>2],v=u>>>11,w=496&v,x=w>>4,B=x,$w(0|jb,0|A,0|B),C=La,lg(a,C),void(o=rb)):(y=t+12|0,z=0|f[y>>2],B=z,$w(0|jb,0|A,0|B),C=La,lg(a,C),void(o=rb))}function Ag(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,$a=0,_a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Pb=0;Pb=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),Db=0|f[b>>2],hb=Db,d=0|f[c>>2],sb=d,r=hb,C=0|f[r>>2],N=C>>>11,Y=8&N,ba=0!=(0|Y),da=hb,ba?(ea=0|f[da>>2],fa=ea>>>11,ga=496&fa,ha=ga>>4,ya=ha):(ia=da+12|0,ja=0|f[ia>>2],ya=ja),ka=sb,la=0|f[ka>>2],ma=la>>>11,na=8&ma,oa=0!=(0|na),pa=sb,oa?(qa=0|f[pa>>2],sa=qa>>>11,ta=496&sa,ua=ta>>4,za=ua):(va=pa+12|0,wa=0|f[va>>2],za=wa),xa=(0|ya)>(0|za);do{if(xa){if(Aa=sb,Ba=0|f[Aa>>2],Da=Ba>>>11,Ea=8&Da,Fa=0!=(0|Ea),Ga=sb,Fa){Ha=0|f[Ga>>2],Ia=Ha>>>11,Ja=496&Ia,Ka=Ja>>4,_a=Ka;break}La=Ga+12|0,Ma=0|f[La>>2],_a=Ma;break}if(Oa=hb,Pa=0|f[Oa>>2],Qa=Pa>>>11,Ra=8&Qa,Sa=0!=(0|Ra),Ta=hb,Sa){Ua=0|f[Ta>>2],Va=Ua>>>11,Wa=496&Va,Xa=Wa>>4,_a=Xa;break}Za=Ta+12|0,$a=0|f[Za>>2],_a=$a;break}while(0);return Na=_a,ab=hb,bb=0|f[ab>>2],cb=bb>>>11,db=8&cb,eb=0!=(0|db),fb=hb,gb=fb+12|0,eb?vb=gb:(ib=gb+8|0,jb=0|f[ib>>2],vb=jb),kb=sb,lb=0|f[kb>>2],mb=lb>>>11,nb=8&mb,ob=0!=(0|nb),pb=sb,qb=pb+12|0,ob?wb=qb:(rb=qb+8|0,tb=0|f[rb>>2],wb=tb),ub=Na,xb=0|hv(vb,wb,ub),Ya=xb,yb=Ya,0==(0|yb)?(Ab=hb,Bb=0|f[Ab>>2],Cb=Bb>>>11,Eb=8&Cb,Fb=0!=(0|Eb),Gb=hb,Fb?(Hb=0|f[Gb>>2],Ib=Hb>>>11,Jb=496&Ib,Kb=Jb>>4,u=Kb):(Lb=Gb+12|0,Mb=0|f[Lb>>2],u=Mb),Nb=sb,e=0|f[Nb>>2],g=e>>>11,h=8&g,i=0!=(0|h),j=sb,i?(k=0|f[j>>2],l=k>>>11,m=496&l,n=m>>4,v=n):(q=j+12|0,s=0|f[q>>2],v=s),(0|u)==(0|v)?(ra=0,aa=ra,o=Pb,0|aa):(w=hb,x=0|f[w>>2],y=x>>>11,z=8&y,A=0!=(0|z),B=hb,A?(D=0|f[B>>2],E=D>>>11,F=496&E,G=F>>4,X=G):(H=B+12|0,I=0|f[H>>2],X=I),J=sb,K=0|f[J>>2],L=K>>>11,M=8&L,O=0!=(0|M),P=sb,O?(Q=0|f[P>>2],R=Q>>>11,S=496&R,T=S>>4,Z=T):(U=P+12|0,V=0|f[U>>2],Z=V),W=(0|X)>(0|Z),W?(ra=1,aa=ra,o=Pb,0|aa):(ra=-1,aa=ra,o=Pb,0|aa))):($=Ya,_=(0|$)>0,_?(ra=1,aa=ra,o=Pb,0|aa):(ra=-1,aa=ra,o=Pb,0|aa))}function Bg(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,r=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,K=0,L=0,N=0;return N=o,o=o+80|0,(0|o)>=(0|p)&&ca(80),j=N+64|0,i=N+56|0,h=N+48|0,g=N+40|0,e=N+32|0,d=N+24|0,L=N,G=N+8|0,F=a,H=c+4|0,I=0|f[H>>2],I>>>0<8?(E=0,D=E,o=N,0|D):(K=c+4|0,k=0|f[K>>2],16==(0|k)?(B=F,f[i>>2]=0|f[b>>2],f[i+4>>2]=0|f[b+4>>2],f[j>>2]=0|f[c>>2],f[j+4>>2]=0|f[c+4>>2],C=0|Cg(B,i,j),E=C,D=E,o=N,0|D):(m=c+4|0,n=0|f[m>>2],!(0==(0|n))||(r=0|f[c>>2],0!=(0|r))?(t=F,u=F,v=0|ji(u,65331,6),f[d>>2]=0|f[c>>2],f[d+4>>2]=0|f[c+4>>2],w=0|cq(t,d,v),x=w<<24>>24!=0,x?(y=F,f[e>>2]=0|f[c>>2],f[e+4>>2]=0|f[c+4>>2],Xj(G,y,e,65331,0,L),f[c>>2]=0|f[G>>2],f[c+4>>2]=0|f[G+4>>2],z=F,f[g>>2]=0|f[c>>2],f[g+4>>2]=0|f[c+4>>2],f[h>>2]=0|f[b>>2],f[h+4>>2]=0|f[b+4>>2],A=0|lf(z,g,h),E=A,D=E,o=N,0|D):(E=0,D=E,o=N,0|D)):(E=0,D=E,o=N,0|D)))}function Cg(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ja=0;return ja=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),a,ea=0|f[b>>2],fa=0|f[ea>>2],ga=fa>>>11,ha=8&ga,d=0!=(0|ha),e=0|f[b>>2],d?(g=0|f[e>>2],h=g>>>11,i=496&h,j=i>>4,m=j):(k=e+12|0,l=0|f[k>>2],m=l),W=m,n=W,q=0|f[c>>2],r=0|f[q>>2],s=r>>>11,t=8&s,u=0!=(0|t),v=0|f[c>>2],u?(w=0|f[v>>2],x=w>>>11,y=496&x,z=y>>4,E=z):(B=v+12|0,C=0|f[B>>2],E=C),(0|n)!=(0|E)?(A=0,da=A,o=ja,0|da):(F=0|f[b>>2],G=0|f[F>>2],H=G>>>11,I=8&H,J=0!=(0|I),K=0|f[b>>2],M=K+12|0,J?$=M:(N=M+8|0,O=0|f[N>>2],$=O),P=0|f[c>>2],Q=0|f[P>>2],R=Q>>>11,S=8&R,T=0!=(0|S),U=0|f[c>>2],V=U+12|0,T?_=V:(X=V+8|0,Y=0|f[X>>2],_=Y),Z=W,aa=0|hv($,_,Z),ba=0==(0|aa),ba?(A=1,da=A,o=ja,0|da):(A=0,da=A,o=ja,0|da))}function Dg(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,u=0;return u=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),c=u+16|0,k=u,j=a,l=j,f[c>>2]=0|f[b>>2],f[c+4>>2]=0|f[b+4>>2],yg(k,l,c),m=0|f[k>>2],n=0|f[m>>2],q=n>>>11,r=8&q,s=0!=(0|r),d=0|f[k>>2],e=d+12|0,s?(i=e,o=u,0|i):(g=e+8|0,h=0|f[g>>2],i=h,o=u,0|i)}function Eg(a,b){a|=0,b|=0;var c=0,d=0,e=0,f=0;o=o+16|0,(0|o)>=(0|p)&&ca(16),c=a,d=c,e=c,f=0|sp(e,65108),Ar(d,f,55784)}function Fg(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,j=0,l=0;if(l=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),d=l+16|0,c=l+8|0,e=a,g=e,f[c>>2]=0|f[b>>2],f[c+4>>2]=0|f[b+4>>2],h=0|$r(g,c),!(h<<24>>24!=0))return void(o=l);j=e,f[d>>2]=0|f[b>>2],f[d+4>>2]=0|f[b+4>>2],Eg(j,d),o=l}function Gg(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,t=0;t=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),d=t+16|0,j=b,m=0|f[c>>2],k=m,n=j,q=0|ng(n,0,0),l=q,r=j,e=l,f[d>>2]=0|f[c>>2],f[d+4>>2]=0|f[c+4>>2],Hg(r,e,d),g=j,h=l,i=k,Ig(a,g,h,i),o=t}function Hg(a,b,c){a|=0,b|=0,c|=0;var e=0,g=0,h=0,i=0,j=0,k=0,m=0;m=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),e=b,g=0|f[c>>2],h=g+4|0,i=0|f[h>>2],j=e,k=j+4|0,f[k>>2]=i,o=m}function Ig(a,b,c,d){a|=0,b|=0,c|=0,d|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Za=0,$a=0,_a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,$b=0,_b=0,ac=0,bc=0,cc=0,dc=0,fc=0;fc=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),Ua=b,db=c,ob=d,Vb=Ua,e=db,vg(Vb,e),s=ob,D=0|f[s>>2],O=D>>>11,Z=8&O,ja=0!=(0|Z),ua=ob,ja?(xa=0|f[ua>>2],ya=xa>>>11,za=496&ya,Aa=za>>4,Da=Aa):(Ba=ua+12|0,Ca=0|f[Ba>>2],Da=Ca),zb=Da,Ea=db,Fa=0|f[Ea>>2],Ga=Fa>>>11,Ha=1&Ga,Ia=0!=(0|Ha),Ia?(Ja=Ua,Ka=db,La=Ka+12|0,Ma=La+4|0,Na=0|f[Ma>>2],sg(Ja,Na)):(Oa=db,Pa=0|f[Oa>>2],Qa=Pa>>>11,Ra=8&Qa,0!=(0|Ra)||(Ta=db,Va=0|f[Ta>>2],Wa=Va>>>11,Xa=2&Wa,0!=(0|Xa)||(Za=Ua,$a=db,_a=$a+12|0,ab=_a+8|0,bb=0|f[ab>>2],xc(Za,bb)))),cb=db,eb=0|f[cb>>2],fb=eb>>>11,gb=-3&fb,hb=0|f[cb>>2],ib=2097151&gb,jb=ib<<11,kb=2047&hb,lb=kb|jb,f[cb>>2]=lb,mb=ob,nb=0|f[mb>>2],pb=nb>>>11,qb=1&pb,rb=0!=(0|qb);do{if(!rb){if(l=zb,!((0|l)<=11)){ta=Ua,va=ob,Jg(ta,va);break}return n=db,q=0|f[n>>2],r=q>>>11,t=-2&r,u=0|f[n>>2],v=2097151&t,w=v<<11,x=2047&u,y=x|w,f[n>>2]=y,z=db,A=0|f[z>>2],B=A>>>11,C=8|B,E=0|f[z>>2],F=2097151&C,G=F<<11,H=2047&E,I=H|G,f[z>>2]=I,J=db,K=J+12|0,L=ob,M=0|f[L>>2],N=M>>>11,P=8&N,Q=0!=(0|P),R=ob,S=R+12|0,Q?W=S:(T=S+8|0,U=0|f[T>>2],W=U),V=zb,$w(0|K,0|W,0|V),X=zb,Kb=X,Y=db,$=0|f[Y>>2],_=$>>>11,aa=-497&_,ba=0|f[Y>>2],da=2097151&aa,ea=da<<11,fa=2047&ba,ga=fa|ea,f[Y>>2]=ga,ha=Kb,ia=ha<<4,ka=db,la=0|f[ka>>2],ma=la>>>11,na=ma|ia,oa=0|f[ka>>2],pa=2097151&na,qa=pa<<11,ra=2047&oa,sa=ra|qa,f[ka>>2]=sa,wa=db,lg(a,wa),void(o=fc)}}while(0);sb=db,tb=0|f[sb>>2],ub=tb>>>11,vb=-505&ub,wb=0|f[sb>>2],xb=2097151&vb,yb=xb<<11,Ab=2047&wb,Bb=Ab|yb,f[sb>>2]=Bb,Cb=ob,Db=Cb+12|0,Eb=Db+8|0,Fb=0|f[Eb>>2],Gb=db,Hb=Gb+12|0,Ib=Hb+8|0,f[Ib>>2]=Fb,Jb=zb,Lb=db,Mb=Lb+12|0,f[Mb>>2]=Jb,Nb=ob,Ob=Nb+12|0,Pb=Ob+4|0,Qb=0|f[Pb>>2],Rb=db,Sb=Rb+12|0,Tb=Sb+4|0,f[Tb>>2]=Qb,Ub=db,Wb=0|f[Ub>>2],Xb=Wb>>>11,Yb=1|Xb,Zb=0|f[Ub>>2],$b=2097151&Yb,_b=$b<<11,ac=2047&Zb,bc=ac|_b,f[Ub>>2]=bc,cc=db,dc=cc+12|0,g=dc+4|0,h=0|f[g>>2],i=h+4|0,j=0|f[i>>2],k=j+1|0,f[i>>2]=k,wa=db,lg(a,wa),o=fc}function Jg(a,b){a|=0,b|=0;var c=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,$a=0,_a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Cb=0;if(Cb=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),U=a,ea=b,Wa=ea,fb=0|f[Wa>>2],qb=fb>>>11,c=1&qb,0!=(0|c))return void(o=Cb);C=U,N=0|Jc(C,16),pa=N,O=pa,P=O+4|0,f[P>>2]=1,Q=ea,R=0|f[Q>>2],S=R>>>11,T=8&S,V=0!=(0|T),W=ea,X=0|f[W>>2],Y=X>>>11;do{if(!V){if(Oa=2&Y,Pa=0!=(0|Oa),Qa=pa,Ra=0|d[Qa>>0],Sa=-2&Ra,Pa){Ta=1|Sa,d[Qa>>0]=Ta,Ua=ea,Va=Ua+12|0,Xa=Va+8|0,Ya=0|f[Xa>>2],Za=pa,$a=Za+8|0,f[$a>>2]=Ya,_a=ea,ab=0|f[_a>>2],bb=ab>>>11,cb=-3&bb,db=0|f[_a>>2],eb=2097151&cb,gb=eb<<11,hb=2047&db,ib=hb|gb,f[_a>>2]=ib;break}if(d[Qa>>0]=Sa,jb=ea,kb=jb+12|0,lb=kb+4|0,mb=0|f[lb>>2],nb=ea,ob=nb+12|0,pb=0|f[ob>>2],(0|mb)>(0|pb)){sb=U,tb=ea,ub=tb+12|0,vb=ub+8|0,wb=0|f[vb>>2],xb=ea,yb=xb+12|0,zb=0|f[yb>>2],Ab=zb+1|0,e=0|Hc(sb,wb,Ab),g=pa,h=g+8|0,f[h>>2]=e,i=ea,j=i+12|0,k=j+8|0,f[k>>2]=e;break}l=ea,m=l+12|0,n=m+8|0,q=0|f[n>>2],s=pa,t=s+8|0,f[t>>2]=q;break}Z=496&Y,$=Z>>4,Aa=$,_=U,aa=Aa,ba=aa+1|0,da=0|Jc(_,ba),La=da,fa=La,ga=ea,ha=ga+12|0,ia=Aa,$w(0|fa,0|ha,0|ia),ja=La,ka=Aa,la=ja+ka|0,d[la>>0]=0,ma=ea,na=0|f[ma>>2],oa=na>>>11,qa=-505&oa,ra=0|f[ma>>2],sa=2097151&qa,ta=sa<<11,ua=2047&ra,va=ua|ta,f[ma>>2]=va,wa=La,xa=ea,ya=xa+12|0,za=ya+8|0,f[za>>2]=wa,Ba=Aa,Ca=ea,Da=Ca+12|0,f[Da>>2]=Ba,Ea=pa,Fa=0|d[Ea>>0],Ga=-2&Fa,d[Ea>>0]=Ga,Ha=ea,Ia=Ha+12|0,Ja=Ia+8|0,Ka=0|f[Ja>>2],Ma=pa,Na=Ma+8|0,f[Na>>2]=Ka}while(0);u=ea,v=u+12|0,w=0|f[v>>2],x=pa,y=x+12|0,f[y>>2]=w,z=pa,A=ea,B=A+12|0,D=B+4|0,f[D>>2]=z,E=ea,F=0|f[E>>2],G=F>>>11,H=1|G,I=0|f[E>>2],J=2097151&H,K=J<<11,L=2047&I,M=L|K,f[E>>2]=M,o=Cb}function Kg(a,b,c,d,e){a|=0,b|=0,c|=0,d|=0,e|=0;var g=0,h=0,i=0,k=0,l=0,m=0,q=0,r=0,s=0,t=0,u=0,w=0,y=0,z=0,A=0,B=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,W=0;return W=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),h=W+24|0,g=W+16|0,Q=b,R=d,S=e,f[g>>2]=0|f[c>>2],f[g+4>>2]=0|f[c+4>>2],U=0|Lg(g,-1),T=U,i=S,(0|i)<0?(Mg(a),void(o=W)):(k=T,l=0==(0|k),l?S=0:(m=R,(0|m)<0&&(q=T,r=R,s=q+r|0,R=s)),t=R,u=T,(0|t)>(0|u)?(Mg(a),void(o=W)):(w=R,(0|w)<0&&(y=T,z=R,A=z+y|0,R=A,B=R,(0|B)<0)?(Mg(a),void(o=W)):(D=R,E=S,F=D+E|0,G=T,H=(0|F)>(0|G),H&&(I=T,J=R,K=I-J|0,S=K),L=S,M=(0|L)<=0,M&&(S=0),N=Q,O=R,P=S,f[h>>2]=0|f[c>>2],f[h+4>>2]=0|f[c+4>>2],Ng(a,N,h,O,P),void(o=W))))}function Lg(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,Y=0;Y=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),n=b,A=0,T=0|f[a>>2],U=0|f[T>>2],V=U>>>11,W=8&V,c=0!=(0|W),d=0|f[a>>2],e=d+12|0,c?i=e:(g=e+8|0,h=0|f[g>>2],i=h),L=i,j=L,S=j,k=n,l=(0|k)<0;do{if(l){if(m=0|f[a>>2],q=0|f[m>>2],r=q>>>11,s=8&r,t=0!=(0|s),u=0|f[a>>2],t){v=0|f[u>>2],w=v>>>11,x=496&w,y=x>>4,F=y;break}z=u+12|0,B=0|f[z>>2],F=B;break}C=n,F=C}while(0);for(D=S,E=D+F|0,S=E;;){if(G=L,H=S,!(G>>>0<H>>>0))break;J=L,K=S,M=0|Qg(J,K),N=L,O=N+M|0,L=O,P=A,Q=P+1|0,A=Q}return R=A,o=Y,0|R}function Mg(a){a|=0;var b=0,c=0,e=0;e=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),b=e,c=b+4|0,f[c>>2]=0,f[b>>2]=0,f[a>>2]=0|f[b>>2],f[a+4>>2]=0|f[b+4>>2],o=e}function Ng(a,b,c,d,e){a|=0,b|=0,c|=0,d|=0,e|=0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,x=0;x=o,o=o+48|0,(0|o)>=(0|p)&&ca(48),i=x+32|0,h=x+24|0,g=x+16|0,r=b,s=d,t=e,u=s,f[g>>2]=0|f[c>>2],f[g+4>>2]=0|f[c+4>>2],v=0|Og(g,0,u),s=v,j=s,k=t,f[h>>2]=0|f[c>>2],f[h+4>>2]=0|f[c+4>>2],l=0|Og(h,j,k),t=l,m=r,n=s,q=t,f[i>>2]=0|f[c>>2],f[i+4>>2]=0|f[c+4>>2],Pg(a,m,i,n,q),o=x}function Og(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,V=0,W=0,X=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0;for(pa=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),A=b,L=c,d=0|f[a>>2],e=0|f[d>>2],g=e>>>11,h=8&g,i=0!=(0|h),j=0|f[a>>2],k=j+12|0,i?r=k:(l=k+8|0,m=0|f[l>>2],r=m),n=A,q=r+n|0,ma=q,s=0|f[a>>2],t=0|f[s>>2],u=t>>>11,v=8&u,w=0!=(0|v),x=0|f[a>>2],y=x+12|0,w?Q=y:(z=y+8|0,B=0|f[z>>2],Q=B),C=0|f[a>>2],D=0|f[C>>2],E=D>>>11,F=8&E,G=0!=(0|F),H=0|f[a>>2],G?(I=0|f[H>>2],J=I>>>11,K=496&J,M=K>>4,R=M):(N=H+12|0,O=0|f[N>>2],R=O),P=Q+R|0,na=P,W=0,ga=0;;){if(S=ma,T=na,!(S>>>0<T>>>0)){oa=14;break}if(V=W,X=L,!((0|V)<(0|X))){oa=14;break}Z=ma,$=na,_=0|Qg(Z,$),la=_,aa=la,ba=ga,da=ba+aa|0,ga=da,ea=la,fa=ma,ha=fa+ea|0,ma=ha,ia=W,ja=ia+1|0,W=ja}return 14==(0|oa)?(ka=ga,o=pa,0|ka):0}function Pg(a,b,c,d,e){a|=0,b|=0,c|=0,d|=0,e|=0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,oa=0;return oa=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),W=b,ga=d,ka=e,h=0|f[c>>2],la=h,i=la,j=0|f[i>>2],k=j>>>11,l=8&k,m=0!=(0|l),n=W,q=la,m?(r=q+12|0,s=ga,t=r+s|0,u=ka,v=0|ng(n,t,u),ma=v,ja=ma,lg(a,ja),void(o=oa)):(Jg(n,q),w=la,x=w+12|0,y=x+4|0,z=0|f[y>>2],g=z,A=W,B=W,C=B+48|0,D=0|f[C>>2],E=0|Tc(A,16,D),ma=E,F=la,G=F+12|0,H=G+8|0,I=0|f[H>>2],J=ga,K=I+J|0,L=ma,M=L+12|0,N=M+8|0,f[N>>2]=K,O=ka,P=ma,Q=P+12|0,f[Q>>2]=O,R=g,S=ma,T=S+12|0,U=T+4|0,f[U>>2]=R,V=ma,X=0|f[V>>2],Y=X>>>11,Z=1|Y,$=0|f[V>>2],_=2097151&Z,aa=_<<11,ba=2047&$,da=ba|aa,f[V>>2]=da,ea=g,fa=ea+4|0,ha=0|f[fa>>2],ia=ha+1|0,f[fa>>2]=ia,ja=ma,lg(a,ja),void(o=oa))}function Qg(a,b){a|=0,b|=0;var c=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,r=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0;if(K=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),A=a,D=b,G=A,H=0|d[G>>0],I=255&H,c=55813+I|0,e=0|d[c>>0],f=e<<24>>24,E=f,g=A,h=E,i=g+h|0,j=D,i>>>0>j>>>0)return n=1,C=n,o=K,0|C;for(F=1;;){if(l=F,m=E,!((0|l)<(0|m))){J=8;break}if(r=A,s=F,t=r+s|0,u=0|d[t>>0],v=u<<24>>24,w=192&v,128!=(0|w)){J=6;break}y=F,z=y+1|0,F=z}return 6==(0|J)?(n=1,C=n,o=K,0|C):8==(0|J)?(B=E,n=B,C=n,o=K,0|C):0}function Rg(a,b){a|=0,b|=0;var c=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,Y=0;for(Y=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),a,U=0|f[b>>2],B=U,V=B,W=0|f[V>>2],c=W>>>11,e=8&c,g=0!=(0|e),h=B,g?(i=0|f[h>>2],j=i>>>11,k=496&j,l=k>>4,r=l):(m=h+12|0,n=0|f[m>>2],r=n),M=r,s=B,t=0|f[s>>2],u=t>>>11,v=8&u,w=0!=(0|v),x=B,y=x+12|0,w?C=y:(z=y+8|0,A=0|f[z>>2],C=A),S=C,T=0;;){if(D=M,E=D+-1|0,M=E,F=0!=(0|D),G=T,!F)break;H=65599*G|0,I=S,J=0|d[I>>0],K=J<<24>>24,L=H+K|0,T=L,N=S,O=N+1|0,S=O}return P=T,Q=P>>5,R=G+Q|0,o=Y,0|R}function Sg(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,j=0;j=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),d=j+8|0,e=b,g=e,f[d>>2]=0|f[c>>2],f[d+4>>2]=0|f[c+4>>2],h=0|li(g,d),Tg(a,h),o=j}function Tg(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,i=0;i=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),d=i,c=b,e=d+4|0,f[e>>2]=4,g=c,f[d>>2]=g,f[a>>2]=0|f[d>>2],f[a+4>>2]=0|f[d+4>>2],o=i}function Ug(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,s=0,t=0,v=0;return v=o,o=o+48|0,(0|o)>=(0|p)&&ca(48),e=v+40|0,d=v+32|0,t=v,l=v+16|0,m=v+8|0,k=b,n=c+4|0,q=0|f[n>>2],16==(0|q)?(f[a>>2]=0|f[c>>2],f[a+4>>2]=0|f[c+4>>2],void(o=v)):(s=k,f[d>>2]=0|f[c>>2],f[d+4>>2]=0|f[c+4>>2],Xj(m,s,d,69276,0,t),f[l>>2]=0|f[m>>2],f[l+4>>2]=0|f[m+4>>2],g=l+4|0,h=0|f[g>>2],i=16==(0|h),i?(f[a>>2]=0|f[l>>2],f[a+4>>2]=0|f[l+4>>2],void(o=v)):(j=k,f[e>>2]=0|f[c>>2],f[e+4>>2]=0|f[c+4>>2],Jf(a,j,e),void(o=v)))}function Vg(a,b,c){a|=0,b|=0,c|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0;for(_a=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),C=b,N=c,h=N,i=h,Ea=i,j=C,k=0|ng(j,0,10),Y=k,l=Y,m=0|f[l>>2],n=m>>>11,q=8&n,r=0!=(0|q),s=Y,t=s+12|0,r?w=t:(u=t+8|0,v=0|f[u>>2],w=v),ia=w,x=ia,y=x+1|0,ia=y,d[x>>0]=48,z=ia,A=z+1|0,ia=A,d[z>>0]=120,B=ia,ta=B;;)if(D=Ea,E=(D>>>0)%16&-1,F=55645+E|0,G=0|d[F>>0],H=ta,I=H+1|0,ta=I,d[H>>0]=G,J=Ea,K=(J>>>0)/16&-1,Ea=K,L=Ea,!(L>>>0>0))break;for(O=ta,d[O>>0]=0,P=Y,Q=0|f[P>>2],R=Q>>>11,S=8&R,T=0!=(0|S),U=ta,V=Y,W=0|f[V>>2],X=W>>>11,Z=8&X,$=0!=(0|Z),_=Y,aa=_+12|0,T?($?ga=aa:(ba=aa+8|0,da=0|f[ba>>2],ga=da),ea=U,fa=ga,ha=ea-fa|0,Pa=ha,ja=Y,ka=0|f[ja>>2],la=ka>>>11,ma=-497&la,na=0|f[ja>>2],oa=2097151&ma,pa=oa<<11,qa=2047&na,ra=qa|pa,f[ja>>2]=ra,sa=Pa,ua=sa<<4,va=Y,wa=0|f[va>>2],xa=wa>>>11,ya=xa|ua,za=0|f[va>>2],Aa=2097151&ya,Ba=Aa<<11,Ca=2047&za,Da=Ca|Ba,f[va>>2]=Da):($?Ja=aa:(Fa=aa+8|0,Ga=0|f[Fa>>2],Ja=Ga),Ha=U,Ia=Ja,Ka=Ha-Ia|0,La=Y,Ma=La+12|0,f[Ma>>2]=Ka);;){if(Na=ia,Oa=ta,!(Na>>>0<Oa>>>0))break;Ra=ia,Sa=0|d[Ra>>0],e=Sa,Ta=ta,Ua=Ta+-1|0,ta=Ua,Va=0|d[Ua>>0],Wa=ia,Xa=Wa+1|0,ia=Xa,d[Wa>>0]=Va,Ya=e,Za=ta,d[Za>>0]=Ya}g=Y,lg(a,g),o=_a}function Wg(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,i=0;i=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),d=i+8|0,e=b,g=e,f[d>>2]=0|f[c>>2],f[d+4>>2]=0|f[c+4>>2],Gf(a,g,d,16,65324,65331),o=i}function Xg(a,b,c,e,g){a|=0,b|=0,c|=0,e|=0,g|=0;var h=0,i=0,k=0,l=0,m=0,n=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,D=0,E=0,F=0,H=0,I=0,J=0,L=0,M=0,N=0,O=0,Q=0,R=0,S=0,T=0,U=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,ta=0,va=0,wa=0,xa=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,$a=0,_a=0,ab=0,bb=0,cb=0,db=0,eb=0,gb=0,hb=0,jb=0,lb=0,mb=0,nb=0,ob=0,qb=0,rb=0,sb=0,ub=0,wb=0,xb=0,yb=0,zb=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,$b=0,_b=0,bc=0,cc=0,dc=0,fc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,yc=0,zc=0,Ac=0,Bc=0,Cc=0,Dc=0,Ec=0,Fc=0,Gc=0,Hc=0,Ic=0,Jc=0,Kc=0,Lc=0,Mc=0,Nc=0,Oc=0,Pc=0,Qc=0,Rc=0,Sc=0,Tc=0,Uc=0,Vc=0,Wc=0,Xc=0,Yc=0,$c=0,_c=0,ad=0,bd=0,cd=0,dd=0,ed=0,fd=0,gd=0,hd=0,id=0,jd=0,kd=0,md=0,od=0,pd=0,qd=0,sd=0,td=0,ud=0,vd=0,wd=0,xd=0,yd=0,zd=0,Ad=0,Bd=0,Cd=0,Dd=0,Ed=0,Fd=0,Gd=0,Hd=0,Id=0,Kd=0,Ld=0,Md=0,Nd=0,Od=0,Pd=0,Qd=0,Rd=0,Sd=0,Td=0,Ud=0,Vd=0,Wd=0,Xd=0,Yd=0,Zd=0,$d=0,_d=0,ae=0,be=0,ce=0,de=0,ee=0,fe=0,ge=0,ie=0,je=0,ke=0,le=0,me=0,ne=0,pe=0,qe=0,re=0,te=0,ve=0,we=0,xe=0,ye=0,ze=0,Ae=0,Ce=0,De=0,Ee=0,Ge=0,Ie=0,Je=0,Ke=0,Le=0,Me=0,Ne=0,Oe=0,Qe=0,Re=0,Se=0,Te=0,Ue=0,We=0,Xe=0,Ye=0,Ze=0,_e=0,af=0,bf=0,cf=0,df=0,ef=0,gf=0,hf=0,jf=0,kf=0,mf=0,nf=0,of=0,rf=0,sf=0,tf=0,uf=0,vf=0;vf=o,o=o+96|0,(0|o)>=(0|p)&&ca(96),tf=vf+24|0,sf=vf+16|0,rf=vf+8|0,R=vf,ma=vf+48|0,xa=vf+40|0,Ia=vf+32|0,ne=b,ye=c,Je=e,Ue=g,h=1,Ta=R,cb=Ta,f[cb>>2]=0,nb=Ta+4|0,yb=nb,f[yb>>2]=0,Jb=ye,Ub=0!=(0|Jb);do{if(Ub){for(;;){if(zc=ye,Kc=0|d[zc>>0],Vc=Kc<<24>>24,ed=32==(0|Vc),ed?Xd=1:(pd=ye,Ad=0|d[pd>>0],Ld=Ad<<24>>24,Wd=Ld-9|0,Zd=Wd>>>0<5,Xd=Zd),$d=ye,!Xd)break;_d=$d+1|0,ye=_d}if(ae=0|d[$d>>0],be=ae<<24>>24,ce=43==(0|be),de=ye,ce?(ee=de+1|0,ye=ee):(fe=0|d[de>>0],ge=fe<<24>>24,45==(0|ge)&&(ie=ye,je=ie+1|0,ye=je,h=0)),ke=ye,le=0|d[ke>>0],me=le<<24>>24,!(43==(0|me)||(pe=ye,qe=0|d[pe>>0],re=qe<<24>>24,45==(0|re)))){ve=Je,we=(0|ve)<=0;a:do{if(we){if(xe=ye,ze=0|d[xe>>0],Ae=ze<<24>>24,!(48==(0|Ae))){if(Ge=Je,(0|Ge)<-1){Ie=Je,Ke=0-Ie|0,Je=Ke;break}Je=10;break}switch(Ce=ye,De=Ce+1|0,Ee=0|d[De>>0],0|Ee<<24>>24){case 88:case 120:Je=16;break a;case 66:case 98:Je=2;break a;case 79:case 111:Je=8;break a;case 68:case 100:Je=10;break a;default:Je=8;break a}}}while(0);Le=Je;a:switch(0|Le){case 2:if(Me=ye,Ne=0|d[Me>>0],Oe=Ne<<24>>24,48==(0|Oe)){if(Qe=ye,Re=Qe+1|0,Se=0|d[Re>>0],Te=Se<<24>>24,!(98==(0|Te)||(We=ye,Xe=We+1|0,Ye=0|d[Xe>>0],Ze=Ye<<24>>24,66==(0|Ze))))break a;_e=ye,af=_e+2|0,ye=af}break;case 15:case 14:case 13:case 12:case 11:case 9:case 7:case 6:case 5:case 4:case 3:break;case 8:if(bf=ye,cf=0|d[bf>>0],ef=cf<<24>>24,48==(0|ef)){if(gf=ye,hf=gf+1|0,jf=0|d[hf>>0],kf=jf<<24>>24,!(111==(0|kf)||(mf=ye,nf=mf+1|0,of=0|d[nf>>0],i=of<<24>>24,79==(0|i))))break a;k=ye,l=k+2|0,ye=l}break;case 10:if(m=ye,n=0|d[m>>0],q=n<<24>>24,48==(0|q)){if(s=ye,t=s+1|0,v=0|d[t>>0],w=v<<24>>24,!(100==(0|w)||(y=ye,z=y+1|0,A=0|d[z>>0],B=A<<24>>24,68==(0|B))))break a;D=ye,E=D+2|0,ye=E}break;case 16:if(H=ye,I=0|d[H>>0],J=I<<24>>24,48==(0|J)){if(L=ye,M=L+1|0,N=0|d[M>>0],O=N<<24>>24,!(120==(0|O)||(Q=ye,S=Q+1|0,T=0|d[S>>0],U=T<<24>>24,88==(0|U))))break a;W=ye,X=W+2|0,ye=X}break;default:Y=Je,Z=(0|Y)<2,$=Je,_=36<(0|$),Z|_&&(ba=ne,da=ne,ea=0|sp(da,69160),fa=Je,Yg(ma,fa),d[rf>>0]=0|d[ma>>0],d[rf+1>>0]=0|d[ma+1>>0],d[rf+2>>0]=0|d[ma+2>>0],d[rf+3>>0]=0|d[ma+3>>0],d[rf+4>>0]=0|d[ma+4>>0],d[rf+5>>0]=0|d[ma+5>>0],d[rf+6>>0]=0|d[ma+6>>0],d[rf+7>>0]=0|d[ma+7>>0],Dr(ba,ea,56069,rf))}ga=ye,ha=0|d[ga>>0],ia=ha<<24>>24,ja=48==(0|ia);do{if(ja){for(F=0;;){if(ka=ye,la=ka+1|0,ye=la,na=0|d[la>>0],oa=na<<24>>24,u=oa,pa=48==(0|oa),qa=u,ra=95==(0|qa),!(pa?1:ra))break;if(ta=u,95==(0|ta)){if(va=F,wa=va+1|0,F=wa,(0|wa)>=2)break}else F=0}if(za=ye,Aa=0|d[za>>0],Ba=Aa<<24>>24,u=Ba,Ca=0==(0|Ba),Da=u,Ea=32==(0|Da),!(Ca|Ea||(Fa=u,Ga=Fa-9|0,Ga>>>0<5)))break;Ja=ye,Ka=Ja+-1|0,ye=Ka}}while(0);La=ye,Ma=0|d[La>>0],Na=Ma<<24>>24,u=Na,Oa=u,Pa=Oa-48|0,Qa=Pa>>>0<10,Ra=u;do{if(Qa)Sa=Ra-48|0,db=Sa;else{if(Ua=Ra-97|0,Va=Ua>>>0<26,Wa=u,Va){Xa=Wa-97|0,Ya=Xa+10|0,db=Ya;break}Za=Wa-65|0,$a=Za>>>0<26,$a?(_a=u,ab=_a-65|0,bb=ab+10|0,db=bb):db=-1}}while(0);if(u=db,eb=u,!((0|eb)<0||(gb=u,hb=Je,(0|gb)>=(0|hb)))){for(F=0,lb=ye,df=lb;;){if(mb=df,ob=0|d[mb>>0],!(ob<<24>>24!=0))break;if(qb=df,rb=0|d[qb>>0],sb=rb<<24>>24,95==(0|sb)){if(ub=F,!(0==(0|ub))){uf=70;break}wb=F,xb=wb+1|0,F=xb}else{F=0,Bb=df,Cb=0|d[Bb>>0],Db=Cb<<24>>24,Eb=Db-48|0,Fb=Eb>>>0<10,Gb=df,Hb=0|d[Gb>>0],Ib=Hb<<24>>24;do{if(Fb)Kb=Ib-48|0,$b=Kb;else{if(Lb=Ib-97|0,Mb=Lb>>>0<26,Nb=df,Ob=0|d[Nb>>0],Pb=Ob<<24>>24,Mb){Qb=Pb-97|0,Rb=Qb+10|0,$b=Rb;break}Sb=Pb-65|0,Tb=Sb>>>0<26,Tb?(Vb=df,Wb=0|d[Vb>>0],Xb=Wb<<24>>24,Yb=Xb-65|0,Zb=Yb+10|0,$b=Zb):$b=-1}}while(0);if(u=$b,_b=u,(0|_b)<0){uf=79;break}if(bc=u,cc=Je,(0|bc)>=(0|cc)){uf=79;break}if(hc=Je,ic=(0|hc)<0,jc=ic<<31>>31,kc=R,lc=kc,mc=0|f[lc>>2],nc=kc+4|0,pc=nc,qc=0|f[pc>>2],rc=0|Yw(0|mc,0|qc,0|hc,0|jc),sc=G,tc=R,uc=tc,f[uc>>2]=rc,vc=tc+4|0,wc=vc,f[wc>>2]=sc,xc=u,yc=(0|xc)<0,Ac=yc<<31>>31,Bc=R,Cc=Bc,Dc=0|f[Cc>>2],Ec=Bc+4|0,Fc=Ec,Gc=0|f[Fc>>2],Hc=0|Nw(0|Dc,0|Gc,0|xc,0|Ac),Ic=G,Jc=R,Lc=Jc,f[Lc>>2]=Hc,Mc=Jc+4|0,Nc=Mc,f[Nc>>2]=Ic,Oc=R,Pc=Oc,Qc=0|f[Pc>>2],Rc=Oc+4|0,Sc=Rc,Tc=0|f[Sc>>2],Uc=Tc>>>0>0,Wc=Qc>>>0>2147483647,Xc=0==(0|Tc),Yc=Xc&Wc,Uc|Yc){uf=81;break}}dd=df,fd=dd+1|0,df=fd}if(70==(0|uf)){if(zb=Ue,0!=(0|zb))break}else if(79==(0|uf)){if(fc=Ue,0!=(0|fc))break}else 81==(0|uf)&&($c=ne,_c=ne,ad=0|sp(_c,69160),bd=ne,cd=ye,pg(xa,bd,cd),d[sf>>0]=0|d[xa>>0],d[sf+1>>0]=0|d[xa+1>>0],d[sf+2>>0]=0|d[xa+2>>0],d[sf+3>>0]=0|d[xa+3>>0],d[sf+4>>0]=0|d[xa+4>>0],d[sf+5>>0]=0|d[xa+5>>0],d[sf+6>>0]=0|d[xa+6>>0],d[sf+7>>0]=0|d[xa+7>>0],Dr($c,ad,56086,sf));if(gd=R,hd=gd,id=0|f[hd>>2],jd=gd+4|0,kd=jd,0|f[kd>>2],aa=id,md=Ue,0!=(0|md)){if(od=df,qd=ye,(0|od)==(0|qd))break;for(;;){if(sd=df,td=0|d[sd>>0],ud=td<<24>>24,vd=0!=(0|ud),vd?(wd=df,xd=0|d[wd>>0],yd=xd<<24>>24,zd=32==(0|yd),zd?Yd=1:(Bd=df,Cd=0|d[Bd>>0],Dd=Cd<<24>>24,Ed=Dd-9|0,Fd=Ed>>>0<5,Yd=Fd)):Yd=0,Gd=df,!Yd)break;Hd=Gd+1|0,df=Hd}if(Id=0|d[Gd>>0],Id<<24>>24!=0)break}return Kd=h,Md=Kd<<24>>24,Nd=0!=(0|Md),Od=aa,Pd=0-Od|0,Qd=Nd?Od:Pd,Yg(a,Qd),void(o=vf)}if(jb=Ue,0!=(0|jb))break;return Yg(a,0),void(o=vf)}if(te=Ue,!(0!=(0|te)))return Yg(a,0),void(o=vf)}else if(dc=Ue,!(0!=(0|dc)))return Yg(a,0),void(o=vf)}while(0);Rd=ne,Sd=ne,Td=0|sp(Sd,69160),Ud=ne,Vd=ye,pg(Ia,Ud,Vd),d[tf>>0]=0|d[Ia>>0],d[tf+1>>0]=0|d[Ia+1>>0],d[tf+2>>0]=0|d[Ia+2>>0],d[tf+3>>0]=0|d[Ia+3>>0],d[tf+4>>0]=0|d[Ia+4>>0],d[tf+5>>0]=0|d[Ia+5>>0],d[tf+6>>0]=0|d[Ia+6>>0],d[tf+7>>0]=0|d[Ia+7>>0],Dr(Rd,Td,56118,tf)}function Yg(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,i=0;i=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),d=i,c=b,e=d+4|0,f[e>>2]=3,g=c,f[d>>2]=g,f[a>>2]=0|f[d>>2],f[a+4>>2]=0|f[d+4>>2],o=i}function Zg(a,b){a|=0,b|=0;var c=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,z=0,A=0,B=0,C=0,D=0,E=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0;return _=o,o=o+48|0,(0|o)>=(0|p)&&ca(48),c=_+40|0,V=_+16|0,C=a,N=b,Z=C,e=N,f[c>>2]=0|f[e>>2],f[c+4>>2]=0|f[e+4>>2],yg(V,Z,c),g=0|f[V>>2],W=g,h=C,i=W,j=0|tg(h,i),X=j,k=W,l=0|f[k>>2],m=l>>>11,n=8&m,q=0!=(0|n),s=W,t=s+12|0,q?w=t:(u=t+8|0,v=0|f[u>>2],w=v),Y=w,x=Y,0!=(0|x)&&(z=Y,A=X,B=z+A|0,D=0|d[B>>0],0==(0|(E=D<<24>>24)))?(T=Y,r=T,U=r,o=_,0|U):(G=C,H=W,ug(G,H),I=W,J=0|f[I>>2],K=J>>>11,L=8&K,M=0!=(0|L),O=W,P=O+12|0,M?S=P:(Q=P+8|0,R=0|f[Q>>2],S=R),r=S,U=r,o=_,0|U)}function $g(a,b,c,e,g){a|=0,b|=0,c|=0,e|=0,g|=0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ia=0;ia=o,o=o+48|0,(0|o)>=(0|p)&&ca(48),h=ia+24|0,Y=b,da=e,ea=g,j=ea,k=j<<24>>24!=0,l=Y,k?(m=0|Zg(l,c),fa=m):(f[h>>2]=0|f[c>>2],f[h+4>>2]=0|f[c+4>>2],n=0|Dg(l,h),fa=n),q=fa,r=0!=(0|q),r&&(s=0|f[c>>2],t=0|f[s>>2],u=t>>>11,v=8&u,w=0!=(0|v),x=0|f[c>>2],w?(y=0|f[x>>2],z=y>>>11,A=496&z,B=A>>4,E=B):(C=x+12|0,D=0|f[C>>2],E=D),ga=E,F=fa,G=ga,H=F+G|0,I=0|d[H>>0],I<<24>>24!=0&&(K=Y,L=fa,M=ga,N=0|ng(K,L,M),i=N,O=i,P=0|f[O>>2],Q=P>>>11,R=8&Q,S=0!=(0|R),T=i,U=T+12|0,S?X=U:(V=U+8|0,W=0|f[V>>2],X=W),fa=X)),Z=Y,$=fa,_=da,aa=ea,ba=255&aa,Xg(a,Z,$,_,ba),o=ia}function _g(a,b,c){a|=0,b|=0,c|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,D=0,E=0,F=0,G=0,H=0,J=0,K=0,L=0,N=0,O=0,Q=0,R=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,sa=0,ta=0,ua=0,va=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Ga=0,Ha=0,Ia=0,Ja=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Ya=0,Za=0,$a=0,_a=0,ab=0,bb=0,cb=0,db=0,eb=0,gb=0,hb=0,ib=0,jb=0,kb=0,mb=0,nb=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,yb=0,zb=0,Ab=0,Cb=0,Db=0,Fb=0,Hb=0,Ib=0,Jb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Tb=0,Ub=0,Vb=0,Wb=0,Yb=0,Zb=0,_b=0;if(_b=o,o=o+128|0,(0|o)>=(0|p)&&ca(128),Zb=_b+16|0,sb=_b+40|0,Db=_b+54|0,e=_b+32|0,Na=a,Ya=b,hb=c,Z=Ya,!(0!=(0|Z)))return Ca=0,ma=Ca,o=_b,+ma;for(;;){if(oa=Ya,pa=0|d[oa>>0],qa=pa<<24>>24,!(32==(0|qa)||(sa=Ya,ta=0|d[sa>>0],ua=ta<<24>>24,va=ua-9|0,va>>>0<5)))break;xa=Ya,ya=xa+1|0,Ya=ya}za=hb,Aa=za<<24>>24!=0;do{if(!Aa&&(Ba=Ya,Da=0|d[Ba>>0],Ea=Da<<24>>24,48==(0|Ea))){if(Ga=Ya,Ha=Ga+1|0,Ia=0|d[Ha>>0],Ja=Ia<<24>>24,!(120==(0|Ja)||(La=Ya,Ma=La+1|0,Oa=0|d[Ma>>0],Pa=Oa<<24>>24,88==(0|Pa))))break;return Ca=0,ma=Ca,o=_b,+ma}}while(0);Ra=Ya,Sa=+Dw(Ra,sb),Ob=Sa,Ta=Ya,Ua=0|f[sb>>2],Va=(0|Ta)==(0|Ua);a:do{if(!Va){if(db=0|f[sb>>2],eb=0|d[db>>0],eb<<24>>24!=0){for(s=Db,gb=Db+70|0,ib=gb+-1|0,D=ib,O=0;;){if(jb=Ya,kb=0|f[sb>>2],!(jb>>>0<kb>>>0))break;if(mb=s,nb=D,!(mb>>>0<nb>>>0))break;pb=Ya,qb=pb+1|0,Ya=qb,rb=0|d[pb>>0],tb=s,ub=tb+1|0,s=ub,d[tb>>0]=rb,O=rb}b:for(;;){if(vb=Ya,wb=0|d[vb>>0],!(wb<<24>>24!=0))break;if(yb=Ya,zb=0|d[yb>>0],Ab=zb<<24>>24,95==(0|Ab)){if(Cb=hb,!(Cb<<24>>24!=0))for(;;)if(Tb=Ya,Ub=Tb+1|0,Ya=Ub,Vb=0|d[Ub>>0],Wb=Vb<<24>>24,!(95==(0|Wb)))continue b;if(Fb=s,(0|Fb)==(0|Db))break a;if(Hb=O,Ib=Hb<<24>>24,Jb=Ib-48|0,!(Jb>>>0<10))break a;if(Lb=Ya,Mb=Lb+1|0,Ya=Mb,Nb=Ya,Pb=0|d[Nb>>0],Qb=Pb<<24>>24,Rb=Qb-48|0,!(Rb>>>0<10))break a}Yb=Ya,g=Yb+1|0,Ya=g,h=0|d[Yb>>0],O=h,i=s,j=D,k=i>>>0<j>>>0,k&&(l=O,m=s,n=m+1|0,s=n,d[m>>0]=l)}q=s,d[q>>0]=0,Ya=Db,r=hb,t=r<<24>>24!=0;do{if(!t&&(u=Ya,v=0|d[u>>0],w=v<<24>>24,48==(0|w))){if(y=Ya,z=y+1|0,A=0|d[z>>0],B=A<<24>>24,!(120==(0|B)||(E=Ya,F=E+1|0,G=0|d[F>>0],H=G<<24>>24,88==(0|H))))break;return Ca=0,ma=Ca,o=_b,+ma}}while(0);if(J=Ya,K=+Dw(J,sb),Ob=K,L=hb,L<<24>>24!=0){if(N=0|f[sb>>2],!(0!=(0|N)))break;if(Q=Ya,R=0|f[sb>>2],(0|Q)==(0|R))break;for(;;){if(T=0|f[sb>>2],U=0|d[T>>0],V=U<<24>>24,W=0!=(0|V),W?(X=0|f[sb>>2],Y=0|d[X>>0],$=Y<<24>>24,_=32==(0|$),_?na=1:(aa=0|f[sb>>2],ba=0|d[aa>>0],da=ba<<24>>24,ea=da-9|0,fa=ea>>>0<5,na=fa)):na=0,ga=0|f[sb>>2],!na)break;ha=ga+1|0,f[sb>>2]=ha}if(ia=0|d[ga>>0],ia<<24>>24!=0)break}}return la=Ob,Ca=la,ma=Ca,o=_b,+ma}if(Wa=hb,!(Wa<<24>>24!=0))return cb=Ob,Ca=cb,ma=Ca,o=_b,+ma}while(0);return Za=Na,$a=Na,_a=0|sp($a,69160),ab=Na,bb=Ya,pg(e,ab,bb),d[Zb>>0]=0|d[e>>0],d[Zb+1>>0]=0|d[e+1>>0],d[Zb+2>>0]=0|d[e+2>>0],d[Zb+3>>0]=0|d[e+3>>0],d[Zb+4>>0]=0|d[e+4>>0],d[Zb+5>>0]=0|d[e+5>>0],d[Zb+6>>0]=0|d[e+6>>0],d[Zb+7>>0]=0|d[e+7>>0],Dr(Za,_a,56148,Zb),0}function ah(a,b,c){a|=0,b|=0,c|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,va=0;return va=o,o=o+48|0,(0|o)>=(0|p)&&ca(48),e=va+32|0,ra=va+8|0,C=a,N=c,ta=C,f[e>>2]=0|f[b>>2],f[e+4>>2]=0|f[b+4>>2],yg(ra,ta,e),f[b>>2]=0|f[ra>>2],f[b+4>>2]=0|f[ra+4>>2],g=0|f[b>>2],h=0|f[g>>2],i=h>>>11,j=8&i,k=0!=(0|j),l=0|f[b>>2],m=l+12|0,k?r=m:(n=m+8|0,q=0|f[n>>2],r=q),Y=r,s=0|f[b>>2],t=0|f[s>>2],u=t>>>11,v=8&u,w=0!=(0|v),x=0|f[b>>2],w?(y=0|f[x>>2],z=y>>>11,A=496&z,B=A>>4,F=B):(D=x+12|0,E=0|f[D>>2],F=E),ia=F,G=Y,0!=(0|G)?(I=N,J=255&I,K=0!=(0|J),K&&(L=Y,M=ia,O=0|vv(L,0,M),0!=(0|O)&&(Q=C,R=C,S=0|sp(R,69160),Ar(Q,S,56177))),T=Y,U=ia,V=T+U|0,W=0|d[V>>0],W<<24>>24!=0?(Z=C,$=Y,_=ia,aa=0|ng(Z,$,_),sa=aa,ba=sa,da=0|f[ba>>2],ea=da>>>11,fa=8&ea,ga=0!=(0|fa),ha=sa,ja=ha+12|0,ga?ma=ja:(ka=ja+8|0,la=0|f[ka>>2],ma=la),Y=ma,na=C,oa=Y,pa=N,qa=+_g(na,oa,pa),o=va,+qa):(na=C,oa=Y,pa=N,qa=+_g(na,oa,pa),o=va,+qa)):(na=C,oa=Y,pa=N,qa=+_g(na,oa,pa),o=va,+qa)}function bh(a,b,c){a|=0,b|=0,c|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ca=0,Da=0,Ea=0,Ga=0,Ha=0,Ia=0,Ja=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,$a=0,_a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Yb=0,Zb=0,$b=0,_b=0,ac=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,yc=0,zc=0,Ac=0,Bc=0,Cc=0,Dc=0,Ec=0,Fc=0,Gc=0,Hc=0,Ic=0,Jc=0,Kc=0,Lc=0,Mc=0,Nc=0,Oc=0,Pc=0,Qc=0,Rc=0,Sc=0,Tc=0,Uc=0,Vc=0,Wc=0,Xc=0,Yc=0,Zc=0,$c=0,_c=0,ad=0,bd=0,cd=0,dd=0,ed=0,fd=0,gd=0,hd=0,id=0,kd=0;kd=o,o=o+48|0,(0|o)>=(0|p)&&ca(48),e=kd+24|0,Ob=b,Zb=2,t=0|f[c>>2],E=0|f[t>>2],P=E>>>11,$=8&P,ka=0!=(0|$),va=0|f[c>>2],Ga=va+12|0,ka?lb=Ga:(Ra=Ga+8|0,ab=0|f[Ra>>2],lb=ab),ic=lb,wb=ic,Gb=0|f[c>>2],Hb=0|f[Gb>>2],Ib=Hb>>>11,Jb=8&Ib,Kb=0!=(0|Jb),Lb=0|f[c>>2],Kb?(Mb=0|f[Lb>>2],Nb=Mb>>>11,Pb=496&Nb,Qb=Pb>>4,Ub=Qb):(Rb=Lb+12|0,Sb=0|f[Rb>>2],Ub=Sb),Tb=wb+Ub|0,tc=Tb;a:for(;;){if(Vb=ic,Wb=tc,!(Vb>>>0<Wb>>>0))break;switch(Yb=ic,$b=Yb+1|0,ic=$b,_b=0|d[Yb>>0],$c=_b,ac=$c,0|255&ac){case 27:case 7:case 8:case 11:case 12:case 9:case 13:case 10:case 92:case 34:cc=Zb,dc=cc+2|0,Zb=dc;continue a;case 35:ec=ic,fc=tc,gc=ec>>>0<fc>>>0,gc?(hc=ic,jc=0|d[hc>>0],kc=jc<<24>>24,lc=36==(0|kc),lc?wc=1:(mc=ic,nc=0|d[mc>>0],oc=nc<<24>>24,pc=64==(0|oc),pc?wc=1:(qc=ic,rc=0|d[qc>>0],sc=rc<<24>>24,uc=123==(0|sc),wc=uc))):wc=0,vc=wc?2:1,xc=Zb,yc=xc+vc|0,Zb=yc;continue a;default:if(zc=$c,Ac=255&zc,Bc=Ac-32|0,Cc=Bc>>>0<95,Dc=Zb,Cc){Fc=Dc+1|0,Zb=Fc;continue a}Gc=Dc+4|0,Zb=Gc;continue a}}Hc=Ob,Ic=Zb,Jc=0|ng(Hc,0,Ic),Pc=Jc,Kc=Ob,Lc=Pc,f[e>>2]=0|f[c>>2],f[e+4>>2]=0|f[c+4>>2],Hg(Kc,Lc,e),Mc=0|f[c>>2],Nc=0|f[Mc>>2],Oc=Nc>>>11,Qc=8&Oc,Rc=0!=(0|Qc),Sc=0|f[c>>2],Tc=Sc+12|0,Rc?Wc=Tc:(Uc=Tc+8|0,Vc=0|f[Uc>>2],Wc=Vc),ic=Wc,Xc=ic,Yc=0|f[c>>2],Zc=0|f[Yc>>2],_c=Zc>>>11,ad=8&_c,bd=0!=(0|ad),cd=0|f[c>>2],bd?(dd=0|f[cd>>2],ed=dd>>>11,fd=496&ed,gd=fd>>4,i=gd):(hd=cd+12|0,id=0|f[hd>>2],i=id),h=Xc+i|0,tc=h,j=Pc,k=0|f[j>>2],l=k>>>11,m=8&l,n=0!=(0|m),q=Pc,r=q+12|0,n?v=r:(s=r+8|0,u=0|f[s>>2],v=u),Ec=v,w=Ec,x=w+1|0,Ec=x,d[w>>0]=34;a:for(;;){if(y=ic,z=tc,!(y>>>0<z>>>0))break;switch(B=ic,C=B+1|0,ic=C,D=0|d[B>>0],g=D,F=g,0|255&F){case 92:case 34:H=Ec,I=H+1|0,Ec=I,d[H>>0]=92,J=g,K=Ec,L=K+1|0,Ec=L,d[K>>0]=J;continue a;case 10:M=Ec,N=M+1|0,Ec=N,d[M>>0]=92,O=Ec,Q=O+1|0,Ec=Q,d[O>>0]=110;continue a;case 13:R=Ec,S=R+1|0,Ec=S,d[R>>0]=92,T=Ec,U=T+1|0,Ec=U,d[T>>0]=114;continue a;case 9:V=Ec,W=V+1|0,Ec=W,d[V>>0]=92,X=Ec,Y=X+1|0,Ec=Y,d[X>>0]=116;continue a;case 12:Z=Ec,_=Z+1|0,Ec=_,d[Z>>0]=92,aa=Ec,ba=aa+1|0,Ec=ba,d[aa>>0]=102;continue a;case 11:da=Ec,ea=da+1|0,Ec=ea,d[da>>0]=92,fa=Ec,ga=fa+1|0,Ec=ga,d[fa>>0]=118;continue a;case 8:ha=Ec,ia=ha+1|0,Ec=ia,d[ha>>0]=92,ja=Ec,la=ja+1|0,Ec=la,d[ja>>0]=98;continue a;case 7:ma=Ec,na=ma+1|0,Ec=na,d[ma>>0]=92,oa=Ec,pa=oa+1|0,Ec=pa,d[oa>>0]=97;continue a;case 27:qa=Ec,ra=qa+1|0,Ec=ra,d[qa>>0]=92,sa=Ec,ta=sa+1|0,Ec=ta,d[sa>>0]=101;continue a;case 35:ua=ic,wa=tc,xa=ua>>>0<wa>>>0;do{if(xa){if(ya=ic,za=0|d[ya>>0],Aa=za<<24>>24,!(36==(0|Aa)||(Ca=ic,Da=0|d[Ca>>0],Ea=Da<<24>>24,64==(0|Ea)||(Ha=ic,Ia=0|d[Ha>>0],Ja=Ia<<24>>24,123==(0|Ja)))))break;La=Ec,Ma=La+1|0,Ec=Ma,d[La>>0]=92}}while(0);Na=Ec,Oa=Na+1|0,Ec=Oa,d[Na>>0]=35;continue a;default:if(Pa=g,Qa=255&Pa,Sa=Qa-32|0,Sa>>>0<95){Ua=g,Va=Ec,Wa=Va+1|0,Ec=Wa,d[Va>>0]=Ua;continue a}Xa=Ec,Ya=Xa+1|0,Ec=Ya,d[Xa>>0]=92,Za=g,$a=255&Za,_a=(0|$a)%8&-1,bb=48+_a|0,cb=255&bb,db=Ec,eb=db+2|0,d[eb>>0]=cb,fb=g,gb=255&fb,hb=(0|gb)/8&-1,ib=255&hb,g=ib,jb=g,kb=255&jb,mb=(0|kb)%8&-1,nb=48+mb|0,ob=255&nb,pb=Ec,qb=pb+1|0,d[qb>>0]=ob,rb=g,sb=255&rb,tb=(0|sb)/8&-1,ub=255&tb,g=ub,vb=g,xb=255&vb,yb=(0|xb)%8&-1,zb=48+yb|0,Ab=255&zb,Bb=Ec,d[Bb>>0]=Ab,Cb=Ec,Db=Cb+3|0,Ec=Db;continue a}}Eb=Ec,d[Eb>>0]=34,Fb=Pc,lg(a,Fb),o=kd}function ch(a,b,c,d,e){a|=0,b|=0,c|=0,d|=0,e|=0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,q=0;q=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),i=b,j=d,k=e,l=i,m=0|f[c>>2],g=j,h=k,dh(l,m,g,h),f[a>>2]=0|f[c>>2],f[a+4>>2]=0|f[c+4>>2],o=q}function dh(a,b,c,e){a|=0,b|=0,c|=0,e|=0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,B=0,C=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,$a=0,_a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,$b=0,_b=0,ac=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,yc=0,zc=0,Ac=0,Bc=0,Cc=0,Dc=0,Ec=0,Fc=0,Gc=0,Hc=0,Ic=0,Jc=0,Kc=0,Lc=0,Mc=0,Nc=0,Oc=0,Pc=0,Qc=0,Rc=0,Sc=0,Tc=0,Uc=0,Vc=0,Wc=0,Xc=0,Yc=0,Zc=0,$c=0,_c=0;if(_c=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),Ob=a,Zb=b,ic=c,tc=e,g=-1,E=tc,0==(0|E))return void(o=_c);if($=Ob,ka=Zb,ug($,ka),va=ic,Ga=Zb,Ra=0|f[Ga>>2],ab=Ra>>>11,lb=8&ab,vb=0!=(0|lb),wb=Zb,xb=wb+12|0,vb?Bb=xb:(yb=xb+8|0,zb=0|f[yb>>2],Bb=zb),Ab=va>>>0>=Bb>>>0,Ab&&(Cb=ic,Db=Zb,Eb=0|f[Db>>2],Fb=Eb>>>11,Gb=8&Fb,Hb=0!=(0|Gb),Ib=Zb,Jb=Ib+12|0,Hb?_b=Jb:(Kb=Jb+8|0,Lb=0|f[Kb>>2],_b=Lb),Mb=Zb,Nb=0|f[Mb>>2],Pb=Nb>>>11,Qb=8&Pb,Rb=0!=(0|Qb),Sb=Zb,Rb?(Tb=0|f[Sb>>2],Ub=Tb>>>11,Vb=496&Ub,Wb=Vb>>4,ac=Wb):(Xb=Sb+12|0,Yb=0|f[Xb>>2],ac=Yb),$b=_b+ac|0,Cb>>>0<=$b>>>0&&(cc=ic,dc=Zb,ec=0|f[dc>>2],fc=ec>>>11,gc=8&fc,hc=0!=(0|gc),jc=Zb,kc=jc+12|0,hc?pc=kc:(lc=kc+8|0,mc=0|f[lc>>2],pc=mc),nc=cc,oc=pc,qc=nc-oc|0,g=qc)),rc=Zb,sc=0|f[rc>>2],uc=sc>>>11,vc=8&uc,wc=0!=(0|vc),wc?Ec=11:(xc=Zb,yc=xc+12|0,zc=yc+4|0,Ac=0|f[zc>>2],Ec=Ac),Bc=Zb,Cc=0|f[Bc>>2],Dc=Cc>>>11,Fc=8&Dc,Gc=0!=(0|Fc),Hc=Zb,Gc?(Ic=0|f[Hc>>2],Jc=Ic>>>11,Kc=496&Jc,Lc=Kc>>4,Sc=Lc):(Mc=Hc+12|0,Nc=0|f[Mc>>2],Sc=Nc),Oc=tc,Qc=2147483647-Oc|0,Rc=(0|Sc)>=(0|Qc),Rc&&(Tc=Ob,Uc=Ob,Vc=0|sp(Uc,69160),Ar(Tc,Vc,55711)),Wc=Zb,Xc=0|f[Wc>>2],Yc=Xc>>>11,Zc=8&Yc,h=0!=(0|Zc),i=Zb,h?(j=0|f[i>>2],k=j>>>11,l=496&k,m=l>>4,u=m):(n=i+12|0,q=0|f[n>>2],u=q),r=tc,s=u+r|0,Pc=s,v=Ec,w=Pc,v>>>0<=w>>>0){for(;;){if(y=Pc,z=Ec,!(y>>>0>z>>>0))break;if(B=Ec,C=B+1|0,C>>>0>=1073741823){$c=31;break}I=Ec,J=I+1|0,K=J<<1,Ec=K}31==(0|$c)&&(F=Pc,G=F+4095|0,H=(G>>>0)/4096&-1,Ec=H),L=Ob,M=Zb,N=Ec,wg(L,M,N)}O=g,Q=-1!=(0|O),Q&&(R=Zb,S=0|f[R>>2],T=S>>>11,U=8&T,V=0!=(0|U),W=Zb,X=W+12|0,V?ba=X:(Y=X+8|0,Z=0|f[Y>>2],ba=Z),_=g,aa=ba+_|0,ic=aa),da=Zb,ea=0|f[da>>2],fa=ea>>>11,ga=8&fa,ha=0!=(0|ga),ia=Zb,ja=ia+12|0,ha?Ba=ja:(la=ja+8|0,ma=0|f[la>>2],Ba=ma),na=Zb,oa=0|f[na>>2],pa=oa>>>11,qa=8&pa,ra=0!=(0|qa),sa=Zb,ra?(ta=0|f[sa>>2],ua=ta>>>11,wa=496&ua,xa=wa>>4,Ca=xa):(ya=sa+12|0,za=0|f[ya>>2],Ca=za),Aa=Ba+Ca|0,Da=ic,Ea=tc,$w(0|Aa,0|Da,0|Ea),Fa=Zb,Ha=0|f[Fa>>2],Ia=Ha>>>11,Ja=8&Ia,Ka=0!=(0|Ja),La=Pc,Ka?(t=La,Ma=Zb,Na=0|f[Ma>>2],Oa=Na>>>11,Pa=-497&Oa,Qa=0|f[Ma>>2],Sa=2097151&Pa,Ta=Sa<<11,Ua=2047&Qa,Va=Ua|Ta,f[Ma>>2]=Va,Wa=t,Xa=Wa<<4,Ya=Zb,Za=0|f[Ya>>2],$a=Za>>>11,_a=$a|Xa,bb=0|f[Ya>>2],cb=2097151&_a,db=cb<<11,eb=2047&bb,fb=eb|db,f[Ya>>2]=fb):(gb=Zb,hb=gb+12|0,f[hb>>2]=La),ib=Zb,jb=0|f[ib>>2],kb=jb>>>11,mb=8&kb,nb=0!=(0|mb),ob=Zb,pb=ob+12|0,nb?ub=pb:(qb=pb+8|0,rb=0|f[qb>>2],ub=rb),sb=Pc,tb=ub+sb|0,d[tb>>0]=0,o=_c}function eh(a,b,c,d){a|=0,b|=0,c|=0,d|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,n=0;n=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),e=n+8|0,g=b,h=d,i=g,j=h,k=h,l=0|$v(k),f[e>>2]=0|f[c>>2],f[e+4>>2]=0|f[c+4>>2],ch(a,i,e,j,l),o=n}function fh(a,b,c,d){a|=0,b|=0,c|=0,d|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,I=0;I=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),e=I+8|0,B=b,C=B,D=0|f[d>>2],E=0|f[D>>2],F=E>>>11,G=8&F,g=0!=(0|G),h=0|f[d>>2],i=h+12|0,g?z=i:(j=i+8|0,k=0|f[j>>2],z=k),l=0|f[d>>2],m=0|f[l>>2],n=m>>>11,q=8&n,r=0!=(0|q),s=0|f[d>>2],r?(t=0|f[s>>2],u=t>>>11,v=496&u,w=v>>4,A=w):(x=s+12|0,y=0|f[x>>2],A=y),f[e>>2]=0|f[c>>2],f[e+4>>2]=0|f[c+4>>2],ch(a,C,e,z,A),o=I}function gh(a,b,c,d){a|=0,b|=0,c|=0,d|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,n=0;n=o,o=o+48|0,(0|o)>=(0|p)&&ca(48),h=n+32|0,g=n+24|0,e=n+16|0,j=n,i=b,k=i,f[e>>2]=0|f[d>>2],f[e+4>>2]=0|f[d+4>>2],yg(j,k,e),f[d>>2]=0|f[j>>2],f[d+4>>2]=0|f[j+4>>2],l=i,f[g>>2]=0|f[c>>2],f[g+4>>2]=0|f[c+4>>2],f[h>>2]=0|f[d>>2],f[h+4>>2]=0|f[d+4>>2],fh(a,l,g,h),o=n}function hh(a,b,c){a|=0,b|=0,c|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,$a=0,_a=0,ab=0,bb=0,cb=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Lb=0,Mb=0,Ob=0,Pb=0,Qb=0,Sb=0,Tb=0,Ub=0,Wb=0,Xb=0,Yb=0,_b=0;for(_b=o,o=o+144|0,(0|o)>=(0|p)&&ca(144),k=_b+120|0,j=_b+112|0,i=_b+104|0,h=_b+96|0,g=_b+88|0,e=_b+80|0,ib=_b+130|0,tb=_b+56|0,J=_b+40|0,U=_b+32|0,ea=_b+24|0,oa=_b+16|0,pa=_b+8|0,qa=_b,Da=b,ra=Da,qg(tb,ra,56213,1),sa=0|f[c>>2],ta=0|f[sa>>2],ua=ta>>>11,va=8&ua,wa=0!=(0|va),xa=0|f[c>>2],ya=xa+12|0,wa?Ba=ya:(za=ya+8|0,Aa=0|f[za>>2],Ba=Aa),Oa=Ba,Ca=0|f[c>>2],Ea=0|f[Ca>>2],Fa=Ea>>>11,Ga=8&Fa,Ha=0!=(0|Ga),Ia=0|f[c>>2],Ja=Ia+12|0,Ha?_a=Ja:(Ka=Ja+8|0,La=0|f[Ka>>2],_a=La),Ma=0|f[c>>2],Na=0|f[Ma>>2],Pa=Na>>>11,Qa=8&Pa,Ra=0!=(0|Qa),Sa=0|f[c>>2],Ra?(Ta=0|f[Sa>>2],Ua=Ta>>>11,Va=496&Ua,Wa=Va>>4,ab=Wa):(Xa=Sa+12|0,Ya=0|f[Xa>>2],ab=Ya),$a=_a+ab|0,Za=$a;;){if(bb=Oa,cb=Za,!(bb>>>0<cb>>>0))break;eb=Oa,fb=Za,gb=0|Qg(eb,fb),l=gb,hb=l,jb=(0|hb)>1;a:if(jb){for(y=0;;){if(kb=y,lb=l,!((0|kb)<(0|lb)))break;nb=Oa,ob=y,pb=nb+ob|0,qb=0|d[pb>>0],rb=y,sb=ib+rb|0,d[sb>>0]=qb,ub=y,vb=ub+1|0,y=vb}wb=Da,xb=l,f[e>>2]=0|f[tb>>2],f[e+4>>2]=0|f[tb+4>>2],ch(J,wb,e,ib,xb),yb=l,zb=yb-1|0,Ab=Oa,Bb=Ab+zb|0,Oa=Bb}else{Cb=Oa,Db=0|d[Cb>>0],Eb=Db,Fb=Eb,Gb=255&Fb,Hb=34==(0|Gb);do{if(!(Hb||(Ib=Eb,Jb=255&Ib,92==(0|Jb)))){if(Lb=Eb,Mb=255&Lb,35==(0|Mb)&&(Ob=Oa,Qb=Za,Ob>>>0<Qb>>>0)){if(Sb=Oa,Tb=0|d[Sb>>0],Ub=Tb<<24>>24,36==(0|Ub))break;if(Wb=Oa,Xb=0|d[Wb>>0],Yb=Xb<<24>>24,64==(0|Yb))break;if(m=Oa,n=0|d[m>>0],q=n<<24>>24,123==(0|q))break}if(v=Eb,w=255&v,x=w-32|0,z=x>>>0<95,A=Eb,z){d[ib>>0]=A,B=Da,f[h>>2]=0|f[tb>>2],f[h+4>>2]=0|f[tb+4>>2],ch(ea,B,h,ib,1);break a}switch(0|255&A){case 10:Pb=110;break;case 13:Pb=114;break;case 9:Pb=116;break;case 12:Pb=102;break;case 11:Pb=118;break;case 8:Pb=98;break;case 7:Pb=97;break;case 27:Pb=101;break;default:Pb=0}if(D=Pb,E=D<<24>>24!=0,d[ib>>0]=92,E){F=Pb,G=ib+1|0,d[G>>0]=F,H=Da,f[i>>2]=0|f[tb>>2],f[i+4>>2]=0|f[tb+4>>2],ch(oa,H,i,ib,2);break a}I=Eb,K=255&I,L=(0|K)%8&-1,M=48+L|0,N=255&M,O=ib+3|0,d[O>>0]=N,P=Eb,Q=255&P,R=(0|Q)/8&-1,S=255&R,Eb=S,T=Eb,V=255&T,W=(0|V)%8&-1,X=48+W|0,Y=255&X,Z=ib+2|0,d[Z>>0]=Y,$=Eb,_=255&$,aa=(0|_)/8&-1,ba=255&aa,Eb=ba,da=Eb,fa=255&da,ga=(0|fa)%8&-1,ha=48+ga|0,ia=255&ha,ja=ib+1|0,d[ja>>0]=ia,ka=Da,f[j>>2]=0|f[tb>>2],f[j+4>>2]=0|f[tb+4>>2],ch(pa,ka,j,ib,4);break a}}while(0);d[ib>>0]=92,s=Eb,t=ib+1|0,d[t>>0]=s,u=Da,f[g>>2]=0|f[tb>>2],f[g+4>>2]=0|f[tb+4>>2],ch(U,u,g,ib,2)}la=Oa,ma=la+1|0,Oa=ma}na=Da,f[k>>2]=0|f[tb>>2],f[k+4>>2]=0|f[tb+4>>2],ch(qa,na,k,56213,1),f[a>>2]=0|f[tb>>2],f[a+4>>2]=0|f[tb+4>>2],o=_b}function ih(a){a|=0;var b=0,c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,$a=0;$a=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),b=a,B=b,M=b,X=M+32|0,ha=0|f[X>>2],sa=0|Cp(B,65324,ha),q=sa,Da=b,Oa=Da+48|0,f[Oa>>2]=sa,c=q,e=0|f[c>>2],g=e>>>11,h=-256&g,i=16|h,j=q,k=0|f[j>>2],l=2097151&i,m=l<<11,n=2047&k,r=n|m,f[j>>2]=r,s=b,t=q,Ip(s,t,56215,84,0),u=b,v=q,Ip(u,v,69156,85,262144),w=b,x=q,Ip(w,x,69201,86,262144),y=b,z=q,Ip(y,z,64614,87,262144),A=b,C=q,Ip(A,C,68856,88,262144),D=b,E=q,Ip(D,E,69083,89,4096),F=b,G=q,Ip(F,G,56224,90,0),H=b,I=q,Ip(H,I,56235,91,0),J=b,K=q,Ip(J,K,56247,92,4096),L=b,N=q,Ip(L,N,56253,93,4096),O=b,P=q,Ip(O,P,56260,94,262144),Q=b,R=q,Ip(Q,R,56265,95,262144),S=b,T=q,Ip(S,T,56271,96,0),U=b,V=q,Ip(U,V,56280,97,0),W=b,Y=q,Ip(W,Y,64646,98,0),Z=b,$=q,Ip(Z,$,69289,99,262144),_=b,aa=q,Ip(_,aa,68413,100,0),ba=b,da=q,Ip(ba,da,69243,101,262144),ea=b,fa=q,Ip(ea,fa,64653,102,4096),ga=b,ia=q,Ip(ga,ia,69252,103,262144),ja=b,ka=q,Ip(ja,ka,69294,104,262144),la=b,ma=q,Ip(la,ma,69712,105,0),na=b,oa=q,Ip(na,oa,64664,106,0),pa=b,qa=q,Ip(pa,qa,64680,104,262144),ra=b,ta=q,Ip(ra,ta,64688,107,0),ua=b,va=q,Ip(ua,va,64696,108,0),wa=b,xa=q,Ip(wa,xa,64705,109,4096),ya=b,za=q,Ip(ya,za,64718,106,0),Aa=b,Ba=q,Ip(Aa,Ba,64723,89,4096),Ca=b,Ea=q,Ip(Ca,Ea,56290,110,4096),Fa=b,Ga=q,Ip(Fa,Ga,56296,111,0),Ha=b,Ia=q,Ip(Ha,Ia,56301,112,4096),Ja=b,Ka=q,Ip(Ja,Ka,69276,113,0),La=b,Ma=q,Ip(La,Ma,65331,113,0),Na=b,Pa=q,Ip(Na,Pa,56499,105,0),Qa=b,Ra=q,Ip(Qa,Ra,56306,114,0),Sa=b,Ta=q,Ip(Sa,Ta,56313,115,0),Ua=b,Va=q,Ip(Ua,Va,69281,116,0),Wa=b,Xa=q,Ip(Wa,Xa,56321,117,0),Ya=b,d=q,Ip(Ya,d,56327,118,0),o=$a}function jh(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,q=0,r=0,s=0,t=0,u=0,v=0,x=0;x=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),r=0|f[c>>2],s=0|f[r>>2],t=s>>>11,u=8&t,v=0!=(0|u),d=0|f[c>>2],v?(e=0|f[d>>2],g=e>>>11,h=496&g,i=h>>4,l=i):(j=d+12|0,k=0|f[j>>2],l=k),q=l,m=q,Yg(a,m),o=x}function kh(a,b,c){a|=0,b|=0,c|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,u=0,v=0,w=0,x=0,z=0,A=0,B=0,D=0,F=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,X=0;X=o,o=o+112|0,(0|o)>=(0|p)&&ca(112),h=X+104|0,g=X+96|0,k=X+88|0,j=X+80|0,i=X+72|0,e=X+64|0,V=X+16|0,U=X+8|0,T=X,N=X+48|0,P=X+32|0,Q=X+24|0,H=b,R=H,f[T>>2]=N,Kp(R,69199,T),S=N+4|0,l=0|f[S>>2],m=16==(0|l),n=H;do{if(!m){if(q=H,r=0|ji(q,69276,4),f[e>>2]=0|f[N>>2],f[e+4>>2]=0|f[N+4>>2],s=0|cq(n,e,r),!(s<<24>>24!=0))return Mg(a),void(o=X);if(u=H,v=H,w=0|ji(v,69156,3),f[i>>2]=0|f[N>>2],f[i+4>>2]=0|f[N+4>>2],x=0|cq(u,i,w),!(x<<24>>24!=0))return Mg(a),void(o=X);if(z=H,d[U>>0]=0|d[c>>0],d[U+1>>0]=0|d[c+1>>0],d[U+2>>0]=0|d[c+2>>0],d[U+3>>0]=0|d[c+3>>0],d[U+4>>0]=0|d[c+4>>0],d[U+5>>0]=0|d[c+5>>0],d[U+6>>0]=0|d[c+6>>0],d[U+7>>0]=0|d[c+7>>0],f[j>>2]=0|f[N>>2],f[j+4>>2]=0|f[N+4>>2],Xj(P,z,j,69156,1,U),A=P+4|0,B=0|f[A>>2],0==(0|B)&&(D=0|f[P>>2],!(0!=(0|D))))return Mg(a),void(o=X);if(F=0|f[P>>2],0!=(0|F)){J=0|f[P>>2],K=0-J|0,O=K;break}return I=H,Yg(Q,0),d[V>>0]=0|d[P>>0],d[V+1>>0]=0|d[P+1>>0],d[V+2>>0]=0|d[P+2>>0],d[V+3>>0]=0|d[P+3>>0],d[V+4>>0]=0|d[P+4>>0],d[V+5>>0]=0|d[P+5>>0],d[V+6>>0]=0|d[P+6>>0],d[V+7>>0]=0|d[P+7>>0],f[k>>2]=0|f[Q>>2],f[k+4>>2]=0|f[Q+4>>2],Xj(a,I,k,69660,1,V),void(o=X)}f[g>>2]=0|f[c>>2],f[g+4>>2]=0|f[c+4>>2],f[h>>2]=0|f[N>>2],f[h+4>>2]=0|f[N+4>>2],L=0|Ag(n,g,h),O=L}while(0);M=O,Yg(a,M),o=X}function lh(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,n=0;n=o,o=o+48|0,(0|o)>=(0|p)&&ca(48),e=n+32|0,d=n+24|0,l=n,h=n+8|0,g=b,i=g,f[l>>2]=h,Kp(i,69199,l),j=g,f[d>>2]=0|f[c>>2],f[d+4>>2]=0|f[c+4>>2],f[e>>2]=0|f[h>>2],f[e+4>>2]=0|f[h+4>>2],k=0|Bg(j,d,e),Xh(a,k),o=n}function mh(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,m=0;m=o,o=o+48|0,(0|o)>=(0|p)&&ca(48),e=m+32|0,d=m+24|0,k=m,h=m+8|0,g=b,i=g,f[k>>2]=h,Kp(i,56362,k),j=g,f[d>>2]=0|f[c>>2],f[d+4>>2]=0|f[c+4>>2],f[e>>2]=0|f[h>>2],f[e+4>>2]=0|f[h+4>>2],zg(a,j,d,e),o=m}function nh(a,b,c){a|=0,b|=0,c|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,W=0,X=0,Y=0,Z=0,$=0,_=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,$a=0,_a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,yb=0;if(yb=o,o=o+48|0,(0|o)>=(0|p)&&ca(48),e=yb+32|0,wb=yb,Ga=yb+12|0,$=b,lb=$,f[wb>>2]=Ga,Kp(lb,64797,wb),g=0|f[Ga>>2],t=(0|g)<0,t&&(E=$,I=$,J=0|sp(I,69160),Ar(E,J,64813)),K=0|f[Ga>>2],L=0!=(0|K),L&&(M=0|f[Ga>>2],N=2147483647/(0|M)&-1,O=0|f[c>>2],P=0|f[O>>2],Q=P>>>11,R=8&Q,S=0!=(0|R),T=0|f[c>>2],S?(U=0|f[T>>2],W=U>>>11,X=496&W,Y=X>>4,ba=Y):(Z=T+12|0,_=0|f[Z>>2],ba=_),(0|N)<(0|ba)&&(da=$,ea=$,fa=0|sp(ea,69160),Ar(da,fa,56432))),ga=0|f[c>>2],ha=0|f[ga>>2],ia=ha>>>11,ja=8&ia,la=0!=(0|ja),ma=0|f[c>>2],la?(na=0|f[ma>>2],oa=na>>>11,pa=496&oa,qa=pa>>4,wa=qa):(ra=ma+12|0,sa=0|f[ra>>2],wa=sa),ta=0|f[Ga>>2],ua=0|V(wa,ta),va=ua,xa=$,ya=va,za=0|ng(xa,0,ya),Ra=za,Aa=$,Ba=Ra,f[e>>2]=0|f[c>>2],f[e+4>>2]=0|f[c+4>>2],Hg(Aa,Ba,e),Ca=Ra,Da=0|f[Ca>>2],Ea=Da>>>11,Fa=8&Ea,Ha=0!=(0|Fa),Ia=Ra,Ja=Ia+12|0,Ha?Ma=Ja:(Ka=Ja+8|0,La=0|f[Ka>>2],Ma=La),ab=Ma,Na=va,(0|Na)>0){for(Pa=0|f[c>>2],Qa=0|f[Pa>>2],Sa=Qa>>>11,Ta=8&Sa,Ua=0!=(0|Ta),Va=0|f[c>>2],Ua?(Wa=0|f[Va>>2],Xa=Wa>>>11,Ya=496&Xa,Za=Ya>>4,bb=Za):($a=Va+12|0,_a=0|f[$a>>2],bb=_a),ka=bb,cb=ab,db=0|f[c>>2],eb=0|f[db>>2],fb=eb>>>11,gb=8&fb,hb=0!=(0|gb),ib=0|f[c>>2],jb=ib+12|0,hb?ob=jb:(kb=jb+8|0,mb=0|f[kb>>2],ob=mb),nb=ka,$w(0|cb,0|ob,0|nb);;){if(pb=ka,qb=va,rb=(0|qb)/2&-1,sb=(0|pb)<=(0|rb),tb=ab,ub=ka,vb=tb+ub|0,h=ab,!sb)break;i=ka,$w(0|vb,0|h,0|i),j=ka,k=j<<1,ka=k}l=va,m=ka,n=l-m|0,$w(0|vb,0|h,0|n)}return q=ab,r=Ra,s=0|f[r>>2],u=s>>>11,v=8&u,w=0!=(0|v),x=Ra,w?(y=0|f[x>>2],z=y>>>11,A=496&z,B=A>>4,G=B,F=q+G|0,d[F>>0]=0,H=Ra,lg(a,H),void(o=yb)):(C=x+12|0,D=0|f[C>>2],G=D,F=q+G|0,d[F>>0]=0,H=Ra,lg(a,H),void(o=yb))}function oh(a,b,c){a|=0,b|=0,c|=0;var e=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,I=0;if(I=o,o=o+96|0,(0|o)>=(0|p)&&ca(96),i=I+80|0,h=I+72|0,g=I+64|0,e=I+56|0,F=I+8|0,E=I,y=I+40|0,z=I+32|0,B=I+16|0,x=b,C=x,f[E>>2]=y,G=E+4|0,f[G>>2]=z,D=0|Kp(C,56367,E),A=D,j=A,2==(0|j))return l=x,f[e>>2]=0|f[y>>2],f[e+4>>2]=0|f[y+4>>2],Fg(l,e),m=x,n=0|f[y>>2],q=0|f[z>>2],f[g>>2]=0|f[c>>2],f[g+4>>2]=0|f[c+4>>2],Kg(a,m,g,n,q),void(o=I);r=A,s=1!=(0|r),t=x,s&&(u=x,v=0|sp(u,69160),w=A,Yg(B,w),d[F>>0]=0|d[B>>0],d[F+1>>0]=0|d[B+1>>0],d[F+2>>0]=0|d[B+2>>0],d[F+3>>0]=0|d[B+3>>0],d[F+4>>0]=0|d[B+4>>0],d[F+5>>0]=0|d[B+5>>0],d[F+6>>0]=0|d[B+6>>0],d[F+7>>0]=0|d[B+7>>0],Dr(t,v,56371,F)),f[h>>2]=0|f[c>>2],f[h+4>>2]=0|f[c+4>>2],f[i>>2]=0|f[y>>2],f[i+4>>2]=0|f[y+4>>2],Yh(a,t,h,i),o=I}function ph(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,n=0;n=o,o=o+48|0,(0|o)>=(0|p)&&ca(48),e=n+40|0,d=n+32|0,h=n+16|0,i=n+8|0,j=n,g=b,k=g,f[d>>2]=0|f[c>>2],f[d+4>>2]=0|f[c+4>>2],Gg(i,k,d),f[h>>2]=0|f[i>>2],f[h+4>>2]=0|f[i+4>>2],l=g,f[e>>2]=0|f[h>>2],f[e+4>>2]=0|f[h+4>>2],qh(j,l,e),f[a>>2]=0|f[h>>2],f[a+4>>2]=0|f[h+4>>2],o=n}function qh(a,b,c){a|=0,b|=0,c|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,P=0,Q=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,$a=0,_a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,ib=0;ib=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),L=b,ra=0,Na=0|f[c>>2],Ca=Na,Ya=L,e=Ca,ug(Ya,e),s=Ca,t=0|f[s>>2],u=t>>>11,v=8&u,w=0!=(0|v),x=Ca,w?(y=0|f[x>>2],z=y>>>11,A=496&z,B=A>>4,F=B):(C=x+12|0,D=0|f[C>>2],F=D),E=0==(0|F);do{if(!E){if(G=Ca,H=0|f[G>>2],I=H>>>11,J=8&I,K=0!=(0|J),M=Ca,N=M+12|0,K){if(!(0!=(0|N)))break}else if(P=N+8|0,Q=0|f[P>>2],!(0!=(0|Q)))break;for(S=Ca,T=0|f[S>>2],U=T>>>11,V=8&U,X=0!=(0|V),Y=Ca,Z=Y+12|0,X?aa=Z:($=Z+8|0,_=0|f[$>>2],aa=_),W=aa,ba=Ca,da=0|f[ba>>2],ea=da>>>11,fa=8&ea,ha=0!=(0|fa),ia=Ca,ja=ia+12|0,ha?Aa=ja:(ka=ja+8|0,la=0|f[ka>>2],Aa=la),ma=Ca,na=0|f[ma>>2],oa=na>>>11,pa=8&oa,qa=0!=(0|pa),sa=Ca,qa?(ta=0|f[sa>>2],ua=ta>>>11,va=496&ua,wa=va>>4,Ba=wa):(xa=sa+12|0,ya=0|f[xa>>2],Ba=ya),za=Aa+Ba|0,ga=za,Da=W,Ea=0|d[Da>>0],Fa=Ea<<24>>24,Ga=Fa-97|0,Ha=Ga>>>0<26,Ha&&(Ia=W,Ja=0|d[Ia>>0],Ka=Ja<<24>>24,La=Ka-97|0,Ma=La>>>0<26,Oa=W,Pa=0|d[Oa>>0],Qa=Pa<<24>>24,Ra=95&Qa,Sa=Ma?Ra:Qa,Ta=255&Sa,Ua=W,d[Ua>>0]=Ta,ra=1);;){if(Va=W,Wa=Va+1|0,W=Wa,Xa=ga,!(Wa>>>0<Xa>>>0))break;$a=W,_a=0|d[$a>>0],ab=_a<<24>>24,bb=ab-65|0,cb=bb>>>0<26,cb&&(db=W,eb=0|d[db>>0],fb=eb<<24>>24,gb=fb-65|0,g=gb>>>0<26,h=W,i=0|d[h>>0],j=i<<24>>24,k=32|j,l=g?k:j,m=255&l,n=W,d[n>>0]=m,ra=1)}return q=ra,r=q<<24>>24!=0,r?(f[a>>2]=0|f[c>>2],f[a+4>>2]=0|f[c+4>>2],void(o=ib)):(Mg(a),void(o=ib))}}while(0);Mg(a),o=ib}function rh(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,n=0;n=o,o=o+48|0,(0|o)>=(0|p)&&ca(48),e=n+40|0,d=n+32|0,h=n+16|0,i=n+8|0,j=n,g=b,k=g,f[d>>2]=0|f[c>>2],f[d+4>>2]=0|f[c+4>>2],Gg(i,k,d),f[h>>2]=0|f[i>>2],f[h+4>>2]=0|f[i+4>>2],l=g,f[e>>2]=0|f[h>>2],f[e+4>>2]=0|f[h+4>>2],sh(j,l,e),f[a>>2]=0|f[h>>2],f[a+4>>2]=0|f[h+4>>2],o=n}function sh(a,b,c){a|=0,b|=0,c|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,$a=0,_a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,$b=0,_b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,yc=0,zc=0,Ac=0,Bc=0,Cc=0,Dc=0,Ec=0,Fc=0,Gc=0,Hc=0,Ic=0,Jc=0,Kc=0,Lc=0,Mc=0,Nc=0,Oc=0,Pc=0,Rc=0,Sc=0,Uc=0,Vc=0,Wc=0,Xc=0,Yc=0,Zc=0,$c=0,_c=0,ad=0,bd=0,cd=0,dd=0,ed=0,fd=0,gd=0,hd=0,id=0,jd=0,kd=0,ld=0,md=0,nd=0,od=0,pd=0,qd=0,rd=0,sd=0,ud=0,vd=0,wd=0,xd=0,yd=0,zd=0,Ad=0,Bd=0,Cd=0,Dd=0,Ed=0,Fd=0,Gd=0,Hd=0,Id=0,Jd=0,Kd=0,Ld=0,Md=0,Nd=0,Od=0,Qd=0,Rd=0,Sd=0,Td=0,Ud=0,Vd=0,Wd=0,Xd=0,Yd=0,Zd=0,$d=0,_d=0,ae=0,be=0,ce=0,de=0,fe=0,ge=0,he=0,ie=0,je=0,ke=0,le=0,me=0,ne=0,oe=0,pe=0,qe=0,re=0,se=0,te=0,ue=0,ve=0,we=0,xe=0,ye=0,ze=0,Ae=0,Be=0,Ce=0,De=0,Ee=0,Fe=0,Ge=0,He=0,Ie=0,Je=0,Ke=0,Le=0,Me=0,Ne=0,Oe=0,Pe=0,Re=0,Se=0,Te=0,Ue=0,Ve=0,We=0,Xe=0,Ye=0,Ze=0,$e=0,_e=0,af=0,bf=0,cf=0,df=0,ef=0,ff=0,gf=0,hf=0,jf=0,kf=0,lf=0,mf=0,nf=0,of=0,pf=0,qf=0,rf=0,sf=0,tf=0,uf=0,vf=0,wf=0,xf=0,yf=0,zf=0,Af=0,Bf=0,Cf=0,Df=0,Ef=0,Ff=0,Gf=0,Hf=0,If=0,Jf=0,Kf=0,Lf=0,Mf=0,Nf=0,Of=0,Pf=0,Qf=0,Rf=0,Sf=0,Tf=0,Uf=0,Vf=0,Wf=0,Yf=0,Zf=0,$f=0,_f=0,ag=0,bg=0,cg=0,dg=0,eg=0,fg=0,gg=0,hg=0,ig=0,jg=0,kg=0,mg=0,ng=0,og=0,pg=0,qg=0,rg=0,sg=0,tg=0,vg=0,wg=0,xg=0,yg=0,zg=0,Ag=0,Bg=0,Cg=0,Dg=0,Eg=0,Fg=0,Gg=0,Hg=0,Ig=0,Jg=0,Kg=0,Lg=0,Ng=0,Og=0,Pg=0,Qg=0,Rg=0,Sg=0,Tg=0,Ug=0,Vg=0,Wg=0,Xg=0,Yg=0,Zg=0,$g=0,_g=0,ah=0,bh=0,ch=0,dh=0,eh=0,fh=0,gh=0,hh=0,ih=0,jh=0,kh=0,lh=0,mh=0,nh=0,oh=0,ph=0,qh=0,rh=0,sh=0,th=0,uh=0,vh=0,wh=0,xh=0,yh=0,zh=0,Ah=0,Bh=0,Ch=0,Dh=0,Eh=0,Fh=0,Gh=0,Hh=0,Ih=0,Jh=0,Kh=0,Lh=0,Mh=0,Nh=0,Oh=0,Ph=0,Qh=0,Rh=0,Sh=0,Th=0,Uh=0,Vh=0,Wh=0,Xh=0,Yh=0,Zh=0,$h=0,_h=0,ai=0,bi=0,ci=0,di=0,ei=0,fi=0,gi=0,hi=0,ii=0,ji=0,ki=0,li=0,mi=0,oi=0,qi=0;qi=o,o=o+64|0,(0|o)>=(0|p)&&ca(64),oi=qi,qf=qi+48|0,md=b,ua=0|f[c>>2],e=ua,Fa=md,Qa=e,ug(Fa,Qa),_a=e,kb=0|f[_a>>2],vb=kb>>>11,Gb=8&vb,Rb=0!=(0|Gb),ac=e,Rb?(lc=0|f[ac>>2],wc=lc>>>11,Hc=496&wc,Sc=Hc>>4,yd=Sc):(bd=ac+12|0,nd=0|f[bd>>2],yd=nd),bi=yd,Jd=md,f[oi>>2]=qf,Ud=0|Kp(Jd,56364,oi),de=0==(0|Ud),oe=bi,ze=0==(0|oe);a:{if(!de){do{if(!ze){if(Oc=qf+4|0,Pc=0|f[Oc>>2],0==(0|Pc)&&(Rc=0|f[qf>>2],!(0!=(0|Rc))))break;if(Uc=e,Vc=0|f[Uc>>2],Wc=Vc>>>11,Xc=8&Wc,Yc=0!=(0|Xc),Zc=e,$c=Zc+12|0,Yc?cd=$c:(_c=$c+8|0,ad=0|f[_c>>2],cd=ad),wh=cd,dd=0|f[qf>>2],ed=0|f[dd>>2],fd=ed>>>11,gd=8&fd,hd=0!=(0|gd),id=0|f[qf>>2],hd?(jd=0|f[id>>2],kd=jd>>>11,ld=496&kd,od=ld>>4,rd=od):(pd=id+12|0,qd=0|f[pd>>2],rd=qd),Sh=rd,sd=Sh,0==(0|sd)){for(;;){if(ud=bi,vd=(0|ud)>0,vd?(wd=wh,xd=bi,zd=xd-1|0,Ad=wd+zd|0,Bd=0|d[Ad>>0],Cd=Bd<<24>>24,Dd=10==(0|Cd),jh=Dd):jh=0,Ed=bi,!jh)break;Fd=Ed+-1|0,bi=Fd,Gd=bi,Hd=(0|Gd)>0,Hd&&(Id=wh,Kd=bi,Ld=Kd-1|0,Md=Id+Ld|0,Nd=0|d[Md>>0],Od=Nd<<24>>24,13==(0|Od)&&(Qd=bi,Rd=Qd+-1|0,bi=Rd))}return Sd=e,(Td=0|f[Sd>>2],Vd=Td>>>11,Wd=8&Vd,Xd=0!=(0|Wd),Yd=e,Xd?(Zd=0|f[Yd>>2],$d=Zd>>>11,_d=496&$d,ae=_d>>4,fe=ae):(be=Yd+12|0,ce=0|f[be>>2],fe=ce),(0|Ed)<(0|fe))?(ge=e,he=0|f[ge>>2],ie=he>>>11,je=8&ie,ke=0!=(0|je),le=bi,ke?(Z=le,me=e,ne=0|f[me>>2],pe=ne>>>11,qe=-497&pe,re=0|f[me>>2],se=2097151&qe,te=se<<11,ue=2047&re,ve=ue|te,f[me>>2]=ve,we=Z,xe=we<<4,ye=e,Ae=0|f[ye>>2],Be=Ae>>>11,Ce=Be|xe,De=0|f[ye>>2],Ee=2097151&Ce,Fe=Ee<<11,Ge=2047&De,He=Ge|Fe,f[ye>>2]=He):(Ie=e,Je=Ie+12|0,f[Je>>2]=le),Le=wh,Me=bi,Ne=Le+Me|0,d[Ne>>0]=0,f[a>>2]=0|f[c>>2],f[a+4>>2]=0|f[c+4>>2],void(o=qi)):(Mg(a),void(o=qi))}if(Oe=Sh,Pe=bi,(0|Oe)>(0|Pe))return Mg(a),void(o=qi);if(Re=0|f[qf>>2],Se=0|f[Re>>2],Te=Se>>>11,Ue=8&Te,We=0!=(0|Ue),Xe=0|f[qf>>2],Ye=Xe+12|0,We?cf=Ye:(Ze=Ye+8|0,$e=0|f[Ze>>2],cf=$e),_e=Sh,af=_e-1|0,bf=cf+af|0,df=0|d[bf>>0],ff=df<<24>>24,lh=ff,gf=Sh,hf=1==(0|gf),jf=lh,kf=10==(0|jf),mi=hf&kf,mi&&(lf=0|f[qf>>2],mf=0|f[lf>>2],nf=mf>>>11,of=8&nf,pf=0!=(0|of),sf=0|f[qf>>2],tf=sf+12|0,pf?zf=tf:(uf=tf+8|0,vf=0|f[uf>>2],zf=vf),wf=Sh,xf=wf-1|0,yf=zf+xf|0,Af=0|d[yf>>0],Bf=Af<<24>>24,lh=Bf),Df=Sh,Ef=1==(0|Df),Ff=lh,Gf=10==(0|Ff),Ef&Gf)break a;Hf=wh,If=bi,Jf=Hf+If|0,Kf=Sh,Lf=0-Kf|0,Mf=Jf+Lf|0,Hh=Mf,Of=wh,Pf=bi,Qf=Pf-1|0,Rf=Of+Qf|0,Sf=0|d[Rf>>0],Tf=Sf<<24>>24,Uf=lh,Vf=(0|Tf)==(0|Uf);do{if(Vf){if(Wf=Sh,!((0|Wf)<=1||(Zf=0|f[qf>>2],$f=0|f[Zf>>2],_f=$f>>>11,ag=8&_f,bg=0!=(0|ag),cg=0|f[qf>>2],dg=cg+12|0,bg?jg=dg:(eg=dg+8|0,fg=0|f[eg>>2],jg=fg),gg=Hh,ig=Sh,kg=0|hv(jg,gg,ig),0==(0|kg))))break;return mg=e,ng=0|f[mg>>2],og=ng>>>11,pg=8&og,qg=0!=(0|pg),rg=bi,tg=Sh,vg=rg-tg|0,qg?(ja=vg,wg=e,xg=0|f[wg>>2],yg=xg>>>11,zg=-497&yg,Ag=0|f[wg>>2],Bg=2097151&zg,Cg=Bg<<11,Dg=2047&Ag,Fg=Dg|Cg,f[wg>>2]=Fg,Gg=ja,Hg=Gg<<4,Ig=e,Jg=0|f[Ig>>2],Kg=Jg>>>11,Lg=Kg|Hg,Ng=0|f[Ig>>2],Og=2097151&Lg,Pg=Og<<11,Rg=2047&Ng,Sg=Rg|Pg,f[Ig>>2]=Sg):(Tg=e,Ug=Tg+12|0,f[Ug>>2]=vg),Vg=wh,Wg=e,Xg=0|f[Wg>>2],Yg=Xg>>>11,Zg=8&Yg,$g=0!=(0|Zg),ah=e,$g?(bh=0|f[ah>>2],ch=bh>>>11,dh=496&ch,eh=dh>>4,ih=eh):(fh=ah+12|0,gh=0|f[fh>>2],ih=gh),hh=Vg+ih|0,d[hh>>0]=0,f[a>>2]=0|f[c>>2],f[a+4>>2]=0|f[c+4>>2],void(o=qi)}}while(0);return Mg(a),void(o=qi)}}while(0);return Mg(a),void(o=qi)}if(ze)return Mg(a),void(o=qi)}Ke=e,Ve=0|f[Ke>>2],ef=Ve>>>11,rf=8&ef,Cf=0!=(0|rf),Nf=e,Yf=Nf+12|0,Cf?kh=Yf:(hg=Yf+8|0,sg=0|f[hg>>2],kh=sg),Eg=bi,Qg=Eg-1|0,_g=kh+Qg|0,mh=0|d[_g>>0],nh=mh<<24>>24,oh=10==(0|nh),ph=e,qh=0|f[ph>>2],rh=qh>>>11,sh=8&rh,th=0!=(0|sh),uh=e;do{if(!oh){if(db=uh+12|0,th?jb=db:(eb=db+8|0,fb=0|f[eb>>2],jb=fb),gb=bi,hb=gb-1|0,ib=jb+hb|0,lb=0|d[ib>>0],mb=lb<<24>>24,!(13==(0|mb)))return Mg(a),void(o=qi);if(ob=e,pb=0|f[ob>>2],qb=pb>>>11,rb=8&qb,sb=0!=(0|rb),tb=e,ub=0|f[tb>>2],wb=ub>>>11,xb=8&wb,yb=0!=(0|xb),zb=e,sb){yb?(Ab=0|f[zb>>2],Bb=Ab>>>11,Cb=496&Bb,Db=Cb>>4,Ib=Db):(Eb=zb+12|0,Fb=0|f[Eb>>2],Ib=Fb),Hb=Ib-1|0,O=Hb,Jb=e,Kb=0|f[Jb>>2],Lb=Kb>>>11,Mb=-497&Lb,Nb=0|f[Jb>>2],Ob=2097151&Mb,Pb=Ob<<11,Qb=2047&Nb,Sb=Qb|Pb,f[Jb>>2]=Sb,Tb=O,Ub=Tb<<4,Vb=e,Wb=0|f[Vb>>2],Xb=Wb>>>11,Yb=Xb|Ub,Zb=0|f[Vb>>2],$b=2097151&Yb,_b=$b<<11,bc=2047&Zb,cc=bc|_b,f[Vb>>2]=cc;break}yb?(dc=0|f[zb>>2],ec=dc>>>11,fc=496&ec,gc=fc>>4,kc=gc):(hc=zb+12|0,ic=0|f[hc>>2],kc=ic),jc=kc-1|0,mc=e,nc=mc+12|0,f[nc>>2]=jc;break}if(vh=0|f[uh>>2],xh=vh>>>11,yh=8&xh,zh=0!=(0|yh),Ah=e,th?(zh?(Bh=0|f[Ah>>2],Ch=Bh>>>11,Dh=496&Ch,Eh=Dh>>4,Jh=Eh):(Fh=Ah+12|0,Gh=0|f[Fh>>2],Jh=Gh),Ih=Jh-1|0,s=Ih,Kh=e,Lh=0|f[Kh>>2],Mh=Lh>>>11,Nh=-497&Mh,Oh=0|f[Kh>>2],Ph=2097151&Nh,Qh=Ph<<11,Rh=2047&Oh,Th=Rh|Qh,f[Kh>>2]=Th,Uh=s,Vh=Uh<<4,Wh=e,Xh=0|f[Wh>>2],Yh=Xh>>>11,Zh=Yh|Vh,$h=0|f[Wh>>2],_h=2097151&Zh,ai=_h<<11,ci=2047&$h,di=ci|ai,f[Wh>>2]=di):(zh?(ei=0|f[Ah>>2],fi=ei>>>11,gi=496&fi,hi=gi>>4,li=hi):(ii=Ah+12|0,ji=0|f[ii>>2],li=ji),ki=li-1|0,g=e,h=g+12|0,f[h>>2]=ki),i=e,j=0|f[i>>2],k=j>>>11,l=8&k,m=0!=(0|l),n=e,m?(q=0|f[n>>2],r=q>>>11,t=496&r,u=t>>4,y=u):(v=n+12|0,w=0|f[v>>2],y=w),(0|y)>0&&(z=e,A=0|f[z>>2],B=A>>>11,C=8&B,E=0!=(0|C),F=e,G=F+12|0,E?$=G:(H=G+8|0,I=0|f[H>>2],$=I),J=e,K=0|f[J>>2],L=K>>>11,M=8&L,N=0!=(0|M),P=e,N?(Q=0|f[P>>2],R=Q>>>11,S=496&R,T=S>>4,X=T):(U=P+12|0,V=0|f[U>>2],X=V),W=X-1|0,Y=$+W|0,_=0|d[Y>>0],aa=_<<24>>24,13==(0|aa))){if(da=e,ea=0|f[da>>2],fa=ea>>>11,ga=8&fa,ha=0!=(0|ga),ia=e,ka=0|f[ia>>2],la=ka>>>11,ma=8&la,na=0!=(0|ma),oa=e,ha){na?(pa=0|f[oa>>2],qa=pa>>>11,ra=496&qa,sa=ra>>4,xa=sa):(ta=oa+12|0,va=0|f[ta>>2],xa=va),wa=xa-1|0,D=wa,ya=e,za=0|f[ya>>2],Aa=za>>>11,Ba=-497&Aa,Ca=0|f[ya>>2],Da=2097151&Ba,Ea=Da<<11,Ga=2047&Ca,Ha=Ga|Ea,f[ya>>2]=Ha,Ia=D,Ja=Ia<<4,Ka=e,La=0|f[Ka>>2],Ma=La>>>11,Na=Ma|Ja,Oa=0|f[Ka>>2],Pa=2097151&Na,Ra=Pa<<11,Sa=2047&Oa,Ta=Sa|Ra,f[Ka>>2]=Ta;break}na?(Ua=0|f[oa>>2],Va=Ua>>>11,Wa=496&Va,Xa=Wa>>4,ab=Xa):(Ya=oa+12|0,Za=0|f[Ya>>2],ab=Za),$a=ab-1|0,bb=e,cb=bb+12|0,f[cb>>2]=$a;break}}while(0);oc=e,pc=0|f[oc>>2],qc=pc>>>11,rc=8&qc,sc=0!=(0|rc),tc=e,uc=tc+12|0,sc?Mc=uc:(vc=uc+8|0,xc=0|f[vc>>2],Mc=xc),yc=e,zc=0|f[yc>>2],Ac=zc>>>11,Bc=8&Ac,Cc=0!=(0|Bc),Dc=e,Cc?(Ec=0|f[Dc>>2],Fc=Ec>>>11,Gc=496&Fc,Ic=Gc>>4,Nc=Ic):(Jc=Dc+12|0,Kc=0|f[Jc>>2],Nc=Kc),Lc=Mc+Nc|0,d[Lc>>0]=0,f[a>>2]=0|f[c>>2],f[a+4>>2]=0|f[c+4>>2],o=qi}function th(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,n=0;n=o,o=o+48|0,(0|o)>=(0|p)&&ca(48),e=n+40|0,d=n+32|0,h=n+16|0,i=n+8|0,j=n,g=b,k=g,f[d>>2]=0|f[c>>2],f[d+4>>2]=0|f[c+4>>2],Gg(i,k,d),f[h>>2]=0|f[i>>2],f[h+4>>2]=0|f[i+4>>2],l=g,f[e>>2]=0|f[h>>2],f[e+4>>2]=0|f[h+4>>2],uh(j,l,e),f[a>>2]=0|f[h>>2],f[a+4>>2]=0|f[h+4>>2],o=n}function uh(a,b,c){a|=0,b|=0,c|=0;var e=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,$a=0,_a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Vb=0;if(Vb=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),wa=b,s=0|f[c>>2],Ha=s,D=wa,O=Ha,ug(D,O),Z=Ha,ha=0|f[Z>>2],ia=ha>>>11,ja=8&ia,ka=0!=(0|ja),la=Ha,ka?(ma=0|f[la>>2],na=ma>>>11,oa=496&na,pa=oa>>4,ta=pa):(qa=la+12|0,ra=0|f[qa>>2],ta=ra),!((0|ta)>0))return Mg(a),void(o=Vb);for(ua=Ha,va=0|f[ua>>2],xa=va>>>11,ya=8&xa,za=0!=(0|ya),Aa=Ha,Ba=Aa+12|0,za?Ea=Ba:(Ca=Ba+8|0,Da=0|f[Ca>>2],Ea=Da),bb=Ea,Fa=bb,mb=Fa,Ga=mb,Ia=Ha,Ja=0|f[Ia>>2],Ka=Ja>>>11,La=8&Ka,Ma=0!=(0|La),Na=Ha,Ma?(Oa=0|f[Na>>2],Pa=Oa>>>11,Qa=496&Pa,Ra=Qa>>4,Wa=Ra):(Ta=Na+12|0,Ua=0|f[Ta>>2],Wa=Ua),Va=Ga+Wa|0,xb=Va;;){if(Xa=mb,Ya=xb,!(Xa>>>0<Ya>>>0))break;if($a=mb,_a=xb,ab=0|Qg($a,_a),Ib=ab,cb=mb,db=Ib,eb=cb+db|0,fb=xb,eb>>>0>=fb>>>0)break;hb=Ib,ib=mb,jb=ib+hb|0,mb=jb}kb=mb,lb=bb,nb=kb,ob=lb,pb=nb-ob|0,Sa=pb,qb=Ha,rb=0|f[qb>>2],sb=rb>>>11,tb=8&sb,ub=0!=(0|tb),vb=Ha,wb=vb+12|0,ub?Cb=wb:(yb=wb+8|0,zb=0|f[yb>>2],Cb=zb),Ab=Sa,Bb=Cb+Ab|0,Db=0|d[Bb>>0],Eb=Db<<24>>24,Fb=10==(0|Eb),Gb=Sa,Hb=(0|Gb)>0,Tb=Fb&Hb,Tb&&(Jb=Ha,Kb=0|f[Jb>>2],Lb=Kb>>>11,Mb=8&Lb,Nb=0!=(0|Mb),Ob=Ha,Pb=Ob+12|0,Nb?i=Pb:(Qb=Pb+8|0,Rb=0|f[Qb>>2],i=Rb),Sb=Sa,g=Sb-1|0,h=i+g|0,j=0|d[h>>0],k=j<<24>>24,13==(0|k)&&(m=Sa,n=m+-1|0,Sa=n)),q=Ha,r=0|f[q>>2],t=r>>>11,u=8&t,v=0!=(0|u),w=Sa,v?(e=w,x=Ha,y=0|f[x>>2],z=y>>>11,A=-497&z,B=0|f[x>>2],C=2097151&A,E=C<<11,F=2047&B,G=F|E,f[x>>2]=G,H=e,I=H<<4,J=Ha,K=0|f[J>>2],L=K>>>11,M=L|I,N=0|f[J>>2],P=2097151&M,Q=P<<11,R=2047&N,S=R|Q,f[J>>2]=S):(T=Ha,U=T+12|0,f[U>>2]=w),V=Ha,W=0|f[V>>2],X=W>>>11,Y=8&X,$=0!=(0|Y),_=Ha,aa=_+12|0,$?ga=aa:(ba=aa+8|0,da=0|f[ba>>2],ga=da),ea=Sa,fa=ga+ea|0,d[fa>>0]=0,f[a>>2]=0|f[c>>2],f[a+4>>2]=0|f[c+4>>2],o=Vb}function vh(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,n=0;n=o,o=o+48|0,(0|o)>=(0|p)&&ca(48),e=n+40|0,d=n+32|0,h=n+16|0,i=n+8|0,j=n,g=b,k=g,f[d>>2]=0|f[c>>2],f[d+4>>2]=0|f[c+4>>2],Gg(i,k,d),f[h>>2]=0|f[i>>2],f[h+4>>2]=0|f[i+4>>2],l=g,f[e>>2]=0|f[h>>2],f[e+4>>2]=0|f[h+4>>2],wh(j,l,e),f[a>>2]=0|f[h>>2],f[a+4>>2]=0|f[h+4>>2],o=n}function wh(a,b,c){a|=0,b|=0,c|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,va=0;for(va=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),B=b,ha=0,sa=0|f[c>>2],ra=sa,ta=B,e=ra,ug(ta,e),g=ra,h=0|f[g>>2],i=h>>>11,j=8&i,k=0!=(0|j),l=ra,m=l+12|0,k?r=m:(n=m+8|0,q=0|f[n>>2],r=q),M=r,s=ra,t=0|f[s>>2],u=t>>>11,v=8&u,w=0!=(0|v),x=ra,y=x+12|0,w?Q=y:(z=y+8|0,A=0|f[z>>2],Q=A),C=ra,D=0|f[C>>2],E=D>>>11,F=8&E,G=0!=(0|F),H=ra,G?(I=0|f[H>>2],J=I>>>11,K=496&J,L=K>>4,R=L):(N=H+12|0,O=0|f[N>>2],R=O),P=Q+R|0,X=P;;){if(S=M,T=X,!(S>>>0<T>>>0))break;V=M,W=0|d[V>>0],Y=W<<24>>24,Z=Y-65|0,$=Z>>>0<26,$&&(_=M,aa=0|d[_>>0],ba=aa<<24>>24,da=ba-65|0,ea=da>>>0<26,fa=M,ga=0|d[fa>>0],ia=ga<<24>>24,ja=32|ia,ka=ea?ja:ia,la=255&ka,ma=M,d[ma>>0]=la,ha=1),na=M,oa=na+1|0,M=oa}return pa=ha,qa=pa<<24>>24!=0,qa?(f[a>>2]=0|f[c>>2],f[a+4>>2]=0|f[c+4>>2],void(o=va)):(Mg(a),void(o=va))}function xh(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,t=0,u=0,v=0,w=0,x=0,y=0,A=0;A=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),u=0|f[c>>2],t=u,v=t,w=0|f[v>>2],x=w>>>11,y=8&x,d=0!=(0|y),e=t,d?(g=0|f[e>>2],h=g>>>11,i=496&h,j=i>>4,n=j):(k=e+12|0,l=0|f[k>>2],n=l),m=0==(0|n),q=1&m,r=255&q,Xh(a,r),o=A}function yh(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,x=0,z=0;if(z=o,o=o+48|0,(0|o)>=(0|p)&&ca(48),e=z+32|0,d=z+24|0,x=z,r=z+8|0,q=b,t=q,f[x>>2]=r,Kp(t,69199,x),u=r+4|0,v=0|f[u>>2],!(16==(0|v)))return l=0,k=1&l,m=255&k,s=m,n=s,Xh(a,n),void(o=z);g=q,f[d>>2]=0|f[c>>2],f[d+4>>2]=0|f[c+4>>2],f[e>>2]=0|f[r>>2],f[e+4>>2]=0|f[r+4>>2],h=0|Cg(g,d,e),i=255&h,j=0!=(0|i),l=j,k=1&l,m=255&k,s=m,n=s,Xh(a,n),o=z}function zh(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,l=0;l=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),d=l+8|0,e=b,h=e,f[d>>2]=0|f[c>>2],f[d+4>>2]=0|f[c+4>>2],i=0|Rg(h,d),g=i,j=g,Yg(a,j),o=l}function Ah(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,da=0;if(da=o,o=o+64|0,(0|o)>=(0|p)&&ca(64),g=da+48|0,e=da+40|0,d=da+32|0,aa=da,X=da+16|0,Z=da+8|0,D=b,$=D,f[aa>>2]=X,Kp($,69199,aa),_=X+4|0,h=0|f[_>>2],!(3==(0|h)))return P=D,f[d>>2]=0|f[X>>2],f[d+4>>2]=0|f[X+4>>2],yg(Z,P,d),f[X>>2]=0|f[Z>>2],f[X+4>>2]=0|f[Z+4>>2],Q=D,f[e>>2]=0|f[c>>2],f[e+4>>2]=0|f[c+4>>2],f[g>>2]=0|f[X>>2],f[g+4>>2]=0|f[X+4>>2],R=0|Wh(Q,e,g,0),O=R,S=O,T=-1!=(0|S),U=1&T,V=255&U,Y=V,W=Y,Xh(a,W),void(o=da);j=0|f[c>>2],k=0|f[j>>2],l=k>>>11,m=8&l,n=0!=(0|m),q=0|f[c>>2],r=q+12|0,n?I=r:(s=r+8|0,t=0|f[s>>2],I=t),u=0|f[X>>2],v=0|f[c>>2],w=0|f[v>>2],x=w>>>11,y=8&x,z=0!=(0|y),A=0|f[c>>2],z?(B=0|f[A>>2],C=B>>>11,E=496&C,F=E>>4,J=F):(G=A+12|0,H=0|f[G>>2],J=H),K=0|vv(I,u,J),L=0!=(0|K),M=1&L,N=255&M,Y=N,W=Y,Xh(a,W),o=da}function Bh(a,b,c){a|=0,b|=0,c|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,D=0,E=0,F=0,G=0,H=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Ba=0;Ba=o,o=o+128|0,(0|o)>=(0|p)&&ca(128),k=Ba+112|0,j=Ba+104|0,i=Ba+96|0,h=Ba+88|0,g=Ba+80|0,e=Ba+72|0,ya=Ba+8|0,xa=Ba,S=Ba+60|0,ba=Ba+56|0,na=Ba+48|0,va=Ba+32|0,l=Ba+24|0,m=Ba+16|0,H=b,n=H,f[xa>>2]=S,za=xa+4|0,f[za>>2]=ba,Kp(n,68856,xa),q=0|f[ba>>2],r=2==(0|q);do{if(!r){if(ta=0,w=0|f[ba>>2],(0|w)>0){y=0|f[S>>2],f[na>>2]=0|f[y>>2],f[na+4>>2]=0|f[y+4>>2];break}Mg(va),f[na>>2]=0|f[va>>2],f[na+4>>2]=0|f[va+4>>2];break}s=0|f[S>>2],t=s+8|0,u=0|f[t>>2],ta=u,v=0|f[S>>2],f[na>>2]=0|f[v>>2],f[na+4>>2]=0|f[v+4>>2]}while(0);return z=H,f[e>>2]=0|f[na>>2],f[e+4>>2]=0|f[na+4>>2],Fg(z,e),f[g>>2]=0|f[c>>2],f[g+4>>2]=0|f[c+4>>2],A=0|Lg(g,-1),ua=A,B=ta,(0|B)<0&&(D=ua,E=ta,F=E+D|0,ta=F,G=ta,(0|G)<0)?(Mg(a),void(o=Ba)):(J=ta,K=ua,(0|J)>=(0|K)?(Mg(a),void(o=Ba)):(M=ta,f[h>>2]=0|f[c>>2],f[h+4>>2]=0|f[c+4>>2],N=0|Og(h,0,M),ta=N,O=na+4|0,P=0|f[O>>2],wa=16==(0|P),wa||(Q=H,f[i>>2]=0|f[na>>2],f[i+4>>2]=0|f[na+4>>2],Wg(m,Q,i),f[l>>2]=0|f[m>>2],f[l+4>>2]=0|f[m+4>>2],R=l+4|0,T=0|f[R>>2],U=0==(0|T),U&&(V=0|f[l>>2],0!=(0|V)||(X=H,Y=H,Z=0|sp(Y,69204),d[ya>>0]=0|d[na>>0],d[ya+1>>0]=0|d[na+1>>0],d[ya+2>>0]=0|d[na+2>>0],d[ya+3>>0]=0|d[na+3>>0],d[ya+4>>0]=0|d[na+4>>0],d[ya+5>>0]=0|d[na+5>>0],d[ya+6>>0]=0|d[na+6>>0],d[ya+7>>0]=0|d[na+7>>0],Dr(X,Z,56338,ya))),f[na>>2]=0|f[l>>2],f[na+4>>2]=0|f[l+4>>2]),$=H,_=ta,f[j>>2]=0|f[c>>2],f[j+4>>2]=0|f[c+4>>2],f[k>>2]=0|f[na>>2],f[k+4>>2]=0|f[na+4>>2],aa=0|Wh($,j,k,_),ta=aa,da=ta,-1==(0|da)?(Mg(a),void(o=Ba)):(fa=0|f[c>>2],ga=0|f[fa>>2],ha=ga>>>11,ia=8&ha,ja=0!=(0|ia),ka=0|f[c>>2],la=ka+12|0,ja?qa=la:(ma=la+8|0,oa=0|f[ma>>2],qa=oa),pa=ta,ra=0|Vh(qa,pa),ta=ra,sa=ta,Yg(a,sa),void(o=Ba))))}function Ch(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,r=0;r=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),n=r,h=r+16|0,i=r+8|0,g=b,j=g,f[n>>2]=h,k=0|Kp(j,56364,n),l=1==(0|k),l&&(m=g,d=0|f[c>>2],e=0|f[h>>2],Ig(i,m,d,e)),f[a>>2]=0|f[c>>2],f[a+4>>2]=0|f[c+4>>2],o=r}function Dh(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,m=0;m=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),k=m,e=m+8|0,d=b,g=d,f[k>>2]=e,Kp(g,56362,k),h=d,i=0|f[c>>2],j=0|f[e>>2],Ig(a,h,i,j),o=m}function Eh(a,b,c){a|=0,b|=0,c|=0;var d=0,g=0,h=0,i=0,k=0;k=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),d=k+8|0,f[d>>2]=0|f[c>>2],f[d+4>>2]=0|f[c+4>>2],h=0|Lg(d,-1),g=h,i=g,Yg(a,i),o=k}function Fh(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,m=0;m=o,o=o+48|0,(0|o)>=(0|p)&&ca(48),e=m+32|0,d=m+24|0,h=m+8|0,i=m,g=b,j=g,f[d>>2]=0|f[c>>2],f[d+4>>2]=0|f[c+4>>2],Gg(h,j,d),k=g,f[e>>2]=0|f[h>>2],f[e+4>>2]=0|f[h+4>>2],Gh(i,k,e),f[a>>2]=0|f[h>>2],f[a+4>>2]=0|f[h+4>>2],o=m}function Gh(a,b,c){a|=0,b|=0,c|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Fa=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,$a=0,_a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,$b=0;if($b=o,o=o+64|0,(0|o)>=(0|p)&&ca(64),e=$b+48|0,Ca=b,f[e>>2]=0|f[c>>2],f[e+4>>2]=0|f[c+4>>2],ka=0|Lg(e,-1),Na=ka,oa=0|f[c>>2],pa=0|f[oa>>2],qa=pa>>>11,ra=8&qa,sa=0!=(0|ra),ta=0|f[c>>2],sa?(ua=0|f[ta>>2],va=ua>>>11,wa=496&va,xa=wa>>4,Aa=xa):(ya=ta+12|0,za=0|f[ya>>2],Aa=za),Ya=Aa,Ba=Na,Da=Ya,(0|Ba)==(0|Da)){Xb=0|f[c>>2],t=Xb,Yb=Ca,h=t,ug(Yb,h),i=t,j=0|f[i>>2],k=j>>>11,l=8&k,m=0!=(0|l),n=t,m?(q=0|f[n>>2],r=q>>>11,s=496&r,u=s>>4,y=u):(v=n+12|0,w=0|f[v>>2],y=w),x=(0|y)>1;a:if(x)for(z=t,A=0|f[z>>2],B=A>>>11,C=8&B,D=0!=(0|C),F=t,G=F+12|0,D?J=G:(H=G+8|0,I=0|f[H>>2],J=I),E=J,K=E,L=t,M=0|f[L>>2],N=M>>>11,O=8&N,Q=0!=(0|O),R=t,Q?(S=0|f[R>>2],T=S>>>11,U=496&T,V=U>>4,Z=V):(W=R+12|0,X=0|f[W>>2],Z=X),Y=K+Z|0,_=Y+-1|0,P=_;;){if(aa=E,ba=P,!(aa>>>0<ba>>>0))break a;ea=E,fa=0|d[ea>>0],$=fa,ga=P,ha=0|d[ga>>0],ia=E,ja=ia+1|0,E=ja,d[ia>>0]=ha,la=$,ma=P,na=ma+-1|0,P=na,d[ma>>0]=la}return f[a>>2]=0|f[c>>2],f[a+4>>2]=0|f[c+4>>2],void(o=$b)}if(Fa=Na,(0|Fa)>1){for(Ha=Ca,Ia=0|f[c>>2],ug(Ha,Ia),Ja=0|f[c>>2],Ka=0|f[Ja>>2],La=Ka>>>11,Ma=8&La,Oa=0!=(0|Ma),Pa=0|f[c>>2],Oa?(Qa=0|f[Pa>>2],Ra=Qa>>>11,Sa=496&Ra,Ta=Sa>>4,Wa=Ta):(Ua=Pa+12|0,Va=0|f[Ua>>2],Wa=Va),Ya=Wa,Xa=Ca,Za=Ya,$a=0|Jc(Xa,Za),hb=$a,_a=hb,sb=_a,ab=hb,bb=Ya,cb=ab+bb|0,Db=cb,db=hb,eb=0|f[c>>2],fb=0|f[eb>>2],gb=fb>>>11,ib=8&gb,jb=0!=(0|ib),kb=0|f[c>>2],lb=kb+12|0,jb?pb=lb:(mb=lb+8|0,nb=0|f[mb>>2],pb=nb),ob=Ya,$w(0|db,0|pb,0|ob),qb=0|f[c>>2],rb=0|f[qb>>2],tb=rb>>>11,ub=8&tb,vb=0!=(0|ub),wb=0|f[c>>2],xb=wb+12|0,vb?Cb=xb:(yb=xb+8|0,zb=0|f[yb>>2],Cb=zb),Ab=Ya,Bb=Cb+Ab|0,Ob=Bb;;){if(Eb=sb,Fb=Db,!(Eb>>>0<Fb>>>0))break;Hb=sb,Ib=Db,Jb=0|Qg(Hb,Ib),g=Jb,Kb=g,Lb=Ob,Mb=0-Kb|0,Nb=Lb+Mb|0,Ob=Nb,Pb=Ob,Qb=sb,Rb=g,$w(0|Pb,0|Qb,0|Rb),Sb=g,Tb=sb,Ub=Tb+Sb|0,sb=Ub}Vb=Ca,Wb=hb,xc(Vb,Wb)}f[a>>2]=0|f[c>>2],f[a+4>>2]=0|f[c+4>>2],o=$b}function Hh(a,b,c){a|=0,b|=0,c|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ka=0;Ka=o,o=o+144|0,(0|o)>=(0|p)&&ca(144),h=Ka+136|0,g=Ka+128|0,m=Ka+120|0,l=Ka+112|0,k=Ka+104|0,j=Ka+96|0,i=Ka+88|0,e=Ka+80|0,Ha=Ka+8|0,Ga=Ka,U=Ka+68|0,ea=Ka+64|0,pa=Ka+56|0,Aa=Ka+48|0,n=Ka+32|0,q=Ka+24|0,r=Ka+16|0,J=b,f[e>>2]=0|f[c>>2],f[e+4>>2]=0|f[c+4>>2],s=0|Lg(e,-1),Ea=s,t=J,f[Ga>>2]=U,Ia=Ga+4|0,f[Ia>>2]=ea,Kp(t,68856,Ga),u=0|f[ea>>2],v=2==(0|u);do{if(!v){if(N=Ea,Da=N,O=0|f[ea>>2],(0|O)>0){Q=0|f[U>>2],f[pa>>2]=0|f[Q>>2],f[pa+4>>2]=0|f[Q+4>>2];break}Mg(n),f[pa>>2]=0|f[n>>2],f[pa+4>>2]=0|f[n+4>>2];break}if(w=0|f[U>>2],f[pa>>2]=0|f[w>>2],f[pa+4>>2]=0|f[w+4>>2],x=0|f[U>>2],y=x+8|0,f[Aa>>2]=0|f[y>>2],f[Aa+4>>2]=0|f[y+4>>2],z=0|f[Aa>>2],Da=z,A=Da,(0|A)<0&&(C=Ea,D=Da,E=D+C|0,Da=E,F=Da,(0|F)<0))return H=J,f[i>>2]=0|f[pa>>2],f[i+4>>2]=0|f[pa+4>>2],Fg(H,i),Mg(a),void(o=Ka);I=Da,K=Ea,(0|I)>(0|K)&&(M=Ea,Da=M)}while(0);if(R=Da,f[j>>2]=0|f[c>>2],f[j+4>>2]=0|f[c+4>>2],S=0|Og(j,0,R),Da=S,T=Da,V=Ea,f[k>>2]=0|f[c>>2],f[k+4>>2]=0|f[c+4>>2],W=0|Og(k,T,V),Ea=W,X=J,f[l>>2]=0|f[pa>>2],f[l+4>>2]=0|f[pa+4>>2],Fg(X,l),Y=pa+4|0,Z=0|f[Y>>2],Fa=16==(0|Z),Fa||($=J,f[m>>2]=0|f[pa>>2],f[m+4>>2]=0|f[pa+4>>2],Wg(r,$,m),f[q>>2]=0|f[r>>2],f[q+4>>2]=0|f[r+4>>2],_=q+4|0,aa=0|f[_>>2],ba=0==(0|aa),ba&&(da=0|f[q>>2],0!=(0|da)||(ga=J,ha=J,ia=0|sp(ha,69204),d[Ha>>0]=0|d[pa>>0],d[Ha+1>>0]=0|d[pa+1>>0],d[Ha+2>>0]=0|d[pa+2>>0],d[Ha+3>>0]=0|d[pa+3>>0],d[Ha+4>>0]=0|d[pa+4>>0],d[Ha+5>>0]=0|d[pa+5>>0],d[Ha+6>>0]=0|d[pa+6>>0],d[Ha+7>>0]=0|d[pa+7>>0],Dr(ga,ia,56338,Ha))),f[pa>>2]=0|f[q>>2],f[pa+4>>2]=0|f[q+4>>2]),ja=J,ka=Da,f[g>>2]=0|f[c>>2],f[g+4>>2]=0|f[c+4>>2],f[h>>2]=0|f[pa>>2],f[h+4>>2]=0|f[pa+4>>2],la=0|Uh(ja,g,h,ka),Da=la,ma=Da,!((0|ma)>=0))return Mg(a),void(o=Ka);oa=0|f[c>>2],qa=0|f[oa>>2],ra=qa>>>11,sa=8&ra,ta=0!=(0|sa),ua=0|f[c>>2],va=ua+12|0,ta?za=va:(wa=va+8|0,xa=0|f[wa>>2],za=xa),ya=Da,Ba=0|Vh(za,ya),Da=Ba,Ca=Da,Yg(a,Ca),o=Ka}function Ih(a,b,c){a|=0,b|=0,c|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,la=0,ma=0,na=0,oa=0,qa=0,ra=0,ta=0,ua=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,$a=0,_a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,ub=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,$b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,rc=0,sc=0,tc=0,vc=0,wc=0,xc=0,yc=0,zc=0,Ac=0,Bc=0,Cc=0,Dc=0,Ec=0,Fc=0,Gc=0,Hc=0,Ic=0,Jc=0,Kc=0,Lc=0,Mc=0,Nc=0,Pc=0,Qc=0,Rc=0,Sc=0,Tc=0,Uc=0,Vc=0,Yc=0,Zc=0,$c=0,_c=0,ad=0,bd=0,cd=0,dd=0,ed=0,fd=0,gd=0,hd=0,id=0,jd=0,kd=0,ld=0,md=0,nd=0,od=0,pd=0,qd=0,rd=0,sd=0,td=0,ud=0,vd=0,wd=0,xd=0,yd=0,zd=0,Ad=0,Bd=0,Cd=0,Dd=0,Ed=0,Fd=0,Gd=0,Hd=0,Id=0,Jd=0,Kd=0,Ld=0,Md=0,Nd=0,Od=0,Pd=0,Qd=0,Rd=0,Sd=0,Td=0,Ud=0,Vd=0,Wd=0,Xd=0,Yd=0,Zd=0,$d=0,ae=0,be=0,ce=0,de=0,ee=0,fe=0,ge=0,he=0,ie=0,je=0,ke=0,le=0,me=0,ne=0,oe=0,pe=0,qe=0,re=0,se=0,te=0,ve=0,we=0,xe=0,ye=0,ze=0,Ae=0,Be=0,Ce=0,De=0,Fe=0,Ge=0,He=0,Ie=0,Je=0,Ke=0,Le=0,Me=0,Ne=0,Oe=0,Pe=0,Qe=0,Re=0,Se=0,Te=0,Ue=0,Ve=0,We=0,Xe=0,Ye=0,Ze=0,_e=0,bf=0,cf=0,ef=0,ff=0,gf=0,hf=0,jf=0,kf=0,lf=0,mf=0,nf=0,of=0,pf=0,qf=0,rf=0,sf=0,tf=0,uf=0,vf=0,wf=0,xf=0,yf=0,zf=0,Af=0,Bf=0,Cf=0,Df=0,Ef=0,Ff=0,Gf=0,Hf=0,Jf=0,Kf=0,Lf=0,Mf=0,Nf=0,Of=0,Qf=0,Rf=0,Sf=0,Tf=0,Uf=0;Uf=o,o=o+272|0,(0|o)>=(0|p)&&ca(272),n=Uf+256|0,m=Uf+248|0,l=Uf+240|0,k=Uf+232|0,j=Uf+224|0,i=Uf+216|0,h=Uf+208|0,g=Uf+200|0,u=Uf+192|0,t=Uf+184|0,s=Uf+176|0,r=Uf+168|0,q=Uf+160|0,e=Uf+152|0,Rf=Uf,Ne=Uf+136|0,G=Uf+112|0,R=Uf+104|0,aa=Uf+96|0,ma=Uf+88|0,yb=Uf+64|0,zc=Uf+40|0,Kc=Uf+32|0,Vc=Uf+24|0,rd=Uf+8|0,Cd=b,Mg(Ne),Ye=1,hf=0,f[G>>2]=0,Dd=Cd,f[Rf>>2]=Ne,Sf=Rf+4|0,f[Sf>>2]=G,Od=0|Kp(Dd,56334,Rf),Ce=Od,Zd=0|f[G>>2],ie=(0|Zd)>0,te=Ce,xe=2==(0|te),ye=ie?xe:0,ze=1&ye,tf=ze,Ae=Ce,Be=2==(0|Ae);do{if(Be){if(De=0|f[G>>2],!(1==(0|De))){hf=1;break}return Fe=0|f[c>>2],Ge=0|f[Fe>>2],He=Ge>>>11,Ie=8&He,Je=0!=(0|Ie),Ke=0|f[c>>2],Je?(Le=0|f[Ke>>2],Me=Le>>>11,Oe=496&Me,Pe=Oe>>4,Te=Pe):(Qe=Ke+12|0,Re=0|f[Qe>>2],Te=Re),Se=0==(0|Te),Ue=Cd,Se?(In(a,Ue,0),void(o=Uf)):(Mn(a,Ue,1,c),void(o=Uf))}}while(0);Ve=Ce,We=0==(0|Ve);do{if(We)Tf=13;else{if(Xe=Ne+4|0,Ze=0|f[Xe>>2],0==(0|Ze)&&(_e=0|f[Ne>>2],!(0!=(0|_e)))){Tf=13;break}if(bf=Ne+4|0,cf=0|f[bf>>2],!(16==(0|cf))){Jf=Cd,f[e>>2]=0|f[c>>2],f[e+4>>2]=0|f[c+4>>2],Eg(Jf,e);break}Ye=1,ef=0|f[Ne>>2],ff=0|f[ef>>2],gf=ff>>>11,jf=8&gf,kf=0!=(0|jf),lf=0|f[Ne>>2],kf?(mf=0|f[lf>>2],nf=mf>>>11,of=496&nf,pf=of>>4,uf=pf):(qf=lf+12|0,rf=0|f[qf>>2],uf=rf),sf=1==(0|uf),sf&&(vf=0|f[Ne>>2],wf=0|f[vf>>2],xf=wf>>>11,yf=8&xf,zf=0!=(0|yf),Af=0|f[Ne>>2],Bf=Af+12|0,zf?Gf=Bf:(Cf=Bf+8|0,Df=0|f[Cf>>2],Gf=Df),Ff=0|d[Gf>>0],Hf=Ff<<24>>24,32==(0|Hf)&&(Ye=0))}}while(0);13==(0|Tf)&&(Ye=0),Kf=Cd,Ln(ma,Kf),f[R>>2]=0|f[ma>>2],f[R+4>>2]=0|f[ma+4>>2],Ef=0,Lf=Ye,Mf=0==(0|Lf);a:do{if(Mf)for(xa=1,Ia=0,Nf=0|f[c>>2],Of=0|f[Nf>>2],w=Of>>>11,x=8&w,y=0!=(0|x),z=0|f[c>>2],y?(A=0|f[z>>2],B=A>>>11,C=496&B,D=C>>4,H=D):(E=z+12|0,F=0|f[E>>2],H=F),Ta=H,I=Cd,J=0|Wc(I),nb=J,K=Ef,v=K,Ia=K;;){if(L=Ia,M=Ta,!((0|L)<(0|M)))break a;if(O=0|f[c>>2],P=0|f[O>>2],Q=P>>>11,S=8&Q,T=0!=(0|S),U=0|f[c>>2],V=U+12|0,T?_=V:(W=V+8|0,X=0|f[W>>2],_=X),Y=Ia,Z=Y+1|0,Ia=Z,$=_+Y|0,ba=0|d[$>>0],da=255&ba,cb=da,ea=xa,fa=ea<<24>>24!=0,ga=cb,ha=32==(0|ga),fa){if(!(ha||(ia=cb,ja=ia-9|0,ja>>>0<5))){if(na=Ia,v=na,xa=0,oa=tf,!(0!=(0|oa)))continue;if(qa=0|f[G>>2],ra=hf,(0|qa)<=(0|ra))break a;continue}la=Ia,Ef=la}else ha||(ta=cb,ua=ta-9|0,ua>>>0<5)?(wa=Cd,ya=Cd,za=Ef,Aa=v,Ba=Ef,Ca=Aa-Ba|0,f[q>>2]=0|f[c>>2],f[q+4>>2]=0|f[c+4>>2],Pg(yb,ya,q,za,Ca),f[r>>2]=0|f[R>>2],f[r+4>>2]=0|f[R+4>>2],f[s>>2]=0|f[yb>>2],f[s+4>>2]=0|f[yb+4>>2],Zn(wa,r,s),Da=Cd,Ea=nb,Xc(Da,Ea),xa=1,Fa=Ia,Ef=Fa,Ga=tf,0!=(0|Ga)&&(Ja=hf,Ka=Ja+1|0,hf=Ka)):(La=Ia,v=La)}else{if(Ma=Ye,!(1==(0|Ma))){wc=Cd,f[i>>2]=0|f[c>>2],f[i+4>>2]=0|f[c+4>>2],Eg(wc,i);break}for(Oa=0|f[c>>2],Pa=0|f[Oa>>2],Qa=Pa>>>11,Ra=8&Qa,Sa=0!=(0|Ra),Ua=0|f[c>>2],Sa?(Va=0|f[Ua>>2],Wa=Va>>>11,Xa=496&Wa,Ya=Xa>>4,_a=Ya):(Za=Ua+12|0,$a=0|f[Za>>2],_a=$a),Jb=_a,ab=0|f[Ne>>2],bb=0|f[ab>>2],db=bb>>>11,eb=8&db,fb=0!=(0|eb),gb=0|f[Ne>>2],fb?(hb=0|f[gb>>2],ib=hb>>>11,jb=496&ib,kb=jb>>4,ob=kb):(lb=gb+12|0,mb=0|f[lb>>2],ob=mb),Ub=ob,dc=0,pb=Cd,qb=0|Wc(pb),oc=qb;;){if(rb=dc,sb=Jb,!((0|rb)<(0|sb)))break;if(ub=Ub,(0|ub)>0){if(wb=0|f[Ne>>2],xb=0|f[wb>>2],zb=xb>>>11,Ab=8&zb,Bb=0!=(0|Ab),Cb=0|f[Ne>>2],Db=Cb+12|0,Bb?Yb=Db:(Eb=Db+8|0,Fb=0|f[Eb>>2],Yb=Fb),Gb=Ub,Hb=0|f[c>>2],Ib=0|f[Hb>>2],Kb=Ib>>>11,Lb=8&Kb,Mb=0!=(0|Lb),Nb=0|f[c>>2],Ob=Nb+12|0,Mb?Tb=Ob:(Pb=Ob+8|0,Qb=0|f[Pb>>2],Tb=Qb),Rb=dc,Sb=Tb+Rb|0,Vb=Jb,Wb=dc,Xb=Vb-Wb|0,Zb=0|Rh(Yb,Gb,Sb,Xb),v=Zb,$b=v,(0|$b)<0)break}else ac=dc,f[t>>2]=0|f[c>>2],f[t+4>>2]=0|f[c+4>>2],bc=0|Og(t,ac,1),v=bc;if(cc=Cd,ec=Cd,fc=dc,gc=v,f[u>>2]=0|f[c>>2],f[u+4>>2]=0|f[c+4>>2],Pg(zc,ec,u,fc,gc),f[g>>2]=0|f[R>>2],f[g+4>>2]=0|f[R+4>>2],f[h>>2]=0|f[zc>>2],f[h+4>>2]=0|f[zc+4>>2],Zn(cc,g,h),hc=Cd,ic=oc,Xc(hc,ic),jc=v,kc=Ub,lc=jc+kc|0,mc=dc,nc=mc+lc|0,dc=nc,pc=tf,0!=(0|pc)&&(rc=0|f[G>>2],sc=hf,tc=sc+1|0,hf=tc,(0|rc)<=(0|tc)))break}vc=dc,Ef=vc}}while(0);xc=0|f[c>>2],yc=0|f[xc>>2],Ac=yc>>>11,Bc=8&Ac,Cc=0!=(0|Bc),Dc=0|f[c>>2],Cc?(Ec=0|f[Dc>>2],Fc=Ec>>>11,Gc=496&Fc,Hc=Gc>>4,Mc=Hc):(Ic=Dc+12|0,Jc=0|f[Ic>>2],Mc=Jc),Lc=(0|Mc)>0;do{if(Lc){if(Nc=tf,!(0!=(0|Nc)||(Pc=0|f[c>>2],Qc=0|f[Pc>>2],Rc=Qc>>>11,Sc=8&Rc,Tc=0!=(0|Sc),Uc=0|f[c>>2],Tc?(Yc=0|f[Uc>>2],Zc=Yc>>>11,$c=496&Zc,_c=$c>>4,ed=_c):(ad=Uc+12|0,bd=0|f[ad>>2],ed=bd),cd=Ef,dd=(0|ed)>(0|cd),fd=0|f[G>>2],hd=(0|fd)<0,dd|hd)))break;id=0|f[c>>2],jd=0|f[id>>2],kd=jd>>>11,ld=8&kd,md=0!=(0|ld),nd=0|f[c>>2],md?(od=0|f[nd>>2],pd=od>>>11,qd=496&pd,sd=qd>>4,xd=sd):(td=nd+12|0,ud=0|f[td>>2],xd=ud),vd=Ef,wd=(0|xd)==(0|vd),yd=Cd,wd?(f[j>>2]=0|f[c>>2],f[j+4>>2]=0|f[c+4>>2],Sh(Kc,yd,j),f[aa>>2]=0|f[Kc>>2],f[aa+4>>2]=0|f[Kc+4>>2]):(zd=Ef,Ad=0|f[c>>2],Bd=0|f[Ad>>2],Ed=Bd>>>11,Fd=8&Ed,Gd=0!=(0|Fd),Hd=0|f[c>>2],Gd?(Id=0|f[Hd>>2],Jd=Id>>>11,Kd=496&Jd,Ld=Kd>>4,Rd=Ld):(Md=Hd+12|0,Nd=0|f[Md>>2],Rd=Nd),Pd=Ef,Qd=Rd-Pd|0,f[k>>2]=0|f[c>>2],f[k+4>>2]=0|f[c+4>>2],Pg(Vc,yd,k,zd,Qd),f[aa>>2]=0|f[Vc>>2],f[aa+4>>2]=0|f[Vc+4>>2]),Sd=Cd,f[l>>2]=0|f[R>>2],f[l+4>>2]=0|f[R+4>>2],f[m>>2]=0|f[aa>>2],f[m+4>>2]=0|f[aa+4>>2],Zn(Sd,l,m)}}while(0);Td=tf,Ud=0==(0|Td),Vd=0|f[G>>2],Wd=0==(0|Vd),Qf=Ud&Wd;a:if(Qf)for(;;){if(Xd=0|f[R>>2],Yd=Xd+12|0,$d=0|f[Yd>>2],gd=$d,!((0|$d)>0))break a;if(ae=0|f[R>>2],be=ae+20|0,ce=0|f[be>>2],de=gd,ee=de-1|0,fe=ce+(ee<<3)|0,f[aa>>2]=0|f[fe>>2],f[aa+4>>2]=0|f[fe+4>>2],ge=0|f[aa>>2],he=0|f[ge>>2],je=he>>>11,ke=8&je,le=0!=(0|ke),me=0|f[aa>>2],le?(ne=0|f[me>>2],oe=ne>>>11,pe=496&oe,qe=pe>>4,ve=qe):(re=me+12|0,se=0|f[re>>2],ve=se),!(0==(0|ve)))break a;we=Cd,f[n>>2]=0|f[R>>2],f[n+4>>2]=0|f[R+4>>2],$n(rd,we,n)}f[a>>2]=0|f[R>>2],f[a+4>>2]=0|f[R+4>>2],o=Uf}function Jh(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,l=0;l=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),d=l+8|0,e=b,g=e,h=e,f[d>>2]=0|f[c>>2],f[d+4>>2]=0|f[c+4>>2],i=+ah(h,d,0),j=i,Qh(a,g,j),o=l}function Kh(a,b,c){a|=0,b|=0,c|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,w=0;if(w=o,o=o+48|0,(0|o)>=(0|p)&&ca(48),e=w+32|0,u=w+8|0,t=w,l=w+24|0,m=w+16|0,k=b,f[l>>2]=10,n=k,f[t>>2]=l,Kp(n,64768,t),q=0|f[l>>2],r=(0|q)<0,s=k,!r)return j=0|f[l>>2],f[e>>2]=0|f[c>>2],f[e+4>>2]=0|f[c+4>>2],$g(a,s,e,j,0),void(o=w);g=k,h=0|sp(g,69160),i=0|f[l>>2],Yg(m,i),d[u>>0]=0|d[m>>0],d[u+1>>0]=0|d[m+1>>0],d[u+2>>0]=0|d[m+2>>0],d[u+3>>0]=0|d[m+3>>0],d[u+4>>0]=0|d[m+4>>0],d[u+5>>0]=0|d[m+5>>0],d[u+6>>0]=0|d[m+6>>0],d[u+7>>0]=0|d[m+7>>0],Dr(s,h,56069,u)}function Lh(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,r=0;return r=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),e=r+16|0,d=r+8|0,h=b,i=h,f[d>>2]=0|f[c>>2],f[d+4>>2]=0|f[c+4>>2],j=0|iq(i,d),k=h,l=k+48|0,m=0|f[l>>2],n=(0|j)!=(0|m),n?(g=h,f[e>>2]=0|f[c>>2],f[e+4>>2]=0|f[c+4>>2],Gg(a,g,e),void(o=r)):(f[a>>2]=0|f[c>>2],f[a+4>>2]=0|f[c+4>>2],void(o=r))}function Mh(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,n=0;n=o,o=o+48|0,(0|o)>=(0|p)&&ca(48),e=n+40|0,d=n+32|0,h=n+16|0,i=n+8|0,j=n,g=b,k=g,f[d>>2]=0|f[c>>2],f[d+4>>2]=0|f[c+4>>2],Gg(i,k,d),f[h>>2]=0|f[i>>2],f[h+4>>2]=0|f[i+4>>2],l=g,f[e>>2]=0|f[h>>2],f[e+4>>2]=0|f[h+4>>2],Nh(j,l,e),f[a>>2]=0|f[h>>2],f[a+4>>2]=0|f[h+4>>2],o=n}function Nh(a,b,c){a|=0,b|=0,c|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,va=0;for(va=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),B=b,sa=0|f[c>>2],M=sa,ra=0,ta=B,e=M,ug(ta,e),g=0|f[c>>2],h=0|f[g>>2],i=h>>>11,j=8&i,k=0!=(0|j),l=0|f[c>>2],m=l+12|0,k?r=m:(n=m+8|0,q=0|f[n>>2],r=q),X=r,s=0|f[c>>2],t=0|f[s>>2],u=t>>>11,v=8&u,w=0!=(0|v),x=0|f[c>>2],y=x+12|0,w?Q=y:(z=y+8|0,A=0|f[z>>2],Q=A),C=0|f[c>>2],D=0|f[C>>2],E=D>>>11,F=8&E,G=0!=(0|F),H=0|f[c>>2],G?(I=0|f[H>>2],J=I>>>11,K=496&J,L=K>>4,R=L):(N=H+12|0,O=0|f[N>>2],R=O),P=Q+R|0,ha=P;;){if(S=X,T=ha,!(S>>>0<T>>>0))break;V=X,W=0|d[V>>0],Y=W<<24>>24,Z=Y-97|0,$=Z>>>0<26,$&&(_=X,aa=0|d[_>>0],ba=aa<<24>>24,da=ba-97|0,ea=da>>>0<26,fa=X,ga=0|d[fa>>0],ia=ga<<24>>24,ja=95&ia,ka=ea?ja:ia,la=255&ka,ma=X,d[ma>>0]=la,ra=1),na=X,oa=na+1|0,X=oa}return pa=ra,qa=pa<<24>>24!=0,qa?(f[a>>2]=0|f[c>>2],f[a+4>>2]=0|f[c+4>>2],void(o=va)):(Mg(a),void(o=va))}function Oh(a,b,c){a|=0,b|=0,c|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,ma=0;for(ma=o,o=o+48|0,(0|o)>=(0|p)&&ca(48),g=ma+40|0,e=ma+32|0,Z=ma+16|0,ja=ma,D=b,ka=0|f[c>>2],O=ka,h=D,i=O,j=0|f[i>>2],k=j>>>11,l=8&k,m=0!=(0|l),n=O,m?(q=0|f[n>>2],r=q>>>11,s=496&r,t=s>>4,w=t):(u=n+12|0,v=0|f[u>>2],w=v),In(Z,h,w),x=O,y=0|f[x>>2],z=y>>>11,A=8&z,B=0!=(0|A),C=O,E=C+12|0,B?H=E:(F=E+8|0,G=0|f[F>>2],H=G),ha=H,I=ha,J=O,K=0|f[J>>2],L=K>>>11,M=8&L,N=0!=(0|M),P=O,N?(Q=0|f[P>>2],R=Q>>>11,S=496&R,T=S>>4,X=T):(U=P+12|0,V=0|f[U>>2],X=V),W=I+X|0,ia=W;;){if(Y=ha,$=ia,!(Y>>>0<$>>>0))break;aa=D,ba=ha,da=0|d[ba>>0],ea=255&da,Yg(ja,ea),f[e>>2]=0|f[Z>>2],f[e+4>>2]=0|f[Z+4>>2],f[g>>2]=0|f[ja>>2],f[g+4>>2]=0|f[ja+4>>2],Zn(aa,e,g),fa=ha,ga=fa+1|0,ha=ga}f[a>>2]=0|f[Z>>2],f[a+4>>2]=0|f[Z+4>>2],o=ma}function Ph(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,k=0,l=0,m=0,n=0,q=0,r=0,t=0;t=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),l=0|f[c>>2],k=l,m=k,n=0|f[m>>2],q=n>>>11,r=4|q,d=0|f[m>>2],e=2097151&r,g=e<<11,h=2047&d,i=h|g,f[m>>2]=i,f[a>>2]=0|f[c>>2],f[a+4>>2]=0|f[c+4>>2],o=t}function Qh(a,b,c){a|=0,b|=0,c=+c;var e=0,g=0,h=0,i=0,l=0;l=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),g=l,e=c,h=g+4|0,f[h>>2]=6,i=e,j[g>>2]=i,f[a>>2]=0|f[g>>2],f[a+4>>2]=0|f[g+4>>2],o=l}function Rh(a,b,c,e){a|=0,b|=0,c|=0,e|=0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0;ia=o,o=o+48|0,(0|o)>=(0|p)&&ca(48),W=a,da=b,ea=c,fa=e,i=W,ga=i,j=ea,f=j,k=da,l=fa,m=(0|k)>(0|l);do{if(m)L=-1;else{if(n=da,q=fa,(0|n)==(0|q)){s=W,t=ea,u=da,v=0|hv(s,t,u),w=0==(0|v),x=w?0:-1,L=x;break}if(y=da,(0|y)<1){L=0;break}if(A=da,!(1==(0|A))){Y=W,Z=da,$=ea,_=fa,aa=0|Th(Y,Z,$,_),L=aa;break}for(C=f,g=C,D=g,E=fa,F=D+E|0,h=F;;){if(G=f,H=h,!(G>>>0<H>>>0)){ha=13;break}if(J=ga,K=0|d[J>>0],M=255&K,N=f,O=0|d[N>>0],P=255&O,Q=(0|M)==(0|P),R=f,Q){ha=11;break}X=R+1|0,f=X}if(11==(0|ha)){S=g,T=R,U=S,V=T-U|0,L=V;break}if(13==(0|ha)){L=-1;break}}}while(0);return ba=L,o=ia,0|ba}function Sh(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,n=0;n=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),d=n+8|0,e=b,h=e,i=0|ng(h,0,0),g=i,j=e,k=g,f[d>>2]=0|f[c>>2],f[d+4>>2]=0|f[c+4>>2],Hg(j,k,d),l=g,lg(a,l),o=n}function Th(a,b,c,e){a|=0,b|=0,c|=0,e|=0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,ba=0,da=0,ea=0,fa=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0;for(Ba=o,o=o+1072|0,(0|o)>=(0|p)&&ca(1072),j=Ba,X=a,ha=b,sa=c,ya=e,k=X,za=k,l=X,m=ha,n=l+m|0,g=n,q=sa,h=q,i=0;;){if(r=i,!((0|r)<256))break;t=ha,u=t+1|0,v=i,w=j+(v<<2)|0,f[w>>2]=u,x=i,y=x+1|0,i=y}for(;;){if(z=za,A=g,!(z>>>0<A>>>0))break;C=g,D=za,E=C,F=D,G=E-F|0,H=za,I=0|d[H>>0],J=255&I,K=j+(J<<2)|0,f[K>>2]=G,L=za,N=L+1|0,za=N}for(;;){if(O=h,P=ha,Q=O+P|0,R=sa,S=ya,T=R+S|0,!(Q>>>0<=T>>>0)){Aa=11;break}if(V=X,W=0|d[V>>0],Y=255&W,Z=h,$=0|d[Z>>0],_=255&$,(0|Y)==(0|_)&&(ba=X,da=h,ea=ha,fa=0|hv(ba,da,ea),0==(0|fa))){Aa=9;break}na=h,oa=ha,pa=na+oa|0,qa=0|d[pa>>0],ra=255&qa,ta=j+(ra<<2)|0,ua=0|f[ta>>2],va=h,wa=va+ua|0,h=wa}return 9==(0|Aa)?(ia=h,ja=sa,ka=ia,la=ja,ma=ka-la|0,M=ma,xa=M,o=Ba,0|xa):11==(0|Aa)?(M=-1,xa=M,o=Ba,0|xa):0}function Uh(a,b,c,d){a|=0,b|=0,c|=0,d|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,n=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,$a=0,_a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0;if(Db=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),a,Ma=d,D=0|f[b>>2],e=D,O=0|f[c>>2],R=0|f[O>>2],S=R>>>11,T=8&S,U=0!=(0|T),V=0|f[c>>2],U?(W=0|f[V>>2],X=W>>>11,Y=496&X,Z=Y>>4,aa=Z):($=V+12|0,_=0|f[$>>2],aa=_),s=aa,ba=e,da=0|f[ba>>2],ea=da>>>11,fa=8&ea,ga=0!=(0|fa),ha=e,ga?(ia=0|f[ha>>2],ja=ia>>>11,ka=496&ja,la=ka>>4,ra=la):(ma=ha+12|0,na=0|f[ma>>2],ra=na),oa=s,(0|ra)<(0|oa))return qa=-1,Q=qa,o=Db,0|Q;if(sa=e,ta=0|f[sa>>2],ua=ta>>>11,va=8&ua,wa=0!=(0|va),xa=e,wa?(ya=0|f[xa>>2],za=ya>>>11,Aa=496&za,Ca=Aa>>4,Ha=Ca):(Da=xa+12|0,Ea=0|f[Da>>2],Ha=Ea),Fa=Ma,Ga=Ha-Fa|0,Ia=s,Ja=(0|Ga)<(0|Ia),Ja&&(Ka=e,La=0|f[Ka>>2],Na=La>>>11,Oa=8&Na,Pa=0!=(0|Oa),Qa=e,Pa?(Ra=0|f[Qa>>2],Sa=Ra>>>11,Ta=496&Sa,Ua=Ta>>4,$a=Ua):(Va=Qa+12|0,Wa=0|f[Va>>2],$a=Wa),Ya=s,Za=$a-Ya|0,Ma=Za),_a=e,ab=0|f[_a>>2],bb=ab>>>11,cb=8&bb,db=0!=(0|cb),eb=e,fb=eb+12|0,db?jb=fb:(hb=fb+8|0,ib=0|f[hb>>2],jb=ib),gb=jb,kb=e,lb=0|f[kb>>2],mb=lb>>>11,nb=8&mb,ob=0!=(0|nb),pb=e,qb=pb+12|0,ob?wb=qb:(sb=qb+8|0,tb=0|f[sb>>2],wb=tb),ub=Ma,vb=wb+ub|0,Xa=vb,xb=0|f[c>>2],yb=0|f[xb>>2],zb=yb>>>11,Ab=8&zb,Bb=0!=(0|Ab),g=0|f[c>>2],h=g+12|0,Bb?k=h:(i=h+8|0,j=0|f[i>>2],k=j),rb=k,l=s,!(0!=(0|l)))return P=Ma,qa=P,Q=qa,o=Db,0|Q;for(;;){if(n=gb,q=Xa,!(n>>>0<=q>>>0)){Cb=34;break}if(t=Xa,u=rb,v=s,w=0|hv(t,u,v),x=0==(0|w),y=Xa,x)break;N=y+-1|0,Xa=N}return 34==(0|Cb)?(qa=-1,Q=qa,o=Db,0|Q):(z=e,A=0|f[z>>2],B=A>>>11,C=8&B,E=0!=(0|C),F=e,G=F+12|0,E?L=G:(H=G+8|0,I=0|f[H>>2],L=I),J=y,K=L,M=J-K|0,qa=M,Q=qa,o=Db,0|Q)}function Vh(a,b){a|=0,b|=0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,B=0;for(B=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),m=a,t=b,u=0,v=0;;){if(x=v,y=t,!((0|x)<(0|y)))break;c=m,d=m,e=t,f=d+e|0,g=0|Qg(c,f),w=g,h=w,i=v,j=i+h|0,v=j,k=w,l=m,n=l+k|0,m=n,q=u,r=q+1|0,u=r}return s=u,o=B,0|s}function Wh(a,b,c,d){a|=0,b|=0,c|=0,d|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,aa=0,ba=0,da=0,ea=0,fa=0,ha=0,ia=0,ja=0,ka=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,$a=0,_a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,ob=0;return ob=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),a,xa=d,A=0|f[b>>2],B=0|f[A>>2],C=B>>>11,D=8&C,E=0!=(0|D),F=0|f[b>>2],E?(G=0|f[F>>2],H=G>>>11,I=496&H,J=I>>4,M=J):(K=F+12|0,L=0|f[K>>2],M=L),e=M,N=0|f[c>>2],O=0|f[N>>2],P=O>>>11,Q=8&P,R=0!=(0|Q),S=0|f[c>>2],R?(T=0|f[S>>2],U=T>>>11,V=496&U,W=V>>4,Z=W):(X=S+12|0,Y=0|f[X>>2],Z=Y),s=Z,$=xa,(0|$)<0&&(ba=e,da=xa,ea=da+ba|0,xa=ea,fa=xa,(0|fa)<0)?(aa=-1,z=aa,o=ob,0|z):(ha=e,ia=xa,ja=ha-ia|0,ka=s,(0|ja)<(0|ka)?(aa=-1,z=aa,o=ob,0|z):(na=0|f[b>>2],oa=0|f[na>>2],pa=oa>>>11,qa=8&pa,ra=0!=(0|qa),sa=0|f[b>>2],ta=sa+12|0,ra?wa=ta:(ua=ta+8|0,va=0|f[ua>>2],wa=va),Ta=wa,ya=xa,za=0!=(0|ya),za&&(Aa=xa,Ba=Ta,Ca=Ba+Aa|0,Ta=Ca),Da=s,0==(0|Da)?(Fa=xa,aa=Fa,z=aa,o=ob,0|z):(Ga=0|f[c>>2],Ha=0|f[Ga>>2],Ja=Ha>>>11,Ka=8&Ja,La=0!=(0|Ka),Ma=0|f[c>>2],Na=Ma+12|0,La?Qa=Na:(Oa=Na+8|0,Pa=0|f[Oa>>2],Qa=Pa),cb=Qa,Ra=0|f[c>>2],Sa=0|f[Ra>>2],Ua=Sa>>>11,Va=8&Ua,Wa=0!=(0|Va),Xa=0|f[c>>2],Wa?(Ya=0|f[Xa>>2],Za=Ya>>>11,$a=496&Za,_a=$a>>4,db=_a):(ab=Xa+12|0,bb=0|f[ab>>2],db=bb),s=db,eb=0|f[b>>2],fb=0|f[eb>>2],gb=fb>>>11,hb=8&gb,ib=0!=(0|hb),jb=0|f[b>>2],ib?(kb=0|f[jb>>2],lb=kb>>>11,mb=496&lb,g=mb>>4,l=g):(h=jb+12|0,i=0|f[h>>2],l=i),j=xa,k=l-j|0,e=k,m=cb,n=s,q=Ta,r=e,t=0|Rh(m,n,q,r),Ia=t,u=Ia,v=(0|u)<0,w=Ia,v?(aa=w,z=aa,o=ob,0|z):(x=xa,y=w+x|0,aa=y,z=aa,o=ob,0|z))))}function Xh(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,l=0;l=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),d=l,c=b,e=c,g=255&e,h=0!=(0|g),i=h?2:0,j=d+4|0,f[j>>2]=i,f[d>>2]=1,f[a>>2]=0|f[d>>2],f[a+4>>2]=0|f[d+4>>2],o=l}function Yh(a,b,c,d){a|=0,b|=0,c|=0,d|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0;switch(ra=o,o=o+112|0,(0|o)>=(0|p)&&ca(112),n=ra+96|0,m=ra+88|0,l=ra+80|0,k=ra+72|0,j=ra+64|0,i=ra+56|0,h=ra+48|0,g=ra+40|0,e=ra+32|0,ma=ra+16|0,na=ra+12|0,oa=ra+8|0,pa=ra,U=b,q=U,f[e>>2]=0|f[d>>2],f[e+4>>2]=0|f[d+4>>2],Fg(q,e),r=d+4|0,0|(0|f[r>>2])){case 3:t=0|f[d>>2],ea=t;break;case 16:return P=U,f[h>>2]=0|f[c>>2],f[h+4>>2]=0|f[c+4>>2],f[i>>2]=0|f[d>>2],f[i+4>>2]=0|f[d+4>>2],Q=0|Wh(P,h,i,0),R=-1!=(0|Q),R?(S=U,f[j>>2]=0|f[d>>2],f[j+4>>2]=0|f[d+4>>2],Gg(a,S,j),void(o=ra)):(Mg(a),void(o=ra));case 17:return f[k>>2]=0|f[c>>2],f[k+4>>2]=0|f[c+4>>2],T=0|Lg(k,-1),f[oa>>2]=T,V=U,W=0|f[oa>>2],f[l>>2]=0|f[d>>2],f[l+4>>2]=0|f[d+4>>2],X=0|Nt(V,l,na,oa,W),Y=X<<24>>24!=0,Y?(Z=U,$=0|f[na>>2],_=0|f[oa>>2],f[m>>2]=0|f[c>>2],f[m+4>>2]=0|f[c+4>>2],Ng(a,Z,m,$,_),void(o=ra)):(Mg(a),void(o=ra));default:aa=U,f[n>>2]=0|f[d>>2],f[n+4>>2]=0|f[d+4>>2],Pf(pa,aa,n),f[d>>2]=0|f[pa>>2],f[d+4>>2]=0|f[pa+4>>2],ba=d+4|0,da=0|f[ba>>2],fa=0==(0|da),fa&&(ga=0|f[d>>2],0!=(0|ga)||(ia=U,ja=U,ka=0|sp(ja,69204),Ar(ia,ka,56408))),la=0|f[d>>2],ea=la}if(u=U,v=ea,f[g>>2]=0|f[c>>2],f[g+4>>2]=0|f[c+4>>2],Kg(ma,u,g,v,1),f[c>>2]=0|f[ma>>2],f[c+4>>2]=0|f[ma+4>>2],w=c+4|0,x=0|f[w>>2],y=0==(0|x),y?(z=0|f[c>>2],0!=(0|z)&&(qa=5)):qa=5,5==(0|qa)&&(B=0|f[c>>2],C=0|f[B>>2],D=C>>>11,E=8&D,F=0!=(0|E),G=0|f[c>>2],F?(H=0|f[G>>2],I=H>>>11,J=496&I,K=J>>4,O=K):(L=G+12|0,M=0|f[L>>2],O=M),0==(0|O)))return Mg(a),void(o=ra);f[a>>2]=0|f[c>>2],f[a+4>>2]=0|f[c+4>>2],o=ra}function Zh(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0;R=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),n=a,A=b,N=A,O=0|f[N>>2],K=O,L=4,P=n,c=K,d=c,e=(d>>>0)/4&-1,g=L,h=K,i=0|V(g,h),j=e+i|0,k=0|Jc(P,j),M=k,l=A,m=l+8|0,f[m>>2]=0,q=A,r=q+4|0,f[r>>2]=0,s=M,t=A,u=t+16|0,f[u>>2]=s,v=A,w=v+20|0,f[w>>2]=0,x=M,y=L,z=K,B=0|V(y,z),C=x+B|0,D=A,E=D+12|0,f[E>>2]=C,F=A,G=F+12|0,H=0|f[G>>2],I=K,J=(I>>>0)/4&-1,$h(H,-86,J),o=R}function $h(a,b,c){a|=0,b|=0,c|=0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,q=0;for(q=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),g=a,h=b,i=c;;){if(j=i,k=j+-1|0,i=k,!(j>>>0>0))break;m=h,e=g,f=e+1|0,g=f,d[e>>0]=m}o=q}function _h(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,Q=0;return Q=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),n=a,A=b,K=n,L=0|Lc(K,1,24),J=L,M=A,N=M>>>0<8,N&&(A=8),O=A,c=O+-1|0,A=c,d=A,e=d>>>1,g=A,h=g|e,A=h,i=A,j=i>>>2,k=A,l=k|j,A=l,m=A,q=m>>>4,r=A,s=r|q,A=s,t=A,u=t>>>8,v=A,w=v|u,A=w,x=A,y=x>>>16,z=A,B=z|y,A=B,C=A,D=C+1|0,A=D,E=A,F=J,f[F>>2]=E,G=n,H=J,Zh(G,H),I=J,o=Q,0|I}function ai(a){a|=0;var b=0,c=0,d=0,f=0;return f=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),b=a,c=b,d=0|_h(c,8),o=f,0|d}function bi(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,j=0,k=0,l=0,m=0,q=0;if(q=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),e=a,g=b,h=g,!(0!=(0|h)))return void(o=q);j=e,k=g,l=k+16|0,m=0|f[l>>2],xc(j,m),c=e,d=g,xc(c,d),o=q}function ci(a,b,c){a|=0,b|=0,c|=0;var g=0,h=0,i=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,$a=0,_a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0;for(nb=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),_=a,la=b,wa=c,bb=_,g=wa,t=0|di(bb,g),y=la,z=0|f[y>>2],A=z-1|0,B=t&A,Ha=B,Sa=0;;){if(C=la,D=C+12|0,E=0|f[D>>2],F=Ha,G=(F>>>0)/4&-1,H=E+G|0,I=0|d[H>>0],J=255&I,K=Ha,L=(K>>>0)%4&-1,M=56449+L|0,N=0|d[M>>0],O=255&N,P=J&O,R=0!=(0|P),S=1^R,T=la,!S){mb=8;break}if(U=T+12|0,V=0|f[U>>2],W=Ha,X=(W>>>0)/4&-1,Y=V+X|0,Z=0|d[Y>>0],$=255&Z,aa=Ha,ba=(aa>>>0)%4&-1,da=56453+ba|0,ea=0|d[da>>0],fa=255&ea,ga=$&fa,!(0!=(0|ga))&&(ia=_,ja=ia+560|0,ka=0|f[ja>>2],ma=la,na=ma+16|0,oa=0|f[na>>2],pa=Ha,qa=oa+(pa<<2)|0,ra=0|f[qa>>2],sa=ka+(ra<<3)|0,ta=sa+2|0,ua=0|e[ta>>1],va=65535&ua,xa=_,ya=xa+560|0,za=0|f[ya>>2],Aa=wa,Ba=za+(Aa<<3)|0,Ca=Ba+2|0,Da=0|e[Ca>>1],Ea=65535&Da,(0|va)==(0|Ea)&&(Ga=_,Ia=Ga+560|0,Ja=0|f[Ia>>2],Ka=la,La=Ka+16|0,Ma=0|f[La>>2],Na=Ha,Oa=Ma+(Na<<2)|0,Pa=0|f[Oa>>2],Qa=Ja+(Pa<<3)|0,Ra=Qa+4|0,Ta=0|f[Ra>>2],Ua=_,Va=Ua+560|0,Wa=0|f[Va>>2],Xa=wa,Ya=Wa+(Xa<<3)|0,Za=Ya+4|0,$a=0|f[Za>>2],_a=_,ab=_a+560|0,cb=0|f[ab>>2],db=la,eb=db+16|0,fb=0|f[eb>>2],gb=Ha,hb=fb+(gb<<2)|0,ib=0|f[hb>>2],jb=cb+(ib<<3)|0,kb=jb+2|0,lb=0|e[kb>>1],h=65535&lb,i=0|hv(Ta,$a,h),0==(0|i)))){mb=6;break}l=Ha,m=Sa,n=m+1|0,Sa=n,q=l+n|0,r=la,s=0|f[r>>2],u=s-1|0,v=q&u,Ha=v}return 6==(0|mb)?(k=Ha,Q=k,x=Q,o=nb,0|x):8==(0|mb)?(w=0|f[T>>2],Q=w,x=Q,o=nb,0|x):0}function di(a,b){a|=0,b|=0;var c=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0;for(R=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),r=a,C=b,K=0,O=r,P=O+560|0,c=0|f[P>>2],g=C,h=c+(g<<3)|0,i=h+2|0,j=0|e[i>>1],k=65535&j,M=k,l=r,m=l+560|0,n=0|f[m>>2],q=C,s=n+(q<<3)|0,t=s+4|0,u=0|f[t>>2],N=u,L=0;;){if(v=L,w=M,x=v>>>0<w>>>0,y=K,!x)break;z=y<<5,A=K,B=z-A|0,D=N,E=D+1|0,N=E,F=0|d[D>>0],G=F<<24>>24,H=B+G|0,K=H,I=L,J=I+1|0,L=J}return o=R,0|y}function ei(a,b,c){a|=0,b|=0,c|=0;var e=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ga=0;for(Ga=o,o=o+64|0,(0|o)>=(0|p)&&ca(64),ia=Ga+24|0,C=a,N=b,Y=c,j=Y,k=j>>>0<8,e=k?8:c,Y=e,l=Y,m=l+-1|0,Y=m,n=Y,q=n>>>1,r=Y,s=r|q,Y=s,t=Y,u=t>>>2,v=Y,w=v|u,Y=w,x=Y,y=x>>>4,z=Y,A=z|y,Y=A,B=Y,D=B>>>8,E=Y,F=E|D,Y=F,G=Y,H=G>>>16,I=Y,J=I|H,Y=J,K=Y,L=K+1|0,Y=L,M=N,O=M+12|0,P=0|f[O>>2],ta=P,Q=N,R=Q+16|0,S=0|f[R>>2],Da=S,T=N,U=T+20|0,V=0|f[U>>2],V,W=N,X=0|f[W>>2],g=X,Z=Y,f[ia>>2]=Z,$=C,Zh($,ia),h=0;;){if(_=h,aa=g,!(_>>>0<aa>>>0))break;da=ta,ea=h,fa=(ea>>>0)/4&-1,ga=da+fa|0,ha=0|d[ga>>0],ja=255&ha,ka=h,la=(ka>>>0)%4&-1,ma=56457+la|0,na=0|d[ma>>0],oa=255&na,pa=ja&oa,qa=0!=(0|pa),qa||(ra=C,sa=Da,ua=h,va=sa+(ua<<2)|0,wa=0|f[va>>2],xa=0|fi(ra,ia,wa,0),xa),ya=h,za=ya+1|0,h=za}Aa=N,f[Aa>>2]=0|f[ia>>2],f[Aa+4>>2]=0|f[ia+4>>2],f[Aa+8>>2]=0|f[ia+8>>2],f[Aa+12>>2]=0|f[ia+12>>2],f[Aa+16>>2]=0|f[ia+16>>2],f[Aa+20>>2]=0|f[ia+20>>2],Ba=C,Ca=Da,xc(Ba,Ca),o=Ga}function fi(a,b,c,g){a|=0,b|=0,c|=0,g|=0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,$a=0,_a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,yc=0,zc=0,Ac=0,Bc=0,Cc=0,Dc=0,Ec=0,Fc=0,Gc=0,Hc=0,Ic=0,Jc=0,Kc=0,Lc=0,Nc=0,Oc=0,Pc=0,Qc=0,Rc=0,Sc=0,Tc=0,Uc=0,Vc=0,Wc=0,Xc=0,Yc=0,Zc=0;for(Zc=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),Xb=a,gc=b,rc=c,Cc=g,u=0,F=gc,Q=F+8|0,_=0|f[Q>>2],la=gc,wa=0|f[la>>2],Ha=wa>>>2,Sa=gc,bb=0|f[Sa>>2],mb=bb>>>1,tb=Ha|mb,ub=_>>>0>=tb>>>0,ub&&(vb=Xb,wb=gc,xb=gc,yb=0|f[xb>>2],zb=yb<<1,ei(vb,wb,zb)),Ab=Xb,Bb=rc,Cb=0|di(Ab,Bb),Db=gc,Eb=0|f[Db>>2],Fb=Eb-1|0,Gb=Cb&Fb,Nc=Gb,Hb=gc,Ib=0|f[Hb>>2],h=Ib;;){if(Jb=gc,Kb=Jb+12|0,Lb=0|f[Kb>>2],Nb=Nc,Ob=(Nb>>>0)/4&-1,Pb=Lb+Ob|0,Qb=0|d[Pb>>0],Rb=255&Qb,Sb=Nc,Tb=(Sb>>>0)%4&-1,Ub=56449+Tb|0,Vb=0|d[Ub>>0],Wb=255&Vb,Yb=Rb&Wb,Zb=0!=(0|Yb),!(1^Zb))break;if(_b=gc,ac=_b+12|0,bc=0|f[ac>>2],cc=Nc,dc=(cc>>>0)/4&-1,ec=bc+dc|0,fc=0|d[ec>>0],hc=255&fc,ic=Nc,jc=(ic>>>0)%4&-1,kc=56453+jc|0,lc=0|d[kc>>0],mc=255&lc,nc=hc&mc,0!=(0|nc))O=h,P=gc,R=0|f[P>>2],(0|O)==(0|R)&&(T=Nc,h=T);else if(pc=Xb,qc=pc+560|0,sc=0|f[qc>>2],tc=gc,uc=tc+16|0,vc=0|f[uc>>2],wc=Nc,xc=vc+(wc<<2)|0,yc=0|f[xc>>2],zc=sc+(yc<<3)|0,Ac=zc+2|0,Bc=0|e[Ac>>1],Dc=65535&Bc,Ec=Xb,Fc=Ec+560|0,Gc=0|f[Fc>>2],Hc=rc,Ic=Gc+(Hc<<3)|0,Jc=Ic+2|0,Kc=0|e[Jc>>1],Lc=65535&Kc,(0|Dc)==(0|Lc)&&(Oc=Xb,Pc=Oc+560|0,Qc=0|f[Pc>>2],Rc=gc,Sc=Rc+16|0,Tc=0|f[Sc>>2],Uc=Nc,Vc=Tc+(Uc<<2)|0,Wc=0|f[Vc>>2],Xc=Qc+(Wc<<3)|0,i=Xc+4|0,j=0|f[i>>2],k=Xb,l=k+560|0,m=0|f[l>>2],n=rc,q=m+(n<<3)|0,r=q+4|0,s=0|f[r>>2],t=Xb,v=t+560|0,w=0|f[v>>2],x=gc,y=x+16|0,z=0|f[y>>2],A=Nc,B=z+(A<<2)|0,C=0|f[B>>2],D=w+(C<<3)|0,E=D+2|0,G=0|e[E>>1],H=65535&G,I=0|hv(j,s,H),0==(0|I))){Yc=8;break}U=Nc,V=u,W=V+1|0,u=W,X=U+W|0,Y=gc,Z=0|f[Y>>2],$=Z-1|0,aa=X&$,Nc=aa}return 8==(0|Yc)?(K=Cc,L=0!=(0|K),L&&(M=Cc,f[M>>2]=0),N=Nc,Mb=N,sb=Mb,o=Zc,0|sb):(ba=h,da=gc,ea=0|f[da>>2],fa=(0|ba)!=(0|ea),ga=rc,ha=gc,ia=ha+16|0,ja=0|f[ia>>2],fa?(ka=h,ma=ja+(ka<<2)|0,f[ma>>2]=ga,na=h,oa=(na>>>0)%4&-1,pa=56453+oa|0,qa=0|d[pa>>0],ra=255&qa,sa=-1^ra,ta=gc,ua=ta+12|0,va=0|f[ua>>2],xa=h,ya=(xa>>>0)/4&-1,za=va+ya|0,Aa=0|d[za>>0],Ba=255&Aa,Ca=Ba&sa,Da=255&Ca,d[za>>0]=Da,Ea=gc,Fa=Ea+4|0,Ga=0|f[Fa>>2],Ia=Ga+1|0,f[Fa>>2]=Ia,Ja=Cc,Ka=0!=(0|Ja),Ka&&(La=Cc,f[La>>2]=2),Ma=h,Mb=Ma,sb=Mb,o=Zc,0|sb):(Na=Nc,Oa=ja+(Na<<2)|0,f[Oa>>2]=ga,Pa=Nc,Qa=(Pa>>>0)%4&-1,Ra=56449+Qa|0,Ta=0|d[Ra>>0],Ua=255&Ta,Va=-1^Ua,Wa=gc,Xa=Wa+12|0,Ya=0|f[Xa>>2],Za=Nc,$a=(Za>>>0)/4&-1,_a=Ya+$a|0,ab=0|d[_a>>0],cb=255&ab,db=cb&Va,eb=255&db,d[_a>>0]=eb,fb=gc,gb=fb+4|0,hb=0|f[gb>>2],ib=hb+1|0,f[gb>>2]=ib,jb=gc,kb=jb+8|0,lb=0|f[kb>>2],nb=lb+1|0,f[kb>>2]=nb,ob=Cc,pb=0!=(0|ob),pb&&(qb=Cc,f[qb>>2]=1),rb=Nc,Mb=rb,sb=Mb,o=Zc,0|sb))}function gi(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0;return l=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),d=a,e=b,f=c,g=d,h=e,i=f,j=0|hi(g,h,i,0),o=l,0|j}function hi(a,b,c,g){a|=0,b|=0,c|=0,g|=0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,$a=0,_a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,wb=0;return wb=o,o=o+48|0,(0|o)>=(0|p)&&ca(48),ua=a,Fa=b,Qa=c,_a=g,K=ua,L=K+556|0,M=0|f[L>>2],kb=M,N=ua,O=N+560|0,P=0|f[O>>2],h=P,Q=ua,R=Qa,ii(Q,R),S=h,0!=(0|S)&&(U=_a,V=h,W=0|d[V>>0],X=1&U,Y=-2&W,Z=Y|X,d[V>>0]=Z,$=Qa,_=65535&$,aa=h,ba=aa+2|0,e[ba>>1]=_,da=Fa,ea=h,fa=ea+4|0,f[fa>>2]=da,ga=ua,ha=kb,ia=0|ci(ga,ha,0),u=ia,ka=u,la=kb,ma=0|f[la>>2],(0|ka)!=(0|ma))?(oa=kb,pa=oa+16|0,qa=0|f[pa>>2],ra=u,sa=qa+(ra<<2)|0,ta=0|f[sa>>2],ja=ta,I=ja,o=wb,0|I):(va=ua,wa=va+552|0,xa=0|f[wa>>2],ya=xa+1|0,f[wa>>2]=ya,F=ya,za=ua,Aa=za+564|0,Ba=0|f[Aa>>2],Ca=F,Da=Ba>>>0<Ca>>>0,Da&&(Ea=ua,Ga=Ea+564|0,Ha=0|f[Ga>>2],Ia=0==(0|Ha),Ja=ua,Ka=Ja+564|0,Ia?f[Ka>>2]=100:(La=0|f[Ka>>2],Ma=+(La>>>0),Na=1.2*Ma,Oa=~~Na>>>0,Pa=ua,Ra=Pa+564|0,f[Ra>>2]=Oa),Sa=ua,Ta=ua,Ua=Ta+560|0,Va=0|f[Ua>>2],Wa=ua,Xa=Wa+564|0,Ya=0|f[Xa>>2],Za=Ya+1|0,$a=Za<<3,ab=0|Hc(Sa,Va,$a),bb=ua,cb=bb+560|0,f[cb>>2]=ab),db=ua,eb=db+560|0,fb=0|f[eb>>2],gb=F,hb=fb+(gb<<3)|0,h=hb,ib=Qa,jb=65535&ib,lb=h,mb=lb+2|0,e[mb>>1]=jb,nb=_a,ob=255&nb,pb=0!=(0|ob),pb?(qb=Fa,rb=h,sb=rb+4|0,f[sb>>2]=qb,tb=h,ub=0|d[tb>>0],i=-2&ub,j=1|i,d[tb>>0]=j):(k=ua,l=Qa,m=l+1|0,n=0|Jc(k,m),J=n,q=J,r=Fa,s=Qa,$w(0|q,0|r,0|s),t=J,v=Qa,w=t+v|0,d[w>>0]=0,x=J,y=h,z=y+4|0,f[z>>2]=x,A=h,B=0|d[A>>0],C=-2&B,d[A>>0]=C),D=ua,E=kb,G=F,fi(D,E,G,0),H=F,ja=H,I=ja,o=wb,0|I)}function ii(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,k=0;if(k=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),c=a,d=b,e=d,!(e>>>0>=65535))return void(o=k);g=c,h=c,i=0|sp(h,69160),Ar(g,i,56461)}function ji(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0;return l=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),d=a,e=b,f=c,g=d,h=e,i=f,j=0|hi(g,h,i,1),o=l,0|j}function ki(a,b){a|=0,b|=0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,k=0;return k=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),c=a,d=b,e=c,f=d,g=d,h=0|$v(g),i=0|gi(e,f,h),o=k,0|i}function li(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,G=0;return G=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),n=a,y=n,z=0|f[b>>2],A=0|f[z>>2],B=A>>>11,C=8&B,D=0!=(0|C),E=0|f[b>>2],c=E+12|0,D?v=c:(d=c+8|0,e=0|f[d>>2],v=e),g=0|f[b>>2],h=0|f[g>>2],i=h>>>11,j=8&i,k=0!=(0|j),l=0|f[b>>2],k?(m=0|f[l>>2],q=m>>>11,r=496&q,s=r>>4,w=s,x=0|gi(y,v,w),o=G,0|x):(t=l+12|0,u=0|f[t>>2],w=u,x=0|gi(y,v,w),o=G,0|x)}function mi(a,b,c,d){a|=0,b|=0,c|=0,d|=0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0;return R=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),K=b,L=c,M=d,g=K,h=g+556|0,i=0|f[h>>2],N=i,j=K,k=j+560|0,l=0|f[k>>2],O=l,m=K,n=M,ii(m,n),q=M,r=65535&q,s=O,t=s+2|0,e[t>>1]=r,u=L,v=O,w=v+4|0,f[w>>2]=u,x=K,y=N,z=0|ci(x,y,0),P=z,A=P,B=N,C=0|f[B>>2],D=(0|A)!=(0|C),D?(E=N,F=E+16|0,G=0|f[F>>2],H=P,I=G+(H<<2)|0,J=0|f[I>>2],ni(a,J),void(o=R)):(oi(a),void(o=R))}function ni(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,i=0;i=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),d=i,c=b,e=d+4|0,f[e>>2]=4,g=c,f[d>>2]=g,f[a>>2]=0|f[d>>2],f[a+4>>2]=0|f[d+4>>2],o=i}function oi(a){a|=0;var b=0,c=0,e=0;e=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),b=e,c=b+4|0,f[c>>2]=0,f[b>>2]=0,f[a>>2]=0|f[b>>2],f[a+4>>2]=0|f[b+4>>2],o=e}function pi(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,f=0,g=0,h=0,i=0,k=0;k=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),d=b,e=c,f=d,g=e,h=e,i=0|$v(h),mi(a,f,g,i),o=k}function qi(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,G=0;return G=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),y=b,z=y,A=0|f[c>>2],B=0|f[A>>2],C=B>>>11,D=8&C,E=0!=(0|D),d=0|f[c>>2],e=d+12|0,E?w=e:(g=e+8|0,h=0|f[g>>2],w=h),i=0|f[c>>2],j=0|f[i>>2],k=j>>>11,l=8&k,m=0!=(0|l),n=0|f[c>>2],m?(q=0|f[n>>2],r=q>>>11,s=496&r,t=s>>4,x=t,mi(a,z,w,x),void(o=G)):(u=n+12|0,v=0|f[u>>2],x=v,mi(a,z,w,x),void(o=G))}function ri(a,b,c){a|=0,b|=0,c|=0;var d=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,P=0;return P=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),I=a,J=b,K=c,L=J,0==(0|L)||(N=I,d=N+552|0,g=0|f[d>>2],h=J,g>>>0<h>>>0)?(j=K,k=0!=(0|j),k&&(l=K,f[l>>2]=0),B=0,H=B,o=P,0|H):(m=K,n=0!=(0|m),n&&(q=I,r=q+560|0,s=0|f[r>>2],t=J,u=s+(t<<3)|0,v=u+2|0,w=0|e[v>>1],x=65535&w,y=K,f[y>>2]=x),z=I,A=z+560|0,C=0|f[A>>2],D=J,E=C+(D<<3)|0,F=E+4|0,G=0|f[F>>2],B=G,H=B,o=P,0|H)}function si(a){a|=0;var b=0,c=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,P=0;for(P=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),b=a,q=1,I=b,J=I+552|0,K=0|f[J>>2],L=K+1|0,B=L;;){if(M=q,N=B,c=M>>>0<N>>>0,e=b,!c)break;g=e+560|0,h=0|f[g>>2],i=q,j=h+(i<<3)|0,k=0|d[j>>0],l=1&k,m=l<<24>>24!=0,m||(n=b,r=b,s=r+560|0,t=0|f[s>>2],u=q,v=t+(u<<3)|0,w=v+4|0,x=0|f[w>>2],xc(n,x)),y=q,z=y+1|0,q=z}A=b,C=A+560|0,D=0|f[C>>2],xc(e,D),E=b,F=b,G=F+556|0,H=0|f[G>>2],bi(E,H),o=P}function ti(a){a|=0;var b=0,c=0,d=0,e=0,g=0,i=0;i=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),b=a,c=b,d=0|ai(c),e=b,g=e+556|0,f[g>>2]=d,o=i}function ui(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,t=0;return t=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),l=t+4|0,j=b,k=c,n=j,q=k,r=0|ri(n,q,l),m=r,d=m,e=0!=(0|d),e?(g=j,h=m,i=0|f[l>>2],qg(a,g,h,i),void(o=t)):(vi(a),void(o=t))}function vi(a){a|=0;var b=0,c=0,e=0;e=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),b=e,c=b+4|0,f[c>>2]=5,f[b>>2]=0,f[a>>2]=0|f[b>>2],f[a+4>>2]=0|f[b+4>>2],o=e}function wi(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,i=0,j=0,k=0,m=0,n=0,q=0,r=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0;return R=o,o=o+48|0,(0|o)>=(0|p)&&ca(48),c=R+40|0,L=R+20|0,N=R+8|0,O=R,B=a,K=b,P=B,d=K,e=0|ri(P,d,L),M=e,g=M,0!=(0|g)?(i=M,j=0|xi(i),k=255&j,0!=(0|k)&&(m=M,n=0|$v(m),r=0|f[L>>2],(0|n)==(0|r))?(t=M,q=t,J=q,o=R,0|J):(u=B,v=B,w=M,x=0|f[L>>2],qg(O,v,w,x),f[c>>2]=0|f[O>>2],f[c+4>>2]=0|f[O+4>>2],bh(N,u,c),y=0|f[N>>2],z=0|f[y>>2],A=z>>>11,C=8&A,D=0!=(0|C),E=0|f[N>>2],F=E+12|0,D?I=F:(G=F+8|0,H=0|f[G>>2],I=H),q=I,J=q,o=R,0|J)):(q=0,J=q,o=R,0|J)}function xi(a){a|=0;var b=0,c=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,x=0,y=0,z=0,A=0,B=0,C=0,E=0,F=0,G=0,I=0,J=0,K=0,L=0,M=0,N=0,P=0,Q=0,R=0,S=0,U=0,V=0,W=0,Z=0,$=0,_=0,ba=0,da=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,$a=0,_a=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Xb=0,Yb=0,Zb=0,$b=0,_b=0,ac=0,bc=0;if(bc=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),ta=a,$a=ta,Ea=$a,Pa=0,jb=Ea,!(0!=(0|jb)))return c=0,oa=c,o=bc,0|oa;Fb=Ea,Qb=0|d[Fb>>0],e=Qb<<24>>24;a:switch(0|e){case 0:return c=0,oa=c,o=bc,0|oa;case 36:if(r=Ea,C=r+1|0,Ea=C,N=0|yi(C),N<<24>>24!=0)return c=1,oa=c,o=bc,0|oa;ac=36;break;case 64:ia=Ea,pa=ia+1|0,Ea=pa,qa=0|d[pa>>0],ra=qa<<24>>24,sa=64==(0|ra),sa?(ua=Ea,va=ua+1|0,Ea=va,ac=36):ac=36;break;case 60:switch(wa=Ea,xa=wa+1|0,Ea=xa,ya=0|d[xa>>0],0|ya<<24>>24){case 60:Aa=Ea,Ba=Aa+1|0,Ea=Ba;break a;case 61:break;default:break a}Ca=Ea,Da=Ca+1|0,Ea=Da,Fa=0|d[Da>>0],Ga=Fa<<24>>24,Ha=62==(0|Ga),Ha&&(Ia=Ea,Ja=Ia+1|0,Ea=Ja);break;case 62:Ka=Ea,La=Ka+1|0,Ea=La,Ma=0|d[La>>0],Na=Ma<<24>>24,b=Na+-61|0,_b=b>>>0<2,_b&&(Oa=Ea,Qa=Oa+1|0,Ea=Qa);break;case 61:switch(Ra=Ea,Sa=Ra+1|0,Ea=Sa,Ta=0|d[Sa>>0],0|Ta<<24>>24){case 126:Va=Ea,Wa=Va+1|0,Ea=Wa;break a;case 61:if(Xa=Ea,Ya=Xa+1|0,Ea=Ya,Za=0|d[Ya>>0],_a=Za<<24>>24,!(61==(0|_a)))break a;bb=Ea,cb=bb+1|0,Ea=cb;break a;default:return c=0,oa=c,o=bc,0|oa}break;case 42:db=Ea,eb=db+1|0,Ea=eb,fb=0|d[eb>>0],gb=fb<<24>>24,hb=42==(0|gb),hb&&(ib=Ea,kb=ib+1|0,Ea=kb);break;case 33:lb=Ea,mb=lb+1|0,Ea=mb,nb=0|d[mb>>0],ob=nb<<24>>24,pb=61==(0|ob),pb&&(qb=Ea,rb=qb+1|0,Ea=rb);break;case 45:case 43:sb=Ea,tb=sb+1|0,Ea=tb,vb=0|d[tb>>0],wb=vb<<24>>24,xb=64==(0|wb),xb&&(yb=Ea,zb=yb+1|0,Ea=zb);break;case 124:Ab=Ea,Bb=Ab+1|0,Ea=Bb,Cb=0|d[Bb>>0],Db=Cb<<24>>24,Eb=124==(0|Db),Eb&&(Gb=Ea,Hb=Gb+1|0,Ea=Hb);break;case 38:Ib=Ea,Jb=Ib+1|0,Ea=Jb,Kb=0|d[Jb>>0],Lb=Kb<<24>>24,Mb=38==(0|Lb),Mb&&(Nb=Ea,Ob=Nb+1|0,Ea=Ob);break;case 96:case 126:case 37:case 47:case 94:Pb=Ea,Rb=Pb+1|0,Ea=Rb;break;case 91:if(Sb=Ea,Tb=Sb+1|0,Ea=Tb,Ub=0|d[Tb>>0],Vb=Ub<<24>>24,93!=(0|Vb))return c=0,oa=c,o=bc,0|oa;if(Xb=Ea,Yb=Xb+1|0,Ea=Yb,Zb=0|d[Yb>>0],$b=Zb<<24>>24,!(61==(0|$b)))break a;g=Ea,h=g+1|0,Ea=h;break a;default:i=Ea,j=0|d[i>>0],k=j<<24>>24,l=k-65|0,m=l>>>0<26,n=1^m,q=1&n,s=255&q,Pa=s,ac=36}a:if(36==(0|ac)){if(t=Ea,u=0|d[t>>0],v=u<<24>>24,95!=(0|v)&&(x=Ea,y=0|d[x>>0],z=y<<24>>24,A=32|z,B=A-97|0,!(B>>>0<26)))return c=0,oa=c,o=bc,0|oa;for(;;){if(E=Ea,F=0|d[E>>0],G=F<<24>>24,!(-1!=(0|G)))break;if(I=Ea,J=0|d[I>>0],K=J<<24>>24,L=32|K,M=L-97|0,!(M>>>0<26||(P=Ea,Q=0|d[P>>0],R=Q<<24>>24,S=R-48|0,S>>>0<10||(U=Ea,V=0|d[U>>0],W=V<<24>>24,95==(0|W)))))break;Z=Ea,$=Z+1|0,Ea=$}if(_=Pa,_<<24>>24!=0){switch(ba=Ea,da=0|d[ba>>0],0|da<<24>>24){case 61:case 63:case 33:break;default:break a}fa=Ea,ga=fa+1|0,Ea=ga}}return ha=Ea,ja=0|d[ha>>0],ka=ja<<24>>24,la=0!=(0|ka),ma=la?0:1,na=255&ma,c=na,oa=c,o=bc,0|oa}function yi(a){a|=0;var b=0,c=0,e=0,f=0,h=0,i=0,j=0,k=0,l=0,n=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,aa=0;aa=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),n=a,A=n,L=0|d[A>>0],W=L<<24>>24;a:switch(0|W){case 48:case 43:case 39:case 96:case 38:case 34:case 62:case 60:case 58:case 61:case 46:case 44:case 59:case 92:case 47:case 64:case 33:case 63:case 36:case 42:case 126:X=n,Y=X+1|0,n=Y;break;case 45:if(Z=n,$=Z+1|0,n=$,c=n,e=0|d[c>>0],f=e<<24>>24,-1!=(0|f)){if(h=n,i=0|d[h>>0],j=i<<24>>24,k=32|j,l=k-97|0,!(l>>>0<26||(q=n,r=0|d[q>>0],s=r<<24>>24,t=s-48|0,t>>>0<10||(v=n,w=0|d[v>>0],x=w<<24>>24,95==(0|x)))))break a;z=n,B=z+1|0,n=B}break;default:if(C=n,D=0|d[C>>0],E=D<<24>>24,F=E-48|0,F>>>0<10)for(;;)if(H=n,I=H+1|0,n=I,J=n,K=0|d[J>>0],M=K<<24>>24,N=M-48|0,!(N>>>0<10))break a;return b=0,V=b,o=aa,0|V}return P=n,Q=0|d[P>>0],R=Q<<24>>24!=0,S=1^R,T=1&S,U=255&T,b=U,V=b,o=aa,0|V}function zi(a){a|=0;var b=0,c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,A=0;A=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),b=a,s=b,t=b,u=t+32|0,v=0|f[u>>2],w=0|Cp(s,56484,v),n=w,x=b,y=x+80|0,f[y>>2]=w,c=b,d=n,Ip(c,d,69591,119,262144),e=b,g=n,Ip(e,g,56491,120,0),h=b,i=n,Ip(h,i,69276,120,0),j=b,k=n,Ip(j,k,56499,121,0),l=b,m=n,Ip(l,m,69281,122,0),q=b,r=n,Ip(q,r,69156,123,262144),o=A}function Ai(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,n=0;n=o,o=o+48|0,(0|o)>=(0|p)&&ca(48),e=n+32|0,d=n+24|0,l=n,h=n+8|0,g=b,i=g,f[l>>2]=h,Kp(i,69199,l),j=g,f[d>>2]=0|f[c>>2],f[d+4>>2]=0|f[c+4>>2],f[e>>2]=0|f[h>>2],f[e+4>>2]=0|f[h+4>>2],k=0|kf(j,d,e),Gi(a,k),o=n}function Bi(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,s=0;s=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),l=s,i=b,m=0|f[c>>2],j=m,n=i,q=j,d=0|ri(n,q,l),k=d,e=i,g=k,h=0|f[l>>2],qg(a,e,g,h),o=s}function Ci(a,b,c){a|=0,b|=0,c|=0;var g=0;g=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),f[a>>2]=0|f[c>>2],f[a+4>>2]=0|f[c+4>>2],o=g}function Di(a,b,c){a|=0,b|=0,c|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,T=0,U=0,V=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,qa=0;if(qa=o,o=o+64|0,(0|o)>=(0|p)&&ca(64),e=qa+48|0,N=qa+32|0,ia=qa+24|0,oa=qa+8|0,g=qa,C=b,h=0|f[c>>2],ma=h,i=C,j=ma,k=0|ri(i,j,ia),Y=k,l=C,m=0|f[ia>>2],n=m+1|0,mg(oa,l,0,n),f[N>>2]=0|f[oa>>2],f[N+4>>2]=0|f[oa+4>>2],q=0|f[N>>2],r=0|f[q>>2],s=r>>>11,t=8&s,u=0!=(0|t),v=0|f[N>>2],w=v+12|0,u?z=w:(x=w+8|0,y=0|f[x>>2],z=y),na=z,A=0|f[N>>2],B=0|f[A>>2],D=B>>>11,E=8&D,F=0!=(0|E),G=0|f[N>>2],H=G+12|0,F?K=H:(I=H+8|0,J=0|f[I>>2],K=J),d[K>>0]=58,L=na,M=L+1|0,O=Y,P=0|f[ia>>2],$w(0|M,0|O,0|P),Q=Y,R=0|xi(Q),R<<24>>24!=0&&(T=Y,U=0|$v(T),V=0|f[ia>>2],!((0|U)!=(0|V))))return f[a>>2]=0|f[N>>2],f[a+4>>2]=0|f[N+4>>2],void(o=qa);X=C,f[e>>2]=0|f[N>>2],f[e+4>>2]=0|f[N+4>>2],bh(g,X,e),f[N>>2]=0|f[g>>2],f[N+4>>2]=0|f[g+4>>2],Z=0|f[N>>2],$=0|f[Z>>2],_=$>>>11,aa=8&_,ba=0!=(0|aa),da=0|f[N>>2],ea=da+12|0,ba?ha=ea:(fa=ea+8|0,ga=0|f[fa>>2],ha=ga),na=ha,ja=na,d[ja>>0]=58,ka=na,la=ka+1|0,d[la>>0]=34,f[a>>2]=0|f[N>>2],f[a+4>>2]=0|f[N+4>>2],o=qa}function Ei(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,L=0,M=0,N=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0;return _=o,o=o+64|0,(0|o)>=(0|p)&&ca(64),Z=_,L=_+40|0,e=_+8|0,g=_+4|0,A=b,h=A,f[Z>>2]=L,Kp(h,69199,Z),i=L+4|0,j=0|f[i>>2],4!=(0|j)?(oi(a),void(o=_)):(l=0|f[c>>2],U=l,m=0|f[L>>2],V=m,n=U,q=V,(0|n)==(0|q)?(Fi(a,0),void(o=_)):(s=A,t=U,u=0|ri(s,t,e),W=u,v=A,w=V,x=0|ri(v,w,g),X=x,y=0|f[e>>2],z=0|f[g>>2],B=(0|y)>(0|z),C=0|f[g>>2],D=0|f[e>>2],E=B?C:D,d=E,F=W,G=X,H=d,I=0|hv(F,G,H),Y=I,J=Y,0==(0|J)?(M=0|f[e>>2],N=0|f[g>>2],(0|M)==(0|N)?(Fi(a,0),void(o=_)):(P=0|f[e>>2],Q=0|f[g>>2],R=(0|P)>(0|Q),R?(Fi(a,1),void(o=_)):(Fi(a,-1),void(o=_)))):(S=Y,T=(0|S)>0,T?(Fi(a,1),void(o=_)):(Fi(a,-1),void(o=_)))))}function Fi(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,i=0;i=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),d=i,c=b,e=d+4|0,f[e>>2]=3,g=c,f[d>>2]=g,f[a>>2]=0|f[d>>2],f[a+4>>2]=0|f[d+4>>2],o=i}function Gi(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,l=0;l=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),d=l,c=b,e=c,g=255&e,h=0!=(0|g),i=h?2:0,j=d+4|0,f[j>>2]=i,f[d>>2]=1,f[a>>2]=0|f[d>>2],f[a+4>>2]=0|f[d+4>>2],o=l}function Hi(a){a|=0;var b=0,c=0,d=0,e=0,g=0,i=0;i=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),b=a,c=b,d=b,e=d+24|0,g=0|f[e>>2],Ii(c,g),o=i}function Ii(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,j=0;if(j=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),c=a,d=b,e=d,!(0!=(0|e)))return void(o=j);g=c,h=d,Ki(g,h,124,0),o=j}function Ji(a,b,c,d){a|=0,b|=0,c|=0,d|=0;var e=0,g=0,h=0,k=0,l=0,q=0;return q=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),h=a,b,d,k=c+4|0,l=0|f[k>>2],l>>>0<8?(o=q,0):(e=h,g=0|f[c>>2],Cc(e,g),o=q,0)}function Ki(a,b,c,d){a|=0,b|=0,c|=0,d|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,z=0,A=0,B=0,C=0,E=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0;la=o,o=o+48|0,(0|o)>=(0|p)&&ca(48),e=la+32|0,X=a,ga=b,ha=c,ia=d,j=ga,k=0|f[j>>2],ja=k;a:for(;;){if(l=ja,!(0!=(0|l))){ka=15;break}for(g=0;;){if(n=g,q=n>>>0<4,r=ja,!q)break;if(s=g,t=r+(s<<2)|0,u=0|f[t>>2],i=u,v=ja,w=v+48|0,x=0|f[w>>2],!(0!=(0|x))&&(z=g,A=ga,B=A+8|0,C=0|f[B>>2],z>>>0>=C>>>0)){ka=7;break a}if(E=i,0!=(0|E)){if(G=ha,H=X,I=i,J=ja,K=J+16|0,L=g,N=K+(L<<3)|0,O=ia,f[e>>2]=0|f[N>>2],f[e+4>>2]=0|f[N+4>>2],P=0|Fx[255&G](H,I,e,O),h=P,Q=h,(0|Q)>0){ka=10;break a}S=h,T=(0|S)<0,T&&(U=ga,V=U+4|0,W=0|f[V>>2],Y=W+-1|0,f[V>>2]=Y,Z=ja,$=g,_=Z+($<<2)|0,f[_>>2]=0)}aa=g,ba=aa+1|0,g=ba}da=r+48|0,ea=0|f[da>>2],ja=ea}return 7==(0|ka)?(M=0,fa=M,o=la,0|fa):10==(0|ka)?(M=0,fa=M,o=la,0|fa):15==(0|ka)?(M=1,fa=M,o=la,0|fa):0}function Li(a){a|=0;var b=0,c=0,d=0,e=0,h=0,i=0,j=0,k=0,m=0;if(m=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),b=a,c=b,d=c+24|0,e=0|f[d>>2],!(0!=(0|e)))return void(o=m);h=b,i=b,j=i+24|0,k=0|f[j>>2],Mi(h,k),o=m}function Mi(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,w=0;for(w=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),l=a,m=b,r=m,s=0|f[r>>2],n=s;;){if(t=n,!(0!=(0|t)))break;c=n,q=c,d=n,e=d+48|0,g=0|f[e>>2],n=g,h=l,i=q,xc(h,i)}j=l,k=m,xc(j,k),o=w}function Ni(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,k=0;k=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),c=a,d=b,e=c,g=d,h=g+12|0,i=0|f[h>>2],Ii(e,i),o=k}function Oi(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,l=0;return l=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),c=a,d=b,e=c,g=d,h=g+12|0,i=0|f[h>>2],j=0|Pi(e,i),o=l,0|j}function Pi(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,q=0,r=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,L=0,M=0,N=0;if(N=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),a,G=b,I=0,J=G,!(0!=(0|J)))return n=0,F=n,o=N,0|F;if(L=G,c=L+4|0,d=0|f[c>>2],e=d>>>0>0,g=G,e)return h=g+4|0,i=0|f[h>>2],n=i,F=n,o=N,0|F;for(j=0|f[g>>2],H=j;;){if(k=H,!(0!=(0|k))){M=10;break}if(m=H,q=m+48|0,r=0|f[q>>2],0==(0|r)){M=8;break}z=H,B=z+48|0,C=0|f[B>>2],H=C,D=I,E=D+4|0,I=E}return 8==(0|M)?(t=G,u=t+8|0,v=0|f[u>>2],w=I,x=w+v|0,I=x,y=I,n=y,F=n,o=N,0|F):10==(0|M)?(n=0,F=n,o=N,0|F):0}function Qi(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,l=0,m=0,q=0;if(q=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),e=a,g=b,h=g,i=h+12|0,j=0|f[i>>2],!(0!=(0|j)))return void(o=q);l=e,m=g,c=m+12|0,d=0|f[c>>2],Mi(l,d),o=q}function Ri(a,b,c){a|=0,b|=0,c|=0;var g=0;g=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),Si(a,0),o=g}function Si(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,i=0;i=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),d=i,c=b,e=d+4|0,f[e>>2]=3,g=c,f[d>>2]=g,f[a>>2]=0|f[d>>2],f[a+4>>2]=0|f[d+4>>2],o=i}function Ti(a,b,c){a|=0,b|=0,c|=0;var g=0;g=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),o=g}function Ui(a,b,c,d){a|=0,b|=0,c|=0,d|=0;var e=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,r=0,s=0,t=0,u=0,v=0,w=0,y=0;if(y=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),u=y,r=b,s=c,t=d,v=s,w=v+12|0,e=0|f[w>>2],0!=(0|e)&&(h=r,i=s,j=i+12|0,k=0|f[j>>2],l=t,m=0|Vi(h,k,l,u),n=255&m,0!=(0|n)))return f[a>>2]=0|f[u>>2],f[a+4>>2]=0|f[u+4>>2],void(o=y);Wi(a),o=y}function Vi(a,b,c,d){a|=0,b|=0,c|=0,d|=0;var e=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,x=0,y=0,z=0,A=0,C=0,D=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,T=0,U=0,V=0,W=0,X=0,Y=0;Y=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),T=b,U=c,V=d,h=T,i=0|f[h>>2],W=i;a:for(;;){if(j=W,!(0!=(0|j))){X=14;break}for(e=0;;){if(l=e,m=l>>>0<4,n=W,!m)break;if(q=e,r=n+(q<<2)|0,s=0|f[r>>2],g=s,t=W,u=t+48|0,v=0|f[u>>2],!(0!=(0|v))&&(x=e,y=T,z=y+8|0,A=0|f[z>>2],x>>>0>=A>>>0)){X=7;break a}if(C=g,D=U,(0|C)==(0|D)){X=9;break a}N=e,O=N+1|0,e=O}P=n+48|0,Q=0|f[P>>2],W=Q}return 7==(0|X)?(L=0,R=L,o=Y,0|R):9==(0|X)?(F=V,G=0!=(0|F),G&&(H=V,I=W,J=I+16|0,K=e,M=J+(K<<3)|0,f[H>>2]=0|f[M>>2],f[H+4>>2]=0|f[M+4>>2]),L=1,R=L,o=Y,0|R):14==(0|X)?(L=0,R=L,o=Y,0|R):0}function Wi(a){a|=0;var b=0,c=0,e=0;e=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),b=e,c=b+4|0,f[c>>2]=0,f[b>>2]=0,f[a>>2]=0|f[b>>2],f[a+4>>2]=0|f[b+4>>2],o=e}function Xi(a,b,c,d){a|=0,b|=0,c|=0,d|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,q=0;return q=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),e=q+8|0,h=b,i=d,f[e>>2]=0|f[c>>2],f[e+4>>2]=0|f[c+4>>2],j=0|Yi(e),k=j<<24>>24!=0,k?(l=h,m=0|f[c>>2],g=i,Ui(a,l,m,g),void(o=q)):(Wi(a),void(o=q))}function Yi(a){a|=0;var b=0,c=0,e=0,h=0;switch(h=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),c=a+4|0,0|(0|f[c>>2])){case 18:case 21:case 15:case 12:case 10:case 9:case 8:b=1;break;default:b=0}return e=b,o=h,0|e}function Zi(a,b,c,d){a|=0,b|=0,c|=0,d|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,B=0;B=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),e=B+16|0,u=a,v=b,w=c,y=v,z=y+12|0,g=0|f[z>>2],x=g,h=x,i=0!=(0|h),i||(j=u,k=0|$i(j),l=v,m=l+12|0,f[m>>2]=k,x=k),n=u,q=v,Zc(n,q),r=u,s=x,t=w,f[e>>2]=0|f[d>>2],f[e+4>>2]=0|f[d+4>>2],_i(r,s,t,e),o=B}function $i(a){a|=0;var b=0,c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,n=0;return n=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),b=a,e=b,g=0|Jc(e,12),d=g,h=d,i=h+4|0,f[i>>2]=0,j=d,f[j>>2]=0,k=d,l=k+8|0,f[l>>2]=0,c=d,o=n,0|c}function _i(a,b,c,d){a|=0,b|=0,c|=0,d|=0;var e=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Xa=0,Ya=0;Ya=o,o=o+48|0,(0|o)>=(0|p)&&ca(48),L=a,W=b,ga=c,i=W,j=0|f[i>>2],ra=j,Ca=0,Na=0,e=0;a:for(;;){if(k=ra,!(0!=(0|k))){Xa=14;break}for(g=0;;){if(m=g,n=m>>>0<4,q=ra,!n)break;if(r=g,s=q+(r<<2)|0,t=0|f[s>>2],h=t,u=ra,v=u+48|0,w=0|f[v>>2],!(0!=(0|w))&&(y=g,z=W,A=z+8|0,B=0|f[A>>2],y>>>0>=B>>>0)){Xa=7;break a}if(U=Na,V=0==(0|U),X=h,Y=0==(0|X),V&Y)Z=ra,Na=Z,$=g,e=$;else if(_=h,aa=ga,(0|_)==(0|aa)){Xa=11;break a}ia=g,ja=ia+1|0,g=ja}Ca=q,ka=ra,la=ka+48|0,ma=0|f[la>>2],ra=ma}return 7==(0|Xa)?(D=ga,E=ra,F=g,G=E+(F<<2)|0,f[G>>2]=D,H=ra,I=H+16|0,J=g,K=I+(J<<3)|0,f[K>>2]=0|f[d>>2],f[K+4>>2]=0|f[d+4>>2],M=g,N=M+1|0,O=W,P=O+8|0,f[P>>2]=N,Q=W,R=Q+4|0,S=0|f[R>>2],T=S+1|0,f[R>>2]=T,void(o=Ya)):11==(0|Xa)?(da=ra,ea=da+16|0,fa=g,ha=ea+(fa<<3)|0,f[ha>>2]=0|f[d>>2],f[ha+4>>2]=0|f[d+4>>2],void(o=Ya)):14==(0|Xa)?(na=W,oa=na+4|0,pa=0|f[oa>>2],qa=pa+1|0,f[oa>>2]=qa,sa=Na,0!=(0|sa)?(ua=ga,va=Na,wa=e,xa=va+(wa<<2)|0,f[xa>>2]=ua,ya=Na,za=ya+16|0,Aa=e,Ba=za+(Aa<<3)|0,f[Ba>>2]=0|f[d>>2],f[Ba+4>>2]=0|f[d+4>>2],void(o=Ya)):(Da=L,Ea=0|Jc(Da,52),ra=Ea,Fa=ra,0!=(0|Fa)?(Ha=ra,Ia=Ha+48|0,f[Ia>>2]=0,Ja=ga,Ka=ra,f[Ka>>2]=Ja,La=ra,Ma=La+16|0,f[Ma>>2]=0|f[d>>2],f[Ma+4>>2]=0|f[d+4>>2],Oa=W,Pa=Oa+8|0,f[Pa>>2]=1,Qa=Ca,Ra=0!=(0|Qa),Sa=ra,Ra?(Ta=Ca,Ua=Ta+48|0,f[Ua>>2]=Sa,void(o=Ya)):(Va=W,f[Va>>2]=Sa,void(o=Ya))):void(o=Ya))):void 0}function aj(a,b,c,d){a|=0,b|=0,c|=0,d|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,F=0;if(F=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),e=F+16|0,y=a,z=b,A=c,C=z,D=C+12|0,g=0|f[D>>2],B=g,h=B,i=0!=(0|h),j=y,i){if(n=B,q=A,r=0|Vi(j,n,q,d),r<<24>>24!=0)return void(o=F)}else k=0|$i(j),l=z,m=l+12|0,f[m>>2]=k,B=k;t=y,u=z,Zc(t,u),v=y,w=B,x=A,f[e>>2]=0|f[d>>2],f[e+4>>2]=0|f[d+4>>2],_i(v,w,x,e),o=F}function bj(a,b,c,d){a|=0,b|=0,c|=0,d|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,t=0;if(t=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),g=t+16|0,e=t+8|0,k=a,l=c,f[e>>2]=0|f[b>>2],f[e+4>>2]=0|f[b+4>>2],m=0|Yi(e),n=m<<24>>24!=0,q=k,n)return r=0|f[b>>2],h=l,f[g>>2]=0|f[d>>2],f[g+4>>2]=0|f[d+4>>2],Zi(q,r,h,g),void(o=t);i=k,j=0|sp(i,69160),Ar(q,j,56506)}function cj(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,w=0;return w=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),n=a,q=b,r=c,t=q,u=t+12|0,d=0|f[u>>2],s=d,e=s,g=0!=(0|e),g?(h=n,i=s,j=r,k=0|Vi(h,i,j,0),m=k,l=m,o=w,0|l):(m=0,l=m,o=w,0|l)}function dj(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,s=0;return s=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),d=s+8|0,j=a,k=c,f[d>>2]=0|f[b>>2],f[d+4>>2]=0|f[b+4>>2],l=0|Yi(d),m=l<<24>>24!=0,m?(n=j,q=0|f[b>>2],e=k,g=0|cj(n,q,e),i=g,h=i,o=s,0|h):(i=0,h=i,o=s,0|h)}function ej(a,b){a|=0,b|=0;var c=0,e=0,h=0,i=0,j=0,l=0,m=0,n=0,q=0,r=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,T=0,U=0,V=0,W=0,X=0,Y=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0;if(ha=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),da=ha,B=a,M=b,ea=B,fa=M,c=0|ri(ea,fa,da),X=c,e=0|f[da>>2],(0|e)<2)return q=0,aa=q,o=ha,0|aa;if(h=X,i=0|d[h>>0],j=i<<24>>24,64!=(0|j))return q=0,aa=q,o=ha,0|aa;if(l=X,m=l+1|0,n=0|d[m>>0],r=n<<24>>24,64==(0|r))return q=0,aa=q,o=ha,0|aa;for(ba=1;;){if(t=ba,u=0|f[da>>2],!((0|t)<(0|u))){ga=15;break}if(w=X,x=ba,y=w+x|0,z=0|d[y>>0],A=z<<24>>24,C=32|A,D=C-97|0,!(D>>>0<26)&&(F=X,G=ba,H=F+G|0,I=0|d[H>>0],J=I<<24>>24,K=J-48|0,!(K>>>0<10)&&(N=X,O=ba,P=N+O|0,Q=0|d[P>>0],R=Q<<24>>24,!(95==(0|R))&&(T=X,U=ba,V=T+U|0,W=0|d[V>>0],Y=W<<24>>24,Y>>>0<=127)))){ga=13;break}$=ba,_=$+1|0,ba=_}return 13==(0|ga)?(q=0,aa=q,o=ha,0|aa):15==(0|ga)?(q=1,aa=q,o=ha,0|aa):0}function fj(a,b){a|=0,b|=0;var c=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,n=0,q=0,s=0;if(s=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),q=s,i=s+8|0,g=a,h=b,j=g,k=h,l=0|ej(j,k),l<<24>>24!=0)return void(o=s);n=g,c=h,e=g,f=h,ui(i,e,f),d[q>>0]=0|d[i>>0],d[q+1>>0]=0|d[i+1>>0],d[q+2>>0]=0|d[i+2>>0],d[q+3>>0]=0|d[i+3>>0],d[q+4>>0]=0|d[i+4>>0],d[q+5>>0]=0|d[i+5>>0],d[q+6>>0]=0|d[i+6>>0],d[q+7>>0]=0|d[i+7>>0],Er(n,c,56535,q)}function gj(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,J=0;if(J=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),A=a,E=0|f[b>>2],C=E,F=0|f[c>>2],D=F,G=C,H=G+12|0,d=0|f[H>>2],e=0!=(0|d),e&&(g=A,h=C,i=h+12|0,j=0|f[i>>2],Mi(g,j),k=C,l=k+12|0,f[l>>2]=0),m=D,n=m+12|0,q=0|f[n>>2],!(0!=(0|q)))return void(o=J);s=A,t=C,Zc(s,t),u=A,v=D,w=v+12|0,x=0|f[w>>2],y=0|hj(u,x),z=C,B=z+12|0,f[B>>2]=y,o=J}function hj(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0;Y=o,o=o+48|0,(0|o)>=(0|p)&&ca(48),c=Y+40|0,W=Y,B=a,M=b,d=M,e=0|f[d>>2],S=e,g=B,h=0|$i(g),T=h;a:for(;;){if(i=S,!(0!=(0|i))){X=10;break}for(U=0;;){if(k=U,l=k>>>0<4,m=S,!l)break;if(n=U,r=m+(n<<2)|0,s=0|f[r>>2],V=s,t=S,u=t+16|0,v=U,w=u+(v<<3)|0,f[W>>2]=0|f[w>>2],f[W+4>>2]=0|f[w+4>>2],x=S,y=x+48|0,z=0|f[y>>2],0==(0|z)&&(C=U,D=M,E=D+8|0,F=0|f[E>>2],C>>>0>=F>>>0)){X=7;break a}I=B,J=T,K=V,f[c>>2]=0|f[W>>2],f[c+4>>2]=0|f[W+4>>2],_i(I,J,K,c),L=U,N=L+1|0,U=N}O=m+48|0,P=0|f[O>>2],S=P}return 7==(0|X)?(H=T,q=H,R=q,o=Y,0|R):10==(0|X)?(Q=T,q=Q,R=q,o=Y,0|R):0}function ij(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,Y=0;return Y=o,o=o+160|0,(0|o)>=(0|p)&&ca(160),l=Y+144|0,k=Y+136|0,j=Y+128|0,i=Y+120|0,h=Y+112|0,g=Y+104|0,e=Y+96|0,d=Y+88|0,V=Y+56|0,W=Y+48|0,m=Y+40|0,n=Y+32|0,q=Y+24|0,r=Y+16|0,s=Y+8|0,t=Y,I=b,R=c,u=R,v=u+12|0,w=0|f[v>>2],S=w,x=I,y=S,z=0|Pi(x,y),T=z,A=T,B=A>>>0>0,C=I,D=R,B?(jj(V,D),f[d>>2]=0|f[V>>2],f[d+4>>2]=0|f[V+4>>2],E=0|hq(C,d),U=E,F=I,kg(W,F,30),G=I,f[e>>2]=0|f[W>>2],f[e+4>>2]=0|f[W+4>>2],ch(m,G,e,56584,2),H=I,J=U,f[g>>2]=0|f[W>>2],f[g+4>>2]=0|f[W+4>>2],eh(n,H,g,J),K=I,f[h>>2]=0|f[W>>2],f[h+4>>2]=0|f[W+4>>2],ch(q,K,h,68074,1),L=I,M=I,N=R,Vg(r,M,N),f[i>>2]=0|f[W>>2],f[i+4>>2]=0|f[W+4>>2],f[j>>2]=0|f[r>>2],f[j+4>>2]=0|f[r+4>>2],xg(L,i,j),O=I,P=S,Ki(O,P,125,W),Q=I,f[k>>2]=0|f[W>>2],f[k+4>>2]=0|f[W+4>>2],ch(s,Q,k,65540,1),f[a>>2]=0|f[W>>2],f[a+4>>2]=0|f[W+4>>2],void(o=Y)):(jj(t,D),f[l>>2]=0|f[t>>2],f[l+4>>2]=0|f[t+4>>2],Jf(a,C,l),void(o=Y))}function jj(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,l=0;l=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),d=l,c=b,e=c,g=0|f[e>>2],h=255&g,i=d+4|0,f[i>>2]=h,j=c,f[d>>2]=j,f[a>>2]=0|f[d>>2],f[a+4>>2]=0|f[d+4>>2],o=l}function kj(a,b,c,e){a|=0,b|=0,c|=0,e|=0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ja=0;return ja=o,o=o+176|0,(0|o)>=(0|p)&&ca(176),n=ja+160|0,m=ja+152|0,l=ja+144|0,k=ja+136|0,j=ja+128|0,i=ja+120|0,h=ja+112|0,g=ja+104|0,fa=ja+80|0,ha=ja+72|0,q=ja+64|0,s=ja+48|0,t=ja+40|0,u=ja+32|0,v=ja+24|0,w=ja+16|0,x=ja+8|0,y=ja,U=a,da=b,ea=e,z=ea,f[fa>>2]=0|f[z>>2],f[fa+4>>2]=0|f[z+4>>2],A=0|f[fa>>2],B=0|f[A>>2],C=B>>>11,D=8&C,E=0!=(0|D),F=0|f[fa>>2],G=F+12|0,E?J=G:(H=G+8|0,I=0|f[H>>2],J=I),r=J,K=r,L=0|d[K>>0],M=L<<24>>24,N=45==(0|M),N?(O=r,d[O>>0]=35,P=U,f[g>>2]=0|f[fa>>2],f[g+4>>2]=0|f[fa+4>>2],ch(s,P,g,67795,1)):(Q=U,f[h>>2]=0|f[fa>>2],f[h+4>>2]=0|f[fa+4>>2],ch(t,Q,h,57540,2)),R=U,S=da,T=0|ri(R,S,ha),ga=T,V=U,W=ga,X=0|f[ha>>2],f[i>>2]=0|f[fa>>2],f[i+4>>2]=0|f[fa+4>>2],ch(u,V,i,W,X),Y=U,f[j>>2]=0|f[fa>>2],f[j+4>>2]=0|f[fa+4>>2],ch(v,Y,j,66243,1),Z=c+4|0,$=0|f[Z>>2],_=8==(0|$),aa=U,_?(f[k>>2]=0|f[c>>2],f[k+4>>2]=0|f[c+4>>2],Jf(w,aa,k),f[q>>2]=0|f[w>>2],f[q+4>>2]=0|f[w+4>>2],ba=U,f[m>>2]=0|f[fa>>2],f[m+4>>2]=0|f[fa+4>>2],f[n>>2]=0|f[q>>2],f[n+4>>2]=0|f[q+4>>2],fh(y,ba,m,n),o=ja,0):(f[l>>2]=0|f[c>>2],f[l+4>>2]=0|f[c+4>>2],Ef(x,aa,l),f[q>>2]=0|f[x>>2],f[q+4>>2]=0|f[x+4>>2],ba=U,f[m>>2]=0|f[fa>>2],f[m+4>>2]=0|f[fa+4>>2],f[n>>2]=0|f[q>>2],f[n+4>>2]=0|f[q+4>>2],fh(y,ba,m,n),o=ja,0)}function lj(a,b,c,d){a|=0,b|=0,c|=0,d|=0;var e=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,q=0,r=0,t=0,u=0,v=0,w=0,x=0,A=0;if(A=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),e=A+24|0,w=A,t=b,u=d,f[e>>2]=0|f[c>>2],f[e+4>>2]=0|f[c+4>>2],x=0|Yi(e),x<<24>>24!=0&&(g=0|f[c>>2],h=g+12|0,i=0|f[h>>2],v=i,j=v,0!=(0|j)&&(l=t,m=v,n=u,q=0|mj(l,m,n,w),r=255&q,0!=(0|r))))return f[a>>2]=0|f[w>>2],f[a+4>>2]=0|f[w+4>>2],void(o=A);nj(a),o=A}function mj(a,b,c,d){a|=0,b|=0,c|=0,d|=0;var e=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,x=0,y=0,z=0,A=0,C=0,D=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0;ea=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),$=b,_=c,aa=d,h=$,i=0|f[h>>2],ba=i;a:for(;;){if(j=ba,!(0!=(0|j))){da=14;break}for(e=0;;){if(l=e,m=l>>>0<4,n=ba,!m)break;if(q=e,r=n+(q<<2)|0,s=0|f[r>>2],g=s,t=ba,u=t+48|0,v=0|f[u>>2],!(0!=(0|v))&&(x=e,y=$,z=y+8|0,A=0|f[z>>2],x>>>0>=A>>>0)){da=7;break a}if(C=g,D=_,(0|C)==(0|D)){da=9;break a}U=e,V=U+1|0,e=V}X=n+48|0,Y=0|f[X>>2],ba=Y}return 7==(0|da)?(L=0,Z=L,o=ea,0|Z):9==(0|da)?(F=$,G=F+4|0,H=0|f[G>>2],I=H+-1|0,f[G>>2]=I,J=ba,K=e,M=J+(K<<2)|0,f[M>>2]=0,N=aa,O=0!=(0|N),O&&(P=aa,Q=ba,R=Q+16|0,S=e,T=R+(S<<3)|0,f[P>>2]=0|f[T>>2],f[P+4>>2]=0|f[T+4>>2]),L=1,Z=L,o=ea,0|Z):14==(0|da)?(L=0,Z=L,o=ea,0|Z):0}function nj(a){a|=0;var b=0,c=0,e=0;e=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),b=e,c=b+4|0,f[c>>2]=5,f[b>>2]=0,f[a>>2]=0|f[b>>2],f[a+4>>2]=0|f[b+4>>2],o=e}function oj(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,r=0;r=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),d=r+8|0,h=b,i=c,j=h,k=h,l=k+12|0,m=0|f[l>>2],n=m+4|0,e=0|f[n>>2],g=i,f[d>>2]=0|f[e>>2],f[d+4>>2]=0|f[e+4>>2],Xi(a,j,d,g),o=r}function pj(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,s=0;s=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),e=s+16|0,d=s+8|0,i=a,j=b,k=i,l=i,m=l+12|0,n=0|f[m>>2],q=n+4|0,g=0|f[q>>2],h=j,f[d>>2]=0|f[g>>2],f[d+4>>2]=0|f[g+4>>2],f[e>>2]=0|f[c>>2],f[e+4>>2]=0|f[c+4>>2],bj(k,d,h,e),o=s}function qj(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,x=0;x=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),d=x+24|0,q=x+8|0,r=x,n=b,s=n,Ln(r,s),f[q>>2]=0|f[r>>2],f[q+4>>2]=0|f[r+4>>2],f[d>>2]=0|f[c>>2],f[d+4>>2]=0|f[c+4>>2],t=0|Yi(d),u=255&t,v=0!=(0|u),v&&(e=0|f[c>>2],g=e+12|0,h=0|f[g>>2],0!=(0|h)&&(j=n,k=0|f[c>>2],l=k+12|0,m=0|f[l>>2],Ki(j,m,126,q))),f[a>>2]=0|f[q>>2],f[a+4>>2]=0|f[q+4>>2],o=x}function rj(a,b,c,e){a|=0,b|=0,c|=0,e|=0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,J=0;return J=o,o=o+64|0,(0|o)>=(0|p)&&ca(64),h=J+48|0,g=J+40|0,F=J+16|0,H=J+8|0,i=J,C=a,D=b,E=e,j=E,f[F>>2]=0|f[j>>2],f[F+4>>2]=0|f[j+4>>2],k=C,l=D,m=0|ri(k,l,H),G=m,n=0|f[H>>2],(0|n)>1?(r=G,s=0|d[r>>0],t=s<<24>>24,64==(0|t)?(v=G,w=v+1|0,x=0|d[w>>0],y=x<<24>>24,64!=(0|y)?(A=C,B=D,sj(i,B),f[g>>2]=0|f[F>>2],f[g+4>>2]=0|f[F+4>>2],f[h>>2]=0|f[i>>2],f[h+4>>2]=0|f[i+4>>2],Zn(A,g,h),o=J,0):(o=J,0)):(o=J,0)):(o=J,0)}function sj(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,i=0;i=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),d=i,c=b,e=d+4|0,f[e>>2]=4,g=c,f[d>>2]=g,f[a>>2]=0|f[d>>2],f[a+4>>2]=0|f[d+4>>2],o=i}function tj(a,b,c){a|=0,b|=0,c|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,A=0;for(A=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),t=A+16|0,v=A,s=b,w=s,Ln(v,w),f[t>>2]=0|f[v>>2],f[t+4>>2]=0|f[v+4>>2],x=0|f[c>>2],u=x;;){if(y=u,!(0!=(0|y)))break;e=u,g=e+12|0,h=0|f[g>>2],i=0!=(0|h),i&&(j=s,k=u,l=k+12|0,m=0|f[l>>2],Ki(j,m,127,t)),n=u,q=n+20|0,r=0|f[q>>2],u=r}f[a>>2]=0|f[t>>2],f[a+4>>2]=0|f[t+4>>2],o=A}function uj(a,b,c,e){a|=0,b|=0,c|=0,e|=0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,J=0;return J=o,o=o+64|0,(0|o)>=(0|p)&&ca(64),h=J+48|0,g=J+40|0,F=J+16|0,H=J+8|0,i=J,C=a,D=b,E=e,j=E,f[F>>2]=0|f[j>>2],f[F+4>>2]=0|f[j+4>>2],k=C,l=D,m=0|ri(k,l,H),G=m,n=0|f[H>>2],(0|n)>2?(r=G,s=0|d[r>>0],t=s<<24>>24,64==(0|t)?(v=G,w=v+1|0,x=0|d[w>>0],y=x<<24>>24,64==(0|y)?(A=C,B=D,sj(i,B),f[g>>2]=0|f[F>>2],f[g+4>>2]=0|f[F+4>>2],f[h>>2]=0|f[i>>2],f[h+4>>2]=0|f[i+4>>2],Zn(A,g,h),o=J,0):(o=J,0)):(o=J,0)):(o=J,0)}function vj(a,b,c,e){a|=0,b|=0,c|=0,e|=0;var g=0,i=0,j=0,k=0,l=0,m=0,q=0,r=0,s=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,wa=0,xa=0,ya=0,za=0;for(za=o,o=o+80|0,(0|o)>=(0|p)&&ca(80),wa=za,ta=za+48|0,ua=za+40|0,i=za+32|0,j=za+24|0,k=za+16|0,O=b,Z=c,ja=e,l=Z,sa=l;;){if(m=Z,!(0!=(0|m)))break;if(q=Z,r=q+12|0,s=0|f[r>>2],0!=(0|s)&&(u=O,v=Z,w=v+12|0,x=0|f[w>>2],y=ja,z=0|Vi(u,x,y,ta),A=255&z,0!=(0|A))){ya=5;break}C=Z,D=C+20|0,E=0|f[D>>2],Z=E}if(5==(0|ya))return f[a>>2]=0|f[ta>>2],f[a+4>>2]=0|f[ta+4>>2],void(o=za);F=sa,G=0!=(0|F);a:if(G&&(H=sa,I=0|f[H>>2],J=255&I,12==(0|J)&&(L=O,M=sa,N=O,P=0|ji(N,68237,12),Ui(i,L,M,P),f[ua>>2]=0|f[i>>2],f[ua+4>>2]=0|f[i+4>>2],Q=0|f[ua>>2],Z=Q,R=Z,S=0|f[R>>2],T=255&S,U=9==(0|T),V=Z,W=0!=(0|V),U&W))){for(;;){if(X=Z,Y=X+12|0,$=0|f[Y>>2],0!=(0|$)&&(aa=O,ba=Z,da=ba+12|0,ea=0|f[da>>2],fa=ja,ga=0|Vi(aa,ea,fa,ta),ha=255&ga,0!=(0|ha)))break;if(ka=Z,la=ka+20|0,ma=0|f[la>>2],Z=ma,g=Z,!(0!=(0|g)))break a}return f[a>>2]=0|f[ta>>2],f[a+4>>2]=0|f[ta+4>>2],void(o=za)}na=O,oa=ja,pa=O,qa=ja,ui(j,pa,qa),ra=sa,jj(k,ra),d[wa>>0]=0|d[j>>0],d[wa+1>>0]=0|d[j+1>>0],d[wa+2>>0]=0|d[j+2>>0],d[wa+3>>0]=0|d[j+3>>0],d[wa+4>>0]=0|d[j+4>>0],d[wa+5>>0]=0|d[j+5>>0],d[wa+6>>0]=0|d[j+6>>0],d[wa+7>>0]=0|d[j+7>>0],xa=wa+8|0,d[xa>>0]=0|d[k>>0],d[xa+1>>0]=0|d[k+1>>0],d[xa+2>>0]=0|d[k+2>>0],d[xa+3>>0]=0|d[k+3>>0],d[xa+4>>0]=0|d[k+4>>0],d[xa+5>>0]=0|d[k+5>>0],d[xa+6>>0]=0|d[k+6>>0],d[xa+7>>0]=0|d[k+7>>0],Er(na,oa,56587,wa)}function wj(a,b,c,d){a|=0,b|=0,c|=0,d|=0;var e=0,g=0,h=0,i=0,j=0,l=0;l=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),e=b,g=d,h=e,i=0|f[c>>2],j=g,vj(a,h,i,j),o=l}function xj(a,b,c,d){a|=0,b|=0,c|=0,d|=0;var e=0,g=0,h=0,j=0,k=0,l=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0;for(_=o,o=o+48|0,(0|o)>=(0|p)&&ca(48),g=_+32|0,e=_+24|0,N=a,V=b,W=c,Z=V,X=Z;;){if(h=V,!(0!=(0|h)))break;if(j=V,k=j+12|0,l=0|f[k>>2],0!=(0|l)&&(n=V,q=n+12|0,r=0|f[q>>2],Y=r,s=N,t=Y,u=W,v=0|Vi(s,t,u,0),v<<24>>24!=0)){$=5;break}C=V,D=C+20|0,E=0|f[D>>2],V=E}if(5==(0|$))return x=N,y=V,Zc(x,y),z=N,A=Y,B=W,f[e>>2]=0|f[d>>2],f[e+4>>2]=0|f[d+4>>2],_i(z,A,B,e),void(o=_);F=X,G=F+12|0,H=0|f[G>>2],I=0!=(0|H),I||(J=N,K=0|$i(J),L=X,M=L+12|0,f[M>>2]=K),O=N,P=X,Zc(O,P),Q=N,R=X,S=R+12|0,T=0|f[S>>2],U=W,f[g>>2]=0|f[d>>2],f[g+4>>2]=0|f[d+4>>2],_i(Q,T,U,g),o=_}function yj(a,b,c,d){a|=0,b|=0,c|=0,d|=0;var e=0,g=0,h=0,i=0,j=0,k=0,m=0;m=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),e=m+8|0,g=a,h=c,i=g,j=0|f[b>>2],k=h,f[e>>2]=0|f[d>>2],f[e+4>>2]=0|f[d+4>>2],xj(i,j,k,e),o=m}function zj(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,D=0,E=0;for(E=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),x=a,y=b,z=c;;){if(B=y,!(0!=(0|B))){D=7;break}if(d=y,e=d+12|0,g=0|f[e>>2],0!=(0|g)&&(i=y,j=i+12|0,k=0|f[j>>2],A=k,l=x,m=A,n=z,q=0|Vi(l,m,n,0),q<<24>>24!=0)){D=5;break}s=y,t=s+20|0,u=0|f[t>>2],y=u}return 5==(0|D)?(w=1,v=w,o=E,0|v):7==(0|D)?(w=0,v=w,o=E,0|v):0}function Aj(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,l=0;return l=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),d=a,e=c,g=d,h=0|f[b>>2],i=e,j=0|zj(g,h,i),o=l,0|j}function Bj(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,F=0;if(F=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),x=b,y=c,A=x,B=A+12|0,C=0|f[B>>2],D=C+16|0,d=0|f[D>>2],e=d+4|0,g=0|f[e>>2],h=g+16|0,i=0|f[h>>2],z=i,j=z,0!=(0|j))return u=x,v=z,w=y,vj(a,u,v,w),void(o=F);l=x,m=l+12|0,n=0|f[m>>2],q=n+16|0,r=0|f[q>>2],s=r+44|0,t=0|f[s>>2],z=t,u=x,v=z,w=y,vj(a,u,v,w),o=F}function Cj(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,G=0;G=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),d=G+16|0,y=a,z=b,B=y,C=B+12|0,D=0|f[C>>2],E=D+16|0,e=0|f[E>>2],g=e+4|0,h=0|f[g>>2],i=h+16|0,j=0|f[i>>2],A=j,k=A,l=0!=(0|k),l||(m=y,n=m+12|0,q=0|f[n>>2],r=q+16|0,s=0|f[r>>2],t=s+44|0,u=0|f[t>>2],A=u),v=y,w=A,x=z,f[d>>2]=0|f[c>>2],f[d+4>>2]=0|f[c+4>>2],xj(v,w,x,d),o=G}function Dj(a,b,c,d){a|=0,b|=0,c|=0,d|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,n=0;n=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),e=n+8|0,g=b,h=d,i=g,f[e>>2]=0|f[c>>2],f[e+4>>2]=0|f[c+4>>2],Ej(i,e),j=g,k=0|f[c>>2],l=h,Fj(a,j,k,l),o=n}function Ej(a,b){a|=0,b|=0;var c=0,d=0,g=0,h=0,i=0,k=0;switch(k=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),c=a,d=b+4|0,0|(0|f[d>>2])){case 12:case 10:case 9:return void(o=k);default:g=c,h=c,i=0|sp(h,69204),Ar(g,i,56625)}}function Fj(a,b,c,d){a|=0,b|=0,c|=0,d|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,n=0,q=0,r=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,aa=0;aa=o,o=o+80|0,(0|o)>=(0|p)&&ca(80),e=aa+56|0,Y=aa+32|0,h=aa+16|0,i=aa+8|0,j=aa,M=b,V=c,W=d,k=V,X=k,g=0;a:for(;;){for(;;){if(l=X,!(0!=(0|l)))break;if(n=X,q=n+12|0,r=0|f[q>>2],0!=(0|r)&&(t=X,u=t+12|0,v=0|f[u>>2],Z=v,w=M,x=Z,y=W,z=0|Vi(w,x,y,Y),z<<24>>24!=0)){_=6;break a}B=X,C=B+20|0,D=0|f[C>>2],X=D}if(E=g,F=E<<24>>24==0,G=V,H=0!=(0|G),!(F&H)){_=11;break}if(I=V,J=0|f[I>>2],K=255&J,!(10==(0|K))){_=11;break}N=M,O=N+32|0,P=0|f[O>>2],X=P,g=1}return 6==(0|_)?(f[a>>2]=0|f[Y>>2],f[a+4>>2]=0|f[Y+4>>2],void(o=aa)):11==(0|_)?(Q=W,sj(i,Q),f[h>>2]=0|f[i>>2],f[h+4>>2]=0|f[i+4>>2],R=M,S=V,jj(j,S),T=M,U=0|ji(T,66034,13),f[e>>2]=0|f[j>>2],f[e+4>>2]=0|f[j+4>>2],Yj(a,R,e,U,1,h),void(o=aa)):void 0}function Gj(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ja=0,ka=0,la=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ca=0;Ca=o,o=o+48|0,(0|o)>=(0|p)&&ca(48),ra=Ca+16|0,za=Ca+8|0,Aa=Ca,A=b,L=c,d=A,e=d+12|0,g=0|f[e>>2],h=g+16|0,i=0|f[h>>2],j=i+4|0,k=0|f[j>>2],l=k+16|0,m=0|f[l>>2],W=m,n=W,q=0!=(0|n),q||(r=A,s=r+12|0,t=0|f[s>>2],u=t+16|0,v=0|f[u>>2],w=v+44|0,x=0|f[w>>2],W=x),y=W,z=0!=(0|y);a:if(z){if(B=W,C=B+12|0,D=0|f[C>>2],0!=(0|D)&&(F=A,G=W,H=G+12|0,I=0|f[H>>2],J=L,K=0|Vi(F,I,J,ra),M=255&K,0!=(0|M)))return f[a>>2]=0|f[ra>>2],f[a+4>>2]=0|f[ra+4>>2],void(o=Ca);for(O=W,P=0|f[O>>2],Q=255&P,R=12==(0|Q),R&&(S=A,T=W,U=A,V=0|ji(U,68237,12),Ui(Aa,S,T,V),f[za>>2]=0|f[Aa>>2],f[za+4>>2]=0|f[Aa+4>>2],X=0|f[za>>2],ga=X,Y=ga,Z=0|f[Y>>2],$=255&Z,9==(0|$)&&(aa=ga,W=aa)),ba=W,ga=ba;;){if(da=A,ea=ga,fa=0|gp(da,ea),ga=fa,ha=ga,!(0!=(0|ha)))break a;if(ja=ga,ka=ja+12|0,la=0|f[ka>>2],0!=(0|la)&&(na=A,oa=ga,pa=oa+12|0,qa=0|f[pa>>2],sa=L,ta=0|Vi(na,qa,sa,ra),ua=255&ta,0!=(0|ua)))break}return f[a>>2]=0|f[ra>>2],f[a+4>>2]=0|f[ra+4>>2],void(o=Ca)}wa=A,xa=W,ya=L,Fj(a,wa,xa,ya),o=Ca}function Hj(a,b,c,d){a|=0,b|=0,c|=0,d|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,q=0;q=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),h=q+24|0,g=q+16|0,e=q+8|0,i=a,j=c,k=i,f[e>>2]=0|f[b>>2],f[e+4>>2]=0|f[b+4>>2],Ej(k,e),l=i,m=j,f[g>>2]=0|f[b>>2],f[g+4>>2]=0|f[b+4>>2],f[h>>2]=0|f[d>>2],f[h+4>>2]=0|f[d+4>>2],bj(l,g,m,h),o=q}function Ij(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,G=0;G=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),d=G+16|0,y=a,z=b,B=y,C=B+12|0,D=0|f[C>>2],E=D+16|0,e=0|f[E>>2],g=e+4|0,h=0|f[g>>2],i=h+16|0,j=0|f[i>>2],A=j,k=A,l=0!=(0|k),l||(m=y,n=m+12|0,q=0|f[n>>2],r=q+16|0,s=0|f[r>>2],t=s+44|0,u=0|f[t>>2],A=u),v=y,w=A,x=z,f[d>>2]=0|f[c>>2],f[d+4>>2]=0|f[c+4>>2],Zi(v,w,x,d),o=G}function Jj(a,b,c,d){a|=0,b|=0,c|=0,d|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,r=0;r=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),e=r+16|0,i=a,j=b,k=c,l=i,m=j,n=i,g=k,h=0|ki(n,g),f[e>>2]=0|f[d>>2],f[e+4>>2]=0|f[d+4>>2],Zi(l,m,h,e),o=r}function Kj(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,n=0;n=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),d=n+8|0,e=a,g=b,h=e,i=e,j=i+32|0,k=0|f[j>>2],l=g,f[d>>2]=0|f[c>>2],f[d+4>>2]=0|f[c+4>>2],Jj(h,k,l,d),o=n}function Lj(a,b,c){a|=0,b|=0,c|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,O=0;O=o,o=o+48|0,(0|o)>=(0|p)&&ca(48),M=O,F=O+24|0,G=O+36|0,I=O+8|0,D=b,d[G>>0]=1,J=0|f[c>>2],H=J,K=D,f[M>>2]=G,Kp(K,68724,M),h=D,Ln(I,h),f[F>>2]=0|f[I>>2],f[F+4>>2]=0|f[I+4>>2],e=H,g=0!=(0|e);a:if(g)for(;;){if(i=H,j=i+12|0,k=0|f[j>>2],l=0!=(0|k),l&&(m=D,n=H,q=n+12|0,r=0|f[q>>2],Ki(m,r,128,F)),s=0|d[G>>0],!(s<<24>>24!=0))break a;if(u=H,v=u+20|0,w=0|f[v>>2],H=w,x=H,y=D,z=y+32|0,A=0|f[z>>2],B=(0|x)!=(0|A),C=H,E=0!=(0|C),!(B&E))break}f[a>>2]=0|f[F>>2],f[a+4>>2]=0|f[F+4>>2],o=O}function Mj(a,b,c,e){a|=0,b|=0,c|=0,e|=0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,F=0;return F=o,o=o+64|0,(0|o)>=(0|p)&&ca(64),h=F+48|0,g=F+40|0,B=F+16|0,D=F+8|0,i=F,y=a,z=b,A=e,j=A,f[B>>2]=0|f[j>>2],f[B+4>>2]=0|f[j+4>>2],k=y,l=z,m=0|ri(k,l,D),C=m,n=0|f[D>>2],(0|n)>=1?(r=C,s=0|d[r>>0],t=s<<24>>24,u=t-65|0,u>>>0<26?(w=y,x=z,sj(i,x),f[g>>2]=0|f[B>>2],f[g+4>>2]=0|f[B+4>>2],f[h>>2]=0|f[i>>2],f[h+4>>2]=0|f[i+4>>2],Zn(w,g,h),o=F,0):(o=F,0)):(o=F,0)}function Nj(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,v=0;return v=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),n=v,l=b,m=c,q=l,r=q+24|0,s=0|f[r>>2],0!=(0|s)?(d=l,e=l,g=e+24|0,h=0|f[g>>2],i=m,j=0|Vi(d,h,i,n),k=j<<24>>24!=0,k?(f[a>>2]=0|f[n>>2],f[a+4>>2]=0|f[n+4>>2],void(o=v)):(Wi(a),void(o=v))):(Wi(a),void(o=v))}function Oj(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,y=0;y=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),d=y+16|0,q=a,r=b,t=q,u=t+24|0,v=0|f[u>>2],w=0!=(0|v),e=q,w?(j=e+24|0,k=0|f[j>>2],s=k):(g=0|$i(e),h=q,i=h+24|0,f[i>>2]=g,s=g),l=q,m=s,n=r,f[d>>2]=0|f[c>>2],f[d+4>>2]=0|f[c+4>>2],_i(l,m,n,d),o=y}function Pj(a,b,c){a|=0,b|=0,c|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,K=0;for(K=o,o=o+64|0,(0|o)>=(0|p)&&ca(64),g=K+40|0,e=K+32|0,E=K+16|0,G=K+48|0,H=K,C=b,I=C,h=I+24|0,i=0|f[h>>2],D=i,j=C,Ln(E,j),k=D,l=0!=(0|k),l&&(m=C,n=D,Ki(m,n,129,E)),d[G>>0]=36,q=G+2|0,d[q>>0]=0,F=1;;){if(r=F,!(r>>>0<=9))break;t=F,u=t+48|0,v=255&u,w=G+1|0,d[w>>0]=v,x=C,y=C,z=0|gi(y,G,2),sj(H,z),f[e>>2]=0|f[E>>2],f[e+4>>2]=0|f[E+4>>2],f[g>>2]=0|f[H>>2],f[g+4>>2]=0|f[H+4>>2],Zn(x,e,g),A=F,B=A+1|0,F=B}f[a>>2]=0|f[E>>2],f[a+4>>2]=0|f[E+4>>2],o=K}function Qj(a,b,c,d){a|=0,b|=0,c|=0,d|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,s=0;return s=o,o=o+48|0,(0|o)>=(0|p)&&ca(48),g=s+40|0,e=s+32|0,m=s+8|0,n=s,j=a,k=b,l=d,q=l,f[m>>2]=0|f[q>>2],f[m+4>>2]=0|f[q+4>>2],h=j,i=k,sj(n,i),f[e>>2]=0|f[m>>2],f[e+4>>2]=0|f[m+4>>2],f[g>>2]=0|f[n>>2],f[g+4>>2]=0|f[n+4>>2],Zn(h,e,g),o=s,0}function Rj(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,l=0;return l=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),d=l+8|0,e=a,g=c,h=e,i=g,f[d>>2]=0|f[b>>2],f[d+4>>2]=0|f[b+4>>2],j=0|Sj(h,d,i,1,1),o=l,0|j}function Sj(a,b,c,d,e){a|=0,b|=0,c|=0,d|=0,e|=0;var g=0,h=0,i=0,j=0,k=0,l=0,n=0,q=0,r=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,B=0,D=0,E=0,F=0,G=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,ba=0,da=0;da=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),Y=a,Z=c,$=d,_=e,j=0|f[b>>2],g=j,i=0,k=g,h=k;a:for(;;){for(;;){if(l=h,!(0!=(0|l)))break;if(n=h,q=n+12|0,r=0|f[q>>2],0!=(0|r)&&(t=Y,u=h,v=u+12|0,w=0|f[v>>2],x=Z,y=0|Vi(t,w,x,0),z=255&y,0!=(0|z))){ba=6;break a}if(B=_,!(B<<24>>24!=0)&&(D=g,E=Y,F=E+32|0,G=0|f[F>>2],(0|D)!=(0|G)))break;I=h,J=I+20|0,K=0|f[J>>2],h=K}if(L=$,M=L<<24>>24!=0,N=i,O=N<<24>>24!=0,M|O){ba=13;break}if(P=g,Q=0|f[P>>2],R=255&Q,!(10==(0|R))){ba=13;break}i=1,T=Y,U=T+32|0,V=0|f[U>>2],h=V}return 6==(0|ba)?(W=1,X=W,o=da,0|X):13==(0|ba)?(W=0,X=W,o=da,0|X):0}function Tj(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,l=0;return l=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),d=l+8|0,e=a,g=c,h=e,i=g,f[d>>2]=0|f[b>>2],f[d+4>>2]=0|f[b+4>>2],j=0|Sj(h,d,i,1,0),o=l,0|j}function Uj(a,b,c,d){a|=0,b|=0,c|=0,d|=0;var e=0,g=0,h=0,i=0,j=0,l=0;l=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),e=l+8|0,g=b,h=d,i=g,j=h,f[e>>2]=0|f[c>>2],f[e+4>>2]=0|f[c+4>>2],Xi(a,i,e,j),o=l}function Vj(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,l=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,J=0;return J=o,o=o+48|0,(0|o)>=(0|p)&&ca(48),F=J+16|0,G=J+8|0,H=J,C=a,D=b,E=c,d=C,e=D,g=C,h=0|ji(g,64870,11),Ui(G,d,e,h),f[F>>2]=0|f[G>>2],f[F+4>>2]=0|f[G+4>>2],i=F+4|0,j=0|f[i>>2],0==(0|j)&&0==(0|(l=0|f[F>>2]))?(n=E,q=0!=(0|n),q?(r=D,f[H>>2]=r,s=H+4|0,f[s>>2]=0,t=C,u=E,v=u+12|0,w=0|f[v>>2],Ki(t,w,130,H),x=H+4|0,y=0|f[x>>2],A=y,B=A,o=J,0|B):(A=0,B=A,o=J,0|B)):(z=0|f[F>>2],A=z,B=A,o=J,0|B)}function Wj(a,b,c,d){a|=0,b|=0,c|=0,d|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,q=0,r=0,t=0,u=0,v=0,w=0,x=0,z=0,A=0,B=0,C=0,E=0;return E=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),a,z=b,A=d,e=A,B=e,g=B,h=0|f[g>>2],C=h,i=c+4|0,j=0|f[i>>2],k=C,l=0|f[k>>2],m=255&l,(0|j)==(0|m)&&(q=0|f[c>>2],r=C,(0|q)==(0|r))?(t=z,u=B,v=u+4|0,f[v>>2]=t,x=1,w=x,o=E,0|w):(x=0,w=x,o=E,0|w)}function Xj(a,b,c,d,e,g){a|=0,b|=0,c|=0,d|=0,e|=0,g|=0;var h=0,i=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,ba=0;for(ba=o,o=o+128|0,(0|o)>=(0|p)&&ca(128),h=ba+112|0,T=ba+32|0,U=ba+16|0,r=ba,Q=b,R=d,S=e,s=Q,t=R,u=0|ki(s,t),q=u,v=S,w=(0|v)>8,w&&(x=Q,y=Q,z=0|sp(y,69160),Ar(x,z,56663)),f[U>>2]=g,n=0;;){if(A=n,B=S,!((0|A)<(0|B)))break;D=n,E=T+(D<<3)|0,V=0|f[U>>2],F=V,G=4,$=G,X=$-1|0,H=F+X|0,I=4,Z=I,Y=Z-1|0,_=-1^Y,J=H&_,K=J,i=+j[K>>2],l=K+4|0,k=0|f[l>>2],W=K+8|0,f[U>>2]=W,j[r>>2]=i,m=r+4|0,f[m>>2]=k,f[E>>2]=0|f[r>>2],f[E+4>>2]=0|f[r+4>>2],L=n,M=L+1|0,n=M}N=Q,O=q,P=S,f[h>>2]=0|f[c>>2],f[h+4>>2]=0|f[c+4>>2],Yj(a,N,h,O,P,T),o=ba}function Yj(a,b,c,d,e,g){a|=0,b|=0,c|=0,d|=0,e|=0,g|=0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,v=0;v=o,o=o+48|0,(0|o)>=(0|p)&&ca(48),i=v+32|0,h=v+24|0,j=v,q=b,r=d,s=e,t=g,k=q,l=r,m=s,n=t,Zj(j),f[h>>2]=0|f[c>>2],f[h+4>>2]=0|f[c+4>>2],f[i>>2]=0|f[j>>2],f[i+4>>2]=0|f[j+4>>2],$j(a,k,h,l,m,n,i),o=v}function Zj(a){a|=0;var b=0,c=0,e=0;e=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),b=e,c=b+4|0,f[c>>2]=0,f[b>>2]=0,f[a>>2]=0|f[b>>2],f[a+4>>2]=0|f[b+4>>2],o=e}function $j(a,b,c,g,h,i,j){a|=0,b|=0,c|=0,g|=0,h|=0,i|=0,j|=0;var k=0,l=0,m=0,n=0,q=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,qa=0,va=0,wa=0,za=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,$a=0,_a=0,ab=0,bb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,$b=0,_b=0,ac=0,bc=0,cc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,yc=0,zc=0,Ac=0,Bc=0,Cc=0,Dc=0,Ec=0,Fc=0,Gc=0,Hc=0,Ic=0,Jc=0,Kc=0,Lc=0,Mc=0,Nc=0,Oc=0,Pc=0,Qc=0,Rc=0,Sc=0,Tc=0,Uc=0,Vc=0,Wc=0,Xc=0,Yc=0,Zc=0,$c=0,_c=0,ad=0,bd=0,cd=0,dd=0,ed=0,fd=0,gd=0,hd=0,id=0,jd=0,kd=0,ld=0,nd=0,od=0,pd=0,qd=0,rd=0,sd=0,td=0,ud=0,vd=0,wd=0,xd=0,yd=0,zd=0,Ad=0,Bd=0,Dd=0,Ed=0,Fd=0,Gd=0,Hd=0,Id=0,Jd=0,Kd=0,Ld=0,Md=0,Nd=0,Od=0,Pd=0,Qd=0,Rd=0,Sd=0,Td=0,Ud=0,Vd=0,Wd=0,Xd=0,Yd=0,$d=0,_d=0,ae=0,be=0,ce=0,de=0,ee=0,fe=0,ge=0,he=0,je=0,ke=0,le=0,me=0,ne=0,oe=0,pe=0,qe=0,re=0,se=0,te=0,ue=0,ve=0,we=0,xe=0,ye=0,ze=0,Ae=0,Be=0,Ce=0,De=0,Pe=0,Qe=0,Re=0,Se=0,Ze=0,$e=0,_e=0,af=0,bf=0;bf=o,o=o+288|0,(0|o)>=(0|p)&&ca(288),N=bf+272|0,M=bf+264|0,L=bf+256|0,K=bf+248|0,J=bf+240|0,I=bf+232|0,Ze=bf,_e=4,$e=0|Gw(40),f[$e>>2]=0,Xd=bf+224|0,ge=bf+64|0,re=bf+56|0,P=bf+48|0,$=bf+40|0,ka=bf+32|0,Ea=bf+24|0,Pa=bf+16|0,$a=bf+8|0,jb=0|f[b>>2],ub=0!=(0|jb);do{if(ub){if(Ud=b+12|0,Vd=0|f[Ud>>2],Wd=Vd+4|0,Yd=0|f[Wd>>2],!(0!=(0|Yd))&&(r=0,ra(134,0|b),$d=r,r=0,0!=(0|$d)&0!=(0|s)?(_d=0|Rw(0|f[$d>>2],0|$e,0|_e),0==(0|_d)&&Aa(0|$d,0|s),G=s):_d=-1,ae=G,1==(0|_d))){q=0,u=i,w=h,y=g,O=ae;break}if(be=b+12|0,ce=0|f[be>>2],de=ce+16|0,ee=0|f[de>>2],fe=ee+12|0,he=0|f[fe>>2],(0|h)<0){if(r=0,je=0|xa(135,0|b,69160),ke=r,r=0,0!=(0|ke)&0!=(0|s)?(le=0|Rw(0|f[ke>>2],0|$e,0|_e),0==(0|le)&&Aa(0|ke,0|s),G=s):le=-1,me=G,1==(0|le)){q=0,u=i,w=h,y=g,O=me;break}if(r=0,sa(136,0|ka,0|h),ne=r,r=0,0!=(0|ne)&0!=(0|s)?(oe=0|Rw(0|f[ne>>2],0|$e,0|_e),0==(0|oe)&&Aa(0|ne,0|s),G=s):oe=-1,pe=G,1==(0|oe)){q=0,u=i,w=h,y=g,O=pe;break}r=0,d[Ze>>0]=0|d[ka>>0],d[Ze+1>>0]=0|d[ka+1>>0],d[Ze+2>>0]=0|d[ka+2>>0],d[Ze+3>>0]=0|d[ka+3>>0],d[Ze+4>>0]=0|d[ka+4>>0],d[Ze+5>>0]=0|d[ka+5>>0],d[Ze+6>>0]=0|d[ka+6>>0],d[Ze+7>>0]=0|d[ka+7>>0],ya(137,0|b,0|je,56693,0|Ze),qe=r,r=0,0!=(0|qe)&0!=(0|s)?(se=0|Rw(0|f[qe>>2],0|$e,0|_e),0==(0|se)&&Aa(0|qe,0|s),G=s):se=-1,te=G,q=0,u=i,w=h,y=g,O=te;break}if(r=0,f[K>>2]=0|f[c>>2],f[K+4>>2]=0|f[c+4>>2],ue=0|xa(138,0|b,0|K),ve=r,r=0,0!=(0|ve)&0!=(0|s)?(we=0|Rw(0|f[ve>>2],0|$e,0|_e),0==(0|we)&&Aa(0|ve,0|s),G=s):we=-1,xe=G,1==(0|we))q=0,u=i,w=h,y=g,O=xe;else if(f[$>>2]=ue,r=0,ye=0|oa(139,0|b,0|$,0|g),ze=r,r=0,0!=(0|ze)&0!=(0|s)?(Ae=0|Rw(0|f[ze>>2],0|$e,0|_e),0==(0|Ae)&&Aa(0|ze,0|s),G=s):Ae=-1,Be=G,1==(0|Ae))q=0,u=i,w=h,y=g,O=Be;else{if(0!=(0|ye))l=he,m=0,n=ye,C=h,D=g;else{if(r=0,R=0|oa(140,0|b,65621,14),S=r,r=0,0!=(0|S)&0!=(0|s)?(T=0|Rw(0|f[S>>2],0|$e,0|_e),0==(0|T)&&Aa(0|S,0|s),G=s):T=-1,U=G,1==(0|T)){q=0,u=i,w=h,y=g,O=U;break}if(r=0,V=0|oa(139,0|b,0|$,0|R),W=r,r=0,0!=(0|W)&0!=(0|s)?(X=0|Rw(0|f[W>>2],0|$e,0|_e),0==(0|X)&&Aa(0|W,0|s),G=s):X=-1,Y=G,1==(0|X)){q=0,u=i,w=h,y=R,O=Y;break}Z=he+1|0,_=h+1|0,l=Z,m=g,n=V,C=_,D=R}if(r=0,aa=0|ta(141,0|b),ba=r,r=0,0!=(0|ba)&0!=(0|s)?(da=0|Rw(0|f[ba>>2],0|$e,0|_e),0==(0|da)&&Aa(0|ba,0|s),G=s):da=-1,ea=G,1==(0|da))q=0,u=i,w=C,y=D,O=ea;else{if(f[aa>>2]=D,fa=aa+4|0,f[fa>>2]=n,ga=b+12|0,ha=0|f[ga>>2],ia=ha+4|0,ja=0|f[ia>>2],la=aa+8|0,f[la>>2]=ja,ma=aa+36|0,f[ma>>2]=C,na=0|f[$>>2],qa=aa+44|0,f[qa>>2]=na,va=b+12|0,wa=0|f[va>>2],za=wa+4|0,Ba=0|f[za>>2],Ca=Ba+(l<<3)|0,Da=b+12|0,Fa=0|f[Da>>2],Ga=Fa+4|0,f[Ga>>2]=Ca,Ha=b+12|0,Ia=0|f[Ha>>2],Ja=Ia+8|0,Ka=0|f[Ja>>2],La=Ka>>>0<=i>>>0,La?(Ma=b+12|0,Na=0|f[Ma>>2],Oa=Na+12|0,Qa=0|f[Oa>>2],Ra=i>>>0<Qa>>>0,Ra?(Sa=b+12|0,Ta=0|f[Sa>>2],Ua=Ta+8|0,Va=0|f[Ua>>2],Wa=i,Xa=Va,Ya=Wa-Xa|0,Za=(0|Ya)/8&-1,k=Za):k=-1):k=-1,_a=0|f[n>>2],ab=_a>>>11,bb=128&ab,0!=(0|bb)){if(db=C+2|0,eb=aa+12|0,f[eb>>2]=db,fb=aa+12|0,gb=0|f[fb>>2],r=0,ua(142,0|b,0|gb,0),hb=r,r=0,0!=(0|hb)&0!=(0|s)?(ib=0|Rw(0|f[hb>>2],0|$e,0|_e),0==(0|ib)&&Aa(0|hb,0|s),G=s):ib=-1,kb=G,1==(0|ib)){q=0,u=i,w=C,y=D,O=kb;break}}else if(lb=n+12|0,mb=0|f[lb>>2],nb=mb+2|0,ob=0|e[nb>>1],pb=65535&ob,qb=pb+l|0,rb=aa+12|0,f[rb>>2]=qb,sb=aa+12|0,tb=0|f[sb>>2],vb=C+2|0,r=0,ua(142,0|b,0|tb,0|vb),wb=r,r=0,0!=(0|wb)&0!=(0|s)?(xb=0|Rw(0|f[wb>>2],0|$e,0|_e),0==(0|xb)&&Aa(0|wb,0|s),G=s):xb=-1,yb=G,1==(0|xb)){q=0,u=i,w=C,y=D,O=yb;break}if(zb=(0|k)>=0,zb?(Ab=b+12|0,Bb=0|f[Ab>>2],Cb=Bb+8|0,Db=0|f[Cb>>2],Eb=Db+(k<<3)|0,B=Eb):B=i,Gb=b+12|0,Hb=0|f[Gb>>2],Ib=Hb+4|0,Jb=0|f[Ib>>2],f[Jb>>2]=0|f[c>>2],f[Jb+4>>2]=0|f[c+4>>2],0!=(0|m)){if(Lb=b+12|0,Mb=0|f[Lb>>2],Nb=Mb+4|0,Ob=0|f[Nb>>2],Pb=Ob+8|0,r=0,sa(143,0|Ea,0|m),Rb=r,r=0,0!=(0|Rb)&0!=(0|s)?(Sb=0|Rw(0|f[Rb>>2],0|$e,0|_e),0==(0|Sb)&&Aa(0|Rb,0|s),G=s):Sb=-1,Tb=G,1==(0|Sb)){q=0,u=B,w=C,y=D,O=Tb;break}if(f[Pb>>2]=0|f[Ea>>2],f[Pb+4>>2]=0|f[Ea+4>>2],(0|C)>1&&(Vb=b+12|0,Wb=0|f[Vb>>2],Xb=Wb+4|0,Yb=0|f[Xb>>2],Zb=Yb+16|0,$b=C-1|0,r=0,ua(144,0|Zb,0|B,0|$b),ac=r,r=0,0!=(0|ac)&0!=(0|s)?(bc=0|Rw(0|f[ac>>2],0|$e,0|_e),0==(0|bc)&&Aa(0|ac,0|s),G=s):bc=-1,cc=G,1==(0|bc))){q=0,u=B,w=C,y=D,O=cc;break}}else if((0|C)>0&&(ec=b+12|0,fc=0|f[ec>>2],gc=fc+4|0,hc=0|f[gc>>2],ic=hc+8|0,r=0,ua(144,0|ic,0|B,0|C),jc=r,r=0,0!=(0|jc)&0!=(0|s)?(lc=0|Rw(0|f[jc>>2],0|$e,0|_e),0==(0|lc)&&Aa(0|jc,0|s),G=s):lc=-1,mc=G,1==(0|lc))){q=0,u=B,w=C,y=D,O=mc;break}if(nc=b+12|0,oc=0|f[nc>>2],pc=oc+4|0,qc=0|f[pc>>2],rc=C+1|0,sc=qc+(rc<<3)|0,f[sc>>2]=0|f[j>>2],f[sc+4>>2]=0|f[j+4>>2],tc=0|f[n>>2],uc=tc>>>11,wc=128&uc,!(0!=(0|wc))){if(Zc=aa+40|0,f[Zc>>2]=-1,r=0,f[M>>2]=0|f[c>>2],f[M+4>>2]=0|f[c+4>>2],ya(147,0|$a,0|b,0|n,0|M),$c=r,r=0,0!=(0|$c)&0!=(0|s)?(_c=0|Rw(0|f[$c>>2],0|$e,0|_e),0==(0|_c)&&Aa(0|$c,0|s),G=s):_c=-1,bd=G,1==(0|_c)){q=0,u=B,w=C,y=D,O=bd;break}f[Xd>>2]=0|f[$a>>2],f[Xd+4>>2]=0|f[$a+4>>2],A=0,E=B,F=C,H=D,af=52;break}r=0,yc=0|ta(145,0|b),zc=r,r=0,0!=(0|zc)&0!=(0|s)?(Ac=0|Rw(0|f[zc>>2],0|$e,0|_e),0==(0|Ac)&&Aa(0|zc,0|s),G=s):Ac=-1,Bc=G,Pe=1==(0|Ac),Pe?(q=0,u=B,w=C,y=D,O=Bc):(Cc=aa+40|0,f[Cc>>2]=-2,Dc=n+12|0,Ec=0|f[Dc>>2],r=0,f[L>>2]=0|f[c>>2],f[L+4>>2]=0|f[c+4>>2],ua(0|Ec,0|Pa,0|b,0|L),Fc=r,r=0,0!=(0|Fc)&0!=(0|s)?(Hc=0|Rw(0|f[Fc>>2],0|$e,0|_e),0==(0|Hc)&&Aa(0|Fc,0|s),G=s):Hc=-1,Ic=G,Qe=1==(0|Hc),Qe?(q=0,u=B,w=C,y=D,O=Ic):(f[Xd>>2]=0|f[Pa>>2],f[Xd+4>>2]=0|f[Pa+4>>2],Jc=b+12|0,Kc=0|f[Jc>>2],Lc=Kc+16|0,Mc=0|f[Lc>>2],Nc=Mc+8|0,Oc=0|f[Nc>>2],Pc=b+12|0,Qc=0|f[Pc>>2],Sc=Qc+4|0,f[Sc>>2]=Oc,r=0,ra(132,0|b),Tc=r,r=0,0!=(0|Tc)&0!=(0|s)?(Uc=0|Rw(0|f[Tc>>2],0|$e,0|_e),0==(0|Uc)&&Aa(0|Tc,0|s),G=s):Uc=-1,Vc=G,Re=1==(0|Uc),Re?(q=0,u=B,w=C,y=D,O=Vc):(r=0,sa(146,0|b,0|yc),Wc=r,r=0,0!=(0|Wc)&0!=(0|s)?(Xc=0|Rw(0|f[Wc>>2],0|$e,0|_e),0==(0|Xc)&&Aa(0|Wc,0|s),G=s):Xc=-1,Yc=G,Se=1==(0|Xc),Se?(q=0,u=B,w=C,y=D,O=Yc):(A=0,E=B,F=C,H=D,af=52))))}}}else Fb=b+12|0,Qb=0|f[Fb>>2],_b=Qb+16|0,kc=0|f[_b>>2],vc=b+12|0,Gc=0|f[vc>>2],Rc=Gc+20|0,ad=0|f[Rc>>2],fd=kc,gd=ad,hd=fd-gd|0,id=(0|hd)/48&-1,$e=0|Qw(ge,1,0|$e,0|_e),_e=G,r=0,jd=r,r=0,0!=(0|jd)&0!=(0|s)?(kd=0|Rw(0|f[jd>>2],0|$e,0|_e),0==(0|kd)&&Aa(0|jd,0|s),G=s):kd=-1,ld=G,Ce=1==(0|kd),Ce?(q=id,u=i,w=h,y=g,O=ld):(q=id,u=i,w=h,y=g,O=0)}while(0);a:for(;;){if(52==(0|af)){if(af=0,r=0,f[N>>2]=0|f[Xd>>2],f[N+4>>2]=0|f[Xd+4>>2],sa(148,0|b,0|N),cd=r,r=0,0!=(0|cd)&0!=(0|s)?(dd=0|Rw(0|f[cd>>2],0|$e,0|_e),0==(0|dd)&&Aa(0|cd,0|s),G=s):dd=-1,ed=G,!(1==(0|dd)))break;q=A,u=E,w=F,y=H,O=ed}if(0==(0|O)){if(f[b>>2]=ge,r=0,f[I>>2]=0|f[c>>2],f[I+4>>2]=0|f[c+4>>2],f[J>>2]=0|f[j>>2],f[J+4>>2]=0|f[j+4>>2],pa(131,0|re,0|b,0|I,0|y,0|w,0|u,0|J),nd=r,r=0,0!=(0|nd)&0!=(0|s)?(od=0|Rw(0|f[nd>>2],0|$e,0|_e),0==(0|od)&&Aa(0|nd,0|s),G=s):od=-1,pd=G,1==(0|od)){z=y,x=w,v=u,t=q,O=pd,y=z,w=x,u=v,q=t;continue}f[Xd>>2]=0|f[re>>2],f[Xd+4>>2]=0|f[re+4>>2],f[b>>2]=0,A=q,E=u,F=w,H=y,af=52}else{for(;;){if(qd=b+12|0,rd=0|f[qd>>2],sd=rd+16|0,td=0|f[sd>>2],ud=b+12|0,vd=0|f[ud>>2],wd=vd+20|0,xd=0|f[wd>>2],yd=td,zd=xd,Ad=yd-zd|0,Bd=(0|Ad)/48&-1,!((0|q)<(0|Bd)))break;if(Dd=b+12|0,Ed=0|f[Dd>>2],Fd=Ed+16|0,Gd=0|f[Fd>>2],Hd=Gd+8|0,Id=0|f[Hd>>2],Jd=b+12|0,Kd=0|f[Jd>>2],Ld=Kd+4|0,f[Ld>>2]=Id,r=0,ra(132,0|b),Md=r,r=0,0!=(0|Md)&0!=(0|s)?(Nd=0|Rw(0|f[Md>>2],0|$e,0|_e),0==(0|Nd)&&Aa(0|Md,0|s),G=s):Nd=-1,Od=G,1==(0|Nd)){z=y,x=w,v=u,t=q,O=Od,y=z,w=x,u=v,q=t;continue a}}f[b>>2]=0,Pd=b+20|0,Qd=0|f[Pd>>2],r=0,sa(133,0|P,0|Qd),Rd=r,r=0,0!=(0|Rd)&0!=(0|s)?(Sd=0|Rw(0|f[Rd>>2],0|$e,0|_e),0==(0|Sd)&&Aa(0|Rd,0|s),G=s):Sd=-1,Td=G,De=1==(0|Sd),De?(z=y,x=w,v=u,t=q,O=Td,y=z,w=x,u=v,q=t):(f[Xd>>2]=0|f[P>>2],f[Xd+4>>2]=0|f[P+4>>2],A=q,E=u,F=w,H=y,af=52)}}f[a>>2]=0|f[Xd>>2],f[a+4>>2]=0|f[Xd+4>>2],Hw(0|$e),o=bf}function _j(a){a|=0;var b=0,c=0,d=0,e=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,X=0;if(X=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),b=a,S=b,T=S+12|0,U=0|f[T>>2],n=U,V=n,c=V+16|0,d=0|f[c>>2],e=d+24|0,g=0|f[e>>2],!(0!=(0|g)))return N=n,O=N+16|0,P=0|f[O>>2],Q=P+-48|0,f[O>>2]=Q,void(o=X);i=n,j=i+16|0,k=0|f[j>>2],l=k+24|0,m=0|f[l>>2],A=m,q=A,r=0|f[q>>2],s=r>>>11,L=s,t=b,u=L,v=u<<3,w=0|Jc(t,v),R=w,x=A,y=x+20|0,f[y>>2]=-1,z=L,B=z>>>0>0,B&&(C=R,D=A,E=D+12|0,F=0|f[E>>2],G=L,hk(C,F,G)),H=R,I=A,J=I+12|0,f[J>>2]=H,K=b,M=A,Zc(K,M),N=n,O=N+16|0,P=0|f[O>>2],Q=P+-48|0,f[O>>2]=Q,o=X}function ak(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,l=0;l=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),d=l,c=b,e=c,g=0|f[e>>2],h=255&g,i=d+4|0,f[i>>2]=h,j=c,f[d>>2]=j,f[a>>2]=0|f[d>>2],f[a+4>>2]=0|f[d+4>>2],o=l}function bk(a){a|=0;var b=0,c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,aa=0;aa=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),b=a,A=b,L=A+12|0,W=0|f[L>>2],n=W,X=b,Y=0|Lc(X,128,8),Z=n,$=Z+8|0,f[$>>2]=Y,c=n,d=c+8|0,e=0|f[d>>2],g=e+1024|0,h=n,i=h+12|0,f[i>>2]=g,j=n,k=j+8|0,l=0|f[k>>2],m=n,q=m+4|0,f[q>>2]=l,r=b,s=0|Lc(r,32,48),t=n,u=t+20|0,f[u>>2]=s,v=n,w=v+20|0,x=0|f[w>>2],y=x+1536|0,z=n,B=z+24|0,f[B>>2]=y,C=n,D=C+20|0,E=0|f[D>>2],F=n,G=F+16|0,f[G>>2]=E,H=b,I=H+32|0,J=0|f[I>>2],K=n,M=K+16|0,N=0|f[M>>2],O=N+44|0,f[O>>2]=J,P=n,Q=P+4|0,R=0|f[Q>>2],S=n,T=S+16|0,U=0|f[T>>2],V=U+8|0,f[V>>2]=R,o=aa}function ck(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,i=0;i=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),d=i,c=b,e=d+4|0,f[e>>2]=3,g=c,f[d>>2]=g,f[a>>2]=0|f[d>>2],f[a+4>>2]=0|f[d+4>>2],o=i}function dk(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,K=0;K=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),A=a,D=b+4|0,E=0|f[D>>2];a:switch(0|E){case 0:if(F=0|f[b>>2],G=0!=(0|F),H=A,G){I=H+72|0,c=0|f[I>>2],n=c;break a}d=H+76|0,e=0|f[d>>2],n=e;break a;case 2:g=A,h=g+68|0,i=0|f[h>>2],n=i;break;case 4:j=A,k=j+80|0,l=0|f[k>>2],n=l;break;case 3:m=A,q=m+64|0,r=0|f[q>>2],n=r;break;case 6:s=A,t=s+60|0,u=0|f[t>>2],n=u;break;case 7:v=A,w=v+32|0,x=0|f[w>>2],n=x;break;case 20:n=0;break;default:y=0|f[b>>2],z=y+4|0,B=0|f[z>>2],n=B}return C=n,o=K,0|C}function ek(a){a|=0;var b=0,c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ca=0;return Ca=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),b=a,ra=b,za=ra+12|0,Aa=0|f[za>>2],n=Aa,c=n,d=c+16|0,e=0|f[d>>2],A=e,g=A,h=g+20|0,i=0|f[h>>2],L=i,j=A,k=j+16|0,l=0|f[k>>2],W=l,m=A,q=m+48|0,r=n,s=r+24|0,t=0|f[s>>2],u=(0|q)==(0|t),u&&(v=A,w=n,x=w+20|0,y=0|f[x>>2],z=v,B=y,C=z-B|0,D=(0|C)/48&-1,ga=D,E=b,F=n,G=F+20|0,H=0|f[G>>2],I=ga,J=48*I|0,K=J<<1,M=0|Hc(E,H,K),N=n,O=N+20|0,f[O>>2]=M,P=n,Q=P+20|0,R=0|f[Q>>2],S=ga,T=R+(48*S|0)|0,U=n,V=U+16|0,f[V>>2]=T,X=n,Y=X+20|0,Z=0|f[Y>>2],$=ga,_=$<<1,aa=Z+(48*_|0)|0,ba=n,da=ba+24|0,f[da>>2]=aa),ea=n,fa=ea+16|0,ha=0|f[fa>>2],ia=ha+48|0,f[fa>>2]=ia,A=ia,ja=L,ka=A,la=ka+20|0,f[la>>2]=ja,ma=W,na=A,oa=na+16|0,f[oa>>2]=ma,pa=A,qa=pa+24|0,f[qa>>2]=0,sa=A,ta=sa+28|0,f[ta>>2]=0,ua=A,va=ua+32|0,f[va>>2]=0,wa=A,xa=wa+4|0,f[xa>>2]=0,ya=A,o=Ca,0|ya}function fk(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,D=0;if(D=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),v=a,w=b,x=c,y=v,z=y+12|0,A=0|f[z>>2],B=A+4|0,d=0|f[B>>2],e=w,g=d+(e<<3)|0,h=v,i=h+12|0,j=0|f[i>>2],k=j+12|0,l=0|f[k>>2],!(g>>>0>=l>>>0))return s=v,t=w,u=x,vk(s,t,u),void(o=D);n=v,q=w,r=x,uk(n,q,r),s=v,t=w,u=x,vk(s,t,u),o=D}function gk(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,i=0;i=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),d=i,c=b,e=d+4|0,f[e>>2]=4,g=c,f[d>>2]=g,f[a>>2]=0|f[d>>2],f[a+4>>2]=0|f[d+4>>2],o=i}function hk(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,n=0,r=0;for(r=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),h=a,i=b,j=c;;){if(k=j,l=k+-1|0,j=l,!(k>>>0>0))break;n=h,d=n+8|0,h=d,e=i,g=e+8|0,i=g,f[n>>2]=0|f[e>>2],f[n+4>>2]=0|f[e+4>>2]}o=r}function ik(a,b,c,d){a|=0,b|=0,c|=0,d|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,v=0;v=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),e=v+8|0,m=b,n=c,q=m,r=n,s=m,t=s+12|0,g=0|f[t>>2],h=g+16|0,i=0|f[h>>2],j=i+36|0,k=0|f[j>>2],l=k+2|0,f[e>>2]=0|f[d>>2],f[e+4>>2]=0|f[d+4>>2],jk(a,q,r,e,l),o=v}function jk(a,b,c,d,g){a|=0,b|=0,c|=0,d|=0,g|=0;var h=0,i=0,k=0,l=0,m=0,n=0,q=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,pa=0,za=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,$a=0,_a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,$b=0,_b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,yc=0,zc=0,Ac=0,Bc=0,Cc=0,Dc=0,Ec=0,Fc=0,Gc=0,Hc=0,Ic=0,Jc=0,Kc=0,Lc=0,Mc=0,Nc=0,Oc=0,Pc=0,Qc=0,Rc=0,Sc=0,Tc=0,Uc=0,Vc=0,Wc=0,Xc=0,Yc=0,Zc=0,$c=0,_c=0,ad=0,bd=0,cd=0,dd=0,ed=0,fd=0,gd=0,hd=0,id=0,jd=0,kd=0,ld=0,md=0,nd=0,od=0,pd=0,qd=0,rd=0,sd=0,td=0,ud=0,vd=0,wd=0,xd=0,yd=0,zd=0,Ad=0,Bd=0,Dd=0,Ed=0,Fd=0,Gd=0,Hd=0,Id=0,Jd=0,Kd=0,Ld=0,Md=0,Nd=0,Od=0,Pd=0,Qd=0,Rd=0,Sd=0,Td=0,Ud=0,Vd=0,Wd=0,Xd=0,Yd=0,Zd=0,$d=0,_d=0,ae=0,be=0,ce=0,de=0,ee=0,fe=0,ge=0,he=0,ie=0,je=0,ke=0,le=0,me=0,ne=0,oe=0,pe=0,qe=0,re=0,se=0,ue=0,ve=0,we=0,xe=0,ye=0,ze=0,Ae=0,Be=0,Ce=0,De=0,Fe=0,He=0,Ie=0,Je=0,Ke=0,Le=0,Me=0,Ne=0,Oe=0,Pe=0,Qe=0,Re=0,Se=0,Te=0,Ue=0,Ve=0,We=0,Xe=0,Ye=0,$e=0,_e=0,af=0,bf=0,cf=0,df=0,ef=0,ff=0,gf=0,hf=0,jf=0,kf=0,lf=0,mf=0,nf=0,of=0,pf=0,qf=0,rf=0,sf=0,tf=0,uf=0,vf=0,wf=0,xf=0,yf=0,zf=0,Af=0,Bf=0,Cf=0,Df=0,Ef=0,Ff=0,Gf=0,If=0,Jf=0,Kf=0,Lf=0,Mf=0,Nf=0,Of=0,Pf=0,Qf=0,Rf=0,Sf=0,Tf=0,Uf=0,Vf=0,Wf=0,Xf=0,Yf=0,Zf=0,$f=0,_f=0,ag=0,bg=0,cg=0,dg=0,eg=0,fg=0,gg=0,hg=0,ig=0,jg=0,kg=0,lg=0,mg=0,ng=0,og=0,pg=0,qg=0,rg=0,sg=0,tg=0,ug=0,vg=0,xg=0,yg=0,zg=0,Ag=0,Bg=0,Cg=0,Dg=0,Eg=0,Fg=0,Gg=0,Hg=0,Ig=0,Jg=0,Kg=0,Lg=0,Mg=0,Ng=0,Pg=0,Qg=0,Rg=0,Sg=0,Tg=0,Ug=0,Vg=0,Wg=0,Xg=0,Yg=0,Zg=0,$g=0,_g=0,ah=0,bh=0,ch=0,dh=0,eh=0,fh=0,gh=0,hh=0,ih=0,jh=0,kh=0,lh=0,nh=0,oh=0,ph=0,qh=0,rh=0,sh=0,uh=0,vh=0,wh=0,xh=0,yh=0,zh=0,Ah=0,Bh=0,Dh=0,Eh=0,Fh=0,Gh=0,Hh=0,Ih=0,Jh=0,Kh=0,Lh=0,Mh=0,Nh=0,Oh=0,Ph=0,Qh=0,Rh=0,Sh=0,Th=0,Uh=0,Vh=0,Wh=0,Xh=0,Yh=0,Zh=0,$h=0,_h=0,ai=0,bi=0,ci=0,di=0,ei=0,fi=0,gi=0,hi=0,ii=0,ji=0,ki=0,li=0,mi=0,ni=0,oi=0,pi=0,qi=0,ri=0,si=0,ti=0,ui=0,vi=0,wi=0,xi=0,yi=0,zi=0,Ai=0,Bi=0,Di=0,Ei=0,Gi=0,Hi=0,Ii=0,Ki=0,Li=0,Mi=0,Ni=0,Oi=0,Pi=0,Qi=0,Ri=0,Si=0,Ti=0,Ui=0,Vi=0,Wi=0,Xi=0,Yi=0,Zi=0,$i=0,_i=0,aj=0,bj=0,cj=0,dj=0,ej=0,fj=0,gj=0,hj=0,ij=0,jj=0,kj=0,nj=0,qj=0,sj=0,tj=0,uj=0,vj=0,wj=0,xj=0,yj=0,zj=0,Bj=0,Cj=0,Dj=0,Ej=0,Fj=0,Gj=0,Hj=0,Ij=0,Jj=0,Kj=0,Lj=0,Mj=0,Nj=0,Oj=0,Pj=0,Qj=0,Rj=0,Sj=0,Tj=0,Uj=0,Wj=0,Xj=0,Yj=0,Zj=0,$j=0,_j=0,ak=0,bk=0,ck=0,ek=0,fk=0,gk=0,hk=0,ik=0,jk=0,lk=0,mk=0,nk=0,ok=0,pk=0,qk=0,rk=0,sk=0,tk=0,vk=0,wk=0,xk=0,yk=0,zk=0,Ak=0,Ck=0,Dk=0,Fk=0,Gk=0,Hk=0,Ik=0,Jk=0,Lk=0,Mk=0,Nk=0,Ok=0,Pk=0,Qk=0,Rk=0,Sk=0,Uk=0,Vk=0,Wk=0,Xk=0,Yk=0,Zk=0,$k=0,_k=0,al=0,bl=0,cl=0,dl=0,fl=0,hl=0,il=0,jl=0,kl=0,ll=0,ml=0,nl=0,ol=0,pl=0,ql=0,rl=0,sl=0,tl=0,ul=0,vl=0,wl=0,xl=0,yl=0,zl=0,Al=0,Bl=0,Cl=0,Dl=0,El=0,Fl=0,Gl=0,Hl=0,Il=0,Jl=0,Kl=0,Ll=0,Nl=0,Ol=0,Pl=0,Ql=0,Rl=0,Sl=0,Tl=0,Ul=0,Vl=0,Wl=0,Xl=0,Yl=0,Zl=0,$l=0,_l=0,am=0,bm=0,cm=0,dm=0,em=0,fm=0,gm=0,hm=0,im=0,jm=0,km=0,lm=0,mm=0,nm=0,om=0,pm=0,qm=0,rm=0,sm=0,tm=0,um=0,vm=0,wm=0,xm=0,ym=0,zm=0,Am=0,Bm=0,Cm=0,Dm=0,Em=0,Fm=0,Gm=0,Hm=0,Im=0,Km=0,Lm=0,Mm=0,Nm=0,Om=0,Qm=0,Rm=0,Sm=0,Tm=0,Um=0,Vm=0,Wm=0,Xm=0,Ym=0,Zm=0,$m=0,_m=0,an=0,bn=0,cn=0,dn=0,en=0,fn=0,gn=0,hn=0,jn=0,kn=0,ln=0,mn=0,nn=0,on=0,pn=0,qn=0,tn=0,un=0,vn=0,wn=0,xn=0,yn=0,zn=0,Bn=0,Cn=0,Dn=0,En=0,Fn=0,Gn=0,Hn=0,In=0,Jn=0,Kn=0,Ln=0,Mn=0,Nn=0,On=0,Pn=0,Qn=0,Rn=0,Sn=0,Tn=0,Un=0,Vn=0,Wn=0,Yn=0,Zn=0,$n=0,ao=0,bo=0,co=0,eo=0,fo=0,go=0,ho=0,jo=0,ko=0,lo=0,mo=0,no=0,oo=0,po=0,qo=0,ro=0,so=0,to=0,uo=0,vo=0,wo=0,xo=0,yo=0,zo=0,Ao=0,Bo=0,Co=0,Do=0,Eo=0,Fo=0,Go=0,Ho=0,Io=0,Jo=0,Ko=0,Lo=0,Mo=0,No=0,Oo=0,Po=0,Qo=0,Ro=0,So=0,To=0,Uo=0,Vo=0,Wo=0,Xo=0,Yo=0,Zo=0,$o=0,ap=0,bp=0,cp=0,ep=0,fp=0,gp=0,hp=0,ip=0,jp=0,kp=0,mp=0,np=0,op=0,pp=0,qp=0,rp=0,sp=0,tp=0,up=0,vp=0,wp=0,xp=0,yp=0,zp=0,Ap=0,Bp=0,Dp=0,Ep=0,Fp=0,Gp=0,Hp=0,Ip=0,Jp=0,Kp=0,Lp=0,Mp=0,Np=0,Op=0,Pp=0,Qp=0,Rp=0,Sp=0,Tp=0,Up=0,Vp=0,Wp=0,Xp=0,Yp=0,Zp=0,$p=0,_p=0,aq=0,cq=0,dq=0,eq=0,fq=0,gq=0,hq=0,iq=0,jq=0,kq=0,lq=0,mq=0,nq=0,oq=0,pq=0,rq=0,sq=0,tq=0,uq=0,vq=0,wq=0,xq=0,yq=0,zq=0,Aq=0,Bq=0,Cq=0,Dq=0,Eq=0,Fq=0,Gq=0,Hq=0,Iq=0,Jq=0,Kq=0,Lq=0,Mq=0,Nq=0,Oq=0,Pq=0,Qq=0,Rq=0,Sq=0,Tq=0,Uq=0,Vq=0,Xq=0,Yq=0,Zq=0,$q=0,_q=0,br=0,cr=0,dr=0,er=0,fr=0,gr=0,hr=0,ir=0,jr=0,kr=0,lr=0,mr=0,nr=0,or=0,pr=0,qr=0,rr=0,sr=0,tr=0,ur=0,wr=0,xr=0,yr=0,zr=0,Ar=0,Br=0,Cr=0,Dr=0,Er=0,Fr=0,Gr=0,Hr=0,Ir=0,Jr=0,Kr=0,Lr=0,Mr=0,Nr=0,Or=0,Pr=0,Qr=0,Rr=0,Sr=0,Tr=0,Ur=0,Vr=0,Wr=0,Xr=0,Yr=0,Zr=0,$r=0,_r=0,as=0,bs=0,ds=0,es=0,fs=0,hs=0,is=0,js=0,ks=0,ls=0,ms=0,ns=0,os=0,ps=0,qs=0,rs=0,ss=0,us=0,vs=0,ws=0,xs=0,ys=0,zs=0,As=0,Bs=0,Cs=0,Ds=0,Es=0,Fs=0,Gs=0,Hs=0,Is=0,Js=0,Ks=0,Ls=0,Ns=0,Os=0,Ps=0,Qs=0,Rs=0,Ss=0,Ts=0,Us=0,Vs=0,Ws=0,Xs=0,Ys=0,Zs=0,$s=0,_s=0,at=0,bt=0,ct=0,dt=0,et=0,ft=0,gt=0,ht=0,it=0,jt=0,kt=0,lt=0,mt=0,nt=0,ot=0,pt=0,qt=0,rt=0,st=0,tt=0,ut=0,vt=0,wt=0,xt=0,yt=0,zt=0,At=0,Bt=0,Ct=0,Dt=0,Et=0,Ft=0,Ht=0,It=0,Jt=0,Kt=0,Lt=0,Mt=0,Nt=0,Ot=0,Pt=0,Qt=0,Rt=0,St=0,Tt=0,Ut=0,Vt=0,Wt=0,Xt=0,Yt=0,Zt=0,$t=0,_t=0,au=0,bu=0,cu=0,du=0,eu=0,fu=0,gu=0,hu=0,iu=0,ju=0,ku=0,lu=0,mu=0,nu=0,ou=0,pu=0,qu=0,ru=0,su=0,tu=0,uu=0,wu=0,xu=0,yu=0,zu=0,Au=0,Bu=0,Cu=0,Du=0,Eu=0,Fu=0,Gu=0,Hu=0,Iu=0,Ju=0,Ku=0,Lu=0,Mu=0,Nu=0,Ou=0,Pu=0,Qu=0,Ru=0,Su=0,Tu=0,Uu=0,Vu=0,Wu=0,Xu=0,Yu=0,Zu=0,$u=0,_u=0,av=0,bv=0,cv=0,dv=0,ev=0,fv=0,gv=0,hv=0,iv=0,jv=0,kv=0,lv=0,mv=0,nv=0,ov=0,pv=0,qv=0,rv=0,sv=0,tv=0,uv=0,vv=0,wv=0,xv=0,yv=0,zv=0,Av=0,Bv=0,Cv=0,Dv=0,Ev=0,Fv=0,Gv=0,Hv=0,Iv=0,Jv=0,Kv=0,Lv=0,Nv=0,Ov=0,Pv=0,Qv=0,Rv=0,Sv=0,Tv=0,Uv=0,Vv=0,Wv=0,Xv=0,Yv=0,Zv=0,$v=0,_v=0,aw=0,bw=0,cw=0,dw=0,ew=0,fw=0,gw=0,hw=0,iw=0,jw=0,kw=0,lw=0,mw=0,nw=0,ow=0,pw=0,qw=0,rw=0,sw=0,tw=0,uw=0,vw=0,ww=0,xw=0,yw=0,Aw=0,Bw=0,Cw=0,Dw=0,Ew=0,Fw=0,Iw=0,Jw=0,Kw=0,Lw=0,Mw=0,Nw=0,Ow=0,Pw=0,Sw=0,Tw=0,Uw=0,Vw=0,Ww=0,Xw=0,Yw=0,Zw=0,$w=0,_w=0,ax=0,bx=0,cx=0,dx=0,ex=0,fx=0,gx=0,hx=0,ix=0,jx=0,kx=0,lx=0,mx=0,nx=0,ox=0,px=0,qx=0,rx=0,sx=0,tx=0,ux=0,vx=0,wx=0,xx=0,yx=0,zx=0,Ax=0,Bx=0,Cx=0,Dx=0,Ex=0,Fx=0,Gx=0,Hx=0,Ix=0,Jx=0,Kx=0,Lx=0,Mx=0,Nx=0,Ox=0,Px=0,Qx=0,Rx=0,Sx=0,Tx=0,Ux=0,Vx=0,Wx=0,Xx=0,Yx=0,Zx=0,$x=0,_x=0,ay=0,by=0,cy=0,dy=0,ey=0,fy=0,gy=0,hy=0,iy=0,jy=0,ky=0,ly=0,my=0,ny=0,oy=0,py=0,qy=0,ry=0,sy=0,ty=0,uy=0,vy=0,wy=0,xy=0,yy=0,zy=0,Ay=0,By=0,Cy=0,Dy=0,Ey=0,Fy=0,Gy=0,Hy=0,Iy=0,Jy=0,Ky=0,Ly=0,My=0,Ny=0,Oy=0,Py=0,Qy=0,Ry=0,Sy=0,Ty=0,Uy=0,Vy=0,Wy=0,Xy=0,Yy=0,Zy=0,$y=0,_y=0,az=0,bz=0,cz=0,dz=0,ez=0,fz=0,gz=0,hz=0,iz=0,jz=0,lz=0,mz=0,nz=0,oz=0,pz=0,qz=0,rz=0,sz=0,tz=0,uz=0,vz=0,wz=0,xz=0,yz=0,zz=0,Az=0,Bz=0,Cz=0,Dz=0,Ez=0,Fz=0,Gz=0,Hz=0,Iz=0,Jz=0,Kz=0,Lz=0,Mz=0,Nz=0,Oz=0,Pz=0,Qz=0,Rz=0,Sz=0,Tz=0,Uz=0,Vz=0,Wz=0,Xz=0,Yz=0,Zz=0,$z=0,_z=0,aA=0,bA=0,cA=0,dA=0,eA=0,fA=0,gA=0,hA=0,iA=0,jA=0,kA=0,lA=0,mA=0,oA=0,pA=0,qA=0,rA=0,sA=0,tA=0,uA=0,vA=0,wA=0,xA=0,yA=0,zA=0,AA=0,BA=0,CA=0,DA=0,EA=0,FA=0,GA=0,HA=0,IA=0,JA=0,KA=0,LA=0,MA=0,NA=0,OA=0,PA=0,QA=0,RA=0,SA=0,TA=0,UA=0,VA=0,WA=0,XA=0,YA=0,ZA=0,$A=0,_A=0,aB=0,bB=0,cB=0,dB=0,eB=0,fB=0,gB=0,hB=0,iB=0,jB=0,kB=0,lB=0,mB=0,nB=0,oB=0,pB=0,qB=0,rB=0,sB=0,tB=0,uB=0,vB=0,wB=0,xB=0,yB=0,zB=0,AB=0,BB=0,CB=0,DB=0,EB=0,FB=0,GB=0,HB=0,IB=0,JB=0,KB=0,LB=0,MB=0,NB=0,OB=0,PB=0,QB=0,RB=0,SB=0,TB=0,UB=0,VB=0,WB=0,XB=0,YB=0,ZB=0,$B=0,_B=0,aC=0,bC=0,cC=0,dC=0,eC=0,fC=0,gC=0,hC=0,iC=0,jC=0,kC=0,lC=0,mC=0,nC=0,oC=0,pC=0,qC=0,rC=0,sC=0,tC=0,uC=0,vC=0,wC=0,xC=0,yC=0,zC=0,AC=0,BC=0,CC=0,DC=0,EC=0,FC=0,GC=0,HC=0,IC=0,JC=0,KC=0,LC=0,MC=0,NC=0,OC=0,PC=0,QC=0,RC=0,SC=0,TC=0,UC=0,VC=0,WC=0,XC=0,YC=0,ZC=0,$C=0,_C=0,aD=0,bD=0,cD=0,dD=0,eD=0,fD=0,gD=0,hD=0,iD=0,jD=0,kD=0,lD=0,mD=0,nD=0,oD=0,qD=0,rD=0,sD=0,tD=0,uD=0,vD=0,wD=0,xD=0,yD=0,zD=0,AD=0,BD=0,CD=0,DD=0,ED=0,FD=0,GD=0,HD=0,ID=0,JD=0,KD=0,LD=0,MD=0,ND=0,OD=0,PD=0,QD=0,RD=0,SD=0,TD=0,UD=0,VD=0,WD=0,XD=0,YD=0,ZD=0,$D=0,_D=0,aE=0,bE=0,cE=0,dE=0,eE=0,fE=0,gE=0,hE=0,iE=0,jE=0,kE=0,lE=0,mE=0,nE=0,oE=0,pE=0,qE=0,rE=0,sE=0,tE=0,vE=0,wE=0,xE=0,yE=0,zE=0,AE=0,BE=0,CE=0,DE=0,EE=0,FE=0,GE=0,HE=0,IE=0,JE=0,KE=0,LE=0,ME=0,NE=0,OE=0,PE=0,QE=0,RE=0,SE=0,TE=0,UE=0,VE=0,WE=0,XE=0,YE=0,ZE=0,$E=0,_E=0,aF=0,bF=0,cF=0,dF=0,eF=0,fF=0,gF=0,hF=0,iF=0,jF=0,kF=0,lF=0,mF=0,nF=0,oF=0,pF=0,qF=0,rF=0,sF=0,tF=0,uF=0,vF=0,wF=0,xF=0,yF=0,AF=0,BF=0,CF=0,DF=0,EF=0,FF=0,GF=0,HF=0,IF=0,JF=0,KF=0,LF=0,MF=0,NF=0,OF=0,PF=0,QF=0,RF=0,SF=0,TF=0,UF=0,VF=0,WF=0,XF=0,YF=0,ZF=0,$F=0,_F=0,aG=0,bG=0,cG=0,dG=0,eG=0,fG=0,gG=0,hG=0,iG=0,jG=0,kG=0,lG=0,mG=0,nG=0,oG=0,pG=0,qG=0,rG=0,sG=0,tG=0,uG=0,vG=0,wG=0,xG=0,yG=0,zG=0,AG=0,BG=0,CG=0,DG=0,FG=0,GG=0,HG=0,IG=0,JG=0,KG=0,LG=0,MG=0,NG=0,OG=0,PG=0,QG=0,RG=0,SG=0,TG=0,UG=0,VG=0,WG=0,XG=0,YG=0,ZG=0,$G=0,_G=0,aH=0,bH=0,cH=0,dH=0,eH=0,fH=0,gH=0,hH=0,iH=0,jH=0,kH=0,lH=0,mH=0,nH=0,oH=0,pH=0,qH=0,rH=0,sH=0,tH=0,uH=0,vH=0,wH=0,xH=0,yH=0,zH=0,AH=0,BH=0,CH=0,DH=0,EH=0,FH=0,GH=0,HH=0,JH=0,KH=0,LH=0,MH=0,NH=0,OH=0,PH=0,QH=0,RH=0,SH=0,TH=0,UH=0,VH=0,WH=0,XH=0,YH=0,ZH=0,$H=0,_H=0,aI=0,bI=0,cI=0,dI=0,eI=0,fI=0,gI=0,hI=0,iI=0,jI=0,kI=0,lI=0,mI=0,nI=0,oI=0,pI=0,qI=0,rI=0,sI=0,tI=0,uI=0,vI=0,wI=0,xI=0,yI=0,zI=0,AI=0,BI=0,CI=0,DI=0,EI=0,FI=0,GI=0,HI=0,II=0,JI=0,KI=0,LI=0,MI=0,NI=0,OI=0,PI=0,QI=0,RI=0,SI=0,TI=0,UI=0,VI=0,WI=0,XI=0,YI=0,ZI=0,$I=0,_I=0,aJ=0,bJ=0,cJ=0,dJ=0,eJ=0,fJ=0,gJ=0,hJ=0,iJ=0,jJ=0,kJ=0,lJ=0,mJ=0,nJ=0,oJ=0,pJ=0,qJ=0,rJ=0,sJ=0,tJ=0,uJ=0,vJ=0,wJ=0,xJ=0,yJ=0,zJ=0,BJ=0,CJ=0,DJ=0,EJ=0,FJ=0,GJ=0,HJ=0,IJ=0,JJ=0,KJ=0,LJ=0,MJ=0,NJ=0,OJ=0,PJ=0,QJ=0,RJ=0,SJ=0,TJ=0,UJ=0,VJ=0,WJ=0,XJ=0,YJ=0,ZJ=0,$J=0,_J=0,aK=0,bK=0,cK=0,dK=0,eK=0,fK=0,gK=0,hK=0,iK=0,jK=0,kK=0,lK=0,mK=0,oK=0,pK=0,qK=0,rK=0,sK=0,tK=0,uK=0,vK=0,wK=0,xK=0,yK=0,zK=0,AK=0,BK=0,CK=0,DK=0,EK=0,FK=0,GK=0,HK=0,IK=0,JK=0,KK=0,MK=0,NK=0,OK=0,PK=0,QK=0,RK=0,SK=0,TK=0,UK=0,VK=0,WK=0,XK=0,ZK=0,$K=0,_K=0,aL=0,bL=0,cL=0,dL=0,eL=0,gL=0,hL=0,iL=0,jL=0,kL=0,lL=0,mL=0,nL=0,oL=0,pL=0,qL=0,rL=0,sL=0,tL=0,uL=0,vL=0,wL=0,xL=0,yL=0,zL=0,AL=0,BL=0,CL=0,DL=0,EL=0,FL=0,GL=0,HL=0,IL=0,JL=0,KL=0,LL=0,ML=0,NL=0,OL=0,PL=0,QL=0,RL=0,SL=0,TL=0,UL=0,VL=0,WL=0,XL=0,YL=0,ZL=0,$L=0,_L=0,aM=0,bM=0,cM=0,dM=0,fM=0,gM=0,hM=0,iM=0,jM=0,kM=0,lM=0,mM=0,nM=0,oM=0,pM=0,qM=0,rM=0,sM=0,tM=0,uM=0,vM=0,wM=0,xM=0,yM=0,zM=0,AM=0,BM=0,CM=0,DM=0,EM=0,FM=0,GM=0,HM=0,IM=0,JM=0,KM=0,LM=0,MM=0,NM=0,OM=0,PM=0,QM=0,RM=0,SM=0,TM=0,UM=0,VM=0,WM=0,XM=0,YM=0,ZM=0,$M=0,_M=0,aN=0,bN=0,cN=0,dN=0,eN=0,fN=0,gN=0,hN=0,iN=0,jN=0,kN=0,lN=0,mN=0,nN=0,oN=0,pN=0,qN=0,rN=0,sN=0,tN=0,uN=0,vN=0,wN=0,xN=0,yN=0,zN=0,AN=0,BN=0,CN=0,DN=0,EN=0,FN=0,HN=0,IN=0,KN=0,LN=0,MN=0,NN=0,ON=0,PN=0,QN=0,RN=0,SN=0,TN=0,UN=0,VN=0,WN=0,XN=0,YN=0,ZN=0,$N=0,_N=0,aO=0,bO=0,cO=0,dO=0,eO=0,fO=0,gO=0,hO=0,iO=0,jO=0,kO=0,lO=0,mO=0,nO=0,oO=0,qO=0,sO=0,tO=0,uO=0,vO=0,wO=0,xO=0,yO=0,zO=0,AO=0,BO=0,CO=0,DO=0,EO=0,FO=0,GO=0,HO=0,IO=0,JO=0,KO=0,LO=0,MO=0,NO=0,OO=0,PO=0,QO=0,RO=0,SO=0,TO=0,UO=0,VO=0,WO=0,XO=0,YO=0,ZO=0,$O=0,_O=0,aP=0,bP=0,cP=0,dP=0,eP=0,fP=0,gP=0,hP=0,iP=0,jP=0,kP=0,lP=0,mP=0,nP=0,oP=0,pP=0,qP=0,rP=0,sP=0,tP=0,uP=0,vP=0,wP=0,xP=0,yP=0,zP=0,AP=0,BP=0,CP=0,DP=0,EP=0,FP=0,HP=0,IP=0,JP=0,KP=0,LP=0,MP=0,NP=0,OP=0,PP=0,QP=0,RP=0,SP=0,TP=0,UP=0,VP=0,WP=0,XP=0,ZP=0,$P=0,_P=0,aQ=0,bQ=0,cQ=0,dQ=0,eQ=0,fQ=0,gQ=0,hQ=0,iQ=0,jQ=0,kQ=0,lQ=0,mQ=0,nQ=0,oQ=0,pQ=0,qQ=0,rQ=0,sQ=0,tQ=0,uQ=0,vQ=0,wQ=0,xQ=0,yQ=0,zQ=0,AQ=0,BQ=0,CQ=0,DQ=0,EQ=0,FQ=0,GQ=0,HQ=0,IQ=0,JQ=0,KQ=0,LQ=0,MQ=0,NQ=0,OQ=0,PQ=0,QQ=0,RQ=0,SQ=0,TQ=0,UQ=0,VQ=0,WQ=0,XQ=0,YQ=0,ZQ=0,$Q=0,_Q=0,aR=0,bR=0,cR=0,dR=0,eR=0,fR=0,gR=0,hR=0,iR=0,jR=0,kR=0,lR=0,mR=0,nR=0,oR=0,pR=0,qR=0,rR=0,sR=0,tR=0,uR=0,vR=0,wR=0,xR=0,yR=0,AR=0,BR=0,CR=0,DR=0,ER=0,FR=0,GR=0,HR=0,IR=0,JR=0,KR=0,LR=0,MR=0,NR=0,OR=0,PR=0,QR=0,RR=0,SR=0,TR=0,UR=0,VR=0,WR=0,XR=0,YR=0,ZR=0,$R=0,_R=0,aS=0,bS=0,cS=0,dS=0,eS=0,fS=0,gS=0,hS=0,iS=0,jS=0,kS=0,lS=0,mS=0,nS=0,oS=0,pS=0,qS=0,rS=0,sS=0,tS=0,uS=0,vS=0,wS=0,xS=0,yS=0,zS=0,AS=0,BS=0,CS=0,DS=0,ES=0,FS=0,GS=0,HS=0,IS=0,JS=0,KS=0,LS=0,MS=0,NS=0,OS=0,PS=0,QS=0,RS=0,SS=0,TS=0,US=0,VS=0,WS=0,XS=0,YS=0,ZS=0,$S=0,_S=0,aT=0,bT=0,cT=0,dT=0,fT=0,gT=0,hT=0,iT=0,jT=0,kT=0,lT=0,mT=0,nT=0,oT=0,pT=0,qT=0,sT=0,tT=0,uT=0,vT=0,wT=0,xT=0,yT=0,zT=0,AT=0,BT=0,CT=0,DT=0,ET=0,FT=0,GT=0,HT=0,IT=0,JT=0,LT=0,MT=0,NT=0,OT=0,PT=0,QT=0,RT=0,ST=0,TT=0,UT=0,VT=0,WT=0,XT=0,YT=0,ZT=0,$T=0,_T=0,aU=0,bU=0,cU=0,dU=0,eU=0,fU=0,gU=0,hU=0,iU=0,jU=0,kU=0,lU=0,mU=0,nU=0,oU=0,pU=0,qU=0,rU=0,sU=0,tU=0,uU=0,vU=0,wU=0,xU=0,yU=0,zU=0,AU=0,BU=0,CU=0,DU=0,EU=0,FU=0,GU=0,HU=0,IU=0,JU=0,KU=0,LU=0,MU=0,NU=0,OU=0,PU=0,QU=0,RU=0,SU=0,TU=0,UU=0,VU=0,WU=0,XU=0,YU=0,ZU=0,$U=0,_U=0,aV=0,bV=0,cV=0,dV=0,eV=0,fV=0,gV=0,hV=0,iV=0,jV=0,kV=0,lV=0,mV=0,nV=0,oV=0,pV=0,qV=0,rV=0,sV=0,tV=0,uV=0,vV=0,wV=0,xV=0,yV=0,zV=0,AV=0,BV=0,CV=0,DV=0,EV=0,FV=0,GV=0,HV=0,IV=0,JV=0,KV=0,LV=0,MV=0,NV=0,OV=0,PV=0,QV=0,RV=0,SV=0,TV=0,VV=0,WV=0,XV=0,YV=0,ZV=0,$V=0,_V=0,aW=0,bW=0,cW=0,dW=0,eW=0,fW=0,gW=0,hW=0,iW=0,jW=0,kW=0,mW=0,nW=0,oW=0,pW=0,qW=0,rW=0,sW=0,tW=0,uW=0,vW=0,wW=0,xW=0,yW=0,zW=0,AW=0,BW=0,CW=0,DW=0,EW=0,FW=0,GW=0,HW=0,IW=0,JW=0,KW=0,MW=0,NW=0,OW=0,PW=0,QW=0,RW=0,SW=0,TW=0,UW=0,VW=0,WW=0,XW=0,YW=0,$W=0,_W=0,aX=0,bX=0,cX=0,dX=0,eX=0,fX=0,gX=0,hX=0,iX=0,jX=0,kX=0,lX=0,mX=0,nX=0,oX=0,pX=0,qX=0,sX=0,tX=0,uX=0,vX=0,wX=0,xX=0,yX=0,zX=0,AX=0,BX=0,CX=0,DX=0,EX=0,FX=0,GX=0,HX=0,IX=0,JX=0,KX=0,LX=0,MX=0,NX=0,OX=0,PX=0,QX=0,RX=0,SX=0,TX=0,UX=0,VX=0,WX=0,XX=0,YX=0,ZX=0,$X=0,_X=0,aY=0,bY=0,cY=0,dY=0,eY=0,fY=0,gY=0,hY=0,iY=0,jY=0,kY=0,lY=0,mY=0,nY=0,oY=0,pY=0,qY=0,rY=0,sY=0,tY=0,uY=0,vY=0,wY=0,xY=0,yY=0,zY=0,AY=0,BY=0,CY=0,DY=0,EY=0,FY=0,GY=0,HY=0,IY=0,KY=0,LY=0,MY=0,NY=0,OY=0,PY=0,QY=0,RY=0,SY=0,TY=0,UY=0,VY=0,WY=0,XY=0,YY=0,ZY=0,$Y=0,_Y=0,aZ=0,bZ=0,cZ=0,dZ=0,eZ=0,fZ=0,gZ=0,hZ=0,iZ=0,jZ=0,kZ=0,lZ=0,mZ=0,nZ=0,oZ=0,pZ=0,qZ=0,rZ=0,sZ=0,uZ=0,vZ=0,wZ=0,xZ=0,yZ=0,zZ=0,AZ=0,BZ=0,CZ=0,DZ=0,EZ=0,FZ=0,GZ=0,HZ=0,IZ=0,JZ=0,KZ=0,LZ=0,MZ=0,NZ=0,OZ=0,PZ=0,QZ=0,RZ=0,SZ=0,TZ=0,UZ=0,VZ=0,WZ=0,XZ=0,YZ=0,ZZ=0,$Z=0,_Z=0,a$=0,b$=0,c$=0,d$=0,e$=0,f$=0,g$=0,h$=0,i$=0,j$=0,k$=0,l$=0,m$=0,n$=0,o$=0,p$=0,q$=0,r$=0,s$=0,t$=0,u$=0,v$=0,x$=0,y$=0,z$=0,A$=0,B$=0,D$=0,E$=0,F$=0,H$=0,I$=0,J$=0,K$=0,L$=0,M$=0,N$=0,O$=0,P$=0,Q$=0,R$=0,S$=0,T$=0,U$=0,V$=0,W$=0,X$=0,Y$=0,Z$=0,$$=0,_$=0,a_=0,b_=0,c_=0,d_=0,e_=0,f_=0,g_=0,h_=0,i_=0,j_=0,k_=0,l_=0,m_=0,n_=0,o_=0,p_=0,q_=0,r_=0,s_=0,t_=0,u_=0,v_=0,w_=0,x_=0,y_=0,z_=0,A_=0,B_=0,C_=0,D_=0,E_=0,F_=0,G_=0,H_=0,I_=0,J_=0,K_=0,L_=0,M_=0,N_=0,O_=0,P_=0,Q_=0,R_=0,U_=0,V_=0,W_=0,X_=0,Y_=0,Z_=0,$_=0,__=0,a0=0,b0=0,c0=0,e0=0,f0=0,g0=0,h0=0,i0=0,j0=0,k0=0,l0=0,m0=0,n0=0,o0=0,p0=0,q0=0,r0=0,s0=0,t0=0,u0=0,v0=0,w0=0,x0=0,y0=0,z0=0,A0=0,B0=0,C0=0,D0=0,E0=0,F0=0,G0=0,H0=0,I0=0,J0=0,K0=0,L0=0,M0=0,N0=0,O0=0,P0=0,Q0=0,R0=0,S0=0,T0=0,U0=0,W0=0,X0=0,Y0=0,Z0=0,$0=0,_0=0,a1=0,b1=0,c1=0,d1=0,e1=0,f1=0,g1=0,h1=0,i1=0,j1=0,k1=0,l1=0,m1=0,n1=0,o1=0,q1=0,r1=0,s1=0,t1=0,u1=0,v1=0,w1=0,x1=0,y1=0,z1=0,A1=0,B1=0,C1=0,D1=0,E1=0,F1=0,G1=0,H1=0,I1=0,J1=0,K1=0,L1=0,M1=0,N1=0,O1=0,P1=0,Q1=0,R1=0,S1=0,T1=0,U1=0,V1=0,W1=0,X1=0,Y1=0,Z1=0,$1=0,_1=0,a2=0,b2=0,c2=0,d2=0,e2=0,f2=0,g2=0,h2=0,i2=0,j2=0,k2=0,l2=0,m2=0,n2=0,o2=0,p2=0,q2=0,s2=0,t2=0,u2=0,v2=0,w2=0,x2=0,y2=0,z2=0,A2=0,B2=0,C2=0,D2=0,E2=0,F2=0,G2=0,H2=0,I2=0,J2=0,K2=0,L2=0,M2=0,N2=0,O2=0,P2=0,Q2=0,R2=0,S2=0,T2=0,U2=0,V2=0,W2=0,X2=0,Y2=0,Z2=0,$2=0,_2=0,a3=0,b3=0,c3=0,d3=0,e3=0,f3=0,g3=0,h3=0,i3=0,j3=0,k3=0,l3=0,m3=0,n3=0,o3=0,p3=0,q3=0,r3=0,s3=0,t3=0,u3=0,v3=0,w3=0,x3=0,y3=0,z3=0,A3=0,C3=0,D3=0,E3=0,F3=0,G3=0,H3=0,I3=0,J3=0,K3=0,L3=0,M3=0,O3=0,P3=0,Q3=0,R3=0,S3=0,T3=0,U3=0,V3=0,W3=0,X3=0,Y3=0,$3=0,_3=0,a4=0,b4=0,c4=0,d4=0,e4=0,f4=0,g4=0,h4=0,i4=0,j4=0,k4=0,l4=0,m4=0,n4=0,o4=0,p4=0,q4=0,r4=0,s4=0,t4=0,u4=0,v4=0,w4=0,x4=0,y4=0,z4=0,A4=0,B4=0,C4=0,D4=0,E4=0,F4=0,G4=0,H4=0,I4=0,K4=0,L4=0,M4=0,N4=0,O4=0,P4=0,Q4=0,R4=0,S4=0,T4=0,U4=0,V4=0,W4=0,X4=0,Y4=0,Z4=0,$4=0,_4=0,a5=0,b5=0,c5=0,d5=0,e5=0,f5=0,g5=0,h5=0,i5=0,j5=0,k5=0,l5=0,m5=0,n5=0,o5=0,p5=0,q5=0,r5=0,s5=0,t5=0,u5=0,v5=0,w5=0,x5=0,y5=0,z5=0,A5=0,B5=0,C5=0,D5=0,E5=0,F5=0,G5=0,H5=0,I5=0,J5=0,K5=0,L5=0,M5=0,N5=0,O5=0,Q5=0,R5=0,S5=0,T5=0,U5=0,V5=0,W5=0,X5=0,Y5=0,Z5=0,$5=0,_5=0,a6=0,b6=0,c6=0,d6=0,e6=0,f6=0,g6=0,h6=0,i6=0,j6=0,k6=0,l6=0,m6=0,n6=0,o6=0,p9=0,s9=0,t9=0,u9=0,v9=0,w9=0,x9=0,y9=0;y9=o,o=o+1328|0,(0|o)>=(0|p)&&ca(1328),Vc=y9+1312|0,Uc=y9+1304|0,Tc=y9+1296|0,Sc=y9+1288|0,Rc=y9+1280|0,Qc=y9+1272|0,Pc=y9+1264|0,Oc=y9+1256|0,Nc=y9+1248|0,Mc=y9+1240|0,Lc=y9+1232|0,Kc=y9+1224|0,Jc=y9+1216|0,Ic=y9+1208|0,Hc=y9+1200|0,Gc=y9+1192|0,Fc=y9+1184|0,Ec=y9+1176|0,Dc=y9+1168|0,Cc=y9+1160|0,Bc=y9+1152|0,Ac=y9+1144|0,zc=y9+1136|0,yc=y9+1128|0,xc=y9+1120|0,wc=y9+1112|0,vc=y9+1104|0,uc=y9+1096|0,tc=y9+1088|0,sc=y9+1080|0,rc=y9+1072|0,qc=y9+1064|0,pc=y9+1056|0,oc=y9+1048|0,nc=y9+1040|0,mc=y9+1032|0,lc=y9+1024|0,kc=y9+1016|0,jc=y9+1008|0,ic=y9+1e3|0,hc=y9+992|0,gc=y9+984|0,fc=y9+976|0,ec=y9+968|0,dc=y9+960|0,cc=y9+952|0,bc=y9+944|0,ac=y9+936|0,_b=y9+928|0,$b=y9+920|0,Zb=y9+912|0,Yb=y9+904|0,Xb=y9+896|0,Wb=y9+888|0,Vb=y9+880|0,Ub=y9+872|0,Tb=y9+864|0,Sb=y9+856|0,Rb=y9+848|0,Qb=y9+840|0,Pb=y9+832|0,s9=y9,w9=4,v9=0|Gw(40),f[v9>>2]=0,_X=y9+672|0,c$=y9+664|0,f0=y9+656|0,i2=y9+648|0,l4=y9+640|0,rd=y9+632|0,vf=y9+624|0,yh=y9+616|0,Bj=y9+608|0,El=y9+600|0,In=y9+592|0,Mp=y9+584|0,Pr=y9+576|0,St=y9+568|0,Vv=y9+560|0,ay=y9+552|0,dA=y9+544|0,gC=y9+536|0,jE=y9+528|0,mG=y9+520|0,pI=y9+512|0,sK=y9+504|0,vM=y9+496|0,yO=y9+488|0,BQ=y9+480|0,ES=y9+472|0,gU=y9+464|0,rU=y9+456|0,CU=y9+448|0,NU=y9+440|0,YU=y9+432|0,hV=y9+424|0,sV=y9+416|0,DV=y9+408|0,OV=y9+400|0,ZV=y9+392|0,iW=y9+384|0,tW=y9+376|0,EW=y9+368|0,PW=y9+360|0,$W=y9+352|0,jX=y9+344|0,uX=y9+336|0,FX=y9+328|0,QX=y9+320|0,aY=y9+312|0,lY=y9+304|0,wY=y9+296|0,HY=y9+288|0,SY=y9+280|0,bZ=y9+272|0,mZ=y9+264|0,xZ=y9+260|0,IZ=y9+256|0,TZ=y9+248|0,d$=y9+240|0,o$=y9+232|0,z$=y9+224|0,K$=y9+216|0,V$=y9+208|0,e_=y9+200|0,p_=y9+192|0,A_=y9+184|0,L_=y9+176|0,W_=y9+168|0,g0=y9+160|0,r0=y9+152|0,C0=y9+144|0,N0=y9+136|0,Y0=y9+128|0,h1=y9+120|0,s1=y9+112|0,D1=y9+104|0,O1=y9+96|0,Z1=y9+88|0,j2=y9+80|0,u2=y9+72|0,F2=y9+64|0,Q2=y9+56|0,_2=y9+48|0,k3=y9+40|0,v3=y9+32|0,G3=y9+24|0,R3=y9+16|0,a4=c+12|0,m4=0|f[a4>>2],x4=m4+8|0,I4=0|f[x4>>2],T4=m4+12|0,c5=0|f[T4>>2],n5=m4+16|0,y5=0|f[n5>>2],r=0,J5=0|ta(145,0|b),U5=r,r=0,0!=(0|U5)&0!=(0|s)?(d6=0|Rw(0|f[U5>>2],0|v9,0|w9),0==(0|d6)&&Aa(0|U5,0|s),G=s):d6=-1,sd=G,o6=1==(0|d6),o6?(na=0,za=0,Ca=0,Fa=0,Ha=y5,Ja=c5,La=I4,Na=m4,Pa=c,Xc=sd):(Dd=0|f[b>>2],X=0,Y=Dd,Z=J5,_=0,aa=y5,ba=c5,da=I4,ea=m4,fa=c,x9=3);a:for(;;){if(3==(0|x9)){if(x9=0,v9=0|Qw(_X,1,0|v9,0|w9),w9=G,r=0,Od=r,r=0,0!=(0|Od)&0!=(0|s)?(Zd=0|Rw(0|f[Od>>2],0|v9,0|w9),0==(0|Zd)&&Aa(0|Od,0|s),G=s):Zd=-1,ie=G,1==(0|Zd)){na=X,za=Y,Ca=Z,Fa=_,Ha=aa,Ja=ba,La=da,Na=ea,Pa=fa,Xc=ie;continue}na=X,za=Y,Ca=Z,Fa=_,Ha=aa,Ja=ba,La=da,Na=ea,Pa=fa,Xc=0}if(0==(0|Xc)){if(na<<24>>24!=0)Sa=0,Va=Fa,cb=Ha,eb=Ja,gb=La,yb=Na,Ab=Pa,x9=272;else{if(f[b>>2]=_X,Pe=b+12|0,$e=0|f[Pe>>2],kf=$e+4|0,wf=0|f[kf>>2],!(0!=(0|wf))&&(r=0,ra(134,0|b),Sf=r,r=0,0!=(0|Sf)&0!=(0|s)?(bg=0|Rw(0|f[Sf>>2],0|v9,0|w9),0==(0|bg)&&Aa(0|Sf,0|s),G=s):bg=-1,mg=G,1==(0|bg))){Qa=Pa,Oa=Na,Ma=La,Ka=Ja,Ia=Ha,Ga=Fa,Da=Ca,Ba=za,pa=na,Xc=mg,Pa=Qa,Na=Oa,La=Ma,Ja=Ka,Ha=Ia,Fa=Ga,Ca=Da,za=Ba,na=pa;continue}if(xg=Na+2|0,Ig=0|e[xg>>1],Tg=65535&Ig,r=0,ua(142,0|b,0|Tg,0|g),ch=r,r=0,0!=(0|ch)&0!=(0|s)?(nh=0|Rw(0|f[ch>>2],0|v9,0|w9),0==(0|nh)&&Aa(0|ch,0|s),G=s):nh=-1,zh=G,1==(0|nh)){Qa=Pa,Oa=Na,Ma=La,Ka=Ja,Ia=Ha,Ga=Fa,Da=Ca,Ba=za,pa=na,Xc=zh,Pa=Qa,Na=Oa,La=Ma,Ja=Ka,Ha=Ia,Fa=Ga,Ca=Da,za=Ba,na=pa;continue}Kh=b+12|0,Vh=0|f[Kh>>2],ei=Vh+16|0,pi=0|f[ei>>2],Ai=pi+4|0,f[Ai>>2]=Pa,Li=Na+2|0,Wi=0|e[Li>>1],fj=65535&Wi,qj=b+12|0,Cj=0|f[qj>>2],Nj=Cj+16|0,Yj=0|f[Nj>>2],hk=Yj+12|0,f[hk>>2]=fj,sk=b+12|0,Dk=0|f[sk>>2],Ok=Dk+4|0,Zk=0|f[Ok>>2],f[Zk>>2]=0|f[d>>2],f[Zk+4>>2]=0|f[d+4>>2],il=0|f[La>>2],Ua=il,rb=na,tb=Zk,Cb=Ha,Eb=Ja,Gb=La,Lb=Na,Nb=Pa,ad=il,x9=583}b:for(;;){if(272==(0|x9)){if(x9=0,Nl=b+12|0,Ol=0|f[Nl>>2],Pl=Ol+16|0,Rl=0|f[Pl>>2],Sl=b+20|0,Tl=0|f[Sl>>2],r=0,Ul=0|oa(140,0|b,68279,6),Vl=r,r=0,0!=(0|Vl)&0!=(0|s)?(Wl=0|Rw(0|f[Vl>>2],0|v9,0|w9),0==(0|Wl)&&Aa(0|Vl,0|s),G=s):Wl=-1,Xl=G,1==(0|Wl)){Da=Ca,Ba=za,na=Sa,Fa=Va,Ha=cb,Ja=eb,La=gb,Na=yb,Pa=Ab,Xc=Xl,Ca=Da,za=Ba;continue a}if(r=0,ua(176,0|tW,0|b,0|gb),Yl=r,r=0,0!=(0|Yl)&0!=(0|s)?(Zl=0|Rw(0|f[Yl>>2],0|v9,0|w9),0==(0|Zl)&&Aa(0|Yl,0|s),G=s):Zl=-1,$l=G,1==(0|Zl)){Da=Ca,Ba=za,na=Sa,Fa=Va,Ha=cb,Ja=eb,La=gb,Na=yb,Pa=Ab,Xc=$l,Ca=Da,za=Ba;continue a}if(r=0,f[kc>>2]=0|f[tW>>2],f[kc+4>>2]=0|f[tW+4>>2],ya(177,0|b,0|Tl,0|Ul,0|kc),am=r,r=0,0!=(0|am)&0!=(0|s)?(bm=0|Rw(0|f[am>>2],0|v9,0|w9),0==(0|bm)&&Aa(0|am,0|s),G=s):bm=-1,cm=G,1==(0|bm)){Da=Ca,Ba=za,na=Sa,Fa=Va,Ha=cb,Ja=eb,La=gb,Na=yb,Pa=Ab,Xc=cm,Ca=Da,za=Ba;continue a}if(dm=b+20|0,em=0|f[dm>>2],r=0,fm=0|oa(140,0|b,67804,5),gm=r,r=0,0!=(0|gm)&0!=(0|s)?(hm=0|Rw(0|f[gm>>2],0|v9,0|w9),0==(0|hm)&&Aa(0|gm,0|s),G=s):hm=-1,im=G,1==(0|hm)){Da=Ca,Ba=za,na=Sa,Fa=Va,Ha=cb,Ja=eb,La=gb,Na=yb,Pa=Ab,Xc=im,Ca=Da,za=Ba;continue a}if(jm=b+12|0,lm=0|f[jm>>2],mm=lm+20|0,nm=0|f[mm>>2],om=Rl,pm=nm,qm=om-pm|0,rm=(0|qm)/48&-1,r=0,sa(136,0|EW,0|rm),sm=r,r=0,0!=(0|sm)&0!=(0|s)?(tm=0|Rw(0|f[sm>>2],0|v9,0|w9),0==(0|tm)&&Aa(0|sm,0|s),G=s):tm=-1,um=G,1==(0|tm)){Da=Ca,Ba=za,na=Sa,Fa=Va,Ha=cb,Ja=eb,La=gb,Na=yb,Pa=Ab,Xc=um,Ca=Da,za=Ba;continue a}if(r=0,f[lc>>2]=0|f[EW>>2],f[lc+4>>2]=0|f[EW+4>>2],ya(177,0|b,0|em,0|fm,0|lc),wm=r,r=0,0!=(0|wm)&0!=(0|s)?(xm=0|Rw(0|f[wm>>2],0|v9,0|w9),0==(0|xm)&&Aa(0|wm,0|s),G=s):xm=-1,ym=G,1==(0|xm)){Da=Ca,Ba=za,na=Sa,Fa=Va,Ha=cb,Ja=eb,La=gb,Na=yb,Pa=Ab,Xc=ym,Ca=Da,za=Ba;continue a}zm=Rl+20|0,Am=0|f[zm>>2],Bm=b+12|0,Cm=0|f[Bm>>2],Dm=Cm+20|0,Em=0|f[Dm>>2],Fm=(0|Rl)==(0|Em);c:if(Fm){if(Hm=Rl+16|0,Im=0|f[Hm>>2],0==(0|Im)){kb=Sa,lb=Va,vb=cb,wb=eb,xb=gb,Jb=yb,Kb=Ab;break b}ka=Rl}else{D=Am,F=Rl;d:for(;;){if(Km=F+16|0,Lm=0|f[Km>>2],Mm=F+-48|0,Nm=Mm+16|0,Om=0|f[Nm>>2],!((0|Lm)==(0|Om))){ka=F;break c}if(r=0,ra(132,0|b),Qm=r,r=0,0!=(0|Qm)&0!=(0|s)?(Sm=0|Rw(0|f[Qm>>2],0|v9,0|w9),0==(0|Sm)&&Aa(0|Qm,0|s),G=s):Sm=-1,Tm=G,1==(0|Sm)){Da=Ca,Ba=za,na=Sa,Fa=Va,Ha=cb,Ja=eb,La=gb,Na=yb,Pa=Ab,Xc=Tm,Ca=Da,za=Ba;continue a}if(Um=b+12|0,Vm=0|f[Um>>2],Wm=Vm+16|0,Xm=0|f[Wm>>2],Ym=Xm+48|0,Zm=Ym+8|0,$m=0|f[Zm>>2],_m=b+12|0,bn=0|f[_m>>2],cn=bn+4|0,f[cn>>2]=$m,dn=Xm+48|0,en=dn+40|0,fn=0|f[en>>2],gn=-1==(0|fn),hn=0!=(0|za),gn&hn){x9=283;break b}if(nn=b+12|0,on=0|f[nn>>2],pn=on+20|0,qn=0|f[pn>>2],(0|Xm)==(0|qn)){ja=D;break}if(Rn=Xm+16|0,Sn=0|f[Rn>>2],Tn=Xm+-48|0,Vn=Tn+16|0,Wn=0|f[Vn>>2],(0|Sn)==(0|Wn))for(Ra=D;;){if(Yn=Xm+-48|0,Zn=Yn+20|0,$n=0|f[Zn>>2],!((0|Ra)>(0|$n))){D=Ra,F=Xm;continue d}if(ao=Ra+-1|0,r=0,sa(166,0|b,0|ao),bo=r,r=0,0!=(0|bo)&0!=(0|s)?(co=0|Rw(0|f[bo>>2],0|v9,0|w9),0==(0|co)&&Aa(0|bo,0|s),G=s):co=-1,fo=G,1==(0|co)){Da=Ca,Ba=za,na=Sa,Fa=Va,Ha=cb,Ja=eb,La=gb,Na=yb,Pa=Ab,Xc=fo,Ca=Da,za=Ba;continue a}Ra=ao}else E=D,F=Xm,D=E}for(;;){if(!((0|ja)>0))break;if(tn=ja+-1|0,r=0,sa(166,0|b,0|tn),un=r,r=0,0!=(0|un)&0!=(0|s)?(vn=0|Rw(0|f[un>>2],0|v9,0|w9),0==(0|vn)&&Aa(0|un,0|s),G=s):vn=-1,wn=G,1==(0|vn)){Da=Ca,Ba=za,na=Sa,Fa=Va,Ha=cb,Ja=eb,La=gb,Na=yb,Pa=Ab,Xc=wn,Ca=Da,za=Ba;continue a}ja=tn}if(yn=Xm+16|0,zn=0|f[yn>>2],0==(0|zn)){if(Bn=b+12|0,Cn=0|f[Bn>>2],Dn=b+16|0,En=0|f[Dn>>2],Fn=(0|Cn)==(0|En),Gn=b+12|0,Hn=0|f[Gn>>2],Fn){x9=290;break b}Pn=0|f[Hn>>2],Qn=b+12|0,f[Qn>>2]=Pn,f[Hn>>2]=0,Bb=Ab,zb=yb,hb=gb,fb=eb,db=cb,Wa=Va,Ta=Sa,Ab=Bb,yb=zb,gb=hb,eb=fb,cb=db,Va=Wa,Sa=Ta,x9=272;continue b}ka=Xm}if(go=ka+16|0,ho=0|f[go>>2],0==(0|ho)){kb=Sa,lb=Va,vb=cb,wb=eb,xb=gb,Jb=yb,Kb=Ab;break}jo=ka+4|0,ko=0|f[jo>>2],lo=ko+12|0,mo=0|f[lo>>2],no=mo+12|0,oo=0|f[no>>2],qo=mo+16|0,ro=0|f[qo>>2],so=ka+48|0,to=so+8|0,uo=0|f[to>>2],vo=b+12|0,wo=0|f[vo>>2],xo=wo+4|0,f[xo>>2]=uo,yo=b+12|0,zo=0|f[yo>>2],Bo=zo+28|0,Co=0|f[Bo>>2],Do=ka+16|0,Eo=0|f[Do>>2],Fo=Eo+-1|0,f[Do>>2]=Fo,Go=Co+(Fo<<2)|0,Ho=0|f[Go>>2],ab=Sa,bb=uo,mb=ro,nb=oo,ob=Ho,Hb=mo,Ib=ko}else if(583==(0|x9)){x9=0,bU=127&ad,cU=200+(bU<<2)|0,dU=0|f[cU>>2],p9=dU;c:switch(0|p9){case 75:kb=rb,lb=tb,vb=Cb,wb=Eb,xb=Gb,Jb=Lb,Kb=Nb;break b;case 1:tl=Gb+4|0,Fl=0|f[tl>>2],Ob=Nb,Mb=Lb,Fb=Eb,Db=Cb,ub=tb,sb=rb,Ua=Fl,Gb=tl,ad=Fl,Nb=Ob,Lb=Mb,Eb=Fb,Cb=Db,tb=ub,rb=sb,x9=583;continue b;case 2:Ql=Ua>>>23,_l=511&Ql,km=tb+(_l<<3)|0,vm=Ua>>>14,Gm=511&vm,Rm=tb+(Gm<<3)|0,f[km>>2]=0|f[Rm>>2],f[km+4>>2]=0|f[Rm+4>>2],an=Gb+4|0,mn=0|f[an>>2],Ob=Nb,Mb=Lb,Fb=Eb,Db=Cb,ub=tb,sb=rb,Ua=mn,Gb=an,ad=mn,Nb=Ob,Lb=Mb,Eb=Fb,Cb=Db,tb=ub,rb=sb,x9=583;continue b;case 3:xn=Ua>>>23,Jn=511&xn,Un=tb+(Jn<<3)|0,eo=Ua>>>7,po=65535&eo,Ao=Eb+(po<<3)|0,f[Un>>2]=0|f[Ao>>2],f[Un+4>>2]=0|f[Ao+4>>2],Lo=Gb+4|0,Wo=0|f[Lo>>2],Ob=Nb,Mb=Lb,Fb=Eb,Db=Cb,ub=tb,sb=rb,Ua=Wo,Gb=Lo,ad=Wo,Nb=Ob,Lb=Mb,Eb=Fb,Cb=Db,tb=ub,rb=sb,x9=583;continue b;case 4:fp=Ua>>>23,qp=511&fp,Bp=tb+(qp<<3)|0,Np=Bp+4|0,f[Np>>2]=3,Yp=Ua>>>7,hq=65535&Yp,sq=hq-32767|0,Dq=Ua>>>23,Oq=511&Dq,Zq=tb+(Oq<<3)|0,f[Zq>>2]=sq,ir=Gb+4|0,tr=0|f[ir>>2],Ob=Nb,Mb=Lb,Fb=Eb,Db=Cb,ub=tb,sb=rb,Ua=tr,Gb=ir,ad=tr,Nb=Ob,Lb=Mb,Eb=Fb,Cb=Db,tb=ub,rb=sb,x9=583;continue b;case 5:Er=Ua>>>23,Qr=511&Er,_r=tb+(Qr<<3)|0,ks=_r+4|0,f[ks>>2]=4,vs=Ua>>>7,Gs=65535&vs,Rs=Cb+(Gs<<2)|0,at=0|f[Rs>>2],lt=Ua>>>23,wt=511&lt,Ht=tb+(wt<<3)|0,f[Ht>>2]=at,Tt=Gb+4|0,cu=0|f[Tt>>2],Ob=Nb,Mb=Lb,Fb=Eb,Db=Cb,ub=tb,sb=rb,Ua=cu,Gb=Tt,ad=cu,Nb=Ob,Lb=Mb,Eb=Fb,Cb=Db,tb=ub,rb=sb,x9=583;continue b;case 6:R$=Ua>>>23,S$=511&R$,T$=tb+(S$<<3)|0,U$=T$+4|0,f[U$>>2]=0,W$=tb+(S$<<3)|0,f[W$>>2]=0,X$=Gb+4|0,Y$=0|f[X$>>2],Ob=Nb,Mb=Lb,Fb=Eb,Db=Cb,ub=tb,sb=rb,Ua=Y$,Gb=X$,ad=Y$,Nb=Ob,Lb=Mb,Eb=Fb,Cb=Db,tb=ub,rb=sb,x9=583;continue b;case 7:nu=Ua>>>23,yu=511&nu,Ju=tb+(yu<<3)|0,f[Ju>>2]=0|f[tb>>2],f[Ju+4>>2]=0|f[tb+4>>2],Uu=Gb+4|0,dv=0|f[Uu>>2],Ob=Nb,Mb=Lb,Fb=Eb,Db=Cb,ub=tb,sb=rb,Ua=dv,Gb=Uu,ad=dv,Nb=Ob,Lb=Mb,Eb=Fb,Cb=Db,tb=ub,rb=sb,x9=583;continue b;case 8:ov=Ua>>>23,zv=511&ov,Kv=tb+(zv<<3)|0,Wv=Kv+4|0,f[Wv>>2]=2,fw=Ua>>>23,qw=511&fw,Bw=tb+(qw<<3)|0,f[Bw>>2]=1,Ow=Gb+4|0,_w=0|f[Ow>>2],Ob=Nb,Mb=Lb,Fb=Eb,Db=Cb,ub=tb,sb=rb,Ua=_w,Gb=Ow,ad=_w,Nb=Ob,Lb=Mb,Eb=Fb,Cb=Db,tb=ub,rb=sb,x9=583;continue b;case 9:kx=Ua>>>23,vx=511&kx,Gx=tb+(vx<<3)|0,Rx=Gx+4|0,f[Rx>>2]=0,by=Ua>>>23,my=511&by,xy=tb+(my<<3)|0,f[xy>>2]=1,Iy=Gb+4|0,Ty=0|f[Iy>>2],Ob=Nb,Mb=Lb,Fb=Eb,Db=Cb,ub=tb,sb=rb,Ua=Ty,Gb=Iy,ad=Ty,Nb=Ob,Lb=Mb,Eb=Fb,Cb=Db,tb=ub,rb=sb,x9=583;continue b;case 10:if(cz=Ua>>>23,nz=511&cz,yz=tb+(nz<<3)|0,Jz=Ua>>>7,Uz=65535&Jz,eA=Cb+(Uz<<2)|0,pA=0|f[eA>>2],r=0,ua(149,0|c$,0|b,0|pA),AA=r,r=0,0!=(0|AA)&0!=(0|s)?(LA=0|Rw(0|f[AA>>2],0|v9,0|w9),0==(0|LA)&&Aa(0|AA,0|s),G=s):LA=-1,WA=G,1==(0|LA)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=WA,Ca=Da,za=Ba;continue a}f[yz>>2]=0|f[c$>>2],f[yz+4>>2]=0|f[c$+4>>2],fB=Gb+4|0,qB=0|f[fB>>2],Ob=Nb,Mb=Lb,Fb=Eb,Db=Cb,ub=tb,sb=rb,Ua=qB,Gb=fB,ad=qB,Nb=Ob,Lb=Mb,Eb=Fb,Cb=Db,tb=ub,rb=sb,x9=583;continue b;case 11:if(BB=Ua>>>7,MB=65535&BB,XB=Cb+(MB<<2)|0,hC=0|f[XB>>2],sC=Ua>>>23,DC=511&sC,OC=tb+(DC<<3)|0,r=0,f[Pb>>2]=0|f[OC>>2],f[Pb+4>>2]=0|f[OC+4>>2],ua(150,0|b,0|hC,0|Pb),ZC=r,r=0,0!=(0|ZC)&0!=(0|s)?(iD=0|Rw(0|f[ZC>>2],0|v9,0|w9),0==(0|iD)&&Aa(0|ZC,0|s),G=s):iD=-1,tD=G,1==(0|iD)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=tD,Ca=Da,za=Ba;continue a}ED=Gb+4|0,PD=0|f[ED>>2],Ob=Nb,Mb=Lb,Fb=Eb,Db=Cb,ub=tb,sb=rb,Ua=PD,Gb=ED,ad=PD,Nb=Ob,Lb=Mb,Eb=Fb,Cb=Db,tb=ub,rb=sb,x9=583;continue b;case 12:if($D=Ua>>>23,kE=511&$D,vE=tb+(kE<<3)|0,GE=Ua>>>7,RE=65535&GE,r=0,ua(151,0|f0,0|b,0|RE),aF=r,r=0,0!=(0|aF)&0!=(0|s)?(lF=0|Rw(0|f[aF>>2],0|v9,0|w9),0==(0|lF)&&Aa(0|aF,0|s),G=s):lF=-1,wF=G,1==(0|lF)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=wF,Ca=Da,za=Ba;continue a}f[vE>>2]=0|f[f0>>2],f[vE+4>>2]=0|f[f0+4>>2],HF=Gb+4|0,SF=0|f[HF>>2],Ob=Nb,Mb=Lb,Fb=Eb,Db=Cb,ub=tb,sb=rb,Ua=SF,Gb=HF,ad=SF,Nb=Ob,Lb=Mb,Eb=Fb,Cb=Db,tb=ub,rb=sb,x9=583;continue b;case 13:if(bG=Ua>>>7,nG=65535&bG,yG=Ua>>>23,JG=511&yG,UG=tb+(JG<<3)|0,r=0,f[Qb>>2]=0|f[UG>>2],f[Qb+4>>2]=0|f[UG+4>>2],ua(152,0|b,0|nG,0|Qb),dH=r,r=0,0!=(0|dH)&0!=(0|s)?(oH=0|Rw(0|f[dH>>2],0|v9,0|w9),0==(0|oH)&&Aa(0|dH,0|s),G=s):oH=-1,zH=G,1==(0|oH)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=zH,Ca=Da,za=Ba;continue a}KH=Gb+4|0,VH=0|f[KH>>2],Ob=Nb,Mb=Lb,Fb=Eb,Db=Cb,ub=tb,sb=rb,Ua=VH,Gb=KH,ad=VH,Nb=Ob,Lb=Mb,Eb=Fb,Cb=Db,tb=ub,rb=sb,x9=583;continue b;case 14:if(eI=Ua>>>23,qI=511&eI,BI=tb+(qI<<3)|0,MI=Ua>>>7,XI=65535&MI,gJ=Cb+(XI<<2)|0,rJ=0|f[gJ>>2],r=0,ua(153,0|i2,0|b,0|rJ),CJ=r,r=0,0!=(0|CJ)&0!=(0|s)?(NJ=0|Rw(0|f[CJ>>2],0|v9,0|w9),0==(0|NJ)&&Aa(0|CJ,0|s),G=s):NJ=-1,YJ=G,1==(0|NJ)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=YJ,Ca=Da,za=Ba;continue a}f[BI>>2]=0|f[i2>>2],f[BI+4>>2]=0|f[i2+4>>2],hK=Gb+4|0,tK=0|f[hK>>2],Ob=Nb,Mb=Lb,Fb=Eb,Db=Cb,ub=tb,sb=rb,Ua=tK,Gb=hK,ad=tK,Nb=Ob,Lb=Mb,Eb=Fb,Cb=Db,tb=ub,rb=sb,x9=583;continue b;case 15:if(EK=Ua>>>7,PK=65535&EK,$K=Cb+(PK<<2)|0,jL=0|f[$K>>2],uL=Ua>>>23,FL=511&uL,QL=tb+(FL<<3)|0,r=0,f[Rb>>2]=0|f[QL>>2],f[Rb+4>>2]=0|f[QL+4>>2],ua(154,0|b,0|jL,0|Rb),_L=r,r=0,0!=(0|_L)&0!=(0|s)?(kM=0|Rw(0|f[_L>>2],0|v9,0|w9),0==(0|kM)&&Aa(0|_L,0|s),G=s):kM=-1,wM=G,1==(0|kM)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=wM,Ca=Da,za=Ba;continue a}HM=Gb+4|0,SM=0|f[HM>>2],Ob=Nb,Mb=Lb,Fb=Eb,Db=Cb,ub=tb,sb=rb,Ua=SM,Gb=HM,ad=SM,Nb=Ob,Lb=Mb,Eb=Fb,Cb=Db,tb=ub,rb=sb,x9=583;continue b;case 16:if(bN=b+12|0,mN=0|f[bN>>2],xN=mN+16|0,IN=0|f[xN>>2],TN=IN+32|0,f[TN>>2]=Gb,cO=Ua>>>23,nO=511&cO,zO=tb+(nO<<3)|0,KO=Ua>>>7,VO=65535&KO,eP=Cb+(VO<<2)|0,pP=0|f[eP>>2],r=0,ua(155,0|l4,0|b,0|pP),AP=r,r=0,0!=(0|AP)&0!=(0|s)?(LP=0|Rw(0|f[AP>>2],0|v9,0|w9),0==(0|LP)&&Aa(0|AP,0|s),G=s):LP=-1,WP=G,1==(0|LP)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=WP,Ca=Da,za=Ba;continue a}f[zO>>2]=0|f[l4>>2],f[zO+4>>2]=0|f[l4+4>>2],fQ=b+12|0,qQ=0|f[fQ>>2],CQ=qQ+16|0,NQ=0|f[CQ>>2],YQ=NQ+32|0,f[YQ>>2]=0,hR=Gb+4|0,sR=0|f[hR>>2],Ob=Nb,Mb=Lb,Fb=Eb,Db=Cb,ub=tb,sb=rb,Ua=sR,Gb=hR,ad=sR,Nb=Ob,Lb=Mb,Eb=Fb,Cb=Db,tb=ub,rb=sb,x9=583;continue b;case 17:if(DR=Ua>>>7,OR=65535&DR,ZR=Cb+(OR<<2)|0,iS=0|f[ZR>>2],tS=Ua>>>23,FS=511&tS,QS=tb+(FS<<3)|0,r=0,f[Sb>>2]=0|f[QS>>2],f[Sb+4>>2]=0|f[QS+4>>2],ua(156,0|b,0|iS,0|Sb),_S=r,r=0,0!=(0|_S)&0!=(0|s)?(kT=0|Rw(0|f[_S>>2],0|v9,0|w9),0==(0|kT)&&Aa(0|_S,0|s),G=s):kT=-1,vT=G,1==(0|kT)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=vT,Ca=Da,za=Ba;continue a}GT=Gb+4|0,RT=0|f[GT>>2],Ob=Nb,Mb=Lb,Fb=Eb,Db=Cb,ub=tb,sb=rb,Ua=RT,Gb=GT,ad=RT,Nb=Ob,Lb=Mb,Eb=Fb,Cb=Db,tb=ub,rb=sb,x9=583;continue b;case 18:if(aU=b+12|0,eU=0|f[aU>>2],fU=eU+16|0,hU=0|f[fU>>2],iU=hU+32|0,f[iU>>2]=Gb,jU=Ua>>>7,kU=65535&jU,lU=Cb+(kU<<2)|0,mU=0|f[lU>>2],r=0,ua(157,0|vf,0|b,0|mU),nU=r,r=0,0!=(0|nU)&0!=(0|s)?(oU=0|Rw(0|f[nU>>2],0|v9,0|w9),0==(0|oU)&&Aa(0|nU,0|s),G=s):oU=-1,pU=G,1==(0|oU)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=pU,Ca=Da,za=Ba;continue a}f[rd>>2]=0|f[vf>>2],f[rd+4>>2]=0|f[vf+4>>2],qU=b+12|0,sU=0|f[qU>>2],tU=sU+16|0,uU=0|f[tU>>2],vU=uU+32|0,f[vU>>2]=0,wU=b+12|0,xU=0|f[wU>>2],yU=xU+4|0,zU=0|f[yU>>2],AU=Ua>>>23,BU=511&AU,DU=zU+(BU<<3)|0,f[DU>>2]=0|f[rd>>2],f[DU+4>>2]=0|f[rd+4>>2],EU=Gb+4|0,FU=0|f[EU>>2],Ob=Nb,Mb=Lb,Fb=Eb,Db=Cb,sb=rb,Ua=FU,tb=zU,Gb=EU,ad=FU,Nb=Ob,Lb=Mb,Eb=Fb,Cb=Db,rb=sb,x9=583;continue b;case 19:if(GU=Ua>>>7,HU=65535&GU,IU=Cb+(HU<<2)|0,JU=0|f[IU>>2],KU=Ua>>>23,LU=511&KU,MU=tb+(LU<<3)|0,r=0,f[Tb>>2]=0|f[MU>>2],f[Tb+4>>2]=0|f[MU+4>>2],ua(158,0|b,0|JU,0|Tb),OU=r,r=0,0!=(0|OU)&0!=(0|s)?(PU=0|Rw(0|f[OU>>2],0|v9,0|w9),0==(0|PU)&&Aa(0|OU,0|s),G=s):PU=-1,QU=G,1==(0|PU)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=QU,Ca=Da,za=Ba;continue a}RU=Gb+4|0,SU=0|f[RU>>2],Ob=Nb,Mb=Lb,Fb=Eb,Db=Cb,ub=tb,sb=rb,Ua=SU,Gb=RU,ad=SU,Nb=Ob,Lb=Mb,Eb=Fb,Cb=Db,tb=ub,rb=sb,x9=583;continue b;case 20:if(TU=Ua>>>23,UU=511&TU,VU=b+12|0,WU=0|f[VU>>2],XU=WU+16|0,ZU=0|f[XU>>2],$U=ZU+32|0,f[$U>>2]=Gb,_U=tb+(UU<<3)|0,aV=Ua>>>7,bV=65535&aV,cV=Cb+(bV<<2)|0,dV=0|f[cV>>2],r=0,f[Ub>>2]=0|f[_U>>2],f[Ub+4>>2]=0|f[_U+4>>2],ya(159,0|Bj,0|b,0|Ub,0|dV),eV=r,r=0,0!=(0|eV)&0!=(0|s)?(fV=0|Rw(0|f[eV>>2],0|v9,0|w9),0==(0|fV)&&Aa(0|eV,0|s),G=s):fV=-1,gV=G,1==(0|fV)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=gV,Ca=Da,za=Ba;continue a}f[yh>>2]=0|f[Bj>>2],f[yh+4>>2]=0|f[Bj+4>>2],iV=b+12|0,jV=0|f[iV>>2],kV=jV+16|0,lV=0|f[kV>>2],mV=lV+32|0,f[mV>>2]=0,nV=b+12|0,oV=0|f[nV>>2],pV=oV+4|0,qV=0|f[pV>>2],rV=qV+(UU<<3)|0,f[rV>>2]=0|f[yh>>2],f[rV+4>>2]=0|f[yh+4>>2],tV=Gb+4|0,uV=0|f[tV>>2],Ob=Nb,Mb=Lb,Fb=Eb,Db=Cb,sb=rb,Ua=uV,tb=qV,Gb=tV,ad=uV,Nb=Ob,Lb=Mb,Eb=Fb,Cb=Db,rb=sb,x9=583;continue b;case 21:if(vV=Ua>>>23,wV=511&vV,xV=wV+1|0,yV=tb+(xV<<3)|0,zV=Ua>>>7,AV=65535&zV,BV=Cb+(AV<<2)|0,CV=0|f[BV>>2],EV=tb+(wV<<3)|0,r=0,f[Vb>>2]=0|f[yV>>2],f[Vb+4>>2]=0|f[yV+4>>2],f[Wb>>2]=0|f[EV>>2],f[Wb+4>>2]=0|f[EV+4>>2],ya(160,0|b,0|Vb,0|CV,0|Wb),FV=r,r=0,0!=(0|FV)&0!=(0|s)?(GV=0|Rw(0|f[FV>>2],0|v9,0|w9),0==(0|GV)&&Aa(0|FV,0|s),G=s):GV=-1,HV=G,1==(0|GV)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=HV,Ca=Da,za=Ba;continue a}IV=Gb+4|0,JV=0|f[IV>>2],Ob=Nb,Mb=Lb,Fb=Eb,Db=Cb,ub=tb,sb=rb,Ua=JV,Gb=IV,ad=JV,Nb=Ob,Lb=Mb,Eb=Fb,Cb=Db,tb=ub,rb=sb,x9=583;continue b;case 22:if(KV=Ua>>>23,LV=511&KV,MV=tb+(LV<<3)|0,NV=Ua>>>7,PV=127&NV,r=0,QV=0|xa(161,0|b,0|PV),RV=r,r=0,0!=(0|RV)&0!=(0|s)?(SV=0|Rw(0|f[RV>>2],0|v9,0|w9),0==(0|SV)&&Aa(0|RV,0|s),G=s):SV=-1,TV=G,1==(0|SV)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=TV,Ca=Da,za=Ba;continue a}if(0!=(0|QV))YV=Ua>>>14,$V=511&YV,_V=QV+12|0,aW=0|f[_V>>2],bW=aW+($V<<3)|0,f[MV>>2]=0|f[bW>>2],f[MV+4>>2]=0|f[bW+4>>2];else{if(r=0,ra(162,0|El),VV=r,r=0,0!=(0|VV)&0!=(0|s)?(WV=0|Rw(0|f[VV>>2],0|v9,0|w9),0==(0|WV)&&Aa(0|VV,0|s),G=s):WV=-1,XV=G,1==(0|WV)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=XV,Ca=Da,za=Ba;continue a}f[MV>>2]=0|f[El>>2],f[MV+4>>2]=0|f[El+4>>2]}cW=Gb+4|0,dW=0|f[cW>>2],Ob=Nb,Mb=Lb,Fb=Eb,Db=Cb,ub=tb,sb=rb,Ua=dW,Gb=cW,ad=dW,Nb=Ob,Lb=Mb,Eb=Fb,Cb=Db,tb=ub,rb=sb,x9=583;continue b;case 23:if(eW=Ua>>>7,fW=127&eW,r=0,gW=0|xa(161,0|b,0|fW),hW=r,r=0,0!=(0|hW)&0!=(0|s)?(jW=0|Rw(0|f[hW>>2],0|v9,0|w9),0==(0|jW)&&Aa(0|hW,0|s),G=s):jW=-1,kW=G,1==(0|jW)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=kW,Ca=Da,za=Ba;continue a}if(0!=(0|gW)&&(mW=Ua>>>23,nW=511&mW,oW=tb+(nW<<3)|0,pW=Ua>>>14,qW=511&pW,rW=gW+12|0,sW=0|f[rW>>2],uW=sW+(qW<<3)|0,f[uW>>2]=0|f[oW>>2],f[uW+4>>2]=0|f[oW+4>>2],r=0,sa(163,0|b,0|gW),vW=r,r=0,0!=(0|vW)&0!=(0|s)?(wW=0|Rw(0|f[vW>>2],0|v9,0|w9),0==(0|wW)&&Aa(0|vW,0|s),G=s):wW=-1,xW=G,1==(0|wW))){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=xW,Ca=Da,za=Ba;continue a}yW=Gb+4|0,zW=0|f[yW>>2],Ob=Nb,Mb=Lb,Fb=Eb,Db=Cb,ub=tb,sb=rb,Ua=zW,Gb=yW,ad=zW,Nb=Ob,Lb=Mb,Eb=Fb,Cb=Db,tb=ub,rb=sb,x9=583;continue b;case 24:AW=Ua>>>7,BW=65535&AW,CW=BW-32767|0,DW=Gb+(CW<<2)|0,FW=0|f[DW>>2],Ob=Nb,Mb=Lb,Fb=Eb,Db=Cb,ub=tb,sb=rb,Ua=FW,Gb=DW,ad=FW,Nb=Ob,Lb=Mb,Eb=Fb,Cb=Db,tb=ub,rb=sb,x9=583;continue b;case 25:if(GW=Ua>>>23,HW=511&GW,IW=tb+(HW<<3)|0,JW=IW+4|0,KW=0|f[JW>>2],0!=(0|KW)){MW=Ua>>>7,NW=65535&MW,OW=NW-32767|0,QW=Gb+(OW<<2)|0,RW=0|f[QW>>2],Ob=Nb,Mb=Lb,Fb=Eb,Db=Cb,ub=tb,sb=rb,Ua=RW,Gb=QW,ad=RW,Nb=Ob,Lb=Mb,Eb=Fb,Cb=Db,tb=ub,rb=sb,x9=583;continue b}SW=Gb+4|0,TW=0|f[SW>>2],Ob=Nb,Mb=Lb,Fb=Eb,Db=Cb,ub=tb,sb=rb,Ua=TW,Gb=SW,ad=TW,Nb=Ob,Lb=Mb,Eb=Fb,Cb=Db,tb=ub,rb=sb,x9=583;continue b;case 26:if(UW=Ua>>>23,VW=511&UW,WW=tb+(VW<<3)|0,XW=WW+4|0,YW=0|f[XW>>2],0!=(0|YW)){eX=Gb+4|0,fX=0|f[eX>>2],Ob=Nb,Mb=Lb,Fb=Eb,Db=Cb,ub=tb,sb=rb,Ua=fX,Gb=eX,ad=fX,Nb=Ob,Lb=Mb,Eb=Fb,Cb=Db,tb=ub,rb=sb,x9=583;continue b}_W=Ua>>>7,aX=65535&_W,bX=aX-32767|0,cX=Gb+(bX<<2)|0,dX=0|f[cX>>2],Ob=Nb,Mb=Lb,Fb=Eb,Db=Cb,ub=tb,sb=rb,Ua=dX,Gb=cX,ad=dX,Nb=Ob,Lb=Mb,Eb=Fb,Cb=Db,tb=ub,rb=sb,x9=583;continue b;case 27:if(gX=b+12|0,hX=0|f[gX>>2],iX=hX+32|0,kX=0|f[iX>>2],lX=b+12|0,mX=0|f[lX>>2],nX=mX+16|0,oX=0|f[nX>>2],pX=oX+16|0,qX=0|f[pX>>2],(0|kX)<=(0|qX)){if(sX=b+12|0,tX=0|f[sX>>2],vX=tX+32|0,wX=0|f[vX>>2],xX=0==(0|wX),yX=b+12|0,zX=0|f[yX>>2],AX=zX+32|0,xX?fd=16:(BX=0|f[AX>>2],CX=BX<<1,fd=CX),f[AX>>2]=fd,DX=b+12|0,EX=0|f[DX>>2],GX=EX+28|0,HX=0|f[GX>>2],IX=b+12|0,JX=0|f[IX>>2],KX=JX+32|0,LX=0|f[KX>>2],MX=LX<<2,r=0,NX=0|oa(164,0|b,0|HX,0|MX),OX=r,r=0,0!=(0|OX)&0!=(0|s)?(PX=0|Rw(0|f[OX>>2],0|v9,0|w9),0==(0|PX)&&Aa(0|OX,0|s),G=s):PX=-1,RX=G,1==(0|PX)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=RX,Ca=Da,za=Ba;continue a}SX=b+12|0,TX=0|f[SX>>2],UX=TX+28|0,f[UX>>2]=NX}VX=Ua>>>7,WX=65535&VX,XX=WX-32767|0,YX=Gb+(XX<<2)|0,ZX=b+12|0,$X=0|f[ZX>>2],bY=$X+28|0,cY=0|f[bY>>2],dY=b+12|0,eY=0|f[dY>>2],fY=eY+16|0,gY=0|f[fY>>2],hY=gY+16|0,iY=0|f[hY>>2],jY=iY+1|0,f[hY>>2]=jY,kY=cY+(iY<<2)|0,f[kY>>2]=YX,mY=Gb+4|0,nY=0|f[mY>>2],Ob=Nb,Mb=Lb,Fb=Eb,Db=Cb,ub=tb,sb=rb,Ua=nY,Gb=mY,ad=nY,Nb=Ob,Lb=Mb,Eb=Fb,Cb=Db,tb=ub,rb=sb,x9=583;continue b;case 28:oY=b+20|0,pY=0|f[oY>>2],qY=0|f[pY>>2],rY=255&qY,sY=Ua>>>23,tY=511&sY,uY=tb+(tY<<3)|0,vY=uY+4|0,f[vY>>2]=rY,xY=b+20|0,yY=0|f[xY>>2],zY=Ua>>>23,AY=511&zY,BY=tb+(AY<<3)|0,f[BY>>2]=yY,CY=b+20|0,f[CY>>2]=0,DY=Gb+4|0,EY=0|f[DY>>2],Ob=Nb,Mb=Lb,Fb=Eb,Db=Cb,ub=tb,sb=rb,Ua=EY,Gb=DY,ad=EY,Nb=Ob,Lb=Mb,Eb=Fb,Cb=Db,tb=ub,rb=sb,x9=583;continue b;case 29:for(FY=Ua>>>23,GY=511&FY,W=GY;;){if(IY=W+-1|0,!(0!=(0|W)))break;KY=b+12|0,LY=0|f[KY>>2],MY=LY+16|0,NY=0|f[MY>>2],OY=NY+16|0,PY=0|f[OY>>2],QY=PY+-1|0,f[OY>>2]=QY,W=IY}RY=Gb+4|0,TY=0|f[RY>>2],Ob=Nb,Mb=Lb,Fb=Eb,Db=Cb,ub=tb,sb=rb,Ua=TY,Gb=RY,ad=TY,Nb=Ob,Lb=Mb,Eb=Fb,Cb=Db,tb=ub,rb=sb,x9=583;continue b;case 30:UY=Ua>>>23,VY=511&UY,WY=tb+(VY<<3)|0,XY=0|f[WY>>2],YY=b+20|0,f[YY>>2]=XY,Sa=rb,Va=tb,cb=Cb,eb=Eb,gb=Gb,yb=Lb,Ab=Nb,x9=272;continue b;case 31:if(ZY=Lb+20|0,$Y=0|f[ZY>>2],_Y=Ua>>>7,aZ=65535&_Y,cZ=$Y+(aZ<<2)|0,dZ=0|f[cZ>>2],r=0,eZ=0|xa(165,0|b,0|dZ),fZ=r,r=0,0!=(0|fZ)&0!=(0|s)?(gZ=0|Rw(0|f[fZ>>2],0|v9,0|w9),0==(0|gZ)&&Aa(0|fZ,0|s),G=s):gZ=-1,hZ=G,1==(0|gZ)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=hZ,Ca=Da,za=Ba;continue a}if(iZ=b+12|0,jZ=0|f[iZ>>2],kZ=jZ+40|0,lZ=0|f[kZ>>2],nZ=b+12|0,oZ=0|f[nZ>>2],pZ=oZ+16|0,qZ=0|f[pZ>>2],rZ=qZ+20|0,sZ=0|f[rZ>>2],(0|lZ)<=(0|sZ)){if(uZ=b+12|0,vZ=0|f[uZ>>2],wZ=vZ+40|0,yZ=0|f[wZ>>2],zZ=0==(0|yZ),AZ=b+12|0,BZ=0|f[AZ>>2],CZ=BZ+40|0,zZ?jd=16:(DZ=0|f[CZ>>2],EZ=DZ<<1,jd=EZ),f[CZ>>2]=jd,FZ=b+12|0,GZ=0|f[FZ>>2],HZ=GZ+36|0,JZ=0|f[HZ>>2],KZ=b+12|0,LZ=0|f[KZ>>2],MZ=LZ+40|0,NZ=0|f[MZ>>2],OZ=NZ<<2,r=0,PZ=0|oa(164,0|b,0|JZ,0|OZ),QZ=r,r=0,0!=(0|QZ)&0!=(0|s)?(RZ=0|Rw(0|f[QZ>>2],0|v9,0|w9),0==(0|RZ)&&Aa(0|QZ,0|s),G=s):RZ=-1,SZ=G,1==(0|RZ)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=SZ,Ca=Da,za=Ba;continue a}UZ=b+12|0,VZ=0|f[UZ>>2],WZ=VZ+36|0,f[WZ>>2]=PZ}XZ=b+12|0,YZ=0|f[XZ>>2],ZZ=YZ+36|0,$Z=0|f[ZZ>>2],_Z=b+12|0,a$=0|f[_Z>>2],b$=a$+16|0,e$=0|f[b$>>2],f$=e$+20|0,g$=0|f[f$>>2],h$=g$+1|0,f[f$>>2]=h$,i$=$Z+(g$<<2)|0,f[i$>>2]=eZ,j$=b+92|0,k$=j$+416|0,f[k$>>2]=Ca,l$=Gb+4|0,m$=0|f[l$>>2],Ob=Nb,Mb=Lb,Fb=Eb,Db=Cb,ub=tb,sb=rb,Ua=m$,Gb=l$,ad=m$,Nb=Ob,Lb=Mb,Eb=Fb,Cb=Db,tb=ub,rb=sb,x9=583;continue b;case 32:for(n$=Ua>>>23,p$=511&n$,q$=b+12|0,r$=0|f[q$>>2],s$=r$+16|0,t$=0|f[s$>>2],u$=t$+20|0,v$=0|f[u$>>2],U=v$,V=0;;){if(!((0|V)<(0|p$)))break;if(x$=b+12|0,y$=0|f[x$>>2],A$=y$+20|0,B$=0|f[A$>>2],!((0|t$)==(0|B$)||(D$=t$+-48|0,E$=D$+20|0,F$=0|f[E$>>2],(0|U)>(0|F$))))break;if(H$=U+-1|0,r=0,sa(166,0|b,0|H$),I$=r,r=0,0!=(0|I$)&0!=(0|s)?(J$=0|Rw(0|f[I$>>2],0|v9,0|w9),0==(0|J$)&&Aa(0|I$,0|s),G=s):J$=-1,L$=G,1==(0|J$)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=L$,Ca=Da,za=Ba;continue a}M$=b+92|0,N$=M$+416|0,f[N$>>2]=Ca,O$=V+1|0,U=H$,V=O$}P$=Gb+4|0,Q$=0|f[P$>>2],Ob=Nb,Mb=Lb,Fb=Eb,Db=Cb,ub=tb,sb=rb,Ua=Q$,Gb=P$,ad=Q$,Nb=Ob,Lb=Mb,Eb=Fb,Cb=Db,tb=ub,rb=sb,x9=583;continue b;case 33:$=Ua,x9=90;break;case 34:if(BT=Ua>>>7,CT=65535&BT,DT=Eb+(CT<<3)|0,r=0,f[Tc>>2]=0|f[DT>>2],f[Tc+4>>2]=0|f[DT+4>>2],ua(191,0|k3,0|b,0|Tc),ET=r,r=0,0!=(0|ET)&0!=(0|s)?(FT=0|Rw(0|f[ET>>2],0|v9,0|w9),0==(0|FT)&&Aa(0|ET,0|s),G=s):FT=-1,HT=G,1==(0|FT)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=HT,Ca=Da,za=Ba;continue a}if(IT=Ua>>>23,JT=511&IT,0==(0|JT)){if(r=0,LT=0|xa(135,0|b,68266),MT=r,r=0,0!=(0|MT)&0!=(0|s)?(NT=0|Rw(0|f[MT>>2],0|v9,0|w9),0==(0|NT)&&Aa(0|MT,0|s),G=s):NT=-1,OT=G,1==(0|NT)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=OT,Ca=Da,za=Ba;continue a}if(r=0,f[Uc>>2]=0|f[k3>>2],f[Uc+4>>2]=0|f[k3+4>>2],ya(172,0|G3,0|b,0|LT,0|Uc),PT=r,r=0,0!=(0|PT)&0!=(0|s)?(QT=0|Rw(0|f[PT>>2],0|v9,0|w9),0==(0|QT)&&Aa(0|PT,0|s),G=s):QT=-1,ST=G,1==(0|QT)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=ST,Ca=Da,za=Ba;continue a}f[v3>>2]=0|f[G3>>2],f[v3+4>>2]=0|f[G3+4>>2]}else{if(r=0,TT=0|xa(135,0|b,56833),UT=r,r=0,0!=(0|UT)&0!=(0|s)?(VT=0|Rw(0|f[UT>>2],0|v9,0|w9),0==(0|VT)&&Aa(0|UT,0|s),G=s):VT=-1,WT=G,1==(0|VT)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=WT,Ca=Da,za=Ba;continue a}if(r=0,f[Vc>>2]=0|f[k3>>2],f[Vc+4>>2]=0|f[k3+4>>2],ya(172,0|R3,0|b,0|TT,0|Vc),XT=r,r=0,0!=(0|XT)&0!=(0|s)?(YT=0|Rw(0|f[XT>>2],0|v9,0|w9),0==(0|YT)&&Aa(0|XT,0|s),G=s):YT=-1,ZT=G,1==(0|YT)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=ZT,Ca=Da,za=Ba;continue a}f[v3>>2]=0|f[R3>>2],f[v3+4>>2]=0|f[R3+4>>2]}$T=0|f[v3>>2],_T=b+20|0,f[_T>>2]=$T,Sa=rb,Va=tb,cb=Cb,eb=Eb,gb=Gb,yb=Lb,Ab=Nb,x9=272;continue b;case 35:V2=Gb+4|0,W2=0|f[V2>>2],Ob=Nb,Mb=Lb,Fb=Eb,Db=Cb,ub=tb,sb=rb,Ua=W2,Gb=V2,ad=W2,Nb=Ob,Lb=Mb,Eb=Fb,Cb=Db,tb=ub,rb=sb,x9=583;continue b;case 36:if(X2=b+12|0,Y2=0|f[X2>>2],Z2=Y2+4|0,$2=0|f[Z2>>2],f[jE>>2]=0|f[$2>>2],f[jE+4>>2]=0|f[$2+4>>2],a3=0|f[jE>>2],b3=b+12|0,c3=0|f[b3>>2],d3=c3+16|0,e3=0|f[d3>>2],f3=a3+16|0,g3=0|f[f3>>2],h3=e3+44|0,f[h3>>2]=g3,i3=e3+4|0,f[i3>>2]=a3,j3=a3+20|0,l3=0|f[j3>>2],m3=0!=(0|l3),m3&&(n3=a3+20|0,o3=0|f[n3>>2],p3=o3+16|0,q3=0|f[p3>>2],r3=0!=(0|q3),r3&&(s3=a3+20|0,t3=0|f[s3>>2],u3=t3+16|0,w3=0|f[u3>>2],f[e3>>2]=w3),x3=a3+20|0,y3=0|f[x3>>2],z3=y3+12|0,A3=0|f[z3>>2],0!=(0|A3)||(C3=b+12|0,D3=0|f[C3>>2],E3=D3+4|0,F3=0|f[E3>>2],H3=a3+20|0,I3=0|f[H3>>2],J3=I3+12|0,f[J3>>2]=F3)),K3=0|f[a3>>2],L3=K3>>>11,M3=128&L3,0!=(0|M3)){if(O3=a3+12|0,P3=0|f[O3>>2],r=0,f[bc>>2]=0|f[jE>>2],f[bc+4>>2]=0|f[jE+4>>2],ua(0|P3,0|mG,0|b,0|bc),Q3=r,r=0,0!=(0|Q3)&0!=(0|s)?(S3=0|Rw(0|f[Q3>>2],0|v9,0|w9),0==(0|S3)&&Aa(0|Q3,0|s),G=s):S3=-1,T3=G,1==(0|S3)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=T3,Ca=Da,za=Ba;continue a}if(f[jE>>2]=0|f[mG>>2],f[jE+4>>2]=0|f[mG+4>>2],r=0,sa(146,0|b,0|Ca),U3=r,r=0,0!=(0|U3)&0!=(0|s)?(V3=0|Rw(0|f[U3>>2],0|v9,0|w9),0==(0|V3)&&Aa(0|U3,0|s),G=s):V3=-1,W3=G,1==(0|V3)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=W3,Ca=Da,za=Ba;continue a}if(X3=b+20|0,Y3=0|f[X3>>2],0!=(0|Y3)){Sa=rb,Va=tb,cb=Cb,eb=Eb,gb=Gb,yb=Lb,Ab=Nb,x9=272;continue b}if($3=b+12|0,_3=0|f[$3>>2],b4=_3+16|0,c4=0|f[b4>>2],d4=c4+8|0,e4=0|f[d4>>2],f4=b+12|0,g4=0|f[f4>>2],h4=g4+4|0,f[h4>>2]=e4,i4=c4+40|0,j4=0|f[i4>>2],k4=e4+(j4<<3)|0,f[k4>>2]=0|f[jE>>2],f[k4+4>>2]=0|f[jE+4>>2],n4=c4+28|0,o4=0|f[n4>>2],r=0,ra(132,0|b),p4=r,r=0,0!=(0|p4)&0!=(0|s)?(q4=0|Rw(0|f[p4>>2],0|v9,0|w9),0==(0|q4)&&Aa(0|p4,0|s),G=s):q4=-1,r4=G,1==(0|q4)){Da=Ca,Ba=za,na=rb,Fa=e4,Ha=Cb,Ja=Eb,La=o4,Na=Lb,Pa=Nb,Xc=r4,Ca=Da,za=Ba;continue a}s4=b+12|0,t4=0|f[s4>>2],u4=t4+16|0,v4=0|f[u4>>2],w4=v4+4|0,y4=0|f[w4>>2],z4=y4+12|0,A4=0|f[z4>>2],B4=A4+12|0,C4=0|f[B4>>2],D4=A4+16|0,E4=0|f[D4>>2],F4=0|f[o4>>2],Ob=Nb,sb=rb,Ua=F4,tb=e4,Cb=E4,Eb=C4,Gb=o4,Lb=A4,ad=F4,Nb=Ob,rb=sb,x9=583;continue b}if(G4=a3+12|0,H4=0|f[G4>>2],!(0!=(0|H4))){if(K4=b+12|0,L4=0|f[K4>>2],M4=L4+4|0,N4=0|f[M4>>2],r=0,ra(162,0|pI),O4=r,r=0,0!=(0|O4)&0!=(0|s)?(P4=0|Rw(0|f[O4>>2],0|v9,0|w9),0==(0|P4)&&Aa(0|O4,0|s),G=s):P4=-1,Q4=G,1==(0|P4)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=H4,Pa=a3,Xc=Q4,Ca=Da,za=Ba;continue a}f[N4>>2]=0|f[pI>>2],f[N4+4>>2]=0|f[pI+4>>2],ib=H4,jb=a3,x9=270;break c}if(R4=H4+12|0,S4=0|f[R4>>2],U4=H4+16|0,V4=0|f[U4>>2],W4=H4+2|0,X4=0|e[W4>>1],Y4=65535&X4,Z4=e3+12|0,f[Z4>>2]=Y4,$4=e3+36|0,_4=0|f[$4>>2],a5=(0|_4)<0,b5=H4+2|0,d5=0|e[b5>>1],e5=65535&d5,a5){if(f5=(0|e5)<3,f5?_c=3:(g5=H4+2|0,h5=0|e[g5>>1],i5=65535&h5,_c=i5),r=0,ua(142,0|b,0|_c,3),j5=r,r=0,0!=(0|j5)&0!=(0|s)?(k5=0|Rw(0|f[j5>>2],0|v9,0|w9),0==(0|k5)&&Aa(0|j5,0|s),G=s):k5=-1,l5=G,1==(0|k5)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=V4,Ja=S4,La=Gb,Na=H4,Pa=a3,Xc=l5,Ca=Da,za=Ba;continue a}}else if(m5=e3+36|0,o5=0|f[m5>>2],p5=o5+2|0,r=0,ua(142,0|b,0|e5,0|p5),q5=r,r=0,0!=(0|q5)&0!=(0|s)?(r5=0|Rw(0|f[q5>>2],0|v9,0|w9),0==(0|r5)&&Aa(0|q5,0|s),G=s):r5=-1,s5=G,1==(0|r5)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=V4,Ja=S4,La=Gb,Na=H4,Pa=a3,Xc=s5,Ca=Da,za=Ba;continue a}t5=b+12|0,u5=0|f[t5>>2],v5=u5+4|0,w5=0|f[v5>>2],x5=a3+20|0,z5=0|f[x5>>2],A5=z5+12|0,B5=0|f[A5>>2],f[w5>>2]=0|f[B5>>2],f[w5+4>>2]=0|f[B5+4>>2],C5=H4+8|0,D5=0|f[C5>>2],E5=0|f[D5>>2],sb=rb,Ua=E5,tb=w5,Cb=V4,Eb=S4,Gb=D5,Lb=H4,Nb=a3,ad=E5,rb=sb,x9=583;continue b;case 37:if(F5=b+12|0,G5=0|f[F5>>2],H5=G5+16|0,I5=0|f[H5>>2],K5=0|f[I5>>2],L5=Ua>>>23,M5=511&L5,N5=Ua>>>7,O5=127&N5,0==(0|K5)){if(r=0,Q5=0|xa(135,0|b,67968),R5=r,r=0,0!=(0|R5)&0!=(0|s)?(S5=0|Rw(0|f[R5>>2],0|v9,0|w9),0==(0|S5)&&Aa(0|R5,0|s),G=s):S5=-1,T5=G,1==(0|S5)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=T5,Ca=Da,za=Ba;continue a}if(r=0,ya(171,0|BQ,0|b,56724,30),V5=r,r=0,0!=(0|V5)&0!=(0|s)?(W5=0|Rw(0|f[V5>>2],0|v9,0|w9),0==(0|W5)&&Aa(0|V5,0|s),G=s):W5=-1,X5=G,1==(0|W5)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=X5,Ca=Da,za=Ba;continue a}if(r=0,f[cc>>2]=0|f[BQ>>2],f[cc+4>>2]=0|f[BQ+4>>2],ya(172,0|ES,0|b,0|Q5,0|cc),Y5=r,r=0,0!=(0|Y5)&0!=(0|s)?(Z5=0|Rw(0|f[Y5>>2],0|v9,0|w9),0==(0|Z5)&&Aa(0|Y5,0|s),G=s):Z5=-1,$5=G,1==(0|Z5)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=$5,Ca=Da,za=Ba;continue a}f[yO>>2]=0|f[ES>>2],f[yO+4>>2]=0|f[ES+4>>2],_5=0|f[yO>>2],a6=b+20|0,f[a6>>2]=_5,Sa=rb,Va=tb,cb=Cb,eb=Eb,gb=Gb,yb=Lb,Ab=Nb,x9=272;continue b}if(f[sK>>2]=0|f[tb>>2],f[sK+4>>2]=0|f[tb+4>>2],b6=b+12|0,c6=0|f[b6>>2],e6=c6+16|0,f6=0|f[e6>>2],g6=f6+44|0,h6=0|f[g6>>2],i6=h6+20|0,j6=0|f[i6>>2],f[vM>>2]=j6,r=0,k6=0|oa(139,0|b,0|vM,0|K5),l6=r,r=0,0!=(0|l6)&0!=(0|s)?(m6=0|Rw(0|f[l6>>2],0|v9,0|w9),0==(0|m6)&&Aa(0|l6,0|s),G=s):m6=-1,n6=G,1==(0|m6)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=n6,Ca=Da,za=Ba;continue a}td=0!=(0|k6);do{if(td)O=O5,P=K5,Q=k6;else{if(r=0,ud=0|oa(140,0|b,65621,14),vd=r,r=0,0!=(0|vd)&0!=(0|s)?(wd=0|Rw(0|f[vd>>2],0|v9,0|w9),0==(0|wd)&&Aa(0|vd,0|s),G=s):wd=-1,xd=G,1==(0|wd)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=xd,Ca=Da,za=Ba;continue a}if(r=0,yd=0|oa(139,0|b,0|vM,0|ud),zd=r,r=0,0!=(0|zd)&0!=(0|s)?(Ad=0|Rw(0|f[zd>>2],0|v9,0|w9),0==(0|Ad)&&Aa(0|zd,0|s),G=s):Ad=-1,Bd=G,1==(0|Ad)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=Bd,Ca=Da,za=Ba;continue a}if(!(127==(0|O5))){if(Nd=tb+(M5<<3)|0,Pd=Nd+16|0,Qd=tb+(M5<<3)|0,Rd=Qd+8|0,Sd=O5+1|0,r=0,ua(170,0|Pd,0|Rd,0|Sd),Td=r,r=0,0!=(0|Td)&0!=(0|s)?(Ud=0|Rw(0|f[Td>>2],0|v9,0|w9),0==(0|Ud)&&Aa(0|Td,0|s),G=s):Ud=-1,Vd=G,1==(0|Ud)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=Vd,Ca=Da,za=Ba;continue a}Wd=M5+1|0,Xd=tb+(Wd<<3)|0,Yd=Xd+4|0,f[Yd>>2]=4,$d=0|f[I5>>2],_d=M5+1|0,ae=tb+(_d<<3)|0,f[ae>>2]=$d,O=Sd,P=ud,Q=yd;break}if(Ed=M5+1|0,Fd=tb+(Ed<<3)|0,Gd=0|f[I5>>2],r=0,sa(143,0|gU,0|Gd),Hd=r,r=0,0!=(0|Hd)&0!=(0|s)?(Id=0|Rw(0|f[Hd>>2],0|v9,0|w9),0==(0|Id)&&Aa(0|Hd,0|s),G=s):Id=-1,Jd=G,1==(0|Id)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=Jd,Ca=Da,za=Ba;continue a}if(r=0,f[dc>>2]=0|f[Fd>>2],f[dc+4>>2]=0|f[Fd+4>>2],f[ec>>2]=0|f[gU>>2],f[ec+4>>2]=0|f[gU+4>>2],ya(169,0|rU,0|b,0|dc,0|ec),Kd=r,r=0,0!=(0|Kd)&0!=(0|s)?(Ld=0|Rw(0|f[Kd>>2],0|v9,0|w9),0==(0|Ld)&&Aa(0|Kd,0|s),G=s):Ld=-1,Md=G,1==(0|Ld)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=Md,Ca=Da,za=Ba;continue a}O=O5,P=ud,Q=yd}}while(0);if(r=0,be=0|ta(141,0|b),ce=r,r=0,0!=(0|ce)&0!=(0|s)?(de=0|Rw(0|f[ce>>2],0|v9,0|w9),0==(0|de)&&Aa(0|ce,0|s),G=s):de=-1,ee=G,1==(0|de)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=ee,Ca=Da,za=Ba;continue a}if(f[be>>2]=P,fe=be+4|0,f[fe>>2]=Q,ge=b+12|0,he=0|f[ge>>2],je=he+4|0,ke=0|f[je>>2],le=be+8|0,f[le>>2]=ke,me=127==(0|O),bd=be,qd=me?-1:O,ne=bd+36|0,f[ne>>2]=qd,oe=0|f[vM>>2],pe=be+44|0,f[pe>>2]=oe,qe=Gb+4|0,re=be+28|0,f[re>>2]=qe,se=b+12|0,ue=0|f[se>>2],ve=ue+4|0,we=0|f[ve>>2],xe=we+(M5<<3)|0,f[ve>>2]=xe,ye=b+12|0,ze=0|f[ye>>2],Ae=ze+4|0,Be=0|f[Ae>>2],f[Be>>2]=0|f[sK>>2],f[Be+4>>2]=0|f[sK+4>>2],Ce=0|f[Q>>2],De=Ce>>>11,Fe=128&De,0!=(0|Fe)){if(He=127==(0|O),He?cd=3:(Ie=O+2|0,cd=Ie),Je=be+12|0,f[Je>>2]=cd,Ke=b+12|0,Le=0|f[Ke>>2],Me=Le+4|0,Ne=0|f[Me>>2],Oe=Q+12|0,Qe=0|f[Oe>>2],r=0,f[fc>>2]=0|f[sK>>2],f[fc+4>>2]=0|f[sK+4>>2],ua(0|Qe,0|CU,0|b,0|fc),Re=r,r=0,0!=(0|Re)&0!=(0|s)?(Se=0|Rw(0|f[Re>>2],0|v9,0|w9),0==(0|Se)&&Aa(0|Re,0|s),G=s):Se=-1,Te=G,1==(0|Se)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=Te,Ca=Da,za=Ba;continue a}if(f[Ne>>2]=0|f[CU>>2],f[Ne+4>>2]=0|f[CU+4>>2],r=0,sa(146,0|b,0|Ca),Ue=r,r=0,0!=(0|Ue)&0!=(0|s)?(Ve=0|Rw(0|f[Ue>>2],0|v9,0|w9),0==(0|Ve)&&Aa(0|Ue,0|s),G=s):Ve=-1,We=G,1==(0|Ve)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=We,Ca=Da,za=Ba;continue a}if(Xe=b+20|0,Ye=0|f[Xe>>2],0!=(0|Ye)){Sa=rb,Va=tb,cb=Cb,eb=Eb,gb=Gb,yb=Lb,Ab=Nb,x9=272;continue b}if(_e=b+12|0,af=0|f[_e>>2],bf=af+16|0,cf=0|f[bf>>2],df=cf+8|0,ef=0|f[df>>2],ff=b+12|0,gf=0|f[ff>>2],hf=gf+4|0,f[hf>>2]=ef,r=0,ra(132,0|b),jf=r,r=0,0!=(0|jf)&0!=(0|s)?(lf=0|Rw(0|f[jf>>2],0|v9,0|w9),0==(0|lf)&&Aa(0|jf,0|s),G=s):lf=-1,mf=G,1==(0|lf)){Da=Ca,Ba=za,na=rb,Fa=ef,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=mf,Ca=Da,za=Ba;continue a}nf=Gb+4|0,of=0|f[nf>>2],Ob=Nb,Mb=Lb,Fb=Eb,Db=Cb,sb=rb,Ua=of,tb=ef,Gb=nf,ad=of,Nb=Ob,Lb=Mb,Eb=Fb,Cb=Db,rb=sb,x9=583;continue b}if(pf=be+40|0,f[pf>>2]=M5,qf=be+4|0,f[qf>>2]=Q,rf=Q+12|0,sf=0|f[rf>>2],tf=sf+12|0,uf=0|f[tf>>2],xf=sf+16|0,yf=0|f[xf>>2],zf=sf+2|0,Af=0|e[zf>>1],Bf=65535&Af,Cf=be+12|0,f[Cf>>2]=Bf,Df=127==(0|O),Ef=sf+2|0,Ff=0|e[Ef>>1],Gf=65535&Ff,Df){if(If=(0|Gf)<3,If?$c=3:(Jf=sf+2|0,Kf=0|e[Jf>>1],Lf=65535&Kf,$c=Lf),r=0,ua(142,0|b,0|$c,3),Mf=r,r=0,0!=(0|Mf)&0!=(0|s)?(Nf=0|Rw(0|f[Mf>>2],0|v9,0|w9),0==(0|Nf)&&Aa(0|Mf,0|s),G=s):Nf=-1,Of=G,1==(0|Nf)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=yf,Ja=uf,La=Gb,Na=sf,Pa=Nb,Xc=Of,Ca=Da,za=Ba;continue a}}else if(Pf=be+36|0,Qf=0|f[Pf>>2],Rf=Qf+2|0,r=0,ua(142,0|b,0|Gf,0|Rf),Tf=r,r=0,0!=(0|Tf)&0!=(0|s)?(Uf=0|Rw(0|f[Tf>>2],0|v9,0|w9),0==(0|Uf)&&Aa(0|Tf,0|s),G=s):Uf=-1,Vf=G,1==(0|Uf)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=yf,Ja=uf,La=Gb,Na=sf,Pa=Nb,Xc=Vf,Ca=Da,za=Ba;continue a}Wf=b+12|0,Xf=0|f[Wf>>2],Yf=Xf+4|0,Zf=0|f[Yf>>2],$f=sf+8|0,_f=0|f[$f>>2],ag=0|f[_f>>2],Ob=Nb,sb=rb,Ua=ag,tb=Zf,Cb=yf,Eb=uf,Gb=_f,Lb=sf,ad=ag,Nb=Ob,rb=sb,x9=583;continue b;case 38:cg=Ua>>>23,dg=511&cg,eg=Ua>>>7,fg=65535&eg,gg=fg>>10,hg=63&gg,ig=fg>>9,jg=1&ig,kg=fg>>4,lg=31&kg,ng=fg>>0,og=15&ng,pg=0==(0|og);do{if(!pg){if(rg=og-1|0,r=0,sg=0|xa(161,0|b,0|rg),tg=r,r=0,0!=(0|tg)&0!=(0|s)?(ug=0|Rw(0|f[tg>>2],0|v9,0|w9),0==(0|ug)&&Aa(0|tg,0|s),G=s):ug=-1,vg=G,1==(0|ug)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=vg,Ca=Da,za=Ba;continue a}if(0!=(0|sg)){Lg=sg+12|0,Mg=0|f[Lg>>2],Ng=Mg+8|0,N=Ng;break}if(r=0,yg=0|xa(135,0|b,67968),zg=r,r=0,0!=(0|zg)&0!=(0|s)?(Ag=0|Rw(0|f[zg>>2],0|v9,0|w9),0==(0|Ag)&&Aa(0|zg,0|s),G=s):Ag=-1,Bg=G,1==(0|Ag)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=Bg,Ca=Da,za=Ba;continue a}if(r=0,ya(171,0|YU,0|b,56724,30),Cg=r,r=0,0!=(0|Cg)&0!=(0|s)?(Dg=0|Rw(0|f[Cg>>2],0|v9,0|w9),0==(0|Dg)&&Aa(0|Cg,0|s),G=s):Dg=-1,Eg=G,1==(0|Dg)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=Eg,Ca=Da,za=Ba;continue a}if(r=0,f[gc>>2]=0|f[YU>>2],f[gc+4>>2]=0|f[YU+4>>2],ya(172,0|hV,0|b,0|yg,0|gc),Fg=r,r=0,0!=(0|Fg)&0!=(0|s)?(Gg=0|Rw(0|f[Fg>>2],0|v9,0|w9),0==(0|Gg)&&Aa(0|Fg,0|s),G=s):Gg=-1,Hg=G,1==(0|Gg)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=Hg,Ca=Da,za=Ba;continue a}f[NU>>2]=0|f[hV>>2],f[NU+4>>2]=0|f[hV+4>>2],Jg=0|f[NU>>2],Kg=b+20|0,f[Kg>>2]=Jg,Sa=rb,Va=tb,cb=Cb,eb=Eb,gb=Gb,yb=Lb,Ab=Nb,x9=272;continue b}qg=tb+8|0,N=qg}while(0);if(0==(0|jg)){if(Pg=tb+(dg<<3)|0,Qg=hg+lg|0,r=0,ya(167,0|sV,0|b,0|Qg,0|N),Rg=r,r=0,0!=(0|Rg)&0!=(0|s)?(Sg=0|Rw(0|f[Rg>>2],0|v9,0|w9),0==(0|Sg)&&Aa(0|Rg,0|s),G=s):Sg=-1,Ug=G,1==(0|Sg)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=Ug,Ca=Da,za=Ba;continue a}f[Pg>>2]=0|f[sV>>2],f[Pg+4>>2]=0|f[sV+4>>2]}else{if(Vg=N+(hg<<3)|0,Wg=Vg+4|0,Xg=0|f[Wg>>2],Yg=14==(0|Xg),Yg?(Zg=N+(hg<<3)|0,$g=0|f[Zg>>2],_g=$g+20|0,ah=0|f[_g>>2],bh=$g+12|0,dh=0|f[bh>>2],L=dh,M=ah):(L=0,M=0),eh=tb+(dg<<3)|0,fh=hg+L|0,gh=fh+lg|0,r=0,ua(173,0|DV,0|b,0|gh),hh=r,r=0,0!=(0|hh)&0!=(0|s)?(ih=0|Rw(0|f[hh>>2],0|v9,0|w9),0==(0|ih)&&Aa(0|hh,0|s),G=s):ih=-1,jh=G,1==(0|ih)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=jh,Ca=Da,za=Ba;continue a}if(f[eh>>2]=0|f[DV>>2],f[eh+4>>2]=0|f[DV+4>>2],kh=tb+(dg<<3)|0,lh=0|f[kh>>2],(0|hg)>0&&(oh=lh+20|0,ph=0|f[oh>>2],r=0,ua(144,0|ph,0|N,0|hg),qh=r,r=0,0!=(0|qh)&0!=(0|s)?(rh=0|Rw(0|f[qh>>2],0|v9,0|w9),0==(0|rh)&&Aa(0|qh,0|s),G=s):rh=-1,sh=G,1==(0|rh))){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=sh,Ca=Da,za=Ba;continue a}if((0|L)>0&&(uh=lh+20|0,vh=0|f[uh>>2],wh=vh+(hg<<3)|0,r=0,ua(144,0|wh,0|M,0|L),xh=r,r=0,0!=(0|xh)&0!=(0|s)?(Ah=0|Rw(0|f[xh>>2],0|v9,0|w9),0==(0|Ah)&&Aa(0|xh,0|s),G=s):Ah=-1,Bh=G,1==(0|Ah))){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=Bh,Ca=Da,za=Ba;continue a}if((0|lg)>0&&(Dh=lh+20|0,Eh=0|f[Dh>>2],Fh=Eh+(hg<<3)|0,Gh=Fh+(L<<3)|0,Hh=N+(hg<<3)|0,Ih=Hh+8|0,r=0,ua(144,0|Gh,0|Ih,0|lg),Jh=r,r=0,0!=(0|Jh)&0!=(0|s)?(Lh=0|Rw(0|f[Jh>>2],0|v9,0|w9),0==(0|Lh)&&Aa(0|Jh,0|s),G=s):Lh=-1,Mh=G,1==(0|Lh))){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=Mh,Ca=Da,za=Ba;continue a}Nh=hg+L|0,Oh=Nh+lg|0,Ph=lh+12|0,f[Ph>>2]=Oh}Qh=dg+1|0,Rh=tb+(Qh<<3)|0,Sh=hg+jg|0,Th=Sh+lg|0,Uh=N+(Th<<3)|0,f[Rh>>2]=0|f[Uh>>2],f[Rh+4>>2]=0|f[Uh+4>>2],Wh=b+92|0,Xh=Wh+416|0,f[Xh>>2]=Ca,Yh=Gb+4|0,Zh=0|f[Yh>>2],Ob=Nb,Mb=Lb,Fb=Eb,Db=Cb,ub=tb,sb=rb,Ua=Zh,Gb=Yh,ad=Zh,Nb=Ob,Lb=Mb,Eb=Fb,Cb=Db,tb=ub,rb=sb,x9=583;continue b;case 39:if($h=Ua>>>7,_h=33554431&$h,ai=_h>>>18,bi=31&ai,ci=_h>>>13,di=31&ci,fi=_h>>>12,gi=1&fi,hi=_h>>>7,ii=31&hi,ji=b+12|0,ki=0|f[ji>>2],li=ki+16|0,mi=0|f[li>>2],ni=mi+36|0,oi=0|f[ni>>2],qi=tb+8|0,ri=bi+di|0,si=ri+gi|0,ti=si+ii|0,ui=(0|oi)<0,vi=ui?1:oi,wi=qi+(vi<<3)|0,xi=wi+4|0,yi=0|f[xi>>2],zi=0==(0|yi),zi?(Bi=0|f[wi>>2],0!=(0|Bi)&&(x9=218)):x9=218,218==(0|x9)&&(x9=0,Di=wi+4|0,Ei=0|f[Di>>2],13!=(0|Ei))){if(r=0,f[hc>>2]=0|f[wi>>2],f[hc+4>>2]=0|f[wi+4>>2],wa(174,0|OV,0|b,0|hc,13,65614,56755),Gi=r,r=0,0!=(0|Gi)&0!=(0|s)?(Hi=0|Rw(0|f[Gi>>2],0|v9,0|w9),0==(0|Hi)&&Aa(0|Gi,0|s),G=s):Hi=-1,Ii=G,1==(0|Hi)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=Ii,Ca=Da,za=Ba;continue a}f[wi>>2]=0|f[OV>>2],f[wi+4>>2]=0|f[OV+4>>2]}if((0|oi)<0){if(Ki=tb+8|0,Mi=0|f[Ki>>2],Ni=Mi+20|0,Oi=0|f[Ni>>2],Pi=Mi+12|0,Qi=0|f[Pi>>2],Ri=tb+8|0,r=0,f[ic>>2]=0|f[Ri>>2],f[ic+4>>2]=0|f[Ri+4>>2],sa(148,0|b,0|ic),Si=r,r=0,0!=(0|Si)&0!=(0|s)?(Ti=0|Rw(0|f[Si>>2],0|v9,0|w9),0==(0|Ti)&&Aa(0|Si,0|s),G=s):Ti=-1,Ui=G,1==(0|Ti)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=Ui,Ca=Da,za=Ba;continue a}J=Oi,K=Qi}else J=qi,K=oi;Vi=b+12|0,Xi=0|f[Vi>>2],Yi=Xi+16|0,Zi=0|f[Yi>>2],$i=Zi+4|0,_i=0|f[$i>>2],aj=0!=(0|_i);do{if(aj)if(bj=b+12|0,cj=0|f[bj>>2],dj=cj+16|0,ej=0|f[dj>>2],gj=ej+4|0,hj=0|f[gj>>2],ij=0|f[hj>>2],jj=ij>>>11,kj=256&jj,0!=(0|kj)){if((0|K)>=0){if(nj=bi+ii|0,!((0|K)<(0|nj))){if(!(0==(0|gi))){la=J,ma=K;break}if(!((0|K)>(0|ti))){la=J,ma=K;break}}if(sj=bi+ii|0,r=0,sa(175,0|b,0|sj),tj=r,r=0,0!=(0|tj)&0!=(0|s)?(uj=0|Rw(0|f[tj>>2],0|v9,0|w9),0==(0|uj)&&Aa(0|tj,0|s),G=s):uj=-1,vj=G,1==(0|uj)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=vj,Ca=Da,za=Ba;continue a}Sa=rb,Va=tb,cb=Cb,eb=Eb,gb=Gb,yb=Lb,Ab=Nb,x9=272;continue b}la=J,ma=K}else x9=232;else x9=232}while(0);if(232==(0|x9))if(x9=0,wj=(0|ti)>1,xj=1==(0|K),wj&xj)if(yj=J+4|0,zj=0|f[yj>>2],14==(0|zj)){if(r=0,f[jc>>2]=0|f[J>>2],f[jc+4>>2]=0|f[J+4>>2],sa(148,0|b,0|jc),Dj=r,r=0,0!=(0|Dj)&0!=(0|s)?(Ej=0|Rw(0|f[Dj>>2],0|v9,0|w9),0==(0|Ej)&&Aa(0|Dj,0|s),G=s):Ej=-1,Fj=G,1==(0|Ej)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=Fj,Ca=Da,za=Ba;continue a}Gj=0|f[J>>2],Hj=Gj+12|0,Ij=0|f[Hj>>2],Jj=0|f[J>>2],Kj=Jj+20|0,Lj=0|f[Kj>>2],la=Lj,ma=Ij}else la=J,ma=K;else la=J,ma=K;Mj=b+12|0,Oj=0|f[Mj>>2],Pj=Oj+16|0,Qj=0|f[Pj>>2],Rj=Qj+36|0,f[Rj>>2]=ti,Sj=(0|ma)<(0|ti);do{if(Sj){Tj=bi+ii|0,Uj=(0|ma)<(0|Tj);do{if(Uj){if((0|bi)<(0|ma)){Wj=ma-bi|0,I=Wj;break}I=0;break}I=ii}while(0);if(Xj=ti+1|0,Zj=tb+(Xj<<3)|0,f[Zj>>2]=0|f[wi>>2],f[Zj+4>>2]=0|f[wi+4>>2],$j=ma+1|0,_j=tb+($j<<3)|0,ak=_j+4|0,f[ak>>2]=0,bk=ma+1|0,ck=tb+(bk<<3)|0,f[ck>>2]=0,(0|qi)!=(0|la)&&(ek=tb+8|0,fk=ma-I|0,r=0,ua(170,0|ek,0|la,0|fk),gk=r,r=0,0!=(0|gk)&0!=(0|s)?(ik=0|Rw(0|f[gk>>2],0|v9,0|w9),0==(0|ik)&&Aa(0|gk,0|s),G=s):ik=-1,jk=G,1==(0|ik))){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=jk,Ca=Da,za=Ba;continue a}if(0!=(0|I)&&(lk=ti-ii|0,mk=lk+1|0,nk=tb+(mk<<3)|0,ok=ma-I|0,pk=la+(ok<<3)|0,r=0,ua(170,0|nk,0|pk,0|I),qk=r,r=0,0!=(0|qk)&0!=(0|s)?(rk=0|Rw(0|f[qk>>2],0|v9,0|w9),0==(0|rk)&&Aa(0|qk,0|s),G=s):rk=-1,tk=G,1==(0|rk))){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=tk,Ca=Da,za=Ba;continue a}if(0!=(0|gi)){if(vk=bi+di|0,wk=vk+1|0,xk=tb+(wk<<3)|0,r=0,ua(173,0|ZV,0|b,0),yk=r,r=0,0!=(0|yk)&0!=(0|s)?(zk=0|Rw(0|f[yk>>2],0|v9,0|w9),0==(0|zk)&&Aa(0|yk,0|s),G=s):zk=-1,Ak=G,1==(0|zk)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=Ak,Ca=Da,za=Ba;continue a}f[xk>>2]=0|f[ZV>>2],f[xk+4>>2]=0|f[ZV+4>>2]}if(!(0==(0|di)||(Ck=bi+ii|0,(0|ma)<(0|Ck)))){Gk=ma-bi|0,Hk=Gk-ii|0,Ik=Hk+1|0,Jk=Gb+(Ik<<2)|0,Za=Jk;break}Fk=Gb+4|0,Za=Fk}else{if((0|qi)!=(0|la)&&(Lk=ti+1|0,Mk=tb+(Lk<<3)|0,f[Mk>>2]=0|f[wi>>2],f[Mk+4>>2]=0|f[wi+4>>2],Nk=tb+8|0,Pk=bi+di|0,r=0,ua(170,0|Nk,0|la,0|Pk),Qk=r,r=0,0!=(0|Qk)&0!=(0|s)?(Rk=0|Rw(0|f[Qk>>2],0|v9,0|w9),0==(0|Rk)&&Aa(0|Qk,0|s),G=s):Rk=-1,Sk=G,1==(0|Rk))){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=Sk,Ca=Da,za=Ba;continue a}if(0!=(0|gi)){if(Uk=ma-bi|0,Vk=Uk-di|0,Wk=Vk-ii|0,Xk=bi+di|0,Yk=Xk+1|0,$k=tb+(Yk<<3)|0,_k=la+(bi<<3)|0,al=_k+(di<<3)|0,r=0,ya(167,0|iW,0|b,0|Wk,0|al),bl=r,r=0,0!=(0|bl)&0!=(0|s)?(cl=0|Rw(0|f[bl>>2],0|v9,0|w9),0==(0|cl)&&Aa(0|bl,0|s),G=s):cl=-1,dl=G,1==(0|cl)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=dl,Ca=Da,za=Ba;continue a}f[$k>>2]=0|f[iW>>2],f[$k+4>>2]=0|f[iW+4>>2],H=Wk}else H=0;if(0!=(0|ii)&&(fl=ma-ii|0,(0|fl)>(0|bi)&&(hl=bi+di|0,jl=hl+gi|0,kl=jl+1|0,ll=tb+(kl<<3)|0,ml=bi+di|0,nl=ml+H|0,ol=la+(nl<<3)|0,r=0,ua(170,0|ll,0|ol,0|ii),pl=r,r=0,0!=(0|pl)&0!=(0|s)?(ql=0|Rw(0|f[pl>>2],0|v9,0|w9),0==(0|ql)&&Aa(0|pl,0|s),G=s):ql=-1,rl=G,1==(0|ql)))){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=rl,Ca=Da,za=Ba;continue a}sl=(0|qi)==(0|la),sl&&(ul=ti+1|0,vl=tb+(ul<<3)|0,f[vl>>2]=0|f[wi>>2],f[vl+4>>2]=0|f[wi+4>>2]),wl=di+1|0,xl=Gb+(wl<<2)|0,Za=xl}}while(0);yl=0|f[Za>>2],Ob=Nb,Mb=Lb,Fb=Eb,Db=Cb,ub=tb,sb=rb,Ua=yl,Gb=Za,ad=yl,Nb=Ob,Lb=Mb,Eb=Fb,Cb=Db,tb=ub,rb=sb,x9=583;continue b;case 40:zl=Gb+4|0,Al=0|f[zl>>2],Ob=Nb,Mb=Lb,Fb=Eb,Db=Cb,ub=tb,sb=rb,Ua=Al,Gb=zl,ad=Al,Nb=Ob,Lb=Mb,Eb=Fb,Cb=Db,tb=ub,rb=sb,x9=583;continue b;case 41:Bl=Gb+4|0,Cl=0|f[Bl>>2],Ob=Nb,Mb=Lb,Fb=Eb,Db=Cb,ub=tb,sb=rb,Ua=Cl,Gb=Bl,ad=Cl,Nb=Ob,Lb=Mb,Eb=Fb,Cb=Db,tb=ub,rb=sb,x9=583;continue b;case 42:Ea=Ua,pb=Lb,qb=Nb;break;case 43:if(bt=Ua>>>23,ct=511&bt,dt=Ua>>>7,et=127&dt,ft=Ua>>>14,gt=511&ft,ht=Cb+(gt<<2)|0,it=0|f[ht>>2],jt=tb+(ct<<3)|0,f[FX>>2]=0|f[jt>>2],f[FX+4>>2]=0|f[jt+4>>2],r=0,f[nc>>2]=0|f[FX>>2],f[nc+4>>2]=0|f[FX+4>>2],kt=0|xa(138,0|b,0|nc),mt=r,r=0,0!=(0|mt)&0!=(0|s)?(nt=0|Rw(0|f[mt>>2],0|v9,0|w9),0==(0|nt)&&Aa(0|mt,0|s),G=s):nt=-1,ot=G,1==(0|nt)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=ot,Ca=Da,za=Ba;continue a}if(f[uX>>2]=kt,r=0,pt=0|oa(139,0|b,0|uX,0|it),qt=r,r=0,0!=(0|qt)&0!=(0|s)?(rt=0|Rw(0|f[qt>>2],0|v9,0|w9),0==(0|rt)&&Aa(0|qt,0|s),G=s):rt=-1,st=G,1==(0|rt)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=st,Ca=Da,za=Ba;continue a}tt=0!=(0|pt);do{if(!tt){if(r=0,sa(143,0|QX,0|it),ut=r,r=0,0!=(0|ut)&0!=(0|s)?(vt=0|Rw(0|f[ut>>2],0|v9,0|w9),0==(0|vt)&&Aa(0|ut,0|s),G=s):vt=-1,xt=G,1==(0|vt)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=xt,Ca=Da,za=Ba;continue a}if(r=0,yt=0|oa(140,0|b,65621,14),zt=r,r=0,0!=(0|zt)&0!=(0|s)?(At=0|Rw(0|f[zt>>2],0|v9,0|w9),0==(0|At)&&Aa(0|zt,0|s),G=s):At=-1,Bt=G,1==(0|At)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=Bt,Ca=Da,za=Ba;continue a}if(r=0,Ct=0|oa(139,0|b,0|uX,0|yt),Dt=r,r=0,0!=(0|Dt)&0!=(0|s)?(Et=0|Rw(0|f[Dt>>2],0|v9,0|w9),0==(0|Et)&&Aa(0|Dt,0|s),G=s):Et=-1,Ft=G,1==(0|Et)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=Ft,Ca=Da,za=Ba;continue a}if(127==(0|et)){if(It=ct+1|0,Jt=tb+(It<<3)|0,r=0,f[oc>>2]=0|f[Jt>>2],f[oc+4>>2]=0|f[Jt+4>>2],f[pc>>2]=0|f[QX>>2],f[pc+4>>2]=0|f[QX+4>>2],ya(169,0|aY,0|b,0|oc,0|pc),Kt=r,r=0,0!=(0|Kt)&0!=(0|s)?(Lt=0|Rw(0|f[Kt>>2],0|v9,0|w9),0==(0|Lt)&&Aa(0|Kt,0|s),G=s):Lt=-1,Mt=G,1==(0|Lt)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=Mt,Ca=Da,za=Ba;continue a}y=yt,z=Ct,A=et;break}if(Nt=tb+(ct<<3)|0,Ot=Nt+16|0,Pt=tb+(ct<<3)|0,Qt=Pt+8|0,Rt=et+1|0,r=0,ua(170,0|Ot,0|Qt,0|Rt),Ut=r,r=0,0!=(0|Ut)&0!=(0|s)?(Vt=0|Rw(0|f[Ut>>2],0|v9,0|w9),0==(0|Vt)&&Aa(0|Ut,0|s),G=s):Vt=-1,Wt=G,1==(0|Vt)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=Wt,Ca=Da,za=Ba;continue a}Xt=ct+1|0,Yt=tb+(Xt<<3)|0,f[Yt>>2]=0|f[QX>>2],f[Yt+4>>2]=0|f[QX+4>>2],y=yt,z=Ct,A=Rt;break}y=it,z=pt,A=et}while(0);if(Zt=b+12|0,$t=0|f[Zt>>2],_t=$t+16|0,au=0|f[_t>>2],f[au>>2]=y,bu=0|f[uX>>2],du=au+44|0,f[du>>2]=bu,eu=127==(0|A),ed=au,dd=eu?-1:A,fu=ed+36|0,f[fu>>2]=dd,gu=b+12|0,hu=0|f[gu>>2],iu=hu+4|0,ju=0|f[iu>>2],ku=tb+(ct<<3)|0,lu=au+36|0,mu=0|f[lu>>2],ou=mu+1|0,r=0,ua(170,0|ju,0|ku,0|ou),pu=r,r=0,0!=(0|pu)&0!=(0|s)?(qu=0|Rw(0|f[pu>>2],0|v9,0|w9),0==(0|qu)&&Aa(0|pu,0|s),G=s):qu=-1,ru=G,1==(0|qu)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=ru,Ca=Da,za=Ba;continue a}if(su=0|f[z>>2],tu=su>>>11,uu=128&tu,0!=(0|uu)){if(wu=b+12|0,xu=0|f[wu>>2],zu=xu+4|0,Au=0|f[zu>>2],Bu=z+12|0,Cu=0|f[Bu>>2],r=0,f[qc>>2]=0|f[FX>>2],f[qc+4>>2]=0|f[FX+4>>2],ua(0|Cu,0|lY,0|b,0|qc),Du=r,r=0,0!=(0|Du)&0!=(0|s)?(Eu=0|Rw(0|f[Du>>2],0|v9,0|w9),0==(0|Eu)&&Aa(0|Du,0|s),G=s):Eu=-1,Fu=G,1==(0|Eu)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=Fu,Ca=Da,za=Ba;continue a}if(f[Au>>2]=0|f[lY>>2],f[Au+4>>2]=0|f[lY+4>>2],r=0,sa(146,0|b,0|Ca),Gu=r,r=0,0!=(0|Gu)&0!=(0|s)?(Hu=0|Rw(0|f[Gu>>2],0|v9,0|w9),0==(0|Hu)&&Aa(0|Gu,0|s),G=s):Hu=-1,Iu=G,1==(0|Hu)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=Iu,Ca=Da,za=Ba;continue a}ib=Lb,jb=Nb,x9=270;break c}if(Ku=z+12|0,Lu=0|f[Ku>>2],Mu=Lu+12|0,Nu=0|f[Mu>>2],Ou=Lu+16|0,Pu=0|f[Ou>>2],Qu=au+36|0,Ru=0|f[Qu>>2],Su=(0|Ru)<0,Tu=Lu+2|0,Vu=0|e[Tu>>1],Wu=65535&Vu,Su){if(Xu=(0|Wu)<3,Xu?Zc=3:(Yu=Lu+2|0,Zu=0|e[Yu>>1],$u=65535&Zu,Zc=$u),r=0,ua(142,0|b,0|Zc,3),_u=r,r=0,0!=(0|_u)&0!=(0|s)?(av=0|Rw(0|f[_u>>2],0|v9,0|w9),0==(0|av)&&Aa(0|_u,0|s),G=s):av=-1,bv=G,1==(0|av)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Pu,Ja=Nu,La=Gb,Na=Lu,Pa=Nb,Xc=bv,Ca=Da,za=Ba;continue a}}else if(cv=au+36|0,ev=0|f[cv>>2],fv=ev+2|0,r=0,ua(142,0|b,0|Wu,0|fv),gv=r,r=0,0!=(0|gv)&0!=(0|s)?(hv=0|Rw(0|f[gv>>2],0|v9,0|w9),0==(0|hv)&&Aa(0|gv,0|s),G=s):hv=-1,iv=G,1==(0|hv)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Pu,Ja=Nu,La=Gb,Na=Lu,Pa=Nb,Xc=iv,Ca=Da,za=Ba;continue a}jv=b+12|0,kv=0|f[jv>>2],lv=kv+4|0,mv=0|f[lv>>2],nv=Lu+8|0,pv=0|f[nv>>2],qv=0|f[pv>>2],Ob=Nb,sb=rb,Ua=qv,tb=mv,Cb=Pu,Eb=Nu,Gb=pv,Lb=Lu,ad=qv,Nb=Ob,rb=sb,x9=583;continue b;case 44:rv=Ua>>>23,sv=511&rv,tv=Ua>>>7,uv=65535&tv,vv=uv>>10,wv=63&vv,xv=uv>>9,yv=1&xv,Av=uv>>4,Bv=31&Av,Cv=uv>>0,Dv=15&Cv,Ev=0==(0|Dv);do{if(!Ev){if(Gv=Dv-1|0,r=0,Hv=0|xa(161,0|b,0|Gv),Iv=r,r=0,0!=(0|Iv)&0!=(0|s)?(Jv=0|Rw(0|f[Iv>>2],0|v9,0|w9),0==(0|Jv)&&Aa(0|Iv,0|s),G=s):Jv=-1,Lv=G,1==(0|Jv)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=Lv,Ca=Da,za=Ba;continue a}if(0!=(0|Hv)){Qv=Hv+12|0,Rv=0|f[Qv>>2],Sv=Rv+8|0,x=Sv;break}if(r=0,sa(180,0|b,2),Nv=r,r=0,0!=(0|Nv)&0!=(0|s)?(Ov=0|Rw(0|f[Nv>>2],0|v9,0|w9),0==(0|Ov)&&Aa(0|Nv,0|s),G=s):Ov=-1,Pv=G,1==(0|Ov)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=Pv,Ca=Da,za=Ba;continue a}Sa=rb,Va=tb,cb=Cb,eb=Eb,gb=Gb,yb=Lb,Ab=Nb,x9=272;continue b}Fv=tb+8|0,x=Fv}while(0);Tv=tb+(sv<<3)|0,Uv=wv+yv|0,Xv=Uv+Bv|0,Yv=x+(Xv<<3)|0,f[Tv>>2]=0|f[Yv>>2],f[Tv+4>>2]=0|f[Yv+4>>2],Zv=Gb+4|0,$v=0|f[Zv>>2],Ob=Nb,Mb=Lb,Fb=Eb,Db=Cb,ub=tb,sb=rb,Ua=$v,Gb=Zv,ad=$v,Nb=Ob,Lb=Mb,Eb=Fb,Cb=Db,tb=ub,rb=sb,x9=583;continue b;case 45:_v=Ua>>>23,aw=511&_v,bw=tb+(aw<<3)|0,cw=bw+4|0,dw=0|f[cw>>2],ew=65535&dw,gw=65535&ew,hw=gw<<8,iw=aw+1|0,jw=tb+(iw<<3)|0,kw=jw+4|0,lw=0|f[kw>>2],mw=65535&lw,nw=65535&mw,ow=255&nw,pw=hw|ow;d:switch(0|pw){case 771:if(rw=tb+(aw<<3)|0,sw=0|f[rw>>2],tw=rw+8|0,uw=0|f[tw>>2],r=0,vw=0|oa(181,0|sw,0|uw,0|wY),ww=r,r=0,0!=(0|ww)&0!=(0|s)?(xw=0|Rw(0|f[ww>>2],0|v9,0|w9),0==(0|xw)&&Aa(0|ww,0|s),G=s):xw=-1,yw=G,1==(0|xw)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=yw,Ca=Da,za=Ba;continue a}if(vw<<24>>24!=0){Aw=rw+4|0,f[Aw>>2]=6,Cw=+(0|sw),Dw=+(0|uw),Ew=Cw+Dw,j[rw>>2]=Ew;break d}Fw=tb+(aw<<3)|0,Iw=Fw+4|0,f[Iw>>2]=3,Jw=0|f[wY>>2],Kw=tb+(aw<<3)|0,f[Kw>>2]=Jw;break d;case 774:Lw=tb+(aw<<3)|0,Mw=0|f[Lw>>2],Nw=aw+1|0,Pw=tb+(Nw<<3)|0,Sw=+j[Pw>>2],Tw=tb+(aw<<3)|0,Uw=Tw+4|0,f[Uw>>2]=6,Vw=+(0|Mw),Ww=Vw+Sw,Xw=tb+(aw<<3)|0,j[Xw>>2]=Ww;break;case 1539:Yw=tb+(aw<<3)|0,Zw=+j[Yw>>2],$w=aw+1|0,ax=tb+($w<<3)|0,bx=0|f[ax>>2],cx=+(0|bx),dx=Zw+cx,ex=tb+(aw<<3)|0,j[ex>>2]=dx;break;case 1542:fx=tb+(aw<<3)|0,gx=+j[fx>>2],hx=aw+1|0,ix=tb+(hx<<3)|0,jx=+j[ix>>2],lx=gx+jx,mx=tb+(aw<<3)|0,j[mx>>2]=lx;break;case 4112:if(nx=tb+(aw<<3)|0,ox=tb+(aw<<3)|0,px=aw+1|0,qx=tb+(px<<3)|0,r=0,f[rc>>2]=0|f[ox>>2],f[rc+4>>2]=0|f[ox+4>>2],f[sc>>2]=0|f[qx>>2],f[sc+4>>2]=0|f[qx+4>>2],ya(182,0|HY,0|b,0|rc,0|sc),rx=r,r=0,0!=(0|rx)&0!=(0|s)?(sx=0|Rw(0|f[rx>>2],0|v9,0|w9),0==(0|sx)&&Aa(0|rx,0|s),G=s):sx=-1,tx=G,1==(0|sx)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=tx,Ca=Da,za=Ba;continue a}f[nx>>2]=0|f[HY>>2],f[nx+4>>2]=0|f[HY+4>>2];break;default:$=Ua,x9=90;break c}ux=b+92|0,wx=ux+416|0,f[wx>>2]=Ca,xx=Gb+4|0,yx=0|f[xx>>2],Ob=Nb,Mb=Lb,Fb=Eb,Db=Cb,ub=tb,sb=rb,Ua=yx,Gb=xx,ad=yx,Nb=Ob,Lb=Mb,Eb=Fb,Cb=Db,tb=ub,rb=sb,x9=583;continue b;case 46:cB=Ua>>>23,dB=511&cB,eB=tb+(dB<<3)|0,gB=eB+4|0,hB=0|f[gB>>2];d:switch(0|hB){case 3:if(iB=tb+(dB<<3)|0,jB=0|f[iB>>2],kB=Ua>>>7,lB=127&kB,r=0,mB=0|oa(181,0|jB,0|lB,0|xZ),nB=r,r=0,0!=(0|nB)&0!=(0|s)?(oB=0|Rw(0|f[nB>>2],0|v9,0|w9),0==(0|oB)&&Aa(0|nB,0|s),G=s):oB=-1,pB=G,1==(0|oB)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=pB,Ca=Da,za=Ba;continue a}if(rB=mB<<24>>24!=0,sB=tb+(dB<<3)|0,tB=sB+4|0,rB){f[tB>>2]=6,uB=+(0|jB),vB=+(0|lB),wB=uB+vB,xB=tb+(dB<<3)|0,j[xB>>2]=wB;break d}f[tB>>2]=3,yB=0|f[xZ>>2],zB=tb+(dB<<3)|0,f[zB>>2]=yB;break d;case 6:AB=Ua>>>7,CB=127&AB,DB=+(0|CB),EB=tb+(dB<<3)|0,FB=+j[EB>>2],GB=FB+DB,j[EB>>2]=GB;break;default:HB=dB+1|0,IB=tb+(HB<<3)|0,JB=IB+4|0,f[JB>>2]=3,KB=Ua>>>7,LB=127&KB,NB=dB+1|0,OB=tb+(NB<<3)|0,f[OB>>2]=LB,PB=511&dB,QB=PB<<23,RB=32|QB,SB=Ua>>>14,TB=511&SB,UB=511&TB,VB=UB<<14,WB=RB|VB,YB=128|WB,$=YB,x9=90;break c}ZB=Gb+4|0,$B=0|f[ZB>>2],Ob=Nb,Mb=Lb,Fb=Eb,Db=Cb,ub=tb,sb=rb,Ua=$B,Gb=ZB,ad=$B,Nb=Ob,Lb=Mb,Eb=Fb,Cb=Db,tb=ub,rb=sb,x9=583;continue b;case 47:zx=Ua>>>23,Ax=511&zx,Bx=tb+(Ax<<3)|0,Cx=Bx+4|0,Dx=0|f[Cx>>2],Ex=65535&Dx,Fx=65535&Ex,Hx=Fx<<8,Ix=Ax+1|0,Jx=tb+(Ix<<3)|0,Kx=Jx+4|0,Lx=0|f[Kx>>2],Mx=65535&Lx,Nx=65535&Mx,Ox=255&Nx,Px=Hx|Ox;d:switch(0|Px){case 771:if(Qx=tb+(Ax<<3)|0,Sx=0|f[Qx>>2],Tx=Ax+1|0,Ux=tb+(Tx<<3)|0,Vx=0|f[Ux>>2],r=0,Wx=0|oa(183,0|Sx,0|Vx,0|SY),Xx=r,r=0,0!=(0|Xx)&0!=(0|s)?(Yx=0|Rw(0|f[Xx>>2],0|v9,0|w9),0==(0|Yx)&&Aa(0|Xx,0|s),G=s):Yx=-1,Zx=G,1==(0|Yx)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=Zx,Ca=Da,za=Ba;continue a}if($x=Wx<<24>>24!=0,_x=tb+(Ax<<3)|0,cy=_x+4|0,$x){f[cy>>2]=6,dy=+(0|Sx),ey=+(0|Vx),fy=dy-ey,gy=tb+(Ax<<3)|0,j[gy>>2]=fy;break d}f[cy>>2]=3,hy=0|f[SY>>2],iy=tb+(Ax<<3)|0,f[iy>>2]=hy;break d;case 774:jy=tb+(Ax<<3)|0,ky=0|f[jy>>2],ly=Ax+1|0,ny=tb+(ly<<3)|0,oy=+j[ny>>2],py=tb+(Ax<<3)|0,qy=py+4|0,f[qy>>2]=6,ry=+(0|ky),sy=ry-oy,ty=tb+(Ax<<3)|0,j[ty>>2]=sy;break;case 1539:uy=tb+(Ax<<3)|0,vy=+j[uy>>2],wy=Ax+1|0,yy=tb+(wy<<3)|0,zy=0|f[yy>>2],Ay=+(0|zy),By=vy-Ay,Cy=tb+(Ax<<3)|0,j[Cy>>2]=By;break;case 1542:Dy=tb+(Ax<<3)|0,Ey=+j[Dy>>2],Fy=Ax+1|0,Gy=tb+(Fy<<3)|0,Hy=+j[Gy>>2],Jy=Ey-Hy,Ky=tb+(Ax<<3)|0,j[Ky>>2]=Jy;break;default:$=Ua,x9=90;break c}Ly=Gb+4|0,My=0|f[Ly>>2],Ob=Nb,Mb=Lb,Fb=Eb,Db=Cb,ub=tb,sb=rb,Ua=My,Gb=Ly,ad=My,Nb=Ob,Lb=Mb,Eb=Fb,Cb=Db,tb=ub,rb=sb,x9=583;continue b;case 48:_B=Ua>>>23,aC=511&_B,bC=tb+(aC<<3)|0,cC=bC+4|0,dC=0|f[cC>>2];d:switch(0|dC){case 3:if(eC=0|f[bC>>2],fC=Ua>>>7,iC=127&fC,r=0,jC=0|oa(183,0|eC,0|iC,0|IZ),kC=r,r=0,0!=(0|kC)&0!=(0|s)?(lC=0|Rw(0|f[kC>>2],0|v9,0|w9),0==(0|lC)&&Aa(0|kC,0|s),G=s):lC=-1,mC=G,1==(0|lC)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=mC,Ca=Da,za=Ba;continue a}if(nC=jC<<24>>24!=0,oC=bC+4|0,nC){f[oC>>2]=6,pC=+(0|eC),qC=+(0|iC),rC=pC-qC,j[bC>>2]=rC;break d}f[oC>>2]=3,tC=0|f[IZ>>2],f[bC>>2]=tC;break d;case 6:uC=Ua>>>7,vC=127&uC,wC=+(0|vC),xC=+j[bC>>2],yC=xC-wC,j[bC>>2]=yC;break;default:zC=bC+8|0,AC=zC+4|0,f[AC>>2]=3,BC=Ua>>>7,CC=127&BC,EC=bC+8|0,f[EC>>2]=CC,FC=511&aC,GC=FC<<23,HC=32|GC,IC=Ua>>>14,JC=511&IC,KC=511&JC,LC=KC<<14,MC=HC|LC,NC=128|MC,$=NC,x9=90;break c}PC=Gb+4|0,QC=0|f[PC>>2],Ob=Nb,Mb=Lb,Fb=Eb,Db=Cb,ub=tb,sb=rb,Ua=QC,Gb=PC,ad=QC,Nb=Ob,Lb=Mb,Eb=Fb,Cb=Db,tb=ub,rb=sb,x9=583;continue b;case 49:Ny=Ua>>>23,Oy=511&Ny,Py=tb+(Oy<<3)|0,Qy=Py+4|0,Ry=0|f[Qy>>2],Sy=65535&Ry,Uy=65535&Sy,Vy=Uy<<8,Wy=Oy+1|0,Xy=tb+(Wy<<3)|0,Yy=Xy+4|0,Zy=0|f[Yy>>2],$y=65535&Zy,_y=65535&$y,az=255&_y,bz=Vy|az;d:switch(0|bz){case 771:if(dz=tb+(Oy<<3)|0,ez=Oy+1|0,fz=tb+(ez<<3)|0,r=0,f[tc>>2]=0|f[dz>>2],f[tc+4>>2]=0|f[dz+4>>2],f[uc>>2]=0|f[fz>>2],f[uc+4>>2]=0|f[fz+4>>2],ya(184,0|mZ,0|b,0|tc,0|uc),gz=r,r=0,0!=(0|gz)&0!=(0|s)?(hz=0|Rw(0|f[gz>>2],0|v9,0|w9),0==(0|hz)&&Aa(0|gz,0|s),G=s):hz=-1,iz=G,1==(0|hz)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=iz,Ca=Da,za=Ba;continue a}switch(f[bZ>>2]=0|f[mZ>>2],f[bZ+4>>2]=0|f[mZ+4>>2],jz=bZ+4|0,0|(0|f[jz>>2])){case 3:lz=tb+(Oy<<3)|0,mz=lz+4|0,f[mz>>2]=3,oz=0|f[bZ>>2],pz=tb+(Oy<<3)|0,f[pz>>2]=oz;break d;case 6:qz=tb+(Oy<<3)|0,rz=qz+4|0,f[rz>>2]=6,sz=+j[bZ>>2],tz=tb+(Oy<<3)|0,j[tz>>2]=sz;break d;default:break d}break;case 774:uz=tb+(Oy<<3)|0,vz=0|f[uz>>2],wz=Oy+1|0,xz=tb+(wz<<3)|0,zz=+j[xz>>2],Az=tb+(Oy<<3)|0,Bz=Az+4|0,f[Bz>>2]=6,Cz=+(0|vz),Dz=Cz*zz,Ez=tb+(Oy<<3)|0,j[Ez>>2]=Dz;break;case 1539:Fz=tb+(Oy<<3)|0,Gz=+j[Fz>>2],Hz=Oy+1|0,Iz=tb+(Hz<<3)|0,Kz=0|f[Iz>>2],Lz=+(0|Kz),Mz=Gz*Lz,Nz=tb+(Oy<<3)|0,j[Nz>>2]=Mz;break;case 1542:Oz=tb+(Oy<<3)|0,Pz=+j[Oz>>2],Qz=Oy+1|0,Rz=tb+(Qz<<3)|0,Sz=+j[Rz>>2],Tz=Pz*Sz,Vz=tb+(Oy<<3)|0,j[Vz>>2]=Tz;break;default:$=Ua,x9=90;break c}Wz=Gb+4|0,Xz=0|f[Wz>>2],Ob=Nb,Mb=Lb,Fb=Eb,Db=Cb,ub=tb,sb=rb,Ua=Xz,Gb=Wz,ad=Xz,Nb=Ob,Lb=Mb,Eb=Fb,Cb=Db,tb=ub,rb=sb,x9=583;continue b;case 50:switch(Yz=Ua>>>23,Zz=511&Yz,$z=tb+(Zz<<3)|0,_z=$z+4|0,aA=0|f[_z>>2],bA=65535&aA,cA=65535&bA,fA=cA<<8,gA=Zz+1|0,hA=tb+(gA<<3)|0,iA=hA+4|0,jA=0|f[iA>>2],kA=65535&jA,lA=65535&kA,mA=255&lA,0|(fA|mA)){case 771:oA=tb+(Zz<<3)|0,qA=0|f[oA>>2],rA=Zz+1|0,sA=tb+(rA<<3)|0,tA=0|f[sA>>2],uA=tb+(Zz<<3)|0,vA=uA+4|0,f[vA>>2]=6,wA=+(0|qA),xA=+(0|tA),yA=wA/xA,zA=tb+(Zz<<3)|0,hd=yA,id=zA;break;case 774:BA=tb+(Zz<<3)|0,CA=0|f[BA>>2],DA=Zz+1|0,EA=tb+(DA<<3)|0,FA=+j[EA>>2],GA=tb+(Zz<<3)|0,HA=GA+4|0,f[HA>>2]=6,IA=+(0|CA),JA=IA/FA,KA=tb+(Zz<<3)|0,hd=JA,id=KA;break;case 1539:MA=tb+(Zz<<3)|0,NA=+j[MA>>2],OA=Zz+1|0,PA=tb+(OA<<3)|0,QA=0|f[PA>>2],RA=+(0|QA),SA=NA/RA,TA=tb+(Zz<<3)|0,hd=SA,id=TA;break;case 1542:UA=tb+(Zz<<3)|0,VA=+j[UA>>2],XA=Zz+1|0,YA=tb+(XA<<3)|0,ZA=+j[YA>>2],$A=VA/ZA,_A=tb+(Zz<<3)|0,hd=$A,id=_A;break;default:$=Ua,x9=90;break c}j[id>>2]=hd,aB=Gb+4|0,bB=0|f[aB>>2],Ob=Nb,Mb=Lb,Fb=Eb,Db=Cb,ub=tb,sb=rb,Ua=bB,Gb=aB,ad=bB,Nb=Ob,Lb=Mb,Eb=Fb,Cb=Db,tb=ub,rb=sb,x9=583;continue b;case 51:if(RC=Ua>>>23,SC=511&RC,TC=tb+(SC<<3)|0,UC=SC+1|0,VC=tb+(UC<<3)|0,r=0,f[vc>>2]=0|f[TC>>2],f[vc+4>>2]=0|f[TC+4>>2],f[wc>>2]=0|f[VC>>2],f[wc+4>>2]=0|f[VC+4>>2],WC=0|oa(185,0|b,0|vc,0|wc),XC=r,r=0,0!=(0|XC)&0!=(0|s)?(YC=0|Rw(0|f[XC>>2],0|v9,0|w9),0==(0|YC)&&Aa(0|XC,0|s),G=s):YC=-1,$C=G,1==(0|YC)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=$C,Ca=Da,za=Ba;continue a}_C=WC<<24>>24!=0,aD=tb+(SC<<3)|0,bD=aD+4|0;do{if(!_C){switch(dD=0|f[bD>>2],eD=65535&dD,fD=65535&eD,gD=fD<<8,hD=SC+1|0,jD=tb+(hD<<3)|0,kD=jD+4|0,lD=0|f[kD>>2],mD=65535&lD,nD=65535&mD,oD=255&nD,0|(gD|oD)){case 771:qD=tb+(SC<<3)|0,rD=0|f[qD>>2],sD=SC+1|0,uD=tb+(sD<<3)|0,vD=0|f[uD>>2],wD=(0|rD)==(0|vD),xD=1&wD,w=xD;break;case 774:yD=tb+(SC<<3)|0,zD=0|f[yD>>2],AD=+(0|zD),BD=SC+1|0,CD=tb+(BD<<3)|0,DD=+j[CD>>2],FD=AD==DD,GD=1&FD,w=GD;break;case 1539:HD=tb+(SC<<3)|0,ID=+j[HD>>2],JD=SC+1|0,KD=tb+(JD<<3)|0,LD=0|f[KD>>2],MD=+(0|LD),ND=ID==MD,OD=1&ND,w=OD;break;case 1542:QD=tb+(SC<<3)|0,RD=+j[QD>>2],SD=SC+1|0,TD=tb+(SD<<3)|0,UD=+j[TD>>2],VD=RD==UD,WD=1&VD,w=WD;break;default:$=Ua,x9=90;break c}if(XD=0!=(0|w),YD=tb+(SC<<3)|0,ZD=YD+4|0,XD){f[ZD>>2]=2,_D=tb+(SC<<3)|0,kd=_D;break}f[ZD>>2]=0,aE=tb+(SC<<3)|0,kd=aE;break}f[bD>>2]=2,cD=tb+(SC<<3)|0,kd=cD}while(0);f[kd>>2]=1,bE=Gb+4|0,cE=0|f[bE>>2],Ob=Nb,Mb=Lb,Fb=Eb,Db=Cb,ub=tb,sb=rb,Ua=cE,Gb=bE,ad=cE,Nb=Ob,Lb=Mb,Eb=Fb,Cb=Db,tb=ub,rb=sb,x9=583;continue b;case 52:switch(dE=Ua>>>23,eE=511&dE,fE=tb+(eE<<3)|0,gE=fE+4|0,hE=0|f[gE>>2],iE=65535&hE,lE=65535&iE,mE=lE<<8,nE=eE+1|0,oE=tb+(nE<<3)|0,pE=oE+4|0,qE=0|f[pE>>2],rE=65535&qE,sE=65535&rE,tE=255&sE,0|(mE|tE)){case 771:wE=tb+(eE<<3)|0,xE=0|f[wE>>2],yE=eE+1|0,zE=tb+(yE<<3)|0,AE=0|f[zE>>2],BE=(0|xE)<(0|AE),CE=1&BE,v=CE;break;case 774:DE=tb+(eE<<3)|0,EE=0|f[DE>>2],FE=+(0|EE),HE=eE+1|0,IE=tb+(HE<<3)|0,JE=+j[IE>>2],KE=FE<JE,LE=1&KE,v=LE;break;case 1539:ME=tb+(eE<<3)|0,NE=+j[ME>>2],OE=eE+1|0,PE=tb+(OE<<3)|0,QE=0|f[PE>>2],SE=+(0|QE),TE=NE<SE,UE=1&TE,v=UE;break;case 1542:VE=tb+(eE<<3)|0,WE=+j[VE>>2],XE=eE+1|0,YE=tb+(XE<<3)|0,ZE=+j[YE>>2],$E=WE<ZE,_E=1&$E,v=_E;break;default:$=Ua,x9=90;break c}bF=0!=(0|v),cF=tb+(eE<<3)|0,dF=cF+4|0,bF?(f[dF>>2]=2,eF=tb+(eE<<3)|0,ld=eF):(f[dF>>2]=0,fF=tb+(eE<<3)|0,ld=fF),f[ld>>2]=1,gF=Gb+4|0,hF=0|f[gF>>2],Ob=Nb,Mb=Lb,Fb=Eb,Db=Cb,ub=tb,sb=rb,Ua=hF,Gb=gF,ad=hF,Nb=Ob,Lb=Mb,Eb=Fb,Cb=Db,tb=ub,rb=sb,x9=583;continue b;case 53:switch(iF=Ua>>>23,jF=511&iF,kF=tb+(jF<<3)|0,mF=kF+4|0,nF=0|f[mF>>2],oF=65535&nF,pF=65535&oF,qF=pF<<8,rF=jF+1|0,sF=tb+(rF<<3)|0,tF=sF+4|0,uF=0|f[tF>>2],vF=65535&uF,xF=65535&vF,yF=255&xF,0|(qF|yF)){case 771:AF=tb+(jF<<3)|0,BF=0|f[AF>>2],CF=jF+1|0,DF=tb+(CF<<3)|0,EF=0|f[DF>>2],FF=(0|BF)<=(0|EF),GF=1&FF,u=GF;break;case 774:IF=tb+(jF<<3)|0,JF=0|f[IF>>2],KF=+(0|JF),LF=jF+1|0,MF=tb+(LF<<3)|0,NF=+j[MF>>2],OF=KF<=NF,PF=1&OF,u=PF;break;case 1539:QF=tb+(jF<<3)|0,RF=+j[QF>>2],TF=jF+1|0,UF=tb+(TF<<3)|0,VF=0|f[UF>>2],WF=+(0|VF),XF=RF<=WF,YF=1&XF,u=YF;break;case 1542:ZF=tb+(jF<<3)|0,$F=+j[ZF>>2],_F=jF+1|0,aG=tb+(_F<<3)|0,cG=+j[aG>>2],dG=$F<=cG,eG=1&dG,u=eG;break;default:$=Ua,x9=90;break c}fG=0!=(0|u),gG=tb+(jF<<3)|0,hG=gG+4|0,fG?(f[hG>>2]=2,iG=tb+(jF<<3)|0,md=iG):(f[hG>>2]=0,jG=tb+(jF<<3)|0,md=jG),f[md>>2]=1,kG=Gb+4|0,lG=0|f[kG>>2],Ob=Nb,Mb=Lb,Fb=Eb,Db=Cb,ub=tb,sb=rb,Ua=lG,Gb=kG,ad=lG,Nb=Ob,Lb=Mb,Eb=Fb,Cb=Db,tb=ub,rb=sb,x9=583;continue b;case 54:switch(oG=Ua>>>23,pG=511&oG,qG=tb+(pG<<3)|0,rG=qG+4|0,sG=0|f[rG>>2],tG=65535&sG,uG=65535&tG,vG=uG<<8,wG=pG+1|0,xG=tb+(wG<<3)|0,zG=xG+4|0,AG=0|f[zG>>2],BG=65535&AG,CG=65535&BG,DG=255&CG,0|(vG|DG)){case 771:FG=tb+(pG<<3)|0,GG=0|f[FG>>2],HG=pG+1|0,IG=tb+(HG<<3)|0,KG=0|f[IG>>2],LG=(0|GG)>(0|KG),MG=1&LG,t=MG;break;case 774:NG=tb+(pG<<3)|0,OG=0|f[NG>>2],PG=+(0|OG),QG=pG+1|0,RG=tb+(QG<<3)|0,SG=+j[RG>>2],TG=PG>SG,VG=1&TG,t=VG;break;case 1539:WG=tb+(pG<<3)|0,XG=+j[WG>>2],YG=pG+1|0,ZG=tb+(YG<<3)|0,$G=0|f[ZG>>2],_G=+(0|$G),aH=XG>_G,bH=1&aH,t=bH;break;case 1542:cH=tb+(pG<<3)|0,eH=+j[cH>>2],fH=pG+1|0,gH=tb+(fH<<3)|0,hH=+j[gH>>2],iH=eH>hH,jH=1&iH,t=jH;break;default:$=Ua,x9=90;break c}kH=0!=(0|t),lH=tb+(pG<<3)|0,mH=lH+4|0,kH?(f[mH>>2]=2,nH=tb+(pG<<3)|0,nd=nH):(f[mH>>2]=0,pH=tb+(pG<<3)|0,nd=pH),f[nd>>2]=1,qH=Gb+4|0,rH=0|f[qH>>2],Ob=Nb,Mb=Lb,Fb=Eb,Db=Cb,ub=tb,sb=rb,Ua=rH,Gb=qH,ad=rH,Nb=Ob,Lb=Mb,Eb=Fb,Cb=Db,tb=ub,rb=sb,x9=583;continue b;case 55:switch(sH=Ua>>>23,tH=511&sH,uH=tb+(tH<<3)|0,vH=uH+4|0,wH=0|f[vH>>2],xH=65535&wH,yH=65535&xH,AH=yH<<8,BH=tH+1|0,CH=tb+(BH<<3)|0,DH=CH+4|0,EH=0|f[DH>>2],FH=65535&EH,GH=65535&FH,HH=255&GH,0|(AH|HH)){case 771:JH=tb+(tH<<3)|0,LH=0|f[JH>>2],MH=tH+1|0,NH=tb+(MH<<3)|0,OH=0|f[NH>>2],PH=(0|LH)>=(0|OH),QH=1&PH,q=QH;break;case 774:RH=tb+(tH<<3)|0,SH=0|f[RH>>2],TH=+(0|SH),UH=tH+1|0,WH=tb+(UH<<3)|0,XH=+j[WH>>2],YH=TH>=XH,ZH=1&YH,q=ZH;break;case 1539:$H=tb+(tH<<3)|0,_H=+j[$H>>2],aI=tH+1|0,bI=tb+(aI<<3)|0,cI=0|f[bI>>2],dI=+(0|cI),fI=_H>=dI,gI=1&fI,q=gI;break;case 1542:hI=tb+(tH<<3)|0,iI=+j[hI>>2],jI=tH+1|0,kI=tb+(jI<<3)|0,lI=+j[kI>>2],mI=iI>=lI,nI=1&mI,q=nI;break;default:$=Ua,x9=90;break c}oI=0!=(0|q),rI=tb+(tH<<3)|0,sI=rI+4|0,oI?(f[sI>>2]=2,tI=tb+(tH<<3)|0,od=tI):(f[sI>>2]=0,uI=tb+(tH<<3)|0,od=uI),f[od>>2]=1,vI=Gb+4|0,wI=0|f[vI>>2],Ob=Nb,Mb=Lb,Fb=Eb,Db=Cb,ub=tb,sb=rb,Ua=wI,Gb=vI,ad=wI,Nb=Ob,Lb=Mb,Eb=Fb,Cb=Db,tb=ub,rb=sb,x9=583;continue b;case 56:if(xI=Ua>>>23,yI=511&xI,zI=tb+(yI<<3)|0,AI=Ua>>>7,CI=127&AI,DI=Ua>>>14,EI=511&DI,FI=tb+(EI<<3)|0,r=0,ya(167,0|TZ,0|b,0|CI,0|FI),GI=r,r=0,0!=(0|GI)&0!=(0|s)?(HI=0|Rw(0|f[GI>>2],0|v9,0|w9),0==(0|HI)&&Aa(0|GI,0|s),G=s):HI=-1,II=G,1==(0|HI)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=II,Ca=Da,za=Ba;continue a}f[zI>>2]=0|f[TZ>>2],f[zI+4>>2]=0|f[TZ+4>>2],JI=b+92|0,KI=JI+416|0,f[KI>>2]=Ca,LI=Gb+4|0,NI=0|f[LI>>2],Ob=Nb,Mb=Lb,Fb=Eb,Db=Cb,ub=tb,sb=rb,Ua=NI,Gb=LI,ad=NI,Nb=Ob,Lb=Mb,Eb=Fb,Cb=Db,tb=ub,rb=sb,x9=583;continue b;case 57:if(OI=Ua>>>23,PI=511&OI,QI=tb+(PI<<3)|0,RI=Ua>>>14,SI=511&RI,TI=tb+(SI<<3)|0,r=0,f[xc>>2]=0|f[TI>>2],f[xc+4>>2]=0|f[TI+4>>2],ua(186,0|d$,0|b,0|xc),UI=r,r=0,0!=(0|UI)&0!=(0|s)?(VI=0|Rw(0|f[UI>>2],0|v9,0|w9),0==(0|VI)&&Aa(0|UI,0|s),G=s):VI=-1,WI=G,1==(0|VI)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=WI,Ca=Da,za=Ba;continue a}if(r=0,f[yc>>2]=0|f[QI>>2],f[yc+4>>2]=0|f[QI+4>>2],f[zc>>2]=0|f[d$>>2],f[zc+4>>2]=0|f[d$+4>>2],ua(187,0|b,0|yc,0|zc),YI=r,r=0,0!=(0|YI)&0!=(0|s)?(ZI=0|Rw(0|f[YI>>2],0|v9,0|w9),0==(0|ZI)&&Aa(0|YI,0|s),G=s):ZI=-1,$I=G,1==(0|ZI)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=$I,Ca=Da,za=Ba;continue a}_I=b+92|0,aJ=_I+416|0,f[aJ>>2]=Ca,bJ=Gb+4|0,cJ=0|f[bJ>>2],Ob=Nb,Mb=Lb,Fb=Eb,Db=Cb,ub=tb,sb=rb,Ua=cJ,Gb=bJ,ad=cJ,Nb=Ob,Lb=Mb,Eb=Fb,Cb=Db,tb=ub,rb=sb,x9=583;continue b;case 58:if(dJ=Ua>>>23,eJ=511&dJ,fJ=tb+(eJ<<3)|0,hJ=Ua>>>14,iJ=511&hJ,jJ=tb+(iJ<<3)|0,r=0,f[Ac>>2]=0|f[fJ>>2],f[Ac+4>>2]=0|f[fJ+4>>2],f[Bc>>2]=0|f[jJ>>2],f[Bc+4>>2]=0|f[jJ+4>>2],ua(188,0|b,0|Ac,0|Bc),kJ=r,r=0,0!=(0|kJ)&0!=(0|s)?(lJ=0|Rw(0|f[kJ>>2],0|v9,0|w9),0==(0|lJ)&&Aa(0|kJ,0|s),G=s):lJ=-1,mJ=G,1==(0|lJ)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=mJ,Ca=Da,za=Ba;continue a}nJ=Gb+4|0,oJ=0|f[nJ>>2],Ob=Nb,Mb=Lb,Fb=Eb,Db=Cb,ub=tb,sb=rb,Ua=oJ,Gb=nJ,ad=oJ,Nb=Ob,Lb=Mb,Eb=Fb,Cb=Db,tb=ub,rb=sb,x9=583;continue b;case 59:pJ=Ua>>>23,qJ=511&pJ,sJ=Ua>>>7,tJ=127&sJ,uJ=Ua>>>14,vJ=511&uJ,wJ=tb+(vJ<<3)|0,f[o$>>2]=0|f[wJ>>2],f[o$+4>>2]=0|f[wJ+4>>2],xJ=o$+4|0,yJ=0|f[xJ>>2],zJ=14==(0|yJ);do{if(!zJ){if(0==(0|tJ)){BJ=Ua>>>23,DJ=511&BJ,EJ=tb+(DJ<<3)|0,f[EJ>>2]=0|f[o$>>2],f[EJ+4>>2]=0|f[o$+4>>2];break}FJ=tb+(qJ<<3)|0,GJ=FJ+4|0,f[GJ>>2]=0,HJ=tb+(qJ<<3)|0,f[HJ>>2]=0;break}if(IJ=Ua>>>23,JJ=511&IJ,KJ=tb+(JJ<<3)|0,r=0,f[Cc>>2]=0|f[o$>>2],f[Cc+4>>2]=0|f[o$+4>>2],ya(189,0|z$,0|b,0|Cc,0|tJ),LJ=r,r=0,0!=(0|LJ)&0!=(0|s)?(MJ=0|Rw(0|f[LJ>>2],0|v9,0|w9),0==(0|MJ)&&Aa(0|LJ,0|s),G=s):MJ=-1,OJ=G,1==(0|MJ)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=OJ,Ca=Da,za=Ba;continue a}f[KJ>>2]=0|f[z$>>2],f[KJ+4>>2]=0|f[z$+4>>2]}while(0);PJ=Gb+4|0,QJ=0|f[PJ>>2],Ob=Nb,Mb=Lb,Fb=Eb,Db=Cb,ub=tb,sb=rb,Ua=QJ,Gb=PJ,ad=QJ,Nb=Ob,Lb=Mb,Eb=Fb,Cb=Db,tb=ub,rb=sb,x9=583;continue b;case 60:if(RJ=Ua>>>14,SJ=511&RJ,TJ=tb+(SJ<<3)|0,UJ=Ua>>>7,VJ=127&UJ,WJ=Ua>>>23,XJ=511&WJ,ZJ=tb+(XJ<<3)|0,r=0,f[Dc>>2]=0|f[TJ>>2],f[Dc+4>>2]=0|f[TJ+4>>2],f[Ec>>2]=0|f[ZJ>>2],f[Ec+4>>2]=0|f[ZJ+4>>2],ya(190,0|b,0|Dc,0|VJ,0|Ec),$J=r,r=0,0!=(0|$J)&0!=(0|s)?(_J=0|Rw(0|f[$J>>2],0|v9,0|w9),0==(0|_J)&&Aa(0|$J,0|s),G=s):_J=-1,aK=G,1==(0|_J)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=aK,Ca=Da,za=Ba;continue a}bK=Gb+4|0,cK=0|f[bK>>2],Ob=Nb,Mb=Lb,Fb=Eb,Db=Cb,ub=tb,sb=rb,Ua=cK,Gb=bK,ad=cK,Nb=Ob,Lb=Mb,Eb=Fb,Cb=Db,tb=ub,rb=sb,x9=583;continue b;case 61:if(dK=Ua>>>23,eK=511&dK,fK=tb+(eK<<3)|0,f[K$>>2]=0|f[fK>>2],f[K$+4>>2]=0|f[fK+4>>2],gK=Ua>>>14,iK=511&gK,jK=Ua>>>7,kK=127&jK,lK=K$+4|0,mK=0|f[lK>>2],!(14==(0|mK))){if(oK=tb+(eK<<3)|0,r=0,ya(167,0|V$,0|b,1,0|oK),pK=r,r=0,0!=(0|pK)&0!=(0|s)?(qK=0|Rw(0|f[pK>>2],0|v9,0|w9),0==(0|qK)&&Aa(0|pK,0|s),G=s):qK=-1,rK=G,1==(0|qK)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=rK,Ca=Da,za=Ba;continue a}f[K$>>2]=0|f[V$>>2],f[K$+4>>2]=0|f[V$+4>>2]}uK=0|f[K$>>2],vK=uK+12|0,wK=0|f[vK>>2],xK=iK+kK|0,yK=(0|wK)>(0|xK),zK=eK+1|0,AK=tb+(eK<<3)|0;d:if(yK){if(BK=wK-iK|0,CK=BK-kK|0,DK=uK+20|0,FK=0|f[DK>>2],GK=FK+(iK<<3)|0,r=0,ya(167,0|e_,0|b,0|CK,0|GK),HK=r,r=0,0!=(0|HK)&0!=(0|s)?(IK=0|Rw(0|f[HK>>2],0|v9,0|w9),0==(0|IK)&&Aa(0|HK,0|s),G=s):IK=-1,JK=G,1==(0|IK)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=JK,Ca=Da,za=Ba;continue a}for(f[AK>>2]=0|f[e_>>2],f[AK+4>>2]=0|f[e_+4>>2],m=kK,n=zK;;){if(KK=m+-1|0,!(0!=(0|m)))break d;MK=n+1|0,NK=tb+(n<<3)|0,OK=uK+20|0,QK=0|f[OK>>2],RK=wK-KK|0,SK=RK-1|0,TK=QK+(SK<<3)|0,f[NK>>2]=0|f[TK>>2],f[NK+4>>2]=0|f[TK+4>>2],m=KK,n=MK}}else{if(r=0,ua(173,0|p_,0|b,0),UK=r,r=0,0!=(0|UK)&0!=(0|s)?(VK=0|Rw(0|f[UK>>2],0|v9,0|w9),0==(0|VK)&&Aa(0|UK,0|s),G=s):VK=-1,WK=G,1==(0|VK)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=WK,Ca=Da,za=Ba;continue a}for(f[AK>>2]=0|f[p_>>2],f[AK+4>>2]=0|f[p_+4>>2],l=0;;){if(XK=l+iK|0,!((0|XK)<(0|wK))){ga=l;break}ZK=zK+l|0,_K=tb+(ZK<<3)|0,aL=uK+20|0,bL=0|f[aL>>2],cL=iK+l|0,dL=bL+(cL<<3)|0,f[_K>>2]=0|f[dL>>2],f[_K+4>>2]=0|f[dL+4>>2],eL=l+1|0,l=eL}for(;;){if(!((0|ga)<(0|kK)))break d;gL=zK+ga|0,hL=tb+(gL<<3)|0,iL=hL+4|0,f[iL>>2]=0,kL=zK+ga|0,lL=tb+(kL<<3)|0,f[lL>>2]=0,mL=ga+1|0,ga=mL}}nL=b+92|0,oL=nL+416|0,f[oL>>2]=Ca,pL=Gb+4|0,qL=0|f[pL>>2],Ob=Nb,Mb=Lb,Fb=Eb,Db=Cb,ub=tb,sb=rb,Ua=qL,Gb=pL,ad=qL,Nb=Ob,Lb=Mb,Eb=Fb,Cb=Db,tb=ub,rb=sb,x9=583;continue b;case 62:if(rL=Ua>>>23,sL=511&rL,tL=tb+(sL<<3)|0,vL=Ua>>>7,wL=65535&vL,xL=Eb+(wL<<3)|0,r=0,f[Fc>>2]=0|f[xL>>2],f[Fc+4>>2]=0|f[xL+4>>2],ua(191,0|A_,0|b,0|Fc),yL=r,r=0,0!=(0|yL)&0!=(0|s)?(zL=0|Rw(0|f[yL>>2],0|v9,0|w9),0==(0|zL)&&Aa(0|yL,0|s),G=s):zL=-1,AL=G,1==(0|zL)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=AL,Ca=Da,za=Ba;continue a}f[tL>>2]=0|f[A_>>2],f[tL+4>>2]=0|f[A_+4>>2],BL=b+92|0,CL=BL+416|0,f[CL>>2]=Ca,DL=Gb+4|0,EL=0|f[DL>>2],Ob=Nb,Mb=Lb,Fb=Eb,Db=Cb,ub=tb,sb=rb,Ua=EL,Gb=DL,ad=EL,Nb=Ob,Lb=Mb,Eb=Fb,Cb=Db,tb=ub,rb=sb,x9=583;continue b;case 63:if(GL=Ua>>>23,HL=511&GL,IL=tb+(HL<<3)|0,JL=Ua>>>14,KL=511&JL,LL=tb+(KL<<3)|0,r=0,f[Gc>>2]=0|f[IL>>2],f[Gc+4>>2]=0|f[IL+4>>2],f[Hc>>2]=0|f[LL>>2],f[Hc+4>>2]=0|f[LL+4>>2],ua(192,0|b,0|Gc,0|Hc),ML=r,r=0,0!=(0|ML)&0!=(0|s)?(NL=0|Rw(0|f[ML>>2],0|v9,0|w9),0==(0|NL)&&Aa(0|ML,0|s),G=s):NL=-1,OL=G,1==(0|NL)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=OL,Ca=Da,za=Ba;continue a}PL=b+12|0,RL=0|f[PL>>2],SL=RL+4|0,TL=0|f[SL>>2],UL=Gb+4|0,VL=0|f[UL>>2],Ob=Nb,Mb=Lb,Fb=Eb,Db=Cb,sb=rb,Ua=VL,tb=TL,Gb=UL,ad=VL,Nb=Ob,Lb=Mb,Eb=Fb,Cb=Db,rb=sb,x9=583;continue b;case 64:if(WL=Ua>>>14,XL=511&WL,YL=Ua>>>7,ZL=127&YL,$L=ZL<<1,aM=XL+$L|0,r=0,ua(193,0|L_,0|b,0|ZL),bM=r,r=0,0!=(0|bM)&0!=(0|s)?(cM=0|Rw(0|f[bM>>2],0|v9,0|w9),0==(0|cM)&&Aa(0|bM,0|s),G=s):cM=-1,dM=G,1==(0|cM)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=dM,Ca=Da,za=Ba;continue a}for(k=XL;;){if(!((0|k)<(0|aM)))break;if(fM=tb+(k<<3)|0,gM=k+1|0,hM=tb+(gM<<3)|0,r=0,f[Ic>>2]=0|f[L_>>2],f[Ic+4>>2]=0|f[L_+4>>2],f[Jc>>2]=0|f[fM>>2],f[Jc+4>>2]=0|f[fM+4>>2],f[Kc>>2]=0|f[hM>>2],f[Kc+4>>2]=0|f[hM+4>>2],ya(194,0|b,0|Ic,0|Jc,0|Kc),iM=r,r=0,0!=(0|iM)&0!=(0|s)?(jM=0|Rw(0|f[iM>>2],0|v9,0|w9),0==(0|jM)&&Aa(0|iM,0|s),G=s):jM=-1,lM=G,1==(0|jM)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=lM,Ca=Da,za=Ba;continue a}mM=k+2|0,k=mM}nM=Ua>>>23,oM=511&nM,pM=tb+(oM<<3)|0,f[pM>>2]=0|f[L_>>2],f[pM+4>>2]=0|f[L_+4>>2],qM=b+92|0,rM=qM+416|0,f[rM>>2]=Ca,sM=Gb+4|0,tM=0|f[sM>>2],Ob=Nb,Mb=Lb,Fb=Eb,Db=Cb,ub=tb,sb=rb,Ua=tM,Gb=sM,ad=tM,Nb=Ob,Lb=Mb,Eb=Fb,Cb=Db,tb=ub,rb=sb,x9=583;continue b;case 65:if(uM=Ua>>>7,xM=3&uM,yM=2&xM,zM=0!=(0|yM),AM=Lb+20|0,BM=0|f[AM>>2],CM=Ua>>>9,DM=16383&CM,EM=BM+(DM<<2)|0,FM=0|f[EM>>2],zM){if(r=0,GM=0|xa(165,0|b,0|FM),IM=r,r=0,0!=(0|IM)&0!=(0|s)?(JM=0|Rw(0|f[IM>>2],0|v9,0|w9),0==(0|JM)&&Aa(0|IM,0|s),G=s):JM=-1,KM=G,1==(0|JM)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=KM,Ca=Da,za=Ba;continue a}i=GM}else{if(r=0,LM=0|xa(195,0|b,0|FM),MM=r,r=0,0!=(0|MM)&0!=(0|s)?(NM=0|Rw(0|f[MM>>2],0|v9,0|w9),0==(0|NM)&&Aa(0|MM,0|s),G=s):NM=-1,OM=G,1==(0|NM)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=OM,Ca=Da,za=Ba;continue a}i=LM}if(PM=1&xM,QM=0!=(0|PM),QM&&(RM=0|f[i>>2],TM=RM>>>11,UM=256|TM,VM=0|f[i>>2],WM=2097151&UM,XM=WM<<11,YM=2047&VM,ZM=YM|XM,f[i>>2]=ZM),$M=Ua>>>23,_M=511&$M,aN=tb+(_M<<3)|0,r=0,sa(133,0|W_,0|i),cN=r,r=0,0!=(0|cN)&0!=(0|s)?(dN=0|Rw(0|f[cN>>2],0|v9,0|w9),0==(0|dN)&&Aa(0|cN,0|s),G=s):dN=-1,eN=G,1==(0|dN)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=eN,Ca=Da,za=Ba;continue a}f[aN>>2]=0|f[W_>>2],f[aN+4>>2]=0|f[W_+4>>2],fN=b+92|0,gN=fN+416|0,f[gN>>2]=Ca,hN=Gb+4|0,iN=0|f[hN>>2],Ob=Nb,Mb=Lb,Fb=Eb,Db=Cb,ub=tb,sb=rb,Ua=iN,Gb=hN,ad=iN,Nb=Ob,Lb=Mb,Eb=Fb,Cb=Db,tb=ub,rb=sb,x9=583;continue b;case 66:if(bS=Ua>>>14,cS=511&bS,dS=Ua>>>23,eS=511&dS,fS=tb+(eS<<3)|0,gS=tb+(cS<<3)|0,hS=cS+1|0,jS=tb+(hS<<3)|0,kS=Ua>>>7,lS=127&kS,mS=255&lS,r=0,f[Rc>>2]=0|f[gS>>2],f[Rc+4>>2]=0|f[gS+4>>2],f[Sc>>2]=0|f[jS>>2],f[Sc+4>>2]=0|f[jS+4>>2],qa(200,0|_2,0|b,0|Rc,0|Sc,0|mS),nS=r,r=0,0!=(0|nS)&0!=(0|s)?(oS=0|Rw(0|f[nS>>2],0|v9,0|w9),0==(0|oS)&&Aa(0|nS,0|s),G=s):oS=-1,pS=G,1==(0|oS)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=pS,Ca=Da,za=Ba;continue a}f[fS>>2]=0|f[_2>>2],f[fS+4>>2]=0|f[_2+4>>2],qS=b+92|0,rS=qS+416|0,f[rS>>2]=Ca,sS=Gb+4|0,uS=0|f[sS>>2],Ob=Nb,Mb=Lb,Fb=Eb,Db=Cb,ub=tb,sb=rb,Ua=uS,Gb=sS,ad=uS,Nb=Ob,Lb=Mb,Eb=Fb,Cb=Db,tb=ub,rb=sb,x9=583;continue b;case 67:if(jN=Ua>>>23,kN=511&jN,lN=tb+(kN<<3)|0,nN=b+32|0,oN=0|f[nN>>2],r=0,sa(133,0|g0,0|oN),pN=r,r=0,0!=(0|pN)&0!=(0|s)?(qN=0|Rw(0|f[pN>>2],0|v9,0|w9),0==(0|qN)&&Aa(0|pN,0|s),G=s):qN=-1,rN=G,1==(0|qN)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=rN,Ca=Da,za=Ba;continue a}f[lN>>2]=0|f[g0>>2],f[lN+4>>2]=0|f[g0+4>>2],sN=Gb+4|0,tN=0|f[sN>>2],Ob=Nb,Mb=Lb,Fb=Eb,Db=Cb,ub=tb,sb=rb,Ua=tN,Gb=sN,ad=tN,Nb=Ob,Lb=Mb,Eb=Fb,Cb=Db,tb=ub,rb=sb,x9=583;continue b;case 68:if(uN=Ua>>>23,vN=511&uN,wN=Ua>>>14,yN=511&wN,zN=Cb+(yN<<2)|0,AN=0|f[zN>>2],BN=tb+(vN<<3)|0,f[r0>>2]=0|f[BN>>2],f[r0+4>>2]=0|f[BN+4>>2],CN=vN+1|0,DN=tb+(CN<<3)|0,f[C0>>2]=0|f[DN>>2],f[C0+4>>2]=0|f[DN+4>>2],EN=r0+4|0,FN=0|f[EN>>2],0==(0|FN)&&(HN=0|f[r0>>2],!(0!=(0|HN)))){if(KN=b+12|0,LN=0|f[KN>>2],MN=LN+16|0,NN=0|f[MN>>2],ON=NN+44|0,PN=0|f[ON>>2],r=0,sa(133,0|N0,0|PN),QN=r,r=0,0!=(0|QN)&0!=(0|s)?(RN=0|Rw(0|f[QN>>2],0|v9,0|w9),0==(0|RN)&&Aa(0|QN,0|s),G=s):RN=-1,SN=G,1==(0|RN)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=SN,Ca=Da,za=Ba;continue a}f[r0>>2]=0|f[N0>>2],f[r0+4>>2]=0|f[N0+4>>2]}if(r=0,f[Lc>>2]=0|f[r0>>2],f[Lc+4>>2]=0|f[r0+4>>2],f[Mc>>2]=0|f[C0>>2],f[Mc+4>>2]=0|f[C0+4>>2],UN=0|va(196,0|b,0|Lc,0|Mc,0|AN),VN=r,r=0,0!=(0|VN)&0!=(0|s)?(WN=0|Rw(0|f[VN>>2],0|v9,0|w9),0==(0|WN)&&Aa(0|VN,0|s),G=s):WN=-1,XN=G,1==(0|WN)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=XN,Ca=Da,za=Ba;continue a}if(YN=tb+(vN<<3)|0,r=0,sa(133,0|Y0,0|UN),ZN=r,r=0,0!=(0|ZN)&0!=(0|s)?($N=0|Rw(0|f[ZN>>2],0|v9,0|w9),0==(0|$N)&&Aa(0|ZN,0|s),G=s):$N=-1,_N=G,1==(0|$N)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=_N,Ca=Da,za=Ba;continue a}f[YN>>2]=0|f[Y0>>2],f[YN+4>>2]=0|f[Y0+4>>2],aO=b+92|0,bO=aO+416|0,f[bO>>2]=Ca,dO=Gb+4|0,eO=0|f[dO>>2],Ob=Nb,Mb=Lb,Fb=Eb,Db=Cb,ub=tb,sb=rb,Ua=eO,Gb=dO,ad=eO,Nb=Ob,Lb=Mb,Eb=Fb,Cb=Db,tb=ub,rb=sb,x9=583;continue b;case 69:if(fO=Ua>>>23,gO=511&fO,hO=Ua>>>14,iO=511&hO,jO=Cb+(iO<<2)|0,kO=0|f[jO>>2],lO=tb+(gO<<3)|0,f[h1>>2]=0|f[lO>>2],f[h1+4>>2]=0|f[lO+4>>2],mO=h1+4|0,oO=0|f[mO>>2],0==(0|oO)&&(qO=0|f[h1>>2],!(0!=(0|qO)))){if(sO=b+12|0,tO=0|f[sO>>2],uO=tO+16|0,vO=0|f[uO>>2],wO=vO+44|0,xO=0|f[wO>>2],r=0,sa(133,0|s1,0|xO),AO=r,r=0,0!=(0|AO)&0!=(0|s)?(BO=0|Rw(0|f[AO>>2],0|v9,0|w9),0==(0|BO)&&Aa(0|AO,0|s),G=s):BO=-1,CO=G,1==(0|BO)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=CO,Ca=Da,za=Ba;continue a}f[h1>>2]=0|f[s1>>2],f[h1+4>>2]=0|f[s1+4>>2]}if(r=0,f[Nc>>2]=0|f[h1>>2],f[Nc+4>>2]=0|f[h1+4>>2],DO=0|oa(197,0|b,0|Nc,0|kO),EO=r,r=0,0!=(0|EO)&0!=(0|s)?(FO=0|Rw(0|f[EO>>2],0|v9,0|w9),0==(0|FO)&&Aa(0|EO,0|s),G=s):FO=-1,GO=G,1==(0|FO)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=GO,Ca=Da,za=Ba;continue a}if(HO=tb+(gO<<3)|0,r=0,sa(133,0|D1,0|DO),IO=r,r=0,0!=(0|IO)&0!=(0|s)?(JO=0|Rw(0|f[IO>>2],0|v9,0|w9),0==(0|JO)&&Aa(0|IO,0|s),G=s):JO=-1,LO=G,1==(0|JO)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=LO,Ca=Da,za=Ba;continue a}f[HO>>2]=0|f[D1>>2],f[HO+4>>2]=0|f[D1+4>>2],MO=b+92|0,NO=MO+416|0,f[NO>>2]=Ca,OO=Gb+4|0,PO=0|f[OO>>2],Ob=Nb,Mb=Lb,Fb=Eb,Db=Cb,ub=tb,sb=rb,Ua=PO,Gb=OO,ad=PO,Nb=Ob,Lb=Mb,Eb=Fb,Cb=Db,tb=ub,rb=sb,x9=583;continue b;case 70:if(QO=Ua>>>23,RO=511&QO,SO=tb+(RO<<3)|0,f[O1>>2]=0|f[SO>>2],f[O1+4>>2]=0|f[SO+4>>2],r=0,TO=0|ta(141,0|b),UO=r,r=0,0!=(0|UO)&0!=(0|s)?(WO=0|Rw(0|f[UO>>2],0|v9,0|w9),0==(0|WO)&&Aa(0|UO,0|s),G=s):WO=-1,XO=G,1==(0|WO)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=XO,Ca=Da,za=Ba;continue a}if(YO=Gb+4|0,ZO=TO+28|0,f[ZO>>2]=YO,$O=TO+40|0,f[$O>>2]=RO,f[TO>>2]=0,_O=b+12|0,aP=0|f[_O>>2],bP=aP+4|0,cP=0|f[bP>>2],dP=TO+8|0,f[dP>>2]=cP,fP=TO+36|0,f[fP>>2]=0,gP=0|f[O1>>2],hP=TO+44|0,f[hP>>2]=gP,iP=b+12|0,jP=0|f[iP>>2],kP=jP+4|0,lP=0|f[kP>>2],mP=lP+(RO<<3)|0,f[kP>>2]=mP,nP=Lb+20|0,oP=0|f[nP>>2],qP=Ua>>>7,rP=65535&qP,sP=oP+(rP<<2)|0,tP=0|f[sP>>2],r=0,uP=0|xa(195,0|b,0|tP),vP=r,r=0,0!=(0|vP)&0!=(0|s)?(wP=0|Rw(0|f[vP>>2],0|v9,0|w9),0==(0|wP)&&Aa(0|vP,0|s),G=s):wP=-1,xP=G,1==(0|wP)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=xP,Ca=Da,za=Ba;continue a}if(yP=TO+44|0,zP=0|f[yP>>2],BP=uP+16|0,f[BP>>2]=zP,CP=TO+4|0,f[CP>>2]=uP,DP=0|f[uP>>2],EP=DP>>>11,FP=128&EP,!(0!=(0|FP))){if(mQ=uP+12|0,nQ=0|f[mQ>>2],oQ=nQ+12|0,pQ=0|f[oQ>>2],rQ=nQ+16|0,sQ=0|f[rQ>>2],tQ=nQ+2|0,uQ=0|e[tQ>>1],vQ=65535&uQ,r=0,ua(142,0|b,0|vQ,1),wQ=r,r=0,0!=(0|wQ)&0!=(0|s)?(xQ=0|Rw(0|f[wQ>>2],0|v9,0|w9),0==(0|xQ)&&Aa(0|wQ,0|s),G=s):xQ=-1,yQ=G,1==(0|xQ)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=sQ,Ja=pQ,La=Gb,Na=nQ,Pa=Nb,Xc=yQ,Ca=Da,za=Ba;continue a}zQ=nQ+2|0,AQ=0|e[zQ>>1],DQ=65535&AQ,EQ=TO+12|0,f[EQ>>2]=DQ,FQ=b+12|0,GQ=0|f[FQ>>2],HQ=GQ+4|0,IQ=0|f[HQ>>2],JQ=nQ+8|0,KQ=0|f[JQ>>2],LQ=0|f[KQ>>2],Ob=Nb,sb=rb,Ua=LQ,tb=IQ,Cb=sQ,Eb=pQ,Gb=KQ,Lb=nQ,ad=LQ,Nb=Ob,rb=sb,x9=583;continue b}if(HP=TO+12|0,f[HP>>2]=0,IP=b+12|0,JP=0|f[IP>>2],KP=JP+4|0,MP=0|f[KP>>2],NP=uP+12|0,OP=0|f[NP>>2],r=0,f[Oc>>2]=0|f[O1>>2],f[Oc+4>>2]=0|f[O1+4>>2],ua(0|OP,0|Z1,0|b,0|Oc),PP=r,r=0,0!=(0|PP)&0!=(0|s)?(QP=0|Rw(0|f[PP>>2],0|v9,0|w9),0==(0|QP)&&Aa(0|PP,0|s),G=s):QP=-1,RP=G,1==(0|QP)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=RP,Ca=Da,za=Ba;continue a}if(f[MP>>2]=0|f[Z1>>2],f[MP+4>>2]=0|f[Z1+4>>2],r=0,sa(146,0|b,0|Ca),SP=r,r=0,0!=(0|SP)&0!=(0|s)?(TP=0|Rw(0|f[SP>>2],0|v9,0|w9),0==(0|TP)&&Aa(0|SP,0|s),G=s):TP=-1,UP=G,1==(0|TP)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=UP,Ca=Da,za=Ba;continue a}if(VP=b+20|0,XP=0|f[VP>>2],0!=(0|XP)){Sa=rb,Va=tb,cb=Cb,eb=Eb,gb=Gb,yb=Lb,Ab=Nb,x9=272;continue b}if(ZP=b+12|0,$P=0|f[ZP>>2],_P=$P+16|0,aQ=0|f[_P>>2],bQ=aQ+8|0,cQ=0|f[bQ>>2],dQ=b+12|0,eQ=0|f[dQ>>2],gQ=eQ+4|0,f[gQ>>2]=cQ,r=0,ra(132,0|b),hQ=r,r=0,0!=(0|hQ)&0!=(0|s)?(iQ=0|Rw(0|f[hQ>>2],0|v9,0|w9),0==(0|iQ)&&Aa(0|hQ,0|s),G=s):iQ=-1,jQ=G,1==(0|iQ)){Da=Ca,Ba=za,na=rb,Fa=cQ,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=jQ,Ca=Da,za=Ba;continue a}kQ=Gb+4|0,lQ=0|f[kQ>>2],Ob=Nb,Mb=Lb,Fb=Eb,Db=Cb,sb=rb,Ua=lQ,tb=cQ,Gb=kQ,ad=lQ,Nb=Ob,Lb=Mb,Eb=Fb,Cb=Db,rb=sb,x9=583;continue b;case 71:if(MQ=Ua>>>23,OQ=511&MQ,PQ=tb+(OQ<<3)|0,QQ=0|f[PQ>>2],RQ=OQ+1|0,SQ=tb+(RQ<<3)|0,TQ=0|f[SQ>>2],UQ=Ua>>>14,VQ=511&UQ,WQ=Cb+(VQ<<2)|0,XQ=0|f[WQ>>2],r=0,ya(198,0|b,0|QQ,0|XQ,0|TQ),ZQ=r,r=0,0!=(0|ZQ)&0!=(0|s)?($Q=0|Rw(0|f[ZQ>>2],0|v9,0|w9),0==(0|$Q)&&Aa(0|ZQ,0|s),G=s):$Q=-1,_Q=G,1==(0|$Q)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=_Q,Ca=Da,za=Ba;continue a}aR=b+92|0,bR=aR+416|0,f[bR>>2]=Ca,cR=Gb+4|0,dR=0|f[cR>>2],Ob=Nb,Mb=Lb,Fb=Eb,Db=Cb,ub=tb,sb=rb,Ua=dR,Gb=cR,ad=dR,Nb=Ob,Lb=Mb,Eb=Fb,Cb=Db,tb=ub,rb=sb,x9=583;continue b;case 72:if(eR=Ua>>>23,fR=511&eR,gR=tb+(fR<<3)|0,iR=Ua>>>14,jR=511&iR,kR=tb+(jR<<3)|0,r=0,f[Pc>>2]=0|f[kR>>2],f[Pc+4>>2]=0|f[kR+4>>2],ua(199,0|j2,0|b,0|Pc),lR=r,r=0,0!=(0|lR)&0!=(0|s)?(mR=0|Rw(0|f[lR>>2],0|v9,0|w9),0==(0|mR)&&Aa(0|lR,0|s),G=s):mR=-1,nR=G,1==(0|mR)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=nR,Ca=Da,za=Ba;continue a}f[gR>>2]=0|f[j2>>2],f[gR+4>>2]=0|f[j2+4>>2],oR=b+92|0,pR=oR+416|0,f[pR>>2]=Ca,qR=Gb+4|0,rR=0|f[qR>>2],Ob=Nb,Mb=Lb,Fb=Eb,Db=Cb,ub=tb,sb=rb,Ua=rR,Gb=qR,ad=rR,Nb=Ob,Lb=Mb,Eb=Fb,Cb=Db,tb=ub,rb=sb,x9=583;continue b;case 73:if(tR=b+12|0,uR=0|f[tR>>2],vR=uR+16|0,wR=0|f[vR>>2],xR=wR+44|0,yR=0|f[xR>>2],0!=(0|yR)){if(NR=Ua>>>23,PR=511&NR,QR=tb+(PR<<3)|0,RR=b+12|0,SR=0|f[RR>>2],TR=SR+16|0,UR=0|f[TR>>2],VR=UR+44|0,WR=0|f[VR>>2],r=0,sa(133,0|Q2,0|WR),XR=r,r=0,0!=(0|XR)&0!=(0|s)?(YR=0|Rw(0|f[XR>>2],0|v9,0|w9),0==(0|YR)&&Aa(0|XR,0|s),G=s):YR=-1,$R=G,1==(0|YR)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=$R,Ca=Da,za=Ba;continue a}f[QR>>2]=0|f[Q2>>2],f[QR+4>>2]=0|f[Q2+4>>2],_R=Gb+4|0,aS=0|f[_R>>2],Ob=Nb,Mb=Lb,Fb=Eb,Db=Cb,ub=tb,sb=rb,Ua=aS,Gb=_R,ad=aS,Nb=Ob,Lb=Mb,Eb=Fb,Cb=Db,tb=ub,rb=sb,x9=583;continue b}if(r=0,AR=0|xa(135,0|b,69204),BR=r,r=0,0!=(0|BR)&0!=(0|s)?(CR=0|Rw(0|f[BR>>2],0|v9,0|w9),0==(0|CR)&&Aa(0|BR,0|s),G=s):CR=-1,ER=G,1==(0|CR)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=ER,Ca=Da,za=Ba;continue a}if(r=0,ya(171,0|F2,0|b,56788,25),FR=r,r=0,0!=(0|FR)&0!=(0|s)?(GR=0|Rw(0|f[FR>>2],0|v9,0|w9),0==(0|GR)&&Aa(0|FR,0|s),G=s):GR=-1,HR=G,1==(0|GR)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=HR,Ca=Da,za=Ba;continue a}if(r=0,f[Qc>>2]=0|f[F2>>2],f[Qc+4>>2]=0|f[F2+4>>2],ya(172,0|u2,0|b,0|AR,0|Qc),IR=r,r=0,0!=(0|IR)&0!=(0|s)?(JR=0|Rw(0|f[IR>>2],0|v9,0|w9),0==(0|JR)&&Aa(0|IR,0|s),G=s):JR=-1,KR=G,1==(0|JR)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=KR,Ca=Da,za=Ba;continue a}LR=0|f[u2>>2],MR=b+20|0,f[MR>>2]=LR,Sa=rb,Va=tb,cb=Cb,eb=Eb,gb=Gb,yb=Lb,Ab=Nb,x9=272;continue b;case 74:if(vS=Ua>>>23,wS=511&vS,xS=Ua>>>14,yS=511&xS,zS=Ua>>>7,AS=127&zS,r=0,f[s9>>2]=wS,t9=s9+4|0,f[t9>>2]=yS,u9=s9+8|0,f[u9>>2]=AS,xa(201,56814,0|s9),BS=r,r=0,0!=(0|BS)&0!=(0|s)?(CS=0|Rw(0|f[BS>>2],0|v9,0|w9),0==(0|CS)&&Aa(0|BS,0|s),G=s):CS=-1,DS=G,1==(0|CS)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=DS,Ca=Da,za=Ba;continue a}GS=Gb+4|0,HS=0|f[GS>>2],Ob=Nb,Mb=Lb,Fb=Eb,Db=Cb,ub=tb,sb=rb,Ua=HS,Gb=GS,ad=HS,Nb=Ob,Lb=Mb,Eb=Fb,Cb=Db,tb=ub,rb=sb,x9=583;continue b;default:x9=584;break a}if(90==(0|x9)){if(x9=0,Z$=$>>>23,$$=511&Z$,_$=$>>>7,a_=127&_$,b_=$>>>14,c_=511&b_,d_=Cb+(c_<<2)|0,f_=0|f[d_>>2],g_=tb+($$<<3)|0,f[Mp>>2]=0|f[g_>>2],f[Mp+4>>2]=0|f[g_+4>>2],h_=127&$,i_=33!=(0|h_),i_&&(j_=127==(0|a_),j_?(k_=$$+2|0,l_=tb+(k_<<3)|0,m_=l_+4|0,f[m_>>2]=0,n_=$$+2|0,gd=n_):(o_=$$+a_|0,q_=o_+1|0,r_=tb+(q_<<3)|0,s_=r_+4|0,f[s_>>2]=0,t_=$$+a_|0,u_=t_+1|0,gd=u_),v_=tb+(gd<<3)|0,f[v_>>2]=0),r=0,f[Xb>>2]=0|f[Mp>>2],f[Xb+4>>2]=0|f[Mp+4>>2],w_=0|xa(138,0|b,0|Xb),x_=r,r=0,0!=(0|x_)&0!=(0|s)?(y_=0|Rw(0|f[x_>>2],0|v9,0|w9),0==(0|y_)&&Aa(0|x_,0|s),G=s):y_=-1,z_=G,1==(0|y_)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=z_,Ca=Da,za=Ba;continue a}if(f[In>>2]=w_,r=0,B_=0|oa(139,0|b,0|In,0|f_),C_=r,r=0,0!=(0|C_)&0!=(0|s)?(D_=0|Rw(0|f[C_>>2],0|v9,0|w9),0==(0|D_)&&Aa(0|C_,0|s),G=s):D_=-1,E_=G,1==(0|D_)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=E_,Ca=Da,za=Ba;continue a}F_=0!=(0|B_);do{if(!F_){if(r=0,sa(143,0|St,0|f_),G_=r,r=0,0!=(0|G_)&0!=(0|s)?(H_=0|Rw(0|f[G_>>2],0|v9,0|w9),0==(0|H_)&&Aa(0|G_,0|s),G=s):H_=-1,I_=G,1==(0|H_)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=I_,Ca=Da,za=Ba;continue a}if(r=0,J_=0|oa(140,0|b,65621,14),K_=r,r=0,0!=(0|K_)&0!=(0|s)?(M_=0|Rw(0|f[K_>>2],0|v9,0|w9),0==(0|M_)&&Aa(0|K_,0|s),G=s):M_=-1,N_=G,1==(0|M_)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=N_,Ca=Da,za=Ba;continue a}if(r=0,O_=0|oa(139,0|b,0|In,0|J_),P_=r,r=0,0!=(0|P_)&0!=(0|s)?(Q_=0|Rw(0|f[P_>>2],0|v9,0|w9),0==(0|Q_)&&Aa(0|P_,0|s),G=s):Q_=-1,R_=G,1==(0|Q_)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=R_,Ca=Da,za=Ba;continue a}if(!(0!=(0|O_))){if(127==(0|a_))U_=$$+1|0,V_=tb+(U_<<3)|0,f[Vv>>2]=0|f[V_>>2],f[Vv+4>>2]=0|f[V_+4>>2];else{if(X_=tb+($$<<3)|0,Y_=X_+8|0,r=0,ya(167,0|ay,0|b,0|a_,0|Y_),Z_=r,r=0,0!=(0|Z_)&0!=(0|s)?($_=0|Rw(0|f[Z_>>2],0|v9,0|w9),0==(0|$_)&&Aa(0|Z_,0|s),G=s):$_=-1,__=G,1==(0|$_)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=__,Ca=Da,za=Ba;continue a}f[Vv>>2]=0|f[ay>>2],f[Vv+4>>2]=0|f[ay+4>>2]}if(r=0,f[Yb>>2]=0|f[Mp>>2],f[Yb+4>>2]=0|f[Mp+4>>2],f[Zb>>2]=0|f[Vv>>2],f[Zb+4>>2]=0|f[Vv+4>>2],ya(168,0|b,0|f_,0|Yb,0|Zb),a0=r,r=0,0!=(0|a0)&0!=(0|s)?(b0=0|Rw(0|f[a0>>2],0|v9,0|w9),0==(0|b0)&&Aa(0|a0,0|s),G=s):b0=-1,c0=G,1==(0|b0)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=c0,Ca=Da,za=Ba;continue a}}if(127==(0|a_)){if(e0=$$+1|0,h0=tb+(e0<<3)|0,r=0,f[$b>>2]=0|f[h0>>2],f[$b+4>>2]=0|f[h0+4>>2],f[_b>>2]=0|f[St>>2],f[_b+4>>2]=0|f[St+4>>2],ya(169,0|dA,0|b,0|$b,0|_b),i0=r,r=0,0!=(0|i0)&0!=(0|s)?(j0=0|Rw(0|f[i0>>2],0|v9,0|w9),0==(0|j0)&&Aa(0|i0,0|s),G=s):j0=-1,k0=G,1==(0|j0)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=k0,Ca=Da,za=Ba;continue a}R=J_,S=O_,T=a_;break}if(l0=tb+($$<<3)|0,m0=l0+16|0,n0=tb+($$<<3)|0,o0=n0+8|0,p0=a_+1|0,r=0,ua(170,0|m0,0|o0,0|p0),q0=r,r=0,0!=(0|q0)&0!=(0|s)?(s0=0|Rw(0|f[q0>>2],0|v9,0|w9),0==(0|s0)&&Aa(0|q0,0|s),G=s):s0=-1,t0=G,1==(0|s0)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=t0,Ca=Da,za=Ba;continue a}u0=$$+1|0,v0=tb+(u0<<3)|0,f[v0>>2]=0|f[St>>2],f[v0+4>>2]=0|f[St+4>>2],R=J_,S=O_,T=p0;break}R=f_,S=B_,T=a_}while(0);if(r=0,w0=0|ta(141,0|b),x0=r,r=0,0!=(0|x0)&0!=(0|s)?(y0=0|Rw(0|f[x0>>2],0|v9,0|w9),0==(0|y0)&&Aa(0|x0,0|s),G=s):y0=-1,z0=G,1==(0|y0)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=z0,Ca=Da,za=Ba;continue a}if(f[w0>>2]=R,A0=w0+4|0,f[A0>>2]=S,B0=b+12|0,D0=0|f[B0>>2],E0=D0+4|0,F0=0|f[E0>>2],G0=w0+8|0,f[G0>>2]=F0,H0=0|f[In>>2],I0=w0+44|0,f[I0>>2]=H0,J0=Gb+4|0,K0=w0+28|0,f[K0>>2]=J0,L0=w0+40|0,f[L0>>2]=$$,M0=b+12|0,O0=0|f[M0>>2],P0=O0+4|0,Q0=0|f[P0>>2],R0=Q0+($$<<3)|0,f[P0>>2]=R0,S0=0|f[S>>2],T0=S0>>>11,U0=128&T0,!(0!=(0|U0))){if(a2=b+12|0,b2=0|f[a2>>2],c2=b2+16|0,d2=0|f[c2>>2],e2=d2+4|0,f[e2>>2]=S,f2=S+12|0,g2=0|f[f2>>2],h2=g2+12|0,k2=0|f[h2>>2],l2=g2+16|0,m2=0|f[l2>>2],n2=g2+2|0,o2=0|e[n2>>1],p2=65535&o2,q2=w0+12|0,f[q2>>2]=p2,127==(0|T)){if(s2=w0+36|0,f[s2>>2]=-1,t2=g2+2|0,v2=0|e[t2>>1],w2=65535&v2,x2=(0|w2)<3,x2?Wc=3:(y2=g2+2|0,z2=0|e[y2>>1],A2=65535&z2,Wc=A2),r=0,ua(142,0|b,0|Wc,3),B2=r,r=0,0!=(0|B2)&0!=(0|s)?(C2=0|Rw(0|f[B2>>2],0|v9,0|w9),0==(0|C2)&&Aa(0|B2,0|s),G=s):C2=-1,D2=G,1==(0|C2)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=m2,Ja=k2,La=Gb,Na=g2,Pa=S,Xc=D2,Ca=Da,za=Ba;continue a}}else if(E2=w0+36|0,f[E2>>2]=T,G2=g2+2|0,H2=0|e[G2>>1],I2=65535&H2,J2=T+2|0,r=0,ua(142,0|b,0|I2,0|J2),K2=r,r=0,0!=(0|K2)&0!=(0|s)?(L2=0|Rw(0|f[K2>>2],0|v9,0|w9),0==(0|L2)&&Aa(0|K2,0|s),G=s):L2=-1,M2=G,1==(0|L2)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=m2,Ja=k2,La=Gb,Na=g2,Pa=S,Xc=M2,Ca=Da,za=Ba;continue a}N2=b+12|0,O2=0|f[N2>>2],P2=O2+4|0,R2=0|f[P2>>2],S2=g2+8|0,T2=0|f[S2>>2],U2=0|f[T2>>2],sb=rb,Ua=U2,tb=R2,Cb=m2,Eb=k2,Gb=T2,Lb=g2,Nb=S,ad=U2,rb=sb,x9=583;continue}if(W0=127==(0|T),W0?(X0=w0+36|0,f[X0>>2]=-1,pd=3):(Z0=w0+36|0,f[Z0>>2]=T,$0=T+2|0,pd=$0),_0=w0+12|0,f[_0>>2]=pd,a1=S+12|0,b1=0|f[a1>>2],r=0,f[ac>>2]=0|f[Mp>>2],f[ac+4>>2]=0|f[Mp+4>>2],ua(0|b1,0|gC,0|b,0|ac),c1=r,r=0,0!=(0|c1)&0!=(0|s)?(d1=0|Rw(0|f[c1>>2],0|v9,0|w9),0==(0|d1)&&Aa(0|c1,0|s),G=s):d1=-1,e1=G,1==(0|d1)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=e1,Ca=Da,za=Ba;continue a}if(f[Pr>>2]=0|f[gC>>2],f[Pr+4>>2]=0|f[gC+4>>2],f1=b+12|0,g1=0|f[f1>>2],i1=g1+4|0,j1=0|f[i1>>2],f[j1>>2]=0|f[Pr>>2],f[j1+4>>2]=0|f[Pr+4>>2],r=0,sa(146,0|b,0|Ca),k1=r,r=0,0!=(0|k1)&0!=(0|s)?(l1=0|Rw(0|f[k1>>2],0|v9,0|w9),0==(0|l1)&&Aa(0|k1,0|s),G=s):l1=-1,m1=G,1==(0|l1)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=Lb,Pa=Nb,Xc=m1,Ca=Da,za=Ba;continue a}if(n1=b+20|0,o1=0|f[n1>>2],0!=(0|o1)){Sa=rb,Va=tb,cb=Cb,eb=Eb,gb=Gb,yb=Lb,Ab=Nb,x9=272;continue}if(q1=b+12|0,r1=0|f[q1>>2],t1=r1+16|0,u1=0|f[t1>>2],v1=u1+44|0,w1=0|f[v1>>2],x1=0!=(0|w1),x1?(Xa=Cb,Ya=Eb,$a=Lb,_a=Nb):(y1=u1+-48|0,z1=y1+4|0,A1=0|f[z1>>2],B1=0|f[A1>>2],C1=B1>>>11,E1=128&C1,F1=0!=(0|E1),F1?(Xa=Cb,Ya=Eb,$a=Lb,_a=Nb):(G1=u1+-48|0,H1=G1+4|0,I1=0|f[H1>>2],J1=I1+12|0,K1=0|f[J1>>2],L1=K1+12|0,M1=0|f[L1>>2],N1=K1+16|0,P1=0|f[N1>>2],Xa=P1,Ya=M1,$a=K1,_a=I1)),Q1=u1+8|0,R1=0|f[Q1>>2],S1=b+12|0,T1=0|f[S1>>2],U1=T1+4|0,f[U1>>2]=R1,V1=u1+28|0,W1=0|f[V1>>2],r=0,ra(132,0|b),X1=r,r=0,0!=(0|X1)&0!=(0|s)?(Y1=0|Rw(0|f[X1>>2],0|v9,0|w9),0==(0|Y1)&&Aa(0|X1,0|s),G=s):Y1=-1,$1=G,1==(0|Y1)){Da=Ca,Ba=za,na=rb,Fa=R1,Ha=Xa,Ja=Ya,La=W1,Na=$a,Pa=_a,Xc=$1,Ca=Da,za=Ba;continue a}_1=0|f[W1>>2],sb=rb,Ua=_1,tb=R1,Cb=Xa,Eb=Ya,Gb=W1,Lb=$a,Nb=_a,ad=_1,rb=sb,x9=583;continue}if(270==(0|x9)&&(x9=0,Dl=Ua>>>23,Gl=511&Dl,Hl=511&Gl,Il=Hl<<23,Jl=41|Il,Ea=Jl,pb=ib,qb=jb),Kl=b+20|0,Ll=0|f[Kl>>2],0!=(0|Ll)){Sa=rb,Va=tb,cb=Cb,eb=Eb,gb=Gb,yb=pb,Ab=qb,x9=272;continue}Io=b+12|0,Jo=0|f[Io>>2],Ko=Jo+16|0,Mo=0|f[Ko>>2],No=b+12|0,Oo=0|f[No>>2],Po=Oo+16|0,Qo=0|f[Po>>2],Ro=Qo+20|0,So=0|f[Ro>>2],To=Ea>>>23,Uo=511&To,Vo=tb+(Uo<<3)|0,f[PW>>2]=0|f[Vo>>2],f[PW+4>>2]=0|f[Vo+4>>2],Xo=Ea>>>14,Yo=511&Xo;c:switch(0|Yo){case 2:if(Zo=qb+20|0,$o=0|f[Zo>>2],0!=(0|$o)){if(ap=0|f[qb>>2],bp=ap>>>11,cp=256&bp,!(0!=(0|cp))){if(r=0,ep=0|xa(179,0|b,0|qb),gp=r,r=0,0!=(0|gp)&0!=(0|s)?(hp=0|Rw(0|f[gp>>2],0|v9,0|w9),0==(0|hp)&&Aa(0|gp,0|s),G=s):hp=-1,ip=G,1==(0|hp)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=pb,Pa=qb,Xc=ip,Ca=Da,za=Ba;continue a}if(jp=ep+20|0,kp=0|f[jp>>2],!((0|kp)>=0)){if(r=0,sa(180,0|b,0),mp=r,r=0,0!=(0|mp)&0!=(0|s)?(np=0|Rw(0|f[mp>>2],0|v9,0|w9),0==(0|np)&&Aa(0|mp,0|s),G=s):np=-1,op=G,1==(0|np)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=pb,Pa=qb,Xc=op,Ca=Da,za=Ba;continue a}Sa=rb,Va=tb,cb=Cb,eb=Eb,gb=Gb,yb=pb,Ab=qb,x9=272;continue b}if(pp=b+12|0,rp=0|f[pp>>2],sp=rp+20|0,tp=0|f[sp>>2],up=ep+20|0,vp=0|f[up>>2],wp=tp+(48*vp|0)|0,xp=b+12|0,yp=0|f[xp>>2],zp=yp+20|0,Ap=0|f[zp>>2],!((0|wp)==(0|Ap))){Gp=b+12|0,Hp=0|f[Gp>>2],Ip=Hp+16|0,Jp=0|f[Ip>>2],Kp=Jp+8|0,Lp=0|f[Kp>>2],Op=b+12|0,Pp=0|f[Op>>2],Qp=Pp+4|0,f[Qp>>2]=Lp,Rp=b+12|0,Sp=0|f[Rp>>2],Tp=Sp+16|0,f[Tp>>2]=wp,B=So,ha=wp;break c}if(r=0,sa(180,0|b,0),Dp=r,r=0,0!=(0|Dp)&0!=(0|s)?(Ep=0|Rw(0|f[Dp>>2],0|v9,0|w9),0==(0|Ep)&&Aa(0|Dp,0|s),G=s):Ep=-1,Fp=G,1==(0|Ep)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=pb,Pa=qb,Xc=Fp,Ca=Da,za=Ba;continue a}Sa=rb,Va=tb,cb=Cb,eb=Eb,gb=Gb,yb=pb,Ab=qb,x9=272;continue b}x9=309}else x9=309;break;case 0:x9=309;break;case 1:if(Uq=qb+20|0,Vq=0|f[Uq>>2],0!=(0|Vq)&&(Xq=qb+20|0,Yq=0|f[Xq>>2],$q=Yq+20|0,_q=0|f[$q>>2],(0|_q)>=0)){for(er=b+12|0,fr=0|f[er>>2],gr=fr+16|0,hr=0|f[gr>>2],jr=b+12|0,kr=0|f[jr>>2],lr=kr+20|0,mr=0|f[lr>>2],nr=(0|hr)==(0|mr),nr&&(or=b+12|0,pr=0|f[or>>2],qr=pr+16|0,rr=0|f[qr>>2],sr=rr+28|0,ur=0|f[sr>>2],0!=(0|ur)&&(wr=b+12|0,xr=0|f[wr>>2],yr=0|f[xr>>2],zr=b+12|0,f[zr>>2]=yr,f[xr>>2]=0)),Ar=b+12|0,Br=0|f[Ar>>2],Cr=Br+16|0,Dr=0|f[Cr>>2],Fr=Dr+8|0,Gr=0|f[Fr>>2],Hr=b+12|0,Ir=0|f[Hr>>2],Jr=Ir+4|0,f[Jr>>2]=Gr,Kr=b+12|0,Lr=0|f[Kr>>2],Mr=Lr+20|0,Nr=0|f[Mr>>2],Or=qb+20|0,Rr=0|f[Or>>2],Sr=Rr+20|0,Tr=0|f[Sr>>2],Ur=Nr+(48*Tr|0)|0,Vr=Ur+48|0,Wr=b+12|0,Xr=0|f[Wr>>2],Yr=Xr+16|0,f[Yr>>2]=Vr,C=Dr;;){if(Zr=b+12|0,$r=0|f[Zr>>2],as=$r+16|0,bs=0|f[as>>2],!(C>>>0>bs>>>0)){B=So,ha=C;break c}if(ds=C+-48|0,es=ds+40|0,fs=0|f[es>>2],-1==(0|fs))break;ls=C+-48|0,C=ls}hs=b+12|0,is=0|f[hs>>2],js=is+16|0,f[js>>2]=C,B=So,ha=C;break c}if(r=0,sa(180,0|b,1),br=r,r=0,0!=(0|br)&0!=(0|s)?(cr=0|Rw(0|f[br>>2],0|v9,0|w9),0==(0|cr)&&Aa(0|br,0|s),G=s):cr=-1,dr=G,1==(0|cr)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=pb,Pa=qb,Xc=dr,Ca=Da,za=Ba;continue a}Sa=rb,Va=tb,cb=Cb,eb=Eb,gb=Gb,yb=pb,Ab=qb,x9=272;continue b;default:B=So,ha=Mo}if(309==(0|x9)){x9=0,Up=b+12|0,Vp=0|f[Up>>2],Wp=Vp+20|0,Xp=0|f[Wp>>2],Zp=(0|Mo)==(0|Xp);do{if(Zp){if($p=b+12|0,_p=0|f[$p>>2],aq=0|f[_p>>2],!(0!=(0|aq))){if(r=0,sa(180,0|b,0),cq=r,r=0,0!=(0|cq)&0!=(0|s)?(dq=0|Rw(0|f[cq>>2],0|v9,0|w9),0==(0|dq)&&Aa(0|cq,0|s),G=s):dq=-1,eq=G,1==(0|dq)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=pb,Pa=qb,Xc=eq,Ca=Da,za=Ba;continue a}Sa=rb,Va=tb,cb=Cb,eb=Eb,gb=Gb,yb=pb,Ab=qb,x9=272;continue b}if(fq=b+12|0,gq=0|f[fq>>2],iq=0|f[gq>>2],jq=iq+16|0,kq=0|f[jq>>2],lq=b+12|0,mq=0|f[lq>>2],nq=0|f[mq>>2],oq=nq+20|0,pq=0|f[oq>>2],!((0|kq)==(0|pq))){Fq=b+12|0,Gq=0|f[Fq>>2],Hq=Gq+44|0,f[Hq>>2]=5,Iq=b+12|0,Jq=0|f[Iq>>2],Kq=0|f[Jq>>2],Lq=b+12|0,f[Lq>>2]=Kq,Mq=b+12|0,Nq=0|f[Mq>>2],Pq=Nq+44|0,f[Pq>>2]=1;break}if(r=0,rq=0|xa(135,0|b,56763),tq=r,r=0,0!=(0|tq)&0!=(0|s)?(uq=0|Rw(0|f[tq>>2],0|v9,0|w9),0==(0|uq)&&Aa(0|tq,0|s),G=s):uq=-1,vq=G,1==(0|uq)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=pb,Pa=qb,Xc=vq,Ca=Da,za=Ba;continue a}if(r=0,ya(171,0|jX,0|b,56774,13),wq=r,r=0,0!=(0|wq)&0!=(0|s)?(xq=0|Rw(0|f[wq>>2],0|v9,0|w9),0==(0|xq)&&Aa(0|wq,0|s),G=s):xq=-1,yq=G,1==(0|xq)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=pb,Pa=qb,Xc=yq,Ca=Da,za=Ba;continue a}if(r=0,f[mc>>2]=0|f[jX>>2],f[mc+4>>2]=0|f[jX+4>>2],ya(172,0|$W,0|b,0|rq,0|mc),zq=r,r=0,0!=(0|zq)&0!=(0|s)?(Aq=0|Rw(0|f[zq>>2],0|v9,0|w9),0==(0|Aq)&&Aa(0|zq,0|s),G=s):Aq=-1,Bq=G,1==(0|Aq)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=pb,Pa=qb,Xc=Bq,Ca=Da,za=Ba;continue a}Cq=0|f[$W>>2],Eq=b+20|0,f[Eq>>2]=Cq,Sa=rb,Va=tb,cb=Cb,eb=Eb,gb=Gb,yb=pb,Ab=qb,x9=272;continue b}}while(0);Qq=b+12|0,Rq=0|f[Qq>>2],Sq=Rq+16|0,Tq=0|f[Sq>>2],B=So,ha=Tq}for(;;){if(ms=b+12|0,ns=0|f[ms>>2],os=ns+16|0,ps=0|f[os>>2],qs=ps+-48|0,rs=qs+20|0,ss=0|f[rs>>2],!((0|B)>(0|ss)))break;if(us=B+-1|0,r=0,sa(166,0|b,0|us),ws=r,r=0,0!=(0|ws)&0!=(0|s)?(xs=0|Rw(0|f[ws>>2],0|v9,0|w9),0==(0|xs)&&Aa(0|ws,0|s),G=s):xs=-1,ys=G,1==(0|xs)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=pb,Pa=qb,Xc=ys,Ca=Da,za=Ba;continue a}ia=ha,B=us,ha=ia}if(r=0,ra(132,0|b),zs=r,r=0,0!=(0|zs)&0!=(0|s)?(As=0|Rw(0|f[zs>>2],0|v9,0|w9),0==(0|As)&&Aa(0|zs,0|s),G=s):As=-1,Bs=G,1==(0|As)){Da=Ca,Ba=za,na=rb,Fa=tb,Ha=Cb,Ja=Eb,La=Gb,Na=pb,Pa=qb,Xc=Bs,Ca=Da,za=Ba;continue a}if(Cs=ha+40|0,Ds=0|f[Cs>>2],Es=ha+28|0,Fs=0|f[Es>>2],Hs=ha+8|0,Is=0|f[Hs>>2],Js=b+12|0,Ks=0|f[Js>>2],Ls=Ks+4|0,f[Ls>>2]=Is,-1==(0|Ds)){x9=337;break a}Ns=b+12|0,Os=0|f[Ns>>2],Ps=Os+16|0,Qs=0|f[Ps>>2],Ss=Qs+4|0,Ts=0|f[Ss>>2],Us=Ts+12|0,Vs=0|f[Us>>2],Ws=Vs+12|0,Xs=0|f[Ws>>2],Ys=Vs+16|0,Zs=0|f[Ys>>2],$s=Is+(Ds<<3)|0,f[$s>>2]=0|f[PW>>2],f[$s+4>>2]=0|f[PW+4>>2],ab=rb,bb=Is,mb=Zs,nb=Xs,ob=Fs,Hb=Vs,Ib=Ts}_s=0|f[ob>>2],Ua=_s,rb=ab,tb=bb,Cb=mb,Eb=nb,Gb=ob,Lb=Hb,Nb=Ib,ad=_s,x9=583}if(283!=(0|x9)){for(290==(0|x9)&&(x9=0,Kn=Hn+8|0,Ln=0|f[Kn>>2],Mn=b+12|0,Nn=0|f[Mn>>2],On=Nn+4|0,f[On>>2]=Ln,kb=Sa,lb=Ln,vb=cb,wb=eb,xb=gb,Jb=yb,Kb=Ab),IS=b+12|0,JS=0|f[IS>>2],KS=JS+16|0,LS=0|f[KS>>2],MS=b+12|0,NS=0|f[MS>>2],OS=NS+20|0,PS=0|f[OS>>2],RS=(0|LS)==(0|PS),RS?Yc=0:(SS=b+12|0,TS=0|f[SS>>2],US=TS+16|0,VS=0|f[US>>2],WS=VS+-48|0,XS=WS+20|0,YS=0|f[XS>>2],Yc=YS),ZS=b+12|0,$S=0|f[ZS>>2],aT=$S+16|0,bT=0|f[aT>>2],cT=bT+20|0,dT=0|f[cT>>2],h=dT;;){if(!((0|h)>(0|Yc)))break;if(fT=h+-1|0,r=0,sa(166,0|b,0|fT),gT=r,r=0,0!=(0|gT)&0!=(0|s)?(hT=0|Rw(0|f[gT>>2],0|v9,0|w9),0==(0|hT)&&Aa(0|gT,0|s),G=s):hT=-1,iT=G,1==(0|hT)){Da=Ca,Ba=za,na=kb,Fa=lb,Ha=vb,Ja=wb,La=xb,Na=Jb,Pa=Kb,Xc=iT,Ca=Da,za=Ba;continue a}h=fT}if(jT=b+12|0,lT=0|f[jT>>2],mT=lT+16|0,nT=0|f[mT>>2],oT=nT+32|0,f[oT>>2]=0,f[b>>2]=za,pT=b+20|0,qT=0|f[pT>>2],!(0!=(0|qT))){x9=571;break}if(sT=b+20|0,tT=0|f[sT>>2],r=0,sa(133,0|a,0|tT),uT=r,r=0,0!=(0|uT)&0!=(0|s)?(wT=0|Rw(0|f[uT>>2],0|v9,0|w9),0==(0|wT)&&Aa(0|uT,0|s),G=s):wT=-1,xT=G,!(1==(0|wT))){x9=570;break}Da=Ca,Ba=za,na=kb,Fa=lb,Ha=vb,Ja=wb,La=xb,Na=Jb,Pa=Kb,Xc=xT,Ca=Da,za=Ba}else x9=0,f[b>>2]=za,r=0,sa(178,0|za,1),jn=r,r=0,0!=(0|jn)&0!=(0|s)?(kn=0|Rw(0|f[jn>>2],0|v9,0|w9),0==(0|kn)&&Aa(0|jn,0|s),G=s):kn=-1,ln=G,Da=Ca,Ba=za,na=Sa,Fa=Va,Ha=cb,Ja=eb,La=gb,Na=yb,Pa=Ab,Xc=ln,Ca=Da,za=Ba}else X=1,Y=za,Z=Ca,_=Fa,aa=Ha,ba=Ja,da=La,ea=Na,fa=Pa,x9=3}return 337==(0|x9)?(f[b>>2]=za,f[a>>2]=0|f[PW>>2],f[a+4>>2]=0|f[PW+4>>2],Hw(0|v9),void(o=y9)):570==(0|x9)?(Hw(0|v9),void(o=y9)):571==(0|x9)?(yT=0|e[Jb>>1],zT=65535&yT,AT=lb+(zT<<3)|0,f[a>>2]=0|f[AT>>2],f[a+4>>2]=0|f[AT+4>>2],Hw(0|v9),void(o=y9)):void 0}function kk(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;for(C=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),u=a,v=b,x=u,y=x+12|0,z=0|f[y>>2],A=z+16|0,c=0|f[A>>2],d=c+4|0,e=0|f[d>>2],g=e+20|0,h=0|f[g>>2],w=h;;){if(i=v,j=i+-1|0,v=j,k=0!=(0|i),l=w,!k){B=6;break}if(!(0!=(0|l))){B=4;break}q=w,r=q+4|0,s=0|f[r>>2],w=s}return 4==(0|B)?(n=0,t=n,o=C,0|t):6==(0|B)?(n=l,t=n,o=C,0|t):0}function lk(a,b){a|=0,b|=0;var c=0,d=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,$a=0,_a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,kb=0;return kb=o,o=o+48|0,(0|o)>=(0|p)&&ca(48),c=kb+32|0,Pa=kb,C=a,N=b,$a=C,d=$a+12|0,s=0|f[d>>2],u=s+4|0,v=0|f[u>>2],ta=v,w=N,(0|w)<0?void(o=kb):(y=C,z=y+12|0,A=0|f[z>>2],B=A+36|0,D=0|f[B>>2],E=N,F=D+(E<<2)|0,G=0|f[F>>2],Y=G,H=Y,0!=(0|H)?(J=C,K=J+12|0,L=0|f[K>>2],M=L+16|0,O=0|f[M>>2],P=O+20|0,Q=0|f[P>>2],R=N,S=(0|Q)>(0|R),S&&(T=N,U=C,V=U+12|0,W=0|f[V>>2],X=W+16|0,Z=0|f[X>>2],$=Z+20|0,f[$>>2]=T),_=C,aa=0|ek(_),ia=aa,ba=C,da=ba+12|0,ea=0|f[da>>2],fa=ea+4|0,ga=0|f[fa>>2],ha=ia,ja=ha+8|0,f[ja>>2]=ga,ka=ia,la=ka+-48|0,ma=0|f[la>>2],na=ia,f[na>>2]=ma,oa=ia,pa=oa+40|0,f[pa>>2]=-1,qa=ia,ra=qa+36|0,f[ra>>2]=0,sa=Y,ua=ia,va=ua+4|0,f[va>>2]=sa,wa=Y,xa=wa+12|0,ya=0|f[xa>>2],za=ya+2|0,Aa=0|e[za>>1],Ba=65535&Aa,Ca=ia,Da=Ca+12|0,f[Da>>2]=Ba,Fa=Y,Ga=Fa+16|0,Ha=0|f[Ga>>2],Ia=ia,Ja=Ia+44|0,f[Ja>>2]=Ha,Ka=C,La=Ka+12|0,Ma=0|f[La>>2],Na=Ma+4|0,Oa=0|f[Na>>2],Qa=ia,Ra=Qa+-48|0,Sa=Ra+12|0,Ta=0|f[Sa>>2],Ua=Oa+(Ta<<3)|0,Va=C,Wa=Va+12|0,Xa=0|f[Wa>>2],Ya=Xa+4|0,f[Ya>>2]=Ua,Za=C,_a=Za+20|0,ab=0|f[_a>>2],Ea=ab,bb=C,cb=bb+20|0,f[cb>>2]=0,db=C,eb=Y,fb=ta,f[c>>2]=0|f[fb>>2],f[c+4>>2]=0|f[fb+4>>2],ik(Pa,db,eb,c),gb=C,hb=gb+12|0,ib=0|f[hb>>2],g=ib+36|0,h=0|f[g>>2],i=N,j=h+(i<<2)|0,f[j>>2]=0,k=C,l=k+20|0,m=0|f[l>>2],0!=(0|m)?void(o=kb):(q=Ea,r=C,t=r+20|0,f[t>>2]=q,void(o=kb))):void(o=kb))}function mk(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,t=0,u=0,v=0,w=0,x=0,y=0,A=0,B=0,C=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,P=0;if(P=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),A=a,I=b,J=c,K=A,L=I,K>>>0>L>>>0&&(N=A,d=I,e=J,g=d+(e<<3)|0,N>>>0<g>>>0)){for(i=J,j=A,k=j+(i<<3)|0,A=k,l=J,m=I,n=m+(l<<3)|0,I=n;;){if(q=J,r=q+-1|0,J=r,!(q>>>0>0))break;t=A,u=t+-8|0,A=u,v=I,w=v+-8|0,I=w,f[u>>2]=0|f[w>>2],f[u+4>>2]=0|f[w+4>>2]}return void(o=P)}if(x=A,y=I,!((0|x)!=(0|y)))return void(o=P);for(;;){if(B=J,C=B+-1|0,J=C,!(B>>>0>0))break;E=A,F=E+8|0,A=F,G=I,H=G+8|0,I=H,f[E>>2]=0|f[G>>2],f[E+4>>2]=0|f[G+4>>2]}o=P}function nk(a,b){a|=0,b|=0;var c=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ia=0;return ia=o,o=o+144|0,(0|o)>=(0|p)&&ca(144),c=ia+128|0,da=ia+24|0,ba=ia,N=ia+112|0,Y=ia+104|0,Z=ia+96|0,$=ia+88|0,_=ia+80|0,aa=ia+72|0,e=ia+64|0,g=ia+56|0,h=ia+48|0,i=ia+40|0,r=a,C=b,j=r,k=j+12|0,l=0|f[k>>2],m=l+16|0,n=0|f[m>>2],q=0|f[n>>2],s=0!=(0|q),t=r,u=r,s?(v=r,w=v+12|0,x=0|f[w>>2],y=x+16|0,z=0|f[y>>2],A=0|f[z>>2],ui(Z,u,A),B=r,D=B+12|0,E=0|f[D>>2],F=E+16|0,G=0|f[F>>2],H=G+36|0,I=0|f[H>>2],ck($,I),J=C,ck(_,J),d[ba>>0]=0|d[Z>>0],d[ba+1>>0]=0|d[Z+1>>0],d[ba+2>>0]=0|d[Z+2>>0],d[ba+3>>0]=0|d[Z+3>>0],d[ba+4>>0]=0|d[Z+4>>0],d[ba+5>>0]=0|d[Z+5>>0],d[ba+6>>0]=0|d[Z+6>>0],d[ba+7>>0]=0|d[Z+7>>0],ea=ba+8|0,d[ea>>0]=0|d[$>>0],d[ea+1>>0]=0|d[$+1>>0],d[ea+2>>0]=0|d[$+2>>0],d[ea+3>>0]=0|d[$+3>>0],d[ea+4>>0]=0|d[$+4>>0],d[ea+5>>0]=0|d[$+5>>0],d[ea+6>>0]=0|d[$+6>>0],d[ea+7>>0]=0|d[$+7>>0],fa=ba+16|0,d[fa>>0]=0|d[_>>0],d[fa+1>>0]=0|d[_+1>>0],d[fa+2>>0]=0|d[_+2>>0],d[fa+3>>0]=0|d[_+3>>0],d[fa+4>>0]=0|d[_+4>>0],d[fa+5>>0]=0|d[_+5>>0],d[fa+6>>0]=0|d[_+6>>0],d[fa+7>>0]=0|d[_+7>>0],Cr(aa,t,56884,ba),f[Y>>2]=0|f[aa>>2],f[Y+4>>2]=0|f[aa+4>>2],S=r,T=r,U=0|sp(T,69160),f[c>>2]=0|f[Y>>2],f[c+4>>2]=0|f[Y+4>>2],wr(i,S,U,c),f[N>>2]=0|f[i>>2],f[N+4>>2]=0|f[i+4>>2],V=0|f[N>>2],W=r,X=W+20|0,f[X>>2]=V,void(o=ia)):(K=u+12|0,L=0|f[K>>2],M=L+16|0,O=0|f[M>>2],P=O+36|0,Q=0|f[P>>2],ck(e,Q),R=C,ck(g,R),d[da>>0]=0|d[e>>0],d[da+1>>0]=0|d[e+1>>0],d[da+2>>0]=0|d[e+2>>0],d[da+3>>0]=0|d[e+3>>0],d[da+4>>0]=0|d[e+4>>0],d[da+5>>0]=0|d[e+5>>0],d[da+6>>0]=0|d[e+6>>0],d[da+7>>0]=0|d[e+7>>0],ga=da+8|0,d[ga>>0]=0|d[g>>0],d[ga+1>>0]=0|d[g+1>>0],d[ga+2>>0]=0|d[g+2>>0],d[ga+3>>0]=0|d[g+3>>0],d[ga+4>>0]=0|d[g+4>>0],d[ga+5>>0]=0|d[g+5>>0],d[ga+6>>0]=0|d[g+6>>0],d[ga+7>>0]=0|d[g+7>>0],Cr(h,t,56928,da),f[Y>>2]=0|f[h>>2],f[Y+4>>2]=0|f[h+4>>2],S=r,T=r,U=0|sp(T,69160),f[c>>2]=0|f[Y>>2],f[c+4>>2]=0|f[Y+4>>2],wr(i,S,U,c),f[N>>2]=0|f[i>>2],f[N+4>>2]=0|f[i+4>>2],V=0|f[N>>2],W=r,X=W+20|0,f[X>>2]=V,void(o=ia))}function ok(a,b,c){a|=0,b|=0,c|=0;var e=0,g=0,h=0,i=0,k=0;k=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),g=k,e=c,h=g+4|0,f[h>>2]=7,i=e,f[g>>2]=i,f[a>>2]=0|f[g>>2],f[a+4>>2]=0|f[g+4>>2],o=k}function pk(a,b){a|=0,b|=0;var c=0,d=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;if(F=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),x=a,y=b,A=y,B=A+20|0,C=0|f[B>>2],z=C,D=x,c=z,d=0|tk(D,c),d<<24>>24!=0)return g=z,n=g,w=n,o=F,0|w;for(;;){if(h=z,i=h+4|0,j=0|f[i>>2],k=0!=(0|j),l=z,!k){E=6;break}if(m=l+4|0,q=0|f[m>>2],z=q,r=x,s=z,t=0|tk(r,s),t<<24>>24!=0){E=5;break}}return 5==(0|E)?(v=z,n=v,w=n,o=F,0|w):6==(0|E)?(n=l,w=n,o=F,0|w):0}function qk(a,b){a|=0,b|=0;var c=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,K=0,L=0,M=0;K=o,o=o+112|0,(0|o)>=(0|p)&&ca(112),g=K+72|0,e=K+64|0,c=K+56|0,C=K+83|0,D=K+80|0,E=K+40|0,F=K+32|0,G=K+24|0,H=K+16|0,h=K+8|0,i=K,t=a,B=b,I=C,L=56848,M=I+21|0;do{d[I>>0]=0|d[L>>0],I=I+1|0,L=L+1|0}while((0|I)<(0|M));d[D>>0]=0|d[56869],d[D+1>>0]=0|d[56870],d[D+2>>0]=0|d[56871],j=t,kg(G,j,19),f[E>>2]=0|f[G>>2],f[E+4>>2]=0|f[G+4>>2],k=t,f[c>>2]=0|f[E>>2],f[c+4>>2]=0|f[E+4>>2],ch(H,k,c,56872,11),l=t,m=B,n=C+(7*m|0)|0,q=B,r=D+q|0,s=0|d[r>>0],u=s<<24>>24,f[e>>2]=0|f[E>>2],f[e+4>>2]=0|f[E+4>>2],ch(h,l,e,n,u),v=t,w=t,x=0|sp(w,56833),f[g>>2]=0|f[E>>2],f[g+4>>2]=0|f[E+4>>2],wr(i,v,x,g),f[F>>2]=0|f[i>>2],f[F+4>>2]=0|f[i+4>>2],y=0|f[F>>2],z=t,A=z+20|0,f[A>>2]=y,o=K}function rk(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,G=0;return G=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),x=a,y=b,z=c,C=x,D=y,d=C+D|0,j=C+-2147483648|0,h=C+2147483647|0,i=(0|d)<(0|j),g=(0|d)>(0|h),e=(0|C)>=0,k=e?i:g,B=d,l=B,m=(0|l)>2147483647,E=k|m,E?s=1:(n=B,q=(0|n)<-2147483648,s=q),r=1&s,t=255&r,A=t,u=B,v=z,f[v>>2]=u,w=A,o=G,0|w}function sk(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,G=0;return G=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),x=a,y=b,z=c,C=x,D=y,d=C-D|0,j=C+-2147483647|0,h=C+-2147483648|0,i=(0|d)<(0|j),g=(0|d)>(0|h),e=(0|C)>=0,k=e?i:g,B=d,l=B,m=(0|l)>2147483647,E=k|m,E?s=1:(n=B,q=(0|n)<-2147483648,s=q),r=1&s,t=255&r,A=t,u=B,v=z,f[v>>2]=u,w=A,o=G,0|w}function tk(a,b){a|=0,b|=0;var c=0,d=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,P=0;return P=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),A=a,I=b,K=I,L=K+20|0,M=0|f[L>>2],J=M,N=I,c=N+20|0,d=0|f[c>>2],(0|d)>=0&&(g=A,h=g+12|0,i=0|f[h>>2],j=i+20|0,k=0|f[j>>2],l=J,m=k+(48*l|0)|0,q=m+4|0,r=0|f[q>>2],0!=(0|r)&&(t=A,u=t+12|0,v=0|f[u>>2],w=v+20|0,x=0|f[w>>2],y=J,z=x+(48*y|0)|0,B=z+4|0,C=0|f[B>>2],D=0|f[C>>2],E=D>>>11,F=256&E,0!=(0|F)))?(n=1,H=n,o=P,0|H):(n=0,H=n,o=P,0|H)}function uk(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Ya=0;if(Ya=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),A=a,L=b,W=c,Na=A,d=Na+12|0,e=0|f[d>>2],g=e+8|0,h=0|f[g>>2],ga=h,i=A,j=i+12|0,k=0|f[j>>2],l=k+12|0,m=0|f[l>>2],n=A,q=n+12|0,r=0|f[q>>2],s=r+8|0,t=0|f[s>>2],u=m,v=t,w=u-v|0,x=(0|w)/8&-1,ra=x,y=A,z=y+12|0,B=0|f[z>>2],C=B+4|0,D=0|f[C>>2],E=A,F=E+12|0,G=0|f[F>>2],H=G+8|0,I=0|f[H>>2],J=D,K=I,M=J-K|0,N=(0|M)/8&-1,Ca=N,O=L,P=(0|O)<=128,P?(Q=ra,R=Q+128|0,ra=R):(S=L,T=ra,U=T+S|0,ra=U),V=A,X=A,Y=X+12|0,Z=0|f[Y>>2],$=Z+8|0,_=0|f[$>>2],aa=ra,ba=aa<<3,da=0|Hc(V,_,ba),ea=A,fa=ea+12|0,ha=0|f[fa>>2],ia=ha+8|0,f[ia>>2]=da,ja=A,ka=ja+12|0,la=0|f[ka>>2],ma=la+8|0,na=0|f[ma>>2],oa=Ca,pa=na+(oa<<3)|0,qa=A,sa=qa+12|0,ta=0|f[sa>>2],ua=ta+4|0,f[ua>>2]=pa,va=A,wa=va+12|0,xa=0|f[wa>>2],ya=xa+8|0,za=0|f[ya>>2],Aa=ra,Ba=za+(Aa<<3)|0,Da=A,Ea=Da+12|0,Fa=0|f[Ea>>2],Ga=Fa+12|0,f[Ga>>2]=Ba,Ha=A,Ia=ga,Ja=A,Ka=Ja+12|0,La=0|f[Ka>>2],Ma=La+8|0,Oa=0|f[Ma>>2],xk(Ha,Ia,Oa),Pa=ra,!((0|Pa)>262016))return void(o=Ya);Ra=A,Sa=L,Ta=W,vk(Ra,Sa,Ta),Ua=A,Va=A,Wa=0|sp(Va,68052),Ar(Ua,Wa,56966)}function vk(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,v=0,x=0;if(x=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),n=a,q=b,r=c,s=q,t=r,!((0|s)>(0|t)))return void(o=x);v=n,d=v+12|0,e=0|f[d>>2],g=e+4|0,h=0|f[g>>2],i=r,j=h+(i<<3)|0,k=q,l=r,m=k-l|0,wk(j,m),o=x}function wk(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,i=0,j=0,l=0;for(l=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),c=a,d=b;;){if(e=d,g=e+-1|0,d=g,!(e>>>0>0))break;i=c,j=i+8|0,c=j,f[i>>2]=0|f[18363],f[i+4>>2]=0|f[18364]}o=l}function xk(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,q=0,r=0,s=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,la=0;if(la=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),A=a,L=b,W=c,ja=A,d=ja+12|0,e=0|f[d>>2],g=e+20|0,h=0|f[g>>2],ga=h,i=W,j=L,(0|i)==(0|j))return void(o=la);for(;;){if(l=ga,m=A,n=m+12|0,q=0|f[n>>2],r=q+16|0,s=0|f[r>>2],!(l>>>0<=s>>>0))break;u=ga,v=u+24|0,w=0|f[v>>2],ha=w,x=ha,y=0!=(0|x),y&&(z=ha,B=z+20|0,C=0|f[B>>2],(0|C)>=0&&(E=ha,F=E+12|0,G=0|f[F>>2],H=L,I=G,J=H,K=I-J|0,M=(0|K)/8&-1,ia=M,N=W,O=ia,P=N+(O<<3)|0,Q=ha,R=Q+12|0,f[R>>2]=P)),S=W,T=ga,U=T+8|0,V=0|f[U>>2],X=L,Y=V,Z=X,$=Y-Z|0,_=(0|$)/8&-1,aa=S+(_<<3)|0,ba=ga,da=ba+8|0,f[da>>2]=aa,ea=ga,fa=ea+48|0,ga=fa}o=la}function yk(a,b,c){a|=0,b|=0,c|=0;var d=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,$a=0,_a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Nb=0;if(Nb=o,o=o+112|0,(0|o)>=(0|p)&&ca(112),j=Nb+104|0,i=Nb+96|0,h=Nb+88|0,g=Nb+80|0,d=Nb+72|0,Ib=Nb,wa=Nb+64|0,Ha=Nb+56|0,Sa=Nb+52|0,mb=Nb+44|0,I=Nb+28|0,W=Nb+16|0,la=b,X=la,f[Ib>>2]=wa,Jb=Ib+4|0,f[Jb>>2]=Sa,Kb=Ib+8|0,f[Kb>>2]=mb,Lb=Ib+12|0,f[Lb>>2]=Ha,Kp(X,57012,Ib),Y=la,f[d>>2]=0|f[c>>2],f[d+4>>2]=0|f[c+4>>2],Z=0|dk(Y,d),f[I>>2]=Z,$=la,_=0|f[wa>>2],aa=0|Yp($,I,_),x=aa,ba=x,da=0!=(0|ba),ea=la,!da)return fa=0|f[wa>>2],ga=0|f[mb>>2],ha=0|f[Sa>>2],f[g>>2]=0|f[c>>2],f[g+4>>2]=0|f[c+4>>2],f[h>>2]=0|f[Ha>>2],f[h+4>>2]=0|f[Ha+4>>2],$j(a,ea,g,fa,ga,ha,h),void(o=Nb);if(ia=ea+12|0,ja=0|f[ia>>2],ka=ja+16|0,ma=0|f[ka>>2],T=ma,na=0|f[wa>>2],oa=T,f[oa>>2]=na,pa=0|f[I>>2],qa=T,ra=qa+44|0,f[ra>>2]=pa,sa=x,ta=T,ua=ta+4|0,f[ua>>2]=sa,va=la,xa=va+12|0,ya=0|f[xa>>2],za=ya+4|0,Aa=0|f[za>>2],Ba=Aa+8|0,bb=Ba,Ca=T,Da=Ca+36|0,Ea=0|f[Da>>2],(0|Ea)>=0){for(xb=0,Ga=T,Ia=Ga+36|0,Ja=0|f[Ia>>2],k=Ja;;){if(Ka=xb,La=k,!((0|Ka)<(0|La)))break;Na=bb,Oa=xb,Pa=Na+(Oa<<3)|0,Qa=bb,Ra=xb,Ta=Ra+1|0,Ua=Qa+(Ta<<3)|0,f[Pa>>2]=0|f[Ua>>2],f[Pa+4>>2]=0|f[Ua+4>>2],Va=xb,Wa=Va+1|0,xb=Wa}Xa=T,Ya=Xa+36|0,Za=0|f[Ya>>2],$a=Za+-1|0,f[Ya>>2]=$a}else _a=la,ab=bb,f[i>>2]=0|f[ab>>2],f[i+4>>2]=0|f[ab+4>>2],_n(W,_a,i);if(cb=x,db=0|f[cb>>2],eb=db>>>11,fb=128&eb,0!=(0|fb))return hb=x,ib=hb+12|0,jb=0|f[ib>>2],kb=la,f[j>>2]=0|f[c>>2],f[j+4>>2]=0|f[c+4>>2],Ex[511&jb](a,kb,j),void(o=Nb);lb=T,nb=lb+36|0,ob=0|f[nb>>2],pb=(0|ob)<0,qb=la,rb=x,sb=rb+12|0,tb=0|f[sb>>2],ub=tb+2|0,vb=0|e[ub>>1],wb=65535&vb,pb?(yb=(0|wb)<3,yb?Fb=3:(zb=x,Ab=zb+12|0,Bb=0|f[Ab>>2],Cb=Bb+2|0,Db=0|e[Cb>>1],Eb=65535&Db,Fb=Eb),fk(qb,Fb,3)):(Gb=T,Hb=Gb+36|0,l=0|f[Hb>>2],m=l+2|0,fk(qb,wb,m)),n=x,q=n+12|0,r=0|f[q>>2],s=r+2|0,t=0|e[s>>1],u=65535&t,v=T,w=v+12|0,f[w>>2]=u,y=la,z=0|ek(y),T=z,A=T,B=A+12|0,f[B>>2]=0,C=T,D=C+44|0,f[D>>2]=0,E=x,F=E+12|0,G=0|f[F>>2],H=G+8|0,J=0|f[H>>2],K=T,L=K+28|0,f[L>>2]=J,M=la,N=M+12|0,O=0|f[N>>2],P=O+4|0,Q=0|f[P>>2],R=T,S=R+8|0,f[S>>2]=Q,U=T,V=U+40|0,f[V>>2]=0,f[a>>2]=0|f[c>>2],f[a+4>>2]=0|f[c+4>>2],o=Nb}function zk(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,v=0;if(v=o,o=o+48|0,(0|o)>=(0|p)&&ca(48),e=v+40|0,d=v+32|0,s=v,k=v+16|0,l=v+8|0,j=b,m=j,f[s>>2]=k,t=s+4|0,f[t>>2]=l,n=0|Kp(m,57016,s),q=1==(0|n),r=j,!q)return i=0|f[c>>2],f[d>>2]=0|f[c>>2],f[d+4>>2]=0|f[c+4>>2],f[e>>2]=0|f[l>>2],f[e+4>>2]=0|f[l+4>>2],Ak(a,r,d,e,i),void(o=v);g=j,h=0|sp(g,65108),Ar(r,h,57020)}function Ak(a,b,c,d,g){a|=0,b|=0,c|=0,d|=0,g|=0;var h=0,i=0,j=0,k=0,l=0,m=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Ba=0;return Ba=o,o=o+48|0,(0|o)>=(0|p)&&ca(48),j=Ba+32|0,i=Ba+24|0,h=Ba+16|0,$=b,ka=g,za=d+4|0,k=0|f[za>>2],l=0==(0|k),l&&(m=0|f[d>>2],0!=(0|m)||(q=$,r=$,s=0|sp(r,69160),Ar(q,s,68709))),t=$,u=t+12|0,v=0|f[u>>2],w=v+16|0,x=0|f[w>>2],ya=x,y=ya,z=y+40|0,A=0|f[z>>2],-2==(0|A)?(C=$,D=ka,f[h>>2]=0|f[d>>2],f[h+4>>2]=0|f[d+4>>2],f[i>>2]=0|f[c>>2],f[i+4>>2]=0|f[c+4>>2],Bk(a,C,h,0,0,i,D),void(o=Ba)):(E=ka,F=ya,G=F+44|0,f[G>>2]=E,H=0|f[d>>2],va=H,I=va,J=ya,K=J+4|0,f[K>>2]=I,L=va,M=0|f[L>>2],N=M>>>11,O=128&N,P=0!=(0|O),Q=va,R=Q+12|0,P?(S=0|f[R>>2],T=$,f[j>>2]=0|f[c>>2],f[j+4>>2]=0|f[c+4>>2],Ex[511&S](a,T,j),void(o=Ba)):(U=0|f[R>>2],V=U+2|0,W=0|e[V>>1],X=65535&W,Y=ya,Z=Y+12|0,f[Z>>2]=X,_=$,aa=0|ek(_),ya=aa,ba=ya,da=ba+12|0,f[da>>2]=0,ea=ya,fa=ea+44|0,f[fa>>2]=0,ga=va,ha=ga+12|0,ia=0|f[ha>>2],ja=ia+8|0,la=0|f[ja>>2],ma=ya,na=ma+28|0,f[na>>2]=la,oa=$,pa=oa+12|0,qa=0|f[pa>>2],ra=qa+4|0,sa=0|f[ra>>2],ta=ya,ua=ta+8|0,f[ua>>2]=sa,wa=ya,xa=wa+40|0,f[xa>>2]=0,f[a>>2]=0|f[c>>2],f[a+4>>2]=0|f[c+4>>2],void(o=Ba)))}function Bk(a,b,c,d,g,h,i){a|=0,b|=0,c|=0,d|=0,g|=0,h|=0,i|=0;var j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,$a=0,_a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Vb=0;return Vb=o,o=o+80|0,(0|o)>=(0|p)&&ca(80),k=Vb+72|0,j=Vb+64|0,ma=Vb+24|0,na=Vb+16|0,oa=Vb+8|0,pa=Vb,nb=b,yb=d,Jb=g,l=i,qa=nb,ra=qa+12|0,sa=0|f[ra>>2],ta=sa+16|0,ua=0|f[ta>>2],va=0|f[ua>>2],J=va,wa=nb,xa=wa+12|0,ya=0|f[xa>>2],za=ya+16|0,Aa=0|f[za>>2],Ba=Aa+12|0,Ca=0|f[Ba>>2],ea=Ca,Da=c+4|0,Ea=0|f[Da>>2],Fa=0==(0|Ea),Fa&&(Ga=0|f[c>>2],0!=(0|Ga)||(Ia=nb,Ja=nb,Ka=0|sp(Ja,69160),Ar(Ia,Ka,68709))),La=0|f[c>>2],y=La,Ma=nb,Na=0|ek(Ma),U=Na,Oa=J,Pa=U,f[Pa>>2]=Oa,Qa=y,Ra=U,Sa=Ra+4|0,f[Sa>>2]=Qa,Ta=nb,Ua=Ta+12|0,Va=0|f[Ua>>2],Wa=Va+4|0,Xa=0|f[Wa>>2],Ya=U,Za=Ya+8|0,f[Za>>2]=Xa,$a=yb,_a=U,ab=_a+36|0,f[ab>>2]=$a,bb=l,cb=U,db=cb+44|0,f[db>>2]=bb,eb=U,fb=eb+40|0,f[fb>>2]=-1,gb=nb,hb=gb+12|0,ib=0|f[hb>>2],jb=ib+4|0,kb=0|f[jb>>2],lb=ea,mb=kb+(lb<<3)|0,ob=nb,pb=ob+12|0,qb=0|f[pb>>2],rb=qb+4|0,f[rb>>2]=mb,sb=y,tb=0|f[sb>>2],ub=tb>>>11,vb=128&ub,wb=0!=(0|vb),wb?(xb=yb,zb=xb+2|0,Ab=U,Bb=Ab+12|0,f[Bb>>2]=zb,Cb=nb,Db=U,Eb=Db+12|0,Fb=0|f[Eb>>2],fk(Cb,Fb,0)):(Gb=y,Hb=Gb+12|0,Ib=0|f[Hb>>2],Kb=Ib+2|0,Lb=0|e[Kb>>1],Mb=65535&Lb,Nb=U,Ob=Nb+12|0,f[Ob>>2]=Mb,Pb=nb,Qb=U,Rb=Qb+12|0,Sb=0|f[Rb>>2],Tb=yb,m=Tb+2|0,fk(Pb,Sb,m)),n=nb,q=n+12|0,r=0|f[q>>2],s=r+4|0,t=0|f[s>>2],f[t>>2]=0|f[h>>2],f[t+4>>2]=0|f[h+4>>2],u=yb,v=(0|u)>0,v&&(w=nb,x=w+12|0,z=0|f[x>>2],A=z+4|0,B=0|f[A>>2],C=B+8|0,D=Jb,E=yb,hk(C,D,E)),F=nb,G=F+12|0,H=0|f[G>>2],I=H+4|0,K=0|f[I>>2],L=yb,M=L+1|0,N=K+(M<<3)|0,Zj(na),f[N>>2]=0|f[na>>2],f[N+4>>2]=0|f[na+4>>2],O=y,P=0|f[O>>2],Q=P>>>11,R=128&Q,S=0!=(0|R),S?(T=y,V=T+12|0,W=0|f[V>>2],X=nb,f[j>>2]=0|f[h>>2],f[j+4>>2]=0|f[h+4>>2],Ex[511&W](oa,X,j),f[ma>>2]=0|f[oa>>2],f[ma+4>>2]=0|f[oa+4>>2],Y=nb,Z=Y+12|0,$=0|f[Z>>2],_=$+16|0,aa=0|f[_>>2],ba=aa+8|0,da=0|f[ba>>2],fa=nb,ga=fa+12|0,ha=0|f[ga>>2],ia=ha+4|0,f[ia>>2]=da,ja=nb,_j(ja),f[a>>2]=0|f[ma>>2],f[a+4>>2]=0|f[ma+4>>2],void(o=Vb)):(ka=nb,la=y,f[k>>2]=0|f[h>>2],f[k+4>>2]=0|f[h+4>>2],ik(pa,ka,la,k),f[ma>>2]=0|f[pa>>2],f[ma+4>>2]=0|f[pa+4>>2],f[a>>2]=0|f[ma>>2],f[a+4>>2]=0|f[ma+4>>2],void(o=Vb))}function Ck(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,E=0;switch(E=o,o=o+80|0,(0|o)>=(0|p)&&ca(80),g=E+72|0,e=E+64|0,d=E+56|0,B=E,v=E+40|0,w=E+32|0,x=E+24|0,z=E+8|0,u=b,A=u,f[B>>2]=v,C=B+4|0,f[C>>2]=w,h=0|Kp(A,57016,B),i=1==(0|h),i&&(j=u,k=u,l=0|sp(k,65108),Ar(j,l,57071)),m=c+4|0,0|(0|f[m>>2])){case 6:case 3:case 4:y=0;break;default:q=u,f[d>>2]=0|f[c>>2],f[d+4>>2]=0|f[c+4>>2],Vp(z,q,d),f[x>>2]=0|f[z>>2],f[x+4>>2]=0|f[z+4>>2],r=0|f[x>>2],y=r}s=u,t=y,f[e>>2]=0|f[c>>2],f[e+4>>2]=0|f[c+4>>2],f[g>>2]=0|f[w>>2],f[g+4>>2]=0|f[w+4>>2],Ak(a,s,e,g,t),o=E}function Dk(a,b,c,d){a|=0,b|=0,c|=0,d|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,ba=0;if(ba=o,o=o+64|0,(0|o)>=(0|p)&&ca(64),g=ba+56|0,e=ba+48|0,$=ba+24|0,_=ba+16|0,h=ba+8|0,i=ba,N=b,X=c,Y=d,j=N,k=j+12|0,l=0|f[k>>2],m=l+20|0,n=0|f[m>>2],0!=(0|n)&&(r=N,s=r+12|0,t=0|f[s>>2],u=t+16|0,v=0|f[u>>2],w=N,x=w+12|0,y=0|f[x>>2],z=y+20|0,A=0|f[z>>2],!((0|v)==(0|A))))return G=N,H=0|ek(G),Z=H,I=Z,J=I+12|0,f[J>>2]=1,K=Z,L=K+40|0,f[L>>2]=-1,M=N,O=M+32|0,P=0|f[O>>2],Q=Z,R=Q+44|0,f[R>>2]=P,S=N,T=X,U=N,ig(h,U),V=Y,f[g>>2]=0|f[h>>2],f[g+4>>2]=0|f[h+4>>2],jk(i,S,T,g,V),f[$>>2]=0|f[i>>2],f[$+4>>2]=0|f[i+4>>2],W=N,_j(W),f[a>>2]=0|f[$>>2],f[a+4>>2]=0|f[$+4>>2],void(o=ba);C=N,D=X,E=N,ig(_,E),F=Y,f[e>>2]=0|f[_>>2],f[e+4>>2]=0|f[_+4>>2],jk(a,C,D,e,F),o=ba}function Ek(a,b){a|=0,b|=0;var c=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,la=0,va=0,wa=0,xa=0,ya=0;for(ya=o,o=o+160|0,(0|o)>=(0|p)&&ca(160),wa=4,va=0|Gw(40),f[va>>2]=0,t=ya,E=a+1404|0,f[E>>2]=t,Q=a+1404|0,_=0|f[Q>>2],va=0|Qw(_,1,0|va,0|wa),wa=G,r=0,ha=r,r=0,0!=(0|ha)&0!=(0|s)?(ia=0|Rw(0|f[ha>>2],0|va,0|wa),0==(0|ia)&&Aa(0|ha,0|s),G=s):ia=-1,ja=G,la=1==(0|ia),c=la?ja:0;;){if(!(0==(0|c))){if(r=0,sa(207,0|a,57113),$=r,r=0,0!=(0|$)&0!=(0|s)?(aa=0|Rw(0|f[$>>2],0|va,0|wa),0==(0|aa)&&Aa(0|$,0|s),G=s):aa=-1,ba=G,1==(0|aa)){c=ba;continue}xa=15;break}if(e=a+72|0,g=0|d[e>>0],h=-2&g,i=1|h,d[e>>0]=i,j=a+68|0,f[j>>2]=0,k=a+64|0,f[k>>2]=0,l=a+1140|0,f[l>>2]=0,m=a+1136|0,f[m>>2]=0,n=a+44|0,f[n>>2]=0,r=0,sa(202,0|a,0|b),q=r,r=0,0!=(0|q)&0!=(0|s)?(u=0|Rw(0|f[q>>2],0|va,0|wa),0==(0|u)&&Aa(0|q,0|s),G=s):u=-1,v=G,1==(0|u))c=v;else if(r=0,ta(203,0|a),w=r,r=0,0!=(0|w)&0!=(0|s)?(x=0|Rw(0|f[w>>2],0|va,0|wa),0==(0|x)&&Aa(0|w,0|s),G=s):x=-1,y=G,1==(0|x))c=y;else{if(z=a+1144|0,A=0|f[z>>2],!(0!=(0|A))){if(r=0,C=0|ta(204,0|a),D=r,r=0,0!=(0|D)&0!=(0|s)?(F=0|Rw(0|f[D>>2],0|va,0|wa),0==(0|F)&&Aa(0|D,0|s),G=s):F=-1,H=G,1==(0|F)){c=H;continue}I=a+1144|0,f[I>>2]=C}if(r=0,sa(205,0|a,0|b),J=r,r=0,0!=(0|J)&0!=(0|s)?(K=0|Rw(0|f[J>>2],0|va,0|wa),0==(0|K)&&Aa(0|J,0|s),G=s):K=-1,L=G,1==(0|K))c=L;else{if(!(0!=(0|b))){xa=16;break}if(N=b+28|0,O=0|d[N>>0],P=(255&O)>>>1,R=1&P,S=255&R,!(0!=(0|S))){xa=16;break}if(U=0|f[a>>2],V=a+1144|0,W=0|f[V>>2],r=0,ua(206,0|U,0|W,0),X=r,r=0,0!=(0|X)&0!=(0|s)?(Y=0|Rw(0|f[X>>2],0|va,0|wa),0==(0|Y)&&Aa(0|X,0|s),G=s):Y=-1,Z=G,!(1==(0|Y))){xa=13;break}c=Z}}}return 13==(0|xa)?(Hw(0|va),void(o=ya)):15==(0|xa)?(da=a+1136|0,ea=0|f[da>>2],fa=ea+1|0,f[da>>2]=fa,ga=a+1144|0,f[ga>>2]=0,Hw(0|va),void(o=ya)):16==(0|xa)?(Hw(0|va),void(o=ya)):void 0}function Fk(a,b){a|=0,b|=0;var c=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,va=0,wa=0,xa=0,ya=0,za=0,Ba=0;if(Ba=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),r=a,C=b,Y=C,!(0!=(0|Y)))return void(o=Ba);ta=C,ya=ta+8|0,za=0|f[ya>>2],c=0!=(0|za),c&&(g=r,h=C,i=h+8|0,j=0|f[i>>2],un(g,j)),k=C,l=k+12|0,m=0|e[l>>1],n=m<<16>>16!=0,n&&(q=C,s=q+12|0,t=0|e[s>>1],u=t<<16>>16,v=r,w=v+32|0,f[w>>2]=u),x=C,y=0|f[x>>2],z=0!=(0|y);a:if(z)for(A=r,B=0|Pk(A,0,0),D=r,E=D+76|0,f[E>>2]=B,N=0;;){if(F=N,G=C,H=G+4|0,I=0|f[H>>2],!((0|F)<(0|I)))break a;K=r,L=C,M=0|f[L>>2],O=N,P=M+(O<<2)|0,Q=0|f[P>>2],Zl(K,Q),R=N,S=R+1|0,N=S}if(T=C,U=T+28|0,V=0|d[U>>0],W=1&V,X=r,Z=X+1148|0,$=0|d[Z>>0],_=1&W,aa=_<<1&255,ba=-3&$,da=ba|aa,d[Z>>0]=da,ea=C,fa=ea+28|0,ga=0|d[fa>>0],ha=(255&ga)>>>4,ja=1&ha,ka=r,la=ka+1148|0,ma=0|d[la>>0],na=1&ja,oa=-2&ma,pa=oa|na,d[la>>0]=pa,qa=C,ra=qa+16|0,sa=0|f[ra>>2],!(0!=(0|sa)))return void(o=Ba);va=C,wa=r,xa=wa+24|0,f[xa>>2]=va,o=Ba}function Gk(a){a|=0;var b=0,c=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,$a=0,_a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,$b=0,_b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,yc=0,zc=0,Ac=0,Bc=0,Cc=0,Dc=0,Ec=0,Fc=0,Gc=0,Hc=0,Ic=0,Kc=0,Lc=0,Mc=0,Nc=0,Oc=0,Pc=0,Qc=0,Rc=0,Sc=0,Tc=0,Uc=0,Vc=0,Wc=0,Xc=0,Yc=0,Zc=0,$c=0,_c=0,ad=0,bd=0,cd=0,dd=0,ed=0,fd=0,gd=0,hd=0,id=0,jd=0,kd=0,ld=0,md=0,nd=0,od=0,pd=0,qd=0,rd=0,sd=0,td=0,ud=0,vd=0,wd=0,xd=0,yd=0,zd=0,Ad=0,Bd=0,Cd=0,Dd=0,Ed=0,Fd=0,Gd=0,Hd=0,Id=0,Jd=0,Kd=0,Ld=0,Md=0,Nd=0,Od=0,Pd=0,Qd=0,Rd=0,Sd=0,Td=0,Ud=0,Vd=0,Wd=0,Xd=0,Yd=0,Zd=0,$d=0,_d=0,ae=0,be=0,ce=0,de=0,ee=0,fe=0,ge=0,he=0,ie=0,je=0,ke=0,le=0,me=0,ne=0,oe=0,pe=0,qe=0,re=0,se=0,te=0,ue=0,ve=0,we=0,xe=0,ye=0,ze=0,Ae=0,Be=0,Ce=0,De=0,Ee=0,Fe=0,Ge=0,He=0,Ie=0,Je=0,Ke=0,Le=0,Me=0,Ne=0,Oe=0,Pe=0,Qe=0,Re=0,Se=0,Te=0,Ue=0,Ve=0,We=0,Xe=0,Ye=0,Ze=0,$e=0,_e=0,af=0,bf=0,cf=0,df=0,ef=0,ff=0,gf=0,hf=0,jf=0,kf=0,lf=0,mf=0,nf=0,of=0,pf=0,qf=0,rf=0,sf=0,tf=0,uf=0,vf=0,wf=0,xf=0,yf=0,zf=0,Af=0,Bf=0,Cf=0,Df=0,Ef=0,Ff=0,Gf=0,Hf=0,If=0,Jf=0,Kf=0,Lf=0,Mf=0,Nf=0,Of=0,Pf=0,Qf=0,Rf=0,Sf=0,Tf=0,Uf=0,Vf=0,Wf=0,Xf=0,Yf=0,Zf=0,$f=0,_f=0,ag=0,bg=0,cg=0,dg=0,eg=0,fg=0,gg=0,hg=0,ig=0,jg=0,kg=0,lg=0,mg=0,ng=0,og=0,pg=0,qg=0,rg=0,sg=0,tg=0,ug=0,vg=0,wg=0,xg=0,yg=0,zg=0,Ag=0,Bg=0,Cg=0,Dg=0,Eg=0,Fg=0,Gg=0,Hg=0,Ig=0,Jg=0,Kg=0,Lg=0,Mg=0,Ng=0,Og=0,Pg=0,Qg=0,Rg=0,Sg=0,Tg=0,Ug=0,Vg=0,Wg=0,Xg=0,Yg=0,Zg=0,$g=0,_g=0,ah=0,bh=0,ch=0,dh=0,eh=0,fh=0,gh=0,hh=0,ih=0,jh=0,kh=0,lh=0,mh=0,nh=0,oh=0,ph=0,qh=0,rh=0,sh=0,th=0,uh=0,vh=0,wh=0,xh=0,yh=0,zh=0,Ah=0,Bh=0,Ch=0,Dh=0,Eh=0,Fh=0,Gh=0,Hh=0,Ih=0,Jh=0,Kh=0,Lh=0,Mh=0,Nh=0,Oh=0,Ph=0,Qh=0,Rh=0,Sh=0,Th=0,Uh=0,Vh=0,Wh=0,Xh=0,Yh=0,Zh=0,$h=0,_h=0,ai=0,bi=0,ci=0,di=0,ei=0,fi=0,gi=0,hi=0,ii=0,ji=0,ki=0,li=0,mi=0,ni=0,oi=0,pi=0,qi=0,ri=0,si=0,ti=0,vi=0,wi=0,xi=0,yi=0,zi=0,Ai=0,Bi=0,Ci=0,Di=0,Ei=0,Fi=0,Gi=0,Hi=0,Ii=0,Ji=0,Ki=0,Li=0,Mi=0,Ni=0,Oi=0,Pi=0,Qi=0,Ri=0,Si=0,Ti=0,Ui=0,Vi=0,Wi=0,Xi=0,Yi=0,Zi=0,$i=0,_i=0,aj=0,bj=0,cj=0,dj=0,ej=0,fj=0,gj=0,hj=0,ij=0,jj=0,kj=0,lj=0,mj=0,nj=0,oj=0,pj=0,qj=0,rj=0,sj=0,tj=0,uj=0,vj=0,wj=0,xj=0,yj=0,zj=0,Aj=0,Bj=0,Cj=0,Dj=0,Ej=0,Fj=0,Gj=0,Ij=0,Jj=0,Kj=0,Lj=0,Mj=0,Nj=0,Oj=0,Pj=0,Qj=0,Rj=0,Sj=0,Tj=0,Uj=0,Vj=0,Wj=0,Xj=0,Yj=0,Zj=0,$j=0,_j=0,ak=0,bk=0,ck=0,dk=0,ek=0,fk=0,gk=0,hk=0,ik=0,jk=0,kk=0,lk=0,mk=0,nk=0,ok=0,pk=0,qk=0,rk=0,sk=0,tk=0,uk=0,vk=0,wk=0,xk=0,yk=0,zk=0,Ak=0,Bk=0,Ck=0,Dk=0,Ek=0,Fk=0,Gk=0,Ik=0,Jk=0,Lk=0,Mk=0,Nk=0,Am=0,Bm=0,Cm=0,Dm=0,Em=0,Fm=0,Gm=0,Hm=0,Im=0,Jm=0,Km=0,Lm=0,Mm=0,Nm=0,Om=0,Pm=0,Qm=0,Rm=0,Sm=0,Tm=0,Um=0,Vm=0,Wm=0,Xm=0,Ym=0,Zm=0,$m=0,_m=0,an=0,bn=0,cn=0,dn=0,en=0,fn=0,gn=0,hn=0,jn=0,kn=0,ln=0,mn=0,nn=0,on=0,pn=0,qn=0,rn=0,sn=0,tn=0,un=0,vn=0,wn=0,xn=0,yn=0,zn=0,An=0,Bn=0,Cn=0,Dn=0,En=0,Fn=0,Gn=0,Hn=0,In=0,Jn=0,Kn=0,Ln=0,Mn=0,Nn=0,On=0,Pn=0,Qn=0,Rn=0,Sn=0,Tn=0,Un=0,Vn=0,Wn=0,Xn=0,Yn=0,Zn=0,$n=0,_n=0,ao=0,bo=0,co=0,eo=0,fo=0,go=0,ho=0,io=0,jo=0,ko=0,lo=0,mo=0,no=0,oo=0,po=0,qo=0,ro=0,so=0,to=0,uo=0,vo=0,wo=0,xo=0,yo=0,zo=0,Ao=0,Bo=0,Co=0,Do=0,Eo=0,Fo=0,Go=0,Ho=0,Io=0,Jo=0,Ko=0,Lo=0,Mo=0,No=0,Oo=0,Po=0,Qo=0,Ro=0,So=0,To=0,Uo=0,Vo=0,Wo=0,Xo=0,Yo=0,Zo=0,$o=0,_o=0,ap=0,bp=0,cp=0,dp=0,ep=0,fp=0,gp=0,hp=0,ip=0,jp=0,kp=0,lp=0,mp=0,np=0,op=0,pp=0,qp=0,rp=0,sp=0,tp=0,up=0,vp=0,wp=0,xp=0,yp=0,zp=0,Ap=0,Bp=0,Cp=0,Dp=0,Ep=0,Fp=0,Gp=0,Hp=0,Ip=0,Jp=0,Kp=0,Lp=0,Mp=0,Np=0,Op=0,Pp=0,Qp=0,Rp=0,Sp=0,Tp=0,Up=0,Vp=0,Wp=0,Xp=0,Yp=0,Zp=0,$p=0,_p=0,aq=0,bq=0,cq=0,dq=0,eq=0,fq=0,gq=0,hq=0,iq=0,jq=0,kq=0,lq=0,mq=0,nq=0,oq=0,pq=0,qq=0,rq=0,sq=0,tq=0,uq=0,vq=0,wq=0,xq=0,yq=0,zq=0,Aq=0,Bq=0,Cq=0,Dq=0,Eq=0,Fq=0,Gq=0,Hq=0,Iq=0,Jq=0,Kq=0,Lq=0,Mq=0,Nq=0,Oq=0,Pq=0,Qq=0,Rq=0,Sq=0,Tq=0,Uq=0,Vq=0,Wq=0,Xq=0,Yq=0,Zq=0,$q=0,_q=0,ar=0,br=0,cr=0,dr=0,er=0,fr=0,gr=0,hr=0,ir=0,kr=0,lr=0,mr=0,nr=0,or=0,pr=0,qr=0,rr=0,sr=0,tr=0,ur=0,vr=0,wr=0,xr=0,yr=0,zr=0,Ar=0,Br=0,Cr=0,Dr=0,Er=0,Fr=0,Gr=0,Hr=0,Ir=0,Jr=0,Kr=0,Lr=0,Mr=0,Nr=0,Or=0,Pr=0,Qr=0,Rr=0,Sr=0,Tr=0,Ur=0,Vr=0,Wr=0,Xr=0,Yr=0,Zr=0,$r=0,_r=0,as=0,bs=0,cs=0,ds=0,es=0,fs=0,gs=0,hs=0,is=0,js=0,ks=0,ls=0,ms=0,ns=0,os=0,ps=0,qs=0,rs=0,ss=0,ts=0,us=0,vs=0,ws=0,xs=0,ys=0,zs=0,As=0,Bs=0,Cs=0,Ds=0,Es=0,Fs=0,Gs=0,Hs=0,Is=0,Js=0,Ks=0,Ls=0,Ms=0,Ns=0,Os=0,Ps=0,Qs=0,Rs=0,Ss=0,Ts=0,Us=0,Vs=0,Ws=0,Xs=0,Ys=0,Zs=0,$s=0,_s=0,at=0,bt=0,ct=0,dt=0,et=0,ft=0,gt=0,ht=0,it=0,jt=0,kt=0,lt=0,mt=0,nt=0,ot=0,pt=0,qt=0,rt=0,st=0,tt=0,ut=0,vt=0,wt=0,xt=0,yt=0,zt=0,At=0,Bt=0,Ct=0,Dt=0,Et=0,Ft=0,Gt=0,Ht=0,It=0,Jt=0,Kt=0,Lt=0,Mt=0,Nt=0,Ot=0,Pt=0,Qt=0,Rt=0,St=0,Tt=0,Ut=0,Vt=0,Wt=0,Xt=0,Yt=0,Zt=0,$t=0,_t=0,au=0,bu=0,cu=0,du=0,eu=0,fu=0,gu=0,hu=0,iu=0,ju=0,ku=0,lu=0,mu=0,nu=0,ou=0,pu=0,qu=0,ru=0,su=0,tu=0,uu=0,vu=0,wu=0,xu=0,yu=0,zu=0,Au=0,Bu=0,Cu=0,Du=0,Eu=0,Fu=0,Gu=0,Hu=0,Iu=0,Ju=0,Ku=0,Lu=0,Mu=0,Nu=0,Ou=0,Pu=0,Qu=0,Ru=0,Su=0,Tu=0,Uu=0,Vu=0,Wu=0,Xu=0,Yu=0,Zu=0,$u=0,_u=0,av=0,bv=0,cv=0,dv=0,ev=0,fv=0,gv=0,hv=0,iv=0,jv=0,kv=0,lv=0,mv=0,nv=0,ov=0,pv=0,qv=0,rv=0,sv=0,tv=0,uv=0,vv=0,wv=0,xv=0,yv=0,zv=0,Av=0,Bv=0,Cv=0,Dv=0,Ev=0,Fv=0,Gv=0,Hv=0,Iv=0,Jv=0,Kv=0,Lv=0,Mv=0,Nv=0,Ov=0,Pv=0,Qv=0,Rv=0,Sv=0,Tv=0,Uv=0,Vv=0,Wv=0,Xv=0,Yv=0,Zv=0,_v=0,aw=0,cw=0,dw=0,ew=0,fw=0,gw=0,hw=0,iw=0,jw=0,kw=0,lw=0,mw=0,nw=0,ow=0,pw=0,qw=0,rw=0,sw=0,tw=0,uw=0,vw=0,ww=0,xw=0,yw=0,zw=0,Aw=0,Bw=0,Cw=0,Dw=0,Ew=0,Fw=0,Gw=0,Hw=0,Iw=0,Jw=0,Kw=0,Lw=0,Mw=0,Nw=0,Ow=0,Pw=0,Qw=0,Rw=0,Sw=0,Tw=0,Uw=0,Vw=0,Ww=0,Xw=0,Yw=0,Zw=0,_w=0,ax=0,bx=0,cx=0,dx=0,ex=0,fx=0,gx=0,hx=0,ix=0,jx=0,kx=0,lx=0,mx=0,nx=0,ox=0,px=0,qx=0,rx=0,sx=0,tx=0,ux=0,vx=0,wx=0,xx=0,yx=0,zx=0,Ax=0,Bx=0,Cx=0,Dx=0,Ex=0,Fx=0,Gx=0,Hx=0,Ix=0,Jx=0,Kx=0,Lx=0,Mx=0,Nx=0,Ox=0,Px=0,Qx=0,Rx=0,Sx=0,Tx=0,Ux=0,Vx=0,Wx=0,Xx=0,Yx=0,Zx=0,_x=0,ay=0,by=0,cy=0,dy=0,ey=0,fy=0,gy=0,hy=0,iy=0,jy=0,ky=0,ly=0,my=0,ny=0,oy=0,py=0,qy=0,ry=0,sy=0,ty=0,uy=0,vy=0,wy=0,xy=0,yy=0,zy=0,Ay=0,By=0,Cy=0,Dy=0,Ey=0,Fy=0,Gy=0,Hy=0,Iy=0,Jy=0,Ky=0,Ly=0,My=0,Ny=0,Oy=0,Py=0,Qy=0,Ry=0,Sy=0,Ty=0,Uy=0,Vy=0,Wy=0,Xy=0,Yy=0,Zy=0,$y=0,_y=0,az=0,bz=0,cz=0,dz=0,ez=0,fz=0,gz=0,hz=0,iz=0,jz=0,kz=0,lz=0,mz=0,nz=0,oz=0,pz=0,qz=0,rz=0,sz=0,tz=0,uz=0,vz=0,wz=0,xz=0,yz=0,zz=0,Az=0,Bz=0,Cz=0,Dz=0,Ez=0,Gz=0,Hz=0,Iz=0,Jz=0,Kz=0,Lz=0,Mz=0,Nz=0,Oz=0,Pz=0,Qz=0,Rz=0,Sz=0,Tz=0,Uz=0,Vz=0,Wz=0,Xz=0,Yz=0,Zz=0,$z=0,_z=0,aA=0,bA=0,cA=0,dA=0,eA=0,fA=0,gA=0,hA=0,iA=0,jA=0,kA=0,lA=0,mA=0,nA=0,oA=0,pA=0,qA=0,rA=0,sA=0,tA=0,uA=0,vA=0,wA=0,xA=0,yA=0,zA=0,AA=0,BA=0,CA=0,DA=0,EA=0,FA=0,GA=0,HA=0,IA=0,JA=0,KA=0,LA=0,MA=0,NA=0,OA=0,PA=0,QA=0,RA=0,SA=0,TA=0,UA=0,VA=0,WA=0,XA=0,YA=0,ZA=0,$A=0,_A=0,aB=0,bB=0,cB=0,dB=0,eB=0,fB=0,gB=0,hB=0,iB=0,jB=0,kB=0,lB=0,mB=0,nB=0,oB=0,pB=0,qB=0,rB=0,sB=0,tB=0,uB=0,vB=0,wB=0,xB=0,yB=0,zB=0,AB=0,BB=0,CB=0,DB=0,EB=0,FB=0,GB=0,HB=0,IB=0,JB=0,KB=0,LB=0,MB=0,NB=0,OB=0,PB=0,QB=0,RB=0,SB=0,TB=0,UB=0,VB=0,WB=0,XB=0,YB=0,ZB=0,$B=0,_B=0,aC=0,bC=0,cC=0,dC=0,eC=0,fC=0,gC=0,hC=0,iC=0,jC=0,kC=0,lC=0,mC=0,nC=0,oC=0,pC=0,qC=0,rC=0,sC=0,tC=0,uC=0,vC=0,wC=0,xC=0,yC=0,zC=0,AC=0,BC=0,CC=0,DC=0,EC=0,FC=0,GC=0,HC=0,IC=0,JC=0,KC=0,LC=0,MC=0,NC=0,OC=0,PC=0,QC=0,RC=0,SC=0,TC=0,UC=0,VC=0,WC=0,XC=0,YC=0,ZC=0,$C=0,_C=0,aD=0,bD=0,cD=0,dD=0,eD=0,fD=0,gD=0,hD=0,iD=0,jD=0,kD=0,lD=0,mD=0,nD=0,oD=0,pD=0,qD=0,rD=0,sD=0,tD=0,uD=0,vD=0,wD=0,xD=0,yD=0,zD=0,AD=0,BD=0,CD=0,DD=0,ED=0,FD=0,GD=0,HD=0,ID=0,JD=0,KD=0,LD=0,MD=0,ND=0,OD=0,PD=0,QD=0,RD=0,SD=0,TD=0,UD=0,VD=0,WD=0,XD=0,YD=0,ZD=0,$D=0,_D=0,aE=0,bE=0,cE=0,dE=0,eE=0,fE=0,gE=0,hE=0,iE=0,jE=0,kE=0,lE=0,mE=0,nE=0,oE=0,pE=0,qE=0,rE=0,sE=0,tE=0,uE=0,vE=0,wE=0,xE=0,yE=0,zE=0,AE=0,BE=0,CE=0,DE=0,EE=0,FE=0,GE=0,HE=0,IE=0,JE=0,KE=0,LE=0,ME=0,NE=0,OE=0,PE=0,QE=0,RE=0,SE=0,TE=0,UE=0,VE=0,WE=0,XE=0,YE=0,ZE=0,$E=0,_E=0,aF=0,bF=0,cF=0,dF=0,eF=0,fF=0,gF=0,hF=0,iF=0,jF=0,kF=0,lF=0,mF=0,nF=0,oF=0,pF=0,qF=0,rF=0,sF=0,tF=0,uF=0,vF=0,wF=0,xF=0,yF=0,zF=0,AF=0,BF=0,CF=0,DF=0,EF=0,FF=0,GF=0,HF=0,IF=0,JF=0,KF=0,LF=0,MF=0,NF=0,OF=0,PF=0,QF=0,RF=0,SF=0,TF=0,UF=0,VF=0,WF=0,XF=0,YF=0,ZF=0,$F=0,_F=0,aG=0,bG=0,cG=0,dG=0,eG=0,fG=0,gG=0,hG=0,iG=0,jG=0,kG=0,lG=0,mG=0,nG=0,oG=0,pG=0,qG=0,rG=0,sG=0,tG=0,uG=0,vG=0,wG=0,xG=0,yG=0,zG=0,AG=0,BG=0,CG=0,DG=0,EG=0,FG=0,GG=0,HG=0,IG=0,JG=0,KG=0,LG=0,MG=0,NG=0,OG=0,PG=0,QG=0,RG=0,SG=0,TG=0,UG=0,VG=0,WG=0,XG=0,YG=0,ZG=0,$G=0,_G=0,aH=0,bH=0,cH=0,dH=0,eH=0,fH=0,gH=0,hH=0,iH=0,jH=0,kH=0,lH=0,mH=0,nH=0,oH=0,pH=0,qH=0,rH=0,sH=0,tH=0,uH=0,vH=0,wH=0,xH=0,yH=0,zH=0,AH=0,BH=0,CH=0,DH=0,EH=0,FH=0,GH=0,HH=0,IH=0,JH=0,KH=0,LH=0,MH=0,NH=0,OH=0,PH=0,QH=0,RH=0,SH=0,TH=0,UH=0,VH=0,WH=0,XH=0,YH=0,ZH=0,$H=0,_H=0,aI=0,bI=0,cI=0,dI=0,eI=0,fI=0,gI=0,hI=0,iI=0,jI=0,kI=0,lI=0,mI=0,nI=0,oI=0,pI=0,qI=0,rI=0,sI=0,tI=0,uI=0,vI=0,wI=0,xI=0,yI=0,zI=0,AI=0,BI=0,CI=0,DI=0,EI=0,FI=0,GI=0,HI=0,II=0,JI=0,KI=0,LI=0,MI=0,NI=0,OI=0,PI=0,QI=0,RI=0,SI=0,TI=0,UI=0,VI=0,WI=0,XI=0,YI=0,ZI=0,$I=0,_I=0,aJ=0,bJ=0,cJ=0,dJ=0,eJ=0,fJ=0,gJ=0,hJ=0,iJ=0,jJ=0,kJ=0,lJ=0,mJ=0,nJ=0,oJ=0,pJ=0,qJ=0,rJ=0,sJ=0,tJ=0,uJ=0,vJ=0,wJ=0,xJ=0,yJ=0,zJ=0,AJ=0,BJ=0,CJ=0,DJ=0,EJ=0,FJ=0,GJ=0,HJ=0,IJ=0,JJ=0,KJ=0,LJ=0,MJ=0,NJ=0,OJ=0,PJ=0,QJ=0,RJ=0,SJ=0,TJ=0,UJ=0,VJ=0,WJ=0,XJ=0,YJ=0,ZJ=0,$J=0,_J=0,aK=0,bK=0,cK=0,dK=0,eK=0,fK=0,gK=0,hK=0,iK=0,jK=0,kK=0,lK=0,mK=0,nK=0,oK=0,pK=0,qK=0,rK=0,sK=0,tK=0,uK=0,vK=0,wK=0,xK=0,yK=0,zK=0,AK=0,BK=0,CK=0,DK=0,EK=0,FK=0,GK=0,HK=0,IK=0,JK=0,KK=0,LK=0,MK=0,NK=0,OK=0,PK=0,QK=0,RK=0,SK=0,TK=0,UK=0,VK=0,WK=0,XK=0,YK=0,ZK=0,$K=0,aL=0,bL=0,cL=0,dL=0,eL=0,fL=0,gL=0,hL=0,iL=0,jL=0,kL=0,lL=0,mL=0,nL=0,oL=0,pL=0,qL=0,rL=0,sL=0,tL=0,uL=0,vL=0,wL=0,xL=0,yL=0,zL=0,AL=0,BL=0,CL=0,DL=0,EL=0,FL=0,GL=0,HL=0,IL=0,JL=0,KL=0,LL=0,ML=0,NL=0,OL=0,PL=0,QL=0,RL=0,SL=0,TL=0,UL=0,VL=0,WL=0,XL=0,YL=0,ZL=0,$L=0,_L=0,aM=0,bM=0,cM=0,dM=0,eM=0,fM=0,gM=0,hM=0,iM=0,jM=0,kM=0,lM=0,mM=0,nM=0,oM=0,pM=0,qM=0,rM=0,sM=0,tM=0,uM=0,vM=0,wM=0,xM=0,yM=0,zM=0,AM=0,BM=0,CM=0,DM=0,EM=0,FM=0,GM=0,HM=0,IM=0,JM=0,KM=0,LM=0,MM=0,NM=0,OM=0,PM=0,QM=0,RM=0,SM=0,TM=0,UM=0,VM=0,WM=0,XM=0,YM=0,ZM=0,$M=0,_M=0,aN=0,bN=0,cN=0,dN=0,eN=0,fN=0,gN=0,hN=0,iN=0,jN=0,kN=0,lN=0,mN=0,nN=0,oN=0,pN=0,qN=0,rN=0,sN=0,tN=0,uN=0,vN=0,wN=0,xN=0,yN=0,zN=0,AN=0,BN=0,CN=0,DN=0,EN=0,FN=0,GN=0,HN=0,IN=0,JN=0,KN=0,LN=0,MN=0,NN=0,ON=0,PN=0,QN=0,RN=0,SN=0,TN=0,UN=0,VN=0,WN=0,XN=0,YN=0,ZN=0,$N=0,_N=0,aO=0,bO=0,cO=0,dO=0,eO=0,fO=0,gO=0,hO=0,iO=0,jO=0,kO=0,lO=0,mO=0,nO=0,oO=0,pO=0,qO=0,rO=0,sO=0,tO=0,uO=0,vO=0,wO=0,xO=0,yO=0,zO=0,AO=0,BO=0,CO=0,DO=0,EO=0,FO=0,GO=0,HO=0,IO=0,JO=0,KO=0,LO=0,MO=0,NO=0,OO=0,PO=0,QO=0,RO=0,SO=0,TO=0,UO=0,VO=0,WO=0,XO=0,YO=0,ZO=0,$O=0,_O=0,aP=0,bP=0,cP=0,dP=0,eP=0,fP=0,gP=0,hP=0,iP=0,jP=0,kP=0,lP=0,mP=0,nP=0,oP=0,pP=0,qP=0,rP=0,sP=0,tP=0,uP=0,vP=0,wP=0,xP=0,yP=0,zP=0,AP=0,BP=0,CP=0,DP=0,EP=0,FP=0,GP=0,HP=0,IP=0,JP=0,KP=0,LP=0,MP=0,NP=0,OP=0,PP=0,QP=0,RP=0,SP=0,TP=0,UP=0,VP=0,WP=0,XP=0,YP=0,ZP=0,$P=0,_P=0,aQ=0,bQ=0,cQ=0,dQ=0,eQ=0,fQ=0,gQ=0,hQ=0,iQ=0,jQ=0,kQ=0,lQ=0,mQ=0,nQ=0,oQ=0,pQ=0,qQ=0,rQ=0,sQ=0,tQ=0,uQ=0,vQ=0,wQ=0,xQ=0,yQ=0,zQ=0,AQ=0,BQ=0,CQ=0,DQ=0,EQ=0,FQ=0,GQ=0,HQ=0,IQ=0,JQ=0,KQ=0,LQ=0,MQ=0,NQ=0,OQ=0,PQ=0,QQ=0,RQ=0,SQ=0,TQ=0,UQ=0,VQ=0,WQ=0,XQ=0,YQ=0,ZQ=0,$Q=0,_Q=0,aR=0,bR=0,cR=0,dR=0,eR=0,fR=0,gR=0,hR=0,iR=0,jR=0,kR=0,lR=0,mR=0,nR=0,oR=0,pR=0,qR=0,rR=0,sR=0,tR=0,uR=0,vR=0,wR=0,xR=0,yR=0,zR=0,AR=0,BR=0,CR=0,DR=0,ER=0,FR=0,GR=0,HR=0,IR=0,JR=0,KR=0,LR=0,MR=0,NR=0,OR=0,PR=0,QR=0,RR=0,SR=0,TR=0,UR=0,VR=0,WR=0,XR=0,YR=0,ZR=0,$R=0,_R=0,aS=0,bS=0,cS=0,dS=0,eS=0,fS=0,gS=0,hS=0,iS=0,jS=0,kS=0,lS=0,mS=0,nS=0,oS=0,pS=0,qS=0,rS=0,sS=0,tS=0,uS=0,vS=0,wS=0,xS=0,yS=0,zS=0,AS=0,BS=0,CS=0,DS=0,ES=0,FS=0,GS=0,HS=0,IS=0,JS=0,KS=0,LS=0,MS=0,NS=0,OS=0,PS=0,QS=0,RS=0,SS=0,TS=0,US=0,VS=0,WS=0,XS=0,YS=0,ZS=0,$S=0,_S=0,aT=0,bT=0,cT=0,dT=0,eT=0,fT=0,gT=0,hT=0,iT=0,jT=0,kT=0,lT=0,mT=0,nT=0,oT=0,pT=0,qT=0,rT=0,sT=0,tT=0,uT=0,vT=0,wT=0,xT=0,yT=0,zT=0,AT=0,BT=0,CT=0,DT=0,ET=0,FT=0,GT=0,HT=0,IT=0,JT=0,KT=0,LT=0,MT=0,NT=0,OT=0,PT=0,QT=0,RT=0,ST=0,TT=0,UT=0,VT=0,WT=0,XT=0,YT=0,ZT=0,$T=0,_T=0,aU=0,bU=0,cU=0,dU=0,eU=0,fU=0,gU=0,hU=0,iU=0,jU=0,kU=0,lU=0,mU=0,nU=0,oU=0,pU=0,qU=0,rU=0,sU=0,tU=0,uU=0,vU=0,wU=0,xU=0,yU=0,zU=0,AU=0,BU=0,CU=0,DU=0,EU=0,FU=0,GU=0,HU=0,IU=0,JU=0,KU=0,LU=0,MU=0,NU=0,OU=0,PU=0,QU=0,RU=0,SU=0,TU=0,UU=0,VU=0,WU=0,XU=0,YU=0,ZU=0,$U=0,_U=0,aV=0,bV=0,cV=0,dV=0,eV=0,fV=0,gV=0,hV=0,iV=0,jV=0,kV=0,lV=0,mV=0,nV=0,oV=0,pV=0,qV=0,rV=0,sV=0,tV=0,uV=0,vV=0,wV=0,xV=0,yV=0,zV=0,AV=0,BV=0,CV=0,DV=0,EV=0,FV=0,GV=0,HV=0,IV=0,JV=0,KV=0,LV=0,MV=0,NV=0,OV=0,PV=0,QV=0,RV=0,SV=0,TV=0,UV=0,VV=0,WV=0,XV=0,YV=0,ZV=0,$V=0,_V=0,aW=0,bW=0,cW=0,dW=0,eW=0,fW=0,gW=0,hW=0,iW=0,jW=0,kW=0,lW=0,mW=0,nW=0,oW=0,pW=0,qW=0,rW=0,sW=0,tW=0,uW=0,vW=0,wW=0,xW=0,yW=0,zW=0,AW=0,BW=0,CW=0,DW=0,EW=0,FW=0,GW=0,HW=0,IW=0,JW=0,KW=0,LW=0,MW=0,NW=0,OW=0,PW=0,QW=0,RW=0,SW=0,TW=0,UW=0,VW=0,WW=0,XW=0,YW=0,ZW=0,$W=0,_W=0,aX=0,bX=0,cX=0,dX=0,eX=0,fX=0,gX=0,hX=0,iX=0,jX=0,kX=0,lX=0,mX=0,nX=0,oX=0,pX=0,qX=0,rX=0,sX=0,tX=0,uX=0,wX=0,xX=0,yX=0,zX=0,AX=0,BX=0,CX=0,DX=0,EX=0,FX=0,GX=0,HX=0,IX=0,JX=0,KX=0,LX=0,MX=0,NX=0,OX=0,PX=0,QX=0,RX=0,SX=0,TX=0,UX=0,VX=0,WX=0,XX=0,YX=0,ZX=0,$X=0,_X=0,aY=0,bY=0,cY=0,dY=0,eY=0,fY=0,gY=0,hY=0,iY=0,jY=0,kY=0,lY=0,mY=0,nY=0,oY=0,pY=0,qY=0,rY=0,sY=0,tY=0,uY=0,vY=0,wY=0,xY=0,yY=0,zY=0,AY=0,BY=0,CY=0,DY=0,EY=0,FY=0,GY=0,HY=0,IY=0,JY=0,KY=0,LY=0,MY=0,NY=0,OY=0,PY=0,QY=0,RY=0,SY=0,TY=0,UY=0,VY=0,WY=0,XY=0,YY=0,ZY=0,$Y=0,_Y=0,aZ=0,bZ=0,cZ=0,dZ=0,eZ=0,fZ=0,gZ=0,hZ=0,iZ=0,jZ=0,kZ=0,lZ=0,mZ=0,nZ=0,oZ=0,qZ=0,rZ=0,sZ=0,tZ=0,uZ=0,vZ=0,wZ=0,xZ=0,yZ=0,zZ=0,AZ=0,BZ=0,CZ=0,DZ=0,EZ=0,FZ=0,GZ=0,HZ=0,IZ=0,JZ=0,KZ=0,LZ=0,MZ=0,NZ=0,OZ=0,PZ=0,QZ=0,RZ=0,SZ=0,TZ=0,UZ=0,VZ=0,WZ=0,XZ=0,YZ=0,ZZ=0,$Z=0,_Z=0,a$=0,b$=0,c$=0,d$=0,f$=0,g$=0,i$=0,j$=0,l$=0,m$=0,n$=0,o$=0,p$=0,q$=0,r$=0,s$=0,u$=0,v$=0,w$=0,x$=0,z$=0,B$=0,C$=0,D$=0,E$=0,F$=0,G$=0,H$=0,I$=0,J$=0,L$=0,M$=0,N$=0,O$=0,P$=0,Q$=0,R$=0,S$=0,T$=0,U$=0,V$=0,X$=0,Y$=0,Z$=0,$$=0,_$=0,b_=0,c_=0,d_=0,f_=0,g_=0,h_=0,i_=0,j_=0,k_=0,l_=0,m_=0,n_=0,o_=0,p_=0,q_=0,r_=0,s_=0,t_=0,u_=0,v_=0,w_=0,x_=0,y_=0,z_=0,A_=0,B_=0,C_=0,D_=0,E_=0,F_=0,G_=0,H_=0,I_=0,J_=0,K_=0,L_=0,M_=0,O_=0,P_=0,Q_=0,R_=0,S_=0,T_=0,U_=0,V_=0,W_=0,X_=0,Y_=0,Z_=0,$_=0,__=0,a0=0,b0=0,c0=0,d0=0,e0=0,f0=0,h0=0,i0=0,j0=0,k0=0,l0=0,m0=0,n0=0,o0=0,p0=0,q0=0,r0=0,s0=0,t0=0,u0=0,v0=0,w0=0,x0=0,y0=0,z0=0,A0=0,B0=0,C0=0,D0=0,E0=0,F0=0,G0=0,H0=0,I0=0,J0=0,K0=0,L0=0,M0=0,N0=0,O0=0,P0=0,Q0=0,R0=0,S0=0,T0=0,U0=0,V0=0,W0=0,X0=0,Y0=0,Z0=0,$0=0,_0=0,a1=0,b1=0,c1=0,d1=0,e1=0,f1=0,g1=0,h1=0,i1=0,j1=0,k1=0,l1=0,m1=0,n1=0,o1=0,p1=0,q1=0,r1=0,s1=0,t1=0,u1=0,v1=0,w1=0,x1=0,y1=0,z1=0,A1=0,B1=0,C1=0,D1=0,E1=0,F1=0,G1=0,H1=0,I1=0,J1=0,K1=0,L1=0,M1=0,N1=0,O1=0,P1=0,Q1=0,R1=0,S1=0,T1=0,U1=0,V1=0,W1=0,X1=0,Y1=0,Z1=0,$1=0,_1=0,a2=0,b2=0,c2=0,d2=0,e2=0,g2=0,h2=0,i2=0,j2=0,k2=0,l2=0,m2=0,n2=0,o2=0,p2=0,q2=0,r2=0,s2=0,t2=0,u2=0,v2=0,w2=0,x2=0,y2=0,z2=0,A2=0,B2=0,C2=0,D2=0,E2=0,F2=0,G2=0,H2=0,I2=0,J2=0,K2=0,L2=0,M2=0,N2=0,O2=0,P2=0,Q2=0,R2=0,S2=0,T2=0,U2=0,V2=0,W2=0,X2=0,Y2=0,Z2=0,$2=0,_2=0,a3=0,b3=0,c3=0,d3=0,e3=0,f3=0,g3=0,h3=0,i3=0,j3=0,k3=0,l3=0,m3=0,n3=0,o3=0,p3=0,q3=0,r3=0,s3=0,t3=0,u3=0,v3=0,w3=0,x3=0,y3=0,z3=0,A3=0,B3=0,C3=0,D3=0,E3=0,F3=0,G3=0,H3=0,I3=0,J3=0,K3=0,L3=0,M3=0,N3=0,O3=0,P3=0,Q3=0,R3=0,S3=0,T3=0,U3=0,V3=0,W3=0,X3=0,Y3=0,$3=0,_3=0,a4=0,b4=0,c4=0,d4=0,e4=0,f4=0,g4=0,h4=0,i4=0,j4=0,k4=0,l4=0,m4=0,n4=0,o4=0,p4=0,q4=0,r4=0,s4=0,t4=0,u4=0,v4=0,w4=0,x4=0,y4=0,z4=0,A4=0,B4=0,C4=0,D4=0,E4=0,F4=0,G4=0,H4=0,I4=0,J4=0,K4=0,L4=0,M4=0,N4=0,O4=0,P4=0,Q4=0,R4=0,S4=0,T4=0,U4=0,V4=0,W4=0,X4=0,Y4=0,Z4=0,$4=0,_4=0,a5=0,b5=0,c5=0,d5=0,e5=0,f5=0,g5=0,h5=0,i5=0,j5=0,k5=0,l5=0,m5=0,n5=0,o5=0,p5=0,q5=0,r5=0,s5=0,t5=0,u5=0,v5=0,w5=0,x5=0,y5=0,z5=0,A5=0,B5=0,C5=0,D5=0,E5=0,F5=0,G5=0,H5=0,I5=0,J5=0,K5=0,L5=0,M5=0,N5=0,O5=0,P5=0,Q5=0,R5=0,S5=0,T5=0,U5=0,V5=0,W5=0,X5=0,Y5=0,Z5=0,$5=0,_5=0,a6=0,b6=0,c6=0,d6=0,e6=0,f6=0,g6=0,h6=0,i6=0,j6=0,k6=0,l6=0,m6=0,n6=0,o6=0,p6=0,q6=0,r6=0,s6=0,t6=0,u6=0,v6=0,w6=0,x6=0,y6=0,z6=0,A6=0,B6=0,C6=0,D6=0,E6=0,F6=0,G6=0,I6=0,J6=0,K6=0,L6=0,M6=0,N6=0,O6=0,P6=0,Q6=0,R6=0,S6=0,T6=0,U6=0,V6=0,W6=0,X6=0,Y6=0,Z6=0,$6=0,_6=0,a7=0,b7=0,c7=0,d7=0,e7=0,f7=0,g7=0,h7=0,i7=0,j7=0,k7=0,l7=0,m7=0,n7=0,o7=0,p7=0,q7=0,r7=0,s7=0,t7=0,u7=0,v7=0,w7=0,x7=0,y7=0,z7=0,A7=0,B7=0,C7=0,D7=0,E7=0,F7=0,G7=0,H7=0,I7=0,J7=0,K7=0,L7=0,M7=0,N7=0,O7=0,P7=0,Q7=0,R7=0,S7=0,T7=0,U7=0,V7=0,W7=0,X7=0,Y7=0,Z7=0,$7=0,_7=0,a8=0,b8=0,c8=0,d8=0,e8=0,f8=0,g8=0,h8=0,i8=0,j8=0,k8=0,l8=0,m8=0,n8=0,o8=0,p8=0,q8=0,r8=0,s8=0,t8=0,u8=0,v8=0,w8=0,x8=0,y8=0,z8=0,A8=0,B8=0,C8=0,D8=0,E8=0,F8=0,G8=0,H8=0,I8=0,J8=0,K8=0,L8=0,M8=0,N8=0,O8=0,P8=0,Q8=0,R8=0,S8=0,T8=0,U8=0,V8=0,W8=0,X8=0,Y8=0,Z8=0,$8=0,_8=0,a9=0,b9=0,c9=0,d9=0,e9=0,f9=0,g9=0,h9=0,i9=0,j9=0,k9=0,l9=0,m9=0,n9=0,o9=0,p9=0,q9=0,r9=0,s9=0,t9=0,u9=0,v9=0,w9=0,x9=0,y9=0,z9=0,A9=0,B9=0,C9=0,D9=0,E9=0,F9=0,G9=0,H9=0,I9=0,J9=0,K9=0,L9=0,M9=0,N9=0,O9=0,P9=0,Q9=0,R9=0,S9=0,T9=0,U9=0,V9=0,W9=0,X9=0,Y9=0,Z9=0,$9=0,_9=0,aaa=0,baa=0,caa=0,daa=0,eaa=0,gaa=0,haa=0,iaa=0,jaa=0,kaa=0,laa=0,maa=0,naa=0,oaa=0,paa=0,qaa=0,raa=0,saa=0,taa=0,uaa=0,vaa=0,waa=0,yaa=0,zaa=0,Aaa=0,Baa=0,Caa=0,Daa=0,Eaa=0,Faa=0,Gaa=0,Haa=0,Iaa=0,Jaa=0,Kaa=0,Laa=0,Maa=0,Naa=0,Oaa=0,Paa=0,Qaa=0,Raa=0,Saa=0,Taa=0,Uaa=0,Vaa=0,Waa=0,Xaa=0,Yaa=0,Zaa=0,$aa=0,_aa=0,aba=0,bba=0,cba=0,dba=0,eba=0,fba=0,gba=0,hba=0,iba=0,jba=0,kba=0,lba=0,mba=0,nba=0,oba=0,pba=0,qba=0,rba=0,sba=0,tba=0,uba=0,vba=0,wba=0,xba=0,yba=0,Aba=0,Bba=0,Cba=0,Dba=0,Eba=0,Fba=0,Gba=0,Hba=0,Iba=0,Jba=0,Kba=0,Lba=0,Mba=0,Nba=0,Oba=0,Pba=0,Qba=0,Sba=0,Tba=0,Uba=0,Vba=0,Wba=0,Xba=0,Yba=0,Zba=0,$ba=0,_ba=0,aca=0,bca=0,cca=0,dca=0,eca=0,fca=0,gca=0,hca=0,ica=0,jca=0,kca=0,lca=0,mca=0,nca=0,oca=0,pca=0,qca=0,rca=0,sca=0,tca=0,uca=0,vca=0,wca=0,xca=0,yca=0,zca=0,Aca=0,Bca=0,Cca=0,Dca=0,Eca=0,Fca=0,Gca=0,Hca=0,Ica=0,Jca=0,Kca=0,Lca=0,Mca=0,Nca=0,Oca=0,Pca=0,Qca=0,Rca=0,Sca=0,Tca=0,Uca=0,Vca=0,Wca=0,Xca=0,Yca=0,Zca=0,$ca=0,_ca=0,ada=0,bda=0,cda=0,dda=0,eda=0,fda=0,gda=0,hda=0,ida=0,jda=0,kda=0,lda=0,mda=0,nda=0,oda=0,pda=0,qda=0,rda=0,sda=0,tda=0,uda=0,xda=0,yda=0,Bda=0,Cda=0,Dda=0;Dda=o,o=o+1472|0,(0|o)>=(0|p)&&ca(1472),Bda=Dda,rQ=Dda+908|0,m7=Dda+920|0,l=Dda+88|0,Cp=Dda+56|0,Fr=Dda+1336|0,sQ=Dda+1320|0,k=a,It=Fr,Mv=128,Sx=0,yn=0,p9=m7,rb=l,Af=200,g3=0,j5=0,d1=0,Lv=-2,BW=p9,sba=BW,EY=rb,wd=EY;a:for(;;){if(y0=g3,J0=65535&y0,U0=sba,e[U0>>1]=J0,e1=p9,p1=Af,A1=e1+(p1<<1)|0,L1=A1+-2|0,W1=sba,L1>>>0<=W1>>>0){if(q2=sba,B2=p9,M2=q2,X2=B2,h3=M2-X2|0,s3=(0|h3)/2&-1,D3=s3+1|0,Vz=D3,O3=Af,1e4<=O3>>>0){Cda=538;break}if(i4=Af,t4=i4<<1,Af=t4,E4=Af,P4=1e4<E4>>>0,b=P4?1e4:t4,Af=b,$4=p9,YB=$4,k5=k,v5=0|f[k5>>2],G5=Af,R5=6*G5|0,a6=R5+3|0,l6=0|Jc(v5,a6),_D=l6,w6=_D,!(0!=(0|w6))){Cda=538;break}if(S6=_D,b7=p9,n7=Vz,y7=n7<<1,$w(0|S6,0|b7,0|y7),J7=_D,p9=J7,U7=Af,d8=U7<<1,o8=d8+3|0,cG=o8,z8=cG,K8=(z8>>>0)/4&-1,V8=_D,e9=V8+(K8<<2)|0,_D=e9,q9=_D,B9=rb,M9=Vz,X9=M9<<2,$w(0|q9,0|B9,0|X9),gaa=_D,rb=gaa,raa=Af,Caa=raa<<2,Naa=Caa+3|0,fI=Naa,Yaa=fI,hba=(Yaa>>>0)/4&-1,tba=_D,Eba=tba+(hba<<2)|0,_D=Eba,Pba=YB,$ba=(0|Pba)!=(0|m7),$ba&&(jca=k,uca=0|f[jca>>2],Fca=YB,xc(uca,Fca)),Qca=p9,_ca=Vz,kda=Qca+(_ca<<1)|0,m=kda+-2|0,sba=m,z=rb,K=Vz,V=z+(K<<2)|0,fa=V+-4|0,wd=fa,qa=p9,Ba=Af,Ma=qa+(Ba<<1)|0,Xa=Ma+-2|0,gb=sba,Xa>>>0<=gb>>>0){Cda=537;break}}if(Db=g3,3==(0|Db)){Cda=536;break}Zb=g3,ic=3344+(Zb<<1)|0,tc=0|e[ic>>1],Fc=tc<<16>>16,Dh=Fc,Rc=Dh,ad=-771==(0|Rc);do{if(ad)Cda=26;else if(ld=Lv,xd=-2==(0|ld),xd&&(Id=k,Td=0|Qk(rQ,Id),Lv=Td),ce=Lv,ne=(0|ce)<=0,ne?(yn=0,Lv=0):(ye=Lv,Je=ye>>>0<=372,Je?(Ue=Lv,df=58442+Ue|0,pf=0|d[df>>0],Bf=255&pf,Mf=Bf):Mf=2,yn=Mf),Xf=yn,gg=Dh,rg=gg+Xf|0,Dh=rg,Cg=Dh,Ng=(0|Cg)<0,Yg=Dh,hh=10639<(0|Yg),Ng|hh)Cda=26;else if(sh=Dh,Eh=5280+(sh<<1)|0,Ph=0|e[Eh>>1],$h=Ph<<16>>16,ji=yn,(0|$h)!=(0|ji))Cda=26;else{if(Fi=Dh,Qi=26560+(Fi<<1)|0,_i=0|e[Qi>>1],kj=_i<<16>>16,Dh=kj,vj=Dh,(0|vj)<=0){if(Sj=Dh,bk=0==(0|Sj),mk=Dh,xk=-556==(0|mk),bk|xk){Cda=513;break}Jk=Dh,Hm=0-Jk|0,Dh=Hm,Cda=27;break}Sm=j5,bn=0!=(0|Sm),bn&&(nn=j5,zn=nn+-1|0,j5=zn),Lv=-2,Kn=Dh,g3=Kn,Vn=wd,fo=Vn+4|0,wd=fo,f[fo>>2]=0|f[rQ>>2]}}while(0);26==(0|Cda)&&(Cda=0,qo=g3,Bo=47840+(qo<<1)|0,Mo=0|e[Bo>>1],Xo=65535&Mo,Dh=Xo,gp=Dh,rp=0==(0|gp),Cda=rp?513:27);do{if(27==(0|Cda)){switch(Cda=0,Dp=Dh,Op=58815+Dp|0,Zp=0|d[Op>>0],iq=255&Zp,Sx=iq,tq=wd,Eq=Sx,Pq=1-Eq|0,$q=tq+(Pq<<2)|0,f[Cp>>2]=0|f[$q>>2],0|Dh){case 2:ur=k,Gr=ur+40|0,f[Gr>>2]=0,Rr=k,as=Rr+76|0,ls=0|f[as>>2],ws=0!=(0|ls),ws||(Hs=k,Ss=0|Pk(Hs,0,0),bt=k,mt=bt+76|0,f[mt>>2]=Ss);break;case 3:xt=k,Jt=wd,Ut=0|f[Jt>>2],du=0|Rk(xt,Ut),ou=k,zu=ou+1144|0,f[zu>>2]=du,Ku=wd,Vu=0|f[Ku>>2],ev=0!=(0|Vu),ev&&(pv=wd,Av=0|f[pv>>2],Nv=Av+10|0,Yv=0|e[Nv>>1],jw=k,uw=jw+1144|0,Fw=0|f[uw>>2],Qw=Fw+10|0,e[Qw>>1]=Yv,ax=wd,lx=0|f[ax>>2],wx=lx+8|0,Hx=0|e[wx>>1],Tx=k,cy=Tx+1144|0,ny=0|f[cy>>2],yy=ny+8|0,e[yy>>1]=Hx);break;case 4:Jy=wd,Uy=Jy+-4|0,dz=0|f[Uy>>2],f[Cp>>2]=dz;break;case 5:oz=k,zz=0|Sk(oz,0),f[Cp>>2]=zz;break;case 6:Kz=k,Wz=wd,fA=0|f[Wz>>2],qA=0|Sk(Kz,fA),f[Cp>>2]=qA,BA=wd,MA=0|f[BA>>2],XA=0!=(0|MA),XA&&(gB=wd,rB=0|f[gB>>2],CB=rB+10|0,NB=0|e[CB>>1],ZB=0|f[Cp>>2],iC=ZB+10|0,e[iC>>1]=NB,tC=wd,EC=0|f[tC>>2],PC=EC+8|0,$C=0|e[PC>>1],jD=0|f[Cp>>2],uD=jD+8|0,e[uD>>1]=$C);break;case 7:FD=k,QD=wd,aE=QD+-8|0,lE=0|f[aE>>2],wE=k,HE=wd,SE=0|f[HE>>2],bF=0|Ok(wE,SE),mF=0|Tk(FD,lE,bF),f[Cp>>2]=mF;break;case 8:xF=k,IF=0|Sk(xF,0),f[Cp>>2]=IF;break;case 10:TF=k,dG=0|Uk(TF),f[Cp>>2]=dG;break;case 11:oG=k,Kk(oG,59371),zG=k,KG=wd,VG=KG+-12|0,eH=0|f[VG>>2],Vk(zG,eH),f[Cp>>2]=0;break;case 12:pH=wd,AH=pH+-8|0,LH=0|f[AH>>2],WH=0!=(0|LH),WH?(gI=k,rI=wd,CI=rI+-12|0,NI=0|f[CI>>2],YI=wd,hJ=YI+-8|0,sJ=0|f[hJ>>2],DJ=wd,OJ=DJ+-4|0,ZJ=0|f[OJ>>2],jK=0|Wk(gI,NI,sJ,ZJ),f[Cp>>2]=jK,uK=wd,FK=uK+-12|0,QK=0|f[FK>>2],0!=(0|QK)&&(kL=wd,vL=kL+-12|0,GL=0|f[vL>>2],RL=GL+10|0,aM=0|e[RL>>1],mM=0|f[Cp>>2],xM=mM+10|0,e[xM>>1]=aM,IM=wd,TM=IM+-12|0,cN=0|f[TM>>2],nN=cN+8|0,yN=0|e[nN>>1],JN=0|f[Cp>>2],UN=JN+8|0,e[UN>>1]=yN)):(dO=wd,pO=dO+-4|0,AO=0|f[pO>>2],LO=0!=(0|AO),LO?(WO=k,Xk(WO,59391),fP=k,qP=wd,BP=qP+-12|0,MP=0|f[BP>>2],XP=k,gQ=wd,tQ=gQ+-4|0,EQ=0|f[tQ>>2],PQ=0|Ok(XP,EQ),$Q=0|Tk(fP,MP,PQ),g=$Q):(jR=wd,uR=jR+-12|0,FR=0|f[uR>>2],g=FR),f[Cp>>2]=g),QR=wd,_R=0|f[QR>>2],kS=0!=(0|_R),kS&&(wS=0|f[Cp>>2],HS=0!=(0|wS),SS=k,HS?(bT=0|f[Cp>>2],mT=wd,xT=0|f[mT>>2],IT=0|Yk(SS,bT,xT),h=IT):(TT=wd,cU=0|f[TT>>2],nU=k,zU=k,KU=0|Hk(zU),VU=0|Ok(nU,KU),eV=0|Tk(SS,cU,VU),h=eV),f[Cp>>2]=h);break;case 13:pV=wd,AV=pV+-4|0,LV=0|f[AV>>2],f[Cp>>2]=LV;break;case 14:WV=k,fW=0|Sk(WV,0),f[Cp>>2]=fW;break;case 15:qW=k,CW=wd,NW=0|f[CW>>2],YW=0|Sk(qW,NW),f[Cp>>2]=YW,hX=wd,sX=0|f[hX>>2],DX=0!=(0|sX),DX&&(OX=wd,ZX=0|f[OX>>2],iY=ZX+10|0,tY=0|e[iY>>1],FY=0|f[Cp>>2],QY=FY+10|0,e[QY>>1]=tY,_Y=wd,kZ=0|f[_Y>>2],vZ=kZ+8|0,GZ=0|e[vZ>>1],RZ=0|f[Cp>>2],a$=RZ+8|0,e[a$>>1]=GZ);break;case 16:l$=k,w$=wd,I$=w$+-8|0,T$=0|f[I$>>2],c_=k,n_=wd,y_=0|f[n_>>2],J_=0|Ok(c_,y_),U_=0|Tk(l$,T$,J_),f[Cp>>2]=U_;break;case 17:d0=k,l0=wd,m0=0|f[l0>>2],o0=0|Sk(d0,m0),f[Cp>>2]=o0;break;case 18:p0=k,q0=p0+40|0,f[q0>>2]=7;break;case 19:r0=k,s0=wd,t0=s0+-8|0,u0=0|f[t0>>2],v0=wd,w0=0|f[v0>>2],x0=0|Zk(r0,u0,w0),f[Cp>>2]=x0;break;case 20:z0=wd,A0=0|f[z0>>2],f[Cp>>2]=A0;break;case 21:B0=k,C0=wd,D0=0|f[C0>>2],E0=0|$k(D0),F0=wd,G0=F0+-8|0,H0=0|f[G0>>2],I0=0|_k(B0,E0,H0,0),f[Cp>>2]=I0;break;case 22:K0=k,L0=wd,M0=0|f[L0>>2],N0=0|$k(M0),O0=wd,P0=O0+-8|0,Q0=0|f[P0>>2],R0=0|al(K0,N0,Q0,0),f[Cp>>2]=R0;break;case 23:S0=k,T0=wd,V0=0|f[T0>>2],W0=0|$k(V0),X0=wd,Y0=X0+-8|0,Z0=0|f[Y0>>2],$0=0|bl(S0,W0,Z0),f[Cp>>2]=$0;break;case 24:_0=k,a1=wd,b1=0|f[a1>>2],c1=0|$k(b1),f1=wd,g1=f1+-8|0,h1=0|f[g1>>2],i1=0|cl(_0,c1,h1),f[Cp>>2]=i1;break;case 25:j1=k,k1=wd,l1=k1+-8|0,m1=0|f[l1>>2],n1=k,o1=k,q1=wd,r1=0|f[q1>>2],s1=0|dl(o1,0,0,r1),t1=0|Ok(n1,s1),u1=0|Wk(j1,m1,t1,0),f[Cp>>2]=u1;break;case 26:v1=k,Kk(v1,59422),w1=k,x1=wd,y1=x1+-4|0,z1=0|f[y1>>2],B1=0|el(w1,z1),f[Cp>>2]=B1;break;case 28:C1=k,D1=wd,E1=D1+-8|0,F1=0|f[E1>>2],G1=wd,H1=0|f[G1>>2],I1=0|fl(C1,F1,H1),f[Cp>>2]=I1;break;case 29:J1=k,K1=wd,M1=K1+-8|0,N1=0|f[M1>>2],O1=wd,P1=O1+-4|0,Q1=0|f[P1>>2],R1=wd,S1=0|f[R1>>2],T1=0|gl(J1,N1,Q1,S1),f[Cp>>2]=T1;break;case 30:U1=k,V1=k,X1=wd,Y1=X1+-20|0,Z1=0|f[Y1>>2],$1=k,_1=0|hl($1,69083,2),a2=wd,b2=a2+-12|0,c2=0|f[b2>>2],d2=0|il(V1,Z1,_1,c2),e2=wd,g2=e2+-4|0,h2=0|f[g2>>2],i2=wd,j2=0|f[i2>>2],k2=0|gl(U1,d2,h2,j2),f[Cp>>2]=k2;break;case 31:l2=k,m2=k,n2=wd,o2=n2+-16|0,p2=0|f[o2>>2],r2=wd,s2=r2+-8|0,t2=0|f[s2>>2],u2=0|il(m2,p2,t2,0),v2=wd,w2=v2+-4|0,x2=0|f[w2>>2],y2=wd,z2=0|f[y2>>2],A2=0|gl(l2,u2,x2,z2),f[Cp>>2]=A2;break;case 32:C2=k,D2=k,E2=wd,F2=E2+-16|0,G2=0|f[F2>>2],H2=wd,I2=H2+-8|0,J2=0|f[I2>>2],K2=0|il(D2,G2,J2,0),L2=wd,N2=L2+-4|0,O2=0|f[N2>>2],P2=wd,Q2=0|f[P2>>2],R2=0|gl(C2,K2,O2,Q2),f[Cp>>2]=R2;break;case 33:S2=k,Kk(S2,59439),f[Cp>>2]=0;break;case 34:T2=k,U2=k,V2=wd,W2=V2+-16|0,Y2=0|f[W2>>2],Z2=wd,$2=Z2+-8|0,_2=0|f[$2>>2],a3=0|il(U2,Y2,_2,0),b3=wd,c3=b3+-4|0,d3=0|f[c3>>2],e3=wd,f3=0|f[e3>>2],i3=0|gl(T2,a3,d3,f3),f[Cp>>2]=i3;break;case 35:j3=k,k3=wd,l3=k3+-8|0,m3=0|f[l3>>2],jl(j3,m3),n3=k,o3=0|Sk(n3,0),f[Cp>>2]=o3;break;case 36:p3=k,q3=wd,r3=q3+-8|0,t3=0|f[r3>>2],u3=k,v3=wd,w3=0|f[v3>>2],x3=0|kl(u3,w3),y3=0|ll(p3,t3,x3),f[Cp>>2]=y3;break;case 37:z3=k,A3=wd,B3=A3+-8|0,C3=0|f[B3>>2],E3=wd,F3=0|f[E3>>2],G3=0|fl(z3,C3,F3),f[Cp>>2]=G3;break;case 38:H3=k,I3=wd,J3=I3+-8|0,K3=0|f[J3>>2],L3=k,M3=wd,N3=0|f[M3>>2],P3=0|kl(L3,N3),Q3=0|fl(H3,K3,P3),f[Cp>>2]=Q3;break;case 40:R3=k,S3=wd,T3=S3+-8|0,U3=0|f[T3>>2],V3=wd,W3=0|f[V3>>2],X3=0|ll(R3,U3,W3),f[Cp>>2]=X3;break;case 41:Y3=k,$3=wd,_3=$3+-8|0,a4=0|f[_3>>2],b4=wd,c4=0|f[b4>>2],d4=0|ll(Y3,a4,c4),f[Cp>>2]=d4;break;case 43:e4=k,f4=wd,g4=f4+-8|0,h4=0|f[g4>>2],j4=wd,k4=0|f[j4>>2],l4=0|ml(e4,h4,k4),f[Cp>>2]=l4;break;case 44:m4=k,n4=wd,o4=n4+-8|0,p4=0|f[o4>>2],q4=wd,r4=0|f[q4>>2],s4=0|nl(m4,p4,r4),f[Cp>>2]=s4;break;case 45:u4=k,v4=wd,w4=0|f[v4>>2],x4=0|$k(w4),y4=0|ol(u4,x4,65619),f[Cp>>2]=y4;break;case 46:z4=k,A4=wd,B4=0|f[A4>>2],C4=0|$k(B4),D4=0|ol(z4,C4,65619),f[Cp>>2]=D4;break;case 48:F4=wd,G4=0|f[F4>>2],H4=0!=(0|G4),H4?(K4=wd,L4=0|f[K4>>2],i=L4):(I4=k,J4=0|Hk(I4),i=J4),f[Cp>>2]=i;break;case 53:M4=k,pl(M4);break;case 54:N4=k,O4=wd,Q4=O4+-8|0,R4=0|f[Q4>>2],S4=wd,T4=S4+-4|0,U4=0|f[T4>>2],V4=0|ql(N4,R4,U4),f[Cp>>2]=V4,W4=k,rl(W4);break;case 55:X4=k,Y4=wd,Z4=Y4+-4|0,_4=0|f[Z4>>2],a5=wd,b5=0|f[a5>>2],c5=0|sl(X4,_4,b5),f[Cp>>2]=c5;break;case 56:d5=k,e5=wd,f5=e5+-4|0,g5=0|f[f5>>2],h5=wd,i5=0|f[h5>>2],tl(d5,g5,i5),l5=k,m5=wd,n5=m5+-8|0,o5=0|f[n5>>2],p5=wd,q5=p5+-4|0,r5=0|f[q5>>2],s5=0|sl(l5,o5,r5),f[Cp>>2]=s5;break;case 57:t5=k,u5=wd,w5=u5+-12|0,x5=0|f[w5>>2],y5=wd,z5=y5+-4|0,A5=0|f[z5>>2],B5=wd,C5=0|f[B5>>2],D5=0|il(t5,x5,A5,C5),f[Cp>>2]=D5;break;case 58:E5=k,F5=wd,H5=F5+-4|0,I5=0|f[H5>>2],J5=wd,K5=0|f[J5>>2],tl(E5,I5,K5),L5=k,M5=wd,N5=M5+-16|0,O5=0|f[N5>>2],P5=wd,Q5=P5+-8|0,S5=0|f[Q5>>2],T5=wd,U5=T5+-4|0,V5=0|f[U5>>2],W5=0|il(L5,O5,S5,V5),f[Cp>>2]=W5;break;case 59:X5=k,Y5=wd,Z5=Y5+-12|0,$5=0|f[Z5>>2],_5=wd,b6=_5+-4|0,c6=0|f[b6>>2],d6=wd,e6=0|f[d6>>2],f6=0|il(X5,$5,c6,e6),f[Cp>>2]=f6;break;case 60:g6=k,h6=wd,i6=h6+-4|0,j6=0|f[i6>>2],k6=wd,m6=0|f[k6>>2],tl(g6,j6,m6),n6=k,o6=wd,p6=o6+-16|0,q6=0|f[p6>>2],r6=wd,s6=r6+-8|0,t6=0|f[s6>>2],u6=wd,v6=u6+-4|0,x6=0|f[v6>>2],y6=0|il(n6,q6,t6,x6),f[Cp>>2]=y6;break;case 61:z6=k,A6=wd,B6=0|f[A6>>2],C6=0|ul(z6,B6),f[Cp>>2]=C6;break;case 62:D6=k,E6=wd,F6=0|f[E6>>2],G6=0|vl(D6,F6),f[Cp>>2]=G6;break;case 63:I6=k,J6=k,K6=wd,L6=0|f[K6>>2],M6=0|wl(J6,L6),N6=0|xl(I6,M6),f[Cp>>2]=N6;break;case 64:O6=k,P6=k,Q6=wd,R6=0|f[Q6>>2],T6=0|wl(P6,R6),U6=0|yl(O6,T6),f[Cp>>2]=U6;break;case 65:V6=k,W6=k,X6=wd,Y6=0|f[X6>>2],Z6=0|wl(W6,Y6),$6=0|zl(V6,Z6),f[Cp>>2]=$6;break;case 66:_6=wd,a7=0|f[_6>>2],f[Cp>>2]=a7;break;case 67:c7=wd,d7=c7+-4|0,e7=0|f[d7>>2],f[Cp>>2]=e7;break;case 69:f7=wd,g7=f7+-4|0,h7=0|f[g7>>2],f[Cp>>2]=h7;break;case 70:i7=k,j7=wd,k7=0|f[j7>>2],l7=0|Ok(i7,k7),f[Cp>>2]=l7;break;case 71:o7=k,p7=k,q7=wd,r7=q7+-4|0,s7=0|f[r7>>2],t7=k,u7=wd,v7=0|f[u7>>2],w7=0|Ok(t7,v7),x7=0|Tk(p7,s7,w7),z7=0|Ok(o7,x7),f[Cp>>2]=z7;break;case 72:A7=k,B7=wd,C7=B7+-8|0,D7=0|f[C7>>2],E7=wd,F7=0|f[E7>>2],G7=0|Al(A7,D7,F7),f[Cp>>2]=G7;break;case 73:H7=k,I7=wd,K7=I7+-16|0,L7=0|f[K7>>2],M7=wd,N7=M7+-8|0,O7=0|f[N7>>2],P7=wd,Q7=0|f[P7>>2],R7=0|dl(H7,L7,O7,Q7),f[Cp>>2]=R7;break;case 74:S7=k,T7=wd,V7=T7+-4|0,W7=0|f[V7>>2],X7=k,Y7=0|Hk(X7),Z7=0|Al(S7,W7,Y7),f[Cp>>2]=Z7;break;case 75:$7=k,_7=wd,a8=_7+-12|0,b8=0|f[a8>>2],c8=k,e8=0|Hk(c8),f8=wd,g8=0|f[f8>>2],h8=0|dl($7,b8,e8,g8),f[Cp>>2]=h8;break;case 76:i8=k,j8=wd,k8=0|f[j8>>2],l8=0|Al(i8,0,k8),f[Cp>>2]=l8;break;case 77:m8=k,n8=wd,p8=n8+-8|0,q8=0|f[p8>>2],r8=wd,s8=0|f[r8>>2],t8=0|dl(m8,0,q8,s8),f[Cp>>2]=t8;break;case 78:u8=k,v8=k,w8=0|Hk(v8),x8=0|Al(u8,0,w8),f[Cp>>2]=x8;break;case 79:y8=k,A8=k,B8=0|Hk(A8),C8=wd,D8=0|f[C8>>2],E8=0|dl(y8,0,B8,D8),f[Cp>>2]=E8;break;case 81:F8=k,G8=wd,H8=G8+-4|0,I8=0|f[H8>>2],J8=0|fl(F8,I8,0),f[Cp>>2]=J8;break;case 82:L8=k,M8=wd,N8=M8+-4|0,O8=0|f[N8>>2],P8=0|Ok(L8,O8),f[Cp>>2]=P8;break;case 83:Q8=k,R8=wd,S8=R8+-8|0,T8=0|f[S8>>2],U8=k,W8=wd,X8=W8+-4|0,Y8=0|f[X8>>2],Z8=0|Ok(U8,Y8),$8=0|Tk(Q8,T8,Z8),f[Cp>>2]=$8;break;case 84:_8=k,a9=wd,b9=0|f[a9>>2],c9=0|Ok(_8,b9),f[Cp>>2]=c9;break;case 85:d9=k,f9=wd,g9=f9+-4|0,h9=0|f[g9>>2],i9=k,j9=wd,k9=0|f[j9>>2],l9=0|Ok(i9,k9),m9=0|Tk(d9,h9,l9),f[Cp>>2]=m9;break;case 86:n9=k,o9=wd,r9=0|f[o9>>2],Bl(n9,r9);break;case 87:s9=k,t9=wd,u9=t9+-12|0,v9=0|f[u9>>2],w9=k,x9=0|hl(w9,69083,2),y9=wd,z9=y9+-4|0,A9=0|f[z9>>2],C9=0|il(s9,v9,x9,A9),f[Cp>>2]=C9;break;case 88:D9=k,E9=wd,F9=E9+-8|0,G9=0|f[F9>>2],H9=wd,I9=0|f[H9>>2],J9=0|il(D9,G9,I9,0),f[Cp>>2]=J9;break;case 89:K9=k,L9=wd,N9=L9+-8|0,O9=0|f[N9>>2],P9=wd,Q9=0|f[P9>>2],R9=0|il(K9,O9,Q9,0),f[Cp>>2]=R9;break;case 90:S9=k,T9=wd,U9=T9+-8|0,V9=0|f[U9>>2],W9=wd,Y9=0|f[W9>>2],Z9=0|il(S9,V9,Y9,0),f[Cp>>2]=Z9;break;case 91:$9=k,_9=$9+64|0,aaa=0|f[_9>>2],baa=0!=(0|aaa),baa?Cda=126:(caa=k,daa=caa+68|0,eaa=0|f[daa>>2],0!=(0|eaa)&&(Cda=126)),126==(0|Cda)&&(Cda=0,haa=k,Kk(haa,59462)),iaa=k,jaa=wd,kaa=jaa+-8|0,laa=0|f[kaa>>2],maa=wd,naa=0|f[maa>>2],oaa=0|Cl(iaa,laa,naa),f[Cp>>2]=oaa;break;case 92:paa=k,qaa=paa+64|0,saa=0|f[qaa>>2],taa=0!=(0|saa),taa?Cda=130:(uaa=k,vaa=uaa+68|0,waa=0|f[vaa>>2],0!=(0|waa)&&(Cda=130)),130==(0|Cda)&&(Cda=0,yaa=k,Kk(yaa,59462)),zaa=k,Aaa=wd,Baa=0|f[Aaa>>2],Daa=0|Dl(zaa,Baa),f[Cp>>2]=Daa;break;case 93:Eaa=k,Faa=wd,Gaa=0|f[Faa>>2],jl(Eaa,Gaa),f[Cp>>2]=0;break;case 94:Haa=k,Iaa=wd,Jaa=0|f[Iaa>>2],Bl(Haa,Jaa);break;case 95:Kaa=k,Laa=wd,Maa=Laa+-12|0,Oaa=0|f[Maa>>2],Paa=k,Qaa=0|hl(Paa,69083,2),Raa=wd,Saa=Raa+-4|0,Taa=0|f[Saa>>2],Uaa=0|il(Kaa,Oaa,Qaa,Taa),f[Cp>>2]=Uaa;break;case 96:Vaa=k,Waa=wd,Xaa=Waa+-8|0,Zaa=0|f[Xaa>>2],$aa=wd,_aa=0|f[$aa>>2],aba=0|il(Vaa,Zaa,_aa,0),f[Cp>>2]=aba;break;case 97:bba=k,cba=wd,dba=cba+-8|0,eba=0|f[dba>>2],fba=wd,gba=0|f[fba>>2],iba=0|il(bba,eba,gba,0),f[Cp>>2]=iba;break;case 98:jba=k,kba=wd,lba=kba+-8|0,mba=0|f[lba>>2],nba=wd,oba=0|f[nba>>2],pba=0|il(jba,mba,oba,0),f[Cp>>2]=pba;break;case 99:qba=k,rba=qba+64|0,uba=0|f[rba>>2],vba=0!=(0|uba),vba?Cda=140:(wba=k,xba=wba+68|0,yba=0|f[xba>>2],0!=(0|yba)&&(Cda=140)),140==(0|Cda)&&(Cda=0,Aba=k,Kk(Aba,59462)),Bba=k,Cba=wd,Dba=Cba+-8|0,Fba=0|f[Dba>>2],Gba=wd,Hba=0|f[Gba>>2],Iba=0|Cl(Bba,Fba,Hba),f[Cp>>2]=Iba;break;case 100:Jba=k,Kba=Jba+64|0,Lba=0|f[Kba>>2],Mba=0!=(0|Lba),Mba?Cda=144:(Nba=k,Oba=Nba+68|0,Qba=0|f[Oba>>2],0!=(0|Qba)&&(Cda=144)),144==(0|Cda)&&(Cda=0,Sba=k,Kk(Sba,59462)),Tba=k,Uba=wd,Vba=0|f[Uba>>2],Wba=0|Dl(Tba,Vba),f[Cp>>2]=Wba;break;case 101:Xba=k,Yba=wd,Zba=0|f[Yba>>2],jl(Xba,Zba),f[Cp>>2]=0;break;case 102:_ba=k,Kk(_ba,59490);break;case 104:aca=k,bca=wd,cca=0|f[bca>>2],dca=cca,eca=0|Pk(aca,1,dca),f[Cp>>2]=eca;break;case 105:fca=k,gca=wd,hca=0|f[gca>>2],ica=hca,kca=0|Pk(fca,0,ica),f[Cp>>2]=kca;break;case 106:lca=k,mca=wd,nca=mca+-8|0,oca=0|f[nca>>2],pca=wd,qca=0|f[pca>>2],rca=qca,sca=0|Pk(lca,oca,rca),f[Cp>>2]=sca;break;case 110:tca=k,vca=tca+40|0,f[vca>>2]=3,wca=wd,xca=0|f[wca>>2],f[Cp>>2]=xca;break;case 111:yca=k,zca=yca+40|0,f[zca>>2]=3,Aca=wd,Bca=0|f[Aca>>2],f[Cp>>2]=Bca;break;case 114:Cca=k,Dca=wd,Eca=0|f[Dca>>2],Gca=0|El(Cca,Eca),f[Cp>>2]=Gca;break;case 115:Hca=k,Ica=Hca+40|0,f[Ica>>2]=7;break;case 116:Jca=k,Kca=wd,Lca=Kca+-12|0,Mca=0|f[Lca>>2],Nca=k,Oca=wd,Pca=0|f[Oca>>2],Rca=Pca,Sca=0|Ok(Nca,Rca),Tca=0|Tk(Jca,Mca,Sca),f[Cp>>2]=Tca;break;case 117:Uca=k,Vca=0|Fl(Uca,124),f[Cp>>2]=Vca;break;case 118:Wca=k,Xca=0|Fl(Wca,94),f[Cp>>2]=Xca;break;case 119:Yca=k,Zca=0|Fl(Yca,38),f[Cp>>2]=Zca;break;case 120:$ca=k,ada=0|hl($ca,69156,3),f[Cp>>2]=ada;break;case 121:bda=k,cda=0|hl(bda,69201,2),f[Cp>>2]=cda;break;case 122:dda=k,eda=0|hl(dda,69591,3),f[Cp>>2]=eda;break;case 123:fda=k,gda=0|hl(fda,59525,2),f[Cp>>2]=gda;break;case 124:hda=k,ida=0|hl(hda,59528,2),f[Cp>>2]=ida;break;case 125:jda=k,lda=0|Fl(jda,62),f[Cp>>2]=lda;break;case 126:mda=k,nda=0|hl(mda,59531,2),f[Cp>>2]=nda;break;case 127:oda=k,pda=0|Fl(oda,60),f[Cp>>2]=pda;break;case 128:qda=k,rda=0|hl(qda,59534,2),f[Cp>>2]=rda;break;case 129:sda=k,tda=0|hl(sda,68364,2),f[Cp>>2]=tda;break;case 130:uda=k,n=0|hl(uda,64616,2),f[Cp>>2]=n;break;case 131:q=k,r=0|hl(q,59537,2),f[Cp>>2]=r;break;case 132:s=k,t=0|Fl(s,43),f[Cp>>2]=t;break;case 133:u=k,v=0|Fl(u,45),f[Cp>>2]=v;break;case 134:w=k,x=0|Fl(w,42),f[Cp>>2]=x;break;case 135:y=k,A=0|Fl(y,42),f[Cp>>2]=A;break;case 136:B=k,C=0|Fl(B,47),f[Cp>>2]=C;break;case 137:D=k,E=0|Fl(D,37),f[Cp>>2]=E;break;case 138:F=k,G=0|hl(F,59540,2),f[Cp>>2]=G;break;case 139:H=k,I=0|Fl(H,33),f[Cp>>2]=I;break;case 140:J=k,L=0|Fl(J,126),f[Cp>>2]=L;break;case 141:M=k,N=0|hl(M,59543,2),f[Cp>>2]=N;break;case 142:O=k,P=0|hl(O,59546,2),f[Cp>>2]=P;break;case 143:Q=k,R=0|hl(Q,69083,2),f[Cp>>2]=R;break;case 144:S=k,T=0|hl(S,64619,3),f[Cp>>2]=T;break;case 145:U=k,W=0|Fl(U,96),f[Cp>>2]=W;break;case 186:X=k,Y=wd,Z=Y+-8|0,$=0|f[Z>>2],_=wd,aa=0|f[_>>2],ba=0|ll(X,$,aa),f[Cp>>2]=ba;break;case 187:da=k,ea=wd,ga=ea+-16|0,ha=0|f[ga>>2],ia=k,ja=wd,ka=ja+-8|0,la=0|f[ka>>2],ma=k,na=k,oa=wd,pa=0|f[oa>>2],ra=0|dl(na,0,0,pa),sa=0|Ok(ma,ra),ta=0|Wk(ia,la,sa,0),ua=0|ll(da,ha,ta),f[Cp>>2]=ua;break;case 188:va=k,wa=wd,xa=wa+-8|0,ya=0|f[xa>>2],za=wd,Aa=za+-4|0,Ca=0|f[Aa>>2],Da=wd,Ea=0|f[Da>>2],Fa=0|gl(va,ya,Ca,Ea),f[Cp>>2]=Fa;break;case 189:Ga=k,Ha=wd,Ia=Ha+-16|0,Ja=0|f[Ia>>2],Ka=wd,La=Ka+-12|0,Na=0|f[La>>2],Oa=k,Pa=wd,Qa=Pa+-8|0,Ra=0|f[Qa>>2],Sa=k,Ta=k,Ua=wd,Va=0|f[Ua>>2],Wa=0|dl(Ta,0,0,Va),Ya=0|Ok(Sa,Wa),Za=0|Wk(Oa,Ra,Ya,0),$a=0|gl(Ga,Ja,Na,Za),f[Cp>>2]=$a;break;case 190:_a=k,ab=k,bb=wd,cb=bb+-20|0,db=0|f[cb>>2],eb=k,fb=0|hl(eb,69083,2),hb=wd,ib=hb+-12|0,jb=0|f[ib>>2],kb=0|il(ab,db,fb,jb),lb=wd,mb=lb+-4|0,nb=0|f[mb>>2],ob=wd,pb=0|f[ob>>2],qb=0|gl(_a,kb,nb,pb),f[Cp>>2]=qb;break;case 191:tb=k,ub=k,vb=wd,wb=vb+-16|0,xb=0|f[wb>>2],yb=wd,zb=yb+-8|0,Ab=0|f[zb>>2],Bb=0|il(ub,xb,Ab,0),Cb=wd,Eb=Cb+-4|0,Fb=0|f[Eb>>2],Gb=wd,Hb=0|f[Gb>>2],Ib=0|gl(tb,Bb,Fb,Hb),f[Cp>>2]=Ib;break;case 192:Jb=k,Kb=k,Lb=wd,Mb=Lb+-16|0,Nb=0|f[Mb>>2],Pb=wd,Qb=Pb+-8|0,Rb=0|f[Qb>>2],Sb=0|il(Kb,Nb,Rb,0),Tb=wd,Ub=Tb+-4|0,Vb=0|f[Ub>>2],Wb=wd,Xb=0|f[Wb>>2],Yb=0|gl(Jb,Sb,Vb,Xb),f[Cp>>2]=Yb;break;case 193:$b=k,_b=k,ac=wd,bc=ac+-16|0,cc=0|f[bc>>2],dc=wd,ec=dc+-8|0,fc=0|f[ec>>2],gc=0|il(_b,cc,fc,0),hc=wd,jc=hc+-4|0,kc=0|f[jc>>2],lc=wd,mc=0|f[lc>>2],nc=0|gl($b,gc,kc,mc),f[Cp>>2]=nc;break;case 194:oc=k,Kk(oc,59439),pc=k,qc=0|Sk(pc,0),f[Cp>>2]=qc;break;case 195:rc=k,Kk(rc,59439),sc=k,uc=0|Sk(sc,0),f[Cp>>2]=uc;break;case 196:vc=k,wc=wd,yc=wc+-8|0,zc=0|f[yc>>2],jl(vc,zc),Ac=k,Bc=0|Sk(Ac,0),f[Cp>>2]=Bc;break;case 197:Cc=k,Dc=wd,Ec=Dc+-8|0,Gc=0|f[Ec>>2],Hc=wd,Ic=0|f[Hc>>2],Kc=0|Gl(Cc,Gc,Ic),f[Cp>>2]=Kc;break;case 198:Lc=k,Mc=wd,Nc=Mc+-8|0,Oc=0|f[Nc>>2],Pc=wd,Qc=0|f[Pc>>2],Sc=0|Hl(Lc,Oc,Qc),f[Cp>>2]=Sc;break;case 199:Tc=k,Uc=wd,Vc=Uc+-8|0,Wc=0|f[Vc>>2],Xc=wd,Yc=0|f[Xc>>2],Zc=0|Il(Tc,Wc,64614,Yc),f[Cp>>2]=Zc;break;case 200:$c=k,_c=wd,bd=_c+-8|0,cd=0|f[bd>>2],dd=wd,ed=0|f[dd>>2],fd=0|Il($c,cd,69660,ed),f[Cp>>2]=fd;break;case 201:gd=k,hd=wd,id=hd+-8|0,jd=0|f[id>>2],kd=wd,md=0|f[kd>>2],nd=0|Il(gd,jd,68856,md),f[Cp>>2]=nd;break;case 202:od=k,pd=wd,qd=pd+-8|0,rd=0|f[qd>>2],sd=wd,td=0|f[sd>>2],ud=0|Il(od,rd,59549,td),f[Cp>>2]=ud;break;case 203:vd=k,yd=wd,zd=yd+-8|0,Ad=0|f[zd>>2],Bd=wd,Cd=0|f[Bd>>2],Dd=0|Il(vd,Ad,59551,Cd),f[Cp>>2]=Dd;break;case 204:Ed=k,Fd=wd,Gd=Fd+-8|0,Hd=0|f[Gd>>2],Jd=wd,Kd=0|f[Jd>>2],Ld=0|Il(Ed,Hd,59540,Kd),f[Cp>>2]=Ld;break;case 205:Md=k,Nd=k,Od=wd,Pd=Od+-8|0,Qd=0|f[Pd>>2],Rd=wd,Sd=0|f[Rd>>2],Ud=0|Il(Nd,Qd,59540,Sd),Vd=0|ol(Md,Ud,59546),f[Cp>>2]=Vd;break;case 206:Wd=k,Xd=k,Yd=wd,Zd=Yd+-8|0,$d=0|f[Zd>>2],_d=wd,ae=0|f[_d>>2],be=0|Il(Xd,$d,59540,ae),de=0|ol(Wd,be,59546),f[Cp>>2]=de;break;case 207:ee=k,fe=wd,ge=0|f[fe>>2],he=0|ol(ee,ge,59543),f[Cp>>2]=he;break;case 208:ie=k,je=wd,ke=0|f[je>>2],le=0|ol(ie,ke,59546),f[Cp>>2]=le;break;case 209:me=k,oe=wd,pe=oe+-8|0,qe=0|f[pe>>2],re=wd,se=0|f[re>>2],te=0|Il(me,qe,59553,se),f[Cp>>2]=te;break;case 210:ue=k,ve=wd,we=ve+-8|0,xe=0|f[we>>2],ze=wd,Ae=0|f[ze>>2],Be=0|Il(ue,xe,59555,Ae),f[Cp>>2]=Be;break;case 211:Ce=k,De=wd,Ee=De+-8|0,Fe=0|f[Ee>>2],Ge=wd,He=0|f[Ge>>2],Ie=0|Il(Ce,Fe,69093,He),f[Cp>>2]=Ie;break;case 212:Ke=k,Le=wd,Me=Le+-8|0,Ne=0|f[Me>>2],Oe=wd,Pe=0|f[Oe>>2],Qe=0|Il(Ke,Ne,69156,Pe),f[Cp>>2]=Qe;break;case 213:Re=k,Se=wd,Te=Se+-8|0,Ve=0|f[Te>>2],We=wd,Xe=0|f[We>>2],Ye=0|Il(Re,Ve,65540,Xe),f[Cp>>2]=Ye;break;case 214:Ze=k,$e=wd,_e=$e+-8|0,af=0|f[_e>>2],bf=wd,cf=0|f[bf>>2],ef=0|Il(Ze,af,59531,cf),f[Cp>>2]=ef;break;case 215:ff=k,gf=wd,hf=gf+-8|0,jf=0|f[hf>>2],kf=wd,lf=0|f[kf>>2],mf=0|Il(ff,jf,59557,lf),f[Cp>>2]=mf;break;case 216:nf=k,of=wd,qf=of+-8|0,rf=0|f[qf>>2],sf=wd,tf=0|f[sf>>2],uf=0|Il(nf,rf,59534,tf),f[Cp>>2]=uf;break;case 217:vf=k,wf=wd,xf=wf+-8|0,yf=0|f[xf>>2],zf=wd,Cf=0|f[zf>>2],Df=0|Il(vf,yf,69201,Cf),f[Cp>>2]=Df;break;case 218:Ef=k,Ff=wd,Gf=Ff+-8|0,Hf=0|f[Gf>>2],If=wd,Jf=0|f[If>>2],Kf=0|Il(Ef,Hf,69591,Jf),f[Cp>>2]=Kf;break;case 219:Lf=k,Nf=wd,Of=Nf+-8|0,Pf=0|f[Of>>2],Qf=wd,Rf=0|f[Qf>>2],Sf=0|Il(Lf,Pf,68364,Rf),f[Cp>>2]=Sf;break;case 220:Tf=k,Uf=wd,Vf=Uf+-8|0,Wf=0|f[Vf>>2],Yf=wd,Zf=0|f[Yf>>2],$f=0|Il(Tf,Wf,59525,Zf),f[Cp>>2]=$f;break;case 221:_f=k,ag=wd,bg=ag+-8|0,cg=0|f[bg>>2],dg=wd,eg=0|f[dg>>2],fg=0|Il(_f,cg,59528,eg),f[Cp>>2]=fg;break;case 222:hg=k,ig=wd,jg=0|f[ig>>2],kg=0|$k(jg),lg=0|ol(hg,kg,65619),f[Cp>>2]=lg;break;case 223:mg=k,ng=wd,og=0|f[ng>>2],pg=0|$k(og),qg=0|ol(mg,pg,59559),f[Cp>>2]=qg;break;case 224:sg=k,tg=wd,ug=tg+-8|0,vg=0|f[ug>>2],wg=wd,xg=0|f[wg>>2],yg=0|Il(sg,vg,64616,xg),f[Cp>>2]=yg;break;case 225:zg=k,Ag=wd,Bg=Ag+-8|0,Dg=0|f[Bg>>2],Eg=wd,Fg=0|f[Eg>>2],Gg=0|Il(zg,Dg,59537,Fg),f[Cp>>2]=Gg;break;case 226:Hg=k,Ig=wd,Jg=Ig+-8|0,Kg=0|f[Jg>>2],Lg=wd,Mg=0|f[Lg>>2],Og=0|ml(Hg,Kg,Mg),f[Cp>>2]=Og;break;case 227:Pg=k,Qg=wd,Rg=Qg+-8|0,Sg=0|f[Rg>>2],Tg=wd,Ug=0|f[Tg>>2],Vg=0|nl(Pg,Sg,Ug),f[Cp>>2]=Vg;break;case 228:Wg=k,Xg=wd,Zg=Xg+-20|0,$g=0|f[Zg>>2],_g=0|$k($g),ah=wd,bh=ah+-12|0,ch=0|f[bh>>2],dh=wd,eh=0|f[dh>>2],fh=0|_k(Wg,_g,ch,eh),f[Cp>>2]=fh;break;case 229:gh=wd,ih=0|f[gh>>2],f[Cp>>2]=ih;break;case 230:jh=wd,kh=0|f[jh>>2],f[Cp>>2]=kh,lh=0|f[Cp>>2],mh=0!=(0|lh),mh||(nh=k,oh=0|Hk(nh),f[Cp>>2]=oh);break;case 232:ph=wd,qh=ph+-4|0,rh=0|f[qh>>2],f[Cp>>2]=rh,th=wd,uh=th+-4|0,vh=0|f[uh>>2],wh=0!=(0|vh),wh&&(xh=wd,yh=xh+-4|0,zh=0|f[yh>>2],Ah=zh+10|0,Bh=0|e[Ah>>1],Ch=0|f[Cp>>2],Fh=Ch+10|0,e[Fh>>1]=Bh,Gh=wd,Hh=Gh+-4|0,Ih=0|f[Hh>>2],Jh=Ih+8|0,Kh=0|e[Jh>>1],Lh=0|f[Cp>>2],Mh=Lh+8|0,e[Mh>>1]=Kh);break;case 233:Nh=k,Oh=wd,Qh=Oh+-12|0,Rh=0|f[Qh>>2],Sh=k,Th=k,Uh=wd,Vh=Uh+-4|0,Wh=0|f[Vh>>2],Xh=0|Jl(Th,Wh),Yh=0|Ok(Sh,Xh),Zh=0|Tk(Nh,Rh,Yh),f[Cp>>2]=Zh;break;case 234:_h=k,ai=k,bi=wd,ci=bi+-4|0,di=0|f[ci>>2],ei=0|Jl(ai,di),fi=0|Pk(_h,ei,0),f[Cp>>2]=fi,gi=wd,hi=gi+-4|0,ii=0|f[hi>>2],ki=0!=(0|ii),ki&&(li=wd,mi=li+-4|0,ni=0|f[mi>>2],oi=ni+10|0,pi=0|e[oi>>1],qi=0|f[Cp>>2],ri=qi+10|0,e[ri>>1]=pi,si=wd,ti=si+-4|0,vi=0|f[ti>>2],wi=vi+8|0,xi=0|e[wi>>1],yi=0|f[Cp>>2],zi=yi+8|0,e[zi>>1]=xi);break;case 235:Ai=wd,Bi=Ai+-4|0,Ci=0|f[Bi>>2],f[Cp>>2]=Ci;break;case 240:Di=k,Ei=wd,Gi=Ei+-4|0,Hi=0|f[Gi>>2],Ii=0|Pk(Di,Hi,0),f[Cp>>2]=Ii,Ji=wd,Ki=Ji+-4|0,Li=0|f[Ki>>2],Mi=0!=(0|Li),Mi&&(Ni=wd,Oi=Ni+-4|0,Pi=0|f[Oi>>2],Ri=Pi+10|0,Si=0|e[Ri>>1],Ti=0|f[Cp>>2],Ui=Ti+10|0,e[Ui>>1]=Si,Vi=wd,Wi=Vi+-4|0,Xi=0|f[Wi>>2],Yi=Xi+8|0,Zi=0|e[Yi>>1],$i=0|f[Cp>>2],aj=$i+8|0,e[aj>>1]=Zi);break;case 241:bj=k,cj=k,dj=wd,ej=dj+-12|0,fj=0|f[ej>>2],gj=k,hj=k,ij=wd,jj=ij+-4|0,lj=0|f[jj>>2],mj=0|Jl(hj,lj),nj=0|Ok(gj,mj),oj=0|Tk(cj,fj,nj),pj=0|Pk(bj,oj,0),f[Cp>>2]=pj,qj=wd,rj=qj+-12|0,sj=0|f[rj>>2],tj=0!=(0|sj),tj&&(uj=wd,wj=uj+-12|0,xj=0|f[wj>>2],yj=xj+10|0,zj=0|e[yj>>1],Aj=0|f[Cp>>2],Bj=Aj+10|0,e[Bj>>1]=zj,Cj=wd,Dj=Cj+-12|0,Ej=0|f[Dj>>2],Fj=Ej+8|0,Ij=0|e[Fj>>1],Jj=0|f[Cp>>2],Kj=Jj+8|0,e[Kj>>1]=Ij);break;case 242:Lj=k,Mj=k,Nj=k,Oj=wd,Pj=Oj+-4|0,Qj=0|f[Pj>>2],Rj=0|Jl(Nj,Qj),Tj=0|Ok(Mj,Rj),Uj=0|Pk(Lj,Tj,0),f[Cp>>2]=Uj,Vj=wd,Wj=Vj+-4|0,Xj=0|f[Wj>>2],Yj=0!=(0|Xj),Yj&&(Zj=wd,$j=Zj+-4|0,_j=0|f[$j>>2],ak=_j+10|0,ck=0|e[ak>>1],dk=0|f[Cp>>2],ek=dk+10|0,e[ek>>1]=ck,fk=wd,gk=fk+-4|0,hk=0|f[gk>>2],ik=hk+8|0,jk=0|e[ik>>1],kk=0|f[Cp>>2],lk=kk+8|0,e[lk>>1]=jk);break;case 243:nk=k,ok=k,pk=wd,qk=0|f[pk>>2],rk=0|Ok(ok,qk),sk=0|Pk(nk,rk,0),f[Cp>>2]=sk,tk=wd,uk=0|f[tk>>2],vk=0!=(0|uk),vk&&(wk=wd,yk=0|f[wk>>2],zk=yk+10|0,Ak=0|e[zk>>1],Bk=0|f[Cp>>2],Ck=Bk+10|0,e[Ck>>1]=Ak,Dk=wd,Ek=0|f[Dk>>2],Fk=Ek+8|0,Gk=0|e[Fk>>1],Ik=0|f[Cp>>2],Lk=Ik+8|0,e[Lk>>1]=Gk);break;case 244:Mk=k,Nk=wd,Am=Nk+-4|0,Bm=0|f[Am>>2],Cm=wd,Dm=0|f[Cm>>2],Em=0|Pk(Mk,Bm,Dm),f[Cp>>2]=Em,Fm=wd,Gm=Fm+-4|0,Im=0|f[Gm>>2],Jm=0!=(0|Im),Jm&&(Km=wd,Lm=Km+-4|0,Mm=0|f[Lm>>2],Nm=Mm+10|0,Om=0|e[Nm>>1],Pm=0|f[Cp>>2],Qm=Pm+10|0,e[Qm>>1]=Om,Rm=wd,Tm=Rm+-4|0,Um=0|f[Tm>>2],Vm=Um+8|0,Wm=0|e[Vm>>1],Xm=0|f[Cp>>2],Ym=Xm+8|0,e[Ym>>1]=Wm);break;case 245:Zm=k,$m=k,_m=k,an=wd,cn=an+-4|0,dn=0|f[cn>>2],en=0|Jl(_m,dn),fn=0|Ok($m,en),gn=wd,hn=0|f[gn>>2],jn=0|Pk(Zm,fn,hn),f[Cp>>2]=jn,kn=wd,ln=kn+-4|0,mn=0|f[ln>>2],on=0!=(0|mn),on&&(pn=wd,qn=pn+-4|0,rn=0|f[qn>>2],sn=rn+10|0,tn=0|e[sn>>1],un=0|f[Cp>>2],vn=un+10|0,e[vn>>1]=tn,wn=wd,xn=wn+-4|0,An=0|f[xn>>2],Bn=An+8|0,Cn=0|e[Bn>>1],Dn=0|f[Cp>>2],En=Dn+8|0,e[En>>1]=Cn);break;case 246:Fn=k,Gn=k,Hn=wd,In=Hn+-12|0,Jn=0|f[In>>2],Ln=k,Mn=k,Nn=wd,On=Nn+-4|0,Pn=0|f[On>>2],Qn=0|Jl(Mn,Pn),Rn=0|Ok(Ln,Qn),Sn=0|Tk(Gn,Jn,Rn),Tn=wd,Un=0|f[Tn>>2],Wn=0|Pk(Fn,Sn,Un),f[Cp>>2]=Wn,Xn=wd,Yn=Xn+-12|0,Zn=0|f[Yn>>2],$n=0!=(0|Zn),$n&&(_n=wd,ao=_n+-12|0,bo=0|f[ao>>2],co=bo+10|0,eo=0|e[co>>1],go=0|f[Cp>>2],ho=go+10|0,e[ho>>1]=eo,io=wd,jo=io+-12|0,ko=0|f[jo>>2],lo=ko+8|0,mo=0|e[lo>>1],no=0|f[Cp>>2],oo=no+8|0,e[oo>>1]=mo);break;case 247:po=k,ro=wd,so=0|f[ro>>2],to=0|Pk(po,0,so),f[Cp>>2]=to,uo=wd,vo=0|f[uo>>2],wo=0!=(0|vo),wo&&(xo=wd,yo=0|f[xo>>2],zo=yo+10|0,Ao=0|e[zo>>1],Co=0|f[Cp>>2],Do=Co+10|0,e[Do>>1]=Ao,Eo=wd,Fo=0|f[Eo>>2],Go=Fo+8|0,Ho=0|e[Go>>1],Io=0|f[Cp>>2],Jo=Io+8|0,e[Jo>>1]=Ho);break;case 248:Ko=k,Lo=Ko+52|0,No=0|f[Lo>>2],f[Cp>>2]=No,Oo=k,Po=Oo+52|0,Qo=0|f[Po>>2],Ro=Qo<<1,So=1|Ro,To=k,Uo=To+52|0,f[Uo>>2]=So;break;case 249:Vo=wd,Wo=Vo+-4|0,Yo=0|f[Wo>>2],Zo=k,$o=Zo+52|0,f[$o>>2]=Yo,_o=wd,ap=0|f[_o>>2],f[Cp>>2]=ap;break;case 250:bp=k,cp=wd,dp=0|f[cp>>2],ep=0|Kl(bp,dp),f[Cp>>2]=ep;break;case 251:fp=wd,hp=0|f[fp>>2],f[Cp>>2]=hp;break;case 252:f[Cp>>2]=0;break;case 253:ip=k,jp=wd,kp=0|f[jp>>2],lp=0|Pk(ip,kp,0),f[Cp>>2]=lp,mp=wd,np=0|f[mp>>2],op=0!=(0|np),op&&(pp=wd,qp=0|f[pp>>2],sp=qp+10|0,tp=0|e[sp>>1],up=0|f[Cp>>2],vp=up+10|0,e[vp>>1]=tp,wp=wd,xp=0|f[wp>>2],yp=xp+8|0,zp=0|e[yp>>1],Ap=0|f[Cp>>2],Bp=Ap+8|0,e[Bp>>1]=zp);break;case 254:Ep=k,Fp=k,Gp=wd,Hp=0|f[Gp>>2],Ip=0|Ll(Fp,Hp),Jp=0|Pk(Ep,Ip,0),f[Cp>>2]=Jp,Kp=wd,Lp=0|f[Kp>>2],Mp=0!=(0|Lp),Mp&&(Np=wd,Pp=0|f[Np>>2],Qp=Pp+10|0,Rp=0|e[Qp>>1],Sp=0|f[Cp>>2],Tp=Sp+10|0,e[Tp>>1]=Rp,Up=wd,Vp=0|f[Up>>2],Wp=Vp+8|0,Xp=0|e[Wp>>1],Yp=0|f[Cp>>2],$p=Yp+8|0,e[$p>>1]=Xp);break;case 255:_p=k,aq=wd,bq=aq+-8|0,cq=0|f[bq>>2],dq=k,eq=wd,fq=0|f[eq>>2],gq=0|Ok(dq,fq),hq=0|Tk(_p,cq,gq),f[Cp>>2]=hq;break;case 256:jq=k,kq=wd,lq=kq+-12|0,mq=0|f[lq>>2],nq=k,oq=k,pq=wd,qq=0|f[pq>>2],rq=0|Ll(oq,qq),sq=0|Ok(nq,rq),uq=0|Tk(jq,mq,sq),f[Cp>>2]=uq;break;case 257:vq=k,wq=wd,xq=wq+-12|0,yq=0|f[xq>>2],zq=k,Aq=wd,Bq=0|f[Aq>>2],Cq=0|Ok(zq,Bq),Dq=0|Tk(vq,yq,Cq),f[Cp>>2]=Dq;break;case 258:Fq=k,Gq=wd,Hq=Gq+-16|0,Iq=0|f[Hq>>2],Jq=k,Kq=k,Lq=wd,Mq=0|f[Lq>>2],Nq=0|Ll(Kq,Mq),Oq=0|Ok(Jq,Nq),Qq=0|Tk(Fq,Iq,Oq),f[Cp>>2]=Qq;break;case 259:Rq=k,Sq=wd,Tq=Sq+-8|0,Uq=0|f[Tq>>2],Vq=k,Wq=wd,Xq=0|f[Wq>>2],Yq=0|Ok(Vq,Xq),Zq=0|Tk(Rq,Uq,Yq),f[Cp>>2]=Zq;break;case 260:_q=k,ar=wd,br=ar+-12|0,cr=0|f[br>>2],dr=k,er=k,fr=wd,gr=0|f[fr>>2],hr=0|Ll(er,gr),ir=0|Ok(dr,hr),kr=0|Tk(_q,cr,ir),f[Cp>>2]=kr;break;case 261:lr=k,mr=k,nr=wd,or=0|f[nr>>2],pr=0|Ll(mr,or),qr=0|Ok(lr,pr),f[Cp>>2]=qr;break;case 269:rr=k,sr=wd,tr=0|f[sr>>2],vr=0|sl(rr,tr,0),f[Cp>>2]=vr;break;case 270:wr=k,xr=wr+52|0,yr=0|f[xr>>2],f[Cp>>2]=yr,zr=k,Ar=zr+52|0,f[Ar>>2]=0;break;case 271:Br=wd,Cr=Br+-8|0,Dr=0|f[Cr>>2],Er=k,Hr=Er+52|0,f[Hr>>2]=Dr,Ir=wd,Jr=Ir+-4|0,Kr=0|f[Jr>>2],f[Cp>>2]=Kr;break;case 272:Lr=k,Mr=Lr+52|0,Nr=0|f[Mr>>2],f[Cp>>2]=Nr,Or=k,Pr=Or+52|0,f[Pr>>2]=0;break;case 273:Qr=k,Sr=Qr+40|0,f[Sr>>2]=2;break;case 274:Tr=wd,Ur=Tr+-12|0,Vr=0|f[Ur>>2],Wr=k,Xr=Wr+52|0,f[Xr>>2]=Vr,Yr=wd,Zr=Yr+-8|0,$r=0|f[Zr>>2],f[Cp>>2]=$r;break;case 275:_r=k,bs=_r+40|0,f[bs>>2]=2;break;case 276:f[Cp>>2]=0;break;case 277:cs=wd,ds=cs+-4|0,es=0|f[ds>>2],f[Cp>>2]=es;break;case 278:fs=k,gs=wd,hs=gs+-8|0,is=0|f[hs>>2],js=wd,ks=0|f[js>>2],ms=0|Cl(fs,is,ks),f[Cp>>2]=ms;break;case 279:ns=k,os=wd,ps=0|f[os>>2],qs=0|Dl(ns,ps),f[Cp>>2]=qs;break;case 280:rs=k,ss=wd,ts=ss+-4|0,us=0|f[ts>>2],vs=0|kl(rs,us),f[Cp>>2]=vs,xs=wd,ys=xs+-4|0,zs=0|f[ys>>2],As=0!=(0|zs),As&&(Bs=wd,Cs=Bs+-4|0,Ds=0|f[Cs>>2],Es=Ds+10|0,Fs=0|e[Es>>1],Gs=0|f[Cp>>2],Is=Gs+10|0,e[Is>>1]=Fs,Js=wd,Ks=Js+-4|0,Ls=0|f[Ks>>2],Ms=Ls+8|0,Ns=0|e[Ms>>1],Os=0|f[Cp>>2],Ps=Os+8|0,e[Ps>>1]=Ns);break;case 281:Qs=k,Rs=wd,Ts=Rs+-4|0,Us=0|f[Ts>>2],Vs=0|Jl(Qs,Us),f[Cp>>2]=Vs,Ws=wd,Xs=Ws+-4|0,Ys=0|f[Xs>>2],Zs=0!=(0|Ys),Zs&&($s=wd,_s=$s+-4|0,at=0|f[_s>>2],ct=at+10|0,dt=0|e[ct>>1],et=0|f[Cp>>2],ft=et+10|0,e[ft>>1]=dt,gt=wd,ht=gt+-4|0,it=0|f[ht>>2],jt=it+8|0,kt=0|e[jt>>1],lt=0|f[Cp>>2],nt=lt+8|0,e[nt>>1]=kt);break;case 282:ot=k,pt=0|xl(ot,0),f[Cp>>2]=pt;break;case 283:qt=k,rt=wd,st=rt+-4|0,tt=0|f[st>>2],ut=0|vl(qt,tt),f[Cp>>2]=ut;break;case 284:vt=k,wt=0|vl(vt,0),f[Cp>>2]=wt;break;case 285:yt=k,zt=0|vl(yt,0),f[Cp>>2]=zt;break;case 286:At=k,Bt=wd,Ct=Bt+-4|0,Dt=0|f[Ct>>2],Et=0|$k(Dt),Ft=0|ol(At,Et,65619),f[Cp>>2]=Ft;break;case 287:Gt=k,Ht=k,Kt=0|Hk(Ht),Lt=0|ol(Gt,Kt,65619),f[Cp>>2]=Lt;break;case 288:Mt=k,Nt=wd,Ot=Nt+-4|0,Pt=0|f[Ot>>2],Qt=k,Rt=wd,St=0|f[Rt>>2],Tt=0|Pk(Qt,0,St),Vt=0|sl(Mt,Pt,Tt),f[Cp>>2]=Vt;break;case 290:Wt=k,Xt=wd,Yt=Xt+-4|0,Zt=0|f[Yt>>2],$t=wd,_t=0|f[$t>>2],Ml(Wt,Zt,_t),au=wd,bu=au+-4|0,cu=0|f[bu>>2],f[Cp>>2]=cu;break;case 291:eu=k,pl(eu),fu=k,gu=fu+60|0,hu=0|f[gu>>2],f[Cp>>2]=hu,iu=k,ju=iu+56|0,ku=0|f[ju>>2],lu=ku+1|0,f[ju>>2]=lu,mu=k,nu=mu+60|0,f[nu>>2]=lu;break;case 292:pu=k,qu=pu+52|0,ru=0|f[qu>>2],f[Cp>>2]=ru,su=k,tu=su+52|0,f[tu>>2]=0;break;case 293:uu=wd,vu=uu+-12|0,wu=0|f[vu>>2],xu=k,yu=xu+60|0,f[yu>>2]=wu,Au=k,Bu=wd,Cu=Bu+-8|0,Du=0|f[Cu>>2],Eu=wd,Fu=0|f[Eu>>2],Gu=0|Nl(Au,Du,Fu),f[Cp>>2]=Gu,Hu=k,rl(Hu),Iu=wd,Ju=Iu+-4|0,Lu=0|f[Ju>>2],Mu=k,Nu=Mu+52|0,f[Nu>>2]=Lu,Ou=k,Pu=Ou+52|0,Qu=0|f[Pu>>2],Ru=Qu>>>1,Su=k,Tu=Su+52|0,Uu=0|f[Tu>>2],Wu=1&Uu,Xu=Ru|Wu,Yu=k,Zu=Yu+52|0,f[Zu>>2]=Xu;break;case 294:$u=k,_u=wd,av=_u+-16|0,bv=0|f[av>>2],cv=0|$k(bv),dv=wd,fv=dv+-8|0,gv=0|f[fv>>2],hv=wd,iv=hv+-4|0,jv=0|f[iv>>2],kv=0|_k($u,cv,gv,jv),f[Cp>>2]=kv,lv=wd,mv=lv+-20|0,nv=0|f[mv>>2],ov=65535&nv,qv=0|f[Cp>>2],rv=qv+8|0,e[rv>>1]=ov;break;case 295:sv=k,tv=wd,uv=tv+-16|0,vv=0|f[uv>>2],wv=0|$k(vv),xv=wd,yv=xv+-8|0,zv=0|f[yv>>2],Bv=wd,Cv=Bv+-4|0,Dv=0|f[Cv>>2],Ev=0|al(sv,wv,zv,Dv),f[Cp>>2]=Ev,Fv=wd,Gv=Fv+-20|0,Hv=0|f[Gv>>2],Iv=65535&Hv,Jv=0|f[Cp>>2],Kv=Jv+8|0,e[Kv>>1]=Iv;break;case 296:Ov=k,Pv=Ov+48|0,Qv=0|f[Pv>>2],Rv=Qv<<1,Sv=1|Rv,Tv=k,Uv=Tv+48|0,f[Uv>>2]=Sv;break;case 297:Vv=k,Wv=Vv+48|0,Xv=0|f[Wv>>2],Zv=Xv>>>1,_v=k,aw=_v+48|0,f[aw>>2]=Zv;break;case 298:cw=k,dw=wd,ew=dw+-16|0,fw=0|f[ew>>2],gw=0|$k(fw),hw=wd,iw=hw+-4|0,kw=0|f[iw>>2],lw=0|bl(cw,gw,kw),f[Cp>>2]=lw,mw=wd,nw=mw+-24|0,ow=0|f[nw>>2],pw=65535&ow,qw=0|f[Cp>>2],rw=qw+8|0,e[rw>>1]=pw;break;case 299:sw=k,tw=sw+48|0,vw=0|f[tw>>2],ww=vw<<1,xw=1|ww,yw=k,zw=yw+48|0,f[zw>>2]=xw;break;case 300:Aw=k,Bw=Aw+48|0,Cw=0|f[Bw>>2],Dw=Cw>>>1,Ew=k,Gw=Ew+48|0,f[Gw>>2]=Dw;break;case 301:Hw=k,Iw=wd,Jw=Iw+-16|0,Kw=0|f[Jw>>2],Lw=0|$k(Kw),Mw=wd,Nw=Mw+-4|0,Ow=0|f[Nw>>2],Pw=0|cl(Hw,Lw,Ow),f[Cp>>2]=Pw,Rw=wd,Sw=Rw+-24|0,Tw=0|f[Sw>>2],Uw=65535&Tw,Vw=0|f[Cp>>2],Ww=Vw+8|0,e[Ww>>1]=Uw;break;case 302:Xw=k,Yw=wd,Zw=Yw+-12|0,_w=0|f[Zw>>2],bx=wd,cx=bx+-4|0,dx=0|f[cx>>2],ex=0|Ol(Xw,_w,dx),f[Cp>>2]=ex;break;case 303:fx=k,gx=wd,hx=gx+-4|0,ix=0|f[hx>>2],jx=0|Ol(fx,0,ix),f[Cp>>2]=jx;break;case 304:kx=k,mx=kx+48|0,nx=0|f[mx>>2],ox=nx<<1,px=1|ox,qx=k,rx=qx+48|0,f[rx>>2]=px;break;case 305:sx=k,tx=sx+48|0,ux=0|f[tx>>2],vx=ux>>>1,xx=k,yx=xx+48|0,f[yx>>2]=vx;break;case 306:zx=k,Ax=wd,Bx=Ax+-28|0,Cx=0|f[Bx>>2],Dx=wd,Ex=Dx+-16|0,Fx=0|f[Ex>>2],Gx=wd,Ix=Gx+-4|0,Jx=0|f[Ix>>2],Kx=0|Pl(zx,Cx,Fx,Jx),f[Cp>>2]=Kx,Lx=wd,Mx=Lx+-32|0,Nx=0|f[Mx>>2],Ox=65535&Nx,Px=0|f[Cp>>2],Qx=Px+8|0,e[Qx>>1]=Ox;break;case 307:Rx=k,Ux=Rx+64|0,Vx=0|f[Ux>>2],Wx=0!=(0|Vx),Wx?Cda=310:(Xx=k,Yx=Xx+68|0,Zx=0|f[Yx>>2],0!=(0|Zx)&&(Cda=310)),310==(0|Cda)&&(Cda=0,_x=k,Kk(_x,59561)),ay=k,by=0|Uk(ay),f[Cp>>2]=by;break;case 308:dy=k,ey=wd,fy=ey+-16|0,gy=0|f[fy>>2],hy=wd,iy=hy+-12|0,jy=0|f[iy>>2],ky=wd,ly=ky+-4|0,my=0|f[ly>>2],oy=0|Ql(dy,gy,jy,my),f[Cp>>2]=oy,py=wd,qy=py+-20|0,ry=0|f[qy>>2],sy=65535&ry,ty=0|f[Cp>>2],uy=ty+8|0,e[uy>>1]=sy,vy=k,wy=wd,xy=wy+-8|0,zy=0|f[xy>>2],Vk(vy,zy);break;case 309:Ay=k,By=Ay+64|0,Cy=0|f[By>>2],f[Cp>>2]=Cy,Dy=k,Ey=Dy+64|0,f[Ey>>2]=0;break;case 310:Fy=k,Gy=k,Hy=0|Uk(Gy),Iy=k,Ky=Iy+68|0,Ly=0|f[Ky>>2],My=Ly,Ny=0|Pk(Fy,Hy,My),f[Cp>>2]=Ny,Oy=k,Py=Oy+68|0,f[Py>>2]=0;break;case 311:Qy=k,Ry=wd,Sy=Ry+-20|0,Ty=0|f[Sy>>2],Vy=wd,Wy=Vy+-4|0,Xy=0|f[Wy>>2],Yy=0|Rl(Qy,Ty,Xy),f[Cp>>2]=Yy,Zy=wd,$y=Zy+-28|0,_y=0|f[$y>>2],az=65535&_y,bz=0|f[Cp>>2],cz=bz+8|0,e[cz>>1]=az,ez=k,fz=wd,gz=fz+-8|0,hz=0|f[gz>>2],iz=0|f[hz>>2],Vk(ez,iz),jz=wd,kz=jz+-16|0,lz=0|f[kz>>2],mz=k,nz=mz+64|0,f[nz>>2]=lz,pz=wd,qz=pz+-8|0,rz=0|f[qz>>2],sz=rz+4|0,tz=0|f[sz>>2],uz=tz,vz=k,wz=vz+68|0,f[wz>>2]=uz;break;case 312:xz=k,yz=xz+64|0,Az=0|f[yz>>2],Bz=0!=(0|Az),Bz?Cda=318:(Cz=k,Dz=Cz+68|0,Ez=0|f[Dz>>2],0!=(0|Ez)&&(Cda=318)),318==(0|Cda)&&(Cda=0,Gz=k,Kk(Gz,59593)),Hz=k,Iz=0|Uk(Hz),f[Cp>>2]=Iz;break;case 313:Jz=k,Lz=wd,Mz=Lz+-12|0,Nz=0|f[Mz>>2],Oz=wd,Pz=Oz+-4|0,Qz=0|f[Pz>>2],Rz=0|Sl(Jz,Nz,Qz),f[Cp>>2]=Rz,Sz=wd,Tz=Sz+-16|0,Uz=0|f[Tz>>2],Xz=65535&Uz,Yz=0|f[Cp>>2],Zz=Yz+8|0,e[Zz>>1]=Xz,$z=k,_z=wd,aA=_z+-8|0,bA=0|f[aA>>2],Vk($z,bA);break;case 314:cA=k,dA=cA+52|0,eA=0|f[dA>>2],f[Cp>>2]=eA,gA=k,hA=gA+52|0,f[hA>>2]=0;break;case 315:iA=k,jA=iA+64|0,kA=0|f[jA>>2],lA=kA+1|0,f[jA>>2]=lA,mA=k,nA=0|Uk(mA),f[Cp>>2]=nA;break;case 316:oA=k,pA=wd,rA=pA+-20|0,sA=0|f[rA>>2],tA=wd,uA=tA+-8|0,vA=0|f[uA>>2],wA=wd,xA=wA+-4|0,yA=0|f[xA>>2],zA=0|Tl(oA,sA,vA,yA),f[Cp>>2]=zA,AA=wd,CA=AA+-24|0,DA=0|f[CA>>2],EA=65535&DA,FA=0|f[Cp>>2],GA=FA+8|0,e[GA>>1]=EA,HA=k,IA=wd,JA=IA+-12|0,KA=0|f[JA>>2],Vk(HA,KA),LA=k,NA=LA+64|0,OA=0|f[NA>>2],PA=OA+-1|0,f[NA>>2]=PA,QA=wd,RA=QA+-16|0,SA=0|f[RA>>2],TA=k,UA=TA+52|0,f[UA>>2]=SA;break;case 317:VA=k,WA=VA+40|0,f[WA>>2]=7,YA=k,ZA=YA+52|0,$A=0|f[ZA>>2],f[Cp>>2]=$A,_A=k,aB=_A+52|0,f[aB>>2]=0;break;case 318:bB=k,cB=bB+68|0,dB=0|f[cB>>2],eB=dB+1|0,f[cB>>2]=eB,fB=k,hB=fB+40|0,f[hB>>2]=3,iB=k,jB=0|Uk(iB),f[Cp>>2]=jB;break;case 319:kB=k,lB=wd,mB=lB+-28|0,nB=0|f[mB>>2],oB=wd,pB=oB+-16|0,qB=0|f[pB>>2],sB=wd,tB=sB+-8|0,uB=0|f[tB>>2],vB=wd,wB=vB+-4|0,xB=0|f[wB>>2],yB=0|Ul(kB,nB,qB,uB,xB),f[Cp>>2]=yB,zB=wd,AB=zB+-32|0,BB=0|f[AB>>2],DB=65535&BB,EB=0|f[Cp>>2],FB=EB+8|0,e[FB>>1]=DB,GB=k,HB=wd,IB=HB+-12|0,JB=0|f[IB>>2],Vk(GB,JB),KB=k,LB=KB+68|0,MB=0|f[LB>>2],OB=MB+-1|0,f[LB>>2]=OB,PB=wd,QB=PB+-20|0,RB=0|f[QB>>2],SB=k,TB=SB+52|0,f[TB>>2]=RB;break;case 320:UB=k,VB=0|yl(UB,0),f[Cp>>2]=VB;break;case 321:WB=k,XB=0|zl(WB,0),f[Cp>>2]=XB;break;case 322:$B=k,_B=0|Vl($B),f[Cp>>2]=_B;break;case 323:aC=k,bC=0|Wl(aC),f[Cp>>2]=bC;break;case 324:cC=wd,dC=0|f[cC>>2],f[Cp>>2]=dC,eC=0|f[Cp>>2],fC=0!=(0|eC),fC||(gC=k,hC=0|Hk(gC),f[Cp>>2]=hC);break;case 331:jC=k,kC=wd,lC=kC+-12|0,mC=0|f[lC>>2],nC=0|$k(mC),oC=wd,pC=oC+-4|0,qC=0|f[pC>>2],rC=wd,sC=0|f[rC>>2],uC=0|_k(jC,nC,qC,sC),f[Cp>>2]=uC;break;case 333:vC=wd,wC=0|f[vC>>2],f[Cp>>2]=wC;break;case 334:xC=k,yC=k,zC=wd,AC=0|f[zC>>2],BC=0|Ok(yC,AC),CC=0|Ok(xC,BC),f[Cp>>2]=CC;break;case 336:DC=k,FC=wd,GC=0|f[FC>>2],HC=0|Xl(DC,GC),f[Cp>>2]=HC;break;case 337:IC=k,JC=wd,KC=JC+-4|0,LC=0|f[KC>>2],MC=0|fl(IC,LC,0),f[Cp>>2]=MC;break;case 338:NC=k,OC=wd,QC=0|f[OC>>2],RC=0|Ok(NC,QC),f[Cp>>2]=RC;break;case 339:SC=k,TC=wd,UC=TC+-8|0,VC=0|f[UC>>2],WC=k,XC=wd,YC=0|f[XC>>2],ZC=0|Ok(WC,YC),_C=0|Tk(SC,VC,ZC),f[Cp>>2]=_C;break;case 340:aD=k,bD=wd,cD=0|f[bD>>2],dD=0|dl(aD,cD,0,0),f[Cp>>2]=dD;break;case 341:eD=k,fD=wd,gD=fD+-12|0,hD=0|f[gD>>2],iD=k,kD=wd,lD=0|f[kD>>2],mD=0|Xl(iD,lD),nD=0|dl(eD,hD,mD,0),f[Cp>>2]=nD;break;case 342:oD=k,pD=wd,qD=pD+-20|0,rD=0|f[qD>>2],sD=k,tD=wd,vD=tD+-8|0,wD=0|f[vD>>2],xD=0|Xl(sD,wD),yD=wd,zD=0|f[yD>>2],AD=0|dl(oD,rD,xD,zD),f[Cp>>2]=AD;break;case 343:BD=k,CD=wd,DD=CD+-8|0,ED=0|f[DD>>2],GD=0|dl(BD,ED,-1,0),f[Cp>>2]=GD;break;case 344:HD=k,ID=wd,JD=ID+-16|0,KD=0|f[JD>>2],LD=wd,MD=0|f[LD>>2],ND=0|dl(HD,KD,-1,MD),f[Cp>>2]=ND;break;case 345:OD=k,PD=k,RD=wd,SD=0|f[RD>>2],TD=0|Xl(PD,SD),UD=0|dl(OD,0,TD,0),f[Cp>>2]=UD;break;case 346:VD=k,WD=k,XD=wd,YD=XD+-8|0,ZD=0|f[YD>>2],$D=0|Xl(WD,ZD),bE=wd,cE=0|f[bE>>2],dE=0|dl(VD,0,$D,cE),f[Cp>>2]=dE;break;case 347:eE=k,fE=0|dl(eE,0,-1,0),f[Cp>>2]=fE;break;case 348:gE=k,hE=wd,iE=0|f[hE>>2],jE=0|dl(gE,0,-1,iE),f[Cp>>2]=jE;break;case 349:kE=k,mE=wd,nE=mE+-20|0,oE=0|f[nE>>2],pE=wd,qE=pE+-12|0,rE=0|f[qE>>2],sE=wd,tE=sE+-4|0,uE=0|f[tE>>2],vE=wd,xE=0|f[vE>>2],yE=0|Yl(kE,oE,rE,uE,0,xE),f[Cp>>2]=yE;break;case 350:zE=k,AE=wd,BE=AE+-28|0,CE=0|f[BE>>2],DE=wd,EE=DE+-20|0,FE=0|f[EE>>2],GE=wd,IE=GE+-12|0,JE=0|f[IE>>2],KE=wd,LE=KE+-4|0,ME=0|f[LE>>2],NE=wd,OE=0|f[NE>>2],PE=0|Yl(zE,CE,FE,JE,ME,OE),f[Cp>>2]=PE;break;case 351:QE=k,RE=wd,TE=RE+-12|0,UE=0|f[TE>>2],VE=wd,WE=VE+-4|0,XE=0|f[WE>>2],YE=wd,ZE=0|f[YE>>2],$E=0|Yl(QE,UE,XE,0,0,ZE),f[Cp>>2]=$E;break;case 352:_E=k,aF=wd,cF=aF+-20|0,dF=0|f[cF>>2],eF=wd,fF=eF+-12|0,gF=0|f[fF>>2],hF=wd,iF=hF+-4|0,jF=0|f[iF>>2],kF=wd,lF=0|f[kF>>2],nF=0|Yl(_E,dF,gF,0,jF,lF),f[Cp>>2]=nF;break;case 353:oF=k,pF=wd,qF=pF+-12|0,rF=0|f[qF>>2],sF=wd,tF=sF+-4|0,uF=0|f[tF>>2],vF=wd,wF=0|f[vF>>2],yF=0|Yl(oF,rF,0,uF,0,wF),f[Cp>>2]=yF;break;case 354:zF=k,AF=wd,BF=AF+-4|0,CF=0|f[BF>>2],DF=0|Yl(zF,CF,0,1,0,0),f[Cp>>2]=DF;break;case 355:EF=k,FF=wd,GF=FF+-20|0,HF=0|f[GF>>2],JF=wd,KF=JF+-12|0,LF=0|f[KF>>2],MF=wd,NF=MF+-4|0,OF=0|f[NF>>2],PF=wd,QF=0|f[PF>>2],RF=0|Yl(EF,HF,0,LF,OF,QF),f[Cp>>2]=RF;break;case 356:SF=k,UF=wd,VF=UF+-4|0,WF=0|f[VF>>2],XF=wd,YF=0|f[XF>>2],ZF=0|Yl(SF,WF,0,0,0,YF),f[Cp>>2]=ZF;break;case 357:$F=k,_F=wd,aG=_F+-12|0,bG=0|f[aG>>2],eG=wd,fG=eG+-4|0,gG=0|f[fG>>2],hG=wd,iG=0|f[hG>>2],jG=0|Yl($F,0,bG,gG,0,iG),f[Cp>>2]=jG;break;case 358:kG=k,lG=wd,mG=lG+-20|0,nG=0|f[mG>>2],pG=wd,qG=pG+-12|0,rG=0|f[qG>>2],sG=wd,tG=sG+-4|0,uG=0|f[tG>>2],vG=wd,wG=0|f[vG>>2],xG=0|Yl(kG,0,nG,rG,uG,wG),f[Cp>>2]=xG;break;case 359:yG=k,AG=wd,BG=AG+-4|0,CG=0|f[BG>>2],DG=wd,EG=0|f[DG>>2],FG=0|Yl(yG,0,CG,0,0,EG),f[Cp>>2]=FG;break;case 360:GG=k,HG=wd,IG=HG+-12|0,JG=0|f[IG>>2],LG=wd,MG=LG+-4|0,NG=0|f[MG>>2],OG=wd,PG=0|f[OG>>2],QG=0|Yl(GG,0,JG,0,NG,PG),f[Cp>>2]=QG;break;case 361:RG=k,SG=wd,TG=SG+-4|0,UG=0|f[TG>>2],WG=wd,XG=0|f[WG>>2],YG=0|Yl(RG,0,0,UG,0,XG),f[Cp>>2]=YG;break;case 362:ZG=k,$G=wd,_G=$G+-12|0,aH=0|f[_G>>2],bH=wd,cH=bH+-4|0,dH=0|f[cH>>2],fH=wd,gH=0|f[fH>>2],hH=0|Yl(ZG,0,0,aH,dH,gH),f[Cp>>2]=hH;break;case 363:iH=k,jH=wd,kH=0|f[jH>>2],lH=0|Yl(iH,0,0,0,0,kH),f[Cp>>2]=lH;break;case 365:mH=k,nH=mH+72|0,oH=0|d[nH>>0],qH=-2&oH,rH=1|qH,d[nH>>0]=rH,sH=wd,tH=0|f[sH>>2],f[Cp>>2]=tH;break;case 366:case 367:f[Cp>>2]=0;break;case 368:uH=wd,vH=uH+-8|0,wH=0|f[vH>>2],f[Cp>>2]=wH;break;case 369:case 370:f[Cp>>2]=0;break;case 373:xH=k,yH=wd,zH=0|f[yH>>2],Zl(xH,zH),BH=k,CH=wd,DH=0|f[CH>>2],$l(BH,DH);break;case 375:EH=wd,FH=EH+-8|0,GH=0|f[FH>>2],f[Cp>>2]=GH;break;case 376:HH=wd,IH=0|f[HH>>2],f[Cp>>2]=IH;break;case 377:JH=wd,KH=JH+-4|0,MH=0|f[KH>>2],f[Cp>>2]=MH;break;case 378:NH=wd,OH=NH+-4|0,PH=0|f[OH>>2],f[Cp>>2]=PH;break;case 379:QH=k,pl(QH);break;case 380:RH=k,SH=wd,TH=SH+-8|0,UH=0|f[TH>>2],VH=wd,XH=VH+-4|0,YH=0|f[XH>>2],ZH=0|ql(RH,UH,YH),f[Cp>>2]=ZH,$H=k,rl($H);break;case 381:_H=wd,aI=_H+-4|0,bI=0|f[aI>>2],cI=0|f[bI>>2],dI=38==(0|cI),eI=k,dI?Kk(eI,59626):(hI=wd,iI=hI+-4|0,jI=0|f[iI>>2],kI=wd,lI=0|f[kI>>2],Ml(eI,jI,lI)),mI=wd,nI=mI+-4|0,oI=0|f[nI>>2],f[Cp>>2]=oI;break;case 382:pI=k,qI=wd,sI=qI+-12|0,tI=0|f[sI>>2],uI=wd,vI=uI+-4|0,wI=0|f[vI>>2],xI=wd,yI=0|f[xI>>2],zI=0|il(pI,tI,wI,yI),f[Cp>>2]=zI;break;case 383:AI=k,BI=wd,DI=BI+-16|0,EI=0|f[DI>>2],FI=wd,GI=FI+-8|0,HI=0|f[GI>>2],II=wd,JI=II+-4|0,KI=0|f[JI>>2],LI=0|il(AI,EI,HI,KI),f[Cp>>2]=LI,MI=k,OI=0|f[Cp>>2],PI=wd,QI=0|f[PI>>2],Ml(MI,OI,QI);break;case 384:RI=k,SI=wd,TI=SI+-16|0,UI=0|f[TI>>2],VI=wd,WI=VI+-8|0,XI=0|f[WI>>2],ZI=wd,$I=ZI+-4|0,_I=0|f[$I>>2],aJ=0|il(RI,UI,XI,_I),f[Cp>>2]=aJ,bJ=k,cJ=0|f[Cp>>2],dJ=wd,eJ=0|f[dJ>>2],Ml(bJ,cJ,eJ);break;case 385:fJ=k,gJ=wd,iJ=gJ+-4|0,jJ=0|f[iJ>>2],kJ=wd,lJ=0|f[kJ>>2],mJ=0|sl(fJ,jJ,lJ),f[Cp>>2]=mJ;break;case 386:nJ=k,oJ=wd,pJ=oJ+-12|0,qJ=0|f[pJ>>2],rJ=wd,tJ=rJ+-4|0,uJ=0|f[tJ>>2],vJ=wd,wJ=0|f[vJ>>2],xJ=0|il(nJ,qJ,uJ,wJ),f[Cp>>2]=xJ;break;case 387:yJ=k,zJ=wd,AJ=zJ+-12|0,BJ=0|f[AJ>>2],CJ=wd,EJ=CJ+-4|0,FJ=0|f[EJ>>2],GJ=wd,HJ=0|f[GJ>>2],IJ=0|il(yJ,BJ,FJ,HJ),f[Cp>>2]=IJ;break;case 388:JJ=k,KJ=wd,LJ=KJ+-8|0,MJ=0|f[LJ>>2],NJ=wd,PJ=0|f[NJ>>2],QJ=0|il(JJ,MJ,PJ,0),f[Cp>>2]=QJ;break;case 389:RJ=k,SJ=wd,TJ=SJ+-8|0,UJ=0|f[TJ>>2],VJ=k,WJ=0|hl(VJ,69604,4),XJ=wd,YJ=0|f[XJ>>2],$J=0|il(RJ,UJ,WJ,YJ),f[Cp>>2]=$J;break;case 390:_J=k,aK=wd,bK=aK+-8|0,cK=0|f[bK>>2],dK=k,eK=0|hl(dK,69604,4),fK=wd,gK=0|f[fK>>2],hK=0|il(_J,cK,eK,gK),f[Cp>>2]=hK;break;case 391:kK=k,lK=wd,mK=0|f[lK>>2],nK=0|ul(kK,mK),f[Cp>>2]=nK;break;case 392:oK=k,pK=0|_l(oK),f[Cp>>2]=pK;break;case 393:qK=k,rK=wd,sK=rK+-12|0,tK=0|f[sK>>2],vK=k,wK=0|hl(vK,69083,2),xK=wd,yK=xK+-4|0,zK=0|f[yK>>2],AK=0|il(qK,tK,wK,zK),f[Cp>>2]=AK;break;case 394:BK=k,pl(BK),CK=k,DK=CK+32|0,EK=0|f[DK>>2],f[Cp>>2]=EK;break;case 395:GK=k,HK=wd,IK=HK+-8|0,JK=0|f[IK>>2],KK=wd,LK=KK+-4|0,MK=0|f[LK>>2],NK=0|ql(GK,JK,MK),f[Cp>>2]=NK,OK=wd,PK=OK+-12|0,RK=0|f[PK>>2],SK=65535&RK,TK=0|f[Cp>>2],UK=TK+8|0,e[UK>>1]=SK,VK=k,rl(VK);break;case 396:WK=k,pl(WK),XK=k,YK=XK+32|0,ZK=0|f[YK>>2],f[Cp>>2]=ZK;break;case 397:$K=k,aL=wd,bL=aL+-8|0,cL=0|f[bL>>2],dL=wd,eL=dL+-4|0,fL=0|f[eL>>2],gL=0|ql($K,cL,fL),f[Cp>>2]=gL,hL=wd,iL=hL+-12|0,jL=0|f[iL>>2],lL=65535&jL,mL=0|f[Cp>>2],nL=mL+8|0,e[nL>>1]=lL,oL=k,rl(oL);break;case 398:pL=k,qL=k,rL=wd,sL=rL+-12|0,tL=0|f[sL>>2],uL=wd,wL=uL+-4|0,xL=0|f[wL>>2],yL=0|Pk(qL,tL,xL),zL=wd,AL=0|f[zL>>2],BL=0|Pk(pL,yL,AL),f[Cp>>2]=BL;break;case 399:CL=wd,DL=0|f[CL>>2],EL=0!=(0|DL),EL?(FL=k,HL=k,IL=wd,JL=0|f[IL>>2],KL=0|Pk(HL,0,JL),LL=0|Pk(FL,KL,0),j=LL):j=0,f[Cp>>2]=j;break;case 401:ML=k,NL=k,OL=wd,PL=OL+-16|0,QL=0|f[PL>>2],SL=wd,TL=SL+-12|0,UL=0|f[TL>>2],VL=wd,WL=VL+-4|0,XL=0|f[WL>>2],YL=0|dl(NL,QL,UL,XL),ZL=0|Ok(ML,YL),f[Cp>>2]=ZL,$L=wd,_L=0|f[$L>>2],bM=0!=(0|_L),bM&&(cM=k,dM=0|f[Cp>>2],eM=wd,fM=0|f[eM>>2],gM=0|Tk(cM,dM,fM),f[Cp>>2]=gM);break;case 403:hM=k,iM=wd,jM=0|f[iM>>2],kM=0|Ok(hM,jM),f[Cp>>2]=kM;break;case 406:nM=wd,oM=0|f[nM>>2],f[Cp>>2]=oM;break;case 408:pM=wd,qM=0|f[pM>>2],f[Cp>>2]=qM;break;case 416:rM=wd,sM=0|f[rM>>2],f[Cp>>2]=sM;break;case 417:tM=k,uM=k,vM=wd,wM=vM+-4|0,yM=0|f[wM>>2],zM=k,AM=wd,BM=0|f[AM>>2],CM=0|Ok(zM,BM),DM=0|Tk(uM,yM,CM),EM=0|am(tM,DM),f[Cp>>2]=EM;break;case 419:FM=k,GM=wd,HM=GM+-4|0,JM=0|f[HM>>2],KM=wd,LM=0|f[KM>>2],MM=0|Tk(FM,JM,LM),f[Cp>>2]=MM;break;case 420:NM=k,OM=wd,PM=0|f[OM>>2],QM=0|Ok(NM,PM),f[Cp>>2]=QM;break;case 421:RM=k,SM=RM+44|0,UM=0|f[SM>>2],f[Cp>>2]=UM,VM=k,WM=VM+44|0,f[WM>>2]=0;break;case 422:XM=wd,YM=XM+-8|0,ZM=0|f[YM>>2],$M=k,_M=$M+44|0,f[_M>>2]=ZM,aN=k,bN=wd,dN=bN+-12|0,eN=0|f[dN>>2],fN=wd,gN=fN+-4|0,hN=0|f[gN>>2],iN=0|Al(aN,eN,hN),f[Cp>>2]=iN;break;case 423:jN=k,kN=k,lN=0|bm(kN),mN=0|Ok(jN,lN),f[Cp>>2]=mN;break;case 424:oN=k,pN=k,qN=0|bm(pN),rN=0|Ok(oN,qN),f[Cp>>2]=rN;break;case 425:sN=wd,tN=0|f[sN>>2],f[Cp>>2]=tN;break;case 426:uN=k,vN=k,wN=wd,xN=wN+-4|0,zN=0|f[xN>>2],AN=k,BN=wd,CN=0|f[BN>>2],DN=0|Ok(AN,CN),EN=0|Tk(vN,zN,DN),FN=0|cm(uN,EN),f[Cp>>2]=FN;break;case 427:GN=wd,HN=0|f[GN>>2],f[Cp>>2]=HN;break;case 428:IN=k,KN=wd,LN=KN+-4|0,MN=0|f[LN>>2],NN=wd,ON=0|f[NN>>2],PN=0|dm(IN,MN,ON),f[Cp>>2]=PN;break;case 434:QN=k,RN=0|em(QN),iK=RN,SN=k,TN=iK,VN=TN+16|0,WN=0|f[VN>>2],XN=k,YN=k,ZN=0|fm(YN,75764,0),$N=0|Ok(XN,ZN),_N=0|Tk(SN,WN,$N),aO=iK,bO=aO+16|0,f[bO>>2]=_N,cO=k,gm(cO);break;case 435:eO=k,gm(eO);break;case 438:fO=k,gO=0|em(fO),lM=gO,hO=k,iO=lM,jO=iO+16|0,kO=0|f[jO>>2],lO=k,mO=wd,nO=0|f[mO>>2],qO=0|Ok(lO,nO),rO=0|Tk(hO,kO,qO),sO=lM,tO=sO+16|0,f[tO>>2]=rO,uO=k,hm(uO);break;case 439:vO=k,wO=vO+44|0,xO=0|f[wO>>2],f[Cp>>2]=xO,yO=k,zO=yO+44|0,f[zO>>2]=0;break;case 440:BO=k,CO=0|em(BO),oO=CO,DO=wd,EO=DO+-8|0,FO=0|f[EO>>2],GO=k,HO=GO+44|0,f[HO>>2]=FO,IO=k,JO=k,KO=oO,MO=KO+16|0,NO=0|f[MO>>2],OO=k,PO=wd,QO=PO+-12|0,RO=0|f[QO>>2],SO=0|Ok(OO,RO),TO=0|Tk(JO,NO,SO),UO=k,VO=wd,XO=VO+-4|0,YO=0|f[XO>>2],ZO=0|Ok(UO,YO),$O=0|Tk(IO,TO,ZO),_O=oO,aP=_O+16|0,f[aP>>2]=$O;break;case 441:bP=k,cP=k,dP=wd,eP=0|f[dP>>2],gP=0|Ok(cP,eP),hP=0|im(bP,gP),f[Cp>>2]=hP;break;case 442:iP=k,jP=k,kP=wd,lP=kP+-4|0,mP=0|f[lP>>2],nP=k,oP=wd,pP=0|f[oP>>2],rP=0|Ok(nP,pP),sP=0|Tk(jP,mP,rP),tP=0|im(iP,sP),f[Cp>>2]=tP;break;case 443:uP=k,vP=wd,wP=0|f[vP>>2],xP=0|jm(uP,wP),f[Cp>>2]=xP;break;case 444:yP=k,zP=yP+40|0,f[zP>>2]=1,AP=k,CP=k,DP=wd,EP=DP+-4|0,FP=0|f[EP>>2],GP=k,HP=wd,IP=0|f[HP>>2],JP=0|Ok(GP,IP),KP=0|Tk(CP,FP,JP),LP=0|km(AP,KP),f[Cp>>2]=LP;break;case 445:NP=k,OP=NP+40|0,f[OP>>2]=1,PP=wd,QP=0|f[PP>>2],f[Cp>>2]=QP;break;case 450:RP=k,SP=wd,TP=0|f[SP>>2],UP=0|lm(RP,TP),f[Cp>>2]=UP;break;case 451:VP=k,WP=wd,YP=0|f[WP>>2],ZP=0|lm(VP,YP),f[Cp>>2]=ZP;break;case 452:$P=k,_P=k,aQ=wd,bQ=0|f[aQ>>2],cQ=0|Ok(_P,bQ),dQ=0|mm($P,cQ),f[Cp>>2]=dQ;break;case 453:eQ=k,fQ=k,hQ=wd,iQ=hQ+-4|0,jQ=0|f[iQ>>2],kQ=k,lQ=wd,mQ=0|f[lQ>>2],nQ=0|Ok(kQ,mQ),oQ=0|Tk(fQ,jQ,nQ),pQ=0|mm(eQ,oQ),f[Cp>>2]=pQ;break;case 456:qQ=k,uQ=wd,vQ=0|f[uQ>>2],wQ=0|nm(qQ,vQ),f[Cp>>2]=wQ;break;case 457:xQ=k,yQ=wd,zQ=0|f[yQ>>2],AQ=0|nm(xQ,zQ),f[Cp>>2]=AQ;break;case 458:BQ=k,CQ=wd,DQ=0|f[CQ>>2],FQ=0|om(BQ,DQ),f[Cp>>2]=FQ;break;case 459:GQ=k,HQ=wd,IQ=0|f[HQ>>2],JQ=0|pm(GQ,IQ),f[Cp>>2]=JQ;break;case 460:KQ=k,LQ=wd,MQ=0|f[LQ>>2],NQ=0|qm(KQ,MQ),f[Cp>>2]=NQ;break;case 461:OQ=k,QQ=wd,RQ=0|f[QQ>>2],SQ=0|rm(OQ,RQ),f[Cp>>2]=SQ;break;case 462:TQ=k,UQ=wd,VQ=0|f[UQ>>2],WQ=0|sm(TQ,VQ),f[Cp>>2]=WQ;break;case 463:XQ=k,YQ=wd,ZQ=0|f[YQ>>2],Bl(XQ,ZQ);break;case 464:_Q=k,aR=wd,bR=0|f[aR>>2],cR=0|tm(_Q,bR),f[Cp>>2]=cR;break;case 465:dR=k,eR=0|Hk(dR),f[Cp>>2]=eR;break;case 466:fR=k,gR=0|um(fR),f[Cp>>2]=gR;break;case 467:hR=k,iR=0|vm(hR),f[Cp>>2]=iR;break;case 468:kR=k,lR=0|wm(kR),f[Cp>>2]=lR;break;case 469:mR=k,nR=mR+28|0,oR=0|f[nR>>2],pR=0!=(0|oR),pR||(qR=k,rR=qR+28|0,f[rR>>2]=70729),sR=k,tR=k,vR=tR+28|0,wR=0|f[vR>>2],xR=k,yR=xR+28|0,zR=0|f[yR>>2],AR=0|$v(zR),BR=0|fm(sR,wR,AR),f[Cp>>2]=BR;break;case 470:CR=k,DR=CR+32|0,ER=0|f[DR>>2],f[Bda>>2]=ER,bw(sQ,16,59647,Bda),GR=k,HR=0|xm(GR,sQ,10),f[Cp>>2]=HR;break;case 473:f[Cp>>2]=0;break;case 474:IR=k,JR=IR+40|0,f[JR>>2]=0,KR=k,LR=KR+72|0,MR=0|d[LR>>0],NR=-2&MR,OR=1|NR,d[LR>>0]=OR;break;case 475:PR=wd,RR=PR+-4|0,SR=0|f[RR>>2],f[Cp>>2]=SR;break;case 476:TR=wd,UR=TR+-4|0,VR=0|f[UR>>2],f[Cp>>2]=VR,WR=k,XR=WR+40|0,f[XR>>2]=0,YR=k,ZR=YR+72|0,$R=0|d[ZR>>0],aS=-2&$R,bS=1|aS,d[ZR>>0]=bS;break;case 477:cS=wd,dS=cS+-4|0,eS=0|f[dS>>2],f[Cp>>2]=eS;break;case 478:fS=k,gS=wd,hS=gS+-20|0,iS=0|f[hS>>2],jS=wd,lS=jS+-12|0,mS=0|f[lS>>2],nS=wd,oS=nS+-4|0,pS=0|f[oS>>2],qS=wd,rS=0|f[qS>>2],sS=0|Yl(fS,iS,mS,pS,0,rS),f[Cp>>2]=sS;break;case 479:tS=k,uS=wd,xS=uS+-28|0,yS=0|f[xS>>2],zS=wd,AS=zS+-20|0,BS=0|f[AS>>2],CS=wd,DS=CS+-12|0,ES=0|f[DS>>2],FS=wd,GS=FS+-4|0,IS=0|f[GS>>2],JS=wd,KS=0|f[JS>>2],LS=0|Yl(tS,yS,BS,ES,IS,KS),f[Cp>>2]=LS;break;case 480:MS=k,NS=wd,OS=NS+-12|0,PS=0|f[OS>>2],QS=wd,RS=QS+-4|0,TS=0|f[RS>>2],US=wd,VS=0|f[US>>2],WS=0|Yl(MS,PS,TS,0,0,VS),f[Cp>>2]=WS;break;case 481:XS=k,YS=wd,ZS=YS+-20|0,$S=0|f[ZS>>2],_S=wd,aT=_S+-12|0,cT=0|f[aT>>2],dT=wd,eT=dT+-4|0,fT=0|f[eT>>2],gT=wd,hT=0|f[gT>>2],iT=0|Yl(XS,$S,cT,0,fT,hT),f[Cp>>2]=iT;break;case 482:jT=k,kT=wd,lT=kT+-12|0,nT=0|f[lT>>2],oT=wd,pT=oT+-4|0,qT=0|f[pT>>2],rT=wd,sT=0|f[rT>>2],tT=0|Yl(jT,nT,0,qT,0,sT),f[Cp>>2]=tT;break;case 483:uT=k,vT=wd,wT=vT+-20|0,yT=0|f[wT>>2],zT=wd,AT=zT+-12|0,BT=0|f[AT>>2],CT=wd,DT=CT+-4|0,ET=0|f[DT>>2],FT=wd,GT=0|f[FT>>2],HT=0|Yl(uT,yT,0,BT,ET,GT),f[Cp>>2]=HT;break;case 484:JT=k,KT=wd,LT=KT+-4|0,MT=0|f[LT>>2],NT=wd,OT=0|f[NT>>2],PT=0|Yl(JT,MT,0,0,0,OT),f[Cp>>2]=PT;break;case 485:QT=k,RT=wd,ST=RT+-12|0,UT=0|f[ST>>2],VT=wd,WT=VT+-4|0,XT=0|f[WT>>2],YT=wd,ZT=0|f[YT>>2],$T=0|Yl(QT,0,UT,XT,0,ZT),f[Cp>>2]=$T;break;case 486:_T=k,aU=wd,bU=aU+-20|0,dU=0|f[bU>>2],eU=wd,fU=eU+-12|0,gU=0|f[fU>>2],hU=wd,iU=hU+-4|0,jU=0|f[iU>>2],kU=wd,lU=0|f[kU>>2],mU=0|Yl(_T,0,dU,gU,jU,lU),f[Cp>>2]=mU;break;case 487:oU=k,pU=wd,qU=pU+-4|0,rU=0|f[qU>>2],sU=wd,tU=0|f[sU>>2],uU=0|Yl(oU,0,rU,0,0,tU),f[Cp>>2]=uU;break;case 488:vU=k,wU=wd,xU=wU+-12|0,AU=0|f[xU>>2],BU=wd,CU=BU+-4|0,DU=0|f[CU>>2],EU=wd,FU=0|f[EU>>2],GU=0|Yl(vU,0,AU,0,DU,FU),f[Cp>>2]=GU;break;case 489:HU=k,IU=wd,JU=IU+-4|0,LU=0|f[JU>>2],MU=wd,NU=0|f[MU>>2],OU=0|Yl(HU,0,0,LU,0,NU),f[Cp>>2]=OU;break;case 490:PU=k,QU=wd,RU=QU+-12|0,SU=0|f[RU>>2],TU=wd,UU=TU+-4|0,WU=0|f[UU>>2],XU=wd,YU=0|f[XU>>2],ZU=0|Yl(PU,0,0,SU,WU,YU),f[Cp>>2]=ZU;break;case 491:$U=k,_U=wd,aV=0|f[_U>>2],bV=0|Yl($U,0,0,0,0,aV),f[Cp>>2]=bV;break;case 492:cV=k,Zl(cV,0),dV=k,fV=0|Yl(dV,0,0,0,0,0),f[Cp>>2]=fV;break;case 493:gV=k,Kk(gV,59650),f[Cp>>2]=0;break;case 494:hV=k,Kk(hV,59687),f[Cp>>2]=0;break;case 495:iV=k,Kk(iV,59734),f[Cp>>2]=0;break;case 496:jV=k,Kk(jV,59778),f[Cp>>2]=0;break;case 497:f[Cp>>2]=0;break;case 498:kV=k,lV=wd,mV=0|f[lV>>2],Zl(kV,mV),nV=wd,oV=0|f[nV>>2],f[Cp>>2]=oV;break;case 499:qV=k,rV=wd,sV=0|f[rV>>2],tV=0|Xl(qV,sV),f[Cp>>2]=tV;break;case 500:uV=k,vV=wd,wV=vV+-4|0,xV=0|f[wV>>2],yV=0|fl(uV,xV,0),f[Cp>>2]=yV;break;case 501:zV=k,BV=wd,CV=0|f[BV>>2],DV=0|Ok(zV,CV),f[Cp>>2]=DV;break;case 502:EV=k,FV=wd,GV=FV+-8|0,HV=0|f[GV>>2],IV=k,JV=wd,KV=0|f[JV>>2],MV=0|Ok(IV,KV),NV=0|Tk(EV,HV,MV),f[Cp>>2]=NV;break;case 503:OV=k,PV=wd,QV=PV+-4|0,RV=0|f[QV>>2],Zl(OV,RV),SV=wd,TV=SV+-4|0,UV=0|f[TV>>2],f[Cp>>2]=UV;break;case 504:VV=k,XV=wd,YV=XV+-4|0,ZV=0|f[YV>>2],$V=ZV,_V=wd,aW=0|f[_V>>2],bW=0|Pk(VV,$V,aW),f[Cp>>2]=bW;break;case 505:cW=k,dW=wd,eW=dW+-4|0,gW=0|f[eW>>2],hW=gW,iW=wd,jW=0|f[iW>>2],kW=0|Pk(cW,hW,jW),f[Cp>>2]=kW;break;case 506:lW=k,mW=wd,nW=0|f[mW>>2],oW=0|Ok(lW,nW),f[Cp>>2]=oW;break;case 507:pW=k,rW=wd,sW=rW+-8|0,tW=0|f[sW>>2],uW=k,vW=wd,wW=0|f[vW>>2],xW=0|Ok(uW,wW),yW=0|Tk(pW,tW,xW),f[Cp>>2]=yW;break;case 508:zW=k,AW=wd,DW=0|f[AW>>2],EW=0|Ok(zW,DW),f[Cp>>2]=EW;break;case 509:FW=k,GW=wd,HW=GW+-8|0,IW=0|f[HW>>2],JW=k,KW=wd,LW=0|f[KW>>2],MW=0|Ok(JW,LW),OW=0|Tk(FW,IW,MW),f[Cp>>2]=OW;break;case 512:PW=k,QW=wd,RW=0|f[QW>>2],Zl(PW,RW),SW=wd,TW=0|f[SW>>2],f[Cp>>2]=TW;break;case 513:UW=k,Zl(UW,0),f[Cp>>2]=-1;break;case 516:VW=k,WW=wd,XW=0|f[WW>>2],Zl(VW,XW),ZW=wd,$W=0|f[ZW>>2],f[Cp>>2]=$W;break;case 517:_W=wd,aX=0|f[_W>>2],f[Cp>>2]=aX;break;case 518:bX=k,Zl(bX,0),f[Cp>>2]=0;break;case 519:cX=wd,dX=0|f[cX>>2],f[Cp>>2]=dX,eX=0|f[Cp>>2],fX=0!=(0|eX),fX||(gX=k,iX=0|Hk(gX),f[Cp>>2]=iX);break;case 520:jX=k,kX=jX+40|0,f[kX>>2]=0;break;case 521:lX=wd,mX=lX+-4|0,nX=0|f[mX>>2],oX=0==(0|nX);b:if(oX)pX=k,Kk(pX,59821);else{switch(qX=wd,rX=qX+-4|0,tX=0|f[rX>>2],uX=0|f[tX>>2],0|uX){case 99:case 34:case 51:case 47:case 60:case 58:case 57:case 56:case 55:break;default:break b}wX=k,Kk(wX,59859)}xX=wd,yX=xX+-4|0,zX=0|f[yX>>2],f[Cp>>2]=zX;break;case 523:AX=wd,BX=AX+-4|0,CX=0|f[BX>>2],f[Cp>>2]=CX;break;case 524:EX=k,FX=wd,GX=0|f[FX>>2],HX=0|Ok(EX,GX),f[Cp>>2]=HX,IX=wd,JX=0|f[IX>>2],KX=0!=(0|JX),KX&&(LX=wd,MX=0|f[LX>>2],NX=MX+10|0,PX=0|e[NX>>1],QX=0|f[Cp>>2],RX=QX+10|0,e[RX>>1]=PX,SX=wd,TX=0|f[SX>>2],UX=TX+8|0,VX=0|e[UX>>1],WX=0|f[Cp>>2],XX=WX+8|0,e[XX>>1]=VX);break;case 525:YX=k,$X=wd,_X=$X+-8|0,aY=0|f[_X>>2],bY=k,cY=wd,dY=0|f[cY>>2],eY=0|Ok(bY,dY),fY=0|Tk(YX,aY,eY),f[Cp>>2]=fY;break;case 526:gY=k,hY=wd,jY=hY+-8|0,kY=0|f[jY>>2],lY=wd,mY=0|f[lY>>2],nY=0|Pk(gY,kY,mY),f[Cp>>2]=nY;break;case 527:oY=k,pY=k,qY=wd,rY=qY+-4|0,sY=0|f[rY>>2],uY=0|jm(pY,sY),vY=wd,wY=0|f[vY>>2],xY=0|Pk(oY,uY,wY),f[Cp>>2]=xY;break;case 549:j5=0;break;case 551:yY=k,zY=yY+32|0,AY=0|f[zY>>2],BY=AY+1|0,f[zY>>2]=BY,CY=k,DY=CY+36|0,f[DY>>2]=0;break;case 554:j5=0;break;case 555:f[Cp>>2]=0}if(GY=Sx,HY=wd,IY=0-GY|0,JY=HY+(IY<<2)|0,wd=JY,KY=Sx,LY=sba,MY=0-KY|0,NY=LY+(MY<<1)|0,sba=NY,Sx=0,OY=wd,PY=OY+4|0,wd=PY,f[PY>>2]=0|f[Cp>>2],RY=Dh,SY=49776+(RY<<1)|0,TY=0|e[SY>>1],UY=65535&TY,Dh=UY,VY=Dh,WY=VY-144|0,XY=50888+(WY<<1)|0,YY=0|e[XY>>1],ZY=YY<<16>>16,$Y=sba,aZ=0|e[$Y>>1],bZ=aZ<<16>>16,cZ=ZY+bZ|0,g3=cZ,dZ=g3,eZ=0<=(0|dZ),fZ=g3,gZ=(0|fZ)<=10639,eZ&gZ&&(hZ=g3,iZ=5280+(hZ<<1)|0,jZ=0|e[iZ>>1],lZ=jZ<<16>>16,mZ=sba,nZ=0|e[mZ>>1],oZ=nZ<<16>>16,(0|lZ)==(0|oZ))){qZ=g3,rZ=26560+(qZ<<1)|0,sZ=0|e[rZ>>1],tZ=sZ<<16>>16,g3=tZ;break}uZ=Dh,wZ=uZ-144|0,xZ=51210+(wZ<<1)|0,yZ=0|e[xZ>>1],zZ=yZ<<16>>16,g3=zZ}else if(513==(0|Cda)){Cda=0,AZ=j5,BZ=0!=(0|AZ);do{if(!BZ){CZ=d1,DZ=CZ+1|0,d1=DZ,EZ=g3,FZ=Lv,HZ=0|ym(0,EZ,FZ),vS=HZ,IZ=Mv,JZ=vS,KZ=IZ>>>0<JZ>>>0,LZ=Mv,MZ=LZ>>>0<4294967295,xda=KZ&MZ;do{if(xda){if(NZ=vS,OZ=NZ<<1,yU=OZ,PZ=vS,QZ=yU,SZ=PZ>>>0<=QZ>>>0,TZ=yU,UZ=TZ>>>0<=4294967295,yda=SZ&UZ,c=yda?OZ:-1,yU=c,VZ=It,WZ=(0|VZ)!=(0|Fr),WZ&&(XZ=k,YZ=0|f[XZ>>2],ZZ=It,xc(YZ,ZZ)),$Z=k,_Z=0|f[$Z>>2],b$=yU,c$=0|Jc(_Z,b$),It=c$,d$=It,0!=(0|d$)){f$=yU,Mv=f$;break}It=Fr,Mv=128;break}}while(0);if(g$=vS,0<g$>>>0&&(i$=vS,j$=Mv,i$>>>0<=j$>>>0)){m$=It,n$=g3,o$=Lv,ym(m$,n$,o$),p$=k,q$=It,Kk(p$,q$);break}if(r$=k,Kk(r$,59902),s$=vS,0!=(0|s$)){Cda=538;break a}}}while(0);u$=j5,v$=3==(0|u$);do{if(v$){if(x$=Lv,(0|x$)<=0){if(z$=Lv,0==(0|z$)){Cda=537;break a}break}B$=yn,C$=k,zm(59915,B$,rQ,C$),Lv=-2;break}}while(0);for(j5=3;;){if(D$=g3,E$=3344+(D$<<1)|0,F$=0|e[E$>>1],G$=F$<<16>>16,Dh=G$,J$=Dh,-771!=(0|J$)&&(L$=Dh,M$=L$+1|0,Dh=M$,N$=Dh,O$=0<=(0|N$),P$=Dh,Q$=(0|P$)<=10639,O$&Q$&&(R$=Dh,S$=5280+(R$<<1)|0,U$=0|e[S$>>1],V$=U$<<16>>16,1==(0|V$)&&(X$=Dh,Y$=26560+(X$<<1)|0,Z$=0|e[Y$>>1],$$=Z$<<16>>16,Dh=$$,_$=Dh,0<(0|_$)))))break;if(b_=sba,d_=p9,(0|b_)==(0|d_)){Cda=537;break a}f_=g3,g_=51532+(f_<<1)|0,h_=0|e[g_>>1],i_=65535&h_,j_=wd,k_=k,zm(59933,i_,j_,k_),l_=wd,m_=l_+-4|0,wd=m_,o_=sba,p_=o_+-2|0,sba=p_,q_=sba,r_=0|e[q_>>1],s_=r_<<16>>16,g3=s_}t_=wd,u_=t_+4|0,wd=u_,f[u_>>2]=0|f[rQ>>2],v_=Dh,g3=v_}}while(0);H$=sba,n0=H$+2|0,sba=n0}for(536==(0|Cda)?Gj=0:537==(0|Cda)?Gj=1:538==(0|Cda)&&(w_=k,Kk(w_,59948),Gj=2),x_=Lv,z_=-2!=(0|x_),z_&&(A_=yn,B_=k,zm(59965,A_,rQ,B_)),C_=Sx,D_=wd,E_=0-C_|0,F_=D_+(E_<<2)|0,wd=F_,G_=Sx,H_=sba,I_=0-G_|0,K_=H_+(I_<<1)|0,sba=K_;;){if(L_=sba,M_=p9,!((0|L_)!=(0|M_)))break;O_=sba,P_=0|e[O_>>1],Q_=P_<<16>>16,R_=51532+(Q_<<1)|0,S_=0|e[R_>>1],T_=65535&S_,V_=wd,W_=k,zm(59995,T_,V_,W_),X_=wd,Y_=X_+-4|0,wd=Y_,Z_=sba,$_=Z_+-2|0,sba=$_}return __=p9,a0=(0|__)!=(0|m7),a0&&(b0=k,c0=0|f[b0>>2],e0=p9,xc(c0,e0)),f0=It,(0|f0)!=(0|Fr)?(h0=k,i0=0|f[h0>>2],j0=It,xc(i0,j0),k0=Gj,o=Dda,0|k0):(k0=Gj,o=Dda,0|k0)}function Hk(a){a|=0;var b=0,c=0,d=0,f=0;return f=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),b=a,c=b,d=0|Ok(c,86),o=f,0|d}function Ik(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,da=0,fa=0;if(fa=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),n=a,A=b,_=0,aa=A,!(0!=(0|aa)))return void(o=fa);if(da=n,c=da+1144|0,d=0|f[c>>2],e=0|f[d>>2],g=e,3!=(0|g))return void(o=fa);for(i=n,j=i+1144|0,k=0|f[j>>2],l=k+4|0,m=0|f[l>>2],q=0|f[m>>2],L=q,W=q;;){if(r=L,!(0!=(0|r)))break;t=_,u=t+1|0,_=u,v=L,w=v+4|0,x=0|f[w>>2],L=x}for(y=n,z=0|f[y>>2],B=A,C=0|f[B>>2],D=_,E=D<<2,F=0|Hc(z,C,E),G=A,f[G>>2]=F,H=_,I=A,J=I+4|0,f[J>>2]=H,_=0,K=W,L=K;;){if(M=L,!(0!=(0|M)))break;O=L,P=0|f[O>>2],Q=P,R=A,S=0|f[R>>2],T=_,U=S+(T<<2)|0,f[U>>2]=Q,V=_,X=V+1|0,_=X,Y=L,Z=Y+4|0,$=0|f[Z>>2],L=$}o=fa}function Jk(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,da=0,ea=0,fa=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,$a=0,_a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,$b=0,_b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,yc=0,zc=0,Ac=0,Bc=0,Cc=0,Dc=0,Ec=0,Fc=0,Gc=0,Hc=0,Ic=0,Jc=0,Kc=0,Lc=0,Mc=0,Nc=0,Oc=0,Pc=0,Qc=0,Rc=0,Sc=0,Tc=0,Uc=0,Vc=0,Wc=0,Xc=0,Yc=0,Zc=0,$c=0,_c=0,ad=0,cd=0,dd=0,ed=0,fd=0,gd=0,hd=0,id=0,jd=0,kd=0,ld=0,md=0,nd=0,od=0,pd=0,qd=0,rd=0,sd=0,td=0,ud=0,vd=0,wd=0,xd=0,yd=0,zd=0,Ad=0,Bd=0,Cd=0,Dd=0,Ed=0,Gd=0,Hd=0,Id=0,Jd=0,Kd=0,Ld=0,Md=0,Nd=0,Od=0,Pd=0,Qd=0,Rd=0,Sd=0,Td=0,Ud=0,Vd=0,Wd=0,Xd=0,Yd=0,Zd=0,$d=0,_d=0,ae=0,be=0,ce=0,de=0,ee=0,fe=0,ge=0,he=0,ie=0,je=0,ke=0,le=0,me=0,ne=0,oe=0,pe=0,qe=0,re=0,se=0,te=0,ue=0,ve=0,we=0,xe=0,ye=0,ze=0,Ae=0,Be=0,Ce=0,De=0,Ee=0,Fe=0,Ge=0,He=0,Ie=0,Je=0,Ke=0,Le=0,Me=0,Ne=0,Oe=0,Pe=0,Qe=0,Re=0,Se=0,Te=0,Ue=0,Ve=0,We=0,Xe=0,Ye=0,Ze=0,$e=0,_e=0,af=0,bf=0,cf=0,df=0,ef=0,ff=0,gf=0,hf=0,jf=0,kf=0,lf=0,mf=0,nf=0,of=0,pf=0,qf=0,rf=0,sf=0,tf=0,uf=0,vf=0,wf=0,xf=0,yf=0,zf=0,Af=0,Bf=0,Cf=0,Df=0,Ef=0,Gf=0,Hf=0,If=0,Jf=0,Kf=0,Lf=0,Mf=0,Nf=0,Of=0,Pf=0,Qf=0,Rf=0,Sf=0,Tf=0,Uf=0,Vf=0,Wf=0,Xf=0,Yf=0,Zf=0,$f=0,_f=0,ag=0,bg=0,cg=0,dg=0,eg=0,fg=0,hg=0,ig=0,jg=0,kg=0,lg=0,mg=0,ng=0,og=0,pg=0,qg=0,rg=0,sg=0,tg=0,ug=0,vg=0,wg=0,xg=0,yg=0,zg=0,Ag=0,Bg=0,Cg=0,Dg=0,Eg=0,Fg=0,Gg=0,Hg=0,Ig=0,Jg=0,Kg=0,Lg=0,Mg=0,Ng=0,Og=0,Pg=0,Qg=0,Rg=0,Sg=0,Tg=0,Ug=0,Vg=0,Wg=0,Xg=0,Yg=0,Zg=0,$g=0,_g=0,ah=0,bh=0,ch=0,dh=0,eh=0,fh=0,gh=0,hh=0,ih=0,jh=0,kh=0,lh=0,nh=0,oh=0,ph=0,qh=0,rh=0,sh=0,th=0,uh=0,vh=0,wh=0,xh=0,yh=0,zh=0,Ah=0,Bh=0,Ch=0,Dh=0,Eh=0,Fh=0,Gh=0,Hh=0,Ih=0,Jh=0,Kh=0,Lh=0,Mh=0,Nh=0,Oh=0,Ph=0,Qh=0,Rh=0,Sh=0,Th=0,Uh=0,Vh=0,Wh=0,Xh=0,Yh=0,Zh=0,$h=0,ai=0,bi=0,ci=0,di=0,ei=0,fi=0,gi=0,hi=0,ii=0,ji=0,ki=0,li=0,mi=0,ni=0,oi=0,pi=0,qi=0,ri=0,si=0,ti=0,ui=0,vi=0,xi=0,yi=0,zi=0,Ai=0,Bi=0,Ci=0,Di=0,Ei=0,Fi=0,Gi=0,Hi=0,Ii=0,Ji=0,Ki=0,Li=0,Mi=0,Ni=0,Oi=0,Pi=0,Qi=0,Ri=0,Si=0,Ti=0,Ui=0,Vi=0,Wi=0,Xi=0,Yi=0,Zi=0,$i=0,aj=0,bj=0,cj=0,dj=0,ej=0,gj=0,hj=0,ij=0,jj=0,kj=0,lj=0,mj=0,nj=0,oj=0,pj=0,qj=0,rj=0,sj=0,tj=0,uj=0,vj=0,wj=0,xj=0,yj=0,zj=0,Aj=0,Bj=0,Cj=0,Dj=0,Ej=0,Fj=0,Gj=0,Hj=0,Ij=0,Jj=0,Kj=0,Lj=0,Mj=0,Nj=0,Oj=0,Pj=0,Qj=0,Rj=0,Sj=0,Tj=0,Uj=0,Vj=0,Wj=0,Xj=0,Yj=0,Zj=0,$j=0,_j=0,ak=0,bk=0,ck=0,dk=0,ek=0,fk=0,gk=0,hk=0,ik=0,jk=0,kk=0,lk=0,mk=0,nk=0,ok=0,pk=0,qk=0,rk=0,sk=0,tk=0,uk=0,vk=0,wk=0,xk=0,yk=0,zk=0,Ak=0,Bk=0,Ck=0,Dk=0,Ek=0,Fk=0,Gk=0,Hk=0,Ik=0,Kk=0,Lk=0,Ok=0,Pk=0,Qk=0,Rk=0,Sk=0,Tk=0,Uk=0,Vk=0,Wk=0,Xk=0,Yk=0,$k=0,_k=0,al=0,cl=0,dl=0,el=0,fl=0,gl=0,hl=0,il=0,jl=0,kl=0,ll=0,ml=0,nl=0,ol=0,pl=0,ql=0,rl=0,sl=0,tl=0,ul=0,vl=0,wl=0,xl=0,yl=0,zl=0,Al=0,Bl=0,Cl=0,Dl=0,El=0,Fl=0,Gl=0,Hl=0,Il=0,Jl=0,Kl=0,Ll=0,Ml=0,Nl=0,Ol=0,Ql=0,Rl=0,Sl=0,Tl=0,Vl=0,Wl=0,Xl=0,Yl=0,Zl=0,$l=0,_l=0,bm=0,cm=0,dm=0,em=0,fm=0,gm=0,hm=0,im=0,jm=0,km=0,lm=0,mm=0,nm=0,om=0,pm=0,qm=0,rm=0,sm=0,tm=0,um=0,vm=0,wm=0,xm=0,ym=0,zm=0,Am=0,Bm=0,Cm=0,Dm=0,Em=0,Fm=0,Gm=0,Hm=0,Im=0,Jm=0,Km=0,Lm=0,Mm=0,Nm=0,Om=0,Pm=0,Qm=0,Rm=0,Sm=0,Tm=0,Um=0,Vm=0,Wm=0,Xm=0,Ym=0,Zm=0,_m=0,an=0,bn=0,cn=0,dn=0,en=0,fn=0,gn=0,hn=0,jn=0,kn=0,ln=0,nn=0,on=0,pn=0,qn=0,rn=0,sn=0,tn=0,un=0,vn=0,wn=0,xn=0,yn=0,zn=0,An=0,Bn=0,Cn=0,Dn=0,En=0,Fn=0,Gn=0,Hn=0,In=0,Jn=0,Kn=0,Ln=0,Mn=0,Nn=0,On=0,Pn=0,Qn=0,Rn=0,Sn=0,Tn=0,Un=0,Vn=0,Wn=0,Xn=0,Yn=0,Zn=0,$n=0,_n=0,ao=0,bo=0,co=0,eo=0,fo=0,go=0,ho=0,io=0,jo=0,ko=0,lo=0,mo=0,no=0,oo=0,po=0,qo=0,ro=0,so=0,to=0,vo=0,wo=0,xo=0,yo=0,zo=0,Ao=0,Bo=0,Co=0,Do=0,Eo=0,Fo=0,Go=0,Ho=0,Io=0,Jo=0,Ko=0,Lo=0,Mo=0,No=0,Oo=0,Po=0,Qo=0,Ro=0,So=0,To=0,Uo=0,Vo=0,Wo=0,Xo=0,Yo=0,$o=0,_o=0,ap=0,bp=0,cp=0,dp=0,ep=0,fp=0,gp=0,hp=0,ip=0,jp=0,kp=0,lp=0,mp=0,np=0,op=0,pp=0,qp=0,rp=0,sp=0,tp=0,up=0,vp=0,wp=0,xp=0,yp=0,zp=0,Ap=0,Bp=0,Cp=0,Dp=0,Ep=0,Fp=0,Gp=0,Hp=0,Ip=0,Jp=0,Kp=0,Mp=0,Np=0,Op=0,Pp=0,Qp=0,Rp=0,Sp=0,Tp=0,Up=0,Wp=0,Xp=0,Yp=0,Zp=0,$p=0,_p=0,aq=0,bq=0,cq=0,dq=0,eq=0,fq=0,gq=0,hq=0,iq=0,jq=0,kq=0,mq=0,nq=0,oq=0,pq=0,qq=0,rq=0,sq=0,tq=0,uq=0,vq=0,wq=0,xq=0,yq=0,zq=0,Aq=0,Bq=0,Cq=0,Dq=0,Eq=0,Fq=0,Gq=0,Hq=0,Iq=0,Jq=0,Kq=0,Lq=0,Mq=0,Nq=0,Oq=0,Pq=0,Qq=0,Rq=0,Sq=0,Tq=0,Uq=0,Vq=0,Wq=0,Xq=0,Yq=0,Zq=0,$q=0,_q=0,ar=0,br=0,cr=0,dr=0,er=0,fr=0,gr=0,hr=0,ir=0,jr=0,kr=0,lr=0,nr=0,or=0,pr=0,qr=0,rr=0,sr=0,tr=0,ur=0,vr=0,wr=0,xr=0,yr=0,Ar=0,Br=0,Cr=0,Dr=0,Er=0,Fr=0,Gr=0,Hr=0,Ir=0,Jr=0,Kr=0,Lr=0,Mr=0,Nr=0,Or=0,Pr=0,Qr=0,Rr=0,Sr=0,Tr=0,Ur=0,Vr=0,Wr=0,Xr=0,Yr=0,Zr=0,$r=0,_r=0,as=0,bs=0,cs=0,ds=0,es=0,fs=0,gs=0,hs=0,is=0,js=0,ks=0,ls=0,ms=0,ns=0,os=0,ps=0,qs=0,rs=0,ss=0,ts=0,us=0,vs=0,ws=0,xs=0,ys=0,zs=0,As=0,Bs=0,Cs=0,Ds=0,Es=0,Fs=0,Gs=0,Hs=0,Is=0,Js=0,Ks=0,Ls=0,Ms=0,Ns=0,Os=0,Ps=0,Qs=0,Rs=0,Ss=0,Ts=0,Us=0,Vs=0,Ws=0,Xs=0,Ys=0,Zs=0,$s=0,_s=0,at=0,bt=0,ct=0,dt=0,et=0,ft=0,gt=0,ht=0,it=0,jt=0,kt=0,lt=0,mt=0,nt=0,ot=0,pt=0,qt=0,rt=0,st=0,tt=0,ut=0,vt=0,wt=0,xt=0,yt=0,zt=0,At=0,Bt=0,Ct=0,Dt=0,Et=0,Ft=0,Gt=0,Ht=0,It=0,Jt=0,Kt=0,Lt=0,Mt=0,Nt=0,Ot=0,Pt=0,Qt=0,Rt=0,St=0,Tt=0,Ut=0,Vt=0,Wt=0,Xt=0,Yt=0,Zt=0,$t=0,_t=0,au=0,bu=0,cu=0,du=0,eu=0,fu=0,gu=0,hu=0,iu=0,ju=0,ku=0,lu=0,mu=0,nu=0,ou=0,pu=0,qu=0,ru=0,su=0,tu=0,uu=0,vu=0,wu=0,xu=0,yu=0,zu=0,Au=0,Bu=0,Cu=0,Du=0,Fu=0,Gu=0,Hu=0,Iu=0,Ju=0,Ku=0,Lu=0,Mu=0,Nu=0,Ou=0,Pu=0,Qu=0,Ru=0,Su=0,Tu=0,Uu=0,Vu=0,Wu=0,Xu=0,Yu=0,Zu=0,$u=0,_u=0,av=0,bv=0,cv=0,ev=0,fv=0,gv=0,hv=0,iv=0,jv=0,kv=0,lv=0,mv=0,nv=0,ov=0,pv=0,qv=0,rv=0,sv=0,tv=0,uv=0,vv=0,wv=0,xv=0,yv=0,zv=0,Av=0,Bv=0,Cv=0,Dv=0,Ev=0,Fv=0,Gv=0,Hv=0,Iv=0,Jv=0,Kv=0,Lv=0,Mv=0,Nv=0,Ov=0,Pv=0,Qv=0,Rv=0,Sv=0,Tv=0,Uv=0,Vv=0,Wv=0,Xv=0,Yv=0,Zv=0,$v=0,_v=0,aw=0,bw=0,cw=0,dw=0,ew=0,fw=0,gw=0,hw=0,iw=0,jw=0,kw=0,lw=0,mw=0,nw=0,ow=0,pw=0,qw=0,rw=0,sw=0,tw=0,uw=0,vw=0,ww=0,xw=0,yw=0,zw=0,Aw=0,Bw=0,Dw=0,Ew=0,Gw=0,Hw=0,Iw=0,Jw=0,Kw=0,Lw=0,Mw=0,Nw=0,Ow=0,Pw=0,Qw=0,Rw=0,Sw=0,Tw=0,Uw=0,Vw=0,Ww=0,Xw=0,Yw=0,Zw=0,$w=0,_w=0,ax=0,bx=0,cx=0,dx=0,ex=0,fx=0,gx=0,hx=0,ix=0,jx=0,kx=0,lx=0,mx=0,nx=0,ox=0,px=0,qx=0,rx=0,sx=0,tx=0,ux=0,vx=0,wx=0,xx=0,yx=0,zx=0,Ax=0,Bx=0,Cx=0,Dx=0,Ex=0,Fx=0,Gx=0,Hx=0,Ix=0,Jx=0,Kx=0,Lx=0,Mx=0,Nx=0,Ox=0,Px=0,Qx=0,Rx=0,Sx=0,Tx=0,Ux=0,Vx=0,Wx=0,Xx=0,Yx=0,Zx=0,$x=0,_x=0,ay=0,by=0,cy=0,dy=0,ey=0,fy=0,gy=0,hy=0,iy=0,jy=0,ky=0,ly=0,my=0,ny=0,oy=0,py=0,qy=0,ry=0,sy=0,ty=0,uy=0,vy=0,wy=0,xy=0,yy=0,zy=0,Ay=0,By=0,Cy=0,Dy=0,Ey=0,Fy=0,Gy=0,Hy=0,Iy=0,Jy=0,Ky=0,Ly=0,My=0,Ny=0,Oy=0,Py=0,Qy=0,Ry=0,Sy=0,Ty=0,Uy=0,Vy=0,Wy=0,Xy=0,Yy=0,Zy=0,$y=0,_y=0,az=0,bz=0,cz=0,dz=0,ez=0,fz=0,gz=0,hz=0,iz=0,jz=0,kz=0,lz=0,mz=0,nz=0,oz=0,pz=0,qz=0,rz=0,sz=0,tz=0,uz=0,vz=0,wz=0,xz=0,yz=0,zz=0,Az=0,Bz=0,Cz=0,Dz=0,Ez=0,Fz=0,Gz=0,Hz=0,Iz=0,Jz=0,Kz=0,Lz=0,Mz=0,Nz=0,Oz=0,Pz=0,Qz=0,Rz=0,Sz=0,Tz=0,Uz=0,Vz=0,Wz=0,Xz=0,Yz=0,Zz=0,$z=0,_z=0,aA=0,bA=0,cA=0,dA=0,eA=0,fA=0,gA=0,hA=0,iA=0;if(iA=o,o=o+1296|0,(0|o)>=(0|p)&&ca(1296),sz=iA+1208|0,rz=iA+1200|0,qz=iA+1192|0,pz=iA+1184|0,nz=iA+1176|0,mz=iA+1168|0,lz=iA+1160|0,kz=iA+1152|0,jz=iA+1144|0,iz=iA+1136|0,hz=iA+1128|0,gz=iA+1120|0,fz=iA+1112|0,ez=iA+1104|0,dz=iA+1096|0,cz=iA+1088|0,az=iA+1080|0,_y=iA+1072|0,$y=iA+1064|0,Zy=iA+1056|0,Yy=iA+1048|0,Wy=iA+1040|0,Vy=iA+1032|0,Uy=iA+1024|0,Ty=iA+1016|0,Ry=iA+1008|0,Qy=iA+1e3|0,Py=iA+992|0,Oy=iA+984|0,Ny=iA+976|0,My=iA+968|0,Ly=iA+960|0,Ky=iA+952|0,Iy=iA+944|0,Hy=iA+936|0,Gy=iA+928|0,Fy=iA+920|0,Ey=iA+912|0,Dy=iA+904|0,Cy=iA+896|0,By=iA+888|0,zy=iA+880|0,yy=iA+872|0,xy=iA+864|0,wy=iA+856|0,vy=iA+848|0,uy=iA+840|0,ty=iA+832|0,ry=iA+824|0,qy=iA+816|0,py=iA+808|0,oy=iA+800|0,ny=iA+792|0,my=iA+784|0,ly=iA+776|0,jy=iA+768|0,iy=iA+760|0,hy=iA+752|0,gy=iA+744|0,fy=iA+736|0,ey=iA+728|0,dy=iA+720|0,cy=iA+712|0,ay=iA+704|0,_x=iA+696|0,$x=iA+688|0,Zx=iA+680|0,Yx=iA+672|0,Xx=iA+664|0,Wx=iA+656|0,Vx=iA+648|0,Tx=iA+640|0,Sx=iA+632|0,Rx=iA+624|0,Qx=iA+616|0,Px=iA+608|0,Ox=iA+600|0,Nx=iA+592|0,Mx=iA+584|0,Lx=iA+576|0,Jx=iA+568|0,Ix=iA+560|0,Hx=iA+552|0,Gx=iA+544|0,Fx=iA+536|0,Ex=iA+528|0,Dx=iA+520|0,Cx=iA+512|0,Bx=iA+504|0,Ax=iA+496|0,yx=iA+488|0,xx=iA+480|0,wx=iA+472|0,vx=iA+464|0,ux=iA+456|0,tx=iA+448|0,sx=iA+440|0,rx=iA+432|0,qx=iA+424|0,ox=iA+416|0,nx=iA+408|0,mx=iA+400|0,lx=iA+392|0,$z=iA+384|0,Zz=iA+376|0,Yz=iA+368|0,Xz=iA+360|0,Vz=iA+352|0,Uz=iA+344|0,Tz=iA+336|0,Sz=iA+328|0,Rz=iA+320|0,Qz=iA+312|0,Pz=iA+304|0,Oz=iA+296|0,Nz=iA+288|0,Mz=iA+280|0,Kz=iA+272|0,Jz=iA+264|0,Iz=iA+256|0,Hz=iA+248|0,Gz=iA+240|0,Fz=iA+232|0,Ez=iA+224|0,Dz=iA+216|0,Cz=iA+208|0,Bz=iA+200|0,zz=iA+192|0,yz=iA+184|0,xz=iA+176|0,wz=iA+168|0,vz=iA+160|0,uz=iA+152|0,tz=iA+144|0,oz=iA+136|0,bz=iA+128|0,Sy=iA+120|0,Jy=iA+112|0,Ay=iA+104|0,sy=iA+96|0,ky=iA+88|0,by=iA+80|0,Ux=iA+72|0,Kx=iA+64|0,zx=iA+56|0,px=iA+48|0,Wz=iA+40|0,Lz=iA+32|0,Az=iA+24|0,Xy=iA+16|0,kx=iA+8|0,jx=iA,Ki=a,Qk=b,Tm=c,bh=Qk,!(0!=(0|bh)))return void(o=iA);a:for(;;){switch(xh=Qk,Ih=Tm,Mk(xh,Ih),Th=Qk,ci=0|f[Th>>2],ni=ci,Yo=ni,zi=Qk,Li=zi+4|0,Wi=0|f[Li>>2],Qk=Wi,0|Yo){case 17:hA=3;break a;case 18:hA=4;break a;case 19:hA=18;break a;case 53:hA=19;break a;case 4:break a;case 5:hA=34;break a;case 20:hA=36;break a;case 21:hA=37;break a;case 6:hA=38;break a;case 9:hA=43;break a;case 10:hA=44;break a;case 12:hA=45;break a;case 29:case 30:hA=66;break a;case 80:hA=69;break a;case 81:hA=70;break a;case 77:hA=71;break a;case 78:hA=72;break a;case 34:hA=73;break a;case 36:hA=74;break a;case 66:hA=77;break a;case 24:hA=78;break a;case 23:hA=79;break a;case 28:hA=90;break a;case 32:hA=91;break a;case 33:hA=94;break a;case 37:hA=95;break a;case 38:hA=96;break a;case 13:hA=97;break a;case 14:hA=98;break a;case 15:hA=99;break a;case 16:hA=100;break a;case 39:hA=101;break a;case 41:hA=102;break a;case 42:hA=103;break a;case 44:hA=104;break a;case 43:hA=105;break a;case 47:hA=106;break a;case 46:hA=107;break a;case 45:hA=108;break a;case 63:hA=109;break a;case 69:hA=110;break a;case 50:hA=111;break a;case 51:hA=112;break a;case 52:hA=113;break a;case 55:hA=114;break a;case 56:hA=115;break a;case 57:hA=116;break a;case 58:hA=117;break a;case 59:hA=118;break a;case 60:hA=119;break a;case 54:hA=120;break a;case 85:hA=121;break a;case 86:hA=122;break a;case 87:hA=123;break a;case 88:hA=124;break a;case 72:hA=125;break a;case 73:hA=126;break a;case 74:hA=130;break a;case 75:hA=138;break a;case 76:hA=144;break a;case 70:hA=145;break a;case 71:hA=170;break a;case 91:hA=184;break a;case 99:hA=185;break a;case 3:break;default:hA=186;break a}Cw(57509,Tz),Jl=Qk,Kl=0|f[Jl>>2],nd=Kl,kf=1,Ll=nd,Ml=0!=(0|Ll);do{if(Ml){if(Nl=nd,Ol=0|f[Nl>>2],!(0!=(0|Ol)||(Ql=nd,Rl=Ql+4|0,Tl=0|f[Rl>>2],0!=(0|Tl))))break;for(Vl=nd,Wl=Tm,Xl=Wl+1|0,Mk(Vl,Xl),Cw(57522,Uz),Yl=nd,Zl=Tm,$l=Zl+2|0,Mk(Yl,$l);;){if(_l=nd,!(0!=(0|_l)))break;cm=nd,dm=0|f[cm>>2],em=0!=(0|dm),em&&(fm=kf,gm=fm<<24>>24!=0,gm||Cw(57540,Vz),hm=Ki,im=nd,jm=0|f[im>>2],km=jm,lm=0|wi(hm,km),f[Xz>>2]=lm,Cw(57543,Xz),kf=0),nm=nd,om=nm+4|0,pm=0|f[om>>2],nd=pm}Cw(67789,Yz)}}while(0);qm=Qk,rm=qm+4|0,sm=0|f[rm>>2],Qk=sm,tm=Tm,um=tm+1|0,Tm=um}switch(0|hA){case 3:return Cw(57167,jx),qj=Ki,Bj=Qk,Mj=Tm,Xj=Mj+1|0,Nk(qj,Bj,Xj),void(o=iA);case 4:Cw(57180,kx),gk=Qk,rk=0|f[gk>>2],Ck=0!=(0|rk),Ck&&(Rk=Qk,al=Tm,ll=al+1|0,Mk(Rk,ll),Cw(57194,Xy),wl=Ki,Hl=Qk,Sl=0|f[Hl>>2],bm=Tm,mm=bm+2|0,Jk(wl,Sl,mm)),xm=Qk,Im=xm+4|0,Um=0|f[Im>>2],Qk=Um,dn=Qk,pn=0|f[dn>>2],An=0!=(0|pn);a:if(An)for(Ln=Qk,Wn=0|f[Ln>>2],_q=Wn,go=_q,ro=Tm,Co=ro+1|0,Mk(go,Co),Cw(57201,Az);;){if(No=_q,!(0!=(0|No)))break a;ip=_q,tp=0|f[ip>>2],ct=tp,Ep=ct,Pp=0|f[Ep>>2],$p=0!=(0|Pp),$p&&(jq=_q,uq=Tm,Fq=uq+2|0,Mk(jq,Fq),Cw(57210,Lz),Qq=Ki,ar=ct,lr=0|f[ar>>2],wr=Tm,Hr=wr+3|0,Nk(Qq,lr,Hr)),Sr=ct,bs=Sr+4|0,ms=0|f[bs>>2],xs=0|f[ms>>2],Is=0!=(0|xs),Is&&(Ts=ct,dt=Tm,ot=dt+2|0,Mk(Ts,ot),Cw(57227,Wz),zt=Ki,Kt=ct,Vt=Kt+4|0,eu=0|f[Vt>>2],pu=0|f[eu>>2],Au=Tm,Lu=Au+3|0,Jk(zt,pu,Lu)),Wu=ct,gv=Wu+4|0,rv=0|f[gv>>2],Cv=rv+4|0,Nv=0|f[Cv>>2],Yv=0|f[Nv>>2],hw=0!=(0|Yv),hw&&(sw=ct,Ew=Tm,Pw=Ew+2|0,Mk(sw,Pw),Cw(57237,px),$w=Ki,e=ct,s=e+4|0,D=0|f[s>>2],O=D+4|0,Z=0|f[O>>2],ja=0|f[Z>>2],ua=Tm,Fa=ua+3|0,Jk($w,ja,Fa)),Qa=_q,_a=Qa+4|0,lb=0|f[_a>>2],_q=lb}return wb=Qk,(Hb=wb+4|0,Sb=0|f[Hb>>2],Qk=Sb,bc=Qk,mc=0|f[bc>>2],0!=(0|mc))?(Ic=Qk,Tc=Tm,cd=Tc+1|0,Mk(Ic,cd),Cw(57251,zx),od=Ki,zd=Qk,Kd=0|f[zd>>2],Vd=Tm,ee=Vd+2|0,Jk(od,Kd,ee),void(o=iA)):void(o=iA);case 18:return Cw(57258,Kx),pe=Qk,Ae=Tm,Le=Ae+1|0,Mk(pe,Le),Cw(57194,Ux),We=Ki,ff=Qk,lf=0|f[ff>>2],mf=Tm,nf=mf+2|0,Jk(We,lf,nf),of=Qk,pf=Tm,qf=pf+1|0,Mk(of,qf),Cw(57272,by),rf=Ki,sf=Qk,tf=sf+4|0,uf=0|f[tf>>2],wf=uf+4|0,xf=0|f[wf>>2],yf=Tm,zf=yf+2|0,Jk(rf,xf,zf),void(o=iA);case 19:Cw(57281,ky);break;case 34:return Cw(57372,vz),Bh=Qk,Ch=Tm,Dh=Ch+1|0,Mk(Bh,Dh),Cw(57382,wz),Eh=Ki,Fh=Qk,Gh=0|f[Fh>>2],Hh=Tm,Jh=Hh+2|0,Jk(Eh,Gh,Jh),Kh=Qk,Lh=Tm,Mh=Lh+1|0,Mk(Kh,Mh),Cw(57389,xz),Nh=Ki,Oh=Qk,Ph=Oh+4|0,Qh=0|f[Ph>>2],Rh=0|f[Qh>>2],Sh=Tm,Uh=Sh+2|0,Jk(Nh,Rh,Uh),Vh=Qk,Wh=Vh+4|0,Xh=0|f[Wh>>2],Yh=Xh+4|0,Zh=0|f[Yh>>2],$h=0|f[Zh>>2],0!=(0|$h)?(ai=Qk,bi=Tm,di=bi+1|0,Mk(ai,di),Cw(57251,yz),ei=Ki,fi=Qk,gi=fi+4|0,hi=0|f[gi>>2],ii=hi+4|0,ji=0|f[ii>>2],ki=0|f[ji>>2],li=Tm,mi=li+2|0,Jk(ei,ki,mi),void(o=iA)):void(o=iA);case 36:return Cw(57396,zz),oi=Ki,pi=Qk,qi=0|f[pi>>2],ri=Tm,si=ri+1|0,Jk(oi,qi,si),ti=Ki,ui=Qk,vi=ui+4|0,xi=0|f[vi>>2],yi=Tm,Ai=yi+1|0,Jk(ti,xi,Ai),void(o=iA);case 37:return Cw(57407,Bz),Bi=Ki,Ci=Qk,Di=0|f[Ci>>2],Ei=Tm,Fi=Ei+1|0,Jk(Bi,Di,Fi),Gi=Ki,Hi=Qk,Ii=Hi+4|0,Ji=0|f[Ii>>2],Mi=Tm,Ni=Mi+1|0,Jk(Gi,Ji,Ni),void(o=iA);case 38:for(Cw(57417,Cz),Oi=Qk,Pi=0|f[Oi>>2],Qi=0!=(0|Pi),Qi&&(Ri=Ki,Si=Qk,Ti=0|f[Si>>2],Ui=Tm,Vi=Ui+1|0,Jk(Ri,Ti,Vi)),Xi=Qk,Yi=Xi+4|0,Zi=0|f[Yi>>2],Qk=Zi;;){if($i=Qk,!(0!=(0|$i)))break;aj=Qk,bj=Tm,cj=bj+1|0,Mk(aj,cj),Cw(57429,Dz),dj=Ki,ej=Qk,gj=0|f[ej>>2],hj=0|f[gj>>2],ij=Tm,jj=ij+2|0,Nk(dj,hj,jj),kj=Qk,lj=Tm,mj=lj+1|0,Mk(kj,mj),Cw(57194,Ez),nj=Ki,oj=Qk,pj=0|f[oj>>2],rj=pj+4|0,sj=0|f[rj>>2],tj=Tm,uj=tj+2|0,Jk(nj,sj,uj),vj=Qk,wj=vj+4|0,xj=0|f[wj>>2],Qk=xj}return void(o=iA);case 43:return Cw(57436,Fz),yj=Qk,zj=Tm,Aj=zj+1|0,Mk(yj,Aj),Cw(57382,Gz),Cj=Ki,Dj=Qk,Ej=0|f[Dj>>2],Fj=Tm,Gj=Fj+2|0,Jk(Cj,Ej,Gj),Hj=Qk,Ij=Tm,Jj=Ij+1|0,Mk(Hj,Jj),Cw(57194,Hz),Kj=Ki,Lj=Qk,Nj=Lj+4|0,Oj=0|f[Nj>>2],Pj=Tm,Qj=Pj+2|0,Jk(Kj,Oj,Qj),void(o=iA);case 44:return Cw(57449,Iz),Rj=Qk,Sj=Tm,Tj=Sj+1|0,Mk(Rj,Tj),Cw(57382,Jz),Uj=Ki,Vj=Qk,Wj=0|f[Vj>>2],Yj=Tm,Zj=Yj+2|0,Jk(Uj,Wj,Zj),$j=Qk,_j=Tm,ak=_j+1|0,Mk($j,ak),Cw(57194,Kz),bk=Ki,ck=Qk,dk=ck+4|0,ek=0|f[dk>>2],fk=Tm,hk=fk+2|0,Jk(bk,ek,hk),void(o=iA);case 45:return Cw(57462,Mz),ik=Qk,jk=Tm,kk=jk+1|0,Mk(ik,kk),Cw(57473,Nz),lk=Qk,mk=0|f[lk>>2],kb=mk,nk=kb,ok=0|f[nk>>2],pk=0!=(0|ok),pk&&(qk=kb,sk=Tm,tk=sk+2|0,Mk(qk,tk),Cw(57479,Oz),uk=Ki,vk=kb,wk=0|f[vk>>2],xk=Tm,yk=xk+3|0,Nk(uk,wk,yk)),zk=kb,Ak=zk+4|0,Bk=0|f[Ak>>2],kb=Bk,Dk=kb,Ek=0!=(0|Dk),Ek&&(Fk=kb,Gk=0|f[Fk>>2],Hk=0!=(0|Gk),Hk&&(Ik=kb,Kk=Tm,Lk=Kk+2|0,Mk(Ik,Lk),Cw(57485,Pz),Ok=Ki,Pk=kb,Sk=0|f[Pk>>2],Tk=Tm,Uk=Tk+3|0,Jk(Ok,Sk,Uk)),Vk=kb,Wk=Vk+4|0,Xk=0|f[Wk>>2],kb=Xk,Yk=kb,0!=(0|Yk)&&($k=kb,_k=0|f[$k>>2],0!=(0|_k)&&(cl=kb,dl=Tm,el=dl+2|0,Mk(cl,el),Cw(57492,Qz),fl=Ki,gl=kb,hl=0|f[gl>>2],il=Tm,jl=il+3|0,Nk(fl,hl,jl)))),kl=Qk,ml=kl+4|0,nl=0|f[ml>>2],Qk=nl,ol=Qk,pl=Tm,ql=pl+1|0,Mk(ol,ql),Cw(57499,Rz),rl=Ki,sl=Qk,tl=0|f[sl>>2],ul=Tm,vl=ul+2|0,Jk(rl,tl,vl),xl=Qk,yl=xl+4|0,zl=0|f[yl>>2],Qk=zl,Al=Qk,Bl=Tm,Cl=Bl+1|0,Mk(Al,Cl),Cw(57504,Sz),Dl=Ki,El=Qk,Fl=0|f[El>>2],Gl=Tm,Il=Gl+2|0,Jk(Dl,Fl,Il),void(o=iA);case 66:return Cw(57546,Zz),vm=Ki,wm=Qk,ym=0|f[wm>>2],zm=Tm,Am=zm+1|0,Jk(vm,ym,Am),Bm=Qk,Cm=Tm,Dm=Cm+1|0,Mk(Bm,Dm),Em=Ki,Fm=Qk,Gm=Fm+4|0,Hm=0|f[Gm>>2],Jm=0|f[Hm>>2],Km=Jm,Lm=0|wi(Em,Km),Mm=Qk,Nm=Mm+4|0,Om=0|f[Nm>>2],Pm=0|f[Om>>2],Qm=Pm,f[$z>>2]=Lm,_z=$z+4|0,f[_z>>2]=Qm,Cw(57558,$z),Rm=Qk,Sm=Rm+4|0,Vm=0|f[Sm>>2],Wm=Vm+4|0,Xm=0|f[Wm>>2],Ym=0|f[Xm>>2],Qk=Ym,Zm=Qk,0!=(0|Zm)?(_m=Qk,an=Tm,bn=an+1|0,Mk(_m,bn),Cw(57576,lx),cn=Ki,en=Qk,fn=0|f[en>>2],gn=Tm,hn=gn+2|0,Nk(cn,fn,hn),jn=Qk,kn=jn+4|0,ln=0|f[kn>>2],0!=(0|ln)?(nn=Qk,on=Tm,qn=on+1|0,Mk(nn,qn),Cw(57583,mx),rn=Ki,sn=Qk,tn=sn+4|0,un=0|f[tn>>2],vn=Tm,wn=vn+2|0,Jk(rn,un,wn),void(o=iA)):void(o=iA)):void(o=iA);case 69:return Cw(57591,nx),xn=Ki,yn=Qk,zn=0|f[yn>>2],Bn=Tm,Cn=Bn+1|0,Jk(xn,zn,Cn),Dn=Ki,En=Qk,Fn=En+4|0,Gn=0|f[Fn>>2],Hn=Tm,In=Hn+1|0,Jk(Dn,Gn,In),void(o=iA);case 70:return Cw(57603,ox),Jn=Ki,Kn=Qk,Mn=0|f[Kn>>2],Nn=Tm,On=Nn+1|0,Jk(Jn,Mn,On),Pn=Ki,Qn=Qk,Rn=Qn+4|0,Sn=0|f[Rn>>2],Tn=Tm,Un=Tn+1|0,Jk(Pn,Sn,Un),void(o=iA);case 71:return Cw(57615,qx),Vn=Ki,Xn=Qk,Yn=0|f[Xn>>2],Zn=Tm,$n=Zn+1|0,Jk(Vn,Yn,$n),_n=Qk,ao=Tm,bo=ao+1|0,Mk(_n,bo),co=Ki,eo=Qk,fo=eo+4|0,ho=0|f[fo>>2],io=ho,jo=0|wi(co,io),f[rx>>2]=jo,Cw(57629,rx),void(o=iA);case 72:return ko=Ki,lo=Qk,mo=lo,no=0|wi(ko,mo),f[sx>>2]=no,Cw(57635,sx),void(o=iA);case 73:return Cw(57654,tx),oo=Ki,po=Qk,qo=Tm,so=qo+1|0,Nk(oo,po,so),void(o=iA);case 74:for(Cw(57667,ux);;){if(to=Qk,!(0!=(0|to)))break;vo=Qk,wo=Tm,xo=wo+1|0,Mk(vo,xo),Cw(57679,vx),yo=Ki,zo=Qk,Ao=0|f[zo>>2],Bo=0|f[Ao>>2],Do=Tm,Eo=Do+2|0,Jk(yo,Bo,Eo),Fo=Qk,Go=Tm,Ho=Go+1|0,Mk(Fo,Ho),Cw(57685,wx),Io=Ki,Jo=Qk,Ko=0|f[Jo>>2],Lo=Ko+4|0,Mo=0|f[Lo>>2],Oo=Tm,Po=Oo+2|0,Jk(Io,Mo,Po),Qo=Qk,Ro=Qo+4|0,So=0|f[Ro>>2],Qk=So}return void(o=iA);case 77:return Cw(57693,xx),To=Ki,Uo=Qk,Vo=Tm,Wo=Vo+1|0,Jk(To,Uo,Wo),void(o=iA);case 78:return Cw(57706,yx),Xo=Qk,$o=Tm,_o=$o+1|0,Mk(Xo,_o),Cw(57718,Ax),ap=Ki,bp=Qk,cp=0|f[bp>>2],dp=Tm,ep=dp+2|0,Jk(ap,cp,ep),fp=Qk,gp=Tm,hp=gp+1|0,Mk(fp,hp),Cw(57724,Bx),jp=Ki,kp=Qk,lp=kp+4|0,mp=0|f[lp>>2],np=Tm,op=np+2|0,Jk(jp,mp,op),void(o=iA);case 79:if(Cw(57730,Cx),pp=Qk,qp=Tm,rp=qp+1|0,Mk(pp,rp),Cw(57743,Dx),sp=Qk,up=0|f[sp>>2],vf=up,vp=vf,wp=0|f[vp>>2],xp=0!=(0|wp),xp&&(yp=Qk,zp=Tm,Ap=zp+2|0,Mk(yp,Ap),Cw(57479,Ex),Bp=Ki,Cp=vf,Dp=0|f[Cp>>2],Fp=Tm,Gp=Fp+3|0,Nk(Bp,Dp,Gp)),Hp=vf,Ip=Hp+4|0,Jp=0|f[Ip>>2],vf=Jp,Kp=vf,0!=(0|Kp)){Mp=vf,Np=0|f[Mp>>2],Op=0!=(0|Np);do{if(Op){if(Qp=vf,Rp=Tm,Sp=Rp+2|0,Mk(Qp,Sp),Cw(57485,Fx),Tp=vf,Up=0|f[Tp>>2],-1==(0|Up)){Wp=vf,Xp=Tm,Yp=Xp+2|0,Mk(Wp,Yp),Cw(57750,Gx);break}Zp=Ki,_p=vf,aq=0|f[_p>>2],bq=Tm,cq=bq+3|0,Jk(Zp,aq,cq);break}}while(0);dq=vf,eq=dq+4|0,fq=0|f[eq>>2],vf=fq,gq=vf,hq=0!=(0|gq),hq&&(iq=vf,kq=0|f[iq>>2],0!=(0|kq)&&(mq=vf,nq=Tm,oq=nq+2|0,Mk(mq,oq),Cw(57492,Hx),pq=Ki,qq=vf,rq=0|f[qq>>2],sq=Tm,tq=sq+3|0,Nk(pq,rq,tq)))}return vq=Qk,wq=Tm,xq=wq+1|0,Mk(vq,xq),Cw(57724,Ix),yq=Ki,zq=Qk,Aq=zq+4|0,Bq=0|f[Aq>>2],Cq=Tm,Dq=Cq+2|0,Jk(yq,Bq,Dq),void(o=iA);case 90:return Cw(57759,Jx),Eq=Qk,Gq=Tm,Hq=Gq+1|0,Mk(Eq,Hq),Cw(57718,Lx),Iq=Ki,Jq=Qk,Kq=0|f[Jq>>2],Lq=Tm,Mq=Lq+2|0,Jk(Iq,Kq,Mq),Nq=Qk,Oq=Nq+4|0,Pq=0|f[Oq>>2],Qk=Pq,Rq=Qk,Sq=Tm,Tq=Sq+1|0,Mk(Rq,Tq),Uq=Ki,Vq=Qk,Wq=0|f[Vq>>2],Xq=Wq,Yq=0|wi(Uq,Xq),Zq=Qk,$q=0|f[Zq>>2],br=$q,f[Mx>>2]=Yq,aA=Mx+4|0,f[aA>>2]=br,Cw(57774,Mx),cr=Qk,dr=cr+4|0,er=0|f[dr>>2],Qk=er,fr=Ki,gr=Qk,hr=0|f[gr>>2],ir=Tm,jr=ir+1|0,Jk(fr,hr,jr),void(o=iA);case 91:return Cw(57788,Nx),kr=Qk,0!=(0|kr)?(nr=Qk,or=Tm,pr=or+1|0,Mk(nr,pr),Cw(57576,Ox),qr=Ki,rr=Qk,sr=0|f[rr>>2],tr=Tm,ur=tr+2|0,Nk(qr,sr,ur),vr=Qk,xr=vr+4|0,yr=0|f[xr>>2],0!=(0|yr)?(Ar=Qk,Br=Tm,Cr=Br+1|0,Mk(Ar,Cr),Cw(57583,Px),Dr=Ki,Er=Qk,Fr=Er+4|0,Gr=0|f[Fr>>2],Ir=Tm,Jr=Ir+2|0,Jk(Dr,Gr,Jr),void(o=iA)):void(o=iA)):void(o=iA);case 94:return Cw(57801,Qx),void(o=iA);case 95:return Cw(57814,Rx),Kr=Ki,Lr=Qk,Mr=Tm,Nr=Mr+1|0,Jk(Kr,Lr,Nr),void(o=iA);case 96:return Cw(57828,Sx),Or=Ki,Pr=Qk,Qr=Tm,Rr=Qr+1|0,Nk(Or,Pr,Rr),void(o=iA);case 97:return Cw(57841,Tx),Tr=Ki,Ur=Qk,Vr=Tm,Wr=Vr+1|0,Jk(Tr,Ur,Wr),void(o=iA);case 98:return Cw(57854,Vx),Xr=Ki,Yr=Qk,Zr=Tm,$r=Zr+1|0,Jk(Xr,Yr,$r),void(o=iA);case 99:return Cw(57866,Wx),void(o=iA);case 100:return Cw(57877,Xx),void(o=iA);case 101:return _r=Ki,as=Qk,cs=as,ds=0|wi(_r,cs),f[Yx>>2]=ds,Cw(57889,Yx),void(o=iA);case 102:return es=Ki,fs=Qk,gs=fs,hs=0|wi(es,gs),f[Zx>>2]=hs,Cw(57903,Zx),void(o=iA);case 103:return is=Ki,js=Qk,ks=js,ls=0|wi(is,ks),f[$x>>2]=ls,Cw(57917,$x),void(o=iA);case 104:return ns=Ki,os=Qk,ps=os,qs=0|wi(ns,ps),f[_x>>2]=qs,Cw(57931,_x),void(o=iA);case 105:return rs=Ki,ss=Qk,ts=ss,us=0|wi(rs,ts),f[ay>>2]=us,Cw(57945,ay),void(o=iA);case 106:return Cw(57960,cy),vs=Qk,ws=Tm,ys=ws+1|0,Mk(vs,ys),Cw(57718,dy),zs=Ki,As=Qk,Bs=0|f[As>>2],Cs=Tm,Ds=Cs+2|0,Jk(zs,Bs,Ds),Es=Qk,Fs=Tm,Gs=Fs+1|0,Mk(Es,Gs),Cw(57724,ey),Hs=Ki,Js=Qk,Ks=Js+4|0,Ls=0|f[Ks>>2],Ms=Tm,Ns=Ms+2|0,Jk(Hs,Ls,Ns),void(o=iA);case 107:return Os=Qk,Ps=Os,f[fy>>2]=Ps,Cw(57973,fy),void(o=iA);case 108:return Qs=Qk,Rs=Qs,f[gy>>2]=Rs,Cw(57993,gy),void(o=iA);case 109:return Ss=Ki,Us=Qk,Vs=Us,Ws=0|wi(Ss,Vs),f[hy>>2]=Ws,Cw(58012,hy),void(o=iA);case 110:return Cw(58025,iy),Xs=Ki,Ys=Qk,Zs=Tm,$s=Zs+1|0,Jk(Xs,Ys,$s),void(o=iA);case 111:return _s=Qk,at=0|f[_s>>2],bt=Qk,et=bt+4|0,ft=0|f[et>>2],gt=0|f[ft>>2],ht=gt,f[jy>>2]=at,bA=jy+4|0,f[bA>>2]=ht,Cw(58042,jy),void(o=iA);case 112:return it=Qk,f[ly>>2]=it,Cw(58063,ly),void(o=iA);case 113:return Cw(58078,my),jt=Ki,kt=Qk,lt=Tm,mt=lt+1|0,Jk(jt,kt,mt),void(o=iA);case 114:return nt=Qk,pt=0|f[nt>>2],qt=Qk,rt=qt+4|0,st=0|f[rt>>2],tt=st,f[ny>>2]=pt,cA=ny+4|0,f[cA>>2]=tt,Cw(58091,ny),void(o=iA);case 115:return Cw(58113,oy),ut=Ki,vt=Qk,wt=Tm,xt=wt+1|0,Nk(ut,vt,xt),void(o=iA);case 116:return yt=Qk,At=0|f[yt>>2],Bt=Qk,Ct=Bt+4|0,Dt=0|f[Ct>>2],Et=Dt,f[py>>2]=At,dA=py+4|0,f[dA>>2]=Et,Cw(58124,py),void(o=iA);case 117:return Cw(58147,qy),Ft=Ki,Gt=Qk,Ht=Tm,It=Ht+1|0,Nk(Ft,Gt,It),void(o=iA);case 118:return Jt=Qk,Lt=0|f[Jt>>2],Mt=Qk,Nt=Mt+4|0,Ot=0|f[Nt>>2],f[ry>>2]=Lt,eA=ry+4|0,f[eA>>2]=Ot,Cw(58159,ry),void(o=iA);case 119:return Cw(58177,ty),Pt=Ki,Qt=Qk,Rt=0|f[Qt>>2],St=Tm,Tt=St+1|0,Nk(Pt,Rt,Tt),Ut=Qk,Wt=Tm,Mk(Ut,Wt),Xt=Qk,Yt=Xt+4|0,Zt=0|f[Yt>>2],$t=Zt+4|0,_t=0|f[$t>>2],au=0|f[_t>>2],f[uy>>2]=au,Cw(58189,uy),bu=Qk,cu=Tm,Mk(bu,cu),du=Qk,fu=du+4|0,gu=0|f[fu>>2],hu=gu+4|0,iu=0|f[hu>>2],ju=iu+4|0,ku=0|f[ju>>2],f[vy>>2]=ku,Cw(58199,vy),void(o=iA);case 120:return lu=Ki,mu=Qk,nu=mu,ou=0|wi(lu,nu),f[wy>>2]=ou,Cw(58208,wy),void(o=iA);case 121:return Cw(58222,xy),void(o=iA);case 122:return Cw(58233,yy),void(o=iA);case 123:return Cw(58243,zy),void(o=iA);case 124:return Cw(58254,By),void(o=iA);case 125:return qu=Ki,ru=Qk,su=0|f[ru>>2],tu=su,uu=0|wi(qu,tu),vu=Ki,wu=Qk,xu=wu+4|0,yu=0|f[xu>>2],zu=yu,Bu=0|wi(vu,zu),f[Cy>>2]=uu,fA=Cy+4|0,f[fA>>2]=Bu,Cw(58266,Cy),void(o=iA);case 126:for(Cw(58285,Dy),Cu=Qk,Gf=Cu;;){if(Du=Gf,!(0!=(0|Du)))break;Fu=Ki,Gu=Gf,Hu=0|f[Gu>>2],Iu=Hu,Ju=0|wi(Fu,Iu),f[Ey>>2]=Ju,Cw(58296,Ey),Ku=Gf,Mu=Ku+4|0,Nu=0|f[Mu>>2],Gf=Nu}return Cw(58300,Fy),void(o=iA);case 130:Cw(58303,Gy),Ou=Qk,Pu=0|f[Ou>>2],Qu=0|f[Pu>>2],Ru=0==(0|Qu),Su=Qk;do{if(!Ru){if(bv=0|f[Su>>2],cv=0|f[bv>>2],1==(0|cv)){ev=Qk,hv=Tm,iv=hv+1|0,Mk(ev,iv),jv=Ki,kv=Qk,lv=0|f[kv>>2],mv=lv+4|0,nv=0|f[mv>>2],ov=nv,pv=0|wi(jv,ov),f[Iy>>2]=pv,Cw(57629,Iy);break}qv=Ki,sv=Qk,tv=0|f[sv>>2],uv=0|f[tv>>2],vv=Tm,wv=vv+1|0,Jk(qv,uv,wv),xv=Qk,yv=Tm,zv=yv+1|0,Mk(xv,zv),Av=Ki,Bv=Qk,Dv=0|f[Bv>>2],Ev=Dv+4|0,Fv=0|f[Ev>>2],Gv=Fv,Hv=0|wi(Av,Gv),f[Ky>>2]=Hv,Cw(57629,Ky);break}Tu=Tm,Uu=Tu+1|0,Mk(Su,Uu),Vu=Ki,Xu=Qk,Yu=0|f[Xu>>2],Zu=Yu+4|0,$u=0|f[Zu>>2],_u=$u,av=0|wi(Vu,_u),f[Hy>>2]=av,Cw(58316,Hy)}while(0);return Iv=Qk,Jv=Iv+4|0,Kv=0|f[Jv>>2],Lv=0|f[Kv>>2],Mv=0!=(0|Lv),Mv&&(Ov=Qk,Pv=Tm,Qv=Pv+1|0,Mk(Ov,Qv),Cw(58321,Ly),Rv=Ki,Sv=Qk,Tv=Sv+4|0,Uv=0|f[Tv>>2],Vv=0|f[Uv>>2],Wv=Tm,Xv=Wv+2|0,Jk(Rv,Vv,Xv)),Zv=Qk,$v=Tm,_v=$v+1|0,Mk(Zv,_v),Cw(57194,My),aw=Ki,bw=Qk,cw=bw+4|0,dw=0|f[cw>>2],ew=dw+4|0,fw=0|f[ew>>2],gw=0|f[fw>>2],iw=gw+4|0,jw=0|f[iw>>2],kw=Tm,lw=kw+2|0,Jk(aw,jw,lw),void(o=iA);case 138:Cw(58329,Ny),mw=Qk,nw=0|f[mw>>2],ow=0|f[nw>>2],pw=0==(0|ow),qw=Qk;do{if(!pw){if(Bw=0|f[qw>>2],Dw=0|f[Bw>>2],1==(0|Dw)){Gw=Qk,Hw=Tm,Iw=Hw+1|0,Mk(Gw,Iw),Jw=Ki,Kw=Qk,Lw=0|f[Kw>>2],Mw=Lw+4|0,Nw=0|f[Mw>>2],Ow=Nw,Qw=0|wi(Jw,Ow),f[Py>>2]=Qw,Cw(57629,Py);break}Rw=Ki,Sw=Qk,Tw=0|f[Sw>>2],Uw=0|f[Tw>>2],Vw=Tm,Ww=Vw+1|0,Jk(Rw,Uw,Ww),Xw=Qk,Yw=Tm,Zw=Yw+1|0,Mk(Xw,Zw),_w=Ki,ax=Qk,bx=0|f[ax>>2],cx=bx+4|0,dx=0|f[cx>>2],ex=dx,fx=0|wi(_w,ex),f[Qy>>2]=fx,Cw(57629,Qy);break}rw=Tm,tw=rw+1|0,Mk(qw,tw),uw=Ki,vw=Qk,ww=0|f[vw>>2],xw=ww+4|0,yw=0|f[xw>>2],zw=yw,Aw=0|wi(uw,zw),f[Oy>>2]=Aw,Cw(58316,Oy)}while(0);return gx=Qk,hx=Tm,ix=hx+1|0,Mk(gx,ix),Cw(57194,Ry),g=Ki,h=Qk,i=h+4|0,j=0|f[i>>2],k=0|f[j>>2],l=k+4|0,m=0|f[l>>2],n=Tm,q=n+2|0,Jk(g,m,q),void(o=iA);case 144:return Cw(58343,Ty),r=Ki,t=Qk,u=0|f[t>>2],v=Tm,w=v+1|0,Jk(r,u,w),x=Qk,y=Tm,z=y+1|0,Mk(x,z),Cw(57194,Uy),A=Ki,B=Qk,C=B+4|0,E=0|f[C>>2],F=0|f[E>>2],G=F+4|0,H=0|f[G>>2],I=Tm,J=I+2|0,Jk(A,H,J),void(o=iA);case 145:Cw(58357,Vy),K=Qk,L=Tm,M=L+1|0,Mk(K,M),N=Ki,P=Qk,Q=0|f[P>>2],R=Q,S=0|wi(N,R),f[Wy>>2]=S,Cw(58368,Wy),T=Qk,U=T+4|0,V=0|f[U>>2],Qk=V,W=Qk,X=0|f[W>>2],Rf=X,ag=1,Y=Rf,$=0!=(0|Y);do{if($){if(_=Rf,aa=0|f[_>>2],!(0!=(0|aa)||(da=Rf,ea=da+4|0,fa=0|f[ea>>2],0!=(0|fa))))break;for(ha=Rf,ia=Tm,ka=ia+1|0,Mk(ha,ka),Cw(57522,Yy),la=Rf,ma=Tm,na=ma+2|0,Mk(la,na);;){if(oa=Rf,!(0!=(0|oa)))break;qa=Rf,ra=0|f[qa>>2],sa=0!=(0|ra),sa&&(ta=ag,va=ta<<24>>24!=0,va||Cw(57540,Zy),wa=Ki,xa=Rf,ya=0|f[xa>>2],za=ya,Aa=0|wi(wa,za),f[$y>>2]=Aa,Cw(57543,$y),ag=0),Ba=Rf,Ca=Ba+4|0,Da=0|f[Ca>>2],Rf=Da}Cw(67789,_y)}}while(0);if(Ea=Qk,Ga=Ea+4|0,Ha=0|f[Ga>>2],Qk=Ha,Ia=Qk,Ja=0|f[Ia>>2],0!=(0|Ja)){La=Qk,Ma=0|f[La>>2],lg=Ma,Na=lg,Oa=0|f[Na>>2],Pa=0!=(0|Oa),Pa&&(Ra=lg,Sa=Tm,Ta=Sa+1|0,Mk(Ra,Ta),Cw(57294,az),Ua=Ki,Va=lg,Wa=0|f[Va>>2],Xa=Tm,Ya=Xa+2|0,Nk(Ua,Wa,Ya)),Za=lg,$a=Za+4|0,ab=0|f[$a>>2],lg=ab,bb=lg,cb=0|f[bb>>2],db=0!=(0|cb);a:if(db)for(eb=lg,fb=Tm,gb=fb+1|0,Mk(eb,gb),Cw(57311,cz),hb=lg,ib=0|f[hb>>2],wg=ib;;){if(jb=wg,!(0!=(0|jb)))break a;nb=wg,ob=Tm,pb=ob+2|0,Mk(nb,pb),qb=Ki,rb=wg,sb=0|f[rb>>2],tb=0|f[sb>>2],ub=tb,vb=0|wi(qb,ub),f[dz>>2]=vb,Cw(57327,dz),xb=Ki,yb=wg,zb=0|f[yb>>2],Ab=zb+4|0,Bb=0|f[Ab>>2],Jk(xb,Bb,0),Cb=wg,Db=Cb+4|0,Eb=0|f[Db>>2],wg=Eb}Fb=lg,Gb=Fb+4|0,Ib=0|f[Gb>>2],lg=Ib,Jb=lg,Kb=0|f[Jb>>2],Lb=0!=(0|Kb),Lb&&(Mb=lg,Nb=Tm,Ob=Nb+1|0,Mk(Mb,Ob),Pb=Ki,Qb=lg,Rb=0|f[Qb>>2],Tb=Rb,Ub=0|wi(Pb,Tb),f[ez>>2]=Ub,Cw(57331,ez)),Vb=lg,Wb=Vb+4|0,Xb=0|f[Wb>>2],lg=Xb,Yb=lg,Zb=0|f[Yb>>2],$b=0!=(0|Zb),$b&&(_b=lg,ac=Tm,cc=ac+1|0,Mk(_b,cc),Cw(57341,fz),dc=Ki,ec=lg,fc=0|f[ec>>2],gc=Tm,hc=gc+2|0,Nk(dc,fc,hc)),ic=lg,jc=ic+4|0,kc=0|f[jc>>2],lc=0!=(0|kc),lc&&(nc=lg,oc=Tm,pc=oc+1|0,Mk(nc,pc),qc=Ki,rc=lg,sc=rc+4|0,tc=0|f[sc>>2],uc=tc,vc=0|wi(qc,uc),f[gz>>2]=vc,Cw(57363,gz))}return wc=Ki,yc=Qk,zc=yc+4|0,Ac=0|f[zc>>2],Bc=0|f[Ac>>2],Cc=Tm,Dc=Cc+1|0,Jk(wc,Bc,Dc),void(o=iA);case 170:if(Cw(58372,hz),Ec=Ki,Fc=Qk,Gc=0|f[Fc>>2],Hc=Tm,Jc=Hc+1|0,Jk(Ec,Gc,Jc),Kc=Qk,Lc=Kc+4|0,Mc=0|f[Lc>>2],Qk=Mc,Nc=Qk,Oc=Tm,Pc=Oc+1|0,Mk(Nc,Pc),Qc=Ki,Rc=Qk,Sc=0|f[Rc>>2],Uc=Sc,Vc=0|wi(Qc,Uc),f[iz>>2]=Vc,Cw(58316,iz),Wc=Qk,Xc=Wc+4|0,Yc=0|f[Xc>>2],Zc=Yc+4|0,$c=0|f[Zc>>2],Qk=$c,_c=Qk,ad=0|f[_c>>2],0!=(0|ad)){dd=Qk,ed=0|f[dd>>2],Hg=ed,fd=Hg,gd=0|f[fd>>2],hd=0!=(0|gd),hd&&(id=Hg,jd=Tm,kd=jd+1|0,Mk(id,kd),Cw(57294,jz),ld=Ki,md=Hg,pd=0|f[md>>2],qd=Tm,rd=qd+2|0,Nk(ld,pd,rd)),sd=Hg,td=sd+4|0,ud=0|f[td>>2],Hg=ud,vd=Hg,wd=0|f[vd>>2],xd=0!=(0|wd);a:if(xd)for(yd=Hg,Ad=Tm,Bd=Ad+1|0,Mk(yd,Bd),Cw(57311,kz),Cd=Hg,Dd=0|f[Cd>>2],Sg=Dd;;){if(Ed=Sg,!(0!=(0|Ed)))break a;Gd=Sg,Hd=Tm,Id=Hd+2|0,Mk(Gd,Id),Jd=Ki,Ld=Sg,Md=0|f[Ld>>2],Nd=0|f[Md>>2],Od=Nd,Pd=0|wi(Jd,Od),f[lz>>2]=Pd,Cw(57327,lz),Qd=Ki,Rd=Sg,Sd=0|f[Rd>>2],Td=Sd+4|0,Ud=0|f[Td>>2],Jk(Qd,Ud,0),Wd=Sg,Xd=Wd+4|0,Yd=0|f[Xd>>2],Sg=Yd}Zd=Hg,$d=Zd+4|0,_d=0|f[$d>>2],Hg=_d,ae=Hg,be=0|f[ae>>2],ce=0!=(0|be),ce&&(de=Hg,fe=Tm,ge=fe+1|0,Mk(de,ge),he=Ki,ie=Hg,je=0|f[ie>>2],ke=je,le=0|wi(he,ke),f[mz>>2]=le,Cw(57331,mz)),me=Hg,ne=me+4|0,oe=0|f[ne>>2],Hg=oe,qe=Hg,re=0|f[qe>>2],se=0!=(0|re),se&&(te=Hg,ue=Tm,ve=ue+1|0,Mk(te,ve),Cw(57341,nz),we=Ki,xe=Hg,ye=0|f[xe>>2],ze=Tm,Be=ze+2|0,Nk(we,ye,Be)),Ce=Hg,De=Ce+4|0,Ee=0|f[De>>2],Hg=Ee,Fe=Hg,Ge=0!=(0|Fe),Ge&&(He=Hg,Ie=Tm,Je=Ie+1|0,Mk(He,Je),Ke=Ki,Me=Hg,Ne=Me,Oe=0|wi(Ke,Ne),f[pz>>2]=Oe,Cw(57363,pz))}return Pe=Qk,Qe=Pe+4|0,Re=0|f[Qe>>2],Qk=Re,Se=Ki,Te=Qk,Ue=0|f[Te>>2],Ve=Tm,Xe=Ve+1|0,Jk(Se,Ue,Xe),void(o=iA);case 184:return Cw(58384,qz),Ye=Ki,Ze=Qk,$e=Tm,_e=$e+1|0,Jk(Ye,Ze,_e),void(o=iA);case 185:return Cw(58399,rz),af=Ki,bf=Qk,cf=bf+16|0,df=0|f[cf>>2],ef=Tm,gf=ef+1|0,Jk(af,df,gf),void(o=iA);case 186:return hf=Yo,jf=Yo,f[sz>>2]=hf,gA=sz+4|0,f[gA>>2]=jf,Cw(58414,sz),void(o=iA)}if(Cw(57281,sy),Af=Qk,Bf=Af+4|0,Cf=0|f[Bf>>2],Qk=Cf,Df=Qk,Ef=0|f[Df>>2],0!=(0|Ef)){Hf=Qk,If=0|f[Hf>>2],fv=If,Jf=fv,Kf=0|f[Jf>>2],Lf=0!=(0|Kf),Lf&&(Mf=fv,Nf=Tm,Of=Nf+1|0,Mk(Mf,Of),Cw(57294,Ay),Pf=Ki,Qf=fv,Sf=0|f[Qf>>2],Tf=Tm,Uf=Tf+2|0,Nk(Pf,Sf,Uf)),Vf=fv,Wf=Vf+4|0,Xf=0|f[Wf>>2],fv=Xf,Yf=fv,Zf=0|f[Yf>>2],$f=0!=(0|Zf);a:if($f)for(_f=fv,bg=Tm,cg=bg+1|0,Mk(_f,cg),Cw(57311,Jy),dg=fv,eg=0|f[dg>>2],d=eg;;){if(fg=d,!(0!=(0|fg)))break a;hg=d,ig=Tm,jg=ig+2|0,Mk(hg,jg),kg=Ki,mg=d,ng=0|f[mg>>2],og=0|f[ng>>2],pg=og,qg=0|wi(kg,pg),f[Sy>>2]=qg,Cw(57327,Sy),rg=Ki,sg=d,tg=0|f[sg>>2],ug=tg+4|0,vg=0|f[ug>>2],Jk(rg,vg,0),xg=d,yg=xg+4|0,zg=0|f[yg>>2],d=zg}Ag=fv,Bg=Ag+4|0,Cg=0|f[Bg>>2],fv=Cg,Dg=fv,Eg=0|f[Dg>>2],Fg=0!=(0|Eg),Fg&&(Gg=fv,Ig=Tm,Jg=Ig+1|0,Mk(Gg,Jg),Kg=Ki,Lg=fv,Mg=0|f[Lg>>2],Ng=Mg,Og=0|wi(Kg,Ng),f[bz>>2]=Og,Cw(57331,bz)),Pg=fv,Qg=Pg+4|0,Rg=0|f[Qg>>2],fv=Rg,Tg=fv,Ug=0|f[Tg>>2],Vg=0!=(0|Ug),Vg&&(Wg=fv,Xg=Tm,Yg=Xg+1|0,Mk(Wg,Yg),Cw(57341,oz),Zg=Ki,$g=fv,_g=0|f[$g>>2],ah=Tm,ch=ah+2|0,Nk(Zg,_g,ch)),dh=fv,eh=dh+4|0,fh=0|f[eh>>2],fv=fh,gh=fv,hh=0!=(0|gh),hh&&(ih=fv,jh=Tm,kh=jh+1|0,Mk(ih,kh),lh=Ki,nh=fv,oh=nh,ph=0|wi(lh,oh),f[tz>>2]=ph,Cw(57363,tz))}qh=Qk,rh=Tm,sh=rh+1|0,Mk(qh,sh),Cw(57194,uz),th=Ki,uh=Qk,vh=uh+4|0,wh=0|f[vh>>2],yh=0|f[wh>>2],zh=Tm,Ah=zh+2|0,Jk(th,yh,Ah),o=iA}function Kk(a,b){a|=0,b|=0;var c=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ka=0;return Ka=o,o=o+48|0,(0|o)>=(0|p)&&ca(48),Da=Ka+16|0,Ca=Ka,q=a,B=b,ha=q,sa=ha+1148|0,Aa=0|d[sa>>0],Ba=(255&Aa)>>>1,c=1&Ba,e=c<<24>>24!=0,g=q,e?(F=g+1136|0,G=0|f[F>>2],G>>>0<10?(I=B,J=0|$v(I),X=J,K=q,L=X,N=L+1|0,O=0|Lk(K,N),M=O,P=M,Q=B,R=X,S=R+1|0,$w(0|P,0|Q,0|S),T=M,U=q,V=U+1152|0,W=q,Y=W+1136|0,Z=0|f[Y>>2],$=V+(12*Z|0)|0,_=$+8|0,f[_>>2]=T,aa=q,ba=aa+32|0,da=0|f[ba>>2],ea=q,fa=ea+1152|0,ga=q,ia=ga+1136|0,ja=0|f[ia>>2],ka=fa+(12*ja|0)|0,f[ka>>2]=da,la=q,ma=la+36|0,na=0|f[ma>>2],oa=q,pa=oa+1152|0,qa=q,ra=qa+1136|0,ta=0|f[ra>>2],ua=pa+(12*ta|0)|0,va=ua+4|0,f[va>>2]=na,wa=q,xa=wa+1136|0,ya=0|f[xa>>2],za=ya+1|0,f[xa>>2]=za,void(o=Ka)):(wa=q,xa=wa+1136|0,ya=0|f[xa>>2],za=ya+1|0,f[xa>>2]=za,void(o=Ka))):(h=g+28|0,i=0|f[h>>2],j=0!=(0|i),k=0|f[637],l=q,j?(m=l+28|0,n=0|f[m>>2],r=q,s=r+32|0,t=0|f[s>>2],u=q,v=u+36|0,w=0|f[v>>2],x=B,f[Ca>>2]=n,Ea=Ca+4|0,f[Ea>>2]=t,Fa=Ca+8|0,f[Fa>>2]=w,Ga=Ca+12|0,f[Ga>>2]=x,yw(k,57137,Ca),wa=q,xa=wa+1136|0,ya=0|f[xa>>2],za=ya+1|0,f[xa>>2]=za,void(o=Ka)):(y=l+32|0,z=0|f[y>>2],A=q,C=A+36|0,D=0|f[C>>2],E=B,f[Da>>2]=z,Ha=Da+4|0,f[Ha>>2]=D,Ia=Da+8|0,f[Ia>>2]=E,yw(k,57151,Da),wa=q,xa=wa+1136|0,ya=0|f[xa>>2],za=ya+1|0,f[xa>>2]=za,void(o=Ka)))}function Lk(a,b){a|=0,b|=0;var c=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,u=0;return u=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),j=a,k=b,m=j,n=m+4|0,q=0|f[n>>2],r=k,s=0|ft(q,r),l=s,c=l,0!=(0|c)?(i=l,o=u,0|i):(e=j,g=e+1404|0,h=0|f[g>>2],Aa(0|h,1),0)}function Mk(a,b){a|=0,b|=0;var d=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,t=0;for(t=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),r=t,h=a,i=b,j=h,k=j+8|0,l=0|e[k>>1],m=65535&l,f[r>>2]=m,Cw(58436,r);;){if(n=i,q=n+-1|0,i=q,!(0!=(0|n)))break;d=0|f[762],kw(32,d),g=0|f[762],kw(32,g)}o=t}function Nk(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,q=0,r=0,t=0;for(t=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),j=a,k=b,l=c;;){if(m=k,!(0!=(0|m)))break;q=j,r=k,d=0|f[r>>2],e=l,Jk(q,d,e),g=k,h=g+4|0,i=0|f[h>>2],k=i}o=t}function Ok(a,b){a|=0,b|=0;var c=0,d=0,e=0,f=0,g=0,i=0;return i=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),c=a,d=b,e=c,f=d,g=0|Pk(e,f,0),o=i,0|g}function Pk(a,b,c){a|=0,b|=0,c|=0;var d=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,T=0;return T=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),B=a,M=b,N=c,P=B,Q=P+8|0,R=0|f[Q>>2],d=0!=(0|R),g=B,d?(h=g+8|0,i=0|f[h>>2],O=i,j=B,k=j+8|0,l=0|f[k>>2],m=l+4|0,n=0|f[m>>2],q=B,r=q+8|0,f[r>>2]=n):(s=0|Lk(g,12),O=s),t=M,u=O,f[u>>2]=t,v=N,w=O,x=w+4|0,f[x>>2]=v,y=B,z=y+32|0,A=0|f[z>>2],C=65535&A,D=O,E=D+8|0,e[E>>1]=C,F=B,G=F+1400|0,H=0|f[G>>2],I=65535&H,J=O,K=J+10|0,e[K>>1]=I,L=O,o=T,0|L}function Qk(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,l=0;return l=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),c=a,d=b,e=c,g=d,h=g+1132|0,f[h>>2]=e,i=d,j=0|Rm(i),o=l,0|j}function Rk(a,b){a|=0,b|=0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0;return m=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),d=a,e=b,f=d,g=d,h=d,i=0|Jm(h),j=e,k=0|Pk(g,i,j),c=0|Pk(f,3,k),o=m,0|c}function Sk(a,b){a|=0,b|=0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,n=0;return n=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),f=a,g=b,h=g,i=0!=(0|h),j=f,i?(k=g,l=0|Al(j,17,k),e=l):(c=0|Pk(j,17,0),e=c),d=e,o=n,0|d}function Tk(a,b,c){a|=0,b|=0,c|=0;var e=0,g=0,h=0,i=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,E=0;if(E=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),a,y=b,z=c,B=y,A=B,C=y,!(0!=(0|C)))return e=z,w=e,v=w,o=E,0|v;for(;;){if(g=A,h=g+4|0,i=0|f[h>>2],!(0!=(0|i)))break;k=A,l=k+4|0,m=0|f[l>>2],A=m}return n=z,q=0!=(0|n),q&&(r=z,s=A,t=s+4|0,f[t>>2]=r),u=y,w=u,v=w,o=E,0|v}function Uk(a){a|=0;var b=0,c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,n=0;return n=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),b=a,e=b,g=e+76|0,h=0|f[g>>2],d=h,i=b,j=0|Pk(i,0,0),k=b,l=k+76|0,f[l>>2]=j,c=d,o=n,0|c}function Vk(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,j=0;j=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),c=a,d=b,e=d,g=c,h=g+76|0,f[h>>2]=e,o=j}function Wk(a,b,c,d){a|=0,b|=0,c|=0,d|=0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,q=0;return q=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),h=a,i=b,j=c,k=d,l=h,m=i,e=j,f=k,g=0|Mm(l,18,m,e,f),o=q,0|g}function Xk(a,b){a|=0,b|=0;var c=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ka=0;return Ka=o,o=o+48|0,(0|o)>=(0|p)&&ca(48),Da=Ka+16|0,Ca=Ka,q=a,B=b,ha=q,sa=ha+1148|0,Aa=0|d[sa>>0],Ba=(255&Aa)>>>1,c=1&Ba,e=c<<24>>24!=0,g=q,e?(F=g+1140|0,G=0|f[F>>2],G>>>0<10?(I=B,J=0|$v(I),X=J,K=q,L=X,N=L+1|0,O=0|Lk(K,N),M=O,P=M,Q=B,R=X,S=R+1|0,$w(0|P,0|Q,0|S),T=M,U=q,V=U+1272|0,W=q,Y=W+1140|0,Z=0|f[Y>>2],$=V+(12*Z|0)|0,_=$+8|0,f[_>>2]=T,aa=q,ba=aa+32|0,da=0|f[ba>>2],ea=q,fa=ea+1272|0,ga=q,ia=ga+1140|0,ja=0|f[ia>>2],ka=fa+(12*ja|0)|0,f[ka>>2]=da,la=q,ma=la+36|0,na=0|f[ma>>2],oa=q,pa=oa+1272|0,qa=q,ra=qa+1140|0,ta=0|f[ra>>2],ua=pa+(12*ta|0)|0,va=ua+4|0,f[va>>2]=na,wa=q,xa=wa+1140|0,ya=0|f[xa>>2],za=ya+1|0,f[xa>>2]=za,void(o=Ka)):(wa=q,xa=wa+1140|0,ya=0|f[xa>>2],za=ya+1|0,f[xa>>2]=za,void(o=Ka))):(h=g+28|0,i=0|f[h>>2],j=0!=(0|i),k=0|f[637],l=q,j?(m=l+28|0,n=0|f[m>>2],r=q,s=r+32|0,t=0|f[s>>2],u=q,v=u+36|0,w=0|f[v>>2],x=B,f[Ca>>2]=n,Ea=Ca+4|0,f[Ea>>2]=t,Fa=Ca+8|0,f[Fa>>2]=w,Ga=Ca+12|0,f[Ga>>2]=x,yw(k,57137,Ca),wa=q,xa=wa+1140|0,ya=0|f[xa>>2],za=ya+1|0,f[xa>>2]=za,void(o=Ka)):(y=l+32|0,z=0|f[y>>2],A=q,C=A+36|0,D=0|f[C>>2],E=B,f[Da>>2]=z,Ha=Da+4|0,f[Ha>>2]=D,Ia=Da+8|0,f[Ia>>2]=E,yw(k,57151,Da),wa=q,xa=wa+1140|0,ya=0|f[xa>>2],za=ya+1|0,f[xa>>2]=za,void(o=Ka)))}function Yk(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,r=0;return r=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),h=a,i=b,j=c,k=h,l=h,m=i,n=h,d=j,e=0|Pk(n,0,d),f=0|Pk(l,m,e),g=0|Pk(k,19,f),o=r,0|g}function Zk(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,r=0;return r=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),h=a,i=b,j=c,k=h,l=h,m=i,n=m,d=j,e=d,f=0|Pk(l,n,e),g=0|Pk(k,72,f),o=r,0|g}function $k(a){a|=0;var b=0,c=0,e=0;return e=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),b=a,c=b,o=e,0|c}function _k(a,b,c,d){a|=0,b|=0,c|=0,d|=0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,q=0;return q=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),h=a,i=b,j=c,k=d,l=h,m=i,e=j,f=k,g=0|Mm(l,5,m,e,f),o=q,0|g}function al(a,b,c,d){a|=0,b|=0,c|=0,d|=0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,q=0;return q=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),h=a,i=b,j=c,k=d,l=h,m=i,e=k,f=j,g=0|Mm(l,5,m,e,f),o=q,0|g}function bl(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,n=0;return n=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),f=a,g=b,h=c,i=f,j=f,k=g,l=h,d=0|Pk(j,k,l),e=0|Pk(i,9,d),o=n,0|e}function cl(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,n=0;return n=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),f=a,g=b,h=c,i=f,j=f,k=g,l=h,d=0|Pk(j,k,l),e=0|Pk(i,10,d),o=n,0|e}function dl(a,b,c,d){a|=0,b|=0,c|=0,d|=0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,u=0;return u=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),l=a,m=b,n=c,q=d,r=l,s=m,e=l,f=n,g=l,h=q,i=0|Pk(g,h,0),j=0|Pk(e,f,i),k=0|Pk(r,s,j),o=u,0|k}function el(a,b){a|=0,b|=0;var c=0,d=0,e=0,f=0,g=0,i=0;return i=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),c=a,d=b,e=c,f=d,g=0|Pk(e,91,f),o=i,0|g}function fl(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,n=0;return n=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),f=a,g=b,h=c,i=f,j=f,k=g,l=h,d=0|Pk(j,k,l),e=0|Pk(i,23,d),o=n,0|e}function gl(a,b,c,d){a|=0,b|=0,c|=0,d|=0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,r=0;return r=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),i=a,j=b,k=c,l=d,m=i,n=j,e=k,f=e,g=l,h=0|Mm(m,28,n,f,g),o=r,0|h}function hl(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,n=0;return n=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),e=a,g=b,h=c,i=e,j=0|f[i>>2],k=g,l=h,d=0|gi(j,k,l),o=n,0|d}function il(a,b,c,d){a|=0,b|=0,c|=0,d|=0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,G=0;return G=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),z=a,A=b,B=c,C=d,E=z,f=A,g=B,h=g,i=C,j=0|Mm(E,29,f,h,i),D=j,k=A,0!=(0|k)?(m=A,n=m+10|0,q=0|e[n>>1],r=D,s=r+10|0,e[s>>1]=q,t=A,u=t+8|0,v=0|e[u>>1],w=D,x=w+8|0,e[x>>1]=v,y=D,o=G,0|y):(y=D,o=G,0|y)}function jl(a,b){a|=0,b|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,F=0;if(F=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),D=F,y=F+8|0,q=a,w=b,z=w,A=0|f[z>>2],B=A,x=B,C=x,45==(0|C))return e=q,g=w,h=g+4|0,i=0|f[h>>2],j=i,Pm(e,62881,j),void(o=F);k=x,l=46==(0|k),m=q,l||(u=0|f[m>>2],v=x,Qm(y,v),d[D>>0]=0|d[y>>0],d[D+1>>0]=0|d[y+1>>0],d[D+2>>0]=0|d[y+2>>0],d[D+3>>0]=0|d[y+3>>0],d[D+4>>0]=0|d[y+4>>0],d[D+5>>0]=0|d[y+5>>0],d[D+6>>0]=0|d[y+6>>0],d[D+7>>0]=0|d[y+7>>0],Hr(u,62927,D)),n=w,r=n+4|0,s=0|f[r>>2],t=s,Pm(m,62904,t),o=F}function kl(a,b){a|=0,b|=0;var c=0,d=0,e=0,f=0,g=0,i=0;return i=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),c=a,d=b,e=c,f=d,g=0|Pk(e,34,f),o=i,0|g}function ll(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,n=0;return n=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),f=a,g=b,h=c,i=f,j=f,k=g,l=h,d=0|Pk(j,k,l),e=0|Pk(i,24,d),o=n,0|e}function ml(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,n=0;return n=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),f=a,g=b,h=c,i=f,j=f,k=g,l=h,d=0|Pk(j,k,l),e=0|Pk(i,20,d),o=n,0|e}function nl(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,n=0;return n=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),f=a,g=b,h=c,i=f,j=f,k=g,l=h,d=0|Pk(j,k,l),e=0|Pk(i,21,d),o=n,0|e}function ol(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,n=0;return n=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),f=a,g=b,h=c,i=f,j=g,k=f,l=h,d=0|Nm(k,l),e=0|il(i,j,d,0),o=n,0|e}function pl(a){a|=0;var b=0,c=0,d=0,e=0,g=0,h=0,i=0,j=0,l=0;l=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),b=a,c=b,d=b,e=d+76|0,g=0|f[e>>2],h=0|Pk(c,0,g),i=b,j=i+76|0,f[j>>2]=h,o=l}function ql(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,n=0;return n=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),f=a,g=b,h=c,i=f,j=f,k=0|Jm(j),l=g,d=h,e=0|Mm(i,4,k,l,d),o=n,0|e}function rl(a){a|=0;var b=0,c=0,d=0,e=0,g=0,h=0,i=0,k=0,l=0,m=0,n=0,r=0;if(r=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),b=a,g=b,h=g+76|0,i=0|f[h>>2],!(0!=(0|i)))return void(o=r);k=b,l=k+76|0,m=0|f[l>>2],n=m+4|0,c=0|f[n>>2],d=b,e=d+76|0,f[e>>2]=c,o=r}function sl(a,b,c){a|=0,b|=0,c|=0;var d=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,S=0;return S=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),A=a,L=b,M=c,O=A,P=0|um(O),N=P,Q=M,d=0!=(0|Q),d&&(f=M,g=f+10|0,h=0|e[g>>1],i=N,j=i+10|0,e[j>>1]=h,k=M,l=k+8|0,m=0|e[l>>1],n=N,q=n+8|0,e[q>>1]=m),r=A,s=N,t=L,u=t,v=M,w=0|Mm(r,30,s,u,v),N=w,x=M,0!=(0|x)?(z=M,B=z+10|0,C=0|e[B>>1],D=N,E=D+10|0,e[E>>1]=C,F=M,G=F+8|0,H=0|e[G>>1],I=N,J=I+8|0,e[J>>1]=H,K=N,o=S,0|K):(K=N,o=S,0|K)}function tl(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,r=0,s=0,u=0;if(u=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),k=a,l=b,m=c,n=m,!(0!=(0|n)))return void(o=u);r=l,s=r+4|0,d=0|f[s>>2],e=0!=(0|d),e&&(g=k,Kk(g,62843)),h=m,i=l,j=i+4|0,f[j>>2]=h,o=u}function ul(a,b){a|=0,b|=0;var c=0,d=0,e=0,f=0,g=0,i=0;return i=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),c=a,d=b,e=c,f=d,g=0|Pk(e,32,f),o=i,0|g}function vl(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,t=0,u=0,v=0,x=0;return x=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),n=a,q=b,r=q,0!=(0|r)?(t=q,u=t+4|0,v=0|f[u>>2],c=0!=(0|v),c&&(d=n,Kk(d,62843)),e=n,g=q,h=0|f[g>>2],i=0|Pk(e,38,h),m=i,l=m,o=x,0|l):(j=n,k=0|Pk(j,38,0),m=k,l=m,o=x,0|l)}function wl(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,z=0,B=0;return B=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),t=a,u=b,v=u,w=v+4|0,x=0|f[w>>2],0!=(0|x)?(z=t,Kk(z,62808),n=0,s=n,o=B,0|s):(c=u,d=0|f[c>>2],e=d+4|0,g=0|f[e>>2],h=0!=(0|g),h?(l=t,m=u,q=0|f[m>>2],r=0|kl(l,q),n=r,s=n,o=B,0|s):(i=u,j=0|f[i>>2],k=0|f[j>>2],n=k,s=n,o=B,0|s))}function xl(a,b){a|=0,b|=0;var c=0,d=0,e=0,f=0,g=0,i=0;return i=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),c=a,d=b,e=c,f=d,g=0|Pk(e,37,f),o=i,0|g}function yl(a,b){a|=0,b|=0;var c=0,d=0,e=0,f=0,g=0,i=0;return i=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),c=a,d=b,e=c,f=d,g=0|Pk(e,13,f),o=i,0|g}function zl(a,b){a|=0,b|=0;var c=0,d=0,e=0,f=0,g=0,i=0;return i=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),c=a,d=b,e=c,f=d,g=0|Pk(e,14,f),o=i,0|g}function Al(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,n=0;return n=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),f=a,g=b,h=c,i=f,j=g,k=f,l=h,d=0|Pk(k,l,0),e=0|Pk(i,j,d),o=n,0|e}function Bl(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,r=0;if(r=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),g=a,h=b,i=h,j=0|f[i>>2],k=j,!(39==(0|k)))return void(o=r);m=g,n=h,c=n+4|0,d=0|f[c>>2],e=d,Om(m,e),o=r}function Cl(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,q=0;return q=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),g=a,h=b,i=c,j=g,k=g,l=h,m=i,d=m,e=0|Pk(k,l,d),f=0|Pk(j,77,e),o=q,0|f}function Dl(a,b){a|=0,b|=0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0;return j=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),c=a,d=b,e=c,f=d,g=f,h=0|Pk(e,78,g),o=j,0|h}function El(a,b){a|=0,b|=0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0;return j=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),c=a,d=b,e=c,f=d,g=f,h=0|Al(e,73,g),o=j,0|h}function Fl(a,b){a|=0,b|=0;var c=0,e=0,g=0,h=0,i=0,k=0;return k=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),e=k+4|0,c=a,d[e>>0]=b,g=c,h=0|f[g>>2],i=0|gi(h,e,1),o=k,0|i}function Gl(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,n=0;return n=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),f=a,g=b,h=c,i=f,j=f,k=g,l=h,d=0|Pk(j,k,l),e=0|Pk(i,80,d),o=n,0|e}function Hl(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,n=0;return n=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),f=a,g=b,h=c,i=f,j=f,k=g,l=h,d=0|Pk(j,k,l),e=0|Pk(i,81,d),o=n,0|e}function Il(a,b,c,d){a|=0,b|=0,c|=0,d|=0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,w=0;return w=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),n=a,q=b,r=c,s=d,t=n,u=q,e=n,f=r,g=0|Nm(e,f),h=n,i=n,j=s,k=0|Ok(i,j),l=0|Ok(h,k),m=0|il(t,u,g,l),o=w,0|m}function Jl(a,b){a|=0,b|=0;var c=0,d=0,e=0,f=0,g=0,i=0;return i=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),c=a,d=b,e=c,f=d,g=0|Pk(e,36,f),o=i,0|g}function Kl(a,b){a|=0,b|=0;var c=0,d=0,e=0,f=0,g=0,i=0;return i=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),c=a,d=b,e=c,f=d,g=0|Pk(e,69,f),o=i,0|g}function Ll(a,b){a|=0,b|=0;var c=0,d=0,e=0,f=0,g=0,i=0;return i=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),c=a,d=b,e=c,f=d,g=0|Pk(e,66,f),o=i,0|g}function Ml(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,V=0;return V=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),A=a,L=b,P=c,R=L,S=0|f[R>>2],32==(0|S)||(d=L,e=0|f[d>>2],33==(0|e))?(h=L,i=h+4|0,j=0|f[i>>2],k=0!=(0|j),l=A,k?(s=L,t=s+4|0,u=0|f[t>>2],v=P,tl(l,u,v),void(o=V)):(m=P,n=0|Pk(l,0,m),q=L,r=q+4|0,f[r>>2]=n,void(o=V))):(w=L,x=w+4|0,y=0|f[x>>2],z=y+4|0,B=0|f[z>>2],C=B+4|0,D=0|f[C>>2],Q=D,E=Q,F=0|f[E>>2],G=0!=(0|F),H=A,G?(M=Q,N=0|f[M>>2],O=P,tl(H,N,O),void(o=V)):(I=P,J=0|Pk(H,0,I),K=Q,f[K>>2]=J,void(o=V)))}function Nl(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,n=0;return n=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),f=a,g=b,h=c,i=f,j=f,k=0|Jm(j),l=g,d=h,e=0|Mm(i,53,k,l,d),o=n,0|e}function Ol(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,B=0;for(B=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),t=a,u=b,v=c,y=t,z=u,d=0|Al(y,6,z),w=d,e=w,x=e;;){if(g=x,h=g+4|0,i=0|f[h>>2],!(0!=(0|i)))break;k=x,l=k+4|0,m=0|f[l>>2],x=m}return n=v,q=x,r=q+4|0,f[r>>2]=n,s=w,o=B,0|s}function Pl(a,b,c,d){a|=0,b|=0,c|=0,d|=0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,q=0;return q=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),h=a,i=b,j=c,k=d,l=h,m=i,e=j,f=k,g=0|Mm(l,12,m,e,f),o=q,0|g}function Ql(a,b,c,d){a|=0,b|=0,c|=0,d|=0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,u=0;return u=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),l=a,m=b,n=c,q=d,r=l,s=m,e=n,f=l,g=l,h=0|Jm(g),i=q,j=0|Pk(f,h,i),k=0|Mm(r,74,s,e,j),o=u,0|k}function Rl(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,r=0;return r=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),h=a,i=b,j=c,k=h,l=i,m=h,n=h,d=0|Jm(n),e=j,f=0|Pk(m,d,e),g=0|dl(k,76,l,f),o=r,0|g}function Sl(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,r=0;return r=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),h=a,i=b,j=c,k=h,l=i,m=h,n=h,d=0|Jm(n),e=j,f=0|Pk(m,d,e),g=0|dl(k,75,l,f),o=r,0|g}function Tl(a,b,c,d){a|=0,b|=0,c|=0,d|=0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,t=0;return t=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),k=a,l=b,m=c,n=d,q=k,r=l,e=r,f=k,g=0|Jm(f),h=m,i=n,j=0|Lm(q,70,e,g,h,i),o=t,0|j}function Ul(a,b,c,d,e){a|=0,b|=0,c|=0,d|=0,e|=0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,w=0;return w=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),q=a,r=b,s=c,t=d,u=e,f=q,g=r,h=s,i=h,j=q,k=0|Jm(j),l=t,m=u,n=0|Km(f,71,g,i,k,l,m),o=w,0|n}function Vl(a){a|=0;var b=0,c=0,d=0,f=0;return f=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),b=a,c=b,d=0|Ok(c,15),o=f,0|d}function Wl(a){a|=0;var b=0,c=0,d=0,f=0;return f=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),b=a,c=b,d=0|Ok(c,16),o=f,0|d}function Xl(a,b){a|=0,b|=0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0;return j=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),c=a,d=b,e=c,f=d,g=f,h=0|Pk(e,63,g),o=j,0|h}function Yl(a,b,c,d,e,f){a|=0,b|=0,c|=0,d|=0,e|=0,f|=0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,I=0;return I=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),D=a,E=b,F=c,G=d,g=e,h=f,j=D,k=g,l=h,m=l,n=0|Pk(j,k,m),i=n,q=D,r=G,s=r,t=i,u=0|Pk(q,s,t),i=u,v=D,w=F,x=i,y=0|Pk(v,w,x),i=y,z=D,A=E,B=i,C=0|Pk(z,A,B),o=I,0|C}function Zl(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,z=0;if(z=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),n=a,r=b,s=n,t=s+76|0,u=0|f[t>>2],!(0!=(0|u)))return void(o=z);w=n,x=n,c=x+76|0,d=0|f[c>>2],e=0|f[d>>2],g=n,h=r,i=h,j=0|Ok(g,i),k=0|Tk(w,e,j),l=n,m=l+76|0,q=0|f[m>>2],f[q>>2]=k,o=z}function $l(a,b){a|=0,b|=0;var f=0;f=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),o=f}function _l(a){a|=0;var b=0,c=0,d=0,f=0;return f=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),b=a,c=b,d=0|Ok(c,33),o=f,0|d}function am(a,b){a|=0,b|=0;var c=0,d=0,e=0,f=0,g=0,i=0;return i=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),c=a,d=b,e=c,f=d,g=0|Pk(e,56,f),o=i,0|g}function bm(a){a|=0;var b=0,c=0,d=0,f=0;return f=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),b=a,c=b,d=0|Pk(c,100,0),o=f,0|d}function cm(a,b){a|=0,b|=0;var c=0,d=0,e=0,f=0,g=0,i=0;return i=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),c=a,d=b,e=c,f=d,g=0|Pk(e,58,f),o=i,0|g}function dm(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,n=0;return n=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),f=a,g=b,h=c,i=f,j=f,k=g,l=h,d=0|Pk(j,k,l),e=0|Pk(i,60,d),o=n,0|e}function em(a){a|=0;var b=0,c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,s=0;return s=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),h=a,j=h,k=j+1120|0,l=0|f[k>>2],i=l,m=i,n=0==(0|m),n?(b=0,g=b,o=s,0|g):(q=i,c=0|f[q>>2],d=c+4|0,e=0|f[d>>2],b=e,g=b,o=s,0|g)}function fm(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,t=0;return t=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),j=a,k=b,l=c,m=j,n=j,q=j,r=k,d=l,e=0|Em(q,r,d),f=l,g=f,h=0|Pk(n,e,g),i=0|Pk(m,55,h),o=t,0|i}function gm(a){a|=0;var b=0,c=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,T=0;return T=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),b=a,q=b,B=q+1120|0,M=0|f[B>>2],N=M+4|0,O=0|f[N>>2],P=b,Q=P+1120|0,f[Q>>2]=O,R=b,c=R+1120|0,e=0|f[c>>2],g=0==(0|e),h=b,g?(i=h+40|0,f[i>>2]=0,j=b,k=j+72|0,l=0|d[k>>0],m=-2&l,n=1|m,d[k>>0]=n,r=b,Im(r),s=b,t=s+1124|0,u=0|f[t>>2],v=b,w=v+44|0,f[w>>2]=u,x=b,y=x+1124|0,f[y>>2]=0,z=b,A=z+1128|0,C=0|d[A>>0],D=-2&C,E=1|D,d[A>>0]=E,void(o=T)):(F=0|em(h),G=F+4|0,H=0|f[G>>2],I=H,J=b,K=J+44|0,L=0|f[K>>2],f[L>>2]=I,void(o=T))}function hm(a){a|=0;var b=0,c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,$a=0,_a=0,ab=0,bb=0,db=0;if(db=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),d=a,aa=d,ma=aa+1116|0,xa=0|f[ma>>2],0==(0|xa))return void(o=db);Ta=d,e=Ta+1120|0,k=0|f[e>>2],l=0==(0|k),m=d,n=m+1116|0,q=0|f[n>>2];do{if(l){if(r=d,s=r+1120|0,f[s>>2]=q,t=d,u=t+44|0,w=0|f[u>>2],x=d,y=x+1124|0,f[y>>2]=w,z=d,A=d,B=0|em(A),C=B+4|0,D=0|f[C>>2],E=0|Hm(z,D,0,0),F=d,H=F+44|0,f[H>>2]=E,I=d,J=I+1112|0,K=0|f[J>>2],v=K,L=v,!(0!=(0|L))){$=d,_=$+1120|0,ba=0|f[_>>2],da=d,ea=da+1112|0,f[ea>>2]=ba;break}for(;;){if(N=v,O=N+4|0,P=0|f[O>>2],!(0!=(0|P)))break;S=v,T=S+4|0,U=0|f[T>>2],v=U}V=d,W=V+1120|0,X=0|f[W>>2],Y=v,Z=Y+4|0,f[Z>>2]=X}else{for(R=q;;){if(fa=R,ga=fa+4|0,ha=0|f[ga>>2],!(0!=(0|ha)))break;ja=R,ka=ja+4|0,la=0|f[ka>>2],R=la}if(na=d,oa=na+1112|0,pa=0|f[oa>>2],G=pa,qa=G,ra=d,sa=ra+1120|0,ta=0|f[sa>>2],(0|qa)==(0|ta))va=G,wa=R,ya=wa+4|0,f[ya>>2]=va,za=d,Aa=za+1116|0,Ba=0|f[Aa>>2],Ca=d,Da=Ca+1112|0,f[Da>>2]=Ba,Ea=d,Fa=Ea+1116|0,Ga=0|f[Fa>>2],Ha=d,b=Ga,c=Ha;else{for(;;){if(Ja=G,Ka=Ja+4|0,La=0|f[Ka>>2],Ma=d,Na=Ma+1120|0,Oa=0|f[Na>>2],Pa=(0|La)!=(0|Oa),Qa=G,Ra=Qa+4|0,Sa=0|f[Ra>>2],!Pa)break;G=Sa}Ua=R,Va=Ua+4|0,f[Va>>2]=Sa,Wa=d,Xa=Wa+1116|0,Ya=0|f[Xa>>2],Za=G,$a=Za+4|0,f[$a>>2]=Ya,_a=d,ab=_a+1116|0,bb=0|f[ab>>2],g=d,b=bb,c=g}h=c+1120|0,f[h>>2]=b}}while(0);i=d,j=i+1116|0,f[j>>2]=0,o=db}function im(a,b){a|=0,b|=0;var c=0,d=0,e=0,f=0,g=0,i=0;return i=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),c=a,d=b,e=c,f=d,g=0|Pk(e,101,f),o=i,0|g}function jm(a,b){a|=0,b|=0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0;return j=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),c=a,d=b,e=c,f=d,g=f,h=0|Pk(e,54,g),o=j,0|h}function km(a,b){a|=0,b|=0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,k=0;return k=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),c=a,d=b,e=c,f=c,g=d,h=0|am(f,g),i=0|Pk(e,97,h),o=k,0|i}function lm(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,z=0;return z=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),n=a,r=b,u=r,v=u+4|0,w=0|f[v>>2],x=0|f[w>>2],s=x,c=r,d=c+4|0,e=0|f[d>>2],g=e+4|0,h=0|f[g>>2],i=h,t=i,j=n,k=0|f[j>>2],l=s,m=t,q=0|gi(k,l,m),o=z,0|q}function mm(a,b){a|=0,b|=0;var c=0,d=0,e=0,f=0,g=0,i=0;return i=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),c=a,d=b,e=c,f=d,g=0|Pk(e,102,f),o=i,0|g}function nm(a,b){a|=0,b|=0;var c=0,d=0,e=0,f=0,g=0,i=0;return i=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),c=a,d=b,e=c,f=d,g=0|Pk(e,52,f),o=i,0|g}function om(a,b){a|=0,b|=0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0;return j=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),c=a,d=b,e=c,f=d,g=f,h=0|Pk(e,39,g),o=j,0|h}function pm(a,b){a|=0,b|=0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0;return j=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),c=a,d=b,e=c,f=d,g=f,h=0|Pk(e,42,g),o=j,0|h}function qm(a,b){a|=0,b|=0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0;return j=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),c=a,d=b,e=c,f=d,g=f,h=0|Pk(e,41,g),o=j,0|h}function rm(a,b){a|=0,b|=0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0;return j=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),c=a,d=b,e=c,f=d,g=f,h=0|Pk(e,44,g),o=j,0|h}function sm(a,b){a|=0,b|=0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0;return j=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),c=a,d=b,e=c,f=d,g=f,h=0|Pk(e,43,g),o=j,0|h}function tm(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,G=0;return G=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),y=a,z=b,B=z,C=0|f[B>>2],D=C,39==(0|D)&&(c=y,d=z,e=d+4|0,g=0|f[e>>2],h=g,(i=0|Fm(c,h))<<24>>24==0)?(k=y,l=z,m=l+4|0,q=0|f[m>>2],r=q,s=0|sl(k,r,0),A=s,t=y,u=z,Gm(t,u),v=A,n=v,x=n,o=G,0|x):(w=z,n=w,x=n,o=G,0|x)}function um(a){a|=0;var b=0,c=0,d=0,f=0;return f=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),b=a,c=b,d=0|Ok(c,85),o=f,0|d}function vm(a){a|=0;var b=0,c=0,d=0,f=0;return f=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),b=a,c=b,d=0|Ok(c,87),o=f,0|d}function wm(a){a|=0;var b=0,c=0,d=0,f=0;return f=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),b=a,c=b,d=0|Ok(c,88),o=f,0|d}function xm(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,q=0;return q=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),g=a,h=b,i=c,j=g,k=g,l=h,m=0|Dm(k,l),d=i,e=d,f=0|dl(j,50,m,e),o=q,0|f}function ym(a,b,c){a|=0,b|=0,c|=0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,T=0,U=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,$a=0,_a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,$b=0,_b=0;if(_b=o,o=o+160|0,(0|o)>=(0|p)&&ca(160),P=_b+40|0,oa=_b+100|0,Ma=a,Xa=b,gb=c,wa=Xa,xa=3344+(wa<<1)|0,ya=0|e[xa>>1],za=ya<<16>>16,rb=za,Aa=rb,Ca=-771<(0|Aa),Da=rb,Ea=(0|Da)<=10639,!(Ca&Ea))return Ba=0,ma=Ba,o=_b,0|ma;for(Fa=gb,Ga=Fa>>>0<=372,Ga?(Ha=gb,Ia=58442+Ha|0,Ja=0|d[Ia>>0],Ka=255&Ja,La=Ka):La=2,Cb=La,Na=Cb,Oa=504+(Na<<2)|0,Pa=0|f[Oa>>2],Qa=0|Am(0,Pa),Nb=Qa,Ra=Nb,g=Ra,E=0,pa=60021,Sa=rb,Ta=(0|Sa)<0,Ua=rb,Va=0-Ua|0,Wa=Ta?Va:0,qa=Wa,Ya=rb,Za=10639-Ya|0,$a=Za+1|0,ra=$a,_a=ra,ab=(0|_a)<144,bb=ra,cb=ab?bb:144,sa=cb,ta=1,db=Cb,eb=504+(db<<2)|0,fb=0|f[eb>>2],f[P>>2]=fb,hb=0|Bm(oa,60036),ka=hb,ib=qa,$=ib;;){if(jb=$,kb=sa,!((0|jb)<(0|kb)))break;if(mb=$,nb=rb,ob=mb+nb|0,pb=5280+(ob<<1)|0,qb=0|e[pb>>1],sb=qb<<16>>16,tb=$,ub=(0|sb)==(0|tb),vb=$,wb=1!=(0|vb),ub&wb){if(xb=ta,5==(0|xb)){$b=9;break}Bb=$,Db=504+(Bb<<2)|0,Eb=0|f[Db>>2],Fb=ta,Gb=Fb+1|0,ta=Gb,Hb=P+(Fb<<2)|0,f[Hb>>2]=Eb,Ib=g,Jb=$,Kb=504+(Jb<<2)|0,Lb=0|f[Kb>>2],Mb=0|Am(0,Lb),Ob=Ib+Mb|0,t=Ob,Pb=t,Qb=g,Rb=Pb>>>0<Qb>>>0,Sb=1&Rb,Tb=E,Ub=Tb|Sb,E=Ub,Vb=t,g=Vb,Wb=ka,Xb=pa,h=0|Bm(Wb,Xb),ka=h,pa=60064}i=$,j=i+1|0,$=j}if(9==(0|$b)&&(ta=1,zb=Nb,g=zb,Ab=oa+27|0,d[Ab>>0]=0),na=oa,k=g,l=na,m=0|Cm(l),n=k+m|0,t=n,q=t,r=g,s=q>>>0<r>>>0,u=1&s,v=E,w=v|u,E=w,x=t,g=x,y=E,0!=(0|y))return Ba=-1,ma=Ba,o=_b,0|ma;A=Ma,B=0!=(0|A);a:if(B)for(C=Ma,ua=C,va=0;;){if(D=na,F=0|d[D>>0],G=ua,d[G>>0]=F,H=F<<24>>24,!(0!=(0|H)))break a;J=ua,K=0|d[J>>0],L=K<<24>>24,M=37==(0|L),M&&(N=na,O=N+1|0,Q=0|d[O>>0],R=Q<<24>>24,115==(0|R)&&(T=va,U=ta,(0|T)<(0|U)))?(W=ua,X=va,Y=X+1|0,va=Y,Z=P+(X<<2)|0,_=0|f[Z>>2],aa=0|Am(W,_),ba=ua,da=ba+aa|0,ua=da,ea=na,fa=ea+2|0,na=fa):(ga=ua,ha=ga+1|0,ua=ha,ia=na,ja=ia+1|0,na=ja)}return la=g,Ba=la,ma=Ba,o=_b,0|ma}function zm(a,b,c,d){a|=0,b|=0,c|=0,d|=0;var e=0,i=0,j=0,l=0;l=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),e=a,i=e,j=0!=(0|i),j||(e=60012),o=l}function Am(a,b){a|=0,b|=0;var c=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,$=0;$=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),A=a,L=b,W=L,X=0|d[W>>0],Y=X<<24>>24,c=34==(0|Y);a:if(c){U=0,e=L,V=e;b:for(;;){switch(f=V,g=f+1|0,V=g,h=0|d[g>>0],0|h<<24>>24){case 44:case 39:break a;case 34:break b;case 92:if(j=V,k=j+1|0,V=k,l=0|d[k>>0],m=l<<24>>24,92!=(0|m))break a}r=A,s=0!=(0|r),s&&(t=V,u=0|d[t>>0],v=A,w=U,x=v+w|0,d[x>>0]=u),y=U,z=y+1|0,U=z}return B=A,C=0!=(0|B),C&&(D=A,E=U,F=D+E|0,d[F>>0]=0),G=U,n=G,T=n,o=$,0|T}return H=A,I=0!=(0|H),I?(M=A,N=L,O=0|Bm(M,N),P=A,Q=O,R=P,S=Q-R|0,n=S,T=n,o=$,0|T):(J=L,K=0|Cm(J),n=K,T=n,o=$,0|T)}function Bm(a,b){a|=0,b|=0;var c=0,e=0,f=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,v=0;for(v=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),k=a,l=b,q=k,m=q,r=l,n=r;;)if(s=n,t=s+1|0,n=t,c=0|d[s>>0],e=m,f=e+1|0,m=f,d[e>>0]=c,g=c<<24>>24,!(0!=(0|g)))break;return i=m,j=i+-1|0,o=v,0|j}function Cm(a){a|=0;var b=0,c=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0;for(m=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),b=a,c=0;;){if(e=b,f=c,g=e+f|0,h=0|d[g>>0],i=h<<24>>24!=0,j=c,!i)break;k=j+1|0,c=k}return o=m,0|j}function Dm(a,b){a|=0,b|=0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,k=0;return k=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),c=a,d=b,e=c,f=d,g=d,h=0|$v(g),i=0|Em(e,f,h),o=k,0|i}function Em(a,b,c){a|=0,b|=0,c|=0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,w=0;return w=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),m=a,n=b,q=c,s=m,t=q,u=t+1|0,e=0|Lk(s,u),r=e,f=r,g=n,h=q,$w(0|f,0|g,0|h),i=r,j=q,k=i+j|0,d[k>>0]=0,l=r,o=w,0|l}function Fm(a,b){a|=0,b|=0;var c=0,e=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;G=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),y=a,z=b,C=y,D=C+76|0,E=0|f[D>>2],A=E;a:for(;;){if(c=A,!(0!=(0|c))){F=9;break}for(e=A,g=0|f[e>>2],B=g;;){if(h=B,!(0!=(0|h)))break;if(j=B,k=0|f[j>>2],l=k,m=z,(0|l)==(0|m)){F=6;break a}r=B,s=r+4|0,t=0|f[s>>2],B=t}u=A,v=u+4|0,w=0|f[v>>2],A=w}return 6==(0|F)?(n=1,x=n,o=G,0|x):9==(0|F)?(n=0,x=n,o=G,0|x):0}function Gm(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,q=0;q=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),e=a,g=b,h=e,i=h+8|0,j=0|f[i>>2],k=g,l=k+4|0,f[l>>2]=j,m=g,c=e,d=c+8|0,f[d>>2]=m,o=q}function Hm(a,b,c,d){a|=0,b|=0,c|=0,d|=0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,x=0;return x=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),q=a,r=b,s=c,t=d,u=q,v=r,e=v,f=q,g=q,h=t,i=h,j=s,k=j,l=0|Pk(g,i,k),m=0|Pk(f,0,l),n=0|Pk(u,e,m),o=x,0|n}function Im(a){a|=0;var b=0,c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,A=0;A=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),b=a,n=b,s=b,t=s+44|0,u=0|f[t>>2],v=u+4|0,w=0|f[v>>2],x=w+4|0,y=0|f[x>>2],Gm(n,y),c=b,d=b,e=d+44|0,g=0|f[e>>2],h=g+4|0,i=0|f[h>>2],Gm(c,i),j=b,k=b,l=k+44|0,m=0|f[l>>2],Gm(j,m),q=b,r=q+44|0,f[r>>2]=0,o=A}function Jm(a){a|=0;var b=0,c=0,d=0,e=0,g=0,i=0,j=0,k=0,l=0,n=0;return n=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),b=a,d=b,e=d+76|0,g=0|f[e>>2],0!=(0|g)?(i=b,j=i+76|0,k=0|f[j>>2],l=0|f[k>>2],c=l,o=n,0|c):(c=0,o=n,0|c)}function Km(a,b,c,d,e,f,g){a|=0,b|=0,c|=0,d|=0,e|=0,f|=0,g|=0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,J=0;return J=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),F=a,G=b,H=c,h=d,i=e,j=f,k=g,l=F,m=G,n=F,q=H,r=F,s=h,t=F,u=i,v=F,w=j,x=F,y=k,z=0|Pk(x,y,0),A=0|Pk(v,w,z),B=0|Pk(t,u,A),C=0|Pk(r,s,B),D=0|Pk(n,q,C),E=0|Pk(l,m,D),o=J,0|E}function Lm(a,b,c,d,e,f){a|=0,b|=0,c|=0,d|=0,e|=0,f|=0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,E=0;return E=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),z=a,A=b,B=c,C=d,g=e,h=f,i=z,j=A,k=z,l=B,m=z,n=C,q=z,r=g,s=z,t=h,u=0|Pk(s,t,0),v=0|Pk(q,r,u),w=0|Pk(m,n,v),x=0|Pk(k,l,w),y=0|Pk(i,j,x),o=E,0|y}function Mm(a,b,c,d,e){a|=0,b|=0,c|=0,d|=0,e|=0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,z=0;return z=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),t=a,u=b,v=c,w=d,x=e,f=t,g=u,h=t,i=v,j=t,k=w,l=t,m=x,n=0|Pk(l,m,0),q=0|Pk(j,k,n),r=0|Pk(h,i,q),s=0|Pk(f,g,r),o=z,0|s}function Nm(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,k=0;return k=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),c=a,d=b,e=c,g=0|f[e>>2],h=d,i=0|ki(g,h),o=k,0|i}function Om(a,b){a|=0,b|=0;var c=0,d=0,e=0,f=0,g=0,i=0,j=0,l=0;if(l=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),c=a,d=b,e=c,f=d,g=0|Fm(e,f),g<<24>>24!=0)return void(o=l);i=c,j=d,Zl(i,j),o=l}function Pm(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,n=0;n=o,o=o+272|0,(0|o)>=(0|p)&&ca(272),l=n,h=n+16|0,d=a,e=b,g=c,i=e,j=g,f[l>>2]=j,bw(h,256,i,l),k=d,Kk(k,h),o=n}function Qm(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,i=0;i=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),d=i,c=b,e=d+4|0,f[e>>2]=3,g=c,f[d>>2]=g,f[a>>2]=0|f[d>>2],f[a+4>>2]=0|f[d+4>>2],o=i}function Rm(a){a|=0;var b=0,c=0,e=0,h=0,i=0,j=0,k=0,l=0,n=0,r=0,s=0,t=0,u=0,v=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,$a=0,_a=0,ab=0,bb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,$b=0,_b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,rc=0,sc=0,tc=0,vc=0,wc=0,xc=0,yc=0,Ac=0,Bc=0,Cc=0,Ec=0,Fc=0,Gc=0,Hc=0,Jc=0,Kc=0,Lc=0,Mc=0,Nc=0,Oc=0,Pc=0,Qc=0,Rc=0,Sc=0,Tc=0,Vc=0,Wc=0,Xc=0,Zc=0,$c=0,_c=0,ad=0,bd=0,cd=0,dd=0,ed=0,fd=0,hd=0,id=0,jd=0,kd=0,ld=0,md=0,nd=0,od=0,pd=0,qd=0,rd=0,sd=0,ud=0,vd=0,wd=0,xd=0,zd=0,Ad=0,Bd=0,Dd=0,Ed=0,Fd=0,Hd=0,Id=0,Jd=0,Kd=0,Ld=0,Md=0,Nd=0,Od=0,Pd=0,Qd=0,Rd=0,Sd=0,Td=0,Ud=0,Vd=0,Wd=0,Xd=0,Yd=0,Zd=0,$d=0,_d=0,ae=0,be=0,ce=0,de=0,ee=0,fe=0,ge=0,he=0,ie=0,je=0,ke=0,me=0,ne=0,oe=0,pe=0,qe=0,re=0,se=0,te=0,ue=0,ve=0,we=0,xe=0,ye=0,ze=0,Ae=0,Be=0,Ce=0,De=0,Ee=0,Fe=0,Ge=0,He=0,Ie=0,Je=0,Ke=0,Le=0,Me=0,Ne=0,Oe=0,Pe=0,Qe=0,Re=0,Se=0,Te=0,Ue=0,Ve=0,We=0,Xe=0,Ye=0,Ze=0,$e=0,_e=0,af=0,bf=0,cf=0,df=0,ef=0,ff=0,gf=0,hf=0,jf=0,kf=0,lf=0,mf=0,nf=0,of=0,pf=0,qf=0,rf=0,sf=0,tf=0,uf=0,vf=0,wf=0,xf=0,yf=0,zf=0,Af=0,Bf=0,Cf=0,Df=0,Ef=0,Gf=0,Hf=0,If=0,Kf=0,Lf=0,Mf=0,Nf=0,Pf=0,Qf=0,Rf=0,Tf=0,Uf=0,Vf=0,Wf=0,Xf=0,Yf=0,Zf=0,$f=0,_f=0,ag=0,bg=0,cg=0,dg=0,eg=0,fg=0,gg=0,hg=0,ig=0,jg=0,kg=0,lg=0,mg=0,ng=0,og=0,pg=0,qg=0,rg=0,sg=0,tg=0,ug=0,vg=0,wg=0,xg=0,yg=0,zg=0,Ag=0,Cg=0,Dg=0,Eg=0,Fg=0,Hg=0,Ig=0,Jg=0,Kg=0,Lg=0,Mg=0,Ng=0,Og=0,Pg=0,Qg=0,Rg=0,Sg=0,Tg=0,Ug=0,Vg=0,Wg=0,Xg=0,Yg=0,Zg=0,$g=0,ah=0,bh=0,ch=0,eh=0,fh=0,gh=0,ih=0,jh=0,kh=0,lh=0,nh=0,oh=0,ph=0,qh=0,rh=0,sh=0,th=0,uh=0,vh=0,wh=0,xh=0,yh=0,zh=0,Ah=0,Bh=0,Ch=0,Dh=0,Eh=0,Fh=0,Gh=0,Hh=0,Ih=0,Jh=0,Kh=0,Lh=0,Mh=0,Oh=0,Ph=0,Qh=0,Rh=0,Sh=0,Th=0,Uh=0,Wh=0,Xh=0,Yh=0,Zh=0,$h=0,_h=0,ai=0,bi=0,ci=0,di=0,ei=0,fi=0,gi=0,hi=0,ii=0,ji=0,ki=0,li=0,mi=0,ni=0,oi=0,pi=0,qi=0,ri=0,si=0,ti=0,ui=0,vi=0,wi=0,xi=0,yi=0,Ai=0,Bi=0,Ci=0,Ei=0,Fi=0,Gi=0,Hi=0,Ji=0,Ki=0,Li=0,Ni=0,Oi=0,Pi=0,Qi=0,Ri=0,Si=0,Ti=0,Ui=0,Vi=0,Wi=0,Xi=0,Yi=0,Zi=0,$i=0,_i=0,aj=0,bj=0,cj=0,dj=0,ej=0,fj=0,gj=0,hj=0,ij=0,jj=0,kj=0,lj=0,mj=0,nj=0,oj=0,pj=0,qj=0,rj=0,sj=0,tj=0,uj=0,xj=0,yj=0,zj=0,Bj=0,Cj=0,Dj=0,Fj=0,Gj=0,Hj=0,Ij=0,Jj=0,Kj=0,Lj=0,Mj=0,Oj=0,Pj=0,Rj=0,Sj=0,Tj=0,Uj=0,Vj=0,Wj=0,Yj=0,Zj=0,$j=0,_j=0,ak=0,bk=0,ck=0,dk=0,ek=0,fk=0,gk=0,ik=0,kk=0,mk=0,ok=0,pk=0,qk=0,rk=0,sk=0,tk=0,uk=0,vk=0,wk=0,xk=0,zk=0,Ak=0,Bk=0,Ck=0,Dk=0,Ek=0,Fk=0,Gk=0,Hk=0,Ik=0,Jk=0,Lk=0,Mk=0,Nk=0,Ok=0,Pk=0,Qk=0,Rk=0,Sk=0,Tk=0,Uk=0,Vk=0,Wk=0,Xk=0,Yk=0,Zk=0,$k=0,_k=0,al=0,bl=0,cl=0,dl=0,el=0,fl=0,gl=0,il=0,jl=0,kl=0,ll=0,ml=0,nl=0,ol=0,pl=0,rl=0,sl=0,tl=0,ul=0,vl=0,wl=0,xl=0,yl=0,zl=0,Al=0,Bl=0,Cl=0,Dl=0,El=0,Gl=0,Hl=0,Il=0,Jl=0,Kl=0,Ll=0,Ml=0,Nl=0,Ol=0,Pl=0,Ql=0,Rl=0,Sl=0,Tl=0,Ul=0,Vl=0,Wl=0,Xl=0,Yl=0,Zl=0,_l=0,am=0,bm=0,cm=0,dm=0,em=0,gm=0,im=0,km=0,lm=0,mm=0,nm=0,om=0,pm=0,qm=0,rm=0,sm=0,tm=0,um=0,vm=0,wm=0,zm=0,Am=0,Bm=0,Cm=0,Dm=0,Em=0,Fm=0,Gm=0,Im=0,Jm=0,Km=0,Mm=0,Om=0,Qm=0,Rm=0,on=0,pn=0,qn=0,rn=0,sn=0,tn=0,un=0,vn=0,wn=0,xn=0,yn=0,zn=0,An=0,Bn=0,Dn=0,En=0,Fn=0,Gn=0,Hn=0,In=0,Jn=0,Kn=0,Ln=0,Mn=0,Nn=0,On=0,Pn=0,Qn=0,Rn=0,Sn=0,Tn=0,Un=0,Vn=0,Wn=0,Xn=0,Yn=0,Zn=0,$n=0,_n=0,ao=0,bo=0,co=0,eo=0,fo=0,go=0,ho=0,io=0,jo=0,ko=0,lo=0,mo=0,no=0,oo=0,qo=0,ro=0,to=0,uo=0,vo=0,wo=0,yo=0,zo=0,Ao=0,Bo=0,Co=0,Do=0,Eo=0,Fo=0,Go=0,Ho=0,Io=0,Jo=0,Ko=0,Lo=0,Mo=0,No=0,Po=0,Qo=0,Ro=0,So=0,To=0,Uo=0,Vo=0,Wo=0,Xo=0,Yo=0,Zo=0,$o=0,_o=0,ap=0,bp=0,cp=0,dp=0,ep=0,fp=0,gp=0,hp=0,ip=0,jp=0,kp=0,lp=0,np=0,op=0,pp=0,qp=0,rp=0,sp=0,tp=0,vp=0,wp=0,xp=0,yp=0,zp=0,Ap=0,Bp=0,Cp=0,Dp=0,Ep=0,Gp=0,Hp=0,Ip=0,Jp=0,Kp=0,Lp=0,Mp=0,Np=0,Op=0,Pp=0,Qp=0,Rp=0,Sp=0,Tp=0,Up=0,Vp=0,Xp=0,Yp=0,Zp=0,$p=0,_p=0,aq=0,bq=0,cq=0,dq=0,eq=0,fq=0,gq=0,hq=0,iq=0,jq=0,kq=0,lq=0,mq=0,oq=0,pq=0,qq=0,sq=0,tq=0,uq=0,vq=0,wq=0,xq=0,yq=0,zq=0,Bq=0,Dq=0,Eq=0,Gq=0,Hq=0,Iq=0,Jq=0,Kq=0,Lq=0,Mq=0,Nq=0,Oq=0,Pq=0,Rq=0,Sq=0,Tq=0,Uq=0,Vq=0,Wq=0,Xq=0,Yq=0,Zq=0,$q=0,_q=0,ar=0,br=0,cr=0,er=0,fr=0,gr=0,hr=0,ir=0,jr=0,kr=0,lr=0,mr=0,nr=0,or=0,pr=0,qr=0,rr=0,sr=0,tr=0,ur=0,vr=0,wr=0,xr=0,yr=0,Ar=0,Br=0,Cr=0,Dr=0,Er=0,Gr=0,Hr=0,Ir=0,Jr=0,Kr=0,Lr=0,Mr=0,Nr=0,Or=0,Pr=0,Rr=0,Sr=0,Ur=0,Vr=0,Wr=0,Yr=0,Zr=0,$r=0,as=0,bs=0,cs=0,ds=0,es=0,fs=0,gs=0,is=0,js=0,ks=0,ls=0,ms=0,os=0,ps=0,qs=0,rs=0,ss=0,ts=0,us=0,vs=0,ws=0,xs=0,ys=0,zs=0,As=0,Bs=0,Cs=0,Es=0,Fs=0,Gs=0,Is=0,Js=0,Ks=0,Ms=0,Ns=0,Os=0,Ps=0,Qs=0,Rs=0,Ss=0,Ts=0,Us=0,Ws=0,Xs=0,Ys=0,Zs=0,$s=0,at=0,bt=0,ct=0,dt=0,et=0,ft=0,gt=0,it=0,jt=0,kt=0,lt=0,mt=0,nt=0,ot=0,pt=0,qt=0,rt=0,st=0,tt=0,ut=0,vt=0,wt=0,xt=0,yt=0,zt=0,At=0,Bt=0,Ct=0,Dt=0,Et=0,Ft=0,Gt=0,Ht=0,It=0,Jt=0,Kt=0,Lt=0,Nt=0,Ot=0,Pt=0,Qt=0,Rt=0,St=0,Tt=0,Ut=0,Vt=0,Wt=0,Xt=0,Zt=0,$t=0,_t=0,bu=0,cu=0,du=0,eu=0,fu=0,gu=0,hu=0,ju=0,ku=0,lu=0,mu=0,nu=0,ou=0,pu=0,qu=0,ru=0,su=0,tu=0,vu=0,wu=0,xu=0,yu=0,zu=0,Au=0,Bu=0,Cu=0,Du=0,Eu=0,Fu=0,Gu=0,Hu=0,Iu=0,Ju=0,Ku=0,Lu=0,Mu=0,Nu=0,Ou=0,Pu=0,Qu=0,Su=0,Tu=0,Uu=0,Vu=0,Wu=0,Yu=0,Zu=0,$u=0,_u=0,av=0,bv=0,cv=0,dv=0,gv=0,hv=0,jv=0,lv=0,mv=0,nv=0,ov=0,qv=0,rv=0,sv=0,uv=0,vv=0,wv=0,xv=0,zv=0,Bv=0,Cv=0,Dv=0,Fv=0,Gv=0,Hv=0,Jv=0,Kv=0,Lv=0,Mv=0,Ov=0,Qv=0,Rv=0,Sv=0,Tv=0,Uv=0,Vv=0,Wv=0,Xv=0,Yv=0,Zv=0,$v=0,_v=0,aw=0,cw=0,dw=0,ew=0,fw=0,hw=0,iw=0,jw=0,kw=0,lw=0,mw=0,nw=0,ow=0,pw=0,rw=0,sw=0,tw=0,uw=0,vw=0,ww=0,xw=0,yw=0,zw=0,Aw=0,Bw=0,Cw=0,Ew=0,Gw=0,Hw=0,Iw=0,Jw=0,Kw=0,Lw=0,Mw=0,Nw=0,Ow=0,Pw=0,Qw=0,Rw=0,Sw=0,Tw=0,Uw=0,Vw=0,Ww=0,Xw=0,Yw=0,Zw=0,$w=0,_w=0,ax=0,bx=0,cx=0,ex=0,fx=0,gx=0,hx=0,ix=0,jx=0,kx=0,mx=0,nx=0,ox=0,px=0,qx=0,rx=0,sx=0,tx=0,ux=0,vx=0,wx=0,xx=0,zx=0,Ax=0,Bx=0,Cx=0,Ex=0,Fx=0,Gx=0,Ix=0,Jx=0,Kx=0,Lx=0,Nx=0,Ox=0,Px=0,Rx=0,Sx=0,Tx=0,Vx=0,Wx=0,Xx=0,Yx=0,Zx=0,$x=0,_x=0,ay=0,by=0,cy=0,ey=0,fy=0,hy=0,iy=0,jy=0,ky=0,ly=0,my=0,ny=0,oy=0,py=0,qy=0,ry=0,sy=0,ty=0,uy=0,vy=0,wy=0,yy=0,zy=0,Ay=0,By=0,Cy=0,Dy=0,Ey=0,Gy=0,Hy=0,Iy=0,Jy=0,Ky=0,Ly=0,My=0,Ny=0,Oy=0,Py=0,Qy=0,Ry=0,Sy=0,Ty=0,Uy=0,Vy=0,Wy=0,Xy=0,Yy=0,Zy=0,$y=0,_y=0,az=0,bz=0,cz=0,dz=0,ez=0,fz=0,gz=0,hz=0,iz=0,jz=0,kz=0,lz=0,mz=0,oz=0,pz=0,qz=0,rz=0,sz=0,tz=0,uz=0,vz=0,wz=0,xz=0,yz=0,zz=0,Az=0,Bz=0,Cz=0,Dz=0,Ez=0,Fz=0,Gz=0,Hz=0,Iz=0,Jz=0,Kz=0,Lz=0,Mz=0,Nz=0,Oz=0,Pz=0,Qz=0,Rz=0,Sz=0,Tz=0,Uz=0,Vz=0,Wz=0,Xz=0,Yz=0,Zz=0,$z=0,_z=0,aA=0,bA=0,cA=0,dA=0,eA=0,fA=0,gA=0,iA=0,jA=0,kA=0,lA=0,mA=0,oA=0,pA=0,qA=0,sA=0,tA=0,vA=0,wA=0,xA=0,zA=0,AA=0,BA=0,CA=0,DA=0,FA=0,GA=0,HA=0,IA=0,KA=0,LA=0,MA=0,PA=0,QA=0,RA=0,SA=0,TA=0,UA=0,VA=0,WA=0,XA=0,YA=0,ZA=0,$A=0,_A=0,aB=0,bB=0,cB=0,dB=0,eB=0,fB=0,gB=0,hB=0,iB=0,jB=0,kB=0,lB=0,mB=0,nB=0,oB=0,pB=0,qB=0,rB=0,sB=0,tB=0,uB=0,vB=0,wB=0,xB=0,yB=0,zB=0,AB=0,BB=0,CB=0,DB=0,EB=0,FB=0,GB=0,HB=0,IB=0,JB=0,LB=0,MB=0,NB=0,OB=0,PB=0,QB=0,RB=0,SB=0,TB=0,UB=0,VB=0,WB=0,XB=0,YB=0,ZB=0,$B=0,_B=0,aC=0,bC=0,cC=0,dC=0,eC=0,fC=0,gC=0,hC=0,iC=0,jC=0,kC=0,lC=0,mC=0,nC=0,oC=0,pC=0,qC=0,rC=0,sC=0,tC=0,uC=0,vC=0,wC=0,xC=0,yC=0,zC=0,AC=0,BC=0,CC=0,DC=0,FC=0,GC=0,HC=0,IC=0,KC=0,LC=0,MC=0,OC=0,PC=0,QC=0,SC=0,TC=0,UC=0,VC=0,WC=0,XC=0,YC=0,ZC=0,$C=0,_C=0,aD=0,bD=0,cD=0,dD=0,eD=0,fD=0,hD=0,iD=0,jD=0,kD=0,lD=0,mD=0,nD=0,oD=0,pD=0,qD=0,rD=0,sD=0,tD=0,uD=0,vD=0,wD=0,xD=0,yD=0,zD=0,AD=0,BD=0,CD=0,DD=0,ED=0,FD=0,GD=0,HD=0,ID=0,JD=0,KD=0,LD=0,MD=0,ND=0,OD=0,PD=0,QD=0,RD=0,SD=0,TD=0,UD=0,VD=0,WD=0,XD=0,ZD=0,$D=0,_D=0,bE=0,cE=0,dE=0,eE=0,fE=0,gE=0,hE=0,iE=0,jE=0,kE=0,lE=0,mE=0,nE=0,oE=0,pE=0,qE=0,rE=0,sE=0,tE=0,uE=0,vE=0,wE=0,xE=0,yE=0,AE=0,BE=0,CE=0,DE=0,FE=0,GE=0,HE=0,JE=0,KE=0,ME=0,NE=0,OE=0,PE=0,QE=0,RE=0,SE=0,TE=0,UE=0,VE=0,WE=0,XE=0,YE=0,$E=0,_E=0,bF=0,cF=0,dF=0,eF=0,fF=0,gF=0,iF=0,jF=0,lF=0,mF=0,nF=0,oF=0,pF=0,qF=0,rF=0,sF=0,tF=0,uF=0,wF=0,xF=0,yF=0,AF=0,BF=0,CF=0,DF=0,EF=0,FF=0,GF=0,HF=0,JF=0,KF=0,LF=0,NF=0,OF=0,PF=0,QF=0,RF=0,SF=0,TF=0,UF=0,VF=0,WF=0,XF=0,YF=0,ZF=0,$F=0,aG=0,bG=0,cG=0,eG=0,fG=0,gG=0,hG=0,jG=0,kG=0,lG=0,mG=0,nG=0,oG=0,pG=0,qG=0,rG=0,sG=0,tG=0,uG=0,vG=0,wG=0,xG=0,yG=0,AG=0,BG=0,DG=0,EG=0,FG=0,GG=0,HG=0,IG=0,KG=0,LG=0,NG=0,OG=0,PG=0,QG=0,RG=0,SG=0,TG=0,UG=0,VG=0,WG=0,XG=0,YG=0,ZG=0,$G=0,_G=0,aH=0,bH=0,cH=0,dH=0,eH=0,fH=0,hH=0,iH=0,jH=0,kH=0,lH=0,mH=0,nH=0,oH=0,pH=0,qH=0,rH=0,sH=0,tH=0,uH=0,vH=0,wH=0,xH=0,yH=0,zH=0,AH=0,BH=0,CH=0,DH=0,EH=0,FH=0,GH=0,HH=0,IH=0,JH=0,KH=0,LH=0,MH=0,NH=0,QH=0,RH=0,SH=0,UH=0,WH=0,YH=0,ZH=0,$H=0,_H=0,bI=0,cI=0,dI=0,fI=0,gI=0,hI=0,iI=0,jI=0,kI=0,mI=0,nI=0,oI=0,pI=0,qI=0,rI=0,tI=0,uI=0,vI=0,wI=0,yI=0,zI=0,AI=0,BI=0,CI=0,DI=0,EI=0,FI=0,HI=0,II=0,JI=0,KI=0,LI=0,MI=0,NI=0,OI=0,PI=0,QI=0,RI=0,TI=0,VI=0,WI=0,XI=0,YI=0,ZI=0,$I=0,_I=0,aJ=0,bJ=0,cJ=0,eJ=0,fJ=0,gJ=0,hJ=0,iJ=0,jJ=0,lJ=0,mJ=0,nJ=0,pJ=0,qJ=0,rJ=0,sJ=0,tJ=0,uJ=0,vJ=0,wJ=0,xJ=0,yJ=0,zJ=0,AJ=0,BJ=0,CJ=0,DJ=0,EJ=0,FJ=0,GJ=0,HJ=0,JJ=0,LJ=0,NJ=0,OJ=0,PJ=0,RJ=0,TJ=0,UJ=0,VJ=0,XJ=0,YJ=0,ZJ=0,$J=0,_J=0,aK=0,bK=0,dK=0,eK=0,gK=0,hK=0,iK=0,jK=0,kK=0,lK=0,mK=0,nK=0,oK=0,qK=0,rK=0,sK=0,tK=0,uK=0,vK=0,wK=0,xK=0,zK=0,AK=0,BK=0,CK=0,DK=0,FK=0,GK=0,HK=0,IK=0,KK=0,LK=0,NK=0,PK=0,QK=0,RK=0,SK=0,TK=0,UK=0,VK=0,XK=0,YK=0,ZK=0,$K=0,aL=0,bL=0,cL=0,dL=0,fL=0,gL=0,hL=0,iL=0,kL=0,lL=0,mL=0,nL=0,pL=0,qL=0,rL=0,sL=0,uL=0,vL=0,wL=0,xL=0,yL=0,zL=0,AL=0,BL=0,CL=0,DL=0,EL=0,FL=0,GL=0,HL=0,IL=0,JL=0,KL=0,LL=0,ML=0,NL=0,OL=0,PL=0,RL=0,SL=0,TL=0,VL=0,WL=0,XL=0,YL=0,ZL=0,$L=0,_L=0,aM=0,cM=0,dM=0,eM=0,gM=0,hM=0,iM=0,jM=0,kM=0,lM=0,mM=0,nM=0,oM=0,pM=0,qM=0,rM=0,tM=0,uM=0,vM=0,wM=0,yM=0,zM=0,AM=0,BM=0,GM=0,HM=0,NM=0,OM=0,RM=0,SM=0,UM=0,VM=0,XM=0,YM=0,$M=0,_M=0,fN=0,hN=0,iN=0,jN=0,mN=0,nN=0,oN=0,pN=0,rN=0,sN=0,vN=0,wN=0,AN=0,DN=0,GN=0,IN=0,LN=0,MN=0,ON=0,PN=0,QN=0;if(QN=o,o=o+368|0,(0|o)>=(0|p)&&ca(368),ON=QN+8|0,ha=QN+112|0,pt=QN+40|0,wv=a,iA=0,Ax=wv,Lx=Ax+44|0,Wx=0|f[Lx>>2],0!=(0|Wx)){if(ry=wv,Cy=ry+44|0,Ny=0|f[Cy>>2],Yy=0|f[Ny>>2],hz=Yy,sz=64&hz,Dz=0!=(0|sz),Oz=wv,!Dz)return _A=0|Sm(Oz),ga=_A,fw=ga,o=QN,0|fw;if(Zz=Oz+1120|0,jA=0|f[Zz>>2],0!=(0|jA))return FA=wv,QA=0|Sm(FA),ga=QA,fw=ga,o=QN,0|fw}kB=wv,vB=kB+72|0,GB=0|d[vB>>0],RB=1&GB,aC=255&RB,lC=aC,mC=wv,xC=mC+72|0,IC=0|d[xC>>0],TC=-2&IC,d[xC>>0]=TC;a:for(;;){switch(cD=wv,nD=cD+40|0,yD=0|f[nD>>2],oE=yD,JD=wv,UD=0|Tm(JD),fy=UD,0|UD){case 42:PN=25;break a;case 33:PN=47;break a;case 60:PN=82;break a;case 62:PN=107;break a;case 34:PN=118;break a;case 39:PN=119;break a;case 96:PN=120;break a;case 63:PN=125;break a;case 38:PN=152;break a;case 124:PN=174;break a;case 43:PN=185;break a;case 45:PN=206;break a;case 46:PN=229;break a;case 57:case 56:case 55:case 54:case 53:case 52:case 51:case 50:case 49:case 48:PN=237;break a;case 93:case 41:PN=329;break a;case 125:PN=330;break a;case 58:PN=331;break a;case 47:PN=348;break a;case 94:PN=365;break a;case 59:PN=372;break a;case 44:PN=373;break a;case 126:PN=374;break a;case 40:PN=381;break a;case 91:PN=391;break a;case 123:PN=408;break a;case 37:PN=423;break a;case 36:PN=467;break a;case 64:PN=491;break a;case 95:PN=506;break a;case-1:case 0:case 26:case 4:if(dE=wv,pE=dE+1116|0,AE=0|f[pE>>2],!(0!=(0|AE))){PN=9;break a}break;case 11:case 13:case 12:case 9:case 32:iA=1;continue a;case 35:WE=wv,Um(WE,10);break;case 10:case-2:break;case 61:if(Nu=wv,$u=Nu+36|0,lv=0|f[$u>>2],!(1==(0|lv))){PN=69;break a}if(Jv=wv,Wv=0|Xm(Jv,69214),!(Wv<<24>>24!=0)){PN=69;break a}if(hw=wv,iw=0|Ym(hw,5),fy=iw,jw=fy,kw=(0|jw)<0,lw=fy,mw=32==(0|lw),!(kw|mw||(ow=fy,pw=ow-9|0,pw>>>0<5))){PN=69;break a}for(;;){if(rw=wv,sw=0|Zm(rw,63011),tw=sw<<24>>24!=0,uw=wv,!tw){PN=62;break a}if(vw=0|Tm(uw),fy=vw,ww=fy,xw=(0|ww)<0,zw=fy,Aw=32==(0|zw),jN=xw|Aw,jN?Gw=1:(Bw=fy,Cw=Bw-9|0,Ew=Cw>>>0<5,Gw=Ew),!(1^Gw))break}Hw=fy,Iw=10!=(0|Hw),Iw&&(Jw=wv,Um(Jw,10)),Lw=wv,Mw=Lw+32|0,Nw=0|f[Mw>>2],Ow=Nw+1|0,f[Mw>>2]=Ow,Pw=wv,Qw=Pw+36|0,f[Qw>>2]=0;continue a;case 92:if(cj=wv,dj=0|Tm(cj),fy=dj,ej=fy,fj=10==(0|ej),gj=wv,!fj){PN=422;break a}hj=gj+32|0,ij=0|f[hj>>2],jj=ij+1|0,f[hj>>2]=jj,kj=wv,mj=kj+36|0,f[mj>>2]=0,iA=1;continue a;default:if(Tp=fy,Up=32|Tp,Vp=Up-97|0,Vp>>>0<26){PN=510;break a}if(Xp=fy,Yp=Xp-48|0,Zp=Yp>>>0<10,$p=fy,_p=95==(0|$p),$M=Zp|_p,_M=1^$M,bq=fy,cq=bq>>>0<=127,!(_M&cq)){PN=510;break a}dq=wv,eq=fy,Pm(dq,63639,eq);continue a}switch(fF=wv,hm(fF),qF=wv,BF=qF+40|0,0|(0|f[BF>>2])){case 10:case 9:case 8:case 7:case 0:if(XF=wv,gG=XF+32|0,sG=0|f[gG>>2],DG=sG+1|0,f[gG>>2]=DG,OG=wv,ZG=OG+36|0,f[ZG>>2]=0,iH=wv,tH=iH+1120|0,EH=0|f[tH>>2],!(0!=(0|EH)))continue a;if($H=wv,jI=$H+44|0,vI=0|f[jI>>2],0!=(0|vI)){PN=15;break a}continue a}if(lJ=wv,wJ=lJ+1120|0,HJ=0|f[wJ>>2],0!=(0|HJ)){PN=17;break}b:for(;;){if(bK=wv,mK=0|Tm(bK),fy=mK,!(0!=(0|mK))){PN=24;break a}switch(0|fy){case-2:case-1:PN=24;break a;case 46:break b;case 11:case 13:case 12:case 9:case 32:break;default:PN=23;break a}iA=1}if(UK=wv,dL=0|Tm(UK),fy=dL,!(46!=(0|dL))){PN=24;break}zL=wv,KL=fy,Vm(zL,KL),VL=wv,Vm(VL,46)}a:switch(0|PN){case 9:return ga=0,fw=ga,o=QN,0|fw;case 15:return RI=wv,aJ=0|Sm(RI),ga=aJ,fw=ga,o=QN,0|fw;case 17:return ga=10,fw=ga,o=QN,0|fw;case 23:eM=wv,pM=fy,Vm(eM,pM),PN=24;break;case 25:Fb=wv,Qb=0|Tm(Fb),fy=Qb,_b=42==(0|Qb);do{if(_b){if(lc=wv,wc=0|Tm(lc),fy=wc,Hc=61==(0|wc),Sc=wv,!Hc){oe=fy,Vm(Sc,oe),fy=326;break}return bd=0|hl(Sc,59540,2),md=wv,xd=md+1132|0,Id=0|f[xd>>2],f[Id>>2]=bd,Td=wv,ce=Td+40|0,f[ce>>2]=0,ga=345,fw=ga,o=QN,0|fw}if(ze=fy,Ke=61==(0|ze),Ve=wv,Ke)return ef=0|Fl(Ve,42),qf=wv,Bf=qf+1132|0,Mf=0|f[Bf>>2],f[Mf>>2]=ef,Xf=wv,gg=Xf+40|0,f[gg>>2]=0,ga=345,fw=ga,o=QN,0|fw;if(sg=fy,Vm(Ve,sg),Dg=wv,Og=Dg+40|0,Zg=0|f[Og>>2],ih=4==(0|Zg),ih?(b=iA,c=0==(0|b),x=fy,A=32==(0|x),c|A||(PN=34)):(th=wv,Eh=th+40|0,Ph=0|f[Eh>>2],$h=5==(0|Ph),ji=iA,vi=0!=(0|ji),AM=$h&vi,BM=1^AM,Gi=fy,Ri=32==(0|Gi),BM|Ri||(PN=34)),34==(0|PN)&&(aj=fy,lj=aj-9|0,!(lj>>>0<5))){Hj=wv,Wm(Hj,62976),fy=353;break}if(Sj=wv,bk=Sj+40|0,mk=0|f[bk>>2],!(0==(0|mk)||(Jk=wv,Vk=Jk+40|0,el=0|f[Vk>>2],6==(0|el)||(Bl=wv,Nl=Bl+40|0,Yl=0|f[Nl>>2],10==(0|Yl)||(um=wv,Im=um+40|0,rn=0|f[Im>>2],9==(0|rn)))))){fy=42;break}fy=353}while(0);return Nn=wv,Yn=Nn+40|0,io=0|f[Yn>>2],to=7==(0|io),to?PN=44:(Eo=wv,Po=Eo+40|0,$o=0|f[Po>>2],kp=8==(0|$o),kp?PN=44:(Gp=wv,L=0,fa=Gp)),44==(0|PN)&&(vp=wv,L=4,fa=vp),Rp=fa+40|0,f[Rp>>2]=L,aq=fy,ga=aq,fw=ga,o=QN,0|fw;case 47:return lq=wv,wq=0|Tm(lq),fy=wq,Hq=wv,Sq=Hq+40|0,br=0|f[Sq>>2],nr=7==(0|br),nr?PN=49:(yr=wv,Jr=yr+40|0,Ur=0|f[Jr>>2],ds=8==(0|Ur),ds?PN=49:(et=wv,qt=et+40|0,f[qt>>2]=0)),49==(0|PN)&&(os=wv,zs=os+40|0,f[zs>>2]=4,Ks=fy,64==(0|Ks))?(ga=33,fw=ga,o=QN,0|fw):(Bt=fy,61==(0|Bt)?(ga=330,fw=ga,o=QN,0|fw):(Xt=fy,gu=126==(0|Xt),gu?(ga=336,fw=ga,o=QN,0|fw):(ru=wv,Cu=fy,Vm(ru,Cu),ga=33,fw=ga,o=QN,0|fw)));case 62:return Kk(uw,63017),ga=0,fw=ga,o=QN,0|fw;case 69:return Rw=wv,Sw=Rw+40|0,Tw=0|f[Sw>>2],Uw=7==(0|Tw),Uw?PN=71:(Ww=wv,Xw=Ww+40|0,Yw=0|f[Xw>>2],Zw=8==(0|Yw),Zw?PN=71:(_w=wv,O=0,U=_w)),71==(0|PN)&&($w=wv,O=4,U=$w),ax=U+40|0,f[ax>>2]=O,bx=wv,cx=0|Tm(bx),fy=cx,61==(0|cx)?(fx=wv,gx=0|Tm(fx),fy=gx,hx=61==(0|gx),hx?(ga=329,fw=ga,o=QN,0|fw):(ix=wv,jx=fy,Vm(ix,jx),ga=328,fw=ga,o=QN,0|fw)):(kx=fy,126==(0|kx)?(ga=335,fw=ga,o=QN,0|fw):(mx=fy,nx=62==(0|mx),nx?(ga=346,fw=ga,o=QN,0|fw):(ox=wv,qx=fy,Vm(ox,qx),ga=61,fw=ga,o=QN,0|fw)));case 82:rx=wv,sx=0|Tm(rx),fy=sx,tx=fy,ux=60==(0|tx);do{if(ux&&(vx=wv,wx=vx+40|0,xx=0|f[wx>>2],8!=(0|xx)&&(zx=wv,Bx=zx+40|0,Cx=0|f[Bx>>2],9!=(0|Cx)&&(Ex=wv,Fx=Ex+40|0,Gx=0|f[Fx>>2],!(1==(0|Gx)||(Ix=wv,Jx=Ix+40|0,Kx=0|f[Jx>>2],2==(0|Kx)||(Nx=wv,Ox=Nx+40|0,Px=0|f[Ox>>2],3==(0|Px)))))))){if(Rx=wv,Sx=Rx+40|0,Tx=0|f[Sx>>2],4==(0|Tx)){if(v=iA,!(0!=(0|v)))break}else if(Vx=wv,Xx=Vx+40|0,Yx=0|f[Xx>>2],Zx=5!=(0|Yx),$x=iA,_x=0!=(0|$x),!(Zx|_x))break;if(ay=wv,by=0|$m(ay),uI=by,cy=uI,0!=(0|cy))return ey=uI,ga=ey,fw=ga,o=QN,0|fw}}while(0);return hy=wv,(iy=hy+40|0,jy=0|f[iy>>2],ky=7==(0|jy),ky?PN=95:(ly=wv,my=ly+40|0,ny=0|f[my>>2],oy=8==(0|ny),oy?PN=95:(sy=wv,ty=sy+40|0,f[ty>>2]=0,uy=wv,vy=uy+40|0,wy=0|f[vy>>2],9==(0|wy)&&(yy=wv,zy=yy+72|0,Ay=0|d[zy>>0],By=-2&Ay,Dy=1|By,d[zy>>0]=Dy))),95==(0|PN)&&(py=wv,qy=py+40|0,f[qy>>2]=4),Ey=fy,61==(0|Ey))?(Gy=wv,Hy=0|Tm(Gy),fy=Hy,Iy=62==(0|Hy),Iy?(ga=327,fw=ga,o=QN,0|fw):(Jy=wv,Ky=fy,Vm(Jy,Ky),ga=332,fw=ga,o=QN,0|fw)):(Ly=fy,My=60==(0|Ly),Oy=wv,My?(Py=0|Tm(Oy),fy=Py,Qy=61==(0|Py),Ry=wv,Qy?(Sy=0|hl(Ry,64616,2),Ty=wv,Uy=Ty+1132|0,Vy=0|f[Uy>>2],f[Vy>>2]=Sy,Wy=wv,Xy=Wy+40|0,f[Xy>>2]=0,ga=345,fw=ga,o=QN,0|fw):(Zy=fy,Vm(Ry,Zy),ga=341,fw=ga,o=QN,0|fw)):($y=fy,Vm(Oy,$y),ga=60,fw=ga,o=QN,0|fw));case 107:return _y=wv,az=_y+40|0,bz=0|f[az>>2],cz=7==(0|bz),cz?PN=109:(dz=wv,ez=dz+40|0,fz=0|f[ez>>2],gz=8==(0|fz),gz?PN=109:(jz=wv,X=0,$=jz)),109==(0|PN)&&(iz=wv,X=4,$=iz),kz=$+40|0,f[kz>>2]=X,lz=wv,mz=0|Tm(lz),fy=mz,61==(0|mz)?(ga=331,fw=ga,o=QN,0|fw):(oz=fy,pz=62==(0|oz),qz=wv,pz?(rz=0|Tm(qz),fy=rz,tz=61==(0|rz),uz=wv,tz?(vz=0|hl(uz,59537,2),wz=wv,xz=wz+1132|0,yz=0|f[xz>>2],f[yz>>2]=vz,zz=wv,Az=zz+40|0,f[Az>>2]=0,ga=345,fw=ga,o=QN,0|fw):(Bz=fy,Vm(uz,Bz),ga=342,fw=ga,o=QN,0|fw)):(Cz=fy,Vm(qz,Cz),ga=62,fw=ga,o=QN,0|fw));case 118:return Ez=wv,Fz=0|Hm(Ez,3,34,0),Gz=wv,Hz=Gz+44|0,f[Hz>>2]=Fz,ga=360,fw=ga,o=QN,0|fw;case 119:return Iz=wv,Jz=0|Hm(Iz,1,39,0),Kz=wv,Lz=Kz+44|0,f[Lz>>2]=Jz,Mz=wv,Nz=0|Sm(Mz),ga=Nz,fw=ga,o=QN,0|fw;case 120:return Pz=wv,Qz=Pz+40|0,Rz=0|f[Qz>>2],Sz=7==(0|Rz),Tz=wv,Uz=Tz+40|0,Sz?(f[Uz>>2]=3,ga=96,fw=ga,o=QN,0|fw):(Vz=0|f[Uz>>2],Wz=8==(0|Vz),Wz?(Xz=lC,Yz=0!=(0|Xz),$z=wv,_z=$z+40|0,_=Yz?5:4,f[_z>>2]=_,ga=96,fw=ga,o=QN,0|fw):(aA=wv,bA=0|Hm(aA,131,96,0),cA=wv,dA=cA+44|0,f[dA>>2]=bA,ga=361,fw=ga,o=QN,0|fw));case 125:if(eA=wv,fA=eA+40|0,gA=0|f[fA>>2],!(1==(0|gA)||(kA=wv,lA=kA+40|0,mA=0|f[lA>>2],2==(0|mA)||(oA=wv,pA=oA+40|0,qA=0|f[pA>>2],3==(0|qA))))){if(vA=wv,wA=0|Tm(vA),fy=wA,xA=fy,(0|xA)<0)return zA=wv,Kk(zA,63053),ga=0,fw=ga,o=QN,0|fw;AA=fy,BA=32==(0|AA);do{if(BA)PN=133;else{if(CA=fy,DA=CA-9|0,!(DA>>>0<5)){if(YA=wv,_m(YA),ZA=fy,$A=0|Nv(ZA),aB=0!=(0|$A),bB=fy,cB=95==(0|bB),aB|cB&&(dB=wv,eB=0|Tm(dB),kc=eB,fB=wv,gB=kc,Vm(fB,gB),hB=kc,iB=0|Nv(hB),jB=0!=(0|iB),lB=kc,mB=95==(0|lB),jB|mB))break;return nB=fy,oB=92==(0|nB),pB=wv,oB?(qB=0|an(pB),fy=qB,rB=wv,sB=fy,bn(rB,sB)):(tB=fy,bn(pB,tB)),uB=wv,cn(uB),wB=wv,xB=wv,yB=0|dn(xB),zB=wv,AB=0|en(zB),BB=0|fm(wB,yB,AB),CB=wv,DB=CB+1132|0,EB=0|f[DB>>2],f[EB>>2]=BB,FB=wv,HB=FB+40|0,f[HB>>2]=1,ga=315,fw=ga,o=QN,0|fw}PN=133}}while(0);if(133==(0|PN)&&(GA=wv,HA=GA+40|0,IA=0|f[HA>>2],!(4==(0|IA)||(KA=wv,LA=KA+40|0,MA=0|f[LA>>2],5==(0|MA))))){switch(0|fy){case 32:xK=115;break;case 10:xK=110;break;case 9:xK=116;break;case 11:xK=118;break;case 13:xK=114;break;case 12:xK=102;break;default:xK=0}PA=xK,RA=0!=(0|PA),RA&&(SA=xK,f[ON>>2]=SA,bw(ha,256,63081,ON),TA=wv,Kk(TA,ha))}return UA=wv,VA=fy,Vm(UA,VA),WA=wv,XA=WA+40|0,f[XA>>2]=10,ga=63,fw=ga,o=QN,0|fw}return sA=wv,tA=sA+40|0,f[tA>>2]=10,ga=63,fw=ga,o=QN,0|fw;case 152:if(IB=wv,JB=0|Tm(IB),fy=JB,38==(0|JB))return LB=wv,MB=LB+40|0,f[MB>>2]=0,NB=wv,OB=0|Tm(NB),fy=OB,PB=61==(0|OB),QB=wv,PB?(SB=0|hl(QB,63116,2),TB=wv,UB=TB+1132|0,VB=0|f[UB>>2],f[VB>>2]=SB,WB=wv,XB=WB+40|0,f[XB>>2]=0,ga=345,fw=ga,o=QN,0|fw):(YB=fy,Vm(QB,YB),ga=333,fw=ga,o=QN,0|fw);if(ZB=fy,$B=61==(0|ZB),_B=wv,$B)return bC=0|Fl(_B,38),cC=wv,dC=cC+1132|0,eC=0|f[dC>>2],f[eC>>2]=bC,fC=wv,gC=fC+40|0,f[gC>>2]=0,ga=345,fw=ga,o=QN,0|fw;hC=fy,Vm(_B,hC),iC=wv,jC=iC+40|0,kC=0|f[jC>>2],nC=4==(0|kC),nC?(y=iA,z=0==(0|y),B=fy,C=32==(0|B),pN=z|C,PN=pN?163:161):(oC=wv,pC=oC+40|0,qC=0|f[pC>>2],rC=5==(0|qC),sC=iA,tC=0!=(0|sC),mN=rC&tC,nN=1^mN,uC=fy,vC=32==(0|uC),oN=nN|vC,PN=oN?163:161),161==(0|PN)&&(wC=fy,yC=wC-9|0,zC=yC>>>0<5,zC?PN=163:(AC=wv,Wm(AC,63119),fy=354));do{if(163==(0|PN)){if(BC=wv,CC=BC+40|0,DC=0|f[CC>>2],!(0==(0|DC)||(FC=wv,GC=FC+40|0,HC=0|f[GC>>2],6==(0|HC)||(KC=wv,LC=KC+40|0,MC=0|f[LC>>2],10==(0|MC)||(OC=wv,PC=OC+40|0,QC=0|f[PC>>2],9==(0|QC)))))){fy=38;break}fy=354}}while(0);return SC=wv,UC=SC+40|0,VC=0|f[UC>>2],WC=7==(0|VC),WC?PN=171:(XC=wv,YC=XC+40|0,ZC=0|f[YC>>2],$C=8==(0|ZC),$C?PN=171:(aD=wv,aa=0,ba=aD)),171==(0|PN)&&(_C=wv,aa=4,ba=_C),bD=ba+40|0,f[bD>>2]=aa,dD=fy,ga=dD,fw=ga,o=QN,0|fw;case 174:return eD=wv,fD=0|Tm(eD),fy=fD,124==(0|fD)?(hD=wv,iD=hD+40|0,f[iD>>2]=0,jD=wv,kD=0|Tm(jD),fy=kD,lD=61==(0|kD),mD=wv,lD?(oD=0|hl(mD,63154,2),pD=wv,qD=pD+1132|0,rD=0|f[qD>>2],f[rD>>2]=oD,sD=wv,tD=sD+40|0,f[tD>>2]=0,ga=345,fw=ga,o=QN,0|fw):(uD=fy,Vm(mD,uD),ga=334,fw=ga,o=QN,0|fw)):(vD=fy,wD=61==(0|vD),xD=wv,wD?(zD=0|Fl(xD,124),AD=wv,BD=AD+1132|0,CD=0|f[BD>>2],f[CD>>2]=zD,DD=wv,ED=DD+40|0,f[ED>>2]=0,ga=345,fw=ga,o=QN,0|fw):(FD=xD+40|0,GD=0|f[FD>>2],HD=7==(0|GD),HD?PN=182:(ID=wv,KD=ID+40|0,LD=0|f[KD>>2],MD=8==(0|LD),MD?PN=182:(OD=wv,da=0,ea=OD)),182==(0|PN)&&(ND=wv,da=4,ea=ND),PD=ea+40|0,f[PD>>2]=da,QD=wv,RD=fy,Vm(QD,RD),ga=124,fw=ga,o=QN,0|fw));case 185:if(SD=wv,TD=0|Tm(SD),fy=TD,VD=wv,WD=VD+40|0,XD=0|f[WD>>2],!(7==(0|XD)||(ZD=wv,$D=ZD+40|0,_D=0|f[$D>>2],8==(0|_D)))){if(iE=fy,jE=61==(0|iE),kE=wv,jE)return lE=0|Fl(kE,43),mE=wv,nE=mE+1132|0,qE=0|f[nE>>2],f[qE>>2]=lE,rE=wv,sE=rE+40|0,f[sE>>2]=0,ga=345,fw=ga,o=QN,0|fw;tE=kE+40|0,uE=0|f[tE>>2],vE=0==(0|uE);do{if(!(vE||(wE=wv,xE=wE+40|0,yE=0|f[xE>>2],6==(0|yE)||(BE=wv,CE=BE+40|0,DE=0|f[CE>>2],10==(0|DE)||(FE=wv,GE=FE+40|0,HE=0|f[GE>>2],9==(0|HE)))))){if(JE=wv,KE=JE+40|0,ME=0|f[KE>>2],NE=4==(0|ME),NE?(D=iA,E=0==(0|D),F=fy,G=32==(0|F),E|G||(PN=199)):(OE=wv,PE=OE+40|0,QE=0|f[PE>>2],RE=5==(0|QE),SE=iA,TE=0!=(0|SE),rN=RE&TE,sN=1^rN,UE=fy,VE=32==(0|UE),sN|VE||(PN=199)),199==(0|PN)&&(XE=fy,YE=XE-9|0,!(YE>>>0<5)&&($E=wv,_E=0|fn($E),0!=(0|_E))))break;return lF=wv,mF=lF+40|0,f[mF>>2]=0,nF=wv,oF=fy,Vm(nF,oF),ga=43,fw=ga,o=QN,0|fw}}while(0);if(bF=wv,cF=bF+40|0,f[cF>>2]=0,dF=wv,eF=fy,Vm(dF,eF),gF=fy,(0|gF)>=0&&(iF=fy,jF=iF-48|0,jF>>>0<10)){fy=43,PN=237;break}return ga=324,fw=ga,o=QN,0|fw}return bE=wv,cE=bE+40|0,f[cE>>2]=4,eE=fy,fE=64==(0|eE),fE?(ga=324,fw=ga,o=QN,0|fw):(gE=wv,hE=fy,Vm(gE,hE),ga=43,fw=ga,o=QN,0|fw);case 206:if(pF=wv,rF=0|Tm(pF),fy=rF,sF=wv,tF=sF+40|0,uF=0|f[tF>>2],!(7==(0|uF)||(wF=wv,xF=wF+40|0,yF=0|f[xF>>2],8==(0|yF)))){if(HF=fy,61==(0|HF))return JF=wv,KF=0|Fl(JF,45),LF=wv,NF=LF+1132|0,OF=0|f[NF>>2],f[OF>>2]=KF,PF=wv,QF=PF+40|0,f[QF>>2]=0,ga=345,fw=ga,o=QN,0|fw;if(RF=fy,SF=62==(0|RF),TF=wv,UF=TF+40|0,SF)return f[UF>>2]=3,ga=355,fw=ga,o=QN,0|fw;VF=0|f[UF>>2],WF=0==(0|VF);do{if(!(WF||(YF=wv,ZF=YF+40|0,$F=0|f[ZF>>2],6==(0|$F)||(aG=wv,bG=aG+40|0,cG=0|f[bG>>2],10==(0|cG)||(eG=wv,fG=eG+40|0,hG=0|f[fG>>2],9==(0|hG)))))){if(jG=wv,kG=jG+40|0,lG=0|f[kG>>2],mG=4==(0|lG),mG?(H=iA,I=0==(0|H),J=fy,K=32==(0|J),I|K||(PN=222)):(nG=wv,oG=nG+40|0,pG=0|f[oG>>2],qG=5==(0|pG),tG=iA,uG=0!=(0|tG),vN=qG&uG,wN=1^vN,vG=fy,wG=32==(0|vG),wN|wG||(PN=222)),222==(0|PN)&&(xG=fy,yG=xG-9|0,!(yG>>>0<5)&&(AG=wv,BG=0|fn(AG),0!=(0|BG))))break;return NG=wv,PG=NG+40|0,f[PG>>2]=0,QG=wv,RG=fy,Vm(QG,RG),ga=45,fw=ga,o=QN,0|fw}}while(0);return EG=wv,(FG=EG+40|0,f[FG>>2]=0,GG=wv,HG=fy,Vm(GG,HG),IG=fy,(0|IG)>=0&&(KG=fy,LG=KG-48|0,LG>>>0<10))?(ga=371,fw=ga,o=QN,0|fw):(ga=325,fw=ga,o=QN,0|fw)}return AF=wv,CF=AF+40|0,f[CF>>2]=4,DF=fy,EF=64==(0|DF),EF?(ga=325,fw=ga,o=QN,0|fw):(FF=wv,GF=fy,Vm(FF,GF),ga=45,fw=ga,o=QN,0|fw);case 229:return SG=wv,TG=SG+40|0,f[TG>>2]=0,UG=wv,VG=0|Tm(UG),fy=VG,WG=46==(0|VG),XG=wv,WG?(YG=0|Tm(XG),fy=YG,$G=46==(0|YG),$G?(ga=338,fw=ga,o=QN,0|fw):(_G=wv,aH=fy,Vm(_G,aH),ga=337,fw=ga,o=QN,0|fw)):(bH=fy,Vm(XG,bH),cH=fy,dH=(0|cH)>=0,dH&&(eH=fy,fH=eH-48|0,fH>>>0<10&&(hH=wv,Kk(hH,63157))),jH=wv,kH=jH+40|0,f[kH>>2]=8,ga=46,fw=ga,o=QN,0|fw);case 329:xb=wv,yb=xb+56|0,zb=0|f[yb>>2],Ab=zb+-1|0,f[yb>>2]=Ab,PN=330;break;case 331:if(dc=wv,ec=0|Tm(dc),fy=ec,fc=fy,gc=58==(0|fc),hc=wv,ic=hc+40|0,jc=0|f[ic>>2],!gc)return 1==(0|jc)||(Vc=wv,Wc=Vc+40|0,Xc=0|f[Wc>>2],2==(0|Xc)||(Zc=wv,$c=Zc+40|0,_c=0|f[$c>>2],ad=3==(0|_c),cd=fy,dd=32==(0|cd),ad|dd||(ed=fy,fd=ed-9|0,fd>>>0<5)))?(hd=wv,id=fy,Vm(hd,id),jd=wv,kd=jd+40|0,f[kd>>2]=0,ga=58,fw=ga,o=QN,0|fw):(ld=wv,nd=fy,Vm(ld,nd),od=wv,pd=od+40|0,f[pd>>2]=7,ga=356,fw=ga,o=QN,0|fw);mc=0==(0|jc);do{if(!(mc||(nc=wv,oc=nc+40|0,pc=0|f[oc>>2],6==(0|pc)||(rc=wv,sc=rc+40|0,tc=0|f[sc>>2],10==(0|tc)||(vc=wv,xc=vc+40|0,yc=0|f[xc>>2],9==(0|yc)||(Ac=wv,Bc=Ac+40|0,Cc=0|f[Bc>>2],9==(0|Cc))))))){if(Ec=wv,Fc=Ec+40|0,Gc=0|f[Fc>>2],4==(0|Gc)){if(e=iA,0!=(0|e))break}else if(Jc=wv,Kc=Jc+40|0,Lc=0|f[Kc>>2],Mc=5==(0|Lc),Nc=iA,Oc=0!=(0|Nc),Mc&Oc)break;return Rc=wv,Tc=Rc+40|0,f[Tc>>2]=8,ga=343,fw=ga,o=QN,0|fw}}while(0);return Pc=wv,Qc=Pc+40|0,f[Qc>>2]=0,ga=344,fw=ga,o=QN,0|fw;case 348:return qd=wv,rd=qd+40|0,sd=0|f[rd>>2],0==(0|sd)||(ud=wv,vd=ud+40|0,wd=0|f[vd>>2],6==(0|wd)||(zd=wv,Ad=zd+40|0,Bd=0|f[Ad>>2],10==(0|Bd)||(Dd=wv,Ed=Dd+40|0,Fd=0|f[Ed>>2],9==(0|Fd))))?(Hd=wv,Jd=0|Hm(Hd,7,47,0),Kd=wv,Ld=Kd+44|0,f[Ld>>2]=Jd,ga=357,fw=ga,o=QN,0|fw):(Md=wv,Nd=0|Tm(Md),fy=Nd,Od=61==(0|Nd),Pd=wv,Od?(Qd=0|Fl(Pd,47),Rd=wv,Sd=Rd+1132|0,Ud=0|f[Sd>>2],f[Ud>>2]=Qd,Vd=wv,Wd=Vd+40|0,f[Wd>>2]=0,ga=345,fw=ga,o=QN,0|fw):(Xd=fy,Vm(Pd,Xd),Yd=wv,Zd=Yd+40|0,$d=0|f[Zd>>2],_d=4==(0|$d),_d?(h=iA,i=0==(0|h),j=fy,k=32==(0|j),i|k||(PN=358)):(ae=wv,be=ae+40|0,de=0|f[be>>2],ee=5==(0|de),fe=iA,ge=0!=(0|fe),GM=ee&ge,HM=1^GM,he=fy,ie=32==(0|he),HM|ie||(PN=358)),358!=(0|PN)||(je=fy,ke=je-9|0,ke>>>0<5)?(se=wv,te=se+40|0,ue=0|f[te>>2],ve=7==(0|ue),ve?PN=362:(we=wv,xe=we+40|0,ye=0|f[xe>>2],Ae=8==(0|ye),Ae?PN=362:(Ce=wv,N=0,P=Ce)),362==(0|PN)&&(Be=wv,N=4,P=Be),De=P+40|0,f[De>>2]=N,ga=47,fw=ga,o=QN,0|fw):(me=wv,pe=0|Hm(me,7,47,0),qe=wv,re=qe+44|0,f[re>>2]=pe,ga=357,fw=ga,o=QN,0|fw)));case 365:return Ee=wv,Fe=0|Tm(Ee),fy=Fe,Ge=61==(0|Fe),He=wv,Ge?(Ie=0|Fl(He,94),Je=wv,Le=Je+1132|0,Me=0|f[Le>>2],f[Me>>2]=Ie,Ne=wv,Oe=Ne+40|0,f[Oe>>2]=0,ga=345,fw=ga,o=QN,0|fw):(Pe=He+40|0,Qe=0|f[Pe>>2],Re=7==(0|Qe),Re?PN=369:(Se=wv,Te=Se+40|0,Ue=0|f[Te>>2],We=8==(0|Ue),We?PN=369:(Ye=wv,Q=0,R=Ye)),369==(0|PN)&&(Xe=wv,Q=4,R=Xe),Ze=R+40|0,f[Ze>>2]=Q,$e=wv,_e=fy,Vm($e,_e),ga=94,fw=ga,o=QN,0|fw);case 372:return af=wv,bf=af+40|0,f[bf>>2]=0,ga=59,fw=ga,o=QN,0|fw;case 373:return cf=wv,df=cf+40|0,f[df>>2]=0,ga=44,fw=ga,o=QN,0|fw;case 374:return ff=wv,gf=ff+40|0,hf=0|f[gf>>2],jf=7==(0|hf),jf?PN=376:(kf=wv,lf=kf+40|0,mf=0|f[lf>>2],nf=8==(0|mf),nf?PN=376:(vf=wv,S=0,T=vf)),376==(0|PN)&&(of=wv,pf=0|Tm(of),fy=pf,rf=64!=(0|pf),rf&&(sf=wv,tf=fy,Vm(sf,tf)),uf=wv,S=4,T=uf),wf=T+40|0,f[wf>>2]=S,ga=126,fw=ga,o=QN,0|fw;case 381:xf=wv,yf=xf+40|0,zf=0|f[yf>>2],Af=0==(0|zf);do{if(Af)PN=385;else if(Cf=wv,Df=Cf+40|0,Ef=0|f[Df>>2],6==(0|Ef))PN=385;else if(Gf=wv,Hf=Gf+40|0,If=0|f[Hf>>2],10==(0|If))PN=385;else if(Kf=wv,Lf=Kf+40|0,Nf=0|f[Lf>>2],9==(0|Nf))PN=385;else{if(Pf=wv,Qf=Pf+40|0,Rf=0|f[Qf>>2],4==(0|Rf)){if(l=iA,!(0!=(0|l)))break}else if(Tf=wv,Uf=Tf+40|0,Vf=0|f[Uf>>2],Wf=5==(0|Vf),Yf=iA,Zf=0!=(0|Yf),!(Wf&Zf))break;fy=348}}while(0);return 385==(0|PN)&&(fy=347),$f=wv,_f=$f+56|0,ag=0|f[_f>>2],bg=ag+1|0,f[_f>>2]=bg,cg=wv,dg=cg+48|0,eg=0|f[dg>>2],fg=eg<<1,hg=wv,ig=hg+48|0,f[ig>>2]=fg,jg=wv,kg=jg+52|0,lg=0|f[kg>>2],mg=lg<<1,ng=wv,og=ng+52|0,f[og>>2]=mg,pg=wv,qg=pg+40|0,f[qg>>2]=0,tg=fy,ga=tg,fw=ga,o=QN,0|fw;case 391:if(ug=wv,vg=ug+56|0,wg=0|f[vg>>2],xg=wg+1|0,f[vg>>2]=xg,yg=wv,zg=yg+40|0,Ag=0|f[zg>>2],!(7==(0|Ag)||(Cg=wv,Eg=Cg+40|0,Fg=0|f[Eg>>2],8==(0|Fg)))){Tg=wv,Ug=Tg+40|0,Vg=0|f[Ug>>2],Wg=0==(0|Vg);do{if(Wg)PN=402;else if(Xg=wv,Yg=Xg+40|0,$g=0|f[Yg>>2],6==(0|$g))PN=402;else if(ah=wv,bh=ah+40|0,ch=0|f[bh>>2],10==(0|ch))PN=402;else if(eh=wv,fh=eh+40|0,gh=0|f[fh>>2],9==(0|gh))PN=402;else{if(jh=wv,kh=jh+40|0,lh=0|f[kh>>2],4==(0|lh)){if(n=iA,!(0!=(0|n)))break}else if(nh=wv,oh=nh+40|0,ph=0|f[oh>>2],qh=5==(0|ph),rh=iA,sh=0!=(0|rh),!(qh&sh))break;fy=350}}while(0);return 402==(0|PN)&&(fy=350),uh=wv,vh=uh+40|0,f[vh>>2]=0,wh=wv,xh=wh+48|0,yh=0|f[xh>>2],zh=yh<<1,Ah=wv,Bh=Ah+48|0,f[Bh>>2]=zh,Ch=wv,Dh=Ch+52|0,Fh=0|f[Dh>>2],Gh=Fh<<1,Hh=wv,Ih=Hh+52|0,f[Ih>>2]=Gh,Jh=fy,ga=Jh,fw=ga,o=QN,0|fw}return Hg=wv,(Ig=Hg+40|0,f[Ig>>2]=4,Jg=wv,Kg=0|Tm(Jg),fy=Kg,Lg=93==(0|Kg),Mg=wv,Lg)?(Ng=0|Tm(Mg),fy=Ng,Pg=61==(0|Ng),Pg?(ga=340,fw=ga,o=QN,0|fw):(Qg=wv,Rg=fy,Vm(Qg,Rg),ga=339,fw=ga,o=QN,0|fw)):(Sg=fy,Vm(Mg,Sg),ga=91,fw=ga,o=QN,0|fw);case 408:if(Kh=wv,Lh=Kh+60|0,Mh=0|f[Lh>>2],0!=(0|Mh)&&(Oh=wv,Qh=Oh+60|0,Rh=0|f[Qh>>2],Sh=wv,Th=Sh+56|0,Uh=0|f[Th>>2],(0|Rh)==(0|Uh)))return Wh=wv,Xh=Wh+40|0,f[Xh>>2]=0,Yh=wv,Zh=Yh+60|0,f[Zh>>2]=0,_h=wv,ai=_h+56|0,bi=0|f[ai>>2],ci=bi+-1|0,f[ai>>2]=ci,di=wv,ei=di+48|0,fi=0|f[ei>>2],gi=fi<<1,hi=wv,ii=hi+48|0,f[ii>>2]=gi,ki=wv,li=ki+52|0,mi=0|f[li>>2],ni=mi<<1,oi=wv,pi=oi+52|0,f[pi>>2]=ni,ga=363,fw=ga,o=QN,0|fw;qi=wv,ri=qi+40|0,si=0|f[ri>>2],ti=4==(0|si);do{if(ti)PN=415;else if(wi=wv,xi=wi+40|0,yi=0|f[xi>>2],5==(0|yi))PN=415;else if(Ai=wv,Bi=Ai+40|0,Ci=0|f[Bi>>2],1==(0|Ci))PN=415;else{if(Ei=wv,Fi=Ei+40|0,Hi=0|f[Fi>>2],!(3==(0|Hi))){if(Ji=wv,Ki=Ji+40|0,Li=0|f[Ki>>2],2==(0|Li)){fy=352;break}fy=351;break}PN=415}}while(0);return 415==(0|PN)&&(fy=123),Ni=wv,Oi=Ni+48|0,Pi=0|f[Oi>>2],Qi=Pi<<1,Si=wv,Ti=Si+48|0,f[Ti>>2]=Qi,Ui=wv,Vi=Ui+52|0,Wi=0|f[Vi>>2],Xi=Wi<<1,Yi=wv,Zi=Yi+52|0,f[Zi>>2]=Xi,$i=wv,_i=$i+40|0,f[_i>>2]=0,bj=fy,ga=bj,fw=ga,o=QN,0|fw;case 422:return nj=fy,Vm(gj,nj),ga=92,fw=ga,o=QN,0|fw;case 423:oj=wv,pj=oj+40|0,qj=0|f[pj>>2],rj=0==(0|qj);do{if(rj)PN=427;else if(sj=wv,tj=sj+40|0,uj=0|f[tj>>2],6==(0|uj))PN=427;else if(xj=wv,yj=xj+40|0,zj=0|f[yj>>2],10==(0|zj))PN=427;else{if(Bj=wv,Cj=Bj+40|0,Dj=0|f[Cj>>2],!(9==(0|Dj))){if(zl=wv,Al=0|Tm(zl),fy=Al,Cl=61==(0|Al),Dl=wv,Cl)return El=0|Fl(Dl,37),Gl=wv,Hl=Gl+1132|0,Il=0|f[Hl>>2],f[Il>>2]=El,Jl=wv,Kl=Jl+40|0,f[Kl>>2]=0,ga=345,fw=ga,o=QN,0|fw;if(Ll=Dl+40|0,Ml=0|f[Ll>>2],Ol=4==(0|Ml),Ol?(r=iA,s=0==(0|r),t=fy,u=32==(0|t),s|u||(PN=461)):(Pl=wv,Ql=Pl+40|0,Rl=0|f[Ql>>2],Sl=5==(0|Rl),Tl=iA,Ul=0!=(0|Tl),NM=Sl&Ul,OM=1^NM,Vl=fy,Wl=32==(0|Vl),OM|Wl||(PN=461)),461==(0|PN)&&(Xl=fy,Zl=Xl-9|0,!(Zl>>>0<5)))break;return _l=wv,am=_l+40|0,bm=0|f[am>>2],cm=7==(0|bm),cm?PN=464:(dm=wv,em=dm+40|0,gm=0|f[em>>2],im=8==(0|gm),im?PN=464:(lm=wv,V=0,W=lm)),464==(0|PN)&&(km=wv,V=4,W=km),mm=W+40|0,f[mm>>2]=V,nm=wv,om=fy,Vm(nm,om),ga=37,fw=ga,o=QN,0|fw}PN=427}}while(0);427==(0|PN)&&(Fj=wv,Gj=0|Tm(Fj),fy=Gj),Ij=fy,Jj=(0|Ij)<0;do{if(Jj)PN=431;else{if(Kj=fy,Lj=32|Kj,Mj=Lj-97|0,!(Mj>>>0<26||(Oj=fy,Pj=Oj-48|0,Pj>>>0<10))){PN=431;break}if(Tj=wv,Uj=0|Tm(Tj),xv=Uj,Vj=xv,Wj=0|Nv(Vj),0!=(0|Wj))return Yj=wv,Kk(Yj,63336),ga=0,fw=ga,o=QN,0|fw}}while(0);if(431==(0|PN)&&(Rj=fy,xv=Rj,fy=81),Zj=fy,$j=(0|Zj)<0,_j=xv,ak=(0|_j)<0,$j|ak)return ck=wv,Kk(ck,63360),ga=0,fw=ga,o=QN,0|fw;dk=xv,nw=dk,ek=xv,fk=40==(0|ek);do{if(!fk){if(gk=xv,91==(0|gk)){xv=93;break}if(ik=xv,123==(0|ik)){xv=125;break}if(kk=xv,60==(0|kk)){xv=62;break}nw=0;break}xv=41}while(0);switch(0|fy){case 81:return ok=wv,pk=xv,qk=nw,rk=0|Hm(ok,3,pk,qk),sk=wv,tk=sk+44|0,f[tk>>2]=rk,ga=360,fw=ga,o=QN,0|fw;case 113:return uk=wv,vk=xv,wk=nw,zk=0|Hm(uk,1,vk,wk),Ak=wv,Bk=Ak+44|0,f[Bk>>2]=zk,Ck=wv,Dk=0|Sm(Ck),ga=Dk,fw=ga,o=QN,0|fw;case 87:return Ek=wv,Fk=xv,Gk=nw,Hk=0|Hm(Ek,43,Fk,Gk),Ik=wv,Lk=Ik+44|0,f[Lk>>2]=Hk,ga=358,fw=ga,o=QN,0|fw;case 119:return Mk=wv,Nk=xv,Ok=nw,Pk=0|Hm(Mk,41,Nk,Ok),Qk=wv,Rk=Qk+44|0,f[Rk>>2]=Pk,ga=358,fw=ga,o=QN,0|fw;case 120:return Sk=wv,Tk=xv,Uk=nw,Wk=0|Hm(Sk,131,Tk,Uk),Xk=wv,Yk=Xk+44|0,f[Yk>>2]=Wk,ga=361,fw=ga,o=QN,0|fw;case 114:return Zk=wv,$k=xv,_k=nw,al=0|Hm(Zk,7,$k,_k),bl=wv,cl=bl+44|0,f[cl>>2]=al,ga=357,fw=ga,o=QN,0|fw;case 115:return dl=wv,fl=xv,gl=nw,il=0|Hm(dl,17,fl,gl),jl=wv,kl=jl+44|0,f[kl>>2]=il,ga=356,fw=ga,o=QN,0|fw;case 73:return ll=wv,ml=xv,nl=nw,ol=0|Hm(ll,51,ml,nl),pl=wv,rl=pl+44|0,f[rl>>2]=ol,ga=359,fw=ga,o=QN,0|fw;case 105:return sl=wv,tl=xv,ul=nw,vl=0|Hm(sl,49,tl,ul),wl=wv,xl=wl+44|0,f[xl>>2]=vl,ga=359,fw=ga,o=QN,0|fw;default:return yl=wv,Kk(yl,63336),ga=0,fw=ga,o=QN,0|fw}break;case 467:if(pm=wv,qm=pm+40|0,f[qm>>2]=1,rm=wv,sm=0|_m(rm),rG=sm,tm=wv,vm=0|Tm(tm),fy=vm,wm=fy,(0|wm)<0)return zm=wv,Kk(zm,63405),ga=0,fw=ga,o=QN,0|fw;Am=fy;b:switch(0|Am){case 95:Bm=wv,Cm=0|Tm(Bm),fy=Cm,Dm=fy,Em=(0|Dm)>=0;do{if(Em){if(Fm=fy,Jm=32|Fm,Km=Jm-97|0,!(Km>>>0<26)&&(Mm=fy,Om=Mm-48|0,Qm=Om>>>0<10,Rm=fy,on=95==(0|Rm),RM=Qm|on,SM=1^RM,pn=fy,qn=pn>>>0<=127,SM&qn))break;sn=wv,bn(sn,36),tn=wv,un=fy,bn(tn,un),PN=511;break a}}while(0);vn=wv,wn=fy,Vm(vn,wn),fy=95,PN=475;break;case 34:case 62:case 60:case 58:case 61:case 46:case 44:case 59:case 92:case 47:case 64:case 33:case 63:case 36:case 42:case 126:PN=475;break;case 45:Jn=wv,bn(Jn,36),Kn=wv,Ln=fy,bn(Kn,Ln),Mn=wv,On=0|Tm(Mn),fy=On,Pn=wv,Qn=fy,Vm(Pn,Qn),PN=477;break;case 43:case 39:case 96:case 38:if($n=oE,_n=7==(0|$n),ao=wv,_n){bn(ao,36),bo=wv,co=fy,bn(bo,co),PN=477;break b}return eo=fy,fo=0|jn(ao,eo),go=wv,ho=go+1132|0,jo=0|f[ho>>2],f[jo>>2]=fo,ga=322,fw=ga,o=QN,0|fw;case 57:case 56:case 55:case 54:case 53:case 52:case 51:case 50:case 49:for(;;){if(ko=wv,lo=fy,bn(ko,lo),mo=wv,no=0|Tm(mo),fy=no,oo=fy,!((0|oo)>=0))break;if(qo=fy,ro=0|Pv(qo),!(0!=(0|ro)))break}if(uo=wv,vo=fy,Vm(uo,vo),wo=oE,!(7==(0|wo)))return yo=wv,cn(yo),zo=wv,Ao=0|dn(zo),Bo=0|ev(Ao,0,10),yw=Bo,Co=yw,Do=Co>>>0>2147483647,Fo=wv,Do?(Pm(Fo,63439,2147483647),ga=0,fw=ga,o=QN,0|fw):(Go=yw,Ho=0|kn(Fo,Go),Io=wv,Jo=Io+1132|0,Ko=0|f[Jo>>2],f[Ko>>2]=Ho,ga=321,fw=ga,o=QN,0|fw);PN=477;break;case 48:PN=490;break;default:if(Lo=fy,Mo=32|Lo,No=Mo-97|0,No>>>0<26)PN=490;else{if(Qo=fy,Ro=Qo-48|0,So=Ro>>>0<10,To=fy,Uo=95==(0|To),UM=So|Uo,VM=1^UM,Vo=fy,Wo=Vo>>>0<=127,VM&Wo)return Xo=wv,Yo=fy,Vm(Xo,Yo),ga=36,fw=ga,o=QN,0|fw;PN=490}}if(475==(0|PN))return xn=wv,bn(xn,36),yn=wv,zn=fy,bn(yn,zn),An=wv,cn(An),Bn=wv,Dn=wv,En=0|dn(Dn),Fn=0|Nm(Bn,En),Gn=wv,Hn=Gn+1132|0,In=0|f[Hn>>2],f[In>>2]=Fn,ga=308,fw=ga,o=QN,0|fw;if(477==(0|PN))return Rn=wv,cn(Rn),Sn=wv,Tn=wv,Un=0|dn(Tn),Vn=0|Nm(Sn,Un),Wn=wv,Xn=Wn+1132|0,Zn=0|f[Xn>>2],f[Zn>>2]=Vn,ga=308,fw=ga,o=QN,0|fw;if(490==(0|PN)){Zo=wv,bn(Zo,36),PN=511;break}break;case 491:if(_o=wv,ap=0|Tm(_o),fy=ap,bp=wv,cp=0|_m(bp),rG=cp,dp=wv,bn(dp,64),ep=fy,fp=64==(0|ep),fp&&(gp=wv,bn(gp,64),hp=wv,ip=0|Tm(hp),fy=ip),lp=fy,(0|lp)<0)return np=wv,op=np+1108|0,pp=0|f[op>>2],qp=1==(0|pp),rp=wv,qp?Kk(rp,63473):Kk(rp,63509),ga=0,fw=ga,o=QN,0|fw;if(sp=fy,tp=0|Pv(sp),!(0!=(0|tp))){if(Cp=fy,Dp=32|Cp,Ep=Dp-97|0,Ep>>>0<26){PN=511;break}if(Hp=fy,Ip=Hp-48|0,Jp=Ip>>>0<10,Kp=fy,Lp=95==(0|Kp),XM=Jp|Lp,YM=1^XM,Mp=fy,Np=Mp>>>0<=127,!(YM&Np)){PN=511;break}return Op=wv,Pp=fy,Vm(Op,Pp),ga=64,fw=ga,o=QN,0|fw}return wp=wv,xp=wp+1108|0,yp=0|f[xp>>2],zp=1==(0|yp),Ap=wv,Bp=fy,zp?Pm(Ap,63542,Bp):Pm(Ap,63592,Bp),ga=0,fw=ga,o=QN,0|fw;case 506:Qp=wv,Sp=0|_m(Qp),rG=Sp,PN=511;break;case 510:fq=wv,gq=0|_m(fq),rG=gq,PN=511}if(24==(0|PN))return ia=wv,ta=ia+72|0,Ea=0|d[ta>>0],Pa=-2&Ea,$a=1|Pa,d[ta>>0]=$a,jb=wv,ub=jb+40|0,f[ub>>2]=0,ga=10,fw=ga,o=QN,0|fw;if(237==(0|PN)){xk=0,ui=0,rg=0,ne=0,lH=wv,mH=lH+40|0,f[mH>>2]=1,nH=wv,_m(nH),oH=fy,pH=45==(0|oH),qH=fy,rH=43==(0|qH),AN=pH|rH,AN&&(sH=wv,uH=fy,bn(sH,uH),vH=wv,wH=0|Tm(vH),fy=wH),xH=fy,yH=48==(0|xH);a:do{if(yH){if(zH=wv,AH=0|en(zH),Gm=AH,BH=wv,CH=0|Tm(BH),fy=CH,DH=fy,FH=120==(0|DH),GH=fy,HH=88==(0|GH),FH|HH){IH=wv,JH=0|Tm(IH),fy=JH,KH=fy,LH=(0|KH)>=0;b:do{if(LH){if(MH=fy,NH=MH-48|0,!(NH>>>0<10||(QH=fy,RH=32|QH,SH=RH-97|0,SH>>>0<6)))break;for(;;){if(UH=fy,95==(0|UH)){if(WH=xk,0!=(0|WH))break b;YH=fy,xk=YH}else{if(ZH=fy,_H=ZH-48|0,!(_H>>>0<10||(bI=fy,cI=32|bI,dI=cI-97|0,dI>>>0<6)))break b;xk=0,fI=wv,gI=fy,hI=0|Xu(gI),bn(fI,hI)}if(iI=wv,kI=0|Tm(iI),fy=kI,!((0|kI)>=0))break}}}while(0);if(mI=wv,nI=fy,Vm(mI,nI),oI=wv,cn(oI),pI=wv,qI=0|en(pI),rI=Gm,(0|qI)==(0|rI))return tI=wv,Kk(tI,63212),ga=0,fw=ga,o=QN,0|fw;if(wI=xk,0!=(0|wI)){PN=320;break}return yI=wv,zI=wv,AI=0|dn(zI),BI=0|xm(yI,AI,16),CI=wv,DI=CI+1132|0,EI=0|f[DI>>2],f[EI>>2]=BI,ga=313,fw=ga,o=QN,0|fw}if(FI=fy,HI=98==(0|FI),II=fy,JI=66==(0|II),HI|JI){KI=wv,LI=0|Tm(KI),fy=LI,MI=fy,NI=48==(0|MI),OI=fy,PI=49==(0|OI),DN=NI|PI;b:if(DN)for(;;){if(QI=fy,95==(0|QI)){if(TI=xk,0!=(0|TI))break b;VI=fy,xk=VI}else{if(WI=fy,XI=48!=(0|WI),YI=fy,ZI=49!=(0|YI),XI&ZI)break b;xk=0,$I=wv,_I=fy,bn($I,_I)}if(bJ=wv,cJ=0|Tm(bJ),fy=cJ,!((0|cJ)>=0))break}if(eJ=wv,fJ=fy,Vm(eJ,fJ),gJ=wv,cn(gJ),hJ=wv,iJ=0|en(hJ),jJ=Gm,(0|iJ)==(0|jJ))return mJ=wv,Kk(mJ,63212),ga=0,fw=ga,o=QN,0|fw;if(nJ=xk,0!=(0|nJ)){PN=320;break}return pJ=wv,qJ=wv,rJ=0|dn(qJ),sJ=0|xm(pJ,rJ,2),tJ=wv,uJ=tJ+1132|0,vJ=0|f[uJ>>2],f[vJ>>2]=sJ,ga=313,fw=ga,o=QN,0|fw}if(xJ=fy,yJ=100==(0|xJ),zJ=fy,AJ=68==(0|zJ),yJ|AJ){BJ=wv,CJ=0|Tm(BJ),fy=CJ,DJ=fy,EJ=(0|DJ)>=0;b:if(EJ&&(FJ=fy,GJ=FJ-48|0,GJ>>>0<10))for(;;){if(JJ=fy,95==(0|JJ)){if(LJ=xk,0!=(0|LJ))break b;NJ=fy,xk=NJ}else{if(OJ=fy,PJ=OJ-48|0,!(PJ>>>0<10))break b;xk=0,RJ=wv,TJ=fy,bn(RJ,TJ)}if(UJ=wv,VJ=0|Tm(UJ),fy=VJ,!((0|VJ)>=0))break}if(XJ=wv,YJ=fy,Vm(XJ,YJ),ZJ=wv,cn(ZJ),$J=wv,_J=0|en($J),aK=Gm,(0|_J)==(0|aK))return dK=wv,Kk(dK,63212),ga=0,fw=ga,o=QN,0|fw;if(eK=xk,0!=(0|eK)){PN=320;break}return gK=wv,hK=wv,iK=0|dn(hK),jK=0|xm(gK,iK,10),kK=wv,lK=kK+1132|0,nK=0|f[lK>>2],f[nK>>2]=jK,ga=313,fw=ga,o=QN,0|fw}if(oK=fy,95==(0|oK))PN=286;else{qK=fy,rK=111==(0|qK),sK=fy,tK=79==(0|sK),GN=rK|tK;do{if(GN){if(uK=wv,vK=0|Tm(uK),fy=vK,wK=fy,zK=(0|wK)<0,AK=fy,BK=95==(0|AK),!(zK|BK)&&(CK=fy,DK=CK-48|0,DK>>>0<10))break;return FK=wv,Kk(FK,63212),ga=0,fw=ga,o=QN,0|fw}}while(0);GK=fy,HK=(0|GK)>=48,IK=fy,KK=(0|IK)<=55,IN=HK&KK,PN=IN?286:298}b:do{if(286==(0|PN)){for(;;){if(PN=0,LK=fy,95==(0|LK)){if(NK=xk,0!=(0|NK))break;PK=fy,xk=PK}else{if(QK=fy,RK=(0|QK)<48,SK=fy,TK=(0|SK)>57,RK|TK)break;if(VK=fy,(0|VK)>55)break b;xk=0,XK=wv,YK=fy,bn(XK,YK)}if(ZK=wv,$K=0|Tm(ZK),fy=$K,!((0|$K)>=0))break;PN=286}if(aL=wv,bL=0|en(aL),cL=Gm,!((0|bL)>(0|cL))){if(sL=xk,!(0!=(0|sL))){PN=298;break}uL=wv,vL=fy,Vm(uL,vL),PN=320;break a}if(fL=wv,gL=fy,Vm(fL,gL),hL=wv,cn(hL),iL=xk,0!=(0|iL)){PN=320;break a}return kL=wv,lL=wv,mL=0|dn(lL),nL=0|xm(kL,mL,8),pL=wv,qL=pL+1132|0,rL=0|f[qL>>2],f[rL>>2]=nL,ga=313,fw=ga,o=QN,0|fw}}while(0);if(298==(0|PN)&&(wL=fy,xL=(0|wL)>55,yL=fy,AL=(0|yL)<=57,!(xL&AL))){if(CL=fy,DL=46==(0|CL),EL=fy,FL=101==(0|EL),LN=DL|FL,GL=fy,HL=69==(0|GL),MN=LN|HL,IL=wv,MN){bn(IL,48),PN=303;break}return JL=fy,Vm(IL,JL),LL=wv,ML=0|xm(LL,63263,10),NL=wv,OL=NL+1132|0,PL=0|f[OL>>2],f[PL>>2]=ML,ga=313,fw=ga,o=QN,0|fw}BL=wv,Kk(BL,63243),PN=303}else PN=303}while(0);a:if(303==(0|PN)){b:for(;;){switch(PN=0,0|fy){case 57:case 56:case 55:case 54:case 53:case 52:case 51:case 50:case 49:case 48:xk=0,RL=wv,SL=fy,bn(RL,SL);break;case 46:if(TL=xk,0!=(0|TL)){PN=320;break a}if(WL=rg,XL=0!=(0|WL),YL=ui,ZL=0!=(0|YL),XL|ZL)break b;if($L=wv,_L=0|Tm($L),jp=_L,aM=jp,(0|aM)<0){PN=309;break b}if(cM=jp,dM=cM-48|0,!(dM>>>0<10)){PN=309;break b}iM=jp,fy=iM,jM=wv,bn(jM,46),kM=wv,lM=fy,bn(kM,lM),mM=ne,nM=mM+1|0,ne=nM,oM=rg,qM=oM+1|0,rg=qM,xk=0;break;case 69:case 101:if(rM=xk,0!=(0|rM)){PN=312;break b}if(wM=ui,0!=(0|wM))break b;if(yM=wv,zM=fy,bn(yM,zM),ja=ui,ka=ja+1|0,ui=ka,la=ne,ma=la+1|0,ne=ma,na=fy,xk=na,oa=wv,pa=0|Tm(oa),fy=pa,qa=fy,ra=45!=(0|qa),sa=fy,ua=43!=(0|sa),ra&ua){PN=303;continue b}va=wv,wa=fy,bn(va,wa),xa=fy,xk=xa;break;case 95:if(ya=xk,0!=(0|ya))break b;Aa=fy,xk=Aa;break;default:break b}Ba=wv,Ca=0|Tm(Ba),fy=Ca,PN=303}309==(0|PN)?(gM=wv,hM=jp,Vm(gM,hM)):312==(0|PN)&&(tM=wv,uM=fy,Vm(tM,uM),vM=xk,fy=vM),Da=wv,Fa=fy,Vm(Da,Fa),Ga=xk,Ha=0!=(0|Ga),Ha&&(PN=320)}return 320==(0|PN)&&(Ia=wv,Ja=xk,Pm(Ia,63265,Ja)),(Ka=wv,cn(Ka),La=ne,0!=(0|La))?(Na=0|Ru(),f[Na>>2]=0,Oa=wv,Qa=0|dn(Oa),Ra=+Dw(Qa,pt),mr=Ra,Sa=mr,Ta=0==Sa,Ta?(Ua=0|f[pt>>2],Va=wv,Wa=0|dn(Va),Xa=(0|Ua)==(0|Wa),Xa?(Ya=wv,Za=wv,_a=0|dn(Za),gn(Ya,63289,_a)):PN=325):PN=325,325==(0|PN)&&(ab=0|Ru(),bb=0|f[ab>>2],34==(0|bb)&&(db=wv,eb=wv,fb=0|dn(eb),gn(db,63314,fb),gb=0|Ru(),f[gb>>2]=0)),hb=wv,ib=wv,kb=0|dn(ib),lb=0|hn(hb,kb),mb=wv,nb=mb+1132|0,ob=0|f[nb>>2],f[ob>>2]=lb,ga=314,fw=ga,o=QN,0|fw):(pb=wv,qb=wv,rb=0|dn(qb),sb=0|xm(pb,rb,10),tb=wv,vb=tb+1132|0,wb=0|f[vb>>2],f[wb>>2]=sb,ga=313,fw=ga,o=QN,0|fw)}if(330==(0|PN))return Bb=wv,Cb=Bb+48|0,Db=0|f[Cb>>2],Eb=Db>>>1,Gb=wv,Hb=Gb+48|0,Ib=0|f[Hb>>2],Jb=1&Ib,Kb=Eb|Jb,Lb=wv,Mb=Lb+48|0,f[Mb>>2]=Kb,Nb=wv,Ob=Nb+52|0,Pb=0|f[Ob>>2],Rb=Pb>>>1,Sb=wv,Tb=Sb+52|0,Ub=0|f[Tb>>2],Vb=1&Ub,Wb=Rb|Vb,Xb=wv,Yb=Xb+52|0,f[Yb>>2]=Wb,Zb=fy,$b=41==(0|Zb),ac=wv,bc=ac+40|0,M=$b?3:2,f[bc>>2]=M,cc=fy,ga=cc,fw=ga,o=QN,0|fw;if(511==(0|PN)){for(;;){if(PN=0,hq=wv,iq=fy,bn(hq,iq),jq=wv,kq=0|Tm(jq),fy=kq,mq=fy,(0|mq)<0)break;if(oq=fy,pq=32|oq,qq=pq-97|0,qq>>>0<26)PN=511;else if(sq=fy,tq=sq-48|0,uq=tq>>>0<10,vq=fy,xq=95==(0|vq),uq|xq)PN=511;else{if(yq=fy,zq=yq>>>0<=127,!(1^zq))break;PN=511}}if(Bq=rG,0==(0|Bq)&&(Dq=wv,Eq=0|en(Dq),7==(0|Eq)&&(Gq=fy,Iq=(0|Gq)<0,Jq=fy,Kq=10==(0|Jq),Iq|Kq&&(Lq=wv,Mq=0|dn(Lq),Nq=wv,Oq=0|en(Nq),Pq=0|iv(Mq,63675,Oq),0==(0|Pq)))))return ga=-1,fw=ga,o=QN,0|fw;Rq=wv,Tq=0|dn(Rq),Uq=0|d[Tq>>0],Vq=Uq<<24>>24;a:switch(0|Vq){case 36:case 64:Wq=wv,Xq=fy,Vm(Wq,Xq);break;default:if(Yq=fy,Zq=33==(0|Yq),$q=fy,_q=63==(0|$q),Zq|_q&&(ar=wv,cr=0|ln(ar,61,0),!(cr<<24>>24!=0))){er=wv,fr=fy,bn(er,fr);break a}gr=wv,hr=fy,Vm(gr,hr)}ir=wv,cn(ir),Kw=0,jr=wv,kr=0|dn(jr),lr=0|d[kr>>0],or=lr<<24>>24;a:switch(0|or){case 36:pr=wv,qr=pr+40|0,f[qr>>2]=1,Kw=308;break;case 64:if(rr=wv,sr=rr+40|0,f[sr>>2]=1,tr=wv,ur=0|dn(tr),vr=ur+1|0,wr=0|d[vr>>0],xr=wr<<24>>24,64==(0|xr)){Kw=311;break a}Kw=309;break a;default:Ar=wv,Br=0|mn(Ar),Cr=33==(0|Br);do{if(Cr)PN=533;else if(Dr=wv,Er=0|mn(Dr),63==(0|Er))PN=533;else{Gr=wv,Hr=Gr+40|0,Ir=0|f[Hr>>2],Kr=7==(0|Ir);b:if(Kr){Lr=wv,Mr=0|Tm(Lr),fy=Mr,Nr=61==(0|Mr);do{if(Nr&&(Or=wv,Pr=0|ln(Or,126,0),!(Pr<<24>>24!=0||(Rr=wv,Sr=0|ln(Rr,62,0),Sr<<24>>24!=0)))){if(Vr=wv,Wr=0|ln(Vr,61,0),Wr<<24>>24!=0&&(Yr=wv,Zr=0|ln(Yr,62,1),$r=255&Zr,!(0!=(0|$r))))break;Kw=306,as=wv,bs=fy,bn(as,bs),cs=wv,cn(cs);break b}}while(0);es=wv,fs=fy,Vm(es,fs)}if(gs=Kw,0==(0|gs)&&(is=wv,js=0|dn(is),ks=0|d[js>>0],ls=ks<<24>>24,ms=ls-65|0,ms>>>0<26)){Kw=310;break}Kw=306}}while(0);if(533==(0|PN)&&(Kw=307),ps=wv,qs=ps+40|0,rs=0|f[qs>>2],ss=0!=(0|rs),ts=lC,us=0!=(0|ts),fN=ss|us,fN?(vs=wv,ws=vs+40|0,xs=0|f[ws>>2],ys=4==(0|xs),ys?PN=549:(As=wv,Bs=As+40|0,Cs=0|f[Bs>>2],5==(0|Cs)&&(PN=549))):PN=549,549==(0|PN)&&(Es=wv,Fs=0|ln(Es,58,0),Gs=255&Fs,0!=(0|Gs)&&(Is=wv,Js=0|ln(Is,58,1),!(Js<<24>>24!=0))))return Ms=wv,Ns=Ms+40|0,f[Ns>>2]=0,Os=wv,Tm(Os),Ps=wv,cn(Ps),Qs=wv,Rs=wv,Ss=0|dn(Rs),Ts=0|Nm(Qs,Ss),Us=wv,Ws=Us+1132|0,Xs=0|f[Ws>>2],f[Xs>>2]=Ts,ga=312,fw=ga,o=QN,0|fw;if(Ys=wv,Zs=Ys+40|0,$s=0|f[Zs>>2],8!=(0|$s)&&(at=wv,bt=0|dn(at),ct=wv,dt=0|en(ct),ft=0|nn(bt,dt),Vw=ft,gt=Vw,0!=(0|gt)))return it=wv,jt=it+40|0,kt=0|f[jt>>2],ex=kt,lt=wv,mt=lt+32|0,nt=0|f[mt>>2],ot=wv,rt=ot+1132|0,st=0|f[rt>>2],f[st>>2]=nt,tt=Vw,ut=tt+12|0,vt=0|f[ut>>2],wt=wv,xt=wt+40|0,f[xt>>2]=vt,yt=ex,zt=7==(0|yt),At=wv,zt?(Ct=Vw,Dt=0|f[Ct>>2],Et=0|Nm(At,Dt),Ft=wv,Gt=Ft+1132|0,Ht=0|f[Gt>>2],f[Ht>>2]=Et,It=Vw,Jt=It+4|0,Kt=0|f[Jt>>2],ga=Kt,fw=ga,o=QN,0|fw):(Lt=At+40|0,Nt=0|f[Lt>>2],Ot=0==(0|Nt),Ot&&(Pt=wv,Qt=Pt+72|0,Rt=0|d[Qt>>0],St=-2&Rt,Tt=1|St,d[Qt>>0]=Tt),Ut=Vw,Vt=Ut+4|0,Wt=0|f[Vt>>2],281==(0|Wt)?(Zt=wv,$t=Zt+60|0,_t=0|f[$t>>2],0!=(0|_t)&&(bu=wv,cu=bu+60|0,du=0|f[cu>>2],eu=wv,fu=eu+56|0,hu=0|f[fu>>2],(0|du)==(0|hu))?(ju=wv,ku=ju+60|0,f[ku>>2]=0,lu=wv,mu=lu+56|0,nu=0|f[mu>>2],ou=nu+-1|0,f[mu>>2]=ou,ga=284,fw=ga,o=QN,0|fw):(pu=wv,qu=pu+48|0,su=0|f[qu>>2],tu=1&su,0!=(0|tu)?(ga=282,fw=ga,o=QN,0|fw):(vu=wv,wu=vu+52|0,xu=0|f[wu>>2],yu=1&xu,zu=0!=(0|yu),Au=ex,Bu=5!=(0|Au),zu&Bu?(ga=283,fw=ga,o=QN,0|fw):(Du=ex,Eu=2==(0|Du),Fu=ex,Gu=0==(0|Fu),hN=Eu|Gu,hN?(ga=283,fw=ga,o=QN,0|fw):(ga=281,fw=ga,o=QN,0|fw))))):(Hu=ex,Iu=0==(0|Hu),Ju=ex,Ku=10==(0|Ju),iN=Iu|Ku,Lu=Vw,Mu=Lu+4|0,Ou=0|f[Mu>>2],iN?(ga=Ou,fw=ga,o=QN,0|fw):(Pu=Vw,Qu=Pu+4|0,Su=Qu+4|0,Tu=0|f[Su>>2],Uu=(0|Ou)!=(0|Tu),Uu&&(Vu=wv,Wu=Vu+40|0,f[Wu>>2]=0),Yu=Vw,Zu=Yu+4|0,_u=Zu+4|0,av=0|f[_u>>2],ga=av,fw=ga,o=QN,0|fw)));if(bv=wv,cv=bv+40|0,dv=0|f[cv>>2],!(0==(0|dv)||(gv=wv,hv=gv+40|0,jv=0|f[hv>>2],6==(0|jv)||(mv=wv,nv=mv+40|0,ov=0|f[nv>>2],10==(0|ov)||(qv=wv,rv=qv+40|0,sv=0|f[rv>>2],9==(0|sv)||(uv=wv,vv=uv+40|0,zv=0|f[vv>>2],8==(0|zv)||(Bv=wv,Cv=Bv+40|0,Dv=0|f[Cv>>2],4==(0|Dv)||(Fv=wv,Gv=Fv+40|0,Hv=0|f[Gv>>2],5==(0|Hv))))))))){Qv=wv,Rv=Qv+40|0,Sv=0|f[Rv>>2],Tv=7==(0|Sv),Uv=wv,Vv=Uv+40|0,Z=Tv?3:1,f[Vv>>2]=Z;break a}Kv=lC,Lv=0!=(0|Kv),Mv=wv,Ov=Mv+40|0,Y=Lv?5:4,f[Ov>>2]=Y}return Xv=wv,Yv=wv,Zv=0|dn(Yv),$v=0|Nm(Xv,Zv),px=$v,_v=px,aw=wv,cw=aw+1132|0,dw=0|f[cw>>2],f[dw>>2]=_v,ew=Kw,ga=ew,fw=ga,o=QN,0|fw}return 0}function Sm(a){a|=0;var b=0,e=0,g=0,h=0,i=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Ra=0,Sa=0,Ta=0,Va=0,Wa=0,Xa=0,Za=0,$a=0,_a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Qb=0,Rb=0,Tb=0,Ub=0,Wb=0,Xb=0,Zb=0,$b=0,_b=0,ac=0,cc=0,dc=0,ec=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,yc=0,zc=0,Ac=0,Bc=0,Cc=0,Dc=0,Ec=0,Fc=0,Gc=0,Hc=0,Ic=0,Jc=0,Kc=0,Lc=0,Mc=0,Oc=0,Qc=0,Rc=0,Tc=0,Uc=0,Vc=0,Xc=0,Zc=0,$c=0,_c=0,ad=0,bd=0,cd=0,dd=0,ed=0,fd=0,gd=0,hd=0,jd=0,kd=0,ld=0,nd=0,od=0,pd=0,qd=0,sd=0,td=0,ud=0,vd=0,wd=0,xd=0,yd=0,zd=0,Ad=0,Bd=0,Cd=0,Dd=0,Ed=0,Fd=0,Gd=0,Hd=0,Id=0,Jd=0,Kd=0,Ld=0,Md=0,Nd=0,Od=0,Pd=0,Rd=0,Sd=0,Td=0,Ud=0,Vd=0,Wd=0,Xd=0,Yd=0,Zd=0,$d=0,_d=0,ae=0,ce=0,de=0,ee=0,fe=0,ge=0,he=0,ie=0,je=0,ke=0,le=0,me=0,oe=0,pe=0,qe=0,re=0,ue=0,ve=0,we=0,xe=0,ye=0,ze=0,Ae=0,Be=0,Ce=0,De=0,Ee=0,Fe=0,Ge=0,He=0,Ie=0,Je=0,Ke=0,Le=0,Me=0,Ne=0,Oe=0,Pe=0,Qe=0,Re=0,Se=0,Te=0,Ue=0,Ve=0,We=0,Xe=0,Ye=0,Ze=0,$e=0,_e=0,af=0,bf=0,cf=0,df=0,ef=0,ff=0,gf=0,hf=0,jf=0,kf=0,lf=0,mf=0,nf=0,of=0,pf=0,qf=0,rf=0,sf=0,tf=0,vf=0,wf=0,xf=0,yf=0,zf=0,Af=0,Bf=0,Cf=0,Df=0,Ef=0,Ff=0,Gf=0,Hf=0,If=0,Jf=0,Kf=0,Lf=0,Mf=0,Nf=0,Of=0,Pf=0,Qf=0,Rf=0,Sf=0,Tf=0,Uf=0,Vf=0,Wf=0,Xf=0,Yf=0,Zf=0,$f=0,_f=0,ag=0,bg=0,cg=0,dg=0,eg=0,fg=0,gg=0,hg=0,ig=0,jg=0,kg=0,lg=0,mg=0,ng=0,og=0,pg=0,qg=0,rg=0,sg=0,tg=0,ug=0,vg=0,wg=0,xg=0,zg=0,Bg=0,Cg=0,Dg=0,Eg=0,Fg=0,Gg=0,Hg=0,Ig=0,Jg=0,Kg=0,Lg=0,Mg=0,Ng=0,Og=0,Pg=0,Qg=0,Rg=0,Sg=0,Tg=0,Ug=0,Vg=0,Wg=0,Xg=0,Yg=0,$g=0,_g=0,ah=0,bh=0,ch=0,dh=0,eh=0,fh=0,gh=0,jh=0,kh=0,lh=0,mh=0,nh=0;nh=o,o=o+480|0,(0|o)>=(0|p)&&ca(480),kh=nh+8|0,jh=nh,E=nh+216|0,va=nh+209|0,Ra=nh+208|0,xb=nh+80|0,lb=a,Ib=lb,Tb=Ib+44|0,cc=0|f[Tb>>2],nc=0|f[cc>>2],yc=nc,sf=yc,Jc=lb,Uc=Jc+44|0,dd=0|f[Uc>>2],pd=dd+4|0,Ad=0|f[pd>>2],Ld=0|f[Ad>>2],Wd=Ld,gg=Wd,fe=lb,qe=fe+44|0,Be=0|f[qe>>2],Me=Be+4|0,Xe=0|f[Me>>2],gf=Xe+4|0,tf=0|f[gf>>2],Ef=0|f[tf>>2],Pf=Ef,rg=Pf,$f=lb,ag=$f+44|0,bg=0|f[ag>>2],cg=bg+4|0,dg=0|f[cg>>2],eg=dg+4|0,fg=0|f[eg>>2],hg=fg+4|0,ig=0|f[hg>>2],jg=ig,Cg=jg,kg=sf,lg=64&kg,mg=0!=(0|lg),mg?(ng=lb,og=0|em(ng),pg=og):pg=0,Ng=pg,qg=lb,_m(qg);a:for(;;){if(sg=lb,tg=0|Tm(sg),od=tg,ug=Cg,vg=(0|tg)!=(0|ug),wg=gg,xg=0!=(0|wg),!(vg?1:xg)){mh=66;break}if(zg=Ng,0!=(0|zg)&&(Bg=od,Dg=10==(0|Bg),Eg=od,Fg=(0|Eg)<0,Dg|Fg)){mh=7;break}if(da=od,(0|da)<0){mh=20;break}ga=od,ha=rg,ia=(0|ga)==(0|ha);do{if(!ia){if(ta=od,ua=Cg,(0|ta)==(0|ua)){xa=gg,ya=xa+-1|0,gg=ya,za=gg,Aa=za,Ba=lb,Ca=Ba+44|0,Da=0|f[Ca>>2],Ea=Da+4|0,Fa=0|f[Ea>>2],f[Fa>>2]=Aa;break}if(Ha=od,!(92==(0|Ha))){if(ac=od,!(35==(0|ac)))break;if(dc=sf,ec=2&dc,!(0!=(0|ec)))break;if(gc=lb,hc=0|Tm(gc),od=hc,ic=od,jc=123==(0|ic),kc=lb,jc){mh=50;break a}bn(kc,35),Ic=lb,Kc=od,Vm(Ic,Kc);continue a}if(Ja=lb,Ka=0|Tm(Ja),od=Ka,La=sf,Ma=2&La,Na=0!=(0|Ma),Oa=od,Na){if(Pa=Cg,!((0|Oa)==(0|Pa)||(Sa=od,Ta=rg,(0|Sa)==(0|Ta)))){if(Xa=od,10==(0|Xa)){if(Za=lb,$a=Za+32|0,_a=0|f[$a>>2],bb=_a+1|0,f[$a>>2]=bb,cb=lb,db=cb+36|0,f[db>>2]=0,eb=sf,fb=32&eb,!(0!=(0|fb)))continue a;hb=lb,bn(hb,10);continue a}if(ib=sf,jb=4&ib,kb=0!=(0|jb),nb=lb,kb){bn(nb,92),ob=lb,pb=od,bn(ob,pb);continue a}if(qb=od,Vm(nb,qb),rb=lb,sb=lb,tb=0|an(sb),bn(rb,tb),ub=Ng,!(0!=(0|ub)))continue a;wb=Ng,yb=0|d[wb>>0],zb=-3&yb,d[wb>>0]=zb;continue a}Va=lb,Wa=od,bn(Va,Wa);continue a}Ab=rg,Bb=(0|Oa)!=(0|Ab);do{if(Bb&&(Cb=od,Db=Cg,(0|Cb)!=(0|Db)&&(Fb=od,Gb=10==(0|Fb),Gb&&(Hb=lb,Jb=Hb+32|0,Kb=0|f[Jb>>2],Lb=Kb+1|0,f[Jb>>2]=Lb,Mb=lb,Nb=Mb+36|0,f[Nb>>2]=0),Ob=od,!(92==(0|Ob))))){if(Qb=sf,Rb=32&Qb,0!=(0|Rb)){if(Ub=od,32==(0|Ub))break;if(Wb=od,Xb=Wb-9|0,Xb>>>0<5)break}Zb=lb,bn(Zb,92)}}while(0);$b=lb,_b=od,bn($b,_b);continue a}ja=gg,la=ja+1|0,gg=la,ma=gg,na=ma,oa=lb,pa=oa+44|0,qa=0|f[pa>>2],ra=qa+4|0,sa=0|f[ra>>2],f[sa>>2]=na}while(0);if(Lc=sf,Mc=32&Lc,0!=(0|Mc)){if(Oc=od,32==(0|Oc)){mh=57;break}if(Qc=od,Rc=Qc-9|0,Rc>>>0<5){mh=57;break}}Hd=lb,Id=od,bn(Hd,Id)}if(7==(0|mh)){if(Gg=lb,bn(Gg,10),Hg=lb,cn(Hg),Ig=lb,Jg=Ig+32|0,Kg=0|f[Jg>>2],Lg=Kg+1|0,f[Jg>>2]=Lg,Mg=lb,Og=Mg+36|0,f[Og>>2]=0,Pg=Ng,Qg=0|d[Pg>>0],Rg=(255&Qg)>>>1,Sg=1&Rg,Yg=Sg,Tg=Ng,Ug=0|d[Tg>>0],Vg=-3&Ug,Wg=2|Vg,d[Tg>>0]=Wg,Xg=Yg,Xg<<24>>24!=0){$g=lb,_g=0|dn($g),g=_g,ah=lb,bh=0|en(ah),t=bh,ch=Ng,dh=0|d[ch>>0],eh=1&dh,fh=eh<<24>>24!=0;a:if(fh)for(;;){if(gh=g,h=0|d[gh>>0],i=h<<24>>24,32==(0|i)){if(b=t,!((0|b)>0))break a}else if(k=g,l=0|d[k>>0],m=l<<24>>24,n=m-9|0,q=n>>>0<5,r=t,s=(0|r)>0,!(q&s))break a;u=g,v=u+1|0,g=v,w=t,x=w+-1|0,t=x}if(y=t,z=y-1|0,A=Ng,B=A+12|0,C=0|f[B>>2],(0|z)==(0|C)&&(F=g,G=Ng,H=G+8|0,I=0|f[H>>2],J=t,K=J-1|0,L=0|iv(F,I,K),0==(0|L)))return e=365,_f=e,o=nh,0|_f}return N=od,O=(0|N)<0,O?(Q=Ng,R=Q+8|0,S=0|f[R>>2],f[jh>>2]=S,bw(E,256,64354,jh),T=lb,Kk(T,E),e=0,_f=e,o=nh,0|_f):(U=lb,V=lb,W=0|dn(V),X=lb,Y=0|en(X),Z=0|fm(U,W,Y),_=lb,aa=_+1132|0,ba=0|f[aa>>2],f[ba>>2]=Z,e=369,_f=e,o=nh,0|_f)}if(20==(0|mh))return fa=lb,Kk(fa,64408),e=0,_f=e,o=nh,0|_f;if(50==(0|mh))return cn(kc),lc=lb,mc=lc+40|0,f[mc>>2]=0,oc=lb,pc=oc+72|0,qc=0|d[pc>>0],rc=-2&qc,sc=1|rc,d[pc>>0]=sc,tc=lb,uc=lb,vc=0|dn(uc),wc=lb,xc=0|en(wc),zc=0|fm(tc,vc,xc),Ac=lb,Bc=Ac+1132|0,Cc=0|f[Bc>>2],f[Cc>>2]=zc,Dc=Ng,Ec=0!=(0|Dc),Ec?(Fc=Ng,Gc=0|d[Fc>>0],Hc=-3&Gc,d[Fc>>0]=Hc,e=368,_f=e,o=nh,0|_f):(e=319,_f=e,o=nh,0|_f);if(57==(0|mh)){if(Tc=lb,Vc=0|en(Tc),!(0==(0|Vc)))return ud=lb,vd=od,Vm(ud,vd),wd=lb,cn(wd),xd=lb,yd=lb,zd=0|dn(yd),Bd=lb,Cd=0|en(Bd),Dd=0|fm(xd,zd,Cd),Ed=lb,Fd=Ed+1132|0,Gd=0|f[Fd>>2],f[Gd>>2]=Dd,e=320,_f=e,o=nh,0|_f;for(;;){if(Xc=od,10==(0|Xc)&&(Zc=lb,$c=Zc+32|0,_c=0|f[$c>>2],ad=_c+1|0,f[$c>>2]=ad,bd=lb,cd=bd+36|0,f[cd>>2]=0,ed=lb,hm(ed),fd=lb,gd=fd+1120|0,hd=0|f[gd>>2],0!=(0|hd))){mh=60;break}if(jd=lb,kd=0|Tm(jd),od=kd,ld=od,!(32==(0|ld)||(nd=od,qd=nd-9|0,qd>>>0<5))){mh=63;break}}if(60==(0|mh))return e=367,_f=e,o=nh,0|_f;if(63==(0|mh))return sd=lb,td=od,Vm(sd,td),e=366,_f=e,o=nh,0|_f}else if(66==(0|mh)){if(Jd=lb,cn(Jd),Kd=lb,Md=Kd+40|0,f[Md>>2]=1,Nd=lb,Im(Nd),Od=sf,Pd=128&Od,0!=(0|Pd))return Rd=lb,Sd=lb,Td=0|dn(Sd),Ud=lb,Vd=0|en(Ud),Xd=0|sn(Rd,Td,Vd),Yd=lb,Zd=Yd+1132|0,$d=0|f[Zd>>2],f[$d>>2]=Xd,e=316,_f=e,o=nh,0|_f;if(_d=sf,ae=4&_d,!(0!=(0|ae)))return Rf=lb,Sf=lb,Tf=0|dn(Sf),Uf=lb,Vf=0|en(Uf),Wf=0|fm(Rf,Tf,Vf),Xf=lb,Yf=Xf+1132|0,Zf=0|f[Yf>>2],f[Zf>>2]=Wf,e=318,_f=e,o=nh,0|_f;P=0,ce=lb,de=lb,ee=0|dn(de),ge=lb,he=0|en(ge),ie=0|Em(ce,ee,he),ka=ie,Ga=va,d[Ra>>0]=0,je=lb,_m(je);a:for(;;){if(ke=lb,le=0|Tm(ke),$=le,me=$,!((0|me)>=0))break;if(oe=$,pe=32|oe,re=pe-97|0,!(re>>>0<26))break;switch(0|$){case 105:ue=P,ve=1|ue,P=ve;continue a;case 120:we=P,xe=2|we,P=xe;continue a;case 109:ye=P,ze=4|ye,P=ze;continue a;case 117:Ae=P,Ce=16|Ae,P=Ce;continue a;case 110:De=P,Ee=32|De,P=Ee;continue a;default:Fe=lb,Ge=$,bn(Fe,Ge);continue a}}return He=lb,Ie=$,Vm(He,Ie),Je=lb,Ke=0|en(Je),Le=0!=(0|Ke),Le&&(Ne=lb,cn(Ne),Oe=lb,Pe=0|en(Oe),Qe=(0|Pe)>1,Re=Qe?64446:75764,Se=lb,Te=0|dn(Se),f[kh>>2]=Re,lh=kh+4|0,f[lh>>2]=Te,bw(xb,128,64448,kh),Ue=lb,Kk(Ue,xb)),Ve=P,We=0!=(0|Ve),We&&(Ye=P,Ze=1&Ye,$e=0!=(0|Ze),$e&&(_e=Ga,af=_e+1|0,Ga=af,d[_e>>0]=105),bf=P,cf=2&bf,df=0!=(0|cf),df&&(ef=Ga,ff=ef+1|0,Ga=ff,d[ef>>0]=120),hf=P,jf=4&hf,kf=0!=(0|jf),kf&&(lf=Ga,mf=lf+1|0,Ga=mf,d[lf>>0]=109),nf=P,of=16&nf,pf=0!=(0|of),pf&&(d[Ra>>0]=117),qf=P,rf=32&qf,0!=(0|rf)&&(d[Ra>>0]=110)),vf=Ga,wf=vf>>>0>va>>>0,wf?(xf=lb,yf=Ga,zf=yf,Af=va,Bf=zf-Af|0,Cf=0|Em(xf,va,Bf),mb=Cf):mb=0,Df=0|d[Ra>>0],Ff=Df<<24>>24!=0,Ff?(Gf=lb,Hf=0|Em(Gf,Ra,1),ab=Hf):ab=0,If=lb,Jf=ka,Kf=mb,Lf=ab,Mf=0|tn(If,Jf,Kf,Lf),Nf=lb,Of=Nf+1132|0,Qf=0|f[Of>>2],f[Qf>>2]=Mf,e=317,_f=e,o=nh,0|_f}return 0}function Tm(a){a|=0;var b=0,c=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,Q=0,R=0,S=0,T=0,U=0,V=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,La=0;La=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),q=a,X=q,ha=X+80|0,sa=0|f[ha>>2],Da=0!=(0|sa),Ja=q;do{if(!Da){if(x=Ja+20|0,y=0|f[x>>2],z=0!=(0|y),A=q,z){if(C=A+20|0,D=0|f[C>>2],E=0|xw(D),!(0!=(0|E)||(G=q,H=G+20|0,I=0|f[H>>2],J=0|Bw(I),B=J,K=B,-1==(0|K))))break}else if(N=A+12|0,O=0|f[N>>2],0!=(0|O)&&(Q=q,R=Q+12|0,S=0|f[R>>2],T=q,U=T+16|0,V=0|f[U>>2],!(S>>>0>=V>>>0))){Y=q,Z=Y+12|0,$=0|f[Z>>2],_=$+1|0,f[Z>>2]=_,aa=0|d[$>>0],ba=255&aa,B=ba;break}return va=q,(wa=va+24|0,xa=0|f[wa>>2],0!=(0|xa))?(za=q,Aa=za+24|0,Ba=0|f[Aa>>2],Ca=Ba+16|0,Ea=0|f[Ca>>2],Fa=q,Ga=0|Dx[255&Ea](Fa),Ha=(0|Ga)<0,Ha?(b=-1,Ia=b,o=La,0|Ia):(b=-2,Ia=b,o=La,0|Ia)):(b=-1,Ia=b,o=La,0|Ia)}c=Ja+80|0,e=0|f[c>>2],g=0|f[e>>2],h=g,B=h,i=q,j=i+80|0,k=0|f[j>>2],M=k,l=q,m=l+80|0,n=0|f[m>>2],r=n+4|0,s=0|f[r>>2],t=q,u=t+80|0,f[u>>2]=s,v=q,w=M,Gm(v,w)}while(0);return da=B,ea=(0|da)>=0,ea&&(fa=q,ga=fa+36|0,ia=0|f[ga>>2],ja=ia+1|0,f[ga>>2]=ja),ka=B,13==(0|ka)?(ma=q,na=0|Tm(ma),B=na,oa=B,pa=10!=(0|oa),pa?(qa=q,ra=B,Vm(qa,ra),b=13,Ia=b,o=La,0|Ia):(ta=B,b=ta,Ia=b,o=La,0|Ia)):(ua=B,b=ua,Ia=b,o=La,0|Ia)}function Um(a,b){a|=0,b|=0;var c=0,d=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,q=0;for(q=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),f=a,g=b;;){if(i=f,j=0|Tm(i),h=j,k=h,(0|k)<0){n=4;break}if(m=h,c=g,d=c<<24>>24,(0|m)==(0|d)){n=4;break}}if(4==(0|n))return void(o=q)}function Vm(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,x=0;x=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),m=a,n=b,q=n,r=(0|q)>=0,r&&(s=m,t=s+36|0,u=0|f[t>>2],v=u+-1|0,f[t>>2]=v),c=m,d=n,e=d,g=m,h=g+80|0,i=0|f[h>>2],j=0|Pk(c,e,i),k=m,l=k+80|0,f[l>>2]=j,o=x}function Wm(a,b){a|=0,b|=0;var c=0,d=0,e=0,f=0,h=0;h=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),c=a,d=b,e=c,f=d,Xk(e,f),o=h}function Xm(a,b){a|=0,b|=0;var c=0,e=0,h=0,i=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0;if(Z=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),B=a,M=b,V=M,W=0|$v(V),T=W,X=B,c=X+20|0,e=0|f[c>>2],!(0!=(0|e)))return w=B,x=w+12|0,y=0|f[x>>2],0!=(0|y)&&(A=B,C=A+12|0,D=0|f[C>>2],E=T,F=D+E|0,G=B,H=G+16|0,I=0|f[H>>2],F>>>0<=I>>>0&&(K=B,L=K+12|0,N=0|f[L>>2],O=M,P=T,Q=0|hv(N,O,P),0==(0|Q)))?(q=1,S=q,o=Z,0|S):(q=0,S=q,o=Z,0|S);for(U=0;;){if(h=M,i=0|d[h>>0],!(i<<24>>24!=0)){Y=6;break}if(k=B,l=M,m=l+1|0,M=m,n=0|d[l>>0],r=n<<24>>24,s=U,t=s+1|0,U=t,u=0|ln(k,r,s),!(u<<24>>24!=0)){Y=5;break}}return 5==(0|Y)?(q=0,S=q,o=Z,0|S):6==(0|Y)?(q=1,S=q,o=Z,0|S):0}function Ym(a,b){a|=0,b|=0;var c=0,d=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0;for(S=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),C=a,L=b,M=0;;){if(O=C,P=0|Tm(O),N=P,Q=N,-1==(0|Q)){R=3;break}if(h=C,i=M,j=C,k=N,l=k,m=0|Ok(j,l),n=0|Tk(h,i,m),M=n,q=L,s=q+-1|0,L=s,!(0!=(0|q)))break}return 3==(0|R)?(g=N,r=g,K=r,o=S,0|K):(u=C,v=u+80|0,w=0|f[v>>2],x=0!=(0|w),x?(y=C,z=M,A=C,B=A+80|0,D=0|f[B>>2],E=0|Tk(y,z,D),F=C,c=E,d=F):(G=M,H=C,c=G,d=H),I=d+80|0,f[I>>2]=c,J=N,r=J,K=r,o=S,0|K)}function Zm(a,b){a|=0,b|=0;var c=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0;$=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),B=a,M=b;a:for(;;){for(;;){if(W=B,X=0|Tm(W),U=X,Y=U,c=(0|Y)<0,e=U,c){Z=4;break a}if(h=10==(0|e),h&&(i=B,j=i+32|0,k=0|f[j>>2],l=k+1|0,f[j>>2]=l,m=B,n=m+36|0,f[n>>2]=0),r=U,s=M,t=0|d[s>>0],u=t<<24>>24,(0|r)==(0|u))break}if(w=M,x=w+1|0,M=x,y=B,z=M,A=0|Xm(y,z),C=A<<24>>24!=0,D=M,C)break;S=D+-1|0,M=S}if(4==(0|Z))return g=255&e,q=g,T=q,o=$,0|T;for(E=0|$v(D),V=E;;){if(F=V,G=F+-1|0,V=G,!(0!=(0|F)))break;I=B,J=0|Tm(I),K=10==(0|J),K&&(L=B,N=L+32|0,O=0|f[N>>2],P=O+1|0,f[N>>2]=P,Q=B,R=Q+36|0,f[R>>2]=0)}return q=1,T=q,o=$,0|T}function $m(a){a|=0;var b=0,c=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,sa=0,ta=0,va=0,wa=0,ya=0,za=0,Aa=0,Ca=0,Ea=0,Fa=0,Ga=0,Ha=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,$a=0,ab=0,bb=0,cb=0,db=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Jb=0,Kb=0,Lb=0,Ob=0,Pb=0;if(Pb=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),_=a,wa=65,Ha=0,Sa=0,c=_,r=0|Tm(c),la=r,C=la,!(32==(0|C)||(V=la,W=V-9|0,X=W>>>0<5,Y=la,Z=61==(0|Y),X|Z))){if(ba=la,da=45==(0|ba),da&&(Ha=1,ea=_,fa=0|Tm(ea),la=fa),ga=la,ha=39==(0|ga),ia=la,ja=34==(0|ia),Jb=ha|ja,ka=la,Jb){for(xb=ka,ma=la,na=39==(0|ma),na&&(Sa=1),oa=_,_m(oa);;){if(pa=_,qa=0|Tm(pa),la=qa,!((0|qa)>=0))break;if(sa=la,ta=xb,!((0|sa)!=(0|ta)))break;if(va=la,10==(0|va)){Ob=13;break}ya=_,za=la,bn(ya,za)}if(13==(0|Ob)&&(la=-1),Aa=la,(0|Aa)<0)return Ca=_,Kk(Ca,64316),b=0,U=b,o=Pb,0|U}else{if((0|ka)<0)return b=0,U=b,o=Pb,0|U;if(Ea=la,Fa=32|Ea,Ga=Fa-97|0,!(Ga>>>0<26)&&(Ja=la,Ka=Ja-48|0,La=Ka>>>0<10,Ma=la,Na=95==(0|Ma),Kb=La|Na,Lb=1^Kb,Oa=la,Pa=Oa>>>0<=127,Lb&Pa))return Qa=_,Ra=la,Vm(Qa,Ra),Ta=Ha,Ua=Ta<<24>>24!=0,Ua&&(Va=_,Vm(Va,45)),b=0,U=b,o=Pb,0|U;for(Wa=_,_m(Wa);;){if(Xa=_,Ya=la,bn(Xa,Ya),Za=_,$a=0|Tm(Za),la=$a,!((0|$a)>=0))break;if(ab=la,cb=32|ab,db=cb-97|0,!(db>>>0<26||(fb=la,gb=fb-48|0,hb=gb>>>0<10,ib=la,jb=95==(0|ib),hb|jb||(kb=la,lb=kb>>>0<=127,1^lb))))break}ob=_,pb=la,Vm(ob,pb)}return qb=_,cn(qb),rb=_,sb=0|rn(rb),bb=sb,tb=bb,ub=tb+4|0,vb=0|f[ub>>2],mb=vb,wb=_,yb=_,zb=0|dn(yb),Ab=_,Bb=0|en(Ab),Cb=0|Em(wb,zb,Bb),Db=mb,Eb=Db+8|0,f[Eb>>2]=Cb,Fb=_,Gb=0|en(Fb),Hb=mb,e=Hb+12|0,f[e>>2]=Gb,g=Sa,h=g<<24>>24!=0,h||(i=wa,j=2|i,wa=j),k=wa,l=mb,m=l+4|0,f[m>>2]=k,n=Ha,q=mb,s=0|d[q>>0],t=1&n,u=-2&s,v=u|t,d[q>>0]=v,w=mb,x=0|d[w>>0],y=-3&x,z=2|y,d[w>>0]=z,A=mb,B=A+16|0,f[B>>2]=0,D=_,E=_,F=E+1116|0,G=0|f[F>>2],H=_,I=bb,J=0|Ok(H,I),K=0|Tk(D,G,J),L=_,M=L+1116|0,f[M>>2]=K,O=_,P=O+40|0,f[P>>2]=1,Q=bb,R=_,S=R+1132|0,T=0|f[S>>2],f[T>>2]=Q,b=364,U=b,o=Pb,0|U}return $=_,aa=la,Vm($,aa),b=0,U=b,o=Pb,0|U}function _m(a){a|=0;var b=0,c=0,d=0,e=0,g=0,h=0,i=0,k=0;return k=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),b=a,c=b,d=c+1108|0,f[d>>2]=0,e=b,g=e+36|0,h=0|f[g>>2],i=h-1|0,o=k,0|i}function an(a){a|=0;var b=0,c=0,d=0,e=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,A=0,B=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ia=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,$a=0,ab=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,mb=0,nb=0,ob=0,qb=0,rb=0,sb=0,tb=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Qb=0,Rb=0,Sb=0,Tb=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,$b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,lc=0,mc=0,nc=0,oc=0,pc=0,rc=0,sc=0,tc=0,uc=0,wc=0,xc=0,yc=0,zc=0,Ac=0,Bc=0,Cc=0,Ec=0,Fc=0,Gc=0,Hc=0,Jc=0,Kc=0,Lc=0,Mc=0,Oc=0,Qc=0,Rc=0;Rc=o,o=o+96|0,(0|o)>=(0|p)&&ca(96),Db=Rc+60|0,Ob=Rc+56|0,Zb=Rc+48|0,ic=Rc+40|0,tc=Rc+4|0,Ec=Rc,hb=a,c=hb,q=0|Tm(c),sb=q;a:switch(0|q){case 92:B=sb,b=B;break;case 110:b=10;break;case 116:b=9;break;case 114:b=13;break;case 102:b=12;break;case 118:b=11;break;case 97:b=7;break;case 101:b=27;break;case 55:case 54:case 53:case 52:case 51:case 50:case 49:case 48:for(M=sb,f[Db>>2]=M,f[Ob>>2]=1;;){if(X=0|f[Ob>>2],!((0|X)<3))break;if(sa=hb,Da=0|Tm(sa),Oa=0|f[Ob>>2],Za=Db+(Oa<<2)|0,f[Za>>2]=Da,ib=0|f[Ob>>2],jb=Db+(ib<<2)|0,kb=0|f[jb>>2],(0|kb)<0){Qc=70;break a}if(mb=0|f[Ob>>2],nb=Db+(mb<<2)|0,ob=0|f[nb>>2],(0|ob)<48){Qc=15;break}if(qb=0|f[Ob>>2],rb=Db+(qb<<2)|0,tb=0|f[rb>>2],55<(0|tb)){Qc=15;break}zb=0|f[Ob>>2],Ab=zb+1|0,f[Ob>>2]=Ab}15==(0|Qc)&&(vb=hb,wb=0|f[Ob>>2],xb=Db+(wb<<2)|0,yb=0|f[xb>>2],Vm(vb,yb)),Bb=0|f[Ob>>2],Cb=0|pn(Db,Bb,Ob),sb=Cb,Eb=sb,b=Eb;break;case 120:for(f[ic>>2]=0;;){if(Fb=0|f[ic>>2],!((0|Fb)<2))break;if(Hb=hb,Ib=0|Tm(Hb),Jb=0|f[ic>>2],Kb=Zb+(Jb<<2)|0,f[Kb>>2]=Ib,Lb=0|f[ic>>2],Mb=Zb+(Lb<<2)|0,Nb=0|f[Mb>>2],(0|Nb)<0){Qc=70;break a}if(Qb=0|f[ic>>2],Rb=Zb+(Qb<<2)|0,Sb=0|f[Rb>>2],Tb=Sb-48|0,!(Tb>>>0<10||(Vb=0|f[ic>>2],Wb=Zb+(Vb<<2)|0,Xb=0|f[Wb>>2],Yb=32|Xb,$b=Yb-97|0,$b>>>0<6))){Qc=23;break}ec=0|f[ic>>2],fc=ec+1|0,f[ic>>2]=fc}if(23==(0|Qc)&&(ac=hb,bc=0|f[ic>>2],cc=Zb+(bc<<2)|0,dc=0|f[cc>>2],Vm(ac,dc)),gc=0|f[ic>>2],hc=0|qn(Zb,gc,ic),sb=hc,jc=0|f[ic>>2],0==(0|jc)){lc=hb,Kk(lc,64224),b=0;break a}mc=sb,b=mc;break a;case 117:if(f[Ec>>2]=0,nc=hb,oc=0|Tm(nc),f[tc>>2]=oc,pc=0|f[tc>>2],(0|pc)<0)Qc=70;else{rc=0|f[tc>>2],sc=123==(0|rc);b:do{if(sc){for(f[Ec>>2]=0;;){if(uc=0|f[Ec>>2],!((0|uc)<9))break b;if(wc=hb,xc=0|Tm(wc),yc=0|f[Ec>>2],zc=tc+(yc<<2)|0,f[zc>>2]=xc,Ac=0|f[Ec>>2],Bc=tc+(Ac<<2)|0,Cc=0|f[Bc>>2],(0|Cc)<0){Qc=70;break a}if(Fc=0|f[Ec>>2],Gc=tc+(Fc<<2)|0,Hc=0|f[Gc>>2],125==(0|Hc))break b;if(Jc=0|f[Ec>>2],Kc=tc+(Jc<<2)|0,Lc=0|f[Kc>>2],Mc=Lc-48|0,!(Mc>>>0<10||(Oc=0|f[Ec>>2],d=tc+(Oc<<2)|0,e=0|f[d>>2],g=32|e,h=g-97|0,h>>>0<6)))break;r=0|f[Ec>>2],s=r+1|0,f[Ec>>2]=s}j=hb,Kk(j,64224),k=hb,l=0|f[Ec>>2],m=tc+(l<<2)|0,n=0|f[m>>2],Vm(k,n),b=0;break a}if(t=0|f[tc>>2],u=t-48|0,!(u>>>0<10||(w=0|f[tc>>2],x=32|w,y=x-97|0,y>>>0<6))){da=hb,ea=0|f[tc>>2],Vm(da,ea);break}for(f[Ec>>2]=1;;){if(A=0|f[Ec>>2],!((0|A)<4))break b;if(D=hb,E=0|Tm(D),F=0|f[Ec>>2],G=tc+(F<<2)|0,f[G>>2]=E,H=0|f[Ec>>2],I=tc+(H<<2)|0,J=0|f[I>>2],(0|J)<0){Qc=70;break a}if(L=0|f[Ec>>2],N=tc+(L<<2)|0,O=0|f[N>>2],P=O-48|0,!(P>>>0<10||(R=0|f[Ec>>2],S=tc+(R<<2)|0,T=0|f[S>>2],U=32|T,V=U-97|0,V>>>0<6)))break;aa=0|f[Ec>>2],ba=aa+1|0,f[Ec>>2]=ba}Y=hb,Z=0|f[Ec>>2],$=tc+(Z<<2)|0,_=0|f[$>>2],Vm(Y,_)}while(0);if(fa=0|f[Ec>>2],ga=0|qn(tc,fa,Ec),sb=ga,ia=0|f[Ec>>2],0==(0|ia)){ka=hb,Kk(ka,64224),b=0;break a}if(la=sb,ma=(0|la)<0,na=sb,oa=(0|na)>1114111,!(ma|oa||(pa=sb,qa=-2048&pa,55296==(0|qa)))){ua=sb,va=0-ua|0,b=va;break a}ta=hb,Kk(ta,64256),b=0}break;case 98:b=8;break;case 115:b=32;break;case 77:if(wa=hb,xa=0|Tm(wa),sb=xa,ya=45!=(0|xa),za=hb,ya){Kk(za,64224),Aa=hb,Ba=sb,Vm(Aa,Ba),b=0;break a}if(Ca=0|Tm(za),sb=Ca,92==(0|Ca)){Fa=hb,Ga=0|an(Fa),Ha=128|Ga,b=Ha;break a}Ia=sb,Ja=(0|Ia)<0,Ja?Qc=70:(Ka=sb,La=255&Ka,Ma=128|La,b=Ma);break;case 67:Na=hb,Pa=0|Tm(Na),sb=Pa,Qa=45!=(0|Pa),Qa?(Ra=hb,Kk(Ra,64224),Sa=hb,Ta=sb,Vm(Sa,Ta),b=0):Qc=64;break;case 99:Qc=64;break;case-2:case-1:Qc=70;break;default:fb=sb,b=fb}a:if(64==(0|Qc)){Ua=hb,Va=0|Tm(Ua),sb=Va,Wa=92==(0|Va);do{if(!Wa){if($a=sb,63==(0|$a)){b=127;break a}if(ab=sb,(0|ab)<0){Qc=70;break a}break}Xa=hb,Ya=0|an(Xa),sb=Ya}while(0);cb=sb,db=159&cb,b=db}return 70==(0|Qc)&&(eb=hb,Kk(eb,64224),b=0),gb=b,o=Rc,0|gb}function bn(a,b){a|=0,b|=0;var c=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,qa=0,ra=0,sa=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ja=0;Ja=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),M=Ja+16|0,q=a,B=b,sa=B,Da=(0|sa)>=0,Ha=B;do{if(!Da){if(e=0-Ha|0,B=e,g=B,h=(0|g)<128,i=B,h){j=255&i,d[M>>0]=j,X=1;break}if(k=(0|i)<2048,l=B,k){m=l>>6,n=192|m,r=255&n,d[M>>0]=r,s=B,t=63&s,u=128|t,v=255&u,w=M+1|0,d[w>>0]=v,X=2;break}if(x=(0|l)<65536,y=B,x){z=y>>12,A=224|z,C=255&A,d[M>>0]=C,D=B,E=D>>6,F=63&E,G=128|F,H=255&G,I=M+1|0,d[I>>0]=H,J=B,K=63&J,L=128|K,N=255&L,O=M+2|0,d[O>>0]=N,X=3;break}P=y>>18,Q=240|P,R=255&Q,d[M>>0]=R,S=B,T=S>>12,U=63&T,V=128|U,W=255&V,Y=M+1|0,d[Y>>0]=W,Z=B,$=Z>>6,_=63&$,aa=128|_,ba=255&aa,da=M+2|0,d[da>>0]=ba,ea=B,fa=63&ea,ga=128|fa,ia=255&ga,ja=M+3|0,d[ja>>0]=ia,X=4;break}c=255&Ha,d[M>>0]=c,X=1}while(0);if(ka=q,la=ka+1108|0,ma=0|f[la>>2],na=X,oa=ma+na|0,!(oa>>>0<=1024))return void(o=Ja);for(ha=0;;){if(qa=ha,ra=X,!(qa>>>0<ra>>>0))break;ua=ha,va=M+ua|0,wa=0|d[va>>0],xa=q,ya=xa+84|0,za=q,Aa=za+1108|0,Ba=0|f[Aa>>2],Ca=Ba+1|0,f[Aa>>2]=Ca,Ea=ya+Ba|0,d[Ea>>0]=wa,Fa=ha,Ga=Fa+1|0,ha=Ga}o=Ja}function cn(a){a|=0;var b=0,c=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,v=0;v=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),b=a,m=b,n=m+1108|0,q=0|f[n>>2],k=q,l=1023,r=k,s=l,t=(0|r)>(0|s),t&&(c=l,k=c,e=b,Kk(e,64196)),g=b,h=g+84|0,i=k,j=h+i|0,d[j>>0]=0,o=v}function dn(a){a|=0;var b=0,c=0,d=0,f=0;return f=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),b=a,c=b,d=c+84|0,o=f,0|d}function en(a){a|=0;var b=0,c=0,d=0,e=0,h=0;return h=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),b=a,c=b,d=c+1108|0,e=0|f[d>>2],o=h,0|e}function fn(a){a|=0;var b=0,c=0,e=0;return e=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),b=a,c=b,Wm(c,64139),o=e,1}function gn(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,n=0;n=o,o=o+272|0,(0|o)>=(0|p)&&ca(272),l=n,h=n+16|0,d=a,e=b,g=c,i=e,j=g,f[l>>2]=j,bw(h,256,i,l),k=d,Wm(k,h),o=n}function hn(a,b){a|=0,b|=0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,k=0;return k=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),c=a,d=b,e=c,f=c,g=d,h=0|Dm(f,g),i=0|Pk(e,51,h),o=k,0|i}function jn(a,b){a|=0,b|=0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0;return j=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),c=a,d=b,e=c,f=d,g=f,h=0|Pk(e,46,g),o=j,0|h}function kn(a,b){a|=0,b|=0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0;return j=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),c=a,d=b,e=c,f=d,g=f,h=0|Pk(e,45,g),o=j,0|h}function ln(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,t=0;return t=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),j=a,k=b,l=c,m=j,n=l,q=0|Ym(m,n),r=k,d=(0|q)==(0|r),e=k,f=(0|e)>=0,g=d?f:0,h=1&g,i=255&h,o=t,0|i}function mn(a){a|=0;var b=0,c=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,q=0;return q=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),b=a,e=b,g=e+84|0,h=b,i=h+1108|0,j=0|f[i>>2],k=j-1|0,l=g+k|0,m=0|d[l>>0],c=m<<24>>24,o=q,0|c}function nn(a,b){a|=0,b|=0;var c=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,z=0,A=0,B=0,C=0,D=0,E=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,S=0;return S=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),B=a,J=b,M=J,N=M>>>0<=12,O=J,c=O>>>0>=2,N&c&&(e=B,g=J,h=0|on(e,g),K=h,i=K,j=(0|i)<=50,k=K,l=(0|k)>=0,j&l&&(m=K,n=1728+(m<<4)|0,r=0|f[n>>2],L=r,s=B,t=0|d[s>>0],u=t<<24>>24,v=L,w=0|d[v>>0],x=w<<24>>24,(0|u)==(0|x)&&(z=B,A=z+1|0,C=L,D=C+1|0,E=0|gv(A,D),!(0!=(0|E)))))?(G=K,H=1728+(G<<4)|0,q=H,I=q,o=S,0|I):(q=0,I=q,o=S,0|I)}function on(a,b){a|=0,b|=0;var c=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,P=0;return P=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),q=a,B=b,I=B,H=I,J=H,c=J+-1|0,N=c>>>0<2,N||(K=q,L=K+2|0,M=0|d[L>>0],e=255&M,f=63883+e|0,g=0|d[f>>0],h=255&g,i=H,j=i+h|0,H=j),k=q,l=0|d[k>>0],m=255&l,n=63883+m|0,r=0|d[n>>0],s=255&r,t=H,u=t+s|0,H=u,v=H,w=q,x=B,y=x-1|0,z=w+y|0,A=0|d[z>>0],C=255&A,D=63883+C|0,E=0|d[D>>0],F=255&E,G=v+F|0,o=P,0|G}function pn(a,b,c){a|=0,b|=0,c|=0;var d=0,g=0,h=0,j=0,k=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0;for(M=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),A=a,F=b,G=c,J=A,H=J,I=0;;){if(K=F,d=K+-1|0,F=d,!(0!=(0|K)))break;if(g=H,h=0|f[g>>2],!((0|h)>=48))break;if(j=H,k=0|f[j>>2],!((0|k)<=55))break;m=I,n=m<<3,I=n,q=H,r=q+4|0,H=r,s=0|f[q>>2],t=s-48|0,u=I,v=u|t,I=v}return w=H,x=A,y=w,z=x,B=y-z|0,C=(0|B)/4&-1,D=G,f[D>>2]=C,E=I,o=M,0|E}function qn(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,h=0,i=0,k=0,l=0,m=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,Q=0;for(Q=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),A=a,J=b,K=c,O=A,L=O,M=0;;){if(d=J,e=d+-1|0,J=e,!(0!=(0|d)))break;if(h=L,i=0|f[h>>2],!(0!=(0|i)))break;if(k=L,l=0|f[k>>2],m=0|_v(64283,l),N=m,!(0!=(0|m)))break;q=M,r=q<<4,M=r,s=N,t=s,u=t-64283|0,v=15&u,w=M,x=w|v,M=x,y=L,z=y+4|0,L=z}return B=L,C=A,D=B,E=C,F=D-E|0,G=(0|F)/4&-1,H=K,f[H>>2]=G,I=M,o=Q,0|I}function rn(a){a|=0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0;return j=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),b=a,d=b,e=0|Lk(d,20),c=e,f=b,g=c,h=0|Pk(f,99,g),o=j,0|h}function sn(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,t=0;return t=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),j=a,k=b,l=c,m=j,n=j,q=j,r=k,d=l,e=0|Em(q,r,d),f=l,g=f,h=0|Pk(n,e,g),i=0|Pk(m,57,h),o=t,0|i}function tn(a,b,c,d){a|=0,b|=0,c|=0,d|=0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,u=0;return u=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),l=a,m=b,n=c,q=d,r=l,s=l,e=m,f=l,g=n,h=q,i=0|Pk(f,g,h),j=0|Pk(s,e,i),k=0|Pk(r,59,j),o=u,0|k}function un(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0;for(Ba=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),n=a,A=b,ra=n,ya=0|f[ra>>2],za=A,c=0|ki(ya,za),L=c,d=n,e=0|f[d>>2],g=L,h=0|ri(e,g,0),i=n,j=i+28|0,f[j>>2]=h,k=n,l=k+1396|0,m=0|f[l>>2],q=m>>>0>0,r=q?0:1,s=n,t=s+32|0,f[t>>2]=r,W=0;;){if(u=W,v=n,w=v+1396|0,x=0|f[w>>2],y=u>>>0<x>>>0,z=n,!y)break;if(B=z+1392|0,C=0|f[B>>2],D=W,E=C+(D<<2)|0,F=0|f[E>>2],G=L,H=(0|F)==(0|G),I=W,H){Aa=4;break}M=I+1|0,W=M}if(4==(0|Aa))return J=n,K=J+1400|0,f[K>>2]=I,void(o=Ba);N=z+1396|0,O=0|f[N>>2],P=O+1|0,f[N>>2]=P,Q=n,R=Q+1400|0,f[R>>2]=O,S=n,T=n,U=T+1396|0,V=0|f[U>>2],X=V<<2,Y=0|Lk(S,X),ga=Y,Z=n,$=Z+1392|0,_=0|f[$>>2],aa=0!=(0|_),aa&&(ba=ga,da=n,ea=da+1392|0,fa=0|f[ea>>2],ha=n,ia=ha+1396|0,ja=0|f[ia>>2],ka=ja<<2,_w(0|ba,0|fa,0|ka)),la=ga,ma=n,na=ma+1392|0,f[na>>2]=la,oa=L,pa=n,qa=pa+1392|0,sa=0|f[qa>>2],ta=n,ua=ta+1396|0,va=0|f[ua>>2],wa=va-1|0,xa=sa+(wa<<2)|0,f[xa>>2]=oa,o=Ba}function vn(a){a|=0;var b=0,c=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ia=0,ka=0;return ka=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),q=a,X=q,fa=0|dt(X),B=fa,ga=B,0!=(0|ga)?(ia=B,c=0|ft(ia,1408),M=c,e=M,g=0!=(0|e),g?(h=M,$w(0|h,73460,1408),i=q,j=M,f[j>>2]=i,k=B,l=M,m=l+4|0,f[m>>2]=k,n=M,r=n+16|0,f[r>>2]=0,s=M,t=s+12|0,f[t>>2]=0,u=M,v=u+20|0,f[v>>2]=0,w=M,x=w+72|0,y=0|d[x>>0],z=-2&y,A=1|z,d[x>>0]=A,C=M,D=C+68|0,f[D>>2]=0,E=M,F=E+64|0,f[F>>2]=0,G=M,H=G+1148|0,I=0|d[H>>0],J=-3&I,d[H>>0]=J,K=M,L=K+32|0,f[L>>2]=1,N=M,O=N+36|0,f[O>>2]=0,P=M,Q=P+44|0,f[Q>>2]=0,R=M,S=R+1120|0,f[S>>2]=0,T=M,U=T+1112|0,f[U>>2]=0,V=M,W=V+1124|0,f[W>>2]=0,Y=M,Z=Y+1400|0,f[Z>>2]=-1,$=M,_=$+1392|0,f[_>>2]=0,aa=M,ba=aa+1396|0,f[ba>>2]=0,da=M,b=da,ea=b,o=ka,0|ea):(b=0,ea=b,o=ka,0|ea)):(b=0,ea=b,o=ka,0|ea)}function wn(a){a|=0;var b=0,c=0,d=0,e=0,h=0;h=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),b=a,c=b,d=c+4|0,e=0|f[d>>2],et(e),o=h}function xn(a){a|=0;var b=0,c=0,d=0,f=0;return f=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),b=a,c=b,d=0|Lc(c,1,32),o=f,0|d}function yn(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,l=0;l=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),c=a,d=b,e=c,g=d,h=0|f[g>>2],xc(e,h),i=c,j=d,xc(i,j),o=l}function zn(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,E=0;return E=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),w=a,x=b,y=c,B=y,C=0!=(0|B),C&&(d=y,e=0|$v(d),z=e,g=w,h=z,i=h+1|0,j=0|Yf(g,i),A=j,k=A,l=y,m=z,n=m+1|0,$w(0|k,0|l,0|n),q=A,r=x,s=r+8|0,f[s>>2]=q),t=x,u=t+8|0,v=0|f[u>>2],o=E,0|v}function An(a,b,c,d){a|=0,b|=0,c|=0,d|=0;var e=0,g=0,h=0,i=0,k=0,l=0,m=0,n=0,q=0,s=0;s=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),k=b,l=c,m=d,n=l,q=k,e=q+16|0,f[e>>2]=n,g=m,h=k,i=h+20|0,f[i>>2]=g,o=s}function Bn(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,A=0;return A=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),s=a,t=b,u=t,v=65535&u,w=s,x=w+1396|0,y=0|f[x>>2],c=v>>>0>=y>>>0,c?(n=0,r=n,o=A,0|r):(d=s,e=0|f[d>>2],g=s,h=g+1392|0,i=0|f[h>>2],j=t,k=65535&j,l=i+(k<<2)|0,m=0|f[l>>2],q=0|ri(e,m,0),n=q,r=n,o=A,0|r)}function Cn(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,B=0;return B=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),u=a,v=b,w=c,y=u,z=0|vn(y),x=z,d=x,e=0!=(0|d),e?(g=x,h=g+16|0,f[h>>2]=0,i=x,j=i+12|0,f[j>>2]=0,k=v,l=x,m=l+20|0,f[m>>2]=k,n=x,q=w,Ek(n,q),r=x,t=r,s=t,o=B,0|s):(t=0,s=t,o=B,0|s)}function Dn(a,b,c,d){a|=0,b|=0,c|=0,d|=0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,q=0;q=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),h=b,i=c,j=d,k=h,l=h,m=i,e=j,f=0|Cn(l,m,e),g=j,En(a,k,f,g),o=q}function En(a,b,c,e){a|=0,b|=0,c|=0,e|=0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ha=0,ia=0,ja=0,la=0,ma=0,na=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Mb=0;if(Mb=o,o=o+368|0,(0|o)>=(0|p)&&ca(368),h=Mb+104|0,g=Mb+96|0,Jb=Mb,yb=Mb+64|0,v=Mb+112|0,R=Mb+48|0,Y=Mb+40|0,Z=Mb+32|0,$=Mb+24|0,_=Mb+16|0,aa=Mb+8|0,xa=b,Ia=c,Ta=e,ba=xa,da=ba+32|0,ea=0|f[da>>2],cb=ea,i=0,fa=Ia,!(0!=(0|fa)))return Fn(a),void(o=Mb);if(ha=Ia,ia=ha+1144|0,ja=0|f[ia>>2],0!=(0|ja)&&(la=Ia,ma=la+1136|0,na=0|f[ma>>2],!(0!=(0|na)))){if(Wa=xa,Xa=Ia,Ya=0|Wt(Wa,Xa),nb=Ya,Za=Ia,wn(Za),$a=nb,0==(0|$a))return ab=xa,bb=xa,db=0|sp(bb,68028),eb=xa,qg($,eb,64490,13),f[h>>2]=0|f[$>>2],f[h+4>>2]=0|f[$+4>>2],wr(_,ab,db,h),fb=0|f[_>>2],gb=xa,hb=gb+20|0,f[hb>>2]=fb,Fn(a),void(o=Mb);ib=Ta,jb=0!=(0|ib);do{if(jb){if(kb=Ta,lb=kb+28|0,mb=0|d[lb>>0],ob=(255&mb)>>>1,pb=1&ob,qb=pb<<24>>24!=0,qb&&(rb=xa,sb=nb,ir(rb,sb)),tb=Ta,ub=tb+28|0,vb=0|d[ub>>0],wb=(255&vb)>>>2,xb=1&wb,xb<<24>>24!=0)return Ab=nb,Gn(a,Ab),void(o=Mb);if(Bb=Ta,Cb=Bb+24|0,Db=0|f[Cb>>2],Eb=0!=(0|Db),Eb&&(Fb=Ta,Gb=Fb+24|0,Hb=0|f[Gb>>2],cb=Hb),Ib=Ta,j=Ib+28|0,k=0|d[j>>0],l=(255&k)>>>3,m=1&l,n=m<<24>>24!=0,q=Ta,n){r=q+4|0,s=0|f[r>>2],t=s+1|0,i=t;break}u=q+28|0,w=0|d[u>>0],x=-9&w,y=8|x,d[u>>0]=y;break}}while(0);return z=cb,A=nb,B=A+16|0,f[B>>2]=z,C=xa,D=C+12|0,E=0|f[D>>2],F=E+16|0,H=0|f[F>>2],I=0!=(0|H),I&&(J=cb,K=xa,L=K+12|0,M=0|f[L>>2],N=M+16|0,O=0|f[N>>2],P=O+44|0,f[P>>2]=J),Q=xa,S=nb,T=i,Dk(aa,Q,S,T),f[yb>>2]=0|f[aa>>2],f[yb+4>>2]=0|f[aa+4>>2],U=xa,V=U+20|0,W=0|f[V>>2],X=0!=(0|W),X?(Hn(a),void(o=Mb)):(f[a>>2]=0|f[yb>>2],f[a+4>>2]=0|f[yb+4>>2],void(o=Mb))}return pa=Ia,qa=pa+1148|0,ra=0|d[qa>>0],sa=(255&ra)>>>1,ta=1&sa,ua=ta<<24>>24!=0,ua?(va=Ia,wa=va+1152|0,ya=0|f[wa>>2],za=Ia,Aa=za+1152|0,Ba=Aa+8|0,Ca=0|f[Ba>>2],f[Jb>>2]=ya,Kb=Jb+4|0,f[Kb>>2]=Ca,Da=0|bw(v,256,64477,Jb),G=Da,Ea=xa,Fa=xa,Ga=0|sp(Fa,68040),Ha=G,vr(R,Ea,Ga,v,Ha),Ja=0|f[R>>2],Ka=xa,La=Ka+20|0,f[La>>2]=Ja,Ma=Ia,wn(Ma),Fn(a),void(o=Mb)):(Na=xa,Oa=xa,Pa=0|sp(Oa,68040),Qa=xa,qg(Y,Qa,59902,12),f[g>>2]=0|f[Y>>2],f[g+4>>2]=0|f[Y+4>>2],wr(Z,Na,Pa,g),Ra=0|f[Z>>2],Sa=xa,Ua=Sa+20|0,f[Ua>>2]=Ra,Va=Ia,wn(Va),Fn(a),void(o=Mb))}function Fn(a){a|=0;var b=0,c=0,e=0;e=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),b=e,c=b+4|0,f[c>>2]=5,f[b>>2]=0,f[a>>2]=0|f[b>>2],f[a+4>>2]=0|f[b+4>>2],o=e}function Gn(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,l=0;l=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),d=l,c=b,e=c,g=0|f[e>>2],h=255&g,i=d+4|0,f[i>>2]=h,j=c,f[d>>2]=j,f[a>>2]=0|f[d>>2],f[a+4>>2]=0|f[d+4>>2],o=l}function Hn(a){a|=0;var b=0,c=0,e=0;e=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),b=e,c=b+4|0,f[c>>2]=0,f[b>>2]=0,f[a>>2]=0|f[b>>2],f[a+4>>2]=0|f[b+4>>2],o=e}function In(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0;l=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),d=b,e=c,g=d,h=e,i=0|Jn(g,h),f=i,j=f,Kn(a,j),o=l}function Jn(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,L=0;return L=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),n=a,A=b,G=A,H=(0|G)>536870911,H&&(I=n,J=n,c=0|sp(J,69160),Ar(I,c,64504)),d=A,e=d<<3,F=e,g=F,h=A,i=(0|g)<(0|h),j=n,k=n,i?(l=0|sp(k,69160),Ar(j,l,64504),0):(m=k+52|0,q=0|f[m>>2],r=0|Tc(j,14,q),E=r,s=n,t=F,u=0|Jc(s,t),v=E,w=v+20|0,f[w>>2]=u,x=A,y=E,z=y+16|0,f[z>>2]=x,B=E,C=B+12|0,f[C>>2]=0,D=E,o=L,0|D)}function Kn(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,l=0;l=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),d=l,c=b,e=c,g=0|f[e>>2],h=255&g,i=d+4|0,f[i>>2]=h,j=c,f[d>>2]=j,f[a>>2]=0|f[d>>2],f[a+4>>2]=0|f[d+4>>2],o=l}function Ln(a,b){a|=0,b|=0;var c=0,d=0,f=0;f=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),c=b,d=c,In(a,d,0),o=f}function Mn(a,b,c,d){a|=0,b|=0,c|=0,d|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,y=0;y=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),r=b,s=c,t=d,v=r,w=s,e=0|Jn(v,w),u=e,g=u,h=g+20|0,i=0|f[h>>2],j=t,k=s,Nn(i,j,k),l=s,m=u,n=m+12|0,f[n>>2]=l,q=u,Kn(a,q),o=y}function Nn(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,w=0;for(w=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),m=a,n=b,q=c,r=0;;){if(s=r,t=q,!((0|s)<(0|t)))break;d=m,e=r,g=d+(e<<3)|0,h=n,i=r,j=h+(i<<3)|0,f[g>>2]=0|f[j>>2],f[g+4>>2]=0|f[j+4>>2],k=r,l=k+1|0,r=l}o=w}function On(a,b,c,d){a|=0,b|=0,c|=0,d|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,w=0;w=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),n=b,r=n,s=0|Jn(r,2),q=s,t=q,u=t+20|0,e=0|f[u>>2],f[e>>2]=0|f[c>>2],f[e+4>>2]=0|f[c+4>>2],g=q,h=g+20|0,i=0|f[h>>2],j=i+8|0,f[j>>2]=0|f[d>>2],f[j+4>>2]=0|f[d+4>>2],k=q,l=k+12|0,f[l>>2]=2,m=q,Kn(a,m),o=w}function Pn(a,b){a|=0,b|=0;var c=0,d=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0;if(za=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),n=a,A=b,wa=A,xa=0|f[wa>>2],c=xa>>>11,d=256&c,!(0!=(0|d)))return void(o=za);g=A,h=g+16|0,i=0|f[h>>2],L=i,j=L,k=0|f[j>>2],l=1==(0|k),l?(m=A,q=m+20|0,r=0|f[q>>2],s=L,t=s+8|0,u=0|f[t>>2],v=(0|r)==(0|u),v?(w=L,x=w+8|0,y=0|f[x>>2],z=A,B=z+20|0,f[B>>2]=y,C=A,D=C+12|0,E=0|f[D>>2],F=A,G=F+16|0,f[G>>2]=E,H=n,I=L,xc(H,I)):ya=5):ya=5,5==(0|ya)&&(J=A,K=J+20|0,M=0|f[K>>2],ga=M,N=A,O=N+12|0,P=0|f[O>>2],Q=P<<3,ra=Q,R=n,S=ra,T=0|Jc(R,S),W=T,U=ga,V=0!=(0|U),V&&(X=W,Y=ga,Z=A,$=Z+12|0,_=0|f[$>>2],Nn(X,Y,_)),aa=W,ba=A,da=ba+20|0,f[da>>2]=aa,ea=A,fa=ea+12|0,ha=0|f[fa>>2],ia=A,ja=ia+16|0,f[ja>>2]=ha,ka=n,la=L,Qn(ka,la)),ma=A,na=0|f[ma>>2],oa=na>>>11,pa=-257&oa,qa=0|f[ma>>2],sa=2097151&pa,ta=sa<<11,ua=2047&qa,va=ua|ta,f[ma>>2]=va,o=za}function Qn(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,u=0;if(u=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),j=a,k=b,l=k,m=0|f[l>>2],n=m+-1|0,f[l>>2]=n,q=k,r=0|f[q>>2],!(0==(0|r)))return void(o=u);c=j,d=k,e=d+8|0,g=0|f[e>>2],xc(c,g),h=j,i=k,xc(h,i),o=u}function Rn(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,j=0,k=0,l=0,n=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Z=0,$=0;if($=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),n=a,A=b,U=A,V=U+16|0,W=0|f[V>>2],L=W,X=L,(0|X)<8)return void(o=$);if(c=L,d=A,e=d+12|0,g=0|f[e>>2],h=5*g|0,(0|c)<=(0|h))return void(o=$);for(;;){if(j=L,k=(0|j)/2&-1,L=k,l=L,(0|l)<4){Z=4;break}if(q=L,r=A,s=r+12|0,t=0|f[s>>2],u=5*t|0,!((0|q)>(0|u)))break}return 4==(0|Z)&&(L=4),w=L,x=A,y=x+12|0,z=0|f[y>>2],(0|w)>(0|z)?(C=L,D=A,E=D+16|0,F=0|f[E>>2],(0|C)<(0|F)?(H=L,I=A,J=I+16|0,f[J>>2]=H,K=n,M=A,N=M+20|0,O=0|f[N>>2],P=L,Q=P<<3,R=0|Hc(K,O,Q),S=A,T=S+20|0,f[T>>2]=R,void(o=$)):void(o=$)):void(o=$)}function Sn(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,U=0;for(U=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),A=a,L=b,O=c,R=L,S=R+16|0,d=0|f[S>>2],P=d,e=O,g=(0|e)>536870911,g&&(h=A,i=A,j=0|sp(i,69160),Ar(h,j,64504)),k=P,l=0==(0|k),l&&(P=4);;){if(m=P,n=O,q=(0|m)<(0|n),r=P,!q)break;s=r<<1,P=s}if(t=(0|r)>536870911,t&&(P=536870911),u=P,v=L,w=v+16|0,x=0|f[w>>2],!((0|u)>(0|x)))return void(o=U);z=A,B=L,C=B+20|0,D=0|f[C>>2],E=P,F=E<<3,G=0|Hc(z,D,F),Q=G,H=P,I=L,J=I+16|0,f[J>>2]=H,K=Q,M=L,N=M+20|0,f[N>>2]=K,o=U}function Tn(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,j=0,k=0,m=0;for(m=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),e=m,c=a,d=b,Un(e);;){if(g=d,h=g+-1|0,d=h,!(0!=(0|g)))break;j=c,k=j+8|0,c=k,f[j>>2]=0|f[e>>2],f[j+4>>2]=0|f[e+4>>2]}o=m}function Un(a){a|=0;var b=0,c=0,e=0;e=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),b=e,c=b+4|0,f[c>>2]=0,f[b>>2]=0,f[a>>2]=0|f[b>>2],f[a+4>>2]=0|f[b+4>>2],o=e}function Vn(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,s=0;s=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),i=a,k=0|f[c>>2],j=k,l=i,m=0|f[b>>2],n=j,q=n+20|0,d=0|f[q>>2],e=j,g=e+12|0,h=0|f[g>>2],Wn(l,m,d,h),o=s}function Wn(a,b,c,d){a|=0,b|=0,c|=0,d|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,Q=0;Q=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),J=a,K=b,L=c,M=d,O=K,e=O+12|0,g=0|f[e>>2],h=M,i=g+h|0,N=i,j=J,k=K,Pn(j,k),l=K,m=l+16|0,n=0|f[m>>2],q=N,r=(0|n)<(0|q),r&&(s=J,t=K,u=N,Sn(s,t,u)),v=K,w=v+20|0,x=0|f[w>>2],y=K,z=y+12|0,A=0|f[z>>2],B=x+(A<<3)|0,C=L,D=M,Nn(B,C,D),E=J,F=K,Zc(E,F),G=N,H=K,I=H+12|0,f[I>>2]=G,o=Q}function Xn(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,s=0;s=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),i=a,k=0|f[c>>2],j=k,l=i,m=0|f[b>>2],n=j,q=n+20|0,d=0|f[q>>2],e=j,g=e+12|0,h=0|f[g>>2],Yn(l,m,d,h),o=s}function Yn(a,b,c,d){a|=0,b|=0,c|=0,d|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,G=0;G=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),z=a,A=b,B=c,C=d,D=z,E=A,Pn(D,E),e=A,g=e+16|0,h=0|f[g>>2],i=C,j=(0|h)<(0|i),j&&(k=z,l=A,m=C,Sn(k,l,m)),n=A,q=n+20|0,r=0|f[q>>2],s=B,t=C,Nn(r,s,t),u=z,v=A,Zc(u,v),w=C,x=A,y=x+12|0,f[y>>2]=w,o=G}function Zn(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0;if(N=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),A=a,H=0|f[b>>2],G=H,I=A,J=G,Pn(I,J),K=G,L=K+12|0,d=0|f[L>>2],e=G,g=e+16|0,h=0|f[g>>2],i=(0|d)==(0|h),i&&(j=A,k=G,l=G,m=l+12|0,n=0|f[m>>2],q=n+1|0,Sn(j,k,q)),r=G,s=r+20|0,t=0|f[s>>2],u=G,v=u+12|0,w=0|f[v>>2],x=w+1|0,f[v>>2]=x,y=t+(w<<3)|0,f[y>>2]=0|f[c>>2],f[y+4>>2]=0|f[c+4>>2],z=c+4|0,B=0|f[z>>2],B>>>0<8)return void(o=N);D=A,E=G,F=0|f[c>>2],Yc(D,E,F),o=N}function $n(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,n=0,q=0,r=0,s=0,t=0,u=0,w=0;return w=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),b,q=0|f[c>>2],n=q,r=n,s=r+12|0,t=0|f[s>>2],u=0==(0|t),u?(Un(a),void(o=w)):(d=n,e=d+20|0,g=0|f[e>>2],h=n,i=h+12|0,j=0|f[i>>2],k=j+-1|0,f[i>>2]=k,l=g+(k<<3)|0,f[a>>2]=0|f[l>>2],f[a+4>>2]=0|f[l+4>>2],void(o=w))}function _n(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,fa=0;if(fa=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),W=fa+8|0,A=b,ba=0|f[c>>2],L=ba,da=L,d=da+12|0,e=0|f[d>>2],0==(0|e))return Un(a),void(o=fa);h=L,i=0|f[h>>2],j=i>>>11,k=256&j,l=0!=(0|k);do{if(!l){if(z=L,B=z+12|0,C=0|f[B>>2],(0|C)>10){E=A,F=L,ao(E,F);break}for(G=L,H=G+20|0,I=0|f[H>>2],_=I,J=L,K=J+12|0,M=0|f[K>>2],aa=M,N=_,f[W>>2]=0|f[N>>2],f[W+4>>2]=0|f[N+4>>2];;){if(O=aa,P=O+-1|0,aa=P,!(0!=(0|P)))break;R=_,S=_,T=S+8|0,f[R>>2]=0|f[T>>2],f[R+4>>2]=0|f[T+4>>2],U=_,V=U+8|0,_=V}return X=L,Y=X+12|0,Z=0|f[Y>>2],$=Z+-1|0,f[Y>>2]=$,f[a>>2]=0|f[W>>2],f[a+4>>2]=0|f[W+4>>2],void(o=fa)}}while(0);m=L,n=m+20|0,q=0|f[n>>2],f[W>>2]=0|f[q>>2],f[W+4>>2]=0|f[q+4>>2],r=L,s=r+20|0,t=0|f[s>>2],u=t+8|0,f[s>>2]=u,v=L,w=v+12|0,x=0|f[w>>2],y=x+-1|0,f[w>>2]=y,f[a>>2]=0|f[W>>2],f[a+4>>2]=0|f[W+4>>2],o=fa}function ao(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,ha=0;if(ha=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),n=a,A=b,W=A,ba=0|f[W>>2],da=ba>>>11,ea=256&da,0!=(0|ea))return void(o=ha);c=n,d=0|Jc(c,12),L=d,e=L,f[e>>2]=1,g=A,h=g+16|0,i=0|f[h>>2],j=A,k=j+12|0,l=0|f[k>>2],m=(0|i)>(0|l),m?(q=n,r=A,s=r+20|0,t=0|f[s>>2],u=A,v=u+12|0,w=0|f[v>>2],x=w<<3,y=x+1|0,z=0|Hc(q,t,y),B=L,C=B+8|0,f[C>>2]=z,D=A,E=D+20|0,f[E>>2]=z):(F=A,G=F+20|0,H=0|f[G>>2],I=L,J=I+8|0,f[J>>2]=H),K=A,M=K+12|0,N=0|f[M>>2],O=L,P=O+4|0,f[P>>2]=N,Q=L,R=A,S=R+16|0,f[S>>2]=Q,T=A,U=0|f[T>>2],V=U>>>11,X=256|V,Y=0|f[T>>2],Z=2097151&X,$=Z<<11,_=2047&Y,aa=_|$,f[T>>2]=aa,o=ha}function bo(a,b,c,d){a|=0,b|=0,c|=0,d|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0;if(Ba=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),L=b,ga=0|f[c>>2],W=ga,ra=W,ya=0|f[ra>>2],za=ya>>>11,e=256&za,g=0!=(0|e),g?(h=W,i=h+16|0,j=0|f[i>>2],k=0|f[j>>2],l=1==(0|k),l?(m=W,n=m+20|0,q=0|f[n>>2],r=W,s=r+16|0,t=0|f[s>>2],u=t+8|0,v=0|f[u>>2],w=q,x=v,y=w-x|0,z=(0|y)/8&-1,A=(0|z)>=1,A?(B=W,C=B+20|0,D=0|f[C>>2],E=D+-8|0,f[C>>2]=E,F=W,G=F+20|0,H=0|f[G>>2],f[H>>2]=0|f[d>>2],f[H+4>>2]=0|f[d+4>>2]):Aa=5):Aa=5):Aa=5,5==(0|Aa)&&(I=L,J=W,Pn(I,J),K=W,M=K+16|0,N=0|f[M>>2],O=W,P=O+12|0,Q=0|f[P>>2],R=Q+1|0,S=(0|N)<(0|R),S&&(T=L,U=W,V=W,X=V+12|0,Y=0|f[X>>2],Z=Y+1|0,Sn(T,U,Z)),$=W,_=$+20|0,aa=0|f[_>>2],ba=aa+8|0,da=W,ea=da+20|0,fa=0|f[ea>>2],ha=W,ia=ha+12|0,ja=0|f[ia>>2],co(ba,fa,ja),ka=W,la=ka+20|0,ma=0|f[la>>2],f[ma>>2]=0|f[d>>2],f[ma+4>>2]=0|f[d+4>>2]),na=W,oa=na+12|0,pa=0|f[oa>>2],qa=pa+1|0,f[oa>>2]=qa,sa=d+4|0,ta=0|f[sa>>2],ta>>>0<8)return f[a>>2]=0|f[c>>2],f[a+4>>2]=0|f[c+4>>2],void(o=Ba);va=L,wa=W,xa=0|f[d>>2],Yc(va,wa,xa),f[a>>2]=0|f[c>>2],f[a+4>>2]=0|f[c+4>>2],o=Ba}function co(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,t=0,u=0,v=0,w=0,x=0,y=0,A=0,B=0,C=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,P=0;if(P=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),A=a,I=b,J=c,K=A,L=I,K>>>0>L>>>0&&(N=A,d=I,e=J,g=d+(e<<3)|0,N>>>0<g>>>0)){for(i=J,j=A,k=j+(i<<3)|0,A=k,l=J,m=I,n=m+(l<<3)|0,I=n;;){if(q=J,r=q+-1|0,J=r,!(q>>>0>0))break;t=A,u=t+-8|0,A=u,v=I,w=v+-8|0,I=w,f[u>>2]=0|f[w>>2],f[u+4>>2]=0|f[w+4>>2]}return void(o=P)}if(x=A,y=I,!((0|x)!=(0|y)))return void(o=P);for(;;){if(B=J,C=B+-1|0,J=C,!(B>>>0>0))break;E=A,F=E+8|0,A=F,G=I,H=G+8|0,I=H,f[E>>2]=0|f[G>>2],f[E+4>>2]=0|f[G+4>>2]}o=P}function eo(a,b,c,d){a|=0,b|=0,c|=0,d|=0;var e=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,q=0,r=0,t=0,u=0,v=0,w=0,x=0,z=0,A=0,B=0,C=0,D=0,F=0;if(F=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),b,z=d,B=0|f[c>>2],A=B,C=z,D=(0|C)<0,D&&(e=A,g=e+12|0,h=0|f[g>>2],i=z,j=i+h|0,z=j),k=z,!((0|k)<0||(m=A,n=m+12|0,q=0|f[n>>2],r=z,(0|q)<=(0|r))))return t=A,u=t+20|0,v=0|f[u>>2],w=z,x=v+(w<<3)|0,f[a>>2]=0|f[x>>2],f[a+4>>2]=0|f[x+4>>2],void(o=F);Un(a),o=F}function fo(a,b,c,e){a|=0,b|=0,c|=0,e|=0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,xa=0;if(xa=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),va=xa,sa=xa+8|0,M=a,X=c,ta=0|f[b>>2],ha=ta,ua=M,g=ha,Pn(ua,g),h=X,i=(0|h)<0,i&&(j=ha,k=j+12|0,l=0|f[k>>2],m=X,n=m+l|0,X=n,q=X,(0|q)<0&&(s=M,t=M,u=0|sp(t,69011),v=X,w=ha,x=w+12|0,y=0|f[x>>2],z=v-y|0,go(sa,z),d[va>>0]=0|d[sa>>0],d[va+1>>0]=0|d[sa+1>>0],d[va+2>>0]=0|d[sa+2>>0],d[va+3>>0]=0|d[sa+3>>0],d[va+4>>0]=0|d[sa+4>>0],d[va+5>>0]=0|d[sa+5>>0],d[va+6>>0]=0|d[sa+6>>0],d[va+7>>0]=0|d[sa+7>>0],Dr(s,u,64523,va))),A=ha,B=A+12|0,C=0|f[B>>2],D=X,E=(0|C)<=(0|D),E&&(F=ha,G=F+16|0,H=0|f[G>>2],I=X,J=(0|H)<=(0|I),J&&(K=M,L=ha,N=X,O=N+1|0,Sn(K,L,O)),P=ha,Q=P+20|0,R=0|f[Q>>2],S=ha,T=S+12|0,U=0|f[T>>2],V=R+(U<<3)|0,W=X,Y=W+1|0,Z=ha,$=Z+12|0,_=0|f[$>>2],aa=Y-_|0,Tn(V,aa),ba=X,da=ba+1|0,ea=ha,fa=ea+12|0,f[fa>>2]=da),ga=ha,ia=ga+20|0,ja=0|f[ia>>2],ka=X,la=ja+(ka<<3)|0,f[la>>2]=0|f[e>>2],f[la+4>>2]=0|f[e+4>>2],ma=e+4|0,na=0|f[ma>>2],na>>>0<8)return void(o=xa);pa=M,qa=ha,ra=0|f[e>>2],Yc(pa,qa,ra),o=xa}function go(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,i=0;i=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),d=i,c=b,e=d+4|0,f[e>>2]=3,g=c,f[d>>2]=g,f[a>>2]=0|f[d>>2],f[a+4>>2]=0|f[d+4>>2],o=i}function ho(a,b,c,e,g,h){a|=0,b|=0,c|=0,e|=0,g|=0,h|=0;var i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,$b=0,_b=0,ac=0,bc=0,cc=0,dc=0;for(dc=o,o=o+64|0,(0|o)>=(0|p)&&ca(64),bc=dc,ma=dc+8|0,lb=b,wb=e,Hb=g,va=0|f[c>>2],Sb=va,wa=lb,xa=Sb,Pn(wa,xa),ya=Hb,za=(0|ya)<0,za&&(Aa=lb,Ba=lb,Ca=0|sp(Ba,69011),Da=Hb,go(ma,Da),d[bc>>0]=0|d[ma>>0],d[bc+1>>0]=0|d[ma+1>>0],d[bc+2>>0]=0|d[ma+2>>0],d[bc+3>>0]=0|d[ma+3>>0],d[bc+4>>0]=0|d[ma+4>>0],d[bc+5>>0]=0|d[ma+5>>0],d[bc+6>>0]=0|d[ma+6>>0],d[bc+7>>0]=0|d[ma+7>>0],Dr(Aa,Ca,64545,bc)),Ea=wb,Fa=(0|Ea)<0,Fa&&(Ga=Sb,Ha=Ga+12|0,Ia=0|f[Ha>>2],Ja=wb,Ka=Ja+Ia|0,wb=Ka,La=wb,(0|La)<0&&(Na=lb,Oa=lb,Pa=0|sp(Oa,69011),Ar(Na,Pa,64566))),Qa=Sb,Ra=Qa+12|0,Sa=0|f[Ra>>2],Ta=Hb,Ua=(0|Sa)<(0|Ta),Ua?cc=8:(Va=Sb,Wa=Va+12|0,Xa=0|f[Wa>>2],Ya=wb,Za=Hb,$a=Ya+Za|0,(0|Xa)<(0|$a)&&(cc=8)),8==(0|cc)&&(ab=Sb,bb=ab+12|0,cb=0|f[bb>>2],db=wb,eb=cb-db|0,Hb=eb),fb=wb,gb=Hb,hb=fb+gb|0,i=hb,ib=h+4|0,jb=0|f[ib>>2],kb=14==(0|jb),kb?(mb=0|f[h>>2],nb=mb+12|0,ob=0|f[nb>>2],aa=ob,pb=0|f[h>>2],qb=pb+20|0,rb=0|f[qb>>2],G=rb):(aa=1,G=h),sb=wb,tb=aa,ub=sb+tb|0,v=ub,vb=i,xb=Sb,yb=xb+12|0,zb=0|f[yb>>2],Ab=(0|vb)<(0|zb),Ab&&(Bb=Sb,Cb=Bb+12|0,Db=0|f[Cb>>2],Eb=i,Fb=Db-Eb|0,Gb=v,Ib=Gb+Fb|0,v=Ib),Jb=v,Kb=Sb,Lb=Kb+16|0,Mb=0|f[Lb>>2],Nb=(0|Jb)>(0|Mb),Nb&&(Ob=lb,Pb=Sb,Qb=v,Sn(Ob,Pb,Qb)),Rb=wb,Tb=Sb,Ub=Tb+12|0,Vb=0|f[Ub>>2],Wb=(0|Rb)>(0|Vb),Wb?(Xb=Sb,Yb=Xb+20|0,Zb=0|f[Yb>>2],$b=Sb,_b=$b+12|0,ac=0|f[_b>>2],j=Zb+(ac<<3)|0,k=wb,l=Sb,m=l+12|0,n=0|f[m>>2],q=k-n|0,Tn(j,q)):(r=wb,s=Sb,t=s+12|0,u=0|f[t>>2],(0|r)<(0|u)&&(x=Sb,y=x+20|0,z=0|f[y>>2],A=wb,B=z+(A<<3)|0,C=aa,D=B+(C<<3)|0,E=Sb,F=E+20|0,H=0|f[F>>2],I=i,J=H+(I<<3)|0,K=Sb,L=K+12|0,M=0|f[L>>2],N=i,O=M-N|0,co(D,J,O))),R=0;;){if(P=R,Q=aa,!((0|P)<(0|Q)))break;T=Sb,U=T+20|0,V=0|f[U>>2],W=wb,X=V+(W<<3)|0,Y=R,Z=X+(Y<<3)|0,$=G,_=R,ba=$+(_<<3)|0,f[Z>>2]=0|f[ba>>2],f[Z+4>>2]=0|f[ba+4>>2],da=G,ea=R,fa=da+(ea<<3)|0,ga=fa+4|0,ha=0|f[ga>>2],ia=ha>>>0<8,ia||(ja=lb,ka=Sb,la=G,na=R,oa=la+(na<<3)|0,pa=0|f[oa>>2],Yc(ja,ka,pa)),qa=R,ra=qa+1|0,R=ra}sa=v,ta=Sb,ua=ta+12|0,f[ua>>2]=sa,f[a>>2]=0|f[c>>2],f[a+4>>2]=0|f[c+4>>2],o=dc}function io(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,n=0,q=0,r=0,s=0,u=0;return u=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),e=u+16|0,d=u+8|0,s=u,j=b,k=c+4|0,l=0|f[k>>2],14==(0|l)?(f[a>>2]=0|f[c>>2],f[a+4>>2]=0|f[c+4>>2],void(o=u)):(n=j,q=j,r=0|ji(q,64588,4),f[d>>2]=0|f[c>>2],f[d+4>>2]=0|f[c+4>>2],g=0|cq(n,d,r),h=g<<24>>24!=0,i=j,h?(f[e>>2]=0|f[c>>2],f[e+4>>2]=0|f[c+4>>2],Xj(a,i,e,64588,0,s),void(o=u)):(Mn(a,i,1,c),void(o=u)))}function jo(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,K=0;K=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),A=b,E=0|f[c>>2],D=E,F=D,G=0|f[F>>2],H=G>>>11,I=256&H,d=0!=(0|I),e=A,g=D,d?(h=g+16|0,i=0|f[h>>2],Qn(e,i),j=D,k=0|f[j>>2],l=k>>>11,m=-257&l,n=0|f[j>>2],q=2097151&m,r=q<<11,s=2047&n,t=s|r,f[j>>2]=t):(u=g+20|0,v=0|f[u>>2],xc(e,v)),w=D,x=w+12|0,f[x>>2]=0,y=D,z=y+16|0,f[z>>2]=0,B=D,C=B+20|0,f[C>>2]=0,f[a>>2]=0|f[c>>2],f[a+4>>2]=0|f[c+4>>2],o=K}function ko(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,r=0;r=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),d=r+8|0,h=c,i=h,j=(0|i)<0,j&&(k=0|f[b>>2],l=k+12|0,m=0|f[l>>2],n=h,e=n+m|0,h=e),g=h,f[d>>2]=0|f[b>>2],f[d+4>>2]=0|f[b+4>>2],lo(a,d,g),o=r}function lo(a,b,c){a|=0,b|=0,c|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,n=0,q=0,r=0,s=0,u=0;if(u=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),k=c,l=k,!((0|l)<0||(n=0|f[b>>2],q=n+12|0,r=0|f[q>>2],s=k,(0|r)<=(0|s))))return e=0|f[b>>2],g=e+20|0,h=0|f[g>>2],i=k,j=h+(i<<3)|0,f[a>>2]=0|f[j>>2],f[a+4>>2]=0|f[j+4>>2],void(o=u);Un(a),o=u}function mo(a,b,c,d){a|=0,b|=0,c|=0,d|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,s=0;s=o,o=o+64|0,(0|o)>=(0|p)&&ca(64),i=s+48|0,h=s+40|0,g=s+32|0,e=s+24|0,k=s+8|0,l=s,j=b,m=j,f[e>>2]=0|f[d>>2],f[e+4>>2]=0|f[d+4>>2],Ug(k,m,e),f[d>>2]=0|f[k>>2],f[d+4>>2]=0|f[k+4>>2],n=j,q=j,Ln(l,q),f[g>>2]=0|f[c>>2],f[g+4>>2]=0|f[c+4>>2],f[h>>2]=0|f[d>>2],f[h+4>>2]=0|f[d+4>>2],f[i>>2]=0|f[l>>2],f[i+4>>2]=0|f[l+4>>2],no(a,n,g,h,i),o=s}function no(a,b,c,d,e){a|=0,b|=0,c|=0,d|=0,e|=0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,ba=0,da=0,ea=0,fa=0,ha=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Ba=0,Da=0,Ea=0,Fa=0,Ga=0,Ia=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0;for(Pa=o,o=o+224|0,(0|o)>=(0|p)&&ca(224),m=Pa+208|0,l=Pa+200|0,k=Pa+192|0,j=Pa+184|0,i=Pa+176|0,w=Pa+168|0,v=Pa+160|0,u=Pa+152|0,t=Pa+144|0,s=Pa+136|0,r=Pa+128|0,q=Pa+120|0,n=Pa+112|0,h=Pa+104|0,g=Pa+96|0,Ga=Pa+80|0,Ma=Pa+72|0,Na=Pa+64|0,x=Pa+56|0,y=Pa+48|0,z=Pa+40|0,A=Pa+32|0,B=Pa+24|0,C=Pa+16|0,D=Pa+8|0,E=Pa,ka=b,va=0;;){if(F=va,G=0|f[e>>2],H=G+12|0,I=0|f[H>>2],J=(0|F)<(0|I),K=ka,!J)break;if(L=0|f[e>>2],M=L+20|0,N=0|f[M>>2],O=va,P=N+(O<<3)|0,f[g>>2]=0|f[c>>2],f[g+4>>2]=0|f[c+4>>2],f[h>>2]=0|f[P>>2],f[h+4>>2]=0|f[P+4>>2],Q=0|kf(K,g,h),Q<<24>>24!=0){Oa=4;break}V=va,W=V+1|0,va=W}for(4==(0|Oa)&&(S=ka,T=ka,U=0|sp(T,69160),Ar(S,U,64593)),f[n>>2]=0|f[e>>2],f[n+4>>2]=0|f[e+4>>2],f[q>>2]=0|f[c>>2],f[q+4>>2]=0|f[c+4>>2],Zn(K,n,q),X=ka,kg(x,X,64),f[Ga>>2]=0|f[x>>2],f[Ga+4>>2]=0|f[x+4>>2],va=0;;){if(Y=va,Z=0|f[c>>2],$=Z+12|0,_=0|f[$>>2],!((0|Y)<(0|_)))break;ba=va,da=(0|ba)>0;do{if(da){if(ea=d+4|0,fa=0|f[ea>>2],0==(0|fa)&&(ha=0|f[d>>2],!(0!=(0|ha))))break;ja=ka,f[r>>2]=0|f[Ga>>2],f[r+4>>2]=0|f[Ga+4>>2],f[s>>2]=0|f[d>>2],f[s+4>>2]=0|f[d+4>>2],fh(y,ja,r,s)}}while(0);la=0|f[c>>2],ma=la+20|0,na=0|f[ma>>2],oa=va,pa=na+(oa<<3)|0,f[Ma>>2]=0|f[pa>>2],f[Ma+4>>2]=0|f[pa+4>>2],qa=Ma+4|0,ra=0|f[qa>>2];a:switch(0|ra){case 14:Oa=13;break;case 16:break;default:if(xa=ka,f[j>>2]=0|f[Ma>>2],f[j+4>>2]=0|f[Ma+4>>2],Wg(B,xa,j),f[Na>>2]=0|f[B>>2],f[Na+4>>2]=0|f[B+4>>2],ya=Na+4|0,za=0|f[ya>>2],0==(0|za)&&(Ba=0|f[Na>>2],!(0!=(0|Ba)))){if(Da=ka,f[k>>2]=0|f[Ma>>2],f[k+4>>2]=0|f[Ma+4>>2],Gf(C,Da,k,14,65311,65317),f[Na>>2]=0|f[C>>2],f[Na+4>>2]=0|f[C+4>>2],Ea=Na+4|0,Fa=0|f[Ea>>2],0==(0|Fa)&&(Ia=0|f[Na>>2],!(0!=(0|Ia)))){Ka=ka,f[l>>2]=0|f[Ma>>2],f[l+4>>2]=0|f[Ma+4>>2],Ug(D,Ka,l),f[Ma>>2]=0|f[D>>2],f[Ma+4>>2]=0|f[D+4>>2];break a}f[Ma>>2]=0|f[Na>>2],f[Ma+4>>2]=0|f[Na+4>>2],Oa=13;break a}f[Ma>>2]=0|f[Na>>2],f[Ma+4>>2]=0|f[Na+4>>2]}13==(0|Oa)&&(Oa=0,sa=ka,f[t>>2]=0|f[Ma>>2],f[t+4>>2]=0|f[Ma+4>>2],f[u>>2]=0|f[d>>2],f[u+4>>2]=0|f[d+4>>2],f[v>>2]=0|f[e>>2],f[v+4>>2]=0|f[e+4>>2],no(z,sa,t,u,v),f[Ma>>2]=0|f[z>>2],f[Ma+4>>2]=0|f[z+4>>2]),ta=ka,f[w>>2]=0|f[Ga>>2],f[w+4>>2]=0|f[Ga+4>>2],f[i>>2]=0|f[Ma>>2],f[i+4>>2]=0|f[Ma+4>>2],fh(A,ta,w,i),ua=va,wa=ua+1|0,va=wa}La=ka,f[m>>2]=0|f[e>>2],f[m+4>>2]=0|f[e+4>>2],$n(E,La,m),f[a>>2]=0|f[Ga>>2],f[a+4>>2]=0|f[Ga+4>>2],o=Pa}function oo(a){a|=0;var b=0,c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Ea=0;Ea=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),b=a,A=b,L=b,W=L+32|0,ga=0|f[W>>2],ra=0|Cp(A,65311,ga),n=ra,Ba=b,Ca=Ba+52|0,f[Ca>>2]=ra,c=n,d=0|f[c>>2],e=d>>>11,g=-256&e,h=14|g,i=n,j=0|f[i>>2],k=2097151&h,l=k<<11,m=2047&j,q=m|l,f[i>>2]=q,r=b,s=n,Xp(r,s,69083,208,4096),t=b,u=n,Ip(t,u,64614,209,262144),v=b,w=n,Ip(v,w,68856,210,262144),x=b,y=n,Ip(x,y,64616,211,262144),z=b,B=n,Ip(z,B,69083,212,4096),C=b,D=n,Ip(C,D,64619,213,4096),E=b,F=n,Ip(E,F,64623,214,0),G=b,H=n,Ip(G,H,64629,215,262144),I=b,J=n,Ip(I,J,64636,216,262144),K=b,M=n,Ip(K,M,64646,217,0),N=b,O=n,Ip(N,O,69237,218,8192),P=b,Q=n,Ip(P,Q,64653,219,262144),R=b,S=n,Ip(R,S,69294,220,262144),T=b,U=n,Ip(T,U,64659,221,4096),V=b,X=n,Ip(V,X,69263,222,4096),Y=b,Z=n,Ip(Y,Z,64664,223,0),$=b,_=n,Ip($,_,64671,224,0),aa=b,ba=n,Ip(aa,ba,64675,211,4096),da=b,ea=n,Ip(da,ea,64680,220,262144),fa=b,ha=n,Ip(fa,ha,64688,225,0),ia=b,ja=n,Ip(ia,ja,64696,226,0),ka=b,la=n,Ip(ka,la,64705,227,262144),ma=b,na=n,Ip(ma,na,64712,228,0),oa=b,pa=n,Ip(oa,pa,64718,223,0),qa=b,sa=n,Ip(qa,sa,64723,212,4096),ta=b,ua=n,Ip(ta,ua,64729,229,4096),va=b,wa=n,Ip(va,wa,64737,230,262144),xa=b,ya=n,Ip(xa,ya,64746,231,262144),za=b,Aa=n,Ip(za,Aa,64756,219,262144),o=Ea}function po(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,q=0;q=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),l=q,e=q+12|0,g=q+8|0,d=b,h=d,f[l>>2]=e,m=l+4|0,f[m>>2]=g,Kp(h,68856,l),i=d,j=0|f[g>>2],k=0|f[e>>2],Mn(a,i,j,k),o=q}function qo(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,ea=0;if(ea=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),aa=ea,Y=ea+12|0,Z=ea+8|0,A=b,$=0|f[c>>2],L=$,_=A,f[aa>>2]=Y,ba=aa+4|0,f[ba>>2]=Z,Kp(_,64799,aa),d=0|f[Z>>2],e=536870911-d|0,g=L,h=g+12|0,i=0|f[h>>2],j=(0|e)<(0|i),k=A,!j)return n=L,q=n+12|0,r=0|f[q>>2],s=0|f[Z>>2],t=r+s|0,u=0|Jn(k,t),W=u,v=W,w=v+20|0,x=0|f[w>>2],y=L,z=y+20|0,B=0|f[z>>2],C=L,D=C+12|0,E=0|f[D>>2],Nn(x,B,E),F=W,G=F+20|0,H=0|f[G>>2],I=L,J=I+12|0,K=0|f[J>>2],M=H+(K<<3)|0,N=0|f[Y>>2],O=0|f[Z>>2],Nn(M,N,O),P=L,Q=P+12|0,R=0|f[Q>>2],S=0|f[Z>>2],T=R+S|0,U=W,V=U+12|0,f[V>>2]=T,X=W,Kn(a,X),void(o=ea);l=A,m=0|sp(l,69160),Ar(k,m,64504)}function ro(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,ma=0;if(ma=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),ka=ma,ha=ma+4|0,A=b,ia=0|f[c>>2],L=ia,ja=A,f[ka>>2]=ha,Kp(ja,64797,ka),d=0|f[ha>>2],e=(0|d)<0,e&&(g=A,h=A,i=0|sp(h,69160),Ar(g,i,64813)),j=0|f[ha>>2],0==(0|j))return l=A,Ln(a,l),void(o=ma);for(m=0|f[ha>>2],n=536870911/(0|m)&-1,q=L,r=q+12|0,s=0|f[r>>2],t=(0|n)<(0|s),u=A,t&&(v=A,w=0|sp(v,69160),Ar(u,w,64504)),x=L,y=x+12|0,z=0|f[y>>2],B=0|f[ha>>2],C=0|V(z,B),D=0|Jn(u,C),X=D,E=X,F=E+20|0,G=0|f[F>>2],ga=G;;){if(H=0|f[ha>>2],I=H+-1|0,f[ha>>2]=I,!(0!=(0|H)))break;K=ga,M=L,N=M+20|0,O=0|f[N>>2],P=L,Q=P+12|0,R=0|f[Q>>2],Nn(K,O,R),S=L,T=S+12|0,U=0|f[T>>2],W=ga,Y=W+(U<<3)|0,ga=Y,Z=L,$=Z+12|0,_=0|f[$>>2],aa=X,ba=aa+12|0,da=0|f[ba>>2],ea=da+_|0,f[ba>>2]=ea}fa=X,Kn(a,fa),o=ma}function so(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,s=0,t=0,v=0;for(v=o,o=o+48|0,(0|o)>=(0|p)&&ca(48),e=v+32|0,d=v+24|0,s=v,k=v+12|0,l=v+8|0,j=b,m=j,f[s>>2]=k,t=s+4|0,f[t>>2]=l,Kp(m,68856,s);;){if(n=0|f[l>>2],q=n+-1|0,f[l>>2]=q,!(0!=(0|n)))break;g=j,h=0|f[k>>2],i=h+8|0,f[k>>2]=i,f[d>>2]=0|f[c>>2],f[d+4>>2]=0|f[c+4>>2],f[e>>2]=0|f[h>>2],f[e+4>>2]=0|f[h+4>>2],Zn(g,d,e)}f[a>>2]=0|f[c>>2],f[a+4>>2]=0|f[c+4>>2],o=v}function to(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,l=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,Q=0,R=0,S=0,T=0,U=0,W=0,Y=0,Z=0,$=0,_=0,aa=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Ba=0;if(Ba=o,o=o+80|0,(0|o)>=(0|p)&&ca(80),i=Ba+64|0,h=Ba+56|0,g=Ba+48|0,e=Ba+40|0,d=Ba+32|0,ya=Ba,_=Ba+20|0,la=Ba+16|0,va=Ba+8|0,F=b,wa=0|f[c>>2],Q=wa,xa=F,f[ya>>2]=va,za=ya+4|0,f[za>>2]=la,j=0|Kp(xa,64809,ya),1==(0|j))switch(l=va+4|0,0|(0|f[l>>2])){case 17:return n=F,q=Q,r=q+12|0,s=0|f[r>>2],f[d>>2]=0|f[va>>2],f[d+4>>2]=0|f[va+4>>2],t=0|Nt(n,d,_,la,s),u=t<<24>>24!=0,u?(v=F,w=Q,x=0|f[_>>2],y=0|f[la>>2],Mo(a,v,w,x,y),void(o=Ba)):(Un(a),void(o=Ba));case 3:return z=F,A=0|f[va>>2],f[e>>2]=0|f[c>>2],f[e+4>>2]=0|f[c+4>>2],eo(a,z,e,A),void(o=Ba);default:return B=F,C=F,f[g>>2]=0|f[va>>2],f[g+4>>2]=0|f[va+4>>2],D=0|Oo(C,g),f[h>>2]=0|f[c>>2],f[h+4>>2]=0|f[c+4>>2],eo(a,B,h,D),void(o=Ba)}if(E=F,f[i>>2]=0|f[va>>2],f[i+4>>2]=0|f[va+4>>2],G=0|Oo(E,i),f[_>>2]=G,H=0|f[_>>2],I=(0|H)<0,I&&(J=Q,K=J+12|0,L=0|f[K>>2],M=0|f[_>>2],N=M+L|0,f[_>>2]=N),O=0|f[_>>2],!((0|O)<0||(R=Q,S=R+12|0,T=0|f[S>>2],U=0|f[_>>2],(0|T)<(0|U))))return W=0|f[la>>2],(0|W)<0?(Un(a),void(o=Ba)):(Y=Q,Z=Y+12|0,$=0|f[Z>>2],aa=0|f[_>>2],(0|$)==(0|aa)?(da=F,Ln(a,da),void(o=Ba)):(ea=0|f[la>>2],fa=Q,ga=fa+12|0,ha=0|f[ga>>2],ia=0|f[_>>2],ja=ha-ia|0,ka=(0|ea)>(0|ja),ka&&(ma=Q,na=ma+12|0,oa=0|f[na>>2],pa=0|f[_>>2],qa=oa-pa|0,f[la>>2]=qa),ra=F,sa=Q,ta=0|f[_>>2],ua=0|f[la>>2],Mo(a,ra,sa,ta,ua),void(o=Ba)));Un(a),o=Ba}function uo(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,aa=0;if(aa=o,o=o+176|0,(0|o)>=(0|p)&&ca(176),i=aa+160|0,h=aa+152|0,g=aa+144|0,e=aa+136|0,r=aa+128|0,q=aa+120|0,n=aa+112|0,m=aa+104|0,l=aa+96|0,k=aa+88|0,j=aa+80|0,d=aa+72|0,Y=aa,S=aa+56|0,T=aa+48|0,U=aa+40|0,V=aa+36|0,W=aa+32|0,X=aa+24|0,s=aa+16|0,M=b,t=M,f[Y>>2]=S,Z=Y+4|0,f[Z>>2]=T,$=Y+8|0,f[$>>2]=U,u=0|Kp(t,64801,Y),!(2==(0|u)))return N=M,O=M,f[e>>2]=0|f[S>>2],f[e+4>>2]=0|f[S+4>>2],P=0|Oo(O,e),Q=M,f[g>>2]=0|f[T>>2],f[g+4>>2]=0|f[T+4>>2],R=0|Oo(Q,g),f[h>>2]=0|f[c>>2],f[h+4>>2]=0|f[c+4>>2],f[i>>2]=0|f[U>>2],f[i+4>>2]=0|f[U+4>>2],ho(s,N,h,P,R,i),f[a>>2]=0|f[U>>2],f[a+4>>2]=0|f[U+4>>2],void(o=aa);switch(w=S+4|0,0|(0|f[w>>2])){case 17:y=M,z=0|f[c>>2],A=z+12|0,B=0|f[A>>2],f[d>>2]=0|f[S>>2],f[d+4>>2]=0|f[S+4>>2],C=0|Nt(y,d,V,W,B),D=C<<24>>24!=0,D&&(E=M,F=0|f[V>>2],G=0|f[W>>2],f[j>>2]=0|f[c>>2],f[j+4>>2]=0|f[c+4>>2],f[k>>2]=0|f[T>>2],f[k+4>>2]=0|f[T+4>>2],ho(X,E,j,F,G,k));break;case 3:H=M,I=0|f[S>>2],f[l>>2]=0|f[c>>2],f[l+4>>2]=0|f[c+4>>2],f[m>>2]=0|f[T>>2],f[m+4>>2]=0|f[T+4>>2],fo(H,l,I,m);break;default:J=M,K=M,f[n>>2]=0|f[S>>2],f[n+4>>2]=0|f[S+4>>2],L=0|Oo(K,n),f[q>>2]=0|f[c>>2],f[q+4>>2]=0|f[c+4>>2],f[r>>2]=0|f[T>>2],f[r+4>>2]=0|f[T+4>>2],fo(J,q,L,r)}f[a>>2]=0|f[T>>2],f[a+4>>2]=0|f[T+4>>2],o=aa}function vo(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,r=0;r=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),m=r,g=r+12|0,h=r+8|0,e=b,i=e,f[m>>2]=g,n=m+4|0,f[n>>2]=h,Kp(i,64799,m),j=e,k=0|f[c>>2],l=0|f[g>>2],d=0|f[h>>2],Wn(j,k,l,d),f[a>>2]=0|f[c>>2],f[a+4>>2]=0|f[c+4>>2],o=r}function wo(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ia=0;if(ia=o,o=o+48|0,(0|o)>=(0|p)&&ca(48),ga=ia,W=ia+24|0,ba=ia+16|0,A=b,fa=0|f[c>>2],L=fa,d=A,f[ga>>2]=W,Kp(d,64797,ga),e=0|f[W>>2],g=(0|e)<0,g&&(h=L,i=h+12|0,j=0|f[i>>2],k=0|f[W>>2],l=k+j|0,f[W>>2]=l),m=0|f[W>>2],!((0|m)<0||(q=L,r=q+12|0,s=0|f[r>>2],t=0|f[W>>2],(0|s)<=(0|t)))){for(v=A,w=L,Pn(v,w),x=L,y=x+20|0,z=0|f[y>>2],B=0|f[W>>2],C=z+(B<<3)|0,f[ba>>2]=0|f[C>>2],f[ba+4>>2]=0|f[C+4>>2],D=L,E=D+20|0,F=0|f[E>>2],G=0|f[W>>2],H=F+(G<<3)|0,da=H,I=L,J=I+12|0,K=0|f[J>>2],M=0|f[W>>2],N=K-M|0,ea=N;;){if(O=ea,P=O+-1|0,ea=P,!(0!=(0|P)))break;R=da,S=da,T=S+8|0,f[R>>2]=0|f[T>>2],f[R+4>>2]=0|f[T+4>>2],U=da,V=U+8|0,da=V}return X=L,Y=X+12|0,Z=0|f[Y>>2],$=Z+-1|0,f[Y>>2]=$,_=A,aa=L,Rn(_,aa),f[a>>2]=0|f[ba>>2],f[a+4>>2]=0|f[ba+4>>2],void(o=ia)}Un(a),o=ia}function xo(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,h=0,i=0,j=0,k=0,l=0,m=0,q=0;q=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),i=0|f[c>>2],h=i,j=h,k=j+12|0,l=0|f[k>>2],m=0==(0|l),d=1&m,e=255&d,No(a,e),o=q}function yo(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,T=0,V=0;return V=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),T=V,O=V+4|0,A=b,P=0|f[c>>2],L=P,Q=A,f[T>>2]=O,R=0|Kp(Q,64768,T),0==(0|R)?(d=L,e=d+12|0,g=0|f[e>>2],h=(0|g)>0,h?(i=L,j=i+20|0,k=0|f[j>>2],f[a>>2]=0|f[k>>2],f[a+4>>2]=0|f[k+4>>2],void(o=V)):(Un(a),void(o=V))):(l=0|f[O>>2],m=(0|l)<0,m&&(n=A,q=A,r=0|sp(q,69160),Ar(n,r,64771)),s=0|f[O>>2],t=L,u=t+12|0,v=0|f[u>>2],w=(0|s)>(0|v),w&&(x=L,y=x+12|0,z=0|f[y>>2],f[O>>2]=z),B=L,C=0|f[B>>2],D=C>>>11,E=256&D,F=0!=(0|E),G=A,F?(H=L,I=0|f[O>>2],Mo(a,G,H,0,I),void(o=V)):(J=0|f[O>>2],K=L,M=K+20|0,N=0|f[M>>2],Mn(a,G,J,N),void(o=V)))}function zo(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;for(D=o,o=o+48|0,(0|o)>=(0|p)&&ca(48),e=D+32|0,d=D+24|0,B=D,v=D+8|0,u=b,x=u,f[B>>2]=v,Kp(x,69199,B),w=0;;){if(y=w,z=0|f[c>>2],A=z+12|0,g=0|f[A>>2],!((0|y)<(0|g))){C=6;break}if(i=u,j=0|f[c>>2],k=j+20|0,l=0|f[k>>2],m=w,n=l+(m<<3)|0,f[d>>2]=0|f[n>>2],f[d+4>>2]=0|f[n+4>>2],f[e>>2]=0|f[v>>2],f[e+4>>2]=0|f[v+4>>2],q=0|lf(i,d,e),r=q<<24>>24!=0,s=w,r){C=4;break}t=s+1|0,w=t}return 4==(0|C)?(go(a,s),void(o=D)):6==(0|C)?(Un(a),void(o=D)):void 0}function Ao(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,m=0;m=o,o=o+48|0,(0|o)>=(0|p)&&ca(48),e=m+32|0,d=m+24|0,k=m,h=m+8|0,g=b,i=g,f[k>>2]=h,Kp(i,64795,k),j=g,f[d>>2]=0|f[c>>2],f[d+4>>2]=0|f[c+4>>2],f[e>>2]=0|f[h>>2],f[e+4>>2]=0|f[h+4>>2],Xn(j,d,e),f[a>>2]=0|f[c>>2],f[a+4>>2]=0|f[c+4>>2],o=m}function Bo(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,m=0;m=o,o=o+48|0,(0|o)>=(0|p)&&ca(48),e=m+32|0,d=m+24|0,k=m,h=m+8|0,g=b,Un(h),i=g,f[k>>2]=h,Kp(i,64791,k),j=g,f[d>>2]=0|f[c>>2],f[d+4>>2]=0|f[c+4>>2],f[e>>2]=0|f[h>>2],f[e+4>>2]=0|f[h+4>>2],mo(a,j,d,e),o=m}function Co(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,la=0,ma=0,oa=0;return oa=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),ma=oa,W=oa+4|0,A=b,ga=0|f[c>>2],L=ga,ia=A,f[ma>>2]=W,ja=0|Kp(ia,64768,ma),0==(0|ja)?(d=L,e=d+12|0,g=0|f[e>>2],h=(0|g)>0,h?(i=L,j=i+20|0,k=0|f[j>>2],l=L,m=l+12|0,n=0|f[m>>2],q=n-1|0,r=k+(q<<3)|0,f[a>>2]=0|f[r>>2],f[a+4>>2]=0|f[r+4>>2],void(o=oa)):(Un(a),void(o=oa))):(s=0|f[W>>2],t=(0|s)<0,t&&(u=A,v=A,w=0|sp(v,69160),Ar(u,w,64771)),x=0|f[W>>2],y=L,z=y+12|0,B=0|f[z>>2],C=(0|x)>(0|B),C&&(D=L,E=D+12|0,F=0|f[E>>2],f[W>>2]=F),G=L,H=0|f[G>>2],I=H>>>11,J=256&I,K=0!=(0|J),M=0|f[W>>2],N=(0|M)>4,la=K|N,O=A,la?(P=L,Q=L,R=Q+12|0,S=0|f[R>>2],T=0|f[W>>2],U=S-T|0,V=0|f[W>>2],Mo(a,O,P,U,V),void(o=oa)):(X=0|f[W>>2],Y=L,Z=Y+20|0,$=0|f[Z>>2],_=L,aa=_+12|0,ba=0|f[aa>>2],da=$+(ba<<3)|0,ea=0|f[W>>2],fa=0-ea|0,ha=da+(fa<<3)|0,Mn(a,O,X,ha),void(o=oa)))}function Do(a,b,c){a|=0,b|=0,c|=0;var e=0,g=0,h=0,i=0,j=0,l=0;l=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),g=0|f[c>>2],e=g,h=e,i=h+12|0,j=0|f[i>>2],go(a,j),o=l}function Eo(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,$=0;if($=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),A=b,Y=0|f[c>>2],L=Y,d=A,e=L,g=e+12|0,h=0|f[g>>2],i=0|Jn(d,h),U=i,j=L,k=j+12|0,l=0|f[k>>2],!((0|l)>0))return T=U,Kn(a,T),void(o=$);for(n=L,q=n+20|0,r=0|f[q>>2],V=r,s=V,t=L,u=t+12|0,v=0|f[u>>2],w=s+(v<<3)|0,X=w,x=U,y=x+20|0,z=0|f[y>>2],B=L,C=B+12|0,D=0|f[C>>2],E=z+(D<<3)|0,F=E+-8|0,W=F;;){if(G=V,H=X,!(G>>>0<H>>>0))break;J=W,K=J+-8|0,W=K,M=V,N=M+8|0,V=N,f[J>>2]=0|f[M>>2],f[J+4>>2]=0|f[M+4>>2]}O=L,P=O+12|0,Q=0|f[P>>2],R=U,S=R+12|0,f[S>>2]=Q,T=U,Kn(a,T),o=$}function Fo(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0;if(N=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),J=N,A=b,K=0|f[c>>2],G=K,L=G,d=L+12|0,e=0|f[d>>2],!((0|e)>1))return f[a>>2]=0|f[c>>2],f[a+4>>2]=0|f[c+4>>2],void(o=N);for(h=A,i=G,Pn(h,i),j=G,k=j+20|0,l=0|f[k>>2],H=l,m=G,n=m+20|0,q=0|f[n>>2],r=G,s=r+12|0,t=0|f[s>>2],u=q+(t<<3)|0,v=u+-8|0,I=v;;){if(w=H,x=I,!(w>>>0<x>>>0))break;z=H,f[J>>2]=0|f[z>>2],f[J+4>>2]=0|f[z+4>>2],B=H,C=B+8|0,H=C,D=I,f[B>>2]=0|f[D>>2],f[B+4>>2]=0|f[D+4>>2],E=I,F=E+-8|0,I=F,f[E>>2]=0|f[J>>2],f[E+4>>2]=0|f[J+4>>2]}f[a>>2]=0|f[c>>2],f[a+4>>2]=0|f[c+4>>2],o=N}function Go(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;for(E=o,o=o+48|0,(0|o)>=(0|p)&&ca(48),e=E+32|0,d=E+24|0,C=E,w=E+8|0,v=b,y=v,f[C>>2]=w,Kp(y,69199,C),z=0|f[c>>2],A=z+12|0,B=0|f[A>>2],g=B-1|0,x=g;;){if(h=x,!((0|h)>=0)){D=6;break}if(j=v,k=0|f[c>>2],l=k+20|0,m=0|f[l>>2],n=x,q=m+(n<<3)|0,f[d>>2]=0|f[q>>2],f[d+4>>2]=0|f[q+4>>2],f[e>>2]=0|f[w>>2],f[e+4>>2]=0|f[w+4>>2],r=0|lf(j,d,e),s=r<<24>>24!=0,t=x,s){D=4;break}u=t+-1|0,x=u}return 4==(0|D)?(go(a,t),void(o=E)):6==(0|D)?(Un(a),void(o=E)):void 0}function Ho(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0;if(Wa=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),Ta=Wa,W=Wa+12|0,ga=Wa+8|0,A=b,ra=0|f[c>>2],L=ra,Ca=A,f[Ta>>2]=W,Ua=Ta+4|0,f[Ua>>2]=ga,Kp(Ca,68856,Ta),Na=L,d=0|f[Na>>2],e=d>>>11,g=256&e,h=0!=(0|g),h?(i=L,j=i+16|0,k=0|f[j>>2],l=0|f[k>>2],m=1==(0|l),m?(n=L,q=n+20|0,r=0|f[q>>2],s=L,t=s+16|0,u=0|f[t>>2],v=u+8|0,w=0|f[v>>2],x=r,y=w,z=x-y|0,B=(0|z)/8&-1,C=0|f[ga>>2],D=(0|B)>=(0|C),D?(E=0|f[ga>>2],F=L,G=F+20|0,H=0|f[G>>2],I=0-E|0,J=H+(I<<3)|0,f[G>>2]=J):Va=5):Va=5):Va=5,5==(0|Va)){if(K=A,M=L,Pn(K,M),N=0|f[ga>>2],0==(0|N))return f[a>>2]=0|f[c>>2],f[a+4>>2]=0|f[c+4>>2],void(o=Wa);P=L,Q=P+16|0,R=0|f[Q>>2],S=L,T=S+12|0,U=0|f[T>>2],V=0|f[ga>>2],X=U+V|0,Y=(0|R)<(0|X),Y&&(Z=A,$=L,_=L,aa=_+12|0,ba=0|f[aa>>2],da=0|f[ga>>2],ea=ba+da|0,Sn(Z,$,ea)),fa=L,ha=fa+20|0,ia=0|f[ha>>2],ja=0|f[ga>>2],ka=ia+(ja<<3)|0,la=L,ma=la+20|0,na=0|f[ma>>2],oa=L,pa=oa+12|0,qa=0|f[pa>>2],co(ka,na,qa)}for(sa=L,ta=sa+20|0,ua=0|f[ta>>2],va=0|f[W>>2],wa=0|f[ga>>2],Nn(ua,va,wa),xa=0|f[ga>>2],ya=L,za=ya+12|0,Aa=0|f[za>>2],Ba=Aa+xa|0,f[za>>2]=Ba;;){if(Da=0|f[ga>>2],Ea=Da+-1|0,f[ga>>2]=Ea,!(0!=(0|Da)))break;Ga=0|f[W>>2],Ha=0|f[ga>>2],Ia=Ga+(Ha<<3)|0,Ja=Ia+4|0,Ka=0|f[Ja>>2],La=Ka>>>0<8,La||(Ma=A,Oa=L,Pa=0|f[W>>2],Qa=0|f[ga>>2],Ra=Pa+(Qa<<3)|0,Sa=0|f[Ra>>2],Yc(Ma,Oa,Sa))}f[a>>2]=0|f[c>>2],f[a+4>>2]=0|f[c+4>>2],o=Wa}function Io(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,x=0,y=0,A=0;return A=o,o=o+48|0,(0|o)>=(0|p)&&ca(48),e=A+32|0,d=A+24|0,y=A,s=A+8|0,r=b,t=r,f[y>>2]=s,Kp(t,69199,y),u=r,f[d>>2]=0|f[c>>2],f[d+4>>2]=0|f[c+4>>2],f[e>>2]=0|f[s>>2],f[e+4>>2]=0|f[s+4>>2],v=0|kf(u,d,e),v<<24>>24!=0?(Ko(a),void(o=A)):(x=s+4|0,g=0|f[x>>2],14==(0|g)?(i=0|f[c>>2],j=i+12|0,k=0|f[j>>2],l=0|f[s>>2],m=l+12|0,n=0|f[m>>2],q=(0|k)!=(0|n),q?(Lo(a),void(o=A)):(f[a>>2]=0|f[s>>2],f[a+4>>2]=0|f[s+4>>2],void(o=A))):(Lo(a),void(o=A)))}function Jo(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,q=0,r=0,t=0;return t=o,o=o+48|0,(0|o)>=(0|p)&&ca(48),e=t+32|0,d=t+24|0,r=t,j=t+8|0,i=b,k=i,f[r>>2]=j,Kp(k,69199,r),l=i,f[d>>2]=0|f[c>>2],f[d+4>>2]=0|f[c+4>>2],f[e>>2]=0|f[j>>2],f[e+4>>2]=0|f[j+4>>2],m=0|kf(l,d,e),m<<24>>24!=0?(go(a,0),void(o=t)):(q=j+4|0,g=0|f[q>>2],h=14==(0|g),h?(f[a>>2]=0|f[j>>2],f[a+4>>2]=0|f[j+4>>2],void(o=t)):(Un(a),void(o=t)))}function Ko(a){a|=0;var b=0,c=0,e=0;e=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),b=e,c=b+4|0,f[c>>2]=2,f[b>>2]=1,f[a>>2]=0|f[b>>2],f[a+4>>2]=0|f[b+4>>2],o=e}function Lo(a){a|=0;var b=0,c=0,e=0;e=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),b=e,c=b+4|0,f[c>>2]=0,f[b>>2]=1,f[a>>2]=0|f[b>>2],f[a+4>>2]=0|f[b+4>>2],o=e}function Mo(a,b,c,d,e){a|=0,b|=0,c|=0,d|=0,e|=0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Z=0;Z=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),T=b,U=c,V=d,W=e,g=T,h=U,ao(g,h),i=T,j=T,k=j+52|0,l=0|f[k>>2],m=0|Tc(i,14,l),X=m,n=U,q=n+20|0,r=0|f[q>>2],s=V,t=r+(s<<3)|0,u=X,v=u+20|0,f[v>>2]=t,w=W,x=X,y=x+12|0,f[y>>2]=w,z=U,A=z+16|0,B=0|f[A>>2],C=X,D=C+16|0,f[D>>2]=B,E=X,F=E+16|0,G=0|f[F>>2],H=0|f[G>>2],I=H+1|0,f[G>>2]=I,J=X,K=0|f[J>>2],L=K>>>11,M=256|L,N=0|f[J>>2],O=2097151&M,P=O<<11,Q=2047&N,R=Q|P,f[J>>2]=R,S=X,Kn(a,S),o=Z}function No(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,l=0;l=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),d=l,c=b,e=c,g=255&e,h=0!=(0|g),i=h?2:0,j=d+4|0,f[j>>2]=i,f[d>>2]=1,f[a>>2]=0|f[d>>2],f[a+4>>2]=0|f[d+4>>2],o=l}function Oo(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,x=0,y=0,z=0,B=0;return B=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),x=B,r=B+20|0,s=B+16|0,t=B+12|0,q=a,u=b+4|0,v=0|f[u>>2],3==(0|v)?(c=0|f[b>>2],n=c,m=n,o=B,0|m):(d=b+4|0,e=0|f[d>>2],g=6==(0|e),g?(h=+j[b>>2],i=~~h,n=i,m=n,o=B,0|m):(k=q,f[x>>2]=r,y=x+4|0,f[y>>2]=t,z=x+8|0,f[z>>2]=s,Kp(k,64806,x),l=0|f[r>>2],n=l,m=n,o=B,0|m))}function Po(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,l=0;l=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),d=l,c=b,e=c,g=0|f[e>>2],h=255&g,i=d+4|0,f[i>>2]=h,j=c,f[d>>2]=j,f[a>>2]=0|f[d>>2],f[a+4>>2]=0|f[d+4>>2],o=l}function Qo(a,b,c,d){a|=0,b|=0,c|=0,d|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;J=o,o=o+48|0,(0|o)>=(0|p)&&ca(48),G=J+24|0,e=J+8|0,g=J,C=a,D=b,E=c,F=d,h=C,i=D,j=C,k=0|ji(j,68279,6),Ui(e,h,i,k),f[G>>2]=0|f[e>>2],f[G+4>>2]=0|f[e+4>>2],l=G+4|0,m=0|f[l>>2],n=0==(0|m),n?(q=0|f[G>>2],r=0!=(0|q),r?I=4:H=0):I=4,4==(0|I)&&(s=0|f[G>>2],H=s),t=C,u=C,v=D,w=C,x=0|ji(w,67804,5),Ui(g,u,v,x),y=0|f[g>>2],z=H,A=E,B=F,Ro(t,y,z,A,B),o=J}function Ro(a,b,c,d,e){a|=0,b|=0,c|=0,d|=0,e|=0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Xa=0,Ya=0,Za=0,$a=0,_a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Wb=0;for(Wb=o,o=o+64|0,(0|o)>=(0|p)&&ca(64),u=Wb+16|0,Ua=a,db=b,ob=c,zb=d,Kb=e,la=db,ma=Ua,na=ma+12|0,oa=0|f[na>>2],pa=oa+24|0,qa=0|f[pa>>2],ra=Ua,sa=ra+12|0,ta=0|f[sa>>2],ua=ta+20|0,va=0|f[ua>>2],wa=qa,xa=va,ya=wa-xa|0,za=(0|ya)/48&-1,Aa=(0|la)>=(0|za),Aa&&(db=10),Ba=db,h=Ba;;){if(Ca=h,!((0|Ca)>=0))break;if(Ea=Ua,Fa=Ea+12|0,Ga=0|f[Fa>>2],Ha=Ga+20|0,Ia=0|f[Ha>>2],Ja=h,Ka=Ia+(48*Ja|0)|0,F=Ka,La=F,Ma=La+4|0,Na=0|f[Ma>>2],0!=(0|Na)&&(Pa=F,Qa=Pa+4|0,Ra=0|f[Qa>>2],Sa=0|f[Ra>>2],Ta=Sa>>>11,Va=128&Ta,!(0!=(0|Va)))){Xa=F,Ya=Xa+4|0,Za=0|f[Ya>>2],$a=Za+12|0,_a=0|f[$a>>2],Q=_a,ab=Ua,bb=ab+12|0,cb=0|f[bb>>2],eb=cb+20|0,fb=0|f[eb>>2],gb=h,hb=fb+(48*gb|0)|0,ib=hb+32|0,jb=0|f[ib>>2],kb=0!=(0|jb);do{if(!kb){if(vb=h,wb=vb+1|0,xb=db,(0|wb)<=(0|xb)){Ab=Ua,Bb=Ab+12|0,Cb=0|f[Bb>>2],Db=Cb+20|0,Eb=0|f[Db>>2],Fb=h,Gb=Fb+1|0,Hb=Eb+(48*Gb|0)|0,Ib=Hb+28|0,Jb=0|f[Ib>>2],Lb=Jb+-4|0,_=Lb;break}Mb=ob,_=Mb;break}lb=Ua,mb=lb+12|0,nb=0|f[mb>>2],pb=nb+20|0,qb=0|f[pb>>2],rb=h,sb=qb+(48*rb|0)|0,tb=sb+32|0,ub=0|f[tb>>2],_=ub}while(0);Nb=Q,Ob=_,Pb=Q,Qb=Pb+8|0,Rb=0|f[Qb>>2],Sb=Ob,Tb=Rb,Ub=Sb-Tb|0,i=(0|Ub)/4&-1,j=0|or(Nb,i),k=u+8|0,f[k>>2]=j,l=Q,m=_,n=Q,q=n+8|0,r=0|f[q>>2],s=m,t=r,v=s-t|0,w=(0|v)/4&-1,x=0|qr(l,w),y=u+4|0,f[y>>2]=x,z=u+4|0,A=0|f[z>>2],B=-1==(0|A),B||(C=F,D=C+44|0,E=0|f[D>>2],G=F,H=G+4|0,I=0|f[H>>2],J=I+16|0,K=0|f[J>>2],L=(0|E)==(0|K),M=u+16|0,g=L?70783:64831,f[M>>2]=g,N=u+8|0,O=0|f[N>>2],P=0!=(0|O),P||(R=u+8|0,f[R>>2]=64833),S=Ua,T=F,U=0|f[T>>2],V=0|wi(S,U),W=u+12|0,f[W>>2]=V,X=Ua,Y=F,Z=Y+4|0,$=0|f[Z>>2],aa=$+16|0,ba=0|f[aa>>2],da=0|gq(X,ba),ea=u+20|0,f[ea>>2]=da,fa=h,f[u>>2]=fa,ga=zb,ha=Ua,ia=Kb,Ex[511&ga](ha,u,ia))}ja=h,ka=ja+-1|0,h=ka}o=Wb}function So(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,m=0;m=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),e=m+8|0,g=m,d=b,h=d,Ln(g,h),f[e>>2]=0|f[g>>2],f[e+4>>2]=0|f[g+4>>2],i=d,j=0|f[c>>2],k=0|f[e>>2],Qo(i,j,232,k),f[a>>2]=0|f[e>>2],f[a+4>>2]=0|f[e+4>>2],o=m}function To(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,qa=0;if(qa=o,o=o+192|0,(0|o)>=(0|p)&&ca(192),n=qa+184|0,m=qa+176|0,l=qa+168|0,k=qa+160|0,j=qa+152|0,i=qa+144|0,h=qa+136|0,g=qa+128|0,e=qa+120|0,d=qa+112|0,la=qa+88|0,ma=qa+80|0,oa=qa+64|0,q=qa+56|0,r=qa+48|0,s=qa+40|0,t=qa+32|0,u=qa+24|0,v=qa+16|0,w=qa+8|0,x=qa,K=a,V=b,fa=c,y=K,z=0|Wc(y),na=z,A=fa,Po(oa,A),f[la>>2]=0|f[oa>>2],f[la+4>>2]=0|f[oa+4>>2],B=K,C=V,D=C+8|0,E=0|f[D>>2],pg(q,B,E),f[ma>>2]=0|f[q>>2],f[ma+4>>2]=0|f[q+4>>2],F=K,f[d>>2]=0|f[ma>>2],f[d+4>>2]=0|f[ma+4>>2],ch(r,F,d,68074,1),G=K,H=K,I=V,J=I+4|0,L=0|f[J>>2],Uo(t,L),f[e>>2]=0|f[t>>2],f[e+4>>2]=0|f[t+4>>2],pe(s,H,e,10),f[g>>2]=0|f[ma>>2],f[g+4>>2]=0|f[ma+4>>2],f[h>>2]=0|f[s>>2],f[h+4>>2]=0|f[s+4>>2],xg(G,g,h),M=V,N=M+12|0,O=0|f[N>>2],!(0!=(0|O)))return ia=K,f[m>>2]=0|f[la>>2],f[m+4>>2]=0|f[la+4>>2],f[n>>2]=0|f[ma>>2],f[n+4>>2]=0|f[ma+4>>2],Zn(ia,m,n),ja=K,ka=na,Xc(ja,ka),void(o=qa);Q=K,f[i>>2]=0|f[ma>>2],f[i+4>>2]=0|f[ma+4>>2],ch(u,Q,i,64843,4),R=V,S=R+20|0,T=0|f[S>>2],U=0!=(0|T),U&&(W=K,X=V,Y=X+20|0,Z=0|f[Y>>2],f[j>>2]=0|f[ma>>2],f[j+4>>2]=0|f[ma+4>>2],eh(v,W,j,Z),$=K,_=V,aa=_+16|0,ba=0|f[aa>>2],f[k>>2]=0|f[ma>>2],f[k+4>>2]=0|f[ma+4>>2],eh(w,$,k,ba)),da=K,ea=V,ga=ea+12|0,ha=0|f[ga>>2],f[l>>2]=0|f[ma>>2],f[l+4>>2]=0|f[ma+4>>2],eh(x,da,l,ha),ia=K,f[m>>2]=0|f[la>>2],f[m+4>>2]=0|f[la+4>>2],f[n>>2]=0|f[ma>>2],f[n+4>>2]=0|f[ma+4>>2],Zn(ia,m,n),ja=K,ka=na,Xc(ja,ka),o=qa}function Uo(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,i=0;i=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),d=i,c=b,e=d+4|0,f[e>>2]=3,g=c,f[d>>2]=g,f[a>>2]=0|f[d>>2],f[a+4>>2]=0|f[d+4>>2],o=i}function Vo(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,W=0;W=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),n=a,A=b,R=A,S=0|f[R>>2],L=S,P=8,T=n,c=L,d=c,e=(d>>>0)/4&-1,g=P,h=L,i=0|V(g,h),j=e+i|0,k=0|Jc(T,j),Q=k,l=A,m=l+8|0,f[m>>2]=0,q=A,r=q+4|0,f[r>>2]=0,s=Q,t=A,u=t+16|0,f[u>>2]=s,v=Q,w=L,x=w<<2,y=v+x|0,z=A,B=z+20|0,f[B>>2]=y,C=Q,D=P,E=L,F=0|V(D,E),G=C+F|0,H=A,I=H+12|0,f[I>>2]=G,J=A,K=J+12|0,M=0|f[K>>2],N=L,O=(N>>>0)/4&-1,Wo(M,-86,O),o=W}function Wo(a,b,c){a|=0,b|=0,c|=0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,q=0;for(q=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),g=a,h=b,i=c;;){if(j=i,k=j+-1|0,i=k,!(j>>>0>0))break;m=h,e=g,f=e+1|0,g=f,d[e>>0]=m}o=q}function Xo(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,Q=0;return Q=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),n=a,A=b,K=n,L=0|Lc(K,1,24),J=L,M=A,N=M>>>0<8,N&&(A=8),O=A,c=O+-1|0,A=c,d=A,e=d>>>1,g=A,h=g|e,A=h,i=A,j=i>>>2,k=A,l=k|j,A=l,m=A,q=m>>>4,r=A,s=r|q,A=s,t=A,u=t>>>8,v=A,w=v|u,A=w,x=A,y=x>>>16,z=A,B=z|y,A=B,C=A,D=C+1|0,A=D,E=A,F=J,f[F>>2]=E,G=n,H=J,Vo(G,H),I=J,o=Q,0|I}function Yo(a){a|=0;var b=0,c=0,d=0,f=0;return f=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),b=a,c=b,d=0|Xo(c,8),o=f,0|d}function Zo(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,j=0,k=0,l=0,m=0,q=0;if(q=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),e=a,g=b,h=g,!(0!=(0|h)))return void(o=q);j=e,k=g,l=k+16|0,m=0|f[l>>2],xc(j,m),c=e,d=g,xc(c,d),o=q}function $o(a,b,c){a|=0,b|=0,c|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0;for(wa=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),a,X=b,ha=c,ua=ha,e=ha,g=e<<2,h=ua^g,i=ha,j=i>>>2,k=h^j,l=X,m=0|f[l>>2],n=m-1|0,q=k&n,sa=q,ta=0;;){if(r=X,s=r+12|0,t=0|f[s>>2],u=sa,v=(u>>>0)/4&-1,w=t+v|0,x=0|d[w>>0],y=255&x,z=sa,A=(z>>>0)%4&-1,C=64848+A|0,D=0|d[C>>0],E=255&D,F=y&E,G=0!=(0|F),H=1^G,I=X,!H){va=7;break}if(J=I+12|0,K=0|f[J>>2],L=sa,N=(L>>>0)/4&-1,O=K+N|0,P=0|d[O>>0],Q=255&P,R=sa,S=(R>>>0)%4&-1,T=64852+S|0,U=0|d[T>>0],V=255&U,W=Q&V,!(0!=(0|W))&&(Z=X,$=Z+16|0,_=0|f[$>>2],aa=sa,ba=_+(aa<<2)|0,da=0|f[ba>>2],ea=ha,(0|da)==(0|ea))){va=5;break}ia=sa,ja=ta,ka=ja+1|0,ta=ka,la=ia+ka|0,ma=X,na=0|f[ma>>2],oa=na-1|0,pa=la&oa,sa=pa}return 5==(0|va)?(ga=sa,B=ga,ra=B,o=wa,0|ra):7==(0|va)?(qa=0|f[I>>2],B=qa,ra=B,o=wa,0|ra):0}function _o(a,b,c){a|=0,b|=0,c|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Oa=0;for(Oa=o,o=o+64|0,(0|o)>=(0|p)&&ca(64),ia=Oa+24|0,C=a,N=b,Y=c,j=Y,k=j>>>0<8,e=k?8:c,Y=e,l=Y,m=l+-1|0,Y=m,n=Y,q=n>>>1,r=Y,s=r|q,Y=s,t=Y,u=t>>>2,v=Y,w=v|u,Y=w,x=Y,y=x>>>4,z=Y,A=z|y,Y=A,B=Y,D=B>>>8,E=Y,F=E|D,Y=F,G=Y,H=G>>>16,I=Y,J=I|H,Y=J,K=Y,L=K+1|0,Y=L,M=N,O=M+12|0,P=0|f[O>>2],ta=P,Q=N,R=Q+16|0,S=0|f[R>>2],Ea=S,T=N,U=T+20|0,V=0|f[U>>2],Ma=V,W=N,X=0|f[W>>2],g=X,Z=Y,f[ia>>2]=Z,$=C,Vo($,ia),h=0;;){if(_=h,aa=g,!(_>>>0<aa>>>0))break;da=ta,ea=h,fa=(ea>>>0)/4&-1,ga=da+fa|0,ha=0|d[ga>>0],ja=255&ha,ka=h,la=(ka>>>0)%4&-1,ma=64856+la|0,na=0|d[ma>>0],oa=255&na,pa=ja&oa,qa=0!=(0|pa),qa||(ra=C,sa=Ea,ua=h,va=sa+(ua<<2)|0,wa=0|f[va>>2],xa=0|ap(ra,ia,wa,0),i=xa,ya=Ma,za=h,Aa=ya+(za<<2)|0,Ba=0|f[Aa>>2],Ca=ia+20|0,Da=0|f[Ca>>2],Fa=i,Ga=Da+(Fa<<2)|0,f[Ga>>2]=Ba),Ha=h,Ia=Ha+1|0,h=Ia}Ja=N,f[Ja>>2]=0|f[ia>>2],f[Ja+4>>2]=0|f[ia+4>>2],f[Ja+8>>2]=0|f[ia+8>>2],f[Ja+12>>2]=0|f[ia+12>>2],f[Ja+16>>2]=0|f[ia+16>>2],f[Ja+20>>2]=0|f[ia+20>>2],Ka=C,La=Ea,xc(Ka,La),o=Oa}function ap(a,b,c,e){a|=0,b|=0,c|=0,e|=0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,$a=0,_a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,$b=0,_b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0;for(gc=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),eb=a,pb=b,Ab=c,Lb=e,t=0,E=pb,P=E+8|0,$=0|f[P>>2],ka=pb,va=0|f[ka>>2],ya=va>>>2,za=pb,Aa=0|f[za>>2],Ba=Aa>>>1,Ca=ya|Ba,Da=$>>>0>=Ca>>>0,Da&&(Ea=eb,Fa=pb,Ga=pb,Ha=0|f[Ga>>2],Ia=Ha<<1,_o(Ea,Fa,Ia)),Ja=Ab,Ka=Ab,La=Ka<<2,Ma=Ja^La,Na=Ab,Oa=Na>>>2,Pa=Ma^Oa,Qa=pb,Ra=0|f[Qa>>2],Sa=Ra-1|0,Ta=Pa&Sa,Wb=Ta,Ua=pb,Wa=0|f[Ua>>2],g=Wa;;){if(Xa=pb,Ya=Xa+12|0,Za=0|f[Ya>>2],$a=Wb,_a=($a>>>0)/4&-1,ab=Za+_a|0,bb=0|d[ab>>0],cb=255&bb,db=Wb,fb=(db>>>0)%4&-1,gb=64848+fb|0,hb=0|d[gb>>0],ib=255&hb,jb=cb&ib,kb=0!=(0|jb),!(1^kb))break;if(mb=pb,nb=mb+12|0,ob=0|f[nb>>2],qb=Wb,rb=(qb>>>0)/4&-1,sb=ob+rb|0,tb=0|d[sb>>0],ub=255&tb,vb=Wb,wb=(vb>>>0)%4&-1,xb=64852+wb|0,yb=0|d[xb>>0],zb=255&yb,Bb=ub&zb,0!=(0|Bb))Qb=g,Rb=pb,Sb=0|f[Rb>>2],(0|Qb)==(0|Sb)&&(Ub=Wb,g=Ub);else if(Db=pb,Eb=Db+16|0,Fb=0|f[Eb>>2],Gb=Wb,Hb=Fb+(Gb<<2)|0,Ib=0|f[Hb>>2],Jb=Ab,(0|Ib)==(0|Jb)){fc=7;break}Vb=Wb,Xb=t,Yb=Xb+1|0,t=Yb,Zb=Vb+Yb|0,$b=pb,_b=0|f[$b>>2],ac=_b-1|0,bc=Zb&ac,Wb=bc}return 7==(0|fc)?(Mb=Lb,Nb=0!=(0|Mb),Nb&&(Ob=Lb,f[Ob>>2]=0),Pb=Wb,Va=Pb,xa=Va,o=gc,0|xa):(cc=g,dc=pb,ec=0|f[dc>>2],h=(0|cc)!=(0|ec),i=Ab,j=pb,k=j+16|0,l=0|f[k>>2],h?(m=g,n=l+(m<<2)|0,f[n>>2]=i,q=g,r=(q>>>0)%4&-1,s=64852+r|0,u=0|d[s>>0],v=255&u,w=-1^v,x=pb,y=x+12|0,z=0|f[y>>2],A=g,B=(A>>>0)/4&-1,C=z+B|0,D=0|d[C>>0],F=255&D,G=F&w,H=255&G,d[C>>0]=H,I=pb,J=I+4|0,K=0|f[J>>2],L=K+1|0,f[J>>2]=L,M=Lb,N=0!=(0|M),N&&(O=Lb,f[O>>2]=2),Q=g,Va=Q,xa=Va,o=gc,0|xa):(R=Wb,S=l+(R<<2)|0,f[S>>2]=i,T=Wb,U=(T>>>0)%4&-1,V=64848+U|0,W=0|d[V>>0],X=255&W,Y=-1^X,Z=pb,_=Z+12|0,aa=0|f[_>>2],ba=Wb,da=(ba>>>0)/4&-1,ea=aa+da|0,fa=0|d[ea>>0],ga=255&fa,ha=ga&Y,ia=255&ha,d[ea>>0]=ia,ja=pb,la=ja+4|0,ma=0|f[la>>2],na=ma+1|0,f[la>>2]=na,oa=pb,pa=oa+8|0,qa=0|f[pa>>2],ra=qa+1|0,f[pa>>2]=ra,sa=Lb,ta=0!=(0|sa),ta&&(ua=Lb,f[ua>>2]=1),wa=Wb,Va=wa,xa=Va,o=gc,0|xa))}function bp(a,b,c){a|=0,b|=0,c|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,x=0,y=0,z=0,A=0,B=0,C=0,E=0;E=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),x=b,y=c,z=y,A=(z>>>0)%4&-1,B=64852+A|0,C=0|d[B>>0],e=255&C,g=x,h=g+12|0,i=0|f[h>>2],j=y,k=(j>>>0)/4&-1,l=i+k|0,m=0|d[l>>0],n=255&m,q=n|e,r=255&q,d[l>>0]=r,s=x,t=s+4|0,u=0|f[t>>2],v=u+-1|0,f[t>>2]=v,o=E}function cp(a,b){a|=0,b|=0;var c=0,e=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,da=0;for(da=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),q=a,B=b,$=q,_=0|Yo($),M=_,X=0;;){if(aa=X,c=B,e=0|f[c>>2],!((0|aa)!=(0|e)))break;h=B,i=h+12|0,j=0|f[i>>2],k=X,l=(k>>>0)/4&-1,m=j+l|0,n=0|d[m>>0],r=255&n,s=X,t=(s>>>0)%4&-1,u=64856+t|0,v=0|d[u>>0],w=255&v,x=r&w,y=0!=(0|x),y||(z=q,A=M,C=B,D=C+16|0,E=0|f[D>>2],F=X,G=E+(F<<2)|0,H=0|f[G>>2],I=0|ap(z,A,H,0),Z=I,J=B,K=J+20|0,L=0|f[K>>2],N=X,O=L+(N<<2)|0,P=0|f[O>>2],Q=M,R=Q+20|0,S=0|f[R>>2],T=Z,U=S+(T<<2)|0,f[U>>2]=P),V=X,W=V+1|0,X=W}return Y=M,o=da,0|Y}function dp(a,b){a|=0,b|=0;var c=0,g=0,h=0,i=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,W=0;if(W=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),q=a,B=b,S=B,T=S+16|0,U=0|f[T>>2],Q=U,c=Q,!(0!=(0|c)))return void(o=W);for(M=0;;){if(g=M,h=Q,i=0|f[h>>2],!((0|g)!=(0|i)))break;k=Q,l=k+12|0,m=0|f[l>>2],n=M,r=(n>>>0)/4&-1,s=m+r|0,t=0|d[s>>0],u=255&t,v=M,w=(v>>>0)%4&-1,x=64856+w|0,y=0|d[x>>0],z=255&y,A=u&z,C=0!=(0|A),C||(D=Q,E=D+20|0,F=0|f[E>>2],G=M,H=F+(G<<2)|0,I=0|f[H>>2],R=I,J=R,0!=(0|J)&&(L=q,N=R,Cc(L,N))),O=M,P=O+1|0,M=P}o=W}function ep(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,k=0,l=0,m=0,n=0,q=0,r=0,t=0;return t=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),a,k=b,m=k,n=m+16|0,q=0|f[n>>2],l=q,r=l,c=0!=(0|r),c?(d=l,e=d+4|0,g=0|f[e>>2],i=g,h=i,o=t,0|h):(i=0,h=i,o=t,0|h)}function fp(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,k=0;k=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),c=a,d=b,e=c,g=d,h=g+16|0,i=0|f[h>>2],Zo(e,i),o=k}function gp(a,b){a|=0,b|=0;var c=0,d=0,e=0,h=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,w=0;return w=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),q=w+8|0,r=w,m=a,n=b,s=m,t=n,u=m,c=0|ji(u,64860,9),Ui(r,s,t,c),f[q>>2]=0|f[r>>2],f[q+4>>2]=0|f[r+4>>2],d=q+4|0,e=0|f[d>>2],0==(0|e)&&0==(0|(h=0|f[q>>2]))?(l=0,k=l,o=w,0|k):(j=0|f[q>>2],l=j,k=l,o=w,0|k)}function hp(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,E=0;return E=o,o=o+48|0,(0|o)>=(0|p)&&ca(48),d=E+32|0,B=E,x=a,y=b,z=c,C=x,e=z,ip(B,e),g=y,f[d>>2]=0|f[B>>2],f[d+4>>2]=0|f[B+4>>2],h=0|Tj(C,d,g),i=h<<24>>24!=0,j=x,i?(k=z,l=y,m=0|jp(j,k,l),w=m,v=w,o=E,0|v):(n=0|kp(j),A=n,q=x,r=z,s=A,t=y,lp(q,r,s,t),u=A,w=u,v=w,o=E,0|v)}function ip(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,l=0;l=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),d=l,c=b,e=c,g=0|f[e>>2],h=255&g,i=d+4|0,f[i>>2]=h,j=c,f[d>>2]=j,f[a>>2]=0|f[d>>2],f[a+4>>2]=0|f[d+4>>2],o=l}function jp(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,t=0;return t=o,o=o+48|0,(0|o)>=(0|p)&&ca(48),e=t+40|0,d=t+32|0,m=t+8|0,n=t,j=a,k=b,l=c,q=j,r=k,ip(n,r),g=l,f[d>>2]=0|f[n>>2],f[d+4>>2]=0|f[n+4>>2],Dj(m,q,d,g),h=j,f[e>>2]=0|f[m>>2],f[e+4>>2]=0|f[m+4>>2],Hf(h,e,10),i=0|f[m>>2],o=t,0|i}function kp(a){a|=0;var b=0,c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,n=0;return n=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),b=a,e=b,g=b,h=g+40|0,i=0|f[h>>2],j=0|Tc(e,10,i),d=j,k=b,l=d,op(k,l),c=d,o=n,0|c}function lp(a,b,c,d){a|=0,b|=0,c|=0,d|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0;if(H=o,o=o+48|0,(0|o)>=(0|p)&&ca(48),g=H+40|0,e=H+32|0,E=H+8|0,F=H,A=a,B=b,C=c,D=d,h=A,i=C,j=D,mp(h,i,j),k=A,l=B,m=D,n=C,ip(E,n),f[e>>2]=0|f[E>>2],f[e+4>>2]=0|f[E+4>>2],Zi(k,l,m,e),q=B,r=A,s=r+32|0,t=0|f[s>>2],!((0|q)!=(0|t)))return void(o=H);v=A,w=C,x=A,y=0|ji(x,64860,9),z=B,ip(F,z),f[g>>2]=0|f[F>>2],f[g+4>>2]=0|f[F+4>>2],Zi(v,w,y,g),o=H}function mp(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,r=0;r=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),d=r+24|0,k=r,h=a,i=b,j=c,l=h,m=i,n=h,e=0|ji(n,64870,11),g=j,np(k,g),f[d>>2]=0|f[k>>2],f[d+4>>2]=0|f[k+4>>2],Zi(l,m,e,d),o=r}function np(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,i=0;i=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),d=i,c=b,e=d+4|0,f[e>>2]=4,g=c,f[d>>2]=g,f[a>>2]=0|f[d>>2],f[a+4>>2]=0|f[d+4>>2],o=i}function op(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,k=0;k=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),c=a,d=b,e=c,g=0|Yo(e),h=d,i=h+16|0,f[i>>2]=g,o=k}function pp(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,q=0;return q=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),e=a,g=b,h=e,i=e,j=g,k=0|ki(i,j),l=e,m=l+32|0,c=0|f[m>>2],d=0|hp(h,k,c),o=q,0|d}function qp(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,n=0;return n=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),d=n+8|0,e=a,g=c,h=e,f[d>>2]=0|f[b>>2],f[d+4>>2]=0|f[b+4>>2],rp(h,d),i=e,j=g,k=0|f[b>>2],l=0|hp(i,j,k),o=n,0|l}function rp(a,b){a|=0,b|=0;var c=0,e=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,r=0;switch(r=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),c=r+24|0,n=r,g=r+8|0,e=a,h=b+4|0,0|(0|f[h>>2])){case 10:case 12:case 9:return void(o=r);default:j=e,k=e,l=0|sp(k,69204),m=e,f[c>>2]=0|f[b>>2],f[c+4>>2]=0|f[b+4>>2],Ef(g,m,c),d[n>>0]=0|d[g>>0],d[n+1>>0]=0|d[g+1>>0],d[n+2>>0]=0|d[g+2>>0],d[n+3>>0]=0|d[g+3>>0],d[n+4>>0]=0|d[g+4>>0],d[n+5>>0]=0|d[g+5>>0],d[n+6>>0]=0|d[g+6>>0],d[n+7>>0]=0|d[g+7>>0],Dr(j,l,64882,n)}}function sp(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,m=0;return m=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),c=a,d=b,e=c,g=c,h=g+32|0,i=0|f[h>>2],j=d,k=0|tp(e,i,j),o=m,0|k}function tp(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,n=0;return n=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),f=a,g=b,h=c,i=f,j=g,k=f,l=h,d=0|ki(k,l),e=0|up(i,j,d),o=n,0|e}function up(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,t=0;return t=o,o=o+48|0,(0|o)>=(0|p)&&ca(48),e=t+40|0,d=t+32|0,m=t+8|0,n=t,j=a,k=b,l=c,q=j,r=k,ip(n,r),g=l,f[d>>2]=0|f[n>>2],f[d+4>>2]=0|f[n+4>>2],Dj(m,q,d,g),h=j,f[e>>2]=0|f[m>>2],f[e+4>>2]=0|f[m+4>>2],Hf(h,e,9),i=0|f[m>>2],o=t,0|i}function vp(a,b,c){a|=0,b|=0,c|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,z=0;return z=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),x=z,t=z+8|0,q=a,r=b,s=c,u=s,v=0!=(0|u),v||(w=q,e=q,g=r,ui(t,e,g),d[x>>0]=0|d[t>>0],d[x+1>>0]=0|d[t+1>>0],d[x+2>>0]=0|d[t+2>>0],d[x+3>>0]=0|d[t+3>>0],d[x+4>>0]=0|d[t+4>>0],d[x+5>>0]=0|d[t+5>>0],d[x+6>>0]=0|d[t+6>>0],d[x+7>>0]=0|d[t+7>>0],Gr(w,64907,x)),h=q,i=r,j=s,k=q,l=k+32|0,m=0|f[l>>2],n=0|wp(h,i,j,m),o=z,0|n}function wp(a,b,c,e){a|=0,b|=0,c|=0,e|=0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,wa=0;if(wa=o,o=o+96|0,(0|o)>=(0|p)&&ca(96),g=wa+80|0,sa=wa,h=wa+48|0,i=wa+40|0,j=wa+32|0,k=wa+24|0,Y=a,ia=b,pa=c,qa=e,l=Y,m=qa,ip(h,m),n=ia,f[g>>2]=0|f[h>>2],f[g+4>>2]=0|f[h+4>>2],q=0|Tj(l,g,n),r=q<<24>>24!=0,s=Y,!r)return ga=pa,ha=0|yp(s,ga),ra=ha,ja=Y,ka=qa,la=ra,ma=ia,lp(ja,ka,la,ma),na=ra,N=na,oa=N,o=wa,0|oa;t=qa,u=ia,v=0|up(s,t,u),ra=v,w=ra,x=0|f[w>>2],y=x>>>11,z=524288&y,A=0!=(0|z);a:if(A)for(B=ra,C=B+20|0,D=0|f[C>>2],ra=D;;){if(E=ra,F=0|f[E>>2],G=F>>>11,H=1048576&G,I=0!=(0|H),!(1^I))break a;K=ra,L=K+20|0,M=0|f[L>>2],ra=M}return O=pa,P=0!=(0|O),P&&(Q=ra,R=Q+20|0,S=0|f[R>>2],T=0|xp(S),U=pa,(0|T)!=(0|U)&&(W=Y,X=Y,Z=0|sp(X,69204),$=Y,_=ia,ui(i,$,_),aa=ra,ba=aa+20|0,da=0|f[ba>>2],ip(j,da),ea=pa,ip(k,ea),d[sa>>0]=0|d[i>>0],d[sa+1>>0]=0|d[i+1>>0],d[sa+2>>0]=0|d[i+2>>0],d[sa+3>>0]=0|d[i+3>>0],d[sa+4>>0]=0|d[i+4>>0],d[sa+5>>0]=0|d[i+5>>0],d[sa+6>>0]=0|d[i+6>>0],d[sa+7>>0]=0|d[i+7>>0],ta=sa+8|0,d[ta>>0]=0|d[j>>0],d[ta+1>>0]=0|d[j+1>>0],d[ta+2>>0]=0|d[j+2>>0],d[ta+3>>0]=0|d[j+3>>0],d[ta+4>>0]=0|d[j+4>>0],d[ta+5>>0]=0|d[j+5>>0],d[ta+6>>0]=0|d[j+6>>0],d[ta+7>>0]=0|d[j+7>>0],ua=sa+16|0,d[ua>>0]=0|d[k>>0],d[ua+1>>0]=0|d[k+1>>0],d[ua+2>>0]=0|d[k+2>>0],d[ua+3>>0]=0|d[k+3>>0],d[ua+4>>0]=0|d[k+4>>0],d[ua+5>>0]=0|d[k+5>>0],d[ua+6>>0]=0|d[k+6>>0],d[ua+7>>0]=0|d[k+7>>0],Dr(W,Z,64947,sa))),fa=ra,N=fa,oa=N,o=wa,0|oa}function xp(a){a|=0;var b=0,c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,q=0,r=0,s=0,t=0,u=0,w=0;if(w=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),l=a,m=l,0==(0|m))return b=0,j=b,o=w,0|j;for(;;){if(q=l,r=0|f[q>>2],s=255&r,t=12==(0|s),t?k=1:(u=l,c=0|f[u>>2],d=255&c,e=11==(0|d),k=e),g=l,!k)break;h=g+20|0,i=0|f[h>>2],l=i}return b=g,j=b,o=w,0|j}function yp(a,b){a|=0,b|=0;var c=0,d=0,e=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0;return M=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),n=a,A=b,G=A,H=0!=(0|G),H&&(I=n,J=A,zp(I,J)),K=n,c=A,d=0|Ap(K,c),F=d,e=A,0!=(0|e)?(h=F,i=0|f[h>>2],j=i>>>11,k=-256&j,l=A,m=0|f[l>>2],q=m>>>11,r=255&q,s=255&r,t=s<<24>>24,u=k|t,v=F,w=0|f[v>>2],x=2097151&u,y=x<<11,z=2047&w,B=z|y,f[v>>2]=B,C=n,D=F,Bp(C,D),E=F,o=M,0|E):(C=n,D=F,Bp(C,D),E=F,o=M,0|E)}function zp(a,b){a|=0,b|=0;var c=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,I=0;if(I=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),G=I,A=I+8|0,q=a,z=b,B=z,C=0|f[B>>2],D=255&C,E=9!=(0|D),E&&(F=q,c=q,e=0|sp(c,69204),g=z,ip(A,g),d[G>>0]=0|d[A>>0],d[G+1>>0]=0|d[A+1>>0],d[G+2>>0]=0|d[A+2>>0],d[G+3>>0]=0|d[A+3>>0],d[G+4>>0]=0|d[A+4>>0],d[G+5>>0]=0|d[A+5>>0],d[G+6>>0]=0|d[A+6>>0],d[G+7>>0]=0|d[A+7>>0],Dr(F,e,64992,G)),h=z,i=0|f[h>>2],j=255&i,k=12==(0|j),k&&(l=q,m=q,n=0|sp(m,69204),Ar(l,n,65030)),r=z,s=q,t=s+36|0,u=0|f[t>>2],!((0|r)==(0|u)))return void(o=I);w=q,x=q,y=0|sp(x,69204),Ar(w,y,65069)}function Ap(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,G=0;return G=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),n=a,y=b,A=n,B=n,C=B+36|0,D=0|f[C>>2],E=0|Tc(A,9,D),z=E,c=y,d=0!=(0|c),d?(e=y,g=z,h=g+20|0,f[h>>2]=e,i=n,j=z,k=y,Yc(i,j,k)):(l=n,m=l+32|0,q=0|f[m>>2],r=z,s=r+20|0,f[s>>2]=q),t=n,u=0|Yo(t),v=z,w=v+16|0,f[w>>2]=u,x=z,o=G,0|x}function Bp(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,Ma=0;if(Ma=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),c=Ma+24|0,ja=Ma,s=a,D=b,ua=D,Fa=ua+4|0,Ka=0|f[Fa>>2],g=0|f[Ka>>2],h=255&g,12==(0|h))return void(o=Ma);j=s,k=s,l=k+36|0,m=0|f[l>>2],n=0|Tc(j,12,m),O=n,q=s,r=0|Yo(q),t=O,u=t+16|0,f[u>>2]=r,v=O,w=v+12|0,f[w>>2]=0,x=D,y=0|f[x>>2],z=255&y,A=9==(0|z),B=D;do{if(A){if(Z=B,C=Z,E=C+20|0,F=0|f[E>>2],0!=(0|F)){L=Z,M=L+20|0,N=0|f[M>>2],P=N+4|0,Q=0|f[P>>2],R=O,d=Q,e=R;break}H=s,I=H+36|0,J=0|f[I>>2],K=O,d=J,e=K;break}if(S=0|f[B>>2],T=255&S,U=12==(0|T),V=D,!U){qa=V+4|0,ra=0|f[qa>>2],sa=O,d=ra,e=sa;break}for(Z=V;;){if(W=Z,X=W+20|0,Y=0|f[X>>2],$=0|f[Y>>2],_=255&$,!(11==(0|_)))break;ba=Z,da=ba+20|0,ea=0|f[da>>2],Z=ea}fa=s,ga=Z,ha=ga+20|0,ia=0|f[ha>>2],Bp(fa,ia),ka=Z,la=ka+20|0,ma=0|f[la>>2],na=ma+4|0,oa=0|f[na>>2],pa=O,d=oa,e=pa}while(0);ta=e+20|0,f[ta>>2]=d,va=O,wa=D,xa=wa+4|0,f[xa>>2]=va,ya=s,za=D,Aa=O,Yc(ya,za,Aa),Ba=s,Ca=O,Da=D,Yc(Ba,Ca,Da),Ea=s,Ga=O,Ha=s,Ia=0|ji(Ha,68237,12),Ja=D,ip(ja,Ja),f[c>>2]=0|f[ja>>2],f[c+4>>2]=0|f[ja+4>>2],Zi(Ea,Ga,Ia,c),o=Ma}function Cp(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,n=0;return n=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),f=a,g=b,h=c,i=f,j=f,k=g,l=0|ki(j,k),d=h,e=0|vp(i,l,d),o=n,0|e}function Dp(a,b,c,e){a|=0,b|=0,c|=0,e|=0;var g=0,h=0,i=0,j=0,k=0,l=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0;O=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),g=O+24|0,M=O,G=a,H=e,K=c+4|0,L=0|f[K>>2],h=0==(0|L),h?(i=0|f[c>>2],j=0!=(0|i),j?N=3:I=0):N=3;do{if(3==(0|N)){if(k=c+4|0,l=0|f[k>>2],!(9!=(0|l))){s=0|f[c>>2],I=s;break}n=G,q=G,r=0|sp(q,69204),d[M>>0]=0|d[c>>0],d[M+1>>0]=0|d[c+1>>0],d[M+2>>0]=0|d[c+2>>0],d[M+3>>0]=0|d[c+3>>0],d[M+4>>0]=0|d[c+4>>0],d[M+5>>0]=0|d[c+5>>0],d[M+6>>0]=0|d[c+6>>0],d[M+7>>0]=0|d[c+7>>0],Dr(n,r,64992,M)}}while(0);return t=G,f[g>>2]=0|f[b>>2],f[g+4>>2]=0|f[b+4>>2],rp(t,g),u=G,v=H,w=I,x=0|f[b>>2],y=0|wp(u,v,w,x),J=y,z=G,A=J,B=A+20|0,C=0|f[B>>2],D=0|xp(C),E=J,Ep(z,D,E),F=J,o=O,0|F}function Ep(a,b,c){a|=0,b|=0,c|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,y=0;y=o,o=o+64|0,(0|o)>=(0|p)&&ca(64),e=y+48|0,w=y,s=y+24|0,t=y+16|0,u=y+8|0,n=a,q=b,r=c,v=q,g=0!=(0|v),g||(h=n,i=h+32|0,j=0|f[i>>2],q=j),k=n,l=q,ip(s,l),m=r,ip(t,m),d[w>>0]=0|d[t>>0],d[w+1>>0]=0|d[t+1>>0],d[w+2>>0]=0|d[t+2>>0],d[w+3>>0]=0|d[t+3>>0],d[w+4>>0]=0|d[t+4>>0],d[w+5>>0]=0|d[t+5>>0],d[w+6>>0]=0|d[t+6>>0],d[w+7>>0]=0|d[t+7>>0],f[e>>2]=0|f[s>>2],f[e+4>>2]=0|f[s+4>>2],Xj(u,k,e,65098,1,w),o=y}function Fp(a,b){a|=0,b|=0;var c=0,d=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,A=0;return A=o,o=o+48|0,(0|o)>=(0|p)&&ca(48),c=A+24|0,u=A+8|0,v=A,s=a,t=b,w=s,x=t,pi(u,w,x),y=u+4|0,d=0|f[y>>2],0==(0|d)&&0==(0|(g=0|f[u>>2]))?(q=0,r=q,o=A,0|r):(i=s,j=s,k=j+32|0,l=0|f[k>>2],ip(v,l),m=0|f[u>>2],f[c>>2]=0|f[v>>2],f[c+4>>2]=0|f[v+4>>2],n=0|Rj(i,c,m),q=n,r=q,o=A,0|r)}function Gp(a,b,c,d){a|=0,b|=0,c|=0,d|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,ba=0;ba=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),L=a,W=b,Y=c,Z=d,e=W,g=0|f[e>>2],h=g>>>11,i=524288&h,j=0!=(0|i);a:if(j)for(k=W,l=k+20|0,m=0|f[l>>2],W=m;;){if(n=W,q=0|f[n>>2],r=q>>>11,s=1048576&r,t=0!=(0|s),!(1^t))break a;v=W,w=v+20|0,x=0|f[w>>2],W=x}if(y=W,z=y+16|0,A=0|f[z>>2],$=A,B=$,C=0!=(0|B),C||(D=L,E=0|Yo(D),F=W,G=F+16|0,f[G>>2]=E,$=E),H=L,I=$,J=Y,K=0|ap(H,I,J,0),_=K,M=Z,N=$,O=N+20|0,P=0|f[O>>2],Q=_,R=P+(Q<<2)|0,f[R>>2]=M,S=Z,!(0!=(0|S)))return void(o=ba);U=L,V=W,X=Z,Yc(U,V,X),o=ba}function Hp(a,b,c,d,e){a|=0,b|=0,c|=0,d|=0,e|=0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,E=0;E=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),y=a,z=b,A=c,B=d,i=y,j=0|Wc(i),h=j,k=y,l=B,m=0|lt(k,l),g=m,n=z,q=g,r=q+16|0,f[r>>2]=n,s=y,t=z,u=A,v=g,Gp(s,t,u,v),w=y,x=h,Xc(w,x),o=E}function Ip(a,b,c,d,e){a|=0,b|=0,c|=0,d|=0,e|=0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,u=0;u=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),m=a,n=b,q=c,r=d,s=e,f=m,g=n,h=m,i=q,j=0|ki(h,i),k=r,l=s,Hp(f,g,j,k,l),o=u}function Jp(a){a|=0;var b=0,c=0,e=0;e=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),b=e,c=b+4|0,f[c>>2]=0,f[b>>2]=0,f[a>>2]=0|f[b>>2],f[a+4>>2]=0|f[b+4>>2],o=e}function Kp(a,b,c){a|=0,b|=0,c|=0;var e=0,g=0,h=0,i=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,z=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ja=0,ka=0,la=0,ma=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ia=0,Ja=0,Ka=0,La=0,Na=0,Oa=0,Pa=0,Qa=0,Sa=0,Ta=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,$a=0,_a=0,ab=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Cb=0,Db=0,Eb=0,Gb=0,Hb=0,Ib=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,$b=0,_b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,kc=0,lc=0,mc=0,nc=0,oc=0,qc=0,rc=0,sc=0,uc=0,vc=0,xc=0,yc=0,zc=0,Ac=0,Bc=0,Cc=0,Dc=0,Ec=0,Gc=0,Hc=0,Ic=0,Jc=0,Kc=0,Lc=0,Mc=0,Nc=0,Oc=0,Pc=0,Qc=0,Rc=0,Sc=0,Tc=0,Uc=0,Vc=0,Wc=0,Xc=0,Yc=0,Zc=0,$c=0,_c=0,ad=0,bd=0,cd=0,dd=0,ed=0,fd=0,hd=0,id=0,jd=0,kd=0,md=0,nd=0,od=0,pd=0,rd=0,sd=0,ud=0,vd=0,wd=0,xd=0,yd=0,zd=0,Ad=0,Bd=0,Dd=0,Ed=0,Fd=0,Gd=0,Hd=0,Id=0,Jd=0,Kd=0,Ld=0,Md=0,Nd=0,Od=0,Pd=0,Qd=0,Rd=0,Sd=0,Td=0,Ud=0,Vd=0,Wd=0,Xd=0,Yd=0,Zd=0,$d=0,_d=0,ae=0,be=0,ce=0,de=0,fe=0,ge=0,he=0,ie=0,je=0,ke=0,le=0,me=0,ne=0,oe=0,pe=0,qe=0,re=0,se=0,te=0,ue=0,we=0,xe=0,ye=0,ze=0,Be=0,Ce=0,De=0,Ee=0,Ge=0,He=0,Je=0,Ke=0,Le=0,Me=0,Ne=0,Oe=0,Pe=0,Qe=0,Se=0,Te=0,Ue=0,Ve=0,We=0,Xe=0,Ye=0,Ze=0,$e=0,_e=0,af=0,bf=0,cf=0,df=0,ef=0,ff=0,gf=0,hf=0,jf=0,kf=0,lf=0,mf=0,nf=0,of=0,pf=0,qf=0,rf=0,sf=0,tf=0,uf=0,wf=0,xf=0,yf=0,zf=0,Bf=0,Cf=0,Df=0,Ef=0,Ff=0,Hf=0,If=0,Kf=0,Lf=0,Mf=0,Nf=0,Of=0,Qf=0,Rf=0,Sf=0,Tf=0,Vf=0,Wf=0,Xf=0,Yf=0,Zf=0,$f=0,_f=0,ag=0,bg=0,cg=0,dg=0,eg=0,fg=0,gg=0,hg=0,ig=0,jg=0,kg=0,lg=0,ng=0,og=0,pg=0,qg=0,rg=0,sg=0,tg=0,vg=0,wg=0,xg=0,yg=0,zg=0,Ag=0,Bg=0,Cg=0,Dg=0,Eg=0,Fg=0,Gg=0,Hg=0,Ig=0,Jg=0,Kg=0,Lg=0,Mg=0,Ng=0,Og=0,Qg=0,Rg=0,Sg=0,Ug=0,Vg=0,Wg=0,Xg=0,Yg=0,$g=0,_g=0,ah=0,bh=0,ch=0,dh=0,eh=0,fh=0,gh=0,hh=0,ih=0,jh=0,kh=0,lh=0,mh=0,nh=0,oh=0,ph=0,qh=0,rh=0,sh=0,th=0,uh=0,vh=0,wh=0,xh=0,yh=0,zh=0,Ah=0,Bh=0,Ch=0,Dh=0,Eh=0,Fh=0,Hh=0,Ih=0,Jh=0,Kh=0,Lh=0,Mh=0,Nh=0,Oh=0,Ph=0,Qh=0,Rh=0,Sh=0,Th=0,Uh=0,Vh=0,Wh=0,Xh=0,Yh=0,Zh=0,$h=0,_h=0,ai=0,bi=0,di=0,ei=0,fi=0,gi=0,hi=0,ii=0,ji=0,ki=0,li=0,mi=0,ni=0,oi=0,pi=0,qi=0,ri=0,si=0,ti=0,ui=0,vi=0,wi=0,xi=0,yi=0,zi=0,Ai=0,Bi=0,Ci=0,Di=0,Ei=0,Fi=0,Hi=0,Ii=0,Ji=0,Ki=0,Li=0,Ni=0,Oi=0,Pi=0,Ri=0,Si=0,Ui=0,Vi=0,Wi=0,Xi=0,Yi=0,Zi=0,$i=0,_i=0,bj=0,cj=0,dj=0,ej=0,fj=0,gj=0,hj=0,ij=0,jj=0,kj=0,lj=0,mj=0,nj=0,oj=0,pj=0,qj=0,rj=0,sj=0,tj=0,uj=0,vj=0,wj=0,xj=0,yj=0,zj=0,Aj=0,Bj=0,Cj=0,Dj=0,Ej=0,Fj=0,Gj=0,Hj=0,Ij=0,Jj=0,Kj=0,Lj=0,Mj=0,Nj=0,Oj=0,Pj=0,Qj=0,Rj=0,Sj=0,Tj=0,Uj=0,Vj=0,Wj=0,Xj=0,Yj=0,Zj=0,$j=0,_j=0,ak=0,bk=0,ck=0,dk=0,ek=0,fk=0,gk=0,hk=0,ik=0,jk=0,kk=0,lk=0,mk=0,nk=0,ok=0,pk=0,qk=0,rk=0,sk=0,tk=0,uk=0,vk=0,wk=0,xk=0,zk=0,Ak=0,Bk=0,Ck=0,Dk=0,Ek=0,Fk=0,Gk=0,Hk=0,Ik=0,Jk=0,Kk=0,Lk=0,Mk=0,Nk=0,Ok=0,Pk=0,Qk=0,Rk=0,Sk=0,Tk=0,Uk=0,Wk=0,Xk=0,Zk=0,$k=0,_k=0,al=0,bl=0,cl=0,dl=0,el=0,fl=0,gl=0,hl=0,il=0,jl=0,kl=0,ll=0,ml=0,nl=0,ol=0,pl=0,ql=0,rl=0,sl=0,tl=0,ul=0,vl=0,wl=0,xl=0,yl=0,zl=0,Al=0,Bl=0,Cl=0,Dl=0,El=0,Fl=0,Gl=0,Hl=0,Il=0,Jl=0,Kl=0,Ll=0,Ml=0,Nl=0,Ol=0,Pl=0,Ql=0,Rl=0,Sl=0,Tl=0,Ul=0,Vl=0,Wl=0,Xl=0,Yl=0,Zl=0,$l=0,_l=0,am=0,bm=0,cm=0,dm=0,em=0,fm=0,gm=0,hm=0,im=0,jm=0,km=0,lm=0,mm=0,nm=0,om=0,pm=0,qm=0,rm=0,sm=0,tm=0,um=0,vm=0,wm=0,xm=0,ym=0,zm=0,Am=0,Bm=0,Cm=0,Dm=0,Em=0,Fm=0,Gm=0,Hm=0,Im=0,Jm=0,Km=0,Lm=0,Mm=0,Nm=0,Om=0,Pm=0,Qm=0,Rm=0,Sm=0,Tm=0,Um=0,Vm=0,Wm=0,Xm=0,Ym=0,Zm=0,$m=0,_m=0,an=0,bn=0,cn=0,dn=0,en=0,fn=0,gn=0,hn=0,jn=0,kn=0,ln=0,mn=0,nn=0,on=0,pn=0,qn=0,rn=0,sn=0,tn=0,un=0,vn=0,wn=0,xn=0,yn=0,zn=0,An=0,Bn=0,Cn=0,Dn=0,En=0,Fn=0,Gn=0,Hn=0,In=0,Jn=0,Kn=0,Ln=0,Mn=0,Nn=0,On=0,Pn=0,Qn=0,Rn=0,Sn=0,Tn=0,Un=0,Vn=0,Wn=0,Xn=0,Yn=0,Zn=0,$n=0,_n=0,ao=0,bo=0,co=0,eo=0,fo=0,go=0,ho=0,io=0,jo=0,ko=0,lo=0,mo=0,no=0,oo=0,po=0,qo=0,ro=0,to=0,uo=0,vo=0,wo=0;wo=o,o=o+448|0,(0|o)>=(0|p)&&ca(448),g=wo+424|0,r=wo+416|0,q=wo+408|0,n=wo+400|0,m=wo+392|0,l=wo+384|0,k=wo+376|0,i=wo+368|0,h=wo+360|0,e=wo+352|0,uo=wo+8|0,to=wo,Df=wo+434|0,fl=wo+320|0,Fa=wo+288|0,kb=wo+272|0,Sb=wo+256|0,xc=wo+240|0,Ic=wo+232|0,Kd=wo+208|0,Vd=wo+200|0,Be=wo+184|0,Me=wo+176|0,_f=wo+144|0,nh=wo+112|0,Vh=wo+96|0,Ai=wo+80|0,dl=wo+16|0,vb=a,yd=b,Jh=0,el=vb,gl=el+12|0,hl=0|f[gl>>2],il=hl+4|0,jl=0|f[il>>2],kl=jl+8|0,Mj=kl,ll=vb,ml=ll+12|0,nl=0|f[ml>>2],ol=nl+16|0,pl=0|f[ol>>2],rl=pl+36|0,sl=0|f[rl>>2],ql=sl,Bl=0,s=1,f[fl>>2]=c,tl=ql,(ul=(0|tl)<0)&&(vl=vb,wl=vl+12|0,xl=0|f[wl>>2],yl=xl+4|0,zl=0|f[yl>>2],Al=zl+8|0,Cl=0|f[Al>>2],D=Cl,Dl=D,El=Dl+12|0,Fl=0|f[El>>2],ql=Fl,Gl=D,Hl=Gl+20|0,Il=0|f[Hl>>2],Mj=Il);a:for(;;){if(Jl=yd,Kl=Jl+1|0,yd=Kl,Ll=0|d[Jl>>0],d[Df>>0]=Ll,t=Ll<<24>>24!=0,u=0|d[Df>>0],!t){vo=98;break}switch(0|u<<24>>24){case 63:case 38:case 42:case 124:break;default:if(w=ql,x=Jh,(0|w)<=(0|x)){if(z=Bl,!(z<<24>>24!=0)){vo=8;break a}s=0}}switch(F=0|d[Df>>0],0|F<<24>>24){case 111:if(Ml=0|f[fl>>2],H=Ml,I=4,Gm=I,ym=Gm-1|0,J=H+ym|0,K=4,kn=K,bn=kn-1|0,Vm=-1^bn,L=J&Vm,M=L,N=0|f[M>>2],em=M+4|0,f[fl>>2]=em,Z=N,P=Z,O=P,Q=Jh,R=ql,!((0|Q)<(0|R)))continue a;T=O,U=Mj,V=U+8|0,Mj=V,f[T>>2]=0|f[U>>2],f[T+4>>2]=0|f[U+4>>2],W=Jh,X=W+1|0,Jh=X;continue a;case 67:if(Tl=0|f[fl>>2],Y=Tl,$=4,mn=$,ln=mn-1|0,_=Y+ln|0,aa=4,pn=aa,on=pn-1|0,nn=-1^on,ba=_&nn,da=ba,ea=0|f[da>>2],pm=da+4|0,f[fl>>2]=pm,ua=ea,fa=ua,ja=fa,ga=Jh,ha=ql,!((0|ga)<(0|ha)))continue a;switch(ka=Mj,la=ka+8|0,Mj=la,f[Fa>>2]=0|f[ka>>2],f[Fa+4>>2]=0|f[ka+4>>2],ma=Fa+4|0,0|(0|f[ma>>2])){case 12:case 10:case 9:break;default:vo=14;break a}ra=ja,f[ra>>2]=0|f[Fa>>2],f[ra+4>>2]=0|f[Fa+4>>2],sa=Jh,ta=sa+1|0,Jh=ta;continue a;case 83:if(cm=0|f[fl>>2],va=cm,wa=4,rn=wa,qn=rn-1|0,xa=va+qn|0,ya=4,un=ya,tn=un-1|0,sn=-1^tn,za=xa&sn,Aa=za,Ba=0|f[Aa>>2],xm=Aa+4|0,f[fl>>2]=xm,_a=Ba,Ca=_a,Qa=Ca,Da=yd,Ea=0|d[Da>>0],Ga=Ea<<24>>24,33==(0|Ga)&&(Ia=yd,Ja=Ia+1|0,yd=Ja,Ka=Jh,La=ql,(0|Ka)<(0|La)&&(Na=Mj,Oa=Na+4|0,Pa=0|f[Oa>>2],0==(0|Pa)&&(Sa=Mj,Ta=0|f[Sa>>2],!(0!=(0|Ta)))))){Va=Qa,Wa=Mj,Xa=Wa+8|0,Mj=Xa,f[Va>>2]=0|f[Wa>>2],f[Va+4>>2]=0|f[Wa+4>>2],Ya=Jh,Za=Ya+1|0,Jh=Za;continue a}if($a=Jh,ab=ql,!((0|$a)<(0|ab)))continue a;cb=Qa,db=vb,eb=Mj,fb=eb+8|0,Mj=fb,f[e>>2]=0|f[eb>>2],f[e+4>>2]=0|f[eb+4>>2],Lp(kb,db,e),f[cb>>2]=0|f[kb>>2],f[cb+4>>2]=0|f[kb+4>>2],gb=Jh,hb=gb+1|0,Jh=hb;continue a;case 65:if(dm=0|f[fl>>2],ib=dm,jb=4,wn=jb,vn=wn-1|0,lb=ib+vn|0,mb=4,zn=mb,yn=zn-1|0,xn=-1^yn,nb=lb&xn,ob=nb,pb=0|f[ob>>2],fm=ob+4|0,f[fl>>2]=fm,Hb=pb,qb=Hb,wb=qb,rb=yd,sb=0|d[rb>>0],tb=sb<<24>>24,33==(0|tb)&&(xb=yd,yb=xb+1|0,yd=yb,zb=Jh,Ab=ql,(0|zb)<(0|Ab)&&(Cb=Mj,Db=Cb+4|0,Eb=0|f[Db>>2],0==(0|Eb)&&(Gb=Mj,Ib=0|f[Gb>>2],!(0!=(0|Ib)))))){Kb=wb,Lb=Mj,Mb=Lb+8|0,Mj=Mb,f[Kb>>2]=0|f[Lb>>2],f[Kb+4>>2]=0|f[Lb+4>>2],Nb=Jh,Ob=Nb+1|0,Jh=Ob;continue a}if(Pb=Jh,Qb=ql,!((0|Pb)<(0|Qb)))continue a;Tb=wb,Ub=vb,Vb=Mj,Wb=Vb+8|0,Mj=Wb,f[h>>2]=0|f[Vb>>2],f[h+4>>2]=0|f[Vb+4>>2],Mp(Sb,Ub,h),f[Tb>>2]=0|f[Sb>>2],f[Tb+4>>2]=0|f[Sb+4>>2],Xb=Jh,Yb=Xb+1|0,Jh=Yb;continue a;case 72:if(Nl=0|f[fl>>2],Zb=Nl,$b=4,Bn=$b,An=Bn-1|0,_b=Zb+An|0,ac=4,En=ac,Dn=En-1|0,Cn=-1^Dn,cc=_b&Cn,dc=cc,ec=0|f[dc>>2],gm=dc+4|0,f[fl>>2]=gm,mc=ec,fc=mc,bc=fc,gc=yd,hc=0|d[gc>>0],ic=hc<<24>>24,33==(0|ic)&&(kc=yd,lc=kc+1|0,yd=lc,nc=Jh,oc=ql,(0|nc)<(0|oc)&&(qc=Mj,rc=qc+4|0,sc=0|f[rc>>2],0==(0|sc)&&(uc=Mj,vc=0|f[uc>>2],!(0!=(0|vc)))))){yc=bc,zc=Mj,Ac=zc+8|0,Mj=Ac,f[yc>>2]=0|f[zc>>2],f[yc+4>>2]=0|f[zc+4>>2],Bc=Jh,Cc=Bc+1|0,Jh=Cc;continue a}if(Dc=Jh,Ec=ql,!((0|Dc)<(0|Ec)))continue a;Gc=bc,Hc=vb,Jc=Mj,Kc=Jc+8|0,Mj=Kc,f[i>>2]=0|f[Jc>>2],f[i+4>>2]=0|f[Jc+4>>2],Np(xc,Hc,i),f[Gc>>2]=0|f[xc>>2],f[Gc+4>>2]=0|f[xc+4>>2],Lc=Jh,Mc=Lc+1|0,Jh=Mc;continue a;case 115:if(Tc=0,cd=0,Ol=0|f[fl>>2],Nc=Ol,Oc=4,Gn=Oc,Fn=Gn-1|0,Pc=Nc+Fn|0,Qc=4,Jn=Qc,In=Jn-1|0,Hn=-1^In,Rc=Pc&Hn,Sc=Rc,Uc=0|f[Sc>>2],hm=Sc+4|0,f[fl>>2]=hm,nd=Uc,Vc=nd,Tc=Vc,Pl=0|f[fl>>2],Wc=Pl,Xc=4,Ln=Xc,Kn=Ln-1|0,Yc=Wc+Kn|0,Zc=4,On=Zc,Nn=On-1|0,Mn=-1^Nn,$c=Yc&Mn,_c=$c,ad=0|f[_c>>2],im=_c+4|0,f[fl>>2]=im,zd=ad,bd=zd,cd=bd,dd=yd,ed=0|d[dd>>0],fd=ed<<24>>24,33==(0|fd)&&(hd=yd,id=hd+1|0,yd=id,jd=Jh,kd=ql,(0|jd)<(0|kd)&&(md=Mj,od=md+4|0,pd=0|f[od>>2],0==(0|pd)&&(rd=Mj,sd=0|f[rd>>2],!(0!=(0|sd)))))){ud=Tc,f[ud>>2]=0,vd=cd,f[vd>>2]=0,wd=Jh,xd=wd+1|0,Jh=xd;continue a}if(Ad=Jh,Bd=ql,!((0|Ad)<(0|Bd)))continue a;Dd=vb,Ed=Mj,Fd=Ed+8|0,Mj=Fd,f[k>>2]=0|f[Ed>>2],f[k+4>>2]=0|f[Ed+4>>2],Lp(Kd,Dd,k),f[Ic>>2]=0|f[Kd>>2],f[Ic+4>>2]=0|f[Kd+4>>2],Gd=0|f[Ic>>2],Hd=0|f[Gd>>2],Id=Hd>>>11,Jd=8&Id,Ld=0!=(0|Jd),Md=0|f[Ic>>2],Nd=Md+12|0,Ld?Rd=Nd:(Od=Nd+8|0,Pd=0|f[Od>>2],Rd=Pd),Qd=Tc,f[Qd>>2]=Rd,Sd=0|f[Ic>>2],Td=0|f[Sd>>2],Ud=Td>>>11,Wd=8&Ud,Xd=0!=(0|Wd),Yd=0|f[Ic>>2],Xd?(Zd=0|f[Yd>>2],$d=Zd>>>11,_d=496&$d,ae=_d>>4,ge=ae):(be=Yd+12|0,ce=0|f[be>>2],ge=ce),de=cd,f[de>>2]=ge,he=Jh,ie=he+1|0,Jh=ie;continue a;case 122:if(Ql=0|f[fl>>2],je=Ql,ke=4,Qn=ke,Pn=Qn-1|0,le=je+Pn|0,me=4,Tn=me,Sn=Tn-1|0,Rn=-1^Sn,ne=le&Rn,oe=ne,pe=0|f[oe>>2],jm=oe+4|0,f[fl>>2]=jm,qe=pe,re=qe,fe=re,se=yd,te=0|d[se>>0],ue=te<<24>>24,33==(0|ue)&&(we=yd,xe=we+1|0,yd=xe,ye=Jh,ze=ql,(0|ye)<(0|ze)&&(Ce=Mj,De=Ce+4|0,Ee=0|f[De>>2],0==(0|Ee)&&(Ge=Mj,He=0|f[Ge>>2],!(0!=(0|He)))))){Je=fe,f[Je>>2]=0,Ke=Jh,Le=Ke+1|0,Jh=Le,Ne=Mj,Oe=Ne+8|0,Mj=Oe;continue a}if(Pe=Jh,Qe=ql,!((0|Pe)<(0|Qe)))continue a;Se=vb,Te=Mj,Ue=Te+8|0,Mj=Ue,f[l>>2]=0|f[Te>>2],f[l+4>>2]=0|f[Te+4>>2],Lp(Be,Se,l),f[Vd>>2]=0|f[Be>>2],f[Vd+4>>2]=0|f[Be+4>>2],Ve=vb,We=0|Zg(Ve,Vd),Ye=fe,f[Ye>>2]=We,Ze=Jh,$e=Ze+1|0,Jh=$e;continue a;case 97:if(Rl=0|f[fl>>2],_e=Rl,af=4,Vn=af,Un=Vn-1|0,bf=_e+Un|0,cf=4,Yn=cf,Xn=Yn-1|0,Wn=-1^Xn,df=bf&Wn,ef=df,ff=0|f[ef>>2],km=ef+4|0,f[fl>>2]=km,Ef=ff,hf=Ef,gf=hf,Sl=0|f[fl>>2],jf=Sl,kf=4,$n=kf,Zn=$n-1|0,lf=jf+Zn|0,mf=4,bo=mf,ao=bo-1|0,_n=-1^ao,nf=lf&_n,of=nf,pf=0|f[of>>2],lm=of+4|0,f[fl>>2]=lm,Qf=pf,qf=Qf,sf=qf,rf=yd,tf=0|d[rf>>0],uf=tf<<24>>24,33==(0|uf)&&(wf=yd,xf=wf+1|0,yd=xf,yf=Jh,zf=ql,(0|yf)<(0|zf)&&(Bf=Mj,Cf=Bf+4|0,Ff=0|f[Cf>>2],0==(0|Ff)&&(Hf=Mj,If=0|f[Hf>>2],!(0!=(0|If)))))){Kf=gf,f[Kf>>2]=0,Lf=sf,f[Lf>>2]=0,Mf=Jh,Nf=Mf+1|0,Jh=Nf,Of=Mj,Rf=Of+8|0,Mj=Rf;continue a}if(Sf=Jh,Tf=ql,!((0|Sf)<(0|Tf)))continue a;Vf=vb,Wf=Mj,Xf=Wf+8|0,Mj=Xf,f[m>>2]=0|f[Wf>>2],f[m+4>>2]=0|f[Wf+4>>2],Mp(_f,Vf,m),f[Me>>2]=0|f[_f>>2],f[Me+4>>2]=0|f[_f+4>>2],Yf=0|f[Me>>2],Xe=Yf,Zf=Xe,$f=Zf+20|0,ag=0|f[$f>>2],bg=gf,f[bg>>2]=ag,cg=Xe,dg=cg+12|0,eg=0|f[dg>>2],fg=sf,f[fg>>2]=eg,gg=Jh,hg=gg+1|0,Jh=hg;continue a;case 102:if(Ul=0|f[fl>>2],ig=Ul,jg=4,eo=jg,co=eo-1|0,lg=ig+co|0,ng=4,ho=ng,go=ho-1|0,fo=-1^go,og=lg&fo,pg=og,qg=0|f[pg>>2],mm=pg+4|0,f[fl>>2]=mm,wg=qg,rg=wg,kg=rg,sg=Jh,tg=ql,!((0|sg)<(0|tg)))continue a;vg=vb,xg=Mj,f[n>>2]=0|f[xg>>2],f[n+4>>2]=0|f[xg+4>>2],yg=+ee(vg,n),zg=kg,j[zg>>2]=yg,Ag=Mj,Bg=Ag+8|0,Mj=Bg,Cg=Jh,Dg=Cg+1|0,Jh=Dg;continue a;case 105:if(Vl=0|f[fl>>2],Eg=Vl,Fg=4,jo=Fg,io=jo-1|0,Gg=Eg+io|0,Ig=4,mo=Ig,lo=mo-1|0,ko=-1^lo,Jg=Gg&ko,Kg=Jg,Lg=0|f[Kg>>2],nm=Kg+4|0,f[fl>>2]=nm,Sg=Lg,Mg=Sg,Hg=Mg,Ng=Jh,Og=ql,!((0|Ng)<(0|Og)))continue a;switch(Qg=Mj,Rg=Qg+4|0,0|(0|f[Rg>>2])){case 16:vo=72;break a;case 3:Ug=Mj,Vg=0|f[Ug>>2],Wg=Hg,f[Wg>>2]=Vg;break;case 6:if(Xg=Mj,Yg=+j[Xg>>2],ch=Yg,$g=ch,_g=$g<=2147483648,ah=ch,bh=ah>=-2147483648,!(_g&bh)){vo=70;break a}gh=ch,hh=~~gh,ih=Hg,f[ih>>2]=hh;break;default:mh=vb,oh=Mj,f[q>>2]=0|f[oh>>2],f[q+4>>2]=0|f[oh+4>>2],Pf(nh,mh,q),ph=0|f[nh>>2],qh=Hg,f[qh>>2]=ph}rh=Mj,sh=rh+8|0,Mj=sh,th=Jh,uh=th+1|0,Jh=uh;continue a;case 98:if(Wl=0|f[fl>>2],vh=Wl,wh=4,oo=wh,no=oo-1|0,xh=vh+no|0,zh=4,ro=zh,qo=ro-1|0,po=-1^qo,Ah=xh&po,Bh=Ah,Ch=0|f[Bh>>2],om=Bh+4|0,f[fl>>2]=om,Kh=Ch,Dh=Kh,yh=Dh,Eh=Jh,Fh=ql,!((0|Eh)<(0|Fh)))continue a;Hh=Mj,Ih=Hh+8|0,Mj=Ih,f[Vh>>2]=0|f[Hh>>2],f[Vh+4>>2]=0|f[Hh+4>>2],Lh=Vh+4|0,Mh=0|f[Lh>>2],Nh=0!=(0|Mh),Oh=1&Nh,Ph=255&Oh,Qh=yh,d[Qh>>0]=Ph,Rh=Jh,Sh=Rh+1|0,Jh=Sh;continue a;case 110:if(Xl=0|f[fl>>2],Th=Xl,Uh=4,Am=Uh,zm=Am-1|0,Wh=Th+zm|0,Xh=4,Dm=Xh,Cm=Dm-1|0,Bm=-1^Cm,Yh=Wh&Bm,Zh=Yh,$h=0|f[Zh>>2],qm=Zh+4|0,f[fl>>2]=qm,pi=$h,_h=pi,ei=_h,ai=Jh,bi=ql,!((0|ai)<(0|bi)))continue a;di=Mj,fi=di+8|0,Mj=fi,f[Ai>>2]=0|f[di>>2],f[Ai+4>>2]=0|f[di+4>>2],gi=vb,f[r>>2]=0|f[Ai>>2],f[r+4>>2]=0|f[Ai+4>>2],hi=0|Op(gi,r),ii=ei,f[ii>>2]=hi,ji=Jh,ki=ji+1|0,Jh=ki;continue a;case 100:if(Yl=0|f[fl>>2],li=Yl,mi=4,Fm=mi,Em=Fm-1|0,ni=li+Em|0,oi=4,Jm=oi,Im=Jm-1|0,Hm=-1^Im,qi=ni&Hm,ri=qi,si=0|f[ri>>2],rm=ri+4|0,f[fl>>2]=rm,fj=si,ti=fj,Li=ti,Zl=0|f[fl>>2],ui=Zl,vi=4,Lm=vi,Km=Lm-1|0,wi=ui+Km|0,xi=4,Om=xi,Nm=Om-1|0,Mm=-1^Nm,yi=wi&Mm,zi=yi,Bi=0|f[zi>>2],sm=zi+4|0,f[fl>>2]=sm,qj=Bi,Ci=qj,Wi=Ci,Di=yd,Ei=0|d[Di>>0],Fi=Ei<<24>>24,33==(0|Fi)&&(Hi=yd,Ii=Hi+1|0,yd=Ii,Ji=Jh,Ki=ql,(0|Ji)<(0|Ki)&&(Ni=Mj,Oi=Ni+4|0,Pi=0|f[Oi>>2],0==(0|Pi)&&(Ri=Mj,Si=0|f[Ri>>2],!(0!=(0|Si)))))){Ui=Li,f[Ui>>2]=0,Vi=Jh,Xi=Vi+1|0,Jh=Xi,Yi=Mj,Zi=Yi+8|0,Mj=Zi;continue a}if($i=Jh,_i=ql,!((0|$i)<(0|_i)))continue a;bj=vb,cj=Mj,dj=cj+8|0,Mj=dj,ej=Wi,f[g>>2]=0|f[cj>>2],f[g+4>>2]=0|f[cj+4>>2],gj=0|Xr(bj,g,ej),hj=Li,f[hj>>2]=gj,ij=Jh,jj=ij+1|0,Jh=jj;continue a;case 38:$l=0|f[fl>>2],kj=$l,lj=4,Qm=lj,Pm=Qm-1|0,mj=kj+Pm|0,nj=4,Tm=nj,Sm=Tm-1|0,Rm=-1^Sm,oj=mj&Rm,pj=oj,rj=0|f[pj>>2],tm=pj+4|0,f[fl>>2]=tm,Yj=rj,sj=Yj,Bj=sj,tj=vb,uj=tj+12|0,vj=0|f[uj>>2],wj=vj+16|0,xj=0|f[wj>>2],yj=xj+36|0,zj=0|f[yj>>2],Aj=(0|zj)<0,Cj=vb,Dj=Cj+12|0,Ej=0|f[Dj>>2],Fj=Ej+4|0,Gj=0|f[Fj>>2],Aj?(Hj=Gj+16|0,Nj=Hj):(Ij=vb,Jj=Ij+12|0,Kj=0|f[Jj>>2],Lj=Kj+16|0,Oj=0|f[Lj>>2],Pj=Oj+36|0,Qj=0|f[Pj>>2],Rj=Gj+(Qj<<3)|0,Sj=Rj+8|0,Nj=Sj),Tj=Bj,Uj=Nj,f[Tj>>2]=0|f[Uj>>2],f[Tj+4>>2]=0|f[Uj+4>>2];continue a;case 124:Bl=1;continue a;case 63:_l=0|f[fl>>2],Vj=_l,Wj=4,Wm=Wj,Um=Wm-1|0,Xj=Vj+Um|0,Zj=4,Zm=Zj,Ym=Zm-1|0,Xm=-1^Ym,$j=Xj&Xm,_j=$j,ak=0|f[_j>>2],um=_j+4|0,f[fl>>2]=um,sk=ak,bk=sk,hk=bk,ck=s,dk=hk,d[dk>>0]=ck;continue a;case 42:if(am=0|f[fl>>2],ek=am,fk=4,_m=fk,$m=_m-1|0,gk=ek+$m|0,ik=4,dn=ik,cn=dn-1|0,an=-1^cn,jk=gk&an,kk=jk,lk=0|f[kk>>2],vm=kk+4|0,f[fl>>2]=vm,Zk=lk,mk=Zk,Dk=mk,bm=0|f[fl>>2],nk=bm,ok=4,fn=ok,en=fn-1|0,pk=nk+en|0,qk=4,jn=qk,hn=jn-1|0,gn=-1^hn,rk=pk&gn,tk=rk,uk=0|f[tk>>2],wm=tk+4|0,f[fl>>2]=wm,cl=uk,vk=cl,Ok=vk,wk=ql,xk=Jh,!((0|wk)>(0|xk))){Pk=Ok,f[Pk>>2]=0,Qk=Dk,f[Qk>>2]=0;continue a}zk=ql,Ak=Jh,Bk=zk-Ak|0,Ck=Ok,f[Ck>>2]=Bk,Ek=Ok,Fk=0|f[Ek>>2],Gk=(0|Fk)>0,Gk&&(Hk=Mj,Ik=Dk,f[Ik>>2]=Hk),Jk=ql,Jh=Jk,Kk=Ok,Lk=0|f[Kk>>2],Mk=Mj,Nk=Mk+(Lk<<3)|0,Mj=Nk;continue a;default:vo=97;break a}}if(8==(0|vo))B=vb,C=vb,E=0|sp(C,69160),Ar(B,E,65128);else if(14==(0|vo))oa=vb,pa=vb,qa=0|sp(pa,69204),d[to>>0]=0|d[Fa>>0],d[to+1>>0]=0|d[Fa+1>>0],d[to+2>>0]=0|d[Fa+2>>0],d[to+3>>0]=0|d[Fa+3>>0],d[to+4>>0]=0|d[Fa+4>>0],d[to+5>>0]=0|d[Fa+5>>0],d[to+6>>0]=0|d[Fa+6>>0],d[to+7>>0]=0|d[Fa+7>>0],Dr(oa,qa,65154,to);else if(70==(0|vo))dh=vb,eh=vb,fh=0|sp(eh,65177),Ar(dh,fh,65188);else if(72==(0|vo))jh=vb,kh=vb,lh=0|sp(kh,69204),Ar(jh,lh,65210);else if(97==(0|vo))Rk=vb,Sk=vb,Tk=0|sp(Sk,69160),Uk=vb,mg(dl,Uk,Df,1),d[uo>>0]=0|d[dl>>0],d[uo+1>>0]=0|d[dl+1>>0],d[uo+2>>0]=0|d[dl+2>>0],d[uo+3>>0]=0|d[dl+3>>0],d[uo+4>>0]=0|d[dl+4>>0],d[uo+5>>0]=0|d[dl+5>>0],d[uo+6>>0]=0|d[dl+6>>0],d[uo+7>>0]=0|d[dl+7>>0],Dr(Rk,Tk,65256,uo);else if(98==(0|vo)){if(u<<24>>24!=0)return bl=Jh,o=wo,0|bl;if(Wk=ql,Xk=Jh,!((0|Wk)>(0|Xk)))return bl=Jh,o=wo,0|bl;$k=vb,_k=vb,al=0|sp(_k,69160),Ar($k,al,65128)}return 0}function Lp(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,i=0;i=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),d=i+8|0,e=b,g=e,f[d>>2]=0|f[c>>2],f[d+4>>2]=0|f[c+4>>2],Pp(a,g,d,16,65324,65331),o=i}function Mp(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,i=0;i=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),d=i+8|0,e=b,g=e,f[d>>2]=0|f[c>>2],f[d+4>>2]=0|f[c+4>>2],Pp(a,g,d,14,65311,65317),o=i}function Np(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,i=0;i=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),d=i+8|0,e=b,g=e,f[d>>2]=0|f[c>>2],f[d+4>>2]=0|f[c+4>>2],Pp(a,g,d,15,65286,65291),o=i}function Op(a,b){a|=0,b|=0;var c=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,A=0,B=0,C=0,E=0;return E=o,o=o+64|0,(0|o)>=(0|p)&&ca(64),g=E+56|0,e=E+48|0,c=E+40|0,C=E+8|0,B=E,v=E+24|0,w=E+16|0,u=a,x=b+4|0,y=0|f[x>>2],4==(0|y)?(A=0|f[b>>2],t=A,s=t,o=E,0|s):(h=b+4|0,i=0|f[h>>2],j=16==(0|i),k=u,j||(f[g>>2]=0|f[b>>2],f[g+4>>2]=0|f[b+4>>2],Xj(w,k,g,69281,0,B),n=u,q=u,r=0|sp(q,69204),d[C>>0]=0|d[w>>0],d[C+1>>0]=0|d[w+1>>0],d[C+2>>0]=0|d[w+2>>0],d[C+3>>0]=0|d[w+3>>0],d[C+4>>0]=0|d[w+4>>0],d[C+5>>0]=0|d[w+5>>0],d[C+6>>0]=0|d[w+6>>0],d[C+7>>0]=0|d[w+7>>0],Dr(n,r,68731,C)),l=u,f[c>>2]=0|f[b>>2],f[c+4>>2]=0|f[b+4>>2],Lp(v,l,c),f[e>>2]=0|f[v>>2],f[e+4>>2]=0|f[v+4>>2],m=0|li(k,e),t=m,s=t,o=E,0|s)}function Pp(a,b,c,e,g,h){a|=0,b|=0,c|=0,e|=0,g|=0,h|=0;var i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,v=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,I=0;return I=o,o=o+64|0,(0|o)>=(0|p)&&ca(64),i=I+48|0,G=I,j=I+24|0,k=I+16|0,l=I+8|0,C=b,D=e,E=g,F=h,m=C,n=D,q=E,r=F,f[i>>2]=0|f[c>>2],f[i+4>>2]=0|f[c+4>>2],Gf(k,m,i,n,q,r),f[j>>2]=0|f[k>>2],f[j+4>>2]=0|f[k+4>>2],s=j+4|0,t=0|f[s>>2],0==(0|t)?(v=0|f[j>>2],0!=(0|v)?(f[a>>2]=0|f[j>>2],f[a+4>>2]=0|f[j+4>>2],void(o=I)):(x=C,y=C,z=0|sp(y,69204),A=C,B=E,pg(l,A,B),d[G>>0]=0|d[l>>0],d[G+1>>0]=0|d[l+1>>0],d[G+2>>0]=0|d[l+2>>0],d[G+3>>0]=0|d[l+3>>0],d[G+4>>0]=0|d[l+4>>0],d[G+5>>0]=0|d[l+5>>0],d[G+6>>0]=0|d[l+6>>0],d[G+7>>0]=0|d[l+7>>0],Dr(x,z,65299,G),void 0)):(f[a>>2]=0|f[j>>2],f[a+4>>2]=0|f[j+4>>2],void(o=I))}function Qp(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,v=0;if(v=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),l=a,m=b,n=c,r=l,s=m,t=m,d=0|Rp(t),e=n,f=0|Sp(r,s,d,e,1),q=f,g=q,!((0|g)<0))return void(o=v);i=l,j=l,k=0|sp(j,69160),Ar(i,k,65338)}function Rp(a){a|=0;var b=0,c=0,d=0,e=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,u=0,v=0,w=0,y=0;if(y=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),b=a,n=b,q=0|f[n>>2],r=q>>>11,s=524288&r,!(0!=(0|s)))return m=b,o=y,0|m;for(u=b,v=u+20|0,w=0|f[v>>2],b=w;;){if(c=b,d=0|f[c>>2],e=d>>>11,g=1048576&e,h=0!=(0|g),!(1^h))break;j=b,k=j+20|0,l=0|f[k>>2],b=l}return m=b,o=y,0|m}function Sp(a,b,c,d,e){a|=0,b|=0,c|=0,d|=0,e|=0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,t=0,u=0,v=0,w=0,x=0,y=0,A=0,B=0,C=0,D=0,F=0,G=0,H=0,I=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,V=0,W=0,X=0,Y=0,Z=0,$=0,aa=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0;Ea=o,o=o+48|0,(0|o)>=(0|p)&&ca(48),ga=a,ra=b,Ba=c,Ca=d,g=e,l=ra,m=0|Rp(l),n=m+16|0,q=0|f[n>>2],j=q;a:for(;;){if(r=Ca,!(0!=(0|r))){Da=19;break}k=0,t=Ca,u=0|f[t>>2],v=u>>>11,w=524288&v,x=0!=(0|w);do{if(!x){if(y=j,0!=(0|y)&&(A=j,B=Ca,C=B+16|0,D=0|f[C>>2],(0|A)==(0|D))){Da=6;break a}for(F=ra,G=F+20|0,H=0|f[G>>2],h=H;;){if(I=h,!(0!=(0|I))){Da=17;break}if(K=h,L=0|f[K>>2],M=255&L,N=11==(0|M),O=h,N){if(P=O+16|0,Q=0|f[P>>2],R=Ca,S=R+16|0,T=0|f[S>>2],(0|Q)==(0|T))break}else if(Z=0|f[O>>2],$=255&Z,9==(0|$)){if(aa=g,!(0!=(0|aa))){Da=17;break}k=1}da=h,ea=da+20|0,fa=0|f[ea>>2],h=fa}if(17==(0|Da)){Da=0,ha=ga,ia=Ca,ja=Ba,ka=ja+20|0,la=0|f[ka>>2],ma=0|Tp(ha,ia,la),i=ma,na=i,oa=Ba,pa=oa+20|0,f[pa>>2]=na,qa=ga,sa=Ba,ta=Ba,ua=ta+20|0,va=0|f[ua>>2],Yc(qa,sa,va),wa=i,Ba=wa;break}V=k,X=0!=(0|V),X||(Y=h,Ba=Y)}}while(0);xa=Ca,ya=xa+20|0,za=0|f[ya>>2],Ca=za}return 6==(0|Da)?(W=-1,Aa=W,o=Ea,0|Aa):19==(0|Da)?(W=0,Aa=W,o=Ea,0|Aa):0}function Tp(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,na=0;na=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),C=a,N=b,Y=c,ja=C,ka=C,la=ka+36|0,g=0|f[la>>2],h=0|Tc(ja,11,g),ia=h,i=N,j=0|f[i>>2],k=255&j,l=11==(0|k),l&&(m=N,n=m+4|0,q=0|f[n>>2],N=q),r=N,s=0|f[r>>2],t=s>>>11,u=524288&t,v=0!=(0|u);a:if(v)for(w=N,x=w+20|0,y=0|f[x>>2],N=y;;){if(z=N,A=0|f[z>>2],B=A>>>11,D=1048576&B,E=0!=(0|D),!(1^E))break a;G=N,H=G+20|0,I=0|f[H>>2],N=I}return J=N,K=J+12|0,L=0|f[K>>2],M=ia,O=M+12|0,f[O>>2]=L,P=N,Q=P+16|0,R=0|f[Q>>2],S=ia,T=S+16|0,f[T>>2]=R,U=Y,V=ia,W=V+20|0,f[W>>2]=U,X=N,Z=0|f[X>>2],$=255&Z,_=11==(0|$),aa=N,_?(ba=aa+4|0,da=0|f[ba>>2],ea=ia,d=da,e=ea,ga=e+4|0,f[ga>>2]=d,ha=ia,o=na,0|ha):(fa=ia,d=aa,e=fa,ga=e+4|0,f[ga>>2]=d,ha=ia,o=na,0|ha)}function Up(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,pa=0;if(pa=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),A=a,L=b,W=c,la=0,ma=L,na=0|f[ma>>2],d=na>>>11,e=524288&d,g=0!=(0|e),g||(h=A,i=L,j=0|Tc(h,11,i),ga=j,k=ga,l=0|f[k>>2],m=l>>>11,n=1048576|m,q=0|f[k>>2],r=2097151&n,s=r<<11,t=2047&q,u=t|s,f[k>>2]=u,v=L,w=v+20|0,x=0|f[w>>2],y=ga,z=y+20|0,f[z>>2]=x,B=ga,C=L,D=C+20|0,f[D>>2]=B,E=L,F=E+16|0,G=0|f[F>>2],H=ga,I=H+16|0,f[I>>2]=G,J=A,K=0|Yo(J),M=L,N=M+16|0,f[N>>2]=K,O=A,P=L,Q=ga,Yc(O,P,Q),R=L,S=0|f[R>>2],T=S>>>11,U=524288|T,V=0|f[R>>2],X=2097151&U,Y=X<<11,Z=2047&V,$=Z|Y,f[R>>2]=$),_=A,aa=L,ba=L,da=W,ea=0|Sp(_,aa,ba,da,0),la=ea,fa=la,!((0|fa)<0))return void(o=pa);ia=A,ja=A,ka=0|sp(ja,69160),Ar(ia,ka,65362)}function Vp(a,b,c){a|=0,b|=0,c|=0;var d=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,oa=0,pa=0,ra=0;switch(ra=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),d=ra+16|0,X=ra,B=b,ha=c+4|0,0|(0|f[ha>>2])){case 0:return oa=c+4|0,pa=0|f[oa>>2],!(0==(0|pa))||(g=0|f[c>>2],0!=(0|g))?(l=B,m=l+72|0,n=0|f[m>>2],ip(a,n),void(o=ra)):(i=B,j=i+76|0,k=0|f[j>>2],ip(a,k),void(o=ra));case 2:return q=B,r=q+68|0,s=0|f[r>>2],ip(a,s),void(o=ra);case 7:return t=B,u=t+32|0,v=0|f[u>>2],ip(a,v),void(o=ra);case 6:case 3:case 4:w=B,x=B,y=0|sp(x,69204),Ar(w,y,65386);break;default:return z=0|f[c>>2],M=z,A=B,C=M,Bp(A,C),D=B,E=D+12|0,F=0|f[E>>2],G=0!=(0|F),G&&(H=B,I=H+12|0,J=0|f[I>>2],K=J+16|0,L=0|f[K>>2],0!=(0|L)&&(O=B,P=O+12|0,Q=0|f[P>>2],R=Q+16|0,S=0|f[R>>2],T=S+44|0,U=0|f[T>>2],0!=(0|U)&&(W=B,Y=M,Z=Y+4|0,$=0|f[Z>>2],_=B,aa=0|ji(_,64860,9),ba=B,da=ba+12|0,ea=0|f[da>>2],fa=ea+16|0,ga=0|f[fa>>2],ia=ga+44|0,ja=0|f[ia>>2],ip(X,ja),f[d>>2]=0|f[X>>2],f[d+4>>2]=0|f[X+4>>2],Zi(W,$,aa,d)))),ka=M,la=ka+4|0,ma=0|f[la>>2],ip(a,ma),void(o=ra)}}function Wp(a,b,c,d,e){a|=0,b|=0,c|=0,d|=0,e|=0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,z=0;z=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),t=a,u=b,v=c,w=d,x=e,g=t,h=u,Bp(g,h),i=t,j=u,k=j+4|0,l=0|f[k>>2],m=t,n=v,q=0|ki(m,n),r=w,s=x,Hp(i,l,q,r,s),o=z}function Xp(a,b,c,d,e){a|=0,b|=0,c|=0,d|=0,e|=0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,s=0;s=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),k=a,l=b,m=c,n=d,q=e,f=k,g=l,h=m,i=n,j=q,Wp(f,g,h,i,j),o=s}function Yp(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,j=0,k=0,l=0,m=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0;for(V=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),L=a,P=b,Q=c,e=P,g=0|f[e>>2],T=g;;){if(h=T,!(0!=(0|h)))break;if(j=T,k=j+16|0,l=0|f[k>>2],d=l,m=d,0!=(0|m)&&(q=L,r=d,s=Q,t=0|$o(q,r,s),R=t,u=R,v=d,w=0|f[v>>2],(0|u)!=(0|w))){U=5;break}K=T,M=K+20|0,N=0|f[M>>2],T=N}return 5==(0|U)&&(y=d,z=y+20|0,B=0|f[z>>2],C=R,D=B+(C<<2)|0,E=0|f[D>>2],S=E,F=S,0!=(0|F))?(H=T,I=P,f[I>>2]=H,J=S,A=J,O=A,o=V,0|O):(A=0,O=A,o=V,0|O)}function Zp(a,b,c){a|=0,b|=0,c|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0;return _=o,o=o+96|0,(0|o)>=(0|p)&&ca(96),g=_+88|0,e=_+80|0,Y=_+8|0,X=_,O=_+72|0,U=_+56|0,V=_+48|0,W=_+40|0,h=_+32|0,i=_+24|0,D=a,f[O>>2]=b,S=c,j=D,k=S,l=0|Yp(j,O,k),T=l,m=T,0!=(0|m)?(R=T,o=_,0|R):(q=D,r=0|f[O>>2],ip(V,r),f[e>>2]=0|f[V>>2],f[e+4>>2]=0|f[V+4>>2],Xj(U,q,e,69281,0,X),s=U+4|0,t=0|f[s>>2],u=16==(0|t),u&&(v=0|f[U>>2],w=0|f[v>>2],x=w>>>11,y=8&x,z=0!=(0|y),A=0|f[U>>2],z?(B=0|f[A>>2],C=B>>>11,E=496&C,F=E>>4,J=F):(G=A+12|0,H=0|f[G>>2],J=H),(0|J)>64&&(K=D,L=0|f[O>>2],ip(W,L),f[g>>2]=0|f[W>>2],f[g+4>>2]=0|f[W+4>>2],Jf(h,K,g),f[U>>2]=0|f[h>>2],f[U+4>>2]=0|f[h+4>>2])),M=D,N=S,P=D,Q=S,ui(i,P,Q),d[Y>>0]=0|d[i>>0],d[Y+1>>0]=0|d[i+1>>0],d[Y+2>>0]=0|d[i+2>>0],d[Y+3>>0]=0|d[i+3>>0],d[Y+4>>0]=0|d[i+4>>0],d[Y+5>>0]=0|d[i+5>>0],d[Y+6>>0]=0|d[i+6>>0],d[Y+7>>0]=0|d[i+7>>0],Z=Y+8|0,d[Z>>0]=0|d[U>>0],d[Z+1>>0]=0|d[U+1>>0],d[Z+2>>0]=0|d[U+2>>0],d[Z+3>>0]=0|d[U+3>>0],d[Z+4>>0]=0|d[U+4>>0],d[Z+5>>0]=0|d[U+5>>0],d[Z+6>>0]=0|d[U+6>>0],d[Z+7>>0]=0|d[U+7>>0],Er(M,N,65409,Y),0)}function $p(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,B=0;B=o,o=o+96|0,(0|o)>=(0|p)&&ca(96),g=B+80|0,e=B+72|0,d=B+64|0,x=B,r=B+48|0,s=B+40|0,t=B+36|0,u=B+32|0,v=B+24|0,w=B+16|0,q=b,h=q,f[x>>2]=t,y=x+4|0,f[y>>2]=u,z=x+8|0,f[z>>2]=s,Kp(h,65444,x),i=q,f[d>>2]=0|f[c>>2],f[d+4>>2]=0|f[c+4>>2],_p(v,i,d),f[r>>2]=0|f[v>>2],f[r+4>>2]=0|f[v+4>>2],j=q,k=q,l=0|ji(k,69252,10),m=0|f[u>>2],n=0|f[t>>2],f[e>>2]=0|f[r>>2],f[e+4>>2]=0|f[r+4>>2],f[g>>2]=0|f[s>>2],f[g+4>>2]=0|f[s+4>>2],$j(w,j,e,l,m,n,g),f[a>>2]=0|f[r>>2],f[a+4>>2]=0|f[r+4>>2],o=B}function _p(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,E=0;E=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),w=b,A=0|f[c>>2],x=A,B=x,C=0|f[B>>2],d=C>>>11,e=255&d,z=e,g=x,h=0|f[g>>2],i=255&h,j=12==(0|i),j&&(k=w,l=w,m=0|sp(l,69204),Ar(k,m,65447)),n=z,q=0==(0|n),q&&(z=8),r=w,s=z,t=x,u=0|Tc(r,s,t),y=u,v=y,ip(a,v),o=E}function aq(a,b,c,d,e){a|=0,b|=0,c|=0,d|=0,e|=0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,A=0;A=o,o=o+64|0,(0|o)>=(0|p)&&ca(64),h=A+56|0,g=A+48|0,y=A+24|0,i=A+16|0,j=A+8|0,k=A,u=b,v=c,w=d,x=e,l=u,m=v,ip(i,m),f[g>>2]=0|f[i>>2],f[g+4>>2]=0|f[i+4>>2],_p(j,l,g),f[y>>2]=0|f[j>>2],f[y+4>>2]=0|f[j+4>>2],n=u,q=u,r=0|ji(q,69252,10),s=w,t=x,f[h>>2]=0|f[y>>2],f[h+4>>2]=0|f[y+4>>2],Yj(k,n,h,r,s,t),f[a>>2]=0|f[y>>2],f[a+4>>2]=0|f[y+4>>2],o=A}function bq(a,b,c,e){a|=0,b|=0,c|=0,e|=0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ja=0,ka=0,la=0,ma=0,na=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0;Pa=o,o=o+128|0,(0|o)>=(0|p)&&ca(128),l=Pa+120|0,k=Pa+112|0,j=Pa+104|0,i=Pa+96|0,h=Pa+88|0,g=Pa+80|0,Ma=Pa,ya=Pa+56|0,Ja=Pa+48|0,La=Pa+40|0,m=Pa+32|0,n=Pa+24|0,q=Pa+16|0,S=a,ba=b,r=S,s=0|ji(r,69281,7),na=s,t=S,u=t+12|0,v=0|f[u>>2],w=v+16|0,x=0|f[w>>2],y=S,z=y+12|0,A=0|f[z>>2],B=A+20|0,C=0|f[B>>2],D=x>>>0>C>>>0,D?(E=S,F=E+12|0,G=0|f[F>>2],H=G+16|0,I=0|f[H>>2],J=I+-48|0,K=0|f[J>>2],L=na,M=(0|K)==(0|L),M?(N=S,f[g>>2]=0|f[c>>2],f[g+4>>2]=0|f[c+4>>2],Jf(Ja,N,g),f[ya>>2]=0|f[Ja>>2],f[ya+4>>2]=0|f[Ja+4>>2]):Oa=4):Oa=4;do{if(4==(0|Oa)){if(O=S,P=na,f[h>>2]=0|f[c>>2],f[h+4>>2]=0|f[c+4>>2],Q=0|cq(O,h,P),R=255&Q,0!=(0|R)&&(U=S,V=U+12|0,W=0|f[V>>2],X=W+16|0,Y=0|f[X>>2],Z=S,$=Z+12|0,_=0|f[$>>2],aa=_+20|0,da=0|f[aa>>2],ea=Y,fa=da,ga=ea-fa|0,ha=(0|ga)/48&-1,(0|ha)<64)){if(ja=S,ka=na,f[i>>2]=0|f[c>>2],f[i+4>>2]=0|f[c+4>>2],Yj(La,ja,i,ka,0,0),f[ya>>2]=0|f[La>>2],f[ya+4>>2]=0|f[La+4>>2],la=ya+4|0,ma=0|f[la>>2],!(16==(0|ma)))break;if(pa=0|f[ya>>2],qa=0|f[pa>>2],ra=qa>>>11,sa=8&ra,ta=0!=(0|sa),ua=0|f[ya>>2],ta?(va=0|f[ua>>2],wa=va>>>11,xa=496&wa,za=xa>>4,Da=za):(Aa=ua+12|0,Ba=0|f[Aa>>2],Da=Ba),!((0|Da)>64))break;Ea=S,f[j>>2]=0|f[c>>2],f[j+4>>2]=0|f[c+4>>2],Jf(m,Ea,j),f[ya>>2]=0|f[m>>2],f[ya+4>>2]=0|f[m+4>>2];break}Fa=S,f[k>>2]=0|f[c>>2],f[k+4>>2]=0|f[c+4>>2],Jf(n,Fa,k),f[ya>>2]=0|f[n>>2],f[ya+4>>2]=0|f[n+4>>2]}}while(0);Ga=S,Ha=ba,Ia=S,Ka=ba,ui(q,Ia,Ka),d[Ma>>0]=0|d[q>>0],d[Ma+1>>0]=0|d[q+1>>0],d[Ma+2>>0]=0|d[q+2>>0],d[Ma+3>>0]=0|d[q+3>>0],d[Ma+4>>0]=0|d[q+4>>0],d[Ma+5>>0]=0|d[q+5>>0],d[Ma+6>>0]=0|d[q+6>>0],d[Ma+7>>0]=0|d[q+7>>0],Na=Ma+8|0,d[Na>>0]=0|d[ya>>0],d[Na+1>>0]=0|d[ya+1>>0],d[Na+2>>0]=0|d[ya+2>>0],d[Na+3>>0]=0|d[ya+3>>0],d[Na+4>>0]=0|d[ya+4>>0],d[Na+5>>0]=0|d[ya+5>>0],d[Na+6>>0]=0|d[ya+6>>0],d[Na+7>>0]=0|d[ya+7>>0],f[l>>2]=0|f[e>>2],f[l+4>>2]=0|f[e+4>>2],Nr(Ga,Ha,l,65488,Ma)}function cq(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,n=0;return n=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),d=n+8|0,e=a,g=c,h=e,i=e,f[d>>2]=0|f[b>>2],f[d+4>>2]=0|f[b+4>>2],j=0|dq(i,d),k=g,l=0|eq(h,j,k),o=n,0|l}function dq(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,K=0;K=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),A=a,D=b+4|0,E=0|f[D>>2];a:switch(0|E){case 0:if(F=0|f[b>>2],G=0!=(0|F),H=A,G){I=H+72|0,c=0|f[I>>2],n=c;break a}d=H+76|0,e=0|f[d>>2],n=e;break a;case 2:g=A,h=g+68|0,i=0|f[h>>2],n=i;break;case 4:j=A,k=j+80|0,l=0|f[k>>2],n=l;break;case 3:m=A,q=m+64|0,r=0|f[q>>2],n=r;break;case 6:s=A,t=s+60|0,u=0|f[t>>2],n=u;break;case 7:v=A,w=v+32|0,x=0|f[w>>2],n=x;break;case 20:n=0;break;default:y=0|f[b>>2],z=y+4|0,B=0|f[z>>2],n=B}return C=n,o=K,0|C}function eq(a,b,c){a|=0,b|=0,c|=0;var e=0,g=0,h=0,i=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0;for(N=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),G=a,H=b,I=c;;){if(L=H,!(0!=(0|L))){M=9;break}if(e=H,g=e+16|0,h=0|f[g>>2],K=h,i=K,0!=(0|i)&&(k=G,l=K,m=I,n=0|$o(k,l,m),J=n,q=J,r=K,s=0|f[r>>2],(0|q)!=(0|s)))break;C=H,D=C+20|0,E=0|f[D>>2],H=E}return 9==(0|M)?(A=0,F=A,o=N,0|F):(u=K,v=u+20|0,w=0|f[v>>2],x=J,y=w+(x<<2)|0,z=0|f[y>>2],B=0!=(0|z),B?(A=1,F=A,o=N,0|F):(A=0,F=A,o=N,0|F))}function fq(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0;if(Ka=o,o=o+192|0,(0|o)>=(0|p)&&ca(192),m=Ka+176|0,l=Ka+168|0,k=Ka+160|0,j=Ka+152|0,i=Ka+144|0,h=Ka+136|0,g=Ka+128|0,e=Ka+120|0,d=Ka+112|0,ea=Ka+96|0,Ha=Ka+80|0,q=Ka+64|0,r=Ka+56|0,s=Ka+48|0,t=Ka+40|0,u=Ka+32|0,v=Ka+24|0,w=Ka+16|0,x=Ka+8|0,y=Ka,J=b,U=c,z=J,A=0|ji(z,65517,13),Aa=A,B=J,C=U,D=Aa,Ui(Ha,B,C,D),f[ea>>2]=0|f[Ha>>2],f[ea+4>>2]=0|f[Ha+4>>2],E=ea+4|0,F=0|f[E>>2],0==(0|F)&&(H=0|f[ea>>2],!(0!=(0|H)))){if(K=J,L=U,M=0|gp(K,L),Ia=M,N=J,O=U,P=Ia,Q=0|Vj(N,O,P),n=Q,R=n,0==(0|R))return Jp(a),void(o=Ka);T=Ia,V=0!=(0|T),V?(W=Ia,X=J,Y=X+32|0,Z=0|f[Y>>2],$=(0|W)!=(0|Z),$?(_=J,aa=Ia,fq(r,_,aa),ba=J,kg(s,ba,0),f[ea>>2]=0|f[s>>2],f[ea+4>>2]=0|f[s+4>>2],da=r+4|0,fa=0|f[da>>2],ga=0==(0|fa),ga?(ha=0|f[r>>2],ia=0!=(0|ha),ia?Ja=10:(ja=J,f[d>>2]=0|f[ea>>2],f[d+4>>2]=0|f[ea+4>>2],ch(t,ja,d,65531,8),ka=J,la=J,ma=Ia,Vg(u,la,ma),f[e>>2]=0|f[ea>>2],f[e+4>>2]=0|f[ea+4>>2],f[g>>2]=0|f[u>>2],f[g+4>>2]=0|f[u+4>>2],xg(ka,e,g),na=J,f[h>>2]=0|f[ea>>2],f[h+4>>2]=0|f[ea+4>>2],ch(v,na,h,65540,1))):Ja=10,10==(0|Ja)&&(oa=J,f[i>>2]=0|f[ea>>2],f[i+4>>2]=0|f[ea+4>>2],f[j>>2]=0|f[r>>2],f[j+4>>2]=0|f[r+4>>2],xg(oa,i,j)),qa=J,f[k>>2]=0|f[ea>>2],f[k+4>>2]=0|f[ea+4>>2],ch(w,qa,k,65542,2),ra=J,sa=n,ta=0|ri(ra,sa,q),pa=ta,ua=J,va=pa,wa=0|f[q>>2],f[l>>2]=0|f[ea>>2],f[l+4>>2]=0|f[ea+4>>2],ch(x,ua,l,va,wa)):Ja=12):Ja=12,12==(0|Ja)&&(xa=J,ya=n,za=0|ri(xa,ya,q),pa=za,Ba=J,Ca=pa,Da=0|f[q>>2],mg(y,Ba,Ca,Da),f[ea>>2]=0|f[y>>2],f[ea+4>>2]=0|f[y+4>>2]),Ea=J,Fa=U,Ga=Aa,f[m>>2]=0|f[ea>>2],f[m+4>>2]=0|f[ea+4>>2],Zi(Ea,Fa,Ga,m)}f[a>>2]=0|f[ea>>2],f[a+4>>2]=0|f[ea+4>>2],o=Ka}function gq(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,L=0;return L=o,o=o+64|0,(0|o)>=(0|p)&&ca(64),e=L+56|0,d=L+48|0,c=L+40|0,E=L+24|0,F=L+16|0,G=L+8|0,H=L,s=a,D=b,I=s,J=D,fq(E,I,J),g=E+4|0,h=0|f[g>>2],i=0==(0|h),i&&(j=0|f[E>>2],0!=(0|j)||(l=s,qg(F,l,65531,8),f[E>>2]=0|f[F>>2],f[E+4>>2]=0|f[F+4>>2],m=s,n=s,q=D,Vg(G,n,q),f[c>>2]=0|f[E>>2],f[c+4>>2]=0|f[E+4>>2],f[d>>2]=0|f[G>>2],f[d+4>>2]=0|f[G+4>>2],xg(m,c,d),r=s,f[e>>2]=0|f[E>>2],f[e+4>>2]=0|f[E+4>>2],ch(H,r,e,65540,1))),t=0|f[E>>2],u=0|f[t>>2],v=u>>>11,w=8&v,x=0!=(0|w),y=0|f[E>>2],z=y+12|0,x?(C=z,o=L,0|C):(A=z+8|0,B=0|f[A>>2],C=B,o=L,0|C)}function hq(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,k=0;return k=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),c=k+8|0,d=a,e=d,g=d,f[c>>2]=0|f[b>>2],f[c+4>>2]=0|f[b+4>>2],h=0|iq(g,c),i=0|gq(e,h),o=k,0|i}function iq(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,j=0;return j=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),c=j+8|0,d=a,e=d,f[c>>2]=0|f[b>>2],f[c+4>>2]=0|f[b+4>>2],g=0|dq(e,c),h=0|xp(g),o=j,0|h}function jq(a,b,c,d){a|=0,b|=0,c|=0,d|=0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,u=0;u=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),l=a,m=b,n=c,q=d,s=l,e=m,f=q,g=0|Zp(s,e,f),r=g,h=l,i=m,j=n,k=r,Gp(h,i,j,k),o=u}function kq(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0;m=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),e=a,f=b,g=c,h=e,i=f,j=e,k=g,d=0|ki(j,k),lq(h,i,d),o=m}function lq(a,b,c){a|=0,b|=0,c|=0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,A=0;if(A=o,o=o+48|0,(0|o)>=(0|p)&&ca(48),x=A,t=A+24|0,u=A+16|0,q=a,r=b,s=c,v=q,w=r,e=s,f=0|eq(v,w,e),g=f<<24>>24!=0,h=q,g)return m=r,n=s,Gp(h,m,n,0),void(o=A);i=s,j=q,k=s,ui(t,j,k),l=r,ip(u,l),d[x>>0]=0|d[t>>0],d[x+1>>0]=0|d[t+1>>0],d[x+2>>0]=0|d[t+2>>0],d[x+3>>0]=0|d[t+3>>0],d[x+4>>0]=0|d[t+4>>0],d[x+5>>0]=0|d[t+5>>0],d[x+6>>0]=0|d[t+6>>0],d[x+7>>0]=0|d[t+7>>0],y=x+8|0,d[y>>0]=0|d[u>>0],d[y+1>>0]=0|d[u+1>>0],d[y+2>>0]=0|d[u+2>>0],d[y+3>>0]=0|d[u+3>>0],d[y+4>>0]=0|d[u+4>>0],d[y+5>>0]=0|d[u+5>>0],d[y+6>>0]=0|d[u+6>>0],d[y+7>>0]=0|d[u+7>>0],Er(h,i,65545,x)}function mq(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,s=0;s=o,o=o+48|0,(0|o)>=(0|p)&&ca(48),d=s+32|0,l=s+8|0,m=s,i=a,j=b,k=c,n=i,q=i,e=j,ip(l,e),f[d>>2]=0|f[l>>2],f[d+4>>2]=0|f[l+4>>2],Vp(m,q,d),g=0|f[m>>2],h=k,kq(n,g,h),o=s}function nq(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,l=0,m=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0;if(_=o,o=o+64|0,(0|o)>=(0|p)&&ca(64),e=_+48|0,d=_+40|0,Y=_,N=_+32|0,T=_+28|0,C=b,h=C,f[d>>2]=0|f[c>>2],f[d+4>>2]=0|f[c+4>>2],Hf(h,d,10),i=C,f[Y>>2]=N,Z=Y+4|0,f[Z>>2]=T,Kp(i,68856,Y),j=0|f[T>>2],0==(0|j))return f[a>>2]=0|f[c>>2],f[a+4>>2]=0|f[c+4>>2],void(o=_);for(U=0;;){if(l=U,m=0|f[T>>2],!((0|l)<(0|m)))break;q=C,r=0|f[N>>2],s=U,t=r+(s<<3)|0,f[e>>2]=0|f[t>>2],f[e+4>>2]=0|f[t+4>>2],Hf(q,e,4),u=0|f[N>>2],v=U,w=u+(v<<3)|0,x=0|f[w>>2],V=x,y=0|f[c>>2],X=y,z=C,A=X,B=V,D=0|Zp(z,A,B),W=D,E=C,F=X,Bp(E,F),G=C,H=0|Wc(G),g=H,I=C,J=X,K=J+4|0,L=0|f[K>>2],M=V,O=W,Gp(I,L,M,O),P=C,Q=g,Xc(P,Q),R=U,S=R+1|0,U=S}f[a>>2]=0|f[c>>2],f[a+4>>2]=0|f[c+4>>2],o=_}function oq(a){a|=0;var b=0,c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,$a=0,_a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,$b=0,_b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,yc=0,zc=0,Ac=0,Bc=0,Cc=0,Dc=0,Ec=0,Fc=0,Gc=0,Hc=0,Ic=0,Jc=0,Kc=0,Lc=0,Mc=0,Nc=0,Oc=0,Pc=0,Qc=0,Rc=0,Sc=0,Tc=0,Uc=0,Vc=0,Wc=0,Xc=0,Yc=0,Zc=0,$c=0,_c=0,ad=0,bd=0,cd=0,dd=0,ed=0,fd=0,gd=0,hd=0,id=0,jd=0,kd=0,ld=0,md=0,nd=0,od=0,pd=0,qd=0,rd=0,sd=0,td=0,vd=0;vd=o,o=o+112|0,(0|o)>=(0|p)&&ca(112),g=vd+96|0,e=vd+88|0,d=vd+80|0,c=vd+72|0,b=vd+64|0,Ec=vd+32|0,Pc=vd+24|0,$c=vd+16|0,jd=vd+8|0,i=vd,h=a,v=h,G=0|Ap(v,0),nb=G,R=h,aa=nb,ma=0|Ap(R,aa),Zb=ma,xa=Zb,Ia=h,Ta=Ia+32|0,f[Ta>>2]=xa,cb=h,ob=Zb,zb=0|Ap(cb,ob),ic=zb,Kb=ic,Sb=h,Tb=Sb+40|0,f[Tb>>2]=Kb,Ub=h,Vb=ic,Wb=0|Ap(Ub,Vb),tc=Wb,Xb=tc,Yb=h,$b=Yb+36|0,f[$b>>2]=Xb,_b=tc,ac=tc,bc=ac+4|0,f[bc>>2]=_b,cc=ic,dc=cc+4|0,f[dc>>2]=_b,ec=Zb,fc=ec+4|0,f[fc>>2]=_b,gc=nb,hc=gc+4|0,f[hc>>2]=_b,jc=h,kc=nb,Bp(jc,kc),lc=h,mc=Zb,Bp(lc,mc),nc=h,oc=ic,Bp(nc,oc),pc=h,qc=tc,Bp(pc,qc),rc=h,sc=nb,uc=nb,ip(Ec,uc),f[b>>2]=0|f[Ec>>2],f[b+4>>2]=0|f[Ec+4>>2],Jj(rc,sc,65582,b),vc=h,wc=Zb,xc=nb,ip(Pc,xc),f[c>>2]=0|f[Pc>>2],f[c+4>>2]=0|f[Pc+4>>2],Jj(vc,wc,65582,c),yc=h,zc=Zb,Ac=Zb,ip($c,Ac),f[d>>2]=0|f[$c>>2],f[d+4>>2]=0|f[$c+4>>2],Jj(yc,zc,65594,d),Bc=h,Cc=Zb,Dc=ic,ip(jd,Dc),f[e>>2]=0|f[jd>>2],f[e+4>>2]=0|f[jd+4>>2],Jj(Bc,Cc,65601,e),Fc=h,Gc=Zb,Hc=tc,ip(i,Hc),f[g>>2]=0|f[i>>2],f[g+4>>2]=0|f[i+4>>2],Jj(Fc,Gc,65608,g),Ic=h,Jc=nb,Kc=h,Lc=0|ji(Kc,65582,11),mp(Ic,Jc,Lc),Mc=h,Nc=Zb,Oc=h,Qc=0|ji(Oc,65594,6),mp(Mc,Nc,Qc),Rc=h,Sc=ic,Tc=h,Uc=0|ji(Tc,65601,6),mp(Rc,Sc,Uc),Vc=h,Wc=tc,Xc=h,Yc=0|ji(Xc,65608,5),mp(Vc,Wc,Yc),Zc=h,_c=h,ad=_c+32|0,bd=0|f[ad>>2],cd=0|Cp(Zc,65614,bd),dd=h,ed=dd+44|0,f[ed>>2]=cd,fd=h,gd=fd+44|0,hd=0|f[gd>>2],id=0|f[hd>>2],kd=id>>>11,ld=-256&kd,md=13|ld,nd=h,od=nd+44|0,pd=0|f[od>>2],qd=0|f[pd>>2],rd=2097151&md,sd=rd<<11,td=2047&qd,j=td|sd,f[pd>>2]=j,k=tc,l=0|f[k>>2],m=l>>>11,n=-256&m,q=9|n,r=tc,s=0|f[r>>2],t=2097151&q,u=t<<11,w=2047&s,x=w|u,f[r>>2]=x,y=h,z=nb,Ip(y,z,69252,233,0),A=h,B=nb,Ip(A,B,65619,234,0),C=h,D=nb,Ip(C,D,65621,235,4096),E=h,F=tc,Xp(E,F,67982,236,8192),H=h,I=tc,Ip(H,I,65636,237,0),J=h,K=tc,Ip(J,K,67982,238,4096),L=h,M=tc,Ip(L,M,69252,239,8192),N=h,O=tc,Ip(N,O,65098,233,262144),P=ic,Q=0|f[P>>2],S=Q>>>11,T=-256&S,U=10|T,V=ic,W=0|f[V>>2],X=2097151&U,Y=X<<11,Z=2047&W,$=Z|Y,f[V>>2]=$,_=h,ba=ic,Ip(_,ba,65647,240,262144),da=h,ea=ic,Ip(da,ea,65671,241,262144),fa=h;ga=ic,Ip(fa,ga,65690,242,524288),ha=h,ia=ic,Ip(ha,ia,68897,243,262144),ja=h,ka=ic,Ip(ja,ka,68911,233,262144),la=h,na=ic,Ip(la,na,65709,244,4096),oa=h,pa=ic,Ip(oa,pa,65717,233,262144),qa=h,ra=ic,Ip(qa,ra,65727,245,262144),sa=h,ta=ic,Ip(sa,ta,65744,246,4096),ua=h,va=ic,Ip(ua,va,69243,247,262144),wa=h,ya=ic,Ip(wa,ya,65752,248,262144),za=h,Aa=ic,Ip(za,Aa,65768,249,4096),Ba=h,Ca=ic,Ip(Ba,Ca,65779,233,262144),Da=h,Ea=ic,Ip(Da,Ea,65788,250,0),Fa=h,Ga=ic,Ip(Fa,Ga,69252,251,0),Ha=h,Ja=ic,Ip(Ha,Ja,65805,252,4096),Ka=h,La=ic,Ip(Ka,La,65822,253,262144),Ma=h,Na=ic,Ip(Ma,Na,65838,249,4096),Oa=h,Pa=ic,Ip(Oa,Pa,65850,254,4096),Qa=h,Ra=ic,Ip(Qa,Ra,65866,255,4096),Sa=h,Ua=ic,Ip(Sa,Ua,65874,255,4096),Va=h,Wa=ic,Ip(Va,Wa,65884,255,4096),Xa=h,Ya=ic,Ip(Xa,Ya,65891,256,262144),Za=h,$a=ic,Ip(Za,$a,65913,257,4096),_a=h,ab=ic,Ip(_a,ab,65927,233,262144),bb=h,db=ic,Ip(bb,db,65942,258,4096),eb=h,fb=ic,Ip(eb,fb,65954,259,4096),gb=h,hb=ic,Ip(gb,hb,69276,260,0),ib=h,jb=ic,Ip(ib,jb,69281,260,0),kb=h,lb=ic,Ip(kb,lb,69686,261,4096),mb=h,pb=ic,Ip(mb,pb,65966,262,0),qb=h,rb=ic,Ip(qb,rb,69699,263,4096),sb=h,tb=ic,Ip(sb,tb,65976,264,270336),ub=h,vb=ic,Ip(ub,vb,65991,265,262144),wb=h,xb=ic,Ip(wb,xb,66001,266,524288),yb=h,Ab=ic,Ip(yb,Ab,66011,267,8192),Bb=h,Cb=ic,Ip(Bb,Cb,66021,268,262144),Db=h,Eb=ic,Ip(Db,Eb,66034,269,262144),Fb=h,Gb=ic,Ip(Fb,Gb,66048,270,262144),Hb=h,Ib=ic,Ip(Hb,Ib,66062,271,0),Jb=h,Lb=ic,Ip(Jb,Lb,69591,272,262144),Mb=h,Nb=ic,Xp(Mb,Nb,66011,273,4096),Ob=h,Pb=tc,kq(Ob,Pb,65752),Qb=h,Rb=tc,kq(Qb,Rb,68897),o=vd}function pq(a,b,c){a|=0,b|=0,c|=0;var f=0;f=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),Jp(a),o=f}function qq(a,b,c){a|=0,b|=0,c|=0;var e=0,g=0,h=0,i=0,j=0,k=0,m=0;m=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),e=c+4|0,g=0|f[e>>2],h=0!=(0|g),i=1^h,j=1&i,k=255&j,Zq(a,k),o=m}function rq(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,x=0;x=o,o=o+64|0,(0|o)>=(0|p)&&ca(64),e=x+48|0,d=x+40|0,t=x,l=x+32|0,m=x+28|0,n=x+24|0,q=x+16|0,k=b,r=k,f[t>>2]=l,u=t+4|0,f[u>>2]=m,v=t+8|0,f[v>>2]=n,Kp(r,66388,t),s=k,g=0|f[l>>2],h=k,i=0|f[n>>2],j=0|f[m>>2],Mn(q,h,i,j),f[d>>2]=0|f[c>>2],f[d+4>>2]=0|f[c+4>>2],f[e>>2]=0|f[q>>2],f[e+4>>2]=0|f[q+4>>2],bq(s,g,d,e),Jp(a),o=x}function sq(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,K=0;K=o,o=o+80|0,(0|o)>=(0|p)&&ca(80),e=K+72|0,d=K+64|0,H=K,C=K+48|0,D=K+40|0,E=K+32|0,F=K+24|0,G=K+16|0,g=K+8|0,A=b,h=A,f[H>>2]=C,I=H+4|0,f[I>>2]=D,i=0|Kp(h,66384,H),B=i,j=B,k=0==(0|j),k&&(l=A,m=l+32|0,n=0|f[m>>2],ip(F,n),f[C>>2]=0|f[F>>2],f[C+4>>2]=0|f[F+4>>2]),q=A,r=0|f[C>>2],s=0|yp(q,r),ip(G,s),f[E>>2]=0|f[G>>2],f[E+4>>2]=0|f[G+4>>2],t=A,u=A,v=0|ji(u,69252,10),w=B,f[d>>2]=0|f[E>>2],f[d+4>>2]=0|f[E+4>>2],f[e>>2]=0|f[D>>2],f[e+4>>2]=0|f[D+4>>2],$j(g,t,d,v,w,C,e),x=A,y=0|f[C>>2],z=0|f[E>>2],Ep(x,y,z),f[a>>2]=0|f[E>>2],f[a+4>>2]=0|f[E+4>>2],o=K}function tq(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,u=0,v=0,w=0,x=0,y=0,z=0,B=0;for(B=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),b,v=0|f[c>>2],u=v,w=u,x=0|Rp(w),y=x+20|0,z=0|f[y>>2],u=z;;){if(d=u,e=0!=(0|d),e?(g=u,h=0|f[g>>2],i=255&h,j=11==(0|i),s=j):s=0,k=u,!s)break;l=0|Rp(k),m=l+20|0,n=0|f[m>>2],u=n}return q=0!=(0|k),q?(r=u,ip(a,r),void(o=B)):(Jp(a),void(o=B))}function uq(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,h=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,x=0;if(x=o,o=o+64|0,(0|o)>=(0|p)&&ca(64),e=x+48|0,d=x+40|0,u=x,m=x+24|0,n=x+16|0,q=x+8|0,l=b,r=l,f[u>>2]=m,v=u+4|0,f[v>>2]=n,Kp(r,66384,u),s=n+4|0,t=0|f[s>>2],0==(0|t)&&(h=0|f[n>>2],!(0!=(0|h))))return f[a>>2]=0|f[c>>2],f[a+4>>2]=0|f[c+4>>2],void(o=x);j=l,k=0|f[c>>2],f[d>>2]=0|f[n>>2],f[d+4>>2]=0|f[n+4>>2],f[e>>2]=0|f[c>>2],f[e+4>>2]=0|f[c+4>>2],Bk(q,j,d,1,c,e,k),f[a>>2]=0|f[c>>2],f[a+4>>2]=0|f[c+4>>2],o=x}function vq(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,r=0;r=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),d=r+16|0,n=r,h=r+4|0,g=b,i=g,f[n>>2]=h,Kp(i,68770,n),j=g,k=0|f[h>>2],er(j,k),l=g,m=0|f[h>>2],f[d>>2]=0|f[c>>2],f[d+4>>2]=0|f[c+4>>2],e=0|Aj(l,d,m),Zq(a,e),o=r}function wq(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,q=0;q=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),d=q+16|0,m=q,g=q+4|0,e=b,h=e,f[m>>2]=g,Kp(h,68770,m),i=e,j=0|f[g>>2],er(i,j),k=e,l=0|f[g>>2],f[d>>2]=0|f[c>>2],f[d+4>>2]=0|f[c+4>>2],wj(a,k,d,l),o=q}function xq(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,t=0;t=o,o=o+48|0,(0|o)>=(0|p)&&ca(48),e=t+40|0,d=t+32|0,q=t,i=t+16|0,j=t+8|0,h=b,k=h,f[q>>2]=j,r=q+4|0,f[r>>2]=i,Kp(k,68807,q),l=h,m=0|f[j>>2],er(l,m),n=h,g=0|f[j>>2],f[d>>2]=0|f[c>>2],f[d+4>>2]=0|f[c+4>>2],f[e>>2]=0|f[i>>2],f[e+4>>2]=0|f[i+4>>2],yj(n,d,g,e),f[a>>2]=0|f[i>>2],f[a+4>>2]=0|f[i+4>>2],o=t}function yq(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,t=0;t=o,o=o+48|0,(0|o)>=(0|p)&&ca(48),e=t+40|0,d=t+32|0,r=t,j=t+16|0,k=t+8|0,i=b,l=i,f[d>>2]=0|f[c>>2],f[d+4>>2]=0|f[c+4>>2],Hf(l,d,10),m=i,f[r>>2]=j,Kp(m,69199,r),n=i,q=i,f[e>>2]=0|f[j>>2],f[e+4>>2]=0|f[j+4>>2],Vp(k,q,e),g=0|f[k>>2],h=0|f[c>>2],Qp(n,g,h),f[a>>2]=0|f[c>>2],f[a+4>>2]=0|f[c+4>>2],o=t}function zq(a,b,c){a|=0,b|=0,c|=0;var e=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,Q=0;for(Q=o,o=o+80|0,(0|o)>=(0|p)&&ca(80),h=Q+72|0,g=Q+64|0,e=Q+56|0,N=Q+16|0,M=Q+8|0,L=Q,F=Q+48|0,G=Q+44|0,I=Q+32|0,J=Q+24|0,E=b,K=E,f[L>>2]=F,O=L+4|0,f[O>>2]=G,Kp(K,68856,L),H=0;;){if(i=H,j=0|f[G>>2],!((0|i)<(0|j)))break;l=E,m=0|f[F>>2],n=H,q=m+(n<<3)|0,f[e>>2]=0|f[q>>2],f[e+4>>2]=0|f[q+4>>2],Hf(l,e,10),r=H,s=r+1|0,H=s}for(;;){if(t=0|f[G>>2],u=t+-1|0,f[G>>2]=u,!(0!=(0|t)))break;w=E,x=0|f[F>>2],y=0|f[G>>2],z=x+(y<<3)|0,d[M>>0]=0|d[c>>0],d[M+1>>0]=0|d[c+1>>0],d[M+2>>0]=0|d[c+2>>0],d[M+3>>0]=0|d[c+3>>0],d[M+4>>0]=0|d[c+4>>0],d[M+5>>0]=0|d[c+5>>0],d[M+6>>0]=0|d[c+6>>0],d[M+7>>0]=0|d[c+7>>0],f[g>>2]=0|f[z>>2],f[g+4>>2]=0|f[z+4>>2],Xj(I,w,g,65727,1,M),A=E,B=0|f[F>>2],C=0|f[G>>2],D=B+(C<<3)|0,d[N>>0]=0|d[c>>0],d[N+1>>0]=0|d[c+1>>0],d[N+2>>0]=0|d[c+2>>0],d[N+3>>0]=0|d[c+3>>0],d[N+4>>0]=0|d[c+4>>0],d[N+5>>0]=0|d[c+5>>0],d[N+6>>0]=0|d[c+6>>0],d[N+7>>0]=0|d[c+7>>0],f[h>>2]=0|f[D>>2],f[h+4>>2]=0|f[D+4>>2],Xj(J,A,h,65717,1,N)}f[a>>2]=0|f[c>>2],f[a+4>>2]=0|f[c+4>>2],o=Q}function Aq(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,q=0;q=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),d=q+24|0,m=q,g=q+8|0,e=b,h=e,f[d>>2]=0|f[c>>2],f[d+4>>2]=0|f[c+4>>2],Hf(h,d,10),i=e,f[m>>2]=g,Kp(i,68805,m),j=e,k=0|f[g>>2],l=0|f[c>>2],Up(j,k,l),f[a>>2]=0|f[c>>2],f[a+4>>2]=0|f[c+4>>2],o=q}function Bq(a,b,c){a|=0,b|=0,c|=0;var e=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,Q=0;for(Q=o,o=o+80|0,(0|o)>=(0|p)&&ca(80),h=Q+72|0,g=Q+64|0,e=Q+56|0,N=Q+16|0,M=Q+8|0,L=Q,F=Q+48|0,G=Q+44|0,I=Q+32|0,J=Q+24|0,E=b,K=E,f[L>>2]=F,O=L+4|0,f[O>>2]=G,Kp(K,68856,L),H=0;;){if(i=H,j=0|f[G>>2],!((0|i)<(0|j)))break;l=E,m=0|f[F>>2],n=H,q=m+(n<<3)|0,f[e>>2]=0|f[q>>2],f[e+4>>2]=0|f[q+4>>2],Hf(l,e,10),r=H,s=r+1|0,H=s}for(;;){if(t=0|f[G>>2],u=t+-1|0,f[G>>2]=u,!(0!=(0|t)))break;w=E,x=0|f[F>>2],y=0|f[G>>2],z=x+(y<<3)|0,d[M>>0]=0|d[c>>0],d[M+1>>0]=0|d[c+1>>0],d[M+2>>0]=0|d[c+2>>0],d[M+3>>0]=0|d[c+3>>0],d[M+4>>0]=0|d[c+4>>0],d[M+5>>0]=0|d[c+5>>0],d[M+6>>0]=0|d[c+6>>0],d[M+7>>0]=0|d[c+7>>0],f[g>>2]=0|f[z>>2],f[g+4>>2]=0|f[z+4>>2],Xj(I,w,g,65752,1,M),A=E,B=0|f[F>>2],C=0|f[G>>2],D=B+(C<<3)|0,d[N>>0]=0|d[c>>0],d[N+1>>0]=0|d[c+1>>0],d[N+2>>0]=0|d[c+2>>0],d[N+3>>0]=0|d[c+3>>0],d[N+4>>0]=0|d[c+4>>0],d[N+5>>0]=0|d[c+5>>0],d[N+6>>0]=0|d[c+6>>0],d[N+7>>0]=0|d[c+7>>0],f[h>>2]=0|f[D>>2],f[h+4>>2]=0|f[D+4>>2],Xj(J,A,h,65779,1,N)}f[a>>2]=0|f[c>>2],f[a+4>>2]=0|f[c+4>>2],o=Q}function Cq(a,b,c){a|=0,b|=0,c|=0;var d=0,g=0,h=0,i=0,k=0,l=0,m=0,n=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;for(D=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),d=D+24|0,B=D,v=D+8|0,u=b,x=0|f[c>>2],w=x,y=u,f[B>>2]=v,Kp(y,68805,B),z=u,f[d>>2]=0|f[v>>2],f[d+4>>2]=0|f[v+4>>2],Hf(z,d,10);;){if(A=w,!(0!=(0|A))){C=7;break}if(g=w,h=0|f[g>>2],i=255&h,11==(0|i)&&(k=w,l=k+4|0,m=0|f[l>>2],n=0|f[v>>2],(0|m)==(0|n))){C=5;break}r=w,s=r+20|0,t=0|f[s>>2],w=t}return 5==(0|C)?(gr(a),void(o=D)):7==(0|C)?(hr(a),void(o=D)):void 0}function Dq(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,q=0;q=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),d=q+24|0,m=q,g=q+8|0,e=b,h=e,f[d>>2]=0|f[c>>2],f[d+4>>2]=0|f[c+4>>2],Hf(h,d,10),i=e,f[m>>2]=g,Kp(i,68805,m),j=e,k=0|f[g>>2],l=0|f[c>>2],Qp(j,k,l),f[a>>2]=0|f[c>>2],f[a+4>>2]=0|f[c+4>>2],o=q}function Eq(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,x=0,y=0,z=0,A=0,B=0,C=0,E=0,F=0,G=0,H=0,I=0,J=0,L=0,M=0,N=0,O=0,P=0,Q=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,ea=0;ea=o,o=o+64|0,(0|o)>=(0|p)&&ca(64),e=ea+48|0,d=ea+40|0,N=ea+24|0,_=ea+8|0,aa=ea,C=b,ba=0|f[c>>2],Y=ba,g=Y,$=g,h=$,i=0|f[h>>2],j=i>>>11,k=524288&j,l=0!=(0|k);a:if(l)for(m=$,n=m+20|0,q=0|f[n>>2],$=q;;){if(r=$,s=0|f[r>>2],t=s>>>11,u=1048576&t,v=0!=(0|u),!(1^v))break a;x=$,y=x+20|0,z=0|f[y>>2],$=z}for(A=C,Ln(_,A),f[N>>2]=0|f[_>>2],f[N+4>>2]=0|f[_+4>>2];;){if(B=Y,!(0!=(0|B)))break;E=Y,F=$,G=(0|E)!=(0|F),G&&(H=Y,I=0|f[H>>2],J=255&I,11==(0|J)&&(L=Y,M=L+4|0,O=0|f[M>>2],P=0|f[O>>2],Q=255&P,10==(0|Q)&&(S=C,T=Y,U=T+4|0,V=0|f[U>>2],ip(aa,V),f[d>>2]=0|f[N>>2],f[d+4>>2]=0|f[N+4>>2],f[e>>2]=0|f[aa>>2],f[e+4>>2]=0|f[aa+4>>2],Zn(S,d,e)))),W=Y,X=W+20|0,Z=0|f[X>>2],Y=Z}f[a>>2]=0|f[N>>2],f[a+4>>2]=0|f[N+4>>2],o=ea}function Fq(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,k=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,z=0;if(z=o,o=o+64|0,(0|o)>=(0|p)&&ca(64),e=z+48|0,d=z+40|0,x=z,r=z+24|0,t=z+8|0,q=b,u=0|f[c>>2],s=u,v=q,w=s,op(v,w),g=q,f[x>>2]=r,Kp(g,66381,x),h=r+4|0,i=0|f[h>>2],0==(0|i)&&(k=0|f[r>>2],!(0!=(0|k))))return f[a>>2]=0|f[c>>2],f[a+4>>2]=0|f[c+4>>2],void(o=z);m=q,n=s,f[d>>2]=0|f[r>>2],f[d+4>>2]=0|f[r+4>>2],f[e>>2]=0|f[c>>2],f[e+4>>2]=0|f[c+4>>2],Bk(t,m,d,1,c,e,n),f[a>>2]=0|f[c>>2],f[a+4>>2]=0|f[c+4>>2],o=z}function Gq(a,b,c){a|=0,b|=0,c|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,r=0;r=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),n=r,i=r+12|0,g=b,j=0|f[c>>2],h=j,d[i>>0]=1,k=g,f[n>>2]=i,Kp(k,68724,n),l=g,m=0|d[i>>0],e=h,ts(a,l,m,e,0),o=r}function Hq(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,n=0;n=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),l=n,e=n+4|0,d=b,g=d,f[l>>2]=e,Kp(g,68770,l),h=d,i=0|f[c>>2],j=0|f[e>>2],k=0|eq(h,i,j),Zq(a,k),o=n}function Iq(a,b,c){a|=0,b|=0,c|=0;var g=0;g=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),f[a>>2]=0|f[c>>2],f[a+4>>2]=0|f[c+4>>2],o=g}function Jq(a,b,c){a|=0,b|=0,c|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,L=0;if(L=o,o=o+112|0,(0|o)>=(0|p)&&ca(112),g=L+96|0,e=L+88|0,H=L+24|0,G=L+8|0,F=L,z=L+72|0,A=L+64|0,B=L+56|0,C=L+48|0,D=L+40|0,y=b,E=y,f[F>>2]=A,Kp(E,68770,F),h=y,i=0|f[A>>2],er(h,i),j=y,k=0|f[A>>2],f[e>>2]=0|f[c>>2],f[e+4>>2]=0|f[c+4>>2],lj(B,j,e,k),f[z>>2]=0|f[B>>2],f[z+4>>2]=0|f[B+4>>2],l=z+4|0,m=0|f[l>>2],!(5==(0|m)))return f[a>>2]=0|f[z>>2],f[a+4>>2]=0|f[z+4>>2],void(o=L);q=y,r=0|f[A>>2],f[g>>2]=0|f[c>>2],f[g+4>>2]=0|f[c+4>>2],s=0|Aj(q,g,r),t=s<<24>>24!=0,u=y,v=0|f[A>>2],w=y,x=0|f[A>>2],t?(ui(C,w,x),d[G>>0]=0|d[C>>0],d[G+1>>0]=0|d[C+1>>0],d[G+2>>0]=0|d[C+2>>0],d[G+3>>0]=0|d[C+3>>0],d[G+4>>0]=0|d[C+4>>0],d[G+5>>0]=0|d[C+5>>0],d[G+6>>0]=0|d[C+6>>0],d[G+7>>0]=0|d[C+7>>0],I=G+8|0,d[I>>0]=0|d[c>>0],d[I+1>>0]=0|d[c+1>>0],d[I+2>>0]=0|d[c+2>>0],d[I+3>>0]=0|d[c+3>>0],d[I+4>>0]=0|d[c+4>>0],d[I+5>>0]=0|d[c+5>>0],d[I+6>>0]=0|d[c+6>>0],d[I+7>>0]=0|d[c+7>>0],Er(u,v,66275,G)):(ui(D,w,x),d[H>>0]=0|d[D>>0],d[H+1>>0]=0|d[D+1>>0],d[H+2>>0]=0|d[D+2>>0],d[H+3>>0]=0|d[D+3>>0],d[H+4>>0]=0|d[D+4>>0],d[H+5>>0]=0|d[D+5>>0],d[H+6>>0]=0|d[D+6>>0],d[H+7>>0]=0|d[D+7>>0],J=H+8|0,d[J>>0]=0|d[c>>0],d[J+1>>0]=0|d[c+1>>0],d[J+2>>0]=0|d[c+2>>0],d[J+3>>0]=0|d[c+3>>0],d[J+4>>0]=0|d[c+4>>0],d[J+5>>0]=0|d[c+5>>0],d[J+6>>0]=0|d[c+6>>0],d[J+7>>0]=0|d[c+7>>0],Er(u,v,66299,H))}function Kq(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,t=0,u=0,w=0;for(w=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),d=w+24|0,t=w,l=w+12|0,m=w+8|0,k=b,n=k,f[t>>2]=m,u=t+4|0,f[u>>2]=l,Kp(n,68856,t);;){if(q=0|f[l>>2],r=q+-1|0,f[l>>2]=r,!(0!=(0|q)))break;e=k,g=0|f[m>>2],h=0|f[g>>2],f[d>>2]=0|f[c>>2],f[d+4>>2]=0|f[c+4>>2],dr(e,d,h),i=0|f[m>>2],j=i+8|0,f[m>>2]=j}f[a>>2]=0|f[c>>2],f[a+4>>2]=0|f[c+4>>2],o=w}function Lq(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,va=0;for(va=o,o=o+144|0,(0|o)>=(0|p)&&ca(144),i=va+128|0,h=va+120|0,g=va+112|0,e=va+104|0,d=va+96|0,sa=va,_=va+84|0,la=va+80|0,ra=va+64|0,j=va+56|0,m=va+40|0,n=va+32|0,q=va+24|0,r=va+16|0,s=va+8|0,F=b,t=0|f[c>>2],Q=t,u=F,f[sa>>2]=_,ta=sa+4|0,f[ta>>2]=la,Kp(u,68856,sa),v=F,w=0|Wc(v),qa=w,pa=0;;){if(x=pa,y=0|f[la>>2],!((0|x)<(0|y)))break;A=F,B=0|f[_>>2],C=pa,D=B+(C<<3)|0,f[d>>2]=0|f[D>>2],f[d+4>>2]=0|f[D+4>>2],E=0|Op(A,d),k=E,G=F,H=k,ui(m,G,H),f[ra>>2]=0|f[m>>2],f[ra+4>>2]=0|f[m+4>>2],I=F,J=0|f[ra>>2],K=0|f[J>>2],L=K>>>11,M=8&L,N=0!=(0|M),O=0|f[ra>>2],N?(P=0|f[O>>2],R=P>>>11,S=496&R,T=S>>4,X=T):(U=O+12|0,V=0|f[U>>2],X=V),W=X+1|0,kg(n,I,W),f[j>>2]=0|f[n>>2],f[j+4>>2]=0|f[n+4>>2],Y=F,f[e>>2]=0|f[j>>2],f[e+4>>2]=0|f[j+4>>2],ch(q,Y,e,66241,1),Z=F,f[g>>2]=0|f[j>>2],f[g+4>>2]=0|f[j+4>>2],f[h>>2]=0|f[ra>>2],f[h+4>>2]=0|f[ra+4>>2],fh(r,Z,g,h),$=F,f[i>>2]=0|f[j>>2],f[i+4>>2]=0|f[j+4>>2],aa=0|li($,i),l=aa,ba=F,da=l,fj(ba,da),ea=l,np(s,ea),f[ra>>2]=0|f[s>>2],f[ra+4>>2]=0|f[s+4>>2],fa=F,ga=Q,ha=k,ia=F,ja=0|mt(ia,274,1,ra),Gp(fa,ga,ha,ja),ka=F,ma=qa,Xc(ka,ma),na=pa,oa=na+1|0,pa=oa}Jp(a),o=va}function Mq(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Va=0;for(Va=o,o=o+208|0,(0|o)>=(0|p)&&ca(208),m=Va+192|0,l=Va+184|0,k=Va+176|0,j=Va+168|0,i=Va+160|0,h=Va+152|0,g=Va+144|0,e=Va+136|0,d=Va+128|0,Sa=Va,ea=Va+116|0,pa=Va+112|0,Ra=Va+96|0,n=Va+88|0,q=Va+80|0,t=Va+64|0,u=Va+56|0,v=Va+48|0,w=Va+40|0,x=Va+32|0,y=Va+24|0,z=Va+16|0,A=Va+8|0,J=b,B=0|f[c>>2],U=B,C=J,f[Sa>>2]=ea,Ta=Sa+4|0,f[Ta>>2]=pa,Kp(C,68856,Sa),D=J,E=0|Wc(D),La=E,Aa=0;;){if(F=Aa,G=0|f[pa>>2],!((0|F)<(0|G)))break;I=J,K=0|f[ea>>2],L=Aa,M=K+(L<<3)|0,f[d>>2]=0|f[M>>2],f[d+4>>2]=0|f[M+4>>2],N=0|Op(I,d),r=N,O=J,P=r,ui(t,O,P),f[Ra>>2]=0|f[t>>2],f[Ra+4>>2]=0|f[t+4>>2],Q=J,R=0|f[Ra>>2],S=0|f[R>>2],T=S>>>11,V=8&T,W=0!=(0|V),X=0|f[Ra>>2],W?(Y=0|f[X>>2],Z=Y>>>11,$=496&Z,_=$>>4,fa=_):(aa=X+12|0,ba=0|f[aa>>2],fa=ba),da=fa+1|0,kg(u,Q,da),f[n>>2]=0|f[u>>2],f[n+4>>2]=0|f[u+4>>2],ga=J,f[e>>2]=0|f[n>>2],f[e+4>>2]=0|f[n+4>>2],ch(v,ga,e,66241,1),ha=J,f[g>>2]=0|f[n>>2],f[g+4>>2]=0|f[n+4>>2],f[h>>2]=0|f[Ra>>2],f[h+4>>2]=0|f[Ra+4>>2],fh(w,ha,g,h),ia=J,f[i>>2]=0|f[n>>2],f[i+4>>2]=0|f[n+4>>2],ja=0|li(ia,i),s=ja,ka=J,la=s,fj(ka,la),ma=s,np(x,ma),f[q>>2]=0|f[x>>2],f[q+4>>2]=0|f[x+4>>2],na=J,oa=0|f[n>>2],qa=0|f[oa>>2],ra=qa>>>11,sa=8&ra,ta=0!=(0|sa),ua=0|f[n>>2],ta?(va=0|f[ua>>2],wa=va>>>11,xa=496&wa,ya=xa>>4,Ca=ya):(za=ua+12|0,Ba=0|f[za>>2],Ca=Ba),kg(y,na,Ca),f[n>>2]=0|f[y>>2],f[n+4>>2]=0|f[y+4>>2],Da=J,f[j>>2]=0|f[n>>2],f[j+4>>2]=0|f[n+4>>2],f[k>>2]=0|f[Ra>>2],f[k+4>>2]=0|f[Ra+4>>2],fh(z,Da,j,k),Ea=J,f[l>>2]=0|f[n>>2],f[l+4>>2]=0|f[n+4>>2],ch(A,Ea,l,66243,1),Fa=J,f[m>>2]=0|f[n>>2],f[m+4>>2]=0|f[n+4>>2],Ga=0|li(Fa,m),r=Ga,Ha=J,Ia=U,Ja=r,Ka=J,Ma=0|mt(Ka,275,1,q),Gp(Ha,Ia,Ja,Ma),Na=J,Oa=La,Xc(Na,Oa),Pa=Aa,Qa=Pa+1|0,Aa=Qa}Jp(a),o=Va}function Nq(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,Y=0,Z=0,_=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,pa=0;if(pa=o,o=o+240|0,(0|o)>=(0|p)&&ca(240),j=pa+232|0,i=pa+224|0,h=pa+216|0,g=pa+208|0,t=pa+200|0,s=pa+192|0,r=pa+184|0,q=pa+176|0,n=pa+168|0,m=pa+160|0,l=pa+152|0,k=pa+144|0,e=pa+136|0,d=pa+128|0,Z=pa+112|0,ja=pa+104|0,ka=pa+96|0,la=pa+88|0,ma=pa+80|0,na=pa+72|0,u=pa+64|0,w=pa+48|0,x=pa+40|0,y=pa+32|0,z=pa+24|0,A=pa+16|0,B=pa+8|0,C=pa,O=b,D=c+4|0,E=0|f[D>>2],F=12==(0|E),G=O,F){switch(H=O,I=0|ji(H,68237,12),f[d>>2]=0|f[c>>2],f[d+4>>2]=0|f[c+4>>2],Xi(ja,G,d,I),J=O,qg(ka,J,65531,8),f[Z>>2]=0|f[ka>>2],f[Z+4>>2]=0|f[ka+4>>2],K=ja+4|0,0|(0|f[K>>2])){case 12:case 10:case 9:M=O,N=O,f[e>>2]=0|f[ja>>2],f[e+4>>2]=0|f[ja+4>>2],Ef(la,N,e),f[k>>2]=0|f[Z>>2],f[k+4>>2]=0|f[Z+4>>2],f[l>>2]=0|f[la>>2],f[l+4>>2]=0|f[la+4>>2],fh(ma,M,k,l);break;default:P=O,Q=O,f[m>>2]=0|f[ja>>2],f[m+4>>2]=0|f[ja+4>>2],Jf(na,Q,m),f[n>>2]=0|f[Z>>2],f[n+4>>2]=0|f[Z+4>>2],f[q>>2]=0|f[na>>2],f[q+4>>2]=0|f[na+4>>2],fh(u,P,n,q)}return R=O,f[r>>2]=0|f[Z>>2],f[r+4>>2]=0|f[Z+4>>2],ch(a,R,r,65540,1),void(o=pa)}if(kg(x,G,32),f[Z>>2]=0|f[x>>2],f[Z+4>>2]=0|f[x+4>>2],S=0|f[c>>2],v=S,T=O,U=v,fq(y,T,U),f[w>>2]=0|f[y>>2],f[w+4>>2]=0|f[y+4>>2],V=w+4|0,W=0|f[V>>2],0==(0|W)&&(Y=0|f[w>>2],!(0!=(0|Y)))){switch(_=c+4|0,0|(0|f[_>>2])){case 9:ba=O,f[s>>2]=0|f[Z>>2],f[s+4>>2]=0|f[Z+4>>2],ch(z,ba,s,65531,8);break;case 10:da=O,f[t>>2]=0|f[Z>>2],f[t+4>>2]=0|f[Z+4>>2],ch(A,da,t,66221,9);break;default:ea=O,f[g>>2]=0|f[Z>>2],f[g+4>>2]=0|f[Z+4>>2],ch(B,ea,g,66231,9)}return fa=O,ga=O,ha=v,Vg(C,ga,ha),f[h>>2]=0|f[Z>>2],f[h+4>>2]=0|f[Z+4>>2],f[i>>2]=0|f[C>>2],f[i+4>>2]=0|f[C+4>>2],xg(fa,h,i),ia=O,f[j>>2]=0|f[Z>>2],f[j+4>>2]=0|f[Z+4>>2],ch(a,ia,j,65540,1),void(o=pa)}f[a>>2]=0|f[w>>2],f[a+4>>2]=0|f[w+4>>2],o=pa}function Oq(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,t=0;t=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),q=t,j=t+12|0,k=t+8|0,h=b,l=0|f[c>>2],i=l,m=h,f[q>>2]=j,r=q+4|0,f[r>>2]=k,Kp(m,66218,q),n=h,d=i,e=0|f[j>>2],g=0|f[k>>2],jq(n,d,e,g),Jp(a),o=t}function Pq(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0;for(N=o,o=o+80|0,(0|o)>=(0|p)&&ca(80),h=N+72|0,g=N+64|0,e=N+56|0,d=N+48|0,G=N+32|0,I=N+16|0,J=N+8|0,K=N,E=b,L=0|f[c>>2],H=L,i=E,Ln(I,i),f[G>>2]=0|f[I>>2],f[G+4>>2]=0|f[I+4>>2];;){if(j=H,!(0!=(0|j)))break;l=H,m=0|f[l>>2],n=255&m,q=11==(0|n),q?(r=E,s=H,t=s+4|0,u=0|f[t>>2],ip(J,u),f[d>>2]=0|f[G>>2],f[d+4>>2]=0|f[G+4>>2],f[e>>2]=0|f[J>>2],f[e+4>>2]=0|f[J+4>>2],Zn(r,d,e)):(v=H,w=0|f[v>>2],x=w>>>11,y=524288&x,0!=(0|y)||(A=E,B=H,ip(K,B),f[g>>2]=0|f[G>>2],f[g+4>>2]=0|f[G+4>>2],f[h>>2]=0|f[K>>2],f[h+4>>2]=0|f[K+4>>2],Zn(A,g,h))),C=H,D=C+20|0,F=0|f[D>>2],H=F}f[a>>2]=0|f[G>>2],f[a+4>>2]=0|f[G+4>>2],o=N}function Qq(a,b,c){a|=0,b|=0,c|=0;var d=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,y=0;for(y=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),v=y,q=y+12|0,r=y+8|0,m=b,s=0|f[c>>2],n=s,t=m,f[v>>2]=r,w=v+4|0,f[w>>2]=q,Kp(t,68856,v);;){if(u=0|f[q>>2],d=u+-1|0,f[q>>2]=d,!(0!=(0|u)))break;g=m,h=n,i=0|f[r>>2],j=0|f[i>>2],lq(g,h,j),k=0|f[r>>2],l=k+8|0,f[r>>2]=l}Jp(a),o=y}function Rq(a,b,c){a|=0,b|=0,c|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,u=0;u=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),e=u+16|0,r=u,j=u+8|0,k=u+24|0,i=b,d[k>>0]=1,l=i,f[r>>2]=j,s=r+4|0,f[s>>2]=k,Kp(l,66214,r),m=i,n=0|f[j>>2],$q(m,n),q=i,g=0|f[j>>2],h=0|d[k>>0],f[e>>2]=0|f[c>>2],f[e+4>>2]=0|f[c+4>>2],ar(a,q,e,g,h),o=u}function Sq(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,q=0;q=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),d=q+16|0,m=q,g=q+4|0,e=b,h=e,f[m>>2]=g,Kp(h,68770,m),i=e,j=0|f[g>>2],$q(i,j),k=e,l=0|f[g>>2],f[d>>2]=0|f[c>>2],f[d+4>>2]=0|f[c+4>>2],Dj(a,k,d,l),o=q}function Tq(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,t=0;t=o,o=o+48|0,(0|o)>=(0|p)&&ca(48),e=t+32|0,d=t+24|0,q=t,i=t+16|0,j=t+8|0,h=b,k=h,f[q>>2]=i,r=q+4|0,f[r>>2]=j,Kp(k,68807,q),l=h,m=0|f[i>>2],$q(l,m),n=h,g=0|f[i>>2],f[d>>2]=0|f[c>>2],f[d+4>>2]=0|f[c+4>>2],f[e>>2]=0|f[j>>2],f[e+4>>2]=0|f[j+4>>2],Hj(n,d,g,e),f[a>>2]=0|f[j>>2],f[a+4>>2]=0|f[j+4>>2],o=t}function Uq(a,b,c){a|=0,b|=0,c|=0;var e=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;if(C=o,o=o+64|0,(0|o)>=(0|p)&&ca(64),e=C+48|0,A=C+8|0,z=C,t=C+40|0,u=C+32|0,v=C+24|0,w=C+16|0,s=b,x=s,f[z>>2]=t,Kp(x,68770,z),y=s,g=0|f[t>>2],$q(y,g),h=s,i=0|f[t>>2],f[e>>2]=0|f[c>>2],f[e+4>>2]=0|f[c+4>>2],lj(v,h,e,i),f[u>>2]=0|f[v>>2],f[u+4>>2]=0|f[v+4>>2],j=u+4|0,k=0|f[j>>2],!(5==(0|k)))return f[a>>2]=0|f[u>>2],f[a+4>>2]=0|f[u+4>>2],void(o=C);m=s,n=0|f[t>>2],q=s,r=0|f[t>>2],ui(w,q,r),d[A>>0]=0|d[w>>0],d[A+1>>0]=0|d[w+1>>0],d[A+2>>0]=0|d[w+2>>0],d[A+3>>0]=0|d[w+3>>0],d[A+4>>0]=0|d[w+4>>0],d[A+5>>0]=0|d[w+5>>0],d[A+6>>0]=0|d[w+6>>0],d[A+7>>0]=0|d[w+7>>0],Er(m,n,66167,A)}function Vq(a,b,c){a|=0,b|=0,c|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,B=0;B=o,o=o+64|0,(0|o)>=(0|p)&&ca(64),y=B+24|0,x=B+8|0,w=B,q=B+48|0,r=B+40|0,s=B+32|0,n=b,t=n,f[w>>2]=q,Kp(t,68770,w),u=0|f[c>>2],v=0|xp(u),e=n,g=e+32|0,h=0|f[g>>2],i=(0|v)!=(0|h),j=n,k=0|f[q>>2],l=n,m=0|f[q>>2],i?(ui(r,l,m),d[x>>0]=0|d[c>>0],d[x+1>>0]=0|d[c+1>>0],d[x+2>>0]=0|d[c+2>>0],d[x+3>>0]=0|d[c+3>>0],d[x+4>>0]=0|d[c+4>>0],d[x+5>>0]=0|d[c+5>>0],d[x+6>>0]=0|d[c+6>>0],d[x+7>>0]=0|d[c+7>>0],z=x+8|0,d[z>>0]=0|d[r>>0],d[z+1>>0]=0|d[r+1>>0],d[z+2>>0]=0|d[r+2>>0],d[z+3>>0]=0|d[r+3>>0],d[z+4>>0]=0|d[r+4>>0],d[z+5>>0]=0|d[r+5>>0],d[z+6>>0]=0|d[r+6>>0],d[z+7>>0]=0|d[r+7>>0],Er(j,k,66111,x)):(ui(s,l,m),d[y>>0]=0|d[s>>0],d[y+1>>0]=0|d[s+1>>0],d[y+2>>0]=0|d[s+2>>0],d[y+3>>0]=0|d[s+3>>0],d[y+4>>0]=0|d[s+4>>0],d[y+5>>0]=0|d[s+5>>0],d[y+6>>0]=0|d[s+6>>0],d[y+7>>0]=0|d[s+7>>0],Er(j,k,66141,y))}function Wq(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,T=0;T=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),Q=T,M=T+16|0,N=T+8|0,A=b,O=0|f[c>>2],K=O,P=A,f[Q>>2]=M,R=Q+4|0,f[R>>2]=N,Kp(P,68706,Q),d=N+4|0,e=0|f[d>>2],g=0==(0|e),g&&(h=0|f[N>>2],0!=(0|h)||(j=A,k=A,l=0|sp(k,69160),Ar(j,l,68709))),m=A,n=A,q=n+44|0,r=0|f[q>>2],s=0|Tc(m,13,r),L=s,t=L,u=0|f[N>>2],pt(t,u),v=L,w=0|f[v>>2],x=w>>>11,y=256|x,z=0|f[v>>2],B=2097151&y,C=B<<11,D=2047&z,E=D|C,f[v>>2]=E,F=A,G=K,H=0|f[M>>2],I=L,Gp(F,G,H,I),J=0|f[M>>2],np(a,J),o=T}function Xq(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,r=0;r=o,o=o+48|0,(0|o)>=(0|p)&&ca(48),d=r+24|0,n=r,h=r+8|0,g=b,j=g,f[n>>2]=h,Kp(j,69199,n),k=g,l=0|f[c>>2],f[d>>2]=0|f[h>>2],f[d+4>>2]=0|f[h+4>>2],m=0|Kf(k,d,l),i=m,e=i,Zq(a,e),o=r}function Yq(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,f=0,g=0;o=o+16|0,(0|o)>=(0|p)&&ca(16),d=b,e=d,f=d,g=0|sp(f,65108),Ar(e,g,66078)}function Zq(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,l=0;l=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),d=l,c=b,e=c,g=255&e,h=0!=(0|g),i=h?2:0,j=d+4|0,f[j>>2]=i,f[d>>2]=1,f[a>>2]=0|f[d>>2],f[a+4>>2]=0|f[d+4>>2],o=l}function $q(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,l=0;l=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),c=l+16|0,g=l,d=a,e=b,h=d,i=d,j=e,ui(g,i,j),f[c>>2]=0|f[g>>2],f[c+4>>2]=0|f[g+4>>2],_q(h,c),o=l}function _q(a,b){a|=0,b|=0;var c=0,e=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,P=0;if(P=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),c=P+16|0,N=P,r=a,C=0|f[b>>2],H=0|f[C>>2],I=H>>>11,J=8&I,K=0!=(0|J),L=0|f[b>>2],K?(M=0|f[L>>2],e=M>>>11,g=496&e,h=g>>4,l=h):(i=L+12|0,j=0|f[i>>2],l=j),!((0|l)<1)&&(m=0|f[b>>2],n=0|f[m>>2],q=n>>>11,s=8&q,t=0!=(0|s),u=0|f[b>>2],v=u+12|0,t?z=v:(w=v+8|0,x=0|f[w>>2],z=x),y=0|d[z>>0],A=y<<24>>24,B=A-65|0,B>>>0<26))return void(o=P);E=r,F=r,f[c>>2]=0|f[b>>2],f[c+4>>2]=0|f[b+4>>2],G=0|li(F,c),d[N>>0]=0|d[b>>0],d[N+1>>0]=0|d[b+1>>0],d[N+2>>0]=0|d[b+2>>0],d[N+3>>0]=0|d[b+3>>0],d[N+4>>0]=0|d[b+4>>0],d[N+5>>0]=0|d[b+5>>0],d[N+6>>0]=0|d[b+6>>0],d[N+7>>0]=0|d[b+7>>0],Er(E,G,66191,N)}function ar(a,b,c,d,e){a|=0,b|=0,c|=0,d|=0,e|=0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,u=0;return u=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),h=u+16|0,g=u+8|0,m=b,n=d,q=e,r=q,s=r<<24>>24!=0,i=m,j=n,s?(f[g>>2]=0|f[c>>2],f[g+4>>2]=0|f[c+4>>2],k=0|Rj(i,g,j),Zq(a,k),void(o=u)):(f[h>>2]=0|f[c>>2],f[h+4>>2]=0|f[c+4>>2],l=0|Tj(i,h,j),Zq(a,l),void(o=u))}function br(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,t=0;t=o,o=o+64|0,(0|o)>=(0|p)&&ca(64),g=t+48|0,e=t+40|0,d=t+32|0,r=t,j=t+16|0,k=t+8|0,i=b,l=i,nt(j,l,0),m=i,f[r>>2]=k,Kp(m,69199,r),n=i,q=i,f[d>>2]=0|f[j>>2],f[d+4>>2]=0|f[j+4>>2],h=0|Op(q,d),f[e>>2]=0|f[c>>2],f[e+4>>2]=0|f[c+4>>2],f[g>>2]=0|f[k>>2],f[g+4>>2]=0|f[k+4>>2],bj(n,e,h,g),f[a>>2]=0|f[k>>2],f[a+4>>2]=0|f[k+4>>2],o=t}function cr(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,n=0;n=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),e=n+24|0,d=n+16|0,h=n,g=b,i=g,nt(h,i,0),j=g,k=g,f[d>>2]=0|f[h>>2],f[d+4>>2]=0|f[h+4>>2],l=0|Op(k,d),f[e>>2]=0|f[c>>2],f[e+4>>2]=0|f[c+4>>2],Xi(a,j,e,l),o=n}function dr(a,b,c){a|=0,b|=0,c|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,S=0;if(S=o,o=o+80|0,(0|o)>=(0|p)&&ca(80),e=S+72|0,P=S+8|0,O=S,M=S+40|0,N=S+32|0,g=S+24|0,C=a,I=c,h=0|f[b>>2],J=h,i=J,j=0|Rp(i),k=j+16|0,l=0|f[k>>2],K=l,m=K,0!=(0|m)&&(q=C,r=K,s=I,t=0|$o(q,r,s),L=t,u=L,v=K,w=0|f[v>>2],(0|u)!=(0|w)))return y=C,z=K,A=L,bp(y,z,A),B=C,D=I,np(M,D),d[O>>0]=0|d[M>>0],d[O+1>>0]=0|d[M+1>>0],d[O+2>>0]=0|d[M+2>>0],d[O+3>>0]=0|d[M+3>>0],d[O+4>>0]=0|d[M+4>>0],d[O+5>>0]=0|d[M+5>>0],d[O+6>>0]=0|d[M+6>>0],d[O+7>>0]=0|d[M+7>>0],f[e>>2]=0|f[b>>2],f[e+4>>2]=0|f[b+4>>2],Xj(N,B,e,65927,1,O),void(o=S);E=C,F=I,G=C,H=I,ui(g,G,H),d[P>>0]=0|d[g>>0],d[P+1>>0]=0|d[g+1>>0],d[P+2>>0]=0|d[g+2>>0],d[P+3>>0]=0|d[g+3>>0],d[P+4>>0]=0|d[g+4>>0],d[P+5>>0]=0|d[g+5>>0],d[P+6>>0]=0|d[g+6>>0],d[P+7>>0]=0|d[g+7>>0],Q=P+8|0,d[Q>>0]=0|d[b>>0],d[Q+1>>0]=0|d[b+1>>0],d[Q+2>>0]=0|d[b+2>>0],d[Q+3>>0]=0|d[b+3>>0],d[Q+4>>0]=0|d[b+4>>0],d[Q+5>>0]=0|d[b+5>>0],d[Q+6>>0]=0|d[b+6>>0],d[Q+7>>0]=0|d[b+7>>0],Er(E,F,66245,P)}function er(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,l=0;l=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),c=l+16|0,g=l,d=a,e=b,h=d,i=d,j=e,ui(g,i,j),f[c>>2]=0|f[g>>2],f[c+4>>2]=0|f[g+4>>2],fr(h,c),o=l}function fr(a,b){a|=0,b|=0;var c=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,X=0;if(X=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),c=X+24|0,V=X,r=a,Q=0|f[b>>2],R=0|f[Q>>2],S=R>>>11,T=8&S,U=0!=(0|T),e=0|f[b>>2],g=e+12|0,U?j=g:(h=g+8|0,i=0|f[h>>2],j=i),C=j,k=0|f[b>>2],l=0|f[k>>2],m=l>>>11,n=8&m,q=0!=(0|n),s=0|f[b>>2],q?(t=0|f[s>>2],u=t>>>11,v=496&u,w=v>>4,z=w):(x=s+12|0,y=0|f[x>>2],z=y),N=z,A=N,!((0|A)<3)&&(D=C,E=0|d[D>>0],F=E<<24>>24,64==(0|F)&&(H=C,I=H+1|0,J=0|d[I>>0],K=J<<24>>24,64==(0|K))))return void(o=X);M=r,O=r,f[c>>2]=0|f[b>>2],f[c+4>>2]=0|f[b+4>>2],P=0|li(O,c),d[V>>0]=0|d[b>>0],d[V+1>>0]=0|d[b+1>>0],d[V+2>>0]=0|d[b+2>>0],d[V+3>>0]=0|d[b+3>>0],d[V+4>>0]=0|d[b+4>>0],d[V+5>>0]=0|d[b+5>>0],d[V+6>>0]=0|d[b+6>>0],d[V+7>>0]=0|d[b+7>>0],Er(M,P,66336,V)}function gr(a){a|=0;var b=0,c=0,e=0;e=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),b=e,c=b+4|0,f[c>>2]=2,f[b>>2]=1,f[a>>2]=0|f[b>>2],f[a+4>>2]=0|f[b+4>>2],o=e}function hr(a){a|=0;var b=0,c=0,e=0;e=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),b=e,c=b+4|0,f[c>>2]=0,f[b>>2]=1,f[a>>2]=0|f[b>>2],f[a+4>>2]=0|f[b+4>>2],o=e}function ir(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,k=0;k=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),c=a,d=b,e=c,g=d,h=g+12|0,i=0|f[h>>2],jr(e,i),o=k}function jr(a,b){a|=0,b|=0;var c=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,z=0;for(z=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),n=a,r=b,t=n,u=r,kr(t,u),s=0;;){if(v=s,w=r,x=w+52|0,c=0|f[x>>2],!(v>>>0<c>>>0))break;e=n,g=r,h=g+20|0,i=0|f[h>>2],j=s,k=i+(j<<2)|0,l=0|f[k>>2],jr(e,l),m=s,q=m+1|0,s=q}o=z}function kr(a,b){a|=0,b|=0;var c=0,d=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,$a=0,_a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,$b=0,_b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,yc=0,zc=0,Ac=0,Bc=0,Cc=0,Dc=0,Ec=0,Fc=0,Gc=0,Hc=0,Ic=0,Jc=0,Kc=0,Lc=0,Mc=0,Nc=0,Oc=0,Pc=0,Qc=0,Rc=0,Sc=0,Tc=0,Uc=0,Vc=0,Yc=0,Zc=0,$c=0,_c=0,ad=0,bd=0,cd=0,dd=0,ed=0,fd=0,gd=0,hd=0,id=0,jd=0,kd=0,ld=0,md=0,nd=0,od=0,pd=0,qd=0,rd=0,sd=0,td=0,ud=0,vd=0,wd=0,xd=0,yd=0,zd=0,Ad=0,Bd=0,Cd=0,Dd=0,Ed=0,Fd=0,Gd=0,Hd=0,Id=0,Jd=0,Kd=0,Ld=0,Md=0,Nd=0,Od=0,Pd=0,Qd=0,Rd=0,Sd=0,Td=0,Ud=0,Vd=0,Wd=0,Xd=0,Yd=0,Zd=0,$d=0,_d=0,ae=0,be=0,ce=0,de=0,ee=0,fe=0,ge=0,he=0,ie=0,je=0,ke=0,le=0,me=0,ne=0,oe=0,pe=0,qe=0,re=0,se=0,te=0,ue=0,ve=0,we=0,xe=0,ye=0,ze=0,Ae=0,Be=0,Ce=0,De=0,Ee=0,Fe=0,Ge=0,He=0,Ie=0,Je=0,Ke=0,Le=0,Me=0,Ne=0,Oe=0,Pe=0,Qe=0,Re=0,Se=0,Te=0,Ue=0,Ve=0,We=0,Xe=0,Ye=0,Ze=0,$e=0,_e=0,af=0,bf=0,cf=0,df=0,ef=0,ff=0,gf=0,hf=0,jf=0,kf=0,lf=0,mf=0,nf=0,of=0,pf=0,qf=0,rf=0,sf=0,tf=0,uf=0,vf=0,wf=0,xf=0,yf=0,zf=0,Af=0,Bf=0,Cf=0,Df=0,Ff=0,Gf=0,Hf=0,If=0,Jf=0,Kf=0,Lf=0,Mf=0,Nf=0,Of=0,Pf=0,Qf=0,Rf=0,Sf=0,Tf=0,Uf=0,Wf=0,Xf=0,Yf=0,Zf=0,$f=0,_f=0,ag=0,bg=0,cg=0,dg=0,eg=0,fg=0,gg=0,hg=0,ig=0,jg=0,kg=0,lg=0,ng=0,og=0,pg=0,qg=0,rg=0,sg=0,tg=0,ug=0,vg=0,wg=0,xg=0,yg=0,zg=0,Ag=0,Bg=0,Cg=0,Dg=0,Eg=0,Fg=0,Gg=0,Hg=0,Ig=0,Jg=0,Kg=0,Lg=0,Mg=0,Ng=0,Og=0,Pg=0,Qg=0,Rg=0,Sg=0,Tg=0,Ug=0,Vg=0,Wg=0,Xg=0,Yg=0,Zg=0,$g=0,_g=0,ah=0,ch=0,dh=0,eh=0,fh=0,gh=0,hh=0,ih=0,jh=0,kh=0,lh=0,mh=0,nh=0,oh=0,ph=0,qh=0,rh=0,sh=0,th=0,uh=0,vh=0,wh=0,xh=0,yh=0,zh=0,Ah=0,Bh=0,Dh=0,Eh=0,Fh=0,Gh=0,Hh=0,Ih=0,Jh=0,Kh=0,Lh=0,Mh=0,Nh=0,Oh=0,Ph=0,Qh=0,Rh=0,Sh=0,Th=0,Uh=0,Vh=0,Wh=0,Xh=0,Yh=0,Zh=0,_h=0,ai=0,bi=0,ci=0,di=0,ei=0,fi=0,gi=0,hi=0,ii=0,ji=0,ki=0,li=0,mi=0,ni=0,oi=0,pi=0,qi=0,ri=0,si=0,ti=0,ui=0,vi=0,xi=0,yi=0,zi=0,Ai=0,Bi=0,Ci=0,Di=0,Ei=0,Fi=0,Gi=0,Hi=0,Ii=0,Ji=0,Ki=0,Li=0,Mi=0,Ni=0,Oi=0,Pi=0,Qi=0,Ri=0,Si=0,Ti=0,Ui=0,Vi=0,Wi=0,Xi=0,Yi=0,Zi=0,$i=0,_i=0,aj=0,bj=0,cj=0,dj=0,ej=0,fj=0,gj=0,hj=0,ij=0,jj=0,kj=0,lj=0,mj=0,nj=0,oj=0,pj=0,qj=0,rj=0,sj=0,tj=0,uj=0,vj=0,wj=0,xj=0,yj=0,zj=0,Aj=0,Bj=0,Cj=0,Dj=0,Ej=0,Fj=0,Gj=0,Hj=0,Ij=0,Jj=0,Kj=0,Lj=0,Mj=0,Nj=0,Oj=0,Pj=0,Qj=0,Rj=0,Sj=0,Tj=0,Uj=0,Vj=0,Wj=0,Xj=0,Yj=0,Zj=0,$j=0,_j=0,ak=0,bk=0,ck=0,dk=0,ek=0,fk=0,gk=0,hk=0,ik=0,jk=0,kk=0,lk=0,mk=0,nk=0,ok=0,pk=0,qk=0,rk=0,sk=0,tk=0,uk=0,vk=0,wk=0,xk=0,yk=0,zk=0,Ak=0,Bk=0,Ck=0,Dk=0,Ek=0,Fk=0,Gk=0,Hk=0,Ik=0,Jk=0,Kk=0,Lk=0,Mk=0,Nk=0,Ok=0,Pk=0,Qk=0,Rk=0,Sk=0,Tk=0,Uk=0,Vk=0,Wk=0,Xk=0,Yk=0,Zk=0,$k=0,_k=0,al=0,bl=0,cl=0,dl=0,el=0,fl=0,gl=0,hl=0,il=0,jl=0,kl=0,ll=0,ml=0,nl=0,ol=0,pl=0,ql=0,rl=0,sl=0,tl=0,ul=0,vl=0,wl=0,xl=0,yl=0,Al=0,Bl=0,Cl=0,Dl=0,El=0,Fl=0,Gl=0,Hl=0,Il=0,Jl=0,Kl=0,Ll=0,Ml=0,Nl=0,Ol=0,Pl=0,Ql=0,Rl=0,Sl=0,Tl=0,Ul=0,Vl=0,Wl=0,Xl=0,Yl=0,Zl=0,$l=0,_l=0,am=0,bm=0,cm=0,dm=0,em=0,fm=0,gm=0,hm=0,im=0,jm=0,km=0,lm=0,mm=0,nm=0,om=0,pm=0,qm=0,rm=0,sm=0,tm=0,um=0,vm=0,wm=0,xm=0,ym=0,zm=0,Am=0,Bm=0,Cm=0,Dm=0,Em=0,Fm=0,Gm=0,Hm=0,Im=0,Jm=0,Km=0,Lm=0,Mm=0,Nm=0,Om=0,Pm=0,Qm=0,Rm=0,Sm=0,Tm=0,Um=0,Vm=0,Wm=0,Xm=0,Ym=0,Zm=0,$m=0,_m=0,an=0,bn=0,cn=0,dn=0,en=0,fn=0,gn=0,hn=0,jn=0,kn=0,ln=0,mn=0,nn=0,on=0,pn=0,qn=0,rn=0,sn=0,tn=0,un=0,vn=0,wn=0,xn=0,yn=0,zn=0,An=0,Bn=0,Cn=0,Dn=0,En=0,Fn=0,Gn=0,Hn=0,In=0,Jn=0,Kn=0,Ln=0,Mn=0,Nn=0,On=0,Pn=0,Qn=0,Rn=0,Sn=0,Tn=0,Un=0,Vn=0,Wn=0,Xn=0,Yn=0,Zn=0,$n=0,_n=0,ao=0,bo=0,co=0,eo=0,fo=0,go=0,ho=0,io=0,jo=0,ko=0,lo=0,mo=0,no=0,oo=0,po=0,qo=0,ro=0,so=0,to=0,uo=0,vo=0,wo=0,xo=0,yo=0,zo=0,Ao=0,Bo=0,Co=0,Do=0,Eo=0,Fo=0,Go=0,Ho=0,Io=0,Jo=0,Ko=0,Lo=0,Mo=0,No=0,Oo=0,Po=0,Qo=0,Ro=0,So=0,To=0,Uo=0,Vo=0,Wo=0,Xo=0,Yo=0,Zo=0,$o=0,_o=0,ap=0,bp=0,cp=0,dp=0,ep=0,fp=0,gp=0,hp=0,ip=0,jp=0,kp=0,lp=0,mp=0,np=0,op=0,pp=0,qp=0,rp=0,sp=0,tp=0,up=0,vp=0,wp=0,xp=0,yp=0,zp=0,Ap=0,Bp=0,Cp=0,Dp=0,Ep=0,Fp=0,Gp=0,Hp=0,Ip=0,Jp=0,Kp=0,Lp=0,Mp=0,Np=0,Op=0,Pp=0,Qp=0,Rp=0,Sp=0,Tp=0,Up=0,Vp=0,Wp=0,Xp=0,Yp=0,Zp=0,$p=0,_p=0,aq=0,bq=0,cq=0,dq=0,eq=0,fq=0,gq=0,hq=0,iq=0,jq=0,kq=0,lq=0,mq=0,nq=0,oq=0,pq=0,qq=0,rq=0,sq=0,tq=0,uq=0,vq=0,wq=0,xq=0,yq=0,zq=0,Aq=0,Bq=0,Cq=0,Dq=0,Eq=0,Fq=0,Gq=0,Hq=0,Iq=0,Jq=0,Kq=0,Lq=0,Mq=0,Nq=0,Oq=0,Pq=0,Qq=0,Rq=0,Sq=0,Tq=0,Uq=0,Vq=0,Wq=0,Xq=0,Yq=0,Zq=0,$q=0,_q=0,ar=0,br=0,cr=0,dr=0,er=0,fr=0,gr=0,hr=0,ir=0,jr=0,kr=0,mr=0,nr=0,pr=0,rr=0,sr=0,tr=0,ur=0,vr=0,wr=0,xr=0,yr=0,zr=0,Ar=0,Br=0,Cr=0,Dr=0,Er=0,Fr=0,Gr=0,Hr=0,Ir=0,Jr=0,Kr=0,Lr=0,Mr=0,Nr=0,Or=0,Pr=0,Qr=0,Rr=0,Sr=0,Tr=0,Ur=0,Vr=0,Wr=0,Xr=0,Yr=0,Zr=0,$r=0,_r=0,as=0,bs=0,cs=0,ds=0,es=0,fs=0,gs=0,hs=0,is=0,js=0,ks=0,ls=0,ms=0,ns=0,os=0,ps=0,qs=0,rs=0,ss=0,ts=0,us=0,vs=0,ws=0,xs=0,ys=0,zs=0,As=0,Bs=0,Cs=0,Ds=0,Es=0,Fs=0,Gs=0,Hs=0,Is=0,Js=0,Ks=0,Ls=0,Ms=0,Ns=0,Os=0,Ps=0,Qs=0,Rs=0,Ss=0,Ts=0,Us=0,Vs=0,Ws=0,Xs=0,Ys=0,Zs=0,$s=0,_s=0,at=0,bt=0,ct=0,dt=0,et=0,ft=0,gt=0,ht=0,it=0,jt=0,kt=0,lt=0,mt=0,nt=0,ot=0,pt=0,qt=0,rt=0,st=0,tt=0,ut=0,vt=0,wt=0,xt=0,yt=0,zt=0,At=0,Bt=0,Ct=0,Dt=0,Et=0,Ft=0,Gt=0,Ht=0,It=0,Jt=0,Kt=0,Lt=0,Mt=0,Nt=0,Ot=0,Pt=0,Qt=0,Rt=0,St=0,Tt=0,Ut=0,Vt=0,Wt=0,Xt=0,Yt=0,Zt=0,$t=0,_t=0,au=0,bu=0,cu=0,du=0,eu=0,fu=0,gu=0,hu=0,iu=0,ju=0,ku=0,lu=0,mu=0,nu=0,ou=0,pu=0,qu=0,ru=0,su=0,tu=0,uu=0,vu=0,wu=0,xu=0,yu=0,zu=0,Au=0,Bu=0,Cu=0,Du=0,Eu=0,Fu=0,Gu=0,Hu=0,Iu=0,Ju=0,Ku=0,Lu=0,Mu=0,Nu=0,Ou=0,Pu=0,Qu=0,Ru=0,Su=0,Tu=0,Uu=0,Vu=0,Wu=0,Xu=0,Yu=0,Zu=0,$u=0,_u=0,av=0,bv=0,cv=0,dv=0,ev=0,fv=0,gv=0,hv=0,iv=0,jv=0,kv=0,lv=0,mv=0,nv=0,ov=0,pv=0,qv=0,rv=0,sv=0,uv=0;if(uv=o,o=o+1040|0,(0|o)>=(0|p)&&ca(1040),g=uv+1024|0,d=uv+1016|0,c=uv+1008|0,lt=uv+904|0,kt=uv+888|0,jt=uv+880|0,it=uv+872|0,ht=uv+864|0,gt=uv+856|0,ft=uv+848|0,et=uv+840|0,dt=uv+832|0,ct=uv+824|0,bt=uv+816|0,at=uv+808|0,$s=uv+800|0,Zs=uv+792|0,Ys=uv+784|0,Xs=uv+768|0,Ws=uv+760|0,Vs=uv+744|0,Us=uv+728|0,Ts=uv+712|0,Ss=uv+704|0,Rs=uv+696|0,Qs=uv+680|0,Ps=uv+672|0,Ns=uv+656|0,Ms=uv+640|0,Ls=uv+624|0,Ks=uv+608|0,Js=uv+592|0,Is=uv+576|0,Hs=uv+560|0,Gs=uv+544|0,Es=uv+528|0,Ds=uv+512|0,Cs=uv+496|0,Bs=uv+488|0,zs=uv+472|0,ys=uv+456|0,xs=uv+432|0,ws=uv+424|0,vs=uv+416|0,us=uv+408|0,ts=uv+400|0,rs=uv+368|0,qs=uv+344|0,ps=uv+336|0,os=uv+320|0,ns=uv+304|0,ms=uv+288|0,ks=uv+280|0,js=uv+272|0,is=uv+264|0,Et=uv+256|0,Dt=uv+248|0,Bt=uv+232|0,At=uv+216|0,zt=uv+208|0,yt=uv+200|0,xt=uv+184|0,wt=uv+168|0,vt=uv+160|0,tt=uv+152|0,st=uv+144|0,rt=uv+136|0,qt=uv+128|0,pt=uv+120|0,ot=uv+112|0,nt=uv+104|0,mt=uv+96|0,_s=uv+88|0,Os=uv+72|0,Fs=uv+64|0,As=uv+56|0,ss=uv+48|0,ls=uv+40|0,Ct=uv+32|0,ut=uv+24|0,hs=uv,h=uv+968|0,H=uv+960|0,S=uv+952|0,ba=uv+944|0,na=uv+936|0,ya=uv+928|0,Ja=uv+920|0,Ua=uv+912|0,zb=a,Ed=b,Vl=0,db=Ed,!(0!=(0|db)))return void(o=uv);for(Ab=Ed,Lb=Ed,Wb=Lb+2|0,fc=0|e[Wb>>1],qc=65535&fc,Bc=Ed,Mc=0|e[Bc>>1],Zc=65535&Mc,id=Ed,td=id+44|0,Fd=0|f[td>>2],Qd=Ed,_d=Qd+48|0,ke=0|f[_d>>2],ve=Ed,Ge=ve+52|0,Re=0|f[Ge>>2],f[hs>>2]=Ab,Ft=hs+4|0,f[Ft>>2]=qc,pu=hs+8|0,f[pu>>2]=Zc,Xu=hs+12|0,f[Xu>>2]=Fd,bv=hs+16|0,f[bv>>2]=ke,cv=hs+20|0,f[cv>>2]=Re,Cw(66391,hs),Jf=0;;){if(af=Jf,mf=Ed,xf=mf+40|0,Kf=0|f[xf>>2],!((0|af)<(0|Kf)))break;switch(eg=zb,qg=0|Wc(eg),Oh=qg,Bg=Ed,Mg=Jf,Xg=0|or(Bg,Mg),Zn=Xg,hh=Zn,sh=0!=(0|hh),sh&&(Dh=Vl,Ph=Zn,(0|Dh)!=(0|Ph)&&(ji=Zn,f[ut>>2]=ji,Cw(66445,ut),ui=Zn,Vl=ui)),Gi=Ed,Ri=Jf,aj=0|qr(Gi,Ri),bq=aj,lj=bq,wj=(0|lj)<0,wj?Cw(66455,Ct):(Hj=bq,f[ls>>2]=Hj,Cw(66462,ls)),Tj=Jf,f[ss>>2]=Tj,Cw(66467,ss),ck=Ed,nk=ck+8|0,yk=0|f[nk>>2],Jk=Jf,Uk=yk+(Jk<<2)|0,dl=0|f[Uk>>2],Sj=dl,ol=Sj,0|127&ol){case 0:Cw(66473,As);break;case 1:Kl=Sj,Wl=Kl>>>23,fm=511&Wl,qm=Sj,Bm=qm>>>14,Mm=511&Bm,f[Fs>>2]=fm,yu=Fs+4|0,f[yu>>2]=Mm,Cw(66481,Fs),Xm=zb,gn=Ed,sn=Sj,lr(Xm,gn,sn,3);break;case 2:Dn=Ed,On=Dn+12|0,$n=0|f[On>>2],ko=Sj,vo=ko>>>7,Go=65535&vo,Ro=$n+(Go<<3)|0,f[h>>2]=0|f[Ro>>2],f[h+4>>2]=0|f[Ro+4>>2],ap=zb,f[c>>2]=0|f[h>>2],f[c+4>>2]=0|f[h+4>>2],Ef(H,ap,c),lp=Sj,wp=lp>>>23,Hp=511&wp,Sp=Sj,cq=Sp>>>7,nq=65535&cq,yq=0|f[H>>2],Jq=0|f[yq>>2],Uq=Jq>>>11,dr=8&Uq,rr=0!=(0|dr),Cr=0|f[H>>2],Nr=Cr+12|0,rr?v=Nr:(Yr=Nr+8|0,i=0|f[Yr>>2],v=i),f[Os>>2]=Hp,Nu=Os+4|0,f[Nu>>2]=nq,Su=Os+8|0,f[Su>>2]=v,Cw(66498,Os),z=zb,A=Ed,B=Sj,lr(z,A,B,1);break;case 3:C=Sj,D=C>>>23,E=511&D,F=Sj,G=F>>>7,I=65535&G,J=I-32767|0,f[_s>>2]=E,Yu=_s+4|0,f[Yu>>2]=J,Cw(66522,_s),K=zb,L=Ed,M=Sj,lr(K,L,M,1);break;case 4:N=Sj,O=N>>>23,P=511&O,Q=zb,R=Ed,T=R+16|0,U=0|f[T>>2],V=Sj,W=V>>>7,X=65535&W,Y=U+(X<<2)|0,Z=0|f[Y>>2],$=0|wi(Q,Z),f[mt>>2]=P,av=mt+4|0,f[av>>2]=$,Cw(66539,mt),_=zb,aa=Ed,da=Sj,lr(_,aa,da,1);break;case 5:ea=Sj,fa=ea>>>23,ga=511&fa,f[nt>>2]=ga,Cw(66558,nt),ha=zb,ia=Ed,ja=Sj,lr(ha,ia,ja,1);break;case 6:ka=Sj,la=ka>>>23,ma=511&la,f[ot>>2]=ma,Cw(66575,ot),oa=zb,pa=Ed,qa=Sj,lr(oa,pa,qa,1);break;case 7:ra=Sj,sa=ra>>>23,ta=511&sa,f[pt>>2]=ta,Cw(66593,pt),ua=zb,va=Ed,wa=Sj,lr(ua,va,wa,1);break;case 8:xa=Sj,za=xa>>>23,Aa=511&za,f[qt>>2]=Aa,Cw(66608,qt),Ba=zb,Ca=Ed,Da=Sj,lr(Ba,Ca,Da,1);break;case 9:Ea=Sj,Fa=Ea>>>23,Ga=511&Fa,Ha=zb,Ia=Ed,Ka=Ia+16|0,La=0|f[Ka>>2],Ma=Sj,Na=Ma>>>7,Oa=65535&Na,Pa=La+(Oa<<2)|0,Qa=0|f[Pa>>2],Ra=0|wi(Ha,Qa),f[rt>>2]=Ga,dv=rt+4|0,f[dv>>2]=Ra,Cw(66623,rt),Sa=zb,Ta=Ed,Va=Sj,lr(Sa,Ta,Va,1);break;case 10:Wa=zb,Xa=Ed,Ya=Xa+16|0,Za=0|f[Ya>>2],$a=Sj,_a=$a>>>7,ab=65535&_a,bb=Za+(ab<<2)|0,cb=0|f[bb>>2],eb=0|wi(Wa,cb),fb=Sj,gb=fb>>>23,hb=511&gb,f[st>>2]=eb,ev=st+4|0,f[ev>>2]=hb,Cw(66644,st),ib=zb,jb=Ed,kb=Sj,lr(ib,jb,kb,1);break;case 17:lb=Sj,mb=lb>>>23,nb=511&mb,pb=zb,qb=Ed,rb=qb+16|0,sb=0|f[rb>>2],tb=Sj,ub=tb>>>7,vb=65535&ub,wb=sb+(vb<<2)|0,xb=0|f[wb>>2],yb=0|wi(pb,xb),f[tt>>2]=nb,fv=tt+4|0,f[fv>>2]=yb,Cw(66666,tt),Bb=zb,Cb=Ed,Db=Sj,lr(Bb,Cb,Db,1);break;case 18:Eb=zb,Fb=Ed,Gb=Fb+16|0,Hb=0|f[Gb>>2],Ib=Sj,Jb=Ib>>>7,Kb=65535&Jb,Mb=Hb+(Kb<<2)|0,Nb=0|f[Mb>>2],Ob=0|wi(Eb,Nb),Pb=Sj,Qb=Pb>>>23,Rb=511&Qb,f[vt>>2]=Ob,gv=vt+4|0,f[gv>>2]=Rb,Cw(66686,vt),Sb=zb,Tb=Ed,Ub=Sj,lr(Sb,Tb,Ub,1);break;case 19:Vb=Sj,Xb=Vb>>>23,Yb=511&Xb,Zb=Sj,$b=Zb>>>23,_b=511&$b,ac=zb,bc=Ed,cc=bc+16|0,dc=0|f[cc>>2],ec=Sj,gc=ec>>>7,hc=65535&gc,ic=dc+(hc<<2)|0,jc=0|f[ic>>2],kc=0|wi(ac,jc),f[wt>>2]=Yb,hv=wt+4|0,f[hv>>2]=_b,iv=wt+8|0,f[iv>>2]=kc,Cw(66707,wt),lc=zb,mc=Ed,nc=Sj,lr(lc,mc,nc,3);break;case 20:oc=Sj,pc=oc>>>23,rc=511&pc,sc=rc+1|0,tc=zb,uc=Ed,vc=uc+16|0,wc=0|f[vc>>2],xc=Sj,yc=xc>>>7,zc=65535&yc,Ac=wc+(zc<<2)|0,Cc=0|f[Ac>>2],Dc=0|wi(tc,Cc),Ec=Sj,Fc=Ec>>>23,Gc=511&Fc,f[xt>>2]=sc,jv=xt+4|0,f[jv>>2]=Dc,kv=xt+8|0,f[kv>>2]=Gc,Cw(66731,xt),Hc=zb,Ic=Ed,Jc=Sj,lr(Hc,Ic,Jc,1);break;case 13:Kc=Sj,Lc=Kc>>>23,Nc=511&Lc,Oc=zb,Pc=Ed,Qc=Pc+16|0,Rc=0|f[Qc>>2],Sc=Sj,Tc=Sc>>>7,Uc=65535&Tc,Vc=Rc+(Uc<<2)|0,Yc=0|f[Vc>>2],$c=0|wi(Oc,Yc),f[yt>>2]=Nc,lv=yt+4|0,f[lv>>2]=$c,Cw(66755,yt),_c=zb,ad=Ed,bd=Sj,lr(_c,ad,bd,1);break;case 14:cd=zb,dd=Ed,ed=dd+16|0,fd=0|f[ed>>2],gd=Sj,hd=gd>>>7,jd=65535&hd,kd=fd+(jd<<2)|0,ld=0|f[kd>>2],md=0|wi(cd,ld),nd=Sj,od=nd>>>23,pd=511&od,f[zt>>2]=md,mv=zt+4|0,f[mv>>2]=pd,Cw(66771,zt),qd=zb,rd=Ed,sd=Sj,lr(qd,rd,sd,1);break;case 21:ud=Sj,vd=ud>>>23,wd=511&vd,xd=Sj,yd=xd>>>14,zd=511&yd,Ad=Sj,Bd=Ad>>>7,Cd=127&Bd,f[At>>2]=wd,nv=At+4|0,f[nv>>2]=zd,ov=At+8|0,f[ov>>2]=Cd,Cw(66787,At),Dd=zb,Gd=Ed,Hd=Sj,lr(Dd,Gd,Hd,1);break;case 22:Id=Sj,Jd=Id>>>23,Kd=511&Jd,Ld=Sj,Md=Ld>>>14,Nd=511&Md,Od=Sj,Pd=Od>>>7,Rd=127&Pd,f[Bt>>2]=Kd,pv=Bt+4|0,f[pv>>2]=Nd,qv=Bt+8|0,f[qv>>2]=Rd,Cw(66809,Bt),Sd=zb,Td=Ed,Ud=Sj,lr(Sd,Td,Ud,1);break;case 15:Vd=Sj,Wd=Vd>>>23,Xd=511&Wd,Yd=zb,Zd=Ed,$d=Zd+16|0,ae=0|f[$d>>2],be=Sj,ce=be>>>7,de=65535&ce,ee=ae+(de<<2)|0,fe=0|f[ee>>2],ge=0|wi(Yd,fe),f[Dt>>2]=Xd,rv=Dt+4|0,f[rv>>2]=ge,Cw(66831,Dt),he=zb,ie=Ed,je=Sj,lr(he,ie,je,1);break;case 16:le=zb,me=Ed,ne=me+16|0,oe=0|f[ne>>2],pe=Sj,qe=pe>>>7,re=65535&qe,se=oe+(re<<2)|0,te=0|f[se>>2],ue=0|wi(le,te),we=Sj,xe=we>>>23,ye=511&xe,f[Et>>2]=ue,sv=Et+4|0,f[sv>>2]=ye,Cw(66847,Et),ze=zb,Ae=Ed,Be=Sj,lr(ze,Ae,Be,1);break;case 23:Ce=Jf,De=Sj,Ee=De>>>7,Fe=65535&Ee,He=Fe-32767|0,Ie=Ce+He|0,f[is>>2]=Ie,Cw(66863,is);break;case 24:Je=Sj,Ke=Je>>>23,Le=511&Ke,Me=Jf,Ne=Sj,Oe=Ne>>>7,Pe=65535&Oe,Qe=Pe-32767|0,Se=Me+Qe|0,f[js>>2]=Le,Gt=js+4|0,f[Gt>>2]=Se,Cw(66876,js);break;case 25:Te=Sj,Ue=Te>>>23,Ve=511&Ue,We=Jf,Xe=Sj,Ye=Xe>>>7,Ze=65535&Ye,$e=Ze-32767|0,_e=We+$e|0,f[ks>>2]=Ve,Ht=ks+4|0,f[Ht>>2]=_e,Cw(66895,ks);break;case 32:bf=Sj,cf=bf>>>23,df=511&cf,ef=zb,ff=Ed,gf=ff+16|0,hf=0|f[gf>>2],jf=Sj,kf=jf>>>14,lf=511&kf,nf=hf+(lf<<2)|0,of=0|f[nf>>2],pf=0|wi(ef,of),qf=Sj,rf=qf>>>7,sf=127&rf,f[ms>>2]=df,It=ms+4|0,f[It>>2]=pf,Jt=ms+8|0,f[Jt>>2]=sf,Cw(66915,ms);break;case 33:tf=Sj,uf=tf>>>23,vf=511&uf,wf=zb,yf=Ed,zf=yf+16|0,Af=0|f[zf>>2],Bf=Sj,Cf=Bf>>>14,Df=511&Cf,Ff=Af+(Df<<2)|0,Gf=0|f[Ff>>2],Hf=0|wi(wf,Gf),If=Sj,Lf=If>>>7,Mf=127&Lf,f[ns>>2]=vf,Kt=ns+4|0,f[Kt>>2]=Hf,Lt=ns+8|0,f[Lt>>2]=Mf,Cw(66935,ns);break;case 42:Nf=Sj,Of=Nf>>>23,Pf=511&Of,Qf=zb,Rf=Ed,Sf=Rf+16|0,Tf=0|f[Sf>>2],Uf=Sj,Wf=Uf>>>14,Xf=511&Wf,Yf=Tf+(Xf<<2)|0,Zf=0|f[Yf>>2],$f=0|wi(Qf,Zf),_f=Sj,ag=_f>>>7,bg=127&ag,f[os>>2]=Pf,Mt=os+4|0,f[Mt>>2]=$f,Nt=os+8|0,f[Nt>>2]=bg,Cw(66956,os);break;case 36:cg=Sj,dg=cg>>>23,fg=511&dg,gg=Sj,hg=gg>>>7,ig=127&hg,f[ps>>2]=fg,Ot=ps+4|0,f[Ot>>2]=ig,Cw(66980,ps);break;case 37:jg=Sj,kg=jg>>>23,lg=511&kg,ng=Sj,og=ng>>>7,pg=65535&og,rg=pg>>10,sg=63&rg,tg=Sj,ug=tg>>>7,vg=65535&ug,wg=vg>>9,xg=1&wg,yg=Sj,zg=yg>>>7,Ag=65535&zg,Cg=Ag>>4,Dg=31&Cg,Eg=Sj,Fg=Eg>>>7,Gg=65535&Fg,Hg=Gg>>0,Ig=15&Hg,f[qs>>2]=lg,Pt=qs+4|0,f[Pt>>2]=sg,Qt=qs+8|0,f[Qt>>2]=xg,Rt=qs+12|0,f[Rt>>2]=Dg,St=qs+16|0,f[St>>2]=Ig,Cw(66997,qs),Jg=zb,Kg=Ed,Lg=Sj,lr(Jg,Kg,Lg,1);break;case 38:Ng=Sj,Og=Ng>>>7,Pg=33554431&Og,Qg=Pg>>18,Rg=31&Qg,Sg=Sj,Tg=Sg>>>7,Ug=33554431&Tg,Vg=Ug>>13,Wg=31&Vg,Yg=Sj,Zg=Yg>>>7,$g=33554431&Zg,_g=$g>>12,ah=1&_g,ch=Sj,dh=ch>>>7,eh=33554431&dh,fh=eh>>7,gh=31&fh,ih=Sj,jh=ih>>>7,kh=33554431&jh,lh=kh>>2,mh=31&lh,nh=Sj,oh=nh>>>7,ph=33554431&oh,qh=ph>>1,rh=1&qh,th=Sj,uh=th>>>7,vh=33554431&uh,wh=1&vh,f[rs>>2]=Rg,Tt=rs+4|0,f[Tt>>2]=Wg,Ut=rs+8|0,f[Ut>>2]=ah,Vt=rs+12|0,f[Vt>>2]=gh,Wt=rs+16|0,f[Wt>>2]=mh,Xt=rs+20|0,f[Xt>>2]=rh,Yt=rs+24|0,f[Yt>>2]=wh,Cw(67023,rs);break;case 41:switch(xh=Sj,yh=xh>>>23,zh=511&yh,f[ts>>2]=zh,Cw(67054,ts),Ah=Sj,Bh=Ah>>>14,0|511&Bh){case 2:case 0:Cw(67068,us);break;case 1:Cw(67077,vs);break;default:Cw(67085,ws)}Eh=zb,Fh=Ed,Gh=Sj,lr(Eh,Fh,Gh,1);break;case 43:Hh=Sj,Ih=Hh>>>23,Jh=511&Ih,Kh=Sj,Lh=Kh>>>7,Mh=65535&Lh,Nh=Mh>>10,Qh=63&Nh,Rh=Sj,Sh=Rh>>>7,Th=65535&Sh,Uh=Th>>9,Vh=1&Uh,Wh=Sj,Xh=Wh>>>7,Yh=65535&Xh,Zh=Yh>>4,_h=31&Zh,ai=Sj,bi=ai>>>7,ci=65535&bi,di=ci>>0,ei=15&di,f[xs>>2]=Jh,Zt=xs+4|0,f[Zt>>2]=Qh,$t=xs+8|0,f[$t>>2]=Vh,_t=xs+12|0,f[_t>>2]=_h,au=xs+16|0,f[au>>2]=ei,Cw(67094,xs),fi=zb,gi=Ed,hi=Sj,lr(fi,gi,hi,1);break;case 64:ii=Sj,ki=ii>>>23,li=511&ki,mi=Sj,ni=mi>>>9,oi=16383&ni,pi=oi+1|0,qi=Sj,ri=qi>>>7,si=3&ri,f[ys>>2]=li,bu=ys+4|0,f[bu>>2]=pi,cu=ys+8|0,f[cu>>2]=si,Cw(67121,ys),ti=zb,vi=Ed,xi=Sj,lr(ti,vi,xi,1);break;case 65:yi=Sj,zi=yi>>>23,Ai=511&zi,Bi=Sj,Ci=Bi>>>14,Di=511&Ci,Ei=Sj,Fi=Ei>>>7,Hi=127&Fi,f[zs>>2]=Ai,du=zs+4|0,f[du>>2]=Di,eu=zs+8|0,f[eu>>2]=Hi,Cw(67145,zs),Ii=zb,Ji=Ed,Ki=Sj,lr(Ii,Ji,Ki,3);break;case 70:Li=Sj,Mi=Li>>>23,Ni=511&Mi,Oi=zb,Pi=Ed,Qi=Pi+16|0,Si=0|f[Qi>>2],Ti=Sj,Ui=Ti>>>14,Vi=511&Ui,Wi=Si+(Vi<<2)|0,Xi=0|f[Wi>>2],Yi=0|wi(Oi,Xi),f[Bs>>2]=Ni,fu=Bs+4|0,f[fu>>2]=Yi,Cw(67165,Bs),Zi=zb,$i=Ed,_i=Sj,lr(Zi,$i,_i,1);break;case 44:bj=Sj,cj=bj>>>23,dj=511&cj,ej=zb,fj=Ed,gj=fj+16|0,hj=0|f[gj>>2],ij=Sj,jj=ij>>>14,kj=511&jj,mj=hj+(kj<<2)|0,nj=0|f[mj>>2],oj=0|wi(ej,nj),pj=Sj,qj=pj>>>7,rj=127&qj,f[Cs>>2]=dj,gu=Cs+4|0,f[gu>>2]=oj,hu=Cs+8|0,f[hu>>2]=rj,Cw(67183,Cs);break;case 45:sj=Sj,tj=sj>>>23,uj=511&tj,vj=zb,xj=Ed,yj=xj+16|0,zj=0|f[yj>>2],Aj=Sj,Bj=Aj>>>14,Cj=511&Bj,Dj=zj+(Cj<<2)|0,Ej=0|f[Dj>>2],Fj=0|wi(vj,Ej),Gj=Sj,Ij=Gj>>>7,Jj=127&Ij,f[Ds>>2]=uj,iu=Ds+4|0,f[iu>>2]=Fj,ju=Ds+8|0,f[ju>>2]=Jj,Cw(67202,Ds);break;case 46:Kj=Sj,Lj=Kj>>>23,Mj=511&Lj,Nj=zb,Oj=Ed,Pj=Oj+16|0,Qj=0|f[Pj>>2],Rj=Sj,Uj=Rj>>>14,Vj=511&Uj,Wj=Qj+(Vj<<2)|0,Xj=0|f[Wj>>2],Yj=0|wi(Nj,Xj),Zj=Sj,$j=Zj>>>7,_j=127&$j,f[Es>>2]=Mj,ku=Es+4|0,f[ku>>2]=Yj,lu=Es+8|0,f[lu>>2]=_j,Cw(67222,Es);break;case 47:ak=Sj,bk=ak>>>23,dk=511&bk,ek=zb,fk=Ed,gk=fk+16|0,hk=0|f[gk>>2],ik=Sj,jk=ik>>>14,kk=511&jk,lk=hk+(kk<<2)|0,mk=0|f[lk>>2],ok=0|wi(ek,mk),pk=Sj,qk=pk>>>7,rk=127&qk,f[Gs>>2]=dk,mu=Gs+4|0,f[mu>>2]=ok,nu=Gs+8|0,f[nu>>2]=rk,Cw(67241,Gs);break;case 48:sk=Sj,tk=sk>>>23,uk=511&tk,vk=zb,wk=Ed,xk=wk+16|0,zk=0|f[xk>>2],Ak=Sj,Bk=Ak>>>14,Ck=511&Bk,Dk=zk+(Ck<<2)|0,Ek=0|f[Dk>>2],Fk=0|wi(vk,Ek),Gk=Sj,Hk=Gk>>>7,Ik=127&Hk,f[Hs>>2]=uk,ou=Hs+4|0,f[ou>>2]=Fk,qu=Hs+8|0,f[qu>>2]=Ik,Cw(67261,Hs);break;case 49:Kk=Sj,Lk=Kk>>>23,Mk=511&Lk,Nk=zb,Ok=Ed,Pk=Ok+16|0,Qk=0|f[Pk>>2],Rk=Sj,Sk=Rk>>>14,Tk=511&Sk,Vk=Qk+(Tk<<2)|0,Wk=0|f[Vk>>2],Xk=0|wi(Nk,Wk),Yk=Sj,Zk=Yk>>>7,$k=127&Zk,f[Is>>2]=Mk,ru=Is+4|0,f[ru>>2]=Xk,su=Is+8|0,f[su>>2]=$k,Cw(67280,Is);break;case 51:_k=Sj,al=_k>>>23,bl=511&al,cl=zb,el=Ed,fl=el+16|0,gl=0|f[fl>>2],hl=Sj,il=hl>>>14,jl=511&il,kl=gl+(jl<<2)|0,ll=0|f[kl>>2],ml=0|wi(cl,ll),nl=Sj,pl=nl>>>7,ql=127&pl,f[Js>>2]=bl,tu=Js+4|0,f[tu>>2]=ml,uu=Js+8|0,f[uu>>2]=ql,Cw(67299,Js);break;case 52:rl=Sj,sl=rl>>>23,tl=511&sl,ul=zb,vl=Ed,wl=vl+16|0,xl=0|f[wl>>2],yl=Sj,Al=yl>>>14,Bl=511&Al,Cl=xl+(Bl<<2)|0,Dl=0|f[Cl>>2],El=0|wi(ul,Dl),Fl=Sj,Gl=Fl>>>7,Hl=127&Gl,f[Ks>>2]=tl,vu=Ks+4|0,f[vu>>2]=El,wu=Ks+8|0,f[wu>>2]=Hl,Cw(67317,Ks);break;case 53:Il=Sj,Jl=Il>>>23,Ll=511&Jl,Ml=zb,Nl=Ed,Ol=Nl+16|0,Pl=0|f[Ol>>2],Ql=Sj,Rl=Ql>>>14,Sl=511&Rl,Tl=Pl+(Sl<<2)|0,Ul=0|f[Tl>>2],Xl=0|wi(Ml,Ul),Yl=Sj,Zl=Yl>>>7,$l=127&Zl,f[Ls>>2]=Ll,xu=Ls+4|0,f[xu>>2]=Xl,zu=Ls+8|0,f[zu>>2]=$l,Cw(67335,Ls);break;case 54:_l=Sj,am=_l>>>23,bm=511&am,cm=zb,dm=Ed,em=dm+16|0,gm=0|f[em>>2],hm=Sj,im=hm>>>14,jm=511&im,km=gm+(jm<<2)|0,lm=0|f[km>>2],mm=0|wi(cm,lm),nm=Sj,om=nm>>>7,pm=127&om,f[Ms>>2]=bm,Au=Ms+4|0,f[Au>>2]=mm,Bu=Ms+8|0,f[Bu>>2]=pm,Cw(67353,Ms);break;case 50:rm=Sj,sm=rm>>>23,tm=511&sm,um=zb,vm=Ed,wm=vm+16|0,xm=0|f[wm>>2],ym=Sj,zm=ym>>>14,Am=511&zm,Cm=xm+(Am<<2)|0,Dm=0|f[Cm>>2],Em=0|wi(um,Dm),Fm=Sj,Gm=Fm>>>7,Hm=127&Gm,f[Ns>>2]=tm,Cu=Ns+4|0,f[Cu>>2]=Em,Du=Ns+8|0,f[Du>>2]=Hm,Cw(67371,Ns);break;case 74:Cw(67389,Ps);break;case 55:Im=Sj,Jm=Im>>>23,Km=511&Jm,Lm=Sj,Nm=Lm>>>14,Om=511&Nm,Pm=Sj,Qm=Pm>>>7,Rm=127&Qm,f[Qs>>2]=Km,Eu=Qs+4|0,f[Eu>>2]=Om,Fu=Qs+8|0,f[Fu>>2]=Rm,Cw(67398,Qs),Sm=zb,Tm=Ed,Um=Sj,lr(Sm,Tm,Um,3);break;case 56:Vm=Sj,Wm=Vm>>>23,Ym=511&Wm,Zm=Sj,$m=Zm>>>14,_m=511&$m,f[Rs>>2]=Ym,Gu=Rs+4|0,f[Gu>>2]=_m,Cw(67418,Rs),an=zb,bn=Ed,cn=Sj,lr(an,bn,cn,3);break;case 57:dn=Sj,en=dn>>>23,fn=511&en,hn=Sj,jn=hn>>>14,kn=511&jn,f[Ss>>2]=fn,Hu=Ss+4|0,f[Hu>>2]=kn,Cw(67437,Ss),ln=zb,mn=Ed,nn=Sj,lr(ln,mn,nn,3);break;case 58:on=Sj,pn=on>>>23,qn=511&pn,rn=Sj,tn=rn>>>14,un=511&tn,vn=Sj,wn=vn>>>7,xn=127&wn,f[Ts>>2]=qn,Iu=Ts+4|0,f[Iu>>2]=un,Ju=Ts+8|0,f[Ju>>2]=xn,Cw(67457,Ts),yn=zb,zn=Ed,An=Sj,lr(yn,zn,An,3);break;case 60:Bn=Sj,Cn=Bn>>>23,En=511&Cn,Fn=Sj,Gn=Fn>>>14,Hn=511&Gn,In=Sj,Jn=In>>>7,Kn=127&Jn,f[Us>>2]=En,Ku=Us+4|0,f[Ku>>2]=Hn,Lu=Us+8|0,f[Lu>>2]=Kn,Cw(67476,Us),Ln=zb,Mn=Ed,Nn=Sj,lr(Ln,Mn,Nn,1);break;case 61:Pn=Ed,Qn=Pn+12|0,Rn=0|f[Qn>>2],Sn=Sj,Tn=Sn>>>7,Un=65535&Tn,Vn=Rn+(Un<<3)|0,f[S>>2]=0|f[Vn>>2],f[S+4>>2]=0|f[Vn+4>>2],Wn=zb,Xn=zb,Yn=0|f[S>>2],_n=0|f[Yn>>2],ao=_n>>>11,bo=8&ao,co=0!=(0|bo),eo=0|f[S>>2],fo=eo+12|0,co?wo=fo:(go=fo+8|0,ho=0|f[go>>2],wo=ho),io=0|f[S>>2],jo=0|f[io>>2],lo=jo>>>11,mo=8&lo,no=0!=(0|mo),oo=0|f[S>>2],no?(po=0|f[oo>>2],qo=po>>>11,ro=496&qo,so=ro>>4,xo=so):(to=oo+12|0,uo=0|f[to>>2],xo=uo),mg(na,Xn,wo,xo),f[d>>2]=0|f[na>>2],f[d+4>>2]=0|f[na+4>>2],bh(ba,Wn,d),yo=Sj,zo=yo>>>23,Ao=511&zo,Bo=Sj,Co=Bo>>>7,Do=65535&Co,Eo=0|f[ba>>2],Fo=0|f[Eo>>2],Ho=Fo>>>11,Io=8&Ho,Jo=0!=(0|Io),Ko=0|f[ba>>2],Lo=Ko+12|0,Jo?Oo=Lo:(Mo=Lo+8|0,No=0|f[Mo>>2],Oo=No),f[Vs>>2]=Ao,Mu=Vs+4|0,f[Mu>>2]=Do,Ou=Vs+8|0,f[Ou>>2]=Oo,Cw(67495,Vs),Po=zb,Qo=Ed,So=Sj,lr(Po,Qo,So,1);break;case 62:To=Sj,Uo=To>>>23,Vo=511&Uo,Wo=Sj,Xo=Wo>>>14,Yo=511&Xo,f[Ws>>2]=Vo,Pu=Ws+4|0,f[Pu>>2]=Yo,Cw(67520,Ws),Zo=zb,$o=Ed,_o=Sj,lr(Zo,$o,_o,3);break;case 63:bp=Sj,cp=bp>>>23,dp=511&cp,ep=Sj,fp=ep>>>14,gp=511&fp,hp=Sj,ip=hp>>>7,jp=127&ip,f[Xs>>2]=dp,Qu=Xs+4|0,f[Qu>>2]=gp,Ru=Xs+8|0,f[Ru>>2]=jp,Cw(67539,Xs),kp=zb,mp=Ed,np=Sj,lr(kp,mp,np,3);break;case 66:op=Sj,pp=op>>>23,qp=511&pp,f[Ys>>2]=qp,Cw(67558,Ys),rp=zb,sp=Ed,tp=Sj,lr(rp,sp,tp,1);break;case 67:up=Sj,vp=up>>>23,xp=511&vp,yp=zb,zp=Ed,Ap=zp+16|0,Bp=0|f[Ap>>2],Cp=Sj,Dp=Cp>>>14,Ep=511&Dp,Fp=Bp+(Ep<<2)|0,Gp=0|f[Fp>>2],Ip=0|wi(yp,Gp),f[Zs>>2]=xp,Tu=Zs+4|0,f[Tu>>2]=Ip,Cw(67574,Zs),Jp=zb,Kp=Ed,Lp=Sj,lr(Jp,Kp,Lp,1);break;case 68:Mp=Sj,Np=Mp>>>23,Op=511&Np,Pp=zb,Qp=Ed,Rp=Qp+16|0,Tp=0|f[Rp>>2],Up=Sj,Vp=Up>>>14,Wp=511&Vp,Xp=Tp+(Wp<<2)|0,Yp=0|f[Xp>>2],Zp=0|wi(Pp,Yp),f[$s>>2]=Op,Uu=$s+4|0,f[Uu>>2]=Zp,Cw(67591,$s),$p=zb,_p=Ed,aq=Sj,lr($p,_p,aq,1);break;case 69:dq=Sj,eq=dq>>>23,fq=511&eq,gq=Sj,hq=gq>>>7,iq=65535&hq,jq=iq+1|0,f[at>>2]=fq,Vu=at+4|0,f[Vu>>2]=jq,Cw(67609,at),kq=zb,lq=Ed,mq=Sj,lr(kq,lq,mq,1);break;case 71:oq=Sj,pq=oq>>>23,qq=511&pq,rq=Sj,sq=rq>>>14,tq=511&sq,f[bt>>2]=qq,Wu=bt+4|0,f[Wu>>2]=tq,Cw(67628,bt),uq=zb,vq=Ed,wq=Sj,lr(uq,vq,wq,3);break;case 72:xq=Sj,zq=xq>>>23,Aq=511&zq,f[ct>>2]=Aq,Cw(67647,ct),Bq=zb,Cq=Ed,Dq=Sj,lr(Bq,Cq,Dq,1);break;case 75:Eq=Ed,Fq=Eq+12|0,Gq=0|f[Fq>>2],Hq=Sj,Iq=Hq>>>7,Kq=65535&Iq,Lq=Gq+(Kq<<3)|0,f[ya>>2]=0|f[Lq>>2],f[ya+4>>2]=0|f[Lq+4>>2],Mq=zb,Nq=zb,Oq=0|f[ya>>2],Pq=0|f[Oq>>2],Qq=Pq>>>11,Rq=8&Qq,Sq=0!=(0|Rq),Tq=0|f[ya>>2],Vq=Tq+12|0,Sq?jr=Vq:(Wq=Vq+8|0,Xq=0|f[Wq>>2],jr=Xq),Yq=0|f[ya>>2],Zq=0|f[Yq>>2],$q=Zq>>>11,_q=8&$q,ar=0!=(0|_q),br=0|f[ya>>2],ar?(cr=0|f[br>>2],er=cr>>>11,fr=496&er,gr=fr>>4,kr=gr):(hr=br+12|0,ir=0|f[hr>>2],kr=ir),mg(Ua,Nq,jr,kr),f[g>>2]=0|f[Ua>>2],f[g+4>>2]=0|f[Ua+4>>2],bh(Ja,Mq,g),mr=0|f[Ja>>2],nr=0|f[mr>>2],pr=nr>>>11,sr=8&pr,tr=0!=(0|sr),ur=0|f[Ja>>2],vr=ur+12|0,tr?yr=vr:(wr=vr+8|0,xr=0|f[wr>>2],yr=xr),f[dt>>2]=yr,Cw(67663,dt);break;case 30:zr=Sj,Ar=zr>>>7,Br=65535&Ar,Dr=Br+1|0,f[et>>2]=Dr,Cw(67674,et);break;case 26:Er=Jf,Fr=Sj,Gr=Fr>>>7,Hr=65535&Gr,Ir=Hr-32767|0,Jr=Er+Ir|0,f[ft>>2]=Jr,Cw(67692,ft);break;case 27:Kr=Sj,Lr=Kr>>>23,Mr=511&Lr,f[gt>>2]=Mr,Cw(67707,gt),Or=zb,Pr=Ed,Qr=Sj,lr(Or,Pr,Qr,1);break;case 29:Rr=Sj,Sr=Rr>>>23,Tr=511&Sr,f[ht>>2]=Tr,Cw(67723,ht),Ur=zb,Vr=Ed,Wr=Sj,lr(Ur,Vr,Wr,1);break;case 28:Xr=Sj,Zr=Xr>>>23,$r=511&Zr,f[it>>2]=$r,Cw(67738,it),_r=zb,as=Ed,bs=Sj,lr(_r,as,bs,1);break;case 31:cs=Sj,ds=cs>>>23,es=511&ds,f[jt>>2]=es,Cw(67753,jt);break;default:fs=Sj,gs=127&fs,j=Sj,k=j>>>23,l=511&k,m=Sj,n=m>>>14,q=511&n,r=Sj,s=r>>>7,t=127&s,f[kt>>2]=gs,Zu=kt+4|0,f[Zu>>2]=l,$u=kt+8|0,f[$u>>2]=q,_u=kt+12|0,f[_u>>2]=t,Cw(67765,kt)}u=zb,w=Oh,Xc(u,w),x=Jf,y=x+1|0,Jf=y}Cw(67789,lt),o=uv}function lr(a,b,c,d){a|=0,b|=0,c|=0,d|=0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0;ga=o,o=o+48|0,(0|o)>=(0|p)&&ca(48),ea=ga+16|0,da=ga+8|0,ba=ga,M=a,X=b,Z=c,$=d,_=0,aa=X,g=aa+24|0,h=0|f[g>>2],i=0!=(0|h);do{if(i){if(j=$,k=1&j,l=0!=(0|k),l?(m=Z,n=m>>>23,q=511&n,r=X,s=0|e[r>>1],t=65535&s,(0|q)>=(0|t)&&(fa=4)):fa=4,4==(0|fa)){if(v=$,w=2&v,!(0!=(0|w)))break;if(y=Z,z=y>>>14,A=511&z,B=X,C=0|e[B>>1],D=65535&C,(0|A)>=(0|D))break}return Cw(67791,da),F=$,G=1&F,H=0!=(0|G),H&&(I=M,J=X,K=Z,L=K>>>23,N=511&L,O=0|mr(I,J,N,0),_=O),P=$,Q=2&P,R=0!=(0|Q),R&&(S=M,T=X,U=Z,V=U>>>14,W=511&V,Y=_,mr(S,T,W,Y)),Cw(67789,ea),void(o=ga)}}while(0);Cw(67789,ba),o=ga}function mr(a,b,c,d){a|=0,b|=0,c|=0,d|=0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0;if($=o,o=o+48|0,(0|o)>=(0|p)&&ca(48),X=$+8|0,W=$,R=a,S=b,T=c,U=d,h=T,0==(0|h))return M=0,Q=M,o=$,0|Q;for(V=0;;){if(j=V,k=j+1|0,l=S,m=0|e[l>>1],n=65535&m,!(k>>>0<n>>>0)){Z=10;break}if(r=S,s=r+24|0,t=0|f[s>>2],u=V,v=t+(u<<3)|0,w=v+4|0,x=0|e[w>>1],y=65535&x,z=T,(0|y)==(0|z))break;O=V,P=O+1|0,V=P}return 10==(0|Z)?(M=0,Q=M,o=$,0|Q):(B=S,C=B+24|0,D=0|f[C>>2],E=V,F=D+(E<<3)|0,G=0|f[F>>2],g=G,H=U,I=0!=(0|H),I&&Cw(67795,W),J=T,K=R,L=g,N=0|wi(K,L),f[X>>2]=J,Y=X+4|0,f[Y>>2]=N,Cw(67797,X),M=1,Q=M,o=$,0|Q)}function nr(a,b,c){a|=0,b|=0,c|=0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,P=0;for(P=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),A=a,I=b,J=c,N=J,e=65535&N,f=e<<8,M=f,K=0;;){if(g=K,h=I,!(g>>>0<h>>>0))break;for(j=A,k=j+1|0,A=k,l=0|d[j>>0],m=255&l,n=M,q=n|m,M=q,L=0;;){if(r=L,!(r>>>0<8))break;t=M,u=t<<1,M=u,v=M,w=16777216&v,x=0!=(0|w),x&&(y=M,z=17834240^y,M=z),B=L,C=B+1|0,L=C}D=K,E=D+1|0,K=E}return F=M,G=F>>>8,H=65535&G,o=P,0|H}function or(a,b){a|=0,b|=0;var c=0,d=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,E=0,F=0,H=0;if(H=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),z=a,A=b,C=z,0!=(0|C)&&(E=A,F=z,c=F+40|0,d=0|f[c>>2],E>>>0<d>>>0)){if(B=0,g=z,h=g+36|0,i=0|f[h>>2],j=0!=(0|i),k=z,!j)return l=k+28|0,m=0|f[l>>2],n=m,y=n,o=H,0|y;if(q=k+36|0,r=0|f[q>>2],s=A,t=0|pr(r,s),B=t,0!=(0|t))return v=B,w=v+4|0,x=0|f[w>>2],n=x,y=n,o=H,0|y}return n=0,y=n,o=H,0|y}function pr(a,b){a|=0,b|=0;var c=0,d=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,X=0;if(X=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),B=a,M=b,V=M,c=B,d=0|f[c>>2],V>>>0>=d>>>0)return q=0,Q=q,o=X,0|Q;for(h=B,i=h+8|0,j=0|f[i>>2],R=j,k=B,l=k+4|0,m=0|e[l>>1],n=65535&m,S=n;;){if(r=S,!((0|r)>0))break;t=S,u=(0|t)/2&-1,T=u,v=R,w=T,x=v+(w<<2)|0,U=x,y=M,z=U,A=0|f[z>>2],C=0|f[A>>2],D=y>>>0<C>>>0,D?(K=T,S=K):(E=U,F=E+4|0,R=F,G=T,H=G+1|0,I=S,J=I-H|0,S=J)}return L=R,N=L+-4|0,R=N,O=R,P=0|f[O>>2],q=P,Q=q,o=X,0|Q}function qr(a,b){a|=0,b|=0;var c=0,d=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,K=0,L=0,M=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ia=0;Ia=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),B=a,M=b,c=B,d=0!=(0|c);a:if(d&&(g=M,h=B,i=h+40|0,j=0|f[i>>2],g>>>0<j>>>0)){if(X=0,l=B,m=l+36|0,n=0|f[m>>2],r=0!=(0|n),s=B,!r)return t=s+32|0,u=0|f[t>>2],v=0!=(0|u),v?(w=B,x=w+32|0,y=0|f[x>>2],z=M,A=y+(z<<1)|0,C=0|e[A>>1],D=65535&C,E=D):E=-1,q=E,Fa=q,o=Ia,0|Fa;if(F=s+36|0,G=0|f[F>>2],H=M,I=0|pr(G,H),X=I,0!=(0|I)){switch(K=X,L=K+16|0,0|(0|f[L>>2])){case 0:return O=X,P=O+20|0,Q=0|f[P>>2],R=M,S=X,T=0|f[S>>2],U=R-T|0,V=Q+(U<<1)|0,W=0|e[V>>1],Y=65535&W,q=Y,Fa=q,o=Ia,0|Fa;case 1:break;default:break a}for(Z=X,$=Z+20|0,_=0|f[$>>2],ha=_,aa=X,ba=aa+12|0,da=0|f[ba>>2],sa=da;;){if(ea=sa,!(ea>>>0>0))break;ga=sa,ia=(ga>>>0)/2&-1,Da=ia,ja=ha,ka=Da,la=ja+(ka<<3)|0,Ga=la,ma=M,na=Ga,oa=0|f[na>>2],pa=ma>>>0<oa>>>0,pa?(xa=Da,sa=xa):(qa=Ga,ra=qa+8|0,ha=ra,ta=Da,ua=ta+1|0,va=sa,wa=va-ua|0,sa=wa)}return ya=ha,za=ya+-8|0,ha=za,Aa=ha,Ba=Aa+4|0,Ca=0|e[Ba>>1],Ea=65535&Ca,q=Ea,Fa=q,o=Ia,0|Fa}}return q=-1,Fa=q,o=Ia,0|Fa}function rr(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,q=0;return q=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),e=a,g=b,i=e,j=0|Jc(i,12),h=j,k=h,f[k>>2]=0|f[18717],f[k+4>>2]=0|f[18718],f[k+8>>2]=0|f[18719],l=h,m=g,c=m+36|0,f[c>>2]=l,d=h,o=q,0|d}function sr(a,b,c,d){a|=0,b|=0,c|=0,d|=0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,$a=0,_a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,$b=0,_b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,yc=0,zc=0,Ac=0,Bc=0,Cc=0,Dc=0,Ec=0,Fc=0,Gc=0,Ic=0,Kc=0,Lc=0,Mc=0,Nc=0,Oc=0,Pc=0,Qc=0,Rc=0,Sc=0,Tc=0,Uc=0,Vc=0,Wc=0,Xc=0,Yc=0,Zc=0,$c=0,_c=0,ad=0,bd=0,cd=0,dd=0,ed=0,gd=0;if(gd=o,o=o+64|0,(0|o)>=(0|p)&&ca(64),P=gd+12|0,va=gd,cc=a,nc=b,yc=c,Lc=d,Ga=nc,Ra=Ga+36|0,ab=0|f[Ra>>2],!(0!=(0|ab)))return Tb=0,Ab=Tb,o=gd,0|Ab;if(wb=nc,Bb=wb+36|0,Cb=0|f[Bb>>2],Wc=Cb,Db=Wc,Eb=Db+4|0,Fb=0|e[Eb>>1],Gb=65535&Fb,(0|Gb)>0&&(Ib=nc,Jb=Ib+28|0,Kb=0|f[Jb>>2],Lb=Wc,Mb=Lb+8|0,Nb=0|f[Mb>>2],Ob=Wc,Pb=Ob+4|0,Qb=0|e[Pb>>1],Rb=65535&Qb,Sb=Rb-1|0,Ub=Nb+(Sb<<2)|0,Vb=0|f[Ub>>2],Wb=Vb+4|0,Xb=0|f[Wb>>2],Yb=0|gv(Kb,Xb),0==(0|Yb)))return Tb=0,Ab=Tb,o=gd,0|Ab;$b=cc,_b=0|Jc($b,24),g=_b,ac=Wc,bc=ac+8|0,dc=0|f[bc>>2],ec=0!=(0|dc),fc=cc,ec?(gc=Wc,hc=gc+8|0,ic=0|f[hc>>2],jc=Wc,kc=jc+4|0,lc=0|e[kc>>1],mc=65535&lc,oc=mc+1|0,pc=oc<<2,qc=0|Hc(fc,ic,pc),uc=qc):(rc=0|Jc(fc,4),uc=rc),sc=Wc,tc=sc+8|0,f[tc>>2]=uc,vc=g,wc=Wc,xc=wc+8|0,zc=0|f[xc>>2],Ac=Wc,Bc=Ac+4|0,Cc=0|e[Bc>>1],Dc=Cc+1<<16>>16,e[Bc>>1]=Dc,Ec=65535&Cc,Fc=zc+(Ec<<2)|0,f[Fc>>2]=vc,Gc=Lc,Ic=yc,Kc=Gc-Ic|0,t=Kc,Mc=yc,Nc=g,f[Nc>>2]=Mc,Oc=Lc,Pc=Wc,f[Pc>>2]=Oc,Qc=nc,Rc=Qc+28|0,Sc=0|f[Rc>>2],Tc=0|$v(Sc),E=Tc,Uc=cc,Vc=nc,Xc=Vc+28|0,Yc=0|f[Xc>>2],Zc=E,$c=0|gi(Uc,Yc,Zc),_c=g,ad=_c+8|0,f[ad>>2]=$c,f[P>>2]=0,bd=cc,cd=g,dd=cd+8|0,ed=0|f[dd>>2],h=0|ri(bd,ed,P),i=g,j=i+4|0,f[j>>2]=h,k=nc,l=k+32|0,m=0|f[l>>2],n=yc,q=m+(n<<1)|0,r=Lc,s=yc,u=r-s|0,v=0|tr(q,u),w=g,x=w+16|0,f[x>>2]=v,y=g,z=y+20|0,f[z>>2]=0,A=g,B=A+16|0,C=0|f[B>>2];a:switch(0|C){case 0:for(D=t,F=g,G=F+12|0,f[G>>2]=D,H=cc,I=t,J=I<<1,K=0|Jc(H,J),L=g,M=L+20|0,f[M>>2]=K,$=0;;){if(N=$,O=t,!(N>>>0<O>>>0))break a;R=nc,S=R+32|0,T=0|f[S>>2],U=yc,V=$,W=U+V|0,X=T+(W<<1)|0,Y=0|e[X>>1],Z=g,_=Z+20|0,aa=0|f[_>>2],ba=$,da=aa+(ba<<1)|0,e[da>>1]=Y,ea=$,fa=ea+1|0,$=fa}break;case 1:for(ka=0,ga=cc,ha=0|Jc(ga,8),ia=g,ja=ia+20|0,f[ja>>2]=ha,la=g,ma=la+12|0,f[ma>>2]=0,$=0;;){if(na=$,oa=t,!(na>>>0<oa>>>0))break a;qa=nc,ra=qa+32|0,sa=0|f[ra>>2],ta=yc,ua=$,wa=ta+ua|0,xa=sa+(wa<<1)|0,ya=0|e[xa>>1],za=65535&ya,Aa=ka,Ba=65535&Aa,Ca=(0|za)==(0|Ba),Ca||(Da=cc,Ea=g,Fa=Ea+20|0,Ha=0|f[Fa>>2],Ia=g,Ja=Ia+12|0,Ka=0|f[Ja>>2],La=Ka+1|0,Ma=La<<3,Na=0|Hc(Da,Ha,Ma),Oa=g,Pa=Oa+20|0,f[Pa>>2]=Na,Qa=yc,Sa=$,Ta=Qa+Sa|0,f[va>>2]=Ta,Ua=nc,Va=Ua+32|0,Wa=0|f[Va>>2],Xa=yc,Ya=$,Za=Xa+Ya|0,$a=Wa+(Za<<1)|0,_a=0|e[$a>>1],bb=va+4|0,e[bb>>1]=_a,cb=g,db=cb+20|0,eb=0|f[db>>2],fb=g,gb=fb+12|0,hb=0|f[gb>>2],ib=eb+(hb<<3)|0,f[ib>>2]=0|f[va>>2],f[ib+4>>2]=0|f[va+4>>2],jb=g,kb=jb+12|0,mb=0|f[kb>>2],nb=mb+1|0,f[kb>>2]=nb,ob=nc,pb=ob+32|0,qb=0|f[pb>>2],rb=yc,sb=$,tb=rb+sb|0,ub=qb+(tb<<1)|0,vb=0|e[ub>>1],ka=vb),xb=$,yb=xb+1|0,$=yb}}return zb=g,Tb=zb,Ab=Tb,o=gd,0|Ab}function tr(a,b){a|=0,b|=0;var c=0,d=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,F=0;for(F=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),n=a,x=b,y=0,z=-1,A=0;;){if(B=A,C=x,!(B>>>0<C>>>0))break;c=n,d=A,f=c+(d<<1)|0,g=0|e[f>>1],h=65535&g,i=z,j=(0|h)!=(0|i),j&&(k=y,l=k+1|0,y=l),m=A,q=m+1|0,A=q}return r=x,s=r<<1,t=y,u=t<<3,v=s>>>0<=u>>>0,w=v?0:1,o=F,0|w}function ur(a,b){a|=0,b|=0;var c=0,d=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,I=0,J=0,K=0,M=0;if(M=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),q=a,B=b,G=B,!(0!=(0|G)))return void(o=M);for(F=0;;){if(I=F,J=B,K=J+4|0,c=0|e[K>>1],d=65535&c,g=I>>>0<d>>>0,h=q,i=B,j=i+8|0,k=0|f[j>>2],!g)break;l=F,m=k+(l<<2)|0,n=0|f[m>>2],r=n+20|0,s=0|f[r>>2],xc(h,s),t=q,u=B,v=u+8|0,w=0|f[v>>2],x=F,y=w+(x<<2)|0,z=0|f[y>>2],xc(t,z),A=F,C=A+1|0,F=C}xc(h,k),D=q,E=B,xc(D,E),o=M}function vr(a,b,c,d,e){a|=0,b|=0,c|=0,d|=0,e|=0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,s=0;s=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),q=s,k=b,l=c,m=d,n=e,f=k,g=m,h=n,mg(q,f,g,h),i=k,j=l,aq(a,i,j,1,q),o=s}function wr(a,b,c,d){a|=0,b|=0,c|=0,d|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,n=0;n=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),e=n+16|0,i=n,g=b,h=c,j=g,f[e>>2]=0|f[d>>2],f[e+4>>2]=0|f[d+4>>2],yg(i,j,e),f[d>>2]=0|f[i>>2],f[d+4>>2]=0|f[i+4>>2],k=g,l=h,aq(a,k,l,1,d),o=n}function xr(a,b){a|=0,b|=0;var c=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;C=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),c=C+8|0,r=a,u=0|f[b>>2],v=r,w=v+20|0,f[w>>2]=u,x=r,y=x+92|0,z=y+452|0,A=0|d[z>>0],e=(255&A)>>>3,g=1&e,h=g<<24>>24!=0,h||(i=r,j=r,k=j+20|0,l=0|f[k>>2],yr(i,l)),m=r,n=0|f[m>>2],q=0!=(0|n),s=r,q?(t=0|f[s>>2],Aa(0|t,1)):(f[c>>2]=0|f[b>>2],f[c+4>>2]=0|f[b+4>>2],Rf(s,c),Ha())}function yr(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,la=0,ma=0,na=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,$a=0,_a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,kb=0,lb=0;for(lb=o,o=o+80|0,(0|o)>=(0|p)&&ca(80),e=lb+72|0,d=lb+64|0,c=lb+56|0,sa=lb+32|0,s=lb+8|0,t=lb,B=a,M=b,u=B,v=u+12|0,w=0|f[v>>2],x=w+16|0,y=0|f[x>>2],X=y,z=X,A=z+28|0,C=0|f[A>>2],ha=C,D=B,E=M,F=B,G=0|ji(F,67804,5),H=X,I=B,J=I+12|0,K=0|f[J>>2],L=K+20|0,N=0|f[L>>2],O=H,P=N,Q=O-P|0,R=(0|Q)/48&-1,zr(sa,R),f[c>>2]=0|f[sa>>2],f[c+4>>2]=0|f[sa+4>>2],Zi(D,E,G,c);;){if(S=X,T=B,U=T+12|0,V=0|f[U>>2],W=V+20|0,Y=0|f[W>>2],!(S>>>0>=Y>>>0)){kb=11;break}if($=X,_=$+32|0,aa=0|f[_>>2],Da=aa,ba=Da,da=0==(0|ba),ea=ha,fa=0!=(0|ea),ib=da&fa,ib&&(ga=ha,ia=ga+-4|0,Da=ia),ja=Da,0!=(0|ja)&&(la=X,ma=la+4|0,na=0|f[ma>>2],0!=(0|na)&&(pa=X,qa=pa+4|0,ra=0|f[qa>>2],ta=0|f[ra>>2],ua=ta>>>11,va=128&ua,!(0!=(0|va))&&(xa=X,ya=xa+4|0,za=0|f[ya>>2],Aa=za+12|0,Ba=0|f[Aa>>2],Oa=Ba,Ca=Oa,Ea=Da,Fa=Oa,Ga=Fa+8|0,Ha=0|f[Ga>>2],Ia=Ea,Ja=Ha,Ka=Ia-Ja|0,La=(0|Ka)/4&-1,Ma=0|qr(Ca,La),Za=Ma,Na=Oa,Pa=Da,Qa=Oa,Ra=Qa+8|0,Sa=0|f[Ra>>2],Ta=Pa,Ua=Sa,Va=Ta-Ua|0,Wa=(0|Va)/4&-1,Xa=0|or(Na,Wa),g=Xa,Ya=Za,$a=-1!=(0|Ya),_a=g,ab=0!=(0|_a),$a&ab))))break;l=X,m=l+28|0,n=0|f[m>>2],ha=n,q=X,r=q+-48|0,X=r}if(11==(0|kb))return void(o=lb);bb=B,cb=M,db=B,eb=0|ji(db,67810,4),fb=B,gb=g,pg(s,fb,gb),f[d>>2]=0|f[s>>2],f[d+4>>2]=0|f[s+4>>2],Zi(bb,cb,eb,d),hb=B,h=M,i=B,j=0|ji(i,67815,4),k=Za,zr(t,k),f[e>>2]=0|f[t>>2],f[e+4>>2]=0|f[t+4>>2],Zi(hb,h,j,e),o=lb}function zr(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,i=0;i=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),d=i,c=b,e=d+4|0,f[e>>2]=3,g=c,f[d>>2]=g,f[a>>2]=0|f[d>>2],f[a+4>>2]=0|f[d+4>>2],o=i}function Ar(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,u=0;u=o,o=o+64|0,(0|o)>=(0|p)&&ca(64),e=u+48|0,d=u+40|0,n=u+16|0,q=u+8|0,r=u,k=a,l=b,m=c,s=k,g=m,pg(q,s,g),f[n>>2]=0|f[q>>2],f[n+4>>2]=0|f[q+4>>2],h=k,i=k,j=l,f[d>>2]=0|f[n>>2],f[d+4>>2]=0|f[n+4>>2],wr(r,i,j,d),f[e>>2]=0|f[r>>2],f[e+4>>2]=0|f[r+4>>2],xr(h,e)}function Br(a,b,c,e){a|=0,b|=0,c|=0,e|=0;var g=0,h=0,i=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,O=0,P=0,Q=0,R=0,S=0,U=0,V=0,W=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,wa=0,xa=0,ya=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,$a=0,_a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,ob=0;for(ob=o,o=o+192|0,(0|o)>=(0|p)&&ca(192),q=ob+176|0,n=ob+168|0,m=ob+160|0,l=ob+152|0,k=ob+144|0,i=ob+136|0,h=ob+128|0,u=ob+120|0,t=ob+112|0,s=ob+104|0,r=ob+96|0,g=ob+88|0,z=ob+56|0,B=ob+48|0,C=ob+40|0,D=ob+32|0,E=ob+24|0,F=ob+16|0,G=ob+8|0,H=ob,ba=b,na=c,ya=e,I=na,Ja=I,J=Ja,Ua=J,K=ba,In(z,K,4);;){if(L=Ja,M=0|d[L>>0],!(M<<24>>24!=0))break;if(O=Ja,P=O+1|0,Ja=P,Q=0|d[O>>0],A=Q,R=A,S=R<<24>>24,37==(0|S)){if(U=Ja,V=0|d[U>>0],W=V<<24>>24,!(83==(0|W)))continue;Y=Ja,Z=Ua,$=Y,_=Z,aa=$-_|0,da=aa-1|0,db=da,ea=ba,fa=ba,ga=Ua,ha=db,mg(B,fa,ga,ha),f[g>>2]=0|f[z>>2],f[g+4>>2]=0|f[z+4>>2],f[r>>2]=0|f[B>>2],f[r+4>>2]=0|f[B+4>>2],Zn(ea,g,r),ia=ba,ja=ya,gb=0|f[ja>>2],ka=gb,la=4,jb=la,ib=jb-1|0,ma=ka+ib|0,oa=4,mb=oa,lb=mb-1|0,kb=-1^lb,pa=ma&kb,qa=pa,v=+j[qa>>2],x=qa+4|0,w=0|f[x>>2],hb=qa+8|0,f[ja>>2]=hb,j[D>>2]=v,y=D+4|0,f[y>>2]=w,f[C>>2]=0|f[D>>2],f[C+4>>2]=0|f[D+4>>2],f[s>>2]=0|f[z>>2],f[s+4>>2]=0|f[z+4>>2],f[t>>2]=0|f[C>>2],f[t+4>>2]=0|f[C+4>>2],Zn(ia,s,t),ra=Ja,sa=ra+1|0,Ua=sa}else if(ta=A,ua=ta<<24>>24,92==(0|ua)){if(wa=Ja,xa=0|d[wa>>0],!(xa<<24>>24!=0))break;Aa=Ja,Ba=Ua,Ca=Aa,Da=Ba,Ea=Ca-Da|0,Fa=Ea-1|0,db=Fa,Ga=ba,Ha=ba,Ia=Ua,Ka=db,mg(E,Ha,Ia,Ka),f[u>>2]=0|f[z>>2],f[u+4>>2]=0|f[z+4>>2],f[h>>2]=0|f[E>>2],f[h+4>>2]=0|f[E+4>>2],Zn(Ga,u,h),La=ba,Ma=ba,Na=Ja,mg(F,Ma,Na,1),f[i>>2]=0|f[z>>2],f[i+4>>2]=0|f[z+4>>2],f[k>>2]=0|f[F>>2],f[k+4>>2]=0|f[F+4>>2],Zn(La,i,k),Oa=Ja,Pa=Oa+1|0,Ja=Pa,Ua=Pa}}return Qa=Ua,Ra=na,Sa=(0|Qa)==(0|Ra),Sa?(Ta=ba,Va=na,pg(a,Ta,Va),void(o=ob)):(Wa=Ja,Xa=Ua,Ya=Wa,Za=Xa,$a=Ya-Za|0,db=$a,_a=ba,ab=ba,bb=Ua,cb=db,mg(G,ab,bb,cb),f[l>>2]=0|f[z>>2],f[l+4>>2]=0|f[z+4>>2],f[m>>2]=0|f[G>>2],f[m+4>>2]=0|f[G+4>>2],Zn(_a,l,m),eb=ba,fb=ba,mg(H,fb,0,0),f[n>>2]=0|f[z>>2],f[n+4>>2]=0|f[z+4>>2],f[q>>2]=0|f[H>>2],f[q+4>>2]=0|f[H+4>>2],mo(a,eb,n,q),void(o=ob))}function Cr(a,b,c,d){a|=0,b|=0,c|=0,d|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,n=0;n=o,o=o+48|0,(0|o)>=(0|p)&&ca(48),h=n+16|0,i=n+8|0,j=n,e=b,g=c,f[h>>2]=d,k=e,l=g,Br(j,k,l,h),f[i>>2]=0|f[j>>2],f[i+4>>2]=0|f[j+4>>2],f[a>>2]=0|f[i>>2],f[a+4>>2]=0|f[i+4>>2],o=n}function Dr(a,b,c,d){a|=0,b|=0,c|=0,d|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,w=0;w=o,o=o+80|0,(0|o)>=(0|p)&&ca(80),g=w+64|0,e=w+56|0,r=w+24|0,s=w+16|0,t=w+8|0,u=w,m=a,n=b,q=c,f[r>>2]=d,h=m,i=q,Br(t,h,i,r),f[s>>2]=0|f[t>>2],f[s+4>>2]=0|f[t+4>>2],j=m,k=m,l=n,f[e>>2]=0|f[s>>2],f[e+4>>2]=0|f[s+4>>2],wr(u,k,l,e),f[g>>2]=0|f[u>>2],f[g+4>>2]=0|f[u+4>>2],xr(j,g)}function Er(a,b,c,d){a|=0,b|=0,c|=0,d|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,A=0;A=o,o=o+96|0,(0|o)>=(0|p)&&ca(96),e=A+80|0,v=A+56|0,w=A+40|0,x=A+24|0,y=A+16|0,g=A+8|0,h=A,s=a,t=b,u=c,f[x>>2]=d,i=s,j=u,Br(y,i,j,x),f[w>>2]=0|f[y>>2],f[w+4>>2]=0|f[y+4>>2],k=w+8|0,l=t,Fr(g,l),f[k>>2]=0|f[g>>2],f[k+4>>2]=0|f[g+4>>2],m=s,n=s,q=0|sp(n,67820),aq(h,m,q,2,w),f[v>>2]=0|f[h>>2],f[v+4>>2]=0|f[h+4>>2],r=s,f[e>>2]=0|f[v>>2],f[e+4>>2]=0|f[v+4>>2],xr(r,e)}function Fr(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,i=0;i=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),d=i,c=b,e=d+4|0,f[e>>2]=4,g=c,f[d>>2]=g,f[a>>2]=0|f[d>>2],f[a+4>>2]=0|f[d+4>>2],o=i}function Gr(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0;return N=o,o=o+48|0,(0|o)>=(0|p)&&ca(48),G=N+16|0,H=N+8|0,I=N,q=a,B=b,f[G>>2]=c,J=q,K=B,Br(I,J,K,G),f[H>>2]=0|f[I>>2],f[H+4>>2]=0|f[I+4>>2],L=0|f[637],iw(67830,L),d=0|f[H>>2],e=0|f[d>>2],g=e>>>11,h=8&g,i=0!=(0|h),j=0|f[H>>2],k=j+12|0,i?E=k:(l=k+8|0,m=0|f[l>>2],E=m),n=0|f[H>>2],r=0|f[n>>2],s=r>>>11,t=8&s,u=0!=(0|t),v=0|f[H>>2],u?(w=0|f[v>>2],x=w>>>11,y=496&x,z=y>>4,F=z,D=0|f[637],jw(E,F,1,D),void(o=N)):(A=v+12|0,C=0|f[A>>2],F=C,D=0|f[637],jw(E,F,1,D),void(o=N))}function Hr(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0;N=o,o=o+48|0,(0|o)>=(0|p)&&ca(48),G=N+16|0,H=N+8|0,I=N,q=a,B=b,f[G>>2]=c,J=q,K=B,Br(I,J,K,G),f[H>>2]=0|f[I>>2],f[H+4>>2]=0|f[I+4>>2],L=0|f[637],iw(67840,L),d=0|f[H>>2],e=0|f[d>>2],g=e>>>11,h=8&g,i=0!=(0|h),j=0|f[H>>2],k=j+12|0,i?E=k:(l=k+8|0,m=0|f[l>>2],E=m),n=0|f[H>>2],r=0|f[n>>2],s=r>>>11,t=8&s,u=0!=(0|t),v=0|f[H>>2],u?(w=0|f[v>>2],x=w>>>11,y=496&x,z=y>>4,F=z,D=0|f[637],jw(E,F,1,D),Oa(1)):(A=v+12|0,C=0|f[A>>2],F=C,D=0|f[637],jw(E,F,1,D),Oa(1))}function Ir(a,b,c,d){a|=0,b|=0,c|=0,d|=0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0;l=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),e=b,f=c,g=d,h=e,i=f,j=g,Jr(a,h,i,j,1),o=l}function Jr(a,b,c,e,g){a|=0,b|=0,c|=0,e|=0,g|=0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0;Ga=o,o=o+160|0,(0|o)>=(0|p)&&ca(160),n=Ga+136|0,m=Ga+128|0,l=Ga+120|0,k=Ga+112|0,j=Ga+104|0,i=Ga+96|0,h=Ga+88|0,Ea=Ga,Da=Ga+64|0,r=Ga+48|0,s=Ga+40|0,t=Ga+32|0,v=Ga+16|0,w=Ga+8|0,da=b,oa=c,za=e,Ca=g,Kr(r),f[Da>>2]=0|f[r>>2],f[Da+4>>2]=0|f[r+4>>2],x=oa;a:switch(0|x){case 0:break;case 1:if(y=za,z=y+4|0,A=0|f[z>>2],0==(0|A)&&(C=za,D=0|f[C>>2],!(0!=(0|D))))break a;F=Ca,G=F<<24>>24!=0;do{if(G){if(H=da,I=za,f[h>>2]=0|f[I>>2],f[h+4>>2]=0|f[I+4>>2],Wg(s,H,h),f[Da>>2]=0|f[s>>2],f[Da+4>>2]=0|f[s+4>>2],J=Da+4|0,K=0|f[J>>2],0==(0|K)&&(M=0|f[Da>>2],!(0!=(0|M))))break;O=da,P=da,Q=0|sp(P,68266),f[i>>2]=0|f[Da>>2],f[i+4>>2]=0|f[Da+4>>2],wr(t,O,Q,i),f[Da>>2]=0|f[t>>2],f[Da+4>>2]=0|f[t+4>>2];break a}}while(0);q=0,Fa=10;break;case 3:case 2:q=1,Fa=10;break;default:ga=da,ha=da,ia=0|sp(ha,69160),ja=oa,zr(w,ja),d[Ea>>0]=0|d[w>>0],d[Ea+1>>0]=0|d[w+1>>0],d[Ea+2>>0]=0|d[w+2>>0],d[Ea+3>>0]=0|d[w+3>>0],d[Ea+4>>0]=0|d[w+4>>0],d[Ea+5>>0]=0|d[w+5>>0],d[Ea+6>>0]=0|d[w+6>>0],d[Ea+7>>0]=0|d[w+7>>0],Dr(ga,ia,67888,Ea)}do{if(10==(0|Fa)){if(R=da,S=0|ji(R,67846,9),u=S,T=da,U=za,V=u,f[j>>2]=0|f[U>>2],f[j+4>>2]=0|f[U+4>>2],W=0|cq(T,j,V),X=W<<24>>24!=0,Y=da,X){Z=za,$=u,_=q,aa=za,ba=aa+8|0,f[k>>2]=0|f[Z>>2],f[k+4>>2]=0|f[Z+4>>2],Yj(v,Y,k,$,_,ba),f[Da>>2]=0|f[v>>2],f[Da+4>>2]=0|f[v+4>>2];break}ea=da,fa=0|sp(ea,69204),Ar(Y,fa,67856)}}while(0);return ka=oa,(0|ka)>0?(ma=da,na=da,pa=na+568|0,qa=0|f[pa>>2],f[l>>2]=0|f[Da>>2],f[l+4>>2]=0|f[Da+4>>2],ra=0|Kf(ma,l,qa),sa=ra<<24>>24!=0,sa||(ta=da,ua=da,va=0|sp(ua,69204),Ar(ta,va,67928)),wa=oa,(0|wa)>2?(ya=da,Aa=za,Ba=Aa+16|0,f[m>>2]=0|f[Da>>2],f[m+4>>2]=0|f[Da+4>>2],f[n>>2]=0|f[Ba>>2],f[n+4>>2]=0|f[Ba+4>>2],Lr(ya,m,n),f[a>>2]=0|f[Da>>2],f[a+4>>2]=0|f[Da+4>>2],void(o=Ga)):(f[a>>2]=0|f[Da>>2],f[a+4>>2]=0|f[Da+4>>2],void(o=Ga))):(f[a>>2]=0|f[Da>>2],f[a+4>>2]=0|f[Da+4>>2],void(o=Ga))}function Kr(a){a|=0;var b=0,c=0,e=0;e=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),b=e,c=b+4|0,f[c>>2]=0,f[b>>2]=0,f[a>>2]=0|f[b>>2],f[a+4>>2]=0|f[b+4>>2],o=e}function Lr(a,b,c){a|=0,b|=0,c|=0;var e=0,g=0,h=0,i=0,j=0,l=0;l=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),e=l+24|0,j=l,h=l+8|0,g=a,i=g,d[j>>0]=0|d[c>>0],d[j+1>>0]=0|d[c+1>>0],d[j+2>>0]=0|d[c+2>>0],d[j+3>>0]=0|d[c+3>>0],d[j+4>>0]=0|d[c+4>>0],d[j+5>>0]=0|d[c+5>>0],d[j+6>>0]=0|d[c+6>>0],d[j+7>>0]=0|d[c+7>>0],f[e>>2]=0|f[b>>2],f[e+4>>2]=0|f[b+4>>2],Xj(h,i,e,67954,1,j),o=l}function Mr(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,l=0;l=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),d=l,c=b,e=c,g=0|f[e>>2],h=255&g,i=d+4|0,f[i>>2]=h,j=c,f[d>>2]=j,f[a>>2]=0|f[d>>2],f[a+4>>2]=0|f[d+4>>2],o=l}function Nr(a,b,c,e,g){a|=0,b|=0,c|=0,e|=0,g|=0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,F=0;F=o,o=o+112|0,(0|o)>=(0|p)&&ca(112),i=F+104|0,h=F+96|0,B=F,y=F+72|0,z=F+56|0,A=F+48|0,j=F+40|0,k=F+32|0,l=F+24|0,v=a,w=b,x=e,f[z>>2]=g,m=v,n=v,q=0|sp(n,67968),Mr(A,q),r=v,s=x,Br(j,r,s,z),t=w,Fr(k,t),d[B>>0]=0|d[j>>0],d[B+1>>0]=0|d[j+1>>0],d[B+2>>0]=0|d[j+2>>0],d[B+3>>0]=0|d[j+3>>0],d[B+4>>0]=0|d[j+4>>0],d[B+5>>0]=0|d[j+5>>0],d[B+6>>0]=0|d[j+6>>0],d[B+7>>0]=0|d[j+7>>0],C=B+8|0,d[C>>0]=0|d[k>>0],d[C+1>>0]=0|d[k+1>>0],d[C+2>>0]=0|d[k+2>>0],d[C+3>>0]=0|d[k+3>>0],d[C+4>>0]=0|d[k+4>>0],d[C+5>>0]=0|d[k+5>>0],d[C+6>>0]=0|d[k+6>>0],d[C+7>>0]=0|d[k+7>>0],D=B+16|0,d[D>>0]=0|d[c>>0],d[D+1>>0]=0|d[c+1>>0],d[D+2>>0]=0|d[c+2>>0],d[D+3>>0]=0|d[c+3>>0],d[D+4>>0]=0|d[c+4>>0],d[D+5>>0]=0|d[c+5>>0],d[D+6>>0]=0|d[c+6>>0],d[D+7>>0]=0|d[c+7>>0],f[h>>2]=0|f[A>>2],f[h+4>>2]=0|f[A+4>>2],Xj(l,m,h,67982,3,B),f[y>>2]=0|f[l>>2],f[y+4>>2]=0|f[l+4>>2],u=v,f[i>>2]=0|f[y>>2],f[i+4>>2]=0|f[y+4>>2],xr(u,i)}function Or(a){a|=0;var b=0,c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,sa=0;sa=o,o=o+48|0,(0|o)>=(0|p)&&ca(48),b=sa+32|0,X=sa+8|0,ha=sa,c=a,oa=c,pa=c,qa=pa+32|0,d=0|f[qa>>2],e=0|Cp(oa,67986,d),q=e,g=c,h=g+568|0,f[h>>2]=e,i=q,j=0|f[i>>2],k=j>>>11,l=-256&k,m=18|l,n=q,r=0|f[n>>2],s=2097151&m,t=s<<11,u=2047&r,v=u|t,f[n>>2]=v,w=c,x=q,Xp(w,x,67846,238,4096),y=c,z=q,Ip(y,z,67846,276,4096),A=c,C=q,Ip(A,C,69252,277,4096),D=c,E=q,Ip(D,E,69276,278,0),F=c,G=q,Ip(F,G,67996,279,0),H=c,I=q,Ip(H,I,69281,280,0),J=c,K=q,Ip(J,K,68004,281,0),L=c,N=c,O=N+568|0,P=0|f[O>>2],Q=0|Cp(L,69566,P),R=c,S=R+572|0,f[S>>2]=Q,T=c,U=c,V=U+572|0,W=0|f[V>>2],Y=0|Cp(T,68266,W),B=Y,Z=c,$=B,_=c,qg(X,_,68014,13),f[b>>2]=0|f[X>>2],f[b+4>>2]=0|f[X+4>>2],wr(ha,Z,$,b),aa=0|f[ha>>2],ba=c,da=ba+576|0,f[da>>2]=aa,ea=c,fa=c,ga=fa+568|0,ia=0|f[ga>>2],ja=0|Cp(ea,68028,ia),M=ja,ka=c,la=M,Cp(ka,68040,la),ma=c,na=q,Cp(ma,68052,na),o=sa}function Pr(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,D=0;return D=o,o=o+96|0,(0|o)>=(0|p)&&ca(96),i=D+80|0,h=D+72|0,g=D+64|0,e=D+56|0,d=D+48|0,B=D,v=D+32|0,w=D+24|0,y=D+8|0,u=b,z=u,f[B>>2]=w,A=0|Kp(z,68084,B),x=A,j=x,0==(0|j)?(f[a>>2]=0|f[c>>2],f[a+4>>2]=0|f[c+4>>2],void(o=D)):(l=u,f[d>>2]=0|f[c>>2],f[d+4>>2]=0|f[c+4>>2],f[e>>2]=0|f[w>>2],f[e+4>>2]=0|f[w+4>>2],m=0|kf(l,d,e),n=m<<24>>24!=0,n?(f[a>>2]=0|f[c>>2],f[a+4>>2]=0|f[c+4>>2],void(o=D)):(q=u,f[g>>2]=0|f[c>>2],f[g+4>>2]=0|f[c+4>>2],ds(y,q,g),f[v>>2]=0|f[y>>2],f[v+4>>2]=0|f[y+4>>2],r=u,s=u,t=0|ji(s,68069,4),f[h>>2]=0|f[v>>2],f[h+4>>2]=0|f[v+4>>2],f[i>>2]=0|f[w>>2],f[i+4>>2]=0|f[w+4>>2],bj(r,h,t,i),f[a>>2]=0|f[v>>2],f[a+4>>2]=0|f[v+4>>2],void(o=D)))}function Qr(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,q=0,s=0;if(s=o,o=o+48|0,(0|o)>=(0|p)&&ca(48),e=s+32|0,d=s+24|0,q=s,i=s+8|0,h=b,j=h,f[q>>2]=i,k=0|Kp(j,68084,q),!(1==(0|k)))return f[a>>2]=0|f[c>>2],f[a+4>>2]=0|f[c+4>>2],void(o=s);m=h,n=h,g=0|ji(n,68069,4),f[d>>2]=0|f[c>>2],f[d+4>>2]=0|f[c+4>>2],f[e>>2]=0|f[i>>2],f[e+4>>2]=0|f[i+4>>2],bj(m,d,g,e),f[a>>2]=0|f[c>>2],f[a+4>>2]=0|f[c+4>>2],o=s}function Rr(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,F=0;if(F=o,o=o+48|0,(0|o)>=(0|p)&&ca(48),e=F+32|0,d=F+24|0,y=F+8|0,x=b,A=x,B=x,C=0|ji(B,68069,4),f[d>>2]=0|f[c>>2],f[d+4>>2]=0|f[c+4>>2],Uj(y,A,d,C),D=y+4|0,g=0|f[D>>2],!(16==(0|g)))return i=x,j=x,f[e>>2]=0|f[c>>2],f[e+4>>2]=0|f[c+4>>2],k=0|hq(j,e),pg(a,i,k),void(o=F);l=0|f[y>>2],z=l,m=z,n=m+4|0,q=0|f[n>>2],r=0!=(0|q),r||(s=x,t=s+48|0,u=0|f[t>>2],v=z,w=v+4|0,f[w>>2]=u),f[a>>2]=0|f[y>>2],f[a+4>>2]=0|f[y+4>>2],o=F}function Sr(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,j=0;j=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),d=j+8|0,h=j,e=b,g=e,f[d>>2]=0|f[c>>2],f[d+4>>2]=0|f[c+4>>2],Xj(a,g,d,69276,0,h),o=j}function Tr(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ka=0,La=0,Ma=0,Oa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,$a=0,_a=0,ab=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0;ob=o,o=o+352|0,(0|o)>=(0|p)&&ca(352),r=ob+328|0,q=ob+320|0,n=ob+312|0,m=ob+304|0,l=ob+296|0,k=ob+288|0,j=ob+280|0,i=ob+272|0,h=ob+264|0,g=ob+256|0,z=ob+248|0,y=ob+240|0,x=ob+232|0,w=ob+224|0,v=ob+216|0,u=ob+208|0,t=ob+200|0,s=ob+192|0,e=ob+184|0,d=ob+176|0,ea=ob+160|0,pa=ob+152|0,Aa=ob+144|0,La=ob+136|0,fb=ob+128|0,A=ob+120|0,B=ob+112|0,C=ob+104|0,D=ob+96|0,E=ob+88|0,F=ob+80|0,G=ob+72|0,H=ob+64|0,I=ob+56|0,J=ob+48|0,K=ob+40|0,M=ob+24|0,N=ob+16|0,O=ob+8|0,P=ob,U=b,Q=U,R=U,S=0|ji(R,68069,4),f[d>>2]=0|f[c>>2],f[d+4>>2]=0|f[c+4>>2],Uj(fb,Q,d,S),f[pa>>2]=0|f[fb>>2],f[pa+4>>2]=0|f[fb+4>>2],T=U,V=U,W=0|ji(V,67810,4),f[e>>2]=0|f[c>>2],f[e+4>>2]=0|f[c+4>>2],Uj(A,T,e,W),f[Aa>>2]=0|f[A>>2],f[Aa+4>>2]=0|f[A+4>>2],X=U,Y=U,Z=0|ji(Y,67815,4),f[s>>2]=0|f[c>>2],f[s+4>>2]=0|f[c+4>>2],Uj(B,X,s,Z),f[La>>2]=0|f[B>>2],f[La+4>>2]=0|f[B+4>>2],$=pa+4|0,_=0|f[$>>2],aa=0==(0|_),aa?(ba=0|f[pa>>2],da=0!=(0|ba),fa=1^da,ha=fa):ha=0,ga=1^ha,ia=1&ga,ja=255&ia,Wa=ja,ka=Wa,la=ka<<24>>24!=0,la&&(ma=U,f[t>>2]=0|f[pa>>2],f[t+4>>2]=0|f[pa+4>>2],Ug(C,ma,t),f[pa>>2]=0|f[C>>2],f[pa+4>>2]=0|f[C+4>>2],na=0|f[pa>>2],oa=0|f[na>>2],qa=oa>>>11,ra=8&qa,sa=0!=(0|ra),ta=0|f[pa>>2],sa?(ua=0|f[ta>>2],va=ua>>>11,wa=496&va,xa=wa>>4,Ca=xa):(ya=ta+12|0,za=0|f[ya>>2],Ca=za),Ba=(0|Ca)>0,Da=1&Ba,Ea=255&Da,Wa=Ea),Fa=Aa+4|0,Ga=0|f[Fa>>2],Ha=0==(0|Ga),Ha?(Ia=0|f[Aa>>2],0!=(0|Ia)&&(nb=10)):nb=10;do{if(10==(0|nb)){if(Ka=La+4|0,Ma=0|f[Ka>>2],0==(0|Ma)&&(Oa=0|f[La>>2],!(0!=(0|Oa))))break;return Qa=U,(f[u>>2]=0|f[Aa>>2],f[u+4>>2]=0|f[Aa+4>>2],Gg(D,Qa,u),f[ea>>2]=0|f[D>>2],f[ea+4>>2]=0|f[D+4>>2],Ra=U,f[v>>2]=0|f[ea>>2],f[v+4>>2]=0|f[ea+4>>2],ch(E,Ra,v,68074,1),Sa=U,f[w>>2]=0|f[ea>>2],f[w+4>>2]=0|f[ea+4>>2],f[x>>2]=0|f[La>>2],f[x+4>>2]=0|f[La+4>>2],gh(F,Sa,w,x),Ta=U,f[y>>2]=0|f[ea>>2],f[y+4>>2]=0|f[ea+4>>2],ch(G,Ta,y,68076,2),Ua=Wa,Va=Ua<<24>>24!=0,Va&&(Xa=U,f[z>>2]=0|f[ea>>2],f[z+4>>2]=0|f[ea+4>>2],f[g>>2]=0|f[pa>>2],f[g+4>>2]=0|f[pa+4>>2],fh(H,Xa,z,g),Ya=U,f[h>>2]=0|f[ea>>2],f[h+4>>2]=0|f[ea+4>>2],ch(I,Ya,h,68079,2)),Za=U,$a=U,f[i>>2]=0|f[c>>2],f[i+4>>2]=0|f[c+4>>2],_a=0|hq($a,i),f[j>>2]=0|f[ea>>2],f[j+4>>2]=0|f[ea+4>>2],eh(J,Za,j,_a),ab=Wa,ab<<24>>24!=0)?(cb=U,f[k>>2]=0|f[ea>>2],f[k+4>>2]=0|f[ea+4>>2],ch(K,cb,k,68082,1),f[a>>2]=0|f[ea>>2],f[a+4>>2]=0|f[ea+4>>2],void(o=ob)):(f[a>>2]=0|f[ea>>2],f[a+4>>2]=0|f[ea+4>>2],void(o=ob))}}while(0);return db=U,f[l>>2]=0|f[c>>2],f[l+4>>2]=0|f[c+4>>2],eb=0|hq(db,l),L=eb,gb=U,hb=L,pg(M,gb,hb),f[ea>>2]=0|f[M>>2],f[ea+4>>2]=0|f[M+4>>2],ib=U,f[m>>2]=0|f[ea>>2],f[m+4>>2]=0|f[ea+4>>2],ch(N,ib,m,68076,2),jb=Wa,kb=jb<<24>>24!=0,lb=U,kb?(f[n>>2]=0|f[ea>>2],f[n+4>>2]=0|f[ea+4>>2],f[q>>2]=0|f[pa>>2],f[q+4>>2]=0|f[pa+4>>2],fh(O,lb,n,q),f[a>>2]=0|f[ea>>2],f[a+4>>2]=0|f[ea+4>>2],void(o=ob)):(mb=L,f[r>>2]=0|f[ea>>2],f[r+4>>2]=0|f[ea+4>>2],eh(P,lb,r,mb),f[a>>2]=0|f[ea>>2],f[a+4>>2]=0|f[ea+4>>2],void(o=ob))}function Ur(a,b,c){a|=0,b|=0,c|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0;if(_=o,o=o+112|0,(0|o)>=(0|p)&&ca(112),g=_+96|0,e=_+88|0,X=_+16|0,W=_,S=_+64|0,T=_+56|0,V=_+40|0,h=_+32|0,D=a,O=c,i=b+4|0,j=0|f[i>>2],k=21!=(0|j),k&&(l=D,f[e>>2]=0|f[b>>2],f[e+4>>2]=0|f[b+4>>2],Hf(l,e,21)),m=0|f[b>>2],n=m+16|0,q=0|f[n>>2],r=O,!((0|q)!=(0|r)))return void(o=_);t=0|f[b>>2],u=t+16|0,v=0|f[u>>2],R=v,w=R,x=0!=(0|w),y=D,x?(z=D,A=0|sp(z,69204),B=D,C=R,E=0|f[C>>2],pg(S,B,E),F=D,G=O,H=0|f[G>>2],pg(T,F,H),d[W>>0]=0|d[S>>0],d[W+1>>0]=0|d[S+1>>0],d[W+2>>0]=0|d[S+2>>0],d[W+3>>0]=0|d[S+3>>0],d[W+4>>0]=0|d[S+4>>0],d[W+5>>0]=0|d[S+5>>0],d[W+6>>0]=0|d[S+6>>0],d[W+7>>0]=0|d[S+7>>0],Y=W+8|0,d[Y>>0]=0|d[T>>0],d[Y+1>>0]=0|d[T+1>>0],d[Y+2>>0]=0|d[T+2>>0],d[Y+3>>0]=0|d[T+3>>0],d[Y+4>>0]=0|d[T+4>>0],d[Y+5>>0]=0|d[T+5>>0],d[Y+6>>0]=0|d[T+6>>0],d[Y+7>>0]=0|d[T+7>>0],Dr(y,A,68087,W)):(f[g>>2]=0|f[b>>2],f[g+4>>2]=0|f[b+4>>2],I=0|Vr(y,g),U=I,J=D,K=D,L=0|sp(K,69204),M=U,Wr(V,M),N=D,P=O,Q=0|f[P>>2],pg(h,N,Q),d[X>>0]=0|d[V>>0],d[X+1>>0]=0|d[V+1>>0],d[X+2>>0]=0|d[V+2>>0],d[X+3>>0]=0|d[V+3>>0],d[X+4>>0]=0|d[V+4>>0],d[X+5>>0]=0|d[V+5>>0],d[X+6>>0]=0|d[V+6>>0],d[X+7>>0]=0|d[V+7>>0],Z=X+8|0,d[Z>>0]=0|d[h>>0],d[Z+1>>0]=0|d[h+1>>0],d[Z+2>>0]=0|d[h+2>>0],d[Z+3>>0]=0|d[h+3>>0],d[Z+4>>0]=0|d[h+4>>0],d[Z+5>>0]=0|d[h+5>>0],d[Z+6>>0]=0|d[h+6>>0],d[Z+7>>0]=0|d[h+7>>0],Dr(J,L,68124,X))}function Vr(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,K=0;K=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),A=a,D=b+4|0,E=0|f[D>>2];a:switch(0|E){case 0:if(F=0|f[b>>2],G=0!=(0|F),H=A,G){I=H+72|0,c=0|f[I>>2],n=c;break a}d=H+76|0,e=0|f[d>>2],n=e;break a;case 2:g=A,h=g+68|0,i=0|f[h>>2],n=i;break;case 4:j=A,k=j+80|0,l=0|f[k>>2],n=l;break;case 3:m=A,q=m+64|0,r=0|f[q>>2],n=r;break;case 6:s=A,t=s+60|0,u=0|f[t>>2],n=u;break;case 7:v=A,w=v+32|0,x=0|f[w>>2],n=x;break;case 20:n=0;break;default:y=0|f[b>>2],z=y+4|0,B=0|f[z>>2],n=B}return C=n,o=K,0|C}function Wr(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,l=0;l=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),d=l,c=b,e=c,g=0|f[e>>2],h=255&g,i=d+4|0,f[i>>2]=h,j=c,f[d>>2]=j,f[a>>2]=0|f[d>>2],f[a+4>>2]=0|f[d+4>>2],o=l}function Xr(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,n=0;return n=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),d=n+8|0,e=a,g=c,h=e,i=g,f[d>>2]=0|f[b>>2],f[d+4>>2]=0|f[b+4>>2],Ur(h,d,i),j=0|f[b>>2],k=j+20|0,l=0|f[k>>2],o=n,0|l}function Yr(a){a=+a;var b=0,c=0,e=0,f=0,g=0,h=0,i=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,z=0;for(z=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),b=z+12|0,j[b>>2]=a,q=b,r=4,s=0;;){if(t=r,u=t+-1|0,r=u,v=0!=(0|t),w=s,!v)break;x=65599*w|0,c=q,e=0|d[c>>0],f=e<<24>>24,g=x+f|0,s=g,h=q,i=h+1|0,q=i}return k=s,l=k>>5,m=w+l|0,s=m,n=s,o=z,0|n}function Zr(a){a|=0;var b=0,d=0,g=0,h=0,i=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,O=0;O=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),B=a+4|0,H=0|f[B>>2],q=H,I=q;a:switch(0|I){case 5:case 1:J=q,K=0^J,b=K;break;case 0:if(L=a+4|0,M=0|f[L>>2],0==(0|M)&&(d=0|f[a>>2],!(0!=(0|d)))){g=q,h=1^g,b=h;break a}i=q,k=0^i,b=k;break;case 2:l=q,m=1^l,b=m;break;case 4:n=0|f[a>>2],r=q,s=n^r,b=s;break;case 3:t=0|f[a>>2],u=+(0|t),v=0|Yr(u),w=6^v,b=w;break;case 6:x=+j[a>>2],y=0|Yr(x),z=q,A=y^z,b=A;break;default:C=0|f[a>>2],D=C,E=q,F=D^E,b=F}return G=b,o=O,0|G}function $r(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,r=0,s=0,t=0,v=0;return v=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),c=v+8|0,k=a,l=k,m=0|Fp(l,69671),n=255&m,0!=(0|n)?(r=k,s=k,t=0|sp(s,69671),f[c>>2]=0|f[b>>2],f[c+4>>2]=0|f[b+4>>2],d=0|Kf(r,c,t),e=255&d,g=0!=(0|e),i=g,h=1&i,j=255&h,o=v,0|j):(i=0,h=1&i,j=255&h,o=v,0|j)}function _r(a){a|=0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0;N=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),b=a,m=b,ti(m),z=b,Xc(z,0),G=b,oq(G),H=b,Xc(H,0),I=b,mf(I),J=b,Xc(J,0),K=b,ys(K),L=b,Xc(L,0),c=b,Ku(c),d=b,Xc(d,0),e=b,Lu(e),f=b,Xc(f,0),g=b,zi(g),h=b,Xc(h,0),i=b,Or(i),j=b,Xc(j,0),k=b,rt(k),l=b,Xc(l,0),n=b,ih(n),q=b,Xc(q,0),r=b,oo(r),s=b,Xc(s,0),t=b,Od(t),u=b,Xc(u,0),v=b,qe(v),w=b,Xc(w,0),x=b,Pt(x),y=b,Xc(y,0),A=b,$c(A),B=b,Xc(B,0),C=b,Ut(C),D=b,Xc(D,0),E=b,gb(E),F=b,Xc(F,0),o=N}function as(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,h=0,i=0,j=0,k=0,l=0,m=0,q=0,r=0,s=0,u=0;if(u=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),e=u+16|0,d=u+8|0,k=b,l=c+4|0,m=0|f[l>>2],8==(0|m)&&(q=k,f[d>>2]=0|f[c>>2],f[d+4>>2]=0|f[c+4>>2],r=0|bs(q,d),s=255&r,0!=(0|s)))return h=k,i=0|f[c>>2],ij(a,h,i),void(o=u);j=k,f[e>>2]=0|f[c>>2],f[e+4>>2]=0|f[c+4>>2],Jf(a,j,e),o=u}function bs(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,k=0,l=0,m=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,A=0;return A=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),c=A+8|0,s=a,u=s,v=s,f[c>>2]=0|f[b>>2],f[c+4>>2]=0|f[b+4>>2],w=0|cs(v,c),x=s,y=0|ji(x,69276,4),d=0|Zp(u,w,y),t=d,e=t,g=0|f[e>>2],h=g>>>11,i=128&h,0!=(0|i)&&(k=t,l=k+12|0,m=0|f[l>>2],282==(0|m))?(q=1,r=q,o=A,0|r):(q=0,r=q,o=A,0|r)}function cs(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,K=0;K=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),A=a,D=b+4|0,E=0|f[D>>2];a:switch(0|E){case 0:if(F=0|f[b>>2],G=0!=(0|F),H=A,G){I=H+72|0,c=0|f[I>>2],n=c;break a}d=H+76|0,e=0|f[d>>2],n=e;break a;case 2:g=A,h=g+68|0,i=0|f[h>>2],n=i;break;case 4:j=A,k=j+80|0,l=0|f[k>>2],n=l;break;case 3:m=A,q=m+64|0,r=0|f[q>>2],n=r;break;case 6:s=A,t=s+60|0,u=0|f[t>>2],n=u;break;case 7:v=A,w=v+32|0,x=0|f[w>>2],n=x;break;case 20:n=0;break;default:y=0|f[b>>2],z=y+4|0,B=0|f[z>>2],n=B}return C=n,o=K,0|C}function ds(a,b,c){a|=0,b|=0,c|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,O=0;if(O=o,o=o+64|0,(0|o)>=(0|p)&&ca(64),i=O+56|0,h=O+48|0,g=O+40|0,e=O+32|0,M=O,H=O+16|0,I=O+8|0,F=b,J=c+4|0,K=0|f[J>>2],L=K>>>0<8,L&&(j=F,k=F,l=0|sp(k,69204),d[M>>0]=0|d[c>>0],d[M+1>>0]=0|d[c+1>>0],d[M+2>>0]=0|d[c+2>>0],d[M+3>>0]=0|d[c+3>>0],d[M+4>>0]=0|d[c+4>>0],d[M+5>>0]=0|d[c+5>>0],d[M+6>>0]=0|d[c+6>>0],d[M+7>>0]=0|d[c+7>>0],Dr(j,l,68155,M)),m=c+4|0,n=0|f[m>>2],q=12==(0|n),r=F,!q)return u=c+4|0,v=0|f[u>>2],w=F,f[e>>2]=0|f[c>>2],f[e+4>>2]=0|f[c+4>>2],x=0|iq(w,e),y=0|Tc(r,v,x),G=y,z=F,f[g>>2]=0|f[c>>2],f[g+4>>2]=0|f[c+4>>2],A=0|es(z,g),B=G,C=B+4|0,f[C>>2]=A,D=G,fs(I,D),f[H>>2]=0|f[I>>2],f[H+4>>2]=0|f[I+4>>2],E=F,f[h>>2]=0|f[H>>2],f[h+4>>2]=0|f[H+4>>2],f[i>>2]=0|f[c>>2],f[i+4>>2]=0|f[c+4>>2],gs(E,h,i),f[a>>2]=0|f[H>>2],f[a+4>>2]=0|f[H+4>>2],void(o=O);s=F,t=0|sp(s,69204),Ar(r,t,68170)}function es(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0;return Ga=o,o=o+80|0,(0|o)>=(0|p)&&ca(80),g=Ga+64|0,e=Ga+56|0,d=Ga+48|0,c=Ga+40|0,oa=Ga+16|0,za=Ga+8|0,Da=Ga,I=a,Ea=0|f[b>>2],l=Ea+4|0,m=0|f[l>>2],T=m,n=T,q=0|f[n>>2],r=255&q,12!=(0|r)?(t=T,x=t,Ca=x,o=Ga,0|Ca):(u=I,v=T,w=0|f[v>>2],y=255&w,z=I,A=z+36|0,B=0|f[A>>2],C=0|Tc(u,y,B),da=C,D=b+4|0,E=0|f[D>>2],F=9==(0|E),F?Fa=5:(G=b+4|0,H=0|f[G>>2],J=12==(0|H),J?Fa=5:(M=I,N=T,fs(oa,N),f[c>>2]=0|f[oa>>2],f[c+4>>2]=0|f[oa+4>>2],O=0|es(M,c),P=da,h=O,i=P)),5==(0|Fa)&&(K=da,L=da,h=K,i=L),Q=i+4|0,f[Q>>2]=h,R=T,S=R+20|0,U=0|f[S>>2],V=da,W=V+20|0,f[W>>2]=U,X=T,Y=X+12|0,Z=0|f[Y>>2],$=0!=(0|Z),$&&(_=I,aa=da,fs(za,aa),ba=T,fs(Da,ba),f[d>>2]=0|f[za>>2],f[d+4>>2]=0|f[za+4>>2],f[e>>2]=0|f[Da>>2],f[e+4>>2]=0|f[Da+4>>2],gj(_,d,e),ea=I,fa=da,ga=I,ha=0|ji(ga,68237,12),f[g>>2]=0|f[b>>2],f[g+4>>2]=0|f[b+4>>2],Zi(ea,fa,ha,g)),ia=T,ja=ia+16|0,ka=0|f[ja>>2],la=0!=(0|ka),ma=I,la?(na=T,pa=na+16|0,qa=0|f[pa>>2],ra=0|cp(ma,qa),sa=da,j=ra,k=sa):(ta=0|Yo(ma),ua=da,j=ta,k=ua),va=k+16|0,f[va>>2]=j,wa=da,xa=0|f[wa>>2],ya=-256&xa,Aa=12|ya,f[wa>>2]=Aa,Ba=da,x=Ba,Ca=x,o=Ga,0|Ca)}function fs(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,l=0;l=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),d=l,c=b,e=c,g=0|f[e>>2],h=255&g,i=d+4|0,f[i>>2]=h,j=c,f[d>>2]=j,f[a>>2]=0|f[d>>2],f[a+4>>2]=0|f[d+4>>2],o=l}function gs(a,b,c){a|=0,b|=0,c|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,q=0,r=0,s=0,t=0,u=0,v=0;switch(v=o,o=o+64|0,(0|o)>=(0|p)&&ca(64),j=v+56|0,i=v+48|0,h=v+40|0,g=v+32|0,e=v+24|0,t=v,l=v+8|0,k=a,m=c+4|0,0|(0|f[m>>2])){case 10:case 9:q=k,f[e>>2]=0|f[b>>2],f[e+4>>2]=0|f[b+4>>2],f[g>>2]=0|f[c>>2],f[g+4>>2]=0|f[c+4>>2],hs(q,e,g),u=3;break;case 18:case 21:case 15:case 12:case 8:u=3}3==(0|u)&&(r=k,f[h>>2]=0|f[b>>2],f[h+4>>2]=0|f[b+4>>2],f[i>>2]=0|f[c>>2],f[i+4>>2]=0|f[c+4>>2],gj(r,h,i)),s=k,d[t>>0]=0|d[c>>0],d[t+1>>0]=0|d[c+1>>0],d[t+2>>0]=0|d[c+2>>0],d[t+3>>0]=0|d[c+3>>0],d[t+4>>0]=0|d[c+4>>0],d[t+5>>0]=0|d[c+5>>0],d[t+6>>0]=0|d[c+6>>0],d[t+7>>0]=0|d[c+7>>0],f[j>>2]=0|f[b>>2],f[j+4>>2]=0|f[b+4>>2],Xj(l,s,j,69294,1,t),o=v}function hs(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,ta=0;if(ta=o,o=o+80|0,(0|o)>=(0|p)&&ca(80),e=ta+64|0,d=ta+56|0,qa=ta+24|0,ra=ta+16|0,g=ta+8|0,h=ta,C=a,i=0|f[b>>2],N=i,j=0|f[c>>2],Y=j,k=Y,l=0|f[k>>2],m=l>>>11,n=524288&m,!(0!=(0|n)))return ba=C,da=Y,ea=da+16|0,fa=0|f[ea>>2],ga=0|cp(ba,fa),ha=N,ja=ha+16|0,f[ja>>2]=ga,ka=Y,la=ka+20|0,ma=0|f[la>>2],na=N,oa=na+20|0,f[oa>>2]=ma,void(o=ta);for(r=Y,s=r+20|0,t=0|f[s>>2],ia=t,u=N,pa=u;;){if(v=ia,w=0|f[v>>2],x=w>>>11,y=1048576&x,z=0!=(0|y),A=1^z,B=C,D=ia,!A)break;fs(qa,D),f[d>>2]=0|f[qa>>2],f[d+4>>2]=0|f[qa+4>>2],is(ra,B,d),E=0|f[ra>>2],F=pa,G=F+20|0,f[G>>2]=E,H=pa,I=H+20|0,J=0|f[I>>2],pa=J,K=ia,L=K+20|0,M=0|f[L>>2],ia=M}fs(g,D),f[e>>2]=0|f[g>>2],f[e+4>>2]=0|f[g+4>>2],is(h,B,e),O=0|f[h>>2],P=pa,Q=P+20|0,f[Q>>2]=O,R=pa,S=R+20|0,T=0|f[S>>2],U=0|f[T>>2],V=U>>>11,W=1048576|V,X=0|f[T>>2],Z=2097151&W,$=Z<<11,_=2047&X,aa=_|$,f[T>>2]=aa,ba=C,da=Y,ea=da+16|0,fa=0|f[ea>>2],ga=0|cp(ba,fa),ha=N,ja=ha+16|0,f[ja>>2]=ga,ka=Y,la=ka+20|0,ma=0|f[la>>2],na=N,oa=na+20|0,f[oa>>2]=ma,o=ta}function is(a,b,c){a|=0,b|=0,c|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,J=0;if(J=o,o=o+64|0,(0|o)>=(0|p)&&ca(64),h=J+48|0,g=J+40|0,e=J+32|0,H=J,C=J+16|0,D=J+8|0,A=b,E=c+4|0,F=0|f[E>>2],G=F>>>0<8,G&&(i=A,j=A,k=0|sp(j,69204),d[H>>0]=0|d[c>>0],d[H+1>>0]=0|d[c+1>>0],d[H+2>>0]=0|d[c+2>>0],d[H+3>>0]=0|d[c+3>>0],d[H+4>>0]=0|d[c+4>>0],d[H+5>>0]=0|d[c+5>>0],d[H+6>>0]=0|d[c+6>>0],d[H+7>>0]=0|d[c+7>>0],Dr(i,k,68198,H)),l=c+4|0,m=0|f[l>>2],n=12==(0|m),q=A,!n)return t=c+4|0,u=0|f[t>>2],v=A,f[e>>2]=0|f[c>>2],f[e+4>>2]=0|f[c+4>>2],w=0|iq(v,e),x=0|Tc(q,u,w),B=x,y=B,fs(D,y),f[C>>2]=0|f[D>>2],f[C+4>>2]=0|f[D+4>>2],z=A,f[g>>2]=0|f[C>>2],f[g+4>>2]=0|f[C+4>>2],f[h>>2]=0|f[c>>2],f[h+4>>2]=0|f[c+4>>2],gs(z,g,h),f[a>>2]=0|f[C>>2],f[a+4>>2]=0|f[C+4>>2],void(o=J);r=A,s=0|sp(r,69204),Ar(q,s,68211)}function js(a,b,c){a|=0,b|=0,c|=0;var d=0,g=0,i=0;i=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),d=i+8|0,f[d>>2]=0|f[c>>2],f[d+4>>2]=0|f[c+4>>2],g=0|Zr(d),ks(a,g),o=i}function ks(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,i=0;i=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),d=i,c=b,e=d+4|0,f[e>>2]=3,g=c,f[d>>2]=g,f[a>>2]=0|f[d>>2],f[a+4>>2]=0|f[d+4>>2],o=i}function ls(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,q=0;return q=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),d=q+8|0,h=a,i=c,j=h,f[d>>2]=0|f[b>>2],f[d+4>>2]=0|f[b+4>>2],k=0|iq(j,d),l=i,m=(0|k)==(0|l),m?(g=1,e=g,o=q,0|e):(g=0,e=g,o=q,0|e)}function ms(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0;R=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),n=a,A=b,N=A,O=0|f[N>>2],K=O,L=4,P=n,c=K,d=c,e=(d>>>0)/4&-1,g=L,h=K,i=0|V(g,h),j=e+i|0,k=0|Jc(P,j),M=k,l=A,m=l+8|0,f[m>>2]=0,q=A,r=q+4|0,f[r>>2]=0,s=M,t=A,u=t+16|0,f[u>>2]=s,v=A,w=v+20|0,f[w>>2]=0,x=M,y=L,z=K,B=0|V(y,z),C=x+B|0,D=A,E=D+12|0,f[E>>2]=C,F=A,G=F+12|0,H=0|f[G>>2],I=K,J=(I>>>0)/4&-1,ns(H,-86,J),o=R}function ns(a,b,c){a|=0,b|=0,c|=0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,q=0;for(q=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),g=a,h=b,i=c;;){if(j=i,k=j+-1|0,i=k,!(j>>>0>0))break;m=h,e=g,f=e+1|0,g=f,d[e>>0]=m}o=q}function os(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,Q=0;return Q=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),n=a,A=b,K=n,L=0|Lc(K,1,24),J=L,M=A,N=M>>>0<8,N&&(A=8),O=A,c=O+-1|0,A=c,d=A,e=d>>>1,g=A,h=g|e,A=h,i=A,j=i>>>2,k=A,l=k|j,A=l,m=A,q=m>>>4,r=A,s=r|q,A=s,t=A,u=t>>>8,v=A,w=v|u,A=w,x=A,y=x>>>16,z=A,B=z|y,A=B,C=A,D=C+1|0,A=D,E=A,F=J,f[F>>2]=E,G=n,H=J,ms(G,H),I=J,o=Q,0|I}function ps(a){a|=0;var b=0,c=0,d=0,f=0;return f=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),b=a,c=b,d=0|os(c,8),o=f,0|d}function qs(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,j=0,k=0,l=0,m=0,q=0;if(q=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),e=a,g=b,h=g,!(0!=(0|h)))return void(o=q);j=e,k=g,l=k+16|0,m=0|f[l>>2],xc(j,m),c=e,d=g,xc(c,d),o=q}function rs(a,b,c){a|=0,b|=0,c|=0;var e=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ga=0;for(Ga=o,o=o+64|0,(0|o)>=(0|p)&&ca(64),ia=Ga+24|0,C=a,N=b,Y=c,j=Y,k=j>>>0<8,e=k?8:c,Y=e,l=Y,m=l+-1|0,Y=m,n=Y,q=n>>>1,r=Y,s=r|q,Y=s,t=Y,u=t>>>2,v=Y,w=v|u,Y=w,x=Y,y=x>>>4,z=Y,A=z|y,Y=A,B=Y,D=B>>>8,E=Y,F=E|D,Y=F,G=Y,H=G>>>16,I=Y,J=I|H,Y=J,K=Y,L=K+1|0,Y=L,M=N,O=M+12|0,P=0|f[O>>2],ta=P,Q=N,R=Q+16|0,S=0|f[R>>2],Da=S,T=N,U=T+20|0,V=0|f[U>>2],V,W=N,X=0|f[W>>2],g=X,Z=Y,f[ia>>2]=Z,$=C,ms($,ia),h=0;;){if(_=h,aa=g,!(_>>>0<aa>>>0))break;da=ta,ea=h,fa=(ea>>>0)/4&-1,ga=da+fa|0,ha=0|d[ga>>0],ja=255&ha,ka=h,la=(ka>>>0)%4&-1,ma=68258+la|0,na=0|d[ma>>0],oa=255&na,pa=ja&oa,qa=0!=(0|pa),qa||(ra=C,sa=Da,ua=h,va=sa+(ua<<2)|0,wa=0|f[va>>2],xa=0|ss(ra,ia,wa,0),xa),ya=h,za=ya+1|0,h=za}Aa=N,f[Aa>>2]=0|f[ia>>2],f[Aa+4>>2]=0|f[ia+4>>2],f[Aa+8>>2]=0|f[ia+8>>2],f[Aa+12>>2]=0|f[ia+12>>2],f[Aa+16>>2]=0|f[ia+16>>2],f[Aa+20>>2]=0|f[ia+20>>2],Ba=C,Ca=Da,xc(Ba,Ca),o=Ga}function ss(a,b,c,e){a|=0,b|=0,c|=0,e|=0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,$a=0,_a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,$b=0,_b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0;for(gc=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),eb=a,pb=b,Ab=c,Lb=e,t=0,E=pb,P=E+8|0,$=0|f[P>>2],ka=pb,va=0|f[ka>>2],ya=va>>>2,za=pb,Aa=0|f[za>>2],Ba=Aa>>>1,Ca=ya|Ba,Da=$>>>0>=Ca>>>0,Da&&(Ea=eb,Fa=pb,Ga=pb,Ha=0|f[Ga>>2],Ia=Ha<<1,rs(Ea,Fa,Ia)),Ja=Ab,Ka=Ab,La=Ka<<2,Ma=Ja^La,Na=Ab,Oa=Na>>>2,Pa=Ma^Oa,Qa=pb,Ra=0|f[Qa>>2],Sa=Ra-1|0,Ta=Pa&Sa,Wb=Ta,Ua=pb,Wa=0|f[Ua>>2],g=Wa;;){if(Xa=pb,Ya=Xa+12|0,Za=0|f[Ya>>2],$a=Wb,_a=($a>>>0)/4&-1,ab=Za+_a|0,bb=0|d[ab>>0],cb=255&bb,db=Wb,fb=(db>>>0)%4&-1,gb=68250+fb|0,hb=0|d[gb>>0],ib=255&hb,jb=cb&ib,kb=0!=(0|jb),!(1^kb))break;if(mb=pb,nb=mb+12|0,ob=0|f[nb>>2],qb=Wb,rb=(qb>>>0)/4&-1,sb=ob+rb|0,tb=0|d[sb>>0],ub=255&tb,vb=Wb,wb=(vb>>>0)%4&-1,xb=68254+wb|0,yb=0|d[xb>>0],zb=255&yb,Bb=ub&zb,0!=(0|Bb))Qb=g,Rb=pb,Sb=0|f[Rb>>2],(0|Qb)==(0|Sb)&&(Ub=Wb,g=Ub);else if(Db=pb,Eb=Db+16|0,Fb=0|f[Eb>>2],Gb=Wb,Hb=Fb+(Gb<<2)|0,Ib=0|f[Hb>>2],Jb=Ab,(0|Ib)==(0|Jb)){fc=7;break}Vb=Wb,Xb=t,Yb=Xb+1|0,t=Yb,Zb=Vb+Yb|0,$b=pb,_b=0|f[$b>>2],ac=_b-1|0,bc=Zb&ac,Wb=bc}return 7==(0|fc)?(Mb=Lb,Nb=0!=(0|Mb),Nb&&(Ob=Lb,f[Ob>>2]=0),Pb=Wb,Va=Pb,xa=Va,o=gc,0|xa):(cc=g,dc=pb,ec=0|f[dc>>2],h=(0|cc)!=(0|ec),i=Ab,j=pb,k=j+16|0,l=0|f[k>>2],h?(m=g,n=l+(m<<2)|0,f[n>>2]=i,q=g,r=(q>>>0)%4&-1,s=68254+r|0,u=0|d[s>>0],v=255&u,w=-1^v,x=pb,y=x+12|0,z=0|f[y>>2],A=g,B=(A>>>0)/4&-1,C=z+B|0,D=0|d[C>>0],F=255&D,G=F&w,H=255&G,d[C>>0]=H,I=pb,J=I+4|0,K=0|f[J>>2],L=K+1|0,f[J>>2]=L,M=Lb,N=0!=(0|M),N&&(O=Lb,f[O>>2]=2),Q=g,Va=Q,xa=Va,o=gc,0|xa):(R=Wb,S=l+(R<<2)|0,f[S>>2]=i,T=Wb,U=(T>>>0)%4&-1,V=68250+U|0,W=0|d[V>>0],X=255&W,Y=-1^X,Z=pb,_=Z+12|0,aa=0|f[_>>2],ba=Wb,da=(ba>>>0)/4&-1,ea=aa+da|0,fa=0|d[ea>>0],ga=255&fa,ha=ga&Y,ia=255&ha,d[ea>>0]=ia,ja=pb,la=ja+4|0,ma=0|f[la>>2],na=ma+1|0,f[la>>2]=na,oa=pb,pa=oa+8|0,qa=0|f[pa>>2],ra=qa+1|0,f[pa>>2]=ra,sa=Lb,ta=0!=(0|sa),ta&&(ua=Lb,f[ua>>2]=1),wa=Wb,Va=wa,xa=Va,o=gc,0|xa))}function ts(a,b,c,e,g){a|=0,b|=0,c|=0,e|=0,g|=0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,O=0,P=0,Q=0,R=0,T=0,U=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,_a=0;if(_a=o,o=o+80|0,(0|o)>=(0|p)&&ca(80),i=_a+56|0,h=_a+48|0,j=_a+24|0,n=_a+8|0,q=_a,Z=b,ja=c,ua=e,g,k=0,r=Z,s=0|ps(r),m=s,t=ja,!(t<<24>>24!=0)&&(v=ua,w=0|f[v>>2],x=w>>>11,y=524288&x,0!=(0|y))){A=ua,B=0|f[A>>2],C=B>>>11,D=524288&C,E=0!=(0|D);a:if(E)for(F=ua,G=F+20|0,H=0|f[G>>2],ua=H;;){if(I=ua,J=0|f[I>>2],K=J>>>11,L=1048576&K,M=0!=(0|L),!(1^M))break a;O=ua,P=O+20|0,Q=0|f[P>>2],ua=Q}k=1}for(l=0;;){if(R=ua,!(0!=(0|R)))break;if(T=ua,U=l,!((0|T)!=(0|U)))break;if(W=Z,X=ua,Y=m,us(W,X,Y),$=ua,_=0|f[$>>2],aa=255&_,ba=11!=(0|aa),da=k,ea=da<<24>>24!=0,ba|ea&&(fa=ua,ga=0|f[fa>>2],ha=255&ga,ia=12==(0|ha),ka=ja,la=ka<<24>>24!=0,!(ia|la)))break;ma=ua,l=ma,na=ua,oa=na+20|0,pa=0|f[oa>>2],ua=pa}for(qa=Z,Ln(n,qa),f[j>>2]=0|f[n>>2],f[j+4>>2]=0|f[n+4>>2],Qa=0;;){if(ra=Qa,sa=m,ta=0|f[sa>>2],!(ra>>>0<ta>>>0))break;wa=m,xa=wa+12|0,ya=0|f[xa>>2],za=Qa,Aa=(za>>>0)/4&-1,Ba=ya+Aa|0,Ca=0|d[Ba>>0],Da=255&Ca,Ea=Qa,Ga=(Ea>>>0)%4&-1,Ha=68258+Ga|0,Ia=0|d[Ha>>0],Ja=255&Ia,Ka=Da&Ja,La=0!=(0|Ka),La||(Ma=Z,Na=m,Oa=Na+16|0,Pa=0|f[Oa>>2],Ra=Qa,Sa=Pa+(Ra<<2)|0,Ta=0|f[Sa>>2],vs(q,Ta),f[h>>2]=0|f[j>>2],f[h+4>>2]=0|f[j+4>>2],f[i>>2]=0|f[q>>2],f[i+4>>2]=0|f[q+4>>2],Zn(Ma,h,i)),Ua=Qa,Va=Ua+1|0,Qa=Va}Wa=Z,Xa=m,qs(Wa,Xa),f[a>>2]=0|f[j>>2],f[a+4>>2]=0|f[j+4>>2],o=_a}function us(a,b,c){a|=0,b|=0,c|=0;var e=0,g=0,i=0,j=0,k=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,aa=0;if(aa=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),B=a,M=b,W=c,Z=M,$=Z+16|0,e=0|f[$>>2],Y=e,g=Y,!(0!=(0|g)))return void(o=aa);for(X=0;;){if(i=X,j=Y,k=0|f[j>>2],!(i>>>0<k>>>0))break;m=Y,n=m+12|0,q=0|f[n>>2],r=X,s=(r>>>0)/4&-1,t=q+s|0,u=0|d[t>>0],v=255&u,w=X,x=(w>>>0)%4&-1,y=68258+x|0,z=0|d[y>>0],A=255&z,C=v&A,D=0!=(0|C),D||(E=Y,F=E+20|0,G=0|f[F>>2],H=X,I=G+(H<<2)|0,J=0|f[I>>2],0!=(0|J)&&(L=B,N=W,O=Y,P=O+16|0,Q=0|f[P>>2],R=X,S=Q+(R<<2)|0,T=0|f[S>>2],ss(L,N,T,0))),U=X,V=U+1|0,X=V}o=aa}function vs(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,i=0;i=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),d=i,c=b,e=d+4|0,f[e>>2]=4,g=c,f[d>>2]=g,f[a>>2]=0|f[d>>2],f[a+4>>2]=0|f[d+4>>2],o=i}function ws(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,x=0,y=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0;switch(_=o,o=o+112|0,(0|o)>=(0|p)&&ca(112),g=_+96|0,e=_+88|0,d=_+80|0,Y=_,O=_+56|0,T=_+48|0,V=_+32|0,W=_+24|0,X=_+16|0,h=_+8|0,D=b,i=D,j=O+8|0,f[Y>>2]=O,Z=Y+4|0,f[Z>>2]=j,k=0|Kp(i,68262,Y),U=k,0|U){case 0:m=D,n=D,q=0|sp(n,68266),Ar(m,q,75764);break;case 1:$=3}do{if(3==(0|$)){if(r=O+8|0,s=D,f[d>>2]=0|f[O>>2],f[d+4>>2]=0|f[O+4>>2],Wg(V,s,d),f[r>>2]=0|f[V>>2],f[r+4>>2]=0|f[V+4>>2],t=O+8|0,u=t+4|0,v=0|f[u>>2],0==(0|v)&&(x=O+8|0,y=0|f[x>>2],!(0!=(0|y))))break;U=2,A=D,B=0|sp(A,68266),fs(W,B),f[O>>2]=0|f[W>>2],f[O+4>>2]=0|f[W+4>>2]}}while(0);C=D,E=U,Ir(X,C,E,O),f[T>>2]=0|f[X>>2],f[T+4>>2]=0|f[X+4>>2],F=D,G=0|f[T>>2],H=D,I=0|ji(H,68279,6),J=D,K=D,L=K+12|0,M=0|f[L>>2],N=M+16|0,P=0|f[N>>2],Q=P+28|0,R=0|f[Q>>2],xs(h,J,R),f[e>>2]=0|f[h>>2],f[e+4>>2]=0|f[h+4>>2],Zi(F,G,I,e),S=D,f[g>>2]=0|f[T>>2],f[g+4>>2]=0|f[T+4>>2],xr(S,g)}function xs(a,b,c){a|=0,b|=0,c|=0;var e=0,g=0,h=0,i=0,k=0;k=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),g=k,e=c,h=g+4|0,f[h>>2]=7,i=e,f[g>>2]=i,f[a>>2]=0|f[g>>2],f[a+4>>2]=0|f[g+4>>2],o=k}function ys(a){a|=0;var b=0,c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,$a=0,_a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,lb=0;lb=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),b=a,O=b,Z=0|pp(O,69662),D=Z,ja=b,ua=ja+84|0,f[ua>>2]=Z,Fa=b,Qa=D,Xp(Fa,Qa,68286,283,0),_a=b,c=D,Xp(_a,c,68299,284,0),q=b,v=D,Xp(q,v,68316,283,0),w=b,x=D,Xp(w,x,68326,285,0),y=b,z=D,Xp(y,z,68342,286,16384),A=b,B=D,Ip(A,B,68348,199,0),C=b,E=D,Ip(C,E,69201,287,262144),F=b,G=D,Ip(F,G,68364,288,262144),H=b,I=D,Ip(H,I,69591,289,262144),J=b,K=D,Ip(J,K,68367,290,0),L=b,M=D,Ip(L,M,68374,291,4096),N=b,P=D,Ip(N,P,68286,283,0),Q=b,R=D,Ip(Q,R,68383,292,0),S=b,T=D,Ip(S,T,68389,293,0),U=b,V=D,Ip(U,V,68395,294,0),W=b,X=D,Ip(W,X,69289,287,262144),Y=b,$=D,Ip(Y,$,68399,287,262144),_=b,aa=D,Ip(_,aa,68406,295,4096),ba=b,da=D,Ip(ba,da,68299,284,0),ea=b,fa=D,Ip(ea,fa,68413,296,0),ga=b,ha=D,Ip(ga,ha,69294,297,262144),ia=b,ka=D,Ip(ia,ka,69281,298,0),la=b,ma=D,Ip(la,ma,68418,299,4096),na=b,oa=D,Ip(na,oa,68432,300,262144),pa=b,qa=D,Ip(pa,qa,68445,301,262144),ra=b,sa=D,Ip(ra,sa,68472,302,262144),ta=b,va=D,Ip(ta,va,68494,303,524288),wa=b,xa=D,Ip(wa,xa,68516,304,0),ya=b,za=D,Ip(ya,za,68535,305,262144),Aa=b,Ba=D,Ip(Aa,Ba,68316,283,0),Ca=b,Da=D,Ip(Ca,Da,68541,305,262144),Ea=b,Ga=D,Ip(Ea,Ga,68326,285,0),Ha=b,Ia=D,Ip(Ha,Ia,68550,306,8192),Ja=b,Ka=D,Ip(Ja,Ka,68558,307,0),La=b,Ma=D,Ip(La,Ma,68563,290,0),Na=b,Oa=D,Ip(Na,Oa,68573,308,8192),Pa=b,Ra=D,Ip(Pa,Ra,68589,309,8192),Sa=b,Ta=D,Ip(Sa,Ta,68607,310,8192),Ua=b,Va=D,Ip(Ua,Va,68342,286,4096),Wa=b,Xa=D,Ip(Wa,Xa,68622,311,262144),Ya=b,Za=D,Ip(Ya,Za,68647,312,4096),$a=b,ab=D,Ip($a,ab,68659,291,4096),bb=b,cb=D,Ip(bb,cb,68664,313,8192),db=b,eb=D,Ip(db,eb,68682,314,4096),fb=b,gb=D,Ip(fb,gb,69276,282,0),hb=b,ib=D,Ip(hb,ib,69580,315,262144),jb=b,d=b,e=d+32|0,g=0|f[e>>2],h=b,i=h+84|0,j=0|f[i>>2],Qp(jb,g,j),k=b,l=b,m=l+40|0,n=0|f[m>>2],r=b,s=0|ji(r,68395,3),t=b,u=0|ji(t,68389,5),jq(k,n,s,u),o=lb}function zs(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Ra=0;if(Ra=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),A=b,Na=A,d=Na+12|0,e=0|f[d>>2],g=e+16|0,h=0|f[g>>2],L=h,i=L,j=i+8|0,k=0|f[j>>2],l=k+8|0,W=l,m=L,n=m+-48|0,L=n,q=L,r=A,s=r+12|0,t=0|f[s>>2],u=t+20|0,v=0|f[u>>2],q>>>0<=v>>>0)ga=0;else{x=L,y=x+4|0,z=0|f[y>>2],B=z+20|0,C=0|f[B>>2],D=0!=(0|C);do{if(D){for(E=L,F=E+4|0,G=0|f[F>>2],H=G+20|0,I=0|f[H>>2],ra=I;;){if(J=ra,K=J+4|0,M=0|f[K>>2],N=0!=(0|M),O=ra,!N)break;P=O+4|0,Q=0|f[P>>2],ra=Q}if(R=O+12|0,S=0|f[R>>2],Ca=S,T=Ca,0!=(0|T)){if(V=Ca,X=A,Y=X+12|0,Z=0|f[Y>>2],$=Z+8|0,_=0|f[$>>2],!((0|V)==(0|_))){ba=A,da=ba+12|0,ea=0|f[da>>2],fa=ea+20|0,ha=0|f[fa>>2],ia=ra,ja=ia+20|0,ka=0|f[ja>>2],la=ha+(48*ka|0)|0,L=la,ma=L,na=ma+48|0,oa=na+8|0,pa=0|f[oa>>2],qa=pa+8|0,W=qa;break}return Ys(a),void(o=Ra)}}}while(0);sa=L,ta=sa+36|0,ua=0|f[ta>>2],va=(0|ua)>0,va&&(wa=L,xa=wa+36|0,ya=0|f[xa>>2],za=W,Aa=za+(ya<<3)|0,W=Aa),Ba=W,Da=Ba+4|0,Ea=0|f[Da>>2],Fa=0==(0|Ea),Fa?(Ga=W,Ha=0|f[Ga>>2],Ia=0!=(0|Ha),Ja=1^Ia,La=Ja):La=0,Ka=1^La,Ma=1&Ka,Oa=255&Ma,ga=Oa}Pa=ga,at(a,Pa),o=Ra}function As(a,b,c){a|=0,b|=0,c|=0;var d=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,q=0,r=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,$a=0,_a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Cb=0;if(Cb=o,o=o+96|0,(0|o)>=(0|p)&&ca(96),i=Cb+88|0,h=Cb+80|0,g=Cb+72|0,d=Cb+64|0,pa=Cb+48|0,fb=Cb+24|0,qb=Cb+16|0,w=Cb,ea=b,H=ea,O=H+12|0,P=0|f[O>>2],Q=P+16|0,R=0|f[Q>>2],S=R+-48|0,T=S+4|0,U=0|f[T>>2],Aa=U,V=Aa,W=0|f[V>>2],X=W>>>11,Y=128&X,0!=(0|Y))return $=ea,Ln(a,$),void(o=Cb);if(_=Aa,aa=_+12|0,ba=0|f[aa>>2],La=ba,da=La,fa=da+24|0,ga=0|f[fa>>2],ha=0!=(0|ga),ia=ea,!ha)return Ln(a,ia),void(o=Cb);for(ja=La,ka=0|e[ja>>1],la=65535&ka,ma=la-1|0,In(fb,ia,ma),f[pa>>2]=0|f[fb>>2],f[pa+4>>2]=0|f[fb+4>>2],Wa=0;;){if(na=Wa,oa=na+1|0,qa=La,ra=0|e[qa>>1],sa=65535&ra,!(oa>>>0<sa>>>0))break;ua=La,va=ua+24|0,wa=0|f[va>>2],xa=Wa,ya=wa+(xa<<3)|0,za=0|f[ya>>2],Ba=0!=(0|za),Ba&&(Ca=ea,Da=La,Ea=Da+24|0,Fa=0|f[Ea>>2],Ga=Wa,Ha=Fa+(Ga<<3)|0,Ia=0|f[Ha>>2],vs(qb,Ia),f[d>>2]=0|f[pa>>2],f[d+4>>2]=0|f[pa+4>>2],f[g>>2]=0|f[qb>>2],f[g+4>>2]=0|f[qb+4>>2],Zn(Ca,d,g)),Ja=Wa,Ka=Ja+1|0,Wa=Ka}Ma=Aa,Na=Ma+20|0,Oa=0|f[Na>>2],Pa=0!=(0|Oa);a:if(Pa)for(Qa=Aa,Ra=Qa+20|0,Sa=0|f[Ra>>2],j=Sa;;){if(Ta=j,!(0!=(0|Ta)))break a;Va=ea,Xa=Va+12|0,Ya=0|f[Xa>>2],Za=Ya+20|0,$a=0|f[Za>>2],_a=j,ab=_a+20|0,bb=0|f[ab>>2],cb=$a+(48*bb|0)|0,db=cb+4|0,eb=0|f[db>>2],gb=0|f[eb>>2],hb=gb>>>11,ib=128&hb,jb=0!=(0|ib);b:if(!jb&&(kb=ea,lb=kb+12|0,mb=0|f[lb>>2],nb=mb+20|0,ob=0|f[nb>>2],pb=j,rb=pb+20|0,sb=0|f[rb>>2],tb=ob+(48*sb|0)|0,ub=tb+4|0,vb=0|f[ub>>2],wb=vb+12|0,xb=0|f[wb>>2],La=xb,yb=La,zb=yb+24|0,Ab=0|f[zb>>2],0!=(0|Ab)))for(Wa=0;;){if(l=Wa,m=l+1|0,n=La,q=0|e[n>>1],r=65535&q,!(m>>>0<r>>>0))break b;t=La,u=t+24|0,v=0|f[u>>2],x=Wa,y=v+(x<<3)|0,z=0|f[y>>2],A=0!=(0|z),A&&(B=ea,C=La,D=C+24|0,E=0|f[D>>2],F=Wa,G=E+(F<<3)|0,I=0|f[G>>2],vs(w,I),f[h>>2]=0|f[pa>>2],f[h+4>>2]=0|f[pa+4>>2],f[i>>2]=0|f[w>>2],f[i+4>>2]=0|f[w+4>>2],Zn(B,h,i)),J=Wa,K=J+1|0,Wa=K}L=j,M=L+4|0,N=0|f[M>>2],j=N}f[a>>2]=0|f[pa>>2],f[a+4>>2]=0|f[pa+4>>2],o=Cb}function Bs(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,n=0;n=o,o=o+48|0,(0|o)>=(0|p)&&ca(48),e=n+32|0,d=n+24|0,l=n,h=n+8|0,g=b,i=g,f[l>>2]=h,Kp(i,69199,l),j=g,f[d>>2]=0|f[c>>2],f[d+4>>2]=0|f[c+4>>2],f[e>>2]=0|f[h>>2],f[e+4>>2]=0|f[h+4>>2],k=0|kf(j,d,e),at(a,k),o=n}function Cs(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,t=0;t=o,o=o+48|0,(0|o)>=(0|p)&&ca(48),e=t+32|0,d=t+24|0,r=t,j=t+8|0,i=b,k=i,f[r>>2]=j,Kp(k,69199,r),l=i,f[d>>2]=0|f[c>>2],f[d+4>>2]=0|f[c+4>>2],f[e>>2]=0|f[j>>2],f[e+4>>2]=0|f[j+4>>2],m=0|lf(l,d,e),n=m<<24>>24!=0,q=1^n,g=1&q,h=255&g,at(a,h),o=t}function Ds(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,n=0;n=o,o=o+48|0,(0|o)>=(0|p)&&ca(48),e=n+32|0,d=n+24|0,l=n,h=n+8|0,g=b,i=g,f[l>>2]=h,Kp(i,69199,l),j=g,f[d>>2]=0|f[c>>2],f[d+4>>2]=0|f[c+4>>2],f[e>>2]=0|f[h>>2],f[e+4>>2]=0|f[h+4>>2],k=0|lf(j,d,e),at(a,k),o=n}function Es(a,b,c){a|=0,b|=0,c|=0;var d=0,g=0,i=0;i=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),d=i+8|0,f[d>>2]=0|f[c>>2],f[d+4>>2]=0|f[c+4>>2],g=0|Zr(d),ks(a,g),o=i}function Fs(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,j=0;j=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),d=j+8|0,e=b,g=e,f[d>>2]=0|f[c>>2],f[d+4>>2]=0|f[c+4>>2],h=0|iq(g,d),fs(a,h),o=j}function Gs(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,r=0;r=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),d=r+24|0,m=r,g=r+12|0,h=r+8|0,e=b,i=e,f[m>>2]=g,n=m+4|0,f[n>>2]=h,Kp(i,68856,m),j=e,k=0|f[h>>2],l=0|f[g>>2],f[d>>2]=0|f[c>>2],f[d+4>>2]=0|f[c+4>>2],ct(a,j,k,l,d),o=r}function Hs(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,F=0;if(F=o,o=o+64|0,(0|o)>=(0|p)&&ca(64),h=F+48|0,g=F+40|0,e=F+32|0,d=F+24|0,D=F,x=F+8|0,w=b,y=w,f[D>>2]=x,Kp(y,69199,D),z=w,f[d>>2]=0|f[c>>2],f[d+4>>2]=0|f[c+4>>2],f[e>>2]=0|f[x>>2],f[e+4>>2]=0|f[x+4>>2],A=0|kf(z,d,e),A<<24>>24!=0)return f[a>>2]=0|f[c>>2],f[a+4>>2]=0|f[c+4>>2],void(o=F);C=c+4|0,i=0|f[C>>2],j=x+4|0,k=0|f[j>>2],l=(0|i)!=(0|k),l&&(t=w,u=w,v=0|sp(u,69204),Ar(t,v,68810)),m=w,f[g>>2]=0|f[c>>2],f[g+4>>2]=0|f[c+4>>2],n=0|iq(m,g),q=w,f[h>>2]=0|f[x>>2],f[h+4>>2]=0|f[x+4>>2],r=0|iq(q,h),s=(0|n)!=(0|r),s&&(t=w,u=w,v=0|sp(u,69204),Ar(t,v,68810)),f[a>>2]=0|f[c>>2],f[a+4>>2]=0|f[c+4>>2],o=F}function Is(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,n=0;n=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),d=n+24|0,l=n,g=n+8|0,e=b,h=e,f[l>>2]=g,Kp(h,68805,l),i=e,j=0|f[g>>2],f[d>>2]=0|f[c>>2],f[d+4>>2]=0|f[c+4>>2],k=0|ls(i,d,j),at(a,k),o=n}function Js(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,r=0;r=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),d=r+16|0,n=r,h=r+4|0,g=b,i=g,f[n>>2]=h,Kp(i,68770,n),j=g,k=0|f[h>>2],fj(j,k),l=g,m=0|f[h>>2],f[d>>2]=0|f[c>>2],f[d+4>>2]=0|f[c+4>>2],e=0|dj(l,d,m),at(a,e),o=r}function Ks(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,q=0;q=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),d=q+16|0,m=q,g=q+4|0,e=b,h=e,f[m>>2]=g,Kp(h,68770,m),i=e,j=0|f[g>>2],fj(i,j),k=e,l=0|f[g>>2],f[d>>2]=0|f[c>>2],f[d+4>>2]=0|f[c+4>>2],Xi(a,k,d,l),o=q}function Ls(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,t=0;t=o,o=o+48|0,(0|o)>=(0|p)&&ca(48),e=t+32|0,d=t+24|0,q=t,i=t+16|0,j=t+8|0,h=b,k=h,f[q>>2]=i,r=q+4|0,f[r>>2]=j,Kp(k,68807,q),l=h,m=0|f[i>>2],fj(l,m),n=h,g=0|f[i>>2],f[d>>2]=0|f[c>>2],f[d+4>>2]=0|f[c+4>>2],f[e>>2]=0|f[j>>2],f[e+4>>2]=0|f[j+4>>2],bj(n,d,g,e),f[a>>2]=0|f[j>>2],f[a+4>>2]=0|f[j+4>>2],o=t}function Ms(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,n=0;n=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),d=n+24|0,l=n,g=n+8|0,e=b,h=e,f[l>>2]=g,Kp(h,68805,l),i=e,j=0|f[g>>2],f[d>>2]=0|f[c>>2],f[d+4>>2]=0|f[c+4>>2],k=0|Kf(i,d,j),at(a,k),o=n}function Ns(a,b,c){a|=0,b|=0,c|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,n=0;n=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),e=n+8|0,l=n,h=n+16|0,g=b,d[h>>0]=1,i=g,f[l>>2]=h,Kp(i,68724,l),j=g,k=0|d[h>>0],f[e>>2]=0|f[c>>2],f[e+4>>2]=0|f[c+4>>2],bt(a,j,k,e,0),o=n}function Os(a,b,c){a|=0,b|=0,c|=0;var f=0;f=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),Ys(a),o=f}function Ps(a,b,c){a|=0,b|=0,c|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,n=0;n=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),e=n+8|0,l=n,h=n+16|0,g=b,d[h>>0]=1,i=g,f[l>>2]=h,Kp(i,68724,l),j=g,k=0|d[h>>0],f[e>>2]=0|f[c>>2],f[e+4>>2]=0|f[c+4>>2],bt(a,j,k,e,2),o=n}function Qs(a,b,c){a|=0,b|=0,c|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,n=0;n=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),e=n+8|0,l=n,h=n+16|0,g=b,d[h>>0]=1,i=g,f[l>>2]=h,Kp(i,68724,l),j=g,k=0|d[h>>0],f[e>>2]=0|f[c>>2],f[e+4>>2]=0|f[c+4>>2],bt(a,j,k,e,4),o=n}function Rs(a,b,c){a|=0,b|=0,c|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,n=0;n=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),e=n+8|0,l=n,h=n+16|0,g=b,d[h>>0]=1,i=g,f[l>>2]=h,Kp(i,68724,l),j=g,k=0|d[h>>0],f[e>>2]=0|f[c>>2],f[e+4>>2]=0|f[c+4>>2],bt(a,j,k,e,0),o=n}function Ss(a,b,c){a|=0,b|=0,c|=0;var e=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;if(C=o,o=o+64|0,(0|o)>=(0|p)&&ca(64),e=C+48|0,A=C+8|0,z=C,t=C+40|0,u=C+32|0,v=C+24|0,w=C+16|0,s=b,x=s,f[z>>2]=t,Kp(x,68770,z),y=s,g=0|f[t>>2],fj(y,g),h=s,i=0|f[t>>2],f[e>>2]=0|f[c>>2],f[e+4>>2]=0|f[c+4>>2],lj(v,h,e,i),f[u>>2]=0|f[v>>2],f[u+4>>2]=0|f[v+4>>2],j=u+4|0,k=0|f[j>>2],!(5==(0|k)))return f[a>>2]=0|f[u>>2],f[a+4>>2]=0|f[u+4>>2],void(o=C);m=s,n=0|f[t>>2],q=s,r=0|f[t>>2],ui(w,q,r),d[A>>0]=0|d[w>>0],d[A+1>>0]=0|d[w+1>>0],d[A+2>>0]=0|d[w+2>>0],d[A+3>>0]=0|d[w+3>>0],d[A+4>>0]=0|d[w+4>>0],d[A+5>>0]=0|d[w+5>>0],d[A+6>>0]=0|d[w+6>>0],d[A+7>>0]=0|d[w+7>>0],Er(m,n,68772,A)}function Ts(a,b,c){a|=0,b|=0,c|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,E=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Ba=0;Ba=o,o=o+160|0,(0|o)>=(0|p)&&ca(160),k=Ba+136|0,j=Ba+128|0,i=Ba+120|0,h=Ba+112|0,g=Ba+104|0,e=Ba+96|0,ya=Ba+8|0,xa=Ba,S=Ba+80|0,ua=Ba+145|0,wa=Ba+64|0,l=Ba+56|0,m=Ba+48|0,n=Ba+40|0,q=Ba+24|0,r=Ba+16|0,H=b,d[ua>>0]=0,va=1,s=H,f[xa>>2]=S,za=xa+4|0,f[za>>2]=ua,Kp(s,68727,xa),t=S+4|0,u=0|f[t>>2],v=4==(0|u);do{if(v)w=0|f[S>>2],ba=w;else{if(x=S+4|0,y=0|f[x>>2],z=16==(0|y),z||(A=H,f[e>>2]=0|f[S>>2],f[e+4>>2]=0|f[S+4>>2],Wg(l,A,e),f[wa>>2]=0|f[l>>2],f[wa+4>>2]=0|f[l+4>>2],B=wa+4|0,C=0|f[B>>2],0==(0|C)&&(E=0|f[wa>>2],0!=(0|E)||(G=H,f[g>>2]=0|f[S>>2],f[g+4>>2]=0|f[S+4>>2],Ef(m,G,g),f[wa>>2]=0|f[m>>2],f[wa+4>>2]=0|f[m+4>>2],I=H,J=H,K=0|sp(J,69204),d[ya>>0]=0|d[wa>>0],d[ya+1>>0]=0|d[wa+1>>0],d[ya+2>>0]=0|d[wa+2>>0],d[ya+3>>0]=0|d[wa+3>>0],d[ya+4>>0]=0|d[wa+4>>0],d[ya+5>>0]=0|d[wa+5>>0],d[ya+6>>0]=0|d[wa+6>>0],d[ya+7>>0]=0|d[wa+7>>0],Dr(I,K,68731,ya)))),L=H,f[h>>2]=0|f[S>>2],f[h+4>>2]=0|f[S+4>>2],qi(n,L,h),f[wa>>2]=0|f[n>>2],f[wa+4>>2]=0|f[n+4>>2],M=wa+4|0,N=0|f[M>>2],0==(0|N)&&(P=0|f[wa>>2],!(0!=(0|P)))){va=0;break}R=0|f[wa>>2],ba=R}}while(0);if(T=va,U=T<<24>>24!=0,U&&(V=H,W=ba,X=0|d[ua>>0],Y=X<<24>>24!=0,Z=1^Y,$=1&Z,f[i>>2]=0|f[c>>2],f[i+4>>2]=0|f[c+4>>2],_=0|_s(V,i,W,$),va=_),aa=va,!(aa<<24>>24!=0)&&(ea=H,fa=0|ji(ea,68750,19),na=fa,ga=H,ha=na,ia=0|d[ua>>0],ja=ia<<24>>24!=0,ka=1^ja,la=1&ka,f[j>>2]=0|f[c>>2],f[j+4>>2]=0|f[c+4>>2],ma=0|_s(ga,j,ha,la),ma<<24>>24!=0))return f[q>>2]=0|f[S>>2],f[q+4>>2]=0|f[S+4>>2],pa=q+8|0,qa=0|d[ua>>0],at(r,qa),f[pa>>2]=0|f[r>>2],f[pa+4>>2]=0|f[r+4>>2],ra=H,sa=na,f[k>>2]=0|f[c>>2],f[k+4>>2]=0|f[c+4>>2],Yj(a,ra,k,sa,2,q),void(o=Ba);ta=va,at(a,ta),o=Ba}function Us(a,b,c){a|=0,b|=0,c|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,n=0;n=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),e=n+8|0,l=n,h=n+16|0,g=b,d[h>>0]=1,i=g,f[l>>2]=h,Kp(i,68724,l),j=g,k=0|d[h>>0],f[e>>2]=0|f[c>>2],f[e+4>>2]=0|f[c+4>>2],$s(a,j,k,e),o=n}function Vs(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,U=0;U=o,o=o+48|0,(0|o)>=(0|p)&&ca(48),d=U+40|0,R=U,M=U+24|0,N=U+16|0,O=U+8|0,B=b,Zs(N),P=B,f[R>>2]=M,S=R+4|0,f[S>>2]=N,Kp(P,68706,R),Q=N+4|0,e=0|f[Q>>2],g=0==(0|e),g&&(h=0|f[N>>2],0!=(0|h)||(j=B,k=B,l=0|sp(k,69160),Ar(j,l,68709))),m=B,n=B,q=n+44|0,r=0|f[q>>2],s=0|Tc(m,13,r),L=s,t=L,u=0|f[N>>2],pt(t,u),v=L,w=0|f[v>>2],x=w>>>11,y=256|x,z=0|f[v>>2],A=2097151&y,C=A<<11,D=2047&z,E=D|C,f[v>>2]=E,F=B,G=B,f[d>>2]=0|f[c>>2],f[d+4>>2]=0|f[c+4>>2],Vp(O,G,d),H=0|f[O>>2],I=0|f[M>>2],J=L,Gp(F,H,I,J),K=0|f[M>>2],vs(a,K),o=U}function Ws(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,u=0,v=0,w=0,x=0,y=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0;for(L=o,o=o+96|0,(0|o)>=(0|p)&&ca(96),g=L+80|0,e=L+72|0,d=L+64|0,J=L,D=L+48|0,H=L+24|0,I=L+16|0,h=L+8|0,C=b,i=C,j=0|ji(i,69591,3),G=j,k=C,f[d>>2]=0|f[c>>2],f[d+4>>2]=0|f[c+4>>2],io(H,k,d),l=C,f[J>>2]=D,Kp(l,69199,J),m=0|f[H>>2],n=m+12|0,q=0|f[n>>2],F=q,E=0;;){if(r=E,s=F,!((0|r)<(0|s))){K=6;break}if(u=C,v=E,f[e>>2]=0|f[H>>2],f[e+4>>2]=0|f[H+4>>2],ko(h,e,v),w=G,f[g>>2]=0|f[h>>2],f[g+4>>2]=0|f[h+4>>2],Yj(I,u,g,w,1,D),x=I+4|0,y=0|f[x>>2],0!=(0|y)){K=4;break}A=E,B=A+1|0,E=B}return 4==(0|K)?(Xs(a),void(o=L)):6==(0|K)?(Ys(a),void(o=L)):void 0}function Xs(a){a|=0;var b=0,c=0,e=0;e=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),b=e,c=b+4|0,f[c>>2]=2,f[b>>2]=1,f[a>>2]=0|f[b>>2],f[a+4>>2]=0|f[b+4>>2],o=e}function Ys(a){a|=0;var b=0,c=0,e=0;e=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),b=e,c=b+4|0,f[c>>2]=0,f[b>>2]=1,f[a>>2]=0|f[b>>2],f[a+4>>2]=0|f[b+4>>2],o=e}function Zs(a){a|=0;var b=0,c=0,e=0;e=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),b=e,c=b+4|0,f[c>>2]=0,f[b>>2]=0,f[a>>2]=0|f[b>>2],f[a+4>>2]=0|f[b+4>>2],o=e}function $s(a,b,c,e){a|=0,b|=0,c|=0,e|=0;var g=0,h=0,i=0,j=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ja=0;Ja=o,o=o+80|0,(0|o)>=(0|p)&&ca(80),i=Ja+56|0,h=Ja+48|0,g=Ja+40|0,xa=Ja+24|0,l=Ja+8|0,m=Ja,R=b,aa=c,n=R,q=0|ps(n),Ga=q,r=R,f[g>>2]=0|f[e>>2],f[g+4>>2]=0|f[e+4>>2],s=0|cs(r,g),Fa=s,t=Fa,u=0!=(0|t),u&&(v=Fa,w=0|f[v>>2],x=255&w,12==(0|x)&&(z=R,A=Fa,B=Ga,us(z,A,B),C=Fa,D=C+20|0,E=0|f[D>>2],Fa=E)),F=aa,G=F<<24>>24!=0,H=Fa,I=0!=(0|H),Ha=G&I;a:if(Ha)for(;;){if(J=Fa,K=0|f[J>>2],L=255&K,!(12==(0|L)||(N=Fa,O=0|f[N>>2],P=255&O,11==(0|P))))break a;if(S=R,T=Fa,U=Ga,us(S,T,U),V=Fa,W=V+20|0,X=0|f[W>>2],Fa=X,j=Fa,!(0!=(0|j)))break}for(Y=R,Ln(l,Y),f[xa>>2]=0|f[l>>2],f[xa+4>>2]=0|f[l+4>>2],ma=0;;){if(Z=ma,$=Ga,_=0|f[$>>2],!(Z>>>0<_>>>0))break;da=Ga,ea=da+12|0,fa=0|f[ea>>2],ga=ma,ha=(ga>>>0)/4&-1,ia=fa+ha|0,ja=0|d[ia>>0],ka=255&ja,la=ma,na=(la>>>0)%4&-1,oa=68258+na|0,pa=0|d[oa>>0],qa=255&pa,ra=ka&qa,sa=0!=(0|ra),sa||(ta=R,ua=Ga,va=ua+16|0,wa=0|f[va>>2],ya=ma,za=wa+(ya<<2)|0,Aa=0|f[za>>2],vs(m,Aa),f[h>>2]=0|f[xa>>2],f[h+4>>2]=0|f[xa+4>>2],f[i>>2]=0|f[m>>2],f[i+4>>2]=0|f[m+4>>2],Zn(ta,h,i)),Ba=ma,Ca=Ba+1|0,ma=Ca}Da=R,Ea=Ga,qs(Da,Ea),f[a>>2]=0|f[xa>>2],f[a+4>>2]=0|f[xa+4>>2],o=Ja}function _s(a,b,c,d){a|=0,b|=0,c|=0,d|=0;var e=0,g=0,h=0,j=0,k=0,l=0,n=0;return n=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),e=n+16|0,g=a,h=c,d,j=g,k=h,f[e>>2]=0|f[b>>2],f[e+4>>2]=0|f[b+4>>2],l=0|cq(j,e,k),o=n,0|l}function at(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,l=0;l=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),d=l,c=b,e=c,g=255&e,h=0!=(0|g),i=h?2:0,j=d+4|0,f[j>>2]=i,f[d>>2]=1,f[a>>2]=0|f[d>>2],f[a+4>>2]=0|f[d+4>>2],o=l}function bt(a,b,c,d,e){a|=0,b|=0,c|=0,d|=0,e|=0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,r=0,s=0,u=0;return u=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),h=u+16|0,g=u+8|0,m=b,n=c,e,r=n,s=r<<24>>24!=0,i=m,j=n,s?(k=m,f[g>>2]=0|f[d>>2],f[g+4>>2]=0|f[d+4>>2],l=0|cs(k,g),ts(a,i,j,l,0),void(o=u)):(f[h>>2]=0|f[d>>2],f[h+4>>2]=0|f[d+4>>2],$s(a,i,j,h),void(o=u))}function ct(a,b,c,e,g){a|=0,b|=0,c|=0,e|=0,g|=0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,U=0;for(U=o,o=o+80|0,(0|o)>=(0|p)&&ca(80),j=U+64|0,i=U+56|0,h=U+48|0,S=U+8|0,R=U,Q=U+24|0,k=U+16|0,M=b,N=c,O=e,l=N,m=0==(0|l),m&&(n=M,q=M,r=0|sp(q,69160),Ar(n,r,68858)),P=0;;){if(s=P,t=N,!((0|s)<(0|t)))break;v=M,w=O,x=P,y=w+(x<<3)|0,f[h>>2]=0|f[y>>2],f[h+4>>2]=0|f[y+4>>2],Hf(v,h,10),z=P,A=z+1|0,P=A}for(;;){if(B=N,C=B+-1|0,N=C,!(0!=(0|B)))break;E=M,F=O,G=N,H=F+(G<<3)|0,d[R>>0]=0|d[g>>0],d[R+1>>0]=0|d[g+1>>0],d[R+2>>0]=0|d[g+2>>0],d[R+3>>0]=0|d[g+3>>0],d[R+4>>0]=0|d[g+4>>0],d[R+5>>0]=0|d[g+5>>0],d[R+6>>0]=0|d[g+6>>0],d[R+7>>0]=0|d[g+7>>0],f[i>>2]=0|f[H>>2],f[i+4>>2]=0|f[H+4>>2],Xj(Q,E,i,68897,1,R),I=M,J=O,K=N,L=J+(K<<3)|0,d[S>>0]=0|d[g>>0],d[S+1>>0]=0|d[g+1>>0],d[S+2>>0]=0|d[g+2>>0],d[S+3>>0]=0|d[g+3>>0],d[S+4>>0]=0|d[g+4>>0],d[S+5>>0]=0|d[g+5>>0],d[S+6>>0]=0|d[g+6>>0],d[S+7>>0]=0|d[g+7>>0],f[j>>2]=0|f[L>>2],f[j+4>>2]=0|f[L+4>>2],Xj(k,I,j,68911,1,S)}f[a>>2]=0|f[g>>2],f[a+4>>2]=0|f[g+4>>2],o=U}function dt(a){a|=0;var b=0,c=0,d=0,e=0,g=0,h=0,i=0,k=0,l=0,m=0,q=0;return q=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),b=a,g=b,h=0|Kc(g,8),e=h,i=e,0!=(0|i)?(k=b,l=e,f[l>>2]=k,m=e,c=m+4|0,f[c>>2]=0,d=e,o=q,0|d):(d=e,o=q,0|d)}function et(a){a|=0;var b=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,t=0,u=0,v=0,w=0,y=0;if(y=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),b=a,r=b,!(0!=(0|r)))return void(o=y);for(t=b,u=t+4|0,v=0|f[u>>2],n=v;;){if(w=n,!(0!=(0|w)))break;d=n,q=d,e=n,g=0|f[e>>2],n=g,h=b,i=0|f[h>>2],j=q,xc(i,j)}k=b,l=0|f[k>>2],m=b,xc(l,m),o=y}function ft(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,ta=0,ua=0,va=0;if(va=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),A=a,L=b,ra=A,!(0!=(0|ra)))return n=0,qa=n,o=va,0|qa;for(ta=L,c=-1-ta|0,d=c+1|0,e=3&d,g=L,h=g+e|0,L=h,i=A,j=i+4|0,k=0|f[j>>2],W=k;;){if(l=W,!(0!=(0|l)))break;if(q=W,r=q+4|0,s=0|f[r>>2],t=L,u=s+t|0,v=W,w=v+8|0,x=0|f[w>>2],y=u>>>0<=x>>>0,z=W,y){ua=6;break}S=0|f[z>>2],W=S}return 6==(0|ua)?(B=z+4|0,C=0|f[B>>2],ga=C,D=L,E=W,F=E+4|0,G=0|f[F>>2],H=G+D|0,f[F>>2]=H,I=W,J=I+16|0,K=ga,M=J+K|0,N=W,O=N+12|0,f[O>>2]=M,P=W,Q=P+12|0,R=0|f[Q>>2],n=R,qa=n,o=va,0|qa):(T=A,U=L,V=0|gt(T,U),W=V,X=W,Y=0!=(0|X),Y?(Z=L,$=W,_=$+4|0,f[_>>2]=Z,aa=A,ba=aa+4|0,da=0|f[ba>>2],ea=W,f[ea>>2]=da,fa=W,ha=A,ia=ha+4|0,f[ia>>2]=fa,ja=W,ka=ja+16|0,la=W,ma=la+12|0,f[ma>>2]=ka,na=W,oa=na+12|0,pa=0|f[oa>>2],n=pa,qa=n,o=va,0|qa):(n=0,qa=n,o=va,0|qa))}function gt(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,z=0;return z=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),q=a,r=b,t=r,u=t>>>0<4096,c=u?4096:b,r=c,v=q,w=0|f[v>>2],x=r,d=16+x|0,e=0|Kc(w,d),s=e,g=s,0!=(0|g)?(i=s,j=i+4|0,f[j>>2]=0,k=r,l=s,m=l+8|0,f[m>>2]=k,n=s,o=z,0|n):(n=s,o=z,0|n)}function ht(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,$=0;return $=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),n=a,A=b,V=n,W=V+12|0,X=0|f[W>>2],Y=X+16|0,c=0|f[Y>>2],U=c,d=n,e=n,g=e+44|0,h=0|f[g>>2],i=0|Tc(d,13,h),L=i,j=L,k=j+16|0,f[k>>2]=0,l=U,m=0!=(0|l),m&&(q=U,r=q+4|0,s=0|f[r>>2],t=0!=(0|s),t&&(u=U,v=u+4|0,w=0|f[v>>2],x=w+16|0,y=0|f[x>>2],z=L,B=z+16|0,f[B>>2]=y),C=L,D=C+16|0,E=0|f[D>>2],0!=(0|E)||(G=U,H=G+44|0,I=0|f[H>>2],J=L,K=J+16|0,f[K>>2]=I)),M=A,N=L,O=N+12|0,f[O>>2]=M,P=L,Q=P+20|0,f[Q>>2]=0,R=n,S=A,_f(R,S),T=L,o=$,0|T}function it(a,b){a|=0,b|=0;var c=0,d=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,B=0;return B=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),q=a,t=b,v=q,w=t,x=0|ht(v,w),u=x,y=q,z=u,c=q,d=c+12|0,g=0|f[d>>2],h=g+16|0,i=0|f[h>>2],j=i+4|0,k=0|f[j>>2],l=k+12|0,m=0|f[l>>2],n=0|e[m>>1],r=65535&n,jt(y,z,r),s=u,o=B,0|s}function jt(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0;return M=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),A=a,F=b,G=c,I=A,J=I+12|0,K=0|f[J>>2],d=K+16|0,e=0|f[d>>2],g=e+24|0,h=0|f[g>>2],i=0!=(0|h),j=A,i?(v=j+12|0,w=0|f[v>>2],x=w+16|0,y=0|f[x>>2],z=y+24|0,B=0|f[z>>2],H=B,C=H,D=F,E=D+20|0,f[E>>2]=C,void(o=M)):(k=G,l=0|kt(j,k),H=l,m=H,n=A,q=n+12|0,r=0|f[q>>2],s=r+16|0,t=0|f[s>>2],u=t+24|0,f[u>>2]=m,C=H,D=F,E=D+20|0,f[E>>2]=C,void(o=M))}function kt(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,ga=0;return ga=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),n=a,A=b,W=n,aa=n,ba=aa+12|0,da=0|f[ba>>2],ea=da+16|0,c=0|f[ea>>2],d=c+4|0,e=0|f[d>>2],g=e+20|0,h=0|f[g>>2],i=0|Tc(W,20,h),L=i,j=A,k=L,l=0|f[k>>2],m=2097151&j,q=m<<11,r=2047&l,s=r|q,f[k>>2]=s,t=n,u=t+12|0,v=0|f[u>>2],w=v+16|0,x=0|f[w>>2],y=0|f[x>>2],z=L,B=z+16|0,f[B>>2]=y,C=n,D=C+12|0,E=0|f[D>>2],F=E+16|0,G=0|f[F>>2],H=n,I=H+12|0,J=0|f[I>>2],K=J+20|0,M=0|f[K>>2],N=G,O=M,P=N-O|0,Q=(0|P)/48&-1,R=L,S=R+20|0,f[S>>2]=Q,T=n,U=T+12|0,V=0|f[U>>2],X=V+4|0,Y=0|f[X>>2],Z=L,$=Z+12|0,f[$>>2]=Y,_=L,o=ga,0|_}function lt(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,D=0;return D=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),n=a,v=b,x=n,y=n,z=y+44|0,A=0|f[z>>2],B=0|Tc(x,13,A),w=B,c=v,d=w,e=d+12|0,f[e>>2]=c,g=w,h=0|f[g>>2],i=h>>>11,j=128|i,k=0|f[g>>2],l=2097151&j,m=l<<11,q=2047&k,r=q|m,f[g>>2]=r,s=w,t=s+20|0,f[t>>2]=0,u=w,o=D,0|u}function mt(a,b,c,d){a|=0,b|=0,c|=0,d|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,pa=0;if(pa=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),L=a,W=b,ga=c,la=d,g=L,h=W,i=0|lt(g,h),ma=i,j=L,k=ga,l=0|kt(j,k),na=l,m=ma,n=m+20|0,f[n>>2]=l,q=L,r=ma,s=ma,t=s+20|0,u=0|f[t>>2],Yc(q,r,u),v=na,w=v+20|0,f[w>>2]=-1,x=L,y=ga,z=y<<3,A=0|Jc(x,z),B=na,C=B+12|0,f[C>>2]=A,D=la,E=0!=(0|D),e=0,E){for(;;){if(F=e,G=ga,!((0|F)<(0|G)))break;I=na,J=I+12|0,K=0|f[J>>2],M=e,N=K+(M<<3)|0,O=la,P=e,Q=O+(P<<3)|0,f[N>>2]=0|f[Q>>2],f[N+4>>2]=0|f[Q+4>>2],R=e,S=R+1|0,e=S}return ka=ma,o=pa,0|ka}for(;;){if(T=e,U=ga,!((0|T)<(0|U)))break;X=na,Y=X+12|0,Z=0|f[Y>>2],$=e,_=Z+($<<3)|0,aa=_+4|0,f[aa>>2]=0,ba=na,da=ba+12|0,ea=0|f[da>>2],fa=e,ha=ea+(fa<<3)|0,f[ha>>2]=0,ia=e,ja=ia+1|0,e=ja}return ka=ma,o=pa,0|ka}function nt(a,b,c){a|=0,b|=0,c|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,G=0,H=0,I=0,J=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,fa=0;if(fa=o,o=o+48|0,(0|o)>=(0|p)&&ca(48),ba=fa,$=fa+24|0,_=fa+16|0,B=b,M=c,aa=B,e=aa+12|0,g=0|f[e>>2],h=g+16|0,i=0|f[h>>2],j=i+4|0,k=0|f[j>>2],X=k,l=X,m=l+20|0,n=0|f[m>>2],Z=n,q=X,r=0|f[q>>2],s=r>>>11,t=128&s,u=0!=(0|t),u||(v=B,w=B,x=0|sp(w,69204),Ar(v,x,68920)),y=Z,z=0!=(0|y),z||(A=B,C=B,D=0|sp(C,69204),Ar(A,D,68961)),E=M,!((0|E)<0||(G=Z,H=0|f[G>>2],I=H>>>11,J=M,(0|I)<=(0|J))))return T=Z,U=T+12|0,V=0|f[U>>2],W=M,Y=V+(W<<3)|0,f[a>>2]=0|f[Y>>2],f[a+4>>2]=0|f[Y+4>>2],void(o=fa);L=B,N=B,O=0|sp(N,69011),P=M,ot($,P),Q=Z,R=0|f[Q>>2],S=R>>>11,ot(_,S),d[ba>>0]=0|d[$>>0],d[ba+1>>0]=0|d[$+1>>0],d[ba+2>>0]=0|d[$+2>>0],d[ba+3>>0]=0|d[$+3>>0],d[ba+4>>0]=0|d[$+4>>0],d[ba+5>>0]=0|d[$+5>>0],d[ba+6>>0]=0|d[$+6>>0],d[ba+7>>0]=0|d[$+7>>0],da=ba+8|0,d[da>>0]=0|d[_>>0],d[da+1>>0]=0|d[_+1>>0],d[da+2>>0]=0|d[_+2>>0],d[da+3>>0]=0|d[_+3>>0],d[da+4>>0]=0|d[_+4>>0],d[da+5>>0]=0|d[_+5>>0],d[da+6>>0]=0|d[_+6>>0],d[da+7>>0]=0|d[_+7>>0],Dr(L,O,69022,ba)}function ot(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,i=0;i=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),d=i,c=b,e=d+4|0,f[e>>2]=3,g=c,f[d>>2]=g,f[a>>2]=0|f[d>>2],f[a+4>>2]=0|f[d+4>>2],o=i}function pt(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,Q=0;Q=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),n=a,A=b,J=A,K=0|f[J>>2],L=K>>>11,M=n,N=0|f[M>>2],O=2097151&L,c=O<<11,d=2047&N,e=d|c,f[M>>2]=e,g=n,h=g+12|0,i=A,j=i+12|0,f[h>>2]=0|f[j>>2],k=n,l=0|f[k>>2],m=l>>>11,q=128&m,r=0!=(0|q),r||(s=n,t=s+12|0,u=0|f[t>>2],v=u+56|0,w=0|f[v>>2],x=w+1|0,f[v>>2]=x),y=A,z=y+16|0,B=0|f[z>>2],C=n,D=C+16|0,f[D>>2]=B,E=A,F=E+20|0,G=0|f[F>>2],H=n,I=H+20|0,f[I>>2]=G,o=Q}function qt(a,b){a|=0,b|=0;var d=0,e=0,g=0,h=0,i=0,j=0,l=0;return l=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),a,d=b,e=d,g=e+12|0,h=0|f[g>>2],i=h+8|0,j=0|f[i>>2],o=l,0|j}function rt(a){a|=0;var b=0,c=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,da=0,ea=0,fa=0;da=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),b=a,M=b,X=0|Jc(M,60),B=X,Y=B,aa=Y,ea=74880,fa=aa+60|0;do{f[aa>>2]=0|f[ea>>2],aa=aa+4|0,ea=ea+4|0}while((0|aa)<(0|fa));Z=B,$=Z+4|0,d[$>>0]=1,_=B,c=_+8|0,f[c>>2]=2544,e=B,g=e+40|0,f[g>>2]=1,h=b,i=b,j=i+44|0,k=0|f[j>>2],Ip(h,k,69252,316,0),l=b,m=b,n=m+44|0,r=0|f[n>>2],Ip(l,r,69294,317,262144),s=b,t=b,u=t+44|0,v=0|f[u>>2],Ip(s,v,69077,318,0),w=b,x=B,y=0|ht(w,x),q=y,z=b,A=b,C=A+44|0,D=0|f[C>>2],E=b,F=0|ji(E,69604,4),G=q,Gp(z,D,F,G),H=b,I=b,J=I+44|0,K=0|f[J>>2],L=b,N=0|ji(L,69083,2),O=q,Gp(H,K,N,O),P=b,Q=b,R=Q+84|0,S=0|f[R>>2],Xp(P,S,69086,319,0),T=b,U=b,V=U+84|0,W=0|f[V>>2],Ip(T,W,69086,319,0),o=da}function st(a,b,c){a|=0,b|=0,c|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,v=0;v=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),t=v,l=v+8|0,k=b,m=k,f[t>>2]=l,Kp(m,69093,t),n=l+4|0,q=0|f[n>>2],r=0==(0|q),r&&(s=0|f[l>>2],0!=(0|s)||(e=k,g=k,h=0|sp(g,69160),Ar(e,h,69095))),i=0|f[c>>2],j=0|f[l>>2],pt(i,j),f[a>>2]=0|f[c>>2],f[a+4>>2]=0|f[c+4>>2],o=v}function tt(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,q=0,r=0,t=0;if(t=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),r=t,j=t+8|0,i=b,k=i,f[r>>2]=j,Kp(k,69199,r),l=j+4|0,m=0|f[l>>2],!(13!=(0|m)))return g=0|f[c>>2],h=0|f[j>>2],pt(g,h),f[a>>2]=0|f[c>>2],f[a+4>>2]=0|f[c+4>>2],void(o=t);q=i,d=i,e=0|sp(d,69160),Ar(q,e,69139)}function ut(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0;return ma=o,o=o+48|0,(0|o)>=(0|p)&&ca(48),A=b,g=0|f[c>>2],L=g,h=A,i=L,j=0|qt(h,i),W=j,k=L,l=0|f[k>>2],m=l>>>11,n=128&m,0!=(0|n)?(ot(a,-1),void(o=ma)):(r=W,s=0|f[r>>2],t=127&s,38!=(0|t)?(ot(a,0),void(o=ma)):(v=W,w=0|f[v>>2],x=w>>>7,y=33554431&x,ga=y,z=ga,B=z>>>18,C=31&B,ha=C,D=ga,E=D>>>13,F=31&E,ia=F,G=ga,H=G>>>12,I=1&H,ja=I,J=ga,K=J>>>7,M=31&K,d=M,N=ja,O=0!=(0|N),O?la=7:(P=L,Q=0|f[P>>2],R=Q>>>11,S=256&R,T=0!=(0|S),U=ia,V=0!=(0|U),ka=T&V,ka?la=7:(aa=ha,ba=d,da=aa+ba|0,ea=da)),7==(0|la)&&(X=ha,Y=d,Z=X+Y|0,$=Z+1|0,_=0-$|0,ea=_),e=ea,fa=e,ot(a,fa),void(o=ma)))}function vt(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,Y=0;return Y=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),W=Y,L=Y+16|0,A=b,T=A,f[W>>2]=L,Kp(T,69093,W),U=L+4|0,V=0|f[U>>2],d=0==(0|V),d&&(e=0|f[L>>2],0!=(0|e)||(h=A,i=A,j=0|sp(i,69160),Ar(h,j,69095))),k=L+4|0,l=0|f[k>>2],m=13!=(0|l),m&&(n=A,q=A,r=0|sp(q,69160),Ar(n,r,69139)),s=0|f[L>>2],R=s,t=R,u=0|f[t>>2],v=u>>>11,w=256&v,x=0!=(0|w),x?(f[a>>2]=0|f[L>>2],f[a+4>>2]=0|f[L+4>>2],void(o=Y)):(y=A,z=R,B=z+4|0,C=0|f[B>>2],D=0|Tc(y,13,C),S=D,E=S,F=R,pt(E,F),G=S,H=0|f[G>>2],I=H>>>11,J=256|I,K=0|f[G>>2],M=2097151&J,N=M<<11,O=2047&K,P=O|N,f[G>>2]=P,Q=S,wt(a,Q),void(o=Y))}function wt(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,l=0;l=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),d=l,c=b,e=c,g=0|f[e>>2],h=255&g,i=d+4|0,f[i>>2]=h,j=c,f[d>>2]=j,f[a>>2]=0|f[d>>2],f[a+4>>2]=0|f[d+4>>2],o=l}function xt(a,b,c,e,g){a|=0,b|=0,c|=0,e|=0,g|=0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0;N=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),i=N+16|0,h=N+8|0,H=b,I=g,K=H,f[h>>2]=0|f[c>>2],f[h+4>>2]=0|f[c+4>>2],f[i>>2]=0|f[e>>2],f[i+4>>2]=0|f[e+4>>2],yt(K,h,i),L=H,j=H,k=0|sp(j,69150),l=0|Tc(L,17,k),J=l,m=H,n=0|Jc(m,16),q=J,r=q+12|0,f[r>>2]=n,s=J,t=s+12|0,u=0|f[t>>2],f[u>>2]=0|f[c>>2],f[u+4>>2]=0|f[c+4>>2],v=J,w=v+12|0,x=0|f[w>>2],y=x+8|0,f[y>>2]=0|f[e>>2],f[y+4>>2]=0|f[e+4>>2],z=I,A=J,B=A+16|0,C=0|d[B>>0],D=1&z,E=-2&C,F=E|D,d[B>>0]=F,G=J,zt(a,G),o=N}function yt(a,b,c){a|=0,b|=0,c|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,K=0,M=0;return M=o,o=o+48|0,(0|o)>=(0|p)&&ca(48),e=M+40|0,K=M,C=M+24|0,F=M+8|0,B=a,G=b+4|0,H=0|f[G>>2],D=H,g=c+4|0,h=0|f[g>>2],E=h,i=D,j=3==(0|i),k=D,l=6==(0|k),j|l&&(m=E,n=3==(0|m),q=E,r=6==(0|q),n|r)?void(o=M):(s=B,d[K>>0]=0|d[c>>0],d[K+1>>0]=0|d[c+1>>0],d[K+2>>0]=0|d[c+2>>0],d[K+3>>0]=0|d[c+3>>0],d[K+4>>0]=0|d[c+4>>0],d[K+5>>0]=0|d[c+5>>0],d[K+6>>0]=0|d[c+6>>0],d[K+7>>0]=0|d[c+7>>0],f[e>>2]=0|f[b>>2],f[e+4>>2]=0|f[b+4>>2],Xj(F,s,e,69156,1,K),f[C>>2]=0|f[F>>2],f[C+4>>2]=0|f[F+4>>2],t=C+4|0,u=0|f[t>>2],0==(0|u)?(w=0|f[C>>2],0!=(0|w)?void(o=M):(y=B,z=B,A=0|sp(z,69160),Ar(y,A,69174),void 0)):void(o=M))}function zt(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,l=0;l=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),d=l,c=b,e=c,g=0|f[e>>2],h=255&g,i=d+4|0,f[i>>2]=h,j=c,f[d>>2]=j,f[a>>2]=0|f[d>>2],f[a+4>>2]=0|f[d+4>>2],o=l}function At(a,b,c){a|=0,b|=0,c|=0;var e=0,g=0,h=0,i=0,j=0,l=0;l=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),g=0|f[c>>2],e=g,h=e,i=h+12|0,j=0|f[i>>2],f[a>>2]=0|f[j>>2],f[a+4>>2]=0|f[j+4>>2],o=l}function Bt(a,b,c){a|=0,b|=0,c|=0;var e=0,g=0,h=0,i=0,j=0,k=0,m=0;m=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),g=0|f[c>>2],e=g,h=e,i=h+12|0,j=0|f[i>>2],k=j+8|0,f[a>>2]=0|f[k>>2],f[a+4>>2]=0|f[k+4>>2],o=m}function Ct(a,b,c){a|=0,b|=0,c|=0;var g=0,h=0,i=0,j=0,k=0,l=0,n=0;n=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),h=0|f[c>>2],g=h,i=g,j=i+16|0,k=0|d[j>>0],l=1&k,Dt(a,l),o=n}function Dt(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,l=0;l=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),d=l,c=b,e=c,g=255&e,h=0!=(0|g),i=h?2:0,j=d+4|0,f[j>>2]=i,f[d>>2]=1,f[a>>2]=0|f[d>>2],f[a+4>>2]=0|f[d+4>>2],o=l}function Et(a,b,c){a|=0,b|=0,c|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,z=0;z=o,o=o+80|0,(0|o)>=(0|p)&&ca(80),h=z+56|0,g=z+48|0,e=z+40|0,v=z,n=z+24|0,q=z+16|0,r=z+64|0,m=b,t=m,f[v>>2]=n,w=v+4|0,f[w>>2]=q,x=v+8|0,f[x>>2]=r,u=0|Kp(t,69194,v),s=u,i=s,j=3!=(0|i),j&&(d[r>>0]=0),k=m,l=0|d[r>>0],f[e>>2]=0|f[c>>2],f[e+4>>2]=0|f[c+4>>2],f[g>>2]=0|f[n>>2],f[g+4>>2]=0|f[n+4>>2],f[h>>2]=0|f[q>>2],f[h+4>>2]=0|f[q+4>>2],Ft(k,e,g,h,l),f[a>>2]=0|f[c>>2],f[a+4>>2]=0|f[c+4>>2],o=z}function Ft(a,b,c,e,g){a|=0,b|=0,c|=0,e|=0,g|=0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0;N=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),i=N+16|0,h=N+8|0,H=a,I=g,K=0|f[b>>2],J=K,L=H,f[h>>2]=0|f[c>>2],f[h+4>>2]=0|f[c+4>>2],f[i>>2]=0|f[e>>2],f[i+4>>2]=0|f[e+4>>2],yt(L,h,i),j=I,k=J,l=k+16|0,m=0|d[l>>0],n=1&j,q=-2&m,r=q|n,d[l>>0]=r,s=J,t=s+12|0,u=0|f[t>>2],v=0!=(0|u),v||(w=H,x=0|Jc(w,16),y=J,z=y+12|0,f[z>>2]=x),A=J,B=A+12|0,C=0|f[B>>2],f[C>>2]=0|f[c>>2],f[C+4>>2]=0|f[c+4>>2],D=J,E=D+12|0,F=0|f[E>>2],G=F+8|0,f[G>>2]=0|f[e>>2],f[G+4>>2]=0|f[e+4>>2],o=N}function Gt(a,b,c){a|=0,b|=0,c|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,oa=0;return oa=o,o=o+112|0,(0|o)>=(0|p)&&ca(112),h=oa+104|0,g=oa+96|0,k=oa+88|0,j=oa+80|0,i=oa+72|0,e=oa+64|0,ma=oa+16|0,la=oa+8|0,ka=oa,ga=oa+40|0,ha=oa+32|0,ia=oa+24|0,H=b,ja=H,f[ka>>2]=ga,Kp(ja,69199,ka),l=H,f[e>>2]=0|f[c>>2],f[e+4>>2]=0|f[c+4>>2],f[i>>2]=0|f[ga>>2],f[i+4>>2]=0|f[ga+4>>2],m=0|kf(l,e,i),m<<24>>24!=0?(Ht(a),void(o=oa)):(q=H,r=H,f[j>>2]=0|f[c>>2],f[j+4>>2]=0|f[c+4>>2],s=0|iq(r,j),f[k>>2]=0|f[ga>>2],f[k+4>>2]=0|f[ga+4>>2],t=0|ls(q,k,s),t<<24>>24!=0?(v=0|f[c>>2],S=v,w=0|f[ga>>2],ba=w,x=H,y=S,z=y+12|0,A=0|f[z>>2],B=ba,C=B+12|0,D=0|f[C>>2],d[la>>0]=0|d[D>>0],d[la+1>>0]=0|d[D+1>>0],d[la+2>>0]=0|d[D+2>>0],d[la+3>>0]=0|d[D+3>>0],d[la+4>>0]=0|d[D+4>>0],d[la+5>>0]=0|d[D+5>>0],d[la+6>>0]=0|d[D+6>>0],d[la+7>>0]=0|d[D+7>>0],f[g>>2]=0|f[A>>2],f[g+4>>2]=0|f[A+4>>2],Xj(ha,x,g,69201,1,la),E=ha+4|0,F=0|f[E>>2],!(0!=(0|F))||(I=H,J=S,K=J+12|0,L=0|f[K>>2],M=L+8|0,N=ba,O=N+12|0,P=0|f[O>>2],Q=P+8|0,d[ma>>0]=0|d[Q>>0],d[ma+1>>0]=0|d[Q+1>>0],d[ma+2>>0]=0|d[Q+2>>0],d[ma+3>>0]=0|d[Q+3>>0],d[ma+4>>0]=0|d[Q+4>>0],d[ma+5>>0]=0|d[Q+5>>0],d[ma+6>>0]=0|d[Q+6>>0],d[ma+7>>0]=0|d[Q+7>>0],f[h>>2]=0|f[M>>2],f[h+4>>2]=0|f[M+4>>2],Xj(ia,I,h,69201,1,ma),R=ia+4|0,T=0|f[R>>2],!(0!=(0|T))||(V=S,W=V+16|0,X=0|d[W>>0],Y=1&X,Z=255&Y,$=ba,_=$+16|0,aa=0|d[_>>0],da=1&aa,ea=255&da,(0|Z)!=(0|ea)))?(It(a),void(o=oa)):(Ht(a),void(o=oa))):(It(a),void(o=oa)))}function Ht(a){a|=0;var b=0,c=0,e=0;e=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),b=e,c=b+4|0,f[c>>2]=2,f[b>>2]=1,f[a>>2]=0|f[b>>2],f[a+4>>2]=0|f[b+4>>2],o=e}function It(a){a|=0;var b=0,c=0,e=0;e=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),b=e,c=b+4|0,f[c>>2]=0,f[b>>2]=1,f[a>>2]=0|f[b>>2],f[a+4>>2]=0|f[b+4>>2],o=e}function Jt(a,b,c){a|=0,b|=0,c|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,z=0,A=0,B=0,C=0,D=0,F=0,G=0,H=0,I=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,$=0;return $=o,o=o+112|0,(0|o)>=(0|p)&&ca(112),k=$+88|0,j=$+80|0,i=$+72|0,h=$+64|0,g=$+56|0,e=$+48|0,Y=$,S=$+32|0,U=$+16|0,V=$+8|0,H=b,X=0|f[c>>2],T=X,l=H,f[Y>>2]=S,Kp(l,69199,Y),m=T,n=m+12|0,q=0|f[n>>2],f[U>>2]=0|f[q>>2],f[U+4>>2]=0|f[q+4>>2],r=T,s=r+12|0,t=0|f[s>>2],u=t+8|0,f[V>>2]=0|f[u>>2],f[V+4>>2]=0|f[u+4>>2],v=H,f[e>>2]=0|f[U>>2],f[e+4>>2]=0|f[U+4>>2],f[g>>2]=0|f[S>>2],f[g+4>>2]=0|f[S+4>>2],w=0|Kt(v,e,g),x=255&w,0!=(0|x)?(z=T,A=z+16|0,B=0|d[A>>0],C=1&B,D=255&C,0!=(0|D)&&(F=H,f[h>>2]=0|f[V>>2],f[h+4>>2]=0|f[V+4>>2],f[i>>2]=0|f[S>>2],f[i+4>>2]=0|f[S+4>>2],G=0|Lt(F,h,i),I=255&G,0!=(0|I))?(P=1,O=1&P,Q=255&O,W=Q,R=W,Dt(a,R),void(o=$)):(K=H,f[j>>2]=0|f[V>>2],f[j+4>>2]=0|f[V+4>>2],f[k>>2]=0|f[S>>2],f[k+4>>2]=0|f[S+4>>2],L=0|Mt(K,j,k),M=255&L,N=0!=(0|M),P=N,O=1&P,Q=255&O,W=Q,R=W,Dt(a,R),void(o=$))):(P=0,O=1&P,Q=255&O,W=Q,R=W,Dt(a,R),void(o=$))}function Kt(a,b,c){a|=0,b|=0,c|=0;var e=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,x=0,z=0;return z=o,o=o+48|0,(0|o)>=(0|p)&&ca(48),e=z+32|0,x=z,r=z+16|0,q=a,t=q,d[x>>0]=0|d[c>>0],d[x+1>>0]=0|d[c+1>>0],d[x+2>>0]=0|d[c+2>>0],d[x+3>>0]=0|d[c+3>>0],d[x+4>>0]=0|d[c+4>>0],d[x+5>>0]=0|d[c+5>>0],d[x+6>>0]=0|d[c+6>>0],d[x+7>>0]=0|d[c+7>>0],f[e>>2]=0|f[b>>2],f[e+4>>2]=0|f[b+4>>2],Xj(r,t,e,69156,1,x),u=r+4|0,v=0|f[u>>2],3==(0|v)&&(h=0|f[r>>2],s=h,i=s,j=0==(0|i),k=s,l=-1==(0|k),j|l)?(n=1,m=n,o=z,0|m):(n=0,m=n,o=z,0|m)}function Lt(a,b,c){a|=0,b|=0,c|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,v=0;return v=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),e=v+24|0,t=v,l=v+8|0,k=a,m=k,d[t>>0]=0|d[c>>0],d[t+1>>0]=0|d[c+1>>0],d[t+2>>0]=0|d[c+2>>0],d[t+3>>0]=0|d[c+3>>0],d[t+4>>0]=0|d[c+4>>0],d[t+5>>0]=0|d[c+5>>0],d[t+6>>0]=0|d[c+6>>0],d[t+7>>0]=0|d[c+7>>0],f[e>>2]=0|f[b>>2],f[e+4>>2]=0|f[b+4>>2],Xj(l,m,e,69156,1,t),n=l+4|0,q=0|f[n>>2],r=3==(0|q),s=0|f[l>>2],g=1==(0|s),h=r?g:0,i=1&h,j=255&i,o=v,0|j}function Mt(a,b,c){a|=0,b|=0,c|=0;var e=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,x=0,z=0;return z=o,o=o+48|0,(0|o)>=(0|p)&&ca(48),e=z+32|0,x=z,r=z+16|0,q=a,t=q,d[x>>0]=0|d[c>>0],d[x+1>>0]=0|d[c+1>>0],d[x+2>>0]=0|d[c+2>>0],d[x+3>>0]=0|d[c+3>>0],d[x+4>>0]=0|d[c+4>>0],d[x+5>>0]=0|d[c+5>>0],d[x+6>>0]=0|d[c+6>>0],d[x+7>>0]=0|d[c+7>>0],f[e>>2]=0|f[b>>2],f[e+4>>2]=0|f[b+4>>2],Xj(r,t,e,69156,1,x),u=r+4|0,v=0|f[u>>2],3==(0|v)&&(h=0|f[r>>2],s=h,i=s,j=0==(0|i),k=s,l=1==(0|k),j|l)?(n=1,m=n,o=z,0|m):(n=0,m=n,o=z,0|m)}function Nt(a,b,c,d,e){a|=0,b|=0,c|=0,d|=0,e|=0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,t=0;return t=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),g=t+16|0,l=a,m=c,n=d,q=e,r=l,h=m,i=n,j=q,f[g>>2]=0|f[b>>2],f[g+4>>2]=0|f[b+4>>2],k=0|Ot(r,g,h,i,j,1),o=t,0|k}function Ot(a,b,c,e,g,h){a|=0,b|=0,c|=0,e|=0,g|=0,h|=0;var i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,L=0,M=0,N=0,O=0,Q=0,R=0,S=0,T=0,V=0,W=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ka=0,la=0,ma=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Ea=0;if(Ea=o,o=o+80|0,(0|o)>=(0|p)&&ca(80),k=Ea+56|0,j=Ea+48|0,s=Ea+8|0,t=Ea,va=a,Ba=c,Ca=e,l=g,m=h,u=0|f[b>>2],r=u,v=b+4|0,w=0|f[v>>2],17!=(0|w))return ka=0,Aa=ka,o=Ea,0|Aa;if(y=va,z=r,A=z+12|0,B=0|f[A>>2],f[j>>2]=0|f[B>>2],f[j+4>>2]=0|f[B+4>>2],Mf(s,y,j),C=0|f[s>>2],n=C,D=va,E=r,F=E+12|0,G=0|f[F>>2],H=G+8|0,f[k>>2]=0|f[H>>2],f[k+4>>2]=0|f[H+4>>2],Mf(t,D,k),I=0|f[t>>2],q=I,J=n,(0|J)<0&&(L=l,M=n,N=M+L|0,n=N,O=n,(0|O)<0))return ka=0,Aa=ka,o=Ea,0|Aa;Q=m,R=Q<<24>>24!=0;do{if(R){if(S=n,T=l,(0|S)>(0|T))return ka=0,Aa=ka,o=Ea,0|Aa;if(V=q,W=l,!((0|V)>(0|W)))break;Y=l,q=Y;break}}while(0);Z=q,$=(0|Z)<0,$&&(_=l,aa=q,ba=aa+_|0,q=ba),da=r,ea=da+16|0,fa=0|d[ea>>0],ga=1&fa,ha=ga<<24>>24!=0;do{if(!ha){if(ia=m,ia<<24>>24!=0&&(la=q,ma=l,!((0|la)<(0|ma))))break;oa=q,pa=oa+1|0,q=pa}}while(0);return qa=q,ra=n,sa=qa-ra|0,l=sa,ta=l,ua=(0|ta)<0,i=ua?0:sa,l=i,wa=n,xa=Ba,f[xa>>2]=wa,ya=l,za=Ca,f[za>>2]=ya,ka=1,Aa=ka,o=Ea,0|Aa}function Pt(a){a|=0;var b=0,c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Z=0;Z=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),b=a,A=b,L=b,T=L+32|0,U=0|f[T>>2],V=0|Cp(A,69150,U),n=V,W=n,X=0|f[W>>2],c=X>>>11,d=-256&c,e=17|d,g=n,h=0|f[g>>2],i=2097151&e,j=i<<11,k=2047&h,l=k|j,f[g>>2]=l,m=b,q=n,Ip(m,q,69214,320,0),r=b,s=n,Ip(r,s,69220,321,0),t=b,u=n,Ip(t,u,69201,322,262144),v=b,w=n,Ip(v,w,69591,323,262144),x=b,y=n,Ip(x,y,69224,324,0),z=b,B=n,Ip(z,B,69237,320,0),C=b,D=n,Ip(C,D,69243,323,262144),E=b,F=n,Ip(E,F,69252,325,4096),G=b,H=n,Ip(G,H,69263,321,0),I=b,J=n,Ip(I,J,69268,323,262144),K=b,M=n,Ip(K,M,69276,326,0),N=b,O=n,Ip(N,O,69281,327,0),P=b,Q=n,Ip(P,Q,69289,328,262144),R=b,S=n,Ip(R,S,69294,329,262144),o=Z}function Qt(a,b,c){a|=0,b|=0,c|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0;R=o,o=o+128|0,(0|o)>=(0|p)&&ca(128),k=R+112|0,j=R+104|0,i=R+96|0,h=R+88|0,g=R+80|0,e=R+72|0,K=R+56|0,L=R+48|0,N=R+32|0,O=R+24|0,P=R+16|0,l=R+8|0,m=R,H=b,n=0|f[c>>2],M=n,q=H,r=M,s=r+12|0,t=0|f[s>>2],f[e>>2]=0|f[t>>2],f[e+4>>2]=0|f[t+4>>2],Ug(N,q,e),f[K>>2]=0|f[N>>2],f[K+4>>2]=0|f[N+4>>2],u=H,v=M,w=v+12|0,x=0|f[w>>2],y=x+8|0,f[g>>2]=0|f[y>>2],f[g+4>>2]=0|f[y+4>>2],Ug(O,u,g),f[L>>2]=0|f[O>>2],f[L+4>>2]=0|f[O+4>>2],z=H,f[h>>2]=0|f[K>>2],f[h+4>>2]=0|f[K+4>>2],Gg(P,z,h),f[K>>2]=0|f[P>>2],f[K+4>>2]=0|f[P+4>>2],A=H,B=M,C=B+16|0,D=0|d[C>>0],E=1&D,F=255&E,G=0!=(0|F),I=G?3:2,f[i>>2]=0|f[K>>2],f[i+4>>2]=0|f[K+4>>2],ch(l,A,i,69331,I),J=H,f[j>>2]=0|f[K>>2],f[j+4>>2]=0|f[K+4>>2],f[k>>2]=0|f[L>>2],f[k+4>>2]=0|f[L+4>>2],fh(m,J,j,k),f[a>>2]=0|f[K>>2],f[a+4>>2]=0|f[K+4>>2],o=R}function Rt(a,b,c){a|=0,b|=0,c|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0;R=o,o=o+128|0,(0|o)>=(0|p)&&ca(128),k=R+112|0,j=R+104|0,i=R+96|0,h=R+88|0,g=R+80|0,e=R+72|0,K=R+56|0,L=R+48|0,N=R+32|0,O=R+24|0,P=R+16|0,l=R+8|0,m=R,H=b,n=0|f[c>>2],M=n,q=H,r=M,s=r+12|0,t=0|f[s>>2],f[e>>2]=0|f[t>>2],f[e+4>>2]=0|f[t+4>>2],Ef(N,q,e),f[K>>2]=0|f[N>>2],f[K+4>>2]=0|f[N+4>>2],u=H,v=M,w=v+12|0,x=0|f[w>>2],y=x+8|0,f[g>>2]=0|f[y>>2],f[g+4>>2]=0|f[y+4>>2],Ef(O,u,g),f[L>>2]=0|f[O>>2],f[L+4>>2]=0|f[O+4>>2],z=H,f[h>>2]=0|f[K>>2],f[h+4>>2]=0|f[K+4>>2],Gg(P,z,h),f[K>>2]=0|f[P>>2],f[K+4>>2]=0|f[P+4>>2],A=H,B=M,C=B+16|0,D=0|d[C>>0],E=1&D,F=255&E,G=0!=(0|F),I=G?3:2,f[i>>2]=0|f[K>>2],f[i+4>>2]=0|f[K+4>>2],ch(l,A,i,69331,I),J=H,f[j>>2]=0|f[K>>2],f[j+4>>2]=0|f[K+4>>2],f[k>>2]=0|f[L>>2],f[k+4>>2]=0|f[L+4>>2],fh(m,J,j,k),f[a>>2]=0|f[K>>2],f[a+4>>2]=0|f[K+4>>2],o=R}function St(a,b,c){a|=0,b|=0,c|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,n=0,q=0,r=0,s=0,u=0,v=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,ga=0,ha=0,ia=0,ja=0,ka=0,ma=0;return ma=o,o=o+96|0,(0|o)>=(0|p)&&ca(96),l=ma+80|0,k=ma+72|0,j=ma+64|0,i=ma+56|0,h=ma+48|0,g=ma+40|0,e=ma+32|0,ka=ma,T=ma+16|0,I=b,ha=I,f[ka>>2]=T,Kp(ha,69199,ka),ia=I,f[e>>2]=0|f[c>>2],f[e+4>>2]=0|f[c+4>>2],f[g>>2]=0|f[T>>2],f[g+4>>2]=0|f[T+4>>2],ja=0|kf(ia,e,g),ja<<24>>24!=0?(Ht(a),void(o=ma)):(n=I,q=I,r=0|sp(q,69150),f[h>>2]=0|f[T>>2],f[h+4>>2]=0|f[T+4>>2],s=0|Kf(n,h,r),s<<24>>24!=0?(u=T+4|0,v=0|f[u>>2],17!=(0|v)?(It(a),void(o=ma)):(x=0|f[c>>2],da=x,y=0|f[T>>2],ga=y,z=I,A=da,B=A+12|0,C=0|f[B>>2],D=ga,E=D+12|0,F=0|f[E>>2],f[i>>2]=0|f[C>>2],f[i+4>>2]=0|f[C+4>>2],f[j>>2]=0|f[F>>2],f[j+4>>2]=0|f[F+4>>2],G=0|Qf(z,i,j),!(G<<24>>24!=0)||(J=I,K=da,L=K+12|0,M=0|f[L>>2],N=M+8|0,O=ga,P=O+12|0,Q=0|f[P>>2],R=Q+8|0,f[k>>2]=0|f[N>>2],f[k+4>>2]=0|f[N+4>>2],f[l>>2]=0|f[R>>2],f[l+4>>2]=0|f[R+4>>2],S=0|Qf(J,k,l),!(S<<24>>24!=0)||(V=da,W=V+16|0,X=0|d[W>>0],Y=1&X,Z=255&Y,$=ga,_=$+16|0,aa=0|d[_>>0],ba=1&aa,ea=255&ba,(0|Z)!=(0|ea)))?(It(a),void(o=ma)):(Ht(a),void(o=ma)))):(It(a),void(o=ma)))}function Tt(a,b,c){a|=0,b|=0,c|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,Q=0,S=0;if(S=o,o=o+80|0,(0|o)>=(0|p)&&ca(80),l=S+72|0,k=S+64|0,j=S+56|0,i=S+48|0,h=S+40|0,g=S+32|0,e=S+24|0,Q=S,K=S+8|0,I=b,M=I,f[Q>>2]=K,Kp(M,69199,Q),N=I,f[e>>2]=0|f[c>>2],f[e+4>>2]=0|f[c+4>>2],f[g>>2]=0|f[K>>2],f[g+4>>2]=0|f[K+4>>2],O=0|kf(N,e,g),O<<24>>24!=0)return f[a>>2]=0|f[c>>2],f[a+4>>2]=0|f[c+4>>2],void(o=S);m=I,n=I,f[h>>2]=0|f[c>>2],f[h+4>>2]=0|f[c+4>>2],q=0|iq(n,h),f[i>>2]=0|f[K>>2],f[i+4>>2]=0|f[K+4>>2],r=0|ls(m,i,q),s=r<<24>>24!=0,s||(t=I,u=I,v=0|sp(u,69204),Ar(t,v,69310)),w=0|f[K>>2],L=w,x=I,y=L,z=y+12|0,A=0|f[z>>2],B=L,C=B+12|0,D=0|f[C>>2],E=D+8|0,F=L,G=F+16|0,H=0|d[G>>0],J=1&H,f[j>>2]=0|f[c>>2],f[j+4>>2]=0|f[c+4>>2],f[k>>2]=0|f[A>>2],f[k+4>>2]=0|f[A+4>>2],f[l>>2]=0|f[E>>2],f[l+4>>2]=0|f[E+4>>2],Ft(x,j,k,l,J),f[a>>2]=0|f[c>>2],f[a+4>>2]=0|f[c+4>>2],o=S}function Ut(a){a|=0;var b=0,c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,L=0;L=o,o=o+144|0,(0|o)>=(0|p)&&ca(144),j=L+128|0,i=L+120|0,h=L+112|0,g=L+104|0,e=L+96|0,d=L+88|0,c=L+80|0,b=L+72|0,x=L+56|0,D=L+48|0,E=L+40|0,F=L+32|0,G=L+24|0,H=L+16|0,I=L+8|0,J=L,k=a,l=k,qg(x,l,69335,5),m=k,n=k,qg(D,n,69341,3),f[b>>2]=0|f[D>>2],f[b+4>>2]=0|f[D+4>>2],Kj(m,69345,b),q=k,r=k,qg(E,r,69358,5),f[c>>2]=0|f[E>>2],f[c+4>>2]=0|f[E+4>>2],Kj(q,69364,c),s=k,f[d>>2]=0|f[x>>2],f[d+4>>2]=0|f[x+4>>2],Kj(s,69376,d),t=k,u=k,qg(F,u,69335,5),f[e>>2]=0|f[F>>2],f[e+4>>2]=0|f[F+4>>2],Kj(t,69396,e),v=k,Vt(G,10200),f[g>>2]=0|f[G>>2],f[g+4>>2]=0|f[G+4>>2],Kj(v,69410,g),w=k,y=k,qg(H,y,69427,10),f[h>>2]=0|f[H>>2],f[h+4>>2]=0|f[H+4>>2],Kj(w,69438,h),z=k,A=k,qg(I,A,69457,25),f[i>>2]=0|f[I>>2],f[i+4>>2]=0|f[I+4>>2],Kj(z,69483,i),B=k,C=k,qg(J,C,69501,48),f[j>>2]=0|f[J>>2],f[j+4>>2]=0|f[J+4>>2],Kj(B,69550,j),o=L}function Vt(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,i=0;i=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),d=i,c=b,e=d+4|0,f[e>>2]=3,g=c,f[d>>2]=g,f[a>>2]=0|f[d>>2],f[a+4>>2]=0|f[d+4>>2],o=i}function Wt(a,b){a|=0,b|=0;var c=0,d=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,p=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,la=0,ma=0,na=0,pa=0,qa=0,Da=0,Ea=0,Fa=0;Ea=4,Da=0|Gw(40),f[Da>>2]=0,r=0,t=0|oa(330,0|a,0,0),E=r,r=0,0!=(0|E)&0!=(0|s)?(Q=0|Rw(0|f[E>>2],0|Da,0|Ea),0==(0|Q)&&Aa(0|E,0|s),G=s):Q=-1,_=G,qa=1==(0|Q);do{if(!qa){if(0!=(0|t)){if(f[t>>2]=a,ma=t+248|0,f[ma>>2]=b,na=b+28|0,pa=0|f[na>>2],g=t+196|0,f[g>>2]=pa,h=b+1400|0,i=0|f[h>>2],j=65535&i,k=t+244|0,e[k>>1]=j,l=t+8|0,Da=0|Qw(l,1,0|Da,0|Ea),Ea=G,r=0,m=r,r=0,0!=(0|m)&0!=(0|s)?(n=0|Rw(0|f[m>>2],0|Da,0|Ea),0==(0|n)&&Aa(0|m,0|s),G=s):n=-1,p=G,1==(0|n)){d=p;break}d=0;break}return c=0,Hw(0|Da),0|c}d=_}while(0);for(;;){if(0==(0|d)){if(u=b+1144|0,v=0|f[u>>2],r=0,ua(331,0|t,0|v,0),w=r,r=0,0!=(0|w)&0!=(0|s)?(x=0|Rw(0|f[w>>2],0|Da,0|Ea),0==(0|x)&&Aa(0|w,0|s),G=s):x=-1,y=G,1==(0|x)){d=y;continue}if(z=t+216|0,A=0|f[z>>2],r=0,B=0|xa(195,0|a,0|A),C=r,r=0,0!=(0|C)&0!=(0|s)?(D=0|Rw(0|f[C>>2],0|Da,0|Ea),0==(0|D)&&Aa(0|C,0|s),G=s):D=-1,F=G,1==(0|D)){d=F;continue}if(H=t+216|0,I=0|f[H>>2],r=0,sa(332,0|a,0|I),J=r,r=0,0!=(0|J)&0!=(0|s)?(K=0|Rw(0|f[J>>2],0|Da,0|Ea),0==(0|K)&&Aa(0|J,0|s),G=s):K=-1,L=G,1==(0|K)){d=L;continue}if(M=t+4|0,N=0|f[M>>2],r=0,ra(333,0|N),O=r,r=0,0!=(0|O)&0!=(0|s)?(P=0|Rw(0|f[O>>2],0|Da,0|Ea),0==(0|P)&&Aa(0|O,0|s),G=s):P=-1,R=G,1==(0|P)){d=R;continue}Fa=11;break}if(S=t+196|0,T=0|f[S>>2],U=t+216|0,V=0|f[U>>2],W=V+28|0,X=0|f[W>>2],Y=(0|T)==(0|X),Y&&(Z=t+216|0,$=0|f[Z>>2],aa=$+28|0,f[aa>>2]=0),ba=t+216|0,ca=0|f[ba>>2],r=0,sa(332,0|a,0|ca),da=r,r=0,0!=(0|da)&0!=(0|s)?(ea=0|Rw(0|f[da>>2],0|Da,0|Ea),0==(0|ea)&&Aa(0|da,0|s),G=s):ea=-1,fa=G,1==(0|ea))d=fa;else{if(ga=t+4|0,ha=0|f[ga>>2],r=0,ra(333,0|ha),ia=r,r=0,0!=(0|ia)&0!=(0|s)?(ja=0|Rw(0|f[ia>>2],0|Da,0|Ea),0==(0|ja)&&Aa(0|ia,0|s),G=s):ja=-1,la=G,!(1==(0|ja))){Fa=16;break}d=la}}return 11==(0|Fa)?(c=B,Hw(0|Da),0|c):16==(0|Fa)?(c=0,Hw(0|Da),0|c):0}function Xt(a,b,c){a|=0,b|=0,c|=0;var d=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,$a=0,_a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,$b=0,_b=0,ac=0,bc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,yc=0,zc=0,Ac=0,Bc=0,Cc=0,Dc=0,Ec=0,Fc=0,Gc=0,Hc=0,Ic=0,Kc=0,Lc=0,Mc=0,Nc=0,Oc=0,Pc=0,Qc=0,Rc=0,Sc=0,Tc=0,Uc=0,Vc=0,Xc=0,Yc=0,Zc=0,$c=0,_c=0,ad=0,bd=0,cd=0,dd=0,ed=0,fd=0,gd=0,hd=0,id=0,jd=0,kd=0,ld=0,md=0,nd=0,od=0,pd=0,qd=0,rd=0,sd=0,td=0,ud=0,vd=0,wd=0,xd=0,yd=0,zd=0,Ad=0,Bd=0,Cd=0,Dd=0,Ed=0,Fd=0,Gd=0,Hd=0,Id=0,Jd=0,Kd=0,Ld=0,Md=0,Od=0;if(Od=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),zc=a,Lc=b,Xc=c,u=zc,F=0|dt(u),gd=F,Q=gd,_=0|ft(Q,252),rd=_,la=rd,!(0!=(0|la)))return oc=0,ic=oc,o=Od,0|ic;if(Ha=rd,$w(0|Ha,74940,252),Sa=zc,bb=rd,f[bb>>2]=Sa,mb=gd,xb=rd,Ib=xb+4|0,f[Ib>>2]=mb,Tb=Lc,!(0!=(0|Tb)))return jc=rd,oc=jc,ic=oc,o=Od,0|ic;kc=Lc,lc=rd,mc=lc+164|0,f[mc>>2]=kc,nc=rd,pc=nc+184|0,qc=0|e[pc>>1],rc=-32768&qc,sc=32767|rc,e[pc>>1]=sc,tc=rd,uc=tc+184|0,vc=0|e[uc>>1],wc=32767&vc,e[uc>>1]=wc,xc=zc,yc=0|hg(xc),Ac=rd,Bc=Ac+216|0,f[Bc>>2]=yc,Cc=Lc,Dc=rd,Ec=Dc+216|0,Fc=0|f[Ec>>2],Ju(Cc,Fc),Gc=rd,Hc=Gc+228|0,f[Hc>>2]=8,Ic=zc,Kc=rd,Mc=Kc+228|0,Nc=0|f[Mc>>2],Oc=Nc<<2,Pc=0|Jc(Ic,Oc),Qc=rd,Rc=Qc+216|0,Sc=0|f[Rc>>2],Tc=Sc+20|0,f[Tc>>2]=Pc,Uc=rd,Vc=Uc+212|0,f[Vc>>2]=1024,Yc=zc,Zc=rd,$c=Zc+212|0,_c=0|f[$c>>2],ad=_c<<2,bd=0|Jc(Yc,ad),cd=rd,dd=cd+204|0,f[dd>>2]=bd,ed=rd,fd=ed+204|0,hd=0|f[fd>>2],id=rd,jd=id+216|0,kd=0|f[jd>>2],ld=kd+8|0,f[ld>>2]=hd,md=rd,nd=md+220|0,f[nd>>2]=32,od=zc,pd=rd,qd=pd+220|0,sd=0|f[qd>>2],td=sd<<3,ud=0|Jc(od,td),vd=rd,wd=vd+216|0,xd=0|f[wd>>2],yd=xd+12|0,f[yd>>2]=ud,zd=rd,Ad=zd+216|0,Bd=0|f[Ad>>2],Dd=Bd+44|0,f[Dd>>2]=0,Ed=rd,Fd=Ed+224|0,f[Fd>>2]=256,Gd=zc,Hd=rd,Id=Hd+224|0,Jd=0|f[Id>>2],Kd=Jd<<2,Ld=0|Jc(Gd,Kd),Md=rd,i=Md+216|0,j=0|f[i>>2],k=j+16|0,f[k>>2]=Ld,l=rd,m=l+216|0,n=0|f[m>>2],q=n+48|0,f[q>>2]=0,r=Xc,s=rd,t=s+168|0,f[t>>2]=r,v=Xc,w=0|Eu(v),x=w+1|0,y=rd,z=y+172|0,A=0|f[z>>2],B=A+x|0,f[z>>2]=B,C=rd,D=C+172|0,E=0|f[D>>2],G=65535&E,H=rd,I=H+232|0,e[I>>1]=G,J=Xc,K=0!=(0|J);a:if(K)for(L=Xc,Cd=L,h=0,M=zc,N=rd,O=N+232|0,P=0|e[O>>1],R=65535&P,S=R-1|0,T=S<<3,U=0|Jc(M,T),V=rd,W=V+216|0,X=0|f[W>>2],Y=X+24|0,f[Y>>2]=U,h=0,Z=Xc,Cd=Z;;){if($=Cd,!(0!=(0|$)))break a;ba=Cd,da=0|f[ba>>2],ea=da,fa=rd,ga=fa+216|0,ha=0|f[ga>>2],ia=ha+24|0,ja=0|f[ia>>2],ka=h,ma=ja+(ka<<3)|0,f[ma>>2]=ea,na=Cd,oa=0|f[na>>2],pa=oa,qa=0!=(0|pa),ra=rd,qa?(sa=Cd,ta=0|f[sa>>2],ua=ta,va=0|ru(ra,ua),xa=65535&va,ya=rd,za=ya+216|0,Aa=0|f[za>>2],Ba=Aa+24|0,Ca=0|f[Ba>>2],Da=h,Ea=Ca+(Da<<3)|0,d=xa,g=Ea):(Fa=ra+216|0,Ga=0|f[Fa>>2],Ia=Ga+24|0,Ja=0|f[Ia>>2],Ka=h,La=Ja+(Ka<<3)|0,d=0,g=La),Ma=g+4|0,e[Ma>>1]=d,Na=h,Oa=Na+1|0,h=Oa,Pa=Cd,Qa=Pa+4|0,Ra=0|f[Qa>>2],Cd=Ra}return Ta=zc,Ua=0|Wc(Ta),Va=rd,Wa=Va+236|0,f[Wa>>2]=Ua,Xa=Lc,Ya=Xa+196|0,Za=0|f[Ya>>2],$a=rd,_a=$a+196|0,f[_a>>2]=Za,ab=rd,cb=ab+196|0,db=0|f[cb>>2],eb=0!=(0|db),eb&&(fb=zc,gb=rd,hb=gb+212|0,ib=0|f[hb>>2],jb=ib<<1,kb=0|Jc(fb,jb),lb=rd,nb=lb+208|0,f[nb>>2]=kb),ob=Lc,pb=ob+200|0,qb=0|e[pb>>1],rb=rd,sb=rb+200|0,e[sb>>1]=qb,tb=rd,ub=tb+240|0,f[ub>>2]=0,vb=rd,wb=vb+196|0,yb=0|f[wb>>2],zb=0!=(0|yb),zb?(Ab=zc,Bb=rd,Cb=Bb+216|0,Db=0|f[Cb>>2],rr(Ab,Db),Eb=rd,Fb=Eb+196|0,Gb=0|f[Fb>>2],Hb=rd,Jb=Hb+216|0,Kb=0|f[Jb>>2],Lb=Kb+28|0,f[Lb>>2]=Gb,Mb=rd,Nb=Mb+208|0,Ob=0|f[Nb>>2],Pb=rd,Qb=Pb+216|0,Rb=0|f[Qb>>2],Sb=Rb+32|0,f[Sb>>2]=Ob):(Ub=rd,Vb=Ub+216|0,Wb=0|f[Vb>>2],Xb=Wb+36|0,f[Xb>>2]=0),Yb=Lc,Zb=Yb+248|0,$b=0|f[Zb>>2],_b=rd,ac=_b+248|0,f[ac>>2]=$b,bc=Lc,dc=bc+244|0,ec=0|e[dc>>1],fc=rd,gc=fc+244|0,e[gc>>1]=ec,hc=rd,oc=hc,ic=oc,o=Od,0|ic}function Yt(a,b,c){a|=0,b|=0,c|=0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,$a=0,_a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Xb=0,Yb=0,Zb=0,$b=0,_b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,yc=0,zc=0,Ac=0,Bc=0,Cc=0,Dc=0,Ec=0,Fc=0,Gc=0,Hc=0,Ic=0,Jc=0,Kc=0,Lc=0,Mc=0,Nc=0,Oc=0,Pc=0,Qc=0,Rc=0,Sc=0,Tc=0,Uc=0,Vc=0,Yc=0,Zc=0,$c=0,_c=0,ad=0,bd=0,cd=0,dd=0,ed=0,fd=0,gd=0,hd=0,id=0,jd=0,kd=0,ld=0,md=0,nd=0,od=0,pd=0,qd=0,sd=0,td=0,ud=0,vd=0,wd=0,xd=0,yd=0,zd=0,Ad=0,Bd=0,Cd=0,Dd=0,Ed=0,Fd=0,Gd=0,Hd=0,Id=0,Jd=0,Kd=0,Ld=0,Md=0,Nd=0,Od=0,Pd=0,Qd=0,Rd=0,Sd=0,Td=0,Ud=0,Vd=0,Wd=0,Xd=0,Yd=0,Zd=0,$d=0,_d=0,ae=0,be=0,ce=0,de=0,ee=0,fe=0,ge=0,he=0,ie=0,je=0,ke=0,le=0,me=0,ne=0,oe=0,qe=0,re=0,se=0,te=0,ue=0,ve=0,we=0,xe=0,ye=0,ze=0,Ae=0,Be=0,Ce=0,De=0,Ee=0,Fe=0,Ge=0,He=0,Ie=0,Je=0,Ke=0,Le=0,Me=0,Ne=0,Oe=0,Pe=0,Qe=0,Re=0,Se=0,Ue=0,Ve=0,We=0,Xe=0,Ye=0,Ze=0,_e=0,af=0,bf=0,cf=0,ef=0,ff=0,gf=0,hf=0,jf=0,kf=0,lf=0,mf=0,nf=0,of=0,pf=0,qf=0,rf=0,sf=0,tf=0,uf=0,vf=0,wf=0,yf=0,zf=0,Af=0,Bf=0,Cf=0,Df=0,Ef=0,Ff=0,Gf=0,Hf=0,If=0,Jf=0,Kf=0,Lf=0,Mf=0,Nf=0,Of=0,Pf=0,Qf=0,Rf=0,Sf=0,Tf=0,Uf=0,Vf=0,Wf=0,Xf=0,Yf=0,Zf=0,_f=0,ag=0,bg=0,cg=0,dg=0,eg=0,fg=0,gg=0,hg=0,ig=0,jg=0,lg=0,ng=0,og=0,qg=0,rg=0,sg=0,tg=0,ug=0,vg=0,wg=0,xg=0,yg=0,zg=0,Ag=0,Bg=0,Cg=0,Dg=0,Eg=0,Fg=0,Gg=0,Hg=0,Ig=0,Jg=0,Kg=0,Lg=0,Mg=0,Ng=0,Og=0,Pg=0,Qg=0,Rg=0,Sg=0,Tg=0,Ug=0,Vg=0,Wg=0,Xg=0,Yg=0,Zg=0,$g=0,_g=0,bh=0,dh=0,eh=0,gh=0,hh=0,jh=0,kh=0,lh=0,mh=0,nh=0,oh=0,qh=0,rh=0,sh=0,th=0,uh=0,vh=0,wh=0,xh=0,yh=0,zh=0,Ah=0,Bh=0,Ch=0,Dh=0,Eh=0,Fh=0,Gh=0,Hh=0,Ih=0,Kh=0,Lh=0,Mh=0,Nh=0,Oh=0,Ph=0,Qh=0,Rh=0,Sh=0,Th=0,Uh=0,Vh=0,Wh=0,Xh=0,Yh=0,Zh=0,$h=0,_h=0,ai=0,bi=0,ci=0,di=0,ei=0,fi=0,gi=0,ii=0,ki=0,mi=0,ni=0,oi=0,pi=0,qi=0,si=0,ti=0,ui=0,vi=0,wi=0,xi=0,yi=0,zi=0,Ai=0,Bi=0,Ci=0,Di=0,Ei=0,Fi=0,Gi=0,Hi=0,Ii=0,Ji=0,Ki=0,Li=0,Mi=0,Ni=0,Pi=0,Qi=0,Ri=0,Si=0,Ui=0,Vi=0,Wi=0,Xi=0,Zi=0,$i=0,_i=0,aj=0,bj=0,cj=0,dj=0,ej=0,fj=0,gj=0,hj=0,ij=0,jj=0,kj=0,lj=0,mj=0,nj=0,oj=0,pj=0,qj=0,rj=0,sj=0,tj=0,uj=0,vj=0,wj=0,xj=0,yj=0,zj=0,Aj=0,Bj=0,Cj=0,Dj=0,Ej=0,Fj=0,Gj=0,Hj=0,Ij=0,Jj=0,Kj=0,Lj=0,Mj=0,Nj=0,Oj=0,Pj=0,Qj=0,Rj=0,Sj=0,Tj=0,Uj=0,Vj=0,Wj=0,Xj=0,Yj=0,Zj=0,$j=0,_j=0,ak=0,bk=0,ck=0,dk=0,ek=0,fk=0,gk=0,hk=0,ik=0,jk=0,kk=0,lk=0,mk=0,nk=0,ok=0,pk=0,qk=0,rk=0,sk=0,tk=0,uk=0,vk=0,wk=0,xk=0,yk=0,zk=0,Ak=0,Bk=0,Ck=0,Dk=0,Ek=0,Fk=0,Gk=0,Hk=0,Jk=0,Kk=0,Lk=0,Mk=0,Ok=0,Pk=0,Qk=0,Rk=0,Sk=0,Tk=0,Uk=0,Vk=0,Wk=0,Xk=0,Yk=0,Zk=0,$k=0,_k=0,al=0,cl=0,dl=0,el=0,fl=0,hl=0,il=0,jl=0,kl=0,ll=0,ml=0,nl=0,ol=0,pl=0,ql=0,rl=0,sl=0,tl=0,ul=0,wl=0,xl=0,yl=0,Al=0,Bl=0,Cl=0,Dl=0,El=0,Fl=0,Gl=0,Hl=0,Il=0,Jl=0,Kl=0,Ll=0,Ml=0,Nl=0,Ol=0,Ql=0,Rl=0,Sl=0,Ul=0,Vl=0,Wl=0,Xl=0,Yl=0,Zl=0,$l=0,_l=0,am=0,bm=0,cm=0,dm=0,em=0,fm=0,gm=0,hm=0,jm=0,km=0,lm=0,nm=0,om=0,pm=0,qm=0,rm=0,tm=0,um=0,vm=0,wm=0,xm=0,ym=0,zm=0,Am=0,Bm=0,Cm=0,Dm=0,Em=0,Fm=0,Gm=0,Im=0,Jm=0,Km=0,Mm=0,Nm=0,Om=0,Pm=0,Qm=0,Rm=0,Sm=0,Tm=0,Um=0,Vm=0,Wm=0,Xm=0,Ym=0,Zm=0,$m=0,an=0,bn=0,cn=0,en=0,fn=0,gn=0,hn=0,jn=0,ln=0,mn=0,nn=0,on=0,pn=0,qn=0,rn=0,sn=0,tn=0,un=0,vn=0,wn=0,xn=0,yn=0,zn=0,An=0,Cn=0,Dn=0,En=0,Fn=0,Gn=0,Hn=0,In=0,Jn=0,Kn=0,Ln=0,Mn=0,Nn=0,On=0,Pn=0,Rn=0,Sn=0,Tn=0,Un=0,Vn=0,Wn=0,Xn=0,Yn=0,Zn=0,_n=0,ao=0,bo=0,co=0,eo=0,go=0,ho=0,io=0,jo=0,ko=0,lo=0,mo=0,no=0,oo=0,po=0,qo=0,ro=0,so=0,to=0,uo=0,vo=0,wo=0,xo=0,yo=0,zo=0,Ao=0,Bo=0,Co=0,Do=0,Eo=0,Fo=0,Go=0,Ho=0,Io=0,Jo=0,Ko=0,Lo=0,Mo=0,No=0,Oo=0,Po=0,Qo=0,Ro=0,So=0,To=0,Uo=0,Vo=0,Wo=0,Xo=0,Yo=0,Zo=0,$o=0,_o=0,ap=0,cp=0,dp=0,ep=0,fp=0,gp=0,hp=0,ip=0,jp=0,kp=0,lp=0,np=0,op=0,pp=0,qp=0,rp=0,sp=0,tp=0,vp=0,wp=0,xp=0,yp=0,zp=0,Ap=0,Bp=0,Cp=0,Dp=0,Ep=0,Fp=0,Gp=0,Hp=0,Ip=0,Jp=0,Kp=0,Lp=0,Mp=0,Np=0,Op=0,Pp=0,Qp=0,Rp=0,Sp=0,Tp=0,Up=0,Vp=0,Wp=0,Xp=0,Yp=0,Zp=0,$p=0,_p=0,aq=0,bq=0,cq=0,dq=0,eq=0,gq=0,hq=0,iq=0,jq=0,kq=0,lq=0,mq=0,nq=0,oq=0,pq=0,qq=0,rq=0,sq=0,tq=0,uq=0,vq=0,wq=0,xq=0,yq=0,zq=0,Bq=0,Cq=0,Dq=0,Eq=0,Fq=0,Gq=0,Hq=0,Jq=0,Kq=0,Lq=0,Mq=0,Nq=0,Oq=0,Pq=0,Qq=0,Rq=0,Sq=0,Tq=0,Uq=0,Vq=0,Wq=0,Xq=0,Yq=0,Zq=0,$q=0,_q=0,ar=0,br=0,cr=0,dr=0,er=0,fr=0,gr=0,hr=0,ir=0,jr=0,kr=0,lr=0,nr=0,or=0,pr=0,qr=0,rr=0,tr=0,ur=0,vr=0,wr=0,yr=0,zr=0,Ar=0,Br=0,Cr=0,Dr=0,Er=0,Gr=0,Hr=0,Ir=0,Jr=0,Kr=0,Lr=0,Mr=0,Nr=0,Or=0,Pr=0,Qr=0,Rr=0,Sr=0,Tr=0,Ur=0,Vr=0,Wr=0,Xr=0,Yr=0,Zr=0,$r=0,_r=0,as=0,bs=0,cs=0,ds=0,es=0,fs=0,gs=0,hs=0,is=0,js=0,ks=0,ms=0,ns=0,os=0,ps=0,qs=0,rs=0,ss=0,ts=0,us=0,vs=0,ws=0,xs=0,ys=0,zs=0,As=0,Bs=0,Cs=0,Ds=0,Es=0,Fs=0,Gs=0,Hs=0,Is=0,Js=0,Ks=0,Ls=0,Ms=0,Ns=0,Os=0,Ps=0,Qs=0,Rs=0,Ss=0,Us=0,Vs=0,Ws=0,Xs=0,Zs=0,$s=0,_s=0,at=0,bt=0,ct=0,dt=0,et=0,ft=0,gt=0,it=0,jt=0,kt=0,lt=0,mt=0,nt=0,ot=0,pt=0,qt=0,rt=0,st=0,tt=0,ut=0,vt=0,wt=0,xt=0,yt=0,zt=0,At=0,Bt=0,Ct=0,Dt=0,Et=0,Ft=0,Gt=0,Ht=0,It=0,Jt=0,Kt=0,Lt=0,Mt=0,Nt=0,Ot=0,Pt=0,Qt=0,Rt=0,St=0,Tt=0,Ut=0,Vt=0,Wt=0,Xt=0,zu=0,Au=0,Bu=0,Cu=0,Du=0,Eu=0,Fu=0,Gu=0,Hu=0,Iu=0,Ju=0,Ku=0,Lu=0,Mu=0,Nu=0,Ou=0,Pu=0,Qu=0,Ru=0,Su=0,Tu=0,Uu=0,Vu=0,Wu=0,Yu=0,Zu=0,$u=0,_u=0,av=0,bv=0,cv=0,dv=0,ev=0,fv=0,gv=0,hv=0,iv=0,jv=0,kv=0,lv=0,mv=0,nv=0,ov=0,pv=0,qv=0,rv=0,sv=0,tv=0,uv=0,vv=0,wv=0,xv=0,yv=0,zv=0,Av=0,Bv=0,Cv=0,Dv=0,Ev=0,Fv=0,Gv=0,Hv=0,Iv=0,Jv=0,Kv=0,Lv=0,Mv=0,Nv=0,Ov=0,Pv=0,Qv=0,Rv=0,Sv=0,Tv=0,Uv=0,Vv=0,Wv=0,Xv=0,Yv=0,Zv=0,$v=0,_v=0,aw=0,bw=0,cw=0,dw=0,ew=0,fw=0,gw=0,hw=0,iw=0,jw=0,kw=0,lw=0,nw=0,ow=0,pw=0,qw=0,rw=0,sw=0,uw=0,vw=0,ww=0,xw=0,yw=0,zw=0,Aw=0,Bw=0,Cw=0,Dw=0,Ew=0,Gw=0,Hw=0,Iw=0,Jw=0,Kw=0,Lw=0,Mw=0,Nw=0,Ow=0,Pw=0,Qw=0,Rw=0,Sw=0,Tw=0,Uw=0,Vw=0,Ww=0,Xw=0,Yw=0,Zw=0,$w=0,_w=0,ax=0,bx=0,cx=0,dx=0,fx=0,gx=0,hx=0,ix=0,jx=0,kx=0,lx=0,mx=0,nx=0,ox=0,px=0,qx=0,rx=0,sx=0,tx=0,ux=0,vx=0,wx=0,xx=0,yx=0,zx=0,Ax=0,Bx=0,Dx=0,Ex=0,Fx=0,Gx=0,Hx=0,Ix=0,Kx=0,Lx=0,Mx=0,Nx=0,Ox=0,Px=0,Qx=0,Rx=0,Sx=0,Tx=0,Ux=0,Vx=0,Wx=0,Xx=0,Yx=0,Zx=0,$x=0,_x=0,ay=0,by=0,cy=0,dy=0,ey=0,fy=0,hy=0,iy=0,jy=0,ky=0,ly=0,my=0,ny=0,oy=0,py=0,qy=0,ry=0,sy=0,ty=0,uy=0,vy=0,wy=0,xy=0,yy=0,zy=0,By=0,Cy=0,Dy=0,Ey=0,Fy=0,Gy=0,Hy=0,Iy=0,Jy=0,Ky=0,Ly=0,My=0,Ny=0,Oy=0,Py=0,Qy=0,Ry=0,Sy=0,Uy=0,Vy=0,Wy=0,Xy=0,Yy=0,Zy=0,$y=0,_y=0,az=0,bz=0,cz=0,dz=0,ez=0,fz=0,gz=0,hz=0,iz=0,jz=0,kz=0,lz=0,mz=0,nz=0,oz=0,pz=0,qz=0,rz=0,sz=0,tz=0,uz=0,vz=0,wz=0,xz=0,yz=0,zz=0,Az=0,Bz=0,Cz=0,Ez=0,Fz=0,Gz=0,Hz=0,Jz=0,Kz=0,Lz=0,Mz=0,Nz=0,Oz=0,Pz=0,Qz=0,Rz=0,Sz=0,Tz=0,Uz=0,Vz=0,Wz=0,Xz=0,Yz=0,Zz=0,$z=0,_z=0,aA=0,bA=0,cA=0,dA=0,eA=0,fA=0,gA=0,hA=0,jA=0,kA=0,lA=0,mA=0,nA=0,oA=0,pA=0,qA=0,rA=0,sA=0,tA=0,uA=0,vA=0,wA=0,xA=0,yA=0,zA=0,AA=0,BA=0,CA=0,DA=0,EA=0,FA=0,GA=0,HA=0,IA=0,JA=0,KA=0,LA=0,MA=0,OA=0,PA=0,QA=0,RA=0,SA=0,TA=0,UA=0,VA=0,WA=0,XA=0,YA=0,ZA=0,$A=0,_A=0,aB=0,bB=0,cB=0,dB=0,eB=0,fB=0,gB=0,hB=0,iB=0,jB=0,kB=0,lB=0,mB=0,nB=0,oB=0,pB=0,qB=0,rB=0,sB=0,tB=0,uB=0,vB=0,wB=0,xB=0,yB=0,zB=0,AB=0,BB=0,CB=0,DB=0,EB=0,FB=0,GB=0,HB=0,IB=0,JB=0,KB=0,LB=0,MB=0,NB=0,OB=0,PB=0,QB=0,RB=0,SB=0,TB=0,UB=0,VB=0,WB=0,XB=0,YB=0,$B=0,_B=0,aC=0,bC=0,cC=0,dC=0,fC=0,gC=0,hC=0,iC=0,jC=0,kC=0,lC=0,mC=0,nC=0,oC=0,pC=0,qC=0,rC=0,sC=0,tC=0,uC=0,vC=0,wC=0,xC=0,yC=0,zC=0,AC=0,BC=0,CC=0,DC=0,EC=0,FC=0,GC=0,HC=0,JC=0,KC=0,LC=0,MC=0,NC=0,OC=0,PC=0,QC=0,RC=0,SC=0,TC=0,UC=0,VC=0,WC=0,XC=0,YC=0,ZC=0,$C=0,_C=0,aD=0,bD=0,cD=0,dD=0,eD=0,fD=0,gD=0,hD=0,iD=0,jD=0,kD=0,lD=0,mD=0,nD=0,oD=0,pD=0,qD=0,rD=0,sD=0,tD=0,uD=0,vD=0,wD=0,xD=0,yD=0,zD=0,AD=0,BD=0,CD=0,DD=0,ED=0,FD=0,GD=0,HD=0,ID=0,JD=0,KD=0,LD=0,MD=0,ND=0,OD=0,PD=0,QD=0,RD=0,SD=0,TD=0,UD=0,VD=0,WD=0,XD=0,YD=0,ZD=0,$D=0,_D=0,aE=0,bE=0,cE=0,dE=0,eE=0,fE=0,gE=0,hE=0,iE=0,jE=0,kE=0,lE=0,mE=0,nE=0,oE=0,pE=0,qE=0,rE=0,sE=0,tE=0,uE=0,vE=0,wE=0,xE=0,yE=0,zE=0,AE=0,BE=0,CE=0,DE=0,EE=0,FE=0,GE=0,HE=0,IE=0,JE=0,KE=0,LE=0,ME=0,NE=0,OE=0,PE=0,QE=0,RE=0,TE=0,UE=0,VE=0,WE=0,XE=0,YE=0,ZE=0,$E=0,_E=0,aF=0,bF=0,cF=0,dF=0,eF=0,fF=0,gF=0,hF=0,jF=0,kF=0,lF=0,mF=0,nF=0,oF=0,pF=0,qF=0,rF=0,sF=0,tF=0,uF=0,vF=0,wF=0,xF=0,yF=0,zF=0,AF=0,BF=0,CF=0,DF=0,EF=0,FF=0,GF=0,HF=0,IF=0,JF=0,KF=0,LF=0,MF=0,NF=0,OF=0,PF=0,QF=0,RF=0,SF=0,TF=0,UF=0,VF=0,WF=0,XF=0,YF=0,$F=0,_F=0,aG=0,bG=0,cG=0,dG=0,eG=0,fG=0,hG=0,iG=0,jG=0,kG=0,lG=0,mG=0,nG=0,oG=0,pG=0,qG=0,rG=0,sG=0,tG=0,uG=0,vG=0,wG=0,xG=0,yG=0,zG=0,AG=0,BG=0,CG=0,DG=0,EG=0,FG=0,GG=0,HG=0,IG=0,JG=0,KG=0,LG=0,MG=0,NG=0,PG=0,QG=0,RG=0,SG=0,TG=0,UG=0,VG=0,WG=0,XG=0,YG=0,ZG=0,$G=0,_G=0,aH=0,bH=0,cH=0,dH=0,eH=0,fH=0,gH=0,hH=0,iH=0,jH=0,kH=0,lH=0,mH=0,nH=0,oH=0,pH=0,qH=0,rH=0,sH=0,tH=0,uH=0,vH=0,wH=0,xH=0,yH=0,zH=0,AH=0,BH=0,CH=0,DH=0,EH=0,FH=0,GH=0,HH=0,IH=0,JH=0,KH=0,LH=0,MH=0,NH=0,OH=0,PH=0,QH=0,RH=0,SH=0,TH=0,UH=0,WH=0,XH=0,YH=0,ZH=0,$H=0,_H=0,aI=0,bI=0,cI=0,dI=0,eI=0,fI=0,gI=0,hI=0,iI=0,jI=0,kI=0,lI=0,mI=0,nI=0,oI=0,pI=0,qI=0,rI=0,sI=0,tI=0,uI=0,vI=0,wI=0,xI=0,yI=0,zI=0,AI=0,BI=0,CI=0,DI=0,EI=0,FI=0,GI=0,HI=0,II=0,JI=0,KI=0,LI=0,MI=0,NI=0,OI=0,PI=0,QI=0,RI=0,SI=0,TI=0,UI=0,VI=0,WI=0,XI=0,YI=0,ZI=0,$I=0,_I=0,aJ=0,bJ=0,cJ=0,dJ=0,eJ=0,fJ=0,gJ=0,hJ=0,iJ=0,jJ=0,kJ=0,lJ=0,mJ=0,nJ=0,oJ=0,pJ=0,qJ=0,rJ=0,sJ=0,tJ=0,uJ=0,vJ=0,wJ=0,xJ=0,yJ=0,zJ=0,AJ=0,BJ=0,CJ=0,DJ=0,EJ=0,FJ=0,GJ=0,HJ=0,IJ=0,JJ=0,KJ=0,LJ=0,MJ=0,NJ=0,OJ=0,PJ=0,QJ=0,RJ=0,SJ=0,TJ=0,UJ=0,VJ=0,WJ=0,XJ=0,YJ=0,ZJ=0,$J=0,_J=0,aK=0,bK=0,cK=0,dK=0,eK=0,fK=0,gK=0,hK=0,iK=0,jK=0,kK=0,lK=0,mK=0,nK=0,oK=0,pK=0,qK=0,rK=0,sK=0,tK=0,uK=0,vK=0,wK=0,xK=0,yK=0,zK=0,AK=0,BK=0,CK=0,DK=0,EK=0,GK=0,HK=0,IK=0,JK=0,KK=0,LK=0,MK=0,NK=0,OK=0,PK=0,QK=0,RK=0,SK=0,TK=0,UK=0,VK=0,WK=0,XK=0,YK=0,ZK=0,$K=0,_K=0,aL=0,bL=0,cL=0,eL=0,fL=0,gL=0,hL=0,iL=0,jL=0,kL=0,lL=0,mL=0,nL=0,oL=0,pL=0,qL=0,rL=0,sL=0,tL=0,uL=0,vL=0,wL=0,xL=0,yL=0,zL=0,AL=0,BL=0,CL=0,DL=0,EL=0,FL=0,GL=0,HL=0,IL=0,JL=0,KL=0,LL=0,ML=0,NL=0,OL=0,PL=0,QL=0,RL=0,SL=0,TL=0,UL=0,VL=0,WL=0,XL=0,YL=0,ZL=0,$L=0,_L=0,aM=0,bM=0,cM=0,dM=0,eM=0,fM=0,gM=0,hM=0,iM=0,jM=0,kM=0,lM=0,mM=0,nM=0,oM=0,pM=0,qM=0,rM=0,sM=0,tM=0,uM=0,vM=0,wM=0,xM=0,yM=0,zM=0,AM=0,BM=0,CM=0,DM=0,EM=0,FM=0,GM=0,HM=0,IM=0,JM=0,KM=0,LM=0,MM=0,NM=0,OM=0,PM=0,QM=0,RM=0,SM=0,TM=0,UM=0,VM=0,WM=0,XM=0,YM=0,ZM=0,$M=0,_M=0,aN=0,bN=0,cN=0,dN=0,eN=0,fN=0,gN=0,hN=0,iN=0,jN=0,kN=0,lN=0,mN=0,nN=0,oN=0,pN=0,qN=0,rN=0,sN=0,tN=0,uN=0,vN=0,wN=0,xN=0,yN=0,zN=0,AN=0,BN=0,CN=0,DN=0,EN=0,FN=0,GN=0,HN=0,IN=0,JN=0,LN=0,MN=0,NN=0,ON=0,PN=0,QN=0,RN=0,SN=0,TN=0,UN=0,VN=0,WN=0,XN=0,YN=0,ZN=0,$N=0,_N=0,aO=0,bO=0,cO=0,dO=0,eO=0,fO=0,gO=0,hO=0,iO=0,jO=0,kO=0,lO=0,mO=0,nO=0,oO=0,pO=0,qO=0,rO=0,sO=0,tO=0,uO=0,vO=0,wO=0,xO=0,yO=0,zO=0,AO=0,BO=0,CO=0,DO=0,EO=0,FO=0,GO=0,HO=0,IO=0,JO=0,KO=0,LO=0,MO=0,NO=0,OO=0,QO=0,RO=0,SO=0,TO=0,UO=0,VO=0,WO=0,XO=0,YO=0,ZO=0,$O=0,_O=0,aP=0,bP=0,cP=0,dP=0,eP=0,fP=0,gP=0,hP=0,iP=0,jP=0,kP=0,lP=0,mP=0,nP=0,oP=0,pP=0,qP=0,rP=0,sP=0,tP=0,uP=0,vP=0,wP=0,xP=0,yP=0,zP=0,AP=0,BP=0,CP=0,DP=0,EP=0,FP=0,GP=0,HP=0,IP=0,JP=0,KP=0,LP=0,MP=0,NP=0,OP=0,PP=0,QP=0,RP=0,SP=0,TP=0,UP=0,VP=0,WP=0,XP=0,YP=0,ZP=0,$P=0,_P=0,aQ=0,bQ=0,cQ=0,dQ=0,eQ=0,fQ=0,gQ=0,hQ=0,iQ=0,jQ=0,kQ=0,lQ=0,mQ=0,nQ=0,oQ=0,pQ=0,qQ=0,rQ=0,sQ=0,uQ=0,vQ=0,wQ=0,xQ=0,yQ=0,zQ=0,AQ=0,BQ=0,CQ=0,DQ=0,EQ=0,FQ=0,GQ=0,HQ=0,IQ=0,JQ=0,KQ=0,LQ=0,MQ=0,NQ=0,OQ=0,PQ=0,QQ=0,RQ=0,SQ=0,TQ=0,UQ=0,VQ=0,WQ=0,XQ=0,YQ=0,ZQ=0,$Q=0,_Q=0,aR=0,bR=0,cR=0,dR=0,eR=0,fR=0,gR=0,hR=0,iR=0,jR=0,kR=0,lR=0,mR=0,nR=0,oR=0,pR=0,qR=0,rR=0,sR=0,tR=0,uR=0,vR=0,wR=0,xR=0,yR=0,zR=0,AR=0,BR=0,CR=0,DR=0,FR=0,GR=0,HR=0,IR=0,JR=0,KR=0,LR=0,MR=0,NR=0,OR=0,PR=0,QR=0,RR=0,SR=0,TR=0,VR=0,WR=0,XR=0,YR=0,ZR=0,$R=0,_R=0,aS=0,bS=0,cS=0,dS=0,eS=0,fS=0,gS=0,hS=0,iS=0,jS=0,kS=0,lS=0,mS=0,nS=0,oS=0,qS=0,rS=0,tS=0,uS=0,vS=0,wS=0,xS=0,yS=0,zS=0,AS=0,BS=0,CS=0,ES=0,FS=0,GS=0,HS=0,IS=0,JS=0,KS=0,LS=0,MS=0,NS=0,PS=0,QS=0,RS=0,SS=0,TS=0,US=0,VS=0,WS=0,XS=0,YS=0,$S=0,_S=0,aT=0,bT=0,cT=0,dT=0,eT=0,fT=0,gT=0,hT=0,iT=0,jT=0,kT=0,lT=0,mT=0,nT=0,oT=0,pT=0,qT=0,rT=0,sT=0,tT=0,uT=0,vT=0,wT=0,xT=0,yT=0,zT=0,AT=0,BT=0,CT=0,DT=0,ET=0,FT=0,GT=0,HT=0,IT=0,JT=0,KT=0,LT=0,MT=0,NT=0,OT=0,PT=0,QT=0,RT=0,ST=0,TT=0,UT=0,VT=0,WT=0,XT=0,YT=0,ZT=0,$T=0,_T=0,aU=0,bU=0,cU=0,dU=0,eU=0,fU=0,gU=0,hU=0,iU=0,jU=0,kU=0,lU=0,mU=0,nU=0,oU=0,pU=0,qU=0,rU=0,sU=0,tU=0,uU=0,vU=0,wU=0,xU=0,yU=0,zU=0,AU=0,BU=0,CU=0,DU=0,EU=0,FU=0,GU=0,IU=0,JU=0,KU=0,LU=0,MU=0,NU=0,OU=0,PU=0,QU=0,RU=0,SU=0,TU=0,UU=0,VU=0,WU=0,XU=0,YU=0,ZU=0,_U=0,aV=0,bV=0,cV=0,dV=0,eV=0,fV=0,gV=0,hV=0,iV=0,jV=0,kV=0,lV=0,mV=0,nV=0,oV=0,pV=0,qV=0,rV=0,sV=0,tV=0,uV=0,vV=0,wV=0,xV=0,yV=0,zV=0,AV=0,BV=0,CV=0,DV=0,EV=0,FV=0,GV=0,HV=0,IV=0,JV=0,KV=0,LV=0,MV=0,NV=0,OV=0,PV=0,QV=0,RV=0,SV=0,TV=0,UV=0,VV=0,XV=0,YV=0,ZV=0,$V=0,_V=0,aW=0,bW=0,cW=0,dW=0,eW=0,fW=0,gW=0,hW=0,iW=0,jW=0,kW=0,lW=0,mW=0,nW=0,oW=0,pW=0,qW=0,rW=0,sW=0,tW=0,uW=0,vW=0,wW=0,xW=0,yW=0,zW=0,AW=0,BW=0,CW=0,DW=0,EW=0,FW=0,GW=0,HW=0,IW=0,JW=0,KW=0,LW=0,MW=0,NW=0,OW=0,PW=0,QW=0,RW=0,SW=0,TW=0,UW=0,VW=0,WW=0,XW=0,YW=0,ZW=0,$W=0,_W=0,aX=0,bX=0,cX=0,dX=0,eX=0,fX=0,gX=0,hX=0,iX=0,jX=0,kX=0,lX=0,mX=0,nX=0,oX=0,pX=0,qX=0,rX=0,sX=0,tX=0,uX=0,vX=0,wX=0,xX=0,yX=0,zX=0,AX=0,BX=0,CX=0,DX=0,EX=0,FX=0,GX=0,HX=0,IX=0,JX=0,KX=0,LX=0,MX=0,NX=0,OX=0,PX=0,QX=0,RX=0,TX=0,UX=0,VX=0,WX=0,XX=0,YX=0,ZX=0,$X=0,_X=0,aY=0,bY=0,cY=0,dY=0,eY=0,fY=0,gY=0,hY=0,iY=0,jY=0,kY=0,lY=0,mY=0,nY=0,oY=0,pY=0,qY=0,rY=0,sY=0,tY=0,uY=0,vY=0,wY=0,xY=0,yY=0,zY=0,AY=0,BY=0,CY=0,DY=0,EY=0,FY=0,GY=0,HY=0,IY=0,JY=0,KY=0,LY=0,MY=0,NY=0,OY=0,PY=0,QY=0,RY=0,SY=0,TY=0,UY=0,VY=0,WY=0,XY=0,YY=0,ZY=0,$Y=0,_Y=0,aZ=0,bZ=0,cZ=0,dZ=0,eZ=0,fZ=0,gZ=0,hZ=0,iZ=0,jZ=0,kZ=0,lZ=0,mZ=0,oZ=0,pZ=0,qZ=0,rZ=0,sZ=0,tZ=0,uZ=0,vZ=0,wZ=0,xZ=0,yZ=0,zZ=0,AZ=0,BZ=0,CZ=0,DZ=0,EZ=0,FZ=0,GZ=0,HZ=0,IZ=0,JZ=0,KZ=0,LZ=0,MZ=0,NZ=0,OZ=0,PZ=0,QZ=0,RZ=0,SZ=0,TZ=0,UZ=0,VZ=0,WZ=0,XZ=0,YZ=0,ZZ=0,$Z=0,_Z=0,a$=0,b$=0,c$=0,d$=0,e$=0,g$=0,h$=0,i$=0,j$=0,k$=0,l$=0,m$=0,n$=0,o$=0,p$=0,q$=0,r$=0,s$=0,t$=0,u$=0,v$=0,w$=0,x$=0,y$=0,z$=0,A$=0,B$=0,C$=0,D$=0,E$=0,F$=0,G$=0,H$=0,I$=0,J$=0,K$=0,L$=0,M$=0,N$=0,O$=0,P$=0,Q$=0,R$=0,S$=0,T$=0,U$=0,V$=0,W$=0,X$=0,Y$=0,Z$=0,$$=0,_$=0,a_=0,b_=0,c_=0,d_=0,e_=0,f_=0,g_=0,h_=0,i_=0,k_=0,l_=0,m_=0,n_=0,o_=0,p_=0,q_=0,r_=0,s_=0,t_=0,u_=0,v_=0,w_=0,x_=0,y_=0,z_=0,A_=0,B_=0,C_=0,D_=0,E_=0,F_=0,G_=0,H_=0,I_=0,J_=0,K_=0,L_=0,M_=0,N_=0,O_=0,P_=0,Q_=0,R_=0,S_=0,T_=0,U_=0,V_=0,W_=0,X_=0,Y_=0,Z_=0,$_=0,__=0,a0=0,b0=0,c0=0,d0=0,e0=0,f0=0,g0=0,h0=0,i0=0,j0=0,k0=0,l0=0,m0=0,n0=0,o0=0,p0=0,q0=0,r0=0,s0=0,t0=0,u0=0,v0=0,w0=0,x0=0,y0=0,z0=0,A0=0,B0=0,C0=0,D0=0,E0=0,F0=0,G0=0,H0=0,I0=0,J0=0,K0=0,L0=0,M0=0,N0=0,O0=0,Q0=0,R0=0,S0=0,T0=0,U0=0,V0=0,W0=0,X0=0,Y0=0,Z0=0,$0=0,_0=0,a1=0,b1=0,c1=0,d1=0,e1=0,f1=0,g1=0,h1=0,i1=0,j1=0,k1=0,l1=0,m1=0,n1=0,o1=0,p1=0,q1=0,r1=0,s1=0,t1=0,u1=0,v1=0,w1=0,x1=0,y1=0,z1=0,A1=0,B1=0,C1=0,D1=0,E1=0,F1=0,G1=0,H1=0,I1=0,J1=0,K1=0,L1=0,M1=0,N1=0,O1=0,P1=0,Q1=0,R1=0,S1=0,T1=0,U1=0,V1=0,W1=0,X1=0,Y1=0,Z1=0,$1=0,_1=0,b2=0,c2=0,d2=0,e2=0,f2=0,g2=0,h2=0,i2=0,j2=0,k2=0,l2=0,m2=0,n2=0,o2=0,p2=0,q2=0,r2=0,s2=0,t2=0,u2=0,v2=0,w2=0,x2=0,y2=0,z2=0,A2=0,B2=0,C2=0,D2=0,E2=0,F2=0,G2=0,H2=0,I2=0,J2=0,K2=0,L2=0,M2=0,O2=0,P2=0,Q2=0,R2=0,S2=0,T2=0,U2=0,V2=0,W2=0,X2=0,Y2=0,Z2=0,$2=0,_2=0,a3=0,b3=0,c3=0,d3=0,e3=0,f3=0,g3=0,h3=0,i3=0,j3=0,k3=0,l3=0,m3=0,n3=0,o3=0,p3=0,q3=0,r3=0,s3=0,t3=0,u3=0,v3=0,w3=0,x3=0,y3=0,z3=0,A3=0,B3=0,C3=0,D3=0,E3=0,F3=0,G3=0,H3=0,J3=0,K3=0,L3=0,M3=0,N3=0,O3=0,P3=0,Q3=0,R3=0,S3=0,T3=0,U3=0,V3=0,W3=0,X3=0,Y3=0,Z3=0,$3=0,_3=0,a4=0,b4=0,c4=0,d4=0,e4=0,f4=0,g4=0,h4=0,i4=0,j4=0,k4=0,l4=0,m4=0,n4=0,o4=0,p4=0,q4=0,r4=0,s4=0,t4=0,u4=0,v4=0,w4=0,x4=0,y4=0,z4=0,A4=0,B4=0,C4=0,D4=0,E4=0,F4=0,G4=0,H4=0,I4=0,K4=0,L4=0,M4=0,N4=0,O4=0,P4=0,Q4=0,R4=0,S4=0,T4=0,U4=0,V4=0,W4=0,X4=0,Y4=0,Z4=0,$4=0,_4=0,a5=0,b5=0,c5=0,d5=0,e5=0,f5=0,g5=0,h5=0,i5=0,j5=0,k5=0,m5=0,n5=0,o5=0,p5=0,q5=0,r5=0,s5=0,t5=0,u5=0,v5=0,w5=0,x5=0,y5=0,z5=0,A5=0,B5=0,C5=0,D5=0,E5=0,F5=0,G5=0,H5=0,I5=0,J5=0,K5=0,L5=0,M5=0,N5=0,O5=0,P5=0,Q5=0,R5=0,S5=0,T5=0,U5=0,V5=0,W5=0,X5=0,Y5=0,Z5=0,$5=0,_5=0,b6=0,c6=0,d6=0,e6=0,f6=0,g6=0,h6=0,i6=0,j6=0,k6=0,l6=0,m6=0,n6=0,o6=0,p6=0,q6=0,r6=0,s6=0,t6=0,u6=0,v6=0,w6=0,x6=0,y6=0,z6=0,A6=0,B6=0,C6=0,D6=0,E6=0,F6=0,G6=0,H6=0,I6=0,J6=0,K6=0,L6=0,M6=0,N6=0,O6=0,P6=0,Q6=0,R6=0,S6=0,T6=0,U6=0,V6=0,W6=0,X6=0,Y6=0,Z6=0,$6=0,_6=0,a7=0,b7=0,c7=0,d7=0,e7=0,f7=0,g7=0,h7=0,i7=0,j7=0,k7=0,l7=0,m7=0,n7=0,o7=0,p7=0,q7=0,r7=0,s7=0,t7=0,u7=0,v7=0,w7=0,x7=0,y7=0,z7=0,A7=0,B7=0,C7=0,D7=0,E7=0,F7=0,G7=0,H7=0,I7=0,J7=0,K7=0,L7=0,M7=0,N7=0,O7=0,P7=0,Q7=0,R7=0,S7=0,T7=0,U7=0,V7=0,W7=0,X7=0,Y7=0,Z7=0,$7=0,_7=0,a8=0,b8=0,c8=0,d8=0,e8=0,f8=0,g8=0,h8=0,i8=0,j8=0,k8=0,l8=0,m8=0,n8=0,o8=0,p8=0,q8=0,r8=0,s8=0,t8=0,u8=0,v8=0,w8=0,x8=0,y8=0,z8=0,A8=0,B8=0,C8=0,D8=0,E8=0,F8=0,G8=0,H8=0,I8=0,J8=0,K8=0,L8=0,M8=0,N8=0,O8=0,P8=0,Q8=0,R8=0,S8=0,T8=0,U8=0,V8=0,W8=0,X8=0,Y8=0,Z8=0,$8=0,_8=0,a9=0,b9=0,c9=0,d9=0,e9=0,f9=0,g9=0,h9=0,i9=0,j9=0,k9=0,l9=0,m9=0,n9=0,o9=0,p9=0,q9=0,r9=0,s9=0,t9=0,u9=0,v9=0,w9=0,x9=0,y9=0,z9=0,A9=0,B9=0,C9=0,D9=0,E9=0,F9=0,G9=0,H9=0,I9=0,J9=0,K9=0,L9=0,M9=0,N9=0,O9=0,Q9=0,R9=0,S9=0,T9=0,U9=0,V9=0,W9=0,X9=0,Y9=0,Z9=0,$9=0,_9=0,aaa=0,baa=0,caa=0,daa=0,eaa=0,gaa=0,haa=0,iaa=0,jaa=0,laa=0,maa=0,naa=0,oaa=0,paa=0,qaa=0,raa=0,saa=0,taa=0,uaa=0,vaa=0,waa=0,xaa=0,yaa=0,zaa=0,Aaa=0,Baa=0,Caa=0,Daa=0,Eaa=0,Faa=0,Gaa=0,Haa=0,Iaa=0,Jaa=0,Kaa=0,Laa=0,Maa=0,Naa=0,Oaa=0,Paa=0,Qaa=0,Raa=0,Saa=0,Taa=0,Uaa=0,Vaa=0,Waa=0,Xaa=0,Yaa=0,Zaa=0,$aa=0,_aa=0,aba=0,bba=0,cba=0,dba=0,eba=0,fba=0,gba=0,hba=0,iba=0,jba=0,kba=0,lba=0,mba=0,nba=0,oba=0,pba=0,qba=0,rba=0,sba=0,tba=0,uba=0,vba=0,wba=0,xba=0,yba=0,zba=0,Aba=0,Bba=0,Cba=0,Dba=0,Eba=0,Fba=0,Gba=0,Hba=0,Iba=0,Jba=0,Kba=0,Lba=0,Mba=0,Nba=0,Oba=0,Pba=0,Qba=0,Rba=0,Sba=0,Tba=0,Uba=0,Vba=0,Wba=0,Xba=0,Yba=0,Zba=0,$ba=0,_ba=0,aca=0,bca=0,cca=0,dca=0,eca=0,fca=0,gca=0,hca=0,ica=0,jca=0,kca=0,lca=0,mca=0,nca=0,oca=0,pca=0,qca=0,rca=0,sca=0,tca=0,uca=0,vca=0,wca=0,xca=0,yca=0,zca=0,Aca=0,Bca=0,Cca=0,Dca=0,Eca=0,Fca=0,Gca=0,Hca=0,Ica=0,Jca=0,Kca=0,Lca=0,Mca=0,Nca=0,Oca=0,Pca=0,Qca=0,Rca=0,Sca=0,Tca=0,Uca=0,Vca=0,Wca=0,Xca=0,Yca=0,Zca=0,$ca=0,_ca=0,ada=0,bda=0,cda=0,dda=0,eda=0,fda=0,hda=0,ida=0,jda=0,kda=0,lda=0,mda=0,nda=0,oda=0,pda=0,qda=0,rda=0,sda=0,tda=0,uda=0,vda=0,wda=0,xda=0,yda=0,zda=0,Ada=0,Bda=0,Dda=0,Eda=0,Fda=0,Gda=0,Hda=0,Ida=0,Jda=0,Kda=0,Lda=0,Mda=0,Nda=0,Oda=0,Pda=0,Qda=0,Rda=0,Sda=0,Tda=0,Uda=0,Vda=0,Wda=0,Xda=0,Yda=0,Zda=0,$da=0,_da=0,aea=0,bea=0,cea=0,dea=0,eea=0,fea=0,gea=0,hea=0,iea=0,jea=0,kea=0,lea=0;if(lea=o,o=o+944|0,(0|o)>=(0|p)&&ca(944),A=lea+920|0,z=lea+912|0,y=lea+904|0,x=lea+896|0,w=lea+888|0,v=lea+880|0,u=lea+872|0,t=lea+864|0,s=lea+856|0,r=lea+848|0,q=lea+840|0,n=lea+832|0,m=lea+824|0,l=lea+816|0,k=lea+808|0,j=lea+800|0,i=lea+792|0,h=lea+784|0,g=lea+776|0,H3=lea+588|0,$8=lea+930|0,j9=lea+480|0,F9=lea+464|0,laa=lea+448|0,waa=lea+440|0,Haa=lea+432|0,Saa=lea+424|0,bba=lea+416|0,dca=lea+929|0,Kca=lea+384|0,eda=lea+368|0,Wda=lea+344|0,ja=lea+320|0,kb=lea+928|0,Sb=lea+288|0,mc=lea+272|0,Ad=lea+240|0,Rf=lea+192|0,rh=lea+160|0,Nh=lea+144|0,Zh=lea+136|0,xj=lea+104|0,Tj=lea+88|0,BP=a,P1=b,S3=c,Fn=P1,!(0!=(0|Fn)))return void(o=lea);switch(_n=BP,mo=_n+216|0,xo=0|f[mo>>2],Io=0!=(0|xo),Io&&(To=BP,cp=To+244|0,np=0|e[cp>>1],yp=65535&np,Jp=P1,Up=Jp+10|0,dq=0|e[Up>>1],pq=65535&dq,(0|yp)!=(0|pq)&&(Lq=BP,Wq=Lq+248|0,fr=0|f[Wq>>2],qr=BP,Cr=qr+244|0,Nr=0|e[Cr>>1],Yr=0|Bn(fr,Nr),hs=BP,ts=hs+216|0,Es=0|f[ts>>2],Ps=Es+28|0,f[Ps>>2]=Yr,$s=BP,jt=0|f[$s>>2],ut=BP,Ft=ut+216|0,Qt=0|f[Ft>>2],Cu=BP,Nu=Cu+240|0,Zu=0|f[Nu>>2],iv=BP,tv=iv+176|0,Ev=0|f[tv>>2],sr(jt,Qt,Zu,Ev),Pv=BP,$v=Pv+176|0,jw=0|f[$v>>2],uw=BP,Gw=uw+240|0,f[Gw>>2]=jw,Rw=P1,bx=Rw+10|0,mx=0|e[bx>>1],xx=BP,Ix=xx+244|0,e[Ix>>1]=mx,Tx=BP,cy=Tx+248|0,ny=0|f[cy>>2],yy=P1,Jy=yy+10|0,Uy=0|e[Jy>>1],ez=0|Bn(ny,Uy),pz=BP,Az=pz+196|0,f[Az>>2]=ez)),Lz=P1,Wz=0|f[Lz>>2],fA=Wz,V5=fA,qA=P1,BA=qA+8|0,MA=0|e[BA>>1],XA=BP,hB=XA+200|0,e[hB>>1]=MA,sB=P1,DB=sB+4|0,OB=0|f[DB>>2],P1=OB,0|V5){case 17:for(iC=S3,tC=0==(0|iC),EC=P1,PC=0!=(0|EC),fea=tC|PC,fea||($C=BP,kD=BP,vD=kD+172|0,GD=0|f[vD>>2],RD=511&GD,aE=RD<<23,lE=5|aE,Zt($C,lE),wE=BP,$t(wE));;){if(HE=P1,!(0!=(0|HE)))break;bF=BP,nF=P1,yF=0|f[nF>>2],JF=P1,UF=JF+4|0,dG=0|f[UF>>2],oG=0!=(0|dG),zG=S3,KG=oG?0:zG,Yt(bF,yF,KG),VG=P1,eH=VG+4|0,qH=0|f[eH>>2],P1=qH}return void(o=lea);case 18:if(BH=BP,MH=0|Zt(BH,26),Y7=MH,XH=BP,gI=0|_t(XH,3),Qf=gI,rI=Y7,CI=Qf,NI=CI+4|0,f[NI>>2]=rI,YI=P1,hJ=0|f[YI>>2],tJ=0!=(0|hJ),tJ&&(EJ=BP,PJ=P1,$J=0|f[PJ>>2],jK=S3,Yt(EJ,$J,jK),uK=S3,0!=(0|uK)&&(QK=BP,_K=QK+172|0,kL=0|f[_K>>2],wL=kL+-1|0,f[_K>>2]=wL)),HL=Qf,f[HL>>2]=4,SL=BP,bM=0|Zt(SL,23),_9=bM,mM=BP,xM=Y7,au(mM,xM),IM=P1,TM=IM+4|0,cN=0|f[TM>>2],P1=cN,cca=0,C=0,nN=P1,zN=0|f[nN>>2],0!=(0|zN)){for(VN=P1,eO=0|f[VN>>2],Yh=eO,pO=BP,AO=pO+172|0,LO=0|f[AO>>2],ck=LO,WO=BP,fP=ck,qP=511&fP,DP=qP<<23,OP=27|DP,Zt(WO,OP),ZP=BP,$t(ZP);;){if(iQ=Yh,!(0!=(0|iQ)))break;for(EQ=Yh,PQ=0|f[EQ>>2],fm=PQ,$Q=fm,jR=0|f[$Q>>2],lo=jR,uR=C,GR=0!=(0|uR),GR&&(RR=BP,aS=C,au(RR,aS)),Gb=0;;)if(lS=lo,wS=0!=(0|lS),HS=BP,wS?(SS=lo,bT=0|f[SS>>2],Yt(HS,bT,1)):(mT=BP,xT=mT+172|0,JT=0|f[xT>>2],UT=511&JT,dU=UT<<23,oU=17|dU,zU=BP,KU=BP,VU=0|f[KU>>2],eV=0|ji(VU,69566,13),pV=0|bu(zU,eV),AV=65535&pV,MV=AV<<7,XV=oU|MV,Zt(HS,XV),gW=BP,$t(gW)),rW=BP,CW=BP,NW=CW+172|0,YW=0|f[NW>>2],hX=511&YW,sX=hX<<23,DX=1|sX,PX=ck,$X=511&PX,jY=$X<<14,uY=DX|jY,Zt(rW,uY),FY=BP,QY=FY+172|0,_Y=0|f[QY>>2],kZ=_Y+-1|0,f[QY>>2]=kZ,vZ=lo,GZ=0!=(0|vZ),GZ?(SZ=lo,b$=0|f[SZ>>2],m$=0!=(0|b$),m$?(x$=lo,I$=0|f[x$>>2],T$=0|f[I$>>2],c_=T$,n_=66==(0|c_),n_?(y_=BP,J_=BP,V_=J_+172|0,e0=0|f[V_>>2],p0=511&e0,A0=p0<<23,L0=32|A0,W0=BP,e1=BP,f1=0|f[e1>>2],g1=0|ji(f1,69580,10),h1=0|bu(W0,g1),j1=511&h1,k1=j1<<14,l1=L0|k1,m1=128|l1,Zt(y_,m1)):kea=26):kea=26):kea=26,26==(0|kea)&&(kea=0,n1=BP,o1=BP,p1=o1+172|0,q1=0|f[p1>>2],r1=511&q1,s1=r1<<23,u1=32|s1,v1=BP,w1=BP,x1=0|f[w1>>2],y1=0|ji(x1,69591,3),z1=0|bu(v1,y1),A1=511&z1,B1=A1<<14,C1=u1|B1,D1=128|C1,Zt(n1,D1)),F1=BP,G1=BP,H1=G1+172|0,I1=0|f[H1>>2],J1=511&I1,K1=J1<<23,L1=24|K1,M1=Gb,N1=M1+32767|0,O1=65535&N1,R1=O1<<7,S1=L1|R1,T1=0|Zt(F1,S1),Ld=T1,U1=Ld,Gb=U1,V1=lo,W1=0!=(0|V1),W1&&(X1=lo,Y1=X1+4|0,Z1=0|f[Y1>>2],lo=Z1),$1=lo,!(0!=(0|$1)))break;b2=BP,c2=0|Zt(b2,4194199),C=c2,d2=BP,e2=Gb,cu(d2,e2),f2=BP,g2=f2+172|0,h2=0|f[g2>>2],i2=h2+-1|0,f[g2>>2]=i2,j2=fm,l2=j2+4|0,m2=0|f[l2>>2],n2=0|f[m2>>2],o2=0!=(0|n2),o2&&(p2=BP,q2=fm,r2=q2+4|0,s2=0|f[r2>>2],t2=0|f[s2>>2],u2=ck,du(p2,t2,u2,0)),w2=fm,x2=w2+4|0,y2=0|f[x2>>2],z2=y2+4|0,A2=0|f[z2>>2],B2=0|f[A2>>2],C2=0!=(0|B2),C2&&(D2=BP,E2=fm,F2=E2+4|0,H2=0|f[F2>>2],I2=H2+4|0,J2=0|f[I2>>2],K2=0|f[J2>>2],L2=S3,Yt(D2,K2,L2),M2=S3,0!=(0|M2)&&(O2=BP,P2=O2+172|0,Q2=0|f[P2>>2],S2=Q2+-1|0,f[P2>>2]=S2)),T2=BP,U2=cca,V2=U2+32767|0,W2=65535&V2,X2=W2<<7,Y2=23|X2,Z2=0|Zt(T2,Y2),Ld=Z2,$2=Ld,cca=$2,_2=Yh,b3=_2+4|0,c3=0|f[b3>>2],Yh=c3,d3=BP,$t(d3)}e3=C,f3=0!=(0|e3),f3&&(g3=BP,h3=C,au(g3,h3),i3=BP,j3=ck,k3=511&j3,m3=k3<<23,n3=29|m3,Zt(i3,n3))}return o3=BP,p3=o3+172|0,q3=0|f[p3>>2],r3=q3+-1|0,f[p3>>2]=r3,s3=P1,t3=s3+4|0,u3=0|f[t3>>2],P1=u3,v3=BP,x3=_9,au(v3,x3),y3=BP,Zt(y3,8388636),z3=P1,A3=0|f[z3>>2],B3=0!=(0|A3),B3?(C3=BP,D3=P1,E3=0|f[D3>>2],F3=S3,Yt(C3,E3,F3)):(G3=S3,0!=(0|G3)&&(J3=BP,$t(J3))),K3=BP,L3=cca,cu(K3,L3),M3=BP,eu(M3,0),void(o=lea);case 19:return N3=BP,O3=N3+176|0,P3=0|f[O3>>2],ss=P3,Q3=BP,Zt(Q3,30),R3=BP,U3=R3+192|0,V3=0|f[U3>>2],W3=V3+1|0,f[U3>>2]=W3,X3=BP,Y3=P1,Z3=0|f[Y3>>2],$3=S3,Yt(X3,Z3,$3),_3=BP,a4=P1,b4=a4+4|0,d4=0|f[b4>>2],e4=0|fu(_3,d4,0),oq=e4,f4=oq,g4=65535&f4,h4=g4<<7,i4=30|h4,j4=BP,k4=j4+204|0,l4=0|f[k4>>2],m4=ss,o4=l4+(m4<<2)|0,f[o4>>2]=i4,p4=BP,q4=p4+192|0,r4=0|f[q4>>2],s4=r4+-1|0,f[q4>>2]=s4,t4=BP,gu(t4,8388639,0),void(o=lea);case 53:return u4=BP,v4=P1,w4=0|hu(u4,v4,1),Yu=w4,x4=BP,z4=BP,A4=z4+172|0,B4=0|f[A4>>2],C4=511&B4,D4=C4<<23,E4=64|D4,F4=Yu,G4=16383&F4,H4=G4<<9,I4=384|H4,K4=E4|I4,Zt(x4,K4),L4=BP,$t(L4),void(o=lea);case 4:return M4=BP,N4=P1,O4=0|hu(M4,N4,1),ax=O4,P4=BP,Q4=BP,R4=Q4+172|0,S4=0|f[R4>>2],T4=511&S4,V4=T4<<23,W4=64|V4,X4=ax,Y4=16383&X4,Z4=Y4<<9,$4=256|Z4,_4=W4|$4,Zt(P4,_4),a5=BP,$t(a5),void(o=lea);case 5:switch(b5=P1,c5=b5+4|0,e5=0|f[c5>>2],f5=e5+4|0,g5=0|f[f5>>2],h5=0|f[g5>>2],jD=h5,i5=P1,j5=0|f[i5>>2],k5=0|f[j5>>2],0|k5){case 55:case 50:case 87:return m5=BP,n5=P1,p5=n5+4|0,q5=0|f[p5>>2],r5=0|f[q5>>2],s5=S3,Yt(m5,r5,s5),void(o=lea);case 86:case 88:return t5=BP,u5=jD,v5=S3,Yt(t5,u5,v5),void(o=lea);default:return w5=BP,x5=P1,y5=0|f[x5>>2],Yt(w5,y5,1),A5=BP,B5=A5+172|0,C5=0|f[B5>>2],D5=C5+-1|0,f[B5>>2]=D5,E5=BP,F5=BP,G5=F5+172|0,H5=0|f[G5>>2],I5=511&H5,J5=I5<<23,L5=25|J5,M5=4194176|L5,N5=0|gu(E5,M5,0),dz=N5,O5=BP,P5=P1,Q5=P5+4|0,R5=0|f[Q5>>2],S5=0|f[R5>>2],T5=S3,Yt(O5,S5,T5),U5=S3,X5=0!=(0|U5),X5&&(Y5=P1,Z5=Y5+4|0,$5=0|f[Z5>>2],_5=0|f[$5>>2],0!=(0|_5)||(b6=BP,c6=BP,d6=c6+172|0,e6=0|f[d6>>2],g6=511&e6,h6=g6<<23,i6=5|h6,Zt(b6,i6),j6=BP,$t(j6))),k6=jD,l6=0!=(0|k6),m6=S3,n6=0!=(0|m6),l6?(n6&&(o6=BP,p6=o6+172|0,r6=0|f[p6>>2],s6=r6+-1|0,f[p6>>2]=s6),t6=BP,u6=0|Zt(t6,4194199),gB=u6,v6=BP,w6=dz,au(v6,w6),x6=BP,y6=jD,z6=S3,Yt(x6,y6,z6),A6=BP,C6=gB,au(A6,C6),void(o=lea)):(D6=BP,n6?(E6=D6+172|0,F6=0|f[E6>>2],G6=F6+-1|0,f[E6>>2]=G6,H6=BP,I6=0|Zt(H6,4194199),gB=I6,J6=BP,K6=dz,au(J6,K6),L6=BP,N6=BP,O6=N6+172|0,P6=0|f[O6>>2],Q6=511&P6,R6=Q6<<23,S6=5|R6,Zt(L6,S6),T6=BP,U6=gB,au(T6,U6),V6=BP,$t(V6),void(o=lea)):(W6=dz,au(D6,W6),void(o=lea)))}break;case 20:return Y6=BP,Z6=P1,$6=0|f[Z6>>2],Yt(Y6,$6,1),_6=BP,a7=_6+172|0,b7=0|f[a7>>2],c7=b7+-1|0,f[a7>>2]=c7,d7=BP,e7=BP,f7=e7+172|0,h7=0|f[f7>>2],i7=511&h7,j7=i7<<23,k7=25|j7,l7=4194176|k7,m7=0|Zt(d7,l7),mF=m7,n7=BP,o7=P1,p7=o7+4|0,q7=0|f[p7>>2],s7=S3,Yt(n7,q7,s7),t7=BP,u7=mF,au(t7,u7),void(o=lea);case 21:return v7=BP,w7=P1,x7=0|f[w7>>2],Yt(v7,x7,1),y7=BP,z7=y7+172|0,A7=0|f[z7>>2],B7=A7+-1|0,f[z7>>2]=B7,D7=BP,E7=BP,F7=E7+172|0,G7=0|f[F7>>2],H7=511&G7,I7=H7<<23,J7=24|I7,K7=4194176|J7,L7=0|Zt(D7,K7),pH=L7,M7=BP,O7=P1,P7=O7+4|0,Q7=0|f[P7>>2],R7=S3,Yt(M7,Q7,R7),S7=BP,T7=pH,au(S7,T7),void(o=lea);case 9:return U7=BP,V7=0|_t(U7,0),sJ=V7,W7=BP,X7=0|Zt(W7,4194199),$7=sJ,_7=$7+4|0,f[_7>>2]=X7,a8=BP,b8=0|iu(a8),c8=sJ,d8=c8+8|0,f[d8>>2]=b8,e8=BP,f8=P1,g8=f8+4|0,h8=0|f[g8>>2],Yt(e8,h8,0),j8=BP,k8=sJ,l8=k8+4|0,m8=0|f[l8>>2],au(j8,m8),n8=BP,o8=P1,p8=0|f[o8>>2],Yt(n8,p8,1),q8=BP,r8=q8+172|0,s8=0|f[r8>>2],u8=s8+-1|0,f[r8>>2]=u8,v8=BP,w8=BP,x8=w8+172|0,y8=0|f[x8>>2],z8=511&y8,A8=z8<<23,B8=24|A8,C8=sJ,D8=C8+8|0,F8=0|f[D8>>2],G8=BP,H8=G8+176|0,I8=0|f[H8>>2],J8=F8-I8|0,K8=J8+32767|0,L8=65535&K8,M8=L8<<7,N8=B8|M8,Zt(v8,N8),O8=BP,Q8=S3,eu(O8,Q8),void(o=lea);case 10:return R8=BP,S8=0|_t(R8,0),vL=S8,T8=BP,U8=0|Zt(T8,4194199),V8=vL,W8=V8+4|0,f[W8>>2]=U8,X8=BP,Y8=0|iu(X8),Z8=vL,_8=Z8+8|0,f[_8>>2]=Y8,a9=BP,b9=P1,c9=b9+4|0,d9=0|f[c9>>2],Yt(a9,d9,0),e9=BP,f9=vL,g9=f9+4|0,h9=0|f[g9>>2],au(e9,h9),i9=BP,k9=P1,l9=0|f[k9>>2],Yt(i9,l9,1),m9=BP,n9=m9+172|0,o9=0|f[n9>>2],p9=o9+-1|0,f[n9>>2]=p9,q9=BP,r9=BP,s9=r9+172|0,t9=0|f[s9>>2],v9=511&t9,w9=v9<<23,x9=25|w9,y9=vL,z9=y9+8|0,A9=0|f[z9>>2],B9=BP,C9=B9+176|0,D9=0|f[C9>>2],E9=A9-D9|0,G9=E9+32767|0,H9=65535&G9,I9=H9<<7,J9=x9|I9,Zt(q9,J9),K9=BP,L9=S3,eu(K9,L9),void(o=lea);case 12:return M9=BP,N9=P1,ju(M9,N9),O9=S3,0!=(0|O9)?(R9=BP,$t(R9),void(o=lea)):void(o=lea);case 6:for(yN=0,IT=0,S9=P1,T9=0|f[S9>>2],U9=0!=(0|T9),U9&&(V9=BP,W9=V9+172|0,X9=0|f[W9>>2],yN=X9,Y9=BP,Z9=P1,$9=0|f[Z9>>2],Yt(Y9,$9,1)),baa=P1,caa=baa+4|0,daa=0|f[caa>>2],P1=daa;;){if(eaa=P1,!(0!=(0|eaa)))break;for(gaa=P1,haa=0|f[gaa>>2],iaa=0|f[haa>>2],OX=iaa,FR=0,CP=0;;){if(jaa=OX,!(0!=(0|jaa)))break;maa=BP,naa=OX,oaa=0|f[naa>>2],Yt(maa,oaa,1),paa=yN,qaa=0!=(0|paa),raa=BP;do{if(qaa){if(saa=BP,taa=saa+172|0,uaa=0|f[taa>>2],vaa=511&uaa,xaa=vaa<<23,yaa=1|xaa,zaa=yN,Aaa=511&zaa,Baa=Aaa<<14,Caa=yaa|Baa,Zt(raa,Caa),Daa=BP,Eaa=Daa+172|0,Faa=0|f[Eaa>>2],Gaa=Faa+-1|0,f[Eaa>>2]=Gaa,Iaa=OX,Jaa=0|f[Iaa>>2],Kaa=0|f[Jaa>>2],Laa=Kaa,Maa=66==(0|Laa),Naa=BP,Oaa=BP,Paa=Oaa+172|0,Qaa=0|f[Paa>>2],Raa=511&Qaa,Taa=Raa<<23,Uaa=32|Taa,Vaa=BP,Waa=BP,Xaa=0|f[Waa>>2],Maa){Yaa=0|ji(Xaa,69580,10),Zaa=0|bu(Vaa,Yaa),$aa=511&Zaa,_aa=$aa<<14,aba=Uaa|_aa,cba=128|aba,Zt(Naa,cba);break}dba=0|ji(Xaa,69591,3),eba=0|bu(Vaa,dba),fba=511&eba,gba=fba<<14,hba=Uaa|gba,iba=128|hba,Zt(Naa,iba);break}jba=raa+172|0,kba=0|f[jba>>2],lba=kba+-1|0,f[jba>>2]=lba}while(0);nba=BP,oba=BP,pba=oba+172|0,qba=0|f[pba>>2],rba=511&qba,sba=rba<<23,tba=24|sba,uba=FR,vba=uba+32767|0,wba=65535&vba,yba=wba<<7,zba=tba|yba,Aba=0|Zt(nba,zba),LV=Aba,Bba=LV,FR=Bba,Cba=OX,Dba=Cba+4|0,Eba=0|f[Dba>>2],OX=Eba}Fba=P1,Gba=0|f[Fba>>2],Hba=0|f[Gba>>2],Jba=0!=(0|Hba),Jba&&(Kba=BP,Lba=0|Zt(Kba,4194199),CP=Lba,Mba=BP,Nba=FR,cu(Mba,Nba)),Oba=BP,Pba=P1,Qba=0|f[Pba>>2],Rba=Qba+4|0,Sba=0|f[Rba>>2],Uba=S3,Yt(Oba,Sba,Uba),Vba=S3,Wba=0!=(0|Vba),Wba&&(Xba=BP,Yba=Xba+172|0,Zba=0|f[Yba>>2],$ba=Zba+-1|0,f[Yba>>2]=$ba),_ba=BP,aca=IT,bca=aca+32767|0,eca=65535&bca,fca=eca<<7,gca=23|fca,hca=0|Zt(_ba,gca),LV=hca,ica=LV,IT=ica,jca=CP,kca=0!=(0|jca),kca&&(lca=BP,mca=CP,au(lca,mca)),nca=P1,pca=nca+4|0,qca=0|f[pca>>2],P1=qca}return rca=S3,sca=0!=(0|rca),sca?(tca=BP,uca=tca+172|0,vca=0|f[uca>>2],RZ=vca,wca=BP,xca=BP,yca=xca+172|0,Aca=0|f[yca>>2],Bca=511&Aca,Cca=Bca<<23,Dca=5|Cca,Zt(wca,Dca),Eca=IT,Fca=0!=(0|Eca),Fca&&(Gca=BP,Hca=IT,cu(Gca,Hca)),Ica=yN,Jca=0!=(0|Ica),Jca&&(Lca=BP,Mca=Lca+172|0,Nca=0|f[Mca>>2],Oca=Nca+-1|0,f[Mca>>2]=Oca),Pca=BP,Qca=BP,Rca=Qca+172|0,Sca=0|f[Rca>>2],Tca=511&Sca,Uca=Tca<<23,Wca=1|Uca,Xca=RZ,Yca=511&Xca,Zca=Yca<<14,$ca=Wca|Zca,Zt(Pca,$ca),_ca=BP,$t(_ca),void(o=lea)):(ada=IT,bda=0!=(0|ada),bda&&(cda=BP,dda=IT,cu(cda,dda)),fda=yN,0!=(0|fda)?(hda=BP,ida=hda+172|0,jda=0|f[ida>>2],kda=jda+-1|0,f[ida>>2]=kda,void(o=lea)):void(o=lea));case 3:return lda=BP,mda=P1,fu(lda,mda,0),void(o=lea);case 29:case 30:return nda=BP,oda=P1,qda=S3,ku(nda,oda,0,0,qda),void(o=lea);case 80:return rda=BP,sda=P1,tda=0|f[sda>>2],uda=S3,Yt(rda,tda,uda),vda=BP,wda=P1,xda=wda+4|0,yda=0|f[xda>>2],zda=S3,Yt(vda,yda,zda),Bda=S3,0!=(0|Bda)?(Dda=BP,Eda=Dda+172|0,Fda=0|f[Eda>>2],Gda=Fda+-1|0,f[Eda>>2]=Gda,Hda=BP,Ida=Hda+172|0,Jda=0|f[Ida>>2],Kda=Jda+-1|0,f[Ida>>2]=Kda,Mda=BP,Nda=BP,Oda=Nda+172|0,Pda=0|f[Oda>>2],Qda=511&Pda,Rda=Qda<<23,Sda=65|Rda,Tda=BP,Uda=Tda+172|0,Vda=0|f[Uda>>2],Xda=511&Vda,Yda=Xda<<14,Zda=Sda|Yda,Zt(Mda,Zda),$da=BP,$t($da),void(o=lea)):void(o=lea);case 81:return _da=BP,aea=P1,bea=0|f[aea>>2],cea=S3,Yt(_da,bea,cea),dea=BP,eea=P1,E=eea+4|0,F=0|f[E>>2],G=S3,Yt(dea,F,G),H=S3,0!=(0|H)?(J=BP,K=J+172|0,L=0|f[K>>2],M=L+-1|0,f[K>>2]=M,N=BP,P=N+172|0,Q=0|f[P>>2],R=Q+-1|0,f[P>>2]=R,S=BP,T=BP,U=T+172|0,V=0|f[U>>2],W=511&V,X=W<<23,Y=65|X,$=BP,_=$+172|0,aa=0|f[_>>2],ba=511&aa,da=ba<<14,ea=Y|da,fa=128|ea,Zt(S,fa),ga=BP,$t(ga),void(o=lea)):void(o=lea);case 77:return ha=BP,ia=P1,ka=ia+4|0,la=0|f[ka>>2],ma=la,na=0|lu(ha,ma),U_=na,oa=BP,pa=P1,qa=0|f[pa>>2],Yt(oa,qa,1),ra=BP,sa=ra+172|0,ta=0|f[sa>>2],va=ta+-1|0,f[sa>>2]=va,wa=BP,xa=BP,ya=xa+172|0,za=0|f[ya>>2],Aa=511&za,Ba=Aa<<23,Ca=19|Ba,Da=U_,Ea=65535&Da,Ga=Ea<<7,Ha=Ca|Ga,Zt(wa,Ha),Ia=S3,0!=(0|Ia)?(Ka=BP,$t(Ka),void(o=lea)):void(o=lea);case 78:return La=BP,Ma=P1,Na=Ma,Oa=0|lu(La,Na),i1=Oa,Pa=BP,Ra=BP,Sa=Ra+172|0,Ta=0|f[Sa>>2],Ua=511&Ta,Va=Ua<<23,Wa=66|Va,Zt(Pa,Wa),Xa=BP,Ya=BP,Za=Ya+172|0,$a=0|f[Za>>2],ab=511&$a,bb=ab<<23,cb=19|bb,db=i1,eb=65535&db,fb=eb<<7,gb=cb|fb,Zt(Xa,gb),hb=S3,0!=(0|hb)?(jb=BP,$t(jb),void(o=lea)):void(o=lea);case 34:return lb=BP,mb=P1,nb=S3,ob=0|mu(lb,mb,nb),t1=ob,pb=t1,qb=(0|pb)>=0,rb=S3,sb=0!=(0|rb),qb?sb?(tb=t1,ub=BP,wb=ub+172|0,xb=0|f[wb>>2],yb=xb-tb|0,f[wb>>2]=yb,zb=BP,Ab=BP,Bb=Ab+172|0,Cb=0|f[Bb>>2],Db=511&Cb,Eb=Db<<23,Fb=55|Eb,Ib=BP,Jb=Ib+172|0,Kb=0|f[Jb>>2],Lb=511&Kb,Mb=Lb<<14,Nb=Fb|Mb,Ob=t1,Pb=127&Ob,Qb=Pb<<7,Rb=Nb|Qb,Zt(zb,Rb),Tb=BP,$t(Tb),void(o=lea)):void(o=lea):sb?(Ub=BP,$t(Ub),void(o=lea)):void(o=lea);case 36:for(E1=0,Q1=0;;){if(Vb=P1,!(0!=(0|Vb)))break;Xb=BP,Yb=P1,Zb=0|f[Yb>>2],$b=0|f[Zb>>2],_b=S3,Yt(Xb,$b,_b),ac=BP,cc=P1,dc=0|f[cc>>2],ec=dc+4|0,fc=0|f[ec>>2],gc=S3,Yt(ac,fc,gc),hc=E1,ic=hc+1|0,E1=ic,jc=P1,kc=jc+4|0,lc=0|f[kc>>2],P1=lc,nc=S3,oc=0!=(0|nc),pc=E1,qc=126==(0|pc),hea=oc&qc,hea&&(rc=E1,sc=rc<<1,tc=BP,uc=tc+172|0,vc=0|f[uc>>2],wc=vc-sc|0,f[uc>>2]=wc,yc=BP,zc=BP,Ac=zc+172|0,Bc=0|f[Ac>>2],Cc=511&Bc,Dc=Cc<<23,Ec=63|Dc,Fc=BP,Gc=Fc+172|0,Hc=0|f[Gc>>2],Jc=511&Hc,Kc=Jc<<14,Lc=Ec|Kc,Mc=E1,Nc=127&Mc,Oc=Nc<<7,Pc=Lc|Oc,Zt(yc,Pc),Qc=Q1,Rc=Qc<<24>>24!=0,Rc&&(Sc=BP,Uc=Sc+172|0,Vc=0|f[Uc>>2],Yc=Vc+-1|0,f[Uc>>2]=Yc,Zc=BP,$c=BP,_c=$c+172|0,ad=0|f[_c>>2],bd=511&ad,cd=bd<<23,dd=32|cd,fd=BP,gd=BP,hd=0|f[gd>>2],id=0|ji(hd,69595,8),jd=0|bu(fd,id),kd=511&jd,ld=kd<<14,md=dd|ld,nd=128|md,Zt(Zc,nd)),od=BP,$t(od),Q1=1,E1=0)}return qd=S3,0!=(0|qd)?(sd=E1,td=sd<<1,ud=BP,vd=ud+172|0,wd=0|f[vd>>2],xd=wd-td|0,f[vd>>2]=xd,yd=BP,zd=BP,Bd=zd+172|0,Cd=0|f[Bd>>2],Dd=511&Cd,Ed=Dd<<23,Fd=63|Ed,Gd=BP,Hd=Gd+172|0,Id=0|f[Hd>>2],Jd=511&Id,Kd=Jd<<14,Nd=Fd|Kd,Od=E1,Pd=127&Od,Qd=Pd<<7,Rd=Nd|Qd,Zt(yd,Rd),Sd=Q1,Td=Sd<<24>>24!=0,Td&&(Ud=BP,Vd=Ud+172|0,Wd=0|f[Vd>>2],Yd=Wd+-1|0,f[Vd>>2]=Yd,Zd=BP,$d=BP,_d=$d+172|0,ae=0|f[_d>>2],be=511&ae,ce=be<<23,de=32|ce,ee=BP,fe=BP,he=0|f[fe>>2],ie=0|ji(he,69595,8),je=0|bu(ee,ie),ke=511&je,le=ke<<14,me=de|le,ne=128|me,Zt(Zd,ne)),oe=BP,$t(oe),void(o=lea)):void(o=lea);case 66:return qe=BP,re=P1,Yt(qe,re,1),void(o=lea);case 24:return te=BP,ue=P1,ve=ue+4|0,we=0|f[ve>>2],Yt(te,we,1),xe=BP,ye=xe+172|0,ze=0|f[ye>>2],Ae=ze+-1|0,f[ye>>2]=Ae,Be=BP,Ce=P1,Ee=0|f[Ce>>2],Fe=BP,Ge=Fe+172|0,He=0|f[Ge>>2],Ie=S3,du(Be,Ee,He,Ie),void(o=lea);case 23:if(_1=0,k2=0,v2=0,Je=P1,Ke=Je+4|0,Le=0|f[Ke>>2],G2=Le,Me=BP,Ne=Me+172|0,Pe=0|f[Ne>>2],a3=Pe,Qe=G2,Re=0|f[Qe>>2],Se=Re,34==(0|Se)&&(Ue=G2,Ve=Ue+4|0,We=0|f[Ve>>2],Xe=0|nu(We),Ye=255&Xe,0!=(0|Ye))){for(_e=G2,af=_e+4|0,bf=0|f[af>>2],G2=bf;;){if(cf=G2,!(0!=(0|cf)))break;ef=BP,ff=G2,gf=0|f[ff>>2],Yt(ef,gf,1),hf=_1,kf=hf+1|0,_1=kf,lf=G2,mf=lf+4|0,nf=0|f[mf>>2],G2=nf}of=P1,pf=0|f[of>>2],P1=pf,qf=P1,rf=0|f[qf>>2],sf=0!=(0|rf);a:if(sf)for(tf=P1,vf=0|f[tf>>2],G2=vf,k2=0;;){if(wf=G2,!(0!=(0|wf)))break a;yf=BP,zf=G2,Af=0|f[zf>>2],Bf=a3,Cf=k2,Df=Bf+Cf|0,du(yf,Af,Df,0),Ef=k2,Gf=Ef+1|0,k2=Gf,Hf=G2,If=Hf+4|0,Jf=0|f[If>>2],G2=Jf}Kf=P1,Lf=Kf+4|0,Mf=0|f[Lf>>2],G2=Mf,Nf=G2,Of=0!=(0|Nf);a:if(Of){Pf=G2,Sf=Pf+4|0,Tf=0|f[Sf>>2],Uf=0!=(0|Tf);b:if(Uf)for(Vf=G2,Wf=Vf+4|0,Xf=0|f[Wf>>2],Yf=0|f[Xf>>2],R2=Yf;;){if(Zf=R2,!(0!=(0|Zf)))break b;_f=v2,bg=_f+1|0,v2=bg,cg=R2,dg=cg+4|0,eg=0|f[dg>>2],R2=eg}if(fg=G2,gg=0|f[fg>>2],hg=0!=(0|gg),hg&&(ig=_1,jg=v2,lg=k2,og=jg+lg|0,qg=(0|ig)<(0|og),qg?l3=0:(rg=_1,sg=v2,tg=rg-sg|0,ug=k2,vg=tg-ug|0,l3=vg),wg=BP,xg=BP,yg=xg+172|0,Ag=0|f[yg>>2],Bg=511&Ag,Cg=Bg<<23,Dg=55|Cg,Eg=a3,Fg=k2,Gg=Eg+Fg|0,Hg=511&Gg,Ig=Hg<<14,Jg=Dg|Ig,Lg=l3,Mg=127&Lg,Ng=Mg<<7,Og=Jg|Ng,Zt(wg,Og),Pg=BP,Qg=G2,Rg=0|f[Qg>>2],Sg=BP,Tg=Sg+172|0,Ug=0|f[Tg>>2],du(Pg,Rg,Ug,0),Wg=l3,Xg=k2,Yg=Xg+Wg|0,k2=Yg),Zg=G2,$g=Zg+4|0,_g=0|f[$g>>2],0!=(0|_g)&&(bh=G2,dh=bh+4|0,eh=0|f[dh>>2],hh=0|f[eh>>2],0!=(0|hh)))for(jh=G2,kh=jh+4|0,lh=0|f[kh>>2],mh=0|f[lh>>2],G2=mh;;){if(nh=k2,oh=_1,!((0|nh)<(0|oh)))break a;qh=BP,sh=G2,th=0|f[sh>>2],uh=a3,vh=k2,wh=uh+vh|0,du(qh,th,wh,0),xh=G2,yh=xh+4|0,zh=0|f[yh>>2],G2=zh,Ah=k2,Bh=Ah+1|0,k2=Bh}}return Dh=_1,(Eh=BP,Fh=Eh+172|0,Gh=0|f[Fh>>2],Hh=Gh-Dh|0,f[Fh>>2]=Hh,Ih=S3,0!=(0|Ih))?(Kh=BP,Lh=a3,Mh=511&Lh,Oh=Mh<<23,Ph=55|Oh,Qh=a3,Rh=511&Qh,Sh=Rh<<14,Th=Ph|Sh,Uh=_1,Vh=127&Uh,Wh=Vh<<7,Xh=Th|Wh,Zt(Kh,Xh),$h=BP,$t($h),void(o=lea)):void(o=lea)}return _h=BP,(ai=G2,Yt(_h,ai,1),bi=BP,ci=P1,di=0|f[ci>>2],ei=a3,fi=S3,ou(bi,di,ei,fi),gi=S3,0!=(0|gi))?void(o=lea):(ki=BP,mi=ki+172|0,ni=0|f[mi>>2],oi=ni+-1|0,f[mi>>2]=oi,void(o=lea));case 28:pi=P1,qi=pi+4|0,si=0|f[qi>>2],ti=0|f[si>>2],ui=ti,w3=ui,vi=BP,xi=0|f[vi>>2],yi=w3,zi=0|ri(xi,yi,H3),T3=zi,Ai=BP,Bi=P1,Ci=0|f[Bi>>2],Yt(Ai,Ci,1),Di=0|f[H3>>2],Ei=2==(0|Di);do{if(Ei){if(Fi=T3,Gi=0|d[Fi>>0],Ii=Gi<<24>>24,Ji=124==(0|Ii),Ji?(Ki=T3,Li=Ki+1|0,Mi=0|d[Li>>0],Ni=Mi<<24>>24,124==(0|Ni)||(kea=152)):kea=152,152==(0|kea)){if(Pi=T3,Qi=0|d[Pi>>0],Ri=Qi<<24>>24,!(38==(0|Ri)))break;if(Ui=T3,Vi=Ui+1|0,Wi=0|d[Vi>>0],Xi=Wi<<24>>24,!(38==(0|Xi)))break}return Zi=BP,$i=Zi+172|0,_i=0|f[$i>>2],aj=_i+-1|0,f[$i>>2]=aj,cj=BP,dj=T3,ej=0|d[dj>>0],fj=ej<<24>>24,gj=124==(0|fj),hj=gj?24:25,ij=127&hj,jj=BP,kj=jj+172|0,lj=0|f[kj>>2],nj=511&lj,oj=nj<<23,pj=ij|oj,qj=4194176|pj,rj=0|gu(cj,qj,0),n4=rj,sj=BP,tj=P1,uj=tj+4|0,vj=0|f[uj>>2],wj=vj+4|0,yj=0|f[wj>>2],zj=0|f[yj>>2],Yt(sj,zj,1),Aj=BP,Bj=Aj+172|0,Cj=0|f[Bj>>2],Dj=Cj+-1|0,f[Bj>>2]=Dj,Ej=BP,Fj=P1,Gj=0|f[Fj>>2],Hj=BP,Jj=Hj+172|0,Kj=0|f[Jj>>2],Lj=S3,du(Ej,Gj,Kj,Lj),Mj=BP,Nj=n4,au(Mj,Nj),void(o=lea)}}while(0);Oj=BP,Pj=P1,Qj=Pj+4|0,Rj=0|f[Qj>>2],Sj=Rj+4|0,Uj=0|f[Sj>>2],Vj=0|f[Uj>>2],Yt(Oj,Vj,1),Wj=BP,$t(Wj),Xj=BP,Yj=Xj+172|0,Zj=0|f[Yj>>2],$j=Zj+-1|0,f[Yj>>2]=$j,_j=BP,ak=_j+172|0,bk=0|f[ak>>2],ek=bk+-1|0,f[ak>>2]=ek,fk=BP,gk=fk+172|0,hk=0|f[gk>>2],ik=hk+-1|0,f[gk>>2]=ik,jk=BP,kk=w3,lk=0|bu(jk,kk),c4=lk,mk=0|f[H3>>2],nk=1==(0|mk),nk?(pk=T3,qk=0|d[pk>>0],rk=qk<<24>>24,sk=43==(0|rk),sk?(tk=BP,uk=BP,vk=uk+172|0,wk=0|f[vk>>2],xk=511&wk,yk=xk<<23,Ak=44|yk,Bk=c4,Ck=511&Bk,Dk=Ck<<14,Ek=Ak|Dk,Fk=128|Ek,Gk=S3,gu(tk,Fk,Gk)):kea=158):kea=158;do{if(158==(0|kea)){if(Hk=0|f[H3>>2],1==(0|Hk)&&(Jk=T3,Lk=0|d[Jk>>0],Mk=Lk<<24>>24,45==(0|Mk))){Ok=BP,Pk=BP,Qk=Pk+172|0,Rk=0|f[Qk>>2],Sk=511&Rk,Tk=Sk<<23,Uk=46|Tk,Wk=c4,Xk=511&Wk,Yk=Xk<<14,Zk=Uk|Yk,$k=128|Zk,_k=S3,gu(Ok,$k,_k);break}if(al=0|f[H3>>2],1==(0|al)&&(cl=T3,dl=0|d[cl>>0],fl=dl<<24>>24,42==(0|fl))){hl=BP,il=BP,jl=il+172|0,kl=0|f[jl>>2],ll=511&kl,ml=ll<<23,nl=48|ml,ol=c4,ql=511&ol,rl=ql<<14,sl=nl|rl,tl=128|sl,Zt(hl,tl);break}if(ul=0|f[H3>>2],1==(0|ul)&&(wl=T3,xl=0|d[wl>>0],yl=xl<<24>>24,47==(0|yl))){Bl=BP,Cl=BP,Dl=Cl+172|0,El=0|f[Dl>>2],Fl=511&El,Gl=Fl<<23,Hl=49|Gl,Il=c4,Jl=511&Il,Kl=Jl<<14,Ml=Hl|Kl,Nl=128|Ml,Zt(Bl,Nl);break}if(Ol=0|f[H3>>2],1==(0|Ol)&&(Ql=T3,Rl=0|d[Ql>>0],Sl=Rl<<24>>24,60==(0|Sl))){Ul=BP,Vl=BP,Xl=Vl+172|0,Yl=0|f[Xl>>2],Zl=511&Yl,$l=Zl<<23,_l=51|$l,am=c4,bm=511&am,cm=bm<<14,dm=_l|cm,em=128|dm,Zt(Ul,em);break}if(hm=0|f[H3>>2],2==(0|hm)&&(jm=T3,km=0|d[jm>>0],lm=km<<24>>24,60==(0|lm)&&(nm=T3,om=nm+1|0,pm=0|d[om>>0],qm=pm<<24>>24,61==(0|qm)))){tm=BP,um=BP,vm=um+172|0,wm=0|f[vm>>2],xm=511&wm,ym=xm<<23,zm=52|ym,Am=c4,Bm=511&Am,Dm=Bm<<14,Em=zm|Dm,Fm=128|Em,Zt(tm,Fm);break}if(Gm=0|f[H3>>2],1==(0|Gm)&&(Im=T3,Jm=0|d[Im>>0],Km=Jm<<24>>24,62==(0|Km))){Mm=BP,Om=BP,Pm=Om+172|0,Qm=0|f[Pm>>2],Rm=511&Qm,Sm=Rm<<23,Tm=53|Sm,Um=c4,Vm=511&Um,Wm=Vm<<14,Xm=Tm|Wm,Zm=128|Xm,Zt(Mm,Zm);break}if($m=0|f[H3>>2],2==(0|$m)&&(an=T3,bn=0|d[an>>0],cn=bn<<24>>24,62==(0|cn)&&(en=T3,fn=en+1|0,gn=0|d[fn>>0],jn=gn<<24>>24,61==(0|jn)))){ln=BP,mn=BP,nn=mn+172|0,on=0|f[nn>>2],pn=511&on,qn=pn<<23,rn=54|qn,sn=c4,un=511&sn,vn=un<<14,wn=rn|vn,xn=128|wn,Zt(ln,xn);break}yn=BP,zn=BP,An=zn+172|0,Cn=0|f[An>>2],Dn=511&Cn,En=Dn<<23,Gn=32|En,Hn=c4,In=511&Hn,Jn=In<<14,Kn=Gn|Jn,Ln=128|Kn,Zt(yn,Ln)}}while(0);return Mn=BP,Nn=P1,On=0|f[Nn>>2],Pn=BP,Rn=Pn+172|0,Sn=0|f[Rn>>2],Tn=S3,du(Mn,On,Sn,Tn),void(o=lea);case 32:return y4=0,0,U4=0,Un=BP,$t(Un),Vn=P1,Wn=0!=(0|Vn),Wn&&(Xn=P1,Yn=0|f[Xn>>2],d5=Yn,Zn=d5,0!=(0|Zn)&&(ao=BP,bo=d5,co=0|mu(ao,bo,1),y4=co,eo=y4,(0|eo)<0&&(U4=1,1,y4=1,go=BP,$t(go)))),ho=P1,io=0!=(0|ho),io?(jo=P1,ko=jo+4|0,no=0|f[ko>>2],oo=0!=(0|no),oo?(po=BP,qo=P1,ro=qo+4|0,so=0|f[ro>>2],Yt(po,so,1),to=BP,B=to):kea=190):kea=190,190==(0|kea)&&(uo=BP,vo=BP,wo=vo+172|0,yo=0|f[wo>>2],zo=511&yo,Ao=zo<<23,Bo=5|Ao,Zt(uo,Bo),Co=BP,$t(Co),Do=BP,B=Do),Eo=B+172|0,Fo=0|f[Eo>>2],Go=Fo+-1|0,f[Eo>>2]=Go,Ho=y4,Jo=Ho+1|0,Ko=BP,Lo=Ko+172|0,Mo=0|f[Lo>>2],No=Mo-Jo|0,f[Lo>>2]=No,Oo=U4,Po=0!=(0|Oo),Po&&(y4=127),Qo=BP,Ro=BP,So=Ro+172|0,Uo=0|f[So>>2],Vo=511&Uo,Wo=Vo<<23,Xo=36|Wo,Yo=y4,Zo=127&Yo,$o=Zo<<7,_o=Xo|$o,Zt(Qo,_o),ap=S3,0!=(0|ap)?(dp=BP,$t(dp),void(o=lea)):void(o=lea);case 33:for(ep=BP,o5=ep,z5=0,K5=0,fp=BP,$t(fp);;){if(gp=o5,hp=gp+184|0,ip=0|e[hp>>1],jp=(65535&ip)>>>15,kp=255&jp,lp=kp<<24>>24!=0,!(1^lp))break;if(op=z5,pp=op+1|0,z5=pp,qp=o5,rp=qp+164|0,sp=0|f[rp>>2],o5=sp,tp=o5,!(0!=(0|tp)))break}return vp=o5,(wp=0!=(0|vp),wp&&(xp=o5,zp=xp+184|0,Ap=0|e[zp>>1],Bp=Ap<<1&65535,Cp=Bp<<16>>16>>1,Dp=Cp<<16>>16,K5=Dp),Ep=BP,Fp=BP,Gp=Fp+172|0,Hp=0|f[Gp>>2],Ip=511&Hp,Kp=Ip<<23,Lp=37|Kp,Mp=K5,Np=Mp<<4,Op=z5,Pp=15&Op,Qp=Np|Pp,Rp=65535&Qp,Sp=Rp<<7,Tp=Lp|Sp,Zt(Ep,Tp),Vp=BP,$t(Vp),Wp=BP,$t(Wp),Xp=BP,Yp=Xp+172|0,Zp=0|f[Yp>>2],$p=Zp+-1|0,f[Yp>>2]=$p,_p=P1,aq=0!=(0|_p),aq&&(bq=P1,cq=bq+4|0,eq=0|f[cq>>2],0!=(0|eq)&&(gq=BP,hq=P1,iq=hq+4|0,jq=0|f[iq>>2],Yt(gq,jq,1),kq=BP,lq=kq+172|0,mq=0|f[lq>>2],nq=mq+-1|0,f[lq>>2]=nq)),qq=BP,rq=qq+172|0,sq=0|f[rq>>2],tq=sq+-1|0,f[rq>>2]=tq,uq=BP,vq=uq+172|0,wq=0|f[vq>>2],xq=wq+-1|0,f[vq>>2]=xq,yq=BP,zq=BP,Bq=zq+172|0,Cq=0|f[Bq>>2],Dq=511&Cq,Eq=Dq<<23,Fq=36|Eq,Gq=16256|Fq,Zt(yq,Gq),Hq=S3,0!=(0|Hq))?(Jq=BP,$t(Jq),void(o=lea)):void(o=lea);case 37:return Kq=P1,Mq=0!=(0|Kq),Nq=BP,Mq?(Oq=P1,Yt(Nq,Oq,1),Pq=BP,Qq=Pq+172|0,Rq=0|f[Qq>>2],Sq=Rq+-1|0,f[Qq>>2]=Sq):(Tq=BP,Uq=Tq+172|0,Vq=0|f[Uq>>2],Xq=511&Vq,Yq=Xq<<23,Zq=5|Yq,Zt(Nq,Zq)),$q=BP,_q=$q+188|0,ar=0|f[_q>>2],br=0!=(0|ar),cr=BP,dr=BP,er=dr+172|0,gr=0|f[er>>2],hr=511&gr,ir=hr<<23,jr=41|ir,br?(kr=32768|jr,Zt(cr,kr)):gu(cr,jr,0),lr=S3,0!=(0|lr)?(nr=BP,$t(nr),void(o=lea)):void(o=lea);case 38:for(or=BP,W5=or,f6=0,q6=0,B6=0,M6=0;;){if(pr=W5,rr=pr+184|0,tr=0|e[rr>>1],ur=(65535&tr)>>>15,vr=255&ur,wr=vr<<24>>24!=0,!(1^wr))break;if(yr=f6,zr=yr+1|0,f6=zr,Ar=W5,Br=Ar+164|0,Dr=0|f[Br>>2],W5=Dr,Er=W5,!(0!=(0|Er)))break}return Gr=W5,(Hr=0!=(0|Gr),Hr&&(Ir=W5,Jr=Ir+184|0,Kr=0|e[Jr>>1],Lr=Kr<<1&65535,Mr=Lr<<16>>16>>1,Or=Mr<<16>>16,q6=Or),Pr=BP,Qr=BP,Rr=Qr+172|0,Sr=0|f[Rr>>2],Tr=511&Sr,Ur=Tr<<23,Vr=43|Ur,Wr=q6,Xr=Wr<<4,Zr=f6,$r=15&Zr,_r=Xr|$r,as=65535&_r,bs=as<<7,cs=Vr|bs,Zt(Pr,cs),ds=BP,$t(ds),es=P1,fs=0!=(0|es),fs&&(gs=BP,is=P1,js=0|mu(gs,is,1),B6=js,ks=B6,(0|ks)<0&&(M6=1,B6=1,ms=BP,$t(ms))),ns=B6,os=ns+1|0,ps=BP,qs=ps+172|0,rs=0|f[qs>>2],us=rs-os|0,f[qs>>2]=us,vs=M6,ws=0!=(0|vs),ws&&(B6=127),xs=BP,ys=BP,zs=ys+172|0,As=0|f[zs>>2],Bs=511&As,Cs=Bs<<23,Ds=32|Cs,Fs=BP,Gs=BP,Hs=0|f[Gs>>2],Is=0|ji(Hs,69604,4),Js=0|bu(Fs,Is),Ks=511&Js,Ls=Ks<<14,Ms=Ds|Ls,Ns=B6,Os=127&Ns,Qs=Os<<7,Rs=Ms|Qs,Zt(xs,Rs),Ss=S3,0!=(0|Ss))?(Us=BP,$t(Us),void(o=lea)):void(o=lea);case 13:return Vs=BP,Ws=P1,pu(Vs,Ws),Xs=S3,0!=(0|Xs)?(Zs=BP,$t(Zs),void(o=lea)):void(o=lea);case 14:_s=BP,at=_s+188|0,bt=0|f[at>>2],ct=0!=(0|bt),dt=BP;do{if(ct){if(et=dt+188|0,ft=0|f[et>>2],gt=0|f[ft>>2],0==(0|gt)){it=BP,kt=it+192|0,lt=0|f[kt>>2],mt=BP,nt=mt+188|0,ot=0|f[nt>>2],pt=ot+20|0,qt=0|f[pt>>2],rt=(0|lt)>(0|qt),rt&&(st=BP,tt=BP,vt=tt+192|0,wt=0|f[vt>>2],xt=BP,yt=xt+188|0,zt=0|f[yt>>2],At=zt+20|0,Bt=0|f[At>>2],Ct=wt-Bt|0,Dt=511&Ct,Et=Dt<<23,Gt=31|Et,gu(st,Gt,0)),Ht=BP,It=P1,Yt(Ht,It,0),Jt=BP,Kt=BP,Lt=Kt+188|0,Mt=0|f[Lt>>2],Nt=Mt+4|0,Ot=0|f[Nt>>2],Pt=BP,Rt=Pt+176|0,St=0|f[Rt>>2],Tt=Ot-St|0,Ut=Tt+32767|0,Vt=65535&Ut,Wt=Vt<<7,Xt=23|Wt,Zt(Jt,Xt);break}zu=P1,Au=0!=(0|zu),Bu=BP,Au?(Du=P1,Yt(Bu,Du,1),Eu=BP,Fu=Eu+172|0,Gu=0|f[Fu>>2],Hu=Gu+-1|0,f[Fu>>2]=Hu):(Iu=BP,Ju=Iu+172|0,Ku=0|f[Ju>>2],Lu=511&Ku,Mu=Lu<<23,Ou=5|Mu,Zt(Bu,Ou)),Pu=BP,Qu=BP,Ru=Qu+172|0,Su=0|f[Ru>>2],Tu=511&Su,Uu=Tu<<23,Vu=41|Uu,gu(Pu,Vu,0)}else qu(dt,69609)}while(0);return Wu=S3,0!=(0|Wu)?($u=BP,$t($u),void(o=lea)):void(o=lea);case 15:return _u=BP,av=_u+188|0,bv=0|f[av>>2],cv=0!=(0|bv),dv=BP,cv?(ev=dv+192|0,fv=0|f[ev>>2],gv=BP,hv=gv+188|0,jv=0|f[hv>>2],kv=jv+20|0,lv=0|f[kv>>2],mv=(0|fv)>(0|lv),mv&&(nv=BP,ov=BP,pv=ov+192|0,qv=0|f[pv>>2],rv=BP,sv=rv+188|0,uv=0|f[sv>>2],vv=uv+20|0,wv=0|f[vv>>2],xv=qv-wv|0,yv=511&xv,zv=yv<<23,Av=31|zv,gu(nv,Av,0)),Bv=BP,Cv=BP,Dv=Cv+188|0,Fv=0|f[Dv>>2],Gv=Fv+8|0,Hv=0|f[Gv>>2],Iv=BP,Jv=Iv+176|0,Kv=0|f[Jv>>2],Lv=Hv-Kv|0,Mv=Lv+32767|0,Nv=65535&Mv,Ov=Nv<<7,Qv=23|Ov,Zt(Bv,Qv),void(o=lea)):(qu(dv,69625),void(o=lea));case 16:if(X6=69641,Rv=BP,Sv=Rv+188|0,Tv=0|f[Sv>>2],Uv=0!=(0|Tv),Vv=BP,!Uv)return Wv=X6,qu(Vv,Wv),void(o=lea);for(Xv=Vv+188|0,Yv=0|f[Xv>>2],g7=Yv,r7=0;;){if(Zv=g7,_v=0!=(0|Zv),_v?(aw=g7,bw=0|f[aw>>2],cw=4!=(0|bw),d1=cw):d1=0,dw=g7,!d1)break;ew=0|f[dw>>2],fw=3==(0|ew),fw&&(gw=r7,hw=gw+1|0,r7=hw),iw=g7,kw=iw+24|0,lw=0|f[kw>>2],g7=lw}if(!(0!=(0|dw)))return nw=BP,ow=X6,qu(nw,ow),void(o=lea);pw=r7,qw=(0|pw)>0;a:if(qw)for(;;){if(rw=r7,sw=rw+-1|0,r7=sw,!(0!=(0|rw)))break a;vw=BP,gu(vw,8388636,0)}return ww=BP,xw=ww+192|0,yw=0|f[xw>>2],zw=g7,Aw=zw+20|0,Bw=0|f[Aw>>2],Cw=(0|yw)>(0|Bw),Cw&&(Dw=BP,Ew=BP,Hw=Ew+192|0,Iw=0|f[Hw>>2],Jw=g7,Kw=Jw+20|0,Lw=0|f[Kw>>2],Mw=Iw-Lw|0,Nw=511&Mw,Ow=Nw<<23,Pw=31|Ow,gu(Dw,Pw,0)),Qw=BP,Sw=g7,Tw=Sw+4|0,Uw=0|f[Tw>>2],Vw=BP,Ww=Vw+176|0,Xw=0|f[Ww>>2],Yw=Uw-Xw|0,Zw=Yw+32767|0,$w=65535&Zw,_w=$w<<7,cx=23|_w,Zt(Qw,cx),void(o=lea);case 39:if(dx=S3,!(0!=(0|dx)))return void(o=lea);fx=BP,gx=P1,hx=gx,ix=0|ru(fx,hx),C7=ix,jx=C7,kx=(0|jx)>0;a:if(kx)lx=BP,nx=BP,ox=nx+172|0,px=0|f[ox>>2],qx=511&px,rx=qx<<23,sx=1|rx,tx=C7,ux=511&tx,vx=ux<<14,wx=sx|vx,gu(lx,wx,0);else{for(N7=0,yx=BP,zx=yx+164|0,Ax=0|f[zx>>2],Z7=Ax;;){if(Bx=Z7,!(0!=(0|Bx)))break a;if(Dx=Z7,Ex=P1,Fx=Ex,Gx=0|ru(Dx,Fx),C7=Gx,Hx=C7,(0|Hx)>0)break;$x=N7,_x=$x+1|0,N7=_x,ay=Z7,by=ay+164|0,dy=0|f[by>>2],Z7=dy}Kx=BP,Lx=BP,Mx=Lx+172|0,Nx=0|f[Mx>>2],Ox=511&Nx,Px=Ox<<23,Qx=21|Px,Rx=C7,Sx=511&Rx,Ux=Sx<<14,Vx=Qx|Ux,Wx=N7,Xx=127&Wx,Yx=Xx<<7,Zx=Vx|Yx,Zt(Kx,Zx)}return ey=BP,$t(ey),void(o=lea);case 41:return fy=S3,0!=(0|fy)?(hy=BP,iy=P1,jy=iy,ky=0|lu(hy,jy),i8=ky,ly=BP,my=BP,oy=my+172|0,py=0|f[oy>>2],qy=511&py,ry=qy<<23,sy=9|ry,ty=i8,uy=65535&ty,vy=uy<<7,wy=sy|vy,Zt(ly,wy),xy=BP,$t(xy),void(o=lea)):void(o=lea);case 42:return zy=S3,0!=(0|zy)?(By=BP,Cy=P1,Dy=Cy,Ey=0|lu(By,Dy),t8=Ey,Fy=BP,Gy=BP,Hy=Gy+172|0,Iy=0|f[Hy>>2],Ky=511&Iy,Ly=Ky<<23,My=13|Ly,Ny=t8,Oy=65535&Ny,Py=Oy<<7,Qy=My|Py,Zt(Fy,Qy),Ry=BP,$t(Ry),void(o=lea)):void(o=lea);case 44:return Sy=S3,0!=(0|Sy)?(Vy=BP,Wy=P1,Xy=Wy,Yy=0|lu(Vy,Xy),E8=Yy,Zy=BP,$y=BP,_y=$y+172|0,az=0|f[_y>>2],bz=511&az,cz=bz<<23,fz=15|cz,gz=E8,hz=65535&gz,iz=hz<<7,jz=fz|iz,Zt(Zy,jz),kz=BP,$t(kz),void(o=lea)):void(o=lea);case 43:return lz=BP,mz=P1,nz=mz,oz=0|lu(lz,nz),P8=oz,qz=BP,rz=BP,sz=rz+172|0,tz=0|f[sz>>2],uz=511&tz,vz=uz<<23,wz=17|vz,xz=P8,yz=65535&xz,zz=yz<<7,Bz=wz|zz,Zt(qz,Bz),Cz=S3,0!=(0|Cz)?(Ez=BP,$t(Ez),void(o=lea)):void(o=lea);case 89:return Fz=BP,Gz=P1,Yt(Fz,Gz,1),void(o=lea);case 46:return Hz=S3,0!=(0|Hz)?(d[$8>>0]=0|d[69658],d[$8+1>>0]=0|d[69659],Jz=P1,Kz=Jz,Mz=255&Kz,Nz=$8+1|0,d[Nz>>0]=Mz,Oz=BP,Pz=0|f[Oz>>2],mg(F9,Pz,$8,2),f[j9>>2]=0|f[F9>>2],f[j9+4>>2]=0|f[F9+4>>2],Qz=BP,Rz=BP,Sz=0|f[Rz>>2],f[g>>2]=0|f[j9>>2],f[g+4>>2]=0|f[j9+4>>2],Tz=0|li(Sz,g),Uz=0|lu(Qz,Tz),u9=Uz,Vz=BP,Xz=BP,Yz=Xz+172|0,Zz=0|f[Yz>>2],$z=511&Zz,_z=$z<<23,aA=9|_z,bA=u9,cA=65535&bA,dA=cA<<7,eA=aA|dA,Zt(Vz,eA),gA=BP,$t(gA),void(o=lea)):void(o=lea);case 45:return hA=S3,0!=(0|hA)?(jA=BP,kA=0|f[jA>>2],aaa=kA,lA=P1,mA=lA,su(laa,mA),nA=aaa,kg(waa,nA,4),oA=aaa,f[h>>2]=0|f[waa>>2],f[h+4>>2]=0|f[waa+4>>2],ch(Haa,oA,h,69658,1),pA=aaa,rA=aaa,f[i>>2]=0|f[laa>>2],f[i+4>>2]=0|f[laa+4>>2],pe(Saa,rA,i,10),f[j>>2]=0|f[waa>>2],f[j+4>>2]=0|f[waa+4>>2],f[k>>2]=0|f[Saa>>2],f[k+4>>2]=0|f[Saa+4>>2],fh(bba,pA,j,k),sA=BP,tA=aaa,f[l>>2]=0|f[waa>>2],f[l+4>>2]=0|f[waa+4>>2],uA=0|li(tA,l),vA=0|lu(sA,uA),Q9=vA,wA=BP,xA=BP,yA=xA+172|0,zA=0|f[yA>>2],AA=511&zA,CA=AA<<23,DA=9|CA,EA=Q9,FA=65535&EA,GA=FA<<7,HA=DA|GA,Zt(wA,HA),IA=BP,$t(IA),void(o=lea)):void(o=lea);case 91:return b1=BP,c1=P1,Yt(b1,c1,0),void(o=lea);case 69:return JA=BP,KA=P1,Yt(JA,KA,1),void(o=lea);case 50:return LA=S3,0!=(0|LA)?(OA=P1,PA=0|f[OA>>2],mba=PA,QA=P1,RA=QA+4|0,SA=0|f[RA>>2],TA=0|f[SA>>2],UA=TA,xba=UA,VA=BP,WA=mba,YA=xba,ZA=0|tu(VA,WA,YA,0,dca),Iba=ZA,$A=0|d[dca>>0],_A=$A<<24>>24!=0,_A?(aB=BP,bB=mba,cB=xba,dB=+uu(aB,bB,cB),oca=dB,eB=BP,fB=BP,iB=0|f[fB>>2],jB=oca,kB=jB,vu(Kca,iB,kB),f[m>>2]=0|f[Kca>>2],f[m+4>>2]=0|f[Kca+4>>2],lB=0|wu(eB,m),zca=lB,mB=BP,nB=BP,oB=nB+172|0,pB=0|f[oB>>2],qB=511&pB,rB=qB<<23,tB=2|rB,uB=zca,vB=65535&uB,wB=vB<<7,xB=tB|wB,Zt(mB,xB)):(yB=Iba,zB=(0|yB)<32767,AB=Iba,BB=(0|AB)>-32767,iea=zB&BB,CB=BP,iea?(EB=CB+172|0,FB=0|f[EB>>2],GB=511&FB,HB=GB<<23,IB=3|HB,JB=Iba,KB=JB+32767|0,LB=65535&KB,MB=LB<<7,NB=IB|MB,Tba=NB):(PB=Iba,su(eda,PB),f[n>>2]=0|f[eda>>2],f[n+4>>2]=0|f[eda+4>>2],QB=0|wu(CB,n),Vca=QB,RB=BP,SB=RB+172|0,TB=0|f[SB>>2],UB=511&TB,VB=UB<<23,WB=2|VB,XB=Vca,YB=65535&XB,$B=YB<<7,_B=WB|$B,Tba=_B),aC=BP,bC=Tba,Zt(aC,bC)),cC=BP,$t(cC),void(o=lea)):void(o=lea);case 51:return dC=S3,0!=(0|dC)?(fC=P1,pda=fC,gC=pda,hC=+Fw(gC,0),Ada=hC,jC=BP,kC=BP,lC=0|f[kC>>2],mC=Ada,vu(Wda,lC,mC),f[q>>2]=0|f[Wda>>2],f[q+4>>2]=0|f[Wda+4>>2],nC=0|wu(jC,q),Lda=nC,oC=BP,pC=BP,qC=pC+172|0,rC=0|f[qC>>2],sC=511&rC,uC=sC<<23,vC=2|uC,wC=Lda,xC=65535&wC,yC=xC<<7,zC=vC|yC,Zt(oC,zC),AC=BP,$t(AC),void(o=lea)):void(o=lea);case 52:switch(BC=P1,CC=0|f[BC>>2],DC=CC,V5=DC,FC=P1,GC=FC+4|0,HC=0|f[GC>>2],P1=HC,0|V5){case 51:return JC=P1,D=JC,KC=D,LC=+Fw(KC,0),O=LC,MC=BP,NC=BP,OC=0|f[NC>>2],QC=O,RC=-QC,vu(ja,OC,RC),f[r>>2]=0|f[ja>>2],f[r+4>>2]=0|f[ja+4>>2],SC=0|wu(MC,r),Z=SC,TC=BP,UC=BP,VC=UC+172|0,WC=0|f[VC>>2],XC=511&WC,YC=XC<<23,ZC=2|YC,_C=Z,aD=65535&_C,bD=aD<<7,cD=ZC|bD,Zt(TC,cD),dD=BP,$t(dD),void(o=lea);case 50:return eD=P1,fD=0|f[eD>>2],ua=fD,gD=P1,hD=gD+4|0,iD=0|f[hD>>2],lD=0|f[iD>>2],mD=lD,Fa=mD,nD=BP,oD=ua,pD=Fa,qD=0|tu(nD,oD,pD,1,kb),Qa=qD,rD=0|d[kb>>0],sD=rD<<24>>24!=0,sD?(tD=BP,uD=ua,wD=Fa,xD=+uu(tD,uD,wD),vb=xD,yD=BP,zD=BP,AD=0|f[zD>>2],BD=vb,CD=-BD,DD=CD,vu(Sb,AD,DD),f[s>>2]=0|f[Sb>>2],f[s+4>>2]=0|f[Sb+4>>2],ED=0|wu(yD,s),Hb=ED,FD=BP,HD=BP,ID=HD+172|0,JD=0|f[ID>>2],KD=511&JD,LD=KD<<23,MD=2|LD,ND=Hb,OD=65535&ND,PD=OD<<7,QD=MD|PD,Zt(FD,QD)):(SD=Qa,TD=(0|SD)<32767,UD=Qa,VD=(0|UD)>-32767,jea=TD&VD,WD=BP,jea?(XD=WD+172|0,YD=0|f[XD>>2],ZD=511&YD,$D=ZD<<23,_D=3|$D,bE=Qa,cE=bE+32767|0,dE=65535&cE,eE=dE<<7,fE=_D|eE,_a=fE):(gE=Qa,su(mc,gE),f[t>>2]=0|f[mc>>2],f[t+4>>2]=0|f[mc+4>>2],hE=0|wu(WD,t),bc=hE,iE=BP,jE=iE+172|0,kE=0|f[jE>>2],mE=511&kE,nE=mE<<23,oE=2|nE,pE=bc,qE=65535&pE,rE=qE<<7,sE=oE|rE,_a=sE),tE=BP,uE=_a,Zt(tE,uE)),vE=BP,$t(vE),void(o=lea);default:return xE=BP,yE=BP,zE=0|f[yE>>2],AE=0|ji(zE,69660,1),BE=0|bu(xE,AE),xc=BE,CE=BP,DE=BP,EE=DE+172|0,FE=0|f[EE>>2],GE=511&FE,IE=GE<<23,JE=3|IE,Zt(CE,JE),KE=BP,$t(KE),LE=BP,ME=P1,Yt(LE,ME,1),NE=BP,OE=NE+172|0,PE=0|f[OE>>2],QE=PE+-1|0,f[OE>>2]=QE,RE=BP,TE=RE+172|0,UE=0|f[TE>>2],VE=UE+-1|0,f[TE>>2]=VE,WE=BP,XE=BP,YE=XE+172|0,ZE=0|f[YE>>2],$E=511&ZE,_E=$E<<23,aF=46|_E,cF=xc,dF=511&cF,eF=dF<<14,fF=aF|eF,gF=256|fF,Zt(WE,gF),void(o=lea)}break;case 55:return hF=S3,0!=(0|hF)?(jF=P1,kF=0|f[jF>>2],Ic=kF,lF=P1,oF=lF+4|0,pF=0|f[oF>>2],qF=pF,Tc=qF,rF=BP,sF=0|f[rF>>2],tF=0|Wc(sF),ed=tF,uF=BP,vF=BP,wF=0|f[vF>>2],xF=Ic,zF=Tc,mg(Ad,wF,xF,zF),f[u>>2]=0|f[Ad>>2],f[u+4>>2]=0|f[Ad+4>>2],AF=0|wu(uF,u),pd=AF,BF=BP,CF=0|f[BF>>2],DF=ed,Xc(CF,DF),EF=BP,FF=BP,GF=FF+172|0,HF=0|f[GF>>2],IF=511&HF,KF=IF<<23,LF=61|KF,MF=pd,NF=65535&MF,OF=NF<<7,PF=LF|OF,Zt(EF,PF),QF=BP,$t(QF),void(o=lea)):void(o=lea);case 99:RF=P1,SF=RF+16|0,TF=0|f[SF>>2],P1=TF;break;case 56:break;case 101:return _G=BP,aH=P1,bH=S3,xu(_G,aH,0,bH),void(o=lea);case 102:return cH=BP,dH=P1,fH=S3,xu(cH,dH,1,fH),void(o=lea);case 58:for(gH=BP,hH=0|f[gH>>2],iH=0|Wc(hH),se=iH,jH=BP,kH=BP,lH=0|f[kH>>2],mH=0|ji(lH,69662,6),nH=0|lu(jH,mH),De=nH,oH=S3,rH=0==(0|oH),rH&&(sH=BP,$t(sH)),tH=BP,uH=BP,vH=uH+172|0,wH=0|f[vH>>2],xH=511&wH,yH=xH<<23,zH=66|yH,Zt(tH,zH),AH=BP,CH=BP,DH=CH+172|0,EH=0|f[DH>>2],FH=511&EH,GH=FH<<23,HH=19|GH,IH=De,JH=65535&IH,KH=JH<<7,LH=HH|KH,Zt(AH,LH),NH=BP,$t(NH),OH=BP,PH=P1,QH=0|f[PH>>2],Yt(OH,QH,1),RH=P1,SH=RH+4|0,TH=0|f[SH>>2],ge=TH;;){if(UH=ge,!(0!=(0|UH)))break;WH=ge,YH=0|f[WH>>2],ZH=0|f[YH>>2],$H=ZH,_H=57==(0|$H),_H&&(aI=ge,bI=0|f[aI>>2],f[bI>>2]=55),cI=BP,dI=ge,eI=0|f[dI>>2],Yt(cI,eI,1),fI=BP,hI=fI+172|0,iI=0|f[hI>>2],jI=iI+-1|0,f[hI>>2]=jI,kI=BP,lI=kI+172|0,mI=0|f[lI>>2],nI=mI+-1|0,f[lI>>2]=nI,oI=BP,pI=BP,qI=pI+172|0,sI=0|f[qI>>2],tI=511&sI,uI=tI<<23,vI=62|uI,wI=BP,xI=wI+172|0,yI=0|f[xI>>2],zI=yI+1|0,AI=511&zI,BI=AI<<14,DI=vI|BI,gu(oI,DI,1),EI=BP,$t(EI),FI=ge,GI=FI+4|0,HI=0|f[GI>>2],ge=HI}return II=BP,JI=II+172|0,KI=0|f[JI>>2],LI=KI+-1|0,f[JI>>2]=LI,MI=BP,OI=MI+172|0,PI=0|f[OI>>2],QI=PI+-1|0,f[OI>>2]=QI,RI=BP,SI=BP,TI=0|f[SI>>2],UI=0|ji(TI,69669,1),VI=0|lu(RI,UI),De=VI,WI=BP,XI=BP,ZI=XI+172|0,$I=0|f[ZI>>2],_I=511&$I,aJ=_I<<23,bJ=32|aJ,cJ=De,dJ=511&cJ,eJ=dJ<<14,fJ=bJ|eJ,gJ=128|fJ,Zt(WI,gJ),iJ=S3,jJ=0==(0|iJ),kJ=BP,jJ?(lJ=kJ+172|0,mJ=0|f[lJ>>2],nJ=mJ+-1|0,f[lJ>>2]=nJ):$t(kJ),oJ=BP,pJ=0|f[oJ>>2],qJ=se,Xc(pJ,qJ),void(o=lea);case 57:return rJ=P1,uJ=0|f[rJ>>2],Oe=uJ,vJ=P1,wJ=vJ+4|0,xJ=0|f[wJ>>2],yJ=xJ,Ze=yJ,zJ=BP,AJ=0|f[zJ>>2],BJ=0|Wc(AJ),jf=BJ,CJ=BP,DJ=BP,FJ=0|f[DJ>>2],GJ=0|ji(FJ,69662,6),HJ=0|lu(CJ,GJ),uf=HJ,IJ=BP,JJ=BP,KJ=0|f[JJ>>2],LJ=Oe,MJ=Ze,mg(Rf,KJ,LJ,MJ),f[v>>2]=0|f[Rf>>2],f[v+4>>2]=0|f[Rf+4>>2],NJ=0|wu(IJ,v),Ff=NJ,OJ=S3,QJ=0==(0|OJ),QJ&&(RJ=BP,$t(RJ)),SJ=BP,TJ=BP,UJ=TJ+172|0,VJ=0|f[UJ>>2],WJ=511&VJ,XJ=WJ<<23,YJ=66|XJ,Zt(SJ,YJ),ZJ=BP,_J=BP,aK=_J+172|0,bK=0|f[aK>>2],cK=511&bK,dK=cK<<23,eK=19|dK,fK=uf,gK=65535&fK,hK=gK<<7,iK=eK|hK,Zt(ZJ,iK),kK=BP,$t(kK),lK=BP,mK=BP,nK=mK+172|0,oK=0|f[nK>>2],pK=511&oK,qK=pK<<23,rK=61|qK,sK=Ff,tK=65535&sK,vK=tK<<7,wK=rK|vK,Zt(lK,wK),xK=BP,yK=xK+172|0,zK=0|f[yK>>2],AK=zK+-1|0,f[yK>>2]=AK,BK=BP,CK=BP,DK=0|f[CK>>2],EK=0|ji(DK,69669,1),GK=0|lu(BK,EK),uf=GK,HK=BP,IK=BP,JK=IK+172|0,KK=0|f[JK>>2],LK=511&KK,MK=LK<<23,NK=32|MK,OK=uf,PK=511&OK,RK=PK<<14,SK=NK|RK,TK=128|SK,Zt(HK,TK),UK=S3,VK=0==(0|UK),WK=BP,VK?(XK=WK+172|0,YK=0|f[XK>>2],ZK=YK+-1|0,f[XK>>2]=ZK):$t(WK),$K=BP,aL=0|f[$K>>2],bL=jf,Xc(aL,bL),void(o=lea);case 59:return cL=S3,0!=(0|cL)?(eL=P1,fL=0|f[eL>>2],ag=fL,gL=P1,hL=gL+4|0,iL=0|f[hL>>2],jL=0|f[iL>>2],ng=jL,lL=P1,mL=lL+4|0,nL=0|f[mL>>2],oL=nL+4|0,pL=0|f[oL>>2],zg=pL,qL=BP,rL=0|f[qL>>2],sL=0|Wc(rL),Kg=sL,tL=BP,uL=BP,xL=0|f[uL>>2],yL=0|ji(xL,69671,6),zL=0|lu(tL,yL),Vg=zL,AL=BP,BL=BP,CL=0|f[BL>>2],DL=ag,pg(rh,CL,DL),f[w>>2]=0|f[rh>>2],f[w+4>>2]=0|f[rh+4>>2],EL=0|wu(AL,w),gh=EL,Ch=1,FL=BP,GL=BP,IL=GL+172|0,JL=0|f[IL>>2],KL=511&JL,LL=KL<<23,ML=66|LL,Zt(FL,ML),NL=BP,OL=BP,PL=OL+172|0,QL=0|f[PL>>2],RL=511&QL,TL=RL<<23,UL=19|TL,VL=Vg,WL=65535&VL,XL=WL<<7,YL=UL|XL,Zt(NL,YL),ZL=BP,$t(ZL),$L=BP,_L=BP,aM=_L+172|0,cM=0|f[aM>>2],dM=511&cM,eM=dM<<23,fM=61|eM,gM=gh,hM=65535&gM,iM=hM<<7,jM=fM|iM,Zt($L,jM),kM=ng,lM=0!=(0|kM),nM=zg,oM=0!=(0|nM),gea=lM|oM,gea&&(pM=BP,$t(pM),qM=ng,rM=0!=(0|qM),sM=BP,tM=BP,rM?(uM=0|f[tM>>2],vM=ng,pg(Nh,uM,vM),f[x>>2]=0|f[Nh>>2],f[x+4>>2]=0|f[Nh+4>>2],wM=0|wu(sM,x),gh=wM,yM=BP,zM=BP,AM=zM+172|0,BM=0|f[AM>>2],CM=511&BM,DM=CM<<23,EM=61|DM,FM=gh,GM=65535&FM,HM=GM<<7,JM=EM|HM,Zt(yM,JM)):(KM=tM+172|0,LM=0|f[KM>>2],MM=511&LM,NM=MM<<23,OM=5|NM,Zt(sM,OM)),PM=Ch,QM=PM+1|0,Ch=QM,RM=zg,SM=0!=(0|RM),SM&&(UM=BP,$t(UM),VM=BP,WM=BP,XM=0|f[WM>>2],YM=zg,mg(Zh,XM,YM,1),f[y>>2]=0|f[Zh>>2],f[y+4>>2]=0|f[Zh+4>>2],ZM=0|wu(VM,y),gh=ZM,$M=BP,_M=BP,aN=_M+172|0,bN=0|f[aN>>2],dN=511&bN,eN=dN<<23,fN=61|eN,gN=gh,hN=65535&gN,iN=hN<<7,jN=fN|iN,Zt($M,jN),kN=Ch,lN=kN+1|0,Ch=lN,mN=BP,oN=mN+172|0,pN=0|f[oN>>2],qN=pN+-1|0,f[oN>>2]=qN),rN=BP,sN=rN+172|0,tN=0|f[sN>>2],uN=tN+-1|0,f[sN>>2]=uN),vN=BP,wN=vN+172|0,xN=0|f[wN>>2],AN=xN+-1|0,f[wN>>2]=AN,BN=BP,CN=BP,DN=0|f[CN>>2],EN=0|ji(DN,69678,7),FN=0|lu(BN,EN),Vg=FN,GN=BP,HN=BP,IN=HN+172|0,JN=0|f[IN>>2],LN=511&JN,MN=LN<<23,NN=32|MN,ON=Vg,PN=511&ON,QN=PN<<14,RN=NN|QN,SN=Ch,TN=127&SN,UN=TN<<7,WN=RN|UN,Zt(GN,WN),XN=BP,YN=0|f[XN>>2],ZN=Kg,Xc(YN,ZN),$N=BP,$t($N),void(o=lea)):void(o=lea);case 60:if(_N=S3,aO=0!=(0|_N),bO=P1,cO=0|f[bO>>2],!aO){for(dk=cO;;){if(DR=dk,!(0!=(0|DR)))break;HR=dk,IR=0|f[HR>>2],JR=0|f[IR>>2],KR=JR,LR=55!=(0|KR),LR&&(MR=BP,NR=dk,OR=0|f[NR>>2],Yt(MR,OR,0)),PR=dk,QR=PR+4|0,SR=0|f[QR>>2],dk=SR}return void(o=lea)}for(ii=cO,dO=BP,fO=0|f[dO>>2],gO=0|Wc(fO),wi=gO,hO=BP,iO=BP,jO=0|f[iO>>2],kO=0|ji(jO,69671,6),lO=0|lu(hO,kO),Hi=lO,Si=1,mO=BP,nO=BP,oO=nO+172|0,qO=0|f[oO>>2],rO=511&qO,sO=rO<<23,tO=66|sO,Zt(mO,tO),uO=BP,vO=BP,wO=vO+172|0,xO=0|f[wO>>2],yO=511&xO,zO=yO<<23,BO=19|zO,CO=Hi,DO=65535&CO,EO=DO<<7,FO=BO|EO,Zt(uO,FO),GO=BP,$t(GO),HO=BP,IO=ii,JO=0|f[IO>>2],Yt(HO,JO,1),KO=ii,MO=KO+4|0,NO=0|f[MO>>2],ii=NO;;){if(OO=ii,!(0!=(0|OO)))break;QO=BP,RO=ii,SO=0|f[RO>>2],Yt(QO,SO,1),TO=BP,UO=TO+172|0,VO=0|f[UO>>2],XO=VO+-1|0,f[UO>>2]=XO,YO=BP,ZO=YO+172|0,$O=0|f[ZO>>2],_O=$O+-1|0,f[ZO>>2]=_O,aP=BP,bP=BP,cP=bP+172|0,dP=0|f[cP>>2],eP=511&dP,gP=eP<<23,hP=62|gP,iP=BP,jP=iP+172|0,kP=0|f[jP>>2],lP=kP+1|0,mP=511&lP,nP=mP<<14,oP=hP|nP,gu(aP,oP,1),pP=BP,$t(pP),rP=ii,sP=rP+4|0,tP=0|f[sP>>2],ii=tP}return uP=P1,vP=uP+4|0,wP=0|f[vP>>2],xP=wP+4|0,yP=0|f[xP>>2],ii=yP,zP=ii,AP=0|f[zP>>2],EP=0!=(0|AP),EP&&(FP=ii,GP=0|f[FP>>2],mj=GP,HP=BP,IP=BP,JP=0|f[IP>>2],KP=mj,pg(xj,JP,KP),f[z>>2]=0|f[xj>>2],f[z+4>>2]=0|f[xj+4>>2],LP=0|wu(HP,z),bj=LP,MP=BP,NP=P1,PP=0|f[NP>>2],Yt(MP,PP,1),QP=BP,RP=BP,SP=RP+172|0,TP=0|f[SP>>2],UP=511&TP,VP=UP<<23,WP=61|VP,XP=bj,YP=65535&XP,$P=YP<<7,_P=WP|$P,Zt(QP,_P),aQ=BP,bQ=aQ+172|0,cQ=0|f[bQ>>2],dQ=cQ+-1|0,f[bQ>>2]=dQ,eQ=BP,fQ=BP,gQ=fQ+172|0,hQ=0|f[gQ>>2],jQ=511&hQ,kQ=jQ<<23,lQ=62|kQ,mQ=BP,nQ=mQ+172|0,oQ=0|f[nQ>>2],pQ=oQ+1|0,qQ=511&pQ,rQ=qQ<<14,sQ=lQ|rQ,gu(eQ,sQ,1)),uQ=ii,vQ=uQ+4|0,wQ=0|f[vQ>>2],xQ=0!=(0|wQ),xQ&&(yQ=ii,zQ=yQ+4|0,AQ=0|f[zQ>>2],Ij=AQ,BQ=BP,$t(BQ),CQ=BP,DQ=BP,FQ=0|f[DQ>>2],GQ=Ij,pg(Tj,FQ,GQ),f[A>>2]=0|f[Tj>>2],f[A+4>>2]=0|f[Tj+4>>2],HQ=0|wu(CQ,A),bj=HQ,IQ=BP,JQ=BP,KQ=JQ+172|0,LQ=0|f[KQ>>2],MQ=511&LQ,NQ=MQ<<23,OQ=61|NQ,QQ=bj,RQ=65535&QQ,SQ=RQ<<7,TQ=OQ|SQ,Zt(IQ,TQ),UQ=Si,VQ=UQ+1|0,Si=VQ,WQ=BP,XQ=WQ+172|0,YQ=0|f[XQ>>2],ZQ=YQ+-1|0,f[XQ>>2]=ZQ),_Q=BP,aR=_Q+172|0,bR=0|f[aR>>2],cR=bR+-1|0,f[aR>>2]=cR,dR=BP,eR=BP,fR=0|f[eR>>2],gR=0|ji(fR,69678,7),hR=0|lu(dR,gR),Hi=hR,iR=BP,kR=BP,lR=kR+172|0,mR=0|f[lR>>2],nR=511&mR,oR=nR<<23,pR=32|oR,qR=Hi,rR=511&qR,sR=rR<<14,tR=pR|sR,vR=Si,wR=127&vR,xR=wR<<7,yR=tR|xR,Zt(iR,yR),zR=BP,AR=0|f[zR>>2],BR=wi,Xc(AR,BR),CR=BP,$t(CR),void(o=lea);case 54:return TR=S3,0!=(0|TR)?(VR=BP,WR=P1,XR=WR,YR=0|lu(VR,XR),ok=YR,ZR=BP,$R=BP,_R=$R+172|0,bS=0|f[_R>>2],cS=511&bS,dS=cS<<23,eS=4|dS,fS=ok,gS=65535&fS,hS=gS<<7,iS=eS|hS,Zt(ZR,iS),jS=BP,$t(jS),void(o=lea)):void(o=lea);case 97:return kS=BP,mS=P1,nS=S3,Yt(kS,mS,nS),oS=S3,0!=(0|oS)?(qS=BP,yu(qS),void(o=lea)):void(o=lea);case 85:return rS=S3,0!=(0|rS)?(tS=BP,uS=BP,vS=uS+172|0,xS=0|f[vS>>2],yS=511&xS,zS=yS<<23,AS=6|zS,Zt(tS,AS),BS=BP,$t(BS),void(o=lea)):void(o=lea);case 86:return CS=S3,0!=(0|CS)?(ES=BP,FS=BP,GS=FS+172|0,IS=0|f[GS>>2],JS=511&IS,KS=JS<<23,LS=5|KS,Zt(ES,LS),MS=BP,$t(MS),void(o=lea)):void(o=lea);case 87:return NS=S3,0!=(0|NS)?(PS=BP,QS=BP,RS=QS+172|0,TS=0|f[RS>>2],US=511&TS,VS=US<<23,WS=7|VS,Zt(PS,WS),XS=BP,$t(XS),void(o=lea)):void(o=lea);case 88:return YS=S3,0!=(0|YS)?($S=BP,_S=BP,aT=_S+172|0,cT=0|f[aT>>2],dT=511&cT,eT=dT<<23,fT=8|eT,Zt($S,fT),gT=BP,$t(gT),void(o=lea)):void(o=lea);case 72:return hT=BP,iT=P1,jT=0|f[iT>>2],kT=jT,lT=0|bu(hT,kT),zk=lT,nT=BP,oT=P1,pT=oT+4|0,qT=0|f[pT>>2],rT=qT,sT=0|bu(nT,rT),Kk=sT,tT=BP,uT=BP,vT=0|f[uT>>2],wT=0|ji(vT,69686,12),yT=0|bu(tT,wT),Vk=yT,zT=BP,AT=BP,BT=AT+172|0,CT=0|f[BT>>2],DT=511&CT,ET=DT<<23,FT=72|ET,Zt(zT,FT),GT=BP,$t(GT),HT=BP,KT=BP,LT=KT+172|0,MT=0|f[LT>>2],NT=511&MT,OT=NT<<23,PT=4|OT,QT=zk,RT=65535&QT,ST=RT<<7,TT=PT|ST,Zt(HT,TT),VT=BP,$t(VT),WT=BP,XT=BP,YT=XT+172|0,ZT=0|f[YT>>2],$T=511&ZT,_T=$T<<23,aU=4|_T,bU=Kk,cU=65535&bU,eU=cU<<7,fU=aU|eU,Zt(WT,fU),gU=BP,$t(gU),hU=BP,iU=BP,jU=iU+172|0,kU=0|f[jU>>2],lU=511&kU,mU=lU<<23,nU=5|mU,Zt(hU,nU),pU=BP,qU=pU+172|0,rU=0|f[qU>>2],sU=rU-3|0,f[qU>>2]=sU,tU=BP,uU=BP,vU=uU+172|0,wU=0|f[vU>>2],xU=511&wU,yU=xU<<23,AU=32|yU,BU=Vk,CU=511&BU,DU=CU<<14,EU=AU|DU,FU=256|EU,Zt(tU,FU),GU=S3,0!=(0|GU)?(IU=BP,$t(IU),void(o=lea)):void(o=lea);case 73:for(JU=BP,LU=BP,MU=0|f[LU>>2],NU=0|ji(MU,69699,12),OU=0|bu(JU,NU),el=OU,pl=0,PU=P1,Al=PU,QU=BP,RU=BP,SU=RU+172|0,TU=0|f[SU>>2],UU=511&TU,WU=UU<<23,XU=72|WU,Zt(QU,XU),YU=BP,$t(YU);;){if(ZU=Al,!(0!=(0|ZU)))break;_U=BP,aV=Al,bV=0|f[aV>>2],cV=bV,dV=0|bu(_U,cV),Ll=dV,fV=BP,gV=BP,hV=gV+172|0,iV=0|f[hV>>2],jV=511&iV,kV=jV<<23,lV=4|kV,mV=Ll,nV=65535&mV,oV=nV<<7,qV=lV|oV,Zt(fV,qV),rV=BP,$t(rV),sV=Al,tV=sV+4|0,uV=0|f[tV>>2],Al=uV,vV=pl,wV=vV+1|0,pl=wV}return xV=pl,(yV=xV+1|0,zV=BP,BV=zV+172|0,CV=0|f[BV>>2],DV=CV-yV|0,f[BV>>2]=DV,EV=BP,FV=BP,GV=FV+172|0,HV=0|f[GV>>2],IV=511&HV,JV=IV<<23,KV=32|JV,NV=el,OV=511&NV,PV=OV<<14,QV=KV|PV,RV=pl,SV=127&RV,TV=SV<<7,UV=QV|TV,Zt(EV,UV),VV=S3,0!=(0|VV))?(YV=BP,$t(YV),void(o=lea)):void(o=lea);case 74:ZV=P1,$V=0|f[ZV>>2],_V=0|f[$V>>2],aW=0==(0|_V);do{if(!aW){if(kW=P1,lW=0|f[kW>>2],mW=0|f[lW>>2],nW=1==(0|mW),oW=BP,nW){pW=BP,qW=pW+172|0,sW=0|f[qW>>2],tW=511&sW,uW=tW<<23,vW=66|uW,Zt(oW,vW),wW=BP,$t(wW);break}xW=P1,yW=0|f[xW>>2],zW=0|f[yW>>2],Yt(oW,zW,1);break}bW=BP,cW=BP,dW=cW+172|0,eW=0|f[dW>>2],fW=511&eW,hW=fW<<23,iW=5|hW,Zt(bW,iW),jW=BP,$t(jW)}while(0);return AW=P1,(BW=AW+4|0,DW=0|f[BW>>2],EW=0|f[DW>>2],FW=0!=(0|EW),GW=BP,FW?(HW=P1,IW=HW+4|0,JW=0|f[IW>>2],KW=0|f[JW>>2],Yt(GW,KW,1)):(LW=BP,MW=LW+172|0,OW=0|f[MW>>2],PW=511&OW,QW=PW<<23,RW=5|QW,Zt(GW,RW),SW=BP,$t(SW)),TW=BP,UW=TW+172|0,VW=0|f[UW>>2],WW=VW+-1|0,f[UW>>2]=WW,XW=BP,ZW=XW+172|0,$W=0|f[ZW>>2],_W=$W+-1|0,f[ZW>>2]=_W,aX=BP,bX=P1,cX=0|f[bX>>2],dX=cX+4|0,eX=0|f[dX>>2],fX=eX,gX=0|bu(aX,fX),Wl=gX,iX=BP,jX=BP,kX=jX+172|0,lX=0|f[kX>>2],mX=511&lX,nX=mX<<23,oX=67|nX,pX=Wl,qX=511&pX,rX=qX<<14,tX=oX|rX,Zt(iX,tX),uX=BP,vX=P1,wX=vX+4|0,xX=0|f[wX>>2],yX=xX+4|0,zX=0|f[yX>>2],AX=0|f[zX>>2],BX=S3,CX=0|fu(uX,AX,BX),Wl=CX,EX=BP,FX=BP,GX=FX+172|0,HX=0|f[GX>>2],IX=511&HX,JX=IX<<23,KX=69|JX,LX=Wl,MX=65535&LX,NX=MX<<7,QX=KX|NX,Zt(EX,QX),RX=S3,0!=(0|RX))?(TX=BP,$t(TX),void(o=lea)):void(o=lea);case 75:UX=P1,VX=0|f[UX>>2],WX=0|f[VX>>2],XX=0==(0|WX);do{if(!XX){if(fY=P1,gY=0|f[fY>>2],hY=0|f[gY>>2],iY=1==(0|hY),kY=BP,iY){lY=BP,mY=lY+172|0,nY=0|f[mY>>2],oY=511&nY,pY=oY<<23,qY=66|pY,Zt(kY,qY),rY=BP,$t(rY);break}sY=P1,tY=0|f[sY>>2],vY=0|f[tY>>2],Yt(kY,vY,1);break}YX=BP,ZX=BP,_X=ZX+172|0,aY=0|f[_X>>2],bY=511&aY,cY=bY<<23,dY=5|cY,Zt(YX,dY),eY=BP,$t(eY)}while(0);return wY=BP,(xY=wY+172|0,yY=0|f[xY>>2],zY=yY+-1|0,f[xY>>2]=zY,AY=BP,BY=P1,CY=0|f[BY>>2],DY=CY+4|0,EY=0|f[DY>>2],GY=EY,HY=0|bu(AY,GY),gm=HY,IY=BP,JY=BP,KY=JY+172|0,LY=0|f[KY>>2],MY=511&LY,NY=MY<<23,OY=68|NY,PY=gm,RY=511&PY,SY=RY<<14,TY=OY|SY,Zt(IY,TY),UY=BP,VY=P1,WY=VY+4|0,XY=0|f[WY>>2],YY=0|f[XY>>2],ZY=S3,$Y=0|fu(UY,YY,ZY),gm=$Y,aZ=BP,bZ=BP,cZ=bZ+172|0,dZ=0|f[cZ>>2],eZ=511&dZ,fZ=eZ<<23,gZ=69|fZ,hZ=gm,iZ=65535&hZ,jZ=iZ<<7,lZ=gZ|jZ,Zt(aZ,lZ),mZ=S3,0!=(0|mZ))?(oZ=BP,$t(oZ),void(o=lea)):void(o=lea);case 76:return pZ=BP,qZ=P1,rZ=0|f[qZ>>2],Yt(pZ,rZ,1),sZ=BP,tZ=sZ+172|0,uZ=0|f[tZ>>2],wZ=uZ+-1|0,f[tZ>>2]=wZ,xZ=BP,yZ=BP,zZ=yZ+172|0,AZ=0|f[zZ>>2],BZ=511&AZ,CZ=BZ<<23,DZ=71|CZ,EZ=BP,FZ=EZ+172|0,HZ=0|f[FZ>>2],IZ=511&HZ,JZ=IZ<<14,KZ=DZ|JZ,Zt(xZ,KZ),LZ=BP,MZ=P1,NZ=MZ+4|0,OZ=0|f[NZ>>2],PZ=0|f[OZ>>2],QZ=S3,TZ=0|fu(LZ,PZ,QZ),rm=TZ,UZ=BP,VZ=BP,WZ=VZ+172|0,XZ=0|f[WZ>>2],YZ=511&XZ,ZZ=YZ<<23,$Z=69|ZZ,_Z=rm,a$=65535&_Z,c$=a$<<7,d$=$Z|c$,Zt(UZ,d$),e$=S3,0!=(0|e$)?(g$=BP,$t(g$),void(o=lea)):void(o=lea);case 70:return h$=BP,i$=P1,j$=0|f[i$>>2],k$=j$,l$=0|bu(h$,k$),Cm=l$,n$=BP,o$=P1,p$=o$+4|0,q$=0|f[p$>>2],r$=0|hu(n$,q$,0),Nm=r$,s$=BP,t$=BP,u$=t$+172|0,v$=0|f[u$>>2],w$=511&v$,y$=w$<<23,z$=72|y$,Zt(s$,z$),A$=BP,$t(A$),B$=BP,C$=BP,D$=C$+172|0,E$=0|f[D$>>2],F$=511&E$,G$=F$<<23,H$=64|G$,J$=Nm,K$=16383&J$,L$=K$<<9,M$=128|L$,N$=H$|M$,Zt(B$,N$),O$=BP,$t(O$),P$=BP,Q$=P$+172|0,R$=0|f[Q$>>2],S$=R$+-1|0,f[Q$>>2]=S$,U$=BP,V$=U$+172|0,W$=0|f[V$>>2],X$=W$+-1|0,f[V$>>2]=X$,Y$=BP,Z$=BP,$$=Z$+172|0,_$=0|f[$$>>2],a_=511&_$,b_=a_<<23,d_=70|b_,e_=Cm,f_=511&e_,g_=f_<<14,h_=d_|g_,Zt(Y$,h_),i_=S3,0!=(0|i_)?(k_=BP,l_=BP,m_=l_+172|0,o_=0|f[m_>>2],p_=511&o_,q_=p_<<23,r_=4|q_,s_=Cm,t_=65535&s_,u_=t_<<7,v_=r_|u_,Zt(k_,v_),w_=BP,$t(w_),void(o=lea)):void(o=lea);case 71:return x_=P1,z_=0|f[x_>>2],Ym=z_,A_=BP,B_=P1,C_=B_+4|0,D_=0|f[C_>>2],E_=0|f[D_>>2],F_=E_,G_=0|bu(A_,F_),hn=G_,H_=BP,I_=P1,K_=I_+4|0,L_=0|f[K_>>2],M_=L_+4|0,N_=0|f[M_>>2],O_=0|hu(H_,N_,0),tn=O_,P_=BP,Q_=Ym,Yt(P_,Q_,1),R_=BP,S_=R_+172|0,T_=0|f[S_>>2],W_=T_+-1|0,f[S_>>2]=W_,X_=BP,Y_=BP,Z_=Y_+172|0,$_=0|f[Z_>>2],__=511&$_,a0=__<<23,b0=71|a0,c0=BP,d0=c0+172|0,f0=0|f[d0>>2],g0=511&f0,h0=g0<<14,i0=b0|h0,Zt(X_,i0),j0=BP,$t(j0),k0=BP,l0=BP,m0=l0+172|0,n0=0|f[m0>>2],o0=511&n0,q0=o0<<23,r0=64|q0,s0=tn,t0=16383&s0,u0=t0<<9,v0=128|u0,w0=r0|v0,Zt(k0,w0),x0=BP,y0=x0+172|0,z0=0|f[y0>>2],B0=z0+-1|0,f[y0>>2]=B0,C0=BP,D0=BP,E0=D0+172|0,F0=0|f[E0>>2],G0=511&F0,H0=G0<<23,I0=70|H0,J0=hn,K0=511&J0,M0=K0<<14,N0=I0|M0,Zt(C0,N0),O0=S3,0!=(0|O0)?(Q0=BP,R0=BP,S0=R0+172|0,T0=0|f[S0>>2],U0=511&T0,V0=U0<<23,X0=4|V0,Y0=hn,Z0=65535&Y0,$0=Z0<<7,_0=X0|$0,Zt(Q0,_0),a1=BP,$t(a1),void(o=lea)):void(o=lea);default:return void(o=lea)}if(VF=S3,WF=0!=(0|VF),XF=P1,WF){if(Md=XF,YF=Md,!(0!=(0|YF)))return void(o=lea);for($F=BP,_F=Md,aG=0|f[_F>>2],Yt($F,aG,1),bG=Md,cG=bG+4|0,eG=0|f[cG>>2],Md=eG;;){if(fG=Md,!(0!=(0|fG)))break;hG=BP,iG=Md,jG=0|f[iG>>2],Yt(hG,jG,1),kG=BP,lG=kG+172|0,mG=0|f[lG>>2],nG=mG+-1|0,f[lG>>2]=nG,pG=BP,qG=pG+172|0,rG=0|f[qG>>2],sG=rG+-1|0,f[qG>>2]=sG,tG=BP,uG=BP,vG=uG+172|0,wG=0|f[vG>>2],xG=511&wG,yG=xG<<23,AG=62|yG,BG=BP,CG=BG+172|0,DG=0|f[CG>>2],EG=DG+1|0,FG=511&EG,GG=FG<<14,HG=AG|GG,gu(tG,HG,1),IG=BP,$t(IG),JG=Md,LG=JG+4|0,MG=0|f[LG>>2],Md=MG}return void(o=lea)}for(Xd=XF;;){if(NG=Xd,!(0!=(0|NG)))break;PG=Xd,QG=0|f[PG>>2],RG=0|f[QG>>2],SG=RG,TG=55!=(0|SG),TG&&(UG=BP,WG=Xd,XG=0|f[WG>>2],Yt(UG,XG,0)),YG=Xd,ZG=YG+4|0,$G=0|f[ZG>>2],Xd=$G}return void(o=lea)}function Zt(a,b){a|=0,b|=0;var c=0,d=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,Aa=0;return Aa=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),q=a,B=b,M=q,X=M+176|0,ha=0|f[X>>2],sa=q,xa=sa+212|0,ya=0|f[xa>>2],c=(0|ha)==(0|ya),c&&(d=q,g=d+212|0,h=0|f[g>>2],i=h<<1,f[g>>2]=i,j=q,k=q,l=k+204|0,m=0|f[l>>2],n=q,r=n+212|0,s=0|f[r>>2],t=s<<2,u=0|zu(j,m,t),v=q,w=v+204|0,f[w>>2]=u,x=q,y=x+208|0,z=0|f[y>>2],0!=(0|z)&&(C=q,D=q,E=D+208|0,F=0|f[E>>2],G=q,H=G+212|0,I=0|f[H>>2],J=I<<1,K=0|zu(C,F,J),L=q,N=L+208|0,f[N>>2]=K,O=q,P=O+208|0,Q=0|f[P>>2],R=q,S=R+216|0,T=0|f[S>>2],U=T+32|0,f[U>>2]=Q)),V=B,W=q,Y=W+204|0,Z=0|f[Y>>2],$=q,_=$+176|0,aa=0|f[_>>2],ba=Z+(aa<<2)|0,f[ba>>2]=V,da=q,ea=da+208|0,fa=0|f[ea>>2],0!=(0|fa)?(ia=q,ja=ia+200|0,ka=0|e[ja>>1],la=q,ma=la+208|0,na=0|f[ma>>2],oa=q,pa=oa+176|0,qa=0|f[pa>>2],ra=na+(qa<<1)|0,e[ra>>1]=ka,ta=q,ua=ta+176|0,va=0|f[ua>>2],wa=va+1|0,f[ua>>2]=wa,o=Aa,0|va):(ta=q,ua=ta+176|0,va=0|f[ua>>2],wa=va+1|0,f[ua>>2]=wa,o=Aa,0|va)}function $t(a){a|=0;var b=0,c=0,d=0,g=0,h=0,i=0,j=0,k=0,l=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,E=0;if(E=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),b=a,q=b,w=q+172|0,x=0|f[w>>2],y=(0|x)>511,y&&(z=b,Au(z,69816)),A=b,B=A+172|0,C=0|f[B>>2],c=C+1|0,f[B>>2]=c,d=b,g=d+172|0,h=0|f[g>>2],i=b,j=i+234|0,k=0|e[j>>1],l=65535&k,!((0|h)>(0|l)))return void(o=E);n=b,r=n+172|0,s=0|f[r>>2],t=65535&s,u=b,v=u+234|0,e[v>>1]=t,o=E}function _t(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0;return M=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),n=a,A=b,G=n,H=0|Hu(G,28),F=H,I=A,J=F,f[J>>2]=I,K=F,c=K+12|0,f[c>>2]=0,d=F,e=d+8|0,f[e>>2]=0,g=F,h=g+4|0,f[h>>2]=0,i=n,j=i+188|0,k=0|f[j>>2],l=F,m=l+24|0,f[m>>2]=k,q=n,r=q+192|0,s=0|f[r>>2],t=F,u=t+20|0,f[u>>2]=s,v=n,w=v+172|0,x=0|f[w>>2],y=F,z=y+16|0,f[z>>2]=x,B=F,C=n,D=C+188|0,f[D>>2]=B,E=F,o=M,0|E}function au(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0;_=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),Z=_,q=a,B=b,V=q,W=V+176|0,X=0|f[W>>2],d=B,e=X-d|0,M=e,g=q,h=g+204|0,i=0|f[h>>2],j=B,k=i+(j<<2)|0,l=0|f[k>>2],T=l,m=T,n=127&m,U=n,r=q,s=r+176|0,t=0|f[s>>2],u=q,v=u+180|0,f[v>>2]=t,w=U,c=w+-23|0,Y=c>>>0<4,Y||(x=0|f[637],yw(x,69938,Z),y=q,Iu(y)),z=U,A=127&z,C=T,D=C>>>23,E=511&D,F=511&E,G=F<<23,H=A|G,I=M,J=I+32767|0,K=65535&J,L=K<<7,N=H|L,O=q,P=O+204|0,Q=0|f[P>>2],R=B,S=Q+(R<<2)|0,f[S>>2]=N,o=_}function bu(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0;for(ra=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),B=a,M=b,na=B,oa=na+216|0,pa=0|f[oa>>2],d=pa+48|0,e=0|f[d>>2],ha=e,g=ha,h=g>>>0>256,c=h?256:e,ha=c,X=0;;){if(i=X,j=ha,!(i>>>0<j>>>0))break;if(l=B,m=l+216|0,n=0|f[m>>2],r=n+16|0,s=0|f[r>>2],t=X,u=s+(t<<2)|0,v=0|f[u>>2],w=M,(0|v)==(0|w)){qa=4;break}if(z=B,A=z+216|0,C=0|f[A>>2],D=C+16|0,E=0|f[D>>2],F=X,G=E+(F<<2)|0,H=0|f[G>>2],0==(0|H))break;J=X,K=J+1|0,X=K}return 4==(0|qa)?(y=X,q=y,ma=q,o=ra,0|ma):(L=X,N=256==(0|L),N&&(O=B,Au(O,69911)),P=M,Q=B,R=Q+216|0,S=0|f[R>>2],T=S+16|0,U=0|f[T>>2],V=X,W=U+(V<<2)|0,f[W>>2]=P,Y=X,Z=B,$=Z+216|0,_=0|f[$>>2],aa=_+48|0,ba=0|f[aa>>2],da=(0|Y)==(0|ba),da&&(ea=B,fa=ea+216|0,ga=0|f[fa>>2],ia=ga+48|0,ja=0|f[ia>>2],ka=ja+1|0,f[ia>>2]=ka),la=X,q=la,ma=q,o=ra,0|ma)}function cu(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,B=0;if(B=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),n=a,t=b,w=t,!(0!=(0|w)))return void(o=B);for(;;){if(y=n,z=y+204|0,c=0|f[z>>2],d=t,e=c+(d<<2)|0,g=0|f[e>>2],u=g,h=u,i=h>>>7,j=65535&i,k=j-32767|0,v=k,l=n,m=t,au(l,m),q=v,!(0!=(0|q)))break;s=v,t=s}o=B}function du(a,b,c,d){a|=0,b|=0,c|=0,d|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,$a=0,_a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Cb=0,Db=0,Eb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Wb=0,Xb=0,Yb=0,Zb=0,$b=0,_b=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,yc=0,zc=0,Ac=0,Bc=0,Cc=0,Dc=0,Ec=0,Fc=0,Gc=0,Hc=0,Ic=0,Jc=0,Kc=0,Lc=0,Mc=0,Nc=0,Oc=0,Pc=0,Rc=0;Rc=o,o=o+48|0,(0|o)>=(0|p)&&ca(48),Pc=Rc,Db=a,Ob=b,Zb=c,ic=d,D=Ob,O=0|f[D>>2],Z=O,Ec=Z,ja=Ob,ua=ja+4|0,Fa=0|f[ua>>2],Ob=Fa,Qa=Ec;a:switch(0|Qa){case 41:_a=Db,jb=Ob,kb=jb,lb=0|lu(_a,kb),tc=lb,mb=Db,nb=Zb,ob=511&nb,pb=ob<<23,qb=10|pb,rb=tc,sb=65535&rb,tb=sb<<7,ub=qb|tb,vb=ic,gu(mb,ub,vb);break;case 39:if(wb=Db,xb=Ob,yb=xb,zb=0|ru(wb,yb),tc=zb,Ab=tc,(0|Ab)>0){if(Cb=tc,Eb=Zb,!((0|Cb)!=(0|Eb)))break a;Gb=Db,Hb=tc,Ib=511&Hb,Jb=Ib<<23,Kb=1|Jb,Lb=Zb,Mb=511&Lb,Nb=Mb<<14,Pb=Kb|Nb,Qb=ic,gu(Gb,Pb,Qb);break a}for(e=0,Rb=Db,Sb=Rb+164|0,Tb=0|f[Sb>>2],s=Tb;;){if(Ub=s,!(0!=(0|Ub)))break a;if(Wb=s,Xb=Ob,Yb=Xb,$b=0|ru(Wb,Yb),tc=$b,_b=tc,(0|_b)>0)break;qc=e,rc=qc+1|0,e=rc,sc=s,uc=sc+164|0,vc=0|f[uc>>2],s=vc}bc=Db,cc=Zb,dc=511&cc,ec=dc<<23,fc=22|ec,gc=tc,hc=511&gc,jc=hc<<14,kc=fc|jc,lc=e,mc=127&lc,nc=mc<<7,oc=kc|nc,pc=ic,gu(bc,oc,pc);break;case 42:wc=Db,xc=Ob,yc=xc,zc=0|lu(wc,yc),tc=zc,Ac=Db,Bc=Zb,Cc=511&Bc,Dc=Cc<<23,Fc=14|Dc,Gc=tc,Hc=65535&Gc,Ic=Hc<<7,Jc=Fc|Ic,Kc=ic,gu(Ac,Jc,Kc);break;case 44:Lc=Db,Mc=Ob,Nc=Mc,Oc=0|lu(Lc,Nc),tc=Oc,g=Db,h=Zb,i=511&h,j=i<<23,k=16|j,l=tc,m=65535&l,n=m<<7,q=k|n,r=ic,gu(g,q,r);break;case 43:t=Db,u=Ob,v=u,w=0|lu(t,v),tc=w,x=Db,y=Zb,z=511&y,A=z<<23,B=18|A,C=tc,E=65535&C,F=E<<7,G=B|F,H=ic,gu(x,G,H);break;case 77:I=Db,J=Ob,K=J+4|0,L=0|f[K>>2],M=L,N=0|lu(I,M),tc=N,P=Db,Q=Db,R=Q+172|0,S=0|f[R>>2],T=511&S,U=T<<23,V=1|U,W=Zb,X=511&W,Y=X<<14,$=V|Y,gu(P,$,0),_=Db,$t(_),aa=Db,ba=Ob,da=0|f[ba>>2],Yt(aa,da,1),ea=Db,fa=ea+172|0,ga=0|f[fa>>2],ha=ga-2|0,f[fa>>2]=ha,ia=Db,ka=Db,la=ka+172|0,ma=0|f[la>>2],na=511&ma,oa=na<<23,pa=20|oa,qa=tc,ra=65535&qa,sa=ra<<7,ta=pa|sa,va=ic,gu(ia,ta,va);break;case 29:wa=Db,$t(wa),xa=Db,ya=Ob,za=Db,Aa=Ob,Ba=Aa+4|0,Ca=0|f[Ba>>2],Da=0|f[Ca>>2],Ea=Da,Ga=0|Gu(za,Ea),Ha=Zb,ku(xa,ya,Ga,Ha,0),Ia=Db,Ja=Ia+172|0,Ka=0|f[Ja>>2],La=Ka+-1|0,f[Ja>>2]=La,Ma=ic,Na=0!=(0|Ma),Na&&(Oa=Db,Pa=Db,Ra=Pa+172|0,Sa=0|f[Ra>>2],Ta=511&Sa,Ua=Ta<<23,Va=1|Ua,Wa=Zb,Xa=511&Wa,Ya=Xa<<14,Za=Va|Ya,$a=ic,gu(Oa,Za,$a));break;case 23:ab=Db,bb=Ob,cb=0|f[bb>>2],db=Zb,eb=ic,ou(ab,cb,db,eb);break;case 86:break;default:fb=Ec,f[Pc>>2]=fb,Cw(69872,Pc)}if(gb=ic,!(0!=(0|gb)))return void(o=Rc);ib=Db,$t(ib),o=Rc}function eu(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0;if(H=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),n=a,z=b,A=z,B=0!=(0|A),B&&(C=n,D=n,E=D+172|0,F=0|f[E>>2],c=511&F,d=c<<23,e=5|d,Zt(C,e)),g=n,h=n,i=h+188|0,j=0|f[i>>2],k=j+12|0,l=0|f[k>>2],cu(g,l),m=n,q=m+188|0,r=0|f[q>>2],s=r+24|0,t=0|f[s>>2],u=n,v=u+188|0,f[v>>2]=t,w=z,!(0!=(0|w)))return void(o=H);y=n,$t(y),o=H}function fu(a,b,c){a|=0,b|=0,c|=0;var d=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,ga=0;ga=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),M=a,X=b,aa=c,da=M,ea=0|f[da>>2],d=M,g=X,h=0|f[g>>2],i=0|Xt(ea,d,h),ba=i,j=ba,k=0==(0|j),k&&(l=M,qu(l,69839)),m=ba,n=X,q=n+4|0,r=0|f[q>>2],Yt(m,r,1),s=M,t=s+204|0,u=0|f[t>>2],v=0!=(0|u);do{if(v){if(x=aa,y=0!=(0|x),z=ba,!y){Zt(z,41);break}if(A=z+234|0,C=0|e[A>>1],D=65535&C,E=0==(0|D),F=ba,E){Zt(F,5),G=ba,Zt(G,41);break}H=ba,I=H+172|0,J=0|f[I>>2],K=J-1|0,L=511&K,N=L<<23,O=41|N,gu(F,O,0);break}w=ba,Zt(w,74)}while(0);return P=ba,Cu(P),Q=M,R=Q+216|0,S=0|f[R>>2],T=0!=(0|S),T?(U=M,V=U+216|0,W=0|f[V>>2],Y=W+52|0,Z=0|f[Y>>2],$=Z-1|0,B=$,_=B,o=ga,0|_):(B=0,_=B,o=ga,0|_)}function gu(a,b,c){a|=0,b|=0,c|=0;var d=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,$a=0,_a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,zb=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,$b=0,_b=0,ac=0,bc=0,cc=0,dc=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,nc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,yc=0,zc=0,Ac=0,Bc=0,Cc=0,Dc=0,Ec=0,Fc=0,Gc=0,Hc=0,Ic=0,Jc=0,Kc=0,Lc=0,Mc=0,Nc=0,Oc=0,Pc=0,Qc=0,Rc=0,Tc=0,Uc=0,Vc=0,Wc=0,Xc=0,Yc=0,Zc=0,$c=0,ad=0,bd=0,cd=0,dd=0,ed=0,fd=0,gd=0,hd=0,id=0,jd=0,kd=0,ld=0,md=0,nd=0,od=0,pd=0,qd=0,rd=0,sd=0,td=0,ud=0,vd=0,wd=0,xd=0,yd=0,zd=0,Ad=0,Bd=0,Cd=0,Dd=0,Fd=0,Gd=0,Hd=0,Id=0,Jd=0,Kd=0,Ld=0,Md=0,Nd=0,Od=0,Pd=0,Qd=0,Rd=0,Sd=0,Td=0,Ud=0,Vd=0,Wd=0,Xd=0,Yd=0,Zd=0,$d=0,_d=0,ae=0,be=0,ce=0,de=0,ee=0,fe=0,ge=0,he=0,ie=0,je=0,ke=0,le=0,ne=0,oe=0,pe=0,qe=0,re=0,se=0,te=0,ue=0,ve=0,we=0,xe=0,ye=0,ze=0,Ae=0,Be=0,Ce=0,De=0,Ee=0,Fe=0,Ge=0,He=0,Ie=0,Je=0,Ke=0,Le=0,Me=0,Ne=0,Oe=0,Pe=0,Qe=0,Re=0,Se=0,Ue=0,Ve=0,We=0,Xe=0,Ye=0,Ze=0,$e=0,_e=0,af=0,bf=0,cf=0,df=0,ef=0,ff=0,gf=0,jf=0,kf=0,lf=0,mf=0,nf=0,pf=0,qf=0,rf=0,sf=0,tf=0,uf=0,vf=0,wf=0,xf=0,yf=0,zf=0,Af=0,Bf=0,Cf=0,Df=0,Ef=0,Ff=0,Gf=0,Hf=0,If=0,Jf=0,Lf=0,Mf=0,Nf=0,Of=0,Pf=0,Qf=0,Rf=0,Sf=0,Uf=0,Vf=0,Wf=0,Xf=0,Yf=0,Zf=0,$f=0,_f=0,ag=0,bg=0,cg=0,dg=0,eg=0,fg=0,gg=0,hg=0,ig=0,jg=0,kg=0,lg=0,mg=0,ng=0,og=0,pg=0,qg=0,rg=0,sg=0,tg=0,ug=0,vg=0,wg=0,xg=0,yg=0,zg=0,Ag=0,Bg=0,Cg=0,Dg=0,Eg=0,Fg=0,Hg=0,Jg=0,Kg=0,Lg=0,Mg=0,Ng=0,Og=0,Pg=0,Qg=0,Rg=0,Sg=0,Tg=0,Ug=0,Vg=0,Wg=0,Xg=0,Yg=0,Zg=0,$g=0,_g=0,bh=0,ch=0,dh=0,eh=0,fh=0,gh=0,hh=0,ih=0,jh=0,kh=0,mh=0,nh=0,oh=0,ph=0,qh=0,rh=0,sh=0,th=0,uh=0,vh=0,wh=0,xh=0,yh=0,zh=0,Ah=0,Bh=0,Ch=0,Dh=0,Eh=0,Fh=0,Gh=0,Hh=0,Ih=0,Jh=0,Kh=0,Lh=0,Mh=0,Nh=0,Oh=0,Ph=0,Rh=0,Sh=0,Th=0,Uh=0,Vh=0,Wh=0,Xh=0,Yh=0,Zh=0,$h=0,_h=0,ai=0,ci=0,di=0,ei=0,fi=0,gi=0,hi=0,ii=0,ji=0,ki=0,li=0,mi=0,ni=0,oi=0,pi=0,ri=0,si=0,ti=0,ui=0,vi=0,wi=0,yi=0,zi=0,Ai=0,Bi=0,Ci=0,Di=0,Ei=0,Gi=0,Hi=0,Ii=0,Ji=0,Ki=0,Li=0,Mi=0,Ni=0,Oi=0,Pi=0,Qi=0,Ri=0,Si=0,Ti=0,Ui=0,Vi=0,Wi=0,Xi=0,Yi=0,Zi=0,$i=0,_i=0,aj=0,bj=0,cj=0,dj=0,ej=0,fj=0,gj=0,hj=0,ij=0,jj=0,kj=0,lj=0,mj=0,nj=0,oj=0,pj=0,qj=0,rj=0,sj=0,tj=0,uj=0,vj=0,wj=0,xj=0,yj=0,zj=0,Aj=0,Bj=0,Cj=0,Dj=0,Ej=0,Gj=0,Hj=0,Ij=0,Jj=0,Kj=0,Lj=0,Mj=0,Oj=0,Pj=0,Qj=0,Rj=0,Sj=0,Tj=0,Vj=0,Wj=0,Xj=0,Yj=0,Zj=0,$j=0,_j=0,ak=0,ck=0,dk=0,ik=0;ik=o,o=o+48|0,(0|o)>=(0|p)&&ca(48),v=ik,tf=a,wh=b,oj=c,G=tf,R=0|Fu(G),aa=R<<24>>24!=0;a:if(!aa&&(ma=tf,xa=ma+180|0,Ia=0|f[xa>>2],Ta=tf,cb=Ta+176|0,nb=0|f[cb>>2],(0|Ia)!=(0|nb)&&(Jb=tf,Ub=Jb+176|0,dc=0|f[Ub>>2],(0|dc)>0))){switch(zc=tf,Kc=zc+204|0,Vc=0|f[Kc>>2],ed=tf,qd=ed+176|0,Bd=0|f[qd>>2],Md=Bd-1|0,Xd=Vc+(Md<<2)|0,ge=0|f[Xd>>2],zj=ge,re=wh,Ce=127&re,Kj=Ce,Ne=zj,Ye=127&Ne,Vj=Ye,0|Kj){case 1:if(uf=wh,Ff=uf>>>23,Qf=511&Ff,_f=wh,kg=_f>>>14,vg=511&kg,(0|Qf)==(0|vg))return pd=0,mj=pd,o=ik,0|mj;if(Rg=oj,0!=(0|Rg))break a;switch(0|Vj){case 1:if(xh=wh,Ih=xh>>>23,Th=511&Ih,ci=zj,ni=ci>>>23,yi=511&ni,Ji=(0|Th)==(0|yi),Ji&&(Ui=tf,dj=Ui+176|0,nj=0|f[dj>>2],pj=nj+-1|0,f[dj>>2]=pj,qj=wh,rj=tf,sj=rj+204|0,tj=0|f[sj>>2],uj=tf,vj=uj+176|0,wj=0|f[vj>>2],xj=tj+(wj<<2)|0,f[xj>>2]=qj),yj=wh,Aj=yj>>>14,Bj=511&Aj,Cj=zj,Dj=Cj>>>23,Ej=511&Dj,(0|Bj)==(0|Ej)&&(Gj=wh,Hj=Gj>>>23,Ij=511&Hj,Jj=zj,Lj=Jj>>>14,Mj=511&Lj,(0|Ij)==(0|Mj)))return pd=0,mj=pd,o=ik,0|mj;if(Oj=wh,Pj=Oj>>>14,Qj=511&Pj,Rj=zj,Sj=Rj>>>23,Tj=511&Sj,!((0|Qj)==(0|Tj)))break a;if(Wj=zj,Xj=Wj>>>23,Yj=511&Xj,Zj=tf,$j=Zj+232|0,_j=0|e[$j>>1],ak=65535&_j,!((0|Yj)>=(0|ak)))break a;return ck=tf,dk=ck+176|0,j=0|f[dk>>2],k=j+-1|0,f[dk>>2]=k,l=tf,m=wh,n=m>>>23,q=511&n,r=511&q,s=r<<23,t=1|s,u=zj,w=u>>>14,x=511&w,y=511&x,z=y<<14,A=t|z,B=oj,C=0|gu(l,A,B),pd=C,mj=pd,o=ik,0|mj;case 3:if(D=wh,E=D>>>14,F=511&E,H=zj,I=H>>>23,J=511&I,!((0|F)==(0|J)))break a;if(L=zj,M=L>>>23,N=511&M,O=tf,P=O+232|0,Q=0|e[P>>1],S=65535&Q,!((0|N)>=(0|S)))break a;return U=wh,V=U>>>23,W=511&V,X=511&W,Y=X<<23,Z=3|Y,$=zj,_=$>>>7,ba=65535&_,da=ba-32767|0,ea=da+32767|0,fa=65535&ea,ga=fa<<7,ha=Z|ga,ia=tf,ja=ia+204|0,ka=0|f[ja>>2],la=tf,na=la+176|0,oa=0|f[na>>2],pa=oa-1|0,qa=ka+(pa<<2)|0,f[qa>>2]=ha,pd=0,mj=pd,o=ik,0|mj;case 21:case 58:case 65:case 63:case 55:if(ra=wh,sa=ra>>>14,ta=511&sa,ua=zj,va=ua>>>23,wa=511&va,!((0|ta)==(0|wa)))break a;if(za=zj,Aa=za>>>23,Ba=511&Aa,Ca=tf,Da=Ca+232|0,Ea=0|e[Da>>1],Fa=65535&Ea,!((0|Ba)>=(0|Fa)))break a;return Ha=Vj,Ja=127&Ha,Ka=wh,La=Ka>>>23,Ma=511&La,Na=511&Ma,Oa=Na<<23,Pa=Ja|Oa,Qa=zj,Ra=Qa>>>14,Sa=511&Ra,Ua=511&Sa,Va=Ua<<14,Wa=Pa|Va,Xa=zj,Ya=Xa>>>7,Za=127&Ya,$a=127&Za,_a=$a<<7,ab=Wa|_a,bb=tf,db=bb+204|0,eb=0|f[db>>2],fb=tf,gb=fb+176|0,hb=0|f[gb>>2],ib=hb-1|0,jb=eb+(ib<<2)|0,f[jb>>2]=ab,pd=0,mj=pd,o=ik,0|mj;case 61:case 2:case 11:case 17:case 15:case 13:case 9:case 4:if(kb=wh,lb=kb>>>14,mb=511&lb,ob=zj,pb=ob>>>23,qb=511&pb,!((0|mb)==(0|qb)))break a;if(sb=zj,tb=sb>>>23,ub=511&tb,vb=tf,wb=vb+232|0,xb=0|e[wb>>1],zb=65535&xb,!((0|ub)>=(0|zb)))break a;return Bb=Vj,Cb=127&Bb,Db=wh,Eb=Db>>>23,Fb=511&Eb,Gb=511&Fb,Hb=Gb<<23,Ib=Cb|Hb,Kb=zj,Lb=Kb>>>7,Mb=65535&Lb,Nb=65535&Mb,Ob=Nb<<7,Pb=Ib|Ob,Qb=tf,Rb=Qb+204|0,Sb=0|f[Rb>>2],Tb=tf,Vb=Tb+176|0,Wb=0|f[Vb>>2],Xb=Wb-1|0,Yb=Sb+(Xb<<2)|0,f[Yb>>2]=Pb,pd=0,mj=pd,o=ik,0|mj;case 71:if(Zb=wh,$b=Zb>>>14,_b=511&$b,ac=zj,bc=ac>>>23,cc=511&bc,!((0|_b)==(0|cc)))break a;if(fc=zj,gc=fc>>>23,hc=511&gc,ic=tf,jc=ic+232|0,kc=0|e[jc>>1],lc=65535&kc,!((0|hc)>=(0|lc)))break a;return nc=Vj,pc=127&nc,qc=wh,rc=qc>>>23,sc=511&rc,tc=511&sc,uc=tc<<23,vc=pc|uc,wc=zj,xc=wc>>>14,yc=511&xc,Ac=511&yc,Bc=Ac<<14,Cc=vc|Bc,Dc=tf,Ec=Dc+204|0,Fc=0|f[Ec>>2],Gc=tf,Hc=Gc+176|0,Ic=0|f[Hc>>2],Jc=Ic-1|0,Lc=Fc+(Jc<<2)|0,f[Lc>>2]=Cc,pd=0,mj=pd,o=ik,0|mj;case 66:case 8:case 7:case 6:case 5:if(Mc=wh,Nc=Mc>>>14,Oc=511&Nc,Pc=zj,Qc=Pc>>>23,Rc=511&Qc,!((0|Oc)==(0|Rc)))break a;if(Tc=zj,Uc=Tc>>>23,Wc=511&Uc,Xc=tf,Yc=Xc+232|0,Zc=0|e[Yc>>1],$c=65535&Zc,!((0|Wc)>=(0|$c)))break a;return ad=Vj,bd=127&ad,cd=wh,dd=cd>>>23,fd=511&dd,gd=511&fd,hd=gd<<23,id=bd|hd,jd=tf,kd=jd+204|0,ld=0|f[kd>>2],md=tf,nd=md+176|0,od=0|f[nd>>2],rd=od-1|0,sd=ld+(rd<<2)|0,f[sd>>2]=id,pd=0,mj=pd,o=ik,0|mj;default:break a}break;case 10:case 20:case 18:case 16:case 14:if(td=oj,ud=0==(0|td),vd=Vj,wd=1==(0|vd),!(ud&wd))break a;if(xd=wh,yd=xd>>>23,zd=511&yd,Ad=zj,Cd=Ad>>>23,Dd=511&Cd,!((0|zd)==(0|Dd)))break a;return Fd=Kj,Gd=127&Fd,Hd=zj,Id=Hd>>>14,Jd=511&Id,Kd=511&Jd,Ld=Kd<<23,Nd=Gd|Ld,Od=wh,Pd=Od>>>7,Qd=65535&Pd,Rd=65535&Qd,Sd=Rd<<7,Td=Nd|Sd,Ud=tf,Vd=Ud+204|0,Wd=0|f[Vd>>2],Yd=tf,Zd=Yd+176|0,$d=0|f[Zd>>2],_d=$d-1|0,ae=Wd+(_d<<2)|0,f[ae>>2]=Td,pd=0,mj=pd,o=ik,0|mj;case 22:if(be=oj,ce=0==(0|be),de=Vj,ee=1==(0|de),!(ce&ee))break a;if(fe=wh,he=fe>>>23,ie=511&he,je=zj,ke=je>>>23,le=511&ke,!((0|ie)==(0|le)))break a;return ne=Kj,oe=127&ne,pe=zj,qe=pe>>>14,se=511&qe,te=511&se,ue=te<<23,ve=oe|ue,we=wh,xe=we>>>14,ye=511&xe,ze=511&ye,Ae=ze<<14,Be=ve|Ae,De=wh,Ee=De>>>7,Fe=127&Ee,Ge=127&Fe,He=Ge<<7,Ie=Be|He,Je=tf,Ke=Je+204|0,Le=0|f[Ke>>2],Me=tf,Oe=Me+176|0,Pe=0|f[Oe>>2],Qe=Pe-1|0,Re=Le+(Qe<<2)|0,f[Re>>2]=Ie,pd=0,mj=pd,o=ik,0|mj;case 31:if(Se=Vj,!(31==(0|Se)))break a;return Ue=zj,Ve=Ue>>>23,We=511&Ve,Xe=wh,Ze=Xe>>>23,$e=511&Ze,_e=We+$e|0,af=511&_e,bf=af<<23,cf=31|bf,df=tf,ef=df+204|0,ff=0|f[ef>>2],gf=tf,jf=gf+176|0,kf=0|f[jf>>2],lf=kf-1|0,mf=ff+(lf<<2)|0,f[mf>>2]=cf,pd=0,mj=pd,o=ik,0|mj;case 28:if(nf=Vj,!(28==(0|nf)))break a;return pf=zj,qf=pf>>>23,rf=511&qf,sf=wh,vf=sf>>>23,wf=511&vf,xf=rf+wf|0,yf=511&xf,zf=yf<<23,Af=28|zf,Bf=tf,Cf=Bf+204|0,Df=0|f[Cf>>2],Ef=tf,Gf=Ef+176|0,Hf=0|f[Gf>>2],If=Hf-1|0,Jf=Df+(If<<2)|0,f[Jf>>2]=Af,pd=0,mj=pd,o=ik,0|mj;case 41:switch(0|Vj){case 41:return pd=0,mj=pd,o=ik,0|mj;case 1:if(Lf=zj,Mf=Lf>>>23,Nf=511&Mf,Of=tf,Pf=Of+232|0,Rf=0|e[Pf>>1],Sf=65535&Rf,!((0|Nf)>=(0|Sf)))break a;return Uf=zj,Vf=Uf>>>14,Wf=511&Vf,Xf=511&Wf,Yf=Xf<<23,Zf=41|Yf,$f=tf,ag=$f+204|0,bg=0|f[ag>>2],cg=tf,dg=cg+176|0,eg=0|f[dg>>2],fg=eg-1|0,gg=bg+(fg<<2)|0,f[gg>>2]=Zf,pd=0,mj=pd,o=ik,0|mj;case 10:case 22:case 20:case 18:case 16:case 14:return hg=tf,ig=hg+176|0,jg=0|f[ig>>2],lg=jg+-1|0,f[ig>>2]=lg,mg=tf,ng=zj,gu(mg,ng,0),og=tf,pg=og+204|0,qg=0|f[pg>>2],rg=tf,sg=rg+176|0,tg=0|f[sg>>2],ug=tg-1|0,wg=qg+(ug<<2)|0,xg=0|f[wg>>2],zj=xg,yg=tf,zg=zj,Ag=zg>>>23,Bg=511&Ag,Cg=511&Bg,Dg=Cg<<23,Eg=41|Dg,Fg=0|Zt(yg,Eg),pd=Fg,mj=pd,o=ik,0|mj;default:break a}break;case 46:case 44:if(Hg=Vj,3==(0|Hg)){if(Jg=zj,Kg=Jg>>>7,Lg=65535&Kg,Mg=Lg-32767|0,i=Mg,Ng=Kj,Og=46==(0|Ng),Og&&(Pg=i,Qg=0-Pg|0,i=Qg),Sg=i,Tg=(0|Sg)>127,Ug=i,Vg=(0|Ug)<-127,Tg|Vg)break a;return Wg=i,Xg=0<=(0|Wg),Yg=wh,Zg=Yg>>>23,$g=511&Zg,_g=511&$g,bh=_g<<23,Xg?(ch=45|bh,dh=wh,eh=dh>>>14,fh=511&eh,gh=511&fh,hh=gh<<14,ih=ch|hh,jh=i,kh=127&jh,mh=kh<<7,nh=ih|mh,oh=tf,ph=oh+204|0,qh=0|f[ph>>2],rh=tf,d=nh,g=qh,h=rh):(sh=47|bh,th=wh,uh=th>>>14,vh=511&uh,yh=511&vh,zh=yh<<14,Ah=sh|zh,Bh=i,Ch=0-Bh|0,Dh=127&Ch,Eh=Dh<<7,Fh=Ah|Eh,Gh=tf,Hh=Gh+204|0,Jh=0|f[Hh>>2],Kh=tf,d=Fh,g=Jh,h=Kh),Lh=h+176|0,Mh=0|f[Lh>>2],Nh=Mh-1|0,Oh=g+(Nh<<2)|0,f[Oh>>2]=d,pd=0,mj=pd,o=ik,0|mj}break;case 62:break;case 25:case 24:if(wi=Vj,!(1==(0|wi)))break a;if(zi=wh,Ai=zi>>>23,Bi=511&Ai,Ci=zj,Di=Ci>>>23,Ei=511&Di,!((0|Bi)==(0|Ei)))break a;return Gi=Kj,Hi=127&Gi,Ii=zj,Ki=Ii>>>14,Li=511&Ki,Mi=511&Li,Ni=Mi<<23,Oi=Hi|Ni,Pi=wh,Qi=Pi>>>7,Ri=65535&Qi,Si=Ri-32767|0,Ti=Si+32767|0,Vi=65535&Ti,Wi=Vi<<7,Xi=Oi|Wi,Yi=tf,Zi=Yi+204|0,$i=0|f[Zi>>2],_i=tf,aj=_i+176|0,bj=0|f[aj>>2],cj=bj-1|0,ej=$i+(cj<<2)|0,f[ej>>2]=Xi,fj=tf,gj=fj+176|0,hj=0|f[gj>>2],ij=hj-1|0,pd=ij,mj=pd,o=ik,0|mj;default:break a}if(Ph=Vj,61==(0|Ph)&&(Rh=tf,Sh=Rh+216|0,Uh=0|f[Sh>>2],Vh=Uh+12|0,Wh=0|f[Vh>>2],Xh=zj,Yh=Xh>>>7,Zh=65535&Yh,$h=Wh+(Zh<<3)|0,f[v>>2]=0|f[$h>>2],f[v+4>>2]=0|f[$h+4>>2],_h=v+4|0,ai=0|f[_h>>2],16==(0|ai)&&(di=0|f[v>>2],ei=0|f[di>>2],fi=ei>>>11,gi=8&fi,hi=0!=(0|gi),ii=0|f[v>>2],hi?(ji=0|f[ii>>2],ki=ji>>>11,li=496&ki,mi=li>>4,ri=mi):(oi=ii+12|0,pi=0|f[oi>>2],ri=pi),0==(0|ri))))return si=tf,ti=si+176|0,ui=0|f[ti>>2],vi=ui+-1|0,f[ti>>2]=vi,pd=0,mj=pd,o=ik,0|mj}return jj=tf,kj=wh,lj=0|Zt(jj,kj),pd=lj,mj=pd,o=ik,0|mj}function hu(a,b,c){a|=0,b|=0,c|=0;var d=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,$a=0,_a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,$b=0,_b=0,ac=0,bc=0,cc=0,ec=0,fc=0,gc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,yc=0,zc=0,Ac=0,Bc=0,Cc=0,Dc=0,Ec=0,Gc=0,Hc=0,Ic=0,Jc=0,Kc=0,Lc=0,Mc=0,Nc=0,Oc=0,Pc=0,Qc=0,Rc=0,Sc=0,Tc=0,Uc=0,Vc=0,Wc=0,Xc=0,Yc=0,Zc=0,$c=0,_c=0,ad=0,bd=0,cd=0,dd=0,ed=0,fd=0,gd=0,hd=0,id=0,jd=0,kd=0,ld=0,md=0,nd=0,od=0,pd=0,qd=0,rd=0,sd=0,td=0,vd=0,wd=0,xd=0,yd=0,zd=0,Ad=0,Bd=0,Cd=0,Dd=0,Fd=0,Gd=0,Hd=0,Id=0,Jd=0,Kd=0,Ld=0,Md=0,Nd=0,Od=0,Pd=0,Qd=0,Rd=0,Sd=0,Td=0,Ud=0,Vd=0,Wd=0,Xd=0,Yd=0,Zd=0,$d=0,_d=0,ae=0,be=0,ce=0,de=0,ee=0,fe=0,ge=0,he=0,ie=0,je=0,ke=0,le=0,ne=0;if(ne=o,o=o+80|0,(0|o)>=(0|p)&&ca(80),Rc=a,ad=b,ld=c,Gb=Rc,Hd=Gb,Rb=Rc,ac=0|f[Rb>>2],lc=Rc,wc=ad,Hc=0|f[wc>>2],Pc=0|Xt(ac,lc,Hc),Rc=Pc,Qc=Rc,Sc=0==(0|Qc),Sc&&(Tc=Hd,qu(Tc,69839)),Uc=ld,Vc=0!=(0|Uc),Wc=1^Vc,Xc=1&Wc,Yc=255&Xc,Zc=Rc,$c=Zc+184|0,_c=255&Yc,bd=0|e[$c>>1],cd=1&_c,dd=cd<<15&65535,ed=32767&bd,fd=ed|dd,e[$c>>1]=fd,gd=ld,hd=0!=(0|gd),hd&&(id=Rc,jd=0|_t(id,1),Sd=jd,kd=Rc,md=0|iu(kd),nd=Sd,od=nd+4|0,f[od>>2]=md),pd=ad,qd=pd+4|0,rd=0|f[qd>>2],ad=rd,sd=ad,td=0|f[sd>>2],0!=(0|td)){for(vd=ad,xd=0|f[vd>>2],yd=0|f[xd>>2],zd=0|Eu(yd),d=zd,Ad=ad,Bd=0|f[Ad>>2],Cd=0|f[Bd>>2],_a=Cd;;){if(Dd=_a,!(0!=(0|Dd)))break;Fd=_a,Gd=Fd+4|0,Id=0|f[Gd>>2],_a=Id}for(Jd=ad,Kd=0|f[Jd>>2],Ld=Kd+4|0,Md=0|f[Ld>>2],Nd=0|f[Md>>2],Od=0|Eu(Nd),s=Od,Pd=ad,Qd=0|f[Pd>>2],Rd=Qd+4|0,Td=0|f[Rd>>2],Ud=Td+4|0,Vd=0|f[Ud>>2],Wd=0|f[Vd>>2],Xd=0!=(0|Wd),Yd=Xd?1:0,D=Yd,Zd=ad,$d=0|f[Zd>>2],_d=$d+4|0,ae=0|f[_d>>2],ce=ae+4|0,de=0|f[ce>>2],ee=de+4|0,fe=0|f[ee>>2],ge=0|f[fe>>2],he=0|Eu(ge),O=he,ja=0,Z=0,ie=ad,je=0|f[ie>>2],ke=je+4|0,le=0|f[ke>>2],g=le+4|0,h=0|f[g>>2],i=h+4|0,j=0|f[i>>2],k=j+4|0,l=0|f[k>>2],m=0!=(0|l),n=m?1:0,ua=n,q=d,r=31&q,t=r<<18,u=s,v=31&u,w=v<<13,x=t|w,y=D,z=1&y,A=z<<12,B=x|A,C=O,E=31&C,F=E<<7,G=B|F,H=Z,I=31&H,J=I<<2,K=G|J,L=ja,M=1&L,N=M<<1,P=K|N,Q=ua,R=1&Q,S=P|R,be=S,T=d,U=s,V=T+U|0,W=63&V,X=W<<6,Y=D,$=1&Y,_=$<<5,aa=X|_,ba=O,da=31&ba,ea=aa|da,fa=Rc,ga=fa+184|0,ha=65535&ea,ia=0|e[ga>>1],ka=32767&ha,la=-32768&ia,ma=la|ka,e[ga>>1]=ma,na=Rc,oa=be,pa=33554431&oa,qa=pa<<7,ra=38|qa,Zt(na,ra),sa=Rc,ta=0|iu(sa),Fa=ta,Qa=0;;){if(va=Qa,wa=s,!((0|va)<(0|wa)))break;ya=Rc,iu(ya),za=Rc,Zt(za,4194199),Aa=Qa,Ba=Aa+1|0,Qa=Ba}for(Ca=s,Da=(0|Ca)>0,Da&&(Ea=Rc,Zt(Ea,4194199)),Ga=ad,Ha=0|f[Ga>>2],Ia=Ha+4|0,Ja=0|f[Ia>>2],Ka=0|f[Ja>>2],kb=Ka,Qa=0;;){if(La=kb,!(0!=(0|La)))break;Na=Rc,Oa=Fa,Pa=Qa,Ra=Oa+Pa|0,au(Na,Ra),Sa=Rc,Ta=kb,Ua=0|f[Ta>>2],Va=Ua+4|0,Wa=0|f[Va>>2],Yt(Sa,Wa,1),Xa=Rc,Ya=kb,Za=0|f[Ya>>2],$a=0|f[Za>>2],ab=$a,bb=0|ru(Xa,ab),vb=bb,cb=Rc,db=cb+172|0,eb=0|f[db>>2],fb=eb+-1|0,f[db>>2]=fb,gb=Rc,hb=vb,ib=511&hb,jb=ib<<23,lb=1|jb,mb=Rc,nb=mb+172|0,ob=0|f[nb>>2],pb=511&ob,qb=pb<<14,rb=lb|qb,gu(gb,rb,0),sb=Qa,tb=sb+1|0,Qa=tb,ub=kb,wb=ub+4|0,xb=0|f[wb>>2],kb=xb}yb=s,zb=(0|yb)>0,zb&&(Ab=Rc,Bb=Fa,Cb=Qa,Db=Bb+Cb|0,au(Ab,Db))}Eb=Rc,Fb=ad,Hb=Fb+4|0,Ib=0|f[Hb>>2],Jb=0|f[Ib>>2],Yt(Eb,Jb,1),Kb=Rc,Lb=Kb+172|0,Mb=0|f[Lb>>2],Nb=Mb+-1|0,f[Lb>>2]=Nb,Ob=Rc,Pb=Ob+176|0,Qb=0|f[Pb>>2],Sb=(0|Qb)>0;do{if(Sb){if(Tb=Rc,Ub=Tb+204|0,Vb=0|f[Ub>>2],Wb=Rc,Xb=Wb+176|0,Yb=0|f[Xb>>2],Zb=Yb-1|0,$b=Vb+(Zb<<2)|0,_b=0|f[$b>>2],wd=_b,bc=wd,cc=127&bc,!(41!=(0|cc)||(ec=wd,fc=ec>>>14,gc=511&fc,0!=(0|gc)||(ic=Rc,jc=ic+176|0,kc=0|f[jc>>2],mc=Rc,nc=mc+180|0,oc=0|f[nc>>2],(0|kc)==(0|oc)))))break;if(qc=Rc,rc=qc+234|0,sc=0|e[rc>>1],tc=65535&sc,uc=0==(0|tc),vc=Rc,uc){Zt(vc,5),xc=Rc,Zt(xc,41);break}yc=Rc,zc=yc+172|0,Ac=0|f[zc>>2],Bc=511&Ac,Cc=Bc<<23,Dc=41|Cc,gu(vc,Dc,0);break}}while(0);return Ec=ld,0!=(0|Ec)?(Gc=Rc,eu(Gc,0),Ic=Rc,Cu(Ic),Jc=Hd,Kc=Jc+216|0,Lc=0|f[Kc>>2],Mc=Lc+52|0,Nc=0|f[Mc>>2],Oc=Nc-1|0,o=ne,0|Oc):(Ic=Rc,Cu(Ic),Jc=Hd,Kc=Jc+216|0,Lc=0|f[Kc>>2],Mc=Lc+52|0,Nc=0|f[Mc>>2],Oc=Nc-1|0,o=ne,0|Oc)}function iu(a){a|=0;var b=0,c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,m=0;return m=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),b=a,c=b,d=c+176|0,e=0|f[d>>2],g=b,h=g+180|0,f[h>>2]=e,i=b,j=i+176|0,k=0|f[j>>2],o=m,0|k}function ju(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,$a=0,_a=0,ab=0,bb=0,cb=0,db=0,eb=0,gb=0,hb=0,ib=0,jb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0;Gb=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),Y=a,ia=b,ub=Y,ta=ub,c=Y,q=ia,B=q+4|0,M=0|f[B>>2],S=0|f[M>>2],Yt(c,S,1),T=Y,U=0|f[T>>2],V=Y,W=0|Xt(U,V,0),Y=W,X=Y,Z=0==(0|X),Z&&($=ta,qu($,69839)),_=Y,$t(_),aa=Y,ba=0|_t(aa,2),Pa=ba,da=Y,ea=0|iu(da),fa=Pa,ga=fa+4|0,f[ga>>2]=ea,ha=ia,ja=0|f[ha>>2],$a=ja,ka=Y,Zt(ka,33554470),la=$a,ma=0|f[la>>2],na=0!=(0|ma),na?(oa=$a,pa=0|f[oa>>2],qa=pa+4|0,ra=0|f[qa>>2],sa=0!=(0|ra),sa?Fb=7:(ua=$a,va=ua+4|0,wa=0|f[va>>2],xa=0!=(0|wa),xa?Fb=7:(ya=Y,za=$a,Aa=0|f[za>>2],Ba=0|f[Aa>>2],du(ya,Ba,1,0)))):Fb=7,7==(0|Fb)&&(Ca=Y,Da=$a,ou(Ca,Da,1,1)),Fa=Y,Ga=ia,Ha=Ga+4|0,Ia=0|f[Ha>>2],Ja=Ia+4|0,Ka=0|f[Ja>>2],La=0|f[Ka>>2],Yt(Fa,La,1),Ma=Y,Na=Ma+172|0,Oa=0|f[Na>>2],Qa=Oa+-1|0,f[Na>>2]=Qa,Ra=Y,Sa=Ra+176|0,Ta=0|f[Sa>>2],Ua=(0|Ta)>0;do{if(Ua){if(Va=Y,Wa=Va+204|0,Xa=0|f[Wa>>2],Ya=Y,Za=Ya+176|0,_a=0|f[Za>>2],ab=_a-1|0,bb=Xa+(ab<<2)|0,cb=0|f[bb>>2],jb=cb,db=jb,eb=127&db,!(41!=(0|eb)||(gb=jb,hb=gb>>>14,ib=511&hb,0!=(0|ib)||(lb=Y,mb=lb+176|0,nb=0|f[mb>>2],ob=Y,pb=ob+180|0,qb=0|f[pb>>2],(0|nb)==(0|qb)))))break;sb=Y,tb=Y,vb=tb+172|0,wb=0|f[vb>>2],xb=511&wb,yb=xb<<23,zb=41|yb,gu(sb,zb,0)}}while(0);Ab=Y,eu(Ab,0),Bb=Y,Cu(Bb),Cb=ta,Y=Cb,Db=Y,Eb=Y,d=Eb+172|0,e=0|f[d>>2],g=511&e,h=g<<23,i=64|h,j=Y,k=j+216|0,l=0|f[k>>2],m=l+52|0,n=0|f[m>>2],r=n-1|0,s=16383&r,t=s<<9,u=256|t,v=i|u,Zt(Db,v),w=Y,x=w+172|0,y=0|f[x>>2],z=y+-1|0,f[x>>2]=z,A=Y,C=Y,D=0|f[C>>2],E=0|ji(D,69856,4),F=0|bu(A,E),Ea=F,G=Y,H=Y,I=H+172|0,J=0|f[I>>2],K=511&J,L=K<<23,N=33|L,O=Ea,P=511&O,Q=P<<14,R=N|Q,Zt(G,R),o=Gb}function ku(a,b,c,e,g){a|=0,b|=0,c|=0,e|=0,g|=0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,$a=0,_a=0,ab=0,bb=0,cb=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,$b=0,ac=0,bc=0,cc=0,dc=0,ec=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,yc=0,zc=0,Ac=0,Bc=0,Cc=0,Dc=0,Fc=0,Gc=0,Hc=0,Ic=0,Jc=0,Kc=0,Lc=0,Mc=0,Nc=0,Oc=0,Pc=0,Qc=0,Rc=0,Sc=0,Tc=0,Uc=0,Vc=0,Wc=0,Xc=0,Yc=0,Zc=0,$c=0,_c=0,ad=0,cd=0,dd=0,ed=0,fd=0,gd=0,id=0,jd=0,kd=0,ld=0,md=0,nd=0,od=0,pd=0,qd=0,rd=0,sd=0,td=0,ud=0,vd=0,wd=0,xd=0,yd=0,zd=0,Ad=0,Bd=0,Cd=0,Dd=0,Ed=0,Fd=0,Hd=0,Id=0,Jd=0,Kd=0,Ld=0,Nd=0,Od=0,Pd=0,Qd=0,Rd=0,Sd=0,Td=0,Ud=0,Vd=0,Wd=0,Xd=0,Yd=0,Zd=0,$d=0,_d=0,ae=0,be=0,ce=0,de=0,ee=0,fe=0,ge=0,he=0,ie=0,je=0,ke=0,le=0,me=0,ne=0,oe=0,pe=0,qe=0,re=0,se=0,te=0,ue=0,ve=0,we=0,xe=0,ye=0,ze=0,Ae=0,Be=0,Ce=0,De=0,Ee=0,Fe=0,Ge=0,Ie=0,Je=0,Ke=0,Le=0,Me=0,Ne=0,Oe=0,Pe=0,Qe=0,Re=0,Te=0,Ue=0,Ve=0,We=0,Xe=0,Ye=0,Ze=0,$e=0,_e=0,af=0,bf=0,cf=0,df=0,ef=0,ff=0,gf=0,hf=0,jf=0,kf=0,lf=0,mf=0,nf=0,of=0,pf=0,qf=0,rf=0,sf=0,tf=0,uf=0,vf=0,wf=0,xf=0,yf=0,zf=0,Af=0,Bf=0,Cf=0,Df=0,Ef=0,Ff=0,Gf=0,Hf=0,If=0,Jf=0,Kf=0,Lf=0,Mf=0,Nf=0,Of=0,Pf=0,Qf=0,Rf=0,Sf=0,Tf=0,Uf=0,Vf=0,Wf=0,Xf=0,Yf=0,fg=0,gg=0;gg=o,o=o+64|0,(0|o)>=(0|p)&&ca(64),wa=gg+4|0,We=a,ff=b,rf=c,Cf=e,Nf=g,Sa=rf,bb=0!=(0|Sa),bb?(mb=rf,yc=mb):(xb=ff,Ib=xb+4|0,Tb=0|f[Ib>>2],cc=0|f[Tb>>2],nc=cc,yc=nc),h=yc,F=0,Q=0,_=0,la=0,Jc=We,Uc=ff,dd=0|f[Uc>>2],Yt(Jc,dd,1),od=We,zd=h,Kd=0|bu(od,zd),u=Kd,Vd=ff,ee=Vd+4|0,pe=0|f[ee>>2],Ae=pe+4|0,Je=0|f[Ae>>2],Ke=0|f[Je>>2],ff=Ke,Le=ff,Me=0!=(0|Le),Me&&(Ne=We,Oe=ff,Pe=0|f[Oe>>2],Qe=0|mu(Ne,Pe,1),F=Qe,Re=F,(0|Re)<0&&(_=1,Q=1,F=1,Te=We,$t(Te))),Ue=Cf,Ve=0!=(0|Ue);do{if(Ve){if(Xe=_,Ye=0!=(0|Xe),Ze=We,Ye){$e=Ze+172|0,_e=0|f[$e>>2],af=_e+-1|0,f[$e>>2]=af,bf=We,cf=We,df=cf+172|0,ef=0|f[df>>2],gf=511&ef,hf=gf<<23,jf=57|hf,kf=Cf,lf=511&kf,mf=lf<<14,nf=jf|mf,Zt(bf,nf),of=We,$t(of);break}pf=We,qf=pf+172|0,sf=0|f[qf>>2],tf=511&sf,uf=tf<<23,vf=1|uf,wf=Cf,xf=511&wf,yf=xf<<14,zf=vf|yf,Zt(Ze,zf),Af=We,$t(Af),Bf=F,Df=Bf+1|0,F=Df;break}}while(0);Ef=ff,Ff=0!=(0|Ef),Ff?(Gf=ff,Hf=Gf+4|0,If=0|f[Hf>>2],Jf=0!=(0|If),Jf?(Q=1,Kf=We,Lf=ff,Mf=Lf+4|0,Of=0|f[Mf>>2],Yt(Kf,Of,1),Pf=We,Qf=Pf+172|0,Rf=0|f[Qf>>2],Sf=Rf+-1|0,f[Qf>>2]=Sf):fg=14):fg=14,14==(0|fg)&&(Tf=We,Uf=Tf+172|0,Vf=0|f[Uf>>2],la=Vf),Wf=We,$t(Wf),Xf=We,i=Xf+172|0,j=0|f[i>>2],k=j+-1|0,f[i>>2]=k,l=F,m=l+1|0,n=We,q=n+172|0,r=0|f[q>>2],s=r-m|0,f[q>>2]=s,t=We,v=0|f[t>>2],w=h,x=0|ri(v,w,wa),Ha=x,y=Q,z=0==(0|y),A=0|f[wa>>2],B=1==(0|A),Yf=z&B,Yf?(C=Ha,D=0|d[C>>0],E=D<<24>>24,G=43==(0|E),G?(H=We,I=We,J=I+172|0,K=0|f[J>>2],L=511&K,M=L<<23,N=44|M,O=u,P=511&O,R=P<<14,S=N|R,T=F,U=127&T,V=U<<7,W=S|V,X=Nf,gu(H,W,X)):fg=18):fg=18;do{if(18==(0|fg)){if(Y=Q,Z=0==(0|Y),$=0|f[wa>>2],aa=1==(0|$),Z&aa&&(ba=Ha,da=0|d[ba>>0],ea=da<<24>>24,45==(0|ea))){ga=We,ha=We,ia=ha+172|0,ja=0|f[ia>>2],ka=511&ja,ma=ka<<23,na=46|ma,oa=u,pa=511&oa,qa=pa<<14,ra=na|qa,sa=F,ta=127&sa,ua=ta<<7,va=ra|ua,xa=Nf,gu(ga,va,xa);break}if(ya=Q,za=0==(0|ya),Aa=0|f[wa>>2],Ba=1==(0|Aa),za&Ba&&(Ca=Ha,Da=0|d[Ca>>0],Ea=Da<<24>>24,42==(0|Ea))){Ga=We,Ia=We,Ja=Ia+172|0,Ka=0|f[Ja>>2],La=511&Ka,Ma=La<<23,Na=48|Ma,Oa=u,Pa=511&Oa,Qa=Pa<<14,Ra=Na|Qa,Ta=F,Ua=127&Ta,Va=Ua<<7,Wa=Ra|Va,Zt(Ga,Wa);break}if(Xa=Q,Ya=0==(0|Xa),Za=0|f[wa>>2],$a=1==(0|Za),Ya&$a&&(_a=Ha,ab=0|d[_a>>0],cb=ab<<24>>24,47==(0|cb))){eb=We,fb=We,gb=fb+172|0,hb=0|f[gb>>2],ib=511&hb,jb=ib<<23,kb=49|jb,lb=u,nb=511&lb,ob=nb<<14,pb=kb|ob,qb=F,rb=127&qb,sb=rb<<7,tb=pb|sb,Zt(eb,tb);break}if(ub=Q,vb=0==(0|ub),wb=0|f[wa>>2],yb=1==(0|wb),vb&yb&&(zb=Ha,Ab=0|d[zb>>0],Bb=Ab<<24>>24,60==(0|Bb))){Db=We,Eb=We,Fb=Eb+172|0,Gb=0|f[Fb>>2],Hb=511&Gb,Jb=Hb<<23,Kb=51|Jb,Lb=u,Mb=511&Lb,Nb=Mb<<14,Ob=Kb|Nb,Pb=F,Qb=127&Pb,Rb=Qb<<7,Sb=Ob|Rb,Zt(Db,Sb);break}if(Ub=Q,Vb=0==(0|Ub),Wb=0|f[wa>>2],Xb=2==(0|Wb),Vb&Xb&&(Yb=Ha,Zb=0|d[Yb>>0],$b=Zb<<24>>24,60==(0|$b)&&(ac=Ha,bc=ac+1|0,dc=0|d[bc>>0],ec=dc<<24>>24,61==(0|ec)))){gc=We,hc=We,ic=hc+172|0,jc=0|f[ic>>2],kc=511&jc,lc=kc<<23,mc=52|lc,oc=u,pc=511&oc,qc=pc<<14,rc=mc|qc,sc=F,tc=127&sc,uc=tc<<7,vc=rc|uc,Zt(gc,vc);break}if(wc=Q,xc=0==(0|wc),zc=0|f[wa>>2],Ac=1==(0|zc),xc&Ac&&(Bc=Ha,Cc=0|d[Bc>>0],Dc=Cc<<24>>24,62==(0|Dc))){Fc=We,Gc=We,Hc=Gc+172|0,Ic=0|f[Hc>>2],Kc=511&Ic,Lc=Kc<<23,Mc=53|Lc,Nc=u,Oc=511&Nc,Pc=Oc<<14,Qc=Mc|Pc,Rc=F,Sc=127&Rc,Tc=Sc<<7,Vc=Qc|Tc,Zt(Fc,Vc);break}if(Wc=Q,Xc=0==(0|Wc),Yc=0|f[wa>>2],Zc=2==(0|Yc),Xc&Zc&&($c=Ha,_c=0|d[$c>>0],ad=_c<<24>>24,62==(0|ad)&&(cd=Ha,ed=cd+1|0,fd=0|d[ed>>0],gd=fd<<24>>24,61==(0|gd)))){id=We,jd=We,kd=jd+172|0,ld=0|f[kd>>2],md=511&ld,nd=md<<23,pd=54|nd,qd=u,rd=511&qd,sd=rd<<14,td=pd|sd,ud=F,vd=127&ud,wd=vd<<7,xd=td|wd,Zt(id,xd);break}if(yd=Q,Ad=0==(0|yd),Bd=0|f[wa>>2],Cd=2==(0|Bd),Ad&Cd&&(Dd=Ha,Ed=0|d[Dd>>0],Fd=Ed<<24>>24,61==(0|Fd)&&(Hd=Ha,Id=Hd+1|0,Jd=0|d[Id>>0],Ld=Jd<<24>>24,61==(0|Ld)))){Nd=We,Od=We,Pd=Od+172|0,Qd=0|f[Pd>>2],Rd=511&Qd,Sd=Rd<<23,Td=50|Sd,Ud=u,Wd=511&Ud,Xd=Wd<<14,Yd=Td|Xd,Zd=F,$d=127&Zd,_d=$d<<7,ae=Yd|_d,Zt(Nd,ae);break}if(be=_,ce=0!=(0|be),ce&&(F=127),de=la,fe=(0|de)>0,ge=We,he=We,ie=he+172|0,je=0|f[ie>>2],ke=511&je,le=ke<<23,fe){me=32|le,ne=u,oe=511&ne,qe=oe<<14,re=me|qe,se=F,te=127&se,ue=te<<7,ve=re|ue,Zt(ge,ve);break}we=33|le,xe=u,ye=511&xe,ze=ye<<14,Be=we|ze,Ce=F,De=127&Ce,Ee=De<<7,Fe=Be|Ee,Zt(ge,Fe);break}}while(0);if(Ge=Nf,!(0!=(0|Ge)))return void(o=gg);Ie=We,$t(Ie),o=gg}function lu(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0;for(Na=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),A=a,L=b,W=0;;){if(ga=W,ra=A,Ca=ra+216|0,La=0|f[Ca>>2],c=La+48|0,d=0|f[c>>2],e=ga>>>0<d>>>0,g=A,h=g+216|0,i=0|f[h>>2],!e)break;if(j=i+16|0,k=0|f[j>>2],l=W,m=k+(l<<2)|0,q=0|f[m>>2],r=L,s=(0|q)==(0|r),t=W,s){Ma=4;break}u=t+1|0,W=u}if(4==(0|Ma))return n=t,Ka=n,o=Na,0|Ka;if(v=i+48|0,w=0|f[v>>2],w>>>0>125&&(y=A,z=y+216|0,B=0|f[z>>2],C=B+48|0,D=0|f[C>>2],D>>>0<256)){for(F=A,G=A,H=G+216|0,I=0|f[H>>2],J=I+16|0,K=0|f[J>>2],M=0|zu(F,K,262144),N=A,O=N+216|0,P=0|f[O>>2],Q=P+16|0,f[Q>>2]=M,W=0;;){if(R=W,S=A,T=S+216|0,U=0|f[T>>2],V=U+48|0,X=0|f[V>>2],Y=256-X|0,Z=R>>>0<Y>>>0,$=A,_=$+216|0,aa=0|f[_>>2],!Z)break;ba=aa+16|0,da=0|f[ba>>2],ea=W,fa=A,ha=fa+216|0,ia=0|f[ha>>2],ja=ia+48|0,ka=0|f[ja>>2],la=ea+ka|0,ma=da+(la<<2)|0,f[ma>>2]=0,na=W,oa=na+1|0,W=oa}pa=aa+48|0,f[pa>>2]=256}return qa=L,sa=A,ta=sa+216|0,ua=0|f[ta>>2],va=ua+16|0,wa=0|f[va>>2],xa=A,ya=xa+216|0,za=0|f[ya>>2],Aa=za+48|0,Ba=0|f[Aa>>2],Da=wa+(Ba<<2)|0,f[Da>>2]=qa,Ea=A,Fa=Ea+216|0,Ga=0|f[Fa>>2],Ha=Ga+48|0,Ia=0|f[Ha>>2],Ja=Ia+1|0,f[Ha>>2]=Ja,n=Ia,Ka=n,o=Na,0|Ka}function mu(a,b,c){a|=0,b|=0,c|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,$a=0,_a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,$b=0,_b=0;for(_b=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),Na=a,Ya=b,hb=c,sb=0;;){if(Ob=Ya,!(0!=(0|Ob))){$b=19;break}if(r=Ya,C=0|f[r>>2],N=0|f[C>>2],Y=N,ia=66==(0|Y),oa=1&ia,Db=oa,pa=sb,qa=(0|pa)>=127,ra=Db,sa=0!=(0|ra),qa|sa)break;ba=Na,da=Ya,ea=0|f[da>>2],fa=hb,Yt(ba,ea,fa),ga=sb,ha=ga+1|0,sb=ha,ja=Ya,ka=ja+4|0,la=0|f[ka>>2],Ya=la}if(19==(0|$b))return ma=sb,Ca=ma,na=Ca,o=_b,0|na;ta=hb,ua=0!=(0|ta);a:if(ua)for(va=sb,wa=Na,xa=wa+172|0,ya=0|f[xa>>2],za=ya-va|0,f[xa>>2]=za,Aa=Na,Ba=Na,Da=Ba+172|0,Ea=0|f[Da>>2],Fa=511&Ea,Ga=Fa<<23,Ha=55|Ga,Ia=Na,Ja=Ia+172|0,Ka=0|f[Ja>>2],La=511&Ka,Ma=La<<14,Oa=Ha|Ma,Pa=sb,Qa=127&Pa,Ra=Qa<<7,Sa=Oa|Ra,Zt(Aa,Sa),Ta=Na,$t(Ta),Ua=Na,Va=Ya,Wa=0|f[Va>>2],Yt(Ua,Wa,1),Xa=Na,Za=Xa+172|0,$a=0|f[Za>>2],_a=$a+-1|0,f[Za>>2]=_a,ab=Na,bb=ab+172|0,cb=0|f[bb>>2],db=cb+-1|0,f[bb>>2]=db,eb=Db,fb=0!=(0|eb),gb=Na,ib=Na,jb=ib+172|0,kb=0|f[jb>>2],lb=511&kb,mb=lb<<23,fb?(nb=56|mb,ob=Na,pb=ob+172|0,qb=0|f[pb>>2],rb=qb+1|0,tb=511&rb,ub=tb<<14,vb=nb|ub,Zt(gb,vb)):(wb=57|mb,xb=Na,yb=xb+172|0,zb=0|f[yb>>2],Ab=zb+1|0,Bb=511&Ab,Cb=Bb<<14,Eb=wb|Cb,Zt(gb,Eb)),Fb=Ya,Gb=Fb+4|0,Hb=0|f[Gb>>2],Ya=Hb;;){if(Ib=Ya,!(0!=(0|Ib)))break a;Kb=Na,$t(Kb),Lb=Na,Mb=Ya,Nb=0|f[Mb>>2],Yt(Lb,Nb,1),Pb=Na,Qb=Pb+172|0,Rb=0|f[Qb>>2],Sb=Rb+-1|0,f[Qb>>2]=Sb,Tb=Na,Ub=Tb+172|0,Vb=0|f[Ub>>2],Wb=Vb+-1|0,f[Ub>>2]=Wb,Xb=Ya,Yb=0|f[Xb>>2],e=0|f[Yb>>2],g=e,h=66==(0|g),i=Na,j=Na,k=j+172|0,l=0|f[k>>2],m=511&l,n=m<<23,h?(q=56|n,s=Na,t=s+172|0,u=0|f[t>>2],v=u+1|0,w=511&v,x=w<<14,y=q|x,Zt(i,y)):(z=57|n,A=Na,B=A+172|0,D=0|f[B>>2],E=D+1|0,F=511&E,G=F<<14,H=z|G,Zt(i,H)),I=Ya,J=I+4|0,K=0|f[J>>2],Ya=K}else for(L=Na,M=Ya,O=0|f[M>>2],P=O+4|0,Q=0|f[P>>2],Yt(L,Q,0),R=Ya,S=R+4|0,T=0|f[S>>2],Ya=T;;){if(U=Ya,!(0!=(0|U)))break a;W=Na,X=Ya,Z=0|f[X>>2],Yt(W,Z,0),$=Ya,_=$+4|0,aa=0|f[_>>2],Ya=aa}return Ca=-1,na=Ca,o=_b,0|na}function nu(a){a|=0;var b=0,c=0,d=0,e=0,g=0,h=0,i=0,k=0,l=0,m=0,n=0,r=0,s=0;for(s=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),h=a;;){if(i=h,!(0!=(0|i))){r=6;break}if(k=h,l=0|f[k>>2],m=0|f[l>>2],n=m,66==(0|n)){r=4;break}c=h,d=c+4|0,e=0|f[d>>2],h=e}return 4==(0|r)?(b=0,g=b,o=s,0|g):6==(0|r)?(b=1,g=b,o=s,0|g):0}function ou(a,b,c,d){a|=0,b|=0,c|=0,d|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,F=0,G=0,H=0,I=0,J=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,$a=0,_a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Mb=0;Mb=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),za=a,Ka=b,Va=c,eb=d,pb=0,Ab=0,D=Ka,O=0|f[D>>2],Z=0!=(0|O);a:if(Z)for(_=Ka,aa=0|f[_>>2],e=aa,pb=0;;){if(ba=e,!(0!=(0|ba)))break a;ea=za,fa=za,ga=fa+172|0,ha=0|f[ga>>2],ia=511&ha,ja=ia<<23,ka=58|ja,la=Va,ma=511&la,na=ma<<14,oa=ka|na,pa=pb,qa=127&pa,ra=qa<<7,sa=oa|ra,Zt(ea,sa),ta=za,ua=e,va=0|f[ua>>2],wa=za,xa=wa+172|0,ya=0|f[xa>>2],du(ta,va,ya,0),Aa=pb,Ba=Aa+1|0,pb=Ba,Ca=e,Da=Ca+4|0,Ea=0|f[Da>>2],e=Ea}if(Fa=Ka,Ga=Fa+4|0,Ha=0|f[Ga>>2],e=Ha,Ia=e,!(0!=(0|Ia)))return void(o=Mb);La=e,Ma=La+4|0,Na=0|f[Ma>>2],Oa=0!=(0|Na);a:if(Oa)for(Pa=e,Qa=Pa+4|0,Ra=0|f[Qa>>2],Sa=0|f[Ra>>2],s=Sa;;){if(Ta=s,!(0!=(0|Ta)))break a;Wa=Ab,Xa=Wa+1|0,Ab=Xa,Ya=s,Za=Ya+4|0,$a=0|f[Za>>2],s=$a}_a=eb,ab=0!=(0|_a),bb=za,ab?(cb=za,db=cb+172|0,fb=0|f[db>>2],gb=511&fb,hb=gb<<23,ib=1|hb,jb=Va,kb=511&jb,lb=kb<<14,mb=ib|lb,Zt(bb,mb)):(nb=bb+172|0,ob=0|f[nb>>2],qb=ob+-1|0,f[nb>>2]=qb),rb=za,sb=Ab,Bu(rb,sb),tb=Ab,ub=za,vb=ub+172|0,wb=0|f[vb>>2],xb=wb-tb|0,f[vb>>2]=xb,yb=za,zb=za,Bb=zb+172|0,Cb=0|f[Bb>>2],Db=511&Cb,Eb=Db<<23,Fb=60|Eb,Gb=pb,Hb=511&Gb,Ib=Hb<<14,Jb=Fb|Ib,Kb=Ab,g=127&Kb,h=g<<7,i=Jb|h,Zt(yb,i),pb=1,j=e,k=0|f[j>>2],l=0!=(0|k),l&&(m=za,n=e,q=0|f[n>>2],r=za,t=r+172|0,u=0|f[t>>2],du(m,q,u,0)),v=e,w=v+4|0,x=0|f[w>>2],y=0!=(0|x);a:if(y&&(z=e,A=z+4|0,B=0|f[A>>2],C=0|f[B>>2],0!=(0|C)))for(F=e,G=F+4|0,H=0|f[G>>2],I=0|f[H>>2],e=I;;){if(J=e,!(0!=(0|J)))break a;L=za,M=e,N=0|f[M>>2],P=za,Q=P+172|0,R=0|f[Q>>2],S=pb,T=R+S|0,du(L,N,T,0),U=e,V=U+4|0,W=0|f[V>>2],e=W,X=pb,Y=X+1|0,pb=Y}$=za,$t($),o=Mb}function pu(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,$a=0,ab=0;if(ab=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),s=a,D=b,ja=s,ua=ja+188|0,Fa=0|f[ua>>2],!(0!=(0|Fa)))return c=s,h=D,Yt(c,h,0),i=s,qu(i,69799),void(o=ab);for(j=D,k=0!=(0|j),k&&(l=s,m=D,Yt(l,m,1),n=s,q=n+172|0,r=0|f[q>>2],t=r+-1|0,f[q>>2]=t),u=s,v=u+188|0,w=0|f[v>>2],O=w;;){if(x=O,!(0!=(0|x)))break;if(z=O,A=0|f[z>>2],!(3==(0|A)))break;C=s,gu(C,8388636,0),E=O,F=E+24|0,G=0|f[F>>2],O=G}for(;;){if(H=O,I=0!=(0|H),I?(J=O,K=0|f[J>>2],L=4==(0|K),g=L):g=0,M=O,!g)break;N=M+24|0,P=0|f[N>>2],O=P}if(Q=0!=(0|M),Q||(R=s,Au(R,69799)),S=O,T=0|f[S>>2],U=0==(0|T),V=s,!U)return Wa=s,Xa=Wa+172|0,Ya=0|f[Xa>>2],Za=511&Ya,$a=Za<<23,d=41|$a,e=16384|d,Zt(V,e),void(o=ab);W=V+192|0,X=0|f[W>>2],Y=s,$=Y+188|0,_=0|f[$>>2],aa=_+20|0,ba=0|f[aa>>2],da=(0|X)>(0|ba),da&&(ea=s,fa=s,ga=fa+192|0,ha=0|f[ga>>2],ia=s,ka=ia+188|0,la=0|f[ka>>2],ma=la+20|0,na=0|f[ma>>2],oa=ha-na|0,pa=511&oa,qa=pa<<23,ra=31|qa,gu(ea,ra,0)),sa=D,ta=0!=(0|sa),ta&&(va=s,wa=O,xa=wa+16|0,ya=0|f[xa>>2],za=511&ya,Aa=za<<23,Ba=1|Aa,Ca=s,Da=Ca+172|0,Ea=0|f[Da>>2],Ga=511&Ea,Ha=Ga<<14,Ia=Ba|Ha,gu(va,Ia,0)),Ja=s,Ka=O,La=Ka+12|0,Ma=0|f[La>>2],Na=Ma+32767|0,Oa=65535&Na,Pa=Oa<<7,Ra=23|Pa,Sa=0|Zt(Ja,Ra),Z=Sa,Ta=Z,Ua=O,Va=Ua+12|0,f[Va>>2]=Ta,o=ab}function qu(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,v=0;v=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),c=v+24|0,n=v,k=a,l=b,q=k,r=k,s=0|f[r>>2],t=l,pg(n,s,t),f[c>>2]=0|f[n>>2],f[c+4>>2]=0|f[n+4>>2],d=0|wu(q,c),m=d,e=k,g=m,h=65535&g,i=h<<7,j=8388683|i,Zt(e,j),o=v}function ru(a,b){a|=0,b|=0;var c=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;for(B=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),t=a,u=b,x=t,y=x+168|0,z=0|f[y>>2],v=z,w=1;;){if(c=v,!(0!=(0|c))){A=6;break}if(e=v,g=0|f[e>>2],h=g,i=u,j=(0|h)==(0|i),k=w,j){A=4;break}l=k+1|0,w=l,m=v,q=m+4|0,r=0|f[q>>2],v=r}return 4==(0|A)?(n=k,s=n,o=B,0|s):6==(0|A)?(n=0,s=n,o=B,0|s):0}function su(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,i=0;i=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),d=i,c=b,e=d+4|0,f[e>>2]=3,g=c,f[d>>2]=g,f[a>>2]=0|f[d>>2],f[a+4>>2]=0|f[d+4>>2],o=i}function tu(a,b,c,e,f){a|=0,b|=0,c|=0,e|=0,f|=0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,J=0,K=0,L=0,M=0,N=0,O=0,Q=0,R=0,S=0,T=0,U=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0;for(Ia=o,o=o+48|0,(0|o)>=(0|p)&&ca(48),ha=a,sa=b,Da=c,Ga=e,g=f,l=sa,m=sa,n=0|$v(m),q=l+n|0,h=q,i=0,r=sa,s=0|d[r>>0],t=s<<24>>24,u=43==(0|t),u&&(v=sa,w=v+1|0,sa=w);;){if(x=sa,y=h,!(x>>>0<y>>>0)){Ha=18;break}for(A=sa,B=0|d[A>>0],k=B,C=k,D=255&C,E=0|Xu(D),F=255&E,k=F,j=0;;){if(G=j,H=Da,!((0|G)<(0|H)))break;if(J=j,K=55645+J|0,L=0|d[K>>0],M=L<<24>>24,N=k,O=N<<24>>24,(0|M)==(0|O))break;Q=j,R=Q+1|0,j=R}if(S=j,T=Da,U=(0|S)==(0|T),U&&(W=ha,Au(W,69775)),Y=Ga,Z=Y<<24>>24!=0,$=j,Z){if(_=-2147483648+$|0,aa=Da,ba=(0|_)/(0|aa)&-1,da=i,(0|ba)>(0|da)){Ha=12;break}ga=Da,ia=i,ja=0|V(ia,ga),i=ja,ka=j,la=i,ma=la-ka|0,i=ma}else{if(na=2147483647-$|0,oa=Da,pa=(0|na)/(0|oa)&-1,qa=i,(0|pa)<(0|qa)){Ha=15;break}ua=Da,va=i,wa=0|V(va,ua),i=wa,xa=j,ya=i,za=ya+xa|0,i=za}Aa=sa,Ba=Aa+1|0,sa=Ba}return 12==(0|Ha)?(fa=g,d[fa>>0]=1,X=0,Fa=X,o=Ia,0|Fa):15==(0|Ha)?(ta=g,d[ta>>0]=1,X=0,Fa=X,o=Ia,0|Fa):18==(0|Ha)?(Ca=g,d[Ca>>0]=0,Ea=i,X=Ea,Fa=X,o=Ia,0|Fa):0}function uu(a,b,c){a|=0,b|=0,c|=0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,D=0,E=0,F=0,G=0,H=0,I=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0;for(ha=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),A=a,L=b,W=c,e=L,f=L,g=0|$v(f),h=e+g|0,ba=h,da=0,i=L,j=0|d[i>>0],k=j<<24>>24,l=43==(0|k),l&&(m=L,n=m+1|0,L=n);;){if(q=L,r=ba,!(q>>>0<r>>>0))break;for(t=L,u=0|d[t>>0],fa=u,v=fa,w=255&v,x=0|Xu(w),y=255&x,fa=y,ea=0;;){if(z=ea,B=W,!((0|z)<(0|B)))break;if(D=ea,E=55645+D|0,F=0|d[E>>0],G=F<<24>>24,H=fa,I=H<<24>>24,(0|G)==(0|I)){ga=7;break}T=ea,U=T+1|0,ea=U}7==(0|ga)&&(ga=0,K=W,M=+(0|K),N=da,O=N*M,da=O,P=ea,Q=+(0|P),R=da,S=R+Q,da=S),V=ea,X=W,Y=(0|V)==(0|X),Y&&(Z=A,Au(Z,69775)),$=L,_=$+1|0,L=_}return aa=da,o=ha,+aa}function vu(a,b,c){a|=0,b|=0,c=+c;var e=0,g=0,h=0,i=0,l=0;l=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),g=l,e=c,h=g+4|0,f[h>>2]=6,i=e,j[g>>2]=i,f[a>>2]=0|f[g>>2],f[a+4>>2]=0|f[g+4>>2],o=l}function wu(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,i=0,k=0,l=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,$a=0,_a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,$b=0,_b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,yc=0,zc=0,Ac=0,Bc=0,Cc=0,Dc=0,Ec=0,Fc=0,Hc=0;Hc=o,o=o+48|0,(0|o)>=(0|p)&&ca(48),c=Hc+32|0,_b=Hc,jb=a,kc=b+4|0,vc=0|f[kc>>2];a:switch(0|vc){case 16:for(ub=0;;){if(d=ub,s=jb,D=s+216|0,O=0|f[D>>2],Z=O+44|0,ja=0|f[Z>>2],!(d>>>0<ja>>>0))break a;if(Fa=jb,Qa=Fa+216|0,Za=0|f[Qa>>2],_a=Za+12|0,ab=0|f[_a>>2],bb=ub,cb=ab+(bb<<3)|0,Fb=cb,db=Fb,eb=db+4|0,fb=0|f[eb>>2],!(16!=(0|fb))&&(hb=Fb,ib=0|f[hb>>2],kb=0|f[ib>>2],lb=kb>>>11,mb=8&lb,nb=0!=(0|mb),ob=Fb,pb=0|f[ob>>2],nb?(qb=0|f[pb>>2],rb=qb>>>11,sb=496&rb,tb=sb>>4,xb=tb):(vb=pb+12|0,wb=0|f[vb>>2],xb=wb),Qb=xb,yb=0|f[b>>2],zb=0|f[yb>>2],Ab=zb>>>11,Bb=8&Ab,Cb=0!=(0|Bb),Db=0|f[b>>2],Cb?(Eb=0|f[Db>>2],Gb=Eb>>>11,Hb=496&Gb,Ib=Hb>>4,Mb=Ib):(Jb=Db+12|0,Kb=0|f[Jb>>2],Mb=Kb),!((0|xb)!=(0|Mb))&&(Nb=Fb,Ob=0|f[Nb>>2],Pb=0|f[Ob>>2],Rb=Pb>>>11,Sb=8&Rb,Tb=0!=(0|Sb),Ub=Fb,Vb=0|f[Ub>>2],Wb=Vb+12|0,Tb?ic=Wb:(Xb=Wb+8|0,Yb=0|f[Xb>>2],ic=Yb),Zb=0|f[b>>2],$b=0|f[Zb>>2],ac=$b>>>11,bc=8&ac,cc=0!=(0|bc),dc=0|f[b>>2],ec=dc+12|0,cc?jc=ec:(fc=ec+8|0,gc=0|f[fc>>2],jc=gc),hc=Qb,lc=0|hv(ic,jc,hc),0==(0|lc))))break;oc=ub,pc=oc+1|0,ub=pc}return nc=ub,$a=nc,Ya=$a,o=Hc,0|Ya;case 6:for(ub=0;;){if(qc=ub,rc=jb,sc=rc+216|0,tc=0|f[sc>>2],uc=tc+44|0,wc=0|f[uc>>2],!(qc>>>0<wc>>>0))break a;if(yc=jb,zc=yc+216|0,Ac=0|f[zc>>2],Bc=Ac+12|0,Cc=0|f[Bc>>2],Dc=ub,Ec=Cc+(Dc<<3)|0,Fb=Ec,Fc=Fb,e=Fc+4|0,g=0|f[e>>2],!(6!=(0|g))&&(i=Fb,k=+j[i>>2],l=+j[b>>2],k==l))break;q=ub,r=q+1|0,ub=r}return n=ub,$a=n,Ya=$a,o=Hc,0|Ya;case 3:for(ub=0;;){if(t=ub,u=jb,v=u+216|0,w=0|f[v>>2],x=w+44|0,y=0|f[x>>2],!(t>>>0<y>>>0))break a;if(A=jb,B=A+216|0,C=0|f[B>>2],E=C+12|0,F=0|f[E>>2],G=ub,H=F+(G<<3)|0,Fb=H,I=Fb,J=I+4|0,K=0|f[J>>2],3==(0|K)&&(M=Fb,N=0|f[M>>2],P=0|f[b>>2],(0|N)==(0|P)))break;S=ub,T=S+1|0,ub=T}return R=ub,$a=R,Ya=$a,o=Hc,0|Ya;default:return $a=0,Ya=$a,o=Hc,0|Ya}switch(U=jb,V=U+216|0,W=0|f[V>>2],X=W+44|0,Y=0|f[X>>2],$=jb,_=$+220|0,aa=0|f[_>>2],ba=(0|Y)==(0|aa),ba&&(da=jb,ea=da+220|0,fa=0|f[ea>>2],ga=fa<<1,f[ea>>2]=ga,ha=jb,ia=jb,ka=ia+216|0,la=0|f[ka>>2],ma=la+12|0,na=0|f[ma>>2],oa=jb,pa=oa+220|0,qa=0|f[pa>>2],ra=qa<<3,sa=0|zu(ha,na,ra),ta=jb,va=ta+216|0,wa=0|f[va>>2],xa=wa+12|0,f[xa>>2]=sa),ya=jb,za=ya+216|0,Aa=0|f[za>>2],Ba=Aa+12|0,Ca=0|f[Ba>>2],Da=jb,Ea=Da+216|0,Ga=0|f[Ea>>2],Ha=Ga+44|0,Ia=0|f[Ha>>2],Ja=Ca+(Ia<<3)|0,Fb=Ja,Ka=jb,La=Ka+216|0,Ma=0|f[La>>2],Na=Ma+44|0,Oa=0|f[Na>>2],Pa=Oa+1|0,f[Na>>2]=Pa,ub=Oa,Ra=b+4|0,0|(0|f[Ra>>2])){case 16:Ta=Fb,Ua=jb,Va=0|f[Ua>>2],f[c>>2]=0|f[b>>2],f[c+4>>2]=0|f[b+4>>2],cg(_b,Va,c),f[Ta>>2]=0|f[_b>>2],f[Ta+4>>2]=0|f[_b+4>>2];break;case 3:case 6:Wa=Fb,f[Wa>>2]=0|f[b>>2],f[Wa+4>>2]=0|f[b+4>>2]}return Xa=ub,$a=Xa,Ya=$a,o=Hc,0|Ya}function xu(a,b,c,d){a|=0,b|=0,c|=0,d|=0;var e=0,g=0,i=0,j=0,k=0,m=0,n=0,q=0,r=0,t=0,u=0,v=0,x=0,y=0,z=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,$a=0,_a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0;if(jb=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),X=a,ha=b,sa=c,Da=d,e=Da,!(0!=(0|e))){for(;;){if(g=ha,!(0!=(0|g)))break;switch(i=ha,j=0|f[i>>2],k=0|f[j>>2],0|k){case 4:case 17:m=X,n=ha,q=0|f[n>>2],Yt(m,q,0)}r=ha,t=r+4|0,u=0|f[t>>2],ha=u}return void(o=jb)}for(Oa=0,Za=0;;){if(v=ha,!(0!=(0|v)))break;switch(x=ha,y=0|f[x>>2],z=0|f[y>>2],0|z){case 55:B=ha,C=B+4|0,D=0|f[C>>2],E=0==(0|D),E?(F=ha,G=0|f[F>>2],H=G+4|0,I=0|f[H>>2],J=I+4|0,K=0|f[J>>2],L=K,0==(0|L)||(ib=7)):ib=7;break;case 17:ib=7;break;case 100:S=Za,T=(0|S)>0,T&&(Za=0,U=Oa,V=U+1|0,Oa=V,W=sa,W<<24>>24!=0&&(Z=X,yu(Z)))}7==(0|ib)&&(ib=0,N=X,O=ha,P=0|f[O>>2],Yt(N,P,1),Q=Za,R=Q+1|0,Za=R),$=Za,_=(0|$)>=2,_&&(aa=X,ba=aa+172|0,da=0|f[ba>>2],ea=da+-1|0,f[ba>>2]=ea,fa=X,ga=fa+172|0,ia=0|f[ga>>2],ja=ia+-1|0,f[ga>>2]=ja,ka=X,la=X,ma=la+172|0,na=0|f[ma>>2],oa=511&na,pa=oa<<23,qa=62|pa,ra=X,ta=ra+172|0,ua=0|f[ta>>2],va=ua+1|0,wa=511&va,xa=wa<<14,ya=qa|xa,gu(ka,ya,1),za=X,$t(za),Za=1),Aa=ha,Ba=Aa+4|0,Ca=0|f[Ba>>2],ha=Ca}Ea=Za,Fa=(0|Ea)>0,Fa&&(Ga=Oa,Ha=Ga+1|0,Oa=Ha,Ia=sa,Ia<<24>>24!=0&&(Ka=X,yu(Ka))),La=Oa,Ma=X,Na=Ma+172|0,Pa=0|f[Na>>2],Qa=Pa-La|0,f[Na>>2]=Qa,Ra=X,Sa=X,Ta=Sa+172|0,Ua=0|f[Ta>>2],Va=511&Ua,Wa=Va<<23,Xa=55|Wa,Ya=X,$a=Ya+172|0,_a=0|f[$a>>2],ab=511&_a,bb=ab<<14,cb=Xa|bb,db=Oa,eb=127&db,fb=eb<<7,gb=cb|fb,Zt(Ra,gb),hb=X,$t(hb),o=jb}function yu(a){a|=0;var b=0,c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,A=0;A=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),b=a,n=b,s=n+172|0,t=0|f[s>>2],u=t+-1|0,f[s>>2]=u,v=b,w=b,x=w+172|0,y=0|f[x>>2],c=511&y,d=c<<23,e=32|d,g=b,h=b,i=0|f[h>>2],j=0|ji(i,69712,6),k=0|bu(g,j),l=511&k,m=l<<14,q=e|m,Zt(v,q),r=b,$t(r),o=A}function zu(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,w=0;return w=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),l=a,m=b,n=c,q=l,r=0|f[q>>2],s=m,t=n,d=0|kc(r,s,t),m=d,e=m,g=0==(0|e),h=n,i=h>>>0>0,g&i?(j=l,Au(j,69719),k=m,o=w,0|k):(k=m,o=w,0|k)}function Au(a,b){a|=0,b|=0;var c=0,d=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,W=0;if(W=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),S=W+16|0,R=W,q=a,B=b,M=q,!(0!=(0|M)))return void(o=W);for(;;){if(O=q,P=O+164|0,Q=0|f[P>>2],c=0!=(0|Q),d=q,!c)break;g=d+164|0,h=0|f[g>>2],L=h,i=q,j=i+4|0,k=0|f[j>>2],et(k),l=L,q=l}m=d+196|0,n=0|f[m>>2],r=0!=(0|n),r&&(s=q,t=s+200|0,u=0|e[t>>1],v=65535&u,0!=(0|v)&&(x=0|f[637],y=q,z=y+196|0,A=0|f[z>>2],C=q,D=C+200|0,E=0|e[D>>1],F=65535&E,G=B,f[R>>2]=A,T=R+4|0,f[T>>2]=F,U=R+8|0,f[U>>2]=G,yw(x,69731,R),J=q,K=J+8|0,Aa(0|K,1))),H=0|f[637],I=B,f[S>>2]=I,yw(H,69756,S),J=q,K=J+8|0,Aa(0|K,1)}function Bu(a,b){a|=0,b|=0;var c=0,d=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,J=0;if(J=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),q=a,B=b,C=q,D=C+172|0,E=0|f[D>>2],F=B,G=E+F|0,H=G>>>0>511,H&&(c=q,Au(c,69816)),d=B,g=q,h=g+172|0,i=0|f[h>>2],j=i+d|0,f[h>>2]=j,k=q,l=k+172|0,m=0|f[l>>2],n=q,r=n+234|0,s=0|e[r>>1],t=65535&s,!((0|m)>(0|t)))return void(o=J);v=q,w=v+172|0,x=0|f[w>>2],y=65535&x,z=q,A=z+234|0,e[A>>1]=y,o=J}function Cu(a){a|=0;var b=0,c=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,$a=0,_a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Rb=0;if(Rb=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),g=a,$a=g,jb=0|f[$a>>2],ia=jb,ub=g,Fb=ub+216|0,h=0|f[Fb>>2],ta=h,u=ta,F=u+4|0,d[F>>0]=0,Q=g,_=Q+204|0,da=0|f[_>>2],ea=0!=(0|da),ea&&(fa=g,ga=g,ha=ga+204|0,ja=0|f[ha>>2],ka=g,la=ka+176|0,ma=0|f[la>>2],na=ma<<2,oa=0|zu(fa,ja,na),pa=ta,qa=pa+8|0,f[qa>>2]=oa,ra=g,sa=ra+176|0,ua=0|f[sa>>2],va=ta,wa=va+40|0,f[wa>>2]=ua,xa=g,ya=xa+208|0,za=0|f[ya>>2],Aa=0!=(0|za),Aa?(Ba=g,Ca=g,Da=Ca+208|0,Fa=0|f[Da>>2],Ga=g,Ha=Ga+176|0,Ia=0|f[Ha>>2],Ja=Ia<<1,Ka=0|zu(Ba,Fa,Ja),La=ta,b=Ka,c=La):(Ma=ta,b=0,c=Ma),Na=c+32|0,f[Na>>2]=b),Oa=g,Qa=ta,Ra=Qa+12|0,Sa=0|f[Ra>>2],Ta=ta,Ua=Ta+44|0,Va=0|f[Ua>>2],Wa=Va<<3,Xa=0|zu(Oa,Sa,Wa),Ya=ta,Za=Ya+12|0,f[Za>>2]=Xa,_a=g,ab=ta,bb=ab+16|0,cb=0|f[bb>>2],db=ta,eb=db+48|0,fb=0|f[eb>>2],gb=fb<<2,hb=0|zu(_a,cb,gb),ib=ta,kb=ib+16|0,f[kb>>2]=hb,lb=g,mb=ta,nb=mb+20|0,ob=0|f[nb>>2],pb=ta,qb=pb+52|0,rb=0|f[qb>>2],sb=rb<<2,tb=0|zu(lb,ob,sb),vb=ta,wb=vb+20|0,f[wb>>2]=tb,xb=g,yb=xb+196|0,zb=0|f[yb>>2],!(0!=(0|zb)))return M=g,N=M+232|0,O=0|e[N>>1],P=ta,e[P>>1]=O,R=g,S=R+234|0,T=0|e[S>>1],U=ta,V=U+2|0,e[V>>1]=T,W=ia,X=g,Y=X+236|0,Z=0|f[Y>>2],Xc(W,Z),$=g,aa=$+4|0,ba=0|f[aa>>2],et(ba),void(o=Rb);Bb=g,Cb=Bb+248|0,Db=0|f[Cb>>2],Eb=g,Gb=Eb+244|0,Hb=0|e[Gb>>1],Ib=0|Bn(Db,Hb),Jb=g,Kb=Jb+216|0,Lb=0|f[Kb>>2],Mb=Lb+28|0,f[Mb>>2]=Ib,Nb=ia,Ob=g,Pb=Ob+216|0,i=0|f[Pb>>2],j=g,k=j+240|0,l=0|f[k>>2],m=g,n=m+176|0,q=0|f[n>>2],sr(Nb,i,l,q),r=g,s=r+196|0,t=0|f[s>>2],v=0|$v(t),Ea=v,w=g,x=Ea,y=x+1|0,z=0|Du(w,y),Pa=z,A=Pa,B=g,C=B+196|0,D=0|f[C>>2],E=Ea,$w(0|A,0|D,0|E),G=Pa,H=Ea,I=G+H|0,d[I>>0]=0,J=Pa,K=ta,L=K+28|0,f[L>>2]=J,M=g,N=M+232|0,O=0|e[N>>1],P=ta,e[P>>1]=O,R=g,S=R+234|0,T=0|e[S>>1],U=ta,V=U+2|0,e[V>>1]=T,W=ia,X=g,Y=X+236|0,Z=0|f[Y>>2],Xc(W,Z),$=g,aa=$+4|0,ba=0|f[aa>>2],et(ba),o=Rb}function Du(a,b){a|=0,b|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,r=0;return r=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),g=a,h=b,j=g,k=0|f[j>>2],l=h,m=0|Kc(k,l),i=m,n=i,0!=(0|n)?(e=i,o=r,0|e):(d=g,Au(d,69861),e=i,o=r,0|e)}function Eu(a){a|=0;var b=0,c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,m=0;for(m=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),b=a,c=0;;){if(d=b,e=0!=(0|d),g=c,!e)break;h=g+1|0,c=h,i=b,j=i+4|0,k=0|f[j>>2],b=k}return o=m,0|g}function Fu(a){a|=0;var b=0,c=0,e=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,r=0,s=0,t=0,v=0,x=0;return x=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),m=a,n=m,0!=(0|n)&&(r=m,s=r+248|0,t=0|f[s>>2],0!=(0|t)&&(v=m,c=v+248|0,e=0|f[c>>2],g=e+1148|0,h=0|d[g>>0],i=1&h,j=255&i,0!=(0|j)))?(b=1,l=b,o=x,0|l):(b=0,l=b,o=x,0|l)}function Gu(a,b){a|=0,b|=0;var c=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,L=0;return L=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),F=L+4|0,q=a,B=b,H=q,I=0|f[H>>2],J=B,c=0|ri(I,J,F),E=c,e=q,g=0|f[F>>2],h=g+1|0,i=h+1|0,j=0|Hu(e,i),G=j,k=G,l=E,m=0|f[F>>2],$w(0|k,0|l,0|m),n=G,r=0|f[F>>2],s=n+r|0,d[s>>0]=61,t=G,u=0|f[F>>2],v=u+1|0,w=t+v|0,d[w>>0]=0,x=q,y=0|f[x>>2],z=G,A=0|f[F>>2],C=A+1|0,D=0|gi(y,z,C),o=L,0|D}function Hu(a,b){a|=0,b|=0;var c=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,s=0;return s=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),h=a,i=b,k=h,l=k+4|0,m=0|f[l>>2],n=i,q=0|ft(m,n),j=q,c=j,0!=(0|c)?(g=j,o=s,0|g):(e=h,Au(e,69888),g=j,o=s,0|g)}function Iu(a){a|=0;o=o+16|0,(0|o)>=(0|p)&&ca(16),Oa(1)}function Ju(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,fa=0,ga=0,ia=0;if(ia=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),n=a,A=b,L=n,W=L+216|0,da=0|f[W>>2],0==(0|da))return fa=A,ga=n,c=ga+216|0,f[c>>2]=fa,void(o=ia);d=n,e=d+216|0,g=0|f[e>>2],h=g+52|0,i=0|f[h>>2],j=n,k=j+228|0,l=0|f[k>>2],m=(0|i)==(0|l),m&&(q=n,r=q+228|0,s=0|f[r>>2],t=s<<1,f[r>>2]=t,u=n,v=n,w=v+216|0,x=0|f[w>>2],y=x+20|0,z=0|f[y>>2],B=n,C=B+228|0,D=0|f[C>>2],E=D<<2,F=0|zu(u,z,E),G=n,H=G+216|0,I=0|f[H>>2],J=I+20|0,f[J>>2]=F),K=A,M=n,N=M+216|0,O=0|f[N>>2],P=O+20|0,Q=0|f[P>>2],R=n,S=R+216|0,T=0|f[S>>2],U=T+52|0,V=0|f[U>>2],X=Q+(V<<2)|0,f[X>>2]=K,Y=n,Z=Y+216|0,$=0|f[Z>>2],_=$+52|0,aa=0|f[_>>2],ba=aa+1|0,f[_>>2]=ba,o=ia}function Ku(a){a|=0;var b=0,c=0,e=0;e=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),b=a,c=b,pp(c,69967),o=e}function Lu(a){a|=0;var b=0,c=0,e=0;e=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),b=a,c=b,pp(c,69978),o=e}function Mu(){return o,75192}function Nu(a){a|=0;var b=0,c=0,d=0,e=0,g=0,h=0,j=0;return j=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),h=j,b=a+60|0,c=0|f[b>>2],d=0|Uu(c),f[h>>2]=d,e=0|Fa(6,0|h),g=0|Qu(e),o=j,0|g}function Ou(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0;pa=o,o=o+48|0,(0|o)>=(0|p)&&ca(48),ja=pa+16|0,ia=pa,H=pa+32|0,S=a+28|0,ba=0|f[S>>2],f[H>>2]=ba,ea=H+4|0,fa=a+20|0,ga=0|f[fa>>2],ha=ga-ba|0,f[ea>>2]=ha,l=H+8|0,f[l>>2]=b,m=H+12|0,f[m>>2]=c,n=ha+c|0,q=a+60|0,r=0|f[q>>2],s=H,f[ia>>2]=r,ka=ia+4|0,f[ka>>2]=s,la=ia+8|0,f[la>>2]=2,t=0|Ba(146,0|ia),u=0|Qu(t),v=(0|n)==(0|u);a:if(v)oa=3;else{for(e=2,g=n,h=H,D=u;;){if((0|D)<0)break;if(M=g-D|0,N=h+4|0,O=0|f[N>>2],P=D>>>0>O>>>0,Q=h+8|0,k=P?Q:h,R=P<<31>>31,j=R+e|0,T=P?O:0,d=D-T|0,U=0|f[k>>2],V=U+d|0,f[k>>2]=V,W=k+4|0,X=0|f[W>>2],Y=X-d|0,f[W>>2]=Y,Z=0|f[q>>2],$=k,f[ja>>2]=Z,ma=ja+4|0,f[ma>>2]=$,na=ja+8|0,f[na>>2]=j,_=0|Ba(146,0|ja),aa=0|Qu(_),(0|M)==(0|aa)){oa=3;break a}e=j,g=M,h=k,D=aa}E=a+16|0,f[E>>2]=0,f[S>>2]=0,f[fa>>2]=0,F=0|f[a>>2],G=32|F,f[a>>2]=G,I=2==(0|e),I?i=0:(J=h+4|0,K=0|f[J>>2],L=c-K|0,i=L)}return 3==(0|oa)&&(w=a+44|0,x=0|f[w>>2],y=a+48|0,z=0|f[y>>2],A=x+z|0,B=a+16|0,f[B>>2]=A,f[S>>2]=x,f[fa>>2]=x,i=c),o=pa,0|i}function Pu(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,v=0;return v=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),n=v,g=v+20|0,h=a+60|0,i=0|f[h>>2],j=g,f[n>>2]=i,q=n+4|0,f[q>>2]=0,r=n+8|0,f[r>>2]=b,s=n+12|0,f[s>>2]=j,t=n+16|0,f[t>>2]=c,k=0|Ia(140,0|n),l=0|Qu(k),m=(0|l)<0,m?(f[g>>2]=-1,e=-1):(d=0|f[g>>2],e=d),o=v,0|e}function Qu(a){a|=0;var b=0,c=0,d=0,e=0;return o,c=a>>>0>4294963200,c?(d=0-a|0,e=0|Ru(),f[e>>2]=d,b=-1):b=a,0|b}function Ru(){var a=0;return o,a=0|Su(),0|(a+64|0)}function Su(){return o,0|(0|Tu())}function Tu(){return o,2676}function Uu(a){a|=0;return o,0|a}function Vu(a,b,c){a|=0,b|=0,c|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,U=0;return U=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),Q=U,C=U+16|0,f[C>>2]=b,K=C+4|0,L=a+48|0,M=0|f[L>>2],N=0!=(0|M),O=1&N,P=c-O|0,f[K>>2]=P,g=C+8|0,h=a+44|0,i=0|f[h>>2],f[g>>2]=i,j=C+12|0,f[j>>2]=M,k=a+60|0,l=0|f[k>>2],m=C,f[Q>>2]=l,R=Q+4|0,f[R>>2]=m,S=Q+8|0,f[S>>2]=2,n=0|Ra(145,0|Q),q=0|Qu(n),r=(0|q)<1,r?(s=48&q,t=16^s,u=0|f[a>>2],v=u|t,f[a>>2]=v,e=q):(w=0|f[K>>2],x=q>>>0>w>>>0,x?(y=q-w|0,z=0|f[h>>2],A=a+4|0,f[A>>2]=z,B=z+y|0,D=a+8|0,f[D>>2]=B,E=0|f[L>>2],F=0==(0|E),F?e=c:(G=z+1|0,f[A>>2]=G,H=0|d[z>>0],I=c+-1|0,J=b+I|0,d[J>>0]=H,e=c)):e=q),o=U,0|e}function Wu(a,b,c){a|=0,b|=0,c|=0;var e=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,x=0;return x=o,o=o+32|0,(0|o)>=(0|p)&&ca(32),t=x,k=x+16|0,l=a+36|0,f[l>>2]=2,m=0|f[a>>2],n=64&m,q=0==(0|n),q&&(r=a+60|0,s=0|f[r>>2],e=k,f[t>>2]=s,u=t+4|0,f[u>>2]=21523,v=t+8|0,f[v>>2]=e,g=0|Ma(54,0|t),0==(0|g)||(i=a+75|0,d[i>>0]=-1)),j=0|Ou(a,b,c),o=x,0|j}function Xu(a){a|=0;var c=0,d=0,e=0;return o,c=0|Yu(a),d=0==(0|c),e=32|a,0|(d?a:e)}function Yu(a){a|=0;var b=0,c=0;return o,b=a+-65|0,c=b>>>0<26,0|1&c}function Zu(a,b,c,d,e){a|=0,b|=0,c|=0,d|=0,e|=0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,B=0;return B=o,o=o+128|0,(0|o)>=(0|p)&&ca(128),v=B,f[v>>2]=0,w=v+4|0,f[w>>2]=a,x=v+44|0,f[x>>2]=a,y=(0|a)<0,z=a+2147483647|0,g=y?-1:z,h=v+8|0,f[h>>2]=g,i=v+76|0,f[i>>2]=-1,$u(v,0),j=0|_u(v,c,1,d,e),k=G,l=0==(0|b),l||(m=v+108|0,n=0|f[m>>2],q=0|f[w>>2],r=0|f[h>>2],s=q+n|0,t=s-r|0,u=a+t|0,f[b>>2]=u),G=k,o=B,0|j}function $u(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0;j=a+104|0,f[j>>2]=b,k=a+8|0,l=0|f[k>>2],m=a+4|0,n=0|f[m>>2],p=l,q=n,r=p-q|0,d=a+108|0,f[d>>2]=r,e=0!=(0|b),g=(0|r)>(0|b),s=e&g,h=n+b|0,c=s?h:l,i=a+100|0,f[i>>2]=c}function _u(a,b,c,e,g){a|=0,b|=0,c|=0,e|=0,g|=0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ha=0,ia=0,ja=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,$a=0,_a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Qb=0,Rb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,$b=0,_b=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,mc=0,nc=0,oc=0,pc=0,qc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,yc=0,Ac=0,Bc=0,Cc=0,Dc=0,Fc=0,Gc=0,Hc=0,Ic=0,Jc=0,Kc=0,Lc=0,Mc=0,Nc=0,Oc=0,Pc=0,Rc=0,Sc=0,Tc=0,Uc=0,Vc=0,Wc=0,Xc=0,Yc=0,Zc=0,$c=0,_c=0,ad=0,bd=0,cd=0,dd=0,ed=0,gd=0,hd=0,id=0,jd=0,kd=0,ld=0,md=0,nd=0,od=0,pd=0,qd=0,rd=0,sd=0,td=0,vd=0,wd=0,xd=0,yd=0,zd=0,Ad=0,Bd=0,Cd=0,Dd=0,Ed=0,Fd=0,Gd=0,Hd=0,Id=0,Jd=0,Kd=0,Ld=0,Md=0,Nd=0,Od=0,Pd=0,Qd=0,Rd=0,Sd=0,Td=0,Ud=0,Vd=0,Xd=0,Yd=0,Zd=0,$d=0,_d=0,ae=0,be=0,ce=0,de=0,ee=0,fe=0,he=0,ie=0,je=0,ke=0,me=0,ne=0,oe=0,pe=0,qe=0,re=0,te=0,ue=0,ve=0,we=0,xe=0,ze=0,Ae=0,Ce=0,De=0,Ee=0,Fe=0,Ge=0,He=0,Ie=0,Je=0,Ke=0,Le=0,Me=0,Ne=0,Oe=0,Pe=0,Re=0,Te=0,Ue=0,Ve=0,We=0,Xe=0,Ye=0,Ze=0,$e=0,_e=0,af=0,bf=0,cf=0,df=0,hf=0,kf=0;de=b>>>0>36;a:do{if(de)Ke=0|Ru(),f[Ke>>2]=22,Cd=0,Ed=0;else{for(oe=a+4|0,ze=a+100|0;;)if(Ve=0|f[oe>>2],J=0|f[ze>>2],U=Ve>>>0<J>>>0,U?(ea=Ve+1|0,f[oe>>2]=ea,pa=0|d[Ve>>0],Aa=255&pa,Wa=Aa):(La=0|av(a),Wa=La),fb=0|bv(Wa),0==(0|fb))break;b:switch(0|Wa){case 43:case 45:if(Bb=45==(0|Wa),Mb=Bb<<31>>31,Xb=0|f[oe>>2],gc=0|f[ze>>2],Xb>>>0<gc>>>0){Cc=Xb+1|0,f[oe>>2]=Cc,Nc=0|d[Xb>>0],Yc=255&Nc,i=Mb,k=Yc;break b}hd=0|av(a),i=Mb,k=hd;break b;default:i=0,k=Wa}sd=0==(0|b),Dd=16|b,Ld=16==(0|Dd),Md=48==(0|k),hf=Ld&Md;do{if(hf){if(Nd=0|f[oe>>2],Od=0|f[ze>>2],Pd=Nd>>>0<Od>>>0,Pd?(Qd=Nd+1|0,f[oe>>2]=Qd,Rd=0|d[Nd>>0],Sd=255&Rd,Vd=Sd):(Td=0|av(a),Vd=Td),Ud=32|Vd,!(120==(0|Ud))){if(sd){p=Vd,s=8,kf=46;break}n=Vd,q=b,kf=32;break}if(Xd=0|f[oe>>2],Yd=0|f[ze>>2],Zd=Xd>>>0<Yd>>>0,Zd?($d=Xd+1|0,f[oe>>2]=$d,_d=0|d[Xd>>0],ae=255&_d,ee=ae):(be=0|av(a),ee=be),ce=69990+ee|0,fe=0|d[ce>>0],(255&fe)>15){if(he=0|f[ze>>2],ie=0!=(0|he),ie&&(je=0|f[oe>>2],ke=je+-1|0,f[oe>>2]=ke),0==(0|c)){$u(a,0),Cd=0,Ed=0;break a}if(!ie){Cd=0,Ed=0;break a}me=0|f[oe>>2],ne=me+-1|0,f[oe>>2]=ne,Cd=0,Ed=0;break a}p=ee,s=16,kf=46}else{if(t=sd?10:b,pe=69990+k|0,qe=0|d[pe>>0],re=255&qe,!(re>>>0<t>>>0)){te=0|f[ze>>2],ue=0==(0|te),ue||(ve=0|f[oe>>2],we=ve+-1|0,f[oe>>2]=we),$u(a,0),xe=0|Ru(),f[xe>>2]=22,Cd=0,Ed=0;break a}n=k,q=t,kf=32}}while(0);b:if(32==(0|kf))if(10==(0|q)){if(Ae=n+-48|0,Ae>>>0<10){for(h=0,Ee=Ae;;){if(Ce=10*h|0,De=Ce+Ee|0,Fe=0|f[oe>>2],Ge=0|f[ze>>2],He=Fe>>>0<Ge>>>0,He?(Ie=Fe+1|0,f[oe>>2]=Ie,Je=0|d[Fe>>0],Le=255&Je,v=Le):(Me=0|av(a),v=Me),Ne=v+-48|0,Oe=Ne>>>0<10,Pe=De>>>0<429496729,!(Oe&Pe))break;h=De,Ee=Ne}w=v,Fd=De,Gd=0}else w=n,Fd=0,Gd=0;if(Re=w+-48|0,Re>>>0<10){for(y=w,Te=Fd,Ue=Gd,Ze=Re;;){if(We=0|Yw(0|Te,0|Ue,10,0),Xe=G,Ye=(0|Ze)<0,$e=Ye<<31>>31,_e=-1^Ze,af=-1^$e,bf=Xe>>>0>af>>>0,cf=We>>>0>_e>>>0,df=(0|Xe)==(0|af),K=df&cf,bf|K){r=10,H=y,Hd=Te,Id=Ue,kf=72;break b}if(M=0|Nw(0|We,0|Xe,0|Ze,0|$e),N=G,O=0|f[oe>>2],P=0|f[ze>>2],Q=O>>>0<P>>>0,Q?(R=O+1|0,f[oe>>2]=R,S=0|d[O>>0],T=255&S,x=T):(W=0|av(a),x=W),X=x+-48|0,Y=X>>>0<10,Z=N>>>0<429496729,$=M>>>0<2576980378,_=429496729==(0|N),aa=_&$,ba=Z|aa,!(Y&ba))break;y=x,Te=M,Ue=N,Ze=X}ca=X>>>0>9,ca?(m=i,ad=N,cd=M):(r=10,H=x,Hd=M,Id=N,kf=72)}else m=i,ad=Gd,cd=Fd}else p=n,s=q,kf=46;b:do{if(46==(0|kf)){if(da=s+-1|0,fa=da&s,0==(0|fa)){if(la=23*s|0,ma=la>>>5,na=7&ma,oa=70246+na|0,qa=0|d[oa>>0],ra=qa<<24>>24,sa=69990+p|0,ta=0|d[sa>>0],ua=255&ta,ua>>>0<s>>>0){for(l=0,ya=ua;;){if(wa=l<<ra,xa=ya|wa,za=0|f[oe>>2],Ba=0|f[ze>>2],Ca=za>>>0<Ba>>>0,Ca?(Da=za+1|0,f[oe>>2]=Da,Ea=0|d[za>>0],Fa=255&Ea,z=Fa):(Ga=0|av(a),z=Ga),Ha=69990+z|0,Ia=0|d[Ha>>0],Ja=255&Ia,Ka=Ja>>>0<s>>>0,Ma=xa>>>0<134217728,!(Ma&Ka))break;l=xa,ya=Ja}A=z,Ra=Ia,Ua=0,Xa=xa}else A=p,Ra=ta,Ua=0,Xa=0;if(Oa=0|Pw(-1,-1,0|ra),Pa=G,Qa=255&Ra,Sa=Qa>>>0>=s>>>0,Ta=Ua>>>0>Pa>>>0,Va=Xa>>>0>Oa>>>0,Ya=(0|Ua)==(0|Pa),Za=Ya&Va,$a=Ta|Za,Sa|$a){r=s,H=A,Hd=Xa,Id=Ua,kf=72;break}for(_a=Xa,ab=Ua,eb=Ra;;){if(bb=0|Sw(0|_a,0|ab,0|ra),cb=G,db=255&eb,gb=db|bb,hb=0|f[oe>>2],ib=0|f[ze>>2],jb=hb>>>0<ib>>>0,jb?(kb=hb+1|0,f[oe>>2]=kb,lb=0|d[hb>>0],mb=255&lb,B=mb):(nb=0|av(a),B=nb),ob=69990+B|0,pb=0|d[ob>>0],rb=255&pb,sb=rb>>>0>=s>>>0,tb=cb>>>0>Pa>>>0,ub=gb>>>0>Oa>>>0,vb=(0|cb)==(0|Pa),wb=vb&ub,xb=tb|wb,sb|xb){r=s,H=B,Hd=gb,Id=cb,kf=72;break b}_a=gb,ab=cb,eb=pb}}if(ha=69990+p|0,ia=0|d[ha>>0],ja=255&ia,ja>>>0<s>>>0){for(u=0,Ab=ja;;){if(yb=0|V(u,s),zb=Ab+yb|0,Cb=0|f[oe>>2],Db=0|f[ze>>2],Eb=Cb>>>0<Db>>>0,Eb?(Fb=Cb+1|0,f[oe>>2]=Fb,Gb=0|d[Cb>>0],Hb=255&Gb,C=Hb):(Ib=0|av(a),C=Ib),Jb=69990+C|0,Kb=0|d[Jb>>0],Lb=255&Kb,Nb=Lb>>>0<s>>>0,Ob=zb>>>0<119304647,!(Ob&Nb))break;u=zb,Ab=Lb}D=C,Rb=Kb,Jd=zb,Kd=0}else D=p,Rb=ia,Jd=0,Kd=0;if(Qb=255&Rb,Qb>>>0<s>>>0)for(Tb=0|Ww(-1,-1,0|s,0),Ub=G,F=D,Wb=Kd,Zb=Jd,ec=Rb;;){if(Vb=Wb>>>0>Ub>>>0,Yb=Zb>>>0>Tb>>>0,$b=(0|Wb)==(0|Ub),_b=$b&Yb,Vb|_b){r=s,H=F,Hd=Zb,Id=Wb,kf=72;break b}if(bc=0|Yw(0|Zb,0|Wb,0|s,0),cc=G,dc=255&ec,fc=-1^dc,hc=cc>>>0>4294967295,ic=bc>>>0>fc>>>0,jc=-1==(0|cc),kc=jc&ic,hc|kc){r=s,H=F,Hd=Zb,Id=Wb,kf=72;break b}if(mc=0|Nw(0|dc,0,0|bc,0|cc),nc=G,oc=0|f[oe>>2],pc=0|f[ze>>2],qc=oc>>>0<pc>>>0,qc?(sc=oc+1|0,f[oe>>2]=sc,tc=0|d[oc>>0],uc=255&tc,E=uc):(vc=0|av(a),E=vc),wc=69990+E|0,xc=0|d[wc>>0],yc=255&xc,!(yc>>>0<s>>>0)){r=s,H=E,Hd=mc,Id=nc,kf=72;break}F=E,Wb=nc,Zb=mc,ec=xc}else r=s,H=D,Hd=Jd,Id=Kd,kf=72}}while(0);if(72==(0|kf))if(Ac=69990+H|0,Bc=0|d[Ac>>0],Dc=255&Bc,Dc>>>0<r>>>0){for(;;)if(Fc=0|f[oe>>2],Gc=0|f[ze>>2],Hc=Fc>>>0<Gc>>>0,Hc?(Ic=Fc+1|0,f[oe>>2]=Ic,Jc=0|d[Fc>>0],Kc=255&Jc,I=Kc):(Lc=0|av(a),I=Lc),Mc=69990+I|0,Oc=0|d[Mc>>0],Pc=255&Oc,!(Pc>>>0<r>>>0))break;Rc=0|Ru(),f[Rc>>2]=34,Sc=1&e,Tc=0==(0|Sc),Uc=!0,Vc=Tc&Uc,j=Vc?i:0,m=j,ad=g,cd=e}else m=i,ad=Id,cd=Hd;if(Wc=0|f[ze>>2],Xc=0==(0|Wc),Xc||(Zc=0|f[oe>>2],$c=Zc+-1|0,f[oe>>2]=$c),_c=ad>>>0<g>>>0,bd=cd>>>0<e>>>0,dd=(0|ad)==(0|g),ed=dd&bd,!(_c|ed)){if(gd=1&e,id=0!=(0|gd),jd=!1,kd=id|jd,ld=0!=(0|m),!(kd|ld)){md=0|Ru(),f[md>>2]=34,nd=0|Nw(0|e,0|g,-1,-1),od=G,Cd=od,Ed=nd;break}if(pd=ad>>>0>g>>>0,qd=cd>>>0>e>>>0,rd=(0|ad)==(0|g),td=rd&qd,pd|td){vd=0|Ru(),f[vd>>2]=34,Cd=g,Ed=e;break}}wd=(0|m)<0,xd=wd<<31>>31,yd=cd^m,zd=ad^xd,Ad=0|Mw(0|yd,0|zd,0|m,0|xd),Bd=G,Cd=Bd,Ed=Ad}}while(0);return G=Cd,0|Ed}function av(a){a|=0;var b=0,c=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0;return o,l=a+104|0,x=0|f[l>>2],I=0==(0|x),I?Y=3:(S=a+108|0,T=0|f[S>>2],U=(0|T)<(0|x),Y=U?3:4),3==(0|Y)&&(V=0|cv(a),W=(0|V)<0,W?Y=4:(m=0|f[l>>2],n=0==(0|m),c=a+8|0,n?(g=0|f[c>>2],e=a+4|0,i=0|f[e>>2],j=a+108|0,h=j,k=g,E=g,H=i):(p=0|f[c>>2],q=a+4|0,r=0|f[q>>2],s=r,t=p-s|0,u=a+108|0,v=0|f[u>>2],w=m-v|0,y=(0|t)<(0|w),z=p,y?(h=u,k=z,E=z,H=r):(A=w+-1|0,B=r+A|0,h=u,k=B,E=z,H=r)),C=a+100|0,f[C>>2]=k,D=0==(0|E),D||(F=E,G=H,J=0|f[h>>2],K=F+1|0,L=K-G|0,M=L+J|0,f[h>>2]=M),N=H+-1|0,O=0|d[N>>0],P=255&O,Q=(0|P)==(0|V),Q?b=V:(R=255&V,d[N>>0]=R,b=V))),4==(0|Y)&&(X=a+100|0,f[X>>2]=0,b=-1),0|b}function bv(a){a|=0;var b=0,c=0,d=0,e=0;return o,b=32==(0|a),c=a+-9|0,d=c>>>0<5,e=b|d,0|1&e}function cv(a){a|=0;var b=0,c=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,q=0;return q=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),c=q,e=0|dv(a),g=0==(0|e),g?(h=a+32|0,i=0|f[h>>2],j=0|yx[511&i](a,c,1),k=1==(0|j),k?(l=0|d[c>>0],m=255&l,b=m):b=-1):b=-1,o=q,0|b}function dv(a){a|=0;var b=0,c=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;return o,c=a+74|0,q=0|d[c>>0],y=q<<24>>24,z=y+255|0,A=z|y,B=255&A,d[c>>0]=B,C=a+20|0,D=0|f[C>>2],E=a+28|0,e=0|f[E>>2],g=D>>>0>e>>>0,g&&(h=a+36|0,i=0|f[h>>2],yx[511&i](a,0,0)),j=a+16|0,f[j>>2]=0,f[E>>2]=0,f[C>>2]=0,k=0|f[a>>2],l=4&k,m=0==(0|l),m?(p=a+44|0,r=0|f[p>>2],s=a+48|0,t=0|f[s>>2],u=r+t|0,v=a+8|0,f[v>>2]=u,w=a+4|0,f[w>>2]=u,x=k<<27,F=x>>31,b=F):(n=32|k,f[a>>2]=n,b=-1),0|b}function ev(a,b,c){a|=0,b|=0,c|=0;var d=0;return o,d=0|Zu(a,b,c,-1,0),G,0|d}function fv(a,b){a=+a,b=+b;var c=0,d=0,g=0,h=0,i=0,j=0;return o,k[m>>3]=a,c=0|f[m>>2],d=0|f[m+4>>2],k[m>>3]=b,0|f[m>>2],g=0|f[m+4>>2],h=2147483647&d,i=-2147483648&g,j=i|h,f[m>>2]=c,f[m+4>>2]=j,+ +k[m>>3]}function gv(a,b){a|=0,b|=0;var c=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0;if(o,m=0|d[a>>0],n=0|d[b>>0],p=m<<24>>24!=n<<24>>24,q=m<<24>>24==0,q|p)f=n,g=m;else for(c=b,e=a;;){if(r=e+1|0,s=c+1|0,t=0|d[r>>0],u=0|d[s>>0],h=t<<24>>24!=u<<24>>24,i=t<<24>>24==0,i|h){f=u,g=t;break}c=s,e=r}return j=255&g,k=255&f,0|(j-k|0)}function hv(a,b,c){a|=0,b|=0,c|=0;var e=0,f=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,p=0,r=0,s=0,t=0;m=0==(0|c);a:if(m)l=0;else{for(e=a,f=c,g=b;;){if(n=0|d[e>>0],p=0|d[g>>0],!(n<<24>>24==p<<24>>24))break;if(r=f+-1|0,s=e+1|0,t=g+1|0,0==(0|r)){l=0;break a}e=s,f=r,g=t}i=255&n,j=255&p,k=i-j|0,l=k}return 0|l}function iv(a,b,c){a|=0,b|=0,c|=0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;if(o,0==(0|c))h=0;else{B=0|d[a>>0],C=255&B,D=B<<24>>24==0,E=0|d[b>>0],F=255&E;a:if(D)j=F,k=C;else for(e=a,g=c,i=b,l=E,p=B,y=F,z=C;;){if(f=g+-1|0,G=l<<24>>24!=0,m=0!=(0|f),H=m&G,n=p<<24>>24==l<<24>>24,!(n&H)){j=y,k=z;break a}if(q=e+1|0,r=i+1|0,s=0|d[q>>0],t=255&s,u=s<<24>>24==0,v=0|d[r>>0],w=255&v,u){j=w,k=t;break}e=q,g=f,i=r,l=v,p=s,y=w,z=t}x=k-j|0,h=x}return 0|h}function jv(a,b,c,e){a|=0,b|=0,c|=0,e|=0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0;K=o,o=o+128|0,(0|o)>=(0|p)&&ca(128),C=K+124|0,D=K,I=D,L=3180,M=I+124|0;do{f[I>>2]=0|f[L>>2],I=I+4|0,L=L+4|0}while((0|I)<(0|M));return E=b+-1|0,F=E>>>0>2147483646,F?(G=0==(0|b),G?(i=C,j=1,J=4):(H=0|Ru(),f[H>>2]=75,h=-1)):(i=a,j=b,J=4),4==(0|J)&&(k=i,l=-2-k|0,m=j>>>0>l>>>0,g=m?l:j,n=D+48|0,f[n>>2]=g,q=D+20|0,f[q>>2]=i,r=D+44|0,f[r>>2]=i,s=i+g|0,t=D+16|0,f[t>>2]=s,u=D+28|0,f[u>>2]=s,v=0|kv(D,c,e),w=0==(0|g),w?h=v:(x=0|f[q>>2],y=0|f[t>>2],z=(0|x)==(0|y),A=z<<31>>31,B=x+A|0,d[B>>0]=0,h=v)),o=K,0|h}function kv(a,b,c){a|=0,b|=0,c|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,$=0,_=0;$=o,o=o+224|0,(0|o)>=(0|p)&&ca(224),F=$+120|0,Q=$+80|0,S=$,T=$+136|0,Y=Q,_=Y+40|0;do{f[Y>>2]=0,Y=Y+4|0}while((0|Y)<(0|_));return X=0|f[c>>2],f[F>>2]=X,U=0|lv(0,b,F,S,Q),V=(0|U)<0,V?g=-1:(W=a+76|0,j=0|f[W>>2],k=(0|j)>-1,k?(l=0|mv(a),R=l):R=0,m=0|f[a>>2],n=32&m,q=a+74|0,r=0|d[q>>0],s=r<<24>>24<1,s&&(t=-33&m,f[a>>2]=t),u=a+48|0,v=0|f[u>>2],w=0==(0|v),w?(y=a+44|0,z=0|f[y>>2],f[y>>2]=T,A=a+28|0,f[A>>2]=T,B=a+20|0,f[B>>2]=T,f[u>>2]=80,C=T+80|0,D=a+16|0,f[D>>2]=C,E=0|lv(a,b,F,S,Q),G=0==(0|z),G?h=E:(H=a+36|0,I=0|f[H>>2],yx[511&I](a,0,0),J=0|f[B>>2],K=0==(0|J),e=K?-1:E,f[y>>2]=z,f[u>>2]=0,f[D>>2]=0,f[A>>2]=0,f[B>>2]=0,h=e)):(x=0|lv(a,b,F,S,Q),h=x),L=0|f[a>>2],M=32&L,N=0==(0|M),i=N?h:-1,O=L|n,f[a>>2]=O,P=0==(0|R),P||nv(a),g=i),o=$,0|g}function lv(a,b,c,g,h){a|=0,b|=0,c|=0,g|=0,h|=0;var i=0,j=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Ya=0,$a=0,_a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,$b=0,_b=0,ac=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,yc=0,zc=0,Ac=0,Bc=0,Cc=0,Dc=0,Ec=0,Fc=0,Gc=0,Hc=0,Ic=0,Jc=0,Kc=0,Lc=0,Mc=0,Nc=0,Oc=0,Pc=0,Qc=0,Rc=0,Sc=0,Tc=0,Uc=0,Vc=0,Wc=0,Xc=0,Yc=0,Zc=0,$c=0,_c=0,ad=0,bd=0,dd=0,ed=0,fd=0,gd=0,hd=0,id=0,jd=0,kd=0,ld=0,md=0,nd=0,pd=0,qd=0,rd=0,sd=0,td=0,ud=0,vd=0,wd=0,xd=0,yd=0,zd=0,Ad=0,Bd=0,Cd=0,Dd=0,Ed=0,Fd=0,Gd=0,Hd=0,Id=0,Jd=0,Kd=0,Ld=0,Md=0,Nd=0,Od=0,Pd=0,Qd=0,Rd=0,Sd=0,Td=0,Ud=0,Vd=0,Wd=0,Xd=0,Yd=0,$d=0,_d=0,ae=0,be=0,ce=0,de=0,ee=0,fe=0,ge=0,he=0,ie=0,je=0,ke=0,le=0,me=0,ne=0,oe=0,pe=0,qe=0,re=0,te=0,ue=0,we=0,xe=0,ye=0,Ae=0,Be=0,Ce=0,Ge=0,Ie=0,Je=0,Ke=0,Me=0,Oe=0,Pe=0,Qe=0,Re=0,Se=0,Te=0,Ue=0,Ve=0,We=0,Xe=0,Ye=0,Ze=0,$e=0,_e=0,cf=0,df=0,ef=0,gf=0,hf=0,lf=0,mf=0,nf=0,of=0,pf=0,rf=0,sf=0,tf=0,uf=0,vf=0,xf=0,yf=0,zf=0,Af=0,Bf=0,Cf=0,Df=0,Ef=0,Ff=0,Gf=0,Hf=0,If=0,Jf=0,Kf=0,Lf=0,Mf=0,Of=0,Pf=0,Qf=0,Rf=0,Sf=0,Uf=0,Wf=0,Xf=0,Yf=0,Zf=0,$f=0,_f=0,ag=0,bg=0,cg=0,dg=0,eg=0,fg=0,gg=0,hg=0,ig=0,jg=0,kg=0,lg=0,ng=0,og=0,qg=0,rg=0,sg=0,tg=0,ug=0,vg=0,wg=0,xg=0,yg=0,zg=0,Ag=0,Bg=0,Dg=0,Eg=0,Fg=0,Gg=0,Hg=0,Jg=0,Kg=0,Lg=0,Mg=0,Ng=0,Og=0,Pg=0,Qg=0,Rg=0,Sg=0,Tg=0,Ug=0,Vg=0,Wg=0,Xg=0,Yg=0,$g=0,_g=0,ah=0,bh=0,ch=0,dh=0,eh=0,fh=0,gh=0,ih=0,jh=0,kh=0,mh=0,nh=0;nh=o,o=o+64|0,(0|o)>=(0|p)&&ca(64),Jf=nh+16|0,Uf=nh,dg=nh+24|0,og=nh+8|0,zg=nh+20|0,f[Jf>>2]=b,Ga=0!=(0|a),Ra=dg+40|0,ab=Ra,lb=dg+39|0,wb=og+4|0,C=0,D=0,O=0,Tc=b;a:for(;;){Hb=(0|D)>-1;do{if(Hb){if(Sb=2147483647-D|0,(0|C)>(0|Sb)){mc=0|Ru(),f[mc>>2]=75,X=-1;break}xc=C+D|0,X=xc;break}X=D}while(0);if(Ic=0|d[Tc>>0],Ic<<24>>24==0){mh=87;break}nd=Ic,Jd=Tc;b:for(;;){switch(nd<<24>>24){case 37:F=Jd,de=Jd,mh=9;break b;case 0:E=Jd,yf=Jd;break b}yd=Jd+1|0,f[Jf>>2]=yd,Ba=0|d[yd>>0],nd=Ba,Jd=yd}b:if(9==(0|mh))for(;;){if(mh=0,Ud=de+1|0,oe=0|d[Ud>>0],!(oe<<24>>24==37)){E=F,yf=de;break b}if(Ke=F+1|0,Ve=de+2|0,f[Jf>>2]=Ve,ef=0|d[Ve>>0],!(ef<<24>>24==37)){E=Ke,yf=Ve;break}F=Ke,de=Ve,mh=9}if(tf=E,uf=Tc,vf=tf-uf|0,Ga&&ov(a,Tc,vf),0==(0|vf)){xf=yf+1|0,zf=0|d[xf>>0],Af=zf<<24>>24,_g=Af+-48|0,Yg=_g>>>0<10,Yg?(Bf=yf+2|0,Cf=0|d[Bf>>0],Df=Cf<<24>>24==36,Ef=yf+3|0,va=Df?Ef:xf,n=Df?1:O,ah=Df?_g:-1,I=ah,ba=n,ih=va):(I=-1,ba=O,ih=xf),f[Jf>>2]=ih,Ff=0|d[ih>>0],Gf=Ff<<24>>24,Hf=Gf+-32|0,If=Hf>>>0<32;b:if(If)for(N=0,pf=Ff,Lf=Hf,jh=ih;;){if(Kf=1<<Lf,Mf=75913&Kf,0==(0|Mf)){M=N,Aa=pf,Xf=jh;break b}if(Of=Kf|N,Pf=jh+1|0,f[Jf>>2]=Pf,Qf=0|d[Pf>>0],Rf=Qf<<24>>24,Sf=Rf+-32|0,!(Sf>>>0<32)){M=Of,Aa=Qf,Xf=Pf;break}N=Of,pf=Qf,Lf=Sf,jh=Pf}else M=0,Aa=Ff,Xf=ih;if(Aa<<24>>24==42){if(Wf=Xf+1|0,Yf=0|d[Wf>>0],Zf=Yf<<24>>24,ch=Zf+-48|0,$g=ch>>>0<10,$g?($f=Xf+2|0,_f=0|d[$f>>0],ag=_f<<24>>24==36,ag?(bg=h+(ch<<2)|0,f[bg>>2]=10,cg=0|d[Wf>>0],eg=cg<<24>>24,fg=eg+-48|0,gg=g+(fg<<3)|0,hg=gg,ig=hg,jg=0|f[ig>>2],kg=hg+4|0,lg=kg,0|f[lg>>2],ng=Xf+3|0,L=jg,na=1,kh=ng):mh=23):mh=23,23==(0|mh)){if(mh=0,!(0==(0|ba))){s=-1;break}Ga?(Kg=0|f[c>>2],qg=Kg,rg=4,Ug=rg,Og=Ug-1|0,sg=qg+Og|0,tg=4,Xg=tg,Wg=Xg-1|0,Vg=-1^Wg,ug=sg&Vg,vg=ug,wg=0|f[vg>>2],Mg=vg+4|0,f[c>>2]=Mg,L=wg,na=0,kh=Wf):(L=0,na=0,kh=Wf)}f[Jf>>2]=kh,xg=(0|L)<0,yg=8192|M,Ag=0-L|0,m=xg?yg:M,l=xg?Ag:L,$=l,_=m,ta=na,Eg=kh}else{if(Bg=0|pv(Jf),(0|Bg)<0){s=-1;break}Ca=0|f[Jf>>2],$=Bg,_=M,ta=ba,Eg=Ca}Dg=0|d[Eg>>0],Fg=Dg<<24>>24==46;do{if(Fg){if(Gg=Eg+1|0,Hg=0|d[Gg>>0],!(Hg<<24>>24==42)){gb=Eg+1|0,f[Jf>>2]=gb,hb=0|pv(Jf),Ea=0|f[Jf>>2],J=hb,Da=Ea;break}if(Jg=Eg+2|0,Ha=0|d[Jg>>0],Ia=Ha<<24>>24,bh=Ia+-48|0,bh>>>0<10&&(Ja=Eg+3|0,Ka=0|d[Ja>>0],Ka<<24>>24==36)){Ma=h+(bh<<2)|0,f[Ma>>2]=10,Na=0|d[Jg>>0],Oa=Na<<24>>24,Pa=Oa+-48|0,Qa=g+(Pa<<3)|0,Sa=Qa,Ta=Sa,Ua=0|f[Ta>>2],Va=Sa+4|0,Wa=Va,0|f[Wa>>2],Ya=Eg+4|0,f[Jf>>2]=Ya,J=Ua,Da=Ya;break}if(!(0==(0|ta))){s=-1;break a}Ga?(Lg=0|f[c>>2],$a=Lg,_a=4,Qg=_a,Pg=Qg-1|0,bb=$a+Pg|0,cb=4,Tg=cb,Sg=Tg-1|0,Rg=-1^Sg,db=bb&Rg,eb=db,fb=0|f[eb>>2],Ng=eb+4|0,f[c>>2]=Ng,rf=fb):rf=0,f[Jf>>2]=Jg,J=rf,Da=Jg}else J=-1,Da=Eg}while(0);for(H=0,jb=Da;;){if(ib=0|d[jb>>0],kb=ib<<24>>24,mb=kb+-65|0,mb>>>0>57){s=-1;break a}if(ob=jb+1|0,f[Jf>>2]=ob,pb=0|d[jb>>0],qb=pb<<24>>24,rb=qb+-65|0,sb=(70255+(58*H|0)|0)+rb|0,tb=0|d[sb>>0],ub=255&tb,vb=ub+-1|0,!(vb>>>0<8))break;H=ub,jb=ob}if(tb<<24>>24==0){s=-1;break}zb=tb<<24>>24==19,Ab=(0|I)>-1;do{if(zb){if(Ab){s=-1;break a}mh=49}else{if(Ab){Bb=h+(I<<2)|0,f[Bb>>2]=ub,Cb=g+(I<<3)|0,Db=Cb,Eb=Db,Fb=0|f[Eb>>2],Gb=Db+4|0,Ib=Gb,Jb=0|f[Ib>>2],Kb=Uf,Lb=Kb,f[Lb>>2]=Fb,Mb=Kb+4|0,Nb=Mb,f[Nb>>2]=Jb,mh=49;break}if(!Ga){s=0;break a}qv(Uf,ub,c)}}while(0);if(49!=(0|mh)||(mh=0,Ga)){Ob=0|d[jb>>0],Pb=Ob<<24>>24,Qb=0!=(0|H),Rb=15&Pb,Tb=3==(0|Rb),fh=Qb&Tb,Ub=-33&Pb,x=fh?Ub:Pb,Vb=8192&_,Wb=0==(0|Vb),Xb=-65537&_,aa=Wb?_:Xb;b:switch(0|x){case 110:switch((255&H)<<24>>24){case 0:dc=0|f[Uf>>2],f[dc>>2]=X,C=0,D=X,O=ta,Tc=ob;continue a;case 1:ec=0|f[Uf>>2],f[ec>>2]=X,C=0,D=X,O=ta,Tc=ob;continue a;case 2:fc=(0|X)<0,gc=fc<<31>>31,hc=0|f[Uf>>2],ic=hc,jc=ic,f[jc>>2]=X,kc=ic+4|0,lc=kc,f[lc>>2]=gc,C=0,D=X,O=ta,Tc=ob;continue a;case 3:nc=65535&X,oc=0|f[Uf>>2],e[oc>>1]=nc,C=0,D=X,O=ta,Tc=ob;continue a;case 4:pc=255&X,qc=0|f[Uf>>2],d[qc>>0]=pc,C=0,D=X,O=ta,Tc=ob;continue a;case 6:rc=0|f[Uf>>2],f[rc>>2]=X,C=0,D=X,O=ta,Tc=ob;continue a;case 7:sc=(0|X)<0,tc=sc<<31>>31,uc=0|f[Uf>>2],vc=uc,wc=vc,f[wc>>2]=X,yc=vc+4|0,zc=yc,f[zc>>2]=tc,C=0,D=X,O=ta,Tc=ob;continue a;default:C=0,D=X,O=ta,Tc=ob;continue a}break;case 112:Ac=J>>>0>8,Bc=Ac?J:8,Cc=8|aa,T=120,Z=Bc,sa=Cc,mh=61;break;case 88:case 120:T=x,Z=J,sa=aa,mh=61;break;case 111:Uc=Uf,Vc=Uc,Wc=0|f[Vc>>2],Xc=Uc+4|0,Yc=Xc,Zc=0|f[Yc>>2],$c=0|sv(Wc,Zc,Ra),_c=8&aa,ad=0==(0|_c),bd=$c,dd=ab-bd|0,ed=(0|J)>(0|dd),fd=dd+1|0,gd=ad|ed,K=gd?J:fd,t=$c,S=0,U=70719,ja=K,xa=aa,Hd=Wc,Kd=Zc,mh=67;break;case 105:case 100:if(hd=Uf,id=hd,jd=0|f[id>>2],kd=hd+4|0,ld=kd,md=0|f[ld>>2],(0|md)<0){pd=0|Mw(0,0,0|jd,0|md),qd=G,rd=Uf,sd=rd,f[sd>>2]=pd,td=rd+4|0,ud=td,f[ud>>2]=qd,w=1,y=70719,Bd=pd,Cd=qd,mh=66;break b}vd=2048&aa,wd=0==(0|vd),xd=1&aa,zd=0==(0|xd),i=zd?70719:70721,j=wd?i:70720,Ad=2049&aa,dh=0!=(0|Ad),oa=1&dh,w=oa,y=j,Bd=jd,Cd=md,mh=66;break b;case 117:Yb=Uf,Zb=Yb,$b=0|f[Zb>>2],_b=Yb+4|0,ac=_b,cc=0|f[ac>>2],w=0,y=70719,Bd=$b,Cd=cc,mh=66;break;case 99:Td=Uf,Vd=Td,Wd=0|f[Vd>>2],Xd=Td+4|0,Yd=Xd,0|f[Yd>>2],$d=255&Wd,d[lb>>0]=$d,da=lb,ea=0,fa=70719,ia=Ra,ya=1,za=Xb;break;case 109:_d=0|Ru(),ae=0|f[_d>>2],be=0|uv(ae),Q=be,mh=71;break;case 115:ce=0|f[Uf>>2],ee=0!=(0|ce),fe=ee?ce:70729,Q=fe,mh=71;break;case 67:me=Uf,ne=me,pe=0|f[ne>>2],qe=me+4|0,re=qe,0|f[re>>2],f[og>>2]=pe,f[wb>>2]=0,f[Uf>>2]=og,wa=-1,sf=og,mh=75;break;case 83:Fa=0|f[Uf>>2],te=0==(0|J),te?(wv(a,32,$,0,aa),A=0,mh=84):(wa=J,sf=Fa,mh=75);break;case 65:case 71:case 70:case 69:case 97:case 103:case 102:case 101:Re=+k[Uf>>3],Se=0|yv(a,Re,$,J,aa,x),C=Se,D=X,O=ta,Tc=ob;continue a;default:da=Tc,ea=0,fa=70719,ia=Ra,ya=J,za=aa}b:if(61==(0|mh))mh=0,Dc=Uf,Ec=Dc,Fc=0|f[Ec>>2],Gc=Dc+4|0,Hc=Gc,Jc=0|f[Hc>>2],Kc=32&T,Lc=0|rv(Fc,Jc,Ra,Kc),Mc=0==(0|Fc),Nc=0==(0|Jc),Oc=Mc&Nc,Pc=8&sa,Qc=0==(0|Pc),gh=Qc|Oc,Rc=T>>4,Sc=70719+Rc|0,pa=gh?70719:Sc,qa=gh?0:2,t=Lc,S=qa,U=pa,ja=Z,xa=sa,Hd=Fc,Kd=Jc,mh=67;else if(66==(0|mh))mh=0,Dd=0|tv(Bd,Cd,Ra),t=Dd,S=w,U=y,ja=J,xa=aa,Hd=Bd,Kd=Cd,mh=67;else if(71==(0|mh))mh=0,ge=0|vv(Q,0,J),he=0==(0|ge),ie=ge,je=Q,ke=ie-je|0,le=Q+J|0,ra=he?J:ke,Y=he?le:ge,da=Q,ea=0,fa=70719,ia=Y,ya=ra,za=Xb;else if(75==(0|mh)){for(mh=0,v=sf,B=0,W=0;;){if(ue=0|f[v>>2],0==(0|ue)){z=B,ha=W;break}if(we=0|xv(zg,ue),xe=(0|we)<0,ye=wa-B|0,Ae=we>>>0>ye>>>0,xe|Ae){z=B,ha=we;break}if(Be=v+4|0,Ce=we+B|0,!(wa>>>0>Ce>>>0)){z=Ce,ha=we;break}v=Be,B=Ce,W=we}if((0|ha)<0){s=-1;break a}if(wv(a,32,$,z,aa),0==(0|z))A=0,mh=84;else for(R=sf,V=0;;){if(Ge=0|f[R>>2],0==(0|Ge)){A=z,mh=84;break b}if(Ie=0|xv(zg,Ge),Je=Ie+V|0,(0|Je)>(0|z)){A=z,mh=84;break b}if(Me=R+4|0,ov(a,zg,Ie),!(Je>>>0<z>>>0)){A=z,mh=84;break}R=Me,V=Je}}if(67==(0|mh))mh=0,Ed=(0|ja)>-1,Fd=-65537&xa,q=Ed?Fd:xa,Gd=0!=(0|Hd),Id=0!=(0|Kd),Ld=Gd|Id,Md=0!=(0|ja),eh=Md|Ld,Nd=t,Od=ab-Nd|0,Pd=1^Ld,Qd=1&Pd,Rd=Qd+Od|0,Sd=(0|ja)>(0|Rd),ka=Sd?ja:Rd,la=eh?ka:ja,u=eh?t:Ra,da=u,ea=S,fa=U,ia=Ra,ya=la,za=q;else if(84==(0|mh)){mh=0,Oe=8192^aa,wv(a,32,$,A,Oe),Pe=(0|$)>(0|A),Qe=Pe?$:A,C=Qe,D=X,O=ta,Tc=ob;continue}Te=ia,Ue=da,We=Te-Ue|0,Xe=(0|ya)<(0|We),r=Xe?We:ya,Ye=r+ea|0,Ze=(0|$)<(0|Ye),ma=Ze?Ye:$,wv(a,32,ma,Ye,za),ov(a,fa,ea),$e=65536^za,wv(a,48,ma,Ye,$e),wv(a,48,r,We,0),ov(a,da,We),_e=8192^za,wv(a,32,ma,Ye,_e),C=ma,D=X,O=ta,Tc=ob}else C=0,D=X,O=ta,Tc=ob}else P=O,C=vf,D=X,Tc=yf,O=P}a:if(87==(0|mh))if(0==(0|a))if(0==(0|O))s=0;else{for(ga=1;;){if(cf=h+(ga<<2)|0,df=0|f[cf>>2],0==(0|df)){ua=ga;break}if(gf=g+(ga<<3)|0,qv(gf,df,c),hf=ga+1|0,!((0|hf)<10)){s=1;break a}ga=hf}for(;;){if(mf=h+(ua<<2)|0,nf=0|f[mf>>2],of=0==(0|nf),lf=ua+1|0,!of){s=-1;break a}if(!((0|lf)<10)){s=1;break}ua=lf}}else s=X;return o=nh,0|s}function mv(a){a|=0;return o,0}function nv(a){a|=0}function ov(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0;d=0|f[a>>2],e=32&d,(g=0==(0|e))&&Kv(b,c,a)}function pv(a){a|=0;var b=0,c=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,r=0,s=0,t=0;if(o,e=0|f[a>>2],g=0|d[e>>0],h=g<<24>>24,s=h+-48|0,s>>>0<10)for(c=0,l=e,t=s;;){if(i=10*c|0,j=t+i|0,k=l+1|0,f[a>>2]=k,m=0|d[k>>0],n=m<<24>>24,r=n+-48|0,!(r>>>0<10)){b=j;break}c=j,l=k,t=r}else b=0;return 0|b}function qv(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,$a=0,_a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,$b=0,_b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,yc=0,zc=0,Ac=0,Bc=0,Cc=0,Dc=0;T=b>>>0>20;a:if(!T)switch(0|b){case 9:ob=0|f[c>>2],ca=ob,na=4,Jb=na,Ib=Jb-1|0,ya=ca+Ib|0,Ja=4,Mb=Ja,Lb=Mb-1|0,Kb=-1^Lb,Ua=ya&Kb,db=Ua,g=0|f[db>>2],yb=db+4|0,f[c>>2]=yb,f[a>>2]=g;break a;case 10:sb=0|f[c>>2],t=sb,B=4,Ob=B,Nb=Ob-1|0,C=t+Nb|0,D=4,Rb=D,Qb=Rb-1|0,Pb=-1^Qb,E=C&Pb,F=E,G=0|f[F>>2],Fb=F+4|0,f[c>>2]=Fb,H=(0|G)<0,I=H<<31>>31,J=a,K=J,f[K>>2]=G,L=J+4|0,M=L,f[M>>2]=I;break a;case 11:wb=0|f[c>>2],N=wb,O=4,Tb=O,Sb=Tb-1|0,P=N+Sb|0,Q=4,Wb=Q,Vb=Wb-1|0,Ub=-1^Vb,R=P&Ub,S=R,U=0|f[S>>2],Gb=S+4|0,f[c>>2]=Gb,V=a,W=V,f[W>>2]=U,X=V+4|0,Y=X,f[Y>>2]=0;break a;case 12:xb=0|f[c>>2],Z=xb,$=8,Yb=$,Xb=Yb-1|0,_=Z+Xb|0,aa=8,_b=aa,$b=_b-1|0,Zb=-1^$b,ba=_&Zb,da=ba,ea=da,fa=ea,ga=0|f[fa>>2],ha=ea+4|0,ia=ha,ja=0|f[ia>>2],Hb=da+8|0,f[c>>2]=Hb,ka=a,la=ka,f[la>>2]=ga,ma=ka+4|0,oa=ma,f[oa>>2]=ja;break a;case 13:pb=0|f[c>>2],pa=pb,qa=4,bc=qa,ac=bc-1|0,ra=pa+ac|0,sa=4,ec=sa,dc=ec-1|0,cc=-1^dc,ta=ra&cc,ua=ta,va=0|f[ua>>2],zb=ua+4|0,f[c>>2]=zb,wa=65535&va,xa=wa<<16>>16,za=(0|xa)<0,Aa=za<<31>>31,Ba=a,Ca=Ba,f[Ca>>2]=xa,Da=Ba+4|0,Ea=Da,f[Ea>>2]=Aa;break a;case 14:qb=0|f[c>>2],Fa=qb,Ga=4,gc=Ga,fc=gc-1|0,Ha=Fa+fc|0,Ia=4,jc=Ia,ic=jc-1|0,hc=-1^ic,Ka=Ha&hc,La=Ka,Ma=0|f[La>>2],Ab=La+4|0,f[c>>2]=Ab,e=65535&Ma,Na=a,Oa=Na,f[Oa>>2]=e,Pa=Na+4|0,Qa=Pa,f[Qa>>2]=0;break a;case 15:rb=0|f[c>>2],Ra=rb,Sa=4,lc=Sa,kc=lc-1|0,Ta=Ra+kc|0,Va=4,oc=Va,nc=oc-1|0,mc=-1^nc,Wa=Ta&mc,Xa=Wa,Ya=0|f[Xa>>2],Bb=Xa+4|0,f[c>>2]=Bb,Za=255&Ya,$a=Za<<24>>24,_a=(0|$a)<0,ab=_a<<31>>31,bb=a,cb=bb,f[cb>>2]=$a,eb=bb+4|0,fb=eb,f[fb>>2]=ab;break a;case 16:tb=0|f[c>>2],gb=tb,hb=4,qc=hb,pc=qc-1|0,ib=gb+pc|0,jb=4,tc=jb,sc=tc-1|0,rc=-1^sc,kb=ib&rc,lb=kb,mb=0|f[lb>>2],Cb=lb+4|0,f[c>>2]=Cb,d=255&mb,nb=a,h=nb,f[h>>2]=d,i=nb+4|0,j=i,f[j>>2]=0;break a;case 17:ub=0|f[c>>2],l=ub,m=8,vc=m,uc=vc-1|0,n=l+uc|0,p=8,yc=p,xc=yc-1|0,wc=-1^xc,q=n&wc,r=q,s=+k[r>>3],Db=r+8|0,f[c>>2]=Db,k[a>>3]=s;break a;case 18:vb=0|f[c>>2],u=vb,v=8,Ac=v,zc=Ac-1|0,w=u+zc|0,x=8,Dc=x,Cc=Dc-1|0,Bc=-1^Cc,y=w&Bc,z=y,A=+k[z>>3],Eb=z+8|0,f[c>>2]=Eb,k[a>>3]=A;break a;default:break a}}function rv(a,b,c,e){a|=0,b|=0,c|=0,e|=0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,t=0,u=0,w=0,x=0,y=0;if(o,t=0==(0|a),u=0==(0|b),t&u)f=c;else for(g=c,m=b,x=a;;){if(w=15&x,y=70767+w|0,h=0|d[y>>0],i=255&h,j=i|e,k=255&j,l=g+-1|0,d[l>>0]=k,n=0|Pw(0|x,0|m,4),p=G,q=0==(0|n),r=0==(0|p),q&r){f=l;break}g=l,m=p,x=n}return 0|f}function sv(a,b,c){a|=0,b|=0,c|=0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,n=0,p=0,r=0,s=0,t=0,u=0;if(o,n=0==(0|a),p=0==(0|b),n&p)e=c;else for(f=c,h=b,s=a;;){if(r=255&s,t=7&r,u=48|t,g=f+-1|0,d[g>>0]=u,i=0|Pw(0|s,0|h,3),j=G,k=0==(0|i),l=0==(0|j),k&l){e=g;break}f=g,h=j,s=i}return 0|e}function tv(a,b,c){a|=0,b|=0,c|=0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,y=0,z=0,A=0,B=0,C=0,E=0,F=0,H=0,I=0,K=0,L=0;if(o,E=b>>>0>0,F=a>>>0>4294967295,H=0==(0|b),I=H&F,E|I){for(h=c,K=a,L=b;;){if(k=0|ax(0|K,0|L,10,0),G,m=255&k,n=48|m,p=h+-1|0,d[p>>0]=n,q=0|Ww(0|K,0|L,10,0),r=G,s=L>>>0>9,t=K>>>0>4294967295,u=9==(0|L),v=u&t,!(s|v))break;h=p,K=q,L=r}e=q,g=p}else e=a,g=c;if(0==(0|e))i=g;else for(f=e,j=g;;){if(y=(f>>>0)%10&-1,z=48|y,A=255&z,B=j+-1|0,d[B>>0]=A,C=(f>>>0)/10&-1,f>>>0<10){i=B;break}f=C,j=B}return 0|i}function uv(a){a|=0;var b=0,c=0,d=0;return o,b=0|Ev(),c=b+188|0,d=0|f[c>>2],0|(0|Fv(a,d))}function vv(a,b,c){a|=0,b|=0,c|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,O=0,P=0,Q=0,T=0,W=0,X=0,Z=0,_=0,aa=0,ba=0,ca=0,da=0,ea=0,ga=0,ha=0;P=255&b,_=a,aa=3&_,ba=0!=(0|aa),ca=0!=(0|c),ga=ca&ba;a:if(ga)for(da=255&b,i=a,l=c;;){if(ea=0|d[i>>0],ea<<24>>24==da<<24>>24){h=i,k=l,ha=6;break a}if(w=i+1|0,x=l+-1|0,y=w,z=3&y,A=0!=(0|z),B=0!=(0|x),!(B&A)){g=w,j=x,u=B,ha=5;break}i=w,l=x}else g=a,j=c,u=ca,ha=5;5==(0|ha)&&(u?(h=g,k=j,ha=6):(r=g,t=0));a:do{if(6==(0|ha))if(C=0|d[h>>0],D=255&b,C<<24>>24==D<<24>>24)r=h,t=k;else{F=0|V(P,16843009),G=k>>>0>3;b:if(G){for(m=h,p=k;;){if(H=0|f[m>>2],I=H^F,J=I+-16843009|0,K=-2139062144&I,L=-2139062144^K,M=L&J,!(0==(0|M)))break;if(O=m+4|0,Q=p+-4|0,!(Q>>>0>3)){e=O,n=Q,ha=11;break b}m=O,p=Q}q=m,s=p}else e=h,n=k,ha=11;if(11==(0|ha)){if(0==(0|n)){r=e,t=0;break}q=e,s=n}for(;;){if(T=0|d[q>>0],T<<24>>24==D<<24>>24){r=q,t=s;break a}if(W=q+1|0,X=s+-1|0,0==(0|X)){r=W,t=0;break}q=W,s=X}}}while(0);return Z=0!=(0|t),0|(Z?r:0)}function wv(a,b,c,d,e){a|=0,b|=0,c|=0,d|=0,e|=0;var f=0,g=0,h=0,i=0,k=0,l=0,n=0,q=0,r=0,s=0,t=0,u=0,x=0;if(x=o,o=o+256|0,(0|o)>=(0|p)&&ca(256),q=x,r=73728&e,s=0==(0|r),t=(0|c)>(0|d),t&s){if(u=c-d|0,h=u>>>0<256,i=h?u:256,Ow(0|q,0|b,0|i),u>>>0>255){for(k=c-d|0,g=u;;){if(ov(a,q,256),l=g+-256|0,!(l>>>0>255))break;g=l}n=255&k,f=n}else f=u;ov(a,q,f)}o=x}function xv(a,b){a|=0,b|=0;var c=0,d=0,e=0;return o,d=0==(0|a),d?c=0:(e=0|Cv(a,b,0),c=e),0|c}function yv(a,b,c,e,g,h){a|=0,b=+b,c|=0,e|=0,g|=0,h|=0;var i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,$a=0,_a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Rb=0,Tb=0,Ub=0,Vb=0,Xb=0,Yb=0,Zb=0,$b=0,_b=0,ac=0,bc=0,dc=0,gc=0,hc=0,jc=0,kc=0,lc=0,nc=0,oc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,yc=0,zc=0,Bc=0,Cc=0,Dc=0,Ec=0,Fc=0,Gc=0,Hc=0,Ic=0,Jc=0,Kc=0,Lc=0,Mc=0,Nc=0,Pc=0,Qc=0,Rc=0,Sc=0,Tc=0,Uc=0,Vc=0,Wc=0,Xc=0,Yc=0,Zc=0,$c=0,_c=0,ad=0,bd=0,cd=0,ed=0,fd=0,gd=0,hd=0,id=0,jd=0,kd=0,md=0,nd=0,od=0,qd=0,rd=0,sd=0,td=0,ud=0,vd=0,wd=0,xd=0,yd=0,zd=0,Ad=0,Bd=0,Cd=0,Ed=0,Fd=0,Gd=0,Hd=0,Id=0,Jd=0,Kd=0,Md=0,Nd=0,Od=0,Pd=0,Qd=0,Rd=0,Sd=0,Td=0,Ud=0,Vd=0,Wd=0,Xd=0,Yd=0,Zd=0,$d=0,_d=0,ae=0,be=0,ce=0,de=0,ee=0,ge=0,ie=0,je=0,ke=0,le=0,me=0,ne=0,pe=0,qe=0,re=0,se=0,te=0,ve=0,we=0,ye=0,ze=0,Ae=0,Ce=0,De=0,Fe=0,Ge=0,He=0,Ie=0,Je=0,Ke=0,Le=0,Me=0,Ne=0,Oe=0,Qe=0,Re=0,Te=0,Ue=0,We=0,Xe=0,Ye=0,$e=0,_e=0,af=0,bf=0,cf=0,df=0,ef=0,ff=0,gf=0,hf=0,jf=0,kf=0,lf=0,mf=0,nf=0,of=0,pf=0,qf=0,rf=0,sf=0,tf=0,uf=0,vf=0,wf=0,xf=0,yf=0,zf=0,Af=0,Bf=0,Cf=0,Df=0,Ef=0,Gf=0,Hf=0,If=0,Kf=0,Lf=0,Mf=0,Nf=0,Of=0,Pf=0,Qf=0,Rf=0,Sf=0,Tf=0,Uf=0,Vf=0,Wf=0,Xf=0,Yf=0,Zf=0,$f=0,_f=0,ag=0,bg=0,cg=0,fg=0,gg=0,hg=0,ig=0,kg=0,lg=0,mg=0,ng=0,pg=0,qg=0,rg=0,sg=0,ug=0,vg=0,xg=0,yg=0,zg=0,Bg=0,Cg=0,Dg=0,Eg=0,Fg=0,Gg=0,Hg=0,Jg=0,Kg=0,Mg=0,Ng=0,Og=0,Pg=0,Qg=0,Rg=0,Sg=0,Tg=0,Ug=0,Vg=0,Xg=0,Yg=0,$g=0,_g=0,ah=0,bh=0,ch=0,dh=0,eh=0,fh=0,gh=0,hh=0,ih=0,kh=0,lh=0,mh=0,nh=0,oh=0,ph=0,qh=0,rh=0,th=0,uh=0,vh=0,wh=0,xh=0,yh=0,zh=0,Ah=0,Bh=0,Ch=0,Eh=0,Gh=0,Hh=0,Ih=0,Jh=0,Kh=0,Lh=0,Mh=0,Nh=0,Oh=0,Ph=0,Qh=0,Rh=0,Sh=0,Th=0,Uh=0,Vh=0,Wh=0,Xh=0,Yh=0,Zh=0,$h=0,_h=0,ai=0,bi=0,ci=0,di=0,ei=0,fi=0,gi=0,hi=0,ii=0,ji=0,ki=0,li=0,mi=0,ni=0,oi=0,pi=0,qi=0,ri=0,si=0,ti=0,ui=0,wi=0,xi=0,yi=0,zi=0,Ai=0,Ci=0,Di=0,Ei=0,Fi=0,Gi=0,Hi=0,Ii=0,Ki=0,Mi=0,Ni=0,Oi=0,Qi=0;Qi=o,o=o+560|0,(0|o)>=(0|p)&&ca(560),Lh=Qi+8|0,Wh=Qi,fi=Qi+524|0,qi=fi,vb=Qi+512|0,f[Wh>>2]=0,Gb=vb+12|0,zv(b),Rb=G,ac=(0|Rb)<0,ac?(lc=-b,y=lc,M=1,N=70736):(wc=2048&g,Hc=0==(0|wc),Sc=1&g,bd=0==(0|Sc),i=bd?70737:70742,j=Hc?i:70739,md=2049&g,Ci=0!=(0|md),Oa=1&Ci,y=b,M=Oa,N=j),zv(y),xd=G,Id=2146435072&xd,Td=Id>>>0<2146435072,ce=!1,ne=2146435072==(0|Id),ye=ne&ce,Je=Td|ye;do{if(Je){if(Bg=+Av(y,Wh),Mg=2*Bg,Xg=0!=Mg,Xg&&(gh=0|f[Wh>>2],qh=gh+-1|0,f[Wh>>2]=qh),rh=32|h,97==(0|rh)){th=32&h,uh=0==(0|th),vh=N+9|0,O=uh?N:vh,wh=2|M,xh=e>>>0>11,yh=12-e|0,zh=0==(0|yh),Ah=xh|zh;do{if(!Ah){for(I=8,fa=yh;;){if(Bh=fa+-1|0,Ch=16*I,0==(0|Bh))break;I=Ch,fa=Bh}if(Eh=0|d[O>>0],Eh<<24>>24==45){Gh=-Mg,Hh=Gh-Ch,Ih=Ch+Hh,Jh=-Ih,Z=Jh;break}Kh=Mg+Ch,Mh=Kh-Ch,Z=Mh;break}Z=Mg}while(0);for(Nh=0|f[Wh>>2],Oh=(0|Nh)<0,Ph=0-Nh|0,Qh=Oh?Ph:Nh,Rh=(0|Qh)<0,Sh=Rh<<31>>31,Th=0|tv(Qh,Sh,Gb),Uh=(0|Th)==(0|Gb),Uh?(Vh=vb+11|0,d[Vh>>0]=48,K=Vh):K=Th,Xh=Nh>>31,Yh=2&Xh,Zh=Yh+43|0,$h=255&Zh,_h=K+-1|0,d[_h>>0]=$h,ai=h+15|0,bi=255&ai,ci=K+-2|0,d[ci>>0]=bi,Fi=(0|e)<1,di=8&g,ei=0==(0|di),P=fi,qa=Z;;){if(gi=~~qa,hi=70767+gi|0,ii=0|d[hi>>0],ji=255&ii,ki=ji|th,li=255&ki,mi=P+1|0,d[P>>0]=li,ni=+(0|gi),oi=qa-ni,pi=16*oi,ri=mi,si=ri-qi|0,ti=1==(0|si),ti?(Ei=0==pi,Hi=Fi&Ei,Gi=ei&Hi,Gi?ja=mi:(ui=P+2|0,d[mi>>0]=46,ja=ui)):ja=mi,!(0!=pi))break;P=ja,qa=pi}wi=0!=(0|e),xi=ci,yi=Gb,zi=ja,Ai=zi-qi|0,wb=yi-xi|0,xb=Ai+-2|0,yb=(0|xb)<(0|e),Ii=wi&yb,zb=e+2|0,lb=Ii?zb:Ai,Q=wb+wh|0,Ab=Q+lb|0,wv(a,32,c,Ab,g),ov(a,O,wh),Bb=65536^g,wv(a,48,c,Ab,Bb),ov(a,fi,Ai),Cb=lb-Ai|0,wv(a,48,Cb,0,0),ov(a,ci,wb),Db=8192^g,wv(a,32,c,Ab,Db),ub=Ab;break}for(Eb=(0|e)<0,Pa=Eb?6:e,Xg?(Fb=268435456*Mg,Hb=0|f[Wh>>2],Ib=Hb+-28|0,f[Wh>>2]=Ib,Aa=Fb,nb=Ib):(pb=0|f[Wh>>2],Aa=Mg,nb=pb),Jb=(0|nb)<0,Kb=Lh+288|0,Za=Jb?Lh:Kb,H=Za,Ha=Aa;;){if(Lb=~~Ha>>>0,f[H>>2]=Lb,Mb=H+4|0,Nb=+(Lb>>>0),Ob=Ha-Nb,Pb=1e9*Ob,!(0!=Pb))break;H=Mb,Ha=Pb}if((0|nb)>0)for(aa=Za,ea=Mb,Ub=nb;;){if(Tb=(0|Ub)<29,Vb=Tb?Ub:29,C=ea+-4|0,C>>>0<aa>>>0)ua=aa;else{for(D=C,F=0;;){if(Xb=0|f[D>>2],Yb=0|Sw(0|Xb,0,0|Vb),Zb=G,$b=0|Nw(0|Yb,0|Zb,0|F,0),_b=G,bc=0|ax(0|$b,0|_b,1e9,0),G,f[D>>2]=bc,dc=0|Ww(0|$b,0|_b,1e9,0),G,B=D+-4|0,B>>>0<aa>>>0)break;D=B,F=dc}gc=0==(0|dc),gc?ua=aa:(hc=aa+-4|0,f[hc>>2]=dc,ua=hc)}for(va=ea;;){if(!(va>>>0>ua>>>0))break;if(jc=va+-4|0,kc=0|f[jc>>2],!(0==(0|kc)))break;va=jc}if(nc=0|f[Wh>>2],oc=nc-Vb|0,f[Wh>>2]=oc,!((0|oc)>0)){_=ua,da=va,ob=oc;break}aa=ua,ea=va,Ub=oc}else _=Za,da=Mb,ob=nb;if((0|ob)<0)for(rc=Pa+25|0,sc=(0|rc)/9&-1,tc=sc+1|0,uc=102==(0|rh),Da=_,Fa=da,xc=ob;;){if(vc=0-xc|0,yc=(0|vc)<9,zc=yc?vc:9,Da>>>0<Fa>>>0){for(Ec=1<<zc,Fc=Ec+-1|0,Gc=1e9>>>zc,A=0,ba=Da;;){if(Ic=0|f[ba>>2],Jc=Ic&Fc,Kc=Ic>>>zc,Lc=Kc+A|0,f[ba>>2]=Lc,Mc=0|V(Jc,Gc),Nc=ba+4|0,!(Nc>>>0<Fa>>>0))break;A=Mc,ba=Nc}Pc=0|f[Da>>2],Qc=0==(0|Pc),Rc=Da+4|0,l=Qc?Rc:Da,Tc=0==(0|Mc),Tc?(n=l,La=Fa):(Uc=Fa+4|0,f[Fa>>2]=Mc,n=l,La=Uc)}else Bc=0|f[Da>>2],Cc=0==(0|Bc),Dc=Da+4|0,m=Cc?Dc:Da,n=m,La=Fa;if(Vc=uc?Za:n,Wc=La,Xc=Vc,Yc=Wc-Xc|0,Zc=Yc>>2,$c=(0|Zc)>(0|tc),_c=Vc+(tc<<2)|0,r=$c?_c:La,ad=0|f[Wh>>2],cd=ad+zc|0,f[Wh>>2]=cd,!((0|cd)<0)){Ca=n,Ea=r;break}Da=n,Fa=r,xc=cd}else Ca=_,Ea=da;if(ed=Ca>>>0<Ea>>>0,fd=Za,ed)if(gd=Ca,hd=fd-gd|0,id=hd>>2,jd=9*id|0,kd=0|f[Ca>>2],kd>>>0<10)ia=jd;else for(L=jd,U=10;;){if(nd=10*U|0,od=L+1|0,kd>>>0<nd>>>0){ia=od;break}L=od,U=nd}else ia=0;if(qd=102!=(0|rh),rd=qd?ia:0,sd=Pa-rd|0,td=103==(0|rh),ud=0!=(0|Pa),vd=ud&td,jb=vd<<31>>31,wd=sd+jb|0,yd=Ea,zd=yd-fd|0,Ad=zd>>2,Bd=9*Ad|0,Cd=Bd+-9|0,(0|wd)<(0|Cd)){if(Ed=Za+4|0,Fd=wd+9216|0,Gd=(0|Fd)/9&-1,Hd=Gd+-1024|0,Jd=Ed+(Hd<<2)|0,Kd=(0|Fd)%9&-1,S=Kd+1|0,(0|S)<9)for(T=S,na=10;;){if(Md=10*na|0,R=T+1|0,9==(0|R)){ma=Md;break}T=R,na=Md}else ma=10;if(Nd=0|f[Jd>>2],Od=(Nd>>>0)%(ma>>>0)&-1,Pd=0==(0|Od),Qd=Jd+4|0,Rd=(0|Qd)==(0|Ea),Rd&Pd)Ka=Jd,Ma=ia,gb=Ca;else if(Sd=(Nd>>>0)/(ma>>>0)&-1,Ud=1&Sd,Vd=0==(0|Ud),Ra=Vd?9007199254740992:9007199254740994,Wd=(0|ma)/2&-1,Xd=Od>>>0<Wd>>>0,Yd=(0|Od)==(0|Wd),Ki=Rd&Yd,$a=Ki?1:1.5,t=Xd?.5:$a,Zd=0==(0|M),Zd?(X=t,Y=Ra):($d=0|d[N>>0],_d=$d<<24>>24==45,ae=-Ra,be=-t,s=_d?ae:Ra,k=_d?be:t,X=k,Y=s),de=Nd-Od|0,f[Jd>>2]=de,ee=Y+X,ee!=Y){if(ge=de+ma|0,f[Jd>>2]=ge,ge>>>0>999999999)for(Va=Ca,tb=Jd;;){if(ie=tb+-4|0,f[tb>>2]=0,je=ie>>>0<Va>>>0,je?(ke=Va+-4|0,f[ke>>2]=0,ab=ke):ab=Va,le=0|f[ie>>2],me=le+1|0,f[ie>>2]=me,!(me>>>0>999999999)){Ua=ab,sb=ie;break}Va=ab,tb=ie}else Ua=Ca,sb=Jd;if(pe=Ua,qe=fd-pe|0,re=qe>>2,se=9*re|0,te=0|f[Ua>>2],te>>>0<10)Ka=sb,Ma=se,gb=Ua;else for(xa=se,za=10;;){if(ve=10*za|0,we=xa+1|0,te>>>0<ve>>>0){Ka=sb,Ma=we,gb=Ua;break}xa=we,za=ve}}else Ka=Jd,Ma=ia,gb=Ca;ze=Ka+4|0,Ae=Ea>>>0>ze>>>0,q=Ae?ze:Ea,Xa=Ma,fb=q,hb=gb}else Xa=ia,fb=Ea,hb=Ca;for(db=fb;;){if(!(db>>>0>hb>>>0)){ib=0;break}if(Ce=db+-4|0,De=0|f[Ce>>2],!(0==(0|De))){ib=1;break}db=Ce}Fe=0-Xa|0;do{if(td){if(Di=1^ud,Ge=1&Di,Qa=Ge+Pa|0,He=(0|Qa)>(0|Xa),Ie=(0|Xa)>-5,Mi=He&Ie,Mi?(Ke=h+-1|0,kb=Qa+-1|0,Le=kb-Xa|0,z=Ke,ra=Le):(Me=h+-2|0,Ne=Qa+-1|0,z=Me,ra=Ne),Oe=8&g,0==(0|Oe)){if(ib)if(Qe=db+-4|0,Re=0|f[Qe>>2],0==(0|Re))ya=9;else if(Te=(Re>>>0)%10&-1,0==(0|Te))for(la=0,Ga=10;;){if(We=10*Ga|0,Xe=la+1|0,Ye=(Re>>>0)%(We>>>0)&-1,!(0==(0|Ye))){ya=Xe;break}la=Xe,Ga=We}else ya=0;else ya=9;if($e=32|z,_e=102==(0|$e),af=db,bf=af-fd|0,cf=bf>>2,ef=9*cf|0,ff=ef+-9|0,_e){gf=ff-ya|0,hf=(0|gf)>0,Sa=hf?gf:0,jf=(0|ra)<(0|Sa),sa=jf?ra:Sa,$=z,Ba=sa,qb=0;break}kf=ff+Xa|0,lf=kf-ya|0,mf=(0|lf)>0,Ta=mf?lf:0,nf=(0|ra)<(0|Ta),ta=nf?ra:Ta,$=z,Ba=ta,qb=0;break}$=z,Ba=ra,qb=Oe}else rb=8&g,$=h,Ba=Pa,qb=rb}while(0);if(of=Ba|qb,qf=0!=(0|of),rf=1&qf,sf=32|$,tf=102==(0|sf))uf=(0|Xa)>0,vf=uf?Xa:0,wa=0,mb=vf;else{if(wf=(0|Xa)<0,xf=wf?Fe:Xa,yf=(0|xf)<0,zf=yf<<31>>31,Bf=0|tv(xf,zf,Gb),Cf=Gb,Df=Bf,Ef=Cf-Df|0,(0|Ef)<2)for(ha=Bf;;){if(Gf=ha+-1|0,d[Gf>>0]=48,Hf=Gf,If=Cf-Hf|0,!((0|If)<2)){ga=Gf;break}ha=Gf}else ga=Bf;Kf=Xa>>31,Mf=2&Kf,Nf=Mf+43|0,Of=255&Nf,Pf=ga+-1|0,d[Pf>>0]=Of,Qf=255&$,Rf=ga+-2|0,d[Rf>>0]=Qf,Sf=Rf,Tf=Cf-Sf|0,wa=Rf,mb=Tf}if(Uf=M+1|0,Vf=Uf+Ba|0,ka=Vf+rf|0,Xf=ka+mb|0,wv(a,32,c,Xf,g),ov(a,N,M),Yf=65536^g,wv(a,48,c,Xf,Yf),tf){for(Zf=hb>>>0>Za>>>0,E=Zf?Za:hb,$f=fi+9|0,_f=$f,ag=fi+8|0,Wa=E;;){if(bg=0|f[Wa>>2],cg=0|tv(bg,0,$f),(0|Wa)==(0|E))kg=(0|cg)==(0|$f),kg?(d[ag>>0]=48,W=ag):W=cg;else if(cg>>>0>fi>>>0)for(gg=cg,hg=gg-qi|0,Ow(0|fi,48,0|hg),x=cg;;){if(ig=x+-1|0,!(ig>>>0>fi>>>0)){W=ig;break}x=ig}else W=cg;if(lg=W,mg=_f-lg|0,ov(a,W,mg),ng=Wa+4|0,ng>>>0>Za>>>0)break;Wa=ng}if(pg=0==(0|of),pg||ov(a,70783,1),rg=ng>>>0<db>>>0,sg=(0|Ba)>0,rg&sg)for(Ja=Ba,bb=ng;;){if(ug=0|f[bb>>2],vg=0|tv(ug,0,$f),vg>>>0>fi>>>0)for(xg=vg,yg=xg-qi|0,Ow(0|fi,48,0|yg),w=vg;;){if(zg=w+-1|0,!(zg>>>0>fi>>>0)){v=zg;break}w=zg}else v=vg;if(Cg=(0|Ja)<9,Dg=Cg?Ja:9,ov(a,v,Dg),Eg=bb+4|0,Fg=Ja+-9|0,Gg=Eg>>>0<db>>>0,Hg=(0|Ja)>9,!(Gg&Hg)){Ia=Fg;break}Ja=Fg,bb=Eg}else Ia=Ba;Jg=Ia+9|0,wv(a,48,Jg,9,0)}else{if(Kg=hb+4|0,eb=ib?db:Kg,(0|Ba)>-1)for(Ng=fi+9|0,Og=0==(0|qb),Pg=Ng,Qg=0-qi|0,Rg=fi+8|0,_a=Ba,cb=hb;;){Sg=0|f[cb>>2],Tg=0|tv(Sg,0,Ng),Ug=(0|Tg)==(0|Ng),Ug?(d[Rg>>0]=48,u=Rg):u=Tg,Vg=(0|cb)==(0|hb);do{if(Vg){if($g=u+1|0,ov(a,u,1),_g=(0|_a)<1,Og&_g){pa=$g;break}ov(a,70783,1),pa=$g}else{if(!(u>>>0>fi>>>0)){pa=u;break}for(Ni=u+Qg|0,Oi=Ni,Ow(0|fi,48,0|Oi),oa=u;;){if(Yg=oa+-1|0,!(Yg>>>0>fi>>>0)){pa=Yg;break}oa=Yg}}}while(0);if(ah=pa,bh=Pg-ah|0,ch=(0|_a)>(0|bh),dh=ch?bh:_a,ov(a,pa,dh),eh=_a-bh|0,fh=cb+4|0,hh=fh>>>0<eb>>>0,ih=(0|eh)>-1,!(hh&ih)){Na=eh;break}_a=eh,cb=fh}else Na=Ba;kh=Na+18|0,wv(a,48,kh,18,0),lh=Gb,mh=wa,nh=lh-mh|0,ov(a,wa,nh)}oh=8192^g,wv(a,32,c,Xf,oh),ub=Xf}else Ue=32&h,df=0!=(0|Ue),pf=df?70755:70759,Af=y!=y|!1,Lf=df?72686:70763,J=Af?Lf:pf,Wf=M+3|0,fg=-65537&g,wv(a,32,c,Wf,fg),ov(a,N,M),ov(a,J,3),qg=8192^g,wv(a,32,c,Wf,qg),ub=Wf}while(0);return ph=(0|ub)<(0|c),Ya=ph?c:ub,o=Qi,0|Ya}function zv(a){a=+a;var b=0,c=0;return o,k[m>>3]=a,b=0|f[m>>2],c=0|f[m+4>>2],G=c,0|b}function Av(a,b){a=+a,b|=0;return o,+ +Bv(a,b)}function Bv(a,b){a=+a,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,l=0,n=0,p=0,q=0,r=0,t=0,u=0,v=0,w=0,x=0;switch(o,k[m>>3]=a,p=0|f[m>>2],q=0|f[m+4>>2],r=0|Pw(0|p,0|q,52),G,t=65535&r,(2047&t)<<16>>16){case 0:u=0!=a,u?(v=0x10000000000000000*a,w=+Bv(v,b),e=0|f[b>>2],g=e+-64|0,d=w,x=g):(d=a,x=0),f[b>>2]=x,c=d;break;case 2047:c=a;break;default:h=2047&r,i=h+-1022|0,f[b>>2]=i,j=-2146435073&q,l=1071644672|j,f[m>>2]=p,f[m+4>>2]=l,n=+k[m>>3],c=n}return+c}function Cv(a,b,c){a|=0,b|=0,c|=0;var e=0,g=0,i=0,j=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0;B=0==(0|a);do{if(!B){if(b>>>0<128){X=255&b,d[a>>0]=X,e=1;break}if(da=0|Dv(),ea=da+188|0,fa=0|f[ea>>2],ga=0|f[fa>>2],0==(0|ga)){if(g=-128&b,57216==(0|g)){j=255&b,d[a>>0]=j,e=1;break}i=0|Ru(),f[i>>2]=84,e=-1;break}if(b>>>0<2048){l=b>>>6,m=192|l,n=255&m,p=a+1|0,d[a>>0]=n,q=63&b,r=128|q,s=255&r,d[p>>0]=s,e=2;break}if(t=b>>>0<55296,u=-8192&b,v=57344==(0|u),t|v){w=b>>>12,x=224|w,y=255&x,z=a+1|0,d[a>>0]=y,A=b>>>6,C=63&A,D=128|C,E=255&D,F=a+2|0,d[z>>0]=E,G=63&b,H=128|G,I=255&H,d[F>>0]=I,e=3;break}if(J=b+-65536|0,J>>>0<1048576){L=b>>>18,N=240|L,O=255&N,P=a+1|0,d[a>>0]=O,Q=b>>>12,R=63&Q,S=128|R,T=255&S,U=a+2|0,d[P>>0]=T,V=b>>>6,W=63&V,Y=128|W,Z=255&Y,$=a+3|0,d[U>>0]=Z,_=63&b,aa=128|_,ba=255&aa,d[$>>0]=ba,e=4;break}ca=0|Ru(),f[ca>>2]=84,e=-1;break}e=1}while(0);return 0|e}function Dv(){return o,0|(0|Tu())}function Ev(){return o,0|(0|Tu())}function Fv(a,b){a|=0,b|=0;var c=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,n=0,p=0,r=0,s=0,t=0,u=0,w=0,y=0,z=0;for(o,g=0;;){if(s=70785+g|0,t=0|d[s>>0],u=255&t,(0|u)==(0|a)){z=2;break}if(w=g+1|0,87==(0|w)){e=70873,i=87,z=5;break}g=w}if(2==(0|z)&&(r=0==(0|g),r?c=70873:(e=70873,i=g,z=5)),5==(0|z))for(;;){for(z=0,h=e;;){if(y=0|d[h>>0],j=y<<24>>24==0,k=h+1|0,j)break;h=k}if(l=i+-1|0,0==(0|l)){c=k;break}e=k,i=l,z=5}return n=b+20|0,p=0|f[n>>2],0|(0|Gv(c,p))}function Gv(a,b){a|=0,b|=0;return o,0|(0|Hv(a,b))}function Hv(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0;return o,d=0==(0|b),d?c=0:(e=0|f[b>>2],g=b+4|0,h=0|f[g>>2],i=0|Iv(e,h,a),c=i),j=0!=(0|c),0|(j?c:a)}function Iv(a,b,c){a|=0,b|=0,c|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,V=0,W=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,wa=0;G=0|f[a>>2],R=G+1794895138|0,aa=a+8|0,la=0|f[aa>>2],ra=0|Jv(la,R),sa=a+12|0,ta=0|f[sa>>2],l=0|Jv(ta,R),m=a+16|0,n=0|f[m>>2],p=0|Jv(n,R),q=b>>>2,r=ra>>>0<q>>>0;a:if(r)if(s=ra<<2,t=b-s|0,u=l>>>0<t>>>0,v=p>>>0<t>>>0,u&v)if(w=p|l,x=3&w,0==(0|x)){for(z=l>>>2,A=p>>>2,g=0,h=ra;;){if(B=h>>>1,C=g+B|0,D=C<<1,E=D+z|0,F=a+(E<<2)|0,H=0|f[F>>2],I=0|Jv(H,R),J=E+1|0,K=a+(J<<2)|0,L=0|f[K>>2],M=0|Jv(L,R),N=M>>>0<b>>>0,O=b-M|0,P=I>>>0<O>>>0,!(N&P)){k=0;break a}if(Q=M+I|0,S=a+Q|0,T=0|d[S>>0],!(T<<24>>24==0)){k=0;break a}if(V=a+M|0,W=0|gv(c,V),0==(0|W))break;if(oa=1==(0|h),pa=(0|W)<0,qa=h-B|0,j=pa?B:qa,i=pa?g:C,oa){k=0;break a}g=i,h=j}Y=D+A|0,Z=a+(Y<<2)|0,$=0|f[Z>>2],_=0|Jv($,R),ba=Y+1|0,ca=a+(ba<<2)|0,da=0|f[ca>>2],ea=0|Jv(da,R),fa=ea>>>0<b>>>0,ga=b-ea|0,ha=_>>>0<ga>>>0,wa=fa&ha,wa?(ia=a+ea|0,ja=ea+_|0,ka=a+ja|0,ma=0|d[ka>>0],na=ma<<24>>24==0,e=na?ia:0,k=e):k=0}else k=0;else k=0;else k=0;return 0|k}function Jv(a,b){a|=0,b|=0;var d=0,e=0;return o,d=0==(0|b),e=0|Tw(0|a),0|(d?a:e)}function Kv(a,b,c){a|=0,b|=0,c|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,A=0,B=0,C=0,E=0,F=0,G=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0;I=c+16|0,O=0|f[I>>2],P=0==(0|O),P?(R=0|Lv(c),S=0==(0|R),S?(l=0|f[I>>2],q=l,U=5):h=0):(Q=O,q=Q,U=5);a:do{if(5==(0|U)){if(T=c+20|0,n=0|f[T>>2],p=q-n|0,r=p>>>0<b>>>0,s=n,r){t=c+36|0,u=0|f[t>>2],v=0|yx[511&u](c,a,b),h=v;break}w=c+75|0,x=0|d[w>>0],y=x<<24>>24>-1;b:if(y){for(e=b;;){if(0==(0|e)){i=0,j=a,k=b,K=s;break b}if(A=e+-1|0,B=a+A|0,C=0|d[B>>0],C<<24>>24==10)break;e=A}if(E=c+36|0,F=0|f[E>>2],G=0|yx[511&F](c,a,e),G>>>0<e>>>0){h=G;break a}J=a+e|0,g=b-e|0,m=0|f[T>>2],i=e,j=J,k=g,K=m}else i=0,j=a,k=b,K=s;$w(0|K,0|j,0|k),L=0|f[T>>2],M=L+k|0,f[T>>2]=M,N=i+k|0,h=N}}while(0);return 0|h}function Lv(a){a|=0;var b=0,c=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;return o,c=a+74|0,q=0|d[c>>0],s=q<<24>>24,t=s+255|0,u=t|s,v=255&u,d[c>>0]=v,w=0|f[a>>2],x=8&w,y=0==(0|x),y?(g=a+8|0,f[g>>2]=0,h=a+4|0,f[h>>2]=0,i=a+44|0,j=0|f[i>>2],k=a+28|0,f[k>>2]=j,l=a+20|0,f[l>>2]=j,m=a+48|0,n=0|f[m>>2],p=j+n|0,r=a+16|0,f[r>>2]=p,b=0):(e=32|w,f[a>>2]=e,b=-1),0|b}function Mv(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;return o,h=a+16|0,i=0|f[h>>2],j=a+20|0,k=0|f[j>>2],l=k,m=i-l|0,n=m>>>0>c>>>0,d=n?c:m,$w(0|k,0|b,0|d),e=0|f[j>>2],g=e+d|0,f[j>>2]=g,0|c}function Nv(a){a|=0;var b=0,c=0,e=0,f=0,g=0;return o,b=0|Ov(a),f=a+-48|0,e=f>>>0<10,g=0!=(0|b),c=e|g,0|1&c}function Ov(a){a|=0;var b=0,c=0,d=0;return o,b=32|a,c=b+-97|0,d=c>>>0<26,0|1&d}function Pv(a){a|=0;var b=0,c=0;return o,b=a+-48|0,c=b>>>0<10,0|1&c}function Qv(a,b,c){a|=0,b|=0,c|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,x=0,y=0,z=0,A=0,C=0,E=0,F=0,G=0,H=0,J=0,K=0,L=0,M=0,N=0,P=0,Q=0,R=0,S=0,T=0,U=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,ca=0,da=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Ea=0,Fa=0,Ga=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Pa=0,Qa=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,$a=0,_a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,kb=0,lb=0,mb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Db=0,Eb=0,Fb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,bc=0;switch(o,0|b){case 0:g=-149,h=24,bc=4;break;case 1:case 2:g=-1074,h=53,bc=4;break;default:l=0}a:if(4==(0|bc)){for(Ca=a+4|0,Na=a+100|0;;)if(Ya=0|f[Ca>>2],hb=0|f[Na>>2],sb=Ya>>>0<hb>>>0,sb?(Db=Ya+1|0,f[Ca>>2]=Db,Ob=0|d[Ya>>0],C=255&Ob,Y=C):(N=0|av(a),Y=N),ha=0|bv(Y),0==(0|ha))break;b:switch(0|Y){case 43:case 45:if(na=45==(0|Y),oa=1&na,pa=oa<<1,qa=1-pa|0,ra=0|f[Ca>>2],sa=0|f[Na>>2],ra>>>0<sa>>>0){ua=ra+1|0,f[Ca>>2]=ua,va=0|d[ra>>0],wa=255&va,e=wa,k=qa;break b}xa=0|av(a),e=xa,k=qa;break b;default:e=Y,k=1}for(j=0,p=e;;){if(ya=32|p,za=72677+j|0,Aa=0|d[za>>0],Ba=Aa<<24>>24,!((0|ya)==(0|Ba))){i=j,m=p;break}Ea=j>>>0<7;do{if(Ea){if(Fa=0|f[Ca>>2],Ga=0|f[Na>>2],Fa>>>0<Ga>>>0){Ia=Fa+1|0,f[Ca>>2]=Ia,Ja=0|d[Fa>>0],Ka=255&Ja,q=Ka;break}La=0|av(a),q=La;break}q=p}while(0);if(Ma=j+1|0,!(Ma>>>0<8)){i=Ma,m=q;break}j=Ma,p=q}b:switch(0|i){case 8:break;case 3:bc=23;break;default:if(Pa=i>>>0>3,Qa=0!=(0|c),Qa&Pa){if(8==(0|i))break b;bc=23;break b}db=0==(0|i);c:if(db)for(r=0,t=m;;){if(eb=32|t,fb=72686+r|0,gb=0|d[fb>>0],ib=gb<<24>>24,!((0|eb)==(0|ib))){s=r,y=t;break c}kb=r>>>0<2;do{if(kb){if(lb=0|f[Ca>>2],mb=0|f[Na>>2],lb>>>0<mb>>>0){ob=lb+1|0,f[Ca>>2]=ob,pb=0|d[lb>>0],qb=255&pb,u=qb;break}rb=0|av(a),u=rb;break}u=t}while(0);if(tb=r+1|0,!(tb>>>0<3)){s=tb,y=u;break}r=tb,t=u}else s=i,y=m;switch(0|s){case 3:if(vb=0|f[Ca>>2],wb=0|f[Na>>2],xb=vb>>>0<wb>>>0,xb?(yb=vb+1|0,f[Ca>>2]=yb,zb=0|d[vb>>0],Ab=255&zb,Eb=Ab):(Bb=0|av(a),Eb=Bb),!(40==(0|Eb))){if(Fb=0|f[Na>>2],0==(0|Fb)){l=v;break a}Hb=0|f[Ca>>2],Ib=Hb+-1|0,f[Ca>>2]=Ib,l=v;break a}for(x=1;;){if(Jb=0|f[Ca>>2],Kb=0|f[Na>>2],Lb=Jb>>>0<Kb>>>0,Lb?(Mb=Jb+1|0,f[Ca>>2]=Mb,Nb=0|d[Jb>>0],Pb=255&Nb,Sb=Pb):(Qb=0|av(a),Sb=Qb),Rb=Sb+-48|0,Tb=Rb>>>0<10,Ub=Sb+-65|0,Vb=Ub>>>0<26,!(Tb|Vb||(Wb=Sb+-97|0,Xb=Wb>>>0<26,Yb=95==(0|Sb),Yb|Xb)))break;P=x+1|0,x=P}if(41==(0|Sb)){l=v;break a}if(E=0|f[Na>>2],F=0==(0|E),F||(G=0|f[Ca>>2],H=G+-1|0,f[Ca>>2]=H),!Qa){J=0|Ru(),f[J>>2]=22,$u(a,0),l=0;break a}if(0==(0|x)){l=v;break a}for(A=x;;){if(K=A+-1|0,F||(L=0|f[Ca>>2],M=L+-1|0,f[Ca>>2]=M),0==(0|K)){l=v;break a}A=K}break;case 0:if(48==(0|y)){if(W=0|f[Ca>>2],X=0|f[Na>>2],Z=W>>>0<X>>>0,Z?($=W+1|0,f[Ca>>2]=$,_=0|d[W>>0],aa=255&_,da=aa):(ba=0|av(a),da=ba),ca=32|da,120==(0|ca)){fa=+Rv(a,h,g,k,c),l=fa;break a}ga=0|f[Na>>2],ia=0==(0|ga),ia?z=48:(ja=0|f[Ca>>2],ka=ja+-1|0,f[Ca>>2]=ka,z=48)}else z=y;la=+Sv(a,z,h,g,k,c),l=la;break a;default:Q=0|f[Na>>2],R=0==(0|Q),R||(S=0|f[Ca>>2],T=S+-1|0,f[Ca>>2]=T),U=0|Ru(),f[U>>2]=22,$u(a,0),l=0;break a}}if(23==(0|bc)&&(Sa=0|f[Na>>2],Ta=0==(0|Sa),Ta||(Ua=0|f[Ca>>2],Va=Ua+-1|0,f[Ca>>2]=Va),Wa=0!=(0|c),Xa=i>>>0>3,Wa&Xa))for(n=i;;){if(Ta||(Za=0|f[Ca>>2],$a=Za+-1|0,f[Ca>>2]=$a),_a=n+-1|0,!(_a>>>0>3))break;n=_a}ab=+(0|k),bb=ab*w,cb=bb,l=cb}return+l}function Rv(a,b,c,e,g){a|=0,b|=0,c|=0,e|=0,g|=0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,ca=0,da=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,qa=0,sa=0,ta=0,ua=0,va=0,wa=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,$a=0,_a=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,$b=0,_b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,yc=0,Ac=0,Bc=0,Cc=0,Dc=0,Ec=0,Fc=0,Gc=0,Hc=0,Ic=0,Jc=0,Kc=0,Mc=0,Nc=0,Oc=0,Pc=0,Qc=0,Rc=0,Sc=0,Uc=0,Vc=0,Wc=0,Xc=0,Yc=0,Zc=0,$c=0,_c=0,ad=0,bd=0,cd=0,dd=0,ed=0,fd=0,gd=0,hd=0,id=0,jd=0,ld=0,md=0,nd=0,od=0,pd=0,qd=0,rd=0,sd=0,td=0,ud=0,vd=0,wd=0,xd=0,yd=0,zd=0,Ad=0,Bd=0,Cd=0,Dd=0,Ed=0,Fd=0,Gd=0,Hd=0,Id=0,Jd=0,Kd=0,Ld=0,Md=0,Nd=0,Od=0,Pd=0,Qd=0,Rd=0,Sd=0,Td=0,Ud=0,Vd=0,Wd=0,Xd=0,Yd=0,$d=0,ae=0;Vc=a+4|0,ed=0|f[Vc>>2],pd=a+100|0,Ad=0|f[pd>>2],Ld=ed>>>0<Ad>>>0,Ld?(Z=ed+1|0,f[Vc>>2]=Z,ia=0|d[ed>>0],ta=255&ia,h=ta,j=0):(Ea=0|av(a),h=Ea,j=0);a:for(;;){switch(0|h){case 46:ae=8;break a;case 48:break;default:k=0,l=0,p=1,q=0,s=0,D=h,F=j,_=0,Zc=0,_c=0,Vd=0;break a}Pa=0|f[Vc>>2],$a=0|f[pd>>2],jb=Pa>>>0<$a>>>0,jb?(ub=Pa+1|0,f[Vc>>2]=ub,Fb=0|d[Pa>>0],Qb=255&Fb,h=Qb,j=1):(_b=0|av(a),h=_b,j=1)}if(8==(0|ae))if(kc=0|f[Vc>>2],tc=0|f[pd>>2],uc=kc>>>0<tc>>>0,uc?(vc=kc+1|0,f[Vc>>2]=vc,wc=0|d[kc>>0],xc=255&wc,x=xc):(yc=0|av(a),x=yc),48==(0|x))for(Hc=0,Ic=0;;){if(Ac=0|f[Vc>>2],Bc=0|f[pd>>2],Cc=Ac>>>0<Bc>>>0,Cc?(Dc=Ac+1|0,f[Vc>>2]=Dc,Ec=0|d[Ac>>0],Fc=255&Ec,Mc=Fc):(Gc=0|av(a),Mc=Gc),Jc=0|Nw(0|Hc,0|Ic,-1,-1),Kc=G,!(48==(0|Mc))){k=1,l=0,p=1,q=0,s=0,D=Mc,F=1,_=Kc,Zc=0,_c=0,Vd=Jc;break}Hc=Jc,Ic=Kc}else k=1,l=0,p=1,q=0,s=0,D=x,F=j,_=0,Zc=0,_c=0,Vd=0;for(;;){if(Nc=D+-48|0,Oc=Nc>>>0<10,Pc=46==(0|D),!(Oc||(Qc=32|D,Rc=Qc+-97|0,Sc=Rc>>>0<6,Pc|Sc))){E=D;break}if(Pc){if(!(0==(0|k))){E=46;break}y=1,H=l,I=p,J=q,K=s,L=F,pc=_c,qc=Zc,rc=_c,sc=Zc}else{Uc=(0|D)>57,Wc=32|D,Xc=Wc+-87|0,i=Uc?Xc:Nc,Yc=(0|Zc)<0,$c=_c>>>0<8,ad=0==(0|Zc),bd=ad&$c,cd=Yc|bd;do{if(!cd){if(gd=(0|Zc)<0,hd=_c>>>0<14,id=0==(0|Zc),jd=id&hd,gd|jd){ld=+(0|i),md=.0625*p,nd=md*ld,od=q+nd,z=l,A=md,B=od,C=s;break}qd=0==(0|i),rd=0!=(0|l),Xd=rd|qd,sd=.5*p,td=q+sd,r=Xd?q:td,m=Xd?l:1,z=m,A=p,B=r,C=s;break}dd=s<<4,fd=i+dd|0,z=l,A=p,B=q,C=fd}while(0);ud=0|Nw(0|_c,0|Zc,1,0),vd=G,y=k,H=z,I=A,J=B,K=C,L=1,pc=Vd,qc=_,rc=ud,sc=vd}wd=0|f[Vc>>2],xd=0|f[pd>>2],yd=wd>>>0<xd>>>0,yd?(zd=wd+1|0,f[Vc>>2]=zd,Bd=0|d[wd>>0],Cd=255&Bd,k=y,l=H,p=I,q=J,s=K,D=Cd,F=L,_=qc,Zc=sc,_c=rc,Vd=pc):(Dd=0|av(a),k=y,l=H,p=I,q=J,s=K,D=Dd,F=L,_=qc,Zc=sc,_c=rc,Vd=pc)}Ed=0==(0|F);do{if(Ed)Fd=0|f[pd>>2],Gd=0!=(0|Fd),Gd&&(Hd=0|f[Vc>>2],Id=Hd+-1|0,f[Vc>>2]=Id),Jd=0==(0|g),Jd?$u(a,0):(Gd&&(Kd=0|f[Vc>>2],Md=Kd+-1|0,f[Vc>>2]=Md),Nd=0==(0|k),Od=0==(0|Fd),Nd|Od||(Pd=0|f[Vc>>2],Qd=Pd+-1|0,f[Vc>>2]=Qd)),Rd=+(0|e),Sd=0*Rd,t=Sd;else{if(Td=0==(0|k),Ud=Td?_c:Vd,$=Td?Zc:_,aa=(0|Zc)<0,ba=_c>>>0<8,ca=0==(0|Zc),da=ca&ba,aa|da)for(P=s,ga=_c,ha=Zc;;){if(fa=P<<4,ja=0|Nw(0|ga,0|ha,1,0),ka=G,la=(0|ka)<0,ma=ja>>>0<8,na=0==(0|ka),oa=na&ma,!(la|oa)){O=fa;break}P=fa,ga=ja,ha=ka}else O=s;if(qa=32|E,112==(0|qa))if(sa=0|Tv(a,g),ua=G,va=0==(0|sa),wa=-2147483648==(0|ua),va&wa){if(0==(0|g)){$u(a,0),t=0;break}za=0|f[pd>>2],Aa=0==(0|za),Aa?(Ma=0,Na=0):(Ba=0|f[Vc>>2],Ca=Ba+-1|0,f[Vc>>2]=Ca,Ma=0,Na=0)}else Ma=sa,Na=ua;else Da=0|f[pd>>2],Fa=0==(0|Da),Fa?(Ma=0,Na=0):(Ga=0|f[Vc>>2],Ha=Ga+-1|0,f[Vc>>2]=Ha,Ma=0,Na=0);if(Ia=0|Sw(0|Ud,0|$,2),Ja=G,Ka=0|Nw(0|Ia,0|Ja,-32,-1),La=G,Oa=0|Nw(0|Ka,0|La,0|Ma,0|Na),Qa=G,0==(0|O)){Sa=+(0|e),Ta=0*Sa,t=Ta;break}if(Ua=0-c|0,Va=(0|Ua)<0,Wa=Va<<31>>31,Xa=(0|Qa)>(0|Wa),Ya=Oa>>>0>Ua>>>0,Za=(0|Qa)==(0|Wa),_a=Za&Ya,Xa|_a){bb=0|Ru(),f[bb>>2]=34,cb=+(0|e),db=1.7976931348623157e308*cb,eb=1.7976931348623157e308*db,t=eb;break}if(fb=c+-106|0,gb=(0|fb)<0,hb=gb<<31>>31,ib=(0|Qa)<(0|hb),kb=Oa>>>0<fb>>>0,lb=(0|Qa)==(0|hb),mb=lb&kb,ib|mb){pb=0|Ru(),f[pb>>2]=34,qb=+(0|e),rb=2.2250738585072014e-308*qb,sb=2.2250738585072014e-308*rb,t=sb;break}if((0|O)>-1)for(N=q,S=O,yb=Oa,zb=Qa;;){if(tb=!(N>=.5),vb=S<<1,wb=N+-1,Wd=1^tb,xb=1&Wd,U=vb|xb,W=tb?N:wb,Q=N+W,Ab=0|Nw(0|yb,0|zb,-1,-1),Bb=G,!((0|U)>-1)){M=Q,R=U,Kb=Ab,Lb=Bb;break}N=Q,S=U,yb=Ab,zb=Bb}else M=q,R=O,Kb=Oa,Lb=Qa;Db=(0|b)<0,Eb=Db<<31>>31,Gb=(0|c)<0,Hb=Gb<<31>>31,Ib=0|Mw(32,0,0|c,0|Hb),Jb=G,Mb=0|Nw(0|Ib,0|Jb,0|Kb,0|Lb),Nb=G,Ob=(0|Eb)>(0|Nb),Pb=b>>>0>Mb>>>0,Rb=(0|Eb)==(0|Nb),Sb=Rb&Pb,Tb=Ob|Sb,Tb?(Ub=(0|Mb)>0,Ub?(u=Mb,ae=59):(w=0,Yb=84,ae=61)):(u=b,ae=59),59==(0|ae)&&(Vb=(0|u)<53,Wb=84-u|0,Vb?(w=u,Yb=Wb,ae=61):(X=+(0|e),n=0,v=u,Y=X)),61==(0|ae)&&(Xb=+(0|e),Zb=+Uv(1,Yb),$b=+Vv(Zb,Xb),n=$b,v=w,Y=Xb),ac=(0|v)<32,bc=0!=M,$d=bc&ac,cc=1&R,dc=0==(0|cc),Yd=dc&$d,ec=1&Yd,V=ec+R|0,T=Yd?0:M,fc=+(V>>>0),gc=Y*fc,hc=n+gc,ic=Y*T,jc=ic+hc,lc=jc-n,mc=0!=lc,mc||(nc=0|Ru(),f[nc>>2]=34),oc=+Xv(lc,Kb),t=oc}}while(0);return+t}function Sv(a,b,c,e,g,h){a|=0,b|=0,c|=0,e|=0,g|=0,h|=0;var i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,$a=0,_a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,$b=0,_b=0,bc=0,cc=0,dc=0,ec=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,xc=0,yc=0,zc=0,Ac=0,Bc=0,Cc=0,Dc=0,Ec=0,Fc=0,Gc=0,Hc=0,Ic=0,Jc=0,Kc=0,Lc=0,Mc=0,Nc=0,Oc=0,Pc=0,Qc=0,Rc=0,Sc=0,Tc=0,Vc=0,Wc=0,Xc=0,Yc=0,Zc=0,$c=0,_c=0,bd=0,cd=0,dd=0,ed=0,fd=0,gd=0,hd=0,id=0,jd=0,kd=0,ld=0,md=0,nd=0,od=0,qd=0,rd=0,sd=0,td=0,ud=0,vd=0,wd=0,xd=0,yd=0,zd=0,Bd=0,Cd=0,Dd=0,Ed=0,Fd=0,Gd=0,Hd=0,Id=0,Jd=0,Kd=0,Ld=0,Md=0,Nd=0,Od=0,Qd=0,Rd=0,Td=0,Ud=0,Vd=0,Wd=0,Xd=0,Yd=0,Zd=0,_d=0,be=0,ce=0,de=0,ee=0,fe=0,ge=0,he=0,ie=0,je=0,ke=0,le=0,me=0,ne=0,oe=0,pe=0,qe=0,se=0,te=0,ue=0,ve=0,we=0,ze=0,Be=0,Ce=0,De=0,Fe=0,Ge=0,He=0,Ie=0,Je=0,Ke=0,Le=0,Me=0,Ne=0,Oe=0,Pe=0,Qe=0,Re=0,Se=0,Te=0,Ue=0,Ve=0,We=0,$e=0,_e=0,af=0,bf=0,cf=0,df=0,ef=0,ff=0,gf=0,hf=0,jf=0,kf=0,lf=0,mf=0,nf=0,of=0,pf=0,qf=0,rf=0,sf=0,tf=0,uf=0,vf=0,wf=0,xf=0,yf=0,zf=0,Af=0,Bf=0,Cf=0,Df=0,Ef=0,Ff=0,Gf=0,Hf=0,If=0,Jf=0,Kf=0,Lf=0,Mf=0,Nf=0,Of=0,Pf=0,Rf=0,Sf=0,Tf=0,Uf=0,Wf=0,Xf=0,Zf=0,$f=0,ag=0,bg=0,cg=0,dg=0,eg=0,gg=0,hg=0,ig=0,jg=0,kg=0,lg=0,mg=0,ng=0,og=0,pg=0,qg=0,rg=0,sg=0,tg=0,ug=0,vg=0,wg=0,xg=0,yg=0,Ag=0,Cg=0,Dg=0,Eg=0,Fg=0,Gg=0,Hg=0,Ig=0,Jg=0,Kg=0,Lg=0,Mg=0,Ng=0,Og=0,Pg=0,Qg=0,Rg=0,Sg=0,Tg=0,Ug=0,Vg=0,Wg=0,Xg=0,Yg=0,Zg=0,$g=0,_g=0,ah=0,bh=0,ch=0,dh=0,eh=0,fh=0,gh=0,hh=0,ih=0,jh=0,kh=0,lh=0,mh=0,nh=0,oh=0,ph=0,qh=0,rh=0,sh=0,th=0,uh=0,vh=0,wh=0,xh=0,yh=0,zh=0,Ah=0,Bh=0,Ch=0,Dh=0,Eh=0,Gh=0,Hh=0,Ih=0,Jh=0,Kh=0,Lh=0,Mh=0,Nh=0,Oh=0,Ph=0,Qh=0,Rh=0,Sh=0,Th=0,Uh=0,Vh=0,Yh=0,Zh=0,$h=0,_h=0,ai=0,bi=0,ci=0,di=0,ei=0,gi=0,hi=0,ii=0,ji=0,ki=0,oi=0,pi=0,wi=0,xi=0,yi=0,zi=0,Ai=0,Ci=0,Di=0,Ei=0;Ei=o,o=o+512|0,(0|o)>=(0|p)&&ca(512),vh=Ei,Ci=e+c|0,Gh=0-Ci|0,Rh=a+4|0,ai=a+100|0,r=b,U=0;a:for(;;){switch(0|r){case 46:Di=6;break a;case 48:break;default:T=0,pa=r,ya=U,Gg=0,Hg=0;break a}ib=0|f[Rh>>2],tb=0|f[ai>>2],Eb=ib>>>0<tb>>>0,Eb?(Pb=ib+1|0,f[Rh>>2]=Pb,$b=0|d[ib>>0],jc=255&$b,r=jc,U=1):(uc=0|av(a),r=uc,U=1)}if(6==(0|Di))if(Fc=0|f[Rh>>2],Qc=0|f[ai>>2],_c=Fc>>>0<Qc>>>0,_c?(kd=Fc+1|0,f[Rh>>2]=kd,vd=0|d[Fc>>0],Gd=255&vd,da=Gd):(Rd=0|av(a),da=Rd),48==(0|da))for(le=0,we=0;;){if(He=0|Nw(0|le,0|we,-1,-1),Se=G,bf=0|f[Rh>>2],nf=0|f[ai>>2],yf=bf>>>0<nf>>>0,yf?(Jf=bf+1|0,f[Rh>>2]=Jf,Uf=0|d[bf>>0],dg=255&Uf,ba=dg):(og=0|av(a),ba=og),!(48==(0|ba))){T=1,pa=ba,ya=1,Gg=He,Hg=Se;break}le=He,we=Se}else T=1,pa=da,ya=U,Gg=0,Hg=0;f[vh>>2]=0,Kg=pa+-48|0,Vg=Kg>>>0<10,ah=46==(0|pa),bh=ah|Vg;a:if(bh){ch=vh+496|0,B=0,H=0,$=0,oa=T,Ja=ya,Ka=pa,Ig=ah,Jg=Kg,Lg=Gg,Mg=Hg,fh=0,gh=0;b:for(;;){do{if(Ig){if(!(0==(0|oa)))break b;qa=B,ra=H,xa=1,za=$,Va=Ja,Ng=fh,Og=gh,Pg=fh,Qg=gh}else{if(eh=(0|H)<125,hh=0|Nw(0|fh,0|gh,1,0),ih=G,jh=48!=(0|Ka),!eh){if(!jh){qa=B,ra=H,xa=oa,za=$,Va=Ja,Ng=Lg,Og=Mg,Pg=hh,Qg=ih;break}sh=0|f[ch>>2],th=1|sh,f[ch>>2]=th,qa=B,ra=H,xa=oa,za=$,Va=Ja,Ng=Lg,Og=Mg,Pg=hh,Qg=ih;break}m=jh?hh:$,kh=0==(0|B),eb=vh+(H<<2)|0,kh?gb=Jg:(lh=0|f[eb>>2],mh=10*lh|0,nh=Ka+-48|0,oh=nh+mh|0,gb=oh),f[eb>>2]=gb,ph=B+1|0,qh=9==(0|ph),rh=1&qh,j=rh+H|0,La=qh?0:ph,qa=La,ra=j,xa=oa,za=m,Va=1,Ng=Lg,Og=Mg,Pg=hh,Qg=ih}}while(0);if(uh=0|f[Rh>>2],wh=0|f[ai>>2],xh=uh>>>0<wh>>>0,xh?(yh=uh+1|0,f[Rh>>2]=yh,zh=0|d[uh>>0],Ah=255&zh,Aa=Ah):(Bh=0|av(a),Aa=Bh),Ch=Aa+-48|0,Dh=Ch>>>0<10,Eh=46==(0|Aa),!(Eh|Dh)){x=qa,C=ra,W=za,na=xa,Ba=Aa,Ia=Va,Jh=Ng,Kh=Pg,Mh=Og,Nh=Qg,Di=29;break a}B=qa,H=ra,$=za,oa=xa,Ja=Va,Ka=Aa,Ig=Eh,Jg=Ch,Lg=Ng,Mg=Og,fh=Pg,gh=Qg}dh=0!=(0|Ja),A=B,F=H,Z=$,Rg=fh,Sg=gh,Tg=Lg,Ug=Mg,Wg=dh,Di=37}else x=0,C=0,W=0,na=T,Ba=pa,Ia=ya,Jh=Gg,Kh=0,Mh=Hg,Nh=0,Di=29;do{if(29==(0|Di)){if(Hh=0==(0|na),Ih=Hh?Kh:Jh,Lh=Hh?Nh:Mh,Oh=0!=(0|Ia),Ph=32|Ba,Qh=101==(0|Ph),!(Oh&Qh)){if((0|Ba)>-1){A=x,F=C,Z=W,Rg=Kh,Sg=Nh,Tg=Ih,Ug=Lh,Wg=Oh,Di=37;break}z=x,E=C,Y=W,Xg=Kh,Yg=Nh,Zg=Oh,$g=Ih,_g=Lh,Di=39;break}if(Sh=0|Tv(a,h),Th=G,Uh=0==(0|Sh),Vh=-2147483648==(0|Th),Uh&Vh){if(0==(0|h)){$u(a,0),_=0;break}Yh=0|f[ai>>2],Zh=0==(0|Yh),Zh?(bi=0,ci=0):($h=0|f[Rh>>2],_h=$h+-1|0,f[Rh>>2]=_h,bi=0,ci=0)}else bi=Sh,ci=Th;di=0|Nw(0|bi,0|ci,0|Ih,0|Lh),ei=G,y=x,D=C,X=W,ob=di,pb=Kh,rb=ei,sb=Nh,Di=41}}while(0);37==(0|Di)&&(gi=0|f[ai>>2],hi=0==(0|gi),hi?(z=A,E=F,Y=Z,Xg=Rg,Yg=Sg,Zg=Wg,$g=Tg,_g=Ug,Di=39):(ii=0|f[Rh>>2],ji=ii+-1|0,f[Rh>>2]=ji,Wg?(y=A,D=F,X=Z,ob=Tg,pb=Rg,rb=Ug,sb=Sg,Di=41):Di=40)),39==(0|Di)&&(Zg?(y=z,D=E,X=Y,ob=$g,pb=Xg,rb=_g,sb=Yg,Di=41):Di=40);do{if(40==(0|Di))ki=0|Ru(),f[ki>>2]=22,$u(a,0),_=0;else if(41==(0|Di)){if(jb=0|f[vh>>2],0==(0|jb)){lb=+(0|g),mb=0*lb,_=mb;break}if(nb=(0|ob)==(0|pb),qb=(0|rb)==(0|sb),ub=nb&qb,vb=(0|sb)<0,wb=pb>>>0<10,xb=0==(0|sb),yb=xb&wb,zb=vb|yb,zb&ub&&(Ab=(0|c)>30,Bb=jb>>>c,Cb=0==(0|Bb),Ab|Cb)){Db=+(0|g),Fb=+(jb>>>0),Gb=Db*Fb,_=Gb;break}if(Hb=(0|e)/-2&-1,Ib=(0|Hb)<0,Jb=Ib<<31>>31,Kb=(0|rb)>(0|Jb),Lb=ob>>>0>Hb>>>0,Mb=(0|rb)==(0|Jb),Nb=Mb&Lb,Kb|Nb){Qb=0|Ru(),f[Qb>>2]=34,Rb=+(0|g),Sb=1.7976931348623157e308*Rb,Tb=1.7976931348623157e308*Sb,_=Tb;break}if(Ub=e+-106|0,Vb=(0|Ub)<0,Wb=Vb<<31>>31,Xb=(0|rb)<(0|Wb),Yb=ob>>>0<Ub>>>0,Zb=(0|rb)==(0|Wb),_b=Zb&Yb,Xb|_b){bc=0|Ru(),f[bc>>2]=34,cc=+(0|g),dc=2.2250738585072014e-308*cc,ec=2.2250738585072014e-308*dc,_=ec;break}if(0==(0|y))Da=D;else{if((0|y)<9){for(hc=vh+(D<<2)|0,fb=0|f[hc>>2],Ca=y,kc=fb;;){if(ic=10*kc|0,lc=Ca+1|0,9==(0|lc))break;Ca=lc,kc=ic}f[hc>>2]=ic}mc=D+1|0,Da=mc}if((0|X)<9&&(oc=(0|X)<=(0|ob),pc=(0|ob)<18,oc&pc)){if(qc=9==(0|ob),rc=0|f[vh>>2],qc){sc=+(0|g),tc=+(rc>>>0),vc=sc*tc,_=vc;break}if((0|ob)<9){xc=+(0|g),yc=+(rc>>>0),zc=xc*yc,Ac=8-ob|0,Bc=3304+(Ac<<2)|0,Cc=0|f[Bc>>2],Dc=+(0|Cc),Ec=zc/Dc,_=Ec;break}if(cb=0|V(ob,-3),db=c+27|0,Gc=db+cb|0,Hc=(0|Gc)>30,Ic=rc>>>Gc,Jc=0==(0|Ic),Hc|Jc){Kc=ob+-10|0,Lc=3304+(Kc<<2)|0,Mc=+(0|g),Nc=+(rc>>>0),Oc=Mc*Nc,Pc=0|f[Lc>>2],Rc=+(0|Pc),Sc=Oc*Rc,_=Sc;break}}if(Tc=(0|ob)%9&-1,0==(0|Tc))Q=0,ja=Da,sa=0,wa=ob;else{if(Vc=(0|ob)>-1,Wc=Tc+9|0,Xc=Vc?Tc:Wc,Yc=8-Xc|0,Zc=3304+(Yc<<2)|0,$c=0|f[Zc>>2],0==(0|Da))J=0,O=0,R=ob;else{for(bd=1e9/(0|$c)&-1,w=0,K=0,S=ob,Na=0;;){if(cd=vh+(Na<<2)|0,dd=0|f[cd>>2],ed=(dd>>>0)%($c>>>0)&-1,fd=(dd>>>0)/($c>>>0)&-1,gd=fd+w|0,f[cd>>2]=gd,hd=0|V(bd,ed),id=(0|Na)==(0|K),jd=0==(0|gd),wi=id&jd,ld=K+1|0,md=127&ld,nd=S+-9|0,l=wi?nd:S,k=wi?md:K,od=Na+1|0,(0|od)==(0|Da))break;w=hd,K=k,S=l,Na=od}qd=0==(0|hd),qd?(J=k,O=Da,R=l):(rd=vh+(Da<<2)|0,sd=Da+1|0,f[rd>>2]=hd,J=k,O=sd,R=l)}td=9-Xc|0,ud=td+R|0,Q=0,ja=O,sa=J,wa=ud}a:for(;;){for(wd=(0|wa)<18,xd=18==(0|wa),yd=vh+(sa<<2)|0,P=Q,ia=ja;;){if(!wd){if(!xd){la=P,Pa=sa,Ua=wa,_a=ia;break a}if(zd=0|f[yd>>2],!(zd>>>0<9007199)){la=P,Pa=sa,Ua=18,_a=ia;break a}}for(Bd=ia+127|0,u=0,va=ia,Ya=Bd;;){if(Xa=127&Ya,Cd=vh+(Xa<<2)|0,Dd=0|f[Cd>>2],Ed=0|Sw(0|Dd,0,29),Fd=G,Hd=0|Nw(0|Ed,0|Fd,0|u,0),Id=G,Jd=Id>>>0>0,Kd=Hd>>>0>1e9,Ld=0==(0|Id),Md=Ld&Kd,Nd=Jd|Md,Nd?(Od=0|Ww(0|Hd,0|Id,1e9,0),G,Qd=0|ax(0|Hd,0|Id,1e9,0),G,ea=Od,hb=Qd):(ea=0,hb=Hd),f[Cd>>2]=hb,Td=va+127|0,Ud=127&Td,Vd=(0|Xa)!=(0|Ud),Wd=(0|Xa)==(0|sa),xi=Vd|Wd,yi=1^xi,Xd=0==(0|hb),zi=Xd&yi,Ga=zi?Xa:va,Yd=Xa+-1|0,Wd)break;u=ea,va=Ga,Ya=Yd}if(Zd=P+-29|0,!(0==(0|ea)))break;P=Zd,ia=Ga}_d=wa+9|0,be=sa+127|0,ce=127&be,de=(0|ce)==(0|Ga),ee=Ga+127|0,fe=127&ee,ge=Ga+126|0,he=127&ge,ie=vh+(he<<2)|0,de?(je=vh+(fe<<2)|0,ke=0|f[je>>2],me=0|f[ie>>2],ne=me|ke,f[ie>>2]=ne,Ra=fe):Ra=Ga,oe=vh+(ce<<2)|0,f[oe>>2]=ea,Q=Zd,ja=Ra,sa=ce,wa=_d}a:for(;;){for(af=_a+1|0,$e=127&af,cf=_a+127|0,df=127&cf,ef=vh+(df<<2)|0,ma=la,Qa=Pa,Ta=Ua;;){for(Ce=18==(0|Ta),ff=(0|Ta)>27,Ma=ff?9:1,ka=ma,Oa=Qa;;){for(v=0;;){if(pe=v+Oa|0,qe=127&pe,(0|qe)==(0|_a)){fa=2,Di=88;break}if(se=vh+(qe<<2)|0,te=0|f[se>>2],ue=3336+(v<<2)|0,ve=0|f[ue>>2],te>>>0<ve>>>0){fa=2,Di=88;break}if(te>>>0>ve>>>0)break;if(ze=v+1|0,!((0|ze)<2)){fa=ze,Di=88;break}v=ze}if(88==(0|Di)&&(Di=0,Be=2==(0|fa),Ce&Be)){N=0,Wa=0,bb=_a;break a}if(De=Ma+ka|0,!((0|Oa)==(0|_a)))break;ka=De,Oa=_a}for(Fe=1<<Ma,Ge=Fe+-1|0,Ie=1e9>>>Ma,s=0,Za=Oa,$a=Ta,ab=Oa;;){if(Je=vh+(ab<<2)|0,Ke=0|f[Je>>2],Le=Ke&Ge,Me=Ke>>>Ma,Ne=Me+s|0,f[Je>>2]=Ne,Oe=0|V(Le,Ie),Pe=(0|ab)==(0|Za),Qe=0==(0|Ne),Ai=Pe&Qe,Re=Za+1|0,Te=127&Re,Ue=$a+-9|0,q=Ai?Ue:$a,n=Ai?Te:Za,Ve=ab+1|0,We=127&Ve,(0|We)==(0|_a))break;s=Oe,Za=n,$a=q,ab=We}if(0==(0|Oe))ma=De,Qa=n,Ta=q;else{if(!((0|$e)==(0|n)))break;gf=0|f[ef>>2],hf=1|gf,f[ef>>2]=hf,ma=De,Qa=n,Ta=q}}_e=vh+(_a<<2)|0,f[_e>>2]=Oe,la=De,Pa=n,Ua=q,_a=$e}for(;;){if(jf=Wa+Oa|0,kf=127&jf,lf=(0|kf)==(0|bb),mf=bb+1|0,of=127&mf,lf?(pf=of+-1|0,qf=vh+(pf<<2)|0,f[qf>>2]=0,aa=of):aa=bb,rf=1e9*N,sf=vh+(kf<<2)|0,tf=0|f[sf>>2],uf=+(tf>>>0),vf=rf+uf,wf=Wa+1|0,2==(0|wf))break;N=vf,Wa=wf,bb=aa}if(xf=+(0|g),zf=xf*vf,Af=ka+53|0,Bf=Af-e|0,Cf=(0|Bf)<(0|c),Df=(0|Bf)>0,i=Df?Bf:0,t=Cf?i:c,Ef=(0|t)<53,Ef?(Ff=105-t|0,Gf=+Uv(1,Ff),Hf=+Vv(Gf,zf),If=53-t|0,Kf=+Uv(1,If),Lf=+Wv(zf,Kf),Mf=zf-Lf,Nf=Hf+Mf,L=Hf,M=Lf,ha=Nf):(L=0,M=0,ha=zf),Of=Oa+2|0,Pf=127&Of,(0|Pf)==(0|aa))Ea=M;else{Rf=vh+(Pf<<2)|0,Sf=0|f[Rf>>2],Tf=Sf>>>0<5e8;do{if(!Tf){if(!(5e8==(0|Sf))){ag=.75*xf,bg=ag+M,ga=bg;break}if(cg=Oa+3|0,eg=127&cg,(0|eg)==(0|aa)){gg=.5*xf,hg=gg+M,ga=hg;break}ig=.75*xf,jg=ig+M,ga=jg;break}if(0==(0|Sf)&&(Wf=Oa+3|0,Xf=127&Wf,(0|Xf)==(0|aa))){ga=M;break}Zf=.25*xf,$f=Zf+M,ga=$f}while(0);kg=53-t|0,lg=(0|kg)>1,lg?(mg=+Wv(ga,1),ng=0!=mg,ng?Ea=ga:(pg=ga+1,Ea=pg)):Ea=ga}qg=ha+Ea,rg=qg-L,sg=2147483647&Af,tg=-2-Ci|0,ug=(0|sg)>(0|tg);do{if(ug){if(vg=+I(+rg),wg=!(vg>=9007199254740992),xg=.5*rg,pi=1^wg,yg=1&pi,Ha=yg+ka|0,ta=wg?rg:xg,Ag=Ha+50|0,!((0|Ag)>(0|Gh)||(Cg=(0|t)!=(0|Bf),oi=Cg|wg,ua=Cf&oi,Dg=0!=Ea,Dg&ua))){Fa=ta,Sa=Ha;break}Eg=0|Ru(),f[Eg>>2]=34,Fa=ta,Sa=Ha}else Fa=rg,Sa=ka}while(0);Fg=+Xv(Fa,Sa),_=Fg}}while(0);return o=Ei,+_}function Tv(a,b){a|=0,b|=0;var c=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ia=0,ja=0,ka=0,la=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0;switch(o,D=a+4|0,P=0|f[D>>2],$=a+100|0,ja=0|f[$>>2],ua=P>>>0<ja>>>0,ua?(Fa=P+1|0,f[D>>2]=Fa,Qa=0|d[P>>0],_a=255&Qa,u=_a):(q=0|av(a),u=q),0|u){case 43:case 45:v=45==(0|u),w=1&v,x=0|f[D>>2],y=0|f[$>>2],z=x>>>0<y>>>0,z?(A=x+1|0,f[D>>2]=A,B=0|d[x>>0],C=255&B,H=C):(E=0|av(a),H=E),F=H+-48|0,I=F>>>0>9,J=0!=(0|b),kb=J&I,kb?(K=0|f[$>>2],L=0==(0|K),L?(c=w,g=H):(M=0|f[D>>2],N=M+-1|0,f[D>>2]=N,c=w,g=H)):(c=w,g=H);break;default:c=0,g=u}if(O=g+-48|0,O>>>0>9)R=0|f[$>>2],S=0==(0|R),S?(r=-2147483648,s=0):(T=0|f[D>>2],U=T+-1|0,f[D>>2]=U,r=-2147483648,s=0);else{for(e=0,i=g;;){if(V=10*e|0,W=i+-48|0,X=W+V|0,Y=0|f[D>>2],Z=0|f[$>>2],_=Y>>>0<Z>>>0,_?(aa=Y+1|0,f[D>>2]=aa,ba=0|d[Y>>0],ca=255&ba,h=ca):(da=0|av(a),h=da),ea=h+-48|0,fa=ea>>>0<10,ga=(0|X)<214748364,!(fa&ga))break;e=X,i=h}if(ia=(0|X)<0,ka=ia<<31>>31,la=h+-48|0,la>>>0<10)for(l=h,qa=X,ra=ka;;){if(sa=0|Yw(0|qa,0|ra,10,0),ta=G,va=(0|l)<0,wa=va<<31>>31,xa=0|Nw(0|l,0|wa,-48,-1),ya=G,za=0|Nw(0|xa,0|ya,0|sa,0|ta),Aa=G,Ba=0|f[D>>2],Ca=0|f[$>>2],Da=Ba>>>0<Ca>>>0,Da?(Ea=Ba+1|0,f[D>>2]=Ea,Ga=0|d[Ba>>0],Ha=255&Ga,j=Ha):(Ia=0|av(a),j=Ia),Ja=j+-48|0,Ka=Ja>>>0<10,La=(0|Aa)<21474836,Ma=za>>>0<2061584302,Na=21474836==(0|Aa),Oa=Na&Ma,Pa=La|Oa,!(Ka&Pa)){k=j,eb=za,fb=Aa;break}l=j,qa=za,ra=Aa}else k=h,eb=X,fb=ka;if(na=k+-48|0,oa=na>>>0<10,pa=0|f[$>>2],oa)for(Ua=pa;;){if(Sa=0|f[D>>2],Ta=Sa>>>0<Ua>>>0,Ta?(Va=Sa+1|0,f[D>>2]=Va,Wa=0|d[Sa>>0],Xa=255&Wa,m=Xa,t=Ua):(Ya=0|av(a),p=0|f[$>>2],m=Ya,t=p),Za=m+-48|0,!(Za>>>0<10)){n=t;break}Ua=t}else n=pa;ab=0==(0|n),ab||(bb=0|f[D>>2],cb=bb+-1|0,f[D>>2]=cb),db=0!=(0|c),gb=0|Mw(0,0,0|eb,0|fb),hb=G,ib=db?gb:eb,jb=db?hb:fb,r=jb,s=ib}return G=r,0|s}function Uv(a,b){a=+a,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,l=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0;return o,y=(0|b)>1023,y?(A=8.98846567431158e307*a,B=b+-1023|0,C=(0|B)>1023,D=8.98846567431158e307*A,E=b+-2046|0,F=(0|E)<1023,c=F?E:1023,d=C?c:B,j=C?D:A,e=j,g=d):(H=(0|b)<-1022,H?(n=2.2250738585072014e-308*a,p=b+1022|0,q=(0|p)<-1022,r=2.2250738585072014e-308*n,s=b+2044|0,t=(0|s)>-1022,h=t?s:-1022,i=q?h:p,l=q?r:n,e=l,g=i):(e=a,g=b)),u=g+1023|0,v=0|Sw(0|u,0,52),w=G,f[m>>2]=v,f[m+4>>2]=w,x=+k[m>>3],+(e*x)}function Vv(a,b){a=+a,b=+b;return o,+ +fv(a,b)}function Wv(a,b){a=+a,b=+b;return o,+ +Yv(a,b)}function Xv(a,b){a=+a,b|=0;return o,+ +Uv(a,b)}function Yv(a,b){a=+a,b=+b;var d=0,e=0,g=0,h=0,i=0,j=0,l=0,n=0,p=0,q=0,r=0,s=0,u=0,v=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,T=0,U=0,V=0,W=0,X=0,Y=0,$=0,_=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,$a=0,_a=0,bb=0,cb=0,db=0,eb=0,fb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Zb=0,$b=0,_b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,sc=0;k[m>>3]=a,La=0|f[m>>2],Wa=0|f[m+4>>2],k[m>>3]=b,fb=0|f[m>>2],qb=0|f[m+4>>2],Bb=0|Pw(0|La,0|Wa,52),Xb=2047&Bb,gc=0|Pw(0|fb,0|qb,52),E=2047&gc,Q=-2147483648&Wa,_=0|Sw(0|fb,0|qb,1),ka=G,va=0==(0|_),Ga=0==(0|ka),Ia=va&Ga;a:do{if(Ia)sc=3;else if(Ja=0|Zv(b),Ka=G,Ma=2147483647&Ka,Na=Ma>>>0>2146435072,Oa=Ja>>>0>0,Pa=2146435072==(0|Ma),Qa=Pa&Oa,Ra=Na|Qa,Sa=2047==(0|Xb),Sa|Ra)sc=3;else{if(Va=0|Sw(0|La,0|Wa,1),Xa=G,Ya=Xa>>>0>ka>>>0,Za=Va>>>0>_>>>0,$a=(0|Xa)==(0|ka),_a=$a&Za,!(Ya|_a))return bb=(0|Va)==(0|_),cb=(0|Xa)==(0|ka),db=bb&cb,eb=0*a,+(db?eb:a);if(0==(0|Xb)){if(hb=0|Sw(0|La,0|Wa,12),ib=G,jb=(0|ib)>-1,kb=hb>>>0>4294967295,lb=-1==(0|ib),mb=lb&kb,jb|mb)for(i=0,pb=hb,rb=ib;;){if(ob=i+-1|0,sb=0|Sw(0|pb,0|rb,1),tb=G,ub=(0|tb)>-1,vb=sb>>>0>4294967295,wb=-1==(0|tb),xb=wb&vb,!(ub|xb)){h=ob;break}i=ob,pb=sb,rb=tb}else h=0;zb=1-h|0,Ab=0|Sw(0|La,0|Wa,0|zb),Cb=G,l=h,dc=Ab,ec=Cb}else Db=1048575&Wa,Eb=1048576|Db,l=Xb,dc=La,ec=Eb;if(0==(0|E)){if(Gb=0|Sw(0|fb,0|qb,12),Hb=G,Ib=(0|Hb)>-1,Jb=Gb>>>0>4294967295,Kb=-1==(0|Hb),Lb=Kb&Jb,Ib|Lb)for(g=0,Pb=Gb,Qb=Hb;;){if(Ob=g+-1|0,Rb=0|Sw(0|Pb,0|Qb,1),Sb=G,Tb=(0|Sb)>-1,Ub=Rb>>>0>4294967295,Vb=-1==(0|Sb),Wb=Vb&Ub,!(Tb|Wb)){e=Ob;break}g=Ob,Pb=Rb,Qb=Sb}else e=0;Zb=1-e|0,$b=0|Sw(0|fb,0|qb,0|Zb),_b=G,j=e,fc=$b,hc=_b}else ac=1048575&qb,bc=1048576|ac,j=E,fc=fb,hc=bc;cc=(0|l)>(0|j),ic=0|Mw(0|dc,0|ec,0|fc,0|hc),jc=G,kc=(0|jc)>-1,lc=ic>>>0>4294967295,mc=-1==(0|jc),nc=mc&lc,oc=kc|nc;b:{if(cc){for(p=l,v=jc,Ca=oc,Da=dc,Ea=ec,qc=ic;;){if(Ca){if(pc=0==(0|qc),u=0==(0|v),pc&u)break;y=qc,z=v}else y=Da,z=Ea;if(A=0|Sw(0|y,0|z,1),B=G,C=p+-1|0,D=(0|C)>(0|j),F=0|Mw(0|A,0|B,0|fc,0|hc),H=G,I=(0|H)>-1,J=F>>>0>4294967295,K=-1==(0|H),L=K&J,M=I|L,!D){n=C,s=M,O=F,R=H,Fa=A,Ha=B;break b}p=C,v=H,Ca=M,Da=A,Ea=B,qc=F}x=0*a,d=x;break a}n=l,s=oc,O=ic,R=jc,Fa=dc,Ha=ec}if(s){if(N=0==(0|O),P=0==(0|R),N&P){$=0*a,d=$;break}U=R,W=O}else U=Ha,W=Fa;if(T=U>>>0<1048576,V=W>>>0<0,X=1048576==(0|U),Y=X&V,T|Y)for(r=n,aa=W,ba=U;;){if(ca=0|Sw(0|aa,0|ba,1),da=G,ea=r+-1|0,fa=da>>>0<1048576,ga=ca>>>0<0,ha=1048576==(0|da),ia=ha&ga,!(fa|ia)){q=ea,ma=ca,na=da;break}r=ea,aa=ca,ba=da}else q=n,ma=W,na=U;la=(0|q)>0,la?(oa=0|Nw(0|ma,0|na,0,-1048576),pa=G,qa=0|Sw(0|q,0,52),ra=G,sa=oa|qa,ta=pa|ra,za=ta,Ba=sa):(ua=1-q|0,wa=0|Pw(0|ma,0|na,0|ua),xa=G,za=xa,Ba=wa),ya=za|Q,f[m>>2]=Ba,f[m+4>>2]=ya,Aa=+k[m>>3],d=Aa}}while(0);return 3==(0|sc)&&(Ta=a*b,Ua=Ta/Ta,d=Ua),+d}function Zv(a){a=+a;var b=0,c=0;return o,k[m>>3]=a,b=0|f[m>>2],c=0|f[m+4>>2],G=c,0|b}function $v(a){a|=0;var b=0,c=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,y=0,A=0,B=0,C=0,E=0,F=0,G=0,I=0;k=a,w=3&k,B=0==(0|w);a:if(B)c=a,I=4;else for(e=a,A=k;;){if(C=0|d[e>>0],C<<24>>24==0){j=A;break a}if(E=e+1|0,F=E,G=3&F,0==(0|G)){c=E,I=4;break}e=E,A=F}if(4==(0|I)){for(b=c;;){if(l=0|f[b>>2],m=l+-16843009|0,n=-2139062144&l,p=-2139062144^n,q=p&m,r=0==(0|q),s=b+4|0,!r)break;b=s}if(t=255&l,t<<24>>24==0)g=b;else for(h=b;;){if(v=h+1|0,i=0|d[v>>0],i<<24>>24==0){g=v;break}h=v}y=g,j=y}return 0|(j-k|0)}function _v(a,b){a|=0,b|=0;var c=0,e=0,f=0,g=0;return o,c=0|aw(a,b),e=0|d[c>>0],f=255&b,g=e<<24>>24==f<<24>>24,0|(g?c:0)}function aw(a,b){a|=0,b|=0;var c=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,I=0,J=0,K=0,L=0,M=0,N=0,P=0,Q=0,R=0,S=0,T=0,U=0,W=0,Y=0,Z=0,$=0,aa=0;v=255&b,G=0==(0|v);a:if(G)Z=0|$v(a),$=a+Z|0,c=$;else{if(R=a,W=3&R,0==(0|W))h=a;else for(Y=255&b,i=a;;){if(k=0|d[i>>0],l=k<<24>>24==0,m=k<<24>>24==Y<<24>>24,l|m){c=i;break a}if(n=i+1|0,p=n,q=3&p,0==(0|q)){h=n;break}i=n}s=0|V(v,16843009),t=0|f[h>>2],u=t+-16843009|0,w=-2139062144&t,x=-2139062144^w,y=x&u,z=0==(0|y);b:if(z)for(g=h,B=t;;){if(A=B^s,C=A+-16843009|0,D=-2139062144&A,E=-2139062144^D,F=E&C,!(0==(0|F))){e=g;break b}if(I=g+4|0,J=0|f[I>>2],K=J+-16843009|0,L=-2139062144&J,M=-2139062144^L,N=M&K,!(0==(0|N))){e=I;break}g=I,B=J}else e=h;for(P=255&b,j=e;;){if(Q=0|d[j>>0],S=Q<<24>>24==0,T=Q<<24>>24==P<<24>>24,aa=S|T,U=j+1|0,aa){c=j;break}j=U}}return 0|c}function bw(a,b,c,d){a|=0,b|=0,c|=0,d|=0;var e=0,g=0,i=0;return i=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),e=i,f[e>>2]=d,g=0|jv(a,b,c,e),o=i,0|g}function cw(a,b){a=+a,b=+b;var d=0,e=0,g=0,h=0,i=0,k=0,l=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,O=0,P=0,Q=0,S=0,U=0,V=0,X=0,Y=0,Z=0,$=0,_=0,ba=0,da=0,ea=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,za=0,Aa=0,Ba=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Ra=0;j[m>>2]=a,P=0|f[m>>2],j[m>>2]=b,$=0|f[m>>2],ja=P>>>23,ua=255&ja,Fa=$>>>23,Na=255&Fa,Oa=-2147483648&P,Pa=$<<1,F=0==(0|Pa);a:do{if(F)Ra=3;else if(G=0|dw(b),H=2147483647&G,I=H>>>0>2139095040,J=255==(0|ua),J|I)Ra=3;else{if(M=P<<1,!(M>>>0>Pa>>>0))return O=(0|M)==(0|Pa),Q=0*a,+(O?Q:a);if(0==(0|ua)){if(S=P<<9,(0|S)>-1)for(e=S,l=0;;){if(U=l+-1|0,V=e<<1,!((0|V)>-1)){k=U;break}e=V,l=U}else k=0;X=1-k|0,Y=P<<X,d=Y,r=k}else Z=8388607&P,_=8388608|Z,d=_,r=ua;if(0==(0|Na)){if(ba=$<<9,(0|ba)>-1)for(i=0,p=ba;;){if(da=i+-1|0,ea=p<<1,!((0|ea)>-1)){h=da;break}i=da,p=ea}else h=0;ga=1-h|0,ha=$<<ga,q=h,E=ha}else ia=8388607&$,ka=8388608|ia,q=Na,E=ka;la=(0|r)>(0|q),ma=d-E|0,na=(0|ma)>-1;b:{if(la){for(s=d,v=r,pa=ma,Ma=na;;){if(Ma){if(0==(0|pa))break;t=pa}else t=s;if(ra=t<<1,sa=v+-1|0,ta=(0|sa)>(0|q),va=ra-E|0,wa=(0|va)>-1,!ta){n=ra,u=sa,C=wa,D=va;break b}s=ra,v=sa,pa=va,Ma=wa}qa=0*a,g=qa;break a}n=d,u=r,C=na,D=ma}if(C){if(0==(0|D)){za=0*a,g=za;break}x=D}else x=n;if(x>>>0<8388608)for(z=u,A=x;;){if(Aa=A<<1,Ba=z+-1|0,!(Aa>>>0<8388608)){w=Aa,y=Ba;break}z=Ba,A=Aa}else w=x,y=u;Da=(0|y)>0,Da?(Ea=w+-8388608|0,Ga=y<<23,Ha=Ea|Ga,B=Ha):(Ia=1-y|0,Ja=w>>>Ia,B=Ja),Ka=B|Oa,f[m>>2]=Ka,La=+j[m>>2],g=La}}while(0);return 3==(0|Ra)&&(K=a*b,L=K/K,g=L),+g}function dw(a){a=+a;var b=0;return o,j[m>>2]=a,b=0|f[m>>2],0|b}function iw(a,b){a|=0,b|=0;var c=0,d=0,f=0;return o,c=0|$v(a),d=0|jw(a,1,c,b),f=(0|d)!=(0|c),0|f<<31>>31}function jw(a,b,c,d){a|=0,b|=0,c|=0,d|=0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0;return o,m=0|V(c,b),n=0==(0|b),e=n?0:c,p=d+76|0,q=0|f[p>>2],r=(0|q)>-1,r?(g=0|mv(d),t=0==(0|g),h=0|Kv(a,m,d),t?j=h:(nv(d),j=h)):(s=0|Kv(a,m,d),j=s),i=(0|j)==(0|m),i?l=e:(k=(j>>>0)/(b>>>0)&-1,l=k),0|l}function kw(a,b){a|=0,b|=0;var c=0,e=0,g=0,i=0,j=0,k=0,l=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0;q=b+76|0,B=0|f[q>>2],E=(0|B)<0,F=255&a,G=255&a,E?K=3:(H=0|mv(b),I=0==(0|H),I?K=3:(r=b+75|0,s=0|d[r>>0],t=s<<24>>24,u=(0|G)==(0|t),u?K=10:(v=b+20|0,w=0|f[v>>2],x=b+16|0,y=0|f[x>>2],z=w>>>0<y>>>0,z?(A=w+1|0,f[v>>2]=A,d[w>>0]=F,D=G):K=10),10==(0|K)&&(C=0|nw(b,a),D=C),nv(b),c=D));do{if(3==(0|K)){if(J=b+75|0,e=0|d[J>>0],g=e<<24>>24,!((0|G)==(0|g))&&(i=b+20|0,j=0|f[i>>2],k=b+16|0,l=0|f[k>>2],j>>>0<l>>>0)){n=j+1|0,f[i>>2]=n,d[j>>0]=F,c=G;break}p=0|nw(b,a),c=p}}while(0);return 0|c}function lw(a){a|=0;var b=0,c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0;d=a+68|0,j=0|f[d>>2],(k=0==(0|j))||(l=a+116|0,m=0|f[l>>2],n=0==(0|m),b=a+112|0,n||(p=0|f[b>>2],q=m+112|0,f[q>>2]=p),r=0|f[b>>2],e=0==(0|r),e?(h=0|mw(),i=h+232|0,c=i):(g=r+116|0,c=g),f[c>>2]=m)}function mw(){return o,0|(0|Tu())}function nw(a,b){a|=0,b|=0;var c=0,e=0,g=0,i=0,j=0,k=0,l=0,m=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;G=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),s=G,y=255&b,d[s>>0]=y,z=a+16|0,A=0|f[z>>2],B=0==(0|A),B?(C=0|Lv(a),D=0==(0|C),D?(e=0|f[z>>2],i=e,F=4):c=-1):(i=A,F=4);do{if(4==(0|F)){if(E=a+20|0,g=0|f[E>>2],g>>>0<i>>>0&&(j=255&b,k=a+75|0,l=0|d[k>>0],m=l<<24>>24,!((0|j)==(0|m)))){q=g+1|0,f[E>>2]=q,d[g>>0]=y,c=j;break}r=a+36|0,t=0|f[r>>2],u=0|yx[511&t](a,s,1),v=1==(0|u),v?(w=0|d[s>>0],x=255&w,c=x):c=-1}}while(0);return o=G,0|c}function ow(a,b){a|=0,b|=0;var c=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,E=0;return E=o,o=o+48|0,(0|o)>=(0|p)&&ca(48),y=E+32|0,x=E+16|0,w=E,l=0|d[b>>0],m=l<<24>>24,v=0|vv(72690,m,4),n=0==(0|v),n?(q=0|Ru(),f[q>>2]=22,c=0):(r=0|pw(b),s=a,t=32768|r,f[w>>2]=s,z=w+4|0,f[z>>2]=t,A=w+8|0,f[A>>2]=438,u=0|Ga(5,0|w),e=0|Qu(u),g=(0|e)<0,g?c=0:(h=524288&r,i=0==(0|h),i||(f[x>>2]=e,B=x+4|0,f[B>>2]=2,C=x+8|0,f[C>>2]=1,za(221,0|x)),j=0|qw(e,b),k=0==(0|j),k?(f[y>>2]=e,Fa(6,0|y),c=0):c=j)),o=E,0|c}function pw(a){a|=0;var b=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;return o,j=0|_v(a,43),r=0==(0|j),s=0|d[a>>0],z=s<<24>>24!=114,b=1&z,e=r?b:2,t=0|_v(a,120),u=0==(0|t),v=128|e,f=u?e:v,w=0|_v(a,101),x=0==(0|w),y=524288|f,g=x?f:y,k=s<<24>>24==114,l=64|g,h=k?g:l,m=s<<24>>24==119,n=512|h,i=m?n:h,p=s<<24>>24==97,q=1024|i,0|(p?q:i)}function qw(a,b){a|=0,b|=0;var c=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,T=0,U=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ka=0,la=0;if(ka=o,o=o+64|0,(0|o)>=(0|p)&&ca(64),Z=ka+40|0,_=ka+24|0,$=ka+16|0,Y=ka,t=ka+56|0,E=0|d[b>>0],P=E<<24>>24,X=0|vv(72690,P,4),0==(0|X))T=0|Ru(),f[T>>2]=22,c=0;else if(U=0|Gw(1156),0==(0|U))c=0;else{ia=U,la=ia+124|0;do{f[ia>>2]=0,ia=ia+4|0}while((0|ia)<(0|la));W=0|_v(b,43),h=0==(0|W),h&&(i=E<<24>>24==114,j=i?8:4,f[U>>2]=j),k=0|_v(b,101),l=0==(0|k),l?n=E:(f[Y>>2]=a,aa=Y+4|0,f[aa>>2]=2,ga=Y+8|0,f[ga>>2]=1,za(221,0|Y),e=0|d[b>>0],n=e),m=n<<24>>24==97,m?(f[$>>2]=a,ha=$+4|0,f[ha>>2]=3,q=0|za(221,0|$),r=1024&q,s=0==(0|r),s&&(u=1024|q,f[_>>2]=a,ba=_+4|0,f[ba>>2]=4,da=_+8|0,f[da>>2]=u,za(221,0|_)),v=0|f[U>>2],w=128|v,f[U>>2]=w,D=w):(g=0|f[U>>2],D=g),x=U+60|0,f[x>>2]=a,y=U+132|0,z=U+44|0,f[z>>2]=y,A=U+48|0,f[A>>2]=1024,B=U+75|0,d[B>>0]=-1,C=8&D,F=0==(0|C),F&&(G=t,f[Z>>2]=a,ea=Z+4|0,f[ea>>2]=21523,fa=Z+8|0,f[fa>>2]=G,H=0|Ma(54,0|Z),0==(0|H)&&(d[B>>0]=10)),J=U+32|0,f[J>>2]=4,K=U+36|0,f[K>>2]=2,L=U+40|0,f[L>>2]=3,M=U+12|0,f[M>>2]=1,N=0|f[18799],O=0==(0|N),O&&(Q=U+76|0,f[Q>>2]=-1),0|rw(U),c=U}return o=ka,0|c}function rw(a){a|=0;var b=0,c=0,d=0,e=0,g=0,h=0;return o,b=0|sw(),c=0|f[b>>2],d=a+56|0,f[d>>2]=c,e=0|f[b>>2],g=0==(0|e),g||(h=e+52|0,f[h>>2]=a),f[b>>2]=a,tw(),0|a}function sw(){return o,Ea(75256),75264}function tw(){Na(75256)}function uw(a){a|=0;var b=0,c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;return o,c=a+76|0,p=0|f[c>>2],A=(0|p)>-1,A?(B=0|mv(a),z=B):z=0,lw(a),C=0|f[a>>2],D=1&C,E=0!=(0|D),E||(F=0|sw(),G=a+52|0,d=0|f[G>>2],e=0==(0|d),g=d,b=a+56|0,e||(h=0|f[b>>2],i=d+56|0,f[i>>2]=h),j=0|f[b>>2],k=0==(0|j),k||(l=j+52|0,f[l>>2]=g),m=0|f[F>>2],n=(0|m)==(0|a),n&&(f[F>>2]=j),tw()),q=0|vw(a),r=a+12|0,s=0|f[r>>2],t=0|Dx[255&s](a),u=t|q,v=a+92|0,w=0|f[v>>2],x=0==(0|w),x||Hw(w),E?0==(0|z)||nv(a):Hw(a),0|u}function vw(a){a|=0;var b=0,c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,F=0,G=0,I=0,J=0,K=0,L=0,M=0,N=0;j=0==(0|a);do{if(j){if(L=0|f[794],M=0==(0|L),M?F=0:(k=0|f[794],l=0|vw(k),F=l),m=0|sw(),d=0|f[m>>2],0==(0|d))g=F;else for(e=d,h=F;;){if(p=e+76|0,q=0|f[p>>2],r=(0|q)>-1,r?(s=0|mv(e),C=s):C=0,t=e+20|0,u=0|f[t>>2],w=e+28|0,x=0|f[w>>2],y=u>>>0>x>>>0,y?(z=0|ww(e),A=z|h,i=A):i=h,B=0==(0|C),B||nv(e),D=e+56|0,c=0|f[D>>2],0==(0|c)){g=i;break}e=c,h=i}tw(),b=g}else{if(v=a+76|0,G=0|f[v>>2],!((0|G)>-1)){I=0|ww(a),b=I;break}J=0|mv(a),N=0==(0|J),K=0|ww(a),N?b=K:(nv(a),b=K)}}while(0);return 0|b}function ww(a){a|=0;var b=0,c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;return o,c=a+20|0,p=0|f[c>>2],r=a+28|0,s=0|f[r>>2],t=p>>>0>s>>>0,t?(u=a+36|0,v=0|f[u>>2],yx[511&v](a,0,0),w=0|f[c>>2],x=0==(0|w),x?b=-1:y=3):y=3,3==(0|y)&&(d=a+4|0,e=0|f[d>>2],g=a+8|0,h=0|f[g>>2],i=e>>>0<h>>>0,i&&(j=e,k=h,l=j-k|0,m=a+40|0,n=0|f[m>>2],yx[511&n](a,l,1)),q=a+16|0,f[q>>2]=0,f[r>>2]=0,f[c>>2]=0,f[g>>2]=0,f[d>>2]=0,b=0),0|b}function xw(a){a|=0;var b=0,c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;return o,e=a+76|0,g=0|f[e>>2],h=(0|g)>-1,h?(k=0|mv(a),n=0==(0|k),l=0|f[a>>2],m=l>>>4,b=1&m,n?d=b:(nv(a),d=b)):(i=0|f[a>>2],j=i>>>4,c=1&j,d=c),0|d}function yw(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,h=0;return h=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),d=h,f[d>>2]=c,e=0|kv(a,b,d),o=h,0|e}function zw(a,b){a|=0,b|=0;var c=0,d=0;return o,c=0|$v(a),d=c+1|0,0|(0|Aw(a,b,d))}function Aw(a,b,c){a|=0,b|=0,c|=0;var e=0,f=0,g=0,h=0,j=0,k=0;for(o,g=255&b,f=c;;){if(h=f+-1|0,0==(0|f)){e=0;break}if(j=a+h|0,k=0|d[j>>0],k<<24>>24==g<<24>>24){e=j;break}f=h}return 0|e}function Bw(a){a|=0;var b=0,c=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;c=a+76|0,q=0|f[c>>2],w=(0|q)<0,w?D=3:(x=0|mv(a),y=0==(0|x),y?D=3:(k=a+4|0,l=0|f[k>>2],m=a+8|0,n=0|f[m>>2],p=l>>>0<n>>>0,p?(r=l+1|0,f[k>>2]=r,s=0|d[l>>0],t=255&s,v=t):(u=0|cv(a),v=u),nv(a),b=v));do{if(3==(0|D)){if(z=a+4|0,A=0|f[z>>2],B=a+8|0,C=0|f[B>>2],A>>>0<C>>>0){g=A+1|0,f[z>>2]=g,h=0|d[A>>0],i=255&h,b=i;break}j=0|cv(a),b=j;break}}while(0);return 0|b}function Cw(a,b){a|=0,b|=0;var c=0,d=0,e=0,h=0;return h=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),c=h,f[c>>2]=b,d=0|f[762],e=0|kv(d,a,c),o=h,0|e}function Dw(a,b){a|=0,b|=0;return o,+ +Ew(a,b,1)}function Ew(a,b,c){a|=0,b|=0,c|=0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0;y=o,o=o+128|0,(0|o)>=(0|p)&&ca(128),n=y,w=n,z=w+124|0;do{f[w>>2]=0,w=w+4|0}while((0|w)<(0|z));return q=n+4|0,f[q>>2]=a,r=n+8|0,f[r>>2]=-1,s=n+44|0,f[s>>2]=a,t=n+76|0,f[t>>2]=-1,$u(n,0),u=+Qv(n,c,1),v=n+108|0,d=0|f[v>>2],e=0|f[q>>2],g=0|f[r>>2],h=e-g|0,i=h+d|0,j=0==(0|b),j||(k=0!=(0|i),l=a+i|0,m=k?l:a,f[b>>2]=m),o=y,+u}function Fw(a,b){a|=0,b|=0;var c=0;return o,c=+Ew(a,b,0),+c}function Gw(a){a|=0;var b=0,c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,$a=0,_a=0,ab=0,bb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,sb=0,tb=0,ub=0,vb=0,wb=0,yb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,$b=0,_b=0,ac=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,yc=0,zc=0,Ac=0,Bc=0,Cc=0,Dc=0,Ec=0,Fc=0,Gc=0,Hc=0,Ic=0,Jc=0,Kc=0,Lc=0,Mc=0,Oc=0,Pc=0,Qc=0,Rc=0,Sc=0,Tc=0,Uc=0,Vc=0,Wc=0,Xc=0,Yc=0,$c=0,_c=0,ad=0,bd=0,cd=0,dd=0,ed=0,fd=0,gd=0,hd=0,id=0,jd=0,kd=0,ld=0,md=0,nd=0,od=0,pd=0,qd=0,sd=0,td=0,vd=0,wd=0,yd=0,zd=0,Ad=0,Cd=0,Dd=0,Gd=0,Hd=0,Id=0,Jd=0,Kd=0,Ld=0,Md=0,Nd=0,Od=0,Pd=0,Qd=0,Sd=0,Td=0,Ud=0,Vd=0,Wd=0,Yd=0,Zd=0,$d=0,_d=0,ae=0,be=0,de=0,ee=0,fe=0,ge=0,he=0,je=0,le=0,me=0,ne=0,oe=0,pe=0,qe=0,re=0,se=0,te=0,ue=0,ve=0,we=0,xe=0,ye=0,ze=0,Ae=0,Be=0,Ce=0,De=0,Ee=0,Fe=0,Ge=0,He=0,Ie=0,Je=0,Ke=0,Le=0,Me=0,Ne=0,Oe=0,Pe=0,Qe=0,Re=0,Se=0,Te=0,Ve=0,We=0,Xe=0,Ye=0,$e=0,_e=0,af=0,bf=0,cf=0,df=0,ef=0,ff=0,gf=0,hf=0,jf=0,kf=0,lf=0,mf=0,nf=0,of=0,pf=0,qf=0,rf=0,sf=0,tf=0,uf=0,vf=0,wf=0,xf=0,yf=0,zf=0,Af=0,Bf=0,Cf=0,Df=0,Ef=0,Ff=0,Gf=0,Hf=0,If=0,Jf=0,Kf=0,Lf=0,Mf=0,Nf=0,Rf=0,Sf=0,Tf=0,Uf=0,Vf=0,Wf=0,Xf=0,Yf=0,Zf=0,$f=0,_f=0,ag=0,bg=0,cg=0,dg=0,eg=0,fg=0,hg=0,ig=0,jg=0,kg=0,lg=0,mg=0,ng=0,og=0,pg=0,qg=0,rg=0,sg=0,tg=0,ug=0,vg=0,wg=0,xg=0,yg=0,zg=0,Ag=0,Bg=0,Cg=0,Dg=0,Eg=0,Fg=0,Gg=0,Hg=0,Ig=0,Jg=0,Kg=0,Lg=0,Mg=0,Ng=0,Og=0,Pg=0,Qg=0,Rg=0,Sg=0,Tg=0,Wg=0,Xg=0,Zg=0,$g=0,_g=0,ah=0,bh=0,ch=0,dh=0,eh=0,fh=0,gh=0,hh=0,ih=0,jh=0,kh=0,lh=0,mh=0,nh=0,oh=0,ph=0,rh=0,sh=0,uh=0,vh=0,wh=0,yh=0,zh=0,Bh=0,Ch=0,Fh=0,Hh=0,Ih=0,Jh=0,Kh=0,Lh=0,Mh=0,Nh=0,Oh=0,Ph=0,Sh=0,Th=0,Uh=0,Wh=0,Xh=0,Yh=0,Zh=0,$h=0,_h=0,ai=0,bi=0,di=0,ei=0,fi=0,gi=0,ii=0,ki=0,li=0,mi=0,ni=0,oi=0,pi=0,qi=0,ri=0,si=0,ti=0,ui=0,vi=0,wi=0,xi=0,yi=0,zi=0,Ai=0,Bi=0,Di=0,Ei=0,Fi=0,Gi=0,Hi=0,Ii=0,Ji=0,Ki=0,Li=0,Mi=0,Ni=0,Oi=0,Pi=0,Qi=0,Ri=0,Si=0,Ti=0,Ui=0,Vi=0,Wi=0,Xi=0,Yi=0,Zi=0,$i=0,_i=0,aj=0,bj=0,cj=0,dj=0,ej=0,fj=0,gj=0,hj=0,ij=0,jj=0,kj=0,lj=0,mj=0,nj=0,oj=0,pj=0,qj=0,rj=0,sj=0,tj=0,uj=0,vj=0,wj=0,xj=0,yj=0,zj=0,Bj=0,Cj=0,Dj=0,Ej=0,Fj=0,Gj=0,Hj=0,Ij=0,Jj=0,Kj=0,Lj=0,Mj=0,Nj=0,Oj=0,Qj=0,Rj=0,Sj=0,Tj=0,Uj=0,Wj=0,Yj=0,Zj=0,$j=0,_j=0,ak=0,bk=0,ck=0,dk=0,ek=0,gk=0,hk=0,ik=0,jk=0,kk=0,lk=0,nk=0,ok=0,pk=0,qk=0,rk=0,sk=0,tk=0,uk=0,vk=0,wk=0,xk=0,yk=0,zk=0,Ak=0,Bk=0,Ck=0,Dk=0,Ek=0,Fk=0,Hk=0,Ik=0,Jk=0,Kk=0,Lk=0,Mk=0,Nk=0,Ok=0,Pk=0,Qk=0,Rk=0,Sk=0,Tk=0,Uk=0,Vk=0,Wk=0,Xk=0,Yk=0,Zk=0,$k=0,_k=0,bl=0,dl=0,el=0,fl=0,gl=0,hl=0,il=0,jl=0,kl=0,ll=0,ml=0,nl=0,pl=0,ql=0,rl=0,sl=0,ul=0,vl=0,xl=0,zl=0,Al=0,Bl=0,Cl=0,Dl=0,El=0,Fl=0,Gl=0,Hl=0,Il=0,Jl=0,Kl=0,Ll=0,Ml=0,Nl=0,Ol=0,Pl=0,Rl=0,Sl=0,Tl=0,Vl=0,Wl=0,Xl=0,Zl=0,$l=0,_l=0,am=0,dm=0,em=0,fm=0,gm=0,hm=0,im=0,jm=0,km=0,lm=0,mm=0,nm=0,pm=0,rm=0,sm=0,um=0,vm=0,xm=0,ym=0,zm=0,Am=0,Bm=0,Cm=0,Dm=0,Em=0,Fm=0,Gm=0,Hm=0,Im=0,Jm=0,Km=0,Lm=0,Mm=0,Nm=0,Om=0,Pm=0,Qm=0,Rm=0,Sm=0,Tm=0,Um=0,Vm=0,Wm=0,Xm=0,Ym=0,Zm=0,$m=0,_m=0,an=0,bn=0,cn=0,dn=0,en=0,fn=0,gn=0,hn=0,jn=0,kn=0,ln=0,mn=0,nn=0,on=0,pn=0,qn=0,rn=0,sn=0,tn=0,un=0,wn=0,xn=0,zn=0,An=0,Bn=0,Dn=0,En=0,Fn=0,Gn=0,Hn=0,In=0,Jn=0,Kn=0,Ln=0,Mn=0,Nn=0,On=0,Pn=0,Qn=0,Rn=0,Sn=0,Tn=0,Un=0,Vn=0,Wn=0,Xn=0,Yn=0,Zn=0,$n=0,_n=0,ao=0,co=0,eo=0,go=0,ho=0,io=0,ko=0,lo=0,mo=0,no=0,oo=0,po=0,qo=0,ro=0,so=0,to=0,uo=0,vo=0,wo=0,xo=0,yo=0,zo=0,Ao=0,Bo=0,Co=0,Do=0,Eo=0,Fo=0,Go=0,Ho=0,Io=0,Jo=0,Ko=0,Lo=0,Mo=0,No=0,Oo=0,Po=0,Qo=0,Ro=0,So=0,To=0,Uo=0,Wo=0,Xo=0,Yo=0,Zo=0,$o=0,_o=0,ap=0,bp=0,cp=0,ep=0,fp=0,gp=0,hp=0,ip=0,jp=0,kp=0,lp=0,mp=0,np=0,op=0,pp=0,qp=0,rp=0,sp=0,vp=0,wp=0,xp=0,yp=0,zp=0,Ap=0,Bp=0,Cp=0,Dp=0,Fp=0,Gp=0,Hp=0,Ip=0,Jp=0,Kp=0,Lp=0,Mp=0,Np=0,Op=0,Pp=0,Qp=0,Rp=0,Sp=0,Tp=0,Up=0,Wp=0,Xp=0,Yp=0,$p=0,aq=0,bq=0,dq=0,eq=0,fq=0,jq=0,kq=0,lq=0,mq=0,nq=0,oq=0,pq=0,qq=0,rq=0,sq=0,tq=0,uq=0,wq=0,xq=0,yq=0,Aq=0,Bq=0,Cq=0,Dq=0,Eq=0,Fq=0,Gq=0,Iq=0,Jq=0,Kq=0,Mq=0,Oq=0,Qq=0,Rq=0,Sq=0,Tq=0,Uq=0,Vq=0,Wq=0,Xq=0,Yq=0,Zq=0,$q=0,_q=0,br=0,cr=0,dr=0,er=0,fr=0,gr=0,hr=0,ir=0,jr=0,kr=0,lr=0,nr=0,or=0,pr=0,qr=0,rr=0,sr=0,ur=0,vr=0,wr=0,xr=0,yr=0,zr=0,Ar=0,Br=0,Cr=0,Dr=0,Er=0,Fr=0,Gr=0,Hr=0,Ir=0,Jr=0,Kr=0,Lr=0,Mr=0,Nr=0,Or=0,Pr=0,Qr=0,Rr=0,Sr=0,Tr=0,Ur=0,Vr=0,Wr=0,Xr=0,Yr=0,Zr=0,_r=0,as=0,bs=0,cs=0,ds=0,es=0,fs=0,gs=0,hs=0,is=0,js=0,ks=0,ls=0,ms=0,os=0,ps=0,qs=0,rs=0,ss=0,ts=0,vs=0,xs=0,ys=0,zs=0,As=0,Bs=0,Cs=0,Ds=0,Es=0,Gs=0,Hs=0,Is=0,Js=0,Ks=0,Ms=0,Ns=0,Os=0,Ps=0,Rs=0,Ss=0,Ts=0,Us=0,Vs=0,Ws=0,Xs=0,Ys=0,Zs=0,$s=0,_s=0,at=0,bt=0,ct=0,dt=0,et=0,ft=0,gt=0,ht=0,it=0,jt=0,kt=0,lt=0,mt=0,nt=0,ot=0,pt=0,qt=0,rt=0,st=0,tt=0,ut=0,vt=0,wt=0,xt=0,yt=0,zt=0,At=0,Dt=0,Et=0,Ft=0,Gt=0,Ht=0,It=0,Jt=0,Kt=0,Lt=0,Nt=0,Ot=0,Pt=0,Qt=0,Rt=0,St=0,Tt=0,Ut=0,Vt=0,Wt=0,Xt=0,Yt=0,Zt=0,$t=0,_t=0,au=0,bu=0,cu=0,du=0,eu=0,fu=0,gu=0,hu=0,iu=0,ju=0,ku=0,lu=0,mu=0,nu=0,ou=0,pu=0,qu=0,ru=0,su=0,tu=0,yu=0,zu=0,Au=0,Bu=0,Cu=0,Du=0,Eu=0,Fu=0,Gu=0,Hu=0,Iu=0,Nu=0,Ou=0,Pu=0,Qu=0,Tu=0,Wu=0,Xu=0,Yu=0;Yu=o,o=o+16|0,(0|o)>=(0|p)&&ca(16),Na=Yu,Vd=a>>>0<245;do{if(Vd){if(Zf=a>>>0<11,ai=a+11|0,dk=-8&ai,gm=Zf?16:dk,lo=gm>>>3,oq=0|f[18817],rs=oq>>>lo,Oa=3&rs,!(0==(0|Oa))){nc=1&rs,yc=1^nc,Jc=yc+lo|0,Uc=Jc<<1,dd=75308+(Uc<<2)|0,od=dd+8|0,zd=0|f[od>>2],Kd=zd+8|0,Wd=0|f[Kd>>2],fe=(0|dd)==(0|Wd);do{if(fe)qe=1<<Jc,Be=-1^qe,Me=oq&Be,f[18817]=Me;else{if(Xe=0|f[18821],gf=Wd>>>0<Xe>>>0,gf&&Ha(),sf=Wd+12|0,Df=0|f[sf>>2],(0|Df)==(0|zd)){f[sf>>2]=dd,f[od>>2]=Wd;break}Ha()}}while(0);return $f=Jc<<3,jg=3|$f,ug=zd+4|0,f[ug>>2]=jg,Fg=zd+$f|0,Qg=Fg+4|0,_g=0|f[Qg>>2],kh=1|_g,f[Qg>>2]=kh,h=Kd,o=Yu,0|h}if(vh=0|f[18819],gm>>>0>vh>>>0){if(!(0==(0|rs))){bi=rs<<lo,mi=2<<lo,xi=0-mi|0,Ii=mi|xi,Ti=bi&Ii,cj=0-Ti|0,nj=Ti&cj,yj=nj+-1|0,Jj=yj>>>12,Uj=16&Jj,ek=yj>>>Uj,pk=ek>>>5,Ak=8&pk,Lk=Ak|Uj,Wk=ek>>>Ak,fl=Wk>>>2,ql=4&fl,Bl=Lk|ql,Ml=Wk>>>ql,Xl=Ml>>>1,hm=2&Xl,sm=Bl|hm,Dm=Ml>>>hm,Om=Dm>>>1,Zm=1&Om,jn=sm|Zm,un=Dm>>>Zm,Fn=jn+un|0,Qn=Fn<<1,_n=75308+(Qn<<2)|0,mo=_n+8|0,xo=0|f[mo>>2],Io=xo+8|0,To=0|f[Io>>2],cp=(0|_n)==(0|To);do{if(cp)np=1<<Fn,yp=-1^np,Jp=oq&yp,f[18817]=Jp,$t=Jp;else{if(Up=0|f[18821],dq=To>>>0<Up>>>0,dq&&Ha(),pq=To+12|0,Aq=0|f[pq>>2],(0|Aq)==(0|xo)){f[pq>>2]=_n,f[mo>>2]=To,$t=oq;break}Ha()}}while(0);return Wq=Fn<<3,fr=Wq-gm|0,qr=3|gm,Br=xo+4|0,f[Br>>2]=qr,Mr=xo+gm|0,Xr=1|fr,gs=Mr+4|0,f[gs>>2]=Xr,ss=Mr+fr|0,f[ss>>2]=fr,Ds=0==(0|vh),Ds||(Os=0|f[18822],Zs=vh>>>3,it=Zs<<1,tt=75308+(it<<2)|0,Et=1<<Zs,Pt=$t&Et,ju=0==(0|Pt),ju?(Pa=$t|Et,f[18817]=Pa,ta=tt+8|0,u=tt,Ea=ta):($a=tt+8|0,jb=0|f[$a>>2],ub=0|f[18821],Fb=jb>>>0<ub>>>0,Fb?Ha():(u=jb,Ea=$a)),f[Ea>>2]=Os,Qb=u+12|0,f[Qb>>2]=Os,$b=Os+8|0,f[$b>>2]=u,_b=Os+12|0,f[_b>>2]=tt),f[18819]=fr,f[18822]=Mr,h=Io,o=Yu,0|h}if(ac=0|f[18818],!(0==(0|ac))){if(dc=0-ac|0,ec=ac&dc,fc=ec+-1|0,gc=fc>>>12,hc=16&gc,ic=fc>>>hc,jc=ic>>>5,kc=8&jc,lc=kc|hc,mc=ic>>>kc,oc=mc>>>2,pc=4&oc,qc=lc|pc,rc=mc>>>pc,sc=rc>>>1,tc=2&sc,uc=qc|tc,vc=rc>>>tc,wc=vc>>>1,xc=1&wc,zc=uc|xc,Ac=vc>>>xc,Bc=zc+Ac|0,Cc=75572+(Bc<<2)|0,Dc=0|f[Cc>>2],Ec=Dc+4|0,Fc=0|f[Ec>>2],Gc=-8&Fc,Hc=Gc-gm|0,Ic=Dc+16|0,Kc=0|f[Ic>>2],Fu=0==(0|Kc),Ja=1&Fu,Lc=(Dc+16|0)+(Ja<<2)|0,Mc=0|f[Lc>>2],0==(0|Mc))n=Dc,r=Hc;else for(q=Dc,s=Hc,Pc=Mc;;){if(Oc=Pc+4|0,Qc=0|f[Oc>>2],Rc=-8&Qc,Sc=Rc-gm|0,Tc=Sc>>>0<s>>>0,c=Tc?Sc:s,b=Tc?Pc:q,Vc=Pc+16|0,Wc=0|f[Vc>>2],yu=0==(0|Wc),Ga=1&yu,Xc=(Pc+16|0)+(Ga<<2)|0,Yc=0|f[Xc>>2],0==(0|Yc)){n=b,r=c;break}q=b,s=c,Pc=Yc}$c=0|f[18821],_c=n>>>0<$c>>>0,_c&&Ha(),ad=n+gm|0,bd=n>>>0<ad>>>0,bd||Ha(),cd=n+24|0,ed=0|f[cd>>2],fd=n+12|0,gd=0|f[fd>>2],hd=(0|gd)==(0|n);do{if(hd){if(sd=n+20|0,td=0|f[sd>>2],0==(0|td)){if(vd=n+16|0,wd=0|f[vd>>2],0==(0|wd)){da=0;break}Q=wd,R=vd}else Q=td,R=sd;for(;;)if(yd=Q+20|0,Ad=0|f[yd>>2],0==(0|Ad)){if(Cd=Q+16|0,Dd=0|f[Cd>>2],0==(0|Dd))break;Q=Dd,R=Cd}else Q=Ad,R=yd;if(!(R>>>0<$c>>>0)){f[R>>2]=0,da=Q;break}Ha()}else{if(id=n+8|0,jd=0|f[id>>2],kd=jd>>>0<$c>>>0,kd&&Ha(),ld=jd+12|0,md=0|f[ld>>2],nd=(0|md)==(0|n),nd||Ha(),pd=gd+8|0,qd=0|f[pd>>2],(0|qd)==(0|n)){f[ld>>2]=gd,f[pd>>2]=jd,da=gd;break}Ha()}}while(0);Gd=0==(0|ed);a:do{if(!Gd){Hd=n+28|0,Id=0|f[Hd>>2],Jd=75572+(Id<<2)|0,Ld=0|f[Jd>>2],Md=(0|n)==(0|Ld);do{if(Md){if(f[Jd>>2]=da,0==(0|da)){Nd=1<<Id,Od=-1^Nd,Pd=ac&Od,f[18818]=Pd;break a}}else{if(Qd=0|f[18821],!(ed>>>0<Qd>>>0)){if(Sd=ed+16|0,Td=0|f[Sd>>2],Du=(0|Td)!=(0|n),Ka=1&Du,Ud=(ed+16|0)+(Ka<<2)|0,f[Ud>>2]=da,0==(0|da))break a;break}Ha()}}while(0);Yd=0|f[18821],Zd=da>>>0<Yd>>>0,Zd&&Ha(),$d=da+24|0,f[$d>>2]=ed,_d=n+16|0,ae=0|f[_d>>2],be=0==(0|ae);do{if(!be){if(!(ae>>>0<Yd>>>0)){de=da+16|0,f[de>>2]=ae,ee=ae+24|0,f[ee>>2]=da;break}Ha()}}while(0);if(ge=n+20|0,he=0|f[ge>>2],!(0==(0|he))){if(je=0|f[18821],!(he>>>0<je>>>0)){le=da+20|0,f[le>>2]=he,me=he+24|0,f[me>>2]=da;break}Ha()}}}while(0);return ne=r>>>0<16,ne?(oe=r+gm|0,pe=3|oe,re=n+4|0,f[re>>2]=pe,se=n+oe|0,te=se+4|0,ue=0|f[te>>2],ve=1|ue,f[te>>2]=ve):(we=3|gm,xe=n+4|0,f[xe>>2]=we,ye=1|r,ze=ad+4|0,f[ze>>2]=ye,Ae=ad+r|0,f[Ae>>2]=r,Ce=0==(0|vh),Ce||(De=0|f[18822],Ee=vh>>>3,Fe=Ee<<1,Ge=75308+(Fe<<2)|0,He=1<<Ee,Ie=oq&He,Je=0==(0|Ie),Je?(Ke=oq|He,f[18817]=Ke,ua=Ge+8|0,m=Ge,Ca=ua):(Le=Ge+8|0,Ne=0|f[Le>>2],Oe=0|f[18821],Pe=Ne>>>0<Oe>>>0,Pe?Ha():(m=Ne,Ca=Le)),f[Ca>>2]=De,Qe=m+12|0,f[Qe>>2]=De,Re=De+8|0,f[Re>>2]=m,Se=De+12|0,f[Se>>2]=Ge),f[18819]=r,f[18822]=ad),Te=n+8|0,h=Te,o=Yu,0|h}t=gm}else t=gm}else if(a>>>0>4294967231)t=-1;else if(Ve=a+11|0,We=-8&Ve,Ye=0|f[18818],0==(0|Ye))t=We;else{$e=0-We|0,_e=Ve>>>8,af=0==(0|_e),af?K=0:(bf=We>>>0>16777215,bf?K=31:(cf=_e+1048320|0,df=cf>>>16,ef=8&df,ff=_e<<ef,hf=ff+520192|0,jf=hf>>>16,kf=4&jf,lf=kf|ef,mf=ff<<kf,nf=mf+245760|0,of=nf>>>16,pf=2&of,qf=lf|pf,rf=14-qf|0,tf=mf<<pf,uf=tf>>>15,vf=rf+uf|0,wf=vf<<1,xf=vf+7|0,yf=We>>>xf,zf=1&yf,Af=zf|wf,K=Af)),Bf=75572+(K<<2)|0,Cf=0|f[Bf>>2],Ef=0==(0|Cf);a:if(Ef)ba=0,fa=0,ga=$e,Xu=81;else for(Ff=31==(0|K),Gf=K>>>1,Hf=25-Gf|0,If=Ff?0:Hf,Jf=We<<If,F=0,I=$e,J=Cf,M=Jf,O=0;;){if(Kf=J+4|0,Lf=0|f[Kf>>2],Mf=-8&Lf,Nf=Mf-We|0,Nf>>>0<I>>>0){if(0==(0|Nf)){ka=J,na=0,qa=J,Xu=85;break a}V=J,W=Nf}else V=F,W=I;if(Rf=J+20|0,Sf=0|f[Rf>>2],Tf=M>>>31,Uf=(J+16|0)+(Tf<<2)|0,Vf=0|f[Uf>>2],Wf=0==(0|Sf),Xf=(0|Sf)==(0|Vf),Qu=Wf|Xf,X=Qu?O:Sf,Yf=0==(0|Vf),Hu=1^Yf,_f=1&Hu,L=M<<_f,Yf){ba=X,fa=V,ga=W,Xu=81;break}F=V,I=W,J=Vf,M=L,O=X}if(81==(0|Xu)){if(ag=0==(0|ba),bg=0==(0|fa),ag&bg){if(cg=2<<K,dg=0-cg|0,eg=cg|dg,fg=Ye&eg,0==(0|fg)){t=We;break}hg=0-fg|0,ig=fg&hg,kg=ig+-1|0,lg=kg>>>12,mg=16&lg,ng=kg>>>mg,og=ng>>>5,pg=8&og,qg=pg|mg,rg=ng>>>pg,sg=rg>>>2,tg=4&sg,vg=qg|tg,wg=rg>>>tg,xg=wg>>>1,yg=2&xg,zg=vg|yg,Ag=wg>>>yg,Bg=Ag>>>1,Cg=1&Bg,Dg=zg|Cg,Eg=Ag>>>Cg,Gg=Dg+Eg|0,Hg=75572+(Gg<<2)|0,Ig=0|f[Hg>>2],ja=0,pa=Ig}else ja=fa,pa=ba;Jg=0==(0|pa),Jg?(ia=ja,ma=ga):(ka=ja,na=ga,qa=pa,Xu=85)}if(85==(0|Xu))for(;;){if(Xu=0,Kg=qa+4|0,Lg=0|f[Kg>>2],Mg=-8&Lg,Ng=Mg-We|0,Og=Ng>>>0<na>>>0,e=Og?Ng:na,oa=Og?qa:ka,Pg=qa+16|0,Rg=0|f[Pg>>2],Eu=0==(0|Rg),La=1&Eu,Sg=(qa+16|0)+(La<<2)|0,Tg=0|f[Sg>>2],0==(0|Tg)){ia=oa,ma=e;break}ka=oa,na=e,qa=Tg,Xu=85}if(0==(0|ia))t=We;else{if(Wg=0|f[18819],Xg=Wg-We|0,ma>>>0<Xg>>>0){Zg=0|f[18821],$g=ia>>>0<Zg>>>0,$g&&Ha(),ah=ia+We|0,bh=ia>>>0<ah>>>0,bh||Ha(),ch=ia+24|0,dh=0|f[ch>>2],eh=ia+12|0,fh=0|f[eh>>2],gh=(0|fh)==(0|ia);do{if(gh){if(rh=ia+20|0,sh=0|f[rh>>2],0==(0|sh)){if(uh=ia+16|0,wh=0|f[uh>>2],0==(0|wh)){ha=0;break}Y=wh,Z=uh}else Y=sh,Z=rh;for(;;)if(yh=Y+20|0,zh=0|f[yh>>2],0==(0|zh)){if(Bh=Y+16|0,Ch=0|f[Bh>>2],0==(0|Ch))break;Y=Ch,Z=Bh}else Y=zh,Z=yh;if(!(Z>>>0<Zg>>>0)){f[Z>>2]=0,ha=Y;break}Ha()}else{if(hh=ia+8|0,ih=0|f[hh>>2],jh=ih>>>0<Zg>>>0,jh&&Ha(),lh=ih+12|0,mh=0|f[lh>>2],nh=(0|mh)==(0|ia),nh||Ha(),oh=fh+8|0,ph=0|f[oh>>2],(0|ph)==(0|ia)){f[lh>>2]=fh,f[oh>>2]=ih,ha=fh;break}Ha()}}while(0);Fh=0==(0|dh);a:do{if(Fh)zj=Ye;else{Hh=ia+28|0,Ih=0|f[Hh>>2],Jh=75572+(Ih<<2)|0,Kh=0|f[Jh>>2],Lh=(0|ia)==(0|Kh);do{if(Lh){if(f[Jh>>2]=ha,0==(0|ha)){Mh=1<<Ih,Nh=-1^Mh,Oh=Ye&Nh,f[18818]=Oh,zj=Oh;break a}}else{if(Ph=0|f[18821],!(dh>>>0<Ph>>>0)){if(Sh=dh+16|0,Th=0|f[Sh>>2],Bu=(0|Th)!=(0|ia),Ma=1&Bu,Uh=(dh+16|0)+(Ma<<2)|0,f[Uh>>2]=ha,0==(0|ha)){zj=Ye;break a}break}Ha()}}while(0);Wh=0|f[18821],Xh=ha>>>0<Wh>>>0,Xh&&Ha(),Yh=ha+24|0,f[Yh>>2]=dh,Zh=ia+16|0,$h=0|f[Zh>>2],_h=0==(0|$h);do{if(!_h){if(!($h>>>0<Wh>>>0)){di=ha+16|0,f[di>>2]=$h,ei=$h+24|0,f[ei>>2]=ha;break}Ha()}}while(0);if(fi=ia+20|0,gi=0|f[fi>>2],0==(0|gi))zj=Ye;else{if(ii=0|f[18821],!(gi>>>0<ii>>>0)){ki=ha+20|0,f[ki>>2]=gi,li=gi+24|0,f[li>>2]=ha,zj=Ye;break}Ha()}}}while(0);ni=ma>>>0<16;do{if(ni)oi=ma+We|0,pi=3|oi,qi=ia+4|0,f[qi>>2]=pi,ri=ia+oi|0,si=ri+4|0,ti=0|f[si>>2],ui=1|ti,f[si>>2]=ui;else{if(vi=3|We,wi=ia+4|0,f[wi>>2]=vi,yi=1|ma,zi=ah+4|0,f[zi>>2]=yi,Ai=ah+ma|0,f[Ai>>2]=ma,Bi=ma>>>3,ma>>>0<256){Di=Bi<<1,Ei=75308+(Di<<2)|0,Fi=0|f[18817],Gi=1<<Bi,Hi=Fi&Gi,Ji=0==(0|Hi),Ji?(Ki=Fi|Gi,f[18817]=Ki,xa=Ei+8|0,P=Ei,Ba=xa):(Li=Ei+8|0,Mi=0|f[Li>>2],Ni=0|f[18821],Oi=Mi>>>0<Ni>>>0,Oi?Ha():(P=Mi,Ba=Li)),f[Ba>>2]=ah,Pi=P+12|0,f[Pi>>2]=ah,Qi=ah+8|0,f[Qi>>2]=P,Ri=ah+12|0,f[Ri>>2]=Ei;break}if(Si=ma>>>8,Ui=0==(0|Si),Ui?N=0:(Vi=ma>>>0>16777215,Vi?N=31:(Wi=Si+1048320|0,Xi=Wi>>>16,Yi=8&Xi,Zi=Si<<Yi,$i=Zi+520192|0,_i=$i>>>16,aj=4&_i,bj=aj|Yi,dj=Zi<<aj,ej=dj+245760|0,fj=ej>>>16,gj=2&fj,hj=bj|gj,ij=14-hj|0,jj=dj<<gj,kj=jj>>>15,lj=ij+kj|0,mj=lj<<1,oj=lj+7|0,pj=ma>>>oj,qj=1&pj,rj=qj|mj,N=rj)),sj=75572+(N<<2)|0,tj=ah+28|0,f[tj>>2]=N,uj=ah+16|0,vj=uj+4|0,f[vj>>2]=0,f[uj>>2]=0,wj=1<<N,xj=zj&wj,0==(0|xj)){Bj=zj|wj,f[18818]=Bj,f[sj>>2]=ah,Cj=ah+24|0,f[Cj>>2]=sj,Dj=ah+12|0,f[Dj>>2]=ah,Ej=ah+8|0,f[Ej>>2]=ah;break}for(Fj=0|f[sj>>2],Gj=31==(0|N),Hj=N>>>1,Ij=25-Hj|0,Kj=Gj?0:Ij,Lj=ma<<Kj,G=Lj,H=Fj;;){if(Mj=H+4|0,Nj=0|f[Mj>>2],Oj=-8&Nj,(0|Oj)==(0|ma)){Xu=139;break}if(Qj=G>>>31,Rj=(H+16|0)+(Qj<<2)|0,Sj=G<<1,Tj=0|f[Rj>>2],0==(0|Tj)){Xu=136;break}G=Sj,H=Tj}if(136==(0|Xu)){if(Wj=0|f[18821],!(Rj>>>0<Wj>>>0)){f[Rj>>2]=ah,Yj=ah+24|0,f[Yj>>2]=H,Zj=ah+12|0,f[Zj>>2]=ah,$j=ah+8|0,f[$j>>2]=ah;break}Ha()}else if(139==(0|Xu)){if(_j=H+8|0,ak=0|f[_j>>2],bk=0|f[18821],ck=ak>>>0>=bk>>>0,Iu=H>>>0>=bk>>>0,ck&Iu){gk=ak+12|0,f[gk>>2]=ah,f[_j>>2]=ah,hk=ah+8|0,f[hk>>2]=ak,ik=ah+12|0,f[ik>>2]=H,jk=ah+24|0,f[jk>>2]=0;break}Ha()}}}while(0);return kk=ia+8|0,h=kk,o=Yu,0|h}t=We}}}while(0);if(lk=0|f[18819],!(lk>>>0<t>>>0))return nk=lk-t|0,ok=0|f[18822],qk=nk>>>0>15,qk?(rk=ok+t|0,f[18822]=rk,f[18819]=nk,sk=1|nk,tk=rk+4|0,f[tk>>2]=sk,uk=rk+nk|0,f[uk>>2]=nk,vk=3|t,wk=ok+4|0,f[wk>>2]=vk):(f[18819]=0,f[18822]=0,xk=3|lk,yk=ok+4|0,f[yk>>2]=xk,zk=ok+lk|0,Bk=zk+4|0,Ck=0|f[Bk>>2],Dk=1|Ck,f[Bk>>2]=Dk),Ek=ok+8|0,h=Ek,o=Yu,0|h;if(Fk=0|f[18820],Fk>>>0>t>>>0)return Hk=Fk-t|0,f[18820]=Hk,Ik=0|f[18823],Jk=Ik+t|0,f[18823]=Jk,Kk=1|Hk,Mk=Jk+4|0,f[Mk>>2]=Kk,Nk=3|t,Ok=Ik+4|0,f[Ok>>2]=Nk,Pk=Ik+8|0,h=Pk,o=Yu,0|h;if(Qk=0|f[18935],Rk=0==(0|Qk),Rk?(f[18937]=4096,f[18936]=4096,f[18938]=-1,f[18939]=-1,f[18940]=0,f[18928]=0,Sk=Na,Tk=-16&Sk,Uk=1431655768^Tk,f[Na>>2]=Uk,f[18935]=Uk,Zk=4096):(ya=0|f[18937],Zk=ya),Vk=t+48|0,Xk=t+47|0,Yk=Zk+Xk|0,$k=0-Zk|0,_k=Yk&$k,!(_k>>>0>t>>>0))return h=0,o=Yu,0|h;if(bl=0|f[18927],!(0==(0|bl))&&(dl=0|f[18925],el=dl+_k|0,gl=el>>>0<=dl>>>0,hl=el>>>0>bl>>>0,gl|hl))return h=0,o=Yu,0|h;il=0|f[18928],jl=4&il,kl=0==(0|jl);a:if(kl){ll=0|f[18823],ml=0==(0|ll);b:if(ml)Xu=163;else{for(i=75716;;){if(nl=0|f[i>>2],!(nl>>>0>ll>>>0)&&(pl=i+4|0,rl=0|f[pl>>2],sl=nl+rl|0,sl>>>0>ll>>>0))break;if(ul=i+8|0,vl=0|f[ul>>2],0==(0|vl)){Xu=163;break b}i=vl}if(Vl=Yk-Fk|0,Wl=Vl&$k,Wl>>>0<2147483647)if(Zl=0|Zw(0|Wl),$l=0|f[i>>2],_l=0|f[pl>>2],am=$l+_l|0,(0|Zl)==(0|am)){if(!(-1==(0|Zl))){ra=Wl,sa=Zl,Xu=180;break a}$=Wl}else _=Zl,aa=Wl,Xu=171;else $=0}do{if(163==(0|Xu))if(xl=0|Zw(0),-1==(0|xl))$=0;else if(zl=xl,Al=0|f[18936],Cl=Al+-1|0,Dl=Cl&zl,El=0==(0|Dl),Fl=Cl+zl|0,Gl=0-Al|0,Hl=Fl&Gl,Il=Hl-zl|0,Jl=El?0:Il,g=Jl+_k|0,Kl=0|f[18925],Ll=g+Kl|0,Nl=g>>>0>t>>>0,Ol=g>>>0<2147483647,Nl&Ol){if(Pl=0|f[18927],!(0==(0|Pl))&&(Rl=Ll>>>0<=Kl>>>0,Sl=Ll>>>0>Pl>>>0,Rl|Sl)){$=0;break}if(Tl=0|Zw(0|g),(0|Tl)==(0|xl)){ra=g,sa=xl,Xu=180;break a}_=Tl,aa=g,Xu=171}else $=0}while(0);do{if(171==(0|Xu)){if(dm=0-aa|0,em=-1!=(0|_),fm=aa>>>0<2147483647,Wu=fm&em,im=Vk>>>0>aa>>>0,!(im&Wu)){if(-1==(0|_)){$=0;break}ra=aa,sa=_,Xu=180;break a}if(jm=0|f[18937],km=Xk-aa|0,lm=km+jm|0,mm=0-jm|0,nm=lm&mm,!(nm>>>0<2147483647)){ra=aa,sa=_,Xu=180;break a}if(pm=0|Zw(0|nm),-1==(0|pm)){Zw(0|dm),$=0;break}rm=nm+aa|0,ra=rm,sa=_,Xu=180;break a}}while(0);um=0|f[18928],vm=4|um,f[18928]=vm,la=$,Xu=178}else la=0,Xu=178;if(178==(0|Xu)&&_k>>>0<2147483647&&(xm=0|Zw(0|_k),ym=0|Zw(0),zm=-1!=(0|xm),Am=-1!=(0|ym),Tu=zm&Am,Bm=xm>>>0<ym>>>0,Nu=Bm&Tu,Cm=ym,Em=xm,Fm=Cm-Em|0,Gm=t+40|0,Hm=Fm>>>0>Gm>>>0,d=Hm?Fm:la,Ou=1^Nu,Im=-1==(0|xm),Cu=1^Hm,Jm=Im|Cu,Jm|Ou||(ra=d,sa=xm,Xu=180)),180==(0|Xu)){Km=0|f[18925],Lm=Km+ra|0,f[18925]=Lm,Mm=0|f[18926],Nm=Lm>>>0>Mm>>>0,Nm&&(f[18926]=Lm),Pm=0|f[18823],Qm=0==(0|Pm);do{if(Qm){for(Rm=0|f[18821],Sm=0==(0|Rm),Tm=sa>>>0<Rm>>>0,Pu=Sm|Tm,Pu&&(f[18821]=sa),f[18929]=sa,f[18930]=ra,f[18932]=0,Um=0|f[18935],f[18826]=Um,f[18825]=-1,l=0;;){if(Vm=l<<1,Wm=75308+(Vm<<2)|0,Xm=Wm+12|0,f[Xm>>2]=Wm,Ym=Wm+8|0,f[Ym>>2]=Wm,$m=l+1|0,32==(0|$m))break;l=$m}_m=ra+-40|0,an=sa+8|0,bn=an,cn=7&bn,dn=0==(0|cn),en=0-bn|0,fn=7&en,gn=dn?0:fn,hn=sa+gn|0,kn=_m-gn|0,f[18823]=hn,f[18820]=kn,ln=1|kn,mn=hn+4|0,f[mn>>2]=ln,nn=hn+kn|0,on=nn+4|0,f[on>>2]=40,pn=0|f[18939],f[18824]=pn}else{for(z=75716;;){if(qn=0|f[z>>2],rn=z+4|0,sn=0|f[rn>>2],tn=qn+sn|0,(0|sa)==(0|tn)){Xu=190;break}if(wn=z+8|0,xn=0|f[wn>>2],0==(0|xn))break;z=xn}if(190==(0|Xu)&&(zn=z+12|0,An=0|f[zn>>2],Bn=8&An,0==(0|Bn)&&(Dn=Pm>>>0>=qn>>>0,En=Pm>>>0<sa>>>0,En&Dn))){Gn=sn+ra|0,f[rn>>2]=Gn,Hn=0|f[18820],In=Pm+8|0,Jn=In,Kn=7&Jn,Ln=0==(0|Kn),Mn=0-Jn|0,Nn=7&Mn,On=Ln?0:Nn,Pn=Pm+On|0,Rn=ra-On|0,Sn=Hn+Rn|0,f[18823]=Pn,f[18820]=Sn,Tn=1|Sn,Un=Pn+4|0,f[Un>>2]=Tn,Vn=Pn+Sn|0,Wn=Vn+4|0,f[Wn>>2]=40,Xn=0|f[18939],f[18824]=Xn;break}for(Yn=0|f[18821],Zn=sa>>>0<Yn>>>0,Zn?(f[18821]=sa,qp=sa):qp=Yn,$n=sa+ra|0,S=75716;;){if(ao=0|f[S>>2],(0|ao)==(0|$n)){Xu=198;break}if(co=S+8|0,eo=0|f[co>>2],0==(0|eo))break;S=eo}if(198==(0|Xu)&&(go=S+12|0,ho=0|f[go>>2],io=8&ho,0==(0|io))){f[S>>2]=sa,ko=S+4|0,no=0|f[ko>>2],oo=no+ra|0,f[ko>>2]=oo,po=sa+8|0,qo=po,ro=7&qo,so=0==(0|ro),to=0-qo|0,uo=7&to,vo=so?0:uo,wo=sa+vo|0,yo=$n+8|0,zo=yo,Ao=7&zo,Bo=0==(0|Ao),Co=0-zo|0,Do=7&Co,Eo=Bo?0:Do,Fo=$n+Eo|0,Go=Fo,Ho=wo,Jo=Go-Ho|0,Ko=wo+t|0,Lo=Jo-t|0,Mo=3|t,No=wo+4|0,f[No>>2]=Mo,Oo=(0|Fo)==(0|Pm);do{if(Oo)Po=0|f[18820],Qo=Po+Lo|0,f[18820]=Qo,f[18823]=Ko,Ro=1|Qo,So=Ko+4|0,f[So>>2]=Ro;else{if(Uo=0|f[18822],(0|Fo)==(0|Uo)){Wo=0|f[18819],Xo=Wo+Lo|0,f[18819]=Xo,f[18822]=Ko,Yo=1|Xo,Zo=Ko+4|0,f[Zo>>2]=Yo,$o=Ko+Xo|0,f[$o>>2]=Xo;break}if(_o=Fo+4|0,ap=0|f[_o>>2],bp=3&ap,1==(0|bp)){ep=-8&ap,fp=ap>>>3,gp=ap>>>0<256;a:do{if(gp){hp=Fo+8|0,ip=0|f[hp>>2],jp=Fo+12|0,kp=0|f[jp>>2],lp=fp<<1,mp=75308+(lp<<2)|0,op=(0|ip)==(0|mp);do{if(!op){if(pp=ip>>>0<qp>>>0,pp&&Ha(),rp=ip+12|0,sp=0|f[rp>>2],(0|sp)==(0|Fo))break;Ha()}}while(0);if((0|kp)==(0|ip)){vp=1<<fp,wp=-1^vp,xp=0|f[18817],zp=xp&wp,f[18817]=zp;break}Ap=(0|kp)==(0|mp);do{if(Ap)Fa=kp+8|0,Da=Fa;else{if(Bp=kp>>>0<qp>>>0,Bp&&Ha(),Cp=kp+8|0,Dp=0|f[Cp>>2],(0|Dp)==(0|Fo)){Da=Cp;break}Ha()}}while(0);Fp=ip+12|0,f[Fp>>2]=kp,f[Da>>2]=ip}else{Gp=Fo+24|0,Hp=0|f[Gp>>2],Ip=Fo+12|0,Kp=0|f[Ip>>2],Lp=(0|Kp)==(0|Fo);do{if(Lp){if(Wp=Fo+16|0,Xp=Wp+4|0,Yp=0|f[Xp>>2],0==(0|Yp)){if($p=0|f[Wp>>2],0==(0|$p)){ea=0;break}T=$p,U=Wp}else T=Yp,U=Xp;for(;;)if(aq=T+20|0,bq=0|f[aq>>2],0==(0|bq)){if(eq=T+16|0,fq=0|f[eq>>2],0==(0|fq))break;T=fq,U=eq}else T=bq,U=aq;if(!(U>>>0<qp>>>0)){f[U>>2]=0,ea=T;break}Ha()}else{if(Mp=Fo+8|0,Np=0|f[Mp>>2],Op=Np>>>0<qp>>>0,Op&&Ha(),Pp=Np+12|0,Qp=0|f[Pp>>2],Rp=(0|Qp)==(0|Fo),Rp||Ha(),Sp=Kp+8|0,Tp=0|f[Sp>>2],(0|Tp)==(0|Fo)){f[Pp>>2]=Kp,f[Sp>>2]=Np,ea=Kp;break}Ha()}}while(0);if(0==(0|Hp))break;jq=Fo+28|0,kq=0|f[jq>>2],lq=75572+(kq<<2)|0,mq=0|f[lq>>2],nq=(0|Fo)==(0|mq);do{if(nq){if(f[lq>>2]=ea,!(0==(0|ea)))break;qq=1<<kq,rq=-1^qq,sq=0|f[18818],tq=sq&rq,f[18818]=tq;break a}if(uq=0|f[18821],!(Hp>>>0<uq>>>0)){if(wq=Hp+16|0,xq=0|f[wq>>2],Au=(0|xq)!=(0|Fo),Ia=1&Au,yq=(Hp+16|0)+(Ia<<2)|0,f[yq>>2]=ea,0==(0|ea))break a;break}Ha()}while(0);Bq=0|f[18821],Cq=ea>>>0<Bq>>>0,Cq&&Ha(),Dq=ea+24|0,f[Dq>>2]=Hp,Eq=Fo+16|0,Fq=0|f[Eq>>2],Gq=0==(0|Fq);do{if(!Gq){if(!(Fq>>>0<Bq>>>0)){Iq=ea+16|0,f[Iq>>2]=Fq,Jq=Fq+24|0,f[Jq>>2]=ea;break}Ha()}}while(0);if(Kq=Eq+4|0,Mq=0|f[Kq>>2],0==(0|Mq))break;if(Oq=0|f[18821],!(Mq>>>0<Oq>>>0)){Qq=ea+20|0,f[Qq>>2]=Mq,Rq=Mq+24|0,f[Rq>>2]=ea;break}Ha()}}while(0);Sq=Fo+ep|0,Tq=ep+Lo|0,k=Sq,A=Tq}else k=Fo,A=Lo;if(Uq=k+4|0,Vq=0|f[Uq>>2],Xq=-2&Vq,f[Uq>>2]=Xq,Yq=1|A,Zq=Ko+4|0,f[Zq>>2]=Yq,$q=Ko+A|0,f[$q>>2]=A,_q=A>>>3,A>>>0<256){br=_q<<1,cr=75308+(br<<2)|0,dr=0|f[18817],er=1<<_q,gr=dr&er,hr=0==(0|gr);do{if(hr)ir=dr|er,f[18817]=ir,wa=cr+8|0,D=cr,Aa=wa;else{if(jr=cr+8|0,kr=0|f[jr>>2],lr=0|f[18821],!(kr>>>0<lr>>>0)){D=kr,Aa=jr;break}Ha()}}while(0);f[Aa>>2]=Ko,nr=D+12|0,f[nr>>2]=Ko,or=Ko+8|0,f[or>>2]=D,pr=Ko+12|0,f[pr>>2]=cr;break}rr=A>>>8,sr=0==(0|rr);do{if(sr)E=0;else{if(A>>>0>16777215){E=31;break}ur=rr+1048320|0,vr=ur>>>16,wr=8&vr,xr=rr<<wr,yr=xr+520192|0,zr=yr>>>16,Ar=4&zr,Cr=Ar|wr,Dr=xr<<Ar,Er=Dr+245760|0,Fr=Er>>>16,Gr=2&Fr,Hr=Cr|Gr,Ir=14-Hr|0,Jr=Dr<<Gr,Kr=Jr>>>15,Lr=Ir+Kr|0,Nr=Lr<<1,Or=Lr+7|0,Pr=A>>>Or,Qr=1&Pr,Rr=Qr|Nr,E=Rr}}while(0);if(Sr=75572+(E<<2)|0,Tr=Ko+28|0,f[Tr>>2]=E,Ur=Ko+16|0,Vr=Ur+4|0,f[Vr>>2]=0,f[Ur>>2]=0,Wr=0|f[18818],Yr=1<<E,Zr=Wr&Yr,0==(0|Zr)){_r=Wr|Yr,f[18818]=_r,f[Sr>>2]=Ko,as=Ko+24|0,f[as>>2]=Sr,bs=Ko+12|0,f[bs>>2]=Ko,cs=Ko+8|0,f[cs>>2]=Ko;break}for(ds=0|f[Sr>>2],es=31==(0|E),fs=E>>>1,hs=25-fs|0,is=es?0:hs,js=A<<is,B=js,C=ds;;){if(ks=C+4|0,ls=0|f[ks>>2],ms=-8&ls,(0|ms)==(0|A)){Xu=265;break}if(os=B>>>31,ps=(C+16|0)+(os<<2)|0,qs=B<<1,ts=0|f[ps>>2],0==(0|ts)){Xu=262;break}B=qs,C=ts}if(262==(0|Xu)){if(vs=0|f[18821],!(ps>>>0<vs>>>0)){f[ps>>2]=Ko,xs=Ko+24|0,f[xs>>2]=C,ys=Ko+12|0,f[ys>>2]=Ko,zs=Ko+8|0,f[zs>>2]=Ko;break}Ha()}else if(265==(0|Xu)){if(As=C+8|0,Bs=0|f[As>>2],Cs=0|f[18821],Es=Bs>>>0>=Cs>>>0,Gu=C>>>0>=Cs>>>0,Es&Gu){Gs=Bs+12|0,f[Gs>>2]=Ko,f[As>>2]=Ko,Hs=Ko+8|0,f[Hs>>2]=Bs,Is=Ko+12|0,f[Is>>2]=C,Js=Ko+24|0,f[Js>>2]=0;break}Ha()}}}while(0);return Nb=wo+8|0,h=Nb,o=Yu,0|h}for(j=75716;;){if(Ks=0|f[j>>2],!(Ks>>>0>Pm>>>0)&&(Ms=j+4|0,Ns=0|f[Ms>>2],Ps=Ks+Ns|0,Ps>>>0>Pm>>>0))break;Rs=j+8|0,Ss=0|f[Rs>>2],j=Ss}for(Ts=Ps+-47|0,Us=Ts+8|0,Vs=Us,Ws=7&Vs,Xs=0==(0|Ws),Ys=0-Vs|0,$s=7&Ys,_s=Xs?0:$s,at=Ts+_s|0,bt=Pm+16|0,ct=at>>>0<bt>>>0,dt=ct?Pm:at,et=dt+8|0,ft=dt+24|0,gt=ra+-40|0,ht=sa+8|0,jt=ht,kt=7&jt,lt=0==(0|kt),mt=0-jt|0,nt=7&mt,ot=lt?0:nt,pt=sa+ot|0,qt=gt-ot|0,f[18823]=pt,f[18820]=qt,rt=1|qt,st=pt+4|0,f[st>>2]=rt,ut=pt+qt|0,vt=ut+4|0,f[vt>>2]=40,wt=0|f[18939],f[18824]=wt,xt=dt+4|0,f[xt>>2]=27,f[et>>2]=0|f[18929],f[et+4>>2]=0|f[18930],f[et+8>>2]=0|f[18931],f[et+12>>2]=0|f[18932],f[18929]=sa,f[18930]=ra,f[18932]=0,f[18931]=et,zt=ft;;){if(yt=zt+4|0,f[yt>>2]=7,At=zt+8|0,!(At>>>0<Ps>>>0))break;zt=yt}if(!((0|dt)==(0|Pm))){if(Dt=dt,Ft=Pm,Gt=Dt-Ft|0,Ht=0|f[xt>>2],It=-2&Ht,f[xt>>2]=It,Jt=1|Gt,Kt=Pm+4|0,f[Kt>>2]=Jt,f[dt>>2]=Gt,Lt=Gt>>>3,Gt>>>0<256){Nt=Lt<<1,Ot=75308+(Nt<<2)|0,Qt=0|f[18817],Rt=1<<Lt,St=Qt&Rt,Tt=0==(0|St),Tt?(Ut=Qt|Rt,f[18817]=Ut,va=Ot+8|0,x=Ot,za=va):(Vt=Ot+8|0,Wt=0|f[Vt>>2],Xt=0|f[18821],Yt=Wt>>>0<Xt>>>0,Yt?Ha():(x=Wt,za=Vt)),f[za>>2]=Pm,Zt=x+12|0,f[Zt>>2]=Pm,_t=Pm+8|0,f[_t>>2]=x,au=Pm+12|0,f[au>>2]=Ot;break}if(bu=Gt>>>8,cu=0==(0|bu),cu?y=0:(du=Gt>>>0>16777215,du?y=31:(eu=bu+1048320|0,fu=eu>>>16,gu=8&fu,hu=bu<<gu,iu=hu+520192|0,ku=iu>>>16,lu=4&ku,mu=lu|gu,nu=hu<<lu,ou=nu+245760|0,pu=ou>>>16,qu=2&pu,ru=mu|qu,su=14-ru|0,tu=nu<<qu,Qa=tu>>>15,Ra=su+Qa|0,Sa=Ra<<1,Ta=Ra+7|0,Ua=Gt>>>Ta,Va=1&Ua,Wa=Va|Sa,y=Wa)),Xa=75572+(y<<2)|0,Ya=Pm+28|0,f[Ya>>2]=y,Za=Pm+20|0,f[Za>>2]=0,f[bt>>2]=0,_a=0|f[18818],ab=1<<y,bb=_a&ab,0==(0|bb)){db=_a|ab,f[18818]=db,f[Xa>>2]=Pm,eb=Pm+24|0,f[eb>>2]=Xa,fb=Pm+12|0,f[fb>>2]=Pm,gb=Pm+8|0,f[gb>>2]=Pm;break}for(hb=0|f[Xa>>2],ib=31==(0|y),kb=y>>>1,lb=25-kb|0,mb=ib?0:lb,nb=Gt<<mb,v=nb,w=hb;;){if(ob=w+4|0,pb=0|f[ob>>2],qb=-8&pb,(0|qb)==(0|Gt)){Xu=292;break}if(sb=v>>>31,tb=(w+16|0)+(sb<<2)|0,vb=v<<1,wb=0|f[tb>>2],0==(0|wb)){Xu=289;break}v=vb,w=wb}if(289==(0|Xu)){if(yb=0|f[18821],!(tb>>>0<yb>>>0)){f[tb>>2]=Pm,Ab=Pm+24|0,f[Ab>>2]=w,Bb=Pm+12|0,f[Bb>>2]=Pm,Cb=Pm+8|0,f[Cb>>2]=Pm;break}Ha()}else if(292==(0|Xu)){if(Db=w+8|0,Eb=0|f[Db>>2],Gb=0|f[18821],Hb=Eb>>>0>=Gb>>>0,zu=w>>>0>=Gb>>>0,Hb&zu){Jb=Eb+12|0,f[Jb>>2]=Pm,f[Db>>2]=Pm,Kb=Pm+8|0,f[Kb>>2]=Eb,Lb=Pm+12|0,f[Lb>>2]=w,Mb=Pm+24|0,f[Mb>>2]=0;break}Ha()}}}}while(0);if(Ob=0|f[18820],Ob>>>0>t>>>0)return Rb=Ob-t|0,f[18820]=Rb,Sb=0|f[18823],Tb=Sb+t|0,f[18823]=Tb,Ub=1|Rb,Vb=Tb+4|0,f[Vb>>2]=Ub,Wb=3|t,Xb=Sb+4|0,f[Xb>>2]=Wb,Yb=Sb+8|0,h=Yb,o=Yu,0|h}return Zb=0|Ru(),f[Zb>>2]=12,h=0,o=Yu,0|h}function Hw(a){a|=0;var b=0,c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,B=0,C=0,E=0,F=0,G=0,H=0,I=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,X=0,Y=0,Z=0,$=0,_=0,aa=0,ba=0,ca=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ca=0,Ea=0,Fa=0,Ga=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,$a=0,_a=0,ab=0,bb=0,cb=0,db=0,fb=0,gb=0,hb=0,ib=0,kb=0,mb=0,nb=0,pb=0,qb=0,sb=0,tb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Gb=0,Hb=0,Jb=0,Kb=0,Lb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Vb=0,Wb=0,Xb=0,Yb=0,$b=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,yc=0,zc=0,Ac=0,Bc=0,Cc=0,Dc=0,Ec=0,Fc=0,Gc=0,Hc=0,Ic=0,Jc=0,Kc=0,Lc=0,Mc=0,Nc=0,Oc=0,Pc=0,Qc=0,Rc=0,Sc=0,Tc=0,Uc=0,Vc=0,Wc=0,Xc=0,Yc=0,Zc=0,$c=0,_c=0,ad=0,bd=0,cd=0,dd=0,ed=0,fd=0,gd=0,hd=0,id=0,jd=0,kd=0,ld=0,md=0,nd=0,od=0,pd=0,qd=0,rd=0,sd=0,td=0,ud=0,vd=0,wd=0,xd=0,yd=0,zd=0,Ad=0,Cd=0,Dd=0,Ed=0,Fd=0,Hd=0,Id=0,Jd=0,Ld=0,Md=0,Nd=0,Od=0,Pd=0,Qd=0,Rd=0,Td=0,Ud=0,Vd=0,Wd=0,Xd=0,Yd=0,Zd=0,_d=0,ae=0,be=0,ee=0,fe=0,ge=0,he=0,ie=0,je=0,ke=0,le=0,me=0,ne=0,oe=0,pe=0,qe=0,re=0,se=0,te=0,ue=0,ve=0,we=0,xe=0,ye=0,ze=0,Ae=0,Be=0,Ce=0,Ee=0,Fe=0,Ge=0,He=0,Je=0,Le=0,Me=0,Oe=0,Pe=0,Qe=0,Ue=0,Ve=0,We=0,Xe=0,Ye=0,Ze=0,$e=0,_e=0,af=0,bf=0,cf=0,ef=0,ff=0,gf=0,jf=0,kf=0,lf=0,mf=0,nf=0,of=0,pf=0,rf=0,sf=0,tf=0,uf=0,yf=0,zf=0,Af=0,Bf=0;if(o,!(0==(0|a))){Eb=a+-8|0,Hd=0|f[18821],je=Eb>>>0<Hd>>>0,je&&Ha(),ue=a+-4|0,Fe=0|f[ue>>2],Qe=3&Fe,_e=1==(0|Qe),_e&&Ha(),lf=-8&Fe,B=Eb+lf|0,M=1&Fe,X=0==(0|M);a:do{if(X){if(ga=0|f[Eb>>2],0==(0|Qe))return;if(Ca=0-ga|0,Oa=Eb+Ca|0,Za=ga+lf|0,ib=Oa>>>0<Hd>>>0,ib&&Ha(),tb=0|f[18822],(0|Oa)==(0|tb)){if(G=B+4|0,H=0|f[G>>2],I=3&H,!(3==(0|I))){i=Oa,j=Za,Q=Oa;break}return K=Oa+Za|0,L=Oa+4|0,N=1|Za,O=-2&H,f[18819]=Za,f[G>>2]=O,f[L>>2]=N,void(f[K>>2]=Za)}if(Qb=ga>>>3,ga>>>0<256){if(kc=Oa+8|0,vc=0|f[kc>>2],Gc=Oa+12|0,Rc=0|f[Gc>>2],ad=Qb<<1,ld=75308+(ad<<2)|0,wd=(0|vc)==(0|ld),wd||(Id=vc>>>0<Hd>>>0,Id&&Ha(),Td=vc+12|0,be=0|f[Td>>2],(0|be)==(0|Oa)||Ha()),(0|Rc)==(0|vc)){ee=1<<Qb,fe=-1^ee,ge=0|f[18817],he=ge&fe,f[18817]=he,i=Oa,j=Za,Q=Oa;break}ie=(0|Rc)==(0|ld),ie?(x=Rc+8|0,u=x):(ke=Rc>>>0<Hd>>>0,ke&&Ha(),le=Rc+8|0,me=0|f[le>>2],ne=(0|me)==(0|Oa),ne?u=le:Ha()),oe=vc+12|0,f[oe>>2]=Rc,f[u>>2]=vc,i=Oa,j=Za,Q=Oa;break}pe=Oa+24|0,qe=0|f[pe>>2],re=Oa+12|0,se=0|f[re>>2],te=(0|se)==(0|Oa);do{if(te){if(Ee=Oa+16|0,Ge=Ee+4|0,He=0|f[Ge>>2],0==(0|He)){if(Je=0|f[Ee>>2],0==(0|Je)){q=0;break}k=Je,l=Ee}else k=He,l=Ge;for(;;)if(Le=k+20|0,Me=0|f[Le>>2],0==(0|Me)){if(Oe=k+16|0,Pe=0|f[Oe>>2],0==(0|Pe))break;k=Pe,l=Oe}else k=Me,l=Le;if(!(l>>>0<Hd>>>0)){f[l>>2]=0,q=k;break}Ha()}else{if(ve=Oa+8|0,we=0|f[ve>>2],xe=we>>>0<Hd>>>0,xe&&Ha(),ye=we+12|0,ze=0|f[ye>>2],Ae=(0|ze)==(0|Oa),Ae||Ha(),Be=se+8|0,Ce=0|f[Be>>2],(0|Ce)==(0|Oa)){f[ye>>2]=se,f[Be>>2]=we,q=se;break}Ha()}}while(0);if(0==(0|qe))i=Oa,j=Za,Q=Oa;else{Ue=Oa+28|0,Ve=0|f[Ue>>2],We=75572+(Ve<<2)|0,Xe=0|f[We>>2],Ye=(0|Oa)==(0|Xe);do{if(Ye){if(f[We>>2]=q,0==(0|q)){Ze=1<<Ve,$e=-1^Ze,af=0|f[18818],bf=af&$e,f[18818]=bf,i=Oa,j=Za,Q=Oa;break a}}else{if(cf=0|f[18821],!(qe>>>0<cf>>>0)){if(ef=qe+16|0,ff=0|f[ef>>2],zf=(0|ff)!=(0|Oa),y=1&zf,gf=(qe+16|0)+(y<<2)|0,f[gf>>2]=q,0==(0|q)){i=Oa,j=Za,Q=Oa;break a}break}Ha()}}while(0);jf=0|f[18821],kf=q>>>0<jf>>>0,kf&&Ha(),mf=q+24|0,f[mf>>2]=qe,nf=Oa+16|0,of=0|f[nf>>2],pf=0==(0|of);do{if(!pf){if(!(of>>>0<jf>>>0)){rf=q+16|0,f[rf>>2]=of,sf=of+24|0,f[sf>>2]=q;break}Ha()}}while(0);if(tf=nf+4|0,uf=0|f[tf>>2],0==(0|uf))i=Oa,j=Za,Q=Oa;else{if(C=0|f[18821],!(uf>>>0<C>>>0)){E=q+20|0,f[E>>2]=uf,F=uf+24|0,f[F>>2]=q,i=Oa,j=Za,Q=Oa;break}Ha()}}}else i=Eb,j=lf,Q=Eb}while(0);if(P=Q>>>0<B>>>0,P||Ha(),R=B+4|0,S=0|f[R>>2],T=1&S,U=0==(0|T),U&&Ha(),V=2&S,0==(0|V)){if(Y=0|f[18823],Z=(0|B)==(0|Y),$=0|f[18822],Z){if(_=0|f[18820],aa=_+j|0,f[18820]=aa,f[18823]=i,ba=1|aa,ca=i+4|0,f[ca>>2]=ba,!((0|i)==(0|$)))return;return f[18822]=0,void(f[18819]=0)}if((0|B)==(0|$))return fa=0|f[18819],ha=fa+j|0,f[18819]=ha,f[18822]=Q,ia=1|ha,ja=i+4|0,f[ja>>2]=ia,ka=Q+ha|0,void(f[ka>>2]=ha);la=-8&S,ma=la+j|0,na=S>>>3,oa=S>>>0<256;a:do{if(oa){if(pa=B+8|0,qa=0|f[pa>>2],sa=B+12|0,ta=0|f[sa>>2],ua=na<<1,va=75308+(ua<<2)|0,wa=(0|qa)==(0|va),wa||(xa=0|f[18821],ya=qa>>>0<xa>>>0,ya&&Ha(),za=qa+12|0,Aa=0|f[za>>2],(0|Aa)==(0|B)||Ha()),(0|ta)==(0|qa)){Ea=1<<na,Fa=-1^Ea,Ga=0|f[18817],Ia=Ga&Fa,f[18817]=Ia;break}Ja=(0|ta)==(0|va),Ja?(w=ta+8|0,t=w):(Ka=0|f[18821],La=ta>>>0<Ka>>>0,La&&Ha(),Ma=ta+8|0,Na=0|f[Ma>>2],Pa=(0|Na)==(0|B),Pa?t=Ma:Ha()),Qa=qa+12|0,f[Qa>>2]=ta,f[t>>2]=qa}else{Ra=B+24|0,Sa=0|f[Ra>>2],Ta=B+12|0,Ua=0|f[Ta>>2],Va=(0|Ua)==(0|B);do{if(Va){if(fb=B+16|0,gb=fb+4|0,hb=0|f[gb>>2],0==(0|hb)){if(kb=0|f[fb>>2],0==(0|kb)){r=0;break}m=kb,n=fb}else m=hb,n=gb;for(;;)if(mb=m+20|0,nb=0|f[mb>>2],0==(0|nb)){if(pb=m+16|0,qb=0|f[pb>>2],0==(0|qb))break;m=qb,n=pb}else m=nb,n=mb;if(sb=0|f[18821],!(n>>>0<sb>>>0)){f[n>>2]=0,r=m;break}Ha()}else{if(Wa=B+8|0,Xa=0|f[Wa>>2],Ya=0|f[18821],$a=Xa>>>0<Ya>>>0,$a&&Ha(),_a=Xa+12|0,ab=0|f[_a>>2],bb=(0|ab)==(0|B),bb||Ha(),cb=Ua+8|0,db=0|f[cb>>2],(0|db)==(0|B)){f[_a>>2]=Ua,f[cb>>2]=Xa,r=Ua;break}Ha()}}while(0);if(!(0==(0|Sa))){wb=B+28|0,xb=0|f[wb>>2],yb=75572+(xb<<2)|0,zb=0|f[yb>>2],Ab=(0|B)==(0|zb);do{if(Ab){if(f[yb>>2]=r,0==(0|r)){Bb=1<<xb,Cb=-1^Bb,Db=0|f[18818],Gb=Db&Cb,f[18818]=Gb;break a}}else{if(Hb=0|f[18821],!(Sa>>>0<Hb>>>0)){if(Jb=Sa+16|0,Kb=0|f[Jb>>2],yf=(0|Kb)!=(0|B),z=1&yf,Lb=(Sa+16|0)+(z<<2)|0,f[Lb>>2]=r,0==(0|r))break a;break}Ha()}}while(0);Nb=0|f[18821],Ob=r>>>0<Nb>>>0,Ob&&Ha(),Pb=r+24|0,f[Pb>>2]=Sa,Rb=B+16|0,Sb=0|f[Rb>>2],Tb=0==(0|Sb);do{if(!Tb){if(!(Sb>>>0<Nb>>>0)){Vb=r+16|0,f[Vb>>2]=Sb,Wb=Sb+24|0,f[Wb>>2]=r;break}Ha()}}while(0);if(Xb=Rb+4|0,Yb=0|f[Xb>>2],!(0==(0|Yb))){if($b=0|f[18821],!(Yb>>>0<$b>>>0)){bc=r+20|0,f[bc>>2]=Yb,cc=Yb+24|0,f[cc>>2]=r;break}Ha()}}}}while(0);if(dc=1|ma,ec=i+4|0,f[ec>>2]=dc,fc=Q+ma|0,f[fc>>2]=ma,gc=0|f[18822],(0|i)==(0|gc))return void(f[18819]=ma);p=ma}else ic=-2&S,f[R>>2]=ic,jc=1|j,lc=i+4|0,f[lc>>2]=jc,mc=Q+j|0,f[mc>>2]=j,p=j;if(nc=p>>>3,p>>>0<256)return pc=nc<<1,qc=75308+(pc<<2)|0,rc=0|f[18817],sc=1<<nc,tc=rc&sc,uc=0==(0|tc),uc?(wc=rc|sc,f[18817]=wc,s=qc+8|0,h=qc,v=s):(xc=qc+8|0,yc=0|f[xc>>2],zc=0|f[18821],Ac=yc>>>0<zc>>>0,Ac?Ha():(h=yc,v=xc)),f[v>>2]=i,Bc=h+12|0,f[Bc>>2]=i,Cc=i+8|0,f[Cc>>2]=h,Dc=i+12|0,void(f[Dc>>2]=qc);Ec=p>>>8,Fc=0==(0|Ec),Fc?g=0:(Hc=p>>>0>16777215,Hc?g=31:(Ic=Ec+1048320|0,Jc=Ic>>>16,Kc=8&Jc,Lc=Ec<<Kc,Mc=Lc+520192|0,Nc=Mc>>>16,Oc=4&Nc,Pc=Oc|Kc,Qc=Lc<<Oc,Sc=Qc+245760|0,Tc=Sc>>>16,Uc=2&Tc,Vc=Pc|Uc,Wc=14-Vc|0,Xc=Qc<<Uc,Yc=Xc>>>15,Zc=Wc+Yc|0,$c=Zc<<1,_c=Zc+7|0,bd=p>>>_c,cd=1&bd,dd=cd|$c,g=dd)),ed=75572+(g<<2)|0,fd=i+28|0,f[fd>>2]=g,gd=i+16|0,hd=i+20|0,f[hd>>2]=0,f[gd>>2]=0,id=0|f[18818],jd=1<<g,kd=id&jd,md=0==(0|kd);do{if(md)nd=id|jd,f[18818]=nd,f[ed>>2]=i,od=i+24|0,f[od>>2]=ed,pd=i+12|0,f[pd>>2]=i,qd=i+8|0,f[qd>>2]=i;else{for(rd=0|f[ed>>2],sd=31==(0|g),td=g>>>1,ud=25-td|0,vd=sd?0:ud,xd=p<<vd,d=xd,e=rd;;){if(yd=e+4|0,zd=0|f[yd>>2],Ad=-8&zd,(0|Ad)==(0|p)){Bf=124;break}if(Cd=d>>>31,Dd=(e+16|0)+(Cd<<2)|0,Ed=d<<1,Fd=0|f[Dd>>2],0==(0|Fd)){Bf=121;break}d=Ed,e=Fd}if(121==(0|Bf)){if(Jd=0|f[18821],!(Dd>>>0<Jd>>>0)){f[Dd>>2]=i,Ld=i+24|0,f[Ld>>2]=e,Md=i+12|0,f[Md>>2]=i,Nd=i+8|0,f[Nd>>2]=i;break}Ha()}else if(124==(0|Bf)){if(Od=e+8|0,Pd=0|f[Od>>2],Qd=0|f[18821],Rd=Pd>>>0>=Qd>>>0,Af=e>>>0>=Qd>>>0,Rd&Af){Ud=Pd+12|0,f[Ud>>2]=i,f[Od>>2]=i,Vd=i+8|0,f[Vd>>2]=Pd,Wd=i+12|0,f[Wd>>2]=e,Xd=i+24|0,f[Xd>>2]=0;break}Ha()}}}while(0);if(Yd=0|f[18825],Zd=Yd+-1|0,f[18825]=Zd,0==(0|Zd)){for(c=75724;;){if(b=0|f[c>>2],_d=0==(0|b),ae=b+8|0,_d)break;c=ae}f[18825]=-1}}}function Iw(a,b){a|=0,b|=0;var d=0,e=0,h=0,i=0,k=0,l=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,x=0,y=0,z=0,A=0,B=0;return o,0==(0|a)?(v=0|Gw(b),0|v):b>>>0>4294967231?(x=0|Ru(),f[x>>2]=12,0|0):(y=b>>>0<11,z=b+11|0,A=-8&z,B=y?16:A,d=a+-8|0,e=0|Jw(d,B),0==(0|e)?(i=0|Gw(b),0==(0|i)?0|0:(k=a+-4|0,l=0|f[k>>2],m=-8&l,n=3&l,q=0==(0|n),r=q?8:4,s=m-r|0,t=s>>>0<b>>>0,u=t?s:b,$w(0|i,0|a,0|u),Hw(a),0|i)):(h=e+8|0,0|h))}function Jw(a,b){a|=0,b|=0;var c=0,d=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,A=0,B=0,C=0,E=0,G=0,H=0,I=0,K=0,L=0,P=0,Q=0,R=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,aa=0,ca=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,la=0,ma=0,na=0,oa=0,pa=0,ra=0,ta=0,ua=0,va=0,wa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Ua=0,Wa=0,Xa=0,Ya=0,Za=0,$a=0,_a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,ub=0,vb=0,wb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Ub=0,Vb=0,Xb=0,Yb=0,Zb=0,$b=0,_b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,yc=0,zc=0,Ac=0,Bc=0,Cc=0,Dc=0,Ec=0;if(o,Ra=a+4|0,ab=0|f[Ra>>2],lb=-8&ab,wb=a+lb|0,Hb=0|f[18821],Sb=3&ab,zc=a>>>0>=Hb>>>0,Ac=1!=(0|Sb),Bc=Ac&zc,bc=a>>>0<wb>>>0,Cc=Bc&bc,Cc||Ha(),mc=wb+4|0,k=0|f[mc>>2],w=1&k,H=0==(0|w),H&&Ha(),0==(0|Sb))return b>>>0<256?0|0:(ma=b+4|0,lb>>>0<ma>>>0||(Ja=lb-b|0,Pa=0|f[18937],Qa=Pa<<1,Ja>>>0>Qa>>>0)?0|0:0|a);if(!(lb>>>0<b>>>0))return Ua=lb-b|0,Ua>>>0>15?(Wa=a+b|0,Xa=1&ab,Ya=Xa|b,Za=2|Ya,f[Ra>>2]=Za,$a=Wa+4|0,_a=3|Ua,f[$a>>2]=_a,bb=Wa+Ua|0,cb=bb+4|0,db=0|f[cb>>2],eb=1|db,f[cb>>2]=eb,Kw(Wa,Ua),0|a):0|a;if(fb=0|f[18823],(0|wb)==(0|fb))return hb=0|f[18820],ib=hb+lb|0,jb=ib>>>0>b>>>0,kb=ib-b|0,mb=a+b|0,jb?(nb=1|kb,ob=mb+4|0,pb=1&ab,qb=pb|b,rb=2|qb,f[Ra>>2]=rb,f[ob>>2]=nb,f[18823]=mb,f[18820]=kb,0|a):0|0;if(sb=0|f[18822],(0|wb)==(0|sb))return ub=0|f[18819],vb=ub+lb|0,vb>>>0<b>>>0?0|0:(yb=vb-b|0,zb=yb>>>0>15,Ab=1&ab,zb?(Bb=a+b|0,Cb=Bb+yb|0,Db=Ab|b,Eb=2|Db,f[Ra>>2]=Eb,Fb=Bb+4|0,Gb=1|yb,f[Fb>>2]=Gb,f[Cb>>2]=yb,Ib=Cb+4|0,Jb=0|f[Ib>>2],Kb=-2&Jb,f[Ib>>2]=Kb,Dc=Bb,Ec=yb):(Lb=Ab|vb,Mb=2|Lb,f[Ra>>2]=Mb,Nb=a+vb|0,Ob=Nb+4|0,Pb=0|f[Ob>>2],Qb=1|Pb,f[Ob>>2]=Qb,Dc=0,Ec=0),f[18819]=Ec,f[18822]=Dc,0|a);if(Rb=2&k,!(0==(0|Rb)))return 0|0;if(Ub=-8&k,Vb=Ub+lb|0,Vb>>>0<b>>>0)return 0|0;Xb=Vb-b|0,Yb=k>>>3,Zb=k>>>0<256;a:do{if(Zb){if($b=wb+8|0,_b=0|f[$b>>2],ac=wb+12|0,cc=0|f[ac>>2],dc=Yb<<1,ec=75308+(dc<<2)|0,fc=(0|_b)==(0|ec),fc||(gc=_b>>>0<Hb>>>0,gc&&Ha(),hc=_b+12|0,ic=0|f[hc>>2],(0|ic)==(0|wb)||Ha()),(0|cc)==(0|_b)){lc=1<<Yb,nc=-1^lc,oc=0|f[18817],pc=oc&nc,f[18817]=pc;break}qc=(0|cc)==(0|ec),qc?(h=cc+8|0,i=h):(rc=cc>>>0<Hb>>>0,rc&&Ha(),sc=cc+8|0,tc=0|f[sc>>2],uc=(0|tc)==(0|wb),uc?i=sc:Ha()),vc=_b+12|0,f[vc>>2]=cc,f[i>>2]=_b}else{wc=wb+24|0,l=0|f[wc>>2],m=wb+12|0,n=0|f[m>>2],p=(0|n)==(0|wb);do{if(p){if(A=wb+16|0,B=A+4|0,C=0|f[B>>2],0==(0|C)){if(E=0|f[A>>2],0==(0|E)){g=0;break}c=E,d=A}else c=C,d=B;for(;;)if(G=c+20|0,I=0|f[G>>2],0==(0|I)){if(K=c+16|0,L=0|f[K>>2],0==(0|L))break;c=L,d=K}else c=I,d=G;if(!(d>>>0<Hb>>>0)){f[d>>2]=0,g=c;break}Ha()}else{if(q=wb+8|0,r=0|f[q>>2],s=r>>>0<Hb>>>0,s&&Ha(),t=r+12|0,u=0|f[t>>2],v=(0|u)==(0|wb),v||Ha(),x=n+8|0,y=0|f[x>>2],(0|y)==(0|wb)){f[t>>2]=n,f[x>>2]=r,g=n;break}Ha()}}while(0);if(!(0==(0|l))){P=wb+28|0,Q=0|f[P>>2],R=75572+(Q<<2)|0,T=0|f[R>>2],U=(0|wb)==(0|T);do{if(U){if(f[R>>2]=g,0==(0|g)){V=1<<Q,W=-1^V,X=0|f[18818],Y=X&W,f[18818]=Y;break a}}else{if(Z=0|f[18821],!(l>>>0<Z>>>0)){if(_=l+16|0,aa=0|f[_>>2],yc=(0|aa)!=(0|wb),j=1&yc,ca=(l+16|0)+(j<<2)|0,f[ca>>2]=g,0==(0|g))break a;break}Ha()}}while(0);ea=0|f[18821],fa=g>>>0<ea>>>0,fa&&Ha(),ga=g+24|0,f[ga>>2]=l,ha=wb+16|0,ia=0|f[ha>>2],ja=0==(0|ia);do{if(!ja){if(!(ia>>>0<ea>>>0)){la=g+16|0,f[la>>2]=ia,na=ia+24|0,f[na>>2]=g;break}Ha()}}while(0);if(oa=ha+4|0,pa=0|f[oa>>2],!(0==(0|pa))){if(ra=0|f[18821],!(pa>>>0<ra>>>0)){ta=g+20|0,f[ta>>2]=pa,ua=pa+24|0,f[ua>>2]=g;break}Ha()}}}}while(0);return va=Xb>>>0<16,wa=1&ab,va?(ya=Vb|wa,za=2|ya,f[Ra>>2]=za,Aa=a+Vb|0,Ba=Aa+4|0,Ca=0|f[Ba>>2],Da=1|Ca,f[Ba>>2]=Da,0|a):(Ea=a+b|0,Fa=wa|b,Ga=2|Fa,f[Ra>>2]=Ga,Ia=Ea+4|0,Ka=3|Xb,f[Ia>>2]=Ka,La=Ea+Xb|0,Ma=La+4|0,Na=0|f[Ma>>2],Oa=1|Na,f[Ma>>2]=Oa,Kw(Ea,Xb),0|a)}function Kw(a,b){a|=0,b|=0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,Z=0,$=0,_=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ia=0,Ja=0,Ka=0,La=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Va=0,Wa=0,Xa=0,Ya=0,$a=0,ab=0,bb=0,db=0,eb=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,vb=0,wb=0,xb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Ib=0,Jb=0,Kb=0,Lb=0,Nb=0,Ob=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Xb=0,Yb=0,Zb=0,$b=0,_b=0,ac=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,yc=0,zc=0,Ac=0,Bc=0,Cc=0,Dc=0,Ec=0,Fc=0,Gc=0,Hc=0,Ic=0,Jc=0,Kc=0,Lc=0,Mc=0,Nc=0,Oc=0,Pc=0,Qc=0,Rc=0,Sc=0,Tc=0,Uc=0,Vc=0,Wc=0,Xc=0,Yc=0,Zc=0,$c=0,ad=0,bd=0,cd=0,dd=0,ed=0,fd=0,gd=0,hd=0,id=0,jd=0,kd=0,ld=0,md=0,nd=0,pd=0,qd=0,rd=0,sd=0,vd=0,wd=0,xd=0,yd=0,zd=0,Ad=0,Bd=0,Cd=0,Dd=0,Ed=0,Fd=0,Hd=0,Id=0,Jd=0,Kd=0,Ld=0,Md=0,Nd=0,Od=0,Pd=0,Qd=0,Rd=0,Sd=0,Td=0,Ud=0,Vd=0,Wd=0,Xd=0,Yd=0,Zd=0,$d=0,_d=0,ae=0,be=0,ce=0,de=0,ee=0,fe=0,ge=0,he=0,je=0,ke=0,le=0,ne=0,oe=0,qe=0,re=0,te=0,ue=0,ye=0,ze=0,Ae=0,Be=0,Ce=0,De=0,Ee=0,Fe=0,Ge=0,He=0,Ie=0,Ke=0,Le=0,Me=0,Ne=0,Pe=0,Qe=0,Re=0,Se=0,Te=0,Ue=0,Xe=0,Ye=0,Ze=0,$e=0,af=0,cf=0,df=0,gf=0,hf=0,jf=0,kf=0;Cb=a+b|0,Fd=a+4|0,Ud=0|f[Fd>>2],de=1&Ud,oe=0==(0|de);a:do{if(oe){if(ze=0|f[a>>2],Ke=3&Ud,0==(0|Ke))return;if(z=0-ze|0,K=a+z|0,V=ze+b|0,ea=0|f[18821],pa=K>>>0<ea>>>0,pa&&Ha(),Aa=0|f[18822],(0|K)==(0|Aa)){if(A=Cb+4|0,B=0|f[A>>2],C=3&B,!(3==(0|C))){h=K,i=V;break}return E=K+V|0,F=K+4|0,G=1|V,H=-2&B,f[18819]=V,f[A>>2]=H,f[F>>2]=G,void(f[E>>2]=V)}if(Xa=ze>>>3,ze>>>0<256){if(rb=K+8|0,Db=0|f[rb>>2],Ob=K+12|0,Zb=0|f[Ob>>2],ic=Xa<<1,tc=75308+(ic<<2)|0,Ec=(0|Db)==(0|tc),Ec||(Pc=Db>>>0<ea>>>0,Pc&&Ha(),$c=Db+12|0,jd=0|f[$c>>2],(0|jd)==(0|K)||Ha()),(0|Zb)==(0|Db)){Ld=1<<Xa,Md=-1^Ld,Nd=0|f[18817],Od=Nd&Md,f[18817]=Od,h=K,i=V;break}Pd=(0|Zb)==(0|tc),Pd?(w=Zb+8|0,t=w):(Qd=Zb>>>0<ea>>>0,Qd&&Ha(),Rd=Zb+8|0,Sd=0|f[Rd>>2],Td=(0|Sd)==(0|K),Td?t=Rd:Ha()),Vd=Db+12|0,f[Vd>>2]=Zb,f[t>>2]=Db,h=K,i=V;break}Wd=K+24|0,Xd=0|f[Wd>>2],Yd=K+12|0,Zd=0|f[Yd>>2],$d=(0|Zd)==(0|K);do{if($d){if(je=K+16|0,ke=je+4|0,le=0|f[ke>>2],0==(0|le)){if(ne=0|f[je>>2],0==(0|ne)){p=0;break}j=ne,k=je}else j=le,k=ke;for(;;)if(qe=j+20|0,re=0|f[qe>>2],0==(0|re)){if(te=j+16|0,ue=0|f[te>>2],0==(0|ue))break;j=ue,k=te}else j=re,k=qe;if(!(k>>>0<ea>>>0)){f[k>>2]=0,p=j;break}Ha()}else{if(_d=K+8|0,ae=0|f[_d>>2],be=ae>>>0<ea>>>0,be&&Ha(),ce=ae+12|0,ee=0|f[ce>>2],fe=(0|ee)==(0|K),fe||Ha(),ge=Zd+8|0,he=0|f[ge>>2],(0|he)==(0|K)){f[ce>>2]=Zd,f[ge>>2]=ae,p=Zd;break}Ha()}}while(0);if(0==(0|Xd))h=K,i=V;else{ye=K+28|0,Ae=0|f[ye>>2],Be=75572+(Ae<<2)|0,Ce=0|f[Be>>2],De=(0|K)==(0|Ce);do{if(De){if(f[Be>>2]=p,0==(0|p)){Ee=1<<Ae,Fe=-1^Ee,Ge=0|f[18818],He=Ge&Fe,f[18818]=He,h=K,i=V;break a}}else{if(Ie=0|f[18821],!(Xd>>>0<Ie>>>0)){if(Le=Xd+16|0,Me=0|f[Le>>2],hf=(0|Me)!=(0|K),x=1&hf,Ne=(Xd+16|0)+(x<<2)|0,f[Ne>>2]=p,0==(0|p)){h=K,i=V;break a}break}Ha()}}while(0);Pe=0|f[18821],Qe=p>>>0<Pe>>>0,Qe&&Ha(),Re=p+24|0,f[Re>>2]=Xd,Se=K+16|0,Te=0|f[Se>>2],Ue=0==(0|Te);do{if(!Ue){if(!(Te>>>0<Pe>>>0)){Xe=p+16|0,f[Xe>>2]=Te,Ye=Te+24|0,f[Ye>>2]=p;break}Ha()}}while(0);if(Ze=Se+4|0,$e=0|f[Ze>>2],0==(0|$e))h=K,i=V;else{if(af=0|f[18821],!($e>>>0<af>>>0)){cf=p+20|0,f[cf>>2]=$e,df=$e+24|0,f[df>>2]=p,h=K,i=V;break}Ha()}}}else h=a,i=b}while(0);if(I=0|f[18821],J=Cb>>>0<I>>>0,J&&Ha(),L=Cb+4|0,M=0|f[L>>2],N=2&M,0==(0|N)){if(P=0|f[18823],Q=(0|Cb)==(0|P),R=0|f[18822],Q){if(S=0|f[18820],T=S+i|0,f[18820]=T,f[18823]=h,U=1|T,W=h+4|0,f[W>>2]=U,!((0|h)==(0|R)))return;return f[18822]=0,void(f[18819]=0)}if((0|Cb)==(0|R))return Z=0|f[18819],$=Z+i|0,f[18819]=$,f[18822]=h,_=1|$,aa=h+4|0,f[aa>>2]=_,ba=h+$|0,void(f[ba>>2]=$);ca=-8&M,da=ca+i|0,fa=M>>>3,ga=M>>>0<256;a:do{if(ga){if(ha=Cb+8|0,ia=0|f[ha>>2],ja=Cb+12|0,ka=0|f[ja>>2],la=fa<<1,ma=75308+(la<<2)|0,na=(0|ia)==(0|ma),na||(oa=ia>>>0<I>>>0,oa&&Ha(),qa=ia+12|0,ra=0|f[qa>>2],(0|ra)==(0|Cb)||Ha()),(0|ka)==(0|ia)){ua=1<<fa,va=-1^ua,wa=0|f[18817],xa=wa&va,f[18817]=xa;break}ya=(0|ka)==(0|ma),ya?(v=ka+8|0,s=v):(za=ka>>>0<I>>>0,za&&Ha(),Ba=ka+8|0,Ca=0|f[Ba>>2],Da=(0|Ca)==(0|Cb),Da?s=Ba:Ha()),Ea=ia+12|0,f[Ea>>2]=ka,f[s>>2]=ia}else{Fa=Cb+24|0,Ga=0|f[Fa>>2],Ia=Cb+12|0,Ja=0|f[Ia>>2],Ka=(0|Ja)==(0|Cb);do{if(Ka){if(Va=Cb+16|0,Wa=Va+4|0,Ya=0|f[Wa>>2],0==(0|Ya)){if($a=0|f[Va>>2],0==(0|$a)){q=0;break}l=$a,m=Va}else l=Ya,m=Wa;for(;;)if(ab=l+20|0,bb=0|f[ab>>2],0==(0|bb)){if(db=l+16|0,eb=0|f[db>>2],0==(0|eb))break;l=eb,m=db}else l=bb,m=ab;if(!(m>>>0<I>>>0)){f[m>>2]=0,q=l;break}Ha()}else{if(La=Cb+8|0,Na=0|f[La>>2],Oa=Na>>>0<I>>>0,Oa&&Ha(),Pa=Na+12|0,Qa=0|f[Pa>>2],Ra=(0|Qa)==(0|Cb),Ra||Ha(),Sa=Ja+8|0,Ta=0|f[Sa>>2],(0|Ta)==(0|Cb)){f[Pa>>2]=Ja,f[Sa>>2]=Na,q=Ja;break}Ha()}}while(0);if(!(0==(0|Ga))){jb=Cb+28|0,kb=0|f[jb>>2],lb=75572+(kb<<2)|0,mb=0|f[lb>>2],nb=(0|Cb)==(0|mb);do{if(nb){if(f[lb>>2]=q,0==(0|q)){ob=1<<kb,pb=-1^ob,qb=0|f[18818],sb=qb&pb,f[18818]=sb;break a}}else{if(tb=0|f[18821],!(Ga>>>0<tb>>>0)){if(vb=Ga+16|0,wb=0|f[vb>>2],gf=(0|wb)!=(0|Cb),y=1&gf,xb=(Ga+16|0)+(y<<2)|0,f[xb>>2]=q,0==(0|q))break a;break}Ha()}}while(0);zb=0|f[18821],Ab=q>>>0<zb>>>0,Ab&&Ha(),Bb=q+24|0,f[Bb>>2]=Ga,Eb=Cb+16|0,Fb=0|f[Eb>>2],Gb=0==(0|Fb);do{if(!Gb){if(!(Fb>>>0<zb>>>0)){Ib=q+16|0,f[Ib>>2]=Fb,Jb=Fb+24|0,f[Jb>>2]=q;break}Ha()}}while(0);if(Kb=Eb+4|0,Lb=0|f[Kb>>2],!(0==(0|Lb))){if(Nb=0|f[18821],!(Lb>>>0<Nb>>>0)){Qb=q+20|0,f[Qb>>2]=Lb,Rb=Lb+24|0,f[Rb>>2]=q;break}Ha()}}}}while(0);if(Sb=1|da,Tb=h+4|0,f[Tb>>2]=Sb,Ub=h+da|0,f[Ub>>2]=da,Vb=0|f[18822],(0|h)==(0|Vb))return void(f[18819]=da);n=da}else Xb=-2&M,f[L>>2]=Xb,Yb=1|i,$b=h+4|0,f[$b>>2]=Yb,_b=h+i|0,f[_b>>2]=i,n=i;if(ac=n>>>3,n>>>0<256)return cc=ac<<1,dc=75308+(cc<<2)|0,ec=0|f[18817],fc=1<<ac,gc=ec&fc,hc=0==(0|gc),hc?(jc=ec|fc,f[18817]=jc,r=dc+8|0,g=dc,u=r):(kc=dc+8|0,lc=0|f[kc>>2],mc=0|f[18821],nc=lc>>>0<mc>>>0,nc?Ha():(g=lc,u=kc)),f[u>>2]=h,oc=g+12|0,f[oc>>2]=h,pc=h+8|0,f[pc>>2]=g,qc=h+12|0,void(f[qc>>2]=dc);if(rc=n>>>8,sc=0==(0|rc),sc?e=0:(uc=n>>>0>16777215,uc?e=31:(vc=rc+1048320|0,wc=vc>>>16,xc=8&wc,yc=rc<<xc,zc=yc+520192|0,Ac=zc>>>16,Bc=4&Ac,Cc=Bc|xc,Dc=yc<<Bc,Fc=Dc+245760|0,Gc=Fc>>>16,Hc=2&Gc,Ic=Cc|Hc,Jc=14-Ic|0,Kc=Dc<<Hc,Lc=Kc>>>15,Mc=Jc+Lc|0,Nc=Mc<<1,Oc=Mc+7|0,Qc=n>>>Oc,Rc=1&Qc,Sc=Rc|Nc,e=Sc)),Tc=75572+(e<<2)|0,Uc=h+28|0,f[Uc>>2]=e,Vc=h+16|0,Wc=h+20|0,f[Wc>>2]=0,f[Vc>>2]=0,Xc=0|f[18818],Yc=1<<e,Zc=Xc&Yc,0==(0|Zc))return ad=Xc|Yc,f[18818]=ad,f[Tc>>2]=h,bd=h+24|0,f[bd>>2]=Tc,cd=h+12|0,f[cd>>2]=h,dd=h+8|0,void(f[dd>>2]=h);for(ed=0|f[Tc>>2],fd=31==(0|e),gd=e>>>1,hd=25-gd|0,id=fd?0:hd,kd=n<<id,c=kd,d=ed;;){if(ld=d+4|0,md=0|f[ld>>2],nd=-8&md,(0|nd)==(0|n)){kf=121;break}if(pd=c>>>31,qd=(d+16|0)+(pd<<2)|0,rd=c<<1,sd=0|f[qd>>2],0==(0|sd)){kf=118;break}c=rd,d=sd}return 118==(0|kf)?(vd=0|f[18821],wd=qd>>>0<vd>>>0,wd&&Ha(),f[qd>>2]=h,xd=h+24|0,f[xd>>2]=d,yd=h+12|0,f[yd>>2]=h,zd=h+8|0,void(f[zd>>2]=h)):121==(0|kf)?(Ad=d+8|0,Bd=0|f[Ad>>2],Cd=0|f[18821],Dd=Bd>>>0>=Cd>>>0,jf=d>>>0>=Cd>>>0,Ed=Dd&jf,Ed||Ha(),Hd=Bd+12|0,f[Hd>>2]=h,f[Ad>>2]=h,Id=h+8|0,f[Id>>2]=Bd,Jd=h+12|0,f[Jd>>2]=d,Kd=h+24|0,void(f[Kd>>2]=0)):void 0}function Lw(){}function Mw(a,b,c,d){a|=0,b|=0,c|=0,d|=0;var e=0,f=0;return e=a-c>>>0,f=b-d>>>0,f=b-d-(c>>>0>a>>>0|0)>>>0,0|(G=f,0|e)}function Nw(a,b,c,d){a|=0,b|=0,c|=0,d|=0;var e=0,f=0;return e=a+c>>>0,f=b+d+(e>>>0<a>>>0|0)>>>0,0|(G=f,0|e)}function Ow(a,b,c){a|=0,b|=0,c|=0;var e=0,g=0,h=0,i=0;if(e=a+c|0,b&=255,(0|c)>=67){for(;0!=(3&a);)d[a>>0]=b,a=a+1|0;for(g=-4&e|0,h=g-64|0,i=b|b<<8|b<<16|b<<24;(0|a)<=(0|h);)f[a>>2]=i,f[a+4>>2]=i,f[a+8>>2]=i,f[a+12>>2]=i,f[a+16>>2]=i,f[a+20>>2]=i,f[a+24>>2]=i,f[a+28>>2]=i,f[a+32>>2]=i,f[a+36>>2]=i,f[a+40>>2]=i,f[a+44>>2]=i,f[a+48>>2]=i,f[a+52>>2]=i,f[a+56>>2]=i,f[a+60>>2]=i,a=a+64|0;for(;(0|a)<(0|g);)f[a>>2]=i,a=a+4|0}for(;(0|a)<(0|e);)d[a>>0]=b,a=a+1|0;return e-c|0}function Pw(a,b,c){a|=0,b|=0,c|=0;var d=0;return(0|c)<32?(d=(1<<c)-1|0,G=b>>>c,a>>>c|(b&d)<<32-c):(G=0,b>>>c-32|0)}function Qw(a,b,c,d){a|=0,b|=0,c|=0,d|=0;var e=0;for(t=t+1|0,f[a>>2]=t;(0|e)<(0|d);){if(0==(0|f[c+(e<<3)>>2]))return f[c+(e<<3)>>2]=t,f[c+(4+(e<<3))>>2]=b,f[c+(8+(e<<3))>>2]=0,G=d,0|c;e=e+1|0}return d=2*d|0,c=0|Iw(0|c,8*(d+1|0)|0),c=0|Qw(0|a,0|b,0|c,0|d),G=d,0|c}function Rw(a,b,c){a|=0,b|=0,c|=0;for(var d=0,e=0;(0|d)<(0|c)&&0!=(0|(e=0|f[b+(d<<3)>>2]));){if((0|e)==(0|a))return 0|f[b+(4+(d<<3))>>2];d=d+1|0}return 0}function Sw(a,b,c){a|=0,b|=0,c|=0;var d=0;return(0|c)<32?(d=(1<<c)-1|0,G=b<<c|(a&d<<32-c)>>>32-c,a<<c):(G=a<<c-32,0)}function Tw(a){return(255&(a|=0))<<24|(a>>8&255)<<16|(a>>16&255)<<8|a>>>24|0}function Uw(a){a|=0;var b=0;return(0|(b=0|d[q+(255&a)>>0]))<8?0|b:(0|(b=0|d[q+(a>>8&255)>>0]))<8?b+8|0:(b=0|d[q+(a>>16&255)>>0],(0|b)<8?b+16|0:24+(0|d[q+(a>>>24)>>0])|0)}function Vw(a,b,c,d,e){a|=0,b|=0,c|=0,d|=0,e|=0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Z=0,$=0,_=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0;if(g=a,h=b,i=h,j=c,k=d,l=k,0==(0|i))return m=0!=(0|e),0==(0|l)?(m&&(f[e>>2]=(g>>>0)%(j>>>0),f[e+4>>2]=0),ra=0,qa=(g>>>0)/(j>>>0)>>>0,0|(G=ra,qa)):m?(f[e>>2]=-1&a,f[e+4>>2]=0&b,ra=0,qa=0,0|(G=ra,qa)):(ra=0,qa=0,0|(G=ra,qa));n=0==(0|l);do{if(0==(0|j)){if(n)return 0!=(0|e)&&(f[e>>2]=(i>>>0)%(j>>>0),f[e+4>>2]=0),ra=0,qa=(i>>>0)/(j>>>0)>>>0,0|(G=ra,qa);if(0==(0|g))return 0!=(0|e)&&(f[e>>2]=0,f[e+4>>2]=(i>>>0)%(l>>>0)),ra=0,qa=(i>>>0)/(l>>>0)>>>0,0|(G=ra,qa);if(0==((o=l-1|0)&l|0))return 0!=(0|e)&&(f[e>>2]=0|-1&a,f[e+4>>2]=o&i|0&b),ra=0,qa=i>>>((0|Uw(0|l))>>>0),0|(G=ra,qa);if(p=0|Y(0|l),(q=p-(0|Y(0|i))|0)>>>0<=30){r=q+1|0,s=31-q|0,M=r,L=i<<s|g>>>(r>>>0),K=i>>>(r>>>0),J=0,I=g<<s;break}return 0==(0|e)?(ra=0,qa=0,0|(G=ra,qa)):(f[e>>2]=0|-1&a,f[e+4>>2]=h|0&b,ra=0,qa=0,0|(G=ra,qa))}if(!n){if(C=0|Y(0|l),(D=C-(0|Y(0|i))|0)>>>0<=31){E=D+1|0,F=31-D|0,H=D-31>>31,M=E,L=g>>>(E>>>0)&H|i<<F,K=i>>>(E>>>0)&H,J=0,I=g<<F;break}return 0==(0|e)?(ra=0,qa=0,0|(G=ra,qa)):(f[e>>2]=0|-1&a,f[e+4>>2]=h|0&b,ra=0,qa=0,0|(G=ra,qa))}if(0!=((t=j-1|0)&j|0)){v=33+(0|Y(0|j))|0,w=v-(0|Y(0|i))|0,x=64-w|0,y=32-w|0,z=y>>31,A=w-32|0,B=A>>31,M=w,L=y-1>>31&i>>>(A>>>0)|(i<<y|g>>>(w>>>0))&B,K=B&i>>>(w>>>0),J=g<<x&z,I=(i<<x|g>>>(A>>>0))&z|g<<y&w-33>>31;break}return 0!=(0|e)&&(f[e>>2]=t&g,f[e+4>>2]=0),1==(0|j)?(ra=h|0&b,qa=0|-1&a,0|(G=ra,qa)):(u=0|Uw(0|j),ra=0|i>>>(u>>>0),qa=i<<32-u|g>>>(u>>>0)|0,0|(G=ra,qa))}while(0);if(0==(0|M))ma=I,la=J,ka=K,ja=L,ia=0,ha=0;else{for(N=0|-1&c,O=k|0&d,P=0|Nw(0|N,0|O,-1,-1),Q=G,W=I,V=J,U=K,T=L,S=M,R=0;;){if(X=V>>>31|W<<1,Z=R|V<<1,$=T<<1|W>>>31|0,_=T>>>31|U<<1|0,Mw(0|P,0|Q,0|$,0|_),aa=G,ba=aa>>31|((0|aa)<0?-1:0)<<1,ca=1&ba,da=0|Mw(0|$,0|_,ba&N|0,(((0|aa)<0?-1:0)>>31|((0|aa)<0?-1:0)<<1)&O|0),ea=da,fa=G,0==(0|(ga=S-1|0)))break;W=X,V=Z,U=fa,T=ea,S=ga,R=ca}ma=X,la=Z,ka=fa,ja=ea,ia=0,ha=ca}return na=la,oa=0,pa=ma|oa,0!=(0|e)&&(f[e>>2]=0|ja,f[e+4>>2]=0|ka),ra=(0|na)>>>31|pa<<1|0&(oa<<1|na>>>31)|ia,qa=-2&(na<<1|0)|ha,0|(G=ra,qa)}function Ww(a,b,c,d){a|=0,b|=0,c|=0,d|=0;return 0|(0|Vw(a,b,c,d,0))}function Xw(a,b){a|=0,b|=0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0;return c=65535&a,d=65535&b,e=0|V(d,c),f=a>>>16,g=(e>>>16)+(0|V(d,f))|0,h=b>>>16,i=0|V(h,c),0|(G=((g>>>16)+(0|V(h,f))|0)+(((65535&g)+i|0)>>>16)|0,g+i<<16|65535&e|0)}function Yw(a,b,c,d){a|=0,b|=0,c|=0,d|=0;var e=0,f=0,g=0,h=0,i=0;return e=a,f=c,g=0|Xw(e,f),h=G,i=0|V(b,f),0|(G=((0|V(d,e))+i|0)+h|0&h,0|-1&g)}function Zw(a){a|=0;var b=0,d=0,e=0;return a=a+15&-16|0,b=0|f[l>>2],d=b+a|0,(0|a)>0&(0|d)<(0|b)|(0|d)<0?(ba(),Ka(12),-1):(f[l>>2]=d,e=0|aa(),(0|d)>(0|e)&&0==(0|_())?(Ka(12),f[l>>2]=b,-1):0|b)}function $w(a,b,c){a|=0,b|=0,c|=0;var e=0,g=0,h=0,i=0;if((0|c)>=8192)return 0|La(0|a,0|b,0|c);if(e=0|a,i=a+c|0,(3&a)==(3&b)){for(;3&a;){if(0==(0|c))return 0|e;d[a>>0]=0|d[b>>0],a=a+1|0,b=b+1|0,c=c-1|0}for(g=-4&i|0,h=g-64|0;(0|a)<=(0|h);)f[a>>2]=0|f[b>>2],f[a+4>>2]=0|f[b+4>>2],f[a+8>>2]=0|f[b+8>>2],f[a+12>>2]=0|f[b+12>>2],f[a+16>>2]=0|f[b+16>>2],f[a+20>>2]=0|f[b+20>>2],f[a+24>>2]=0|f[b+24>>2],f[a+28>>2]=0|f[b+28>>2],f[a+32>>2]=0|f[b+32>>2],f[a+36>>2]=0|f[b+36>>2],f[a+40>>2]=0|f[b+40>>2],f[a+44>>2]=0|f[b+44>>2],f[a+48>>2]=0|f[b+48>>2],f[a+52>>2]=0|f[b+52>>2],f[a+56>>2]=0|f[b+56>>2],f[a+60>>2]=0|f[b+60>>2],a=a+64|0,b=b+64|0;for(;(0|a)<(0|g);)f[a>>2]=0|f[b>>2],a=a+4|0,b=b+4|0}else for(g=i-4|0;(0|a)<(0|g);)d[a>>0]=0|d[b>>0],d[a+1>>0]=0|d[b+1>>0],d[a+2>>0]=0|d[b+2>>0],d[a+3>>0]=0|d[b+3>>0],a=a+4|0,b=b+4|0;for(;(0|a)<(0|i);)d[a>>0]=0|d[b>>0],a=a+1|0,b=b+1|0;return 0|e}function _w(a,b,c){a|=0,b|=0,c|=0;var e=0;if((0|b)<(0|a)&(0|a)<(b+c|0)){for(e=a,b=b+c|0,a=a+c|0;(0|c)>0;)a=a-1|0,b=b-1|0,c=c-1|0,d[a>>0]=0|d[b>>0];a=e}else $w(a,b,c);return 0|a}function ax(a,b,c,d){a|=0,b|=0,c|=0,d|=0;var e=0,g=0;return g=o,o=o+16|0,e=0|g,Vw(a,b,c,d,e),o=g,0|(G=0|f[e+4>>2],0|f[e>>2])}function bx(a,b,c,d){return a|=0,b|=0,c|=0,d|=0,0|yx[511&a](0|b,0|c,0|d)}function cx(a,b,c,d,e,f,g,h){a|=0,b|=0,c|=0,d|=0,e|=0,f|=0,g|=0,h|=0,zx[255&a](0|b,0|c,0|d,0|e,0|f,0|g,0|h)}function dx(a,b,c,d,e,f){a|=0,b|=0,c|=0,d|=0,e|=0,f|=0,Ax[255&a](0|b,0|c,0|d,0|e,0|f)}function ex(a,b){a|=0,b|=0,Bx[511&a](0|b)}function fx(a,b,c){a|=0,b|=0,c|=0,Cx[511&a](0|b,0|c)}function gx(a,b){return a|=0,b|=0,0|Dx[255&a](0|b)}function hx(a,b,c,d){a|=0,b|=0,c|=0,d|=0,Ex[511&a](0|b,0|c,0|d)}function ix(a,b,c,d,e){return a|=0,b|=0,c|=0,d|=0,e|=0,0|Fx[255&a](0|b,0|c,0|d,0|e)}function jx(a,b,c,d,e,f,g){a|=0,b|=0,c|=0,d|=0,e|=0,f|=0,g|=0,Gx[255&a](0|b,0|c,0|d,0|e,0|f,0|g)}function kx(a,b,c){return a|=0,b|=0,c|=0,0|Hx[255&a](0|b,0|c)}function lx(a,b,c,d,e){a|=0,b|=0,c|=0,d|=0,e|=0,Ix[255&a](0|b,0|c,0|d,0|e)}function mx(a,b,c){return a|=0,b|=0,c|=0,da(0),0}function nx(a,b,c,d,e,f,g){a|=0,b|=0,c|=0,d|=0,e|=0,f|=0,g|=0,ea(1)}function ox(a,b,c,d,e){a|=0,b|=0,c|=0,d|=0,e|=0,fa(2)}function px(a){a|=0,ga(3)}function qx(a,b){a|=0,b|=0,ha(4)}function rx(a,b){a|=0,b|=0,Ja(0|a,0|b)}function sx(a){return a|=0,ia(5),0}function tx(a,b,c){a|=0,b|=0,c|=0,ja(6)}function ux(a,b,c,d){return a|=0,b|=0,c|=0,d|=0,ka(7),0}function vx(a,b,c,d,e,f){a|=0,b|=0,c|=0,d|=0,e|=0,f|=0,la(8)}function wx(a,b){return a|=0,b|=0,ma(9),0}function xx(a,b,c,d){a|=0,b|=0,c|=0,d|=0,na(10)}var d=new a.Int8Array(c),e=new a.Int16Array(c),f=new a.Int32Array(c),j=(new a.Uint8Array(c),new a.Uint16Array(c),new a.Uint32Array(c),new a.Float32Array(c)),k=new a.Float64Array(c),l=0|b.DYNAMICTOP_PTR,m=0|b.tempDoublePtr,o=(b.ABORT,0|b.STACKTOP),p=0|b.STACK_MAX,q=0|b.cttz_i8,r=0,s=0,t=0,v=a.NaN,w=a.Infinity,G=0,H=a.Math.floor,I=a.Math.abs,K=(a.Math.sqrt,a.Math.pow),U=(a.Math.cos,a.Math.sin,a.Math.tan,a.Math.acos,a.Math.asin,a.Math.atan,a.Math.atan2,a.Math.exp,a.Math.log,a.Math.ceil),V=a.Math.imul,Y=(a.Math.min,a.Math.max,a.Math.clz32),_=(b.abort,b.assert,b.enlargeMemory),aa=b.getTotalMemory,ba=b.abortOnCannotGrowMemory,ca=b.abortStackOverflow,da=b.nullFunc_iiii,ea=b.nullFunc_viiiiiii,fa=b.nullFunc_viiiii,ga=b.nullFunc_vi,ha=b.nullFunc_vii,ia=b.nullFunc_ii,ja=b.nullFunc_viii,ka=b.nullFunc_iiiii,la=b.nullFunc_viiiiii,ma=b.nullFunc_iii,na=b.nullFunc_viiii,oa=b.invoke_iiii,pa=b.invoke_viiiiiii,qa=b.invoke_viiiii,ra=b.invoke_vi,sa=b.invoke_vii,ta=b.invoke_ii,ua=b.invoke_viii,va=b.invoke_iiiii,wa=b.invoke_viiiiii,xa=b.invoke_iii,ya=b.invoke_viiii,za=b.___syscall221,Aa=b._longjmp,Ba=b.___syscall146,Ea=(b._llvm_pow_f64,b._emscripten_set_main_loop,b.___lock),Fa=b.___syscall6,Ga=b.___syscall5,Ha=b._abort,Ia=b.___syscall140,Ja=b._emscripten_longjmp,Ka=b.___setErrNo,La=b._emscripten_memcpy_big,Ma=b.___syscall54,Na=b.___unlock,Oa=b._exit,Ra=(b._emscripten_set_main_loop_timing,b.__exit,b.___syscall145),yx=(b._emscripten_get_now,[mx,mx,Ou,Pu,Vu,Wu,Mv,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,Yp,ji,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,Hc,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,rk,mx,sk,mx,jf,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,qp,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,Xt,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx,mx]),zx=[nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,$j,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx,nx],Ax=[ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,xt,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox,ox],Bx=[px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,_j,px,bk,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,Zj,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,et,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px,px],Cx=[qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,ak,qx,qx,ck,qx,qx,qx,qx,qx,qx,gk,qx,qx,Xc,qx,Rc,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,Zc,qx,qx,lk,qx,qx,qx,qx,qx,qx,qx,qx,nk,qx,qx,rx,qx,qk,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,Fk,qx,qx,Ik,qx,Kk,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,ag,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx,qx],Dx=[sx,Nu,sx,sx,sx,sx,sx,kb,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,ek,sx,sx,sx,Wc,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,Gk,Hk,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx,sx],Ex=[tx,tx,tx,tx,tx,tx,tx,tx,_c,ad,bd,cd,dd,ed,fd,gd,hd,Pd,Qd,Jd,Rd,Sd,Td,Ud,Vd,Kd,Wd,Xd,Yd,Nd,Zd,$d,_d,ae,be,re,se,te,ue,ve,we,xe,ye,ze,Ae,Be,Ce,De,Ee,Fe,Ge,He,Ie,Je,Ke,Le,Me,Ne,Oe,Pe,Qe,Re,Se,Te,Ue,Ve,We,Xe,Ye,Ze,$e,nf,of,pf,qf,rf,sf,tf,uf,vf,wf,xf,tx,jg,jh,kh,lh,mh,nh,oh,ph,qh,rh,sh,th,uh,vh,wh,xh,yh,zh,Ah,Bh,Ch,Dh,Sg,Eh,Fh,Gh,Hh,Ih,Jh,Kh,Lh,Mh,Nh,hh,Oh,Ph,Ai,Bi,Ci,Di,Ei,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,fk,tx,hk,tx,tx,tx,tx,Nj,Oj,Ri,Ti,oj,pj,Bj,Cj,Gj,Ij,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,mk,tx,tx,In,tx,tx,ok,tx,tx,tx,tx,tx,tx,tx,tx,tx,io,Vn,Zn,tx,tx,Gg,xg,Ad,tx,tx,tx,tx,tx,Vp,tx,tx,tx,tx,tx,tx,Jk,tx,po,qo,ro,so,to,uo,jo,vo,wo,xo,yo,zo,Ao,Bo,Co,Do,$n,Eo,Fo,Go,_n,Ho,Io,Jo,To,pq,qq,rq,sq,tq,$p,uq,vq,wq,xq,yq,zq,Aq,Bq,Cq,Dq,zk,Eq,Fq,Gq,Hq,nq,Iq,Jq,Kq,Lq,Mq,Nq,Oq,Pq,Qq,Rq,Sq,Tq,Lj,Uq,Vq,Wq,tj,Xq,Yq,cr,br,Pr,Qr,Rr,Sr,Tr,So,Jf,zs,Pj,As,ws,Bs,Cs,Ds,Es,yk,Fs,ds,is,Gs,js,Hs,as,Ck,Is,Js,Ks,Ls,qj,Ms,Ns,Os,Ps,Qs,Rs,Ss,Ts,Us,Vs,Ws,st,tt,ut,vt,At,Bt,Gt,Jt,Ct,Et,Qt,Rt,St,Tt,tx,Yt,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx,tx],Fx=[ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,Xf,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,Ji,kj,rj,uj,Mj,Qj,Wj,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,Dp,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux,ux],Gx=[vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,Ff,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx],Hx=[wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,sp,wx,wx,dk,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,kk,wx,wx,wx,it,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,pk,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,ht,wx,wx,wx,wx,wx,Cw,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx,wx],Ix=[xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,Dr,xx,xx,xx,xx,xx,xx,xx,xx,xx,ik,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,Dj,Hj,xx,xx,xx,xx,xx,xx,Mn,bq,bo,xx,qg,wr,xx,xx,xx,xx,aj,xx,xx,xx,xx,zg,xx,ge,xx,xx,xx,xx,eo,fo,xx,xx,xx,Dd,xx,xx,xx,Gp,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx];return{_main:_a,_llvm_cttz_i32:Uw,_bitshift64Lshr:Pw,_bitshift64Shl:Sw,_fflush:vw,_memset:Ow,_sbrk:Zw,_memcpy:$w,_llvm_bswap_i32:Tw,___muldi3:Yw,___uremdi3:ax,_i64Subtract:Mw,___udivmoddi4:Vw,_realloc:Iw,_i64Add:Nw,_emscripten_get_global_libc:Mu,___udivdi3:Ww,___errno_location:Ru,___muldsi3:Xw,_testSetjmp:Rw,_saveSetjmp:Qw,_free:Hw,_memmove:_w,_malloc:Gw,runPostSets:Lw,stackAlloc:Ua,stackSave:Va,stackRestore:Wa,establishStackSpace:Xa,setTempRet0:Za,getTempRet0:$a,setThrew:Ya,stackAlloc:Ua,stackSave:Va,stackRestore:Wa,establishStackSpace:Xa,setThrew:Ya,setTempRet0:Za,getTempRet0:$a,dynCall_iiii:bx,dynCall_viiiiiii:cx,dynCall_viiiii:dx,dynCall_vi:ex,dynCall_vii:fx,dynCall_ii:gx,dynCall_viii:hx,dynCall_iiiii:ix,dynCall_viiiiii:jx,dynCall_iii:kx,dynCall_viiii:lx}}(Module.asmGlobalArg,Module.asmLibraryArg,buffer),real__main=asm._main;asm._main=function(){return assert(runtimeInitialized,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),assert(!runtimeExited,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),real__main.apply(null,arguments)};var real_stackSave=asm.stackSave;asm.stackSave=function(){return assert(runtimeInitialized,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),assert(!runtimeExited,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),real_stackSave.apply(null,arguments)};var real_getTempRet0=asm.getTempRet0;asm.getTempRet0=function(){return assert(runtimeInitialized,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),assert(!runtimeExited,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),real_getTempRet0.apply(null,arguments)};var real__llvm_cttz_i32=asm._llvm_cttz_i32;asm._llvm_cttz_i32=function(){return assert(runtimeInitialized,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),assert(!runtimeExited,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),real__llvm_cttz_i32.apply(null,arguments)};var real_setThrew=asm.setThrew;asm.setThrew=function(){return assert(runtimeInitialized,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),assert(!runtimeExited,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),real_setThrew.apply(null,arguments)};var real__bitshift64Lshr=asm._bitshift64Lshr;asm._bitshift64Lshr=function(){return assert(runtimeInitialized,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),assert(!runtimeExited,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),real__bitshift64Lshr.apply(null,arguments)};var real__bitshift64Shl=asm._bitshift64Shl;asm._bitshift64Shl=function(){return assert(runtimeInitialized,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),assert(!runtimeExited,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),real__bitshift64Shl.apply(null,arguments)};var real__fflush=asm._fflush;asm._fflush=function(){return assert(runtimeInitialized,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),assert(!runtimeExited,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),real__fflush.apply(null,arguments)};var real__sbrk=asm._sbrk;asm._sbrk=function(){return assert(runtimeInitialized,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),assert(!runtimeExited,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),real__sbrk.apply(null,arguments)};var real__llvm_bswap_i32=asm._llvm_bswap_i32;asm._llvm_bswap_i32=function(){return assert(runtimeInitialized,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),assert(!runtimeExited,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),real__llvm_bswap_i32.apply(null,arguments)};var real____muldi3=asm.___muldi3;asm.___muldi3=function(){return assert(runtimeInitialized,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),assert(!runtimeExited,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),real____muldi3.apply(null,arguments)};var real____uremdi3=asm.___uremdi3;asm.___uremdi3=function(){return assert(runtimeInitialized,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),assert(!runtimeExited,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),real____uremdi3.apply(null,arguments)};var real_stackAlloc=asm.stackAlloc;asm.stackAlloc=function(){return assert(runtimeInitialized,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),assert(!runtimeExited,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),real_stackAlloc.apply(null,arguments)};var real__i64Subtract=asm._i64Subtract;asm._i64Subtract=function(){return assert(runtimeInitialized,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),assert(!runtimeExited,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),real__i64Subtract.apply(null,arguments)};var real____udivmoddi4=asm.___udivmoddi4;asm.___udivmoddi4=function(){return assert(runtimeInitialized,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),assert(!runtimeExited,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),real____udivmoddi4.apply(null,arguments)};var real_setTempRet0=asm.setTempRet0;asm.setTempRet0=function(){return assert(runtimeInitialized,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),assert(!runtimeExited,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),real_setTempRet0.apply(null,arguments)};var real__realloc=asm._realloc;asm._realloc=function(){return assert(runtimeInitialized,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),assert(!runtimeExited,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),real__realloc.apply(null,arguments)};var real__i64Add=asm._i64Add;asm._i64Add=function(){return assert(runtimeInitialized,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),assert(!runtimeExited,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),real__i64Add.apply(null,arguments)};var real__emscripten_get_global_libc=asm._emscripten_get_global_libc;asm._emscripten_get_global_libc=function(){return assert(runtimeInitialized,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),assert(!runtimeExited,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),real__emscripten_get_global_libc.apply(null,arguments)};var real____udivdi3=asm.___udivdi3;asm.___udivdi3=function(){return assert(runtimeInitialized,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),assert(!runtimeExited,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),real____udivdi3.apply(null,arguments)};var real____errno_location=asm.___errno_location;asm.___errno_location=function(){return assert(runtimeInitialized,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),assert(!runtimeExited,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),real____errno_location.apply(null,arguments)};var real____muldsi3=asm.___muldsi3;asm.___muldsi3=function(){return assert(runtimeInitialized,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),assert(!runtimeExited,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),real____muldsi3.apply(null,arguments)};var real__testSetjmp=asm._testSetjmp;asm._testSetjmp=function(){return assert(runtimeInitialized,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),assert(!runtimeExited,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),real__testSetjmp.apply(null,arguments)};var real__saveSetjmp=asm._saveSetjmp;asm._saveSetjmp=function(){return assert(runtimeInitialized,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),assert(!runtimeExited,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),real__saveSetjmp.apply(null,arguments)};var real__free=asm._free;asm._free=function(){return assert(runtimeInitialized,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),assert(!runtimeExited,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),real__free.apply(null,arguments)};var real_establishStackSpace=asm.establishStackSpace;asm.establishStackSpace=function(){return assert(runtimeInitialized,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),assert(!runtimeExited,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),real_establishStackSpace.apply(null,arguments)};var real__memmove=asm._memmove;asm._memmove=function(){return assert(runtimeInitialized,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),assert(!runtimeExited,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),real__memmove.apply(null,arguments)};var real_stackRestore=asm.stackRestore;asm.stackRestore=function(){return assert(runtimeInitialized,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),assert(!runtimeExited,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),real_stackRestore.apply(null,arguments)};var real__malloc=asm._malloc;asm._malloc=function(){return assert(runtimeInitialized,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),assert(!runtimeExited,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),real__malloc.apply(null,arguments)};var _main=Module._main=asm._main,stackSave=Module.stackSave=asm.stackSave,getTempRet0=Module.getTempRet0=asm.getTempRet0,_llvm_cttz_i32=Module._llvm_cttz_i32=asm._llvm_cttz_i32,setThrew=Module.setThrew=asm.setThrew,_bitshift64Lshr=Module._bitshift64Lshr=asm._bitshift64Lshr,_bitshift64Shl=Module._bitshift64Shl=asm._bitshift64Shl,_fflush=Module._fflush=asm._fflush,_memset=Module._memset=asm._memset,_sbrk=Module._sbrk=asm._sbrk,_memcpy=Module._memcpy=asm._memcpy,_llvm_bswap_i32=Module._llvm_bswap_i32=asm._llvm_bswap_i32,___muldi3=Module.___muldi3=asm.___muldi3,___uremdi3=Module.___uremdi3=asm.___uremdi3,stackAlloc=Module.stackAlloc=asm.stackAlloc,_i64Subtract=Module._i64Subtract=asm._i64Subtract,___udivmoddi4=Module.___udivmoddi4=asm.___udivmoddi4,setTempRet0=Module.setTempRet0=asm.setTempRet0,_realloc=Module._realloc=asm._realloc,_i64Add=Module._i64Add=asm._i64Add,_emscripten_get_global_libc=Module._emscripten_get_global_libc=asm._emscripten_get_global_libc,___udivdi3=Module.___udivdi3=asm.___udivdi3,___errno_location=Module.___errno_location=asm.___errno_location,___muldsi3=Module.___muldsi3=asm.___muldsi3,_testSetjmp=Module._testSetjmp=asm._testSetjmp,_saveSetjmp=Module._saveSetjmp=asm._saveSetjmp,_free=Module._free=asm._free,runPostSets=Module.runPostSets=asm.runPostSets,establishStackSpace=Module.establishStackSpace=asm.establishStackSpace,_memmove=Module._memmove=asm._memmove,stackRestore=Module.stackRestore=asm.stackRestore,_malloc=Module._malloc=asm._malloc,dynCall_iiii=Module.dynCall_iiii=asm.dynCall_iiii,dynCall_viiiiiii=Module.dynCall_viiiiiii=asm.dynCall_viiiiiii,dynCall_viiiii=Module.dynCall_viiiii=asm.dynCall_viiiii,dynCall_vi=Module.dynCall_vi=asm.dynCall_vi,dynCall_vii=Module.dynCall_vii=asm.dynCall_vii,dynCall_ii=Module.dynCall_ii=asm.dynCall_ii,dynCall_viii=Module.dynCall_viii=asm.dynCall_viii,dynCall_iiiii=Module.dynCall_iiiii=asm.dynCall_iiiii,dynCall_viiiiii=Module.dynCall_viiiiii=asm.dynCall_viiiiii,dynCall_iii=Module.dynCall_iii=asm.dynCall_iii,dynCall_viiii=Module.dynCall_viiii=asm.dynCall_viiii;Runtime.stackAlloc=Module.stackAlloc,Runtime.stackSave=Module.stackSave,Runtime.stackRestore=Module.stackRestore,Runtime.establishStackSpace=Module.establishStackSpace,Runtime.setTempRet0=Module.setTempRet0,Runtime.getTempRet0=Module.getTempRet0,Module.asm=asm,ExitStatus.prototype=new Error,ExitStatus.prototype.constructor=ExitStatus;var initialStackTop,preloadStartTime=null,calledMain=!1;dependenciesFulfilled=function a(){Module.calledRun||run(),Module.calledRun||(dependenciesFulfilled=a)},Module.callMain=Module.callMain=function(b){function d(){for(var a=0;a<3;a++)e.push(0)}assert(0==runDependencies,"cannot call main when async dependencies remain! (listen on __ATMAIN__)"),assert(0==__ATPRERUN__.length,"cannot call main when preRun functions remain to be called"),b=b||[],ensureInitRuntime();var c=b.length+1,e=[allocate(intArrayFromString(Module.thisProgram),"i8",ALLOC_NORMAL)];d();for(var f=0;f<c-1;f+=1)e.push(allocate(intArrayFromString(b[f]),"i8",ALLOC_NORMAL)),d();e.push(0),e=allocate(e,"i32",ALLOC_NORMAL);try{exit(Module._main(c,e,0),!0)}catch(a){if(a instanceof ExitStatus)return;if("SimulateInfiniteLoop"==a)return void(Module.noExitRuntime=!0);var h=a;a&&"object"==typeof a&&a.stack&&(h=[a,a.stack]),Module.printErr("exception thrown: "+h),Module.quit(1,a)}finally{calledMain=!0}},Module.run=Module.run=run,Module.exit=Module.exit=exit;var abortDecorators=[];if(Module.abort=Module.abort=abort,Module.preInit)for("function"==typeof Module.preInit&&(Module.preInit=[Module.preInit]);Module.preInit.length>0;)Module.preInit.pop()();var shouldRunNow=!0;Module.noInitialRun&&(shouldRunNow=!1),run()};
+var Module=typeof Module!=="undefined"?Module:{};var mrbc=function(bY){bY.preRun.push(function(){bY.FS=D});var al={};var i;for(i in bY){if(bY.hasOwnProperty(i)){al[i]=bY[i]}}var dE=[];var bm="./this.program";var aY=function(dO,dP){throw dP};var dB=false;var dd=false;var bK=false;var b0=false;dB=typeof window==="object";dd=typeof importScripts==="function";bK=typeof process==="object"&&typeof process.versions==="object"&&typeof process.versions.node==="string";b0=!dB&&!bK&&!dd;if(bY.ENVIRONMENT){throw new Error("Module.ENVIRONMENT has been deprecated. To force the environment, use the ENVIRONMENT compile-time option (for example, -s ENVIRONMENT=web or -s ENVIRONMENT=node)")}var Q="";function bV(dO){if(bY.locateFile){return bY.locateFile(dO,Q)}return Q+dO}var c,du,bo,bu;var a6;var V;if(bK){if(dd){Q=require("path").dirname(Q)+"/"}else{Q=__dirname+"/"}c=function a8(dO,dP){if(!a6){a6=require("fs")}if(!V){V=require("path")}dO=V.normalize(dO);return a6.readFileSync(dO,dP?null:"utf8")};bo=function bo(dO){var dP=c(dO,true);if(!dP.buffer){dP=new Uint8Array(dP)}bJ(dP.buffer);return dP};if(process.argv.length>1){bm=process.argv[1].replace(/\\/g,"/")}dE=process.argv.slice(2);if(typeof module!=="undefined"){module.exports=bY}process.on("uncaughtException",function(dO){if(!(dO instanceof cZ)){throw dO}});process.on("unhandledRejection",c3);aY=function(dO){process.exit(dO)};bY.inspect=function(){return"[Emscripten Module object]"}}else{if(b0){if(typeof read!="undefined"){c=function a8(dO){return read(dO)}}bo=function bo(dP){var dO;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(dP))}dO=read(dP,"binary");bJ(typeof dO==="object");return dO};if(typeof scriptArgs!="undefined"){dE=scriptArgs}else{if(typeof arguments!="undefined"){dE=arguments}}if(typeof quit==="function"){aY=function(dO){quit(dO)}}if(typeof print!=="undefined"){if(typeof console==="undefined"){console=({})}console.log=(print);console.warn=console.error=(typeof printErr!=="undefined"?printErr:print)}}else{if(dB||dd){if(dd){Q=self.location.href}else{if(document.currentScript){Q=document.currentScript.src}}if(Q.indexOf("blob:")!==0){Q=Q.substr(0,Q.lastIndexOf("/")+1)}else{Q=""}c=function a8(dO){var dP=new XMLHttpRequest();dP.open("GET",dO,false);dP.send(null);return dP.responseText};if(dd){bo=function bo(dO){var dP=new XMLHttpRequest();dP.open("GET",dO,false);dP.responseType="arraybuffer";dP.send(null);return new Uint8Array((dP.response))}}du=function du(dP,dR,dO){var dS=new XMLHttpRequest();dS.open("GET",dP,true);dS.responseType="arraybuffer";dS.onload=function dQ(){if(dS.status==200||(dS.status==0&&dS.response)){dR(dS.response);return}dO()};dS.onerror=dO;dS.send(null)};bu=function(dO){document.title=dO}}else{throw new Error("environment detection error")}}}var cp=bY.print||console.log.bind(console);var m=bY.printErr||console.warn.bind(console);for(i in al){if(al.hasOwnProperty(i)){bY[i]=al[i]}}al=null;if(bY["arguments"]){dE=bY["arguments"]}if(!Object.getOwnPropertyDescriptor(bY,"arguments")){Object.defineProperty(bY,"arguments",{configurable:true,get:function(){c3("Module.arguments has been replaced with plain arguments_ (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)")}})}if(bY.thisProgram){bm=bY.thisProgram}if(!Object.getOwnPropertyDescriptor(bY,"thisProgram")){Object.defineProperty(bY,"thisProgram",{configurable:true,get:function(){c3("Module.thisProgram has been replaced with plain thisProgram (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)")}})}if(bY.quit){aY=bY.quit}if(!Object.getOwnPropertyDescriptor(bY,"quit")){Object.defineProperty(bY,"quit",{configurable:true,get:function(){c3("Module.quit has been replaced with plain quit_ (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)")}})}bJ(typeof bY.memoryInitializerPrefixURL==="undefined","Module.memoryInitializerPrefixURL option was removed, use Module.locateFile instead");bJ(typeof bY.pthreadMainPrefixURL==="undefined","Module.pthreadMainPrefixURL option was removed, use Module.locateFile instead");bJ(typeof bY.cdInitializerPrefixURL==="undefined","Module.cdInitializerPrefixURL option was removed, use Module.locateFile instead");bJ(typeof bY.filePackagePrefixURL==="undefined","Module.filePackagePrefixURL option was removed, use Module.locateFile instead");bJ(typeof bY.read==="undefined","Module.read option was removed (modify read_ in JS)");bJ(typeof bY.readAsync==="undefined","Module.readAsync option was removed (modify readAsync in JS)");bJ(typeof bY.readBinary==="undefined","Module.readBinary option was removed (modify readBinary in JS)");bJ(typeof bY.setWindowTitle==="undefined","Module.setWindowTitle option was removed (modify setWindowTitle in JS)");bJ(typeof bY.TOTAL_MEMORY==="undefined","Module.TOTAL_MEMORY has been renamed Module.INITIAL_MEMORY");if(!Object.getOwnPropertyDescriptor(bY,"read")){Object.defineProperty(bY,"read",{configurable:true,get:function(){c3("Module.read has been replaced with plain read_ (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)")}})}if(!Object.getOwnPropertyDescriptor(bY,"readAsync")){Object.defineProperty(bY,"readAsync",{configurable:true,get:function(){c3("Module.readAsync has been replaced with plain readAsync (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)")}})}if(!Object.getOwnPropertyDescriptor(bY,"readBinary")){Object.defineProperty(bY,"readBinary",{configurable:true,get:function(){c3("Module.readBinary has been replaced with plain readBinary (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)")}})}if(!Object.getOwnPropertyDescriptor(bY,"setWindowTitle")){Object.defineProperty(bY,"setWindowTitle",{configurable:true,get:function(){c3("Module.setWindowTitle has been replaced with plain setWindowTitle (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)")}})}var ca="IDBFS is no longer included by default; build with -lidbfs.js";var dn="PROXYFS is no longer included by default; build with -lproxyfs.js";var cl="WORKERFS is no longer included by default; build with -lworkerfs.js";var bH="NODEFS is no longer included by default; build with -lnodefs.js";var dw=16;function aM(dQ){bJ(cg);var dP=ar[cg>>2];var dO=(dP+dQ+15)&-16;bJ(dO<=dx.length,"failure to dynamicAlloc - memory growth etc. is not supported there, call malloc/sbrk directly");ar[cg>>2]=dO;return dP}function df(dP,dO){if(!dO){dO=dw}return Math.ceil(dP/dO)*dO}function aP(dO){switch(dO){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:if(dO[dO.length-1]==="*"){return 4}else{if(dO[0]==="i"){var dP=Number(dO.substr(1));bJ(dP%8===0,"getNativeTypeSize invalid bits "+dP+", type "+dO);return dP/8}else{return 0}}}}function cJ(dO){if(!cJ.shown){cJ.shown={}}if(!cJ.shown[dO]){cJ.shown[dO]=1;m(dO)}}function at(dS,d0){if(typeof WebAssembly.Function==="function"){var dW={i:"i32",j:"i64",f:"f32",d:"f64"};var dV={parameters:[],results:d0[0]=="v"?[]:[dW[d0[0]]]};for(var dU=1;dU<d0.length;++dU){dV.parameters.push(dW[d0[dU]])}return new WebAssembly.Function(dV,dS)}var dT=[1,0,1,96];var dY=d0.slice(0,1);var dO=d0.slice(1);var dQ={i:127,j:126,f:125,d:124};dT.push(dO.length);for(var dU=0;dU<dO.length;++dU){dT.push(dQ[dO[dU]])}if(dY=="v"){dT.push(0)}else{dT=dT.concat([1,dQ[dY]])}dT[1]=dT.length-2;var dZ=new Uint8Array([0,97,115,109,1,0,0,0].concat(dT,[2,7,1,1,101,1,102,0,0,7,5,1,1,102,0,0]));var dR=new WebAssembly.Module(dZ);var dX=new WebAssembly.Instance(dR,{e:{f:dS}});var dP=dX.exports.f;return dP}var N=[];var bv;function w(dU,dV){var dT=de;if(!bv){bv=new WeakMap();for(var dQ=0;dQ<dT.length;dQ++){var dS=dT.get(dQ);if(dS){bv.set(dS,dQ)}}}if(bv.has(dU)){return bv.get(dU)}var dP;if(N.length){dP=N.pop()}else{dP=dT.length;try{dT.grow(1)}catch(dR){if(!(dR instanceof RangeError)){throw dR}throw"Unable to grow wasm table. Set ALLOW_TABLE_GROWTH."}}try{dT.set(dP,dU)}catch(dR){if(!(dR instanceof TypeError)){throw dR}bJ(typeof dV!=="undefined","Missing signature argument to addFunction");var dO=at(dU,dV);dT.set(dP,dO)}bv.set(dU,dP);return dP}function bc(dO){bv.delete(de.get(dO));N.push(dO)}function an(dO,dP){bJ(typeof dO!=="undefined");return w(dO,dP)}function bG(dO){bc(dO)}var u={};function bR(dO,dR){if(!dO){return}bJ(dR);if(!u[dR]){u[dR]={}}var dP=u[dR];if(!dP[dO]){if(dR.length===1){dP[dO]=function dQ(){return o(dR,dO)}}else{if(dR.length===2){dP[dO]=function dQ(dS){return o(dR,dO,[dS])}}else{dP[dO]=function dQ(){return o(dR,dO,Array.prototype.slice.call(arguments))}}}}return dP[dO]}function cx(dO,dQ,dP){return dP?((+((dO>>>0)))+((+((dQ>>>0)))*4294967296)):((+((dO>>>0)))+((+((dQ|0)))*4294967296))}function o(dP,dQ,dO){if(dO&&dO.length){bJ(dO.length===dP.substring(1).replace(/j/g,"--").length);bJ(("dynCall_"+dP) in bY,"bad function pointer type - no table for sig '"+dP+"'");return bY["dynCall_"+dP].apply(null,[dQ].concat(dO))}else{bJ(dP.length==1);bJ(("dynCall_"+dP) in bY,"bad function pointer type - no table for sig '"+dP+"'");return bY["dynCall_"+dP].call(null,dQ)}}var dA=0;var g=function(dO){dA=dO};var B=function(){return dA};function aJ(dO){throw"You must build with -s RETAIN_COMPILER_SETTINGS=1 for getCompilerSetting or emscripten_get_compiler_setting to work"}var aC=1024;var dk;if(bY.wasmBinary){dk=bY.wasmBinary}if(!Object.getOwnPropertyDescriptor(bY,"wasmBinary")){Object.defineProperty(bY,"wasmBinary",{configurable:true,get:function(){c3("Module.wasmBinary has been replaced with plain wasmBinary (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)")}})}var cq;if(bY.noExitRuntime){cq=bY.noExitRuntime}if(!Object.getOwnPropertyDescriptor(bY,"noExitRuntime")){Object.defineProperty(bY,"noExitRuntime",{configurable:true,get:function(){c3("Module.noExitRuntime has been replaced with plain noExitRuntime (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)")}})}if(typeof WebAssembly!=="object"){c3("no native wasm support detected")}function az(dR,dQ,dP,dO){dP=dP||"i8";if(dP.charAt(dP.length-1)==="*"){dP="i32"}switch(dP){case"i1":dx[((dR)>>0)]=dQ;break;case"i8":dx[((dR)>>0)]=dQ;break;case"i16":a2[((dR)>>1)]=dQ;break;case"i32":ar[((dR)>>2)]=dQ;break;case"i64":(av=[dQ>>>0,(aN=dQ,(+(br(aN)))>=1?(aN>0?((cT((+(O((aN)/4294967296))),4294967295))|0)>>>0:(~~((+(dh((aN-+(((~~(aN)))>>>0))/4294967296)))))>>>0):0)],ar[((dR)>>2)]=av[0],ar[(((dR)+(4))>>2)]=av[1]);break;case"float":aE[((dR)>>2)]=dQ;break;case"double":n[((dR)>>3)]=dQ;break;default:c3("invalid type for setValue: "+dP)}}function ch(dQ,dP,dO){dP=dP||"i8";if(dP.charAt(dP.length-1)==="*"){dP="i32"}switch(dP){case"i1":return dx[((dQ)>>0)];case"i8":return dx[((dQ)>>0)];case"i16":return a2[((dQ)>>1)];case"i32":return ar[((dQ)>>2)];case"i64":return ar[((dQ)>>2)];case"float":return aE[((dQ)>>2)];case"double":return n[((dQ)>>3)];default:c3("invalid type for getValue: "+dP)}return null}var bI;var de=new WebAssembly.Table({initial:336,maximum:336+0,element:"anyfunc"});var di=false;var bL=0;function bJ(dP,dO){if(!dP){c3("Assertion failed: "+dO)}}function X(dP){var dO=bY["_"+dP];bJ(dO,"Cannot call unknown function "+dP+", make sure it is exported");return dO}function J(dU,dX,dT,dY,dO){var dZ={string:function(d3){var d2=0;if(d3!==null&&d3!==undefined&&d3!==0){var d1=(d3.length<<2)+1;d2=bW(d1);q(d3,d2,d1)}return d2},array:function(d1){var d2=bW(d1.length);dv(d1,d2);return d2}};function dW(d1){if(dX==="string"){return dC(d1)}if(dX==="boolean"){return Boolean(d1)}return d1}var dP=X(dU);var dR=[];var d0=0;bJ(dX!=="array",'Return type should not be "array".');if(dY){for(var dS=0;dS<dY.length;dS++){var dQ=dZ[dT[dS]];if(dQ){if(d0===0){d0=aK()}dR[dS]=dQ(dY[dS])}else{dR[dS]=dY[dS]}}}var dV=dP.apply(null,dR);dV=dW(dV);if(d0!==0){bQ(d0)}return dV}function cj(dQ,dO,dR,dP){return function(){return J(dQ,dO,dR,arguments,dP)}}var dq=0;var Y=1;var aH=2;var dF=3;function cv(dU,dV,dP,dO){var dS,d1;if(typeof dU==="number"){dS=true;d1=dU}else{dS=false;d1=dU.length}var dR=typeof dV==="string"?dV:null;var dW;if(dP==dF){dW=dO}else{dW=[cN,bW,aM][dP](Math.max(d1,dR?1:dV.length))}if(dS){var dZ;dO=dW;bJ((dW&3)==0);dZ=dW+(d1&~3);for(;dO<dZ;dO+=4){ar[((dO)>>2)]=0}dZ=dW+d1;while(dO<dZ){dx[((dO++)>>0)]=0}return dW}if(dR==="i8"){if(dU.subarray||dU.slice){bs.set((dU),dW)}else{bs.set(new Uint8Array(dU),dW)}return dW}var dT=0,dY,dX,dQ;while(dT<d1){var d0=dU[dT];dY=dR||dV[dT];if(dY===0){dT++;continue}bJ(dY,"Must know what type to store in allocate!");if(dY=="i64"){dY="i32"}az(dW+dT,d0,dY);if(dQ!==dY){dX=aP(dY);dQ=dY}dT+=dX}return dW}function ap(dO){if(!cL){return aM(dO)}return cN(dO)}var cK=typeof TextDecoder!=="undefined"?new TextDecoder("utf8"):undefined;function am(dT,dX,dU){var dS=dX+dU;var dV=dX;while(dT[dV]&&!(dV>=dS)){++dV}if(dV-dX>16&&dT.subarray&&cK){return cK.decode(dT.subarray(dX,dV))}else{var dW="";while(dX<dV){var dR=dT[dX++];if(!(dR&128)){dW+=String.fromCharCode(dR);continue}var dQ=dT[dX++]&63;if((dR&224)==192){dW+=String.fromCharCode(((dR&31)<<6)|dQ);continue}var dP=dT[dX++]&63;if((dR&240)==224){dR=((dR&15)<<12)|(dQ<<6)|dP}else{if((dR&248)!=240){cJ("Invalid UTF-8 leading byte 0x"+dR.toString(16)+" encountered when deserializing a UTF-8 string on the asm.js/wasm heap to a JS string!")}dR=((dR&7)<<18)|(dQ<<12)|(dP<<6)|(dT[dX++]&63)}if(dR<65536){dW+=String.fromCharCode(dR)}else{var dO=dR-65536;dW+=String.fromCharCode(55296|(dO>>10),56320|(dO&1023))}}}return dW}function dC(dP,dO){return dP?am(bs,dP,dO):""}function r(dT,dQ,dS,dV){if(!(dV>0)){return 0}var dU=dS;var dP=dS+dV-1;for(var dR=0;dR<dT.length;++dR){var dW=dT.charCodeAt(dR);if(dW>=55296&&dW<=57343){var dO=dT.charCodeAt(++dR);dW=65536+((dW&1023)<<10)|(dO&1023)}if(dW<=127){if(dS>=dP){break}dQ[dS++]=dW}else{if(dW<=2047){if(dS+1>=dP){break}dQ[dS++]=192|(dW>>6);dQ[dS++]=128|(dW&63)}else{if(dW<=65535){if(dS+2>=dP){break}dQ[dS++]=224|(dW>>12);dQ[dS++]=128|((dW>>6)&63);dQ[dS++]=128|(dW&63)}else{if(dS+3>=dP){break}if(dW>=2097152){cJ("Invalid Unicode code point 0x"+dW.toString(16)+" encountered when serializing a JS string to an UTF-8 string on the asm.js/wasm heap! (Valid unicode code points should be in range 0-0x1FFFFF).")}dQ[dS++]=240|(dW>>18);dQ[dS++]=128|((dW>>12)&63);dQ[dS++]=128|((dW>>6)&63);dQ[dS++]=128|(dW&63)}}}}dQ[dS]=0;return dS-dU}function q(dP,dO,dQ){bJ(typeof dQ=="number","stringToUTF8(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!");return r(dP,bs,dO,dQ)}function S(dR){var dO=0;for(var dQ=0;dQ<dR.length;++dQ){var dP=dR.charCodeAt(dQ);if(dP>=55296&&dP<=57343){dP=65536+((dP&1023)<<10)|(dR.charCodeAt(++dQ)&1023)}if(dP<=127){++dO}else{if(dP<=2047){dO+=2}else{if(dP<=65535){dO+=3}else{dO+=4}}}}return dO}function ak(dQ){var dP="";while(1){var dO=bs[((dQ++)>>0)];if(!dO){return dP}dP+=String.fromCharCode(dO)}}function ag(dP,dO){return cI(dP,dO,false)}var b2=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function bN(dV,dU){bJ(dV%2==0,"Pointer passed to UTF16ToString must be aligned to two bytes!");var dQ=dV;var dO=dQ>>1;var dP=dO+dU/2;while(!(dO>=dP)&&cS[dO]){++dO}dQ=dO<<1;if(dQ-dV>32&&b2){return b2.decode(bs.subarray(dV,dQ))}else{var dR=0;var dT="";while(1){var dS=a2[(((dV)+(dR*2))>>1)];if(dS==0||dR==dU/2){return dT}++dR;dT+=String.fromCharCode(dS)}}}function aA(dT,dS,dU){bJ(dS%2==0,"Pointer passed to stringToUTF16 must be aligned to two bytes!");bJ(typeof dU=="number","stringToUTF16(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!");if(dU===undefined){dU=2147483647}if(dU<2){return 0}dU-=2;var dP=dS;var dO=(dU<dT.length*2)?(dU/2):dT.length;for(var dQ=0;dQ<dO;++dQ){var dR=dT.charCodeAt(dQ);a2[((dS)>>1)]=dR;dS+=2}a2[((dS)>>1)]=0;return dS-dP}function b6(dO){return dO.length*2}function bp(dT,dS){bJ(dT%4==0,"Pointer passed to UTF32ToString must be aligned to four bytes!");var dO=0;var dR="";while(!(dO>=dS/4)){var dQ=ar[(((dT)+(dO*4))>>2)];if(dQ==0){break}++dO;if(dQ>=65536){var dP=dQ-65536;dR+=String.fromCharCode(55296|(dP>>10),56320|(dP&1023))}else{dR+=String.fromCharCode(dQ)}}return dR}function K(dU,dT,dV){bJ(dT%4==0,"Pointer passed to stringToUTF32 must be aligned to four bytes!");bJ(typeof dV=="number","stringToUTF32(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!");if(dV===undefined){dV=2147483647}if(dV<4){return 0}var dP=dT;var dO=dP+dV-4;for(var dQ=0;dQ<dU.length;++dQ){var dR=dU.charCodeAt(dQ);if(dR>=55296&&dR<=57343){var dS=dU.charCodeAt(++dQ);dR=65536+((dR&1023)<<10)|(dS&1023)}ar[((dT)>>2)]=dR;dT+=4;if(dT+4>dO){break}}ar[((dT)>>2)]=0;return dT-dP}function by(dR){var dO=0;for(var dP=0;dP<dR.length;++dP){var dQ=dR.charCodeAt(dP);if(dQ>=55296&&dQ<=57343){++dP}dO+=4}return dO}function bM(dQ){var dP=S(dQ)+1;var dO=cN(dP);if(dO){r(dQ,dx,dO,dP)}return dO}function bB(dQ){var dP=S(dQ)+1;var dO=bW(dP);r(dQ,dx,dO,dP);return dO}function c6(dQ,dP,dS){cJ("writeStringToMemory is deprecated and should not be called! Use stringToUTF8() instead!");var dR,dO;if(dS){dO=dP+S(dQ);dR=dx[dO]}q(dQ,dP,Infinity);if(dS){dx[dO]=dR}}function dv(dP,dO){bJ(dP.length>=0,"writeArrayToMemory array must have a length (should be an array or typed array)");dx.set(dP,dO)}function cI(dR,dO,dQ){for(var dP=0;dP<dR.length;++dP){bJ(dR.charCodeAt(dP)===dR.charCodeAt(dP)&255);dx[((dO++)>>0)]=dR.charCodeAt(dP)}if(!dQ){dx[((dO)>>0)]=0}}var a0=16384;var dc=65536;var bU=16777216;function Z(dP,dO){if(dP%dO>0){dP+=dO-(dP%dO)}return dP}var a,dD,dx,bs,a2,cS,ar,b9,aE,n;function ci(dO){dD=dO;bY.HEAP8=dx=new Int8Array(dO);bY.HEAP16=a2=new Int16Array(dO);bY.HEAP32=ar=new Int32Array(dO);bY.HEAPU8=bs=new Uint8Array(dO);bY.HEAPU16=cS=new Uint16Array(dO);bY.HEAPU32=b9=new Uint32Array(dO);bY.HEAPF32=aE=new Float32Array(dO);bY.HEAPF64=n=new Float64Array(dO)}var aR=1024,bt=5322752,da=bt,c1=79872,A=5322752,cg=79712;bJ(bt%16===0,"stack must start aligned");bJ(A%16===0,"heap must start aligned");var y=5242880;if(bY.TOTAL_STACK){bJ(y===bY.TOTAL_STACK,"the stack size can no longer be determined at runtime")}var bE=bY.INITIAL_MEMORY||16777216;if(!Object.getOwnPropertyDescriptor(bY,"INITIAL_MEMORY")){Object.defineProperty(bY,"INITIAL_MEMORY",{configurable:true,get:function(){c3("Module.INITIAL_MEMORY has been replaced with plain INITIAL_INITIAL_MEMORY (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)")}})}bJ(bE>=y,"INITIAL_MEMORY should be larger than TOTAL_STACK, was "+bE+"! (TOTAL_STACK="+y+")");bJ(typeof Int32Array!=="undefined"&&typeof Float64Array!=="undefined"&&Int32Array.prototype.subarray!==undefined&&Int32Array.prototype.set!==undefined,"JS engine does not provide full typed array support");if(bY.wasmMemory){bI=bY.wasmMemory}else{bI=new WebAssembly.Memory({initial:bE/dc,maximum:bE/dc})}if(bI){dD=bI.buffer}bE=dD.byteLength;bJ(bE%dc===0);ci(dD);ar[cg>>2]=A;function bi(){bJ((c1&3)==0);b9[(c1>>2)+1]=34821223;b9[(c1>>2)+2]=2310721022;ar[0]=1668509029}function p(){var dP=b9[(c1>>2)+1];var dO=b9[(c1>>2)+2];if(dP!=34821223||dO!=2310721022){c3("Stack overflow! Stack cookie has been overwritten, expected hex dwords 0x89BACDFE and 0x2135467, but received 0x"+dO.toString(16)+" "+dP.toString(16))}if(ar[0]!==1668509029){c3("Runtime error: The application has corrupted its heap memory area (address zero)!")}}(function(){var dO=new Int16Array(1);var dP=new Int8Array(dO.buffer);dO[0]=25459;if(dP[0]!==115||dP[1]!==99){throw"Runtime error: expected the system to be little-endian!"}})();function ay(dP,dO){c3("Invalid function pointer "+dP+" called with signature '"+dO+"'. Perhaps this is an invalid value (e.g. caused by calling a virtual method on a NULL pointer)? Or calling a function with an incorrect type, which will fail? (it is worth building your source files with -Werror (warnings are errors), as warnings can indicate undefined behavior which can cause this). Build with ASSERTIONS=2 for more info.")}function dJ(dP){while(dP.length>0){var dQ=dP.shift();if(typeof dQ=="function"){dQ(bY);continue}var dO=dQ.func;if(typeof dO==="number"){if(dQ.arg===undefined){bY.dynCall_v(dO)}else{bY.dynCall_vi(dO,dQ.arg)}}else{dO(dQ.arg===undefined?null:dQ.arg)}}}var bD=[];var d=[];var cD=[];var T=[];var ax=[];var cL=false;var v=false;function z(){if(bY.preRun){if(typeof bY.preRun=="function"){bY.preRun=[bY.preRun]}while(bY.preRun.length){I(bY.preRun.shift())}}dJ(bD)}function dN(){p();bJ(!cL);cL=true;if(!bY.noFSInit&&!D.init.initialized){D.init()}ad.init();dJ(d)}function dp(){p();D.ignorePermissions=false;dJ(cD)}function cw(){p();v=true}function aF(){p();if(bY.postRun){if(typeof bY.postRun=="function"){bY.postRun=[bY.postRun]}while(bY.postRun.length){dK(bY.postRun.shift())}}dJ(ax)}function I(dO){bD.unshift(dO)}function cX(dO){d.unshift(dO)}function bP(dO){cD.unshift(dO)}function db(dO){}function dK(dO){ax.unshift(dO)}function l(dP,dO,dQ){if(dP>=0){return dP}return dO<=32?2*Math.abs(1<<(dO-1))+dP:Math.pow(2,dO)+dP}function cR(dQ,dP,dR){if(dQ<=0){return dQ}var dO=dP<=32?Math.abs(1<<(dP-1)):Math.pow(2,dP-1);if(dQ>=dO&&(dP<=32||dQ>dO)){dQ=-2*dO+dQ}return dQ}bJ(Math.imul,"This browser does not support Math.imul(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill");bJ(Math.fround,"This browser does not support Math.fround(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill");bJ(Math.clz32,"This browser does not support Math.clz32(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill");bJ(Math.trunc,"This browser does not support Math.trunc(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill");var br=Math.abs;var a5=Math.cos;var cB=Math.sin;var dl=Math.tan;var dI=Math.acos;var aL=Math.asin;var bl=Math.atan;var cd=Math.atan2;var cf=Math.exp;var c5=Math.log;var bz=Math.sqrt;var dh=Math.ceil;var O=Math.floor;var cH=Math.pow;var P=Math.imul;var dz=Math.fround;var bq=Math.round;var cT=Math.min;var be=Math.max;var a7=Math.clz32;var bO=Math.trunc;var aS=0;var cE=null;var aQ=null;var C={};function x(dP){var dO=dP;while(1){if(!C[dP]){return dP}dP=dO+Math.random()}}function cQ(dO){aS++;if(bY.monitorRunDependencies){bY.monitorRunDependencies(aS)}if(dO){bJ(!C[dO]);C[dO]=1;if(cE===null&&typeof setInterval!=="undefined"){cE=setInterval(function(){if(di){clearInterval(cE);cE=null;return}var dP=false;for(var dQ in C){if(!dP){dP=true;m("still waiting on run dependencies:")}m("dependency: "+dQ)}if(dP){m("(end of list)")}},10000)}}else{m("warning: run dependency added without ID")}}function bj(dP){aS--;if(bY.monitorRunDependencies){bY.monitorRunDependencies(aS)}if(dP){bJ(C[dP]);delete C[dP]}else{m("warning: run dependency removed without ID")}if(aS==0){if(cE!==null){clearInterval(cE);cE=null}if(aQ){var dO=aQ;aQ=null;dO()}}}bY.preloadedImages={};bY.preloadedAudios={};function c3(dP){if(bY.onAbort){bY.onAbort(dP)}dP+="";cp(dP);m(dP);di=true;bL=1;var dO="abort("+dP+") at "+G();dP=dO;throw new WebAssembly.RuntimeError(dP)}var cV=null;function F(dP,dO){return String.prototype.startsWith?dP.startsWith(dO):dP.indexOf(dO)===0}var c4="data:application/octet-stream;base64,";function bk(dO){return F(dO,c4)}var aV="file://";function bT(dO){return F(dO,aV)}function ao(dP,dO){return function(){var dQ=dP;var dR=dO;if(!dO){dR=bY.asm}bJ(cL,"native function `"+dQ+"` called before runtime initialization");bJ(!v,"native function `"+dQ+"` called after runtime exit (use NO_EXIT_RUNTIME to keep it alive after main() exits)");if(!dR[dP]){bJ(dR[dP],"exported native function `"+dQ+"` not found")}return dR[dP].apply(null,arguments)}}var bb="mrbc.wasm";if(!bk(bb)){bb=bV(bb)}function bZ(){try{if(dk){return new Uint8Array(dk)}if(bo){return bo(bb)}else{throw"both async and sync fetching of the wasm failed"}}catch(dO){c3(dO)}}function ai(){if(!dk&&(dB||dd)&&typeof fetch==="function"&&!bT(bb)){return fetch(bb,{credentials:"same-origin"}).then(function(dO){if(!dO.ok){throw"failed to load wasm binary file at '"+bb+"'"}return dO.arrayBuffer()}).catch(function(){return bZ()})}return new Promise(function(dP,dO){dP(bZ())})}function bh(){var dV={env:ck,wasi_snapshot_preview1:ck};function dO(dW,dY){var dX=dW.exports;bY.asm=dX;bj("wasm-instantiate")}cQ("wasm-instantiate");var dU=bY;function dR(dW){bJ(bY===dU,"the Module object should not be replaced during async compilation - perhaps the order of HTML elements is wrong?");dU=null;dO(dW.instance)}function dS(dW){return ai().then(function(dX){return WebAssembly.instantiate(dX,dV)}).then(dW,function(dX){m("failed to asynchronously prepare wasm: "+dX);c3(dX)})}function dQ(){if(!dk&&typeof WebAssembly.instantiateStreaming==="function"&&!bk(bb)&&!bT(bb)&&typeof fetch==="function"){fetch(bb,{credentials:"same-origin"}).then(function(dX){var dW=WebAssembly.instantiateStreaming(dX,dV);return dW.then(dR,function(dY){m("wasm streaming compile failed: "+dY);m("falling back to ArrayBuffer instantiation");return dS(dR)})})}else{return dS(dR)}}if(bY.instantiateWasm){try{var dP=bY.instantiateWasm(dV,dO);return dP}catch(dT){m("Module.instantiateWasm callback failed with error: "+dT);return false}}dQ();return{}}var aN;var av;var W={};d.push({func:function(){bg()}});function bx(dR,dU){aW.mainLoop.timingMode=dR;aW.mainLoop.timingValue=dU;if(!aW.mainLoop.func){console.error("emscripten_set_main_loop_timing: Cannot set timing mode for main loop since a main loop does not exist! Call emscripten_set_main_loop first to set one up.");return 1}if(dR==0){aW.mainLoop.scheduler=function dV(){var dX=Math.max(0,aW.mainLoop.tickStartTime+dU-cr())|0;setTimeout(aW.mainLoop.runner,dX)};aW.mainLoop.method="timeout"}else{if(dR==1){aW.mainLoop.scheduler=function dP(){aW.requestAnimationFrame(aW.mainLoop.runner)};aW.mainLoop.method="rAF"}else{if(dR==2){if(typeof setImmediate==="undefined"){var dS=[];var dT="setimmediate";var dW=function(dX){if(dX.data===dT||dX.data.target===dT){dX.stopPropagation();dS.shift()()}};addEventListener("message",dW,true);setImmediate=(function dQ(dX){dS.push(dX);if(dd){if(bY.setImmediates===undefined){bY.setImmediates=[]}bY.setImmediates.push(dX);postMessage({target:dT})}else{postMessage(dT,"*")}})}aW.mainLoop.scheduler=function dO(){setImmediate(aW.mainLoop.runner)};aW.mainLoop.method="immediate"}}}return 0}var cr;if(bK){cr=function(){var dO=process.hrtime();return dO[0]*1000+dO[1]/1000000}}else{if(typeof dateNow!=="undefined"){cr=dateNow}else{cr=function(){return performance.now()}}}function ah(dS,dU,dR,dO,dP){cq=true;bJ(!aW.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");aW.mainLoop.func=dS;aW.mainLoop.arg=dO;var dQ;if(typeof dO!=="undefined"){dQ=function(){bY.dynCall_vi(dS,dO)}}else{dQ=function(){bY.dynCall_v(dS)}}var dV=aW.mainLoop.currentlyRunningMainloop;aW.mainLoop.runner=function dT(){if(di){return}if(aW.mainLoop.queue.length>0){var dZ=Date.now();var dW=aW.mainLoop.queue.shift();dW.func(dW.arg);if(aW.mainLoop.remainingBlockers){var dY=aW.mainLoop.remainingBlockers;var dX=dY%1==0?dY-1:Math.floor(dY);if(dW.counted){aW.mainLoop.remainingBlockers=dX}else{dX=dX+0.5;aW.mainLoop.remainingBlockers=(8*dY+dX)/9}}console.log('main loop blocker "'+dW.name+'" took '+(Date.now()-dZ)+" ms");aW.mainLoop.updateStatus();if(dV<aW.mainLoop.currentlyRunningMainloop){return}setTimeout(aW.mainLoop.runner,0);return}if(dV<aW.mainLoop.currentlyRunningMainloop){return}aW.mainLoop.currentFrameNumber=aW.mainLoop.currentFrameNumber+1|0;if(aW.mainLoop.timingMode==1&&aW.mainLoop.timingValue>1&&aW.mainLoop.currentFrameNumber%aW.mainLoop.timingValue!=0){aW.mainLoop.scheduler();return}else{if(aW.mainLoop.timingMode==0){aW.mainLoop.tickStartTime=cr()}}if(aW.mainLoop.method==="timeout"&&bY.ctx){cJ("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!");aW.mainLoop.method=""}aW.mainLoop.runIter(dQ);p();if(dV<aW.mainLoop.currentlyRunningMainloop){return}if(typeof SDL==="object"&&SDL.audio&&SDL.audio.queueNewAudioData){SDL.audio.queueNewAudioData()}aW.mainLoop.scheduler()};if(!dP){if(dU&&dU>0){bx(0,1000/dU)}else{bx(1,1)}aW.mainLoop.scheduler()}if(dR){throw"unwind"}}var aW={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){aW.mainLoop.scheduler=null;aW.mainLoop.currentlyRunningMainloop++},resume:function(){aW.mainLoop.currentlyRunningMainloop++;var dO=aW.mainLoop.timingMode;var dQ=aW.mainLoop.timingValue;var dP=aW.mainLoop.func;aW.mainLoop.func=null;ah(dP,0,false,aW.mainLoop.arg,true);bx(dO,dQ);aW.mainLoop.scheduler()},updateStatus:function(){if(bY.setStatus){var dQ=bY.statusMessage||"Please wait...";var dO=aW.mainLoop.remainingBlockers;var dP=aW.mainLoop.expectedBlockers;if(dO){if(dO<dP){bY.setStatus(dQ+" ("+(dP-dO)+"/"+dP+")")}else{bY.setStatus(dQ)}}else{bY.setStatus("")}}},runIter:function(dP){if(di){return}if(bY.preMainLoop){var dO=bY.preMainLoop();if(dO===false){return}}try{dP()}catch(dQ){if(dQ instanceof cZ){return}else{if(dQ&&typeof dQ==="object"&&dQ.stack){m("exception thrown: "+[dQ,dQ.stack])}throw dQ}}if(bY.postMainLoop){bY.postMainLoop()}}},isFullscreen:false,pointerLock:false,moduleContextCreatedCallbacks:[],workers:[],init:function(){if(!bY.preloadPlugins){bY.preloadPlugins=[]}if(aW.initted){return}aW.initted=true;try{new Blob();aW.hasBlobConstructor=true}catch(dU){aW.hasBlobConstructor=false;console.log("warning: no blob constructor, cannot create blobs with mimetypes")}aW.BlobBuilder=typeof MozBlobBuilder!="undefined"?MozBlobBuilder:(typeof WebKitBlobBuilder!="undefined"?WebKitBlobBuilder:(!aW.hasBlobConstructor?console.log("warning: no BlobBuilder"):null));aW.URLObject=typeof window!="undefined"?(window.URL?window.URL:window.webkitURL):undefined;if(!bY.noImageDecoding&&typeof aW.URLObject==="undefined"){console.log("warning: Browser does not support creating object URLs. Built-in browser image decoding will not be available.");bY.noImageDecoding=true}var dP={};dP.canHandle=function dS(dX){return !bY.noImageDecoding&&/\.(jpg|jpeg|png|bmp)$/i.test(dX)};dP.handle=function dT(dZ,dX,d1,d5){var d6=null;if(aW.hasBlobConstructor){try{d6=new Blob([dZ],{type:aW.getMimetype(dX)});if(d6.size!==dZ.length){d6=new Blob([(new Uint8Array(dZ)).buffer],{type:aW.getMimetype(dX)})}}catch(d3){cJ("Blob constructor present but fails: "+d3+"; falling back to blob builder")}}if(!d6){var d4=new aW.BlobBuilder();d4.append((new Uint8Array(dZ)).buffer);d6=d4.getBlob()}var dY=aW.URLObject.createObjectURL(d6);bJ(typeof dY=="string","createObjectURL must return a url as a string");var d2=new Image();d2.onload=function d7(){bJ(d2.complete,"Image "+dX+" could not be decoded");var d9=document.createElement("canvas");d9.width=d2.width;d9.height=d2.height;var d8=d9.getContext("2d");d8.drawImage(d2,0,0);bY.preloadedImages[dX]=d9;aW.URLObject.revokeObjectURL(dY);if(d1){d1(dZ)}};d2.onerror=function d0(d8){console.log("Image "+dY+" could not be decoded");if(d5){d5()}};d2.src=dY};bY.preloadPlugins.push(dP);var dO={};dO.canHandle=function dW(dX){return !bY.noAudioDecoding&&dX.substr(-4) in {".ogg":1,".wav":1,".mp3":1}};dO.handle=function dV(d0,dZ,d2,d6){var d3=false;function d8(d9){if(d3){return}d3=true;bY.preloadedAudios[dZ]=d9;if(d2){d2(d0)}}function d1(){if(d3){return}d3=true;bY.preloadedAudios[dZ]=new Audio();if(d6){d6()}}if(aW.hasBlobConstructor){try{var d7=new Blob([d0],{type:aW.getMimetype(dZ)})}catch(d5){return d1()}var dY=aW.URLObject.createObjectURL(d7);bJ(typeof dY=="string","createObjectURL must return a url as a string");var d4=new Audio();d4.addEventListener("canplaythrough",function(){d8(d4)},false);d4.onerror=function dX(ea){if(d3){return}console.log("warning: browser could not fully decode audio "+dZ+", trying slower base64 approach");function d9(eg){var ec="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";var ef="=";var ed="";var ei=0;var eb=0;for(var ee=0;ee<eg.length;ee++){ei=(ei<<8)|eg[ee];eb+=8;while(eb>=6){var eh=(ei>>(eb-6))&63;eb-=6;ed+=ec[eh]}}if(eb==2){ed+=ec[(ei&3)<<4];ed+=ef+ef}else{if(eb==4){ed+=ec[(ei&15)<<2];ed+=ef}}return ed}d4.src="data:audio/x-"+dZ.substr(-3)+";base64,"+d9(d0);d8(d4)};d4.src=dY;aW.safeSetTimeout(function(){d8(d4)},10000)}else{return d1()}};bY.preloadPlugins.push(dO);function dQ(){aW.pointerLock=document.pointerLockElement===bY.canvas||document.mozPointerLockElement===bY.canvas||document.webkitPointerLockElement===bY.canvas||document.msPointerLockElement===bY.canvas}var dR=bY.canvas;if(dR){dR.requestPointerLock=dR.requestPointerLock||dR.mozRequestPointerLock||dR.webkitRequestPointerLock||dR.msRequestPointerLock||function(){};dR.exitPointerLock=document.exitPointerLock||document.mozExitPointerLock||document.webkitExitPointerLock||document.msExitPointerLock||function(){};dR.exitPointerLock=dR.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",dQ,false);document.addEventListener("mozpointerlockchange",dQ,false);document.addEventListener("webkitpointerlockchange",dQ,false);document.addEventListener("mspointerlockchange",dQ,false);if(bY.elementPointerLock){dR.addEventListener("click",function(dX){if(!aW.pointerLock&&bY.canvas.requestPointerLock){bY.canvas.requestPointerLock();dX.preventDefault()}},false)}}},createContext:function(dR,dU,dO,dT){if(dU&&bY.ctx&&dR==bY.canvas){return bY.ctx}var dQ;var dV;if(dU){var dP={antialias:false,alpha:false,majorVersion:1};if(dT){for(var dS in dT){dP[dS]=dT[dS]}}if(typeof GL!=="undefined"){dV=GL.createContext(dR,dP);if(dV){dQ=GL.getContext(dV).GLctx}}}else{dQ=dR.getContext("2d")}if(!dQ){return null}if(dO){if(!dU){bJ(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it")}bY.ctx=dQ;if(dU){GL.makeContextCurrent(dV)}bY.useWebGL=dU;aW.moduleContextCreatedCallbacks.forEach(function(dW){dW()});aW.init()}return dQ},destroyContext:function(dP,dQ,dO){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(dR,dP){aW.lockPointer=dR;aW.resizeCanvas=dP;if(typeof aW.lockPointer==="undefined"){aW.lockPointer=true}if(typeof aW.resizeCanvas==="undefined"){aW.resizeCanvas=false}var dQ=bY.canvas;function dO(){aW.isFullscreen=false;var dT=dQ.parentNode;if((document.fullscreenElement||document.mozFullScreenElement||document.msFullscreenElement||document.webkitFullscreenElement||document.webkitCurrentFullScreenElement)===dT){dQ.exitFullscreen=aW.exitFullscreen;if(aW.lockPointer){dQ.requestPointerLock()}aW.isFullscreen=true;if(aW.resizeCanvas){aW.setFullscreenCanvasSize()}else{aW.updateCanvasDimensions(dQ)}}else{dT.parentNode.insertBefore(dQ,dT);dT.parentNode.removeChild(dT);if(aW.resizeCanvas){aW.setWindowedCanvasSize()}else{aW.updateCanvasDimensions(dQ)}}if(bY.onFullScreen){bY.onFullScreen(aW.isFullscreen)}if(bY.onFullscreen){bY.onFullscreen(aW.isFullscreen)}}if(!aW.fullscreenHandlersInstalled){aW.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",dO,false);document.addEventListener("mozfullscreenchange",dO,false);document.addEventListener("webkitfullscreenchange",dO,false);document.addEventListener("MSFullscreenChange",dO,false)}var dS=document.createElement("div");dQ.parentNode.insertBefore(dS,dQ);dS.appendChild(dQ);dS.requestFullscreen=dS.requestFullscreen||dS.mozRequestFullScreen||dS.msRequestFullscreen||(dS.webkitRequestFullscreen?function(){dS.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT)}:null)||(dS.webkitRequestFullScreen?function(){dS.webkitRequestFullScreen(Element.ALLOW_KEYBOARD_INPUT)}:null);dS.requestFullscreen()},requestFullScreen:function(){c3("Module.requestFullScreen has been replaced by Module.requestFullscreen (without a capital S)")},exitFullscreen:function(){if(!aW.isFullscreen){return false}var dO=document.exitFullscreen||document.cancelFullScreen||document.mozCancelFullScreen||document.msExitFullscreen||document.webkitCancelFullScreen||(function(){});dO.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(dQ){var dP=Date.now();if(aW.nextRAF===0){aW.nextRAF=dP+1000/60}else{while(dP+2>=aW.nextRAF){aW.nextRAF+=1000/60}}var dO=Math.max(aW.nextRAF-dP,0);setTimeout(dQ,dO)},requestAnimationFrame:function(dP){if(typeof requestAnimationFrame==="function"){requestAnimationFrame(dP);return}var dO=aW.fakeRequestAnimationFrame;dO(dP)},safeCallback:function(dO){return function(){if(!di){return dO.apply(null,arguments)}}},allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){aW.allowAsyncCallbacks=false},resumeAsyncCallbacks:function(){aW.allowAsyncCallbacks=true;if(aW.queuedAsyncCallbacks.length>0){var dO=aW.queuedAsyncCallbacks;aW.queuedAsyncCallbacks=[];dO.forEach(function(dP){dP()})}},safeRequestAnimationFrame:function(dO){return aW.requestAnimationFrame(function(){if(di){return}if(aW.allowAsyncCallbacks){dO()}else{aW.queuedAsyncCallbacks.push(dO)}})},safeSetTimeout:function(dO,dP){cq=true;return setTimeout(function(){if(di){return}if(aW.allowAsyncCallbacks){dO()}else{aW.queuedAsyncCallbacks.push(dO)}},dP)},safeSetInterval:function(dO,dP){cq=true;return setInterval(function(){if(di){return}if(aW.allowAsyncCallbacks){dO()}},dP)},getMimetype:function(dO){return{jpg:"image/jpeg",jpeg:"image/jpeg",png:"image/png",bmp:"image/bmp",ogg:"audio/ogg",wav:"audio/wav",mp3:"audio/mpeg"}[dO.substr(dO.lastIndexOf(".")+1)]},getUserMedia:function(dO){if(!window.getUserMedia){window.getUserMedia=navigator.getUserMedia||navigator.mozGetUserMedia}window.getUserMedia(dO)},getMovementX:function(dO){return dO.movementX||dO.mozMovementX||dO.webkitMovementX||0},getMovementY:function(dO){return dO.movementY||dO.mozMovementY||dO.webkitMovementY||0},getMouseWheelDelta:function(dO){var dP=0;switch(dO.type){case"DOMMouseScroll":dP=dO.detail/3;break;case"mousewheel":dP=dO.wheelDelta/120;break;case"wheel":dP=dO.deltaY;switch(dO.deltaMode){case 0:dP/=100;break;case 1:dP/=3;break;case 2:dP*=80;break;default:throw"unrecognized mouse wheel delta mode: "+dO.deltaMode}break;default:throw"unrecognized mouse wheel event: "+dO.type}return dP},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(dP){if(aW.pointerLock){if(dP.type!="mousemove"&&("mozMovementX" in dP)){aW.mouseMovementX=aW.mouseMovementY=0}else{aW.mouseMovementX=aW.getMovementX(dP);aW.mouseMovementY=aW.getMovementY(dP)}if(typeof SDL!="undefined"){aW.mouseX=SDL.mouseX+aW.mouseMovementX;aW.mouseY=SDL.mouseY+aW.mouseMovementY}else{aW.mouseX+=aW.mouseMovementX;aW.mouseY+=aW.mouseMovementY}}else{var dV=bY.canvas.getBoundingClientRect();var dS=bY.canvas.width;var dO=bY.canvas.height;var d0=((typeof window.scrollX!=="undefined")?window.scrollX:window.pageXOffset);var dY=((typeof window.scrollY!=="undefined")?window.scrollY:window.pageYOffset);bJ((typeof d0!=="undefined")&&(typeof dY!=="undefined"),"Unable to retrieve scroll position, mouse positions likely broken.");if(dP.type==="touchstart"||dP.type==="touchend"||dP.type==="touchmove"){var dT=dP.touch;if(dT===undefined){return}var dR=dT.pageX-(d0+dV.left);var dQ=dT.pageY-(dY+dV.top);dR=dR*(dS/dV.width);dQ=dQ*(dO/dV.height);var dX={x:dR,y:dQ};if(dP.type==="touchstart"){aW.lastTouches[dT.identifier]=dX;aW.touches[dT.identifier]=dX}else{if(dP.type==="touchend"||dP.type==="touchmove"){var dZ=aW.touches[dT.identifier];if(!dZ){dZ=dX}aW.lastTouches[dT.identifier]=dZ;aW.touches[dT.identifier]=dX}}return}var dW=dP.pageX-(d0+dV.left);var dU=dP.pageY-(dY+dV.top);dW=dW*(dS/dV.width);dU=dU*(dO/dV.height);aW.mouseMovementX=dW-aW.mouseX;aW.mouseMovementY=dU-aW.mouseY;aW.mouseX=dW;aW.mouseY=dU}},asyncLoad:function(dP,dS,dO,dQ){var dR=!dQ?x("al "+dP):"";du(dP,function(dT){bJ(dT,'Loading data file "'+dP+'" failed (no arrayBuffer).');dS(new Uint8Array(dT));if(dR){bj(dR)}},function(dT){if(dO){dO()}else{throw'Loading data file "'+dP+'" failed.'}});if(dR){cQ(dR)}},resizeListeners:[],updateResizeListeners:function(){var dO=bY.canvas;aW.resizeListeners.forEach(function(dP){dP(dO.width,dO.height)})},setCanvasSize:function(dR,dP,dO){var dQ=bY.canvas;aW.updateCanvasDimensions(dQ,dR,dP);if(!dO){aW.updateResizeListeners()}},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var dO=b9[((SDL.screen)>>2)];dO=dO|8388608;ar[((SDL.screen)>>2)]=dO}aW.updateCanvasDimensions(bY.canvas);aW.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var dO=b9[((SDL.screen)>>2)];dO=dO&~8388608;ar[((SDL.screen)>>2)]=dO}aW.updateCanvasDimensions(bY.canvas);aW.updateResizeListeners()},updateCanvasDimensions:function(dQ,dT,dP){if(dT&&dP){dQ.widthNative=dT;dQ.heightNative=dP}else{dT=dQ.widthNative;dP=dQ.heightNative}var dO=dT;var dS=dP;if(bY.forcedAspectRatio&&bY.forcedAspectRatio>0){if(dO/dS<bY.forcedAspectRatio){dO=Math.round(dS*bY.forcedAspectRatio)}else{dS=Math.round(dO/bY.forcedAspectRatio)}}if(((document.fullscreenElement||document.mozFullScreenElement||document.msFullscreenElement||document.webkitFullscreenElement||document.webkitCurrentFullScreenElement)===dQ.parentNode)&&(typeof screen!="undefined")){var dR=Math.min(screen.width/dO,screen.height/dS);dO=Math.round(dO*dR);dS=Math.round(dS*dR)}if(aW.resizeCanvas){if(dQ.width!=dO){dQ.width=dO}if(dQ.height!=dS){dQ.height=dS}if(typeof dQ.style!="undefined"){dQ.style.removeProperty("width");dQ.style.removeProperty("height")}}else{if(dQ.width!=dT){dQ.width=dT}if(dQ.height!=dP){dQ.height=dP}if(typeof dQ.style!="undefined"){if(dO!=dT||dS!=dP){dQ.style.setProperty("width",dO+"px","important");dQ.style.setProperty("height",dS+"px","important")}else{dQ.style.removeProperty("width");dQ.style.removeProperty("height")}}}},wgetRequests:{},nextWgetRequestHandle:0,getNextWgetRequestHandle:function(){var dO=aW.nextWgetRequestHandle;aW.nextWgetRequestHandle++;return dO}};function aZ(dO){c3("Stack overflow! Attempted to allocate "+dO+" bytes on the stack, but stack has only "+(c1-aK()+dO)+" bytes available!")}function dt(dO){cJ("warning: build with  -s DEMANGLE_SUPPORT=1  to link in libcxxabi demangling");return dO}function c7(dP){var dO=/\b_Z[\w\d_]+/g;return dP.replace(dO,function(dQ){var dR=dt(dQ);return dQ===dR?dQ:(dR+" ["+dQ+"]")})}function cW(){var dO=new Error();if(!dO.stack){try{throw new Error()}catch(dP){dO=dP}if(!dO.stack){return"(no stack trace available)"}}return dO.stack.toString()}function G(){var dO=cW();if(bY.extraStackTrace){dO+="\n"+bY.extraStackTrace()}return c7(dO)}function aX(){c3("stack overflow")}function cU(dO){ar[((cY())>>2)]=dO;return dO}var au={splitPath:function(dO){var dP=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return dP.exec(dO).slice(1)},normalizeArray:function(dS,dP){var dO=0;for(var dQ=dS.length-1;dQ>=0;dQ--){var dR=dS[dQ];if(dR==="."){dS.splice(dQ,1)}else{if(dR===".."){dS.splice(dQ,1);dO++}else{if(dO){dS.splice(dQ,1);dO--}}}}if(dP){for(;dO;dO--){dS.unshift("..")}}return dS},normalize:function(dQ){var dP=dQ.charAt(0)==="/",dO=dQ.substr(-1)==="/";dQ=au.normalizeArray(dQ.split("/").filter(function(dR){return !!dR}),!dP).join("/");if(!dQ&&!dP){dQ="."}if(dQ&&dO){dQ+="/"}return(dP?"/":"")+dQ},dirname:function(dR){var dO=au.splitPath(dR),dP=dO[0],dQ=dO[1];if(!dP&&!dQ){return"."}if(dQ){dQ=dQ.substr(0,dQ.length-1)}return dP+dQ},basename:function(dP){if(dP==="/"){return"/"}var dO=dP.lastIndexOf("/");if(dO===-1){return dP}return dP.substr(dO+1)},extname:function(dO){return au.splitPath(dO)[3]},join:function(){var dO=Array.prototype.slice.call(arguments,0);return au.normalize(dO.join("/"))},join2:function(dO,dP){return au.normalize(dO+"/"+dP)}};var cc={resolve:function(){var dQ="",dO=false;for(var dP=arguments.length-1;dP>=-1&&!dO;dP--){var dR=(dP>=0)?arguments[dP]:D.cwd();if(typeof dR!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else{if(!dR){return""}}dQ=dR+"/"+dQ;dO=dR.charAt(0)==="/"}dQ=au.normalizeArray(dQ.split("/").filter(function(dS){return !!dS}),!dO).join("/");return((dO?"/":"")+dQ)||"."},relative:function(dU,dV){dU=cc.resolve(dU).substr(1);dV=cc.resolve(dV).substr(1);function dQ(dX){var dZ=0;for(;dZ<dX.length;dZ++){if(dX[dZ]!==""){break}}var dY=dX.length-1;for(;dY>=0;dY--){if(dX[dY]!==""){break}}if(dZ>dY){return[]}return dX.slice(dZ,dY-dZ+1)}var dT=dQ(dU.split("/"));var dP=dQ(dV.split("/"));var dO=Math.min(dT.length,dP.length);var dW=dO;for(var dS=0;dS<dO;dS++){if(dT[dS]!==dP[dS]){dW=dS;break}}var dR=[];for(var dS=dW;dS<dT.length;dS++){dR.push("..")}dR=dR.concat(dP.slice(dW));return dR.join("/")}};var ad={ttys:[],init:function(){},shutdown:function(){},register:function(dO,dP){ad.ttys[dO]={input:[],output:[],ops:dP};D.registerDevice(dO,ad.stream_ops)},stream_ops:{open:function(dP){var dO=ad.ttys[dP.node.rdev];if(!dO){throw new D.ErrnoError(43)}dP.tty=dO;dP.seekable=false},close:function(dO){dO.tty.ops.flush(dO.tty)},flush:function(dO){dO.tty.ops.flush(dO.tty)},read:function(dV,dR,dQ,dP,dU){if(!dV.tty||!dV.tty.ops.get_char){throw new D.ErrnoError(60)}var dO=0;for(var dS=0;dS<dP;dS++){var dW;try{dW=dV.tty.ops.get_char(dV.tty)}catch(dT){throw new D.ErrnoError(29)}if(dW===undefined&&dO===0){throw new D.ErrnoError(6)}if(dW===null||dW===undefined){break}dO++;dR[dQ+dS]=dW}if(dO){dV.node.timestamp=Date.now()}return dO},write:function(dT,dO,dS,dQ,dU){if(!dT.tty||!dT.tty.ops.put_char){throw new D.ErrnoError(60)}try{for(var dP=0;dP<dQ;dP++){dT.tty.ops.put_char(dT.tty,dO[dS+dP])}}catch(dR){throw new D.ErrnoError(29)}if(dQ){dT.node.timestamp=Date.now()}return dP}},default_tty_ops:{get_char:function(dT){if(!dT.input.length){var dO=null;if(bK){var dQ=256;var dP=Buffer.alloc?Buffer.alloc(dQ):new Buffer(dQ);var dS=0;try{dS=a6.readSync(process.stdin.fd,dP,0,dQ,null)}catch(dR){if(dR.toString().indexOf("EOF")!=-1){dS=0}else{throw dR}}if(dS>0){dO=dP.slice(0,dS).toString("utf-8")}else{dO=null}}else{if(typeof window!="undefined"&&typeof window.prompt=="function"){dO=window.prompt("Input: ");if(dO!==null){dO+="\n"}}else{if(typeof readline=="function"){dO=readline();if(dO!==null){dO+="\n"}}}}if(!dO){return null}dT.input=aq(dO,true)}return dT.input.shift()},put_char:function(dP,dO){if(dO===null||dO===10){cp(am(dP.output,0));dP.output=[]}else{if(dO!=0){dP.output.push(dO)}}},flush:function(dO){if(dO.output&&dO.output.length>0){cp(am(dO.output,0));dO.output=[]}}},default_tty1_ops:{put_char:function(dP,dO){if(dO===null||dO===10){m(am(dP.output,0));dP.output=[]}else{if(dO!=0){dP.output.push(dO)}}},flush:function(dO){if(dO.output&&dO.output.length>0){m(am(dO.output,0));dO.output=[]}}}};var R={ops_table:null,mount:function(dO){return R.createNode(null,"/",16384|511,0)},createNode:function(dQ,dP,dS,dO){if(D.isBlkdev(dS)||D.isFIFO(dS)){throw new D.ErrnoError(63)}if(!R.ops_table){R.ops_table={dir:{node:{getattr:R.node_ops.getattr,setattr:R.node_ops.setattr,lookup:R.node_ops.lookup,mknod:R.node_ops.mknod,rename:R.node_ops.rename,unlink:R.node_ops.unlink,rmdir:R.node_ops.rmdir,readdir:R.node_ops.readdir,symlink:R.node_ops.symlink},stream:{llseek:R.stream_ops.llseek}},file:{node:{getattr:R.node_ops.getattr,setattr:R.node_ops.setattr},stream:{llseek:R.stream_ops.llseek,read:R.stream_ops.read,write:R.stream_ops.write,allocate:R.stream_ops.allocate,mmap:R.stream_ops.mmap,msync:R.stream_ops.msync}},link:{node:{getattr:R.node_ops.getattr,setattr:R.node_ops.setattr,readlink:R.node_ops.readlink},stream:{}},chrdev:{node:{getattr:R.node_ops.getattr,setattr:R.node_ops.setattr},stream:D.chrdev_stream_ops}}}var dR=D.createNode(dQ,dP,dS,dO);if(D.isDir(dR.mode)){dR.node_ops=R.ops_table.dir.node;dR.stream_ops=R.ops_table.dir.stream;dR.contents={}}else{if(D.isFile(dR.mode)){dR.node_ops=R.ops_table.file.node;dR.stream_ops=R.ops_table.file.stream;dR.usedBytes=0;dR.contents=null}else{if(D.isLink(dR.mode)){dR.node_ops=R.ops_table.link.node;dR.stream_ops=R.ops_table.link.stream}else{if(D.isChrdev(dR.mode)){dR.node_ops=R.ops_table.chrdev.node;dR.stream_ops=R.ops_table.chrdev.stream}}}}dR.timestamp=Date.now();if(dQ){dQ.contents[dP]=dR}return dR},getFileDataAsRegularArray:function(dQ){if(dQ.contents&&dQ.contents.subarray){var dO=[];for(var dP=0;dP<dQ.usedBytes;++dP){dO.push(dQ.contents[dP])}return dO}return dQ.contents},getFileDataAsTypedArray:function(dO){if(!dO.contents){return new Uint8Array(0)}if(dO.contents.subarray){return dO.contents.subarray(0,dO.usedBytes)}return new Uint8Array(dO.contents)},expandFileStorage:function(dP,dR){var dS=dP.contents?dP.contents.length:0;if(dS>=dR){return}var dQ=1024*1024;dR=Math.max(dR,(dS*(dS<dQ?2:1.125))>>>0);if(dS!=0){dR=Math.max(dR,256)}var dO=dP.contents;dP.contents=new Uint8Array(dR);if(dP.usedBytes>0){dP.contents.set(dO.subarray(0,dP.usedBytes),0)}return},resizeFileStorage:function(dQ,dP){if(dQ.usedBytes==dP){return}if(dP==0){dQ.contents=null;dQ.usedBytes=0;return}if(!dQ.contents||dQ.contents.subarray){var dO=dQ.contents;dQ.contents=new Uint8Array(dP);if(dO){dQ.contents.set(dO.subarray(0,Math.min(dP,dQ.usedBytes)))}dQ.usedBytes=dP;return}if(!dQ.contents){dQ.contents=[]}if(dQ.contents.length>dP){dQ.contents.length=dP}else{while(dQ.contents.length<dP){dQ.contents.push(0)}}dQ.usedBytes=dP},node_ops:{getattr:function(dP){var dO={};dO.dev=D.isChrdev(dP.mode)?dP.id:1;dO.ino=dP.id;dO.mode=dP.mode;dO.nlink=1;dO.uid=0;dO.gid=0;dO.rdev=dP.rdev;if(D.isDir(dP.mode)){dO.size=4096}else{if(D.isFile(dP.mode)){dO.size=dP.usedBytes}else{if(D.isLink(dP.mode)){dO.size=dP.link.length}else{dO.size=0}}}dO.atime=new Date(dP.timestamp);dO.mtime=new Date(dP.timestamp);dO.ctime=new Date(dP.timestamp);dO.blksize=4096;dO.blocks=Math.ceil(dO.size/dO.blksize);return dO},setattr:function(dP,dO){if(dO.mode!==undefined){dP.mode=dO.mode}if(dO.timestamp!==undefined){dP.timestamp=dO.timestamp}if(dO.size!==undefined){R.resizeFileStorage(dP,dO.size)}},lookup:function(dP,dO){throw D.genericErrors[44]},mknod:function(dQ,dP,dR,dO){return R.createNode(dQ,dP,dR,dO)},rename:function(dQ,dP,dR){if(D.isDir(dQ.mode)){var dT;try{dT=D.lookupNode(dP,dR)}catch(dS){}if(dT){for(var dO in dT.contents){throw new D.ErrnoError(55)}}}delete dQ.parent.contents[dQ.name];dQ.name=dR;dP.contents[dR]=dQ;dQ.parent=dP},unlink:function(dP,dO){delete dP.contents[dO]},rmdir:function(dQ,dO){var dR=D.lookupNode(dQ,dO);for(var dP in dR.contents){throw new D.ErrnoError(55)}delete dQ.contents[dO]},readdir:function(dQ){var dO=[".",".."];for(var dP in dQ.contents){if(!dQ.contents.hasOwnProperty(dP)){continue}dO.push(dP)}return dO},symlink:function(dQ,dP,dO){var dR=R.createNode(dQ,dP,511|40960,0);dR.link=dO;return dR},readlink:function(dO){if(!D.isLink(dO.mode)){throw new D.ErrnoError(28)}return dO.link}},stream_ops:{read:function(dV,dP,dU,dT,dO){var dS=dV.node.contents;if(dO>=dV.node.usedBytes){return 0}var dR=Math.min(dV.node.usedBytes-dO,dT);bJ(dR>=0);if(dR>8&&dS.subarray){dP.set(dS.subarray(dO,dO+dR),dU)}else{for(var dQ=0;dQ<dR;dQ++){dP[dU+dQ]=dS[dO+dQ]}}return dR},write:function(dU,dP,dT,dS,dO,dV){bJ(!(dP instanceof ArrayBuffer));if(!dS){return 0}var dR=dU.node;dR.timestamp=Date.now();if(dP.subarray&&(!dR.contents||dR.contents.subarray)){if(dV){bJ(dO===0,"canOwn must imply no weird position inside the file");dR.contents=dP.subarray(dT,dT+dS);dR.usedBytes=dS;return dS}else{if(dR.usedBytes===0&&dO===0){dR.contents=dP.slice(dT,dT+dS);dR.usedBytes=dS;return dS}else{if(dO+dS<=dR.usedBytes){dR.contents.set(dP.subarray(dT,dT+dS),dO);return dS}}}}R.expandFileStorage(dR,dO+dS);if(dR.contents.subarray&&dP.subarray){dR.contents.set(dP.subarray(dT,dT+dS),dO)}else{for(var dQ=0;dQ<dS;dQ++){dR.contents[dO+dQ]=dP[dT+dQ]}}dR.usedBytes=Math.max(dR.usedBytes,dO+dS);return dS},llseek:function(dR,dQ,dP){var dO=dQ;if(dP===1){dO+=dR.position}else{if(dP===2){if(D.isFile(dR.node.mode)){dO+=dR.node.usedBytes}}}if(dO<0){throw new D.ErrnoError(28)}return dO},allocate:function(dQ,dP,dO){R.expandFileStorage(dQ.node,dP+dO);dQ.node.usedBytes=Math.max(dQ.node.usedBytes,dP+dO)},mmap:function(dV,dU,dQ,dT,dW,dR){bJ(dU===0);if(!D.isFile(dV.node.mode)){throw new D.ErrnoError(43)}var dO;var dP;var dS=dV.node.contents;if(!(dR&2)&&dS.buffer===dD){dP=false;dO=dS.byteOffset}else{if(dT>0||dT+dQ<dS.length){if(dS.subarray){dS=dS.subarray(dT,dT+dQ)}else{dS=Array.prototype.slice.call(dS,dT,dT+dQ)}}dP=true;dO=cN(dQ);if(!dO){throw new D.ErrnoError(48)}dx.set(dS,dO)}return{ptr:dO,allocated:dP}},msync:function(dT,dP,dS,dR,dO){if(!D.isFile(dT.node.mode)){throw new D.ErrnoError(43)}if(dO&2){return 0}var dQ=R.stream_ops.write(dT,dP,0,dR,dS,false);return 0}}};var co={0:"Success",1:"Arg list too long",2:"Permission denied",3:"Address already in use",4:"Address not available",5:"Address family not supported by protocol family",6:"No more processes",7:"Socket already connected",8:"Bad file number",9:"Trying to read unreadable message",10:"Mount device busy",11:"Operation canceled",12:"No children",13:"Connection aborted",14:"Connection refused",15:"Connection reset by peer",16:"File locking deadlock error",17:"Destination address required",18:"Math arg out of domain of func",19:"Quota exceeded",20:"File exists",21:"Bad address",22:"File too large",23:"Host is unreachable",24:"Identifier removed",25:"Illegal byte sequence",26:"Connection already in progress",27:"Interrupted system call",28:"Invalid argument",29:"I/O error",30:"Socket is already connected",31:"Is a directory",32:"Too many symbolic links",33:"Too many open files",34:"Too many links",35:"Message too long",36:"Multihop attempted",37:"File or path name too long",38:"Network interface is not configured",39:"Connection reset by network",40:"Network is unreachable",41:"Too many open files in system",42:"No buffer space available",43:"No such device",44:"No such file or directory",45:"Exec format error",46:"No record locks available",47:"The link has been severed",48:"Not enough core",49:"No message of desired type",50:"Protocol not available",51:"No space left on device",52:"Function not implemented",53:"Socket is not connected",54:"Not a directory",55:"Directory not empty",56:"State not recoverable",57:"Socket operation on non-socket",59:"Not a typewriter",60:"No such device or address",61:"Value too large for defined data type",62:"Previous owner died",63:"Not super-user",64:"Broken pipe",65:"Protocol error",66:"Unknown protocol",67:"Protocol wrong type for socket",68:"Math result not representable",69:"Read only file system",70:"Illegal seek",71:"No such process",72:"Stale file handle",73:"Connection timed out",74:"Text file busy",75:"Cross-device link",100:"Device not a stream",101:"Bad font file fmt",102:"Invalid slot",103:"Invalid request code",104:"No anode",105:"Block device required",106:"Channel number out of range",107:"Level 3 halted",108:"Level 3 reset",109:"Link number out of range",110:"Protocol driver not attached",111:"No CSI structure available",112:"Level 2 halted",113:"Invalid exchange",114:"Invalid request descriptor",115:"Exchange full",116:"No data (for no delay io)",117:"Timer expired",118:"Out of streams resources",119:"Machine is not on the network",120:"Package not installed",121:"The object is remote",122:"Advertise error",123:"Srmount error",124:"Communication error on send",125:"Cross mount point (not really error)",126:"Given log. name not unique",127:"f.d. invalid for this operation",128:"Remote address changed",129:"Can   access a needed shared lib",130:"Accessing a corrupted shared lib",131:".lib section in a.out corrupted",132:"Attempting to link in too many libs",133:"Attempting to exec a shared library",135:"Streams pipe error",136:"Too many users",137:"Socket type not supported",138:"Not supported",139:"Protocol family not supported",140:"Can't send after socket shutdown",141:"Too many references",142:"Host is down",148:"No medium (in tape drive)",156:"Level 2 not synchronized"};var ae={EPERM:63,ENOENT:44,ESRCH:71,EINTR:27,EIO:29,ENXIO:60,E2BIG:1,ENOEXEC:45,EBADF:8,ECHILD:12,EAGAIN:6,EWOULDBLOCK:6,ENOMEM:48,EACCES:2,EFAULT:21,ENOTBLK:105,EBUSY:10,EEXIST:20,EXDEV:75,ENODEV:43,ENOTDIR:54,EISDIR:31,EINVAL:28,ENFILE:41,EMFILE:33,ENOTTY:59,ETXTBSY:74,EFBIG:22,ENOSPC:51,ESPIPE:70,EROFS:69,EMLINK:34,EPIPE:64,EDOM:18,ERANGE:68,ENOMSG:49,EIDRM:24,ECHRNG:106,EL2NSYNC:156,EL3HLT:107,EL3RST:108,ELNRNG:109,EUNATCH:110,ENOCSI:111,EL2HLT:112,EDEADLK:16,ENOLCK:46,EBADE:113,EBADR:114,EXFULL:115,ENOANO:104,EBADRQC:103,EBADSLT:102,EDEADLOCK:16,EBFONT:101,ENOSTR:100,ENODATA:116,ETIME:117,ENOSR:118,ENONET:119,ENOPKG:120,EREMOTE:121,ENOLINK:47,EADV:122,ESRMNT:123,ECOMM:124,EPROTO:65,EMULTIHOP:36,EDOTDOT:125,EBADMSG:9,ENOTUNIQ:126,EBADFD:127,EREMCHG:128,ELIBACC:129,ELIBBAD:130,ELIBSCN:131,ELIBMAX:132,ELIBEXEC:133,ENOSYS:52,ENOTEMPTY:55,ENAMETOOLONG:37,ELOOP:32,EOPNOTSUPP:138,EPFNOSUPPORT:139,ECONNRESET:15,ENOBUFS:42,EAFNOSUPPORT:5,EPROTOTYPE:67,ENOTSOCK:57,ENOPROTOOPT:50,ESHUTDOWN:140,ECONNREFUSED:14,EADDRINUSE:3,ECONNABORTED:13,ENETUNREACH:40,ENETDOWN:38,ETIMEDOUT:73,EHOSTDOWN:142,EHOSTUNREACH:23,EINPROGRESS:26,EALREADY:7,EDESTADDRREQ:17,EMSGSIZE:35,EPROTONOSUPPORT:66,ESOCKTNOSUPPORT:137,EADDRNOTAVAIL:4,ENETRESET:39,EISCONN:30,ENOTCONN:53,ETOOMANYREFS:141,EUSERS:136,EDQUOT:19,ESTALE:72,ENOTSUP:138,ENOMEDIUM:148,EILSEQ:25,EOVERFLOW:61,ECANCELED:11,ENOTRECOVERABLE:56,EOWNERDEAD:62,ESTRPIPE:135};var D={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function(dO){if(!(dO instanceof D.ErrnoError)){throw dO+" : "+G()}return cU(dO.errno)},lookupPath:function(dZ,dO){dZ=cc.resolve(D.cwd(),dZ);dO=dO||{};if(!dZ){return{path:"",node:null}}var dR={follow_mount:true,recurse_count:0};for(var dX in dR){if(dO[dX]===undefined){dO[dX]=dR[dX]}}if(dO.recurse_count>8){throw new D.ErrnoError(32)}var dS=au.normalizeArray(dZ.split("/").filter(function(d0){return !!d0}),false);var dV=D.root;var dY="/";for(var dT=0;dT<dS.length;dT++){var dP=(dT===dS.length-1);if(dP&&dO.parent){break}dV=D.lookupNode(dV,dS[dT]);dY=au.join2(dY,dS[dT]);if(D.isMountpoint(dV)){if(!dP||(dP&&dO.follow_mount)){dV=dV.mounted.root}}if(!dP||dO.follow){var dU=0;while(D.isLink(dV.mode)){var dW=D.readlink(dY);dY=cc.resolve(au.dirname(dY),dW);var dQ=D.lookupPath(dY,{recurse_count:dO.recurse_count});dV=dQ.node;if(dU++>40){throw new D.ErrnoError(32)}}}}return{path:dY,node:dV}},getPath:function(dP){var dQ;while(true){if(D.isRoot(dP)){var dO=dP.mount.mountpoint;if(!dQ){return dO}return dO[dO.length-1]!=="/"?dO+"/"+dQ:dO+dQ}dQ=dQ?dP.name+"/"+dQ:dP.name;dP=dP.parent}},hashName:function(dR,dO){var dQ=0;for(var dP=0;dP<dO.length;dP++){dQ=((dQ<<5)-dQ+dO.charCodeAt(dP))|0}return((dR+dQ)>>>0)%D.nameTable.length},hashAddNode:function(dO){var dP=D.hashName(dO.parent.id,dO.name);dO.name_next=D.nameTable[dP];D.nameTable[dP]=dO},hashRemoveNode:function(dO){var dQ=D.hashName(dO.parent.id,dO.name);if(D.nameTable[dQ]===dO){D.nameTable[dQ]=dO.name_next}else{var dP=D.nameTable[dQ];while(dP){if(dP.name_next===dO){dP.name_next=dO.name_next;break}dP=dP.name_next}}},lookupNode:function(dQ,dP){var dO=D.mayLookup(dQ);if(dO){throw new D.ErrnoError(dO,dQ)}var dS=D.hashName(dQ.id,dP);for(var dR=D.nameTable[dS];dR;dR=dR.name_next){var dT=dR.name;if(dR.parent.id===dQ.id&&dT===dP){return dR}}return D.lookup(dQ,dP)},createNode:function(dQ,dP,dS,dO){var dR=new D.FSNode(dQ,dP,dS,dO);D.hashAddNode(dR);return dR},destroyNode:function(dO){D.hashRemoveNode(dO)},isRoot:function(dO){return dO===dO.parent},isMountpoint:function(dO){return !!dO.mounted},isFile:function(dO){return(dO&61440)===32768},isDir:function(dO){return(dO&61440)===16384},isLink:function(dO){return(dO&61440)===40960},isChrdev:function(dO){return(dO&61440)===8192},isBlkdev:function(dO){return(dO&61440)===24576},isFIFO:function(dO){return(dO&61440)===4096},isSocket:function(dO){return(dO&49152)===49152},flagModes:{r:0,rs:1052672,"r+":2,w:577,wx:705,xw:705,"w+":578,"wx+":706,"xw+":706,a:1089,ax:1217,xa:1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function(dP){var dO=D.flagModes[dP];if(typeof dO==="undefined"){throw new Error("Unknown file open mode: "+dP)}return dO},flagsToPermissionString:function(dO){var dP=["r","w","rw"][dO&3];if((dO&512)){dP+="w"}return dP},nodePermissions:function(dP,dO){if(D.ignorePermissions){return 0}if(dO.indexOf("r")!==-1&&!(dP.mode&292)){return 2}else{if(dO.indexOf("w")!==-1&&!(dP.mode&146)){return 2}else{if(dO.indexOf("x")!==-1&&!(dP.mode&73)){return 2}}}return 0},mayLookup:function(dP){var dO=D.nodePermissions(dP,"x");if(dO){return dO}if(!dP.node_ops.lookup){return 2}return 0},mayCreate:function(dP,dO){try{var dQ=D.lookupNode(dP,dO);return 20}catch(dR){}return D.nodePermissions(dP,"wx")},mayDelete:function(dR,dQ,dO){var dS;try{dS=D.lookupNode(dR,dQ)}catch(dT){return dT.errno}var dP=D.nodePermissions(dR,"wx");if(dP){return dP}if(dO){if(!D.isDir(dS.mode)){return 54}if(D.isRoot(dS)||D.getPath(dS)===D.cwd()){return 10}}else{if(D.isDir(dS.mode)){return 31}}return 0},mayOpen:function(dP,dO){if(!dP){return 44}if(D.isLink(dP.mode)){return 32}else{if(D.isDir(dP.mode)){if(D.flagsToPermissionString(dO)!=="r"||(dO&512)){return 31}}}return D.nodePermissions(dP,D.flagsToPermissionString(dO))},MAX_OPEN_FDS:4096,nextfd:function(dQ,dP){dQ=dQ||0;dP=dP||D.MAX_OPEN_FDS;for(var dO=dQ;dO<=dP;dO++){if(!D.streams[dO]){return dO}}throw new D.ErrnoError(33)},getStream:function(dO){return D.streams[dO]},createStream:function(dS,dQ,dP){if(!D.FSStream){D.FSStream=function(){};D.FSStream.prototype={object:{get:function(){return this.node},set:function(dU){this.node=dU}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return(this.flags&1024)}}}}var dT=new D.FSStream();for(var dR in dS){dT[dR]=dS[dR]}dS=dT;var dO=D.nextfd(dQ,dP);dS.fd=dO;D.streams[dO]=dS;return dS},closeStream:function(dO){D.streams[dO]=null},chrdev_stream_ops:{open:function(dP){var dO=D.getDevice(dP.node.rdev);dP.stream_ops=dO.stream_ops;if(dP.stream_ops.open){dP.stream_ops.open(dP)}},llseek:function(){throw new D.ErrnoError(70)}},major:function(dO){return((dO)>>8)},minor:function(dO){return((dO)&255)},makedev:function(dP,dO){return((dP)<<8|(dO))},registerDevice:function(dO,dP){D.devices[dO]={stream_ops:dP}},getDevice:function(dO){return D.devices[dO]},getMounts:function(dP){var dR=[];var dQ=[dP];while(dQ.length){var dO=dQ.pop();dR.push(dO);dQ.push.apply(dQ,dO.mounts)}return dR},syncfs:function(dS,dT){if(typeof(dS)==="function"){dT=dS;dS=false}D.syncFSRequests++;if(D.syncFSRequests>1){m("warning: "+D.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var dQ=D.getMounts(D.root.mount);var dP=0;function dR(dU){bJ(D.syncFSRequests>0);D.syncFSRequests--;return dT(dU)}function dO(dU){if(dU){if(!dO.errored){dO.errored=true;return dR(dU)}return}if(++dP>=dQ.length){dR(null)}}dQ.forEach(function(dU){if(!dU.type.syncfs){return dO(null)}dU.type.syncfs(dU,dS,dO)})},mount:function(dS,dO,dW){if(typeof dS==="string"){throw dS}var dU=dW==="/";var dV=!dW;var dQ;if(dU&&D.root){throw new D.ErrnoError(10)}else{if(!dU&&!dV){var dP=D.lookupPath(dW,{follow_mount:false});dW=dP.path;dQ=dP.node;if(D.isMountpoint(dQ)){throw new D.ErrnoError(10)}if(!D.isDir(dQ.mode)){throw new D.ErrnoError(54)}}}var dT={type:dS,opts:dO,mountpoint:dW,mounts:[]};var dR=dS.mount(dT);dR.mount=dT;dT.root=dR;if(dU){D.root=dR}else{if(dQ){dQ.mounted=dT;if(dQ.mount){dQ.mount.mounts.push(dT)}}}return dR},unmount:function(dQ){var dT=D.lookupPath(dQ,{follow_mount:false});if(!D.isMountpoint(dT.node)){throw new D.ErrnoError(28)}var dS=dT.node;var dP=dS.mounted;var dR=D.getMounts(dP);Object.keys(D.nameTable).forEach(function(dW){var dV=D.nameTable[dW];while(dV){var dU=dV.name_next;if(dR.indexOf(dV.mount)!==-1){D.destroyNode(dV)}dV=dU}});dS.mounted=null;var dO=dS.mount.mounts.indexOf(dP);bJ(dO!==-1);dS.mount.mounts.splice(dO,1)},lookup:function(dP,dO){return dP.node_ops.lookup(dP,dO)},mknod:function(dT,dU,dO){var dS=D.lookupPath(dT,{parent:true});var dR=dS.node;var dQ=au.basename(dT);if(!dQ||dQ==="."||dQ===".."){throw new D.ErrnoError(28)}var dP=D.mayCreate(dR,dQ);if(dP){throw new D.ErrnoError(dP)}if(!dR.node_ops.mknod){throw new D.ErrnoError(63)}return dR.node_ops.mknod(dR,dQ,dU,dO)},create:function(dO,dP){dP=dP!==undefined?dP:438;dP&=4095;dP|=32768;return D.mknod(dO,dP,0)},mkdir:function(dO,dP){dP=dP!==undefined?dP:511;dP&=511|512;dP|=16384;return D.mknod(dO,dP,0)},mkdirTree:function(dR,dT){var dQ=dR.split("/");var dS="";for(var dO=0;dO<dQ.length;++dO){if(!dQ[dO]){continue}dS+="/"+dQ[dO];try{D.mkdir(dS,dT)}catch(dP){if(dP.errno!=20){throw dP}}}},mkdev:function(dP,dQ,dO){if(typeof(dO)==="undefined"){dO=dQ;dQ=438}dQ|=8192;return D.mknod(dP,dQ,dO)},symlink:function(dO,dT){if(!cc.resolve(dO)){throw new D.ErrnoError(44)}var dS=D.lookupPath(dT,{parent:true});var dR=dS.node;if(!dR){throw new D.ErrnoError(44)}var dQ=au.basename(dT);var dP=D.mayCreate(dR,dQ);if(dP){throw new D.ErrnoError(dP)}if(!dR.node_ops.symlink){throw new D.ErrnoError(63)}return dR.node_ops.symlink(dR,dQ,dO)},rename:function(dS,dV){var dO=au.dirname(dS);var d2=au.dirname(dV);var dU=au.basename(dS);var dW=au.basename(dV);var dT,dR,d1;try{dT=D.lookupPath(dS,{parent:true});dR=dT.node;dT=D.lookupPath(dV,{parent:true});d1=dT.node}catch(d0){throw new D.ErrnoError(10)}if(!dR||!d1){throw new D.ErrnoError(44)}if(dR.mount!==d1.mount){throw new D.ErrnoError(75)}var dY=D.lookupNode(dR,dU);var dP=cc.relative(dS,d2);if(dP.charAt(0)!=="."){throw new D.ErrnoError(28)}dP=cc.relative(dV,dO);if(dP.charAt(0)!=="."){throw new D.ErrnoError(55)}var dZ;try{dZ=D.lookupNode(d1,dW)}catch(d0){}if(dY===dZ){return}var dQ=D.isDir(dY.mode);var dX=D.mayDelete(dR,dU,dQ);if(dX){throw new D.ErrnoError(dX)}dX=dZ?D.mayDelete(d1,dW,dQ):D.mayCreate(d1,dW);if(dX){throw new D.ErrnoError(dX)}if(!dR.node_ops.rename){throw new D.ErrnoError(63)}if(D.isMountpoint(dY)||(dZ&&D.isMountpoint(dZ))){throw new D.ErrnoError(10)}if(d1!==dR){dX=D.nodePermissions(dR,"w");if(dX){throw new D.ErrnoError(dX)}}try{if(D.trackingDelegate.willMovePath){D.trackingDelegate.willMovePath(dS,dV)}}catch(d0){m("FS.trackingDelegate['willMovePath']('"+dS+"', '"+dV+"') threw an exception: "+d0.message)}D.hashRemoveNode(dY);try{dR.node_ops.rename(dY,d1,dW)}catch(d0){throw d0}finally{D.hashAddNode(dY)}try{if(D.trackingDelegate.onMovePath){D.trackingDelegate.onMovePath(dS,dV)}}catch(d0){m("FS.trackingDelegate['onMovePath']('"+dS+"', '"+dV+"') threw an exception: "+d0.message)}},rmdir:function(dU){var dT=D.lookupPath(dU,{parent:true});var dQ=dT.node;var dP=au.basename(dU);var dR=D.lookupNode(dQ,dP);var dO=D.mayDelete(dQ,dP,true);if(dO){throw new D.ErrnoError(dO)}if(!dQ.node_ops.rmdir){throw new D.ErrnoError(63)}if(D.isMountpoint(dR)){throw new D.ErrnoError(10)}try{if(D.trackingDelegate.willDeletePath){D.trackingDelegate.willDeletePath(dU)}}catch(dS){m("FS.trackingDelegate['willDeletePath']('"+dU+"') threw an exception: "+dS.message)}dQ.node_ops.rmdir(dQ,dP);D.destroyNode(dR);try{if(D.trackingDelegate.onDeletePath){D.trackingDelegate.onDeletePath(dU)}}catch(dS){m("FS.trackingDelegate['onDeletePath']('"+dU+"') threw an exception: "+dS.message)}},readdir:function(dQ){var dP=D.lookupPath(dQ,{follow:true});var dO=dP.node;if(!dO.node_ops.readdir){throw new D.ErrnoError(54)}return dO.node_ops.readdir(dO)},unlink:function(dU){var dT=D.lookupPath(dU,{parent:true});var dQ=dT.node;var dP=au.basename(dU);var dR=D.lookupNode(dQ,dP);var dO=D.mayDelete(dQ,dP,false);if(dO){throw new D.ErrnoError(dO)}if(!dQ.node_ops.unlink){throw new D.ErrnoError(63)}if(D.isMountpoint(dR)){throw new D.ErrnoError(10)}try{if(D.trackingDelegate.willDeletePath){D.trackingDelegate.willDeletePath(dU)}}catch(dS){m("FS.trackingDelegate['willDeletePath']('"+dU+"') threw an exception: "+dS.message)}dQ.node_ops.unlink(dQ,dP);D.destroyNode(dR);try{if(D.trackingDelegate.onDeletePath){D.trackingDelegate.onDeletePath(dU)}}catch(dS){m("FS.trackingDelegate['onDeletePath']('"+dU+"') threw an exception: "+dS.message)}},readlink:function(dQ){var dP=D.lookupPath(dQ);var dO=dP.node;if(!dO){throw new D.ErrnoError(44)}if(!dO.node_ops.readlink){throw new D.ErrnoError(28)}return cc.resolve(D.getPath(dO.parent),dO.node_ops.readlink(dO))},stat:function(dR,dO){var dQ=D.lookupPath(dR,{follow:!dO});var dP=dQ.node;if(!dP){throw new D.ErrnoError(44)}if(!dP.node_ops.getattr){throw new D.ErrnoError(63)}return dP.node_ops.getattr(dP)},lstat:function(dO){return D.stat(dO,true)},chmod:function(dR,dS,dO){var dP;if(typeof dR==="string"){var dQ=D.lookupPath(dR,{follow:!dO});dP=dQ.node}else{dP=dR}if(!dP.node_ops.setattr){throw new D.ErrnoError(63)}dP.node_ops.setattr(dP,{mode:(dS&4095)|(dP.mode&~4095),timestamp:Date.now()})},lchmod:function(dO,dP){D.chmod(dO,dP,true)},fchmod:function(dO,dQ){var dP=D.getStream(dO);if(!dP){throw new D.ErrnoError(8)}D.chmod(dP.node,dQ)},chown:function(dT,dP,dQ,dO){var dR;if(typeof dT==="string"){var dS=D.lookupPath(dT,{follow:!dO});dR=dS.node}else{dR=dT}if(!dR.node_ops.setattr){throw new D.ErrnoError(63)}dR.node_ops.setattr(dR,{timestamp:Date.now()})},lchown:function(dQ,dO,dP){D.chown(dQ,dO,dP,true)},fchown:function(dP,dO,dQ){var dR=D.getStream(dP);if(!dR){throw new D.ErrnoError(8)}D.chown(dR.node,dO,dQ)},truncate:function(dS,dO){if(dO<0){throw new D.ErrnoError(28)}var dQ;if(typeof dS==="string"){var dR=D.lookupPath(dS,{follow:true});dQ=dR.node}else{dQ=dS}if(!dQ.node_ops.setattr){throw new D.ErrnoError(63)}if(D.isDir(dQ.mode)){throw new D.ErrnoError(31)}if(!D.isFile(dQ.mode)){throw new D.ErrnoError(28)}var dP=D.nodePermissions(dQ,"w");if(dP){throw new D.ErrnoError(dP)}dQ.node_ops.setattr(dQ,{size:dO,timestamp:Date.now()})},ftruncate:function(dP,dO){var dQ=D.getStream(dP);if(!dQ){throw new D.ErrnoError(8)}if((dQ.flags&2097155)===0){throw new D.ErrnoError(28)}D.truncate(dQ.node,dO)},utime:function(dS,dQ,dO){var dR=D.lookupPath(dS,{follow:true});var dP=dR.node;dP.node_ops.setattr(dP,{timestamp:Math.max(dQ,dO)})},open:function(dZ,dS,dW,dR,dP){if(dZ===""){throw new D.ErrnoError(44)}dS=typeof dS==="string"?D.modeStringToFlags(dS):dS;dW=typeof dW==="undefined"?438:dW;if((dS&64)){dW=(dW&4095)|32768}else{dW=0}var dT;if(typeof dZ==="object"){dT=dZ}else{dZ=au.normalize(dZ);try{var dQ=D.lookupPath(dZ,{follow:!(dS&131072)});dT=dQ.node}catch(dX){}}var dU=false;if((dS&64)){if(dT){if((dS&128)){throw new D.ErrnoError(20)}}else{dT=D.mknod(dZ,dW,0);dU=true}}if(!dT){throw new D.ErrnoError(44)}if(D.isChrdev(dT.mode)){dS&=~512}if((dS&65536)&&!D.isDir(dT.mode)){throw new D.ErrnoError(54)}if(!dU){var dV=D.mayOpen(dT,dS);if(dV){throw new D.ErrnoError(dV)}}if((dS&512)){D.truncate(dT,0)}dS&=~(128|512|131072);var dY=D.createStream({node:dT,path:D.getPath(dT),flags:dS,seekable:true,position:0,stream_ops:dT.stream_ops,ungotten:[],error:false},dR,dP);if(dY.stream_ops.open){dY.stream_ops.open(dY)}if(bY.logReadFiles&&!(dS&1)){if(!D.readFiles){D.readFiles={}}if(!(dZ in D.readFiles)){D.readFiles[dZ]=1;m("FS.trackingDelegate error on read file: "+dZ)}}try{if(D.trackingDelegate.onOpenFile){var dO=0;if((dS&2097155)!==1){dO|=D.tracking.openFlags.READ}if((dS&2097155)!==0){dO|=D.tracking.openFlags.WRITE}D.trackingDelegate.onOpenFile(dZ,dO)}}catch(dX){m("FS.trackingDelegate['onOpenFile']('"+dZ+"', flags) threw an exception: "+dX.message)}return dY},close:function(dP){if(D.isClosed(dP)){throw new D.ErrnoError(8)}if(dP.getdents){dP.getdents=null}try{if(dP.stream_ops.close){dP.stream_ops.close(dP)}}catch(dO){throw dO}finally{D.closeStream(dP.fd)}dP.fd=null},isClosed:function(dO){return dO.fd===null},llseek:function(dQ,dP,dO){if(D.isClosed(dQ)){throw new D.ErrnoError(8)}if(!dQ.seekable||!dQ.stream_ops.llseek){throw new D.ErrnoError(70)}if(dO!=0&&dO!=1&&dO!=2){throw new D.ErrnoError(28)}dQ.position=dQ.stream_ops.llseek(dQ,dP,dO);dQ.ungotten=[];return dQ.position},read:function(dU,dP,dT,dQ,dO){if(dQ<0||dO<0){throw new D.ErrnoError(28)}if(D.isClosed(dU)){throw new D.ErrnoError(8)}if((dU.flags&2097155)===1){throw new D.ErrnoError(8)}if(D.isDir(dU.node.mode)){throw new D.ErrnoError(31)}if(!dU.stream_ops.read){throw new D.ErrnoError(28)}var dS=typeof dO!=="undefined";if(!dS){dO=dU.position}else{if(!dU.seekable){throw new D.ErrnoError(70)}}var dR=dU.stream_ops.read(dU,dP,dT,dQ,dO);if(!dS){dU.position+=dR}return dR},write:function(dW,dR,dQ,dO,dS,dP){if(dO<0||dS<0){throw new D.ErrnoError(28)}if(D.isClosed(dW)){throw new D.ErrnoError(8)}if((dW.flags&2097155)===0){throw new D.ErrnoError(8)}if(D.isDir(dW.node.mode)){throw new D.ErrnoError(31)}if(!dW.stream_ops.write){throw new D.ErrnoError(28)}if(dW.seekable&&dW.flags&1024){D.llseek(dW,0,2)}var dU=typeof dS!=="undefined";if(!dU){dS=dW.position}else{if(!dW.seekable){throw new D.ErrnoError(70)}}var dV=dW.stream_ops.write(dW,dR,dQ,dO,dS,dP);if(!dU){dW.position+=dV}try{if(dW.path&&D.trackingDelegate.onWriteToFile){D.trackingDelegate.onWriteToFile(dW.path)}}catch(dT){m("FS.trackingDelegate['onWriteToFile']('"+dW.path+"') threw an exception: "+dT.message)}return dV},allocate:function(dQ,dP,dO){if(D.isClosed(dQ)){throw new D.ErrnoError(8)}if(dP<0||dO<=0){throw new D.ErrnoError(28)}if((dQ.flags&2097155)===0){throw new D.ErrnoError(8)}if(!D.isFile(dQ.node.mode)&&!D.isDir(dQ.node.mode)){throw new D.ErrnoError(43)}if(!dQ.stream_ops.allocate){throw new D.ErrnoError(138)}dQ.stream_ops.allocate(dQ,dP,dO)},mmap:function(dT,dQ,dS,dO,dR,dP){if((dR&2)!==0&&(dP&2)===0&&(dT.flags&2097155)!==2){throw new D.ErrnoError(2)}if((dT.flags&2097155)===1){throw new D.ErrnoError(2)}if(!dT.stream_ops.mmap){throw new D.ErrnoError(43)}return dT.stream_ops.mmap(dT,dQ,dS,dO,dR,dP)},msync:function(dS,dP,dR,dQ,dO){if(!dS||!dS.stream_ops.msync){return 0}return dS.stream_ops.msync(dS,dP,dR,dQ,dO)},munmap:function(dO){return 0},ioctl:function(dQ,dP,dO){if(!dQ.stream_ops.ioctl){throw new D.ErrnoError(59)}return dQ.stream_ops.ioctl(dQ,dP,dO)},readFile:function(dT,dS){dS=dS||{};dS.flags=dS.flags||"r";dS.encoding=dS.encoding||"binary";if(dS.encoding!=="utf8"&&dS.encoding!=="binary"){throw new Error('Invalid encoding type "'+dS.encoding+'"')}var dP;var dU=D.open(dT,dS.flags);var dQ=D.stat(dT);var dR=dQ.size;var dO=new Uint8Array(dR);D.read(dU,dO,0,dR,0);if(dS.encoding==="utf8"){dP=am(dO,0)}else{if(dS.encoding==="binary"){dP=dO}}D.close(dU);return dP},writeFile:function(dS,dR,dQ){dQ=dQ||{};dQ.flags=dQ.flags||"w";var dT=D.open(dS,dQ.flags,dQ.mode);if(typeof dR==="string"){var dP=new Uint8Array(S(dR)+1);var dO=r(dR,dP,0,dP.length);D.write(dT,dP,0,dO,undefined,dQ.canOwn)}else{if(ArrayBuffer.isView(dR)){D.write(dT,dR,0,dR.byteLength,undefined,dQ.canOwn)}else{throw new Error("Unsupported data type")}}D.close(dT)},cwd:function(){return D.currentPath},chdir:function(dQ){var dP=D.lookupPath(dQ,{follow:true});if(dP.node===null){throw new D.ErrnoError(44)}if(!D.isDir(dP.node.mode)){throw new D.ErrnoError(54)}var dO=D.nodePermissions(dP.node,"x");if(dO){throw new D.ErrnoError(dO)}D.currentPath=dP.path},createDefaultDirectories:function(){D.mkdir("/tmp");D.mkdir("/home");D.mkdir("/home/web_user")},createDefaultDevices:function(){D.mkdir("/dev");D.registerDevice(D.makedev(1,3),{read:function(){return 0},write:function(dV,dS,dU,dT,dW){return dT}});D.mkdev("/dev/null",D.makedev(1,3));ad.register(D.makedev(5,0),ad.default_tty_ops);ad.register(D.makedev(6,0),ad.default_tty1_ops);D.mkdev("/dev/tty",D.makedev(5,0));D.mkdev("/dev/tty1",D.makedev(6,0));var dP;if(typeof crypto==="object"&&typeof crypto.getRandomValues==="function"){var dQ=new Uint8Array(1);dP=function(){crypto.getRandomValues(dQ);return dQ[0]}}else{if(bK){try{var dO=require("crypto");dP=function(){return dO.randomBytes(1)[0]}}catch(dR){}}else{}}if(!dP){dP=function(){c3("no cryptographic support found for random_device. consider polyfilling it if you want to use something insecure like Math.random(), e.g. put this in a --pre-js: var crypto = { getRandomValues: function(array) { for (var i = 0; i < array.length; i++) array[i] = (Math.random()*256)|0 } };")}}D.createDevice("/dev","random",dP);D.createDevice("/dev","urandom",dP);D.mkdir("/dev/shm");D.mkdir("/dev/shm/tmp")},createSpecialDirectories:function(){D.mkdir("/proc");D.mkdir("/proc/self");D.mkdir("/proc/self/fd");D.mount({mount:function(){var dO=D.createNode("/proc/self","fd",16384|511,73);dO.node_ops={lookup:function(dS,dQ){var dR=+dQ;var dT=D.getStream(dR);if(!dT){throw new D.ErrnoError(8)}var dP={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:function(){return dT.path}}};dP.parent=dP;return dP}};return dO}},{},"/proc/self/fd")},createStandardStreams:function(){if(bY.stdin){D.createDevice("/dev","stdin",bY.stdin)}else{D.symlink("/dev/tty","/dev/stdin")}if(bY.stdout){D.createDevice("/dev","stdout",null,bY.stdout)}else{D.symlink("/dev/tty","/dev/stdout")}if(bY.stderr){D.createDevice("/dev","stderr",null,bY.stderr)}else{D.symlink("/dev/tty1","/dev/stderr")}var dQ=D.open("/dev/stdin","r");var dO=D.open("/dev/stdout","w");var dP=D.open("/dev/stderr","w");bJ(dQ.fd===0,"invalid handle for stdin ("+dQ.fd+")");bJ(dO.fd===1,"invalid handle for stdout ("+dO.fd+")");bJ(dP.fd===2,"invalid handle for stderr ("+dP.fd+")")},ensureErrnoError:function(){if(D.ErrnoError){return}D.ErrnoError=function dO(dP,dQ){this.node=dQ;this.setErrno=function(dS){this.errno=dS;for(var dR in ae){if(ae[dR]===dS){this.code=dR;break}}};this.setErrno(dP);this.message=co[dP];if(this.stack){Object.defineProperty(this,"stack",{value:(new Error).stack,writable:true});this.stack=c7(this.stack)}};D.ErrnoError.prototype=new Error();D.ErrnoError.prototype.constructor=D.ErrnoError;[44].forEach(function(dP){D.genericErrors[dP]=new D.ErrnoError(dP);D.genericErrors[dP].stack="<generic error, no stack>"})},staticInit:function(){D.ensureErrnoError();D.nameTable=new Array(4096);D.mount(R,{},"/");D.createDefaultDirectories();D.createDefaultDevices();D.createSpecialDirectories();D.filesystems={MEMFS:R}},init:function(dP,dO,dQ){bJ(!D.init.initialized,"FS.init was previously called. If you want to initialize later with custom parameters, remove any earlier calls (note that one is automatically added to the generated code)");D.init.initialized=true;D.ensureErrnoError();bY.stdin=dP||bY.stdin;bY.stdout=dO||bY.stdout;bY.stderr=dQ||bY.stderr;D.createStandardStreams()},quit:function(){D.init.initialized=false;var dQ=bY._fflush;if(dQ){dQ(0)}for(var dO=0;dO<D.streams.length;dO++){var dP=D.streams[dO];if(!dP){continue}D.close(dP)}},getMode:function(dO,dP){var dQ=0;if(dO){dQ|=292|73}if(dP){dQ|=146}return dQ},joinPath:function(dQ,dO){var dP=au.join.apply(null,dQ);if(dO&&dP[0]=="/"){dP=dP.substr(1)}return dP},absolutePath:function(dP,dO){return cc.resolve(dO,dP)},standardizePath:function(dO){return au.normalize(dO)},findObject:function(dQ,dP){var dO=D.analyzePath(dQ,dP);if(dO.exists){return dO.object}else{cU(dO.error);return null}},analyzePath:function(dS,dP){try{var dR=D.lookupPath(dS,{follow:!dP});dS=dR.path}catch(dQ){}var dO={isRoot:false,exists:false,error:0,name:null,path:null,object:null,parentExists:false,parentPath:null,parentObject:null};try{var dR=D.lookupPath(dS,{parent:true});dO.parentExists=true;dO.parentPath=dR.path;dO.parentObject=dR.node;dO.name=au.basename(dS);dR=D.lookupPath(dS,{follow:!dP});dO.exists=true;dO.path=dR.path;dO.object=dR.node;dO.name=dR.node.name;dO.isRoot=dR.path==="/"}catch(dQ){dO.error=dQ.errno}return dO},createFolder:function(dQ,dP,dO,dR){var dS=au.join2(typeof dQ==="string"?dQ:D.getPath(dQ),dP);var dT=D.getMode(dO,dR);return D.mkdir(dS,dT)},createPath:function(dQ,dV,dO,dR){dQ=typeof dQ==="string"?dQ:D.getPath(dQ);var dU=dV.split("/").reverse();while(dU.length){var dP=dU.pop();if(!dP){continue}var dT=au.join2(dQ,dP);try{D.mkdir(dT)}catch(dS){}dQ=dT}return dT},createFile:function(dR,dP,dQ,dO,dS){var dT=au.join2(typeof dR==="string"?dR:D.getPath(dR),dP);var dU=D.getMode(dO,dS);return D.create(dT,dU)},createDataFile:function(dY,dO,dT,dU,dR,dQ){var d0=dO?au.join2(typeof dY==="string"?dY:D.getPath(dY),dO):dY;var dW=D.getMode(dU,dR);var dP=D.create(d0,dW);if(dT){if(typeof dT==="string"){var dV=new Array(dT.length);for(var dS=0,dX=dT.length;dS<dX;++dS){dV[dS]=dT.charCodeAt(dS)}dT=dV}D.chmod(dP,dW|146);var dZ=D.open(dP,"w");D.write(dZ,dT,0,dT.length,0,dQ);D.close(dZ);D.chmod(dP,dW)}return dP},createDevice:function(dS,dR,dQ,dP){var dT=au.join2(typeof dS==="string"?dS:D.getPath(dS),dR);var dU=D.getMode(!!dQ,!!dP);if(!D.createDevice.major){D.createDevice.major=64}var dO=D.makedev(D.createDevice.major++,0);D.registerDevice(dO,{open:function(dV){dV.seekable=false},close:function(dV){if(dP&&dP.buffer&&dP.buffer.length){dP(10)}},read:function(d2,dY,dX,dW,d1){var dV=0;for(var dZ=0;dZ<dW;dZ++){var d3;try{d3=dQ()}catch(d0){throw new D.ErrnoError(29)}if(d3===undefined&&dV===0){throw new D.ErrnoError(6)}if(d3===null||d3===undefined){break}dV++;dY[dX+dZ]=d3}if(dV){d2.node.timestamp=Date.now()}return dV},write:function(d0,dV,dZ,dX,d1){for(var dW=0;dW<dX;dW++){try{dP(dV[dZ+dW])}catch(dY){throw new D.ErrnoError(29)}}if(dX){d0.node.timestamp=Date.now()}return dW}});return D.mkdev(dT,dU,dO)},createLink:function(dQ,dP,dT,dO,dR){var dS=au.join2(typeof dQ==="string"?dQ:D.getPath(dQ),dP);return D.symlink(dT,dS)},forceLoadFile:function(dP){if(dP.isDevice||dP.isFolder||dP.link||dP.contents){return true}var dQ=true;if(typeof XMLHttpRequest!=="undefined"){throw new Error("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.")}else{if(c){try{dP.contents=aq(c(dP.url),true);dP.usedBytes=dP.contents.length}catch(dO){dQ=false}}else{throw new Error("Cannot load without read() or XMLHttpRequest.")}}if(!dQ){cU(29)}return dQ},createLazyFile:function(dY,dP,dQ,dW,dT){function dO(){this.lengthKnown=false;this.chunks=[]}dO.prototype.get=function dR(d3){if(d3>this.length-1||d3<0){return undefined}var d5=d3%this.chunkSize;var d4=(d3/this.chunkSize)|0;return this.getter(d4)[d5]};dO.prototype.setDataGetter=function dU(d3){this.getter=d3};dO.prototype.cacheLength=function d2(){var d7=new XMLHttpRequest();d7.open("HEAD",dQ,false);d7.send(null);if(!(d7.status>=200&&d7.status<300||d7.status===304)){throw new Error("Couldn't load "+dQ+". Status: "+d7.status)}var d6=Number(d7.getResponseHeader("Content-length"));var ea;var d5=(ea=d7.getResponseHeader("Accept-Ranges"))&&ea==="bytes";var d3=(ea=d7.getResponseHeader("Content-Encoding"))&&ea==="gzip";var d9=1024*1024;if(!d5){d9=d6}var d4=(function(ed,ec){if(ed>ec){throw new Error("invalid range ("+ed+", "+ec+") or no bytes requested!")}if(ec>d6-1){throw new Error("only "+d6+" bytes available! programmer error!")}var eb=new XMLHttpRequest();eb.open("GET",dQ,false);if(d6!==d9){eb.setRequestHeader("Range","bytes="+ed+"-"+ec)}if(typeof Uint8Array!="undefined"){eb.responseType="arraybuffer"}if(eb.overrideMimeType){eb.overrideMimeType("text/plain; charset=x-user-defined")}eb.send(null);if(!(eb.status>=200&&eb.status<300||eb.status===304)){throw new Error("Couldn't load "+dQ+". Status: "+eb.status)}if(eb.response!==undefined){return new Uint8Array((eb.response||[]))}else{return aq(eb.responseText||"",true)}});var d8=this;d8.setDataGetter(function(ec){var ed=ec*d9;var eb=(ec+1)*d9-1;eb=Math.min(eb,d6-1);if(typeof(d8.chunks[ec])==="undefined"){d8.chunks[ec]=d4(ed,eb)}if(typeof(d8.chunks[ec])==="undefined"){throw new Error("doXHR failed!")}return d8.chunks[ec]});if(d3||!d6){d9=d6=1;d6=this.getter(0).length;d9=d6;cp("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=d6;this._chunkSize=d9;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!dd){throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc"}var dZ=new dO();Object.defineProperties(dZ,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var dX={isDevice:false,contents:dZ}}else{var dX={isDevice:false,url:dQ}}var dS=D.createFile(dY,dP,dX,dW,dT);if(dX.contents){dS.contents=dX.contents}else{if(dX.url){dS.contents=null;dS.url=dX.url}}Object.defineProperties(dS,{usedBytes:{get:function(){return this.contents.length}}});var dV={};var d0=Object.keys(dS.stream_ops);d0.forEach(function(d3){var d4=dS.stream_ops[d3];dV[d3]=function d5(){if(!D.forceLoadFile(dS)){throw new D.ErrnoError(29)}return d4.apply(null,arguments)}});dV.read=function d1(ea,d4,d9,d8,d3){if(!D.forceLoadFile(dS)){throw new D.ErrnoError(29)}var d7=ea.node.contents;if(d3>=d7.length){return 0}var d6=Math.min(d7.length-d3,d8);bJ(d6>=0);if(d7.slice){for(var d5=0;d5<d6;d5++){d4[d9+d5]=d7[d3+d5]}}else{for(var d5=0;d5<d6;d5++){d4[d9+d5]=d7.get(d3+d5)}}return d6};dS.stream_ops=dV;return dS},createPreloadedFile:function(dZ,dP,dQ,dU,dS,dT,dW,dO,dR,dV){aW.init();var d0=dP?cc.resolve(au.join2(dZ,dP)):dZ;var dY=x("cp "+d0);function dX(d1){function d2(d4){if(dV){dV()}if(!dO){D.createDataFile(dZ,dP,d4,dU,dS,dR)}if(dT){dT()}bj(dY)}var d3=false;bY.preloadPlugins.forEach(function(d4){if(d3){return}if(d4.canHandle(d0)){d4.handle(d1,d0,d2,function(){if(dW){dW()}bj(dY)});d3=true}});if(!d3){d2(d1)}}cQ(dY);if(typeof dQ=="string"){aW.asyncLoad(dQ,function(d1){dX(d1)},dW)}else{dX(dQ)}},indexedDB:function(){return window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB},DB_NAME:function(){return"EM_FS_"+window.location.pathname},DB_VERSION:20,DB_STORE_NAME:"FILE_DATA",saveFilesToDB:function(dU,dT,dO){dT=dT||function(){};dO=dO||function(){};var dQ=D.indexedDB();try{var dP=dQ.open(D.DB_NAME(),D.DB_VERSION)}catch(dS){return dO(dS)}dP.onupgradeneeded=function dV(){cp("creating db");var dW=dP.result;dW.createObjectStore(D.DB_STORE_NAME)};dP.onsuccess=function dR(){var dX=dP.result;var d2=dX.transaction([D.DB_STORE_NAME],"readwrite");var d1=d2.objectStore(D.DB_STORE_NAME);var dZ=0,dW=0,d0=dU.length;function dY(){if(dW==0){dT()}else{dO()}}dU.forEach(function(d6){var d4=d1.put(D.analyzePath(d6).object.contents,d6);d4.onsuccess=function d5(){dZ++;if(dZ+dW==d0){dY()}};d4.onerror=function d3(){dW++;if(dZ+dW==d0){dY()}}});d2.onerror=dO};dP.onerror=dO},loadFilesFromDB:function(dU,dT,dO){dT=dT||function(){};dO=dO||function(){};var dQ=D.indexedDB();try{var dP=dQ.open(D.DB_NAME(),D.DB_VERSION)}catch(dS){return dO(dS)}dP.onupgradeneeded=dO;dP.onsuccess=function dR(){var dW=dP.result;try{var d2=dW.transaction([D.DB_STORE_NAME],"readonly")}catch(d1){dO(d1);return}var d0=d2.objectStore(D.DB_STORE_NAME);var dY=0,dV=0,dZ=dU.length;function dX(){if(dV==0){dT()}else{dO()}}dU.forEach(function(d4){var d3=d0.get(d4);d3.onsuccess=function d5(){if(D.analyzePath(d4).exists){D.unlink(d4)}D.createDataFile(au.dirname(d4),au.basename(d4),d3.result,true,true,true);dY++;if(dY+dV==dZ){dX()}};d3.onerror=function d6(){dV++;if(dY+dV==dZ){dX()}}});d2.onerror=dO};dP.onerror=dO}};var bn={mappings:{},DEFAULT_POLLMASK:5,umask:511,calculateAt:function(dR,dQ){if(dQ[0]!=="/"){var dP;if(dR===-100){dP=D.cwd()}else{var dO=D.getStream(dR);if(!dO){throw new D.ErrnoError(8)}dP=dO.path}dQ=au.join2(dP,dQ)}return dQ},doStat:function(dQ,dS,dO){try{var dP=dQ(dS)}catch(dR){if(dR&&dR.node&&au.normalize(dS)!==au.normalize(D.getPath(dR.node))){return -54}throw dR}ar[((dO)>>2)]=dP.dev;ar[(((dO)+(4))>>2)]=0;ar[(((dO)+(8))>>2)]=dP.ino;ar[(((dO)+(12))>>2)]=dP.mode;ar[(((dO)+(16))>>2)]=dP.nlink;ar[(((dO)+(20))>>2)]=dP.uid;ar[(((dO)+(24))>>2)]=dP.gid;ar[(((dO)+(28))>>2)]=dP.rdev;ar[(((dO)+(32))>>2)]=0;(av=[dP.size>>>0,(aN=dP.size,(+(br(aN)))>=1?(aN>0?((cT((+(O((aN)/4294967296))),4294967295))|0)>>>0:(~~((+(dh((aN-+(((~~(aN)))>>>0))/4294967296)))))>>>0):0)],ar[(((dO)+(40))>>2)]=av[0],ar[(((dO)+(44))>>2)]=av[1]);ar[(((dO)+(48))>>2)]=4096;ar[(((dO)+(52))>>2)]=dP.blocks;ar[(((dO)+(56))>>2)]=(dP.atime.getTime()/1000)|0;ar[(((dO)+(60))>>2)]=0;ar[(((dO)+(64))>>2)]=(dP.mtime.getTime()/1000)|0;ar[(((dO)+(68))>>2)]=0;ar[(((dO)+(72))>>2)]=(dP.ctime.getTime()/1000)|0;ar[(((dO)+(76))>>2)]=0;(av=[dP.ino>>>0,(aN=dP.ino,(+(br(aN)))>=1?(aN>0?((cT((+(O((aN)/4294967296))),4294967295))|0)>>>0:(~~((+(dh((aN-+(((~~(aN)))>>>0))/4294967296)))))>>>0):0)],ar[(((dO)+(80))>>2)]=av[0],ar[(((dO)+(84))>>2)]=av[1]);return 0},doMsync:function(dT,dS,dO,dQ,dR){var dP=bs.slice(dT,dT+dO);D.msync(dS,dP,dR,dO,dQ)},doMkdir:function(dO,dP){dO=au.normalize(dO);if(dO[dO.length-1]==="/"){dO=dO.substr(0,dO.length-1)}D.mkdir(dO,dP,0);return 0},doMknod:function(dP,dQ,dO){switch(dQ&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return -28}D.mknod(dP,dQ,dO);return 0},doReadlink:function(dR,dQ,dT){if(dT<=0){return -28}var dP=D.readlink(dR);var dO=Math.min(dT,S(dP));var dS=dx[dQ+dO];q(dP,dQ,dT+1);dx[dQ+dO]=dS;return dO},doAccess:function(dS,dR){if(dR&~7){return -28}var dP;var dQ=D.lookupPath(dS,{follow:true});dP=dQ.node;if(!dP){return -44}var dO="";if(dR&4){dO+="r"}if(dR&2){dO+="w"}if(dR&1){dO+="x"}if(dO&&D.nodePermissions(dP,dO)){return -2}return 0},doDup:function(dQ,dO,dP){var dR=D.getStream(dP);if(dR){D.close(dR)}return D.open(dQ,dO,0,dP,dP).fd},doReadv:function(dU,dP,dW,dQ){var dT=0;for(var dR=0;dR<dW;dR++){var dO=ar[(((dP)+(dR*8))>>2)];var dS=ar[(((dP)+(dR*8+4))>>2)];var dV=D.read(dU,dx,dO,dS,dQ);if(dV<0){return -1}dT+=dV;if(dV<dS){break}}return dT},doWritev:function(dU,dP,dW,dQ){var dT=0;for(var dR=0;dR<dW;dR++){var dO=ar[(((dP)+(dR*8))>>2)];var dS=ar[(((dP)+(dR*8+4))>>2)];var dV=D.write(dU,dx,dO,dS,dQ);if(dV<0){return -1}dT+=dV}return dT},varargs:undefined,get:function(){bJ(bn.varargs!=undefined);bn.varargs+=4;var dO=ar[(((bn.varargs)-(4))>>2)];return dO},getStr:function(dP){var dO=dC(dP);return dO},getStreamFromFD:function(dO){var dP=D.getStream(dO);if(!dP){throw new D.ErrnoError(8)}return dP},get64:function(dO,dP){if(dO>=0){bJ(dP===0)}else{bJ(dP===-1)}return dO}};function aD(dQ,dR,dP){bn.varargs=dP;try{var dU=bn.getStreamFromFD(dQ);switch(dR){case 0:var dO=bn.get();if(dO<0){return -28}var dV;dV=D.open(dU.path,dU.flags,0,dO);return dV.fd;case 1:case 2:return 0;case 3:return dU.flags;case 4:var dO=bn.get();dU.flags|=dO;return 0;case 12:var dO=bn.get();var dT=0;a2[(((dO)+(dT))>>1)]=2;return 0;case 13:case 14:return 0;case 16:case 8:return -28;case 9:cU(28);return -1;default:return -28}}catch(dS){if(typeof D==="undefined"||!(dS instanceof D.ErrnoError)){c3(dS)}return -dS.errno}}function b1(dP,dT,dO){bn.varargs=dO;try{var dS=bn.getStreamFromFD(dP);switch(dT){case 21509:case 21505:if(!dS.tty){return -59}return 0;case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:if(!dS.tty){return -59}return 0;case 21519:if(!dS.tty){return -59}var dQ=bn.get();ar[((dQ)>>2)]=0;return 0;case 21520:if(!dS.tty){return -59}return -28;case 21531:var dQ=bn.get();return D.ioctl(dS,dT,dQ);case 21523:if(!dS.tty){return -59}return 0;case 21524:if(!dS.tty){return -59}return 0;default:c3("bad ioctl syscall "+dT)}}catch(dR){if(typeof D==="undefined"||!(dR instanceof D.ErrnoError)){c3(dR)}return -dR.errno}}function h(dS,dO,dP){bn.varargs=dP;try{var dR=bn.getStr(dS);var dU=bn.get();var dT=D.open(dR,dO,dU);return dT.fd}catch(dQ){if(typeof D==="undefined"||!(dQ instanceof D.ErrnoError)){c3(dQ)}return -dQ.errno}}function aG(){c3()}function cP(){return 79712}function dy(dO,dP){bw(dO,dP||1);throw"longjmp"}function c2(dO,dP){dy(dO,dP)}function dG(dP,dQ,dO){bs.copyWithin(dP,dQ,dQ+dO)}function bX(){return bs.length}function a9(dO){c3("Cannot enlarge memory arrays to size "+dO+" bytes (OOM). Either (1) compile with  -s INITIAL_MEMORY=X  with X higher than the current value "+dx.length+", (2) compile with  -s ALLOW_MEMORY_GROWTH=1  which allows increasing the size at runtime, or (3) if you want malloc to return NULL (0) instead of this abort, compile with  -s ABORTING_MALLOC=0 ")}function bd(dO){dO=dO>>>0;a9(dO)}function ac(dO){dM(dO)}function aw(dO){try{var dQ=bn.getStreamFromFD(dO);D.close(dQ);return 0}catch(dP){if(typeof D==="undefined"||!(dP instanceof D.ErrnoError)){c3(dP)}return dP.errno}}function bf(dR,dO,dQ,dT){try{var dU=bn.getStreamFromFD(dR);var dP=bn.doReadv(dU,dO,dQ);ar[((dT)>>2)]=dP;return 0}catch(dS){if(typeof D==="undefined"||!(dS instanceof D.ErrnoError)){c3(dS)}return dS.errno}}function aI(dP,dT,dV,dQ,dS){try{var dX=bn.getStreamFromFD(dP);var dW=4294967296;var dR=dV*dW+(dT>>>0);var dO=9007199254740992;if(dR<=-dO||dR>=dO){return -61}D.llseek(dX,dR,dQ);(av=[dX.position>>>0,(aN=dX.position,(+(br(aN)))>=1?(aN>0?((cT((+(O((aN)/4294967296))),4294967295))|0)>>>0:(~~((+(dh((aN-+(((~~(aN)))>>>0))/4294967296)))))>>>0):0)],ar[((dS)>>2)]=av[0],ar[(((dS)+(4))>>2)]=av[1]);if(dX.getdents&&dR===0&&dQ===0){dX.getdents=null}return 0}catch(dU){if(typeof D==="undefined"||!(dU instanceof D.ErrnoError)){c3(dU)}return dU.errno}}function dj(dR,dO,dQ,dT){try{var dU=bn.getStreamFromFD(dR);var dP=bn.doWritev(dU,dO,dQ);ar[((dT)>>2)]=dP;return 0}catch(dS){if(typeof D==="undefined"||!(dS instanceof D.ErrnoError)){c3(dS)}return dS.errno}}function cG(){return(B()|0)}function b4(dO){dO=+dO;return dO>=+0?+O(dO+ +0.5):+dh(dO-+0.5)}function cn(dO){g((dO)|0)}bY.requestFullscreen=function ba(dP,dO){aW.requestFullscreen(dP,dO)};bY.requestFullScreen=function U(){aW.requestFullScreen()};bY.requestAnimationFrame=function ds(dO){aW.requestAnimationFrame(dO)};bY.setCanvasSize=function aU(dQ,dP,dO){aW.setCanvasSize(dQ,dP,dO)};bY.pauseMainLoop=function aO(){aW.mainLoop.pause()};bY.resumeMainLoop=function cF(){aW.mainLoop.resume()};bY.getUserMedia=function j(){aW.getUserMedia()};bY.createContext=function a4(dP,dR,dO,dQ){return aW.createContext(dP,dR,dO,dQ)};var cu=function(dQ,dP,dR,dO){if(!dQ){dQ=this}this.parent=dQ;this.mount=dQ.mount;this.mounted=null;this.id=D.nextInode++;this.name=dP;this.mode=dR;this.node_ops={};this.stream_ops={};this.rdev=dO};var b3=292|73;var dm=146;Object.defineProperties(cu.prototype,{read:{get:function(){return(this.mode&b3)===b3},set:function(dO){dO?this.mode|=b3:this.mode&=~b3}},write:{get:function(){return(this.mode&dm)===dm},set:function(dO){dO?this.mode|=dm:this.mode&=~dm}},isFolder:{get:function(){return D.isDir(this.mode)}},isDevice:{get:function(){return D.isChrdev(this.mode)}}});D.FSNode=cu;D.staticInit();bY.FS_createFolder=D.createFolder;bY.FS_createPath=D.createPath;bY.FS_createDataFile=D.createDataFile;bY.FS_createPreloadedFile=D.createPreloadedFile;bY.FS_createLazyFile=D.createLazyFile;bY.FS_createLink=D.createLink;bY.FS_createDevice=D.createDevice;bY.FS_unlink=D.unlink;var a1=true;function aq(dR,dT,dS){var dP=dS>0?dS:S(dR)+1;var dO=new Array(dP);var dQ=r(dR,dO,0,dO.length);if(dT){dO.length=dQ}return dO}function aa(dR){var dO=[];for(var dP=0;dP<dR.length;dP++){var dQ=dR[dP];if(dQ>255){if(a1){bJ(false,"Character code "+dQ+" ("+String.fromCharCode(dQ)+")  at offset "+dP+" not in 0x00-0xFF.")}dQ&=255}dO.push(String.fromCharCode(dQ))}return dO.join("")}var s={};var ck={__handle_stack_overflow:aX,__sys_fcntl64:aD,__sys_ioctl:b1,__sys_open:h,abort:aG,emscripten_get_sbrk_ptr:cP,emscripten_longjmp:c2,emscripten_memcpy_big:dG,emscripten_resize_heap:bd,exit:ac,fd_close:aw,fd_read:bf,fd_seek:aI,fd_write:dj,getTempRet0:cG,invoke_ii:cM,invoke_iii:cA,invoke_iiii:aj,invoke_iiiii:a3,invoke_vi:cy,invoke_vii:E,invoke_viii:k,invoke_viiii:cz,invoke_viiiii:L,invoke_viiiiii:bA,invoke_viiiiiii:dr,memory:bI,round:b4,setTempRet0:cn,table:de};var e=bh();var bg=bY.___wasm_call_ctors=ao("__wasm_call_ctors");var b8=bY._main=ao("main");var cY=bY.___errno_location=ao("__errno_location");var cN=bY._malloc=ao("malloc");var cm=bY._testSetjmp=ao("testSetjmp");var bS=bY._saveSetjmp=ao("saveSetjmp");var c0=bY._free=ao("free");var c9=bY._realloc=ao("realloc");var b7=bY._fflush=ao("fflush");var bw=bY._setThrew=ao("setThrew");var aK=bY.stackSave=ao("stackSave");var bQ=bY.stackRestore=ao("stackRestore");var bW=bY.stackAlloc=ao("stackAlloc");var cb=bY.dynCall_vi=ao("dynCall_vi");var ce=bY.dynCall_vii=ao("dynCall_vii");var dg=bY.dynCall_viii=ao("dynCall_viii");var dL=bY.dynCall_viiii=ao("dynCall_viiii");var H=bY.dynCall_viiiii=ao("dynCall_viiiii");var b=bY.dynCall_viiiiii=ao("dynCall_viiiiii");var cO=bY.dynCall_viiiiiii=ao("dynCall_viiiiiii");var ct=bY.dynCall_ii=ao("dynCall_ii");var aB=bY.dynCall_iii=ao("dynCall_iii");var t=bY.dynCall_iiii=ao("dynCall_iiii");var b5=bY.dynCall_iiiii=ao("dynCall_iiiii");var dH=bY.___set_stack_limit=ao("__set_stack_limit");var M=bY.__growWasmMemory=ao("__growWasmMemory");var af=bY.dynCall_jiji=ao("dynCall_jiji");var cC=bY.dynCall_iidiiii=ao("dynCall_iidiiii");function cy(dP,dO){var dQ=aK();try{cb(dP,dO)}catch(dR){bQ(dQ);if(dR!==dR+0&&dR!=="longjmp"){throw dR}bw(1,0)}}function E(dQ,dP,dO){var dR=aK();try{ce(dQ,dP,dO)}catch(dS){bQ(dR);if(dS!==dS+0&&dS!=="longjmp"){throw dS}bw(1,0)}}function aj(dQ,dP,dO,dT){var dR=aK();try{return t(dQ,dP,dO,dT)}catch(dS){bQ(dR);if(dS!==dS+0&&dS!=="longjmp"){throw dS}bw(1,0)}}function cA(dQ,dP,dO){var dR=aK();try{return aB(dQ,dP,dO)}catch(dS){bQ(dR);if(dS!==dS+0&&dS!=="longjmp"){throw dS}bw(1,0)}}function cz(dQ,dP,dO,dU,dT){var dR=aK();try{dL(dQ,dP,dO,dU,dT)}catch(dS){bQ(dR);if(dS!==dS+0&&dS!=="longjmp"){throw dS}bw(1,0)}}function L(dQ,dP,dO,dV,dU,dT){var dR=aK();try{H(dQ,dP,dO,dV,dU,dT)}catch(dS){bQ(dR);if(dS!==dS+0&&dS!=="longjmp"){throw dS}bw(1,0)}}function k(dQ,dP,dO,dT){var dR=aK();try{dg(dQ,dP,dO,dT)}catch(dS){bQ(dR);if(dS!==dS+0&&dS!=="longjmp"){throw dS}bw(1,0)}}function dr(dS,dR,dP,dO,dX,dW,dV,dU){var dQ=aK();try{cO(dS,dR,dP,dO,dX,dW,dV,dU)}catch(dT){bQ(dQ);if(dT!==dT+0&&dT!=="longjmp"){throw dT}bw(1,0)}}function a3(dQ,dP,dO,dU,dT){var dR=aK();try{return b5(dQ,dP,dO,dU,dT)}catch(dS){bQ(dR);if(dS!==dS+0&&dS!=="longjmp"){throw dS}bw(1,0)}}function bA(dS,dR,dP,dO,dW,dV,dU){var dQ=aK();try{b(dS,dR,dP,dO,dW,dV,dU)}catch(dT){bQ(dQ);if(dT!==dT+0&&dT!=="longjmp"){throw dT}bw(1,0)}}function cM(dP,dO){var dQ=aK();try{return ct(dP,dO)}catch(dR){bQ(dQ);if(dR!==dR+0&&dR!=="longjmp"){throw dR}bw(1,0)}}if(!Object.getOwnPropertyDescriptor(bY,"intArrayFromString")){bY.intArrayFromString=function(){c3("'intArrayFromString' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}if(!Object.getOwnPropertyDescriptor(bY,"intArrayToString")){bY.intArrayToString=function(){c3("'intArrayToString' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}if(!Object.getOwnPropertyDescriptor(bY,"ccall")){bY.ccall=function(){c3("'ccall' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}if(!Object.getOwnPropertyDescriptor(bY,"cwrap")){bY.cwrap=function(){c3("'cwrap' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}if(!Object.getOwnPropertyDescriptor(bY,"setValue")){bY.setValue=function(){c3("'setValue' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}if(!Object.getOwnPropertyDescriptor(bY,"getValue")){bY.getValue=function(){c3("'getValue' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}if(!Object.getOwnPropertyDescriptor(bY,"allocate")){bY.allocate=function(){c3("'allocate' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}bY.getMemory=ap;if(!Object.getOwnPropertyDescriptor(bY,"UTF8ArrayToString")){bY.UTF8ArrayToString=function(){c3("'UTF8ArrayToString' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}if(!Object.getOwnPropertyDescriptor(bY,"UTF8ToString")){bY.UTF8ToString=function(){c3("'UTF8ToString' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}if(!Object.getOwnPropertyDescriptor(bY,"stringToUTF8Array")){bY.stringToUTF8Array=function(){c3("'stringToUTF8Array' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}if(!Object.getOwnPropertyDescriptor(bY,"stringToUTF8")){bY.stringToUTF8=function(){c3("'stringToUTF8' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}if(!Object.getOwnPropertyDescriptor(bY,"lengthBytesUTF8")){bY.lengthBytesUTF8=function(){c3("'lengthBytesUTF8' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}if(!Object.getOwnPropertyDescriptor(bY,"stackTrace")){bY.stackTrace=function(){c3("'stackTrace' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}if(!Object.getOwnPropertyDescriptor(bY,"addOnPreRun")){bY.addOnPreRun=function(){c3("'addOnPreRun' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}if(!Object.getOwnPropertyDescriptor(bY,"addOnInit")){bY.addOnInit=function(){c3("'addOnInit' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}if(!Object.getOwnPropertyDescriptor(bY,"addOnPreMain")){bY.addOnPreMain=function(){c3("'addOnPreMain' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}if(!Object.getOwnPropertyDescriptor(bY,"addOnExit")){bY.addOnExit=function(){c3("'addOnExit' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}if(!Object.getOwnPropertyDescriptor(bY,"addOnPostRun")){bY.addOnPostRun=function(){c3("'addOnPostRun' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}if(!Object.getOwnPropertyDescriptor(bY,"writeStringToMemory")){bY.writeStringToMemory=function(){c3("'writeStringToMemory' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}if(!Object.getOwnPropertyDescriptor(bY,"writeArrayToMemory")){bY.writeArrayToMemory=function(){c3("'writeArrayToMemory' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}if(!Object.getOwnPropertyDescriptor(bY,"writeAsciiToMemory")){bY.writeAsciiToMemory=function(){c3("'writeAsciiToMemory' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}bY.addRunDependency=cQ;bY.removeRunDependency=bj;bY.FS_createFolder=D.createFolder;bY.FS_createPath=D.createPath;bY.FS_createDataFile=D.createDataFile;bY.FS_createPreloadedFile=D.createPreloadedFile;bY.FS_createLazyFile=D.createLazyFile;bY.FS_createLink=D.createLink;bY.FS_createDevice=D.createDevice;bY.FS_unlink=D.unlink;if(!Object.getOwnPropertyDescriptor(bY,"dynamicAlloc")){bY.dynamicAlloc=function(){c3("'dynamicAlloc' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}if(!Object.getOwnPropertyDescriptor(bY,"loadDynamicLibrary")){bY.loadDynamicLibrary=function(){c3("'loadDynamicLibrary' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}if(!Object.getOwnPropertyDescriptor(bY,"loadWebAssemblyModule")){bY.loadWebAssemblyModule=function(){c3("'loadWebAssemblyModule' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}if(!Object.getOwnPropertyDescriptor(bY,"getLEB")){bY.getLEB=function(){c3("'getLEB' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}if(!Object.getOwnPropertyDescriptor(bY,"getFunctionTables")){bY.getFunctionTables=function(){c3("'getFunctionTables' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}if(!Object.getOwnPropertyDescriptor(bY,"alignFunctionTables")){bY.alignFunctionTables=function(){c3("'alignFunctionTables' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}if(!Object.getOwnPropertyDescriptor(bY,"registerFunctions")){bY.registerFunctions=function(){c3("'registerFunctions' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}if(!Object.getOwnPropertyDescriptor(bY,"addFunction")){bY.addFunction=function(){c3("'addFunction' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}if(!Object.getOwnPropertyDescriptor(bY,"removeFunction")){bY.removeFunction=function(){c3("'removeFunction' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}if(!Object.getOwnPropertyDescriptor(bY,"getFuncWrapper")){bY.getFuncWrapper=function(){c3("'getFuncWrapper' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}if(!Object.getOwnPropertyDescriptor(bY,"prettyPrint")){bY.prettyPrint=function(){c3("'prettyPrint' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}if(!Object.getOwnPropertyDescriptor(bY,"makeBigInt")){bY.makeBigInt=function(){c3("'makeBigInt' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}if(!Object.getOwnPropertyDescriptor(bY,"dynCall")){bY.dynCall=function(){c3("'dynCall' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}if(!Object.getOwnPropertyDescriptor(bY,"getCompilerSetting")){bY.getCompilerSetting=function(){c3("'getCompilerSetting' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}if(!Object.getOwnPropertyDescriptor(bY,"print")){bY.print=function(){c3("'print' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}if(!Object.getOwnPropertyDescriptor(bY,"printErr")){bY.printErr=function(){c3("'printErr' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}if(!Object.getOwnPropertyDescriptor(bY,"getTempRet0")){bY.getTempRet0=function(){c3("'getTempRet0' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}if(!Object.getOwnPropertyDescriptor(bY,"setTempRet0")){bY.setTempRet0=function(){c3("'setTempRet0' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}if(!Object.getOwnPropertyDescriptor(bY,"callMain")){bY.callMain=function(){c3("'callMain' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}if(!Object.getOwnPropertyDescriptor(bY,"abort")){bY.abort=function(){c3("'abort' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}if(!Object.getOwnPropertyDescriptor(bY,"stringToNewUTF8")){bY.stringToNewUTF8=function(){c3("'stringToNewUTF8' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}if(!Object.getOwnPropertyDescriptor(bY,"abortOnCannotGrowMemory")){bY.abortOnCannotGrowMemory=function(){c3("'abortOnCannotGrowMemory' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}if(!Object.getOwnPropertyDescriptor(bY,"emscripten_realloc_buffer")){bY.emscripten_realloc_buffer=function(){c3("'emscripten_realloc_buffer' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}if(!Object.getOwnPropertyDescriptor(bY,"ENV")){bY.ENV=function(){c3("'ENV' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}if(!Object.getOwnPropertyDescriptor(bY,"ERRNO_CODES")){bY.ERRNO_CODES=function(){c3("'ERRNO_CODES' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}if(!Object.getOwnPropertyDescriptor(bY,"ERRNO_MESSAGES")){bY.ERRNO_MESSAGES=function(){c3("'ERRNO_MESSAGES' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}if(!Object.getOwnPropertyDescriptor(bY,"setErrNo")){bY.setErrNo=function(){c3("'setErrNo' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}if(!Object.getOwnPropertyDescriptor(bY,"DNS")){bY.DNS=function(){c3("'DNS' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}if(!Object.getOwnPropertyDescriptor(bY,"GAI_ERRNO_MESSAGES")){bY.GAI_ERRNO_MESSAGES=function(){c3("'GAI_ERRNO_MESSAGES' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}if(!Object.getOwnPropertyDescriptor(bY,"Protocols")){bY.Protocols=function(){c3("'Protocols' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}if(!Object.getOwnPropertyDescriptor(bY,"Sockets")){bY.Sockets=function(){c3("'Sockets' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}if(!Object.getOwnPropertyDescriptor(bY,"UNWIND_CACHE")){bY.UNWIND_CACHE=function(){c3("'UNWIND_CACHE' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}if(!Object.getOwnPropertyDescriptor(bY,"readAsmConstArgs")){bY.readAsmConstArgs=function(){c3("'readAsmConstArgs' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}if(!Object.getOwnPropertyDescriptor(bY,"jstoi_q")){bY.jstoi_q=function(){c3("'jstoi_q' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}if(!Object.getOwnPropertyDescriptor(bY,"jstoi_s")){bY.jstoi_s=function(){c3("'jstoi_s' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}if(!Object.getOwnPropertyDescriptor(bY,"listenOnce")){bY.listenOnce=function(){c3("'listenOnce' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}if(!Object.getOwnPropertyDescriptor(bY,"autoResumeAudioContext")){bY.autoResumeAudioContext=function(){c3("'autoResumeAudioContext' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}if(!Object.getOwnPropertyDescriptor(bY,"abortStackOverflow")){bY.abortStackOverflow=function(){c3("'abortStackOverflow' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}if(!Object.getOwnPropertyDescriptor(bY,"reallyNegative")){bY.reallyNegative=function(){c3("'reallyNegative' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}if(!Object.getOwnPropertyDescriptor(bY,"formatString")){bY.formatString=function(){c3("'formatString' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}if(!Object.getOwnPropertyDescriptor(bY,"PATH")){bY.PATH=function(){c3("'PATH' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}if(!Object.getOwnPropertyDescriptor(bY,"PATH_FS")){bY.PATH_FS=function(){c3("'PATH_FS' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}if(!Object.getOwnPropertyDescriptor(bY,"SYSCALLS")){bY.SYSCALLS=function(){c3("'SYSCALLS' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}if(!Object.getOwnPropertyDescriptor(bY,"syscallMmap2")){bY.syscallMmap2=function(){c3("'syscallMmap2' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}if(!Object.getOwnPropertyDescriptor(bY,"syscallMunmap")){bY.syscallMunmap=function(){c3("'syscallMunmap' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}if(!Object.getOwnPropertyDescriptor(bY,"JSEvents")){bY.JSEvents=function(){c3("'JSEvents' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}if(!Object.getOwnPropertyDescriptor(bY,"specialHTMLTargets")){bY.specialHTMLTargets=function(){c3("'specialHTMLTargets' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}if(!Object.getOwnPropertyDescriptor(bY,"demangle")){bY.demangle=function(){c3("'demangle' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}if(!Object.getOwnPropertyDescriptor(bY,"demangleAll")){bY.demangleAll=function(){c3("'demangleAll' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}if(!Object.getOwnPropertyDescriptor(bY,"jsStackTrace")){bY.jsStackTrace=function(){c3("'jsStackTrace' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}if(!Object.getOwnPropertyDescriptor(bY,"stackTrace")){bY.stackTrace=function(){c3("'stackTrace' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}if(!Object.getOwnPropertyDescriptor(bY,"getEnvStrings")){bY.getEnvStrings=function(){c3("'getEnvStrings' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}if(!Object.getOwnPropertyDescriptor(bY,"checkWasiClock")){bY.checkWasiClock=function(){c3("'checkWasiClock' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}if(!Object.getOwnPropertyDescriptor(bY,"writeI53ToI64")){bY.writeI53ToI64=function(){c3("'writeI53ToI64' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}if(!Object.getOwnPropertyDescriptor(bY,"writeI53ToI64Clamped")){bY.writeI53ToI64Clamped=function(){c3("'writeI53ToI64Clamped' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}if(!Object.getOwnPropertyDescriptor(bY,"writeI53ToI64Signaling")){bY.writeI53ToI64Signaling=function(){c3("'writeI53ToI64Signaling' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}if(!Object.getOwnPropertyDescriptor(bY,"writeI53ToU64Clamped")){bY.writeI53ToU64Clamped=function(){c3("'writeI53ToU64Clamped' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}if(!Object.getOwnPropertyDescriptor(bY,"writeI53ToU64Signaling")){bY.writeI53ToU64Signaling=function(){c3("'writeI53ToU64Signaling' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}if(!Object.getOwnPropertyDescriptor(bY,"readI53FromI64")){bY.readI53FromI64=function(){c3("'readI53FromI64' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}if(!Object.getOwnPropertyDescriptor(bY,"readI53FromU64")){bY.readI53FromU64=function(){c3("'readI53FromU64' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}if(!Object.getOwnPropertyDescriptor(bY,"convertI32PairToI53")){bY.convertI32PairToI53=function(){c3("'convertI32PairToI53' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}if(!Object.getOwnPropertyDescriptor(bY,"convertU32PairToI53")){bY.convertU32PairToI53=function(){c3("'convertU32PairToI53' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}if(!Object.getOwnPropertyDescriptor(bY,"Browser")){bY.Browser=function(){c3("'Browser' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}if(!Object.getOwnPropertyDescriptor(bY,"FS")){bY.FS=function(){c3("'FS' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}if(!Object.getOwnPropertyDescriptor(bY,"MEMFS")){bY.MEMFS=function(){c3("'MEMFS' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}if(!Object.getOwnPropertyDescriptor(bY,"TTY")){bY.TTY=function(){c3("'TTY' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}if(!Object.getOwnPropertyDescriptor(bY,"PIPEFS")){bY.PIPEFS=function(){c3("'PIPEFS' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}if(!Object.getOwnPropertyDescriptor(bY,"SOCKFS")){bY.SOCKFS=function(){c3("'SOCKFS' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}if(!Object.getOwnPropertyDescriptor(bY,"GL")){bY.GL=function(){c3("'GL' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}if(!Object.getOwnPropertyDescriptor(bY,"emscriptenWebGLGet")){bY.emscriptenWebGLGet=function(){c3("'emscriptenWebGLGet' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}if(!Object.getOwnPropertyDescriptor(bY,"emscriptenWebGLGetTexPixelData")){bY.emscriptenWebGLGetTexPixelData=function(){c3("'emscriptenWebGLGetTexPixelData' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}if(!Object.getOwnPropertyDescriptor(bY,"emscriptenWebGLGetUniform")){bY.emscriptenWebGLGetUniform=function(){c3("'emscriptenWebGLGetUniform' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}if(!Object.getOwnPropertyDescriptor(bY,"emscriptenWebGLGetVertexAttrib")){bY.emscriptenWebGLGetVertexAttrib=function(){c3("'emscriptenWebGLGetVertexAttrib' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}if(!Object.getOwnPropertyDescriptor(bY,"writeGLArray")){bY.writeGLArray=function(){c3("'writeGLArray' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}if(!Object.getOwnPropertyDescriptor(bY,"AL")){bY.AL=function(){c3("'AL' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}if(!Object.getOwnPropertyDescriptor(bY,"SDL_unicode")){bY.SDL_unicode=function(){c3("'SDL_unicode' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}if(!Object.getOwnPropertyDescriptor(bY,"SDL_ttfContext")){bY.SDL_ttfContext=function(){c3("'SDL_ttfContext' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}if(!Object.getOwnPropertyDescriptor(bY,"SDL_audio")){bY.SDL_audio=function(){c3("'SDL_audio' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}if(!Object.getOwnPropertyDescriptor(bY,"SDL")){bY.SDL=function(){c3("'SDL' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}if(!Object.getOwnPropertyDescriptor(bY,"SDL_gfx")){bY.SDL_gfx=function(){c3("'SDL_gfx' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}if(!Object.getOwnPropertyDescriptor(bY,"GLUT")){bY.GLUT=function(){c3("'GLUT' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}if(!Object.getOwnPropertyDescriptor(bY,"EGL")){bY.EGL=function(){c3("'EGL' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}if(!Object.getOwnPropertyDescriptor(bY,"GLFW_Window")){bY.GLFW_Window=function(){c3("'GLFW_Window' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}if(!Object.getOwnPropertyDescriptor(bY,"GLFW")){bY.GLFW=function(){c3("'GLFW' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}if(!Object.getOwnPropertyDescriptor(bY,"GLEW")){bY.GLEW=function(){c3("'GLEW' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}if(!Object.getOwnPropertyDescriptor(bY,"IDBStore")){bY.IDBStore=function(){c3("'IDBStore' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}if(!Object.getOwnPropertyDescriptor(bY,"runAndAbortIfError")){bY.runAndAbortIfError=function(){c3("'runAndAbortIfError' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}if(!Object.getOwnPropertyDescriptor(bY,"warnOnce")){bY.warnOnce=function(){c3("'warnOnce' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}if(!Object.getOwnPropertyDescriptor(bY,"stackSave")){bY.stackSave=function(){c3("'stackSave' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}if(!Object.getOwnPropertyDescriptor(bY,"stackRestore")){bY.stackRestore=function(){c3("'stackRestore' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}if(!Object.getOwnPropertyDescriptor(bY,"stackAlloc")){bY.stackAlloc=function(){c3("'stackAlloc' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}if(!Object.getOwnPropertyDescriptor(bY,"AsciiToString")){bY.AsciiToString=function(){c3("'AsciiToString' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}if(!Object.getOwnPropertyDescriptor(bY,"stringToAscii")){bY.stringToAscii=function(){c3("'stringToAscii' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}if(!Object.getOwnPropertyDescriptor(bY,"UTF16ToString")){bY.UTF16ToString=function(){c3("'UTF16ToString' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}if(!Object.getOwnPropertyDescriptor(bY,"stringToUTF16")){bY.stringToUTF16=function(){c3("'stringToUTF16' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}if(!Object.getOwnPropertyDescriptor(bY,"lengthBytesUTF16")){bY.lengthBytesUTF16=function(){c3("'lengthBytesUTF16' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}if(!Object.getOwnPropertyDescriptor(bY,"UTF32ToString")){bY.UTF32ToString=function(){c3("'UTF32ToString' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}if(!Object.getOwnPropertyDescriptor(bY,"stringToUTF32")){bY.stringToUTF32=function(){c3("'stringToUTF32' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}if(!Object.getOwnPropertyDescriptor(bY,"lengthBytesUTF32")){bY.lengthBytesUTF32=function(){c3("'lengthBytesUTF32' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}if(!Object.getOwnPropertyDescriptor(bY,"allocateUTF8")){bY.allocateUTF8=function(){c3("'allocateUTF8' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}if(!Object.getOwnPropertyDescriptor(bY,"allocateUTF8OnStack")){bY.allocateUTF8OnStack=function(){c3("'allocateUTF8OnStack' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}bY.writeStackCookie=bi;bY.checkStackCookie=p;if(!Object.getOwnPropertyDescriptor(bY,"ALLOC_NORMAL")){Object.defineProperty(bY,"ALLOC_NORMAL",{configurable:true,get:function(){c3("'ALLOC_NORMAL' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}})}if(!Object.getOwnPropertyDescriptor(bY,"ALLOC_STACK")){Object.defineProperty(bY,"ALLOC_STACK",{configurable:true,get:function(){c3("'ALLOC_STACK' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}})}if(!Object.getOwnPropertyDescriptor(bY,"ALLOC_DYNAMIC")){Object.defineProperty(bY,"ALLOC_DYNAMIC",{configurable:true,get:function(){c3("'ALLOC_DYNAMIC' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}})}if(!Object.getOwnPropertyDescriptor(bY,"ALLOC_NONE")){Object.defineProperty(bY,"ALLOC_NONE",{configurable:true,get:function(){c3("'ALLOC_NONE' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}})}var bC;function cZ(dO){this.name="ExitStatus";this.message="Program terminated with exit("+dO+")";this.status=dO}var c8=false;aQ=function cs(){if(!bC){ab()}if(!bC){aQ=cs}};function bF(dS){bJ(aS==0,'cannot call main when async dependencies remain! (listen on Module["onRuntimeInitialized"])');bJ(bD.length==0,"cannot call main when preRun functions remain to be called");var dQ=bY._main;dS=dS||[];var dV=dS.length+1;var dO=bW((dV+1)*4);ar[dO>>2]=bB(bm);for(var dT=1;dT<dV;dT++){ar[(dO>>2)+dT]=bB(dS[dT-1])}ar[(dO>>2)+dV]=0;try{bY.___set_stack_limit(c1);var dR=dQ(dV,dO);dM(dR,true)}catch(dU){if(dU instanceof cZ){return}else{if(dU=="unwind"){cq=true;return}else{var dP=dU;if(dU&&typeof dU==="object"&&dU.stack){dP=[dU,dU.stack]}m("exception thrown: "+dP);aY(1,dU)}}}finally{c8=true}}function ab(dO){dO=dO||dE;if(aS>0){return}bi();z();if(aS>0){return}function dP(){if(bC){return}bC=true;bY.calledRun=true;if(di){return}dN();dp();if(bY.onRuntimeInitialized){bY.onRuntimeInitialized()}if(f){bF(dO)}aF()}if(bY.setStatus){bY.setStatus("Running...");setTimeout(function(){setTimeout(function(){bY.setStatus("")},1);dP()},1)}else{dP()}p()}bY.run=ab;function aT(){var dP=cp;var dR=m;var dQ=false;cp=m=function(dT){dQ=true};try{var dO=bY._fflush;if(dO){dO(0)}["stdout","stderr"].forEach(function(dU){var dV=D.analyzePath("/dev/"+dU);if(!dV){return}var dX=dV.object;var dT=dX.rdev;var dW=ad.ttys[dT];if(dW&&dW.output&&dW.output.length){dQ=true}})}catch(dS){}cp=dP;m=dR;if(dQ){cJ("stdio streams had content in them that was not flushed. you should set EXIT_RUNTIME to 1 (see the FAQ), or make sure to emit a newline when you printf etc.")}}function dM(dP,dO){aT();if(dO&&cq&&dP===0){return}if(cq){if(!dO){var dQ="program exited (with status: "+dP+"), but EXIT_RUNTIME is not set, so halting execution but not exiting the runtime or preventing further async execution (build with EXIT_RUNTIME=1, if you want a true shutdown)";m(dQ)}}else{di=true;bL=dP;cw();if(bY.onExit){bY.onExit(dP)}}aY(dP,new cZ(dP))}if(bY.preInit){if(typeof bY.preInit=="function"){bY.preInit=[bY.preInit]}while(bY.preInit.length>0){bY.preInit.pop()()}}var f=true;if(bY.noInitialRun){f=false}cq=true;ab()};
Index: /EcnlProtoTool/trunk/webapp/webmrbc/src/main.rb
===================================================================
--- /EcnlProtoTool/trunk/webapp/webmrbc/src/main.rb	(revision 438)
+++ /EcnlProtoTool/trunk/webapp/webmrbc/src/main.rb	(revision 439)
@@ -1,4 +1,4 @@
-# TOPPERSプロジェクト
-$MAKER_CODE = "\x00\x00\xB3"
+# メーカーコードを設定する
+$MAKER_CODE = "\x00\x00\x00"
 
 # ノードプロファイルオブジェクト
Index: /EcnlProtoTool/trunk/webapp/webmrbc/webmrbc.csproj
===================================================================
--- /EcnlProtoTool/trunk/webapp/webmrbc/webmrbc.csproj	(revision 438)
+++ /EcnlProtoTool/trunk/webapp/webmrbc/webmrbc.csproj	(revision 439)
@@ -75,5 +75,4 @@
     <Content Include="echonet_objects.json" />
     <Content Include="information.json" />
-    <Content Include="bridge.json" />
     <None Include="packages.config" />
     <None Include="Web.Debug.config">
